File: RKVER.PA of Tape: Sources/Other/new-16
(Source file text)
/ :::RKVER::: V 1.2 /4/6/78 - VEC /VERIFIES THAT 2 RK05 CARTRIDGES ARE IDENTICAL /PRINTS SECTOR ADDRESS OF BLOCKS WITH VARIANCES /USES FIELDS 2 AND 3 AS BUFFERS / /PROGRAM EQUATES OS8MON= 7605 AUTO10= 10 /AUTOINDEX REGISTER AUTO11= 11 /RK8E COMMANDS DSKP= 6741 /SKIP ON ERROR OR DISK DONE DCLR= 6742 /CLEAR ALL; ALSO RECALIBRATE DLAG= 6743 /LOAD DISK ADDRESS, EXECUTE DLCA= 6744 /LOAD CURRENT ADDRESS REG DRST= 6745 /READ STATUS REGISTER DLDC= 6746 /LOAD COMMAND REGISTER / /PAGE ZERO LOCATIONS *20 DRIVE1, 0 DRIVE2, 0 DRIVE, 0 FIELDN, 0 CTR, 0 SECTOR, 0 HIGH, 0 /SUBROUTINE CALL PSEUDO OPS ABORT= JMS I .;CANCEL /ERROR HALT ROUTINE CRLF= JMS I .;XCRLF /CR, LF (OBVIOUSLY) FCOMP= JMS I .;XCOMP /COMPARE 2 4K FIELDS KBDCHK= JMS I .;XKBDCH /TEST KBD (MAY RETURN CHAR OCTIN= JMS I .;XOCTIN /RETURN KBD ENTRY 0-7 OR 7777 (CR) PRINT= JMS I .;XPRINT /PRINT 6BIT ASCII STRING READRK= JMS I .;XRDRK /READ 4K FROM DRIVE STRTRK= JMS I .;XSTRTR /INITIALIZE DRIVE IN AC TYPE= JMS I .;XTYPE /PRINT CHAR IN AC EJECT /MAIN PROGRAM SEQUENCING / *200 START, CLA CLL PRINT HEADER /DUMP V 3.3 CLA CLL CMA /-1 INHIBITS TERMINAL CRLF PRINT DRIVIN /FIRST DRIVE? OCTIN /GET THE NUMBER CLL RAL /SHIFT IT FOR RK COMMAND DCA DRIVE1 CRLF CLA CLL CMA PRINT DRIVN2 /SECOND DRIVE? OCTIN CLL RAL DCA DRIVE2 /SET SECOND DRIVE CRLF CLA CLL CMA PRINT TCONT /PRESS CR TO CONTINUE CLA CLL CMA /INSTRUCT KBDCHK TO WAIT KBDCHK /AND PAUSE FOR RESPONSE CRLF /ECHO THE CR (OR WHATEVER) /NOW PROCEED TO READ AND COMPARE THE TWO CARTRIDGES TAD (-626 /SEGMENTS ON DRIVE DCA CTR CLA CLL CMA DCA HIGHCT TAD DRIVE1 /LOAD AC STRTRK /AND INITIALIZE DRIVE TAD DRIVE2 STRTRK /BOTH DRIVES ARE AT ADDRESS 00000 COMPAR, CLA CLL TAD (20 /WE'LL USE HIGH CORE DCA FIELDN /SO AS NOT TO DESTROY OS8 TAD DRIVE1 DCA DRIVE READRK /READ 4K FROM DRIVE 1 TAD (30 DCA FIELDN TAD DRIVE2 DCA DRIVE TAD SECTOR /RESET ADDRESS FOR DRIVE 2 TAD (7760 /BACK UP ONE SEGMENT (16 SECTORS) DCA SECTOR TAD HIGH SZA CLA /ONE TIME, CLEAR HIGH BIT ISZ HIGHCT JMP READ2 /NOT THIS TIME DCA HIGH TAD (7760 /ALSO RESET SECTOR DCA SECTOR READ2, READRK /AND 4K FROM DRIVE 2 FCOMP /ARE THEY THE SAME? TAD CTR /SET UP MQ DISPALY MQL ISZ CTR JMP COMPAR /YES, SO TRY NEXT 4K PRINT TXDONE /ALL OK JMP I .+1 OS8MON /RETURN TO OS8 HIGHCT, 7777 EJECT /FATAL ERROR--READ AND STORE ERROR CALL, REGISTERS CANCEL, 0 PRINT HALTX /FATAL ERROR HALT TAD (DATLOC-1 DCA AUTO10 MQA /RECOVER ERROR ADDRESS DCA I AUTO10 TAD CANCEL /CALLING ADDRESS DCA I AUTO10 DRST DCA I AUTO10 TAD HIGH DCA I AUTO10 TAD SECTOR DCA I AUTO10 HLT DATLOC, ZBLOCK 5 PAGE /RK8E-RKO5 ROUTINES / /INITIALIZE SELECTED DRIVE /ENTERED WITH DRIVE NUMBER IN AC XSTRTR, 0 DCA DRIVE XSTRT1, DCLR /CLEAR REGISTERS TAD DRIVE DLDC /SELECT THIS DRIVE DRST /AND SEE IF IT'S AVAILABLE AND (200 /BY CHECKING FILE-NOT-READY SZA CLA JMP NODRIV /NOT AVAILABLE--QUERY USER DCA SECTOR DCA HIGH /INITIALIZE TO ADDRESS 00000 JMS DRECAL /FORCE HEADS TO START JMP I XSTRTR /AND INITIALIZATION COMPLETE NODRIV, CLA CLL CMA PRINT NODRTX /PRESS CR TO CONTINUE CLA CLL CMA KBDCHK /WAIT FOR KEYBOARD RESPONSE CRLF JMP XSTRT1 /TRY AGAIN EJECT /READ 4K WORDS (16 SECTORS) FROM DISK XRDRK, 0 XRDRK1, TAD (-20 /SECTOR COUNT DCA BLOCKS TAD INBUF /ONLY ONE INPUT BUFFER DLCA /LOAD MEMORY ADDRESS DCA DATALL /SET DATA/ALL SWITCH TO DATA XRDRK2, TAD RKCOM /READ COMMAND, NO-INT,F0 TAD DRIVE /FROM SELECTED DRIVE TAD FIELDN /SET THIS FIELD TAD HIGH /PART OF DISK ADDRESS TAD DATALL /SELECT 'READ DATA' OR 'ALL' DLDC /LOAD COMMAND REG TAD SECTOR /REMAINDER OF DISK ADDRESS DLAG /EXECUTE DSKP /WAIT HERE TILL DONE JMP .-1 DRST /AND TEST FOR ERRORS CLL RAL /GET RID OF DONE BIT SZA CLA JMP DKERR /FLAG SET, SO ERROR RETRY /READ WAS SUCCESSFUL - TRY FOR 16 IN A ROW TAD (1000 /SWITCH TO 'READ ALL' DCA DATALL ISZ SECTOR SKP ISZ HIGH ISZ BLOCKS /DONE ALL 16? JMP XRDRK2 /NO--REPEAT LOOP /16 SECTORS (4K) READ INTO INBUF CLA CLL CMA RTL /AC = -3 FOR ERROR COUNT DCA ERRCT1 CMA CLL RAL /ALSO RESET RECLA COUNTER DCA ERRCT2 JMP I XRDRK /EXIT /DISK ERROR--TRY REREAD, THEN RECALIBRATE DKERR, ISZ ERRCT1 /TRIED BEFORE? JMP RESET1 /NO, PROCEED ISZ ERRCT2 /ALREADY RECALIBRATED? JMP RECAL1 /NO, TRY IT ONCE PRINT DSKBAD /FATAL DISK ERROR ABORT RECAL1, CLL CMA RAL /ALLOW 1 RETRY AFTER RECAL DCA ERRCT1 JMS DRECAL RESET1, TAD SECTOR AND (7760 /RESET FOR 16 BLOCKS DCA SECTOR JMP XRDRK1 /TRY ALL OVER DATALL, 0 BLOCKS, -20 RKCOM, 0 /RECALIBRATE DRIVE (SEND HEADS TO 00000) DRECAL, 0 CLA CLL DCLR CLA CLL STL RTL /SET RECAL BIT DCLR DSKP JMP .-1 TAD (0200 /ENABLE DONE BIT TAD DRIVE DLDC /LOAD THIS COMMAND DSKP /NOW WAIT FOR COMPLETION JMP .-1 JMP I DRECAL INBUF, 0 /START OF INPUT BUFFER ERRCT1, -3 /REREAD TRY COUNTER ERRCT2, -2 /RECAL TRY COUNTER PAGE /COMPARE 2 4K FIELDS, ABORT IF ANY DIFFERENCES XCOMP, 0 CLA CLL CMA /-1 FOR INDIRECT DCA AUTO10 CLA CLL CMA DCA AUTO11 DCA COMCTR /ZERO COMPARE COUNTER KBDCHK XCLOOP, CDF 20 /DRIVE 1 FIELD TAD I AUTO10 /GET NEXT WORD CIA CDF 30 /DRIVE 2 FIELD TAD I AUTO11 /AND COMPARE SZA CLA /SHOULD COME OUT ZERO JMP XCBAD /BAD DATA! XCSKP, ISZ COMCTR /DATA OK--MORE TO GO? JMP XCLOOP /YES--GO TO IT CDF 0 /FINISHED THIS 4K JMP I XCOMP COMCTR, 0 XCBAD, CDF 00 KBDCHK CLA CLL CMA /INHIBIT CRLF PRINT TXBAD /COMPARE ERROR, SECTOR... TAD HIGH /GET HIGH ORDER ADDRESS BIT TAD (260 /MAKE IT ASCII TYPE /AND PRINT IT TAD AUTO10 /GET ERROR ADDRESS AND (7400 /ONLY WANT BLOCK ADDR CLL RTR BSW /PUT IT IN LOW ORDER MQL TAD SECTOR /LAST DISKAD+1 TAD (-20 /START OF LAST READ MQA /OR IN BLOCK JMS OCTOUT /PRINT IT CRLF TAD AUTO10 /NOW SKIP REST OF BLOCK AND (7400 /TO CONTINUE WITH VERIFY TAD (377 /START OF NEXT BLOCK DCA AUTO10 TAD AUTO10 DCA AUTO11 /MUST COMPARE SAME WORDS TAD AUTO10 DCA COMCTR /ADJUST COMPARE COUNTER JMP XCSKP /CONTINUE /PRINT 4 OCTAL DIGITS (NUMBER IN AC) OCTOUT, 0 MQL /SAVE IT FOR REFERENCE MQA BSW /3-4-1-2 RTR;RAR /X-3-4-1 JMS OCTPR /PRINT DIGIT 1 BSW /3-4-1-2 JMS OCTPR /PRINT DIGIT 2 RTR;RAR /X-1-2-3 JMS OCTPR /PRINT DIGIT 3 JMS OCTPR /PRINT DIGIT 4 CLA CLL JMP I OCTOUT OCTPR, 0 AND (7 TAD (260 /MAKE IT ASCII TYPE /AND PRINT MQA /RECALL FOR NEXT TIME JMP I OCTPR PAGE /CONSOLE I/O ROUTINES /PRINTER FOR 6BIT ASCII STRINGS-- IF AC IS -1 ON ENTRY, /INHIBITS TERMINAL CRLF. STRING ADDRESS IS AT CALL+1 /RETURNS TO CALL+2 / XPRINT, 0 DCA CRSWTC /SET CRLF INHIBIT CLA CLL CMA /NEED ADDRESS-1 TAD I XPRINT /GET STRING ADDRESS DCA AUTO11 ISZ XPRINT XPRNXT, TAD I AUTO11 SNA /LIST TERMINATED WITH 0 JMP XPRXIT /SO (CRLF AND) EXIT MQL MQA BSW /GET FIRST BYTE JMS X8BIT /CONVERT 6BIT TO ASCII MQA JMS X8BIT /AND SAME WITH SECOND BYTE JMP XPRNXT /AND TRY TO REPEAT CYCLE XPRXIT, ISZ CRSWTC /TEST FOR CRLF INHIBIT JMS XCRLF /NO--DO IT JMP I XPRINT / X8BIT, 0 AND (77 /CLEAR TO SINGLE BYTE SNA /TEST FOR NULL JMP I X8BIT /DON'T PRINT @-SIGN TAD (40 AND (77 TAD (240 /MAKE INTO ASCII JMS XTYPE /AND PRINT IT JMP I X8BIT / XTYPE, 0 SNA /DON'T PRINT NULL JMP I XTYPE TLS TSF JMP .-1 /WAIT FOR DONE CLA CLL JMP I XTYPE / XCRLF, 0 CLA CLL TAD KCR JMS XTYPE TAD KLF JMS XTYPE JMP I XCRLF KCR, 215 KLF, 212 CRSWTC, 0 EJECT /KBDCHK--LOOK AT KBD, TEST FOR CTRL/C, GET CHAR IF /ANY. IF AC =-1 ON ENTRY, WAIT FOR A CHARACTER. / XKBDCH, 0 DCA KBDFLG TAD KBDFLG SNA CLA JMP LISTEN /NO WAIT, JUST TEST BUFFER TAD ("> /GET SIGNATURE JMS XTYPE LISTEN, KSF /ANYTHING TYPED? JMP WTTEST /NO--MUST WE WAIT? KRB /READ CHAR, CLEAR FLAG MQL MQA TAD MCTRLZ /DO WE GIVE UP? SNA JMP OS8BAK /YES--CRLF AND EXIT TO MON TAD MCR /WAS IT CR? SNA CLA JMP CREXIT /YES, ECHO A CRLF MQA JMS XTYPE /JUST ECHO THE CHAR RTCHAR, MQA ISZ KBDFLG /DO WE RETURN A CHARACTER? CLA CLL /NO--CLEAR IT JMP I XKBDCH /AND RETURN WTTEST, CLA CLL TAD KBDFLG /ARE WE WAITING? SNA CLA JMP I XKBDCH /NO--JUST RETURN JMP LISTEN /YES--LISTEN SOME MORE CREXIT, JMS XCRLF /ECHO A CR,LF TAD (240 /RETURN A SPACE MQL JMP RTCHAR OS8BAK, JMS XCRLF JMP I .+1 OS8MON MCTRLZ, -203 MCR, -12 KBDFLG, 0 EJECT /OCTIN--GET AN OCTAL DIGIT, RETURN -1 IF WAS SPACE XOCTIN, 0 XOCT1, CLA CLL CMA /TELL KBDCHK TO WAIT KBDCHK MQL MQA TAD (-240 /TEST FOR SPACE SNA CLA JMP SPCRTN /YES--RETUN -1 MQA TAD (-260 /SUBTRACT ASCII MQL MQA SPA /IF MINUS, WASN'T A DIGIT JMP BDCHAR /SO TRY AGAIN AND (7770 /GOTTA BE OCTAL SZA JMP BDCHAR MQA JMP I XOCTIN /RETURN OCTAL DIGIT SPCRTN, CLA CMA CLL JMP I XOCTIN BDCHAR, CRLF CLA CLL CMA PRINT NOTOCT /MUST BE CR OR 0-7 JMP XOCT1 PAGE /TEXT SEGMENTS HEADER, TEXT /RKVER V 1.2/ 0 TXDONE, TEXT /NORMAL TERMINATION./ 0 HALTX, TEXT /ERROR HALT. REGISTERS FOLLOW HLT./ 0 NODRTX, TEXT /REQUESTED DRIVE NOT AVAILABLE. LOAD IT NOW/ 0 DSKBAD, TEXT /FATAL ERROR ON RK05/ 0 NOTOCT, TEXT /PLEASE ENTER 0-7 OR CR/ 0 DRIVIN, TEXT /ENTER FIRST DRIVE/ 0 DRIVN2, TEXT /ENTER SECOND DRIVE/ 0 TCONT, TEXT /MASH ANY KEY TO PROCEED/ 0 TXBAD, TEXT /COMPARE ERROR, SECTOR ADDRESS / 0