diff options
author | 2012-11-06 16:27:39 +0000 | |
---|---|---|
committer | 2012-11-06 16:27:39 +0000 | |
commit | fac1ca581b31525279ead471282c1eed1790daab (patch) | |
tree | 3870b4c93b8c72f54062dbe68a0cbd2750c9ec26 /src/emu/cpu/m6502/m6509.h | |
parent | 54b3c7a31dd607b734e55d9ca96254f0801abb6b (diff) |
6502: Rewrite modern, cycle-exact and interruptible [O. Galibert]
Diffstat (limited to 'src/emu/cpu/m6502/m6509.h')
-rw-r--r-- | src/emu/cpu/m6502/m6509.h | 137 |
1 files changed, 102 insertions, 35 deletions
diff --git a/src/emu/cpu/m6502/m6509.h b/src/emu/cpu/m6502/m6509.h index 22e2f70b06e..c036511c356 100644 --- a/src/emu/cpu/m6502/m6509.h +++ b/src/emu/cpu/m6502/m6509.h @@ -1,44 +1,111 @@ -/***************************************************************************** - * - * m6509.h - * Portable 6509 emulator V1.0beta - * - * Copyright Peter Trauner, all rights reserved. - * - * - 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. - * - *****************************************************************************/ - -#pragma once +/*************************************************************************** + + m6509.h + + 6502 with banking and extended address bus + +**************************************************************************** + + Copyright Olivier Galibert + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY OLIVIER GALIBERT ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +***************************************************************************/ #ifndef __M6509_H__ -#define _M6509_H +#define __M6509_H__ #include "m6502.h" -enum -{ - M6509_PC=1, M6509_S, M6509_P, M6509_A, M6509_X, M6509_Y, - M6509_EA, M6509_ZP, M6509_NMI_STATE, M6509_IRQ_STATE, M6509_SO_STATE, - M6509_PC_BANK, M6509_IND_BANK +class m6509_device : public m6502_device { +public: + m6509_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + static const disasm_entry disasm_entries[0x100]; + + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); + virtual void do_exec_full(); + virtual void do_exec_partial(); + +protected: + class mi_6509_normal : public memory_interface { + public: + m6509_device *base; + + mi_6509_normal(m6509_device *base); + virtual UINT8 read(UINT16 adr); + virtual UINT8 read_9(UINT16 adr); + virtual UINT8 read_direct(UINT16 adr); + virtual UINT8 read_decrypted(UINT16 adr); + virtual void write(UINT16 adr, UINT8 val); + virtual void write_9(UINT16 adr, UINT8 val); + }; + + class mi_6509_nd : public mi_6509_normal { + public: + mi_6509_nd(m6509_device *base); + virtual UINT8 read_direct(UINT16 adr); + virtual UINT8 read_decrypted(UINT16 adr); + }; + + virtual void device_start(); + virtual void device_reset(); + + UINT8 bank_i, bank_y; + + UINT8 bank_i_r() { return bank_i; } + UINT8 bank_y_r() { return bank_y; } + void bank_i_w(UINT8 data) { bank_i = data; } + void bank_y_w(UINT8 data) { bank_y = data; } + + UINT32 adr_in_bank_i(UINT16 adr) { return adr | ((bank_i & 0xf) << 16); } + UINT32 adr_in_bank_y(UINT16 adr) { return adr | ((bank_y & 0xf) << 16); } + +#define O(o) void o ## _full(); void o ## _partial() + + // 6509 opcodes + O(lda_9_idy); + O(sta_9_idy); + +#undef O }; -#define M6509_IRQ_LINE M6502_IRQ_LINE -/* use cpudevice->execute().set_input_line(M6509_SET_OVERFLOW, level) - to change level of the so input line - positiv edge sets overflow flag */ -#define M6509_SET_OVERFLOW 3 +enum { + M6509_IRQ_LINE = m6502_device::IRQ_LINE, + M6509_NMI_LINE = m6502_device::NMI_LINE, + M6509_SET_OVERFLOW = m6502_device::V_LINE, +}; + +enum { + M6509_BI = M6502_IR+1, + M6509_BY +}; -DECLARE_LEGACY_CPU_DEVICE(M6509, m6509); +extern const device_type M6509; -#endif /* __M6509_H__ */ +#endif |