322 lines
No EOL
3.8 KiB
NASM
322 lines
No EOL
3.8 KiB
NASM
IDEAL
|
|
MODEL large
|
|
P386
|
|
|
|
CODESEG
|
|
|
|
aseg dw 0
|
|
|
|
;ntaulu db 1000b,1100b,1110b,1111b
|
|
;taulu db 1111b,0111b,0011b,0001b
|
|
|
|
ntaulu db 0001b,0011b,0111b,1111b
|
|
taulu db 1111b,1110b,1100b,1000b
|
|
|
|
ptaulu db 1,2,4,8
|
|
|
|
PUBLIC C init_uframe, C ulosta_frame
|
|
|
|
PROC C init_uframe
|
|
|
|
ARG fseg:word
|
|
|
|
mov ax, [fseg]
|
|
mov [cs:aseg], ax
|
|
ret
|
|
ENDP
|
|
|
|
PROC C ulosta_frame
|
|
|
|
ARG scseg:word
|
|
|
|
push ds di si
|
|
|
|
xor di, di
|
|
xor si, si
|
|
mov ax, [scseg]
|
|
mov es, ax
|
|
mov ds, [cs:aseg]
|
|
mov dx, 03c4h ; map mask... 03c4h, 02..
|
|
|
|
@@looppi:
|
|
lodsb
|
|
cmp al, 0d
|
|
jg @@outtaa
|
|
je @@over
|
|
@@skip:
|
|
cbw
|
|
sub di, ax
|
|
|
|
lodsb
|
|
cmp al, 0d
|
|
jl @@skip
|
|
je @@over
|
|
|
|
@@outtaa:
|
|
dec al
|
|
jz @@single
|
|
|
|
cbw
|
|
mov bx, di
|
|
and bx, 3d
|
|
add bx, ax
|
|
shr bx, 2d
|
|
or bx, bx
|
|
jz @@samebyte
|
|
cmp bx, 1d
|
|
je @@twobytes
|
|
|
|
mov cx, ax
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ah, [cs:taulu+bx]
|
|
mov al, 2d
|
|
out dx, ax
|
|
mov al, [ds:si]
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
|
|
push di cx
|
|
|
|
mov ax, di
|
|
add cx, ax
|
|
shr cx, 2d
|
|
sub cx, bx
|
|
dec cx
|
|
shr di, 2d
|
|
inc di
|
|
|
|
mov ax, 0f02h
|
|
out dx, ax
|
|
mov al, [ds:si]
|
|
mov ah, al
|
|
shr cx, 1d
|
|
jnc @@l1
|
|
stosb
|
|
@@l1: jcxz @@l2
|
|
rep stosw
|
|
|
|
@@l2: pop cx di
|
|
add di, cx
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ah, [cs:ntaulu+bx]
|
|
mov al, 2d
|
|
out dx, ax
|
|
lodsb
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
|
|
inc di
|
|
|
|
lodsb
|
|
cmp al, 0d
|
|
jl @@skip
|
|
jg @@outtaa
|
|
je @@over
|
|
|
|
@@twobytes:
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov cl, [cs:taulu+bx]
|
|
add di, ax
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ch, [cs:ntaulu+bx]
|
|
mov ah, cl
|
|
mov al, 2d
|
|
out dx, ax
|
|
mov cl, [ds:si]
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx-1], cl
|
|
mov ah, ch
|
|
out dx, ax
|
|
mov [es:bx], cl
|
|
inc di
|
|
inc si
|
|
|
|
lodsb
|
|
cmp al, 0d
|
|
jl @@skip
|
|
jg @@outtaa
|
|
je @@over
|
|
|
|
|
|
@@samebyte:
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov cl, [cs:taulu+bx]
|
|
add di, ax
|
|
mov bx, di
|
|
and bx, 3d
|
|
and cl, [cs:ntaulu+bx]
|
|
mov ah, cl
|
|
mov al, 02h
|
|
out dx, ax
|
|
lodsb
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
inc di
|
|
|
|
lodsb
|
|
cmp al, 0d
|
|
jl @@skip
|
|
jg @@outtaa
|
|
je @@over
|
|
|
|
|
|
@@single:
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ah, [cs:ptaulu+bx]
|
|
mov al, 2d
|
|
out dx, ax
|
|
lodsb
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
inc di
|
|
|
|
;-------------
|
|
lodsb
|
|
cmp al, 0d
|
|
jl @@skip
|
|
jg @@outtaa
|
|
je @@over
|
|
|
|
@@over:
|
|
mov di, si
|
|
shr si, 4d
|
|
mov ax, ds
|
|
add ax, si
|
|
and di, 15d
|
|
jz @@exit
|
|
inc ax
|
|
@@exit:
|
|
mov [cs:aseg], ax
|
|
|
|
pop si di ds
|
|
|
|
ret
|
|
ENDP
|
|
|
|
PROC ruudulle
|
|
|
|
dec al
|
|
jz @@single
|
|
|
|
cbw
|
|
mov bx, di
|
|
and bx, 3d
|
|
add bx, ax
|
|
shr bx, 2d
|
|
or bx, bx
|
|
jz @@samebyte
|
|
cmp bx, 1d
|
|
je @@twobytes
|
|
|
|
mov cx, ax
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ah, [cs:taulu+bx]
|
|
mov al, 2d
|
|
out dx, ax
|
|
mov al, [ds:si]
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
|
|
push di cx
|
|
|
|
mov ax, di
|
|
add cx, ax
|
|
shr cx, 2d
|
|
sub cx, bx
|
|
dec cx
|
|
shr di, 2d
|
|
inc di
|
|
|
|
mov ax, 0f02h
|
|
out dx, ax
|
|
mov al, [ds:si]
|
|
mov ah, al
|
|
shr cx, 1d
|
|
jnc @@l1
|
|
stosb
|
|
@@l1: jcxz @@l2
|
|
rep stosw
|
|
|
|
@@l2: pop cx di
|
|
add di, cx
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ah, [cs:ntaulu+bx]
|
|
mov al, 2d
|
|
out dx, ax
|
|
lodsb
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
|
|
inc di
|
|
ret
|
|
|
|
@@twobytes:
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov cl, [cs:taulu+bx]
|
|
add di, ax
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ch, [cs:ntaulu+bx]
|
|
mov ah, cl
|
|
mov al, 2d
|
|
out dx, ax
|
|
mov cl, [ds:si]
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx-1], cl
|
|
mov ah, ch
|
|
out dx, ax
|
|
mov [es:bx], cl
|
|
inc di
|
|
inc si
|
|
ret
|
|
|
|
@@samebyte:
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov cl, [cs:taulu+bx]
|
|
add di, ax
|
|
mov bx, di
|
|
and bx, 3d
|
|
and cl, [cs:ntaulu+bx]
|
|
mov ah, cl
|
|
mov al, 02h
|
|
out dx, ax
|
|
lodsb
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
inc di
|
|
ret
|
|
|
|
@@single:
|
|
mov bx, di
|
|
and bx, 3d
|
|
mov ah, [cs:ptaulu+bx]
|
|
mov al, 2d
|
|
out dx, ax
|
|
lodsb
|
|
mov bx, di
|
|
shr bx, 2d
|
|
mov [es:bx], al
|
|
inc di
|
|
ret
|
|
ENDP
|
|
|
|
END |