Collection of my MS-DOS / Turbo Assembler macros.

This commit is contained in:
Piotr Fusik 1998-12-21 17:30:46 +01:00
parent 96d3dba2a7
commit 59a64376fc
1 changed files with 248 additions and 0 deletions

248
fox.mak Normal file
View File

@ -0,0 +1,248 @@
;b. Fox/Tqa
eol equ 13,10
eot equ 13,10,'$'
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
MACRO lda _rg ;shorter than 'mov (e)ax, _rg'
_rge SUBSTR <_rg>, 1, 1
IFIDNI _rge, <e>
xchg eax, _rg
ELSE
xchg ax, _rg
ENDIF
ENDM
MACRO sta _rg ;shorter than 'mov _rg, (e)ax'
_rge SUBSTR <_rg>, 1, 1
IFIDNI _rge, <e>
xchg _rg, eax
ELSE
xchg _rg, ax
ENDIF
ENDM
;±±±±±±± DOS / FILE I/O ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
MACRO dos _func
IFNB <_func>
IF _func and 0ff00h
mov ax, _func
ELSE
mov ah, _func
ENDIF
ENDIF
int 21h
ENDM
MACRO file _func
IFNB <_func>
IF _func and 0ff00h
mov ax, _func
ELSE
mov ah, _func
ENDIF
ENDIF
IFDEF smartio
call xdisk
ELSE
int 21h
ENDIF
ENDM
MACRO smartdisk
smartio = 1
xdisk: dos
IFDEF rts
jnc rts
ELSE
jc _derr
ret
_derr:
ENDIF
mov dx, offset errtxt
jmp panic
ENDM
MACRO smarterr
errtxt db 'Disk error!',eot
ENDM
MACRO fcreate _fname ; ENTRY: DS:_fname|dx = ASCIIZ fname, RETURN: bx = handle
IFNB <_fname>
mov dx, offset _fname
ENDIF
xor cx, cx
file 3ch
sta bx
ENDM
MACRO fopen _fname ; ENTRY: DS:_fname|dx = ASCIIZ fname, RETURN: bx = handle
IFNB <_fname>
mov dx, offset _fname
ENDIF
file 3d00h
sta bx
ENDM
MACRO fupdate _fname ; ENTRY: DS:_fname|dx = ASCIIZ fname, RETURN: bx = handle
IFNB <_fname>
mov dx, offset _fname
ENDIF
file 3d02h
sta bx
ENDM
MACRO fclose ; ENTRY: bx = handle
file 3eh
ENDM
MACRO fread _fbufr ; ENTRY: DS:_fbufr = buffer, cx = no. of bytes
IFNB <_fbufr>
mov dx, offset _fbufr
ENDIF
file 3fh
ENDM
MACRO fwrite _fbufr ; ENTRY: DS:_fbufr = buffer, cx = no. of bytes
IFNB <_fbufr>
mov dx, offset _fbufr
ENDIF
file 40h
ENDM
;±±±±±±± PRINT ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
MACRO print _text
IFNB <_text>
mov dx, offset _text
ENDIF
dos 9
ENDM
MACRO PEOL
mov dl, 13
dos 2
mov dl, 10
dos 2
ENDM
MACRO PrintAXdec
LOCAL _outn1,_outn2,_dectxt,_cont
mov di, offset _dectxt+4
mov bx, 10
_outn1: xor dx, dx
div bx
add dl, '0'
_outn2: mov [di], dl
dec di
test ax, ax
jnz _outn1
mov dl, ' '
cmp di, offset _dectxt
jnb _outn2
print _dectxt
jmp _cont
_dectxt db 5 dup(' '),eot
_cont:
ENDM
MACRO PrintEAXdec
LOCAL _outn1,_outn2,_dectxt,_cont
mov di, offset _dectxt+9
mov ebx, 10
_outn1: xor edx, edx
div ebx
add dl, '0'
_outn2: mov [di], dl
dec di
test eax, eax
jnz _outn1
mov dl, ' '
cmp di, offset _dectxt
jnb _outn2
print _dectxt
jmp _cont
_dectxt db 10 dup(' '),eot
_cont:
ENDM
MACRO D2A
cmp al, 10
sbb al, 69h
das
ENDM
MACRO Printdig
d2a
sta dx
dos 2
ENDM
MACRO PrintAL
push ax
shr al, 4
PrintDig
pop ax
and al, 0fh
PrintDig
ENDM
MACRO PrintAX
push ax
mov al, ah
PrintAL
pop ax
PrintAL
ENDM
MACRO PrintEAX
push ax
shr eax, 16
PrintAX
pop ax
PrintAX
ENDM
;±±±±±±± GFX ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
MACRO setgfx _gmode
mov ax, _gmode
int 10h
ENDM
MACRO bar _jaki
IFDEF bars
mov dx, 3c8h
mov al, 0
out dx, al
inc dx
mov al, _jaki
out dx, al
out dx, al
out dx, al
ENDIF
ENDM
MACRO EndVBl
LOCAL w1,w2
mov dx, 3dah
w1: in al, dx
test al, 8
jz w1
w2: in al, dx
test al, 8
jnz w2
ENDM
MACRO StartVBL
LOCAL w1,w2
mov dx, 3dah
w1: in al, dx
test al, 8
jnz w1
w2: in al, dx
test al, 8
jz w2
ENDM