// Constants
enum {
/* TIB instruction opcodes */
scInc = 1, /* transfer data, increment buffer pointer */
scNoInc = 2, /* transfer data, don’t increment pointer */
scAdd = 3, /* add long to address */
scMove = 4, /* move long to address */
scLoop = 5, /* decrement counter and loop if > 0 */
scNop = 6, /* no operation */
scStop = 7, /* stop TIB execution */
scComp = 8, /* compare SCSI data with memory */
/* signature values */
sbSIGWord = 0x4552, /* driver descriptor map signature */
pMapSIG = 0x504D /* partition map signature */
};
// Data Types
struct SCSIInstr {
unsigned short scOpcode; /* operation code */
unsigned long scParam1; /* first parameter */
unsigned long scParam2; /* second parameter */
};
typedef struct SCSIInstr SCSIInstr;
struct Block0 {
unsigned short sbSig; /* device signature */
unsigned short sbBlkSize; /* block size of the device*/
unsigned long sbBlkCount; /* number of blocks on the device*/
unsigned short sbDevType; /* reserved */
unsigned short sbDevId; /* reserved */
unsigned long sbData; /* reserved */
unsigned short sbDrvrCount; /* number of driver descriptor entries */
unsigned long ddBlock; /* first driver’s starting block */
unsigned short ddSize; /* driver’s size, in 512-byte blocks */
unsigned short ddType; /* operating system type (MacOS = 1) */
unsigned short ddPad[243]; /* additional drivers, if any */
};
typedef struct Block0 Block0;
Partition {
unsigned short pmSig; /* partition signature */
unsigned short pmSigPad; /* reserved */
unsigned long pmMapBlkCnt; /* number of blocks in partition map */
unsigned long pmPyPartStart; /* first physical block of partition */
unsigned long pmPartBlkCnt; /* number of blocks in partition */
unsigned char pmPartName[32];/* partition name */
unsigned char pmParType[32]; /* partition type */
unsigned long pmLgDataStart; /* first logical block of data area */
unsigned long pmDataCnt; /* number of blocks in data area */
unsigned long pmPartStatus; /* partition status information */
unsigned long pmLgBootStart; /* first logical block of boot code */
unsigned long pmBootSize; /* size of boot code, in bytes */
unsigned long pmBootAddr; /* boot code load address */
unsigned long pmBootAddr2; /* reserved */
unsigned long pmBootEntry; /* boot code entry point */
unsigned long pmBootEntry2; /* reserved */
unsigned long pmBootCksum; /* boot code checksum */
unsigned char pmProcessor[16]; /* processor type */
unsigned short pmPad[188]; /* reserved */
};
typedef struct Partition Partition;
// Functions
pascal OSErr SCSIReset (void);
pascal OSErr SCSIGet (void);
pascal OSErr SCSISelect (short targetID);
pascal OSErr SCSISelAtn (short targetID);
pascal OSErr SCSICmd (Ptr buffer, short count);
pascal OSErr SCSIMsgIn (short *message);
pascal OSErr SCSIMsgOut (short message);
pascal OSErr SCSIRead (Ptr tibPtr);
pascal OSErr SCSIRBlind (Ptr tibPtr);
pascal OSErr SCSIWrite (Ptr tibPtr);
pascal OSErr SCSIWBlind (Ptr tibPtr);
pascal OSErr SCSIComplete (short *stat, short *message, unsigned long wait);
pascal short SCSIStat (void);