Commit Graph

389 Commits

Author SHA1 Message Date
nmlgc bbf47ec102 [Reduction] #509-510: mkname and tmpnam 2014-09-24 23:21:48 +02:00
nmlgc 5aad47cb08 [Reduction] #508: fclose 2014-09-21 13:37:38 +02:00
nmlgc 8ae2349005 [Reduction] #507: filelength 2014-09-20 12:41:18 +02:00
nmlgc 624119866b [Reduction] #505-506: LONGTOA and UTOA 2014-09-19 19:22:51 +02:00
nmlgc 274b37eed7 [Reduction] #504: master.lib version string
Fulfilling the original licensing conditions... I think.
2014-09-16 04:11:09 +02:00
nmlgc 86b86a96b8 [Reduction] #503: graph_gaiji_puts 2014-09-15 03:03:52 +02:00
nmlgc a4a5bc9df9 [Reduction] #502: graph_gaiji_putc
Introducing MASTERMOD v3. How long until a GAME_NUMBER macro? (Answer: Once we
find ZUN code that slightly changed between games.)
2014-09-14 17:39:30 +02:00
nmlgc cd7b956be6 [Reduction] #501: mbctype
Yup, ZUN makes use of this structure. In combination with master.lib.
2014-09-12 08:34:43 +02:00
nmlgc 3e7fa3a3d1 [Reduction] #500: over_put_8 2014-09-09 05:54:40 +02:00
nmlgc 2ba86d6887 [Reduction] #499: super_roll_put_tiny 2014-09-09 05:34:40 +02:00
nmlgc 9c94cb9e6e [Reduction] #497-498: getdate and gettime 2014-09-08 21:57:20 +02:00
nmlgc 80fc5c6d82 [Reduction] #496: mem_unassign
Which challenges a lot about what we thought to know about Amusement Makers'
modifications to master.lib, due to the fact that TH02 contains the modified
version of this function, but the original of draw_trapezoid...

