trunk/src/mess/drivers/binbug.c
| r20291 | r20292 | |
| 19 | 19 | video output. Method of output is through a DG640 board (sold by |
| 20 | 20 | Applied Technology) which uses a MCM6574 as a character generator. |
| 21 | 21 | The DG640 also supports blinking, reverse-video, and LORES graphics. |
| 22 | | It is a S100 card. |
| 22 | It is a S100 card, also known as ETI-640. |
| 23 | 23 | |
| 24 | 24 | Keyboard input, like PIPBUG, is via a serial device. |
| 25 | 25 | The baud rate is 300, 8N1. |
| r20291 | r20292 | |
| 36 | 36 | - 5.2 ACOS tape system, 1200 baud terminal |
| 37 | 37 | |
| 38 | 38 | |
| 39 | | Status: |
| 40 | | - DG640 is completely emulated, even though BINBUG doesn't use most |
| 39 | Status: |
| 40 | - DG640 is completely emulated, even though BINBUG doesn't use most |
| 41 | 41 | of its features. |
| 42 | 42 | - BINBUG works except that the cassette interface isn't the same as |
| 43 | 43 | real hardware. But you can save, and load it back. |
| r20291 | r20292 | |
| 73 | 73 | UINT8 m_framecnt; |
| 74 | 74 | virtual void video_start(); |
| 75 | 75 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 76 | | required_device<serial_keyboard_device> m_keyboard; |
| 77 | | required_device<cassette_image_device> m_cass; |
| 76 | optional_device<serial_keyboard_device> m_keyboard; |
| 77 | optional_device<cassette_image_device> m_cass; |
| 78 | 78 | required_shared_ptr<const UINT8> m_p_videoram; |
| 79 | 79 | required_shared_ptr<const UINT8> m_p_attribram; |
| 80 | 80 | }; |
| r20291 | r20292 | |
| 330 | 330 | |
| 331 | 331 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 332 | 332 | COMP( 1980, binbug, pipbug, 0, binbug, binbug, driver_device, 0, "MicroByte", "BINBUG 3.6", 0 ) |
| 333 | |
| 334 | |
| 335 | |
| 336 | /******************************************************************************************************************/ |
| 337 | |
| 338 | /* |
| 339 | |
| 340 | DGOS-Z80 (ETI-680) |
| 341 | |
| 342 | ROM is a bad dump, corrections are being made. |
| 343 | */ |
| 344 | |
| 345 | |
| 346 | #include "cpu/z80/z80.h" |
| 347 | #include "machine/z80ctc.h" |
| 348 | #include "machine/z80pio.h" |
| 349 | |
| 350 | class dgosz80_state : public binbug_state |
| 351 | { |
| 352 | public: |
| 353 | dgosz80_state(const machine_config &mconfig, device_type type, const char *tag) |
| 354 | : binbug_state(mconfig, type, tag), |
| 355 | m_maincpu(*this, "maincpu"), |
| 356 | m_ctc(*this, "z80ctc"), |
| 357 | m_pio(*this, "z80pio") |
| 358 | { } |
| 359 | |
| 360 | DECLARE_READ8_MEMBER(porta_r); |
| 361 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 362 | UINT8 m_term_data; |
| 363 | virtual void machine_reset(); |
| 364 | required_device<cpu_device> m_maincpu; |
| 365 | required_device<z80ctc_device> m_ctc; |
| 366 | required_device<z80pio_device> m_pio; |
| 367 | }; |
| 368 | |
| 369 | static ADDRESS_MAP_START(dgosz80_mem, AS_PROGRAM, 8, dgosz80_state) |
| 370 | ADDRESS_MAP_UNMAP_HIGH |
| 371 | AM_RANGE( 0x0000, 0xcfff) AM_RAM |
| 372 | AM_RANGE( 0xd000, 0xd7ff) AM_ROM |
| 373 | AM_RANGE( 0xd800, 0xefff) AM_RAM |
| 374 | AM_RANGE( 0xf000, 0xf3ff) AM_RAM AM_SHARE("videoram") |
| 375 | AM_RANGE( 0xf400, 0xf7ff) AM_RAM AM_SHARE("attribram") |
| 376 | ADDRESS_MAP_END |
| 377 | |
| 378 | static ADDRESS_MAP_START(dgosz80_io, AS_IO, 8, dgosz80_state) |
| 379 | ADDRESS_MAP_UNMAP_HIGH |
| 380 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 381 | AM_RANGE(0x00,0x03) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 382 | AM_RANGE(0x04,0x07) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write) |
| 383 | //AM_RANGE(0x08,0x08) SWP Control and Status |
| 384 | //AM_RANGE(0x09,0x09) parallel input port |
| 385 | // Optional AM9519 Programmable Interrupt Controller (port c = data, port d = control) |
| 386 | //AM_RANGE(0x0c,0x0d) AM_DEVREADWRITE("am9519", am9519_device, read, write) |
| 387 | ADDRESS_MAP_END |
| 388 | |
| 389 | void dgosz80_state::machine_reset() |
| 390 | { |
| 391 | m_maincpu->set_pc(0xd000); |
| 392 | } |
| 393 | |
| 394 | /* Input ports */ |
| 395 | static INPUT_PORTS_START( dgosz80 ) |
| 396 | INPUT_PORTS_END |
| 397 | |
| 398 | WRITE8_MEMBER( dgosz80_state::kbd_put ) |
| 399 | { |
| 400 | m_term_data = data; |
| 401 | m_pio->port_a_write(data);//keyb_r(generic_space(),0,0xff)); |
| 402 | } |
| 403 | |
| 404 | static ASCII_KEYBOARD_INTERFACE( dgosz80_keyboard_intf ) |
| 405 | { |
| 406 | DEVCB_DRIVER_MEMBER(dgosz80_state, kbd_put) |
| 407 | }; |
| 408 | |
| 409 | READ8_MEMBER( dgosz80_state::porta_r ) |
| 410 | { |
| 411 | UINT8 data = m_term_data; |
| 412 | m_term_data = 0; |
| 413 | return data; |
| 414 | } |
| 415 | |
| 416 | static Z80PIO_INTERFACE( z80pio_intf ) |
| 417 | { |
| 418 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //IRQ |
| 419 | DEVCB_DRIVER_MEMBER(dgosz80_state, porta_r), // in port A |
| 420 | DEVCB_NULL, // out port A |
| 421 | DEVCB_NULL, |
| 422 | DEVCB_NULL, // in port B |
| 423 | DEVCB_NULL, // out port B |
| 424 | DEVCB_NULL |
| 425 | }; |
| 426 | |
| 427 | static Z80CTC_INTERFACE( z80ctc_intf ) |
| 428 | { |
| 429 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), // interrupt handler |
| 430 | DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg1), // ZC/TO0 callback |
| 431 | DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg2), // ZC/TO1 callback, beep interface |
| 432 | DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3) // ZC/TO2 callback |
| 433 | }; |
| 434 | |
| 435 | static MACHINE_CONFIG_START( dgosz80, dgosz80_state ) |
| 436 | /* basic machine hardware */ |
| 437 | MCFG_CPU_ADD("maincpu",Z80, XTAL_8MHz / 4) |
| 438 | MCFG_CPU_PROGRAM_MAP(dgosz80_mem) |
| 439 | MCFG_CPU_IO_MAP(dgosz80_io) |
| 440 | |
| 441 | /* video hardware */ |
| 442 | MCFG_SCREEN_ADD("screen", RASTER) |
| 443 | MCFG_SCREEN_REFRESH_RATE(50) |
| 444 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 445 | MCFG_SCREEN_UPDATE_DRIVER(binbug_state, screen_update) |
| 446 | MCFG_SCREEN_SIZE(512, 256) |
| 447 | MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 255) |
| 448 | MCFG_GFXDECODE(dg640) |
| 449 | MCFG_PALETTE_LENGTH(2) |
| 450 | MCFG_PALETTE_INIT(monochrome_amber) |
| 451 | |
| 452 | /* Keyboard */ |
| 453 | MCFG_ASCII_KEYBOARD_ADD("keyb", dgosz80_keyboard_intf) |
| 454 | |
| 455 | /* Devices */ |
| 456 | MCFG_Z80CTC_ADD( "z80ctc", XTAL_8MHz / 4, z80ctc_intf ) |
| 457 | MCFG_Z80PIO_ADD( "z80pio", XTAL_8MHz / 4, z80pio_intf ) |
| 458 | MACHINE_CONFIG_END |
| 459 | |
| 460 | |
| 461 | /* ROM definition */ |
| 462 | ROM_START( dgosz80 ) |
| 463 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 464 | ROM_LOAD( "dgosz80.rom", 0xd000, 0x0800, NO_DUMP) //CRC(2cb1ac6e) SHA1(a969883fc767484d6b0fa103cfa4b4129b90441b) ) |
| 465 | |
| 466 | ROM_REGION( 0x0800, "chargen", 0 ) |
| 467 | ROM_LOAD( "6574.bin", 0x0000, 0x0800, CRC(fd75df4f) SHA1(4d09aae2f933478532b7d3d1a2dee7123d9828ca) ) |
| 468 | ROM_END |
| 469 | |
| 470 | /* Driver */ |
| 471 | |
| 472 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 473 | COMP( 1980, dgosz80, 0, 0, dgosz80, dgosz80, driver_device, 0, "David Griffiths", "DGOS-Z80 1.4", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |