[Decompilation] [th01] .PTN snap functions

Which repurpose the .PTN image slots to store the background of
frequently updated VRAM sections, like all the numbers in the HUD.
Future games would simply use the text RAM and gaiji for numbers. Which
would have worked just fine for TH01 as well (especially since all the
functions we've seen so far are aligned to the 8-pixel byte grid), but
it looks as if ZUN simply wasn't aware of gaiji during the development
of TH01.

Part of P0083, funded by Yanga.
This commit is contained in:
nmlgc 2020-03-17 21:04:24 +01:00
parent a184413f27
commit 9e676ce3ef
8 changed files with 149 additions and 552 deletions

View File

@ -47,12 +47,12 @@ bin\Pipeline\grzview.com: Pipeline\grzview.cpp th01\formats\grz.cpp
bin\th01\zunsoft.com: th01\zunsoft.c
$(CC) $(CFLAGS) -mt -lt -nbin\th01\ $** masters.lib
bin\th01\op.exe: bin\th01\op.obj th01\op_02.c th01\op_03.c th01\op_04.c th01\op_05.c th01\op_06.cpp th01\op_08.c th01\op_09.cpp th01\op_10.c th01\op_11.c th01\op_12.cpp
bin\th01\op.exe: bin\th01\op.obj th01\op_02.c th01\op_03.c th01\op_04.c th01\op_05.c th01\op_06.cpp th01\op_07.cpp th01\op_08.c th01\op_09.cpp th01\op_10.c th01\op_11.c th01\op_12.cpp
$(CC) $(CFLAGS) -ml -3 -DGAME=1 -DBINARY='O' -nbin\th01\ -eOP.EXE @&&|
$**
|
bin\th01\reiiden.exe: bin\th01\reiiden.obj th01\main_02.c th01\main_03.c th01\main_04.c th01\main_05.c th01\main_06.cpp th01\main_08.cpp th01\main_12.c th01\main_13.c th01\main_14.c th01\main_16.c
bin\th01\reiiden.exe: bin\th01\reiiden.obj th01\main_02.c th01\main_03.c th01\main_04.c th01\main_05.c th01\main_06.cpp th01\main_07.cpp th01\main_08.cpp th01\main_12.c th01\main_13.c th01\main_14.c th01\main_16.c
$(CC) $(CFLAGS) -ml -3 -DGAME=1 -DBINARY='M' -nbin\th01\ -eREIIDEN.EXE @&&|
$**
|

View File

@ -2,7 +2,8 @@
/// -----------------------------------------
/// Provides functions for both 32×32 and 16×16 sprites, and optionally
/// supports transparency for images loaded from .PTN files, hardcoded to
/// color #15.
/// color #15. Can also be used to store the backgrounds of frequently updated
/// VRAM regions, using the functions for raw allocation and VRAM snapping.
#define PTN_W 32
#define PTN_H 32
@ -76,6 +77,10 @@ static inline ptn_t* ptn_with_id(int id)
// Displays the given [ptn_id] at (⌊left/8⌋*8, top), disregaring its alpha
// plane.
void ptn_put_noalpha_8(int left, int top, int ptn_id);
// Overwrites the 4 color planes of [ptn_id] with the current VRAM content of
// the 32×32 pixels starting at (⌊left/8⌋*8, top).
void ptn_snap_8(int left, int top, int ptn_id);
// ------------
// 16×16 access
@ -103,5 +108,9 @@ struct PTNQuarter
// Displays the given [quarter] of the given [ptn_id] at (⌊left/8⌋*8, top),
// diregarding its alpha plane.
void ptn_put_quarter_noalpha_8(int left, int top, int ptn_id, int quarter);
// Overwrites the 4 color planes of the given [quarter] of [ptn_id] with the
// current VRAM content of the 16×16 pixels starting at (⌊left/8⌋*8, top).
void ptn_snap_quarter_8(int left, int top, int ptn_id, int quarter);
// ------------
/// -----------------------------------------

60
th01/formats/ptn_snap.cpp Normal file
View File

@ -0,0 +1,60 @@
extern "C" {
#include "th01/formats/ptn.hpp"
void ptn_snap_8(int left, int top, int ptn_id)
{
unsigned int vram_offset = vram_offset_muldiv(left, top);
ptn_t *ptn = ptn_with_id(ptn_id);
for(int y = 0; y < PTN_H; y++) {
#define snap(ptn, vram_offset, w) \
ptn->planes.B[y] = VRAM_CHUNK(B, vram_offset, w); \
ptn->planes.R[y] = VRAM_CHUNK(R, vram_offset, w); \
ptn->planes.G[y] = VRAM_CHUNK(G, vram_offset, w); \
ptn->planes.E[y] = VRAM_CHUNK(E, vram_offset, w);
snap(ptn, vram_offset, PTN_W);
#undef snap
vram_offset += ROW_SIZE;
}
}
static inline ptn_dots_t dot_mask(int x, int w)
{
return static_cast<ptn_dots_t>((1u << w) - 1u) << (w - x);
}
void ptn_snap_quarter_8(int left, int top, int ptn_id, int quarter)
{
int y;
unsigned int vram_offset = vram_offset_muldiv(left, top);
int q_y;
ptn_dots_t q_mask;
long q_x;
ptn_t *ptn = ptn_with_id(ptn_id);
q_y = ptn_quarter_y(quarter);
q_mask = (quarter & 1)
? dot_mask(PTN_QUARTER_W, PTN_QUARTER_W)
: dot_mask( 0, PTN_QUARTER_W);
q_x = ptn_quarter_x(quarter);
for(y = q_y; y < (q_y + PTN_QUARTER_H); y++) {
#define snap_quarter_plane(P, offset, w) \
ptn->planes.P[y] &= q_mask; \
ptn->planes.P[y] |= (VRAM_CHUNK(P, offset, w) << q_x) & ~q_mask;
#define snap_quarter(offset, w) \
snap_quarter_plane(B, offset, w); \
snap_quarter_plane(R, offset, w); \
snap_quarter_plane(G, offset, w); \
snap_quarter_plane(E, offset, w);
snap_quarter(vram_offset, PTN_W);
#undef snap_quarter
#undef snap_quarter_plane
vram_offset += ROW_SIZE;
}
}
}

10
th01/main_07.cpp Normal file
View File

@ -0,0 +1,10 @@
/* ReC98
* -----
* Code segment #7 of TH01's REIIDEN.EXE
*/
#pragma option -Z
#include "ReC98.h"
#include "th01/formats/ptn_snap.cpp"

10
th01/op_07.cpp Normal file
View File

@ -0,0 +1,10 @@
/* ReC98
* -----
* Code segment #7 of TH01's OP.EXE
*/
#pragma option -Z
#include "ReC98.h"
#include "th01/formats/ptn_snap.cpp"

View File

@ -2285,235 +2285,6 @@ loc_D3B6:
leave
retf
_egc_copy_rect_1_to_0 endp
; ---------------------------------------------------------------------------
enter 4, 0
push si
push di
mov di, [bp+0Ah]
mov ax, [bp+8]
imul ax, 50h
push ax
mov ax, [bp+6]
mov bx, 8
cwd
idiv bx
pop dx
add dx, ax
mov si, dx
mov ax, di
mov bx, 40h
cwd
idiv bx
shl ax, 2
mov bx, ax
mov ax, word ptr (_ptn_images + 2)[bx]
mov dx, word ptr _ptn_images[bx]
push ax
mov ax, di
mov bx, 40h
push dx
cwd
idiv bx
imul dx, size ptn_t
pop ax
add ax, dx
pop dx
mov [bp-2], dx
mov [bp-4], ax
xor cx, cx
jmp short loc_D481
; ---------------------------------------------------------------------------
loc_D416:
les bx, _VRAM_PLANE_B
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp-4]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_B], eax
les bx, _VRAM_PLANE_R
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp-4]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_R], eax
les bx, _VRAM_PLANE_G
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp-4]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_G], eax
les bx, _VRAM_PLANE_E
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp-4]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_E], eax
add si, ROW_SIZE
inc cx
loc_D481:
cmp cx, PTN_H
jl short loc_D416
pop di
pop si
leave
retf
; ---------------------------------------------------------------------------
enter 0Eh, 0
push si
push di
mov ax, [bp+8]
imul ax, 50h
push ax
mov ax, [bp+6]
mov bx, 8
cwd
idiv bx
pop dx
add dx, ax
mov di, dx
mov ax, [bp+0Ah]
mov bx, 40h
cwd
idiv bx
shl ax, 2
mov bx, ax
mov ax, word ptr (_ptn_images + 2)[bx]
mov dx, word ptr _ptn_images[bx]
push ax
mov ax, [bp+0Ah]
mov bx, 40h
push dx
cwd
idiv bx
imul dx, size ptn_t
pop ax
add ax, dx
pop dx
mov [bp-0Ch], dx
mov [bp-0Eh], ax
test byte ptr [bp+0Ch], 2
jz short loc_D4DF
mov ax, 10h
jmp short loc_D4E1
; ---------------------------------------------------------------------------
loc_D4DF:
xor ax, ax
loc_D4E1:
mov [bp-2], ax
test byte ptr [bp+0Ch], 1
jz short loc_D4F2
mov eax, 0FFFFh
jmp short loc_D4F8
; ---------------------------------------------------------------------------
loc_D4F2:
mov eax, 0FFFF0000h
loc_D4F8:
mov [bp-6], eax
test byte ptr [bp+0Ch], 1
jz short loc_D507
mov ax, 10h
jmp short loc_D509
; ---------------------------------------------------------------------------
loc_D507:
xor ax, ax
loc_D509:
cwde
mov [bp-0Ah], eax
mov si, [bp-2]
jmp loc_D5E8
; ---------------------------------------------------------------------------
loc_D515:
mov ax, si
shl ax, 2
les bx, [bp-0Eh]
add bx, ax
mov eax, [bp-6]
and es:[bx+ptn_t.planes.PTN_B], eax
les bx, _VRAM_PLANE_B
add bx, di
mov eax, es:[bx]
mov cl, [bp-0Ah]
shl eax, cl
mov edx, [bp-6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp-0Eh]
add bx, dx
or es:[bx+ptn_t.planes.PTN_B], eax
mov eax, [bp-6]
and es:[bx+ptn_t.planes.PTN_R], eax
les bx, _VRAM_PLANE_R
add bx, di
mov eax, es:[bx]
shl eax, cl
mov edx, [bp-6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp-0Eh]
add bx, dx
or es:[bx+ptn_t.planes.PTN_R], eax
mov eax, [bp-6]
and es:[bx+ptn_t.planes.PTN_G], eax
les bx, _VRAM_PLANE_G
add bx, di
mov eax, es:[bx]
shl eax, cl
mov edx, [bp-6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp-0Eh]
add bx, dx
or es:[bx+ptn_t.planes.PTN_G], eax
mov eax, [bp-6]
and es:[bx+ptn_t.planes.PTN_E], eax
les bx, _VRAM_PLANE_E
add bx, di
mov eax, es:[bx]
shl eax, cl
mov edx, [bp-6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp-0Eh]
add bx, dx
or es:[bx+ptn_t.planes.PTN_E], eax
add di, ROW_SIZE
inc si
loc_D5E8:
mov ax, [bp-2]
add ax, 10h
cmp ax, si
jg loc_D515
pop di
pop si
leave
retf
op_07_TEXT ends
; ===========================================================================

