61 for (tmp = name; (*tmp !=
'\0'); ++tmp)
77 vfprintf(stderr, s, vl);
82 static inline void (*(*debug_(
const char *file,
unsigned int line,
83 const char *func))(
const char *, ...))()
89 #define DEBUG(s) (((debug_(__FILE__, __LINE__, __func__))s)(), (void)0)
91 #define DEBUG(s) (void)0
94 extern "C" int test_ctv(
unsigned char *dest,
int len);
115 uint8_t
mem[(0x10100 + 0x35)];
124 int poke_vram (
int addr,
unsigned char d);
125 int poke_cram (
int addr,
unsigned char d);
226 #define MCLK_CYCLES_PER_LINE 3416
227 #define M68K_CYCLES_PER_LINE (MCLK_CYCLES_PER_LINE / 7)
228 #define M68K_CYCLES_HBLANK ((M68K_CYCLES_PER_LINE * 36) / 209)
229 #define M68K_CYCLES_VDELAY ((M68K_CYCLES_PER_LINE * 36) / 156)
230 #define Z80_CYCLES_PER_LINE (MCLK_CYCLES_PER_LINE / 15)
231 #define Z80_CYCLES_HBLANK ((Z80_CYCLES_PER_LINE * 36) / 209)
232 #define Z80_CYCLES_VDELAY ((Z80_CYCLES_PER_LINE * 36) / 156)
233 #define NTSC_LINES 262
234 #define NTSC_VBLANK 224
236 #define NTSC_MCLK (MCLK_CYCLES_PER_LINE * NTSC_LINES * NTSC_HZ)
237 #define PAL_LINES 312
238 #define PAL_VBLANK 240
240 #define PAL_MCLK (MCLK_CYCLES_PER_LINE * PAL_LINES * PAL_HZ)
242 #define MD_UP_MASK (1) // 0x00001
243 #define MD_DOWN_MASK (1 << 1) // 0x00002
244 #define MD_LEFT_MASK (1 << 2) // 0x00004
245 #define MD_RIGHT_MASK (1 << 3) // 0x00008
246 #define MD_B_MASK (1 << 4) // 0x00010
247 #define MD_C_MASK (1 << 5) // 0x00020
248 #define MD_A_MASK (1 << 12) // 0x01000
249 #define MD_START_MASK (1 << 13) // 0x02000
250 #define MD_Z_MASK (1 << 16) // 0x10000
251 #define MD_Y_MASK (1 << 17) // 0x20000
252 #define MD_X_MASK (1 << 18) // 0x40000
253 #define MD_MODE_MASK (1 << 19) // 0x80000
254 #define MD_PAD_UNTOUCHED 0xf303f
274 *mem = (0x00 | 0x40);
287 *mem = (0x80 | 0x40);
312 static class md* md_musa;
313 unsigned int md_musa_ref;
314 class md* md_musa_prev;
316 void md_set_musa(
bool set);
319 static class md* md_cyclone;
320 unsigned int md_cyclone_ref;
321 class md* md_cyclone_prev;
323 void md_set_cyclone(
bool set);
324 uintptr_t checkpc(uintptr_t pc);
327 static class md* md_star;
328 unsigned int md_star_ref;
329 class md* md_star_prev;
331 void md_set_star(
bool set);
334 static class md* md_mz80;
335 unsigned int md_mz80_ref;
336 class md* md_mz80_prev;
338 void md_set_mz80(
bool set);
341 static class md* md_drz80;
342 unsigned int md_drz80_ref;
343 class md* md_drz80_prev;
345 void md_set_drz80(
bool set);
387 struct DrZ80 drz80 __attribute__((packed));
388 friend uintptr_t drz80_rebaseSP(uint16_t new_sp);
389 uintptr_t drz80_rebase_pc(uint16_t address);
390 friend uintptr_t drz80_rebasePC(uint16_t new_pc);
391 uintptr_t drz80_rebase_sp(uint16_t address);
392 friend void drz80_irq_callback();
400 friend void star_irq_callback(
void);
404 void musa_memory_map();
406 friend int musa_irq_callback(
int);
410 friend int cyclone_irq_callback(
int);
474 for(
int i = 1;
i < 0x138; ++
i)
530 int plug_in(
unsigned char *cart,
int len);
599 int patch(
const char *list,
unsigned int *errors,
600 unsigned int *applied,
unsigned int *reverted);
617 #define M68K_SR_CARRY (1<<0)
618 #define M68K_SR_OVERFLOW (1<<1)
619 #define M68K_SR_ZERO (1<<2)
620 #define M68K_SR_NEGATIVE (1<<3)
621 #define M68K_SR_EXTEND (1<<4)
623 #define M68K_SR_IP_MASK1 (1<<8)
624 #define M68K_SR_IP_MASK2 (1<<9)
625 #define M68K_SR_IP_MASK3 (1<<10)
626 #define M68K_SR_MI_STATE (1<<12)
627 #define M68K_SR_SUP_STATE (1<<13)
628 #define M68K_SR_TRACE_EN1 (1<<14)
629 #define M68K_SR_TRACE_EN2 (1<<15)
631 #define Z80_SR_CARRY (1<<0)
632 #define Z80_SR_ADD_SUB (1<<1)
633 #define Z80_SR_PARITY_OVERFLOW (1<<2)
634 #define Z80_SR_HALF_CARRY (1<<4)
635 #define Z80_SR_ZERO (1<<6)
636 #define Z80_SR_SIGN (1<<7)