And I haven't even begun to research how this removal of conditional branches
could have a positive effect on the game, especially since it's only called
before exiting anyway.
2014-09-08 20:47:09 +02:00
nmlgc 9ff29d3159 [Reduction] #495: localeconv 2014-09-07 22:05:49 +02:00
nmlgc 08092bef2b [Reduction] #493-494: DOS file attribute functions 2014-09-07 19:10:29 +02:00
nmlgc 45f1b0d447 [Reduction] #492: unlink 2014-09-07 19:01:21 +02:00
nmlgc 9ed6e1e93f [Reduction] #488-491: General key input support 2014-09-07 17:01:58 +02:00
nmlgc 3d05fb85c9 [Reduction] #486-487: key_wait_bios and key_sense_bios 2014-09-07 16:21:01 +02:00
nmlgc 0d213f41b5 [Reduction] #484-485: resdata_exist and resdata_create
Looks like the 'pal98 grb' string was merely copy-pasted from the respal
module and isn't actually used by the function, which means that we don't have
to work around a naming collision after all.
2014-09-07 15:47:50 +02:00
nmlgc 61a0a024e2 [Reduction] #483: dos_free
OK. I'm going to spend one day on TH01 alone, and if that doesn't end up
shredding the code significantly, I'm not going to cover that game.
2014-09-07 15:41:48 +02:00
nmlgc 23a3a4116a [Reduction] #479-482: pfgetc 2014-09-07 15:07:36 +02:00
nmlgc 0acdb448d1 [Reduction] #478: grcg_polygon_cx 2014-09-07 02:39:52 +02:00
nmlgc 9bb41bd72b [Reduction] #477: draw_trapezoidx 2014-09-07 02:29:58 +02:00
nmlgc 4f2e3e4944 [Reduction] #476: super_put_1plane 2014-09-07 02:18:27 +02:00
nmlgc 9e405575ea [Reduction] #474-475: super_wave_put 2014-09-07 01:56:57 +02:00
nmlgc 99b60ff9b9 [Reduction] #473: execl
And thus, we've singled out all Borland C++ runtime functions in all games but
TH01.
2014-09-06 19:08:18 +02:00
nmlgc d575a37e1e [Reduction] #470-472: LoadProg 2014-09-06 19:07:54 +02:00
nmlgc fe2a73c888 [Reduction] #468-469: ihypot and isqrt 2014-09-05 20:17:22 +02:00
nmlgc 84b7d0f1ab [Reduction] #467: Far long multiplication
Yeah, the code is identical to the near version, with the only difference
being the PROC directive declaring the function as either near or far. Now, I
could either turn the function body into some kind of macro stored in a
separate file and then instantiate it from both near and far functions... or I
could just copy the original structure. Who cares, anyway.
2014-09-05 10:57:12 +02:00
nmlgc ccc560ab37 [Reduction] #466: searchenv 2014-09-04 20:55:28 +02:00
nmlgc dc9fc37b3f [Reduction] #465: searchstr 2014-09-04 20:55:27 +02:00
nmlgc 97711aac8f [Reduction] #464: mbcjmstojis
"Multi-byte-character-<something>-shift-to-JIS"?
2014-09-04 19:24:14 +02:00
nmlgc c0aa5b8a67 [Reduction] #461-463: fullpath.c 2014-09-04 19:04:39 +02:00
nmlgc af7f0b0ad6 [Reduction] #458-460: Double-byte character set functions 2014-09-03 23:23:25 +02:00
nmlgc bab649b884 [Reduction] #457: getch 2014-09-03 19:30:32 +02:00
nmlgc e54a6ad120 [Reduction] #456: DOSCMD
... I, um, cannot comprehend how the C source code I have for this function
could have been compiled into such an assembly.
2014-09-03 19:13:47 +02:00
nmlgc 92046a8021 [Reduction] #455: getenv 2014-09-03 17:08:02 +02:00
nmlgc bf7fb83197 [Reduction] #454: respal_set_palettes 2014-09-03 16:08:44 +02:00
nmlgc b60d3a0f56 [Reduction] #453: respal_get_palettes 2014-09-03 16:07:27 +02:00
nmlgc 3f7a29acc6 [Reduction] #452: respal_free 2014-09-03 15:45:21 +02:00
nmlgc 61c95ec603 [Reduction] #450-451: respal_exist and respal_create 2014-09-03 15:23:51 +02:00
nmlgc 01a126da71 [Reduction] #449: setvbuf 2014-09-03 14:02:14 +02:00
nmlgc 00e419e9da [Reduction] #448: setblock 2014-09-02 23:38:26 +02:00
nmlgc b77f2cfba0 [Reduction] #447: access 2014-09-02 23:26:19 +02:00
nmlgc 23aa61c002 [Reduction] #446: abort
The one with the single underscore, which is just raise + a wrapper around the
one with two underscores.
2014-09-02 21:45:19 +02:00
nmlgc 9d5aa934d4 [Reduction] #445: flushall 2014-09-02 21:44:35 +02:00
nmlgc 429f134a51 [Reduction] #442-444: fseek and ftell 2014-09-02 21:04:29 +02:00
nmlgc b82a03c3f8 [Reduction] #441: grcg_round_boxfill
No local symbol definitions for variables here, as they are used in both the
normal function and the retfunc.
2014-09-01 21:08:57 +02:00
nmlgc 6250206235 [Reduction] #432-440: xxv.cpp
OK, *that's* the last piece of C++ crud shared across all main executables.
According to the object in the library file though, it seems to include one
more dword named
	__DestructorCountPtr
in the BSS segment. Neither games nor the runtime itself seem to use it, and
as a consequence, it doesn't even seem to be included in the games' BSS
segments, given that they all end with the symbols of xx.cpp...
2014-09-01 13:51:23 +02:00
nmlgc f994832a28 [Reduction] #431: toupper
Neither is this one. Also, interesting how IDA didn't identify the function in
one third of the cases.

