* FORMAT PROGRAM FOR SK*DOS * SUPPORTS ONLY DC-2 - STYLE CONTROLLERS * COPYRIGHT (C) 1984 BY PETER A. STARK * FOR STAR-K SOFTWARE SYSTEMS CORP. * SK*DOS EQUATES USRFCB EQU $C840 MONTH EQU $CC0E YEAR EQU $CC10 MAXDRV EQU $CC5F MAX DRIVE ON SYSTEM WARMST EQU $CD03 GETCH EQU $CD15 PUTCH EQU $CD18 INLINE EQU $CD1B PSTRNG EQU $CD1E PCRLF EQU $CD24 GETNAM EQU $CD2D OUT5D EQU $CD39 OUT2H EQU $CD3C INDEC EQU $CD48 FCS EQU $D406 RESTOR EQU $DE09 DISK DRIVER - RESTORE DLATCH EQU $E014 DRIVE SELECT LATCH CMDREG EQU $E018 FDC COMMAND REGISTER STAREG EQU CMDREG FDC STATUS REGISTER TRKREG EQU $E019 FDC TRACK REGISTER SECREG EQU $E01A FDC SECTOR REGISTER DATREG EQU $E01B FDC DATA REGISTER ORG $0000 START BRA START1 VER FCB 2 VERSION START1 BSR GETDRV GO GET DRIVE NUMBER BSR ASKTRK GET NUMBER OF TRACKS TO FORMAT BSR GETNAN GET NAME AND NUMBER JSR CHEKIT CHECK IF OK TO PROCEED JSR PCRLF LDA DRIVE GET DRIVE NUMBER STA DLATCH SELECT DRIVE AND START MOTOR LDX #0 WAITM MUL WAIT FOR MOTOR TO GET TO SPEED LEAX -1,X BNE WAITM JSR SETUP SETUP BUFFER WITH TRACK TEMPLATE JSR WRTALL GO WRITE EVERY TRACK JSR CHKSEC GO CHECK ALL SECTORS JSR DOBOOT PUT ON BOOT JSR DOSIS DO SYSTEM INFO RECORD JSR DODIR DO DIRECTORY JSR REPORT REPORT ON RESULTS JMP WARMST AND QUIT * GET DRIVE NUMBER GETDRV JSR INDEC GET DRIVE NUMBER BCS DRNONG IF BAD NUMBER TSTB BNE DRNOK IF NUMBER WAS FOUND DRNONG LDX #DRNMSG INVALID DRIVE NUMBER JSR PSTRNG JMP WARMST DRNOK TFR X,D CMPB MAXDRV CHECK VALID NUMBER BHI DRNONG INVALID IF >9 TSTA BNE DRNONG MUST BE ZERO STB DRIVE SAVE NUMBER RTS * ASKTRK - GET NUMBER OF TRACKS DESIRED ASKTRK JSR PCRLF LDX #GTTMSG ASK FOR NUMBER OF TRACKS JSR PSTRNG JSR INLINE GET INPUT JSR INDEC GET NUMBER BCS ASKTRK ASK AGAIN IF NOTHING TFR X,D CMPD #2 CHECK NUMBER OF TRACKS BHS TRKSOK >1 SEEMS OK TRKSNG LDX #TNGMSG ELSE NUMBER OF TRACKS IS NG JSR PSTRNG BRA ASKTRK AND ASK AGAIN TRKSOK CMPD #80 BHI TRKSNG ABOVE 81 ALSO NG STB TRACKS STORE IT RTS AND RETURN * GETNAN - GET DISK NAME AND NUMBER GETNAN LDX #NAMMSG ASK FOR NAME JSR PSTRNG JSR INLINE GET THE NAME LDX #NAME-4 POINT BEFORE NAME JSR GETNAM GO GET THE NAME BCS GETNAN ASK AGAIN FOR A VALID NAME TST EXT CHECK EXTENSION BNE GETNUM EXTENSION IS OK LDA #'S LDB #'- STD EXT ELSE FORCE .S-D EXTENSION LDA #'D STA EXT+2 GETNUM LDX #NUMMSG ASK FOR NUMBER JSR PSTRNG JSR INLINE JSR INDEC GET THE NUMBER BCS GETNUM IF NO NUMBER STX NUMBER ELSE STORE IT RTS AND RETURN * CHEKIT - CHECK THAT USER REALLY WANTS TO FORMAT CHEKIT JSR PCRLF LDX #CHKMSG PRINT CHKMSG JSR PSTRNG LDA DRIVE ADDA #$30 CVT TO ASCII JSR PUTCH LDX #RUSMSG PRINT "ARE YOU SURE?" JSR PSTRNG JSR GETCH GET REPLY ANDA #$DF CVT TO UPPER CMPA #'Y BNE ABORT LDX #USRFCB LDA DRIVE STA 3,X PUT IN DRIVE NUMBER JSR RESTOR SELECT DRIVE AND RESTORE IT BNE CHEKNG GO CHECK ERROR ON ERROR LDB STAREG GET FDC STATUS ANDB #$D1 CHECK NR, WP, SEEK, BUSY BNE CHEKNG IF ERROR RTS ELSE JUST RETURN CHEKNG BITB #$40 CHECK WRITE PROTECT BIT BNE CHEKWP IF WRITE PROTECTED LDX #DERMSG JSR PSTRNG UNSPECIFIED ERROR MESSAGE BRA ABORT CHEKWP LDX #WPMSG JSR PSTRNG DISK WRITE PROTECTED ABORT LDX #NOTMSG JSR PSTRNG PRINT "ABORTING" JMP WARMST * SETUP - SET UP A TRACK DATA TEMPLATE WHICH WILL * LATER BE FILLED IN WITH TRACK AND SECTOR DATA * AND POINTERS FOR EACH ACTUAL TRACK SETUP LDY #BUFFER POINT TO BUFFER * POST-DECIN GAP AT BEGINNING OF TRACK = 2 BYTES CLR 0,Y+ CLR 0,Y+ 2 POST DECIN GAP * 301 BYTES FOR THE FIRST SECTOR CLRA LDB #6 6 ZEROES BSR PUTANY LDA #$FE 1 ID ADDRESS MARK STA 0,Y+ CLR 0,Y+ 1 TRACK NUMBER (FILL LATER) CLR 0,Y+ 1 SIDE (0) CLR 0,Y+ 1 SECTOR NUMBER (FILL LATER) LDA #1 STA 0,Y+ 1 SECTOR LENGTH = 256 LDA #$F7 STA 0,Y+ 1 CRC LDA #$FF LDB #11 BSR PUTANY 11 FF'S ID GAP 2 CLRA LDB #6 BSR PUTANY 6 00 LDA #$FB STA 0,Y+ 1 DATA ADDRESS MARK CLRA CLRB BSR PUTANY 256 BYTES FOR SECTOR DATA LDA #$F7 STA 0,Y+ 1 CRC LDA #$FF LDB #14 BSR PUTANY 14 FF'S GAP 3 * NOW COPY THE 301 BYTES FOR THE FIRST SECTOR INTO * THE FOLLOWING NINE SECTORS LDX #BUFFER+2 POINT TO BEGINNING OF SECTOR SECOPY LDA 0,X+ STA 0,Y+ CMPY #BUFEND FINISHED? BNE SECOPY NO, KEEP COPYING RTS EXIT WHEN ENTIRE TRACK IS SET UP * PUTANY - PUT C(A) INTO THE C(B) BYTES OF * MEMORY BEGINNING AT C(Y), EXIT WITH Y POINTING * TO FIRST EMPTY BUTE PUTANY STA 0,Y+ PUT IN THE BYTE DECB DECR COUNTER BNE PUTANY REPEAT UNTIL DONE RTS THEN RETURN * WRTALL - FILL IN DATA INTO TRACK TEMPLATE AND WRITE IT WRTALL CLR TRACK START WITH TRACK 0 LDA #'1 STA TRCHAR INDICATOR STARTS WITH A 1 WRITLO LDA TRACK STA DATREG LDA #$1B SEEK, LOAD HEAD, SLOW STA CMDREG START A SEEK BUT DON'T WAIT BSR FMTMEM FORMAT AN ENTIRE TRACK IN MEMORY LDA TRCHAR JSR PUTCH PRINT TRACK INDICATOR DIGIT INC TRCHAR INCREMENT IT LDA TRCHAR CMPA #'9 PAST 9? BLS WRITL1 NO, STILL OK LDA #'0 YES, CHANGE BACK TO 0 STA TRCHAR WRITL1 BSR WRITRK GO WRITE THE TRACK ONTO DISK INC TRACK INCREMENT TRACK LDA TRACK GET TRACK NUMBER CMPA TRACKS CHECK FOR MAXIMUM TRACK BNE WRITLO REPEAT UNTIL DONE RTS THEN EXIT * FMTMEM FILL IN TRACK AND SECTOR DATA IN TEMPLATE FMTMEM LDX #BUFFER+2 POINT TO FIRST SECTOR LDY #INTTLV-1 POINT TO INTERLEAVE TABLE LDB #1 PHYSICAL SECTOR NUMBER FMTSEC LDA TRACK STA 7,X PUT IN TRACK NUMBER STA 30,X TEMP ASSUME LINK TO CURRENT TRACK LDA B,Y GET LOGICAL SECTOR NUMBER STA 9,X PUT IN SECTOR NUMBER INCA POINTER TO NEXT STA 31,X TEMP ASSUME LINK TO NEXT SECTOR CMPA #10 CHECK IF PAST LAST SEC ON TR BLS FMTSOK 10 OR LESS IS OK LDA #1 ELSE GO TO SEC 1 ON NEXT TRACK STA 31,X TEMP PUT IT IN INC 30,X AND TEMP STEP TO NEXT TRACK LDA 30,X NOW GET NEXT TRACK CMPA TRACKS CHECK IF PAST LAST TRACK BLO FMTSOK IF STILL NOT DONE CLR 30,X ELSE PUT IN A POINTER OF 00-00 CLR 31,X FMTSOK LEAX 301,X STEP TO NEXT SECTOR'S DATA INCB GO TO NEXT SECTOR CMPB SECTRS CHECK WITH MAX NUMBER OF SECTORS BLS FMTSEC REPEAT UNTIL ALL SECTORS ARE DONE RTS THEN RETURN * WRITRK - WRITE AN ENTIRE TRACK TO DISK WRITRK PSHS CC SAVE CONDITIONS ORCC #$50 TURN OFF INTERRUPTS BSR WABUSY WAIT FOR FDC TO FINISH PREV SEEK LDX #BUFFER POINT TO BUFFER LDA #$F4 WRITE TRACK COMMAND STA CMDREG START IT MUL MUL WAIT FOR CMDREG TO SETTLE MUL MUL WRITE1 LDA STAREG GET FDC STATUS BITA #2 DRQ? BNE WRITE2 YES, GO GIVE IT BITA #1 BUSY? BNE WRITE1 YES, SO WAIT SOME MORE PULS CC RESTORE CONDITIONS RTS ELSE EXIT WHEN FINISHED WRITE2 LDA 0,X+ GET NEXT DATA BYTE STA DATREG GIVE TO FDC CMPX #BUFEND FINISHED DATA? BNE WRITE1 NO, SO KEEP GOING BSR WABUSY WAIT AS LONG AS FDC IS BUSY PULS CC RESTORE CONDITIONS RTS * WABUSY - WAIT WHILE FDC IS BUSY WABUSY LDA STAREG GET FDC STATUS BITA #1 CHECK BUSY BIT BNE WABUSY WAIT WHILE STILL BUSY RTS THEN EXIT * CHKSEC CHECK ALL SECTORS TO REMOVE DEFECTIVE ONES CHKSEC LDX #USRFCB POINT TO FCB LDA DRIVE STA 3,X DRIVE NUMBER LDA TRACKS NUMBER OF TRACKS DECA LDB SECTRS NUMBER OF SECTORS STD 30,X CURRENT TR & SEC NOS. STA CHFLAG LAST POINTER WAS OK MUL GET NUMBER OF FREE SECTORS TFR D,U AND INTO U LDA #9 STA 0,X READ SECTOR COMMAND FOR FCS LDY #0 LAST POINTER POINTS TO 00-00 STY FIFREE INITIALIZE FIRST FREE POINTER STY LAFREE INITIALIZE LAST FREE POINTER * LOOP TO GO BACKWARD THROUGH FREE CHAIN CHLOOP LDA #9 READY TO READ STA 0,X JSR FCS READ CURRENT SECTOR BEQ CHROK IF SECTOR READ OK * SECTOR READ WAS NG CHWRNG LEAU -1,U SUBTRACT 1 FROM FREE CLR CHFLAG AND MARK IT DEFECTIVE PSHS X,D SAVE X AND MAKE ROOM LDX #BDSMSG PRINT "DEFECTIVE SECTOR AT" JSR PSTRNG CLR 0,S MSB=0 LDA USRFCB+30 TRACK NUMBER STA 1,S PUT ON STACK TFR S,X POINT TO IT CLRB SUPPRESS SPACES JSR OUT5D OUTPUT TRACK NUMBER LDA #'- JSR PUTCH OUTPUT DASH LDA USRFCB+31 SECTOR NUMBER STA 1,S TFR S,X POINT TO IT CLRB SUPPRESS SPACES JSR OUT5D OUTPUT SECTOR NUMBER JSR PCRLF LDB USRFCB+30 CHECK CURRENT TRACK INCB SO TRACK 0 IS A 1 LDA #'1 ASCII 1 TRPLOO BEQ TRKPFI FINISHED WHEN ON TRACK 0 JSR PUTCH INCA CMPA #'9 IS IT PAST 9? BLS NPAST9 NOT YET LDA #'0 YES, RESTORE TO 0 NPAST9 DECB DECREMENT TRACK COUNTER BRA TRPLOO AND REPEAT TRKPFI PULS D,X RESTORE REGISTERS BRA CHNEXT AND THEN CONTINUE * SECTOR READ WAS OK CHROK LDD LAFREE CHECK LAST FREE BNE CHROK1 NON-ZERO MEANS THIS IS NOT LAST LDD 30,X ELSE GET CURRENT TR-SEC STD LAFREE SAVE AS LAST FREE CHROK1 TST CHFLAG WAS PREVIOUS OK TOO? BEQ CHPRNG NO, SO UPDATE POINTER LDY 30,X SAVE CURRENT TR-SEC BRA CHNEXT AND GO TO NEXT SECTOR * THIS SECTOR OK, BUT PREVIOUS ONE OR MORE NG CHPRNG STY 64,X PUT NEW POINTER INTO SECTOR LDA #10 STA 0,X READY TO WRITE BACK JSR FCS WRITE SECTOR BACK BNE CHWRNG WRITE WAS NG, SAME AS A NG READ LDY 30,X SAVE CURRENT TR-SEC INC CHFLAG MARK THIS SECTOR AS OK * THEN STEP TO NEXT PREVIOUS SECTOR CHNEXT LDD 30,X GET CURRENT TR-SEC DECB STEP BACK ONE SECTOR BNE CHNEX1 OK IF NOT ZERO PSHS A LDA #$08 ON NEW TRACK ERASE TRACK INDIC JSR PUTCH LDA #$20 JSR PUTCH LDA #$08 JSR PUTCH PULS A LDB SECTRS ELSE GO BACK A TRACK DECA CMPA #$FF FINISHED TRACK 0? BEQ CHFINI YES, FINISHED DISK TSTA ENTERING TRACK 0? BNE CHNEX1 NO, OK TO CONTINUE STY FIFREE YES, SAVE PREV TR-SEC AS 1ST FREE STU FREE NUMBER OF FREE SECTORS CHNEX1 STD 30,X NEW CURRENT TR-SEC JMP CHLOOP AND REPEAT AGAIN * FINISHED WHEN WE REACH TRACK 0 CHFINI RTS AND RETURN * DOBOOT - PUT BOOT ON DISK TR 0 SEC 1 DOBOOT LDX #BOOT POINT TO SUPER BOOT LDY #USRFCB+64 AND FCB CLRB COUNTER DOBOO1 LDA 0,X+ GET BYTE STA 0,Y+ PUT IT IN DECB DECR COUNTER BNE DOBOO1 REPEAT 256 TIMES LDX #USRFCB POINT TO FCB LDA #10 STA 0,X WRITE CODE LDD #0001 STD 30,X TR 0 SEC 1 JSR FCS GO WRITE IT BNE SYSERR ERROR PUTTING BOOT THERE RTS ELSE RETURN * SYSERR - SYSTEM ERROR ON TRACK 0 SYSERR LDX #TR0MSG PRINT "ERROR ON TRACK 0" JSR PSTRNG JMP WARMST AND STOP * DOSIS - WRITE SIS TO DISK DOSIS LDX #USRFCB LDA #10 STA 0,X WRITE SECTOR CODE LDD #$0003 TR 0 SEC 3 STD 30,X LDD #0 CLR A, B=256 LEAY 64,X POINT Y TO DATA AREA JSR PUTANY ERASE SECTOR DATA LDD FIFREE FIRST FREE STD 93,X LDD LAFREE LAST FREE STD 95,X LDD FREE NUMBER FREE STD 97,X LDD MONTH MONTH AND DAY STD 99,X LDA YEAR YEAR STA 101,X LDA TRACKS NUMBER OF TRACKS DECA STARTS WITH 0 LDB SECTRS NUMBER OF SECTORS STD 102,X LDY #NAME POINT TO NAME LEAX 80,X POINT TO NAME LOC LDB #13 NAME+EXT+NUMBER MOVNAM LDA 0,Y+ GET CHAR STA 0,X+ PUT INTO SIS DECB DECREMENT COUNTER BNE MOVNAM MOVE 13 BYTES LDX #USRFCB RESET POINTER JSR FCS GO WRITE SECTOR BACK BNE SYSERR REPORT ERROR RTS THEN RETURN * DODIR - PUT AN END ON DIRECTORY DODIR LDX #USRFCB LDD #$0005 TR 0 SEC 5 STD 30,X LDA #9 STA 0,X READ CODE DODIR1 JSR FCS GO READ SECTOR BNE SYSERR ERROR IF CAN'T READ LDD 64,X GET NEXT POINTER TSTA CHECK TRACK BNE DODIR2 MEANS LAST SECTOR ON THIS TRACK STD 30,X ELSE SETUP TO READ NEXT BRA DODIR1 GO DO IT DODIR2 CLR 64,X CLR 65,X MARK END OF DIRECTORY INC 0,X CHANGE 9 (READ) TO 10 (WRITE) JSR FCS GO REWRITE SECTOR LBNE SYSERR RTS AND QUIT * REPORT - REPORT THAT FORMATTING IS DONE REPORT LDX #FCMMSG PRINT "FORMATTING COMPLETE." JSR PSTRNG LDX #FREE CLRB JSR OUT5D PRINT NUMBER OF FREE SECTORS RTS AND RETURN * TEXT STRINGS DRNMSG FCC 'INVALID DRIVE NUMBER.',4 CHKMSG FCC 'ABOUT TO FORMAT DRIVE NUMBER ',4 GTTMSG FCC 'HOW MANY TRACKS? ',4 TNGMSG FCC 'INVALID NUMBER OF TRACKS.',4 NAMMSG FCC 'ENTER DISK NAME: ',4 NUMMSG FCC 'ENTER DISK NUMBER: ',4 RUSMSG FCC 'ARE YOU SURE YOU REALLY WANT TO? ',4 NOTMSG FCC 'NO FORMATTING DONE.',4 DERMSG FCC 'DISK ERROR - CANNOT FORMAT.',4 WPMSG FCC 'DISK IS WRITE PROTECTED',4 FCMMSG FCC 'DISK IS FORMATTED; FREE SECTORS = ',4 BDSMSG FCC 'DEFECTIVE SECTOR AT TR-SEC ',4 TR0MSG FCC 'ERROR ON TRACK 0 - FORMATTING ABORTED.',4 * THE FOLLOWING SUPER-BOOT PROGRAM IS PUT ON * TRACK 0 SECTOR 1 OF DISK * SUPER-BOOT FOR DC-2 - TYPE CONTROLLERS * POSITION-INDEPENDENT CODE FOR SK*DOS * (C) 1984 BY PETER A. STARK * SUPER BOOT EQUATES INCHE EQU $F806 MONITOR INPUT CHARACTER WITH ECHO MPSTRN EQU $F810 MONITOR PSTRNG ROUTINE MONITR EQU $F814 MONITOR RE-ENTRY POINT BOOT BRA BOOT1 FCC 'DC2' FOR DC-2 CONTROLLER FIRSTS FDB $0000 FIRST TRACK-SECTOR OF DOS BOOT1 LDS #$C980 POSITION STACK LDA #$0B STA CMDREG RESTORE, LOAD HEAD, SLOW STEP LBSR WAIT GIVE IT TIME LDD FIRSTS,PCR FIRST TR-SEC IS NOW ... STD TRSEC,PCR NEXT TR-SEC LBEQ ERROR BUT QUIT IF MISSING CLR DATPTR,PCR CLEAR DATA POINTER LDX #$FFFF STX TRADDR,PCR ERASE TRANSFER ADDRESS BSR WNBUSY THEN WAIT FOR NOT BUSY * MAIN READ LOOP MLOOP BSR GETBYT GET A BYTE CMPA #2 DATA FOLLOWS? BEQ RDDATA YES, GO READ IT CMPA #$16 ADDRESS FOLLOWS? LBEQ RDADDR YES, GO GET IT BRA MLOOP ELSE REPEAT * GETBYT ROUTINE - GET NEXT BYTE FROM FILE GETBYT LDB DATPTR,PCR GET DATA POINTER BNE GETBY1 OK TO CONTINUE IF NOT 0 BSR GETSEC ELSE GET SECTOR GETBY1 LEAX SBBUFF,PCR POINT TO SBBUFF ABX POINT TO BYTE INC DATPTR,PCR BUMP POINTER LDA 0,X GET BYTE RTS RETURN WITH BYTE IN A AND CC SET * GETSEC - GET NEXT SECTOR GETSEC LDD TRSEC,PCR NEXT TR-SEC LBEQ DONE NEXT IS 00-00 SO END STB SECREG GIVE SECTOR TO FDC CMPA TRKREG ALREADY ON RIGHT TRACK? BEQ TRKOK YES STA DATREG NO, GIVE TRACK TO FDC BSR WAIT LDA #$1B STA CMDREG SEEK, LOAD, SLOW STEP RATE BSR WAIT BSR WNBUSY WAIT FOR COMPLETION TRKOK LDA #$8C STA CMDREG READ COMMAND BSR WAIT CLRB COUNTER = 256 LEAX SBBUFF,PCR POINT TO SBBUFF RDLOOP LDA STAREG BITA #2 DRQ? BNE GETDAT YES, GET THE DATA BITA #1 BUSY? BNE RDLOOP YES, WAIT FOR IT BRA ERROR ON ERROR QUIT GETDAT LDA DATREG GET DATA STA 0,X+ SAVE IT DECB DECREMENT COUNTER BNE RDLOOP REPEAT UNTIL DONE BSR WAIT BSR WNBUSY WAIT FOR READY BITB #$1C RNF, CRC, LD ERRORS BNE ERROR LDB #4 STB DATPTR,PCR NEXT BYTE IS BYTE 4 RTS AND QUIT * WAIT LOOP WAIT LDB #32 WAIT1 DECB BNE WAIT1 RTS * WNBUSY - WAIT FOR NOT BUSY WNBUSY LDB STAREG CHECK STATUS BITB #1 CHECK BUSY FLAG BNE WNBUSY WAIT IF STILL BUSY RTS ELSE RETURN WITH B=STATUS * RDDATA - READ DATA FROM SECTOR RDDATA BSR GETBYT PSHS A BSR GETBYT TFR A,B PULS A GET LOAD ADDRESS TFR D,Y INTO Y REG BSR GETBYT GET COUNT BEQ ERROR IF COUNT = 0 TFR A,B RDMEM PSHS B SAVE COUNTER LBSR GETBYT GET NEXT BYTE PULS B STA 0,Y+ SAVE IT DECB DECREMENT COUNTER BNE RDMEM REPEAT UNTIL DONE LBRA MLOOP GO LOOK FOR MORE * RDADDR - READ ADDRESS FROM SECTOR RDADDR LBSR GETBYT STA TRADDR,PCR LBSR GETBYT STA TRADDR+1,PCR LBRA MLOOP GO GET MORE * WHEN DONE, CHECK TRANSFER ADDR AND GO DO IF OK DONE LDX TRADDR,PCR GET TRANSFER ADDRESS CMPX #$FFFF ANYTHING THERE? BEQ ERROR NO JMP 0,X ELSE GO TO PROGRAM * ERROR ROUTINE ERROR LEAX ERRMSG,PCR ERROR MESSAGE JSR [MPSTRN] PRINT IT JSR [INCHE] INPUT ANSWER CMPA #'Y YES? LBEQ BOOT YES JMP MONITR ELSE QUIT ERRMSG FCC 'AGN?',4 TRADDR RMB 2 TRANSFER ADDRESS DATPTR RMB 1 DATA POINTER SBBUFF RMB 256 TRSEC EQU SBBUFF NEXT TR-SEC IN 1ST TWO BYTES * END OF SUPERBOOT PROGRAM * DATA AREA FOR FORMAT SECTRS FCB 10 10 SECTORS PER TRACK INTTLV FCB 1,4,7,10,3,6,9,2,5,8 INTERLEAVE TABLE DRIVE RMB 1 DRIVE NUMBER TO FORMAT ON TRACK RMB 1 CURRENT TRACK LAGOOD RMB 2 LAST GOOD TR-SEC CHFLAG RMB 1 0=LAST WAS AN ERROR, 1=OK TRCHAR RMB 1 TRACK INDICATOR TRACKS RMB 1 NUMBER OF TRACKS TO FORMAT FREE RMB 2 NUMBER OF FREE SECTOR FIFREE RMB 2 FIRST FREE TR-SEC LAFREE RMB 2 LAST FREE TR-SEC DUMMY RMB 1 LEAVE THIS BEFORE NAME NAME RMB 8 DISK NAME EXT RMB 3 DISK EXTENSION NUMBER RMB 2 DISK NUMBER BUFFER RMB 3012 TRACK BUFFER BUFEND EQU * END OF BUFFER END START