Commit Graph

49 Commits

Author SHA1 Message Date
nmlgc 8943b52167 [Maintenance] Introduce types for VRAM colors and their components
Finally differentiating between colors and columns at least at the type
level.

Part of P0245, funded by [Anonymous], Blue Bolt, Ember2528, and Yanga.
2023-06-30 19:59:11 +02:00
nmlgc 9a8e0fc0fd [Maintenance] Move the point structures into `pc98.h`
Unfortunately, it's still premature to start a separate header file for
display-space coordinates like I'm doing with Shuusou Gyoku. What does
make sense, though, is moving the display-space vector types next to
the display-space scalar types in `pc98.h`. This makes much more sense
than keeping them in `master.hpp` just because master.lib also has a
Point type. Would have thought that this lets us remove more than two
`master.hpp` inclusions, though…

Part of P0240, funded by JonathKane.
2023-05-25 15:17:01 +02:00
nmlgc f8a774e1dc [Research] Get HOLDKEY.EXE compiling again
And finally compile this directory during the regular build process to
keep this from happening…

Part of P0233, funded by [Anonymous].
2023-03-04 19:40:55 +01:00
nmlgc 85c20d325e [Maintenance] Declare correct calling conventions for library code used in TH01
Making these declarations independent of the compiler's default calling
convention used for the game's own code.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc cc42f949e1 [Maintenance] Remove the vsync_reset_*() macros
They obscure the simple nature of these VSync counters more than they
help.

Part of P0229, funded by Ember2528.
2023-02-28 08:07:52 +01:00
nmlgc 15a047fc74 [Decompilation] [th05] Lasers: Ray rendering
A year ago, I would have considered this undecompilable. Turns out that
this function really benefitted from a decompilation against all odds,
especially with these 4 different views on the same 8 local variables.

Part of P0228, funded by [Anonymous] and nrook.
2023-01-17 11:53:47 +01:00
nmlgc 4f853261fa [Decompilation] [th05] Stage 5 midboss: Rendering
15 lines of code, and still not quirk-free.

Completes P0225, funded by Enderwolf, Blue Bolt, 32th System, and Yanga.
2022-11-30 22:46:22 +01:00
nmlgc 0f98341c34 [Research] Document the master.lib graph_gaiji_*() carry flag bug
Fixed in TH04's and TH05's master.lib version, but TH03 still had to
work around it with code that might look like a ZUN bug at first.

Part of P0225, funded by Enderwolf, Blue Bolt, 32th System, and Yanga.
2022-11-30 22:46:22 +01:00
nmlgc 6f8b32ca4a [Decompilation] [th03/th04/th05] Cutscenes: Masked blitting of new pictures
Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 19:16:35 +01:00
nmlgc 55d98369d9 [Maintenance] master.hpp: Pass element counts to the hmem_allocbyte() wrapper
Which gets rid of the declaration for `size_t` in a grand total of two
translation units.

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 16:59:09 +01:00
nmlgc 753f73f5f2 [Maintenance] master.hpp: Centrally define packfile filename length
The later games need this constant for their buffers as well, and it's
not just needed for loading sound files. Might be overkill to force all
of `master.hpp` to be #included in some additional places, but the
alternative would have been to move it to a `fn_len.hpp` file.
Ultimately, this constant *is* related to master.lib.

Part of P0223, funded by Blue Bolt and rosenrose.
2022-11-30 16:58:30 +01:00
nmlgc a10fe95b31 [Maintenance] Fix comment↔code associations
• Comments that describe all lines of code until a blank one are placed
  into the lines immediately above
• Comments that describe an entire demarcated block are placed
  immediately below the dash row at the top
• In any case, there should be a blank line after the top comment of
  a demarcated block, to keep IntelliSense-style systems from applying
  the block comment to the first actual line of code…
• …but there shouldn't be one before the dash row at the bottom, where
  it'd be redundant.

Part of P0207, funded by GhostPhanom.
2022-08-08 20:10:53 +02:00
nmlgc bca1b7d38a [Maintenance] Add a `nullptr` polyfill to platform.h
Which allows us to remove <stddef.h> from translation units that just
needed it for `NULL`.

