src/mess/machine/ti99_4x.c
| r2878 | r2879 | |
| 37 | 37 | SNUG's BwG and HFDC fdcs). |
| 38 | 38 | * Hard disk (HFDC and IDE). |
| 39 | 39 | * Mechatronics mouse. |
| 40 | * save minimemory contents |
| 40 | 41 | |
| 41 | 42 | Compatibility looks quite good. |
| 42 | 43 | |
| r2878 | r2879 | |
| 47 | 48 | * support for other peripherals and DSRs as documentation permits |
| 48 | 49 | * implement the EVPC palette chip |
| 49 | 50 | * finish 99/4p support: ROM6, HSGPL (implemented, but not fully debugged) |
| 50 | | * save minimemory contents |
| 51 | 51 | */ |
| 52 | 52 | |
| 53 | 53 | #include <math.h> |
| r2878 | r2879 | |
| 548 | 548 | |
| 549 | 549 | case SLOT_MINIMEM: |
| 550 | 550 | cartridge_minimemory = TRUE; |
| 551 | /* Load the NVRAM. Need to BIG_ENDIANIZE it. |
| 552 | MiniMemory has only one cartridge page. */ |
| 553 | image_battery_load(image, cartridge_pages[0]+0x800,0x1000); |
| 554 | for (i = 0x800; i < 0x1000; i++) |
| 555 | cartridge_pages[0][i] = BIG_ENDIANIZE_INT16(cartridge_pages[0][i]); |
| 556 | break; |
| 551 | 557 | case SLOT_MBX: |
| 552 | | if (type == SLOT_MBX) |
| 553 | | cartridge_mbx = TRUE; |
| 558 | cartridge_mbx = TRUE; |
| 559 | break; |
| 554 | 560 | case SLOT_CROM: |
| 555 | 561 | if (ti99_model == model_99_8) |
| 556 | 562 | { |
| 557 | | image_fread(image, cartridge_pages_8[0], 0x2000); |
| 563 | if (cartridge_minimemory) |
| 564 | /* Only load 4K so we don't overwrite the NVRAM. */ |
| 565 | image_fread(image, cartridge_pages_8[0], 0x1000); |
| 566 | else |
| 567 | image_fread(image, cartridge_pages_8[0], 0x2000); |
| 558 | 568 | current_page_ptr_8 = cartridge_pages_8[0]; |
| 559 | 569 | } |
| 560 | 570 | else |
| 561 | 571 | { |
| 572 | if (cartridge_minimemory) |
| 573 | { |
| 574 | /* Only load 4K so we don't overwrite the NVRAM that |
| 575 | has been loaded already. */ |
| 576 | image_fread(image, cartridge_pages[0], 0x1000); |
| 577 | for (i = 0; i < 0x0800; i++) |
| 578 | cartridge_pages[0][i] = BIG_ENDIANIZE_INT16(cartridge_pages[0][i]); |
| 579 | } |
| 580 | else |
| 581 | { |
| 562 | 582 | image_fread(image, cartridge_pages[0], 0x2000); |
| 563 | 583 | for (i = 0; i < 0x1000; i++) |
| 564 | 584 | cartridge_pages[0][i] = BIG_ENDIANIZE_INT16(cartridge_pages[0][i]); |
| 565 | | current_page_ptr = cartridge_pages[0]; |
| 585 | } |
| 586 | current_page_ptr = cartridge_pages[0]; |
| 566 | 587 | } |
| 567 | 588 | break; |
| 568 | 589 | |
| r2878 | r2879 | |
| 588 | 609 | |
| 589 | 610 | DEVICE_IMAGE_UNLOAD( ti99_cart ) |
| 590 | 611 | { |
| 612 | int i; |
| 591 | 613 | int id = image_index_in_device(image); |
| 592 | 614 | |
| 593 | 615 | /* There is a circuitry in TI99/4(a) that resets the console when a |
| r2878 | r2879 | |
| 611 | 633 | |
| 612 | 634 | case SLOT_MINIMEM: |
| 613 | 635 | cartridge_minimemory = FALSE; |
| 614 | | /* we should insert some code to save the minimem contents... */ |
| 636 | if (ti99_model == model_99_8) |
| 637 | { |
| 638 | image_battery_save(image, cartridge_pages_8[0] + 0x1000, 0x1000); |
| 639 | memset(cartridge_pages_8[0] + 0x1000, 0, 0x1000); |
| 640 | } |
| 641 | else |
| 642 | { |
| 643 | /* We BIG_ENDIANIZE before saving. This is consistent |
| 644 | with the cartridge save format. */ |
| 645 | for (i = 0x800; i < 0x1000; i++) |
| 646 | cartridge_pages[0][i] = BIG_ENDIANIZE_INT16(cartridge_pages[0][i]); |
| 647 | image_battery_save(image, cartridge_pages[0] + 0x800, 0x1000); |
| 648 | memset(cartridge_pages[0] + 0x800, 0, 0x1000); |
| 649 | } |
| 650 | break; |
| 615 | 651 | case SLOT_MBX: |
| 616 | 652 | if (slot_type[id] == SLOT_MBX) |
| 617 | 653 | cartridge_mbx = FALSE; |
| 618 | 654 | /* maybe we should insert some code to save the memory contents... */ |
| 655 | break; |
| 619 | 656 | case SLOT_CROM: |
| 620 | 657 | if (ti99_model == model_99_8) |
| 621 | 658 | { |
| 622 | | memset(cartridge_pages_8[0], 0, 0x2000); |
| 659 | if (cartridge_minimemory) |
| 660 | /* Don't wipe the RAM before it is saved. */ |
| 661 | memset(cartridge_pages_8[0], 0, 0x1000); |
| 662 | else |
| 663 | memset(cartridge_pages_8[0], 0, 0x2000); |
| 623 | 664 | } |
| 624 | 665 | else |
| 625 | 666 | { |
| 626 | | memset(cartridge_pages[0], 0, 0x2000); |
| 667 | if (cartridge_minimemory) |
| 668 | memset(cartridge_pages[0], 0, 0x1000); |
| 669 | else |
| 670 | memset(cartridge_pages[0], 0, 0x2000); |
| 627 | 671 | } |
| 628 | 672 | break; |
| 629 | 673 | |
| r2878 | r2879 | |
| 983 | 1027 | Memory handlers. |
| 984 | 1028 | |
| 985 | 1029 | TODO: |
| 986 | | * save minimem RAM when quitting |
| 987 | 1030 | * actually implement GRAM support and GPL port support |
| 988 | 1031 | */ |
| 989 | 1032 | |