Michel Heily
d9ce1c7d8d
optimize/arm: Improve arm instruction condition check.
...
Obviously AL(always) instructions are the most common, so prioritize checking these first.
Former-commit-id: e236f1e116dbf65757a68dda9090645d220a1cee
2020-03-28 16:14:59 +03:00
Michel Heily
414c1b0557
optimize/gpu: Optimize read_pixel_index calls inside render loops.
...
Former-commit-id: 763b24a151ddd3dcb69afacabcb214b26ad03052
2020-03-28 16:14:59 +03:00
Michel Heily
699b2decd2
core/gpu/bugfix: Support firing HBlank IRQs during VBlank
...
This commit fixes #43
Former-commit-id: 6a4367282c673a35316643e16413f9a602094d9d
2020-03-13 16:29:12 +02:00
Michel Heily
7f34e8bd08
core/gpu/bugfix: Use correct bitmask when writing to DISPSTAT
...
Accidently used 5 (0b0101) instead of 7 (0b0111)
Former-commit-id: f690dd3f591bef10c5dd280d46be22cd339498a2
2020-03-13 16:29:12 +02:00
Michel Heily
6344744414
feat/jni: More work on JNI bindings
...
Former-commit-id: 125f764bd17ee9add3221cd6b64cde6edb592255
2020-02-28 15:11:02 +02:00
Michel Heily
84db854a06
chore: Make GameBoyAdvance the the bios argument as boxed slice rather then a Vec
...
On windows, the Vec may sit on the stack..
Former-commit-id: b8aa77858291c1b7ee6bfbfbec92646f18e819de
2020-02-28 15:11:02 +02:00
Michel Heily
c4e8c71d1f
sysbus: Make BoxedMemory a transparent struct
...
Former-commit-id: fc07876e9f73928eb2aaa6fcd4cba081a35745b9
2020-02-28 15:11:02 +02:00
Michel Heily
c5b9c68d5e
feat/jni: Cleanup & Improve jni bindings
...
- Wrap static globals with a mutex.
- Implement InputInterface
Testing this on a standalone Java Console Application (without
rendering) shows sufficiant performanse for now (AVG fps of 180 in the bios)
Former-commit-id: cfbb9abb7e91b04258c41fc20e8a22c16d797386
2020-02-28 15:11:02 +02:00
Michel Heily
c68b9502fe
bugfix: Fix bad write impl of DISPSTAT again.
...
I should really pay more attention to the docs..
The previous fix (bb843ea5) was not enough as it caused vblank,hblank
and vcount-match flags to be overwritten when they really should have
just been ignored.
This caused Dragon Ball - Advance Adevnture to fail booting
Former-commit-id: 1810e32692a0abd79f2df385c7c822debf186c79
2020-02-28 15:05:06 +02:00
Michel Heily
d938767430
feat/jni: Add rustboyadvance-jni crate to export some simple JNI bindings
...
Former-commit-id: d4e7a622a97215a8c1b7b50bb7f08d18cb9c5716
2020-02-23 00:30:38 +02:00
Michel Heily
778274b5ae
refactor: split "plat" binaries into separate crates
...
Former-commit-id: 73554b0128e036279f7ac895acb57d8f89cb1c96
2020-02-23 00:30:38 +02:00
Michel Heily
c50ab1ecd8
feat: Add basic gdbserver feature
...
Initially I began implementing the gdb protocol on my own, but I then found a
nice work-in-progress crate on https://github.com/daniel5151/gdbstub
that suited my needs.
Former-commit-id: f77557cbbd8652c2ed05ac439efc1956d8e99729
2020-02-21 22:12:58 +02:00
Michel Heily
b333ae7f65
rustfmt
...
Former-commit-id: a73535e556d1fb44e30927f0ab1f6238a8df8739
2020-02-21 14:08:08 +02:00
Michel Heily
0476342278
bugfix: Fix a bug where sprites were not rendered in bitmap modes.
...
I misunderstood the docs ^^
Former-commit-id: 157ae0dec037be3718b7a28314ba3b2eeb85cca0
2020-02-19 01:39:47 +02:00
Michel Heily
a585753dc2
fix: Allow writes to DirectSound FIFOs in 8bit granularity
...
This fixes audio in games that directly write to sound FIFO using STRB instructions.
Former-commit-id: 3efb686b28146c414d5fad289f958346a9a5db6e
2020-02-18 22:29:54 +02:00
Michel Heily
c96fa38a2d
bugfix: Fix improper write to DISPSTAT register
...
For some reason, probably typing mistkae, I `or`ed the value being written to DISPSTAT,
causing bits to never actually turn off, affectivly making HBLANK/VBLANK
interrupts linger forever.
This probably has caused some nasty glitches that I don't even know of, but two confirm issues solved
by this are Mariokart and Pacman.
This commit fixes #14 and #13
Former-commit-id: 72ad6efcb9e8f6b582d9279c5daab2603d5a408e
2020-02-16 01:46:51 +02:00
Michel Heily
392ad1bd71
gpu: Refactor Gpu::bg to Gpu::background
...
Former-commit-id: 78aa4ad525ba9df0a4944dfac0c5723e35633390
2020-02-16 01:40:59 +02:00
Michel Heily
aeab3a82a3
Return to rust stable, get rid of nightly features for now
...
Former-commit-id: 1550bc0f70218c8a012f0631502eabbdf835d0ab
2020-02-14 14:33:22 +02:00
Michel Heily
11fb9d7eda
Fix panic when fs::create_dir fails for LOG_DIR when it already exists
...
Former-commit-id: a332a8aadc8322650beaf9ff7eead4ac162c6eec
2020-02-14 14:26:45 +02:00
Michel Heily
b03fe3567e
Fix all warnings during build
...
Ran cargo-fix to automatically fix most of the build warnings,
Cleaned up dead code, and fix the rest manually
Former-commit-id: f35faba46b40eaf9c047efb8ab1e77ffa24d41b6
2020-02-14 14:21:45 +02:00
Michel Heily
0c2da2ae46
refactor: Refactor instruction decoding to panic instead of returning a Result
...
flamegraph shows too much time is being spent 'unwraping' decoded
instructions
Former-commit-id: e89072e6cf648e83f87d8c01891f50474246a36b
2020-02-14 13:05:14 +02:00
Michel Heily
69aadb9d92
Fix broken tests due to recent arm7tdmi changes
...
Former-commit-id: e1a5ec4ce3cb4c61bf6f511babfa8da8efd7321f
2020-02-14 13:02:56 +02:00
Michel Heily
84004ddb5c
windows: Add file icon to build targets
...
Former-commit-id: 2dae2e7818d86ddf9470afafd0404f0e7e021718
2020-02-12 22:18:58 +02:00
Michel Heily
32a20d2cbb
ptimize: CPU Pipeline optimization part 3
...
Move reload_pipeline calls inside instructions.
This commit yeilds yet another 5% performance improvment.
The next step is to move `advance_pc` into the instructions themselves
and save the `match result` per executed instruction
Former-commit-id: 42193ffc48fda9943665e6a74e873186627a0b4a
2020-02-11 02:26:17 +02:00
Michel Heily
6beec306c2
optimize: CPU Pipeline optimization part 2
...
Optimize redundent pipeline stages
About 5% performance gain.
Also rustfmt..
Former-commit-id: 2f5fc95798e97eb963fea976866bbeaf637084b0
2020-02-11 02:26:17 +02:00
Michel Heily
1f79205f51
optimize: CPU Pipeline optimization part 1
...
In preperation for later optimization in the CPU pipeline
implementation, this commit refactors the arm/thumb exec functions to return a
CpuAction (Whether to advance the program counter or to flush the
pipeline)
Currently, a lot of host cycles are wasted in the arm7tdmi pipeline
Refill1 & Refill2 states. Optimizing these steps out would make the CPU
a bit faster.
Former-commit-id: 9be7966eaad22cceeb443fcc5823bbd945284027
2020-02-11 02:26:17 +02:00
Michel Heily
7736154b50
fix: Use flush_pipeline16 when branch exchange changes CPU to thumb mode
...
Former-commit-id: 6f9c01c6f7ad7be2889a18ca66f7d310fcaa7c35
2020-02-11 02:26:17 +02:00
Michel Heily
c7a484fda5
Move creation of arm7tdmi core into the GameBoyAdvance
...
Former-commit-id: d4a43df2ea3d737cc8284b84cea0285c8818ef32
2020-02-11 02:26:17 +02:00
Michel Heily
1a46bec3f9
feat: Fix & improve debugger, Add commands to save/load the state
...
Former-commit-id: cfbead1ad64c8b029bf7265f7fd975014744b287
2020-02-11 02:26:17 +02:00
Michel Heily
ae7bf63d3f
arm7tdmi/optimize: Optimize and cleanup CPU, roughly about 10% fps improvement.
...
This commit removes the error handling (CpuResult<>) in order to reduce
overhead in the cpu implementation.
Also, some cleanup of warning messages.
Notice: this commit breaks '--feature debugger' for now
Former-commit-id: d4484047c3f5d509eff89cef7090aa88b07a8d17
2020-02-09 20:17:46 +02:00
Michel Heily
984cb2f0c4
chore: rust-fmt
...
Former-commit-id: 8bb31056864e64bcad6877f3c2c1000464cce82e
2020-02-07 17:16:52 +02:00
Michel Heily
374c429d16
optimization: Avoid bound checking twice in Cartridge::read_8
...
Former-commit-id: fb9db936f7d7a89b467c3c3dfd290c43b5324da6
2020-02-07 17:13:05 +02:00
Michel Heily
17560eeb0c
fix: Completly refactor GPU scanline composition code.
...
This change fixes #9 and emulates:
- Correct layer ordering
- Correct emulation of blending sfx
- Correct emulation of the object window (BIOS boot animation is now fixed)
Former-commit-id: caf46fe4b62cc54e6f2c02a8001da552f8e6b54a
2020-02-07 16:11:16 +02:00
Michel Heily
71cccf7504
Fix panic panic when loading eeprom ROMs while save file does not exist
...
Former-commit-id: 42bc08b6008169062c9d814a4e48e13eacb44a91
2020-02-07 16:11:16 +02:00
Michel Heily
7848cb609b
fix: Make debugger step functions only step the arm7tdmi core
...
Former-commit-id: bc544ff5dda9db694405126b3cab963f91526a7d
2020-02-01 12:22:44 +02:00
Michel Heily
99cf07c391
chore: Replace trace exception with trace!
...
Former-commit-id: 0b6f2126a6861b8f31f5231b5e0cfda3df30d5d5
2020-02-01 12:21:42 +02:00
Michel Heily
7625feee6b
chore: Cleanup eeprom.
...
Removed unused code and added meaningful log message to indicate eeprom size assumption due to save file size
Former-commit-id: 12fa73c197cc2c9c695ed209114b803f2255e95d
2020-02-01 11:26:56 +02:00
Michel Heily
13037f334c
feat(eeprom): Implement eeprom size runtime autodetection
...
The Minish cap works :)
Former-commit-id: 4c04d7907bd44edaac47a9110c98fb0869d01ace
2020-01-31 18:26:16 +02:00
Michel Heily
bb111f0d0b
feat(save_override): Add option to override save type via commandline
...
Former-commit-id: c4a00744ba20baf5f68072d6b9583616f61417e8
2020-01-31 16:15:29 +02:00
Michel Heily
5fc38546ce
refactor(core/cartridge): Refactor cartridge module to make it easier to configure savetypes
...
Former-commit-id: 2e8dd8c3f60c7de8c55bd4c38eaa0630af73c1cc
2020-01-31 16:15:29 +02:00
Michel Heily
3fb75079a2
feat(eeprom): Fix eeprom emulation timeout problem, passing the nintendo eeprom tests
...
Former-commit-id: 5eea390de806d03eee8c043203ae4c57d7355caa
2020-01-31 16:15:29 +02:00
Michel Heily
451be2036f
feat(logger): Replace various println! with logs
...
Former-commit-id: c2f38f863d65c4564f4d2169e63714a2925a4d3f
2020-01-31 16:15:29 +02:00
Michel Heily
8f4e42d6d4
feat(logger): Add a logger to the project
...
Former-commit-id: aa0579884951857a136904b3147eaa553117e68e
2020-01-31 16:15:29 +02:00
Michel Heily
990ce40e35
feat(eeprom): Cleanup eeprom code. still not working
...
Former-commit-id: 5cc2b897796a35d3b3bc6c346cf275826e9f4b7c
2020-01-29 22:09:30 +02:00
Michel Heily
1f073199b3
feat(eeprom): Move cartridge into its own module
...
Former-commit-id: e7fd72db6e14770a0b099f4b5ce32da1fb6fa0f5
2020-01-29 21:48:38 +02:00
Michel Heily
51a79d68da
feat(eeprom): Start working on Eeprom emulation
...
Former-commit-id: b600daa044e1bdf85fb022017517585a9aca4082
2020-01-29 20:46:22 +02:00
Michel Heily
eda3d3e3e7
feat(flash): Implement Flash save type
...
Pokemon games now boot and save.
Fixes #7
Former-commit-id: c60cda3352cc5117c88d4aec272c4e9d2662d21d
2020-01-26 02:18:27 +02:00
Michel Heily
23a6bf1637
feat(sram): Implement SRAM save type
...
Tested to work on Kirby.
Fixes #8
Former-commit-id: 90aa60b901a4ef790592c34c2350a7349939d612
2020-01-26 02:06:44 +02:00
Michel Heily
70c19ea343
fix(sound): Fix amplitude and properly emulate sound bias level
...
Former-commit-id: 92dec2c186b9e6f34ae5ce0ee167d6f1fa7730c8
2020-01-21 01:20:28 +02:00
Michel Heily
ade03121ee
feat(sdl2): Support window resizing
...
Former-commit-id: f5e70c8a15b53eb7aded9f630e5c1fb1dce55fba
2020-01-21 01:20:23 +02:00