gameboy wormboy manboy gameworm gameman wormgame mangame manworm
Dependencies: mbed SDFileSystem2
cpu.h@17:c9afe1a7b423, 2019-01-13 (annotated)
- Committer:
- dicarloj
- Date:
- Sun Jan 13 19:00:10 2019 +0000
- Revision:
- 17:c9afe1a7b423
a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dicarloj | 17:c9afe1a7b423 | 1 | #ifndef GBC_CPU_H |
dicarloj | 17:c9afe1a7b423 | 2 | #define GBC_CPU_H |
dicarloj | 17:c9afe1a7b423 | 3 | |
dicarloj | 17:c9afe1a7b423 | 4 | #include "types.h" |
dicarloj | 17:c9afe1a7b423 | 5 | |
dicarloj | 17:c9afe1a7b423 | 6 | // 16 bit register |
dicarloj | 17:c9afe1a7b423 | 7 | union reg { |
dicarloj | 17:c9afe1a7b423 | 8 | u16 v; |
dicarloj | 17:c9afe1a7b423 | 9 | struct { |
dicarloj | 17:c9afe1a7b423 | 10 | u8 lo; |
dicarloj | 17:c9afe1a7b423 | 11 | u8 hi; |
dicarloj | 17:c9afe1a7b423 | 12 | }; |
dicarloj | 17:c9afe1a7b423 | 13 | }; |
dicarloj | 17:c9afe1a7b423 | 14 | |
dicarloj | 17:c9afe1a7b423 | 15 | struct CpuState { |
dicarloj | 17:c9afe1a7b423 | 16 | // registers |
dicarloj | 17:c9afe1a7b423 | 17 | reg bc, de, hl; |
dicarloj | 17:c9afe1a7b423 | 18 | u8 f; |
dicarloj | 17:c9afe1a7b423 | 19 | u8 a; |
dicarloj | 17:c9afe1a7b423 | 20 | u16 sp, pc; |
dicarloj | 17:c9afe1a7b423 | 21 | |
dicarloj | 17:c9afe1a7b423 | 22 | bool halt; |
dicarloj | 17:c9afe1a7b423 | 23 | uint64_t cycleCount; |
dicarloj | 17:c9afe1a7b423 | 24 | uint64_t divOffset; |
dicarloj | 17:c9afe1a7b423 | 25 | u8 ime; |
dicarloj | 17:c9afe1a7b423 | 26 | u32 timSubcount; |
dicarloj | 17:c9afe1a7b423 | 27 | }; |
dicarloj | 17:c9afe1a7b423 | 28 | |
dicarloj | 17:c9afe1a7b423 | 29 | // external interface: |
dicarloj | 17:c9afe1a7b423 | 30 | extern CpuState globalState; |
dicarloj | 17:c9afe1a7b423 | 31 | void resetCpu(); // reinitialize the cpu |
dicarloj | 17:c9afe1a7b423 | 32 | u32 cpuStep(); // step 1 instruction, returns number of clock cycles elapsed |
dicarloj | 17:c9afe1a7b423 | 33 | |
dicarloj | 17:c9afe1a7b423 | 34 | |
dicarloj | 17:c9afe1a7b423 | 35 | bool getZeroFlag(); |
dicarloj | 17:c9afe1a7b423 | 36 | bool getSubtractFlag(); |
dicarloj | 17:c9afe1a7b423 | 37 | bool getHalfCarryFlag(); |
dicarloj | 17:c9afe1a7b423 | 38 | bool getCarryFlag(); |
dicarloj | 17:c9afe1a7b423 | 39 | void setZeroFlag(); |
dicarloj | 17:c9afe1a7b423 | 40 | void clearZeroFlag(); |
dicarloj | 17:c9afe1a7b423 | 41 | void setSubtractFlag(); |
dicarloj | 17:c9afe1a7b423 | 42 | void clearSubtractFlag(); |
dicarloj | 17:c9afe1a7b423 | 43 | void setHalfCarryFlag(); |
dicarloj | 17:c9afe1a7b423 | 44 | void clearHalfCarryFlag(); |
dicarloj | 17:c9afe1a7b423 | 45 | void setCarryFlag(); |
dicarloj | 17:c9afe1a7b423 | 46 | void clearCarryFlag(); |
dicarloj | 17:c9afe1a7b423 | 47 | void clearAllFlags(); |
dicarloj | 17:c9afe1a7b423 | 48 | |
dicarloj | 17:c9afe1a7b423 | 49 | #endif //GBC_CPU_H |