Rekai Nyangadzayi Musuka
6ffdd92dbb
feat(ppu): implement sprite x-flip check
2021-04-30 00:20:50 -05:00
Rekai Nyangadzayi Musuka
3c680dec2f
fix(ppu): reimplement OAM scan
2021-04-30 00:09:17 -05:00
Rekai Nyangadzayi Musuka
0672c7346a
chore(ppu): rename select method and variables
2021-04-28 19:36:00 -05:00
Rekai Nyangadzayi Musuka
8a06fe9ff8
chore(ppu): improve code quality
2021-04-28 17:59:30 -05:00
Rekai Nyangadzayi Musuka
7620633116
chore(ppu): reimplement background/sprite fetcher state machine
2021-04-27 04:57:00 -05:00
Rekai Nyangadzayi Musuka
9003617459
chore: rename properties in bus.rs
2021-04-27 04:06:08 -05:00
Rekai Nyangadzayi Musuka
9d01b2458d
chore: move ppu bitfield structs to separate file
2021-04-27 04:03:50 -05:00
Rekai Nyangadzayi Musuka
1343e8e52e
chore(ppu): flatten if statement
2021-04-24 02:14:58 -05:00
Rekai Nyangadzayi Musuka
2586314f9a
chore(ppu): implement IntoIterator and iter() for ObjectBuffer
2021-04-24 02:14:50 -05:00
Rekai Nyangadzayi Musuka
067049e2dd
chore: rename to_byte_count to as_byte_count
...
using to_* and not taking ownership of self violates rust conventions
according to clippy.
2021-04-24 02:12:05 -05:00
Rekai Nyangadzayi Musuka
e8f6a94fee
chore(ppu): reimplement object buffer remove
2021-04-24 01:48:15 -05:00
Rekai Nyangadzayi Musuka
98af1865ee
chore(ppu): reimplement the object buffer struct
2021-04-23 23:55:18 -05:00
Rekai Nyangadzayi Musuka
4ab59007f9
chore(cpu): disable logging by default
2021-04-23 23:31:16 -05:00
Rekai Nyangadzayi Musuka
6f4f872765
fix(cpu): pass SLA (HL) and SRA (HL) tests from blargg
2021-04-22 20:38:13 -05:00
Rekai Nyangadzayi Musuka
9bf10f0c7d
chore(ppu): improve accuracy of sprite pixel fifo
2021-04-21 00:03:17 -05:00
Rekai Nyangadzayi Musuka
d457761c3b
chore(ppu): reimplement the object buffer
2021-04-20 23:39:16 -05:00
Rekai Nyangadzayi Musuka
f92f4a17e0
chore(ppu): add alternate colour palette
2021-04-20 23:15:54 -05:00
Rekai Nyangadzayi Musuka
c90b9ab024
fix(ppu): fix sprite buffer bug
...
Now, the background renders like it should and some sprites do load,
though they aren't where they're supposed to be
2021-04-20 04:26:28 -05:00
Rekai Nyangadzayi Musuka
4f4c867a63
fix(ppu): ensure better timings for sprite fetcher
2021-04-20 03:14:00 -05:00
Rekai Nyangadzayi Musuka
db1b40fe2d
fix(ppu): clear oam on hblank
2021-04-20 03:13:40 -05:00
Rekai Nyangadzayi Musuka
0361d04248
feat(ppu): implement broken ppu fifo renderer
2021-04-20 01:27:32 -05:00
Rekai Nyangadzayi Musuka
38460577b9
chore(ppu): move bg fetcher code into fetcher functions
2021-04-18 02:43:34 -05:00
Rekai Nyangadzayi Musuka
2acdaaeec2
chore(ppu): rename types and improve code quality
2021-04-18 01:45:09 -05:00
Rekai Nyangadzayi Musuka
b43c8ac7c9
feat(cartridge): grab title from the ROM
2021-04-14 01:21:45 -05:00
Rekai Nyangadzayi Musuka
cbd085c25b
chore: use Default::default instead of Type::Default
2021-04-13 23:02:13 -05:00
Rekai Nyangadzayi Musuka
e9f129dbee
fix(ppu): move frame/pixel buffer from the stack to the heap
2021-04-13 22:55:11 -05:00
Rekai Nyangadzayi Musuka
12a51b115a
feat(ppu): reimplement ppu as fifo pixel renderer
2021-04-11 02:07:25 -05:00
Rekai Nyangadzayi Musuka
5931fe95e3
feat(ppu): implement (broken) sprite renderer
2021-04-09 00:35:41 -05:00
Rekai Nyangadzayi Musuka
7425384fb1
chore: convert select base 10 constants to base 16
2021-04-08 20:32:32 -05:00
Rekai Nyangadzayi Musuka
770b081f98
feat(ppu): stub sprite attribute table
2021-04-08 20:28:30 -05:00
Rekai Nyangadzayi Musuka
23de87e482
chore: remove panics when gameboy performs certain actions
2021-04-08 19:23:29 -05:00
Rekai Nyangadzayi Musuka
41081e9cce
feat(bus): implement echo RAM
2021-04-08 17:58:33 -05:00
Rekai Nyangadzayi Musuka
2733bbe6d7
feat(ppu): implement window rendering
2021-04-08 17:10:24 -05:00
Rekai Nyangadzayi Musuka
e2fa72aa0e
chore: remove unecessary eprintln! statements
2021-04-08 00:02:54 -05:00
Rekai Nyangadzayi Musuka
cf3b79f0dc
chore(cpu): move RST behaviour to a method
2021-04-07 23:05:22 -05:00
Rekai Nyangadzayi Musuka
0eb40a8109
feat: comply with the fourth individual blargg test rom
2021-04-07 22:37:33 -05:00
Rekai Nyangadzayi Musuka
067ed03de3
feat: comply with test 03 of blargg's cpu_instrs test rom
2021-04-07 20:12:05 -05:00
Rekai Nyangadzayi Musuka
6db132ad48
feat(cartridge): handle MBC-less games like tetris
...
TODO: This will panic whenever a write is attempted on the MBC-less
cartridge. This would be fine if games held the implicit rules given by
the hardware, however this is not the case. We will have to modify the
NoMBC implementation to ignore writes to the cartrige (while still
documenting them just in case of bugs)
2021-04-05 01:43:26 -05:00
Rekai Nyangadzayi Musuka
823e4b1e0a
chore: follow rust style guides
2021-04-05 01:40:26 -05:00
Rekai Nyangadzayi Musuka
9b77d6c6c3
fix(cpu): ensure that timer, lcd and sound runs regardless of HALT
2021-04-05 01:20:18 -05:00
Rekai Nyangadzayi Musuka
9d2fbd2427
chore: remove unecessary print statements
2021-04-05 01:20:03 -05:00
Rekai Nyangadzayi Musuka
748c32c446
fix(cpu): use enums only of maintaining IME register state
2021-04-05 01:10:03 -05:00
Rekai Nyangadzayi Musuka
77c7c610d0
chore(cpu): rename ImeSet to ImeEnabled
2021-04-05 00:53:46 -05:00
Rekai Nyangadzayi Musuka
a15a6a25b6
feat(cpu): properly implement EI instruction
2021-04-05 00:52:12 -05:00
Rekai Nyangadzayi Musuka
62bd88945f
chore: rename a couple of interrupt instances to "int" instead of
...
"interrupt"
2021-04-04 01:52:53 -05:00
Rekai Nyangadzayi Musuka
7c9bff61f6
fix(ppu): add missing check for enabled interrupt
2021-04-04 01:50:49 -05:00
Rekai Nyangadzayi Musuka
777abd1c10
chore: rename some symbols
2021-04-04 01:31:31 -05:00
Rekai Nyangadzayi Musuka
4dd7a0d9ce
chore: fix several clippy warnings
2021-04-04 01:19:39 -05:00
Rekai Nyangadzayi Musuka
cb1bcdb859
feat(cpu): implement DAA instruction
2021-04-04 01:03:44 -05:00
Rekai Nyangadzayi Musuka
25e44f3e49
chore: fix condition when logs are printed
2021-03-27 15:07:17 -05:00
Rekai Nyangadzayi Musuka
2b05571c49
chore: rename Cycles newtype to Cycle
2021-03-27 12:10:18 -05:00
Rekai Nyangadzayi Musuka
bce14348f8
feat: enable halt and rework timer registers
2021-03-27 11:56:47 -05:00
Rekai Nyangadzayi Musuka
2bf877d1ec
fix(cpu): Ensure mask the high bits of the flag register
...
There was a bug where POP AF returned 0x1301. In this example, the A
register would be set to 0x13, and the Flag register woud be set to
0x01, which is an invalid state considering only bits 4 -> 7 of the flag
register are used. This commit masks the flag register with & 0xF0
whenever it is read or written to so that we can ensure that only the
high bits can ever be potentially set
2021-03-26 20:25:30 -05:00
Rekai Nyangadzayi Musuka
15781b3d5a
fix(instructions): correct the flags being set in ADD HL, r16
2021-03-26 20:19:48 -05:00
Rekai Nyangadzayi Musuka
a6d5553035
fix(cartridge): reimplement apply_rom_size_bitmask
2021-03-26 20:18:49 -05:00
Rekai Nyangadzayi Musuka
a82e3d3372
feat: implement HALT behaviour
...
note: while the logic is there, the instruction currently does not do
anything because we don't halde it in Cpu::step(). The code that does is
currently commented out and there should be some underlying bugs still
present. Nevertheless it is a good start
2021-03-23 23:05:27 -05:00
Rekai Nyangadzayi Musuka
c16f318fd1
fix: remove unnecessary allocation when loading boot rom
2021-03-23 21:21:18 -05:00
Rekai Nyangadzayi Musuka
48ac8317a8
fix(bus): fix off by one error when reading from boot rom
2021-03-23 21:01:33 -05:00
Rekai Nyangadzayi Musuka
e5fb07c4d1
chore: refactor parts of instruction.rs
2021-03-23 20:22:11 -05:00
Rekai Nyangadzayi Musuka
501d93c37b
chore: clean up code in one instruction
2021-03-23 18:21:59 -05:00
Rekai Nyangadzayi Musuka
1b7d778c1d
chore: clean up some instruction code
2021-03-23 02:11:40 -05:00
Rekai Nyangadzayi Musuka
6f11640f24
chore: replace CALL instruction with RST in interrupt handler
2021-03-23 02:11:06 -05:00
Rekai Nyangadzayi Musuka
342e6616ac
chore: improve unreachable! and panic! error messages
2021-03-22 22:33:56 -05:00
Rekai Nyangadzayi Musuka
2813b762dd
chore: replace select unreachable! macros with todo! and unreachable!
2021-03-22 21:52:28 -05:00
Rekai Nyangadzayi Musuka
9301a36682
chore: remove all unwraps from the project
2021-03-22 21:48:12 -05:00
Rekai Nyangadzayi Musuka
45466a5733
feat: implement clap for cli and improve error messages
2021-03-22 21:41:22 -05:00
Rekai Nyangadzayi Musuka
d7d9fd857f
fix: squash bugs in cpu intrucion implementation
2021-03-21 21:16:23 -05:00
Rekai Nyangadzayi Musuka
8a1540c9e9
fix: replaced unnecessary &mut self with &self
2021-03-21 19:56:38 -05:00
Rekai Nyangadzayi Musuka
dc45688e4f
feat: implement timers
2021-03-21 03:03:03 -05:00
Rekai Nyangadzayi Musuka
4db6f1de6e
chore: move LR35902_CLOCK_SPEED to lib.rs
2021-03-21 02:10:56 -05:00
Rekai Nyangadzayi Musuka
b548610fdb
chore: re-enable scrolling
2021-03-21 02:08:29 -05:00
Rekai Nyangadzayi Musuka
fe586d77ac
feat: stub 0xFF05
2021-03-21 02:01:19 -05:00
Rekai Nyangadzayi Musuka
15da6cb7d2
fix: squash several bugs in MBC1 implementation
2021-03-21 01:52:29 -05:00
Rekai Nyangadzayi Musuka
5a42d76f1e
feat: implement LCDSTAT interrupt
2021-03-21 00:01:21 -05:00
Rekai Nyangadzayi Musuka
c64417fdce
fix: horizontally flip ppu so the Nin***** logo is readable
2021-03-20 23:24:06 -05:00
Rekai Nyangadzayi Musuka
7462061937
chore: be more specific with integer types
2021-03-20 22:19:55 -05:00
Rekai Nyangadzayi Musuka
f78651d8d7
feat: implement programmable background palette
2021-03-20 22:19:13 -05:00
Rekai Nyangadzayi Musuka
b213a6e545
feat: make 0xFF0F aware of joypad struct interrupt bool
2021-03-20 21:21:55 -05:00
Rekai Nyangadzayi Musuka
36e572b783
feat: implement Joypad register
2021-03-20 21:11:45 -05:00
Rekai Nyangadzayi Musuka
fc303b6265
chore: rename "as u8" to "as Self" when implementing From Trait
2021-03-20 21:10:48 -05:00
Rekai Nyangadzayi Musuka
cd0eac9d37
chore: improve code quality
...
Removed a lot of magic constants. Gave them descriptive variable names
2021-03-20 20:26:49 -05:00
Rekai Nyangadzayi Musuka
0f4dec8a38
feat: implement cpu timing for emulator
...
When running the GB Boot ROM, a garbled Nin***** logo will appear
2021-03-20 19:56:26 -05:00
Rekai Nyangadzayi Musuka
d76b3b6101
chore: make Cycles::new a const fn
2021-03-20 19:55:39 -05:00
Rekai Nyangadzayi Musuka
2401cf7190
chore: implement default for cycles
2021-03-20 19:55:02 -05:00
Rekai Nyangadzayi Musuka
f365633c1e
fix: allow for the ppu to modify interrupt flags
2021-03-20 19:53:56 -05:00
Rekai Nyangadzayi Musuka
558f9e7c72
feat: implement cpu interrupts
2021-03-18 21:07:19 -05:00
Rekai Nyangadzayi Musuka
fb38ef3f68
feat: emu slowly draws scanline to pixelbuffer
2021-03-18 21:06:57 -05:00
Rekai Nyangadzayi Musuka
4663e8c960
chore: unifty read_byte and write_byte across hardware
2021-03-17 00:29:36 -05:00
Rekai Nyangadzayi Musuka
adeb6ca8a9
feat: implement window x, window y and ly compare registers
2021-03-16 22:52:43 -05:00
Rekai Nyangadzayi Musuka
06821bf880
fix: improve types of heap allocated arrays
2021-03-16 22:51:41 -05:00
Rekai Nyangadzayi Musuka
528b88eeb7
feat: implement Obj Palette 0 and 1
2021-03-16 02:36:09 -05:00
Rekai Nyangadzayi Musuka
8af434da07
fix: have the PPU use the CPU-writable Display Mode enum
2021-03-16 02:35:01 -05:00
Rekai Nyangadzayi Musuka
8c25e6f976
chore: fix spelling mistake
2021-03-16 02:31:07 -05:00
Rekai Nyangadzayi Musuka
19f642eafe
chore: make clippy happy
2021-03-16 01:05:13 -05:00
Rekai Nyangadzayi Musuka
bfde24cc8d
fix: reimplement some ppu structs as bitfield macros
2021-03-16 00:27:27 -05:00
Rekai Nyangadzayi Musuka
ef4cc8c3b6
chore: standardize the error message of a subet of unreachable! calls
2021-03-15 23:53:55 -05:00
Rekai Nyangadzayi Musuka
3b5d94adfc
fix: reimplement flags register to be a bitfield
2021-03-15 23:35:20 -05:00
Rekai Nyangadzayi Musuka
f57cf2b312
fix: switch to bitfield macros in serial.rs
2021-03-15 22:52:26 -05:00
Rekai Nyangadzayi Musuka
d0410c4dfd
fix: modify access parameters in timer.rs
2021-03-15 22:51:12 -05:00
Rekai Nyangadzayi Musuka
f17bb032cc
fix: implement bitfield macros in timer.rs
2021-03-15 22:41:41 -05:00
Rekai Nyangadzayi Musuka
1a8506c04f
chore: improve code quality
2021-03-15 22:36:27 -05:00
Rekai Nyangadzayi Musuka
3d82465b04
chore: clean up code
2021-03-15 22:08:47 -05:00
Rekai Nyangadzayi Musuka
84babc4d69
fix: convert structs to bitfield structs in interrupt.rs
2021-03-15 21:59:53 -05:00
Rekai Nyangadzayi Musuka
602a0af4b7
chore: update parameter names in sound.rs
2021-03-15 21:43:50 -05:00
Rekai Nyangadzayi Musuka
f929cd5989
chore: update access modifiers in sound.rs
2021-03-15 21:36:57 -05:00
Rekai Nyangadzayi Musuka
8989d3f1d7
fix: convert sound.rs structs to bitfields
2021-03-15 21:16:11 -05:00
Rekai Nyangadzayi Musuka
98e67b8c1c
chore: fix spelling error
2021-03-15 19:20:08 -05:00
Rekai Nyangadzayi Musuka
d30ce4dbb2
chore: improve code quailty
2021-03-15 19:19:40 -05:00
Rekai Nyangadzayi Musuka
5d95eadd2e
fix: implement Default and Clone for Box<dyn MBC>
2021-03-15 19:08:19 -05:00
Rekai Nyangadzayi Musuka
d78a50fefc
chore: fix tests and simplify CI build
2021-01-27 22:17:01 -06:00
Rekai Nyangadzayi Musuka
b053260c8b
feat: don't embed gb boot rom in emulator
2021-01-27 22:07:31 -06:00
Rekai Nyangadzayi Musuka
b5d3a2c675
feat: implement MBC1
2021-01-20 01:39:24 -06:00
Rekai Nyangadzayi Musuka
96bfc43312
chore: fix spelling errors
2021-01-19 22:44:48 -06:00
Rekai Nyangadzayi Musuka
842e670807
fix: replace MathTarget::HL and ::SP with already-existing enums
2021-01-19 02:05:04 -06:00
Rekai Nyangadzayi Musuka
b70c398e14
feat: implement registers 0xFF01 and 0xFF02
2021-01-19 01:40:07 -06:00
Rekai Nyangadzayi Musuka
68c9557c43
chore: improve code quality
2021-01-19 01:36:44 -06:00
Rekai Nyangadzayi Musuka
1da01a318d
feat: emulator now sucessfully runs boot rom
2021-01-19 00:30:32 -06:00
Rekai Nyangadzayi Musuka
9143286e9c
feat: implement more operator overrides for Cycles
2021-01-19 00:29:04 -06:00
Rekai Nyangadzayi Musuka
9b4c95ce4c
feat: reimplement cycles newtype
2021-01-18 22:54:38 -06:00
Rekai Nyangadzayi Musuka
2fc7ac3833
feat: add pixels-rs and winit as dependencies
2021-01-18 20:47:09 -06:00
Rekai Nyangadzayi Musuka
207bcfea30
chore: improve debug logs
2021-01-18 02:47:41 -06:00
Rekai Nyangadzayi Musuka
49a45d48cb
fix: improve appearance of debug logs
2021-01-18 02:29:35 -06:00
Rekai Nyangadzayi Musuka
9203b61533
fix: implement 0xff41 and fix CALL instruciton
2021-01-18 02:22:45 -06:00
Rekai Nyangadzayi Musuka
386a780a6f
fix: call opcode now pushes correct address onto stack
2021-01-17 22:12:00 -06:00
Rekai Nyangadzayi Musuka
c0b8b8bda2
feat: implement more registers
2021-01-17 21:13:59 -06:00
Rekai Nyangadzayi Musuka
70de3b9142
feat: stub 0xff40 and 0xff47
2021-01-17 19:25:53 -06:00
Rekai Nyangadzayi Musuka
92218a227d
feat: implement 0xff24 sound register
2021-01-17 18:58:57 -06:00
Rekai Nyangadzayi Musuka
251f4e8d6d
feat: implement several sound i/o registers
2021-01-17 17:33:12 -06:00
Rekai Nyangadzayi Musuka
072c5f1b70
fix: squash bug in 64 LD instructions
2021-01-17 17:31:45 -06:00
Rekai Nyangadzayi Musuka
834423fe18
feat: stub sound register 0xff26
2021-01-03 02:05:46 -06:00
Rekai Nyangadzayi Musuka
1b53363095
feat: stub 0xff0f and 0xffff from interrupt
2021-01-03 01:38:31 -06:00
Rekai Nyangadzayi Musuka
e693ad8a3c
feat: create timer struct and stub 0xff07
2021-01-03 01:21:19 -06:00
Rekai Nyangadzayi Musuka
911f0f9c86
feat: stub work ram
2021-01-03 00:28:07 -06:00
Rekai Nyangadzayi Musuka
8048495cbc
chore: move ppu vram from stack to heap
2021-01-02 23:58:49 -06:00
Rekai Nyangadzayi Musuka
fb0772c671
chore: remove duplicate code
2021-01-02 22:49:25 -06:00
Rekai Nyangadzayi Musuka
fe74f80ddf
chore: format code
2020-12-24 00:34:48 -06:00
Rekai Nyangadzayi Musuka
26df683cff
chore: move vram buffer to PPU struct
2020-12-24 00:27:06 -06:00
Rekai Nyangadzayi Musuka
677a584ba7
chore: stub vram, start work on ppu, fix set_register bug
2020-12-23 21:24:58 -06:00
Rekai Nyangadzayi Musuka
2a234f4d14
feat: implement ability to boot straigt to cartridge
2020-12-23 19:39:37 -06:00
Rekai Nyangadzayi Musuka
1502cc3ec2
chore: add debug information to bus.rs
2020-12-23 03:43:49 -06:00
Rekai Nyangadzayi Musuka
4d2e0e33f2
feat: implement fetch, decode, execute loop
2020-12-23 03:25:16 -06:00
Rekai Nyangadzayi Musuka
e540c86c7e
chore: make InstrRegisterPair public
2020-12-23 01:58:55 -06:00
Rekai Nyangadzayi Musuka
bf945c3f44
chore: make InstrRegister public to satisfy rust
2020-12-23 01:27:11 -06:00
Rekai Nyangadzayi Musuka
db86d11085
chore: refactor LDTarget and InstrRegister
2020-12-23 01:24:06 -06:00
Rekai Nyangadzayi Musuka
2e1c97e5d7
chore: reorganize instructions.rs
2020-12-23 01:17:13 -06:00
Rekai Nyangadzayi Musuka
9cd4c4ea11
chore: remove duplicate Instruction::INC match
2020-12-23 01:11:03 -06:00
Rekai Nyangadzayi Musuka
5187cbed76
feat: implement remaining gb opcodes
...
As of now, the initial implementation of all GameBoy opcoes are
complete. There's most likely a lot of bugs in them, however the
foundtain has been placed.
2020-12-23 01:07:30 -06:00
Rekai Nyangadzayi Musuka
9be1d1508e
feat: implement all opcodes in rot table
2020-12-23 00:24:29 -06:00
Rekai Nyangadzayi Musuka
f9d7fe05df
Merge branch 'master' of ssh://ssh.paoda.moe:31059/paoda/gb
2020-12-22 22:23:28 -06:00
Rekai Nyangadzayi Musuka
4bf9ccb98c
chore: qol update
2020-12-22 22:23:09 -06:00