/** * Save/Restore snapshot of local variables('MemorySnapShot_Store' handles type) */ void Floppy_MemorySnapShot_Capture(bool bSave) { int i; /* If restoring then eject old drives first! */ if (!bSave) Floppy_EjectBothDrives(); /* Save/Restore details */ for (i = 0; i < MAX_FLOPPYDRIVES; i++) { MemorySnapShot_Store(&EmulationDrives[i].bDiskInserted, sizeof(EmulationDrives[i].bDiskInserted)); MemorySnapShot_Store(&EmulationDrives[i].nImageBytes, sizeof(EmulationDrives[i].nImageBytes)); if (!bSave && EmulationDrives[i].bDiskInserted) { EmulationDrives[i].pBuffer = malloc(EmulationDrives[i].nImageBytes); if (!EmulationDrives[i].pBuffer) perror("Floppy_MemorySnapShot_Capture"); } if (EmulationDrives[i].pBuffer) MemorySnapShot_Store(EmulationDrives[i].pBuffer, EmulationDrives[i].nImageBytes); MemorySnapShot_Store(EmulationDrives[i].sFileName, sizeof(EmulationDrives[i].sFileName)); MemorySnapShot_Store(&EmulationDrives[i].bContentsChanged,sizeof(EmulationDrives[i].bContentsChanged)); MemorySnapShot_Store(&EmulationDrives[i].bOKToSave,sizeof(EmulationDrives[i].bOKToSave)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState1,sizeof(EmulationDrives[i].TransitionState1)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState1_VBL,sizeof(EmulationDrives[i].TransitionState1_VBL)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState2,sizeof(EmulationDrives[i].TransitionState2)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState2_VBL,sizeof(EmulationDrives[i].TransitionState2_VBL)); } }
/** * Save/Restore snapshot of local variables('MemorySnapShot_Store' handles type) */ void Floppy_MemorySnapShot_Capture(bool bSave) { int i; /* If restoring then eject old drives first! */ if (!bSave) Floppy_EjectBothDrives(); /* Save/Restore details */ for (i = 0; i < MAX_FLOPPYDRIVES; i++) { MemorySnapShot_Store(&EmulationDrives[i].ImageType, sizeof(EmulationDrives[i].ImageType)); MemorySnapShot_Store(&EmulationDrives[i].bDiskInserted, sizeof(EmulationDrives[i].bDiskInserted)); MemorySnapShot_Store(&EmulationDrives[i].nImageBytes, sizeof(EmulationDrives[i].nImageBytes)); if (!bSave && EmulationDrives[i].bDiskInserted) { EmulationDrives[i].pBuffer = malloc(EmulationDrives[i].nImageBytes); if (!EmulationDrives[i].pBuffer) perror("Floppy_MemorySnapShot_Capture"); } if (EmulationDrives[i].pBuffer) MemorySnapShot_Store(EmulationDrives[i].pBuffer, EmulationDrives[i].nImageBytes); MemorySnapShot_Store(EmulationDrives[i].sFileName, sizeof(EmulationDrives[i].sFileName)); MemorySnapShot_Store(&EmulationDrives[i].bContentsChanged,sizeof(EmulationDrives[i].bContentsChanged)); MemorySnapShot_Store(&EmulationDrives[i].bOKToSave,sizeof(EmulationDrives[i].bOKToSave)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState1,sizeof(EmulationDrives[i].TransitionState1)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState1_VBL,sizeof(EmulationDrives[i].TransitionState1_VBL)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState2,sizeof(EmulationDrives[i].TransitionState2)); MemorySnapShot_Store(&EmulationDrives[i].TransitionState2_VBL,sizeof(EmulationDrives[i].TransitionState2_VBL)); /* Because Floppy_EjectBothDrives() was called above before restoring (which cleared */ /* FDC_DRIVES[].DiskInserted that was restored just before), we must call FDC_InsertFloppy */ /* for each restored drive with an inserted disk to set FDC_DRIVES[].DiskInserted=true */ if ( !bSave && ( EmulationDrives[i].bDiskInserted ) ) FDC_InsertFloppy ( i ); } }
/** * UnInitialize drives */ void Floppy_UnInit(void) { Floppy_EjectBothDrives(); }