trunk/src/mess/machine/special.c
| r19518 | r19519 | |
| 221 | 221 | MACHINE_START_MEMBER(special_state,specimx) |
| 222 | 222 | { |
| 223 | 223 | m_specimx_audio = machine().device("custom"); |
| 224 | m_drive = 0; |
| 225 | m_fdc->setup_drq_cb(fd1793_t::line_cb(FUNC(special_state::fdc_drq), this)); |
| 224 | 226 | } |
| 225 | 227 | |
| 226 | 228 | TIMER_CALLBACK_MEMBER(special_state::setup_pit8253_gates) |
| r19518 | r19519 | |
| 236 | 238 | { |
| 237 | 239 | specimx_set_bank(2, 0); // Initiali load ROM disk |
| 238 | 240 | machine().scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(special_state::setup_pit8253_gates),this)); |
| 239 | | device_t *fdc = machine().device("wd1793"); |
| 240 | | wd17xx_set_pause_time(fdc,12); |
| 241 | | wd17xx_dden_w(fdc, 0); |
| 242 | 241 | } |
| 243 | 242 | |
| 244 | 243 | READ8_MEMBER( special_state::specimx_disk_ctrl_r ) |
| r19518 | r19519 | |
| 246 | 245 | return 0xff; |
| 247 | 246 | } |
| 248 | 247 | |
| 248 | void special_state::fdc_drq(bool state) |
| 249 | { |
| 250 | /* Clears HALT state of CPU when data is ready to read */ |
| 251 | if(state) { |
| 252 | m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); |
| 253 | } |
| 254 | } |
| 255 | |
| 249 | 256 | WRITE8_MEMBER( special_state::specimx_disk_ctrl_w ) |
| 250 | 257 | { |
| 258 | static const char *names[] = { "fd0", "fd1"}; |
| 259 | floppy_image_device *floppy = NULL; |
| 260 | floppy_connector *con = machine().device<floppy_connector>(names[m_drive & 1]); |
| 261 | if(con) |
| 262 | floppy = con->get_device(); |
| 263 | |
| 264 | m_fdc->set_floppy(floppy); |
| 265 | floppy->mon_w(0); |
| 266 | |
| 251 | 267 | switch(offset) |
| 252 | 268 | { |
| 269 | case 0 : |
| 270 | m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); |
| 271 | break; |
| 253 | 272 | case 2 : |
| 254 | | wd17xx_set_side(m_fdc, data & 1); |
| 273 | floppy->ss_w(data & 1); |
| 255 | 274 | break; |
| 256 | 275 | case 3 : |
| 257 | | wd17xx_set_drive(m_fdc, data & 1); |
| 276 | m_drive = data & 1; |
| 258 | 277 | break; |
| 259 | 278 | } |
| 260 | 279 | } |
| r19518 | r19519 | |
| 380 | 399 | |
| 381 | 400 | WRITE8_MEMBER( special_state::erik_disk_reg_w ) |
| 382 | 401 | { |
| 402 | /* |
| 383 | 403 | wd17xx_set_side (m_fdc,data & 1); |
| 384 | 404 | wd17xx_set_drive(m_fdc,(data >> 1) & 1); |
| 385 | 405 | wd17xx_dden_w(m_fdc, BIT(data, 2)); |
| 386 | 406 | floppy_mon_w(floppy_get_device(machine(), BIT(data, 1)), 0); |
| 387 | 407 | floppy_mon_w(floppy_get_device(machine(), BIT(data, 1) ^ 1), 1); |
| 388 | | floppy_drive_set_ready_state(floppy_get_device(machine(), BIT(data, 1)), 1, 1); |
| 408 | floppy_drive_set_ready_state(floppy_get_device(machine(), BIT(data, 1)), 1, 1);*/ |
| 389 | 409 | } |
trunk/src/mess/includes/special.h
| r19518 | r19519 | |
| 15 | 15 | #include "machine/i8255.h" |
| 16 | 16 | #include "machine/pit8253.h" |
| 17 | 17 | #include "imagedev/cassette.h" |
| 18 | | #include "imagedev/flopdrv.h" |
| 19 | | #include "formats/basicdsk.h" |
| 20 | 18 | #include "formats/rk_cas.h" |
| 21 | | #include "formats/smx_dsk.h" |
| 22 | | #include "machine/wd17xx.h" |
| 19 | #include "machine/wd_fdc.h" |
| 23 | 20 | #include "machine/ram.h" |
| 24 | 21 | |
| 25 | 22 | |
| r19518 | r19519 | |
| 30 | 27 | : driver_device(mconfig, type, tag), |
| 31 | 28 | m_maincpu(*this, "maincpu"), |
| 32 | 29 | m_ppi(*this, "ppi8255"), |
| 33 | | m_fdc(*this, "wd1793"), |
| 30 | m_fdc(*this, "fd1793"), |
| 34 | 31 | m_dac(*this, "dac"), |
| 35 | 32 | m_cass(*this, CASSETTE_TAG), |
| 36 | 33 | m_ram(*this, RAM_TAG), |
| r19518 | r19519 | |
| 73 | 70 | UINT8 m_RC_register; |
| 74 | 71 | required_device<cpu_device> m_maincpu; |
| 75 | 72 | optional_device<i8255_device> m_ppi; |
| 76 | | optional_device<fd1793_device> m_fdc; |
| 73 | optional_device<fd1793_t> m_fdc; |
| 77 | 74 | optional_device<dac_device> m_dac; |
| 78 | 75 | optional_device<cassette_image_device> m_cass; |
| 79 | 76 | optional_device<ram_device> m_ram; |
| 80 | 77 | optional_shared_ptr<UINT8> m_p_videoram; |
| 78 | int m_drive; |
| 81 | 79 | DECLARE_DRIVER_INIT(erik); |
| 82 | 80 | DECLARE_DRIVER_INIT(special); |
| 83 | 81 | DECLARE_MACHINE_RESET(special); |
| r19518 | r19519 | |
| 96 | 94 | UINT32 screen_update_specimx(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 97 | 95 | TIMER_CALLBACK_MEMBER(special_reset); |
| 98 | 96 | TIMER_CALLBACK_MEMBER(setup_pit8253_gates); |
| 97 | void fdc_drq(bool state); |
| 99 | 98 | }; |
| 100 | 99 | |
| 101 | 100 | |
trunk/src/mess/drivers/special.c
| r19518 | r19519 | |
| 44 | 44 | AM_RANGE(0xf1, 0xf1) AM_READWRITE(erik_rr_reg_r, erik_rr_reg_w) |
| 45 | 45 | AM_RANGE(0xf2, 0xf2) AM_READWRITE(erik_rc_reg_r, erik_rc_reg_w) |
| 46 | 46 | AM_RANGE(0xf3, 0xf3) AM_READWRITE(erik_disk_reg_r, erik_disk_reg_w) |
| 47 | | AM_RANGE(0xf4, 0xf4) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_status_r, wd17xx_command_w) |
| 48 | | AM_RANGE(0xf5, 0xf5) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_track_r, wd17xx_track_w) |
| 49 | | AM_RANGE(0xf6, 0xf6) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_sector_r, wd17xx_sector_w) |
| 50 | | AM_RANGE(0xf7, 0xf7) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_data_r, wd17xx_data_w) |
| 47 | AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE("fd1793", fd1793_t, read, write) |
| 51 | 48 | ADDRESS_MAP_END |
| 52 | 49 | |
| 53 | 50 | static ADDRESS_MAP_START(specimx_mem, AS_PROGRAM, 8, special_state ) |
| r19518 | r19519 | |
| 58 | 55 | AM_RANGE( 0xffc0, 0xffdf ) AM_RAMBANK("bank4") |
| 59 | 56 | AM_RANGE( 0xffe0, 0xffe3 ) AM_DEVREADWRITE("ppi8255", i8255_device, read, write) |
| 60 | 57 | AM_RANGE( 0xffe4, 0xffe7 ) AM_RAM //external 8255 |
| 61 | | AM_RANGE( 0xffe8, 0xffe8 ) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_status_r,wd17xx_command_w) |
| 62 | | AM_RANGE( 0xffe9, 0xffe9 ) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_track_r,wd17xx_track_w) |
| 63 | | AM_RANGE( 0xffea, 0xffea ) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_sector_r,wd17xx_sector_w) |
| 64 | | AM_RANGE( 0xffea, 0xffeb ) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_data_r,wd17xx_data_w) |
| 58 | AM_RANGE( 0xffe8, 0xffeb ) AM_DEVREADWRITE("fd1793", fd1793_t, read, write) |
| 65 | 59 | AM_RANGE( 0xffec, 0xffef ) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w) |
| 66 | 60 | AM_RANGE( 0xfff0, 0xfff3 ) AM_READWRITE(specimx_disk_ctrl_r, specimx_disk_ctrl_w) |
| 67 | 61 | AM_RANGE( 0xfff8, 0xfff8 ) AM_READWRITE(specimx_video_color_r,specimx_video_color_w) |
| r19518 | r19519 | |
| 385 | 379 | NULL |
| 386 | 380 | }; |
| 387 | 381 | |
| 388 | | static const floppy_interface specimx_floppy_interface = |
| 389 | | { |
| 390 | | DEVCB_NULL, |
| 391 | | DEVCB_NULL, |
| 392 | | DEVCB_NULL, |
| 393 | | DEVCB_NULL, |
| 394 | | DEVCB_NULL, |
| 395 | | FLOPPY_STANDARD_5_25_DSHD, |
| 396 | | LEGACY_FLOPPY_OPTIONS_NAME(specimx), |
| 397 | | NULL, |
| 398 | | NULL |
| 399 | | }; |
| 382 | static SLOT_INTERFACE_START( specimx_floppies ) |
| 383 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) |
| 384 | SLOT_INTERFACE_END |
| 400 | 385 | |
| 401 | 386 | /* Machine driver */ |
| 402 | 387 | static MACHINE_CONFIG_START( special, special_state ) |
| r19518 | r19519 | |
| 459 | 444 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 460 | 445 | |
| 461 | 446 | /* Devices */ |
| 462 | | MCFG_FD1793_ADD("wd1793", default_wd17xx_interface_2_drives ) |
| 463 | | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(specimx_floppy_interface) |
| 447 | MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8) |
| 464 | 448 | |
| 449 | MCFG_FLOPPY_DRIVE_ADD("fd0", specimx_floppies, "525dd", 0, floppy_image_device::default_floppy_formats) |
| 450 | MCFG_FLOPPY_DRIVE_ADD("fd1", specimx_floppies, "525dd", 0, floppy_image_device::default_floppy_formats) |
| 451 | |
| 465 | 452 | /* internal ram */ |
| 466 | 453 | MCFG_RAM_ADD(RAM_TAG) |
| 467 | 454 | MCFG_RAM_DEFAULT_SIZE("128K") |
| r19518 | r19519 | |
| 495 | 482 | |
| 496 | 483 | /* Devices */ |
| 497 | 484 | MCFG_CASSETTE_ADD( CASSETTE_TAG, special_cassette_interface ) |
| 498 | | MCFG_FD1793_ADD("wd1793", default_wd17xx_interface_2_drives ) |
| 499 | | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(specimx_floppy_interface) |
| 500 | 485 | MCFG_I8255_ADD( "ppi8255", specialist_ppi8255_interface ) |
| 486 | MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8) |
| 501 | 487 | |
| 488 | MCFG_FLOPPY_DRIVE_ADD("fd0", specimx_floppies, "525dd", 0, floppy_image_device::default_floppy_formats) |
| 489 | MCFG_FLOPPY_DRIVE_ADD("fd1", specimx_floppies, "525dd", 0, floppy_image_device::default_floppy_formats) |
| 490 | |
| 502 | 491 | /* internal ram */ |
| 503 | 492 | MCFG_RAM_ADD(RAM_TAG) |
| 504 | 493 | MCFG_RAM_DEFAULT_SIZE("192K") |