The previous approach yielded a vtable call to the Bus vtable.
This approach inlines the memory mapping
Former-commit-id: 062fb58b6a5aeab3a6c12f2b878fdeb47d1b0a3a
- Landscape layout.
- Snapshot viewer is now a fragment for future re-use.
- Bugfixes
- Etc'
Former-commit-id: 34365fd143cefdc2b1bb3b68a62f62849f442fa1
Moved away from using lazy_static for this one since every access to a
lazy_static reference adds a runtime check, Currently using a build.rs script to generate a const table instead.
Worked out the ARM decoding issues, seems to run fine now.
Though the dynamic decoding for ARM is broken now since I had to change things in Data Processing and MSR instructions
TODO use `const fn` when it becomes stable
Former-commit-id: ba09748ff74a403c7016adcbe0ca553b591f6855
Lookup tables are generally faster than matching in most architectures.
There is some trouble in decoding some arm data processing instructions
so this is non-default feature for now
* Crashes on armwrestler but many games seem to work
Former-commit-id: 3c06ea344ae0097947d8cd5bd05b1f882c7f743a
Previously I did not account for gamepak 32-bit accesses being two 16bit (NSEQ+SEQ or SEQ+SEQ) accesses,
This resulted in less cycles being accounted for, resulting in more wasted CPU cycles per frame and was a huge performance hit.
I re-implemented this with look-up-tables also to speed up the cycle
count routing `SysBus::get_cycles` and also account for 32bit gamepak memory access.
Former-commit-id: fe6a9a570c843d40e38971a2a36e6511df1b8894
Profiling with 'perf' I discovered that too much time was spent inside
Timer::update when the prescalar was 0 (frequency of 1 cycle).
This was due to the while loop I used. I optimized this loop out and
there is an appearent performance increase.
Former-commit-id: d228450625fad003f054e3161f6eeee888245cac
Also, get rid of unnecessary derive Copy.
Since the ArmInstruction (and Thumb) derived from Copy, the compiler
always saves them to the stack when they are passed by value to other
functions, thus making some unwanted performance overhead.
I removed the derive Copy, and also pass them as references. This
project has a lot of "derive Copy" everywhere, and I should take note if
this is happenning elsewhere aswell.
Former-commit-id: 2f94c6050fa26c5b777244bd26706d4e6e2f0dc9
- 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
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
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