fix ST RAM values for initial SP & PC to allow FreeMint reboots on CTRL-ALT-DELETE
This commit is contained in:
10
sys/BaS.c
10
sys/BaS.c
@@ -529,6 +529,16 @@ void BaS(void)
|
|||||||
FireTOS(); // Should never return
|
FireTOS(); // Should never return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fix initial pc/sp in ST RAM for FreeMiNT. It expects valid values there
|
||||||
|
* like on original STs (where these values reside in ROM) and uses them on
|
||||||
|
* CTRL-ALT-DELETE reboots.
|
||||||
|
*/
|
||||||
|
struct rom_header *bas_header = (struct rom_header *) TARGET_ADDRESS;
|
||||||
|
struct rom_header *stram_header = (struct rom_header *) 0x0;
|
||||||
|
|
||||||
|
*stram_header = *bas_header;
|
||||||
|
|
||||||
xprintf("call EmuTOS\r\n");
|
xprintf("call EmuTOS\r\n");
|
||||||
struct rom_header *os_header = (struct rom_header *) TOS;
|
struct rom_header *os_header = (struct rom_header *) TOS;
|
||||||
os_header->initial_pc();
|
os_header->initial_pc();
|
||||||
|
|||||||
@@ -581,7 +581,7 @@ _lowlevel_isr_handler:
|
|||||||
jsr _isr_execute_handler // call the C handler
|
jsr _isr_execute_handler // call the C handler
|
||||||
addq.l #4,sp // adjust stack
|
addq.l #4,sp // adjust stack
|
||||||
tst.b d0 // handled?
|
tst.b d0 // handled?
|
||||||
beq lowlevel_forward // no, forward it to TOS
|
beq lowlevel_forward // no, forward it to TOS
|
||||||
|
|
||||||
movem.l (sp),d0-d1/a0-a1 // restore registers
|
movem.l (sp),d0-d1/a0-a1 // restore registers
|
||||||
unlk a6
|
unlk a6
|
||||||
|
|||||||
Reference in New Issue
Block a user