src/mess/drivers/cosmicos.c
| r8939 | r8940 | |
| 21 | 21 | |
| 22 | 22 | TODO: |
| 23 | 23 | |
| 24 | - fix direct update handler to make system work again |
| 24 | 25 | - display interface INH |
| 25 | 26 | - 2 segment display |
| 26 | 27 | - single step |
| r8939 | r8940 | |
| 154 | 155 | /* Memory Maps */ |
| 155 | 156 | |
| 156 | 157 | static ADDRESS_MAP_START( cosmicos_mem, ADDRESS_SPACE_PROGRAM, 8 ) |
| 157 | | AM_RANGE(0x0000, 0xbfff) AM_RAMBANK("bank1") |
| 158 | | AM_RANGE(0xc000, 0xcfff) AM_ROM |
| 159 | | AM_RANGE(0xff00, 0xffff) AM_RAMBANK("bank2") |
| 158 | AM_RANGE(0x0000, 0xbfff) AM_RAM |
| 159 | AM_RANGE(0xc000, 0xcfff) AM_ROM AM_REGION(CDP1802_TAG, 0) |
| 160 | AM_RANGE(0xff00, 0xffff) AM_RAM |
| 160 | 161 | ADDRESS_MAP_END |
| 161 | 162 | |
| 162 | 163 | static ADDRESS_MAP_START( cosmicos_io, ADDRESS_SPACE_IO, 8 ) |
| r8939 | r8940 | |
| 266 | 267 | { |
| 267 | 268 | cosmicos_state *state = machine->driver_data<cosmicos_state>(); |
| 268 | 269 | address_space *program = cputag_get_address_space(machine, CDP1802_TAG, ADDRESS_SPACE_PROGRAM); |
| 270 | UINT8 *ram = messram_get_ptr(machine->device("messram")); |
| 269 | 271 | |
| 270 | 272 | if (state->ram_disable) |
| 271 | 273 | { |
| 272 | | memory_unmap_read(program, 0xff00, 0xffff, 0, 0); |
| 273 | | memory_unmap_write(program, 0xff00, 0xffff, 0, 0); |
| 274 | memory_unmap_readwrite(program, 0xff00, 0xffff, 0, 0); |
| 274 | 275 | } |
| 275 | 276 | else |
| 276 | 277 | { |
| 277 | 278 | if (state->ram_protect) |
| 278 | 279 | { |
| 279 | | memory_install_read_bank(program, 0xff00, 0xffff, 0, 0, "bank2"); |
| 280 | | memory_unmap_write(program, 0xff00, 0xffff, 0, 0); |
| 280 | memory_install_rom(program, 0xff00, 0xffff, 0, 0, ram); |
| 281 | 281 | } |
| 282 | 282 | else |
| 283 | 283 | { |
| 284 | | memory_install_read_bank(program, 0xff00, 0xffff, 0, 0, "bank2"); |
| 285 | | memory_install_write_bank(program, 0xff00, 0xffff, 0, 0, "bank2"); |
| 284 | memory_install_ram(program, 0xff00, 0xffff, 0, 0, ram); |
| 286 | 285 | } |
| 287 | 286 | } |
| 288 | 287 | } |
| r8939 | r8940 | |
| 527 | 526 | dm9368_rbi_w(state->dm9368, 1); |
| 528 | 527 | |
| 529 | 528 | /* setup memory banking */ |
| 530 | | memory_configure_bank(machine, "bank1", 0, 1, memory_region(machine, CDP1802_TAG), 0); |
| 531 | | memory_set_bank(machine, "bank1", 0); |
| 532 | | |
| 533 | | memory_configure_bank(machine, "bank2", 0, 1, memory_region(machine, CDP1802_TAG) + 0xff00, 0); |
| 534 | | memory_set_bank(machine, "bank2", 0); |
| 535 | | |
| 536 | 529 | switch (messram_get_size(machine->device("messram"))) |
| 537 | 530 | { |
| 538 | 531 | case 256: |
| r8939 | r8940 | |
| 540 | 533 | break; |
| 541 | 534 | |
| 542 | 535 | case 4*1024: |
| 543 | | memory_install_readwrite_bank(program, 0x0000, 0x0fff, 0, 0, "bank1"); |
| 544 | 536 | memory_unmap_readwrite(program, 0x1000, 0xbfff, 0, 0); |
| 545 | 537 | break; |
| 546 | | |
| 547 | | case 48*1024: |
| 548 | | memory_install_readwrite_bank(program, 0x0000, 0xbfff, 0, 0, "bank1"); |
| 549 | | break; |
| 550 | 538 | } |
| 551 | 539 | |
| 552 | | memory_install_readwrite_bank(program, 0xff00, 0xffff, 0, 0, "bank2"); |
| 540 | set_ram_mode(machine); |
| 553 | 541 | |
| 554 | 542 | /* register for state saving */ |
| 555 | 543 | state_save_register_global(machine, state->cdp1802_mode); |
| r8939 | r8940 | |
| 641 | 629 | /* ROMs */ |
| 642 | 630 | |
| 643 | 631 | ROM_START( cosmicos ) |
| 644 | | ROM_REGION( 0x10000, CDP1802_TAG, 0 ) |
| 632 | ROM_REGION( 0x1000, CDP1802_TAG, 0 ) |
| 645 | 633 | ROM_SYSTEM_BIOS( 0, "hex", "Hex Monitor" ) |
| 646 | | ROMX_LOAD( "hex.ic6", 0xc000, 0x0400, BAD_DUMP CRC(d25124bf) SHA1(121215ba3a979e1962327ebe73cbadf784c568d9), ROM_BIOS(1) ) /* typed in from manual */ |
| 647 | | ROMX_LOAD( "hex.ic7", 0xc400, 0x0400, BAD_DUMP CRC(364ac81b) SHA1(83936ee6a7ed44632eb290889b98fb9a500f15d4), ROM_BIOS(1) ) /* typed in from manual */ |
| 634 | ROMX_LOAD( "hex.ic6", 0x000, 0x400, BAD_DUMP CRC(d25124bf) SHA1(121215ba3a979e1962327ebe73cbadf784c568d9), ROM_BIOS(1) ) /* typed in from manual */ |
| 635 | ROMX_LOAD( "hex.ic7", 0x400, 0x400, BAD_DUMP CRC(364ac81b) SHA1(83936ee6a7ed44632eb290889b98fb9a500f15d4), ROM_BIOS(1) ) /* typed in from manual */ |
| 648 | 636 | ROM_SYSTEM_BIOS( 1, "ascii", "ASCII Monitor" ) |
| 649 | | ROMX_LOAD( "ascii.ic6", 0xc000, 0x0400, NO_DUMP, ROM_BIOS(2) ) |
| 650 | | ROMX_LOAD( "ascii.ic7", 0xc400, 0x0400, NO_DUMP, ROM_BIOS(2) ) |
| 637 | ROMX_LOAD( "ascii.ic6", 0x000, 0x400, NO_DUMP, ROM_BIOS(2) ) |
| 638 | ROMX_LOAD( "ascii.ic7", 0x400, 0x400, NO_DUMP, ROM_BIOS(2) ) |
| 651 | 639 | ROM_END |
| 652 | 640 | |
| 653 | 641 | /* System Drivers */ |
| r8939 | r8940 | |
| 659 | 647 | if (state->boot) |
| 660 | 648 | { |
| 661 | 649 | /* force A6 and A7 high */ |
| 662 | | return address | 0xc0c0; |
| 650 | direct.explicit_configure(0x0000, 0xffff, 0x3f3f, memory_region(machine, CDP1802_TAG) + 0xc0); |
| 651 | return ~0; |
| 663 | 652 | } |
| 664 | 653 | |
| 665 | 654 | return address; |
| r8939 | r8940 | |
| 673 | 662 | } |
| 674 | 663 | |
| 675 | 664 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 676 | | COMP( 1979, cosmicos, 0, 0, cosmicos, cosmicos, cosmicos, "Radio Bulletin", "Cosmicos", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) |
| 665 | COMP( 1979, cosmicos, 0, 0, cosmicos, cosmicos, cosmicos, "Radio Bulletin", "Cosmicos", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) |