Commit Graph

397 Commits

Author SHA1 Message Date
Rekai Nyangadzayi Musuka 22f96a10e7 fix(apu): increase accuracy of apu emulation
Reintroduce the Frame Sequencer and it's state enum (needed so that we
can reset the FS on NR52 enable)
2021-08-17 22:18:40 -05:00
Rekai Nyangadzayi Musuka 8fea8eb1ff fix(apu): better emulate behaviour of apu channel DACs 2021-08-17 21:26:22 -05:00
Rekai Nyangadzayi Musuka 9b2c91445a chore: enable audio by default
even if it sounds really bad right now
2021-08-17 21:25:55 -05:00
Rekai Nyangadzayi Musuka b9046bceba fix(apu): disable channel if DAC is disabled 2021-08-17 20:42:41 -05:00
Rekai Nyangadzayi Musuka aa22e93049 chore: clean up TODO messages
continuous-integration/drone/push Build is passing Details
2021-08-15 23:31:27 -05:00
Rekai Nyangadzayi Musuka 6215eccb2f chore(cpu): merge halted and state properties 2021-08-15 23:26:01 -05:00
Rekai Nyangadzayi Musuka a77d0a0f62 fix(apu): clock frame sequencer at correct Hz
continuous-integration/drone/push Build is passing Details
2021-08-15 02:46:20 -05:00
Rekai Nyangadzayi Musuka c2f2e2194b chore(ppu): improve accuracy of pixel fifo 2021-08-14 23:47:16 -05:00
Rekai Nyangadzayi Musuka d68257bb29 fix(ppu): improve accuracy of SCX discard 2021-08-14 22:03:01 -05:00
Rekai Nyangadzayi Musuka e27d6dc25b chore(ppu): rename discriminants of fetcher state 2021-08-14 22:02:41 -05:00
Rekai Nyangadzayi Musuka 1acb5de19d fix(main): GB frametime should be 59.73 Hz 2021-08-14 17:59:59 -05:00
Rekai Nyangadzayi Musuka 1b78b248a3 chore: minor edits to documentation 2021-08-14 17:51:09 -05:00
Rekai Nyangadzayi Musuka 5d6df46a2d fix(cpu): reimplement instruction handling
continuous-integration/drone/push Build is passing Details
2021-08-14 17:23:45 -05:00
Rekai Nyangadzayi Musuka 7e65d82fef chore(cpu): document fetch, decode, execute 2021-08-14 16:42:38 -05:00
Rekai Nyangadzayi Musuka 8c9567b610 chore(cpu): rename discriminants of ImeState enum 2021-08-14 16:42:15 -05:00
Rekai Nyangadzayi Musuka 53dfaf0de2 fix(apu): increase size of the audio buffer
continuous-integration/drone/push Build is passing Details
2021-08-14 15:29:35 -05:00
Rekai Nyangadzayi Musuka 16c2dd81fc fix(bus): remove dead code 2021-08-14 15:02:25 -05:00
Rekai Nyangadzayi Musuka 79be38a1e6 fix(main): rename constant SCALE to WINDOW_SCALE
continuous-integration/drone/push Build is passing Details
2021-08-14 01:02:18 -05:00
Rekai Nyangadzayi Musuka 8625bec059 feat: clock bus on instruction read-write
continuous-integration/drone/push Build is failing Details
Commit also includes general work towards passing mem-timings.

