mirror of
https://github.com/libretro/hatari.git
synced 2026-11-07 10:36:00 -10:00
74 lines
2.5 KiB
C
74 lines
2.5 KiB
C
/*
|
|
Hatari - floppy.h
|
|
|
|
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.
|
|
*/
|
|
|
|
#ifndef HATARI_FLOPPY_H
|
|
#define HATARI_FLOPPY_H
|
|
|
|
#include "configuration.h"
|
|
|
|
|
|
|
|
#define MAX_FLOPPYDRIVES 2 /* A: and B: */
|
|
#define NUMBYTESPERSECTOR 512 /* All supported disk images are 512 bytes per sector */
|
|
|
|
#define FLOPPY_DRIVE_TRANSITION_STATE_INSERT 1
|
|
#define FLOPPY_DRIVE_TRANSITION_STATE_EJECT 2
|
|
#define FLOPPY_DRIVE_TRANSITION_DELAY_VBL 18 /* min of 16 VBLs */
|
|
|
|
#define FLOPPY_IMAGE_TYPE_NONE 0 /* no recognized image inserted */
|
|
#define FLOPPY_IMAGE_TYPE_ST 1
|
|
#define FLOPPY_IMAGE_TYPE_MSA 2
|
|
#define FLOPPY_IMAGE_TYPE_DIM 3
|
|
#define FLOPPY_IMAGE_TYPE_IPF 4
|
|
#define FLOPPY_IMAGE_TYPE_STX 5
|
|
#define FLOPPY_IMAGE_TYPE_SCP 6
|
|
#define FLOPPY_IMAGE_TYPE_KFS 7 /* Kryoflux stream raw */
|
|
|
|
#define FLOPPY_BOOT_SECTOR_EXE_SUM 0x1234
|
|
|
|
|
|
/* Structure for each drive connected as emulation */
|
|
typedef struct
|
|
{
|
|
int ImageType;
|
|
uint8_t *pBuffer;
|
|
char sFileName[FILENAME_MAX];
|
|
int nImageBytes;
|
|
bool bDiskInserted;
|
|
bool bContentsChanged;
|
|
bool bOKToSave;
|
|
|
|
/* For the emulation of the WPRT bit when a disk is changed */
|
|
int TransitionState1;
|
|
int TransitionState1_VBL;
|
|
int TransitionState2;
|
|
int TransitionState2_VBL;
|
|
} EMULATION_DRIVE;
|
|
|
|
extern EMULATION_DRIVE EmulationDrives[MAX_FLOPPYDRIVES];
|
|
extern int nBootDrive;
|
|
|
|
|
|
extern void Floppy_Init(void);
|
|
extern void Floppy_UnInit(void);
|
|
extern void Floppy_Reset(void);
|
|
extern void Floppy_MemorySnapShot_Capture(bool bSave);
|
|
extern void Floppy_GetBootDrive(void);
|
|
extern bool Floppy_IsWriteProtected(int Drive);
|
|
extern const char* Floppy_SetDiskFileNameNone(int Drive);
|
|
extern const char* Floppy_SetDiskFileName(int Drive, const char *pszFileName, const char *pszZipPath);
|
|
extern int Floppy_DriveTransitionUpdateState ( int Drive );
|
|
extern bool Floppy_InsertDiskIntoDrive(int Drive);
|
|
extern bool Floppy_EjectDiskFromDrive(int Drive);
|
|
extern void Floppy_FindDiskDetails(const uint8_t *pBuffer, int nImageBytes, uint16_t *pnSectorsPerTrack, uint16_t *pnSides);
|
|
extern bool Floppy_ReadSectors(int Drive, uint8_t **pBuffer, uint16_t Sector, uint16_t Track, uint16_t Side, short Count, int *pnSectorsPerTrack, int *pSectorSize);
|
|
extern bool Floppy_WriteSectors(int Drive, uint8_t *pBuffer, uint16_t Sector, uint16_t Track, uint16_t Side, short Count, int *pnSectorsPerTrack, int *pSectorSize);
|
|
extern bool Floppy_ImageIsMFM ( int ImageType );
|
|
extern bool Floppy_ImageIsSTX ( int ImageType );
|
|
extern bool Floppy_ImageIsST_MSA ( int ImageType );
|
|
#endif
|