1088 lines
22 KiB
ArmAsm
1088 lines
22 KiB
ArmAsm
|
; ===================================================================
|
|||
|
; port of starport 2 to nasm. i cannot really tell what setborder is
|
|||
|
; supposed to do, but the rest works fine. nasm puts out some opcodes
|
|||
|
; that differ from tasm so it does not produce an identical binary at
|
|||
|
; the hash level, but it is identical in function. see the diff file.
|
|||
|
; ===================================================================
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;--------------------------------------------------------------------
|
|||
|
; StarPort Intro II V1.0
|
|||
|
;--------------------------------------------------------------------
|
|||
|
; Copyright (C) 1993 Future Crew
|
|||
|
;--------------------------------------------------------------------
|
|||
|
; code: Psi
|
|||
|
; music: Skaven
|
|||
|
;--------------------------------------------------------------------
|
|||
|
; This code is released to the public domain. You can do
|
|||
|
; whatever you like with this code, but remember, that if
|
|||
|
; you are just planning on making another small intro by
|
|||
|
; changing a few lines of code, be prepared to enter the
|
|||
|
; worldwide lamers' club. However, if you are looking at
|
|||
|
; this code in hope of learning something new, go right
|
|||
|
; ahead. That's exactly why this source was released.
|
|||
|
; (BTW: I don't claim there's anything new to find here,
|
|||
|
; but it's always worth looking, right?)
|
|||
|
;--------------------------------------------------------------------
|
|||
|
; The code is optimized mainly for size but also a little
|
|||
|
; for speed. The goal was to get this little bbs intro to
|
|||
|
; under 2K, and 1993 bytes sounded like a good size. Well,
|
|||
|
; it wasn't easy, and there are surely places left one could
|
|||
|
; squeeze a few extra bytes off...
|
|||
|
; Making a small intro is not hard. Making a small intro
|
|||
|
; with a nice feel is very hard, and you have to sacrifice
|
|||
|
; ideas to fit the intro to the limits you have set. I had
|
|||
|
; a lot of plans (a background piccy for example), but well,
|
|||
|
; the size limit came first.
|
|||
|
; I hope you enjoy my choice of size/feature ratio in this
|
|||
|
; intro! In case you are interested, this was a three evening
|
|||
|
; project (the last one spent testing).
|
|||
|
;--------------------------------------------------------------------
|
|||
|
; You can compile this with TASM, but the resulting COM-file
|
|||
|
; will be a lot larger than the released version. This is
|
|||
|
; because all the zero data is included to the result. The
|
|||
|
; released version was first compiled to a COM file, and then
|
|||
|
; a separate postprocessing program was ran which removed all
|
|||
|
; the zero data from the end of the file. If you are just
|
|||
|
; experimenting, recompiling is as easy as MAKE.BAT. If you
|
|||
|
; want to make this small again, you have to do some work as
|
|||
|
; well, and make your own postprocessor.
|
|||
|
;--------------------------------------------------------------------
|
|||
|
|
|||
|
XORTEXTS equ 0x17 ; xor's all text characters with this value.
|
|||
|
; original intro binary used 0x17
|
|||
|
|
|||
|
BORDERS equ 0 ;set to 1 for visible border-timings
|
|||
|
|
|||
|
[bits 16]
|
|||
|
org 100h
|
|||
|
|
|||
|
start: cld ;filler to make the filesize exactly 1993 bytes
|
|||
|
cld ;filler to make the filesize exactly 1993 bytes
|
|||
|
jmp main
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> setborder <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;descr: debug/change border color
|
|||
|
%macro setborder 1
|
|||
|
%if BORDERS
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
mov dx,3dah
|
|||
|
in al,dx
|
|||
|
mov dx,3c0h
|
|||
|
mov al,11h+32
|
|||
|
out dx,al
|
|||
|
mov al,%1
|
|||
|
out dx,al
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
%endif
|
|||
|
%endmacro
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Simplex Adlib Player <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;this doesn't just read raw data to output to adlib like the one
|
|||
|
;used in the last starport intro. This player really does have
|
|||
|
;note & instrument data it reads and processes!
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> output data to adlib <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
a_lodsboutaw03: ;size optimization related entry (instrument loading)
|
|||
|
call a_lodsboutaw
|
|||
|
add ah,3
|
|||
|
a_lodsboutaw: ;size optimization related entry (instrument loading)
|
|||
|
lodsb
|
|||
|
a_outaw:;: ;ah=reg,al=data
|
|||
|
push ax
|
|||
|
push cx
|
|||
|
xchg al,ah
|
|||
|
mov dx,388h
|
|||
|
out dx,al
|
|||
|
mov cx,7
|
|||
|
call a_wait
|
|||
|
mov dx,389h
|
|||
|
mov al,ah
|
|||
|
out dx,al
|
|||
|
mov cx,30
|
|||
|
call a_wait
|
|||
|
pop cx
|
|||
|
pop ax
|
|||
|
ret
|
|||
|
a_wait: in al,dx
|
|||
|
loop a_wait
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> load instrument to adlib <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
a_loadinstrument:;:
|
|||
|
;bx=channel, ds:si=offset to instrument data
|
|||
|
;mov ah,ds:a_inst_table[bx]
|
|||
|
mov ah,[bx+a_inst_table]
|
|||
|
mov cx,4
|
|||
|
.l: call a_lodsboutaw03
|
|||
|
add ah,20h-3
|
|||
|
loop .l
|
|||
|
add ah,40h
|
|||
|
call a_lodsboutaw03
|
|||
|
mov ah,bl
|
|||
|
add ah,0c0h
|
|||
|
jmp a_lodsboutaw
|
|||
|
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> set note on/off <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
a_playnote:;:
|
|||
|
;bx=channel, ax=data
|
|||
|
push bx
|
|||
|
xchg ah,bl
|
|||
|
add ah,0a0h
|
|||
|
call a_outaw
|
|||
|
mov al,bl
|
|||
|
add ah,010h
|
|||
|
pop bx
|
|||
|
jmp a_outaw
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> initialize/clear/shutup adlib <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
a_init:
|
|||
|
mov ax,00120h
|
|||
|
call a_outaw
|
|||
|
mov ax,00800h
|
|||
|
call a_outaw
|
|||
|
mov ah,0bdh
|
|||
|
call a_outaw
|
|||
|
mov bp,9
|
|||
|
xor bx,bx
|
|||
|
mov di,music_instruments
|
|||
|
.l: mov si,[di]
|
|||
|
add di,2
|
|||
|
call a_loadinstrument
|
|||
|
xor ax,ax
|
|||
|
call a_playnote
|
|||
|
inc bx
|
|||
|
dec bp
|
|||
|
jnz .l
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> advance music one row <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
a_dorow:
|
|||
|
sub word [a_musiccnt], byte 1
|
|||
|
jnc .end
|
|||
|
mov word [a_musiccnt],music_speed
|
|||
|
mov cx,music_channels
|
|||
|
mov di,music_patterns
|
|||
|
xor bx,bx
|
|||
|
.lp1: sub byte a_chdelaycnt[bx],1
|
|||
|
jns .lp2
|
|||
|
mov si,[di]
|
|||
|
xor ax,ax
|
|||
|
call a_playnote
|
|||
|
.ldata: lodsb
|
|||
|
or al,al
|
|||
|
jz .l7
|
|||
|
jns .l6
|
|||
|
sub al,81h
|
|||
|
mov a_chdelay[bx],al
|
|||
|
lodsb
|
|||
|
.l6: mov dl,al
|
|||
|
and ax, strict word 15
|
|||
|
mov bp,ax
|
|||
|
add bp,bp
|
|||
|
mov ax,ds:a_note_table[bp]
|
|||
|
shr dl,2
|
|||
|
;and dl,not 3
|
|||
|
and dl,0xFC
|
|||
|
add ah,dl
|
|||
|
call a_playnote
|
|||
|
mov al,a_chdelay[bx]
|
|||
|
mov a_chdelaycnt[bx],al
|
|||
|
mov [di],si
|
|||
|
.lp2: add di,4
|
|||
|
inc bx
|
|||
|
loop .lp1
|
|||
|
.end: ret
|
|||
|
.l7: mov si,[di+2]
|
|||
|
jmp .ldata
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Intro Routines <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sin/cos <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;entry: ax=angle (0..65535)
|
|||
|
; exit: ax=muller (-127..127)
|
|||
|
addwcos:add ax,[bx] ;optimized entry for wavesets
|
|||
|
mov [bx],ax
|
|||
|
cos: add ax,16384
|
|||
|
sin: mov bx,ax
|
|||
|
mov cx,bx
|
|||
|
and cx,1023
|
|||
|
neg cx
|
|||
|
add cx,1023
|
|||
|
shr bx,10
|
|||
|
mov ah,sintable[bx]
|
|||
|
xor al,al
|
|||
|
imul cx
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
mov ah,sintable[bx+1]
|
|||
|
xor al,al
|
|||
|
neg cx
|
|||
|
add cx,1023
|
|||
|
imul cx
|
|||
|
pop bx
|
|||
|
pop cx
|
|||
|
add ax,cx
|
|||
|
adc dx,bx
|
|||
|
shrd ax,dx,11
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> rand <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;returns a random value in range -4096..4095
|
|||
|
rand:
|
|||
|
mov eax,1107030247
|
|||
|
mul dword [seed]
|
|||
|
add eax,97177
|
|||
|
mov [seed],eax
|
|||
|
shr eax,15
|
|||
|
and ax,8191
|
|||
|
sub ax,4096
|
|||
|
;size optimizatin, some code moved from after all rand calls
|
|||
|
add bx,2
|
|||
|
mov [bx],ax
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> timer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
inittimer:
|
|||
|
mov eax,fs:[8*4]
|
|||
|
mov [oldint8],eax
|
|||
|
mov ax,cs
|
|||
|
shl eax,16
|
|||
|
mov ax,intti8 ;TODO ?????
|
|||
|
mov dx,17000 ;70hz
|
|||
|
jmp ml1
|
|||
|
deinittimer:
|
|||
|
mov eax,[oldint8]
|
|||
|
xor dx,dx
|
|||
|
ml1: cli
|
|||
|
mov fs:[8*4],eax
|
|||
|
mov al,036h
|
|||
|
out 43h,al
|
|||
|
mov al,dl
|
|||
|
out 40h,al
|
|||
|
mov al,dh
|
|||
|
out 40h,al
|
|||
|
sti
|
|||
|
ret
|
|||
|
|
|||
|
intti8: ;timer interrupt
|
|||
|
push ax
|
|||
|
mov al,20h
|
|||
|
out 20h,al
|
|||
|
inc word cs:framecounter
|
|||
|
pop ax
|
|||
|
iret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> load indexed palette <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
setpal:
|
|||
|
;ds:si=pointer to colorindices
|
|||
|
mov dx,3c8h
|
|||
|
xor al,al
|
|||
|
out dx,al
|
|||
|
inc dx
|
|||
|
mov cx,8
|
|||
|
.l1: xor bh,bh
|
|||
|
mov bl,[si]
|
|||
|
shr bl,2
|
|||
|
call setpl2
|
|||
|
mov bl,[si]
|
|||
|
shl bx,2
|
|||
|
call setpl2
|
|||
|
inc si
|
|||
|
loop .l1
|
|||
|
ret
|
|||
|
setpl2: and bx,15*2
|
|||
|
mov ax,word col0[bx]
|
|||
|
out dx,al
|
|||
|
mov al,ah
|
|||
|
out dx,al
|
|||
|
mov al,col0[bx+2]
|
|||
|
out dx,al
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> clear & copy videobuffer to screen <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
clearcopy:
|
|||
|
;---copy/clear buf
|
|||
|
xor edx,edx
|
|||
|
mov si,vbuf
|
|||
|
mov bx,4
|
|||
|
mov cx,200
|
|||
|
mov di,-4
|
|||
|
.l1: mov bp,5
|
|||
|
.l2: ;REPT 2
|
|||
|
mov eax,[si]
|
|||
|
add di,bx
|
|||
|
mov [si],edx
|
|||
|
add si,bx
|
|||
|
mov es:[di],eax
|
|||
|
|
|||
|
mov eax,[si]
|
|||
|
add di,bx
|
|||
|
mov [si],edx
|
|||
|
add si,bx
|
|||
|
mov es:[di],eax
|
|||
|
|
|||
|
dec bp
|
|||
|
jnz .l2
|
|||
|
add si,bx
|
|||
|
dec cx
|
|||
|
jnz .l1
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> draw a small pixel <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pset1: ;ds:di=destination center, si=xmask offset
|
|||
|
mov al,colb[si]
|
|||
|
or [di],al
|
|||
|
.l1: ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> draw a big pixel (depending on Z) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pset2: ;ds:di=destination center, si=xmask offset
|
|||
|
mov ax,colbww[si]
|
|||
|
or [di+0],ax
|
|||
|
or [di+44],ax
|
|||
|
cmp bp,8300 ;zcompare for size
|
|||
|
jl pset3
|
|||
|
;smaller one
|
|||
|
mov ax,colbw[si]
|
|||
|
or [di-44],ax
|
|||
|
or [di+88],ax
|
|||
|
mov ax,colbv[si]
|
|||
|
or [di-88],ax
|
|||
|
or [di+132],ax
|
|||
|
ret
|
|||
|
pset3: ;larger one
|
|||
|
or [di-44],ax
|
|||
|
or [di+88],ax
|
|||
|
mov ax,colbw[si]
|
|||
|
or [di-88],ax
|
|||
|
or [di+132],ax
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> add a letter composed of big dots to dotlist <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
letter3d:
|
|||
|
;bx=letter
|
|||
|
;si=basex
|
|||
|
;bp=basey
|
|||
|
sub bx,'A'
|
|||
|
jc .l0
|
|||
|
shl bx,3
|
|||
|
mov di,[nextdot]
|
|||
|
mov cx,8
|
|||
|
.l1: push cx
|
|||
|
push si
|
|||
|
mov cx,8
|
|||
|
.l2: cmp byte font[bx],0
|
|||
|
je .l3
|
|||
|
mov dots[di],si
|
|||
|
mov dots[di+2],bp
|
|||
|
;zsinus
|
|||
|
push si
|
|||
|
add si,[sinus1]
|
|||
|
sar si,6
|
|||
|
and si,63
|
|||
|
mov al,sintable[si]
|
|||
|
cbw
|
|||
|
pop si
|
|||
|
shl ax,2
|
|||
|
mov dots[di+4],ax
|
|||
|
;
|
|||
|
mov word dots[di+6], pset2
|
|||
|
add di,8
|
|||
|
and di,DOTNUM1*8-1
|
|||
|
.l3: inc bx
|
|||
|
add si,LETTERDOTSPACING
|
|||
|
loop .l2
|
|||
|
pop si
|
|||
|
add bx,320-8
|
|||
|
add bp,LETTERDOTSPACING
|
|||
|
pop cx
|
|||
|
loop .l1
|
|||
|
mov [nextdot],di
|
|||
|
.l0: ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> calc 2x2 rotation matrix <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
set3drot:
|
|||
|
;ax=angle,ds:di=pointer to matrix
|
|||
|
push ax
|
|||
|
call sin
|
|||
|
mov [di+r01-r00],ax
|
|||
|
neg ax
|
|||
|
mov [di+ar10-r00],ax
|
|||
|
pop ax
|
|||
|
call cos
|
|||
|
mov [di+r00-r00],ax
|
|||
|
mov [di+ar11-r00],ax
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> rotate point with 2x2 rotation matrix (innerpart) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
rotate2x2i:
|
|||
|
;(di,bp)->(cx) with matrix half at ds:si
|
|||
|
;this is the inner part, called twice
|
|||
|
push bx
|
|||
|
mov ax,di
|
|||
|
imul word [si]
|
|||
|
mov cx,ax
|
|||
|
mov bx,dx
|
|||
|
mov ax,bp
|
|||
|
imul word [si+2]
|
|||
|
add cx,ax
|
|||
|
adc bx,dx
|
|||
|
shrd cx,bx,14
|
|||
|
pop bx
|
|||
|
add si,4
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> advance demo one frame (raw work) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
doit:
|
|||
|
;======wait for border
|
|||
|
setborder 0
|
|||
|
mov dx,3dah
|
|||
|
.lw1: in al,dx
|
|||
|
test al,8
|
|||
|
jnz .lw1
|
|||
|
.lw2: in al,dx
|
|||
|
test al,8
|
|||
|
jz .lw2
|
|||
|
setborder 30
|
|||
|
;======done
|
|||
|
mov si,[index]
|
|||
|
push si
|
|||
|
call setpal
|
|||
|
pop si
|
|||
|
add si,9
|
|||
|
cmp si, index4
|
|||
|
jbe .li2
|
|||
|
mov si, index1
|
|||
|
.li2: mov [index],si
|
|||
|
mov al,2
|
|||
|
mov ah,[si+8]
|
|||
|
mov dx,3c4h
|
|||
|
out dx,ax
|
|||
|
call clearcopy
|
|||
|
;======do timer simulation stuff
|
|||
|
setborder 28
|
|||
|
xor cx,cx
|
|||
|
mov word [scrollsubber],0
|
|||
|
xchg cx,[framecounter]
|
|||
|
jcxz .l78
|
|||
|
.l77: push cx
|
|||
|
add word [scrollsubber],SCROLLSPEED
|
|||
|
call doit70
|
|||
|
pop cx
|
|||
|
loop .l77
|
|||
|
setborder 26
|
|||
|
.l78:;======
|
|||
|
;---redraw dots
|
|||
|
mov cx,DOTNUM
|
|||
|
mov bx, dots
|
|||
|
.l1: push cx
|
|||
|
push bx
|
|||
|
mov bp,[bx+2]
|
|||
|
mov di,[bx+4]
|
|||
|
cmp word [bx+6], pset2
|
|||
|
jne .l5
|
|||
|
;ysinus
|
|||
|
mov cx,[bx]
|
|||
|
mov si,[sinus2]
|
|||
|
add si,cx
|
|||
|
sar si,7
|
|||
|
and si,63
|
|||
|
mov al,sintable[si]
|
|||
|
cbw
|
|||
|
shl ax,2
|
|||
|
add bp,ax
|
|||
|
;scroll
|
|||
|
sub cx,[scrollsubber]
|
|||
|
mov [bx],cx
|
|||
|
cmp cx,-3900
|
|||
|
jl .l7
|
|||
|
cmp cx,3900
|
|||
|
jg .l7
|
|||
|
.l5: ;--rotate coordinates
|
|||
|
mov si, r00
|
|||
|
call rotate2x2i
|
|||
|
push cx
|
|||
|
call rotate2x2i
|
|||
|
pop di
|
|||
|
mov bp,[bx]
|
|||
|
mov si, p00
|
|||
|
push cx
|
|||
|
call rotate2x2i
|
|||
|
push cx
|
|||
|
call rotate2x2i
|
|||
|
pop bp
|
|||
|
pop di
|
|||
|
;bp=Z, cx=X, di=Y
|
|||
|
add bp,[zadder]
|
|||
|
cmp bp,1024
|
|||
|
jl .l7
|
|||
|
;--project
|
|||
|
mov ax,256
|
|||
|
imul di
|
|||
|
idiv bp
|
|||
|
add ax, strict word 100
|
|||
|
mov di,ax
|
|||
|
mov ax,307
|
|||
|
imul cx
|
|||
|
idiv bp
|
|||
|
add ax,160
|
|||
|
mov si,ax
|
|||
|
;si=SX, di=SY
|
|||
|
mov ax,[bx+6]
|
|||
|
cmp si,319
|
|||
|
ja .l7
|
|||
|
cmp di,199
|
|||
|
ja .l7
|
|||
|
;calc dest address & xmask offset
|
|||
|
add di,di
|
|||
|
mov di,rows[di]
|
|||
|
add si,si
|
|||
|
add di,cols[si]
|
|||
|
;
|
|||
|
call ax
|
|||
|
.l7: pop bx
|
|||
|
pop cx
|
|||
|
add bx,8
|
|||
|
dec cx
|
|||
|
jnz .l1
|
|||
|
ret
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> advance demo counters 1/70 sec <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;a separate routine is used to get frame syncronization for
|
|||
|
;slower machines (and slow vga cards)
|
|||
|
doit70:
|
|||
|
;---add sinuses & udforce
|
|||
|
add word [sinus1],70
|
|||
|
add word [sinus2],177
|
|||
|
add dword [udforced],3000
|
|||
|
;---set wave1
|
|||
|
mov bx, wwave
|
|||
|
mov ax,77
|
|||
|
call addwcos
|
|||
|
sar ax,5
|
|||
|
mov [wave1],ax
|
|||
|
;---set zadder
|
|||
|
mov bx, zwave
|
|||
|
mov ax,370
|
|||
|
call addwcos
|
|||
|
sar ax,3
|
|||
|
add ax,8888
|
|||
|
mov [zadder],ax
|
|||
|
;---set 3d rotate YZ
|
|||
|
mov bx, udwave
|
|||
|
mov ax,[wave1]
|
|||
|
call addwcos
|
|||
|
imul word [udforce]
|
|||
|
shrd ax,dx,8
|
|||
|
mov di, r00
|
|||
|
call set3drot
|
|||
|
;---set 3d rotate XZ
|
|||
|
mov bx, lrwave
|
|||
|
mov ax,200
|
|||
|
call addwcos
|
|||
|
sar ax,1
|
|||
|
mov di, p00
|
|||
|
call set3drot
|
|||
|
;---add more text to 3d scroller
|
|||
|
sub word [textcnt],SCROLLSPEED
|
|||
|
jnc .lt1
|
|||
|
mov word [textcnt],LETTERDOTSPACING*8-1
|
|||
|
mov si,[text]
|
|||
|
mov bl,[si]
|
|||
|
xor bl,XORTEXTS
|
|||
|
and bx,255
|
|||
|
jz .lt3
|
|||
|
inc si
|
|||
|
mov [text],si
|
|||
|
cmp bl,32
|
|||
|
jge .lt4
|
|||
|
shl bx,SCROLLDELAYSHL
|
|||
|
mov [textcnt],bx
|
|||
|
jmp .lt1
|
|||
|
.lt4: mov bp,0
|
|||
|
mov si,4100
|
|||
|
call letter3d
|
|||
|
jmp .lt1
|
|||
|
.lt3: mov si, text0
|
|||
|
mov [text],si
|
|||
|
.lt1: ;;;
|
|||
|
;======adlib music
|
|||
|
jmp a_dorow
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Main routine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;stack @ cs:0fffeh
|
|||
|
|
|||
|
main:
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Zero Zerodata & Init Segs <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
[bits 16]
|
|||
|
push cs
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
mov cx,(zeroend-zerobeg)/2
|
|||
|
mov di, zerobeg
|
|||
|
xor ax,ax ;zero used later
|
|||
|
rep stosw
|
|||
|
mov dx,0a000h
|
|||
|
mov es,dx
|
|||
|
;segments now set: DS=code/data ES=vram
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Check for 386 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
push sp
|
|||
|
pop dx
|
|||
|
cmp dx,sp
|
|||
|
jz .lo1
|
|||
|
.lo2: jmp endansi ;80(1)86
|
|||
|
.lo1: mov bx, rows
|
|||
|
sgdt [bx]
|
|||
|
cmp byte [bx+5],0
|
|||
|
js .lo2
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Check for VGA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov fs,ax ;ax was zero
|
|||
|
;segments now set: DS=code/data ES=vram FS=zeropage
|
|||
|
mov ax,1a00h
|
|||
|
int 10h
|
|||
|
cmp al,01ah
|
|||
|
jne endansi ;no vga
|
|||
|
cmp bl,7
|
|||
|
jb endansi ;no vga
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Initialize - doinit 0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;copy vga font to font buffer
|
|||
|
mov ax,13h
|
|||
|
int 10h
|
|||
|
mov cx,'Z'-'A'+1
|
|||
|
mov bx,16
|
|||
|
mov ax,'A'+0eh*256
|
|||
|
.la1: int 10h
|
|||
|
inc al
|
|||
|
loop .la1
|
|||
|
mov cx,8*320/2
|
|||
|
mov bx, font
|
|||
|
xor di,di
|
|||
|
.la2: mov ax,es:[di]
|
|||
|
mov [di+bx],ax
|
|||
|
add di,2
|
|||
|
loop .la2
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Initialize - vga <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;init videomode 320x200x16
|
|||
|
mov ax,0dh
|
|||
|
int 10h
|
|||
|
;set up rows/cols/etc
|
|||
|
mov si,-2
|
|||
|
mov di, vbuf-44
|
|||
|
mov bl,128
|
|||
|
xor bp,bp
|
|||
|
jmp .lb5
|
|||
|
.lb1: mov rows[si],di
|
|||
|
mov colb[si],bl
|
|||
|
mov colbww[si],cx
|
|||
|
shr cl,1
|
|||
|
rcr ch,1
|
|||
|
mov colbw[si],dx
|
|||
|
shr dl,1
|
|||
|
rcr dh,1
|
|||
|
mov colbv[si],ax
|
|||
|
shr al,1
|
|||
|
rcr ah,1
|
|||
|
mov cols[si],bp
|
|||
|
ror bl,1
|
|||
|
jnc .lb4
|
|||
|
inc bp
|
|||
|
.lb5: mov cx,0000000011111110b
|
|||
|
mov dx,0000000001111100b
|
|||
|
mov ax,0000000000111000b
|
|||
|
.lb4: add di,44
|
|||
|
add si,2
|
|||
|
cmp si,(320)*2
|
|||
|
jle .lb1
|
|||
|
;set simplex palette order (16 color mode)
|
|||
|
mov dx,3dah
|
|||
|
in al,dx
|
|||
|
mov dl,0c0h
|
|||
|
xor ax,ax
|
|||
|
mov cx,16
|
|||
|
.lb2: out dx,al
|
|||
|
out dx,al
|
|||
|
inc al
|
|||
|
loop .lb2
|
|||
|
mov al,20h
|
|||
|
out dx,al
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Initialize - doinit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov cx,DOTNUM
|
|||
|
mov bx, dots-2
|
|||
|
.lc1: push cx
|
|||
|
call rand
|
|||
|
call rand
|
|||
|
call rand
|
|||
|
sar ax,2
|
|||
|
mov [bx],ax
|
|||
|
add bx,2
|
|||
|
mov word [bx], pset1
|
|||
|
pop cx
|
|||
|
loop .lc1
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Initialize - others <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
call a_init
|
|||
|
call inittimer
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Do the intro stuff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
again: call doit
|
|||
|
mov ah,1
|
|||
|
int 16h
|
|||
|
jz again
|
|||
|
mov ah,0
|
|||
|
int 16h
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DeInitialize <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
call deinittimer
|
|||
|
call a_init ;reinitializing adlib shuts it up
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Display end ansi (only thing done if no 386 or vga) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
endansi:mov ax,3h
|
|||
|
int 10h
|
|||
|
mov si, endtext
|
|||
|
push 0b800h ;if the user has an MGA or HGC
|
|||
|
pop es ;it's not my problem :-)
|
|||
|
xor di,di
|
|||
|
mov ah,0eh
|
|||
|
.l1: lodsb
|
|||
|
xor al,XORTEXTS
|
|||
|
cmp al,31
|
|||
|
jae .l2
|
|||
|
mov ah,al
|
|||
|
jmp .l1
|
|||
|
.l2: jz .l3
|
|||
|
stosw
|
|||
|
jmp .l1
|
|||
|
.l3: mov ax,4c00h
|
|||
|
int 21h
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Initialized (nonzero) data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
;pointer & delay counter for scrolltext
|
|||
|
text dw text0
|
|||
|
textcnt dw 1
|
|||
|
|
|||
|
;3d rotation values (more in zerodata)
|
|||
|
udforced:
|
|||
|
dw 0
|
|||
|
udforce dw 64
|
|||
|
lrwave dw -20000
|
|||
|
zwave dw 16000
|
|||
|
|
|||
|
sintable: ;sine table (circle is 64 units)
|
|||
|
db 0,12,24,36,48,59,70,80,89,98,105,112,117,121,124,126,127,126
|
|||
|
db 124,121,117,112,105,98,89,80,70,59,48,36,24,12,0,-12,-24,-36
|
|||
|
db -48,-59,-70,-80,-89,-98,-105,-112,-117,-121,-124,-126,-127
|
|||
|
db -126,-124,-121,-117,-112,-105,-98,-89,-80,-70,-59,-48,-36
|
|||
|
db -24,-12,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54
|
|||
|
db 57,59,62,65,67,70
|
|||
|
|
|||
|
;adlib player data
|
|||
|
a_inst_table:
|
|||
|
|
|||
|
db 20h+0,20h+1,20h+2,20h+8,20h+9,20h+10,20h+16,20h+17,20h+18
|
|||
|
NTB equ 8192 ;+1024*1
|
|||
|
a_note_table:
|
|||
|
dw NTB+363,NTB+385,NTB+408,NTB+432,NTB+458,NTB+485
|
|||
|
dw NTB+514,NTB+544,NTB+577,NTB+611,NTB+647,NTB+868
|
|||
|
;note: a zero word is expected after this table (found in col0)
|
|||
|
|
|||
|
col0 db 0, 0, 0 ,0 ;background color
|
|||
|
col1 db 0,15,35 ,0 ;delay color 3
|
|||
|
col2 db 16,30,48 ,0 ;delay color 2
|
|||
|
col3 db 32,45,55 ,0 ;delay color 1
|
|||
|
col4 db 60,61,62 ;brightest color
|
|||
|
;1 . x . x . x . x . x . x . x . x
|
|||
|
;2 . . x x . . x x . . x x . . x x
|
|||
|
;4 . . . . x x x x . . . . x x x x
|
|||
|
;8 . . . . . . . . x x x x x x x x
|
|||
|
;palette indices for 4 palettes. Last number is bitplane to write
|
|||
|
;during the frame having this palette
|
|||
|
index1 db 04h,34h,24h,34h,14h,34h,24h,34h ,1 ;1248
|
|||
|
index2 db 03h,23h,13h,23h,44h,44h,44h,44h ,8 ;8124
|
|||
|
index3 db 02h,12h,44h,44h,33h,33h,44h,44h ,4 ;4812
|
|||
|
index4 db 01h,44h,33h,44h,22h,44h,33h,44h ,2 ;2481
|
|||
|
index dw index1 ;offset to current index
|
|||
|
|
|||
|
;################## Music - (tune by skaven/fc) ###################
|
|||
|
;generated with ST3->SIMPLEXADLIB, handoptimized by psi (283 bytes)
|
|||
|
music_channels equ 8
|
|||
|
music_speed equ 8
|
|||
|
music_instruments:
|
|||
|
dw ains6
|
|||
|
dw ains2
|
|||
|
dw ains4
|
|||
|
dw ains3
|
|||
|
dw ains3
|
|||
|
dw ains1
|
|||
|
dw ains1
|
|||
|
dw ains4
|
|||
|
ains1:
|
|||
|
db 65,194,6,0,35,242,240,240,1,0,4
|
|||
|
ains2:
|
|||
|
db 145,64,135,128,243,111,35,3,1,1,2
|
|||
|
ains3:
|
|||
|
db 225,33,17,128,17,19,34,34,0,0,12
|
|||
|
ains4:
|
|||
|
db 97,33,27,0,98,132,86,85,0,0,14
|
|||
|
ains6:
|
|||
|
db 145,64,135,136,243,111,35,3,1,1,2
|
|||
|
music_patterns:
|
|||
|
ach0 dw ach0d, ach0dr
|
|||
|
ach1 dw ach1d, ach1dr
|
|||
|
ach2 dw ach2d, ach2dr
|
|||
|
ach3 dw ach3d, ach3d
|
|||
|
ach4 dw ach4d, ach4d
|
|||
|
ach5 dw ach5d, ach5d
|
|||
|
ach6 dw ach6d, ach6d
|
|||
|
ach7 dw ach7d, ach7d
|
|||
|
ach0d:
|
|||
|
db 081h
|
|||
|
ach0dr:
|
|||
|
db 057h,050h,050h,055h,057h,050h,055h,057h
|
|||
|
db 050h,055h,057h,050h,055h,057h,050h,055h
|
|||
|
db 0
|
|||
|
ach1d:
|
|||
|
db 081h
|
|||
|
ach1dr:
|
|||
|
db 050h,055h,057h,050h,055h,057h,050h,055h
|
|||
|
db 057h,050h,055h,057h,050h,055h,057h,050h
|
|||
|
db 0
|
|||
|
ach2d:
|
|||
|
db 0C0h,050h,084h
|
|||
|
db 030h,020h,030h,020h,02Ah,01Ah,02Ah,01Ah
|
|||
|
db 030h,020h,030h,020h,02Ah,01Ah,02Ah,01Ah
|
|||
|
ach2dr:
|
|||
|
db 030h,020h,030h,020h,02Ah,01Ah,02Ah,01Ah
|
|||
|
db 025h,015h,025h,015h,028h,018h,02Ah,01Ah
|
|||
|
db 0
|
|||
|
ach3d:
|
|||
|
db 0A0h,050h,040h,0C0h,040h,088h,040h,040h
|
|||
|
db 03Ah,042h,090h,045h,088h,040h,042h,040h
|
|||
|
db 047h,090h,04Ah,088h,045h,098h,040h
|
|||
|
db 0
|
|||
|
ach4d:
|
|||
|
db 0A0h,050h,030h,0C0h,047h,088h,047h,043h
|
|||
|
db 042h,045h,047h,045h,048h,047h,047h,050h
|
|||
|
db 052h,084h,050h,04Ah,088h,050h,098h,045h
|
|||
|
db 0
|
|||
|
ach5d:
|
|||
|
db 0C0h,020h,0A0h,010h,010h,090h,010h,02Ah
|
|||
|
db 025h,088h,028h,02Ah,090h,010h,02Ah,025h
|
|||
|
db 088h,028h,02Ah
|
|||
|
db 0
|
|||
|
ach6d:
|
|||
|
db 0C0h,020h,0A0h,020h,020h,090h,020h,01Ah
|
|||
|
db 015h,088h,018h,01Ah,090h,020h,01Ah,015h
|
|||
|
db 088h,018h,01Ah
|
|||
|
db 0
|
|||
|
ach7d:
|
|||
|
db 0C0h,00Ch,0FEh,050h,090h,00Ch,081h,04Ah
|
|||
|
db 050h,084h,052h,055h,086h,04Ah,081h,050h
|
|||
|
db 04Ah,086h,050h,082h,055h,098h,045h
|
|||
|
db 0
|
|||
|
;#########################################################
|
|||
|
|
|||
|
SCROLLSPEED equ 90
|
|||
|
SCROLLDELAYSHL equ 9
|
|||
|
LETTERDOTSPACING equ 128
|
|||
|
|
|||
|
db 0fch
|
|||
|
|
|||
|
text0: ;scrolltext (numbers are delays)
|
|||
|
db 31 ^ XORTEXTS
|
|||
|
db 25 ^ XORTEXTS
|
|||
|
db 'C' ^ XORTEXTS
|
|||
|
db 'A' ^ XORTEXTS
|
|||
|
db 'L' ^ XORTEXTS
|
|||
|
db 'L' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 'S' ^ XORTEXTS
|
|||
|
db 'T' ^ XORTEXTS
|
|||
|
db 'A' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'P' ^ XORTEXTS
|
|||
|
db 'O' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'T' ^ XORTEXTS
|
|||
|
db 9 ^ XORTEXTS
|
|||
|
db 'F' ^ XORTEXTS
|
|||
|
db 'U' ^ XORTEXTS
|
|||
|
db 'T' ^ XORTEXTS
|
|||
|
db 'U' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'E' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 'C' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'E' ^ XORTEXTS
|
|||
|
db 'W' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 'W' ^ XORTEXTS
|
|||
|
db 'O' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'L' ^ XORTEXTS
|
|||
|
db 'D' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 'H' ^ XORTEXTS
|
|||
|
db 'Q' ^ XORTEXTS
|
|||
|
db 9 ^ XORTEXTS
|
|||
|
db 'C' ^ XORTEXTS
|
|||
|
db 'D' ^ XORTEXTS
|
|||
|
db 'N' ^ XORTEXTS
|
|||
|
db 9 ^ XORTEXTS
|
|||
|
db 'G' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'A' ^ XORTEXTS
|
|||
|
db 'V' ^ XORTEXTS
|
|||
|
db 'I' ^ XORTEXTS
|
|||
|
db 'S' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 'E' ^ XORTEXTS
|
|||
|
db 'U' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'O' ^ XORTEXTS
|
|||
|
db 9 ^ XORTEXTS
|
|||
|
db 'A' ^ XORTEXTS
|
|||
|
db 'N' ^ XORTEXTS
|
|||
|
db 'D' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 'M' ^ XORTEXTS
|
|||
|
db 'O' ^ XORTEXTS
|
|||
|
db 'R' ^ XORTEXTS
|
|||
|
db 'E' ^ XORTEXTS
|
|||
|
db 0 ^ XORTEXTS
|
|||
|
|
|||
|
endtext: ;endansi... well... endansiline (numbers are colors)
|
|||
|
db 15 ^ XORTEXTS
|
|||
|
db 'S' ^ XORTEXTS
|
|||
|
db 't' ^ XORTEXTS
|
|||
|
db 'a' ^ XORTEXTS
|
|||
|
db 'r' ^ XORTEXTS
|
|||
|
db 'P' ^ XORTEXTS
|
|||
|
db 'o' ^ XORTEXTS
|
|||
|
db 'r' ^ XORTEXTS
|
|||
|
db 't' ^ XORTEXTS
|
|||
|
db 3 ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db '<EFBFBD>' ^ XORTEXTS
|
|||
|
db '<EFBFBD>' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 11 ^ XORTEXTS
|
|||
|
db 'V' ^ XORTEXTS
|
|||
|
db '3' ^ XORTEXTS
|
|||
|
db '2' ^ XORTEXTS
|
|||
|
db 'b' ^ XORTEXTS
|
|||
|
db 'i' ^ XORTEXTS
|
|||
|
db 's' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db '+' ^ XORTEXTS
|
|||
|
db '3' ^ XORTEXTS
|
|||
|
db '5' ^ XORTEXTS
|
|||
|
db '8' ^ XORTEXTS
|
|||
|
db '-' ^ XORTEXTS
|
|||
|
db '0' ^ XORTEXTS
|
|||
|
db '-' ^ XORTEXTS
|
|||
|
db '8' ^ XORTEXTS
|
|||
|
db '0' ^ XORTEXTS
|
|||
|
db '4' ^ XORTEXTS
|
|||
|
db '4' ^ XORTEXTS
|
|||
|
db '6' ^ XORTEXTS
|
|||
|
db '2' ^ XORTEXTS
|
|||
|
db '6' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db '+' ^ XORTEXTS
|
|||
|
db '3' ^ XORTEXTS
|
|||
|
db '5' ^ XORTEXTS
|
|||
|
db '8' ^ XORTEXTS
|
|||
|
db '-' ^ XORTEXTS
|
|||
|
db '0' ^ XORTEXTS
|
|||
|
db '-' ^ XORTEXTS
|
|||
|
db '8' ^ XORTEXTS
|
|||
|
db '0' ^ XORTEXTS
|
|||
|
db '4' ^ XORTEXTS
|
|||
|
db '1' ^ XORTEXTS
|
|||
|
db '1' ^ XORTEXTS
|
|||
|
db '3' ^ XORTEXTS
|
|||
|
db '3' ^ XORTEXTS
|
|||
|
db 3 ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db '<EFBFBD>' ^ XORTEXTS
|
|||
|
db '<EFBFBD>' ^ XORTEXTS
|
|||
|
db ' ' ^ XORTEXTS
|
|||
|
db 15 ^ XORTEXTS
|
|||
|
db 'F' ^ XORTEXTS
|
|||
|
db 'C' ^ XORTEXTS
|
|||
|
db '-' ^ XORTEXTS
|
|||
|
db 'W' ^ XORTEXTS
|
|||
|
db 'H' ^ XORTEXTS
|
|||
|
db 'Q' ^ XORTEXTS
|
|||
|
db 31 ^ XORTEXTS
|
|||
|
endtext1:
|
|||
|
|
|||
|
db 0fch
|
|||
|
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Uninitialized (zero) data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
zerobeg: ;start zero clear from here
|
|||
|
|
|||
|
rows dw 320 dup(0) ;offsets to screen rows
|
|||
|
cols dw 320 dup(0) ;offsets to screen cols
|
|||
|
colb db 320 dup(0,0) ;bitmasks for screen cols
|
|||
|
colbv dw 320 dup(0) ;wide -"-
|
|||
|
colbw dw 320 dup(0) ;wider -"-
|
|||
|
colbww dw 320 dup(0) ;very wide -"-
|
|||
|
|
|||
|
ALIGN 4
|
|||
|
db 44*8 dup(0) ;negative overflow for videobuffer
|
|||
|
vbuf:
|
|||
|
db 44*200 dup(0) ;video buffer
|
|||
|
db 44*8 dup(0) ;positive overflow for videobuffer
|
|||
|
|
|||
|
ALIGN 4
|
|||
|
font:
|
|||
|
db 8 dup(320 dup(0)) ;font buffer
|
|||
|
|
|||
|
|
|||
|
DOTNUM1 equ 256 ;number of dots used for text
|
|||
|
DOTNUM equ 444 ;total number of dots
|
|||
|
ALIGN 4
|
|||
|
dots:
|
|||
|
dw DOTNUM dup(0,0,0,0) ;x,y,z,routine data for each dot
|
|||
|
|
|||
|
;2x2 rotation matrices
|
|||
|
r00: dw 0
|
|||
|
ar10: dw 0
|
|||
|
r01: dw 0
|
|||
|
ar11: dw 0
|
|||
|
p00: dw 0
|
|||
|
p10: dw 0
|
|||
|
p01: dw 0
|
|||
|
p11: dw 0
|
|||
|
|
|||
|
;zero initialized 3d rotation stuff
|
|||
|
zadder dw 0
|
|||
|
wave1 dw 0
|
|||
|
udwave dw 0
|
|||
|
wwave dw 0
|
|||
|
sinus1 dw 0
|
|||
|
sinus2 dw 0
|
|||
|
|
|||
|
;adlib data
|
|||
|
a_musiccnt dw 0
|
|||
|
a_chdelaycnt db 9 dup(0)
|
|||
|
a_chdelay db 9 dup(0)
|
|||
|
ALIGN 2
|
|||
|
|
|||
|
;misc
|
|||
|
nextdot dw 0
|
|||
|
scrollsubber dw 0
|
|||
|
framecounter dw 0
|
|||
|
oldint8 dd 0
|
|||
|
seed dd 0
|
|||
|
|
|||
|
padder db 16 dup(0)
|
|||
|
zeroend: ;end zero clear here
|