[Binary change] Order of 2 relocations in TH03's MAINL.EXE, TH04's MAIN.EXE
and MAINE.EXE, and TH05's MAINE.EXE.
2014-09-01 12:01:35 +02:00
nmlgc 49d85b2c0b [Reduction] #430: tolower
... huh? That is certainly not multi-byte safe.
2014-09-01 12:01:34 +02:00
nmlgc 4e16a92b07 [Reduction] #429: ctype 2014-09-01 12:01:32 +02:00
nmlgc b4dd0d452d [Reduction] #428: text_puts 2014-09-01 08:58:15 +02:00
nmlgc ce245eae9f [Reduction] #427: grcg_trapezoid 2014-09-01 08:45:00 +02:00
nmlgc c90b76bff9 [Reduction] #426: graph_200line
Yup. TH03's graphics layer is actually set to a resolution of 640x200 and
upscaled by the hardware, which gives the game its distinctive low-res look.
2014-09-01 08:41:20 +02:00
nmlgc 1276b727ff [Reduction] #425: grcg_settile_1line 2014-09-01 07:39:11 +02:00
nmlgc a27c177235 [Reduction] #424: grcg_triangle 2014-09-01 07:30:58 +02:00
nmlgc 5b91dd3b42 [Reduction] #423: grcg_polygon_c 2014-09-01 06:52:28 +02:00
nmlgc b2c9ba67bc [Reduction] #422: draw_trapezoid
Yup. From TH03 on, ZUN uses a different version of master.lib, containing more
features than the last official version 0.23 from May 1995. Given the relative
insignificance of the features in question, I presume that Amusement Makers
must have kept their own, improved fork of master.lib, rather than ZUN having
hacked master.lib on his own.

Anyway, that doesn't matter. In the end, we still have to reverse-engineer each
and every one of these changes, and some of the more complicated functions
won't even be reduced before the actual reverse-engineering step of this
project.