Part of P0203, funded by [Anonymous] and GhostRiderCog.
2022-07-10 13:02:51 +02:00
nmlgc bfdb1e33f4 [Decompilation] [th01] Endings: Bad
Part of P0200, funded by Yanga.
2022-06-17 15:30:30 +02:00
nmlgc b3e61807a1 [Decompilation] [th04/th05] Playfield shaking
Part of P0185, funded by [Anonymous], -Tom-, and Blue Bolt.
2022-03-05 17:50:33 +01:00
nmlgc 78dcbf4b75 [Maintenance] master.hpp transition: EGC-accelerated VRAM shift functions
Part of P0185, funded by [Anonymous], -Tom-, and Blue Bolt.
2022-03-05 15:31:50 +01:00
nmlgc 488115513c [Maintenance] master.hpp transition: EMS functions
Part of P0168, funded by Blue Bolt and rosenrose.
2021-11-28 19:15:22 +01:00
nmlgc c940059037 [Decompilation] [th05] Shinki + EX-Alice: Background rendering
Palette hacks not included yet. Yup, that's how all phases can use
hardware color #0 as their background color.

Completes P0147, funded by -Tom- and Ember2528.
2021-06-21 15:48:42 +02:00
nmlgc e1d5bdafed [Maintenance] master.hpp: Type-safe hmem_allocbyte() and hmem_free() wrappers
Sure, we can't use them everywhere, but it's really nice to get rid of
that casting madness – and any explicit references to x86 memory
segmentation – wherever we can.

Part of P0138, funded by [Anonymous] and Blue Bolt.
2021-04-21 17:50:12 +02:00
nmlgc 01c92da1ac [Decompilation] [th05] snd_load()
A decompilation of ZUN-written ASM that was almost worth it, for once!
Too bad that those aren't the <string.h> intrinsics that the
Wolfenstein 3D disassembly hinted at, though.

Part of P0135, funded by [Anonymous].
2021-03-19 19:22:57 +01:00
nmlgc ffcc46d32f [Decompilation] [th05] pi_put_8(), pi_put_quarter_8()
> assigning to the DI register immediately before a CALL
Yeah, no amount of comma operator trickery can get *that* out of this
compiler. Also, these TH05 .PI functions are the only place in PC-98
Touhou with a `IMUL DI, imm8` instruction, which is impossible to get
out of Turbo C++'s built-in assembler.
Well, at least the `if` branches decompile somewhat nicely.

Part of P0134, funded by [Anonymous].
2021-02-20 23:50:03 +01:00
nmlgc 1c5ed4b06e [Maintenance] Copy <dos.h>'s 16-bit x86 Real Mode declarations to a new file
DOS is not the same thing as the underlying CPU, after all. A separate
file not only indicates to future port authors which parts of the code
are x86-specific, but it also speeds up build times…

… in theory, because removing 677 lines from 49 files each doesn't seem
to speed up the build as much as I had hoped? But apparently my whole
system mysteriously got faster in the meantime, and I was getting 22-23
seconds for the entire repo even before this commit. Good enough.

Part of P0134, funded by [Anonymous].
2021-02-20 23:49:45 +01:00
nmlgc 7a44adf8d0 [Maintenance] Use the C++ resdata_*() wrappers in all ZUN.COM sub-binaries
Getting us completely macro-free there… even though it did require a
separate version of those functions if the ID is a pointer.

Part of P0134, funded by [Anonymous].
2021-02-20 15:46:48 +01:00
nmlgc ce25a6e579 [Separate translation units] [th02/th03/th05] game_init_main()
Oh look, new content! Gotta finish this push at some point, after all…

Part of P0133, funded by [Anonymous].
2021-01-30 19:50:32 +01:00
nmlgc c876216c1d [Maintenance] Remove master.lib's original master.h 🎉
My repo will never include all of master.lib anyway, as explained in
https://rec98.nmlgc.net/blog/2020-11-03.
That gets me a median build time of 27 seconds for the entirety of
ReC98 on my system, just as estimated in that same blog post. And we're
far from done with #include optimizations…

Part of P0133, funded by [Anonymous].
2021-01-30 19:37:41 +01:00
nmlgc 0ce869c30a [Maintenance] Complete the master.hpp transition
Part of P0133, funded by [Anonymous].
2021-01-30 19:22:29 +01:00
nmlgc eeb4e7ebfa [Maintenance] [th01/th02/th03] Compile the ZUN Soft logo animation as C++
This might have almost been the case that justified making master.hpp
compatible with C translation units… but even this one would like to
use the template functions from th01/math/vector.hpp.

Part of P0133, funded by [Anonymous].
2021-01-30 19:22:12 +01:00
nmlgc d3a1335e35 [Maintenance] master.hpp transition: Resident palette functions
Final one! Now we only need to get all translation units to use this
header…

