From 59a64376fc2d7a9cbbcff9521cc15039a1eb44ae Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Mon, 21 Dec 1998 17:30:46 +0100 Subject: [PATCH] Collection of my MS-DOS / Turbo Assembler macros. --- fox.mak | 248 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 fox.mak diff --git a/fox.mak b/fox.mak new file mode 100644 index 0000000..17a0fdd --- /dev/null +++ b/fox.mak @@ -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, + 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, + 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 \ No newline at end of file