/* copy rom over itself */ void shadowrom_enable(void) { UBYTE r1, r2; r1 = cfgreg_read(CFG_R1_OFFSET); r2 = cfgreg_read(CFG_R2_OFFSET); if (r2 & CFG_R2_68KMODE_STATUS) { printf("Cannot use SHADOWROM if running on 68000! Please reenable 68020 and reboot first.\n"); return; } if ( (r1 & CFG_R1_MAPROM) || (r2 & CFG_R2_MAPROM_STATUS)) { printf("Cannot enable Shadow ROM if MAPROM enabled or currently active!\n"); return; } /* cfgreg_set(CFG_R0_OFFSET, CFG_R0_WRITELOCKOFF); */ memcpy((void*) 0xE00000, (void*) 0xE00000, 512*1024); memcpy((void*) 0xF80000, (void*) 0xF80000, 512*1024); /* cfgreg_unset(CFG_R0_OFFSET, CFG_R0_WRITELOCKOFF); */ cfgreg_set(CFG_R1_OFFSET, CFG_R1_SHADOWROM); }
/* read and display configuration registers */ void status_display(void) { UBYTE r0, r1, r2; r0 = cfgreg_read(CFG_R0_OFFSET); r1 = cfgreg_read(CFG_R1_OFFSET); r2 = cfgreg_read(CFG_R2_OFFSET); printf("\tNinetails revision:\t\t\t%d\n", hwrev); printf(" ================== CPU / Memory options ================== \n"); printf("\tEnable MC68000 mode (reset):\t\t"); status_print_reg(r0, CFG_R0_68KMODE); printf("\tMC68000 mode status:\t\t\t"); status_print_reg(r2, CFG_R2_68KMODE_STATUS); printf("\tPCMCIA friendly - 4MB Fast RAM (reset):\t"); status_print_reg(r0, CFG_R0_PCMCIA); printf("\tMC68EC020 instruction cache:\t\t"); status_print_reg_inv(r1, CFG_R1_INSTCACHEOFF); printf(" ======================= ROM options ====================== \n"); printf("\tMAPROM at next reset:\t\t\t"); status_print_reg(r1, CFG_R1_MAPROM); printf("\tMAPROM status:\t\t\t\t"); status_print_reg(r2, CFG_R2_MAPROM_STATUS); printf("\tShadow ROM:\t\t\t\t"); status_print_reg(r1, CFG_R1_SHADOWROM); }
void maprom_enable(BYTE *path) { BYTE *rombuf; ULONG romsize; UBYTE r1, r2; r1 = cfgreg_read(CFG_R1_OFFSET); r2 = cfgreg_read(CFG_R2_OFFSET); /* do some sanity checks first */ if (r1 & CFG_R1_SHADOWROM) { printf("Cannot use MAPROM if Shadow ROM enabled. Please disable Shadow ROM and reboot first!\n"); return; } if (r2 & CFG_R2_MAPROM_STATUS) { printf("Cannot load new ROM if MAPROM currently active. Please disable MAPROM and reboot first!\n"); return; } if (r2 & CFG_R2_68KMODE_STATUS) { printf("Cannot use MAPROM if running on 68000! Please reenable 68020 and reboot first.\n"); return; } #ifdef DEBUG printf("DEBUG: will load ROM from %s\n", path); #endif /* DEBUG */ romsize = file_size(path); #ifdef DEBUG printf("DEBUG: m'kay so apparanetly loaded ROM has size: %lx\n", romsize); #endif /* DEBUG */ rombuf = (char*) malloc(romsize); #ifdef DEBUG printf("DEBUG: allocated %x bytes at address %p, ready to load data\n", (unsigned int) romsize, (void*) rombuf); #endif /* DEBUG */ file_load(path, rombuf, romsize); rom_copy_self(rombuf, romsize); /*rom_copy_bank(rombuf, romsize);*/ cfgreg_set(CFG_R1_OFFSET, CFG_R1_MAPROM); free(rombuf); printf("Your Amiga should be restarted now...\n"); }