[Binary change] Order of 3 relocations in TH05's OP.EXE.
2014-08-31 18:08:50 +02:00
nmlgc 7dc06e0047 [Reduction] #421: super_zoom 2014-08-31 15:27:30 +02:00
nmlgc 5009e416a0 [Reduction] #420: grcg_fill 2014-08-31 12:22:19 +02:00
nmlgc 14b9f10d14 [Reduction] #419: super_convert_tiny 2014-08-31 11:42:22 +02:00
nmlgc 2db5e73934 [Reduction] #418: grcg_line 2014-08-31 11:30:26 +02:00
nmlgc 3549c5496e [Reduction] #417: ems_read 2014-08-31 11:15:56 +02:00
nmlgc 44a2c223f6 [Reduction] #416: ems_space 2014-08-31 11:05:56 +02:00
nmlgc 5261b79d12 [Reduction] #415: ems_write 2014-08-31 11:02:40 +02:00
nmlgc 2c16f56bb1 [Reduction] #414: ems_setname 2014-08-31 10:58:51 +02:00
nmlgc 3660316127 [Reduction] #413: ems_movememoryregion 2014-08-31 10:56:55 +02:00
nmlgc 958f32c884 [Reduction] #412: ems_free 2014-08-31 10:49:03 +02:00
nmlgc d4f0bb7c27 [Reduction] #411: ems_exist 2014-08-31 10:43:56 +02:00
nmlgc 267749bd40 [Reduction] #410: ems_enablepageframe 2014-08-31 10:37:04 +02:00
nmlgc 4b848cc7e8 [Reduction] #409: ems_allocate 2014-08-31 10:32:28 +02:00
nmlgc e9e6d14ab6 [Reduction] #408: gaiji_backup and gaiji_restore 2014-08-31 10:23:41 +02:00
nmlgc bd2ef210c0 [Reduction] #407: gaiji_entry_bfnt 2014-08-31 10:09:59 +02:00
nmlgc 73aad4c7e6 [Reduction] #404-406: gaiji_write and gaiji_write_all 2014-08-31 09:50:38 +02:00
nmlgc 8c68537820 [Reduction] #401-403: gaiji_read and gaiji_read_all 2014-08-31 09:42:55 +02:00
nmlgc c793095729 [Reduction] #400: grc_clip_polygon_n 2014-08-31 08:55:51 +02:00
nmlgc 1546628658 [Reduction] #399: grc_setclip 2014-08-31 08:36:33 +02:00
nmlgc 2ed0225877 [Reduction] #396-398: grcg_circle 2014-08-31 08:01:45 +02:00
nmlgc 1a45a549c4 [Reduction] #395: grcg_circle_x 2014-08-31 07:43:20 +02:00
nmlgc 79db80bb09 [Reduction] #394: graph_pack_put_8 2014-08-31 07:26:45 +02:00
nmlgc ae3804ff89 [Reduction] #393: graph_scroll 2014-08-31 06:54:13 +02:00
nmlgc 4373c64119 [Reduction] #392: graph_scrollup 2014-08-31 06:43:32 +02:00
nmlgc 6c3cfa94ae [Reduction] #390-391: Sound I/O 2014-08-31 06:27:47 +02:00
nmlgc 563ba7001e [Reduction] #389: text_putsa 2014-08-31 05:52:43 +02:00
nmlgc bd09a355b8 [Reduction] #388: text_putca 2014-08-31 05:41:23 +02:00
nmlgc 8f6d34cfe5 [Reduction] #387: text_boxfilla 2014-08-31 05:39:50 +02:00
nmlgc c34c0aa09f [Reduction] #386: palette_entry_rgb 2014-08-31 05:14:54 +02:00
nmlgc 5b09a08612 [Reduction] #385: gaiji_putsa 2014-08-31 05:05:48 +02:00
nmlgc 9242a2dcee [Reduction] #384: gaiji_putca 2014-08-31 04:56:17 +02:00
nmlgc 00c6ed5f5e [Reduction] #380-383: super_put_rect
[Binary change] db 0 → nop after the end of superptr_draw in all affected
executables.
2014-08-31 04:46:46 +02:00
nmlgc 1607f39dab [Reduction] #379: gdc_outpw 2014-08-30 14:15:00 +02:00
nmlgc dd4c95e249 [Reduction] #377-378: super_large_put
[Binary change] db 0 → nop after the end of the DISP8 function in both
executables.
2014-08-30 14:02:08 +02:00
nmlgc 1a0ec60825 [Reduction] #376: iatan2 2014-08-30 13:44:36 +02:00
nmlgc 8571d60085 [Reduction] #375: pfread 2014-08-30 12:50:48 +02:00
nmlgc c39ded4bfa [Reduction] #374: pfrewind
[Binary change] db 0 → nop after the function in TH05's OP.EXE.
2014-08-30 12:33:48 +02:00
nmlgc f5e8062ec0 [Reduction] #373: pfseek 2014-08-30 12:26:02 +02:00
nmlgc b108d5d46f [Reduction] #372: IRand 2014-08-30 12:13:04 +02:00
nmlgc e448f1f665 [Reduction] #371: file_size 2014-08-30 10:06:10 +02:00
nmlgc 614caf64eb [Reduction] #370: key_sense 2014-08-30 09:56:49 +02:00
nmlgc 12c1e8560f [Reduction] #369: file_write 2014-08-30 09:38:09 +02:00
nmlgc 536e17d29e [Reduction] #367-368: file_seek and file_tell 2014-08-30 09:21:44 +02:00
nmlgc 5976ec0458 [Reduction] #366: file_ropen 2014-08-30 09:12:17 +02:00
nmlgc 3ee280b708 [Reduction] #365: file_read 2014-08-30 09:00:31 +02:00
nmlgc 649ab800e1 [Reduction] #364: file_exist 2014-08-30 08:46:38 +02:00
nmlgc 2e814fc3c5 [Reduction] #363: file_create 2014-08-30 08:32:10 +02:00
nmlgc 9a1e030ce7 [Reduction] #361-362: file_flush and file_close 2014-08-30 08:19:17 +02:00
nmlgc 87230af28f [Reduction] #360: file_append 2014-08-30 07:58:36 +02:00
nmlgc 605f044854 [Reduction] #359: File-related global data 2014-08-30 07:49:51 +02:00
nmlgc 86ea9b69ac [Reduction] #358: kbhit 2014-08-30 06:23:45 +02:00
nmlgc daabf257d1 [Reduction] #357: C++ new[] operator 2014-08-30 04:26:12 +02:00
nmlgc 04b1fd3bcc [Reduction] #355-356: ctor2.asm
OK, looks like we got all of the C++ crap out of the way... e~xcept for
another function in TH01's REIIDEN.EXE, of course.

