1 /***************************************************************************** 2 * 3 * m6509.h 4 * Portable 6509 emulator V1.0beta 5 * 6 * Copyright (c) 2000 Peter Trauner, all rights reserved. 7 * 8 * - This source code is released as freeware for non-commercial purposes. 9 * - You are free to use and redistribute this code in modified or 10 * unmodified form, provided you list me in the credits. 11 * - If you modify this source code, you must add a notice to each modified 12 * source file that it has been changed. If you're a nice person, you 13 * will clearly mark each change too. :) 14 * - If you wish to use this for commercial purposes, please contact me at 15 * pullmoll@t-online.de 16 * - The author of this copywritten work reserves the right to change the 17 * terms of its usage and license at any time, including retroactively 18 * - This entire notice must remain in the source code. 19 * 20 *****************************************************************************/ 21 22 #ifndef _M6509_H 23 #define _M6509_H 24 25 #include "cpuintrf.h" 26 #include "osd_cpu.h" 27 #include "m6502.h" 28 29 enum { 30 M6509_PC=1, M6509_S, M6509_P, M6509_A, M6509_X, M6509_Y, 31 M6509_EA, M6509_ZP, M6509_NMI_STATE, M6509_IRQ_STATE, M6509_SO_STATE, 32 M6509_PC_BANK, M6509_IND_BANK 33 }; 34 35 #define M6509_INT_NONE 0 36 #define M6509_INT_IRQ 1 37 #define M6509_INT_NMI 2 38 /* use cpu_set_irq_line(cpu, M6509_SET_OVERFLOW, level) 39 to change level of the so input line 40 positiv edge sets overflow flag */ 41 #define M6509_SET_OVERFLOW 3 42 43 #define M6509_NMI_VEC M6502_NMI_VEC 44 #define M6509_RST_VEC M6502_RST_VEC 45 #define M6509_IRQ_VEC M6502_IRQ_VEC 46 47 extern int m6509_ICount; /* cycle count */ 48 49 extern void m6509_reset(void *param); /* Reset registers to the initial values */ 50 extern void m6509_exit(void); /* Shut down CPU core */ 51 extern int m6509_execute(int cycles); /* Execute cycles - returns number of cycles actually run */ 52 extern unsigned m6509_get_context (void *dst); /* Get registers, return context size */ 53 extern void m6509_set_context (void *src); /* Set registers */ 54 extern unsigned m6509_get_pc (void); /* Get program counter */ 55 extern void m6509_set_pc (unsigned val); /* Set program counter */ 56 extern unsigned m6509_get_sp (void); /* Get stack pointer */ 57 extern void m6509_set_sp (unsigned val); /* Set stack pointer */ 58 extern unsigned m6509_get_reg (int regnum); 59 extern void m6509_set_reg (int regnum, unsigned val); 60 extern void m6509_set_nmi_line(int state); 61 extern void m6509_set_irq_line(int irqline, int state); 62 extern void m6509_set_irq_callback(int (*callback)(int irqline)); 63 extern void m6509_state_save(void *file); 64 extern void m6509_state_load(void *file); 65 extern const char *m6509_info(void *context, int regnum); 66 extern unsigned m6509_dasm(char *buffer, unsigned pc); 67 68 extern READ_HANDLER ( m6509_read_00000 ); 69 extern READ_HANDLER ( m6509_read_00001 ); 70 71 extern WRITE_HANDLER ( m6509_write_00000 ); 72 extern WRITE_HANDLER ( m6509_write_00001 ); 73 74 #endif /* _M6509_H */ 75 76 77