110 lines
No EOL
1.4 KiB
NASM
110 lines
No EOL
1.4 KiB
NASM
IDEAL
|
|
MODEL large
|
|
P386
|
|
|
|
CODESEG
|
|
|
|
mmask dw 0102h,0202h,0402h,0802h,0102h,0202h,0402h,0802h
|
|
rmask dw 0004h,0104h,0204h,0304h,0004h,0104h,0204h,0304h
|
|
|
|
PUBLIC C ascrolltext
|
|
|
|
PROC C ascrolltext
|
|
|
|
ARG scrl:word, text:dword
|
|
|
|
push ds es si di
|
|
push 0a000h
|
|
pop es
|
|
lds si, [text]
|
|
mov cx, 0d
|
|
@@l1:
|
|
|
|
mov bx, cx
|
|
add bx, [scrl]
|
|
and bx, 3d
|
|
shl bx, 1d
|
|
mov ax, [cs:mmask+bx]
|
|
mov dx, 3c4h
|
|
out dx, ax
|
|
mov ax, [cs:rmask+bx]
|
|
mov dx, 3ceh
|
|
out dx, ax
|
|
|
|
mov di, cx
|
|
add di, [scrl]
|
|
shr di, 2d
|
|
@@l3:
|
|
REPT 20
|
|
add si, 4d
|
|
mov bx, [si-4]
|
|
cmp bx, -1
|
|
je @@l2
|
|
mov ax, [si-2]
|
|
xor [es:bx+di], al
|
|
ENDM
|
|
jmp @@l3
|
|
@@l2:
|
|
inc cx
|
|
cmp cx, 4d
|
|
jne @@l1
|
|
|
|
pop di si es ds
|
|
ret
|
|
ENDP
|
|
|
|
PUBLIC C outline
|
|
|
|
mrol dw 0
|
|
|
|
PROC C outline
|
|
|
|
ARG src:dword, dest:dword
|
|
|
|
push ds es si di
|
|
|
|
mov [cs:mrol], 0802h
|
|
mov cx, 4d
|
|
@@l1:
|
|
mov dx, 3c4h
|
|
mov ax, [cs:mrol]
|
|
out dx, ax
|
|
|
|
lds si, [src]
|
|
add si, cx
|
|
dec si
|
|
les di, [dest]
|
|
xor ax, ax
|
|
mov [es:di-352], al
|
|
mov [es:di-352+176], al
|
|
|
|
ccc=0
|
|
REPT 75
|
|
mov al, [ds:si+ccc*640]
|
|
mov [es:di+ccc*352], al
|
|
mov [es:di+ccc*352+176], al
|
|
ccc=ccc+1
|
|
ENDM
|
|
|
|
mov ax, ds
|
|
add ax, 75*40
|
|
mov ds, ax
|
|
|
|
ccc=0
|
|
REPT 75
|
|
mov al, [ds:si+ccc*640]
|
|
mov [es:di+ccc*352+75*352], al
|
|
mov [es:di+ccc*352+75*352+176], al
|
|
ccc=ccc+1
|
|
ENDM
|
|
|
|
shr [cs:(Byte mrol+1)], 1d
|
|
dec cx
|
|
jnz @@l1
|
|
|
|
|
|
pop di si es ds
|
|
ret
|
|
ENDP
|
|
|
|
END |