1 #ifndef SIO_H_
2 #define SIO_H_
3 
4 #include "config.h"
5 
6 #include <stdio.h> /* FILENAME_MAX */
7 
8 #include "atari.h"
9 
10 #define SIO_MAX_DRIVES 8
11 
12 typedef enum SIO_tagUnitStatus {
13 	SIO_OFF,
14 	SIO_NO_DISK,
15 	SIO_READ_ONLY,
16 	SIO_READ_WRITE
17 } SIO_UnitStatus;
18 
19 extern char SIO_status[256];
20 extern SIO_UnitStatus SIO_drive_status[SIO_MAX_DRIVES];
21 extern char SIO_filename[SIO_MAX_DRIVES][FILENAME_MAX];
22 
23 #define SIO_LAST_READ 0
24 #define SIO_LAST_WRITE 1
25 extern int SIO_last_op;
26 extern int SIO_last_op_time;
27 extern int SIO_last_drive; /* 1 .. 8 */
28 extern int SIO_last_sector;
29 
30 int SIO_Mount(int diskno, const char *filename, int b_open_readonly);
31 void SIO_Dismount(int diskno);
32 void SIO_DisableDrive(int diskno);
33 int SIO_RotateDisks(void);
34 void SIO_Handler(void);
35 
36 UBYTE SIO_ChkSum(const UBYTE *buffer, int length);
37 void SIO_TapeMotor(int onoff);
38 void SIO_SwitchCommandFrame(int onoff);
39 void SIO_PutByte(int byte);
40 int SIO_GetByte(void);
41 int SIO_Initialise(int *argc, char *argv[]);
42 void SIO_Exit(void);
43 
44 /* Some defines about the serial I/O timing. Currently fixed! */
45 #define SIO_XMTDONE_INTERVAL  15
46 #define SIO_SERIN_INTERVAL     8
47 #define SIO_SEROUT_INTERVAL    8
48 #define SIO_ACK_INTERVAL      36
49 
50 /* These functions are also used by the 1450XLD Parallel disk device */
51 extern int SIO_format_sectorcount[SIO_MAX_DRIVES];
52 extern int SIO_format_sectorsize[SIO_MAX_DRIVES];
53 int SIO_ReadStatusBlock(int unit, UBYTE *buffer);
54 int SIO_FormatDisk(int unit, UBYTE *buffer, int sectsize, int sectcount);
55 void SIO_SizeOfSector(UBYTE unit, int sector, int *sz, ULONG *ofs);
56 int SIO_ReadSector(int unit, int sector, UBYTE *buffer);
57 int SIO_DriveStatus(int unit, UBYTE *buffer);
58 int SIO_WriteStatusBlock(int unit, const UBYTE *buffer);
59 int SIO_WriteSector(int unit, int sector, const UBYTE *buffer);
60 void SIO_StateSave(void);
61 void SIO_StateRead(void);
62 
63 #endif	/* SIO_H_ */
64