; (identical to the already decompiled TH02 version, except that it now uses ; Pascal calling convention and clamps the color parameter to the 0~15 range.) public GRAPH_PUTSA_FX graph_putsa_fx proc far @@glyph = byte ptr -32h var_12 = word ptr -12h @@spacing = word ptr -10h @@weight = word ptr -0Eh var_C = word ptr -0Ch var_A = word ptr -0Ah var_8 = dword ptr -8 var_4 = word ptr -4 var_2 = word ptr -2 if GAME eq 2 @@x = word ptr 6 @@y = word ptr 8 @@fx = word ptr 0Ah @@str = dword ptr 0Ch else @@str = dword ptr 6 @@fx = word ptr 0Ah @@y = word ptr 0Ch @@x = word ptr 0Eh endif enter 32h, 0 push si push di mov di, [bp+@@x] mov ax, [bp+@@fx] sar ax, 4 and ax, 3 mov [bp+@@weight], ax mov ax, [bp+@@fx] sar ax, 6 and ax, 7 mov [bp+@@spacing], ax push GC_RMW mov ax, [bp+@@fx] if GAME eq 3 and ax, 0Fh push ax endif call grcg_setcolor mov dx, 68h ; 'h' mov al, 0Bh out dx, al jmp loc_AD92 ; --------------------------------------------------------------------------- loc_AB82: mov ax, [bp+@@y] imul ax, 50h push ax mov ax, di mov bx, 8 cwd idiv bx pop dx add dx, ax mov word ptr [bp+var_8+2], 0A800h mov word ptr [bp+var_8], dx mov ax, di cwd idiv bx mov [bp+var_C], dx les bx, [bp+@@str] if GAME eq 3 assume es:nothing endif mov al, es:[bx] mov ah, 0 mov bx, ax test __mbctype+1[bx], 4 jz short loc_ABD7 mov bx, word ptr [bp+@@str] mov al, es:[bx] cbw shl ax, 8 mov dl, es:[bx+1] mov dh, 0 add ax, dx push ax call __mbcjmstojis pop cx mov [bp+var_2], ax add word ptr [bp+@@str], 2 jmp short loc_AC1D ; --------------------------------------------------------------------------- loc_ABD7: les bx, [bp+@@str] mov al, es:[bx] mov ah, 0 mov bx, ax test __mbctype+1[bx], 3 jz short loc_ABF5 mov bx, word ptr [bp+@@str] mov al, es:[bx] mov ah, 0 add ax, 2980h jmp short loc_AC10 ; --------------------------------------------------------------------------- loc_ABF5: les bx, [bp+@@str] mov al, es:[bx] cbw mov bx, ax test byte ptr __ctype+1[bx], 5Eh jz short loc_AC15_ mov bx, word ptr [bp+@@str] mov al, es:[bx] mov ah, 0 add ax, 2900h loc_AC10: mov [bp+var_2], ax jmp short loc_AC1A_ ; --------------------------------------------------------------------------- loc_AC15_: mov [bp+var_2], 2B21h loc_AC1A_: inc word ptr [bp+@@str] loc_AC1D: mov al, byte ptr [bp+var_2] and al, 0FFh mov dx, 0A1h out dx, al mov ax, [bp+var_2] shr ax, 8 sub al, 20h ; ' ' mov dx, 0A3h out dx, al cmp [bp+var_2], 2921h jb short loc_AC7E cmp [bp+var_2], 2B7Eh ja short loc_AC7E cmp di, 278h jg loc_AD9D mov [bp+var_12], 0 jmp short loc_AC71 ; --------------------------------------------------------------------------- loc_AC4F: mov al, byte ptr [bp+var_12] or al, 20h mov dx, 0A5h out dx, al mov dx, 0A9h in al, dx mov ah, 0 shl ax, 8 mov bx, [bp+var_12] add bx, bx lea dx, [bp+@@glyph] add bx, dx mov ss:[bx], ax inc [bp+var_12] loc_AC71: cmp [bp+var_12], 10h jl short loc_AC4F mov [bp+var_A], 0 jmp short loc_ACD4 ; --------------------------------------------------------------------------- loc_AC7E: cmp di, 270h jg loc_AD9D mov [bp+var_12], 0 jmp short loc_ACC9 ; --------------------------------------------------------------------------- loc_AC8D: mov al, byte ptr [bp+var_12] or al, 20h mov dx, 0A5h out dx, al mov dx, 0A9h in al, dx mov ah, 0 shl ax, 8 mov bx, [bp+var_12] add bx, bx lea dx, [bp+@@glyph] add bx, dx mov ss:[bx], ax mov dx, 0A5h mov al, byte ptr [bp+var_12] out dx, al mov dx, 0A9h in al, dx mov ah, 0 mov bx, [bp+var_12] add bx, bx lea dx, [bp+@@glyph] add bx, dx add ss:[bx], ax inc [bp+var_12] loc_ACC9: cmp [bp+var_12], 10h jl short loc_AC8D mov [bp+var_A], 1 loc_ACD4: mov [bp+var_12], 0 jmp loc_AD79 ; --------------------------------------------------------------------------- loc_ACDC: mov bx, [bp+var_12] add bx, bx lea ax, [bp+@@glyph] add bx, ax mov ax, ss:[bx] mov [bp+var_4], ax mov ax, [bp+@@weight] cmp ax, 1 jz short loc_AD00 cmp ax, 2 jz short loc_AD16 cmp ax, 3 jz short loc_AD0C jmp short loc_AD2C ; --------------------------------------------------------------------------- loc_AD00: mov si, [bp+var_4] mov ax, si add ax, ax or [bp+var_4], ax jmp short loc_AD2C ; --------------------------------------------------------------------------- loc_AD0C: mov si, [bp+var_4] mov ax, si add ax, ax or [bp+var_4], ax loc_AD16: mov si, [bp+var_4] mov ax, si add ax, ax or [bp+var_4], ax xor si, [bp+var_4] mov ax, si add ax, ax not ax and [bp+var_4], ax loc_AD2C: cmp [bp+var_C], 0 jz short loc_AD5F mov cl, byte ptr [bp+var_C] add cl, 8 mov ax, [bp+var_4] shr ax, cl les bx, [bp+var_8] mov es:[bx], al mov ax, [bp+var_4] mov cl, byte ptr [bp+var_C] shr ax, cl mov es:[bx+1], al mov cl, 8 sub cl, byte ptr [bp+var_C] mov al, byte ptr [bp+var_4] shl al, cl mov es:[bx+2], al jmp short loc_AD72 ; --------------------------------------------------------------------------- loc_AD5F: mov ax, [bp+var_4] shr ax, 8 les bx, [bp+var_8] mov es:[bx], al mov al, byte ptr [bp+var_4] mov es:[bx+1], al loc_AD72: add word ptr [bp+var_8], 50h ; 'P' inc [bp+var_12] loc_AD79: cmp [bp+var_12], 10h jl loc_ACDC cmp [bp+var_A], 0 jz short loc_AD8A add di, 8 loc_AD8A: mov ax, [bp+@@spacing] add ax, 8 add di, ax loc_AD92: les bx, [bp+@@str] cmp byte ptr es:[bx], 0 jnz loc_AB82 loc_AD9D: mov dx, 68h ; 'h' mov al, 0Ah out dx, al call grcg_off pop di pop si leave if GAME eq 2 retf else retf 0Ah endif graph_putsa_fx endp