First commit

master
teamarchive2.fnf.archive.org root 2020-12-20 03:58:00 +00:00
parent eb6d904ff3
commit aa2dd368d7
11 changed files with 36090 additions and 0 deletions

923
BALLCODE.ASM Normal file
View File

@ -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

6677
FANTASIE.ASM Normal file

File diff suppressed because it is too large Load Diff

443
FANTASIE.MAC Normal file
View File

@ -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


4878
INTRO.ASM Normal file

File diff suppressed because it is too large Load Diff

691
MACROS1.ASM Normal file
View File

@ -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


310
MACROS3.ASM Normal file
View File

@ -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


6101
PLAND.ASM Normal file

File diff suppressed because it is too large Load Diff

5196
SDEV.ASM Normal file

File diff suppressed because it is too large Load Diff

4457
SHOW.ASM Normal file

File diff suppressed because it is too large Load Diff

460
START.ASM Normal file
View File

@ -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


5954
STONES.ASM Normal file

File diff suppressed because it is too large Load Diff