From 803c079a5dbc0ca931628cec7753fcad3ceba583 Mon Sep 17 00:00:00 2001 From: nmlgc Date: Fri, 21 Feb 2020 17:22:58 +0100 Subject: [PATCH] [Decompilation] [th03] RES_YUME.COM Huh, C++ wants its `char`s to be unsigned in order to *not* sign-extend them to 16 bits for comparison against ASCII literals?! Anyway, that completes TH03's ZUN.COM, with bascially no new C code. Part of P0077, funded by Splashman and -Tom-. --- Makefile.mak | 5 + build32b.bat | 1 - th02/res_init.c | 4 +- th03/res_yume.cpp | 26 ++++ th03_res_yume.asm | 331 ---------------------------------------------- 5 files changed, 33 insertions(+), 334 deletions(-) create mode 100644 th03/res_yume.cpp delete mode 100644 th03_res_yume.asm diff --git a/Makefile.mak b/Makefile.mak index 594996e1..8c825c1b 100644 --- a/Makefile.mak +++ b/Makefile.mak @@ -76,6 +76,11 @@ bin\th02\maine.exe: bin\th02\maine.obj th02\maine021.c th02\maine022.c th02\main $** | +bin\th03\res_yume.com: th03\res_yume.cpp + $(CC) $(CFLAGS) -mt -lt -Z -DGAME=3 -nbin\th03\ -eRES_YUME.COM @&&| +$** +| masters.lib + bin\th03\op.exe: bin\th03\op.obj th03\op_02.c $(CC) $(CFLAGS) -ml -DGAME=3 -nbin\th03\ -eOP.EXE @&&| $** diff --git a/build32b.bat b/build32b.bat index a9b6dce1..4965b200 100755 --- a/build32b.bat +++ b/build32b.bat @@ -19,7 +19,6 @@ if errorlevel 9009 goto no_tasm32 %ReC98_ASM% th02_maine.asm bin\th02\maine.obj %ReC98_ASM% /DTHIEF libs\sprite16\sprite16.asm bin\th03\zunsp.obj -%ReC98_ASM% th03_res_yume.asm bin\th03\res_yume.obj %ReC98_ASM% th03_op.asm bin\th03\op.obj %ReC98_ASM% th03_main.asm bin\th03\main.obj %ReC98_ASM% th03_mainl.asm bin\th03\mainl.obj diff --git a/th02/res_init.c b/th02/res_init.c index 3fb58de7..eddc5eb4 100644 --- a/th02/res_init.c +++ b/th02/res_init.c @@ -1,4 +1,4 @@ -int main(int argc, const char **argv) +int main(int argc, const unsigned char **argv) { seg_t sgm; const char *res_id = RES_ID; @@ -41,7 +41,7 @@ int main(int argc, const char **argv) dos_puts2("作れません、わたしの居場所がないの!\n\n"); return 1; } - resident_bytes = MK_FP(sgm, 0); + resident_bytes = (char far *)MK_FP(sgm, 0); dos_puts2("それでは、よろしくお願いします\n\n"); for(i = (RES_ID_STRLEN + 1); i < sizeof(resident_t); i++) { resident_bytes[i] = 0; diff --git a/th03/res_yume.cpp b/th03/res_yume.cpp new file mode 100644 index 00000000..911b2549 --- /dev/null +++ b/th03/res_yume.cpp @@ -0,0 +1,26 @@ +/* ReC98 + * ----- + * TH03 ZUN.COM -5. Initializes the resident structure and configuration file + * required in order to run TH03. + */ + +#include +#include "th01/ranks.h" +#include "th02/snd/snd.h" +#include "th03/common.h" +#include "th03/player/score.h" +#include "th03/chars/chars.hpp" +#include "th03/resident.hpp" +#include "th03/formats/cfg.h" + +#pragma option -a1 + +char debug = 0; +const cfg_options_t OPTS_DEFAULT = { SND_BGM_FM, KM_KEY_KEY, RANK_NORMAL }; + +#include "th02/formats/cfg_init.c" + +#define LOGO \ + "東方夢時空用  常駐プログラム RES_YUME.com Version1.00 (c)zun 1997" + +#include "th02/res_init.c" diff --git a/th03_res_yume.asm b/th03_res_yume.asm deleted file mode 100644 index da8381d3..00000000 --- a/th03_res_yume.asm +++ /dev/null @@ -1,331 +0,0 @@ -; -; +-------------------------------------------------------------------------+ -; | This file has been generated by The Interactive Disassembler (IDA) | -; | Copyright (c) 2009 by Hex-Rays, | -; +-------------------------------------------------------------------------+ -; -; Input MD5 : 4E0826B310EA5A6F9DE4C37E09626566 - -; File Name : th03/ZUN.COM:RES_YUME (-5) -; Format : MS-DOS COM-file -; Base Address: 0h Range: 100h-16F2h Loaded length: 15F2h -; OS type : MS DOS -; Application type: Executable 16bit - - .286 - .model tiny - __TINY__ equ 1 - -include ReC98.inc -include th03/th03.inc - -; =========================================================================== - -; Segment type: Pure code -_TEXT segment word public 'CODE' use16 - assume cs:_TEXT - assume es:nothing, ss:nothing, ds:_TEXT - -include libs/BorlandC/c0.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_367 proc near - -var_6 = byte ptr -6 -arg_0 = byte ptr 4 - - enter 6, 0 - push si - push di - mov di, offset aYume_cfg ; "yume.cfg" - lea ax, [bp+var_6] - push ss - push ax - push ds - push offset unk_131F - mov cx, 5 - call N_SCOPY@ - push 3D02h - push di - call dos_axdx - mov si, ax - or si, si - jle short loc_398 - push ax - push 0 - push 5 - push 0 - call dos_seek - jmp short loc_3AB -; --------------------------------------------------------------------------- - -loc_398: - push di - push 20h - call dos_create - mov si, ax - push ax - push ss - lea ax, [bp+var_6] - push ax - push 5 - call dos_write - -loc_3AB: - push si - push ss - lea ax, [bp+arg_0] - push ax - push 2 - call dos_write - push si - push ds - push offset byte_131E - push 1 - call dos_write - push si - call dos_close - pop di - pop si - leave - retn -sub_367 endp - - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -; int __cdecl main(int argc, const char **argv, const char **envp) -_main proc near - -var_8 = dword ptr -8 -var_4 = word ptr -4 -var_2 = word ptr -2 -_argc = word ptr 4 -_argv = word ptr 6 -_envp = word ptr 8 - - enter 8, 0 - push si - push di - mov si, [bp+_argv] - mov [bp+var_2], offset aYumeconfig ; "YUMEConfig" - push [bp+var_2] - push 0Ah - push 10h - call resdata_exist - mov di, ax - push offset aUmx ; "\n\n東方夢時空用  常駐プログラム RES_YU"... - call dos_puts2 - call graph_clear - cmp [bp+_argc], 2 - jnz short loc_44E - mov bx, [si+2] - cmp byte ptr [bx], 2Dh - jz short loc_3FE - cmp byte ptr [bx], 2Fh - jnz short loc_423 - -loc_3FE: - mov bx, [si+2] - cmp byte ptr [bx+1], 52h - jz short loc_40D - cmp byte ptr [bx+1], 72h - jnz short loc_423 - -loc_40D: - or di, di - jnz short loc_416 - push offset aVavVBavVVvvVV ; "わたし、まだいませんよぉ\n\n" - jmp short loc_46D -; --------------------------------------------------------------------------- - -loc_416: - push di - call dos_free - push offset aVVcvVcbavVIqvj ; "さよなら、また会えたらいいな\n\n" - call dos_puts2 - jmp loc_4A3 -; --------------------------------------------------------------------------- - -loc_423: - mov bx, [si+2] - cmp byte ptr [bx], 2Dh - jz short loc_430 - cmp byte ptr [bx], 2Fh - jnz short loc_446 - -loc_430: - mov bx, [si+2] - cmp byte ptr [bx+1], 44h - jz short loc_43F - cmp byte ptr [bx+1], 64h - jnz short loc_446 - -loc_43F: - mov byte_131E, 1 - jmp short loc_44E -; --------------------------------------------------------------------------- - -loc_446: - push offset aVV ; "そんなオプション付けられても、困るんで・... - call dos_puts2 - jmp short loc_470 -; --------------------------------------------------------------------------- - -loc_44E: - or di, di - jz short loc_45A - push offset aVavVBavVVVvvVV ; "わたし、すでにいますよぉ\n\n" - call dos_puts2 - jmp short loc_470 -; --------------------------------------------------------------------------- - -loc_45A: - push [bp+var_2] - push 0Ah - push 10h - call resdata_create - mov di, ax - or di, di - jnz short loc_475 - push offset aNVVVV ; "作れません、わたしの居場所がないの!\n\n" - -loc_46D: - call dos_puts2 - -loc_470: - mov ax, 1 - jmp short loc_4A5 -; --------------------------------------------------------------------------- - -loc_475: - mov word ptr [bp+var_8+2], di - mov word ptr [bp+var_8], 0 - push offset aVVVVBavcvivVnv ; "それでは、よろしくお願いします\n\n" - call dos_puts2 - mov [bp+var_4], 0Bh - jmp short loc_497 -; --------------------------------------------------------------------------- - -loc_48A: - les bx, [bp+var_8] - add bx, [bp+var_4] - mov byte ptr es:[bx], 0 - inc [bp+var_4] - -loc_497: - cmp [bp+var_4], 100h - jl short loc_48A - push di - call sub_367 - pop cx - -loc_4A3: - xor ax, ax - -loc_4A5: - pop di - pop si - leave - retn -_main endp - -; --------------------------------------------------------------------------- - db 0 -include libs/master.lib/graph_clear.asm -include libs/master.lib/resdata.asm -include libs/master.lib/dos_free.asm -include libs/master.lib/dos_axdx.asm -include libs/master.lib/dos_create.asm -include libs/master.lib/dos_puts2.asm -include libs/master.lib/dos_close.asm -include libs/master.lib/dos_write.asm -include libs/master.lib/dos_seek.asm -include libs/BorlandC/_abort.asm -include libs/BorlandC/atexit.asm -include libs/BorlandC/errormsg.asm -include libs/BorlandC/exit.asm -include libs/BorlandC/ioerror.asm -include libs/BorlandC/_isatty.asm -include libs/BorlandC/lseek.asm -include libs/BorlandC/n_scopy.asm -include libs/BorlandC/setupio.asm -include libs/BorlandC/brk.asm -include libs/BorlandC/nearheap.asm -include libs/BorlandC/pathops.asm -include libs/BorlandC/fflush.asm -include libs/BorlandC/flushall.asm -include libs/BorlandC/fseek.asm -include libs/BorlandC/setvbuf.asm -include libs/BorlandC/_strlen.asm -include libs/BorlandC/write.asm -include libs/BorlandC/writea.asm -include libs/BorlandC/xfflush.asm -include libs/BorlandC/setargv.asm - db 10 dup(0) -; --------------------------------------------------------------------------- - -include libs/BorlandC/c0[data].asm - -byte_131E db 0 -unk_131F db 1 - db 0 - db 1 - db 0 - db 0 -aYume_cfg db 'yume.cfg',0 -aYumeconfig db 'YUMEConfig',0 -aUmx db 0Ah - db 0Ah - db '東方夢時空用  常駐プログラム RES_YUME.com Version1.00 (c)zun 1997',0Ah,0 -aVavVBavVVvvVV db 'わたし、まだいませんよぉ',0Ah - db 0Ah,0 -aVVcvVcbavVIqvj db 'さよなら、また会えたらいいな',0Ah - db 0Ah,0 -aVV db 'そんなオプション付けられても、困るんですけど',0Ah - db 0Ah,0 -aVavVBavVVVvvVV db 'わたし、すでにいますよぉ',0Ah - db 0Ah,0 -aNVVVV db '作れません、わたしの居場所がないの!',0Ah - db 0Ah,0 -aVVVVBavcvivVnv db 'それでは、よろしくお願いします',0Ah - db 0Ah - db 0 - db 0 -include libs/master.lib/version[data].asm -include libs/master.lib/grp[data].asm -include libs/master.lib/resdata[data].asm -include libs/BorlandC/_abort[data].asm -include libs/BorlandC/atexit[data].asm -include libs/BorlandC/exit[data].asm -include libs/BorlandC/files[data].asm -__heaplen dw 0 -include libs/BorlandC/ioerror[data].asm -include libs/BorlandC/stklen[data].asm -include libs/BorlandC/nearheap[data].asm -include libs/BorlandC/pathops[data].asm -include libs/BorlandC/setvbuf[data].asm -include libs/BorlandC/sysnerr[data].asm -include libs/BorlandC/setargv[data].asm - -InitStart label byte -include libs/BorlandC/setupio[initdata].asm -include libs/BorlandC/pathops[initdata].asm -include libs/BorlandC/setargv[initdata].asm -InitEnd label byte - -ExitStart label byte -ExitEnd label byte - -bdata@ label byte -include libs/BorlandC/atexit[bss].asm -edata@ label byte -_TEXT ends - - - end startx