feat: better DMA, PPU, add more tests

This commit is contained in:
EliseZeroTwo 2024-01-19 11:44:51 -07:00
parent 0afc556233
commit c6dd3a7bd5
Signed by: elise
GPG key ID: FA8F56FFFE6E8B3E
166 changed files with 917 additions and 696 deletions

View file

@ -20,284 +20,292 @@ jobs:
- name: Run test ROM (blargg cpu_instrs) - name: Run test ROM (blargg cpu_instrs)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/blargg/roms/cpu_instrs.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/cpu_instrs.bin run: ./target/release/meowgb-tests test-roms/blargg/serial-roms/cpu_instrs.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/cpu_instrs.bin
- name: Run test ROM (blargg instr_timing) - name: Run test ROM (blargg instr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/blargg/roms/instr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/instr_timing.bin run: ./target/release/meowgb-tests test-roms/blargg/serial-roms/instr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/instr_timing.bin
- name: Run test ROM (blargg mem_timing) - name: Run test ROM (blargg mem_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/blargg/roms/mem_timing.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/mem_timing.bin run: ./target/release/meowgb-tests test-roms/blargg/serial-roms/mem_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/mem_timing.bin
- name: Run test ROM (mooneye-test-suite add_sp_e_timing) - name: Run test ROM (mooneye-test-suite add_sp_e_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/add_sp_e_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/add_sp_e_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/add_sp_e_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/add_sp_e_timing.bin
- name: Run test ROM (mooneye-test-suite boot_hwio-dmgABCmgb) - name: Run test ROM (mooneye-test-suite boot_hwio-dmgABCmgb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/boot_hwio-dmgABCmgb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/boot_hwio-dmgABCmgb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/boot_hwio-dmgABCmgb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/boot_hwio-dmgABCmgb.bin
- name: Run test ROM (mooneye-test-suite boot_regs-dmgABC) - name: Run test ROM (mooneye-test-suite boot_regs-dmgABC)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/boot_regs-dmgABC.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/boot_regs-dmgABC.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/boot_regs-dmgABC.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/boot_regs-dmgABC.bin
- name: Run test ROM (mooneye-test-suite call_cc_timing) - name: Run test ROM (mooneye-test-suite call_cc_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_cc_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_cc_timing.bin
- name: Run test ROM (mooneye-test-suite call_cc_timing2) - name: Run test ROM (mooneye-test-suite call_cc_timing2)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_cc_timing2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_cc_timing2.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_cc_timing2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_cc_timing2.bin
- name: Run test ROM (mooneye-test-suite call_timing) - name: Run test ROM (mooneye-test-suite call_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_timing.bin
- name: Run test ROM (mooneye-test-suite call_timing2) - name: Run test ROM (mooneye-test-suite call_timing2)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_timing2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_timing2.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_timing2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_timing2.bin
- name: Run test ROM (mooneye-test-suite di_timing-GS) - name: Run test ROM (mooneye-test-suite di_timing-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/di_timing-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/di_timing-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/di_timing-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/di_timing-GS.bin
- name: Run test ROM (mooneye-test-suite div_timing) - name: Run test ROM (mooneye-test-suite div_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/div_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/div_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/div_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/div_timing.bin
- name: Run test ROM (mooneye-test-suite ei_sequence) - name: Run test ROM (mooneye-test-suite ei_sequence)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ei_sequence.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ei_sequence.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ei_sequence.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ei_sequence.bin
- name: Run test ROM (mooneye-test-suite ei_timing) - name: Run test ROM (mooneye-test-suite ei_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ei_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ei_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ei_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ei_timing.bin
- name: Run test ROM (mooneye-test-suite halt_ime0_ei) - name: Run test ROM (mooneye-test-suite halt_ime0_ei)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime0_ei.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime0_ei.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime0_ei.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime0_ei.bin
- name: Run test ROM (mooneye-test-suite halt_ime0_nointr_timing) - name: Run test ROM (mooneye-test-suite halt_ime0_nointr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime0_nointr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime0_nointr_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime0_nointr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime0_nointr_timing.bin
- name: Run test ROM (mooneye-test-suite halt_ime1_timing) - name: Run test ROM (mooneye-test-suite halt_ime1_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime1_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime1_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime1_timing.bin
- name: Run test ROM (mooneye-test-suite halt_ime1_timing2-GS) - name: Run test ROM (mooneye-test-suite halt_ime1_timing2-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime1_timing2-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime1_timing2-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing2-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime1_timing2-GS.bin
- name: Run test ROM (mooneye-test-suite if_ie_registers) - name: Run test ROM (mooneye-test-suite if_ie_registers)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/if_ie_registers.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/if_ie_registers.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/if_ie_registers.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/if_ie_registers.bin
- name: Run test ROM (mooneye-test-suite intr_timing) - name: Run test ROM (mooneye-test-suite intr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/intr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/intr_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/intr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/intr_timing.bin
- name: Run test ROM (mooneye-test-suite jp_cc_timing) - name: Run test ROM (mooneye-test-suite jp_cc_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/jp_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/jp_cc_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/jp_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/jp_cc_timing.bin
- name: Run test ROM (mooneye-test-suite jp_timing) - name: Run test ROM (mooneye-test-suite jp_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/jp_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/jp_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/jp_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/jp_timing.bin
- name: Run test ROM (mooneye-test-suite ld_hl_sp_e_timing) - name: Run test ROM (mooneye-test-suite ld_hl_sp_e_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ld_hl_sp_e_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ld_hl_sp_e_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ld_hl_sp_e_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ld_hl_sp_e_timing.bin
- name: Run test ROM (mooneye-test-suite oam_dma_restart) - name: Run test ROM (mooneye-test-suite oam_dma_restart)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_restart.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_restart.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_restart.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_restart.bin
- name: Run test ROM (mooneye-test-suite oam_dma_start) - name: Run test ROM (mooneye-test-suite oam_dma_start)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_start.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_start.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_start.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_start.bin
- name: Run test ROM (mooneye-test-suite oam_dma_timing) - name: Run test ROM (mooneye-test-suite oam_dma_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_timing.bin
- name: Run test ROM (mooneye-test-suite pop_timing) - name: Run test ROM (mooneye-test-suite pop_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/pop_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/pop_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/pop_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/pop_timing.bin
- name: Run test ROM (mooneye-test-suite push_timing) - name: Run test ROM (mooneye-test-suite push_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/push_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/push_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/push_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/push_timing.bin
- name: Run test ROM (mooneye-test-suite rapid_di_ei) - name: Run test ROM (mooneye-test-suite rapid_di_ei)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/rapid_di_ei.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/rapid_di_ei.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/rapid_di_ei.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/rapid_di_ei.bin
- name: Run test ROM (mooneye-test-suite ret_cc_timing) - name: Run test ROM (mooneye-test-suite ret_cc_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ret_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ret_cc_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ret_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ret_cc_timing.bin
- name: Run test ROM (mooneye-test-suite ret_timing) - name: Run test ROM (mooneye-test-suite ret_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ret_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ret_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ret_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ret_timing.bin
- name: Run test ROM (mooneye-test-suite reti_intr_timing) - name: Run test ROM (mooneye-test-suite reti_intr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/reti_intr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/reti_intr_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/reti_intr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/reti_intr_timing.bin
- name: Run test ROM (mooneye-test-suite reti_timing) - name: Run test ROM (mooneye-test-suite reti_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/reti_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/reti_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/reti_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/reti_timing.bin
- name: Run test ROM (mooneye-test-suite rst_timing) - name: Run test ROM (mooneye-test-suite rst_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/rst_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/rst_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/rst_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/rst_timing.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_bank1) - name: Run test ROM (mooneye-test-suite MBC1/bits_bank1)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_bank1.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_bank1.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank1.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_bank1.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_bank2) - name: Run test ROM (mooneye-test-suite MBC1/bits_bank2)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_bank2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_bank2.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_bank2.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_mode) - name: Run test ROM (mooneye-test-suite MBC1/bits_mode)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_mode.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_mode.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_mode.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_mode.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_ramg) - name: Run test ROM (mooneye-test-suite MBC1/bits_ramg)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_ramg.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_ramg.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_ramg.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_ramg.bin
- name: Run test ROM (mooneye-test-suite MBC1/multicart_rom_8Mb) - name: Run test ROM (mooneye-test-suite MBC1/multicart_rom_8Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/multicart_rom_8Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/multicart_rom_8Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/multicart_rom_8Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/multicart_rom_8Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/ram_256kb) - name: Run test ROM (mooneye-test-suite MBC1/ram_256kb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/ram_256kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/ram_256kb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/ram_256kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/ram_256kb.bin
- name: Run test ROM (mooneye-test-suite MBC1/ram_64kb) - name: Run test ROM (mooneye-test-suite MBC1/ram_64kb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/ram_64kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/ram_64kb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/ram_64kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/ram_64kb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_16Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_16Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_16Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_16Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_16Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_16Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_1Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_1Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_1Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_1Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_1Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_1Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_2Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_2Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_2Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_2Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_2Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_2Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_4Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_4Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_4Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_4Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_4Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_4Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_512kb) - name: Run test ROM (mooneye-test-suite MBC1/rom_512kb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_512kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_512kb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_512kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_512kb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_8Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_8Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_8Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_8Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_8Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_8Mb.bin
- name: Run test ROM (mooneye-test-suite bits/mem_oam) - name: Run test ROM (mooneye-test-suite bits/mem_oam)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/mem_oam.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/mem_oam.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/mem_oam.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/mem_oam.bin
- name: Run test ROM (mooneye-test-suite bits/reg_f) - name: Run test ROM (mooneye-test-suite bits/reg_f)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/reg_f.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/reg_f.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/reg_f.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/reg_f.bin
- name: Run test ROM (mooneye-test-suite bits/unused_hwio-GS) - name: Run test ROM (mooneye-test-suite bits/unused_hwio-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/unused_hwio-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/unused_hwio-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/unused_hwio-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/unused_hwio-GS.bin
- name: Run test ROM (mooneye-test-suite instr/daa) - name: Run test ROM (mooneye-test-suite instr/daa)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/instr/daa.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/instr/daa.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/instr/daa.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/instr/daa.bin
- name: Run test ROM (mooneye-test-suite oam_dma/basic) - name: Run test ROM (mooneye-test-suite oam_dma/basic)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma/basic.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma/basic.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma/basic.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma/basic.bin
- name: Run test ROM (mooneye-test-suite oam_dma/reg_read) - name: Run test ROM (mooneye-test-suite oam_dma/reg_read)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma/reg_read.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma/reg_read.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma/reg_read.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma/reg_read.bin
- name: Run test ROM (mooneye-test-suite ppu/intr_1_2_timing-GS) - name: Run test ROM (mooneye-test-suite ppu/intr_1_2_timing-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/intr_1_2_timing-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/intr_1_2_timing-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/intr_1_2_timing-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/intr_1_2_timing-GS.bin
- name: Run test ROM (mooneye-test-suite ppu/intr_2_0_timing) - name: Run test ROM (mooneye-test-suite ppu/intr_2_0_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/intr_2_0_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/intr_2_0_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/intr_2_0_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/intr_2_0_timing.bin
- name: Run test ROM (mooneye-test-suite ppu/stat_irq_blocking) - name: Run test ROM (mooneye-test-suite ppu/stat_irq_blocking)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/stat_irq_blocking.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/stat_irq_blocking.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/stat_irq_blocking.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/stat_irq_blocking.bin
- name: Run test ROM (mooneye-test-suite ppu/stat_lyc_onoff) - name: Run test ROM (mooneye-test-suite ppu/stat_lyc_onoff)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/stat_lyc_onoff.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/stat_lyc_onoff.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/stat_lyc_onoff.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/stat_lyc_onoff.bin
- name: Run test ROM (mooneye-test-suite ppu/vblank_stat_intr-GS) - name: Run test ROM (mooneye-test-suite ppu/vblank_stat_intr-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/vblank_stat_intr-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/vblank_stat_intr-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/vblank_stat_intr-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/vblank_stat_intr-GS.bin
- name: Run test ROM (mooneye-test-suite timer/div_write) - name: Run test ROM (mooneye-test-suite timer/div_write)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/div_write.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/div_write.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/div_write.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/div_write.bin
- name: Run test ROM (mooneye-test-suite timer/rapid_toggle) - name: Run test ROM (mooneye-test-suite timer/rapid_toggle)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/rapid_toggle.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/rapid_toggle.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/rapid_toggle.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/rapid_toggle.bin
- name: Run test ROM (mooneye-test-suite timer/tim00) - name: Run test ROM (mooneye-test-suite timer/tim00)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim00.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim00.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim00.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim00.bin
- name: Run test ROM (mooneye-test-suite timer/tim00_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim00_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim00_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim00_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim00_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim00_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tim01) - name: Run test ROM (mooneye-test-suite timer/tim01)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim01.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim01.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim01.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim01.bin
- name: Run test ROM (mooneye-test-suite timer/tim01_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim01_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim01_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim01_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim01_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim01_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tim10) - name: Run test ROM (mooneye-test-suite timer/tim10)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim10.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim10.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim10.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim10.bin
- name: Run test ROM (mooneye-test-suite timer/tim10_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim10_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim10_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim10_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim10_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim10_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tim11) - name: Run test ROM (mooneye-test-suite timer/tim11)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim11.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim11.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim11.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim11.bin
- name: Run test ROM (mooneye-test-suite timer/tim11_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim11_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim11_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim11_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim11_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim11_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tima_reload) - name: Run test ROM (mooneye-test-suite timer/tima_reload)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tima_reload.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tima_reload.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tima_reload.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tima_reload.bin
- name: Run test ROM (mooneye-test-suite timer/tima_write_reloading) - name: Run test ROM (mooneye-test-suite timer/tima_write_reloading)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tima_write_reloading.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tima_write_reloading.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tima_write_reloading.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tima_write_reloading.bin
- name: Run test ROM (mooneye-test-suite timer/tma_write_reloading) - name: Run test ROM (mooneye-test-suite timer/tma_write_reloading)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tma_write_reloading.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tma_write_reloading.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tma_write_reloading.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tma_write_reloading.bin
- name: Run test ROM (hacktix bully)
if: always()
run: ./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/bully.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/bully.bin
- name: Run test ROM (hacktix strikethrough)
if: always()
run: ./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/strikethrough.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/strikethrough.bin

View file

@ -20,284 +20,292 @@ jobs:
- name: Run test ROM (blargg cpu_instrs) - name: Run test ROM (blargg cpu_instrs)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/blargg/roms/cpu_instrs.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/cpu_instrs.bin run: ./target/release/meowgb-tests test-roms/blargg/serial-roms/cpu_instrs.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/cpu_instrs.bin
- name: Run test ROM (blargg instr_timing) - name: Run test ROM (blargg instr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/blargg/roms/instr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/instr_timing.bin run: ./target/release/meowgb-tests test-roms/blargg/serial-roms/instr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/instr_timing.bin
- name: Run test ROM (blargg mem_timing) - name: Run test ROM (blargg mem_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/blargg/roms/mem_timing.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/mem_timing.bin run: ./target/release/meowgb-tests test-roms/blargg/serial-roms/mem_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/mem_timing.bin
- name: Run test ROM (mooneye-test-suite add_sp_e_timing) - name: Run test ROM (mooneye-test-suite add_sp_e_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/add_sp_e_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/add_sp_e_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/add_sp_e_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/add_sp_e_timing.bin
- name: Run test ROM (mooneye-test-suite boot_hwio-dmgABCmgb) - name: Run test ROM (mooneye-test-suite boot_hwio-dmgABCmgb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/boot_hwio-dmgABCmgb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/boot_hwio-dmgABCmgb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/boot_hwio-dmgABCmgb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/boot_hwio-dmgABCmgb.bin
- name: Run test ROM (mooneye-test-suite boot_regs-dmgABC) - name: Run test ROM (mooneye-test-suite boot_regs-dmgABC)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/boot_regs-dmgABC.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/boot_regs-dmgABC.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/boot_regs-dmgABC.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/boot_regs-dmgABC.bin
- name: Run test ROM (mooneye-test-suite call_cc_timing) - name: Run test ROM (mooneye-test-suite call_cc_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_cc_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_cc_timing.bin
- name: Run test ROM (mooneye-test-suite call_cc_timing2) - name: Run test ROM (mooneye-test-suite call_cc_timing2)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_cc_timing2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_cc_timing2.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_cc_timing2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_cc_timing2.bin
- name: Run test ROM (mooneye-test-suite call_timing) - name: Run test ROM (mooneye-test-suite call_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_timing.bin
- name: Run test ROM (mooneye-test-suite call_timing2) - name: Run test ROM (mooneye-test-suite call_timing2)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_timing2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_timing2.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_timing2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_timing2.bin
- name: Run test ROM (mooneye-test-suite di_timing-GS) - name: Run test ROM (mooneye-test-suite di_timing-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/di_timing-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/di_timing-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/di_timing-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/di_timing-GS.bin
- name: Run test ROM (mooneye-test-suite div_timing) - name: Run test ROM (mooneye-test-suite div_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/div_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/div_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/div_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/div_timing.bin
- name: Run test ROM (mooneye-test-suite ei_sequence) - name: Run test ROM (mooneye-test-suite ei_sequence)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ei_sequence.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ei_sequence.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ei_sequence.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ei_sequence.bin
- name: Run test ROM (mooneye-test-suite ei_timing) - name: Run test ROM (mooneye-test-suite ei_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ei_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ei_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ei_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ei_timing.bin
- name: Run test ROM (mooneye-test-suite halt_ime0_ei) - name: Run test ROM (mooneye-test-suite halt_ime0_ei)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime0_ei.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime0_ei.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime0_ei.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime0_ei.bin
- name: Run test ROM (mooneye-test-suite halt_ime0_nointr_timing) - name: Run test ROM (mooneye-test-suite halt_ime0_nointr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime0_nointr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime0_nointr_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime0_nointr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime0_nointr_timing.bin
- name: Run test ROM (mooneye-test-suite halt_ime1_timing) - name: Run test ROM (mooneye-test-suite halt_ime1_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime1_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime1_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime1_timing.bin
- name: Run test ROM (mooneye-test-suite halt_ime1_timing2-GS) - name: Run test ROM (mooneye-test-suite halt_ime1_timing2-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime1_timing2-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime1_timing2-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing2-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime1_timing2-GS.bin
- name: Run test ROM (mooneye-test-suite if_ie_registers) - name: Run test ROM (mooneye-test-suite if_ie_registers)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/if_ie_registers.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/if_ie_registers.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/if_ie_registers.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/if_ie_registers.bin
- name: Run test ROM (mooneye-test-suite intr_timing) - name: Run test ROM (mooneye-test-suite intr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/intr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/intr_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/intr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/intr_timing.bin
- name: Run test ROM (mooneye-test-suite jp_cc_timing) - name: Run test ROM (mooneye-test-suite jp_cc_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/jp_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/jp_cc_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/jp_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/jp_cc_timing.bin
- name: Run test ROM (mooneye-test-suite jp_timing) - name: Run test ROM (mooneye-test-suite jp_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/jp_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/jp_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/jp_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/jp_timing.bin
- name: Run test ROM (mooneye-test-suite ld_hl_sp_e_timing) - name: Run test ROM (mooneye-test-suite ld_hl_sp_e_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ld_hl_sp_e_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ld_hl_sp_e_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ld_hl_sp_e_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ld_hl_sp_e_timing.bin
- name: Run test ROM (mooneye-test-suite oam_dma_restart) - name: Run test ROM (mooneye-test-suite oam_dma_restart)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_restart.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_restart.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_restart.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_restart.bin
- name: Run test ROM (mooneye-test-suite oam_dma_start) - name: Run test ROM (mooneye-test-suite oam_dma_start)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_start.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_start.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_start.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_start.bin
- name: Run test ROM (mooneye-test-suite oam_dma_timing) - name: Run test ROM (mooneye-test-suite oam_dma_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_timing.bin
- name: Run test ROM (mooneye-test-suite pop_timing) - name: Run test ROM (mooneye-test-suite pop_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/pop_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/pop_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/pop_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/pop_timing.bin
- name: Run test ROM (mooneye-test-suite push_timing) - name: Run test ROM (mooneye-test-suite push_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/push_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/push_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/push_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/push_timing.bin
- name: Run test ROM (mooneye-test-suite rapid_di_ei) - name: Run test ROM (mooneye-test-suite rapid_di_ei)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/rapid_di_ei.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/rapid_di_ei.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/rapid_di_ei.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/rapid_di_ei.bin
- name: Run test ROM (mooneye-test-suite ret_cc_timing) - name: Run test ROM (mooneye-test-suite ret_cc_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ret_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ret_cc_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ret_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ret_cc_timing.bin
- name: Run test ROM (mooneye-test-suite ret_timing) - name: Run test ROM (mooneye-test-suite ret_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ret_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ret_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ret_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ret_timing.bin
- name: Run test ROM (mooneye-test-suite reti_intr_timing) - name: Run test ROM (mooneye-test-suite reti_intr_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/reti_intr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/reti_intr_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/reti_intr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/reti_intr_timing.bin
- name: Run test ROM (mooneye-test-suite reti_timing) - name: Run test ROM (mooneye-test-suite reti_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/reti_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/reti_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/reti_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/reti_timing.bin
- name: Run test ROM (mooneye-test-suite rst_timing) - name: Run test ROM (mooneye-test-suite rst_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/rst_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/rst_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/rst_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/rst_timing.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_bank1) - name: Run test ROM (mooneye-test-suite MBC1/bits_bank1)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_bank1.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_bank1.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank1.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_bank1.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_bank2) - name: Run test ROM (mooneye-test-suite MBC1/bits_bank2)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_bank2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_bank2.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_bank2.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_mode) - name: Run test ROM (mooneye-test-suite MBC1/bits_mode)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_mode.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_mode.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_mode.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_mode.bin
- name: Run test ROM (mooneye-test-suite MBC1/bits_ramg) - name: Run test ROM (mooneye-test-suite MBC1/bits_ramg)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_ramg.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_ramg.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_ramg.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_ramg.bin
- name: Run test ROM (mooneye-test-suite MBC1/multicart_rom_8Mb) - name: Run test ROM (mooneye-test-suite MBC1/multicart_rom_8Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/multicart_rom_8Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/multicart_rom_8Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/multicart_rom_8Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/multicart_rom_8Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/ram_256kb) - name: Run test ROM (mooneye-test-suite MBC1/ram_256kb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/ram_256kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/ram_256kb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/ram_256kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/ram_256kb.bin
- name: Run test ROM (mooneye-test-suite MBC1/ram_64kb) - name: Run test ROM (mooneye-test-suite MBC1/ram_64kb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/ram_64kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/ram_64kb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/ram_64kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/ram_64kb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_16Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_16Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_16Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_16Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_16Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_16Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_1Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_1Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_1Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_1Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_1Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_1Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_2Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_2Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_2Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_2Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_2Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_2Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_4Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_4Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_4Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_4Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_4Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_4Mb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_512kb) - name: Run test ROM (mooneye-test-suite MBC1/rom_512kb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_512kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_512kb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_512kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_512kb.bin
- name: Run test ROM (mooneye-test-suite MBC1/rom_8Mb) - name: Run test ROM (mooneye-test-suite MBC1/rom_8Mb)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_8Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_8Mb.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_8Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_8Mb.bin
- name: Run test ROM (mooneye-test-suite bits/mem_oam) - name: Run test ROM (mooneye-test-suite bits/mem_oam)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/mem_oam.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/mem_oam.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/mem_oam.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/mem_oam.bin
- name: Run test ROM (mooneye-test-suite bits/reg_f) - name: Run test ROM (mooneye-test-suite bits/reg_f)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/reg_f.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/reg_f.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/reg_f.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/reg_f.bin
- name: Run test ROM (mooneye-test-suite bits/unused_hwio-GS) - name: Run test ROM (mooneye-test-suite bits/unused_hwio-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/unused_hwio-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/unused_hwio-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/unused_hwio-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/unused_hwio-GS.bin
- name: Run test ROM (mooneye-test-suite instr/daa) - name: Run test ROM (mooneye-test-suite instr/daa)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/instr/daa.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/instr/daa.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/instr/daa.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/instr/daa.bin
- name: Run test ROM (mooneye-test-suite oam_dma/basic) - name: Run test ROM (mooneye-test-suite oam_dma/basic)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma/basic.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma/basic.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma/basic.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma/basic.bin
- name: Run test ROM (mooneye-test-suite oam_dma/reg_read) - name: Run test ROM (mooneye-test-suite oam_dma/reg_read)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma/reg_read.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma/reg_read.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma/reg_read.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma/reg_read.bin
- name: Run test ROM (mooneye-test-suite ppu/intr_1_2_timing-GS) - name: Run test ROM (mooneye-test-suite ppu/intr_1_2_timing-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/intr_1_2_timing-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/intr_1_2_timing-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/intr_1_2_timing-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/intr_1_2_timing-GS.bin
- name: Run test ROM (mooneye-test-suite ppu/intr_2_0_timing) - name: Run test ROM (mooneye-test-suite ppu/intr_2_0_timing)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/intr_2_0_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/intr_2_0_timing.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/intr_2_0_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/intr_2_0_timing.bin
- name: Run test ROM (mooneye-test-suite ppu/stat_irq_blocking) - name: Run test ROM (mooneye-test-suite ppu/stat_irq_blocking)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/stat_irq_blocking.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/stat_irq_blocking.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/stat_irq_blocking.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/stat_irq_blocking.bin
- name: Run test ROM (mooneye-test-suite ppu/stat_lyc_onoff) - name: Run test ROM (mooneye-test-suite ppu/stat_lyc_onoff)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/stat_lyc_onoff.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/stat_lyc_onoff.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/stat_lyc_onoff.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/stat_lyc_onoff.bin
- name: Run test ROM (mooneye-test-suite ppu/vblank_stat_intr-GS) - name: Run test ROM (mooneye-test-suite ppu/vblank_stat_intr-GS)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/vblank_stat_intr-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/vblank_stat_intr-GS.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/vblank_stat_intr-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/vblank_stat_intr-GS.bin
- name: Run test ROM (mooneye-test-suite timer/div_write) - name: Run test ROM (mooneye-test-suite timer/div_write)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/div_write.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/div_write.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/div_write.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/div_write.bin
- name: Run test ROM (mooneye-test-suite timer/rapid_toggle) - name: Run test ROM (mooneye-test-suite timer/rapid_toggle)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/rapid_toggle.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/rapid_toggle.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/rapid_toggle.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/rapid_toggle.bin
- name: Run test ROM (mooneye-test-suite timer/tim00) - name: Run test ROM (mooneye-test-suite timer/tim00)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim00.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim00.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim00.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim00.bin
- name: Run test ROM (mooneye-test-suite timer/tim00_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim00_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim00_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim00_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim00_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim00_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tim01) - name: Run test ROM (mooneye-test-suite timer/tim01)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim01.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim01.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim01.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim01.bin
- name: Run test ROM (mooneye-test-suite timer/tim01_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim01_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim01_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim01_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim01_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim01_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tim10) - name: Run test ROM (mooneye-test-suite timer/tim10)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim10.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim10.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim10.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim10.bin
- name: Run test ROM (mooneye-test-suite timer/tim10_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim10_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim10_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim10_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim10_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim10_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tim11) - name: Run test ROM (mooneye-test-suite timer/tim11)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim11.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim11.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim11.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim11.bin
- name: Run test ROM (mooneye-test-suite timer/tim11_div_trigger) - name: Run test ROM (mooneye-test-suite timer/tim11_div_trigger)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim11_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim11_div_trigger.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim11_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim11_div_trigger.bin
- name: Run test ROM (mooneye-test-suite timer/tima_reload) - name: Run test ROM (mooneye-test-suite timer/tima_reload)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tima_reload.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tima_reload.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tima_reload.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tima_reload.bin
- name: Run test ROM (mooneye-test-suite timer/tima_write_reloading) - name: Run test ROM (mooneye-test-suite timer/tima_write_reloading)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tima_write_reloading.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tima_write_reloading.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tima_write_reloading.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tima_write_reloading.bin
- name: Run test ROM (mooneye-test-suite timer/tma_write_reloading) - name: Run test ROM (mooneye-test-suite timer/tma_write_reloading)
if: always() if: always()
run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tma_write_reloading.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tma_write_reloading.bin run: ./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tma_write_reloading.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tma_write_reloading.bin
- name: Run test ROM (hacktix bully)
if: always()
run: ./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/bully.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/bully.bin
- name: Run test ROM (hacktix strikethrough)
if: always()
run: ./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/strikethrough.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/strikethrough.bin

66
Cargo.lock generated
View file

@ -222,15 +222,6 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
[[package]]
name = "block-buffer"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
[[package]] [[package]]
name = "block-sys" name = "block-sys"
version = "0.1.0-beta.1" version = "0.1.0-beta.1"
@ -451,15 +442,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "cpufeatures"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "crc32fast" name = "crc32fast"
version = "1.3.2" version = "1.3.2"
@ -469,16 +451,6 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
]
[[package]] [[package]]
name = "d3d12" name = "d3d12"
version = "0.6.0" version = "0.6.0"
@ -534,16 +506,6 @@ dependencies = [
"powerfmt", "powerfmt",
] ]
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
]
[[package]] [[package]]
name = "dispatch" name = "dispatch"
version = "0.2.0" version = "0.2.0"
@ -728,16 +690,6 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
]
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.28.1" version = "0.28.1"
@ -1110,7 +1062,6 @@ dependencies = [
"log", "log",
"meowgb-opcode", "meowgb-opcode",
"paste", "paste",
"sha1",
"thiserror", "thiserror",
] ]
@ -1654,17 +1605,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "sha1"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]] [[package]]
name = "simd-adler32" name = "simd-adler32"
version = "0.3.7" version = "0.3.7"
@ -1902,12 +1842,6 @@ dependencies = [
"rustc-hash", "rustc-hash",
] ]
[[package]]
name = "typenum"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]] [[package]]
name = "ultraviolet" name = "ultraviolet"
version = "0.9.2" version = "0.9.2"

View file

@ -50,10 +50,10 @@ cat >>$TEST_MD_FILE << EOF
EOF EOF
for full_f in ./test-roms/blargg/roms/*.gb for full_f in ./test-roms/blargg/serial-roms/*.gb
do do
f="${full_f##*/}"; f="${f%.*}"; f="${full_f##*/}"; f="${f%.*}";
TEST_CMD="./target/release/meowgb-tests test-roms/blargg/roms/$f.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/$f.bin" TEST_CMD="./target/release/meowgb-tests test-roms/blargg/serial-roms/$f.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/$f.bin"
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
@ -69,7 +69,7 @@ fi
EOF EOF
cat >>$TEST_MD_FILE << EOF cat >>$TEST_MD_FILE << EOF
* $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/blargg/$f.bin) * $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/serial/blargg/$f.bin)
EOF EOF
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
@ -86,10 +86,10 @@ cat >>$TEST_MD_FILE << EOF
EOF EOF
for full_f in ./test-roms/mooneye-test-suite/roms/*.gb for full_f in ./test-roms/mooneye-test-suite/serial-roms/*.gb
do do
f="${full_f##*/}"; f="${f%.*}"; f="${full_f##*/}"; f="${f%.*}";
TEST_CMD="./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/$f.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/$f.bin" TEST_CMD="./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/$f.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/$f.bin"
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
@ -105,7 +105,7 @@ fi
EOF EOF
cat >>$TEST_MD_FILE << EOF cat >>$TEST_MD_FILE << EOF
* $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/mooneye-test-suite/$f.bin) * $f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/serial/mooneye-test-suite/$f.bin)
EOF EOF
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
@ -116,7 +116,7 @@ EOF
EOF EOF
done done
for directory in ./test-roms/mooneye-test-suite/roms/*/ for directory in ./test-roms/mooneye-test-suite/serial-roms/*/
do do
d=$(basename $directory) d=$(basename $directory)
@ -126,10 +126,10 @@ do
EOF EOF
for full_f in ./test-roms/mooneye-test-suite/roms/$d/*.gb for full_f in ./test-roms/mooneye-test-suite/serial-roms/$d/*.gb
do do
f="${full_f##*/}"; f="${f%.*}"; f="${full_f##*/}"; f="${f%.*}";
TEST_CMD="./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/$d/$f.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/$d/$f.bin" TEST_CMD="./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/$d/$f.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/$d/$f.bin"
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
@ -145,7 +145,7 @@ fi
EOF EOF
cat >>$TEST_MD_FILE << EOF cat >>$TEST_MD_FILE << EOF
* $d/$f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/mooneye-test-suite/$d/$f.bin) * $d/$f.gb - [ROM]($full_f) - [Expected Serial Output](./meowgb-tests/expected_output/serial/mooneye-test-suite/$d/$f.bin)
EOF EOF
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
@ -158,6 +158,42 @@ EOF
done done
cat >>$TEST_MD_FILE << EOF
## Hacktix Test ROMs
EOF
for full_f in ./test-roms/hacktix/framebuffer-roms/*.gb
do
f="${full_f##*/}"; f="${f%.*}";
TEST_CMD="./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/$f.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/$f.bin"
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
echo "Running test ROM $full_f"
TEST_TOTAL=\$((TEST_TOTAL + 1))
if res=\$($TEST_CMD 2>&1 > /dev/null) ; then
TEST_SUCCESS=\$((TEST_SUCCESS + 1))
else
echo "Failed: \$res"
fi
EOF
cat >>$TEST_MD_FILE << EOF
* $f.gb - [ROM]($full_f) - [Expected Framebuffer (RGBA32)](./meowgb-tests/expected_output/framebuffer/hacktix/$f.bin)
EOF
tee -a $GH_ACTION_OUTPUT_FILE $FJ_ACTION_OUTPUT_FILE >/dev/null << EOF
- name: Run test ROM (hacktix $f)
if: always()
run: $TEST_CMD
EOF
done
cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF cat >>$TEST_SCRIPT_OUTPUT_FILE << EOF
echo "Succeeded in running \$TEST_SUCCESS/\$TEST_TOTAL" echo "Succeeded in running \$TEST_SUCCESS/\$TEST_TOTAL"

View file

@ -12,5 +12,4 @@ log = "0.4.14"
paste = "1.0.6" paste = "1.0.6"
meowgb-opcode = { path = "../meowgb-opcode" } meowgb-opcode = { path = "../meowgb-opcode" }
bmp = "0.5.0" bmp = "0.5.0"
thiserror = "1.0.30" thiserror = "1.0.30"
sha1 = { version = "0.10.6", features = ["std"] }

View file

@ -1,4 +1,3 @@
pub mod bootrom;
pub mod cpu; pub mod cpu;
pub mod dma; pub mod dma;
pub mod interrupts; pub mod interrupts;
@ -27,10 +26,12 @@ use self::{
#[cfg(feature = "instr-dbg")] #[cfg(feature = "instr-dbg")]
use crate::ringbuffer::RingBuffer; use crate::ringbuffer::RingBuffer;
pub type GenericCartridge = dyn Mapper + Send + Sync;
pub struct Gameboy<S: SerialWriter> { pub struct Gameboy<S: SerialWriter> {
pub ppu: Ppu, pub ppu: Ppu,
pub memory: Memory, pub memory: Memory,
pub cartridge: Option<Box<dyn Mapper + Send + Sync>>, pub cartridge: Option<Box<GenericCartridge>>,
pub interrupts: Interrupts, pub interrupts: Interrupts,
pub timer: Timer, pub timer: Timer,
pub registers: Registers, pub registers: Registers,
@ -54,20 +55,21 @@ pub struct Gameboy<S: SerialWriter> {
} }
impl<S: SerialWriter> Gameboy<S> { impl<S: SerialWriter> Gameboy<S> {
pub fn new(bootrom: Option<[u8; 0x100]>, serial_writer: S) -> Self { pub fn new(serial_writer: S, rom: Option<Vec<u8>>) -> Self {
Self { Self::new_with_cartridge(serial_writer, rom.map(Self::parse_rom))
memory: Memory::new(bootrom), }
cartridge: None,
pub fn new_with_cartridge(serial_writer: S, cartridge: Option<Box<GenericCartridge>>) -> Self {
let mut out = Self {
memory: Memory::new(),
cartridge,
interrupts: Interrupts::new(), interrupts: Interrupts::new(),
timer: Timer::new(), timer: Timer::new(),
joypad: Joypad::new(), joypad: Joypad::new(),
serial: Serial::new(serial_writer), serial: Serial::new(serial_writer),
dma: DmaState::new(), dma: DmaState::new(),
ppu: Ppu::new(bootrom.is_some()), ppu: Ppu::new(),
registers: match bootrom.is_some() { registers: Registers::default(),
true => Registers::default(),
false => Registers::post_rom(),
},
sound: Sound::new(), sound: Sound::new(),
halt: false, halt: false,
halt_bug: false, halt_bug: false,
@ -78,18 +80,166 @@ impl<S: SerialWriter> Gameboy<S> {
last_write: None, last_write: None,
#[cfg(feature = "instr-dbg")] #[cfg(feature = "instr-dbg")]
pc_history: RingBuffer::new(), pc_history: RingBuffer::new(),
};
out.run_bootrom();
out.registers.set_post_rom();
out
}
pub fn run_bootrom(&mut self) {
macro_rules! push8 {
($byte:expr) => {
self.registers.sp = self.registers.sp.overflowing_sub(1).0;
self.debug_write_u8(self.registers.sp, $byte);
};
}
macro_rules! push16 {
($byte:expr) => {
push8!(($byte >> 8) as u8);
push8!($byte as u8);
};
}
macro_rules! pop8 {
() => {
{
let res = self.debug_read_u8(self.registers.sp);
self.registers.sp = self.registers.sp.overflowing_add(1).0;
res
}
};
}
macro_rules! pop16 {
() => {
(pop8!() as u16) | ((pop8!() as u16) << 8)
};
}
macro_rules! rl {
($reg:ident) => {
{
let new_carry = self.registers.$reg >> 7 == 1;
self.registers.$reg <<= 1;
if self.registers.get_carry() {
self.registers.$reg |= 1;
}
self.registers.set_carry(new_carry);
}
};
}
self.registers.sp = 0xFFFE;
// Clear VRAM
self.registers.a = 0;
let mut address = 0x9FFF;
while address >= 0x8000 {
self.debug_write_u8(address, 0);
address -= 1;
}
// // Configure Audio
// self.registers.set_hl(0xFF26);
// self.registers.c = 0x11;
// self.registers.a = 0x80;
// let hl_content = self.registers.get_hl();
// self.debug_write_u8(hl_content, self.registers.a);
// self.registers.set_hl(hl_content - 1);
// self.debug_write_u8(0xFF00 | self.registers.c as u16, self.registers.a);
// self.registers.c += 1;
// self.registers.a = 0xF3;
// self.debug_write_u8(0xFF00 | self.registers.c as u16, self.registers.a);
// let hl_content = self.registers.get_hl();
// self.debug_write_u8(hl_content, self.registers.a);
// self.registers.set_hl(hl_content - 1);
// self.registers.a = 0x77;
// self.debug_write_u8(hl_content, self.registers.a);
// Configure Background Palette
self.registers.a = 0xFC;
self.debug_write_u8(0xFF47, self.registers.a);
// Load logo data from cartridge into VRAM
self.registers.set_de(0x0104);
self.registers.set_hl(0x8010);
loop {
self.registers.a = self.debug_read_u8(self.registers.get_de());
self.registers.c = self.registers.a;
for _ in 0..2 {
self.registers.b = 4;
while self.registers.b != 0 {
push16!(self.registers.get_bc());
rl!(c);
rl!(a);
let bc = pop16!();
self.registers.set_bc(bc);
rl!(c);
rl!(a);
self.registers.b -= 1;
}
self.debug_write_u8(self.registers.get_hl(), self.registers.a);
self.registers.set_hl(self.registers.get_hl() + 2);
self.debug_write_u8(self.registers.get_hl(), self.registers.a);
self.registers.set_hl(self.registers.get_hl() + 2);
}
self.registers.set_de(self.registers.get_de() + 1);
self.registers.a = self.registers.e;
assert!(self.registers.a <= 0x34);
if self.registers.a == 0x34 {
break;
}
}
// Extra 8 bytes into VRAM from BROM
const EXTRA_VRAM_DATA: [u8; 8] = [0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0x42, 0x3C];
for value in EXTRA_VRAM_DATA {
self.registers.a = value;
self.debug_write_u8(self.registers.get_hl(), self.registers.a);
self.registers.set_hl(self.registers.get_hl() + 2);
}
self.registers.set_de(0xE0);
self.registers.b = 0;
// BG Tilemap
self.registers.a = 0x19;
self.debug_write_u8(0x9910, self.registers.a);
self.registers.set_hl(0x992F);
'outer: loop {
self.registers.c = 0xc;
while self.registers.c != 0 {
self.registers.a -= 1;
if self.registers.a == 0 {
break 'outer;
}
self.debug_write_u8(self.registers.get_hl(), self.registers.a);
self.registers.set_hl(self.registers.get_hl() - 1);
self.registers.c -= 1;
}
self.registers.l = 0xf;
} }
} }
pub fn load_cartridge(&mut self, bytes: Vec<u8>) { fn parse_rom(bytes: Vec<u8>) -> Box<GenericCartridge> {
if bytes.len() < 0x150 { if bytes.len() < 0x150 {
panic!("Bad cartridge (len < 0x150)"); panic!("Bad cartridge (len < 0x150)");
} }
match bytes[0x147] { match bytes[0x147] {
0 => self.cartridge = Some(Box::new(NoMBC::new(bytes))), 0 => Box::new(NoMBC::new(bytes)),
1 => self.cartridge = Some(Box::new(MBC1::new(bytes))), 1 => Box::new(MBC1::new(bytes)),
2 => self.cartridge = Some(Box::new(MBC1::new(bytes))), 2 => Box::new(MBC1::new(bytes)),
3 => self.cartridge = Some(Box::new(MBC1::new(bytes))), 3 => Box::new(MBC1::new(bytes)),
other => unimplemented!("Cartidge type: {:#X}", other), other => unimplemented!("Cartidge type: {:#X}", other),
} }
} }
@ -105,9 +255,9 @@ impl<S: SerialWriter> Gameboy<S> {
pub fn tick(&mut self) -> bool { pub fn tick(&mut self) -> bool {
if self.tick_count == 0 { if self.tick_count == 0 {
self.dma.tick_dma(&mut self.ppu, &self.memory, self.cartridge.as_deref());
cpu::tick_cpu(self); cpu::tick_cpu(self);
let redraw_requested = self.ppu.tick(&self.dma, &mut self.interrupts); let redraw_requested = self.ppu.tick(&self.dma, &mut self.interrupts);
self.dma.tick_dma(&mut self.ppu, &self.memory, self.cartridge.as_deref());
self.serial.tick(&mut self.interrupts); self.serial.tick(&mut self.interrupts);
self.timer.tick(&mut self.interrupts); self.timer.tick(&mut self.interrupts);
@ -244,11 +394,7 @@ impl<S: SerialWriter> Gameboy<S> {
0xFF4B => self.ppu.registers.wx = value, 0xFF4B => self.ppu.registers.wx = value,
0xFF4C..=0xFF4E => {} // Unused 0xFF4C..=0xFF4E => {} // Unused
0xFF4F => {} // CGB VRAM Bank Select 0xFF4F => {} // CGB VRAM Bank Select
0xFF50 => { 0xFF50 => {} // BROM lockout
if value & 0b1 == 1 {
self.memory.bootrom_disabled = true;
}
}
0xFF51..=0xFF55 => {} // CGB VRAM DMA 0xFF51..=0xFF55 => {} // CGB VRAM DMA
0xFF56..=0xFF67 => {} // Unused 0xFF56..=0xFF67 => {} // Unused
0xFF68..=0xFF69 => {} // CGB BG/OBJ Palettes 0xFF68..=0xFF69 => {} // CGB BG/OBJ Palettes
@ -273,7 +419,6 @@ impl<S: SerialWriter> Gameboy<S> {
/// debugging/testing purposes /// debugging/testing purposes
pub fn debug_read_u8(&self, address: u16) -> u8 { pub fn debug_read_u8(&self, address: u16) -> u8 {
match address { match address {
0..=0xFF if !self.memory.bootrom_disabled => self.memory.bootrom[address as usize],
0..=0x7FFF => match self.cartridge.as_ref() { 0..=0x7FFF => match self.cartridge.as_ref() {
Some(mapper) => mapper.read_rom_u8(address), Some(mapper) => mapper.read_rom_u8(address),
None => 0xFF, None => 0xFF,
@ -298,7 +443,6 @@ impl<S: SerialWriter> Gameboy<S> {
#[allow(unused)] #[allow(unused)]
pub fn debug_write_u8(&mut self, address: u16, value: u8) { pub fn debug_write_u8(&mut self, address: u16, value: u8) {
match address { match address {
0..=0xFF if !self.memory.bootrom_disabled => {}
0..=0x7FFF => { 0..=0x7FFF => {
if let Some(mapper) = self.cartridge.as_mut() { if let Some(mapper) = self.cartridge.as_mut() {
mapper.write_rom_u8(address, value) mapper.write_rom_u8(address, value)
@ -330,13 +474,13 @@ impl<S: SerialWriter> Gameboy<S> {
self.registers.mem_op_happened = true; self.registers.mem_op_happened = true;
let value = match self.dma.is_conflict(address) { let value = match self.dma.is_conflict(address) {
true => match address { true => match address {
0..=0xFEFF => 0xFF, 0..=0xFDFF => self.dma.read_next_byte(&self.ppu, &self.memory, self.cartridge.as_deref()),
0xFE00..=0xFEFF => 0xFF,
0xFF00..=0xFF7F => self.cpu_read_io(address), 0xFF00..=0xFF7F => self.cpu_read_io(address),
0xFF80..=0xFFFE => self.memory.hram[address as usize - 0xFF80], 0xFF80..=0xFFFE => self.memory.hram[address as usize - 0xFF80],
0xFFFF => self.interrupts.interrupt_enable, 0xFFFF => self.interrupts.interrupt_enable,
}, },
false => match address { false => match address {
0..=0xFF if !self.memory.bootrom_disabled => self.memory.bootrom[address as usize],
0..=0x7FFF => match self.cartridge.as_ref() { 0..=0x7FFF => match self.cartridge.as_ref() {
Some(mapper) => mapper.read_rom_u8(address), Some(mapper) => mapper.read_rom_u8(address),
None => 0xFF, None => 0xFF,
@ -374,7 +518,6 @@ impl<S: SerialWriter> Gameboy<S> {
0xFFFF => self.interrupts.cpu_set_interrupt_enable(value), 0xFFFF => self.interrupts.cpu_set_interrupt_enable(value),
}, },
false => match address { false => match address {
0..=0xFF if !self.memory.bootrom_disabled => {}
0..=0x7FFF => { 0..=0x7FFF => {
if let Some(mapper) = self.cartridge.as_mut() { if let Some(mapper) = self.cartridge.as_mut() {
mapper.write_rom_u8(address, value) mapper.write_rom_u8(address, value)

View file

@ -1,48 +0,0 @@
use std::{io::Read, path::Path};
use sha1::{Digest, Sha1};
#[derive(Debug, thiserror::Error)]
pub enum BootromParseError {
#[error("Bootrom file cannot be found")]
BootromNotFound,
#[error("IO error whilst reading bootrom: {0}")]
Io(#[from] std::io::Error),
#[error("Bootrom size is {0} bytes, expected 256 bytes")]
InvalidSize(u64),
#[error("Bootrom has an invalid SHA1 (expected \"4ed31ec6b0b175bb109c0eb5fd3d193da823339f\")")]
InvalidHash,
#[error("Failed to open bootrom file: {0}")]
FileOpen(std::io::Error),
#[error("Failed to read bootrom file: {0}")]
FileRead(std::io::Error),
}
pub fn verify_parse_bootrom(path: &Path) -> Result<[u8; 0x100], BootromParseError> {
if !path.is_file() {
return Err(BootromParseError::BootromNotFound);
}
let mut bootrom_slice = [0u8; 0x100];
let mut file = std::fs::File::open(path).map_err(BootromParseError::FileOpen)?;
let metadata = file.metadata()?;
if metadata.len() != 256 {
return Err(BootromParseError::InvalidSize(metadata.len()));
}
file.read_exact(&mut bootrom_slice).map_err(BootromParseError::FileRead)?;
let mut hash_ctx = Sha1::new();
hash_ctx.update(&bootrom_slice);
let digest = hash_ctx.finalize();
if digest.as_slice()
!= b"\x4e\xd3\x1e\xc6\xb0\xb1\x75\xbb\x10\x9c\x0e\xb5\xfd\x3d\x19\x3d\xa8\x23\x33\x9f"
{
return Err(BootromParseError::InvalidHash);
}
Ok(bootrom_slice)
}

View file

@ -95,20 +95,17 @@ impl Registers {
define_register!(d, e); define_register!(d, e);
define_register!(h, l); define_register!(h, l);
pub fn post_rom() -> Self { pub fn set_post_rom(&mut self) {
Self { self.a = 0x01;
a: 0x01, self.f = 0xB0;
f: 0xB0, self.b = 0x00;
b: 0x00, self.c = 0x13;
c: 0x13, self.d = 0x00;
d: 0x00, self.e = 0xD8;
e: 0xD8, self.h = 0x01;
h: 0x01, self.l = 0x4D;
l: 0x4D, self.sp = 0xFFFE;
sp: 0xFFFE, self.pc = 0x0100;
pc: 0x0100,
..Default::default()
}
} }
/// This is just a helper function for macros utilizing ident pasting /// This is just a helper function for macros utilizing ident pasting

View file

@ -1,4 +1,4 @@
use super::{mapper::Mapper, memory::Memory, ppu::Ppu}; use super::{memory::Memory, ppu::Ppu, GenericCartridge};
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DmaMemoryBus { pub enum DmaMemoryBus {
@ -36,7 +36,7 @@ impl DmaMemoryBus {
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub struct DmaState { pub struct DmaState {
original_base: u8, original_base: u8,
pub dma_in_progress: bool, pub dma_in_progress: Option<u16>,
pub base: u8, pub base: u8,
pub remaining_cycles: u8, pub remaining_cycles: u8,
restarting: Option<(u8, bool)>, restarting: Option<(u8, bool)>,
@ -48,7 +48,7 @@ impl DmaState {
} }
pub fn in_progress(&self) -> Option<DmaMemoryBus> { pub fn in_progress(&self) -> Option<DmaMemoryBus> {
match self.dma_in_progress { match self.dma_in_progress.is_some() {
true => Some(DmaMemoryBus::from_base(self.original_base)), true => Some(DmaMemoryBus::from_base(self.original_base)),
false => None, false => None,
} }
@ -56,7 +56,7 @@ impl DmaState {
pub fn new() -> Self { pub fn new() -> Self {
Self { Self {
dma_in_progress: false, dma_in_progress: None,
original_base: 0, original_base: 0,
base: 0, base: 0,
remaining_cycles: 0, remaining_cycles: 0,
@ -69,11 +69,29 @@ impl DmaState {
self.restarting = Some((base, false)); self.restarting = Some((base, false));
} }
pub fn read_next_byte(&self, ppu: &Ppu, memory: &Memory, cartridge: Option<&GenericCartridge>) -> u8 {
let read_address = self.dma_in_progress.unwrap() as usize;
match self.original_base {
0..=0x7F => match cartridge {
Some(cart) => cart.read_rom_u8(read_address as u16),
None => 0xFF,
},
0x80..=0x9F => ppu.vram[read_address - 0x8000],
0xA0..=0xBF => match cartridge {
Some(mapper) => mapper.read_eram_u8(read_address as u16 - 0xA000),
None => 0xFF,
},
0xC0..=0xDF => memory.wram[read_address - 0xC000],
0xE0..=0xFD => memory.wram[read_address - 0xE000],
0xFE..=0xFF => 0xFF
}
}
pub fn tick_dma( pub fn tick_dma(
&mut self, &mut self,
ppu: &mut Ppu, ppu: &mut Ppu,
memory: &Memory, memory: &Memory,
cartridge: Option<&(dyn Mapper + Send + Sync)>, cartridge: Option<&GenericCartridge>,
) { ) {
match self.restarting { match self.restarting {
Some((base, false)) => self.restarting = Some((base, true)), Some((base, false)) => self.restarting = Some((base, true)),
@ -85,30 +103,15 @@ impl DmaState {
None => {} None => {}
} }
self.dma_in_progress = self.remaining_cycles > 0; // We do not clear this after running because the "in progress" should remain the entire cycle
self.dma_in_progress = match self.remaining_cycles > 0 {
true => Some(((self.original_base as u16) << 8) | (0xA0 - self.remaining_cycles) as u16),
false => None,
};
if self.remaining_cycles > 0 { if self.remaining_cycles > 0 {
let offset = 0xA0 - self.remaining_cycles; let value = self.read_next_byte(ppu, memory, cartridge);
let read_address = ((self.original_base as usize) << 8) | offset as usize; ppu.dma_write_oam(0xA0 - self.remaining_cycles, value);
let value = if self.original_base <= 0x7F {
match cartridge {
Some(cart) => cart.read_rom_u8(read_address as u16),
None => 0xFF,
}
} else if self.original_base <= 0x9F {
let address = read_address - 0x8000;
ppu.vram[address]
} else if self.original_base <= 0xDF {
let address = read_address - 0xC000;
memory.wram[address]
} else if self.original_base <= 0xFD {
let address = read_address - 0xE000;
memory.wram[address]
} else {
0xFF
};
ppu.dma_write_oam(offset, value);
self.remaining_cycles -= 1; self.remaining_cycles -= 1;
} }
} }

View file

@ -9,7 +9,7 @@ macro_rules! joypad_input {
($input:ident, $mode:ident) => { ($input:ident, $mode:ident) => {
paste::paste! { paste::paste! {
pub fn [<set_ $input>](&mut self, val: bool) { pub fn [<set_ $input>](&mut self, val: bool) {
if val && self.mode == JoypadMode::$mode { if val && (self.mode == JoypadMode::$mode || self.mode == JoypadMode::Both) {
self.interrupt_triggered = true; self.interrupt_triggered = true;
} }
self.$input = val; self.$input = val;
@ -17,7 +17,7 @@ macro_rules! joypad_input {
pub fn [<invert_ $input>](&mut self) { pub fn [<invert_ $input>](&mut self) {
let val = !self.$input; let val = !self.$input;
if val && self.mode == JoypadMode::$mode { if val && (self.mode == JoypadMode::$mode || self.mode == JoypadMode::Both) {
self.interrupt_triggered = true; self.interrupt_triggered = true;
} }
self.$input = val; self.$input = val;
@ -86,9 +86,9 @@ impl Joypad {
joypad_input!(right, Direction); joypad_input!(right, Direction);
pub fn cpu_write(&mut self, content: u8) { pub fn cpu_write(&mut self, content: u8) {
if (content >> 5) & 0b1 == 0 { if (content >> 5) & 0b1 == 0 && (content >> 4) & 0b1 == 1 {
self.mode = JoypadMode::Action; self.mode = JoypadMode::Action;
} else if (content >> 4) & 0b1 == 0 { } else if (content >> 4) & 0b1 == 0 && (content >> 5) & 0b1 == 1 {
self.mode = JoypadMode::Direction; self.mode = JoypadMode::Direction;
} else { } else {
self.mode = JoypadMode::Both; self.mode = JoypadMode::Both;

View file

@ -1,25 +1,17 @@
pub struct Memory { pub struct Memory {
pub wram: [u8; 0x2000], pub wram: [u8; 0x2000],
pub hram: [u8; 0xAF], pub hram: [u8; 0xAF],
pub bootrom_disabled: bool,
pub bootrom: [u8; 0x100],
} }
impl Memory { impl Memory {
pub fn new(bootrom: Option<[u8; 0x100]>) -> Self { pub fn new() -> Self {
Self { Self {
wram: [0; 0x2000], wram: [0; 0x2000],
hram: [0; 0xAF], hram: [0; 0xAF],
bootrom: bootrom.unwrap_or_else(|| [0u8; 0x100]),
bootrom_disabled: bootrom.is_none(),
} }
} }
pub fn get_bootrom_disabled(&self) -> u8 { pub fn get_bootrom_disabled(&self) -> u8 {
match self.bootrom_disabled { 0xFF
true => 0xFF,
false => 0x00,
}
} }
} }

View file

@ -273,7 +273,9 @@ pub struct PpuRegisters {
pub scx: u8, pub scx: u8,
pub ly: u8, pub ly: u8,
cycles_since_last_ly_increment: u64, cycles_since_last_ly_increment: u64,
cycles_since_stat_mode_0: u64,
cycles_since_last_last_mode_start_increment: [u64; 4], cycles_since_last_last_mode_start_increment: [u64; 4],
cycles_since_stat_mode_2: u64,
pub lyc: u8, pub lyc: u8,
pub wy: u8, pub wy: u8,
pub wx: u8, pub wx: u8,
@ -306,6 +308,7 @@ pub struct Ppu {
total_dots: u16, total_dots: u16,
is_irq_high: bool, is_irq_high: bool,
window_counter: usize,
} }
impl Ppu { impl Ppu {
@ -320,16 +323,17 @@ impl Ppu {
self.first_frame = true; self.first_frame = true;
self.first_line = true; self.first_line = true;
self.total_dots = 0; self.total_dots = 0;
self.window_counter = 0;
} }
pub fn start(&mut self, interrupts: &mut Interrupts) { pub fn start(&mut self, interrupts: &mut Interrupts) {
self.set_scanline(interrupts, 0); self.set_scanline(interrupts, 0);
} }
pub fn new(bootrom_ran: bool) -> Self { pub fn new() -> Self {
Self { Self {
registers: PpuRegisters { registers: PpuRegisters {
lcdc: (!bootrom_ran).then_some(0b1001_0001).unwrap_or_default(), lcdc: 0b1001_0001,
stat_flags: StatFlags::default(), stat_flags: StatFlags::default(),
mode: PPUMode::HBlank, mode: PPUMode::HBlank,
scy: 0, scy: 0,
@ -341,6 +345,8 @@ impl Ppu {
wy: 0, wy: 0,
wx: 0, wx: 0,
ly_lyc: true, ly_lyc: true,
cycles_since_stat_mode_0: 0,
cycles_since_stat_mode_2: 0,
}, },
vram: [0; 0x2000], vram: [0; 0x2000],
oam: [0; 0xA0], oam: [0; 0xA0],
@ -359,6 +365,7 @@ impl Ppu {
total_dots: 0, total_dots: 0,
first_line: true, first_line: true,
is_irq_high: false, is_irq_high: false,
window_counter: 0,
} }
} }
@ -383,6 +390,11 @@ impl Ppu {
self.is_irq_high = stat_int || ly_eq_lyc_int || vblank_causing_oam_int_bug; self.is_irq_high = stat_int || ly_eq_lyc_int || vblank_causing_oam_int_bug;
if !old_irq_high && self.is_irq_high { if !old_irq_high && self.is_irq_high {
if stat_int && self.registers.mode == PPUMode::HBlank {
self.registers.cycles_since_stat_mode_0 = 0;
} else if stat_int && self.registers.mode == PPUMode::SearchingOAM {
self.registers.cycles_since_stat_mode_2 = 0;
}
interrupts.write_if_lcd_stat(true); interrupts.write_if_lcd_stat(true);
} }
} }
@ -415,7 +427,7 @@ impl Ppu {
} }
pub fn sprite_height(&self) -> SpriteHeight { pub fn sprite_height(&self) -> SpriteHeight {
match (self.registers.lcdc >> 2) == 1 { match (self.registers.lcdc >> 2) & 0b1 == 1 {
false => SpriteHeight::Eight, false => SpriteHeight::Eight,
true => SpriteHeight::Sixteen, true => SpriteHeight::Sixteen,
} }
@ -546,11 +558,14 @@ impl Ppu {
} }
fn set_scanline(&mut self, interrupts: &mut Interrupts, scanline: u8) { fn set_scanline(&mut self, interrupts: &mut Interrupts, scanline: u8) {
// println!("LY incrementing: {} cycles since last incrementation. cycles since: // println!("LY incrementing: {} cycles since last incrementation and {} cycles
// {:?}", self.registers.cycles_since_last_ly_increment, // since last stat mode0 interrupt",
// self.registers.cycles_since_last_last_mode_start_increment.iter(). // self.registers.cycles_since_last_ly_increment,
// enumerate().map(|(idx, value)| { let idx_enum = match idx { // self.registers.cycles_since_stat_mode_0); println!("LY incrementing: {}
// 0 => PPUMode::HBlank, // cycles since last incrementation. cycles since: {:?}", self.registers.
// cycles_since_last_ly_increment, self.registers.
// cycles_since_last_last_mode_start_increment.iter(). enumerate().map(|(idx,
// value)| { let idx_enum = match idx { 0 => PPUMode::HBlank,
// 1 => PPUMode::VBlank, // 1 => PPUMode::VBlank,
// 2 => PPUMode::SearchingOAM, // 2 => PPUMode::SearchingOAM,
// 3 => PPUMode::TransferringData, // 3 => PPUMode::TransferringData,
@ -568,13 +583,16 @@ impl Ppu {
pub fn tick(&mut self, dma_state: &DmaState, interrupts: &mut Interrupts) -> bool { pub fn tick(&mut self, dma_state: &DmaState, interrupts: &mut Interrupts) -> bool {
if self.enabled() { if self.enabled() {
self.registers.cycles_since_last_ly_increment += 1; self.registers.cycles_since_last_ly_increment += 1;
self.registers.cycles_since_stat_mode_0 += 1;
self.registers.cycles_since_stat_mode_2 += 1;
match self.mode() { match self.mode() {
PPUMode::SearchingOAM => { PPUMode::SearchingOAM => {
self.registers.cycles_since_last_last_mode_start_increment[2] += 1; self.registers.cycles_since_last_last_mode_start_increment[2] += 1;
if self.current_dot == 0 { if self.current_dot == 0 {
if self.registers.ly == 0 { if self.registers.ly == 0 {
self.wy_match = self.registers.wy == self.registers.ly; self.wy_match = false;
} }
self.wy_match |= self.registers.wy == self.registers.ly;
self.sprite_buffer = [None; 10]; self.sprite_buffer = [None; 10];
self.sprite_count = 0; self.sprite_count = 0;
} }
@ -679,6 +697,7 @@ impl Ppu {
false false
} }
PPUMode::VBlank => { PPUMode::VBlank => {
self.window_counter = 0;
self.registers.cycles_since_last_last_mode_start_increment[1] += 1; self.registers.cycles_since_last_last_mode_start_increment[1] += 1;
self.current_dot += 1; self.current_dot += 1;
if self.current_dot % 456 == 0 { if self.current_dot % 456 == 0 {
@ -711,8 +730,9 @@ impl Ppu {
fn clear_line_sprite_fb(&mut self, real_line_number: usize) { fn clear_line_sprite_fb(&mut self, real_line_number: usize) {
assert!(real_line_number < FB_HEIGHT as usize); assert!(real_line_number < FB_HEIGHT as usize);
for value in 0..256 { let y_fb_offset = (real_line_number * FB_WIDTH as usize) * PIXEL_SIZE;
let idx = ((real_line_number * FB_WIDTH as usize) + value) * PIXEL_SIZE; for value in 0..FB_WIDTH as usize {
let idx = y_fb_offset + (value * PIXEL_SIZE);
self.sprite_framebuffer[idx] = 0; self.sprite_framebuffer[idx] = 0;
self.sprite_framebuffer[idx + 1] = 0; self.sprite_framebuffer[idx + 1] = 0;
self.sprite_framebuffer[idx + 2] = 0; self.sprite_framebuffer[idx + 2] = 0;
@ -724,6 +744,7 @@ impl Ppu {
let state = match self.current_draw_state.take() { let state = match self.current_draw_state.take() {
Some(state) => state, Some(state) => state,
None => { None => {
self.clear_line_sprite_fb(self.registers.ly as usize);
let scrolling_delay = self.registers.scx % 8; let scrolling_delay = self.registers.scx % 8;
self.dot_target += scrolling_delay as u16; self.dot_target += scrolling_delay as u16;
if scrolling_delay != 0 { if scrolling_delay != 0 {
@ -733,7 +754,6 @@ impl Ppu {
self.registers.scy, self.registers.scy,
) )
} else { } else {
self.clear_line_sprite_fb(self.registers.ly as usize);
LineDrawingState::BackgroundAndObjectFifo( LineDrawingState::BackgroundAndObjectFifo(
self.registers.scx, self.registers.scx,
self.registers.scy, self.registers.scy,
@ -760,7 +780,6 @@ impl Ppu {
false, false,
self.registers.lcdc & 0b1 == 0, self.registers.lcdc & 0b1 == 0,
)); ));
self.clear_line_sprite_fb(self.registers.ly as usize);
} }
} }
LineDrawingState::BackgroundAndObjectFifo( LineDrawingState::BackgroundAndObjectFifo(
@ -770,8 +789,6 @@ impl Ppu {
mut window_drawn, mut window_drawn,
draw_only_sprites, draw_only_sprites,
) => { ) => {
// assert_eq!(scy, self.registers.scy);
// assert_eq!(scx, self.registers.scx);
let wx_match = (drawn_pixels as usize + 7) >= self.registers.wx as usize; let wx_match = (drawn_pixels as usize + 7) >= self.registers.wx as usize;
let scrolled_y = self.registers.ly.wrapping_add(scy) as usize; let scrolled_y = self.registers.ly.wrapping_add(scy) as usize;
let scrolled_x = drawn_pixels.wrapping_add(scx) as usize; let scrolled_x = drawn_pixels.wrapping_add(scx) as usize;
@ -795,14 +812,16 @@ impl Ppu {
as usize; as usize;
let window_y = let window_y =
self.registers.ly.wrapping_sub(self.registers.wy) as usize; self.registers.ly.wrapping_sub(self.registers.wy) as usize;
let tilemap_idx = window_x / 8 + ((window_y / 8) * 32); let tilemap_idx = window_x / 8 + ((self.window_counter / 8) * 32);
let tilemap_value = self.read_window_tile_map()[tilemap_idx]; let tilemap_value = self.read_window_tile_map()[tilemap_idx];
(bg_color_id, bg_color) = Self::parse_tile_color( let (window_color_id, window_color) = Self::parse_tile_color(
self.read_bg_win_tile(tilemap_value), self.read_bg_win_tile(tilemap_value),
window_x % 8, window_x % 8,
window_y % 8, window_y % 8,
&self.bgp, &self.bgp,
); );
bg_color_id = window_color_id;
bg_color = window_color;
} }
(bg_color_id, bg_color) (bg_color_id, bg_color)
@ -816,69 +835,82 @@ impl Ppu {
self.framebuffer[framebuffer_offset + idx] = *byte; self.framebuffer[framebuffer_offset + idx] = *byte;
} }
let mut sprite_buffer = Vec::new(); if (self.registers.lcdc >> 1) & 0b1 == 1 {
for sprite_idx in 0..self.sprite_count { let mut sprite_buffer: Vec<OAMEntry> = Vec::new();
// WARNING: Sprites are not scrolled, they have an absolute position! for sprite_idx in 0..self.sprite_count {
let sprite = self.sprite_buffer[sprite_idx] // WARNING: Sprites are not scrolled, they have an absolute position!
.as_ref() let sprite = self.sprite_buffer[sprite_idx]
.expect("within the sprite count there should be non `None`s"); .as_ref()
.expect("within the sprite count there should be no `None`s");
let x_valid = let x_valid =
drawn_pixels < sprite.x && drawn_pixels.wrapping_add(8) >= sprite.x; drawn_pixels < sprite.x && drawn_pixels.wrapping_add(8) >= sprite.x;
let y_valid = self.registers.ly < sprite.y let y_valid = self.registers.ly < sprite.y
&& self.registers.ly.wrapping_add(16) >= sprite.y; && self.registers.ly.wrapping_add(16) >= sprite.y;
if x_valid && y_valid { if !sprite_buffer.iter().any(|existing| existing.x == sprite.x)
sprite_buffer.push(*sprite); && x_valid && y_valid
} {
} sprite_buffer.push(*sprite);
}
sprite_buffer.sort_by(|l, r| l.x.cmp(&r.x));
// TODO: Adjust mode length based on sprites
for sprite in &sprite_buffer {
let mut sprite_x_idx =
drawn_pixels.wrapping_sub(sprite.x.wrapping_sub(8)) as usize;
let mut sprite_y_idx =
self.registers.ly.wrapping_sub(sprite.y.wrapping_sub(16)) as usize;
let tile_idx = match self.sprite_height() {
SpriteHeight::Eight => sprite.tile_idx,
SpriteHeight::Sixteen => match sprite_y_idx >= 8 {
true => sprite.tile_idx | 1,
false => sprite.tile_idx & 0xFE,
},
};
if sprite_y_idx >= 8 {
sprite_y_idx -= 8;
assert!(sprite_y_idx < 8);
} }
if sprite.y_flip() { sprite_buffer.sort_by(|l, r| r.x.cmp(&l.x));
sprite_y_idx = 7 - sprite_y_idx;
}
if sprite.x_flip() { // TODO: Adjust mode length based on sprites
sprite_x_idx = 7 - sprite_x_idx; for sprite in &sprite_buffer {
} let mut sprite_x_idx =
drawn_pixels.wrapping_sub(sprite.x.wrapping_sub(8)) as usize;
let mut sprite_y_idx =
self.registers.ly.wrapping_sub(sprite.y.wrapping_sub(16)) as usize;
let color_id = if sprite.y_flip() {
self.read_obj_tile_colour_id(tile_idx, sprite_x_idx, sprite_y_idx); let sprite_offset = match self.sprite_height() {
let palette = &self.obp[sprite.palette_number() as usize]; SpriteHeight::Eight => 7,
let sprite_color = palette.color_from_2bit(color_id); SpriteHeight::Sixteen => 15,
};
sprite_y_idx = sprite_offset - sprite_y_idx;
}
if color_id != 0 && !(sprite.covered_by_bg_window() && bg_color_id != 0) { if sprite.x_flip() {
self.sprite_framebuffer[framebuffer_offset + 0] = sprite_color.rgba()[0]; sprite_x_idx = 7 - sprite_x_idx;
self.sprite_framebuffer[framebuffer_offset + 1] = sprite_color.rgba()[1]; }
self.sprite_framebuffer[framebuffer_offset + 2] = sprite_color.rgba()[2];
self.sprite_framebuffer[framebuffer_offset + 3] = sprite_color.rgba()[3]; let tile_idx = match self.sprite_height() {
SpriteHeight::Eight => sprite.tile_idx,
SpriteHeight::Sixteen => match sprite_y_idx >= 8 {
true => sprite.tile_idx | 1,
false => sprite.tile_idx & 0xFE,
},
};
if sprite_y_idx >= 8 {
sprite_y_idx -= 8;
assert!(sprite_y_idx < 8);
}
let color_id =
self.read_obj_tile_colour_id(tile_idx, sprite_x_idx, sprite_y_idx);
let palette = &self.obp[sprite.palette_number() as usize];
let sprite_color = palette.color_from_2bit(color_id);
let sprite_covered = sprite.covered_by_bg_window() && bg_color_id != 0;
if color_id != 0 && !sprite_covered {
let [r, g, b, a] = *sprite_color.rgba();
self.sprite_framebuffer[framebuffer_offset + 0] = r;
self.sprite_framebuffer[framebuffer_offset + 1] = g;
self.sprite_framebuffer[framebuffer_offset + 2] = b;
self.sprite_framebuffer[framebuffer_offset + 3] = a;
}
} }
} }
drawn_pixels += 1; drawn_pixels += 1;
if drawn_pixels == FB_WIDTH as u8 { if drawn_pixels == FB_WIDTH as u8 {
if window_drawn { if window_drawn {
self.window_counter += 1;
self.dot_target += 6; self.dot_target += 6;
} }
self.current_draw_state = Some(LineDrawingState::Finished); self.current_draw_state = Some(LineDrawingState::Finished);

View file

@ -8,13 +8,11 @@ pub mod ringbuffer;
pub fn setup_test_emulator<const ROM_LENGTH: usize>( pub fn setup_test_emulator<const ROM_LENGTH: usize>(
test_opcodes: [u8; ROM_LENGTH], test_opcodes: [u8; ROM_LENGTH],
) -> gameboy::Gameboy<std::io::Stdout> { ) -> gameboy::Gameboy<std::io::Stdout> {
let mut gameboy = gameboy::Gameboy::new(None, std::io::stdout());
let mut cartridge = gameboy::mapper::NoMBC { rom: [0u8; 0x8000], ram: None }; let mut cartridge = gameboy::mapper::NoMBC { rom: [0u8; 0x8000], ram: None };
(&mut cartridge.rom[0x100..ROM_LENGTH + 0x100]).copy_from_slice(&test_opcodes); (&mut cartridge.rom[0x100..ROM_LENGTH + 0x100]).copy_from_slice(&test_opcodes);
gameboy.cartridge = Some(Box::new(cartridge)); let mut gameboy = gameboy::Gameboy::new_with_cartridge(std::io::stdout(), Some(Box::new(cartridge)));
gameboy.tick_4(); // Prefetch instruction gameboy.tick_4(); // Prefetch instruction
assert!(gameboy.registers.mem_read_hold.is_some()); // Assert prefetch happened and opcode is now sitting in the memory bus assert!(gameboy.registers.mem_read_hold.is_some()); // Assert prefetch happened and opcode is now sitting in the memory bus

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -18,7 +18,15 @@ pub struct CliArgs {
#[derive(Debug, Subcommand)] #[derive(Debug, Subcommand)]
pub enum Operation { pub enum Operation {
Test { TestFramebuffer {
/// maximum M-cycles
#[clap(short = 'm', long)]
maximum_m_cycles: u64,
/// path to expected framebuffer (RGBA)
#[clap(short = 's', long)]
expected_framebuffer: PathBuf,
},
TestSerial {
/// maximum M-cycles /// maximum M-cycles
#[clap(short = 'm', long)] #[clap(short = 'm', long)]
maximum_m_cycles: u64, maximum_m_cycles: u64,
@ -26,7 +34,7 @@ pub enum Operation {
#[clap(short = 's', long)] #[clap(short = 's', long)]
expected_serial: PathBuf, expected_serial: PathBuf,
}, },
GenerateOutput { GenerateOutputSerial {
/// M-cycles to run for /// M-cycles to run for
#[clap(short = 'm', long)] #[clap(short = 'm', long)]
m_cycles: u64, m_cycles: u64,
@ -34,6 +42,14 @@ pub enum Operation {
#[clap(short = 's', long)] #[clap(short = 's', long)]
expected_serial: PathBuf, expected_serial: PathBuf,
}, },
GenerateOutputFramebuffer {
/// M-cycles to run for
#[clap(short = 'm', long)]
m_cycles: u64,
/// path to expected framebuffer output
#[clap(short = 's', long)]
expected_framebuffer: PathBuf,
},
} }
#[derive(Debug, thiserror::Error)] #[derive(Debug, thiserror::Error)]
@ -42,14 +58,16 @@ pub enum DmgTestError {
RomNotFound, RomNotFound,
#[error("ROM reading error: {0}")] #[error("ROM reading error: {0}")]
RomRead(std::io::Error), RomRead(std::io::Error),
#[error("Missing serial output file")] #[error("Missing output file")]
SerialOutputFileNotFound, OutputFileNotFound,
#[error("Error reading serial output file: {0}")] #[error("Error reading output file: {0}")]
SerialOutputFileRead(std::io::Error), OutputFileRead(std::io::Error),
#[error("Error writing serial output file: {0}")] #[error("Error writing output file: {0}")]
SerialOutputFileWrite(std::io::Error), OutputFileWrite(std::io::Error),
#[error("Serial mismatch\nExpected: {0}\nFound: {1}")] #[error("Serial mismatch\nExpected: {0}\nFound: {1}")]
SerialDifferent(String, String), SerialDifferent(String, String),
#[error("Framebuffer mismatch")]
FramebufferDifferent,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -75,10 +93,10 @@ impl SerialWriter for SyncWriter {
} }
} }
fn generate_output( fn generate_output<const FRAMEBUFFER: bool>(
rom: &Path, rom: &Path,
m_cycles: u64, m_cycles: u64,
expected_serial: &Path, expected: &Path,
) -> Result<Duration, DmgTestError> { ) -> Result<Duration, DmgTestError> {
let rom = { let rom = {
if !rom.is_file() { if !rom.is_file() {
@ -88,29 +106,39 @@ fn generate_output(
}; };
let sync_writer = SyncWriter::new(); let sync_writer = SyncWriter::new();
let mut fb = None;
let mut gameboy = Gameboy::new(None, sync_writer.clone()); let mut gameboy = Gameboy::new(sync_writer.clone(), Some(rom));
gameboy.load_cartridge(rom);
let instant = std::time::Instant::now(); let instant = std::time::Instant::now();
for _ in 0..m_cycles { for _ in 0..m_cycles {
gameboy.tick_4(); let new_fb = gameboy.tick_4();
if FRAMEBUFFER && new_fb {
fb = Some(gameboy.ppu.write_fb());
}
} }
drop(gameboy); drop(gameboy);
let serial_content = sync_writer.into_inner(); if FRAMEBUFFER {
std::fs::write(expected_serial, &serial_content) std::fs::write(expected, &fb.unwrap())
.map_err(DmgTestError::SerialOutputFileWrite)?; .map_err(DmgTestError::OutputFileWrite)?;
} else {
let serial_content = sync_writer.into_inner();
std::fs::write(expected, &serial_content)
.map_err(DmgTestError::OutputFileWrite)?;
}
Ok(instant.elapsed()) Ok(instant.elapsed())
} }
fn run_test(
fn run_test<const FRAMEBUFFER: bool>(
rom: &Path, rom: &Path,
maximum_m_cycles: u64, maximum_m_cycles: u64,
expected_serial: &Path, expected: &Path,
) -> Result<(u64, Duration), DmgTestError> { ) -> Result<(u64, Duration), DmgTestError> {
let rom = { let rom = {
if !rom.is_file() { if !rom.is_file() {
@ -119,38 +147,51 @@ fn run_test(
std::fs::read(rom).map_err(DmgTestError::RomRead)? std::fs::read(rom).map_err(DmgTestError::RomRead)?
}; };
let expected_serial = { let expected = {
if !expected_serial.is_file() { if !expected.is_file() {
return Err(DmgTestError::SerialOutputFileNotFound); return Err(DmgTestError::OutputFileNotFound);
} }
std::fs::read(expected_serial).map_err(DmgTestError::SerialOutputFileRead)? std::fs::read(expected).map_err(DmgTestError::OutputFileRead)?
}; };
if FRAMEBUFFER {
assert_eq!(expected.len(), (meowgb_core::gameboy::ppu::FB_WIDTH as usize * meowgb_core::gameboy::ppu::FB_HEIGHT as usize) * meowgb_core::gameboy::ppu::PIXEL_SIZE as usize);
}
let sync_writer = SyncWriter::new(); let sync_writer = SyncWriter::new();
let mut gameboy = Gameboy::new(None, sync_writer.clone()); let mut gameboy = Gameboy::new(sync_writer.clone(), Some(rom));
gameboy.load_cartridge(rom);
let instant = Instant::now(); let instant = Instant::now();
let mut cycle_counter = 0; let mut cycle_counter = 0;
while cycle_counter < maximum_m_cycles { while cycle_counter < maximum_m_cycles {
gameboy.tick_4(); if FRAMEBUFFER {
let redraw = gameboy.tick_4();
cycle_counter += 1; cycle_counter += 1;
if sync_writer.compare(&expected_serial) { if redraw && expected == gameboy.ppu.write_fb() {
return Ok((cycle_counter, instant.elapsed())); return Ok((cycle_counter, instant.elapsed()));
}
} else {
gameboy.tick_4();
cycle_counter += 1;
if sync_writer.compare(&expected) {
return Ok((cycle_counter, instant.elapsed()));
}
} }
} }
drop(gameboy); drop(gameboy);
match sync_writer.compare(&expected_serial) { match sync_writer.compare(&expected) {
true => Ok((cycle_counter, instant.elapsed())), true => Ok((cycle_counter, instant.elapsed())),
false => Err(DmgTestError::SerialDifferent( false => Err(DmgTestError::SerialDifferent(
expected_serial.into_iter().map(char::from).collect(), expected.into_iter().map(char::from).collect(),
sync_writer.into_inner().into_iter().map(char::from).collect(), sync_writer.into_inner().into_iter().map(char::from).collect(),
)), )),
} }
@ -160,8 +201,8 @@ fn main() {
let args = CliArgs::parse(); let args = CliArgs::parse();
match args.operation { match args.operation {
Operation::Test { maximum_m_cycles, expected_serial } => { Operation::TestSerial { maximum_m_cycles, expected_serial } => {
match run_test(args.rom.as_path(), maximum_m_cycles, expected_serial.as_path()) { match run_test::<false>(args.rom.as_path(), maximum_m_cycles, expected_serial.as_path()) {
Ok((m_cycles, duration)) => { Ok((m_cycles, duration)) => {
println!("Success! Ran {} M-Cycles in {}ms", m_cycles, duration.as_millis()); println!("Success! Ran {} M-Cycles in {}ms", m_cycles, duration.as_millis());
} }
@ -171,8 +212,8 @@ fn main() {
} }
} }
} }
Operation::GenerateOutput { m_cycles, expected_serial } => { Operation::GenerateOutputSerial { m_cycles, expected_serial } => {
match generate_output(args.rom.as_path(), m_cycles, expected_serial.as_path()) { match generate_output::<false>(args.rom.as_path(), m_cycles, expected_serial.as_path()) {
Ok(duration) => { Ok(duration) => {
println!("Successfully written serial output to {} in {} M-Cycles ({}ms), please verify it is correct", expected_serial.display(), m_cycles, duration.as_millis()); println!("Successfully written serial output to {} in {} M-Cycles ({}ms), please verify it is correct", expected_serial.display(), m_cycles, duration.as_millis());
} }
@ -182,5 +223,27 @@ fn main() {
} }
} }
} }
Operation::TestFramebuffer { maximum_m_cycles, expected_framebuffer } => {
match run_test::<true>(args.rom.as_path(), maximum_m_cycles, expected_framebuffer.as_path()) {
Ok((m_cycles, duration)) => {
println!("Success! Ran {} M-Cycles in {}ms", m_cycles, duration.as_millis());
}
Err(why) => {
eprintln!("{}", why);
std::process::exit(1);
}
}
},
Operation::GenerateOutputFramebuffer { m_cycles, expected_framebuffer } => {
match generate_output::<true>(args.rom.as_path(), m_cycles, expected_framebuffer.as_path()) {
Ok(duration) => {
println!("Successfully written framebuffer output to {} in {} M-Cycles ({}ms), please verify it is correct", expected_framebuffer.display(), m_cycles, duration.as_millis());
}
Err(why) => {
eprintln!("{}", why);
std::process::exit(1);
}
}
},
} }
} }

View file

@ -13,7 +13,6 @@ use std::{
use clap::Parser; use clap::Parser;
use config::MeowGBConfig; use config::MeowGBConfig;
use meowgb_core::gameboy::{ use meowgb_core::gameboy::{
bootrom::{verify_parse_bootrom, BootromParseError},
serial::SerialWriter, serial::SerialWriter,
Gameboy, Gameboy,
}; };
@ -23,9 +22,6 @@ use window::events::{EmulatorDebugEvent, EmulatorWindowEvent, GameboyEvent};
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
/// DMG Emulator /// DMG Emulator
pub struct CliArgs { pub struct CliArgs {
/// bootrom path
#[clap(long)]
pub bootrom: Option<PathBuf>,
/// game path /// game path
#[clap(long)] #[clap(long)]
pub rom: Option<PathBuf>, pub rom: Option<PathBuf>,
@ -38,9 +34,6 @@ pub struct CliArgs {
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
/// DMG Emulator /// DMG Emulator
pub struct CliArgs { pub struct CliArgs {
/// bootrom path
#[clap(long)]
pub bootrom: Option<PathBuf>,
/// game path /// game path
#[clap(long)] #[clap(long)]
pub rom: Option<PathBuf>, pub rom: Option<PathBuf>,
@ -48,8 +41,6 @@ pub struct CliArgs {
#[derive(Debug, thiserror::Error)] #[derive(Debug, thiserror::Error)]
pub enum MeowGBError { pub enum MeowGBError {
#[error(transparent)]
Bootrom(BootromParseError),
#[error("Game Not Found")] #[error("Game Not Found")]
GameNotFound, GameNotFound,
#[error("IO Error: {0}")] #[error("IO Error: {0}")]
@ -71,12 +62,18 @@ fn real_main() -> Result<(), MeowGBError> {
path.file_name().and_then(|name| name.to_str().map(str::to_string).map(Cow::Owned)) path.file_name().and_then(|name| name.to_str().map(str::to_string).map(Cow::Owned))
}); });
let bootrom = match args.bootrom.as_deref() { let rom = match args.rom.as_deref() {
Some(path) => Some(verify_parse_bootrom(path).map_err(MeowGBError::Bootrom)?), Some(rom) => {
None => None, if !rom.is_file() {
return Err(MeowGBError::GameNotFound);
}
Some(std::fs::read(rom)?)
},
None => None
}; };
let mut gameboy = WrappedGameboy::new(Gameboy::new(bootrom, std::io::stdout())); let mut gameboy = WrappedGameboy::new(Gameboy::new(std::io::stdout(), rom));
#[cfg(feature = "debugger")] #[cfg(feature = "debugger")]
let dbg = args.debug; let dbg = args.debug;
#[cfg(not(feature = "debugger"))] #[cfg(not(feature = "debugger"))]
@ -87,7 +84,7 @@ fn real_main() -> Result<(), MeowGBError> {
let jh = std::thread::Builder::new() let jh = std::thread::Builder::new()
.name(String::from("mewmulator")) .name(String::from("mewmulator"))
.spawn(move || run_gameboy(args, gameboy_2, gb_side_rx, gb_side_tx).unwrap()) .spawn(move || run_gameboy(gameboy_2, gb_side_rx, gb_side_tx).unwrap())
.unwrap(); .unwrap();
window::run_window( window::run_window(
@ -123,25 +120,10 @@ impl<W: SerialWriter> WrappedGameboy<W> {
} }
pub fn run_gameboy( pub fn run_gameboy(
args: CliArgs,
gameboy_arc: Arc<RwLock<WrappedGameboy<impl SerialWriter>>>, gameboy_arc: Arc<RwLock<WrappedGameboy<impl SerialWriter>>>,
rx: Receiver<EmulatorWindowEvent>, rx: Receiver<EmulatorWindowEvent>,
tx: Sender<GameboyEvent>, tx: Sender<GameboyEvent>,
) -> Result<(), MeowGBError> { ) -> Result<(), MeowGBError> {
let mut gameboy = gameboy_arc.write().unwrap();
if let Some(rom) = args.rom {
if !rom.is_file() {
return Err(MeowGBError::GameNotFound);
}
let rom = std::fs::read(rom.as_path())?;
gameboy.gameboy.load_cartridge(rom)
}
drop(gameboy);
let mut goal = time::OffsetDateTime::now_utc() + time::Duration::milliseconds(1000 / 60); let mut goal = time::OffsetDateTime::now_utc() + time::Duration::milliseconds(1000 / 60);
let mut frame_counter = 0; let mut frame_counter = 0;
let mut debugging_tbf = None; let mut debugging_tbf = None;

View file

@ -7,711 +7,731 @@ fi
TEST_TOTAL=0 TEST_TOTAL=0
TEST_SUCCESS=0 TEST_SUCCESS=0
echo "Running test ROM ./test-roms/blargg/roms/cpu_instrs.gb" echo "Running test ROM ./test-roms/blargg/serial-roms/cpu_instrs.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/blargg/roms/cpu_instrs.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/cpu_instrs.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/blargg/serial-roms/cpu_instrs.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/cpu_instrs.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/blargg/roms/instr_timing.gb" echo "Running test ROM ./test-roms/blargg/serial-roms/instr_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/blargg/roms/instr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/instr_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/blargg/serial-roms/instr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/instr_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/blargg/roms/mem_timing.gb" echo "Running test ROM ./test-roms/blargg/serial-roms/mem_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/blargg/roms/mem_timing.gb test -m 100000000 -s meowgb-tests/expected_output/blargg/mem_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/blargg/serial-roms/mem_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/blargg/mem_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/add_sp_e_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/add_sp_e_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/add_sp_e_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/add_sp_e_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/add_sp_e_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/add_sp_e_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/boot_hwio-dmgABCmgb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/boot_hwio-dmgABCmgb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/boot_hwio-dmgABCmgb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/boot_hwio-dmgABCmgb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/boot_hwio-dmgABCmgb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/boot_hwio-dmgABCmgb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/boot_regs-dmgABC.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/boot_regs-dmgABC.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/boot_regs-dmgABC.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/boot_regs-dmgABC.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/boot_regs-dmgABC.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/boot_regs-dmgABC.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/call_cc_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/call_cc_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_cc_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_cc_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/call_cc_timing2.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/call_cc_timing2.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_cc_timing2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_cc_timing2.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_cc_timing2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_cc_timing2.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/call_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/call_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/call_timing2.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/call_timing2.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/call_timing2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/call_timing2.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/call_timing2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/call_timing2.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/di_timing-GS.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/di_timing-GS.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/di_timing-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/di_timing-GS.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/di_timing-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/di_timing-GS.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/div_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/div_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/div_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/div_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/div_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/div_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ei_sequence.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ei_sequence.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ei_sequence.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ei_sequence.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ei_sequence.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ei_sequence.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ei_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ei_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ei_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ei_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ei_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ei_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/halt_ime0_ei.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/halt_ime0_ei.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime0_ei.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime0_ei.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime0_ei.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime0_ei.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/halt_ime0_nointr_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/halt_ime0_nointr_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime0_nointr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime0_nointr_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime0_nointr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime0_nointr_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/halt_ime1_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime1_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime1_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime1_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/halt_ime1_timing2-GS.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing2-GS.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/halt_ime1_timing2-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/halt_ime1_timing2-GS.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/halt_ime1_timing2-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/halt_ime1_timing2-GS.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/if_ie_registers.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/if_ie_registers.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/if_ie_registers.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/if_ie_registers.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/if_ie_registers.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/if_ie_registers.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/intr_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/intr_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/intr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/intr_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/intr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/intr_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/jp_cc_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/jp_cc_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/jp_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/jp_cc_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/jp_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/jp_cc_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/jp_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/jp_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/jp_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/jp_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/jp_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/jp_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ld_hl_sp_e_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ld_hl_sp_e_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ld_hl_sp_e_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ld_hl_sp_e_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ld_hl_sp_e_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ld_hl_sp_e_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/oam_dma_restart.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/oam_dma_restart.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_restart.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_restart.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_restart.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_restart.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/oam_dma_start.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/oam_dma_start.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_start.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_start.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_start.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_start.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/oam_dma_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/oam_dma_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/pop_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/pop_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/pop_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/pop_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/pop_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/pop_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/push_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/push_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/push_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/push_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/push_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/push_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/rapid_di_ei.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/rapid_di_ei.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/rapid_di_ei.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/rapid_di_ei.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/rapid_di_ei.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/rapid_di_ei.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ret_cc_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ret_cc_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ret_cc_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ret_cc_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ret_cc_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ret_cc_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ret_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ret_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ret_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ret_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ret_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ret_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/reti_intr_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/reti_intr_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/reti_intr_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/reti_intr_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/reti_intr_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/reti_intr_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/reti_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/reti_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/reti_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/reti_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/reti_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/reti_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/rst_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/rst_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/rst_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/rst_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/rst_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/rst_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/bits_bank1.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank1.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_bank1.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_bank1.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank1.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_bank1.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/bits_bank2.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank2.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_bank2.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_bank2.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_bank2.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_bank2.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/bits_mode.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/bits_mode.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_mode.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_mode.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_mode.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_mode.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/bits_ramg.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/bits_ramg.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/bits_ramg.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/bits_ramg.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/bits_ramg.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/bits_ramg.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/multicart_rom_8Mb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/multicart_rom_8Mb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/multicart_rom_8Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/multicart_rom_8Mb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/multicart_rom_8Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/multicart_rom_8Mb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/ram_256kb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/ram_256kb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/ram_256kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/ram_256kb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/ram_256kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/ram_256kb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/ram_64kb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/ram_64kb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/ram_64kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/ram_64kb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/ram_64kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/ram_64kb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/rom_16Mb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/rom_16Mb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_16Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_16Mb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_16Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_16Mb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/rom_1Mb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/rom_1Mb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_1Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_1Mb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_1Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_1Mb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/rom_2Mb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/rom_2Mb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_2Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_2Mb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_2Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_2Mb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/rom_4Mb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/rom_4Mb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_4Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_4Mb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_4Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_4Mb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/rom_512kb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/rom_512kb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_512kb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_512kb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_512kb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_512kb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/MBC1/rom_8Mb.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/MBC1/rom_8Mb.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/MBC1/rom_8Mb.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/MBC1/rom_8Mb.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/MBC1/rom_8Mb.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/MBC1/rom_8Mb.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/bits/mem_oam.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/bits/mem_oam.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/mem_oam.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/mem_oam.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/mem_oam.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/mem_oam.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/bits/reg_f.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/bits/reg_f.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/reg_f.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/reg_f.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/reg_f.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/reg_f.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/bits/unused_hwio-GS.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/bits/unused_hwio-GS.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/bits/unused_hwio-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/bits/unused_hwio-GS.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/bits/unused_hwio-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/bits/unused_hwio-GS.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/instr/daa.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/instr/daa.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/instr/daa.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/instr/daa.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/instr/daa.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/instr/daa.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/oam_dma/basic.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/oam_dma/basic.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma/basic.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma/basic.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma/basic.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma/basic.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/oam_dma/reg_read.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/oam_dma/reg_read.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/oam_dma/reg_read.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/oam_dma/reg_read.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/oam_dma/reg_read.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/oam_dma/reg_read.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ppu/intr_1_2_timing-GS.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ppu/intr_1_2_timing-GS.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/intr_1_2_timing-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/intr_1_2_timing-GS.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/intr_1_2_timing-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/intr_1_2_timing-GS.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ppu/intr_2_0_timing.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ppu/intr_2_0_timing.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/intr_2_0_timing.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/intr_2_0_timing.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/intr_2_0_timing.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/intr_2_0_timing.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ppu/stat_irq_blocking.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ppu/stat_irq_blocking.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/stat_irq_blocking.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/stat_irq_blocking.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/stat_irq_blocking.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/stat_irq_blocking.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ppu/stat_lyc_onoff.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ppu/stat_lyc_onoff.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/stat_lyc_onoff.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/stat_lyc_onoff.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/stat_lyc_onoff.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/stat_lyc_onoff.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/ppu/vblank_stat_intr-GS.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/ppu/vblank_stat_intr-GS.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/ppu/vblank_stat_intr-GS.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/ppu/vblank_stat_intr-GS.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/ppu/vblank_stat_intr-GS.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/ppu/vblank_stat_intr-GS.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/div_write.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/div_write.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/div_write.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/div_write.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/div_write.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/div_write.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/rapid_toggle.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/rapid_toggle.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/rapid_toggle.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/rapid_toggle.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/rapid_toggle.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/rapid_toggle.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim00.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim00.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim00.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim00.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim00.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim00.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim00_div_trigger.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim00_div_trigger.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim00_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim00_div_trigger.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim00_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim00_div_trigger.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim01.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim01.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim01.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim01.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim01.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim01.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim01_div_trigger.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim01_div_trigger.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim01_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim01_div_trigger.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim01_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim01_div_trigger.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim10.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim10.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim10.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim10.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim10.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim10.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim10_div_trigger.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim10_div_trigger.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim10_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim10_div_trigger.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim10_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim10_div_trigger.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim11.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim11.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim11.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim11.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim11.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim11.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tim11_div_trigger.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tim11_div_trigger.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tim11_div_trigger.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tim11_div_trigger.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tim11_div_trigger.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tim11_div_trigger.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tima_reload.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tima_reload.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tima_reload.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tima_reload.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tima_reload.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tima_reload.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tima_write_reloading.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tima_write_reloading.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tima_write_reloading.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tima_write_reloading.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tima_write_reloading.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tima_write_reloading.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"
fi fi
echo "Running test ROM ./test-roms/mooneye-test-suite/roms/timer/tma_write_reloading.gb" echo "Running test ROM ./test-roms/mooneye-test-suite/serial-roms/timer/tma_write_reloading.gb"
TEST_TOTAL=$((TEST_TOTAL + 1)) TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/roms/timer/tma_write_reloading.gb test -m 100000000 -s meowgb-tests/expected_output/mooneye-test-suite/timer/tma_write_reloading.bin 2>&1 > /dev/null) ; then if res=$(./target/release/meowgb-tests test-roms/mooneye-test-suite/serial-roms/timer/tma_write_reloading.gb test-serial -m 100000000 -s meowgb-tests/expected_output/serial/mooneye-test-suite/timer/tma_write_reloading.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1))
else
echo "Failed: $res"
fi
echo "Running test ROM ./test-roms/hacktix/framebuffer-roms/bully.gb"
TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/bully.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/bully.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1))
else
echo "Failed: $res"
fi
echo "Running test ROM ./test-roms/hacktix/framebuffer-roms/strikethrough.gb"
TEST_TOTAL=$((TEST_TOTAL + 1))
if res=$(./target/release/meowgb-tests test-roms/hacktix/framebuffer-roms/strikethrough.gb test-framebuffer -m 100000000 -s meowgb-tests/expected_output/framebuffer/hacktix/strikethrough.bin 2>&1 > /dev/null) ; then
TEST_SUCCESS=$((TEST_SUCCESS + 1)) TEST_SUCCESS=$((TEST_SUCCESS + 1))
else else
echo "Failed: $res" echo "Failed: $res"

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Optix
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,5 @@
# Hacktix Tests
These test ROMs were written by "Hacktix", and are licensed by them under the MIT license, a copy of their license is in [BullyGB-LICENSE](./BullyGB-LICENSE) and [strikethrough-gb-LICENSE](./strikethrough-gb-LICENSE).
The original source code can be found at [https://github.com/Hacktix/strikethrough.gb](https://github.com/Hacktix/strikethrough.gb) and [https://github.com/Hacktix/BullyGB](https://github.com/Hacktix/BullyGB).

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Optix™
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Some files were not shown because too many files have changed in this diff Show more