trunk/src/mess/drivers/b2m.c
| r18381 | r18382 | |
| 14 | 14 | #include "machine/pit8253.h" |
| 15 | 15 | #include "machine/pic8259.h" |
| 16 | 16 | #include "machine/i8251.h" |
| 17 | | #include "machine/wd17xx.h" |
| 17 | #include "formats/hxcmfm_dsk.h" |
| 18 | #include "formats/mfi_dsk.h" |
| 18 | 19 | #include "imagedev/flopdrv.h" |
| 19 | | #include "formats/basicdsk.h" |
| 20 | #include "machine/wd1772.h" |
| 20 | 21 | #include "machine/ram.h" |
| 21 | 22 | #include "includes/b2m.h" |
| 22 | 23 | |
| r18381 | r18382 | |
| 39 | 40 | AM_RANGE(0x10, 0x13) AM_READWRITE(b2m_palette_r,b2m_palette_w) |
| 40 | 41 | AM_RANGE(0x14, 0x15) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w ) |
| 41 | 42 | AM_RANGE(0x18, 0x18) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w) |
| 42 | | AM_RANGE(0x19, 0x19) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w) |
| 43 | | AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_status_r,wd17xx_command_w) |
| 44 | | AM_RANGE(0x1d, 0x1d) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_track_r,wd17xx_track_w) |
| 45 | | AM_RANGE(0x1e, 0x1e) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_sector_r,wd17xx_sector_w) |
| 46 | | AM_RANGE(0x1f, 0x1f) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_data_r,wd17xx_data_w) |
| 43 | AM_RANGE(0x19, 0x19) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w) |
| 44 | AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("wd1793", wd1773_t, read, write) |
| 47 | 45 | ADDRESS_MAP_END |
| 48 | 46 | |
| 49 | 47 | static ADDRESS_MAP_START( b2m_rom_io, AS_IO, 8, b2m_state ) |
| r18381 | r18382 | |
| 175 | 173 | PORT_CONFSETTING( 0x01, "Color") |
| 176 | 174 | PORT_CONFSETTING( 0x00, "B/W") |
| 177 | 175 | INPUT_PORTS_END |
| 178 | | |
| 176 | /* |
| 179 | 177 | static LEGACY_FLOPPY_OPTIONS_START(b2m) |
| 180 | 178 | LEGACY_FLOPPY_OPTION(b2m, "cpm", "Bashkiria-2M disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, |
| 181 | 179 | HEADS([2]) |
| r18381 | r18382 | |
| 184 | 182 | SECTOR_LENGTH([1024]) |
| 185 | 183 | FIRST_SECTOR_ID([1])) |
| 186 | 184 | LEGACY_FLOPPY_OPTIONS_END |
| 185 | */ |
| 187 | 186 | |
| 188 | | static const floppy_interface b2m_floppy_interface = |
| 189 | | { |
| 190 | | DEVCB_NULL, |
| 191 | | DEVCB_NULL, |
| 192 | | DEVCB_NULL, |
| 193 | | DEVCB_NULL, |
| 194 | | DEVCB_NULL, |
| 195 | | FLOPPY_STANDARD_5_25_DSHD, |
| 196 | | LEGACY_FLOPPY_OPTIONS_NAME(b2m), |
| 197 | | NULL, |
| 187 | static const floppy_format_type floppy_formats[] = { |
| 188 | FLOPPY_MFM_FORMAT, FLOPPY_MFI_FORMAT, |
| 198 | 189 | NULL |
| 199 | 190 | }; |
| 200 | 191 | |
| 192 | static SLOT_INTERFACE_START( b2m_floppies ) |
| 193 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) |
| 194 | SLOT_INTERFACE_END |
| 195 | |
| 196 | |
| 201 | 197 | /* Machine driver */ |
| 202 | 198 | static MACHINE_CONFIG_START( b2m, b2m_state ) |
| 203 | 199 | /* basic machine hardware */ |
| r18381 | r18382 | |
| 236 | 232 | /* uart */ |
| 237 | 233 | MCFG_I8251_ADD("uart", default_i8251_interface) |
| 238 | 234 | |
| 239 | | MCFG_FD1793_ADD("wd1793", default_wd17xx_interface_2_drives ) |
| 235 | MCFG_WD1773x_ADD("wd1793", XTAL_8MHz ) |
| 240 | 236 | |
| 241 | | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(b2m_floppy_interface) |
| 237 | MCFG_FLOPPY_DRIVE_ADD("fd0", b2m_floppies, "525dd", 0, floppy_formats) |
| 238 | MCFG_FLOPPY_DRIVE_ADD("fd1", b2m_floppies, "525dd", 0, floppy_formats) |
| 242 | 239 | |
| 243 | 240 | /* internal ram */ |
| 244 | 241 | MCFG_RAM_ADD(RAM_TAG) |
trunk/src/mess/machine/b2m.c
| r18381 | r18382 | |
| 12 | 12 | #include "imagedev/cassette.h" |
| 13 | 13 | #include "machine/i8255.h" |
| 14 | 14 | #include "machine/pit8253.h" |
| 15 | | #include "machine/wd17xx.h" |
| 15 | #include "machine/wd1772.h" |
| 16 | 16 | #include "machine/pic8259.h" |
| 17 | 17 | #include "machine/i8251.h" |
| 18 | 18 | #include "includes/b2m.h" |
| r18381 | r18382 | |
| 206 | 206 | { |
| 207 | 207 | UINT8 drive = ((data >> 1) & 1) ^ 1; |
| 208 | 208 | UINT8 side = (data & 1) ^ 1; |
| 209 | | floppy_mon_w(floppy_get_device(machine(), 0), 1); |
| 210 | | floppy_mon_w(floppy_get_device(machine(), 1), 1); |
| 209 | |
| 210 | static const char *names[] = { "fd0", "fd1"}; |
| 211 | floppy_image_device *floppy = NULL; |
| 212 | floppy_connector *con = machine().device<floppy_connector>(names[drive]); |
| 213 | if(con) |
| 214 | floppy = con->get_device(); |
| 211 | 215 | |
| 216 | floppy->mon_w(0); |
| 217 | m_fdc->set_floppy(floppy); |
| 212 | 218 | if (m_b2m_drive!=drive) { |
| 213 | | wd17xx_set_drive(m_fdc,drive); |
| 214 | | floppy_mon_w(floppy_get_device(machine(), 0), 0); |
| 215 | | floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 1, 1); |
| 216 | 219 | m_b2m_drive = drive; |
| 217 | 220 | } |
| 218 | | if (m_b2m_side!=side) { |
| 219 | | wd17xx_set_side(m_fdc,side); |
| 220 | | floppy_mon_w(floppy_get_device(machine(), 1), 0); |
| 221 | | floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 1, 1); |
| 221 | floppy->ss_w(side); |
| 222 | if (m_b2m_side!=side) { |
| 222 | 223 | m_b2m_side = side; |
| 223 | 224 | } |
| 224 | | wd17xx_dden_w(m_fdc, 0); |
| 225 | 225 | } |
| 226 | 226 | |
| 227 | 227 | I8255A_INTERFACE( b2m_ppi8255_interface_2 ) |
| r18381 | r18382 | |
| 312 | 312 | void b2m_state::machine_start() |
| 313 | 313 | { |
| 314 | 314 | m_pic = machine().device("pic8259"); |
| 315 | | m_fdc = machine().device("wd1793"); |
| 315 | m_fdc = machine().device<wd1773_t>("wd1793"); |
| 316 | 316 | m_speaker = machine().device(SPEAKER_TAG); |
| 317 | 317 | |
| 318 | | wd17xx_set_pause_time(m_fdc,10); |
| 319 | | |
| 320 | 318 | /* register for state saving */ |
| 321 | 319 | save_item(NAME(m_b2m_8255_porta)); |
| 322 | 320 | save_item(NAME(m_b2m_video_scroll)); |