Commit Graph

29 Commits

Author SHA1 Message Date
Lephenixnoir cf6c10ed29
Update icon to the new style 2021-07-29 18:43:13 +02:00
Lephenixnoir b9c676ea4e
Support multiple zones in Z_Malloc and add user stack leftover
lumpinfo is now allocated in Z_Malloc because it's needed for some
larger WADs.

More heap is needed to compensate and to support larger WADs fully, so
the unused part of the user stack is added as a second zone.

This makes at least the start of the DOOM Ultimate WAD playable.
2021-07-29 16:45:26 +02:00
Lephenixnoir e18b08d5e4
Add a file loading progress bar
The bar takes up a little bit of time too, but I think it's a plus.
Currently it's limited to ~20 frames which is normally < 0.3s. A frame
every fragment is disastrous in comparison (loading time x3 lol).
2021-07-29 11:40:09 +02:00
Lephenixnoir dc7519fe3e
Fix level end screen
This was using screens[1] which I had deallocated when fixing the status
bar (I incorrectly assumed it was used only for that).

While the CGDOOM technique to share screens[1] to avoid allocating the
320x20 buffer for the status bar makes clear sense with that new
information, I think I'll keep this 6.4 kB buffer there and rather
search for ways to use more memory zones.
2021-07-29 10:13:00 +02:00
Lephenixnoir bba94dcc32
G3A for optimized version 2021-07-28 23:16:45 +02:00
Lephenixnoir 72ab09a35a
Remove performance indications 2021-07-28 23:16:28 +02:00
Lephenixnoir 55f9d43237
Optimize loading speed (x2.7) and game speed (+35%)
Loading is measured by RTC_GetTicks().

* Initial version: 9.8s
  This was a regression due to using 512-byte sectors instead of 4 kiB
  clusters as previously.

* Do BFile reads of 4 kiB: 5.2s (-47%)
  Feels similar to original code, I'll take this as my baseline.

* Test second half of Flash first: 3.6s (-31%)
  By reading from FLASH_FS_HINT to FLASH_END first many OS sectors can
  be skipped (without missing on other sectors just in case).

* Load to XRAM instead or RAM with BFile
  The DMA is 10% slower to XRAM than to RAM, but this benefits memcmp()
  because of faster memory accesses through the operand bus. No effect
  at this point, but ends up saving 8% after memcmp is optimized.

* Optimize memcmp for sectors: 3376 ms (-8%)
  The optimized memcmp uses word accesses for ROM (which is fastest),
  and weaves loop iterations to exploit superscalar parallelism.

* Search sectors most likely to contain data first: 2744 ms (-19%)
  File fragments almost always start on 4-kiB boundaries between
  FLASH_FS_HINT and FLASH_END, so these are tested first.

* Index most likely sectors, improve FLASH_FS_HINT: 2096 ms (-24%)
  Most likely sectors are indexed by first 4 bytes and binary searched,
  and a slightly larger region is considered for hints. The cache hits
  119/129 fragments in my case.

* Use optimized memcmp for consecutive fragments: 1408 ms (-33%)
  I only set it for the search of the first sector in each fragment and
  forgot to use it where it is really needed. x)

Game speed is measured roughly by the time it takes to hit a wall by
walking straight after spawning in Hangar.

* Initial value: 4.4s

* Use cached ROM when loading data from the WAD: 2.9s (-35%)
  Cached accesses are quite detrimental for sector search, I assume
  because everything is aligned like crazy, but it's still a major help
  when reading sequential data in real-time.
2021-07-28 23:06:42 +02:00
Lephenixnoir c04efa5319
Measure file mapping time 2021-07-27 18:43:20 +02:00
Lephenixnoir 75c8730451
Restore fast copies using the fxlibc memcpy() 2021-07-27 15:05:42 +02:00
Lephenixnoir ce44de385c
G3A for third working version 2021-07-27 14:27:09 +02:00
Lephenixnoir d7ee5a1bbb
Restore video system screens and memcpy bug in V_CopyRect
* Restore screen numbers; BG is 4, at least in the ST module.
* Let ST module allocate BG, which is just 32 pixels high and not a full
  VRAM (huge memory gain!)
* Fix V_CopyRect() not working because memcpy is still broken (this will
  be changed later with a proper memcpy)
2021-07-27 14:20:14 +02:00
Lephenixnoir 271d9d588d
Clean up more warnings 2021-07-27 11:34:35 +02:00
Lephenixnoir 91f8dca1cb
Clean up more very old or unusable code 2021-07-27 11:19:39 +02:00
Lephenixnoir f477b87e50
Clean up file access + allow using BFile as an option
BFile can now be selected in <platform.h> by defining CGDOOM_WAD_BFILE
instead of CGDOOM_WAD_MAPPING. The DMA option is not implemented yet.

BFile works as expected - a lot of stuttering due to reads during
gameplay. But the status bar texture still doesn't load properly!
2021-07-27 11:12:31 +02:00
Lephenixnoir f2f2cd1ea4
G3A for second working version 2021-07-26 17:35:35 +02:00
Lephenixnoir fabdac0b33
Copy manually from flash instead of syscall memcpy
It sure looks like it's broken in certain situations, altough only a
complete disassembly would prove that.
2021-07-26 17:33:00 +02:00
Lephenixnoir f869f45d0d
Split in ROM sectors of 512 bytes instead of clusters of 4 kiB
This makes the search quite a bit slower, I'll look into that later.
2021-07-26 17:25:26 +02:00
Lephenixnoir e52f315de2
Silence some warnings 2021-07-26 10:18:52 +02:00
Lephenixnoir 6c86c1e2e5
Avoid freezes after error messages (for debug)
Not sure why it froze but it sure did.
2021-07-17 20:57:21 +02:00
Lephenixnoir e9366e7dcf
Add an error if a lump cannot be loaded 2021-07-17 16:41:42 +02:00
Lephenixnoir 7a75e46715
Use memset() in CGDCalloc() again
The bug was libfxcg's sys_calloc() using a memsetZero() function which
simply doesn't work properly.
2021-07-17 16:36:31 +02:00
Lephenixnoir 55c2e64000
G3A for first working version + README 2021-07-17 10:51:07 +02:00
Lephenixnoir 29b0bffc21
Initialize memory allocator with 422 kB system stack
Instead of ProgrammerNerd's in-user-stack 256 kB stack which works both
quickly hits its size limit when playing.
2021-07-17 10:50:20 +02:00
Lephenixnoir 7db1f33862
Don't use memset() in CGDCalloc
I have no idea why it doesn't work, but it doesn't.
2021-07-17 10:48:38 +02:00
Lephenixnoir 670e3a4b50
Improve I_ErrorI for 32-bit output 2021-07-17 10:47:37 +02:00
Lephenixnoir 58e22d75d4
Build system
* Use sh-elf-gcc (as used on Planète Casio)
* Link with libfxcg -DFXCG_MINI_COMPAT
* Disable LTO as it caused problems (hopefully could be reenabled later)
2021-07-17 10:46:35 +02:00
Lephenixnoir 34e09b4cbf
Add CGDOOM's original platform.h file 2021-07-17 10:40:12 +02:00
Computer Nerd 6bd7e296b4 Possible CG-50 update. 2019-04-04 00:11:35 -05:00
ComputerNerd bd6bb43473 Inital commit 2015-04-14 19:16:51 -05:00