src/mess/drivers/zsbc3.c
| r9989 | r9990 | |
| 4 | 4 | |
| 5 | 5 | 11/01/2010 Skeleton driver. |
| 6 | 6 | 28/11/2010 Connected to a terminal |
| 7 | 11/01/2011 Converted to Modern. |
| 7 | 8 | |
| 9 | **************************************************************************** |
| 10 | |
| 11 | Monitor commands: [] indicates optional |
| 12 | |
| 13 | Bx = Boot from device x (0 to 7) |
| 14 | Dx [y] = Dump memory (hex and ascii) in range x [to y] |
| 15 | Fx y z = Fill memory x to y with z |
| 16 | Gx = Execute program at address x |
| 17 | Ix = Display IN of port x |
| 18 | Ox y = Output y to port x |
| 19 | Sx = Enter memory editing mode, press enter for next address |
| 20 | Mx y = unknown (affects memory) |
| 21 | Tx = unknown (does strange things) |
| 22 | enter = dump memory from 9000 to 907F (why?) |
| 23 | |
| 24 | **************************************************************************** |
| 25 | |
| 26 | TODO: |
| 27 | Everything really... |
| 28 | |
| 29 | Devices of all kinds; |
| 30 | Use the other rom for something.. |
| 31 | |
| 8 | 32 | ****************************************************************************/ |
| 9 | 33 | |
| 34 | #define ADDRESS_MAP_MODERN |
| 35 | |
| 10 | 36 | #include "emu.h" |
| 11 | 37 | #include "cpu/z80/z80.h" |
| 12 | 38 | #include "machine/terminal.h" |
| r9989 | r9990 | |
| 16 | 42 | { |
| 17 | 43 | public: |
| 18 | 44 | zsbc3_state(running_machine &machine, const driver_device_config_base &config) |
| 19 | | : driver_device(machine, config) { } |
| 45 | : driver_device(machine, config), |
| 46 | m_maincpu(*this, "maincpu"), |
| 47 | m_terminal(*this, "terminal") |
| 48 | { } |
| 20 | 49 | |
| 21 | | UINT8 term_data; |
| 50 | required_device<cpu_device> m_maincpu; |
| 51 | required_device<device_t> m_terminal; |
| 52 | DECLARE_READ8_MEMBER(zsbc3_28_r); |
| 53 | DECLARE_READ8_MEMBER(zsbc3_2a_r); |
| 54 | DECLARE_WRITE8_MEMBER(zsbc3_28_w); |
| 55 | DECLARE_WRITE8_MEMBER(zsbc3_kbd_put); |
| 56 | UINT8 m_term_data; |
| 22 | 57 | }; |
| 23 | 58 | |
| 24 | 59 | |
| 25 | 60 | |
| 26 | | static WRITE8_HANDLER( zsbc3_28_w ) |
| 61 | WRITE8_MEMBER( zsbc3_state::zsbc3_28_w ) |
| 27 | 62 | { |
| 28 | | device_t *terminal = space->machine->device("terminal"); |
| 29 | | |
| 30 | | terminal_write(terminal, 0, data); |
| 63 | terminal_write(m_terminal, 0, data); |
| 31 | 64 | } |
| 32 | 65 | |
| 33 | | static READ8_HANDLER( zsbc3_28_r ) |
| 66 | READ8_MEMBER( zsbc3_state::zsbc3_28_r ) |
| 34 | 67 | { |
| 35 | | zsbc3_state *state = space->machine->driver_data<zsbc3_state>(); |
| 36 | | UINT8 ret = state->term_data; |
| 37 | | state->term_data = 0; |
| 68 | UINT8 ret = m_term_data; |
| 69 | m_term_data = 0; |
| 38 | 70 | return ret; |
| 39 | 71 | } |
| 40 | 72 | |
| 41 | | static READ8_HANDLER( zsbc3_2a_r ) |
| 73 | READ8_MEMBER( zsbc3_state::zsbc3_2a_r ) |
| 42 | 74 | { |
| 43 | | zsbc3_state *state = space->machine->driver_data<zsbc3_state>(); |
| 44 | | return 4 | ((state->term_data) ? 1 : 0); |
| 75 | return 4 | ((m_term_data) ? 1 : 0); |
| 45 | 76 | } |
| 46 | 77 | |
| 47 | | static ADDRESS_MAP_START(zsbc3_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 78 | static ADDRESS_MAP_START(zsbc3_mem, ADDRESS_SPACE_PROGRAM, 8, zsbc3_state) |
| 48 | 79 | ADDRESS_MAP_UNMAP_HIGH |
| 49 | 80 | AM_RANGE( 0x0000, 0x07ff ) AM_ROM |
| 50 | 81 | AM_RANGE( 0x0800, 0xffff ) AM_RAM |
| 51 | 82 | ADDRESS_MAP_END |
| 52 | 83 | |
| 53 | | static ADDRESS_MAP_START( zsbc3_io , ADDRESS_SPACE_IO, 8) |
| 84 | static ADDRESS_MAP_START( zsbc3_io , ADDRESS_SPACE_IO, 8, zsbc3_state) |
| 54 | 85 | ADDRESS_MAP_UNMAP_HIGH |
| 55 | 86 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 56 | 87 | AM_RANGE(0x28, 0x28) AM_READWRITE(zsbc3_28_r,zsbc3_28_w) |
| r9989 | r9990 | |
| 67 | 98 | { |
| 68 | 99 | } |
| 69 | 100 | |
| 70 | | static WRITE8_DEVICE_HANDLER( zsbc3_kbd_put ) |
| 101 | WRITE8_MEMBER( zsbc3_state::zsbc3_kbd_put ) |
| 71 | 102 | { |
| 72 | | zsbc3_state *state = device->machine->driver_data<zsbc3_state>(); |
| 73 | | state->term_data = data; |
| 103 | m_term_data = data; |
| 74 | 104 | } |
| 75 | 105 | |
| 76 | 106 | static GENERIC_TERMINAL_INTERFACE( zsbc3_terminal_intf ) |
| 77 | 107 | { |
| 78 | | DEVCB_HANDLER(zsbc3_kbd_put) |
| 108 | DEVCB_DRIVER_MEMBER(zsbc3_state, zsbc3_kbd_put) |
| 79 | 109 | }; |
| 80 | 110 | |
| 81 | 111 | |
| r9989 | r9990 | |
| 97 | 127 | ROM_START( zsbc3 ) |
| 98 | 128 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 99 | 129 | ROM_LOAD( "54-3002_zsbc_monitor_1.09.bin", 0x0000, 0x0800, CRC(628588e9) SHA1(8f0d489147ec8382ca007236e0a95a83b6ebcd86)) |
| 130 | |
| 100 | 131 | ROM_REGION( 0x10000, "hdc", ROMREGION_ERASEFF ) |
| 101 | 132 | ROM_LOAD( "54-8622_hdc13.bin", 0x0000, 0x0400, CRC(02c7cd6d) SHA1(494281ba081a0f7fbadfc30a7d2ea18c59e55101)) |
| 102 | 133 | ROM_END |
| r9989 | r9990 | |
| 104 | 135 | /* Driver */ |
| 105 | 136 | |
| 106 | 137 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 107 | | COMP( 1980, zsbc3, 0, 0, zsbc3, zsbc3, 0, "Digital Microsystems", "ZSBC-3", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 138 | COMP( 1980, zsbc3, 0, 0, zsbc3, zsbc3, 0, "Digital Microsystems", "ZSBC-3", GAME_NOT_WORKING | GAME_NO_SOUND_HW) |
| 108 | 139 | |