trunk/src/mess/drivers/tavernie.c
| r26575 | r26576 | |
| 9 | 9 | This system was described in a French computer magazine. |
| 10 | 10 | |
| 11 | 11 | CPU09 includes 6809, 6821, 6840, 6850, cassette, rs232 |
| 12 | | IVG09 includes 6845, WD1795, another 6821 |
| 12 | IVG09 includes 6845, WD1795, another 6821, beeper |
| 13 | 13 | |
| 14 | 14 | ToDo: |
| 15 | 15 | - Almost everything |
| 16 | 16 | - Scrolling can cause the screen to go blank (use Z command to fix) |
| 17 | 17 | - There's supposed to be a device at 2000-2003 |
| 18 | 18 | - Character rom is not dumped |
| 19 | - Fix cassette |
| 20 | - Need software |
| 19 | 21 | |
| 20 | 22 | List of commands (must be in UPPERCASE): |
| 21 | 23 | A - |
| 22 | 24 | B - |
| 23 | 25 | C - |
| 24 | | D - Dump memory |
| 26 | D - Dump memory (^X to break) |
| 25 | 27 | G - |
| 26 | 28 | I - |
| 27 | | L - |
| 29 | L - Load cassette |
| 28 | 30 | M - |
| 29 | 31 | N - |
| 30 | 32 | O - |
| 31 | | P - |
| 33 | P - Save cassette |
| 32 | 34 | Q - |
| 33 | 35 | R - Display/Alter Registers |
| 34 | 36 | S - |
| r26575 | r26576 | |
| 51 | 53 | #include "video/mc6845.h" |
| 52 | 54 | #include "machine/keyboard.h" |
| 53 | 55 | #include "machine/serial.h" |
| 56 | #include "imagedev/cassette.h" |
| 57 | #include "sound/wave.h" |
| 54 | 58 | |
| 55 | 59 | |
| 56 | 60 | class tavernie_state : public driver_device |
| r26575 | r26576 | |
| 59 | 63 | tavernie_state(const machine_config &mconfig, device_type type, const char *tag) |
| 60 | 64 | : driver_device(mconfig, type, tag) |
| 61 | 65 | , m_p_videoram(*this, "videoram") |
| 66 | , m_cass(*this, "cassette") |
| 62 | 67 | , m_maincpu(*this, "maincpu") |
| 63 | 68 | { } |
| 64 | 69 | |
| 70 | DECLARE_READ_LINE_MEMBER(ca1_r); |
| 65 | 71 | DECLARE_READ8_MEMBER(pa_r); |
| 66 | 72 | DECLARE_WRITE8_MEMBER(pa_w); |
| 67 | 73 | DECLARE_WRITE8_MEMBER(pb_w); |
| r26575 | r26576 | |
| 71 | 77 | required_shared_ptr<UINT8> m_p_videoram; |
| 72 | 78 | private: |
| 73 | 79 | UINT8 m_term_data; |
| 80 | UINT8 m_pa; |
| 74 | 81 | virtual void machine_reset(); |
| 82 | required_device<cassette_image_device> m_cass; |
| 75 | 83 | required_device<cpu_device> m_maincpu; |
| 76 | 84 | }; |
| 77 | 85 | |
| r26575 | r26576 | |
| 87 | 95 | AM_RANGE(0xeb04, 0xeb04) AM_DEVREADWRITE("acia", acia6850_device, status_read, control_write) |
| 88 | 96 | AM_RANGE(0xeb05, 0xeb05) AM_DEVREADWRITE("acia", acia6850_device, data_read, data_write) |
| 89 | 97 | AM_RANGE(0xeb08, 0xeb0f) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) |
| 90 | | AM_RANGE(0xec00, 0xefff) AM_RAM |
| 98 | AM_RANGE(0xec00, 0xefff) AM_RAM // 1Kx8 RAM MK4118 |
| 91 | 99 | AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION("roms", 0) |
| 92 | 100 | ADDRESS_MAP_END |
| 93 | 101 | |
| r26575 | r26576 | |
| 98 | 106 | /* Input ports */ |
| 99 | 107 | static INPUT_PORTS_START( tavernie ) |
| 100 | 108 | PORT_START("DSW") |
| 101 | | PORT_BIT( 0x9C, 0x9C, IPT_UNUSED ) |
| 102 | 109 | PORT_DIPNAME( 0x01, 0x00, "IRQ PTM") PORT_DIPLOCATION("SW1:1") |
| 103 | 110 | PORT_DIPSETTING( 0x01, DEF_STR(Off)) |
| 104 | 111 | PORT_DIPSETTING( 0x00, DEF_STR(On)) |
| r26575 | r26576 | |
| 169 | 176 | |
| 170 | 177 | READ8_MEMBER( tavernie_state::pa_r ) |
| 171 | 178 | { |
| 172 | | return ioport("DSW")->read(); |
| 179 | return ioport("DSW")->read() | m_pa; |
| 173 | 180 | } |
| 174 | 181 | |
| 175 | 182 | |
| r26575 | r26576 | |
| 183 | 190 | */ |
| 184 | 191 | WRITE8_MEMBER( tavernie_state::pa_w ) |
| 185 | 192 | { |
| 186 | | //m_cass->output(BIT(data, 7) ? -1.0 : +1.0); |
| 193 | m_pa = data & 0x9f; |
| 194 | m_cass->output(BIT(data, 7) ? -1.0 : +1.0); |
| 187 | 195 | } |
| 188 | 196 | |
| 189 | 197 | // centronics |
| r26575 | r26576 | |
| 191 | 199 | { |
| 192 | 200 | } |
| 193 | 201 | |
| 202 | // cass in |
| 203 | READ_LINE_MEMBER( tavernie_state::ca1_r ) |
| 204 | { |
| 205 | return (m_cass->input() > +0.01); |
| 206 | } |
| 207 | |
| 194 | 208 | static const pia6821_interface mc6821_intf = |
| 195 | 209 | { |
| 196 | 210 | DEVCB_DRIVER_MEMBER(tavernie_state, pa_r), /* port A input */ |
| 197 | 211 | DEVCB_NULL, /* port B input */ |
| 198 | | DEVCB_NULL, /* CA1 input - cassin */ |
| 212 | DEVCB_DRIVER_LINE_MEMBER(tavernie_state, ca1_r), /* CA1 input - cassin */ |
| 199 | 213 | DEVCB_NULL, /* CB1 input */ |
| 200 | 214 | DEVCB_NULL, /* CA2 input */ |
| 201 | 215 | DEVCB_NULL, /* CB2 input */ |
| r26575 | r26576 | |
| 203 | 217 | DEVCB_DRIVER_MEMBER(tavernie_state, pb_w), /* port B output */ |
| 204 | 218 | DEVCB_NULL, /* CA2 output */ |
| 205 | 219 | DEVCB_NULL, /* CB2 output */ |
| 206 | | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), /* IRQA output */ |
| 207 | | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0) /* IRQB output */ |
| 220 | DEVCB_CPU_INPUT_LINE("maincpu", M6809_IRQ_LINE), /* IRQA output */ |
| 221 | DEVCB_CPU_INPUT_LINE("maincpu", M6809_IRQ_LINE) /* IRQB output */ |
| 208 | 222 | }; |
| 209 | 223 | |
| 224 | // all i/o lines connect to the 40-pin expansion connector |
| 210 | 225 | static const ptm6840_interface mc6840_intf = |
| 211 | 226 | { |
| 212 | | XTAL_12MHz / 3, // unknown clock |
| 227 | XTAL_4MHz / 4, |
| 213 | 228 | { 0, 0, 0 }, |
| 214 | 229 | { DEVCB_NULL, |
| 215 | | DEVCB_DEVICE_LINE_MEMBER("ptm", ptm6840_device, set_c1), |
| 216 | | DEVCB_NULL }, //DEVCB_DEVICE_LINE_MEMBER("speaker", speaker_sound_device, level_w) }, |
| 230 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_NMI), |
| 231 | DEVCB_NULL }, |
| 217 | 232 | DEVCB_CPU_INPUT_LINE("maincpu", M6809_IRQ_LINE) |
| 218 | 233 | }; |
| 219 | 234 | |
| r26575 | r26576 | |
| 260 | 275 | |
| 261 | 276 | static MACHINE_CONFIG_START( tavernie, tavernie_state ) |
| 262 | 277 | /* basic machine hardware */ |
| 263 | | MCFG_CPU_ADD("maincpu",M6809, XTAL_4MHz) |
| 278 | MCFG_CPU_ADD("maincpu",M6809E, XTAL_4MHz) |
| 264 | 279 | MCFG_CPU_PROGRAM_MAP(tavernie_mem) |
| 265 | 280 | MCFG_CPU_IO_MAP(tavernie_io) |
| 266 | 281 | |
| r26575 | r26576 | |
| 274 | 289 | //MCFG_PALETTE_LENGTH(2) |
| 275 | 290 | //MCFG_PALETTE_INIT_OVERRIDE(driver_device, black_and_white) |
| 276 | 291 | |
| 292 | /* sound hardware */ |
| 293 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 294 | MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") |
| 295 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 296 | |
| 277 | 297 | /* Devices */ |
| 278 | 298 | MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) |
| 299 | MCFG_CASSETTE_ADD( "cassette", default_cassette_interface ) |
| 279 | 300 | MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal") |
| 280 | 301 | MCFG_PIA6821_ADD("pia", mc6821_intf) |
| 281 | 302 | MCFG_PTM6840_ADD("ptm", mc6840_intf) |