src/mess/drivers/z100.c
| r12553 | r12554 | |
| 4 | 4 | |
| 5 | 5 | 15/07/2011 Skeleton driver. |
| 6 | 6 | |
| 7 | Commands: |
| 8 | Press H to list all the commands. |
| 9 | |
| 7 | 10 | TODO: |
| 8 | 11 | - remove parity check IRQ patch (understand what it really wants there!) |
| 9 | 12 | - implement S-100 bus features; |
| r12553 | r12554 | |
| 137 | 140 | ZDIPSWHZ EQU 10000000B ; 1=50Hz(0=60HZ) |
| 138 | 141 | |
| 139 | 142 | ****************************************************************************/ |
| 143 | #define ADDRESS_MAP_MODERN |
| 140 | 144 | |
| 141 | 145 | #include "emu.h" |
| 142 | 146 | #include "cpu/i86/i86.h" |
| r12553 | r12554 | |
| 152 | 156 | { |
| 153 | 157 | public: |
| 154 | 158 | z100_state(const machine_config &mconfig, device_type type, const char *tag) |
| 155 | | : driver_device(mconfig, type, tag) |
| 159 | : driver_device(mconfig, type, tag), |
| 160 | m_maincpu(*this, "maincpu"), |
| 161 | m_pia0(*this, "pia0"), |
| 162 | m_pia1(*this, "pia1"), |
| 163 | m_picm(*this, "pic8259_master"), |
| 164 | m_pics(*this, "pic8259_slave"), |
| 165 | m_fdc(*this, "z207_fdc"), |
| 166 | m_crtc(*this, "crtc") |
| 156 | 167 | { } |
| 157 | 168 | |
| 169 | required_device<cpu_device> m_maincpu; |
| 170 | required_device<device_t> m_pia0; |
| 171 | required_device<device_t> m_pia1; |
| 172 | required_device<device_t> m_picm; |
| 173 | required_device<device_t> m_pics; |
| 174 | required_device<device_t> m_fdc; |
| 175 | required_device<mc6845_device> m_crtc; |
| 176 | DECLARE_READ8_MEMBER(z100_vram_r); |
| 177 | DECLARE_WRITE8_MEMBER(z100_vram_w); |
| 178 | DECLARE_READ8_MEMBER(keyb_data_r); |
| 179 | DECLARE_READ8_MEMBER(keyb_status_r); |
| 180 | DECLARE_WRITE8_MEMBER(keyb_command_w); |
| 181 | DECLARE_WRITE8_MEMBER(z100_6845_address_w); |
| 182 | DECLARE_WRITE8_MEMBER(z100_6845_data_w); |
| 183 | DECLARE_READ8_MEMBER(z207_fdc_r); |
| 184 | DECLARE_WRITE8_MEMBER(z207_fdc_w); |
| 185 | DECLARE_WRITE_LINE_MEMBER(z100_pic_irq); |
| 186 | DECLARE_READ8_MEMBER(get_slave_ack); |
| 187 | DECLARE_WRITE8_MEMBER(video_pia_A_w); |
| 188 | DECLARE_WRITE8_MEMBER(video_pia_B_w); |
| 189 | DECLARE_WRITE_LINE_MEMBER(video_pia_CA2_w); |
| 190 | DECLARE_WRITE8_MEMBER(video_pia_CB2_w); |
| 158 | 191 | UINT8 *m_gvram; |
| 159 | 192 | UINT8 m_keyb_press,m_keyb_status; |
| 160 | 193 | UINT8 m_vram_enable; |
| r12553 | r12554 | |
| 232 | 265 | } |
| 233 | 266 | } |
| 234 | 267 | |
| 235 | | return 0; |
| 268 | return 0; |
| 236 | 269 | } |
| 237 | 270 | |
| 238 | | static READ8_HANDLER( z100_vram_r ) |
| 271 | READ8_MEMBER( z100_state::z100_vram_r ) |
| 239 | 272 | { |
| 240 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 241 | | |
| 242 | | return state->m_gvram[offset]; |
| 273 | return m_gvram[offset]; |
| 243 | 274 | } |
| 244 | 275 | |
| 245 | | static WRITE8_HANDLER( z100_vram_w ) |
| 276 | WRITE8_MEMBER( z100_state::z100_vram_w ) |
| 246 | 277 | { |
| 247 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 248 | | |
| 249 | | if(state->m_vram_enable) |
| 278 | if(m_vram_enable) |
| 250 | 279 | { |
| 251 | 280 | int i; |
| 252 | 281 | |
| 253 | | state->m_gvram[offset] = data; |
| 282 | m_gvram[offset] = data; |
| 254 | 283 | |
| 255 | 284 | for(i=0;i<3;i++) |
| 256 | 285 | { |
| 257 | | if(state->m_gbank & (1 << i)) |
| 258 | | state->m_gvram[((offset) & 0xffff)+0x10000*i] = data; |
| 286 | if(m_gbank & (1 << i)) |
| 287 | m_gvram[((offset) & 0xffff)+0x10000*i] = data; |
| 259 | 288 | } |
| 260 | 289 | } |
| 261 | 290 | } |
| 262 | 291 | |
| 263 | | static ADDRESS_MAP_START(z100_mem, AS_PROGRAM, 8) |
| 292 | static ADDRESS_MAP_START(z100_mem, AS_PROGRAM, 8, z100_state) |
| 264 | 293 | ADDRESS_MAP_UNMAP_HIGH |
| 265 | 294 | AM_RANGE(0x00000,0x3ffff) AM_RAM // 128*2 KB RAM |
| 266 | 295 | // AM_RANGE(0xb0000,0xbffff) AM_ROM // expansion ROM |
| r12553 | r12554 | |
| 271 | 300 | AM_RANGE(0xfc000,0xfffff) AM_ROM AM_REGION("ipl", 0) |
| 272 | 301 | ADDRESS_MAP_END |
| 273 | 302 | |
| 274 | | static READ8_HANDLER(keyb_data_r) |
| 303 | READ8_MEMBER( z100_state::keyb_data_r ) |
| 275 | 304 | { |
| 276 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 277 | | |
| 278 | | if(state->m_keyb_press) |
| 305 | if(m_keyb_press) |
| 279 | 306 | { |
| 280 | 307 | UINT8 res; |
| 281 | 308 | |
| 282 | | res = state->m_keyb_press; |
| 309 | res = m_keyb_press; |
| 283 | 310 | |
| 284 | | state->m_keyb_press = 0; |
| 311 | m_keyb_press = 0; |
| 285 | 312 | return res; |
| 286 | 313 | } |
| 287 | 314 | |
| 288 | | return state->m_keyb_press; |
| 315 | return m_keyb_press; |
| 289 | 316 | } |
| 290 | 317 | |
| 291 | | static READ8_HANDLER(keyb_status_r) |
| 318 | READ8_MEMBER( z100_state::keyb_status_r ) |
| 292 | 319 | { |
| 293 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 294 | | |
| 295 | | if(state->m_keyb_status) |
| 320 | if(m_keyb_status) |
| 296 | 321 | { |
| 297 | | state->m_keyb_status = 0; |
| 322 | m_keyb_status = 0; |
| 298 | 323 | return 1; |
| 299 | 324 | } |
| 300 | 325 | |
| 301 | | return state->m_keyb_status; |
| 326 | return m_keyb_status; |
| 302 | 327 | } |
| 303 | 328 | |
| 304 | | static WRITE8_HANDLER(keyb_command_w) |
| 329 | WRITE8_MEMBER( z100_state::keyb_command_w ) |
| 305 | 330 | { |
| 306 | 331 | // ... |
| 307 | 332 | } |
| 308 | 333 | |
| 309 | | static WRITE8_HANDLER( z100_6845_address_w ) |
| 334 | WRITE8_MEMBER( z100_state::z100_6845_address_w ) |
| 310 | 335 | { |
| 311 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 312 | | |
| 313 | | state->m_crtc_index = data; |
| 314 | | state->m_mc6845->address_w(*space, offset, data); |
| 336 | data &= 0x1f; |
| 337 | m_crtc_index = data; |
| 338 | m_crtc->address_w( space, offset, data ); |
| 315 | 339 | } |
| 316 | 340 | |
| 317 | | static WRITE8_HANDLER( z100_6845_data_w ) |
| 341 | WRITE8_MEMBER( z100_state::z100_6845_data_w ) |
| 318 | 342 | { |
| 319 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 320 | | |
| 321 | | state->m_crtc_vreg[state->m_crtc_index] = data; |
| 322 | | state->m_mc6845->register_w(*space, offset, data); |
| 343 | m_crtc_vreg[m_crtc_index] = data; |
| 344 | m_crtc->register_w(space, offset, data); |
| 323 | 345 | } |
| 324 | 346 | |
| 325 | | static READ8_HANDLER( z207_fdc_r ) |
| 347 | READ8_MEMBER( z100_state::z207_fdc_r ) |
| 326 | 348 | { |
| 327 | | device_t* dev = space->machine().device("z207_fdc"); |
| 328 | 349 | UINT8 res; |
| 329 | 350 | |
| 330 | 351 | res = 0; |
| 331 | 352 | |
| 332 | 353 | switch(offset) |
| 333 | 354 | { |
| 334 | | case 0: res = wd17xx_status_r(dev,offset); break; |
| 335 | | case 1: res = wd17xx_track_r(dev,offset); break; |
| 336 | | case 2: res = wd17xx_sector_r(dev,offset); break; |
| 337 | | case 3: res = wd17xx_data_r(dev,offset); break; |
| 355 | case 0: res = wd17xx_status_r(m_fdc,offset); break; |
| 356 | case 1: res = wd17xx_track_r(m_fdc,offset); break; |
| 357 | case 2: res = wd17xx_sector_r(m_fdc,offset); break; |
| 358 | case 3: res = wd17xx_data_r(m_fdc,offset); break; |
| 338 | 359 | } |
| 339 | 360 | |
| 340 | 361 | return res; |
| 341 | 362 | } |
| 342 | 363 | |
| 343 | | static WRITE8_HANDLER( z207_fdc_w ) |
| 364 | WRITE8_MEMBER( z100_state::z207_fdc_w ) |
| 344 | 365 | { |
| 345 | | z100_state *state = space->machine().driver_data<z100_state>(); |
| 346 | | device_t* dev = space->machine().device("z207_fdc"); |
| 347 | | // UINT8 res; |
| 348 | | |
| 349 | | // res = 0; |
| 350 | | |
| 351 | 366 | switch(offset) |
| 352 | 367 | { |
| 353 | | case 0: wd17xx_command_w(dev,offset,data); break; |
| 354 | | case 1: wd17xx_track_w(dev,offset,data); break; |
| 355 | | case 2: wd17xx_sector_w(dev,offset,data); break; |
| 356 | | case 3: wd17xx_data_w(dev,offset,data); break; |
| 368 | case 0: wd17xx_command_w(m_fdc,offset,data); break; |
| 369 | case 1: wd17xx_track_w(m_fdc,offset,data); break; |
| 370 | case 2: wd17xx_sector_w(m_fdc,offset,data); break; |
| 371 | case 3: wd17xx_data_w(m_fdc,offset,data); break; |
| 357 | 372 | case 4: // disk control |
| 358 | | wd17xx_set_drive(dev,data & 3); |
| 359 | | state->m_z207_cur_drive = data & 3; |
| 373 | wd17xx_set_drive(m_fdc,data & 3); |
| 374 | m_z207_cur_drive = data & 3; |
| 360 | 375 | break; |
| 361 | 376 | case 5: // aux control |
| 362 | | floppy_mon_w(floppy_get_device(space->machine(), state->m_z207_cur_drive), !BIT(data, 1)); |
| 363 | | floppy_drive_set_ready_state(floppy_get_device(space->machine(), state->m_z207_cur_drive), data & 2,0); |
| 377 | floppy_mon_w(floppy_get_device(machine(), m_z207_cur_drive), !BIT(data, 1)); |
| 378 | floppy_drive_set_ready_state(floppy_get_device(machine(), m_z207_cur_drive), data & 2,0); |
| 364 | 379 | break; |
| 365 | 380 | |
| 366 | 381 | } |
| 367 | 382 | } |
| 368 | 383 | |
| 369 | | static ADDRESS_MAP_START( z100_io , AS_IO, 8) |
| 384 | static ADDRESS_MAP_START(z100_io, AS_IO, 8, z100_state) |
| 370 | 385 | ADDRESS_MAP_UNMAP_HIGH |
| 386 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 371 | 387 | // AM_RANGE (0x00, 0x3f) reserved for non-ZDS vendors |
| 372 | 388 | // AM_RANGE (0x40, 0x5f) secondary Multiport card (Z-204) |
| 373 | 389 | // AM_RANGE (0x60, 0x7f) primary Multiport card (Z-204) |
| r12553 | r12554 | |
| 381 | 397 | // z-207 secondary disk controller (wd1797) |
| 382 | 398 | // AM_RANGE (0xcd, 0xce) ET-100 CRT Controller |
| 383 | 399 | // AM_RANGE (0xd4, 0xd7) ET-100 Trainer Parallel I/O |
| 384 | | AM_RANGE (0xd8, 0xdb) AM_DEVREADWRITE_MODERN("pia0", pia6821_device, read, write) //video board |
| 400 | AM_RANGE (0xd8, 0xdb) AM_DEVREADWRITE("pia0", pia6821_device, read, write) //video board |
| 385 | 401 | AM_RANGE (0xdc, 0xdc) AM_WRITE(z100_6845_address_w) |
| 386 | 402 | AM_RANGE (0xdd, 0xdd) AM_WRITE(z100_6845_data_w) |
| 387 | 403 | // AM_RANGE (0xde, 0xde) light pen |
| 388 | | AM_RANGE (0xe0, 0xe3) AM_DEVREADWRITE_MODERN("pia1", pia6821_device, read, write) //main board |
| 404 | AM_RANGE (0xe0, 0xe3) AM_DEVREADWRITE("pia1", pia6821_device, read, write) //main board |
| 389 | 405 | // AM_RANGE (0xe4, 0xe7) 8253 PIT |
| 390 | 406 | // AM_RANGE (0xe8, 0xeb) First 2661-2 serial port (printer) |
| 391 | 407 | // AM_RANGE (0xec, 0xef) Second 2661-2 serial port (modem) |
| 392 | | AM_RANGE (0xf0, 0xf1) AM_DEVREADWRITE("pic8259_slave", pic8259_r, pic8259_w) |
| 393 | | AM_RANGE (0xf2, 0xf3) AM_DEVREADWRITE("pic8259_master", pic8259_r, pic8259_w) |
| 408 | AM_RANGE (0xf0, 0xf1) AM_DEVREADWRITE_LEGACY("pic8259_slave", pic8259_r, pic8259_w) |
| 409 | AM_RANGE (0xf2, 0xf3) AM_DEVREADWRITE_LEGACY("pic8259_master", pic8259_r, pic8259_w) |
| 394 | 410 | AM_RANGE (0xf4, 0xf4) AM_READ(keyb_data_r) // -> 8041 MCU |
| 395 | 411 | AM_RANGE (0xf5, 0xf5) AM_READWRITE(keyb_status_r,keyb_command_w) |
| 396 | 412 | // AM_RANGE (0xf6, 0xf6) expansion ROM is present (bit 0, active low) |
| r12553 | r12554 | |
| 409 | 425 | { |
| 410 | 426 | /* TODO: table */ |
| 411 | 427 | state->m_keyb_press = (UINT8)(FPTR)(param) & 0xff; |
| 412 | | //pic8259_ir6_w(field.machine().device("pic8259_master"), 1); |
| 428 | //pic8259_ir6_w(state->m_picm, 1); |
| 413 | 429 | state->m_keyb_status = 1; |
| 414 | 430 | } |
| 415 | 431 | |
| r12553 | r12554 | |
| 582 | 598 | return pic8259_acknowledge( device->machine().device( "pic8259_master" ) ); |
| 583 | 599 | } |
| 584 | 600 | |
| 585 | | static WRITE_LINE_DEVICE_HANDLER( z100_pic_irq ) |
| 601 | WRITE_LINE_MEMBER( z100_state::z100_pic_irq ) |
| 586 | 602 | { |
| 587 | | cputag_set_input_line(device->machine(), "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); |
| 603 | cputag_set_input_line(machine(), "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); |
| 588 | 604 | // logerror("PIC#1: set IRQ line to %i\n",interrupt); |
| 589 | 605 | } |
| 590 | 606 | |
| 591 | | static READ8_DEVICE_HANDLER( get_slave_ack ) |
| 607 | READ8_MEMBER( z100_state::get_slave_ack ) |
| 592 | 608 | { |
| 593 | 609 | if (offset==7) { // IRQ = 7 |
| 594 | | return pic8259_acknowledge(device->machine().device( "pic8259_slave")); |
| 610 | return pic8259_acknowledge(m_pics); |
| 595 | 611 | } |
| 596 | | return 0x00; |
| 612 | return 0; |
| 597 | 613 | } |
| 598 | 614 | |
| 599 | 615 | static const struct pic8259_interface z100_pic8259_master_config = |
| 600 | 616 | { |
| 601 | | DEVCB_LINE(z100_pic_irq), |
| 617 | DEVCB_DRIVER_LINE_MEMBER(z100_state, z100_pic_irq), |
| 602 | 618 | DEVCB_LINE_VCC, |
| 603 | | DEVCB_HANDLER(get_slave_ack) |
| 619 | DEVCB_DRIVER_MEMBER(z100_state, get_slave_ack) |
| 604 | 620 | }; |
| 605 | 621 | |
| 606 | 622 | static const struct pic8259_interface z100_pic8259_slave_config = |
| r12553 | r12554 | |
| 624 | 640 | NULL /* update address callback */ |
| 625 | 641 | }; |
| 626 | 642 | |
| 627 | | static WRITE8_DEVICE_HANDLER( video_pia_A_w ) |
| 643 | WRITE8_MEMBER( z100_state::video_pia_A_w ) |
| 628 | 644 | { |
| 629 | | z100_state *state = device->machine().driver_data<z100_state>(); |
| 630 | | |
| 631 | 645 | /* |
| 632 | 646 | all bits are active low |
| 633 | 647 | x--- ---- -> disable video RAM |
| r12553 | r12554 | |
| 640 | 654 | ---- ---x -> enable red display |
| 641 | 655 | */ |
| 642 | 656 | |
| 643 | | state->m_vram_enable = ((data & 0x80) >> 7) ^ 1; |
| 644 | | state->m_gbank = BITSWAP8(((data & 0x70) >> 4) ^ 0x7,7,6,5,4,3,1,0,2); |
| 645 | | state->m_flash = ((data & 8) >> 3) ^ 1; |
| 646 | | state->m_display_mask = BITSWAP8((data & 7) ^ 7,7,6,5,4,3,1,0,2); |
| 657 | m_vram_enable = ((data & 0x80) >> 7) ^ 1; |
| 658 | m_gbank = BITSWAP8(((data & 0x70) >> 4) ^ 0x7,7,6,5,4,3,1,0,2); |
| 659 | m_flash = ((data & 8) >> 3) ^ 1; |
| 660 | m_display_mask = BITSWAP8((data & 7) ^ 7,7,6,5,4,3,1,0,2); |
| 647 | 661 | } |
| 648 | 662 | |
| 649 | | static WRITE8_DEVICE_HANDLER( video_pia_B_w ) |
| 663 | WRITE8_MEMBER( z100_state::video_pia_B_w ) |
| 650 | 664 | { |
| 651 | | z100_state *state = device->machine().driver_data<z100_state>(); |
| 652 | | |
| 653 | | state->m_start_addr = data << 4; //<- TODO |
| 665 | m_start_addr = data << 4; //<- TODO |
| 654 | 666 | } |
| 655 | 667 | |
| 656 | 668 | /* clear screen */ |
| 657 | | static WRITE_LINE_DEVICE_HANDLER( video_pia_CA2_w ) |
| 669 | WRITE_LINE_MEMBER( z100_state::video_pia_CA2_w ) |
| 658 | 670 | { |
| 659 | | z100_state *drvstate = device->machine().driver_data<z100_state>(); |
| 660 | 671 | int i; |
| 661 | 672 | |
| 662 | | for(i=0;i<0x30000;i++) |
| 663 | | drvstate->m_gvram[i] = drvstate->m_clr_val; |
| 673 | for(i=0; i<0x30000; i++) |
| 674 | m_gvram[i] = m_clr_val; |
| 664 | 675 | } |
| 665 | 676 | |
| 666 | | static WRITE8_DEVICE_HANDLER( video_pia_CB2_w ) |
| 677 | WRITE8_MEMBER( z100_state::video_pia_CB2_w ) |
| 667 | 678 | { |
| 668 | | z100_state *state = device->machine().driver_data<z100_state>(); |
| 669 | | |
| 670 | | state->m_clr_val = (data & 1) ? 0x00 : 0xff; |
| 679 | m_clr_val = (data & 1) ? 0x00 : 0xff; |
| 671 | 680 | } |
| 672 | 681 | |
| 673 | 682 | static const pia6821_interface pia0_intf = |
| r12553 | r12554 | |
| 678 | 687 | DEVCB_NULL, /* line CB1 in */ |
| 679 | 688 | DEVCB_NULL, /* line CA2 in */ |
| 680 | 689 | DEVCB_NULL, /* line CB2 in */ |
| 681 | | DEVCB_HANDLER(video_pia_A_w), /* port A out */ |
| 682 | | DEVCB_HANDLER(video_pia_B_w), /* port B out */ |
| 683 | | DEVCB_LINE(video_pia_CA2_w), /* line CA2 out */ |
| 684 | | DEVCB_HANDLER(video_pia_CB2_w), /* port CB2 out */ |
| 690 | DEVCB_DRIVER_MEMBER(z100_state, video_pia_A_w), /* port A out */ |
| 691 | DEVCB_DRIVER_MEMBER(z100_state, video_pia_B_w), /* port B out */ |
| 692 | DEVCB_DRIVER_LINE_MEMBER(z100_state, video_pia_CA2_w), /* line CA2 out */ |
| 693 | DEVCB_DRIVER_MEMBER(z100_state, video_pia_CB2_w), /* port CB2 out */ |
| 685 | 694 | DEVCB_NULL, /* IRQA */ |
| 686 | 695 | DEVCB_NULL /* IRQB */ |
| 687 | 696 | }; |
| r12553 | r12554 | |
| 763 | 772 | } |
| 764 | 773 | |
| 765 | 774 | static MACHINE_CONFIG_START( z100, z100_state ) |
| 766 | | /* basic machine hardware */ |
| 767 | | MCFG_CPU_ADD("maincpu",I8088, XTAL_14_31818MHz/3) |
| 768 | | MCFG_CPU_PROGRAM_MAP(z100_mem) |
| 769 | | MCFG_CPU_IO_MAP(z100_io) |
| 775 | /* basic machine hardware */ |
| 776 | MCFG_CPU_ADD("maincpu",I8088, XTAL_14_31818MHz/3) |
| 777 | MCFG_CPU_PROGRAM_MAP(z100_mem) |
| 778 | MCFG_CPU_IO_MAP(z100_io) |
| 770 | 779 | |
| 771 | | MCFG_MACHINE_START(z100) |
| 772 | | MCFG_MACHINE_RESET(z100) |
| 780 | MCFG_MACHINE_START(z100) |
| 781 | MCFG_MACHINE_RESET(z100) |
| 773 | 782 | |
| 783 | /* video hardware */ |
| 784 | MCFG_SCREEN_ADD("screen", RASTER) |
| 785 | MCFG_SCREEN_REFRESH_RATE(50) |
| 786 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 787 | MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 788 | MCFG_SCREEN_SIZE(640, 480) |
| 789 | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 790 | MCFG_VIDEO_START(z100) |
| 791 | MCFG_SCREEN_UPDATE(z100) |
| 792 | MCFG_PALETTE_LENGTH(8) |
| 793 | MCFG_PALETTE_INIT(z100) |
| 794 | |
| 795 | /* Devices */ |
| 796 | MCFG_MC6845_ADD("crtc", MC6845, XTAL_14_31818MHz/8, mc6845_intf) /* unknown clock, hand tuned to get ~50/~60 fps */ |
| 797 | |
| 774 | 798 | MCFG_PIC8259_ADD( "pic8259_master", z100_pic8259_master_config ) |
| 775 | 799 | MCFG_PIC8259_ADD( "pic8259_slave", z100_pic8259_slave_config ) |
| 776 | 800 | |
| r12553 | r12554 | |
| 779 | 803 | |
| 780 | 804 | MCFG_FD1797_ADD("z207_fdc",z207_interface) |
| 781 | 805 | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(z100_floppy_interface) |
| 782 | | |
| 783 | | /* video hardware */ |
| 784 | | MCFG_SCREEN_ADD("screen", RASTER) |
| 785 | | MCFG_SCREEN_REFRESH_RATE(50) |
| 786 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 787 | | MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 788 | | MCFG_SCREEN_SIZE(640, 480) |
| 789 | | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 790 | | MCFG_SCREEN_UPDATE(z100) |
| 791 | | |
| 792 | | MCFG_MC6845_ADD("crtc", MC6845, XTAL_14_31818MHz/8, mc6845_intf) /* unknown clock, hand tuned to get ~50/~60 fps */ |
| 793 | | |
| 794 | | MCFG_PALETTE_LENGTH(8) |
| 795 | | MCFG_PALETTE_INIT(z100) |
| 796 | | |
| 797 | | MCFG_VIDEO_START(z100) |
| 798 | 806 | MACHINE_CONFIG_END |
| 799 | 807 | |
| 800 | 808 | /* ROM definition */ |
| r12553 | r12554 | |
| 820 | 828 | /* Driver */ |
| 821 | 829 | |
| 822 | 830 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 823 | | COMP( 1982, z100, 0, 0, z100, z100, z100, "Zenith", "Z-100", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 824 | | |
| 831 | COMP( 1982, z100, 0, 0, z100, z100, z100, "Zenith", "Z-100", GAME_NOT_WORKING | GAME_NO_SOUND) |