LMMS
Loading...
Searching...
No Matches
Sap_Cpu.h
Go to the documentation of this file.
1// Atari 6502 CPU emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef SAP_CPU_H
5#define SAP_CPU_H
6
7#include "blargg_common.h"
8
9typedef blargg_long sap_time_t; // clock cycle count
10typedef unsigned sap_addr_t; // 16-bit address
11enum { future_sap_time = INT_MAX / 2 + 1 };
12
13class Sap_Cpu {
14public:
15 // Clear all registers and keep pointer to 64K memory passed in
16 void reset( void* mem_64k );
17
18 // Run until specified time is reached. Returns true if suspicious/unsupported
19 // instruction was encountered at any point during run.
20 bool run( sap_time_t end_time );
21
22 // Registers are not updated until run() returns (except I flag in status)
32
33 enum { idle_addr = 0xFEFF };
34
35 // Time of beginning of next instruction to be executed
36 sap_time_t time() const { return state->time + state->base; }
37 void set_time( sap_time_t t ) { state->time = t - state->base; }
38 void adjust_time( int delta ) { state->time += delta; }
39
40 sap_time_t irq_time() const { return irq_time_; }
42
43 sap_time_t end_time() const { return end_time_; }
45
46public:
48 enum { irq_inhibit = 0x04 };
49private:
54 state_t* state; // points to state_ or a local copy within run()
59
61};
62
64{
65 if ( irq < t && !(r.status & irq_inhibit) ) t = irq;
66 sap_time_t delta = state->base - t;
67 state->base = t;
68 return delta;
69}
70
72{
73 state->time += update_end_time( end_time_, (irq_time_ = t) );
74}
75
77{
78 state->time += update_end_time( (end_time_ = t), irq_time_ );
79}
80
81#endif
@ future_sap_time
Definition Sap_Cpu.h:11
unsigned sap_addr_t
Definition Sap_Cpu.h:10
blargg_long sap_time_t
Definition Sap_Cpu.h:9
sap_time_t time() const
Definition Sap_Cpu.h:36
state_t state_
Definition Sap_Cpu.h:55
void adjust_time(int delta)
Definition Sap_Cpu.h:38
sap_time_t irq_time() const
Definition Sap_Cpu.h:40
bool run(sap_time_t end_time)
Definition Sap_Cpu.cpp:71
void set_end_time(sap_time_t)
Definition Sap_Cpu.h:76
void reset(void *mem_64k)
Definition Sap_Cpu.cpp:41
sap_time_t end_time_
Definition Sap_Cpu.h:57
void set_time(sap_time_t t)
Definition Sap_Cpu.h:37
sap_time_t update_end_time(sap_time_t end, sap_time_t irq)
Definition Sap_Cpu.h:63
sap_time_t irq_time_
Definition Sap_Cpu.h:56
registers_t r
Definition Sap_Cpu.h:31
void set_irq_time(sap_time_t)
Definition Sap_Cpu.h:71
@ idle_addr
Definition Sap_Cpu.h:33
uint8_t * mem
Definition Sap_Cpu.h:58
Sap_Cpu()
Definition Sap_Cpu.h:47
state_t * state
Definition Sap_Cpu.h:54
@ irq_inhibit
Definition Sap_Cpu.h:48
sap_time_t end_time() const
Definition Sap_Cpu.h:43
struct huft * t
Definition inflate.c:943
unsigned short uint16_t
Definition mid.cpp:99
unsigned char uint8_t
Definition mid.cpp:98
Definition Sap_Cpu.h:23
uint16_t pc
Definition Sap_Cpu.h:24
uint8_t status
Definition Sap_Cpu.h:28
uint8_t x
Definition Sap_Cpu.h:26
uint8_t y
Definition Sap_Cpu.h:27
uint8_t sp
Definition Sap_Cpu.h:29
uint8_t a
Definition Sap_Cpu.h:25
Definition Sap_Cpu.h:50
sap_time_t time
Definition Sap_Cpu.h:52
sap_time_t base
Definition Sap_Cpu.h:51