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