src/mess/drivers/altair.c
| r10553 | r10554 | |
| 4 | 4 | |
| 5 | 5 | 04/12/2009 Initial driver by Miodrag Milanovic |
| 6 | 6 | |
| 7 | Commands: |
| 8 | All commands must be in uppercase. Address and data is |
| 9 | specified in Octal format (not hex). |
| 10 | |
| 11 | Press space to input your command line (not return). |
| 12 | |
| 13 | D - ? (prints random characters) |
| 14 | J - ? (does nothing noticeable) |
| 15 | M - Modify memory |
| 16 | |
| 7 | 17 | ****************************************************************************/ |
| 18 | #define ADDRESS_MAP_MODERN |
| 8 | 19 | |
| 9 | 20 | #include "emu.h" |
| 10 | 21 | #include "cpu/i8085/i8085.h" |
| r10553 | r10554 | |
| 16 | 27 | { |
| 17 | 28 | public: |
| 18 | 29 | altair_state(running_machine &machine, const driver_device_config_base &config) |
| 19 | | : driver_device(machine, config) { } |
| 30 | : driver_device(machine, config), |
| 31 | m_maincpu(*this, "maincpu") |
| 32 | { } |
| 20 | 33 | |
| 34 | required_device<cpu_device> m_maincpu; |
| 35 | DECLARE_READ8_MEMBER( sio_status_r ); |
| 36 | DECLARE_READ8_MEMBER( sio_data_r ); |
| 37 | DECLARE_READ8_MEMBER( sio_key_status_r ); |
| 38 | DECLARE_WRITE8_MEMBER( sio_command_w ); |
| 39 | DECLARE_WRITE8_MEMBER( altair_kbd_put ); |
| 21 | 40 | UINT8 term_data; |
| 22 | 41 | UINT8* ram; |
| 23 | 42 | }; |
| 24 | 43 | |
| 25 | 44 | |
| 26 | 45 | |
| 27 | | static READ8_HANDLER(sio_status_r) |
| 46 | READ8_MEMBER(altair_state::sio_status_r) |
| 28 | 47 | { |
| 29 | | altair_state *state = space->machine->driver_data<altair_state>(); |
| 30 | | if (state->term_data!=0) return 0x01; // data in |
| 48 | if (term_data!=0) return 0x01; // data in |
| 31 | 49 | return 0x02; // ready |
| 32 | 50 | } |
| 33 | 51 | |
| 34 | | static WRITE8_HANDLER(sio_command_w) |
| 52 | WRITE8_MEMBER(altair_state::sio_command_w) |
| 35 | 53 | { |
| 36 | 54 | |
| 37 | 55 | } |
| 38 | 56 | |
| 39 | | static READ8_HANDLER(sio_data_r) |
| 57 | READ8_MEMBER(altair_state::sio_data_r) |
| 40 | 58 | { |
| 41 | | altair_state *state = space->machine->driver_data<altair_state>(); |
| 42 | | UINT8 retVal = state->term_data; |
| 43 | | state->term_data = 0; |
| 59 | UINT8 retVal = term_data; |
| 60 | term_data = 0; |
| 44 | 61 | return retVal; |
| 45 | 62 | } |
| 46 | 63 | |
| 47 | | static WRITE8_HANDLER(sio_data_w) |
| 64 | READ8_MEMBER(altair_state::sio_key_status_r) |
| 48 | 65 | { |
| 49 | | device_t *devconf = space->machine->device(TERMINAL_TAG); |
| 50 | | terminal_write(devconf,0,data); |
| 66 | return (term_data!=0) ? 0x40 : 0x01; |
| 51 | 67 | } |
| 52 | 68 | |
| 53 | | static READ8_HANDLER(sio_key_status_r) |
| 54 | | { |
| 55 | | altair_state *state = space->machine->driver_data<altair_state>(); |
| 56 | | return (state->term_data!=0) ? 0x40 : 0x01; |
| 57 | | } |
| 58 | | |
| 59 | | static ADDRESS_MAP_START(altair_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 69 | static ADDRESS_MAP_START(altair_mem, ADDRESS_SPACE_PROGRAM, 8, altair_state) |
| 60 | 70 | ADDRESS_MAP_UNMAP_HIGH |
| 61 | | AM_RANGE( 0x0000, 0xfcff ) AM_RAM AM_BASE_MEMBER(altair_state, ram) |
| 71 | AM_RANGE( 0x0000, 0xfcff ) AM_RAM AM_BASE(ram) |
| 62 | 72 | AM_RANGE( 0xfd00, 0xfdff ) AM_ROM |
| 63 | 73 | AM_RANGE( 0xff00, 0xffff ) AM_ROM |
| 64 | 74 | ADDRESS_MAP_END |
| 65 | 75 | |
| 66 | | static ADDRESS_MAP_START( altair_io , ADDRESS_SPACE_IO, 8) |
| 76 | static ADDRESS_MAP_START(altair_io, ADDRESS_SPACE_IO, 8, altair_state) |
| 67 | 77 | ADDRESS_MAP_UNMAP_HIGH |
| 78 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 68 | 79 | AM_RANGE( 0x00, 0x00 ) AM_READ(sio_key_status_r) |
| 69 | | AM_RANGE( 0x01, 0x01 ) AM_READWRITE(sio_data_r,sio_data_w) |
| 80 | AM_RANGE( 0x01, 0x01 ) AM_MIRROR(0x10) AM_READ(sio_data_r) |
| 81 | AM_RANGE( 0x01, 0x01 ) AM_MIRROR(0x10) AM_DEVWRITE_LEGACY(TERMINAL_TAG, terminal_write) |
| 70 | 82 | AM_RANGE( 0x10, 0x10 ) AM_READWRITE(sio_status_r,sio_command_w) |
| 71 | | AM_RANGE( 0x11, 0x11 ) AM_READWRITE(sio_data_r,sio_data_w) |
| 72 | 83 | ADDRESS_MAP_END |
| 73 | 84 | |
| 74 | 85 | /* Input ports */ |
| r10553 | r10554 | |
| 101 | 112 | state->term_data = 0; |
| 102 | 113 | } |
| 103 | 114 | |
| 104 | | static WRITE8_DEVICE_HANDLER( altair_kbd_put ) |
| 115 | WRITE8_MEMBER( altair_state::altair_kbd_put ) |
| 105 | 116 | { |
| 106 | | altair_state *state = device->machine->driver_data<altair_state>(); |
| 107 | | state->term_data = data; |
| 117 | term_data = data; |
| 108 | 118 | } |
| 109 | 119 | |
| 110 | 120 | static GENERIC_TERMINAL_INTERFACE( altair_terminal_intf ) |
| 111 | 121 | { |
| 112 | | DEVCB_HANDLER(altair_kbd_put) |
| 122 | DEVCB_DRIVER_MEMBER(altair_state, altair_kbd_put) |
| 113 | 123 | }; |
| 114 | 124 | |
| 115 | 125 | static MACHINE_CONFIG_START( altair, altair_state ) |
| 116 | | /* basic machine hardware */ |
| 117 | | MCFG_CPU_ADD("maincpu", I8080, XTAL_2MHz) |
| 118 | | MCFG_CPU_PROGRAM_MAP(altair_mem) |
| 119 | | MCFG_CPU_IO_MAP(altair_io) |
| 126 | /* basic machine hardware */ |
| 127 | MCFG_CPU_ADD("maincpu", I8080, XTAL_2MHz) |
| 128 | MCFG_CPU_PROGRAM_MAP(altair_mem) |
| 129 | MCFG_CPU_IO_MAP(altair_io) |
| 120 | 130 | |
| 121 | | MCFG_MACHINE_RESET(altair) |
| 131 | MCFG_MACHINE_RESET(altair) |
| 122 | 132 | |
| 123 | 133 | /* video hardware */ |
| 124 | 134 | MCFG_FRAGMENT_ADD( generic_terminal ) |
| r10553 | r10554 | |
| 130 | 140 | |
| 131 | 141 | /* ROM definition */ |
| 132 | 142 | ROM_START( al8800bt ) |
| 133 | | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 143 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 134 | 144 | ROM_LOAD( "turnmon.bin", 0xfd00, 0x0100, CRC(5c629294) SHA1(125c76216954b681721fff84a3aca05094b21a28)) |
| 135 | 145 | ROM_LOAD( "88dskrom.bin", 0xff00, 0x0100, CRC(7c5232f3) SHA1(24f940ad70ad2829e1bc800c6790b6e993e6ebf6)) |
| 136 | 146 | ROM_END |
| r10553 | r10554 | |
| 138 | 148 | /* Driver */ |
| 139 | 149 | |
| 140 | 150 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 141 | | COMP( 1975, al8800bt, 0, 0, altair, altair, 0, "MITS", "Altair 8800bt", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 151 | COMP( 1975, al8800bt, 0, 0, altair, altair, 0, "MITS", "Altair 8800bt", GAME_NOT_WORKING | GAME_NO_SOUND_HW) |
| 142 | 152 | |