NAM FORMAT HARD DISK (XIBEC) OPT PAG * Michael Holley 25 Apr 1982 * * Disk formatting program for 6800 FLEX 2.0 * This version is designed for the XIBEC S1410 * controller and the Tandon TM602S drive. * This version assumes XIBEC has address 0 ($01) and * a single drive. MAXSEC EQU $FF MAXTRK EQU $10 SYS EQU 64 SECTORS FOR SYSTEM TOTAL EQU MAXTRK*MAXSEC-SYS * TEMPORARY STORAGE ORG $7000 * DEVICE CONTROL BLOCK (DCB) CMDOP RMB 1 COMMAND CLASS & OP CODE LUN RMB 1 DRIVE (0=$00 1=$20) & HIGH ADDRESS TRACK RMB 1 MIDDLE ADDRESS SECTOR RMB 1 LOW ADDRESS BLKCNT RMB 1 BLOCK COUNT OR INTERLEAVE CRTFLD RMB 1 CONTROL FIELD * STATUS SENSE BUFFER STBUF RMB 6 * GENERAL STORAGE XTEMP1 RMB 2 USED BY DRIVE ROUTINES XTEMP2 RMB 2 SECCNT RMB 1 SECTOR COUNT * SECTOR BUFFER ORG $7C00 BUFF1 RMB $100 BUFF2 RMB $100 * FLEX EQUATES WARMS EQU $AD03 GETCH EQU $AD15 PUTCH EQU $AD18 PSTRNG EQU $AD1E PCRLF EQU $AD24 SSTACK EQU $A07F * DISK DRIVER ROUTINES DREAD EQU $7100 READ SECTOR DWRITE EQU $7103 WRITE A SINGLE SECTOR DRSTOR EQU $7109 RESTOR HEAD DCMMD EQU $711E ISSUE COMMAND TO XIBEC DSENSE EQU $7121 READ SENSE STATUS * CONTROLLER COMMANDS TSTDRV EQU $00 TEST FOR DRIVE READY RSCMND EQU $01 RECALIBRATE FMCMMD EQU $04 FORMAT DISK DRIVE CHFMAT EQU $05 CHECK TRACK FORMAT FMATRK EQU $06 FORMAT TRACK SKCMND EQU $0B SEEK INTDR EQU $0C INIT DRIVE CHARACTERISTICS RAMDIA EQU $E0 RAM DIAGNOSTIC DRVDIA EQU $E3 DRIVE DIAGNOSTIC CRTDIA EQU $E4 CONTROLLER DIAGNOSTIC ORG $A100 START BRA FORM1 VN FCB 1 VERSION NUMBER FORM1 LDS #SSTACK LDX #MSG1 "FORMAT ROUTINE" JSR PSTRNG FORM12 JSR GETCH GET RESPONSE ANDA #$5F MAKE IT UPPER CASE CMPA #'Y SEE IF YES BEQ FORM21 JMP EXIT FORM21 LDX #MSG2 JSR PSTRNG JSR CHKDRV CHECK IF DRIVE READY BEQ FORM22 LDX #ABORT1 JMP EXIT1 FORM22 JSR FORMAT FORMAT DRIVE BEQ FORM23 LDX #ABORT2 JMP EXIT1 FORM23 LDX #OKFOR JSR PSTRNG JSR DOSEC WRITE SECTOR INFO BEQ FORM25 LDX #ABORT3 JMP EXIT1 FORM25 JSR DOSIR WRITE SYS INFO RECORD BEQ FORM27 LDX #ABORT5 JMP EXIT1 FORM27 LDX #OKALL EXIT1 JSR PSTRNG EXIT JMP WARMS * STRINGS MSG1 FCC /FORMAT HARD DISK? (Y-N)/ FCB 4 MSG2 FCC /FORMATTING DRIVE/ FCB 4 ABORT1 FCC /DRIVE OR CONTROLLER NOT READY/ FCB 4 ABORT2 FCC /FORMAT DRIVE COMMAND FAILED/ FCB 4 ABORT3 FCC /SECTOR LINK FAILURE/ FCB 4 ABORT5 FCC /SYSTEM INFO RECORD FAILURE/ FCB 4 OKFOR FCC /FORMAT DRIVE PASSED/ FCB $D,$A,0,0,0 FCC /---------1---------2---------3---------4/ FCC /---------5---------6---------7------/ FCB $D,$A,0,0,0,4 OKALL FCC /FORMAT COMPLETE/ FCB 4 *********************************** * CHECK TO SEE IF DRIVE IS READY CHKDRV LDAA #CRTDIA CONTROLLER DIAGNOSTIC STAA CMDOP LDAA #00 DRIVE STAA LUN JSR DCMMD BNE CHK9 ERROR LDAA #TSTDRV STAA CMDOP JSR DCMMD BNE CHK9 ERROR CHK5 CLRA NO ERROR RTS CHK9 RTS *********************************** * FORMAT DRIVE FORMAT LDAA #FMCMMD STAA CMDOP CLR LUN CLR TRACK CLR SECTOR LDAA #3 INTERLEAVE STAA BLKCNT CLR CRTFLD JMP DCMMD *************************************** * LINK SECTORS * CLEAR RAM SECTOR BUFFER DOSEC LDX #BUFF2 LDAB #00 256 BYTE BUFFER FMAT2 CLR 0,X INX DEC B BNE FMAT2 CLR SECTOR CLR TRACK LDAA #1 FIRST SECTOR STAA BUFF2+1 * WRITE LINKS TO DISK FMAT3 LDX #BUFF2 LDAA 0,X GET TRACK GET LINK FROM BUFFER STAA TRACK PUT IN DCB LDAA 1,X GET NEXT SECTOR STAA SECTOR PUT SECTOR IN DCB INCA NEXT SECTOR LINK CMPA #MAXSEC+1 END OF SECTOR BNE FMAT4 LDAA #'T JSR PUTCH PRINT ACTION SYMBOL LDX #BUFF2 ASSUME X DESTROYED INC 0,X NEXT TRACK LDAA #1 SECTOR 1 OF NEXT TRACK FMAT4 STAA 1,X PUT SECTOR IN BUFFER LDAA TRACK CMPA #MAXTRK+1 BEQ FMAT6 DONE LDAB SECTOR JSR DWRITE WRITE SECTOR BNE FMAT9 BR IF ERROR BRA FMAT3 FMAT6 CLRA SHOW NO ERROR FMAT9 RTS ******************************************** * SET UP SYSTEM INFO RECORD * CLEAR LAST LINK IN SYSTEM DOSIR LDX #BUFF2 CLR 0,X CLR 1,X LDAA #00 TRACK 0 LDAB #SYS JSR DWRITE WRITE SECTOR BNE DOSIR7 * CLEAR LAST LINK ON DISK LDX #BUFF2 LDAA #MAXTRK LDAB #MAXSEC JSR DWRITE BNE DOSIR7 * READ IN SIR LDAA #00 TRACK 0 LDAB #03 SECTOR 0 LDX #BUFF2 JSR DREAD BNE DOSIR7 LDX #BUFF2 STX XTEMP1 LDX #IMAGE STX XTEMP2 LDAB #40 NUMBER OF BYTES DOSIR4 LDAA 0,X INX STX XTEMP2 LDX XTEMP1 STAA 0,X INX STX XTEMP1 LDX XTEMP2 DECB BNE DOSIR4 * WRITE SIR TO DISK LDAA #00 TRACK 0 LDAB #03 SECTOR 3 LDX #BUFF2 JSR DWRITE WRITE SECTOR BNE DOSIR7 ERROR? DOSIR7 RTS IMAGE FCB 0,0,0,0,0,0,0,0 FCB 0,0,0,0,0,0,0,0 FCC /HARDDISK / 11 BYTES FDB $0003 VOLUME NUMBER FCB $00,SYS+1 FIRST DATA BYTE FCB MAXTRK,MAXSEC LAST TRACK & SECTOR FDB TOTAL FCB 04,25,82 DATE FCB MAXTRK,MAXSEC LAST TRACK & SECTOR END START