|
|
1.1 root 1: /*
2: Hatari
3:
1.1.1.4 root 4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6:
7: Reset emulation state.
1.1 root 8: */
1.1.1.13 root 9: const char Reset_fileid[] = "Hatari reset.c : " __DATE__ " " __TIME__;
1.1 root 10:
11: #include "main.h"
1.1.1.10 root 12: #include "configuration.h"
1.1 root 13: #include "cart.h"
1.1.1.8 root 14: #include "dmaSnd.h"
1.1.1.14! root 15: #include "crossbar.h"
1.1 root 16: #include "fdc.h"
17: #include "floppy.h"
18: #include "gemdos.h"
19: #include "ikbd.h"
1.1.1.14! root 20: #include "cycInt.h"
1.1 root 21: #include "m68000.h"
22: #include "mfp.h"
1.1.1.12 root 23: #include "midi.h"
1.1 root 24: #include "psg.h"
25: #include "reset.h"
26: #include "screen.h"
27: #include "sound.h"
28: #include "stMemory.h"
29: #include "tos.h"
1.1.1.10 root 30: #include "vdi.h"
1.1 root 31: #include "video.h"
1.1.1.10 root 32: #include "falcon/videl.h"
1.1 root 33:
1.1.1.2 root 34:
35: /*-----------------------------------------------------------------------*/
1.1.1.10 root 36: /**
37: * Reset ST emulator states, chips, interrupts and registers.
38: * Return zero or negative TOS image load error code.
39: */
1.1.1.11 root 40: static int Reset_ST(bool bCold)
1.1 root 41: {
1.1.1.10 root 42: if (bCold)
43: {
44: int ret;
45:
46: Floppy_GetBootDrive(); /* Find which device to boot from (A: or C:) */
47:
48: ret = TOS_LoadImage(); /* Load TOS, writes into cartridge memory */
49: if (ret)
50: return ret; /* If we can not load a TOS image, return now! */
51:
52: Cart_ResetImage(); /* Load cartridge program into ROM memory. */
53: }
1.1.1.14! root 54: CycInt_Reset(); /* Reset interrupts */
1.1.1.10 root 55: MFP_Reset(); /* Setup MFP chip */
56: Video_Reset(); /* Reset video */
57:
58: GemDOS_Reset(); /* Reset GEMDOS emulation */
59: if (bCold)
60: {
61: FDC_Reset(); /* Reset FDC */
62: }
63:
1.1.1.14! root 64: if (ConfigureParams.System.nMachineType == MACHINE_FALCON)
! 65: Crossbar_Reset(bCold); /* Reset Crossbar sound */
! 66: else
! 67: DmaSnd_Reset(bCold); /* Reset DMA sound */
! 68:
1.1.1.10 root 69: PSG_Reset(); /* Reset PSG */
70: Sound_Reset(); /* Reset Sound */
71: IKBD_Reset(bCold); /* Keyboard */
72: if (ConfigureParams.System.nMachineType == MACHINE_FALCON && !bUseVDIRes)
73: VIDEL_reset();
74: else
75: Screen_Reset(); /* Reset screen */
76: M68000_Reset(bCold); /* Reset CPU */
77:
1.1.1.12 root 78: Midi_Reset();
79:
1.1.1.13 root 80: /* Start HBL, Timer B and VBL interrupts with a 0 cycle delay */
81: Video_StartInterrupts( 0 );
1.1.1.7 root 82:
1.1.1.10 root 83: return 0;
1.1 root 84: }
85:
1.1.1.2 root 86:
87: /*-----------------------------------------------------------------------*/
1.1.1.10 root 88: /**
89: * Cold reset ST (reset memory, all registers and reboot)
90: */
91: int Reset_Cold(void)
1.1 root 92: {
1.1.1.10 root 93: Main_WarpMouse(sdlscrn->w/2, sdlscrn->h/2); /* Set mouse pointer to the middle of the screen */
94:
1.1.1.13 root 95: return Reset_ST(true);
1.1 root 96: }
97:
1.1.1.2 root 98:
99: /*-----------------------------------------------------------------------*/
1.1.1.10 root 100: /**
101: * Warm reset ST (reset registers, leave in same state and reboot)
102: */
103: int Reset_Warm(void)
1.1 root 104: {
1.1.1.13 root 105: return Reset_ST(false);
1.1 root 106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.