/** * 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; }
/** * 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; }
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) ; }