mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-12-23 10:29:46 +00:00
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
This commit is contained in:
parent
8c8f425559
commit
8169cf6e06
@ -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),
|
||||
|
10
src/mnemo.c
10
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;
|
||||
|
14
src/mnemo.h
14
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);
|
||||
|
Loading…
Reference in New Issue
Block a user