From 8169cf6e06455e794213fe7d0f6173232d48e3f8 Mon Sep 17 00:00:00 2001 From: marcobaye Date: Fri, 29 May 2020 13:04:28 +0000 Subject: [PATCH] changed 6510 to nmos6502 internally git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@199 4df02467-bbd4-4a76-a152-e7ce94205b78 --- src/cpu.c | 6 +++--- src/mnemo.c | 10 +++++----- src/mnemo.h | 14 +++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cpu.c b/src/cpu.c index 9ae9ac7..2a4c795 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -20,8 +20,8 @@ static struct cpu_type cpu_type_6502 = { CPUFLAG_INDIRECTJMPBUGGY, // JMP ($xxFF) is buggy 234 // !align fills with "NOP" }; -static struct cpu_type cpu_type_6510 = { - keyword_is_6510_mnemo, +static struct cpu_type cpu_type_nmos6502 = { + keyword_is_nmos6502_mnemo, CPUFLAG_INDIRECTJMPBUGGY | CPUFLAG_8B_AND_AB_NEED_0_ARG, // JMP ($xxFF) is buggy, ANE/LXA #$xx are unstable unless arg is $00 234 // !align fills with "NOP" }; @@ -75,7 +75,7 @@ static struct ronode cputype_list[] = { #define KNOWN_TYPES "'6502', '6510', '65c02', 'r65c02', 'w65c02', '65816', '65ce02', '4502', 'm65', 'c64dtv2'" // shown in CLI error message for unknown types // PREDEFNODE("z80", &cpu_type_Z80), PREDEFNODE("6502", &cpu_type_6502), - PREDEFNODE("6510", &cpu_type_6510), + PREDEFNODE("6510", &cpu_type_nmos6502), PREDEFNODE("65c02", &cpu_type_65c02), PREDEFNODE("r65c02", &cpu_type_r65c02), PREDEFNODE("w65c02", &cpu_type_w65c02), diff --git a/src/mnemo.c b/src/mnemo.c index 75cd300..4267866 100644 --- a/src/mnemo.c +++ b/src/mnemo.c @@ -87,7 +87,7 @@ enum mnemogroup { // column to use here. The row depends on the used addressing mode. A zero // entry in these tables means that the combination of mnemonic and addressing // mode is illegal. -// | 6502/65c02/65816/65ce02/4502/m65 | 65816 | 6510 illegals | +// | 6502/65c02/65816/65ce02/4502/m65 | 65816 | NMOS 6502 undocumented opcodes | enum { IDX_ORA,IDXcORA,IDX16ORA,IDXeORA,IDXmORA,IDXmORQ,IDX_AND,IDXcAND,IDX16AND,IDXeAND,IDXmAND,IDXmANDQ,IDX_EOR,IDXcEOR,IDX16EOR,IDXeEOR,IDXmEOR,IDXmEORQ,IDX_ADC,IDXcADC,IDX16ADC,IDXeADC,IDXmADC,IDXmADCQ,IDX_STA,IDXcSTA,IDX16STA,IDXeSTA,IDXmSTA,IDXmSTQ,IDX_LDA,IDXcLDA,IDX16LDA,IDXeLDA,IDXmLDA,IDXmLDQ,IDX_CMP,IDXcCMP,IDX16CMP,IDXeCMP,IDXmCMP,IDXmCPQ,IDX_SBC,IDXcSBC,IDX16SBC,IDXeSBC,IDXmSBC,IDXmSBCQ,IDX16PEI,IDX_SLO,IDX_RLA,IDX_SRE,IDX_RRA,IDX_SAX,IDX_LAX,IDX_DCP,IDX_ISC,IDX_SHA}; SCB accu_imm[] = { 0x09, 0x09, 0x09, 0x09, 0x09, 0, 0x29, 0x29, 0x29, 0x29, 0x29, 0, 0x49, 0x49, 0x49, 0x49, 0x49, 0, 0x69, 0x69, 0x69, 0x69, 0x69, 0, 0, 0, 0, 0, 0, 0, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // #$ff #$ffff SCL accu_abs[] = { 0x0d05, 0x0d05,0x0f0d05, 0x0d05, 0x0d05, 0x0d05, 0x2d25, 0x2d25,0x2f2d25, 0x2d25, 0x2d25, 0x2d25, 0x4d45, 0x4d45,0x4f4d45, 0x4d45, 0x4d45, 0x4d45, 0x6d65, 0x6d65,0x6f6d65, 0x6d65, 0x6d65, 0x6d65, 0x8d85, 0x8d85,0x8f8d85, 0x8d85, 0x8d85, 0x8d85, 0xada5, 0xada5,0xafada5, 0xada5, 0xada5, 0xada5, 0xcdc5, 0xcdc5,0xcfcdc5, 0xcdc5, 0xcdc5, 0xcdc5, 0xede5, 0xede5,0xefede5, 0xede5, 0xede5, 0xede5, 0, 0x0f07, 0x2f27, 0x4f47, 0x6f67, 0x8f87, 0xafa7, 0xcfc7, 0xefe7, 0}; // $ff $ffff $ffffff @@ -109,7 +109,7 @@ SCB accu_lindz8[] = { 0, 0, 0, 0, 0x12, 0, 0, // mnemotable), the assembler finds out the column to use here. The row // depends on the used addressing mode. A zero entry in these tables means // that the combination of mnemonic and addressing mode is illegal. -// | 6502 | 6502/65c02/65ce02 | 65c02 | 65ce02 | 65816 | 6510 illegals | C64DTV2 | +// | 6502 | 6502/65c02/65ce02 | 65c02 | 65ce02 | 65816 | NMOS 6502 undocumented opcodes | C64DTV2 | enum { IDX_ASL,IDX_ROL,IDX_LSR,IDX_ROR,IDX_LDY,IDX_LDX,IDX_CPY,IDX_CPX,IDX_BIT,IDXcBIT,IDX_STX,IDXeSTX,IDX_STY,IDXeSTY,IDX_DEC,IDXcDEC,IDX_INC,IDXcINC,IDXcTSB,IDXcTRB,IDXcSTZ,IDXeASR,IDXeASW,IDXeCPZ,IDXeDEW,IDXeINW,IDXeLDZ,IDXePHW,IDXeROW,IDXeRTN,IDX16COP,IDX16REP,IDX16SEP,IDX16PEA,IDX_ANC,IDX_ASR,IDX_ARR,IDX_SBX,IDX_DOP,IDX_TOP,IDX_JAM,IDX_LXA,IDX_ANE,IDX_LAS,IDX_TAS,IDX_SHX,IDX_SHY,IDX_SAC,IDX_SIR}; SCB misc_impl[] = { 0x0a, 0x2a, 0x4a, 0x6a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3a, 0, 0x1a, 0, 0, 0, 0x43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x0c, 0x02, 0, 0, 0, 0, 0, 0, 0, 0}; // implied/accu SCB misc_imm[] = { 0, 0, 0, 0, 0xa0, 0xa2, 0xc0, 0xe0, 0, 0x89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xc2, 0, 0, 0xa3, 0xf4, 0, 0x62, 0, 0xc2, 0xe2, 0, 0x0b, 0x4b, 0x6b, 0xcb, 0x80, 0, 0, 0xab, 0x8b, 0, 0, 0, 0, 0x32, 0x42}; // #$ff #$ffff @@ -988,7 +988,7 @@ static void group_misc(int index, int immediate_mode) // CAUTION - do not incorporate the line above into the line // below - "force_bit" might be undefined (depends on compiler). make_command(force_bit, &result, immediate_opcodes); - // check whether to warn about 6510's unstable ANE/LXA + // warn about unstable ANE/LXA (undocumented opcode of NMOS 6502)? if ((CPU_state.type->flags & CPUFLAG_8B_AND_AB_NEED_0_ARG) && ((result.val.intval & 0xff) != 0x00) && (result.flags & NUMBER_IS_DEFINED)) { @@ -1171,8 +1171,8 @@ boolean keyword_is_6502_mnemo(int length) return check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf) ? TRUE : FALSE; } -// check whether mnemonic in GlobalDynaBuf is supported by 6510 cpu. -boolean keyword_is_6510_mnemo(int length) +// check whether mnemonic in GlobalDynaBuf is supported by NMOS 6502 cpu. +boolean keyword_is_nmos6502_mnemo(int length) { if (length != 3) return FALSE; diff --git a/src/mnemo.h b/src/mnemo.h index e38f6f0..6493075 100644 --- a/src/mnemo.h +++ b/src/mnemo.h @@ -12,21 +12,21 @@ // create dynamic buffer, build keyword trees extern void Mnemo_init(void); -// check whether mnemonic in GlobalDynaBuf is supported by 6502 cpu. +// check whether mnemonic in GlobalDynaBuf is supported by standard 6502 cpu. extern boolean keyword_is_6502_mnemo(int length); -// check whether mnemonic in GlobalDynaBuf is supported by 6510 cpu. -extern boolean keyword_is_6510_mnemo(int length); +// check whether mnemonic in GlobalDynaBuf is supported by NMOS 6502 cpu (includes undocumented opcodes). +extern boolean keyword_is_nmos6502_mnemo(int length); // check whether mnemonic in GlobalDynaBuf is supported by C64DTV2 cpu. extern boolean keyword_is_c64dtv2_mnemo(int length); -// check whether mnemonic in GlobalDynaBuf is supported by 65c02 cpu. +// check whether mnemonic in GlobalDynaBuf is supported by 65C02 cpu. extern boolean keyword_is_65c02_mnemo(int length); -// check whether mnemonic in GlobalDynaBuf is supported by Rockwell 65c02 cpu. +// check whether mnemonic in GlobalDynaBuf is supported by Rockwell 65C02 cpu. extern boolean keyword_is_r65c02_mnemo(int length); -// check whether mnemonic in GlobalDynaBuf is supported by WDC 65c02 cpu. +// check whether mnemonic in GlobalDynaBuf is supported by WDC 65C02 cpu. extern boolean keyword_is_w65c02_mnemo(int length); // check whether mnemonic in GlobalDynaBuf is supported by 65816 cpu. extern boolean keyword_is_65816_mnemo(int length); -// check whether mnemonic in GlobalDynaBuf is supported by CSG 65ce02 cpu. +// check whether mnemonic in GlobalDynaBuf is supported by CSG 65CE02 cpu. extern boolean keyword_is_65ce02_mnemo(int length); // check whether mnemonic in GlobalDynaBuf is supported by CSG 4502 cpu. extern boolean keyword_is_4502_mnemo(int length);