LMMS
Loading...
Searching...
No Matches
Ay_Cpu.h
Go to the documentation of this file.
1// Z80 CPU emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef AY_CPU_H
5#define AY_CPU_H
6
7#include "blargg_endian.h"
8
9typedef blargg_long cpu_time_t;
10
11// must be defined by caller
12void ay_cpu_out( class Ay_Cpu*, cpu_time_t, unsigned addr, int data );
13int ay_cpu_in( class Ay_Cpu*, unsigned addr );
14
15class Ay_Cpu {
16public:
17 // Clear all registers and keep pointer to 64K memory passed in
18 void reset( void* mem_64k );
19
20 // Run until specified time is reached. Returns true if suspicious/unsupported
21 // instruction was encountered at any point during run.
22 bool run( cpu_time_t end_time );
23
24 // Time of beginning of next instruction
25 cpu_time_t time() const { return state->time + state->base; }
26
27 // Alter current time. Not supported during run() call.
28 void set_time( cpu_time_t t ) { state->time = t - state->base; }
29 void adjust_time( int delta ) { state->time += delta; }
30
31 #if BLARGG_BIG_ENDIAN
32 struct regs_t { uint8_t b, c, d, e, h, l, flags, a; };
33 #else
34 struct regs_t { uint8_t c, b, e, d, l, h, a, flags; };
35 #endif
36 BOOST_STATIC_ASSERT( sizeof (regs_t) == 8 );
37
38 struct pairs_t { uint16_t bc, de, hl, fa; };
39
40 // Registers are not updated until run() returns
41 struct registers_t {
46 union {
47 regs_t b; // b.b, b.c, b.d, b.e, b.h, b.l, b.flags, b.a
48 pairs_t w; // w.bc, w.de, w.hl. w.fa
49 };
50 union {
51 regs_t b;
52 pairs_t w;
53 } alt;
59 };
60 //registers_t r; (below for efficiency)
61
62 // can read this far past end of memory
63 enum { cpu_padding = 0x100 };
64
65public:
66 Ay_Cpu();
67private:
68 uint8_t szpc [0x200];
75 state_t* state; // points to state_ or a local copy within run()
78public:
80};
81
83{
84 cpu_time_t delta = state->base - t;
85 state->base = t;
86 state->time += delta;
87}
88
89#endif
void ay_cpu_out(class Ay_Cpu *, cpu_time_t, unsigned addr, int data)
Definition Ay_Emu.cpp:330
blargg_long cpu_time_t
Definition Ay_Cpu.h:9
int ay_cpu_in(class Ay_Cpu *, unsigned addr)
Definition Ay_Emu.cpp:353
uint8_t a
Definition Spc_Cpu.h:141
Definition Ay_Cpu.h:15
registers_t r
Definition Ay_Cpu.h:79
void set_time(cpu_time_t t)
Definition Ay_Cpu.h:28
void reset(void *mem_64k)
Definition Ay_Cpu.cpp:75
cpu_time_t end_time_
Definition Ay_Cpu.h:70
bool run(cpu_time_t end_time)
Definition Ay_Cpu.cpp:139
uint8_t szpc[0x200]
Definition Ay_Cpu.h:68
cpu_time_t time() const
Definition Ay_Cpu.h:25
Ay_Cpu()
Definition Ay_Cpu.cpp:59
uint8_t * mem
Definition Ay_Cpu.h:69
BOOST_STATIC_ASSERT(sizeof(regs_t)==8)
void set_end_time(cpu_time_t t)
Definition Ay_Cpu.h:82
state_t * state
Definition Ay_Cpu.h:75
state_t state_
Definition Ay_Cpu.h:76
void adjust_time(int delta)
Definition Ay_Cpu.h:29
@ cpu_padding
Definition Ay_Cpu.h:63
* e
Definition inflate.c:1404
UINT_D64 w
Definition inflate.c:942
int * l
Definition inflate.c:1579
struct huft * t
Definition inflate.c:943
unsigned d
Definition inflate.c:940
JSAMPIMAGE data
Definition jpeglib.h:945
unsigned short uint16_t
Definition mid.cpp:99
unsigned char uint8_t
Definition mid.cpp:98
Definition Ay_Cpu.h:38
uint16_t fa
Definition Ay_Cpu.h:38
uint16_t de
Definition Ay_Cpu.h:38
uint16_t hl
Definition Ay_Cpu.h:38
uint16_t bc
Definition Ay_Cpu.h:38
Definition Ay_Cpu.h:41
uint16_t ix
Definition Ay_Cpu.h:44
uint16_t iy
Definition Ay_Cpu.h:45
uint8_t im
Definition Ay_Cpu.h:58
union Ay_Cpu::registers_t::@200166171302133270263121263367042327035377035050 alt
uint8_t iff1
Definition Ay_Cpu.h:54
uint8_t iff2
Definition Ay_Cpu.h:55
pairs_t w
Definition Ay_Cpu.h:48
uint8_t r
Definition Ay_Cpu.h:56
uint16_t pc
Definition Ay_Cpu.h:42
uint16_t sp
Definition Ay_Cpu.h:43
uint8_t i
Definition Ay_Cpu.h:57
regs_t b
Definition Ay_Cpu.h:47
Definition Ay_Cpu.h:34
uint8_t a
Definition Ay_Cpu.h:34
uint8_t c
Definition Ay_Cpu.h:34
uint8_t l
Definition Ay_Cpu.h:34
uint8_t flags
Definition Ay_Cpu.h:34
uint8_t b
Definition Ay_Cpu.h:34
uint8_t d
Definition Ay_Cpu.h:34
uint8_t h
Definition Ay_Cpu.h:34
uint8_t e
Definition Ay_Cpu.h:34
Definition Ay_Cpu.h:71
cpu_time_t time
Definition Ay_Cpu.h:73
cpu_time_t base
Definition Ay_Cpu.h:72
return c
Definition crypt.c:175
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
b
Definition crypt.c:628