MAX_CMD_LEN = 4, /* Each assembly command is 3 characeters long */
/* The stack works from the top down in page $100 to $1ff */
STACK_TOP = 0x1ff,
- STACK_BOTTOM = 0x100
+ STACK_BOTTOM = 0x100,
+ PROG_START = 0x600 /* The default entry point for the program */
};
typedef enum{
ZERO, ZERO_X, ZERO_Y,
ABS_VALUE, ABS_OR_BRANCH, ABS_X, ABS_Y,
ABS_LABEL_X, ABS_LABEL_Y, DCB_PARAM
-} AddrMode;
+} m6502_AddrMode;
typedef struct machine_6502 machine_6502;
Bit8 INDY;
Bit8 SNGL;
Bit8 BRA;
- void (*func) (machine_6502*, AddrMode);
-} Opcodes;
+ void (*func) (machine_6502*, m6502_AddrMode);
+} m6502_Opcodes;
/* Used to cache the index of each opcode */
typedef struct {
Bit8 index;
- AddrMode adm;
-} OpcodeIndex;
+ m6502_AddrMode adm;
+} m6502_OpcodeIndex;
/* Plotter is a function that will be called everytime a pixel
needs to be updated. The first two parameter are the x and y
parameter. You can use this parameter to store state information.
*/
-typedef void (*Plotter) (Bit8, Bit8, Bit8, void*);
+typedef void (*m6502_Plotter) (Bit8, Bit8, Bit8, void*);
struct machine_6502 {
BOOL codeCompiledOK;
Bit8 regP;
Bit16 regPC; /* A pair of 8 bit registers */
Bit16 regSP;
+ Bit16 defaultCodePC;
Bit8 memory[MEM_64K];
BOOL runForever;
int labelPtr;
BOOL codeRunning;
int myInterval;
- Opcodes opcodes[NUM_OPCODES];
+ m6502_Opcodes opcodes[NUM_OPCODES];
int screen[32][32];
int codeLen;
- OpcodeIndex opcache[0xff];
- Plotter plot;
+ m6502_OpcodeIndex opcache[0xff];
+ m6502_Plotter plot;
void *plotterState;
};
/* build6502() - Creates an instance of the 6502 machine */
-machine_6502 *build6502(void);
+machine_6502 *m6502_build(void);
/* destroy6502() - compile the file and exectue it until the program
is finished */
-void destroy6502(machine_6502 *machine);
+void m6502_destroy6502(machine_6502 *machine);
/* eval_file() - Compiles and runs a file until the program is
finished */
-void eval_file(machine_6502 *machine, char *filename,
- Plotter plot, void *plotterState);
+void m6502_eval_file(machine_6502 *machine, const char *filename,
+ m6502_Plotter plot, void *plotterState);
/* start_eval_file() - Compile the file and execute the first
instruction */
-void start_eval_file(machine_6502 *machine, char *filename,
- Plotter plot, void *plotterState);
+void m6502_start_eval_file(machine_6502 *machine, const char *filename,
+ m6502_Plotter plot, void *plotterState);
-void start_eval_binary(machine_6502 *machine, Bit8 *program,
+/* XXX
+void m6502_start_eval_binary(machine_6502 *machine, Bit8 *program,
unsigned int proglen,
Plotter plot, void *plotterState);
+*/
+
+void m6502_start_eval_string(machine_6502 *machine, const char *code,
+ m6502_Plotter plot, void *plotterState);
/* next_eval() - Execute the next insno of machine instructions */
-void next_eval(machine_6502 *machine, int insno);
+void m6502_next_eval(machine_6502 *machine, int insno);
/* hexDump() - Dumps memory to output */
-void hexDump(machine_6502 *machine, Bit16 start,
+void m6502_hexDump(machine_6502 *machine, Bit16 start,
Bit16 numbytes, FILE *output);
+/* Disassemble() - Prints the assembly code for the program currently
+ loaded in memory.*/
+void m6502_disassemble(machine_6502 *machine, FILE *output);
+
/* trace() - Prints to output the current value of registers, the
current nmemonic, memory address and value. */
-void trace(machine_6502 *machine, FILE *output);
+void m6502_trace(machine_6502 *machine, FILE *output);
/* save_program() - Writes a binary file of the program loaded in
memory. */
-void save_program(machine_6502 *machine, char *filename);
-
+/* XXX
+void save_program(machine_6502 *machine, const char *filename);
+*/
#endif /* __ASM6502_H__ */