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