Commit Graph

16 Commits

Author SHA1 Message Date
Lephenixnoir 9e89a6983a
Fairly massive refactoring 2021-10-01 20:52:05 +02:00
Lephenixnoir 31daa78aa0
Emulator progress: build, link, some startup 2021-09-20 10:24:18 +02:00
Lephenixnoir 5f9e27b07a
Some cleaning and slight emulator progress 2021-09-19 23:34:30 +02:00
Lephenixnoir c8d897e819
Get rid of standard string functions 2021-09-19 19:16:50 +02:00
Lephenixnoir 828c9329a3
Add detailed Z_Malloc error messages 2021-09-17 07:43:19 +02:00
Lephenixnoir e9ce72512f
Restore printf-like error messages 2021-09-16 07:21:38 +02:00
Lephenixnoir 1f290006f1
Scrap some memory and somehow avoid heap fragmentation 2021-08-31 19:18:55 +02:00
Lephenixnoir 2675d6d3aa
Progress in making the emulator build 2021-08-14 11:55:20 +02:00
Lephenixnoir 4c3b0b8fe6
Place WAD fragment map in PRAM0 2021-08-04 09:56:24 +02:00
Lephenixnoir b1f8a97983
UI improvements and sprintf 2021-08-02 21:11:13 +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 271d9d588d
Clean up more warnings 2021-07-27 11:34:35 +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 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
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