[Decompilation] [th04/th05] Dialog: Face unblitting

Part of P0258, funded by [Anonymous] and Blue Bolt.
This commit is contained in:
nmlgc 2023-10-15 05:04:56 +02:00
parent 36166192bd
commit a06996af3e
4 changed files with 19 additions and 46 deletions

View File

@ -1,43 +0,0 @@
public @DIALOG_FACE_UNPUT_8$QUIUI
@dialog_face_unput_8$quiui proc near
@@top = word ptr 4
@@left = word ptr 6
push bp
mov bp, sp
push di
call @egc_start_copy_noframe$qv
mov ax, [bp+@@top]
mov bx, ax
shl ax, 2
add ax, bx
add ax, GRAM_400
mov es, ax ; ES = (GRAM_400 + (top * (ROW_SIZE / 16)))
assume es:nothing
mov di, ((FACE_H - 1) * ROW_SIZE)
mov ax, [bp+@@left]
shr ax, 3
add di, ax
mov dx, 0A6h
mov al, _page_back
@@y_loop:
mov cx, (FACE_W / (2 * BYTE_DOTS))
@@x_loop:
out dx, al ; graph_accesspage(page_back)
xor al, 1
mov bx, es:[di]
out dx, al ; graph_accesspage(page_back ^ 1)
xor al, 1
mov es:[di], bx
add di, 2
loop @@x_loop
sub di, (ROW_SIZE + (FACE_W / BYTE_DOTS))
jge short @@y_loop
call egc_off
pop di
pop bp
retn 4
@dialog_face_unput_8$quiui endp

View File

@ -139,3 +139,20 @@ void near playfield_copy_front_to_back(void)
egc_off();
}
void pascal near dialog_face_unput_8(uscreen_x_t left, uvram_y_t top)
{
egc_start_copy_noframe();
// ZUN bloat: _ES = grcg_segment(0, top);
_AX = top;
_BX = _AX;
_ES = (SEG_PLANE_B + ((_AX * 4) + _BX));
_DI = ((FACE_H - 1) * ROW_SIZE);
_DI += (left / BYTE_DOTS);
egc_rect_interpage_16(
reinterpret_cast<egc_temp_t __es *>(_DI), FACE_W, page_back
);
egc_off();
}

View File

@ -1909,8 +1909,9 @@ DIALOG_TEXT segment byte public 'CODE' use16
@DIALOG_BOX_PUT$QUIUII procdesc pascal near \
left_and_top:dword, tile:word
@playfield_copy_front_to_back$qv procdesc near
@DIALOG_FACE_UNPUT_8$QUIUI procdesc pascal near \
left_and_top:dword
include th04/main/dialog/face_unput_8.asm
include th04/main/dialog/box_fade_in.asm
; =============== S U B R O U T I N E =======================================

View File

@ -3188,8 +3188,6 @@ DIALOG_TEXT segment byte public 'CODE' use16
left_and_top:dword, tile:word
@playfield_copy_front_to_back$qv procdesc near
include th04/main/dialog/face_unput_8.asm
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame