|
|
1.1 root 1: /* SCSI Bus and Disk emulation */
2:
3: /* SCSI phase */
4: #define PHASE_DO 0x00 /* data out */
5: #define PHASE_DI 0x01 /* data in */
6: #define PHASE_CD 0x02 /* command */
7: #define PHASE_ST 0x03 /* status */
8: #define PHASE_MO 0x06 /* message out */
9: #define PHASE_MI 0x07 /* message in */
10:
11: struct {
12: Uint8 target;
13: Uint8 phase;
14: } SCSIbus;
15:
16:
17: /* Command Descriptor Block */
18: #define SCSI_CDB_MAX_SIZE 12
19:
20:
21: /* This buffer temporarily stores data to be written to memory or disk */
22:
23: struct {
24: Uint8 data[512]; /* FIXME: BLOCKSIZE */
25: int limit;
26: int size;
27: bool disk;
28: } scsi_buffer;
29:
30:
31: void SCSI_Init(void);
32: void SCSI_Uninit(void);
33: void SCSI_Reset(void);
34: void SCSI_Insert(Uint8 target);
35: void SCSI_Eject(Uint8 target);
36:
37: Uint8 SCSIdisk_Send_Status(void);
38: Uint8 SCSIdisk_Send_Message(void);
39: Uint8 SCSIdisk_Send_Data(void);
40: void SCSIdisk_Receive_Data(Uint8 val);
41: bool SCSIdisk_Select(Uint8 target);
42: void SCSIdisk_Receive_Command(Uint8 *commandbuf, Uint8 identify);
43:
44: Sint64 SCSI_Seek_Time(void);
45: Sint64 SCSI_Sector_Time(void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.