Added save/restore to fix clobbered RAMWorks memory

This commit is contained in:
Zane Kaminski 2020-08-02 21:02:10 -04:00
parent ad01fd3185
commit 59b07fcf11
3 changed files with 56 additions and 0 deletions

Binary file not shown.

Binary file not shown.

56
ram2e.c
View File

@ -7,6 +7,60 @@
#include "util.h"
static char _rwsave[256];
static char _rwsave0_1;
static char _rwsave0_2;
static char _rwsave0_3;
static void ramworks_save() {
__asm__("sta $C009"); // Store in ALTZP
// Save address 0x0000 in every bank
__asm__("ldx #0");
saveloop:
__asm__("stx $C073");
__asm__("lda $00,X");
__asm__("sta %v,X", _rwsave);
__asm__("inx");
__asm__("bne %g", saveloop);
// Save addresses 0x0001-3 in bank 0
__asm__("ldx #0");
__asm__("stx $C073");
__asm__("lda $01");
__asm__("sta %v", _rwsave0_1);
__asm__("lda $02");
__asm__("sta %v", _rwsave0_2);
__asm__("lda $03");
__asm__("sta %v", _rwsave0_3);
__asm__("sta $C008"); // Don't store in ALTZP
}
static void ramworks_restore() {
__asm__("sta $C009"); // Store in ALTZP
// Restore address 0x0000 in every bank
__asm__("ldx #0");
restoreloop:
__asm__("stx $C073");
__asm__("lda %v,X", _rwsave);
__asm__("sta $00,X");
__asm__("inx");
__asm__("bne %g", restoreloop);
// Restore addresses 0x0001-3 in bank 0
__asm__("ldx #0");
__asm__("stx $C073");
__asm__("lda %v", _rwsave0_1);
__asm__("sta $01");
__asm__("lda %v", _rwsave0_2);
__asm__("sta $02");
__asm__("lda %v", _rwsave0_3);
__asm__("sta $03");
__asm__("sta $C008"); // Don't store in ALTZP
}
static char _cmd;
static char _arg;
/* ram2e_cmd(...) issues a coded command+argument sequence to the RAM2E */
@ -247,6 +301,7 @@ int ram2e_main(void)
int reset_count;
// Check for RAM2E
ramworks_save(); // Save what will be clobbered
if(!auxram_detect() || !ram2e_detect()) {
// If no RAM2E, show an error message and quit
gotoxy(0, 8);
@ -255,6 +310,7 @@ int ram2e_main(void)
cputs(" Press any key to quit.");
cgetc(); // Wait for key
clrscr(); // Clear screen before quitting
ramworks_restore();
return EXIT_SUCCESS;
}