Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cottsay/arm_asm_emu
Gameboy Emulator in ARM Assembly
https://github.com/cottsay/arm_asm_emu
arm assembly emulator gameboy z80
Last synced: 22 days ago
JSON representation
Gameboy Emulator in ARM Assembly
- Host: GitHub
- URL: https://github.com/cottsay/arm_asm_emu
- Owner: cottsay
- License: bsd-3-clause
- Created: 2014-05-30T19:01:03.000Z (over 10 years ago)
- Default Branch: main
- Last Pushed: 2022-02-07T00:51:12.000Z (over 2 years ago)
- Last Synced: 2024-07-30T18:38:29.746Z (3 months ago)
- Topics: arm, assembly, emulator, gameboy, z80
- Language: Assembly
- Homepage:
- Size: 142 KB
- Stars: 99
- Watchers: 4
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# arm\_asm\_emu
A Game Boy emulator written entirely in ARM assemly language.Why assembly language? Why not.
[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/cottsay/arm_asm_emu/arm_asm_emu%20CI/main?event=push&logo=github)](https://github.com/cottsay/arm_asm_emu/actions?query=workflow%3A%22arm_asm_emu+CI%22+branch%3Amain+event%3Apush)
## Cross-assembling
The Makefile is set up for both native building on an ARM platform as well as
cross-compling. Pass your favorite cross-compiling prefix to the `make`
invocation with something like `CROSS=arm-none-eabi-`.The testing harness can also be invoked on a non-arm platform using QEMU.
Specify something like `TEST_WRAPPER=qemu-arm` during the `make test`
invocation to use QEMU when running tests.## Testing
A test harness has been created which runs a ROM for a given number of cycles
and checks a CRC32 of the screen contents against a set value. If the value
doesn't match, a capture of the screen is saved as a `.bmp` file and the
process returns non-zero.At present, only the Blargg tests are targeted. Here are the current passing
tests:| cpu\_instrs | passing |
| ------------------ | ------------------ |
| special | :heavy_check_mark: |
| interrupts | :heavy_check_mark: |
| op sp,hl | :heavy_check_mark: |
| op r,imm | :heavy_check_mark: |
| op rp | :heavy_check_mark: |
| ld r,r | :heavy_check_mark: |
| jr,jp,call,ret,rst | :heavy_check_mark: |
| misc instrs | :heavy_check_mark: |
| op r,r | :heavy_check_mark: |
| bit ops | :heavy_check_mark: |
| op a,(hl) | :heavy_check_mark: || timing | passing |
| ------------------ | ------------------ |
| instr\_timing | :heavy_check_mark: |
| mem\_timing | :heavy_check_mark: |
| mem\_timing-2 | :heavy_check_mark: || misc | passing |
| ------------------ | ------------------ |
| oam_bug causes | :heavy_check_mark: |
| oam_bug non_causes | :heavy_check_mark: |
| oam_bug timing_bug | :heavy_check_mark: |## Interface
### Supported graphics interfaces
* Null
* Linux framebuffer
* Bitmap (capture)### Supported control interfaces
* Null
* Linux evdev### Sound
(not implemented)## License
All code is published under the BSD-3-Clause License. See [LICENSE](LICENSE)
for more information.