130 lines
3.3 KiB
C
130 lines
3.3 KiB
C
/*
|
|
Hatari
|
|
|
|
This file is distributed under the GNU General Public License, version 2
|
|
or at your option any later version. Read the file gpl.txt for details.
|
|
|
|
Reset emulation state.
|
|
*/
|
|
const char Reset_fileid[] = "Hatari reset.c : " __DATE__ " " __TIME__;
|
|
|
|
#include "main.h"
|
|
#include "configuration.h"
|
|
#include "cart.h"
|
|
#include "dmaSnd.h"
|
|
#include "crossbar.h"
|
|
#include "fdc.h"
|
|
#include "floppy.h"
|
|
#include "gemdos.h"
|
|
#include "hdc.h"
|
|
#include "acia.h"
|
|
#include "ikbd.h"
|
|
#include "cycInt.h"
|
|
#include "m68000.h"
|
|
#include "mfp.h"
|
|
#include "midi.h"
|
|
#include "psg.h"
|
|
#include "reset.h"
|
|
#include "screen.h"
|
|
#include "sound.h"
|
|
#include "stMemory.h"
|
|
#include "tos.h"
|
|
#include "vdi.h"
|
|
#include "nvram.h"
|
|
#include "video.h"
|
|
#include "falcon/videl.h"
|
|
#include "falcon/dsp.h"
|
|
#include "debugcpu.h"
|
|
#include "debugdsp.h"
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
/**
|
|
* Reset ST emulator states, chips, interrupts and registers.
|
|
* Return zero or negative TOS image load error code.
|
|
*/
|
|
static int Reset_ST(bool bCold)
|
|
{
|
|
if (bCold)
|
|
{
|
|
int ret;
|
|
|
|
Floppy_GetBootDrive(); /* Find which device to boot from (A: or C:) */
|
|
|
|
ret = TOS_LoadImage(); /* Load TOS, writes into cartridge memory */
|
|
if (ret)
|
|
return ret; /* If we can not load a TOS image, return now! */
|
|
|
|
Cart_ResetImage(); /* Load cartridge program into ROM memory. */
|
|
Cart_Patch();
|
|
}
|
|
CycInt_Reset(); /* Reset interrupts */
|
|
MFP_Reset(); /* Setup MFP chip */
|
|
Video_Reset(); /* Reset video */
|
|
VDI_Reset(); /* Reset internal VDI variables */
|
|
NvRam_Reset(); /* reset NvRAM (video) settings */
|
|
|
|
GemDOS_Reset(); /* Reset GEMDOS emulation */
|
|
if (bCold)
|
|
{
|
|
FDC_Reset( bCold ); /* Reset FDC */
|
|
}
|
|
Floppy_Reset(); /* Reset Floppy */
|
|
|
|
if (ConfigureParams.System.nMachineType == MACHINE_FALCON
|
|
|| ConfigureParams.System.nMachineType == MACHINE_TT)
|
|
{
|
|
Ncr5380_Reset();
|
|
}
|
|
|
|
if (ConfigureParams.System.nMachineType == MACHINE_FALCON)
|
|
{
|
|
DSP_Reset(); /* Reset the DSP */
|
|
Crossbar_Reset(bCold); /* Reset Crossbar sound */
|
|
}
|
|
else
|
|
DmaSnd_Reset(bCold); /* Reset DMA sound */
|
|
|
|
PSG_Reset(); /* Reset PSG */
|
|
Sound_Reset(); /* Reset Sound */
|
|
ACIA_Reset( ACIA_Array ); /* ACIA */
|
|
IKBD_Reset(bCold); /* Keyboard (after ACIA) */
|
|
if (ConfigureParams.System.nMachineType == MACHINE_FALCON && !bUseVDIRes)
|
|
VIDEL_reset();
|
|
else
|
|
Screen_Reset(); /* Reset screen */
|
|
M68000_Reset(bCold); /* Reset CPU */
|
|
|
|
DebugCpu_SetDebugging(); /* Re-set debugging flag if needed */
|
|
DebugDsp_SetDebugging();
|
|
|
|
Midi_Reset();
|
|
|
|
/* Start HBL, Timer B and VBL interrupts with a 0 cycle delay */
|
|
Video_StartInterrupts( 0 );
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
/**
|
|
* Cold reset ST (reset memory, all registers and reboot)
|
|
*/
|
|
int Reset_Cold(void)
|
|
{
|
|
/* Set mouse pointer to the middle of the screen */
|
|
Main_WarpMouse(sdlscrn->w/2, sdlscrn->h/2, false);
|
|
|
|
return Reset_ST(true);
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
/**
|
|
* Warm reset ST (reset registers, leave in same state and reboot)
|
|
*/
|
|
int Reset_Warm(void)
|
|
{
|
|
return Reset_ST(false);
|
|
}
|