First commit
parent
eb6d904ff3
commit
aa2dd368d7
|
@ -0,0 +1,923 @@
|
|||
jumps
|
||||
FLIPPERL EQU 2 ;OBS! M<>STA VARA 2 F™R ATT DET SKA BLI RŽTT SHIFTKEYS
|
||||
FLIPPERR EQU 1
|
||||
tt equ 5 ;cpe
|
||||
nn equ 6
|
||||
rotslowdown=2
|
||||
SPLH=33
|
||||
SW=336
|
||||
BPL=SW/4
|
||||
banh=576
|
||||
STOTMAX EQU 2048
|
||||
flipstruc struc
|
||||
typ DB 1 ;Left/Right
|
||||
LastFrame DB 1 ;Blit again?
|
||||
LeftX DW 1 ;Leftmost block position
|
||||
TopY DW 1 ;Uppermost block position
|
||||
FlipX DW 1 ;Words wide
|
||||
FlipY DW 1 ;Lines high
|
||||
FlipX1 DW 1 ;Left Border
|
||||
FlipX2 DW 1 ;Right Border
|
||||
FlipY1 DW 1 ;Upper Border
|
||||
FlipY2 DW 1 ;Lower Border
|
||||
RotCentX DW 1
|
||||
RotCentY DW 1
|
||||
PowerZonE DW 1 ;Quadrants for power calculations
|
||||
FlipSize DW 1 ;Offset to next flipper
|
||||
FlipVinkelHast DW 1 ;Speed °/200:th second
|
||||
FlipVinkel DW 1 ;Angel from zero
|
||||
FlipFrame DW 1 ;Frame to use
|
||||
FlipFrames DW 1 ;Last frame
|
||||
FlipFramesMax DW 1
|
||||
FlipAxUp DW 1
|
||||
FlipAxDown DW 1
|
||||
FlipMaxHastUp DW 1
|
||||
FlipMaxHastDown DW 1
|
||||
LASTGFXFRAME DW 0
|
||||
FLIPGFXSTART DW ?
|
||||
FLIPMAXPEK DW ?
|
||||
FLIPTOPPEK DW ?
|
||||
FLIPPEK DW ?
|
||||
FLIPTAB DW ?
|
||||
FLIPDIFS DW ?
|
||||
FlipData Dw 1 ;Data for flippers
|
||||
ENDS
|
||||
.286
|
||||
false equ 0
|
||||
true equ 255
|
||||
include \source\macros1.asm
|
||||
public kollakulan,flipper3
|
||||
data segment para public 'data'
|
||||
extrn exahitx,exahity,rotation,sc_X,sc_y,sin,adjusttable,x_pos,y_pos,x_pos_hi,y_pos_hi,x_hast,y_hast,gfxmask21_offset,gfxmask23_offset,gfxmask13_offset,hitpointer:word,screenhast,screenpos,screenposy,materialdata,bumper2lista_l,bumperlista_l,fliplinfo,gravx,gravy
|
||||
extrn inside_rastint:byte,holdstill:byte,ballhigh:byte,hitvalue:byte,materialbit:byte,bumperwashit:byte,ball_down:byte,allowflip:byte,shiftkeys:byte,tiltflag:byte,tiltkey:byte
|
||||
EVENDATA
|
||||
XY_LIST DW 16,8 ,16,9 ,16,10 ,15,11 ,15,12 ,14,13 ,13,14 ,12,15 ,11,15 ,10,16 ,9,16 ,8,16 ,7,16 ,6,16 ,5,15 ,4,15 ,3,14 ,2,13 ,1,12 ,1,11 ,0,10 ,0,9 ,0,8 ,0,7 ,0,6 ,1,5 ,1,4 ,2,3 ,3,2 ,4,1 ,5,1 ,6,0 ,7,0 ,8,0 ,9,0 ,10,0 ,11,1 ,12,1 ,13,2 ,14,3 ,15,4 ,15,5 ,16,6 ,16,7
|
||||
SC_KV DW ?
|
||||
ANTALPIX DB ?
|
||||
EVENDATA
|
||||
xtoadd dw 0
|
||||
ytoadd dw 0
|
||||
;********************************** R™R EJ
|
||||
materialinfo label word
|
||||
FRVAGG DW ?
|
||||
FRBoLL DW ?
|
||||
STUTS DW ?
|
||||
MINSTHAST DW ?
|
||||
INFVINK DW ?
|
||||
;***********************************
|
||||
MINUSHAST DW -4100
|
||||
PLUSHAST DW 4100
|
||||
bumperpower DW -7000
|
||||
kickerpower DW -2000
|
||||
kickminhast DW -300
|
||||
TILTHASTFW DW 600
|
||||
TILTHASTRV DW -200
|
||||
public MINUSHAST,PLUSHAST,bumperpower,kickerpower,kickminhast,TILTHASTFW,tILTHASTRv
|
||||
data ends
|
||||
MASK1_2 SEGMENT PARA PUBLIC 'DATA'
|
||||
MASK1_2 ENDS
|
||||
MASK2_2 SEGMENT PARA PUBLIC 'DATA'
|
||||
MASK2_2 ENDS
|
||||
MASK1_1 SEGMENT PARA PUBLIC 'DATA'
|
||||
MASK1_1 ENDS
|
||||
FlipBit Equ 10b
|
||||
RubberBit Equ 3
|
||||
StaalBit Equ 110b
|
||||
SteelBit Equ 101b
|
||||
PlastBit Equ 7
|
||||
cos equ offset sin+512*2
|
||||
code segment para public 'code'
|
||||
assume cs:code,ds:data
|
||||
extrn moveflipmask:near
|
||||
KollaKulan proc near
|
||||
CMP CS:INKO,TRUE
|
||||
JE INKOD
|
||||
MOV CS:INKO,TRUE
|
||||
pusha
|
||||
call sc_program
|
||||
popa
|
||||
MOV CS:INKO,FALSE
|
||||
INKOD: retn
|
||||
INKO DB FALSE
|
||||
KollaKulan endp
|
||||
sc_program proc near
|
||||
CMP HOLDSTILL,TRUE
|
||||
JE NOMOVE
|
||||
|
||||
call sc_krock
|
||||
jc sc_nocoll
|
||||
call sc_newdir
|
||||
sc_nocoll:
|
||||
call tilt0
|
||||
call sc_move
|
||||
call draw_flippers
|
||||
|
||||
mov al,shiftkeys
|
||||
and al,inside_rastint
|
||||
test al,100b
|
||||
jnz slutt
|
||||
|
||||
call sc_krock
|
||||
jc sc_nocoll2
|
||||
call sc_newdir
|
||||
sc_nocoll2:
|
||||
call tilt0
|
||||
call sc_move
|
||||
call draw_flippers
|
||||
SLUTT: retn
|
||||
NOMOVE:
|
||||
CALL TILT0
|
||||
CALL DRAW_FLIPPERS
|
||||
mov al,shiftkeys
|
||||
and al,inside_rastint
|
||||
test al,100b
|
||||
jnz slutt
|
||||
CALL TILT0
|
||||
CALL DRAW_FLIPPERS
|
||||
JMP SLUTT
|
||||
sc_program endp
|
||||
CHECKBOUNDS MACRO REG,MINST,MEST
|
||||
LOCAL ND00,ND01
|
||||
CMP REG,MINST
|
||||
JGE ND00
|
||||
MOV REG,MINST
|
||||
JMP SHORT ND01
|
||||
ND00: CMP REG,MEST
|
||||
JLE ND01
|
||||
MOV REG,MEST
|
||||
ND01:
|
||||
ENDM
|
||||
v_up equ dl
|
||||
v_dn equ dh
|
||||
v_left equ bh
|
||||
v_right equ bl ;m†ste vara bl
|
||||
last_point equ ch
|
||||
angel equ bp
|
||||
kvartingar equ di
|
||||
bit0=1
|
||||
bit1=2
|
||||
bit2=4
|
||||
bit3=8
|
||||
bit4=16
|
||||
bit5=32
|
||||
bit6=64
|
||||
bit7=128
|
||||
bit8=256
|
||||
bit9=512
|
||||
bit10=1024
|
||||
bit11=2048
|
||||
bit12=4096
|
||||
bit13=8192
|
||||
bit14=16384
|
||||
bit15=32768
|
||||
v_upleft=8
|
||||
v_upright=4
|
||||
v_dnright=2
|
||||
v_dnleft=1
|
||||
checkpoint macro bitno,vinkel,kvart,punktno
|
||||
local nohit,notul,notur,notdl,notdr
|
||||
test al,bitno
|
||||
jz nohit
|
||||
add angel,vinkel
|
||||
or kvartingar,kvart
|
||||
mov last_point,punktno
|
||||
ifidn <kvart>,<v_upleft>
|
||||
inc v_up
|
||||
inc v_left
|
||||
endif
|
||||
ifidn <kvart>,<v_upright>
|
||||
inc v_up
|
||||
inc v_right
|
||||
endif
|
||||
ifidn <kvart>,<v_dnleft>
|
||||
inc v_dn
|
||||
inc v_left
|
||||
endif
|
||||
ifidn <kvart>,<v_dnright>
|
||||
inc v_dn
|
||||
inc v_right
|
||||
endif
|
||||
nohit: endm
|
||||
checkpoint2 macro raster,byteno,bitno,vinkel,kvart,punktno
|
||||
mov ax,es:[si+40*raster+byteno]
|
||||
rol ax,cl
|
||||
checkpoint bitno,vinkel,kvart,punktno
|
||||
endm
|
||||
;***********************************************************************
|
||||
sc_krock proc near
|
||||
sc_ch00:
|
||||
mov ax,mask1_2
|
||||
CMP BALLHIGH,FALSE
|
||||
JE LOWER_PLANE
|
||||
MOV AX,MASK2_2
|
||||
LOWER_PLANE:
|
||||
mov es,ax
|
||||
mov ax,sc_y
|
||||
add ax,screenposY
|
||||
dec ax ;ringen „r runt bollen
|
||||
mov si,40
|
||||
mul si
|
||||
mov si,ax
|
||||
mov ax,sc_x
|
||||
dec ax ;ringen „r runt bollen
|
||||
shr ax,3
|
||||
add si,ax ;si=adr till ”versta v„nstra byten i bollen
|
||||
mov cx,sc_x
|
||||
dec cx ;ringen „r runt bollen
|
||||
and cl,111b
|
||||
inc cl
|
||||
|
||||
xor v_up,v_up
|
||||
xor v_dn,v_dn
|
||||
xor v_left,v_left
|
||||
xor v_right,v_right
|
||||
xor angel,angel
|
||||
xor kvartingar,kvartingar
|
||||
|
||||
mov ax,es:[si+1]
|
||||
rol ax,cl
|
||||
checkpoint bit6,1616,v_upleft,35
|
||||
checkpoint bit7,1577,v_upleft,34
|
||||
sc_kr: mov ax,es:[si]
|
||||
rol ax,cl
|
||||
checkpoint bit0,1536,v_upleft,33
|
||||
checkpoint bit1,1495,v_upright,32
|
||||
checkpoint bit2,1456,v_upright,31
|
||||
sc_k00l:mov ax,es:[si+41]
|
||||
rol ax,cl
|
||||
checkpoint bit4,1705,v_upleft,37
|
||||
checkpoint bit5,1668,v_upleft,36
|
||||
sc_k00r:mov ax,es:[si+40]
|
||||
rol ax,cl
|
||||
checkpoint bit3,1404,v_upright,30
|
||||
checkpoint bit4,1367,v_upright,29
|
||||
sc_k01:
|
||||
checkpoint2 2,1,bit3,1762,v_upleft,38
|
||||
checkpoint2 2,0,bit5,1310,v_upright,28
|
||||
sc_k02:
|
||||
checkpoint2 3,1,bit2,1822,v_upleft,39
|
||||
checkpoint2 3,0,bit6,1250,v_upright,27
|
||||
sc_k03:
|
||||
checkpoint2 4,1,bit1,1879,v_upleft,40
|
||||
checkpoint2 4,0,bit7,1193,v_upright,26
|
||||
sc_k04:
|
||||
checkpoint2 5,1,bit1,1916,v_upleft,41
|
||||
checkpoint2 5,0,bit7,1156,v_upright,25
|
||||
sc_k05:
|
||||
checkpoint2 6,1,bit0,1968,v_upleft,42 ;?????
|
||||
checkpoint2 6,-1,bit0,1104,v_upright,24
|
||||
sc_k06:
|
||||
checkpoint2 7,1,bit0,2007,v_upleft,43 ;???
|
||||
checkpoint2 7,-1,bit0,1065,v_upright,23
|
||||
sc_k07:
|
||||
checkpoint2 8,1,bit0,0000,v_dnleft,0 ;???
|
||||
checkpoint2 8,-1,bit0,1024,v_dnright,22
|
||||
sc_k08:
|
||||
checkpoint2 9,1,bit0,0041,v_dnleft,1 ;???
|
||||
checkpoint2 9,-1,bit0,0983,v_dnright,21
|
||||
sc_k09:
|
||||
checkpoint2 10,1,bit0,0080,v_dnleft,2 ;???
|
||||
checkpoint2 10,-1,bit0,0944,v_dnright,20
|
||||
sc_k10:
|
||||
checkpoint2 11,1,bit1,0132,v_dnleft,3
|
||||
checkpoint2 11,0,bit7,0892,v_dnright,19
|
||||
sc_k11:
|
||||
checkpoint2 12,1,bit1,0169,v_dnleft,4
|
||||
checkpoint2 12,0,bit7,0855,v_dnright,18
|
||||
sc_k12:
|
||||
checkpoint2 13,1,bit2,0226,v_dnleft,5
|
||||
checkpoint2 13,0,bit6,0798,v_dnright,17
|
||||
sc_k13:
|
||||
checkpoint2 14,1,bit3,0286,v_dnleft,6
|
||||
checkpoint2 14,0,bit5,0738,v_dnright,16
|
||||
sc_k14:
|
||||
checkpoint2 15,1,bit4,0343,v_dnleft,7
|
||||
checkpoint bit5,0380,v_dnleft,8
|
||||
sc_k14r:
|
||||
checkpoint2 15,0,bit3,0644,v_dnright,14
|
||||
checkpoint bit4,0681,v_dnright,15
|
||||
|
||||
sc_k15l:
|
||||
checkpoint2 16,1,bit6,0432,v_dnleft,9
|
||||
checkpoint bit7,0471,v_dnleft,10
|
||||
sc_k15r:
|
||||
checkpoint2 16,0,bit0,0512,v_dnright,11
|
||||
checkpoint bit1,0553,v_dnright,12
|
||||
checkpoint bit2,0592,v_dnright,13
|
||||
|
||||
sc_k16:
|
||||
cmp kvartingar,11
|
||||
je scq0
|
||||
cmp kvartingar,9
|
||||
je scq0
|
||||
cmp kvartingar,13
|
||||
je scq0
|
||||
jmp short scq1
|
||||
scq0:
|
||||
mov ah,v_dn
|
||||
xor al,al
|
||||
shl ax,3
|
||||
add angel,ax
|
||||
|
||||
scq1: add v_left,v_up
|
||||
add v_dn,v_left
|
||||
add v_right,v_dn
|
||||
jz no_krock
|
||||
shr v_right,1
|
||||
mov antalpix,v_right
|
||||
mov ax,angel
|
||||
xor dx,dx
|
||||
xor bh,bh ;bl=v_right
|
||||
div bx
|
||||
and ax,2047
|
||||
mov sc_kv,ax ;krock_vinkel ber„knad!!!!
|
||||
|
||||
GET_MATERIAL:
|
||||
mov bl,last_point
|
||||
xor bh,bh
|
||||
shl bx,2
|
||||
mov cx,xy_list[bx]
|
||||
mov bx,xy_list[bx+2]
|
||||
add cx,sc_x
|
||||
DEC CX
|
||||
add bx,sc_y
|
||||
DEC BX
|
||||
CMP BX,576
|
||||
JgE NO_KROCK ;NEDANF™R BANANS SLUT
|
||||
mov ax,40
|
||||
add bx,ScreenPosY
|
||||
;add screenposy,d1
|
||||
mul bx
|
||||
mov bx,cx
|
||||
shr bx,3
|
||||
add ax,bx
|
||||
mov si,ax
|
||||
and cl,111b
|
||||
mov ch,128
|
||||
shR ch,cl
|
||||
xor cl,cl
|
||||
CMP BALLHIGH,TRUE
|
||||
JE GETHIMTRL
|
||||
set_es mask1_1
|
||||
test es:[si],ch
|
||||
jz notm1
|
||||
mov cl,1
|
||||
notm1:
|
||||
set_es mask1_2
|
||||
test es:[si],ch
|
||||
jz notm2
|
||||
or cl,10B
|
||||
notm2:
|
||||
mov ax,si
|
||||
xchg al,ah
|
||||
and ah,11b
|
||||
mov al,4
|
||||
mov dx,3ceh
|
||||
out dx,ax ;set read plane
|
||||
set_es 0a000h
|
||||
CMP SI,230*40
|
||||
JAE GO_STD2
|
||||
MOV AX,SI
|
||||
SHR AX,4
|
||||
INC AX
|
||||
MOV DX,80
|
||||
MUL DX
|
||||
SHR SI,2
|
||||
ADD SI,AX
|
||||
ADD SI,SPLH*BPL
|
||||
JMP DONE_WEIRD2
|
||||
GO_STD2:SUB SI,230*40
|
||||
shr si,2
|
||||
add si,GFXMASK13_OFFSET
|
||||
DONE_WEIRD2:
|
||||
test es:[si],ch
|
||||
jz notm3
|
||||
or cl,100B
|
||||
notm3: jmp storemtrl
|
||||
gethimtrl:
|
||||
set_es mask2_2
|
||||
test es:[si],ch
|
||||
jz notm2b
|
||||
or cl,10b
|
||||
notm2b:
|
||||
mov ax,si
|
||||
xchg al,ah
|
||||
and ah,11b
|
||||
mov al,4
|
||||
mov dx,3ceh
|
||||
out dx,ax ;set read plane
|
||||
shr si,2
|
||||
add si,GFXMASK21_OFFSET
|
||||
set_es 0a000h
|
||||
test es:[si],ch
|
||||
jz notm1b
|
||||
or cl,1
|
||||
notm1b:
|
||||
sub si,GFXMASK21_OFFSET
|
||||
add si,GFXMASK23_OFFSET
|
||||
test es:[si],ch
|
||||
jz notm3b
|
||||
or cl,100b
|
||||
notm3b:
|
||||
storemtrl:
|
||||
mov hitvalue,cl
|
||||
; MOV SIFFRORNA+11,CL
|
||||
|
||||
mov ax,1408 ;(44/2048)*65536=1408
|
||||
mul sc_kv
|
||||
add ax,8000h
|
||||
adc dx,0
|
||||
shl dx,2
|
||||
mov bx,dx
|
||||
mov si,xy_list[bx]
|
||||
mov di,xy_list[bx+2]
|
||||
add si,sc_x
|
||||
add di,sc_Y
|
||||
mov exahitx,si
|
||||
mov exahity,di
|
||||
|
||||
mov xtoadd,0
|
||||
mov ytoadd,0
|
||||
|
||||
push si di
|
||||
mov cl,hitvalue
|
||||
xor ch,ch
|
||||
mov si,cx
|
||||
mov materialbit,cl
|
||||
shl si,4
|
||||
add si,offset materialdata
|
||||
mov di,offset materialinfo
|
||||
set_es ds
|
||||
mov cx,5
|
||||
rep movsw
|
||||
pop di si
|
||||
|
||||
mov cl,hitvalue
|
||||
cmp cl,flipbit
|
||||
je findflip
|
||||
CMP cl,PLASTBIT
|
||||
JE CHECKBUMPER ;BUMPERS
|
||||
cmp cl,rubberbit
|
||||
je checkbumper2 ;SIDE KICKERS
|
||||
clc
|
||||
retn
|
||||
checkbumper2:
|
||||
mov bx,OFFSET bumper2lista_L
|
||||
jmp short searchbumper
|
||||
checkbumper:
|
||||
mov bx,offset bumperlista_L
|
||||
searchbumper:
|
||||
CMP TILTFLAG,TRUE
|
||||
JE LASTBUMP
|
||||
findbump:
|
||||
cmp word ptr [bx],-1
|
||||
je lastbump
|
||||
cmp si,DS:[bx]
|
||||
jb nobump
|
||||
cmp di,[bx+2]
|
||||
jb lastbump
|
||||
cmp si,[bx+4]
|
||||
ja nobump
|
||||
cmp di,[bx+6]
|
||||
ja nobump
|
||||
MOV AX,[BX+8]
|
||||
MOV HITPOINTER,AX
|
||||
;hitpointer, linkitem, hitgroup
|
||||
mov bumperwashit,true
|
||||
lastbump:
|
||||
clc
|
||||
retn
|
||||
nobump:
|
||||
add bx,10
|
||||
jmp findbump
|
||||
findflip:
|
||||
mov bx,offset FlipLInfo
|
||||
findfliploop:
|
||||
test [bx].typ,0ffh
|
||||
jz noflipfound
|
||||
cmp si,[bx].flipx1
|
||||
jb nextflipl
|
||||
cmp si,[bx].flipx2
|
||||
ja nextflipl
|
||||
cmp di,[bx].flipy1
|
||||
jb nextflipl
|
||||
cmp di,[bx].flipy2
|
||||
jbe thisflipl
|
||||
nextflipl:
|
||||
add bx,size flipstruc
|
||||
jmp findfliploop
|
||||
noflipfound:
|
||||
clc
|
||||
retn
|
||||
|
||||
thisflipl:
|
||||
cmp [bx].typ,flipperR
|
||||
je thisflipR
|
||||
sub si,[bx].rotcentx
|
||||
js flipfixl
|
||||
sub di,[bx].rotcenty
|
||||
test [bx].powerzone,0ffh
|
||||
jz noswapl
|
||||
xchg si,di
|
||||
mov ax,di
|
||||
sar ax,1
|
||||
or ax,ax
|
||||
jns nonegflipL2
|
||||
neg ax
|
||||
jmp nonegflipL2
|
||||
noswapL:mov ax,di
|
||||
or ax,ax
|
||||
jns nonegflipL
|
||||
neg ax
|
||||
nonegflipL:
|
||||
sar ax,2
|
||||
nonegflipL2:
|
||||
add si,ax
|
||||
neg si
|
||||
mov ax,[bx].flipvinkelhast
|
||||
imul si
|
||||
mov ytoadd,ax
|
||||
mov ax,[bx].flipvinkelhast
|
||||
imul di
|
||||
mov xtoadd,ax
|
||||
flipfixL:
|
||||
clc
|
||||
retn
|
||||
thisflipR:
|
||||
sub si,[bx].rotcentx
|
||||
jns flipfixR
|
||||
sub di,[bx].rotcenty
|
||||
test [bx].powerzone,0ffh
|
||||
jz noswapR
|
||||
xchg si,di
|
||||
mov ax,di
|
||||
sar ax,1
|
||||
jns nonegflipR2
|
||||
neg ax
|
||||
jmp nonegflipR2
|
||||
noswapR:neg si
|
||||
neg di
|
||||
mov ax,di
|
||||
jns nonegflipR
|
||||
neg ax
|
||||
nonegflipR:
|
||||
sar ax,2
|
||||
nonegflipR2:
|
||||
add si,ax
|
||||
neg si
|
||||
mov ax,[bx].flipvinkelhast
|
||||
imul si
|
||||
mov ytoadd,ax
|
||||
mov ax,[bx].flipvinkelhast
|
||||
imul di
|
||||
mov xtoadd,ax
|
||||
flipfixR:
|
||||
clc
|
||||
retn
|
||||
|
||||
|
||||
no_krock:
|
||||
; MOV EXAHITX,0 ;CP?
|
||||
; MOV EXAHITY,0
|
||||
stc
|
||||
retn
|
||||
sc_krock endp
|
||||
sc_newdir proc near
|
||||
mov si,x_hast
|
||||
mov di,y_hast
|
||||
add si,xtoadd
|
||||
add di,ytoadd
|
||||
add di,screenhast
|
||||
;check speed bounds
|
||||
CHECKBOUNDS SI,MINUSHAST,PLUSHAST
|
||||
CHECKBOUNDS DI,MINUSHAST,PLUSHAST
|
||||
|
||||
mov bx,2048
|
||||
sub bx,sc_kv
|
||||
and bx,2047 ;beh”vs om sc_kv=0 (det kan nog va en bug, sa ulf)
|
||||
add bx,bx
|
||||
mov ax,cos[bx]
|
||||
imul si
|
||||
mov bp,dx
|
||||
mov cx,ax
|
||||
mov ax,sin[bx]
|
||||
imul di
|
||||
sub cx,ax
|
||||
sbb bp,dx
|
||||
rept 3
|
||||
shl cx,1
|
||||
rcl bp,1 ;bp=x cos(v)-y sin(v) (normalhast)
|
||||
endm
|
||||
mov ax,sin[bx]
|
||||
imul si
|
||||
mov si,dx
|
||||
mov cx,ax
|
||||
mov ax,cos[bx]
|
||||
imul di
|
||||
add cx,ax
|
||||
adc si,dx
|
||||
rept 3
|
||||
shl cx,1
|
||||
rcl si,1 ;si=x sin(v)+y cos(v)
|
||||
endm
|
||||
xchg si,bp ;si=d0
|
||||
mov di,BP ;di=d2
|
||||
;****************
|
||||
or si,si
|
||||
jz toosloow2
|
||||
js toosloow2
|
||||
neg si
|
||||
|
||||
cmp si,minsthast
|
||||
jl ok001
|
||||
xor si,si
|
||||
jmp toosloow
|
||||
|
||||
ok001: mov ax,16
|
||||
imul di
|
||||
idiv si
|
||||
or ax,ax
|
||||
jns ok000
|
||||
neg ax
|
||||
ok000: cmp ax,infvink
|
||||
jb ssab
|
||||
xor si,si
|
||||
jmp toosloow
|
||||
ssab:
|
||||
or si,si
|
||||
jz toosloow
|
||||
cmp bumperwashit,false
|
||||
je toosloow
|
||||
cmp materialbit,rubberbit
|
||||
je sidekick
|
||||
add si,bumperpower ;BUMPER
|
||||
jmp nobumperpower
|
||||
sidekick:
|
||||
cmp si,kickminhast
|
||||
jg toosloow
|
||||
add si,kickerpower ;KICKER
|
||||
jmp short nobumperpower
|
||||
toosloow:
|
||||
mov bumperwashit,false
|
||||
nobumperpower:
|
||||
mov ax,si
|
||||
imul_256
|
||||
idiv stuts
|
||||
sub si,ax
|
||||
|
||||
mov cx,frvagg
|
||||
mov bp,frboll
|
||||
cmp si,-1023
|
||||
jl sincos
|
||||
mov ax,si
|
||||
neg ax
|
||||
sar ax,6
|
||||
inc ax
|
||||
mov bx,ax
|
||||
mul cx
|
||||
mov cx,ax
|
||||
mov ax,bx
|
||||
mul bp
|
||||
mov bp,ax
|
||||
|
||||
sincos:
|
||||
mov ax,rotation
|
||||
add ax,screenhast ;make tilt instable
|
||||
sub ax,di
|
||||
imul_256
|
||||
push ax dx
|
||||
JCXZ NOTC
|
||||
idiv cx
|
||||
NOTC: mov cx,ax
|
||||
pop dx ax
|
||||
OR BP,BP
|
||||
JZ NOD
|
||||
idiv bp
|
||||
NOD: add di,cx
|
||||
sub rotation,ax
|
||||
|
||||
mov ax,2048 ;friktion y-led
|
||||
imul di
|
||||
mov di,2048+1
|
||||
idiv di
|
||||
mov di,ax
|
||||
|
||||
mov bx,sc_kv
|
||||
add bx,bx
|
||||
mov ax,cos[bx]
|
||||
imul si
|
||||
mov bp,dx
|
||||
mov cx,ax
|
||||
mov ax,sin[bx]
|
||||
imul di
|
||||
sub cx,ax
|
||||
sbb bp,dx
|
||||
shl cx,1
|
||||
rcl bp,1 ;bp=-x cos(v)+y sin(v)
|
||||
|
||||
mov ax,sin[bx]
|
||||
imul si
|
||||
mov si,dx
|
||||
mov cx,ax
|
||||
mov ax,cos[bx]
|
||||
imul di
|
||||
add cx,ax
|
||||
adc si,dx
|
||||
shl cx,1
|
||||
rcl si,1 ;si=x sin(v)+y cos(v)
|
||||
|
||||
sub bp,xtoadd
|
||||
sub si,ytoadd
|
||||
sub si,screenhast
|
||||
|
||||
CHECKBOUNDS BP,MINUSHAST,PLUSHAST
|
||||
CHECKBOUNDS SI,MINUSHAST,PLUSHAST
|
||||
|
||||
mov x_hast,bp
|
||||
mov y_hast,si
|
||||
|
||||
CMP ANTALPIX,6
|
||||
JB NONEG2
|
||||
MOV BX,SC_KV
|
||||
SHL BX,1
|
||||
MOV AX,-256*4
|
||||
IMUL WORD PTR COS[BX]
|
||||
MOV AX,DX
|
||||
CWD
|
||||
ADD X_POS,AX
|
||||
ADC X_pos_HI,DX
|
||||
MOV AX,-256*4
|
||||
IMUL WORD PTR SIN[BX]
|
||||
MOV AX,DX
|
||||
CWD
|
||||
ADD Y_POS,AX
|
||||
ADC y_pos_HI,DX
|
||||
NONEG2: RETN
|
||||
toosloow2:
|
||||
mov bumperwashit,false
|
||||
retn
|
||||
sc_newdir endp
|
||||
|
||||
sc_move proc near
|
||||
MOV AX,Y_HAST
|
||||
cwd
|
||||
ADD Y_pos,AX
|
||||
adc y_pos_hi,dx
|
||||
mov ax,y_pos
|
||||
mov dx,y_pos_hi
|
||||
mov bx,1024
|
||||
idiv bx
|
||||
mov sc_y,ax
|
||||
CMP SC_Y,banh
|
||||
JL FINY
|
||||
mov ball_down,true
|
||||
FINY:
|
||||
MOV AX,X_HAST
|
||||
cwd
|
||||
ADD x_pos,AX
|
||||
adc x_pos_hi,dx
|
||||
mov ax,x_pos
|
||||
mov dx,x_pos_hi
|
||||
mov bx,1024
|
||||
idiv bx
|
||||
mov sc_x,ax
|
||||
|
||||
MOV AX,GRAVY
|
||||
ADD Y_HAST,AX
|
||||
MOV AX,GRAVX
|
||||
ADD X_HAST,AX
|
||||
|
||||
|
||||
mov ax,rotation
|
||||
or ax,ax
|
||||
jz rotok
|
||||
js slowrotneg
|
||||
sub rotation,rotslowdown
|
||||
jg rotok
|
||||
mov rotation,0
|
||||
jmp short rotok
|
||||
slowrotneg:
|
||||
add rotation,rotslowdown
|
||||
js rotok
|
||||
mov rotation,0
|
||||
rotok: retn
|
||||
sc_move endp
|
||||
draw_flippers proc near
|
||||
mov bx,offset flipLinfo
|
||||
draw_flip:
|
||||
cmp [bx].typ,0
|
||||
jz flippers_drawn
|
||||
mov si,sc_x
|
||||
mov di,sc_y
|
||||
cmp si,[bx].flipx1
|
||||
jb no_idea
|
||||
cmp si,[bx].flipx2
|
||||
ja no_idea
|
||||
cmp di,[bx].flipy1
|
||||
jb no_idea
|
||||
cmp di,[bx].flipy2
|
||||
ja no_idea
|
||||
CALL MOVEFLIPMASK
|
||||
no_idea:add bx,size flipstruc
|
||||
jmp draw_flip
|
||||
flippers_drawn:
|
||||
retn
|
||||
draw_flippers endp
|
||||
TILT0 PROC NEAR
|
||||
CMP TILTKEY,FALSE
|
||||
JE TILTDOWN
|
||||
TILTUP:
|
||||
MOVA SCREENHAST,TILTHASTFW
|
||||
MOV AX,SCREENPOS
|
||||
ADD AX,SCREENHAST
|
||||
MOV SCREENPOS,AX
|
||||
CMP AX,STOTMAX
|
||||
JBE FLIPPER4
|
||||
BENZ: MOV SCREENHAST,0
|
||||
MOV SCREENPOS,STOTMAX
|
||||
JMP SHORT FLIPPER4
|
||||
TILTDOWN:
|
||||
MOVA SCREENHAST,TILTHASTRV
|
||||
MOV AX,SCREENPOS
|
||||
ADD AX,SCREENHAST
|
||||
MOV SCREENPOS,AX
|
||||
JGE FLIPPER4
|
||||
MOV SCREENHAST,0
|
||||
MOV SCREENPOS,0
|
||||
FLIPPER4:
|
||||
MOV AX,SCREENPOS
|
||||
SHR AX,9
|
||||
MOV SCREENPOSY,AX
|
||||
FLIPPER3:
|
||||
|
||||
MOV BX,OFFSET FLIPLINFO
|
||||
NEXTFLIPFIX:
|
||||
CMP [BX].TYP,flipperL
|
||||
je fixLflip
|
||||
CMP [BX].TYP,flipperR
|
||||
je fixRflip
|
||||
retn
|
||||
fixRflip:
|
||||
test SHIFTKEYS,1
|
||||
jz downflip
|
||||
jmp short upflip
|
||||
fixLflip:
|
||||
test SHIFTKEYS,10b
|
||||
jz downflip
|
||||
UpFlip: cmp AllowFlip,false
|
||||
je DownFlip
|
||||
MOV AX,[BX].FLIPVINKELHAST
|
||||
ADD AX,[BX].FLIPAXUP
|
||||
CMP AX,[BX].FLIPMAXHASTUP ;
|
||||
JLE TOOSLOW
|
||||
MOV AX,[BX].FLIPMAXHASTUP
|
||||
TooSlow:
|
||||
MOV [BX].FLIPVINKELHAST,AX
|
||||
NEG AX
|
||||
ADD AX,[BX].FlipVinkel
|
||||
MOV [bx].FlipVinkel,AX
|
||||
ShL AX,1
|
||||
MOV SI,AX
|
||||
MOV AX,ADJUSTTABLE[SI]
|
||||
OR AX,AX
|
||||
JNz FLI03
|
||||
MOV [BX].FlipVinkelHast,0
|
||||
MOV [BX].FlipVinkel,0
|
||||
XOR AX,AX
|
||||
fli03: Cmp ax,[BX].FlipFrames
|
||||
JL FLI01
|
||||
MOV [BX].FLIPVINKELHAST,0
|
||||
MOVA [BX].FLIPVINKEL,[BX].FLIPFRAMESMAX
|
||||
MOV AX,[BX].FLIPFRAMES
|
||||
fli01:
|
||||
MOV [BX].FLIPFRAME,AX
|
||||
ADD BX,SIZE FLIPSTRUC
|
||||
JMP NEXTFLIPFIX
|
||||
|
||||
downflip:
|
||||
|
||||
MOV AX,[BX].FLIPVINKELHAST
|
||||
ADD AX,[BX].FLIPAXdown
|
||||
MOV [BX].FLIPVINKELHAST,AX
|
||||
NEG AX
|
||||
ADD AX,[BX].FlipVinkel
|
||||
MOV [bx].FlipVinkel,AX
|
||||
ShL AX,1
|
||||
MOV SI,AX
|
||||
MOV AX,ADJUSTTABLE[SI]
|
||||
OR AX,AX
|
||||
Jnz FLI02
|
||||
MOV [BX].FlipVinkelHast,0
|
||||
MOV [BX].FlipVinkel,0
|
||||
XOR AX,AX
|
||||
fli02: Cmp ax,[BX].FlipFrames
|
||||
JL FLI00
|
||||
MOV [BX].FLIPVINKELHAST,0
|
||||
MOVA [BX].FLIPVINKEL,[BX].FLIPFRAMESMAX
|
||||
MOV AX,[BX].FLIPFRAMES
|
||||
fli00: MOV [BX].FLIPFRAME,AX
|
||||
ADD BX,SIZE FLIPSTRUC
|
||||
JMP NEXTFLIPFIX
|
||||
TILT0 ENDP
|
||||
code ends
|
||||
end
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,443 @@
|
|||
ADDBCD MACRO DE,SO
|
||||
MOV SI,OFFSET SO
|
||||
MOV DI,OFFSET DE
|
||||
CALL ADDSCOREBCD
|
||||
ENDM
|
||||
DOWNCOUNT MACRO CNT,RUT
|
||||
LOCAL ARZERO
|
||||
CMP CNT,0
|
||||
JZ ARZERO
|
||||
DEC CNT
|
||||
JNZ ARZERO
|
||||
CALL RUT
|
||||
ARZERO: ENDM
|
||||
UPDATE_LIGHT MACRO LINUM,STRUCADR
|
||||
;FN: DOES LIGHTON LINUM IF [STRUCADR] IS TRUE, AND OFF IF FALSE.
|
||||
PUSH BX
|
||||
MOV AL,LINUM
|
||||
MOV AH,STRUCADR
|
||||
CALL DO_UPDATE_LIGHT
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
UPDATE_PSTRUC MACRO STRUCADR,LINUM
|
||||
;FN: [STRUCADR]=TRUE IF LINUM IS ON, FALSE IF OFF
|
||||
PUSH BX
|
||||
LEA BX,STRUCADR
|
||||
MOV AL,LINUM
|
||||
CALL DO_UPDATE_PSTRUC
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
IFZEROBCD MACRO BCDOFFS
|
||||
LOCAL NOTZZZERO,AGAINZZZERO,ENDZZZERO
|
||||
;FN: TEST IF BCD CODED FIGURE = 0
|
||||
;INPUT: OFFSET TO BCD CODED FIGURE
|
||||
;OUTPUT: -C- IF NOT ZERO
|
||||
PUSH AX BX CX
|
||||
PUSH OFFSET BCDOFFS
|
||||
POP BX
|
||||
MOV CX,6
|
||||
NIL AX
|
||||
AGAINZZZERO:
|
||||
CMP [BX],AX
|
||||
JNZ NOTZZZERO
|
||||
ADD BX,2
|
||||
LOOP AGAINZZZERO
|
||||
CLC
|
||||
JMP ENDZZZERO
|
||||
NOTZZZERO:
|
||||
STC
|
||||
ENDZZZERO:
|
||||
POP CX BX AX
|
||||
ENDM
|
||||
updat_infobar macro
|
||||
local nofjant
|
||||
mov nodotcount,0
|
||||
cmp fjanttext,true
|
||||
jne nofjant
|
||||
pusha
|
||||
mov bx,OFFSET showplayersTS
|
||||
call do_matrix
|
||||
mov fjanttext,false
|
||||
popa
|
||||
nofjant:
|
||||
endm
|
||||
|
||||
updat_score macro
|
||||
;rensa buffern!!
|
||||
push es
|
||||
move es,data
|
||||
mov ax,1212h ;tja, vadsomhelst som scoren inte kan va!!
|
||||
mov di,offset oldbuf
|
||||
mov cx,12/2
|
||||
rep stosw
|
||||
mov es:lastcommas,0 ;komman kommer att komma s„ttas ut :-)
|
||||
pop es
|
||||
endm
|
||||
|
||||
startanim macro offerten ;anim som ska animeras, om upptaget s„tts intflag
|
||||
local noanimallowed
|
||||
local nointerrupt
|
||||
mov si,sisa
|
||||
cmp si,0
|
||||
je nointerrupt ;jne noanimallowed
|
||||
mov intflag,true
|
||||
nointerrupt:
|
||||
assume ds:data2
|
||||
; lea si,offerten
|
||||
mov si,offerten
|
||||
move ds,data2
|
||||
mov animptr,0
|
||||
mov vblanksbet,1
|
||||
move loopes,ds:[si-4]
|
||||
move ds,data
|
||||
assume ds:data
|
||||
mov dotrut,offset animation_routine
|
||||
mov sisa,si
|
||||
|
||||
noanimallowed:
|
||||
endm
|
||||
|
||||
startscroll macro offerten ;text som ska skrollas, om upptaget h„nder inget
|
||||
local noscrollallowed
|
||||
local nointerrupt
|
||||
|
||||
mov si,sisa
|
||||
cmp si,0
|
||||
je nointerrupt ;jne noanimallowed
|
||||
mov intflag,true
|
||||
nointerrupt:
|
||||
; jne noscrollallowed
|
||||
; assume ds:data
|
||||
mov si,offerten
|
||||
; lea si,offerten
|
||||
assume ds:data
|
||||
mov dotrut,offset scrolle
|
||||
mov sisa,si
|
||||
noscrollallowed:
|
||||
endm
|
||||
|
||||
|
||||
EFFECT MACRO EFFOFFSET
|
||||
MOV SI,OFFSET EFFOFFSET
|
||||
CALL DOEFFECT
|
||||
ENDM
|
||||
|
||||
IF_ERROR MACRO ERR,ADR
|
||||
LOCAL NOTERR
|
||||
CMP AL,ERR
|
||||
JNE NOTERR
|
||||
JMP ADR
|
||||
NOTERR: ENDM
|
||||
|
||||
READREG MACRO PORT,INDEX
|
||||
MOV DX,PORT
|
||||
MOV AL,INDEX
|
||||
OUT DX,AL
|
||||
INC DX
|
||||
IN AL,DX
|
||||
ENDM
|
||||
|
||||
WRITEREG MACRO PORT,INDEX
|
||||
MOV DX,PORT
|
||||
MOV AH,AL
|
||||
MOV AL,INDEX
|
||||
OUT DX,AX
|
||||
ENDM
|
||||
|
||||
SAVEGFXREGS MACRO
|
||||
READREG 3C4H,2 ;BITPLANMASK
|
||||
MOV AH,AL
|
||||
READREG 3CEH,0 ;SET/RESET
|
||||
PUSH AX
|
||||
READREG 3CEH,1 ;ENABLE SET/RESET
|
||||
MOV AH,AL
|
||||
READREG 3CEH,4 ;READ MAP SELECT
|
||||
PUSH AX
|
||||
READREG 3CEH,5 ;WRITEMODE
|
||||
MOV AH,AL
|
||||
READREG 3CEH,8 ;BITMASK
|
||||
PUSH AX
|
||||
MOV DX,3CEH
|
||||
MOV AX,0FF08H
|
||||
OUT DX,AX ;BITMASK OUTAD
|
||||
ENDM
|
||||
|
||||
RESTOREGFXREGS MACRO
|
||||
POP AX
|
||||
PUSH AX
|
||||
MOV AL,AH
|
||||
WRITEREG 3CEH,5
|
||||
POP AX
|
||||
WRITEREG 3CEH,8
|
||||
POP AX
|
||||
PUSH AX
|
||||
WRITEREG 3CEH,4
|
||||
POP AX
|
||||
MOV AL,AH
|
||||
WRITEREG 3CEH,1
|
||||
POP AX
|
||||
PUSH AX
|
||||
WRITEREG 3CEH,0
|
||||
POP AX
|
||||
MOV AL,AH
|
||||
WRITEREG 3C4H,2
|
||||
ENDM
|
||||
|
||||
WAITSYNCS MACRO NOOFSYNCS
|
||||
LOCAL DONTDORETN
|
||||
MOV DX,NOOFSYNCS
|
||||
MOV BX,NOOFWAITSYNCS+OFFSET WAITLIST
|
||||
CALL DOWAITSYNCS
|
||||
JC DONTDORETN
|
||||
RETN
|
||||
DONTDORETN:
|
||||
NOOFWAITSYNCS=NOOFWAITSYNCS+2
|
||||
ENDM
|
||||
|
||||
ADDTASK MACRO THETASK
|
||||
MOV DX,OFFSET THETASK
|
||||
CALL DOADDTASK
|
||||
ENDM
|
||||
|
||||
SUICIDE MACRO
|
||||
JMP DOSUICIDE
|
||||
ENDM
|
||||
|
||||
LIGHTON MACRO LIGHTNUM
|
||||
MOV BL,LIGHTNUM
|
||||
CALL DOLIGHTON
|
||||
ENDM
|
||||
|
||||
LIGHTOFF MACRO LIGHTNUM
|
||||
MOV BL,LIGHTNUM
|
||||
CALL DOLIGHTOFF
|
||||
ENDM
|
||||
|
||||
LIGHTFLASH MACRO LIGHTNUM,FLASHSPEED
|
||||
MOV DL,LIGHTNUM
|
||||
MOV DH,FLASHSPEED
|
||||
NIL AL
|
||||
CALL DOLIGHTFLASH
|
||||
ENDM
|
||||
|
||||
SYNCEDFLASH MACRO LIGHTNUM,FLASHSPEED,SYNCVAR
|
||||
MOV DL,LIGHTNUM
|
||||
MOV DH,FLASHSPEED
|
||||
MOV AL,SYNCVAR
|
||||
CALL DOLIGHTFLASH
|
||||
ENDM
|
||||
|
||||
INVERTEDSYNCEDFLASH MACRO LIGHTNUM,FLASHSPEED,SYNCVAR
|
||||
LOCAL ALOK
|
||||
MOV DL,LIGHTNUM
|
||||
MOV DH,FLASHSPEED
|
||||
MOV AL,SYNCVAR
|
||||
ADD AL,DH
|
||||
MOV BL,DH
|
||||
SHL BL,1
|
||||
CMP AL,BL
|
||||
JB ALOK
|
||||
SUB AL,BL
|
||||
ALOK: CALL DOLIGHTFLASH
|
||||
ENDM
|
||||
|
||||
ENDFLASH MACRO LIGHTNUM
|
||||
MOV DL,LIGHTNUM
|
||||
CALL DOENDFLASH
|
||||
ENDM
|
||||
|
||||
REALON MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES
|
||||
MOV BL,LIGHTNOO
|
||||
NIL BH
|
||||
DEC BX
|
||||
SHL BX,1
|
||||
MOV SI,LONINDEX[BX]
|
||||
MOVE ES,DS
|
||||
MOV DI,RGBBUFPTR
|
||||
;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR!
|
||||
MOVSB ;START COL
|
||||
LODSB ;AL=RGB LEN
|
||||
STOSB
|
||||
MOV CL,AL
|
||||
NIL CH
|
||||
REP MOVSB ;R,G,B ETC
|
||||
MOV RGBBUFPTR,DI
|
||||
ENDM
|
||||
|
||||
LON MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES
|
||||
MOV BL,LIGHTNOO
|
||||
CALL DOLON
|
||||
ENDM
|
||||
|
||||
REALOFF MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES
|
||||
LOCAL NXTCUL
|
||||
MOV BL,LIGHTNOO
|
||||
NIL BH
|
||||
DEC BX
|
||||
SHL BX,1
|
||||
MOV SI,LONINDEX[BX]
|
||||
MOVE ES,DS
|
||||
MOV DI,RGBBUFPTR
|
||||
;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR!
|
||||
MOVSB ;START COL
|
||||
LODSB ;AL=RGB LEN
|
||||
STOSB
|
||||
MOV CL,AL
|
||||
NIL CH
|
||||
NXTCUL: LODSB
|
||||
SHR AL,1
|
||||
STOSB
|
||||
LOOP NXTCUL
|
||||
MOV RGBBUFPTR,DI
|
||||
ENDM
|
||||
|
||||
LOFF MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES
|
||||
MOV BL,LIGHTNOO
|
||||
CALL DOLOFF
|
||||
ENDM
|
||||
|
||||
ADDSCORE MACRO HOWMUCH
|
||||
MOV SI,OFFSET HOWMUCH
|
||||
MOV DI,OFFSET SIFFRORNA
|
||||
CALL ADDSCOREBCD
|
||||
MOV SCORECHANGED,TRUE
|
||||
UPDAT_INFObar
|
||||
ENDM
|
||||
|
||||
ADDBONUS MACRO HOWMUCH
|
||||
LOCAL MB_LOOPEN2,NO_LOOP2
|
||||
MOV SI,OFFSET HOWMUCH
|
||||
MOV DI,OFFSET BONUSSIFFRORNA
|
||||
MOV CX,BONUSMULTIPEL
|
||||
MB_LOOPEN2:
|
||||
PUSHA
|
||||
CALL ADDSCOREBCD
|
||||
POPA
|
||||
JCXZ NO_LOOP2
|
||||
LOOP MB_LOOPEN2
|
||||
NO_LOOP2:
|
||||
ENDM
|
||||
|
||||
PLAYJINGLE MACRO JINGSTRUC
|
||||
MOV SI,OFFSET JINGSTRUC
|
||||
CALL DOPLAYJINGLE
|
||||
ENDM
|
||||
PLAYJINGLE_PENETRATE MACRO JINGSTRUC
|
||||
MOV JINGLEJUMPCNT,1
|
||||
|
||||
MOV SI,OFFSET JINGSTRUC
|
||||
CALL DOPLAYJINGLE
|
||||
ENDM
|
||||
|
||||
JINGLE MACRO JING
|
||||
MOV BX,JING
|
||||
MOV AL,JINGLEJUMPCNT
|
||||
MOV LASTLOOPVAL,AL
|
||||
MOV AL,16
|
||||
INT 66H
|
||||
ENDM
|
||||
|
||||
SETBALLPOS MACRO XP,YP,XS,YS,PP
|
||||
MOV SC_X,XP
|
||||
MOV SC_Y,YP
|
||||
MOV BALLHIGH,PP
|
||||
MOV AX,1024
|
||||
MUL SC_X
|
||||
MOV X_POS,AX
|
||||
MOV X_POS_HI,DX
|
||||
MOV AX,1024
|
||||
MUL SC_Y
|
||||
MOV Y_POS,AX
|
||||
MOV Y_POS_HI,DX
|
||||
MOV Y_HAST,YS
|
||||
MOV X_HAST,XS
|
||||
; MOV ROTATION,0 ;cp!? blir fler variationer utan (drop zone bl a)
|
||||
ENDM
|
||||
|
||||
SETBALLSPEED MACRO XS,YS
|
||||
MOV Y_HAST,YS
|
||||
MOV X_HAST,XS
|
||||
MOV ROTATION,0
|
||||
ENDM
|
||||
|
||||
SOUNDEFFECT MACRO EFFECT,volume
|
||||
mov bh,volume
|
||||
MOV CL,EFFECT+0
|
||||
MOV BL,EFFECT+1
|
||||
MOV DL,EFFECT+3
|
||||
INC DL
|
||||
MOV AL,17
|
||||
INT 66H
|
||||
ENDM
|
||||
SOUNDEFFECT2 MACRO EFFECT,volume
|
||||
mov Dh,volume
|
||||
MOV BX,EFFECT
|
||||
MOV CL,[BX+0]
|
||||
MOV DL,[BX+3]
|
||||
MOV BL,[BX+1]
|
||||
MOV BH,DH
|
||||
INC DL
|
||||
MOV AL,17
|
||||
INT 66H
|
||||
ENDM
|
||||
|
||||
PLAYEFF MACRO EFFECT,PERIOD
|
||||
MOV CL,EFFECT
|
||||
MOV BL,PERIOD
|
||||
MOV DL,4
|
||||
MOV AL,17
|
||||
INT 66H
|
||||
ENDM
|
||||
|
||||
SET_DS MACRO KLAS
|
||||
PUSH KLAS
|
||||
POP DS
|
||||
ENDM
|
||||
SET_ES MACRO KLAS
|
||||
PUSH KLAS
|
||||
POP ES
|
||||
ENDM
|
||||
|
||||
SETMARG MACRO COLOR
|
||||
MOV DX,3DAH
|
||||
IN AL,DX
|
||||
MOV DL,0C0H
|
||||
MOV AL,11H+20H
|
||||
OUT DX,AL
|
||||
MOV AL,COLOR
|
||||
OUT DX,AL
|
||||
ENDM
|
||||
OUTA MACRO PORT,INDEX,DATA
|
||||
MOV DX,PORT
|
||||
MOV AL,INDEX
|
||||
MOV AH,DATA
|
||||
OUT DX,AX
|
||||
ENDM
|
||||
SYNC MACRO
|
||||
LOCAL L1,L2
|
||||
MOV DX,3DAH
|
||||
L1: IN AL,DX
|
||||
TEST AL,8
|
||||
JNZ L1
|
||||
L2: IN AL,DX
|
||||
TEST AL,8
|
||||
JZ L2
|
||||
ENDM
|
||||
SETRASTERPOS MACRO RASTER
|
||||
MOV AX,SW/4
|
||||
MUL RASTER
|
||||
MOV BX,AX
|
||||
MOV DX,3D4H
|
||||
MOV AL,0CH
|
||||
MOV AH,BH
|
||||
OUT DX,AX
|
||||
INC AL
|
||||
MOV AH,BL
|
||||
OUT DX,AX
|
||||
ENDM
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,691 @@
|
|||
;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
;º º
|
||||
;º The SpacePigs' standard set of macros (1) º
|
||||
;º º
|
||||
;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
FALSE EQU 0 ;MUST BE 0!
|
||||
TRUE EQU 255 ;MUST BE 255!
|
||||
|
||||
imul_256 macro
|
||||
cwd
|
||||
mov dl,ah
|
||||
mov ah,al
|
||||
xor al,al
|
||||
endm
|
||||
|
||||
;************************** STANDARD MAKROS ********************************
|
||||
PLOPP MACRO REG
|
||||
POP REG
|
||||
PUSH REG
|
||||
ENDM
|
||||
DATAMOV MACRO DE,SO,LE
|
||||
PUSH DI SI CX ES
|
||||
PUSH OFFSET DE
|
||||
PUSH OFFSET SO
|
||||
PUSH LE
|
||||
POP CX
|
||||
POP SI
|
||||
POP DI
|
||||
PUSH DS
|
||||
POP ES
|
||||
REP MOVSB
|
||||
POP ES CX SI DI
|
||||
ENDM
|
||||
|
||||
MOVAL MACRO DE,SO
|
||||
MOV AL,SO
|
||||
MOV DE,AL
|
||||
ENDM
|
||||
|
||||
JCXNZ MACRO LABAN
|
||||
LOCAL NOLABAN
|
||||
JCXZ NOLABAN
|
||||
JMP LABAN
|
||||
NOLABAN:ENDM
|
||||
|
||||
NIL MACRO NOLLA
|
||||
XOR NOLLA,NOLLA
|
||||
ENDM
|
||||
|
||||
MOVE MACRO DEST,SOURCE
|
||||
PUSH SOURCE
|
||||
POP DEST
|
||||
ENDM
|
||||
|
||||
MOVA MACRO DEST,SOURCE
|
||||
MOV AX,SOURCE
|
||||
MOV DEST,AX
|
||||
ENDM
|
||||
ADDA MACRO DEST,SOURCE
|
||||
MOV AX,SOURCE
|
||||
ADD DEST,AX
|
||||
ENDM
|
||||
ADDAL MACRO DEST,SOURCE
|
||||
MOV AL,SOURCE
|
||||
ADD DEST,AL
|
||||
ENDM
|
||||
|
||||
CALLE MACRO PROSEDUR ;CALL IF EQUAL
|
||||
LOCAL NEHE
|
||||
JNE NEHE
|
||||
CALL PROSEDUR
|
||||
NEHE: ENDM
|
||||
|
||||
CALLC MACRO PROSEDUR ;CALL IF CARRY
|
||||
LOCAL NEHE
|
||||
JNC NEHE
|
||||
CALL PROSEDUR
|
||||
NEHE: ENDM
|
||||
|
||||
SET_ES MACRO SEGADR
|
||||
PUSH SEGADR
|
||||
POP ES
|
||||
ENDM
|
||||
|
||||
SET_DS MACRO SEGADR
|
||||
PUSH SEGADR
|
||||
POP DS
|
||||
ENDM
|
||||
|
||||
PABS MACRO REGI
|
||||
LOCAL NOTNEG
|
||||
OR REGI,REGI
|
||||
JG NOTNEG
|
||||
NEG REGI
|
||||
NOTNEG: ENDM
|
||||
|
||||
NABS MACRO REGI
|
||||
LOCAL NOTPOS
|
||||
OR REGI,REGI
|
||||
JL NOTPOS
|
||||
NEG REGI
|
||||
NOTPOS: ENDM
|
||||
|
||||
|
||||
;************************ MINNES-HANTERANDE MACROS *************************
|
||||
|
||||
ALLOCMEM MACRO SIZE ;ALLOCATES THE SPECIFIED NUMBER OF BYTES
|
||||
PUSH BX ;RETURNS SEG-OFFSET IN AX
|
||||
MOV BX,SIZE
|
||||
SHR BX,4
|
||||
INC BX
|
||||
MOV AH,48H
|
||||
INT 21H
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
ALLOCMEGAMEM MACRO SIZE ;ALLOCERAR ETT VISST ANTAL PARAGRAFER
|
||||
;RETURNS SEG ADR IN AX.
|
||||
PUSH BX
|
||||
MOV BX,SIZE
|
||||
MOV AH,48H
|
||||
INT 21H
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
ALLOCMEGAMEM2 MACRO SIZE ;ALLOCERAR ETT VISST ANTAL PARAGRAFER
|
||||
;RETURNS SEG ADR IN AX.
|
||||
;RETURNS NO OF BYTES AVAILABLE IF -C- IN BX.
|
||||
MOV BX,SIZE
|
||||
MOV AH,48H
|
||||
INT 21H
|
||||
ENDM
|
||||
|
||||
SETBLOCK MACRO BLOCK,SIZE
|
||||
PUSH BX
|
||||
PUSH ES
|
||||
MOV BX,SIZE
|
||||
MOV AX,BLOCK
|
||||
MOV ES,AX
|
||||
MOV AH,4AH
|
||||
SHR BX,4
|
||||
INC BX
|
||||
INT 21H
|
||||
POP ES
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
DISALLOC MACRO BLOCK
|
||||
local nullblock
|
||||
PUSH AX
|
||||
mov ax,block
|
||||
cmp ax,0
|
||||
pop ax
|
||||
jz nullblock
|
||||
push ax
|
||||
PUSH ES
|
||||
PUSH BLOCK
|
||||
POP ES
|
||||
MOV AH,49H
|
||||
INT 21H
|
||||
POP ES
|
||||
POP AX
|
||||
nullblock:
|
||||
ENDM
|
||||
|
||||
FIRSTFIT MACRO
|
||||
MOV AX,5801H
|
||||
XOR BX,BX
|
||||
INT 21H
|
||||
ENDM
|
||||
|
||||
BESTFIT MACRO
|
||||
MOV AX,5801H
|
||||
MOV BX,1
|
||||
INT 21H
|
||||
ENDM
|
||||
|
||||
LASTFIT MACRO
|
||||
MOV AX,5801H
|
||||
MOV BX,2
|
||||
INT 21H
|
||||
ENDM
|
||||
PRINTMESS2 MACRO MESSAGE
|
||||
PUSHA
|
||||
MOV DX,OFFSET MESSAGE
|
||||
MOV AX,900H
|
||||
INT 21H
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
PRINTMESS MACRO MESSAGE
|
||||
LOCAL MESS,GNU
|
||||
JMP SHORT GNU
|
||||
MESS DB MESSAGE,'$'
|
||||
GNU: PUSHA
|
||||
PUSH DS
|
||||
MOV AX,CS
|
||||
MOV DS,AX
|
||||
MOV DX,OFFSET CS:MESS
|
||||
MOV AX,900H
|
||||
INT 21H
|
||||
POP DS
|
||||
POPA
|
||||
ENDM
|
||||
ERRORBLIP MACRO
|
||||
LOCAL CONT65
|
||||
PUSHA
|
||||
SETMARG 2
|
||||
MOV CX,4
|
||||
CONT65: PUSH CX
|
||||
MOV CX,0FFFFH
|
||||
LOOP $
|
||||
POP CX
|
||||
LOOP CONT65
|
||||
SETMARG 16
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
CARRYBLIP MACRO
|
||||
LOCAL NOTC
|
||||
JNC NOTC
|
||||
ERRORBLIP
|
||||
NOTC:
|
||||
ENDM
|
||||
|
||||
WAITKEY MACRO
|
||||
PUSHA
|
||||
XOR AH,AH
|
||||
INT 16H
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
WAITOR MACRO WAITS
|
||||
LOCAL WAITA
|
||||
PUSH CX
|
||||
MOV CX,WAITS
|
||||
WAITA: LOOP WAITA
|
||||
POP CX
|
||||
ENDM
|
||||
|
||||
MEGAWAIT MACRO WAITS
|
||||
LOCAL WAITA
|
||||
PUSH CX
|
||||
MOV CX,WAITS
|
||||
WAITA: WAITOR 0
|
||||
LOOP WAITA
|
||||
POP CX
|
||||
ENDM
|
||||
|
||||
SYNCWAIT MACRO WAITS
|
||||
LOCAL WAITA
|
||||
PUSHA
|
||||
MOV CX,WAITS
|
||||
WAITA: SYNC
|
||||
LOOP WAITA
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
BEEP MACRO
|
||||
PUSHF
|
||||
PUSHA
|
||||
MOV AH,14
|
||||
MOV AL,7
|
||||
INT 10H
|
||||
POPA
|
||||
POPF
|
||||
ENDM
|
||||
|
||||
BLIP MACRO
|
||||
LOCAL CONT
|
||||
PUSHF
|
||||
PUSHA
|
||||
SETMARG 4H
|
||||
MOV CX,4
|
||||
CONT: SYNC
|
||||
LOOP CONT
|
||||
SETMARG 0H
|
||||
POPA
|
||||
POPF
|
||||
ENDM
|
||||
|
||||
;*************************** DISK DRIVE MAKROS *****************************
|
||||
|
||||
SLACKDRIVELED MACRO
|
||||
MOV DX,3F2H
|
||||
MOV AL,0
|
||||
OUT DX,AL
|
||||
ENDM
|
||||
|
||||
WRITEFILE MACRO HANDLE,BYTES,SOURCE
|
||||
PUSH AX
|
||||
PUSH BX
|
||||
PUSH CX
|
||||
PUSH DX
|
||||
MOV BX,HANDLE
|
||||
MOV CX,BYTES
|
||||
MOV DX,OFFSET SOURCE
|
||||
MOV AH,40H
|
||||
INT 21H
|
||||
POP DX
|
||||
POP CX
|
||||
POP BX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
WRITEFILE2 MACRO HANDLE,BYTES,SOURCE
|
||||
PUSH AX
|
||||
PUSH BX
|
||||
PUSH CX
|
||||
PUSH DX
|
||||
MOV BX,HANDLE
|
||||
MOV CX,BYTES
|
||||
MOV DX,SOURCE
|
||||
MOV AH,40H
|
||||
INT 21H
|
||||
POP DX
|
||||
POP CX
|
||||
POP BX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
OPENFILE MACRO FILENAME ;FILENAME IN DS:FILNAME
|
||||
PUSH AX ;RETURNS HANDLE IN BX
|
||||
PUSH DX
|
||||
MOV DX,OFFSET FILENAME
|
||||
MOV AX,3D02H
|
||||
INT 21H
|
||||
MOV BX,AX
|
||||
POP DX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
OPENFILE2 MACRO FILENAME ;USE THIS WHEN A REGISTER POINTS TO FILENAME
|
||||
PUSH AX ;RETURNS HANDLE IN BX
|
||||
PUSH DX
|
||||
MOV DX,FILENAME
|
||||
MOV AX,3D02H
|
||||
INT 21H
|
||||
MOV BX,AX
|
||||
POP DX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
FILEPOINT MACRO HANDLE,HIGH,LOW
|
||||
PUSH AX
|
||||
PUSH BX
|
||||
PUSH CX
|
||||
PUSH DX
|
||||
MOV BX,HANDLE
|
||||
MOV CX,HIGH
|
||||
MOV DX,LOW
|
||||
MOV AX,4200H
|
||||
INT 21H
|
||||
POP DX
|
||||
POP CX
|
||||
POP BX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
READFILE MACRO HANDLE,BYTES,DEST
|
||||
PUSH ES
|
||||
PUSHA
|
||||
MOV BX,HANDLE
|
||||
MOV CX,BYTES
|
||||
MOV DX,OFFSET DEST
|
||||
MOV AX,3F00H
|
||||
INT 21H
|
||||
MOV ES,AX
|
||||
POPA
|
||||
MOV AX,ES
|
||||
POP ES
|
||||
ENDM
|
||||
|
||||
READFILE2 MACRO HANDLE,BYTES,DEST
|
||||
PUSH ES
|
||||
PUSHA
|
||||
MOV BX,HANDLE
|
||||
MOV CX,BYTES
|
||||
MOV DX,DEST
|
||||
MOV AX,3F00H
|
||||
INT 21H
|
||||
MOV ES,AX
|
||||
POPA
|
||||
MOV AX,ES
|
||||
POP ES
|
||||
ENDM
|
||||
|
||||
GETFILESIZE MACRO HANDLE ;RETURNS SIZE IN AX
|
||||
PUSH BX
|
||||
PUSH CX
|
||||
MOV BX,HANDLE
|
||||
MOV AX,4202H
|
||||
XOR CX,CX
|
||||
XOR DX,DX
|
||||
INT 21H
|
||||
PUSH AX
|
||||
XOR DX,DX
|
||||
MOV AX,4200H
|
||||
INT 21H
|
||||
POP AX
|
||||
POP CX
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
GETMEGAFILESIZE MACRO HANDLE ;RETURNS SIZE IN DX,AX
|
||||
PUSH BX
|
||||
PUSH CX
|
||||
MOV BX,HANDLE
|
||||
MOV AX,4202H
|
||||
XOR CX,CX
|
||||
XOR DX,DX
|
||||
INT 21H
|
||||
PUSH AX
|
||||
PUSH DX
|
||||
XOR DX,DX
|
||||
MOV AX,4200H
|
||||
INT 21H
|
||||
POP DX
|
||||
POP AX
|
||||
POP CX
|
||||
POP BX
|
||||
ENDM
|
||||
|
||||
CREATEFILE MACRO FILENAME ;RETURNS HANDLE IN BX
|
||||
PUSH AX
|
||||
PUSH CX
|
||||
PUSH DX
|
||||
MOV AH,3CH
|
||||
MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE
|
||||
MOV DX,OFFSET FILENAME
|
||||
INT 21H
|
||||
MOV BX,AX
|
||||
POP DX
|
||||
POP CX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
CREATEFILE2 MACRO FILENAME
|
||||
PUSH CX
|
||||
PUSH DX
|
||||
MOV AH,3CH
|
||||
MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE
|
||||
MOV DX,FILENAME
|
||||
INT 21H
|
||||
POP DX
|
||||
POP CX
|
||||
ENDM
|
||||
|
||||
CLOSEFILE MACRO HANDLE
|
||||
PUSH AX
|
||||
PUSH BX
|
||||
MOV BX,HANDLE
|
||||
MOV AX,3E00H
|
||||
INT 21H
|
||||
POP BX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
DELETEFILE MACRO FILENAME
|
||||
PUSH AX
|
||||
MOV DX,OFFSET FILENAME
|
||||
MOV AH,41H
|
||||
INT 21H
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
DELETEFILE2 MACRO FILENAME
|
||||
PUSH AX
|
||||
MOV DX,FILENAME
|
||||
MOV AH,41H
|
||||
INT 21H
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
SETDRIVE MACRO DRIVE
|
||||
PUSH AX
|
||||
CLC
|
||||
MOV DL,DRIVE
|
||||
MOV AH,0EH
|
||||
INT 21H
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
GETDRIVE MACRO
|
||||
MOV AH,19H
|
||||
INT 21H
|
||||
ENDM
|
||||
|
||||
GETDIR MACRO DRIVE,BUF
|
||||
LOCAL ZEROGNU,YSED,ZFI
|
||||
PUSH DX
|
||||
PUSH SI
|
||||
PUSH OFFSET BUF
|
||||
MOV DL,DRIVE
|
||||
POP SI
|
||||
MOV AH,47H
|
||||
INT 21H
|
||||
JC YSED
|
||||
JMP YSED
|
||||
MOV SI,OFFSET BUF-2
|
||||
MOV CX,65
|
||||
ZEROGNU:INC SI
|
||||
CMP BYTE PTR DS:[SI],0
|
||||
LOOPNE ZEROGNU
|
||||
JCXZ YSED
|
||||
ZFI: INC SI
|
||||
MOV BYTE PTR DS:[SI],0
|
||||
LOOP ZFI
|
||||
YSED: POP SI
|
||||
POP DX
|
||||
ENDM
|
||||
|
||||
CD MACRO DIR
|
||||
PUSH AX
|
||||
PUSH DX
|
||||
MOV AH,3BH
|
||||
MOV DX,OFFSET DIR
|
||||
INT 21H
|
||||
POP DX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
CD2 MACRO DIR
|
||||
PUSH AX
|
||||
PUSH DX
|
||||
MOV AH,3BH
|
||||
MOV DX,DIR
|
||||
INT 21H
|
||||
POP DX
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
;*************************** GRAFIK MAKROS *********************************
|
||||
MCGAB_OFF MACRO
|
||||
MOV DX,3C4H
|
||||
MOV AL,4
|
||||
MOV AH,0EH
|
||||
OUT DX,AX
|
||||
COMMENT\
|
||||
MOV DX,3D4H ;DOUBLE WORD MODE
|
||||
MOV AL,14H
|
||||
OUT DX,AL
|
||||
INC DX
|
||||
IN AL,DX
|
||||
OR AL,01000000B
|
||||
OUT DX,AL
|
||||
\
|
||||
ENDM
|
||||
|
||||
|
||||
MCGAB_ON MACRO
|
||||
MOV DX,3C4H
|
||||
MOV AL,4
|
||||
MOV AH,06H
|
||||
OUT DX,AX
|
||||
MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE
|
||||
COMMENT\
|
||||
|
||||
MOV AL,14H
|
||||
OUT DX,AL
|
||||
INC DX
|
||||
IN AL,DX
|
||||
AND AL,10111111B
|
||||
OUT DX,AL
|
||||
|
||||
MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE)
|
||||
MOV AL,17H
|
||||
MOV AH,11100011B
|
||||
OUT DX,AX
|
||||
;\
|
||||
ENDM
|
||||
|
||||
|
||||
SETMARG MACRO COLOR
|
||||
PUSH DX AX
|
||||
MOV AL,CS:MARG
|
||||
MOV CS:OLDMARG,AL
|
||||
; pushf
|
||||
; cli
|
||||
MOV DX,3DAH
|
||||
IN AL,DX
|
||||
rept 3
|
||||
jmp $+2
|
||||
endm
|
||||
MOV DL,0C0H
|
||||
MOV AL,11H+20H
|
||||
OUT DX,AL
|
||||
rept 3
|
||||
jmp $+2
|
||||
endm
|
||||
MOV AL,COLOR
|
||||
MOV CS:MARG,AL
|
||||
OUT DX,AL
|
||||
; popf
|
||||
POP AX DX
|
||||
ENDM
|
||||
|
||||
RESTOREMARG MACRO
|
||||
PUSHA
|
||||
MOV CL,CS:OLDMARG
|
||||
SETMARG CL
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
VIDEOMODE MACRO VM
|
||||
PUSH AX
|
||||
MOV AH,0
|
||||
MOV AL,VM
|
||||
INT 10H
|
||||
POP AX
|
||||
ENDM
|
||||
|
||||
SYNC MACRO
|
||||
LOCAL SYNC1,SYNC2
|
||||
push es
|
||||
mov dx,40h
|
||||
mov es,dx
|
||||
mov dx,es:[63h]
|
||||
add dl,6
|
||||
pop es
|
||||
sync1: IN AL,DX
|
||||
TEST AL,8
|
||||
JNZ SYNC1
|
||||
SYNC2: IN AL,DX
|
||||
TEST AL,8
|
||||
JZ SYNC2
|
||||
ENDM
|
||||
|
||||
SETWRITE MACRO MASK
|
||||
MOV DX,3C4H ;FIXA KANAL
|
||||
MOV AH,MASK
|
||||
MOV AL,2 ;TILL BITPLANS-
|
||||
OUT DX,AX ;MASKEN
|
||||
ENDM
|
||||
|
||||
|
||||
SETREAD MACRO PLN
|
||||
MOV DX,3CEH
|
||||
MOV AH,PLN
|
||||
MOV AL,4
|
||||
OUT DX,AX
|
||||
ENDM
|
||||
|
||||
SETMCGAB MACRO MEMORY_LINELEN,LINELEN_IN_SIGHT
|
||||
MOV AX,12H
|
||||
INT 10H
|
||||
MOV AX,13H
|
||||
INT 10H
|
||||
MOV BX,MEMORY_LINELEN ;CALC BX (SET LINE LENGTH)
|
||||
SHR BX,3
|
||||
MOV CX,LINELEN_IN_SIGHT ;CALC CX (HORIZ END)
|
||||
SHR CX,2
|
||||
DEC CX
|
||||
MOV DX,3D4H ;SET HORIZ END
|
||||
MOV AL,01H
|
||||
MOV AH,CL ;(DET MAN VILL HA GENOM 4)
|
||||
OUT DX,AX
|
||||
MOV DX,3D4H ;SET LINE LENGTH (I MINNESUPPBYGGNADEN)
|
||||
MOV AL,13H
|
||||
MOV AH,BL
|
||||
OUT DX,AX
|
||||
|
||||
MOV DX,3C4H ;SET MCGAB (NO CHAIN FOUR, USE 256KB)
|
||||
MOV AL,04H
|
||||
OUT DX,AL
|
||||
INC DX
|
||||
IN AL,DX
|
||||
AND AL,11110110B
|
||||
OUT DX,AL
|
||||
|
||||
MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE
|
||||
MOV AL,14H
|
||||
OUT DX,AL
|
||||
INC DX
|
||||
IN AL,DX
|
||||
AND AL,11111111B ;10111111B ;10011111B SVARAR MOT KOMMENTAREN
|
||||
OUT DX,AL
|
||||
|
||||
MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE)
|
||||
MOV AL,17H
|
||||
MOV AH,11100011B
|
||||
OUT DX,AX
|
||||
ENDM
|
||||
|
||||
;****************************** ™VRIGA MACROS *********************************
|
||||
SETMASK MACRO MASK ;INTERRUPT MASKEN!
|
||||
MOV AL,MASK
|
||||
OUT 21H,AL
|
||||
ENDM
|
||||
|
||||
|
|
@ -0,0 +1,310 @@
|
|||
;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||||
;º º
|
||||
;º F.L.D. Macros (3) º
|
||||
;º º
|
||||
;º Debug Macros º
|
||||
;º º
|
||||
;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
|
||||
CODE SEGMENT PARA PUBLIC 'CODE'
|
||||
THE_X DW 0
|
||||
THE_Y DW 0
|
||||
ENDS
|
||||
|
||||
debugval macro x,y,value,message
|
||||
LOCAL MESS,GNU,gnet,done
|
||||
JMP SHORT GNU
|
||||
MESS DB MESSAGE,0
|
||||
GNU: PUSHA
|
||||
PUSH es
|
||||
push value
|
||||
push ds
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov ax,0b000h
|
||||
mov es,ax
|
||||
mov si,offset cs:mess
|
||||
mov ax,y
|
||||
mov bx,160
|
||||
mul bx
|
||||
add ax,x
|
||||
add ax,x
|
||||
mov di,ax
|
||||
mov ah,07h
|
||||
gnet:
|
||||
lodsb
|
||||
or al,al
|
||||
jz done
|
||||
stosw
|
||||
jmp gnet
|
||||
done:
|
||||
pop ds
|
||||
|
||||
pop ax
|
||||
xor dx,dx
|
||||
mov bx,10000
|
||||
div bx
|
||||
mov ah,7
|
||||
add al,'0'
|
||||
stosw
|
||||
mov ax,dx
|
||||
|
||||
xor dx,dx
|
||||
mov bx,1000
|
||||
div bx
|
||||
mov ah,7
|
||||
add al,'0'
|
||||
stosw
|
||||
mov ax,dx
|
||||
|
||||
xor dx,dx
|
||||
mov bx,100
|
||||
div bx
|
||||
mov ah,7
|
||||
add al,'0'
|
||||
stosw
|
||||
mov ax,dx
|
||||
|
||||
xor dx,dx
|
||||
mov bx,10
|
||||
div bx
|
||||
mov ah,7
|
||||
add al,'0'
|
||||
stosw
|
||||
mov ax,dx
|
||||
|
||||
mov ah,7
|
||||
add al,'0'
|
||||
stosw
|
||||
|
||||
pop es
|
||||
popa
|
||||
endm
|
||||
debugbcd macro x,y,value,message
|
||||
LOCAL MESS,GNU,gnet,done,skriv
|
||||
JMP SHORT GNU
|
||||
MESS DB MESSAGE,0
|
||||
GNU: PUSHA
|
||||
PUSH es ds
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov ax,0b000h
|
||||
mov es,ax
|
||||
mov si,offset cs:mess
|
||||
mov ax,y
|
||||
mov bx,160
|
||||
mul bx
|
||||
add ax,x
|
||||
add ax,x
|
||||
mov di,ax
|
||||
mov ah,07h
|
||||
gnet:
|
||||
lodsb
|
||||
or al,al
|
||||
jz done
|
||||
stosw
|
||||
jmp gnet
|
||||
done:
|
||||
pop ds
|
||||
|
||||
mov si,offset value
|
||||
mov cx,12
|
||||
mov ah,7
|
||||
skriv: lodsb
|
||||
add al,'0'
|
||||
stosw
|
||||
loop skriv
|
||||
pop es
|
||||
popa
|
||||
endm
|
||||
|
||||
debugmess macro x,y,message
|
||||
LOCAL MESS,GNU,gnet,done
|
||||
JMP SHORT GNU
|
||||
MESS DB MESSAGE,0
|
||||
GNU: PUSHA
|
||||
PUSH DS es
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov ax,0b000h
|
||||
mov es,ax
|
||||
mov ax,y
|
||||
mov bx,160
|
||||
mul bx
|
||||
add ax,x
|
||||
add ax,x
|
||||
mov di,ax
|
||||
mov si,offset cs:mess
|
||||
mov ah,07h
|
||||
gnet:
|
||||
lodsb
|
||||
or al,al
|
||||
jz done
|
||||
stosw
|
||||
jmp gnet
|
||||
done:
|
||||
POP es DS
|
||||
POPA
|
||||
endm
|
||||
debugclear macro
|
||||
pusha
|
||||
push es
|
||||
mov ax,0b000h
|
||||
mov es,ax
|
||||
xor ax,ax
|
||||
xor di,di
|
||||
mov cx,80*25
|
||||
rep stosw
|
||||
pop es
|
||||
popa
|
||||
endm
|
||||
|
||||
DPRINT MACRO MESSAGE
|
||||
LOCAL VRRR,MARKER1,MARKER2,OKKKO
|
||||
JMP VRRR
|
||||
MARKER1 DB MESSAGE
|
||||
MARKER2 LABEL BYTE
|
||||
VRRR: PUSHA
|
||||
MOV SI,CS:THE_X
|
||||
MOV DI,CS:THE_Y
|
||||
DEBUGMESS SI,DI,MESSAGE
|
||||
MOV AX,OFFSET MARKER2
|
||||
SUB AX,OFFSET MARKER1
|
||||
ADD CS:THE_X,AX
|
||||
CMP CS:THE_X,79
|
||||
JNA OKKKO
|
||||
SUB CS:THE_X,80
|
||||
INC CS:THE_Y
|
||||
CMP CS:THE_Y,23
|
||||
JNAE OKKKO
|
||||
DCLS
|
||||
OKKKO: POPA
|
||||
ENDM
|
||||
|
||||
DPRINTVAL MACRO VALUE,MESSAGE
|
||||
LOCAL VRRR,MARKER1,MARKER2,OKKKO
|
||||
PUSHA
|
||||
PUSH VALUE
|
||||
PUSH CS:THE_X
|
||||
PUSH CS:THE_Y
|
||||
POP DI
|
||||
POP BP
|
||||
POP AX
|
||||
DEBUGVAL BP,DI,AX,MESSAGE
|
||||
JMP VRRR
|
||||
MARKER1 DB MESSAGE
|
||||
MARKER2 LABEL BYTE
|
||||
VRRR: MOV AX,OFFSET MARKER2
|
||||
SUB AX,OFFSET MARKER1
|
||||
ADD AX,5
|
||||
ADD CS:THE_X,AX
|
||||
CMP CS:THE_X,79
|
||||
JNA OKKKO
|
||||
SUB CS:THE_X,80
|
||||
INC CS:THE_Y
|
||||
CMP CS:THE_Y,23
|
||||
JNAE OKKKO
|
||||
DCLS
|
||||
OKKKO: POPA
|
||||
ENDM
|
||||
|
||||
DCLS MACRO
|
||||
DEBUGCLEAR
|
||||
MOV CS:THE_X,0
|
||||
MOV CS:THE_Y,0
|
||||
ENDM
|
||||
|
||||
DEBUG_SAVE MACRO REGISTER
|
||||
PUSHF
|
||||
PUSHA
|
||||
PUSH DS
|
||||
PUSH ES
|
||||
PUSH REGISTER
|
||||
MOVE DS,DATA
|
||||
POP URBL1
|
||||
MOV AH,3CH
|
||||
MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE
|
||||
MOV DX,OFFSET FILENM
|
||||
INT 21H
|
||||
MOV BX,AX
|
||||
;BX=HANDLE
|
||||
MOV CX,2
|
||||
MOV DX,OFFSET URBL1
|
||||
MOV AH,40H
|
||||
INT 21H
|
||||
;BX=HANDLE
|
||||
MOV AX,3E00H
|
||||
INT 21H
|
||||
POP ES
|
||||
POP DS
|
||||
POPA
|
||||
POPF
|
||||
ENDM
|
||||
|
||||
DEBUG_SAVE2 MACRO UFFE
|
||||
PUSHF
|
||||
PUSHA
|
||||
PUSH DS
|
||||
PUSH ES
|
||||
PUSH OFFSET UFFE
|
||||
POP URBL2
|
||||
MOV AX,DATA
|
||||
MOV DS,AX
|
||||
MOV AH,3CH
|
||||
MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE
|
||||
MOV DX,OFFSET FILENM2
|
||||
INT 21H
|
||||
MOV BX,AX
|
||||
;BX=HANDLE
|
||||
MOV CX,2
|
||||
MOV DX,OFFSET URBL2
|
||||
MOV AH,40H
|
||||
INT 21H
|
||||
;BX=HANDLE
|
||||
MOV AX,3E00H
|
||||
INT 21H
|
||||
POP ES
|
||||
POP DS
|
||||
POPA
|
||||
POPF
|
||||
ENDM
|
||||
|
||||
DDUMP MACRO SEG,ADR
|
||||
LOCAL THENEXT
|
||||
DCLS
|
||||
PUSHA
|
||||
PUSH DS
|
||||
PUSH ES
|
||||
PUSH SEG
|
||||
PUSH OFFSET ADR
|
||||
POP SI
|
||||
POP DS
|
||||
MOVE ES,0B000H
|
||||
NIL DI
|
||||
MOV CX,80*24
|
||||
MOV AH,7
|
||||
THENEXT:LODSB
|
||||
STOSW
|
||||
LOOP THENEXT
|
||||
POP ES
|
||||
POP DS
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
DHEXDUMP MACRO SEG,ADR
|
||||
LOCAL NEXTLINE,NEXTROW
|
||||
DCLS
|
||||
PUSHA
|
||||
PUSH DS
|
||||
PUSH ES
|
||||
MOV CX,
|
||||
NEXTROW:
|
||||
|
||||
NEXTLINE:
|
||||
|
||||
POP ES
|
||||
POP DS
|
||||
POPA
|
||||
ENDM
|
||||
|
||||
|
|
@ -0,0 +1,460 @@
|
|||
demover=0
|
||||
keyhandler=65h
|
||||
jumps
|
||||
include c:\source\macros1.asm
|
||||
rate=20000
|
||||
basememreq=585000 ;free mem required
|
||||
nosoundmemreq=450000 ;if no music, or XMS detected
|
||||
xmssize=220000 ;minimum XMS size
|
||||
|
||||
GURKA=42
|
||||
MONOVALUE=72-GURKA
|
||||
COLORVALUE=73-GURKA
|
||||
|
||||
.286P
|
||||
|
||||
stacken segment para stack 'stack'
|
||||
dw 256 dup(0)
|
||||
stacken ends
|
||||
|
||||
data segment para public 'data'
|
||||
parm db 30 dup (0)
|
||||
notfound db 'not loaded! Reinstall program.',13,10,'$'
|
||||
IF DEMOVER
|
||||
introname db 'Demo.Prg',0,'$'
|
||||
ELSE
|
||||
introname db 'Intro.prg',0,'$'
|
||||
ENDIF
|
||||
comment\
|
||||
errlist dw offset error1
|
||||
dw offset error2
|
||||
dw offset error3
|
||||
dw offset error4
|
||||
error1 db 'Unexpected out of memory! Free up DOS memory!',13,10,'$'
|
||||
error2 db 'Can not init sound device! Please run the SETSOUND program!',13,10,'$'
|
||||
error3 db 'Can not find game file! Please reinstall game!',13,10,'$'
|
||||
error4 db 'Error in game files! Please reinstall game!',13,10,'$'
|
||||
error5 db '
|
||||
unknowntxt db 'Unknown error! Please reinstall game and try again!',13,10,'$'
|
||||
CRITICAL DB 'Critical Error! (Drive not ready?)',13,10,'$',0
|
||||
\
|
||||
COMMENT\
|
||||
IF DEMOVER
|
||||
ELSE
|
||||
BADPARM DB 13,10,"Pinball Fantasies (c) 1993-94 21st Century Entertainment Ltd.",13,10,13,10
|
||||
DB "Usage: PINBALL [options]",13,10,13,10
|
||||
DB "Options",13,10,13,10
|
||||
DB " /h - Hi resolution graphics mode.",13,10,13,10
|
||||
DB " /m - Monochrome graphics mode, suitable for monochrome",13,10
|
||||
DB " monitors used on a VGA video card."
|
||||
DB 13,10,13,10,"$"
|
||||
ENDIF
|
||||
\
|
||||
banor label byte
|
||||
namelen=12
|
||||
if demover
|
||||
f1name db 'Pland.Prg',0,'$'
|
||||
else
|
||||
f1name db 'Table1.Prg',0,'$'
|
||||
endif
|
||||
f2name db 'Table2.Prg',0,'$'
|
||||
f3name db 'Table3.Prg',0,'$'
|
||||
f4name db 'Table4.Prg',0,'$'
|
||||
data ends
|
||||
savestack macro
|
||||
move cs:s_s,ss
|
||||
mov cs:s_p,sp
|
||||
endm
|
||||
restorestack macro
|
||||
move ss,cs:s_s
|
||||
mov sp,cs:s_p
|
||||
endm
|
||||
|
||||
code segment para public 'code'
|
||||
assume cs:code,ds:data
|
||||
|
||||
START PROC FAR
|
||||
PUSHA
|
||||
PUSH DS
|
||||
|
||||
COMMENT\
|
||||
IF DEMOVER
|
||||
ELSE
|
||||
MOV CL,DS:[80H]
|
||||
XOR CH,CH
|
||||
DEC CX
|
||||
JLE PARMS_READY ;NO PARMS AT ALL
|
||||
|
||||
MOV BP,CX
|
||||
MOV SI,82H
|
||||
READ_MORE:
|
||||
CALL SKIP_BLANKS
|
||||
JC PARMS_READY
|
||||
CMP BYTE PTR DS:[SI],'M'
|
||||
JE ITS_MONO
|
||||
CMP BYTE PTR DS:[SI],'m'
|
||||
JE ITS_MONO
|
||||
CMP BYTE PTR DS:[SI],'H'
|
||||
JE ITS_HIRES
|
||||
CMP BYTE PTR DS:[SI],'h'
|
||||
JE ITS_HIRES
|
||||
JMP INVALID_PARMS
|
||||
|
||||
ITS_MONO:
|
||||
INC SI
|
||||
MOV CS:MONOMODE,MONOVALUE
|
||||
JMP READ_MORE
|
||||
|
||||
ITS_HIRES:
|
||||
INC SI
|
||||
MOV CS:HI_RES,TRUE
|
||||
JMP READ_MORE
|
||||
|
||||
SKIP_BLANKS: ;OUTPUT: SI POINTS TO THE NEXT NON-BLANK CHAR
|
||||
; -C- IF LAST CHAR IS READ
|
||||
MOV AX,SI
|
||||
SUB AX,82H
|
||||
CMP AX,BP
|
||||
JE TESTAT_DEN_SISTA
|
||||
MOV CX,30
|
||||
TRY_NEXT:
|
||||
CMP BYTE PTR DS:[SI],' '
|
||||
JE BLANK
|
||||
CMP BYTE PTR DS:[SI],'/'
|
||||
JE BLANK
|
||||
CMP BYTE PTR DS:[SI],'-'
|
||||
JE BLANK
|
||||
CMP BYTE PTR DS:[SI],0
|
||||
JE BLANK
|
||||
CLC
|
||||
RETN
|
||||
BLANK: MOV AX,SI
|
||||
SUB AX,82H
|
||||
INC AX
|
||||
CMP AX,BP
|
||||
JE TESTAT_DEN_SISTA
|
||||
INC SI
|
||||
LOOP TRY_NEXT
|
||||
TESTAT_DEN_SISTA:
|
||||
STC
|
||||
RETN
|
||||
|
||||
INVALID_PARMS:
|
||||
POP DS
|
||||
POPA
|
||||
MOVE DS,DATA
|
||||
MOV AX,3
|
||||
INT 10H
|
||||
MOV DX,OFFSET BADPARM
|
||||
MOV AX,0900H
|
||||
INT 21H
|
||||
JMP QUITTA
|
||||
ENDIF
|
||||
PARMS_READY:
|
||||
\
|
||||
|
||||
POP DS
|
||||
POPA
|
||||
|
||||
move es,ds
|
||||
move ds,DATA
|
||||
mov ax,4a00h
|
||||
mov bx,es
|
||||
neg bx
|
||||
add bx,endofprog
|
||||
add bx,1024/16
|
||||
int 21h ;shrink block
|
||||
|
||||
jmp enough_mem
|
||||
bannumber db 1
|
||||
INT24H_SEG DW ?
|
||||
INT24H_ADR DW ?
|
||||
int9_ip dw ?
|
||||
int9_cs dw ?
|
||||
int16h_ip dw ?
|
||||
int16h_cs dw ?
|
||||
in_hyperspace db false
|
||||
s_p dw ?
|
||||
s_s dw ?
|
||||
scan db ?
|
||||
|
||||
enough_mem:
|
||||
;install keyints . . .
|
||||
|
||||
move es,0
|
||||
|
||||
PUSHF
|
||||
CLI
|
||||
move int9_ip,es:[9*4]
|
||||
move int9_cs,es:[9*4+2]
|
||||
mov es:[9*4],offset keyint
|
||||
move es:[9*4+2],cs
|
||||
|
||||
move int16h_ip,es:[keyhandler*4]
|
||||
move int16h_cs,es:[keyhandler*4+2]
|
||||
mov es:[keyhandler*4],offset int16h
|
||||
move es:[keyhandler*4+2],cs
|
||||
|
||||
MOVE INT24H_ADR,ES:[24H*4]
|
||||
MOVE INT24H_SEG,ES:[24H*4+2]
|
||||
NEEEEJ EQU OFFSET BAD24H
|
||||
MOVE ES:[24H*4],NEEEEJ
|
||||
MOVE ES:[24H*4+2],CS
|
||||
|
||||
POPF
|
||||
move es,DATA
|
||||
|
||||
|
||||
ONCE_AGAIN:
|
||||
;Intro and chooser . . .
|
||||
move ds,DATA
|
||||
move es,DATA
|
||||
pusha
|
||||
savestack
|
||||
mov ax,4b00h
|
||||
mov bx,offset parm
|
||||
mov dx,offset introname
|
||||
int 21h ;load and execute program
|
||||
restorestack
|
||||
popa
|
||||
move ds,DATA
|
||||
mov dx,offset introname
|
||||
jc file_not_found
|
||||
|
||||
;Check if any errors was detected in prog.(eg. Mod not found, out of mem)
|
||||
mov ax,4d00h
|
||||
int 21h
|
||||
cmp ax,0
|
||||
jne PrintGameErrors
|
||||
|
||||
mov cs:first_time,false
|
||||
|
||||
;******************* cp cp cp! ta bort i riktiga!
|
||||
|
||||
; mov ax,3
|
||||
; int 10h
|
||||
;*******************
|
||||
|
||||
;Ladda bana . . .
|
||||
cmp bannumber,0
|
||||
je quit ;esc pressed!!!!
|
||||
move ds,DATA
|
||||
pusha
|
||||
savestack
|
||||
mov al,cs:bannumber
|
||||
mov ah,0
|
||||
mov cx,namelen
|
||||
mul cx
|
||||
mov dx,ax
|
||||
add dx,offset banor-namelen
|
||||
mov bx,offset parm
|
||||
mov ax,4b00h
|
||||
int 21h ;load and execute program
|
||||
restorestack
|
||||
popa
|
||||
move ds,DATA
|
||||
pushf
|
||||
mov al,cs:bannumber
|
||||
mov ah,0
|
||||
mov cx,namelen
|
||||
mul cx
|
||||
mov dx,ax
|
||||
add dx,offset banor-namelen
|
||||
popf
|
||||
jc file_not_found
|
||||
;********** ska de vara h„r???
|
||||
;Check if any errors was detected in prog.(eg. Mod not found, out of mem)
|
||||
mov ax,4d00h
|
||||
int 21h
|
||||
cmp ax,0
|
||||
jne PrintGameErrors
|
||||
;****************
|
||||
jmp once_again
|
||||
;******************************************************************************
|
||||
;* Print Error Messages *
|
||||
;******************************************************************************
|
||||
PrintGameErrors:
|
||||
jmp Equit
|
||||
comment\
|
||||
; al=1 Out of mem
|
||||
; al=2 Can't init sound
|
||||
; al=3 file not found
|
||||
; al=4 Error in file
|
||||
;
|
||||
move ds,data
|
||||
cmp al,4
|
||||
ja unknownerror
|
||||
mov bx,offset errlist
|
||||
nil ah
|
||||
shl ax,1
|
||||
add bx,ax
|
||||
mov dx,[bx]
|
||||
MOV AX,900H
|
||||
; INT 21H
|
||||
; mov ax,900h
|
||||
; int 21h
|
||||
jmp quit
|
||||
unknownerror:
|
||||
mov dx,offset unknowntxt
|
||||
MOV AX,900H
|
||||
INT 21H
|
||||
; mov ax,900h
|
||||
; int 21h
|
||||
jmp quit
|
||||
|
||||
;drv_not_found:
|
||||
pusha
|
||||
mov dx,offset error2
|
||||
mov ax,900h
|
||||
int 21h
|
||||
|
||||
mov cx,13
|
||||
mov al,0
|
||||
; mov di,offset drv
|
||||
move es,data
|
||||
rep scasb
|
||||
inc di
|
||||
mov al,'$'
|
||||
stosb
|
||||
popa
|
||||
; mov dx,offset drv
|
||||
jmp yo
|
||||
\
|
||||
file_not_found:
|
||||
pusha
|
||||
mov ax,3
|
||||
int 10h
|
||||
popa
|
||||
yo:
|
||||
MOV AX,900H
|
||||
INT 21H
|
||||
mov dx,offset notfound
|
||||
mov ax,900h
|
||||
int 21h
|
||||
jmp quit
|
||||
|
||||
Equit:
|
||||
quit:
|
||||
PUSHF
|
||||
CLI
|
||||
move es,0
|
||||
move es:[9*4],int9_ip
|
||||
move es:[9*4+2],int9_cs
|
||||
move es:[keyhandler*4],int16h_ip
|
||||
move es:[keyhandler*4+2],int16h_cs
|
||||
MOVE ES:[24H*4],INT24H_ADR
|
||||
MOVE ES:[24H*4+2],INT24H_SEG
|
||||
POPF
|
||||
quitta:
|
||||
mov ax,4c00h
|
||||
int 21h
|
||||
|
||||
TOGGLAR_STRUCEN STRUC
|
||||
S_BALLS DB ?
|
||||
S_ANGLE DB ?
|
||||
S_SCROLLING DB ?
|
||||
S_IM DB ?
|
||||
S_RESOLUTION DB ?
|
||||
S_MODE DB ?
|
||||
ENDS
|
||||
RESIDENTA_TOGGLAREN DB SIZE TOGGLAR_STRUCEN DUP (0)
|
||||
|
||||
first_time db true
|
||||
int16h:
|
||||
push ax
|
||||
cmp ax,0
|
||||
jne no_first_time_ask
|
||||
pop ax
|
||||
mov ah,cs:first_time
|
||||
mov bl,cs:bannumber
|
||||
iret
|
||||
no_first_time_ask:
|
||||
cmp ax,0ffffh
|
||||
jne no_savenumber
|
||||
mov cs:bannumber,bl ;Vilken bana (1-4)!! 0=Esc pressed!!
|
||||
no_savenumber:
|
||||
|
||||
CMP AX,0100H ;LOKALA TOGGLAREN => RESIDENTA TOGGLAREN
|
||||
JNE INTE_JAG
|
||||
;INPUT: ES:BX=OFFSET TO LOKALA TOGGLAREN
|
||||
PUSH ES DS
|
||||
MOVE DS,ES
|
||||
MOVE ES,CS
|
||||
MOV SI,BX
|
||||
LEA DI,RESIDENTA_TOGGLAREN
|
||||
MOV CX,SIZE TOGGLAR_STRUCEN
|
||||
REP MOVSB
|
||||
POP DS ES
|
||||
JMP INTE_JAG_HELLER
|
||||
INTE_JAG:
|
||||
|
||||
CMP AX,0200H ;RESIDENTA TOGGLAREN => LOKALA TOGGLAREN
|
||||
JNE INTE_JAG_HELLER_OXO_KANSKE
|
||||
;INPUT: ES:BX=OFFSET TO LOKALA TOGGLAREN
|
||||
PUSH DS
|
||||
MOVE DS,CS
|
||||
MOV DI,BX
|
||||
LEA SI,RESIDENTA_TOGGLAREN
|
||||
MOV CX,SIZE TOGGLAR_STRUCEN
|
||||
REP MOVSB
|
||||
POP DS
|
||||
JMP INTE_JAG_HELLER
|
||||
INTE_JAG_HELLER_OXO_KANSKE:
|
||||
|
||||
CMP AX,12H ;text input
|
||||
JNE INTE_JAG_heller
|
||||
pop ax
|
||||
mov ah,0
|
||||
mov al,cs:scan
|
||||
mov cs:scan,0
|
||||
iret
|
||||
inte_jag_heller:
|
||||
pop ax
|
||||
mov ah,0
|
||||
mov al,cs:scan ;nja, n†got minskad funktion . .
|
||||
mov cs:scan,0
|
||||
iret
|
||||
|
||||
KEYINT: ;int 9
|
||||
PUSHA
|
||||
PUSH DS
|
||||
MOV AL,20H
|
||||
OUT 20H,AL
|
||||
MOVE DS,DATA
|
||||
IN AL,60H
|
||||
PUSH AX
|
||||
IN AL,61H
|
||||
OR AL,80H
|
||||
OUT 61H,AL
|
||||
AND AL,7FH
|
||||
OUT 61H,AL
|
||||
POP AX
|
||||
test al,80h
|
||||
jnz no_alfa_key
|
||||
|
||||
MOV CS:SCAN,AL ;REKORDKORV??
|
||||
no_alfa_key:
|
||||
POP DS
|
||||
POPA
|
||||
IRET
|
||||
|
||||
BAD24H_RETURN DB 3 ;3=SOMETHING IS WRONG!
|
||||
;2=ABORT
|
||||
;1=RETRY
|
||||
;0=IGNORE
|
||||
BAD24H:
|
||||
MOV AL,CS:BAD24H_RETURN
|
||||
DEC CS:BAD24H_RETURN
|
||||
JNL JUST_IRET
|
||||
MOV CS:BAD24H_RETURN,3
|
||||
JUST_IRET:
|
||||
IRET
|
||||
|
||||
START ENDP
|
||||
CODE ENDS
|
||||
endofprog segment
|
||||
ends
|
||||
end staRT
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue