mirror of
https://github.com/mauiaaron/apple2.git
synced 2025-01-07 16:31:25 +00:00
Lite refactor debugger interface
This commit is contained in:
parent
3ca0d9b618
commit
1c61071a11
424
src/meta/debug.c
424
src/meta/debug.c
File diff suppressed because it is too large
Load Diff
@ -22,39 +22,7 @@
|
||||
extern volatile bool is_debugging;
|
||||
|
||||
typedef enum {
|
||||
STEPPING = 0,
|
||||
NEXTING,
|
||||
FINISHING,
|
||||
UNTILING,
|
||||
TYPING,
|
||||
LOADING,
|
||||
GOING
|
||||
} stepping_type_t;
|
||||
|
||||
// FIXME TODO : make opaque type ...
|
||||
typedef struct stepping_struct_t {
|
||||
stepping_type_t step_type;
|
||||
uint16_t step_count;
|
||||
uint16_t step_frame;
|
||||
uint16_t step_pc;
|
||||
bool should_break;
|
||||
time_t timeout;
|
||||
const char *step_text;
|
||||
const bool step_deterministically;
|
||||
} stepping_struct_t;
|
||||
|
||||
#define DEBUGGER_BUF_X 39
|
||||
#define DEBUGGER_BUF_Y 22
|
||||
#define MAX_BRKPTS 16
|
||||
|
||||
/* debugger commands */
|
||||
enum token_type { MEM, DIS, REGS, SETMEM, STEP, FINISH, UNTIL, GO, VM,
|
||||
BREAK, WATCH, CLEAR, IGNORE, STATUS, OPCODES, LC, DRIVE,
|
||||
SEARCH, HELP, LOG, BSAVE, BLOAD, SAVE, FBSHA1, TYPE,
|
||||
LOAD, UNKNOWN };
|
||||
|
||||
typedef enum {
|
||||
addr_implied,
|
||||
addr_implied = 0,
|
||||
addr_accumulator,
|
||||
addr_immediate,
|
||||
addr_zeropage,
|
||||
@ -68,16 +36,17 @@ typedef enum {
|
||||
addr_indirect_y,
|
||||
addr_j_indirect, /* non-zeropage indirects, used in JMP only */
|
||||
addr_j_indirect_x,
|
||||
addr_relative
|
||||
addr_relative,
|
||||
NUM_ADDRESSING_MODES,
|
||||
} addressing_mode_t;
|
||||
|
||||
struct opcode_struct
|
||||
{
|
||||
typedef struct opcode_struct_s {
|
||||
const char *mnemonic;
|
||||
addressing_mode_t mode;
|
||||
};
|
||||
} opcode_struct_s;
|
||||
|
||||
extern const struct opcode_struct *opcodes;
|
||||
extern const struct opcode_struct_s *opcodes;
|
||||
extern const char* const disasm_templates[NUM_ADDRESSING_MODES];
|
||||
|
||||
#ifdef INTERFACE_CLASSIC
|
||||
void c_interface_debugging(void);
|
||||
@ -91,10 +60,4 @@ void c_debugger_set_timeout(const unsigned int secs);
|
||||
bool c_debugger_set_watchpoint(const uint16_t addr);
|
||||
void c_debugger_clear_watchpoints(void);
|
||||
|
||||
extern const struct opcode_struct opcodes_6502[256];
|
||||
extern const struct opcode_struct opcodes_65c02[256];
|
||||
extern const struct opcode_struct opcodes_undoc[256];
|
||||
extern const char* const disasm_templates[15];
|
||||
extern const uint8_t opcodes_65c02_numargs[256];
|
||||
|
||||
#endif
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
/* process includes only the second time we parse this file. */
|
||||
#include "common.h"
|
||||
#include "meta/debug_private.h"
|
||||
|
||||
#define debugtext yytext
|
||||
|
||||
@ -57,7 +58,7 @@ extern void set_halt_65c02(void);
|
||||
extern void clear_halt_65c02(void);
|
||||
extern void clear_halt_opcode(uint8_t opcode);
|
||||
extern void show_opcode_breakpts(void);
|
||||
extern int debugger_go(stepping_struct_t s);
|
||||
extern int debugger_go(stepping_struct_s s);
|
||||
extern void fb_sha1(void);
|
||||
|
||||
/*
|
||||
@ -473,7 +474,7 @@ ADDRS [0-9a-fA-F]+
|
||||
|
||||
{BOS}(st?e?p?|ne?x?t?){EOS} {
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = STEPPING,
|
||||
.step_count = 1
|
||||
};
|
||||
@ -493,7 +494,7 @@ ADDRS [0-9a-fA-F]+
|
||||
arg1 = (int)strtol(debugtext, (char**)NULL, 16);
|
||||
if ((arg1 < 1) || (arg1 > 255)) arg1 = 255;
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = STEPPING,
|
||||
.step_count = arg1
|
||||
};
|
||||
@ -508,7 +509,7 @@ ADDRS [0-9a-fA-F]+
|
||||
|
||||
{BOS}fi?n?i?s?h?{EOS} {
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = FINISHING,
|
||||
.step_frame = 1
|
||||
};
|
||||
@ -546,9 +547,12 @@ ADDRS [0-9a-fA-F]+
|
||||
case addr_j_indirect_x:
|
||||
delta = 3;
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = UNTILING,
|
||||
.step_pc = run_args.cpu65_pc + delta
|
||||
};
|
||||
@ -564,7 +568,7 @@ ADDRS [0-9a-fA-F]+
|
||||
/* DANGEROUS! */
|
||||
run_args.cpu65_pc = (int)strtol(debugtext, (char**)NULL, 16);
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = GOING
|
||||
};
|
||||
|
||||
@ -573,7 +577,7 @@ ADDRS [0-9a-fA-F]+
|
||||
}
|
||||
|
||||
{BOS}go?{EOS} {
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = GOING
|
||||
};
|
||||
|
||||
@ -797,7 +801,7 @@ ADDRS [0-9a-fA-F]+
|
||||
buf[len] = '\r';
|
||||
buf[len+1] = '\0';
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = TYPING,
|
||||
.step_text = buf
|
||||
};
|
||||
@ -827,7 +831,7 @@ ADDRS [0-9a-fA-F]+
|
||||
while (fgets(buf, DEBUG_BUFSZ, fp)) {
|
||||
LOG("%s", buf);
|
||||
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = LOADING,
|
||||
.step_text = buf
|
||||
};
|
||||
@ -840,7 +844,7 @@ ADDRS [0-9a-fA-F]+
|
||||
fclose(fp);
|
||||
|
||||
if (ch == -1) {
|
||||
stepping_struct_t s = {
|
||||
stepping_struct_s s = {
|
||||
.step_type = GOING,
|
||||
};
|
||||
debugger_go(s);
|
||||
|
72
src/meta/debug_private.h
Normal file
72
src/meta/debug_private.h
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Apple // emulator for *ix
|
||||
*
|
||||
* This software package is subject to the GNU General Public License
|
||||
* version 3 or later (your choice) as published by the Free Software
|
||||
* Foundation.
|
||||
*
|
||||
* Copyright 2019 Aaron Culliney
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DEBUG_PRIVATE_H_
|
||||
#define _DEBUG_PRIVATE_H_ 1
|
||||
|
||||
#define DEBUGGER_BUF_X 39
|
||||
#define DEBUGGER_BUF_Y 22
|
||||
#define MAX_BRKPTS 16
|
||||
|
||||
typedef enum stepping_type_t {
|
||||
STEPPING = 0,
|
||||
NEXTING,
|
||||
FINISHING,
|
||||
UNTILING,
|
||||
TYPING,
|
||||
LOADING,
|
||||
GOING
|
||||
} stepping_type_t;
|
||||
|
||||
typedef struct stepping_struct_s {
|
||||
stepping_type_t step_type;
|
||||
uint16_t step_count;
|
||||
uint16_t step_frame;
|
||||
uint16_t step_pc;
|
||||
bool should_break;
|
||||
time_t timeout;
|
||||
const char *step_text;
|
||||
const bool step_deterministically;
|
||||
} stepping_struct_s;
|
||||
|
||||
// debugger commands
|
||||
enum {
|
||||
BLOAD,
|
||||
BREAK,
|
||||
BSAVE,
|
||||
CLEAR,
|
||||
DIS,
|
||||
DRIVE,
|
||||
FBSHA1,
|
||||
FINISH,
|
||||
GO,
|
||||
HELP,
|
||||
IGNORE,
|
||||
LC,
|
||||
LOAD,
|
||||
LOG,
|
||||
MEM,
|
||||
OPCODES,
|
||||
REGS,
|
||||
SAVE,
|
||||
SEARCH,
|
||||
SETMEM,
|
||||
STATUS,
|
||||
STEP,
|
||||
TYPE,
|
||||
UNTIL,
|
||||
VM,
|
||||
WATCH,
|
||||
// ...
|
||||
UNKNOWN,
|
||||
};
|
||||
|
||||
#endif
|
@ -12,6 +12,7 @@
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "meta/debug_private.h"
|
||||
|
||||
#include <test/sha1.h>
|
||||
|
||||
@ -30,12 +31,10 @@
|
||||
#define SW_DHIRES 0xC05E
|
||||
#define SW_IOUDIS 0xC07E
|
||||
|
||||
const struct opcode_struct *opcodes;
|
||||
|
||||
static char input_str[1024] = { 0 }; // ASCII values
|
||||
static bool input_deterministically = false; // slows down testing ...
|
||||
|
||||
static stepping_struct_t stepping_struct = { 0 };
|
||||
static stepping_struct_s stepping_struct = { 0 };
|
||||
static unsigned int stepping_timeout = 0;
|
||||
|
||||
volatile bool is_debugging = false;
|
||||
@ -1265,7 +1264,7 @@ bool c_debugger_should_break() {
|
||||
/* -------------------------------------------------------------------------
|
||||
debugger_go () - step into or step over commands
|
||||
------------------------------------------------------------------------- */
|
||||
int debugger_go(stepping_struct_t s) {
|
||||
int debugger_go(stepping_struct_s s) {
|
||||
memcpy(&stepping_struct, &s, sizeof(s));
|
||||
|
||||
int ch = begin_cpu_stepping();
|
||||
@ -1418,8 +1417,6 @@ void c_interface_debugging(void) {
|
||||
int ch;
|
||||
int command_pos = PROMPT_X;
|
||||
|
||||
opcodes = opcodes_65c02;
|
||||
|
||||
/* initialize the buffers */
|
||||
for (i=0; i<BUF_Y; i++)
|
||||
{
|
||||
@ -1512,7 +1509,7 @@ void c_debugger_go(void) {
|
||||
bool deterministically = input_deterministically;
|
||||
input_deterministically = false;
|
||||
|
||||
stepping_struct_t s = (stepping_struct_t){
|
||||
stepping_struct_s s = (stepping_struct_s){
|
||||
.step_deterministically = deterministically,
|
||||
.step_text = buf,
|
||||
.step_type = GOING,
|
||||
|
@ -15,8 +15,7 @@
|
||||
|
||||
#include "common.h"
|
||||
|
||||
const char * const disasm_templates[15] =
|
||||
{
|
||||
const char * const disasm_templates[NUM_ADDRESSING_MODES] = {
|
||||
"", // addr_implied
|
||||
"A", // addr_accumulator
|
||||
"#$%02X", // addr_immediate
|
||||
@ -34,268 +33,7 @@ const char * const disasm_templates[15] =
|
||||
"$%04X (%c%02X)" // addr_relative
|
||||
};
|
||||
|
||||
const struct opcode_struct opcodes_6502[256] =
|
||||
{
|
||||
{ "BRK", addr_implied }, // 0x00
|
||||
{ "ORA", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_zeropage },
|
||||
{ "ASL", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PHP", addr_implied }, // 0x08
|
||||
{ "ORA", addr_immediate },
|
||||
{ "ASL", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_absolute },
|
||||
{ "ASL", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BPL", addr_relative }, // 0x10
|
||||
{ "ORA", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_zeropage_x },
|
||||
{ "ASL", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CLC", addr_implied }, // 0x18
|
||||
{ "ORA", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_absolute_x },
|
||||
{ "ASL", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "JSR", addr_absolute }, // 0x20
|
||||
{ "AND", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "BIT", addr_zeropage },
|
||||
{ "AND", addr_zeropage },
|
||||
{ "ROL", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PLP", addr_implied }, // 0x28
|
||||
{ "AND", addr_immediate },
|
||||
{ "ROL", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "BIT", addr_absolute },
|
||||
{ "AND", addr_absolute },
|
||||
{ "ROL", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BMI", addr_relative }, // 0x30
|
||||
{ "AND", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "AND", addr_zeropage_x },
|
||||
{ "ROL", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "SEC", addr_implied }, // 0x38
|
||||
{ "AND", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "AND", addr_absolute_x },
|
||||
{ "ROL", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "RTI", addr_implied }, // 0x40
|
||||
{ "EOR", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "EOR", addr_zeropage },
|
||||
{ "LSR", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PHA", addr_implied }, // 0x48
|
||||
{ "EOR", addr_immediate },
|
||||
{ "LSR", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "JMP", addr_absolute },
|
||||
{ "EOR", addr_absolute },
|
||||
{ "LSR", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BVC", addr_relative }, // 0x50
|
||||
{ "EOR", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "EOR", addr_zeropage_x },
|
||||
{ "LSR", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CLI", addr_implied }, // 0x58
|
||||
{ "EOR", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "EOR", addr_absolute_x },
|
||||
{ "LSR", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "RTS", addr_implied }, // 0x60
|
||||
{ "ADC", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ADC", addr_zeropage },
|
||||
{ "ROR", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PLA", addr_implied }, // 0x68
|
||||
{ "ADC", addr_immediate },
|
||||
{ "ROR", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "JMP", addr_j_indirect },
|
||||
{ "ADC", addr_absolute },
|
||||
{ "ROR", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BVS", addr_relative }, // 0x70
|
||||
{ "ADC", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ADC", addr_zeropage_x },
|
||||
{ "ROR", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "SEI", addr_implied }, // 0x78
|
||||
{ "ADC", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ADC", addr_absolute_x },
|
||||
{ "ROR", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied }, // 0x80
|
||||
{ "STA", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STY", addr_zeropage },
|
||||
{ "STA", addr_zeropage },
|
||||
{ "STX", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "DEY", addr_implied }, // 0x00
|
||||
{ "???", addr_implied },
|
||||
{ "TXA", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STY", addr_absolute },
|
||||
{ "STA", addr_absolute },
|
||||
{ "STX", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BCC", addr_relative }, // 0x08
|
||||
{ "STA", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STY", addr_zeropage_x },
|
||||
{ "STA", addr_zeropage_x },
|
||||
{ "STX", addr_zeropage_y },
|
||||
{ "???", addr_implied },
|
||||
{ "TYA", addr_implied }, // 0x10
|
||||
{ "STA", addr_absolute_y },
|
||||
{ "TXS", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STA", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_immediate }, // 0x18
|
||||
{ "LDA", addr_indirect_x },
|
||||
{ "LDX", addr_immediate },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_zeropage },
|
||||
{ "LDA", addr_zeropage },
|
||||
{ "LDX", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "TAY", addr_implied }, // 0x20
|
||||
{ "LDA", addr_immediate },
|
||||
{ "TAX", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_absolute },
|
||||
{ "LDA", addr_absolute },
|
||||
{ "LDX", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BCS", addr_relative }, // 0x28
|
||||
{ "LDA", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_zeropage_x },
|
||||
{ "LDA", addr_zeropage_x },
|
||||
{ "LDX", addr_zeropage_y },
|
||||
{ "???", addr_implied },
|
||||
{ "CLV", addr_implied }, // 0x30
|
||||
{ "LDA", addr_absolute_y },
|
||||
{ "TSX", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_absolute_x },
|
||||
{ "LDA", addr_absolute_x },
|
||||
{ "LDX", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "CPY", addr_immediate }, // 0x38
|
||||
{ "CMP", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPY", addr_zeropage },
|
||||
{ "CMP", addr_zeropage },
|
||||
{ "DEC", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "INY", addr_implied }, // 0x40
|
||||
{ "CMP", addr_immediate },
|
||||
{ "DEX", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPY", addr_absolute },
|
||||
{ "CMP", addr_absolute },
|
||||
{ "DEC", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BNE", addr_relative }, // 0x48
|
||||
{ "CMP", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CMP", addr_zeropage_x },
|
||||
{ "DEC", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CLD", addr_implied }, // 0x50
|
||||
{ "CMP", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CMP", addr_absolute_x },
|
||||
{ "DEC", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CPX", addr_immediate }, // 0x58
|
||||
{ "SBC", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPX", addr_zeropage },
|
||||
{ "SBC", addr_zeropage },
|
||||
{ "INC", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "INX", addr_implied }, // 0x60
|
||||
{ "SBC", addr_immediate },
|
||||
{ "NOP", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPX", addr_absolute },
|
||||
{ "SBC", addr_absolute },
|
||||
{ "INC", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BEQ", addr_relative }, // 0x68
|
||||
{ "SBC", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "SBC", addr_zeropage_x },
|
||||
{ "INC", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "SED", addr_implied }, // 0x70
|
||||
{ "SBC", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "SBC", addr_absolute_x },
|
||||
{ "INC", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
};
|
||||
|
||||
const struct opcode_struct opcodes_65c02[256] =
|
||||
{
|
||||
const struct opcode_struct_s opcodes_65c02[256] = {
|
||||
{ "BRK", addr_implied }, // 0x00
|
||||
{ "ORA", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
@ -554,8 +292,288 @@ const struct opcode_struct opcodes_65c02[256] =
|
||||
{ "???", addr_implied },
|
||||
};
|
||||
|
||||
const struct opcode_struct opcodes_undoc[256] =
|
||||
{
|
||||
const struct opcode_struct_s *opcodes = opcodes_65c02;
|
||||
|
||||
const uint8_t opcodes_65c02_numargs[256] = {
|
||||
0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0x00-0x0F
|
||||
1, 1, 1, 0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 2, 2, 0, // 0x10-0x1F
|
||||
2, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0x20-0x2F
|
||||
1, 1, 1, 0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 2, 2, 0, // 0x30-0x3F
|
||||
0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0x40-0x4F
|
||||
1, 1, 1, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 2, 2, 0, // 0x50-0x5F
|
||||
0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0x60-0x6F
|
||||
1, 1, 1, 0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 2, 2, 0, // 0x70-0x7F
|
||||
1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0x80-0x8F
|
||||
1, 1, 1, 0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 2, 2, 0, // 0x90-0x9F
|
||||
1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0xA0-0xAF
|
||||
1, 1, 1, 0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 2, 2, 0, // 0xB0-0xBF
|
||||
1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0xC0-0xCF
|
||||
1, 1, 1, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 2, 2, 0, // 0xD0-0xDF
|
||||
1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, // 0xE0-0xEF
|
||||
1, 1, 1, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 2, 2, 0, // 0xF0-0xFF
|
||||
};
|
||||
|
||||
#if 0
|
||||
const struct opcode_struct_s opcodes_6502[256] = {
|
||||
{ "BRK", addr_implied }, // 0x00
|
||||
{ "ORA", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_zeropage },
|
||||
{ "ASL", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PHP", addr_implied }, // 0x08
|
||||
{ "ORA", addr_immediate },
|
||||
{ "ASL", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_absolute },
|
||||
{ "ASL", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BPL", addr_relative }, // 0x10
|
||||
{ "ORA", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_zeropage_x },
|
||||
{ "ASL", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CLC", addr_implied }, // 0x18
|
||||
{ "ORA", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ORA", addr_absolute_x },
|
||||
{ "ASL", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "JSR", addr_absolute }, // 0x20
|
||||
{ "AND", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "BIT", addr_zeropage },
|
||||
{ "AND", addr_zeropage },
|
||||
{ "ROL", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PLP", addr_implied }, // 0x28
|
||||
{ "AND", addr_immediate },
|
||||
{ "ROL", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "BIT", addr_absolute },
|
||||
{ "AND", addr_absolute },
|
||||
{ "ROL", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BMI", addr_relative }, // 0x30
|
||||
{ "AND", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "AND", addr_zeropage_x },
|
||||
{ "ROL", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "SEC", addr_implied }, // 0x38
|
||||
{ "AND", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "AND", addr_absolute_x },
|
||||
{ "ROL", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "RTI", addr_implied }, // 0x40
|
||||
{ "EOR", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "EOR", addr_zeropage },
|
||||
{ "LSR", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PHA", addr_implied }, // 0x48
|
||||
{ "EOR", addr_immediate },
|
||||
{ "LSR", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "JMP", addr_absolute },
|
||||
{ "EOR", addr_absolute },
|
||||
{ "LSR", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BVC", addr_relative }, // 0x50
|
||||
{ "EOR", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "EOR", addr_zeropage_x },
|
||||
{ "LSR", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CLI", addr_implied }, // 0x58
|
||||
{ "EOR", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "EOR", addr_absolute_x },
|
||||
{ "LSR", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "RTS", addr_implied }, // 0x60
|
||||
{ "ADC", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ADC", addr_zeropage },
|
||||
{ "ROR", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "PLA", addr_implied }, // 0x68
|
||||
{ "ADC", addr_immediate },
|
||||
{ "ROR", addr_accumulator },
|
||||
{ "???", addr_implied },
|
||||
{ "JMP", addr_j_indirect },
|
||||
{ "ADC", addr_absolute },
|
||||
{ "ROR", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BVS", addr_relative }, // 0x70
|
||||
{ "ADC", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ADC", addr_zeropage_x },
|
||||
{ "ROR", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "SEI", addr_implied }, // 0x78
|
||||
{ "ADC", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "ADC", addr_absolute_x },
|
||||
{ "ROR", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied }, // 0x80
|
||||
{ "STA", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STY", addr_zeropage },
|
||||
{ "STA", addr_zeropage },
|
||||
{ "STX", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "DEY", addr_implied }, // 0x88
|
||||
{ "???", addr_implied },
|
||||
{ "TXA", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STY", addr_absolute },
|
||||
{ "STA", addr_absolute },
|
||||
{ "STX", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BCC", addr_relative }, // 0x90
|
||||
{ "STA", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STY", addr_zeropage_x },
|
||||
{ "STA", addr_zeropage_x },
|
||||
{ "STX", addr_zeropage_y },
|
||||
{ "???", addr_implied },
|
||||
{ "TYA", addr_implied }, // 0x98
|
||||
{ "STA", addr_absolute_y },
|
||||
{ "TXS", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "STA", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_immediate }, // 0xA0
|
||||
{ "LDA", addr_indirect_x },
|
||||
{ "LDX", addr_immediate },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_zeropage },
|
||||
{ "LDA", addr_zeropage },
|
||||
{ "LDX", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "TAY", addr_implied }, // 0xA8
|
||||
{ "LDA", addr_immediate },
|
||||
{ "TAX", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_absolute },
|
||||
{ "LDA", addr_absolute },
|
||||
{ "LDX", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BCS", addr_relative }, // 0xB0
|
||||
{ "LDA", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_zeropage_x },
|
||||
{ "LDA", addr_zeropage_x },
|
||||
{ "LDX", addr_zeropage_y },
|
||||
{ "???", addr_implied },
|
||||
{ "CLV", addr_implied }, // 0xB8
|
||||
{ "LDA", addr_absolute_y },
|
||||
{ "TSX", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "LDY", addr_absolute_x },
|
||||
{ "LDA", addr_absolute_x },
|
||||
{ "LDX", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "CPY", addr_immediate }, // 0xC0
|
||||
{ "CMP", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPY", addr_zeropage },
|
||||
{ "CMP", addr_zeropage },
|
||||
{ "DEC", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "INY", addr_implied }, // 0xC8
|
||||
{ "CMP", addr_immediate },
|
||||
{ "DEX", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPY", addr_absolute },
|
||||
{ "CMP", addr_absolute },
|
||||
{ "DEC", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BNE", addr_relative }, // 0xD0
|
||||
{ "CMP", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CMP", addr_zeropage_x },
|
||||
{ "DEC", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CLD", addr_implied }, // 0xD8
|
||||
{ "CMP", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CMP", addr_absolute_x },
|
||||
{ "DEC", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
{ "CPX", addr_immediate }, // 0xE0
|
||||
{ "SBC", addr_indirect_x },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPX", addr_zeropage },
|
||||
{ "SBC", addr_zeropage },
|
||||
{ "INC", addr_zeropage },
|
||||
{ "???", addr_implied },
|
||||
{ "INX", addr_implied }, // 0xE8
|
||||
{ "SBC", addr_immediate },
|
||||
{ "NOP", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "CPX", addr_absolute },
|
||||
{ "SBC", addr_absolute },
|
||||
{ "INC", addr_absolute },
|
||||
{ "???", addr_implied },
|
||||
{ "BEQ", addr_relative }, // 0xF0
|
||||
{ "SBC", addr_indirect_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "SBC", addr_zeropage_x },
|
||||
{ "INC", addr_zeropage_x },
|
||||
{ "???", addr_implied },
|
||||
{ "SED", addr_implied }, // 0xF8
|
||||
{ "SBC", addr_absolute_y },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "???", addr_implied },
|
||||
{ "SBC", addr_absolute_x },
|
||||
{ "INC", addr_absolute_x },
|
||||
{ "???", addr_implied },
|
||||
};
|
||||
|
||||
const struct opcode_struct_s opcodes_undoc[256] = {
|
||||
{ "BRK", addr_implied }, // 0x00
|
||||
{ "ORA", addr_indirect_x },
|
||||
{ "hang", addr_implied },
|
||||
@ -814,262 +832,4 @@ const struct opcode_struct opcodes_undoc[256] =
|
||||
{ "isb", addr_absolute_x },
|
||||
};
|
||||
|
||||
const uint8_t opcodes_65c02_numargs[256] =
|
||||
{
|
||||
0, // 0x00
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x08
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0x10
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x18
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
2, // 0x20
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x28
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0x30
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x38
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
0, // 0x40
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x48
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0x50
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x58
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
0, // 0x60
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x68
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0x70
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x78
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0x80
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x88
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0x90
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0x98
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0xA0
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0xA8
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0xB0
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0xB8
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0xC0
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0xC8
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0xD0
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0xD8
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0xE0
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0xE8
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
1, // 0xF0
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0, // 0xF8
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
};
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user