trunk/src/mess/drivers/wicat.c
| r26516 | r26517 | |
| 11 | 11 | #include "emu.h" |
| 12 | 12 | #include "cpu/m68000/m68000.h" |
| 13 | 13 | #include "machine/terminal.h" |
| 14 | #include "wicat.lh" |
| 14 | 15 | |
| 15 | 16 | class wicat_state : public driver_device |
| 16 | 17 | { |
| 17 | 18 | public: |
| 18 | 19 | wicat_state(const machine_config &mconfig, device_type type, const char *tag) |
| 19 | 20 | : driver_device(mconfig, type, tag) |
| 20 | | , m_p_base(*this, "rambase") |
| 21 | // , m_p_base(*this, "rambase") |
| 21 | 22 | , m_maincpu(*this, "maincpu") |
| 22 | 23 | , m_terminal(*this, TERMINAL_TAG) |
| 23 | 24 | { } |
| 24 | 25 | |
| 25 | 26 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 27 | DECLARE_READ16_MEMBER(invalid_r); |
| 28 | DECLARE_WRITE16_MEMBER(invalid_w); |
| 29 | DECLARE_WRITE16_MEMBER(serial_w); |
| 30 | DECLARE_WRITE16_MEMBER(parallel_led_w); |
| 26 | 31 | private: |
| 27 | 32 | UINT8 m_term_data; |
| 33 | virtual void machine_start(); |
| 28 | 34 | virtual void machine_reset(); |
| 29 | | required_shared_ptr<UINT16> m_p_base; |
| 35 | // required_shared_ptr<UINT16> m_p_base; |
| 30 | 36 | required_device<cpu_device> m_maincpu; |
| 31 | 37 | required_device<generic_terminal_device> m_terminal; |
| 32 | 38 | }; |
| r26516 | r26517 | |
| 35 | 41 | static ADDRESS_MAP_START(wicat_mem, AS_PROGRAM, 16, wicat_state) |
| 36 | 42 | ADDRESS_MAP_UNMAP_HIGH |
| 37 | 43 | ADDRESS_MAP_GLOBAL_MASK(0xffffff) |
| 38 | | AM_RANGE(0x000000, 0x04cfff) AM_RAM AM_SHARE("rambase") |
| 39 | | AM_RANGE(0x04d000, 0x04ffff) AM_ROM AM_REGION("c1", 0) |
| 40 | | AM_RANGE(0x018000, 0x018fff) AM_RAM |
| 44 | // AM_RANGE(0x000000, 0x01efff) AM_RAM AM_SHARE("rambase") |
| 45 | AM_RANGE(0x000000, 0x001fff) AM_ROM AM_REGION("c2", 0x0000) |
| 46 | AM_RANGE(0x020000, 0x1fffff) AM_RAM |
| 47 | AM_RANGE(0x200000, 0x3fffff) AM_RAM |
| 48 | AM_RANGE(0x400000, 0xdfffff) AM_READWRITE(invalid_r,invalid_w) |
| 49 | AM_RANGE(0xeff800, 0xefffff) AM_RAM // memory mapping SRAM, used during boot sequence for the stack (TODO) |
| 50 | AM_RANGE(0xf00000, 0xf0002f) AM_WRITE(serial_w) // UARTs |
| 51 | AM_RANGE(0xf000d0, 0xf000d1) AM_WRITE(parallel_led_w) |
| 41 | 52 | ADDRESS_MAP_END |
| 42 | 53 | |
| 43 | 54 | |
| r26516 | r26517 | |
| 46 | 57 | INPUT_PORTS_END |
| 47 | 58 | |
| 48 | 59 | |
| 60 | void wicat_state::machine_start() |
| 61 | { |
| 62 | } |
| 63 | |
| 49 | 64 | void wicat_state::machine_reset() |
| 50 | 65 | { |
| 51 | | UINT8* ROM = memregion("c1")->base(); |
| 52 | | memcpy(m_p_base, ROM, 8); |
| 53 | | m_maincpu->reset(); |
| 54 | 66 | } |
| 55 | 67 | |
| 56 | 68 | WRITE8_MEMBER( wicat_state::kbd_put ) |
| r26516 | r26517 | |
| 58 | 70 | m_term_data = data; |
| 59 | 71 | } |
| 60 | 72 | |
| 73 | WRITE16_MEMBER( wicat_state::serial_w ) |
| 74 | { |
| 75 | if(ACCESSING_BITS_8_15) // even addresses |
| 76 | { |
| 77 | switch(offset) |
| 78 | { |
| 79 | case 0x00: |
| 80 | case 0x02: |
| 81 | case 0x04: |
| 82 | case 0x06: |
| 83 | m_terminal->write(space,0,data); |
| 84 | default: |
| 85 | logerror("Serial: Unused serial port write %02x to offset %02x\n",data,offset); |
| 86 | } |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | WRITE16_MEMBER( wicat_state::parallel_led_w ) |
| 91 | { |
| 92 | // bit 0 - parallel port A direction (0 = input) |
| 93 | // bit 1 - parallel port B direction (0 = input) |
| 94 | output_set_value("led1",(~data) & 0x0400); |
| 95 | output_set_value("led2",(~data) & 0x0800); |
| 96 | output_set_value("led3",(~data) & 0x1000); |
| 97 | output_set_value("led4",(~data) & 0x2000); |
| 98 | output_set_value("led5",(~data) & 0x4000); |
| 99 | output_set_value("led6",(~data) & 0x8000); |
| 100 | } |
| 101 | |
| 102 | READ16_MEMBER( wicat_state::invalid_r ) |
| 103 | { |
| 104 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); |
| 105 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); |
| 106 | return 0xff; |
| 107 | } |
| 108 | |
| 109 | WRITE16_MEMBER( wicat_state::invalid_w ) |
| 110 | { |
| 111 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); |
| 112 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); |
| 113 | } |
| 114 | |
| 61 | 115 | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 62 | 116 | { |
| 63 | 117 | DEVCB_DRIVER_MEMBER(wicat_state, kbd_put) |
| r26516 | r26517 | |
| 70 | 124 | |
| 71 | 125 | /* video hardware */ |
| 72 | 126 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 127 | |
| 128 | MCFG_DEFAULT_LAYOUT(layout_wicat) |
| 73 | 129 | MACHINE_CONFIG_END |
| 74 | 130 | |
| 75 | 131 | /* ROM definition */ |
| 76 | 132 | ROM_START( wicat ) |
| 77 | | ROM_REGION16_BE(0x3000, "c1", 0) |
| 133 | ROM_REGION16_BE(0x4000, "c1", 0) |
| 78 | 134 | ROM_LOAD16_BYTE("wiboot.e", 0x00000, 0x0800, CRC(6f0f73c6) SHA1(be635bf3ffa1301f844a3d5560e278de46740d19) ) |
| 79 | 135 | ROM_LOAD16_BYTE("wiboot.o", 0x00001, 0x0800, CRC(b9763bbd) SHA1(68f497be56ff69534e17b41a40737cd6f708d65e) ) |
| 80 | 136 | ROM_LOAD16_BYTE("tpcnif.e", 0x01000, 0x0800, CRC(fd1127ec) SHA1(7c6b436c0cea41dbb23cb6bd9b9a5c21fa61d232) ) |
| r26516 | r26517 | |
| 87 | 143 | ROM_LOAD ("cpu.15c", 0x00040, 0x0020, CRC(ba2dd77d) SHA1(eb693d6d30aa6a9dba61c6c41a75614ed4e9e69a) ) |
| 88 | 144 | |
| 89 | 145 | ROM_REGION16_BE(0x2000, "c2", 0) |
| 90 | | ROM_LOAD16_BYTE("wd3_15.b5", 0x00000, 0x0800, CRC(a765899b) SHA1(8427c564029914b7dbc29768ce451604180e390f) ) |
| 91 | | ROM_LOAD16_BYTE("wd3_15.b7", 0x00001, 0x0800, CRC(9d986585) SHA1(1ac7579c692f827b121c56dac0a77b15400caba1) ) |
| 92 | | ROM_LOAD16_BYTE("boot156.a5", 0x01000, 0x0800, CRC(58510a52) SHA1(d2135b056a04ba830b0ae1cef539e4a9a1b58f82) ) |
| 93 | | ROM_LOAD16_BYTE("boot156.a7", 0x01001, 0x0800, CRC(e53999f1) SHA1(9c6c6a3a56b5c16a35e1fe824f37c8ae739ebcb9) ) |
| 146 | ROM_LOAD16_BYTE("boot156.a5", 0x00000, 0x0800, CRC(58510a52) SHA1(d2135b056a04ba830b0ae1cef539e4a9a1b58f82) ) |
| 147 | ROM_LOAD16_BYTE("boot156.a7", 0x00001, 0x0800, CRC(e53999f1) SHA1(9c6c6a3a56b5c16a35e1fe824f37c8ae739ebcb9) ) |
| 148 | ROM_LOAD16_BYTE("wd3_15.b5", 0x01000, 0x0800, CRC(a765899b) SHA1(8427c564029914b7dbc29768ce451604180e390f) ) |
| 149 | ROM_LOAD16_BYTE("wd3_15.b7", 0x01001, 0x0800, CRC(9d986585) SHA1(1ac7579c692f827b121c56dac0a77b15400caba1) ) |
| 94 | 150 | |
| 95 | 151 | ROM_REGION16_BE(0x8000, "g1", 0) |
| 96 | 152 | ROM_LOAD16_BYTE("1term0.e", 0x00000, 0x0800, CRC(a9aade37) SHA1(644e9362d5a9523be5c6f39a650b574735dbd4a2) ) |