trunk/src/mess/drivers/ft68m.c
| r0 | r25424 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Forward Technology FT-68M Multibus card. |
| 4 | |
| 5 | 2013-09-26 Skeleton driver |
| 6 | |
| 7 | Chips: HD68000-10, uPD7201C, AM9513APC. Crystal: 19.6608 MHz |
| 8 | |
| 9 | Interrupts: INT6 is output of Timer 2, INT7 is output of Timer 3 (refresh), |
| 10 | INT5 comes from SIO. |
| 11 | |
| 12 | ****************************************************************************/ |
| 13 | |
| 14 | #include "emu.h" |
| 15 | #include "cpu/m68000/m68000.h" |
| 16 | #include "machine/terminal.h" |
| 17 | |
| 18 | class ft68m_state : public driver_device |
| 19 | { |
| 20 | public: |
| 21 | ft68m_state(const machine_config &mconfig, device_type type, const char *tag) |
| 22 | : driver_device(mconfig, type, tag) |
| 23 | , m_p_base(*this, "rambase") |
| 24 | , m_maincpu(*this, "maincpu") |
| 25 | , m_terminal(*this, TERMINAL_TAG) |
| 26 | { } |
| 27 | |
| 28 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 29 | DECLARE_READ16_MEMBER(keyin_r); |
| 30 | DECLARE_READ16_MEMBER(status_r); |
| 31 | private: |
| 32 | UINT8 m_term_data; |
| 33 | virtual void machine_reset(); |
| 34 | required_shared_ptr<UINT16> m_p_base; |
| 35 | required_device<cpu_device> m_maincpu; |
| 36 | required_device<generic_terminal_device> m_terminal; |
| 37 | }; |
| 38 | |
| 39 | READ16_MEMBER( ft68m_state::keyin_r ) |
| 40 | { |
| 41 | UINT16 ret = m_term_data; |
| 42 | m_term_data = 0; |
| 43 | return ret << 8; |
| 44 | } |
| 45 | |
| 46 | READ16_MEMBER( ft68m_state::status_r ) |
| 47 | { |
| 48 | return (m_term_data) ? 0x500 : 0x400; |
| 49 | } |
| 50 | |
| 51 | |
| 52 | static ADDRESS_MAP_START(ft68m_mem, AS_PROGRAM, 16, ft68m_state) |
| 53 | ADDRESS_MAP_UNMAP_HIGH |
| 54 | ADDRESS_MAP_GLOBAL_MASK(0xffffff) |
| 55 | AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_SHARE("rambase") |
| 56 | AM_RANGE(0x200000, 0x201fff) AM_ROM AM_REGION("roms", 0x0000) |
| 57 | AM_RANGE(0x400000, 0x401fff) AM_ROM AM_REGION("roms", 0x2000) |
| 58 | AM_RANGE(0x600000, 0x600001) AM_READ(keyin_r) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0xff00) |
| 59 | AM_RANGE(0x600002, 0x600003) AM_READ(status_r) |
| 60 | //AM_RANGE(0x600000, 0x600003) AM_MIRROR(0x1ffffc) uPD7201 SIO |
| 61 | //AM_RANGE(0x800000, 0x800003) AM_MIRROR(0x1ffffc) AM9513 Timer |
| 62 | //AM_RANGE(0xa00000, 0xbfffff) Page Map |
| 63 | //AM_RANGE(0xc00000, 0xdfffff) Segment Map |
| 64 | //AM_RANGE(0xe00000, 0xffffff) Context Register |
| 65 | ADDRESS_MAP_END |
| 66 | |
| 67 | |
| 68 | /* Input ports */ |
| 69 | static INPUT_PORTS_START( ft68m ) |
| 70 | INPUT_PORTS_END |
| 71 | |
| 72 | |
| 73 | void ft68m_state::machine_reset() |
| 74 | { |
| 75 | UINT8* ROM = memregion("roms")->base(); |
| 76 | memcpy(m_p_base, ROM, 8); |
| 77 | m_maincpu->reset(); |
| 78 | } |
| 79 | |
| 80 | WRITE8_MEMBER( ft68m_state::kbd_put ) |
| 81 | { |
| 82 | m_term_data = data; |
| 83 | } |
| 84 | |
| 85 | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 86 | { |
| 87 | DEVCB_DRIVER_MEMBER(ft68m_state, kbd_put) |
| 88 | }; |
| 89 | |
| 90 | static MACHINE_CONFIG_START( ft68m, ft68m_state ) |
| 91 | /* basic machine hardware */ |
| 92 | MCFG_CPU_ADD("maincpu", M68000, XTAL_19_6608MHz / 2) |
| 93 | MCFG_CPU_PROGRAM_MAP(ft68m_mem) |
| 94 | |
| 95 | /* video hardware */ |
| 96 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 97 | MACHINE_CONFIG_END |
| 98 | |
| 99 | /* ROM definition */ |
| 100 | ROM_START( ft68m ) |
| 101 | ROM_REGION16_BE(0x4000, "roms", 0) |
| 102 | ROM_LOAD16_BYTE(" 23-0009-01c.a4", 0x0000, 0x1000, CRC(0d45fc8d) SHA1(59587cb1c151bfd0d69e708716ed3b0a78aa85ea) ) |
| 103 | ROM_LOAD16_BYTE(" 23-0008-01c.a1", 0x0001, 0x1000, CRC(d1aa1164) SHA1(05e10f1c594e2acd369949b873a524a9cc37829f) ) |
| 104 | ROM_LOAD16_BYTE( "33-01.a6", 0x2000, 0x1000, CRC(53fe3c73) SHA1(ad15c74cd8edef9d9716ad0d16f7a95ff2af901f) ) |
| 105 | ROM_LOAD16_BYTE( "33-00.a3", 0x2001, 0x1000, CRC(06b1cc77) SHA1(12e3314e92f800b3c4ebdf55dcd5351230224788) ) |
| 106 | |
| 107 | ROM_REGION(0x700, "proms", 0) |
| 108 | ROM_LOAD("23-0010-00.a15", 0x000, 0x020, CRC(20eb1183) SHA1(9b268792b28d858d6b6a1b6c4148af88a8d6b735) ) |
| 109 | ROM_LOAD("23-0011-00.a14", 0x100, 0x200, CRC(12d9a6be) SHA1(fca99f9c5afc630ac67cbd4e5ba4e5242b826848) ) |
| 110 | ROM_LOAD("23-0012-00.a16", 0x300, 0x020, CRC(ee1e5a14) SHA1(0d3346cb3b647fa2475bd7b4fa36ea6ecfdaf805) ) |
| 111 | ROM_LOAD("23-0034-00.e4", 0x400, 0x100, NO_DUMP ) |
| 112 | ROM_LOAD("23-0037-00.e7", 0x500, 0x100, NO_DUMP ) |
| 113 | ROM_LOAD("23-0038-00.f1", 0x600, 0x100, NO_DUMP ) |
| 114 | ROM_END |
| 115 | |
| 116 | |
| 117 | /* Driver */ |
| 118 | |
| 119 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 120 | COMP( 198?, ft68m, 0, 0, ft68m, ft68m, driver_device, 0, "Callan Data Systems", "ft68m", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |