;BLKEDT.LIT ; ; ;4/24/84 STEVEN G. MCNAUGHTON & RICH EAKIN ; QUAKER STATE OIL CORP. RESEARCH CENTER ; ; THIS PROGRAM IS DESIGNED FOR THE AMOS/L SYSTEM. ; ; *********************************************************************** ; * * ; * Format for use is BLKEDT BLOCK * ; * * ; * If no device is enter the users log in device is defaulted. * ; * * ; * The user must be logged into a [1,2] account to run BLKEDT. * ; * * ; * Enter numbers according to the current terminal attributes (either * ; * octal or hex). If Hex is set and the number being entered begins * ; * with a character A thru F; then that number must be proceeded with * ; * a zero (0). * ; * * ; *********************************************************************** ; *********************************************************************** ; * BLOCK EDITOR COMMAND LIST * ; *********************************************************************** ; * * ; * ^T (CNTRL T) - Scroll display to next page * ; * * ; * ^R (CNTRL R) - Scroll display to previous page * ; * * ; * ^H (CNTRL H) - Word outline left one word * ; * Left arrow - " " " " " * ; * * ; * ^L (CNTRL L) - Word outline right one word * ; * Right arrow - " " " " " * ; * * ; * ^J (CNTRL J) - Word outline down one line * ; * Down arrow - " " " " " * ; * * ; * ^K (CNTRL K) - Word outline up one line * ; * Up arrow - " " " " " * ; * * ; * SPACE BAR - Flip between MSB and LSB edit mode. * ; * * ; * #nnn (pound sign) - Input to editor (byte mode is defaulted) * PAGE ; * * ; * #Bnnn - Input a byte to editor (byte mode is defaulted) * ; * * ; * #Wnnnnn - Input a word to editor * ; * * ; * #Lnnnnnnn - Input a long word to editor * ; * * ; * #'x (pound aspostrophe) - Input one ascii byte character * ; * * ; * #[ (pound left bracket) - Input and pack up to 3 ascii characters * ; * * ; * . (period) - follows editor input number to indicate decimal input * ; * * ; * Del Key - Erases editor command line * ; * * ; * Q - Quit (exit editor - does not rewrite updates to disk) * ; * * ; * F - Finished (exit editor - rewrite updated block to disk) * ; * * ; *********************************************************************** ; * Valid RAD 50 Characters * ; * a - z * ; * A - Z * ; * 0 - 9 * ; * . (period) * ; * $ (dollar sign) * ; * % (percent sign) * ; * * ; *********************************************************************** ; *********************************************************************** ; * Program Development and Edit History * ; *********************************************************************** ; 100. - BASIC BLOCK PRINT TO TERMINAL [SGM] ; 101. - UPGRADED PAGE FLIP AND EXIT ROUTINE [SGM] ; 102. - ADDED WORD POSITIONING AND OUTLINING ROUTINE [SGM] ; 103. - ADDED INSTANT TRANSLATION ROUTINE [SGM] ; 104. - UPGRADED INSTANT TRANSLATION TO INCLUDE DECIMAL WORD TRANSLATION ; [SGM] ; 105. - ADDED VERSION AND MODULE LOADING DISPLAY [SGM] ; 106. - ADDED LONGWORD TRANSLATION ROUTINE [SGM] ; 107. - ADDED MSB/LSB OUTLINE FOR EDITING ROUTINE [SGM] ; 108. - ADDED EDIT INPUT ROUTINE [SGM] ; 109. - ADDED WRITE UPDATED BLOCK TO DISK ROUTINE [SGM] ; 110. - REMOVED VERSION AND MODULE LOADING DISPLAY [SGM] ; 111. - UPGRADED LONGWORD EDIT ROUTINE - UPDATES DISPLAY - NO AUTOMATIC LONG- PAGE ; WORD TRANSLATION ROUTINE [SGM] ; 112. - ADDED ROUTINE TO UPDATE RIGHT HAND ASCII DISPLAY UPON EDIT [SGM] ; 113. - HEX VERSUS OCTAL FORMAT DISPLAY UPGRADE [SGM] ; 114. - CORRECTED BLOCK NUMBER RANGE CHECK FOR DEVICES WITH OVER 32K ; BYTES PER DISK [SGM] 5/18/84 ; *********************************************************************** SEARCH SYS SEARCH SYSSYM SEARCH TRM.UNV .OFINI .OFDEF IDDB,D.DDB ;DUMMY FILE DDB .OFSIZ IMPSIZ ; *********************************************************************** ; * * ; * MACRO DEFINITION AREA * ; * * ; *********************************************************************** DEFINE SPACE ARG,ARG2 ;PRINT ARG # OF SPACES, SAVE D1,D2,D3 ; ARG2 # OF TIMES CLR D1 CLR D2 CLR D3 MOVW #ARG2,D3 TSTB D5 BNE 5$$ SUBW #2,D3 TSTW D3 BGE 5$$ MOVW #0,D3 5$$: MOVW #ARG,D2 MOVB #40,D1 10$$: TTY SUBW #1,D2 TSTW D2 BNE 10$$ 20$$: TSTW D3 BEQ 30$$ SUBW #1,D3 TSTW D3 BEQ 30$$ PAGE MOVW #ARG,D2 BR 10$$ 30$$: REST D1,D2,D3 ENDM ; *********************************************************************** ; * * ; * SYMBOL EQUATE AREA * ; * * ; *********************************************************************** WDSPC=4 ;WORD DISPLAY COUNT (6 FOR OCTAL) BTRNC=2 ;TRANSLATION DSP COUNT (3 FOR OCTAL) ARG2=2 ;SPACE LOOP TALLY (0 FOR OCTAL) VMAJOR=1. ;PROGRAM HEADER (VERSION NUMBER) VMINOR=1. VSUB=1. VEDIT=114. VWHO=1. HEADER: PHDR -1,PV$RSM!PV$WSM,PH$REE!PH$REU!PH$L12 TOP: GETIMP IMPSIZ,A5,EXIT ;GET SOME IMPURE SPACE JOBIDX A3 MOVW JOBTYP(A3),D1 ANDW #J.HEX,D1 BEQ OCTPTH ;DEFINE HEX SCREEN FORMAT HEXPTH: MOVB #1,D5 ;QUICK STORAGE FOR DSPFLG BR RESPRG ;DEFINE OCTAL SCREEN FORMAT OCTPTH: MOVB #0,D5 ;QUICK STORAGE FOR DSPFLG RESPRG: MOVW #177435,D1 ;CURSOR OFF TCRT CLRW D1 PAGE CTRLC EXIT LEA A3,PAGENO MOVW #1,(A3) MOV A2,D2 LEA A3,ASCBUF ;A3 POINTS TO ASCII BUFFER SPACE BYP ;BYPASS ANY BLANKS ON COMMAND LINE LIN ;END OF LINE? JEQ CERROR ;YES ! *ERROR* ALL INFO ON COMMAND LINE NUMCHK: CTRLC EXIT NUM ;IS THE FIRST CHAR NUMERIC? JEQ INPBLK ;YES ! GET THE BLOCK NUMBER INLINE: ;NO ! GET THE DEVICE AND DRIVE INFO NOW CTRLC EXIT MOVB (A2)+,(A3)+ ;FIRST BYTE ON COMMAND LINE TO ASCII BUFFER MOVB (A2)+,(A3)+ ;SECOND BYTE ON COMMAND LINE MOVB (A2)+,(A3) ;THIRD BYTE ON COMMAND LINE LEA A3,INDRV ;LOAD THE DRIVE STORAGE AREA MOVB (A2)+,(A3)+ ;FOURTH BYTE ON COMMAND LINE TO DRIVE BYP ;BYPASS ANY BLANKS LIN ;END OF LINE? JEQ CERROR ;*ERROR* WHERE'S THE COLON? MOVB (A2),D1 ;CHECK THE COMMAND LINE FOR A COLON CMPB D1,#': ;IS IT A COLON (END OF DEV AND DRV) JEQ PCKIT ;YES ! GO PACK THE DEVICE NAME MOVB (A2)+,(A3) ;GET FINAL CHARACTER OF DRIVE # MOVB (A2),D1 ;TEST THE NEXT BYTE ON THE COMMAND LINE CMPB D1,#': ;IS IT A COLON? JEQ PCKIT ;YES - GO PACK THE DEV AND DRV ;*ERROR* DEV AND DRV MUST END IN COLON SUB #2,A2 JMP CERROR PCKIT: CTRLC EXIT ADD #1,A2 ;MOVE TO NEXT BYTE ON COMMAND LINE BYP ;BYPASS ANY BLANKS LIN ;END OF LINE? JEQ CERROR ;YES ! - *ERROR* ALL INFO ON COMMAND LINE NUM ;IS THIS CHARACTER NUMERIC? JNE CERROR ;*ERROR* - THIS MUST BE A NUMBER! CLR D1 ;CLEAR OUT ANY JUNK GTOCT ;GET AN OCTAL NUMBER FROM THE COMMAND LINE LEA A3,BLOCK ;STORE THAT OCTAL NUMBER IN THE BLOCK MOVW D1,(A3) ; TO BE SEARCHED AREA GOPCK: CTRLC EXIT PAGE CLR D1 ;CLEAR OUT ANY JUNK LEA A2,ASCBUF ;A2 MUST POINT TO ASCII CHARACTERS LEA A1,INDEV ;PACK AND STORE THE DEVICE NAME PACK ; LEA A2,INDRV ;GET THE INPUTED DRIVE NUMBER GTDEC ;MAKE SURE ITS DECIMAL LEA A2,INDRV ;PUT IT BACK INTO DRIVE # STORAGE MOVW D1,(A2) BR INITDB ; INPBLK: CTRLC EXIT CLR D1 ;GET THE BLOCK - DSK MUST HAVE BEEN GTOCT ;DEFAULTED TO GET HERE! LEA A3,BLOCK ;STORE THE BLOCK NUMBER MOVW D1,(A3) DEFAUL: LEA A3,INDEV ;DEVICE DEFAULT AREA MOVW #0,(A3) ;MOVE A ZERO FOR DEVICE NAME (FOR IDDB) LEA A3,INDRV ;MOVE A -1 FOR DRIVE NUMBER (FOR IDDB) MOVW #-1,(A3) INITDB: ;SET UP AND INIT A DUMMY IDDB CTRLC EXIT MOVW #177400,D1 TCRT CLR D1 MOVB #1,D1 LSLW D1,#10 MOVB #68.,D1 TCRT TYPE CLRW D1 MOVB #1,D1 LSLW D1,#10 MOVB #73.,D1 TCRT LEA A3,PAGENO MOVW (A3),D1 DCVT 2,OT$TRM MOVW #177402,D1 TCRT CLR D1 LEA A2,SCRAT ;LOAD A DUMMY FILESPEC IN MOV A2,D0 MOVW #377,(A2)+ MOVW #377,(A2)+ PAGE MOVW #377,(A2) MOV D0,A2 FSPEC IDDB(A5) ;PROCESS THE FILESPEC (POINTED BY A2) LEA A3,IDDB+D.DEV(A5) ;PUT THE PROPER DEVICE NAME IN LEA A2,INDEV MOVW (A2),(A3) LEA A3,IDDB+D.DRV(A5) ;PUT THE PROPER DRIVE NUMBER IN LEA A2,INDRV MOVW (A2),(A3) INIT IDDB(A5) ;INITIALIZE THE IDDB CTRLC EXIT CLR D1 TYPESP LEA A3,IDDB+D.DEV(A5) ;GET THE IDDB'S DEVICE NAME MOVW (A3),D1 ;MOVE THE PACKED WORD TO D1 TST D1 ;IS IT A ZERO? BNE UNPCK ;NOPE - GO UNPACK THE WORD JOBIDX A3 ;DEFAULT DEVICE - DETERMINE LOG IN LEA A2,JBDEV ; STATUS AND TYPE IT OUT CLR D1 MOVW JOBDEV(A3),D1 ;GET THE PACKED DEVICE NAME LEA A1,SCRAT ; AND UNPACK IT MOVW D1,(A1) LEA A2,ASCBUF UNPACK LEA A2,ASCBUF TTYL (A2) ;PRINT THE DEFAULT DEVICE NAME CLR D1 MOVW JOBDRV(A3),D1 ;GET THE DEFAULT DRIVE NUMBER DCVT 0,OT$TRM ;CONVERT AND TYPE IT TYPE <:> JMP PUTBLK UNPCK: LEA A1,INDEV ;GET AND UNPACK THE DEVICE NAME LEA A2,ASCBUF UNPACK LEA A2,ASCBUF MOVB (A2)+,D1 ;PRINT THE DEVICE NAME TTY MOVB (A2)+,D1 TTY MOVB (A2)+,D1 TTY LEA A2,INDRV ;GET THE DRIVE NUMBER CLR D1 MOVB (A2),D1 DCVT 0,OT$TRM ;CONVERT AND TYPE IT PAGE TYPE <:> CLR D1 PUTBLK: CLR D1 LEA A1,BLOCK ;GET THE BLOCK NUMBER MOVW (A1),D1 OCVT 6,OT$TRM ;CONVERT TO OCTAL AND TYPE IT CRLF CTRLC EXIT GETMFD: CLR D1 MOV IDDB+D.DVR(A5),A3 ;GET THE DISK DRIVER ADDRESS MOV 24(A3),D2 ;GET THE TOTAL NUMBER OF BLOCKS/DISK SUB #1,D2 ;SUB 1 - BLOCK ZERO IS FIRST BLOCK LEA A3,BLOCK ;GET THE INPUTED BLOCK NUMBER MOVW (A3),D1 CMP D1,D2 ;IS THE INPUTED BLOCK LESS THAN BLOCK [114] BLOS GOMFD ; PER DISK? BIGERR: TYPECR CLR D1 ;CLEAR THE OUTPUT REGISTER FOR EXIT JMP EXIT GOMFD: CTRLC EXIT JOBIDX A3 MOV JOBTRM(A3),A0 ORW #3,(A0) ;SET FORCED IMAGE MODE NO ECHO LEA A1,IDDB+D.REC(A5) ;LOAD BLOCK AREA IN DDB MOV D1,(A1) READ IDDB(A5) ;READ THE BLOCK CTRLC EXIT PBLK: CTRLC EXIT MOV IDDB+D.BUF(A5),A1 ;ADDRESS THE READ BUFFER AREA CLR D1 MOVB #3,D1 LSLW D1,#10 MOVB #1,D1 TCRT MOVW #177412,D1 TCRT MOV #0,D0 PAGE MOV #0,D2 MOV D0,D1 PLP: MOV A1,A3 ;SAVE START OF LINE CTRLC EXIT OCVT 3,OT$TRM TYPE <:> SPACE 1,ARG2 PLP1: CLR D1 MOVW (A1)+,D1 TSTB D5 BNE HEX1 OCT1: OCVT ,OT$TRM BR CON1 HEX1: OCVT WDSPC,OT$TRM CON1: SPACE 1,ARG2 ADD #2,D2 CMP D2,#16. CTRLC EXIT BNE PLP1 LEA A2,BYTTRN CLR D1 MOVW #16.,D4 PTRNLP: CTRLC EXIT CLRW D1 MOVB (A3)+,D1 CMPB D1,#41 BLT PUTDOT CMPB D1,#176 BGT PUTDOT BR PBYTTR PUTDOT: MOVB #'.,D1 PBYTTR: MOVB D1,(A2)+ SUBW #1,D4 TST D4 BNE PTRNLP POUTL: CTRLC EXIT CLRW D1 LEA A2,BYTTRN TTYL (A2) PAGE PCRLF: CRLF CMP D0,#496. JEQ WDPRT CMP D0,#360 BNE PPAGE JEQ WDPRT PPAGE: CTRLC EXIT ADD D2,D0 MOV D0,D1 CLR D2 JMP PLP WDPRT: CTRLC EXIT CLR D1 TSTB D5 JNE HEXHED OCTHED: MOVB #20.,D1 LSLW D1,#10 MOVB #6,D1 TCRT TYPECR < Octal Decimal Octal Decimal Ascii RAD 50 Decimal> TYPE < Word # Word # MSB LSB MSB LSB MSB LSB Word> MOVB #3,D1 LSLW D1,#10 MOVB #1,D1 TCRT JMP CINIT HEXHED: MOVB #20.,D1 LSLW D1,#10 MOVB #6,D1 TCRT TYPECR < Hex Decimal Hex Decimal Ascii RAD 50 Decimal> TYPE < Word # Word # MSB LSB MSB LSB MSB LSB Word> MOVB #3,D1 LSLW D1,#10 MOVB #1,D1 TCRT CINIT: PAGE CTRLC EXIT CLR D0 CLR D1 CLR D2 CLR D3 CLR D4 LEA A3,EPAGEN ;SET THE EPAGEN FLAG MOVB #1,(A3) ; ON INIT CPRNT: CTRLC EXIT MOV IDDB+D.BUF(A5),A1 CLR D1 CLR D2 CLR D3 TSTB D5 BNE CHEX1 COCT1: MOVW D0,D3 MOVB #3,D1 LSRW D0,#10 ADDB D0,D1 LSLW D1,#10 MOVW D3,D0 MOVB #,D2 ADDB #5,D2 MOVB D2,D1 CLRW D2 ADDB D0,D1 BR CCON1 CHEX1: MOVW D0,D3 MOVB #3,D1 LSRW D0,#10 ADDB D0,D1 LSLW D1,#10 MOVW D3,D0 MOVB #,D2 ADDB #5,D2 MOVB D2,D1 CLRW D2 ADDB D0,D1 CCON1: TCRT MOV A1,D2 MOV D4,D3 LEA A3,PAGENO MOVW (A3),D1 CMPW D1,#1 BEQ ADOFST PAGE ADD #400,D3 ADOFST: ADD D3,D2 MOV D2,A1 MOVW #177440,D1 TCRT MOVW (A1),D1 TSTB D5 BNE HEX2 OCT2: OCVT ,OT$TRM BR CON2 HEX2: OCVT WDSPC,OT$TRM CON2: MOVW #177441,D1 TCRT CLR D2 WDTRNS: CTRLC EXIT MOVB #22.,D1 LSLW D1,#10 MOVB #10,D1 TCRT MOV D3,D1 OCVT 3,OT$TRM TYPE < > DCVT 3,OT$TRM CLR D1 MOVW (A1),D1 LEA A3,LSB MOVB D1,(A3) LSRW D1,#10 LEA A3,MSB MOVB D1,(A3) TYPE < > TSTB D5 BNE BHEX2 BOCT2: OCVT ,OT$TRM BR BCON2 BHEX2: TYPE < > OCVT BTRNC,OT$TRM BCON2: LEA A3,LSB MOVB (A3),D1 TYPESP TSTB D5 BNE BHEX3 BOCT3: PAGE OCVT ,OT$TRM BR BCON3 BHEX3: TYPE < > OCVT BTRNC,OT$TRM BCON3: TYPE < > LEA A3,MSB MOVB (A3),D1 DCVT 3,OT$TRM TYPE < > LEA A3,LSB MOVB (A3),D1 DCVT 3,OT$TRM TYPE < > LEA A3,MSB MOVB (A3),D1 CMPB D1,#40 BGT UPPCHK MOVB #'.,D1 BR TYPASC UPPCHK: CTRLC EXIT CMPB D1,#176 BLT TYPASC MOVB #'.,D1 TYPASC: TTY TYPE < > LEA A3,LSB MOVB (A3),D1 CMPB D1,#40 BGT UPLCHK MOVB #'.,D1 BR TYPASL UPLCHK: CMPB D1,#176 BLT TYPASL MOVB #'.,D1 TYPASL: TTY TYPE < > UNPKWD: MOV A1,D2 ;SAVE A1 LEA A2,ASCBUF UNPACK MOVB #'[,D1 PAGE TTY LEA A2,ASCBUF MOVB (A2)+,D1 TTY MOVB (A2)+,D1 TTY MOVB (A2)+,D1 TTY MOVB #'],D1 TTY MOV D2,A1 TYPE < > MOVW (A1),D1 DCVT 5,OT$TRM CLRW D1 LEA A3,EPAGEN MOVB (A3),D1 TSTB D1 CTRLC EXIT BEQ QUEST MOVW #177441,D2 MOVW #177441,D3 CALL MSBTYP MOVW #177440,D2 MOVW #177441,D3 CALL LSBTYP QUEST: CLR D1 CLR D2 MOVB #23.,D1 LSLW D1,#10 MOVB #1,D1 TCRT MOVW #177412,D1 TCRT CLRW D1 MOVB #'>,D1 TTY LEA A2,SCRAT CTRLC EXIT KBD UCS CMPB D1,#24 ;IS IT A ^T JEQ NXTPG CMPB D1,#22 ;IS IT A ^R JEQ PRVPG CMPB D1,#'Q ;IS IT A "Q" (QUIT NO UPDATE) PAGE JEQ EXIT CMPB D1,#'F ;IS IT A "F" (FINISH AND UPDATE) JEQ WRTBLK CMPB D1,#14 ;IS IT A -> JEQ ADDLSB CMPB D1,#10 ;<- JEQ SUBLSB CMPB D1,#13 ;^ JEQ SUBMSB CMPB D1,#12 ;v JEQ ADDMSB CMPB D1,#'L ;IS IT A "L" (LONG WORD DISPLAY) JEQ LWDDSP CMPB D1,#35. ;IS IT A POUND SIGN JEQ EDTINP CMPB D1,#40 JEQ MTOLSB CTRLC EXIT JMP QUEST EDTINP: TTY ;TYPE THE # EDTLP: KBD CTRLC EXIT CMPB D1,#15 BEQ TTYGO CMPB D1,#40 BLT EDTLP CMPB D1,#40 ;IS IT A SPACE BNE TTYIT TYPE BR TTYGO TTYIT: TTY TTYGO: CMPB D1,#177 ;DEL? JEQ QUEST MOVB D1,(A2)+ ADDB #1,D2 CMPB D1,#15 BNE EDTLP GOTEDT: LEA A2,SCRAT NUM JNE ASPCHK DECCHK: SUBB #2,D2 ADD D2,A2 MOVB (A2),D1 CMPB D1,#'. PAGE BNE GETOCT GETDEC: LEA A2,SCRAT DNUMCK: NUM BEQ DBYTE ADD #1,A2 BR DNUMCK DBYTE: GTDEC JMP PUTINB GETOCT: LEA A2,SCRAT ONUMCK: NUM BEQ OBYTE ADD #1,A2 BR ONUMCK OBYTE: GTOCT JMP PUTINB ASPCHK: MOVB (A2),D1 CMPB D1,#39. BNE LENCHK MOVB 1(A2),D1 JMP PUTINB LENCHK: CTRLC EXIT CMPB D1,#'B JEQ DECCHK CMPB D1,#'W JEQ WORDED CMPB D1,#'L JEQ LWRDED CMPB D1,#'[ JEQ RADEDT MOVB #24.,D1 LSLW D1,#10 MOVB #5,D1 TCRT TYPE MOVB #23.,D1 LSLW D1,#10 MOVB #3,D1 TCRT MOVW #177440,D1 TCRT TYPE < Any key to continue > MOVW #177441,D1 PAGE TCRT KBD CLR D1 JMP QUEST RADEDT: CTRLC EXIT ADD #1,A2 LEA A1,PACBUF PACK LEA A1,PACBUF MOVW (A1),D1 JMP PUTINW WORDED: CTRLC EXIT LEA A2,SCRAT SUBB #2,D2 ADD D2,A2 MOVB (A2),D1 CMPB D1,#'. BNE WDGOCT WDGDEC: LEA A2,SCRAT ADD #1,A2 GTDEC JMP PUTINW WDGOCT: LEA A2,SCRAT ADD #1,A2 GTOCT JMP PUTINW LWRDED: CTRLC EXIT LEA A2,SCRAT SUBB #2,D2 ADD D2,A2 MOVB (A2),D1 CMPB D1,#'. BNE LWDOCT LWDDEC: LEA A2,SCRAT ADD #1,A2 GTDEC JMI SIZERR JMP PUTINL PAGE LWDOCT: LEA A2,SCRAT ADD #1,A2 GTOCT JMI SIZERR JMP PUTINL PUTINB: CTRLC EXIT MOVW D1,D2 ANDW #177400,D2 ;ANYTHING IN HIGH ORDER BYTE? JNE SIZERR MOV IDDB+D.BUF(A5),D3 LEA A3,PAGENO MOVW (A3),D2 CMPW D2,#1 BEQ POSBYT ADD #400,D3 POSBYT: ADD D4,D3 LEA A3,EPAGEN CLRW D2 MOVB (A3),D2 TSTB D2 BEQ ADRBYT ADD #1,D3 ADRBYT: MOV D3,A3 TSTB D5 JNE HCLZER OCLZER: MOVB D1,(A3) CLRW D1 MOVB D0,D1 CMPB D1,#0 BEQ COLZRO DIV D1,#7 AND #177777,D1 MUL D1,#2 COLZRO: CLR D2 MOVB D1,D2 MOVW D0,D1 LSRW D1,#10 ADDB #3,D1 LSLW D1,#10 ADDB D2,D1 JMP COLCON HCLZER: MOVB D1,(A3) CLRW D1 MOVB D0,D1 PAGE CMPB D1,#0 BEQ COLZRH DIV D1,#6 AND #177777,D1 MUL D1,#2 COLZRH: CLR D2 MOVB D1,D2 MOVW D0,D1 LSRW D1,#10 ADDB #3,D1 LSLW D1,#10 ADDB D2,D1 COLCON: TSTB D5 BNE BYHEX1 BYOCT1: ADDB #62.,D1 BR BYCON1 BYHEX1: ADDB #55.,D1 BYCON1: LEA A0,EPAGEN CLRW D2 MOVB (A0),D2 TSTB D2 BEQ TYPEBY ADDB #1,D1 TYPEBY: TCRT CLRW D1 MOVB (A3),D1 TIPIT: CMPB D1,#40 BGT BDSPBY MOVB #'.,D1 BR TYPBDB BDSPBY: CTRLC EXIT CMPB D1,#176 BLT TYPBDB MOVB #'.,D1 TYPBDB: TTY CLRW D1 JMP CPRNT PUTINW: CTRLC EXIT MOV D1,D2 SWAP D2 ANDW #177777,D2 JNE SIZERR PAGE CLR D2 MOV IDDB+D.BUF(A5),D3 LEA A3,PAGENO MOVW (A3),D2 CMPW D2,#1 BEQ POSWRD ADD #400,D3 POSWRD: ADD D4,D3 LEA A3,EPAGEN CLRW D2 MOVB (A3),D2 TSTB D2 JEQ ADRWRD WDERR: MOVB #24.,D1 LSLW D1,#10 MOVB #5,D1 TCRT TYPE MOVB #23.,D1 LSLW D1,#10 MOVB #3,D1 TCRT MOVW #177440,D1 TCRT TYPE < Any key to continue > MOVW #177441,D1 TCRT KBD CLR D1 JMP QUEST ADRWRD: MOV D3,A3 MOVW D1,(A3) CLRW D1 MOVB D0,D1 CMPB D1,#0 BEQ CWDZER TSTB D5 BNE HDIVW ODIVW: DIV D1,#7 AND #177777,D1 MUL D1,#2 BR CWDZER HDIVW: DIV D1,#6 AND #177777,D1 PAGE MUL D1,#2 CWDZER: CLR D2 MOVB D1,D2 MOVW D0,D1 LSRW D1,#10 ADDB #3,D1 LSLW D1,#10 ADDB D2,D1 TSTB D5 BNE WHEX1 WOCT1: ADDB #62.,D1 BR WCON1 WHEX1: ADDB #55.,D1 WCON1: TCRT CLRW D1 MOVB (A3),D1 CLRW D2 MOVW #1,D2 WDDSPL: CMPB D1,#40 BGT BDSPWD MOVB #'.,D1 BR TYPBDW BDSPWD: CTRLC EXIT CMPB D1,#176 BLT TYPBDW MOVB #'.,D1 TYPBDW: TTY CLRW D1 TSTW D2 JEQ CPRNT SUBW #1,D2 MOVB 1(A3),D1 BR WDDSPL PUTINL: CLR D2 CTRLC EXIT MOV IDDB+D.BUF(A5),D3 LEA A3,PAGENO MOVW (A3),D2 CMPW D2,#1 BNE ONPGE2 MOV D4,D2 BR POSLWD PAGE ONPGE2: MOV D4,D2 ADD #400,D2 CMP D2,#510. BGE LWDERR POSLWD: ADD D2,D3 CLR D2 LEA A3,EPAGEN MOVB (A3),D2 TSTB D2 BEQ ADRLWD LWDERR: MOVB #24.,D1 LSLW D1,#10 MOVB #5,D1 TCRT TYPE MOVB #23.,D1 LSLW D1,#10 MOVB #3,D1 TCRT MOVW #177440,D1 TCRT TYPE < Any key to continue > MOVW #177441,D1 TCRT KBD CLR D1 JMP QUEST ADRLWD: MOV D3,A3 MOV D1,(A3) CLR D1 MOVB D0,D1 CMPB D1,#0 BEQ CLWZER TSTB D5 BNE HDIVL1 ODIVL1: DIV D1,#7 AND #177777,D1 MUL D1,#2 BR CLWZER HDIVL1: DIV D1,#6 AND #177777,D1 PAGE MUL D1,#2 CLWZER: CLR D2 MOVB D1,D2 MOVW D0,D1 LSRW D1,#10 ADDB #3,D1 LSLW D1,#10 ADDB D2,D1 TSTB D5 BNE LHEX1 LOCT1: ADDB #62.,D1 BR LCON1 LHEX1: ADDB #55.,D1 LCON1: TCRT CLRW D1 MOVB (A3),D1 CLRW D2 MOVW #1,D2 LWDSP1: CMPB D1,#40 BGT BDSPLW MOVB #'.,D1 BR TYPBDL BDSPLW: CTRLC EXIT CMPB D1,#176 BLT TYPBDL MOVB #'.,D1 TYPBDL: TTY CLRW D1 TSTW D2 BEQ LWNXTP SUBW #1,D2 MOVB 1(A3),D1 BR LWDSP1 LWNXTP: CMP D4,#376 JEQ CPRNT MOVW D0,D1 TSTB D5 BNE HPTHL OPTHL: CMPB D1,#49. PAGE BNE LWCLOK LSRW D1,#10 CMPB D1,#15. BNE LCLONE CLRW D1 JMP CPRNT HPTHL: CMPB D1,#42. BNE LWCLOK LSRW D1,#10 CMPB D1,#15. BNE LCLONE CLRW D1 JMP CPRNT LCLONE: ADDB #1,D1 LSLW D1,#10 MOVB #0,D1 BR LWPOST LWCLOK: TSTB D5 BNE HPTHL2 OPTHL2: ADDB #7,D1 BR LWPOST HPTHL2: ADDB #6,D1 LWPOST: SAVE D0,D4 ADD #2,D4 CLRW D0 MOVW D1,D0 CALL NORPT MOV A1,A3 CLR D1 CLRW D0 REST D0,D4 MOVB D0,D1 CMPB D1,#0 BEQ CLWZR1 TSTB D5 BNE HDIVL2 ODIVL2: DIV D1,#7 AND #177777,D1 MUL D1,#2 PAGE BR CLWZR1 HDIVL2: DIV D1,#6 AND #177777,D1 MUL D1,#2 CLWZR1: ADDB #2,D1 CLR D2 MOVB D1,D2 MOVW D0,D1 LSRW D1,#10 ADDB #3,D1 LSLW D1,#10 ADDB D2,D1 TSTB D5 BNE LHEX2 LOCT2: ADDB #62.,D1 BR LCON2 LHEX2: ADDB #55.,D1 LCON2: TSTB D5 BNE HLCON2 OLCON2: CMPB D1,#77. JLE TYLWIN CLR D2 MOVB #62.,D2 LSRW D1,#10 ADDB #1,D1 CMPB D1,#15. JGT CPRNT LSLW D1,#10 MOVB D2,D1 JMP TYLWIN HLCON2: CMPB D1,#70. JLE TYLWIN CLR D2 MOVB #55.,D2 LSRW D1,#10 ADDB #1,D1 CMPB D1,#15. JGT CPRNT LSLW D1,#10 MOVB D2,D1 TYLWIN: TCRT PAGE CLRW D1 MOVB (A3),D1 CLRW D2 MOVW #1,D2 LWDSP2: CMPB D1,#40 BGT BDSPL2 MOVB #'.,D1 BR TYPBD2 BDSPL2: CTRLC EXIT CMPB D1,#176 BLT TYPBD2 MOVB #'.,D1 TYPBD2: TTY CLRW D1 TSTW D2 BEQ LWDDUN SUBW #1,D2 MOVB 1(A3),D1 BR LWDSP2 LWDDUN: CLRW D1 CLRW D2 CLR D3 JMP CPRNT SIZERR: MOVB #24.,D1 LSLW D1,#10 MOVB #5,D1 TCRT TYPE MOVB #23.,D1 LSLW D1,#10 MOVB #3,D1 TCRT MOVW #177440,D1 TCRT TYPE < Any key to continue > MOVW #177441,D1 TCRT KBD CLR D1 JMP QUEST PAGE MTOLSB: CTRLC EXIT CLR D1 LEA A3,EPAGEN MOVB (A3),D1 CLR D2 CLR D3 MOVW #177441,D2 MOVW #177441,D3 CMPB D1,#0 BNE LSBGET CALL LSBTYP MOVW #177440,D2 MOVW #177441,D3 CALL MSBTYP JMP QUEST LSBGET: CALL MSBTYP MOVW #177440,D2 MOVW #177441,D3 CALL LSBTYP JMP QUEST LSBTYP: CTRLC EXIT MOVB #0,(A3) MOVB #21.,D1 LSLW D1,#10 MOVB #28.,D1 TCRT MOVW D2,D1 TCRT TYPE MOVW D3,D1 TCRT MOVB #21.,D1 LSLW D1,#10 MOVB #39.,D1 TCRT MOVW D2,D1 TCRT TYPE MOVW D3,D1 TCRT MOVB #21.,D1 LSLW D1,#10 MOVB #50.,D1 TCRT PAGE MOVW D2,D1 TCRT TYPE MOVW D3,D1 TCRT RTN MSBTYP: CTRLC EXIT MOVB #1,(A3) MOVB #21.,D1 LSLW D1,#10 MOVB #24.,D1 TCRT MOVW D2,D1 TCRT TYPE MOVW D3,D1 TCRT MOVB #21.,D1 LSLW D1,#10 MOVB #34.,D1 TCRT MOVW D2,D1 TCRT TYPE MOVW D3,D1 TCRT MOVB #21.,D1 LSLW D1,#10 MOVB #45.,D1 TCRT MOVW D2,D1 TCRT TYPE MOVW D3,D1 TCRT RTN PUTITN: CTRLC EXIT MOV IDDB+D.BUF(A5),D2 MOV D4,D3 LEA A3,PAGENO MOVW (A3),D1 CMPW D1,#1 BEQ ADOFED PAGE ADD #400,D3 ADOFED: ADD D3,D2 MOV D2,A1 LWDDSP: CTRLC EXIT MOV IDDB+D.BUF(A5),D2 MOV D4,D3 LEA A3,PAGENO MOVW (A3),D1 CMPW D1,#1 BEQ ADOFLW ADD #400,D3 ADOFLW: ADD D3,D2 MOV D2,A1 MOVB #24.,D1 LSLW D1,#10 MOVB #5,D1 TCRT CMP D3,#510. BEQ BNDERR TSTB D5 BNE TYPHXL TYPOCL: TYPESP BR TYPCN1 TYPHXL: TYPESP < Hex Longword> TYPCN1: MOV (A1),D1 OCVT 11.,OT$TRM TYPE < > TYPESP DCVT 11.,OT$TRM CLR D1 BR TCMD BNDERR: TYPE TCMD: MOVB #23.,D1 LSLW D1,#10 MOVB #3,D1 TCRT MOVW #177440,D1 TCRT TYPESP < Any key to continue> MOVW #177441,D1 TCRT PAGE CTRLC EXIT KBD CTRLC EXIT CLR D2 JMP CPRNT ADDLSB: CTRLC EXIT CALL NORPT TSTB D5 BNE HPTHA OPTHA: CMPB D0,#49. BNE COLOKA BR CPTHA HPTHA: CMPB D0,#42. BNE COLOKA CPTHA: MOVB #0,D0 SUB #14.,D4 JMP CPRNT COLOKA: TSTB D5 BNE ALHEX1 ALOCT1: ADDB #7,D0 BR ALCON1 ALHEX1: ADDB #6,D0 ALCON1: ADD #2,D4 JMP CPRNT SUBLSB: CTRLC EXIT CALL NORPT CMPB D0,#0 BNE COLOKS TSTB D5 BNE HPTHS OPTHS: MOVB #49.,D0 ADD #14.,D4 JMP CPRNT HPTHS: MOVB #42.,D0 ADD #14.,D4 JMP CPRNT PAGE COLOKS: TSTB D5 BNE SLHEX1 SLOCT1: SUBB #7,D0 BR SLCON1 SLHEX1: SUBB #6,D0 SLCON1: SUB #2,D4 JMP CPRNT ADDMSB: CTRLC EXIT CALL NORPT CLR D2 MOVW D0,D2 LSRW D0,#10 CMPB D0,#15. BNE ROWOKA MOVB #0,D0 SUB #240.,D4 LSLW D0,#10 MOVB D2,D0 JMP CPRNT ROWOKA: ADDB #1,D0 LSLW D0,#10 MOVB D2,D0 ADD #20,D4 JMP CPRNT SUBMSB: CTRLC EXIT CALL NORPT CLR D2 MOVW D0,D2 LSRW D0,#10 CMPB D0,#0 BNE ROWOKS MOVB #15.,D0 ADD #240.,D4 LSLW D0,#10 MOVB D2,D0 JMP CPRNT ROWOKS: SUBB #1,D0 PAGE LSLW D0,#10 MOVB D2,D0 SUB #20,D4 JMP CPRNT NORPT: CTRLC EXIT MOV IDDB+D.BUF(A5),A1 CLR D1 CLR D2 CLR D3 TSTB D5 BNE NHEX1 NOCT1: MOVW D0,D3 MOVB #3,D1 LSRW D0,#10 ADDB D0,D1 LSLW D1,#10 MOVW D3,D0 MOVB #,D2 ADDB #5,D2 MOVB D2,D1 CLRW D2 ADDB D0,D1 BR NCON1 NHEX1: MOVW D0,D3 MOVB #3,D1 LSRW D0,#10 ADDB D0,D1 LSLW D1,#10 MOVW D3,D0 MOVB #,D2 ADDB #5,D2 MOVB D2,D1 CLRW D2 ADDB D0,D1 NCON1: TCRT MOV A1,D2 MOV D4,D3 LEA A3,PAGENO MOVW (A3),D1 CMPW D1,#1 BEQ ADOFNP ADD #400,D3 ADOFNP: ADD D3,D2 MOV D2,A1 MOVW #177441,D1 PAGE TCRT MOVW (A1),D1 TSTB D5 BNE HEX3 OCT3: OCVT ,OT$TRM BR CON3 HEX3: OCVT WDSPC,OT$TRM CON3: MOVW #177441,D1 TCRT CLR D2 RTN PRVPG: CTRLC EXIT CLR D1 LEA A3,PAGENO MOVW (A3),D1 CMPW D1,#1 JEQ QUEST SUBW #1,(A3) CTRLC EXIT CLR D1 MOVB #1,D1 LSLW D1,#10 MOVB #73.,D1 TCRT TYPESP < > TCRT ;D1 ALREADY HAS THE POSIT CLR D1 MOVW (A3),D1 DCVT 2,OT$TRM CLRW D1 MOVB #3,D1 LSLW D1,#10 MOVB #1,D1 TCRT MOVW #177412,D1 TCRT CLRW D1 PRVDO: CTRLC EXIT CLR D2 CLR D0 CLR D1 MOV IDDB+D.BUF(A5),A1 JMP PLP PAGE NXTPG: CLR D1 LEA A3,PAGENO MOVW (A3),D1 CMPW D1,#2 JEQ QUEST CTRLC EXIT ADDW #1,(A3) MOVB #1,D1 LSLW D1,#10 MOVB #73.,D1 TCRT TYPESP < > TCRT ;D1 ALREADY HAS THE POSIT CLR D1 MOVW (A3),D1 DCVT 2,OT$TRM CLRW D1 MOVB #3,D1 LSLW D1,#10 MOVB #1,D1 TCRT MOVW #177412,D1 TCRT CLRW D1 NEXDO: CTRLC EXIT CLR D2 MOV #400,D0 MOV IDDB+D.BUF(A5),D1 ADD #400,D1 MOV D1,A1 MOV D0,D1 JMP PLP WRTBLK: WRITE IDDB(A5) JMP EXIT BLOCK: BLKB 2 ;STORAGE FOR THE INPUT BLOCK NUMBER SCRAT: BLKB 6 ;SCRATCH AREA JBDEV: BLKB 2 ;JOB DEVICE STORAGE JBDRV: BLKB 2 ;JOB DRIVE STORAGE PACBUF: BLKB 2 ASCBUF: BLKB 4 ;ASCII BUFFER INDEV: BLKB 6 PAGE INDRV: BLKB 2 PAGENO: BLKB 2 ;PAGE NUMBER BYTTRN: BLKB 17. ;ASCII BYTE INTERPRETATION MSB: BLKB 1 LSB: BLKB 1 EPAGEN: BLKB 1 DSPFLG: BLKB 1 EVEN CERROR: CLR D1 MOV A2,D1 SUB D2,D1 MOV D1,D2 ADD #10,D2 CLR D1 ELOOP: TST D2 BEQ PERROR MOVB #40,D1 TTY SUB #1,D2 BR ELOOP PERROR: CLR D1 MOVB #'^,D1 TTY TYPECR CLRW D1 EXIT: TTY ;CARRY FROM Q OR F CRLF MOVW #177434,D1 ;CURSOR ON TCRT EXIT END .