diff options
Diffstat (limited to 'trunk/src/emu/cpu/m6502/ops4510.h')
-rw-r--r-- | trunk/src/emu/cpu/m6502/ops4510.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/m6502/ops4510.h b/trunk/src/emu/cpu/m6502/ops4510.h new file mode 100644 index 00000000000..a8ebd215a7c --- /dev/null +++ b/trunk/src/emu/cpu/m6502/ops4510.h @@ -0,0 +1,61 @@ +/***************************************************************************** + * + * ops4510.h + * Addressing mode and opcode macros for 4510 CPU + * + * Copyright Peter Trauner, all rights reserved. + * documentation preliminary databook + * documentation by michael steil mist@c64.org + * available at ftp://ftp.funet.fi/pub/cbm/c65 + * + * - This source code is released as freeware for non-commercial purposes. + * - You are free to use and redistribute this code in modified or + * unmodified form, provided you list me in the credits. + * - If you modify this source code, you must add a notice to each modified + * source file that it has been changed. If you're a nice person, you + * will clearly mark each change too. :) + * - If you wish to use this for commercial purposes, please contact me at + * pullmoll@t-online.de + * - The author of this copywritten work reserves the right to change the + * terms of its usage and license at any time, including retroactively + * - This entire notice must remain in the source code. + * + *****************************************************************************/ + + +/* 65ce02 ******************************************************** + * TXS Transfer index X to stack LSB + * no flags changed (sic!) + * txs tys not interruptable + ***************************************************************/ +#undef TXS +#define TXS \ + SPL = X; \ + if (PEEK_OP() == 0x2b /*TYS*/ ) { \ + UINT8 op = RDOP(); \ + (*cpustate->insn[op])(cpustate); \ + } + +#undef NOP +#define NOP \ + cpustate->interrupt_inhibit = 0; + +/* c65 docu says transfer of axyz to the mapper register + so no readback!? */ +#define MAP \ + cpustate->interrupt_inhibit = 1; \ + cpustate->low=cpustate->a|(cpustate->x<<8); \ + cpustate->high=cpustate->y|(cpustate->z<<8); \ + cpustate->mem[0]=(cpustate->low&0x1000) ? (cpustate->low&0xfff)<<8:0; \ + cpustate->mem[1]=(cpustate->low&0x2000) ? (cpustate->low&0xfff)<<8:0; \ + cpustate->mem[2]=(cpustate->low&0x4000) ? (cpustate->low&0xfff)<<8:0; \ + cpustate->mem[3]=(cpustate->low&0x8000) ? (cpustate->low&0xfff)<<8:0; \ + cpustate->mem[4]=(cpustate->high&0x1000) ? (cpustate->high&0xfff)<<8:0; \ + cpustate->mem[5]=(cpustate->high&0x2000) ? (cpustate->high&0xfff)<<8:0; \ + cpustate->mem[6]=(cpustate->high&0x4000) ? (cpustate->high&0xfff)<<8:0; \ + cpustate->mem[7]=(cpustate->high&0x8000) ? (cpustate->high&0xfff)<<8:0; \ + cpustate->icount -= 3; \ + { \ + UINT8 op = RDOP(); \ + (*cpustate->insn[op])(cpustate); \ + } |