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