View File

@ -5460,264 +5460,8 @@ loc_104B1:
retf
_egc_copy_rect_1_to_0 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_104C2 proc far
@@ptn = dword ptr -4
arg_0 = word ptr 6
arg_2 = word ptr 8
arg_4 = word ptr 0Ah
enter 4, 0
push si
push di
mov di, [bp+arg_4]
mov ax, [bp+arg_2]
imul ax, 50h
push ax
mov ax, [bp+arg_0]
mov bx, 8
cwd
idiv bx
pop dx
add dx, ax
mov si, dx
mov ax, di
mov bx, 40h
cwd
idiv bx
shl ax, 2
mov bx, ax
mov ax, word ptr (_ptn_images + 2)[bx]
mov dx, word ptr _ptn_images[bx]
push ax
mov ax, di
mov bx, 40h
push dx
cwd
idiv bx
imul dx, size ptn_t
pop ax
add ax, dx
pop dx
mov word ptr [bp+@@ptn+2], dx
mov word ptr [bp+@@ptn], ax
xor cx, cx
jmp short loc_1057C
; ---------------------------------------------------------------------------
loc_10511:
les bx, _VRAM_PLANE_B
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_B], eax
les bx, _VRAM_PLANE_R
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_R], eax
les bx, _VRAM_PLANE_G
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_G], eax
les bx, _VRAM_PLANE_E
add bx, si
mov eax, es:[bx]
mov dx, cx
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
mov es:[bx+ptn_t.planes.PTN_E], eax
add si, ROW_SIZE
inc cx
loc_1057C:
cmp cx, PTN_H
jl short loc_10511
pop di
pop si
leave
retf
sub_104C2 endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_10585 proc far
@@ptn = dword ptr -0Eh
var_A = dword ptr -0Ah
var_6 = dword ptr -6
var_2 = word ptr -2
arg_0 = word ptr 6
arg_2 = word ptr 8
arg_4 = word ptr 0Ah
arg_6 = byte ptr 0Ch
enter 0Eh, 0
push si
push di
mov ax, [bp+arg_2]
imul ax, 50h
push ax
mov ax, [bp+arg_0]
mov bx, 8
cwd
idiv bx
pop dx
add dx, ax
mov di, dx
mov ax, [bp+arg_4]
mov bx, 40h
cwd
idiv bx
shl ax, 2
mov bx, ax
mov ax, word ptr (_ptn_images + 2)[bx]
mov dx, word ptr _ptn_images[bx]
push ax
mov ax, [bp+arg_4]
mov bx, 40h
push dx
cwd
idiv bx
imul dx, size ptn_t
pop ax
add ax, dx
pop dx
mov word ptr [bp+@@ptn+2], dx
mov word ptr [bp+@@ptn], ax
test [bp+arg_6], 2
jz short loc_105DA
mov ax, 10h
jmp short loc_105DC
; ---------------------------------------------------------------------------
loc_105DA:
xor ax, ax
loc_105DC:
mov [bp+var_2], ax
test [bp+arg_6], 1
jz short loc_105ED
mov eax, 0FFFFh
jmp short loc_105F3
; ---------------------------------------------------------------------------
loc_105ED:
mov eax, 0FFFF0000h
loc_105F3:
mov [bp+var_6], eax
test [bp+arg_6], 1
jz short loc_10602
mov ax, 10h
jmp short loc_10604
; ---------------------------------------------------------------------------
loc_10602:
xor ax, ax
loc_10604:
cwde
mov [bp+var_A], eax
mov si, [bp+var_2]
jmp loc_106E3
; ---------------------------------------------------------------------------
loc_10610:
mov ax, si
shl ax, 2
les bx, [bp+@@ptn]
add bx, ax
mov eax, [bp+var_6]
and es:[bx+ptn_t.planes.PTN_B], eax
les bx, _VRAM_PLANE_B
add bx, di
mov eax, es:[bx]
mov cl, byte ptr [bp+var_A]
shl eax, cl
mov edx, [bp+var_6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
or es:[bx+ptn_t.planes.PTN_B], eax
mov eax, [bp+var_6]
and es:[bx+ptn_t.planes.PTN_R], eax
les bx, _VRAM_PLANE_R
add bx, di
mov eax, es:[bx]
shl eax, cl
mov edx, [bp+var_6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
or es:[bx+ptn_t.planes.PTN_R], eax
mov eax, [bp+var_6]
and es:[bx+ptn_t.planes.PTN_G], eax
les bx, _VRAM_PLANE_G
add bx, di
mov eax, es:[bx]
shl eax, cl
mov edx, [bp+var_6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
or es:[bx+ptn_t.planes.PTN_G], eax
mov eax, [bp+var_6]
and es:[bx+ptn_t.planes.PTN_E], eax
les bx, _VRAM_PLANE_E
add bx, di
mov eax, es:[bx]
shl eax, cl
mov edx, [bp+var_6]
not edx
and eax, edx
mov dx, si
shl dx, 2
les bx, [bp+@@ptn]
add bx, dx
or es:[bx+ptn_t.planes.PTN_E], eax
add di, ROW_SIZE
inc si
loc_106E3:
mov ax, [bp+var_2]
add ax, 10h
cmp ax, si
jg loc_10610
pop di
pop si
leave
retf
sub_10585 endp
extern _ptn_snap_8:proc
extern _ptn_snap_quarter_8:proc
main_07_TEXT ends
; ===========================================================================
@ -18762,14 +18506,14 @@ loc_18A3A:
mov ax, si
cwd
idiv bx
add ax, 146h
add ax, (PTN_SLOT_5 + 6)
push ax
push 10h
push 16
mov ax, si
shl ax, 4
add ax, 100h
add ax, 256
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
inc si
@ -18795,12 +18539,12 @@ loc_18A60:
loc_18A96:
push si
push 1480010h
push ((PTN_SLOT_5 + 8) shl 16) or 16
mov ax, si
shl ax, 4
add ax, 190h
add ax, 400
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
inc si
@ -18859,14 +18603,14 @@ loc_18B0D:
mov ax, si
cwd
idiv bx
add ax, 14Ah
add ax, (PTN_SLOT_5 + 10)
push ax
push 0
mov ax, si
shl ax, 4
add ax, 100h
add ax, 256
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
inc si
@ -18893,12 +18637,12 @@ loc_18B33:
loc_18B6D:
push si
push 14C0000h
push ((PTN_SLOT_5 + 12) shl 16) or 0
mov ax, si
shl ax, 4
add ax, 190h
add ax, 400
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
inc si
@ -19206,7 +18950,7 @@ loc_18DA0:
mov ax, si
cwd
idiv bx
add ax, 140h
add ax, PTN_SLOT_5
push ax
mov ax, si
mov bx, 6
@ -19218,9 +18962,9 @@ loc_18DA0:
cwd
idiv bx
shl dx, 4
add dx, 80h
add dx, 128
push dx
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
pushd 0
mov ax, si
@ -19352,7 +19096,7 @@ loc_18EB3:
mov ax, si
cwd
idiv bx
add ax, 140h
add ax, PTN_SLOT_5
push ax
mov ax, si
mov bx, 6
@ -19364,9 +19108,9 @@ loc_18EB3:
cwd
idiv bx
shl dx, 4
add dx, 80h
add dx, 128
push dx
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
push 0
call _graph_accesspage_func
@ -19427,14 +19171,14 @@ loc_18F39:
mov ax, si
cwd
idiv bx
add ax, 144h
add ax, (PTN_SLOT_5 + 4)
push ax
push 10h
push 16
mov ax, si
shl ax, 4
add ax, 80h
add ax, 128
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
push 10000h
push 10h
@ -19554,14 +19298,14 @@ loc_1901D:
mov ax, si
cwd
idiv bx
add ax, 144h
add ax, (PTN_SLOT_5 + 4)
push ax
push 10h
push 16
mov ax, si
shl ax, 4
add ax, 80h
add ax, 128
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
push 0
call _graph_accesspage_func
@ -19606,10 +19350,7 @@ sub_19085 proc far
var_4 = byte ptr -4
enter 4, 0
pushd 142h
push 200260h
call sub_10585
add sp, 8
call _ptn_snap_quarter_8 c, large (32 shl 16) or 608, large (PTN_SLOT_5 + 2)
push ss
lea ax, [bp+var_4]
push ax
@ -19823,11 +19564,7 @@ var_6 = byte ptr -6
; ---------------------------------------------------------------------------
loc_19274:
push si
push 14D0000h
push 200h
call sub_10585
add sp, 8
call _ptn_snap_quarter_8 c, 512, large ((PTN_SLOT_5 + 13) shl 16) or 0, si
inc si
loc_19287:

View File

@ -5229,7 +5229,7 @@ sub_1E4EC endp
sub_1E526 proc far
var_6 = word ptr -6
@@image = word ptr -6
var_4 = word ptr -4
var_2 = word ptr -2
@ -5240,7 +5240,7 @@ var_2 = word ptr -2
mov [bp+var_2], ax
mov ax, point_3982A.y
mov [bp+var_4], ax
mov [bp+var_6], 3
mov [bp+@@image], 3
push 1
call _graph_accesspage_func
pop cx
@ -5254,8 +5254,8 @@ loc_1E549:
; ---------------------------------------------------------------------------
loc_1E54D:
mov ax, [bp+var_6]
add ax, 80h ; '?'
mov ax, [bp+@@image]
add ax, PTN_SLOT_2
push ax
mov ax, di
shl ax, 5
@ -5265,9 +5265,9 @@ loc_1E54D:
shl ax, 5
add ax, [bp+var_2]
push ax
call sub_104C2
call _ptn_snap_8
add sp, 6
inc [bp+var_6]
inc [bp+@@image]
inc si
loc_1E572:
@ -11502,14 +11502,14 @@ loc_219DD:
mov ax, [bp+var_2]
cwd
idiv bx
add ax, 14Eh
add ax, (PTN_SLOT_5 + 14)
push ax
push 30h ; '0'
push 48
mov ax, [bp+var_2]
shl ax, 4
add ax, 80h ; '?'
add ax, 128
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
mov ax, [bp+var_2]
cmp ax, word_3A1E7
@ -11550,14 +11550,14 @@ loc_21A35:
mov ax, di
cwd
idiv bx
add ax, 14Eh
add ax, (PTN_SLOT_5 + 14)
push ax
push 30h ; '0'
push 48
mov ax, di
shl ax, 4
add ax, 80h ; '?'
add ax, 128
push ax
call sub_10585
call _ptn_snap_quarter_8
add sp, 8
cmp di, word_3A1E7
jnb short loc_21A64
@ -17656,7 +17656,7 @@ sub_24E33 proc far
var_A = word ptr -0Ah
var_8 = word ptr -8
var_6 = word ptr -6
@@image = word ptr -6
var_4 = word ptr -4
var_2 = word ptr -2
arg_0 = word ptr 6
@ -17690,7 +17690,7 @@ loc_24E6E:
mov [bp+var_4], ax
loc_24E71:
mov [bp+var_6], 0
mov [bp+@@image], 0
push 1
call _graph_accesspage_func
pop cx
@ -17704,8 +17704,8 @@ loc_24E82:
; ---------------------------------------------------------------------------
loc_24E86:
mov ax, [bp+var_6]
add ax, 80h ; '?'
mov ax, [bp+@@image]
add ax, PTN_SLOT_2
push ax
mov ax, di
shl ax, 5
@ -17715,9 +17715,9 @@ loc_24E86:
shl ax, 5
add ax, [bp+var_2]
push ax
call sub_104C2
call _ptn_snap_8
add sp, 6
inc [bp+var_6]
inc [bp+@@image]
inc si
loc_24EAB:
@ -23858,7 +23858,7 @@ sub_287D9 endp
sub_28852 proc near
var_6 = word ptr -6
@@image = word ptr -6
var_4 = word ptr -4
var_2 = word ptr -2
@ -23869,7 +23869,7 @@ var_2 = word ptr -2
mov [bp+var_2], ax
mov ax, word_39A2B
mov [bp+var_4], ax
mov [bp+var_6], 0
mov [bp+@@image], 0
push 1
call _graph_accesspage_func
pop cx
@ -23883,8 +23883,8 @@ loc_28875:
; ---------------------------------------------------------------------------
loc_28879:
mov ax, [bp+var_6]
add ax, 80h ; '?'
mov ax, [bp+@@image]
add ax, PTN_SLOT_2
push ax
mov ax, di
shl ax, 5
@ -23894,9 +23894,9 @@ loc_28879:
shl ax, 5
add ax, [bp+var_2]
push ax
call sub_104C2
call _ptn_snap_8
add sp, 6
inc [bp+var_6]
inc [bp+@@image]
inc si
loc_2889E: