28 #include "sidplayfp/event.h"
29 #include "sidplayfp/component.h"
30 #include "sidplayfp/EventScheduler.h"
47 unsigned int rasterLines;
49 event_clock_t (
MOS656X::*clock)();
53 static const char *credit;
55 static const model_data_t modelData[];
59 static const int IRQ_RASTER = 1 << 0;
62 static const int IRQ_LIGHTPEN = 1 << 3;
72 event_clock_t (
MOS656X::*clock)();
74 event_clock_t rasterClk;
82 unsigned int maxRasters;
129 event_clock_t clockPAL();
130 event_clock_t clockNTSC();
131 event_clock_t clockOldNTSC();
134 void handleIrqState();
139 void badLineStateChange() { setBA(!
isBadLine); }
144 void rasterYIRQEdgeDetector()
149 activateIRQFlag(IRQ_RASTER);
156 void activateIRQFlag(
int flag)
167 unsigned int readRasterLineIRQ()
const
169 return (
regs[0x12] & 0xff) + ((
regs[0x11] & 0x80) << 1);
177 bool readDEN()
const {
return (
regs[0x11] & 0x10) != 0; }
179 bool evaluateIsBadLine()
const
193 inline void checkVblank()
196 if (
rasterY == (maxRasters - 1))
201 rasterYIRQEdgeDetector();
219 rasterYIRQEdgeDetector();
223 inline void updateMc()
228 for (
unsigned int i=0; i<8; i++, mask<<=1)
235 inline void updateMcBase()
238 for (
unsigned int i=0; i<8; i++, mask<<=1)
248 inline void checkSpriteDmaExp()
250 const uint8_t y =
rasterY & 0xff;
252 for (
unsigned int i=0; i<8; i++, mask<<=1)
264 inline void checkSpriteDma()
266 const uint8_t y =
rasterY & 0xff;
268 for (
unsigned int i=0; i<8; i++, mask<<=1)
278 inline void checkSpriteDisplay()
280 for (
unsigned int i=0; i<8; i++)
288 inline void startDma()
303 inline void startBadline()
314 virtual void interrupt (
bool state) = 0;
315 virtual void setBA (
bool state) = 0;
323 uint8_t
read(uint_least8_t addr);
333 void write(uint_least8_t addr, uint8_t data);
338 void chip(model_t model);
344 const char *credits()
const {
return credit; }
351 inline void MOS656X::startDma<0>()
353 setBA(!(sprite_dma & 0x01));
358 inline void MOS656X::endDma<7>()
uint8_t sprite_mc[8]
Definition: mos656x.h:122
bool vblanking
Definition: mos656x.h:103
bool areBadLinesEnabled
Definition: mos656x.h:94
bool rasterYIRQCondition
Definition: mos656x.h:100
bool isBadLine
Definition: mos656x.h:97
void event()
Definition: mos656x.cpp:213
unsigned int yscroll
Definition: mos656x.h:91
unsigned int lineCycle
Definition: mos656x.h:85
unsigned int cyclesPerLine
Definition: mos656x.h:80
Definition: component.h:28
uint8_t & sprite_y_expansion
Definition: mos656x.h:119
static const unsigned int LAST_DMA_LINE
Definition: mos656x.h:69
uint8_t read(uint_least8_t addr)
Definition: mos656x.cpp:93
uint8_t sprite_mc_base[8]
Definition: mos656x.h:121
uint8_t lpx
Definition: mos656x.h:115
uint8_t irqMask
Definition: mos656x.h:112
uint8_t regs[0x40]
Definition: mos656x.h:126
void write(uint_least8_t addr, uint8_t data)
Definition: mos656x.cpp:129
static const unsigned int FIRST_DMA_LINE
Definition: mos656x.h:66
uint8_t irqFlags
Definition: mos656x.h:109
uint8_t sprite_dma
Definition: mos656x.h:120
EventContext & event_context
Definition: mos656x.h:77
unsigned int rasterY
Definition: mos656x.h:88
bool lp_triggered
Definition: mos656x.h:106
virtual void cancel(Event &event)=0
uint8_t & sprite_enable
Definition: mos656x.h:119