|
|
1.1 ! root 1: /* ! 2: Hatari ! 3: ! 4: Reset emulation state ! 5: */ ! 6: ! 7: #include "main.h" ! 8: #include "cart.h" ! 9: #include "decode.h" ! 10: #include "fdc.h" ! 11: #include "floppy.h" ! 12: #include "gemdos.h" ! 13: #include "ikbd.h" ! 14: #include "int.h" ! 15: #include "m68000.h" ! 16: #include "misc.h" ! 17: #include "mfp.h" ! 18: #include "psg.h" ! 19: #include "reset.h" ! 20: #include "screen.h" ! 21: #include "sound.h" ! 22: #include "stMemory.h" ! 23: #include "tos.h" ! 24: #include "video.h" ! 25: ! 26: //----------------------------------------------------------------------- ! 27: /* ! 28: Cold reset ST (reset memory, all registers and reboot) ! 29: */ ! 30: void Reset_Cold(void) ! 31: { ! 32: Reset_ST(TRUE); ! 33: } ! 34: ! 35: //----------------------------------------------------------------------- ! 36: /* ! 37: Warm reset ST (reset registers, leave in same state and reboot) ! 38: */ ! 39: void Reset_Warm(void) ! 40: { ! 41: Reset_ST(FALSE); ! 42: } ! 43: ! 44: //----------------------------------------------------------------------- ! 45: /* ! 46: Reset ST emulator states, chips, interrupts and registers ! 47: */ ! 48: void Reset_ST(BOOL bCold) ! 49: { ! 50: if (bCold) { ! 51: STMemory_Clear(0x00000000,0x00400000); // Clear First 4Mb ! 52: STMemory_Clear(0x00e00000,0x00ffffff); // Clear Upper memory ! 53: STMemory_WriteLong(4,0x00fc0020); // Set reset vector ! 54: STMemory_WriteLong(0,0x0000f000); // And reset stack pointer ! 55: ! 56: Floppy_GetBootDrive(); // Find which device to boot from(A: or C:) ! 57: Cart_LoadImage(); // Load program into cartridge memory. Used for gemdos loading ! 58: TOS_LoadImage(); // Load TOS, writes into cartridge memory ! 59: } ! 60: Int_Reset(); // Reset interrupts ! 61: MFP_Reset(); // Setup MFP chip ! 62: Video_Reset(); // Reset video ! 63: if (bCold) { ! 64: FDC_Reset(); // Reset FDC ! 65: GemDOS_Reset(); // Reset GEM ! 66: } ! 67: PSG_Reset(); // Reset PSG ! 68: Sound_Reset(); // Reset Sound ! 69: IKBD_Reset(bCold); // Keyboard ! 70: Screen_Reset(); // Reset screen ! 71: M68000_Reset(bCold); // Reset CPU ! 72: ! 73: // And VBL interrupt, MUST always be one interrupt ready to trigger ! 74: Int_AddAbsoluteInterrupt(CYCLES_ENDLINE,INTERRUPT_VIDEO_ENDLINE); ! 75: Int_AddAbsoluteInterrupt(CYCLES_HBL,INTERRUPT_VIDEO_HBL); ! 76: Int_AddAbsoluteInterrupt(CYCLES_PER_FRAME,INTERRUPT_VIDEO_VBL); ! 77: // And keyboard check for debugger ! 78: #ifdef USE_DEBUGGER ! 79: Int_AddAbsoluteInterrupt(CYCLES_DEBUGGER,INTERRUPT_DEBUGGER); ! 80: #endif ! 81: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.