[Binary change] Order of 2 relocations in TH01's FUUIN.EXE.
2014-08-30 03:50:38 +02:00
nmlgc 73af48ac95 [Reduction] #352-354: ctor3.asm 2014-08-30 02:37:53 +02:00
nmlgc be740fc368 [Reduction] #331-351: strings.cpp
God, this C++ stuff really is a crappy mess. Even had to manually adjust the
alignments at the end of the the TEXTC segment - and no, the ALIGN directive
remains an inadequate tool random bytes, even more so because TASM's
implementation just pads the space with random bytes. But hey, nice to finally
see some reduction outside of seg000.

[Binary change]
* Order of 3 relocations in all of TH04 and TH05's OP.EXE
* Order of 6 relocations in TH03's OP.EXE and MAIN.EXE, and TH05's MAIN.EXE
  and MAINE.EXE
* Order of 9 relocations in all of TH01, TH02's OP.EXE and MAINE.EXE, and
  TH03's MAINL.EXE
* Order of 11 relocations in TH02's MAINE.EXE
2014-08-29 12:47:43 +02:00
nmlgc 588ed7b90b [Reduction] #324-330: new.cpp
[Binary change]
* Order of 2 relocations in all executables of TH02, TH03, TH04 and TH05
* Order of 4 relocations in TH01's FUUIN.EXE
* Inserts a new relocation into TH01's REIIDEN.EXE
2014-08-29 10:50:30 +02:00
nmlgc d49fdce731 [Reduction] #274-323: xx.cpp
Yup. 50 functions in a single module, totalling 12,633 bytes, used in all 15
game executables, and no references to any of that in the remaining game code.

[Binary change]
* Order of 3 relocations in all of THO3, TH04 and TH05, TH02's MAIN.EXE and
  MAINE.EXE, and TH01's OP.EXE and FUUIN.EXE
* Order of 2 relocations in TH02's OP.EXE and TH01's REIIDEN.EXE
* Inserts a new relocation into TH03's MAIN.EXE
2014-08-29 08:03:21 +02:00
nmlgc e2ca057d4b [Reduction] #273: cputype.asm
Don't have the source code for that one either.
2014-08-29 05:58:32 +02:00
nmlgc dd400d7627 [Reduction] #268-272: xmsg.cpp
[Binary change] Order of 6 relocations in every executable except for the TH04
ones.
2014-08-29 04:02:38 +02:00
nmlgc e0762650c6 [Reduction] #264-267: xalloc.cpp 2014-08-29 03:24:39 +02:00
nmlgc e1d78d0e9a [Reduction] #260-263: xxas.cpp
Well. Even after downloading pretty much every (identical) copy of Turbo /
Borland C++ 3, 4, 5 and everything inbetween, I could *not* find the original
source to most of the C++ parts in the runtime. Using the IDA disassemblies
to build their slices is simply the only option.

