; macros used throughout pushw macro ww ; push word, used for pushing constants mov ax,ww push ax endm line macro xx1,yy1,xx2,yy2,col pushw xx1 pushw yy1 pushw xx2 pushw yy2 pushw col call draw_line endm block macro xx1,yy1,xx2,yy2,col push xx1 yy1 xx2 yy2 col call fill_block endm char macro chr,xx,yy,fc ; plot character push ax bx cx dx mov ax,chr push ax mov ax,xx push ax mov ax,yy push ax mov ax,0 push ax call tgprintc pop dx cx bx ax mov ax,chr push ax mov ax,xx add ax,1 push ax mov ax,yy sub ax,1 push ax mov ax,fc push ax call tgprintc endm ; macro to out a 16 bit value to an i/o port out_16 macro register, value ifdifi , ; if dx not setup mov dx, register ; then select register endif ifdifi , ; if ax not setup mov ax, value ; then get data value endif out dx, ax ; set i/o register(s) endm ; macro to out a 8 bit value to an i/o port out_8 macro register, value ifdifi , ; if dx not setup mov dx, register ; then select register endif ifdifi , ; if al not setup mov al, value ; then get data value endif out dx, al ; set i/o register endm ; macros to push and pop multiple registers pushx macro r1, r2, r3, r4, r5, r6, r7, r8 ifnb push r1 ; save r1 pushx r2, r3, r4, r5, r6, r7, r8 endif endm popx macro r1, r2, r3, r4, r5, r6, r7, r8 ifnb pop r1 ; restore r1 popx r2, r3, r4, r5, r6, r7, r8 endif endm ; macro to clear registers to 0 clr macro register, r2, r3, r4, r5, r6 ifnb xor register, register ; set register = 0 clr r2, r3, r4, r5, r6 endif endm ; macros to decrement counter & jump on condition loopx macro register, destination dec register ; counter-- jnz destination ; jump if not 0 endm loopjz macro register, destination dec register ; counter-- jz destination ; jump if 0 endm