Note: while cpu_instrs.gb passes, instr_timing.gb and mem_timing.gb both
are stuck in infinite loops (Currently, it seems like a timing issue).
This is a major regression that hopefully shouldn't last for too long.
2021-08-14 00:10:51 -05:00
Rekai Nyangadzayi Musuka 0637b771e3 chore(instr): implement copy and clone on instruction enum
continuous-integration/drone/push Build is failing Details
2021-08-05 20:04:39 -05:00
Rekai Nyangadzayi Musuka 0107fa04c9 chore(apu): remove implemtation of register that always returns 0xFF 2021-08-05 16:39:04 -05:00
Rekai Nyangadzayi Musuka 6265c8af04 chore(joypad): poll input every frame instead of every instruction
continuous-integration/drone/push Build is failing Details
2021-08-03 20:36:55 -05:00
Rekai Nyangadzayi Musuka 5482a8e75f fix(apu): fix out of bounds error with channel 3 wave ram 2021-08-03 20:35:22 -05:00
Rekai Nyangadzayi Musuka 002dae6826 fix(joypad): improve handling of keyboard input 2021-08-03 20:23:43 -05:00
Rekai Nyangadzayi Musuka c863dc835c fix(apu): fix index out of bounds error on channel 3 write 2021-08-03 20:23:08 -05:00
Rekai Nyangadzayi Musuka d4407cf849 fix(apu): implement NR50 volume controls 2021-08-03 19:33:27 -05:00
Rekai Nyangadzayi Musuka de0d147685 fix(cartridge): put a bit more detail into the MBC3 RTC stub
continuous-integration/drone/push Build is failing Details
2021-08-03 15:19:08 -05:00
Rekai Nyangadzayi Musuka dd8339e8de chore(cartridge): consistently capitalize MBC 2021-08-03 15:06:06 -05:00
Rekai Nyangadzayi Musuka 05d6475015 fix(cartridge): Use default title instead of empty string 2021-08-03 14:53:30 -05:00
Rekai Nyangadzayi Musuka 32b597a328 fix(apu): incremental improvements to APU accuracy
continuous-integration/drone/push Build is failing Details
2021-08-03 14:10:08 -05:00
Rekai Nyangadzayi Musuka 33be2e0e83 fix(main): tie emulation to 60Hz on host machine 2021-08-03 14:09:16 -05:00
Rekai Nyangadzayi Musuka 832e1b7633 fix(apu): implement WAVE RAM blocking 2021-08-02 22:38:00 -05:00
Rekai Nyangadzayi Musuka a549b9feef chore(bus): suppress warning 2021-08-02 21:55:07 -05:00
Rekai Nyangadzayi Musuka 4d6fc95130 chore: remove premature optimizations 2021-08-02 21:52:12 -05:00
Rekai Nyangadzayi Musuka 7112cd15e3 chore(cpu): refactor SM83 implementation
continuous-integration/drone/push Build is passing Details
Instruction::decode no longer requires mutable access to the CPU
2021-07-31 20:29:13 -05:00
Rekai Nyangadzayi Musuka 2af673d7c5 chore: remove various warnings
continuous-integration/drone/push Build is passing Details
2021-07-28 16:25:29 -05:00
Rekai Nyangadzayi Musuka e43cac8041 fix(apu): don't spin if ringbuf is full 2021-07-28 16:23:31 -05:00
Rekai Nyangadzayi Musuka 8724da824e chore: inline some methods 2021-07-28 14:53:52 -05:00
Rekai Nyangadzayi Musuka 903cfacad3 fix(apu): replace mpsc with spsc ringbuffer
continuous-integration/drone/push Build is passing Details
2021-07-28 02:01:04 -05:00
Rekai Nyangadzayi Musuka 9d0e099a97 chore: remove unnecessary derivations from structs 2021-07-28 00:09:07 -05:00
Rekai Nyangadzayi Musuka 1a4546f4a4 chore: remove egui from project
I want to re-implement this later.
2021-07-27 22:38:21 -05:00
Rekai Nyangadzayi Musuka 31abd6dc5c chore(apu): change default sample rate
continuous-integration/drone/push Build is passing Details
2021-07-25 18:29:19 -05:00
Rekai Nyangadzayi Musuka c7e3cb5b35 fix(apu): abstract Apu read/write using BusIO trait
continuous-integration/drone/push Build is passing Details
2021-07-25 18:19:27 -05:00
Rekai Nyangadzayi Musuka e4d77d66ba fix(apu): abstract wave RAM behind BusIO trait 2021-07-25 18:03:11 -05:00
Rekai Nyangadzayi Musuka 9e36e86c14 fix(apu): increase accuracy of apu
continuous-integration/drone/push Build is passing Details
Due to this, not all instruments work. This is a regression and will be
fixed in a later commit when presumably the implementation of the APU is
a bit more correct
2021-07-25 17:42:09 -05:00
Rekai Nyangadzayi Musuka 6f6c308d84 fix(apu): implement write guards for Ch1 & Ch1 when disabled 2021-07-18 22:10:32 -05:00
Rekai Nyangadzayi Musuka f429d72882 chore(bus): remove panics in IO bus read/write failures with stderr msgs 2021-07-18 21:52:22 -05:00
Rekai Nyangadzayi Musuka 4fda7587ce chore(main): disable vsync 2021-07-18 21:33:52 -05:00
Rekai Nyangadzayi Musuka 3fb182b9cb fix(apu): have send_samples block main thraed
continuous-integration/drone/push Build is passing Details
2021-07-18 21:18:04 -05:00
Rekai Nyangadzayi Musuka c1430594cf chore(apu): change access modifiers of some methods 2021-07-18 20:58:02 -05:00
Rekai Nyangadzayi Musuka 8e2ef58b81 chore(main): remove rodio sink 2021-07-18 20:42:36 -05:00
Rekai Nyangadzayi Musuka b4b84d0cc5 fix(main): Allow emu to work on windows and linux
continuous-integration/drone/push Build is passing Details
2021-07-16 21:07:00 -05:00
Rekai Nyangadzayi Musuka 1d8fb8d32a fix(ppu): delay ppu by one cycle on scx fifo discard
continuous-integration/drone/push Build is passing Details
2021-07-16 21:01:52 -05:00
Rekai Nyangadzayi Musuka cc0cb0dd8a chore(apu): satisfy clippy
continuous-integration/drone/push Build is passing Details
2021-07-15 22:58:23 -05:00
Rekai Nyangadzayi Musuka fd9a5b51ba chore(ppu): reimplement background/window/sprite priority 2021-07-15 22:29:51 -05:00
Rekai Nyangadzayi Musuka a1eadc0bc4 chore(apu): rename sound/snd to apu
continuous-integration/drone/push Build is passing Details
2021-07-14 23:45:01 -05:00
Rekai Nyangadzayi Musuka ea53f97312 chore(snd): refactor APU implementation 2021-07-14 23:34:00 -05:00
Rekai Nyangadzayi Musuka 08bd33b4d4 fix(snd): replace Audio Sync solution with a faster one
continuous-integration/drone/push Build is passing Details
2021-07-14 22:35:37 -05:00
Rekai Nyangadzayi Musuka 2b5926e533 chore(snd): Make AudioReceiver and AudioSender structs generic 2021-07-14 22:34:57 -05:00
Rekai Nyangadzayi Musuka 1e27875dc3 fix(cpu): fix timing issue involving when the bus is clocked 2021-07-14 21:15:52 -05:00
Rekai Nyangadzayi Musuka 1566d60fd4 fix(ppu): add fifo delay when BG fifo is not empty 2021-07-14 21:11:31 -05:00
Rekai Nyangadzayi Musuka ab99e24f64 chore: modify commented out debug statement 2021-07-14 21:10:44 -05:00
Rekai Nyangadzayi Musuka 192bdffd64 fix(ppu): PPU cycle count increases even if LCDC bit 7 says otherwise
continuous-integration/drone/push Build is passing Details
2021-07-12 21:32:50 -05:00
Rekai Nyangadzayi Musuka afdfcfce2c chore: add _debug_log function to cpu.rs 2021-07-12 21:08:38 -05:00
Rekai Nyangadzayi Musuka 44b605970f chore(snd): rename some structs 2021-07-12 10:03:45 -05:00
Rekai Nyangadzayi Musuka b13444c885 feat(snd): simplify audio buffer
continuous-integration/drone/push Build is passing Details
The audio buffer now is held by crossbeam. The developers of said
library could write a batter queue than I could anyday
2021-07-11 23:48:16 -05:00
Rekai Nyangadzayi Musuka 3754325e30 chore(cartridge): silence warning 2021-07-11 23:47:05 -05:00
Rekai Nyangadzayi Musuka 3b772c7c49 feat(snd): synchronize audio with rest of system
In it's current form I think this is actually rather inefficient. It's
also not very accurate since I throw away a lot of samples for no real
good reason. More improvements to thiss will be coming henceforth
2021-07-11 23:22:17 -05:00
Rekai Nyangadzayi Musuka 45dc27301c chore: enable/disable gamepad input at compile time 2021-07-11 15:45:37 -05:00
Rekai Nyangadzayi Musuka db421c58f8 chore(snd): Don't repeat yourself
continuous-integration/drone/push Build is passing Details
2021-07-11 13:15:55 -05:00
Rekai Nyangadzayi Musuka ce6a83425f feat(snd): implement channel 3 2021-07-11 00:16:25 -05:00
Rekai Nyangadzayi Musuka d145ae44f3 feat(snd): implement channel 4 2021-07-10 22:36:48 -05:00
Rekai Nyangadzayi Musuka 3dbf026d33 fix(snd): increase accuracy of when to sample from APU 2021-07-10 22:35:54 -05:00
Rekai Nyangadzayi Musuka 7ab6e120f9 feat(snd): implement ch1 & envelopes for ch1 and ch2 2021-07-10 18:56:54 -05:00
Rekai Nyangadzayi Musuka 3c28dd7a6b fix(snd): clock channel 2 every T-cycle 2021-07-10 14:00:22 -05:00
Rekai Nyangadzayi Musuka 91d19a7e66 chore(snd): mask unreadable bits from return values 2021-07-09 21:16:33 -05:00
Rekai Nyangadzayi Musuka 40ca0abb72 feat: implement keyboard controls 2021-07-09 19:19:52 -05:00
Rekai Nyangadzayi Musuka 548f3867d4 chore(main): remove windows-specific code 2021-07-09 17:25:38 -05:00
Rekai Nyangadzayi Musuka ce630baa5d feat(snd): implement audio playback using rodio
continuous-integration/drone/push Build is failing Details
2021-07-09 01:25:52 -05:00
Rekai Nyangadzayi Musuka 0fa818a1a6 chore(snd): reimplement NR52 & implement sampling for ch2
Also add rodio as dependency for audio
2021-07-08 22:36:28 -05:00
Rekai Nyangadzayi Musuka 9b3a5d49d2 chore: update error messages in expect() calls 2021-07-08 18:50:58 -05:00
Rekai Nyangadzayi Musuka 4f3fc3136d chore: print cartridge info in stderr
continuous-integration/drone/push Build is passing Details
2021-07-05 01:10:10 -05:00
Rekai Nyangadzayi Musuka 48e81ff426 fix(cartridge): fix bug preventing MBC1 from working
continuous-integration/drone/push Build is passing Details
2021-07-05 00:43:02 -05:00
Rekai Nyangadzayi Musuka 18b790a777 chore(cartridge): update MBC1 (still broken)
continuous-integration/drone/push Build is passing Details
2021-07-05 00:14:56 -05:00
Rekai Nyangadzayi Musuka 39af03aebf chore(bus): stub 0xFF4D 2021-07-01 23:09:02 -05:00
Rekai Nyangadzayi Musuka 559cb54385 chore(snd): add enabled property to all channels
Also, rename lsfr property to shift_register
2021-07-01 22:27:42 -05:00
Rekai Nyangadzayi Musuka fd7f0655ef chore: satisfy clippy 2021-06-27 20:31:59 -05:00
Rekai Nyangadzayi Musuka fc4a898177 chore: reorganize select parts of codebase 2021-06-27 20:28:29 -05:00
Rekai Nyangadzayi Musuka c5aafab3ef feat(snd): implement trigger event behaviour for lfsr 2021-06-24 01:28:00 -05:00
Rekai Nyangadzayi Musuka 278953ab78 chore(snd): implement shift amount for channel 3 volume 2021-06-24 01:13:58 -05:00
Rekai Nyangadzayi Musuka 67e2a6ad79 feat(snd): implement ch 1,2,3 and 4 length function 2021-06-24 01:00:07 -05:00
Rekai Nyangadzayi Musuka b8b3563bca chore(snd): tighten use of access modifiers 2021-06-24 00:40:10 -05:00
Rekai Nyangadzayi Musuka 249d96b443 chore(snd): update select bitfield names 2021-06-24 00:00:28 -05:00
Rekai Nyangadzayi Musuka d2e37da2b0 feat(snd): implement sweep behaviour 2021-06-23 23:51:30 -05:00
Rekai Nyangadzayi Musuka 29237f0a2c chore(timer): clean up if let statement 2021-06-23 21:49:46 -05:00
Rekai Nyangadzayi Musuka 0c843b9ca9 feat(snd): implement volume envelope in ch1, 2 and 4 2021-06-23 21:49:25 -05:00
Rekai Nyangadzayi Musuka 1bc5de7cff chore(cartridge): incremental improvements to MBC1 2021-06-23 17:12:54 -05:00
Rekai Nyangadzayi Musuka b89515a0c1 fix(ppu): calculating window position is now signed
This allows for the window to display properly in Link's Awakening
2021-06-17 18:48:04 -05:00
Rekai Nyangadzayi Musuka 0b50e4eae9 fix(ppu): implement slightly better SCX discarding 2021-06-17 18:29:22 -05:00
Rekai Nyangadzayi Musuka aa0e3399f6 chore(ppu): fix integer overflow 2021-06-17 17:43:04 -05:00