Rekai Nyangadzayi Musuka
4d75d156e5
feat: pass retAddr.gba
2022-10-21 05:12:22 -03:00
Rekai Nyangadzayi Musuka
d30a4d7ee5
feat: implement Hblank and Vcount Interrupts
...
Also implemented unique behaviour when writing to IF
2022-10-21 05:12:22 -03:00
Rekai Nyangadzayi Musuka
d1fce8ba75
chore: improve Bus log + panic messages
2022-10-21 05:12:22 -03:00
Rekai Nyangadzayi Musuka
0f74e4fcf9
chore: improve io.zig
2022-10-21 05:12:22 -03:00
Rekai Nyangadzayi Musuka
4afcbd0957
feat: implement mirroring for IWRAM EWRAM, OAM and PALRAM
...
Also realized I confused IWRAM and EWRAM. This is also fixed
TODO: Implemnt Mirroring for VRRAM
2022-10-21 05:12:22 -03:00
Rekai Nyangadzayi Musuka
50dc31447d
fix: resolve integer overflow in BG0 Drawing
2022-10-21 05:12:22 -03:00
Rekai Nyangadzayi Musuka
acf1a10f91
chore: don't panic on 32-bit I/O
2022-10-21 05:12:21 -03:00
Rekai Nyangadzayi Musuka
606f9b959a
chore: stub CPU HALTing
2022-10-21 05:12:21 -03:00
Rekai Nyangadzayi Musuka
f19b42baf3
chore: correct logic errors in map size 1 and 3
2022-10-21 05:12:21 -03:00
Rekai Nyangadzayi Musuka
2a3d0c8b0d
chore: properly write to VOFS and HOFS in 32-bit bus
2022-10-21 05:12:21 -03:00
Rekai Nyangadzayi Musuka
4405fa6bbf
feat: implement hofs and vofs on io bus
2022-10-21 05:12:21 -03:00
Rekai Nyangadzayi Musuka
e2b2bf882a
feat: implement scrolling
2022-10-21 05:12:21 -03:00
Rekai Nyangadzayi Musuka
08e4eb1bf1
feat: add support for multiple BGs in Mode 0
2022-10-21 05:12:20 -03:00
Rekai Nyangadzayi Musuka
f4b176a813
feat: document mode 0
2022-10-21 05:12:20 -03:00
Rekai Nyangadzayi Musuka
efc7d817db
feat: Mode 0 MVP
2022-10-21 05:12:20 -03:00
Rekai Nyangadzayi Musuka
1b17b1eb0c
chore: use zig slices for fun
2022-10-21 05:12:20 -03:00
Rekai Nyangadzayi Musuka
fab6d4c2a2
chore: give DISPCNT DISPSTAT and VCOUNT to PPU struct
2022-10-21 05:12:20 -03:00
Rekai Nyangadzayi Musuka
223a3403c0
chore: give io read/write functions access to the entire Bus
2022-10-21 05:12:20 -03:00
Rekai Nyangadzayi Musuka
dfd0d064de
feat: implement BG Scrolling Registers
2022-10-21 05:12:19 -03:00
Rekai Nyangadzayi Musuka
0c4882e658
feat: impelemnt BG0,1,2CNT and IF
2022-10-21 05:12:19 -03:00
Rekai Nyangadzayi Musuka
bfdad9fa32
feat: implement OAM
2022-10-21 05:12:19 -03:00
Rekai Nyangadzayi Musuka
37fd8dab84
chore: squash bugs preventing swi_demo.gba from working
2022-10-21 05:12:19 -03:00
Rekai Nyangadzayi Musuka
c143aefb01
chore(cpu): reimplement bank switching logic
2022-10-21 05:12:19 -03:00
Rekai Nyangadzayi Musuka
05bf245b5a
fix: don't mask away MSB in THUMB.5 add
2022-10-21 05:12:19 -03:00
Rekai Nyangadzayi Musuka
f9e7128061
fix: properly decode format 11 instructions
2022-10-21 05:12:18 -03:00
Rekai Nyangadzayi Musuka
603e4b6fdf
chore: make use of scoped logging
2022-10-21 05:12:18 -03:00
Rekai Nyangadzayi Musuka
599a1f2973
chore: remove TODOs and some useless imports
2022-10-21 05:12:18 -03:00
Rekai Nyangadzayi Musuka
22424ca69c
fix: improper condition check and initialization of register
2022-10-21 05:12:18 -03:00
Rekai Nyangadzayi Musuka
67a785cc22
fix(cpu): force align thumb and arm block data transfers
2022-10-21 05:12:18 -03:00
Rekai Nyangadzayi Musuka
4eb3842606
feat: pass arm.gba
2022-10-21 05:12:17 -03:00
Rekai Nyangadzayi Musuka
1ee8b51b2b
chore: reimplement ARM LDM/STM
2022-10-21 05:12:17 -03:00
Rekai Nyangadzayi Musuka
130310e5cc
chore: improve arm ldm/stm
2022-10-21 05:12:17 -03:00
Rekai Nyangadzayi Musuka
e933d7e5c7
fix(cpu): force-align SWP reads and writes
2022-10-21 05:12:17 -03:00
Rekai Nyangadzayi Musuka
44e8b5b882
fix: force-align ARM STRH reads
2022-10-21 05:12:17 -03:00
Rekai Nyangadzayi Musuka
28361e8b7d
fix: implement the same LDRSH logic as THUMB LDRSH
2022-10-21 05:12:16 -03:00
Rekai Nyangadzayi Musuka
75921d6413
fix: PC is 12 ahead when it is rd in str and strb
2022-10-21 05:12:16 -03:00
Rekai Nyangadzayi Musuka
17226d8f75
fix: listen to my past self
...
By deleting this line I go from test 234 to test 355 in arm.gba
2022-10-21 05:12:16 -03:00
Rekai Nyangadzayi Musuka
2cb1bf834a
chore: dont use std.mem.bytesToValue
...
the stdlib accounts for endianness, which isn't something we want.
2022-10-21 05:12:16 -03:00
Rekai Nyangadzayi Musuka
8006ca31e6
chore: remove unnecessary @as calls
2022-10-21 05:12:16 -03:00
Rekai Nyangadzayi Musuka
82b92b4733
feat: pass thumb.gba
2022-10-21 05:12:15 -03:00
Rekai Nyangadzayi Musuka
bf42d3ae2f
chore: account for empty rlist in THUMB LDM/STM
2022-10-21 05:12:15 -03:00
Rekai Nyangadzayi Musuka
f63ae76931
fix(cpu): handle edge case in LDRSH
2022-10-21 05:12:15 -03:00
Rekai Nyangadzayi Musuka
f046787523
chore: reorganize util.zig
2022-10-21 05:12:15 -03:00
Rekai Nyangadzayi Musuka
bbd73550e8
fix: zero initialize all allocated memory
2022-10-21 05:12:15 -03:00
Rekai Nyangadzayi Musuka
4776dc0788
Revert "fix: allow for 32-bit reads to KEYINPUT"
...
This reverts commit 3a51707280
.
2022-10-21 05:12:14 -03:00
Rekai Nyangadzayi Musuka
d8bd6da563
fix: resolve decoding mixup in THUMB format 8 instructions
2022-10-21 05:12:14 -03:00
Rekai Nyangadzayi Musuka
b569a32170
fix: allow for 32-bit reads to KEYINPUT
2022-10-21 05:12:14 -03:00
Rekai Nyangadzayi Musuka
06e20666bd
chore: refactor ARMv4 decoding
2022-10-21 05:12:14 -03:00
Rekai Nyangadzayi Musuka
36687c5c67
chore: add more debug information to CPU panic method
2022-10-21 05:12:14 -03:00
Rekai Nyangadzayi Musuka
dd9b20030a
chore: give more descriptive panic messages when changing mode fails
2022-10-21 05:12:13 -03:00
Rekai Nyangadzayi Musuka
c0db2a987b
chore: clean up THUMB instruction decoding
2022-10-21 05:12:13 -03:00
Rekai Nyangadzayi Musuka
c3ff2ed6c1
feat: parse cartridge header
2022-10-21 05:12:13 -03:00
Rekai Nyangadzayi Musuka
271f42cf0e
feat: rename ARM and THUMB SWI functions
2022-10-21 05:12:13 -03:00
Rekai Nyangadzayi Musuka
01e15584da
chore: group THUMB and select ARM instructions together (same file)
2022-10-21 05:12:13 -03:00
Rekai Nyangadzayi Musuka
17b91db2ef
feat: integrate zig-clap with ZBA
2022-10-21 05:12:13 -03:00
Rekai Nyangadzayi Musuka
3e786d02ac
fix(cpu): properly decode format 7 and 8
2022-10-21 05:12:12 -03:00
Rekai Nyangadzayi Musuka
c8f2db69df
fix(cpu): resolve edge cases in THUMB Format 5
2022-10-21 05:12:12 -03:00
Rekai Nyangadzayi Musuka
b4e0682801
fix(cpu): allow for select values to overflow
...
FuzzARM found these operations which panicked, when they should
have overflowed. These are now fixed
n = 8000
2022-10-21 05:12:12 -03:00
Rekai Nyangadzayi Musuka
af10c1b076
feat(cpu): implement format 13
...
While bugs do exist, at this point all THUMB and ARMv4 instructions
have been implemented! Yay!
2022-10-21 05:12:12 -03:00
Rekai Nyangadzayi Musuka
e6a0eab667
feat(cpu): implement THUMB format 17
2022-10-21 05:12:12 -03:00
Rekai Nyangadzayi Musuka
523b9d2736
feat(cpu): implement THUMB format11
2022-10-21 05:12:12 -03:00
Rekai Nyangadzayi Musuka
011d2f2f2a
chore: update to latest zig nightly
2022-10-21 05:12:11 -03:00
Rekai Nyangadzayi Musuka
c37546d273
chore: progress towards passing ldr/str thumb in armwrestler
2022-10-21 05:12:11 -03:00
Rekai Nyangadzayi Musuka
fbedebb938
fix(cpu): properly negate in NEG
2022-10-21 05:12:11 -03:00
Rekai Nyangadzayi Musuka
1773a3acc8
fix(cpu): reimplement THUMB offset shifts
2022-10-21 05:12:11 -03:00
Rekai Nyangadzayi Musuka
058c02150c
fix(cpu): op == 0b00 decodes to add in format 5
2022-10-21 05:12:11 -03:00
Rekai Nyangadzayi Musuka
8d841ead50
fix(cpu): account for overflow in THUMB alu MUL
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
152dafbdf7
chore: use if-else when decoding THUMB instructions
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
7dbd2fc556
fix(cpu): account for rn in rlist in block data transfer
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
85e0924669
feat: implement LDM/STM behaviour when S is set
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
97919f646d
feat(cpu): Pass all LDR/STR ARMwrestler tests
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
696cc1b359
feat(cpu): decode and implement all necessary ARM CPU instructions
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
151de2eab4
feat(cpu): implement ARM SWP and SWPB
2022-10-21 05:12:10 -03:00
Rekai Nyangadzayi Musuka
e7f6464564
fix: resolve off by n * 2 when accessing Palette during BG Mode 4
2022-10-21 05:12:09 -03:00
Rekai Nyangadzayi Musuka
da681c946e
feat(cpu): Implement Multiply Long ARM instructions
2022-10-21 05:12:09 -03:00
Rekai Nyangadzayi Musuka
e0e43eece5
fix: no buttons are pressed by default
2022-10-21 05:12:09 -03:00
Rekai Nyangadzayi Musuka
7013389288
feat(cpu): implement format 18 THUMB instructions
2022-10-21 05:12:09 -03:00
Rekai Nyangadzayi Musuka
443520ecae
chore: more detailed panic message
2022-10-21 05:12:09 -03:00
Rekai Nyangadzayi Musuka
96d7285111
feat(cpu): implement format 10 THUMB instructions
2022-10-21 05:12:08 -03:00
Rekai Nyangadzayi Musuka
7e6fc44191
feat(cpu): implement SWP
2022-10-21 05:12:08 -03:00
Rekai Nyangadzayi Musuka
9cb4ebaa7f
fix(cpu): perform MUL with u64s, throw away upper 32 bits
2022-10-21 05:12:08 -03:00
Rekai Nyangadzayi Musuka
3e4d7e7ed8
feat: implement keyboard input
2022-10-21 05:12:08 -03:00
Rekai Nyangadzayi Musuka
3a6951d93d
chore: don't panic on unsupported BG mode
2022-10-21 05:12:08 -03:00
Rekai Nyangadzayi Musuka
391096872e
chore: tempoarily disable fps counter
2022-10-21 05:12:08 -03:00
Rekai Nyangadzayi Musuka
eebf6fcae4
chore: zero-initialize VRAM
2022-10-21 05:12:07 -03:00
Rekai Nyangadzayi Musuka
8b7223cf35
chore: stub KeyInput I/O register
2022-10-21 05:12:07 -03:00
Rekai Nyangadzayi Musuka
e1fec48a0e
fix(cpu): properly decode multiply instructions
2022-10-21 05:12:07 -03:00
Rekai Nyangadzayi Musuka
0778ee8dd7
feat(cpu): implement ARM multiply instructions
2022-10-21 05:12:07 -03:00
Rekai Nyangadzayi Musuka
14d5160674
fix: allow 32-bit writes to DISPCNT
2022-10-21 05:12:07 -03:00
Rekai Nyangadzayi Musuka
eabf787305
fix(cpu): properly decode ldm stm thumb instructions
2022-10-21 05:12:07 -03:00
Rekai Nyangadzayi Musuka
980e4ff5dd
fix(cpu): properly decode THUMB PUSH and POP at comptime
2022-10-21 05:12:06 -03:00
Rekai Nyangadzayi Musuka
1ac193c506
fix(cpu): don't ignore 11th bit of THUMB BL offset
2022-10-21 05:12:06 -03:00
Rekai Nyangadzayi Musuka
d6ed071bc6
feat(cpu): implement thumb push / pop and stub format 13 thumb instrs
2022-10-21 05:12:06 -03:00
Rekai Nyangadzayi Musuka
a3d53d40fb
feat(cpu): implement THUMB format 9 loads / stores
2022-10-21 05:12:06 -03:00
Rekai Nyangadzayi Musuka
a17dfbe41f
fix(cpu): resolve issues with unexpected PC value in THUMB
2022-10-21 05:12:06 -03:00
Rekai Nyangadzayi Musuka
b9a81baa47
feat(cpu): implement THUMB ldmia stmia
2022-10-21 05:12:06 -03:00
Rekai Nyangadzayi Musuka
97b236225e
chore: implement THUMB format 4 instructions
2022-10-21 05:12:05 -03:00
Rekai Nyangadzayi Musuka
8113146b86
chore: dedup code in THUMB instructions
2022-10-21 05:12:05 -03:00
Rekai Nyangadzayi Musuka
e6625113db
chore: refactor and genericize ARM data processing calculations
2022-10-21 05:12:05 -03:00
Rekai Nyangadzayi Musuka
2643504eb5
chore: relocate barrel_shifter zig file
2022-10-21 05:12:05 -03:00
Rekai Nyangadzayi Musuka
f7518d1bab
feat(cpu): implement format2 THUMB instructions
2022-10-21 05:12:05 -03:00
Rekai Nyangadzayi Musuka
800ca798cd
feat(cpu): implement format19 THUMB instructions
2022-10-21 05:12:05 -03:00
Rekai Nyangadzayi Musuka
d714ffb4f9
chore: account for THUMB BL instruction when mimicking mGBA logs
2022-10-21 05:12:04 -03:00
Rekai Nyangadzayi Musuka
7bc186a03c
feat(cpu): implement format16 THUMB instructions
2022-10-21 05:12:04 -03:00
Rekai Nyangadzayi Musuka
b94b87d186
feat(cpu): implement format 1 THUMB instructions
2022-10-21 05:12:04 -03:00
Rekai Nyangadzayi Musuka
0289be60ef
fix: dont close file handle early
2022-10-21 05:12:04 -03:00
Rekai Nyangadzayi Musuka
93922b65e3
feat(cpu): implement format 6 THUMB instructions
2022-10-21 05:12:04 -03:00
Rekai Nyangadzayi Musuka
c6608748c6
chore: rename title
2022-10-21 05:12:04 -03:00
Rekai Nyangadzayi Musuka
8e383d55d7
chore: refactor GBA Display Timings
...
This change should reflect that the Hblank bit of DISPSTAT is toggled on all scanlines
while also ensuring that the Vblank bit is set on all Vblank scanlines
2022-10-21 05:12:03 -03:00
Rekai Nyangadzayi Musuka
8926026b5b
chore: move a single statement lol
2022-10-21 05:12:03 -03:00
Rekai Nyangadzayi Musuka
464479b986
chore: mark indexing methods as inline
2022-10-21 05:12:03 -03:00
Rekai Nyangadzayi Musuka
de1c84914c
feat: create emulator thread
2022-10-21 05:12:03 -03:00
Rekai Nyangadzayi Musuka
8e7766e694
chore: disable logging by default
2022-10-21 05:12:03 -03:00
Rekai Nyangadzayi Musuka
4858dbc5dc
chore: revert fastboot changes
2022-10-21 05:12:03 -03:00
Rekai Nyangadzayi Musuka
c4e131b92d
chore: binary logging + file logging + DP chanes + fastBoot changes
2022-10-21 05:12:02 -03:00
Rekai Nyangadzayi Musuka
2e54be76d6
chore: rename skipBios to fastBoot
2022-10-21 05:12:02 -03:00
Rekai Nyangadzayi Musuka
7914268702
chore: set correct values for select banked registers on fast boot
2022-10-21 05:12:02 -03:00
Rekai Nyangadzayi Musuka
4bdb85834c
feat(cpu): implement SWI
2022-10-21 05:12:02 -03:00
Rekai Nyangadzayi Musuka
f89a37936f
chore(bios): allow reading from BIOS
2022-10-21 05:12:02 -03:00
Rekai Nyangadzayi Musuka
8bb7ea6be6
fix(cpu): interim solution to weird program counter behaviour on illegal tst instruction
2022-10-21 05:12:01 -03:00
Rekai Nyangadzayi Musuka
60a1f7fa99
chore(cpu): implement behaviour for undefined test instruction
2022-10-21 05:12:01 -03:00
Rekai Nyangadzayi Musuka
b3b8182f85
fix(cpu): fix PC offset when barrel shifter and bit 4 of DP is set
2022-10-21 05:12:01 -03:00
Rekai Nyangadzayi Musuka
56e660714c
fix(cpu): implement S set + rd == 15 case for data processing
2022-10-21 05:12:01 -03:00
Rekai Nyangadzayi Musuka
eb632056a2
feat(cpu): implement banked registers
2022-10-21 05:12:01 -03:00
Rekai Nyangadzayi Musuka
fbc9de0335
fix(cpu): improve MRS and MSR instructions
2022-10-21 05:12:01 -03:00
Rekai Nyangadzayi Musuka
5c7539cd26
feat(cpu): implement CMN
2022-10-21 05:12:00 -03:00
Rekai Nyangadzayi Musuka
7c20e5fdb5
fix(barrel_shifter): fix PC being 1 word ahead in barrel shifter
2022-10-21 05:12:00 -03:00
Rekai Nyangadzayi Musuka
f79e7126ee
feat(cpu): Implement RSC
2022-10-21 05:12:00 -03:00
Rekai Nyangadzayi Musuka
15e92bc6af
feat(cpu): implement RSB
2022-10-21 05:12:00 -03:00
Rekai Nyangadzayi Musuka
47fc96fe00
feat(cpu): implement BIC
2022-10-21 05:12:00 -03:00
Rekai Nyangadzayi Musuka
4ac5ad42c6
feat(cpu): implement EOR
2022-10-21 05:12:00 -03:00
Rekai Nyangadzayi Musuka
c93153672f
feat(cpu): implement ADD
2022-10-21 05:11:59 -03:00
Rekai Nyangadzayi Musuka
a46dd448f4
feat(cpu): implement fix for ADC and implement SBC
2022-10-21 05:11:59 -03:00
Rekai Nyangadzayi Musuka
01f75112ce
chore(barrel_shifter): remove panic from ASR
2022-10-21 05:11:59 -03:00
Rekai Nyangadzayi Musuka
051b98bc02
fix(barrel_shifter): should not modify cpsr when amount == 0
2022-10-21 05:11:59 -03:00
Rekai Nyangadzayi Musuka
5d0bc1b335
chore(cpu): refactor the barrel shifter once again
2022-10-21 05:11:59 -03:00
Rekai Nyangadzayi Musuka
43d011538e
feat(cpu): implement ADC
...
ADC interacting w/ the Barrel Shifter is not working though
2022-10-21 05:11:59 -03:00
Rekai Nyangadzayi Musuka
f3ad5e90ff
feat(cpu): implement RRX for Barrel Shifter
2022-10-21 05:11:58 -03:00
Rekai Nyangadzayi Musuka
9b867c02e0
feat(cpu): implement SUB in THUMB format 3
2022-10-21 05:11:58 -03:00
Rekai Nyangadzayi Musuka
2ba09868ba
feat(cpu): implement ARM SUB in data processing
2022-10-21 05:11:58 -03:00
Rekai Nyangadzayi Musuka
9394754593
feat(cpu): implement MVN
2022-10-21 05:11:58 -03:00
Rekai Nyangadzayi Musuka
41bab3d6ba
chore(cpu): refactor barrel shifter
2022-10-21 05:11:58 -03:00
Rekai Nyangadzayi Musuka
99b686b2d7
fix(cpu): use barrel shifter in data processing immediates
2022-10-21 05:11:58 -03:00
Rekai Nyangadzayi Musuka
daad98bbfe
feat(cpu): implement format 12 thumb instructions
2022-10-21 05:11:57 -03:00
Rekai Nyangadzayi Musuka
2fb01577af
feat(cpu): implement some already decoded format 3 instructions
2022-10-21 05:11:57 -03:00
Rekai Nyangadzayi Musuka
96d21f27a5
feat(cpu): implement THUMB format 5 instructions
2022-10-21 05:11:57 -03:00
Rekai Nyangadzayi Musuka
793110f315
chore: mgba log now supports printing THUMB instructions
2022-10-21 05:11:57 -03:00
Rekai Nyangadzayi Musuka
5ed5c5d52d
feat(cpu): implement like 1 THUMB instruction
2022-10-21 05:11:57 -03:00
Rekai Nyangadzayi Musuka
01385ee46b
chore: distinguish between undefined ARM and THUMB instr
2022-10-21 05:11:57 -03:00
Rekai Nyangadzayi Musuka
0eba3aca1f
chore(cpu): lay groundwork for THUMB instruction decoding and execution
2022-10-21 05:11:57 -03:00