Exemple #1
0
/**
 * Reset ST emulator states, chips, interrupts and registers.
 * Return zero or negative TOS image load error code.
 */
static const char* Reset_ST(bool bCold)
{
	if (bCold)
	{
		const char* error_str;
		error_str=memory_init(ConfigureParams.Memory.nMemoryBankSize);
		if (error_str!=NULL) {
			return error_str;
		}
	}
	CycInt_Reset();               /* Reset interrupts */
	Video_Reset();                /* Reset video */
	TMC_Reset();				  /* Reset TMC Registers */
	SCR_Reset();                  /* Reset System Control Registers */
	nvram_init();                 /* Reset NVRAM */
	SCSI_Reset();                 /* Reset SCSI disks */
	MO_Reset();                   /* Reset MO disks */
	Floppy_Reset();               /* Reset Floppy disks */
	SCC_Reset(2);                 /* Reset SCC */
	Ethernet_Reset(true);         /* Reset Ethernet */
	Sound_Reset();                /* Reset Sound */
	Screen_Reset();               /* Reset screen */
	DSP_Reset();                  /* Reset DSP */
	M68000_Reset(bCold);          /* Reset CPU */
	DebugCpu_SetDebugging();      /* Re-set debugging flag if needed */

	return NULL;
}
Exemple #2
0
/**
 * 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();

#if defined(__linux__)
        nf_scsidrv_reset();
#endif

	/* Start HBL, Timer B and VBL interrupts with a 0 cycle delay */
	Video_StartInterrupts( 0 );

	return 0;
}
Exemple #3
0
void Floppy_Initialize()
{
	bool bInitStatus = false ;
	Floppy_bInitStatus = false ;
	Floppy_Reset() ;

	if(IrqManager::Instance().RegisterIRQ(StdIRQ::Instance().FLOPPY_IRQ, (unsigned)&Floppy_Handler))
	{
		IrqManager::Instance().EnableIRQ(StdIRQ::Instance().FLOPPY_IRQ) ;
		
		Floppy_SetDataRate(RATE) ;

	//	ProcessManager_WaitOnInterrupt(StdIRQ::Instance().FLOPPY_IRQ) ;
		if(Floppy_WaitForInterrupt() == Floppy_SUCCESS)
		{
			bInitStatus = true ;
			int i ;
			for(i = 0; i < 4; i++)
			{
				bInitStatus = false ;
				if(Floppy_SenseInterruptStatus() == Floppy_SUCCESS)
					bInitStatus = true ;
			}
			
			if(bInitStatus == true)
				if(Floppy_SendSpecifyCommand() == Floppy_SUCCESS)
					bInitStatus = true ;
		}
	}
	else
	{
		printf("\n Failed to register Floppy IRQ: %d", StdIRQ::Instance().FLOPPY_IRQ.GetIRQNo());
		bInitStatus = false ;
	}

	if(bInitStatus == true)
	{
		bool boolEnhanced ;
		if(Floppy_IsEnhancedController(&boolEnhanced) == Floppy_SUCCESS)
		{
			if(boolEnhanced)
				KC::MDisplay().Message("\n\tEnhanced Floppy Controller : 8272A", Display::WHITE_ON_BLACK()) ;
			else
				KC::MDisplay().Message("\n\tOlder Floppy Controller : 8272A", Display::WHITE_ON_BLACK()) ;
		}
		else
			KC::MDisplay().Message("\n\tFailed To Get Floppy Controller Version", Display::WHITE_ON_BLACK()) ;
	
    DiskDriveManager::Instance().Create("floppya", DEV_FLOPPY, FD_DRIVE1,
      0, 2880,
      18, 80, 2,
      nullptr, DiskDriveManager::Instance().CreateRawDisk("floppy", FLOPPY_DISK, NULL),
      2048, 24, MEM_FD1_FS_START, MEM_FD1_FS_END);
		
		unsigned i ;
		for(i = 0; i < MAX_DRIVES; i++)
		{
			Floppy_bMotorOn[i] = false ;
			Floppy_bRequestMotorOff[i] = false ;
		}

		KernelUtil::ScheduleTimedTask("fmoncont", 5000, (unsigned)&Floppy_MotorController) ;
	}

	Floppy_bInitStatus = bInitStatus ;
	KC::MDisplay().LoadMessage("Floppy Initialization", bInitStatus ? Success : Failure) ;
}