95 lines
1.3 KiB
NASM
95 lines
1.3 KiB
NASM
ALIGN 2
|
|
public _prtt,_txtx,_txty,_prttcol
|
|
_txtx dw 0
|
|
_txty dw 0
|
|
_prttcol dw 0
|
|
public _font3x5
|
|
_font3x5 dw 0,0
|
|
truerowsadd dw 0
|
|
|
|
prtmacro MACRO
|
|
local prt41,prt42,prt43,prt44,prt45
|
|
push di
|
|
out dx,al
|
|
mov al,byte ptr cs:_prttcol
|
|
rcr bl,1
|
|
jnc prt41
|
|
mov es:[di],al
|
|
prt41: add di,cs:truerowsadd
|
|
rcr bh,1
|
|
jnc prt42
|
|
mov es:[di],al
|
|
prt42: add di,cs:truerowsadd
|
|
rcr cl,1
|
|
jnc prt43
|
|
mov es:[di],al
|
|
prt43: add di,cs:truerowsadd
|
|
rcr ch,1
|
|
jnc prt44
|
|
mov es:[di],al
|
|
prt44: add di,cs:truerowsadd
|
|
rcr ah,1
|
|
jnc prt45
|
|
mov es:[di],al
|
|
prt45: pop di
|
|
ENDM
|
|
|
|
_prtt PROC FAR
|
|
CBEG
|
|
call vidstart
|
|
mov ax,ds:_rowlen
|
|
mov cs:truerowsadd,ax
|
|
mov fs,cs:_font3x5[2]
|
|
movpar ds,1
|
|
movpar si,0
|
|
mov di,cs:_txty
|
|
mov ax,cs:truerowsadd
|
|
mul di
|
|
mov di,ax
|
|
mov dx,cs:_txtx
|
|
shr dx,2
|
|
add di,dx
|
|
mov dx,3c4h
|
|
mov al,02h
|
|
out dx,al
|
|
inc dx
|
|
xor bp,bp ;cnt
|
|
|
|
mov cx,256
|
|
prt3: lodsb
|
|
cmp al,9 ;tab
|
|
je prt21
|
|
cmp al,0
|
|
je prt1x
|
|
cmp al,31
|
|
ja prt2
|
|
prt22: jmp prt10
|
|
prt1x: jmp prt1
|
|
prt21: inc bp
|
|
inc di
|
|
test bp,7
|
|
jz prt22
|
|
jmp prt21
|
|
prt2: inc bp
|
|
push cx
|
|
mov bl,al
|
|
xor bh,bh
|
|
shl bx,3
|
|
mov ah,fs:[bx+4]
|
|
mov cx,fs:[bx+2]
|
|
mov bx,fs:[bx+0]
|
|
mov al,01h
|
|
prtmacro
|
|
mov al,02h
|
|
prtmacro
|
|
mov al,04h
|
|
prtmacro
|
|
inc di
|
|
inc cs:_txtx
|
|
pop cx
|
|
prt10: dec cx
|
|
jz prt1
|
|
jmp prt3
|
|
prt1: CEND
|
|
_prtt ENDP
|
|
|