diff options
author | Ian C <ianc@noddybox.co.uk> | 2023-04-23 08:24:31 +0800 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2023-04-23 08:24:31 +0800 |
commit | 1d1e0acb5b4494f7c1b041e24e5de4f0614a150b (patch) | |
tree | f43094ced9e4b3dae4e9912eef606a9c567c635e /include/z80.h | |
parent | ef18a653053c30237a9aff27eea91d38bd308987 (diff) |
Updated Z80 emulation
Diffstat (limited to 'include/z80.h')
-rw-r--r-- | include/z80.h | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/include/z80.h b/include/z80.h index ef24fd0..c9bd107 100644 --- a/include/z80.h +++ b/include/z80.h @@ -56,20 +56,30 @@ typedef signed char Z80Relative; typedef unsigned short Z80Word; -/* A Z80 16-bit register. To access the HI/LO component use the indexes - Z80_HI_WORD and Z80_LO_WORD which will be initialised once Z80Init has been - called. +/* A Z80 16-bit register made up of 2 8-bit registers. */ +#ifdef Z80_LITTLE_ENDIAN +typedef struct +{ + Z80Byte lo; + Z80Byte hi; +} Z80RegPair; +#endif + +#ifdef Z80_BIG_ENDIAN +typedef struct +{ + Z80Byte hi; + Z80Byte lo; +} Z80RegPair; +#endif + typedef union { Z80Word w; - Z80Byte b[2]; + Z80RegPair b; } Z80Reg; -extern int Z80_HI_WORD; -extern int Z80_LO_WORD; - - /* The processor */ struct Z80Private; @@ -134,13 +144,23 @@ typedef int (*Z80Callback)(Z80 *cpu, Z80Val data); */ typedef enum { - eZ80_Instruction, /* data = no cycles since reset */ + eZ80_Instruction, /* data = cycles as returned by Z80Cycles */ eZ80_EDHook, /* data = byte after ED opcode (only for NOP opcodes) */ eZ80_Halt, /* data = 1 halt raised, 0 halt cleared by int */ eZ80_RETI, /* data = ignored */ eZ80_NO_CALLBACK /* leave at end */ } Z80CallbackReason; +/* Defines cycle timers +*/ +typedef enum +{ + Z80_TIMER_1, + Z80_TIMER_2, + Z80_TIMER_3, + Z80_NO_TIMERS +} Z80Timer; + /* Flags in the F register */ @@ -235,6 +255,11 @@ void Z80Exec(Z80 *cpu); Z80Val Z80Cycles(Z80 *cpu); void Z80ResetCycles(Z80 *cpu, Z80Val cycles); +/* Timers that count in cycle counts +*/ +Z80Val Z80GetTimer(Z80 *cpu, Z80Timer timer); +void Z80SetTimer(Z80 *cpu, Z80Timer timer, Z80Val cycles); + /* Set address to label mappings for the disassembler */ |