pinballfantasies/MACROS1.ASM

691 lines
9.4 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
;º º
;º 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