nmlgc
cab8db3ce2
[JWasm move] "addr" is a reserved word
2014-11-07 12:38:54 +01:00
nmlgc
52209cbcdf
[JWasm move] Add symbol names to the ENDP and ENDS directives where necessary
2014-11-06 06:45:35 +01:00
nmlgc
4dc9b9ab4a
[JWasm move] Don't use the DIST/CALLMODEL constants for procedures and labels
...
Once you've actually found the right syntax that makes the assembler just use
the default call type of the current memory model for both procedures (where
it's just "PROC" without anything else) and labels (where it's "LABEL PROC"),
these constants become completely unneccessary, even with TASM.
2014-11-05 18:20:02 +01:00
nmlgc
00bacc7af3
[Reduction] #673-680: BERO's Pi loader library
...
> randomly google "PC-98 ライブラリ"
> 3rd hit: http://www.vector.co.jp/soft/dos/prog/se037608.html
> Oh look, it's the mystery code at the beginning of the TH01 executables!
This library also has dedicated support for transparency, which is used in the
Konngara fight (BOSS8_D*.GRP) and which we couldn't edit during the
development of the static English patches.
But of course, ZUN just had to change the format magic in order to make it
seem unique.
2014-11-04 18:42:43 +01:00
nmlgc
0b34460155
[Reduction] #670-672: e087_Trap
...
I guess this marks the final demystification of how segment declarations work
and how they are compiled. However, it only really makes sense for anything
outside the TEXT segment, like these floating-point functions. As long as the
slices aren't immediately next to each other, it would still be annoying to
have segment declarations inside of them, since we'd have to copy-paste these
declarations around every INCLUDE directive...
2014-11-02 20:11:20 +01:00
nmlgc
3a1c2fd679
Move the stack segment into its own slice
...
Saves 141 lines, and we'll need to ASSUME it in the upcoming floating-point
slices.
2014-11-02 19:44:02 +01:00
nmlgc
a777ad2ad1
[Reduction] #668-669: pow10
2014-11-02 16:41:47 +01:00
nmlgc
0856fab827
[Reduction] #576-667: emu086.asm
2014-11-02 11:20:05 +01:00
nmlgc
7790ecdb7c
[Reduction] #574-575: vprinter
...
And that would be the final function of the printf() family!
2014-11-02 09:01:46 +01:00
nmlgc
6d422052ca
[Reduction] #570-573: realcvt
2014-11-02 08:27:17 +01:00
nmlgc
015ceec3e1
[Reduction] #569 : xcvt
...
... and even with EMUL being set up and working, TASM still needs to be hacked
into actually emitting emulator calls for certain instructions.
2014-11-02 06:55:48 +01:00
nmlgc
bbd8ff96ab
[Reduction] #563-568: Floating-point emulator initialization
...
Finally - and there was indeed no way around switching to JWlink, as ALINK
v1.6 refuses to link the TH01 executables with a nondescript "Undefined base
seg" message once nec_fpinit.asm is included.
2014-11-01 17:09:13 +01:00
nmlgc
48088875ca
[Reduction] #561-562: scantol
...
Also finally getting a macro for the recurring "pop cx if LDATA" case.
2014-10-30 09:38:46 +01:00
nmlgc
696d7f9476
Identify the missing BSS slice of xxv.cpp
...
sigdata.c doesn't specify any alignment, so this is the only position that
makes sense.
2014-10-29 05:41:43 +01:00
nmlgc
935e68f35e
[Reduction] #560 : puts
2014-10-29 05:34:30 +01:00
nmlgc
2d62776e02
[Reduction] #559 : printf
2014-10-28 03:01:42 +01:00
nmlgc
c4aee8a236
[Reduction] #556-558: open
2014-10-27 02:50:32 +01:00
nmlgc
ebd20ebc88
[Reduction] #554-555: __rtl_open/__open
...
Same situation as with __rtl_close/__close, __rtl_read/__read and
__rtl_write/__write.
2014-10-26 02:16:29 +02:00
nmlgc
d7d9758fac
[Reduction] #553 : C++ vector_new
2014-10-25 02:53:27 +02:00
nmlgc
2c2977aa69
[Reduction] #552 : Far new[] operator
2014-10-24 03:00:29 +02:00
nmlgc
0b6a824296
[Reduction] #551 : Far new operator
2014-10-23 02:01:06 +02:00
nmlgc
4c12d226a4
[Reduction] #550 : lrotr
2014-10-22 13:45:02 +02:00
nmlgc
c9ee6b0aef
[Reduction] #549 : lrotl
2014-10-21 03:46:42 +02:00
nmlgc
340c8a792a
General cleanup
...
Mostly moving spurious null bytes, which are actually supposed to denote
alignment, into their associated slices, but also prettying up some of the
very first slices.
2014-10-20 17:20:04 +02:00
nmlgc
1c72d7e242
[Reduction] #548 : Floating-point emulation data
...
Well, we have to start reducing this mess somewhere. The actual reduced
initialization code I've been preparing still fails to compile, and the data
is shared with a number of other components anyway, so...
2014-10-19 23:37:46 +02:00
nmlgc
191fd5b76b
[Reduction] #543-547: fgetc and friends
2014-10-18 02:20:40 +02:00
nmlgc
489ecc8a96
[Reduction] #542 : fprintf
2014-10-17 18:26:56 +02:00
nmlgc
54968ed7a3
[Reduction] #541 : Fake floating point conversion
2014-10-16 07:29:53 +02:00
nmlgc
16b4e1d240
[Reduction] #540 : close
...
Now with DOS error codes.
2014-10-15 08:39:22 +02:00
nmlgc
d6449b27cf
[Reduction] #537-539: sprintf
2014-10-14 04:00:44 +02:00
nmlgc
3457818399
[Reduction] #533-536: fopen
...
More flags and constants, despite reminding me why exactly I haven't done this
all along.
2014-10-13 06:12:09 +02:00
nmlgc
658ed9e72b
Move "Abnormal program termination" to its own slice
...
That was the very first function reduced, before I came up with the data slice
model in 59688e23fc
.
2014-10-12 18:37:58 +02:00
nmlgc
afdd1c06e0
[Reduction] #532 : fmode
...
Yup, finally adding the opening flags as well.
2014-10-11 23:56:44 +02:00
nmlgc
365763c459
[Reduction] #531 : conio_type_init
...
Yup, platform detection by checking whether the date returned by the IBM real-
time clock interrupt is in the 20th or 21st century.
2014-10-10 21:20:22 +02:00
nmlgc
47a6be4db2
[Reduction] #530 : delay
2014-10-09 03:51:01 +02:00
nmlgc
9003aea36b
[Reduction] #527-529: nec_delay
2014-10-08 04:19:18 +02:00
nmlgc
26e795f0bc
[Reduction] #526 : ibm_delay
...
There's also the PC-98-specific nec_delay. Which means that the inclusion of
this function into the games was *ding* entirely pointless.
Man, compilers sucked in the early 90s.
2014-10-06 03:18:36 +02:00
nmlgc
6fb80fba79
[Reduction] #525 : conio_type
2014-10-05 02:11:00 +02:00
nmlgc
8b4a461283
[Reduction] #523-524: __rtl_close/__close
...
Same situation as with __rtl_read/__read and __rtl_write/__write.
2014-10-04 02:59:04 +02:00
nmlgc
05702534bc
[Reduction] #521-522: setargv
2014-10-03 18:03:36 +02:00
nmlgc
ef57ff6ae8
[Reduction] #519-520: intdos
2014-10-02 17:54:48 +02:00
nmlgc
399e6e3098
[Reduction] #517-518: int86
2014-10-01 16:04:50 +02:00
nmlgc
96c4a77d66
[Reduction] #516 : xclose
2014-09-30 20:13:56 +02:00
nmlgc
bf364ebfae
[Reduction] #515 : eof
2014-09-29 07:09:38 +02:00
nmlgc
8a2061bcab
[Reduction] #513-514: atol and atoi
2014-09-28 05:05:32 +02:00
nmlgc
8cc3df1eb1
[Reduction] #512 : xfclose
2014-09-27 22:51:10 +02:00
nmlgc
86b99b9265
[Reduction] #511 : segread
2014-09-26 23:15:24 +02:00
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