SecondReality/ALKU/ASMYT.ASM
2017-09-24 01:45:36 +02:00

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