|
|
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.