1 #define TDF_EXTCOM (1<<15)
14 #define TD_MOTOR (CMD_NONSTD+0) // 9
15 #define TD_SEEK (CMD_NONSTD+1) // 10
16 #define TD_FORMAT (CMD_NONSTD+2) // 11
17 #define TD_REMOVE (CMD_NONSTD+3) // 12
18 #define TD_CHANGENUM (CMD_NONSTD+4) // 13
19 #define TD_CHANGESTATE (CMD_NONSTD+5) // 15
20 #define TD_PROTSTATUS (CMD_NONSTD+6) // 16
21 #define TD_RAWREAD (CMD_NONSTD+7) // 17
22 #define TD_RAWWRITE (CMD_NONSTD+8) // 18
23 #define TD_GETDRIVETYPE (CMD_NONSTD+9) // 19
24 #define TD_GETNUMTRACKS (CMD_NONSTD+10) // 20
25 #define TD_ADDCHANGEINT (CMD_NONSTD+11) // 21
26 #define TD_REMCHANGEINT (CMD_NONSTD+12) // 22
27 #define TD_GETGEOMETRY (CMD_NONSTD+13) // 23
28 #define TD_EJECT (CMD_NONSTD+14) // 24
29 #define TD_LASTCOMM (CMD_NONSTD+15) // 25
31 #define ETD_WRITE (CMD_WRITE|TDF_EXTCOM)
32 #define ETD_READ (CMD_READ|TDF_EXTCOM)
33 #define ETD_MOTOR (TD_MOTOR|TDF_EXTCOM)
34 #define ETD_SEEK (TD_SEEK|TDF_EXTCOM)
35 #define ETD_FORMAT (TD_FORMAT|TDF_EXTCOM)
36 #define ETD_UPDATE (CMD_UPDATE|TDF_EXTCOM)
37 #define ETD_CLEAR (CMD_CLEAR|TDF_EXTCOM)
38 #define ETD_RAWREAD (TD_RAWREAD|TDF_EXTCOM)
39 #define ETD_RAWWRITE (TD_RAWWRITE|TDF_EXTCOM)
43 #define NSCMD_DEVICEQUERY 0x4000
44 #define NSCMD_TD_READ64 0xC000
45 #define NSCMD_TD_WRITE64 0xC001
46 #define NSCMD_TD_SEEK64 0xC002
47 #define NSCMD_TD_FORMAT64 0xC003
49 #define RDB_BLOCK_LIMIT 16
50 #define RDB_IDENTIFIER 0x5244534B
53 void piscsi_map_drive(char *filename, uint8_t index);
55 void handle_piscsi_write(uint32_t addr, uint32_t val, uint8_t type);
56 uint32_t handle_piscsi_read(uint32_t addr, uint8_t type);
58 void piscsi_block_op(uint8_t type, uint8_t num, uint32_t dest, uint32_t len);
66 // Will parse max eight partitions per disk
67 struct PartitionBlock *pb[16];
68 struct RigidDiskBlock *rdb;
73 // .long 0 /* dos disk name */
74 // .long 0 /* device file name */
76 // .long 0 /* flags */
77 // .long 16 /* length of node? */
78 // .long 128 /* longs in a block */
80 // .long 4 /* surfaces */
81 // .long 1 /* sectors per block */
82 // .long 256 /* blocks per track */
83 // .long 2 /* reserved bootblocks 256 = 128KB */
86 // .long 2 /* lowcyl FIXME */
87 // /*.long 2047*/ /* hicyl */
88 // .long 10 /* buffers */
89 // .long 0 /* MEMF_ANY */
90 // .long 0x0001fe00 /* MAXTRANS */
91 // .long 0x7ffffffe /* Mask */
92 // .long -1 /* boot prio */
93 // .long 0x444f5303 /* dostype: DOS3 */1
95 struct pihd_dosnode_data {
97 uint32_t dev_name_ptr;
104 uint32_t secs_per_block;
105 uint32_t blocks_per_track;
106 uint32_t reserved_blocks;
113 uint32_t maxtransfer;
114 uint32_t transfer_mask;
119 struct RigidDiskBlock {
121 uint32_t rdb_SummedLongs;
124 uint32_t rdb_BlockBytes;
126 /* block list heads */
127 uint32_t rdb_BadBlockList;
128 uint32_t rdb_PartitionList;
129 uint32_t rdb_FileSysHeaderList;
130 uint32_t rdb_DriveInit;
131 uint32_t rdb_Reserved1[6];
132 /* physical drive characteristics */
133 uint32_t rdb_Cylinders;
134 uint32_t rdb_Sectors;
136 uint32_t rdb_Interleave;
138 uint32_t rdb_Reserved2[3];
139 uint32_t rdb_WritePreComp;
140 uint32_t rdb_ReducedWrite;
141 uint32_t rdb_StepRate;
142 uint32_t rdb_Reserved3[5];
143 /* logical drive characteristics */
144 uint32_t rdb_RDBBlocksLo;
145 uint32_t rdb_RDBBlocksHi;
146 uint32_t rdb_LoCylinder;
147 uint32_t rdb_HiCylinder;
148 uint32_t rdb_CylBlocks;
149 uint32_t rdb_AutoParkSeconds;
150 uint32_t rdb_HighRDSKBlock;
151 uint32_t rdb_Reserved4;
152 /* drive identification */
153 char rdb_DiskVendor[8];
154 char rdb_DiskProduct[16];
155 char rdb_DiskRevision[4];
156 char rdb_ControllerVendor[8];
157 char rdb_ControllerProduct[16];
158 char rdb_ControllerRevision[4];
159 char rdb_DriveInitName[40];
162 struct PartitionBlock {
164 uint32_t pb_SummedLongs;
169 uint32_t pb_Reserved1[2];
170 uint32_t pb_DevFlags;
171 uint8_t pb_DriveName[32];
172 uint32_t pb_Reserved2[15];
173 uint32_t pb_Environment[20];
174 uint32_t pb_EReserved[12];