src/mess/drivers/mbee.c
| r2133 | r2134 | |
| 57 | 57 | #include "devices/cassette.h" |
| 58 | 58 | #include "devices/z80bin.h" |
| 59 | 59 | |
| 60 | static size_t mbee_size; |
| 60 | 61 | |
| 61 | 62 | static ADDRESS_MAP_START(mbee_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 62 | 63 | ADDRESS_MAP_UNMAP_HIGH |
| 64 | AM_RANGE(0x0000, 0x3fff) AM_SIZE(&mbee_size) |
| 63 | 65 | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK(1) |
| 64 | 66 | AM_RANGE(0x1000, 0x3fff) AM_RAM |
| 65 | 67 | AM_RANGE(0x4000, 0x7fff) AM_WRITENOP /* Needed because quickload to here will crash MESS otherwise */ |
| r2133 | r2134 | |
| 69 | 71 | ADDRESS_MAP_END |
| 70 | 72 | |
| 71 | 73 | static ADDRESS_MAP_START(mbeeic_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 74 | AM_RANGE(0x0000, 0x7fff) AM_SIZE(&mbee_size) |
| 72 | 75 | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK(1) |
| 73 | 76 | AM_RANGE(0x1000, 0x7fff) AM_RAM |
| 74 | 77 | AM_RANGE(0x8000, 0xefff) AM_ROM |
| r2133 | r2134 | |
| 77 | 80 | ADDRESS_MAP_END |
| 78 | 81 | |
| 79 | 82 | static ADDRESS_MAP_START(mbee56_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 83 | AM_RANGE(0x0000, 0xdfff) AM_SIZE(&mbee_size) |
| 80 | 84 | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK(1) |
| 81 | 85 | AM_RANGE(0x1000, 0xdfff) AM_RAM |
| 82 | 86 | AM_RANGE(0xe000, 0xefff) AM_ROM |
| r2133 | r2134 | |
| 474 | 478 | } |
| 475 | 479 | } |
| 476 | 480 | |
| 481 | static SNAPSHOT_LOAD( mbee ) |
| 482 | { |
| 483 | UINT16 i, j; |
| 484 | UINT8 data, sw = readinputportbytag("CONFIG") & 1; /* reading the dipswitch: 1 = autorun */ |
| 485 | |
| 486 | for (i = 0; i < snapshot_size; i++) |
| 487 | { |
| 488 | j = (0x8c0 + i) & 0xffff; |
| 489 | |
| 490 | if (image_fread(image, &data, 1) != 1) return INIT_FAIL; |
| 491 | |
| 492 | if ((j < mbee_size) || (j > 0xefff)) program_write_byte(j, data); |
| 493 | } |
| 494 | |
| 495 | if (sw) |
| 496 | { |
| 497 | program_write_word_16le(0xa2,0x801e); /* fix warm-start vector to get around some copy-protections */ |
| 498 | cpunum_set_reg(0, REG_PC, 0x801e); |
| 499 | } |
| 500 | else |
| 501 | program_write_word_16le(0xa2,0x8517); |
| 502 | |
| 503 | return INIT_PASS; |
| 504 | } |
| 505 | |
| 506 | static void mbee_snapshot_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info) |
| 507 | { |
| 508 | /* snapshot */ |
| 509 | switch(state) |
| 510 | { |
| 511 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| 512 | case MESS_DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "mwb"); break; |
| 513 | |
| 514 | /* --- the following bits of info are returned as pointers to data or functions --- */ |
| 515 | case MESS_DEVINFO_PTR_SNAPSHOT_LOAD: info->f = (genf *) snapshot_load_mbee; break; |
| 516 | |
| 517 | /* --- the following bits of info are returned as doubles --- */ |
| 518 | case MESS_DEVINFO_FLOAT_SNAPSHOT_DELAY: info->d = 0.5; break; |
| 519 | |
| 520 | default: snapshot_device_getinfo(devclass, state, info); break; |
| 521 | } |
| 522 | } |
| 523 | |
| 477 | 524 | static void mbee_cassette_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info) |
| 478 | 525 | { |
| 479 | 526 | /* cassette */ |
| 480 | 527 | switch(state) |
| 481 | 528 | { |
| 482 | 529 | /* --- the following bits of info are returned as 64-bit signed integers --- */ |
| 483 | | case MESS_DEVINFO_INT_COUNT: info->i = 1; break; |
| 530 | case MESS_DEVINFO_INT_COUNT: info->i = 1; break; |
| 484 | 531 | |
| 485 | | default: cassette_device_getinfo(devclass, state, info); break; |
| 532 | default: cassette_device_getinfo(devclass, state, info); break; |
| 486 | 533 | } |
| 487 | 534 | } |
| 488 | 535 | |
| r2133 | r2134 | |
| 492 | 539 | switch(state) |
| 493 | 540 | { |
| 494 | 541 | /* --- the following bits of info are returned as 64-bit signed integers --- */ |
| 495 | | case MESS_DEVINFO_INT_COUNT: info->i = 1; break; |
| 542 | case MESS_DEVINFO_INT_COUNT: info->i = 1; break; |
| 496 | 543 | |
| 497 | 544 | /* --- the following bits of info are returned as pointers to data or functions --- */ |
| 498 | | case MESS_DEVINFO_PTR_LOAD: info->load = device_load_mbee_cart; break; |
| 545 | case MESS_DEVINFO_PTR_LOAD: info->load = device_load_mbee_cart; break; |
| 499 | 546 | |
| 500 | 547 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| 501 | | case MESS_DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "rom"); break; |
| 548 | case MESS_DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "rom"); break; |
| 502 | 549 | |
| 503 | | default: cartslot_device_getinfo(devclass, state, info); break; |
| 550 | default: cartslot_device_getinfo(devclass, state, info); break; |
| 504 | 551 | } |
| 505 | 552 | } |
| 506 | 553 | |
| r2133 | r2134 | |
| 510 | 557 | switch(state) |
| 511 | 558 | { |
| 512 | 559 | /* --- the following bits of info are returned as 64-bit signed integers --- */ |
| 513 | | case MESS_DEVINFO_INT_COUNT: info->i = 4; break; |
| 560 | case MESS_DEVINFO_INT_COUNT: info->i = 4; break; |
| 514 | 561 | |
| 515 | 562 | /* --- the following bits of info are returned as pointers to data or functions --- */ |
| 516 | | case MESS_DEVINFO_PTR_LOAD: info->load = device_load_basicdsk_floppy; break; |
| 563 | case MESS_DEVINFO_PTR_LOAD: info->load = device_load_basicdsk_floppy; break; |
| 517 | 564 | |
| 518 | 565 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| 519 | | case MESS_DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "dsk"); break; |
| 566 | case MESS_DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "dsk"); break; |
| 520 | 567 | |
| 521 | | default: legacybasicdsk_device_getinfo(devclass, state, info); break; |
| 568 | default: legacybasicdsk_device_getinfo(devclass, state, info); break; |
| 522 | 569 | } |
| 523 | 570 | } |
| 524 | 571 | |
| r2133 | r2134 | |
| 527 | 574 | CONFIG_DEVICE(mbee_cassette_getinfo) |
| 528 | 575 | CONFIG_DEVICE(mbee_cartslot_getinfo) |
| 529 | 576 | CONFIG_DEVICE(mbee_quickload_getinfo) |
| 577 | CONFIG_DEVICE(mbee_snapshot_getinfo) |
| 530 | 578 | SYSTEM_CONFIG_END |
| 531 | 579 | |
| 532 | 580 | SYSTEM_CONFIG_START(mbeeic) |
| r2133 | r2134 | |
| 534 | 582 | CONFIG_DEVICE(mbee_cartslot_getinfo) |
| 535 | 583 | CONFIG_DEVICE(mbee_floppy_getinfo) |
| 536 | 584 | CONFIG_DEVICE(mbee_quickload_getinfo) |
| 585 | CONFIG_DEVICE(mbee_snapshot_getinfo) |
| 537 | 586 | SYSTEM_CONFIG_END |
| 538 | 587 | |
| 539 | 588 | |