int readSector(int,int,int,unsigned char*); int readBlock(int,unsigned char*); /**************************************************************** * readSector - returns 0 if OK, error # if error ****************************************************************/ int readSector(track,sector,head,buffer) int track; int sector; int head; unsigned char *buffer; { int eCount; int result; eCount=3; do { result=biosdisk(BDREAD,FLOPPY1,head,track,sector,ONESECTOR,buffer); eCount--; } while(result && eCount); return(result); } /***************************************************** * ReadBlock - reads 1 block of data from the ADAM disk * blockNum is which block to read * buffer is where to place data * Returns 0 if OK, otherwise error number * * Note: blocks are composed of 2 512 byte sectors. * Each block's sectors are 5 sectors apart and * 1 sector seperates the block from the next. * ie block 0 uses sectors 1 and 6, block 1 * uses sectors 3 and 8. *****************************************************/ int readBlock(blockNum,buffer) int blockNum; unsigned char *buffer; { int sector; int track; int head; int result; track=blockNum/4; /* 4 blocks per track */ if(track>39) { head=HEAD1; /* Tracks 40-79 are on side 2 */ track-=40; } else head=HEAD0; sector=((blockNum % 4)*2)+1; /* blocks start on odd sectors */ result=readSector(track,sector,head,buffer); if (result) return(result); sector+=5; /* compute second sector of block */ if(sector>8) sector-=8; return(readSector(track,sector,head,buffer+512)); }