Part of P0133, funded by [Anonymous].
2021-01-30 18:51:29 +01:00
nmlgc e8ac905d25 [Maintenance] master.hpp transition: Machine identification
Part of P0133, funded by [Anonymous].
2021-01-30 18:47:35 +01:00
nmlgc 952a1e47f7 [Maintenance] master.hpp transition: Gaiji functions
Part of P0133, funded by [Anonymous].
2021-01-30 18:46:21 +01:00
nmlgc 27bf06751a [Maintenance] master.hpp transition: Keyboard functions
Part of P0133, funded by [Anonymous].
2021-01-30 18:34:14 +01:00
nmlgc c27e7a1b01 [Maintenance] master.hpp transition: Superimpose sprite functions
Part of P0133, funded by [Anonymous].
2021-01-30 18:33:18 +01:00
nmlgc 120dda99e4 [Maintenance] master.hpp transition: Packfile data and functions
Part of P0132, funded by [Anonymous].
2021-01-05 22:09:13 +01:00
nmlgc 55fb6f2e56 [Maintenance] master.hpp transition: Joystick data and functions
Part of P0132, funded by [Anonymous].
2021-01-05 22:08:57 +01:00
nmlgc dd7e200f3b [Separate translation units] [th02] .PI blitting
Part of P0132, funded by [Anonymous].
2021-01-05 19:34:59 +01:00
nmlgc 74a11d667d [Maintenance] master.hpp transition: Resident data
With a type-safe wrapper template that removes the need for ID length
and structure-size-in-paragraphs macros. *And* <dos.h>!

Part of P0126, funded by [Anonymous] and Blue Bolt.
2020-11-15 21:28:55 +01:00
nmlgc aea27d2221 [Maintenance] master.hpp transition: DOS functions
Part of P0126, funded by [Anonymous] and Blue Bolt.
2020-11-15 21:23:29 +01:00
nmlgc 199f73eba4 [Maintenance] master.hpp transition: Math declarations
Part of P0126, funded by [Anonymous] and Blue Bolt.
2020-11-15 21:22:15 +01:00
nmlgc d515d67c9f [Maintenance] master.hpp transition: Optionally buffered single-file I/O
Now the fact that those can be buffered is also documented outside of
MASTER.MAN.

Part of P0126, funded by [Anonymous] and Blue Bolt.
2020-11-15 21:21:04 +01:00
nmlgc 90f1c2ca93 [Maintenance] master.hpp transition: Text RAM declarations
Part of P0126, funded by [Anonymous] and Blue Bolt.
2020-11-15 21:19:42 +01:00
nmlgc 6a8de71720 [Maintenance] master.hpp transition: EGC declarations
Part of P0125, funded by [Anonymous].
2020-11-02 23:33:09 +01:00
nmlgc 3ee848f456 [Maintenance] [th05] Use master.hpp for the character selection menu
6149 LoC with the original master.h, vs. 2524 LoC *and* additional
semantic sugar with master.hpp. Nice!

(Yes, *semantic* sugar.)

Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 22:21:51 +01:00
nmlgc b674adff18 [Maintenance] master.hpp transition: Heap functions
Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 22:17:48 +01:00
nmlgc 65a12d13a8 [Maintenance] master.hpp transition: .PI declarations
Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 22:09:17 +01:00
nmlgc c8fa62d0c2 [Maintenance] master.hpp transition: GRCG declarations
Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 21:50:51 +01:00
nmlgc e78f73d779 [Maintenance] master.hpp transition: Graphics declarations
Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 21:48:51 +01:00
nmlgc 02cd7f4acc [Maintenance] master.hpp transition: Palette declarations
Since we can't even change whitespace inside a preprocessor macro
without getting a `redefinition is not identical` warning, these have
to be wrapped in `#if !defined(__MASTER_H)` blocks for now.

Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 21:45:56 +01:00
nmlgc 7306a4b185 [Maintenance] master.hpp transition: VSync declarations
Merely applying our coding style for now.

Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 21:43:39 +01:00
nmlgc 8266bbd83e [Maintenance] Start a C++ master.lib header file
The regular master.h is big, uncomfortable in C++ mode, and bloated
with all those portability `#define`s that effectively only cover a
small portion of the PC-98-specific code anyway. So, let's gradually
transition to a new smaller header that is more integrated into the
ReC98 codebase, by simply no longer #including `master.h` in new code.

Which also explains its weird place in the root directory. Even though
`libs/master.lib/` contains plenty of game-specific modifications, it
didn't feel right to have anything in this directory refer to types
from `pc98.h`.

Part of P0124, funded by [Anonymous] and Blue Bolt.
2020-11-02 21:12:59 +01:00