... Really, though, who cares.
2014-08-29 03:08:23 +02:00
nmlgc a9918e364e [Reduction] #259: C++ delete[] operator
Same for registerbgifont() being a wrapper around registerfarbgifont(). But
at least there, IDA should have noticed something weird. The original delete[]
operator refers to the delete function, so registerbgifont() would have had to
be a wrapper around registerbgidriver(), which of course doesn't make sense,
and IDA claims to *know* these functions...
2014-08-29 01:35:20 +02:00
nmlgc 0493c0c4e4 [Reduction] #258: C++ delete operator
Lol, "registerbgidriver". Just because the original function is nothing but a
wrapper around free(), and registerbgidriver() is also just a wrapper around
registerfarbgidriver().
2014-08-29 01:26:20 +02:00
nmlgc 6ebf0877f7 [Reduction] #257: xfflush 2014-08-28 21:54:04 +02:00
nmlgc f0825bf2e5 [Reduction] #255-256: super_roll_put 2014-08-28 08:52:42 +02:00
nmlgc 7bb29aee62 [Reduction] #254: super_roll_put_1plane
Misreferences in switch tables! Haven't had any of those in a while.
2014-08-28 08:38:11 +02:00
nmlgc 776c094c0a [Reduction] #253: super_clean 2014-08-28 08:12:58 +02:00
nmlgc 0c8e9d8550 [Reduction] #252: 16-bit sine and cosine table
Nice! It's not used by master.lib itself, but ZUN makes good use of these
tables to avoid having to rely on floating-point functions.
2014-08-28 07:54:38 +02:00
nmlgc a65a9c07c3 [Reduction] #251: Sine table for super_wave_put() and super_vibra_put() 2014-08-28 07:17:42 +02:00
nmlgc 2d8f579e14 [Reduction] #249-250: super_put_8 2014-08-28 06:34:30 +02:00
nmlgc 7efab8b20f [Reduction] #248: grcg_circlefill 2014-08-28 06:02:11 +02:00
nmlgc 366ba7a85f [Reduction] #247: grcg_pset 2014-08-28 05:48:32 +02:00
nmlgc eb6c0b5551 [Reduction] #246: grcg_boxfill 2014-08-28 05:31:57 +02:00
nmlgc a779b84843 [Reduction] #245: dos_filesize 2014-08-28 05:14:58 +02:00
nmlgc 9e5b986403 [Reduction] #244: egc_shift_up 2014-08-28 05:14:57 +02:00
nmlgc cc2d874c26 [Reduction] #243: egc_shift_right 2014-08-28 05:14:57 +02:00
nmlgc b67d68409e [Reduction] #242: egc_shift_left 2014-08-28 05:14:56 +02:00
nmlgc 23b7c04376 [Reduction] #241: egc_shift_down 2014-08-28 05:14:55 +02:00
nmlgc b4794ec1d9 [Reduction] #240: cutline 2014-08-28 05:14:54 +02:00
nmlgc 55629eecb0 [Reduction] #234-239: super_put
[Binary change] Order of 3 relocations in TH05's OP.EXE, and 2 relocations in
TH05's MAINE.EXE.
2014-08-28 02:23:54 +02:00
nmlgc 68359542c1 [Reduction] #233: Byte mask 2014-08-28 01:37:48 +02:00
nmlgc 2cf62174c0 [Reduction] #232: graph_start 2014-08-28 01:16:54 +02:00
nmlgc c1dac953a5 [Reduction] #231: graph_hide 2014-08-28 01:05:11 +02:00
nmlgc 9b3e42a150 [Reduction] #230: graph_400line 2014-08-28 00:58:40 +02:00
nmlgc 057c665ece [Reduction] #229: grcg_vline 2014-08-28 00:48:06 +02:00
nmlgc 0dad2dffc8 [Reduction] #228: grcg_hline 2014-08-28 00:17:57 +02:00
nmlgc 523da7f7b9 [Reduction] #227: Edge pattern table 2014-08-28 00:05:06 +02:00
nmlgc b6872319c4 [Reduction] #226: grcg_byteboxfill_x 2014-08-28 00:04:27 +02:00
nmlgc 877fbd8bd6 [Reduction] #225: Clipping variables for drawing
Well, great. Why did the trapezoid variables have to be included in this
object file? 10 of the executables don't use them, and there's no way to
locate that one needle in the haystack of uninitialized data now.
2014-08-28 00:04:26 +02:00
nmlgc 5a05e580e5 [Reduction] #223-224: memmove 2014-08-27 19:47:14 +02:00
nmlgc f3e9147459 [Reduction] #221-222: memset
Two functions, just differing in their order of parameters. It's...
convenient, I guess?
2014-08-27 07:50:37 +02:00
nmlgc 444901acb5 [Reduction] #220: memcpy 2014-08-27 07:15:15 +02:00