diff --git a/src/kshack/cmds.m80 b/src/kshack/cmds.m80 new file mode 100644 index 00000000..806cf3d8 --- /dev/null +++ b/src/kshack/cmds.m80 @@ -0,0 +1,2559 @@ +.SBTTL **** CONSOLE COMMANDS AS IMPLIMENTED **** +.SBTTL *** "EB" CMD *** +;THIS CODE PERFORMS THE "EXAMINE BUS" CONSOLE FUNCTION. +EBCMD: MVI A,01 ;FIRST CLR "R CLK ENB" + OUT BUSCTL ;***** I/O WRT 210/001 ***** + CALL RDATT ;***** I/O RD "0,1,2,3,103" (READ BITS 0-35) ***** + .ADDR EMBUF ;PLACE BITS 0-35 INTO RAM BUFFER AREA "EMBUF" + +;READ THE REST OF THE I/O REGISTERS AND SAVE IN THE RAM + LXI H,RM100 ;GET BEGINNING ADDRESS OF RAM BUFFER AREA + LXI D,IORGS ;D,E WILL POINT TO SOURCE OF REGS TO BE READ + MVI B,8 ;THERE ARE 8 REGISTERS TO BE READ + +EB.RDIN: LDAX D ;FETCH UP FIRST REGISTER TO BE READ + CALL ER.UTL ;CALL ER COMMAND + MOV M,A ;COPY RESULTS OF READ INTO THE RAM SPACE + INX D ;UPDATE SOURCE POINTER + INX H ;UPDATE DESTINATION POINTER + DCR B ;DOWN THE COUNTER + JP EB.RDIN ;CONTINUE LOOP + + XRA A ;CLR ACCUM MUST SET "R CLK ENB" + OUT BUSCTL ;***** I/O WRT 210/0 ***** + + PLINE EBHED ;EB CMD HEADER MSG + CALL DECNET ;PRINT THE HEADING + CALL P36. ;GO PRINT IT + PCRLF ;AND A + CALL DECNET ;AND MAKE SURE THIS GETS SENT + LXI H,IORGS ;"H,L" NOW PNTS TO LIST OF I/O REGISTER NAMES + LXI D,RM100 ;"D,E" NOW PNTS TO CORRESPONDING LIST OF DATA FOR I/O REG + MVI B,8 ;ACCUM NOW CONTAINS A COUNT OF 8 (FOR 8 I/O REGS) + +EB1: CALL P8BIT ;PRINT FIRST REG NAME + INX H ;BUMP TO NEXT + PSLASH ;PRINT "1" + XCHG ;SWAP SO "H,L" POINTS TO DATA + + CALL P8BIT ;PRINT DATA FOR THAT REG + INX H ;BUMP TO NEXT + XCHG ;SWAP BACK-"H,L" POINTS TO NAME AGAIN + PSPACE ;SPACE OVER + DCR B ;DOWN COUNT + JNZ EB1 ;CONTINUE TILL DONE ALL EIGHT REGS + PCRLF + CALL DECNET ;AND FINALLY MAKE SURE LAST THING GETS SENT + ENDCMD ;END-OF-COMMAND + +;END THIS CODE WITH A 6 BYTE BUFFER OF THE I/O REGS NAMES, IN BINARY +IORGS: .BYTE ^O100 ;FIRST REG NAME IN BINARY + .BYTE ^O101 ;2ND + .BYTE ^O102 ;3RD + .BYTE ^O103 ;4TH + .BYTE ^O300 ;5TH + .BYTE ^O301 ;6TH + .BYTE ^O302 ;7TH + .BYTE ^O303 ;8TH + + .SBTTL *** "DB" CMD *** +;THIS CODE PERFORMS THE "DEPOSIT BUS" CONSOLE FUNCTION +DBCMD: RUN.. ;IS CPU RUNNING?? + JC DB1 ;SKIP CODE IF AT END OF COMMAND + ARG36 ;IF NOT, GO ASSEMBLE ARG. + .ADDR BUSAD ;AND PUT INTO BUFFER "BUS AD" + +DB1: CALL ADATT ;***** I/O WRT TO R DATA 0-35 DATA REG(ODDS) ***** + .ADDR BUSAD ;BUFFER ADDRESS OF SOURCE OF DATA + + XRA A ;CLR ACCUM SO CAN CLR I/O REG 115 + OUT BUSARB ;***** I/O WRT 115/0 ***** + + MVI A,^O141 ;BITS TO SET "CONSOLE REQ" & "T ENB FOR COM/ADR" + OUT BUSCTL ;***** I/O WRT 210/141 ***** + + BUSRESP ARBRESP ;***** I/O READ 301 ***** + JNZ NOARB ;IF NO ARB RESPONSE WITH "BUS REQ", ABORT + + CALL DBRDIN ;GO READ RESULTS, AND DO A 36-BIT COMPARE + JNZ DBERR ;IF "Z-BIT" NOT SET REPORT MISCOMPARE & ABORT + + ;SECOND HALF OF COMMAND + CALL ADATT ;CLR OUT OLD CRUD + .ADDR MAD000 ;WITH ALL ZEROES + + CALL WDATT ;***** I/O WRT DATA 0-35 ADDR REG(EVENS) ***** + .ADDR BUSAD ;BUFFER ADDRESS OF SOURCE OF DATA + + MVI A,01 ;BITS TO SET "DATA CYCLE" + OUT ^O114 ;***** I/O WRT 114/1 ***** + + MVI A,^O363 ;BITS FOR "CONSOLE REQ", "TENB FOR COM/AD R" + ;"T ENB FOR DATA CYCLE","LATCH DATA SENT" + OUT BUSCTL ;***** I/O WRT 210/363 ***** + + BUSRESP ARBRESP ;***** I/O RD 301 ***** + + JNZ NOARB ;IF NO ARB RESP, ABORT WITH 2ND HALF MESSAGE + + BUSRESP DATACK ;HOW ABOUT DATA ACKNOWLEDGE?? + JZ NOACK ;JUMP IF NONE + + CALL DBRDIN ;GO READ IN RESULTS AND COMPARE RESULT + RZ ;IF Z-BIT, THEN OK TO EXIT + +;ELSE FALL INTO THIS CODE IF A MISCOMPARE + PCHAR DCHR ;PRINT "D" + JMP DBCOM ;AND NOW THE ERR FINISHES UP LIKE THE 1ST HALF + +;COMMON SUBROUTINE TO READ IN THE CONTENTS OF THE KS10 BUS & COMPARE AGAINST +;THE DATA WHICH WAS PUT ONTO THE BUS +DBRDIN: CALL RDATT ;***** I/O RD 0,1,2,3,103 ***** + .ADDR TMPB2 ;PLACE TO PUT RDATA 0-35 + + CALL CMP36 ;CHECK DATA JUST READ VS. DATA SENT + .ADDR BUSAD ;SENT DATA + .ADDR TMPB2 ;RECEIVED DATA + RET ;DONE + ;"DB" COMMAND CODE FOR THE CASES WHERE DATA DEPOSITED ON THE +;BUS IS NOT THE SAME AS THE DATA READ BACK FROM THE BUS.. +;...BY THE WAY..RIGHT NOW THIS IS PRETTY SLOPPY CODE.... +DBERR: PCHAR CCHR ;PRINT A "C" +DBCOM: PLINE MSG10 ;"?C CYC" + + LXI H,BUSAD ;ADDR OF 36-BIT DATA + CALL P36 ;NOW PRINT THAT DATA + + PLINE DRCVD ;"RECEIVED DATA" + + LXI H,TMPB2 ;THIS IS ADDR OF RECEIVED DATA + CALL P36 ;PRINT THAT 36-BIT DATA + PCRLF ;AND CR-LF + LXI H,4 ;PASS ERROR CODE BEFORE EXIT + JMP ERRRTN ;GO FINISH WITH THE ERROR CODE + .SBTTL *** "EM" CMD *** +;THIS IS THE ACTUAL "EM" COMMAND CODE + +EMCMD: JC EM1 ;SKIP CODE IF AT END OF COMMAND + CALL LACMD ;GO FETCH UP AN ADDRESS TO EXAMINE + +EM1: XRA A ;CLEAR ACCUM + STA ENEXT ;AND SET SO "EN " CMD WILL KNOW WHAT TO DO + +EM2: LXI D,MEMAD ;ADDRESS FOR MEMORY LOC. + +EMINT: MVI A,04 ;BIT TO SAY "READ FUNCTION" + +EN2ND: MOV B,A ;SAVE FUNCTION DATA + XCHG ;DATA POINTER TO "H,L" + SHLD AM.AI ;STORE FOR LATER USE BY COMMON CODE + XCHG ;RESTORE "D,E" + CALL ADATP ;***** I/O WRT 103,105,107,111,113 ***** + + MOV A,B ;GET FUNCTION +EM.CRM: OUT A0003 ;***** I/O WRT 113/4 ***** + +;NOW SET "COM/ADR" CYCLE + MVI A,^O04 ;BIT TO SET COM/ADR CYC + OUT BUSARB ;***** I/O WRT 115/4 ***** + +;CHECK IF DOING EI OR EM + LDA EIFLAG ;GET THE EI FLAG + ANA A ;SET CODES, IF .NE. 0, THEN IT IS AN EI CODE + JNZ EMCONT ;AND IF WAS EI, GO DO IT + ;OTHERWISE JUST FALL THRU AND USE THE DM CODES + MVI A,^O343 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" + ;"LATCH DATA SENT"," R CLK DISABLE" +EMCONT: OUT BUSCTL ;***** I/O WRT 210/343 ***** + + XRA A ;CLEAR THE ACCUM + STA EIFLAG ;CLEAR FLAG ON THE WAY OUT + + BUSRESP ARBRESP ;***** I/O RD 301 ***** + JNZ NOARB ;IF GET NO "BUS REQ", ARB FAILED SO ABORT + + BUSRESP NONXMEM ;***** I/O RD 301 ***** + JNZ NIXOM ;JUMP IF NON-EXISTANT MEM FLAG IS SET + +;NOW MUST WAIT FOR "DATA ACKNOWLEDGE" FROM MEMORY + BUSRESP DATACK ;***** I/O RD 301 ***** + JZ NOACK ;JMP IF NO "DATA ACK"(BUS HAS 15 MIC. SEC TO RESP) + ;HERE IF "DATA ACKNOWLEDGE" RECEIVED..GET RESULTS & PRINT + LXI D,EMBUF ;PLACE TO PUT RECEIVED DATA + CALL RDATP ;***** I/O RD 0,1,2,3,103 ***** + + XRA A ;SET ACCUM .EQ. 0 FOR "R CLK ENABLE" + OUT BUSCTL ;***** I/O WRT 210/0 ***** + + LDA NOPNT ;GET THE PRINT FLAG + ANA A ;SET CONDITION CODES + RNZ ;AND DONT WASTE TIME IF NOT PRINTING + + LHLD AM.AI ;GET POINTER TO MEM ADDR JUST EXAMINED + CALL P36 ;PRINT IT + + PSLASH ;PRINT "/" + CALL P36. ;AND PRINT IT + PCRLF ;CR-LF + ENDCMD ;ALL DONE + + .SBTTL *** "EN" CMD *** +;ACTUAL CODE FOR "EN" CMD + +ENEM: CALL INC36 ;ADD 1 TO 36-BIT BUFFER + .ADDR MEMAD ;THIS IS THE BUFFER TO INCREMENT + JMP EM1 ;AND NO GO PROCESS JUST LIKE "EM" CMD + + +.SBTTL *** "EN" CND *** +;EXAMINE NEXT WILL DO THE NEXT, SAME AS THE LAST +ENCMD: LHLD ENEXT ;GET INDEX FOR WHICH EXAMINE IS NEXT + LXI D,ENLST ;GET PNTR TO DISPATCH LIST + DAD D ;AND NOW ADD "WHICH" EXAMINE + MOV E,M ;GET LO ORDER PIECE + INX H ;UPDATE MEM PNTR + MOV D,M ;GET HI ORDER PIECE + XCHG ;PUT THIS NEW ADDR INTO "H,L" + PCHL ;AND TAKE THE DISPATCH + +ENLST: .ADDR ENEM ;DISPATCH FOR EXAM MEM CMD + .ADDR ENEI ;DISPATCH FOR EXAM I/O + .ADDR ENEK ;DISPATCH FOR EXAM KONSOL + .ADDR ENEC ;DISPATCH FOR EXAMINCRAM + .SBTTL *** "DM" CMD *** +;DEPOSIT MEMORY ACTUAL COMMAND CODE +.SBTTL *** "DN" CMD *** +DNDM: CALL INC36 ;INCREMENT MEMORY ADDRESS + .ADDR MEMAD ;HERE IS CURRENT MEMORY ADDRESS +DMCMD: ARG36 ;OTHERWISE, ASSEMBLE THE ARG + .ADDR DMDAT ;PLACE TO PUT ASSEMBLED DATA + +DM1: XRA A ;0 IS THE INDEX FOR MEM NEXT CMDS + STA DNEXT ;SAVE SO "NEXT" COMMAND WILL KNOW WHAT TO DO + +DM2: LXI D,MEMAD ;PNTR TO SM10 MEMORY ADDRESS + +DMINT: MVI A,02 ;BIT TO SAY "WRITE FUNCTION" + +DN2ND: MOV B,A ;SAVE FUNCTION STATUS + CALL ADATP ;***** I/O WRT 103,105,107,111,113 ***** + + MOV A,B ;GET FUNCTION DATA + OUT A0003 ;***** I/O WRT 113 ***** + + MVI A,04 ;BIT INTO ACCUM FOR "COM/ADR CYCLE" + OUT BUSARB ;***** I/O WRT 115/4 ***** + + CALL WDATT ;***** I/O WRT 102,104,106,110,112 ***** + .ADDR DMDAT ;PLACE TO GET DATA FOR DEPOSIT + + MVI A,01 ;BIT INTO ACCUM FOR "DATA CYCLE" + OUT DTARB ;***** I/O WRT 114/1 ***** + +;CHECK TO SEE IF DOING DI OR DM + LDA DIFLAG ;GET THE FLAG + ANA A ;SET THE CONDITION CODES + JNZ DMCONT ;IF .NE. 0, THEN YOU GOT THE CODE FOR A DI + ;OTHERWISE, FALL THRU TO DO A DM +DMGO: MVI A,^O362 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" + ;"T ENB FOR DATA CYCLE"(LATCH DATA SENT PREVENTS FALSE PAR ERR) +DMCONT: OUT BUSCTL ;*****I/O WRT 210/362 ***** + + XRA A ;CLEAR THE ACCUM + STA DIFLAG ;AND CLEAR THE FLAG + + BUSRESP ARBRESP ;***** I/O RD 301 ***** + JNZ NOARB ;IF NO "BUS REQ", ARB FAILED, SO ABORT + +;IF THAT WAS OK, CHECK FOR NON-EXISTANT MEMORY + BUSRESP NONXMEM ;***** I/O RD 301 ***** + JNZ NIXOM ;IF FLAG SAYS NXM, THEN WE JUMP + +;ELSE ALL OK.... + ENDCMD + .SBTTL *** "DN" CMD *** +;ROUTINE WILL DEPOSIT NEXT, JUST AS THE LAST +DNCMD: LHLD DNEXT ;GET CODE FOR WHICH DEPOSIT IS NEXT + LXI D,DNLST ;PNTR TO DISPATCH LIST + DAD D ;ADD GIVES PNTR TO WHICH IS NEXT + + MOV E,M ;LO ORDER PIECE TO REG + INX H ;UPDATE MEM PNTR + MOV D,M ;HI ORDER PIECE TO REG + XCHG ;NOW THE DISPATCH GOES TO "H,L" + PCHL ;AND DISPATCH + +DNLST: .ADDR DNDM ;DISPATCH FOR DEP NEXT TO MEM + .ADDR DNDI ;FOR DEPOSIT NEXT TO I/O + .ADDR DNDK ;FOR DEPOSIT NEXT TO KONSOLE + .ADDR DNDC ;FOR DEPOSIT NEXT CRAM + .SBTTL *** "EI" CMD *** +EICMD: RUN.. ;ILLEGAL COMMAND IF CPU RUNNING + JC EI1 ;SKIP CODE IF AT END OF COMMAND + CALL LICMD ;FETCH UP THE DESIRED I/O ADDRESS + +EI1: MVI A,2 ;DISP CODE FOR EXAMINE NEXT.. + STA ENEXT ;TELL EXAMINE NEXT TO COME HERE + + LXI D,IOAD ;"H,L" GETS PNTR TO ADDR BUFFER + + MVI A,^O143 ;SPECIAL CODE FOR WHEN DOING DI + STA EIFLAG ;PASS IT TO ROUTINE + + MVI A,^O14 ;BITS FOR "I/O FUNC" & "READ FUNC" + JMP EN2ND ;JUMP TO COMMON CODE + + +;EXAMINE I/O ENTRY PNT FOR EXAMINE NEXT SITUATION +ENEI: CALL IO.INC ;GO INCREMENT I/O ADDRESS TWICE + JMP EI1 ;THEN ON TO COMMON CODE + .SBTTL *** "DI" CMD *** +.SBTTL *** "DN" CMD *** +DNDI: CALL IO.INC ;GO INCREMENT THE I/O ADDRESS TWICE +DICMD: ARG36 ;OTHERWISE GO ASSEMBLE THE ARG + .ADDR DMDAT ;AND STORE IT HERE + +DI1: MVI A,02 ;SET WORD THAT SAYS DEP NEXT WILL BE DI + STA DNEXT ;AND SAVE FOR "DN" CMD + + LXI D,IOAD ;PNTR TO ADDRESS DATA TO USE + + MVI A,^O160 ;SET CODE FOR USE BY DI COMMAND + STA DIFLAG ;AND PASS IT TO ROUTINE + + MVI A,^O012 ;BITS TO SAY "I/O FUNC" & "WRITE FUNC" + JMP DN2ND ;AND JUMP TO COMMON CODE + +IO.INC: CALL INC36 ;NOW INCREMENT I/O ADDRESS + .ADDR IOAD ;ITS RIGHT HERE + CALL INC36 ;NOW INCREMENT I/O ADDRESS + .ADDR IOAD ;ITS RIGHT HERE + RET ;AND BACK + .SBTTL *** "EK" CMD *** +;ROUTINE EXAMINES 8080 LOCATIONS +EKCMD: JC EK1 ;IF NOT, NO ARG TO BE ASSEMBLED + +;OTHERWISE, MUST ASSEMBLE ARG + ARG16 ;GO GET 16 BIT ADDR TO EXAMINE + .ADDR C80AD ;AND PUT INTO CURRENT ADDR BUFFER + +EK1: MVI A,04 ;INDEX SAYS EK IS NEXT + STA ENEXT ;SAVE IN THE RAM + + LXI H,C80AD ;GET CURRENT ADDR + CALL P16 ;AND PRINT IT AS IS + + PSLASH ;NOW A "/" + + LHLD C80AD ;GET ADDR JUST PRINTED + MOV A,M ;PASS ARG TO PRINT IN THE ACCUM + JMP P8CRLF ; AND PRINT DATA PLUS CRLF, FOR FREE + + + +.SBTTL *** "EN" CMD *** +ENEK: LHLD C80AD ;GET CURRENT 8080 ADDRESS + INX H ;UPDATE + SHLD C80AD ;PUT IT BACK + JMP EK1 ;COMMON CODE + .SBTTL *** "LA" CMD *** +LACMD: + ARG36 ;OTHERWISE, GET ARG & PUT IN 36-BIT BUFFER + .ADDR MEMAD ;PLACE TO PUT DATA + + ENDCMD ;AND DONE + + +.SBTTL *** "LI" CMD *** +LICMD: ARG36 ;GET ARG AND PUT INTO A TEMP BUFFER + .ADDR IOAD ;THIS TEMP BUFFER + + ENDCMD ;AND DONE + +.SBTTL *** "LK" CMD *** +;ROUTINE SETS CURRENT 8080 ADDRESS INTO RAM.. +;IF USER TRIES TO DEPOSIT PROM, TOO BAD. HE SHOULD KNOW BETTER +LKCMD: ARG16 ;IF OK, GO ASSEMBLE 16 BIT ARG + .ADDR C80AD ;THIS IS A GOOD PLACE TO KEEP IT + + ENDCMD ;AND END + .SBTTL *** "DN" CMD *** +DNDK: LHLD C80AD ;GET 8080 ADDRESS + INX H ;INCREMENT BY 1 + SHLD C80AD ;PUT IT BACK +;FALL INTO THE "DK" COMMAND + +.SBTTL *** "DK" CMD *** +;CODE TO DEPOSIT INTO 8080 RAM.. IF U TRY TO DEPOSIT PROM +;ITS YOUR OWN FAULT +DKCMD: CALL ARG16. ;OK, NOW GO ASSEMBLE 16 BITS OF DATA + + MOV A,L ;GET DATA FROM LOC + LHLD C80AD ;AND CURRENT ADDRESS TO "H,L" + MOV M,A ;WRITE THE 8-BIT DATA + MVI A,04 ;GET CODE THAT SAYS EXAMINE NEXT SHOULD BE "KONSOLE" + STA DNEXT ;AND SAVE IN RAM + + ENDCMD ;ALL DONE + +.SBTTL *** "CP" CMD *** +;COMMAND TO SINGLE PULSE THE SM10 CPU CLK +CPCMD: JC CP1 ;IF NO ARG, ONLY GIVE SINGLE CPU CLK + + CALL ARG16. ;ELSE GET ARG + +;NOW GIVE NUMBER OF CLKS REQUESTED +CPMLT: MOV A,L ;LO ORDER PIECE INTO ACCUM + ORA H ;ADD THE HI ORDER PIECE + RZ ;ALL DONE IF DOWN TO ZERO + + CALL CP1 ;OTHERWISE, GIVE CLOCK + DCX H ;DECREMENT + JMP CPMLT ;AND CONTINUE TILL DONE ALL + +CP1: MVI A,^O010 ;SET BIT FOR "SS MODE" + OUT CRMCTL ;*****I/O WRT 204/010 ***** + MVI A,2 ;SET BIT FOR "SINGLE CLK" + OUT CLKCTL ;***** I/O WRT 206/2 ***** + ENDCMD ;DONE.. + .SBTTL *** "ER" CMD *** +;COMMAND TO EXAMINE ONE OF THE 8080 INTERNAL REGISTER, AND DISPLAY +;THE CONTENTS OF THAT REGISTER. +ERCMD: JC ER1 ;IF NO ARG, GO USE THE ONE ALREADY IN THE RAM + + CALL ARG16. ;ELSE, PICK UP THE ARG THAT WAS TYPED + +;FALL TO HERE IF ARG OK.. + MOV A,L ;GET ACTUAL ARG INTO THE ACCUM + STA ERADDR ;WELL, BEST SAVE THIS THING IN THE RAM +ER1: LDA ERADDR ;COMMON TYPE CODE.. A NO-OP IF ARG WAS TYPED + + PUSH PSW ;NOW SAVE ACCUM PLEASE + CALL P8BITA ;PRINT NAME OF THE 8080 REG THAT IS BEING EXAMINED + PSLASH ;AND SEPARATE FROM ITS CONTENTS WITH A SLASH + + POP PSW ;RESTORE ACCUM PLEASE + CALL ER.UTL ;EXECUTE THE INSTR PAIR FROM THE RAM SPACE + +;BACK HERE AND THE DATA IS IN THE ACCUM + CALL P8CRLF ;PRINT THE RESULTS + RET ;AND DONE + ;ROUTINE TO EXECUTE AN "IN" OR "OUT" FROM THE 8080 RAM SPACE +RAMXCT: SHLD ER.LOC ;THE "IN/OUT" AND THE REG NUMBER INTO RAM SPACE + PUSH PSW ;SAVE ACCUM, IN CASE ROUTINE IS AN "OUT" + MVI A,.RET ;A "RETURN" INTO ACCUM + STA ER.LOC+2 ; AND THEN THE RETURN GETS PUT INTO RAM SPACE + POP PSW ;RESTORE ACCUM, ANYWAY + CALL ER.LOC ;GO EXECUTE THE RAM LOC + CMA ;FIX HARDWARE INVERSION + RET ;BACK TO CALLER + +;ROUTINE ER.UTL.. DOES AN EXAMINE REGISTER, INTERNAL TYPE FORMAT. +;NO PRINTING, JUST THE EXAMINE +;PASS DESIRED I/O REG ADDRESS IN ACCUM. +;ACCUM GETS THE RESULTS OF THE READ. +ER.UTL: PUSH H ;SAVE H,L PAIR + MOV H,A ;NOW, THE NUMBER THAT WAS TYPED IS PUT INTO HI HALF + MVI L,.IN ;AND AN "IN" INSTR GOES LO HALF + + CALL RAMXCT ;NOW ACTUALLY EXECUTE THE CODE TO DO THE READ + POP H ;FIX H,L + RET ;OUT + .SBTTL *** "LR" CMD *** +;COMMAND TO SET INTO THE 8080 RAM, THE I/O REGISTER TO BE EITHER +;DEPOSITED OR EXAMINED +LRCMD: CALL ARG16. ;FETCH IN THE NUMBER TYPED + + MOV A,L ;DESIRED REG TO ACCUM + STA ERADDR ;PUT IN 8080 RAM + RET ;AND OUT + + +.SBTTL *** "DR" CMD *** +;COMMAND TO DEPOSIT A NUMBER INTO THE LAST SPECIFIED 8080 I/O REG. +DRCMD: ARG16 + .ADDR T80DT ;TAKE ARG AND PUT INTO RAM SPACE + + MVI L,.OUT ;"L" GETS THE OPERATION TYPE WE WILL PERFORM + LDA ERADDR ;FETCH UP THE CURRENTLY SELECTED I/O REG + MOV H,A ;AND PUT IT INTO THE "H" + LDA T80DT ;NOW THE DATA TO BE WRITTEN GOES TO THE ACCUM + + CALL RAMXCT ;PERFORM THE OPERATION + RET ;THATS ALL + .SBTTL *** "LC" CMD *** +;COMMAND TO LOAD THE 8080 RAM CURRENT CRAM ADDRESS +LCCMD: ARG16 ;OK, ASSEMBLE THE 16 BITS + .ADDR CRMAD ;TEMP PLACE TO KEEP BITS + ENDCMD ;DONE.. + +.SBTTL *** "CE" CMD *** +;COMMAND TO SET CACHE ENABLE ON THE CSL BOARD +; OR PERHAPS CLR CACHE ENABLE IF DESIRED + +CECMD: JC CEDIS ;IF NO ARG, DISPLAY "CACHE ENABLE" + + CALL ARG16. ;MUST ASSEMBLE ARG IF FALL THRU + + MOV A,L ;ARG TO ACCUM + RAL ;BIT 0 TO 1 + RAL ;BIT TO 2 + RAL ;BIT TO 3 + ANI ^O10 ;OFF ALL BITS BUT THE CACHE BIT + MOV B,A ;SAVE RESULT IN "B" FOR A LITTLE WHILE + LDA PARBT ;GET CURRENT PARITY BIT STATUS + ANI ^O367 ;OFF THE CACHE BIT + +;HERE IS SOME COMMON CODE, USEFUL BY ROUTINES WHICH MUST ADJUST +;THE DATA IN THE PARBT LOCATION +ENACOM: ORA B ;ADD NEW DATA TO DEFAULTED "PARBT" +KS.PAR: STA PARBT ;NOW SAVE THE NEW DEFAULT + OUT RESET ;***** I/O WRT 100/STUFF ***** + ENDCMD ;AND ALL DONE + +;CODE ENTERED WHEN WE WANT TO DISPLAY THE CACHE ENABLE STATUS +CEDIS: LDA PARBT ;GET CURRENT STATUS + ANI ^O10 ;IS THE CACHE BIT SET?? +CHOOSE: JNZ PNT.ON ;HERE IF YES + PLINE OFFMSG ;OFF MESSAGE DEPENDING THINGS + RET +PNT.ON: PCHAR 'O ;PRINTING "ON" A CHAR AT A TIME SAVES 1 BYTE + PCHAR 'N ;OVER PRINTING IT AS A STRING..SPACE IS A LITTLE TIGHT + PCRLF + RET + + .SBTTL *** "TE" CMD *** +;CONSOLE COMMAND TO ENABLE OR DISABLE THE 1 MSEC CLOCK + +TECMD: JC TEDIS ;IF NO ARG, DISPLAY CURRENT STATE + + CALL ARG16. ;OTHERWISE, GO FETCH THE ARG + + MOV A,L ;GET INFO JUST TYPED + RAL ;BIT 0 TO 1 + RAL ;BIT TO 2 + ANI ^O4 ;OFF ALL BUT THE TIME BIT + MOV B,A ;SAVE STUFF IN B + LDA PARBT ;GET CURRENT DEFAULT + ANI ^O373 ;OFF THE 1 MSEC CLOCK SIGNAL + + JMP ENACOM ;GO DO COMMON CODE + +;THIS CODE ENTERED WHEN WE ONLY WANT TO DISPLAY CURRENT STATE OF 1 MSEC CLOCK +TEDIS: LDA PARBT ;WE NEED TO REPORT STATE..GET DEFAULT + ANI ^O4 ;IS THE BIT SET?? + JMP CHOOSE ;GO TO A COMMON PLACE THAT CHOOSES "YES" OR "NO" + +.SBTTL *** "SC" CMD *** +;CODE TO TURN OFF OR ON, THE ABILITY TO RECOVER FROM SOFT CRAM ERRORS +;FLAG AT 0, MEANS TRY AND RECOVER, THEREFORE ITS THE DEFAULT ON +;MACHINE POWER ON... +SCCMD: JC SCDIS ;IF NO ARG TYPED, GO DISPLY STATE OF THE THING + + CALL ARG16. ;ELSE GO GATHER UUP AN ARGUMENT + MOV A,L ;ARG GOES INTO ACCUM + ANA A ;SET 8080 FLAGS + JZ SC.TOFF ;IF ZERO , TURN OFF SC SOFT CRAM RECOVERY + +;FALL THRU IF TURNING ON SCE + XRA A ;ZERO ACCUM + STA SC.OFF ;SO THAT WE CAN SET THE APPROPRIATE FLAG + ENDCMD ;THAT'S IT +SC.TOFF: MVI A,-1 ;WANT TO TURN OFF SCE, NEED -1 TO DO IT + STA SC.OFF ;ZAP + ENDCMD ;AND OUT + +SCDIS: LDA SC.OFF ;GRAB THE FLAG + CMA ;SINCE 0 .EQ. ON, WE MUST INVERT FLAVOR OF FLAG + ANA A ;SET 8080 PROCESSOR FLAGS + JMP CHOOSE ;AND GO PRINT THE RIGHT THING + .SBTTL *** "TP CMD" *** +;CONSOLE COMMAND TO ENABLE OR DISABLE THE TEN STYLE TRAPS +TPCMD: JC TPDIS ;GO DISPLAY CURRENT STATE IF NOTHING TYPED + + CALL ARG16. ;OTHERWISE, GO ASSEMBLE A NUMBER TYPED IN + + MOV A,L ;GET INFO THAT WAS TYPED + RAL ;BIT 0 TO 1 + RAL ;1 TO 2 + RAL ;2 TO 3 + RAL ;3 TO 4 + ANI ^O20 ;OFF ALL BUT TRAP BIT + JMP TP.SET ;JUMP TO PLACE THAT SETS TRAPS, AND SAVES DATA + +;CODE TO DISPLAY CURRENT STATE OF SIGNAL +TPDIS: LDA TRAPEN ;GET CURRENT STATE OF TRAPS BIT + ANI ^O20 ;SET CONDITION CODES + JMP CHOOSE ;AND GO DO IT + .SBTTL *** "LT" CMD *** +;CONSOLE COMMAND TO TURN ON THE LIGHTS ON THE CONSOLE FRONT PANEL +LTCMD: CLRB KLNKSW ;FORCE A FIXING OF THE LIGHTS + MVI A,7 ;LOAD ACCUM WITH A BIT FOR EACH OF THE 3 LIGHTS + OUT LIGHTS ;***** I/O WRT 101/7 ***** + CALL LTDLY ;LEAVE LIGHTS ON FOR ABOUT A SECOND + XRA A ;CLEAR ACCUM + OUT LIGHTS ;***** I/O WRT 101/0 ***** +;FALL INTO CODE THAT WAITS A WHILE WITH THE LIGHTS OFF + +LTDLY: LXI H,300 ;DELAY ABOUT A SECOND AND A HALF +LTLOOP: CALL DELAY. ;GO DO A LITTLE DELAY + .BYTE -1 ;MAX COUNT + + DCX H ;DOWN THE COUNT + MOV A,L ;GET PIECE OF THE COUNT + ORA H ;THROW IN THE REST OF THE COUNT + JNZ LTLOOP ;CONTINUE WAITING + RET ; UNTIL ALL DONE + +.SBTTL *** "MM" CMD *** +;COMMAND TO PUT THE 8080 INTO MANUFACTURING MODE. +;SETS THE STATE FOR THE KLINIK LINE THEN SENDS A COMMUNICATIONS CLEAR +;TO WHATEVER IS AT THE OTHER END OF THE KLINIK LINE +MMCMD: CALL SETM4 ;SET KLINIK LINE TO MODE 4 + MVI A,^O41 ;WE MUST ALWAYS RESET THE MESSAGE NUMBERS + STA LSTMSG ;THIS IS THE "RECEIVE" MESSAGE NUMBER + STA ENVMNO ;AND THIS IS THE "SEND" MESSAGE NUMBER + STA MMFLG ;SAY MANUFACTURING MODE HAS BEEN ENTERED + CALL Z.TBUF ;CLEAR SOME COMMUNICATION DEC10 BUFFERS + JMP DECEX2 ;CLEAR THE MAILING ENVELOPES + ;**USING JMP USES OTHER GUY'S RETURN TO RETURN + + .SBTTL *** "SI" CMD *** +;COMMAND TO CAUSE SM10 TO EXECUTE A SINGLE INSTR. +SICMD: IN RUNFP ;BEFORE CONTINUING,MUST READ MACHINE STATE + ANI 4 ;IS THE RUN FLOP SET(IS IT ALREADY RUNNING??)(TRUE LO) + JZ YSRUN ;IF YES, GO PRINT A MESSAGE TO THAT EFFECT & ABORT CMD + + MVI A,01 ;SET BIT FOR "CONTINUE" + OUT CPUCTL ;***** I/O WRT 212/1 ***** + CALL DNF ;CHECK THAT INSTR FINISHED + JMP PCCOM ;AND GO TO TYPE OUT THE PC + +.SBTTL *** "CS" CMD *** +;COMMAND TO START THE SM10 CPU CLK RUNNING +CSCMD: CALL SETRN ;SET CLK "RUNNING" FLAG + XRA A ;CLR ACCUM TO CLR "SS MODE" + OUT CRMCTL ;***** I/O WRT 204/0 ***** + MVI A,03 ;SET BITS FOR "CLK RUN" & "SINGLE CLK" + OUT CLKCTL ;***** I/O WRT 206/3 ***** + ENDCMD ;DONE.. + +.SBTTL *** "CH" CMD *** +;COMMAND TO HALT THE SM10 CPU CLK +CHCMD: CALL CLRRN ;CLEAR CLK "RUNNING" FLAG + MVI A,^O010 ;SET BIT FOR "SS MODE" + OUT CRMCTL ;***** I/O WRT 204/010 ***** + XRA A ;CLR BITS FOR "SINGLE CLK" & "CLK RUN" + OUT CLKCTL ;***** I/O WRT 206/0 ***** + ENDCMD ;DONE.. + + +.SBTTL *** "LF" CMD *** +;COMMAND TO "LOAD FUNCTION"..SPECIFIES WHICH DIAG FUNCTION WRITE +;TO DO ON THE NEXT "DF" COMMANDS +LFCMD: CALL ARG16. ;GO ASSEMBLE 16 BIT ARG(WE ONLY NEED 4 BITS) + + SHLD CRMFN ;PERMANENT HOME FOR DATA + ENDCMD ;DONE.. + .SBTTL *** "DF" CMD *** +;ROUTINE WRITES THE DATA TYPED USING THE DIAG FUNCTION +;PREVIOUSLY SPECIFIED BY LF COMMAND +DFCMD: RUN.. ;IS CPU RUNNING?? + + CALL ARG16. ;GO ASSEMBLE ARG + +;NEXT ROUTINE DOES LOTS OF I/O WRTS TO SM10 CPU +;ALL WHILE TRYING TO WRITE DIAGNOSTIC ADDRESS REG FOR CRAM +;LOADING OR READING.. + PUSH H ;SAVE DATA TO BE DEPOSITED + CALL CRM.AD ;WRITE THE CRAM ADDRESS + POP H ;GET DATA TO BE DEPOSITED + +WFUNC: MOV A,L ;GET DATA FOR BITS 28-35 INTO ACCUM + OUT A2835 ;***** I/O WRT 103 ***** + MOV A,H ;GET DATA FOR BITS 20-27 + OUT A2027 ;***** I/O WRT 105 ***** + +WFNC1: XRA A ;CLR ACCUM + OUT BUSARB ;***** I/O WRT 115/0 ***** + + MVI A,^O144 ;BITS FOR "CONS REQ","T ENB FOR COM/ADR","CRA R CLK" + OUT BUSCTL ;***** I/O WRT 210/144 ***** + + LDA CRMFN ;GET DIAG FUNCTION + OUT DIAG ;***** I/O WRT 205/FNC ***** +;NOTE THAT "TRAP EN" WAS JUST ZAPPED, BUT IT IS ONLY USEFUL IF THE +;MICRO-CODE IS RUNNING AND ANYTHING U DO TO GET THE MICRO-CODE RUNNING +;WILL RESTORE THE TRAP ENABLE..THIS KLUDGE SPEEDS UP MICRO-CODE LOAD + + + MVI A,^O40 ;BIT FOR "CRAM WRT" + OUT CRMCTL ;***** I/O WRT 204/40 + XRA A ;BIT TO CLR "CRAM WRT" + OUT CRMCTL ;***** I/O WRT 204/0 ***** + ENDCMD ;DONE.. + +;SIMPLE LITTLE ROUTINE TO SAVE SOME SPACE..USED IN SEVERAL PLACES +CRM.AD: LHLD CRMAD ;LOAD DIAG ADDR TO BE WRITTEN + ;ROUTINE COUNTS ON DATA IN "H,L"..DESTROYS "H,L"... +CADWR: MVI A,01 ;BIT FOR CRAM RESET + OUT CRMCTL ;***** I/O WRT 204/1 ***** + XRA A ;CLR BIT TO CLR CRAM RESET + OUT CRMCTL ;***** I/O WRT 204/0 ***** + +;***** I/O WRT 103,105,107,111,113 ***** + MOV A,L ;LO ORDER 8 BITS TO ACCUM + OUT A2835 ;SET IN HARDWARE REG + MOV A,H ;HI ORDER 4 BITS TO ACCUM + OUT A2027 ;SET INTO HARDWARE REG + + XRA A ;CLR ACCUM + OUT A1219 ;CLR OTHER HARDWARE REGS + OUT A0411 + OUT A0003 + + OUT BUSARB ;***** I/O WRT 115/0 ***** + + MVI A,^O144 ;BITS FOR "CONS REQ", "T ENB FOR COM/ADR","CRA R CLK" + OUT BUSCTL ;***** I/O WRT 210/144 ***** + MVI A,^O21 ;BIT FOR "CRM ADDR LOAD" + OUT CRMCTL ;***** I/O WRT 204/21 + XRA A ;BIT TO CLR CRAM ADDR LOAD + OUT CRMCTL ;***** I/O WRT 204/0 ***** + RET ;AND RETURN + + +;ROUTINE TO READ A SINGLE DIAG FUNC WORTH OF STUFF FROM +;THE CRA/CRM PROCESSOR BOARDS +READC: MOV D,A ;SAVE DIAG FUNC FOR A SEC.. + LDA TRAPEN ;GET CURRENT VALUE FOR TRAP ENABLES + ORA D ;MIX TOGETHER + OUT DIAG ;***** I/O WRT 205/FNC ***** + MVI A,^O115 ;BITS "CONS REQ","CRA T CLK","R CLK ENB","CRA R CLK" + OUT BUSCTL ;***** I/O WRT 210/115 ***** + + IN D2835 ;***** I/O RD 0 ***** + CMA ;FIX INVERSION + STA TMPB2 ;SAVE IN STANDARD BUFFER + + IN D2027 ;***** I/O RD 1 ***** + CMA ;FIX INVERSION + ANI ^O17 ;KEEP ONLY 12-8 + STA TMPB2+1 ;SAVE IN STANDARD BUFFER + + XRA A ;CLR ACCUM + OUT BUSCTL ;***** I/O WRT 210/0 ***** + + RET ;RETURN + .SBTTL *** "RC" *** +RCCMD: RUN.. ;IS CPU RUNNING?? + +RCINT: XRA A ;CLEAR ACCUM FOR USE AS A COUNTER + LXI B,CRMBF+^D31 ;PNTR TO A BUFFER AREA TO SAVE THE "RC'S" AS READ +RCLP: MOV E,A ;SAVE IN "E" REG + CALL READC ;READ A DIAG FUNC FROM CRA/CRM BRD +;NOW PRINT WHAT WAS READ + LDA NOPNT ;WE WILL MAKE IT QUICKER IF NOT PRINTING RESULTS + ANA A ;SET FLAGS + JNZ RCNOP ;IF NO PRINT, AVOID TYPING CODE + + MOV A,E ;PUT IN MEM FOR PRINT ROUTINE + CALL P8BITA ;PRINT NAME OF THIS DIAG FUNC + PSLASH ;AND "/" + CALL P16. ;AND PRINT IT + PCRLF + + PUSH B ;SAVE COUPLE REGS WHILE GO DECNET + PUSH D + CALL DECNET ;YES.. SEND THIS GROUP OF DATA DOWN THE KLINIK LINE + POP D ;RETRIEVE THOSE REGISTERS + POP B + +;CODE FOR SAVING THE RESULTS OF THESE FUNCTION READS IN THE 8080 RAM SPACE +;FOR NOW WE WILL SAVE THE RESULTS IN THE PLACE WHERE CRAM DATA IS KEPT +RCNOP: LHLD TMPB2 ;FETCH UP THE DATA THAT WAS ACTUALLY READ + MOV A,H ;GET LO ORDER PIECE TO ACCUM + STAX B ;STORE TO PLACE POINTED TO BY "D,E" + DCX B ;UPDATE THE STORAGE POINTER + MOV A,L ;GET HI ORDER PIECE OF CRAM DATA + STAX B ;SAVE IN STORAGE AREA + DCX B ;AGAIN DOWNDATE POINTER TO BEGINING OF ACTUAL + + INR E ;INCREMENT IT + MOV A,E ;COPY CURRENT COUNT TO ACCUM FOR THE COMPARE + CPI ^O20 ;REACHED MAX YET?? + JNZ RCLP ;BACK IF NOT YET.. + +;OTHERWISE + ENDCMD ;DONE... + .SBTTL *** "EJ" CMD *** +;CONSOLE COMMAND TO DISPLAY THE FLOW OF THE CONTROL STORE BY PRINTING +;OUT THE CURRENT "J-FIELD", "NEXT LOC", "SUBROUTINE RET REG", & "CURRENT +; LOCATION" +EJCMD: RUN.. ;IS CPU RUNNING?? + LXI H,EJLST ;FIRST GET A PNTR TO ASCII TEXT + LXI B,^B10010000111 ;SET B=4 & C="10,00,01,11" + +EJLP: MOV A,C ;COPY DIAG FUNC STRING TO ACCUM + ANI 3 ;STRIP ALL BUT LO ORDER 2 BITS + +EJ1: CALL READC ;GO READ DIAG FUNC AS GIVEN BY ACCUM + + CALL PLN1 ;PRINT ASCII IDENTIFIER FOR THIS FUNC + + PUSH H ;SAVE "H,L" + CALL P16. ;AND GO PRINT IT AS 16 BIT OCTAL + PCHAR SPACE + PCHAR SPACE + POP H ;GET "H,L" BACK + + MOV A,C ;GET FUNCTION PICKER + RRC ;SHIFT FUNCTION LIST + RRC ; 2 PLACES + MOV C,A ;PUT BACK FUNCTION + + DCR B ;NOW DOWN THE COUNTER + JNZ EJLP ;AND JUMP TO THE EXECUTING CODE + + PCRLF ;AND A CR-LF +;ELSE.. END OF COMMAND + ENDCMD ;RETURN TO CALLER + +EJLST: .ASCIZ %CUR/% ;FUNC 03 IS CURRENT CRAM LOCATION + .ASCIZ %NXT/% ;FUNC 01 IS NEXT LOC + .ASCIZ %J/% ;FUNC 00 IS J-FIELD + .ASCIZ %SUB/% ;FUNC 02 IS SUBROUTINE RETURN REG + .SBTTL *** "TR" CMD *** +;THIS CONSOLE COMMAND TRACES THE FLOW OF THE MICRO-CODE BY TYPEING +;THE 4 KNOWN ADDRESSES FROM THE CONTROL RAM ADDRESS BRD, THEN ISSUEING +;A SINGLE CPU PULSE AND CONTINUING THIS UNTIL THE USER TYPES A +;CARRIAGE RETURN. +TRCMD: JC TR1 ;IF NO ARG, GO LIKE NORMAL + ARG16 ;IF WAS ARG, GO GET IT + .ADDR BRKDT ;PLACE TO PUT IT + + MVI A,^O77 ;NOW ANY ARBITRARY,NON-ZERO VALUE + STA BRKON ;TO SAY THAT BREAKING IS ON.. + +TR1: RUN.. ;IS CPU RUNNING?? + CLRB RPEND ;SO CAN CLR CMD CNTR +TR: LDA BRKON ;CHECK IF BREAK IS ON + ANA A ;CHECK FLAG + JZ TRLP ;IF ZERO,DONT LOOK AT BREAK STUFF + LXI D,BRKDT ;PASS PNTR TO THE DESIRED STOPPING ADDRESS + CALL BREAK ;IF FLAG SET, CALL TO CHECK ADDRESS + RZ ;IF RETURN WITH Z-SET, WE ARE AT BREAK PLACE + +TRLP: CALL PULSE ;GIVE PULSE + PCRLF ;CARRIAGE RETURN LINE FEED + + LDA RPEND ;GET CMD CNTR + ANA A ;IS IT SET?? + JZ TR ;WELL, CONT LOOP IF NOT YET +;OTHERWISE, END THE COMMAND + CLRB BRKON ;AND CLR THE FLAG + ENDCMD ;DONE.. + + .SBTTL *** "PM" CMD *** +;CONSOLE COMMAND TO "PULSE" "MICRO-CODE",..IE GIVE +;A SINGLE PULSE AND THEN AN "EJ" COMMAND.. +;COMMAND IS EQUIVILANT TO THE "TR" TRACE COMMAND, +;ONLY EXECUTING THE TRACE ONCE.. +PMCMD: RUN.. ;IS CLK RUNNING?? + +PULSE: CALL CP1 ;GO DO A SINGLE CLOCK + CALL EJCMD ;TYPE CONTROL STORE ADDRESSES & EXIT FROM THERE + ENDCMD ;AND OUT + .SBTTL *** "EC" CMD *** +;ROUTINE TO READ THE C-RAM AND TYPE IT OUT +ECCMD: RUN.. ;IS CPU RUNNING?? + JC EC2 ;IF NO ARG, DONT GO ASSEMBLE ONE + CALL LCCMD ;FETCH UP DESIRED CRAM ADDRESS + +EC1: CLRRM TMPB2 ;ZAP A TEMPORARY BUFFER + + CALL CRM.AD ;NOW WRITE DESIRED CRAM ADDRESS + CALL CP1 ;AND GIVE A SINGLE CLK PULSE TO LOAD CNTRL REG + +EC2: MVI A,06 ;SET UP "EXAMINE NEXT" TYPE COMMANDS + STA ENEXT ;SAVE EXAMINE STUFF IN RAM + +;NOW READY TO READ THE CONTROL REG + LXI H,RDLST ;GET PNTR TO DIAG FUNCTIONS TO BE READ + +ECLP: MOV A,M ;GET DIAG FUNCTION TO ACCUM + INX H ;UPDATE PNTR + ANA A ;WAS FNC END-OF-LIST(YES IF WAS MINUS) + JM ECBEE ;JMP IF WAS END OF LIST + +;OTHERWISE, WE MUST DO A DIAG FUNCTION + CALL READC ;GO READ THIS DIAG FUNC,DATA RETURNED IN "TMPB2" + SHLD ECSAV ;NOW SAVE "H,L" FOR A MINUTE + + LXI H,TMPB2 ;POINTER TO DATA JUST READ + CALL OCTAL ;NOW TURN DATA INTO ASCII OCTAL CHARS + .BYTE 2 ;TWO BYTES RELEVANT DATA + .BYTE 4 ;WANT 4 OCTAL CHARS + + LHLD ECSAV ;RESTORE THE "H,L" + JMP ECLP ;AND CONTINUE TILL READ ALL DIAG FUNCS + ;WHEN U GET TO HERE, YOU'VE READ ALL FUNCS, NOW READ & CMP A & B COPIES +ECBEE: MOV A,M ;GET DIAG FUNC FOR AN "A" COPY + INX H ;UPDATE MEM PNTR + ANA A ;DID DIAG FUNC HAVE MINUS SIGN?? + JM PCRAM ;DONE LIST, JMP IF WAS MINUS +;OTHERWISE, GO AND READ THE "A" COPY AGAIN + CALL READC ;DATA RETURNED IN "TMPB2" + MOV5B ;MOVE THAT DATA TO 2ND TMP BUFF + .ADDR TMPB2 ;SRC OF DATA + .ADDR TMPBF2 ; PLACE TO PUT IT + + MOV A,M ;GET DIAG FUNC FOR A "B" COPY + INX H ;UPDATE PNTR + CALL READC ;NOW READ A "B" COPY + + PUSH H ;SAVE "H,L" + CALL CMP36 ;NOW COMPARE THE "A" AND "B" COPIES + .ADDR TMPB2 ;"B" COPY + .ADDR TMPBF2 ;"A" COPY + POP H ;RESTORE "H,L" + JZ ECBEE ;IF CHECKED OK, BACK TO READ NEXT "A/B" COPIES + +;FALL THRU TO VERIFY ERROR IF "Z" NOT SET + PLINE ECVER ;"?VERIFY ERR" + JMP RCINT ;GO PRINT ALL CRAM REGS + + ;IF "A/B" COPIES VERIFIED, TIME TO PRINT C-RAM CONTENTS +PCRAM: MVI A,03 ;DIAG FUNC TO READ "CURRENT CRAM LOCATION" + CALL READC ;GO READ CURRENT CRAM LOC.. + CALL P16. ;PRINT IT + PSLASH ; AND "/" + +;NOW PRINT THE 32 OCTAL CHARS....... + MVI B,32. ;NUM CHARS TO PRINT +PCRLP: POP PSW ;GET A CHAR + CALL PCHR ;PRINT IT + DCR B ;DOWN COUNT OF CHARS PRINTED + JNZ PCRLP ;LOOP TILL DONE + + PCRLF ;NEED CR-LF + + ENDCMD ;THEN OUT +RDLST: .BYTE ^O17 ;READ 84-95 + .BYTE ^O16 ;READ 72-83 + .BYTE ^O15 ;READ 60-71 + .BYTE ^O14 ;READ 48-59 + .BYTE ^O12 ;READ 36-47A + .BYTE ^O5 ;READ 24-35A + .BYTE ^O4 ;READ 12-23 + .BYTE 0 ;READ 0-11 + .BYTE ^O377 ;END BYTE + .BYTE ^O12 ;READ 36-47A + .BYTE ^O13 ;READ 36-47B + .BYTE ^O5 ;READ 24-35A + .BYTE ^O6 ;READ 24-35B + .BYTE ^O377 ;END BYTE + +.SBTTL *** "EN" CMD *** +ENEC: LHLD CRMAD ;GET CURRENT ADDRESS + INX H ;UPDATE IT + SHLD CRMAD ;PUT IT BACK + JMP EC1 ;GO TO COMMON CODE + .SBTTL *** "DC" CMD *** +.SBTTL *** "DN TO DC" CMD *** +;CODE USED IN DEPOSIT NEXT FOR THE CRAM +DNDC: LHLD CRMAD ;GET CURRENT ADDRESS + INX H ;INCREMENT IT + SHLD CRMAD ;PUT IT BACK + +DCCMD: RUN.. ;IS CPU RUNNING?? + CALL ARG96 ;ASSEMBLE DATA TO DEPOSIT + .ADDR CRMTM ;PLACE TO PUT IT + + LXI D,CRMBF ;PLACE TO PUT THE RESULTS OF THE CRAM SHUFFLE + LXI H,CRMTM ;THE OLD 12-BYTE FORMAT WILL ALWAYS BE HERE + MVI C,4 ;LOAD "C" WITH A 4 + +;BEGIN THE UNPACKING +GENLP: CALL PLACE ;LOCAL ROUTINE THAT TAKES 12 BITS OF 24. + MVI A,3 ;A SHIFT 24 REQUIRES 3 BYTES OF DATA TO SHIFT + CALL SHR24 ;SHIFT 12 BITS JUST PACKED INTO OUTER SPACE + .BYTE 12. ;TELL ROUTINE 12 PLACES + CALL PLACE ;NOW ROUTINE WILL GET 12 MORE BITS..12+12=24 + + INX H ;UPDATE PNTR 3-BYTES(IE 24 BITS) + INX H + INX H + + DCR C ;DOWN THE COUNTER(THERE ARE 4 GROUPS OF 24=96) + JNZ GENLP ;CONTINUE TILL DONW THE 4 GROUPS + + CALL CRM.AD ;WRITE THE CRAM ADDRESS + LXI H,CRMBF ;GET PLACE WHERE INFO WAS JUST PLACED + + MVI A,06 ;NUMBER FOR DEPOSIT NEXT TO USE + STA DNEXT ;STANDARD PLACE TO KEEP IT + INR A ;SET FUNCTION .EQ. 7(INR WORKS BY LUCK) + LXI B,CRMFN ;SET AN ADDRESS INTO "B,C" REGISTER,TO USE AS A POINTER +DCLP: STAX B ;SAVE IT IN THE RAM AT LOC "CRMFN" + + MOV E,M ;GET 8 BITS OF DATA + INX H ;UPDATE PNTR + MOV D,M ;GET 4 MORE BITS OF DATA + INX H ;AND UPDATE PNTR AGAIN + + XCHG ;NOW "H,L" CONTAINS THE DATA & "D,E" THE PNTR + CALL WFUNC ;AND DIAG FUNCTION WRT + XCHG ;POINTER BACK TO "H,L" + + LDAX B ;GET PARTICULAR DIAG FUNC FROM RAM LOC + DCR A ;DOWN TO NEXT + JP DCLP ;AS LONG AS 0-7, KEEP GOING + ENDCMD ;NOW ALL DONE + .SBTTL *** "SM" CMD *** +;CODE TO START THE MICRO-CODE AT THE ADDRESS SPECIFIED.. +;DEFAULTS TO STARTING AT C-RAM LOC 0 IF NO ADDRESS IS +;GIVEN +SMCMD: JC SM1 ;IF NO ARG, SUPPLY ADDRESS OF 0000 + +;OTHERWISE MUST ASSEMBLE THE GIVEN ADDRESS + CALL ARG16. ;ASSEMBLE 16-BITS OF ARGUMENT + + JMP SM1.5 ;OTHERWISE, CONTINUE NORMALLY + +SM1: LXI H,00 ;IF HERE, DESIRE ADDRESS OF 0000 +SM1.5: SHLD T80DT ;SET ADDR + + CALL MRCMD ;RESET THE MACHINE + + MOV5B ;SET UP INITIAL DATA + .ADDR ONES ;DATA TO BE IS ALL ONES + .ADDR DMDAT ;PLACE WHERE IT GOES + + LXI D,MAD000 ;GET ADDRESS OF MEM LOC 0 + CALL DMINT ;"DEPOSIT MEMORY" INTERNAL FORMAT + + LDA PARBT ;GET PARITY STUFF + ANI ^O140 ;ONLY KEEP A LITTLE BIT + OUT RESET ;AND TURN OF ALL PARITY STUFF WHILE WE DO THIS + + LHLD T80DT ;GET START ADDRESS OF MICRO-CODE TO "H,L" + CALL CADWR ;WRITE THE DIAG ADDRESS REG + + CALL CSCMD ;START THE CPU CLK FREE RUN + HLTCM: CALL DELAY. ;NOW WAIT FOR MICRO-CODE TO REACH HALT LOOP + .BYTE -1 + CALL CLRUSE ;EXIT FROM USER MODE + IN RUNFP ;***** I/O RD 300 ***** + CMA ;AND FIX INVERSION + ANI ^O10 ;IS CPU IN THE HALT LOOP??? + JNZ SMVER ;JUMP IF YES..APPEARED TO START OK + +;FALL TO HERE IF SM10 DID NOT SET HALT LOOP FLAG + PLINE SMERR ;PRINT ERR MESSAGE + STC ;SET C-BIT TO INDICATE AN ERROR EXIT + JMP SMFINI ;AND EXIT VIA RESTORE PARITY PATH + SMVER: INTON ;SET INTERAL STATUS FOR THE EXAMINE + EXAM 0 ;EXAMINE MEM LOC 0(MICRO-CODE STOP CODE) + INTOFF ;TURN OFF INTERNAL STATUS +;IT DID SUCCEED IN SETTING HALT LOOP FLAG, SO MERELY PRINT HALTED +;AND THE DATA IN LOCATION 0.. +;****SUBROUTINE "STOP CODE" **** + CALL SETRN ;JUST A LITTLE KLUDGE..CHEAP WAY TO FIX STATE LIGHT + ; IF PROGRAM EXECUTED A "HALT" WHILE LITES WERE BLINKY + + PLINE HLTMS ;PRINT "HALTED" MESSAGE + LXI H,EMBUF ;PNTR TO DATA IN LOC 0 + CALL P18 ;PRINT RIGHT HALF OF 36-BIT DATA + CLRB CHKHLT ;SET FLAG TO SAY WEVE TYPED HALTED ALREADY + + PSPACE ;PRINT A SPACE + PSPACE ;AND ANOTHER +PCCOM: INTON ;SET INTERNAL MODE + EXAM 1 ;EXAMINE WORD WHICH HOLDS THE PC + INTOFF ;CLR INTERNAL MODE + PLINE PCMSG ;PRINT "PC/" + CALL P36. ;AND PRINT THE PC + PCRLF ;PRINT CARRIAGE RETURN LINE-FEED + ANA A ;CLEAR THE C-BIT 'CAUSE ALL OK + +;AND BEFORE WE LEAVE,RESTORE THE PARITY STUFF +SMFINI: LDA PARBT ;GET CURRENT PARITY DEFAULTS + OUT RESET ;RESTORE THE PARITY DETECTS + RET ;AND OUT +ZEROES: +MAD000: D 0,0,,0,0 ;MEMORY ADDRESS 0 + ; FROM MEMORY LOCATION 0 + .SBTTL *** "PE" CMD *** +;COMMAND TO ENABLE VARIOUS PARITY CHECKS NORMALLY MADE BY THE 8080.. +;ACCEPTABLE PARITY COMMANDS ARE: +; PE 0 ;"DISABLE" ALL PARITY DETECTION +; PE 1 ;"ENALE" "DP" PARITY DETECT +; PE 2 ;"ENABLE" "CRM" PARITY DETECTION +; PE 4 ;"ENABLE" "PE" PARITY DET(CLK FREEZE ON PAR ERR) +; PE 7 ;"ENABLE" ALL +;BITS ARE WEIGHTED FOR THE THREE TYPES OF PARITY ERRORS +PECMD: JC PARDIS ;COMMAND REQUIRES ARG + + CALL ARG16. ;ASSEMBLE TYPED ARG + + MOV A,L ;GET NUMBER TYPED INTO THE ACCUM + ANI ^O7 ;KEEP ONLY APPROPRIATE BITS + RAL ;BIT 0 INTO BIT1 + RAL ;BIT 0 INTO BIT 2 + RAL ; INTO BIT 3 + RAL ; INTO BIT 4 + + MOV L,A ;SAVE IN L + LDA PARBT ;NOW GET CURRENT STATUS + ANI ^O217 ;OFF THE OLD CRUMMY PARITY + ORA L ;THROW IN THESE NEW BITS + + JMP KS.PAR ;SAVE IN RAM PLACE & WRITE TO KS + + +;THIS IS THE CODE FOR IF WE WANT TO DISPLAY THE PARITY +PARDIS: LDA PARBT ;GET THE CURRENT PARITY STATUS + ANI ^O160 ;CLR CRUD, JUST SAVING PARITY BITS + RAR ;ROTATE TO JUSTIFY THE BITS AT BIT 0 + RAR + RAR + RAR + +P8CRLF: CALL P8BITA ;AND GO PRINT THOSE 8 BITS + PCRLF ;TERMINATE ALL WITH A CR-LF + ENDCMD ;ALL DONE + + .SBTTL *** "EX" CMD *** +;CONSOLE COMMAND TO EXECUTE A SINGLE SM10 "TEN ORDER" INSTRUCTION + +EXCMD: ARG36 ;GO ASSEMBLE THE INSTR TO BE EXECUTED + .ADDR EMBUF ;PLACE TO PUT IT + +EXINTM: LXI D,EMBUF ;POINTER TO INSTR INTO "D,E" + +EXINT: CALL WDATP ;***** I/O WRT 102,104,106,101,112 ***** + + MVI A,2 ;SET BIT FOR "I/O DATA CYCLE" + OUT DTARB ;***** I/O WRT 114/2 ***** + + MVI A,3 ;BITS FOR "EXECUTE" & "CONTINUE" + OUT CPUCTL ;***** I/O WRT 212/3 ***** + +DNF: NOP + NOP ;WAIT + + IN RUNFP ;***** I/O RD 300 ***** + CMA ;FIX INVERSION + ANI 1 ;IS CONTINUE STILL SET?? + RZ ;IF CLR, WE ARE OK... + +;IF CONT STILL SET, WE HAVE AN ERROR + PLINE EXMS ;ERR MESSAGE "?DNF-DID NOT FINISH" + CALL CLRUSE ;EXIT FROM USER MODE + CMA ;ACCUM NOW .EQ. -1 + ANA A ;SET FLAGS, SO "JNZ" WILL JUMP + RET ;AND RETURN + .SBTTL *** "ST" CMD *** +;CONSOLE COMMAND TO ISSUE A START TO THE CPU +STCMD: CALL LACMD ;FIRST GO ASSEMBLE A LEGAL ADDRESS AT WHICH TO START + MOV5B ;MOVE TO TMP BUFF SO DONT KILL "MEMAD" + .ADDR MEMAD ;SRC + .ADDR TMPBF2 ;TEMP PLACE TO KEEP IT + + +STINT: CLRRM DMDAT ;MUST CLR COMM WORDS BEFORE WE START + + DEPOS 31 ;CLEAR LOC 31(KEEP ALIVE WORD) + DEPOS 32 ;CLEAR LOC 32(THE TTY INPUT WORD) + DEPOS 33 ;AND 33(THE TTY OUTPUT WORD) + + LXI H,^O2540 ;LOAD "H,L" WITH "JRST" OPCODE + SHLD TMPBF2+3 ;AND PUT INTO THE BUFFER WHERE THE ADDR IS + + LXI D,TMPBF2 ;NOW SET POINTER TO THE INSTR + CALL EXINT ;AND GO HANDLE JUST LIKE AN EXECUTE + RNZ ;IF NON ZERO, THE EXECUTE FAILED + + LONG.DELAY 1 ;NOW WAIT + +;AND NOW FALL INTO THE "CONTINUE" COMMAND + .SBTTL *** "CO" CMD *** +;CONSOLE COMMAND TO ISSUE CONTINUE TO CPU +COCMD: CALL SETUSE ;ENTER USER MODE + MVI A,^O5 ;SET BITS FOR "CONTINUE" & "RUN" + OUT CPUCTL ;***** I/O WRT 212/5 ***** +COINT: STA CHKHLT ;AND GAURANTEE THAT ANY FAST HALTS WILL GET REPORTED + + PLINE KSPRMT ;WANT TO TELL USER WHEN WE SWITCH MODES + PLINE U ;SAY "USER MODE" + +;AND JUMP OFF TO COMMON CODE THAT CHECKS THE CONTINUE BIT +;AND ERRS IF CONTINUE HAS NOT BEEN CLEARED BY THE CPU + JMP DNF ;GO.... + .SBTTL *** "HA" CMD *** +;CONSOLE COMMAND TO HALT THE SM10 CPU..CPU MICRO-CODE SHOULD ENTER +;THE HALT LOOP +HACMD: XRA A ;CLR ACCUM FOR "RUN","EXECUTE" & "CONTINUE" + OUT CPUCTL ;*****I/O WRT 212/0 ***** + JMP HLTCM ;AND FINISHES UP JUST LIKE "SM" COMMAND + +.SBTTL *** "SH" CMD *** +;COMMAND TO CAUSE THE TOPS20 MONITOR TO BEGIN AN ORDERLY SYSTEM SHUTDOWN +SHCMD: MOV5B ;MOVE US SOME DATA + .ADDR .DSBASE ;FROM HERE (0,,776700) + .ADDR DMDAT ;TO HERE. PLACE FOR DEPOSIT TO FIND IT + + DEPOS 30 ;AND DO IT + CALL SETUSE ;NOW BE SURE WE ENTER THE USER MODE AGAIN + MVI B,^O200 ;SET SIGN BIT, CAUSES "KEEP-ALIVE" TO BE IGNORED + CALL STATEM ;GO DO THE STUFF + .BYTE ^O377 ;WITHOUT CHANGING THINGS + JMP COINT ;AND GO BACK TO USER MODE TO WATCH MONITOR "SHUTDOWN" + .SBTTL *** "KL" CMD *** +;KLINIK COMMAND +KLCMD: JC KLDIS ;DISPLAY CURRENT STATE IF NOTHING TYPED + +;ELSE ASSEMBLE THE TYPED IN ARG + CALL ARG16. ;PERMIT 16 BIT WIDE TYPE IN + +;NOW VERIFY THAT LOWER HALF IS A LEGAL NUMBER + MOV A,L ;LO HALF TO ACCUM + ANA A ;SET CONDITION CODES + JZ KLOFF ;IF TYPED ZERO, GO TURN OFF KLINIK + +;NOW FALL THRU HERE IF .EQ. 1, MUST TURN ON THE KLINIK + STA KLLINE.ON ;SET BIT TO SAY THAT KLINIK IS ON + RET ;AND OUT +KLOFF: STA KLLINE.ON ;GET HERE IF ACCUM WAS ZERO.. ZAP THE KLINIK FLAG + +;AND FALL INTO CODE TO SEE IF THE END OF KLINIK MUST FORCE A CHANGE IN THE +;STATE OF THE KLINIK LINE AND USER. IE IF IN MODE 3, WE MUST FORCE USER +;INTO MODE 2 + LDA CSLMODE ;GET CURRENT MODE + CPI .MODE3 ;IS IT MODE 3?? + CZ SETM2 ;SET MODE 2 IF NOT IN THERE + RET ;AND OUT + +;HERE IF JUST WANT TO DISPLAY CURRENT KLINIK STATE +KLDIS: LDA KLLINE.ON ;GET CURRENT VALUE + ANA A ;SET FLAGS + JMP CHOOSE ;GO DISPLAY THE APPROPRIATE MESSAGE + .SBTTL *** "TT" CMD *** +TTCMD: CALL SETUSE ;ON THIS COMMAND WE DESIRE THAT THE CTY ENTER USER MODE + PLINE KSPRMT ;"KS10>" + PLINE U ; "USR MOD" + JMP SETM2 ;SIMPLE TRANSFER OF KLINIK LINE TO MODE 2 + + +.SBTTL *** "PW" CMD *** +;COMMAND FOR SETTING A PASSWORD INTO THE 8080, SO THAT THE KLINIK LINE +;USER WILL HAVE SOMETHING TO MATCH AGAINST WHEN HE TRIES TO GET INTO THE SYSTEM +PWCMD: MVI A,0 ;ON ANY PASSWORD COMMAND, FORCE A RE-EXAMINE OF + STA KLNKSW ;OF THE KLINIK MODE + +;NOW DO THE NORMAL STUFF U NEED TO DO WITH THIS COMMAND + JC PW.CLR ;IF NO PW TYPED, GO CLR PASSWORD + +;FALL THRU ELSE.. IE MUST SET THE PASSWORD +PW.SET: LHLD .ARG1 ;GET POINTER TO THE TYPE-IN BUFFER + LXI D,PASSWORD ;POINT TO THE BUFFER AREA WHERE THE PASSWORD WILL BE + MVI B,-6 ;SET A MAX COUNT FOR THE LENGTH OF THE PASSWORD + +PW.LOOP: MOV A,M ;COPY A PASSWORD CHARACTER TO THE ACCUM + CPI EOLCH ;IS IT END OF LINE?? + RZ ;IF YES,SIMPLE RETURN + +;FALL TO HERE IF MORE TO BE MOVED + CALL UP.LO ;UPPER CASE ONLY + STAX D ;MOVE A CHARACTER TO THE SAVE BUFFER + INX D ;UPDATE DESTINATION POINTER + INX H ;UPDATE SOURCE POINTER + INR B ;UPDATE CHARACTER COUNT + JNZ PW.LOOP ;STAY IN THE LOOP + +;FALL THRU WHEN DONE 6 CHRACTERS.. THAT HAD BETTER BE ALL, ELSE ERROR + MOV A,M ;GET 7TH CHARACTER + CPI EOLCH ;IT BETTER BE END + RZ ;IF YES, WAS END OF LINE, THEN OK TO RETURN + +;FALL THRU WHEN USER TYPED TOO MANY CHARACTERS + PLINE PWLEN ;ERR MESSAGE +PW.CLR: CLRRM PASSWORD+1 ;CLEAR 5 BYTES OF THE 6 BYTE BUFFER + DCX H ;POINTER CAME OUT GOOD + MVI M,0 ;CLR THE 6TH BYTE OF THE BUFFER + RET ;THAT'S ALL + + .SBTTL *** "MK" & "UM" CMD *** +;CONSOLE COMMAND TO MARK AND UMARK SPECIFIED MICRO-CODE LOCATIONS +UMCMD: MVI C,0 ;WE ARE CLEARING THE MARK BIT.. + JMP MRKCM ;AND GO SAVE IT AS A FLAG FOR WHAT WE ARE DOING + +MKCMD: MVI C,1 ;A BIT SAYS WE ARE SETTING THE MARK BIT +MRKCM: PUSH B ;SAVE "B,C", IT HAS DATA FOR SET OR CLEAR + RUN.. ;IS CPU RUNNING?? + CALL LCCMD ;"C-BIT" IS CLR..GO ASSEMBLE A LEGAL RAM-ADDRESS + CALL CRM.AD ;SET DIAGNOSTIC ADDRESS REG + CALL CP1 ;GIVE SINGLE PULSE TO GET DATA WHERE I CAN READ + + MVI A,^O17 ;GET FUNCTION READ FOR CRAM DATA THAT INCLUDES MRK + CALL READC ;DO THE DIAGNOSTIC FUNCTION READ + CALL CRM.AD ;SET DIAGNOSTIC ADDRESS REG + LXI D,TMPB2 ;GET PNTR TO DATA THAT HAS THE MARK BIT + POP B ;GET INSTR TYPE + + LDAX D ;GET THE ACTUAL DATA + ANI ^O376 ;CLEAR BIT 0 + ORA C ;NOW EITHER SET OR CLEAR THE BIT + +MRKRT: STAX D ;BUT DATA BACK, NEW MARK BIT STATUS + + CALL ADATP ;WRITE DATA TO BUS REG + + MVI A,7 ;NOW WISH TO DO FUNCTION WRITE 7 + STA CRMFN ;SET INTO FUNC WORD + + JMP WFNC1 ;AND FINISH UP BY WRITING DATA BACK + .SBTTL *** "ZM" CMD *** +;CONSOLE COMMAND TO ZERO THE SM10 MOS MEMORY.. +ZMCMD: CLRRM MEMAD ;CLEAR MEMORY ADDRESS BUFFER(TO START AT 0) + MVI A,2 ;BITS TO SAY WRITE TYPE FUNCTION + STA MEMAD+4 ;WRITE INTO THE BUFFER + + CLRRM DMDAT ;DATA TO DEPOSIT IS ALL ZEROES + + INTON ;INTERNAL MODE ON + CALL DM1 ;DEPOSIT ZEROES INTO FIRST LOCATION +ZM1: CALL INC36 ;TO NEXT ADDRESS + .ADDR MEMAD ;HERE IT IS + + LXI D,MEMAD ;DO PART OF THE DEPOSIT HERE, FOR SPEED SAKE + CALL ADATP ;LOAD UP BUS REGS WITH THE DESIRED DATA + MVI A,4 ;NOW FUNCTION TYPE BIT INTO ACCUM + OUT BUSARB ;***** I/O WRT ***** + + CALL DMGO ;NOW GO DO THE DEPOSIT + +;AND CHECK TO SEE IF GOT A NXM + LDA ERRCD ;GET ERROR CODE.. + ANA A ;CHECK IF SET + JZ ZM1 ;IF NO ERRORS YET, KEEP GOING + +;FALL THRU WHEN HAD "NO DATA ACNOWLEDGE" ERROR + INTOFF ;CLEAR INTERNAL MODE + ENDCMD ;AND DONE + .SBTTL *** "RP" CMD *** + +;NOTE: THE LIST OF SAVED COMMAND DISPATCHES IS NOT IN THE NORMAL 8080 +;ADDRESS FORMAT..IE THE COMMAND LIST IS SAVE IN PAIRS OF BYTES AS +;HI ORDER PIECE FIRST.. +;LO ORDER PIECE SECOND.. +RPCMD: JNC RP1 ;IF ARG, BEGIN AT A SPECIAL PLACE + XRA A ;CLR ACCUM +RP0: STA RPCNTR ;THERE IS NO REPEAT COUNT + CALL RPFOO ;IN THE BEGINNING YOU MUST RESET THE POINTERS + XRA A ;CLR ACCUM + STA RPEND ;CLR THE REPEAT KILLER + CMA ;MAKE ACCUM .EQ. -1 + STA RPTON ; THAT REPEAT FUNCTION IS TURNED ON + JMP RP2 ;CONTINUE... + +RP1: CALL ARG16. ;FETCH THE ARG THAT WAS TYPED + + MOV A,H ;IT MUST ONLY BE 256 OR LESS + ANA A ;SET PROCESSOR FLAGS + JNZ KILNM ;IF .GT. 256, THEN BAD NUMBER + +;FALL THRU IF ACCUM 0 + MOV A,L ;GET REAL ARG INTO ACCUM + INR A ;SET ACCUM 1 GREATER THAN ACTUAL + JMP RP0 ;CONTINUE BY INITING FLAGS + +RPTRTN: LDA RPEND ;NEXT THING IS TO SEE IF TIME TO STOP REPEAT + ANA A ;TEST DATA + JNZ RP.OUT ;AND END THE REPEAT IF "END" FLAG IS SET + RP2: LHLD RPLST ;GET POINTER TO COMMAND DISPATCH LIST + MOV A,M ;CHECK BYTE..MAKE SURE ITS NOT THE END-OF-LIST + INR A ;IF IT WAS -1, NOW ITS A ZERO + JNZ RP4 ;AND GO BACK TOO + + LDA RPCNTR ;CHECK IF THIS IS A COUNTED REPEAT + CZ RPFOO ;IT WAS END OF LIST IF U GOT HERE, SO FIX POINTERS + ANA A ;SET FLAGS + JZ RPTRTN ;IF .EQ. 0 NO COUNT ON THE REPEAT + + DCR A ;THERE IS A COUNTER, DOWN IT + STA RPCNTR ;SAVE NEW COUNT + CPI 1 ;SEE IF AT BOTTOM LINE + CNZ RPFOO ;IF A COUNTED REPEAT, FIX END OF LIST ONLY IF MORE TO DO + JNZ RPTRTN ;JUMP IF NO + +RP.OUT: XRA A ;CLEAR ACCUM PRIOR TO LEAVING + STA RPTON ;TURN OFF THE "ON" FLAG + RET ;AND HERE IF YES + +RP4: MOV D,M ;IF IT WAS OK.. START ASSEMBLING THE DISPATCH + INX H ;UPDATE TO LO ORDER PIECE + MOV E,M ;AND DISPATCH IS NOW IN "D,E" + INX H ;UPDATE POINTER + SHLD RPLST ;SAVE POINTER TO WHERE WE ARE IN CMD LIST + + LXI H,NULLW ;"H,L" GETS PLACE WE WANT TO RETURN TO + PUSH H ;PLACE ON STACK SO THAT "RET" INS COMES HERE + XCHG ;DISPATCH ADDRESS INTO "H,L" + + MOV A,H ;GET HI ORDER PIECE OF ADDR TO SEE IF ARG + ANA A ; WAS TYPED WITH THIS COMMAND..SET FLAGS + JP RPGO ;IF SIGN BIT CLR, CMD GOT NO ARG + ;OTHERWISE MUST SET THE C-BIT TO TELL CMD TO LOOK FOR ARG + ANI ^O177 ;CLR SIGN BIT + MOV H,A ;PUT IT BACK FOR CORRECT DISPATH + STC ;SET C-BIT IF NECCESSARY +RPGO: CMC ;SET C-BIT FOR THIS COMMAND TO SEE + PCHL ;AND GO DO IT.. + +;IF REACHED END OF THE DISPATCH LIST, THEN THIS CODE RESETS +;THE POINTER BACK TO THE BEGINNING OF THE LIST +RPNEW: CMA ;RPFOO DOESNT TOUCH ACCUM, SET ACCUM TO -1 + STA CMDS.. ;NOW ZAP THE FIRST IN LINE FLAG +RPFOO: LXI H,RPINI ;BUFFER BEGINNING ADDRESS + SHLD RPLST ;PUT BACK INTO RAM + LXI H,RPTBFI ;POINTER TO DATA BUFFER + SHLD RPBUFS ;RESET INTO HOLDING LOCATION + RET ;AND RETURN + .SBTTL *** "DS" CMD *** +;COMMAND TO SELECT NON DEFAULT DISK UNIT AND UNIBUS ADAPTERS FOR BOOTING +;FROM DISK +DSCMD: PLINE Q.UBA ;MESSAGE TO ASK FOR "UNIBUS ADAPTER" TO BE USED + CALL PICKUP ;GO FETCH THE RESPONSE THAT WAS TYPED + JC DS1 ;IF NOTHING TYPED, LEAVE UBA AS CURRENTLY SELECTED + +;FALL INTO HERE IF A NEW UBA NUMBER WAS TYPED + LDA TMPB2 ;GRAB THE NEW UBA NUMBER AS TYPED + RLC ;THE UBA NUMBER IS JUSTIFIED "*4" IN A BYTE + RLC ;TAKES 2 ROTATES TO GET IT JUSTIFIED + STA DSKUBA ;AND SAVE THE NEW VALUE IN THE RAM + +DS1: PLINE Q.RH ;ASK FOR AN RH11 TO USE + CALL PICKUP ;GET WHAT WAS TYPED + JC DS2 ;IF NOTHING TYPED, DO NOTHING + + MOV5B ;NOW SAVE THIS NEW DISK BASE + .ADDR TMPB2 ;THIS IS WHERE THE DATA SHOULD BE SITTING + .ADDR DSBASE ;THIS IS WHERE WE WILL KEEP IT + +DS2: PLINE Q.UNIT ;ASK FOR A UNIT NUMBER TO BOOT FROM + CALL PICKUP ;GO FETCH WHAT WAS TYPED + RC ;IF NOTHING TYPED, THEN ALL DONE. RETURN FROM THIS CMD + +;FALL TO HERE IF A UNIT WAS TYPED..GO SET THE UNIT TO BE USED + LDA TMPB2 ;GET NUMBER TYPED FOR THE NEW UNIT + STA UNITNM ;SET IT INTO RAM AS THE NEW VALUE + RET ;ALL DONE THIS COMMAND.... + .SBTTL *** "MS" CMD *** +;COMMAND TO SELECT WHAT MAGTAPE TO BOOT FROM +MSCMD: PLINE Q.UBA ;ASK FOR A UNIBUS ADAPTER TO LOAD FROM + CALL PICKUP ;GET WHAT WAS TYPED + JC MS1 ;IF NOTHING, LEAVE UBA ALONE.. GO GET THE NEXT THING + +;FALL INTO HERE IF A NEW UBA WAS SELECTED + LDA TMPB2 ;GET THE NEW UBA TYPED + RLC ;UBA NUMBERS MUST BE JUSTIFIED ON BYTE BOUNDARY *4 + RLC ;TAKES TWO SHIFTS TO SET THE UBA NUMBER + STA MTAUBA ;SAVE THE NEW UBA VALUE IN THE RAM + +MS1: PLINE Q.RH ;ASK FOR A NEW RH11 TO USE + CALL PICKUP ;FETCH WHAT WAS TYPED + JC MS1.5 ;IF NOTHING TYPED, THEN DO NOTHING + + MOV5B ;IF SOMETHING TYPED, GET IT FROM THE BUFFER + .ADDR TMPB2 ;PLACE WHERE THE STUFF WAS PUT + .ADDR MTBASE ;PLACE WHERE WE KEEP THE MAGTAPE BASE REG +MS1.5: PLINE Q.TCU ;GO ASK FOR A UNIT NUMBER + CALL PICKUP ;GO SEE WHAT WAS TYPED + JC MS2 ;IF NOTHING TYPE, LEAVE VALUE ALONE.. GO AROUND THIS. + +;FALL TO HERE IF NEED TO SET A NEW UNIT NUMBER + LDA TMPB2 ;GET WHAT WAS TYPED + STA TAPEUNIT ;SET IN THE NEW UNIT NUMBER + +MS2: PLINE Q.DEN ;NOW GO SEE WHAT DENSITY TO SET FOR THE MAGTAPE + CALL INBUF ;UPDATE BUFFER POINTER. THIS CASE IS DIFFERENT THAN + ;THE OTHERS.. WE NEED TO EXAMINE ASCII. NOT OCTAL + JC MS3 ;BUT IF NOTHING TYPED, GO ASK FOR A NEW SLAVE + ;FALL THRU IF NEED TO SET A DENSITY.... +;NOW H,L REG POINTS TO THE STRING JUST TYPED IN + PUSH H ;SAVE POINTER TO THE TYPED IN BUFFER + LXI D,EIGHT0 ;GET POINTER TO THE "800" LIST + CALL STRCMP ;NOW DO A STRING COMPARE + JNZ S16CHK ;IF WAS NOT AN "800", SEE IF ITS A "1600" + +;OK, IT WAS 800..NOW SET UP THE CHANNEL DATA TO SAY 800 BPI TAPE + MVI A,2 ;A 2 IS THE CORRECT CODE FOR 800 BPI + POP H ;IF "800" MATCHED, THEN CLEAN UP THE STACK + JMP MS2.5 ;GO TO NEXT CHECK + +S16CHK: POP H ;GET POINTER TO THE TYPED IN STUFF + LXI D,SIXTN ;MATCH AGAINST "1600" + CALL STRCMP ;DO THE STRING COMPARE + JNZ KILNM ;IF WAS NOT 1600, THEN IT WAS BAD + +;IT WAS 1600, SO SET THE RIGHT THING FOR TAPE BPI + MVI A,4 ;THIS IS THE CODE FOR 1600 BPI +MS2.5: STA DEN.SLV+1 ;SET THE BYTE IN THE CHANNEL DATA WORD + +MS3: PLINE Q.SLV ;ASK FOR A NEW SLAVE DEVICE + CALL PICKUP ;FETCH WHAT WAS TYPED + RC ;IF NOTHING TYPED, THEN WE ARE ALL DONE + +;ELSE FALL TO HERE TO GET THE SLAVE + LDA TMPB2 ;GET THE NUMBER + STA DEN.SLV ;SET THE BYTE AS REQUIRED + RET ;AND ALL DONE +EIGHT0: .ASCIZ /800/ ;FOR 800 BPI TAPES +SIXTN: .ASCIZ /1600/ ;STRING FOR 1600 BPI TAPES + ;SOME SUBROUTINES FOR USE BY THE DEVICE SELECT COMMANDS +;FIRST A ROUTINE TO READ IN A NUMBER TYPED IN ANSWER TO AN 8080 QUESTION +;AND SAVE THE NUMBER TYPED IN THE 36 BIT BUFFER "TMPB2". RETURNS C-BIT CLEAR +;IF A NUBER WAS GATHERED AND STORED IN "TMPB2". RETURNS C-BIT SET IF NOTHING +;WAS TYPED. +PICKUP: CALL INBUF ;SET UP THE INPUT BUFFER TO THE CURRENT TYPEIN. + RC ;RETURNS HERE WITH C-BIT SET IF NOTHING TYPED + +;GET HERE IF SOMETHING WAS TYPED.. GO GET IT AND PUT IT IN "TMPB2" + ARG36 ;GATHER A 36-BIT ARGUMENT + .ADDR TMPB2 ;PUT IT IN THIS BUFFER + XRA A ;CLEAR C-BIT BECAUSE ALL WAS OK. + RET ;ALL DONE + +;SUBROUTINE TO FIX UP THE BUFFER POINTERS IN THE INPUT BUFFER +INBUF: LXI H,EOL ;GET POINTER TO END-OF-LINE COUNTER + DCR M ;SO CAN DECREMENT + CALL BFRST ;RESET TTY INPUT POINTERS + LHLD BUF. ;FIND THE BEGINNING OF BUFFER + SHLD .ARG1 ;AND SET IT AS THE POINTER TO THE FIRST ARG + + LXI H,INRDY ;PASS A RETURN ADDRESS IN H,L + JMP NULLW ;ENTER TTY INPUT WAIT + +INRDY: LHLD .ARG1 ;GET POINTER TO THE START OF THE NEW DATA +FNDARG: CALL SEPCHR ;EAT UP ANY NO-OP SEPARATORS + SHLD .ARG1 ;REPLACE THE POINTER + JMP EOCML ;CHECK IF AT END-OF-LINE. C-SET IF YES(IE NO ARG) + .SBTTL *** "BT" CMD *** + INDIRECT=^O77 +BOOT: PLINE BTMSG1 ;INCLUDE A MESSAGE SO THAT USERS KNOW U R BOOTING +BTAUT: PCRLF ;AND KEEP IT ON ONE LINE + MVI A,^O10 ;BIT 32 IN TENLAND TO SAY THIS WAS A BOOT BUTTON LOAD + STA GOCODE ;SAVE IN THE "GO CODE" PLACE + STC ;FALL THRU TO A "BT" + +BTCMD: CALL BTCHOICE ;GO SELECT MONITOR OR DIAG PRE-BOOT +BT.SRC: CALL MICROP ;READ THE PAGE OF FILE POINTERS INTO MEMORY @1000 + +;WHEN GET TO HERE, THE PAGE HAS BEEN READ IN. + JC C.BTERR ;ERROR IN BOOT PROCESS DURING MICRO-CODE LOAD + + CALL DMEM2CRAM ;LOAD DATA FROM MEMORY INTO CRAM + + +;FALL THRU IF DONE THE CRAM LOADING PORTION +;NOW MUST READ IN THE BOOT CODE ITSELF,START THE SM10 MICRO-CODE +;AND THEN START THE BOOT PROGRAM AT ADDRESS 1000 +;NOW SET UP DISK POINTERS TO POINT TO BOOT BLOCK OF DISK, +;IN ORDER THAT WE LOAD THE MONITOR BOOT +LB.GO: CALL LBINT ;GO READ-IN THE APPROPRIATE BOOTSTRAP +LB.GO1: MOV5B ;SET UP A START ADDRESS + .ADDR MA1000 ;MEMORY ADDRESS 1000 FOR STARTING PROGRAM + .ADDR TMPBF2 ;SET UP SO START COMMAND CAN FIND THE ADDRESS + +;TEMP CODE FOR FIGURING OUT HOW TO MAKE THE INTERNAL START CODE WORK + JMP STINT ;GO START THE MACHINE WITH MONITOR BOOT + .SBTTL *** "LB" CMD *** +LBCMD: CALL BTCHOICE ;IF ARG GIVEN, GO SET UP A CHOICE FOR THE BOOTING +LBINT: LXI D,^O1000 ;ALL POINTERS START AT 1000 + LDA RM100 ;GET THE OFFSET AS SELECTED(MON OR DIAG PRE-BOOT) + ADD E ;ADD LO ORDER TO THE OFFSET + MOV E,A ;PUT IT BACK + CALL FILEINIT ;READ IN POINTERS TO THE "PRE-BOOTS" + + JC L.BTERR ;ERROR IN LOADING THE PRE-BOOT + + CALL BT.GO ;START UP THE MICRO-CODE & INTERNAL OFF +;NOW PASS ADDRESSES OF RH BASE & DRIVE # TO THE PRE-BOOT PROGRAMS +INFOBT: LHLD UNITNM ;UNIT NUMBER INTO HL REGISTER + JMP PASSSRC ;ROUTINE WHICH WRITES LOCS 36,37 & 40 + ;CUTE LITTLE ROUTINE FOR SELECTING WHICH BOOT TO LOAD +BTCHOICE: JC LOAD4 ;IF NO ARG, SET FOR "BOOT>" INPUT + + CALL ARG16. ;ASSEMBLE THE ARG +;AS LONG AS IT WAS A NUMBER, WE WILL LOAD THE DIAG BOOT + MVI A,6 ;A 6 IS THE OFFSET FOR THE DIAG PRE-BOOT +EXIT4: STA RM100 ;SAVE IT + RET +LOAD4: MVI A,4 ;PASS A 4.. TO SAY LOAD MONITOR BOOT + JMP EXIT4 ;AND COMMON EXIT + +;ROUTINE TO START UP THE MACHINE(KS10), AND RE-ESTABLISH THE PARITY DEFAULT +BT.GO: CALL SM1 ;START THE MICRO-CODE + JC D.BTERR ;IF MICRO-CODE DOES NOT START +BT.GO1: INTOFF ;INTERNAL MODE OFF + + MVI A,DEFLTE ;GET MACHINE DEFAULT VALUE FOR ENABLES + CALL KS.PAR ;SET THEM INTO THE RAM & WRITE INTO KS + MVI A,TRPDEF ;GET MACHINE DEFAULT FOR TRAP ENABLES +TP.SET: STA TRAPEN ;SET DEFAULT INTO THE RAM + OUT DIAG ;***** I/O WRT 205/TRAPS ENABLE ***** + RET ;AND OUT + + .SBTTL *** "MT" CMD *** +MTCMD: SHLD CMD.. ;SAVE WHAT COMMAND THIS IS, SO RETRYS WILL WORK + CALL MTSETUP ;GO TO SOME COMMON CODE + MVI A,READ.TAPE ;GET THE COMMAND EXECUTION CODE FOR THE TAPE CMD + CALL MTXFR ;AND READ-IN THE MICRO-CODE FROM TAPE + JNC MT.1 ;NO NEED TO CHECK IF FATAL ERR IF ALL OK + + CALL NONFATAL ;WAS AN ERROR, GO SEE WHAT KIND + JNZ A.BTERR ;ERR TYPE "A" IF INITIAL READ FAILS + +MT.1: MVI A,MT.BIT ;SET ACCUM .EQ. MAGTAPE BIT + CALL MEM2CRAM ;LOAD MICRO-CODE FROM MEMORY TO "CRAM" SPACE + + CALL MBINT ;NOW LOAD IN THE PRE-BOOT PROGRAM + CALL BT.GO ;START THE MICRO-CODE,REPLACE PARITY & TRAP DEFAULTS + JMP LB.GO1 ;AND PROCEED TO START THINGS + ;NOW MUST DO A RE-WIND.. SKIP FIRST FILE(MICRO-CODE), THEN READ-IN THE +;SECOND FILE(THE PRE-BOOT) +MBINT: MVI A,SKP.TAPE ;GRAB A SKIP COMMAND + CALL MTXFR ;ISSUE A REWIND. AND A FILE-SKIP + +;NOW WE EXPECT THERE TO BE A FRAME COUNT ERROR FROM THE SPACE FORWARD +;AND WE WILL DO WHAT WE CAN TO IGNORE IT + JNC MTSKOK ;IF NO ERROR AT ALL, THATS OK TOO + + CALL NONFATAL ;CHECK ERROR TYPE IF FALL INTO HERE + JNZ L.BTERR ;IF WAS NOT A FRAME COUNT ERROR, IT WAS MORE SERIOUS + +;IF COMPARE RESULT WAS ZERO, THEN THE ERROR WAS A FRAME COUNT ERROR +;AND WE WILL IGNORE IT BY FALLING INTO THE CONTINUE CODE +MTSKOK: MVI A,READ.TAPE ;GET A TAPE READ COMMAND + CALL QMXFR ;EXECUTE TAP COMMAND LIST WITH NO REWIND IN IT + JNC PASSME ;NO ERROR IF NO "C" BIT + + CALL NONFATAL ;SEE WHAT KIND OF ERROR + JNZ L.BTERR ;BOOT ERROR IF NO Z + +PASSME: LHLD TAPEUNIT ;GET TAPE UNIT FOR CURRENT MAGTAPE SELECTION + ;NOW PASS INFO IN LO MEMORY ADDRESS SPOTS +PASSSRC: PUSH H ;SAVE THE PASSED UNIT NUMBER ON TOP OF STACK + MOV5B ;PASS RH BASE ADDRESS TO INTERNAL BUFFER + .ADDR RHBASE ;FROM HERE + .ADDR DMDAT ;TO HERE + LXI H,DMDAT+2 ;GET POINTER TO PIECE FOR UBA + LDA UBANUM ;GET CURRENT UBA + ORA M ;PUT IT INTO MEMORY + MOV M,A + + PUSH H ;SAVE THE POINTER TO "DMDAT" AREA + DEPOS 36 ;DEPOSIT IN MEMORY + POP H ;GET BACK THE POINTER TO "DMDAT" AREA + MVI M,0 ;CLEAR BYTE WITH BITS 12-19 + POP H ;GET THE UNIT NUMBER THAT WAS SAVED ON THE STACK + SHLD DMDAT ;AND PUT IT INTO THE DEPOSIT MEMORY DATA AREA + DEPOS 37 ;DEPOSIT IN MEMORY HERE + + MOV5B ;FINALLY PASS DENSITY SLAVE INFORMATION + .ADDR DEN.SLV ;GET IT FROM HERE + .ADDR DMDAT ;PUT IT HERE + DEPOS 40 ;AND MOS MEMORY HERE + RET ;BACK TO CALLER + ;ROUTINE THAT CHECKS TO SEE WHAT KIND OF ERROR WE HAVE SUFFERED UNDER +;THE MAGTAPE TRANSFER +NONFAT: MVI A,<^O377&FRMERR+2> ;CHK ERROR CODE FOR FATAL OR NON FATAL TYPES + LXI H,ERRCD ;NOW POINT TO THE ACTUAL ERROR TYPE THAT WE GOT + CMP M ;COMPARE THE TWO + PUSH PSW ;SAVE FLAGS WHILE WE RESET THE TAPE DRIVE + CZ MTRESET ;GO RESET ANY ERRORS ENCOUNTERED IN THE SKIP OPERATION + POP PSW ;GET BACK THE FLAGS + RZ ;ONLY RETURN IF ERROR WAS NON FATAL + +;FALL TO HERE IF ERR WAS FATAL TYPE..SEE IF WE CAN RETRY IT + MVI A,<^O377&RETRY.+2> ;"RETRYABLE" ERROR?? + CMP M ;COMPARE + RNZ ;OUT IF CAN'T EVEN RETRY..DIE + +;AND HERE IF IT WAS RETRYABLE + LXI SP,RAMST+^O2000 ;FIRST CLEAR THE STACK + LXI H,NORML ;PUT A RETURN ADDRESS ONTO THE STACK + PUSH H + + LHLD CMD.. ;NOW GET "WHICH" COMMAND TO RETRY + PCHL ;GIVE IT A GO + .SBTTL *** "MB" CMD *** +;COMMAND TO LOAD ONLY THE BOOTSTRAP OFF OF THE CURRENTLY SELECTED MAGTAPE +MBCMD: SHLD CMD.. ;SAVE WHICH COMMAND THIS IS + CALL MTSETUP ;GO TO SOME COMMON CODE TO SET UP FOR MAGTAPE XFER + CALL MBINT ;AND GO + CALL BT.GO ;START UP THE MICRO-CODE & INTERNAL OFF + RET ;BACK TO NULL JOB LOOP + +;SOME COMMON CODE THAT SETS UP PARAMETERS FOR MAGTAPE XFER'S..SAVES A FEW +;BYTES OF 8080 SPACE +MTSETUP: CALL BTINT ;FIRST SET UP FOR THE BOOTING PROCESS + LDA MTAUBA ;GET SELECTED UBA FOR MAGTAPE + STA UBANUM ;PASS TO COMMON SPOT FOR CHANNEL COMMAND LIST TO FIND + + MOV5B ;AND MOVE THE SELECTED MT BASE FOR RH BASE TO FIND + .ADDR MTBASE ;SELECTED MAGTAPE RH BASE ADDRESS + .ADDR RHBASE ;COMMON RH BASE REGISTER LOCATION + RET ;BACK TO MAILINE + + MA1000: D 0,0,,1,000 +HOMEWD: D 505,755,,000,000 ;"HOM" MEANS HOME BLOCK +ONES: D 777,777,,777,777 ;ALL ONES... +.SBTTL FILE SYSTEM +;--PAGE OF POINTERS FORMAT-- +; +0 POINTER TO FREE +; +1 LENGTH OF FREE + +; +2 POINTER TO MICRO-CODE +; +3 LENGTH OF MICRO-CODE + +; +4 POINTER TO MONITOR PRE-BOOT +; +5 LENGTH OF PRE-BOOT + +; +6 POINTER TO DIAG PRE-BOOT +; +7 LENGTH OF SAME + +; +10 POINTER TO BC1 MICRO-CODE +; +11 LENGTH OF SAME + +; +12 POINTER TO BC2 PRE-BOOT +; +13 LENGTH + +; +14 POINTER TO MONITOR BOOT PROGRAM +; +15 LENGTH OF SAME + +; +16 POINTER TO DIAGNOSTIC BOOT +; +17 LENGTH OF SAME + +; +20 POINTER TO BC2 ITSELF +; +21 LENGTH OF SAME + +; +22 POINTER TO FI-ABLE 0 +; +23 LENGTH OF SAME +; . +; . +; . +; +776 POINTER TO FI-ABLE 366(8) +; +777 LENGTH OF SAME + + ;ROUTINE TO "FIND THE 8080 FILE SYSTEM", WHICH IS REALLY JUST A PAGE +;OF PHYSICAL POINTERS, TO PHYSICAL DISK LOCATIONS +MICROP: LXI D,^O1002 ;FOR MICROCODE, ALWAYS GO TO 2ND POINTER +FILEINIT: PUSH D ;SAVE POINTER INTO THE FILE PAGE + CALL BTINT ;AND SET UP TO DO A READIN + POP D ;RESTORE "D,E"..KLUDGY WAY TO MAKE SUBROUTINE HAVE +FILESH: PUSH D ; MULTIPLE ENTRY POINTS + CALL DSKDFT ;FETCH CURRENT DISK DEFAULTS + + LXI H,00 ;CLR "H,L" + SHLD BLKADR ;AND SET THE DESIRED CYLINDER TO 00 + INX H ;BUMP H,L TO MAKE IT .EQ. 01 + SHLD BLKNUM ;NOW SET THIS INTO THE BLOCK NUMBER(HOME BLOCK) + + CALL CHKHOM ;GO SEE IF THIS PAGE HAS THE "HOM" BLK I.D. + JZ GOODPK ;IF YES, JUMP TO CONTINUE READ-IN + +;FALL THRU IF FIRST HOME BLOCK NO GOOD + MVI A,^O10 ;TRY ALTERNATE HOME BLOCK + STA BLKNUM ;SET BLOCK NUMBER TO ALTERNATE + + CALL CHKHOM ;TRY ALTERNATE + JNZ A.BTERR ;IF THIS ONES BAD, THEN GIVE UP +GOODPK: EXAM 1103 ;EXAMINE WORD WITH HOME BLOCK IN IT + ;NOW THAT YOUVE READ HOME BLOCK, FIND POINTER FILE +;AND TRANSFER THE ENTIRE MICRO-CODE INTO MOS MEMORY +;SHORT ROUTINE TO MOVE DATA FROM THE EMBUF INTO THE CHANNEL COMMAND LIST + CALL BLKRDR ;READ IN THE PAGE OF POINTERS FROM THE DISK + JC B.BTERR ;ERROR IN BOOT PROCESS DURING POINTER PAGE READ-IN + +;NOW EXAM THE REAL DESIRED DATA + POP H ;FETCH UP THE FILE POINTER ADDRESS + STC ;SET SIGN WHICH INDICATES AND EXAMINE + CALL EXMHL ;AND READ IT IN TO MEM + +;SHORT ROUTINE TO MOVE DATA FROM THE EMBUF INTO THE CHANNEL COMMAND LIST +BLKRDR: LHLD EMBUF+3 ;GET CYLINDER FROM SPECIAL HOME BLK PNTR + SHLD BLKADR ;SET CYLINDER IN CHANNEL COMMAND LIST + LHLD EMBUF ;GET TRACK SECTOR BYTE + SHLD BLKNUM ;SET INFO INTO THE TRCK/SECTOR WORD + + CALL DSXFR ;FINALLY READ THE FIRST PAGE OF THE DESIRED + RET + +;LITTLE ROUTINE TO READ IN THE HOME BLOCK, CHECK THAT IT IS A HOME BLOCK +; VIA THE "HOM" ID, AND RETURN Z-BIT SET IF IT IS +CHKHOM: CALL DSXFR ;EXECUTE DISK TRANSFER + JC A.BTERR ;BOOT ERROR "A", IF OOPS + + EXAM 1000 ;NOW EXAMINE THE HOME BLOCK ID + CALL CMP36 ;AND TRY OUT A COMPARE + .ADDR HOMEWD ;EXPECTED ID + .ADDR EMBUF ;AGAINST WHAT WAS JUST READ IN + RET ;AND OUT + +BTINT: INTON ;SET INTERNAL MODE ON + CLRB PARBT ;NO PARITYS + CLRB TRAPEN ;AND NO TRAPS WHILE BOOTING + CALL MRCMD ;AND DONT FORGET MR. RESET + RET + +;LITTLE ROUTINE TO SET UP DISK DEFAULTS +DSKDFT: LDA DSKUBA ;GET CURRENTLY SELECTED DISK UBA NUMBER + STA UBANUM ;SET INTO COMMAND LIST PLACE + + MOV5B ;AND SEND CURRENTLY SELECTED RHBASE + .ADDR DSBASE ;CURRENT DISK RH BASE + .ADDR RHBASE ;TO PLACE FOR COMMAND LIST TO FIND IT + RET ;OUT + .SBTTL CRAM LOADER CODE +DMEM2CR: MVI A,BT.BIT ;DO COUPLE ROUTINES A FAVOR, LOAD BIT +MEM2CR: STA BT.TYPE ;ACCUM HAD THE BOOTING TYPE..SAVE IT + LXI H,00 ;ZEROES TO "H,L" + PUSH H ;SAVE CURRENT CRAM ADDRESS + CALL CADWR ;AND THEN WRITE IT TO THE CRAM + MVI A,7 ;START WITH FUNCTION 7 + STA CRMFN +NEWPAG: MOV5B ;INITIALIZE MEM ADDRESS + .ADDR MA1000 ;WITH 1000 OCTAL + .ADDR MEMAD ;STANDARD MEM ADDRESS + +;CODE TO DECIDE IF WE NEED TO READ AN ADDITIONAL DISK SECTOR + LHLD MEMAD ;GET CURRENT MOS MEM ADDRESS +RD.EXM: MOV A,L ;GET 8 BITS OF ADDRESS TO BE EXAMINED + OUT A2835 ;SET PIECE OF ADDRESS INTO ADDRESS REGISTER + MOV A,H ;GET COUPLE MORE BITS + OUT A2027 ;SET INTO CSL BOARD ADDRESS REGISTER + MVI A,4 ;SPECIAL KEY TO MAKE "EXAMINE" WORK CORRECTLY + CALL EM.CRM ;GO DO A MEMORY EXAMINE, OF THE SHORT FLAVOR + + LHLD EMBUF ;GET 16 BITS OF THE MEMORY DATA + MOV A,H ;COPY TO ACCUM, SO THAT WE CAN MAKE IT 12 BITS + ANI ^O17 ;CLR THE BITS + MOV H,A ;PUT BACK INTO THE HI ORDER REG + + CALL WFUNC ;WRITE THE PIECE + LXI H,CRMFN ;GET CURRENT DIAG FUNCTION + DCR M ;DOWN COUNT + + LHLD EMBUF+1 ;GET 16 BITS OF THE MEMORY READ + + MVI C,4 ;NOW A QUICK LITTLE LOOP + XRA A ;CLR ACCUM TEMP +QQLOOP: MOV A,H ;COPY TO ACCUM + RAR ;ROTATE INTO THE C-BIT + MOV H,A ;PUT IT BACK + + MOV A,L ;TRY BOTTOM PIECE + RAR ;ROTATE C-BIT INTO THE TOP + MOV L,A ;PUT IT BACK + DCR C ;DOWN THE LITTLE COUNTER + JNZ QQLOOP ;CONTINUE + + CALL WFUNC ;WRITE THIS PIECE + LXI H,CRMFN ;DOWN THE FUNCTION COUNTER + DCR M ;DECREMENT + JP BBLOOP ;JUMP AROUND THIS STUFF IF NOT AT FUNCTION 0 + ;IF DONE FUNCTIONS 0-7, TRY A LITTLE RESET + MVI A,7 ;RESTART AT FUNCTION 7 + STA CRMFN ;SAVE IT + +;HERE IF FINSHED A CRAM WORD & NEED TO DO RESET. + POP H ;GET CRAM ADDRESS + INX H ;UPDATE + PUSH H + CALL CADWR ;NOW WRITE THIS, THE NEXT CRAM ADDRESS + MOV A,H ;NOW GET HI ORDER PIECE OF CRAM ADDR + ANI ^O10 ;IS IT .EQ. 4000 OCTAL YET?? + JZ SEEPAGE ;IF NOT 4000 OCTAL YET, CHECK FOR A NXT WORD + POP H ;AND RESTORE STACK BEFORE LEAVING + RET ;OTHERWISE ALL DONE + +BBLOOP: LHLD EMBUF+3 ;GRAB 16 BITS OF THE MEMORY DATA + MOV A,H ;PASS 8 BITS TO THE ACCUM, SO WE CAN MAKE IT 4 BITS + ANI ^O17 ;OFF UNNEEDED BITS + MOV H,A ;PUT IT BACK + CALL WFUNC ;WRITE THIS DATUM + LXI H,CRMFN ;GET FUNCTION + DCR M ;DOWN TO NEXT FUNCTION + +SEEPAGE: LHLD MEMAD ;GET THE CURRENT MEMORY ADDRESS + INX H ;GO TO NEXT ADDRESS + SHLD MEMAD ;SAVE THIS NEXT ADDRESS + MOV A,H ;TEST H FOR AT "2000" + ANI ^O4 ;IF "2000" WEIGHT BIT IS SET, TIME FOR NEW PAGE OF DATA + JZ RD.EXM ;IF MEM ADDRESS .EQ. 2000, THEN FALL THRU TO NEXT READIN + CALL NEXTCR ;ROUTINE TO FETCH NEXT PAGE OF CRAM DATA + JMP NEWPAG ;AND BACK TO BEGINNING + +;ELSE, MUST READ IN ANOTHER PAGE'S WORTH FROM CURRENT BOOT DEVICE +NEXTCR: LDA BT.TYPE ;FIND OUT WHAT KIND OF DEVICE WE ARE BOOTING FROM + CPI BT.BIT ;SEE IF DOING BOOT FROM THE DISK + JNZ TAPDEV ;IF FLAG .NE. BT.BIT, THEN BOOTING FROM MAGTAPE + +;FALL THRU TO DO BOOT FROM DISK + LXI H,QXFR ;SET UP FOR THE QUICK XFR COMMAND LIST + CALL CHNXCT ;READ IN, SHORT FORMAT(TRK/SEC/CYL IS PRESET) + JC C.BTERR ;ERROR IN READING CRAM + RET ;BACK TO CALLER + +;JUMP TO HERE TO DO BOOT FROM TAPE +TAPDEV: MVI A,READ.TYPE ;PASS TO CHANNEL CMD LIST EXECUTOR THE XFR TYPE + CALL QMXFR ;READ IN A SINGLE PAGE FROM MAGTAPE + RNC ;IF NOTHING BAD, RETURN + CALL NONFATAL ;IF BADNESS, SEE IF FATAL KIND OR NOT + JNZ C.BTERR ;ERROR IN READING THE CRAM + RET ;BACK TO CALLER + .SBTTL *** "FI" CMD *** +;COMMAND TO READ IN A PARTICULAR PAGE OF THE FILESYSTEM AND TO EXECUTE ITS +;CONTENTS AS IF THEY WERE TYPED IN 8080 COMMANDS +FICMD: CALL ARG16. ;COLLECT IT WHEN ITS THERE + +;BEWARE..IF YOU TYPE FI WITH A BOGUS ARGUMENT, THEN YOU LOSE.. +;HE WHO USES THE FI CMD BEST KNOW WHAT HE'S DOING + LXI D,^O1022 ;START WITH OFFSET "0" INTO THE "FI" FILES + DAD D ;ADD THIS TO THE NUMBER TYPED TO GET THE DESIRED + CALL FILEINIT ;READ IN THE DESIRED PAGE + JC L.BTERR ;IF ERR + +;NOW DO SOMETHING WITH THE STUFF TYPED... + MOV5B ;FIRST MUST GET INFO FROM MOS MEM TO 8080 RAM + .ADDR MA1000 ;INFO STARTS AT MOS MEME LOC 1000 + .ADDR MEMAD ;AND WE WILL TELL INTERNAL READER TO START THERE + + LXI D,E.BEG+2 ;A PLACE TO STORE ASCII BYTES FROM MEMORY +FI.GET: INTON ;NO PRINTING + CALL GATHER ;GO READ IN A WORD FROM MOS MEM + INTOFF ;OK TO PRINT NOW + MVI L,4 ;NOW ONLY 4 BYTES PER WORD ARE USEFUL + LXI B,EMBUF ;AND THIS IS WHERE IN 8080 RAM THE BYTES ARE +FI.MOV: LDAX B ;FETCH UP A BYTE + STAX D ;PUT IT IN PLACE + CPI ^O377 ;IS IT END OF STRING?? + JNZ FI.NXT ;IF NO, GO MOVE SOME MORE + + CALL MV.ALL ;GOT HERE, MOVE TO EXECUTE BUFFER + JMP DCODE ;AND GO DO IT + +;NOPE.. MOVE SOME MORE +FI.NXT: INX B ;UPDATE THE POINTERS + INX D + DCR L ;CHECK COUNT TO SEE IF WE'VE DONE 4 YET + JNZ FI.MOV ;IF NOT, GO MOVE THE NEXT BYTE FROM THE CURRENT WORD + JMP FI.GET ;YES, READ NEXT MEM WORD AND TRY IT + ;;**********PROPOSED INSTRUCTION ******************** +;;.SBTTL *** "B1" CMD *** +;;COMMAND TO READ IN A SECOND TYPE OF MICRO-CODE AND EXECUTE IT.. +;;I.E. BOOTCHECK 1 MICRO-CODE +;;B1CMD: LXI D,^O1010 ;GET THE CORRECT OFFSET +;; CALL FILEINIT ;READ IN THE FIRST PAGE +;; JC C.BTERR ;IF ERR +;; +;; MVI A,BT.BIT ;SAY THAT THIS IS A LOAD FROM DISK +;; CALL MEM2CRAM ;READ IT IN AS MICRO-CODE +;; CALL BT.GO ;START IT UP +;; RET ;THAT IT +.SBTTL *** "B2" CMD *** +;BOOTCHECK 2.. THIS LOADS IN A SEPARATE "PRE-BOOT", WHICH +;LOADS IN THE BOOT CHECK 2 +B2CMD: MVI A,^O12 ;GET THE OFFSET + STA RM100 ;SAVE IT SO THAT WE CAN USE SOME SUPER COMMON CODE + JMP BT.SRC ;THAT'S IT!!!! + .SBTTL *** "VD" CMD *** +;COMMAND TO VERIFY THE CONTENTS OF THE C-RAM AGAINST THE MICRO-CODE +;AS IT SITS ON DISK +VDCMD: CALL MICROP ;NOW READ IN HOME BLOCKS, THEN 1ST PAGE OF U-CODE + JC C.BTERR ;IF ERROR, GO TELL WORLD ABOUT IT + + MVI A,BT.BIT ;WENT OK.. SPECIFY A DISK TYPE OPERATION + JMP VERCRAM ;AND GO IN TO VERIFY THE CRAM + +.SBTTL *** "VT" CMD *** +;COMMAND TO VERIFY THE CONTENTS OF THE C-RAM AGAINST THE MICR-CODE +;AS IT SITS ON MAG TAPE +VTCMD: CALL MTSETUP ;GO TO SOME COMMON CODE TO LOOK AT MAGTAPES + MVI A,READ.TAPE ;TELL CHANNEL LISTER TO DO A READ IN + CALL MTXFR ;READ IN FIRST PAGE OF U-CODE OFF THE TAPE + JC A.BTERR ;IF ERROR, GO REPORT IT + + MVI A,MT.BIT ;WENT OK.. SPECIFY A TAPE OPERATION +;FALL STRAIGHT INTO THE CODE TO VERIFY THE CRAM + .SBTTL VERIFY CRAM CODE +;ROUTINES THAT DO READ INS FROM THE CURRENTLY SELECTED DEVICE +;AND COMPARES THAT HARD MICRO-CODE DATA AGAINST THE CURRENT +;CONTENTS OF THE CONTROL-STORE +VERCRAM: + STA BT.TYPE ;BEGIN BY SAVING THE DEVICE AGAINST WHICH WE WILL VERIFY + + MOV5B ;START BY SETTING MEMORY ADDRESS AT 1000 + .ADDR MA1000 ;A "1000" + .ADDR MEMAD ;PLACE WHERE MEM ADDRESS IS KEPT + LXI H,00 ;BEGIN WITH CRAM ADDRESS 00 + SHLD CRMAD ;SET CRAM ADDRESS TO ZEROES + JMP V.GO ;ENTER LOOP AT THE PROPER PLACE + +V.DONWD: LHLD CRMAD ;GET CURRENT CRAM ADDRESS + INX H ;AND UPDATE FOR NEXT TIME AROUND + MOV A,H ;PUT HI ORDER PIECE OF IT INTO ACCUM + ANI ^O10 ;SEE IF AT END OF CRAM YET + RNZ ;IF IT IS, ALL DONE, GO OUT + +;HERE IF REALLY READY TO DO A CRAM LOC +V.GO: CALL CADWR ;WRITE IT TO CRAM, BE IT GOOD OR BAD + SHLD CRMAD ;NOW SAVE ADDRESS WHILE WE DO SOME STUFF + CALL CP1 ;SINGLE CLOCK GETS CRAM CONTENTS TO CONTROL REG + CALL RCINT ;READ IN CONTENTS OF C-RAM AND SAVE IN 8080 RAM + +;HERE WHEN CRAM DATA IS SAFELY TUCKED AWAY IN THE 8080 RAM + LXI B,VERLST ;B,C PAIR POINTS TO LIST OF DATA OFFSETS + LXI D,CRMBF ;D,E PAIR POINTS TO ACTUAL DATA LIST(H,L PNTS EXPECTED) + +V.NXMEM: CALL GATHER ;HERE TO CALL ROUTINE THAT READS IN THE NEXT MEM WORD + MVI A,3 ;AND TAKE TIME OUT TO RESET THE 3 COUNTER + STA VERCNT ;SET UP A CLEAN COUNT + ;AND HERE BELOW BEGINS THE ACTUAL DATA COMPARES +V.BLP: LDAX B ;GET THE FIRST INDEX BYTE FROM THE LIST OF BYTES + ANI ^O77 ;OFF THE SIGNALS, AND CONTINUE +V.BLP1: LHLD EMBUF ;GET EXPECTED DATA INTO H,L REGISTER + INX B ;UPDATE B,C TO POINT AT FUNCTION READ + ADD E ;ADD AS AN OFFSET TO THE D,E PAIR + MOV E,A ;PUT THE GOOD ADDR BACK INTO "E" + MOV A,D ;AND GRAB THE HI ORDER FOR A SEC + ACI 0 ;ADD IN THE CARRY IF REQUIRED + MOV D,A ;PUT THE HI ORDER BACK AGAIN + + LDAX D ;NOW LOAD IN THE FIRST "ACTUAL" DATUM + INX D ;UPDATE POINTER TO ACTUAL + CMP L ;COMPARE AGAINST EXPECTED + JNZ V.ERR ;REPORT IF BADNESS + + MOV A,H ;GET UPPER 12 BITS OF THE EXPECTED + ANI ^O17 ;IF DATA WAS EQUAL, ONLY DISCREPENCY CAN BE IN B7-B4 + + MOV H,A ;GET THE 4 BITS OF DATA LEFT AFTER THE "AND" + LDAX D ;GET THE ACTUAL DATA TO ACCUM + CMP H ;SEE IF SAME +V.ERR: CNZ VERRPT ; AND B3-B0 SHOULD BE .EQ. 0.. IF NOT REPORT AS ERROR + DCX D ;FIX D TO LOOK AT THE BEGINNG OF THE "ACTUAL" 2 BYTES + +;NOW NEED TO CHOOSE IF NEED CHECK TWICE(FOR DOUBLE COPIES), OR IF END +;OF LIST FOR THIS CRAM WORD + INX B ;UPDATE POINTER INTO THE INDEXER LIST + LDAX B ;GET THE NEXT INDEX BYTE + RAL ;COPY SIGN INTO C-BIT + JC V.DONWD ;IF SET, END OF LIST.. GO DO NEXT CRAM WORD + + RAL ;WASN'T END OF LIST.. SEE IF A DOUBLE CHECKER + JC V.BLP ;JUMP BACK TO MAIN LOOP WITHOUT UPDATING IF YES + +;IF NOT A DOUBLE, MUST FALL THROUGH TO UPDATE EXPECTED + ;HERE WHEN MUST UPDATE EXPECTED..NOT A DOUBLE COPY +V.NXT: LXI H,VERCNT;LOAD CURRENT COUNT FOR HOW MANY COMPARE PER MEM WORD + DCR M ;DECREMENT THAT COUNT + JZ V.NXMEM ;IF DOWN TO ZERO, GO READ IN THE NEXT MEMORY WORD + + LXI H,EMBUF ;TELL SHR36 WHERE IT SHOULD SHIFT + CALL SHR36 ;IF NOT DOWN, SHIFT WHAT WE HAVE TO THE NEXT 12 BIT GRP + .BYTE 12. ;SPECIFY THE NEXT 12 BIT GROUP IS WHAT WE WANT + JMP V.BLP ;AND CONTINUE IN THE BIG LOOP + +;LIST OF INDEXER BYTES +.RADIX 8 +VERLST: .BYTE 0,17 ;READ FCN 17 (BITS 84-95) + .BYTE 2,16 ;READ FCN 16 (BITS 72-83) + .BYTE 2,15 ;READ FCN 15 (BITS 60-71) + .BYTE 2,14 ;READ FCN 14 (BITS 48-59) + .BYTE 2,13 ;READ FCN 13 (BITS 36-47) + .BYTE 102,12 ;READ FCN 12 (BITS 36-47) SECOND COPY + .BYTE 10,6 ;READ FCN 6 (BITS 24-35) + .BYTE 102,5 ;READ FCN 5 (BITS 24-35) SECOND COPY + .BYTE 2,4 ;READ FCN 4 (BITS 12-23) + .BYTE 10,0 ;READ FCN 0 (BITS 00-11) + .BYTE 200 ;END OF LIST MARKER +.RADIX 10 + ;SUBROUTINE TO READ IN THE NEXT WORD FROM MEMORY. +;ALSO CHECKS TO SEE IF AT THE END OF THE MEMORY PAGE(ADDR 1777), AND IF SO +;TO GO AND READ IN THE NEXT PAGE OF MICRO-CODE FROM THE DEVICE AGAINST +;WHICH WE ARE VERIFYING THE MICRO-CODE. +GATHER: PUSH D + PUSH B + + LHLD MEMAD ;GET CURRENT MEMORY ADDRESS + PUSH H ;SAVE CURRENT MEM ADDRESS + + MOV A,H ;GET THE HI ORDER PIECE OF THE MEM ADDRESS + ANI ^O4 ;SEE IF ADDRESS AT "2000" YET + JZ G.SKP ;IF NOT, SIMPLY GO READ IN THE NEXT WORD + +;ELSE MUST READ IN THE NEXT PAGE OF MICRO-CODE + CALL NEXTCR ;DO THE READ IN + + POP H ;GET OLD CRUMMY H,L OFF THE STACK + LXI H,^O1000 ;WANT TO RESET MEM ADDRESS TO BEGINNING OF PAGE + PUSH H ;PUT BACK ON STACK + SHLD MEMAD ;AND PASS NEW ADDRESS IN RAM +G.SKP: CALL EM2 ;EXAMINE THE NEXT MEMORY WORD + POP H ;GRAB THE ADDRESS WE WANT TO READ NEXT TIME + INX H ;UPDATE TO NEXT + SHLD MEMAD ;PUT IT BACK + POP B ;RESTORE THE REGS NOW + POP D + RET ;AND OUT + ;VERIFY ERROR REPORTER SUBROUTINE. REPORTS VERIFY ERRORS AS THEY HAPPEN +;AND THEN PERMITS THE VERIFIER TO CONTINUE VERIFYING THE REST OF THE CRAM +VERRPT: PUSH H ;SAVE CONTENTS OF H,L PAIR + PUSH D ;MUST ALSO SAVE D,E + INTOFF ;PRINT ALL THIS GOOD STUFF + + LXI H,CRMAD ;THEN PRINT THE CRAM ADDRESS OF THE FAILING CRAM WORD + CALL P16 ;AND PRINT OUT THE ADDRESS + + PSLASH ;THROW OUT A "/" + + LDAX B ;FETCH UP THE DIAG FUNC OF THE READ FAILURE + CALL P8BITA ;AND PRINT IT + + PCHAR ': ;SIMPLE CHARACTERS ARE ": A " + PSPACE + PCHAR 'A + PSPACE + + XCHG ; AND NOW H,L POINTS AT THE ACTUAL + DCX H ;NOW D,E POINTS TO THE ACTUAL + CALL P16 ;PRINT THE ACTUAL DATA + XCHG ;FIX SO H,L POINTS AT TEMP LOC ONCE AGAIN + PSPACE ;ANOTHER SPACE + PCHAR 'E ;A "W" STANDS FOR "WAS" + PSPACE + + LHLD EMBUF ;GET THE EXPECTED DATA INTO H,L PAIR + MOV A,H ;WANT TO STRIP ANY BITS ABOVE 12 BITS + ANI ^O17 ;KEEP ONLY RELEVANT BITS + MOV H,A ;PUT IT BACK + SHLD TMPB2 ;PUT IT IN THE TEMP PLACE + CALL P16. ;PRINT THE EXPECTED + PCRLF + + PUSH B ;SAVE B REG TOO + CALL DECNET ;IF THERE IS A HOST, TELL HIM TOO + POP B + INTON ;AND BACK TO INTERNAL MODE + POP D + POP H + RET + ;EXECUTE CHANNEL COMMANDS.... +DSXFR: LXI H,DSKSEQ ;PNTR TO COMMAND LIST +XCTNOW: CALL CHNXCT ;EXECUTE CHANNEL LIST + RET + +MTXFR: LXI H,MTASEQ ;PNTR TO COMMAND LIST +XCTMTA: STA SKP.GO ;ACCUM HAD XFR TYPE..SAVE IT + JMP XCTNOW ;GO EXECUTE THE CHANNEL COMMAND LIST + +QMXFR: LXI H,QTXFR ;PNTR TO COMMAND LIST + JMP XCTMTA ;GO EXECUTE THE CHANNEL COMMAND LIST + +MTRESET: LXI H,MTARST ;CHANNEL COMMAND LIST TO CLEAR ERROR FROM MAGTAPE + JMP XCTNOW ;GO EXECUTE THE CHANNEL COMMAND LIST + .SBTTL CHANNEL COMMAND LIST EXECUTOR +;ROUTINE TO A CHANNEL COMMAND LIST TYPE OPERATION, FOR DATA +;TRANSFERS FROM OUR SELECTED BOOT DEVICE.. +;COMMAND LIST IS CODED AS FOLLOWS +; THE LIST IS A SERIES OF 36-BITCOMMANDS. +;WE HAVE FREE USE OF BITS 0-17 AS COMMAND TYPES +; BITS 15,16,17 .EQ. 0 MEAN "DI" COMMAND +; BITS 15,16,17 .EQ. 1 MEAN "LI" COMMAND +; BITS 15,16,17 .EQ. 2 MEAN "EI" COMMAND +; BITS 15,16,17 .EQ. 3 MEAN "WAIT" COMMAND +; BITS 15,16,17 .EQ. 4 MEAN "ERRTST" COMMAND +; BITS 15,16,17 .EQ. 5 MEAN "END" OF COMMAND LIST +; BITS 15,16,17 .EQ. 6 MEAN "TWAIT" COMMAND +; BITS 15,16,17 .EQ. 7 MEAN "UBA" COMMAND + +;POINTER TO THE CURRENT COMMAND LIST IS ALWAYS STORED IN H,L +CHNXCT: INTON ;SET UP FOR INTERNAL MODE + PUSH B + PUSH D + PUSH H + +DSCON: LXI D,2 ;"D,E" GETS THE CONSTANT "2" + DAD D ;NOW "H,L" POINTS TO "DATA+2"(BITS 12-19) + + MOV B,H ;COPY "H,L" INTO "B,C" + MOV C,L + PUSH H ;SAVE "H,L" + MOV A,M ;GET BITS 12-19 INTO ACCUM + + RAR ;NOW JUSTIFY ACCUM AT BITS 16,17 + RAR ;TAKES 2 SHIFTS + ANI ^O17 ;OFF ALL BUT BITS 14,15,16,17 + MOV E,A ;NOW PUT INTO LO-ORDER HALF OF DOUBLE REG + LXI H,DSLST ;GET A PNTR TO THE DISPATCHING LIST + DAD D ;CREAT PNTR TO THE COMMAND + + MOV E,M ;GET LO ORDER PIECE OF CMD DISPATCH + INX H + MOV D,M ;GET HI ORDER PIECE OF CMD DISPATCH + XCHG ;ASSEMBLED ADDRESS TO "H,L" + LXI D,XFRRT ;NOW GET A PSEUDO RETURN PC TO PUT ON STACK + PUSH D ;AND PUT IT THERE + + PCHL ;DISPATCH TO THAT ASSEMBLED ADDRESS + + ;UPON COMPLETION OF THE COMMAND LIST COMMANDS, YOU GENERALLY +;RETURN HERE IN THE CODE +XFRRT: POP H ;GET THE POINTER TO CURRENT LOCATION IN COMMAND LIST + INX H ;MAKE IT POINT TO NEXT WORD IN THE LIST + JMP DSCON ;AND CONTINUE IN COMMAND LIST EXECUTOR + +;COMMAND LIST DISPATCH SELECTION +DSLST: .ADDR CMDDI ;DI CMD .EQ. 0 + .ADDR CMDLI ;LI CMD .EQ. 2 + .ADDR CMDEI ;EI CMD .EQ. 4 + .ADDR CMDWAIT ;WAIT CMD .EQ. 6 + .ADDR CMDERCHK ;ERRTST CMD .EQ. 10 + .ADDR CMDEN ;END CMD .EQ. 12 + .ADDR CMDTWAIT ;WAIT CMD WITH NO TIMEOUT. CHECKS FOR BIT TRUE .EQ. 14 + .ADDR CMDUBA ;LI TYPE CMD. NO OFFSETS, GOOD FOR UBA STUFF .EQ. 16 + ;CODE FOR "EI" COMMAND +CMDEI: ANA A ;CLR THE "C-BIT" + JMP CMDLI1 ;GO TO COMMON CODE FOR LI AND EI COMMAND + +;CODE FOR "LI" COMMAND +CMDLI: STC ;SET THE "C-BIT" +CMDLI1: PUSH PSW ;AND SAVE IT + MOV5B ;PASS THE COMMAND LIST EXECUTOR THE RHBASE ADDRESS + .ADDR RHBASE ;KEPT IN HERE + .ADDR IOAD ;USED IN HERE + + LXI H,IOAD+2 ;"H,L" PNTS TO DEST+2 + LDA UBANUM ;CURRENT UBA NUMBER INTO ACCUM + ORA M ;THROW IN THE CURRENT BITS + MOV M,A ;PUT IT ALL BACK + + DCX H ;NOW MAKE "H,L" POINT TO ADDR +0 + DCX H + DCX B ;MAKE "B,C" PAIR POINT TO SELECTED OFFSET FROM BASE + LDAX B ;GET SELECTED OFFSET + ADD M ;ADD OFFSET TO THE BASE + MOV M,A ;AND PUT THE WHOLE MESS BACK + POP PSW ;NOW GET STATE OF PROCESSOR FLAGS + RC ;IF "C" SET,IT WAS AN LI AND WE ARE DONE + +;CALL THRU IF "C" CLR..IT WAS EI AND WE MUST FINISH IT + CALL EI1 ;EXECUTE "EI" CMD + RET ;ALL DONE + ;CODE FOR LI TYPE COMMAND ONLY USING NO OFFSETS, TAKING THE ADDRESSES +;EXACTLY AS PRESENTED.. GOOD FOR UBA OPERATIONS, WHICH REQUIRE NO OFFSETS +CMDUBA: LXI D,IOAD+2 ;"D,E" PNTS TO DEST+2 + PUSH D ;SAVE THE ADDRESS OF UBA/RH ADDRESS + CALL MOV18B ;MOVE SOME DATA + POP H ;ADDR OF UBA/RH INTO H,L + LDA UBANUM ;CURRENT UBA NUMBER INTO ACCUM + ORA M ;THROW IN THE CURRENT BITS + MOV M,A ;PUT IT ALL BACK + RET ;WE ARE DONE + +;CODE FOR DI COMMAND +CMDDI: LDAX B ;GET DISP CODE TO SEE IF INDIRECT + ANA A ;CHECK THE SIGN BIT + JP DILOCL ;AND JUMP IF NO INDIRECTION + +;FALL TO HERE IF WAS INDIRECT + MOV L,C ;PASS ADDR IN "B,C" TO "H,L" + MOV H,B + DCX H ;NOW BACK UP PNTR TO HI ORDER PCE OF INDIRECT WRD + MOV B,M ;AND INTO B + DCX H ;NOW TO LO ORDER PIECE OF INDIRECT WORD + MOV C,M ;LO ORDER PIECE TO C AND DONE + INX B ;"B,C" MUST POINT TO SRC + 2 + INX B +DILOCL: LXI D,DMDAT+2 ;"D,E" POINTS TO DEST+2 + CALL MOV18B ;MOVE SOME STUFF AROUND + CALL DI1 ;EXECUTE THE DEPOSIT + RET ;AND BACK TO COMMAND LIST + + ;CODE FOR WAIT COMMAND(FOR WAITING FOR A TAPE TO FINISH, FOR EXAMPLE) +CMDWAIT: + XRA A ;CLEAR ACCUM + MOV D,A ;NOW CLR "D", THE REGISTER WE WILL USE FOR TIMEOUT COUNT + MOV E,A ;CLR "E" TOO + +WAITLP: PUSH B ;SAVE B,C + CALL CHKBIT ;CHECK BITS VERSUS DEVICE STATUS TO SEE IF SET(I.E READY) + POP B ;RESTORE B,C + RNZ ;IF READY BIT SET, ITS OK, GO AWAY + +;FALL THRU IF READY NOT SET + PUSH B ;SAVE B,C FROM DESTRUCTION + PUSH D ;SAVE TIME-OUT COUNT + CALL EI1 ;DO ANOTHER EXAMINE OF DEVICE STATUS TO SEE IF READY NOW + POP D ;GET THE TIME-OUT COUNT + POP B ;RESTORE B,C + INX D ;INCREMENT + MOV A,E ;SEE IF COUNT DOWN TO ZERO YET + ORA D ;USE TOP HALF TOO + JNZ WAITLP ;GO TRY AGAIN + +;FALL THRU IF DEVICE TIME'S OUT BEFORE GETTING A READY + JMP DEVERR ;GO REPORT "?BT" AND THE FAILED PC + +;CODE FOR TWAIT COMMAND +CMDTWAIT: PUSH B ;FIRST SAVE THE BC POINTERS + CALL EI1 ;READ THE CURRENT STATE AS IT IS NOW + POP B ;RESET B TO A GOOD VALUE + PUSH B ;AND SAVE IT FROM DESTRUCTION AGAIN + CALL CHKBIT ;NOW SEE IF APPROPRIATE BIT IS SET + POP B ;RESTORE + RNZ ;RETURN IF BIT WAS SET AS DESIRED + JMP DEVERR ;ELSE.. GO SAY ERR, BIT WAS NOT SET AS DESIRED + +;CODE FOR ERROR TEST COMMAND +CMDERCHK: PUSH B ;SAVE B,C + CALL CHKBIT ;FIRST GO CHECK TO SEE IF ANY OF DESIRED BITS SET + POP B ;AND RESTORE + RZ ;IF NONE SET, RETURN CAUSE ALL IS OK + +;FALL TO HERE IF SOME BITS SET..HAD DEVICE ERROR & THEREFORE "BOOT" FAILED +DEVERR: MOV H,B ;NOW COPY "B,C" TO "H,L" REGISTER + MOV L,C + + SHLD ERRCD ;"H,L" NOW HAS FAILING PC + INTOFF ;LET ALL MESSAGES PRINT NOW + XRA A ;CLR C-BIT, SO THAT IT WILL SET LATER, TO INDICATE ERR + JMP DEVEXIT ;GO EXIT WITH MESSING WITH PRINT FLAGS + ;CODE FOR THE END COMMAND +CMDEN: LXI D,MAD000 ;GUARANTEE CSL BUS ADDR REG .EQ. 0 AFTER XFR + CALL ADATP ;WRITE THE CSL BUS ADDRESS REG WITH 0'S + INTOFF ;CLR INTERNAL MODE + STC ;SET THE C-BIT, SO THAT IT WILL BE CLEARED LATER +DEVEXIT: CMC ;COMPLEMENT C-BIT, SO IT WILL SAY ERR, OR NO ERR + POP H ;THROW OUT PSEUDO RETURN FROM STACK TOP + POP H ;THROW OUT THE SAVED "H,L" + POP H ;AND RESTORE ALL THE REGISTERS + POP D ;THAT WE SAVED + POP B + MVI A,0 ;ACCUM WILL ALWAYS BE 0 ON EXIT FROM CMD LIST EXECUTOR + RET +;ROUTINE FOR MOVING 3 BYTES OF DATA +;"B,C" HAS SRC+2..."D,E" HAS DST+2 +MOV18B: MVI H,2 ;COUNT OF 3 IS HOW MANY TO MOVE + LDAX B ;GET PIECE OF SOURCE + ANI 3 ;ONLY INTERESTED IN BITS 18,19 + STAX D ;PUT AT DESTINATION + DCX B ;POINT TO NEXT RELEVANT BYTE + DCX D ;FOR SRC AND DST +MOV18X: LDAX B ;GET A PIECE OF THE SRC TO ACCUM + STAX D ;AND PUT AT DESTINATION PLACE + DCX B ;DOWN THE POINTER + DCX D ;DOWN THE OTHER POINTER + DCR H ;AND DOWN THE COUNTER.. + JNZ MOV18X ;CONTINUE TILL MOVED 3 BYTES + RET ;THEN OUT + +;COMMON ROUTINE FOR CHECKING DEVICE STATUS, FOR EITHER DEVICE ERRORS OR +;READY BIT TRUE..MUST BE CALLED IMMEDIATLY AFTER AN "EI." COMMAND +CHKBIT: LHLD EMBUF ;GET CURRENT DEVICE STATUS INTO "H,L" + DCX B ;MAKE B PNT TO +1 + DCX B ; AND MAKE IT PNT TO +0 + LDAX B ;BYTE OF DESIRED INTO ACCUM + ANA L ;COMPARE AGAINST CURRENT DEVICE + RNZ ;IF NON-ZERO, NO NEED TO LOOK FURTHER + + INX B ;IF 1ST BYTE WAS ZERO, BUMP PNTR TO LOOK AT NEXT BYTE + LDAX B ;NEXT BYTE INTO THE ACCUM + ANA H ;COMPARE VERSUS DESIRED + RET ;PLAIN RETURN..Z BIT WILL BE SET APPROPRIATELY + .SBTTL *** "BC" CMD *** +;CODE WHICH PERFORMS THE VERY FAMOUS BOOT CHECK I +BCCMD: CALL MRCMD ;MAKE SURE MACHINE IS STOPPED + INTON ;SET UP INTERNAL MODE + CLRB ERRCD ;BEGIN BY CLEARING THE ERROR CODES + CLRB ERRCD+1 ;MUST CLEAR BOTH HALVES +.IF NDF,NEEDRM + + CLRRM BUSAD ;WILL GENERATE A STARTING BUFFER OF (400000,,0) + MVI A,^O10 ;THIS TURNS OUT TO BE BIT0 IN 36-BIT LAND + STA BUSAD+4 ; SET IT + + LXI B,^O400 ;SET B=1, C=0 +BC.ALP: PUSH B ;SAVE COUNTERS + CALL DBCMD ;EXECUTE THE DEPOSIT BUS + +;CHECK FOR FAILURE + LDA ERRCD ;FETCH AN ERROR CODE + ANA A ;SET 8080 CONDITION CODES + JNZ BCA.ERR ;GO STANDARD ERROR REPORT IF ERR FOUND + +;NO ERROR, GENERATE THE NEXT DATUM + LXI H,BUSAD ;POINT TO A BUFFER TO BE SHIFTED + CALL SHR36 ;SHIFT 36 BITS(I.E. FLOAT A 1 OR 0) + .BYTE 1 ;SHIFT ONLY ONE PLACE AT A TIME + +;NOW CHECK FOR END OF TEST + POP B ;GRAB UP THE CURRENT LOOP COUNTERS + INR C ;UP COUNT FOR THIS DATAUM + MOV A,C ;COPY TO ACCUM + CPI 36. ;NOW SEE IF FLOATED DOWN THE ENTIRE 36 BIT WORD + JC BC.ALP ;JUMP IF NOT DONE A GROUP OF 36 YET.. + +;HERE WHEN DONE A GROUP OF 36, SEE IF THIS WAS FIRST OR SECOND TIME THROUGH + DCR B ;DECREMENT "TIMES THROUGH THE LOOP" COUNTER + JM BC.2ND ;IF MINUS, TIME TO GET OUT..GO NEXT PHASE OF TEST + +;HERE WHEN DONE FIRST WORD, TIME TO SET UP TO FLOAT A 0 THROUGH A FIELD +;OF ONES + MOV5B ;MOVE 2ND DATA PATTERN + .ADDR BC.DB2 ;INIT 2ND PATTERN TO BE (377777,,777777) + .ADDR BUSAD ;AND THIS IS THE PLACE THAT THE DB COMMAND USES + + MVI C,00 ;RESET THE COUNTER + JMP BC.ALP ;AND GO ROUND FOR THE SECOND TIME...... +BC.DB2: D 377,777,,777,777 + ;BOOTCHECK CODE FOR EXECUTING A TEST OF THE CRAM AND ITS ABILITIY TO HOLD +;ALL ONES AND ZEROES, AND TO SEE IF ITS ADDRESSING LOGIC WORKS AS +;IT SHOULD.... +BC.2ND: LXI H,00 ;START AT CRAM ADDRESS 00 +BC.BLP: CALL W.CRMZ ;WRITE THE LOCATION WITH ALL ZEROES + INX H ;UPDATE TO NEXT CRAM ADDRESS + MOV A,H ;NOW CHECK TO SEE IF DONE ALL + ANI ^O10 ;IS ADDRESS AT "4000" YET?? + JZ BC.BLP ;BACK AND ZERO MORE IF NOT YET + +;NOW READY FOR COMBINED ADDRESS AND DATA TEST + MVI H,00 ;L IS ALREADY .EQ. 0, NOW MAKE H,L PAIR .EQ. 0 +BC.BL1: CALL CADWR ;WRITE CURRENT CRAM ADDRESS + PUSH H ;AND SAVE IT FOR A WHILE + CALL CP1 ;CLOCK TO GET THE CONTENTS OF THAT LOC TO C.R. + CALL RCINT ;NOW READ-IN THE CONTENTS OF THE C.R. + LXI H,00 ;DATA TO VERIFY AGAINST IS 00 + CALL V.VER ;VERIFY CONTENTS OF C.R. TO BE ALL 0 + CALL A.CRMO ;NOW WRITE THAT LOCATION WITH ALL ONES + POP H ;RETRIEVE CURRENT CRAM ADDRESS + INX H ;UP TO THE NEXT ADDRESS + MOV A,H ;COPY HI HALF TO ACCUM, SO CAN CHECK FOR 4000 + ANI ^O10 ;ADDRESS AT "4000"?? + JZ BC.BL1 ;BACK INTO LOOP IF NOT YET.. + +;WHEN DONE HERE, FALL INTO MEMORY PART OF BOOT CHECK +;A PAGE MOS MEMORY CHECK +BC.3RD: CALL ZMCMD ;FIRST CLEAR THE ENTIRE MOS MEMORY(AT LEAST TRY) + + MOV5B ;SET UP THE INITIAL DATA + .ADDR ONES ;DATA FOR DEPOSITING IS ALL ONES + .ADDR DMDAT ;.. THE DEPOSIT BUFFER + + MOV5B ;SET UP THE STARTING MEMORY ADDRESS + .ADDR MA1000 ;START AT ADDRESS 1000 + .ADDR MEMAD ;.. MEMORY ADDRESS BUFFER + +BC.CLP: CALL EM2 ;EXAMINE A LOCATION + CALL CMP36 ;THEM COMPARE RESULTS..DATA SHOULD BE ALL ZEROES + .ADDR EMBUF ;THIS IS THE ACTUAL READ-IN DATA + .ADDR ZEROES ;VERSUS 36-BITS OF 0'S + JNZ BC.CERR ;GO TO ERROR REPORT IF NOT ALL ZEROES + +;FALL THRU IF THAT WENT OK. + CALL DM2 ;NOW DEPOSIT ONES INTO THAT LOC AND CONTINUE + + CALL EM2 ;WHILE WE ARE AT IT, WE'LL CHECK ALL ONES + CALL CMP36 ;DO THE 36-BIT COMPARE + .ADDR EMBUF ;THIS STUFF JUST READ IN + .ADDR ONES ;AGAINST ALL ONES + JNZ BC.CERR ;IF BAD, SAY SO.. + + LHLD MEMAD ;FETCH UP THE CURRENT MEMORY ADDRESS + INX H ;UPDATE TO THE NEXT + MOV A,H ;COPY HI PIECE TO THE ACCUM + ANI ^O4 ;SEE IF REACHED ADDRESS 2000 + SHLD MEMAD ;REPLACE THE UPDATED ADDRESS FIRST + JZ BC.CLP ;AND CONTINUE IF HAD NOT REACHED THE MAX + + RET ;RETURN..DONE ALL BOOT CHECK OK + ;SUBROUTINES REQUIRED FOR THE CRAM TESTING +;SUBROUTINES FOR WRITING ALL ONES AND ALL ZEROES INTO A SELECTED CRAM +;LOCATION.. DESIRED ADDRESS PASSED IN THE H,L REGISTER(FOR W.XXX CALLS) +;USES CURRENTLY SELECTED ADDRESS FOR (A.XXX CALLS) +A.CRMO: PUSH H ;SAVE H,L + LXI H,-1 ;H,L TO ALL ONES INDICATES THE ALL ONES DATA DESIRED + JMP W.LOC ;GO COMMON CODE + +W.CRMZ: CALL CADWR ;WRITE DESIRED ADDRESS +A.CRMZ: PUSH H ;SAVE H,L + LXI H,00 ;SET TO ZERO, DATA IS ALL ZEROES +W.LOC: MVI C,7 ;TAKES 8 FUNCTION WRITES TO DO ALL OF ONE CRAM LOC +W.LP: MOV A,C ;GET CURRENT FUNCTION TO ACCUM + STA CRMFN ;PUT FUNCTION INTO LOC USED BY STANDARD ROUTINE + CALL WFUNC ;WRITE ONE OF THE 8 PIECES OD A CRAM LOC + DCR C ;DOWN COUNT + JP W.LP ;AS LONG AS .GE. 0, KEEP GOING + POP H ;HERE WHEN DONE ALL 8 + RET ;NOW GET OUT OF HERE. + ;ROUTINE TO VERFIY THAT A CRAM LOCATION IS INDEED ALL ONES OR ALL ZEROES. +;NO ARGUMENTS PASSED TO THIS ROUTINE +V.VER: SHLD CRMBF+^O14 ;ALL DONT CARE LOCS OF THE "READ" ARE FUDGED + SHLD CRMBF+^O16 ; TO MATCH EXPECTED DATA + SHLD CRMBF+^O20 ; THERE ARE 12 DONT CARE LOCATIONS + + SHLD CRMBF+^O30 ; SOME ARE VARIOUS ADDRESS(NXT/CURRENT/SUBRTN) + SHLD CRMBF+^O32 ; AND SOME ARE JUST UNBUFFERED COPIES OF THE + SHLD CRMBF+^O34 ; BUS + + MOV A,L ;NOW COPY EXPECTED DATA INTO "B,C" PAIR + CMA ;FIRST COMPLIMENT + MOV C,A ;THEN MOVE + MOV A,H ; NEED BOTH HALVES PLEASE + CMA ;COMPLIMENT + MOV B,A ;THEN MOVE + + LXI H,CRMBF ;NOW POINT TO BEGINNING OF BUFFER WHERE EXPECTED DATA +V.BCLP: MOV E,M ;IS KEPT.. PROCEED TO COPY BUFFER DATA INTO + INX H ;(UPDATE POINTER) + MOV D,M ;THE D,E REGISTER PAIR + INX H ;AND UPDATE MEMORY POINTER AFTER EACH MOVE + XCHG ;SWAP, SO NOW "H,L" HAS BUFFER, "D,E" HAS POINTER + DAD B ;ADD COMPLIMENT TO EXPECTED...SHOULD GET 0. + INX H ; TWO'S COMPLIMENT , THAT IS.. + MOV A,L ;PIECE TO ACCUM + ORA H ;"OR" IN THE OTHER PIECE + JNZ BC.BERR ;AND GO HANDLE ERROR IF RESULTS .NE. 0 + +;YOU FELL THROUGH TO HERE IF DATA CHECK WAS OK.. + XCHG ;SWAP..NOW "H,L" HAS POINTER, "D,E" HAS 00 + MVI A,<&^O377> ;CHECK IF DONE + CMP L ;SEE IF AT LAST LOCATION IN LIST + JNZ V.BCLP ;JUMP BACK IF NOT YET + RET ;ELSE OK TO RETURN + ;ERROR REPORTING +BC.CERR: LHLD MEMAD ;GRAB UP FAILED MEM ADDRESS + MVI B,^O100 ;GET A BIT TO SET IN ERROR PRINTOUT + JMP BCC.ERR ;GO PROCESS STANDARD ERROR TYPEOUTS +BC.BERR: POP H ;CLEAR A RETURN ADDRESS + MVI B,^O200 ;BIT TO SET FOR CRAM FAILURES + POP H ;NOW GATHER UP THE CURRENT CRAM ADDRESS +BCC.ERR: SHLD ERRCD ;SAVE 1 BYTE BY DEPOSITING TWICE + MOV A,H ;HI HALF TO THE ACCUM + ORA B ;THROW IN A WEIGHT SO NUMBER WILL DIFFER + STA ERRCD+1 ;PUT NUMBER INTO ERROR CODE LOC + JMP BCB.ERR ;AND GO PRINT OUT THE CORRECT ERROR STUFF + BCA.ERR: POP B ;GET COUNTER OFF THE STACK + MOV A,C ;SUBTEST TO ACCUM + STA ERRCD ;PLACE FROM WHICH TO REPORT ERRORS +BCB.ERR: CLRB NOPNT ;GUARANTEE PRINTING ON + PLINE ERRMSG ;"?BC" + LXI H,ERRCD ;POINT AT THE ERROR I.D. + CALL P16 ;PRINT + JMP MMERR ;OUT +.ENDC + \ No newline at end of file diff --git a/src/kshack/condef.m80 b/src/kshack/condef.m80 new file mode 100644 index 00000000..b2f2eda6 --- /dev/null +++ b/src/kshack/condef.m80 @@ -0,0 +1,500 @@ +;*******8080 CONSOLE FOR DIGITAL EQUIPMENT CORP. KS10******* + +.SBTTL *CONSOLE ERROR CODES DEFINED* + + + ;LISTING CONTROLS +.NLIST BEX +.LIST MD,MC,MEB +;SYMBOL ASSIGNMENTS + +RAMST = 8192. ;FIRST "RAM" MEMORY ADDRESS +KPAINI = 1700. ;VALUE FOR .44 SEC BETWEEN WORD31 CHECKS +KATIMX = 35. ;NUMBER OF TIME IN A ROW KA HAS TO BE THE SAME + ;KATIMX .EQ. 14. IS 6 SECONDS, .EQ.35. IS 15 SEC +RUNFP = ^O300 ;I/O REG CONTAING CPU "RUN FLOP" +TTYSW = ^O300 ;I/O REG FOR TTY FRONT PANEL SWITCHES +SMSTS = ^O301 ;I/O REG FOR KS10 STATUS BITS +BOOTSW = ^O301 ;I/O REG FOR HARDWARE "BOOT" SWITCH +CARRIER = ^O302 ;I/O REG FOR READING KLINIK CARRIER +SMPAR = ^O100 ;I/O REG FOR ENABLING KS10 PARITY DETECT +RESET = ^O100 ;I/O REG FOR ISSUEING KS10 BUS RESET +REFERR = ^O101 ;I/O REG FOR READING MOS MEM REFRESH ERR FLAG +LIGHTS = ^O101 ;I/O REG FOR WRITING THE PANEL LIGHTS +DTR = ^O101 ;I/O REG FOR WRITING THE DATA TERMINAL READY +R.BUSY = ^O102 ;I/O REG FOR READING "MEM BUSY" OR "I/O BUSY" +R.RESET = ^O102 ;I/O REG FOR READY IF RESET WENT TRUE(VIA AC LO) +CRMCTL = ^O204 ;I/O REG FOR ACCESSING CRAM +DIAG = ^O205 ;I/O REG FOR DIAG FUNCTION BITS +CLKCTL = ^O206 ;I/O REG FOR SETTING KS10 CLK CTL BITS +BUSCTL = ^O210 ;I/O REG FOR KS10 BUS COMM. +CPUCTL = ^O212 ;I/O REG FOR KS10 "RUN,EXECUTE,CONTINUE" +CTYCTL = ^O201 ;I/O REG FOR UART CONTROL/STATUS +CTYDAT = ^O200 ;I/O REG FOR UART DATA BUFFER +REMCTL = ^O203 ;REMOTE UART CONTROL REGISTER +REMDAT = ^O202 ;REMOTE UART DATA REGISTER +DTARB = ^O114 ;I/O REG FOR DATA CYCLE OF BUS ARB.. +BUSARB = ^O115 ;I/O REG FOR BUS ARBITRATION SIGNALS +INT2KS = ^O116 ;I/O REG FOR INTERRUPTING KS-10 +D2835 = ^O0 ;R DATA BITS 28-35 +D2027 = ^O1 ;R DATA BITS 20-27 +D1219 = ^O2 ;R DATA BITS 12-19 +D0411 = ^O3 ;R DATA BITS 04-11 +D0003 = ^O103 ;R DATA BITS 0-3 +A2835 = ^O103 +A2027 = ^O105 +A1219 = ^O107 +A0411 = ^O111 +A0003 = ^O113 +W2835 = ^O102 +W2027 = ^O104 +W1219 = ^O106 +W0411 = ^O110 +W0003 = ^O112 + .SBTTL****NUMERICAL VALUE ASSIGNMENTS +BPI16 = ^O2000 ;"DENSITY/SLAVE" DEFAULT FOR 1600 BPI TAPES +BPI8 = ^O1000 ;"DENSITY/SLAVE" DEFAULT FOR 800 BPI TAPES +EOLCH = ^O377 ;END-OF-LINE CODE +ARBRESP = ^O20 ;BIT FOR "BUS REQ" +DATACK = 01 ;BIT FOR "DATA ACKNOWLEDGE" +NONXMEM = ^O100 ;BIT FOR "NON-EXISTANT MEMORY" +TRPDEF = ^O20 ;BIT SAYS DEFAULT TRAP ENABLE ON +DEFLTE = ^O174 ;BITS SAY DEFAULT: CACHE ENABLE, 1MSEC CLK ENABL + ;ALL PARITY ON +BIT15 = ^O100000 ;THIS IS BIT15(IF U COUNT RIGHT TO LEFT) +BT.BIT = 1 ;BIT SAYS DOING BOOTSTRAP FROM DISK +MT.BIT = 2 ;BIT SAYS DOING BOOTSTRAP FROM MAGTAPE +.MODE0 = 1 ;FLAG SAYS KLINIK MODE 0 +.MODE1 = 2 ;FLAG SAYS KLINIK MODE 1 +.MODE2 = 4 ;FLAG SAYS KLINIK MODE 2 +.MODE3 = ^O10 ;FLAG SAYS KLINIK MODE 3 +.MODE4 = ^O20 ;FLAG SAYS KLINIK MODE 4 (MANUFACTURING MODE) +CARRLOSS = ^O3 ;INTERRUPT CODE FOR "KLINIK CARRIER LOSS" +KL.ACTIVE = ^O2 ;INTERRUPT CODE FOR WHEN KLINIK BECOMES ACTIVE +STMSK = ^O373 ;MASK FOR THE STATE LIGHT +STBIT = ^O4 ;STATE BIT +.IN = ^O333 ;THE "IN" INSTRUCTION +.OUT = ^O323 ;THE "OUT" INSTRUCTION +.RET = ^O311 ;THE "RET" INSTRUCTION + .SBTTL****ASCII CHARACTER VALUE ASSIGNMENTS +Q.OUT = 00 ;NULL CHAR..STANDS FOR "QUICK.OUT" +SYNC = 01 ;SYNC CHAR FOR APT MESSAGES +CRCHR = ^O15 ;CARRIAGE RETURN +LFCHR = ^O12 ;LINE FEED +COMMA = ^O54 ;ASCII FOR COMMA +CNBCK = ^O34 ;CONTROL-BACKSLASH +BELL = ^O7 ;A BELL FOR WHEN HOST SYSTEMS GIVE ME GRIEF +STAR = ^O52 ;A STAR * +QUO = ^O42 ;DOUBLE QUOTES " +LBSIGN = ^O43 ;POUND SIGN # +RPAREN = ^O51 ;RIGHT PAREN ) +ALT = ^O33 ;ALT MODE +CNTLZ = ^O32 ;CONTROL-Z +CNTLY = ^O31 ;CONTROL-Y ENDS MODE 4 +CNTLU = ^O25 ;CONTROL-U +CNTLS = ^O23 ;CONTROL-S +CNTLQ = ^O21 ;CONTROL-Q +CNTLO = ^O17 ;CONTROL-O +CNTLC = ^O3 ;CONTROL-C +RBOUT = ^O177 ;RUB-OUT +CCHR = ^O103 ;"C" +DCHR = ^O104 ;"D" +TAB = ^O11 ;HORIZONTAL TAB +SPACE = ^O40 ;SPACE +SLASH = ^O57 ;SLASH "/" +BSLASH = ^O134 ;BACKSLASH "\" +DOLLAH = ^O44 ;DOLLAR SIGN "$" +PERCNT = ^O45 ;"%" +QUES = ^O77 ;"?" +ARROW = ^O76 ;"^" +UCHR = ^O125 ;"U" +OCHR = ^O117 ;"O" +UPARR = ^O136 ;"^" +ONE = ^O01 ;"1" +TWO = ^O02 ;"2" +THREE = ^O03 ;"3" +FOUR = ^O04 ;"4" +FIVE = ^O05 ;"5" +SIX = ^O06 ;"6" +SEVEN = ^O07 ;"7" +EIGHT = ^O70 ;"8" THE ASCII NUMBER +NINE = ^O71 ;"9" THE ASCII NUMBER +TEN = ^O12 ;"10" + ;NUMERICAL ASSIGNMENTS TO GENERATE THE OFFSETS USED IN COMPUTING +;DEVICE ADDRESSES FROM ANY RH BASE ADDRESS + .RADIX 8 +P.00 = 0 +P.02 = 2 +P.04 = 4 +P.06 = 6 +P.10 = 10 +P.12 = 12 +P.14 = 14 +P.16 = 16 +P.20 = 20 +P.22 = 22 +P.24 = 24 +P.26 = 26 +P.30 = 30 +P.32 = 32 +P.34 = 34 +P.36 = 36 +P.40 = 40 +P.42 = 42 +P.44 = 44 +P.46 = 46 +D776 = 776 +D772 = 772 + .RADIX 10 +;DRIVE CONTROLLER REGISTER IS 776440..FOLLOWING COMMANDS APPLY + ; 7=REWIND + ; 11=DRIVE CLEAR + ; 25=ERASE + ; 27=WRITE TAPE MARK + SKP.TAPE=^O31 ; 31=SPACE FORWARD(SKIP A FILE) + ; 33=SPACE REVERSE(SKIP A FILE, MOVING TAPE IN REVERSE) + ; 51=WRITE CHECK FORWARD + ; 57=WRITE CHECK REVERSE + ; 61=WRITE FORWARD + READ.TAPE=^O71 ; 71=READ FORWARD(GO!) + ; 77=READ REVERSE(GO!) +;DEFAULT VALUES FOR CHECKSUM COUNTS, SO THAT ASSEMBLIES WITH 3 PROMS WILL WORK + CHKSM0 = 0 + CHKSM1 = 0 + CHKSM2 = 0 + CHKSM3 = 0 + .SBTTL****MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES + +;PCHAR--- +; PRINTS A SINGLE CHARACTER, WHICH IT FINDS IN THE TRAILING BYTE +; CLOBBERS ACCUM +.MACRO PCHAR XCHR + RST 1 ;GO PRINT CHAR IN TRAILING BYTE + .BYTE XCHR ;CHAR TO PRINT + + .ENDM + +;KCHAR--- +; PRINT A SINGLE CHARACTER ON THE KLINIK LINE ONLY. CHAR TO BE PRINTED PASS +; AS A TRAILING ARG +.MACRO KCHAR XCHR + CALL KCHR ;GO PRINT THE CHARACTER + .BYTE XCHR + + .ENDM + +;PLINE--- +; PRINTS A LINE OF CHARACTERS, POINTER PASSED AS TRAILING ARG +; AND END OF LINE SIGNALED BY A "0" BYTE +.MACRO PLINE XMS + RST 3 ;PRINT LINE OF CHARS + .ADDR XMS ;BUFF TO PRINT + + .ENDM +;KLINE--- +; PRINTS A LINE OF CHARACTERS, POINTER PASSED AS TRAILING ARG +; AND END OF LINE SIGNALED BY A "0" BYTE +.MACRO KLINE XMS + CALL KLINE ;PRINT LINE OF CHARS + .ADDR XMS ;BUFF TO PRINT + + .ENDM +;INTOFF--- +; EXECUTES THE OLD "INTERNAL MODE OFF" SUBROUTINE.., BUT BY USING THE +; RESTART INSTRUCTION CALL, WE SAVE 30.+ BYTES OVER "CALL INTOFF" +.MACRO INTOFF + RST 6 ;GO EXIT FROM INTERNAL MODE + + .ENDM +;INTON--- +; EXECUTES THE OLD "INTERNAL MODE ON" SUBROUTINE.., BUT BY USING THE +; RESTART INSTRUCTION CALL, WE SAVE 30.+ BYTES OVER "CALL INTON" +.MACRO INTON + RST 2 ;GO SET INTERNAL MODE + + .ENDM + ;CLINE--- +; PRINTS A LINE OF CHARACTERS, POINTER PASSED IN (H,L), +; AND END OF LINE SIGNALED BY A "0" BYTE +.MACRO CLINE XMS + LXI H,XMS ;PASS POINTER TO THE CHARACTERS + CALL CLINE ;PRINT LINE OF CHARS + + .ENDM + +;PCRLF--- +; PRINTS CARRIAGE RETURN-LINE FEED +; LEAVES ALL REGISTERS IN TACT +.MACRO PCRLF + CRLF ;GO PRINT CARRIAGE RETURN LINE FEED + + .ENDM +;SSCLK--- +; ISSUES A SINGLE KS10 CLOCK..CLOBBERS THE ACCUMULATOR +.MACRO SSCLK + MVI A,02 ;BIT TO SET "SINGLE CLK" TO KS10 + OUT CLKCTL ;ISSUE THE SINGLE CLOCK + + .ENDM +;PTAB--- +; PRINTS A TAB +; CLOBBERS ACCUM +.MACRO PTAB + PCHAR TAB ;GO PRINT A TAB + + .ENDM +;PSPACE--- +; PRINTS A " " SPACE +; CLOBBERS ACCUM +.MACRO PSPACE + PCHAR SPACE ;GO PRINT A SPACE + + .ENDM + ;PSLSH--- +; PRINTS A "/" SLASH +; CLOBBERS ACCUM +.MACRO PSLASH + PCHAR SLASH ;GO PRINT A SLASH + + .ENDM +;ENDCMD---MACRO TO DO THE RIGHT STUFF +; AT THE END OF A COMMAND..COMMON CODE FOR FINISHING ALL INSTRS +.MACRO ENDCMD + RET ;RETURN TO CALLER + + .ENDM +;BUSRESP--- MACRO TO READ I/O REG 301Q +; IN ORDER TO CHECK ANY OF THE BITS WHICH +; ARE READABLE IN THAT REGISTER.. THE BIT +; OR BITS TO BE CHECKED IS PASSED AS A +; TRAILING ARGUEMENT "DB" TO A RST INSTR. +; ;THE EXECUTION OF THE RESTART ACCOUNTS +; FOR THE 2 "NOP" TIME REQUIRED FOR THE +; BUS ARBITRATOR TO GRANT THE BUS. THIS +; MACRO RETURNS MAINLINE WITH THE Z-BIT SET +; IF THE REG 301 DOES !NOT! MATCH THE TRAILING +; ARG THAT WAS PASSED AND WITH THE Z-BIT CLEAR +; IF THERE IS A "TRUE" IN ANY OF THE BIT POSITIONS +; PASSED... +.MACRO BUSRESP XXX + CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE + .BYTE XXX ;BITS TO BE CHECKED + + .ENDM +.MACRO D ARG,ARG1,NUL,ARG2,ARG3 + .NLIST + + .RADIX 8 + + .BYTE ARG3 & 377 + Q.1 = < & 1> ! < & 376> + Q.2 = < & 3> ! < & 374> + Q.3 = < & 7> ! < & 370> + Q.4 = & 17 + .BYTE Q.1 + .BYTE Q.2 + .BYTE Q.3 + .BYTE Q.4 + + .RADIX 10 + .LIST + +.ENDM + .MACRO LI. ARG2,ARG3 + .RADIX 8 + + +ARG = 0 +ARG1 = 0 +NUL = 0 + + + Q.1 = < & 1> ! < & 376> + Q.2 = < & 3> ! < & 374> ! <2*4> + .BYTE Q.1 + .BYTE ARG3 & 377 + .BYTE Q.2 + .RADIX 10 + +.ENDM + + +.MACRO EI. ARG2,ARG3 + .RADIX 8 + + +ARG = 0 +ARG1 = 0 +NUL = 0 + + Q.1 = < & 1> ! < & 376> + Q.2 = < & 3> ! < & 374> ! <4*4> + .BYTE Q.1 + .BYTE ARG3 & 377 + .BYTE Q.2 + .RADIX 10 + +.ENDM + .MACRO DI. ARG2,ARG3 + .RADIX 8 + +ARG = 0 +ARG1 = 0 +NUL = 0 + + .BYTE ARG3 & 377 + Q.1 = < & 1> ! < & 376> + Q.2 = < & 3> ! < & 374> + .BYTE Q.1 + .BYTE Q.2 + + .RADIX 10 +.ENDM + + +.MACRO DI.INDIRECT ARG3 + .RADIX 8 + .ADDR ARG3 + .BYTE ^O200 + + .RADIX 10 +.ENDM + +.MACRO TWAIT ARG3 + .RADIX 8 + .ADDR ARG3 + .BYTE <14*4> + + .RADIX 10 +.ENDM + +.MACRO WAIT ARG3 + .RADIX 8 + .ADDR ARG3 + .BYTE <6*4> + + .RADIX 10 +.ENDM + .MACRO ERRTST ARG3 + .RADIX 8 + .ADDR ARG3 + .BYTE <10*4> + + .RADIX 10 +.ENDM +.MACRO UBA. ARG2,ARG3 + .RADIX 8 + + +ARG = 0 +ARG1 = 0 +NUL = 0 + + + .BYTE ARG3 & 377 + Q.1 = < & 1> ! < & 376> + Q.2 = < & 3> ! < & 374> ! <16*4> + .BYTE Q.1 + .BYTE Q.2 + .RADIX 10 + +.ENDM + +.MACRO ENDLST + .RADIX 8 + + .BYTE 0 + .BYTE 0 + .BYTE <12*4> + .RADIX 10 + +.ENDM + .MACRO MOV5B + RST 4 + .BYTE 0 +.ENDM + +.MACRO CRLF + RST 4 + .BYTE 2 +.ENDM + +.MACRO ARG16 + RST 4 + .BYTE 4 +.ENDM + +.MACRO RUN.. + RST 4 + .BYTE 6 +.ENDM + +.MACRO ARG36 + RST 4 + .BYTE 8 +.ENDM + +.MACRO CLRRM FOO + RST 4 + .BYTE 10. + .ADDR FOO+5 +.ENDM + .MACRO EXAM FOO + .RADIX 8 + CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS + .ADDR FOO ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG + .RADIX 10 +.ENDM + +.MACRO DEPOS FOO + .RADIX 8 + ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE + CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR + .ADDR FOO ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG + .RADIX 10 +.ENDM + +.MACRO RD.REG FOO + IN FOO ;READ AN I/O REG + CMA ;AND ALWAYS COMPLEMENT +.ENDM + +.MACRO SETZM FOO + CLRRM DMDAT + DEPOS FOO +.ENDM + +.MACRO TSTRDY FOO + .RADIX 8 + IN FOO ;READ DESIRED UART STATUS + ANI 01 ;CHECK IF SET; ZBIT=0 IF READY; ZBIT=1 IF NOT YET READY + .RADIX 10 +.ENDM + +.MACRO LONG.DELAY ARG + LXI H,200. * ARG ;SET UP THE TIMING COUNT IN H,L REG + CALL LTLOOP ;AND GO DELAY ABOUT 1 SECOND FOR EACH (300 COUNT) +.ENDM + ;MACRO TO SAVE SPACE ON OPERATIONS THAT WANT TO CLEAR +;A LOCATION IN THE RAM.. ELIMINATES EVERY XRA/STA PAIR, AND +;INSERTS INSTEAD AN RST/BYTE PAIR.. AT BEST, AN XRA AND AN STA +;ARE ELIMINATED. AT WORST, A 3 BYTE STA IS REPLACED WITH +;A 2 BYTE RST/BYTE. +.MACRO CLRB XX + .NLIST + OFFSET= XX - ^O20000 +.IF LE, ^O400-OFFSET +.IFF + RST 5 + .BYTE OFFSET +.IFT + .ERROR OFFSET,;BYTE OUT OF RANGE ON CLRB MACRO +.ENDC +.LIST +.ENDM + + CHKSM0=-^O60023 + CHKSM1=-^O33145 + CHKSM2=-^O17724 + CHKSM3=-^O173452 + \ No newline at end of file diff --git a/src/kshack/dr.m80 b/src/kshack/dr.m80 new file mode 100644 index 00000000..df4dceba --- /dev/null +++ b/src/kshack/dr.m80 @@ -0,0 +1,100 @@ +.SBTTL ****DISK TRANSFER CHANNEL COMMAND LIST**** + +DSKSEQ: + +;A MINOR NOTE: 40000 WEIGHT BIT IS "VALID" +; : 100000 WEIGHT BIT IS "36-BIT XFR" + + UBA. 763,001 ;ADDRESS OF UBA IS FIRST ELEMENT OF THE LIST + DI. 140,001 ;VALID & "36 BIT XFR" FOR PAGE 1 (1000-1777) + LI. D776,P.10 ;GET DRIVE STATUS & CONTROL REG, SO CAN SET UNIT + DI.INDIRECT UNITNM ;NOW SET THE UNIT NUMBER + EI. D776,P.12 ;ADDRESS OF DRIVE STATUS + TWAIT 400 ;CHECK THAT THE DRIVE IS PRESENT + WAIT 200 ;CHECK & WAIT FOR READY + LI. D776,P.10 ;ADDR OF DRIVE STATUS REG + DI. 0,40 ;ISSUE CONTROLLER CLR + DI.INDIRECT UNITNM ;SET TO UNIT # + LI. D776,P.00 ;ADDR OF CONTROLLER STATUS REG + DI. 0,11 ;ISSUE DRIVE CLEAR + DI. 0,21 ;SET "READ-IN-PRESET" + LI. D776,P.12 ;GET TO THE DRIVE STATUS REGISTER + WAIT 200 ;WAIT FOR IT TO BE READY + TWAIT 100 ;NOW CHECK THAT "PRE-SET" HAS SET VOLUME VALID + LI. D776,P.06 ;ADDR TRACK/SECTOR REG + DI.INDIRECT BLKNUM ;EMPTY FOR NOW + LI. D776,P.34 ;ADDR OF CYLINDER REG + DI.INDIRECT BLKADR ;EMPTY FOR NOW +QXFR: LI. D776,P.02 ;ADD OF WORD COUNT REG + DI. 176,000 ;512 WORDS IS 1024 18-BIT BYTES(A PAGE) + LI. D776,P.04 ;ADDR OF UNIBUS ADDRESS REG + DI. 4,000 ;SET SM10 MEM ADDR TO 1000 + LI. D776,P.00 ;BACK TO STATUS REG + DI. 0,71 ;ISSUE READ + EI. D776,P.00 ;NOW READ TO CHECK FOR ERRORS IN XFER + WAIT 200 ;CHECK FOR READY BIT TRUE.. + EI. D776,P.12 ;CHECK DRIVE STATUS REG ITSELF + ERRTST 40000 ;TEST "ERR" BIT +;IF IT WAS OK, THEN CHECK THE CONTROLLER FOR ERRORS + EI. D776,P.00 ;EXAMINE CONTROLLER + ERRTST 060000 ;DRIVE RDY, NOW SEE IF ENCOUNTERED ERRORS + ENDLST ;END OF CHANNEL COMMAND LIST + .SBTTL TAPE TRANSFER CHANNEL COMMAND LIST +;DRIVE CONTROLLER REGISTER IS 776440..FOLLOWING COMMANDS APPLY +; 7=REWIND +; 11=DRIVE CLEAR +; 25=ERASE +; 27=WRITE TAPE MARK +; 31=SPACE FORWARD(SKIP A FILE) +; 33=SPACE REVERSE(SKIP A FILE, MOVING TAPE IN REVERSE) +; 51=WRITE CHECK FORWARD +; 57=WRITE CHECK REVERSE +; 61=WRITE FORWARD +; 71=READ FORWARD(GO!) +; 77=READ REVERSE(GO!) + +MTASEQ: UBA. 763,001 ;ADDRESS OF UBA PAGING RAM + DI. 40,001 ;SET VALID IN PAGE 1 + LI. D772,P.10 ;SET ADDRESS OF DRIVE CONTROL REGISTER + DI. 0,40 ;ISSUE CONTROLLER AND SLAVE CLR + DI.INDIRECT TAPEUNIT ;SET TAPE UNIT # + LI. D772,P.32 ;SLAVE SELECT/FORMAT/DENSITY REG + DI.INDIRECT DEN.SLV ;SET SLAVE, FORMAT, DENSITY(TEMP:DENS=1600,F=0,S=0) + EI. D772,P.12 ;READ THE DRIVE STATUS, TO MAKE SURE IT EXISTS + TWAIT 400 ;CHECK THE "DRIVE PRESENT" BIT + WAIT 200 ;IF WAS PRESENT, WAIT FOR IT TO BE READY + LI. D772,P.06 ;FRAME COUNT REGISTER + DI. 0,0 ;FRAME COUNT TO 0 IS MAX NUMB OF FRAMES + LI. D772,P.00 ;SET ADDRESS TO RH11 CONTROL REGISTER + DI. 0,7 ;ISSUE "REWIND" TO TAPE + EI. D772,P.12 ;READ THE DRIVE STATUS TO CHECK FOR READY + WAIT 200 ;WAIT FOR REWIND TO COMPLETE +QTXFR: LI. D772,P.04 ;CONTROLLER TO MEMORY DEST. REG + DI. 4,000 ;SET KS10 START ADDRESS TO 1000 + LI. D772,P.02 ;SET ADDRESS TO WORD COUNT REGISTER + DI. 176,000 ;1 PAGE OF 512 WORDS IS 1024 18-BIT BYTES + LI. D772,P.06 ;FRAME COUNT REGISTER + DI. 0,0 ;FRAME COUNT TO 0 IS MAX NUMB OF FRAMES + LI. D772,P.00 ;SET ADDRESS TO RH11 CONTROL REGISTER + DI.INDIRECT SKP.GO ;ISSUE "XFER CMD"(31=SKIP .OR. 71=RD-IN) + EI. D772,P.12 ;READ THE DRIVE STATUS TO CHECK FOR READY + WAIT 200 ;WAIT FOR FILE READ TO COMPLETE + EI. D772,P.14 ;LOOK AT THE DRIVE ERROR REGISTER +RETRY.: ERRTST 070300 ;ERRORS WORTH RETRYING?? +FRMERR: ERRTST 103400 ;SEE IF THIS WAS A CORRECTABLE TYPE ERROR + EI. D772,P.12 ;READ THE DRIVE STATUS TO CHECK FOR ERRORS + ERRTST 40000 ;GET ANY DRIVE ERRORS?? + LI. D772,P.00 ;NOW ADDRESS TO CONTROLLER STATUS + ERRTST 60000 ;CHECK FOR ERRORS THERE. + ENDLST ;END OF CHANNEL COMMAND LIST + ;QUICK LITTLE ROUTINE TO RESET THE MAGTAPE AFTER IT SUFFERS AN +;IGNORABLE ERROR +MTARST: LI. D772,P.10 ;SET ADDRESS OF DRIVE CONTROL REGISTER + DI. 0,40 ;ISSUE CONTROLLER AND SLAVE CLR + DI.INDIRECT TAPEUNIT ;FIX UNIT NUMBER + LI. D772,P.04 ;CONTROLLER TO MEMORY DEST. REG + DI. 4,000 ;SET KS10 START ADDRESS TO 1000 + LI. D772,P.06 ;FRAME COUNT REGISTER + DI. 0,0 ;FRAME COUNT TO 0 IS MAX NUMB OF FRAMES + ENDLST ;QUICK OUT + \ No newline at end of file diff --git a/src/kshack/hcore.m80 b/src/kshack/hcore.m80 new file mode 100644 index 00000000..d8769d7c --- /dev/null +++ b/src/kshack/hcore.m80 @@ -0,0 +1,1768 @@ +.SBTTL**** KS10 CONSOLE HARDCORE **** +.SBTTL **"RST" INSTRUCTION CODE** + +;AT POWER UP, ALWAYS BEGIN AT 0000 + + .= 0000 + NOP ;NO-OPS FOR 2 INSTR CYCLES + NOP ; LETS 8080 SETTLE DOWN + + DI ;GUARANTEE INTERRUPTS DISABLED + JMP PWRUP ;BEGIN WITH INITIALIZATION CODE + +;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;BEGIN CODE FOR "PCHAR" WITH A "RST 1" + .= ^O10 + + XTHL ;GET POINTER TO TRAILING ARG + MOV A,M ;CHAR INTO ACCUM + INX H ;UPDATE POINTER TO RETURN ADDRESS + XTHL ;RESTORE RETURN ADDRESS TO STACK + JMP PCHR ;AND GO.... + +;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;SUBROUTINE TO SET INTERNAL STATUS(I.E. DONT TYPE ON TTY) + .= ^O20 + +INTON: PUSH H ;SAVE THE LIL BUGGER + LXI H,NOPNT ;GET VALUE OF FLAG + INR M ;INCREMENT BY ONE + POP H ;RESTORE THE REG WE SAVED + RET ;AND RETURN + + ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;BEGIN CODE FOR "PLINE" + .= ^O30 + + XTHL ;GET PNTR TO TRAILING ARG + MOV E,M ;GET LO ORDER PIECE + INX H ;UPDATE PNTR + MOV D,M ;GET HI ORDER PIECE + INX H ;UPDATE PNTR + JMP PLNE ;AND GO TO ACTUAL ROUTINE + +;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;BEGIN CODE FOR "TRAP" OR "UUO" TYPE SUBROUTINE CALLS + .= ^O40 + + XTHL ;SAVE "H,L" WHILE GETTING PC + MOV A,M ;GET INDEX INTO SUBROUTINE DISPATCH LIST + INX H ;UPDATE "PC" TO POINT AT RETURN + XTHL ;PUT BACK RETURN AND RESTORE "H,L" + PUSH H ;NOW SAVE "H,L" WHILE WE SET UP DISPATCH + JMP RTNDIS ;GO CALCULATE SUBROUTINE TO DISPATCH TO.. + +;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;THIS CODE CLEARS A SINGLE BYTE OF RAM SPACE, IN THE RANGE +;FROM 20000-20377 + .= ^O50 + + XTHL ;SAVE "H,L" WHILE GETTING PC + MOV A,M ;GET INDEX INTO SUBROUTINE DISPATCH LIST + INX H ;UPDATE "PC" TO POINT AT RETURN + XTHL ;PUT BACK RETURN AND RESTORE "H,L" + PUSH H ;NOW SAVE "H,L" WHILE WE SET UP DISPATCH + JMP CLRBYT ;GO CALCULATE SUBROUTINE TO DISPATCH TO.. + +;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;THIS CODE EXECUTES THE "INTERNAL MODE OFF" FUNCTION, TURNING OFF +;THE PRINTING OF 8080 FUNCTIONS EXECUTED INTERNALLY. "INTOFF" IS +;CALLED AT LEAST 15 TIMES, SO THIS RESTART CODE SAVES AT LEAST +;30 BYTES OVER "CALLS INTOFF" + .= ^O60 + + PUSH H ;SAVE THE LIL BUGGER + LXI H,NOPNT ;CLEAR ACCUM + DCR M ;DECREMENT PRINT FLAG + POP H ;RESTORE THE REG WE SAVED + RET ;AND RETURN + +;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS +;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS +;BEGIN CODE FOR HANDLING INTERRUPTS + .= ^O70 + + DI ;GUARANTEE INTERRUPTS DISABLED + PUSH PSW ;SAVE + PUSH B ; EVERYTHING + PUSH D ; ONTO THE STACK + PUSH H + + JMP INTRP ;AND GO TO PROCESS THE INTERRUPT... + ;MAINLINE CODE BEGINS HERE + .= ^O100 + +.SBTTL **POWER UP START LOCATON** +;BEGIN BY SETTING UP 8080 STACK POINTER +PWRUP: LXI SP,RAMST+^O2000 ;LOAD STACK PNTR WITH TOP RAM LOC + +;********************************************* +;WILL BE TAKEN OUT WHEN WE PUT IN THE POWER UP SELF TEST + +;MUST SET DISPATCH LIST AND CLEAR RAM + LXI H,RAMST ;SET "H,L" REGISTER TO START RAM ADDR + LXI D,^O2000 ;COUNTER TO FILL REST OF RAM W 0'S + +CLRLP: MVI M,00 ;CLEAR A RAM LOC + INX H ;NEXT RAM LOCATION + DCX D ;DOWN COUNTER + MOV A,E ;LO ORDER PIECE TO ACCUM + ORA D ;THROW IN THE HI ORDER PIECE + JNZ CLRLP ;CONTINUE TILL DONE +;*************************************************** + ;BEGIN PROCEEDURE FOR INITIALIZING KS10 +;MUST INDIVIDUALLY CLEAR KS10 FLOPS "RUN","EXECUTE",& "CONTINUE" +; BECAUSE THEY ARE NOT RESET BY KS10 BUS RESET + XRA A ;SET ACCUM=0 +;SET 0'S TO "RUN,EXECUTE,CONT" + OUT CPUCTL ;***** I/O WRT 212/0 ***** + +;ISSUE KS10 BUS RESET + CALL MRINT ;DOES RESET AND SETS DEFAULT PARITY & TRAPS + .SBTTL **INITIALIZE UARTS** +;RAM BUFFERS HAVE BEEN INITIALIZED.. NOW MUST READ FRONT +; PANEL SWITCHES & INITIALIZE "UART" + IN TTYSW ;***** I/O READ 300Q ***** + CMA ;FIX INVERSION + + LXI B,^O2200 ;THIS SETS B=^O4 AND C=^O200 + MOV H,A ;H WILL HOLD CTY STOP BIT FOR US.@BIT POS 7 + RAR ;BIT 4 MOVES TO BIT 3 + RAR ;BIT MOVES TO BIT 2 + MOV E,A ;E WILL HOLD KLINIK LENGTH BIT. @BIT POS 2 + RAR ;BIT 6 IS AT 4 FROM OTHER SHIFTS, NOW TO BIT 3 + RAR ;AND TO BIT 2 + MOV L,A ;L WILL HOLD CTY LENGTH BIT. @BIT POS 2 + MOV A,H ;ORIGINAL BACK TO ACCUM + RAL ;BIT 5 TO BIT 6 + RAL ;AND TO BIT 7 + MOV D,A ;D WILL HOLD KLINIK STOP BIT. @BIT POS 7 + +;NOW BEGIN MASKING OPERATIONS TO ISOLATE THE DESIRED UART BIT SETTINGS + MOV A,C ;MASK OF OCTAL 200 INTO ACCUM + ANA H ;ACCUM HAS ONLY CTY STOP BIT + MOV H,A ;COPY BACK TO H + MOV A,C ;MASK TO ACCUM + ANA D ;ACCUM HAS ONLY A STOP BIT + MOV D,A ;COPY BACK TO D + +;NOW MASK FOR THE LENGTH BITS + MOV A,B ;MASK OF OCTAL 4 INTO ACCUM + ANA L ;ACCUM NOW HAS CTY LENGTH BIT ONLY + ORA H ;THROW IN THE CTY STOP BIT + ORI ^B01001010 ;ADD IN THE CONSTANT BITS + OUT CTYCTL ;SET THE UART MODE.......... + +;NOW SET MODE FOR THE KLINIK STUFF + MOV A,B ;MASK OF OCTAL 4 INTO ACCUM + ANA E ;ACCUM NOW HAS KLINIK LENGTH BIT ONLY + ORA D ;THROW IN THE KLINIK STOP BIT + ORI ^B01001010 ;ADD IN THE CONSTANT BITS + OUT REMCTL ;SET THE KLINIK UART MODE + ;NOW ENABLE THE UART TO RECEIVE AND TRANSMIT + MVI A,^B00010101 ;BITS FOR UART CONTROL +;SET UART TO RECEIVE AND TRANSMIT + OUT CTYCTL ;***** I/O WRT 200/025 ***** + + MVI A,^O20 ;ONE BIT TO SAY RESET THE UART + OUT REMCTL ;RESET THE KLINIK UART BUT DO NOT ENABLE IT!! + + IN CTYDAT ;***** I/O RD 201***** READ 1 DUMMY CHAR OUT OF UART + IN REMDAT ;***** I/O RD 203***** READ 1 DUMMY CHAR OUT OF UART + + CALL BFRST ;INIT TTY INPUT BUFFER + .SBTTL 8080 PROM CHECKSUMMER +;CODE TO COMPUTE A CHECKSUM FOR EACH OF THE 2K 8080 PROM PIECES +;FIRST COMPUTE THE CHECKSUMS FOR EACH PROM, THEN DO SIMPLE TEST ON THE 8080 +;RAM..BEGIN WITH THE PROMS + LXI H,00 ;START AT PROM ADDRESS 0 +LCHKR: XRA A ;CLEAR ACCUM + MOV C,A ;CLEAR B,C PAIR + MOV B,A ;"B,C" TO BE USED AS ADDEND + MOV E,A ;CLEAR D,E PAIR + MOV D,A ;"D,E" TO HOLD CURRENT COUNT OF CHECKSUM + +A256: MOV C,M ;GET A BYTE + INX H ;UPDATE MEM POINTER + XCHG ;PUT CURRENT CHECKSUM SUB TOTAL INTO H,L + DAD B ;THROW IN AN ADDEND + XCHG ;RETURN H,L TO RIGHTFUL PLACE + +;NOW QUICK CHECK FOR THE END OF PROM + MOV A,L ;GET LO ORDER OF CURRENT PROM ADDRESS + ANA A ;SET CONDITION CODES + JNZ A256 ;IF .EQ. 0,WE'VE DONE 256 LOCS, IF .NE. 0, DO MORE + +;FALL TO HERE WHEN DONE A CHUNK OF 256..SEE IF ITS ON A PROM BOUNDARY NOW + MOV A,H ;GET HI ORDER PIECE OF ADDRESS + ANI ^O7 ;IF THIS .EQ. 0, THEN WE ARE AT A BOUNDARY + JNZ A256 ;IF .NE 0, THEN KEEP TRYING + ;FALL THRU HERE WHEN WE'VE COMPLETED A PROMS WORTH + MOV A,H ;GET HI ORDER, WHICH CORRESPONDS TO "WHICH PROM" + RRC ;JUSTIFY AT EDGE OF THE ACCUM + RRC + RRC + DCR A ;DECREMENT MAKES "0-3" INSTEAD OF "1-4" + ADD A ;DOUBLE THIS VALUE TO MAKE IT ON 16 BYTE BOUNDARIES + + PUSH PSW ;SAVE THIS VALUE FOR A BIT + PUSH H ;AND SAVE OUR CURRENT POINTER + JNZ DEV ;IF DOING PROM ZERO, ELIMINATE THE ACTUAL CHECKSUM COUNT + +;FELL THRU TO HERE TO DO ACTUAL CHECKSUM ELIMINATION +;EXECUTED WHEN CHECKSUMMING PROM 0. IT REMOVES THE ACTUAL CHECKSUM VALUES +;FROM THE COMPUTED CHECKSUM, AS WE CANNOT SOLVE THE CHECKSUM FEEDBACK +;LOOP PROBLEM + PUSH PSW ;SAVE ACCUM + LXI H,CHECKS ;H,L GETS A POINTER TO THE LIST OF CHECKSUMS + MVI A,8. ;START WITH A COUNT OF 8, FOR THE EIGHT BYTES WE MUST SUB +DEVLP: STA T80DT ;SAVE COUNT IN RAM, SO WE CAN USE ACCUM + MVI B,^O377 ;IN B,C PAIR, ENSURE UPPER HALF .EQ. -1 + MOV A,M ;GET CHECKSUM BYTE TO ACCUM + CMA ;NEGATE IT + MOV C,A ;THROW IT INTO A 16 BIT ENTITY + INX B ;AND MAKE B,C PAIR 2'S COMPLIMENT + + XCHG ;GET CURRENT COMPUTED CHECKSUM TO H,L + DAD B ;"SUBTRACT" THE BYTE WE'VE ASSEMBLED.(2'S COMP ADDITION) + XCHG ;PUT H,L/D,E PAIR RIGHT + INX H ;AND UPDATE THE POINTER INTO THE LIST + LDA T80DT ;GET OUR CURRENT COUNT FROM THE RAM + DCR A ;DECREMENT + JNZ DEVLP ;CONTINUE IN THE LOOP + + LXI B,00 ;NOW GUARANTEE B,C PAIR IS ALL GONE +;FALL THRU WHEN FINISHED + POP PSW ;RESTORE ACCUM + DEV: MOV C,A ;GET CURRENT PROM NUMBER INTO C + LXI H,CHECKS ;H,L POINTS TO THE TABLE OF CHECKSUM + DAD B ;ADD INDEX, AND NOW (M) PNTS TO EXPECTED CHECKSUM + MOV C,M ;COPY EXPECTED CHECKSUM INTO C + INX H + MOV B,M ;AND B, MAKES "B,C" PAIR + INX H ;AND KEEP COUNT UP + +;NOW D,E HAS CALCULATED CHECKSUM AND B,C HAS EXPECTED CHECKSUM + XCHG ;H,L NOW HAS CALCULATED CHECKSUM + DAD B ;IF CHECKSUM OK, RESULT OF THIS SHOULD .EQ. 0 + MOV A,L ;GET LO PIECE + ORA H ;THROW IN HI PIECE..CONDITION CODE FLAGS NOW SET + + XCHG ;D,E NOW HAS THE RESULTS OF THE ADDITION + POP H ;BEFORE JUMPING ON CONDITION CODES, FIRST FIX REGISTER + JNZ CHKERR ;IF H,L WAS .NE. 0, THEN WE HAD PROM CHECKSUM ERROR... + +;FALL THRU IF CHECKSUM WAS OK + POP PSW ;RESTORE INDEX INTO "WHICH PROM" WE ARE IN + CPI 6 ;SEE IF DONE ALL + JNZ LCHKR ;JUMP BACK TO BEGINNING IF NOT DONE ALL + +;FALL THRU IF DONE ALL..PROMS CHECKSUM OK + JMP XXX230 ;SO AVOID THE ERROR PRINTOUT CODE + ;YOU JUMPED TO HERE IF YOU ENCOUNTERED A CHECKSUM ERROR. +ROMMSG: .ASCIZ /?CHK / ;IF PROM CHECKSUM FAILS, USE THIS MESSAGE +CHKERR: PLINE ROMMSG ;PRINT "?CHK " + POP PSW ;RETRIEVE PROM NUMBER + RRC ;DIVIDE DOWN, SINCE WE DOUBLED IT BEFORE + INR A ;MAKE PROM TYPE-OUT BE 1-4 + ORI ^O60 ;MAKE IT ASCII + CALL PCHR ;GO PRINT IT + PCRLF ; + ;FINAL STEP IS TO ENABLE PARITY DETECTION IN THE KS10 +; DEFAULT IS: PARITY DETECTION ON..DATA PATH PARITY DETECION ENABLED +XXX230: MVI A,DEFLTE ;INIT ENABLES TO BE ON + OUT SMPAR ;***** I/O WRT 100/174 ***** + +;LITTLE ROUTINE TO LOAD ALL DEFAULT CONSTANTS INTO THE 8080 RAM +;THIS ROUTINE SAVE ABOUT 40. BYTES OF PROM, OVER USING LXI'S,SHLD'S +;MVI'S & STA'S + LXI H,KATIM1 ;LIST OF DESTINATION LOCATIONS BEGINS HERE + LXI D,PRMLST ;LIST OF DATUMS FOR THE RAM INIT +RAMMER: LDAX D ;GET BYTE FROM THE DATA LIST + CPI ^O252 ;TEST FOR END OF LIST + JZ XXX235 ;CONTINUE PROM INIT + +;ELSE MORE RAM TO INITIALIZE + MOV M,A ;PUT GOOD STUFF IN RAM + INX H ;UPDATE POINTERS + INX D + JMP RAMMER +PRMLST: + .ADDR KPAINI ;KATIM1(2) KEEP ALIVE INITIAL COUNTER +.IIF DF,SCECOD, .BYTE -1 ;FOR SCE ADR INIT +.IIF DF,SCECOD, .BYTE -1 ;FOR SCE ADR INIT + .ADDR MODE0 ;MODDIS(2) INIT THE KLINIK LINE TO MODE 0 + .ADDR REINI ;NORMAL INSTR ENDS WILL GO TO REINIT + .ADDR ENVBUF ;ENVPNT(2) APT PNTER FOR ENVELOPES SENT TO THE HOST + .BYTE DEFLTE ;PARBT(1) INIT ENABLES TO BE ON + .BYTE TRPDEF ;TRAPEN(1) INIT ENABLES THE HARDWARE TRAPS + .BYTE ^O14 ;MTAUBA(1) DEFAULT MAGTAPE UBA NUMBER IS "3" + .BYTE ^O4 ;DSKUBA(1) DEFAULT DISK UBA NUMBER IS "1" + .BYTE ^O10 ;STATE(1) STATE BEGINS WITH DTR TRUE + .BYTE ^O41 ;LSTMSG(1) FIRST APT MSG SHOULD BE 136(NOT OF 41) + D 0,0,,2,0 ;DEN.SLV(5) GET DEFAULT VALUE FOR ALL TAPES +.MTBASE: D 0,0,,772,440 ;MTBASE(5) INITIAL DEFAULT MTA RHBASE ADDRESS +.DSBASE: D 0,0,,776,700 ;DSBASE(5) INITIAL DEFAULT DSK RHBASE ADDRESS + .BYTE -1 ;RPINI(1) SO CAN MAKE IT -1 + .BYTE ^O252 ;END OF LIST MARKER + +XXX235: MVI A,^O25 ;BIT TO RESET THE UART + OUT REMCTL ;RESET THE KLINIK UART AND ENABLE IT!! + MVI A,^O10 ;GET A BIT TO SET "DATA TERMINAL READY" + OUT DTR ;SET IT. + PLINE INIMS ;PRINT VERSION AND ID + INTON ;SET INTERNAL MODE + CALL EM1 ;DO PSUEDO EXAMINE TO SET MEM LATCHES + CALL EBCMD ;EXAMINE THE BUS, TO SEE IF ZERO + EI ;ENABLE INTERRUPTS + + CALL CMP36 ;NOW CHECK RESULTS OF THE "EB" CMD + .ADDR EMBUF ;THE RESULTS READ FROM THE BUS + .ADDR MAD000 ; VERSUS A WORD OF ALL ZEROES + + JZ PWRCHK ;IF OK, GO TO AUTO BOOT +;FALL THRU IF ERRORS ENCOUNTERED + INTOFF ;LEAVE INTERNAL MODE + PLINE INIER ;SAY "INITIALIZE ERROR" + JMP REINI ;AND GO OUT + + ;JUMP TO HERE IF DOING PWR FAIL RESTART +PWR.FAIL: CALL MICROP ;READ IN POINTERS AND READY TO GO + JC C.BTERR ;IF BOMBED, GIVE UP + CALL DMEM2CRAM ;GO READIN THE MICRO-CODE + + CALL BT.GO ;START MICRO-CODE + CLRRM TMPBF2 ;CLEAR A BUFFER + MVI M,^O70 ;POWER FAIL START ADDRESS IS "70" + + MVI A,4 ;CODE 4 INDICATES PWR FAIL + STA GOCODE ;SAVE IN RESTART INDICATOR + CALL STINT ;GO START MACHINE, USE INTERNAL MODE + JMP REINI ;AND GO LET THINGS HAPPEN + +;FIRST THING TO DO IS TO CHECK IF THIS IS A POWER FAIL RESTART +;NOTE: WE ARE STILL IN "INTERNAL" MODE HERE..THINGS WONT PRINT +PWRCHK: CLRRM IOAD ;CLEAR A BUFFER..WE WILL GENERATE A "100000" + INX H ;CLRRM PASSES PNTR..WE MAKE IT "IOAD+1" + MVI M,^O200 ;SET BIT THAT MAKES IT "100000" + CALL EI1 ;GO EXAMINE I/O ADDRESS + INTOFF ;CLEAR INTERNAL MODE + SYSUP: MVI C,150. ;NOW DO AN AUTO BOOT SEQUENCE +SYSUP1: LXI H,25. ;WILL DO A DELAY LOOP + CALL LTLOOP ; BY HAND, BY-PASSING USUAL MACRO GENERATION + + LDA RPEND ;SEE IF A CHAR WAS TYPED TO END THE AUTO BOOT + ANA A ;SET CONDITION FLAGS + JNZ REINI ;IF A CHAR WAS TYPED, NO AUTO STUFF, GO NULL JOB + +;WHILE WE HAVEN'T GOT ANYTHING TO DO, MIGHT AS WELL CHECK BOOT SWITCH +;TO SEE IF THAT GOT PUSHED WHILE WE WERE SITTING HERE + IN BOOTSW ;***** I/O RD/301 ***** + ANI 2 ;"BOOT" BUTTON PUSHED IS "TRUE .LO." + JZ N0.5 ;THEREFORE, IF RESULTS .EQ. Z-BIT, THEN BUTTON PUSHED + + IN ^O102 ;READ AND SEE IF "AC PWR LO" HAPPENED + ANI ^O100 ;CHECK THE RESET SIGNAL + JZ 0000 ;ITS TRUE .LO., SO IF TRUE, RESTART THE MACHINE + +;FALL THROUGH IF NO BOOT BUTTON PUSHED + DCR C ;STILL TIMING OUT.. WAIT LONGER + JNZ SYSUP1 ;BACK WHILE WAITING + +;NOW SEE IF NEED AUTO BOOT, OR POWER FAIL RECOVERY.. + LDA EMBUF+2 ;FETCH UP BITS 12-19 + ANI ^O200 ;CHECK THE PWR SAVED BIT + JZ PWR.FAIL ;IF BIT SET, GO TRY A POWER FAIL RECOVERY + +;FELL THROUGH IF THIS MUST BE AN AUTO BOOT SEQUENCE + PLINE AUTOMS ;SAY "BT AUTO" + CALL BTAUT ;CALL THE BOOT + .SBTTL **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT +REINI: LXI SP,RAMST+^O2000 ;RESET STACK POINTER TO RE-INIT + CLRB EOL ;GUARANTEE END-OF-LINE CNTR RESET + CLRB ERRCD ;CLEAR CURRENT ERROR CODE + CLRB ERRCD+1 ;CLEAR CURRENT ERROR CODE + CLRB RPTON ;ALWAYS CLEAR THE REPEAT FLAG + CLRB NOPNT ;CLR THE "NO PRINT" FLAG + LXI H,RPINI ;GET POINTER TO BUFFER WHERE WE SAVE + SHLD RPLST ; THE COMMAND DISPATCH ADDRESSES.USED BY REPEAT + LXI H,REINI ;IF GOT HERE, SAFE TO GUARANTEE U ALWAYS GET HERE + SHLD NOREND ;PASS REINIT LOCATION TO THE NORMAL END DISPATCH + CALL BFRST ;RESET TTY INPUT BUFFER + EI ;MAKE SURE THAT BOMBS RESTORE THE INTERRUPTS + + LDA USRMD ;GRAB USER MODE FLAG + ANA A ;SET CONDITION CODES + JNZ NULLJ ;IF USER MODE, NO PROMPTS, NO CR-LF, NOTHING + + LDA MMFLG ;IF MM MODE WE WILL PRINT NO PROMPTS + ANA A ;SET 8080 FLAGS + JNZ NULLJ ;SKIP PROMPT IF MM + + PCRLF ;START FRESH WITH CR-LF + PLINE KSPRMT ;PROMPT IS "KS10>" + ;HERE BEGINS THE NULL STATE LOOP.... +; CHECK FRONT PANEL BOOT SWITCH +NULLJ: LXI H,DCODE ;NULLJ JOB WILL PROCESS COMMANDS ON "END-OF-LINE" +NULLW: IN ^O102 ;READ AND SEE IF "AC PWR LO" HAPPENED + ANI ^O100 ;CHECK THE RESET SIGNAL + JZ 0000 ;ITS TRUE .LO., SO IF TRUE, RESTART THE MACHINE + + IN ^O302 ;READ THE STATE OF THE KLINIK SWITCHES + CMA ;FIX THE HARDWARE INVERSION + MOV C,A ;SAVE RESULTS OF READ IN REG "C" + ANI ^O14 ;OFF ALL BUT THE 2 KLINIK BITS + RRC ;JUSTIFY "WORD-WISE" + MOV B,A ;SAVE THE KLINIK BITS FOR A SEC. + LDA KLNKSW ;GET THE CURRENT KLINIK SWITCH STATE + CMP B ;NOW SEE IF KLINIK SWITCH HAS CHANGED SINCE LAST TIME + PUSH H ;SAVE H,L IT HAS OUR DISPATCH ADDRESS + CNZ KLNKLT ;IF COMPARE WAS .NE. 0, THEN WE MUST CHANGE LIGHTS + POP H ;RETRIEVE H,L SO THAT WE HAVE THE REAL DISPATCH + +;OK, NOW SEE IF WE ARE WATCHING CARRIER FROM THE KLINIK LINE, +;AND IF WE ARE, SEE IF IT HAS GONE AWAY.. IF KLINIK CARRIER GOES +;AWAY FOR 2 SECONDS, THEN WE WILL HANGUP THE LINE + MOV A,C ;GET STATE OF THE CARRIER INTO ACCUM + ANI 1 ;SEE IF IT IS SET + JZ N00 ;IF THERE IS NO CARRIER, THEN SEE IF WE CARE + +;CARRIER WAS TRUE IF WE GOT HERE, SET FLAG SAYING THAT WE MUST WATCH +;IF IT DECIDES TO GO AWAY ON US + STA WATCHC ;SET FLAG SAYING WATCH THE KLINIK + JMP N0 ;AND PROCEED WITH THE NULL JOB + +;GOT HERE IF CARRIER WAS FALSE, SEE IF WE CARE +N00: LDA WATCHC ;FETCH UP THE "WATCH" FLAG + ANA A ;SET FLAGS + JZ N0 ;WE DONT CARE, JUMP + +;CARRIER WENT AWAY ON US. WAIT 2 SECONDS, IF STILL GONE, HANG EM UP + PUSH H ;BEST SAVE DISPATCHER TYPE ADDRESS + LONG.DELAY 2 ;WAIT 2 SECONDS + IN CARRIER ;***** I/O RD 302 ***** + ANI 1 ;SEE IF TRUE(HIGH) OR FALSE(LOW) + CNZ HANGUP ;IT WAS STILL FALSE(I.E HIGH), HANGUP THE LINE + POP H ;NOW RESTORE + CLRB WATCHC ;AND SAY TO LEAVE THIS ALONE FOR A WHILE + ;ELSE FALL THRU CAUSE ALL OK +N0: IN BOOTSW ;***** I/O READ 301 ***** + ANI 2 ;IS BOOT SW SET???(TRUE LO, BECAUSE OF INVERSION) + JNZ N1 ;SKIP NEXT INSTR IF FALSE(I.E HIGH) + +N0.5: CALL BOOT ;OTHERWISE...GO TO BOOT COMMAND + JMP NULLJ ;AFTER BOOT, ALL TTY INPUT WAITS ARE KILLED + ;CONTINUE NULL STATE STATUS CHECK +; CHECK FOR SYSTEM PARITY ERRORS +N1: IN BOOTSW ;***** I/O RD 301 ***** + ANI ^O10 ;IS PARITY ERR SIGNAL SET(TRUE .LO.) + JNZ NX2 ;SKIP NEXT INSTR IF NOT SET +;IF YES SET, MUST CHECK THE PARITY ERROR + LDA CHKPAR ;GET FLAG TO SEE IF SHOULD REPORT PARITY ERRORS + ANA A ;SET FLAGS + JNZ RPTPAR ;IF NOT ZERO, MUST GO REPORT PARITY ERROR + JMP N2 ;AND CONTINUE ELSE + +NX2: CMA ;IF HERE, SET ACCUM .EQ. -1 + STA CHKPAR ;AND SET FLAG TO SAY REPORT PARITY ERR + +;CONTINUE NULL STATE STATUS CHECKS +; CHECK TO SEE IF RUN FLOP HAS DIED +N2: IN RUNFP ;;***** I/O READ 300Q ***** + ANI ^O10 ;IS HALT LOOP SET??(TRUE .LO.) + JNZ NX3 ;SKIP NEXT INSTR IF NOT SET(CPU MUST BE "RUNNING") +;FALL THRU IF HALT LOOP SET.. + LDA CHKHLT ;GET THE FLAG THAT SAYS IF WE SHLD CHK HALT + ANA A ;SET CONDITION CODES + PUSH PSW ;SAVE FLAGS FOR LATER USE + CNZ HLTCM ;IF FLAG SET, GO REPORT THE HALT + POP PSW ;GET FLAGS BACK + JNZ CHKKA ;IF YOU JUST HALTED, GO SEE IF RELOAD REQUEST + JMP N3 ;IF CLR, NO NEED TO REPORT..THEY KNOW + +;THIS AND THE "CONTINUE" CODE IS THE ONLY CODE +;IN THE CONSOLE THAT SETS THE "CHECK HALT" FLAG.. +;AND U CAN ONLY GET HERE IF THE "HALT LOOP" FLAG HAS BEEN CLEARED, BY +;ANY MEANS..AND WHEN U GET HERE, THE ACCUM MUST BE ZERO +NX3: CMA ;SET ACCUM = -1 + STA CHKHLT ;AND ZAP THE CHECK HALT FLAG.. + ;CONTINUE NULL STATE STATUS CHECKS +;CHECK TO SEE IF MOS MEMORY REFRESH CYCLE HAS DIED +N3: IN REFERR ;READ REFRESH ERROR BIT + ANI 01 ;REFRESH ERROR TRUE??(TRUE .LO.) + JNZ NX4 ;SKIP FOLLOWING CODE IF NO REFRESH ERROR + +;FALL INTO THIS IF A REFRESH ERROR OCCURS + LDA CHKREF ;GET FLAG THAT SAYS CHECK REFRESH ..SEE IF SHOULD BE REPORTED + ANA A ;SET 8080 FLAGS + PUSH H ;SAVE DISPATCHING ADDRESS + CNZ NOREFRESH ;GO REPORT REFRESH ERROR IF NECESSARY + POP H ;RESTORE DISPATCH ADDRESS + JMP N4 ;AND CONTINUE AS IF NOTHING HAPPENED + +;THIS IS THE ONLY CODE THAT CAN SET THE "REPORT REFRESH ERROR FLAG" +NX4: CMA ;U GOT HERE ON A JZ, SO ACCUM MUST BE ZERO + STA CHKREF ;AND SET FLAG TO -1 + ;CONTINUE NULL STATE STATUS CHECK +; CHECK FOR "END-OF-LINE" OR A RUNNING 10'S "KEEP-ALIVE" +N4: LDA USRMD ;IS THIS USER MODE? + ANA A ;SET CONDITION FLAGS + JNZ LIVE10 ;IF YES, CHECK 10 INTERRUPTS & KEEP ALIVE + +;BEFORE DOING ANOTHER COMMAND. SEE IF WE ARE ENVELOPING AND MUST SEND +;OUT A PACKET + LDA CSLMODE ;ONLY DO ENVELOPE STUFF IF IN MODE 4 OR GREATER + CPI .MODE4 ;CHECK IF MODE 4 + JNZ EOL.LK ;NOT MODE 4, PROCEED AS NORMAL + + PUSH H ;SAVE H,L IT HAS THE DISPATCH ADDRESS + CALL DECNET ;IF SOMETHING THERE, SEND IT OUT + POP H ;NEED H,L AGAIN + +;OTHERWISE, CTY'S EOL FLAG +;BUT FIRST SEE IF THIS IS A REPEAT +EOL.LK: LDA RPTON ;GET THE REPEAT FLAG + ANA A ;SET THE PROCESSOR FLAGS + JNZ RPTRTN ;GO BACK TO THE REPEAT FUNCTION SO THAT HE CAN PROCEED + + LDA EOL ;GET VALUE OF EOL FLAG + ORA A ;SET FLAGS..IS EOL SET?? + JZ NULLW ;REMAIN IN NULL JOB LOOP IF NOT SET + +;ELSE GO PROCESS A COMMAND + PCHL ;RETURN TO COMMAND IN TTY INPUT, OR DECODE + .SBTTL **TYPEIN COMMAND DECODER AND DISPATCHER** +DCODE: XRA A ;ZERO OUT THE ACCUM + MOV B,A ;AND ZERO OUT TMP LOCATION + + LXI D,CMDLST ;"D,E" NOW POINTS TO COMMAND LIST CHARACTER PAIRS + LHLD FIRST ;"H,L" NOW POINTS TO FIRST CHARACTER TYPED AS COMMAND + CALL FNDARG ;FIRST GO CLR ANY LEADING SPACES OR TABS FROM COMMAND LINE + JC NORML ;IF AT END-OF-COMMAND, ITS A NULL COMMAND +;NOW BEGINS COMMAND LOOK UP LOOP... "H,L" POINTS TO FIRST COMMAND CHAR. +;WHILE "D,E" POINTS TO FIRST CHAR IN THE LIST OF ALLOWABLE COMMANDS +DCODL: LDAX D ;CMD LIST CHAR TO ACCUM + ORA A ;IS THIS A ZERO BYTE?? + JZ NXMDC ;IF YES,END OF LIST + INX D ;WHILE YOU R AT IT UPDAT CMD LIST PNTR + + CMP M ;COMPARE CMD LIST CHAR WITH TYPED CHAR. + JZ MTCH1 ;IF THEY MATCH, BR TO "MTCH1" + ;HERE IF NO MATCH..UPDATE CMD LIST PNTR TO START OF NEXT COMMAND, +;THEN CHECK IF TRIED ENTIRE LIST YET.. +;IF TRIED ENTIRE LIST, REPORT COMMAND ERROR AND BACK TO NULL JOB LOOP. +;IF NOT TRIED ENTIRE LIST YET, LOOP BACK AND TRY SOME MORE +MISS2: INX D ;BUMP PNTR PAST SECOND CHAR OF CMD + INX D ;BUMP PAST THE DISPATCH ADDR + INX D + INR B ;UPDATE NUMBER OF "TRIES" + JMP DCODL ;IF NOT, JUMP BACK AND TRY AGAIN + +;IF FALL TO HERE, WAS ILLEGAL COMMAND.. CLEAR REST +;UP TO EOL... TYPE ERROR MESSSAGE AND BACK TO NULL JOB LOOP +;FIRST STEP IS CLEARING BAD COMMAND FROM COMMAND BUFFER +NXMDC: PLINE CMDNG ;COMMAND NO GOOD + + JMP MMERR ;AND BACK TO PROMPT.. + .SBTTL ****CTY SERVICE**** +;CODE ENTERED FROM THE NULL JOB LOOP WHENEVER WE ARE IN USER MODE(MODE 3) +;CODE CHECKS TO SEE IF CHAR IS AVAILABLE FROM THE 10,& ALSO IF KEEP ALIVE +;COUNT IS ACTIVE. WE ALSO CHECK FOR REBOOT REQUESTS (AS IN 20 SYSTEM MONITOR'S +;"BUGHALTS") +LIVE10: IN SMSTS ;SEE IF INTERRUPT FROM THE 10 IS PENDING + ANA A ;SET CONDITION CODES + PUSH PSW ;SAVE FLAGS FOR A LITTLE BIT + CP CHRRDY ;IF PLUS, A CHARACTER IS READY, GO PROCESS + +;FIRST, WE ONLY WANT TO CHECK THE KEEP-ALIVE COUNTER EVERY SECOND. +;FIRST WE WILL CHECK OUR COUNTERS AND SEE IF TIME TO CHECK KEEP-ALIVE DATA + POP PSW ;GET FLAGS BACK + CP FAKLIT ;IF TYPED A CHAR, THEN DOWN COUNT FOR TIME WASTED + JZ CHKKA ;IF ZERO, DO WHAT MUST BE DONE + + CALL DTIME ;ALWAYS DO IT AT LEAST ONCE + JNZ NULLJ ;IF NOT ZERO, IT HASN'T BEEN A SECOND YET. BACK NULL + +;WHEN YOU FALL TO HERE, IT IS TIME TO CHECK FOR "KEEP-ALIVE" OR "RELOAD" +CHKKA: LXI H,KPAINI ;FIRST WE MUST RESET OUR MAJOR LOOP COUNTER + SHLD KATIM1 ;EACH NUM IN THIS LOC .EQ. .444 SECONDS BETWEEN CHECKS + + INTON ;DON'T PRINT THIS CRUD + DI ;NO INTERRUPTS + EXAM 31 ;MOS MEMORY LOC 31 HAS THE INFORMATION + EI ;OK..INTERRUPTS + + INTOFF ;INTERNAL MODE OFF NOW + LDA EMBUF+3 ;GRAB THE RELOAD BITS.. WE CERTAINLY NEED THOSE + RAL ;"FORCED RELOAD" SHIFT INTO CARRY + JC FRELOAD ;IF "RELOAD" SET, GO EXECUTE A RELOAD + ;NOW SEE IF KEEP-ALIVE ACTIVE + RAL ;"KEEP-ALIVE" BIT INTO THE C-BIT + JNC NULLJ ;IF ITS NOT SET, GO BACK TO NULL JOB + +;KEEPING A WATCH ON THE KEEP ALIVE COUNT...BLINKY LIGHTS + LDA STATE ;GET CURRENT STATE OF THE LIGHTS + MOV D,A ;SAVE IT JUST FOR A LITTLE BIT + ANI STMSK ;CLR THE "STATE" LIGHT FROM THE CURRENT SELECTIONS + MOV E,A ;AND NOW SAVE THIS LITTLE BIT IN A REGISTER + + MOV A,D ;GET BACK THE ORIGINAL "STATE" + CMA ;"BLINK" + ANI STBIT ;ONLY WANT TO BLINK THE SINGLE LIGHT + ORA E ;THROW IN THE PART THAT IS AS WAS.. + STA STATE ;PUT THE WHOLE MESS BACK, THE NULL LOOP WILL BLINKY + OUT LIGHTS ;BLINK THE LIGHTS HERE + JM NULLJ ;AND IF MINUS, WE ARE "SHUTING DOWN", LET LIGHTS GO + +;WE DID AN EXAM 31 A VERY SHORT TIME AGO, SO THE EXAMINE BUFFER SHOULD STILL +;HAVE A VALID "KEEP-ALIVE" UPDATE COUNT IN IT + LXI H,KACNTR ;GET POINTER TO THE PREVIOUS "KA" COUNT + LDA EMBUF+1 ;GET WHAT SHOULD BE AN UPDATED "KA" COUNT + CMP M ;COMPARE..BETTER BE DIFFERENT + JZ DIEING ;IF SAME, GO SEE IF CPU IS REALLY DIEING +;FALL THRU IF THE COUNTS WERE DIFF..SAVE THE NEW COUNT + MOV M,A ;NEW COUNT GOES TO RAM, OVERWRITES THE OLD + CLRB DIECNT ;CLEAR THAT DIE COUNT + JMP NULLJ ;BACK TO THE NULL LOOP + +;ROUTINE FOR WHEN DOING CTY OUT PUT THE LIGHTS STILL BLINK AT A REASONABLE +;RATE +FAKLIT: LHLD KATIM1 ;GET CURRENT COUNT FOR BETWEEN THE LIGHTS + MOV A,L ;GET LO ORDER PIECE + ANI ^O374 ;TWEEK LITE COUNT, CAUSE OUR TYPING MESSED UP TIMER LOOP + MOV L,A ;PUT LO ORDER PIECE BACK(MASKING .EQV. TO SUBTRACT 100) + JMP DTM1 ;AND PROCEED +;ROUTINE TO DOWN COUNT KEEP ALIVE COUNTER +DTIME: LHLD KATIM1 ;GET A 16-BIT MINOR LOOP COUNTER + DCX H ;DECREMENT THE COUNTER +DTM1: SHLD KATIM1 ;AND PUT IT BACK + MOV A,L ;NOW CHECK THE COUNT FOR .EQ. 0 + ORA H ;"OR" HI PIECE WITH THE "LO" PIECE + RET + ;ROUTINE TO ENTERED WHEN THE "FORCE RELOAD" BIT HAS BEEN SET BY A RUNNING +;PROGRAM IN THE KS10 +FRELOAD: CLRB NOPNT ;CLEAR THE NO PRINT FLAG + PLINE FRCMSG ;PRINT MESSAGE TO INDICATE THE FORCED RELOAD + MVI A,2 ;BIT 34 IS THE APPROPRIATE GUY ON A FORCED RELOAD + STA GOCODE ;SET BIT IN THE 8080 RAM BUFFER + IN RUNFP ;NOW SEE IF WE MUST HALT THE PROCESSOR + ANI ^O10 ;WE DID NOT INVERT SIGNAL.0=HALTED, 1=RUNNING + + INTON ;DONT PRINT WHAT HAPPENS TO THE HALT + CNZ HACMD ;MAKE SURE THE PROCESSOR IS STOPPED + INTOFF ;OK TO PRINT NOW + LDA SECRET ;SECRET LOCATION + ANA A ;SET 8080 FLAGS + JNZ REINI ;IF FLAG SET, WE WILL NOT DO AUTO RELOADS + + LXI D,^O1004 ;POINTER TO THE MONITOR PRE-BOOT + CALL FILEINIT ;GO READ IN THE MONITOR PRE-BOOT + JC L.BTERR ;IF ERROR, FATAL OUT + + LXI H,1 ;NO ERR, NOW GO START THE MICRO-CODE AT LOC 1 + CALL SM1.5 ;START MICROCODE, ADDRESS PASSED IN H,L + LONG.DELAY 2 ;GUARANTEE THAT THE "SM 1" HAS TIME TO FINISH + CALL BT.GO1 ;NOW FIX PARITY AND OTHER THINGS THAT WE BROKE + CALL INFOBT ;AND PASS THE SOURCE OF THE PRE-BOOT IN MOS MEM + + CALL LB.GO1 ;AND GO EXECUTE THE BOOT CODE + JMP NULLJ ;AND BACK TO NULL JOB + +DIEING: LXI H,DIECNT ;GET THE NUMBER OF CONSECUTIVE "NO CHANGES" IN KA CNT + INR M ;INCREMENT + MOV A,M ;GET COUNT INTO ACCUM + CPI KATIMX ;NOW SEE IF OFFICIAL DEATH + JM NULLJ ;IF NOT YET, GO BACK AND WAIT FOR MORE + +;ELSE, FALL ON THROUGH TO THE RELOAD CODE + ;ROUTINE ENTERED WHEN THE "KEEP-ALIVE" COUNT DOES NOT CHANGE, AND WE +;ISSUE A RELOAD BECAUSE WE BELIEVE THAT THE PROGRAM RUNNING IN THE KS10 +;HAS DIED + CLRB NOPNT ;CLEAR THE NO PRINT FLAG + CLRB DIECNT ;AND RESET THE DIE COUNT + PLINE KAMSG ;PRINT MESSAGE TO INDICATE KEEP-ALIVE FAILURE + + INTON ;DONT PRINT ANY OF THIS STUFF + CALL HACMD ;FIRST, STOP THE MACHINE + DI ;NO INTERRUPTS, TILL THE EXAMINE IS COMPLETE + EXAM 71 ;EXAMINE THE INSTRUCTION IN 71 + EI ;OK TO INTERRUPT NOW + + MVI A,1 ;KEEP ALIVE CODE IS A 1 + STA GOCODE ;SAVE FOR PASSING TO KS10 + CALL EXINTM ;NOW GO EXECUTE LOC 71 IN PAGE 0 OF MONITOR SPACE + CALL COCMD ;LET THE PROCESSOR RESUME + INTOFF ;MAY RESUME PRINTING THIS STUFF + JMP NULLJ ;AND BACK TO NULL JOB + .SBTTL **COMMAND DECODER CONTINUED** +;CONTINUE COMMAND DECODER...... +;HERE IF FIRST CHARACTER MATCHED.SEE IF SECOND CHAR MATCHED. +MTCH1: INX H ;INPUT BUFFER NOW PNTS TO SECOND CHAR TYPED + LDAX D ;ACCUM GETS SECOND "EXPECTED" CHAR FROM COMMAND LIST + CMP M ;NOW. DOES SECOND CHARACTER MATCH?? + JZ MTCH2 ;JUMP IF YES, SECOND CHAR MATCHES. + +;HERE IF SECOND CHARACTER DID NOT MATCH.RESET "H,L" & GO BACK TO TRY AGAIN + DCX H ;RESET "H,L" + JMP MISS2 ;AND CONTINUE PROCESSING + +;GET TO HERE IF SECOND CHARACTER MATCHED +MTCH2: INX D ;UPDATE PAST 2ND CHAR + INX H ;UPDATE BUFFER POINTER + + CALL SEPCHR ;GET RID OF SEPARATORS + ;"H,L" SHOULD NOW POINTS TO THE CMD BUFF +;"D,E" NOW POINTS TO THE DISP ADDR +;OR ELSE TO "EOL" CHAR IF CMD HAS NO ARGS.. ANYTHING ELSE IS COMMAND ERROR + SHLD .ARG1 ;SAVE "H,L" POINTER TO FIRST ARG. + + MOV A,B ;NOW LOAD ACCUM WITH NUMBER "TRIES" TO FIND MATCH + XCHG ;DISP POINTER NOW TO "H,L" + + MOV E,M ;SET LOW ODER HALF OF "TABLE ENTRY" INTO "E" + INX H ;BUMP POINTER + MOV D,M ;SET HIGH ORDER HALF OF "TABLE ENTRY" INTO "D" + LXI H,NORML ;SET A RETURN VALUE + PUSH H ;AND PLACE ON STACK FOR RETURNS + +;PIECE OF CODE TO SAVE EACH COMMAND DISPATCH ADDRESS IN THE RAM BUFFER +;SO THAT THE REPEAT FUNCTION CAN DISPATCH THRU THE LIST WITHOUT DECODING +;THE TYPED IN COMMAND STRING AGAIN.. + ANA A ;CHECK IF THIS IS RP COMMAND..IF YES MUST + STA T80DT ;SAVE WHICH COMMAND IS BEING EXECUTED + JZ CMDGO ;JUMP SO THAT CMD LST BUFFER NO CHANGED + + LDA CMDS.. ;SEE IF THIS IS THE FIRST COMMAND IN A LINE + ANA A ;SET FLAGS + CZ RPNEW ;IF IS THE FIRST COMMAND, RESET REPEAT BUFFER POINTERS + + LHLD RPLST ;GET POINTER TO CURRENT FREE BUFFER LOCATION + MOV M,D ;SAVE HI ORDER PIECE OF DISPATCH ADDRESS + INX H ;UPDATE MEM POINTER + MOV M,E ;SAVE LO ORDER PIECE OF DISPATCH ADDRESS + INX H ;UPDATE POINTER TO FIRST FREE.. + XRA A ;CLR ACCUM + CMA ;IN ORDER TO MAKE IT -1 + MOV M,A ;SET -1 AS END-OF-LIST INDICATOR + SHLD RPLST ;AND RESTORE THE POINTER + ;CONTINUE THE DISPATCH +CMDGO: XCHG ;SET "TABLE ENTRY" INTO "H,L" +;AND DISPATCH TO ACTUAL COMMAND CODE + CALL EOCML ;SET "C-BIT" TO SAY END-OF-LINE IF TRUE + PUSH PSW ;SAVE STATE OF PROCESSOR FLAGS + CNC REMARG ;IF NO C-BIT, CMD HAD ARG..MUST REMEMBER IT + +;FINALLY SEE IF COMMAND REQUIRES AN ARG + JNC CMDGO9 ;IF REQUIRES NO ARG, GO GO GO + +;FALL HERE IF COMMAND HAD NO ARG..SEE IF IT SHOULD HAVE HAD ONE + MOV A,H ;GET HI ORDER OF DISP ADDRESS + RAL ;SHIFT HI ORDER BIT (BIT15) INTO THE C-BIT + JC RRARG ;WELL IF SET, IT NEEDED ARG.. REPORT THAT HAD NONE + +;ELSE ALL OK.. CLEAR BIT15 IF SET AND PROCEED +CMDGO9: MOV A,H ;HI ORDER TO ACCUM + ANI ^O177 ;CLEAR BIT 15 NO MATTER WHAT + MOV H,A ;PUT HI ORDER BACK + POP PSW ;GET THE PROCESSOR FLAGS BACK + PCHL ;ADDR TO PC TAKES THE DISPATCH + ;ROUTINE TO REMEMBER IF COMMAND HAD AN ARG..USED BY REPEAT FUNCTION +REMARG: PUSH PSW ;SAVE FLAGS + LDA T80DT ;SEE IF THIS WAS A REPEAT, IN WHICH CASE, DO NOTHING + ANA A ;SET CPU FLAGS + JZ REMAR1 ;IF WAS RP, GET OUT + + PUSH H ;AND SAVE DISPATCH ADDRESS + LHLD RPLST ;GET THIS DISPATCH FROM REPEAT LIST + DCX H ;BACK UP ADDR POINTER TO POINT + DCX H ; HI ORDER PIECE OF ADDRESS + MOV A,M ;NOW GET HI ORDER PIECE INTO ACCUM + ORI ^O200 ;ADD SIGN BIT TO REMEMBER ARG + MOV M,A ;NOW PUT IT BACK + POP H ;RESTORE DISPATCH ADDRESS +REMAR1: POP PSW ;AND RESTORE C-BIT FROM PREVIOUS "EOCML" + RET ;AND RETURN + ;THIS IS "NORML", FOR NORMAL RETURNS.. IT SETS UP PREVIOUS POINTERS +;AND THEN GOES BACK TO PROMPT +NORML: LXI H,EOL ;GET PNTR TO COMMAND COUNT + MOV A,M ;COPY TO ACCUM + DCR A ;DECREMENT IT + MOV M,A ;PUT BACK WHERE U GOT IT +;IF COUNT WAS DOWN TO ZERO, THEN RESET IT + DCR A ;IF COUNT WAS ZERO, THIS MAKES IT NEGATIVE + JM NORDIS ;IF EOL HAS GONE MINUS, TAKE NORMAL DISPATCH + CALL FXNXT ;OTHER WISE BE CLEVER & CRYPTIC + CLRB ERRCD ;AND CLEAR ERROR CODE + LXI H,DCODE ;FIX H,L FOR NORMAL NULL JOB + + JMP N1 ;AND FINALLY, ALL ELSE GOES TO NULL LOOP +FXNXT: LHLD .ARG1 ;GET CMD PNTR + INX H ;UPDATE IT PAST THE CURRENT EOL CHAR(, OR CR-LF) + SHLD FIRST ;FIX CURRENT CMD LINE PNTR + RET ;AND THATS ENOUGH FOR NOW + +;CODE FOR BUFFER OVER FLOW +BFOVR: PLINE BV ;"BUFFER OVERFLOW +NORDIS: LHLD NOREND ;GET THE CURRENT DISPATCH ADDRESS FOR NORMAL ENDS + PCHL ;AND GO + ;SUBROUTINE TO PRINT A SINGLE CHARACTER.. +;CHARACTER TO BE PRINTED IS PASSED IN THE ACCUM.. +;IF THE UART SHOULD FAIL AND NEVER REACH THE TRANSMITTER READY STAT +;THE 8080 WILL HANG IN THIS LOOP FOREVER TRYING TO PRINT +PCHR: PUSH PSW ;SAVE CHARACTER ON THE STACK + LDA NOPNT ;GET NO PRINT FLAG + ORA A ;IS IT SET?? + JZ PCHR0 ;IF NOT CONTINUE AS NORMAL + + POP PSW ;IF IT IS..NO PRINTING + RET ;SO RETURN + +PCHR0: LDA CSLMODE ;GET CURRENT KLINIK LINE MODE + CPI .MODE4 ;IS THIS APT MODE?? + JNZ PCHR1 ;IF NO, PRINT + +;HERE IF DOING APT AND MUST MERELY STACK CHARS TO BE ENVELOPED AND SENT OUT +;A LITTLE LATER. THE CHARACTER TO BE STACKED IS SITTING ON THE TOP OF THE +;STACK + POP PSW ;NOW GET THE CHARACTER THAT WAS STACKED + PUSH H ;MUST SAVE H,L IN HERE + LHLD ENVPNT ;GET THE POINTER TO THE ENVELOPE + MOV M,A ;PUT CHARACTER INTO THE BUFFER + INX H ;UPDATE THE POINTER + MVI M,0 ;GUARANTEE LAST BYTE IS A ZERO + SHLD ENVPNT ;PUT IT BACK WHERE U GOT IT + POP H ;AND RESTORE REG + CPI CRCHR ;IF WE ARE BUFFERING A CR, MUST SET THE FLAG + RNZ ;IF NOT A CR, JUST LEAVE + STA MAILFG ;ELSE SET THE FLAG + RET ;AND OUT + +PCHR1Z: PUSH PSW ;CHAR ON STACK FOR A BIT +PCHR1: IN CTYCTL ;GET UART STATUS + ANI 01 ;CHECK BITS TO SEE IS XMITTER READY?? + JZ PCHR1 ;JUMP BACK IF NOT READY YET + +;NOW,BEFORE PRINTING, SEE IF NEED TO TYPE TO KLINIK LINE TOO. + LDA CSLMODE ;GET CURRENT KLINIK LINE MODE + CPI .MODE3 ;KLINIK IN PARALLEL MODE?? + JNZ PCHROV ;IF NOT, JUST GO PRINT + +;FALL THROUGH IF NEED KLINIK TOO +PCHR2: IN REMCTL ;GET KLINIK UART STATUS + ANI 01 ;CHECK THE READY BIT + JZ PCHR2 ;IF NOT READY, GO BACK AND TRY AGAIN + POP PSW ;GET CHAR OFF STACK WHEN THINGS ARE READY + OUT REMDAT ;PRINT CHAR ON THE KLINIK LINE + OUT CTYDAT ;PRINT ON CTY + RET ;AND BACK TO CALLER + +PCHROV: POP PSW ;FINALLY READY..GET CHAR FROM STACK + OUT CTYDAT ;SEND CHARACTER + RET ;AND RETURN + ;SUBROUTINE KCHR. FOR PRINTING A SINGLE CHARACTER ON THE KLINIK LINE ONLY +;PARTICULARLY USEFUL FOR THE "?NA" AND "PW:" MESSAGES +;CHARACTER TO BE PRINTED CAN BE A TRAILING ARG, OR YOU CAN CALL THIS ROUTINE +;IN THE MIDDLE AND PASS THE CHAR TO BE PRINTED IN THE ACCUM +KCHR: XTHL ;SWAP STACK TOP WITH H,L + MOV A,M ;GET THE TRAILING ARG FROM PROM + INX H ;UPDATE RETURN ADDRESS PAST THE TRAILING ARG + XTHL ;PUT THE RETURN BACK ON THE STACK +KCHR0: PUSH PSW ;SAVE THE CHARACTER JUST FOR A LITTLE BIT +KCHR1: IN REMCTL ;GET KLINIK UART STATUS + ANI 01 ;SEE IF UART IS READY + JZ KCHR1 ;LOOP TILL IT IS + + POP PSW ;READY NOW, GET THE CHAR OFF THE STACK + OUT REMDAT ;SEND TO UART + RET ;AND BACK TO CALLER + ;SUBROUTINE KLINE. FOR PRINTING A LINE OF CHARACTERS. A TRAILING ARG +;POINTING TO THE STRING TO BE PRINTED IS USED. "\" MEANS . +KLINE: XTHL ;SWAP STACK, GET POINTER TO TRAILING ARG TO H,L + CALL TARG1 ;GET POINTER TO ARG INTO D,E + XTHL ;FIX RETURN ADDRESS + +KLINE1: LDAX D ;GET FIRST CHAR INTO ACCUM + INX D ;UPDATE THE CHARACTER POINTER + + ANA A ;WELL THEN, SEE IF CHAR IS 0, MEANING END OF STRING + RZ ;OUT IF YES + +;WELL THEN , MIGHT AS WELL GO PRINT THE THING + CALL KCHR0 ;GO PRINT THE CHARACTER + JMP KLINE1 ;AND WHEN RETURN, GO FETCH UP THE NEXT CHAR + ;SUBROUTINE TO PRINT A LINE OF CHARACTERS.. +;POINTER TO THE LINE OF CHARACTERS TO BE PRINTED IS PASSED IN +;"H,L" REGISTER..NO REGISTERS ARE DESTROYED BY THIS ROUTINE +;THE END-OF-MESSAGE FOR THE LINE OF CHARACTERS TO BE +;PRINTED IS INDICATED BY A "00" BYTE AT THE END OF THE MESSAGE TEXT +PLNE: XTHL ;REPLACE RETURN..PUT ON STACK + XCHG ;TRAILING ARG FROM "D,E" TO "H,L" + +PLN1: MOV A,M ;GET CHARACTER FROM MEM. + INX H ;INCREMENT TO NEXT CHARACTER TO BE PRINTED + + CPI BSLASH ;IS THIS A BACK SLASH(I.E. IN-LINE CRLF) + JZ PLN2 ;JUMP IF YES... + + ORA A ;IS IT A "00" BYTE??? + RZ ;RETURN IF DONE + +;FALL HERE IF GOTTA REAL CHAR.. + CALL PCHR ;GO PRINT CHAR IN ACCUM +PLN2: CZ CRLFIN ;GET HERE ON ZERO FLAG,ONLY IF NEED CRLF + JMP PLN1 ;CONTINUE LOOP +;SUBROUTINE TO PRINT A CARRIAGE RETURN-LINE FEED +;NO REGISTERS DESTROYED..JUST CALL TO GET YOUR +; PRINTED +.CRLF: POP H ;MUST FIX THE STACK +CRLFIN: PCHAR CRCHR ;PRINT CARRIAGE RETURN + PCHAR LFCHR ;PRINT LINE FEED + RET ;RETURN + + .SBTTL **COMMAND DISPATCH LIST** +;THIS LIST CONTAINS ALL CHARACTER PAIRS WHICH ARE CONSIDERED +;LEGITIMATE COMMANDS TO THE KS10 CONSOLE +CMDLST: + .BYTE 'R,'P ;*REPEAT IN FAST LOOP* + .ADDR RPCMD + .BYTE 'D,'N ;*DEPOSIT NEXT* + .ADDR BIT15!DNCMD + .BYTE 'D,'C ;*DEPOSIT CRAM* + .ADDR BIT15!DCCMD + .BYTE 'D,'M ;*DEPOSIT MEMORY* + .ADDR BIT15!DMCMD + .BYTE 'L,'C ;*LOAD CRAM ADDRESS* + .ADDR BIT15!LCCMD + + .BYTE 'L,'A ;*LOAD MEMORY ADDRESS* + .ADDR BIT15!LACMD + .BYTE 'D,'I ;*DEPOSIT I/O* + .ADDR BIT15!DICMD + .BYTE 'L,'I ;*LOAD I/O ADDRESS* + .ADDR BIT15!LICMD + .BYTE 'D,'B ;*DEPOSIT BUS* + .ADDR DBCMD + .BYTE 'D,'K ;*DEPOSIT KONSOLE* + .ADDR BIT15!DKCMD + + .BYTE 'L,'K ;*LOAD ADR FOR KONSOLE* + .ADDR BIT15!LKCMD + .BYTE 'E,'K ;*EXAMINE KONSOLE* + .ADDR EKCMD + .BYTE 'L,'F ;LOAD DIAG FUNCTION + .ADDR BIT15!LFCMD + .BYTE 'D,'F ;DEPOSIT INTO DIAG FUNCTION + .ADDR BIT15!DFCMD + .BYTE 'M,'K ;*MARK MICRO-CODE* + .ADDR BIT15!MKCMD + .BYTE 'U,'M ;*UNMARK MICRO-CODE* + .ADDR BIT15!UMCMD + .BYTE 'P,'E ;*PARITY ENABLE* + .ADDR PECMD + .BYTE 'C,'E ;*CACHE ENABLE* + .ADDR CECMD + .BYTE 'T,'E ;*1 MSEC CLOCK ENABLE* + .ADDR TECMD + .BYTE 'T,'P ;*TRAP ENABLE* + .ADDR TPCMD + + .BYTE 'S,'T ;*START* + .ADDR BIT15!STCMD + .BYTE 'H,'A ;*HALT* + .ADDR HACMD + .BYTE 'C,'O ;*CONTINUE* + .ADDR COCMD + .BYTE 'S,'I ;*SINGLE INSTRUCT* + .ADDR SICMD + .BYTE 'S,'M ;*START MICRO-CODE* + .ADDR SMCMD + + .BYTE 'M,'R ;*MASTER RESET* + .ADDR MRCMD + .BYTE 'C,'S ;*START CPU CLOCK* + .ADDR CSCMD + .BYTE 'C,'H ;*HALT CPU CLOCK* + .ADDR CHCMD + .BYTE 'C,'P ;*PULSE CPU CLOCK* + .ADDR CPCMD + .BYTE 'E,'N ;*EXAMINE NEXT* + .ADDR ENCMD + .BYTE 'E,'M ;*EXAMINE MEMORY* + .ADDR EMCMD + .BYTE 'E,'I ;*EXAMINE I/O* + .ADDR EICMD + .BYTE 'E,'C ;*EXAMINE CRAM* + .ADDR ECCMD + .BYTE 'E,'B ;*EXAMINE BUS* + .ADDR EBCMD + .BYTE 'E,'J ;*EXAMINE CURRENT CRAM INFO* + .ADDR EJCMD + + .BYTE 'T,'R ;*TRACE* + .ADDR TRCMD + .BYTE 'R,'C ;*FUNCTION READ CRAM CONTROL REG* + .ADDR RCCMD + .BYTE 'Z,'M ;*ZERO KS10 MOS MEMORY* + .ADDR ZMCMD + .BYTE 'P,'M ;*PULSE MICRO-CODE..* + .ADDR PMCMD + .BYTE 'B,'T ;*BOOT SYS* + .ADDR BTCMD + + .BYTE 'B,'C ;*BOOT CHECK* + .ADDR BCCMD + .BYTE 'L,'B ;*LOAD BOOT* + .ADDR LBCMD + .BYTE 'E,'X ;*EXECUTE* + .ADDR BIT15!EXCMD + .BYTE 'L,'T ;*LAMP TEST* + .ADDR LTCMD + .BYTE 'K,'L ;*KLINIK* + .ADDR KLCMD + .BYTE 'E,'R ;*EXAMINE REGISTER* + .ADDR ERCMD + .BYTE 'L,'R ;*LOAD REGISTER* + .ADDR LRCMD + .BYTE 'D,'R ;*DEPOSIT REGISTER* + .ADDR DRCMD + .BYTE 'M,'T ;*MAGTAPE BOOT* + .ADDR MTCMD + .BYTE 'D,'S ;*DISK SELECT* + .ADDR DSCMD + .BYTE 'M,'S ;*MAGTAPE SELECT* + .ADDR MSCMD + .BYTE 'S,'H ;*SHUTDOWN* + .ADDR SHCMD + .BYTE 'M,'B ;*MAGTAPE BOOTSTRAP* + .ADDR MBCMD + .BYTE 'P,'W ;*PASSWORD* + .ADDR PWCMD + .BYTE 'T,'T ;*KLINIK LINE TO TTY* + .ADDR TTCMD + .BYTE 'V,'T ;*VERIFY AGAINST TAPE* + .ADDR VTCMD + .BYTE 'V,'D ;*VERIFY AGAINST DISK* + .ADDR VDCMD + .BYTE 'X,'1 ;DUMMY + .ADDR RAMX1 + .BYTE 'F,'I ;*FILE* + .ADDR BIT15!FICMD + .BYTE 'B,'2 ;**TEMP BOOTCHECK 2** + .ADDR B2CMD + .BYTE 'M,'M ;MANUFACTURING MODE + .ADDR MMCMD + .BYTE 'S,'C ;SOFT CRAM ERROR RECOVERY "ON/OFF" SWITCH + .ADDR SCCMD + .BYTE 0 ;END LIST MARKER + .SBTTL CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM + + .IF DF,PASS1 + +CHECKS: .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 1 + .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 2 + .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 3 + .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 4 + .ENDC + + + .IF DF,PASS2 +CHECKS: .ADDR CHKSM0 ;CHECKSUM FOR RAM NUMBER 1 + .ADDR CHKSM1 ;CHECKSUM FOR RAM NUMBER 2 + .ADDR CHKSM2 ;CHECKSUM FOR RAM NUMBER 3 + .ADDR CHKSM3 ;CHECKSUM FOR RAM NUMBER 4 + .ENDC +.TITLE VER 4.2 KS10 CONSOLE PROGRAM +INIMS: .ASCIZ /\KS10 CSL.V4.2\/ ;POWER UP MESSAGE AND IDENTIFIER + .SBTTL *** "MR" CMD *** +;THIS CODE PERFORMS THE "MASTER RESET" CONSOLE FUNCTION +MRCMD: + XRA A ;SET ACCUM=0 + OUT CPUCTL ;SET 0'S TO "RUN,EXECUTE,CONT" + CALL CHCMD ;AND INSURE CPU HAS STOPPED... + +;ISSUE SM10 BUS RESET +MRINT: MVI A,5 ;BITS FOR "DP RESET", & "CRAM RESET" + OUT CRMCTL ;***** I/O WRT 204/5 ***** + + MVI A,^B10000000 ;BIT7 FOR RESET + OUT RESET ;ISSUE RESET,SET CONSOLE MODE + + CALL SMFINI ;GET CURRENT PARITY SETTINGS & SET IN KS + + LDA TRAPEN ;BIT FOR "CLR TEN INT" SHOULD BE LOW + OUT DIAG ;***** I/O WRT 205/XX ***** + + MVI B,0 ;WILL SET NO BITS IN THE STATE WORD + CALL STATEM ;SET THE STATE + .BYTE ^O12 ;OFF THE STUFF WE DONT WANT + ENDCMD ;AND OUT + .SBTTL ****INTERRUPT HANDLER**** +;HERE ON INTERRRUPTS..REGS ALREADY SAVED AT "RST" BLOCK +INTRP: LXI H,ENDIN ;PUSH OUR FAVORITE EXIT ADDRESS ON THE STACK + PUSH H ; AND WE CAN DO "RET"'S TO LEAVE ROUTINE + IN CTYCTL ;GET CTY TTY STATUS + MOV B,A ;SAVE IT IN THE "B" REG FOR A COUPLE INSTRS + IN REMCTL ;NOW FETCH UP THE REMOTE STATUS + ORA B ;AND THROW BOTH STATUS'S TOGETHER + ANI ^O70 ;ANY ERR BITS SET?? + JNZ TTERR ;GO TELL ERR IF YES + +;FALL THROUGH IF NO ONE IN ERROR. NOW SEE WHO THE CHARACTER IS FROM + MOV A,B ;COPY CTY STATUS INTO ACCUM + ANI 2 ;IS A CHARACTER IN THE CTY UART?? + JNZ INTCH ;JUMP IF YES. FIND CHARACTER IN CTY UART. + +;FALL HERE IF IT WAS A KLINIK CHAR + IN REMDAT ;FETCH OUT THE CHARACTER + ANI ^O177 ;OFF THE PARITY BIT + MOV B,A ;MAKE SECOND COPY OF CHARACTER IN "B" + + CPI CNTLY ;BEFORE DISPATCHING, SEE IF THIS IS "CONTROL-Y" + JNZ KL.DSP ;IF NOT, DO EVERYTHING AS PER NORMAL + +;AHA. IT WAS A CONTROL-Y..NOW SEE IF IN MM MODE + LDA MMFLG ;GET FLAG + ANA A ;SET 8080 CONDITION CODES + JNZ MMERR1 ;IF YES, MM MODE, THEN GO ABORT WHAT EVER YOU ARE DOING + MOV A,B ;NOW REPLACE THE CHAR WE JUST BOMBED + +;ELSE FALL THROUGH +KL.DSP: LHLD MODDIS ;GET CURRENT KLINIK MODE DISPATCH + PCHL ;DISPATCH TO DO THE RIGHT THING + ;CHECK IF WE ARE IN USER MODE +INTCH: IN CTYDAT ;INPUT CHARACTER + ANI ^O177 ;STRIP BIT 8 + MOV B,A ;SAVE CHAR FOR 2 INSTRUCTIONS + +;SEE IF THIS IS MANUFACTURING MODE BEFORE WE CONTINUE + LDA CSLMODE ;GRAB CURRENT CSL MODE + ANI .MODE4 ;AND SEE IF ITS MODE 4 + JZ CMNBUF ;IF NO, CTY INPUT NORMAL + +;PLACE YOU GO IF MANUFACTURING MODE.. CTY CHARS ARE JUST SENT TO KLINIK + MOV A,B ;GRAB CHARACTER TO BE SENT TO KLINIK + CALL KCHR0 ;ONLY ECHO CTY STUFF AGAINST THE KLINIK LINE + +;NOW SEE IF THAT WAS A MODE CHANGE CHAR WE JUST SENT DOWN THE LINE + CPI CNTLY ;IS IT "CONTROL-Y" + RNZ ;IF WAS NOT, SIMPLY GET OUT + + CLRB KLNKSW ;FORCE RE-EXAMINE OF THINGS + CLRB MMFLG ;TURN OFF MANUFACTURING MODE + CALL SETM2 ;FORCE KLINIK LINE IMMEDIATELY INTO MODE 2 + JMP REINI + ;ALSO STANDARD COMMON ENTRY POINT WHEN KLINIK LINE PARALLELS THE CTY +MODE3: +CMNBUF: LDA USRMD ;GET USER MODE FLAG + ANA A ;IS IT SET?? + MOV A,B ;COPY CHAR INTO ACCUM(GET HERE FOR KLINIK OR CTY) + JNZ USER ;JUMP IF IN USER MODE... + +;FALL THRU TO HERE IF NOT USER MODE AND WE NEED DO SOMETHING WITH CHAR + CPI CNTLO ;CONTROL O??? + JNZ SKP2 ;JMP IF NO + +;ELSE FALL INTO CONTROL-O CODE..STOP THE PRINTER + PCHAR UPARR + PCHAR OCHR + LDA NOPNT ;GET CURRENT STATE OF "NO PRINT" + ADI ^O200 ;ZAP PRINT FLAG + STA NOPNT ;PUT IT BACK + XRA A ;ZAP CHAR SO WE CAN EARLY EXIT + +SKP2: CPI CNTLS ;IS IT CONTROL-S + CZ CNTS ;CALL IF YES + + CPI CNTLQ ;IS IT CONTROL-Q + JNZ SKP6 ;JMP IF NO + +;FALL TO HERE IF YES, ZAPP CNTL-Q FLAG + CLRB STPPD ;ZAP!! + XRA A ;CLEAR ACCUM + SKP6: STA RPEND ;ANY OTHER CHARS MEAN END REPEAT LOOP + CPI CNTLZ ;CONTROL Z?? + JZ CNTZ ;JMP IF YES + + CPI CNTLU ;CONTROL-U?? + JNZ SKP8 ;JMP IF NO + +;FALL TO HERE TO DO THE CONTROL-U CODE + PCHAR UPARR + PCHAR UCHR + PCRLF ;AND A CR-LF TO GIVE CLEAN LINE + CALL BFRST ;CLEAR INPUT BUFFER + XRA A ;AND SET ACCUM FOR EARLY OUT + +SKP8: CPI CNTLC ;CONTROL-C?? + JZ CNTC ;JMP IF YES + + CPI Q.OUT ;SEE IF MUST TAKE A QUICK OUT + RZ ;LEAVE IF YES + + CPI COMMA ;IS IT A COMMA? + JNZ M11 ;IF NOT COMMA, AVOID THIS NEXT COUPLE INSTRUCTIONS + +;FALL TO HERE IF WAS A COMMA + LXI H,CMCNT ;POINT TO THE COMMA COUNTER + INR M ;UPDATE.. AND CONTINUE + ;NOT SPECIAL CHAR..PROCESS NORMAL +M11: CPI CNBCK ;CONTROL BACKSLASH SHOULD LOOK LIKE CRLF + CZ EOMRK ;CALL IF YES + + CPI CRCHR ;CARRIAGE RET?? + CZ EOMRK ;CALL IF YES + + CPI LFCHR ;LINE FEED?? + CZ EOMRK ;CALL IF YES + + LHLD BUF. ;POINTER TO FIRST FREE BUFFER PLACE + CPI RBOUT ;RUB-OUT CHAR?? + JZ RUB ;JMP IF YES + + ;OTHERWISE ITS A REGULAR CHAR.. +;THIS IS DUMB CODE FOR FIRST GO AROUND +;TYPE-AHEAD WONT WORK + + CALL UP.LO ;CONVERT SO PROGRAM INTERNAL ONLY SEES UPPER CASE + + MOV M,A ;CHAR INTO BUFFER SPACE + INX H ;UPDATE PNTR + SHLD BUF. ;AND REPLACE PNTR + + MOV B,A ;SAVE THE CHAR JUST TYPED + SUI ^O40 ;CHECK IF ITS A PRINTING CHAR + JM NOECH ;IF IT IS NONE-PNT..GO NO ECHO + + MOV A,B ;GET CHAR BACK + SUI ^O176 ;IS IT TOO HI TO BE PRINTING CHAR?? + JP NOECH ;IF YES, GO NO ECHO + + MOV A,B ;GET CHAR BACK AGAIN + CALL PCHR ;NOW GO ECHO IT..... + +NOECH: LDA BFCNT ;GET CHAR COUNT + INR A ;BUMP UP + CPI 80. ;TOO MANY?? + JZ BFOVR ;JMP BUFFER OVERFLOW IF YES + STA BFCNT ;REPLACE COUNT + POP H ;CLEAR STACK OF THE PSEUDO RETURN FIRST +;FALL INTO END INTERRRUPT CODE IF CHAR COUNT OK +ENDIN: POP H ;RESTORE REGS + POP D + POP B + POP PSW + EI ;INTERRUPTS BACK ON + RET ;AND OUT + +;AND ACCEPT LOWER CASE AS REQUESTED +UP.LO: CPI ^O141 ;LOW CASE "A" OR BETTER?? + RM ;IF MINUS, NOT LOW CASE, CONTINUE + CPI ^O173 ;LOW CASE "Z" OR WORSE?? + RP ;IF POS, OR ZERO, ITS NOT LOW CASE RANGE + +;FALL INTO HERE IF IT WAS LOWER CASE.... + SUI ^O40 ;MAKE IT UPPER FOR ALL + RET ;AND OUT + + ;CODE FOR END-OF-LINE CHAR TYPED IN +EOMRK: PCRLF ;GIVE CR-LF + + LDA CMCNT ;GET COUNT OF COMMAS + INR A ;UP BY ONE, FOR THE CR-LF + STA EOL ;AND SET EOL MARKER + XRA A ;CLEAR ACCUM + STA CMCNT ;SET LOCATION + CMA ;SET ACCUM = -1 + RET ;RETURN + + +;CODE FOR A RUB-OUT +RUB: LDA BFCNT ;GET CURRENT CHAR COUNT + ANA A ;IS IT 0?? + RZ ;GOOD, NOTHING TO DELETE + DCR A ;DECREMENT OTHERWISE + STA BFCNT ;AND PUT IT BACK + + DCX H ;AND BACK UP THE BUFFER PNTR + SHLD BUF. ;PUT IT BACK + PSLASH ;TYPE SLASH AS RUBOUT INDICATOR + MOV A,M ;GET CURRENT CHAR IN BUFFER + CALL PCHR ;ECHO WHAT WAS RUBBED OUT + CPI COMMA ;OH WAIT, WAS THAT A COMMA?? + RNZ ;JMP IF NO, TAKE A NORMAL OUT +;FALL THRU IF WAS A COMMA + LXI H,CMCNT ;GET COMMA COUNT + DCR M ;DECREMENT + RET ;AN EXIT THIS PLACE + ;HERE IF USER MODE FLAG IS SET.. +USER: CPI CNBCK ;IS IT "^\"?? + JNZ TENCHR ;IF NOT,THEN ITS A CHAR FOR THE KS-10 + +;BEFORE WE LEAVE USER MODE, WE MUST CHECK THE CONSOLE ENABLE SWITCH +END.USR: IN BOOTSW ;***** I/O RD 301 ***** IS CONSOLE LOCKED UP?? + +;BIT 2 IS "LO" IF CONSOLE ENABLE IS TRUE. IF BIT 2 IS "HI", WE ARE DISABLED +;DUE TO THE HARDWARE INVERSION OF SIGNAL LEVELS + ANI ^O4 ;CHECK BIT 2 + RNZ ;IF HI, WE ARE DISABLED AND WILL IGNORE + +;IF YES, USER MODE MUST BE CLEARED + CLRB NOPNT ;CLR NO PRINT FLAG IN CASE WE WERE IN "INTERNAL MODE" + CALL CLRUSE ;EXIT FROM USER MODE + PLINE RDYMS ;"ENABLED" + LXI H,REINI ;SET UP AN EXIT ADDRESS +IOUT: POP D ;CLEAR THE PSEUDO RETURN TO "ENDIN" FROM STACK + POP D ;CLEAR ORIGINAL SAVED "H,L" OFF STACK + POP D + POP B + POP PSW + INX SP ;NOW GET OLD RETURN ADDR OFF STACK + INX SP + + EI ;ENABLE INTS.. + PCHL ;AND GO TO PROMPT +RDYMS: .ASCIZ /ENABLED\/ + +CLRUSE: CLRB USRMD ;AND CLEAR THE USER MODE FLAG + LDA MMFLG ;BEFORE DROPPING USER, SEE IF IN MM MODE + ANA A ;SET 8080 FLAGS + RZ ;IF NOT MM MODE, OK TO GET OUT + +;IF WAS SET, MUST DROP BACK TO MODE 4 + CALL SETM4 + CALL KCHR ;NON-PRINTING CHAR, ALSO TELLS HOST TO SWITCH MODES + .BYTE CNBCK ;"CONTROL-BACKSLASH IS THE MAGIC CHAR" + RET ;JUST LEAVE + ;CONTROL-Z CODE...ENTER USER MODE +CNTZ: CALL SETUSE ;SET THE USER MODE + CALL BFRST ;BUFFER RESET..RE-INIT TTY INPUT BUFFER + CLRB KLNKSW ;FORCE LIGHTS TO GET FIXED AFTER ENTER USER + + PLINE U ;PRINT "USER MODE" + LXI H,NULLJ ;LOAD "H,L" WITH A PLACE TO GO + JMP IOUT ;AND GET OUT +U: .ASCIZ /USR MOD\/ + SETUSE: +;HERE IS THE DEPOSIT WORD 31 CODE.. +WRD31: INTON ;DONT PRINT THIS STUFF + EXAM 31 ;MUST SAVE CURRENT STATE OF KEEP ALIVE & RELOAD BITS + INTOFF ;ITS OK NOW + LDA GOCODE ;BYTE 28-35 GETS THE REASON FOR RELOAD + LXI H,DMDAT ;MAKE H,L POINT TO THE DESIRED BUFFER + MOV M,A ;SET THE GOCODE BITS INTO THE BYTE "DMDAT" + + LDA TRAPEN ;NOW GRAB THE TRAP BIT + RLC ;AND SHIFT IT TO THE APPROPRIATE POSITION(20 TO 40) + RLC ;(40 TO 100) + RLC ;(100 TO 200) + MOV B,A ;SAVE IT IN B FOR A WHILE + + LDA MMFLG ;GET "MAINTENANCE MODE" FLAG + ANA A ;SET 8080 FLAGS + PUSH PSW ;SAVE THE STATE OF THE FLAGS FOR LATER USE + JZ WRD.PR ;IF NO MM MODE, DONT SET A BIT + +;WAS MM MODE, MUST SET THE BIT + MVI A,^O100 ;A BIT FOR MM MODE +WRD.PR: ORA B ;THROW TOGETHER WITH THE TRAP BIT + INX H ;PUT INTO THE DEPOSIT BUFFER + INX H + MOV M,A ;THIS IS LOC "DMDAT+2" + + LDA PARBT ;NOW FOR THE SELECTION OF PARITY BITS + RRC ;RIGHT ONCE TO FREE UP 200 WEIGHT + MOV B,A ;SAVE IN B REG + LDA CSLMODE ;GET CURRENT KLINIK MODE + ANI .MODE2!.MODE3 ;IF EITHER OF THESE MODES, MUST SET THE BIT + JZ WRD.DP ;JUMP IF NOT THOSE BITS + + +;HERE IF ONE OF THOSE MODES WAS SET + MVI A,^O100 ;A BIT TO SET + +WRD.DP: ORA B ;THROW THIS BIT WITH THE OTHERS + RRC ;FINAL JUSTIFICATION + MOV B,A ;NOW SAVE THIS GOOD STUFF IN "B" + LDA EMBUF+3 ;GET THE BYTE THAT HAS CURRENT "KA" BIT + ANI ^O300 ;OFF EVERYTHING ELSE + ORA B ;NOW THROW WHOLE MESS TOGETHER AGAIN + + INX H ;BUMP POINTER TO "DMDAT+3" + MOV M,A ;AND PUT DATA INTO RAM + DEPOS 31 ;PUT INTO MOS MEMORY AT LOC 31 + CLRB GOCODE ;CLEAR THE RELOAD CODE + + POP PSW ;THIS WORD HAS FLAGS SET FROM BEFORE WHEN WE TESTED "MM" + MVI A,-1 ;FLAGS WONT CHANGE WHILE WE SET THE USER MODE FLAG + STA USRMD ;SET USER MODE... NOW DO SOMETHING BASED ON THE FLAGS + RZ ;IF NOT SET, A SIMPLE OUT + +;HERE IF SET, WE MUST SEND AN "ACK" DOWN KLINIK LINE BEFORE ANYTHING ELSE + CALL ACK ;"ACK" DOWN THE KLINIK + JMP SETM2 ;ALSO SET MODE 2 AND USE HIS "RET" TO RETURN + +;TYPED "CONTROL-S" TO STOP CONSOLE OUTPUT +CNTS: LXI H,STPPD ;POINTER TO STOPPED FLAG + MOV A,M ;GET THE FLAG + CMA ;SET .EQ. 0 IF WAS ALREADY SET + ANA A ;NOW SET FLAGS, 'CAUSE CMA DOESN'T + RZ ;IF .EQ. 0 NOW, MERELY LEAVE..ALREADY SET + + MOV M,A ;AND SET THE FLAG .EQ. -1 IF HERE + EI ;LET THE CNTL-Q THRU + +CNTSL: MOV A,M ;GET FLAG STATUS + ANA A ;IS IT SET??? + RZ ;IF NOT,THEN TIME TO QUIT + JMP CNTSL ;STAY IN LOOP IF FLAG STILL SET + + .SBTTL **8080 TO KS10 CHARACTER SERVICE** +TENCHR: STA CHRBUF ;PUT CHARACTER IN A RAM BUFFER + MVI A,^O32 ;DESIRED ADDRESS FOR DEPOSTING CHARACTER + + OUT A2835 ;WRITE ONLY RELEVANT PIECE OF THE ADDRESS + XRA A ;THEN CLR ACCUM + OUT A2027 ;AND CLR THE REST OF THE HARDWARE ADDRESS REGISTER + OUT A1219 + OUT W1219 ;CLEAR PIECES OF DEPOSIT DATA WHICH MUST BE ZERO + OUT W0411 + OUT W0003 + + MVI A,02 ;BIT TO SAY "WRITE FUNCTION" + OUT A0003 ;***** I/O WRT 113 ***** + +;THE FOLLOWING "ADD A" WORKS BY LUCK..I.E. 2+2=4 + ADD A ;BIT INTO ACCUM FOR "COM/ADR CYCLE" + OUT BUSARB ;***** I/O WRT 115/4 ***** + + LDA CHRBUF ;NOW GET THE CHARACTER WE WANT + OUT W2835 ;PUT IT IN THE HARDWARE REGISTER + MVI A,1 ;AND GET THE VALID BIT TO GO WITH THE CHARACTER + OUT W2027 ;PUT IT IN THE HARDWARE REGISTER + +;AND BY LUCK, THE ACCUM HAS JUST WHAT WE NEED FOR THE NEXT STEP + OUT DTARB ;***** I/O WRT 114/1 ***** + + MVI A,^O360 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" + ;"T ENB FOR DATA CYCLE" + OUT BUSCTL ;*****I/O WRT 210/360 ***** + +;DO THIS TWICE TO GUARANTEE THAT THE INTERRUPT HAPPENS + MVI A,1 ;BIT FOR SETTING INTERRUPT TO THE KS10 + OUT INT2KS ;SET THE INTERRUPT + OUT INT2KS ;SET THE INTERRUPT + + RET ;AND EXIT NORMALLY.... + ;ENTER HERE WITH THE CHAR IN THE ACCUM +.SBTTL **KS10 TO 8080 CHARACTER SERVICE** +;ROUTINE FOR HANDLING INTERRUPT CHARACTERS FROM A RUNNING KS10. +;ONLY CHARS FROM KS TO CTY IMPLEMENTED +CHRRDY: INTON ;SET UP INTERNAL MODE + DI ;COMMON CODE,NOT TO BE DISTURBED + +;DISABLE INTERRUPTS FOR THIS OPERATION + LDA TRAPEN ;GET DEFAULT FOR THE TRAP ENABLE BITS + OUT DIAG ;*****I/O WRT/ TO CLR THE INTERRUPT***** + +;FALL TO HERE IF YES WE ARE IN KLINIK MODE 2.. ITS POSSIBLE THAT THIS INTERRUPT +;IS FROM THE KLINIK COMM WORD, FOR THE KLINIK LINE + EXAM 35 ;EXAM THE KLINIK COMM WORD + INTOFF ;KEEP THIS FLAG IN STEP + LDA EMBUF+1 ;GRAB THE CONTENTS OF THE BYTE WITH THE CONTROL KEY + ANA A ;SET 8080 FLAGS + JZ CTYONLY ;IF CONTROL KEY CLEAR, NOTHING FROM KLINIK, TRY CTY + + MOV B,A ;SAVE THE DATA IN THE ACCUM FOR A LITTLE WHILE + LDA CSLMODE ;GET CURRENT MODE..DECIDE IF MUST THROW AWAY CHARS, OR + ANI .MODE0!.MODE1!.MODE3 ; JUST ACT AS A NULL BIT BUCKET + JNZ NULKL ;JUMP TO A NULL ACTION IF ANY OF THESE 3 MODES + +;NOW HERE IF CONTROL KEY IS .NE. 0 + MOV A,B ;RETRIEVE DATA + CPI 1 ;IS IT THE KEY FOR A SIMPLE CHARACTER TO BE OUTPUT?? + JZ KLPCHR ;IF YES, GO PROCESS THE CHARACTER + + CPI 2 ;IS IT FOR A HANGUP + JNZ NOACTN ;NOPE, IGNORE ENTIRELY + + CALL HANGUP ;YUP, HANG 'EM UP + EI ;IDENTICAL CODE TO LOCATION "NOACTN", BUT THE 2 BYTES + RET ; HERE ARE CHEAPER THAN A "JMP"..I'M OUT OF PROM SPACE + ;CODE FOR PRINTING THE DESIRED CHARACTER ON THE KLINIK LINE +KLPCHR: TSTRDY REMCTL ;SEE IF THE LINE IS READY FOR THE NEXT CHARACTER + JZ KLPCHR ;IF NOT READY YET, BETTER WAIT LONGER + +;HERE WHEN READY + LDA EMBUF ;GET THE CHARACTER + OUT REMDAT ;PRINT IT +NULKL: MVI A,^O35 ;NOW MUST CLEAR THE WORD, AND INTERRUPT TO SAY DONE + JMP TTOCOM ;GO COMMON CODE + CTYONLY: INTON ;DON'T PRINT THIS CRUD + EXAM 33 ;GET THE COMMUNICATION WORD + INTOFF ;INTERNAL MODE OFF + LDA EMBUF+1 ;GET THE INTERRUPT CODE + CPI 1 ;IS INTERRUPT CODE .EQ. 1?? + JNZ NOACTN ;JUMP TO "NO ACTION" IF NOT, CODE OUT OF BOUNDS + + LDA EMBUF ;ACTUAL CHAR TO ACCUM + MOV B,A ;AND SAVE IT IN THE B REG + +;CODE TO PRINT A CHAR PASSED FROM THE KS-10 CPU. CODE INTERRUPTS +;THE 10 WHEN THE CHARACTER HAS FINISHED PRINTING +CTYPCHR: TSTRDY CTYCTL ;CHECK IS THE XMITTER READY?? + JZ CTYPCHR ;LOOP UNTIL IT IS + +;FALL THRU WHEN READY +;BUT BEFORE PRINTING, CHECK THE KLINIK LINE TO SEE IF IT GETS THE +;CHARACTER TOO + LDA CSLMODE ;CHECK THE KLINIK MODE + CPI .MODE3 ;IS THE KLINIK PARALLEL TO THE CTY LINE?? + JNZ CTYOUT ;JUMP IF NO. KLINIK DOES NOT GET THIS CHARACTER + +;FALL HERE IF YES, KLINIK LINE GETS A PIECE OF THIS CHARACTER TOO. +KLTOO: TSTRDY REMCTL ;SEE IF KLINIK LINE IS READY + JZ KLTOO ;IF NOT YET, GO BACK AND TRY AGAIN + + MOV A,B ;CHAR TO ACCUM + OUT REMDAT ;PRINT IT ON THE KLINIK LINE + +CTYOUT: MOV A,B ;GET THE CHAR WE SAVED IN THE B REG. + OUT CTYDAT ;SEND TO THE UART + ;NOW CLEAR A DATA BUFFER FOR DEPOSITING 0'S INTO THE MOS MEMORY +;WE ARE USING IN LINE CODE HERE IN ORDER TO SPEED UP THE TYPE-OUT +;ON KS10 TO 8080 XFER'S.. + + MVI A,^O33 ;THIS IS THE ADDRESS WE WISH TO DEPOSIT +TTOCOM: OUT A2835 ;PUT IT INTO THE HARDWARE REGISTER + XRA A ;CLEAR ACCUM, BECAUSE THE REST OF THE ADDR MUST BE ZERO + OUT A2027 ;CLR THE OTHER HARDWARE REGISTERS + OUT A1219 + OUT W2835 ;AND WE WILL MAKE ALL OF THE HARDWARE DATA REGS 0 + OUT W2027 + OUT W1219 + OUT W0411 + OUT W0003 + + MVI A,02 ;BIT TO SAY "WRITE FUNCTION" + OUT A0003 ;***** I/O WRT 113 ***** + +;THIS "ADD A" WORKS BY LUCK..I.E. 2+2=4 + ADD A ;BIT INTO ACCUM FOR "COM/ADR CYCLE" + OUT BUSARB ;***** I/O WRT 115/4 ***** + + MVI A,1 ;BIT INTO ACCUM FOR "DATA CYCLE" + OUT DTARB ;***** I/O WRT 114/1 ***** + + MVI A,^O360 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" + ;"T ENB FOR DATA CYCLE" + OUT BUSCTL ;*****I/O WRT 210/360 ***** + + +;DO THIS TWICE TO GUARANTEE THE INTERRUTP GETS THRU +POKE10: MVI A,1 ;BIT FOR SETTING INTERRUPT TO THE KS10 + OUT INT2KS ;SET THE INTERRUPT + OUT INT2KS ;SET THE INTERRUPT +NOACTN: EI ;OK FOR INTERRUPTS NOW + RET ;AND OUT + .SBTTL **TTY HANDLER FOR SPECIAL CHARACTERS** +;WHEN HERE, "B" REG CONTAINS THE STATUS OF THE CTY LINE +TTERR: MOV A,B ;COPY CTY STATUS TO ACCUM + ANI ^O70 ;ANY ERRS IN THE CTY UART?? + JNZ TTERR1 ;IF YES, GO CHECK THINGS ON THE CTY LINE + +;HERE IF GOT KLINIK ERRORS + MVI A,^O25 ;BEFORE JUMPING, RESET THE UART SO IT WILL WORK + OUT REMCTL ;I/O WRITE TO RESET THE UART + + LDA USRMD ;CHECK USER MODE.. WILL NOT REPORT ERR IF IT IS + ANA A ;SET FLAGS + JNZ INTCH ;IF WAS USER MODE, IGNORE OVERRUN AND HANDLE CHARACTER + RET ;DONE INT + TTERR1: ANI ^O50 ;SEE IF OVERRRUN OR A FATAL ERROR + +;NOW MUST CLR ERROR FROM THE UART FIRST + MVI A,^O25 ;BITS TO CLR ERROR CONDITIONS IN UART + OUT CTYCTL ;*****I/O WRT 200/25 ***** + JNZ TTERMS ;NOW JUMP IF FATAL + + LDA USRMD ;BEFORE ISSUEING MESSAGE,IS USER MODE SET?? + ORA A ;TEST USER MODE FLAG + JNZ INTCH ;IF YES, USER MODE, THEN IGNORE THE ERROR + +;NOW MUST CLR OVERRUN ERROR FROM THE UART +TTERMS: LXI H,CSLMODE ;GET CURRENT MODE OF KLINIK + MOV C,M ;SAVE IT IN C + MVI M,0 ;NOW CLEAR CSL MODE + PUSH H ;AND SAVE "H,L" + PLINE TTM ;OUTPUT THE ERROR MESSAGE + POP H ;AND RESTORE MEM POINTER + MOV M,C ;REPLACE CSL MODE AND GET OUT + RET ;AND RESTART NULL LOOP + +CNTC: LXI SP,RAMST+^O2000 ;GUARANTEE THAT CNTRL-C WINS + PCHAR UPARR + PCHAR CCHR + JMP REINI ;JUMP AWAY + ;LOCAL SUBROUTINE TO RESET TTY INPUT BUFFER +BFRST: LXI H,BUFBG ;BUFFER BEGINNING + SHLD BUF. ;RESET CURRENT BUFFER POINTER + SHLD FIRST ;RESET CMD POINTER + CLRB RPEND ;CLEAR REPEAT KILLER + CLRB CMDS.. ;SAY LINE IS DONE.. AT BEGINNING OF THINGS + CLRB BFCNT ;CLEAR CHAR COUNT + RET ;AND RETURN + ;THIS IS THE INITIAL MODE OF THE KLINIK LINE AFTER A POWER UP. ALSO, WHEN +;THE KLINIK LINE IS DISABLED, OR IN "PROTECT" MODE, BUT NO PASSWORD HAS +;BEEN SET BY THE OPERATOR +MODE0: CPI BELL ;NO ECHO IF RECEIVE BELL + RZ ;BELL, SO OUT + KLINE NOACCS ;PRINT A MESSAGE FOR THE KLINIK LINE ONLY + RET ;AND NORMAL EXIT FROM THE INTERRUPT + + + +;THIS IS KLINIK MODE 1. THIS IS THE MODE OF THE KLINIK LINE WHENEVER +;THE FRONT PANEL SWITCH IS IN THE PROTECT POSITION, AND WE ARE WAITING +;FOR THE PASSWORD TO BE ENTERED. +MODE1: KLINE QPW ;BEGIN BY PRINTING "PW:" + LXI H,KPWBUF ;INITIALIZE THE BUFFER FOR SAVING TYPED PASSWORD + SHLD KPWPNT ;SAVE IN THE BUFFER POINTER + + CLRB KPWCNT ;AND CLEAR THE PASSWORD CHARACTER COUNTER + + LXI H,PW.WAIT ;NOW ADDITIONAL KLINIK CHARS MUST DISPATCH TO + SHLD MODDIS ; THE PLACE THAT WAITS FOR A COMPLETE PASSWORD + RET ;END OF INTERRUPT + ;THIS IS THE ENTRY POINT WHEN THE PERSON IS IN THE PROCESS OF TYPING THE +;PASSWORD. WE STORE THE PASSWORD AS IT IS TYPED, THEN WHEN DONE, WE WILL +;VERIFY THAT IT IS CORRECT +PW.WAIT: CPI CRCHR ;IS IT AN END OF LINE CHARACTER + JZ PW.TST ;JUMP IF YES.. TIME TO VERIFY THE PASSWORD + + CALL UP.LO ;GENERATE ONLY UPPER CASE FOR PROGRAM INTERNALS + MOV B,A ;SAVE THE CHAR IN B REG FOR A LITTLE BIT + +;IF NOT END OF LINE, JUST ADD IT TO THE BUFFER OF CHARS THAT IS THE PASSWORD + LDA KPWCNT ;FIRST THINGS FIRST, SEE HOW MANY CHARS IN THE BUFFER + INR A ;UPDATE TO ACCOUNT FOR THIS ONE + CPI 7 ;IS IT TOO MANY + JZ PW.ERR ;JUMP IF YES. ITS A PASSWORD ERROR + STA KPWCNT ;ELSE SAVE THE UPDATED COUNT AND CONTINUE + + LHLD KPWPNT ;GET THE BUFFER POINTER + MOV M,B ;PUT THE CHARACTER IN THE BUFFER + INX H ;UPDATE THE BUFFER POINTER + SHLD KPWPNT ;PUT THE POINTER BACK + RET ;AND END OF INTERRUPT + +;CODE FOR VERIFYING THAT THE PASSWORD ENTERED IS THE CORRECT AND VALID +;PASSWORD +PW.TST: LXI D,PASSWORD ;D,E POINTS TO THE EXPECTED PASSWORD + LXI H,KPWBUF ;H,L POINTS TO THE TYPED IN BUFFER + MVI B,00 ;"B" WILL BE THE COUNTER + +PW..: LDAX D ;FETCH UP AN EXPECTED CHARACTER + ANA A ;SET THE FLAGS + JZ PW.END ;IF "END", GO MAKE SURE TYPEIN IS TERMINATED + + INR B ;ELSE UPDATE OUR COUNTER + CMP M ;AND COMPARE A CHAR + JNZ PW.ERR ;IF MIS-COMPARE REPORT IT AS ERROR + + INX D ;UPDATE EXPECTED POINTER + INX H ;UPDATE TYPED IN POINTER + JMP PW.. ;CONTINUE + ;END.. THIS IS ONLY TO VERIFY THAT TYPED TERMINATED AT THE SAME NUMBER OF +;CHARACTERS AS EXPECTED +PW.END: LDA KPWCNT ;GET EXPECTED COUNT + CMP B ;CHECK AGAINST THE CURRENT COUNT + JZ PW.OK ;AND JUMP IF COUNTS MATCH + +;FALL THRU TO ERROR IF CHARACTER COUNTS DON'T MATCH +PW.ERR: KLINE CMDNG ;GIVE USER AN ERROR MESSAGE + LXI H,PWRTRY ;HAD ERROR. ONLY GET 3 CHANCES FOR ERRORS + INR M ;UPDATE ERROR COUNT + MOV A,M ;PLACE COUNT IN ACCUM FOR A TEST + CPI 3 ;SEE IF STRUCK OUT + JZ KLIRST ;GO RESET KLINIK LINE IF USER STRUCK OUT + + JMP MODE1 ;ELSE GIVE HIM "PW:" MESSAGE AGAIN + +;HERE IF EVERYTHING MATCHED +PW.OK: CALL SETM2 ;CHANGE LINE TO MODE 2 + KCHAR 'O ;WHEN GOOD PW, SENT OUT AN "OK" + KCHAR 'K +PW.OUT: CLRB PWRTRY ;CLEAR ERROR COUNTER + RET ;EXIT + +;KLINIK LINE RESET CODE. FOR RESETING KLINIK LINE AND HANGING UP THE USER +KLIRST: CALL HANGUP ;GO HANG UP THE KLINIK LINE + CALL SETM1 ;DROP BACK TO MODE 1 + JMP PW.OUT ;ZAP ERROR FLAG THEN OUT + ;KLINIK LINE MODE 2. THIS IS STREAM INPUT/OUTPUT. ALL CHARACTERS FROM +;THE KLINIK UART ARE SENT TO THE SPECIAL KLINIK COMMUNICATION WORDS +;AND ALL WORDS FROM THE KLINIK COMM WORDS ARE OUTPUT TO THE KLINIK LINE. +MODE2: CPI CNBCK ;FIRST SEE IF THE KLINIK USER WANTS A MODE CHANGE + JNZ KL3435 ;IF NOT, GO SEND INFO TO THE KLINIK COMM WORD + + LDA MMFLG ;BEFORE GOING TO MODE 3, SEE IF MM MODE + ANA A ;SET 8080 FLAGS + JNZ END.USR ;IF YES, MM MODE, ACT LIKE FROM A CTY + +;FALL THRU IF WANTS TO CHANGE MODES. BUT BEFORE CHANGING, CHECK IF HE'S +;ALLOWED TO CHANGE MODES. + LDA KLLINE.ON ;CHECK IF KLINIK IS ON, & USER IS ALLOWED TO CHANGE + ANA A ;SET FLAGS + RZ ;IF NOT ENABLED TO CHANGE, JUST IGNORE THIS INTERRUPT + +;WELL, HE IS ALLOWED TO CHANGE. SEE IF THE FRONT PANEL SWITCH IS UNLOCKED + IN BOOTSW ;***** I/O RD 301 ***** +;NOTE THAT BIT LO IS TRUTH, IF BIT HI IS FALSE(DISABLED) + ANI 4 ;CHECK THE CONSOLE ENABLE BIT + JZ SETM3 ;GO MODE 3 ONLY IF PANEL NOT LOCKED.LET SETM3 DO "RET" + ;THIS IS WHERE YOU ACTUALLY WRITE THE DESIRED CHARACTER INTO THE KLINIK +;LINE COMMUNICATION WORD +KL3435: + STA CHRBUF ;PUT CHARACTER IN A RAM BUFFER + MVI A,^O34 ;DESIRED ADDRESS FOR DEPOSTING CHARACTER + + OUT A2835 ;WRITE ONLY RELEVANT PIECE OF THE ADDRESS + XRA A ;THEN CLR ACCUM + OUT A2027 ;AND CLR THE REST OF THE HARDWARE ADDRESS REGISTER + OUT A1219 + OUT W1219 ;CLEAR PIECES OF DEPOSIT DATA WHICH MUST BE ZERO + OUT W0411 + OUT W0003 + + MVI A,02 ;BIT TO SAY "WRITE FUNCTION" + OUT A0003 ;***** I/O WRT 113 ***** + +;THE FOLLOWING "ADD A" WORKS BY LUCK..I.E. 2+2=4 + ADD A ;BIT INTO ACCUM FOR "COM/ADR CYCLE" + OUT BUSARB ;***** I/O WRT 115/4 ***** + + LDA CHRBUF ;NOW GET THE CHARACTER WE WANT + OUT W2835 ;PUT IT IN THE HARDWARE REGISTER + MVI A,1 ;AND GET THE VALID BIT TO GO WITH THE CHARACTER + OUT W2027 ;PUT IT IN THE HARDWARE REGISTER + +;AND BY LUCK, THE ACCUM HAS JUST WHAT WE NEED FOR THE NEXT STEP + OUT DTARB ;***** I/O WRT 114/1 ***** + + MVI A,^O360 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" + ;"T ENB FOR DATA CYCLE" + OUT BUSCTL ;*****I/O WRT 210/360 ***** + +;DO THIS TWICE TO GUARANTEE THAT THE INTERRUPT HAPPENS + MVI A,1 ;BIT FOR SETTING INTERRUPT TO THE KS10 + OUT INT2KS ;SET THE INTERRUPT + OUT INT2KS ;SET THE INTERRUPT + + RET ;AND EXIT NORMALLY.... + \ No newline at end of file diff --git a/src/kshack/kns10.4_2 b/src/kshack/kns10.4_2 deleted file mode 100644 index 35e95782..00000000 --- a/src/kshack/kns10.4_2 +++ /dev/null @@ -1,9979 +0,0 @@ - .MAIN. CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 -CONDEF.M80 TABLE OF CONTENTS - - 3 *CONSOLE ERROR CODES DEFINED* - 56 ****NUMERICAL VALUE ASSIGNMENTS - 82 ****ASCII CHARACTER VALUE ASSIGNMENTS - 171 ****MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - 514 **** KS10 CONSOLE HARDCORE **** - 515 **"RST" INSTRUCTION CODE** - 616 **POWER UP START LOCATON** - 645 **INITIALIZE UARTS** - 699 8080 PROM CHECKSUMMER - 913 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - 1074 **TYPEIN COMMAND DECODER AND DISPATCHER** - 1109 ****CTY SERVICE**** - 1243 **COMMAND DECODER CONTINUED** - 1477 **COMMAND DISPATCH LIST** - 1617 CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM - 1637 *** "MR" CMD *** - 1661 ****INTERRUPT HANDLER**** - 1991 **8080 TO KS10 CHARACTER SERVICE** - 2030 **KS10 TO 8080 CHARACTER SERVICE** - 2144 **TTY HANDLER FOR SPECIAL CHARACTERS** - 2347 **** CONSOLE COMMANDS AS IMPLIMENTED **** - 2348 *** "EB" CMD *** - 2407 *** "DB" CMD *** - 2485 *** "EM" CMD *** - 2554 *** "EN" CMD *** - 2562 *** "EN" CND *** - 2578 *** "DM" CMD *** - 2580 *** "DN" CMD *** - 2631 *** "DN" CMD *** - 2648 *** "EI" CMD *** - 2669 *** "DI" CMD *** - 2670 *** "DN" CMD *** - 2692 *** "EK" CMD *** - 2714 *** "EN" CMD *** - 2720 *** "LA" CMD *** - 2728 *** "LI" CMD *** - 2734 *** "LK" CMD *** - 2742 *** "DN" CMD *** - 2748 *** "DK" CMD *** - 2761 *** "CP" CMD *** - 2782 *** "ER" CMD *** - 2827 *** "LR" CMD *** - 2837 *** "DR" CMD *** - 2850 *** "LC" CMD *** - 2856 *** "CE" CMD *** - 2892 *** "TE" CMD *** - 2914 *** "SC" CMD *** - 2938 *** "TP CMD" *** - 2957 *** "LT" CMD *** - 2977 *** "MM" CMD *** - 2991 *** "SI" CMD *** - 3002 *** "CS" CMD *** - 3011 *** "CH" CMD *** - 3021 *** "LF" CMD *** - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 -CMDS.M80 TABLE OF CONTENTS - - 3029 *** "DF" CMD *** - 3121 *** "RC" *** - 3163 *** "EJ" CMD *** - 3201 *** "TR" CMD *** - 3233 *** "PM" CMD *** - 3244 *** "EC" CMD *** - 3336 *** "EN" CMD *** - 3342 *** "DC" CMD *** - 3343 *** "DN TO DC" CMD *** - 3394 *** "SM" CMD *** - 3471 *** "PE" CMD *** - 3512 *** "EX" CMD *** - 3543 *** "ST" CMD *** - 3568 *** "CO" CMD *** - 3582 *** "HA" CMD *** - 3589 *** "SH" CMD *** - 3602 *** "KL" CMD *** - 3632 *** "TT" CMD *** - 3639 *** "PW" CMD *** - 3678 *** "MK" & "UM" CMD *** - 3709 *** "ZM" CMD *** - 3738 *** "RP" CMD *** - 3820 *** "DS" CMD *** - 3850 *** "MS" CMD *** - 3943 *** "BT" CMD *** - 3973 *** "LB" CMD *** - 4012 *** "MT" CMD *** - 4099 *** "MB" CMD *** - 4122 FILE SYSTEM - 4231 CRAM LOADER CODE - 4331 *** "FI" CMD *** - 4381 *** "B2" CMD *** - 4388 *** "VD" CMD *** - 4397 *** "VT" CMD *** - 4408 VERIFY CRAM CODE - 4592 CHANNEL COMMAND LIST EXECUTOR - 4807 *** "BC" CMD *** - 4994 ****KS10 CONSOLE SUBROUTINE FILE - 5689 **** CLRB EXECUTE CODE **** - 5696 **** SOME ERROR CODES **** - 6044 SUBROUTINE TIME DELAY - 6060 STRING COMPARE ROUTINE - 6119 UART MODE MODIFICATIONS - 6287 MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT - 6309 ENVELOPE COLLECTOR - 6496 **** MORE ERROR ESCAPES **** - 6517 ****DISK TRANSFER CHANNEL COMMAND LIST**** - 6559 TAPE TRANSFER CHANNEL COMMAND LIST - 6661 - SM10 DATA STORAGE PARAMETERS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1 -CONDEF.M80 - - 1 ;*******8080 CONSOLE FOR DIGITAL EQUIPMENT CORP. KS10******* - 2 - 3 .SBTTL *CONSOLE ERROR CODES DEFINED* - 4 - 5 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-1 -CONDEF.M80 *CONSOLE ERROR CODES DEFINED* - - 7 ;LISTING CONTROLS - 8 .NLIST BEX - 9 .LIST MD,MC,MEB - 10 ;SYMBOL ASSIGNMENTS - 11 - 12 020000 RAMST = 8192. ;FIRST "RAM" MEMORY ADDRESS - 13 003244 KPAINI = 1700. ;VALUE FOR .44 SEC BETWEEN WORD31 CHECKS - 14 000043 KATIMX = 35. ;NUMBER OF TIME IN A ROW KA HAS TO BE THE SAME - 15 ;KATIMX .EQ. 14. IS 6 SECONDS, .EQ.35. IS 15 SEC - 16 000300 RUNFP = ^O300 ;I/O REG CONTAING CPU "RUN FLOP" - 17 000300 TTYSW = ^O300 ;I/O REG FOR TTY FRONT PANEL SWITCHES - 18 000301 SMSTS = ^O301 ;I/O REG FOR KS10 STATUS BITS - 19 000301 BOOTSW = ^O301 ;I/O REG FOR HARDWARE "BOOT" SWITCH - 20 000302 CARRIER = ^O302 ;I/O REG FOR READING KLINIK CARRIER - 21 000100 SMPAR = ^O100 ;I/O REG FOR ENABLING KS10 PARITY DETECT - 22 000100 RESET = ^O100 ;I/O REG FOR ISSUEING KS10 BUS RESET - 23 000101 REFERR = ^O101 ;I/O REG FOR READING MOS MEM REFRESH ERR FLAG - 24 000101 LIGHTS = ^O101 ;I/O REG FOR WRITING THE PANEL LIGHTS - 25 000101 DTR = ^O101 ;I/O REG FOR WRITING THE DATA TERMINAL READY - 26 000102 R.BUSY = ^O102 ;I/O REG FOR READING "MEM BUSY" OR "I/O BUSY" - 27 000102 R.RESET = ^O102 ;I/O REG FOR READY IF RESET WENT TRUE(VIA AC LO) - 28 000204 CRMCTL = ^O204 ;I/O REG FOR ACCESSING CRAM - 29 000205 DIAG = ^O205 ;I/O REG FOR DIAG FUNCTION BITS - 30 000206 CLKCTL = ^O206 ;I/O REG FOR SETTING KS10 CLK CTL BITS - 31 000210 BUSCTL = ^O210 ;I/O REG FOR KS10 BUS COMM. - 32 000212 CPUCTL = ^O212 ;I/O REG FOR KS10 "RUN,EXECUTE,CONTINUE" - 33 000201 CTYCTL = ^O201 ;I/O REG FOR UART CONTROL/STATUS - 34 000200 CTYDAT = ^O200 ;I/O REG FOR UART DATA BUFFER - 35 000203 REMCTL = ^O203 ;REMOTE UART CONTROL REGISTER - 36 000202 REMDAT = ^O202 ;REMOTE UART DATA REGISTER - 37 000114 DTARB = ^O114 ;I/O REG FOR DATA CYCLE OF BUS ARB.. - 38 000115 BUSARB = ^O115 ;I/O REG FOR BUS ARBITRATION SIGNALS - 39 000116 INT2KS = ^O116 ;I/O REG FOR INTERRUPTING KS-10 - 40 000000 D2835 = ^O0 ;R DATA BITS 28-35 - 41 000001 D2027 = ^O1 ;R DATA BITS 20-27 - 42 000002 D1219 = ^O2 ;R DATA BITS 12-19 - 43 000003 D0411 = ^O3 ;R DATA BITS 04-11 - 44 000103 D0003 = ^O103 ;R DATA BITS 0-3 - 45 000103 A2835 = ^O103 - 46 000105 A2027 = ^O105 - 47 000107 A1219 = ^O107 - 48 000111 A0411 = ^O111 - 49 000113 A0003 = ^O113 - 50 000102 W2835 = ^O102 - 51 000104 W2027 = ^O104 - 52 000106 W1219 = ^O106 - 53 000110 W0411 = ^O110 - 54 000112 W0003 = ^O112 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-2 -CONDEF.M80 ***NUMERICAL VALUE ASSIGNMENTS - - 56 .SBTTL****NUMERICAL VALUE ASSIGNMENTS - 57 002000 BPI16 = ^O2000 ;"DENSITY/SLAVE" DEFAULT FOR 1600 BPI TAPES - 58 001000 BPI8 = ^O1000 ;"DENSITY/SLAVE" DEFAULT FOR 800 BPI TAPES - 59 000377 EOLCH = ^O377 ;END-OF-LINE CODE - 60 000020 ARBRESP = ^O20 ;BIT FOR "BUS REQ" - 61 000001 DATACK = 01 ;BIT FOR "DATA ACKNOWLEDGE" - 62 000100 NONXMEM = ^O100 ;BIT FOR "NON-EXISTANT MEMORY" - 63 000020 TRPDEF = ^O20 ;BIT SAYS DEFAULT TRAP ENABLE ON - 64 000174 DEFLTE = ^O174 ;BITS SAY DEFAULT: CACHE ENABLE, 1MSEC CLK ENABL - 65 ;ALL PARITY ON - 66 100000 BIT15 = ^O100000 ;THIS IS BIT15(IF U COUNT RIGHT TO LEFT) - 67 000001 BT.BIT = 1 ;BIT SAYS DOING BOOTSTRAP FROM DISK - 68 000002 MT.BIT = 2 ;BIT SAYS DOING BOOTSTRAP FROM MAGTAPE - 69 000001 .MODE0 = 1 ;FLAG SAYS KLINIK MODE 0 - 70 000002 .MODE1 = 2 ;FLAG SAYS KLINIK MODE 1 - 71 000004 .MODE2 = 4 ;FLAG SAYS KLINIK MODE 2 - 72 000010 .MODE3 = ^O10 ;FLAG SAYS KLINIK MODE 3 - 73 000020 .MODE4 = ^O20 ;FLAG SAYS KLINIK MODE 4 (MANUFACTURING MODE) - 74 000003 CARRLOSS = ^O3 ;INTERRUPT CODE FOR "KLINIK CARRIER LOSS" - 75 000002 KL.ACTIVE = ^O2 ;INTERRUPT CODE FOR WHEN KLINIK BECOMES ACTIVE - 76 000373 STMSK = ^O373 ;MASK FOR THE STATE LIGHT - 77 000004 STBIT = ^O4 ;STATE BIT - 78 000333 .IN = ^O333 ;THE "IN" INSTRUCTION - 79 000323 .OUT = ^O323 ;THE "OUT" INSTRUCTION - 80 000311 .RET = ^O311 ;THE "RET" INSTRUCTION - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-3 -CONDEF.M80 ***ASCII CHARACTER VALUE ASSIGNMENTS - - 82 .SBTTL****ASCII CHARACTER VALUE ASSIGNMENTS - 83 000000 Q.OUT = 00 ;NULL CHAR..STANDS FOR "QUICK.OUT" - 84 000001 SYNC = 01 ;SYNC CHAR FOR APT MESSAGES - 85 000015 CRCHR = ^O15 ;CARRIAGE RETURN - 86 000012 LFCHR = ^O12 ;LINE FEED - 87 000054 COMMA = ^O54 ;ASCII FOR COMMA - 88 000034 CNBCK = ^O34 ;CONTROL-BACKSLASH - 89 000007 BELL = ^O7 ;A BELL FOR WHEN HOST SYSTEMS GIVE ME GRIEF - 90 000052 STAR = ^O52 ;A STAR * - 91 000042 QUO = ^O42 ;DOUBLE QUOTES " - 92 000043 LBSIGN = ^O43 ;POUND SIGN # - 93 000051 RPAREN = ^O51 ;RIGHT PAREN ) - 94 000033 ALT = ^O33 ;ALT MODE - 95 000032 CNTLZ = ^O32 ;CONTROL-Z - 96 000031 CNTLY = ^O31 ;CONTROL-Y ENDS MODE 4 - 97 000025 CNTLU = ^O25 ;CONTROL-U - 98 000023 CNTLS = ^O23 ;CONTROL-S - 99 000021 CNTLQ = ^O21 ;CONTROL-Q - 100 000017 CNTLO = ^O17 ;CONTROL-O - 101 000003 CNTLC = ^O3 ;CONTROL-C - 102 000177 RBOUT = ^O177 ;RUB-OUT - 103 000103 CCHR = ^O103 ;"C" - 104 000104 DCHR = ^O104 ;"D" - 105 000011 TAB = ^O11 ;HORIZONTAL TAB - 106 000040 SPACE = ^O40 ;SPACE - 107 000057 SLASH = ^O57 ;SLASH "/" - 108 000134 BSLASH = ^O134 ;BACKSLASH "\" - 109 000044 DOLLAH = ^O44 ;DOLLAR SIGN "$" - 110 000045 PERCNT = ^O45 ;"%" - 111 000077 QUES = ^O77 ;"?" - 112 000076 ARROW = ^O76 ;"^" - 113 000125 UCHR = ^O125 ;"U" - 114 000117 OCHR = ^O117 ;"O" - 115 000136 UPARR = ^O136 ;"^" - 116 000001 ONE = ^O01 ;"1" - 117 000002 TWO = ^O02 ;"2" - 118 000003 THREE = ^O03 ;"3" - 119 000004 FOUR = ^O04 ;"4" - 120 000005 FIVE = ^O05 ;"5" - 121 000006 SIX = ^O06 ;"6" - 122 000007 SEVEN = ^O07 ;"7" - 123 000070 EIGHT = ^O70 ;"8" THE ASCII NUMBER - 124 000071 NINE = ^O71 ;"9" THE ASCII NUMBER - 125 000012 TEN = ^O12 ;"10" - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-4 -CONDEF.M80 ***ASCII CHARACTER VALUE ASSIGNMENTS - - 127 ;NUMERICAL ASSIGNMENTS TO GENERATE THE OFFSETS USED IN COMPUTING - 128 ;DEVICE ADDRESSES FROM ANY RH BASE ADDRESS - 129 .RADIX 8 - 130 000000 P.00 = 0 - 131 000002 P.02 = 2 - 132 000004 P.04 = 4 - 133 000006 P.06 = 6 - 134 000010 P.10 = 10 - 135 000012 P.12 = 12 - 136 000014 P.14 = 14 - 137 000016 P.16 = 16 - 138 000020 P.20 = 20 - 139 000022 P.22 = 22 - 140 000024 P.24 = 24 - 141 000026 P.26 = 26 - 142 000030 P.30 = 30 - 143 000032 P.32 = 32 - 144 000034 P.34 = 34 - 145 000036 P.36 = 36 - 146 000040 P.40 = 40 - 147 000042 P.42 = 42 - 148 000044 P.44 = 44 - 149 000046 P.46 = 46 - 150 000776 D776 = 776 - 151 000772 D772 = 772 - 152 .RADIX 10 - 153 ;DRIVE CONTROLLER REGISTER IS 776440..FOLLOWING COMMANDS APPLY - 154 ; 7=REWIND - 155 ; 11=DRIVE CLEAR - 156 ; 25=ERASE - 157 ; 27=WRITE TAPE MARK - 158 000031 SKP.TAPE=^O31 ; 31=SPACE FORWARD(SKIP A FILE) - 159 ; 33=SPACE REVERSE(SKIP A FILE, MOVING TAPE IN REVERSE) - 160 ; 51=WRITE CHECK FORWARD - 161 ; 57=WRITE CHECK REVERSE - 162 ; 61=WRITE FORWARD - 163 000071 READ.TAPE=^O71 ; 71=READ FORWARD(GO!) - 164 ; 77=READ REVERSE(GO!) - 165 ;DEFAULT VALUES FOR CHECKSUM COUNTS, SO THAT ASSEMBLIES WITH 3 PROMS WILL WORK - 166 000000 CHKSM0 = 0 - 167 000000 CHKSM1 = 0 - 168 000000 CHKSM2 = 0 - 169 000000 CHKSM3 = 0 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-5 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 171 .SBTTL****MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - 172 - 173 ;PCHAR--- - 174 ; PRINTS A SINGLE CHARACTER, WHICH IT FINDS IN THE TRAILING BYTE - 175 ; CLOBBERS ACCUM - 176 .MACRO PCHAR XCHR - 177 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - 178 .BYTE XCHR ;CHAR TO PRINT - 179 - 180 .ENDM - 181 - 182 ;KCHAR--- - 183 ; PRINT A SINGLE CHARACTER ON THE KLINIK LINE ONLY. CHAR TO BE PRINTED PASS - 184 ; AS A TRAILING ARG - 185 .MACRO KCHAR XCHR - 186 CALL KCHR ;GO PRINT THE CHARACTER - 187 .BYTE XCHR - 188 - 189 .ENDM - 190 - 191 ;PLINE--- - 192 ; PRINTS A LINE OF CHARACTERS, POINTER PASSED AS TRAILING ARG - 193 ; AND END OF LINE SIGNALED BY A "0" BYTE - 194 .MACRO PLINE XMS - 195 RST 3 ;PRINT LINE OF CHARS - 196 .ADDR XMS ;BUFF TO PRINT - 197 - 198 .ENDM - 199 ;KLINE--- - 200 ; PRINTS A LINE OF CHARACTERS, POINTER PASSED AS TRAILING ARG - 201 ; AND END OF LINE SIGNALED BY A "0" BYTE - 202 .MACRO KLINE XMS - 203 CALL KLINE ;PRINT LINE OF CHARS - 204 .ADDR XMS ;BUFF TO PRINT - 205 - 206 .ENDM - 207 ;INTOFF--- - 208 ; EXECUTES THE OLD "INTERNAL MODE OFF" SUBROUTINE.., BUT BY USING THE - 209 ; RESTART INSTRUCTION CALL, WE SAVE 30.+ BYTES OVER "CALL INTOFF" - 210 .MACRO INTOFF - 211 RST 6 ;GO EXIT FROM INTERNAL MODE - 212 - 213 .ENDM - 214 ;INTON--- - 215 ; EXECUTES THE OLD "INTERNAL MODE ON" SUBROUTINE.., BUT BY USING THE - 216 ; RESTART INSTRUCTION CALL, WE SAVE 30.+ BYTES OVER "CALL INTON" - 217 .MACRO INTON - 218 RST 2 ;GO SET INTERNAL MODE - 219 - 220 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-6 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 222 ;CLINE--- - 223 ; PRINTS A LINE OF CHARACTERS, POINTER PASSED IN (H,L), - 224 ; AND END OF LINE SIGNALED BY A "0" BYTE - 225 .MACRO CLINE XMS - 226 LXI H,XMS ;PASS POINTER TO THE CHARACTERS - 227 CALL CLINE ;PRINT LINE OF CHARS - 228 - 229 .ENDM - 230 - 231 ;PCRLF--- - 232 ; PRINTS CARRIAGE RETURN-LINE FEED - 233 ; LEAVES ALL REGISTERS IN TACT - 234 .MACRO PCRLF - 235 CRLF ;GO PRINT CARRIAGE RETURN LINE FEED - 236 - 237 .ENDM - 238 ;SSCLK--- - 239 ; ISSUES A SINGLE KS10 CLOCK..CLOBBERS THE ACCUMULATOR - 240 .MACRO SSCLK - 241 MVI A,02 ;BIT TO SET "SINGLE CLK" TO KS10 - 242 OUT CLKCTL ;ISSUE THE SINGLE CLOCK - 243 - 244 .ENDM - 245 ;PTAB--- - 246 ; PRINTS A TAB - 247 ; CLOBBERS ACCUM - 248 .MACRO PTAB - 249 PCHAR TAB ;GO PRINT A TAB - 250 - 251 .ENDM - 252 ;PSPACE--- - 253 ; PRINTS A " " SPACE - 254 ; CLOBBERS ACCUM - 255 .MACRO PSPACE - 256 PCHAR SPACE ;GO PRINT A SPACE - 257 - 258 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 1-7 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 260 ;PSLSH--- - 261 ; PRINTS A "/" SLASH - 262 ; CLOBBERS ACCUM - 263 .MACRO PSLASH - 264 PCHAR SLASH ;GO PRINT A SLASH - 265 - 266 .ENDM - 267 ;ENDCMD---MACRO TO DO THE RIGHT STUFF - 268 ; AT THE END OF A COMMAND..COMMON CODE FOR FINISHING ALL INSTRS - 269 .MACRO ENDCMD - 270 RET ;RETURN TO CALLER - 271 - 272 .ENDM - 273 ;BUSRESP--- MACRO TO READ I/O REG 301Q - 274 ; IN ORDER TO CHECK ANY OF THE BITS WHICH - 275 ; ARE READABLE IN THAT REGISTER.. THE BIT - 276 ; OR BITS TO BE CHECKED IS PASSED AS A - 277 ; TRAILING ARGUEMENT "DB" TO A RST INSTR. - 278 ; ;THE EXECUTION OF THE RESTART ACCOUNTS - 279 ; FOR THE 2 "NOP" TIME REQUIRED FOR THE - 280 ; BUS ARBITRATOR TO GRANT THE BUS. THIS - 281 ; MACRO RETURNS MAINLINE WITH THE Z-BIT SET - 282 ; IF THE REG 301 DOES !NOT! MATCH THE TRAILING - 283 ; ARG THAT WAS PASSED AND WITH THE Z-BIT CLEAR - 284 ; IF THERE IS A "TRUE" IN ANY OF THE BIT POSITIONS - 285 ; PASSED... - 286 .MACRO BUSRESP XXX - 287 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - 288 .BYTE XXX ;BITS TO BE CHECKED - 289 - 290 .ENDM - 291 .MACRO D ARG,ARG1,NUL,ARG2,ARG3 - 292 .NLIST - 293 - 294 .RADIX 8 - 295 - 296 .BYTE ARG3 & 377 - 297 Q.1 = < & 1> ! < & 376> - 298 Q.2 = < & 3> ! < & 374> - 299 Q.3 = < & 7> ! < & 370> - 300 Q.4 = & 17 - 301 .BYTE Q.1 - 302 .BYTE Q.2 - 303 .BYTE Q.3 - 304 .BYTE Q.4 - 305 - 306 .RADIX 10 - 307 .LIST - 308 - 309 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 2 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 311 .MACRO LI. ARG2,ARG3 - 312 .RADIX 8 - 313 - 314 - 315 ARG = 0 - 316 ARG1 = 0 - 317 NUL = 0 - 318 - 319 - 320 Q.1 = < & 1> ! < & 376> - 321 Q.2 = < & 3> ! < & 374> ! <2*4> - 322 .BYTE Q.1 - 323 .BYTE ARG3 & 377 - 324 .BYTE Q.2 - 325 .RADIX 10 - 326 - 327 .ENDM - 328 - 329 - 330 .MACRO EI. ARG2,ARG3 - 331 .RADIX 8 - 332 - 333 - 334 ARG = 0 - 335 ARG1 = 0 - 336 NUL = 0 - 337 - 338 Q.1 = < & 1> ! < & 376> - 339 Q.2 = < & 3> ! < & 374> ! <4*4> - 340 .BYTE Q.1 - 341 .BYTE ARG3 & 377 - 342 .BYTE Q.2 - 343 .RADIX 10 - 344 - 345 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 2-1 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 347 .MACRO DI. ARG2,ARG3 - 348 .RADIX 8 - 349 - 350 ARG = 0 - 351 ARG1 = 0 - 352 NUL = 0 - 353 - 354 .BYTE ARG3 & 377 - 355 Q.1 = < & 1> ! < & 376> - 356 Q.2 = < & 3> ! < & 374> - 357 .BYTE Q.1 - 358 .BYTE Q.2 - 359 - 360 .RADIX 10 - 361 .ENDM - 362 - 363 - 364 .MACRO DI.INDIRECT ARG3 - 365 .RADIX 8 - 366 .ADDR ARG3 - 367 .BYTE ^O200 - 368 - 369 .RADIX 10 - 370 .ENDM - 371 - 372 .MACRO TWAIT ARG3 - 373 .RADIX 8 - 374 .ADDR ARG3 - 375 .BYTE <14*4> - 376 - 377 .RADIX 10 - 378 .ENDM - 379 - 380 .MACRO WAIT ARG3 - 381 .RADIX 8 - 382 .ADDR ARG3 - 383 .BYTE <6*4> - 384 - 385 .RADIX 10 - 386 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 2-2 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 388 .MACRO ERRTST ARG3 - 389 .RADIX 8 - 390 .ADDR ARG3 - 391 .BYTE <10*4> - 392 - 393 .RADIX 10 - 394 .ENDM - 395 .MACRO UBA. ARG2,ARG3 - 396 .RADIX 8 - 397 - 398 - 399 ARG = 0 - 400 ARG1 = 0 - 401 NUL = 0 - 402 - 403 - 404 .BYTE ARG3 & 377 - 405 Q.1 = < & 1> ! < & 376> - 406 Q.2 = < & 3> ! < & 374> ! <16*4> - 407 .BYTE Q.1 - 408 .BYTE Q.2 - 409 .RADIX 10 - 410 - 411 .ENDM - 412 - 413 .MACRO ENDLST - 414 .RADIX 8 - 415 - 416 .BYTE 0 - 417 .BYTE 0 - 418 .BYTE <12*4> - 419 .RADIX 10 - 420 - 421 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 423 .MACRO MOV5B - 424 RST 4 - 425 .BYTE 0 - 426 .ENDM - 427 - 428 .MACRO CRLF - 429 RST 4 - 430 .BYTE 2 - 431 .ENDM - 432 - 433 .MACRO ARG16 - 434 RST 4 - 435 .BYTE 4 - 436 .ENDM - 437 - 438 .MACRO RUN.. - 439 RST 4 - 440 .BYTE 6 - 441 .ENDM - 442 - 443 .MACRO ARG36 - 444 RST 4 - 445 .BYTE 8 - 446 .ENDM - 447 - 448 .MACRO CLRRM FOO - 449 RST 4 - 450 .BYTE 10. - 451 .ADDR FOO+5 - 452 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-1 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 454 .MACRO EXAM FOO - 455 .RADIX 8 - 456 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - 457 .ADDR FOO ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 458 .RADIX 10 - 459 .ENDM - 460 - 461 .MACRO DEPOS FOO - 462 .RADIX 8 - 463 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - 464 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - 465 .ADDR FOO ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 466 .RADIX 10 - 467 .ENDM - 468 - 469 .MACRO RD.REG FOO - 470 IN FOO ;READ AN I/O REG - 471 CMA ;AND ALWAYS COMPLEMENT - 472 .ENDM - 473 - 474 .MACRO SETZM FOO - 475 CLRRM DMDAT - 476 DEPOS FOO - 477 .ENDM - 478 - 479 .MACRO TSTRDY FOO - 480 .RADIX 8 - 481 IN FOO ;READ DESIRED UART STATUS - 482 ANI 01 ;CHECK IF SET; ZBIT=0 IF READY; ZBIT=1 IF NOT YET READY - 483 .RADIX 10 - 484 .ENDM - 485 - 486 .MACRO LONG.DELAY ARG - 487 LXI H,200. * ARG ;SET UP THE TIMING COUNT IN H,L REG - 488 CALL LTLOOP ;AND GO DELAY ABOUT 1 SECOND FOR EACH (300 COUNT) - 489 .ENDM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-2 -CONDEF.M80 ***MACROS FOR OFTEN USED CODE, OR CODE SUBJECT TO REPEATED CHANGES - - 491 ;MACRO TO SAVE SPACE ON OPERATIONS THAT WANT TO CLEAR - 492 ;A LOCATION IN THE RAM.. ELIMINATES EVERY XRA/STA PAIR, AND - 493 ;INSERTS INSTEAD AN RST/BYTE PAIR.. AT BEST, AN XRA AND AN STA - 494 ;ARE ELIMINATED. AT WORST, A 3 BYTE STA IS REPLACED WITH - 495 ;A 2 BYTE RST/BYTE. - 496 .MACRO CLRB XX - 497 .NLIST - 498 OFFSET= XX - ^O20000 - 499 .IF LE, ^O400-OFFSET - 500 .IFF - 501 RST 5 - 502 .BYTE OFFSET - 503 .IFT - 504 .ERROR OFFSET,;BYTE OUT OF RANGE ON CLRB MACRO - 505 .ENDC - 506 .LIST - 507 .ENDM - 508 - 509 117755 CHKSM0=-^O60023 - 510 144633 CHKSM1=-^O33145 - 511 160054 CHKSM2=-^O17724 - 512 004326 CHKSM3=-^O173452 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-3 -HCORE.M80 *** KS10 CONSOLE HARDCORE **** - - 514 .SBTTL**** KS10 CONSOLE HARDCORE **** - 515 .SBTTL **"RST" INSTRUCTION CODE** - 516 - 517 ;AT POWER UP, ALWAYS BEGIN AT 0000 - 518 - 519 000000 .= 0000 - 520 000000 000 NOP ;NO-OPS FOR 2 INSTR CYCLES - 521 000001 000 NOP ; LETS 8080 SETTLE DOWN - 522 - 523 000002 363 DI ;GUARANTEE INTERRUPTS DISABLED - 524 000003 303 100 000 JMP PWRUP ;BEGIN WITH INITIALIZATION CODE - 525 - 526 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 527 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 528 ;BEGIN CODE FOR "PCHAR" WITH A "RST 1" - 529 000010 .= ^O10 - 530 - 531 000010 343 XTHL ;GET POINTER TO TRAILING ARG - 532 000011 176 MOV A,M ;CHAR INTO ACCUM - 533 000012 043 INX H ;UPDATE POINTER TO RETURN ADDRESS - 534 000013 343 XTHL ;RESTORE RETURN ADDRESS TO STACK - 535 000014 303 010 004 JMP PCHR ;AND GO.... - 536 - 537 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 538 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 539 ;SUBROUTINE TO SET INTERNAL STATUS(I.E. DONT TYPE ON TTY) - 540 000020 .= ^O20 - 541 - 542 000020 345 INTON: PUSH H ;SAVE THE LIL BUGGER - 543 000021 041 120 040 LXI H,NOPNT ;GET VALUE OF FLAG - 544 000024 064 INR M ;INCREMENT BY ONE - 545 000025 341 POP H ;RESTORE THE REG WE SAVED - 546 000026 311 RET ;AND RETURN - 547 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-4 -HCORE.M80 **"RST" INSTRUCTION CODE** - - 549 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 550 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 551 ;BEGIN CODE FOR "PLINE" - 552 000030 .= ^O30 - 553 - 554 000030 343 XTHL ;GET PNTR TO TRAILING ARG - 555 000031 136 MOV E,M ;GET LO ORDER PIECE - 556 000032 043 INX H ;UPDATE PNTR - 557 000033 126 MOV D,M ;GET HI ORDER PIECE - 558 000034 043 INX H ;UPDATE PNTR - 559 000035 303 156 004 JMP PLNE ;AND GO TO ACTUAL ROUTINE - 560 - 561 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 562 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 563 ;BEGIN CODE FOR "TRAP" OR "UUO" TYPE SUBROUTINE CALLS - 564 000040 .= ^O40 - 565 - 566 000040 343 XTHL ;SAVE "H,L" WHILE GETTING PC - 567 000041 176 MOV A,M ;GET INDEX INTO SUBROUTINE DISPATCH LIST - 568 000042 043 INX H ;UPDATE "PC" TO POINT AT RETURN - 569 000043 343 XTHL ;PUT BACK RETURN AND RESTORE "H,L" - 570 000044 345 PUSH H ;NOW SAVE "H,L" WHILE WE SET UP DISPATCH - 571 000045 303 110 032 JMP RTNDIS ;GO CALCULATE SUBROUTINE TO DISPATCH TO.. - 572 - 573 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 574 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 575 ;THIS CODE CLEARS A SINGLE BYTE OF RAM SPACE, IN THE RANGE - 576 ;FROM 20000-20377 - 577 000050 .= ^O50 - 578 - 579 000050 343 XTHL ;SAVE "H,L" WHILE GETTING PC - 580 000051 176 MOV A,M ;GET INDEX INTO SUBROUTINE DISPATCH LIST - 581 000052 043 INX H ;UPDATE "PC" TO POINT AT RETURN - 582 000053 343 XTHL ;PUT BACK RETURN AND RESTORE "H,L" - 583 000054 345 PUSH H ;NOW SAVE "H,L" WHILE WE SET UP DISPATCH - 584 000055 303 146 032 JMP CLRBYT ;GO CALCULATE SUBROUTINE TO DISPATCH TO.. - 585 - 586 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 587 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 588 ;THIS CODE EXECUTES THE "INTERNAL MODE OFF" FUNCTION, TURNING OFF - 589 ;THE PRINTING OF 8080 FUNCTIONS EXECUTED INTERNALLY. "INTOFF" IS - 590 ;CALLED AT LEAST 15 TIMES, SO THIS RESTART CODE SAVES AT LEAST - 591 ;30 BYTES OVER "CALLS INTOFF" - 592 000060 .= ^O60 - 593 - 594 000060 345 PUSH H ;SAVE THE LIL BUGGER - 595 000061 041 120 040 LXI H,NOPNT ;CLEAR ACCUM - 596 000064 065 DCR M ;DECREMENT PRINT FLAG - 597 000065 341 POP H ;RESTORE THE REG WE SAVED - 598 000066 311 RET ;AND RETURN - 599 - 600 ;*** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS - 601 ;*** AND SPECIAL PURPOSE "RST" INSTRUCTIONS - 602 ;BEGIN CODE FOR HANDLING INTERRUPTS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-5 -HCORE.M80 **"RST" INSTRUCTION CODE** - - 603 000070 .= ^O70 - 604 - 605 000070 363 DI ;GUARANTEE INTERRUPTS DISABLED - 606 000071 365 PUSH PSW ;SAVE - 607 000072 305 PUSH B ; EVERYTHING - 608 000073 325 PUSH D ; ONTO THE STACK - 609 000074 345 PUSH H - 610 - 611 000075 303 266 005 JMP INTRP ;AND GO TO PROCESS THE INTERRUPT... - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-6 -HCORE.M80 **"RST" INSTRUCTION CODE** - - 613 ;MAINLINE CODE BEGINS HERE - 614 000100 .= ^O100 - 615 - 616 .SBTTL **POWER UP START LOCATON** - 617 ;BEGIN BY SETTING UP 8080 STACK POINTER - 618 000100 061 000 044 PWRUP: LXI SP,RAMST+^O2000 ;LOAD STACK PNTR WITH TOP RAM LOC - 619 - 620 ;********************************************* - 621 ;WILL BE TAKEN OUT WHEN WE PUT IN THE POWER UP SELF TEST - 622 - 623 ;MUST SET DISPATCH LIST AND CLEAR RAM - 624 000103 041 000 040 LXI H,RAMST ;SET "H,L" REGISTER TO START RAM ADDR - 625 000106 021 000 004 LXI D,^O2000 ;COUNTER TO FILL REST OF RAM W 0'S - 626 - 627 000111 066 000 CLRLP: MVI M,00 ;CLEAR A RAM LOC - 628 000113 043 INX H ;NEXT RAM LOCATION - 629 000114 033 DCX D ;DOWN COUNTER - 630 000115 173 MOV A,E ;LO ORDER PIECE TO ACCUM - 631 000116 262 ORA D ;THROW IN THE HI ORDER PIECE - 632 000117 302 111 000 JNZ CLRLP ;CONTINUE TILL DONE - 633 ;*************************************************** - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-7 -HCORE.M80 **POWER UP START LOCATON** - - 635 ;BEGIN PROCEEDURE FOR INITIALIZING KS10 - 636 ;MUST INDIVIDUALLY CLEAR KS10 FLOPS "RUN","EXECUTE",& "CONTINUE" - 637 ; BECAUSE THEY ARE NOT RESET BY KS10 BUS RESET - 638 000122 257 XRA A ;SET ACCUM=0 - 639 ;SET 0'S TO "RUN,EXECUTE,CONT" - 640 000123 323 212 OUT CPUCTL ;***** I/O WRT 212/0 ***** - 641 - 642 ;ISSUE KS10 BUS RESET - 643 000125 315 237 005 CALL MRINT ;DOES RESET AND SETS DEFAULT PARITY & TRAPS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-8 -HCORE.M80 **INITIALIZE UARTS** - - 645 .SBTTL **INITIALIZE UARTS** - 646 ;RAM BUFFERS HAVE BEEN INITIALIZED.. NOW MUST READ FRONT - 647 ; PANEL SWITCHES & INITIALIZE "UART" - 648 000130 333 300 IN TTYSW ;***** I/O READ 300Q ***** - 649 000132 057 CMA ;FIX INVERSION - 650 - 651 000133 001 200 004 LXI B,^O2200 ;THIS SETS B=^O4 AND C=^O200 - 652 000136 147 MOV H,A ;H WILL HOLD CTY STOP BIT FOR US.@BIT POS 7 - 653 000137 037 RAR ;BIT 4 MOVES TO BIT 3 - 654 000140 037 RAR ;BIT MOVES TO BIT 2 - 655 000141 137 MOV E,A ;E WILL HOLD KLINIK LENGTH BIT. @BIT POS 2 - 656 000142 037 RAR ;BIT 6 IS AT 4 FROM OTHER SHIFTS, NOW TO BIT 3 - 657 000143 037 RAR ;AND TO BIT 2 - 658 000144 157 MOV L,A ;L WILL HOLD CTY LENGTH BIT. @BIT POS 2 - 659 000145 174 MOV A,H ;ORIGINAL BACK TO ACCUM - 660 000146 027 RAL ;BIT 5 TO BIT 6 - 661 000147 027 RAL ;AND TO BIT 7 - 662 000150 127 MOV D,A ;D WILL HOLD KLINIK STOP BIT. @BIT POS 7 - 663 - 664 ;NOW BEGIN MASKING OPERATIONS TO ISOLATE THE DESIRED UART BIT SETTINGS - 665 000151 171 MOV A,C ;MASK OF OCTAL 200 INTO ACCUM - 666 000152 244 ANA H ;ACCUM HAS ONLY CTY STOP BIT - 667 000153 147 MOV H,A ;COPY BACK TO H - 668 000154 171 MOV A,C ;MASK TO ACCUM - 669 000155 242 ANA D ;ACCUM HAS ONLY A STOP BIT - 670 000156 127 MOV D,A ;COPY BACK TO D - 671 - 672 ;NOW MASK FOR THE LENGTH BITS - 673 000157 170 MOV A,B ;MASK OF OCTAL 4 INTO ACCUM - 674 000160 245 ANA L ;ACCUM NOW HAS CTY LENGTH BIT ONLY - 675 000161 264 ORA H ;THROW IN THE CTY STOP BIT - 676 000162 366 112 ORI ^B01001010 ;ADD IN THE CONSTANT BITS - 677 000164 323 201 OUT CTYCTL ;SET THE UART MODE.......... - 678 - 679 ;NOW SET MODE FOR THE KLINIK STUFF - 680 000166 170 MOV A,B ;MASK OF OCTAL 4 INTO ACCUM - 681 000167 243 ANA E ;ACCUM NOW HAS KLINIK LENGTH BIT ONLY - 682 000170 262 ORA D ;THROW IN THE KLINIK STOP BIT - 683 000171 366 112 ORI ^B01001010 ;ADD IN THE CONSTANT BITS - 684 000173 323 203 OUT REMCTL ;SET THE KLINIK UART MODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-9 -HCORE.M80 **INITIALIZE UARTS** - - 686 ;NOW ENABLE THE UART TO RECEIVE AND TRANSMIT - 687 000175 076 025 MVI A,^B00010101 ;BITS FOR UART CONTROL - 688 ;SET UART TO RECEIVE AND TRANSMIT - 689 000177 323 201 OUT CTYCTL ;***** I/O WRT 200/025 ***** - 690 - 691 000201 076 020 MVI A,^O20 ;ONE BIT TO SAY RESET THE UART - 692 000203 323 203 OUT REMCTL ;RESET THE KLINIK UART BUT DO NOT ENABLE IT!! - 693 - 694 000205 333 200 IN CTYDAT ;***** I/O RD 201***** READ 1 DUMMY CHAR OUT OF UART - 695 000207 333 202 IN REMDAT ;***** I/O RD 203***** READ 1 DUMMY CHAR OUT OF UART - 696 - 697 000211 315 163 010 CALL BFRST ;INIT TTY INPUT BUFFER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-10 -HCORE.M80 8080 PROM CHECKSUMMER - - 699 .SBTTL 8080 PROM CHECKSUMMER - 700 ;CODE TO COMPUTE A CHECKSUM FOR EACH OF THE 2K 8080 PROM PIECES - 701 ;FIRST COMPUTE THE CHECKSUMS FOR EACH PROM, THEN DO SIMPLE TEST ON THE 8080 - 702 ;RAM..BEGIN WITH THE PROMS - 703 000214 041 000 000 LXI H,00 ;START AT PROM ADDRESS 0 - 704 000217 257 LCHKR: XRA A ;CLEAR ACCUM - 705 000220 117 MOV C,A ;CLEAR B,C PAIR - 706 000221 107 MOV B,A ;"B,C" TO BE USED AS ADDEND - 707 000222 137 MOV E,A ;CLEAR D,E PAIR - 708 000223 127 MOV D,A ;"D,E" TO HOLD CURRENT COUNT OF CHECKSUM - 709 - 710 000224 116 A256: MOV C,M ;GET A BYTE - 711 000225 043 INX H ;UPDATE MEM POINTER - 712 000226 353 XCHG ;PUT CURRENT CHECKSUM SUB TOTAL INTO H,L - 713 000227 011 DAD B ;THROW IN AN ADDEND - 714 000230 353 XCHG ;RETURN H,L TO RIGHTFUL PLACE - 715 - 716 ;NOW QUICK CHECK FOR THE END OF PROM - 717 000231 175 MOV A,L ;GET LO ORDER OF CURRENT PROM ADDRESS - 718 000232 247 ANA A ;SET CONDITION CODES - 719 000233 302 224 000 JNZ A256 ;IF .EQ. 0,WE'VE DONE 256 LOCS, IF .NE. 0, DO MORE - 720 - 721 ;FALL TO HERE WHEN DONE A CHUNK OF 256..SEE IF ITS ON A PROM BOUNDARY NOW - 722 000236 174 MOV A,H ;GET HI ORDER PIECE OF ADDRESS - 723 000237 346 007 ANI ^O7 ;IF THIS .EQ. 0, THEN WE ARE AT A BOUNDARY - 724 000241 302 224 000 JNZ A256 ;IF .NE 0, THEN KEEP TRYING - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-11 -HCORE.M80 8080 PROM CHECKSUMMER - - 726 ;FALL THRU HERE WHEN WE'VE COMPLETED A PROMS WORTH - 727 000244 174 MOV A,H ;GET HI ORDER, WHICH CORRESPONDS TO "WHICH PROM" - 728 000245 017 RRC ;JUSTIFY AT EDGE OF THE ACCUM - 729 000246 017 RRC - 730 000247 017 RRC - 731 000250 075 DCR A ;DECREMENT MAKES "0-3" INSTEAD OF "1-4" - 732 000251 207 ADD A ;DOUBLE THIS VALUE TO MAKE IT ON 16 BYTE BOUNDARIES - 733 - 734 000252 365 PUSH PSW ;SAVE THIS VALUE FOR A BIT - 735 000253 345 PUSH H ;AND SAVE OUR CURRENT POINTER - 736 000254 302 315 000 JNZ DEV ;IF DOING PROM ZERO, ELIMINATE THE ACTUAL CHECKSUM COUNT - 737 - 738 ;FELL THRU TO HERE TO DO ACTUAL CHECKSUM ELIMINATION - 739 ;EXECUTED WHEN CHECKSUMMING PROM 0. IT REMOVES THE ACTUAL CHECKSUM VALUES - 740 ;FROM THE COMPUTED CHECKSUM, AS WE CANNOT SOLVE THE CHECKSUM FEEDBACK - 741 ;LOOP PROBLEM - 742 000257 365 PUSH PSW ;SAVE ACCUM - 743 000260 041 201 005 LXI H,CHECKS ;H,L GETS A POINTER TO THE LIST OF CHECKSUMS - 744 000263 076 010 MVI A,8. ;START WITH A COUNT OF 8, FOR THE EIGHT BYTES WE MUST SUB - 745 000265 062 000 040 DEVLP: STA T80DT ;SAVE COUNT IN RAM, SO WE CAN USE ACCUM - 746 000270 006 377 MVI B,^O377 ;IN B,C PAIR, ENSURE UPPER HALF .EQ. -1 - 747 000272 176 MOV A,M ;GET CHECKSUM BYTE TO ACCUM - 748 000273 057 CMA ;NEGATE IT - 749 000274 117 MOV C,A ;THROW IT INTO A 16 BIT ENTITY - 750 000275 003 INX B ;AND MAKE B,C PAIR 2'S COMPLIMENT - 751 - 752 000276 353 XCHG ;GET CURRENT COMPUTED CHECKSUM TO H,L - 753 000277 011 DAD B ;"SUBTRACT" THE BYTE WE'VE ASSEMBLED.(2'S COMP ADDITION) - 754 000300 353 XCHG ;PUT H,L/D,E PAIR RIGHT - 755 000301 043 INX H ;AND UPDATE THE POINTER INTO THE LIST - 756 000302 072 000 040 LDA T80DT ;GET OUR CURRENT COUNT FROM THE RAM - 757 000305 075 DCR A ;DECREMENT - 758 000306 302 265 000 JNZ DEVLP ;CONTINUE IN THE LOOP - 759 - 760 000311 001 000 000 LXI B,00 ;NOW GUARANTEE B,C PAIR IS ALL GONE - 761 ;FALL THRU WHEN FINISHED - 762 000314 361 POP PSW ;RESTORE ACCUM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-12 -HCORE.M80 8080 PROM CHECKSUMMER - - 764 000315 117 DEV: MOV C,A ;GET CURRENT PROM NUMBER INTO C - 765 000316 041 201 005 LXI H,CHECKS ;H,L POINTS TO THE TABLE OF CHECKSUM - 766 000321 011 DAD B ;ADD INDEX, AND NOW (M) PNTS TO EXPECTED CHECKSUM - 767 000322 116 MOV C,M ;COPY EXPECTED CHECKSUM INTO C - 768 000323 043 INX H - 769 000324 106 MOV B,M ;AND B, MAKES "B,C" PAIR - 770 000325 043 INX H ;AND KEEP COUNT UP - 771 - 772 ;NOW D,E HAS CALCULATED CHECKSUM AND B,C HAS EXPECTED CHECKSUM - 773 000326 353 XCHG ;H,L NOW HAS CALCULATED CHECKSUM - 774 000327 011 DAD B ;IF CHECKSUM OK, RESULT OF THIS SHOULD .EQ. 0 - 775 000330 175 MOV A,L ;GET LO PIECE - 776 000331 264 ORA H ;THROW IN HI PIECE..CONDITION CODE FLAGS NOW SET - 777 - 778 000332 353 XCHG ;D,E NOW HAS THE RESULTS OF THE ADDITION - 779 000333 341 POP H ;BEFORE JUMPING ON CONDITION CODES, FIRST FIX REGISTER - 780 000334 302 356 000 JNZ CHKERR ;IF H,L WAS .NE. 0, THEN WE HAD PROM CHECKSUM ERROR... - 781 - 782 ;FALL THRU IF CHECKSUM WAS OK - 783 000337 361 POP PSW ;RESTORE INDEX INTO "WHICH PROM" WE ARE IN - 784 000340 376 006 CPI 6 ;SEE IF DONE ALL - 785 000342 302 217 000 JNZ LCHKR ;JUMP BACK TO BEGINNING IF NOT DONE ALL - 786 - 787 ;FALL THRU IF DONE ALL..PROMS CHECKSUM OK - 788 000345 303 373 000 JMP XXX230 ;SO AVOID THE ERROR PRINTOUT CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-13 -HCORE.M80 8080 PROM CHECKSUMMER - - 790 ;YOU JUMPED TO HERE IF YOU ENCOUNTERED A CHECKSUM ERROR. - 791 000350 077 103 110 ROMMSG: .ASCIZ /?CHK / ;IF PROM CHECKSUM FAILS, USE THIS MESSAGE - 792 000356 CHKERR: PLINE ROMMSG ;PRINT "?CHK " - (1) 000356 337 RST 3 ;PRINT LINE OF CHARS - (1) 000357 350 000 .ADDR ROMMSG ;BUFF TO PRINT - 793 000361 361 POP PSW ;RETRIEVE PROM NUMBER - 794 000362 017 RRC ;DIVIDE DOWN, SINCE WE DOUBLED IT BEFORE - 795 000363 074 INR A ;MAKE PROM TYPE-OUT BE 1-4 - 796 000364 366 060 ORI ^O60 ;MAKE IT ASCII - 797 000366 315 010 004 CALL PCHR ;GO PRINT IT - 798 000371 PCRLF ; - (2) 000371 347 RST 4 - (2) 000372 002 .BYTE 2 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-14 -HCORE.M80 8080 PROM CHECKSUMMER - - 800 ;FINAL STEP IS TO ENABLE PARITY DETECTION IN THE KS10 - 801 ; DEFAULT IS: PARITY DETECTION ON..DATA PATH PARITY DETECION ENABLED - 802 000373 076 174 XXX230: MVI A,DEFLTE ;INIT ENABLES TO BE ON - 803 000375 323 100 OUT SMPAR ;***** I/O WRT 100/174 ***** - 804 - 805 ;LITTLE ROUTINE TO LOAD ALL DEFAULT CONSTANTS INTO THE 8080 RAM - 806 ;THIS ROUTINE SAVE ABOUT 40. BYTES OF PROM, OVER USING LXI'S,SHLD'S - 807 ;MVI'S & STA'S - 808 000377 041 342 040 LXI H,KATIM1 ;LIST OF DESTINATION LOCATIONS BEGINS HERE - 809 000402 021 021 001 LXI D,PRMLST ;LIST OF DATUMS FOR THE RAM INIT - 810 000405 032 RAMMER: LDAX D ;GET BYTE FROM THE DATA LIST - 811 000406 376 252 CPI ^O252 ;TEST FOR END OF LIST - 812 000410 312 062 001 JZ XXX235 ;CONTINUE PROM INIT - 813 - 814 ;ELSE MORE RAM TO INITIALIZE - 815 000413 167 MOV M,A ;PUT GOOD STUFF IN RAM - 816 000414 043 INX H ;UPDATE POINTERS - 817 000415 023 INX D - 818 000416 303 005 001 JMP RAMMER - 819 000421 PRMLST: - 820 000421 244 006 .ADDR KPAINI ;KATIM1(2) KEEP ALIVE INITIAL COUNTER - 821 000423 377 .IIF DF,SCECOD, .BYTE -1 ;FOR SCE ADR INIT - 822 000424 377 .IIF DF,SCECOD, .BYTE -1 ;FOR SCE ADR INIT - 823 000425 203 010 .ADDR MODE0 ;MODDIS(2) INIT THE KLINIK LINE TO MODE 0 - 824 000427 255 001 .ADDR REINI ;NORMAL INSTR ENDS WILL GO TO REINIT - 825 000431 013 042 .ADDR ENVBUF ;ENVPNT(2) APT PNTER FOR ENVELOPES SENT TO THE HOST - 826 000433 174 .BYTE DEFLTE ;PARBT(1) INIT ENABLES TO BE ON - 827 000434 020 .BYTE TRPDEF ;TRAPEN(1) INIT ENABLES THE HARDWARE TRAPS - 828 000435 014 .BYTE ^O14 ;MTAUBA(1) DEFAULT MAGTAPE UBA NUMBER IS "3" - 829 000436 004 .BYTE ^O4 ;DSKUBA(1) DEFAULT DISK UBA NUMBER IS "1" - 830 000437 010 .BYTE ^O10 ;STATE(1) STATE BEGINS WITH DTR TRUE - 831 000440 041 .BYTE ^O41 ;LSTMSG(1) FIRST APT MSG SHOULD BE 136(NOT OF 41) - 832 000441 D 0,0,,2,0 ;DEN.SLV(5) GET DEFAULT VALUE FOR ALL TAPES - 833 000446 .MTBASE: D 0,0,,772,440 ;MTBASE(5) INITIAL DEFAULT MTA RHBASE ADDRESS - 834 000453 .DSBASE: D 0,0,,776,700 ;DSBASE(5) INITIAL DEFAULT DSK RHBASE ADDRESS - 835 000460 377 .BYTE -1 ;RPINI(1) SO CAN MAKE IT -1 - 836 000461 252 .BYTE ^O252 ;END OF LIST MARKER - 837 - 838 000462 076 025 XXX235: MVI A,^O25 ;BIT TO RESET THE UART - 839 000464 323 203 OUT REMCTL ;RESET THE KLINIK UART AND ENABLE IT!! - 840 000466 076 010 MVI A,^O10 ;GET A BIT TO SET "DATA TERMINAL READY" - 841 000470 323 101 OUT DTR ;SET IT. - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-15 -HCORE.M80 8080 PROM CHECKSUMMER - - 843 000472 PLINE INIMS ;PRINT VERSION AND ID - (1) 000472 337 RST 3 ;PRINT LINE OF CHARS - (1) 000473 211 005 .ADDR INIMS ;BUFF TO PRINT - 844 000475 INTON ;SET INTERNAL MODE - (1) 000475 327 RST 2 ;GO SET INTERNAL MODE - 845 000476 315 033 012 CALL EM1 ;DO PSUEDO EXAMINE TO SET MEM LATCHES - 846 000501 315 114 011 CALL EBCMD ;EXAMINE THE BUS, TO SEE IF ZERO - 847 000504 373 EI ;ENABLE INTERRUPTS - 848 - 849 000505 315 033 033 CALL CMP36 ;NOW CHECK RESULTS OF THE "EB" CMD - 850 000510 012 040 .ADDR EMBUF ;THE RESULTS READ FROM THE BUS - 851 000512 004 017 .ADDR MAD000 ; VERSUS A WORD OF ALL ZEROES - 852 - 853 000514 312 163 001 JZ PWRCHK ;IF OK, GO TO AUTO BOOT - 854 ;FALL THRU IF ERRORS ENCOUNTERED - 855 000517 INTOFF ;LEAVE INTERNAL MODE - (1) 000517 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 856 000520 PLINE INIER ;SAY "INITIALIZE ERROR" - (1) 000520 337 RST 3 ;PRINT LINE OF CHARS - (1) 000521 013 037 .ADDR INIER ;BUFF TO PRINT - 857 000523 303 255 001 JMP REINI ;AND GO OUT - 858 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-16 -HCORE.M80 8080 PROM CHECKSUMMER - - 860 ;JUMP TO HERE IF DOING PWR FAIL RESTART - 861 000526 315 276 022 PWR.FAIL: CALL MICROP ;READ IN POINTERS AND READY TO GO - 862 000531 332 210 032 JC C.BTERR ;IF BOMBED, GIVE UP - 863 000534 315 056 023 CALL DMEM2CRAM ;GO READIN THE MICRO-CODE - 864 - 865 000537 315 362 021 CALL BT.GO ;START MICRO-CODE - 866 000542 CLRRM TMPBF2 ;CLEAR A BUFFER - (1) 000542 347 RST 4 - (1) 000543 012 .BYTE 10. - (1) 000544 100 040 .ADDR TMPBF2+5 - 867 000546 066 070 MVI M,^O70 ;POWER FAIL START ADDRESS IS "70" - 868 - 869 000550 076 004 MVI A,4 ;CODE 4 INDICATES PWR FAIL - 870 000552 062 255 040 STA GOCODE ;SAVE IN RESTART INDICATOR - 871 000555 315 133 017 CALL STINT ;GO START MACHINE, USE INTERNAL MODE - 872 000560 303 255 001 JMP REINI ;AND GO LET THINGS HAPPEN - 873 - 874 ;FIRST THING TO DO IS TO CHECK IF THIS IS A POWER FAIL RESTART - 875 ;NOTE: WE ARE STILL IN "INTERNAL" MODE HERE..THINGS WONT PRINT - 876 000563 PWRCHK: CLRRM IOAD ;CLEAR A BUFFER..WE WILL GENERATE A "100000" - (1) 000563 347 RST 4 - (1) 000564 012 .BYTE 10. - (1) 000565 031 040 .ADDR IOAD+5 - 877 000567 043 INX H ;CLRRM PASSES PNTR..WE MAKE IT "IOAD+1" - 878 000570 066 200 MVI M,^O200 ;SET BIT THAT MAKES IT "100000" - 879 000572 315 360 012 CALL EI1 ;GO EXAMINE I/O ADDRESS - 880 000575 INTOFF ;CLEAR INTERNAL MODE - (1) 000575 367 RST 6 ;GO EXIT FROM INTERNAL MODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-17 -HCORE.M80 8080 PROM CHECKSUMMER - - 882 000576 016 226 SYSUP: MVI C,150. ;NOW DO AN AUTO BOOT SEQUENCE - 883 000600 041 031 000 SYSUP1: LXI H,25. ;WILL DO A DELAY LOOP - 884 000603 315 154 014 CALL LTLOOP ; BY HAND, BY-PASSING USUAL MACRO GENERATION - 885 - 886 000606 072 157 040 LDA RPEND ;SEE IF A CHAR WAS TYPED TO END THE AUTO BOOT - 887 000611 247 ANA A ;SET CONDITION FLAGS - 888 000612 302 255 001 JNZ REINI ;IF A CHAR WAS TYPED, NO AUTO STUFF, GO NULL JOB - 889 - 890 ;WHILE WE HAVEN'T GOT ANYTHING TO DO, MIGHT AS WELL CHECK BOOT SWITCH - 891 ;TO SEE IF THAT GOT PUSHED WHILE WE WERE SITTING HERE - 892 000615 333 301 IN BOOTSW ;***** I/O RD/301 ***** - 893 000617 346 002 ANI 2 ;"BOOT" BUTTON PUSHED IS "TRUE .LO." - 894 000621 312 043 002 JZ N0.5 ;THEREFORE, IF RESULTS .EQ. Z-BIT, THEN BUTTON PUSHED - 895 - 896 000624 333 102 IN ^O102 ;READ AND SEE IF "AC PWR LO" HAPPENED - 897 000626 346 100 ANI ^O100 ;CHECK THE RESET SIGNAL - 898 000630 312 000 000 JZ 0000 ;ITS TRUE .LO., SO IF TRUE, RESTART THE MACHINE - 899 - 900 ;FALL THROUGH IF NO BOOT BUTTON PUSHED - 901 000633 015 DCR C ;STILL TIMING OUT.. WAIT LONGER - 902 000634 302 200 001 JNZ SYSUP1 ;BACK WHILE WAITING - 903 - 904 ;NOW SEE IF NEED AUTO BOOT, OR POWER FAIL RECOVERY.. - 905 000637 072 014 040 LDA EMBUF+2 ;FETCH UP BITS 12-19 - 906 000642 346 200 ANI ^O200 ;CHECK THE PWR SAVED BIT - 907 000644 312 126 001 JZ PWR.FAIL ;IF BIT SET, GO TRY A POWER FAIL RECOVERY - 908 - 909 ;FELL THROUGH IF THIS MUST BE AN AUTO BOOT SEQUENCE - 910 000647 PLINE AUTOMS ;SAY "BT AUTO" - (1) 000647 337 RST 3 ;PRINT LINE OF CHARS - (1) 000650 365 037 .ADDR AUTOMS ;BUFF TO PRINT - 911 000652 315 247 021 CALL BTAUT ;CALL THE BOOT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-18 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 913 .SBTTL **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - 914 000655 061 000 044 REINI: LXI SP,RAMST+^O2000 ;RESET STACK POINTER TO RE-INIT - 915 000660 CLRB EOL ;GUARANTEE END-OF-LINE CNTR RESET - 916 000662 CLRB ERRCD ;CLEAR CURRENT ERROR CODE - 917 000664 CLRB ERRCD+1 ;CLEAR CURRENT ERROR CODE - 918 000666 CLRB RPTON ;ALWAYS CLEAR THE REPEAT FLAG - 919 000670 CLRB NOPNT ;CLR THE "NO PRINT" FLAG - 920 000672 041 001 041 LXI H,RPINI ;GET POINTER TO BUFFER WHERE WE SAVE - 921 000675 042 211 040 SHLD RPLST ; THE COMMAND DISPATCH ADDRESSES.USED BY REPEAT - 922 000700 041 255 001 LXI H,REINI ;IF GOT HERE, SAFE TO GUARANTEE U ALWAYS GET HERE - 923 000703 042 350 040 SHLD NOREND ;PASS REINIT LOCATION TO THE NORMAL END DISPATCH - 924 000706 315 163 010 CALL BFRST ;RESET TTY INPUT BUFFER - 925 000711 373 EI ;MAKE SURE THAT BOMBS RESTORE THE INTERRUPTS - 926 - 927 000712 072 156 040 LDA USRMD ;GRAB USER MODE FLAG - 928 000715 247 ANA A ;SET CONDITION CODES - 929 000716 302 335 001 JNZ NULLJ ;IF USER MODE, NO PROMPTS, NO CR-LF, NOTHING - 930 - 931 000721 072 251 040 LDA MMFLG ;IF MM MODE WE WILL PRINT NO PROMPTS - 932 000724 247 ANA A ;SET 8080 FLAGS - 933 000725 302 335 001 JNZ NULLJ ;SKIP PROMPT IF MM - 934 - 935 000730 PCRLF ;START FRESH WITH CR-LF - (2) 000730 347 RST 4 - (2) 000731 002 .BYTE 2 - 936 000732 PLINE KSPRMT ;PROMPT IS "KS10>" - (1) 000732 337 RST 3 ;PRINT LINE OF CHARS - (1) 000733 053 037 .ADDR KSPRMT ;BUFF TO PRINT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-19 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 938 ;HERE BEGINS THE NULL STATE LOOP.... - 939 ; CHECK FRONT PANEL BOOT SWITCH - 940 000735 041 222 002 NULLJ: LXI H,DCODE ;NULLJ JOB WILL PROCESS COMMANDS ON "END-OF-LINE" - 941 000740 333 102 NULLW: IN ^O102 ;READ AND SEE IF "AC PWR LO" HAPPENED - 942 000742 346 100 ANI ^O100 ;CHECK THE RESET SIGNAL - 943 000744 312 000 000 JZ 0000 ;ITS TRUE .LO., SO IF TRUE, RESTART THE MACHINE - 944 - 945 000747 333 302 IN ^O302 ;READ THE STATE OF THE KLINIK SWITCHES - 946 000751 057 CMA ;FIX THE HARDWARE INVERSION - 947 000752 117 MOV C,A ;SAVE RESULTS OF READ IN REG "C" - 948 000753 346 014 ANI ^O14 ;OFF ALL BUT THE 2 KLINIK BITS - 949 000755 017 RRC ;JUSTIFY "WORD-WISE" - 950 000756 107 MOV B,A ;SAVE THE KLINIK BITS FOR A SEC. - 951 000757 072 124 040 LDA KLNKSW ;GET THE CURRENT KLINIK SWITCH STATE - 952 000762 270 CMP B ;NOW SEE IF KLINIK SWITCH HAS CHANGED SINCE LAST TIME - 953 000763 345 PUSH H ;SAVE H,L IT HAS OUR DISPATCH ADDRESS - 954 000764 304 340 033 CNZ KLNKLT ;IF COMPARE WAS .NE. 0, THEN WE MUST CHANGE LIGHTS - 955 000767 341 POP H ;RETRIEVE H,L SO THAT WE HAVE THE REAL DISPATCH - 956 - 957 ;OK, NOW SEE IF WE ARE WATCHING CARRIER FROM THE KLINIK LINE, - 958 ;AND IF WE ARE, SEE IF IT HAS GONE AWAY.. IF KLINIK CARRIER GOES - 959 ;AWAY FOR 2 SECONDS, THEN WE WILL HANGUP THE LINE - 960 000770 171 MOV A,C ;GET STATE OF THE CARRIER INTO ACCUM - 961 000771 346 001 ANI 1 ;SEE IF IT IS SET - 962 000773 312 004 002 JZ N00 ;IF THERE IS NO CARRIER, THEN SEE IF WE CARE - 963 - 964 ;CARRIER WAS TRUE IF WE GOT HERE, SET FLAG SAYING THAT WE MUST WATCH - 965 ;IF IT DECIDES TO GO AWAY ON US - 966 000776 062 130 040 STA WATCHC ;SET FLAG SAYING WATCH THE KLINIK - 967 001001 303 034 002 JMP N0 ;AND PROCEED WITH THE NULL JOB - 968 - 969 ;GOT HERE IF CARRIER WAS FALSE, SEE IF WE CARE - 970 001004 072 130 040 N00: LDA WATCHC ;FETCH UP THE "WATCH" FLAG - 971 001007 247 ANA A ;SET FLAGS - 972 001010 312 034 002 JZ N0 ;WE DONT CARE, JUMP - 973 - 974 ;CARRIER WENT AWAY ON US. WAIT 2 SECONDS, IF STILL GONE, HANG EM UP - 975 001013 345 PUSH H ;BEST SAVE DISPATCHER TYPE ADDRESS - 976 001014 LONG.DELAY 2 ;WAIT 2 SECONDS - (1) 001014 041 220 001 LXI H,200. * 2 ;SET UP THE TIMING COUNT IN H,L REG - (1) 001017 315 154 014 CALL LTLOOP ;AND GO DELAY ABOUT 1 SECOND FOR EACH (300 COUNT) - 977 001022 333 302 IN CARRIER ;***** I/O RD 302 ***** - 978 001024 346 001 ANI 1 ;SEE IF TRUE(HIGH) OR FALSE(LOW) - 979 001026 304 134 034 CNZ HANGUP ;IT WAS STILL FALSE(I.E HIGH), HANGUP THE LINE - 980 001031 341 POP H ;NOW RESTORE - 981 001032 CLRB WATCHC ;AND SAY TO LEAVE THIS ALONE FOR A WHILE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-20 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 983 ;ELSE FALL THRU CAUSE ALL OK - 984 001034 333 301 N0: IN BOOTSW ;***** I/O READ 301 ***** - 985 001036 346 002 ANI 2 ;IS BOOT SW SET???(TRUE LO, BECAUSE OF INVERSION) - 986 001040 302 051 002 JNZ N1 ;SKIP NEXT INSTR IF FALSE(I.E HIGH) - 987 - 988 001043 315 244 021 N0.5: CALL BOOT ;OTHERWISE...GO TO BOOT COMMAND - 989 001046 303 335 001 JMP NULLJ ;AFTER BOOT, ALL TTY INPUT WAITS ARE KILLED - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-21 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 991 ;CONTINUE NULL STATE STATUS CHECK - 992 ; CHECK FOR SYSTEM PARITY ERRORS - 993 001051 333 301 N1: IN BOOTSW ;***** I/O RD 301 ***** - 994 001053 346 010 ANI ^O10 ;IS PARITY ERR SIGNAL SET(TRUE .LO.) - 995 001055 302 072 002 JNZ NX2 ;SKIP NEXT INSTR IF NOT SET - 996 ;IF YES SET, MUST CHECK THE PARITY ERROR - 997 001060 072 166 040 LDA CHKPAR ;GET FLAG TO SEE IF SHOULD REPORT PARITY ERRORS - 998 001063 247 ANA A ;SET FLAGS - 999 001064 302 050 027 JNZ RPTPAR ;IF NOT ZERO, MUST GO REPORT PARITY ERROR - 1000 001067 303 076 002 JMP N2 ;AND CONTINUE ELSE - 1001 - 1002 001072 057 NX2: CMA ;IF HERE, SET ACCUM .EQ. -1 - 1003 001073 062 166 040 STA CHKPAR ;AND SET FLAG TO SAY REPORT PARITY ERR - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-22 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 1005 - 1006 ;CONTINUE NULL STATE STATUS CHECKS - 1007 ; CHECK TO SEE IF RUN FLOP HAS DIED - 1008 001076 333 300 N2: IN RUNFP ;;***** I/O READ 300Q ***** - 1009 001100 346 010 ANI ^O10 ;IS HALT LOOP SET??(TRUE .LO.) - 1010 001102 302 124 002 JNZ NX3 ;SKIP NEXT INSTR IF NOT SET(CPU MUST BE "RUNNING") - 1011 ;FALL THRU IF HALT LOOP SET.. - 1012 001105 072 231 040 LDA CHKHLT ;GET THE FLAG THAT SAYS IF WE SHLD CHK HALT - 1013 001110 247 ANA A ;SET CONDITION CODES - 1014 001111 365 PUSH PSW ;SAVE FLAGS FOR LATER USE - 1015 001112 304 277 016 CNZ HLTCM ;IF FLAG SET, GO REPORT THE HALT - 1016 001115 361 POP PSW ;GET FLAGS BACK - 1017 001116 302 313 002 JNZ CHKKA ;IF YOU JUST HALTED, GO SEE IF RELOAD REQUEST - 1018 001121 303 130 002 JMP N3 ;IF CLR, NO NEED TO REPORT..THEY KNOW - 1019 - 1020 ;THIS AND THE "CONTINUE" CODE IS THE ONLY CODE - 1021 ;IN THE CONSOLE THAT SETS THE "CHECK HALT" FLAG.. - 1022 ;AND U CAN ONLY GET HERE IF THE "HALT LOOP" FLAG HAS BEEN CLEARED, BY - 1023 ;ANY MEANS..AND WHEN U GET HERE, THE ACCUM MUST BE ZERO - 1024 001124 057 NX3: CMA ;SET ACCUM = -1 - 1025 001125 062 231 040 STA CHKHLT ;AND ZAP THE CHECK HALT FLAG.. - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-23 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 1027 ;CONTINUE NULL STATE STATUS CHECKS - 1028 ;CHECK TO SEE IF MOS MEMORY REFRESH CYCLE HAS DIED - 1029 001130 333 101 N3: IN REFERR ;READ REFRESH ERROR BIT - 1030 001132 346 001 ANI 01 ;REFRESH ERROR TRUE??(TRUE .LO.) - 1031 001134 302 153 002 JNZ NX4 ;SKIP FOLLOWING CODE IF NO REFRESH ERROR - 1032 - 1033 ;FALL INTO THIS IF A REFRESH ERROR OCCURS - 1034 001137 072 167 040 LDA CHKREF ;GET FLAG THAT SAYS CHECK REFRESH ..SEE IF SHOULD BE REPORTED - 1035 001142 247 ANA A ;SET 8080 FLAGS - 1036 001143 345 PUSH H ;SAVE DISPATCHING ADDRESS - 1037 001144 304 314 032 CNZ NOREFRESH ;GO REPORT REFRESH ERROR IF NECESSARY - 1038 001147 341 POP H ;RESTORE DISPATCH ADDRESS - 1039 001150 303 157 002 JMP N4 ;AND CONTINUE AS IF NOTHING HAPPENED - 1040 - 1041 ;THIS IS THE ONLY CODE THAT CAN SET THE "REPORT REFRESH ERROR FLAG" - 1042 001153 057 NX4: CMA ;U GOT HERE ON A JZ, SO ACCUM MUST BE ZERO - 1043 001154 062 167 040 STA CHKREF ;AND SET FLAG TO -1 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-24 -HCORE.M80 **BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH A PROMPT - - 1045 ;CONTINUE NULL STATE STATUS CHECK - 1046 ; CHECK FOR "END-OF-LINE" OR A RUNNING 10'S "KEEP-ALIVE" - 1047 001157 072 156 040 N4: LDA USRMD ;IS THIS USER MODE? - 1048 001162 247 ANA A ;SET CONDITION FLAGS - 1049 001163 302 267 002 JNZ LIVE10 ;IF YES, CHECK 10 INTERRUPTS & KEEP ALIVE - 1050 - 1051 ;BEFORE DOING ANOTHER COMMAND. SEE IF WE ARE ENVELOPING AND MUST SEND - 1052 ;OUT A PACKET - 1053 001166 072 247 040 LDA CSLMODE ;ONLY DO ENVELOPE STUFF IF IN MODE 4 OR GREATER - 1054 001171 376 020 CPI .MODE4 ;CHECK IF MODE 4 - 1055 001173 302 203 002 JNZ EOL.LK ;NOT MODE 4, PROCEED AS NORMAL - 1056 - 1057 001176 345 PUSH H ;SAVE H,L IT HAS THE DISPATCH ADDRESS - 1058 001177 315 205 034 CALL DECNET ;IF SOMETHING THERE, SEND IT OUT - 1059 001202 341 POP H ;NEED H,L AGAIN - 1060 - 1061 ;OTHERWISE, CTY'S EOL FLAG - 1062 ;BUT FIRST SEE IF THIS IS A REPEAT - 1063 001203 072 213 040 EOL.LK: LDA RPTON ;GET THE REPEAT FLAG - 1064 001206 247 ANA A ;SET THE PROCESSOR FLAGS - 1065 001207 302 215 020 JNZ RPTRTN ;GO BACK TO THE REPEAT FUNCTION SO THAT HE CAN PROCEED - 1066 - 1067 001212 072 204 040 LDA EOL ;GET VALUE OF EOL FLAG - 1068 001215 267 ORA A ;SET FLAGS..IS EOL SET?? - 1069 001216 312 340 001 JZ NULLW ;REMAIN IN NULL JOB LOOP IF NOT SET - 1070 - 1071 ;ELSE GO PROCESS A COMMAND - 1072 001221 351 PCHL ;RETURN TO COMMAND IN TTY INPUT, OR DECODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-25 -HCORE.M80 **TYPEIN COMMAND DECODER AND DISPATCHER** - - 1074 .SBTTL **TYPEIN COMMAND DECODER AND DISPATCHER** - 1075 001222 257 DCODE: XRA A ;ZERO OUT THE ACCUM - 1076 001223 107 MOV B,A ;AND ZERO OUT TMP LOCATION - 1077 - 1078 001224 021 210 004 LXI D,CMDLST ;"D,E" NOW POINTS TO COMMAND LIST CHARACTER PAIRS - 1079 001227 052 227 040 LHLD FIRST ;"H,L" NOW POINTS TO FIRST CHARACTER TYPED AS COMMAND - 1080 001232 315 233 021 CALL FNDARG ;FIRST GO CLR ANY LEADING SPACES OR TABS FROM COMMAND LINE - 1081 001235 332 344 003 JC NORML ;IF AT END-OF-COMMAND, ITS A NULL COMMAND - 1082 ;NOW BEGINS COMMAND LOOK UP LOOP... "H,L" POINTS TO FIRST COMMAND CHAR. - 1083 ;WHILE "D,E" POINTS TO FIRST CHAR IN THE LIST OF ALLOWABLE COMMANDS - 1084 001240 032 DCODL: LDAX D ;CMD LIST CHAR TO ACCUM - 1085 001241 267 ORA A ;IS THIS A ZERO BYTE?? - 1086 001242 312 261 002 JZ NXMDC ;IF YES,END OF LIST - 1087 001245 023 INX D ;WHILE YOU R AT IT UPDAT CMD LIST PNTR - 1088 - 1089 001246 276 CMP M ;COMPARE CMD LIST CHAR WITH TYPED CHAR. - 1090 001247 312 203 003 JZ MTCH1 ;IF THEY MATCH, BR TO "MTCH1" - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-26 -HCORE.M80 **TYPEIN COMMAND DECODER AND DISPATCHER** - - 1092 ;HERE IF NO MATCH..UPDATE CMD LIST PNTR TO START OF NEXT COMMAND, - 1093 ;THEN CHECK IF TRIED ENTIRE LIST YET.. - 1094 ;IF TRIED ENTIRE LIST, REPORT COMMAND ERROR AND BACK TO NULL JOB LOOP. - 1095 ;IF NOT TRIED ENTIRE LIST YET, LOOP BACK AND TRY SOME MORE - 1096 001252 023 MISS2: INX D ;BUMP PNTR PAST SECOND CHAR OF CMD - 1097 001253 023 INX D ;BUMP PAST THE DISPATCH ADDR - 1098 001254 023 INX D - 1099 001255 004 INR B ;UPDATE NUMBER OF "TRIES" - 1100 001256 303 240 002 JMP DCODL ;IF NOT, JUMP BACK AND TRY AGAIN - 1101 - 1102 ;IF FALL TO HERE, WAS ILLEGAL COMMAND.. CLEAR REST - 1103 ;UP TO EOL... TYPE ERROR MESSSAGE AND BACK TO NULL JOB LOOP - 1104 ;FIRST STEP IS CLEARING BAD COMMAND FROM COMMAND BUFFER - 1105 001261 NXMDC: PLINE CMDNG ;COMMAND NO GOOD - (1) 001261 337 RST 3 ;PRINT LINE OF CHARS - (1) 001262 026 037 .ADDR CMDNG ;BUFF TO PRINT - 1106 - 1107 001264 303 166 032 JMP MMERR ;AND BACK TO PROMPT.. - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-27 -HCORE.M80 ****CTY SERVICE**** - - 1109 .SBTTL ****CTY SERVICE**** - 1110 ;CODE ENTERED FROM THE NULL JOB LOOP WHENEVER WE ARE IN USER MODE(MODE 3) - 1111 ;CODE CHECKS TO SEE IF CHAR IS AVAILABLE FROM THE 10,& ALSO IF KEEP ALIVE - 1112 ;COUNT IS ACTIVE. WE ALSO CHECK FOR REBOOT REQUESTS (AS IN 20 SYSTEM MONITOR'S - 1113 ;"BUGHALTS") - 1114 001267 333 301 LIVE10: IN SMSTS ;SEE IF INTERRUPT FROM THE 10 IS PENDING - 1115 001271 247 ANA A ;SET CONDITION CODES - 1116 001272 365 PUSH PSW ;SAVE FLAGS FOR A LITTLE BIT - 1117 001273 364 243 007 CP CHRRDY ;IF PLUS, A CHARACTER IS READY, GO PROCESS - 1118 - 1119 ;FIRST, WE ONLY WANT TO CHECK THE KEEP-ALIVE COUNTER EVERY SECOND. - 1120 ;FIRST WE WILL CHECK OUR COUNTERS AND SEE IF TIME TO CHECK KEEP-ALIVE DATA - 1121 001276 361 POP PSW ;GET FLAGS BACK - 1122 001277 364 011 003 CP FAKLIT ;IF TYPED A CHAR, THEN DOWN COUNT FOR TIME WASTED - 1123 001302 312 313 002 JZ CHKKA ;IF ZERO, DO WHAT MUST BE DONE - 1124 - 1125 001305 315 023 003 CALL DTIME ;ALWAYS DO IT AT LEAST ONCE - 1126 001310 302 335 001 JNZ NULLJ ;IF NOT ZERO, IT HASN'T BEEN A SECOND YET. BACK NULL - 1127 - 1128 ;WHEN YOU FALL TO HERE, IT IS TIME TO CHECK FOR "KEEP-ALIVE" OR "RELOAD" - 1129 001313 041 244 006 CHKKA: LXI H,KPAINI ;FIRST WE MUST RESET OUR MAJOR LOOP COUNTER - 1130 001316 042 342 040 SHLD KATIM1 ;EACH NUM IN THIS LOC .EQ. .444 SECONDS BETWEEN CHECKS - 1131 - 1132 001321 INTON ;DON'T PRINT THIS CRUD - (1) 001321 327 RST 2 ;GO SET INTERNAL MODE - 1133 001322 363 DI ;NO INTERRUPTS - 1134 001323 EXAM 31 ;MOS MEMORY LOC 31 HAS THE INFORMATION - (1) 001323 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 001326 031 000 .ADDR 31 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 1135 001330 373 EI ;OK..INTERRUPTS - 1136 - 1137 001331 INTOFF ;INTERNAL MODE OFF NOW - (1) 001331 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 1138 001332 072 015 040 LDA EMBUF+3 ;GRAB THE RELOAD BITS.. WE CERTAINLY NEED THOSE - 1139 001335 027 RAL ;"FORCED RELOAD" SHIFT INTO CARRY - 1140 001336 332 035 003 JC FRELOAD ;IF "RELOAD" SET, GO EXECUTE A RELOAD - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-28 -HCORE.M80 ****CTY SERVICE**** - - 1142 ;NOW SEE IF KEEP-ALIVE ACTIVE - 1143 001341 027 RAL ;"KEEP-ALIVE" BIT INTO THE C-BIT - 1144 001342 322 335 001 JNC NULLJ ;IF ITS NOT SET, GO BACK TO NULL JOB - 1145 - 1146 ;KEEPING A WATCH ON THE KEEP ALIVE COUNT...BLINKY LIGHTS - 1147 001345 072 360 040 LDA STATE ;GET CURRENT STATE OF THE LIGHTS - 1148 001350 127 MOV D,A ;SAVE IT JUST FOR A LITTLE BIT - 1149 001351 346 373 ANI STMSK ;CLR THE "STATE" LIGHT FROM THE CURRENT SELECTIONS - 1150 001353 137 MOV E,A ;AND NOW SAVE THIS LITTLE BIT IN A REGISTER - 1151 - 1152 001354 172 MOV A,D ;GET BACK THE ORIGINAL "STATE" - 1153 001355 057 CMA ;"BLINK" - 1154 001356 346 004 ANI STBIT ;ONLY WANT TO BLINK THE SINGLE LIGHT - 1155 001360 263 ORA E ;THROW IN THE PART THAT IS AS WAS.. - 1156 001361 062 360 040 STA STATE ;PUT THE WHOLE MESS BACK, THE NULL LOOP WILL BLINKY - 1157 001364 323 101 OUT LIGHTS ;BLINK THE LIGHTS HERE - 1158 001366 372 335 001 JM NULLJ ;AND IF MINUS, WE ARE "SHUTING DOWN", LET LIGHTS GO - 1159 - 1160 ;WE DID AN EXAM 31 A VERY SHORT TIME AGO, SO THE EXAMINE BUFFER SHOULD STILL - 1161 ;HAVE A VALID "KEEP-ALIVE" UPDATE COUNT IN IT - 1162 001371 041 250 040 LXI H,KACNTR ;GET POINTER TO THE PREVIOUS "KA" COUNT - 1163 001374 072 013 040 LDA EMBUF+1 ;GET WHAT SHOULD BE AN UPDATED "KA" COUNT - 1164 001377 276 CMP M ;COMPARE..BETTER BE DIFFERENT - 1165 001400 312 130 003 JZ DIEING ;IF SAME, GO SEE IF CPU IS REALLY DIEING - 1166 ;FALL THRU IF THE COUNTS WERE DIFF..SAVE THE NEW COUNT - 1167 001403 167 MOV M,A ;NEW COUNT GOES TO RAM, OVERWRITES THE OLD - 1168 001404 CLRB DIECNT ;CLEAR THAT DIE COUNT - 1169 001406 303 335 001 JMP NULLJ ;BACK TO THE NULL LOOP - 1170 - 1171 ;ROUTINE FOR WHEN DOING CTY OUT PUT THE LIGHTS STILL BLINK AT A REASONABLE - 1172 ;RATE - 1173 001411 052 342 040 FAKLIT: LHLD KATIM1 ;GET CURRENT COUNT FOR BETWEEN THE LIGHTS - 1174 001414 175 MOV A,L ;GET LO ORDER PIECE - 1175 001415 346 374 ANI ^O374 ;TWEEK LITE COUNT, CAUSE OUR TYPING MESSED UP TIMER LOOP - 1176 001417 157 MOV L,A ;PUT LO ORDER PIECE BACK(MASKING .EQV. TO SUBTRACT 100) - 1177 001420 303 027 003 JMP DTM1 ;AND PROCEED - 1178 ;ROUTINE TO DOWN COUNT KEEP ALIVE COUNTER - 1179 001423 052 342 040 DTIME: LHLD KATIM1 ;GET A 16-BIT MINOR LOOP COUNTER - 1180 001426 053 DCX H ;DECREMENT THE COUNTER - 1181 001427 042 342 040 DTM1: SHLD KATIM1 ;AND PUT IT BACK - 1182 001432 175 MOV A,L ;NOW CHECK THE COUNT FOR .EQ. 0 - 1183 001433 264 ORA H ;"OR" HI PIECE WITH THE "LO" PIECE - 1184 001434 311 RET - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-29 -HCORE.M80 ****CTY SERVICE**** - - 1186 ;ROUTINE TO ENTERED WHEN THE "FORCE RELOAD" BIT HAS BEEN SET BY A RUNNING - 1187 ;PROGRAM IN THE KS10 - 1188 001435 FRELOAD: CLRB NOPNT ;CLEAR THE NO PRINT FLAG - 1189 001437 PLINE FRCMSG ;PRINT MESSAGE TO INDICATE THE FORCED RELOAD - (1) 001437 337 RST 3 ;PRINT LINE OF CHARS - (1) 001440 336 037 .ADDR FRCMSG ;BUFF TO PRINT - 1190 001442 076 002 MVI A,2 ;BIT 34 IS THE APPROPRIATE GUY ON A FORCED RELOAD - 1191 001444 062 255 040 STA GOCODE ;SET BIT IN THE 8080 RAM BUFFER - 1192 001447 333 300 IN RUNFP ;NOW SEE IF WE MUST HALT THE PROCESSOR - 1193 001451 346 010 ANI ^O10 ;WE DID NOT INVERT SIGNAL.0=HALTED, 1=RUNNING - 1194 - 1195 001453 INTON ;DONT PRINT WHAT HAPPENS TO THE HALT - (1) 001453 327 RST 2 ;GO SET INTERNAL MODE - 1196 001454 304 227 017 CNZ HACMD ;MAKE SURE THE PROCESSOR IS STOPPED - 1197 001457 INTOFF ;OK TO PRINT NOW - (1) 001457 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 1198 001460 072 256 040 LDA SECRET ;SECRET LOCATION - 1199 001463 247 ANA A ;SET 8080 FLAGS - 1200 001464 302 255 001 JNZ REINI ;IF FLAG SET, WE WILL NOT DO AUTO RELOADS - 1201 - 1202 001467 021 004 002 LXI D,^O1004 ;POINTER TO THE MONITOR PRE-BOOT - 1203 001472 315 301 022 CALL FILEINIT ;GO READ IN THE MONITOR PRE-BOOT - 1204 001475 332 242 032 JC L.BTERR ;IF ERROR, FATAL OUT - 1205 - 1206 001500 041 001 000 LXI H,1 ;NO ERR, NOW GO START THE MICRO-CODE AT LOC 1 - 1207 001503 315 235 016 CALL SM1.5 ;START MICROCODE, ADDRESS PASSED IN H,L - 1208 001506 LONG.DELAY 2 ;GUARANTEE THAT THE "SM 1" HAS TIME TO FINISH - (1) 001506 041 220 001 LXI H,200. * 2 ;SET UP THE TIMING COUNT IN H,L REG - (1) 001511 315 154 014 CALL LTLOOP ;AND GO DELAY ABOUT 1 SECOND FOR EACH (300 COUNT) - 1209 001514 315 370 021 CALL BT.GO1 ;NOW FIX PARITY AND OTHER THINGS THAT WE BROKE - 1210 001517 315 333 021 CALL INFOBT ;AND PASS THE SOURCE OF THE PRE-BOOT IN MOS MEM - 1211 - 1212 001522 315 276 021 CALL LB.GO1 ;AND GO EXECUTE THE BOOT CODE - 1213 001525 303 335 001 JMP NULLJ ;AND BACK TO NULL JOB - 1214 - 1215 001530 041 257 040 DIEING: LXI H,DIECNT ;GET THE NUMBER OF CONSECUTIVE "NO CHANGES" IN KA CNT - 1216 001533 064 INR M ;INCREMENT - 1217 001534 176 MOV A,M ;GET COUNT INTO ACCUM - 1218 001535 376 043 CPI KATIMX ;NOW SEE IF OFFICIAL DEATH - 1219 001537 372 335 001 JM NULLJ ;IF NOT YET, GO BACK AND WAIT FOR MORE - 1220 - 1221 ;ELSE, FALL ON THROUGH TO THE RELOAD CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-30 -HCORE.M80 ****CTY SERVICE**** - - 1223 ;ROUTINE ENTERED WHEN THE "KEEP-ALIVE" COUNT DOES NOT CHANGE, AND WE - 1224 ;ISSUE A RELOAD BECAUSE WE BELIEVE THAT THE PROGRAM RUNNING IN THE KS10 - 1225 ;HAS DIED - 1226 001542 CLRB NOPNT ;CLEAR THE NO PRINT FLAG - 1227 001544 CLRB DIECNT ;AND RESET THE DIE COUNT - 1228 001546 PLINE KAMSG ;PRINT MESSAGE TO INDICATE KEEP-ALIVE FAILURE - (1) 001546 337 RST 3 ;PRINT LINE OF CHARS - (1) 001547 331 037 .ADDR KAMSG ;BUFF TO PRINT - 1229 - 1230 001551 INTON ;DONT PRINT ANY OF THIS STUFF - (1) 001551 327 RST 2 ;GO SET INTERNAL MODE - 1231 001552 315 227 017 CALL HACMD ;FIRST, STOP THE MACHINE - 1232 001555 363 DI ;NO INTERRUPTS, TILL THE EXAMINE IS COMPLETE - 1233 001556 EXAM 71 ;EXAMINE THE INSTRUCTION IN 71 - (1) 001556 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 001561 071 000 .ADDR 71 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 1234 001563 373 EI ;OK TO INTERRUPT NOW - 1235 - 1236 001564 076 001 MVI A,1 ;KEEP ALIVE CODE IS A 1 - 1237 001566 062 255 040 STA GOCODE ;SAVE FOR PASSING TO KS10 - 1238 001571 315 063 017 CALL EXINTM ;NOW GO EXECUTE LOC 71 IN PAGE 0 OF MONITOR SPACE - 1239 001574 315 204 017 CALL COCMD ;LET THE PROCESSOR RESUME - 1240 001577 INTOFF ;MAY RESUME PRINTING THIS STUFF - (1) 001577 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 1241 001600 303 335 001 JMP NULLJ ;AND BACK TO NULL JOB - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-31 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1243 .SBTTL **COMMAND DECODER CONTINUED** - 1244 ;CONTINUE COMMAND DECODER...... - 1245 ;HERE IF FIRST CHARACTER MATCHED.SEE IF SECOND CHAR MATCHED. - 1246 001603 043 MTCH1: INX H ;INPUT BUFFER NOW PNTS TO SECOND CHAR TYPED - 1247 001604 032 LDAX D ;ACCUM GETS SECOND "EXPECTED" CHAR FROM COMMAND LIST - 1248 001605 276 CMP M ;NOW. DOES SECOND CHARACTER MATCH?? - 1249 001606 312 215 003 JZ MTCH2 ;JUMP IF YES, SECOND CHAR MATCHES. - 1250 - 1251 ;HERE IF SECOND CHARACTER DID NOT MATCH.RESET "H,L" & GO BACK TO TRY AGAIN - 1252 001611 053 DCX H ;RESET "H,L" - 1253 001612 303 252 002 JMP MISS2 ;AND CONTINUE PROCESSING - 1254 - 1255 ;GET TO HERE IF SECOND CHARACTER MATCHED - 1256 001615 023 MTCH2: INX D ;UPDATE PAST 2ND CHAR - 1257 001616 043 INX H ;UPDATE BUFFER POINTER - 1258 - 1259 001617 315 256 033 CALL SEPCHR ;GET RID OF SEPARATORS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-32 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1261 ;"H,L" SHOULD NOW POINTS TO THE CMD BUFF - 1262 ;"D,E" NOW POINTS TO THE DISP ADDR - 1263 ;OR ELSE TO "EOL" CHAR IF CMD HAS NO ARGS.. ANYTHING ELSE IS COMMAND ERROR - 1264 001622 042 223 040 SHLD .ARG1 ;SAVE "H,L" POINTER TO FIRST ARG. - 1265 - 1266 001625 170 MOV A,B ;NOW LOAD ACCUM WITH NUMBER "TRIES" TO FIND MATCH - 1267 001626 353 XCHG ;DISP POINTER NOW TO "H,L" - 1268 - 1269 001627 136 MOV E,M ;SET LOW ODER HALF OF "TABLE ENTRY" INTO "E" - 1270 001630 043 INX H ;BUMP POINTER - 1271 001631 126 MOV D,M ;SET HIGH ORDER HALF OF "TABLE ENTRY" INTO "D" - 1272 001632 041 344 003 LXI H,NORML ;SET A RETURN VALUE - 1273 001635 345 PUSH H ;AND PLACE ON STACK FOR RETURNS - 1274 - 1275 ;PIECE OF CODE TO SAVE EACH COMMAND DISPATCH ADDRESS IN THE RAM BUFFER - 1276 ;SO THAT THE REPEAT FUNCTION CAN DISPATCH THRU THE LIST WITHOUT DECODING - 1277 ;THE TYPED IN COMMAND STRING AGAIN.. - 1278 001636 247 ANA A ;CHECK IF THIS IS RP COMMAND..IF YES MUST - 1279 001637 062 000 040 STA T80DT ;SAVE WHICH COMMAND IS BEING EXECUTED - 1280 001642 312 271 003 JZ CMDGO ;JUMP SO THAT CMD LST BUFFER NO CHANGED - 1281 - 1282 001645 072 131 040 LDA CMDS.. ;SEE IF THIS IS THE FIRST COMMAND IN A LINE - 1283 001650 247 ANA A ;SET FLAGS - 1284 001651 314 316 020 CZ RPNEW ;IF IS THE FIRST COMMAND, RESET REPEAT BUFFER POINTERS - 1285 - 1286 001654 052 211 040 LHLD RPLST ;GET POINTER TO CURRENT FREE BUFFER LOCATION - 1287 001657 162 MOV M,D ;SAVE HI ORDER PIECE OF DISPATCH ADDRESS - 1288 001660 043 INX H ;UPDATE MEM POINTER - 1289 001661 163 MOV M,E ;SAVE LO ORDER PIECE OF DISPATCH ADDRESS - 1290 001662 043 INX H ;UPDATE POINTER TO FIRST FREE.. - 1291 001663 257 XRA A ;CLR ACCUM - 1292 001664 057 CMA ;IN ORDER TO MAKE IT -1 - 1293 001665 167 MOV M,A ;SET -1 AS END-OF-LIST INDICATOR - 1294 001666 042 211 040 SHLD RPLST ;AND RESTORE THE POINTER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-33 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1296 ;CONTINUE THE DISPATCH - 1297 001671 353 CMDGO: XCHG ;SET "TABLE ENTRY" INTO "H,L" - 1298 ;AND DISPATCH TO ACTUAL COMMAND CODE - 1299 001672 315 355 032 CALL EOCML ;SET "C-BIT" TO SAY END-OF-LINE IF TRUE - 1300 001675 365 PUSH PSW ;SAVE STATE OF PROCESSOR FLAGS - 1301 001676 324 317 003 CNC REMARG ;IF NO C-BIT, CMD HAD ARG..MUST REMEMBER IT - 1302 - 1303 ;FINALLY SEE IF COMMAND REQUIRES AN ARG - 1304 001701 322 311 003 JNC CMDGO9 ;IF REQUIRES NO ARG, GO GO GO - 1305 - 1306 ;FALL HERE IF COMMAND HAD NO ARG..SEE IF IT SHOULD HAVE HAD ONE - 1307 001704 174 MOV A,H ;GET HI ORDER OF DISP ADDRESS - 1308 001705 027 RAL ;SHIFT HI ORDER BIT (BIT15) INTO THE C-BIT - 1309 001706 332 155 032 JC RRARG ;WELL IF SET, IT NEEDED ARG.. REPORT THAT HAD NONE - 1310 - 1311 ;ELSE ALL OK.. CLEAR BIT15 IF SET AND PROCEED - 1312 001711 174 CMDGO9: MOV A,H ;HI ORDER TO ACCUM - 1313 001712 346 177 ANI ^O177 ;CLEAR BIT 15 NO MATTER WHAT - 1314 001714 147 MOV H,A ;PUT HI ORDER BACK - 1315 001715 361 POP PSW ;GET THE PROCESSOR FLAGS BACK - 1316 001716 351 PCHL ;ADDR TO PC TAKES THE DISPATCH - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-34 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1318 ;ROUTINE TO REMEMBER IF COMMAND HAD AN ARG..USED BY REPEAT FUNCTION - 1319 001717 365 REMARG: PUSH PSW ;SAVE FLAGS - 1320 001720 072 000 040 LDA T80DT ;SEE IF THIS WAS A REPEAT, IN WHICH CASE, DO NOTHING - 1321 001723 247 ANA A ;SET CPU FLAGS - 1322 001724 312 342 003 JZ REMAR1 ;IF WAS RP, GET OUT - 1323 - 1324 001727 345 PUSH H ;AND SAVE DISPATCH ADDRESS - 1325 001730 052 211 040 LHLD RPLST ;GET THIS DISPATCH FROM REPEAT LIST - 1326 001733 053 DCX H ;BACK UP ADDR POINTER TO POINT - 1327 001734 053 DCX H ; HI ORDER PIECE OF ADDRESS - 1328 001735 176 MOV A,M ;NOW GET HI ORDER PIECE INTO ACCUM - 1329 001736 366 200 ORI ^O200 ;ADD SIGN BIT TO REMEMBER ARG - 1330 001740 167 MOV M,A ;NOW PUT IT BACK - 1331 001741 341 POP H ;RESTORE DISPATCH ADDRESS - 1332 001742 361 REMAR1: POP PSW ;AND RESTORE C-BIT FROM PREVIOUS "EOCML" - 1333 001743 311 RET ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-35 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1335 ;THIS IS "NORML", FOR NORMAL RETURNS.. IT SETS UP PREVIOUS POINTERS - 1336 ;AND THEN GOES BACK TO PROMPT - 1337 001744 041 204 040 NORML: LXI H,EOL ;GET PNTR TO COMMAND COUNT - 1338 001747 176 MOV A,M ;COPY TO ACCUM - 1339 001750 075 DCR A ;DECREMENT IT - 1340 001751 167 MOV M,A ;PUT BACK WHERE U GOT IT - 1341 ;IF COUNT WAS DOWN TO ZERO, THEN RESET IT - 1342 001752 075 DCR A ;IF COUNT WAS ZERO, THIS MAKES IT NEGATIVE - 1343 001753 372 004 004 JM NORDIS ;IF EOL HAS GONE MINUS, TAKE NORMAL DISPATCH - 1344 001756 315 371 003 CALL FXNXT ;OTHER WISE BE CLEVER & CRYPTIC - 1345 001761 CLRB ERRCD ;AND CLEAR ERROR CODE - 1346 001763 041 222 002 LXI H,DCODE ;FIX H,L FOR NORMAL NULL JOB - 1347 - 1348 001766 303 051 002 JMP N1 ;AND FINALLY, ALL ELSE GOES TO NULL LOOP - 1349 001771 052 223 040 FXNXT: LHLD .ARG1 ;GET CMD PNTR - 1350 001774 043 INX H ;UPDATE IT PAST THE CURRENT EOL CHAR(, OR CR-LF) - 1351 001775 042 227 040 SHLD FIRST ;FIX CURRENT CMD LINE PNTR - 1352 002000 311 RET ;AND THATS ENOUGH FOR NOW - 1353 - 1354 ;CODE FOR BUFFER OVER FLOW - 1355 002001 BFOVR: PLINE BV ;"BUFFER OVERFLOW - (1) 002001 337 RST 3 ;PRINT LINE OF CHARS - (1) 002002 021 037 .ADDR BV ;BUFF TO PRINT - 1356 002004 052 350 040 NORDIS: LHLD NOREND ;GET THE CURRENT DISPATCH ADDRESS FOR NORMAL ENDS - 1357 002007 351 PCHL ;AND GO - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-36 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1359 ;SUBROUTINE TO PRINT A SINGLE CHARACTER.. - 1360 ;CHARACTER TO BE PRINTED IS PASSED IN THE ACCUM.. - 1361 ;IF THE UART SHOULD FAIL AND NEVER REACH THE TRANSMITTER READY STAT - 1362 ;THE 8080 WILL HANG IN THIS LOOP FOREVER TRYING TO PRINT - 1363 002010 365 PCHR: PUSH PSW ;SAVE CHARACTER ON THE STACK - 1364 002011 072 120 040 LDA NOPNT ;GET NO PRINT FLAG - 1365 002014 267 ORA A ;IS IT SET?? - 1366 002015 312 022 004 JZ PCHR0 ;IF NOT CONTINUE AS NORMAL - 1367 - 1368 002020 361 POP PSW ;IF IT IS..NO PRINTING - 1369 002021 311 RET ;SO RETURN - 1370 - 1371 002022 072 247 040 PCHR0: LDA CSLMODE ;GET CURRENT KLINIK LINE MODE - 1372 002025 376 020 CPI .MODE4 ;IS THIS APT MODE?? - 1373 002027 302 057 004 JNZ PCHR1 ;IF NO, PRINT - 1374 - 1375 ;HERE IF DOING APT AND MUST MERELY STACK CHARS TO BE ENVELOPED AND SENT OUT - 1376 ;A LITTLE LATER. THE CHARACTER TO BE STACKED IS SITTING ON THE TOP OF THE - 1377 ;STACK - 1378 002032 361 POP PSW ;NOW GET THE CHARACTER THAT WAS STACKED - 1379 002033 345 PUSH H ;MUST SAVE H,L IN HERE - 1380 002034 052 352 040 LHLD ENVPNT ;GET THE POINTER TO THE ENVELOPE - 1381 002037 167 MOV M,A ;PUT CHARACTER INTO THE BUFFER - 1382 002040 043 INX H ;UPDATE THE POINTER - 1383 002041 066 000 MVI M,0 ;GUARANTEE LAST BYTE IS A ZERO - 1384 002043 042 352 040 SHLD ENVPNT ;PUT IT BACK WHERE U GOT IT - 1385 002046 341 POP H ;AND RESTORE REG - 1386 002047 376 015 CPI CRCHR ;IF WE ARE BUFFERING A CR, MUST SET THE FLAG - 1387 002051 300 RNZ ;IF NOT A CR, JUST LEAVE - 1388 002052 062 252 040 STA MAILFG ;ELSE SET THE FLAG - 1389 002055 311 RET ;AND OUT - 1390 - 1391 002056 365 PCHR1Z: PUSH PSW ;CHAR ON STACK FOR A BIT - 1392 002057 333 201 PCHR1: IN CTYCTL ;GET UART STATUS - 1393 002061 346 001 ANI 01 ;CHECK BITS TO SEE IS XMITTER READY?? - 1394 002063 312 057 004 JZ PCHR1 ;JUMP BACK IF NOT READY YET - 1395 - 1396 ;NOW,BEFORE PRINTING, SEE IF NEED TO TYPE TO KLINIK LINE TOO. - 1397 002066 072 247 040 LDA CSLMODE ;GET CURRENT KLINIK LINE MODE - 1398 002071 376 010 CPI .MODE3 ;KLINIK IN PARALLEL MODE?? - 1399 002073 302 113 004 JNZ PCHROV ;IF NOT, JUST GO PRINT - 1400 - 1401 ;FALL THROUGH IF NEED KLINIK TOO - 1402 002076 333 203 PCHR2: IN REMCTL ;GET KLINIK UART STATUS - 1403 002100 346 001 ANI 01 ;CHECK THE READY BIT - 1404 002102 312 076 004 JZ PCHR2 ;IF NOT READY, GO BACK AND TRY AGAIN - 1405 002105 361 POP PSW ;GET CHAR OFF STACK WHEN THINGS ARE READY - 1406 002106 323 202 OUT REMDAT ;PRINT CHAR ON THE KLINIK LINE - 1407 002110 323 200 OUT CTYDAT ;PRINT ON CTY - 1408 002112 311 RET ;AND BACK TO CALLER - 1409 - 1410 002113 361 PCHROV: POP PSW ;FINALLY READY..GET CHAR FROM STACK - 1411 002114 323 200 OUT CTYDAT ;SEND CHARACTER - 1412 002116 311 RET ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-37 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1414 ;SUBROUTINE KCHR. FOR PRINTING A SINGLE CHARACTER ON THE KLINIK LINE ONLY - 1415 ;PARTICULARLY USEFUL FOR THE "?NA" AND "PW:" MESSAGES - 1416 ;CHARACTER TO BE PRINTED CAN BE A TRAILING ARG, OR YOU CAN CALL THIS ROUTINE - 1417 ;IN THE MIDDLE AND PASS THE CHAR TO BE PRINTED IN THE ACCUM - 1418 002117 343 KCHR: XTHL ;SWAP STACK TOP WITH H,L - 1419 002120 176 MOV A,M ;GET THE TRAILING ARG FROM PROM - 1420 002121 043 INX H ;UPDATE RETURN ADDRESS PAST THE TRAILING ARG - 1421 002122 343 XTHL ;PUT THE RETURN BACK ON THE STACK - 1422 002123 365 KCHR0: PUSH PSW ;SAVE THE CHARACTER JUST FOR A LITTLE BIT - 1423 002124 333 203 KCHR1: IN REMCTL ;GET KLINIK UART STATUS - 1424 002126 346 001 ANI 01 ;SEE IF UART IS READY - 1425 002130 312 124 004 JZ KCHR1 ;LOOP TILL IT IS - 1426 - 1427 002133 361 POP PSW ;READY NOW, GET THE CHAR OFF THE STACK - 1428 002134 323 202 OUT REMDAT ;SEND TO UART - 1429 002136 311 RET ;AND BACK TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-38 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1431 ;SUBROUTINE KLINE. FOR PRINTING A LINE OF CHARACTERS. A TRAILING ARG - 1432 ;POINTING TO THE STRING TO BE PRINTED IS USED. "\" MEANS . - 1433 002137 343 KLINE: XTHL ;SWAP STACK, GET POINTER TO TRAILING ARG TO H,L - 1434 002140 315 061 033 CALL TARG1 ;GET POINTER TO ARG INTO D,E - 1435 002143 343 XTHL ;FIX RETURN ADDRESS - 1436 - 1437 002144 032 KLINE1: LDAX D ;GET FIRST CHAR INTO ACCUM - 1438 002145 023 INX D ;UPDATE THE CHARACTER POINTER - 1439 - 1440 002146 247 ANA A ;WELL THEN, SEE IF CHAR IS 0, MEANING END OF STRING - 1441 002147 310 RZ ;OUT IF YES - 1442 - 1443 ;WELL THEN , MIGHT AS WELL GO PRINT THE THING - 1444 002150 315 123 004 CALL KCHR0 ;GO PRINT THE CHARACTER - 1445 002153 303 144 004 JMP KLINE1 ;AND WHEN RETURN, GO FETCH UP THE NEXT CHAR - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-39 -HCORE.M80 **COMMAND DECODER CONTINUED** - - 1447 ;SUBROUTINE TO PRINT A LINE OF CHARACTERS.. - 1448 ;POINTER TO THE LINE OF CHARACTERS TO BE PRINTED IS PASSED IN - 1449 ;"H,L" REGISTER..NO REGISTERS ARE DESTROYED BY THIS ROUTINE - 1450 ;THE END-OF-MESSAGE FOR THE LINE OF CHARACTERS TO BE - 1451 ;PRINTED IS INDICATED BY A "00" BYTE AT THE END OF THE MESSAGE TEXT - 1452 002156 343 PLNE: XTHL ;REPLACE RETURN..PUT ON STACK - 1453 002157 353 XCHG ;TRAILING ARG FROM "D,E" TO "H,L" - 1454 - 1455 002160 176 PLN1: MOV A,M ;GET CHARACTER FROM MEM. - 1456 002161 043 INX H ;INCREMENT TO NEXT CHARACTER TO BE PRINTED - 1457 - 1458 002162 376 134 CPI BSLASH ;IS THIS A BACK SLASH(I.E. IN-LINE CRLF) - 1459 002164 312 174 004 JZ PLN2 ;JUMP IF YES... - 1460 - 1461 002167 267 ORA A ;IS IT A "00" BYTE??? - 1462 002170 310 RZ ;RETURN IF DONE - 1463 - 1464 ;FALL HERE IF GOTTA REAL CHAR.. - 1465 002171 315 010 004 CALL PCHR ;GO PRINT CHAR IN ACCUM - 1466 002174 314 203 004 PLN2: CZ CRLFIN ;GET HERE ON ZERO FLAG,ONLY IF NEED CRLF - 1467 002177 303 160 004 JMP PLN1 ;CONTINUE LOOP - 1468 ;SUBROUTINE TO PRINT A CARRIAGE RETURN-LINE FEED - 1469 ;NO REGISTERS DESTROYED..JUST CALL TO GET YOUR - 1470 ; PRINTED - 1471 002202 341 .CRLF: POP H ;MUST FIX THE STACK - 1472 002203 CRLFIN: PCHAR CRCHR ;PRINT CARRIAGE RETURN - (1) 002203 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 002204 015 .BYTE CRCHR ;CHAR TO PRINT - 1473 002205 PCHAR LFCHR ;PRINT LINE FEED - (1) 002205 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 002206 012 .BYTE LFCHR ;CHAR TO PRINT - 1474 002207 311 RET ;RETURN - 1475 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-40 -HCORE.M80 **COMMAND DISPATCH LIST** - - 1477 .SBTTL **COMMAND DISPATCH LIST** - 1478 ;THIS LIST CONTAINS ALL CHARACTER PAIRS WHICH ARE CONSIDERED - 1479 ;LEGITIMATE COMMANDS TO THE KS10 CONSOLE - 1480 002210 CMDLST: - 1481 002210 122 120 .BYTE 'R,'P ;*REPEAT IN FAST LOOP* - 1482 002212 153 020 .ADDR RPCMD - 1483 002214 104 116 .BYTE 'D,'N ;*DEPOSIT NEXT* - 1484 002216 324 212 .ADDR BIT15!DNCMD - 1485 002220 104 103 .BYTE 'D,'C ;*DEPOSIT CRAM* - 1486 002222 120 216 .ADDR BIT15!DCCMD - 1487 002224 104 115 .BYTE 'D,'M ;*DEPOSIT MEMORY* - 1488 002226 225 212 .ADDR BIT15!DMCMD - 1489 002230 114 103 .BYTE 'L,'C ;*LOAD CRAM ADDRESS* - 1490 002232 332 213 .ADDR BIT15!LCCMD - 1491 - 1492 002234 114 101 .BYTE 'L,'A ;*LOAD MEMORY ADDRESS* - 1493 002236 121 213 .ADDR BIT15!LACMD - 1494 002240 104 111 .BYTE 'D,'I ;*DEPOSIT I/O* - 1495 002242 013 213 .ADDR BIT15!DICMD - 1496 002244 114 111 .BYTE 'L,'I ;*LOAD I/O ADDRESS* - 1497 002246 126 213 .ADDR BIT15!LICMD - 1498 002250 104 102 .BYTE 'D,'B ;*DEPOSIT BUS* - 1499 002252 241 011 .ADDR DBCMD - 1500 002254 104 113 .BYTE 'D,'K ;*DEPOSIT KONSOLE* - 1501 002256 147 213 .ADDR BIT15!DKCMD - 1502 - 1503 002260 114 113 .BYTE 'L,'K ;*LOAD ADR FOR KONSOLE* - 1504 002262 133 213 .ADDR BIT15!LKCMD - 1505 002264 105 113 .BYTE 'E,'K ;*EXAMINE KONSOLE* - 1506 002266 054 013 .ADDR EKCMD - 1507 002270 114 106 .BYTE 'L,'F ;LOAD DIAG FUNCTION - 1508 002272 262 214 .ADDR BIT15!LFCMD - 1509 002274 104 106 .BYTE 'D,'F ;DEPOSIT INTO DIAG FUNCTION - 1510 002276 271 214 .ADDR BIT15!DFCMD - 1511 002300 115 113 .BYTE 'M,'K ;*MARK MICRO-CODE* - 1512 002302 025 220 .ADDR BIT15!MKCMD - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-41 -HCORE.M80 **COMMAND DISPATCH LIST** - - 1514 002304 125 115 .BYTE 'U,'M ;*UNMARK MICRO-CODE* - 1515 002306 020 220 .ADDR BIT15!UMCMD - 1516 002310 120 105 .BYTE 'P,'E ;*PARITY ENABLE* - 1517 002312 011 017 .ADDR PECMD - 1518 002314 103 105 .BYTE 'C,'E ;*CACHE ENABLE* - 1519 002316 337 013 .ADDR CECMD - 1520 002320 124 105 .BYTE 'T,'E ;*1 MSEC CLOCK ENABLE* - 1521 002322 013 014 .ADDR TECMD - 1522 002324 124 120 .BYTE 'T,'P ;*TRAP ENABLE* - 1523 002326 105 014 .ADDR TPCMD - 1524 - 1525 002330 123 124 .BYTE 'S,'T ;*START* - 1526 002332 122 217 .ADDR BIT15!STCMD - 1527 002334 110 101 .BYTE 'H,'A ;*HALT* - 1528 002336 227 017 .ADDR HACMD - 1529 002340 103 117 .BYTE 'C,'O ;*CONTINUE* - 1530 002342 204 017 .ADDR COCMD - 1531 002344 123 111 .BYTE 'S,'I ;*SINGLE INSTRUCT* - 1532 002346 213 014 .ADDR SICMD - 1533 002350 123 115 .BYTE 'S,'M ;*START MICRO-CODE* - 1534 002352 221 016 .ADDR SMCMD - 1535 - 1536 002354 115 122 .BYTE 'M,'R ;*MASTER RESET* - 1537 002356 231 005 .ADDR MRCMD - 1538 002360 103 123 .BYTE 'C,'S ;*START CPU CLOCK* - 1539 002362 234 014 .ADDR CSCMD - 1540 002364 103 110 .BYTE 'C,'H ;*HALT CPU CLOCK* - 1541 002366 247 014 .ADDR CHCMD - 1542 002370 103 120 .BYTE 'C,'P ;*PULSE CPU CLOCK* - 1543 002372 165 013 .ADDR CPCMD - 1544 002374 105 116 .BYTE 'E,'N ;*EXAMINE NEXT* - 1545 002376 174 012 .ADDR ENCMD - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-42 -HCORE.M80 **COMMAND DISPATCH LIST** - - 1547 002400 105 115 .BYTE 'E,'M ;*EXAMINE MEMORY* - 1548 002402 025 012 .ADDR EMCMD - 1549 002404 105 111 .BYTE 'E,'I ;*EXAMINE I/O* - 1550 002406 350 012 .ADDR EICMD - 1551 002410 105 103 .BYTE 'E,'C ;*EXAMINE CRAM* - 1552 002412 300 015 .ADDR ECCMD - 1553 002414 105 102 .BYTE 'E,'B ;*EXAMINE BUS* - 1554 002416 114 011 .ADDR EBCMD - 1555 002420 105 112 .BYTE 'E,'J ;*EXAMINE CURRENT CRAM INFO* - 1556 002422 123 015 .ADDR EJCMD - 1557 - 1558 002424 124 122 .BYTE 'T,'R ;*TRACE* - 1559 002426 212 015 .ADDR TRCMD - 1560 002430 122 103 .BYTE 'R,'C ;*FUNCTION READ CRAM CONTROL REG* - 1561 002432 037 015 .ADDR RCCMD - 1562 002434 132 115 .BYTE 'Z,'M ;*ZERO KS10 MOS MEMORY* - 1563 002436 077 020 .ADDR ZMCMD - 1564 002440 120 115 .BYTE 'P,'M ;*PULSE MICRO-CODE..* - 1565 002442 267 015 .ADDR PMCMD - 1566 002444 102 124 .BYTE 'B,'T ;*BOOT SYS* - 1567 002446 257 021 .ADDR BTCMD - 1568 - 1569 002450 102 103 .BYTE 'B,'C ;*BOOT CHECK* - 1570 002452 373 025 .ADDR BCCMD - 1571 002454 114 102 .BYTE 'L,'B ;*LOAD BOOT* - 1572 002456 307 021 .ADDR LBCMD - 1573 002460 105 130 .BYTE 'E,'X ;*EXECUTE* - 1574 002462 057 217 .ADDR BIT15!EXCMD - 1575 002464 114 124 .BYTE 'L,'T ;*LAMP TEST* - 1576 002466 135 014 .ADDR LTCMD - 1577 002470 113 114 .BYTE 'K,'L ;*KLINIK* - 1578 002472 265 017 .ADDR KLCMD - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-43 -HCORE.M80 **COMMAND DISPATCH LIST** - - 1580 002474 105 122 .BYTE 'E,'R ;*EXAMINE REGISTER* - 1581 002476 216 013 .ADDR ERCMD - 1582 002500 114 122 .BYTE 'L,'R ;*LOAD REGISTER* - 1583 002502 301 013 .ADDR LRCMD - 1584 002504 104 122 .BYTE 'D,'R ;*DEPOSIT REGISTER* - 1585 002506 311 013 .ADDR DRCMD - 1586 002510 115 124 .BYTE 'M,'T ;*MAGTAPE BOOT* - 1587 002512 006 022 .ADDR MTCMD - 1588 002514 104 123 .BYTE 'D,'S ;*DISK SELECT* - 1589 002516 337 020 .ADDR DSCMD - 1590 002520 115 123 .BYTE 'M,'S ;*MAGTAPE SELECT* - 1591 002522 015 021 .ADDR MSCMD - 1592 002524 123 110 .BYTE 'S,'H ;*SHUTDOWN* - 1593 002526 235 017 .ADDR SHCMD - 1594 002530 115 102 .BYTE 'M,'B ;*MAGTAPE BOOTSTRAP* - 1595 002532 222 022 .ADDR MBCMD - 1596 002534 120 127 .BYTE 'P,'W ;*PASSWORD* - 1597 002536 343 017 .ADDR PWCMD - 1598 002540 124 124 .BYTE 'T,'T ;*KLINIK LINE TO TTY* - 1599 002542 327 017 .ADDR TTCMD - 1600 002544 126 124 .BYTE 'V,'T ;*VERIFY AGAINST TAPE* - 1601 002546 027 024 .ADDR VTCMD - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-44 -HCORE.M80 **COMMAND DISPATCH LIST** - - 1603 002550 126 104 .BYTE 'V,'D ;*VERIFY AGAINST DISK* - 1604 002552 014 024 .ADDR VDCMD - 1605 002554 130 061 .BYTE 'X,'1 ;DUMMY - 1606 002556 054 040 .ADDR RAMX1 - 1607 002560 106 111 .BYTE 'F,'I ;*FILE* - 1608 002562 316 223 .ADDR BIT15!FICMD - 1609 002564 102 062 .BYTE 'B,'2 ;**TEMP BOOTCHECK 2** - 1610 002566 004 024 .ADDR B2CMD - 1611 002570 115 115 .BYTE 'M,'M ;MANUFACTURING MODE - 1612 002572 167 014 .ADDR MMCMD - 1613 002574 123 103 .BYTE 'S,'C ;SOFT CRAM ERROR RECOVERY "ON/OFF" SWITCH - 1614 002576 047 014 .ADDR SCCMD - 1615 002600 000 .BYTE 0 ;END LIST MARKER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-45 -HCORE.M80 CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM - - 1617 .SBTTL CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM - 1618 - 1619 001 .IF DF,PASS1 - 1620 - 1621 CHECKS: .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 1 - 1622 .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 2 - 1623 .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 3 - 1624 .ADDR 0 ;PSUEDO BYTES FOR RAM NUMBER 4 - 1625 000 .ENDC - 1626 - 1627 - 1628 001 .IF DF,PASS2 - 1629 002601 355 237 CHECKS: .ADDR CHKSM0 ;CHECKSUM FOR RAM NUMBER 1 - 1630 002603 233 311 .ADDR CHKSM1 ;CHECKSUM FOR RAM NUMBER 2 - 1631 002605 054 340 .ADDR CHKSM2 ;CHECKSUM FOR RAM NUMBER 3 - 1632 002607 326 010 .ADDR CHKSM3 ;CHECKSUM FOR RAM NUMBER 4 - 1633 000 .ENDC - 1634 .TITLE VER 4.2 KS10 CONSOLE PROGRAM - 1635 002611 134 113 123 INIMS: .ASCIZ /\KS10 CSL.V4.2\/ ;POWER UP MESSAGE AND IDENTIFIER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-46 -HCORE.M80 *** "MR" CMD *** - - 1637 .SBTTL *** "MR" CMD *** - 1638 ;THIS CODE PERFORMS THE "MASTER RESET" CONSOLE FUNCTION - 1639 002631 MRCMD: - 1640 002631 257 XRA A ;SET ACCUM=0 - 1641 002632 323 212 OUT CPUCTL ;SET 0'S TO "RUN,EXECUTE,CONT" - 1642 002634 315 247 014 CALL CHCMD ;AND INSURE CPU HAS STOPPED... - 1643 - 1644 ;ISSUE SM10 BUS RESET - 1645 002637 076 005 MRINT: MVI A,5 ;BITS FOR "DP RESET", & "CRAM RESET" - 1646 002641 323 204 OUT CRMCTL ;***** I/O WRT 204/5 ***** - 1647 - 1648 002643 076 200 MVI A,^B10000000 ;BIT7 FOR RESET - 1649 002645 323 100 OUT RESET ;ISSUE RESET,SET CONSOLE MODE - 1650 - 1651 002647 315 376 016 CALL SMFINI ;GET CURRENT PARITY SETTINGS & SET IN KS - 1652 - 1653 002652 072 355 040 LDA TRAPEN ;BIT FOR "CLR TEN INT" SHOULD BE LOW - 1654 002655 323 205 OUT DIAG ;***** I/O WRT 205/XX ***** - 1655 - 1656 002657 006 000 MVI B,0 ;WILL SET NO BITS IN THE STATE WORD - 1657 002661 315 337 032 CALL STATEM ;SET THE STATE - 1658 002664 012 .BYTE ^O12 ;OFF THE STUFF WE DONT WANT - 1659 002665 ENDCMD ;AND OUT - (1) 002665 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-47 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1661 .SBTTL ****INTERRUPT HANDLER**** - 1662 ;HERE ON INTERRRUPTS..REGS ALREADY SAVED AT "RST" BLOCK - 1663 002666 041 212 006 INTRP: LXI H,ENDIN ;PUSH OUR FAVORITE EXIT ADDRESS ON THE STACK - 1664 002671 345 PUSH H ; AND WE CAN DO "RET"'S TO LEAVE ROUTINE - 1665 002672 333 201 IN CTYCTL ;GET CTY TTY STATUS - 1666 002674 107 MOV B,A ;SAVE IT IN THE "B" REG FOR A COUPLE INSTRS - 1667 002675 333 203 IN REMCTL ;NOW FETCH UP THE REMOTE STATUS - 1668 002677 260 ORA B ;AND THROW BOTH STATUS'S TOGETHER - 1669 002700 346 070 ANI ^O70 ;ANY ERR BITS SET?? - 1670 002702 302 072 010 JNZ TTERR ;GO TELL ERR IF YES - 1671 - 1672 ;FALL THROUGH IF NO ONE IN ERROR. NOW SEE WHO THE CHARACTER IS FROM - 1673 002705 170 MOV A,B ;COPY CTY STATUS INTO ACCUM - 1674 002706 346 002 ANI 2 ;IS A CHARACTER IN THE CTY UART?? - 1675 002710 302 341 005 JNZ INTCH ;JUMP IF YES. FIND CHARACTER IN CTY UART. - 1676 - 1677 ;FALL HERE IF IT WAS A KLINIK CHAR - 1678 002713 333 202 IN REMDAT ;FETCH OUT THE CHARACTER - 1679 002715 346 177 ANI ^O177 ;OFF THE PARITY BIT - 1680 002717 107 MOV B,A ;MAKE SECOND COPY OF CHARACTER IN "B" - 1681 - 1682 002720 376 031 CPI CNTLY ;BEFORE DISPATCHING, SEE IF THIS IS "CONTROL-Y" - 1683 002722 302 335 005 JNZ KL.DSP ;IF NOT, DO EVERYTHING AS PER NORMAL - 1684 - 1685 ;AHA. IT WAS A CONTROL-Y..NOW SEE IF IN MM MODE - 1686 002725 072 251 040 LDA MMFLG ;GET FLAG - 1687 002730 247 ANA A ;SET 8080 CONDITION CODES - 1688 002731 302 200 032 JNZ MMERR1 ;IF YES, MM MODE, THEN GO ABORT WHAT EVER YOU ARE DOING - 1689 002734 170 MOV A,B ;NOW REPLACE THE CHAR WE JUST BOMBED - 1690 - 1691 ;ELSE FALL THROUGH - 1692 002735 052 346 040 KL.DSP: LHLD MODDIS ;GET CURRENT KLINIK MODE DISPATCH - 1693 002740 351 PCHL ;DISPATCH TO DO THE RIGHT THING - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-48 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1695 ;CHECK IF WE ARE IN USER MODE - 1696 002741 333 200 INTCH: IN CTYDAT ;INPUT CHARACTER - 1697 002743 346 177 ANI ^O177 ;STRIP BIT 8 - 1698 002745 107 MOV B,A ;SAVE CHAR FOR 2 INSTRUCTIONS - 1699 - 1700 ;SEE IF THIS IS MANUFACTURING MODE BEFORE WE CONTINUE - 1701 002746 072 247 040 LDA CSLMODE ;GRAB CURRENT CSL MODE - 1702 002751 346 020 ANI .MODE4 ;AND SEE IF ITS MODE 4 - 1703 002753 312 377 005 JZ CMNBUF ;IF NO, CTY INPUT NORMAL - 1704 - 1705 ;PLACE YOU GO IF MANUFACTURING MODE.. CTY CHARS ARE JUST SENT TO KLINIK - 1706 002756 170 MOV A,B ;GRAB CHARACTER TO BE SENT TO KLINIK - 1707 002757 315 123 004 CALL KCHR0 ;ONLY ECHO CTY STUFF AGAINST THE KLINIK LINE - 1708 - 1709 ;NOW SEE IF THAT WAS A MODE CHANGE CHAR WE JUST SENT DOWN THE LINE - 1710 002762 376 031 CPI CNTLY ;IS IT "CONTROL-Y" - 1711 002764 300 RNZ ;IF WAS NOT, SIMPLY GET OUT - 1712 - 1713 002765 CLRB KLNKSW ;FORCE RE-EXAMINE OF THINGS - 1714 002767 CLRB MMFLG ;TURN OFF MANUFACTURING MODE - 1715 002771 315 103 034 CALL SETM2 ;FORCE KLINIK LINE IMMEDIATELY INTO MODE 2 - 1716 002774 303 255 001 JMP REINI - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-49 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1718 ;ALSO STANDARD COMMON ENTRY POINT WHEN KLINIK LINE PARALLELS THE CTY - 1719 002777 MODE3: - 1720 002777 072 156 040 CMNBUF: LDA USRMD ;GET USER MODE FLAG - 1721 003002 247 ANA A ;IS IT SET?? - 1722 003003 170 MOV A,B ;COPY CHAR INTO ACCUM(GET HERE FOR KLINIK OR CTY) - 1723 003004 302 303 006 JNZ USER ;JUMP IF IN USER MODE... - 1724 - 1725 ;FALL THRU TO HERE IF NOT USER MODE AND WE NEED DO SOMETHING WITH CHAR - 1726 003007 376 017 CPI CNTLO ;CONTROL O??? - 1727 003011 302 031 006 JNZ SKP2 ;JMP IF NO - 1728 - 1729 ;ELSE FALL INTO CONTROL-O CODE..STOP THE PRINTER - 1730 003014 PCHAR UPARR - (1) 003014 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 003015 136 .BYTE UPARR ;CHAR TO PRINT - 1731 003016 PCHAR OCHR - (1) 003016 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 003017 117 .BYTE OCHR ;CHAR TO PRINT - 1732 003020 072 120 040 LDA NOPNT ;GET CURRENT STATE OF "NO PRINT" - 1733 003023 306 200 ADI ^O200 ;ZAP PRINT FLAG - 1734 003025 062 120 040 STA NOPNT ;PUT IT BACK - 1735 003030 257 XRA A ;ZAP CHAR SO WE CAN EARLY EXIT - 1736 - 1737 003031 376 023 SKP2: CPI CNTLS ;IS IT CONTROL-S - 1738 003033 314 145 007 CZ CNTS ;CALL IF YES - 1739 - 1740 003036 376 021 CPI CNTLQ ;IS IT CONTROL-Q - 1741 003040 302 046 006 JNZ SKP6 ;JMP IF NO - 1742 - 1743 ;FALL TO HERE IF YES, ZAPP CNTL-Q FLAG - 1744 003043 CLRB STPPD ;ZAP!! - 1745 003045 257 XRA A ;CLEAR ACCUM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-50 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1747 003046 062 157 040 SKP6: STA RPEND ;ANY OTHER CHARS MEAN END REPEAT LOOP - 1748 003051 376 032 CPI CNTLZ ;CONTROL Z?? - 1749 003053 312 371 006 JZ CNTZ ;JMP IF YES - 1750 - 1751 003056 376 025 CPI CNTLU ;CONTROL-U?? - 1752 003060 302 075 006 JNZ SKP8 ;JMP IF NO - 1753 - 1754 ;FALL TO HERE TO DO THE CONTROL-U CODE - 1755 003063 PCHAR UPARR - (1) 003063 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 003064 136 .BYTE UPARR ;CHAR TO PRINT - 1756 003065 PCHAR UCHR - (1) 003065 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 003066 125 .BYTE UCHR ;CHAR TO PRINT - 1757 003067 PCRLF ;AND A CR-LF TO GIVE CLEAN LINE - (2) 003067 347 RST 4 - (2) 003070 002 .BYTE 2 - 1758 003071 315 163 010 CALL BFRST ;CLEAR INPUT BUFFER - 1759 003074 257 XRA A ;AND SET ACCUM FOR EARLY OUT - 1760 - 1761 003075 376 003 SKP8: CPI CNTLC ;CONTROL-C?? - 1762 003077 312 151 010 JZ CNTC ;JMP IF YES - 1763 - 1764 003102 376 000 CPI Q.OUT ;SEE IF MUST TAKE A QUICK OUT - 1765 003104 310 RZ ;LEAVE IF YES - 1766 - 1767 003105 376 054 CPI COMMA ;IS IT A COMMA? - 1768 003107 302 116 006 JNZ M11 ;IF NOT COMMA, AVOID THIS NEXT COUPLE INSTRUCTIONS - 1769 - 1770 ;FALL TO HERE IF WAS A COMMA - 1771 003112 041 225 040 LXI H,CMCNT ;POINT TO THE COMMA COUNTER - 1772 003115 064 INR M ;UPDATE.. AND CONTINUE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-51 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1774 ;NOT SPECIAL CHAR..PROCESS NORMAL - 1775 003116 376 034 M11: CPI CNBCK ;CONTROL BACKSLASH SHOULD LOOK LIKE CRLF - 1776 003120 314 231 006 CZ EOMRK ;CALL IF YES - 1777 - 1778 003123 376 015 CPI CRCHR ;CARRIAGE RET?? - 1779 003125 314 231 006 CZ EOMRK ;CALL IF YES - 1780 - 1781 003130 376 012 CPI LFCHR ;LINE FEED?? - 1782 003132 314 231 006 CZ EOMRK ;CALL IF YES - 1783 - 1784 003135 052 215 040 LHLD BUF. ;POINTER TO FIRST FREE BUFFER PLACE - 1785 003140 376 177 CPI RBOUT ;RUB-OUT CHAR?? - 1786 003142 312 250 006 JZ RUB ;JMP IF YES - 1787 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-52 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1789 ;OTHERWISE ITS A REGULAR CHAR.. - 1790 ;THIS IS DUMB CODE FOR FIRST GO AROUND - 1791 ;TYPE-AHEAD WONT WORK - 1792 - 1793 003145 315 220 006 CALL UP.LO ;CONVERT SO PROGRAM INTERNAL ONLY SEES UPPER CASE - 1794 - 1795 003150 167 MOV M,A ;CHAR INTO BUFFER SPACE - 1796 003151 043 INX H ;UPDATE PNTR - 1797 003152 042 215 040 SHLD BUF. ;AND REPLACE PNTR - 1798 - 1799 003155 107 MOV B,A ;SAVE THE CHAR JUST TYPED - 1800 003156 326 040 SUI ^O40 ;CHECK IF ITS A PRINTING CHAR - 1801 003160 372 175 006 JM NOECH ;IF IT IS NONE-PNT..GO NO ECHO - 1802 - 1803 003163 170 MOV A,B ;GET CHAR BACK - 1804 003164 326 176 SUI ^O176 ;IS IT TOO HI TO BE PRINTING CHAR?? - 1805 003166 362 175 006 JP NOECH ;IF YES, GO NO ECHO - 1806 - 1807 003171 170 MOV A,B ;GET CHAR BACK AGAIN - 1808 003172 315 010 004 CALL PCHR ;NOW GO ECHO IT..... - 1809 - 1810 003175 072 161 040 NOECH: LDA BFCNT ;GET CHAR COUNT - 1811 003200 074 INR A ;BUMP UP - 1812 003201 376 120 CPI 80. ;TOO MANY?? - 1813 003203 312 001 004 JZ BFOVR ;JMP BUFFER OVERFLOW IF YES - 1814 003206 062 161 040 STA BFCNT ;REPLACE COUNT - 1815 003211 341 POP H ;CLEAR STACK OF THE PSEUDO RETURN FIRST - 1816 ;FALL INTO END INTERRRUPT CODE IF CHAR COUNT OK - 1817 003212 341 ENDIN: POP H ;RESTORE REGS - 1818 003213 321 POP D - 1819 003214 301 POP B - 1820 003215 361 POP PSW - 1821 003216 373 EI ;INTERRUPTS BACK ON - 1822 003217 311 RET ;AND OUT - 1823 - 1824 ;AND ACCEPT LOWER CASE AS REQUESTED - 1825 003220 376 141 UP.LO: CPI ^O141 ;LOW CASE "A" OR BETTER?? - 1826 003222 370 RM ;IF MINUS, NOT LOW CASE, CONTINUE - 1827 003223 376 173 CPI ^O173 ;LOW CASE "Z" OR WORSE?? - 1828 003225 360 RP ;IF POS, OR ZERO, ITS NOT LOW CASE RANGE - 1829 - 1830 ;FALL INTO HERE IF IT WAS LOWER CASE.... - 1831 003226 326 040 SUI ^O40 ;MAKE IT UPPER FOR ALL - 1832 003230 311 RET ;AND OUT - 1833 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-53 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1835 ;CODE FOR END-OF-LINE CHAR TYPED IN - 1836 003231 EOMRK: PCRLF ;GIVE CR-LF - (2) 003231 347 RST 4 - (2) 003232 002 .BYTE 2 - 1837 - 1838 003233 072 225 040 LDA CMCNT ;GET COUNT OF COMMAS - 1839 003236 074 INR A ;UP BY ONE, FOR THE CR-LF - 1840 003237 062 204 040 STA EOL ;AND SET EOL MARKER - 1841 003242 257 XRA A ;CLEAR ACCUM - 1842 003243 062 225 040 STA CMCNT ;SET LOCATION - 1843 003246 057 CMA ;SET ACCUM = -1 - 1844 003247 311 RET ;RETURN - 1845 - 1846 - 1847 ;CODE FOR A RUB-OUT - 1848 003250 072 161 040 RUB: LDA BFCNT ;GET CURRENT CHAR COUNT - 1849 003253 247 ANA A ;IS IT 0?? - 1850 003254 310 RZ ;GOOD, NOTHING TO DELETE - 1851 003255 075 DCR A ;DECREMENT OTHERWISE - 1852 003256 062 161 040 STA BFCNT ;AND PUT IT BACK - 1853 - 1854 003261 053 DCX H ;AND BACK UP THE BUFFER PNTR - 1855 003262 042 215 040 SHLD BUF. ;PUT IT BACK - 1856 003265 PSLASH ;TYPE SLASH AS RUBOUT INDICATOR - (2) 003265 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 003266 057 .BYTE SLASH ;CHAR TO PRINT - 1857 003267 176 MOV A,M ;GET CURRENT CHAR IN BUFFER - 1858 003270 315 010 004 CALL PCHR ;ECHO WHAT WAS RUBBED OUT - 1859 003273 376 054 CPI COMMA ;OH WAIT, WAS THAT A COMMA?? - 1860 003275 300 RNZ ;JMP IF NO, TAKE A NORMAL OUT - 1861 ;FALL THRU IF WAS A COMMA - 1862 003276 041 225 040 LXI H,CMCNT ;GET COMMA COUNT - 1863 003301 065 DCR M ;DECREMENT - 1864 003302 311 RET ;AN EXIT THIS PLACE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-54 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1866 ;HERE IF USER MODE FLAG IS SET.. - 1867 003303 376 034 USER: CPI CNBCK ;IS IT "^\"?? - 1868 003305 302 164 007 JNZ TENCHR ;IF NOT,THEN ITS A CHAR FOR THE KS-10 - 1869 - 1870 ;BEFORE WE LEAVE USER MODE, WE MUST CHECK THE CONSOLE ENABLE SWITCH - 1871 003310 333 301 END.USR: IN BOOTSW ;***** I/O RD 301 ***** IS CONSOLE LOCKED UP?? - 1872 - 1873 ;BIT 2 IS "LO" IF CONSOLE ENABLE IS TRUE. IF BIT 2 IS "HI", WE ARE DISABLED - 1874 ;DUE TO THE HARDWARE INVERSION OF SIGNAL LEVELS - 1875 003312 346 004 ANI ^O4 ;CHECK BIT 2 - 1876 003314 300 RNZ ;IF HI, WE ARE DISABLED AND WILL IGNORE - 1877 - 1878 ;IF YES, USER MODE MUST BE CLEARED - 1879 003315 CLRB NOPNT ;CLR NO PRINT FLAG IN CASE WE WERE IN "INTERNAL MODE" - 1880 003317 315 352 006 CALL CLRUSE ;EXIT FROM USER MODE - 1881 003322 PLINE RDYMS ;"ENABLED" - (1) 003322 337 RST 3 ;PRINT LINE OF CHARS - (1) 003323 341 006 .ADDR RDYMS ;BUFF TO PRINT - 1882 003325 041 255 001 LXI H,REINI ;SET UP AN EXIT ADDRESS - 1883 003330 321 IOUT: POP D ;CLEAR THE PSEUDO RETURN TO "ENDIN" FROM STACK - 1884 003331 321 POP D ;CLEAR ORIGINAL SAVED "H,L" OFF STACK - 1885 003332 321 POP D - 1886 003333 301 POP B - 1887 003334 361 POP PSW - 1888 003335 063 INX SP ;NOW GET OLD RETURN ADDR OFF STACK - 1889 003336 063 INX SP - 1890 - 1891 003337 373 EI ;ENABLE INTS.. - 1892 003340 351 PCHL ;AND GO TO PROMPT - 1893 003341 105 116 101 RDYMS: .ASCIZ /ENABLED\/ - 1894 - 1895 003352 CLRUSE: CLRB USRMD ;AND CLEAR THE USER MODE FLAG - 1896 003354 072 251 040 LDA MMFLG ;BEFORE DROPPING USER, SEE IF IN MM MODE - 1897 003357 247 ANA A ;SET 8080 FLAGS - 1898 003360 310 RZ ;IF NOT MM MODE, OK TO GET OUT - 1899 - 1900 ;IF WAS SET, MUST DROP BACK TO MODE 4 - 1901 003361 315 052 034 CALL SETM4 - 1902 003364 315 117 004 CALL KCHR ;NON-PRINTING CHAR, ALSO TELLS HOST TO SWITCH MODES - 1903 003367 034 .BYTE CNBCK ;"CONTROL-BACKSLASH IS THE MAGIC CHAR" - 1904 003370 311 RET ;JUST LEAVE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-55 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1906 ;CONTROL-Z CODE...ENTER USER MODE - 1907 003371 315 023 007 CNTZ: CALL SETUSE ;SET THE USER MODE - 1908 003374 315 163 010 CALL BFRST ;BUFFER RESET..RE-INIT TTY INPUT BUFFER - 1909 003377 CLRB KLNKSW ;FORCE LIGHTS TO GET FIXED AFTER ENTER USER - 1910 - 1911 003401 PLINE U ;PRINT "USER MODE" - (1) 003401 337 RST 3 ;PRINT LINE OF CHARS - (1) 003402 012 007 .ADDR U ;BUFF TO PRINT - 1912 003404 041 335 001 LXI H,NULLJ ;LOAD "H,L" WITH A PLACE TO GO - 1913 003407 303 330 006 JMP IOUT ;AND GET OUT - 1914 003412 125 123 122 U: .ASCIZ /USR MOD\/ - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-56 -HCORE.M80 ****INTERRUPT HANDLER**** - - 1916 003423 SETUSE: - 1917 ;HERE IS THE DEPOSIT WORD 31 CODE.. - 1918 003423 WRD31: INTON ;DONT PRINT THIS STUFF - (1) 003423 327 RST 2 ;GO SET INTERNAL MODE - 1919 003424 EXAM 31 ;MUST SAVE CURRENT STATE OF KEEP ALIVE & RELOAD BITS - (1) 003424 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 003427 031 000 .ADDR 31 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 1920 003431 INTOFF ;ITS OK NOW - (1) 003431 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 1921 003432 072 255 040 LDA GOCODE ;BYTE 28-35 GETS THE REASON FOR RELOAD - 1922 003435 041 047 040 LXI H,DMDAT ;MAKE H,L POINT TO THE DESIRED BUFFER - 1923 003440 167 MOV M,A ;SET THE GOCODE BITS INTO THE BYTE "DMDAT" - 1924 - 1925 003441 072 355 040 LDA TRAPEN ;NOW GRAB THE TRAP BIT - 1926 003444 007 RLC ;AND SHIFT IT TO THE APPROPRIATE POSITION(20 TO 40) - 1927 003445 007 RLC ;(40 TO 100) - 1928 003446 007 RLC ;(100 TO 200) - 1929 003447 107 MOV B,A ;SAVE IT IN B FOR A WHILE - 1930 - 1931 003450 072 251 040 LDA MMFLG ;GET "MAINTENANCE MODE" FLAG - 1932 003453 247 ANA A ;SET 8080 FLAGS - 1933 003454 365 PUSH PSW ;SAVE THE STATE OF THE FLAGS FOR LATER USE - 1934 003455 312 062 007 JZ WRD.PR ;IF NO MM MODE, DONT SET A BIT - 1935 - 1936 ;WAS MM MODE, MUST SET THE BIT - 1937 003460 076 100 MVI A,^O100 ;A BIT FOR MM MODE - 1938 003462 260 WRD.PR: ORA B ;THROW TOGETHER WITH THE TRAP BIT - 1939 003463 043 INX H ;PUT INTO THE DEPOSIT BUFFER - 1940 003464 043 INX H - 1941 003465 167 MOV M,A ;THIS IS LOC "DMDAT+2" - 1942 - 1943 003466 072 354 040 LDA PARBT ;NOW FOR THE SELECTION OF PARITY BITS - 1944 003471 017 RRC ;RIGHT ONCE TO FREE UP 200 WEIGHT - 1945 003472 107 MOV B,A ;SAVE IN B REG - 1946 003473 072 247 040 LDA CSLMODE ;GET CURRENT KLINIK MODE - 1947 003476 346 014 ANI .MODE2!.MODE3 ;IF EITHER OF THESE MODES, MUST SET THE BIT - 1948 003500 312 105 007 JZ WRD.DP ;JUMP IF NOT THOSE BITS - 1949 - 1950 - 1951 ;HERE IF ONE OF THOSE MODES WAS SET - 1952 003503 076 100 MVI A,^O100 ;A BIT TO SET - 1953 - 1954 003505 260 WRD.DP: ORA B ;THROW THIS BIT WITH THE OTHERS - 1955 003506 017 RRC ;FINAL JUSTIFICATION - 1956 003507 107 MOV B,A ;NOW SAVE THIS GOOD STUFF IN "B" - 1957 003510 072 015 040 LDA EMBUF+3 ;GET THE BYTE THAT HAS CURRENT "KA" BIT - 1958 003513 346 300 ANI ^O300 ;OFF EVERYTHING ELSE - 1959 003515 260 ORA B ;NOW THROW WHOLE MESS TOGETHER AGAIN - 1960 - 1961 003516 043 INX H ;BUMP POINTER TO "DMDAT+3" - 1962 003517 167 MOV M,A ;AND PUT DATA INTO RAM - 1963 003520 DEPOS 31 ;PUT INTO MOS MEMORY AT LOC 31 - (1) 003520 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 003521 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-57 -HCORE.M80 ****INTERRUPT HANDLER**** - - (1) 003524 031 000 .ADDR 31 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 1964 003526 CLRB GOCODE ;CLEAR THE RELOAD CODE - 1965 - 1966 003530 361 POP PSW ;THIS WORD HAS FLAGS SET FROM BEFORE WHEN WE TESTED "MM" - 1967 003531 076 377 MVI A,-1 ;FLAGS WONT CHANGE WHILE WE SET THE USER MODE FLAG - 1968 003533 062 156 040 STA USRMD ;SET USER MODE... NOW DO SOMETHING BASED ON THE FLAGS - 1969 003536 310 RZ ;IF NOT SET, A SIMPLE OUT - 1970 - 1971 ;HERE IF SET, WE MUST SEND AN "ACK" DOWN KLINIK LINE BEFORE ANYTHING ELSE - 1972 003537 315 205 035 CALL ACK ;"ACK" DOWN THE KLINIK - 1973 003542 303 103 034 JMP SETM2 ;ALSO SET MODE 2 AND USE HIS "RET" TO RETURN - 1974 - 1975 ;TYPED "CONTROL-S" TO STOP CONSOLE OUTPUT - 1976 003545 041 162 040 CNTS: LXI H,STPPD ;POINTER TO STOPPED FLAG - 1977 003550 176 MOV A,M ;GET THE FLAG - 1978 003551 057 CMA ;SET .EQ. 0 IF WAS ALREADY SET - 1979 003552 247 ANA A ;NOW SET FLAGS, 'CAUSE CMA DOESN'T - 1980 003553 310 RZ ;IF .EQ. 0 NOW, MERELY LEAVE..ALREADY SET - 1981 - 1982 003554 167 MOV M,A ;AND SET THE FLAG .EQ. -1 IF HERE - 1983 003555 373 EI ;LET THE CNTL-Q THRU - 1984 - 1985 003556 176 CNTSL: MOV A,M ;GET FLAG STATUS - 1986 003557 247 ANA A ;IS IT SET??? - 1987 003560 310 RZ ;IF NOT,THEN TIME TO QUIT - 1988 003561 303 156 007 JMP CNTSL ;STAY IN LOOP IF FLAG STILL SET - 1989 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-58 -HCORE.M80 **8080 TO KS10 CHARACTER SERVICE** - - 1991 .SBTTL **8080 TO KS10 CHARACTER SERVICE** - 1992 003564 062 035 040 TENCHR: STA CHRBUF ;PUT CHARACTER IN A RAM BUFFER - 1993 003567 076 032 MVI A,^O32 ;DESIRED ADDRESS FOR DEPOSTING CHARACTER - 1994 - 1995 003571 323 103 OUT A2835 ;WRITE ONLY RELEVANT PIECE OF THE ADDRESS - 1996 003573 257 XRA A ;THEN CLR ACCUM - 1997 003574 323 105 OUT A2027 ;AND CLR THE REST OF THE HARDWARE ADDRESS REGISTER - 1998 003576 323 107 OUT A1219 - 1999 003600 323 106 OUT W1219 ;CLEAR PIECES OF DEPOSIT DATA WHICH MUST BE ZERO - 2000 003602 323 110 OUT W0411 - 2001 003604 323 112 OUT W0003 - 2002 - 2003 003606 076 002 MVI A,02 ;BIT TO SAY "WRITE FUNCTION" - 2004 003610 323 113 OUT A0003 ;***** I/O WRT 113 ***** - 2005 - 2006 ;THE FOLLOWING "ADD A" WORKS BY LUCK..I.E. 2+2=4 - 2007 003612 207 ADD A ;BIT INTO ACCUM FOR "COM/ADR CYCLE" - 2008 003613 323 115 OUT BUSARB ;***** I/O WRT 115/4 ***** - 2009 - 2010 003615 072 035 040 LDA CHRBUF ;NOW GET THE CHARACTER WE WANT - 2011 003620 323 102 OUT W2835 ;PUT IT IN THE HARDWARE REGISTER - 2012 003622 076 001 MVI A,1 ;AND GET THE VALID BIT TO GO WITH THE CHARACTER - 2013 003624 323 104 OUT W2027 ;PUT IT IN THE HARDWARE REGISTER - 2014 - 2015 ;AND BY LUCK, THE ACCUM HAS JUST WHAT WE NEED FOR THE NEXT STEP - 2016 003626 323 114 OUT DTARB ;***** I/O WRT 114/1 ***** - 2017 - 2018 003630 076 360 MVI A,^O360 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" - 2019 ;"T ENB FOR DATA CYCLE" - 2020 003632 323 210 OUT BUSCTL ;*****I/O WRT 210/360 ***** - 2021 - 2022 ;DO THIS TWICE TO GUARANTEE THAT THE INTERRUPT HAPPENS - 2023 003634 076 001 MVI A,1 ;BIT FOR SETTING INTERRUPT TO THE KS10 - 2024 003636 323 116 OUT INT2KS ;SET THE INTERRUPT - 2025 003640 323 116 OUT INT2KS ;SET THE INTERRUPT - 2026 - 2027 003642 311 RET ;AND EXIT NORMALLY.... - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-59 -HCORE.M80 **8080 TO KS10 CHARACTER SERVICE** - - 2029 ;ENTER HERE WITH THE CHAR IN THE ACCUM - 2030 .SBTTL **KS10 TO 8080 CHARACTER SERVICE** - 2031 ;ROUTINE FOR HANDLING INTERRUPT CHARACTERS FROM A RUNNING KS10. - 2032 ;ONLY CHARS FROM KS TO CTY IMPLEMENTED - 2033 003643 CHRRDY: INTON ;SET UP INTERNAL MODE - (1) 003643 327 RST 2 ;GO SET INTERNAL MODE - 2034 003644 363 DI ;COMMON CODE,NOT TO BE DISTURBED - 2035 - 2036 ;DISABLE INTERRUPTS FOR THIS OPERATION - 2037 003645 072 355 040 LDA TRAPEN ;GET DEFAULT FOR THE TRAP ENABLE BITS - 2038 003650 323 205 OUT DIAG ;*****I/O WRT/ TO CLR THE INTERRUPT***** - 2039 - 2040 ;FALL TO HERE IF YES WE ARE IN KLINIK MODE 2.. ITS POSSIBLE THAT THIS INTERRUPT - 2041 ;IS FROM THE KLINIK COMM WORD, FOR THE KLINIK LINE - 2042 003652 EXAM 35 ;EXAM THE KLINIK COMM WORD - (1) 003652 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 003655 035 000 .ADDR 35 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 2043 003657 INTOFF ;KEEP THIS FLAG IN STEP - (1) 003657 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 2044 003660 072 013 040 LDA EMBUF+1 ;GRAB THE CONTENTS OF THE BYTE WITH THE CONTROL KEY - 2045 003663 247 ANA A ;SET 8080 FLAGS - 2046 003664 312 341 007 JZ CTYONLY ;IF CONTROL KEY CLEAR, NOTHING FROM KLINIK, TRY CTY - 2047 - 2048 003667 107 MOV B,A ;SAVE THE DATA IN THE ACCUM FOR A LITTLE WHILE - 2049 003670 072 247 040 LDA CSLMODE ;GET CURRENT MODE..DECIDE IF MUST THROW AWAY CHARS, OR - 2050 003673 346 013 ANI .MODE0!.MODE1!.MODE3 ; JUST ACT AS A NULL BIT BUCKET - 2051 003675 302 334 007 JNZ NULKL ;JUMP TO A NULL ACTION IF ANY OF THESE 3 MODES - 2052 - 2053 ;NOW HERE IF CONTROL KEY IS .NE. 0 - 2054 003700 170 MOV A,B ;RETRIEVE DATA - 2055 003701 376 001 CPI 1 ;IS IT THE KEY FOR A SIMPLE CHARACTER TO BE OUTPUT?? - 2056 003703 312 320 007 JZ KLPCHR ;IF YES, GO PROCESS THE CHARACTER - 2057 - 2058 003706 376 002 CPI 2 ;IS IT FOR A HANGUP - 2059 003710 302 070 010 JNZ NOACTN ;NOPE, IGNORE ENTIRELY - 2060 - 2061 003713 315 134 034 CALL HANGUP ;YUP, HANG 'EM UP - 2062 003716 373 EI ;IDENTICAL CODE TO LOCATION "NOACTN", BUT THE 2 BYTES - 2063 003717 311 RET ; HERE ARE CHEAPER THAN A "JMP"..I'M OUT OF PROM SPACE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-60 -HCORE.M80 **KS10 TO 8080 CHARACTER SERVICE** - - 2065 ;CODE FOR PRINTING THE DESIRED CHARACTER ON THE KLINIK LINE - 2066 003720 KLPCHR: TSTRDY REMCTL ;SEE IF THE LINE IS READY FOR THE NEXT CHARACTER - (1) 003720 333 203 IN REMCTL ;READ DESIRED UART STATUS - (1) 003722 346 001 ANI 01 ;CHECK IF SET; ZBIT=0 IF READY; ZBIT=1 IF NOT YET READY - 2067 003724 312 320 007 JZ KLPCHR ;IF NOT READY YET, BETTER WAIT LONGER - 2068 - 2069 ;HERE WHEN READY - 2070 003727 072 012 040 LDA EMBUF ;GET THE CHARACTER - 2071 003732 323 202 OUT REMDAT ;PRINT IT - 2072 003734 076 035 NULKL: MVI A,^O35 ;NOW MUST CLEAR THE WORD, AND INTERRUPT TO SAY DONE - 2073 003736 303 022 010 JMP TTOCOM ;GO COMMON CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-61 -HCORE.M80 **KS10 TO 8080 CHARACTER SERVICE** - - 2075 003741 CTYONLY: INTON ;DON'T PRINT THIS CRUD - (1) 003741 327 RST 2 ;GO SET INTERNAL MODE - 2076 003742 EXAM 33 ;GET THE COMMUNICATION WORD - (1) 003742 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 003745 033 000 .ADDR 33 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 2077 003747 INTOFF ;INTERNAL MODE OFF - (1) 003747 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 2078 003750 072 013 040 LDA EMBUF+1 ;GET THE INTERRUPT CODE - 2079 003753 376 001 CPI 1 ;IS INTERRUPT CODE .EQ. 1?? - 2080 003755 302 070 010 JNZ NOACTN ;JUMP TO "NO ACTION" IF NOT, CODE OUT OF BOUNDS - 2081 - 2082 003760 072 012 040 LDA EMBUF ;ACTUAL CHAR TO ACCUM - 2083 003763 107 MOV B,A ;AND SAVE IT IN THE B REG - 2084 - 2085 ;CODE TO PRINT A CHAR PASSED FROM THE KS-10 CPU. CODE INTERRUPTS - 2086 ;THE 10 WHEN THE CHARACTER HAS FINISHED PRINTING - 2087 003764 CTYPCHR: TSTRDY CTYCTL ;CHECK IS THE XMITTER READY?? - (1) 003764 333 201 IN CTYCTL ;READ DESIRED UART STATUS - (1) 003766 346 001 ANI 01 ;CHECK IF SET; ZBIT=0 IF READY; ZBIT=1 IF NOT YET READY - 2088 003770 312 364 007 JZ CTYPCHR ;LOOP UNTIL IT IS - 2089 - 2090 ;FALL THRU WHEN READY - 2091 ;BUT BEFORE PRINTING, CHECK THE KLINIK LINE TO SEE IF IT GETS THE - 2092 ;CHARACTER TOO - 2093 003773 072 247 040 LDA CSLMODE ;CHECK THE KLINIK MODE - 2094 003776 376 010 CPI .MODE3 ;IS THE KLINIK PARALLEL TO THE CTY LINE?? - 2095 004000 302 015 010 JNZ CTYOUT ;JUMP IF NO. KLINIK DOES NOT GET THIS CHARACTER - 2096 - 2097 ;FALL HERE IF YES, KLINIK LINE GETS A PIECE OF THIS CHARACTER TOO. - 2098 004003 KLTOO: TSTRDY REMCTL ;SEE IF KLINIK LINE IS READY - (1) 004003 333 203 IN REMCTL ;READ DESIRED UART STATUS - (1) 004005 346 001 ANI 01 ;CHECK IF SET; ZBIT=0 IF READY; ZBIT=1 IF NOT YET READY - 2099 004007 312 003 010 JZ KLTOO ;IF NOT YET, GO BACK AND TRY AGAIN - 2100 - 2101 004012 170 MOV A,B ;CHAR TO ACCUM - 2102 004013 323 202 OUT REMDAT ;PRINT IT ON THE KLINIK LINE - 2103 - 2104 004015 170 CTYOUT: MOV A,B ;GET THE CHAR WE SAVED IN THE B REG. - 2105 004016 323 200 OUT CTYDAT ;SEND TO THE UART - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-62 -HCORE.M80 **KS10 TO 8080 CHARACTER SERVICE** - - 2107 ;NOW CLEAR A DATA BUFFER FOR DEPOSITING 0'S INTO THE MOS MEMORY - 2108 ;WE ARE USING IN LINE CODE HERE IN ORDER TO SPEED UP THE TYPE-OUT - 2109 ;ON KS10 TO 8080 XFER'S.. - 2110 - 2111 004020 076 033 MVI A,^O33 ;THIS IS THE ADDRESS WE WISH TO DEPOSIT - 2112 004022 323 103 TTOCOM: OUT A2835 ;PUT IT INTO THE HARDWARE REGISTER - 2113 004024 257 XRA A ;CLEAR ACCUM, BECAUSE THE REST OF THE ADDR MUST BE ZERO - 2114 004025 323 105 OUT A2027 ;CLR THE OTHER HARDWARE REGISTERS - 2115 004027 323 107 OUT A1219 - 2116 004031 323 102 OUT W2835 ;AND WE WILL MAKE ALL OF THE HARDWARE DATA REGS 0 - 2117 004033 323 104 OUT W2027 - 2118 004035 323 106 OUT W1219 - 2119 004037 323 110 OUT W0411 - 2120 004041 323 112 OUT W0003 - 2121 - 2122 004043 076 002 MVI A,02 ;BIT TO SAY "WRITE FUNCTION" - 2123 004045 323 113 OUT A0003 ;***** I/O WRT 113 ***** - 2124 - 2125 ;THIS "ADD A" WORKS BY LUCK..I.E. 2+2=4 - 2126 004047 207 ADD A ;BIT INTO ACCUM FOR "COM/ADR CYCLE" - 2127 004050 323 115 OUT BUSARB ;***** I/O WRT 115/4 ***** - 2128 - 2129 004052 076 001 MVI A,1 ;BIT INTO ACCUM FOR "DATA CYCLE" - 2130 004054 323 114 OUT DTARB ;***** I/O WRT 114/1 ***** - 2131 - 2132 004056 076 360 MVI A,^O360 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" - 2133 ;"T ENB FOR DATA CYCLE" - 2134 004060 323 210 OUT BUSCTL ;*****I/O WRT 210/360 ***** - 2135 - 2136 - 2137 ;DO THIS TWICE TO GUARANTEE THE INTERRUTP GETS THRU - 2138 004062 076 001 POKE10: MVI A,1 ;BIT FOR SETTING INTERRUPT TO THE KS10 - 2139 004064 323 116 OUT INT2KS ;SET THE INTERRUPT - 2140 004066 323 116 OUT INT2KS ;SET THE INTERRUPT - 2141 004070 373 NOACTN: EI ;OK FOR INTERRUPTS NOW - 2142 004071 311 RET ;AND OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-63 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2144 .SBTTL **TTY HANDLER FOR SPECIAL CHARACTERS** - 2145 ;WHEN HERE, "B" REG CONTAINS THE STATUS OF THE CTY LINE - 2146 004072 170 TTERR: MOV A,B ;COPY CTY STATUS TO ACCUM - 2147 004073 346 070 ANI ^O70 ;ANY ERRS IN THE CTY UART?? - 2148 004075 302 114 010 JNZ TTERR1 ;IF YES, GO CHECK THINGS ON THE CTY LINE - 2149 - 2150 ;HERE IF GOT KLINIK ERRORS - 2151 004100 076 025 MVI A,^O25 ;BEFORE JUMPING, RESET THE UART SO IT WILL WORK - 2152 004102 323 203 OUT REMCTL ;I/O WRITE TO RESET THE UART - 2153 - 2154 004104 072 156 040 LDA USRMD ;CHECK USER MODE.. WILL NOT REPORT ERR IF IT IS - 2155 004107 247 ANA A ;SET FLAGS - 2156 004110 302 341 005 JNZ INTCH ;IF WAS USER MODE, IGNORE OVERRUN AND HANDLE CHARACTER - 2157 004113 311 RET ;DONE INT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-64 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2159 004114 346 050 TTERR1: ANI ^O50 ;SEE IF OVERRRUN OR A FATAL ERROR - 2160 - 2161 ;NOW MUST CLR ERROR FROM THE UART FIRST - 2162 004116 076 025 MVI A,^O25 ;BITS TO CLR ERROR CONDITIONS IN UART - 2163 004120 323 201 OUT CTYCTL ;*****I/O WRT 200/25 ***** - 2164 004122 302 134 010 JNZ TTERMS ;NOW JUMP IF FATAL - 2165 - 2166 004125 072 156 040 LDA USRMD ;BEFORE ISSUEING MESSAGE,IS USER MODE SET?? - 2167 004130 267 ORA A ;TEST USER MODE FLAG - 2168 004131 302 341 005 JNZ INTCH ;IF YES, USER MODE, THEN IGNORE THE ERROR - 2169 - 2170 ;NOW MUST CLR OVERRUN ERROR FROM THE UART - 2171 004134 041 247 040 TTERMS: LXI H,CSLMODE ;GET CURRENT MODE OF KLINIK - 2172 004137 116 MOV C,M ;SAVE IT IN C - 2173 004140 066 000 MVI M,0 ;NOW CLEAR CSL MODE - 2174 004142 345 PUSH H ;AND SAVE "H,L" - 2175 004143 PLINE TTM ;OUTPUT THE ERROR MESSAGE - (1) 004143 337 RST 3 ;PRINT LINE OF CHARS - (1) 004144 034 037 .ADDR TTM ;BUFF TO PRINT - 2176 004146 341 POP H ;AND RESTORE MEM POINTER - 2177 004147 161 MOV M,C ;REPLACE CSL MODE AND GET OUT - 2178 004150 311 RET ;AND RESTART NULL LOOP - 2179 - 2180 004151 061 000 044 CNTC: LXI SP,RAMST+^O2000 ;GUARANTEE THAT CNTRL-C WINS - 2181 004154 PCHAR UPARR - (1) 004154 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 004155 136 .BYTE UPARR ;CHAR TO PRINT - 2182 004156 PCHAR CCHR - (1) 004156 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 004157 103 .BYTE CCHR ;CHAR TO PRINT - 2183 004160 303 255 001 JMP REINI ;JUMP AWAY - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-65 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2185 ;LOCAL SUBROUTINE TO RESET TTY INPUT BUFFER - 2186 004163 041 114 041 BFRST: LXI H,BUFBG ;BUFFER BEGINNING - 2187 004166 042 215 040 SHLD BUF. ;RESET CURRENT BUFFER POINTER - 2188 004171 042 227 040 SHLD FIRST ;RESET CMD POINTER - 2189 004174 CLRB RPEND ;CLEAR REPEAT KILLER - 2190 004176 CLRB CMDS.. ;SAY LINE IS DONE.. AT BEGINNING OF THINGS - 2191 004200 CLRB BFCNT ;CLEAR CHAR COUNT - 2192 004202 311 RET ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-66 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2194 ;THIS IS THE INITIAL MODE OF THE KLINIK LINE AFTER A POWER UP. ALSO, WHEN - 2195 ;THE KLINIK LINE IS DISABLED, OR IN "PROTECT" MODE, BUT NO PASSWORD HAS - 2196 ;BEEN SET BY THE OPERATOR - 2197 004203 376 007 MODE0: CPI BELL ;NO ECHO IF RECEIVE BELL - 2198 004205 310 RZ ;BELL, SO OUT - 2199 004206 KLINE NOACCS ;PRINT A MESSAGE FOR THE KLINIK LINE ONLY - (1) 004206 315 137 004 CALL KLINE ;PRINT LINE OF CHARS - (1) 004211 351 037 .ADDR NOACCS ;BUFF TO PRINT - 2200 004213 311 RET ;AND NORMAL EXIT FROM THE INTERRUPT - 2201 - 2202 - 2203 - 2204 ;THIS IS KLINIK MODE 1. THIS IS THE MODE OF THE KLINIK LINE WHENEVER - 2205 ;THE FRONT PANEL SWITCH IS IN THE PROTECT POSITION, AND WE ARE WAITING - 2206 ;FOR THE PASSWORD TO BE ENTERED. - 2207 004214 MODE1: KLINE QPW ;BEGIN BY PRINTING "PW:" - (1) 004214 315 137 004 CALL KLINE ;PRINT LINE OF CHARS - (1) 004217 357 037 .ADDR QPW ;BUFF TO PRINT - 2208 004221 041 271 040 LXI H,KPWBUF ;INITIALIZE THE BUFFER FOR SAVING TYPED PASSWORD - 2209 004224 042 125 040 SHLD KPWPNT ;SAVE IN THE BUFFER POINTER - 2210 - 2211 004227 CLRB KPWCNT ;AND CLEAR THE PASSWORD CHARACTER COUNTER - 2212 - 2213 004231 041 240 010 LXI H,PW.WAIT ;NOW ADDITIONAL KLINIK CHARS MUST DISPATCH TO - 2214 004234 042 346 040 SHLD MODDIS ; THE PLACE THAT WAITS FOR A COMPLETE PASSWORD - 2215 004237 311 RET ;END OF INTERRUPT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-67 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2217 ;THIS IS THE ENTRY POINT WHEN THE PERSON IS IN THE PROCESS OF TYPING THE - 2218 ;PASSWORD. WE STORE THE PASSWORD AS IT IS TYPED, THEN WHEN DONE, WE WILL - 2219 ;VERIFY THAT IT IS CORRECT - 2220 004240 376 015 PW.WAIT: CPI CRCHR ;IS IT AN END OF LINE CHARACTER - 2221 004242 312 276 010 JZ PW.TST ;JUMP IF YES.. TIME TO VERIFY THE PASSWORD - 2222 - 2223 004245 315 220 006 CALL UP.LO ;GENERATE ONLY UPPER CASE FOR PROGRAM INTERNALS - 2224 004250 107 MOV B,A ;SAVE THE CHAR IN B REG FOR A LITTLE BIT - 2225 - 2226 ;IF NOT END OF LINE, JUST ADD IT TO THE BUFFER OF CHARS THAT IS THE PASSWORD - 2227 004251 072 127 040 LDA KPWCNT ;FIRST THINGS FIRST, SEE HOW MANY CHARS IN THE BUFFER - 2228 004254 074 INR A ;UPDATE TO ACCOUNT FOR THIS ONE - 2229 004255 376 007 CPI 7 ;IS IT TOO MANY - 2230 004257 312 334 010 JZ PW.ERR ;JUMP IF YES. ITS A PASSWORD ERROR - 2231 004262 062 127 040 STA KPWCNT ;ELSE SAVE THE UPDATED COUNT AND CONTINUE - 2232 - 2233 004265 052 125 040 LHLD KPWPNT ;GET THE BUFFER POINTER - 2234 004270 160 MOV M,B ;PUT THE CHARACTER IN THE BUFFER - 2235 004271 043 INX H ;UPDATE THE BUFFER POINTER - 2236 004272 042 125 040 SHLD KPWPNT ;PUT THE POINTER BACK - 2237 004275 311 RET ;AND END OF INTERRUPT - 2238 - 2239 ;CODE FOR VERIFYING THAT THE PASSWORD ENTERED IS THE CORRECT AND VALID - 2240 ;PASSWORD - 2241 004276 021 262 040 PW.TST: LXI D,PASSWORD ;D,E POINTS TO THE EXPECTED PASSWORD - 2242 004301 041 271 040 LXI H,KPWBUF ;H,L POINTS TO THE TYPED IN BUFFER - 2243 004304 006 000 MVI B,00 ;"B" WILL BE THE COUNTER - 2244 - 2245 004306 032 PW..: LDAX D ;FETCH UP AN EXPECTED CHARACTER - 2246 004307 247 ANA A ;SET THE FLAGS - 2247 004310 312 325 010 JZ PW.END ;IF "END", GO MAKE SURE TYPEIN IS TERMINATED - 2248 - 2249 004313 004 INR B ;ELSE UPDATE OUR COUNTER - 2250 004314 276 CMP M ;AND COMPARE A CHAR - 2251 004315 302 334 010 JNZ PW.ERR ;IF MIS-COMPARE REPORT IT AS ERROR - 2252 - 2253 004320 023 INX D ;UPDATE EXPECTED POINTER - 2254 004321 043 INX H ;UPDATE TYPED IN POINTER - 2255 004322 303 306 010 JMP PW.. ;CONTINUE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-68 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2257 ;END.. THIS IS ONLY TO VERIFY THAT TYPED TERMINATED AT THE SAME NUMBER OF - 2258 ;CHARACTERS AS EXPECTED - 2259 004325 072 127 040 PW.END: LDA KPWCNT ;GET EXPECTED COUNT - 2260 004330 270 CMP B ;CHECK AGAINST THE CURRENT COUNT - 2261 004331 312 356 010 JZ PW.OK ;AND JUMP IF COUNTS MATCH - 2262 - 2263 ;FALL THRU TO ERROR IF CHARACTER COUNTS DON'T MATCH - 2264 004334 PW.ERR: KLINE CMDNG ;GIVE USER AN ERROR MESSAGE - (1) 004334 315 137 004 CALL KLINE ;PRINT LINE OF CHARS - (1) 004337 026 037 .ADDR CMDNG ;BUFF TO PRINT - 2265 004341 041 277 040 LXI H,PWRTRY ;HAD ERROR. ONLY GET 3 CHANCES FOR ERRORS - 2266 004344 064 INR M ;UPDATE ERROR COUNT - 2267 004345 176 MOV A,M ;PLACE COUNT IN ACCUM FOR A TEST - 2268 004346 376 003 CPI 3 ;SEE IF STRUCK OUT - 2269 004350 312 374 010 JZ KLIRST ;GO RESET KLINIK LINE IF USER STRUCK OUT - 2270 - 2271 004353 303 214 010 JMP MODE1 ;ELSE GIVE HIM "PW:" MESSAGE AGAIN - 2272 - 2273 ;HERE IF EVERYTHING MATCHED - 2274 004356 315 103 034 PW.OK: CALL SETM2 ;CHANGE LINE TO MODE 2 - 2275 004361 KCHAR 'O ;WHEN GOOD PW, SENT OUT AN "OK" - (1) 004361 315 117 004 CALL KCHR ;GO PRINT THE CHARACTER - (1) 004364 117 .BYTE 'O - 2276 004365 KCHAR 'K - (1) 004365 315 117 004 CALL KCHR ;GO PRINT THE CHARACTER - (1) 004370 113 .BYTE 'K - 2277 004371 PW.OUT: CLRB PWRTRY ;CLEAR ERROR COUNTER - 2278 004373 311 RET ;EXIT - 2279 - 2280 ;KLINIK LINE RESET CODE. FOR RESETING KLINIK LINE AND HANGING UP THE USER - 2281 004374 315 134 034 KLIRST: CALL HANGUP ;GO HANG UP THE KLINIK LINE - 2282 004377 315 012 034 CALL SETM1 ;DROP BACK TO MODE 1 - 2283 004402 303 371 010 JMP PW.OUT ;ZAP ERROR FLAG THEN OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-69 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2285 ;KLINIK LINE MODE 2. THIS IS STREAM INPUT/OUTPUT. ALL CHARACTERS FROM - 2286 ;THE KLINIK UART ARE SENT TO THE SPECIAL KLINIK COMMUNICATION WORDS - 2287 ;AND ALL WORDS FROM THE KLINIK COMM WORDS ARE OUTPUT TO THE KLINIK LINE. - 2288 004405 376 034 MODE2: CPI CNBCK ;FIRST SEE IF THE KLINIK USER WANTS A MODE CHANGE - 2289 004407 302 035 011 JNZ KL3435 ;IF NOT, GO SEND INFO TO THE KLINIK COMM WORD - 2290 - 2291 004412 072 251 040 LDA MMFLG ;BEFORE GOING TO MODE 3, SEE IF MM MODE - 2292 004415 247 ANA A ;SET 8080 FLAGS - 2293 004416 302 310 006 JNZ END.USR ;IF YES, MM MODE, ACT LIKE FROM A CTY - 2294 - 2295 ;FALL THRU IF WANTS TO CHANGE MODES. BUT BEFORE CHANGING, CHECK IF HE'S - 2296 ;ALLOWED TO CHANGE MODES. - 2297 004421 072 300 040 LDA KLLINE.ON ;CHECK IF KLINIK IS ON, & USER IS ALLOWED TO CHANGE - 2298 004424 247 ANA A ;SET FLAGS - 2299 004425 310 RZ ;IF NOT ENABLED TO CHANGE, JUST IGNORE THIS INTERRUPT - 2300 - 2301 ;WELL, HE IS ALLOWED TO CHANGE. SEE IF THE FRONT PANEL SWITCH IS UNLOCKED - 2302 004426 333 301 IN BOOTSW ;***** I/O RD 301 ***** - 2303 ;NOTE THAT BIT LO IS TRUTH, IF BIT HI IS FALSE(DISABLED) - 2304 004430 346 004 ANI 4 ;CHECK THE CONSOLE ENABLE BIT - 2305 004432 312 042 034 JZ SETM3 ;GO MODE 3 ONLY IF PANEL NOT LOCKED.LET SETM3 DO "RET" - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-70 -HCORE.M80 **TTY HANDLER FOR SPECIAL CHARACTERS** - - 2307 ;THIS IS WHERE YOU ACTUALLY WRITE THE DESIRED CHARACTER INTO THE KLINIK - 2308 ;LINE COMMUNICATION WORD - 2309 004435 KL3435: - 2310 004435 062 035 040 STA CHRBUF ;PUT CHARACTER IN A RAM BUFFER - 2311 004440 076 034 MVI A,^O34 ;DESIRED ADDRESS FOR DEPOSTING CHARACTER - 2312 - 2313 004442 323 103 OUT A2835 ;WRITE ONLY RELEVANT PIECE OF THE ADDRESS - 2314 004444 257 XRA A ;THEN CLR ACCUM - 2315 004445 323 105 OUT A2027 ;AND CLR THE REST OF THE HARDWARE ADDRESS REGISTER - 2316 004447 323 107 OUT A1219 - 2317 004451 323 106 OUT W1219 ;CLEAR PIECES OF DEPOSIT DATA WHICH MUST BE ZERO - 2318 004453 323 110 OUT W0411 - 2319 004455 323 112 OUT W0003 - 2320 - 2321 004457 076 002 MVI A,02 ;BIT TO SAY "WRITE FUNCTION" - 2322 004461 323 113 OUT A0003 ;***** I/O WRT 113 ***** - 2323 - 2324 ;THE FOLLOWING "ADD A" WORKS BY LUCK..I.E. 2+2=4 - 2325 004463 207 ADD A ;BIT INTO ACCUM FOR "COM/ADR CYCLE" - 2326 004464 323 115 OUT BUSARB ;***** I/O WRT 115/4 ***** - 2327 - 2328 004466 072 035 040 LDA CHRBUF ;NOW GET THE CHARACTER WE WANT - 2329 004471 323 102 OUT W2835 ;PUT IT IN THE HARDWARE REGISTER - 2330 004473 076 001 MVI A,1 ;AND GET THE VALID BIT TO GO WITH THE CHARACTER - 2331 004475 323 104 OUT W2027 ;PUT IT IN THE HARDWARE REGISTER - 2332 - 2333 ;AND BY LUCK, THE ACCUM HAS JUST WHAT WE NEED FOR THE NEXT STEP - 2334 004477 323 114 OUT DTARB ;***** I/O WRT 114/1 ***** - 2335 - 2336 004501 076 360 MVI A,^O360 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" - 2337 ;"T ENB FOR DATA CYCLE" - 2338 004503 323 210 OUT BUSCTL ;*****I/O WRT 210/360 ***** - 2339 - 2340 ;DO THIS TWICE TO GUARANTEE THAT THE INTERRUPT HAPPENS - 2341 004505 076 001 MVI A,1 ;BIT FOR SETTING INTERRUPT TO THE KS10 - 2342 004507 323 116 OUT INT2KS ;SET THE INTERRUPT - 2343 004511 323 116 OUT INT2KS ;SET THE INTERRUPT - 2344 - 2345 004513 311 RET ;AND EXIT NORMALLY.... - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-71 -CMDS.M80 **** CONSOLE COMMANDS AS IMPLIMENTED **** - - 2347 .SBTTL **** CONSOLE COMMANDS AS IMPLIMENTED **** - 2348 .SBTTL *** "EB" CMD *** - 2349 ;THIS CODE PERFORMS THE "EXAMINE BUS" CONSOLE FUNCTION. - 2350 004514 076 001 EBCMD: MVI A,01 ;FIRST CLR "R CLK ENB" - 2351 004516 323 210 OUT BUSCTL ;***** I/O WRT 210/001 ***** - 2352 004520 315 105 033 CALL RDATT ;***** I/O RD "0,1,2,3,103" (READ BITS 0-35) ***** - 2353 004523 012 040 .ADDR EMBUF ;PLACE BITS 0-35 INTO RAM BUFFER AREA "EMBUF" - 2354 - 2355 ;READ THE REST OF THE I/O REGISTERS AND SAVE IN THE RAM - 2356 004525 041 172 040 LXI H,RM100 ;GET BEGINNING ADDRESS OF RAM BUFFER AREA - 2357 004530 021 231 011 LXI D,IORGS ;D,E WILL POINT TO SOURCE OF REGS TO BE READ - 2358 004533 006 010 MVI B,8 ;THERE ARE 8 REGISTERS TO BE READ - 2359 - 2360 004535 032 EB.RDIN: LDAX D ;FETCH UP FIRST REGISTER TO BE READ - 2361 004536 315 270 013 CALL ER.UTL ;CALL ER COMMAND - 2362 004541 167 MOV M,A ;COPY RESULTS OF READ INTO THE RAM SPACE - 2363 004542 023 INX D ;UPDATE SOURCE POINTER - 2364 004543 043 INX H ;UPDATE DESTINATION POINTER - 2365 004544 005 DCR B ;DOWN THE COUNTER - 2366 004545 362 135 011 JP EB.RDIN ;CONTINUE LOOP - 2367 - 2368 004550 257 XRA A ;CLR ACCUM MUST SET "R CLK ENB" - 2369 004551 323 210 OUT BUSCTL ;***** I/O WRT 210/0 ***** - 2370 - 2371 004553 PLINE EBHED ;EB CMD HEADER MSG - (1) 004553 337 RST 3 ;PRINT LINE OF CHARS - (1) 004554 041 037 .ADDR EBHED ;BUFF TO PRINT - 2372 004556 315 205 034 CALL DECNET ;PRINT THE HEADING - 2373 004561 315 362 030 CALL P36. ;GO PRINT IT - 2374 004564 PCRLF ;AND A - (2) 004564 347 RST 4 - (2) 004565 002 .BYTE 2 - 2375 004566 315 205 034 CALL DECNET ;AND MAKE SURE THIS GETS SENT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-72 -CMDS.M80 *** "EB" CMD *** - - 2377 004571 041 231 011 LXI H,IORGS ;"H,L" NOW PNTS TO LIST OF I/O REGISTER NAMES - 2378 004574 021 172 040 LXI D,RM100 ;"D,E" NOW PNTS TO CORRESPONDING LIST OF DATA FOR I/O REG - 2379 004577 006 010 MVI B,8 ;ACCUM NOW CONTAINS A COUNT OF 8 (FOR 8 I/O REGS) - 2380 - 2381 004601 315 267 030 EB1: CALL P8BIT ;PRINT FIRST REG NAME - 2382 004604 043 INX H ;BUMP TO NEXT - 2383 004605 PSLASH ;PRINT "1" - (2) 004605 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 004606 057 .BYTE SLASH ;CHAR TO PRINT - 2384 004607 353 XCHG ;SWAP SO "H,L" POINTS TO DATA - 2385 - 2386 004610 315 267 030 CALL P8BIT ;PRINT DATA FOR THAT REG - 2387 004613 043 INX H ;BUMP TO NEXT - 2388 004614 353 XCHG ;SWAP BACK-"H,L" POINTS TO NAME AGAIN - 2389 004615 PSPACE ;SPACE OVER - (2) 004615 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 004616 040 .BYTE SPACE ;CHAR TO PRINT - 2390 004617 005 DCR B ;DOWN COUNT - 2391 004620 302 201 011 JNZ EB1 ;CONTINUE TILL DONE ALL EIGHT REGS - 2392 004623 PCRLF - (2) 004623 347 RST 4 - (2) 004624 002 .BYTE 2 - 2393 004625 315 205 034 CALL DECNET ;AND FINALLY MAKE SURE LAST THING GETS SENT - 2394 004630 ENDCMD ;END-OF-COMMAND - (1) 004630 311 RET ;RETURN TO CALLER - 2395 - 2396 ;END THIS CODE WITH A 6 BYTE BUFFER OF THE I/O REGS NAMES, IN BINARY - 2397 004631 100 IORGS: .BYTE ^O100 ;FIRST REG NAME IN BINARY - 2398 004632 101 .BYTE ^O101 ;2ND - 2399 004633 102 .BYTE ^O102 ;3RD - 2400 004634 103 .BYTE ^O103 ;4TH - 2401 004635 300 .BYTE ^O300 ;5TH - 2402 004636 301 .BYTE ^O301 ;6TH - 2403 004637 302 .BYTE ^O302 ;7TH - 2404 004640 303 .BYTE ^O303 ;8TH - 2405 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-73 -CMDS.M80 *** "DB" CMD *** - - 2407 .SBTTL *** "DB" CMD *** - 2408 ;THIS CODE PERFORMS THE "DEPOSIT BUS" CONSOLE FUNCTION - 2409 004641 DBCMD: RUN.. ;IS CPU RUNNING?? - (1) 004641 347 RST 4 - (1) 004642 006 .BYTE 6 - 2410 004643 332 252 011 JC DB1 ;SKIP CODE IF AT END OF COMMAND - 2411 004646 ARG36 ;IF NOT, GO ASSEMBLE ARG. - (1) 004646 347 RST 4 - (1) 004647 010 .BYTE 8 - 2412 004650 042 040 .ADDR BUSAD ;AND PUT INTO BUFFER "BUS AD" - 2413 - 2414 004652 315 202 033 DB1: CALL ADATT ;***** I/O WRT TO R DATA 0-35 DATA REG(ODDS) ***** - 2415 004655 042 040 .ADDR BUSAD ;BUFFER ADDRESS OF SOURCE OF DATA - 2416 - 2417 004657 257 XRA A ;CLR ACCUM SO CAN CLR I/O REG 115 - 2418 004660 323 115 OUT BUSARB ;***** I/O WRT 115/0 ***** - 2419 - 2420 004662 076 141 MVI A,^O141 ;BITS TO SET "CONSOLE REQ" & "T ENB FOR COM/ADR" - 2421 004664 323 210 OUT BUSCTL ;***** I/O WRT 210/141 ***** - 2422 - 2423 004666 BUSRESP ARBRESP ;***** I/O READ 301 ***** - (1) 004666 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 004671 020 .BYTE ARBRESP ;BITS TO BE CHECKED - 2424 004672 302 022 036 JNZ NOARB ;IF NO ARB RESPONSE WITH "BUS REQ", ABORT - 2425 - 2426 004675 315 354 011 CALL DBRDIN ;GO READ RESULTS, AND DO A 36-BIT COMPARE - 2427 004700 302 371 011 JNZ DBERR ;IF "Z-BIT" NOT SET REPORT MISCOMPARE & ABORT - 2428 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-74 -CMDS.M80 *** "DB" CMD *** - - 2430 ;SECOND HALF OF COMMAND - 2431 004703 315 202 033 CALL ADATT ;CLR OUT OLD CRUD - 2432 004706 004 017 .ADDR MAD000 ;WITH ALL ZEROES - 2433 - 2434 004710 315 147 033 CALL WDATT ;***** I/O WRT DATA 0-35 ADDR REG(EVENS) ***** - 2435 004713 042 040 .ADDR BUSAD ;BUFFER ADDRESS OF SOURCE OF DATA - 2436 - 2437 004715 076 001 MVI A,01 ;BITS TO SET "DATA CYCLE" - 2438 004717 323 114 OUT ^O114 ;***** I/O WRT 114/1 ***** - 2439 - 2440 004721 076 363 MVI A,^O363 ;BITS FOR "CONSOLE REQ", "TENB FOR COM/AD R" - 2441 ;"T ENB FOR DATA CYCLE","LATCH DATA SENT" - 2442 004723 323 210 OUT BUSCTL ;***** I/O WRT 210/363 ***** - 2443 - 2444 004725 BUSRESP ARBRESP ;***** I/O RD 301 ***** - (1) 004725 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 004730 020 .BYTE ARBRESP ;BITS TO BE CHECKED - 2445 - 2446 004731 302 022 036 JNZ NOARB ;IF NO ARB RESP, ABORT WITH 2ND HALF MESSAGE - 2447 - 2448 004734 BUSRESP DATACK ;HOW ABOUT DATA ACKNOWLEDGE?? - (1) 004734 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 004737 001 .BYTE DATACK ;BITS TO BE CHECKED - 2449 004740 312 010 036 JZ NOACK ;JUMP IF NONE - 2450 - 2451 004743 315 354 011 CALL DBRDIN ;GO READ IN RESULTS AND COMPARE RESULT - 2452 004746 310 RZ ;IF Z-BIT, THEN OK TO EXIT - 2453 - 2454 ;ELSE FALL INTO THIS CODE IF A MISCOMPARE - 2455 004747 PCHAR DCHR ;PRINT "D" - (1) 004747 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 004750 104 .BYTE DCHR ;CHAR TO PRINT - 2456 004751 303 373 011 JMP DBCOM ;AND NOW THE ERR FINISHES UP LIKE THE 1ST HALF - 2457 - 2458 ;COMMON SUBROUTINE TO READ IN THE CONTENTS OF THE KS10 BUS & COMPARE AGAINST - 2459 ;THE DATA WHICH WAS PUT ONTO THE BUS - 2460 004754 315 105 033 DBRDIN: CALL RDATT ;***** I/O RD 0,1,2,3,103 ***** - 2461 004757 100 040 .ADDR TMPB2 ;PLACE TO PUT RDATA 0-35 - 2462 - 2463 004761 315 033 033 CALL CMP36 ;CHECK DATA JUST READ VS. DATA SENT - 2464 004764 042 040 .ADDR BUSAD ;SENT DATA - 2465 004766 100 040 .ADDR TMPB2 ;RECEIVED DATA - 2466 004770 311 RET ;DONE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-75 -CMDS.M80 *** "DB" CMD *** - - 2468 ;"DB" COMMAND CODE FOR THE CASES WHERE DATA DEPOSITED ON THE - 2469 ;BUS IS NOT THE SAME AS THE DATA READ BACK FROM THE BUS.. - 2470 ;...BY THE WAY..RIGHT NOW THIS IS PRETTY SLOPPY CODE.... - 2471 004771 DBERR: PCHAR CCHR ;PRINT A "C" - (1) 004771 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 004772 103 .BYTE CCHR ;CHAR TO PRINT - 2472 004773 DBCOM: PLINE MSG10 ;"?C CYC" - (1) 004773 337 RST 3 ;PRINT LINE OF CHARS - (1) 004774 062 037 .ADDR MSG10 ;BUFF TO PRINT - 2473 - 2474 004776 041 042 040 LXI H,BUSAD ;ADDR OF 36-BIT DATA - 2475 005001 315 365 030 CALL P36 ;NOW PRINT THAT DATA - 2476 - 2477 005004 PLINE DRCVD ;"RECEIVED DATA" - (1) 005004 337 RST 3 ;PRINT LINE OF CHARS - (1) 005005 075 037 .ADDR DRCVD ;BUFF TO PRINT - 2478 - 2479 005007 041 100 040 LXI H,TMPB2 ;THIS IS ADDR OF RECEIVED DATA - 2480 005012 315 365 030 CALL P36 ;PRINT THAT 36-BIT DATA - 2481 005015 PCRLF ;AND CR-LF - (2) 005015 347 RST 4 - (2) 005016 002 .BYTE 2 - 2482 005017 041 004 000 LXI H,4 ;PASS ERROR CODE BEFORE EXIT - 2483 005022 303 016 036 JMP ERRRTN ;GO FINISH WITH THE ERROR CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-76 -CMDS.M80 *** "EM" CMD *** - - 2485 .SBTTL *** "EM" CMD *** - 2486 ;THIS IS THE ACTUAL "EM" COMMAND CODE - 2487 - 2488 005025 332 033 012 EMCMD: JC EM1 ;SKIP CODE IF AT END OF COMMAND - 2489 005030 315 121 013 CALL LACMD ;GO FETCH UP AN ADDRESS TO EXAMINE - 2490 - 2491 005033 257 EM1: XRA A ;CLEAR ACCUM - 2492 005034 062 031 040 STA ENEXT ;AND SET SO "EN " CMD WILL KNOW WHAT TO DO - 2493 - 2494 005037 021 017 040 EM2: LXI D,MEMAD ;ADDRESS FOR MEMORY LOC. - 2495 - 2496 005042 076 004 EMINT: MVI A,04 ;BIT TO SAY "READ FUNCTION" - 2497 - 2498 005044 107 EN2ND: MOV B,A ;SAVE FUNCTION DATA - 2499 005045 353 XCHG ;DATA POINTER TO "H,L" - 2500 005046 042 205 040 SHLD AM.AI ;STORE FOR LATER USE BY COMMON CODE - 2501 005051 353 XCHG ;RESTORE "D,E" - 2502 005052 315 207 033 CALL ADATP ;***** I/O WRT 103,105,107,111,113 ***** - 2503 - 2504 005055 170 MOV A,B ;GET FUNCTION - 2505 005056 323 113 EM.CRM: OUT A0003 ;***** I/O WRT 113/4 ***** - 2506 - 2507 ;NOW SET "COM/ADR" CYCLE - 2508 005060 076 004 MVI A,^O04 ;BIT TO SET COM/ADR CYC - 2509 005062 323 115 OUT BUSARB ;***** I/O WRT 115/4 ***** - 2510 - 2511 ;CHECK IF DOING EI OR EM - 2512 005064 072 163 040 LDA EIFLAG ;GET THE EI FLAG - 2513 005067 247 ANA A ;SET CODES, IF .NE. 0, THEN IT IS AN EI CODE - 2514 005070 302 075 012 JNZ EMCONT ;AND IF WAS EI, GO DO IT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-77 -CMDS.M80 *** "EM" CMD *** - - 2516 ;OTHERWISE JUST FALL THRU AND USE THE DM CODES - 2517 005073 076 343 MVI A,^O343 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" - 2518 ;"LATCH DATA SENT"," R CLK DISABLE" - 2519 005075 323 210 EMCONT: OUT BUSCTL ;***** I/O WRT 210/343 ***** - 2520 - 2521 005077 257 XRA A ;CLEAR THE ACCUM - 2522 005100 062 163 040 STA EIFLAG ;CLEAR FLAG ON THE WAY OUT - 2523 - 2524 005103 BUSRESP ARBRESP ;***** I/O RD 301 ***** - (1) 005103 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 005106 020 .BYTE ARBRESP ;BITS TO BE CHECKED - 2525 005107 302 022 036 JNZ NOARB ;IF GET NO "BUS REQ", ARB FAILED SO ABORT - 2526 - 2527 005112 BUSRESP NONXMEM ;***** I/O RD 301 ***** - (1) 005112 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 005115 100 .BYTE NONXMEM ;BITS TO BE CHECKED - 2528 005116 302 036 036 JNZ NIXOM ;JUMP IF NON-EXISTANT MEM FLAG IS SET - 2529 - 2530 ;NOW MUST WAIT FOR "DATA ACKNOWLEDGE" FROM MEMORY - 2531 005121 BUSRESP DATACK ;***** I/O RD 301 ***** - (1) 005121 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 005124 001 .BYTE DATACK ;BITS TO BE CHECKED - 2532 005125 312 010 036 JZ NOACK ;JMP IF NO "DATA ACK"(BUS HAS 15 MIC. SEC TO RESP) - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-78 -CMDS.M80 *** "EM" CMD *** - - 2534 ;HERE IF "DATA ACKNOWLEDGE" RECEIVED..GET RESULTS & PRINT - 2535 005130 021 012 040 LXI D,EMBUF ;PLACE TO PUT RECEIVED DATA - 2536 005133 315 112 033 CALL RDATP ;***** I/O RD 0,1,2,3,103 ***** - 2537 - 2538 005136 257 XRA A ;SET ACCUM .EQ. 0 FOR "R CLK ENABLE" - 2539 005137 323 210 OUT BUSCTL ;***** I/O WRT 210/0 ***** - 2540 - 2541 005141 072 120 040 LDA NOPNT ;GET THE PRINT FLAG - 2542 005144 247 ANA A ;SET CONDITION CODES - 2543 005145 300 RNZ ;AND DONT WASTE TIME IF NOT PRINTING - 2544 - 2545 005146 052 205 040 LHLD AM.AI ;GET POINTER TO MEM ADDR JUST EXAMINED - 2546 005151 315 365 030 CALL P36 ;PRINT IT - 2547 - 2548 005154 PSLASH ;PRINT "/" - (2) 005154 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 005155 057 .BYTE SLASH ;CHAR TO PRINT - 2549 005156 315 362 030 CALL P36. ;AND PRINT IT - 2550 005161 PCRLF ;CR-LF - (2) 005161 347 RST 4 - (2) 005162 002 .BYTE 2 - 2551 005163 ENDCMD ;ALL DONE - (1) 005163 311 RET ;RETURN TO CALLER - 2552 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-79 -CMDS.M80 *** "EN" CMD *** - - 2554 .SBTTL *** "EN" CMD *** - 2555 ;ACTUAL CODE FOR "EN" CMD - 2556 - 2557 005164 315 066 033 ENEM: CALL INC36 ;ADD 1 TO 36-BIT BUFFER - 2558 005167 017 040 .ADDR MEMAD ;THIS IS THE BUFFER TO INCREMENT - 2559 005171 303 033 012 JMP EM1 ;AND NO GO PROCESS JUST LIKE "EM" CMD - 2560 - 2561 - 2562 .SBTTL *** "EN" CND *** - 2563 ;EXAMINE NEXT WILL DO THE NEXT, SAME AS THE LAST - 2564 005174 052 031 040 ENCMD: LHLD ENEXT ;GET INDEX FOR WHICH EXAMINE IS NEXT - 2565 005177 021 210 012 LXI D,ENLST ;GET PNTR TO DISPATCH LIST - 2566 005202 031 DAD D ;AND NOW ADD "WHICH" EXAMINE - 2567 005203 136 MOV E,M ;GET LO ORDER PIECE - 2568 005204 043 INX H ;UPDATE MEM PNTR - 2569 005205 126 MOV D,M ;GET HI ORDER PIECE - 2570 005206 353 XCHG ;PUT THIS NEW ADDR INTO "H,L" - 2571 005207 351 PCHL ;AND TAKE THE DISPATCH - 2572 - 2573 005210 164 012 ENLST: .ADDR ENEM ;DISPATCH FOR EXAM MEM CMD - 2574 005212 002 013 .ADDR ENEI ;DISPATCH FOR EXAM I/O - 2575 005214 107 013 .ADDR ENEK ;DISPATCH FOR EXAM KONSOL - 2576 005216 077 016 .ADDR ENEC ;DISPATCH FOR EXAMINCRAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-80 -CMDS.M80 *** "DM" CMD *** - - 2578 .SBTTL *** "DM" CMD *** - 2579 ;DEPOSIT MEMORY ACTUAL COMMAND CODE - 2580 .SBTTL *** "DN" CMD *** - 2581 005220 315 066 033 DNDM: CALL INC36 ;INCREMENT MEMORY ADDRESS - 2582 005223 017 040 .ADDR MEMAD ;HERE IS CURRENT MEMORY ADDRESS - 2583 005225 DMCMD: ARG36 ;OTHERWISE, ASSEMBLE THE ARG - (1) 005225 347 RST 4 - (1) 005226 010 .BYTE 8 - 2584 005227 047 040 .ADDR DMDAT ;PLACE TO PUT ASSEMBLED DATA - 2585 - 2586 005231 257 DM1: XRA A ;0 IS THE INDEX FOR MEM NEXT CMDS - 2587 005232 062 033 040 STA DNEXT ;SAVE SO "NEXT" COMMAND WILL KNOW WHAT TO DO - 2588 - 2589 005235 021 017 040 DM2: LXI D,MEMAD ;PNTR TO SM10 MEMORY ADDRESS - 2590 - 2591 005240 076 002 DMINT: MVI A,02 ;BIT TO SAY "WRITE FUNCTION" - 2592 - 2593 005242 107 DN2ND: MOV B,A ;SAVE FUNCTION STATUS - 2594 005243 315 207 033 CALL ADATP ;***** I/O WRT 103,105,107,111,113 ***** - 2595 - 2596 005246 170 MOV A,B ;GET FUNCTION DATA - 2597 005247 323 113 OUT A0003 ;***** I/O WRT 113 ***** - 2598 - 2599 005251 076 004 MVI A,04 ;BIT INTO ACCUM FOR "COM/ADR CYCLE" - 2600 005253 323 115 OUT BUSARB ;***** I/O WRT 115/4 ***** - 2601 - 2602 005255 315 147 033 CALL WDATT ;***** I/O WRT 102,104,106,110,112 ***** - 2603 005260 047 040 .ADDR DMDAT ;PLACE TO GET DATA FOR DEPOSIT - 2604 - 2605 005262 076 001 MVI A,01 ;BIT INTO ACCUM FOR "DATA CYCLE" - 2606 005264 323 114 OUT DTARB ;***** I/O WRT 114/1 ***** - 2607 - 2608 ;CHECK TO SEE IF DOING DI OR DM - 2609 005266 072 164 040 LDA DIFLAG ;GET THE FLAG - 2610 005271 247 ANA A ;SET THE CONDITION CODES - 2611 005272 302 277 012 JNZ DMCONT ;IF .NE. 0, THEN YOU GOT THE CODE FOR A DI - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-81 -CMDS.M80 *** "DN" CMD *** - - 2613 ;OTHERWISE, FALL THRU TO DO A DM - 2614 005275 076 362 DMGO: MVI A,^O362 ;BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR COM/ADR" - 2615 ;"T ENB FOR DATA CYCLE"(LATCH DATA SENT PREVENTS FALSE PAR ERR) - 2616 005277 323 210 DMCONT: OUT BUSCTL ;*****I/O WRT 210/362 ***** - 2617 - 2618 005301 257 XRA A ;CLEAR THE ACCUM - 2619 005302 062 164 040 STA DIFLAG ;AND CLEAR THE FLAG - 2620 - 2621 005305 BUSRESP ARBRESP ;***** I/O RD 301 ***** - (1) 005305 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 005310 020 .BYTE ARBRESP ;BITS TO BE CHECKED - 2622 005311 302 022 036 JNZ NOARB ;IF NO "BUS REQ", ARB FAILED, SO ABORT - 2623 - 2624 ;IF THAT WAS OK, CHECK FOR NON-EXISTANT MEMORY - 2625 005314 BUSRESP NONXMEM ;***** I/O RD 301 ***** - (1) 005314 315 256 032 CALL BUSRESP ;DO A CALL TO EXECUTE THIS CODE - (1) 005317 100 .BYTE NONXMEM ;BITS TO BE CHECKED - 2626 005320 302 036 036 JNZ NIXOM ;IF FLAG SAYS NXM, THEN WE JUMP - 2627 - 2628 ;ELSE ALL OK.... - 2629 005323 ENDCMD - (1) 005323 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-82 -CMDS.M80 *** "DN" CMD *** - - 2631 .SBTTL *** "DN" CMD *** - 2632 ;ROUTINE WILL DEPOSIT NEXT, JUST AS THE LAST - 2633 005324 052 033 040 DNCMD: LHLD DNEXT ;GET CODE FOR WHICH DEPOSIT IS NEXT - 2634 005327 021 340 012 LXI D,DNLST ;PNTR TO DISPATCH LIST - 2635 005332 031 DAD D ;ADD GIVES PNTR TO WHICH IS NEXT - 2636 - 2637 005333 136 MOV E,M ;LO ORDER PIECE TO REG - 2638 005334 043 INX H ;UPDATE MEM PNTR - 2639 005335 126 MOV D,M ;HI ORDER PIECE TO REG - 2640 005336 353 XCHG ;NOW THE DISPATCH GOES TO "H,L" - 2641 005337 351 PCHL ;AND DISPATCH - 2642 - 2643 005340 220 012 DNLST: .ADDR DNDM ;DISPATCH FOR DEP NEXT TO MEM - 2644 005342 010 013 .ADDR DNDI ;FOR DEPOSIT NEXT TO I/O - 2645 005344 140 013 .ADDR DNDK ;FOR DEPOSIT NEXT TO KONSOLE - 2646 005346 111 016 .ADDR DNDC ;FOR DEPOSIT NEXT CRAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-83 -CMDS.M80 *** "EI" CMD *** - - 2648 .SBTTL *** "EI" CMD *** - 2649 005350 EICMD: RUN.. ;ILLEGAL COMMAND IF CPU RUNNING - (1) 005350 347 RST 4 - (1) 005351 006 .BYTE 6 - 2650 005352 332 360 012 JC EI1 ;SKIP CODE IF AT END OF COMMAND - 2651 005355 315 126 013 CALL LICMD ;FETCH UP THE DESIRED I/O ADDRESS - 2652 - 2653 005360 076 002 EI1: MVI A,2 ;DISP CODE FOR EXAMINE NEXT.. - 2654 005362 062 031 040 STA ENEXT ;TELL EXAMINE NEXT TO COME HERE - 2655 - 2656 005365 021 024 040 LXI D,IOAD ;"H,L" GETS PNTR TO ADDR BUFFER - 2657 - 2658 005370 076 143 MVI A,^O143 ;SPECIAL CODE FOR WHEN DOING DI - 2659 005372 062 163 040 STA EIFLAG ;PASS IT TO ROUTINE - 2660 - 2661 005375 076 014 MVI A,^O14 ;BITS FOR "I/O FUNC" & "READ FUNC" - 2662 005377 303 044 012 JMP EN2ND ;JUMP TO COMMON CODE - 2663 - 2664 - 2665 ;EXAMINE I/O ENTRY PNT FOR EXAMINE NEXT SITUATION - 2666 005402 315 041 013 ENEI: CALL IO.INC ;GO INCREMENT I/O ADDRESS TWICE - 2667 005405 303 360 012 JMP EI1 ;THEN ON TO COMMON CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-84 -CMDS.M80 *** "DI" CMD *** - - 2669 .SBTTL *** "DI" CMD *** - 2670 .SBTTL *** "DN" CMD *** - 2671 005410 315 041 013 DNDI: CALL IO.INC ;GO INCREMENT THE I/O ADDRESS TWICE - 2672 005413 DICMD: ARG36 ;OTHERWISE GO ASSEMBLE THE ARG - (1) 005413 347 RST 4 - (1) 005414 010 .BYTE 8 - 2673 005415 047 040 .ADDR DMDAT ;AND STORE IT HERE - 2674 - 2675 005417 076 002 DI1: MVI A,02 ;SET WORD THAT SAYS DEP NEXT WILL BE DI - 2676 005421 062 033 040 STA DNEXT ;AND SAVE FOR "DN" CMD - 2677 - 2678 005424 021 024 040 LXI D,IOAD ;PNTR TO ADDRESS DATA TO USE - 2679 - 2680 005427 076 160 MVI A,^O160 ;SET CODE FOR USE BY DI COMMAND - 2681 005431 062 164 040 STA DIFLAG ;AND PASS IT TO ROUTINE - 2682 - 2683 005434 076 012 MVI A,^O012 ;BITS TO SAY "I/O FUNC" & "WRITE FUNC" - 2684 005436 303 242 012 JMP DN2ND ;AND JUMP TO COMMON CODE - 2685 - 2686 005441 315 066 033 IO.INC: CALL INC36 ;NOW INCREMENT I/O ADDRESS - 2687 005444 024 040 .ADDR IOAD ;ITS RIGHT HERE - 2688 005446 315 066 033 CALL INC36 ;NOW INCREMENT I/O ADDRESS - 2689 005451 024 040 .ADDR IOAD ;ITS RIGHT HERE - 2690 005453 311 RET ;AND BACK - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-85 -CMDS.M80 *** "EK" CMD *** - - 2692 .SBTTL *** "EK" CMD *** - 2693 ;ROUTINE EXAMINES 8080 LOCATIONS - 2694 005454 332 063 013 EKCMD: JC EK1 ;IF NOT, NO ARG TO BE ASSEMBLED - 2695 - 2696 ;OTHERWISE, MUST ASSEMBLE ARG - 2697 005457 ARG16 ;GO GET 16 BIT ADDR TO EXAMINE - (1) 005457 347 RST 4 - (1) 005460 004 .BYTE 4 - 2698 005461 002 040 .ADDR C80AD ;AND PUT INTO CURRENT ADDR BUFFER - 2699 - 2700 005463 076 004 EK1: MVI A,04 ;INDEX SAYS EK IS NEXT - 2701 005465 062 031 040 STA ENEXT ;SAVE IN THE RAM - 2702 - 2703 005470 041 002 040 LXI H,C80AD ;GET CURRENT ADDR - 2704 005473 315 332 030 CALL P16 ;AND PRINT IT AS IS - 2705 - 2706 005476 PSLASH ;NOW A "/" - (2) 005476 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 005477 057 .BYTE SLASH ;CHAR TO PRINT - 2707 - 2708 005500 052 002 040 LHLD C80AD ;GET ADDR JUST PRINTED - 2709 005503 176 MOV A,M ;PASS ARG TO PRINT IN THE ACCUM - 2710 005504 303 051 017 JMP P8CRLF ; AND PRINT DATA PLUS CRLF, FOR FREE - 2711 - 2712 - 2713 - 2714 .SBTTL *** "EN" CMD *** - 2715 005507 052 002 040 ENEK: LHLD C80AD ;GET CURRENT 8080 ADDRESS - 2716 005512 043 INX H ;UPDATE - 2717 005513 042 002 040 SHLD C80AD ;PUT IT BACK - 2718 005516 303 063 013 JMP EK1 ;COMMON CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-86 -CMDS.M80 *** "LA" CMD *** - - 2720 .SBTTL *** "LA" CMD *** - 2721 005521 LACMD: - 2722 005521 ARG36 ;OTHERWISE, GET ARG & PUT IN 36-BIT BUFFER - (1) 005521 347 RST 4 - (1) 005522 010 .BYTE 8 - 2723 005523 017 040 .ADDR MEMAD ;PLACE TO PUT DATA - 2724 - 2725 005525 ENDCMD ;AND DONE - (1) 005525 311 RET ;RETURN TO CALLER - 2726 - 2727 - 2728 .SBTTL *** "LI" CMD *** - 2729 005526 LICMD: ARG36 ;GET ARG AND PUT INTO A TEMP BUFFER - (1) 005526 347 RST 4 - (1) 005527 010 .BYTE 8 - 2730 005530 024 040 .ADDR IOAD ;THIS TEMP BUFFER - 2731 - 2732 005532 ENDCMD ;AND DONE - (1) 005532 311 RET ;RETURN TO CALLER - 2733 - 2734 .SBTTL *** "LK" CMD *** - 2735 ;ROUTINE SETS CURRENT 8080 ADDRESS INTO RAM.. - 2736 ;IF USER TRIES TO DEPOSIT PROM, TOO BAD. HE SHOULD KNOW BETTER - 2737 005533 LKCMD: ARG16 ;IF OK, GO ASSEMBLE 16 BIT ARG - (1) 005533 347 RST 4 - (1) 005534 004 .BYTE 4 - 2738 005535 002 040 .ADDR C80AD ;THIS IS A GOOD PLACE TO KEEP IT - 2739 - 2740 005537 ENDCMD ;AND END - (1) 005537 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-87 -CMDS.M80 *** "DN" CMD *** - - 2742 .SBTTL *** "DN" CMD *** - 2743 005540 052 002 040 DNDK: LHLD C80AD ;GET 8080 ADDRESS - 2744 005543 043 INX H ;INCREMENT BY 1 - 2745 005544 042 002 040 SHLD C80AD ;PUT IT BACK - 2746 ;FALL INTO THE "DK" COMMAND - 2747 - 2748 .SBTTL *** "DK" CMD *** - 2749 ;CODE TO DEPOSIT INTO 8080 RAM.. IF U TRY TO DEPOSIT PROM - 2750 ;ITS YOUR OWN FAULT - 2751 005547 315 257 030 DKCMD: CALL ARG16. ;OK, NOW GO ASSEMBLE 16 BITS OF DATA - 2752 - 2753 005552 175 MOV A,L ;GET DATA FROM LOC - 2754 005553 052 002 040 LHLD C80AD ;AND CURRENT ADDRESS TO "H,L" - 2755 005556 167 MOV M,A ;WRITE THE 8-BIT DATA - 2756 005557 076 004 MVI A,04 ;GET CODE THAT SAYS EXAMINE NEXT SHOULD BE "KONSOLE" - 2757 005561 062 033 040 STA DNEXT ;AND SAVE IN RAM - 2758 - 2759 005564 ENDCMD ;ALL DONE - (1) 005564 311 RET ;RETURN TO CALLER - 2760 - 2761 .SBTTL *** "CP" CMD *** - 2762 ;COMMAND TO SINGLE PULSE THE SM10 CPU CLK - 2763 005565 332 205 013 CPCMD: JC CP1 ;IF NO ARG, ONLY GIVE SINGLE CPU CLK - 2764 - 2765 005570 315 257 030 CALL ARG16. ;ELSE GET ARG - 2766 - 2767 ;NOW GIVE NUMBER OF CLKS REQUESTED - 2768 005573 175 CPMLT: MOV A,L ;LO ORDER PIECE INTO ACCUM - 2769 005574 264 ORA H ;ADD THE HI ORDER PIECE - 2770 005575 310 RZ ;ALL DONE IF DOWN TO ZERO - 2771 - 2772 005576 315 205 013 CALL CP1 ;OTHERWISE, GIVE CLOCK - 2773 005601 053 DCX H ;DECREMENT - 2774 005602 303 173 013 JMP CPMLT ;AND CONTINUE TILL DONE ALL - 2775 - 2776 005605 076 010 CP1: MVI A,^O010 ;SET BIT FOR "SS MODE" - 2777 005607 323 204 OUT CRMCTL ;*****I/O WRT 204/010 ***** - 2778 005611 076 002 MVI A,2 ;SET BIT FOR "SINGLE CLK" - 2779 005613 323 206 OUT CLKCTL ;***** I/O WRT 206/2 ***** - 2780 005615 ENDCMD ;DONE.. - (1) 005615 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-88 -CMDS.M80 *** "ER" CMD *** - - 2782 .SBTTL *** "ER" CMD *** - 2783 ;COMMAND TO EXAMINE ONE OF THE 8080 INTERNAL REGISTER, AND DISPLAY - 2784 ;THE CONTENTS OF THAT REGISTER. - 2785 005616 332 230 013 ERCMD: JC ER1 ;IF NO ARG, GO USE THE ONE ALREADY IN THE RAM - 2786 - 2787 005621 315 257 030 CALL ARG16. ;ELSE, PICK UP THE ARG THAT WAS TYPED - 2788 - 2789 ;FALL TO HERE IF ARG OK.. - 2790 005624 175 MOV A,L ;GET ACTUAL ARG INTO THE ACCUM - 2791 005625 062 123 040 STA ERADDR ;WELL, BEST SAVE THIS THING IN THE RAM - 2792 005630 072 123 040 ER1: LDA ERADDR ;COMMON TYPE CODE.. A NO-OP IF ARG WAS TYPED - 2793 - 2794 005633 365 PUSH PSW ;NOW SAVE ACCUM PLEASE - 2795 005634 315 317 030 CALL P8BITA ;PRINT NAME OF THE 8080 REG THAT IS BEING EXAMINED - 2796 005637 PSLASH ;AND SEPARATE FROM ITS CONTENTS WITH A SLASH - (2) 005637 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 005640 057 .BYTE SLASH ;CHAR TO PRINT - 2797 - 2798 005641 361 POP PSW ;RESTORE ACCUM PLEASE - 2799 005642 315 270 013 CALL ER.UTL ;EXECUTE THE INSTR PAIR FROM THE RAM SPACE - 2800 - 2801 ;BACK HERE AND THE DATA IS IN THE ACCUM - 2802 005645 315 051 017 CALL P8CRLF ;PRINT THE RESULTS - 2803 005650 311 RET ;AND DONE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-89 -CMDS.M80 *** "ER" CMD *** - - 2805 ;ROUTINE TO EXECUTE AN "IN" OR "OUT" FROM THE 8080 RAM SPACE - 2806 005651 042 070 040 RAMXCT: SHLD ER.LOC ;THE "IN/OUT" AND THE REG NUMBER INTO RAM SPACE - 2807 005654 365 PUSH PSW ;SAVE ACCUM, IN CASE ROUTINE IS AN "OUT" - 2808 005655 076 311 MVI A,.RET ;A "RETURN" INTO ACCUM - 2809 005657 062 072 040 STA ER.LOC+2 ; AND THEN THE RETURN GETS PUT INTO RAM SPACE - 2810 005662 361 POP PSW ;RESTORE ACCUM, ANYWAY - 2811 005663 315 070 040 CALL ER.LOC ;GO EXECUTE THE RAM LOC - 2812 005666 057 CMA ;FIX HARDWARE INVERSION - 2813 005667 311 RET ;BACK TO CALLER - 2814 - 2815 ;ROUTINE ER.UTL.. DOES AN EXAMINE REGISTER, INTERNAL TYPE FORMAT. - 2816 ;NO PRINTING, JUST THE EXAMINE - 2817 ;PASS DESIRED I/O REG ADDRESS IN ACCUM. - 2818 ;ACCUM GETS THE RESULTS OF THE READ. - 2819 005670 345 ER.UTL: PUSH H ;SAVE H,L PAIR - 2820 005671 147 MOV H,A ;NOW, THE NUMBER THAT WAS TYPED IS PUT INTO HI HALF - 2821 005672 056 333 MVI L,.IN ;AND AN "IN" INSTR GOES LO HALF - 2822 - 2823 005674 315 251 013 CALL RAMXCT ;NOW ACTUALLY EXECUTE THE CODE TO DO THE READ - 2824 005677 341 POP H ;FIX H,L - 2825 005700 311 RET ;OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-90 -CMDS.M80 *** "LR" CMD *** - - 2827 .SBTTL *** "LR" CMD *** - 2828 ;COMMAND TO SET INTO THE 8080 RAM, THE I/O REGISTER TO BE EITHER - 2829 ;DEPOSITED OR EXAMINED - 2830 005701 315 257 030 LRCMD: CALL ARG16. ;FETCH IN THE NUMBER TYPED - 2831 - 2832 005704 175 MOV A,L ;DESIRED REG TO ACCUM - 2833 005705 062 123 040 STA ERADDR ;PUT IN 8080 RAM - 2834 005710 311 RET ;AND OUT - 2835 - 2836 - 2837 .SBTTL *** "DR" CMD *** - 2838 ;COMMAND TO DEPOSIT A NUMBER INTO THE LAST SPECIFIED 8080 I/O REG. - 2839 005711 DRCMD: ARG16 - (1) 005711 347 RST 4 - (1) 005712 004 .BYTE 4 - 2840 005713 000 040 .ADDR T80DT ;TAKE ARG AND PUT INTO RAM SPACE - 2841 - 2842 005715 056 323 MVI L,.OUT ;"L" GETS THE OPERATION TYPE WE WILL PERFORM - 2843 005717 072 123 040 LDA ERADDR ;FETCH UP THE CURRENTLY SELECTED I/O REG - 2844 005722 147 MOV H,A ;AND PUT IT INTO THE "H" - 2845 005723 072 000 040 LDA T80DT ;NOW THE DATA TO BE WRITTEN GOES TO THE ACCUM - 2846 - 2847 005726 315 251 013 CALL RAMXCT ;PERFORM THE OPERATION - 2848 005731 311 RET ;THATS ALL - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-91 -CMDS.M80 *** "LC" CMD *** - - 2850 .SBTTL *** "LC" CMD *** - 2851 ;COMMAND TO LOAD THE 8080 RAM CURRENT CRAM ADDRESS - 2852 005732 LCCMD: ARG16 ;OK, ASSEMBLE THE 16 BITS - (1) 005732 347 RST 4 - (1) 005733 004 .BYTE 4 - 2853 005734 004 040 .ADDR CRMAD ;TEMP PLACE TO KEEP BITS - 2854 005736 ENDCMD ;DONE.. - (1) 005736 311 RET ;RETURN TO CALLER - 2855 - 2856 .SBTTL *** "CE" CMD *** - 2857 ;COMMAND TO SET CACHE ENABLE ON THE CSL BOARD - 2858 ; OR PERHAPS CLR CACHE ENABLE IF DESIRED - 2859 - 2860 005737 332 370 013 CECMD: JC CEDIS ;IF NO ARG, DISPLAY "CACHE ENABLE" - 2861 - 2862 005742 315 257 030 CALL ARG16. ;MUST ASSEMBLE ARG IF FALL THRU - 2863 - 2864 005745 175 MOV A,L ;ARG TO ACCUM - 2865 005746 027 RAL ;BIT 0 TO 1 - 2866 005747 027 RAL ;BIT TO 2 - 2867 005750 027 RAL ;BIT TO 3 - 2868 005751 346 010 ANI ^O10 ;OFF ALL BITS BUT THE CACHE BIT - 2869 005753 107 MOV B,A ;SAVE RESULT IN "B" FOR A LITTLE WHILE - 2870 005754 072 354 040 LDA PARBT ;GET CURRENT PARITY BIT STATUS - 2871 005757 346 367 ANI ^O367 ;OFF THE CACHE BIT - 2872 - 2873 ;HERE IS SOME COMMON CODE, USEFUL BY ROUTINES WHICH MUST ADJUST - 2874 ;THE DATA IN THE PARBT LOCATION - 2875 005761 260 ENACOM: ORA B ;ADD NEW DATA TO DEFAULTED "PARBT" - 2876 005762 062 354 040 KS.PAR: STA PARBT ;NOW SAVE THE NEW DEFAULT - 2877 005765 323 100 OUT RESET ;***** I/O WRT 100/STUFF ***** - 2878 005767 ENDCMD ;AND ALL DONE - (1) 005767 311 RET ;RETURN TO CALLER - 2879 - 2880 ;CODE ENTERED WHEN WE WANT TO DISPLAY THE CACHE ENABLE STATUS - 2881 005770 072 354 040 CEDIS: LDA PARBT ;GET CURRENT STATUS - 2882 005773 346 010 ANI ^O10 ;IS THE CACHE BIT SET?? - 2883 005775 302 004 014 CHOOSE: JNZ PNT.ON ;HERE IF YES - 2884 006000 PLINE OFFMSG ;OFF MESSAGE DEPENDING THINGS - (1) 006000 337 RST 3 ;PRINT LINE OF CHARS - (1) 006001 154 037 .ADDR OFFMSG ;BUFF TO PRINT - 2885 006003 311 RET - 2886 006004 PNT.ON: PCHAR 'O ;PRINTING "ON" A CHAR AT A TIME SAVES 1 BYTE - (1) 006004 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 006005 117 .BYTE 'O ;CHAR TO PRINT - 2887 006006 PCHAR 'N ;OVER PRINTING IT AS A STRING..SPACE IS A LITTLE TIGHT - (1) 006006 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 006007 116 .BYTE 'N ;CHAR TO PRINT - 2888 006010 PCRLF - (2) 006010 347 RST 4 - (2) 006011 002 .BYTE 2 - 2889 006012 311 RET - 2890 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-92 -CMDS.M80 *** "TE" CMD *** - - 2892 .SBTTL *** "TE" CMD *** - 2893 ;CONSOLE COMMAND TO ENABLE OR DISABLE THE 1 MSEC CLOCK - 2894 - 2895 006013 332 037 014 TECMD: JC TEDIS ;IF NO ARG, DISPLAY CURRENT STATE - 2896 - 2897 006016 315 257 030 CALL ARG16. ;OTHERWISE, GO FETCH THE ARG - 2898 - 2899 006021 175 MOV A,L ;GET INFO JUST TYPED - 2900 006022 027 RAL ;BIT 0 TO 1 - 2901 006023 027 RAL ;BIT TO 2 - 2902 006024 346 004 ANI ^O4 ;OFF ALL BUT THE TIME BIT - 2903 006026 107 MOV B,A ;SAVE STUFF IN B - 2904 006027 072 354 040 LDA PARBT ;GET CURRENT DEFAULT - 2905 006032 346 373 ANI ^O373 ;OFF THE 1 MSEC CLOCK SIGNAL - 2906 - 2907 006034 303 361 013 JMP ENACOM ;GO DO COMMON CODE - 2908 - 2909 ;THIS CODE ENTERED WHEN WE ONLY WANT TO DISPLAY CURRENT STATE OF 1 MSEC CLOCK - 2910 006037 072 354 040 TEDIS: LDA PARBT ;WE NEED TO REPORT STATE..GET DEFAULT - 2911 006042 346 004 ANI ^O4 ;IS THE BIT SET?? - 2912 006044 303 375 013 JMP CHOOSE ;GO TO A COMMON PLACE THAT CHOOSES "YES" OR "NO" - 2913 - 2914 .SBTTL *** "SC" CMD *** - 2915 ;CODE TO TURN OFF OR ON, THE ABILITY TO RECOVER FROM SOFT CRAM ERRORS - 2916 ;FLAG AT 0, MEANS TRY AND RECOVER, THEREFORE ITS THE DEFAULT ON - 2917 ;MACHINE POWER ON... - 2918 006047 332 075 014 SCCMD: JC SCDIS ;IF NO ARG TYPED, GO DISPLY STATE OF THE THING - 2919 - 2920 006052 315 257 030 CALL ARG16. ;ELSE GO GATHER UUP AN ARGUMENT - 2921 006055 175 MOV A,L ;ARG GOES INTO ACCUM - 2922 006056 247 ANA A ;SET 8080 FLAGS - 2923 006057 312 067 014 JZ SC.TOFF ;IF ZERO , TURN OFF SC SOFT CRAM RECOVERY - 2924 - 2925 ;FALL THRU IF TURNING ON SCE - 2926 006062 257 XRA A ;ZERO ACCUM - 2927 006063 062 326 042 STA SC.OFF ;SO THAT WE CAN SET THE APPROPRIATE FLAG - 2928 006066 ENDCMD ;THAT'S IT - (1) 006066 311 RET ;RETURN TO CALLER - 2929 006067 076 377 SC.TOFF: MVI A,-1 ;WANT TO TURN OFF SCE, NEED -1 TO DO IT - 2930 006071 062 326 042 STA SC.OFF ;ZAP - 2931 006074 ENDCMD ;AND OUT - (1) 006074 311 RET ;RETURN TO CALLER - 2932 - 2933 006075 072 326 042 SCDIS: LDA SC.OFF ;GRAB THE FLAG - 2934 006100 057 CMA ;SINCE 0 .EQ. ON, WE MUST INVERT FLAVOR OF FLAG - 2935 006101 247 ANA A ;SET 8080 PROCESSOR FLAGS - 2936 006102 303 375 013 JMP CHOOSE ;AND GO PRINT THE RIGHT THING - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-93 -CMDS.M80 *** "TP CMD" *** - - 2938 .SBTTL *** "TP CMD" *** - 2939 ;CONSOLE COMMAND TO ENABLE OR DISABLE THE TEN STYLE TRAPS - 2940 006105 332 125 014 TPCMD: JC TPDIS ;GO DISPLAY CURRENT STATE IF NOTHING TYPED - 2941 - 2942 006110 315 257 030 CALL ARG16. ;OTHERWISE, GO ASSEMBLE A NUMBER TYPED IN - 2943 - 2944 006113 175 MOV A,L ;GET INFO THAT WAS TYPED - 2945 006114 027 RAL ;BIT 0 TO 1 - 2946 006115 027 RAL ;1 TO 2 - 2947 006116 027 RAL ;2 TO 3 - 2948 006117 027 RAL ;3 TO 4 - 2949 006120 346 020 ANI ^O20 ;OFF ALL BUT TRAP BIT - 2950 006122 303 000 022 JMP TP.SET ;JUMP TO PLACE THAT SETS TRAPS, AND SAVES DATA - 2951 - 2952 ;CODE TO DISPLAY CURRENT STATE OF SIGNAL - 2953 006125 072 355 040 TPDIS: LDA TRAPEN ;GET CURRENT STATE OF TRAPS BIT - 2954 006130 346 020 ANI ^O20 ;SET CONDITION CODES - 2955 006132 303 375 013 JMP CHOOSE ;AND GO DO IT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-94 -CMDS.M80 *** "LT" CMD *** - - 2957 .SBTTL *** "LT" CMD *** - 2958 ;CONSOLE COMMAND TO TURN ON THE LIGHTS ON THE CONSOLE FRONT PANEL - 2959 006135 LTCMD: CLRB KLNKSW ;FORCE A FIXING OF THE LIGHTS - 2960 006137 076 007 MVI A,7 ;LOAD ACCUM WITH A BIT FOR EACH OF THE 3 LIGHTS - 2961 006141 323 101 OUT LIGHTS ;***** I/O WRT 101/7 ***** - 2962 006143 315 151 014 CALL LTDLY ;LEAVE LIGHTS ON FOR ABOUT A SECOND - 2963 006146 257 XRA A ;CLEAR ACCUM - 2964 006147 323 101 OUT LIGHTS ;***** I/O WRT 101/0 ***** - 2965 ;FALL INTO CODE THAT WAITS A WHILE WITH THE LIGHTS OFF - 2966 - 2967 006151 041 054 001 LTDLY: LXI H,300 ;DELAY ABOUT A SECOND AND A HALF - 2968 006154 315 276 033 LTLOOP: CALL DELAY. ;GO DO A LITTLE DELAY - 2969 006157 377 .BYTE -1 ;MAX COUNT - 2970 - 2971 006160 053 DCX H ;DOWN THE COUNT - 2972 006161 175 MOV A,L ;GET PIECE OF THE COUNT - 2973 006162 264 ORA H ;THROW IN THE REST OF THE COUNT - 2974 006163 302 154 014 JNZ LTLOOP ;CONTINUE WAITING - 2975 006166 311 RET ; UNTIL ALL DONE - 2976 - 2977 .SBTTL *** "MM" CMD *** - 2978 ;COMMAND TO PUT THE 8080 INTO MANUFACTURING MODE. - 2979 ;SETS THE STATE FOR THE KLINIK LINE THEN SENDS A COMMUNICATIONS CLEAR - 2980 ;TO WHATEVER IS AT THE OTHER END OF THE KLINIK LINE - 2981 006167 315 052 034 MMCMD: CALL SETM4 ;SET KLINIK LINE TO MODE 4 - 2982 006172 076 041 MVI A,^O41 ;WE MUST ALWAYS RESET THE MESSAGE NUMBERS - 2983 006174 062 361 040 STA LSTMSG ;THIS IS THE "RECEIVE" MESSAGE NUMBER - 2984 006177 062 011 042 STA ENVMNO ;AND THIS IS THE "SEND" MESSAGE NUMBER - 2985 006202 062 251 040 STA MMFLG ;SAY MANUFACTURING MODE HAS BEEN ENTERED - 2986 006205 315 376 035 CALL Z.TBUF ;CLEAR SOME COMMUNICATION DEC10 BUFFERS - 2987 006210 303 336 034 JMP DECEX2 ;CLEAR THE MAILING ENVELOPES - 2988 ;**USING JMP USES OTHER GUY'S RETURN TO RETURN - 2989 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-95 -CMDS.M80 *** "SI" CMD *** - - 2991 .SBTTL *** "SI" CMD *** - 2992 ;COMMAND TO CAUSE SM10 TO EXECUTE A SINGLE INSTR. - 2993 006213 333 300 SICMD: IN RUNFP ;BEFORE CONTINUING,MUST READ MACHINE STATE - 2994 006215 346 004 ANI 4 ;IS THE RUN FLOP SET(IS IT ALREADY RUNNING??)(TRUE LO) - 2995 006217 312 042 027 JZ YSRUN ;IF YES, GO PRINT A MESSAGE TO THAT EFFECT & ABORT CMD - 2996 - 2997 006222 076 001 MVI A,01 ;SET BIT FOR "CONTINUE" - 2998 006224 323 212 OUT CPUCTL ;***** I/O WRT 212/1 ***** - 2999 006226 315 101 017 CALL DNF ;CHECK THAT INSTR FINISHED - 3000 006231 303 356 016 JMP PCCOM ;AND GO TO TYPE OUT THE PC - 3001 - 3002 .SBTTL *** "CS" CMD *** - 3003 ;COMMAND TO START THE SM10 CPU CLK RUNNING - 3004 006234 315 266 032 CSCMD: CALL SETRN ;SET CLK "RUNNING" FLAG - 3005 006237 257 XRA A ;CLR ACCUM TO CLR "SS MODE" - 3006 006240 323 204 OUT CRMCTL ;***** I/O WRT 204/0 ***** - 3007 006242 076 003 MVI A,03 ;SET BITS FOR "CLK RUN" & "SINGLE CLK" - 3008 006244 323 206 OUT CLKCTL ;***** I/O WRT 206/3 ***** - 3009 006246 ENDCMD ;DONE.. - (1) 006246 311 RET ;RETURN TO CALLER - 3010 - 3011 .SBTTL *** "CH" CMD *** - 3012 ;COMMAND TO HALT THE SM10 CPU CLK - 3013 006247 315 302 032 CHCMD: CALL CLRRN ;CLEAR CLK "RUNNING" FLAG - 3014 006252 076 010 MVI A,^O010 ;SET BIT FOR "SS MODE" - 3015 006254 323 204 OUT CRMCTL ;***** I/O WRT 204/010 ***** - 3016 006256 257 XRA A ;CLR BITS FOR "SINGLE CLK" & "CLK RUN" - 3017 006257 323 206 OUT CLKCTL ;***** I/O WRT 206/0 ***** - 3018 006261 ENDCMD ;DONE.. - (1) 006261 311 RET ;RETURN TO CALLER - 3019 - 3020 - 3021 .SBTTL *** "LF" CMD *** - 3022 ;COMMAND TO "LOAD FUNCTION"..SPECIFIES WHICH DIAG FUNCTION WRITE - 3023 ;TO DO ON THE NEXT "DF" COMMANDS - 3024 006262 315 257 030 LFCMD: CALL ARG16. ;GO ASSEMBLE 16 BIT ARG(WE ONLY NEED 4 BITS) - 3025 - 3026 006265 042 010 040 SHLD CRMFN ;PERMANENT HOME FOR DATA - 3027 006270 ENDCMD ;DONE.. - (1) 006270 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-96 -CMDS.M80 *** "DF" CMD *** - - 3029 .SBTTL *** "DF" CMD *** - 3030 ;ROUTINE WRITES THE DATA TYPED USING THE DIAG FUNCTION - 3031 ;PREVIOUSLY SPECIFIED BY LF COMMAND - 3032 006271 DFCMD: RUN.. ;IS CPU RUNNING?? - (1) 006271 347 RST 4 - (1) 006272 006 .BYTE 6 - 3033 - 3034 006273 315 257 030 CALL ARG16. ;GO ASSEMBLE ARG - 3035 - 3036 ;NEXT ROUTINE DOES LOTS OF I/O WRTS TO SM10 CPU - 3037 ;ALL WHILE TRYING TO WRITE DIAGNOSTIC ADDRESS REG FOR CRAM - 3038 ;LOADING OR READING.. - 3039 006276 345 PUSH H ;SAVE DATA TO BE DEPOSITED - 3040 006277 315 335 014 CALL CRM.AD ;WRITE THE CRAM ADDRESS - 3041 006302 341 POP H ;GET DATA TO BE DEPOSITED - 3042 - 3043 006303 175 WFUNC: MOV A,L ;GET DATA FOR BITS 28-35 INTO ACCUM - 3044 006304 323 103 OUT A2835 ;***** I/O WRT 103 ***** - 3045 006306 174 MOV A,H ;GET DATA FOR BITS 20-27 - 3046 006307 323 105 OUT A2027 ;***** I/O WRT 105 ***** - 3047 - 3048 006311 257 WFNC1: XRA A ;CLR ACCUM - 3049 006312 323 115 OUT BUSARB ;***** I/O WRT 115/0 ***** - 3050 - 3051 006314 076 144 MVI A,^O144 ;BITS FOR "CONS REQ","T ENB FOR COM/ADR","CRA R CLK" - 3052 006316 323 210 OUT BUSCTL ;***** I/O WRT 210/144 ***** - 3053 - 3054 006320 072 010 040 LDA CRMFN ;GET DIAG FUNCTION - 3055 006323 323 205 OUT DIAG ;***** I/O WRT 205/FNC ***** - 3056 ;NOTE THAT "TRAP EN" WAS JUST ZAPPED, BUT IT IS ONLY USEFUL IF THE - 3057 ;MICRO-CODE IS RUNNING AND ANYTHING U DO TO GET THE MICRO-CODE RUNNING - 3058 ;WILL RESTORE THE TRAP ENABLE..THIS KLUDGE SPEEDS UP MICRO-CODE LOAD - 3059 - 3060 - 3061 006325 076 040 MVI A,^O40 ;BIT FOR "CRAM WRT" - 3062 006327 323 204 OUT CRMCTL ;***** I/O WRT 204/40 - 3063 006331 257 XRA A ;BIT TO CLR "CRAM WRT" - 3064 006332 323 204 OUT CRMCTL ;***** I/O WRT 204/0 ***** - 3065 006334 ENDCMD ;DONE.. - (1) 006334 311 RET ;RETURN TO CALLER - 3066 - 3067 ;SIMPLE LITTLE ROUTINE TO SAVE SOME SPACE..USED IN SEVERAL PLACES - 3068 006335 052 004 040 CRM.AD: LHLD CRMAD ;LOAD DIAG ADDR TO BE WRITTEN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-97 -CMDS.M80 *** "DF" CMD *** - - 3070 ;ROUTINE COUNTS ON DATA IN "H,L"..DESTROYS "H,L"... - 3071 006340 076 001 CADWR: MVI A,01 ;BIT FOR CRAM RESET - 3072 006342 323 204 OUT CRMCTL ;***** I/O WRT 204/1 ***** - 3073 006344 257 XRA A ;CLR BIT TO CLR CRAM RESET - 3074 006345 323 204 OUT CRMCTL ;***** I/O WRT 204/0 ***** - 3075 - 3076 ;***** I/O WRT 103,105,107,111,113 ***** - 3077 006347 175 MOV A,L ;LO ORDER 8 BITS TO ACCUM - 3078 006350 323 103 OUT A2835 ;SET IN HARDWARE REG - 3079 006352 174 MOV A,H ;HI ORDER 4 BITS TO ACCUM - 3080 006353 323 105 OUT A2027 ;SET INTO HARDWARE REG - 3081 - 3082 006355 257 XRA A ;CLR ACCUM - 3083 006356 323 107 OUT A1219 ;CLR OTHER HARDWARE REGS - 3084 006360 323 111 OUT A0411 - 3085 006362 323 113 OUT A0003 - 3086 - 3087 006364 323 115 OUT BUSARB ;***** I/O WRT 115/0 ***** - 3088 - 3089 006366 076 144 MVI A,^O144 ;BITS FOR "CONS REQ", "T ENB FOR COM/ADR","CRA R CLK" - 3090 006370 323 210 OUT BUSCTL ;***** I/O WRT 210/144 ***** - 3091 006372 076 021 MVI A,^O21 ;BIT FOR "CRM ADDR LOAD" - 3092 006374 323 204 OUT CRMCTL ;***** I/O WRT 204/21 - 3093 006376 257 XRA A ;BIT TO CLR CRAM ADDR LOAD - 3094 006377 323 204 OUT CRMCTL ;***** I/O WRT 204/0 ***** - 3095 006401 311 RET ;AND RETURN - 3096 - 3097 - 3098 ;ROUTINE TO READ A SINGLE DIAG FUNC WORTH OF STUFF FROM - 3099 ;THE CRA/CRM PROCESSOR BOARDS - 3100 006402 127 READC: MOV D,A ;SAVE DIAG FUNC FOR A SEC.. - 3101 006403 072 355 040 LDA TRAPEN ;GET CURRENT VALUE FOR TRAP ENABLES - 3102 006406 262 ORA D ;MIX TOGETHER - 3103 006407 323 205 OUT DIAG ;***** I/O WRT 205/FNC ***** - 3104 006411 076 115 MVI A,^O115 ;BITS "CONS REQ","CRA T CLK","R CLK ENB","CRA R CLK" - 3105 006413 323 210 OUT BUSCTL ;***** I/O WRT 210/115 ***** - 3106 - 3107 006415 333 000 IN D2835 ;***** I/O RD 0 ***** - 3108 006417 057 CMA ;FIX INVERSION - 3109 006420 062 100 040 STA TMPB2 ;SAVE IN STANDARD BUFFER - 3110 - 3111 006423 333 001 IN D2027 ;***** I/O RD 1 ***** - 3112 006425 057 CMA ;FIX INVERSION - 3113 006426 346 017 ANI ^O17 ;KEEP ONLY 12-8 - 3114 006430 062 101 040 STA TMPB2+1 ;SAVE IN STANDARD BUFFER - 3115 - 3116 006433 257 XRA A ;CLR ACCUM - 3117 006434 323 210 OUT BUSCTL ;***** I/O WRT 210/0 ***** - 3118 - 3119 006436 311 RET ;RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-98 -CMDS.M80 *** "RC" *** - - 3121 .SBTTL *** "RC" *** - 3122 006437 RCCMD: RUN.. ;IS CPU RUNNING?? - (1) 006437 347 RST 4 - (1) 006440 006 .BYTE 6 - 3123 - 3124 006441 257 RCINT: XRA A ;CLEAR ACCUM FOR USE AS A COUNTER - 3125 006442 001 341 040 LXI B,CRMBF+^D31 ;PNTR TO A BUFFER AREA TO SAVE THE "RC'S" AS READ - 3126 006445 137 RCLP: MOV E,A ;SAVE IN "E" REG - 3127 006446 315 002 015 CALL READC ;READ A DIAG FUNC FROM CRA/CRM BRD - 3128 ;NOW PRINT WHAT WAS READ - 3129 006451 072 120 040 LDA NOPNT ;WE WILL MAKE IT QUICKER IF NOT PRINTING RESULTS - 3130 006454 247 ANA A ;SET FLAGS - 3131 006455 302 102 015 JNZ RCNOP ;IF NO PRINT, AVOID TYPING CODE - 3132 - 3133 006460 173 MOV A,E ;PUT IN MEM FOR PRINT ROUTINE - 3134 006461 315 317 030 CALL P8BITA ;PRINT NAME OF THIS DIAG FUNC - 3135 006464 PSLASH ;AND "/" - (2) 006464 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 006465 057 .BYTE SLASH ;CHAR TO PRINT - 3136 006466 315 327 030 CALL P16. ;AND PRINT IT - 3137 006471 PCRLF - (2) 006471 347 RST 4 - (2) 006472 002 .BYTE 2 - 3138 - 3139 006473 305 PUSH B ;SAVE COUPLE REGS WHILE GO DECNET - 3140 006474 325 PUSH D - 3141 006475 315 205 034 CALL DECNET ;YES.. SEND THIS GROUP OF DATA DOWN THE KLINIK LINE - 3142 006500 321 POP D ;RETRIEVE THOSE REGISTERS - 3143 006501 301 POP B - 3144 - 3145 ;CODE FOR SAVING THE RESULTS OF THESE FUNCTION READS IN THE 8080 RAM SPACE - 3146 ;FOR NOW WE WILL SAVE THE RESULTS IN THE PLACE WHERE CRAM DATA IS KEPT - 3147 006502 052 100 040 RCNOP: LHLD TMPB2 ;FETCH UP THE DATA THAT WAS ACTUALLY READ - 3148 006505 174 MOV A,H ;GET LO ORDER PIECE TO ACCUM - 3149 006506 002 STAX B ;STORE TO PLACE POINTED TO BY "D,E" - 3150 006507 013 DCX B ;UPDATE THE STORAGE POINTER - 3151 006510 175 MOV A,L ;GET HI ORDER PIECE OF CRAM DATA - 3152 006511 002 STAX B ;SAVE IN STORAGE AREA - 3153 006512 013 DCX B ;AGAIN DOWNDATE POINTER TO BEGINING OF ACTUAL - 3154 - 3155 006513 034 INR E ;INCREMENT IT - 3156 006514 173 MOV A,E ;COPY CURRENT COUNT TO ACCUM FOR THE COMPARE - 3157 006515 376 020 CPI ^O20 ;REACHED MAX YET?? - 3158 006517 302 045 015 JNZ RCLP ;BACK IF NOT YET.. - 3159 - 3160 ;OTHERWISE - 3161 006522 ENDCMD ;DONE... - (1) 006522 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-99 -CMDS.M80 *** "EJ" CMD *** - - 3163 .SBTTL *** "EJ" CMD *** - 3164 ;CONSOLE COMMAND TO DISPLAY THE FLOW OF THE CONTROL STORE BY PRINTING - 3165 ;OUT THE CURRENT "J-FIELD", "NEXT LOC", "SUBROUTINE RET REG", & "CURRENT - 3166 ; LOCATION" - 3167 006523 EJCMD: RUN.. ;IS CPU RUNNING?? - (1) 006523 347 RST 4 - (1) 006524 006 .BYTE 6 - 3168 006525 041 170 015 LXI H,EJLST ;FIRST GET A PNTR TO ASCII TEXT - 3169 006530 001 207 004 LXI B,^B10010000111 ;SET B=4 & C="10,00,01,11" - 3170 - 3171 006533 171 EJLP: MOV A,C ;COPY DIAG FUNC STRING TO ACCUM - 3172 006534 346 003 ANI 3 ;STRIP ALL BUT LO ORDER 2 BITS - 3173 - 3174 006536 315 002 015 EJ1: CALL READC ;GO READ DIAG FUNC AS GIVEN BY ACCUM - 3175 - 3176 006541 315 160 004 CALL PLN1 ;PRINT ASCII IDENTIFIER FOR THIS FUNC - 3177 - 3178 006544 345 PUSH H ;SAVE "H,L" - 3179 006545 315 327 030 CALL P16. ;AND GO PRINT IT AS 16 BIT OCTAL - 3180 006550 PCHAR SPACE - (1) 006550 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 006551 040 .BYTE SPACE ;CHAR TO PRINT - 3181 006552 PCHAR SPACE - (1) 006552 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 006553 040 .BYTE SPACE ;CHAR TO PRINT - 3182 006554 341 POP H ;GET "H,L" BACK - 3183 - 3184 006555 171 MOV A,C ;GET FUNCTION PICKER - 3185 006556 017 RRC ;SHIFT FUNCTION LIST - 3186 006557 017 RRC ; 2 PLACES - 3187 006560 117 MOV C,A ;PUT BACK FUNCTION - 3188 - 3189 006561 005 DCR B ;NOW DOWN THE COUNTER - 3190 006562 302 133 015 JNZ EJLP ;AND JUMP TO THE EXECUTING CODE - 3191 - 3192 006565 PCRLF ;AND A CR-LF - (2) 006565 347 RST 4 - (2) 006566 002 .BYTE 2 - 3193 ;ELSE.. END OF COMMAND - 3194 006567 ENDCMD ;RETURN TO CALLER - (1) 006567 311 RET ;RETURN TO CALLER - 3195 - 3196 006570 103 125 122 EJLST: .ASCIZ %CUR/% ;FUNC 03 IS CURRENT CRAM LOCATION - 3197 006575 116 130 124 .ASCIZ %NXT/% ;FUNC 01 IS NEXT LOC - 3198 006602 112 057 000 .ASCIZ %J/% ;FUNC 00 IS J-FIELD - 3199 006605 123 125 102 .ASCIZ %SUB/% ;FUNC 02 IS SUBROUTINE RETURN REG - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-100 -CMDS.M80 *** "TR" CMD *** - - 3201 .SBTTL *** "TR" CMD *** - 3202 ;THIS CONSOLE COMMAND TRACES THE FLOW OF THE MICRO-CODE BY TYPEING - 3203 ;THE 4 KNOWN ADDRESSES FROM THE CONTROL RAM ADDRESS BRD, THEN ISSUEING - 3204 ;A SINGLE CPU PULSE AND CONTINUING THIS UNTIL THE USER TYPES A - 3205 ;CARRIAGE RETURN. - 3206 006612 332 226 015 TRCMD: JC TR1 ;IF NO ARG, GO LIKE NORMAL - 3207 006615 ARG16 ;IF WAS ARG, GO GET IT - (1) 006615 347 RST 4 - (1) 006616 004 .BYTE 4 - 3208 006617 152 040 .ADDR BRKDT ;PLACE TO PUT IT - 3209 - 3210 006621 076 077 MVI A,^O77 ;NOW ANY ARBITRARY,NON-ZERO VALUE - 3211 006623 062 151 040 STA BRKON ;TO SAY THAT BREAKING IS ON.. - 3212 - 3213 006626 TR1: RUN.. ;IS CPU RUNNING?? - (1) 006626 347 RST 4 - (1) 006627 006 .BYTE 6 - 3214 006630 CLRB RPEND ;SO CAN CLR CMD CNTR - 3215 006632 072 151 040 TR: LDA BRKON ;CHECK IF BREAK IS ON - 3216 006635 247 ANA A ;CHECK FLAG - 3217 006636 312 250 015 JZ TRLP ;IF ZERO,DONT LOOK AT BREAK STUFF - 3218 006641 021 152 040 LXI D,BRKDT ;PASS PNTR TO THE DESIRED STOPPING ADDRESS - 3219 006644 315 204 030 CALL BREAK ;IF FLAG SET, CALL TO CHECK ADDRESS - 3220 006647 310 RZ ;IF RETURN WITH Z-SET, WE ARE AT BREAK PLACE - 3221 - 3222 006650 315 271 015 TRLP: CALL PULSE ;GIVE PULSE - 3223 006653 PCRLF ;CARRIAGE RETURN LINE FEED - (2) 006653 347 RST 4 - (2) 006654 002 .BYTE 2 - 3224 - 3225 006655 072 157 040 LDA RPEND ;GET CMD CNTR - 3226 006660 247 ANA A ;IS IT SET?? - 3227 006661 312 232 015 JZ TR ;WELL, CONT LOOP IF NOT YET - 3228 ;OTHERWISE, END THE COMMAND - 3229 006664 CLRB BRKON ;AND CLR THE FLAG - 3230 006666 ENDCMD ;DONE.. - (1) 006666 311 RET ;RETURN TO CALLER - 3231 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-101 -CMDS.M80 *** "PM" CMD *** - - 3233 .SBTTL *** "PM" CMD *** - 3234 ;CONSOLE COMMAND TO "PULSE" "MICRO-CODE",..IE GIVE - 3235 ;A SINGLE PULSE AND THEN AN "EJ" COMMAND.. - 3236 ;COMMAND IS EQUIVILANT TO THE "TR" TRACE COMMAND, - 3237 ;ONLY EXECUTING THE TRACE ONCE.. - 3238 006667 PMCMD: RUN.. ;IS CLK RUNNING?? - (1) 006667 347 RST 4 - (1) 006670 006 .BYTE 6 - 3239 - 3240 006671 315 205 013 PULSE: CALL CP1 ;GO DO A SINGLE CLOCK - 3241 006674 315 123 015 CALL EJCMD ;TYPE CONTROL STORE ADDRESSES & EXIT FROM THERE - 3242 006677 ENDCMD ;AND OUT - (1) 006677 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-102 -CMDS.M80 *** "EC" CMD *** - - 3244 .SBTTL *** "EC" CMD *** - 3245 ;ROUTINE TO READ THE C-RAM AND TYPE IT OUT - 3246 006700 ECCMD: RUN.. ;IS CPU RUNNING?? - (1) 006700 347 RST 4 - (1) 006701 006 .BYTE 6 - 3247 006702 332 322 015 JC EC2 ;IF NO ARG, DONT GO ASSEMBLE ONE - 3248 006705 315 332 013 CALL LCCMD ;FETCH UP DESIRED CRAM ADDRESS - 3249 - 3250 006710 EC1: CLRRM TMPB2 ;ZAP A TEMPORARY BUFFER - (1) 006710 347 RST 4 - (1) 006711 012 .BYTE 10. - (1) 006712 105 040 .ADDR TMPB2+5 - 3251 - 3252 006714 315 335 014 CALL CRM.AD ;NOW WRITE DESIRED CRAM ADDRESS - 3253 006717 315 205 013 CALL CP1 ;AND GIVE A SINGLE CLK PULSE TO LOAD CNTRL REG - 3254 - 3255 006722 076 006 EC2: MVI A,06 ;SET UP "EXAMINE NEXT" TYPE COMMANDS - 3256 006724 062 031 040 STA ENEXT ;SAVE EXAMINE STUFF IN RAM - 3257 - 3258 ;NOW READY TO READ THE CONTROL REG - 3259 006727 041 061 016 LXI H,RDLST ;GET PNTR TO DIAG FUNCTIONS TO BE READ - 3260 - 3261 006732 176 ECLP: MOV A,M ;GET DIAG FUNCTION TO ACCUM - 3262 006733 043 INX H ;UPDATE PNTR - 3263 006734 247 ANA A ;WAS FNC END-OF-LIST(YES IF WAS MINUS) - 3264 006735 372 364 015 JM ECBEE ;JMP IF WAS END OF LIST - 3265 - 3266 ;OTHERWISE, WE MUST DO A DIAG FUNCTION - 3267 006740 315 002 015 CALL READC ;GO READ THIS DIAG FUNC,DATA RETURNED IN "TMPB2" - 3268 006743 042 170 040 SHLD ECSAV ;NOW SAVE "H,L" FOR A MINUTE - 3269 - 3270 006746 041 100 040 LXI H,TMPB2 ;POINTER TO DATA JUST READ - 3271 006751 315 045 031 CALL OCTAL ;NOW TURN DATA INTO ASCII OCTAL CHARS - 3272 006754 002 .BYTE 2 ;TWO BYTES RELEVANT DATA - 3273 006755 004 .BYTE 4 ;WANT 4 OCTAL CHARS - 3274 - 3275 006756 052 170 040 LHLD ECSAV ;RESTORE THE "H,L" - 3276 006761 303 332 015 JMP ECLP ;AND CONTINUE TILL READ ALL DIAG FUNCS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-103 -CMDS.M80 *** "EC" CMD *** - - 3278 ;WHEN U GET TO HERE, YOU'VE READ ALL FUNCS, NOW READ & CMP A & B COPIES - 3279 006764 176 ECBEE: MOV A,M ;GET DIAG FUNC FOR AN "A" COPY - 3280 006765 043 INX H ;UPDATE MEM PNTR - 3281 006766 247 ANA A ;DID DIAG FUNC HAVE MINUS SIGN?? - 3282 006767 372 032 016 JM PCRAM ;DONE LIST, JMP IF WAS MINUS - 3283 ;OTHERWISE, GO AND READ THE "A" COPY AGAIN - 3284 006772 315 002 015 CALL READC ;DATA RETURNED IN "TMPB2" - 3285 006775 MOV5B ;MOVE THAT DATA TO 2ND TMP BUFF - (1) 006775 347 RST 4 - (1) 006776 000 .BYTE 0 - 3286 006777 100 040 .ADDR TMPB2 ;SRC OF DATA - 3287 007001 073 040 .ADDR TMPBF2 ; PLACE TO PUT IT - 3288 - 3289 007003 176 MOV A,M ;GET DIAG FUNC FOR A "B" COPY - 3290 007004 043 INX H ;UPDATE PNTR - 3291 007005 315 002 015 CALL READC ;NOW READ A "B" COPY - 3292 - 3293 007010 345 PUSH H ;SAVE "H,L" - 3294 007011 315 033 033 CALL CMP36 ;NOW COMPARE THE "A" AND "B" COPIES - 3295 007014 100 040 .ADDR TMPB2 ;"B" COPY - 3296 007016 073 040 .ADDR TMPBF2 ;"A" COPY - 3297 007020 341 POP H ;RESTORE "H,L" - 3298 007021 312 364 015 JZ ECBEE ;IF CHECKED OK, BACK TO READ NEXT "A/B" COPIES - 3299 - 3300 ;FALL THRU TO VERIFY ERROR IF "Z" NOT SET - 3301 007024 PLINE ECVER ;"?VERIFY ERR" - (1) 007024 337 RST 3 ;PRINT LINE OF CHARS - (1) 007025 104 037 .ADDR ECVER ;BUFF TO PRINT - 3302 007027 303 041 015 JMP RCINT ;GO PRINT ALL CRAM REGS - 3303 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-104 -CMDS.M80 *** "EC" CMD *** - - 3305 ;IF "A/B" COPIES VERIFIED, TIME TO PRINT C-RAM CONTENTS - 3306 007032 076 003 PCRAM: MVI A,03 ;DIAG FUNC TO READ "CURRENT CRAM LOCATION" - 3307 007034 315 002 015 CALL READC ;GO READ CURRENT CRAM LOC.. - 3308 007037 315 327 030 CALL P16. ;PRINT IT - 3309 007042 PSLASH ; AND "/" - (2) 007042 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 007043 057 .BYTE SLASH ;CHAR TO PRINT - 3310 - 3311 ;NOW PRINT THE 32 OCTAL CHARS....... - 3312 007044 006 040 MVI B,32. ;NUM CHARS TO PRINT - 3313 007046 361 PCRLP: POP PSW ;GET A CHAR - 3314 007047 315 010 004 CALL PCHR ;PRINT IT - 3315 007052 005 DCR B ;DOWN COUNT OF CHARS PRINTED - 3316 007053 302 046 016 JNZ PCRLP ;LOOP TILL DONE - 3317 - 3318 007056 PCRLF ;NEED CR-LF - (2) 007056 347 RST 4 - (2) 007057 002 .BYTE 2 - 3319 - 3320 007060 ENDCMD ;THEN OUT - (1) 007060 311 RET ;RETURN TO CALLER - 3321 007061 017 RDLST: .BYTE ^O17 ;READ 84-95 - 3322 007062 016 .BYTE ^O16 ;READ 72-83 - 3323 007063 015 .BYTE ^O15 ;READ 60-71 - 3324 007064 014 .BYTE ^O14 ;READ 48-59 - 3325 007065 012 .BYTE ^O12 ;READ 36-47A - 3326 007066 005 .BYTE ^O5 ;READ 24-35A - 3327 007067 004 .BYTE ^O4 ;READ 12-23 - 3328 007070 000 .BYTE 0 ;READ 0-11 - 3329 007071 377 .BYTE ^O377 ;END BYTE - 3330 007072 012 .BYTE ^O12 ;READ 36-47A - 3331 007073 013 .BYTE ^O13 ;READ 36-47B - 3332 007074 005 .BYTE ^O5 ;READ 24-35A - 3333 007075 006 .BYTE ^O6 ;READ 24-35B - 3334 007076 377 .BYTE ^O377 ;END BYTE - 3335 - 3336 .SBTTL *** "EN" CMD *** - 3337 007077 052 004 040 ENEC: LHLD CRMAD ;GET CURRENT ADDRESS - 3338 007102 043 INX H ;UPDATE IT - 3339 007103 042 004 040 SHLD CRMAD ;PUT IT BACK - 3340 007106 303 310 015 JMP EC1 ;GO TO COMMON CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-105 -CMDS.M80 *** "DC" CMD *** - - 3342 .SBTTL *** "DC" CMD *** - 3343 .SBTTL *** "DN TO DC" CMD *** - 3344 ;CODE USED IN DEPOSIT NEXT FOR THE CRAM - 3345 007111 052 004 040 DNDC: LHLD CRMAD ;GET CURRENT ADDRESS - 3346 007114 043 INX H ;INCREMENT IT - 3347 007115 042 004 040 SHLD CRMAD ;PUT IT BACK - 3348 - 3349 007120 DCCMD: RUN.. ;IS CPU RUNNING?? - (1) 007120 347 RST 4 - (1) 007121 006 .BYTE 6 - 3350 007122 315 242 031 CALL ARG96 ;ASSEMBLE DATA TO DEPOSIT - 3351 007125 322 040 .ADDR CRMTM ;PLACE TO PUT IT - 3352 - 3353 007127 021 302 040 LXI D,CRMBF ;PLACE TO PUT THE RESULTS OF THE CRAM SHUFFLE - 3354 007132 041 322 040 LXI H,CRMTM ;THE OLD 12-BYTE FORMAT WILL ALWAYS BE HERE - 3355 007135 016 004 MVI C,4 ;LOAD "C" WITH A 4 - 3356 - 3357 ;BEGIN THE UNPACKING - 3358 007137 315 075 032 GENLP: CALL PLACE ;LOCAL ROUTINE THAT TAKES 12 BITS OF 24. - 3359 007142 076 003 MVI A,3 ;A SHIFT 24 REQUIRES 3 BYTES OF DATA TO SHIFT - 3360 007144 315 171 031 CALL SHR24 ;SHIFT 12 BITS JUST PACKED INTO OUTER SPACE - 3361 007147 014 .BYTE 12. ;TELL ROUTINE 12 PLACES - 3362 007150 315 075 032 CALL PLACE ;NOW ROUTINE WILL GET 12 MORE BITS..12+12=24 - 3363 - 3364 007153 043 INX H ;UPDATE PNTR 3-BYTES(IE 24 BITS) - 3365 007154 043 INX H - 3366 007155 043 INX H - 3367 - 3368 007156 015 DCR C ;DOWN THE COUNTER(THERE ARE 4 GROUPS OF 24=96) - 3369 007157 302 137 016 JNZ GENLP ;CONTINUE TILL DONW THE 4 GROUPS - 3370 - 3371 007162 315 335 014 CALL CRM.AD ;WRITE THE CRAM ADDRESS - 3372 007165 041 302 040 LXI H,CRMBF ;GET PLACE WHERE INFO WAS JUST PLACED - 3373 - 3374 007170 076 006 MVI A,06 ;NUMBER FOR DEPOSIT NEXT TO USE - 3375 007172 062 033 040 STA DNEXT ;STANDARD PLACE TO KEEP IT - 3376 007175 074 INR A ;SET FUNCTION .EQ. 7(INR WORKS BY LUCK) - 3377 007176 001 010 040 LXI B,CRMFN ;SET AN ADDRESS INTO "B,C" REGISTER,TO USE AS A POINTER - 3378 007201 002 DCLP: STAX B ;SAVE IT IN THE RAM AT LOC "CRMFN" - 3379 - 3380 007202 136 MOV E,M ;GET 8 BITS OF DATA - 3381 007203 043 INX H ;UPDATE PNTR - 3382 007204 126 MOV D,M ;GET 4 MORE BITS OF DATA - 3383 007205 043 INX H ;AND UPDATE PNTR AGAIN - 3384 - 3385 007206 353 XCHG ;NOW "H,L" CONTAINS THE DATA & "D,E" THE PNTR - 3386 007207 315 303 014 CALL WFUNC ;AND DIAG FUNCTION WRT - 3387 007212 353 XCHG ;POINTER BACK TO "H,L" - 3388 - 3389 007213 012 LDAX B ;GET PARTICULAR DIAG FUNC FROM RAM LOC - 3390 007214 075 DCR A ;DOWN TO NEXT - 3391 007215 362 201 016 JP DCLP ;AS LONG AS 0-7, KEEP GOING - 3392 007220 ENDCMD ;NOW ALL DONE - (1) 007220 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-106 -CMDS.M80 *** "SM" CMD *** - - 3394 .SBTTL *** "SM" CMD *** - 3395 ;CODE TO START THE MICRO-CODE AT THE ADDRESS SPECIFIED.. - 3396 ;DEFAULTS TO STARTING AT C-RAM LOC 0 IF NO ADDRESS IS - 3397 ;GIVEN - 3398 007221 332 232 016 SMCMD: JC SM1 ;IF NO ARG, SUPPLY ADDRESS OF 0000 - 3399 - 3400 ;OTHERWISE MUST ASSEMBLE THE GIVEN ADDRESS - 3401 007224 315 257 030 CALL ARG16. ;ASSEMBLE 16-BITS OF ARGUMENT - 3402 - 3403 007227 303 235 016 JMP SM1.5 ;OTHERWISE, CONTINUE NORMALLY - 3404 - 3405 007232 041 000 000 SM1: LXI H,00 ;IF HERE, DESIRE ADDRESS OF 0000 - 3406 007235 042 000 040 SM1.5: SHLD T80DT ;SET ADDR - 3407 - 3408 007240 315 231 005 CALL MRCMD ;RESET THE MACHINE - 3409 - 3410 007243 MOV5B ;SET UP INITIAL DATA - (1) 007243 347 RST 4 - (1) 007244 000 .BYTE 0 - 3411 007245 271 022 .ADDR ONES ;DATA TO BE IS ALL ONES - 3412 007247 047 040 .ADDR DMDAT ;PLACE WHERE IT GOES - 3413 - 3414 007251 021 004 017 LXI D,MAD000 ;GET ADDRESS OF MEM LOC 0 - 3415 007254 315 240 012 CALL DMINT ;"DEPOSIT MEMORY" INTERNAL FORMAT - 3416 - 3417 007257 072 354 040 LDA PARBT ;GET PARITY STUFF - 3418 007262 346 140 ANI ^O140 ;ONLY KEEP A LITTLE BIT - 3419 007264 323 100 OUT RESET ;AND TURN OF ALL PARITY STUFF WHILE WE DO THIS - 3420 - 3421 007266 052 000 040 LHLD T80DT ;GET START ADDRESS OF MICRO-CODE TO "H,L" - 3422 007271 315 340 014 CALL CADWR ;WRITE THE DIAG ADDRESS REG - 3423 - 3424 007274 315 234 014 CALL CSCMD ;START THE CPU CLK FREE RUN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-107 -CMDS.M80 *** "SM" CMD *** - - 3426 007277 315 276 033 HLTCM: CALL DELAY. ;NOW WAIT FOR MICRO-CODE TO REACH HALT LOOP - 3427 007302 377 .BYTE -1 - 3428 007303 315 352 006 CALL CLRUSE ;EXIT FROM USER MODE - 3429 007306 333 300 IN RUNFP ;***** I/O RD 300 ***** - 3430 007310 057 CMA ;AND FIX INVERSION - 3431 007311 346 010 ANI ^O10 ;IS CPU IN THE HALT LOOP??? - 3432 007313 302 325 016 JNZ SMVER ;JUMP IF YES..APPEARED TO START OK - 3433 - 3434 ;FALL TO HERE IF SM10 DID NOT SET HALT LOOP FLAG - 3435 007316 PLINE SMERR ;PRINT ERR MESSAGE - (1) 007316 337 RST 3 ;PRINT LINE OF CHARS - (1) 007317 146 037 .ADDR SMERR ;BUFF TO PRINT - 3436 007321 067 STC ;SET C-BIT TO INDICATE AN ERROR EXIT - 3437 007322 303 376 016 JMP SMFINI ;AND EXIT VIA RESTORE PARITY PATH - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-108 -CMDS.M80 *** "SM" CMD *** - - 3439 007325 SMVER: INTON ;SET INTERAL STATUS FOR THE EXAMINE - (1) 007325 327 RST 2 ;GO SET INTERNAL MODE - 3440 007326 EXAM 0 ;EXAMINE MEM LOC 0(MICRO-CODE STOP CODE) - (1) 007326 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 007331 000 000 .ADDR 0 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 3441 007333 INTOFF ;TURN OFF INTERNAL STATUS - (1) 007333 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 3442 ;IT DID SUCCEED IN SETTING HALT LOOP FLAG, SO MERELY PRINT HALTED - 3443 ;AND THE DATA IN LOCATION 0.. - 3444 ;****SUBROUTINE "STOP CODE" **** - 3445 007334 315 266 032 CALL SETRN ;JUST A LITTLE KLUDGE..CHEAP WAY TO FIX STATE LIGHT - 3446 ; IF PROGRAM EXECUTED A "HALT" WHILE LITES WERE BLINKY - 3447 - 3448 007337 PLINE HLTMS ;PRINT "HALTED" MESSAGE - (1) 007337 337 RST 3 ;PRINT LINE OF CHARS - (1) 007340 116 037 .ADDR HLTMS ;BUFF TO PRINT - 3449 007342 041 012 040 LXI H,EMBUF ;PNTR TO DATA IN LOC 0 - 3450 007345 315 031 031 CALL P18 ;PRINT RIGHT HALF OF 36-BIT DATA - 3451 007350 CLRB CHKHLT ;SET FLAG TO SAY WEVE TYPED HALTED ALREADY - 3452 - 3453 007352 PSPACE ;PRINT A SPACE - (2) 007352 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 007353 040 .BYTE SPACE ;CHAR TO PRINT - 3454 007354 PSPACE ;AND ANOTHER - (2) 007354 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 007355 040 .BYTE SPACE ;CHAR TO PRINT - 3455 007356 PCCOM: INTON ;SET INTERNAL MODE - (1) 007356 327 RST 2 ;GO SET INTERNAL MODE - 3456 007357 EXAM 1 ;EXAMINE WORD WHICH HOLDS THE PC - (1) 007357 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 007362 001 000 .ADDR 1 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 3457 007364 INTOFF ;CLR INTERNAL MODE - (1) 007364 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 3458 007365 PLINE PCMSG ;PRINT "PC/" - (1) 007365 337 RST 3 ;PRINT LINE OF CHARS - (1) 007366 112 037 .ADDR PCMSG ;BUFF TO PRINT - 3459 007370 315 362 030 CALL P36. ;AND PRINT THE PC - 3460 007373 PCRLF ;PRINT CARRIAGE RETURN LINE-FEED - (2) 007373 347 RST 4 - (2) 007374 002 .BYTE 2 - 3461 007375 247 ANA A ;CLEAR THE C-BIT 'CAUSE ALL OK - 3462 - 3463 ;AND BEFORE WE LEAVE,RESTORE THE PARITY STUFF - 3464 007376 072 354 040 SMFINI: LDA PARBT ;GET CURRENT PARITY DEFAULTS - 3465 007401 323 100 OUT RESET ;RESTORE THE PARITY DETECTS - 3466 007403 311 RET ;AND OUT - 3467 007404 ZEROES: - 3468 007404 MAD000: D 0,0,,0,0 ;MEMORY ADDRESS 0 - 3469 ; FROM MEMORY LOCATION 0 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-109 -CMDS.M80 *** "PE" CMD *** - - 3471 .SBTTL *** "PE" CMD *** - 3472 ;COMMAND TO ENABLE VARIOUS PARITY CHECKS NORMALLY MADE BY THE 8080.. - 3473 ;ACCEPTABLE PARITY COMMANDS ARE: - 3474 ; PE 0 ;"DISABLE" ALL PARITY DETECTION - 3475 ; PE 1 ;"ENALE" "DP" PARITY DETECT - 3476 ; PE 2 ;"ENABLE" "CRM" PARITY DETECTION - 3477 ; PE 4 ;"ENABLE" "PE" PARITY DET(CLK FREEZE ON PAR ERR) - 3478 ; PE 7 ;"ENABLE" ALL - 3479 ;BITS ARE WEIGHTED FOR THE THREE TYPES OF PARITY ERRORS - 3480 007411 332 040 017 PECMD: JC PARDIS ;COMMAND REQUIRES ARG - 3481 - 3482 007414 315 257 030 CALL ARG16. ;ASSEMBLE TYPED ARG - 3483 - 3484 007417 175 MOV A,L ;GET NUMBER TYPED INTO THE ACCUM - 3485 007420 346 007 ANI ^O7 ;KEEP ONLY APPROPRIATE BITS - 3486 007422 027 RAL ;BIT 0 INTO BIT1 - 3487 007423 027 RAL ;BIT 0 INTO BIT 2 - 3488 007424 027 RAL ; INTO BIT 3 - 3489 007425 027 RAL ; INTO BIT 4 - 3490 - 3491 007426 157 MOV L,A ;SAVE IN L - 3492 007427 072 354 040 LDA PARBT ;NOW GET CURRENT STATUS - 3493 007432 346 217 ANI ^O217 ;OFF THE OLD CRUMMY PARITY - 3494 007434 265 ORA L ;THROW IN THESE NEW BITS - 3495 - 3496 007435 303 362 013 JMP KS.PAR ;SAVE IN RAM PLACE & WRITE TO KS - 3497 - 3498 - 3499 ;THIS IS THE CODE FOR IF WE WANT TO DISPLAY THE PARITY - 3500 007440 072 354 040 PARDIS: LDA PARBT ;GET THE CURRENT PARITY STATUS - 3501 007443 346 160 ANI ^O160 ;CLR CRUD, JUST SAVING PARITY BITS - 3502 007445 037 RAR ;ROTATE TO JUSTIFY THE BITS AT BIT 0 - 3503 007446 037 RAR - 3504 007447 037 RAR - 3505 007450 037 RAR - 3506 - 3507 007451 315 317 030 P8CRLF: CALL P8BITA ;AND GO PRINT THOSE 8 BITS - 3508 007454 PCRLF ;TERMINATE ALL WITH A CR-LF - (2) 007454 347 RST 4 - (2) 007455 002 .BYTE 2 - 3509 007456 ENDCMD ;ALL DONE - (1) 007456 311 RET ;RETURN TO CALLER - 3510 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-110 -CMDS.M80 *** "EX" CMD *** - - 3512 .SBTTL *** "EX" CMD *** - 3513 ;CONSOLE COMMAND TO EXECUTE A SINGLE SM10 "TEN ORDER" INSTRUCTION - 3514 - 3515 007457 EXCMD: ARG36 ;GO ASSEMBLE THE INSTR TO BE EXECUTED - (1) 007457 347 RST 4 - (1) 007460 010 .BYTE 8 - 3516 007461 012 040 .ADDR EMBUF ;PLACE TO PUT IT - 3517 - 3518 007463 021 012 040 EXINTM: LXI D,EMBUF ;POINTER TO INSTR INTO "D,E" - 3519 - 3520 007466 315 154 033 EXINT: CALL WDATP ;***** I/O WRT 102,104,106,101,112 ***** - 3521 - 3522 007471 076 002 MVI A,2 ;SET BIT FOR "I/O DATA CYCLE" - 3523 007473 323 114 OUT DTARB ;***** I/O WRT 114/2 ***** - 3524 - 3525 007475 076 003 MVI A,3 ;BITS FOR "EXECUTE" & "CONTINUE" - 3526 007477 323 212 OUT CPUCTL ;***** I/O WRT 212/3 ***** - 3527 - 3528 007501 000 DNF: NOP - 3529 007502 000 NOP ;WAIT - 3530 - 3531 007503 333 300 IN RUNFP ;***** I/O RD 300 ***** - 3532 007505 057 CMA ;FIX INVERSION - 3533 007506 346 001 ANI 1 ;IS CONTINUE STILL SET?? - 3534 007510 310 RZ ;IF CLR, WE ARE OK... - 3535 - 3536 ;IF CONT STILL SET, WE HAVE AN ERROR - 3537 007511 PLINE EXMS ;ERR MESSAGE "?DNF-DID NOT FINISH" - (1) 007511 337 RST 3 ;PRINT LINE OF CHARS - (1) 007512 125 037 .ADDR EXMS ;BUFF TO PRINT - 3538 007514 315 352 006 CALL CLRUSE ;EXIT FROM USER MODE - 3539 007517 057 CMA ;ACCUM NOW .EQ. -1 - 3540 007520 247 ANA A ;SET FLAGS, SO "JNZ" WILL JUMP - 3541 007521 311 RET ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-111 -CMDS.M80 *** "ST" CMD *** - - 3543 .SBTTL *** "ST" CMD *** - 3544 ;CONSOLE COMMAND TO ISSUE A START TO THE CPU - 3545 007522 315 121 013 STCMD: CALL LACMD ;FIRST GO ASSEMBLE A LEGAL ADDRESS AT WHICH TO START - 3546 007525 MOV5B ;MOVE TO TMP BUFF SO DONT KILL "MEMAD" - (1) 007525 347 RST 4 - (1) 007526 000 .BYTE 0 - 3547 007527 017 040 .ADDR MEMAD ;SRC - 3548 007531 073 040 .ADDR TMPBF2 ;TEMP PLACE TO KEEP IT - 3549 - 3550 - 3551 007533 STINT: CLRRM DMDAT ;MUST CLR COMM WORDS BEFORE WE START - (1) 007533 347 RST 4 - (1) 007534 012 .BYTE 10. - (1) 007535 054 040 .ADDR DMDAT+5 - 3552 - 3553 007537 DEPOS 31 ;CLEAR LOC 31(KEEP ALIVE WORD) - (1) 007537 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 007540 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 007543 031 000 .ADDR 31 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 3554 007545 DEPOS 32 ;CLEAR LOC 32(THE TTY INPUT WORD) - (1) 007545 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 007546 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 007551 032 000 .ADDR 32 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 3555 007553 DEPOS 33 ;AND 33(THE TTY OUTPUT WORD) - (1) 007553 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 007554 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 007557 033 000 .ADDR 33 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 3556 - 3557 007561 041 140 005 LXI H,^O2540 ;LOAD "H,L" WITH "JRST" OPCODE - 3558 007564 042 076 040 SHLD TMPBF2+3 ;AND PUT INTO THE BUFFER WHERE THE ADDR IS - 3559 - 3560 007567 021 073 040 LXI D,TMPBF2 ;NOW SET POINTER TO THE INSTR - 3561 007572 315 066 017 CALL EXINT ;AND GO HANDLE JUST LIKE AN EXECUTE - 3562 007575 300 RNZ ;IF NON ZERO, THE EXECUTE FAILED - 3563 - 3564 007576 LONG.DELAY 1 ;NOW WAIT - (1) 007576 041 310 000 LXI H,200. * 1 ;SET UP THE TIMING COUNT IN H,L REG - (1) 007601 315 154 014 CALL LTLOOP ;AND GO DELAY ABOUT 1 SECOND FOR EACH (300 COUNT) - 3565 - 3566 ;AND NOW FALL INTO THE "CONTINUE" COMMAND - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-112 -CMDS.M80 *** "CO" CMD *** - - 3568 .SBTTL *** "CO" CMD *** - 3569 ;CONSOLE COMMAND TO ISSUE CONTINUE TO CPU - 3570 007604 315 023 007 COCMD: CALL SETUSE ;ENTER USER MODE - 3571 007607 076 005 MVI A,^O5 ;SET BITS FOR "CONTINUE" & "RUN" - 3572 007611 323 212 OUT CPUCTL ;***** I/O WRT 212/5 ***** - 3573 007613 062 231 040 COINT: STA CHKHLT ;AND GAURANTEE THAT ANY FAST HALTS WILL GET REPORTED - 3574 - 3575 007616 PLINE KSPRMT ;WANT TO TELL USER WHEN WE SWITCH MODES - (1) 007616 337 RST 3 ;PRINT LINE OF CHARS - (1) 007617 053 037 .ADDR KSPRMT ;BUFF TO PRINT - 3576 007621 PLINE U ;SAY "USER MODE" - (1) 007621 337 RST 3 ;PRINT LINE OF CHARS - (1) 007622 012 007 .ADDR U ;BUFF TO PRINT - 3577 - 3578 ;AND JUMP OFF TO COMMON CODE THAT CHECKS THE CONTINUE BIT - 3579 ;AND ERRS IF CONTINUE HAS NOT BEEN CLEARED BY THE CPU - 3580 007624 303 101 017 JMP DNF ;GO.... - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-113 -CMDS.M80 *** "HA" CMD *** - - 3582 .SBTTL *** "HA" CMD *** - 3583 ;CONSOLE COMMAND TO HALT THE SM10 CPU..CPU MICRO-CODE SHOULD ENTER - 3584 ;THE HALT LOOP - 3585 007627 257 HACMD: XRA A ;CLR ACCUM FOR "RUN","EXECUTE" & "CONTINUE" - 3586 007630 323 212 OUT CPUCTL ;*****I/O WRT 212/0 ***** - 3587 007632 303 277 016 JMP HLTCM ;AND FINISHES UP JUST LIKE "SM" COMMAND - 3588 - 3589 .SBTTL *** "SH" CMD *** - 3590 ;COMMAND TO CAUSE THE TOPS20 MONITOR TO BEGIN AN ORDERLY SYSTEM SHUTDOWN - 3591 007635 SHCMD: MOV5B ;MOVE US SOME DATA - (1) 007635 347 RST 4 - (1) 007636 000 .BYTE 0 - 3592 007637 053 001 .ADDR .DSBASE ;FROM HERE (0,,776700) - 3593 007641 047 040 .ADDR DMDAT ;TO HERE. PLACE FOR DEPOSIT TO FIND IT - 3594 - 3595 007643 DEPOS 30 ;AND DO IT - (1) 007643 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 007644 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 007647 030 000 .ADDR 30 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 3596 007651 315 023 007 CALL SETUSE ;NOW BE SURE WE ENTER THE USER MODE AGAIN - 3597 007654 006 200 MVI B,^O200 ;SET SIGN BIT, CAUSES "KEEP-ALIVE" TO BE IGNORED - 3598 007656 315 337 032 CALL STATEM ;GO DO THE STUFF - 3599 007661 377 .BYTE ^O377 ;WITHOUT CHANGING THINGS - 3600 007662 303 213 017 JMP COINT ;AND GO BACK TO USER MODE TO WATCH MONITOR "SHUTDOWN" - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-114 -CMDS.M80 *** "KL" CMD *** - - 3602 .SBTTL *** "KL" CMD *** - 3603 ;KLINIK COMMAND - 3604 007665 332 320 017 KLCMD: JC KLDIS ;DISPLAY CURRENT STATE IF NOTHING TYPED - 3605 - 3606 ;ELSE ASSEMBLE THE TYPED IN ARG - 3607 007670 315 257 030 CALL ARG16. ;PERMIT 16 BIT WIDE TYPE IN - 3608 - 3609 ;NOW VERIFY THAT LOWER HALF IS A LEGAL NUMBER - 3610 007673 175 MOV A,L ;LO HALF TO ACCUM - 3611 007674 247 ANA A ;SET CONDITION CODES - 3612 007675 312 304 017 JZ KLOFF ;IF TYPED ZERO, GO TURN OFF KLINIK - 3613 - 3614 ;NOW FALL THRU HERE IF .EQ. 1, MUST TURN ON THE KLINIK - 3615 007700 062 300 040 STA KLLINE.ON ;SET BIT TO SAY THAT KLINIK IS ON - 3616 007703 311 RET ;AND OUT - 3617 007704 062 300 040 KLOFF: STA KLLINE.ON ;GET HERE IF ACCUM WAS ZERO.. ZAP THE KLINIK FLAG - 3618 - 3619 ;AND FALL INTO CODE TO SEE IF THE END OF KLINIK MUST FORCE A CHANGE IN THE - 3620 ;STATE OF THE KLINIK LINE AND USER. IE IF IN MODE 3, WE MUST FORCE USER - 3621 ;INTO MODE 2 - 3622 007707 072 247 040 LDA CSLMODE ;GET CURRENT MODE - 3623 007712 376 010 CPI .MODE3 ;IS IT MODE 3?? - 3624 007714 314 103 034 CZ SETM2 ;SET MODE 2 IF NOT IN THERE - 3625 007717 311 RET ;AND OUT - 3626 - 3627 ;HERE IF JUST WANT TO DISPLAY CURRENT KLINIK STATE - 3628 007720 072 300 040 KLDIS: LDA KLLINE.ON ;GET CURRENT VALUE - 3629 007723 247 ANA A ;SET FLAGS - 3630 007724 303 375 013 JMP CHOOSE ;GO DISPLAY THE APPROPRIATE MESSAGE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-115 -CMDS.M80 *** "TT" CMD *** - - 3632 .SBTTL *** "TT" CMD *** - 3633 007727 315 023 007 TTCMD: CALL SETUSE ;ON THIS COMMAND WE DESIRE THAT THE CTY ENTER USER MODE - 3634 007732 PLINE KSPRMT ;"KS10>" - (1) 007732 337 RST 3 ;PRINT LINE OF CHARS - (1) 007733 053 037 .ADDR KSPRMT ;BUFF TO PRINT - 3635 007735 PLINE U ; "USR MOD" - (1) 007735 337 RST 3 ;PRINT LINE OF CHARS - (1) 007736 012 007 .ADDR U ;BUFF TO PRINT - 3636 007740 303 103 034 JMP SETM2 ;SIMPLE TRANSFER OF KLINIK LINE TO MODE 2 - 3637 - 3638 - 3639 .SBTTL *** "PW" CMD *** - 3640 ;COMMAND FOR SETTING A PASSWORD INTO THE 8080, SO THAT THE KLINIK LINE - 3641 ;USER WILL HAVE SOMETHING TO MATCH AGAINST WHEN HE TRIES TO GET INTO THE SYSTEM - 3642 007743 076 000 PWCMD: MVI A,0 ;ON ANY PASSWORD COMMAND, FORCE A RE-EXAMINE OF - 3643 007745 062 124 040 STA KLNKSW ;OF THE KLINIK MODE - 3644 - 3645 ;NOW DO THE NORMAL STUFF U NEED TO DO WITH THIS COMMAND - 3646 007750 332 010 020 JC PW.CLR ;IF NO PW TYPED, GO CLR PASSWORD - 3647 - 3648 ;FALL THRU ELSE.. IE MUST SET THE PASSWORD - 3649 007753 052 223 040 PW.SET: LHLD .ARG1 ;GET POINTER TO THE TYPE-IN BUFFER - 3650 007756 021 262 040 LXI D,PASSWORD ;POINT TO THE BUFFER AREA WHERE THE PASSWORD WILL BE - 3651 007761 006 372 MVI B,-6 ;SET A MAX COUNT FOR THE LENGTH OF THE PASSWORD - 3652 - 3653 007763 176 PW.LOOP: MOV A,M ;COPY A PASSWORD CHARACTER TO THE ACCUM - 3654 007764 376 377 CPI EOLCH ;IS IT END OF LINE?? - 3655 007766 310 RZ ;IF YES,SIMPLE RETURN - 3656 - 3657 ;FALL TO HERE IF MORE TO BE MOVED - 3658 007767 315 220 006 CALL UP.LO ;UPPER CASE ONLY - 3659 007772 022 STAX D ;MOVE A CHARACTER TO THE SAVE BUFFER - 3660 007773 023 INX D ;UPDATE DESTINATION POINTER - 3661 007774 043 INX H ;UPDATE SOURCE POINTER - 3662 007775 004 INR B ;UPDATE CHARACTER COUNT - 3663 007776 302 363 017 JNZ PW.LOOP ;STAY IN THE LOOP - 3664 - 3665 ;FALL THRU WHEN DONE 6 CHRACTERS.. THAT HAD BETTER BE ALL, ELSE ERROR - 3666 010001 176 MOV A,M ;GET 7TH CHARACTER - 3667 010002 376 377 CPI EOLCH ;IT BETTER BE END - 3668 010004 310 RZ ;IF YES, WAS END OF LINE, THEN OK TO RETURN - 3669 - 3670 ;FALL THRU WHEN USER TYPED TOO MANY CHARACTERS - 3671 010005 PLINE PWLEN ;ERR MESSAGE - (1) 010005 337 RST 3 ;PRINT LINE OF CHARS - (1) 010006 344 037 .ADDR PWLEN ;BUFF TO PRINT - 3672 010010 PW.CLR: CLRRM PASSWORD+1 ;CLEAR 5 BYTES OF THE 6 BYTE BUFFER - (1) 010010 347 RST 4 - (1) 010011 012 .BYTE 10. - (1) 010012 270 040 .ADDR PASSWORD+1+5 - 3673 010014 053 DCX H ;POINTER CAME OUT GOOD - 3674 010015 066 000 MVI M,0 ;CLR THE 6TH BYTE OF THE BUFFER - 3675 010017 311 RET ;THAT'S ALL - 3676 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-116 -CMDS.M80 *** "MK" & "UM" CMD *** - - 3678 .SBTTL *** "MK" & "UM" CMD *** - 3679 ;CONSOLE COMMAND TO MARK AND UMARK SPECIFIED MICRO-CODE LOCATIONS - 3680 010020 016 000 UMCMD: MVI C,0 ;WE ARE CLEARING THE MARK BIT.. - 3681 010022 303 027 020 JMP MRKCM ;AND GO SAVE IT AS A FLAG FOR WHAT WE ARE DOING - 3682 - 3683 010025 016 001 MKCMD: MVI C,1 ;A BIT SAYS WE ARE SETTING THE MARK BIT - 3684 010027 305 MRKCM: PUSH B ;SAVE "B,C", IT HAS DATA FOR SET OR CLEAR - 3685 010030 RUN.. ;IS CPU RUNNING?? - (1) 010030 347 RST 4 - (1) 010031 006 .BYTE 6 - 3686 010032 315 332 013 CALL LCCMD ;"C-BIT" IS CLR..GO ASSEMBLE A LEGAL RAM-ADDRESS - 3687 010035 315 335 014 CALL CRM.AD ;SET DIAGNOSTIC ADDRESS REG - 3688 010040 315 205 013 CALL CP1 ;GIVE SINGLE PULSE TO GET DATA WHERE I CAN READ - 3689 - 3690 010043 076 017 MVI A,^O17 ;GET FUNCTION READ FOR CRAM DATA THAT INCLUDES MRK - 3691 010045 315 002 015 CALL READC ;DO THE DIAGNOSTIC FUNCTION READ - 3692 010050 315 335 014 CALL CRM.AD ;SET DIAGNOSTIC ADDRESS REG - 3693 010053 021 100 040 LXI D,TMPB2 ;GET PNTR TO DATA THAT HAS THE MARK BIT - 3694 010056 301 POP B ;GET INSTR TYPE - 3695 - 3696 010057 032 LDAX D ;GET THE ACTUAL DATA - 3697 010060 346 376 ANI ^O376 ;CLEAR BIT 0 - 3698 010062 261 ORA C ;NOW EITHER SET OR CLEAR THE BIT - 3699 - 3700 010063 022 MRKRT: STAX D ;BUT DATA BACK, NEW MARK BIT STATUS - 3701 - 3702 010064 315 207 033 CALL ADATP ;WRITE DATA TO BUS REG - 3703 - 3704 010067 076 007 MVI A,7 ;NOW WISH TO DO FUNCTION WRITE 7 - 3705 010071 062 010 040 STA CRMFN ;SET INTO FUNC WORD - 3706 - 3707 010074 303 311 014 JMP WFNC1 ;AND FINISH UP BY WRITING DATA BACK - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-117 -CMDS.M80 *** "ZM" CMD *** - - 3709 .SBTTL *** "ZM" CMD *** - 3710 ;CONSOLE COMMAND TO ZERO THE SM10 MOS MEMORY.. - 3711 010077 ZMCMD: CLRRM MEMAD ;CLEAR MEMORY ADDRESS BUFFER(TO START AT 0) - (1) 010077 347 RST 4 - (1) 010100 012 .BYTE 10. - (1) 010101 024 040 .ADDR MEMAD+5 - 3712 010103 076 002 MVI A,2 ;BITS TO SAY WRITE TYPE FUNCTION - 3713 010105 062 023 040 STA MEMAD+4 ;WRITE INTO THE BUFFER - 3714 - 3715 010110 CLRRM DMDAT ;DATA TO DEPOSIT IS ALL ZEROES - (1) 010110 347 RST 4 - (1) 010111 012 .BYTE 10. - (1) 010112 054 040 .ADDR DMDAT+5 - 3716 - 3717 010114 INTON ;INTERNAL MODE ON - (1) 010114 327 RST 2 ;GO SET INTERNAL MODE - 3718 010115 315 231 012 CALL DM1 ;DEPOSIT ZEROES INTO FIRST LOCATION - 3719 010120 315 066 033 ZM1: CALL INC36 ;TO NEXT ADDRESS - 3720 010123 017 040 .ADDR MEMAD ;HERE IT IS - 3721 - 3722 010125 021 017 040 LXI D,MEMAD ;DO PART OF THE DEPOSIT HERE, FOR SPEED SAKE - 3723 010130 315 207 033 CALL ADATP ;LOAD UP BUS REGS WITH THE DESIRED DATA - 3724 010133 076 004 MVI A,4 ;NOW FUNCTION TYPE BIT INTO ACCUM - 3725 010135 323 115 OUT BUSARB ;***** I/O WRT ***** - 3726 - 3727 010137 315 275 012 CALL DMGO ;NOW GO DO THE DEPOSIT - 3728 - 3729 ;AND CHECK TO SEE IF GOT A NXM - 3730 010142 072 154 040 LDA ERRCD ;GET ERROR CODE.. - 3731 010145 247 ANA A ;CHECK IF SET - 3732 010146 312 120 020 JZ ZM1 ;IF NO ERRORS YET, KEEP GOING - 3733 - 3734 ;FALL THRU WHEN HAD "NO DATA ACNOWLEDGE" ERROR - 3735 010151 INTOFF ;CLEAR INTERNAL MODE - (1) 010151 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 3736 010152 ENDCMD ;AND DONE - (1) 010152 311 RET ;RETURN TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-118 -CMDS.M80 *** "RP" CMD *** - - 3738 .SBTTL *** "RP" CMD *** - 3739 - 3740 ;NOTE: THE LIST OF SAVED COMMAND DISPATCHES IS NOT IN THE NORMAL 8080 - 3741 ;ADDRESS FORMAT..IE THE COMMAND LIST IS SAVE IN PAIRS OF BYTES AS - 3742 ;HI ORDER PIECE FIRST.. - 3743 ;LO ORDER PIECE SECOND.. - 3744 010153 322 200 020 RPCMD: JNC RP1 ;IF ARG, BEGIN AT A SPECIAL PLACE - 3745 010156 257 XRA A ;CLR ACCUM - 3746 010157 062 160 040 RP0: STA RPCNTR ;THERE IS NO REPEAT COUNT - 3747 010162 315 322 020 CALL RPFOO ;IN THE BEGINNING YOU MUST RESET THE POINTERS - 3748 010165 257 XRA A ;CLR ACCUM - 3749 010166 062 157 040 STA RPEND ;CLR THE REPEAT KILLER - 3750 010171 057 CMA ;MAKE ACCUM .EQ. -1 - 3751 010172 062 213 040 STA RPTON ; THAT REPEAT FUNCTION IS TURNED ON - 3752 010175 303 224 020 JMP RP2 ;CONTINUE... - 3753 - 3754 010200 315 257 030 RP1: CALL ARG16. ;FETCH THE ARG THAT WAS TYPED - 3755 - 3756 010203 174 MOV A,H ;IT MUST ONLY BE 256 OR LESS - 3757 010204 247 ANA A ;SET PROCESSOR FLAGS - 3758 010205 302 163 032 JNZ KILNM ;IF .GT. 256, THEN BAD NUMBER - 3759 - 3760 ;FALL THRU IF ACCUM 0 - 3761 010210 175 MOV A,L ;GET REAL ARG INTO ACCUM - 3762 010211 074 INR A ;SET ACCUM 1 GREATER THAN ACTUAL - 3763 010212 303 157 020 JMP RP0 ;CONTINUE BY INITING FLAGS - 3764 - 3765 010215 072 157 040 RPTRTN: LDA RPEND ;NEXT THING IS TO SEE IF TIME TO STOP REPEAT - 3766 010220 247 ANA A ;TEST DATA - 3767 010221 302 262 020 JNZ RP.OUT ;AND END THE REPEAT IF "END" FLAG IS SET - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-119 -CMDS.M80 *** "RP" CMD *** - - 3769 010224 052 211 040 RP2: LHLD RPLST ;GET POINTER TO COMMAND DISPATCH LIST - 3770 010227 176 MOV A,M ;CHECK BYTE..MAKE SURE ITS NOT THE END-OF-LIST - 3771 010230 074 INR A ;IF IT WAS -1, NOW ITS A ZERO - 3772 010231 302 267 020 JNZ RP4 ;AND GO BACK TOO - 3773 - 3774 010234 072 160 040 LDA RPCNTR ;CHECK IF THIS IS A COUNTED REPEAT - 3775 010237 314 322 020 CZ RPFOO ;IT WAS END OF LIST IF U GOT HERE, SO FIX POINTERS - 3776 010242 247 ANA A ;SET FLAGS - 3777 010243 312 215 020 JZ RPTRTN ;IF .EQ. 0 NO COUNT ON THE REPEAT - 3778 - 3779 010246 075 DCR A ;THERE IS A COUNTER, DOWN IT - 3780 010247 062 160 040 STA RPCNTR ;SAVE NEW COUNT - 3781 010252 376 001 CPI 1 ;SEE IF AT BOTTOM LINE - 3782 010254 304 322 020 CNZ RPFOO ;IF A COUNTED REPEAT, FIX END OF LIST ONLY IF MORE TO DO - 3783 010257 302 215 020 JNZ RPTRTN ;JUMP IF NO - 3784 - 3785 010262 257 RP.OUT: XRA A ;CLEAR ACCUM PRIOR TO LEAVING - 3786 010263 062 213 040 STA RPTON ;TURN OFF THE "ON" FLAG - 3787 010266 311 RET ;AND HERE IF YES - 3788 - 3789 010267 126 RP4: MOV D,M ;IF IT WAS OK.. START ASSEMBLING THE DISPATCH - 3790 010270 043 INX H ;UPDATE TO LO ORDER PIECE - 3791 010271 136 MOV E,M ;AND DISPATCH IS NOW IN "D,E" - 3792 010272 043 INX H ;UPDATE POINTER - 3793 010273 042 211 040 SHLD RPLST ;SAVE POINTER TO WHERE WE ARE IN CMD LIST - 3794 - 3795 010276 041 340 001 LXI H,NULLW ;"H,L" GETS PLACE WE WANT TO RETURN TO - 3796 010301 345 PUSH H ;PLACE ON STACK SO THAT "RET" INS COMES HERE - 3797 010302 353 XCHG ;DISPATCH ADDRESS INTO "H,L" - 3798 - 3799 010303 174 MOV A,H ;GET HI ORDER PIECE OF ADDR TO SEE IF ARG - 3800 010304 247 ANA A ; WAS TYPED WITH THIS COMMAND..SET FLAGS - 3801 010305 362 314 020 JP RPGO ;IF SIGN BIT CLR, CMD GOT NO ARG - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-120 -CMDS.M80 *** "RP" CMD *** - - 3803 ;OTHERWISE MUST SET THE C-BIT TO TELL CMD TO LOOK FOR ARG - 3804 010310 346 177 ANI ^O177 ;CLR SIGN BIT - 3805 010312 147 MOV H,A ;PUT IT BACK FOR CORRECT DISPATH - 3806 010313 067 STC ;SET C-BIT IF NECCESSARY - 3807 010314 077 RPGO: CMC ;SET C-BIT FOR THIS COMMAND TO SEE - 3808 010315 351 PCHL ;AND GO DO IT.. - 3809 - 3810 ;IF REACHED END OF THE DISPATCH LIST, THEN THIS CODE RESETS - 3811 ;THE POINTER BACK TO THE BEGINNING OF THE LIST - 3812 010316 057 RPNEW: CMA ;RPFOO DOESNT TOUCH ACCUM, SET ACCUM TO -1 - 3813 010317 062 131 040 STA CMDS.. ;NOW ZAP THE FIRST IN LINE FLAG - 3814 010322 041 001 041 RPFOO: LXI H,RPINI ;BUFFER BEGINNING ADDRESS - 3815 010325 042 211 040 SHLD RPLST ;PUT BACK INTO RAM - 3816 010330 041 032 041 LXI H,RPTBFI ;POINTER TO DATA BUFFER - 3817 010333 042 207 040 SHLD RPBUFS ;RESET INTO HOLDING LOCATION - 3818 010336 311 RET ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-121 -CMDS.M80 *** "DS" CMD *** - - 3820 .SBTTL *** "DS" CMD *** - 3821 ;COMMAND TO SELECT NON DEFAULT DISK UNIT AND UNIBUS ADAPTERS FOR BOOTING - 3822 ;FROM DISK - 3823 010337 DSCMD: PLINE Q.UBA ;MESSAGE TO ASK FOR "UNIBUS ADAPTER" TO BE USED - (1) 010337 337 RST 3 ;PRINT LINE OF CHARS - (1) 010340 252 037 .ADDR Q.UBA ;BUFF TO PRINT - 3824 010342 315 173 021 CALL PICKUP ;GO FETCH THE RESPONSE THAT WAS TYPED - 3825 010345 332 360 020 JC DS1 ;IF NOTHING TYPED, LEAVE UBA AS CURRENTLY SELECTED - 3826 - 3827 ;FALL INTO HERE IF A NEW UBA NUMBER WAS TYPED - 3828 010350 072 100 040 LDA TMPB2 ;GRAB THE NEW UBA NUMBER AS TYPED - 3829 010353 007 RLC ;THE UBA NUMBER IS JUSTIFIED "*4" IN A BYTE - 3830 010354 007 RLC ;TAKES 2 ROTATES TO GET IT JUSTIFIED - 3831 010355 062 357 040 STA DSKUBA ;AND SAVE THE NEW VALUE IN THE RAM - 3832 - 3833 010360 DS1: PLINE Q.RH ;ASK FOR AN RH11 TO USE - (1) 010360 337 RST 3 ;PRINT LINE OF CHARS - (1) 010361 261 037 .ADDR Q.RH ;BUFF TO PRINT - 3834 010363 315 173 021 CALL PICKUP ;GET WHAT WAS TYPED - 3835 010366 332 377 020 JC DS2 ;IF NOTHING TYPED, DO NOTHING - 3836 - 3837 010371 MOV5B ;NOW SAVE THIS NEW DISK BASE - (1) 010371 347 RST 4 - (1) 010372 000 .BYTE 0 - 3838 010373 100 040 .ADDR TMPB2 ;THIS IS WHERE THE DATA SHOULD BE SITTING - 3839 010375 374 040 .ADDR DSBASE ;THIS IS WHERE WE WILL KEEP IT - 3840 - 3841 010377 DS2: PLINE Q.UNIT ;ASK FOR A UNIT NUMBER TO BOOT FROM - (1) 010377 337 RST 3 ;PRINT LINE OF CHARS - (1) 010400 273 037 .ADDR Q.UNIT ;BUFF TO PRINT - 3842 010402 315 173 021 CALL PICKUP ;GO FETCH WHAT WAS TYPED - 3843 010405 330 RC ;IF NOTHING TYPED, THEN ALL DONE. RETURN FROM THIS CMD - 3844 - 3845 ;FALL TO HERE IF A UNIT WAS TYPED..GO SET THE UNIT TO BE USED - 3846 010406 072 100 040 LDA TMPB2 ;GET NUMBER TYPED FOR THE NEW UNIT - 3847 010411 062 132 040 STA UNITNM ;SET IT INTO RAM AS THE NEW VALUE - 3848 010414 311 RET ;ALL DONE THIS COMMAND.... - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-122 -CMDS.M80 *** "MS" CMD *** - - 3850 .SBTTL *** "MS" CMD *** - 3851 ;COMMAND TO SELECT WHAT MAGTAPE TO BOOT FROM - 3852 010415 MSCMD: PLINE Q.UBA ;ASK FOR A UNIBUS ADAPTER TO LOAD FROM - (1) 010415 337 RST 3 ;PRINT LINE OF CHARS - (1) 010416 252 037 .ADDR Q.UBA ;BUFF TO PRINT - 3853 010420 315 173 021 CALL PICKUP ;GET WHAT WAS TYPED - 3854 010423 332 036 021 JC MS1 ;IF NOTHING, LEAVE UBA ALONE.. GO GET THE NEXT THING - 3855 - 3856 ;FALL INTO HERE IF A NEW UBA WAS SELECTED - 3857 010426 072 100 040 LDA TMPB2 ;GET THE NEW UBA TYPED - 3858 010431 007 RLC ;UBA NUMBERS MUST BE JUSTIFIED ON BYTE BOUNDARY *4 - 3859 010432 007 RLC ;TAKES TWO SHIFTS TO SET THE UBA NUMBER - 3860 010433 062 356 040 STA MTAUBA ;SAVE THE NEW UBA VALUE IN THE RAM - 3861 - 3862 010436 MS1: PLINE Q.RH ;ASK FOR A NEW RH11 TO USE - (1) 010436 337 RST 3 ;PRINT LINE OF CHARS - (1) 010437 261 037 .ADDR Q.RH ;BUFF TO PRINT - 3863 010441 315 173 021 CALL PICKUP ;FETCH WHAT WAS TYPED - 3864 010444 332 055 021 JC MS1.5 ;IF NOTHING TYPED, THEN DO NOTHING - 3865 - 3866 010447 MOV5B ;IF SOMETHING TYPED, GET IT FROM THE BUFFER - (1) 010447 347 RST 4 - (1) 010450 000 .BYTE 0 - 3867 010451 100 040 .ADDR TMPB2 ;PLACE WHERE THE STUFF WAS PUT - 3868 010453 367 040 .ADDR MTBASE ;PLACE WHERE WE KEEP THE MAGTAPE BASE REG - 3869 010455 MS1.5: PLINE Q.TCU ;GO ASK FOR A UNIT NUMBER - (1) 010455 337 RST 3 ;PRINT LINE OF CHARS - (1) 010456 303 037 .ADDR Q.TCU ;BUFF TO PRINT - 3870 010460 315 173 021 CALL PICKUP ;GO SEE WHAT WAS TYPED - 3871 010463 332 074 021 JC MS2 ;IF NOTHING TYPE, LEAVE VALUE ALONE.. GO AROUND THIS. - 3872 - 3873 ;FALL TO HERE IF NEED TO SET A NEW UNIT NUMBER - 3874 010466 072 100 040 LDA TMPB2 ;GET WHAT WAS TYPED - 3875 010471 062 137 040 STA TAPEUNIT ;SET IN THE NEW UNIT NUMBER - 3876 - 3877 010474 MS2: PLINE Q.DEN ;NOW GO SEE WHAT DENSITY TO SET FOR THE MAGTAPE - (1) 010474 337 RST 3 ;PRINT LINE OF CHARS - (1) 010475 312 037 .ADDR Q.DEN ;BUFF TO PRINT - 3878 010477 315 205 021 CALL INBUF ;UPDATE BUFFER POINTER. THIS CASE IS DIFFERENT THAN - 3879 ;THE OTHERS.. WE NEED TO EXAMINE ASCII. NOT OCTAL - 3880 010502 332 144 021 JC MS3 ;BUT IF NOTHING TYPED, GO ASK FOR A NEW SLAVE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-123 -CMDS.M80 *** "MS" CMD *** - - 3882 ;FALL THRU IF NEED TO SET A DENSITY.... - 3883 ;NOW H,L REG POINTS TO THE STRING JUST TYPED IN - 3884 010505 345 PUSH H ;SAVE POINTER TO THE TYPED IN BUFFER - 3885 010506 021 162 021 LXI D,EIGHT0 ;GET POINTER TO THE "800" LIST - 3886 010511 315 313 033 CALL STRCMP ;NOW DO A STRING COMPARE - 3887 010514 302 125 021 JNZ S16CHK ;IF WAS NOT AN "800", SEE IF ITS A "1600" - 3888 - 3889 ;OK, IT WAS 800..NOW SET UP THE CHANNEL DATA TO SAY 800 BPI TAPE - 3890 010517 076 002 MVI A,2 ;A 2 IS THE CORRECT CODE FOR 800 BPI - 3891 010521 341 POP H ;IF "800" MATCHED, THEN CLEAN UP THE STACK - 3892 010522 303 141 021 JMP MS2.5 ;GO TO NEXT CHECK - 3893 - 3894 010525 341 S16CHK: POP H ;GET POINTER TO THE TYPED IN STUFF - 3895 010526 021 166 021 LXI D,SIXTN ;MATCH AGAINST "1600" - 3896 010531 315 313 033 CALL STRCMP ;DO THE STRING COMPARE - 3897 010534 302 163 032 JNZ KILNM ;IF WAS NOT 1600, THEN IT WAS BAD - 3898 - 3899 ;IT WAS 1600, SO SET THE RIGHT THING FOR TAPE BPI - 3900 010537 076 004 MVI A,4 ;THIS IS THE CODE FOR 1600 BPI - 3901 010541 062 363 040 MS2.5: STA DEN.SLV+1 ;SET THE BYTE IN THE CHANNEL DATA WORD - 3902 - 3903 010544 MS3: PLINE Q.SLV ;ASK FOR A NEW SLAVE DEVICE - (1) 010544 337 RST 3 ;PRINT LINE OF CHARS - (1) 010545 322 037 .ADDR Q.SLV ;BUFF TO PRINT - 3904 010547 315 173 021 CALL PICKUP ;FETCH WHAT WAS TYPED - 3905 010552 330 RC ;IF NOTHING TYPED, THEN WE ARE ALL DONE - 3906 - 3907 ;ELSE FALL TO HERE TO GET THE SLAVE - 3908 010553 072 100 040 LDA TMPB2 ;GET THE NUMBER - 3909 010556 062 362 040 STA DEN.SLV ;SET THE BYTE AS REQUIRED - 3910 010561 311 RET ;AND ALL DONE - 3911 010562 070 060 060 EIGHT0: .ASCIZ /800/ ;FOR 800 BPI TAPES - 3912 010566 061 066 060 SIXTN: .ASCIZ /1600/ ;STRING FOR 1600 BPI TAPES - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-124 -CMDS.M80 *** "MS" CMD *** - - 3914 ;SOME SUBROUTINES FOR USE BY THE DEVICE SELECT COMMANDS - 3915 ;FIRST A ROUTINE TO READ IN A NUMBER TYPED IN ANSWER TO AN 8080 QUESTION - 3916 ;AND SAVE THE NUMBER TYPED IN THE 36 BIT BUFFER "TMPB2". RETURNS C-BIT CLEAR - 3917 ;IF A NUBER WAS GATHERED AND STORED IN "TMPB2". RETURNS C-BIT SET IF NOTHING - 3918 ;WAS TYPED. - 3919 010573 315 205 021 PICKUP: CALL INBUF ;SET UP THE INPUT BUFFER TO THE CURRENT TYPEIN. - 3920 010576 330 RC ;RETURNS HERE WITH C-BIT SET IF NOTHING TYPED - 3921 - 3922 ;GET HERE IF SOMETHING WAS TYPED.. GO GET IT AND PUT IT IN "TMPB2" - 3923 010577 ARG36 ;GATHER A 36-BIT ARGUMENT - (1) 010577 347 RST 4 - (1) 010600 010 .BYTE 8 - 3924 010601 100 040 .ADDR TMPB2 ;PUT IT IN THIS BUFFER - 3925 010603 257 XRA A ;CLEAR C-BIT BECAUSE ALL WAS OK. - 3926 010604 311 RET ;ALL DONE - 3927 - 3928 ;SUBROUTINE TO FIX UP THE BUFFER POINTERS IN THE INPUT BUFFER - 3929 010605 041 204 040 INBUF: LXI H,EOL ;GET POINTER TO END-OF-LINE COUNTER - 3930 010610 065 DCR M ;SO CAN DECREMENT - 3931 010611 315 163 010 CALL BFRST ;RESET TTY INPUT POINTERS - 3932 010614 052 215 040 LHLD BUF. ;FIND THE BEGINNING OF BUFFER - 3933 010617 042 223 040 SHLD .ARG1 ;AND SET IT AS THE POINTER TO THE FIRST ARG - 3934 - 3935 010622 041 230 021 LXI H,INRDY ;PASS A RETURN ADDRESS IN H,L - 3936 010625 303 340 001 JMP NULLW ;ENTER TTY INPUT WAIT - 3937 - 3938 010630 052 223 040 INRDY: LHLD .ARG1 ;GET POINTER TO THE START OF THE NEW DATA - 3939 010633 315 256 033 FNDARG: CALL SEPCHR ;EAT UP ANY NO-OP SEPARATORS - 3940 010636 042 223 040 SHLD .ARG1 ;REPLACE THE POINTER - 3941 010641 303 355 032 JMP EOCML ;CHECK IF AT END-OF-LINE. C-SET IF YES(IE NO ARG) - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-125 -CMDS.M80 *** "BT" CMD *** - - 3943 .SBTTL *** "BT" CMD *** - 3944 000077 INDIRECT=^O77 - 3945 010644 BOOT: PLINE BTMSG1 ;INCLUDE A MESSAGE SO THAT USERS KNOW U R BOOTING - (1) 010644 337 RST 3 ;PRINT LINE OF CHARS - (1) 010645 140 037 .ADDR BTMSG1 ;BUFF TO PRINT - 3946 010647 BTAUT: PCRLF ;AND KEEP IT ON ONE LINE - (2) 010647 347 RST 4 - (2) 010650 002 .BYTE 2 - 3947 010651 076 010 MVI A,^O10 ;BIT 32 IN TENLAND TO SAY THIS WAS A BOOT BUTTON LOAD - 3948 010653 062 255 040 STA GOCODE ;SAVE IN THE "GO CODE" PLACE - 3949 010656 067 STC ;FALL THRU TO A "BT" - 3950 - 3951 010657 315 341 021 BTCMD: CALL BTCHOICE ;GO SELECT MONITOR OR DIAG PRE-BOOT - 3952 010662 315 276 022 BT.SRC: CALL MICROP ;READ THE PAGE OF FILE POINTERS INTO MEMORY @1000 - 3953 - 3954 ;WHEN GET TO HERE, THE PAGE HAS BEEN READ IN. - 3955 010665 332 210 032 JC C.BTERR ;ERROR IN BOOT PROCESS DURING MICRO-CODE LOAD - 3956 - 3957 010670 315 056 023 CALL DMEM2CRAM ;LOAD DATA FROM MEMORY INTO CRAM - 3958 - 3959 - 3960 ;FALL THRU IF DONE THE CRAM LOADING PORTION - 3961 ;NOW MUST READ IN THE BOOT CODE ITSELF,START THE SM10 MICRO-CODE - 3962 ;AND THEN START THE BOOT PROGRAM AT ADDRESS 1000 - 3963 ;NOW SET UP DISK POINTERS TO POINT TO BOOT BLOCK OF DISK, - 3964 ;IN ORDER THAT WE LOAD THE MONITOR BOOT - 3965 010673 315 312 021 LB.GO: CALL LBINT ;GO READ-IN THE APPROPRIATE BOOTSTRAP - 3966 010676 LB.GO1: MOV5B ;SET UP A START ADDRESS - (1) 010676 347 RST 4 - (1) 010677 000 .BYTE 0 - 3967 010700 257 022 .ADDR MA1000 ;MEMORY ADDRESS 1000 FOR STARTING PROGRAM - 3968 010702 073 040 .ADDR TMPBF2 ;SET UP SO START COMMAND CAN FIND THE ADDRESS - 3969 - 3970 ;TEMP CODE FOR FIGURING OUT HOW TO MAKE THE INTERNAL START CODE WORK - 3971 010704 303 133 017 JMP STINT ;GO START THE MACHINE WITH MONITOR BOOT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-126 -CMDS.M80 *** "LB" CMD *** - - 3973 .SBTTL *** "LB" CMD *** - 3974 010707 315 341 021 LBCMD: CALL BTCHOICE ;IF ARG GIVEN, GO SET UP A CHOICE FOR THE BOOTING - 3975 010712 021 000 002 LBINT: LXI D,^O1000 ;ALL POINTERS START AT 1000 - 3976 010715 072 172 040 LDA RM100 ;GET THE OFFSET AS SELECTED(MON OR DIAG PRE-BOOT) - 3977 010720 203 ADD E ;ADD LO ORDER TO THE OFFSET - 3978 010721 137 MOV E,A ;PUT IT BACK - 3979 010722 315 301 022 CALL FILEINIT ;READ IN POINTERS TO THE "PRE-BOOTS" - 3980 - 3981 010725 332 242 032 JC L.BTERR ;ERROR IN LOADING THE PRE-BOOT - 3982 - 3983 010730 315 362 021 CALL BT.GO ;START UP THE MICRO-CODE & INTERNAL OFF - 3984 ;NOW PASS ADDRESSES OF RH BASE & DRIVE # TO THE PRE-BOOT PROGRAMS - 3985 010733 052 132 040 INFOBT: LHLD UNITNM ;UNIT NUMBER INTO HL REGISTER - 3986 010736 303 107 022 JMP PASSSRC ;ROUTINE WHICH WRITES LOCS 36,37 & 40 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-127 -CMDS.M80 *** "LB" CMD *** - - 3988 ;CUTE LITTLE ROUTINE FOR SELECTING WHICH BOOT TO LOAD - 3989 010741 332 355 021 BTCHOICE: JC LOAD4 ;IF NO ARG, SET FOR "BOOT>" INPUT - 3990 - 3991 010744 315 257 030 CALL ARG16. ;ASSEMBLE THE ARG - 3992 ;AS LONG AS IT WAS A NUMBER, WE WILL LOAD THE DIAG BOOT - 3993 010747 076 006 MVI A,6 ;A 6 IS THE OFFSET FOR THE DIAG PRE-BOOT - 3994 010751 062 172 040 EXIT4: STA RM100 ;SAVE IT - 3995 010754 311 RET - 3996 010755 076 004 LOAD4: MVI A,4 ;PASS A 4.. TO SAY LOAD MONITOR BOOT - 3997 010757 303 351 021 JMP EXIT4 ;AND COMMON EXIT - 3998 - 3999 ;ROUTINE TO START UP THE MACHINE(KS10), AND RE-ESTABLISH THE PARITY DEFAULT - 4000 010762 315 232 016 BT.GO: CALL SM1 ;START THE MICRO-CODE - 4001 010765 332 206 032 JC D.BTERR ;IF MICRO-CODE DOES NOT START - 4002 010770 BT.GO1: INTOFF ;INTERNAL MODE OFF - (1) 010770 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 4003 - 4004 010771 076 174 MVI A,DEFLTE ;GET MACHINE DEFAULT VALUE FOR ENABLES - 4005 010773 315 362 013 CALL KS.PAR ;SET THEM INTO THE RAM & WRITE INTO KS - 4006 010776 076 020 MVI A,TRPDEF ;GET MACHINE DEFAULT FOR TRAP ENABLES - 4007 011000 062 355 040 TP.SET: STA TRAPEN ;SET DEFAULT INTO THE RAM - 4008 011003 323 205 OUT DIAG ;***** I/O WRT 205/TRAPS ENABLE ***** - 4009 011005 311 RET ;AND OUT - 4010 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-128 -CMDS.M80 *** "MT" CMD *** - - 4012 .SBTTL *** "MT" CMD *** - 4013 011006 042 221 040 MTCMD: SHLD CMD.. ;SAVE WHAT COMMAND THIS IS, SO RETRYS WILL WORK - 4014 011011 315 237 022 CALL MTSETUP ;GO TO SOME COMMON CODE - 4015 011014 076 071 MVI A,READ.TAPE ;GET THE COMMAND EXECUTION CODE FOR THE TAPE CMD - 4016 011016 315 011 025 CALL MTXFR ;AND READ-IN THE MICRO-CODE FROM TAPE - 4017 011021 322 032 022 JNC MT.1 ;NO NEED TO CHECK IF FATAL ERR IF ALL OK - 4018 - 4019 011024 315 167 022 CALL NONFATAL ;WAS AN ERROR, GO SEE WHAT KIND - 4020 011027 302 214 032 JNZ A.BTERR ;ERR TYPE "A" IF INITIAL READ FAILS - 4021 - 4022 011032 076 002 MT.1: MVI A,MT.BIT ;SET ACCUM .EQ. MAGTAPE BIT - 4023 011034 315 060 023 CALL MEM2CRAM ;LOAD MICRO-CODE FROM MEMORY TO "CRAM" SPACE - 4024 - 4025 011037 315 050 022 CALL MBINT ;NOW LOAD IN THE PRE-BOOT PROGRAM - 4026 011042 315 362 021 CALL BT.GO ;START THE MICRO-CODE,REPLACE PARITY & TRAP DEFAULTS - 4027 011045 303 276 021 JMP LB.GO1 ;AND PROCEED TO START THINGS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-129 -CMDS.M80 *** "MT" CMD *** - - 4029 ;NOW MUST DO A RE-WIND.. SKIP FIRST FILE(MICRO-CODE), THEN READ-IN THE - 4030 ;SECOND FILE(THE PRE-BOOT) - 4031 011050 076 031 MBINT: MVI A,SKP.TAPE ;GRAB A SKIP COMMAND - 4032 011052 315 011 025 CALL MTXFR ;ISSUE A REWIND. AND A FILE-SKIP - 4033 - 4034 ;NOW WE EXPECT THERE TO BE A FRAME COUNT ERROR FROM THE SPACE FORWARD - 4035 ;AND WE WILL DO WHAT WE CAN TO IGNORE IT - 4036 011055 322 066 022 JNC MTSKOK ;IF NO ERROR AT ALL, THATS OK TOO - 4037 - 4038 011060 315 167 022 CALL NONFATAL ;CHECK ERROR TYPE IF FALL INTO HERE - 4039 011063 302 242 032 JNZ L.BTERR ;IF WAS NOT A FRAME COUNT ERROR, IT WAS MORE SERIOUS - 4040 - 4041 ;IF COMPARE RESULT WAS ZERO, THEN THE ERROR WAS A FRAME COUNT ERROR - 4042 ;AND WE WILL IGNORE IT BY FALLING INTO THE CONTINUE CODE - 4043 011066 076 071 MTSKOK: MVI A,READ.TAPE ;GET A TAPE READ COMMAND - 4044 011070 315 022 025 CALL QMXFR ;EXECUTE TAP COMMAND LIST WITH NO REWIND IN IT - 4045 011073 322 104 022 JNC PASSME ;NO ERROR IF NO "C" BIT - 4046 - 4047 011076 315 167 022 CALL NONFATAL ;SEE WHAT KIND OF ERROR - 4048 011101 302 242 032 JNZ L.BTERR ;BOOT ERROR IF NO Z - 4049 - 4050 011104 052 137 040 PASSME: LHLD TAPEUNIT ;GET TAPE UNIT FOR CURRENT MAGTAPE SELECTION - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-130 -CMDS.M80 *** "MT" CMD *** - - 4052 ;NOW PASS INFO IN LO MEMORY ADDRESS SPOTS - 4053 011107 345 PASSSRC: PUSH H ;SAVE THE PASSED UNIT NUMBER ON TOP OF STACK - 4054 011110 MOV5B ;PASS RH BASE ADDRESS TO INTERNAL BUFFER - (1) 011110 347 RST 4 - (1) 011111 000 .BYTE 0 - 4055 011112 242 040 .ADDR RHBASE ;FROM HERE - 4056 011114 047 040 .ADDR DMDAT ;TO HERE - 4057 011116 041 051 040 LXI H,DMDAT+2 ;GET POINTER TO PIECE FOR UBA - 4058 011121 072 254 040 LDA UBANUM ;GET CURRENT UBA - 4059 011124 266 ORA M ;PUT IT INTO MEMORY - 4060 011125 167 MOV M,A - 4061 - 4062 011126 345 PUSH H ;SAVE THE POINTER TO "DMDAT" AREA - 4063 011127 DEPOS 36 ;DEPOSIT IN MEMORY - (1) 011127 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 011130 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 011133 036 000 .ADDR 36 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 4064 011135 341 POP H ;GET BACK THE POINTER TO "DMDAT" AREA - 4065 011136 066 000 MVI M,0 ;CLEAR BYTE WITH BITS 12-19 - 4066 011140 341 POP H ;GET THE UNIT NUMBER THAT WAS SAVED ON THE STACK - 4067 011141 042 047 040 SHLD DMDAT ;AND PUT IT INTO THE DEPOSIT MEMORY DATA AREA - 4068 011144 DEPOS 37 ;DEPOSIT IN MEMORY HERE - (1) 011144 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 011145 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 011150 037 000 .ADDR 37 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 4069 - 4070 011152 MOV5B ;FINALLY PASS DENSITY SLAVE INFORMATION - (1) 011152 347 RST 4 - (1) 011153 000 .BYTE 0 - 4071 011154 362 040 .ADDR DEN.SLV ;GET IT FROM HERE - 4072 011156 047 040 .ADDR DMDAT ;PUT IT HERE - 4073 011160 DEPOS 40 ;AND MOS MEMORY HERE - (1) 011160 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 011161 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 011164 040 000 .ADDR 40 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 4074 011166 311 RET ;BACK TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-131 -CMDS.M80 *** "MT" CMD *** - - 4076 ;ROUTINE THAT CHECKS TO SEE WHAT KIND OF ERROR WE HAVE SUFFERED UNDER - 4077 ;THE MAGTAPE TRANSFER - 4078 011167 076 343 NONFAT: MVI A,<^O377&FRMERR+2> ;CHK ERROR CODE FOR FATAL OR NON FATAL TYPES - 4079 011171 041 154 040 LXI H,ERRCD ;NOW POINT TO THE ACTUAL ERROR TYPE THAT WE GOT - 4080 011174 276 CMP M ;COMPARE THE TWO - 4081 011175 365 PUSH PSW ;SAVE FLAGS WHILE WE RESET THE TAPE DRIVE - 4082 011176 314 030 025 CZ MTRESET ;GO RESET ANY ERRORS ENCOUNTERED IN THE SKIP OPERATION - 4083 011201 361 POP PSW ;GET BACK THE FLAGS - 4084 011202 310 RZ ;ONLY RETURN IF ERROR WAS NON FATAL - 4085 - 4086 ;FALL TO HERE IF ERR WAS FATAL TYPE..SEE IF WE CAN RETRY IT - 4087 011203 076 340 MVI A,<^O377&RETRY.+2> ;"RETRYABLE" ERROR?? - 4088 011205 276 CMP M ;COMPARE - 4089 011206 300 RNZ ;OUT IF CAN'T EVEN RETRY..DIE - 4090 - 4091 ;AND HERE IF IT WAS RETRYABLE - 4092 011207 061 000 044 LXI SP,RAMST+^O2000 ;FIRST CLEAR THE STACK - 4093 011212 041 344 003 LXI H,NORML ;PUT A RETURN ADDRESS ONTO THE STACK - 4094 011215 345 PUSH H - 4095 - 4096 011216 052 221 040 LHLD CMD.. ;NOW GET "WHICH" COMMAND TO RETRY - 4097 011221 351 PCHL ;GIVE IT A GO - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-132 -CMDS.M80 *** "MB" CMD *** - - 4099 .SBTTL *** "MB" CMD *** - 4100 ;COMMAND TO LOAD ONLY THE BOOTSTRAP OFF OF THE CURRENTLY SELECTED MAGTAPE - 4101 011222 042 221 040 MBCMD: SHLD CMD.. ;SAVE WHICH COMMAND THIS IS - 4102 011225 315 237 022 CALL MTSETUP ;GO TO SOME COMMON CODE TO SET UP FOR MAGTAPE XFER - 4103 011230 315 050 022 CALL MBINT ;AND GO - 4104 011233 315 362 021 CALL BT.GO ;START UP THE MICRO-CODE & INTERNAL OFF - 4105 011236 311 RET ;BACK TO NULL JOB LOOP - 4106 - 4107 ;SOME COMMON CODE THAT SETS UP PARAMETERS FOR MAGTAPE XFER'S..SAVES A FEW - 4108 ;BYTES OF 8080 SPACE - 4109 011237 315 030 023 MTSETUP: CALL BTINT ;FIRST SET UP FOR THE BOOTING PROCESS - 4110 011242 072 356 040 LDA MTAUBA ;GET SELECTED UBA FOR MAGTAPE - 4111 011245 062 254 040 STA UBANUM ;PASS TO COMMON SPOT FOR CHANNEL COMMAND LIST TO FIND - 4112 - 4113 011250 MOV5B ;AND MOVE THE SELECTED MT BASE FOR RH BASE TO FIND - (1) 011250 347 RST 4 - (1) 011251 000 .BYTE 0 - 4114 011252 367 040 .ADDR MTBASE ;SELECTED MAGTAPE RH BASE ADDRESS - 4115 011254 242 040 .ADDR RHBASE ;COMMON RH BASE REGISTER LOCATION - 4116 011256 311 RET ;BACK TO MAILINE - 4117 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-133 -CMDS.M80 *** "MB" CMD *** - - 4119 011257 MA1000: D 0,0,,1,000 - 4120 011264 HOMEWD: D 505,755,,000,000 ;"HOM" MEANS HOME BLOCK - 4121 011271 ONES: D 777,777,,777,777 ;ALL ONES... - 4122 .SBTTL FILE SYSTEM - 4123 ;--PAGE OF POINTERS FORMAT-- - 4124 ; +0 POINTER TO FREE - 4125 ; +1 LENGTH OF FREE - 4126 - 4127 ; +2 POINTER TO MICRO-CODE - 4128 ; +3 LENGTH OF MICRO-CODE - 4129 - 4130 ; +4 POINTER TO MONITOR PRE-BOOT - 4131 ; +5 LENGTH OF PRE-BOOT - 4132 - 4133 ; +6 POINTER TO DIAG PRE-BOOT - 4134 ; +7 LENGTH OF SAME - 4135 - 4136 ; +10 POINTER TO BC1 MICRO-CODE - 4137 ; +11 LENGTH OF SAME - 4138 - 4139 ; +12 POINTER TO BC2 PRE-BOOT - 4140 ; +13 LENGTH - 4141 - 4142 ; +14 POINTER TO MONITOR BOOT PROGRAM - 4143 ; +15 LENGTH OF SAME - 4144 - 4145 ; +16 POINTER TO DIAGNOSTIC BOOT - 4146 ; +17 LENGTH OF SAME - 4147 - 4148 ; +20 POINTER TO BC2 ITSELF - 4149 ; +21 LENGTH OF SAME - 4150 - 4151 ; +22 POINTER TO FI-ABLE 0 - 4152 ; +23 LENGTH OF SAME - 4153 ; . - 4154 ; . - 4155 ; . - 4156 ; +776 POINTER TO FI-ABLE 366(8) - 4157 ; +777 LENGTH OF SAME - 4158 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-134 -CMDS.M80 FILE SYSTEM - - 4160 ;ROUTINE TO "FIND THE 8080 FILE SYSTEM", WHICH IS REALLY JUST A PAGE - 4161 ;OF PHYSICAL POINTERS, TO PHYSICAL DISK LOCATIONS - 4162 011276 021 002 002 MICROP: LXI D,^O1002 ;FOR MICROCODE, ALWAYS GO TO 2ND POINTER - 4163 011301 325 FILEINIT: PUSH D ;SAVE POINTER INTO THE FILE PAGE - 4164 011302 315 030 023 CALL BTINT ;AND SET UP TO DO A READIN - 4165 011305 321 POP D ;RESTORE "D,E"..KLUDGY WAY TO MAKE SUBROUTINE HAVE - 4166 011306 325 FILESH: PUSH D ; MULTIPLE ENTRY POINTS - 4167 011307 315 041 023 CALL DSKDFT ;FETCH CURRENT DISK DEFAULTS - 4168 - 4169 011312 041 000 000 LXI H,00 ;CLR "H,L" - 4170 011315 042 112 040 SHLD BLKADR ;AND SET THE DESIRED CYLINDER TO 00 - 4171 011320 043 INX H ;BUMP H,L TO MAKE IT .EQ. 01 - 4172 011321 042 105 040 SHLD BLKNUM ;NOW SET THIS INTO THE BLOCK NUMBER(HOME BLOCK) - 4173 - 4174 011324 315 005 023 CALL CHKHOM ;GO SEE IF THIS PAGE HAS THE "HOM" BLK I.D. - 4175 011327 312 345 022 JZ GOODPK ;IF YES, JUMP TO CONTINUE READ-IN - 4176 - 4177 ;FALL THRU IF FIRST HOME BLOCK NO GOOD - 4178 011332 076 010 MVI A,^O10 ;TRY ALTERNATE HOME BLOCK - 4179 011334 062 105 040 STA BLKNUM ;SET BLOCK NUMBER TO ALTERNATE - 4180 - 4181 011337 315 005 023 CALL CHKHOM ;TRY ALTERNATE - 4182 011342 302 214 032 JNZ A.BTERR ;IF THIS ONES BAD, THEN GIVE UP - 4183 011345 GOODPK: EXAM 1103 ;EXAMINE WORD WITH HOME BLOCK IN IT - (1) 011345 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 011350 103 002 .ADDR 1103 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-135 -CMDS.M80 FILE SYSTEM - - 4185 ;NOW THAT YOUVE READ HOME BLOCK, FIND POINTER FILE - 4186 ;AND TRANSFER THE ENTIRE MICRO-CODE INTO MOS MEMORY - 4187 ;SHORT ROUTINE TO MOVE DATA FROM THE EMBUF INTO THE CHANNEL COMMAND LIST - 4188 011352 315 365 022 CALL BLKRDR ;READ IN THE PAGE OF POINTERS FROM THE DISK - 4189 011355 332 212 032 JC B.BTERR ;ERROR IN BOOT PROCESS DURING POINTER PAGE READ-IN - 4190 - 4191 ;NOW EXAM THE REAL DESIRED DATA - 4192 011360 341 POP H ;FETCH UP THE FILE POINTER ADDRESS - 4193 011361 067 STC ;SET SIGN WHICH INDICATES AND EXAMINE - 4194 011362 315 240 030 CALL EXMHL ;AND READ IT IN TO MEM - 4195 - 4196 ;SHORT ROUTINE TO MOVE DATA FROM THE EMBUF INTO THE CHANNEL COMMAND LIST - 4197 011365 052 015 040 BLKRDR: LHLD EMBUF+3 ;GET CYLINDER FROM SPECIAL HOME BLK PNTR - 4198 011370 042 112 040 SHLD BLKADR ;SET CYLINDER IN CHANNEL COMMAND LIST - 4199 011373 052 012 040 LHLD EMBUF ;GET TRACK SECTOR BYTE - 4200 011376 042 105 040 SHLD BLKNUM ;SET INFO INTO THE TRCK/SECTOR WORD - 4201 - 4202 011401 315 002 025 CALL DSXFR ;FINALLY READ THE FIRST PAGE OF THE DESIRED - 4203 011404 311 RET - 4204 - 4205 ;LITTLE ROUTINE TO READ IN THE HOME BLOCK, CHECK THAT IT IS A HOME BLOCK - 4206 ; VIA THE "HOM" ID, AND RETURN Z-BIT SET IF IT IS - 4207 011405 315 002 025 CHKHOM: CALL DSXFR ;EXECUTE DISK TRANSFER - 4208 011410 332 214 032 JC A.BTERR ;BOOT ERROR "A", IF OOPS - 4209 - 4210 011413 EXAM 1000 ;NOW EXAMINE THE HOME BLOCK ID - (1) 011413 315 231 030 CALL EXAMSH ;AND DO EXAM ASSUMING SHORT ADDRESS - (1) 011416 000 002 .ADDR 1000 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 4211 011420 315 033 033 CALL CMP36 ;AND TRY OUT A COMPARE - 4212 011423 264 022 .ADDR HOMEWD ;EXPECTED ID - 4213 011425 012 040 .ADDR EMBUF ;AGAINST WHAT WAS JUST READ IN - 4214 011427 311 RET ;AND OUT - 4215 - 4216 011430 BTINT: INTON ;SET INTERNAL MODE ON - (1) 011430 327 RST 2 ;GO SET INTERNAL MODE - 4217 011431 CLRB PARBT ;NO PARITYS - 4218 011433 CLRB TRAPEN ;AND NO TRAPS WHILE BOOTING - 4219 011435 315 231 005 CALL MRCMD ;AND DONT FORGET MR. RESET - 4220 011440 311 RET - 4221 - 4222 ;LITTLE ROUTINE TO SET UP DISK DEFAULTS - 4223 011441 072 357 040 DSKDFT: LDA DSKUBA ;GET CURRENTLY SELECTED DISK UBA NUMBER - 4224 011444 062 254 040 STA UBANUM ;SET INTO COMMAND LIST PLACE - 4225 - 4226 011447 MOV5B ;AND SEND CURRENTLY SELECTED RHBASE - (1) 011447 347 RST 4 - (1) 011450 000 .BYTE 0 - 4227 011451 374 040 .ADDR DSBASE ;CURRENT DISK RH BASE - 4228 011453 242 040 .ADDR RHBASE ;TO PLACE FOR COMMAND LIST TO FIND IT - 4229 011455 311 RET ;OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-136 -CMDS.M80 CRAM LOADER CODE - - 4231 .SBTTL CRAM LOADER CODE - 4232 011456 076 001 DMEM2CR: MVI A,BT.BIT ;DO COUPLE ROUTINES A FAVOR, LOAD BIT - 4233 011460 062 121 040 MEM2CR: STA BT.TYPE ;ACCUM HAD THE BOOTING TYPE..SAVE IT - 4234 011463 041 000 000 LXI H,00 ;ZEROES TO "H,L" - 4235 011466 345 PUSH H ;SAVE CURRENT CRAM ADDRESS - 4236 011467 315 340 014 CALL CADWR ;AND THEN WRITE IT TO THE CRAM - 4237 011472 076 007 MVI A,7 ;START WITH FUNCTION 7 - 4238 011474 062 010 040 STA CRMFN - 4239 011477 NEWPAG: MOV5B ;INITIALIZE MEM ADDRESS - (1) 011477 347 RST 4 - (1) 011500 000 .BYTE 0 - 4240 011501 257 022 .ADDR MA1000 ;WITH 1000 OCTAL - 4241 011503 017 040 .ADDR MEMAD ;STANDARD MEM ADDRESS - 4242 - 4243 ;CODE TO DECIDE IF WE NEED TO READ AN ADDITIONAL DISK SECTOR - 4244 011505 052 017 040 LHLD MEMAD ;GET CURRENT MOS MEM ADDRESS - 4245 011510 175 RD.EXM: MOV A,L ;GET 8 BITS OF ADDRESS TO BE EXAMINED - 4246 011511 323 103 OUT A2835 ;SET PIECE OF ADDRESS INTO ADDRESS REGISTER - 4247 011513 174 MOV A,H ;GET COUPLE MORE BITS - 4248 011514 323 105 OUT A2027 ;SET INTO CSL BOARD ADDRESS REGISTER - 4249 011516 076 004 MVI A,4 ;SPECIAL KEY TO MAKE "EXAMINE" WORK CORRECTLY - 4250 011520 315 056 012 CALL EM.CRM ;GO DO A MEMORY EXAMINE, OF THE SHORT FLAVOR - 4251 - 4252 011523 052 012 040 LHLD EMBUF ;GET 16 BITS OF THE MEMORY DATA - 4253 011526 174 MOV A,H ;COPY TO ACCUM, SO THAT WE CAN MAKE IT 12 BITS - 4254 011527 346 017 ANI ^O17 ;CLR THE BITS - 4255 011531 147 MOV H,A ;PUT BACK INTO THE HI ORDER REG - 4256 - 4257 011532 315 303 014 CALL WFUNC ;WRITE THE PIECE - 4258 011535 041 010 040 LXI H,CRMFN ;GET CURRENT DIAG FUNCTION - 4259 011540 065 DCR M ;DOWN COUNT - 4260 - 4261 011541 052 013 040 LHLD EMBUF+1 ;GET 16 BITS OF THE MEMORY READ - 4262 - 4263 011544 016 004 MVI C,4 ;NOW A QUICK LITTLE LOOP - 4264 011546 257 XRA A ;CLR ACCUM TEMP - 4265 011547 174 QQLOOP: MOV A,H ;COPY TO ACCUM - 4266 011550 037 RAR ;ROTATE INTO THE C-BIT - 4267 011551 147 MOV H,A ;PUT IT BACK - 4268 - 4269 011552 175 MOV A,L ;TRY BOTTOM PIECE - 4270 011553 037 RAR ;ROTATE C-BIT INTO THE TOP - 4271 011554 157 MOV L,A ;PUT IT BACK - 4272 011555 015 DCR C ;DOWN THE LITTLE COUNTER - 4273 011556 302 147 023 JNZ QQLOOP ;CONTINUE - 4274 - 4275 011561 315 303 014 CALL WFUNC ;WRITE THIS PIECE - 4276 011564 041 010 040 LXI H,CRMFN ;DOWN THE FUNCTION COUNTER - 4277 011567 065 DCR M ;DECREMENT - 4278 011570 362 216 023 JP BBLOOP ;JUMP AROUND THIS STUFF IF NOT AT FUNCTION 0 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-137 -CMDS.M80 CRAM LOADER CODE - - 4280 ;IF DONE FUNCTIONS 0-7, TRY A LITTLE RESET - 4281 011573 076 007 MVI A,7 ;RESTART AT FUNCTION 7 - 4282 011575 062 010 040 STA CRMFN ;SAVE IT - 4283 - 4284 ;HERE IF FINSHED A CRAM WORD & NEED TO DO RESET. - 4285 011600 341 POP H ;GET CRAM ADDRESS - 4286 011601 043 INX H ;UPDATE - 4287 011602 345 PUSH H - 4288 011603 315 340 014 CALL CADWR ;NOW WRITE THIS, THE NEXT CRAM ADDRESS - 4289 011606 174 MOV A,H ;NOW GET HI ORDER PIECE OF CRAM ADDR - 4290 011607 346 010 ANI ^O10 ;IS IT .EQ. 4000 OCTAL YET?? - 4291 011611 312 234 023 JZ SEEPAGE ;IF NOT 4000 OCTAL YET, CHECK FOR A NXT WORD - 4292 011614 341 POP H ;AND RESTORE STACK BEFORE LEAVING - 4293 011615 311 RET ;OTHERWISE ALL DONE - 4294 - 4295 011616 052 015 040 BBLOOP: LHLD EMBUF+3 ;GRAB 16 BITS OF THE MEMORY DATA - 4296 011621 174 MOV A,H ;PASS 8 BITS TO THE ACCUM, SO WE CAN MAKE IT 4 BITS - 4297 011622 346 017 ANI ^O17 ;OFF UNNEEDED BITS - 4298 011624 147 MOV H,A ;PUT IT BACK - 4299 011625 315 303 014 CALL WFUNC ;WRITE THIS DATUM - 4300 011630 041 010 040 LXI H,CRMFN ;GET FUNCTION - 4301 011633 065 DCR M ;DOWN TO NEXT FUNCTION - 4302 - 4303 011634 052 017 040 SEEPAGE: LHLD MEMAD ;GET THE CURRENT MEMORY ADDRESS - 4304 011637 043 INX H ;GO TO NEXT ADDRESS - 4305 011640 042 017 040 SHLD MEMAD ;SAVE THIS NEXT ADDRESS - 4306 011643 174 MOV A,H ;TEST H FOR AT "2000" - 4307 011644 346 004 ANI ^O4 ;IF "2000" WEIGHT BIT IS SET, TIME FOR NEW PAGE OF DATA - 4308 011646 312 110 023 JZ RD.EXM ;IF MEM ADDRESS .EQ. 2000, THEN FALL THRU TO NEXT READIN - 4309 011651 315 257 023 CALL NEXTCR ;ROUTINE TO FETCH NEXT PAGE OF CRAM DATA - 4310 011654 303 077 023 JMP NEWPAG ;AND BACK TO BEGINNING - 4311 - 4312 ;ELSE, MUST READ IN ANOTHER PAGE'S WORTH FROM CURRENT BOOT DEVICE - 4313 011657 072 121 040 NEXTCR: LDA BT.TYPE ;FIND OUT WHAT KIND OF DEVICE WE ARE BOOTING FROM - 4314 011662 376 001 CPI BT.BIT ;SEE IF DOING BOOT FROM THE DISK - 4315 011664 302 301 023 JNZ TAPDEV ;IF FLAG .NE. BT.BIT, THEN BOOTING FROM MAGTAPE - 4316 - 4317 ;FALL THRU TO DO BOOT FROM DISK - 4318 011667 041 146 036 LXI H,QXFR ;SET UP FOR THE QUICK XFR COMMAND LIST - 4319 011672 315 036 025 CALL CHNXCT ;READ IN, SHORT FORMAT(TRK/SEC/CYL IS PRESET) - 4320 011675 332 210 032 JC C.BTERR ;ERROR IN READING CRAM - 4321 011700 311 RET ;BACK TO CALLER - 4322 - 4323 ;JUMP TO HERE TO DO BOOT FROM TAPE - 4324 011701 076 071 TAPDEV: MVI A,READ.TYPE ;PASS TO CHANNEL CMD LIST EXECUTOR THE XFR TYPE - 4325 011703 315 022 025 CALL QMXFR ;READ IN A SINGLE PAGE FROM MAGTAPE - 4326 011706 320 RNC ;IF NOTHING BAD, RETURN - 4327 011707 315 167 022 CALL NONFATAL ;IF BADNESS, SEE IF FATAL KIND OR NOT - 4328 011712 302 210 032 JNZ C.BTERR ;ERROR IN READING THE CRAM - 4329 011715 311 RET ;BACK TO CALLER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-138 -CMDS.M80 *** "FI" CMD *** - - 4331 .SBTTL *** "FI" CMD *** - 4332 ;COMMAND TO READ IN A PARTICULAR PAGE OF THE FILESYSTEM AND TO EXECUTE ITS - 4333 ;CONTENTS AS IF THEY WERE TYPED IN 8080 COMMANDS - 4334 011716 315 257 030 FICMD: CALL ARG16. ;COLLECT IT WHEN ITS THERE - 4335 - 4336 ;BEWARE..IF YOU TYPE FI WITH A BOGUS ARGUMENT, THEN YOU LOSE.. - 4337 ;HE WHO USES THE FI CMD BEST KNOW WHAT HE'S DOING - 4338 011721 021 022 002 LXI D,^O1022 ;START WITH OFFSET "0" INTO THE "FI" FILES - 4339 011724 031 DAD D ;ADD THIS TO THE NUMBER TYPED TO GET THE DESIRED - 4340 011725 315 301 022 CALL FILEINIT ;READ IN THE DESIRED PAGE - 4341 011730 332 242 032 JC L.BTERR ;IF ERR - 4342 - 4343 ;NOW DO SOMETHING WITH THE STUFF TYPED... - 4344 011733 MOV5B ;FIRST MUST GET INFO FROM MOS MEM TO 8080 RAM - (1) 011733 347 RST 4 - (1) 011734 000 .BYTE 0 - 4345 011735 257 022 .ADDR MA1000 ;INFO STARTS AT MOS MEME LOC 1000 - 4346 011737 017 040 .ADDR MEMAD ;AND WE WILL TELL INTERNAL READER TO START THERE - 4347 - 4348 011741 021 253 041 LXI D,E.BEG+2 ;A PLACE TO STORE ASCII BYTES FROM MEMORY - 4349 011744 FI.GET: INTON ;NO PRINTING - (1) 011744 327 RST 2 ;GO SET INTERNAL MODE - 4350 011745 315 245 024 CALL GATHER ;GO READ IN A WORD FROM MOS MEM - 4351 011750 INTOFF ;OK TO PRINT NOW - (1) 011750 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 4352 011751 056 004 MVI L,4 ;NOW ONLY 4 BYTES PER WORD ARE USEFUL - 4353 011753 001 012 040 LXI B,EMBUF ;AND THIS IS WHERE IN 8080 RAM THE BYTES ARE - 4354 011756 012 FI.MOV: LDAX B ;FETCH UP A BYTE - 4355 011757 022 STAX D ;PUT IT IN PLACE - 4356 011760 376 377 CPI ^O377 ;IS IT END OF STRING?? - 4357 011762 302 373 023 JNZ FI.NXT ;IF NO, GO MOVE SOME MORE - 4358 - 4359 011765 315 351 034 CALL MV.ALL ;GOT HERE, MOVE TO EXECUTE BUFFER - 4360 011770 303 222 002 JMP DCODE ;AND GO DO IT - 4361 - 4362 ;NOPE.. MOVE SOME MORE - 4363 011773 003 FI.NXT: INX B ;UPDATE THE POINTERS - 4364 011774 023 INX D - 4365 011775 055 DCR L ;CHECK COUNT TO SEE IF WE'VE DONE 4 YET - 4366 011776 302 356 023 JNZ FI.MOV ;IF NOT, GO MOVE THE NEXT BYTE FROM THE CURRENT WORD - 4367 012001 303 344 023 JMP FI.GET ;YES, READ NEXT MEM WORD AND TRY IT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-139 -CMDS.M80 *** "FI" CMD *** - - 4369 ;;**********PROPOSED INSTRUCTION ******************** - 4370 ;;.SBTTL *** "B1" CMD *** - 4371 ;;COMMAND TO READ IN A SECOND TYPE OF MICRO-CODE AND EXECUTE IT.. - 4372 ;;I.E. BOOTCHECK 1 MICRO-CODE - 4373 ;;B1CMD: LXI D,^O1010 ;GET THE CORRECT OFFSET - 4374 ;; CALL FILEINIT ;READ IN THE FIRST PAGE - 4375 ;; JC C.BTERR ;IF ERR - 4376 ;; - 4377 ;; MVI A,BT.BIT ;SAY THAT THIS IS A LOAD FROM DISK - 4378 ;; CALL MEM2CRAM ;READ IT IN AS MICRO-CODE - 4379 ;; CALL BT.GO ;START IT UP - 4380 ;; RET ;THAT IT - 4381 .SBTTL *** "B2" CMD *** - 4382 ;BOOTCHECK 2.. THIS LOADS IN A SEPARATE "PRE-BOOT", WHICH - 4383 ;LOADS IN THE BOOT CHECK 2 - 4384 012004 076 012 B2CMD: MVI A,^O12 ;GET THE OFFSET - 4385 012006 062 172 040 STA RM100 ;SAVE IT SO THAT WE CAN USE SOME SUPER COMMON CODE - 4386 012011 303 262 021 JMP BT.SRC ;THAT'S IT!!!! - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-140 -CMDS.M80 *** "VD" CMD *** - - 4388 .SBTTL *** "VD" CMD *** - 4389 ;COMMAND TO VERIFY THE CONTENTS OF THE C-RAM AGAINST THE MICRO-CODE - 4390 ;AS IT SITS ON DISK - 4391 012014 315 276 022 VDCMD: CALL MICROP ;NOW READ IN HOME BLOCKS, THEN 1ST PAGE OF U-CODE - 4392 012017 332 210 032 JC C.BTERR ;IF ERROR, GO TELL WORLD ABOUT IT - 4393 - 4394 012022 076 001 MVI A,BT.BIT ;WENT OK.. SPECIFY A DISK TYPE OPERATION - 4395 012024 303 044 024 JMP VERCRAM ;AND GO IN TO VERIFY THE CRAM - 4396 - 4397 .SBTTL *** "VT" CMD *** - 4398 ;COMMAND TO VERIFY THE CONTENTS OF THE C-RAM AGAINST THE MICR-CODE - 4399 ;AS IT SITS ON MAG TAPE - 4400 012027 315 237 022 VTCMD: CALL MTSETUP ;GO TO SOME COMMON CODE TO LOOK AT MAGTAPES - 4401 012032 076 071 MVI A,READ.TAPE ;TELL CHANNEL LISTER TO DO A READ IN - 4402 012034 315 011 025 CALL MTXFR ;READ IN FIRST PAGE OF U-CODE OFF THE TAPE - 4403 012037 332 214 032 JC A.BTERR ;IF ERROR, GO REPORT IT - 4404 - 4405 012042 076 002 MVI A,MT.BIT ;WENT OK.. SPECIFY A TAPE OPERATION - 4406 ;FALL STRAIGHT INTO THE CODE TO VERIFY THE CRAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-141 -CMDS.M80 VERIFY CRAM CODE - - 4408 .SBTTL VERIFY CRAM CODE - 4409 ;ROUTINES THAT DO READ INS FROM THE CURRENTLY SELECTED DEVICE - 4410 ;AND COMPARES THAT HARD MICRO-CODE DATA AGAINST THE CURRENT - 4411 ;CONTENTS OF THE CONTROL-STORE - 4412 012044 VERCRAM: - 4413 012044 062 121 040 STA BT.TYPE ;BEGIN BY SAVING THE DEVICE AGAINST WHICH WE WILL VERIFY - 4414 - 4415 012047 MOV5B ;START BY SETTING MEMORY ADDRESS AT 1000 - (1) 012047 347 RST 4 - (1) 012050 000 .BYTE 0 - 4416 012051 257 022 .ADDR MA1000 ;A "1000" - 4417 012053 017 040 .ADDR MEMAD ;PLACE WHERE MEM ADDRESS IS KEPT - 4418 012055 041 000 000 LXI H,00 ;BEGIN WITH CRAM ADDRESS 00 - 4419 012060 042 004 040 SHLD CRMAD ;SET CRAM ADDRESS TO ZEROES - 4420 012063 303 076 024 JMP V.GO ;ENTER LOOP AT THE PROPER PLACE - 4421 - 4422 012066 052 004 040 V.DONWD: LHLD CRMAD ;GET CURRENT CRAM ADDRESS - 4423 012071 043 INX H ;AND UPDATE FOR NEXT TIME AROUND - 4424 012072 174 MOV A,H ;PUT HI ORDER PIECE OF IT INTO ACCUM - 4425 012073 346 010 ANI ^O10 ;SEE IF AT END OF CRAM YET - 4426 012075 300 RNZ ;IF IT IS, ALL DONE, GO OUT - 4427 - 4428 ;HERE IF REALLY READY TO DO A CRAM LOC - 4429 012076 315 340 014 V.GO: CALL CADWR ;WRITE IT TO CRAM, BE IT GOOD OR BAD - 4430 012101 042 004 040 SHLD CRMAD ;NOW SAVE ADDRESS WHILE WE DO SOME STUFF - 4431 012104 315 205 013 CALL CP1 ;SINGLE CLOCK GETS CRAM CONTENTS TO CONTROL REG - 4432 012107 315 041 015 CALL RCINT ;READ IN CONTENTS OF C-RAM AND SAVE IN 8080 RAM - 4433 - 4434 ;HERE WHEN CRAM DATA IS SAFELY TUCKED AWAY IN THE 8080 RAM - 4435 012112 001 220 024 LXI B,VERLST ;B,C PAIR POINTS TO LIST OF DATA OFFSETS - 4436 012115 021 302 040 LXI D,CRMBF ;D,E PAIR POINTS TO ACTUAL DATA LIST(H,L PNTS EXPECTED) - 4437 - 4438 012120 315 245 024 V.NXMEM: CALL GATHER ;HERE TO CALL ROUTINE THAT READS IN THE NEXT MEM WORD - 4439 012123 076 003 MVI A,3 ;AND TAKE TIME OUT TO RESET THE 3 COUNTER - 4440 012125 062 253 040 STA VERCNT ;SET UP A CLEAN COUNT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-142 -CMDS.M80 VERIFY CRAM CODE - - 4442 ;AND HERE BELOW BEGINS THE ACTUAL DATA COMPARES - 4443 012130 012 V.BLP: LDAX B ;GET THE FIRST INDEX BYTE FROM THE LIST OF BYTES - 4444 012131 346 077 ANI ^O77 ;OFF THE SIGNALS, AND CONTINUE - 4445 012133 052 012 040 V.BLP1: LHLD EMBUF ;GET EXPECTED DATA INTO H,L REGISTER - 4446 012136 003 INX B ;UPDATE B,C TO POINT AT FUNCTION READ - 4447 012137 203 ADD E ;ADD AS AN OFFSET TO THE D,E PAIR - 4448 012140 137 MOV E,A ;PUT THE GOOD ADDR BACK INTO "E" - 4449 012141 172 MOV A,D ;AND GRAB THE HI ORDER FOR A SEC - 4450 012142 316 000 ACI 0 ;ADD IN THE CARRY IF REQUIRED - 4451 012144 127 MOV D,A ;PUT THE HI ORDER BACK AGAIN - 4452 - 4453 012145 032 LDAX D ;NOW LOAD IN THE FIRST "ACTUAL" DATUM - 4454 012146 023 INX D ;UPDATE POINTER TO ACTUAL - 4455 012147 275 CMP L ;COMPARE AGAINST EXPECTED - 4456 012150 302 161 024 JNZ V.ERR ;REPORT IF BADNESS - 4457 - 4458 012153 174 MOV A,H ;GET UPPER 12 BITS OF THE EXPECTED - 4459 012154 346 017 ANI ^O17 ;IF DATA WAS EQUAL, ONLY DISCREPENCY CAN BE IN B7-B4 - 4460 - 4461 012156 147 MOV H,A ;GET THE 4 BITS OF DATA LEFT AFTER THE "AND" - 4462 012157 032 LDAX D ;GET THE ACTUAL DATA TO ACCUM - 4463 012160 274 CMP H ;SEE IF SAME - 4464 012161 304 307 024 V.ERR: CNZ VERRPT ; AND B3-B0 SHOULD BE .EQ. 0.. IF NOT REPORT AS ERROR - 4465 012164 033 DCX D ;FIX D TO LOOK AT THE BEGINNG OF THE "ACTUAL" 2 BYTES - 4466 - 4467 ;NOW NEED TO CHOOSE IF NEED CHECK TWICE(FOR DOUBLE COPIES), OR IF END - 4468 ;OF LIST FOR THIS CRAM WORD - 4469 012165 003 INX B ;UPDATE POINTER INTO THE INDEXER LIST - 4470 012166 012 LDAX B ;GET THE NEXT INDEX BYTE - 4471 012167 027 RAL ;COPY SIGN INTO C-BIT - 4472 012170 332 066 024 JC V.DONWD ;IF SET, END OF LIST.. GO DO NEXT CRAM WORD - 4473 - 4474 012173 027 RAL ;WASN'T END OF LIST.. SEE IF A DOUBLE CHECKER - 4475 012174 332 130 024 JC V.BLP ;JUMP BACK TO MAIN LOOP WITHOUT UPDATING IF YES - 4476 - 4477 ;IF NOT A DOUBLE, MUST FALL THROUGH TO UPDATE EXPECTED - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-143 -CMDS.M80 VERIFY CRAM CODE - - 4479 ;HERE WHEN MUST UPDATE EXPECTED..NOT A DOUBLE COPY - 4480 012177 041 253 040 V.NXT: LXI H,VERCNT;LOAD CURRENT COUNT FOR HOW MANY COMPARE PER MEM WORD - 4481 012202 065 DCR M ;DECREMENT THAT COUNT - 4482 012203 312 120 024 JZ V.NXMEM ;IF DOWN TO ZERO, GO READ IN THE NEXT MEMORY WORD - 4483 - 4484 012206 041 012 040 LXI H,EMBUF ;TELL SHR36 WHERE IT SHOULD SHIFT - 4485 012211 315 167 031 CALL SHR36 ;IF NOT DOWN, SHIFT WHAT WE HAVE TO THE NEXT 12 BIT GRP - 4486 012214 014 .BYTE 12. ;SPECIFY THE NEXT 12 BIT GROUP IS WHAT WE WANT - 4487 012215 303 130 024 JMP V.BLP ;AND CONTINUE IN THE BIG LOOP - 4488 - 4489 ;LIST OF INDEXER BYTES - 4490 .RADIX 8 - 4491 012220 000 017 VERLST: .BYTE 0,17 ;READ FCN 17 (BITS 84-95) - 4492 012222 002 016 .BYTE 2,16 ;READ FCN 16 (BITS 72-83) - 4493 012224 002 015 .BYTE 2,15 ;READ FCN 15 (BITS 60-71) - 4494 012226 002 014 .BYTE 2,14 ;READ FCN 14 (BITS 48-59) - 4495 012230 002 013 .BYTE 2,13 ;READ FCN 13 (BITS 36-47) - 4496 012232 102 012 .BYTE 102,12 ;READ FCN 12 (BITS 36-47) SECOND COPY - 4497 012234 010 006 .BYTE 10,6 ;READ FCN 6 (BITS 24-35) - 4498 012236 102 005 .BYTE 102,5 ;READ FCN 5 (BITS 24-35) SECOND COPY - 4499 012240 002 004 .BYTE 2,4 ;READ FCN 4 (BITS 12-23) - 4500 012242 010 000 .BYTE 10,0 ;READ FCN 0 (BITS 00-11) - 4501 012244 200 .BYTE 200 ;END OF LIST MARKER - 4502 .RADIX 10 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-144 -CMDS.M80 VERIFY CRAM CODE - - 4504 ;SUBROUTINE TO READ IN THE NEXT WORD FROM MEMORY. - 4505 ;ALSO CHECKS TO SEE IF AT THE END OF THE MEMORY PAGE(ADDR 1777), AND IF SO - 4506 ;TO GO AND READ IN THE NEXT PAGE OF MICRO-CODE FROM THE DEVICE AGAINST - 4507 ;WHICH WE ARE VERIFYING THE MICRO-CODE. - 4508 012245 325 GATHER: PUSH D - 4509 012246 305 PUSH B - 4510 - 4511 012247 052 017 040 LHLD MEMAD ;GET CURRENT MEMORY ADDRESS - 4512 012252 345 PUSH H ;SAVE CURRENT MEM ADDRESS - 4513 - 4514 012253 174 MOV A,H ;GET THE HI ORDER PIECE OF THE MEM ADDRESS - 4515 012254 346 004 ANI ^O4 ;SEE IF ADDRESS AT "2000" YET - 4516 012256 312 274 024 JZ G.SKP ;IF NOT, SIMPLY GO READ IN THE NEXT WORD - 4517 - 4518 ;ELSE MUST READ IN THE NEXT PAGE OF MICRO-CODE - 4519 012261 315 257 023 CALL NEXTCR ;DO THE READ IN - 4520 - 4521 012264 341 POP H ;GET OLD CRUMMY H,L OFF THE STACK - 4522 012265 041 000 002 LXI H,^O1000 ;WANT TO RESET MEM ADDRESS TO BEGINNING OF PAGE - 4523 012270 345 PUSH H ;PUT BACK ON STACK - 4524 012271 042 017 040 SHLD MEMAD ;AND PASS NEW ADDRESS IN RAM - 4525 012274 315 037 012 G.SKP: CALL EM2 ;EXAMINE THE NEXT MEMORY WORD - 4526 012277 341 POP H ;GRAB THE ADDRESS WE WANT TO READ NEXT TIME - 4527 012300 043 INX H ;UPDATE TO NEXT - 4528 012301 042 017 040 SHLD MEMAD ;PUT IT BACK - 4529 012304 301 POP B ;RESTORE THE REGS NOW - 4530 012305 321 POP D - 4531 012306 311 RET ;AND OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-145 -CMDS.M80 VERIFY CRAM CODE - - 4533 ;VERIFY ERROR REPORTER SUBROUTINE. REPORTS VERIFY ERRORS AS THEY HAPPEN - 4534 ;AND THEN PERMITS THE VERIFIER TO CONTINUE VERIFYING THE REST OF THE CRAM - 4535 012307 345 VERRPT: PUSH H ;SAVE CONTENTS OF H,L PAIR - 4536 012310 325 PUSH D ;MUST ALSO SAVE D,E - 4537 012311 INTOFF ;PRINT ALL THIS GOOD STUFF - (1) 012311 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 4538 - 4539 012312 041 004 040 LXI H,CRMAD ;THEN PRINT THE CRAM ADDRESS OF THE FAILING CRAM WORD - 4540 012315 315 332 030 CALL P16 ;AND PRINT OUT THE ADDRESS - 4541 - 4542 012320 PSLASH ;THROW OUT A "/" - (2) 012320 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 012321 057 .BYTE SLASH ;CHAR TO PRINT - 4543 - 4544 012322 012 LDAX B ;FETCH UP THE DIAG FUNC OF THE READ FAILURE - 4545 012323 315 317 030 CALL P8BITA ;AND PRINT IT - 4546 - 4547 012326 PCHAR ': ;SIMPLE CHARACTERS ARE ": A " - (1) 012326 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 012327 072 .BYTE ': ;CHAR TO PRINT - 4548 012330 PSPACE - (2) 012330 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 012331 040 .BYTE SPACE ;CHAR TO PRINT - 4549 012332 PCHAR 'A - (1) 012332 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 012333 101 .BYTE 'A ;CHAR TO PRINT - 4550 012334 PSPACE - (2) 012334 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 012335 040 .BYTE SPACE ;CHAR TO PRINT - 4551 - 4552 012336 353 XCHG ; AND NOW H,L POINTS AT THE ACTUAL - 4553 012337 053 DCX H ;NOW D,E POINTS TO THE ACTUAL - 4554 012340 315 332 030 CALL P16 ;PRINT THE ACTUAL DATA - 4555 012343 353 XCHG ;FIX SO H,L POINTS AT TEMP LOC ONCE AGAIN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-146 -CMDS.M80 VERIFY CRAM CODE - - 4557 012344 PSPACE ;ANOTHER SPACE - (2) 012344 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 012345 040 .BYTE SPACE ;CHAR TO PRINT - 4558 012346 PCHAR 'E ;A "W" STANDS FOR "WAS" - (1) 012346 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 012347 105 .BYTE 'E ;CHAR TO PRINT - 4559 012350 PSPACE - (2) 012350 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 012351 040 .BYTE SPACE ;CHAR TO PRINT - 4560 - 4561 012352 052 012 040 LHLD EMBUF ;GET THE EXPECTED DATA INTO H,L PAIR - 4562 012355 174 MOV A,H ;WANT TO STRIP ANY BITS ABOVE 12 BITS - 4563 012356 346 017 ANI ^O17 ;KEEP ONLY RELEVANT BITS - 4564 012360 147 MOV H,A ;PUT IT BACK - 4565 012361 042 100 040 SHLD TMPB2 ;PUT IT IN THE TEMP PLACE - 4566 012364 315 327 030 CALL P16. ;PRINT THE EXPECTED - 4567 012367 PCRLF - (2) 012367 347 RST 4 - (2) 012370 002 .BYTE 2 - 4568 - 4569 012371 305 PUSH B ;SAVE B REG TOO - 4570 012372 315 205 034 CALL DECNET ;IF THERE IS A HOST, TELL HIM TOO - 4571 012375 301 POP B - 4572 012376 INTON ;AND BACK TO INTERNAL MODE - (1) 012376 327 RST 2 ;GO SET INTERNAL MODE - 4573 012377 321 POP D - 4574 012400 341 POP H - 4575 012401 311 RET - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-147 -CMDS.M80 VERIFY CRAM CODE - - 4577 ;EXECUTE CHANNEL COMMANDS.... - 4578 012402 041 052 036 DSXFR: LXI H,DSKSEQ ;PNTR TO COMMAND LIST - 4579 012405 315 036 025 XCTNOW: CALL CHNXCT ;EXECUTE CHANNEL LIST - 4580 012410 311 RET - 4581 - 4582 012411 041 215 036 MTXFR: LXI H,MTASEQ ;PNTR TO COMMAND LIST - 4583 012414 062 144 040 XCTMTA: STA SKP.GO ;ACCUM HAD XFR TYPE..SAVE IT - 4584 012417 303 005 025 JMP XCTNOW ;GO EXECUTE THE CHANNEL COMMAND LIST - 4585 - 4586 012422 041 275 036 QMXFR: LXI H,QTXFR ;PNTR TO COMMAND LIST - 4587 012425 303 014 025 JMP XCTMTA ;GO EXECUTE THE CHANNEL COMMAND LIST - 4588 - 4589 012430 041 363 036 MTRESET: LXI H,MTARST ;CHANNEL COMMAND LIST TO CLEAR ERROR FROM MAGTAPE - 4590 012433 303 005 025 JMP XCTNOW ;GO EXECUTE THE CHANNEL COMMAND LIST - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-148 -CMDS.M80 CHANNEL COMMAND LIST EXECUTOR - - 4592 .SBTTL CHANNEL COMMAND LIST EXECUTOR - 4593 ;ROUTINE TO A CHANNEL COMMAND LIST TYPE OPERATION, FOR DATA - 4594 ;TRANSFERS FROM OUR SELECTED BOOT DEVICE.. - 4595 ;COMMAND LIST IS CODED AS FOLLOWS - 4596 ; THE LIST IS A SERIES OF 36-BITCOMMANDS. - 4597 ;WE HAVE FREE USE OF BITS 0-17 AS COMMAND TYPES - 4598 ; BITS 15,16,17 .EQ. 0 MEAN "DI" COMMAND - 4599 ; BITS 15,16,17 .EQ. 1 MEAN "LI" COMMAND - 4600 ; BITS 15,16,17 .EQ. 2 MEAN "EI" COMMAND - 4601 ; BITS 15,16,17 .EQ. 3 MEAN "WAIT" COMMAND - 4602 ; BITS 15,16,17 .EQ. 4 MEAN "ERRTST" COMMAND - 4603 ; BITS 15,16,17 .EQ. 5 MEAN "END" OF COMMAND LIST - 4604 ; BITS 15,16,17 .EQ. 6 MEAN "TWAIT" COMMAND - 4605 ; BITS 15,16,17 .EQ. 7 MEAN "UBA" COMMAND - 4606 - 4607 ;POINTER TO THE CURRENT COMMAND LIST IS ALWAYS STORED IN H,L - 4608 012436 CHNXCT: INTON ;SET UP FOR INTERNAL MODE - (1) 012436 327 RST 2 ;GO SET INTERNAL MODE - 4609 012437 305 PUSH B - 4610 012440 325 PUSH D - 4611 012441 345 PUSH H - 4612 - 4613 012442 021 002 000 DSCON: LXI D,2 ;"D,E" GETS THE CONSTANT "2" - 4614 012445 031 DAD D ;NOW "H,L" POINTS TO "DATA+2"(BITS 12-19) - 4615 - 4616 012446 104 MOV B,H ;COPY "H,L" INTO "B,C" - 4617 012447 115 MOV C,L - 4618 012450 345 PUSH H ;SAVE "H,L" - 4619 012451 176 MOV A,M ;GET BITS 12-19 INTO ACCUM - 4620 - 4621 012452 037 RAR ;NOW JUSTIFY ACCUM AT BITS 16,17 - 4622 012453 037 RAR ;TAKES 2 SHIFTS - 4623 012454 346 017 ANI ^O17 ;OFF ALL BUT BITS 14,15,16,17 - 4624 012456 137 MOV E,A ;NOW PUT INTO LO-ORDER HALF OF DOUBLE REG - 4625 012457 041 101 025 LXI H,DSLST ;GET A PNTR TO THE DISPATCHING LIST - 4626 012462 031 DAD D ;CREAT PNTR TO THE COMMAND - 4627 - 4628 012463 136 MOV E,M ;GET LO ORDER PIECE OF CMD DISPATCH - 4629 012464 043 INX H - 4630 012465 126 MOV D,M ;GET HI ORDER PIECE OF CMD DISPATCH - 4631 012466 353 XCHG ;ASSEMBLED ADDRESS TO "H,L" - 4632 012467 021 074 025 LXI D,XFRRT ;NOW GET A PSEUDO RETURN PC TO PUT ON STACK - 4633 012472 325 PUSH D ;AND PUT IT THERE - 4634 - 4635 012473 351 PCHL ;DISPATCH TO THAT ASSEMBLED ADDRESS - 4636 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-149 -CMDS.M80 CHANNEL COMMAND LIST EXECUTOR - - 4638 ;UPON COMPLETION OF THE COMMAND LIST COMMANDS, YOU GENERALLY - 4639 ;RETURN HERE IN THE CODE - 4640 012474 341 XFRRT: POP H ;GET THE POINTER TO CURRENT LOCATION IN COMMAND LIST - 4641 012475 043 INX H ;MAKE IT POINT TO NEXT WORD IN THE LIST - 4642 012476 303 042 025 JMP DSCON ;AND CONTINUE IN COMMAND LIST EXECUTOR - 4643 - 4644 ;COMMAND LIST DISPATCH SELECTION - 4645 012501 177 025 DSLST: .ADDR CMDDI ;DI CMD .EQ. 0 - 4646 012503 125 025 .ADDR CMDLI ;LI CMD .EQ. 2 - 4647 012505 121 025 .ADDR CMDEI ;EI CMD .EQ. 4 - 4648 012507 226 025 .ADDR CMDWAIT ;WAIT CMD .EQ. 6 - 4649 012511 275 025 .ADDR CMDERCHK ;ERRTST CMD .EQ. 10 - 4650 012513 315 025 .ADDR CMDEN ;END CMD .EQ. 12 - 4651 012515 257 025 .ADDR CMDTWAIT ;WAIT CMD WITH NO TIMEOUT. CHECKS FOR BIT TRUE .EQ. 14 - 4652 012517 161 025 .ADDR CMDUBA ;LI TYPE CMD. NO OFFSETS, GOOD FOR UBA STUFF .EQ. 16 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-150 -CMDS.M80 CHANNEL COMMAND LIST EXECUTOR - - 4654 ;CODE FOR "EI" COMMAND - 4655 012521 247 CMDEI: ANA A ;CLR THE "C-BIT" - 4656 012522 303 126 025 JMP CMDLI1 ;GO TO COMMON CODE FOR LI AND EI COMMAND - 4657 - 4658 ;CODE FOR "LI" COMMAND - 4659 012525 067 CMDLI: STC ;SET THE "C-BIT" - 4660 012526 365 CMDLI1: PUSH PSW ;AND SAVE IT - 4661 012527 MOV5B ;PASS THE COMMAND LIST EXECUTOR THE RHBASE ADDRESS - (1) 012527 347 RST 4 - (1) 012530 000 .BYTE 0 - 4662 012531 242 040 .ADDR RHBASE ;KEPT IN HERE - 4663 012533 024 040 .ADDR IOAD ;USED IN HERE - 4664 - 4665 012535 041 026 040 LXI H,IOAD+2 ;"H,L" PNTS TO DEST+2 - 4666 012540 072 254 040 LDA UBANUM ;CURRENT UBA NUMBER INTO ACCUM - 4667 012543 266 ORA M ;THROW IN THE CURRENT BITS - 4668 012544 167 MOV M,A ;PUT IT ALL BACK - 4669 - 4670 012545 053 DCX H ;NOW MAKE "H,L" POINT TO ADDR +0 - 4671 012546 053 DCX H - 4672 012547 013 DCX B ;MAKE "B,C" PAIR POINT TO SELECTED OFFSET FROM BASE - 4673 012550 012 LDAX B ;GET SELECTED OFFSET - 4674 012551 206 ADD M ;ADD OFFSET TO THE BASE - 4675 012552 167 MOV M,A ;AND PUT THE WHOLE MESS BACK - 4676 012553 361 POP PSW ;NOW GET STATE OF PROCESSOR FLAGS - 4677 012554 330 RC ;IF "C" SET,IT WAS AN LI AND WE ARE DONE - 4678 - 4679 ;CALL THRU IF "C" CLR..IT WAS EI AND WE MUST FINISH IT - 4680 012555 315 360 012 CALL EI1 ;EXECUTE "EI" CMD - 4681 012560 311 RET ;ALL DONE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-151 -CMDS.M80 CHANNEL COMMAND LIST EXECUTOR - - 4683 ;CODE FOR LI TYPE COMMAND ONLY USING NO OFFSETS, TAKING THE ADDRESSES - 4684 ;EXACTLY AS PRESENTED.. GOOD FOR UBA OPERATIONS, WHICH REQUIRE NO OFFSETS - 4685 012561 021 026 040 CMDUBA: LXI D,IOAD+2 ;"D,E" PNTS TO DEST+2 - 4686 012564 325 PUSH D ;SAVE THE ADDRESS OF UBA/RH ADDRESS - 4687 012565 315 336 025 CALL MOV18B ;MOVE SOME DATA - 4688 012570 341 POP H ;ADDR OF UBA/RH INTO H,L - 4689 012571 072 254 040 LDA UBANUM ;CURRENT UBA NUMBER INTO ACCUM - 4690 012574 266 ORA M ;THROW IN THE CURRENT BITS - 4691 012575 167 MOV M,A ;PUT IT ALL BACK - 4692 012576 311 RET ;WE ARE DONE - 4693 - 4694 ;CODE FOR DI COMMAND - 4695 012577 012 CMDDI: LDAX B ;GET DISP CODE TO SEE IF INDIRECT - 4696 012600 247 ANA A ;CHECK THE SIGN BIT - 4697 012601 362 214 025 JP DILOCL ;AND JUMP IF NO INDIRECTION - 4698 - 4699 ;FALL TO HERE IF WAS INDIRECT - 4700 012604 151 MOV L,C ;PASS ADDR IN "B,C" TO "H,L" - 4701 012605 140 MOV H,B - 4702 012606 053 DCX H ;NOW BACK UP PNTR TO HI ORDER PCE OF INDIRECT WRD - 4703 012607 106 MOV B,M ;AND INTO B - 4704 012610 053 DCX H ;NOW TO LO ORDER PIECE OF INDIRECT WORD - 4705 012611 116 MOV C,M ;LO ORDER PIECE TO C AND DONE - 4706 012612 003 INX B ;"B,C" MUST POINT TO SRC + 2 - 4707 012613 003 INX B - 4708 012614 021 051 040 DILOCL: LXI D,DMDAT+2 ;"D,E" POINTS TO DEST+2 - 4709 012617 315 336 025 CALL MOV18B ;MOVE SOME STUFF AROUND - 4710 012622 315 017 013 CALL DI1 ;EXECUTE THE DEPOSIT - 4711 012625 311 RET ;AND BACK TO COMMAND LIST - 4712 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-152 -CMDS.M80 CHANNEL COMMAND LIST EXECUTOR - - 4714 ;CODE FOR WAIT COMMAND(FOR WAITING FOR A TAPE TO FINISH, FOR EXAMPLE) - 4715 012626 CMDWAIT: - 4716 012626 257 XRA A ;CLEAR ACCUM - 4717 012627 127 MOV D,A ;NOW CLR "D", THE REGISTER WE WILL USE FOR TIMEOUT COUNT - 4718 012630 137 MOV E,A ;CLR "E" TOO - 4719 - 4720 012631 305 WAITLP: PUSH B ;SAVE B,C - 4721 012632 315 357 025 CALL CHKBIT ;CHECK BITS VERSUS DEVICE STATUS TO SEE IF SET(I.E READY) - 4722 012635 301 POP B ;RESTORE B,C - 4723 012636 300 RNZ ;IF READY BIT SET, ITS OK, GO AWAY - 4724 - 4725 ;FALL THRU IF READY NOT SET - 4726 012637 305 PUSH B ;SAVE B,C FROM DESTRUCTION - 4727 012640 325 PUSH D ;SAVE TIME-OUT COUNT - 4728 012641 315 360 012 CALL EI1 ;DO ANOTHER EXAMINE OF DEVICE STATUS TO SEE IF READY NOW - 4729 012644 321 POP D ;GET THE TIME-OUT COUNT - 4730 012645 301 POP B ;RESTORE B,C - 4731 012646 023 INX D ;INCREMENT - 4732 012647 173 MOV A,E ;SEE IF COUNT DOWN TO ZERO YET - 4733 012650 262 ORA D ;USE TOP HALF TOO - 4734 012651 302 231 025 JNZ WAITLP ;GO TRY AGAIN - 4735 - 4736 ;FALL THRU IF DEVICE TIME'S OUT BEFORE GETTING A READY - 4737 012654 303 303 025 JMP DEVERR ;GO REPORT "?BT" AND THE FAILED PC - 4738 - 4739 ;CODE FOR TWAIT COMMAND - 4740 012657 305 CMDTWAIT: PUSH B ;FIRST SAVE THE BC POINTERS - 4741 012660 315 360 012 CALL EI1 ;READ THE CURRENT STATE AS IT IS NOW - 4742 012663 301 POP B ;RESET B TO A GOOD VALUE - 4743 012664 305 PUSH B ;AND SAVE IT FROM DESTRUCTION AGAIN - 4744 012665 315 357 025 CALL CHKBIT ;NOW SEE IF APPROPRIATE BIT IS SET - 4745 012670 301 POP B ;RESTORE - 4746 012671 300 RNZ ;RETURN IF BIT WAS SET AS DESIRED - 4747 012672 303 303 025 JMP DEVERR ;ELSE.. GO SAY ERR, BIT WAS NOT SET AS DESIRED - 4748 - 4749 ;CODE FOR ERROR TEST COMMAND - 4750 012675 305 CMDERCHK: PUSH B ;SAVE B,C - 4751 012676 315 357 025 CALL CHKBIT ;FIRST GO CHECK TO SEE IF ANY OF DESIRED BITS SET - 4752 012701 301 POP B ;AND RESTORE - 4753 012702 310 RZ ;IF NONE SET, RETURN CAUSE ALL IS OK - 4754 - 4755 ;FALL TO HERE IF SOME BITS SET..HAD DEVICE ERROR & THEREFORE "BOOT" FAILED - 4756 012703 140 DEVERR: MOV H,B ;NOW COPY "B,C" TO "H,L" REGISTER - 4757 012704 151 MOV L,C - 4758 - 4759 012705 042 154 040 SHLD ERRCD ;"H,L" NOW HAS FAILING PC - 4760 012710 INTOFF ;LET ALL MESSAGES PRINT NOW - (1) 012710 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 4761 012711 257 XRA A ;CLR C-BIT, SO THAT IT WILL SET LATER, TO INDICATE ERR - 4762 012712 303 325 025 JMP DEVEXIT ;GO EXIT WITH MESSING WITH PRINT FLAGS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-153 -CMDS.M80 CHANNEL COMMAND LIST EXECUTOR - - 4764 ;CODE FOR THE END COMMAND - 4765 012715 021 004 017 CMDEN: LXI D,MAD000 ;GUARANTEE CSL BUS ADDR REG .EQ. 0 AFTER XFR - 4766 012720 315 207 033 CALL ADATP ;WRITE THE CSL BUS ADDRESS REG WITH 0'S - 4767 012723 INTOFF ;CLR INTERNAL MODE - (1) 012723 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 4768 012724 067 STC ;SET THE C-BIT, SO THAT IT WILL BE CLEARED LATER - 4769 012725 077 DEVEXIT: CMC ;COMPLEMENT C-BIT, SO IT WILL SAY ERR, OR NO ERR - 4770 012726 341 POP H ;THROW OUT PSEUDO RETURN FROM STACK TOP - 4771 012727 341 POP H ;THROW OUT THE SAVED "H,L" - 4772 012730 341 POP H ;AND RESTORE ALL THE REGISTERS - 4773 012731 321 POP D ;THAT WE SAVED - 4774 012732 301 POP B - 4775 012733 076 000 MVI A,0 ;ACCUM WILL ALWAYS BE 0 ON EXIT FROM CMD LIST EXECUTOR - 4776 012735 311 RET - 4777 ;ROUTINE FOR MOVING 3 BYTES OF DATA - 4778 ;"B,C" HAS SRC+2..."D,E" HAS DST+2 - 4779 012736 046 002 MOV18B: MVI H,2 ;COUNT OF 3 IS HOW MANY TO MOVE - 4780 012740 012 LDAX B ;GET PIECE OF SOURCE - 4781 012741 346 003 ANI 3 ;ONLY INTERESTED IN BITS 18,19 - 4782 012743 022 STAX D ;PUT AT DESTINATION - 4783 012744 013 DCX B ;POINT TO NEXT RELEVANT BYTE - 4784 012745 033 DCX D ;FOR SRC AND DST - 4785 012746 012 MOV18X: LDAX B ;GET A PIECE OF THE SRC TO ACCUM - 4786 012747 022 STAX D ;AND PUT AT DESTINATION PLACE - 4787 012750 013 DCX B ;DOWN THE POINTER - 4788 012751 033 DCX D ;DOWN THE OTHER POINTER - 4789 012752 045 DCR H ;AND DOWN THE COUNTER.. - 4790 012753 302 346 025 JNZ MOV18X ;CONTINUE TILL MOVED 3 BYTES - 4791 012756 311 RET ;THEN OUT - 4792 - 4793 ;COMMON ROUTINE FOR CHECKING DEVICE STATUS, FOR EITHER DEVICE ERRORS OR - 4794 ;READY BIT TRUE..MUST BE CALLED IMMEDIATLY AFTER AN "EI." COMMAND - 4795 012757 052 012 040 CHKBIT: LHLD EMBUF ;GET CURRENT DEVICE STATUS INTO "H,L" - 4796 012762 013 DCX B ;MAKE B PNT TO +1 - 4797 012763 013 DCX B ; AND MAKE IT PNT TO +0 - 4798 012764 012 LDAX B ;BYTE OF DESIRED INTO ACCUM - 4799 012765 245 ANA L ;COMPARE AGAINST CURRENT DEVICE - 4800 012766 300 RNZ ;IF NON-ZERO, NO NEED TO LOOK FURTHER - 4801 - 4802 012767 003 INX B ;IF 1ST BYTE WAS ZERO, BUMP PNTR TO LOOK AT NEXT BYTE - 4803 012770 012 LDAX B ;NEXT BYTE INTO THE ACCUM - 4804 012771 244 ANA H ;COMPARE VERSUS DESIRED - 4805 012772 311 RET ;PLAIN RETURN..Z BIT WILL BE SET APPROPRIATELY - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-154 -CMDS.M80 *** "BC" CMD *** - - 4807 .SBTTL *** "BC" CMD *** - 4808 ;CODE WHICH PERFORMS THE VERY FAMOUS BOOT CHECK I - 4809 012773 315 231 005 BCCMD: CALL MRCMD ;MAKE SURE MACHINE IS STOPPED - 4810 012776 INTON ;SET UP INTERNAL MODE - (1) 012776 327 RST 2 ;GO SET INTERNAL MODE - 4811 012777 CLRB ERRCD ;BEGIN BY CLEARING THE ERROR CODES - 4812 013001 CLRB ERRCD+1 ;MUST CLEAR BOTH HALVES - 4813 001 .IF NDF,NEEDRM - 4814 - 4815 013003 CLRRM BUSAD ;WILL GENERATE A STARTING BUFFER OF (400000,,0) - (1) 013003 347 RST 4 - (1) 013004 012 .BYTE 10. - (1) 013005 047 040 .ADDR BUSAD+5 - 4816 013007 076 010 MVI A,^O10 ;THIS TURNS OUT TO BE BIT0 IN 36-BIT LAND - 4817 013011 062 046 040 STA BUSAD+4 ; SET IT - 4818 - 4819 013014 001 000 001 LXI B,^O400 ;SET B=1, C=0 - 4820 013017 305 BC.ALP: PUSH B ;SAVE COUNTERS - 4821 013020 315 241 011 CALL DBCMD ;EXECUTE THE DEPOSIT BUS - 4822 - 4823 ;CHECK FOR FAILURE - 4824 013023 072 154 040 LDA ERRCD ;FETCH AN ERROR CODE - 4825 013026 247 ANA A ;SET 8080 CONDITION CODES - 4826 013027 302 004 027 JNZ BCA.ERR ;GO STANDARD ERROR REPORT IF ERR FOUND - 4827 - 4828 ;NO ERROR, GENERATE THE NEXT DATUM - 4829 013032 041 042 040 LXI H,BUSAD ;POINT TO A BUFFER TO BE SHIFTED - 4830 013035 315 167 031 CALL SHR36 ;SHIFT 36 BITS(I.E. FLOAT A 1 OR 0) - 4831 013040 001 .BYTE 1 ;SHIFT ONLY ONE PLACE AT A TIME - 4832 - 4833 ;NOW CHECK FOR END OF TEST - 4834 013041 301 POP B ;GRAB UP THE CURRENT LOOP COUNTERS - 4835 013042 014 INR C ;UP COUNT FOR THIS DATAUM - 4836 013043 171 MOV A,C ;COPY TO ACCUM - 4837 013044 376 044 CPI 36. ;NOW SEE IF FLOATED DOWN THE ENTIRE 36 BIT WORD - 4838 013046 332 017 026 JC BC.ALP ;JUMP IF NOT DONE A GROUP OF 36 YET.. - 4839 - 4840 ;HERE WHEN DONE A GROUP OF 36, SEE IF THIS WAS FIRST OR SECOND TIME THROUGH - 4841 013051 005 DCR B ;DECREMENT "TIMES THROUGH THE LOOP" COUNTER - 4842 013052 372 075 026 JM BC.2ND ;IF MINUS, TIME TO GET OUT..GO NEXT PHASE OF TEST - 4843 - 4844 ;HERE WHEN DONE FIRST WORD, TIME TO SET UP TO FLOAT A 0 THROUGH A FIELD - 4845 ;OF ONES - 4846 013055 MOV5B ;MOVE 2ND DATA PATTERN - (1) 013055 347 RST 4 - (1) 013056 000 .BYTE 0 - 4847 013057 070 026 .ADDR BC.DB2 ;INIT 2ND PATTERN TO BE (377777,,777777) - 4848 013061 042 040 .ADDR BUSAD ;AND THIS IS THE PLACE THAT THE DB COMMAND USES - 4849 - 4850 013063 016 000 MVI C,00 ;RESET THE COUNTER - 4851 013065 303 017 026 JMP BC.ALP ;AND GO ROUND FOR THE SECOND TIME...... - 4852 013070 BC.DB2: D 377,777,,777,777 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-155 -CMDS.M80 *** "BC" CMD *** - - 4854 ;BOOTCHECK CODE FOR EXECUTING A TEST OF THE CRAM AND ITS ABILITIY TO HOLD - 4855 ;ALL ONES AND ZEROES, AND TO SEE IF ITS ADDRESSING LOGIC WORKS AS - 4856 ;IT SHOULD.... - 4857 013075 041 000 000 BC.2ND: LXI H,00 ;START AT CRAM ADDRESS 00 - 4858 013100 315 250 026 BC.BLP: CALL W.CRMZ ;WRITE THE LOCATION WITH ALL ZEROES - 4859 013103 043 INX H ;UPDATE TO NEXT CRAM ADDRESS - 4860 013104 174 MOV A,H ;NOW CHECK TO SEE IF DONE ALL - 4861 013105 346 010 ANI ^O10 ;IS ADDRESS AT "4000" YET?? - 4862 013107 312 100 026 JZ BC.BLP ;BACK AND ZERO MORE IF NOT YET - 4863 - 4864 ;NOW READY FOR COMBINED ADDRESS AND DATA TEST - 4865 013112 046 000 MVI H,00 ;L IS ALREADY .EQ. 0, NOW MAKE H,L PAIR .EQ. 0 - 4866 013114 315 340 014 BC.BL1: CALL CADWR ;WRITE CURRENT CRAM ADDRESS - 4867 013117 345 PUSH H ;AND SAVE IT FOR A WHILE - 4868 013120 315 205 013 CALL CP1 ;CLOCK TO GET THE CONTENTS OF THAT LOC TO C.R. - 4869 013123 315 041 015 CALL RCINT ;NOW READ-IN THE CONTENTS OF THE C.R. - 4870 013126 041 000 000 LXI H,00 ;DATA TO VERIFY AGAINST IS 00 - 4871 013131 315 276 026 CALL V.VER ;VERIFY CONTENTS OF C.R. TO BE ALL 0 - 4872 013134 315 241 026 CALL A.CRMO ;NOW WRITE THAT LOCATION WITH ALL ONES - 4873 013137 341 POP H ;RETRIEVE CURRENT CRAM ADDRESS - 4874 013140 043 INX H ;UP TO THE NEXT ADDRESS - 4875 013141 174 MOV A,H ;COPY HI HALF TO ACCUM, SO CAN CHECK FOR 4000 - 4876 013142 346 010 ANI ^O10 ;ADDRESS AT "4000"?? - 4877 013144 312 114 026 JZ BC.BL1 ;BACK INTO LOOP IF NOT YET.. - 4878 - 4879 ;WHEN DONE HERE, FALL INTO MEMORY PART OF BOOT CHECK - 4880 ;A PAGE MOS MEMORY CHECK - 4881 013147 315 077 020 BC.3RD: CALL ZMCMD ;FIRST CLEAR THE ENTIRE MOS MEMORY(AT LEAST TRY) - 4882 - 4883 013152 MOV5B ;SET UP THE INITIAL DATA - (1) 013152 347 RST 4 - (1) 013153 000 .BYTE 0 - 4884 013154 271 022 .ADDR ONES ;DATA FOR DEPOSITING IS ALL ONES - 4885 013156 047 040 .ADDR DMDAT ;.. THE DEPOSIT BUFFER - 4886 - 4887 013160 MOV5B ;SET UP THE STARTING MEMORY ADDRESS - (1) 013160 347 RST 4 - (1) 013161 000 .BYTE 0 - 4888 013162 257 022 .ADDR MA1000 ;START AT ADDRESS 1000 - 4889 013164 017 040 .ADDR MEMAD ;.. MEMORY ADDRESS BUFFER - 4890 - 4891 013166 315 037 012 BC.CLP: CALL EM2 ;EXAMINE A LOCATION - 4892 013171 315 033 033 CALL CMP36 ;THEM COMPARE RESULTS..DATA SHOULD BE ALL ZEROES - 4893 013174 012 040 .ADDR EMBUF ;THIS IS THE ACTUAL READ-IN DATA - 4894 013176 004 017 .ADDR ZEROES ;VERSUS 36-BITS OF 0'S - 4895 013200 302 355 026 JNZ BC.CERR ;GO TO ERROR REPORT IF NOT ALL ZEROES - 4896 - 4897 ;FALL THRU IF THAT WENT OK. - 4898 013203 315 235 012 CALL DM2 ;NOW DEPOSIT ONES INTO THAT LOC AND CONTINUE - 4899 - 4900 013206 315 037 012 CALL EM2 ;WHILE WE ARE AT IT, WE'LL CHECK ALL ONES - 4901 013211 315 033 033 CALL CMP36 ;DO THE 36-BIT COMPARE - 4902 013214 012 040 .ADDR EMBUF ;THIS STUFF JUST READ IN - 4903 013216 271 022 .ADDR ONES ;AGAINST ALL ONES - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-156 -CMDS.M80 *** "BC" CMD *** - - 4904 013220 302 355 026 JNZ BC.CERR ;IF BAD, SAY SO.. - 4905 - 4906 013223 052 017 040 LHLD MEMAD ;FETCH UP THE CURRENT MEMORY ADDRESS - 4907 013226 043 INX H ;UPDATE TO THE NEXT - 4908 013227 174 MOV A,H ;COPY HI PIECE TO THE ACCUM - 4909 013230 346 004 ANI ^O4 ;SEE IF REACHED ADDRESS 2000 - 4910 013232 042 017 040 SHLD MEMAD ;REPLACE THE UPDATED ADDRESS FIRST - 4911 013235 312 166 026 JZ BC.CLP ;AND CONTINUE IF HAD NOT REACHED THE MAX - 4912 - 4913 013240 311 RET ;RETURN..DONE ALL BOOT CHECK OK - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-157 -CMDS.M80 *** "BC" CMD *** - - 4915 ;SUBROUTINES REQUIRED FOR THE CRAM TESTING - 4916 ;SUBROUTINES FOR WRITING ALL ONES AND ALL ZEROES INTO A SELECTED CRAM - 4917 ;LOCATION.. DESIRED ADDRESS PASSED IN THE H,L REGISTER(FOR W.XXX CALLS) - 4918 ;USES CURRENTLY SELECTED ADDRESS FOR (A.XXX CALLS) - 4919 013241 345 A.CRMO: PUSH H ;SAVE H,L - 4920 013242 041 377 377 LXI H,-1 ;H,L TO ALL ONES INDICATES THE ALL ONES DATA DESIRED - 4921 013245 303 257 026 JMP W.LOC ;GO COMMON CODE - 4922 - 4923 013250 315 340 014 W.CRMZ: CALL CADWR ;WRITE DESIRED ADDRESS - 4924 013253 345 A.CRMZ: PUSH H ;SAVE H,L - 4925 013254 041 000 000 LXI H,00 ;SET TO ZERO, DATA IS ALL ZEROES - 4926 013257 016 007 W.LOC: MVI C,7 ;TAKES 8 FUNCTION WRITES TO DO ALL OF ONE CRAM LOC - 4927 013261 171 W.LP: MOV A,C ;GET CURRENT FUNCTION TO ACCUM - 4928 013262 062 010 040 STA CRMFN ;PUT FUNCTION INTO LOC USED BY STANDARD ROUTINE - 4929 013265 315 303 014 CALL WFUNC ;WRITE ONE OF THE 8 PIECES OD A CRAM LOC - 4930 013270 015 DCR C ;DOWN COUNT - 4931 013271 362 261 026 JP W.LP ;AS LONG AS .GE. 0, KEEP GOING - 4932 013274 341 POP H ;HERE WHEN DONE ALL 8 - 4933 013275 311 RET ;NOW GET OUT OF HERE. - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-158 -CMDS.M80 *** "BC" CMD *** - - 4935 ;ROUTINE TO VERFIY THAT A CRAM LOCATION IS INDEED ALL ONES OR ALL ZEROES. - 4936 ;NO ARGUMENTS PASSED TO THIS ROUTINE - 4937 013276 042 316 040 V.VER: SHLD CRMBF+^O14 ;ALL DONT CARE LOCS OF THE "READ" ARE FUDGED - 4938 013301 042 320 040 SHLD CRMBF+^O16 ; TO MATCH EXPECTED DATA - 4939 013304 042 322 040 SHLD CRMBF+^O20 ; THERE ARE 12 DONT CARE LOCATIONS - 4940 - 4941 013307 042 332 040 SHLD CRMBF+^O30 ; SOME ARE VARIOUS ADDRESS(NXT/CURRENT/SUBRTN) - 4942 013312 042 334 040 SHLD CRMBF+^O32 ; AND SOME ARE JUST UNBUFFERED COPIES OF THE - 4943 013315 042 336 040 SHLD CRMBF+^O34 ; BUS - 4944 - 4945 013320 175 MOV A,L ;NOW COPY EXPECTED DATA INTO "B,C" PAIR - 4946 013321 057 CMA ;FIRST COMPLIMENT - 4947 013322 117 MOV C,A ;THEN MOVE - 4948 013323 174 MOV A,H ; NEED BOTH HALVES PLEASE - 4949 013324 057 CMA ;COMPLIMENT - 4950 013325 107 MOV B,A ;THEN MOVE - 4951 - 4952 013326 041 302 040 LXI H,CRMBF ;NOW POINT TO BEGINNING OF BUFFER WHERE EXPECTED DATA - 4953 013331 136 V.BCLP: MOV E,M ;IS KEPT.. PROCEED TO COPY BUFFER DATA INTO - 4954 013332 043 INX H ;(UPDATE POINTER) - 4955 013333 126 MOV D,M ;THE D,E REGISTER PAIR - 4956 013334 043 INX H ;AND UPDATE MEMORY POINTER AFTER EACH MOVE - 4957 013335 353 XCHG ;SWAP, SO NOW "H,L" HAS BUFFER, "D,E" HAS POINTER - 4958 013336 011 DAD B ;ADD COMPLIMENT TO EXPECTED...SHOULD GET 0. - 4959 013337 043 INX H ; TWO'S COMPLIMENT , THAT IS.. - 4960 013340 175 MOV A,L ;PIECE TO ACCUM - 4961 013341 264 ORA H ;"OR" IN THE OTHER PIECE - 4962 013342 302 365 026 JNZ BC.BERR ;AND GO HANDLE ERROR IF RESULTS .NE. 0 - 4963 - 4964 ;YOU FELL THROUGH TO HERE IF DATA CHECK WAS OK.. - 4965 013345 353 XCHG ;SWAP..NOW "H,L" HAS POINTER, "D,E" HAS 00 - 4966 013346 076 342 MVI A,<&^O377> ;CHECK IF DONE - 4967 013350 275 CMP L ;SEE IF AT LAST LOCATION IN LIST - 4968 013351 302 331 026 JNZ V.BCLP ;JUMP BACK IF NOT YET - 4969 013354 311 RET ;ELSE OK TO RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-159 -CMDS.M80 *** "BC" CMD *** - - 4971 ;ERROR REPORTING - 4972 013355 052 017 040 BC.CERR: LHLD MEMAD ;GRAB UP FAILED MEM ADDRESS - 4973 013360 006 100 MVI B,^O100 ;GET A BIT TO SET IN ERROR PRINTOUT - 4974 013362 303 371 026 JMP BCC.ERR ;GO PROCESS STANDARD ERROR TYPEOUTS - 4975 013365 341 BC.BERR: POP H ;CLEAR A RETURN ADDRESS - 4976 013366 006 200 MVI B,^O200 ;BIT TO SET FOR CRAM FAILURES - 4977 013370 341 POP H ;NOW GATHER UP THE CURRENT CRAM ADDRESS - 4978 013371 042 154 040 BCC.ERR: SHLD ERRCD ;SAVE 1 BYTE BY DEPOSITING TWICE - 4979 013374 174 MOV A,H ;HI HALF TO THE ACCUM - 4980 013375 260 ORA B ;THROW IN A WEIGHT SO NUMBER WILL DIFFER - 4981 013376 062 155 040 STA ERRCD+1 ;PUT NUMBER INTO ERROR CODE LOC - 4982 013401 303 011 027 JMP BCB.ERR ;AND GO PRINT OUT THE CORRECT ERROR STUFF - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-160 -CMDS.M80 *** "BC" CMD *** - - 4984 013404 301 BCA.ERR: POP B ;GET COUNTER OFF THE STACK - 4985 013405 171 MOV A,C ;SUBTEST TO ACCUM - 4986 013406 062 154 040 STA ERRCD ;PLACE FROM WHICH TO REPORT ERRORS - 4987 013411 BCB.ERR: CLRB NOPNT ;GUARANTEE PRINTING ON - 4988 013413 PLINE ERRMSG ;"?BC" - (1) 013413 337 RST 3 ;PRINT LINE OF CHARS - (1) 013414 201 037 .ADDR ERRMSG ;BUFF TO PRINT - 4989 013416 041 154 040 LXI H,ERRCD ;POINT AT THE ERROR I.D. - 4990 013421 315 332 030 CALL P16 ;PRINT - 4991 013424 303 166 032 JMP MMERR ;OUT - 4992 000 .ENDC - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-161 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 4994 .SBTTL ****KS10 CONSOLE SUBROUTINE FILE - 4995 ;SUBROUTINE TO CHECK IF THE CPU IS RUNNING, AND IF IT IS, - 4996 ;TO ABORT THE COMMAND THAT CALLED IT - 4997 013427 341 .RUN..: POP H ;MUST FIX THE STACK - 4998 013430 365 PUSH PSW ;SAVE FLAGS(STATE OF THE "C-BIT" - 4999 013431 072 165 040 LDA RNFLG ;CHECK SOFTWARE RUN FLAG TO SEE IF CPU CLK ON - 5000 013434 247 ANA A ;IS IT ZERO? , OR NOT ZERO - 5001 013435 302 042 027 JNZ YSRUN ;IF NOT ZERO, JMP OFF TO PRINT MESSAGE - 5002 - 5003 013440 361 POP PSW ;OTHERWISE, RESTORE FLAGS - 5004 013441 311 RET ;AND OUT - 5005 - 5006 013442 YSRUN: PLINE RN. ;MESSAGE TO SAY RUNNING.. - (1) 013442 337 RST 3 ;PRINT LINE OF CHARS - (1) 013443 206 037 .ADDR RN. ;BUFF TO PRINT - 5007 013445 303 166 032 JMP MMERR ;NOW GO RESTART OURSELVES - 5008 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-162 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5010 ;ROUTINE TO REPORT A PARITY ERROR WHEN DETECTED BY THE 8080 CONSOLE - 5011 013450 RPTPAR: CLRB NOPNT ;TURN TYPING ON - 5012 013452 257 XRA A ;ACCUM MUST BE ZERO - 5013 013453 323 206 OUT CLKCTL ;KILL CLK, SO PAR ERR CLRING WONT RELEASE THE CPU CLKS - 5014 - 5015 001 .IF DF,SCECOD - 5016 013455 072 326 042 LDA SC.OFF ;GET FLAG TO SEE IF WE CAN TRY FOR SOFT RECOVER - 5017 013460 247 ANA A ;SET 8080 FLAGS - 5018 013461 302 127 027 JNZ HRDERR ;IF FLAG .NE. 0, THEN WE WILL NOT RECOVER - 5019 ;FIRST THING WE NEED TO DO IS CHECK FOR CRAM/CRA PARITY ERRORS, AND DECIDE - 5020 ;IF WE CAN RECOVER FROM THEM - 5021 013464 LONG.DELAY 1 ;LET DISK TRAFFIC STOP - (1) 013464 041 310 000 LXI H,200. * 1 ;SET UP THE TIMING COUNT IN H,L REG - (1) 013467 315 154 014 CALL LTLOOP ;AND GO DELAY ABOUT 1 SECOND FOR EACH (300 COUNT) - 5022 013472 076 100 MVI A,SMPAR ;GET WHICH REG HAS PARITY INFO IN IT - 5023 013474 315 270 013 CALL ER.UTL ;READ DATA,PARITY BITS RETURNED IN ACCUM - 5024 013477 057 CMA ;INVERT SO THAT .TRUE. .EQ. HI - 5025 013500 346 022 ANI ^O22 ;SEE IF CRA/CRM ERROR TYPE - 5026 013502 312 127 027 JZ HRDERR ;IF NO, GO FOR A HARD ERROR - 5027 - 5028 ;WELL, LETS SEE IF MEM BUSY OR I/O BUSY - 5029 013505 333 102 IN R.BUSY ;*****I/O RD 102***** - 5030 013507 057 CMA ;FIX HARDWARE COMPLIMENT - 5031 013510 346 060 ANI ^O60 ;SEE IF EITHER OF THOSE TWO BITS SET - 5032 013512 107 MOV B,A ;SAVE RESULTS OF THIS "AND" FOR A BIT - 5033 013513 333 101 IN REFERR ;SEE IF MEM REFRESH ERR EITHER - 5034 013515 057 CMA ;FIX HARDWARE INVERSION - 5035 013516 346 001 ANI 1 ;ONLY KEEP THE REFRESH BIT - 5036 013520 260 ORA B ;THROW THE TWO TOGETHER..IF RESULTS .EQ. 0, THEN ALL OK - 5037 013521 312 264 027 JZ SOFTERR ;IF NOTHING, GO TRY FOR THE SOFT ERROR RECOVERY - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-163 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5039 ;GET TO HERE IF ERROR IS CONSIDERED NON-RECOVERABLE - 5040 013524 NR: PLINE NRSCE ;"?NR-SCE". NON RECOVERABLE-SOFT CRAM ERROR - (1) 013524 337 RST 3 ;PRINT LINE OF CHARS - (1) 013525 245 027 .ADDR NRSCE ;BUFF TO PRINT - 5041 000 .ENDC - 5042 - 5043 - 5044 013527 HRDERR: CLRB CHKPAR ;SAY NOT TO REPORT AGAIN & AGAIN - 5045 013531 315 352 006 CALL CLRUSE ;EXIT FROM USER MODE - 5046 013534 PLINE PARMSG ;MESSAGE TO CTY - (1) 013534 337 RST 3 ;PRINT LINE OF CHARS - (1) 013535 161 037 .ADDR PARMSG ;BUFF TO PRINT - 5047 - 5048 013537 333 100 IN SMPAR ;***** I/O RD PARITY ***** - 5049 013541 057 CMA ;FIX THE HARDWARE INVERSION - 5050 013542 315 317 030 CALL P8BITA ;AND PRINT IT OUT WITH THE ERROR MESSAGE - 5051 013545 PSPACE ;SEPARATE THE 8 BIT DATUMS - (2) 013545 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 013546 040 .BYTE SPACE ;CHAR TO PRINT - 5052 013547 333 303 IN ^O303 ;READ "DPM PARITY BIT" - 5053 013551 057 CMA ;FIX CPU INVERSION - 5054 013552 346 001 ANI ^O1 ;ONLY INTERESTED IN BIT 0 "DPM PAR ERR" - 5055 013554 315 317 030 CALL P8BITA ;AND THEN PRINT THE "DPM PAR" DATA - 5056 013557 PSPACE ;AGAIN, SEPARATE BY SPACES - (2) 013557 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (2) 013560 040 .BYTE SPACE ;CHAR TO PRINT - 5057 013561 333 103 IN ^O103 ;READ REG THAT HAS R PAR RIGHT & R PAR LEFT - 5058 013563 057 CMA ;FIX THE HARDARE INVERSION - 5059 013564 346 360 ANI ^O360 ;KEEP ONLY THE 2 "R PAR" BITS - 5060 013566 315 051 017 CALL P8CRLF ;PRINT IT - 5061 013571 315 302 032 CALL CLRRN ;CLEAR THE SOFTWARE "RUNNING" FLAG TOO - 5062 013574 315 326 032 CALL LTFLT ;PARITY ERROR LIGHTS THE FAULT LIGHT - 5063 013577 303 255 001 JMP REINI ;AND GO RE-INIT..PAR ERRS ARE FATAL - 5064 001 .IF DF,SCECOD - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-164 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5066 ;COMMAND LIST FOR READING UBA INFO - 5067 013602 UBA.RD: UBA. 763,001 - (1) 013602 001 .BYTE 001 & 377 - (1) 013603 346 .BYTE Q.1 - (1) 013604 073 .BYTE Q.2 - 5068 013605 ENDLST - (1) 013605 000 .BYTE 0 - (1) 013606 000 .BYTE 0 - (1) 013607 050 .BYTE <12*4> - 5069 - 5070 ;RH11 COMMAND LIST FOR CHECKING FOR RECOVERABLE & NON RECOVERABLE - 5071 ;STATES OF THE CONTROLLER - 5072 013610 RH.TST: EI. D776,P.00 ;EXAM CONTROLLER STATUS REG - (1) 013610 374 .BYTE Q.1 - (1) 013611 000 .BYTE P.00 & 377 - (1) 013612 023 .BYTE Q.2 - 5073 013613 ERRTST 60000 ;TEST FOR FATAL ERRS - (1) 013613 000 140 .ADDR 60000 - (1) 013615 040 .BYTE <10*4> - 5074 013616 EI. D776,P.12 ;EXAM DRIVE STATUS REG - (1) 013616 374 .BYTE Q.1 - (1) 013617 012 .BYTE P.12 & 377 - (1) 013620 023 .BYTE Q.2 - 5075 013621 ERRTST 40000 ;CHECK THAT GUY FOR ERRS - (1) 013621 000 100 .ADDR 40000 - (1) 013623 040 .BYTE <10*4> - 5076 013624 ENDLST ;HERE IF ALL OK - (1) 013624 000 .BYTE 0 - (1) 013625 000 .BYTE 0 - (1) 013626 050 .BYTE <12*4> - 5077 - 5078 013627 RH.EXE: EI. D776,P.00 ;A TEMPLATE FOR RH EXAMINES - (1) 013627 374 .BYTE Q.1 - (1) 013630 000 .BYTE P.00 & 377 - (1) 013631 023 .BYTE Q.2 - 5079 013632 ENDLST ;THAT'S ALL WE NEED FOR THIS - (1) 013632 000 .BYTE 0 - (1) 013633 000 .BYTE 0 - (1) 013634 050 .BYTE <12*4> - 5080 - 5081 013635 000 SAVLST: .BYTE P.00 ;READ 776700 - 5082 013636 002 .BYTE P.02 ;READ 776702 - 5083 013637 004 .BYTE P.04 ;READ 776704 - 5084 013640 006 .BYTE P.06 ;READ 776706 - 5085 013641 010 .BYTE P.10 ;READ 776710 - 5086 013642 032 .BYTE P.32 ;READ 776732 - 5087 013643 034 .BYTE P.34 ;READ 776734 - 5088 013644 377 .BYTE -1 ;END OF LIST MARKER - 5089 ;THE ASCII MESSAGES REQUIRED FOR PARITY RECOVERY - 5090 013645 077 116 122 NRSCE: .ASCIZ/?NR-SCE / ;NOT RECOVERABLE SOFT CRAM ERROR - 5091 013656 045 123 103 OKSCE: .ASCIZ/%SCE / ;RECOVERABLE SOFT CRAM ERROR - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-165 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5093 ;NOW GET THE CURRENT CRAM ADDRESS & CHECK FOR HARD CRAM ERRORS. - 5094 ;(NOTE: A HARD CRAM ERROR IS A CRAM PARITY ERROR OCCURRING AT - 5095 ;THE SAME CRAM ADDRESS MORE THAN ONCE IN A ROW) - 5096 013664 021 344 040 SOFTERR: LXI D,SCEADR ;"D,E" PAIR WILL POINT AT THE DESIRED - 5097 013667 315 204 030 CALL BREAK ;GO CHECK IF CURRENT .EQ. DESIRED.. - 5098 013672 312 127 027 JZ HRDERR ;IF YES, JUMP 'CAUSE ITS A HARD ERROR - 5099 - 5100 ;SOFT CRAM ERRO RECOVERY CONTINUED.... - 5101 ;RECOVERY BEGINS BY ZAPPING THE PE(1) FLOP SO WE MAY CATCH ANY ADDITIONAL - 5102 ;PARITY ERRORS - 5103 013675 076 001 MVI A,1 ;BIT TO RESET CRAM C.R. & PE(1) - 5104 013677 323 204 OUT CRMCTL ;***** I/O WRT/204 ***** - 5105 - 5106 ;FALL THRU IF ADDRESS NOT THE SAME - 5107 013701 042 344 040 NOTSAME: SHLD SCEADR ;SAVE IT AS THE NEW "PREVIOUS" - 5108 - 5109 ;NOW CHECK RH11 TO SEE IF THIS FAILURE IS RECOVERABLE FOR THE - 5110 ;MONITOR. 8080 WILL SIMPLY EXECUTE A CHANNEL COMMAND LIST - 5111 ;OF "ERRTST" , WITH THE CORRECT ERROR BITS CHECKED FOR - 5112 013704 041 210 027 LXI H,RH.TST ;POINT TO ERROR CHECKER COMMAND LIST - 5113 013707 315 036 025 CALL CHNXCT ;EXECUTE THAT LIST - 5114 013712 332 124 027 JC NR ;IF BAD, SAY NOT RECOVERABLE - 5115 ;ELSE...FALL INTO THE SOFT RECOVERY CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-166 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5117 ;FINALLY GET TO HERE IF THIS THING LOOKS RECOVERABLE. NOW WE MUST - 5118 ;BEGIN SAVING THINGS... - 5119 ;FIRST.. GET THE CURRENT DISK UBA NUMBER TO SET UP THE RH11 REGISTER - 5120 ;SAVING. THEN WE MUST SET UP THE RH11 BASE REGISTER ITSELF - 5121 ;WHILE WE ARE AT IT, MIGHT AS WELL PRINT A LITTLE MESSAGE SAYING WHAT WE ARE - 5122 ;DOING IN HERE - 5123 013715 RECVR: PLINE OKSCE ;ERR MSG "%SCE" SOFT CRAM ERROR - (1) 013715 337 RST 3 ;PRINT LINE OF CHARS - (1) 013716 256 027 .ADDR OKSCE ;BUFF TO PRINT - 5124 013720 041 344 040 LXI H,SCEADR ;NOW POINT TO THIS BAD ADDRESS - 5125 013723 315 332 030 CALL P16 ;AND PRINT IT - 5126 013726 PCRLF ;TERMINATE EVERYTHING WITH A CR-LF - (2) 013726 347 RST 4 - (2) 013727 002 .BYTE 2 - 5127 013730 315 041 023 CALL DSKDFT ;NOW GET THOSE DEFAULTS JUST MENTIONED - 5128 013733 257 XRA A ;CLEAR ACCUM - 5129 013734 323 100 OUT RESET ;*****I/O WRT 100***** NO PAR CHECKING - 5130 - 5131 ;FINALLY READY TO BEGIN THE ACT OF SAVING SOME REGISTERS - 5132 ;FIRST GET UBA LOCATION 763001 - 5133 013736 041 202 027 LXI H,UBA.RD ;POINTER TO UBA READ-IN LIST - 5134 013741 315 036 025 CALL CHNXCT ;READ-IN THE UBA INFO.. NOW ITS IN EMBUF - 5135 013744 INTON ;DON'T PRINT THIS - (1) 013744 327 RST 2 ;GO SET INTERNAL MODE - 5136 013745 315 360 012 CALL EI1 ;ACTUALLY DO THE READ-IN - 5137 013750 INTOFF ;OK NOW - (1) 013750 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 5138 - 5139 ;BEFORE WE SAVE IT, WE WILL SET UP FOR SAVING RH REGISTERS.. THAT WAY, WE - 5140 ;CAN USE SOME COMMON CODE FOR PUTTING DATA INTO OUR SAVE BUFFER. - 5141 013751 001 227 027 LXI B,RH.EXE ;NOW POINT TO A CHANNEL COMMAND LIST - 5142 013754 021 172 040 LXI D,RM100 ;AND POINT TO A PLACE TO PUT THE LIST - 5143 013757 076 006 MVI A,6 ;IT TAKES SIX BYTES TO MOVE THE ENTIRE LIST - 5144 013761 315 022 033 CALL M5B ;MOVE THE STUFF TO RAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-167 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5146 ;THE CODE TO MOVE BYTES REQUIRES "B,C" POINTING TO THE SOURCE - 5147 ;AND "D,E" POINTING TO THE DESTINATION - 5148 ;AND "A" HAVING HOW MANY BYTES TO BE MOVED.. "MOVREG" DOES 5 BYTES - 5149 ;FREE OF CHARGE..B,C AND D,E ARE UPDATED BY THE NUMBER OF BYTES MOVED. - 5150 013764 041 235 027 LXI H,SAVLST ;POINT TO A LIST OF THINGS WHICH WE MUST SAVE - 5151 013767 345 PUSH H ;PLACE IT IN THE RAM FOR SAFE KEEPING - 5152 013770 021 327 042 LXI D,RHSAVE ;D,E GETS THE POINTER TO THE SAVE AREA - 5153 013773 001 012 040 RH.LP: LXI B,EMBUF ;WE WILL ALWAYS BE MOVING STUFF FROM "EMBUF" - 5154 013776 315 020 033 CALL MOVREG ;MOVE 5 BYTES, PLEASE - 5155 - 5156 ;TO SAVE THE RH REGISTERS, WE WILL PUT A TINY CHANNEL COMMAND - 5157 ;LIST INTO RAM SPACE, THEN EXECUTE IT, CHANGING THE DESIRED REGISTERS - 5158 ;BETWEEN READS, WHICH WILL GIVE US A CHANCE TO SAVE THE RESULTS - 5159 ;OF THE READ - 5160 014001 341 POP H ;GET POINTER INTO "REG TO BE SAVED" BUFFER - 5161 014002 176 MOV A,M ;GET CURRENT BYTE INTO ACCUM - 5162 014003 062 173 040 STA RM100+1 ;PUT BYTE INTO BUFFER SO CAN BE EXECUTED - 5163 014006 074 INR A ;UP BY ONE - 5164 014007 312 027 030 JZ SCE.GO ;IF THAT MAKES .EQ. 0, THEN OUT - 5165 - 5166 014012 043 INX H ;ELSE UPDATE POINTER - 5167 014013 345 PUSH H ;SAVE THE POINTER TOO - 5168 014014 041 172 040 LXI H,RM100 ;PREPARE TO EXECUTE THE READIN BUFFER - 5169 014017 325 PUSH D ;NOW SAVE THE SPOT WE ARE IN IN THE RHSAVE AREA - 5170 014020 315 036 025 CALL CHNXCT ;DO IT..ONE RH REGISTER IS IN - 5171 014023 321 POP D ;RETRIEVE POINTER TO THE DATA SAVE SPACE - 5172 014024 303 373 027 JMP RH.LP ;SAVE INFO, AND READ IN NEXT RH REGISTER - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-168 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5174 ;NOW DATA HAS BEEN SAVED, WE CAN ACTUALLY BEGIN TO RESTORE THE MICRO-CODE - 5175 014027 SCE.GO: INTON ;SET INTERNAL MODE - (1) 014027 327 RST 2 ;GO SET INTERNAL MODE - 5176 014030 021 002 002 LXI D,^O1002 ;PLACE IN DISK PAGE OF POINTERS TO MICRO-CODE - 5177 014033 315 306 022 CALL FILESH ;GO READ IN THE FIRST PAGE OF MICRO-CODE - 5178 014036 332 210 032 JC C.BTERR ;IF ERR ITS ALL OVER - 5179 - 5180 014041 315 056 023 CALL DMEM2CR ;GO LOAD CRAM - 5181 - 5182 014044 052 344 040 LHLD SCEADR ;GET ADDRESS AT WHICH TO CONTINUE - 5183 014047 315 340 014 CALL CADWR ;SET THE CRAM ADDRESS TO THE GUY THAT SLIPPED - 5184 ;WE ARE NEARING THE END OF THIS RECOVERY STUFF.. WE MUST RESTORE THE STATE - 5185 ;OF THE RH11 AND UBA TO WHAT IT WAS BEFORE WE STARTED, THEN WE CAN TURN THE - 5186 ;CLOCKS ON AGAIN - 5187 014052 041 202 027 LXI H,UBA.RD ;POINT TO A UBA READ CHANNEL COMMAND LIST - 5188 014055 315 036 025 CALL CHNXCT ;SET THE I/O ADDRESS TO A UBA PAGE REGISTER - 5189 - 5190 ;NOW FIX UP THE FORMAT BETWEEN A READ OF THE UBA PAGING REG, AND - 5191 ;THE WRITE WE WISH TO DO TO THE PAGING RAM - 5192 014060 072 332 042 LDA RHSAVE+3 ;GET THE BYTE THAT HAS THE CURRENT CNTRL BITS - 5193 014063 346 170 ANI ^O170 ;OFF JUNK, KEEP ONLY 4 RELEVANT BITS - 5194 014065 117 MOV C,A ;SAVE IN THE C REG - 5195 014066 041 327 042 LXI H,RHSAVE ;NOW POINT TO OUR BUFFER WITH THE DESIRED INFO - 5196 014071 315 167 031 CALL SHR36 ;SHIFT DATA RIGHT, 4 PLACES - 5197 014074 004 .BYTE 4 - 5198 - 5199 014075 171 MOV A,C ;GET OUR CONTROL BITS BACK - 5200 014076 062 331 042 STA RHSAVE+2 ;PLOP THEM INTO THE 36 BIT WORD - 5201 014101 315 167 031 CALL SHR36 ;NOW SHIFT THE WHOLE MESS 5 MORE PLACES - 5202 014104 005 .BYTE 5 - 5203 - 5204 ;AND THATS IT.. MOVE STUFF TO A DEPOSIT BUFFER - 5205 014105 MOV5B ;A "MOVE" - (1) 014105 347 RST 4 - (1) 014106 000 .BYTE 0 - 5206 014107 327 042 .ADDR RHSAVE ;FROM THE SAVE BUFFER - 5207 014111 047 040 .ADDR DMDAT ; TO THE DEPOSIT BUFFER - 5208 014113 315 017 013 CALL DI1 ;WRITE THIS MESS BACK TO UBA PAGING RAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-169 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5210 ;NOW WE WANT TO WRITE BACK THE RH11 REGISTERS THAT WE SAVED, THEN DESTROYED - 5211 014116 041 227 027 LXI H,RH.EXE ;NOW SET THE RH11 REGISTER I.D. INTO THE - 5212 014121 315 036 025 CALL CHNXCT ;INTERNAL BUFFER "IOAD",INCLUDING UBA NUMBER - 5213 - 5214 014124 041 235 027 LXI H,SAVLST ;POINT TO LIST OF REGS TO BE RESTORED - 5215 014127 345 PUSH H ;SAVE THIS INFO ON THE STACK - 5216 014130 001 334 042 LXI B,RHSAVE+5 ;WILL BEGIN MOVING STUFF WE SAVED FROM RH - 5217 014133 021 047 040 DI.LP: LXI D,DMDAT ;ALWAYS MOVE THE STUFF TO THE DEPOSIT BUFFER - 5218 014136 315 020 033 CALL MOVREG ;MOVE THE STUFF INTO "DMDAT" - 5219 014141 341 POP H ;GET OUR LITTLE LIST POINTER - 5220 014142 072 024 040 LDA IOAD ;GET CURRENT OFFSET INTO RH - 5221 014145 346 300 ANI ^O300 ;THROW AWAY CURRENT OFFSET - 5222 014147 266 ORA M ;THROW OUR DESIRED OFFSET INTO THE WORD - 5223 014150 062 024 040 STA IOAD ;PUT IT BACK INTO THE IOAD BUFFER - 5224 014153 176 MOV A,M ;GET THE OFFSET WE JUST MESSED WITH - 5225 014154 074 INR A ;TEST TO SEE IF END OF LIST - 5226 014155 312 172 030 JZ CONT.I ;IF END OF LIST, FINISH THE RECOVERY - 5227 - 5228 ;NOT END OF LIST, MUST SAVE SOME MORE RH REGISTERS - 5229 014160 043 INX H ;UPDATE THE LIST POINTER - 5230 014161 345 PUSH H ;SAVE THE POINTER - 5231 014162 305 PUSH B ;SAVE POINTER TO THE SAVED DATA IN "RHSAVE" - 5232 014163 315 017 013 CALL DI1 ;NOW RESTORE THIS RH REGISTER - 5233 014166 301 POP B ;RESTORE POINTER INTO BUFFER - 5234 014167 303 133 030 JMP DI.LP ;CONTINUE - 5235 - 5236 014172 315 376 016 CONT.I: CALL SMFINI ;GET CURRENT PARITY DEFAULTS & WRITE THEM OUT - 5237 014175 315 234 014 CALL CSCMD ;TURN THE CLOCK BACK ON - 5238 014200 INTOFF ;NO MORE INTERNAL MODE - (1) 014200 367 RST 6 ;GO EXIT FROM INTERNAL MODE - 5239 014201 303 335 001 JMP NULLJ ;GO - 5240 000 .ENDC - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-170 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5242 ;ROUTINE TO CHECK IF CURRENT RAM ADDRESS IS THE DESIRED BREA - 5243 ;ADDRESS.. - 5244 014204 325 BREAK: PUSH D ;"D,E" HAS POINTER TO DESIRED ADDR, SAVE IT PLEASE - 5245 014205 076 003 MVI A,3 ;DIAG FUNC TO READ CURRENT RAM ADDR - 5246 014207 315 002 015 CALL READC ;GO DO FUNCTION READ - 5247 014212 321 POP D ;NOW MAKE "D,E" POINT AT DESIRED AGAIN - 5248 - 5249 014213 052 100 040 LHLD TMPB2 ;GET CURRENT ADDRESS.. - 5250 014216 174 MOV A,H ;ALSO MAKE SURE THE CURRENT JUST READ IS 11 BITS - 5251 014217 346 007 ANI ^O7 ;8 BITS LO HALF, PLUS 3 BITS HI HALF - 5252 014221 147 MOV H,A ;NOW PUT THE WHOLE MESS BACK - 5253 - 5254 014222 032 LDAX D ;GET LO ORDER PIECE TO ACCUM - 5255 014223 275 CMP L ;CHECK VERSUS JUST READ - 5256 014224 300 RNZ ;IF .NE. 0, THEN NO MATCH, SO OUT.. - 5257 014225 023 INX D ;OK, SO UPDATE PNTR TO READ-IN - 5258 014226 032 LDAX D ;GET HI ORDER OF DESIRED PIECE - 5259 014227 274 CMP H ;COMPARE, SIGNS TAKE CARE OF THEMSELVES - 5260 014230 311 RET ;IF RESULT OF ADD WAS ZERO, GOOD.IF NOT,OK TOO.. - 5261 - 5262 ;ROUTINE TO DO SHORT FORM OF EXAMINE MEMORY - 5263 ;ENTER WITH "D,E" CONTAINING SHORT ADDRESS - 5264 014231 067 EXAMSH: STC ;SET C-BIT FOR LATER USE IN COMMON CODE - 5265 014232 343 DEPSHT: XTHL ;SWAP SO H,L POINTS TO TRAILING ARG - 5266 014233 315 061 033 CALL TARG1 ;COLLECT TRAILING ARG INTO "D,E" - 5267 014236 343 XTHL ;SWAP BACK SO THAT THINGS ARE RIGHT - 5268 014237 353 XCHG ;AND NOW MAKE "H,L" HOLD THE TRAILING ARG - 5269 014240 042 235 040 EXMHL: SHLD SHRTAD ;STORE SHORT ADDRESS IN THE RAM - 5270 014243 021 235 040 LXI D,SHRTAD ;DE, GETS REPLACE WITH A POINTER TO SHORT ADDRESS - 5271 014246 365 PUSH PSW ;SAVE THE C-BIT FOR LATER USE - 5272 014247 334 042 012 CC EMINT ;IF C WAS SET, GO DO AN EXAMINE - 5273 014252 361 POP PSW ;GET FLAGS AS THEY WERE - 5274 014253 324 240 012 CNC DMINT ;IF C WAS CLR DO A DEPOSIT - 5275 014256 311 RET ;NOW OK TO RETURN - 5276 - 5277 ;ROUTINE THAT EXECUTES AN "ARG16", THEN RETURNS THE DATA IN "H,L" - 5278 014257 ARG16.: ARG16 ;ARGUMENT ASSEMBLER - (1) 014257 347 RST 4 - (1) 014260 004 .BYTE 4 - 5279 014261 000 040 .ADDR T80DT ;USE A TEMP LOCATION - 5280 - 5281 014263 052 000 040 LHLD T80DT ;GATHER DATA INTO H,L - 5282 014266 311 RET ;AND BACK - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-171 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5284 ;SUBROUTINE TO PRINT A SINGLE 8-BIT BYTE AS OCTAL DATA - 5285 ;OF THE FORM: XXX - 5286 ;NO REGS DESTROYED..PNTR TO 8-BIT BYTE PASSED IN "H,L" - 5287 014267 345 P8BIT: PUSH H ;SAVE ALL REGISTERS - 5288 014270 305 P8BIT1: PUSH B - 5289 014271 325 PUSH D - 5290 014272 365 PUSH PSW - 5291 014273 315 045 031 CALL OCTAL ;CREATE 8-BIT BUFFER AS A 3 OCTAL CHARACTERS - 5292 014276 001 .BYTE 1 ;ONE BYTE OF BINARY DATA INVOLVED - 5293 014277 003 .BYTE 3 ;WANT ONLY 3 OCTAL CHARS - 5294 014300 016 003 MVI C,03 ;NUM CHARS TO PRINT - 5295 014302 361 P8LP: POP PSW ;CHAR OFF TOP OF STACK - 5296 014303 315 010 004 CALL PCHR ;AND GO PRINT IT - 5297 014306 015 DCR C ;DOWN COUNT - 5298 014307 302 302 030 JNZ P8LP ;AND CONTINUE TILL DONE ALL 3 - 5299 - 5300 014312 361 POP PSW ;RESTORE REGS - 5301 014313 321 POP D - 5302 014314 301 POP B - 5303 014315 341 POP H - 5304 014316 311 RET ;AND ALL DONE - 5305 - 5306 - 5307 ;WHEN DOING A "P8BIT" WITH THE DATA PASSED IN THE ACCUM - 5308 ;INSTEAD OF BEING POINTED TO BY H,L THEN COME HERE - 5309 014317 345 P8BITA: PUSH H ;MUST SAVE H,L HERE, SO WE CAN MESS IT UP - 5310 014320 041 122 040 LXI H,P8.TMP ;KEEP A PLACE FOR PRINTING DATA - 5311 014323 167 MOV M,A ;PUT THE THING TO BE PRINTED IN THE RAM SPACE - 5312 014324 303 270 030 JMP P8BIT1 ;GO TO COMMON CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-172 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5314 ;SUBROUTINE TO PRINT 16-BITS WORTH OF DATA.. - 5315 ;POINTER TO THAT DATA IS PASSED TO THE ROUTINE IN - 5316 ;REGISTER "H,L" - 5317 014327 041 100 040 P16.: LXI H,TMPB2 ;IN THIS TYPE CALL, WE LOAD H,L AUTOMATICALLY - 5318 014332 365 P16: PUSH PSW ;SAVE ALL THE REGISTERS - 5319 014333 305 PUSH B - 5320 014334 325 PUSH D - 5321 014335 345 PUSH H - 5322 - 5323 014336 315 045 031 CALL OCTAL ;CREATE OCTAL CHARS FROM THE 16-BIT DATA - 5324 014341 002 .BYTE 2 ;WE HAVE 2 BYTES OF RELEVANT DATA - 5325 014342 006 .BYTE 6 ;AND WE WANT 6 OCTAL CHARS TO PRINT - 5326 - 5327 014343 006 006 MVI B,6 ;ON RETURN WE WANT TO PRINT 6 CHARS - 5328 014345 361 P16LP: POP PSW ;GET OCTAL CHAR OFF STACK - 5329 014346 315 010 004 CALL PCHR ;AND GO PRINT IT - 5330 014351 005 DCR B ;DOWN THE COUNT - 5331 014352 302 345 030 JNZ P16LP ;BACK TO PRINT MORE TILL ALL DONE - 5332 - 5333 014355 341 POP H ;DONE..NOW RESTORE ALL REGS - 5334 014356 321 POP D - 5335 014357 301 POP B - 5336 014360 361 POP PSW - 5337 014361 311 RET ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-173 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5339 ;SUBROUTINE PRINT 36-BIT BINARY DATA AS - 5340 ;A 12-OCTAL DIGIT CHARACTER STRING IN THE FORM: - 5341 ; XXXXXX,,XXXXXX -NO REGS DESTROYED-BIN DATA PNTR PASSED IN "H,L" - 5342 014362 041 012 040 P36.: LXI H,EMBUF ;IN THIS CALL, WE LOAD H,L AUTOMATICALLY - 5343 014365 365 P36: PUSH PSW ;WILL SAVE ALL REGS IN HERE - 5344 014366 305 PUSH B - 5345 014367 325 PUSH D - 5346 014370 345 PUSH H - 5347 014371 315 045 031 CALL OCTAL ;CREATE 36-BIT BUFFER AS AN OCTAL CHARACTER STRING - 5348 014374 005 .BYTE 5 ;5BYTES REQUIRED BY 36-BITS - 5349 014375 014 .BYTE ^D12 ;WANT 12 OCTAL DIGITS - 5350 - 5351 014376 315 015 031 CALL PHALF ;PRINT 18 BITS - 5352 ;IF HERE, JUST FINISHED FIRST PASS, NEED 2 COMMAS. - 5353 014401 PCHAR COMMA - (1) 014401 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 014402 054 .BYTE COMMA ;CHAR TO PRINT - 5354 014403 PCHAR COMMA ;PRINT ",," - (1) 014403 317 RST 1 ;GO PRINT CHAR IN TRAILING BYTE - (1) 014404 054 .BYTE COMMA ;CHAR TO PRINT - 5355 014405 315 015 031 P36RH: CALL PHALF ;PRINT 18 MORE BITS... - 5356 014410 341 POP H ;NOW RESTORE ALL THE REGS - 5357 014411 321 POP D - 5358 014412 301 POP B - 5359 014413 361 POP PSW - 5360 014414 311 RET ;RETURN - 5361 - 5362 ;ROUTINE PRINTS 18 BITS AS 6 OCTAL CHARS - 5363 014415 341 PHALF: POP H ;GET A RETURN ADDR OFF STACK,SO STACK IS CLR - 5364 014416 006 006 MVI B,6 ;"B" WILL BE A COUNTER, IN IT WITH 3 - 5365 014420 361 P36L2: POP PSW ;CHARACTERS TO ACCUM - 5366 014421 315 010 004 CALL PCHR ;PRINT IT - 5367 - 5368 014424 005 DCR B ;DOWN COUNT - 5369 014425 302 020 031 JNZ P36L2 ;CONTINUE IF NOT DONE 6 CHARS YET - 5370 014430 351 PCHL ;RETURN - 5371 - 5372 - 5373 ;ROUTINE TO ALONE PRINT 18 BITS - 5374 014431 365 P18: PUSH PSW ;WILL SAVE ALL REGS IN HERE - 5375 014432 305 PUSH B - 5376 014433 325 PUSH D - 5377 014434 345 PUSH H - 5378 014435 315 045 031 CALL OCTAL ;CREATE 6 OCTAL CHARS - 5379 014440 003 .BYTE 3 ;3 BYTES HAVE RELEVANT DATA - 5380 014441 006 .BYTE 6 ;AND DESIRE 6 OCTAL CHARS - 5381 - 5382 014442 303 005 031 JMP P36RH ;GO TO RIGHT HALF PRINTER FROM "P36" - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-174 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5384 ;UNIVERSAL BINARY DATA TO ASCII CHARACTER SUBROUTINE - 5385 ;ROUTINE DESTROYS THE CONTENTS OF ALL REGISTERS - 5386 ;PASS POINTER TO BINARY DATA IN "H,L" ,THEN CALL APPROPRIATE - 5387 ;COVERSION DESIRED WITH 2 TRAILING PARAMETERS-CHARS PLACED ON STACK, MSB-LSB - 5388 ; CALL ROUTINE - 5389 ; DB XX ;NUMBER OF BYTES HOLDING RELEVANT BINARY DATA - 5390 ; DB YY ;NUMBER OF ASCII CHARACTERS TO BE GENERATED - 5391 ;ROUTINES ARE "OCTAL", "BINRY", AND "HEXIDECIMAL" - 5392 - 5393 - 5394 ;CODE WAS NEVER USED..KEEP TEXT HERE JUST IN CASE WE EVER NEED TO ADD IT.. - 5395 ;THIS WAY WE WON'T HAVE TO FIGURE IT ALL OUT AGAIN - 5396 ;BINRY: LXI D,^O401 ;LOAD D=1,E=1 - 5397 ; JMP COMEN ;GO TO COMMON CODE - 5398 - 5399 014445 021 007 003 OCTAL: LXI D,^O1407 ;LOAD D=3,E=7 - 5400 014450 353 XCHG ;SWAP "D,E" WITH "H,L" - 5401 014451 042 202 040 SHLD BTMSK ;SET DATA INTO "BTMSK" & "BTNUM" - 5402 - 5403 ;POINTER TO BIN DATA NOW IN "D,E" - 5404 014454 343 XTHL ;"H,L" NOW POINTS TO TRAILING ARGS - 5405 014455 106 MOV B,M ;BOMB "B" REGISTER, NOW CONTAINS "NUM" BYTES - 5406 014456 043 INX H ;UPDATE PNTR - 5407 014457 116 MOV C,M ;NUM CHARS INTO C - 5408 014460 043 INX H ;AND UPDATE PNTR TO RET ADDR - 5409 - 5410 014461 042 217 040 SHLD HLSAVE ;SAVE RETURN IN RAM - 5411 014464 341 POP H ;CLEAR OLD STUFF OFF STACK - 5412 014465 305 PUSH B ;SAVE "B,C" JUST TEMPORARILY - 5413 - 5414 014466 041 073 040 LXI H,TMPBF2 ;"H,L" NOW POINTS TO TEMPORARY BUFFER - 5415 ;IF FALL TO HERE, MUST MOVE DATA FROM BINARY BUFFER TO TEMP BUFFER - 5416 014471 032 OCTL1: LDAX D ;DATA POINTED TO BY "D,E" TO ACCUM - 5417 014472 023 INX D ;BUMP POINTER - 5418 014473 167 MOV M,A ;SET THAT DATA IN RAM - 5419 014474 043 INX H ;BUMP POINTER - 5420 014475 005 DCR B ;DONE ALL BYTES YET? - 5421 014476 302 071 031 JNZ OCTL1 ;BACK TILL MOVED ALL. - 5422 - 5423 014501 301 POP B ;RESTORE "B,C" AND GO - 5424 - 5425 014502 041 073 040 LXI H,TMPBF2 ;"H,L" NOW PNTS TO TMP BUFF - 5426 014505 257 XRA A ;CLEAR ACCUM - 5427 014506 127 MOV D,A ;CLEAR "D" REG - 5428 014507 130 MOV E,B ;BYTE COUNT TO "E" - 5429 014510 035 DCR E ;BUFF IS ALWAYS 1 LESS THAN BYTE COUNT - 5430 014511 031 DAD D ;"H,L" GETS BUFF ADDR PLUS BYTE COUNT - 5431 014512 042 233 040 SHLD OCTSV ;AND SAVE THIS ADDR IN THE RAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-175 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5433 ;HERE WILL BEGIN TRANSLATION FROM BINARY TO CHARACTERS - 5434 014515 041 073 040 OCTLC: LXI H,TMPBF2 ;"H,L" NOW POINTS TO TEMPORARY BUFFER - 5435 014520 072 202 040 LDA BTMSK ;NOW GET BIT MASK - 5436 014523 246 ANA M ;AND TO KEEP ONLY DESIRED CHARS - 5437 - 5438 014524 306 060 ADI ^O60 ;MAKE INTO ASCII - 5439 ;NOW MUST ROTATE ENTIRE BUFFER 3 PLACES TO RID OURSELVES OF CHAR JUST PROCESSED - 5440 014526 365 PUSH PSW ;NOW SAVE CHARACTER WEVE JUST CREATED - 5441 014527 015 DCR C ;DOWN THE CHAR COUNT - 5442 014530 312 163 031 JZ OCTL5 ;JUMP OUT IF PROCESSED ALL CHARS - 5443 014533 072 203 040 LDA BTNUM ;GET NUM BITS INTO ACCUM - 5444 014536 127 MOV D,A ;"D" GETS INITAL COUNT OF BITS - 5445 - 5446 014537 130 OCTL3: MOV E,B ;"E" GETS BYTE COUNT - 5447 014540 052 233 040 LHLD OCTSV ;GET UPDATED BUFF PNTR TO "H,L" - 5448 014543 247 ANA A ;CLEAR "C-BIT" - 5449 - 5450 014544 176 OCTL4: MOV A,M ;GROUP OF BINARY BITS TO ACCUM - 5451 014545 037 RAR ;BIT 0 INTO "C" BIT - 5452 014546 167 MOV M,A ;AND SHIFTED DATA BACK INTO MEM - 5453 014547 053 DCX H ;STEP UP IN THE BUFFER (UPSIDE-DOWN BUFFER) - 5454 014550 035 DCR E ;DOWN BYTE COUNT - 5455 014551 302 144 031 JNZ OCTL4 ;CONTINUE WITH BUFFER - 5456 014554 025 DCR D ;DONE BUFFERS WORTH, SEE IF DONE ALL 3 BITS WORTH - 5457 014555 302 137 031 JNZ OCTL3 - 5458 ;DONE THE 3-BITS, NOW CONTINUE WITH NEXT CHARACTER - 5459 014560 303 115 031 JMP OCTLC ;GO PROCESS NEXT CHARACTER - 5460 - 5461 ;HERE WHEN DONE ALL CHARS. - 5462 014563 052 217 040 OCTL5: LHLD HLSAVE ;GRAB THE RETURN ADDRESS - 5463 014566 351 PCHL ;AND RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-176 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5465 ;SUBROUTINE TO SHIFT 36-BIT DATA BUFFER SOME - 5466 ;NUMBER OF PLACES TO THE RIGHT.. ADDRESS OF BUFFER TO BE - 5467 ;SHIFTED IS PASSED IN "H,L"..NUMBER OF PLACES FOR IT - 5468 ;TO BE SHIFTED IS PASSED AS A TRAILING PARAMETER - 5469 ;IN A BYTE TRAILING THE SUBROUTINE CALL - 5470 ; CALL SHR36 - 5471 ; .BYTE XX ;NUM PLACES TO SHIFT - 5472 - 5473 014567 076 005 SHR36: MVI A,5 ;A SHIFT 36 REQUIRES 5 BYTES TO BE MOVED - 5474 014571 SHR24: - 5475 014571 343 SHRGO: XTHL ;POINTER TO TRAILING BYTE INTO "H,L" - 5476 014572 305 PUSH B ;SAVE ALL THE REGISTERS - 5477 014573 106 MOV B,M ;NUMBER PLACES TO SHIFT IN "B" - 5478 - 5479 014574 063 INX SP ;BUMP STACK POINTER AROUND THE SAVED "B,C" - 5480 014575 063 INX SP - 5481 014576 043 INX H ;NOW BUMP RETURN ADDRESS PAST THE TRAILING ARG - 5482 014577 343 XTHL ;AND PUT IT BACK ONTO THE STACK - 5483 014600 073 DCX SP ;NOW FIX STACK SO THAT SAVED "B,C" IS BACK ON TOP - 5484 014601 073 DCX SP - 5485 014602 325 PUSH D - 5486 014603 345 PUSH H - 5487 - 5488 014604 137 MOV E,A ;NUMBER OF BYTES INVOLVED WAS IN A, SAVE IN E - 5489 - 5490 014605 075 DCR A ;FIX COUNT - 5491 014606 205 ADD L ;AND NOW ADD COUNT TO "H,L" ADDRESS - 5492 014607 157 MOV L,A ;PUT BACK INTO LO ORDER - 5493 014610 174 MOV A,H ;GET HI PIECE - 5494 014611 316 000 ACI 0 ;AND ADD A CARRY TO H IF THERE WAS ONE - 5495 014613 147 MOV H,A ;NOW PUT IT BACK - 5496 - 5497 014614 345 PUSH H ;AND PUT ON STACK FOR REUSE - 5498 - 5499 014615 341 S36BL: POP H ;FETCH SAVED, UPDATED ADDRESS - 5500 014616 345 PUSH H ;NOW SAVE "H,L" - 5501 014617 113 MOV C,E ;GET NUMBER BYTE INVOLVED INTO C AGAIN - 5502 014620 247 ANA A ;CLEAR THE C-BIT - 5503 - 5504 014621 176 S36LP: MOV A,M ;GET BYTE FROM BUFF TO ACCUM - 5505 014622 037 RAR ;SHIFT IT RIGHT - 5506 014623 167 MOV M,A ;NOW PUT IT BACK INTO THE BUFFER - 5507 014624 053 DCX H ;NEXT BYTE - 5508 - 5509 014625 015 DCR C ;WAIT!..HAVE WE DONE ALL BYTES YET?? - 5510 014626 302 221 031 JNZ S36LP ;BACK INTO LOOP IF NOT YET - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-177 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5512 ;FALL THRU WHEN DONE THE 5 BYTES - 5513 014631 005 DCR B ;DONE NUMBER OF TIMES YET?? - 5514 014632 302 215 031 JNZ S36BL ;JUMP IF YES DONE ALL - 5515 - 5516 ;HERE WHEN ALL DONE - 5517 014635 341 POP H ;RESTORE THE "H,L"+X - 5518 014636 341 POP H ;RESTORE "B,C" - 5519 014637 321 POP D ;RESTORE "D,E" - 5520 014640 301 POP B ;RESTORE "H,L" - 5521 014641 311 RET - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-178 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5523 ;ROUTINE TO ASSEMBLE 16-BIT ARGUMENT - 5524 ;PLACE TO PUT 16-BIT DATA PASSED AS A TRAILING - 5525 ;ARG... "B,C" IS MESSED UP BY THIS ROUTINE - 5526 - 5527 ; CALL ARG16 - 5528 014642 076 014 ARG96: MVI A,12. ;NUMB BYTES USED IN ARG96 IS 12 - 5529 014644 303 257 031 JMP ARGBG1 - 5530 - 5531 014647 076 005 .ARG36: MVI A,5 ;NUMB BYTES USED IN ARG36 IS 5 - 5532 014651 303 256 031 JMP ARGBEG - 5533 - 5534 014654 076 002 .ARG16: MVI A,2 ;NUMB BYTES USED IN ARG16 IS 2 - 5535 014656 341 ARGBEG: POP H ;GET H,L FROM TRAP HANDLER - 5536 014657 062 214 040 ARGBG1: STA CHRCNT ;SAVE IT - 5537 014662 072 213 040 LDA RPTON ;IS THIS A REPEAT?? - 5538 014665 247 ANA A ;CHECK THE REPEAT FLAG - 5539 014666 302 020 032 JNZ CLEAN ;JUMP IF YES A REPEAT.... - 5540 - 5541 ;ELSE FALL THRU AND "GET" CHARACTERS AS BINARY DATA - 5542 014671 052 223 040 LHLD .ARG1 ;GET PNTR TO ARG - 5543 014674 001 000 000 LXI B,00 ;CLR REGS "B,C" - 5544 - 5545 014677 176 GETLP: MOV A,M ;GET AN ASCII CHARACTER - 5546 014700 326 060 SUI ^O60 ;OTHERWISE, OFF ASCII STUFF - 5547 014702 346 370 ANI ^O370 ;NOW BE SURE IT WAS NUM AND NOT CHAR - 5548 014704 302 320 031 JNZ GETEN ;IF HAD BITS GO SEE IF PROPER ENDING - 5549 014707 176 MOV A,M ;MESSED UP CHAR, GET IT BACK - 5550 014710 326 060 SUI ^O60 ;OFF THE ASCII AGAIN - 5551 014712 365 PUSH PSW ;SO WE CAN STACK IT - 5552 - 5553 014713 014 INR C ;WAS OK.. SO UP COUNT - 5554 014714 043 INX H ;AND UPDATE TO NEXT CHAR - 5555 014715 303 277 031 JMP GETLP ;AND CONTINUE TILL DONE - 5556 - 5557 ;JUMP TO HERE WHEN STACKED ALL THE CHARS - 5558 014720 315 256 033 GETEN: CALL SEPCHR ;THROW OUT TRAILING SPACES & TABS - 5559 014723 042 223 040 SHLD .ARG1 ;SAVE "H,L" - 5560 014726 315 355 032 CALL EOCML ;END OF LINE?? - 5561 014731 322 163 032 JNC KILNM ;IF NOT WE HAVE A PROBLEM - 5562 - 5563 014734 052 207 040 LHLD RPBUFS ;GET PNTR TO REPEAT DATA BUFFER - 5564 014737 257 XRA A ;CLR ACCM - 5565 014740 167 MOV M,A ;CLR THE "BYTE" COUNTER - 5566 014741 043 INX H ;UPDATE POINTER - 5567 - 5568 014742 135 MOV E,L ;COPY POINTER INTO "D,E" REG - 5569 014743 124 MOV D,H - 5570 014744 015 DCR C ;MAKE C START AT COUNT-1 - 5571 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-179 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5573 014745 325 RPINCB: PUSH D ;H,L SHOULD BE SAME AS D,E - 5574 014746 341 POP H ;SO DO IT USING STACK - 5575 014747 023 INX D ;EXCEPT D,E SHOULD BE - 5576 014750 023 INX D ;3 GREATER - 5577 014751 023 INX D - 5578 - 5579 014752 345 PUSH H ;SAVE H,L FOR A MINUTE - 5580 014753 052 207 040 LHLD RPBUFS ;WHILE THE "BYTE" COUNTER GETS UPDATED - 5581 014756 176 MOV A,M ;COPY CURRENT COUNT - 5582 014757 306 003 ADI 3 ;UPDATE BY 3 - 5583 014761 167 MOV M,A ;NOW PUT IT BACK - 5584 014762 341 POP H ;AND FIX UP H,L - 5585 - 5586 014763 006 010 MVI B,8. ;B GETS A COUNT OF 8 FOR OUR LOOP - 5587 014765 361 A16PK: POP PSW ;GET 3-BIT BINARY - 5588 - 5589 014766 022 ARGQQ: STAX D ;AND PUT INTO TMP BUFFER - 5590 - 5591 ;DONT MESS UP "H,L", ITS NEEDED BY "SHR36" ROUTINE - 5592 014767 315 167 031 CALL SHR36 ;SHIFT THING 36 PLACES - 5593 014772 003 .BYTE 3 ;SHIFT 3 PLACES - 5594 - 5595 014773 015 DCR C ;DOWN CHAR COUNT - 5596 014774 362 007 032 JP NOTRK ;FOOL THE 8-TIME LOOP IF GOES MINUS - 5597 014777 257 XRA A ;CLR ACCUM,IN ORDER TO PAD WITH ZEROES - 5598 015000 005 DCR B ;DOWN OUR "8" COUNTER - 5599 015001 312 013 032 JZ CHKSTK ;AND OUT IF ZERO - 5600 015004 303 366 031 JMP ARGQQ ;ELSE CONTINUE LOOPING - 5601 - 5602 015007 005 NOTRK: DCR B ;DOWN COUNT THE 8-TIME LOOP - 5603 015010 302 365 031 JNZ A16PK ;IF STILL DOING 8-TIMES - 5604 - 5605 ;DONE 8-TIMES..NOW CHECK IF C HAS GONE TO ZERO - 5606 015013 171 CHKSTK: MOV A,C ;COPY C TO ACCM TO CHECK IF ZERO - 5607 015014 247 ANA A ;.EQ. 0?? - 5608 015015 362 345 031 JP RPINCB ;JUMP IF NOT YET.. - 5609 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-180 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5611 ;ELSE FALL THRU..MUST NOW MOVE ASSEMBLED NUMBER TO DESTINATION - 5612 015020 052 207 040 CLEAN: LHLD RPBUFS ;GET BYTE COUNTER FOR THIS DATA - 5613 015023 106 MOV B,M ;NOW B HAS COUNT OF NUMBER BYTES ASSY'D - 5614 015024 043 INX H ;FIX H,L UP AGAIN.. - 5615 ;NOW H,L HAS SRC..D,E HAS FF.. STACK HAS PC - 5616 015025 343 XTHL ;SWAP-EEE - 5617 015026 315 061 033 CALL TARG1 ;ASSEMBLE DEST ADDR INTO D,E - 5618 015031 343 XTHL ;SWAP-EEE BACK - 5619 - 5620 015032 072 214 040 LDA CHRCNT ;GET NUMB CHARS DESIRED BY THIS ROUTINE - 5621 015035 117 MOV C,A ;C NOW HAS DESIRED..B HAS NUMB CHAR ASSY'D - 5622 015036 176 MOVLP: MOV A,M ;START MOVING CHARS TO DESTINATION - 5623 015037 022 STAX D ;CHAR TO DEST.. - 5624 015040 043 INX H ;UPDATE SRC POINTER - 5625 015041 023 INX D ;UPDATE DEST POINTER - 5626 015042 015 DCR C ;DOWN THE DESIRED COUNT - 5627 015043 312 065 032 JZ FIXPNT ;IF GOT DESIRED NUMBER,DONT PASS ANY MORE - 5628 - 5629 015046 005 DCR B ;DOWN THE ASSY'D COUNT - 5630 015047 302 036 032 JNZ MOVLP ;KEEP ON KEEPIN' ON - 5631 - 5632 ;WHEN FALL THRU WEVE MOVED ALL THAT WE CAN..NOW PAD THE BUFFER - 5633 015052 170 MOV A,B ;CLR ACCUM..B MUST BE ZERO - 5634 015053 015 PADLP: DCR C ;DOWN THE DESIRED COUNT - 5635 015054 372 071 032 JM FINARG ;IF THAT'S MINUS, WERE ALL DONE.. - 5636 015057 022 STAX D ;OTHERWISE STACK A ZERO - 5637 015060 023 INX D ;UPDAT DEST POINTER - 5638 015061 303 053 032 JMP PADLP ;AND CONTINUE TILL DONE - 5639 - 5640 015064 043 FIXLP: INX H ;MUST UPDATE BUFFER POINTER - 5641 015065 005 FIXPNT: DCR B ;DOWN THE ASSEMBLED COUNT - 5642 015066 302 064 032 JNZ FIXLP ;AND GO BACK TO ADJUST POINTER IF NOT ZERO - 5643 - 5644 015071 042 207 040 FINARG: SHLD RPBUFS ;NOW PUT BACK OUR LITTLE POINTER - 5645 015074 311 RET ;AND GET OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-181 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5647 ;ROUTINE FOR SHUFFLING BITS FOR A NICE CRAM FORMAT - 5648 015075 176 PLACE: MOV A,M ;GET PIECE OF SRC BYTE - 5649 015076 022 STAX D ;PLACE AT DESTINATION - 5650 015077 043 INX H ;UPDATE SRC POINTER - 5651 015100 023 INX D ;UPDATE DESTINATION POINTER - 5652 015101 176 MOV A,M ;GET UPPER 4 BITS OF 12 BIT CHUNK - 5653 015102 346 017 ANI ^O17 ;MAKE SURE ONLY 4 BITS WORTH - 5654 015104 022 STAX D ;AND PLACE AT THE DESTINATION - 5655 015105 023 INX D ;DESTINATION UPDATE - 5656 015106 053 DCX H ;BACKUP THE SRC POINTR TO BEGIN OF 24 BITS - 5657 015107 311 RET ;AND RETURN - 5658 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-182 -SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE - - 5660 ;ROUTINE TO COMPLETE THE TRAP HANDLING TYPE OPERATION WHICH CHANGES - 5661 ;A NORMAL 3 BYTE SUBROUTINE CALL INTO A 2 BYTE TRAP TYPE CALL.. - 5662 ;IT COSTS 3 BYTES TO ADD ANY SUBROUTINE TO THE TRAP CALL,SO THAT YOU SAVE - 5663 ;AT LEAST ONE BYTE FOR ANY SUBROUTINE THAT IS CALLED 3 TIMES..AND YOU SAVE - 5664 ;ONE BYTE FOR EACH ADDITIONAL TIME IT IS CALLED - 5665 015110 041 132 032 RTNDIS: LXI H,DLIST ;GET POINTER TO DISPATCH LIST - 5666 015113 365 PUSH PSW ;SAVE STATE OF PROCESSOR FLAGS - 5667 015114 325 PUSH D ;SAVE "D,E"..TRAP CANT DESTROY REGS - 5668 015115 205 ADD L ;ADD OFFSET IN ACCUM TO ADDRESS. - 5669 015116 157 MOV L,A ;PUT ADDR PLUS OFFSET BACK - 5670 015117 174 MOV A,H ;GET HI ORDER PIECE - 5671 015120 316 000 ACI 0 ;NOW ADD IN A CARRY IF THERE WAS ONE - 5672 015122 147 MOV H,A ;PUT IT BACK - 5673 - 5674 015123 136 MOV E,M ;NOW GO FETCH ADDR TO BE DISPATCHED TO - 5675 015124 043 INX H ;UPDATE TO NEXT - 5676 015125 126 MOV D,M ;NOW FETCH HI ORDER PIECE OF ADDR TO BE DISPATCHED TO - 5677 015126 353 XCHG ;GET DISPATCH ADDR INTO H,L - 5678 015127 321 POP D ;RESTORE D,E...NOW ONLY H,L //RET ADDR ON STACK - 5679 015130 361 POP PSW ;RESTORE PROCESSOR FLAGS - 5680 015131 351 PCHL ;DISPATCH TO APPROPRIATE SUBROUTINE - 5681 - 5682 015132 002 033 DLIST: .ADDR .MOV5B ;+0 - 5683 015134 202 004 .ADDR .CRLF ;+2 - 5684 015136 254 031 .ADDR .ARG16 ;+4 - 5685 015140 027 027 .ADDR .RUN.. ;+6 - 5686 015142 247 031 .ADDR .ARG36 ;+8. - 5687 015144 235 033 .ADDR .CLRRM ;+10. - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-183 -SUBRTN.M80 **** CLRB EXECUTE CODE **** - - 5689 .SBTTL **** CLRB EXECUTE CODE **** - 5690 015146 046 040 CLRBYT: MVI H,^O40 ;THIS HALF GENERATES THE "20000'S" WEIGHT OF ADDRESS - 5691 015150 157 MOV L,A ;THIS GENERATES THE REST OF THE RAM ADDRESS - 5692 015151 066 000 MVI M,0 ;CLEAR THAT LOCATION - 5693 015153 341 POP H ;FIX H,L - 5694 015154 311 RET ;OUT & DONE - 5695 - 5696 .SBTTL **** SOME ERROR CODES **** - 5697 015155 RRARG: PLINE RAG ;"?REQUIRES ARG" - (1) 015155 337 RST 3 ;PRINT LINE OF CHARS - (1) 015156 242 037 .ADDR RAG ;BUFF TO PRINT - 5698 015160 303 344 003 JMP NORML ;ERROR MUST RESET THE STACK - 5699 015163 KILNM: PLINE BB1 ;?BN BAD NUMBER - (1) 015163 337 RST 3 ;PRINT LINE OF CHARS - (1) 015164 246 037 .ADDR BB1 ;BUFF TO PRINT - 5700 015166 072 251 040 MMERR: LDA MMFLG ;SEE IF IN MAINTENACE MODE - 5701 015171 247 ANA A ;SET 8080 FLAGS - 5702 015172 312 255 001 JZ REINI ;IF NO MM MODE, OUT - 5703 015175 315 205 034 CALL DECNET ;FINISH UP ANY MESSAGES - 5704 015200 315 167 014 MMERR1: CALL MMCMD ;IF YES, RESET MODE - 5705 015203 303 255 001 JMP REINI ;ERROR MUST RESET THE STACK - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-184 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5707 ;ERRORS INCURRED DURING THE BOOT PROCESS - 5708 015206 306 002 D.BTERR: ADI 1*2 ;FAILURE WHEN TRIED TO START MICRO-CODE AFTER A BOOT - 5709 - 5710 015210 306 002 C.BTERR: ADI 1*2 ;FAILURE DURING THE READING OF THE MICRO-CODE - 5711 - 5712 015212 306 002 B.BTERR: ADI 1*2 ;FAILURE DURING THE READING OF THE PAGE OF POINTERS - 5713 - 5714 015214 306 002 A.BTERR: ADI 1*2 ;FAILURE DURING THE READING OF THE HOME BLOCK - 5715 - 5716 015216 315 326 032 CALL LTFLT ;THESE BOOT ERRORS ARE FATAL - 5717 015221 062 155 040 BTERR1: STA ERRCD+1 ;THIS BIT OF CODE GOES IN THE HI ORDER BYTE OF THE NUMB - 5718 015224 CLRB NOPNT ;RESTORE PRINTING - 5719 015226 PLINE BTFAIL ;PRINT MESSAGE "?BT " - (1) 015226 337 RST 3 ;PRINT LINE OF CHARS - (1) 015227 133 037 .ADDR BTFAIL ;BUFF TO PRINT - 5720 015231 041 154 040 LXI H,ERRCD ;POINT TO THE ERROR CODE - 5721 015234 315 332 030 CALL P16 ;PRINT THE 16-BIT NUMBER - 5722 015237 303 255 001 JMP REINI ;KILL THE PROCESS - 5723 - 5724 ;CODE FOR WHEN ONLY BOOTSTRAP FAILS TO READIN - 5725 015242 041 360 040 L.BTERR: LXI H,STATE ;GET POINTER TO STATE LIGHT - 5726 015245 076 001 MVI A,^O01 ;SET FAULT LIGHT, BUT DONT CHANGE STATE - 5727 015247 266 ORA M ;THROW CURRENT STATE WITH FAULT BIT - 5728 015250 167 MOV M,A ;PUT STUFF BACK - 5729 015251 076 020 MVI A,8*2 ;FAILURE DURING THE LOADING OF THE PRE-BOOT PROGRAM - 5730 015253 303 221 032 JMP BTERR1 ;AVOID SOME CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-185 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5732 ;SUBROUTINE TO CHECK IF A COMMAND FROM THE CSL BOARD HAS BEEN - 5733 ;GRANTED THE BUS.. WHICH IT MUST ALWAYS BE GRANTED BECAUSE IT IS THE - 5734 ;BUS MASTER - 5735 015256 343 BUSRESP: XTHL ;GET POINTER TO TRAILING ARG - 5736 015257 333 301 IN SMSTS ;***** I/O RD 301 ***** - 5737 015261 057 CMA ;FIX INVERSION - 5738 015262 246 ANA M ;"AND" READ STUFF VS. TRAILING ARG - 5739 015263 043 INX H ;UPDATE TO RETURN ADDR - 5740 015264 343 XTHL ;SWAP RETURN BACK TO STACK - 5741 015265 311 RET ;RETURN.."Z-BIT" CORRESPONDS TO "AND" RESULTS - 5742 - 5743 ;LITTLE ROUTINE TO SET AND OR CLR THE SOFTWARE RUN FLAG - 5744 015266 006 004 SETRN: MVI B,STBIT ;WE WANT TO SET THE RUN LIGHT - 5745 015270 315 337 032 CALL STATEM ;GO DO IT - 5746 015273 017 .BYTE ^O17 ;AND DONT MASH ANYTHING - 5747 015274 257 XRA A ;CLEAR ACCUM - 5748 015275 057 CMA ;ACCUM = -1 - 5749 015276 062 165 040 RNCOM: STA RNFLG ;DATA TO RUN FLAG - 5750 015301 311 RET ;AND OUT - 5751 - 5752 015302 006 000 CLRRN: MVI B,0 ;WE DONT WANT TO SET ANYTHING - 5753 015304 315 337 032 CALL STATEM ;JUST GO AND CLEAR SOME THINGS - 5754 015307 013 .BYTE ^O13 ;BITS TO KEEP - 5755 015310 257 XRA A ;CLEAR ACCUM - 5756 015311 303 276 032 JMP RNCOM ;AND OUT. - 5757 - 5758 015314 NOREFRESH: CLRB NOPNT ;TURN TYPING ON - 5759 015316 CLRB CHKREF ;SAY NOT TO REPORT OVER AND OVER - 5760 015320 315 352 006 CALL CLRUSE ;EXIT FROM USER MODE - 5761 015323 PLINE MOSMSG ;MESSAGE TO CTY - (1) 015323 337 RST 3 ;PRINT LINE OF CHARS - (1) 015324 173 037 .ADDR MOSMSG ;BUFF TO PRINT - 5762 - 5763 015326 365 LTFLT: PUSH PSW ;MUST SAVE ACCUM TO GET CORRECT "BT ERR MSG" - 5764 015327 006 001 MVI B,1 ;WE MERELY WANT TO SET FAULT LIGHT - 5765 015331 315 337 032 CALL STATEM ;GO SET THE LIGHTS - 5766 015334 012 .BYTE ^O12 ;BITS TO FLUSH WITH THIS - 5767 015335 361 POP PSW ;RESTORE ACCUM - 5768 015336 311 RET ;AND NOW SAFE TO RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-186 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5770 ;ROUTINE TO CLEAR AND SET BITS IN THE STATE WORD, THEN TO LIGHT - 5771 ;THE LIGHTS ON THE FRONT PANEL AS SPECIFIED BY THE STATE WORD - 5772 015337 343 STATEM: XTHL ;GET POINTER TO MASK - 5773 015340 072 360 040 LDA STATE ;NOW FETCH CURRENT STATE OF THE MACHINE - 5774 015343 246 ANA M ;MASK AS SPECIFIED - 5775 015344 043 INX H ;UPDATE RETURN POINTER - 5776 015345 343 XTHL ;AND PUT IT BACK ON THE STACK - 5777 - 5778 015346 260 ORA B ;NOW THROW IN ANY NEW BITS - 5779 015347 062 360 040 STA STATE ;NOW SAVE IT - 5780 015352 323 101 OUT LIGHTS ;CHANGE THE LIGHTS - 5781 015354 311 RET ;OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-187 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5783 ;SUBROUTINE TO DECIDE IF "FIRST" POINTS TO - 5784 ;AN END-OF-COMMAND CHARACTER..C-BIT SET IF YES, "FIRST" - 5785 ;DOES POINT TO END-OF-COMMAND..ACCUMULATOR IS DESTROYED - 5786 015355 345 EOCML: PUSH H ;SAVE "H,L" - 5787 015356 052 223 040 LHLD .ARG1 ;GET CURRENT POINTER FOR COMMAND BUFFER - 5788 - 5789 015361 176 MOV A,M ;GET CHARACTER - 5790 015362 376 377 CPI EOLCH ;END-OF-COMMAND?? - 5791 015364 312 377 032 JZ EOLYS ;JUMP IF YES - 5792 - 5793 015367 376 054 CPI COMMA ;OR, END-OF-COMMAND?? - 5794 015371 312 377 032 JZ EOLYS ;JUMP IF YES - 5795 - 5796 ;HERE IF NOT... CLR "C-BIT" & LEAVE - 5797 015374 247 ANA A ;CLR "C-BIT" - 5798 - 5799 015375 341 POP H ;RESTORE "H,L" - 5800 015376 311 RET ;RETURN - 5801 - 5802 ;HERE IF YES, AT END-OF-COMMAND - 5803 015377 067 EOLYS: STC ;SET CARRY - 5804 015400 341 POP H ;RESTORE "H,L" - 5805 015401 311 RET ;RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-188 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5807 ;SUBROUTINE TO MOVE 5 CONTIGUOUS BYTES BEGINNING - 5808 ;WITH A SPECIFIED SOURCE ADDRESS,TO ANOTHER BUFFER AREA, ITS - 5809 ;ADDRESS ALSO PASSED AS A TRAILING ARG. SOURCE ADDRESS IS - 5810 ;FIRST TRAILING PARAMETER, DESTINATION IS SECOND TRAILING PARAMETER - 5811 015402 341 .MOV5B: POP H ;GET H,L FROM TRAP HANDLER - 5812 015403 343 XTHL ;SWAP STACK TOP WITH "H,L" - 5813 015404 325 PUSH D ;SAVE "D,E" - 5814 015405 305 PUSH B ;SAVE "B,C" - 5815 015406 315 055 033 CALL TARG2 ;ASSEMBLE ARGS INTO "B,C" AND "D,E" - 5816 - 5817 015411 315 020 033 CALL MOVREG ;MOVE THE DATA, ARGS PASSED IN REGISTERS - 5818 015414 301 POP B ;RESTORE "B,C" - 5819 015415 321 POP D ;RESTORE "D,E" - 5820 - 5821 015416 343 XTHL ;RESTORE STACK - 5822 015417 311 RET ;AND RETURN - 5823 - 5824 015420 076 005 MOVREG: MVI A,5 ;SET COUNTER TO 5 - 5825 015422 075 M5B: DCR A ;DOWN COUNTER - 5826 015423 304 022 033 CNZ M5B ; AND BE RECURSIVE TILL DOWN COUNTED - 5827 - 5828 015426 012 LDAX B ;BYTE TO ACCUM - 5829 015427 022 STAX D ;STORE AT DESTINATION - 5830 015430 023 INX D ;UP BOTH PNTRS - 5831 015431 003 INX B ; TO NEXT BYTE - 5832 015432 311 RET ;AND BACK TO CALLER - 5833 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-189 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5835 ;SUBROUTINE TO COMPARE 2 36-BIT VALUES. - 5836 ;IF THE ADDRESSES OF THE 2 36-BIT BUFFERS ARE - 5837 ;PASSED AS TRAILING PARAMETERS TO THE ROUTINE - 5838 ;IF BOTH BUFFERS ARE THE SAME, THE "C-BIT" IS - 5839 ;CLR UPON RETURN. IF THEY ARE DIFFER, THE "C-BIT" IS - 5840 ;SET ON RETURN. - 5841 015433 343 CMP36: XTHL ;SWAP STACK TOP WITH "H,L" - 5842 015434 315 055 033 CALL TARG2 ;GET THE 2 TRAILING ARGS INTO "B,C" & "D,E" - 5843 015437 343 XTHL ;PUT RETURN BACK ON STACK - 5844 015440 353 XCHG ;SWAP "D,E" & "H,L" - 5845 015441 026 005 MVI D,5 ;SET COUNTER TO 4. - 5846 - 5847 015443 012 CMPLP: LDAX B ;GET A BYTE OF DATA - 5848 015444 276 CMP M ;COMPARE - 5849 015445 300 RNZ ;RETURN WITH Z-CLR IF HAD ERR.. - 5850 015446 003 INX B ;BUMP POINTER - 5851 015447 043 INX H ;BUMP OTHER POINTER - 5852 015450 025 DCR D ;DOWN COUNT - 5853 015451 302 043 033 JNZ CMPLP ;CONTINUE TILL DONE - 5854 015454 311 RET ;NORMAL RETURN - 5855 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-190 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5857 ;SUBROUTINE TO ASSEMBLE TRAILING ARGS INTO REGISTER PAIRS. - 5858 ;ROUTINE USED TO SAVE CORE ONLY BECAUSE THIS SEQUENCE OF CODING - 5859 ;IS REPEATED SO OFTEN.."H,L" POINTS TO THE TRAILING ARG OF THE - 5860 ;ORIGINAL CALLER.."D,E" AND "B,C" MUST HAVE BEEN SAVED BEFORE - 5861 ;THIS ROUTINE IS CALLED OR THEY WILL BE DESTROYED..IF A SINGLE - 5862 ;TRAILING ARG IS TO BE GATHERED UP, IT WILL BE PUT INTO THE - 5863 ;REG PAIR "D,E" VIA THE CALL "TARG1"..IF 2 TRAILING ARGS TO BE - 5864 ;GATHERED UP, THE FIRST WILL BE PUT INTO "B,C" AND THE SECOND - 5865 ;WILL BE PUT INTO "D,E".."H,L" IS UPDATED TO POINT TO THE BYTE - 5866 ;FOLLOWING THE TRAILING ARGS.. - 5867 015455 116 TARG2: MOV C,M ;LO ORDER SOURCE TO "C" - 5868 015456 043 INX H - 5869 015457 106 MOV B,M ;HI ORDER SOURCE TO "B" - 5870 015460 043 INX H - 5871 - 5872 015461 136 TARG1: MOV E,M ;LO ORDER SOURCE TO "E" - 5873 015462 043 INX H - 5874 015463 126 MOV D,M ;HI ORDER SOURCE TO "D" - 5875 015464 043 INX H - 5876 - 5877 015465 311 RET ;AND RETURN - 5878 ;SUBROUTINE TO ADD 1 TO A 36-BIT BUFFER AND GUARANTEE - 5879 ;THAT THE CARRY PROPAGATES CORRECTLY. BUFFER TO BE - 5880 ;INCREMENTED IS PASSED AS A TRAILING ARG. - 5881 015466 343 INC36: XTHL ;GET POINTER TO TRAILING ARG - 5882 015467 315 061 033 CALL TARG1 ;ASSEMBLE ARG INTO "D,E" - 5883 - 5884 015472 343 XTHL ;PUT RETURN BACK ON THE STACK - 5885 015473 353 XCHG ;NOW H,L PNTS TO BUFFER TO BE INCREMENTED - 5886 - 5887 015474 257 XRA A ;CLR THE ACCUM - 5888 015475 067 STC ; AND SET "C-BIT" - 5889 - 5890 015476 216 INCLP: ADC M ;ADD PIECE OF DATA BUFF, WITH CRY - 5891 015477 167 MOV M,A ;AND PUT IT BACK, WITH THE ADDITION - 5892 015500 320 RNC ;RETURN IF FINALLY STOPPED CRY'S INTO NEXT BYTE - 5893 015501 043 INX H ;NEXT PIECE TO INC - 5894 015502 303 076 033 JMP INCLP ;AND CONTINUE IF THERE WAS A CRY - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-191 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5897 ;SUBROUTINE "RDATT" - 5898 - 5899 ;ROUTINE READS I/O REGISTERS 0,1,2,3,103 AND MOVES THE - 5900 ;DATA IN THOSE BUFFERS (BUS.BITS 0-35) INTO A RAM AREA - 5901 ;WHOSE ADDRESS IS SPECIFIED BY A TRAILING PARAMETER - 5902 ;USED WITH THE CALL TO THIS ROUTINE - 5903 ;CALL IS: - 5904 ; CALL RDATT - 5905 ; DW XXX ;XXX IS PLACE TO MOVE THE 36 BITS OF DATA - 5906 ;ACCUMULATOR IS DESTROYED, REG PAIR "D,E" IS INCREMENTED BY 5. - 5907 015505 RDATT: - 5908 015505 343 XTHL ;SWAP STACK TOP WITH "H,L" - 5909 015506 315 061 033 CALL TARG1 ;ASSEMBLE TRAILING ARG INTO "D,E" - 5910 015511 343 XTHL ;PUT BACK THE STACK - 5911 - 5912 ;THE REAL READING CODE BEGINS HERE & ALSO SERVES AS AN - 5913 ;ALTERNATE ENTRY IF YOU CHOOSE TO PASS THE BUFFER ADDRESS - 5914 ;IN REGISTER "D,E" - 5915 015512 RDATP: - 5916 015512 325 PUSH D ;SAVE "D,E" - 5917 015513 333 000 IN D2835 ;***** I/O RD "0" (BITS 28-35) ***** - 5918 015515 057 CMA - 5919 015516 022 STAX D ;SAVE IN RAM - 5920 015517 023 INX D ;UP PNTR TO NEXT BYTE - 5921 015520 333 001 IN D2027 ;***** I/O RD "1" (BITS 20-27) ***** - 5922 015522 057 CMA - 5923 015523 022 STAX D ;SAVE IN RAM - 5924 015524 023 INX D ;UP PNTR TO NEXT BYTE - 5925 015525 333 002 IN D1219 ;*****I/O RD "2" (BITS 12-19) ***** - 5926 015527 057 CMA - 5927 015530 022 STAX D ;SAVE IN RAM - 5928 015531 023 INX D ;UP PNTR - 5929 015532 333 003 IN D0411 ;***** I/O RD "3" (BITS 4-11) ***** - 5930 015534 057 CMA - 5931 015535 022 STAX D ;SAVE - 5932 015536 023 INX D ;UP PNTR - 5933 015537 333 103 IN D0003 ;***** I/O RD "103" (BITS 0-03) ***** - 5934 015541 057 CMA - 5935 015542 346 017 ANI ^O17 ;OFF TRASH IN D BITS 7-4 - 5936 015544 022 STAX D ;SAVE - 5937 015545 321 POP D ;RESTORE "D,E" - 5938 015546 311 RET ;RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-192 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5940 ;SUBROUTINE "WDATT" - 5941 ;ROUTINE WRITES I/O REGISTERS 102,104,106,110,112 AND GETS ADDR - 5942 ;EITHER PASSED AS A TRAILING PARAMETER, OR PASSED IN "D,E" - 5943 ;CALL IS: - 5944 ; CALL WDATT - 5945 ; DW XXX ;XXX IS SOURCE OF DATA TO BE WRITTEN - 5946 - 5947 015547 343 WDATT: XTHL ;SWAP STACK TOP WITH "H,L" - 5948 015550 315 061 033 CALL TARG1 ;ASSEMBLE TRAILING ARG INTO "D,E" - 5949 015553 343 XTHL ;SWAP STACK BACK TO ORIGINAL STATE - 5950 ;ALTERNATE ENTRY FOR WHEN PASSING DATA POINTER IN "D,E" - 5951 - 5952 015554 325 WDATP: PUSH D ;SAVE "D,E" - 5953 015555 032 LDAX D ;DATA 28-35 TO ACCUM - 5954 015556 323 102 OUT W2835 ;***** I/O WRT "102" (BITS 28-35) ***** - 5955 015560 023 INX D ;NEXT DATUM - 5956 - 5957 015561 032 LDAX D ;DATA 20-27 TO ACCUM - 5958 015562 323 104 OUT W2027 ;***** I/O WRT "104" (BITS 20-27) ***** - 5959 015564 023 INX D ;NEXT DATUM - 5960 - 5961 015565 032 LDAX D ;DATA 12-19 TO ACCUM - 5962 015566 323 106 OUT W1219 ;***** I/O WRT "106" (BITS 12-19) ***** - 5963 015570 023 INX D ;NEXT DATUM - 5964 - 5965 015571 032 LDAX D ;DATA 4-11 TO ACCUM - 5966 015572 323 110 OUT W0411 ;***** I/O WRT "110" (BITS 04-11) ***** - 5967 015574 023 INX D ;NEXT DATUM - 5968 - 5969 015575 032 LDAX D ;DATA 0-3 TO ACCUM - 5970 015576 323 112 OUT W0003 ;***** I/O WRT "112" (BITS 00-03) ***** - 5971 015600 321 POP D ;RESTORE "D,E" - 5972 015601 311 RET ;RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-193 -SUBRTN.M80 **** SOME ERROR CODES **** - - 5974 ;SUBROUTINE "ADATT" - 5975 ;ROUTINE WRITES I/O REGISTERS 103,105,107,111,113 AND GETS ADDR - 5976 ;EITHER PASSED AS A TRAILING PARAMETER, OR PASSED IN "D,E" - 5977 ;CALL IS: - 5978 ; CALL ADATT - 5979 ; DW XXX ;XXX IS SOURCE OF DATA TO BE WRITTEN - 5980 - 5981 015602 343 ADATT: XTHL ;SWAP STACK TOP WITH "H,L" - 5982 015603 315 061 033 CALL TARG1 ;ASSEMBLE TRAILING ARG INTO "D,E" - 5983 015606 343 XTHL ;SWAP STACK BACK TO ORIGINAL STATE - 5984 ;ALTERNATE ENTRY FOR WHEN PASSING DATA POINTER IN "D,E" - 5985 - 5986 015607 325 ADATP: PUSH D ;SAVE "D,E" - 5987 015610 032 LDAX D ;DATA 28-35 TO ACCUM - 5988 015611 323 103 OUT A2835 ;***** I/O WRT "103" (BITS 28-35) ***** - 5989 015613 023 INX D ;NEXT DATUM - 5990 - 5991 015614 032 LDAX D ;DATA 20-27 TO ACCUM - 5992 015615 323 105 OUT A2027 ;***** I/O WRT "105" (BITS 20-27) ***** - 5993 015617 023 INX D ;NEXT DATUM - 5994 - 5995 015620 032 LDAX D ;DATA 12-19 TO ACCUM - 5996 015621 323 107 OUT A1219 ;***** I/O WRT "107" (BITS 12-19) ***** - 5997 015623 023 INX D ;NEXT DATUM - 5998 - 5999 015624 032 LDAX D ;DATA 4-11 TO ACCUM - 6000 015625 323 111 OUT A0411 ;***** I/O WRT "111" (BITS 04-11) ***** - 6001 015627 023 INX D ;NEXT DATUM - 6002 - 6003 015630 032 LDAX D ;DATA 0-3 TO ACCUM - 6004 015631 323 113 OUT A0003 ;***** I/O WRT "113" (BITS 00-03) ***** - 6005 015633 321 POP D ;RESTORE "D,E" - 6006 015634 311 RET ;RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-194 -SUBRTN.M80 **** SOME ERROR CODES **** - - 6008 ;LOCAL SUBROUTINE TO CLR - 6009 015635 341 .CLRRM: POP H ;FIX REG AS MESSED UP BY RST INSTR - 6010 015636 343 XTHL ;POINTER TO THE TRAILING PARAM - 6011 015637 315 061 033 CALL TARG1 ;ASSY ARG INTO "D,E" - 6012 015642 343 XTHL ;FIX "H,L" AND REPLACE FOR RETURN - 6013 015643 353 XCHG ;PUT "D,E" STUFF INTO "H,L" - 6014 015644 076 005 MVI A,5 ;AND SET STARTING COUNT TO 5 - 6015 015646 053 CLRT1: DCX H ;DOWN THE MEM ADDRESS - 6016 015647 066 000 MVI M,0 ;0 DATA TO MEM - 6017 015651 075 DCR A ;DOWN THE COUNTER - 6018 015652 302 246 033 JNZ CLRT1 ;BACK TILL DONE - 6019 015655 311 RET ;RETURN - 6020 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-195 -SUBRTN.M80 **** SOME ERROR CODES **** - - 6022 ;SUBROUTINE TO SWALLOW SEPARATOR CHARACTERS FROM THE ADDRESS POINTED - 6023 ;TO BY "H,L", UP TO THE FIRST NON-SEPARATOR CHARACTER. - 6024 ;SEPARATORS ARE: - 6025 ; "SPACE" - 6026 ; "TAB" - 6027 ;ONLY THE "H,L" REGISTER SHOULD BE CHANGED BY THIS ROUTINE - 6028 - 6029 015656 365 SEPCHR: PUSH PSW ;SAVE ACCUM AND STATUS - 6030 015657 053 DCX H ;DOWN COUNT H,L SO NEXT INSTR WILL MAKE IT EVEN - 6031 015660 043 SEPYS: INX H ;UP THE COUNT - 6032 015661 176 MOV A,M ;COPY CHARACTER INTO ACCUM - 6033 015662 376 040 CPI ' ;IS THE CHAR A "SPACE" - 6034 015664 312 260 033 JZ SEPYS ;GO UPDATE "H,L" IF YES.. - 6035 - 6036 ;ELSE SEE IF ITS A TAB - 6037 015667 376 011 CPI ' ;IS THE CHAR A "TAB" - 6038 015671 312 260 033 JZ SEPYS ;GO UPDATE "H,L" IF YES - 6039 - 6040 ;ELSE NO MORE SEPARATORS-TIME TO RETURN - 6041 015674 361 POP PSW ;RESTORE ACCUM AND STATUS - 6042 015675 311 RET ;ALL DONE RETURN - 6043 - 6044 .SBTTL SUBROUTINE TIME DELAY - 6045 ;EACH UNIT OF DELAY COUNTED IN THE TRAILING BYTE IS WORTH 1.02 MICRO-SEC - 6046 ;THIS SUBROUTINE WASTES SOME AMOUNT OF TIME..THE GREATER THE TRAILING - 6047 ;ARGUEMENT, THE MORE TIME IS WASTED... - 6048 015676 343 DELAY.: XTHL ;GET POINTER TO TRAILING ARG INTO "H,L" - 6049 015677 365 PUSH PSW ;NOW SAVE ACCUM - 6050 015700 176 MOV A,M ;GET THE TRAILING ARG INTO ACCUM - 6051 015701 043 INX H ;UP DATE TO CORRECT RETURN LOCATION - 6052 015702 075 DLYLP: DCR A ;DOWN THE COUNTER - 6053 015703 365 PUSH PSW ;ADD MORE DELAY IN THE LOOP - 6054 015704 361 POP PSW ; BECAUSE PUSHES AND POPS TAKE LONG TIME - 6055 015705 302 302 033 JNZ DLYLP ;LOOP TILL ZERO - 6056 015710 361 POP PSW ;RESTORE ACCUM - 6057 015711 343 XTHL ;PUT RETURN BACK ONTO THE STACK - 6058 015712 311 RET ;AND DONE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-196 -SUBRTN.M80 STRING COMPARE ROUTINE - - 6060 .SBTTL STRING COMPARE ROUTINE - 6061 ;ROUTINE TO COMPARE A TYPED IN ASCII STRING VERSUS SOME EXPECTED - 6062 ;STRING. ENTER WITH "H,L" POINTING TO THE BEGINNING OF THE TYPE-IN - 6063 ;BUFFER AND WITH D,E POINTING TO THE EXPECTED STRING. - 6064 ;RETURN Z-BIT CLR IF NO MATCH...Z-BIT SET IF MATCH - 6065 015713 032 STRCMP: LDAX D ;GET FIRST EXPECTED CHARACTER - 6066 015714 247 ANA A ;SET FLAGS TO SEE IF ZERO BYTE - 6067 015715 312 327 033 JZ STREND ;IF ZERO BYTE, END OF EXPECTED STRING.. OUT - 6068 - 6069 015720 276 CMP M ;IF A REAL BYTE, COMPARE AGAINST THE TYPE-IN - 6070 015721 300 RNZ ;IF NO MATCH, TAKE ERROR RETURN - 6071 015722 023 INX D ;IF MATCH , UPDATE TO NEXT EXPECTED - 6072 015723 043 INX H ;AND UPDATE TO NEXT TYPED IN. - 6073 015724 303 313 033 JMP STRCMP ;LOOP - 6074 - 6075 015727 042 223 040 STREND: SHLD .ARG1 ;PASS CURRENT POINTER TO ROUTINE THAT CHECKS FOR EOL - 6076 015732 315 355 032 CALL EOCML ;CHECK THAT TYPE IN WAS TERMINATED - 6077 015735 330 RC ;IF YES, Z-BIT IS SET,... OK TO RETURN - 6078 - 6079 015736 264 ORA H ;CLR Z-BIT FLAG.. H WILL BE NON-ZERO - 6080 015737 311 RET ;AND OUT..... - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-197 -SUBRTN.M80 STRING COMPARE ROUTINE - - 6082 ;ROUTINE CALLED WHENEVER KLINIK SWITCH CHANGES STATE - 6083 ;THE ROUTINE EXAMINES THE NEW STATE OF KLINIK,ZAPS THE LIGHTS AS REQUIRED - 6084 ;THEN SETS THE KLINIK LINE INTO THE APPROPRIATE STATE. IF KLINIK WAS - 6085 ;ESTABLISHED, GOING TO ENABLE POSITION WILL CHANGE NOTHING, BUT ANY SWITCH - 6086 ;CHANGE THAT INCREASES THE AMOUNT OF PROTECTION WILL FORCE CHANGE THE - 6087 ;MODE OF THE KLINIK LINE. - 6088 ;THE ROUTINE IS ENTERED WITH "B" HOLDING THE NEW KLINIK SWITCH STATE, AND - 6089 ;"KLNKSW" HOLDING THE OLD STATE. VALUES ARE AS FOLLOWS: - 6090 ; ENABLE = 2 - 6091 ; PROTECT = 6 - 6092 ; DISABLE = 4 - 6093 015740 170 KLNKLT: MOV A,B ;COPY KLINIK STATE INTO THE ACCUM - 6094 015741 062 124 040 STA KLNKSW ;SAVE THE NEW STATUS - 6095 015744 376 004 CPI 4 ;IS SWITCH NOW IN DISABLED POSITION - 6096 015746 312 022 034 JZ SETM0 ;GO SET MODE 0 IF YES - 6097 - 6098 015751 376 006 CPI 6 ;IS SWITCH NOW IN THE PROTECT POSITION? - 6099 015753 312 375 033 JZ .SETM1 ;IF YES, GO SET MODE 1 - 6100 - 6101 ;FALL THRU IF NEW SWITCH POSITION IS THE "ENABLE" POSITION - 6102 ;.. FIRST CHECK CURRENT MODE. IF IN MODE 3 ALREADY, WE MAKE NO CHANGE - 6103 015756 072 247 040 LDA CSLMODE ;GET CURRENT CSL MODE - 6104 015761 376 010 CPI .MODE3 ;IS IT MODE 3 - 6105 - 6106 ;FLAGS ARE SET, FALL INTO CODE THAT DOES THE RIGHT THING IF IN MODE 3 - 6107 - 6108 015763 304 103 034 CNZ SETM2 ;IF WAS NOT MODE 3, THIS WILL SET MODE 2 - 6109 - 6110 ;AND FALL INTO KL.LON CODE - 6111 - 6112 015766 006 002 KL.LON: MVI B,2 ;GET A BIT FOR SETTING THE REMOTE LIGHT ON - 6113 - 6114 ;AND FALL INTO CODE FOR SETTING THE LIGHTS - 6115 015770 315 337 032 KL.LAMP: CALL STATEM ;SET LIGHTS AS SPECIFIED IN B REG - 6116 015773 375 .BYTE ^O375 ;KEEP ALL LIGHTS, 'CEPT REMOTE - 6117 015774 311 RET ;AND DONE WITH THIS MESS - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-198 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6119 .SBTTL UART MODE MODIFICATIONS - 6120 ;CODE FOR SETTING THE KLINIK LINE INTO MODE 1 - 6121 015775 072 262 040 .SETM1: LDA PASSWORD ;GET CURRENT PASSWORD - 6122 016000 247 ANA A ;SET FLAGS TO SEE IF ANY PASSWORD EXISTS - 6123 016001 312 022 034 JZ SETM0 ;IF NO PASSWORD, THEN SET INTO MODE 0 - 6124 016004 304 012 034 CNZ SETM1 ;IF PASSWORD EXISTS, SET THINGS INTO MODE 1 - 6125 016007 302 366 033 JNZ KL.LON ;IF WE WENT MODE 1, THEN MUST TURN ON LIGHT - 6126 - 6127 ;CODE FOR ACTUALLY SETTING THE KLINIK LINE MODE TO 1 - 6128 016012 076 002 SETM1: MVI A,.MODE1 ;GET MODE 1 FLAG - 6129 016014 041 214 010 LXI H,MODE1 ;GET THE MODE 1 DISPATCH - 6130 016017 303 125 034 JMP SETM ;SET UP RAM - 6131 - 6132 ;CODE THAT SETS BOTH MODE 0 AND THE APPROPRIATE LIGHTS - 6133 016022 006 000 SETM0: MVI B,0 ;THE PASS LIGHTS OFF IN REGISTER "B" - 6134 016024 315 370 033 CALL KL.LAMP ;AND GO DO THE LIGHTS - 6135 016027 315 134 034 CALL HANGUP ;CLEAR KLINIK LINE - 6136 016032 076 001 MVI A,.MODE0 ;GET THE MODE 0 FLAG - 6137 016034 041 203 010 LXI H,MODE0 ;GET THE MODE 0 DISPATCH - 6138 016037 303 125 034 JMP SETM ;SET UP RAM - 6139 - 6140 ;CODE TO SET US INTO MODE 3 - 6141 016042 076 010 SETM3: MVI A,.MODE3 ;GET MODE 3 FLAG - 6142 016044 041 377 005 LXI H,MODE3 ;GET THE MODE 3 DISPATCH - 6143 016047 303 125 034 JMP SETM ;SET UP RAM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-199 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6145 ;CODE TO SET US INTO MODE 4 - 6146 016052 072 156 040 SETM4: LDA USRMD ;SEE IF USER, IF WHICH CASE WE WONT DO "MODE4" - 6147 016055 247 ANA A ;SET 8080 FLAGS - 6148 016056 300 RNZ ;AND OUT IF USER MODE - 6149 - 6150 ;ACCUM MUST .EQ. 0 IF FELL TO HERE - 6151 016057 062 252 040 STA MAILFG ;BETTER CLEAR THIS FLAG TOO - 6152 016062 062 301 040 STA E.CNT ;USE FASTEST WAY TO CLEAR THIS LOCATION - 6153 016065 041 250 041 LXI H,E.BEG-1 ;AND RESET ENVELOPER - 6154 016070 042 247 041 SHLD E.BUF - 6155 016073 076 020 MVI A,.MODE4 ;GET MODE 4 FLAG - 6156 016075 041 007 035 LXI H,MODE4 ;GET THE MODE 4 DISPATCH - 6157 016100 303 125 034 JMP SETM ;SET UP RAM - 6158 - 6159 ;SET LINE TO MODE 2 - 6160 016103 072 247 040 SETM2: LDA CSLMODE ;BEFORE ANYTHING ELSE, SEE WHAT WE ARE DOING NOW - 6161 016106 346 003 ANI .MODE0!.MODE1 ;IF MODES 0 OR 1, MUST INTERRUPT KS10 - 6162 016110 312 120 034 JZ SETM2X ;IF NOT, DONT BOTHER KS10 AT ALL - 6163 - 6164 016113 076 002 MVI A,KL.ACTIVE ;MUST INFORM THE TEN THAT WE ARE ENTERING KLINIK - 6165 016115 315 156 034 CALL WRD34 ;CALL ROUTINE THAT WRITES WORD 34 - 6166 016120 041 005 011 SETM2X: LXI H,MODE2 ;GET DISPATCH FOR MODE 2 - 6167 016123 076 004 MVI A,.MODE2 ;SET MOE TWO TO THE STATE FLAG ALSO - 6168 016125 062 247 040 SETM: STA CSLMODE - 6169 016130 042 346 040 SETDIS: SHLD MODDIS ;AND SET TO KLINIK DISPATCHER - 6170 016133 311 RET ;AND ALL DONE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-200 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6172 ;LITTLE ROUTINE TO HANG UP THE KLINIK LINE - 6173 016134 072 360 040 HANGUP: LDA STATE ;GET CURRENT STATE - 6174 016137 346 007 ANI ^O7 ;OFF THE "DTR" SIGNAL - 6175 016141 323 101 OUT DTR ;CLR DTR - 6176 016143 076 003 MVI A,CARRLOSS ;TELL KS10 THAT KLINIK CARRIER HAS GONE AWAY - 6177 016145 315 156 034 CALL WRD34 ;DEPOSIT INTO WORD 34 - 6178 016150 041 220 001 LXI H,200. * 2 ;SET A TIMEING DELAY OF 2 SECONDS - 6179 016153 303 154 014 JMP LTLOOP ;GO DO DELAY, AND USE HIS RETURN TO EXIT - 6180 - 6181 ;ROUTINE FOR DOING SIMPLE DEPOSIT INTO KS10 MEMORY AT WORD 34, AND - 6182 ;THEN INTERRUPTING THE 10 - 6183 016156 365 WRD34: PUSH PSW ;SAVE ACCUM & STATUS - 6184 016157 CLRRM DMDAT ;CLEAR A BUFFER - (1) 016157 347 RST 4 - (1) 016160 012 .BYTE 10. - (1) 016161 054 040 .ADDR DMDAT+5 - 6185 016163 361 POP PSW ;FETCH THE ACCUM'S CONTENTS AGAIN - 6186 016164 043 INX H ;BUMP H,L(VALUE AFTER A CLRRM IS .EQ. 1ST LOC OF BUFF) - 6187 016165 167 MOV M,A ;STORE DATA AT "DMDAT+1" - 6188 016166 DEPOS 34 ;DEPOSIT - (1) 016166 247 ANA A ;CLR "C-BIT" FOR USE BY COMMON CODE - (1) 016167 315 232 030 CALL DEPSHT ;AND DO THE DEPOSIT ASSUMING SHORT ADDR - (1) 016172 034 000 .ADDR 34 ;ADDR TO BE ZAPPED PASSED AS TRAILING ARG - 6189 016174 303 062 010 JMP POKE10 ;INTERRUPT THE KS10 & USE HIS RETURN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-201 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6191 ;CODE USED IN ADDING UP THE CHECKSUMS ON ENVELOPES TO BE SENT - 6192 016177 200 CHKADD: ADD B ;HERE TO ADD NEW CHAR TO THE CURRENT SUM - 6193 016200 107 MOV B,A ;AND KEEP THE RESULTS IN "B" - 6194 016201 043 INX H ;BUMP UP TO LOOK AT THE NEXT CHAR - 6195 016202 303 231 034 JMP TSKLP ;BACK TO LOOP - 6196 - 6197 ;THIS IS THE APT ENVELOPE SENDER.. WHEN WE HAVE A BUFFER OF INFO TO SEND TO - 6198 ;THE APT HOST SYSTEM, THIS IS THE CODE THAT GETS CALLED - 6199 016205 072 252 040 DECNET: LDA MAILFG ;ONLY DO SOMETHING HERE IF THE MAILING FLAG SET - 6200 016210 247 ANA A ;SET 8080 FLAGS - 6201 016211 310 RZ ;NO FLAG, NO SENDY.... - 6202 - 6203 016212 373 EI ;ABSOLUTLY MUST ALLOW INTERRUPTS, IN CASE HOST DIES - 6204 016213 072 011 042 LDA ENVMNO ;FIRST THING TO DO IS COMPLIMENT THE MESSAGE NUMBER - 6205 016216 057 CMA ;FLIP - 6206 016217 346 177 ANI ^O177 ;NO SIGN BITS ALLOWED - 6207 016221 062 011 042 STA ENVMNO ;PUT IT BACK - 6208 - 6209 016224 041 013 042 LXI H,ENVBUF ;FIRST THING TO DO IS COMPUTE CHECKSUM FOR THE ENVELOPE - 6210 016227 006 000 MVI B,0 ;"B" WILL HOLD THE CURRENT SUM - 6211 016231 176 TSKLP: MOV A,M ;GRAB A CHARACTER - 6212 016232 376 015 CPI CRCHR ;SEE IF END OF THE ENVELOPE CHARACTER - 6213 016234 312 243 034 JZ TSKGO ;IF YES, GO TO THE ACTUAL SENDER - 6214 - 6215 016237 247 ANA A ;MAYBE THE CHAR WAS A 0, BECAUSE THERE IS NO CRCHR - 6216 016240 302 177 034 JNZ CHKADD ;IF NOT, GO ADD THE CHARACTER TO THE SUM - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-202 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6218 ;HERE WHEN TIME TO ACTUALLY MAIL AN ENVELOPE - 6219 016243 043 TSKGO: INX H ;UPDATE PAST THE "CR" CHARACTER - 6220 016244 066 000 MVI M,0 ;NOW GUARANTEE THAT WE END WITH "CR","0" PAIR - 6221 016246 170 MOV A,B ;GRAB THE CURRENT SUM - 6222 016247 057 CMA ;COMPLIMENT - 6223 016250 074 INR A ;MAKE TWOS COMPLIMENT - 6224 016251 346 077 ANI ^O77 ;AND ONLY SIX BITS COUNT - 6225 - 6226 ;NOW MUST DECIDE IF YOU NEED TO ASCII-IZE THE CHECKSUM - 6227 016253 376 075 CPI ^O75 ;75,76,77 DONT GET ASCII-ED - 6228 016255 362 262 034 JP TSKGO1 ;SO JUMP IF ANY OF THOSE THREE - 6229 016260 366 100 ORI ^O100 ;HAD TO ASCII-IZE, SO DO IT WITH A 100 - 6230 016262 062 012 042 TSKGO1: STA ENVCHK ;SAVE IN THE APPROPRIATE PLACE IN THE BUFFER - 6231 - 6232 016265 TSK2TSK: CLRB APTANS ;CLEAR THE ANSWER - 6233 016267 KCHAR SYNC ;2 SYNCS START EVERY MESSAGE - (1) 016267 315 117 004 CALL KCHR ;GO PRINT THE CHARACTER - (1) 016272 001 .BYTE SYNC - 6234 016273 KCHAR SYNC - (1) 016273 315 117 004 CALL KCHR ;GO PRINT THE CHARACTER - (1) 016276 001 .BYTE SYNC - 6235 - 6236 016277 021 011 042 LXI D,ENVMNO ;NOW SEND THE REST - 6237 016302 315 144 004 CALL KLINE1 - 6238 016305 072 013 042 LDA ENVBUF ;GRAB FIRST CHAR OF ENVELOPE JUST SENT - 6239 016310 376 077 CPI QUES ;IS IT QUESTION MARK?? - 6240 016312 312 200 032 JZ MMERR1 ;IF IT WAS, ABORT ENVELOPE STUFF, RESET APT - 6241 - 6242 016315 376 045 CPI PERCNT ;IS IT A PER CENT SIGN?? - 6243 016317 312 200 032 JZ MMERR1 ;IF IT WAS, ABORT ENVELOPE STUFF, RESET APT - 6244 - 6245 016322 072 261 040 APT.WT: LDA APTANS ;NOW WAIT FOR THE APT SYS TO ANSWER(ACK OR NACK) - 6246 016325 247 ANA A ;IF ZERO, GOT NO ANSWER YET - 6247 016326 312 322 034 JZ APT.WT ;SO WAIT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-203 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6249 ;FINALLY GOT AN ANSWER - 6250 016331 376 116 CPI 'N ;WAS IT A NACK?? - 6251 016333 312 265 034 JZ TSK2TSK ;IF YES, SEND IT OUT AGAIN - 6252 016336 DECEX1: - 6253 016336 DECEX2: - 6254 016336 257 XRA A ;USE FAST WAY TO CLEAR A RAM LOCATION - 6255 016337 062 252 040 STA MAILFG ;SAY END OF THIS ENVELOPE - 6256 016342 041 013 042 LXI H,ENVBUF ;POINT TO THE BUFFER - 6257 016345 042 352 040 SHLD ENVPNT ;SAVE THE POINTER TO THE BUFFER - 6258 016350 311 RET ;THEN OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-204 -SUBRTN.M80 UART MODE MODIFICATIONS - - 6260 ;SUBROUTINE TO MOVE A STRING OF CHARACTERS INTO THE TTY INPUT BUFFER, - 6261 ;KEEPING TRACK OF THE NUMBER OF COMMAS AND OTHER IMPORTANT FEATURES OF THE - 6262 ;STRING. MUST PASS THE SOURCE OF THE CHARACTERS IN REG B,C, SUBROUTINE WILL - 6263 ;BOMB REGISTERS D,E AND H,L - 6264 016351 001 253 041 MV.ALL: LXI B,E.BEG+2 ;POINT TO THE CHARACTER BUFFER TO BE EXECUTED - 6265 016354 315 163 010 CALL BFRST ;RESET CMD CHAIN POINTERS - 6266 016357 021 114 041 MV.INP: LXI D,BUFBG ;DE, WILL POINT TO THE INPUT BUFFER - 6267 016362 041 204 040 LXI H,EOL ;AND HL WILL POINT TO THE COMMA/EOL COUNTER - 6268 016365 066 000 MVI M,0 ;MAKE SURE COUNT BEGINS AT 0 - 6269 - 6270 016367 012 MV.IN1: LDAX B ;GET FIRST CHARACTER FROM WHEREVER IT IS - 6271 016370 022 STAX D ;AND PUT IT INTO THE BUFFER - 6272 016371 003 INX B ;UP POINTER - 6273 016372 023 INX D ;AND THIS ONE TOO - 6274 - 6275 ;NOW CHECK FOR COMMA OR EOL - 6276 016373 376 054 CPI COMMA ;IS IT A COMMA?? - 6277 016375 314 005 035 CZ MV.CNT ;IF YES, INCREMENT THE COUNT - 6278 - 6279 ;FALL THRU IF WAS A COMMA BEFORE, EOLCH WILL NOT MATCH - 6280 016400 376 377 CPI EOLCH ;IS IT AN END OF LINE? - 6281 016402 302 367 034 JNZ MV.IN1 ;IF NOT, THERE IS MORE TO DO - 6282 - 6283 ;HERE IF WAS AN EOL.. NOT ONLY DO WE BUMP THE COUNT, WE ALSO GET OUT - 6284 016405 064 MV.CNT: INR M ;UP COUNT - 6285 016406 311 RET ;AND OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-205 -SUBRTN.M80 MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT - - 6287 .SBTTL MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT - 6288 ;MODE 4 HANDLER. WATCHES FOR THE FIRST SYNC CHAR, THEN GOES INTO - 6289 ;A FINITE STATE MACHINE MODE WHERE IT COLLECTS AN ENVELOPE - 6290 ;WHEN YOU ENTER HERE, REG B HAS A COPY OF THE CHARACTER JUST TYPED - 6291 016407 MODE4: - 6292 016407 376 001 M4.0: CPI SYNC ;LOOK FOR A SYNC CHARACTER - 6293 016411 302 250 035 JNZ MMOUT ;IF NOT, SIMPLE PRINT OF CHARACTER ON CTY - 6294 - 6295 016414 041 022 035 LXI H,M4.1 ;SHIFT ENVELOPER TO NEXT INPUT STATE - 6296 016417 303 130 034 JMP SETDIS ;AND SET INTERRUPT HANDLER TO COME HERE WHEN - 6297 ;DONE WITH INTERRUPT - 6298 - 6299 ;STATE 2 OF ENVELOPE EATER.. THIS CODE WILL DISCARD ANY ADDITIONAL SYNCS - 6300 ; STORE THE MESSAGE NUMBER WHEN IT FINALLY GETS HERE (& FLIC TO STATE 3) - 6301 ; OR COLLECT THE FIRST CHARACTER OF A CMD SEQUENCE(& FLIC TO STATE 3) - 6302 016422 M4.1: - 6303 016422 376 001 CPI SYNC ;IS THIS AN ADDITIONAL SYNC CHAR - 6304 016424 310 RZ ;IF YES, IGNORE AND PROCEED - 6305 ;FALL THRU IF NOT A SYNC - 6306 016425 041 033 035 LXI H,COLLECT ;NOW GO TO NEXT STATE OF THE ENVELOPE COLLECTOR - 6307 016430 042 346 040 SHLD MODDIS ;SET UP FOR INTERRUPT HANDLER TO FIND - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-206 -SUBRTN.M80 ENVELOPE COLLECTOR - - 6309 .SBTTL ENVELOPE COLLECTOR - 6310 ;THIS IS WHERE YOU COME ON CHARACTERS THAT ARE PART OF AN ENVELOPE. - 6311 ;THIS CODE CHECKS FOR 2 KINDS OF TERMINATORS - 6312 ;1) END OF ENVELOPE - 6313 ;2) END OF CONTROL SEQUENCE - 6314 ;OR ELSE MERELY STUFFS THE CHARACTER INTO THE ENVELOPE BUFFER. - 6315 ;WHEN AN ENTIRE MESSAGE HAS BEEN RECEIVED, THEN WE WILL CALCULATE THE - 6316 ;CHECKSUMS OR WHATEVER, MAKE WITH THE ACKS, NACKS, AND EXECUTE WHATEVER - 6317 ;THE STUFF MAY BE - 6318 ;WHEN YOU ENTER HERE, REG B HAS A COPY OF THE CHARACTER JUST TYPED - 6319 016433 376 044 COLLECT: CPI DOLLAH ;TOPS20 CALLS A SPADE A "DOLLAR" - 6320 016435 312 236 035 JZ ACTION ;IF "$", TREAT LIKE AN ALTMODE - 6321 - 6322 016440 376 033 CPI ALT ;IF ALTMODE, THEN END OF CONTROL SEQUENCE - 6323 016442 312 236 035 JZ ACTION ;AND JUMP IF IT WAS ALTMODE. EXECUTE CONTROL CHAR - 6324 - 6325 016445 376 015 CPI CRCHR ;IF CARRIAGE RETURN, THEN END OF ENVELOPE - 6326 016447 312 102 035 JZ EXECUT ;GO EXECUTE THE ENVELOPE IF - 6327 - 6328 016452 376 001 CPI SYNC ;ALSO LOOK FOR "SYNC", WHICH MEANS "RESYNC" - 6329 016454 312 052 034 JZ SETM4 ;IF YES, THEN MUST RE-SYNC - 6330 ;WE MUST BE AWARE OF "RE-SYNCING", IN CASE THE "ALT" OR "CR" WAS GARBLED - 6331 ;AS IT CAME DOWN THE LINE, AND WAS MISSED BY THE 8080 - 6332 ;RE-SYNCING REQUIRES STARTING AT THE BEGINNING OF MODE4 - 6333 - 6334 - 6335 ;FALL THRU IF MUST SIMPLY SHOVE THE CHARACTER INTO THE BUFFER - 6336 016457 052 247 041 COL.LP: LHLD E.BUF ;GET POINTER TO THE LAST CHARACTER IN THE BUFFER - 6337 016462 043 INX H ;BUMP POINTER TO FIRST FREE - 6338 016463 167 MOV M,A ;AND STACK THE CHARACTER IN THE BUFFER - 6339 016464 042 247 041 SHLD E.BUF ;REPLACE THE POINTER - 6340 - 6341 016467 041 301 040 LXI H,E.CNT ;GET CURRENT CHARACTER COUNT - 6342 016472 064 INR M ;UPDATE - 6343 016473 176 MOV A,M ;NOW COPY COUNT TO ACCUM FOR TESTING - 6344 016474 376 134 CPI ^O134 ;TOO MUCH FOR AN ENVELOPE?? - 6345 016476 322 220 035 JNC NACK.EN ;IF TOO MANY, NACK IT.. MAYBE HE WILL START OVER - 6346 016501 311 RET ;ELSE OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-207 -SUBRTN.M80 ENVELOPE COLLECTOR - - 6348 ;HERE WHEN AN ENVELOPE IS COMPLETE... WE MUST COMPUTE THE CHECKSUM - 6349 ;AND COMPARE AGAINST THE CHECK CHARACTER SENT OVER, THEN ACTUALLY EXECUTE - 6350 ;THE CONTENTS OF THE ENVELOPE - 6351 016502 072 301 040 EXECUT: LDA E.CNT ;GET CHAR COUNT SO WE CAN TELL WHEN WE FINISH - 6352 016505 117 MOV C,A ;PUT IT IN "C" - 6353 - 6354 016506 041 252 041 LXI H,E.BEG+1 ;POINT TO THE CHECKSUM IN THE ENVELOPE BUFFER - 6355 016511 176 MOV A,M ;GET CHECKSUM CHARACTER INTO THE ACCUM - 6356 016512 043 INX H ;UPDATE PAST THE CHECKSUM JUST COLLECTED - 6357 016513 015 DCR C ; AND DOWN THE CHAR COUNT FOR THE THINGS WE JUST - 6358 016514 015 DCR C ; PICKED OUT OF THE LIST - 6359 016515 015 DCR C ;WE WANT LOOP TO END AT -1, INSTEAD OF 0 - 6360 - 6361 016516 206 ENV.LP: ADD M ;ADD CHARACTERS TO CHECKSUM - 6362 016517 043 INX H ;NEXT CHARACTER - 6363 016520 015 DCR C ;BUT FIRST SEE IF DONE YET - 6364 016521 362 116 035 JP ENV.LP ;BACK IF NOT - 6365 - 6366 ;WHEN DONE,CHECK THAT CHECKSUM HAS WORKED OUT TO BE ZERO - 6367 016524 346 077 ANI ^O77 ;ONLY SIX BITS COUNT - 6368 016526 302 220 035 JNZ NACK.EN ;IF NOT .EQ. 0, THEN CHECKSUM FAILED AND "NACK" - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-208 -SUBRTN.M80 ENVELOPE COLLECTOR - - 6370 ;FALL THRU TO HERE IF OK SO FAR - 6371 016531 066 377 MVI M,EOLCH ;MARK THE END OF THE ENVELOPE WITH EOL MARKER - 6372 - 6373 ;NOW MUST CHECK THE MESSAGE NUMBER FOR OK-NESS - 6374 016533 041 361 040 LXI H,LSTMSG ;GET POINTER TO MESSAGE NUMBER - 6375 016536 116 MOV C,M ;SAVE IT IN "C" FOR A LITTLE WHILE - 6376 016537 072 251 041 LDA E.BEG ;GRAB CURRENT MESSAGE NUMBER - 6377 - 6378 016542 271 CMP C ;ARE THEY THE SAME?? - 6379 016543 312 202 035 JZ ACK.EN ;IF YES, DO SIMPLE ACK AND IGNORE MESSAGE - 6380 - 6381 ;IF DIFF, TWAS A GOOD MESSAGE, SAVE NUMBER AND EXECUTE - 6382 016546 167 MOV M,A ;SAVE MESSAGE NUMBER AS THE LAST - 6383 - 6384 016547 315 351 034 CALL MV.ALL ;AND MOVE THE STUFF TO A BUFFER FOR EXECUTION - 6385 016552 076 041 MVI A,^O41 ;EVERY COMMAND ENVELOPE EXECUTED RESETS THE ENV NUMBER - 6386 016554 062 011 042 STA ENVMNO ; SO RESET THE ENVELOPE MESSAGE NUMBER TO 41 - 6387 016557 315 052 034 CALL SETM4 ;MODE 4 TO GRAB INTERRUPTS CORRECTLY WHILE RUNNING - 6388 016562 315 336 034 CALL DECEX1 ;BEFORE EXECUTING, CLEAR ALL OLD MESSAGES - 6389 016565 041 176 035 LXI H,OKDN ;TELL NORMAL ENDS TO RETURN HERE FOR FURTHER ORDERS - 6390 016570 042 350 040 SHLD NOREND ;PASS INFO IN THE DEDICATED RAM POSITION - 6391 016573 303 222 002 JMP DCODE ;AND BEGIN EXECUTION OF THE STRING READ IN - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-209 -SUBRTN.M80 ENVELOPE COLLECTOR - - 6393 016576 373 OKDN: EI ;MUST ALLOW INTERRUPTS HERE - 6394 016577 315 205 034 CALL DECNET ;IF YES, MAIL ENVELOPE BEFORE ACK'ING - 6395 - 6396 ;NOW OK TO ACKNOWLEDGE THE COMMAND - 6397 016602 315 052 034 ACK.EN: CALL SETM4 ;SEND "ACK" DOWN THE KLINIK LINE - 6398 - 6399 016605 ACK: KLINE M.ACK - (1) 016605 315 137 004 CALL KLINE ;PRINT LINE OF CHARS - (1) 016610 213 035 .ADDR M.ACK ;BUFF TO PRINT - 6400 016612 311 RET ;DONE WITH THIS - 6401 016613 001 M.ACK: .BYTE SYNC ;SYNC - 6402 016614 001 .BYTE SYNC ;SYNC - 6403 016615 101 .BYTE 'A ;ACKNOWLEDGE CHAR - 6404 016616 033 .BYTE ALT ;ALTMODE - 6405 016617 000 .BYTE 0 ;END OF STRING - 6406 016620 315 052 034 NACK.EN: CALL SETM4 ;SEND "NACK" DOWN THE KLINIK LINE - 6407 016623 NACK: KLINE M.NACK - (1) 016623 315 137 004 CALL KLINE ;PRINT LINE OF CHARS - (1) 016626 231 035 .ADDR M.NACK ;BUFF TO PRINT - 6408 016630 311 RET ;BACK TO CALLER - 6409 - 6410 016631 001 M.NACK: .BYTE SYNC ;SYNC - 6411 016632 001 .BYTE SYNC ;SYNC - 6412 016633 116 .BYTE 'N ;NEGATIVE ACKNOWLEDGE CHAR - 6413 016634 033 .BYTE ALT ;ALTMODE - 6414 016635 000 .BYTE 0 ;END OF STRING - 6415 - 6416 016636 052 247 041 ACTION: LHLD E.BUF ;GET THE TYPE OF CONTROL THIS WAS(ACK OR NACK) - 6417 016641 176 MOV A,M ;PUT IT INTO ACCUM - 6418 016642 062 261 040 STA APTANS ;SET IT INTO THE ANSWER WORD - 6419 016645 303 052 034 JMP SETM4 ;AND NOW RESET INTERRUPT HANDLER AND OUT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-210 -SUBRTN.M80 ENVELOPE COLLECTOR - - 6421 ;THIS IS THE CODE DO DO STRAIGHT OUTPUT FROM THE KLINIK LINE TO THE CTY - 6422 ;AND INCLUDE A SCHEME FOR BUFFERING THE OUTPUT SO THAT A 9600 BAUD - 6423 ;KLINIK LINE WILL OUTPUT OK TO A 300 BAUD CTY. - 6424 ;IF INTERRUPTED WHILE PRINTING A CHARACTER, THE CHARACTERS WAITING TO BE - 6425 ;PRINTED ARE STACKED AT THE "SYSOUT" POINTER. CHARACTERS THAT ARE REMOVED FROM - 6426 ;THE WAITING BUFFER ARE REMOVED VIA THE POINTER "SYSIN" - 6427 016650 247 MMOUT: ANA A ;SEE IF THIS IS A NULL CHARACTER - 6428 016651 310 RZ ;IF YES, DONT DO NOTHIN - 6429 016652 052 123 042 LHLD SYSOUT ;SEE IF WE ARE BUSY PRINTING - 6430 016655 174 MOV A,H ;GET AN INDICATOR - 6431 016656 247 ANA A ;SET PC FLAGS - 6432 016657 312 320 035 JZ NOTBUSY ;GO IF NOT BUSY - 6433 - 6434 ;FELL TO HERE IF BUSY PRINTING - 6435 016662 353 XCHG ;SAVE THE CURRENT "SYSOUT" VALUE(IN D,E) - 6436 016663 052 121 042 LHLD SYSIN ; NOW SEE IF THIS IS FIRST TIME IN - 6437 016666 174 MOV A,H ;GET THE INDICATOR - 6438 016667 247 ANA A ;SET FLAGS - 6439 016670 302 301 035 JNZ STCK.Y ;JUMP IF ALREADY STACKING - 6440 - 6441 016673 041 125 042 LXI H,SYSBUF ;FIRST TIME IN, SO SET INPUT FLAG - 6442 016676 042 121 042 SHLD SYSIN ;SET IT - 6443 - 6444 016701 041 053 335 STCK.Y: LXI H,-SYSEND ;NOW SEE IF BUFFER IS FULL - 6445 016704 031 DAD D ;ADD END TO THE CURRENT TO SEE IF BUFF FULL - 6446 016705 174 MOV A,H ;SEE IF ZERO - 6447 016706 265 ORA L ;SEE IF ZERO - 6448 016707 310 RZ ;IF .EQ. 0 THROW AWAY STUFF..BUFF IS FULL - 6449 - 6450 ;HERE IF NOT FULL. MUST STACK THIS CHARACTER - 6451 016710 353 XCHG ;CURRENT POINTER GOES BACK TO HL REG(PNT TO SYSOUT) - 6452 016711 160 MOV M,B ;CHAR INTO RAM SPACE - 6453 016712 043 INX H ;UP COUNT - 6454 016713 066 000 MVI M,0 ;GUARANTEE A ZERO BYTE AT THE END OF BUFFER - 6455 016715 303 004 036 JMP SETOUT ;PUT THE POINTER BACK WHERE IT GOES - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-211 -SUBRTN.M80 ENVELOPE COLLECTOR - - 6457 ;HERE IF NOT PRINTING YET.. PRINT FIRST CHARACTER AND PLAN ON SOME MORE - 6458 016720 041 125 042 NOTBUSY: LXI H,SYSBUF ;THIS IS THE FIRST TIME IN - 6459 016723 042 123 042 SHLD SYSOUT ;SET THE FLAG & THE POINTER - 6460 - 6461 016726 170 MOV A,B ;GET CHAR BACK TO ACCUM SO CAN PRINT IT - 6462 016727 107 MORE.: MOV B,A ;WHERE EVER U COME FROM, SAVE ACCUM IN B REG - 6463 016730 376 012 CPI LFCHR ;IS THIS A LINE FEED?? - 6464 016732 302 344 035 JNZ MM.PNT ;IF NO, NOTHING SPECIAL - 6465 - 6466 016735 072 260 040 LDA CNTLQ.ON ;MUST WE ANSWER EVERY WITH A "CNTROL-Q" - 6467 016740 247 ANA A ;IF FLAG .EQ., THEN NO, IF YES THEN WRITE IT - 6468 016741 304 123 004 CNZ KCHR0 ;YES, A LINE FEED, SEND THE SYSTEM A "CONTROL-Q" - 6469 016744 170 MM.PNT: MOV A,B ;NO MATTER HOW U GOT HERE, CHAR GOES TO ACCUM - 6470 016745 373 EI ;INTERRUPTS ON NOW, BEGIN PRINTING - 6471 016746 315 056 004 CALL PCHR1Z ;PRINT A CHAR - 6472 - 6473 ;BACK TO HERE WHEN DONE PRINTING - 6474 016751 363 DI ;DON'T BOTHER ME FOR A BIT - 6475 016752 052 121 042 LHLD SYSIN ;GRAB POINTER OF THINGS WAITING TO BE PRINTED - 6476 016755 174 MOV A,H ;GET FLAG - 6477 016756 247 ANA A ;SET FLAGS - 6478 016757 312 376 035 JZ DONE.BUF ;IF NOTHIN, ALL DONE - 6479 - 6480 ;HERE WHEN SOMETHING TO DO - 6481 016762 176 MOV A,M ;GRAB A CHARACTER TO PRINT - 6482 016763 247 ANA A ;MUST FIRST CHECK FOR END OF BUFFER - 6483 016764 312 376 035 JZ DONE.BUF ;IF DONE RESET THE POINTERS AND GET OUT - 6484 - 6485 016767 043 INX H ;NEXT POINT - 6486 016770 042 121 042 SHLD SYSIN ;SET INTO RAM - 6487 016773 303 327 035 JMP MORE. ;DO MORE - 6488 - 6489 ;HERE ON DONE ALL..FALL INTO Z-BUFF CODE - 6490 016776 DONE.BUF: - 6491 016776 041 000 000 Z.TBUF: LXI H,0 ;WE NEED TO CLEAR SOME BUFFERS - 6492 017001 042 121 042 SHLD SYSIN ;CLEAR POINTER - 6493 017004 042 123 042 SETOUT: SHLD SYSOUT ; AND CLEAR POINTER - 6494 017007 311 RET - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-212 -SUBRTN.M80 **** MORE ERROR ESCAPES **** - - 6496 .SBTTL **** MORE ERROR ESCAPES **** - 6497 017010 NOACK: PLINE NOA ;"PRINT NO DATA ACK" - (1) 017010 337 RST 3 ;PRINT LINE OF CHARS - (1) 017011 220 037 .ADDR NOA ;BUFF TO PRINT - 6498 - 6499 017013 041 001 000 LXI H,1 ;ERR CODE IS 1 - 6500 017016 042 154 040 ERRRTN: SHLD ERRCD ;SET ERROR CODE - 6501 017021 ENDCMD - (1) 017021 311 RET ;RETURN TO CALLER - 6502 - 6503 017022 257 NOARB: XRA A ;CLR ACCUM - 6504 017023 323 210 OUT BUSCTL ;***** I/O WRT 210/0 ***** - 6505 017025 PLINE NBR ;"?NO BUS RESP" - (1) 017025 337 RST 3 ;PRINT LINE OF CHARS - (1) 017026 234 037 .ADDR NBR ;BUFF TO PRINT - 6506 - 6507 017030 041 002 000 LXI H,2 ;ERR CODE IS 2 - 6508 017033 303 016 036 JMP ERRRTN ;GO SET ERROR CODE - 6509 - 6510 017036 257 NIXOM: XRA A ;CLR ACCUM - 6511 017037 323 210 OUT BUSCTL ;***** I/O WRT 210/0 ***** CLR OUT NIXOM BIT AFTER THE REPORT - 6512 017041 PLINE NXMMSG ;"PRINT ?NXM" - (1) 017041 337 RST 3 ;PRINT LINE OF CHARS - (1) 017042 226 037 .ADDR NXMMSG ;BUFF TO PRINT - 6513 017044 041 003 000 LXI H,3 ;ERROR CODE 3 - 6514 - 6515 017047 303 016 036 JMP ERRRTN ;SET ERROR CODE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-213 -DR.M80 ****DISK TRANSFER CHANNEL COMMAND LIST**** - - 6517 .SBTTL ****DISK TRANSFER CHANNEL COMMAND LIST**** - 6518 - 6519 017052 DSKSEQ: - 6520 - 6521 ;A MINOR NOTE: 40000 WEIGHT BIT IS "VALID" - 6522 ; : 100000 WEIGHT BIT IS "36-BIT XFR" - 6523 - 6524 017052 UBA. 763,001 ;ADDRESS OF UBA IS FIRST ELEMENT OF THE LIST - (1) 017052 001 .BYTE 001 & 377 - (1) 017053 346 .BYTE Q.1 - (1) 017054 073 .BYTE Q.2 - 6525 017055 DI. 140,001 ;VALID & "36 BIT XFR" FOR PAGE 1 (1000-1777) - (1) 017055 001 .BYTE 001 & 377 - (1) 017056 300 .BYTE Q.1 - (1) 017057 000 .BYTE Q.2 - 6526 017060 LI. D776,P.10 ;GET DRIVE STATUS & CONTROL REG, SO CAN SET UNIT - (1) 017060 374 .BYTE Q.1 - (1) 017061 010 .BYTE P.10 & 377 - (1) 017062 013 .BYTE Q.2 - 6527 017063 DI.INDIRECT UNITNM ;NOW SET THE UNIT NUMBER - (1) 017063 132 040 .ADDR UNITNM - (1) 017065 200 .BYTE ^O200 - 6528 017066 EI. D776,P.12 ;ADDRESS OF DRIVE STATUS - (1) 017066 374 .BYTE Q.1 - (1) 017067 012 .BYTE P.12 & 377 - (1) 017070 023 .BYTE Q.2 - 6529 017071 TWAIT 400 ;CHECK THAT THE DRIVE IS PRESENT - (1) 017071 000 001 .ADDR 400 - (1) 017073 060 .BYTE <14*4> - 6530 017074 WAIT 200 ;CHECK & WAIT FOR READY - (1) 017074 200 000 .ADDR 200 - (1) 017076 030 .BYTE <6*4> - 6531 017077 LI. D776,P.10 ;ADDR OF DRIVE STATUS REG - (1) 017077 374 .BYTE Q.1 - (1) 017100 010 .BYTE P.10 & 377 - (1) 017101 013 .BYTE Q.2 - 6532 017102 DI. 0,40 ;ISSUE CONTROLLER CLR - (1) 017102 040 .BYTE 40 & 377 - (1) 017103 000 .BYTE Q.1 - (1) 017104 000 .BYTE Q.2 - 6533 017105 DI.INDIRECT UNITNM ;SET TO UNIT # - (1) 017105 132 040 .ADDR UNITNM - (1) 017107 200 .BYTE ^O200 - 6534 017110 LI. D776,P.00 ;ADDR OF CONTROLLER STATUS REG - (1) 017110 374 .BYTE Q.1 - (1) 017111 000 .BYTE P.00 & 377 - (1) 017112 013 .BYTE Q.2 - 6535 017113 DI. 0,11 ;ISSUE DRIVE CLEAR - (1) 017113 011 .BYTE 11 & 377 - (1) 017114 000 .BYTE Q.1 - (1) 017115 000 .BYTE Q.2 - 6536 017116 DI. 0,21 ;SET "READ-IN-PRESET" - (1) 017116 021 .BYTE 21 & 377 - (1) 017117 000 .BYTE Q.1 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-214 -DR.M80 ****DISK TRANSFER CHANNEL COMMAND LIST**** - - (1) 017120 000 .BYTE Q.2 - 6537 017121 LI. D776,P.12 ;GET TO THE DRIVE STATUS REGISTER - (1) 017121 374 .BYTE Q.1 - (1) 017122 012 .BYTE P.12 & 377 - (1) 017123 013 .BYTE Q.2 - 6538 017124 WAIT 200 ;WAIT FOR IT TO BE READY - (1) 017124 200 000 .ADDR 200 - (1) 017126 030 .BYTE <6*4> - 6539 017127 TWAIT 100 ;NOW CHECK THAT "PRE-SET" HAS SET VOLUME VALID - (1) 017127 100 000 .ADDR 100 - (1) 017131 060 .BYTE <14*4> - 6540 017132 LI. D776,P.06 ;ADDR TRACK/SECTOR REG - (1) 017132 374 .BYTE Q.1 - (1) 017133 006 .BYTE P.06 & 377 - (1) 017134 013 .BYTE Q.2 - 6541 017135 DI.INDIRECT BLKNUM ;EMPTY FOR NOW - (1) 017135 105 040 .ADDR BLKNUM - (1) 017137 200 .BYTE ^O200 - 6542 017140 LI. D776,P.34 ;ADDR OF CYLINDER REG - (1) 017140 374 .BYTE Q.1 - (1) 017141 034 .BYTE P.34 & 377 - (1) 017142 013 .BYTE Q.2 - 6543 017143 DI.INDIRECT BLKADR ;EMPTY FOR NOW - (1) 017143 112 040 .ADDR BLKADR - (1) 017145 200 .BYTE ^O200 - 6544 017146 QXFR: LI. D776,P.02 ;ADD OF WORD COUNT REG - (1) 017146 374 .BYTE Q.1 - (1) 017147 002 .BYTE P.02 & 377 - (1) 017150 013 .BYTE Q.2 - 6545 017151 DI. 176,000 ;512 WORDS IS 1024 18-BIT BYTES(A PAGE) - (1) 017151 000 .BYTE 000 & 377 - (1) 017152 374 .BYTE Q.1 - (1) 017153 000 .BYTE Q.2 - 6546 017154 LI. D776,P.04 ;ADDR OF UNIBUS ADDRESS REG - (1) 017154 374 .BYTE Q.1 - (1) 017155 004 .BYTE P.04 & 377 - (1) 017156 013 .BYTE Q.2 - 6547 017157 DI. 4,000 ;SET SM10 MEM ADDR TO 1000 - (1) 017157 000 .BYTE 000 & 377 - (1) 017160 010 .BYTE Q.1 - (1) 017161 000 .BYTE Q.2 - 6548 017162 LI. D776,P.00 ;BACK TO STATUS REG - (1) 017162 374 .BYTE Q.1 - (1) 017163 000 .BYTE P.00 & 377 - (1) 017164 013 .BYTE Q.2 - 6549 017165 DI. 0,71 ;ISSUE READ - (1) 017165 071 .BYTE 71 & 377 - (1) 017166 000 .BYTE Q.1 - (1) 017167 000 .BYTE Q.2 - 6550 017170 EI. D776,P.00 ;NOW READ TO CHECK FOR ERRORS IN XFER - (1) 017170 374 .BYTE Q.1 - (1) 017171 000 .BYTE P.00 & 377 - (1) 017172 023 .BYTE Q.2 - 6551 017173 WAIT 200 ;CHECK FOR READY BIT TRUE.. - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-215 -DR.M80 ****DISK TRANSFER CHANNEL COMMAND LIST**** - - (1) 017173 200 000 .ADDR 200 - (1) 017175 030 .BYTE <6*4> - 6552 017176 EI. D776,P.12 ;CHECK DRIVE STATUS REG ITSELF - (1) 017176 374 .BYTE Q.1 - (1) 017177 012 .BYTE P.12 & 377 - (1) 017200 023 .BYTE Q.2 - 6553 017201 ERRTST 40000 ;TEST "ERR" BIT - (1) 017201 000 100 .ADDR 40000 - (1) 017203 040 .BYTE <10*4> - 6554 ;IF IT WAS OK, THEN CHECK THE CONTROLLER FOR ERRORS - 6555 017204 EI. D776,P.00 ;EXAMINE CONTROLLER - (1) 017204 374 .BYTE Q.1 - (1) 017205 000 .BYTE P.00 & 377 - (1) 017206 023 .BYTE Q.2 - 6556 017207 ERRTST 060000 ;DRIVE RDY, NOW SEE IF ENCOUNTERED ERRORS - (1) 017207 000 140 .ADDR 060000 - (1) 017211 040 .BYTE <10*4> - 6557 017212 ENDLST ;END OF CHANNEL COMMAND LIST - (1) 017212 000 .BYTE 0 - (1) 017213 000 .BYTE 0 - (1) 017214 050 .BYTE <12*4> - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-216 -DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST - - 6559 .SBTTL TAPE TRANSFER CHANNEL COMMAND LIST - 6560 ;DRIVE CONTROLLER REGISTER IS 776440..FOLLOWING COMMANDS APPLY - 6561 ; 7=REWIND - 6562 ; 11=DRIVE CLEAR - 6563 ; 25=ERASE - 6564 ; 27=WRITE TAPE MARK - 6565 ; 31=SPACE FORWARD(SKIP A FILE) - 6566 ; 33=SPACE REVERSE(SKIP A FILE, MOVING TAPE IN REVERSE) - 6567 ; 51=WRITE CHECK FORWARD - 6568 ; 57=WRITE CHECK REVERSE - 6569 ; 61=WRITE FORWARD - 6570 ; 71=READ FORWARD(GO!) - 6571 ; 77=READ REVERSE(GO!) - 6572 - 6573 017215 MTASEQ: UBA. 763,001 ;ADDRESS OF UBA PAGING RAM - (1) 017215 001 .BYTE 001 & 377 - (1) 017216 346 .BYTE Q.1 - (1) 017217 073 .BYTE Q.2 - 6574 017220 DI. 40,001 ;SET VALID IN PAGE 1 - (1) 017220 001 .BYTE 001 & 377 - (1) 017221 100 .BYTE Q.1 - (1) 017222 000 .BYTE Q.2 - 6575 017223 LI. D772,P.10 ;SET ADDRESS OF DRIVE CONTROL REGISTER - (1) 017223 364 .BYTE Q.1 - (1) 017224 010 .BYTE P.10 & 377 - (1) 017225 013 .BYTE Q.2 - 6576 017226 DI. 0,40 ;ISSUE CONTROLLER AND SLAVE CLR - (1) 017226 040 .BYTE 40 & 377 - (1) 017227 000 .BYTE Q.1 - (1) 017230 000 .BYTE Q.2 - 6577 017231 DI.INDIRECT TAPEUNIT ;SET TAPE UNIT # - (1) 017231 137 040 .ADDR TAPEUNIT - (1) 017233 200 .BYTE ^O200 - 6578 017234 LI. D772,P.32 ;SLAVE SELECT/FORMAT/DENSITY REG - (1) 017234 364 .BYTE Q.1 - (1) 017235 032 .BYTE P.32 & 377 - (1) 017236 013 .BYTE Q.2 - 6579 017237 DI.INDIRECT DEN.SLV ;SET SLAVE, FORMAT, DENSITY(TEMP:DENS=1600,F=0,S=0) - (1) 017237 362 040 .ADDR DEN.SLV - (1) 017241 200 .BYTE ^O200 - 6580 017242 EI. D772,P.12 ;READ THE DRIVE STATUS, TO MAKE SURE IT EXISTS - (1) 017242 364 .BYTE Q.1 - (1) 017243 012 .BYTE P.12 & 377 - (1) 017244 023 .BYTE Q.2 - 6581 017245 TWAIT 400 ;CHECK THE "DRIVE PRESENT" BIT - (1) 017245 000 001 .ADDR 400 - (1) 017247 060 .BYTE <14*4> - 6582 017250 WAIT 200 ;IF WAS PRESENT, WAIT FOR IT TO BE READY - (1) 017250 200 000 .ADDR 200 - (1) 017252 030 .BYTE <6*4> - 6583 017253 LI. D772,P.06 ;FRAME COUNT REGISTER - (1) 017253 364 .BYTE Q.1 - (1) 017254 006 .BYTE P.06 & 377 - (1) 017255 013 .BYTE Q.2 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-217 -DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST - - 6584 017256 DI. 0,0 ;FRAME COUNT TO 0 IS MAX NUMB OF FRAMES - (1) 017256 000 .BYTE 0 & 377 - (1) 017257 000 .BYTE Q.1 - (1) 017260 000 .BYTE Q.2 - 6585 017261 LI. D772,P.00 ;SET ADDRESS TO RH11 CONTROL REGISTER - (1) 017261 364 .BYTE Q.1 - (1) 017262 000 .BYTE P.00 & 377 - (1) 017263 013 .BYTE Q.2 - 6586 017264 DI. 0,7 ;ISSUE "REWIND" TO TAPE - (1) 017264 007 .BYTE 7 & 377 - (1) 017265 000 .BYTE Q.1 - (1) 017266 000 .BYTE Q.2 - 6587 017267 EI. D772,P.12 ;READ THE DRIVE STATUS TO CHECK FOR READY - (1) 017267 364 .BYTE Q.1 - (1) 017270 012 .BYTE P.12 & 377 - (1) 017271 023 .BYTE Q.2 - 6588 017272 WAIT 200 ;WAIT FOR REWIND TO COMPLETE - (1) 017272 200 000 .ADDR 200 - (1) 017274 030 .BYTE <6*4> - 6589 017275 QTXFR: LI. D772,P.04 ;CONTROLLER TO MEMORY DEST. REG - (1) 017275 364 .BYTE Q.1 - (1) 017276 004 .BYTE P.04 & 377 - (1) 017277 013 .BYTE Q.2 - 6590 017300 DI. 4,000 ;SET KS10 START ADDRESS TO 1000 - (1) 017300 000 .BYTE 000 & 377 - (1) 017301 010 .BYTE Q.1 - (1) 017302 000 .BYTE Q.2 - 6591 017303 LI. D772,P.02 ;SET ADDRESS TO WORD COUNT REGISTER - (1) 017303 364 .BYTE Q.1 - (1) 017304 002 .BYTE P.02 & 377 - (1) 017305 013 .BYTE Q.2 - 6592 017306 DI. 176,000 ;1 PAGE OF 512 WORDS IS 1024 18-BIT BYTES - (1) 017306 000 .BYTE 000 & 377 - (1) 017307 374 .BYTE Q.1 - (1) 017310 000 .BYTE Q.2 - 6593 017311 LI. D772,P.06 ;FRAME COUNT REGISTER - (1) 017311 364 .BYTE Q.1 - (1) 017312 006 .BYTE P.06 & 377 - (1) 017313 013 .BYTE Q.2 - 6594 017314 DI. 0,0 ;FRAME COUNT TO 0 IS MAX NUMB OF FRAMES - (1) 017314 000 .BYTE 0 & 377 - (1) 017315 000 .BYTE Q.1 - (1) 017316 000 .BYTE Q.2 - 6595 017317 LI. D772,P.00 ;SET ADDRESS TO RH11 CONTROL REGISTER - (1) 017317 364 .BYTE Q.1 - (1) 017320 000 .BYTE P.00 & 377 - (1) 017321 013 .BYTE Q.2 - 6596 017322 DI.INDIRECT SKP.GO ;ISSUE "XFER CMD"(31=SKIP .OR. 71=RD-IN) - (1) 017322 144 040 .ADDR SKP.GO - (1) 017324 200 .BYTE ^O200 - 6597 017325 EI. D772,P.12 ;READ THE DRIVE STATUS TO CHECK FOR READY - (1) 017325 364 .BYTE Q.1 - (1) 017326 012 .BYTE P.12 & 377 - (1) 017327 023 .BYTE Q.2 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-218 -DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST - - 6598 017330 WAIT 200 ;WAIT FOR FILE READ TO COMPLETE - (1) 017330 200 000 .ADDR 200 - (1) 017332 030 .BYTE <6*4> - 6599 017333 EI. D772,P.14 ;LOOK AT THE DRIVE ERROR REGISTER - (1) 017333 364 .BYTE Q.1 - (1) 017334 014 .BYTE P.14 & 377 - (1) 017335 023 .BYTE Q.2 - 6600 017336 RETRY.: ERRTST 070300 ;ERRORS WORTH RETRYING?? - (1) 017336 300 160 .ADDR 070300 - (1) 017340 040 .BYTE <10*4> - 6601 017341 FRMERR: ERRTST 103400 ;SEE IF THIS WAS A CORRECTABLE TYPE ERROR - (1) 017341 000 207 .ADDR 103400 - (1) 017343 040 .BYTE <10*4> - 6602 017344 EI. D772,P.12 ;READ THE DRIVE STATUS TO CHECK FOR ERRORS - (1) 017344 364 .BYTE Q.1 - (1) 017345 012 .BYTE P.12 & 377 - (1) 017346 023 .BYTE Q.2 - 6603 017347 ERRTST 40000 ;GET ANY DRIVE ERRORS?? - (1) 017347 000 100 .ADDR 40000 - (1) 017351 040 .BYTE <10*4> - 6604 017352 LI. D772,P.00 ;NOW ADDRESS TO CONTROLLER STATUS - (1) 017352 364 .BYTE Q.1 - (1) 017353 000 .BYTE P.00 & 377 - (1) 017354 013 .BYTE Q.2 - 6605 017355 ERRTST 60000 ;CHECK FOR ERRORS THERE. - (1) 017355 000 140 .ADDR 60000 - (1) 017357 040 .BYTE <10*4> - 6606 017360 ENDLST ;END OF CHANNEL COMMAND LIST - (1) 017360 000 .BYTE 0 - (1) 017361 000 .BYTE 0 - (1) 017362 050 .BYTE <12*4> - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-219 -DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST - - 6608 ;QUICK LITTLE ROUTINE TO RESET THE MAGTAPE AFTER IT SUFFERS AN - 6609 ;IGNORABLE ERROR - 6610 017363 MTARST: LI. D772,P.10 ;SET ADDRESS OF DRIVE CONTROL REGISTER - (1) 017363 364 .BYTE Q.1 - (1) 017364 010 .BYTE P.10 & 377 - (1) 017365 013 .BYTE Q.2 - 6611 017366 DI. 0,40 ;ISSUE CONTROLLER AND SLAVE CLR - (1) 017366 040 .BYTE 40 & 377 - (1) 017367 000 .BYTE Q.1 - (1) 017370 000 .BYTE Q.2 - 6612 017371 DI.INDIRECT TAPEUNIT ;FIX UNIT NUMBER - (1) 017371 137 040 .ADDR TAPEUNIT - (1) 017373 200 .BYTE ^O200 - 6613 017374 LI. D772,P.04 ;CONTROLLER TO MEMORY DEST. REG - (1) 017374 364 .BYTE Q.1 - (1) 017375 004 .BYTE P.04 & 377 - (1) 017376 013 .BYTE Q.2 - 6614 017377 DI. 4,000 ;SET KS10 START ADDRESS TO 1000 - (1) 017377 000 .BYTE 000 & 377 - (1) 017400 010 .BYTE Q.1 - (1) 017401 000 .BYTE Q.2 - 6615 017402 LI. D772,P.06 ;FRAME COUNT REGISTER - (1) 017402 364 .BYTE Q.1 - (1) 017403 006 .BYTE P.06 & 377 - (1) 017404 013 .BYTE Q.2 - 6616 017405 DI. 0,0 ;FRAME COUNT TO 0 IS MAX NUMB OF FRAMES - (1) 017405 000 .BYTE 0 & 377 - (1) 017406 000 .BYTE Q.1 - (1) 017407 000 .BYTE Q.2 - 6617 017410 ENDLST ;QUICK OUT - (1) 017410 000 .BYTE 0 - (1) 017411 000 .BYTE 0 - (1) 017412 050 .BYTE <12*4> - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-220 -MSG.M80 TAPE TRANSFER CHANNEL COMMAND LIST - - 6619 017413 077 102 125 .IIF NDF,NOROOM INIER: .ASCIZ /?BUS\/ ;BUS POLLUTED ON POWER UP - 6620 017421 077 102 106 BV: .ASCIZ /?BFO/ ;INPUT BUFFER OVERFLOW - 6621 017426 077 111 114 CMDNG: .ASCII /?IL/ ;ILLEGAL INSTRUCTION - 6622 017431 015 012 000 .BYTE ^O15,^O12,0 ;CR-LF - 6623 017434 077 125 111 TTM: .ASCIZ /?UI\/ ;UNKNOWN INTERRRUPT - 6624 017441 102 125 123 EBHED: .ASCIZ /BUS 0-35\/ ;MESSAGE HEADER FOR "EB" CMD - 6625 017453 113 123 061 KSPRMT: .ASCII /KS10>/ ;PROMPT MESSAGE - 6626 017460 377 000 .BYTE ^O377,0 - 6627 017462 040 103 131 MSG10: .ASCIZ % CYC\SENT/% ;CYCLE TYPE FOR "DB" COMMAND - 6628 017475 134 122 103 DRCVD: .ASCIZ %\RCVD/% ;DATA RECEIVED ON BUS(DB CMD) - 6629 017504 077 101 057 ECVER: .ASCIZ %?A/B\% ;A & B COPIES OF CRAM BITS DID NOT MATCH - 6630 017512 120 103 057 PCMSG: .ASCIZ %PC/% ;OBVIOUS - 6631 017516 045 110 114 HLTMS: .ASCIZ .%HLTD/. ;MESSAGE "HALTED/XXXXXX" WHERE XXXXXX IS DATA - 6632 017525 077 104 116 EXMS: .ASCIZ /?DNF\/ ;"DID NOT FINISH"-INSTR - 6633 017533 077 102 124 BTFAIL: .ASCIZ /?BT / ;DEVICE ERROR OR TIMEOUT DURING BOOT OPERATION - 6634 017540 102 124 040 BTMSG1: .ASCIZ /BT SW/ ;MESSAGE SAYS BOOTING, USING BOOT SW - 6635 017546 077 104 116 SMERR: .ASCIZ /?DNC\/ ;"DID NOT COMPLETE"-THE HALT - 6636 017554 117 106 106 OFFMSG: .ASCIZ /OFF\/ ;MESSAGE SAYS SIGNAL IS "OFF" - 6637 017561 077 120 101 PARMSG: .ASCIZ /?PAR ERR / ;REPORT CLOCK FREEZE DUE TO PAR ERR - 6638 017573 077 115 122 MOSMSG: .ASCIZ /?MRE\/ ;MEMORY REFRESH ERROR - 6639 017601 077 102 103 ERRMSG: .ASCIZ /?BC / ;TA-DA....BOOT CHECK - 6640 017606 077 122 125 RN.: .ASCIZ /?RUNNING\/ ;TRYING TO DO A CMD THAT MAY SCREW UP - 6641 017620 077 116 104 NOA: .ASCIZ /?NDA\/ ;RECEIVED NO DATA ACKNOWLEDGE ON MEM REQUEST - 6642 017626 077 116 130 NXMMSG: .ASCIZ /?NXM\/ ;REFERRENCED NON EXISTANT MEMORY LOCATION - 6643 017634 077 116 102 NBR: .ASCIZ /?NBR\/ ;CONSOLE WAS NOT GRANTED BUS ON A REQUEST - 6644 017642 077 122 101 RAG: .ASCIZ /?RA/ ;CMD REQUIRES ARGUEMENT..U GOTTA TYPE SOMETHING - 6645 017646 077 102 116 BB1: .ASCIZ /?BN/ ;TYPED A BAD NUMBER(I.E 9 OR X OR # ETC.) - 6646 017652 076 076 125 Q.UBA: .ASCIZ />>UBA?/ ;QUERY FOR UNIBUS ADAPTER - 6647 017661 076 076 122 Q.RH: .ASCIZ />>RHBASE?/ ;QUERY FOR RH11 TO USE - 6648 017673 076 076 125 Q.UNIT: .ASCIZ />>UNIT?/ ;QUERY FOR UNIT TO USE - 6649 017703 076 076 124 Q.TCU: .ASCIZ />>TCU?/ ;QUERY FOR TAPE CONTROLL UNIT - 6650 017712 076 076 104 Q.DEN: .ASCIZ />>DENS?/ ;QUERY FOR TAPE DENSITY - 6651 017722 076 076 123 Q.SLV: .ASCIZ />>SLV?/ ;QUERY FOR TAPE SLAVE - 6652 017731 077 113 101 KAMSG: .ASCIZ /?KA\/ ;KEEP ALIVE FAILED - 6653 017736 077 106 122 FRCMSG: .ASCIZ /?FRC\/ ;HAD A FORCED RELOAD - 6654 017744 077 120 127 PWLEN: .ASCIZ /?PWL/ ;PASSWORD LENGTH ERROR - 6655 017751 077 116 101 NOACCS: .ASCII /?NA/ ;NOT AVAILABLE (KLINIK LINE THAT IS) - 6656 017754 015 012 000 .BYTE ^O15,^O12,0 ;CR-LF - 6657 017757 120 127 072 QPW: .ASCII /PW:/ ;ASK FOR A PASSWORD MESSAGE - 6658 017762 015 012 000 .BYTE ^O15,^O12,0 ;CR-LF - 6659 017765 102 124 040 AUTOMS: .ASCIZ /BT AUTO/ ;BEGINNING AUTO BOOT SEQUENCE - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-221 -STORE.M80 - SM10 DATA STORAGE PARAMETERS - - 6661 .SBTTL - SM10 DATA STORAGE PARAMETERS - 6662 ;NOTE THAT ALL THESE LOCATIONS ARE RAM LOCATIONS - 6663 ;AND MAY BE USED WITH THE - 6664 ;ASSEMBLY OF SEPARATE MODULES OF CONSOLE CODE.... - 6665 020000 .= RAMST - 6666 020000 000002 T80DT: .BLKB 2 - 6667 020002 000002 C80AD: .BLKB 2 - 6668 020004 000002 CRMAD: .BLKB 2 - 6669 020006 000002 BYTCNT: .BLKB 2 - 6670 020010 000002 CRMFN: .BLKB 2 - 6671 020012 000005 EMBUF: .BLKB 5 - 6672 020017 000005 MEMAD: .BLKB 5 - 6673 020024 000005 IOAD: .BLKB 5 - 6674 020031 000002 ENEXT: .BLKB 2 - 6675 020033 000002 DNEXT: .BLKB 2 - 6676 020035 000005 CHRBUF: .BLKB 5 - 6677 020042 000005 BUSAD: .BLKB 5 - 6678 020047 000005 DMDAT: .BLKB 5 - 6679 020054 000006 RAMX1: .BLKB 6 - 6680 020062 000006 RAMX2: .BLKB 6 - 6681 020070 000003 ER.LOC: .BLKB 3 ;PLACE TO EXECUTE 8080 "IN'S" AND "OUT'S" - 6682 020073 000005 TMPBF2: .BLKB 5 - 6683 020100 000005 TMPB2: .BLKB 5 - 6684 020105 000005 BLKNUM: .BLKB 5 - 6685 020112 000005 BLKADR: .BLKB 5 - 6686 020117 000001 EXM1: .BLKB 1 - 6687 020120 000001 NOPNT: .BLKB 1 - 6688 020121 000001 BT.TYPE: .BLKB 1 - 6689 020122 000001 P8.TMP: .BLKB 1 - 6690 020123 000001 ERADDR: .BLKB 1 - 6691 020124 000001 KLNKSW: .BLKB 1 - 6692 020125 000002 KPWPNT: .BLKB 2 - 6693 020127 000001 KPWCNT: .BLKB 1 - 6694 020130 000001 WATCHC: .BLKB 1 - 6695 020131 000001 CMDS..: .BLKB 1 - 6696 020132 000005 UNITNM: .BLKB 5 - 6697 020137 000005 TAPEUNIT: .BLKB 5 - 6698 020144 000005 SKP.GO: .BLKB 5 - 6699 020151 000001 BRKON: .BLKB 1 - 6700 020152 000002 BRKDT: .BLKB 2 - 6701 020154 000002 ERRCD: .BLKB 2 - 6702 020156 000001 USRMD: .BLKB 1 - 6703 020157 000001 RPEND: .BLKB 1 - 6704 020160 000001 RPCNTR: .BLKB 1 - 6705 020161 000001 BFCNT: .BLKB 1 - 6706 020162 000001 STPPD: .BLKB 1 - 6707 020163 000001 EIFLAG: .BLKB 1 - 6708 020164 000001 DIFLAG: .BLKB 1 - 6709 020165 000001 RNFLG: .BLKB 1 - 6710 020166 000001 CHKPAR: .BLKB 1 - 6711 020167 000001 CHKREF: .BLKB 1 - 6712 020170 000002 ECSAV: .BLKB 2 - 6713 020172 000010 RM100: .BLKB 8 - 6714 020202 000001 BTMSK: .BLKB 1 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-222 -STORE.M80 - SM10 DATA STORAGE PARAMETERS - - 6715 020203 000001 BTNUM: .BLKB 1 - 6716 020204 000001 EOL: .BLKB 1 - 6717 020205 000002 AM.AI: .BLKB 2 - 6718 020207 000002 RPBUFS: .BLKB 2 - 6719 020211 000002 RPLST: .BLKB 2 - 6720 020213 000001 RPTON: .BLKB 1 - 6721 020214 000001 CHRCNT: .BLKB 1 - 6722 020215 000002 BUF.: .BLKB 2 - 6723 020217 000002 HLSAVE: .BLKB 2 - 6724 020221 000002 CMD..: .BLKB 2 - 6725 020223 000002 .ARG1: .BLKB 2 - 6726 020225 000002 CMCNT: .BLKB 2 - 6727 020227 000002 FIRST: .BLKB 2 - 6728 020231 000002 CHKHLT: .BLKB 2 - 6729 020233 000002 OCTSV: .BLKB 2 - 6730 020235 000005 SHRTAD: .BLKB 5 - 6731 020242 000005 RHBASE: .BLKB 5 - 6732 020247 000001 CSLMODE: .BLKB 1 - 6733 020250 000001 KACNTR: .BLKB 1 - 6734 020251 000001 MMFLG: .BLKB 1 - 6735 020252 000001 MAILFG: .BLKB 1 - 6736 020253 000001 VERCNT: .BLKB 1 - 6737 020254 000001 UBANUM: .BLKB 1 - 6738 020255 000001 GOCODE: .BLKB 1 - 6739 020256 000001 SECRET: .BLKB 1 - 6740 020257 000001 DIECNT: .BLKB 1 - 6741 020260 000001 CNTLQ.ON: .BLKB 1 - 6742 020261 000001 APTANS: .BLKB 1 - 6743 020262 000007 PASSWORD: .BLKB 7 - 6744 020271 000006 KPWBUF: .BLKB 6 - 6745 020277 000001 PWRTRY: .BLKB 1 - 6746 020300 000001 KLLINE.ON: .BLKB 1 - 6747 020301 000001 E.CNT: .BLKB 1 - 6748 020302 000020 CRMBF: .BLKB ^D16 - 6749 020322 000020 CRMTM: .BLKB ^D16 - 6750 020342 000002 KATIM1: .BLKB 2 - 6751 020344 000002 .IIF DF,SCECOD,SCEADR: .BLKB 2 ;LAST FAILING ADDRESS - 6752 020346 000002 MODDIS: .BLKB 2 - 6753 020350 000002 NOREND: .BLKB 2 - 6754 020352 000002 ENVPNT: .BLKB 2 - 6755 020354 000001 PARBT: .BLKB 1 - 6756 020355 000001 TRAPEN: .BLKB 1 - 6757 020356 000001 MTAUBA: .BLKB 1 - 6758 020357 000001 DSKUBA: .BLKB 1 - 6759 020360 000001 STATE: .BLKB 1 - 6760 020361 000001 LSTMSG: .BLKB 1 - 6761 020362 000005 DEN.SLV: .BLKB 5 - 6762 020367 000005 MTBASE: .BLKB 5 - 6763 020374 000005 DSBASE: .BLKB 5 - 6764 020401 000031 RPINI: .BLKB ^D25 - 6765 020432 000062 RPTBFI: .BLKB ^D50 - 6766 020514 000132 BUFBG: .BLKB ^D90 - 6767 020646 000001 BUFEN: .BLKB 1 - 6768 020647 000002 E.BUF: .BLKB 2 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-223 -STORE.M80 - SM10 DATA STORAGE PARAMETERS - - 6769 020651 000140 E.BEG: .BLKB ^O140 - 6770 021011 000001 ENVMNO: .BLKB 1 - 6771 021012 000001 ENVCHK: .BLKB 1 - 6772 021013 000106 ENVBUF: .BLKB 70 ;EB IS LONGEST COMMAND WITH 67. CHARS - 6773 021121 000002 SYSIN: .BLKB 2 - 6774 021123 000002 SYSOUT: .BLKB 2 - 6775 021125 000200 SYSBUF: .BLKB ^O200 - 6776 021325 000001 SYSEND: .BLKB 1 ;AND EMPTY BYTE TO HOLD END OF LIST - 6777 001 .IF DF,SCECOD - 6778 021326 000001 SC.OFF: .BLKB 1 ;RECOVERY ON OR OFF FLAG - 6779 021327 000050 RHSAVE: .BLKB 40. ;BUFFER FOR SAVING RH STUFF - 6780 000 .ENDC - 6781 021377 FREE: - 6782 000000 .END ;END STATEMENT - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-224 -END.M80 CROSS REFERENCE TABLE - -A =%000007 532 567 580 630 638 652 655 658 659 662 665 667 668 - 670 673 680 687 691 704 705 706 707 708 717 718 722 - 727 731 732 744 747 749 757 764 775 795 802 815 838 - 840 869 887 928 932 947 950 960 971 998 1013 1035 1048 - 1064 1068 1075 1076 1085 1115 1148 1150 1152 1167 1174 1176 1182 - 1190 1199 1217 1236 1266 1278 1283 1291 1293 1307 1312 1314 1321 - 1328 1330 1338 1339 1340 1342 1365 1381 1419 1440 1455 1461 1640 - 1645 1648 1666 1673 1680 1687 1689 1698 1706 1721 1722 1735 1745 - 1759 1795 1799 1803 1807 1811 1839 1841 1849 1851 1857 1897 1923 - 1929 1932 1937 1941 1945 1952 1956 1962 1963 1967 1977 1979 1982 - 1985 1986 1993 1996 2003 2007 2012 2018 2023 2045 2048 2054 2072 - 2083 2101 2104 2111 2113 2122 2126 2129 2132 2138 2146 2151 2155 - 2162 2167 2224 2228 2246 2267 2292 2298 2311 2314 2321 2325 2330 - 2336 2341 2350 2362 2368 2417 2420 2437 2440 2491 2496 2498 2504 - 2508 2513 2517 2521 2538 2542 2586 2591 2593 2596 2599 2605 2610 - 2614 2618 2653 2658 2661 2675 2680 2683 2700 2709 2753 2755 2756 - 2768 2776 2778 2790 2808 2820 2832 2844 2864 2869 2899 2903 2921 - 2922 2926 2929 2935 2944 2960 2963 2972 2982 2997 3005 3007 3014 - 3016 3043 3045 3048 3051 3061 3063 3071 3073 3077 3079 3082 3089 - 3091 3093 3100 3104 3116 3124 3126 3130 3133 3148 3151 3156 3171 - 3184 3187 3210 3216 3226 3255 3261 3263 3279 3281 3289 3306 3359 - 3374 3376 3390 3461 3484 3491 3522 3525 3540 3553 3554 3555 3571 - 3585 3595 3610 3611 3629 3642 3653 3666 3690 3704 3712 3724 3731 - 3745 3748 3756 3757 3761 3762 3766 3770 3771 3776 3779 3785 3799 - 3800 3805 3890 3900 3925 3947 3978 3993 3996 4004 4006 4015 4022 - 4031 4043 4060 4063 4068 4073 4078 4087 4178 4232 4237 4245 4247 - 4249 4253 4255 4264 4265 4267 4269 4271 4281 4289 4296 4298 4306 - 4324 4384 4394 4401 4405 4424 4439 4448 4449 4451 4458 4461 4514 - 4562 4564 4619 4624 4655 4668 4675 4691 4696 4716 4717 4718 4732 - 4761 4775 4816 4825 4836 4860 4875 4908 4927 4945 4947 4948 4950 - 4960 4966 4979 4985 5000 5012 5017 5022 5032 5103 5128 5143 5161 - 5163 5194 5199 5224 5225 5245 5250 5252 5311 5418 5426 5427 5444 - 5448 5450 5452 5473 5488 5490 5492 5493 5495 5502 5504 5506 5528 - 5531 5534 5538 5545 5549 5564 5565 5581 5583 5597 5606 5607 5621 - 5622 5633 5648 5652 5669 5670 5672 5691 5701 5726 5728 5729 5747 - 5755 5789 5797 5824 5825 5887 5891 6014 6017 6032 6050 6052 6066 - 6093 6122 6128 6136 6141 6147 6155 6164 6167 6176 6187 6188 6193 - 6200 6211 6215 6221 6223 6246 6254 6338 6343 6352 6355 6382 6385 - 6417 6427 6430 6431 6437 6438 6446 6461 6462 6467 6469 6476 6477 - 6481 6482 6503 6510 -ACK 016605 1972 6399# -ACK.EN 016602 6379 6397# -ACTION 016636 6320 6323 6416# -ADATP 015607 2502 2594 3702 3723 4766 5986# -ADATT 015602 2414 2431 5981# -ALT = 000033 94# 6322 6404 6413 -AM.AI 020205 2500 2545 6717# -APTANS 020261 6232 6245 6418 6742# -APT.WT 016322 6245# 6247 -ARBRES= 000020 60# 2423 2444 2524 2621 -ARG = 000000 5067# 5072# 5074# 5078# 6524# 6525# 6526# 6528# 6531# 6532# 6534# 6535# 6536# - 6537# 6540# 6542# 6544# 6545# 6546# 6547# 6548# 6549# 6550# 6552# 6555# 6573# - 6574# 6575# 6576# 6578# 6580# 6583# 6584# 6585# 6586# 6587# 6589# 6590# 6591# - 6592# 6593# 6594# 6595# 6597# 6599# 6602# 6604# 6610# 6611# 6613# 6614# 6615# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-225 -END.M80 CROSS REFERENCE TABLE - - 6616# -ARGBEG 014656 5532 5535# -ARGBG1 014657 5529 5536# -ARGQQ 014766 5589# 5600 -ARG1 = 000000 5067# 5072# 5074# 5078# 6524# 6525# 6526# 6528# 6531# 6532# 6534# 6535# 6536# - 6537# 6540# 6542# 6544# 6545# 6546# 6547# 6548# 6549# 6550# 6552# 6555# 6573# - 6574# 6575# 6576# 6578# 6580# 6583# 6584# 6585# 6586# 6587# 6589# 6590# 6591# - 6592# 6593# 6594# 6595# 6597# 6599# 6602# 6604# 6610# 6611# 6613# 6614# 6615# - 6616# -ARG16. 014257 2751 2765 2787 2830 2862 2897 2920 2942 3024 3034 3401 3482 3607 - 3754 3991 4334 5278# -ARG96 014642 3350 5528# -ARROW = 000076 112# -AUTOMS 017765 910 6659# -A.BTER 015214 4020 4182 4208 4403 5714# -A.CRMO 013241 4872 4919# -A.CRMZ 013253 4924# -A0003 = 000113 49# 2004 2123 2322 2505 2597 3085 6004 -A0411 = 000111 48# 3084 6000 -A1219 = 000107 47# 1998 2115 2316 3083 5996 -A16PK 014765 5587# 5603 -A2027 = 000105 46# 1997 2114 2315 3046 3080 4248 5992 -A256 000224 710# 719 724 -A2835 = 000103 45# 1995 2112 2313 3044 3078 4246 5988 -B =%000000 607 651 673 680 706 713 746 750 753 760 766 769 774 - 950 952 1076 1099 1266 1656 1666 1668 1673 1680 1689 1698 1706 - 1722 1799 1803 1807 1819 1886 1929 1938 1945 1954 1956 1959 2048 - 2054 2083 2101 2104 2146 2224 2234 2243 2249 2260 2358 2365 2379 - 2390 2498 2504 2593 2596 2869 2875 2903 3125 3139 3143 3149 3150 - 3152 3153 3169 3189 3312 3315 3377 3378 3389 3597 3651 3662 3684 - 3694 4353 4354 4363 4435 4443 4446 4469 4470 4509 4529 4544 4569 - 4571 4609 4616 4672 4673 4695 4701 4703 4706 4707 4720 4722 4726 - 4730 4740 4742 4743 4745 4750 4752 4756 4774 4780 4783 4785 4787 - 4796 4797 4798 4802 4803 4819 4820 4834 4841 4950 4958 4973 4976 - 4980 4984 5032 5036 5141 5153 5216 5231 5233 5288 5302 5319 5327 - 5330 5335 5344 5358 5364 5368 5375 5405 5412 5420 5423 5428 5446 - 5476 5477 5513 5520 5543 5586 5598 5602 5613 5629 5633 5641 5744 - 5752 5764 5778 5814 5818 5828 5831 5847 5850 5869 6093 6112 6133 - 6192 6193 6210 6221 6264 6270 6272 6452 6461 6462 6469 -BBLOOP 011616 4278 4295# -BB1 017646 5699 6645# -BCA.ER 013404 4826 4984# -BCB.ER 013411 4982 4987# -BCCMD 012773 1570 4809# -BCC.ER 013371 4974 4978# -BC.ALP 013017 4820# 4838 4851 -BC.BER 013365 4962 4975# -BC.BLP 013100 4858# 4862 -BC.BL1 013114 4866# 4877 -BC.CER 013355 4895 4904 4972# -BC.CLP 013166 4891# 4911 -BC.DB2 013070 4847 4852# -BC.2ND 013075 4842 4857# -BC.3RD 013147 4881# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-226 -END.M80 CROSS REFERENCE TABLE - -BELL = 000007 89# 2197 -BFCNT 020161 1810 1814 1848 1852 2191 6705# -BFOVR 002001 1355# 1813 -BFRST 004163 697 924 1758 1908 2186# 3931 6265 -BIT15 = 100000 66# 1484 1486 1488 1490 1493 1495 1497 1501 1504 1508 1510 1512 - 1515 1526 1574 1608 -BLKADR 020112 4170 4198 6543 6685# -BLKNUM 020105 4172 4179 4200 6541 6684# -BLKRDR 011365 4188 4197# -BOOT 010644 988 3945# -BOOTSW= 000301 19# 892 984 993 1871 2302 -BPI16 = 002000 57# -BPI8 = 001000 58# -BREAK 014204 3219 5097 5244# -BRKDT 020152 3208 3218 6700# -BRKON 020151 3211 3215 3229 6699# -BSLASH= 000134 108# 1458 -BTAUT 010647 911 3946# -BTCHOI 010741 3951 3974 3989# -BTCMD 010657 1567 3951# -BTERR1 015221 5717# 5730 -BTFAIL 017533 5719 6633# -BTINT 011430 4109 4164 4216# -BTMSG1 017540 3945 6634# -BTMSK 020202 5401 5435 6714# -BTNUM 020203 5443 6715# -BT.BIT= 000001 67# 4232 4314 4394 -BT.GO 010762 865 3983 4000# 4026 4104 -BT.GO1 010770 1209 4002# -BT.SRC 010662 3952# 4386 -BT.TYP 020121 4233 4313 4413 6688# -BUFBG 020514 2186 6266 6766# -BUFEN 020646 6767# -BUF. 020215 1784 1797 1855 2187 3932 6722# -BUSAD 020042 2412 2415 2435 2464 2474 4815 4817 4829 4848 6677# -BUSARB= 000115 38# 2008 2127 2326 2418 2509 2600 3049 3087 3725 -BUSCTL= 000210 31# 2020 2134 2338 2351 2369 2421 2442 2519 2539 2616 3052 3090 - 3105 3117 6504 6511 -BUSRES 015256 2423 2444 2448 2524 2527 2531 2621 2625 5735# -BV 017421 1355 6620# -BYTCNT 020006 6669# -B.BTER 015212 4189 5712# -B2CMD 012004 1610 4384# -C =%000001 665 668 705 710 749 764 767 882 901 947 960 2172 2177 - 3171 3184 3187 3355 3368 3680 3683 3698 4263 4272 4617 4700 4705 - 4757 4835 4836 4850 4926 4927 4930 4947 4985 5194 5199 5294 5297 - 5407 5441 5501 5509 5553 5570 5595 5606 5621 5626 5634 5867 6352 - 6357 6358 6359 6363 6375 6378 -CADWR 006340 3071# 3422 4236 4288 4429 4866 4923 5183 -CARRIE= 000302 20# 977 -CARRLO= 000003 74# 6176 -CCHR = 000103 103# 2182 2471 -CECMD 005737 1519 2860# -CEDIS 005770 2860 2881# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-227 -END.M80 CROSS REFERENCE TABLE - -CHCMD 006247 1541 1642 3013# -CHECKS 002601 743 765 1629# -CHKADD 016177 6192# 6216 -CHKBIT 012757 4721 4744 4751 4795# -CHKERR 000356 780 792# -CHKHLT 020231 1012 1025 3451 3573 6728# -CHKHOM 011405 4174 4181 4207# -CHKKA 001313 1017 1123 1129# -CHKPAR 020166 997 1003 5044 6710# -CHKREF 020167 1034 1043 5759 6711# -CHKSM0= 117755 166# 509# 1629 -CHKSM1= 144633 167# 510# 1630 -CHKSM2= 160054 168# 511# 1631 -CHKSM3= 004326 169# 512# 1632 -CHKSTK 015013 5599 5606# -CHNXCT 012436 4319 4579 4608# 5113 5134 5170 5188 5212 -CHOOSE 005775 2883# 2912 2936 2955 3630 -CHRBUF 020035 1992 2010 2310 2328 6676# -CHRCNT 020214 5536 5620 6721# -CHRRDY 003643 1117 2033# -CLEAN 015020 5539 5612# -CLKCTL= 000206 30# 2779 3008 3017 5013 -CLRBYT 015146 584 5690# -CLRLP 000111 627# 632 -CLRRN 015302 3013 5061 5752# -CLRT1 015646 6015# 6018 -CLRUSE 003352 1880 1895# 3428 3538 5045 5760 -CMCNT 020225 1771 1838 1842 1862 6726# -CMDDI 012577 4645 4695# -CMDEI 012521 4647 4655# -CMDEN 012715 4650 4765# -CMDERC 012675 4649 4750# -CMDGO 001671 1280 1297# -CMDGO9 001711 1304 1312# -CMDLI 012525 4646 4659# -CMDLI1 012526 4656 4660# -CMDLST 002210 1078 1480# -CMDNG 017426 1105 2264 6621# -CMDS.. 020131 1282 2190 3813 6695# -CMDTWA 012657 4651 4740# -CMDUBA 012561 4652 4685# -CMDWAI 012626 4648 4715# -CMD.. 020221 4013 4096 4101 6724# -CMNBUF 002777 1703 1720# -CMPLP 015443 5847# 5853 -CMP36 015433 849 2463 3294 4211 4892 4901 5841# -CNBCK = 000034 88# 1775 1867 1903 2288 -CNTC 004151 1762 2180# -CNTLC = 000003 101# 1761 -CNTLO = 000017 100# 1726 -CNTLQ = 000021 99# 1740 -CNTLQ. 020260 6466 6741# -CNTLS = 000023 98# 1737 -CNTLU = 000025 97# 1751 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-228 -END.M80 CROSS REFERENCE TABLE - -CNTLY = 000031 96# 1682 1710 -CNTLZ = 000032 95# 1748 -CNTS 003545 1738 1976# -CNTSL 003556 1985# 1988 -CNTZ 003371 1749 1907# -COCMD 007604 1239 1530 3570# -COINT 007613 3573# 3600 -COLLEC 016433 6306 6319# -COL.LP 016457 6336# -COMMA = 000054 87# 1767 1859 5353 5354 5793 6276 -CONT.I 014172 5226 5236# -CPCMD 005565 1543 2763# -CPMLT 005573 2768# 2774 -CPUCTL= 000212 32# 640 1641 2998 3526 3572 3586 -CP1 005605 2763 2772 2776# 3240 3253 3688 4431 4868 -CRCHR = 000015 85# 1386 1472 1778 2220 6212 6325 -CRLFIN 002203 1466 1472# -CRMAD 020004 2853 3068 3337 3339 3345 3347 4419 4422 4430 4539 6668# -CRMBF 020302 3125 3353 3372 4436 4937 4938 4939 4941 4942 4943 4952 4966 6748# -CRMCTL= 000204 28# 1646 2777 3006 3015 3062 3064 3072 3074 3092 3094 5104 -CRMFN 020010 3026 3054 3377 3705 4238 4258 4276 4282 4300 4928 6670# -CRMTM 020322 3351 3354 6749# -CRM.AD 006335 3040 3068# 3252 3371 3687 3692 -CSCMD 006234 1539 3004# 3424 5237 -CSLMOD 020247 1053 1371 1397 1701 1946 2049 2093 2171 3622 6103 6160 6168 6732# -CTYCTL= 000201 33# 677 689 1392 1665 2087 2163 -CTYDAT= 000200 34# 694 1407 1411 1696 2105 -CTYONL 003741 2046 2075# -CTYOUT 004015 2095 2104# -CTYPCH 003764 2087# 2088 -C.BTER 015210 862 3955 4320 4328 4392 5178 5710# -C80AD 020002 2698 2703 2708 2715 2717 2738 2743 2745 2754 6667# -D =%000002 557 608 625 629 631 662 669 670 682 708 809 810 817 - 1078 1084 1087 1096 1097 1098 1148 1152 1202 1247 1256 1271 1287 - 1437 1438 1818 1883 1884 1885 2241 2245 2253 2357 2360 2363 2378 - 2494 2535 2565 2566 2569 2589 2634 2635 2639 2656 2678 3100 3102 - 3140 3142 3218 3353 3382 3414 3518 3560 3650 3659 3660 3693 3696 - 3700 3722 3789 3885 3895 3975 4162 4163 4165 4166 4338 4339 4348 - 4355 4364 4436 4449 4451 4453 4454 4462 4465 4508 4530 4536 4573 - 4610 4613 4614 4626 4630 4632 4633 4685 4686 4708 4717 4727 4729 - 4731 4733 4765 4773 4782 4784 4786 4788 4955 5096 5142 5152 5169 - 5171 5176 5217 5244 5247 5254 5257 5258 5270 5289 5301 5320 5334 - 5345 5357 5376 5399 5416 5417 5427 5430 5444 5456 5485 5519 5569 - 5573 5575 5576 5577 5589 5623 5625 5636 5637 5649 5651 5654 5655 - 5667 5676 5678 5813 5819 5829 5830 5845 5852 5874 5916 5919 5920 - 5923 5924 5927 5928 5931 5932 5936 5937 5952 5953 5955 5957 5959 - 5961 5963 5965 5967 5969 5971 5986 5987 5989 5991 5993 5995 5997 - 5999 6001 6003 6005 6065 6071 6236 6266 6271 6273 6445 -DATACK= 000001 61# 2448 2531 -DBCMD 004641 1499 2409# 4821 -DBCOM 004773 2456 2472# -DBERR 004771 2427 2471# -DBRDIN 004754 2426 2451 2460# -DB1 004652 2410 2414# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-229 -END.M80 CROSS REFERENCE TABLE - -DCCMD 007120 1486 3349# -DCHR = 000104 104# 2455 -DCLP 007201 3378# 3391 -DCODE 001222 940 1075# 1346 4360 6391 -DCODL 001240 1084# 1100 -DECEX1 016336 6252# 6388 -DECEX2 016336 2987 6253# -DECNET 016205 1058 2372 2375 2393 3141 4570 5703 6199# 6394 -DEFLTE= 000174 64# 802 826 4004 -DELAY. 015676 2968 3426 6048# -DEN.SL 020362 3901 3909 4071 6579 6761# -DEPSHT 014232 1963 3553 3554 3555 3595 4063 4068 4073 5265# 6188 -DEV 000315 736 764# -DEVERR 012703 4737 4747 4756# -DEVEXI 012725 4762 4769# -DEVLP 000265 745# 758 -DFCMD 006271 1510 3032# -DIAG = 000205 29# 1654 2038 3055 3103 4008 -DICMD 005413 1495 2672# -DIECNT 020257 1168 1215 1227 6740# -DIEING 001530 1165 1215# -DIFLAG 020164 2609 2619 2681 6708# -DILOCL 012614 4697 4708# -DI.LP 014133 5217# 5234 -DI1 005417 2675# 4710 5208 5232 -DKCMD 005547 1501 2751# -DLIST 015132 5665 5682# -DLYLP 015702 6052# 6055 -DMCMD 005225 1488 2583# -DMCONT 005277 2611 2616# -DMDAT 020047 1922 2584 2603 2673 3412 3551 3593 3715 4056 4057 4067 4072 4708 - 4885 5207 5217 6184 6678# -DMEM2C 011456 863 3957 4232# 5180 -DMGO 005275 2614# 3727 -DMINT 005240 2591# 3415 5274 -DM1 005231 2586# 3718 -DM2 005235 2589# 4898 -DNCMD 005324 1484 2633# -DNDC 007111 2646 3345# -DNDI 005410 2644 2671# -DNDK 005540 2645 2743# -DNDM 005220 2581# 2643 -DNEXT 020033 2587 2633 2676 2757 3375 6675# -DNF 007501 2999 3528# 3580 -DNLST 005340 2634 2643# -DN2ND 005242 2593# 2684 -DOLLAH= 000044 109# 6319 -DONE.B 016776 6478 6483 6490# -DRCMD 005711 1585 2839# -DRCVD 017475 2477 6628# -DSBASE 020374 3839 4227 6763# -DSCMD 010337 1589 3823# -DSCON 012442 4613# 4642 -DSKDFT 011441 4167 4223# 5127 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-230 -END.M80 CROSS REFERENCE TABLE - -DSKSEQ 017052 4578 6519# -DSKUBA 020357 3831 4223 6758# -DSLST 012501 4625 4645# -DSXFR 012402 4202 4207 4578# -DS1 010360 3825 3833# -DS2 010377 3835 3841# -DTARB = 000114 37# 2016 2130 2334 2606 3523 -DTIME 001423 1125 1179# -DTM1 001427 1177 1181# -DTR = 000101 25# 841 6175 -D.BTER 015206 4001 5708# -D0003 = 000103 44# 5933 -D0411 = 000003 43# 5929 -D1219 = 000002 42# 5925 -D2027 = 000001 41# 3111 5921 -D2835 = 000000 40# 3107 5917 -D772 = 000772 151# 6575 6578 6580 6583 6585 6587 6589 6591 6593 6595 6597 6599 - 6602 6604 6610 6613 6615 -D776 = 000776 150# 5072 5074 5078 6526 6528 6531 6534 6537 6540 6542 6544 6546 - 6548 6550 6552 6555 -E =%000003 555 630 655 681 707 1150 1155 1269 1289 2567 2637 3126 3133 - 3155 3156 3380 3791 3977 3978 4447 4448 4624 4628 4718 4732 4953 - 5428 5429 5446 5454 5488 5501 5568 5674 5872 -EBCMD 004514 846 1554 2350# -EBHED 017441 2371 6624# -EB.RDI 004535 2360# 2366 -EB1 004601 2381# 2391 -ECBEE 006764 3264 3279# 3298 -ECCMD 006700 1552 3246# -ECLP 006732 3261# 3276 -ECSAV 020170 3268 3275 6712# -ECVER 017504 3301 6629# -EC1 006710 3250# 3340 -EC2 006722 3247 3255# -EICMD 005350 1550 2649# -EIFLAG 020163 2512 2522 2659 6707# -EIGHT = 000070 123# -EIGHT0 010562 3885 3911# -EI1 005360 879 2650 2653# 2667 4680 4728 4741 5136 -EJCMD 006523 1556 3167# 3241 -EJLP 006533 3171# 3190 -EJLST 006570 3168 3196# -EJ1 006536 3174# -EKCMD 005454 1506 2694# -EK1 005463 2694 2700# 2718 -EMBUF 020012 850 905 1138 1163 1957 2044 2070 2078 2082 2353 2535 3449 3516 - 3518 4197 4199 4213 4252 4261 4295 4353 4445 4484 4561 4795 4893 - 4902 5153 5342 6671# -EMCMD 005025 1548 2488# -EMCONT 005075 2514 2519# -EMINT 005042 2496# 5272 -EM.CRM 005056 2505# 4250 -EM1 005033 845 2488 2491# 2559 -EM2 005037 2494# 4525 4891 4900 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-231 -END.M80 CROSS REFERENCE TABLE - -ENACOM 005761 2875# 2907 -ENCMD 005174 1545 2564# -ENDIN 003212 1663 1817# -END.US 003310 1871# 2293 -ENEC 007077 2576 3337# -ENEI 005402 2574 2666# -ENEK 005507 2575 2715# -ENEM 005164 2557# 2573 -ENEXT 020031 2492 2564 2654 2701 3256 6674# -ENLST 005210 2565 2573# -ENVBUF 021013 825 6209 6238 6256 6772# -ENVCHK 021012 6230 6771# -ENVMNO 021011 2984 6204 6207 6236 6386 6770# -ENVPNT 020352 1380 1384 6257 6754# -ENV.LP 016516 6361# 6364 -EN2ND 005044 2498# 2662 -EOCML 015355 1299 3941 5560 5786# 6076 -EOL 020204 915 1067 1337 1840 3929 6267 6716# -EOLCH = 000377 59# 3654 3667 5790 6280 6371 -EOLYS 015377 5791 5794 5803# -EOL.LK 001203 1055 1063# -EOMRK 003231 1776 1779 1782 1836# -ERADDR 020123 2791 2792 2833 2843 6690# -ERCMD 005616 1581 2785# -ERRCD 020154 916 917 1345 3730 4079 4759 4811 4812 4824 4978 4981 4986 4989 - 5717 5720 6500 6701# -ERRMSG 017601 4988 6639# -ERRRTN 017016 2483 6500# 6508 6515 -ER.LOC 020070 2806 2809 2811 6681# -ER.UTL 005670 2361 2799 2819# 5023 -ER1 005630 2785 2792# -EXAMSH 014231 1134 1233 1919 2042 2076 3440 3456 4183 4210 5264# -EXCMD 007457 1574 3515# -EXECUT 016502 6326 6351# -EXINT 007466 3520# 3561 -EXINTM 007463 1238 3518# -EXIT4 010751 3994# 3997 -EXMHL 014240 4194 5269# -EXMS 017525 3537 6632# -EXM1 020117 6686# -E.BEG 020651 4348 6153 6264 6354 6376 6769# -E.BUF 020647 6154 6336 6339 6416 6768# -E.CNT 020301 6152 6341 6351 6747# -FAKLIT 001411 1122 1173# -FICMD 011716 1608 4334# -FILEIN 011301 1203 3979 4163# 4340 -FILESH 011306 4166# 5177 -FINARG 015071 5635 5644# -FIRST 020227 1079 1351 2188 6727# -FIVE = 000005 120# -FIXLP 015064 5640# 5642 -FIXPNT 015065 5627 5641# -FI.GET 011744 4349# 4367 -FI.MOV 011756 4354# 4366 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-232 -END.M80 CROSS REFERENCE TABLE - -FI.NXT 011773 4357 4363# -FNDARG 010633 1080 3939# -FOUR = 000004 119# -FRCMSG 017736 1189 6653# -FREE 021377 6781# -FRELOA 001435 1140 1188# -FRMERR 017341 4078 6601# -FXNXT 001771 1344 1349# -GATHER 012245 4350 4438 4508# -GENLP 007137 3358# 3369 -GETEN 014720 5548 5558# -GETLP 014677 5545# 5555 -GOCODE 020255 870 1191 1237 1921 1964 3948 6738# -GOODPK 011345 4175 4183# -G.SKP 012274 4516 4525# -H =%000004 533 542 543 545 556 558 568 570 581 583 594 595 597 - 609 624 628 652 659 666 667 675 703 711 722 727 735 - 743 755 765 768 770 776 779 808 816 877 883 920 922 - 940 953 955 975 976 980 1036 1038 1057 1059 1129 1162 1180 - 1183 1206 1208 1215 1246 1252 1257 1270 1272 1273 1288 1290 1307 - 1312 1314 1324 1326 1327 1331 1337 1346 1350 1379 1382 1385 1420 - 1456 1471 1663 1664 1771 1796 1815 1817 1854 1862 1882 1912 1922 - 1939 1940 1961 1976 2171 2174 2176 2186 2208 2213 2235 2242 2254 - 2265 2356 2364 2377 2382 2387 2474 2479 2482 2568 2638 2703 2716 - 2744 2769 2773 2819 2820 2824 2844 2967 2971 2973 3039 3041 3045 - 3079 3148 3168 3178 3182 3259 3262 3270 3280 3290 3293 3297 3338 - 3346 3354 3364 3365 3366 3372 3381 3383 3405 3449 3557 3564 3661 - 3673 3756 3790 3792 3795 3796 3799 3805 3814 3816 3884 3891 3894 - 3929 3935 4053 4057 4062 4064 4066 4079 4093 4094 4169 4171 4192 - 4234 4235 4247 4253 4255 4258 4265 4267 4276 4285 4286 4287 4289 - 4292 4296 4298 4300 4304 4306 4318 4418 4423 4424 4458 4461 4463 - 4480 4484 4512 4514 4521 4522 4523 4526 4527 4535 4539 4553 4562 - 4564 4574 4578 4582 4586 4589 4611 4616 4618 4625 4629 4640 4641 - 4665 4670 4671 4688 4701 4702 4704 4756 4770 4771 4772 4779 4789 - 4804 4829 4857 4859 4860 4865 4867 4870 4873 4874 4875 4907 4908 - 4919 4920 4924 4925 4932 4948 4952 4954 4956 4959 4961 4975 4977 - 4979 4989 4997 5021 5112 5124 5133 5150 5151 5160 5166 5167 5168 - 5187 5195 5211 5214 5215 5219 5229 5230 5250 5252 5259 5287 5303 - 5309 5310 5317 5321 5333 5342 5346 5356 5363 5377 5406 5408 5411 - 5414 5419 5425 5434 5453 5481 5486 5493 5495 5497 5499 5500 5507 - 5517 5518 5535 5554 5566 5569 5574 5579 5584 5614 5624 5640 5650 - 5656 5665 5670 5672 5675 5690 5693 5720 5725 5739 5775 5786 5799 - 5804 5811 5851 5868 5870 5873 5875 5893 6009 6015 6030 6031 6051 - 6072 6079 6129 6137 6142 6153 6156 6166 6178 6186 6194 6209 6219 - 6256 6267 6295 6306 6337 6341 6354 6356 6362 6374 6389 6430 6437 - 6441 6444 6446 6453 6458 6476 6485 6491 6499 6507 6513 -HACMD 007627 1196 1231 1528 3585# -HANGUP 016134 979 2061 2281 6135 6173# -HLSAVE 020217 5410 5462 6723# -HLTCM 007277 1015 3426# 3587 -HLTMS 017516 3448 6631# -HOMEWD 011264 4120# 4212 -HRDERR 013527 5018 5026 5044# 5098 -INBUF 010605 3878 3919 3929# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-233 -END.M80 CROSS REFERENCE TABLE - -INCLP 015476 5890# 5894 -INC36 015466 2557 2581 2686 2688 3719 5881# -INDIRE= 000077 3944# -INFOBT 010733 1210 3985# -INIER 017413 856 6619# -INIMS 002611 843 1635# -INRDY 010630 3935 3938# -INTCH 002741 1675 1696# 2156 2168 -INTON 000020 542# -INTRP 002666 611 1663# -INT2KS= 000116 39# 2024 2025 2139 2140 2342 2343 -IOAD 020024 876 2656 2678 2687 2689 2730 4663 4665 4685 5220 5223 6673# -IORGS 004631 2357 2377 2397# -IOUT 003330 1883# 1913 -IO.INC 005441 2666 2671 2686# -KACNTR 020250 1162 6733# -KAMSG 017731 1228 6652# -KATIMX= 000043 14# 1218 -KATIM1 020342 808 1130 1173 1179 1181 6750# -KCHR 002117 1418# 1902 2275 2276 6233 6234 -KCHR0 002123 1422# 1444 1707 6468 -KCHR1 002124 1423# 1425 -KILNM 015163 3758 3897 5561 5699# -KLCMD 007665 1578 3604# -KLDIS 007720 3604 3628# -KLINE 002137 1433# 2199 2207 2264 6399 6407 -KLINE1 002144 1437# 1445 6237 -KLIRST 004374 2269 2281# -KLLINE 020300 2297 3615 3617 3628 6746# -KLNKLT 015740 954 6093# -KLNKSW 020124 951 1713 1909 2959 3643 6094 6691# -KLOFF 007704 3612 3617# -KLPCHR 003720 2056 2066# 2067 -KLTOO 004003 2098# 2099 -KL.ACT= 000002 75# 6164 -KL.DSP 002735 1683 1692# -KL.LAM 015770 6115# 6134 -KL.LON 015766 6112# 6125 -KL3435 004435 2289 2309# -KPAINI= 003244 13# 820 1129 -KPWBUF 020271 2208 2242 6744# -KPWCNT 020127 2211 2227 2231 2259 6693# -KPWPNT 020125 2209 2233 2236 6692# -KSPRMT 017453 936 3575 3634 6625# -KS.PAR 005762 2876# 3496 4005 -L =%000005 658 674 717 775 1174 1176 1182 2753 2768 2790 2821 2832 2842 - 2864 2899 2921 2944 2972 3043 3077 3151 3484 3491 3494 3610 3761 - 4245 4269 4271 4352 4365 4455 4617 4700 4757 4799 4945 4960 4967 - 5255 5491 5492 5568 5668 5669 5691 6447 -LACMD 005521 1493 2489 2721# 3545 -LBCMD 010707 1572 3974# -LBINT 010712 3965 3975# -LBSIGN= 000043 92# -LB.GO 010673 3965# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-234 -END.M80 CROSS REFERENCE TABLE - -LB.GO1 010676 1212 3966# 4027 -LCCMD 005732 1490 2852# 3248 3686 -LCHKR 000217 704# 785 -LFCHR = 000012 86# 1473 1781 6463 -LFCMD 006262 1508 3024# -LICMD 005526 1497 2651 2729# -LIGHTS= 000101 24# 1157 2961 2964 5780 -LIVE10 001267 1049 1114# -LKCMD 005533 1504 2737# -LOAD4 010755 3989 3996# -LRCMD 005701 1583 2830# -LSTMSG 020361 2983 6374 6760# -LTCMD 006135 1576 2959# -LTDLY 006151 2962 2967# -LTFLT 015326 5062 5716 5763# -LTLOOP 006154 884 976 1208 2968# 2974 3564 5021 6179 -L.BTER 015242 1204 3981 4039 4048 4341 5725# -M =%000006 532 544 555 557 567 580 596 627 710 747 767 769 815 - 867 878 1089 1164 1167 1216 1217 1248 1269 1271 1287 1289 1293 - 1328 1330 1338 1340 1381 1383 1419 1455 1772 1795 1857 1863 1923 - 1941 1962 1977 1982 1985 2172 2173 2177 2234 2250 2266 2267 2362 - 2567 2569 2637 2639 2709 2755 3261 3279 3289 3380 3382 3653 3666 - 3674 3770 3789 3791 3930 4059 4060 4065 4080 4088 4259 4277 4301 - 4481 4619 4628 4630 4667 4668 4674 4675 4690 4691 4703 4705 4953 - 4955 5161 5222 5224 5311 5405 5407 5418 5436 5450 5452 5477 5504 - 5506 5545 5549 5565 5581 5583 5613 5622 5648 5652 5674 5676 5692 - 5727 5728 5738 5774 5789 5848 5867 5869 5872 5874 5890 5891 6016 - 6032 6050 6069 6187 6211 6220 6268 6284 6338 6342 6343 6355 6361 - 6371 6375 6382 6417 6452 6454 6481 -MAD000 007404 851 2432 3414 3468# 4765 -MAILFG 020252 1388 6151 6199 6255 6735# -MA1000 011257 3967 4119# 4240 4345 4416 4888 -MBCMD 011222 1595 4101# -MBINT 011050 4025 4031# 4103 -MEMAD 020017 2494 2558 2582 2589 2723 3547 3711 3713 3720 3722 4241 4244 4303 - 4305 4346 4417 4511 4524 4528 4889 4906 4910 4972 6672# -MEM2CR 011460 4023 4233# -MICROP 011276 861 3952 4162# 4391 -MISS2 001252 1096# 1253 -MKCMD 010025 1512 3683# -MMCMD 006167 1612 2981# 5704 -MMERR 015166 1107 4991 5007 5700# -MMERR1 015200 1688 5704# 6240 6243 -MMFLG 020251 931 1686 1714 1896 1931 2291 2985 5700 6734# -MMOUT 016650 6293 6427# -MM.PNT 016744 6464 6469# -MODDIS 020346 1692 2214 6169 6307 6752# -MODE0 004203 823 2197# 6137 -MODE1 004214 2207# 2271 6129 -MODE2 004405 2288# 6166 -MODE3 002777 1719# 6142 -MODE4 016407 6156 6291# -MORE. 016727 6462# 6487 -MOSMSG 017573 5761 6638# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-235 -END.M80 CROSS REFERENCE TABLE - -MOVLP 015036 5622# 5630 -MOVREG 015420 5154 5218 5817 5824# -MOV18B 012736 4687 4709 4779# -MOV18X 012746 4785# 4790 -MRCMD 002631 1537 1639# 3408 4219 4809 -MRINT 002637 643 1645# -MRKCM 010027 3681 3684# -MRKRT 010063 3700# -MSCMD 010415 1591 3852# -MSG10 017462 2472 6627# -MS1 010436 3854 3862# -MS1.5 010455 3864 3869# -MS2 010474 3871 3877# -MS2.5 010541 3892 3901# -MS3 010544 3880 3903# -MTARST 017363 4589 6610# -MTASEQ 017215 4582 6573# -MTAUBA 020356 3860 4110 6757# -MTBASE 020367 3868 4114 6762# -MTCH1 001603 1090 1246# -MTCH2 001615 1249 1256# -MTCMD 011006 1587 4013# -MTRESE 012430 4082 4589# -MTSETU 011237 4014 4102 4109# 4400 -MTSKOK 011066 4036 4043# -MTXFR 012411 4016 4032 4402 4582# -MT.BIT= 000002 68# 4022 4405 -MT.1 011032 4017 4022# -MV.ALL 016351 4359 6264# 6384 -MV.CNT 016405 6277 6284# -MV.INP 016357 6266# -MV.IN1 016367 6270# 6281 -M.ACK 016613 6399 6401# -M.NACK 016631 6407 6410# -M11 003116 1768 1775# -M4.0 016407 6292# -M4.1 016422 6295 6302# -M5B 015422 5144 5825# 5826 -NACK 016623 6407# -NACK.E 016620 6345 6368 6406# -NBR 017634 6505 6643# -NEEDRM= ****** U 4813 -NEWPAG 011477 4239# 4310 -NEXTCR 011657 4309 4313# 4519 -NINE = 000071 124# -NIXOM 017036 2528 2626 6510# -NOA 017620 6497 6641# -NOACCS 017751 2199 6655# -NOACK 017010 2449 2532 6497# -NOACTN 004070 2059 2080 2141# -NOARB 017022 2424 2446 2525 2622 6503# -NOECH 003175 1801 1805 1810# -NONFAT 011167 4019 4038 4047 4078# 4327 -NONXME= 000100 62# 2527 2625 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-236 -END.M80 CROSS REFERENCE TABLE - -NOPNT 020120 543 595 919 1188 1226 1364 1732 1734 1879 2541 3129 4987 5011 - 5718 5758 6687# -NORDIS 002004 1343 1356# -NOREFR 015314 1037 5758# -NOREND 020350 923 1356 6390 6753# -NORML 001744 1081 1272 1337# 4093 5698 -NOROOM= ****** U 6619 -NOTBUS 016720 6432 6458# -NOTRK 015007 5596 5602# -NOTSAM 013701 5107# -NR 013524 5040# 5114 -NRSCE 013645 5040 5090# -NUL = 000000 5067# 5072# 5074# 5078# 6524# 6525# 6526# 6528# 6531# 6532# 6534# 6535# 6536# - 6537# 6540# 6542# 6544# 6545# 6546# 6547# 6548# 6549# 6550# 6552# 6555# 6573# - 6574# 6575# 6576# 6578# 6580# 6583# 6584# 6585# 6586# 6587# 6589# 6590# 6591# - 6592# 6593# 6594# 6595# 6597# 6599# 6602# 6604# 6610# 6611# 6613# 6614# 6615# - 6616# -NULKL 003734 2051 2072# -NULLJ 000735 929 933 940# 989 1126 1144 1158 1169 1213 1219 1241 1912 5239 -NULLW 000740 941# 1069 3795 3936 -NXMDC 001261 1086 1105# -NXMMSG 017626 6512 6642# -NX2 001072 995 1002# -NX3 001124 1010 1024# -NX4 001153 1031 1042# -N0 001034 967 972 984# -N0.5 001043 894 988# -N00 001004 962 970# -N1 001051 986 993# 1348 -N2 001076 1000 1008# -N3 001130 1018 1029# -N4 001157 1039 1047# -OCHR = 000117 114# 1731 -OCTAL 014445 3271 5291 5323 5347 5378 5399# -OCTLC 014515 5434# 5459 -OCTL1 014471 5416# 5421 -OCTL3 014537 5446# 5457 -OCTL4 014544 5450# 5455 -OCTL5 014563 5442 5462# -OCTSV 020233 5431 5447 6729# -OFFMSG 017554 2884 6636# -OFFSET= 000261 915# 916# 917# 918# 919# 981# 1168# 1188# 1226# 1227# 1345# 1713# 1714# - 1744# 1879# 1895# 1909# 1964# 2189# 2190# 2191# 2211# 2277# 2959# 3214# 3229# - 3451# 4217# 4218# 4811# 4812# 4987# 5011# 5044# 5718# 5758# 5759# 6232# -OKDN 016576 6389 6393# -OKSCE 013656 5091# 5123 -ONE = 000001 116# -ONES 011271 3411 4121# 4884 4903 -PADLP 015053 5634# 5638 -PARBT 020354 1943 2870 2876 2881 2904 2910 3417 3464 3492 3500 4217 6755# -PARDIS 007440 3480 3500# -PARMSG 017561 5046 6637# -PASSME 011104 4045 4050# -PASSSR 011107 3986 4053# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-237 -END.M80 CROSS REFERENCE TABLE - -PASSWO 020262 2241 3650 3672 6121 6743# -PASS1 = ****** U 1619 -PASS2 = 000000 1628 -PCCOM 007356 3000 3455# -PCHR 002010 535 797 1363# 1465 1808 1858 3314 5296 5329 5366 -PCHROV 002113 1399 1410# -PCHR0 002022 1366 1371# -PCHR1 002057 1373 1392# 1394 -PCHR1Z 002056 1391# 6471 -PCHR2 002076 1402# 1404 -PCMSG 017512 3458 6630# -PCRAM 007032 3282 3306# -PCRLP 007046 3313# 3316 -PECMD 007411 1517 3480# -PERCNT= 000045 110# 6242 -PHALF 014415 5351 5355 5363# -PICKUP 010573 3824 3834 3842 3853 3863 3870 3904 3919# -PLACE 015075 3358 3362 5648# -PLNE 002156 559 1452# -PLN1 002160 1455# 1467 3176 -PLN2 002174 1459 1466# -PMCMD 006667 1565 3238# -PNT.ON 006004 2883 2886# -POKE10 004062 2138# 6189 -PRMLST 000421 809 819# -PSW =%000011 606 734 742 762 783 793 1014 1016 1116 1121 1300 1315 1319 - 1332 1363 1368 1378 1391 1405 1410 1422 1427 1820 1887 1933 1966 - 2794 2798 2807 2810 3313 4081 4083 4660 4676 4998 5003 5271 5273 - 5290 5295 5300 5318 5328 5336 5343 5359 5365 5374 5440 5551 5587 - 5666 5679 5763 5767 6029 6041 6049 6053 6054 6056 6183 6185 -PULSE 006671 3222 3240# -PWCMD 007743 1597 3642# -PWLEN 017744 3671 6654# -PWRCHK 000563 853 876# -PWRTRY 020277 2265 2277 6745# -PWRUP 000100 524 618# -PWR.FA 000526 861# 907 -PW.CLR 010010 3646 3672# -PW.END 004325 2247 2259# -PW.ERR 004334 2230 2251 2264# -PW.LOO 007763 3653# 3663 -PW.OK 004356 2261 2274# -PW.OUT 004371 2277# 2283 -PW.SET 007753 3649# -PW.TST 004276 2221 2241# -PW.WAI 004240 2213 2220# -PW.. 004306 2245# 2255 -P.00 = 000000 130# 5072 5078 5081 6534 6548 6550 6555 6585 6595 6604 -P.02 = 000002 131# 5082 6544 6591 -P.04 = 000004 132# 5083 6546 6589 6613 -P.06 = 000006 133# 5084 6540 6583 6593 6615 -P.10 = 000010 134# 5085 6526 6531 6575 6610 -P.12 = 000012 135# 5074 6528 6537 6552 6580 6587 6597 6602 -P.14 = 000014 136# 6599 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-238 -END.M80 CROSS REFERENCE TABLE - -P.16 = 000016 137# -P.20 = 000020 138# -P.22 = 000022 139# -P.24 = 000024 140# -P.26 = 000026 141# -P.30 = 000030 142# -P.32 = 000032 143# 5086 6578 -P.34 = 000034 144# 5087 6542 -P.36 = 000036 145# -P.40 = 000040 146# -P.42 = 000042 147# -P.44 = 000044 148# -P.46 = 000046 149# -P16 014332 2704 4540 4554 4990 5125 5318# 5721 -P16LP 014345 5328# 5331 -P16. 014327 3136 3179 3308 4566 5317# -P18 014431 3450 5374# -P36 014365 2475 2480 2546 5343# -P36L2 014420 5365# 5369 -P36RH 014405 5355# 5382 -P36. 014362 2373 2549 3459 5342# -P8BIT 014267 2381 2386 5287# -P8BITA 014317 2795 3134 3507 4545 5050 5055 5309# -P8BIT1 014270 5288# 5312 -P8CRLF 007451 2710 2802 3507# 5060 -P8LP 014302 5295# 5298 -P8.TMP 020122 5310 6689# -QMXFR 012422 4044 4325 4586# -QPW 017757 2207 6657# -QQLOOP 011547 4265# 4273 -QTXFR 017275 4586 6589# -QUES = 000077 111# 6239 -QUO = 000042 91# -QXFR 017146 4318 6544# -Q.DEN 017712 3877 6650# -Q.OUT = 000000 83# 1764 -Q.RH 017661 3833 3862 6647# -Q.SLV 017722 3903 6651# -Q.TCU 017703 3869 6649# -Q.UBA 017652 3823 3852 6646# -Q.UNIT 017673 3841 6648# -Q.1 = 000000 832# 833# 834# 3468# 4119# 4120# 4121# 4852# 5067# 5072# 5074# 5078# 6524# - 6525# 6526# 6528# 6531# 6532# 6534# 6535# 6536# 6537# 6540# 6542# 6544# 6545# - 6546# 6547# 6548# 6549# 6550# 6552# 6555# 6573# 6574# 6575# 6576# 6578# 6580# - 6583# 6584# 6585# 6586# 6587# 6589# 6590# 6591# 6592# 6593# 6594# 6595# 6597# - 6599# 6602# 6604# 6610# 6611# 6613# 6614# 6615# 6616# -Q.2 = 000000 832# 833# 834# 3468# 4119# 4120# 4121# 4852# 5067# 5072# 5074# 5078# 6524# - 6525# 6526# 6528# 6531# 6532# 6534# 6535# 6536# 6537# 6540# 6542# 6544# 6545# - 6546# 6547# 6548# 6549# 6550# 6552# 6555# 6573# 6574# 6575# 6576# 6578# 6580# - 6583# 6584# 6585# 6586# 6587# 6589# 6590# 6591# 6592# 6593# 6594# 6595# 6597# - 6599# 6602# 6604# 6610# 6611# 6613# 6614# 6615# 6616# -Q.3 = 000377 832# 833# 834# 3468# 4119# 4120# 4121# 4852# -Q.4 = 000007 832# 833# 834# 3468# 4119# 4120# 4121# 4852# -RAG 017642 5697 6644# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-239 -END.M80 CROSS REFERENCE TABLE - -RAMMER 000405 810# 818 -RAMST = 020000 12# 618 624 914 2180 4092 6665 -RAMXCT 005651 2806# 2823 2847 -RAMX1 020054 1606 6679# -RAMX2 020062 6680# -RBOUT = 000177 102# 1785 -RCCMD 006437 1561 3122# -RCINT 006441 3124# 3302 4432 4869 -RCLP 006445 3126# 3158 -RCNOP 006502 3131 3147# -RDATP 015512 2536 5915# -RDATT 015505 2352 2460 5907# -RDLST 007061 3259 3321# -RDYMS 003341 1881 1893# -RD.EXM 011510 4245# 4308 -READC 006402 3100# 3127 3174 3267 3284 3291 3307 3691 5246 -READ.T= 000071 163# 4015 4043 4324 4401 -RECVR 013715 5123# -REFERR= 000101 23# 1029 5033 -REINI 000655 824 857 872 888 914# 922 1200 1716 1882 2183 5063 5702 5705 - 5722 -REMARG 001717 1301 1319# -REMAR1 001742 1322 1332# -REMCTL= 000203 35# 684 692 839 1402 1423 1667 2066 2098 2152 -REMDAT= 000202 36# 695 1406 1428 1678 2071 2102 -RESET = 000100 22# 1649 2877 3419 3465 5129 -RETRY. 017336 4087 6600# -RHBASE 020242 4055 4115 4228 4662 6731# -RHSAVE 021327 5152 5192 5195 5200 5206 5216 6779# -RH.EXE 013627 5078# 5141 5211 -RH.LP 013773 5153# 5172 -RH.TST 013610 5072# 5112 -RM100 020172 2356 2378 3976 3994 4385 5142 5162 5168 6713# -RNCOM 015276 5749# 5756 -RNFLG 020165 4999 5749 6709# -RN. 017606 5006 6640# -ROMMSG 000350 791# 792 -RPAREN= 000051 93# -RPBUFS 020207 3817 5563 5580 5612 5644 6718# -RPCMD 010153 1482 3744# -RPCNTR 020160 3746 3774 3780 6704# -RPEND 020157 886 1747 2189 3214 3225 3749 3765 6703# -RPFOO 010322 3747 3775 3782 3814# -RPGO 010314 3801 3807# -RPINCB 014745 5573# 5608 -RPINI 020401 920 3814 6764# -RPLST 020211 921 1286 1294 1325 3769 3793 3815 6719# -RPNEW 010316 1284 3812# -RPTBFI 020432 3816 6765# -RPTON 020213 918 1063 3751 3786 5537 6720# -RPTPAR 013450 999 5011# -RPTRTN 010215 1065 3765# 3777 3783 -RP.OUT 010262 3767 3785# -RP0 010157 3746# 3763 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-240 -END.M80 CROSS REFERENCE TABLE - -RP1 010200 3744 3754# -RP2 010224 3752 3769# -RP4 010267 3772 3789# -RRARG 015155 1309 5697# -RTNDIS 015110 571 5665# -RUB 003250 1786 1848# -RUNFP = 000300 16# 1008 1192 2993 3429 3531 -R.BUSY= 000102 26# 5029 -R.RESE= 000102 27# -SAVLST 013635 5081# 5150 5214 -SCCMD 006047 1614 2918# -SCDIS 006075 2918 2933# -SCEADR 020344 5096 5107 5124 5182 6751# -SCECOD= 000000 821 822 5015 5064 6751 6777 -SCE.GO 014027 5164 5175# -SC.OFF 021326 2927 2930 2933 5016 6778# -SC.TOF 006067 2923 2929# -SECRET 020256 1198 6739# -SEEPAG 011634 4291 4303# -SEPCHR 015656 1259 3939 5558 6029# -SEPYS 015660 6031# 6034 6038 -SETDIS 016130 6169# 6296 -SETM 016125 6130 6138 6143 6157 6168# -SETM0 016022 6096 6123 6133# -SETM1 016012 2282 6124 6128# -SETM2 016103 1715 1973 2274 3624 3636 6108 6160# -SETM2X 016120 6162 6166# -SETM3 016042 2305 6141# -SETM4 016052 1901 2981 6146# 6329 6387 6397 6406 6419 -SETOUT 017004 6455 6493# -SETRN 015266 3004 3445 5744# -SETUSE 003423 1907 1916# 3570 3596 3633 -SEVEN = 000007 122# -SHCMD 007635 1593 3591# -SHRGO 014571 5475# -SHRTAD 020235 5269 5270 6730# -SHR24 014571 3360 5474# -SHR36 014567 4485 4830 5196 5201 5473# 5592 -SICMD 006213 1532 2993# -SIX = 000006 121# -SIXTN 010566 3895 3912# -SKP.GO 020144 4583 6596 6698# -SKP.TA= 000031 158# 4031 -SKP2 003031 1727 1737# -SKP6 003046 1741 1747# -SKP8 003075 1752 1761# -SLASH = 000057 107# 1856 2383 2548 2706 2796 3135 3309 4542 -SMCMD 007221 1534 3398# -SMERR 017546 3435 6635# -SMFINI 007376 1651 3437 3464# 5236 -SMPAR = 000100 21# 803 5022 5048 -SMSTS = 000301 18# 1114 5736 -SMVER 007325 3432 3439# -SM1 007232 3398 3405# 4000 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-241 -END.M80 CROSS REFERENCE TABLE - -SM1.5 007235 1207 3403 3406# -SOFTER 013664 5037 5096# -SP =%000010 618 914 1888 1889 2180 4092 5479 5480 5483 5484 -SPACE = 000040 106# 2389 3180 3181 3453 3454 4548 4550 4557 4559 5051 5056 -STAR = 000052 90# -STATE 020360 1147 1156 5725 5773 5779 6173 6759# -STATEM 015337 1657 3598 5745 5753 5765 5772# 6115 -STBIT = 000004 77# 1154 5744 -STCK.Y 016701 6439 6444# -STCMD 007522 1526 3545# -STINT 007533 871 3551# 3971 -STMSK = 000373 76# 1149 -STPPD 020162 1744 1976 6706# -STRCMP 015713 3886 3896 6065# 6073 -STREND 015727 6067 6075# -SYNC = 000001 84# 6233 6234 6292 6303 6328 6401 6402 6410 6411 -SYSBUF 021125 6441 6458 6775# -SYSEND 021325 6444 6776# -SYSIN 021121 6436 6442 6475 6486 6492 6773# -SYSOUT 021123 6429 6459 6493 6774# -SYSUP 000576 882# -SYSUP1 000600 883# 902 -S16CHK 010525 3887 3894# -S36BL 014615 5499# 5514 -S36LP 014621 5504# 5510 -TAB = 000011 105# -TAPDEV 011701 4315 4324# -TAPEUN 020137 3875 4050 6577 6612 6697# -TARG1 015461 1434 5266 5617 5872# 5882 5909 5948 5982 6011 -TARG2 015455 5815 5842 5867# -TECMD 006013 1521 2895# -TEDIS 006037 2895 2910# -TEN = 000012 125# -TENCHR 003564 1868 1992# -THREE = 000003 118# -TMPBF2 020073 866 3287 3296 3548 3558 3560 3968 5414 5425 5434 6682# -TMPB2 020100 2461 2465 2479 3109 3114 3147 3250 3270 3286 3295 3693 3828 3838 - 3846 3857 3867 3874 3908 3924 4565 5249 5317 6683# -TPCMD 006105 1523 2940# -TPDIS 006125 2940 2953# -TP.SET 011000 2950 4007# -TR 006632 3215# 3227 -TRAPEN 020355 1653 1925 2037 2953 3101 4007 4218 6756# -TRCMD 006612 1559 3206# -TRLP 006650 3217 3222# -TRPDEF= 000020 63# 827 4006 -TR1 006626 3206 3213# -TSKGO 016243 6213 6219# -TSKGO1 016262 6228 6230# -TSKLP 016231 6195 6211# -TSK2TS 016265 6232# 6251 -TTCMD 007727 1599 3633# -TTERMS 004134 2164 2171# -TTERR 004072 1670 2146# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-242 -END.M80 CROSS REFERENCE TABLE - -TTERR1 004114 2148 2159# -TTM 017434 2175 6623# -TTOCOM 004022 2073 2112# -TTYSW = 000300 17# 648 -TWO = 000002 117# -T80DT 020000 745 756 1279 1320 2840 2845 3406 3421 5279 5281 6666# -U 003412 1911 1914# 3576 3635 -UBANUM 020254 4058 4111 4224 4666 4689 6737# -UBA.RD 013602 5067# 5133 5187 -UCHR = 000125 113# 1756 -UMCMD 010020 1515 3680# -UNITNM 020132 3847 3985 6527 6533 6696# -UPARR = 000136 115# 1730 1755 2181 -UP.LO 003220 1793 1825# 2223 3658 -USER 003303 1723 1867# -USRMD 020156 927 1047 1720 1895 1968 2154 2166 6146 6702# -VDCMD 012014 1604 4391# -VERCNT 020253 4440 4480 6736# -VERCRA 012044 4395 4412# -VERLST 012220 4435 4491# -VERRPT 012307 4464 4535# -VTCMD 012027 1601 4400# -V.BCLP 013331 4953# 4968 -V.BLP 012130 4443# 4475 4487 -V.BLP1 012133 4445# -V.DONW 012066 4422# 4472 -V.ERR 012161 4456 4464# -V.GO 012076 4420 4429# -V.NXME 012120 4438# 4482 -V.NXT 012177 4480# -V.VER 013276 4871 4937# -WAITLP 012631 4720# 4734 -WATCHC 020130 966 970 981 6694# -WDATP 015554 3520 5952# -WDATT 015547 2434 2602 5947# -WFNC1 006311 3048# 3707 -WFUNC 006303 3043# 3386 4257 4275 4299 4929 -WRD.DP 003505 1948 1954# -WRD.PR 003462 1934 1938# -WRD31 003423 1918# -WRD34 016156 6165 6177 6183# -W.CRMZ 013250 4858 4923# -W.LOC 013257 4921 4926# -W.LP 013261 4927# 4931 -W0003 = 000112 54# 2001 2120 2319 5970 -W0411 = 000110 53# 2000 2119 2318 5966 -W1219 = 000106 52# 1999 2118 2317 5962 -W2027 = 000104 51# 2013 2117 2331 5958 -W2835 = 000102 50# 2011 2116 2329 5954 -XCTMTA 012414 4583# 4587 -XCTNOW 012405 4579# 4584 4590 -XFRRT 012474 4632 4640# -XXX230 000373 788 802# -XXX235 000462 812 838# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-243 -END.M80 CROSS REFERENCE TABLE - -YSRUN 013442 2995 5001 5006# -ZEROES 007404 3467# 4894 -ZMCMD 010077 1563 3711# 4881 -ZM1 010120 3719# 3732 -Z.TBUF 016776 2986 6491# -. = 021377 519# 529# 540# 552# 564# 577# 592# 603# 614# 6665# 6666# 6667# 6668# - 6669# 6670# 6671# 6672# 6673# 6674# 6675# 6676# 6677# 6678# 6679# 6680# 6681# - 6682# 6683# 6684# 6685# 6686# 6687# 6688# 6689# 6690# 6691# 6692# 6693# 6694# - 6695# 6696# 6697# 6698# 6699# 6700# 6701# 6702# 6703# 6704# 6705# 6706# 6707# - 6708# 6709# 6710# 6711# 6712# 6713# 6714# 6715# 6716# 6717# 6718# 6719# 6720# - 6721# 6722# 6723# 6724# 6725# 6726# 6727# 6728# 6729# 6730# 6731# 6732# 6733# - 6734# 6735# 6736# 6737# 6738# 6739# 6740# 6741# 6742# 6743# 6744# 6745# 6746# - 6747# 6748# 6749# 6750# 6751# 6752# 6753# 6754# 6755# 6756# 6757# 6758# 6759# - 6760# 6761# 6762# 6763# 6764# 6765# 6766# 6767# 6768# 6769# 6770# 6771# 6772# - 6773# 6774# 6775# 6776# 6778# 6779# -.ARG1 020223 1264 1349 3649 3933 3938 3940 5542 5559 5787 6075 6725# -.ARG16 014654 5534# 5684 -.ARG36 014647 5531# 5686 -.CLRRM 015635 5687 6009# -.CRLF 002202 1471# 5683 -.DSBAS 000453 834# 3592 -.IN = 000333 78# 2821 -.MODE0= 000001 69# 2050 6136 6161 -.MODE1= 000002 70# 2050 6128 6161 -.MODE2= 000004 71# 1947 6167 -.MODE3= 000010 72# 1398 1947 2050 2094 3623 6104 6141 -.MODE4= 000020 73# 1054 1372 1702 6155 -.MOV5B 015402 5682 5811# -.MTBAS 000446 833# -.OUT = 000323 79# 2842 -.RET = 000311 80# 2808 -.RUN.. 013427 4997# 5685 -.SETM1 015775 6099 6121# - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-244 -END.M80 CROSS REFERENCE TABLE - -ARG16 433# 2697 2737 2839 2852 3207 5278 -ARG36 443# 2411 2583 2672 2722 2729 3515 3923 -BUSRES 286# 2423 2444 2448 2524 2527 2531 2621 2625 -CLINE 225# -CLRB 496# 915 916 917 918 919 981 1168 1188 1226 1227 1345 1713 1714 1744 - 1879 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 3451 4217 4218 - 4811 4812 4987 5011 5044 5718 5758 5759 6232 -CLRRM 448# 866 876 3250 3551 3672 3711 3715 4815 6184 -CRLF 428# 798 935 1757 1836 2374 2392 2481 2550 2888 3137 3192 3223 3318 3460 - 3508 3946 4567 5126 -D 291# 832 833 834 3468 4119 4120 4121 4852 -DEPOS 461# 1963 3553 3554 3555 3595 4063 4068 4073 6188 -DI. 347# 6525 6532 6535 6536 6545 6547 6549 6574 6576 6584 6586 6590 6592 6594 - 6611 6614 6616 -DI.IND 364# 6527 6533 6541 6543 6577 6579 6596 6612 -EI. 330# 5072 5074 5078 6528 6550 6552 6555 6580 6587 6597 6599 6602 -ENDCMD 269# 1659 2394 2551 2629 2725 2732 2740 2759 2780 2854 2878 2928 2931 3009 - 3018 3027 3065 3161 3194 3230 3242 3320 3392 3509 3736 6501 -ENDLST 413# 5068 5076 5079 6557 6606 6617 -ERRTST 388# 5073 5075 6553 6556 6600 6601 6603 6605 -EXAM 454# 1134 1233 1919 2042 2076 3440 3456 4183 4210 -INTOFF 210# 855 880 1137 1197 1240 1920 2043 2077 3441 3457 3735 4002 4351 4537 - 4760 4767 5137 5238 -INTON 217# 844 1132 1195 1230 1918 2033 2075 3439 3455 3717 4216 4349 4572 4608 - 4810 5135 5175 -KCHAR 185# 2275 2276 6233 6234 -KLINE 202# 2199 2207 2264 6399 6407 -LI. 311# 6526 6531 6534 6537 6540 6542 6544 6546 6548 6575 6578 6583 6585 6589 - 6591 6593 6595 6604 6610 6613 6615 -LONG.D 486# 976 1208 3564 5021 -MOV5B 423# 3285 3410 3546 3591 3837 3866 3966 4054 4070 4113 4226 4239 4344 4415 - 4661 4846 4883 4887 5205 -PCHAR 176# 1472 1473 1730 1731 1755 1756 1856 2181 2182 2383 2389 2455 2471 2548 - 2706 2796 2886 2887 3135 3180 3181 3309 3453 3454 4542 4547 4548 4549 4550 - 4557 4558 4559 5051 5056 5353 5354 -PCRLF 234# 798 935 1757 1836 2374 2392 2481 2550 2888 3137 3192 3223 3318 3460 - 3508 3946 4567 5126 -PLINE 194# 792 843 856 910 936 1105 1189 1228 1355 1881 1911 2175 2371 2472 - 2477 2884 3301 3435 3448 3458 3537 3575 3576 3634 3635 3671 3823 3833 3841 - 3852 3862 3869 3877 3903 3945 4988 5006 5040 5046 5123 5697 5699 5719 5761 - 6497 6505 6512 -PSLASH 263# 1856 2383 2548 2706 2796 3135 3309 4542 -PSPACE 255# 2389 3453 3454 4548 4550 4557 4559 5051 5056 -PTAB 248# -RD.REG 469# -RUN.. 438# 2409 2649 3032 3122 3167 3213 3238 3246 3349 3685 -SETZM 474# -SSCLK 240# -TSTRDY 479# 2066 2087 2098 -TWAIT 372# 6529 6539 6581 -UBA. 395# 5067 6524 6573 -WAIT 380# 6530 6538 6551 6582 6588 6598 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-245 -END.M80 CROSS REFERENCE TABLE - -ACI 4450 5494 5671 -ADC 5890 -ADD 732 2007 2126 2325 3977 4447 4674 5491 5668 6192 6361 -ADI 1733 5438 5582 5708 5710 5712 5714 -ANA 666 669 674 681 718 887 928 932 971 998 1013 1035 1048 1064 1115 - 1199 1278 1283 1321 1440 1687 1721 1849 1897 1932 1963 1979 1986 2045 2155 - 2246 2292 2298 2513 2542 2610 2922 2935 3130 3216 3226 3263 3281 3461 3540 - 3553 3554 3555 3595 3611 3629 3731 3757 3766 3776 3800 4063 4068 4073 4655 - 4696 4799 4804 4825 5000 5017 5436 5448 5502 5538 5607 5701 5738 5774 5797 - 6066 6122 6147 6188 6200 6215 6246 6427 6431 6438 6467 6477 6482 -ANI 723 893 897 906 942 948 961 978 985 994 1009 1030 1149 1154 1175 - 1193 1313 1393 1403 1424 1669 1674 1679 1697 1702 1875 1947 1958 2050 2066 - 2087 2098 2147 2159 2304 2868 2871 2882 2902 2905 2911 2949 2954 2994 3113 - 3172 3418 3431 3485 3493 3501 3533 3697 3804 4254 4290 4297 4307 4425 4444 - 4459 4515 4563 4623 4781 4861 4876 4909 5025 5031 5035 5054 5059 5193 5221 - 5251 5547 5653 5935 6161 6174 6206 6224 6367 -CALL 643 697 797 845 846 849 861 863 865 871 879 884 911 924 976 - 988 1058 1080 1125 1134 1203 1207 1208 1209 1210 1212 1231 1233 1238 1239 - 1259 1299 1344 1434 1444 1465 1642 1651 1657 1707 1715 1758 1793 1808 1858 - 1880 1901 1902 1907 1908 1919 1963 1972 2042 2061 2076 2199 2207 2223 2264 - 2274 2275 2276 2281 2282 2352 2361 2372 2373 2375 2381 2386 2393 2414 2423 - 2426 2431 2434 2444 2448 2451 2460 2463 2475 2480 2489 2502 2524 2527 2531 - 2536 2546 2549 2557 2581 2594 2602 2621 2625 2651 2666 2671 2686 2688 2704 - 2751 2765 2772 2787 2795 2799 2802 2811 2823 2830 2847 2862 2897 2920 2942 - 2962 2968 2981 2986 2999 3004 3013 3024 3034 3040 3127 3134 3136 3141 3174 - 3176 3179 3219 3222 3240 3241 3248 3252 3253 3267 3271 3284 3291 3294 3307 - 3308 3314 3350 3358 3360 3362 3371 3386 3401 3408 3415 3422 3424 3426 3428 - 3440 3445 3450 3456 3459 3482 3507 3520 3538 3545 3553 3554 3555 3561 3564 - 3570 3595 3596 3598 3607 3633 3658 3686 3687 3688 3691 3692 3702 3718 3719 - 3723 3727 3747 3754 3824 3834 3842 3853 3863 3870 3878 3886 3896 3904 3919 - 3931 3939 3951 3952 3957 3965 3974 3979 3983 3991 4000 4005 4014 4016 4019 - 4023 4025 4026 4032 4038 4044 4047 4063 4068 4073 4102 4103 4104 4109 4164 - 4167 4174 4181 4183 4188 4194 4202 4207 4210 4211 4219 4236 4250 4257 4275 - 4288 4299 4309 4319 4325 4327 4334 4340 4350 4359 4391 4400 4402 4429 4431 - 4432 4438 4485 4519 4525 4540 4545 4554 4566 4570 4579 4680 4687 4709 4710 - 4721 4728 4741 4744 4751 4766 4809 4821 4830 4858 4866 4868 4869 4871 4872 - 4881 4891 4892 4898 4900 4901 4923 4929 4990 5021 5023 5045 5050 5055 5060 - 5061 5062 5097 5113 5125 5127 5134 5136 5144 5154 5170 5177 5180 5183 5188 - 5196 5201 5208 5212 5218 5232 5236 5237 5246 5266 5291 5296 5323 5329 5347 - 5351 5355 5366 5378 5558 5560 5592 5617 5703 5704 5716 5721 5745 5753 5760 - 5765 5815 5817 5842 5882 5909 5948 5982 6011 6076 6115 6134 6135 6165 6177 - 6188 6233 6234 6237 6265 6384 6387 6388 6394 6397 6399 6406 6407 6471 -CC 5272 -CMA 649 748 946 1002 1024 1042 1153 1292 1843 1978 2812 2934 3108 3112 3430 - 3532 3539 3750 3812 4946 4949 5024 5030 5034 5049 5053 5058 5737 5748 5918 - 5922 5926 5930 5934 6205 6222 -CMC 3807 4769 -CMP 952 1089 1164 1248 2250 2260 4080 4088 4455 4463 4967 5255 5259 5848 6069 - 6378 -CNC 1301 5274 -CNZ 954 979 1015 1037 1196 3782 4464 5826 6108 6124 6468 -CP 1117 1122 -CPI 784 811 1054 1218 1372 1386 1398 1458 1682 1710 1726 1737 1740 1748 1751 - 1761 1764 1767 1775 1778 1781 1785 1812 1825 1827 1859 1867 2055 2058 2079 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-246 -END.M80 CROSS REFERENCE TABLE - - 2094 2197 2220 2229 2268 2288 3157 3623 3654 3667 3781 4314 4356 4837 5790 - 5793 6033 6037 6095 6098 6104 6212 6227 6239 6242 6250 6276 6280 6292 6303 - 6319 6322 6325 6328 6344 6463 -CZ 1284 1466 1738 1776 1779 1782 3624 3775 4082 6277 -DAD 713 753 766 774 2566 2635 4339 4614 4626 4958 5430 6445 -DCR 596 731 757 901 1339 1342 1851 1863 2365 2390 3189 3315 3368 3390 3779 - 3930 4259 4272 4277 4301 4365 4481 4789 4841 4930 5297 5330 5368 5420 5429 - 5441 5454 5456 5490 5509 5513 5570 5595 5598 5602 5626 5629 5634 5641 5825 - 5852 6017 6052 6357 6358 6359 6363 -DCX 629 1180 1252 1326 1327 1854 2773 2971 3150 3153 3673 4465 4553 4670 4671 - 4672 4702 4704 4783 4784 4787 4788 4796 4797 5453 5483 5484 5507 5656 6015 - 6030 -DI 523 605 1133 1232 2034 6474 -EI 847 925 1135 1234 1821 1891 1983 2062 2141 6203 6393 6470 -IN 648 694 695 892 896 941 945 977 984 993 1008 1029 1114 1192 1392 - 1402 1423 1665 1667 1678 1696 1871 2066 2087 2098 2302 2993 3107 3111 3429 - 3531 5029 5033 5048 5052 5057 5736 5917 5921 5925 5929 5933 -INR 544 795 1099 1216 1772 1811 1839 2228 2249 2266 3155 3376 3662 3762 3771 - 4835 5163 5225 5553 6223 6284 6342 -INX 533 556 558 568 581 628 711 750 755 768 770 816 817 877 1087 - 1096 1097 1098 1246 1256 1257 1270 1288 1290 1350 1382 1420 1438 1456 1796 - 1888 1889 1939 1940 1961 2235 2253 2254 2363 2364 2382 2387 2568 2638 2716 - 2744 3262 3280 3290 3338 3346 3364 3365 3366 3381 3383 3660 3661 3790 3792 - 4171 4286 4304 4363 4364 4423 4446 4454 4469 4527 4629 4641 4706 4707 4731 - 4802 4859 4874 4907 4954 4956 4959 5166 5229 5257 5406 5408 5417 5419 5479 - 5480 5481 5554 5566 5575 5576 5577 5614 5624 5625 5637 5640 5650 5651 5655 - 5675 5739 5775 5830 5831 5850 5851 5868 5870 5873 5875 5893 5920 5924 5928 - 5932 5955 5959 5963 5967 5989 5993 5997 6001 6031 6051 6071 6072 6186 6194 - 6219 6272 6273 6337 6356 6362 6453 6485 -JC 862 1081 1140 1204 1309 2410 2488 2650 2694 2763 2785 2860 2895 2918 2940 - 3206 3247 3398 3480 3604 3646 3825 3835 3854 3864 3871 3880 3955 3981 3989 - 4001 4189 4208 4320 4341 4392 4403 4472 4475 4838 5114 5178 -JM 1158 1219 1343 1801 3264 3282 4842 5635 -JMP 524 535 559 571 584 611 788 818 857 872 967 989 1000 1018 1039 - 1100 1107 1169 1177 1213 1241 1253 1348 1445 1467 1716 1913 1973 1988 2073 - 2183 2255 2271 2283 2456 2483 2559 2662 2667 2684 2710 2718 2774 2907 2912 - 2936 2950 2955 2987 3000 3276 3302 3340 3403 3437 3496 3580 3587 3600 3630 - 3636 3681 3707 3752 3763 3892 3936 3941 3971 3986 3997 4027 4310 4360 4367 - 4386 4395 4420 4487 4584 4587 4590 4642 4656 4737 4747 4762 4851 4921 4974 - 4982 4991 5007 5063 5172 5234 5239 5312 5382 5459 5529 5532 5555 5600 5638 - 5698 5705 5722 5730 5756 5894 6073 6130 6138 6143 6157 6179 6189 6195 6296 - 6391 6419 6455 6487 6508 6515 -JNC 1144 1304 3744 4017 4036 4045 5561 6345 -JNZ 632 719 724 736 758 780 785 888 902 929 933 986 995 999 1010 - 1017 1031 1049 1055 1065 1126 1200 1373 1399 1670 1675 1683 1688 1723 1727 - 1741 1752 1768 1868 2051 2059 2080 2095 2148 2156 2164 2168 2251 2289 2293 - 2391 2424 2427 2446 2514 2525 2528 2611 2622 2626 2883 2974 3131 3158 3190 - 3316 3369 3432 3663 3758 3767 3772 3783 3887 3897 4020 4039 4048 4182 4273 - 4315 4328 4357 4366 4456 4734 4790 4826 4895 4904 4962 4968 5001 5018 5298 - 5331 5369 5421 5455 5457 5510 5514 5539 5548 5603 5630 5642 5853 6018 6055 - 6125 6216 6281 6293 6368 6439 6464 -JP 1805 2366 3391 3801 4278 4697 4931 5596 5608 6228 6364 -JZ 812 853 894 898 907 943 962 972 1069 1086 1090 1123 1165 1249 1280 - 1322 1366 1394 1404 1425 1459 1703 1749 1762 1786 1813 1934 1948 2046 2056 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-247 -END.M80 CROSS REFERENCE TABLE - - 2067 2088 2099 2221 2230 2247 2261 2269 2305 2449 2532 2923 2995 3217 3227 - 3298 3612 3732 3777 4175 4291 4308 4482 4516 4862 4877 4911 5026 5037 5098 - 5164 5226 5442 5599 5627 5702 5791 5794 6034 6038 6067 6096 6099 6123 6162 - 6213 6240 6243 6247 6251 6320 6323 6326 6329 6379 6432 6478 6483 -LDA 756 886 905 927 931 951 970 997 1012 1034 1047 1053 1063 1067 1138 - 1147 1163 1198 1282 1320 1364 1371 1397 1653 1686 1701 1720 1732 1810 1838 - 1848 1896 1921 1925 1931 1943 1946 1957 2010 2037 2044 2049 2070 2078 2082 - 2093 2154 2166 2227 2259 2291 2297 2328 2512 2541 2609 2792 2843 2845 2870 - 2881 2904 2910 2933 2953 3054 3101 3129 3215 3225 3417 3464 3492 3500 3622 - 3628 3730 3765 3774 3828 3846 3857 3874 3908 3976 4058 4110 4223 4313 4666 - 4689 4824 4999 5016 5192 5220 5435 5443 5537 5620 5700 5773 6103 6121 6146 - 6160 6173 6199 6204 6238 6245 6351 6376 6466 -LDAX 810 1084 1247 1437 2245 2360 3389 3696 4354 4443 4453 4462 4470 4544 4673 - 4695 4780 4785 4798 4803 5254 5258 5416 5828 5847 5953 5957 5961 5965 5969 - 5987 5991 5995 5999 6003 6065 6270 -LHLD 1079 1173 1179 1286 1325 1349 1356 1380 1692 1784 2233 2545 2564 2633 2708 - 2715 2743 2754 3068 3147 3275 3337 3345 3421 3649 3769 3932 3938 3985 4050 - 4096 4197 4199 4244 4252 4261 4295 4303 4422 4445 4511 4561 4795 4906 4972 - 5182 5249 5281 5447 5462 5542 5563 5580 5612 5787 6336 6416 6429 6436 6475 -LXI 543 595 618 624 625 651 703 743 760 765 808 809 883 914 920 - 922 940 976 1078 1129 1162 1202 1206 1208 1215 1272 1337 1346 1663 1771 - 1862 1882 1912 1922 1976 2171 2180 2186 2208 2213 2241 2242 2265 2356 2357 - 2377 2378 2474 2479 2482 2494 2535 2565 2589 2634 2656 2678 2703 2967 3125 - 3168 3169 3218 3259 3270 3353 3354 3372 3377 3405 3414 3449 3518 3557 3560 - 3564 3650 3693 3722 3795 3814 3816 3885 3895 3929 3935 3975 4057 4079 4092 - 4093 4162 4169 4234 4258 4276 4300 4318 4338 4348 4353 4418 4435 4436 4480 - 4484 4522 4539 4578 4582 4586 4589 4613 4625 4632 4665 4685 4708 4765 4819 - 4829 4857 4870 4920 4925 4952 4989 5021 5096 5112 5124 5133 5141 5142 5150 - 5152 5153 5168 5176 5187 5195 5211 5214 5216 5217 5270 5310 5317 5342 5399 - 5414 5425 5434 5543 5665 5720 5725 6129 6137 6142 6153 6156 6166 6178 6209 - 6236 6256 6264 6266 6267 6295 6306 6341 6354 6374 6389 6441 6444 6458 6491 - 6499 6507 6513 -MOV 532 555 557 567 580 630 652 655 658 659 662 665 667 668 670 - 673 680 705 706 707 708 710 717 722 727 747 749 764 767 769 - 775 815 947 950 960 1076 1148 1150 1152 1167 1174 1176 1182 1217 1266 - 1269 1271 1287 1289 1293 1307 1312 1314 1328 1330 1338 1340 1381 1419 1455 - 1666 1673 1680 1689 1698 1706 1722 1795 1799 1803 1807 1857 1923 1929 1941 - 1945 1956 1962 1977 1982 1985 2048 2054 2083 2101 2104 2146 2172 2177 2224 - 2234 2267 2362 2498 2504 2567 2569 2593 2596 2637 2639 2709 2753 2755 2768 - 2790 2820 2832 2844 2864 2869 2899 2903 2921 2944 2972 3043 3045 3077 3079 - 3100 3126 3133 3148 3151 3156 3171 3184 3187 3261 3279 3289 3380 3382 3484 - 3491 3610 3653 3666 3756 3761 3770 3789 3791 3799 3805 3978 4060 4245 4247 - 4253 4255 4265 4267 4269 4271 4289 4296 4298 4306 4424 4448 4449 4451 4458 - 4461 4514 4562 4564 4616 4617 4619 4624 4628 4630 4668 4675 4691 4700 4701 - 4703 4705 4717 4718 4732 4756 4757 4836 4860 4875 4908 4927 4945 4947 4948 - 4950 4953 4955 4960 4979 4985 5032 5161 5194 5199 5224 5250 5252 5311 5405 - 5407 5418 5427 5428 5444 5446 5450 5452 5477 5488 5492 5493 5495 5501 5504 - 5506 5545 5549 5565 5568 5569 5581 5583 5606 5613 5621 5622 5633 5648 5652 - 5669 5670 5672 5674 5676 5691 5728 5789 5867 5869 5872 5874 5891 6032 6050 - 6093 6187 6193 6211 6221 6338 6343 6352 6355 6375 6382 6417 6430 6437 6446 - 6452 6461 6462 6469 6476 6481 -MVI 627 687 691 744 746 802 838 840 867 869 878 882 1190 1236 1383 - 1645 1648 1656 1937 1952 1967 1993 2003 2012 2018 2023 2072 2111 2122 2129 - 2132 2138 2151 2162 2173 2243 2311 2321 2330 2336 2341 2350 2358 2379 2420 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-248 -END.M80 CROSS REFERENCE TABLE - - 2437 2440 2496 2508 2517 2591 2599 2605 2614 2653 2658 2661 2675 2680 2683 - 2700 2756 2776 2778 2808 2821 2842 2929 2960 2982 2997 3007 3014 3051 3061 - 3071 3089 3091 3104 3210 3255 3306 3312 3355 3359 3374 3522 3525 3571 3597 - 3642 3651 3674 3680 3683 3690 3704 3712 3724 3890 3900 3947 3993 3996 4004 - 4006 4015 4022 4031 4043 4065 4078 4087 4178 4232 4237 4249 4263 4281 4324 - 4352 4384 4394 4401 4405 4439 4775 4779 4816 4850 4865 4926 4966 4973 4976 - 5022 5103 5143 5245 5294 5327 5364 5473 5528 5531 5534 5586 5690 5692 5726 - 5729 5744 5752 5764 5824 5845 6014 6016 6112 6128 6133 6136 6141 6155 6164 - 6167 6176 6210 6220 6268 6371 6385 6454 -NOP 520 521 3528 3529 -ORA 631 675 682 776 1068 1085 1155 1183 1365 1461 1668 1938 1954 1959 2167 - 2769 2875 2973 3102 3494 3698 4059 4667 4690 4733 4961 4980 5036 5222 5727 - 5778 6079 6447 -ORI 676 683 796 1329 6229 -OUT 640 677 684 689 692 803 839 841 1157 1406 1407 1411 1428 1641 1646 - 1649 1654 1995 1997 1998 1999 2000 2001 2004 2008 2011 2013 2016 2020 2024 - 2025 2038 2071 2102 2105 2112 2114 2115 2116 2117 2118 2119 2120 2123 2127 - 2130 2134 2139 2140 2152 2163 2313 2315 2316 2317 2318 2319 2322 2326 2329 - 2331 2334 2338 2342 2343 2351 2369 2418 2421 2438 2442 2505 2509 2519 2539 - 2597 2600 2606 2616 2777 2779 2877 2961 2964 2998 3006 3008 3015 3017 3044 - 3046 3049 3052 3055 3062 3064 3072 3074 3078 3080 3083 3084 3085 3087 3090 - 3092 3094 3103 3105 3117 3419 3465 3523 3526 3572 3586 3725 4008 4246 4248 - 5013 5104 5129 5780 5954 5958 5962 5966 5970 5988 5992 5996 6000 6004 6175 - 6504 6511 -PCHL 1072 1316 1357 1693 1892 2571 2641 3808 4097 4635 5370 5463 5680 -POP 545 597 762 779 783 793 955 980 1016 1038 1059 1121 1315 1331 1332 - 1368 1378 1385 1405 1410 1427 1471 1815 1817 1818 1819 1820 1883 1884 1885 - 1886 1887 1966 2176 2798 2810 2824 3041 3142 3143 3182 3297 3313 3694 3891 - 3894 4064 4066 4083 4165 4192 4285 4292 4521 4526 4529 4530 4571 4573 4574 - 4640 4676 4688 4722 4729 4730 4742 4745 4752 4770 4771 4772 4773 4774 4834 - 4873 4932 4975 4977 4984 4997 5003 5160 5171 5219 5233 5247 5273 5295 5300 - 5301 5302 5303 5328 5333 5334 5335 5336 5356 5357 5358 5359 5363 5365 5411 - 5423 5499 5517 5518 5519 5520 5535 5574 5584 5587 5678 5679 5693 5767 5799 - 5804 5811 5818 5819 5937 5971 6005 6009 6041 6054 6056 6185 -PUSH 542 570 583 594 606 607 608 609 734 735 742 953 975 1014 1036 - 1057 1116 1273 1300 1319 1324 1363 1379 1391 1422 1664 1933 2174 2794 2807 - 2819 3039 3139 3140 3178 3293 3684 3796 3884 4053 4062 4081 4094 4163 4166 - 4235 4287 4508 4509 4512 4523 4535 4536 4569 4609 4610 4611 4618 4633 4660 - 4686 4720 4726 4727 4740 4743 4750 4820 4867 4919 4924 4998 5151 5167 5169 - 5215 5230 5231 5244 5271 5287 5288 5289 5290 5309 5318 5319 5320 5321 5343 - 5344 5345 5346 5374 5375 5376 5377 5412 5440 5476 5485 5486 5497 5500 5551 - 5573 5579 5666 5667 5763 5786 5813 5814 5916 5952 5986 6029 6049 6053 6183 -RAL 660 661 1139 1143 1308 2865 2866 2867 2900 2901 2945 2946 2947 2948 3486 - 3487 3488 3489 4471 4474 -RAR 653 654 656 657 3502 3503 3504 3505 4266 4270 4621 4622 5451 5505 -RC 3843 3905 3920 4677 6077 -RET 546 598 1184 1333 1352 1369 1389 1408 1412 1429 1474 1659 1822 1832 1844 - 1864 1904 2027 2063 2142 2157 2178 2192 2200 2215 2237 2278 2345 2394 2466 - 2551 2629 2690 2725 2732 2740 2759 2780 2803 2813 2825 2834 2848 2854 2878 - 2885 2889 2928 2931 2975 3009 3018 3027 3065 3095 3119 3161 3194 3230 3242 - 3320 3392 3466 3509 3541 3616 3625 3675 3736 3787 3818 3848 3910 3926 3995 - 4009 4074 4105 4116 4203 4214 4220 4229 4293 4321 4329 4531 4575 4580 4681 - 4692 4711 4776 4791 4805 4913 4933 4969 5004 5260 5275 5282 5304 5337 5360 - 5521 5645 5657 5694 5741 5750 5768 5781 5800 5805 5822 5832 5854 5877 5938 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-249 -END.M80 CROSS REFERENCE TABLE - - 5972 6006 6019 6042 6058 6080 6117 6170 6258 6285 6346 6400 6408 6494 6501 -RLC 1926 1927 1928 3829 3830 3858 3859 -RM 1826 -RNC 4326 5892 -RNZ 1387 1711 1860 1876 2543 3562 4089 4426 4723 4746 4800 5256 5849 6070 6148 -RP 1828 -RRC 728 729 730 794 949 1944 1955 3185 3186 -RST 792 798 843 844 855 856 866 876 880 910 915 916 917 918 919 - 935 936 981 1105 1132 1137 1168 1188 1189 1195 1197 1226 1227 1228 1230 - 1240 1345 1355 1472 1473 1713 1714 1730 1731 1744 1755 1756 1757 1836 1856 - 1879 1881 1895 1909 1911 1918 1920 1964 2033 2043 2075 2077 2175 2181 2182 - 2189 2190 2191 2211 2277 2371 2374 2383 2389 2392 2409 2411 2455 2471 2472 - 2477 2481 2548 2550 2583 2649 2672 2697 2706 2722 2729 2737 2796 2839 2852 - 2884 2886 2887 2888 2959 3032 3122 3135 3137 3167 3180 3181 3192 3207 3213 - 3214 3223 3229 3238 3246 3250 3285 3301 3309 3318 3349 3410 3435 3439 3441 - 3448 3451 3453 3454 3455 3457 3458 3460 3508 3515 3537 3546 3551 3575 3576 - 3591 3634 3635 3671 3672 3685 3711 3715 3717 3735 3823 3833 3837 3841 3852 - 3862 3866 3869 3877 3903 3923 3945 3946 3966 4002 4054 4070 4113 4216 4217 - 4218 4226 4239 4344 4349 4351 4415 4537 4542 4547 4548 4549 4550 4557 4558 - 4559 4567 4572 4608 4661 4760 4767 4810 4811 4812 4815 4846 4883 4887 4987 - 4988 5006 5011 5040 5044 5046 5051 5056 5123 5126 5135 5137 5175 5205 5238 - 5278 5353 5354 5697 5699 5718 5719 5758 5759 5761 6184 6232 6497 6505 6512 -RZ 1441 1462 1765 1850 1898 1969 1980 1987 2198 2299 2452 2770 3220 3534 3655 - 3668 4084 4753 6201 6304 6428 6448 -SHLD 921 923 1130 1181 1264 1294 1351 1384 1797 1855 2187 2188 2209 2214 2236 - 2500 2717 2745 2806 3026 3268 3339 3347 3406 3558 3793 3815 3817 3933 3940 - 4013 4067 4101 4170 4172 4198 4200 4305 4419 4430 4524 4528 4565 4759 4910 - 4937 4938 4939 4941 4942 4943 4978 5107 5269 5401 5410 5431 5559 5644 6075 - 6154 6169 6257 6307 6339 6390 6442 6459 6486 6492 6493 6500 -STA 745 870 966 1003 1025 1043 1156 1191 1237 1279 1388 1734 1747 1814 1840 - 1842 1852 1968 1992 2231 2310 2492 2522 2587 2619 2654 2659 2676 2681 2701 - 2757 2791 2809 2833 2876 2927 2930 2983 2984 2985 3109 3114 3211 3256 3375 - 3573 3615 3617 3643 3705 3713 3746 3749 3751 3780 3786 3813 3831 3847 3860 - 3875 3901 3909 3948 3994 4007 4111 4179 4224 4233 4238 4282 4385 4413 4440 - 4583 4817 4928 4981 4986 5162 5200 5223 5536 5717 5749 5779 6094 6151 6152 - 6168 6207 6230 6255 6386 6418 -STAX 3149 3152 3378 3659 3700 4355 4782 4786 5589 5623 5636 5649 5654 5829 5919 - 5923 5927 5931 5936 6271 -STC 3436 3806 3949 4193 4659 4768 5264 5803 5888 -SUI 1800 1804 1831 5546 5550 -XCHG 712 714 752 754 773 778 1267 1297 1453 2384 2388 2499 2501 2570 2640 - 3385 3387 3797 4552 4555 4631 4957 4965 5268 5400 5677 5844 5885 6013 6435 - 6451 -XRA 638 704 1075 1291 1640 1735 1745 1759 1841 1996 2113 2314 2368 2417 2491 - 2521 2538 2586 2618 2926 2963 3005 3016 3048 3063 3073 3082 3093 3116 3124 - 3585 3745 3748 3785 3925 4264 4716 4761 5012 5128 5426 5564 5597 5747 5755 - 5887 6254 6503 6510 -XTHL 531 534 554 566 569 579 582 1418 1421 1433 1435 1452 5265 5267 5404 - 5475 5482 5616 5618 5735 5740 5772 5776 5812 5821 5841 5843 5881 5884 5908 - 5910 5947 5949 5981 5983 6010 6012 6048 6057 -.ADDR 792 820 823 824 825 843 850 851 856 866 876 910 936 1105 1134 - 1189 1228 1233 1355 1482 1484 1486 1488 1490 1493 1495 1497 1499 1501 1504 - 1506 1508 1510 1512 1515 1517 1519 1521 1523 1526 1528 1530 1532 1534 1537 - 1539 1541 1543 1545 1548 1550 1552 1554 1556 1559 1561 1563 1565 1567 1570 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-250 -END.M80 CROSS REFERENCE TABLE - - 1572 1574 1576 1578 1581 1583 1585 1587 1589 1591 1593 1595 1597 1599 1601 - 1604 1606 1608 1610 1612 1614 1629 1630 1631 1632 1881 1911 1919 1963 2042 - 2076 2175 2199 2207 2264 2353 2371 2412 2415 2432 2435 2461 2464 2465 2472 - 2477 2558 2573 2574 2575 2576 2582 2584 2603 2643 2644 2645 2646 2673 2687 - 2689 2698 2723 2730 2738 2840 2853 2884 3208 3250 3286 3287 3295 3296 3301 - 3351 3411 3412 3435 3440 3448 3456 3458 3516 3537 3547 3548 3551 3553 3554 - 3555 3575 3576 3592 3593 3595 3634 3635 3671 3672 3711 3715 3720 3823 3833 - 3838 3839 3841 3852 3862 3867 3868 3869 3877 3903 3924 3945 3967 3968 4055 - 4056 4063 4068 4071 4072 4073 4114 4115 4183 4210 4212 4213 4227 4228 4240 - 4241 4345 4346 4416 4417 4645 4646 4647 4648 4649 4650 4651 4652 4662 4663 - 4815 4847 4848 4884 4885 4888 4889 4893 4894 4902 4903 4988 5006 5040 5046 - 5073 5075 5123 5206 5207 5279 5682 5683 5684 5685 5686 5687 5697 5699 5719 - 5761 6184 6188 6399 6407 6497 6505 6512 6527 6529 6530 6533 6538 6539 6541 - 6543 6551 6553 6556 6577 6579 6581 6582 6588 6596 6598 6600 6601 6603 6605 - 6612 -.ASCII 6621 6625 6655 6657 -.ASCIZ 791 1635 1893 1914 3196 3197 3198 3199 3911 3912 5090 5091 6619 6620 6623 - 6624 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 - 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6659 -.BLKB 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 - 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 - 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 - 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 - 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 - 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 - 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 - 6771 6772 6773 6774 6775 6776 6778 6779 -.BYTE 798 821 822 826 827 828 829 830 831 832 833 834 835 836 866 - 876 915 916 917 918 919 935 981 1168 1188 1226 1227 1345 1472 1473 - 1481 1483 1485 1487 1489 1492 1494 1496 1498 1500 1503 1505 1507 1509 1511 - 1514 1516 1518 1520 1522 1525 1527 1529 1531 1533 1536 1538 1540 1542 1544 - 1547 1549 1551 1553 1555 1558 1560 1562 1564 1566 1569 1571 1573 1575 1577 - 1580 1582 1584 1586 1588 1590 1592 1594 1596 1598 1600 1603 1605 1607 1609 - 1611 1613 1615 1658 1713 1714 1730 1731 1744 1755 1756 1757 1836 1856 1879 - 1895 1903 1909 1964 2181 2182 2189 2190 2191 2211 2275 2276 2277 2374 2383 - 2389 2392 2397 2398 2399 2400 2401 2402 2403 2404 2409 2411 2423 2444 2448 - 2455 2471 2481 2524 2527 2531 2548 2550 2583 2621 2625 2649 2672 2697 2706 - 2722 2729 2737 2796 2839 2852 2886 2887 2888 2959 2969 3032 3122 3135 3137 - 3167 3180 3181 3192 3207 3213 3214 3223 3229 3238 3246 3250 3272 3273 3285 - 3309 3318 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 - 3334 3349 3361 3410 3427 3451 3453 3454 3460 3468 3508 3515 3546 3551 3591 - 3599 3672 3685 3711 3715 3837 3866 3923 3946 3966 4054 4070 4113 4119 4120 - 4121 4217 4218 4226 4239 4344 4415 4486 4491 4492 4493 4494 4495 4496 4497 - 4498 4499 4500 4501 4542 4547 4548 4549 4550 4557 4558 4559 4567 4661 4811 - 4812 4815 4831 4846 4852 4883 4887 4987 5011 5044 5051 5056 5067 5068 5072 - 5073 5074 5075 5076 5078 5079 5081 5082 5083 5084 5085 5086 5087 5088 5126 - 5197 5202 5205 5278 5292 5293 5324 5325 5348 5349 5353 5354 5379 5380 5593 - 5718 5746 5754 5758 5759 5766 6116 6184 6232 6233 6234 6401 6402 6403 6404 - 6405 6410 6411 6412 6413 6414 6524 6525 6526 6527 6528 6529 6530 6531 6532 - 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 - 6548 6549 6550 6551 6552 6553 6555 6556 6557 6573 6574 6575 6576 6577 6578 - 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 - 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6610 6611 - 6612 6613 6614 6615 6616 6617 6622 6626 6656 6658 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-251 -END.M80 CROSS REFERENCE TABLE - -.END 6782 -.ENDC 915 916 917 918 919 981 1168 1188 1226 1227 1345 1625 1633 1713 1714 - 1744 1879 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 3451 4217 - 4218 4811 4812 4987 4992 5011 5041 5044 5240 5718 5758 5759 6232 6780 -.IF 915 916 917 918 919 981 1168 1188 1226 1227 1345 1619 1628 1713 1714 - 1744 1879 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 3451 4217 - 4218 4811 4812 4813 4987 5011 5015 5044 5064 5718 5758 5759 6232 6777 -.IFF 915 916 917 918 919 981 1168 1188 1226 1227 1345 1713 1714 1744 1879 - 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 3451 4217 4218 4811 - 4812 4987 5011 5044 5718 5758 5759 6232 -.IFT 915 916 917 918 919 981 1168 1188 1226 1227 1345 1713 1714 1744 1879 - 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 3451 4217 4218 4811 - 4812 4987 5011 5044 5718 5758 5759 6232 -.IIF 821 822 6619 6751 -.LIST 9 832 833 834 915 916 917 918 919 981 1168 1188 1226 1227 1345 - 1713 1714 1744 1879 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 - 3451 3468 4119 4120 4121 4217 4218 4811 4812 4852 4987 5011 5044 5718 5758 - 5759 6232 -.MACRO 176 185 194 202 210 217 225 234 240 248 255 263 269 286 291 - 311 330 347 364 372 380 388 395 413 423 428 433 438 443 448 - 454 461 469 474 479 486 496 -.NLIST 8 832 833 834 915 916 917 918 919 981 1168 1188 1226 1227 1345 - 1713 1714 1744 1879 1895 1909 1964 2189 2190 2191 2211 2277 2959 3214 3229 - 3451 3468 4119 4120 4121 4217 4218 4811 4812 4852 4987 5011 5044 5718 5758 - 5759 6232 -.PAGE 6 55 81 126 170 221 259 346 387 453 490 513 548 612 634 - 644 685 698 725 763 789 799 842 859 881 912 937 982 990 1004 - 1026 1044 1073 1091 1108 1141 1185 1222 1242 1260 1295 1317 1334 1358 1413 - 1430 1446 1476 1513 1546 1579 1602 1616 1636 1660 1694 1717 1746 1773 1788 - 1834 1865 1905 1915 1990 2028 2064 2074 2106 2143 2158 2184 2193 2216 2256 - 2284 2306 2346 2376 2406 2429 2467 2484 2515 2533 2553 2577 2612 2630 2647 - 2668 2691 2719 2741 2781 2804 2826 2849 2891 2937 2956 2990 3028 3069 3120 - 3162 3200 3232 3243 3277 3304 3341 3393 3425 3438 3470 3511 3542 3567 3581 - 3601 3631 3677 3708 3737 3768 3802 3819 3849 3881 3913 3942 3972 3987 4011 - 4028 4051 4075 4098 4118 4159 4184 4230 4279 4330 4368 4387 4407 4441 4478 - 4503 4532 4556 4576 4591 4637 4653 4682 4713 4763 4806 4853 4914 4934 4970 - 4983 4993 5009 5038 5065 5092 5116 5145 5173 5209 5241 5283 5313 5338 5383 - 5432 5464 5511 5522 5572 5610 5646 5659 5688 5706 5731 5769 5782 5806 5834 - 5856 5895 5896 5939 5973 6007 6021 6059 6081 6118 6144 6171 6190 6217 6248 - 6259 6286 6308 6347 6369 6392 6420 6456 6495 6516 6558 6607 6618 6660 -.RADIX 129 152 832 833 834 1134 1233 1919 1963 2042 2066 2076 2087 2098 3440 - 3456 3468 3553 3554 3555 3595 4063 4068 4073 4119 4120 4121 4183 4210 4490 - 4502 4852 5067 5068 5072 5073 5074 5075 5076 5078 5079 6188 6524 6525 6526 - 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 - 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6555 6556 6557 - 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 - 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 - 6603 6604 6605 6606 6610 6611 6612 6613 6614 6615 6616 6617 -.SBTTL 3 56 82 171 514 515 616 645 699 913 1074 1109 1243 1477 1617 - 1637 1661 1991 2030 2144 2347 2348 2407 2485 2554 2562 2578 2580 2631 2648 - 2669 2670 2692 2714 2720 2728 2734 2742 2748 2761 2782 2827 2837 2850 2856 - 2892 2914 2938 2957 2977 2991 3002 3011 3021 3029 3121 3163 3201 3233 3244 - 3336 3342 3343 3394 3471 3512 3543 3568 3582 3589 3602 3632 3639 3678 3709 - 3738 3820 3850 3943 3973 4012 4099 4122 4231 4331 4381 4388 4397 4408 4592 - VER 4.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 15-NOV-78 08:07 PAGE 3-252 -END.M80 CROSS REFERENCE TABLE - - 4807 4994 5689 5696 6044 6060 6119 6287 6309 6496 6517 6559 6661 -.TITLE 1634 - - - - - ERRORS DETECTED: 0 - - *FOR21.DAT/PTP,KNS10.PNT/M80/OCT/CRF/EQ:PASS2:SCECOD=CONDEF.M80,CHKSMS.M80,HCORE.M80,CMDS.M80,SUBRTN.M80,DR.M80,MSG.M80,STORE.M - RUN-TIME: 11 22 4 SECONDS - CORE USED: 21K - - READ I/O 0 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -!R DATA 28 ! R DATA 29 !! R DATA 30 ! R DATA 31 ! R DATA 32 !! R DATA 33 ! R DATA 34 ! R DATA 35 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 1 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -!R DATA 20 ! R DATA 21 !! R DATA 22 ! R DATA 23 ! R DATA 24 !! R DATA 25 ! R DATA 26 ! R DATA 27 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 2 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -!R DATA 12 ! R DATA 13 !! R DATA 14 ! R DATA 15 ! R DATA 16 !! R DATA 17 ! R DATA 18 ! R DATA 19 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 3 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -!R DATA 4 ! R DATA 5 !! R DATA 6 ! R DATA 7 ! R DATA 8 !! R DATA 9 ! R DATA 10 ! R DATA 11 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - READ I/O 100 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! REC PE ! UBA3 PE !! SPARE ! CRAM ! MEM !! DP PARITY ! CRA PARITY ! UBA2 PE ! -! L ! L !! ! PARITY ERR ! PARITY ERR !! ERR L ! ERR L ! L ! -! ! !! L ! L ! L !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 101 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! MMC REF ! -! PI REQ 1 ! PI REQ 2 !! PI REQ 3 ! PI REQ 4 ! PI REQ 5 !! PI REQ 6 ! PI REQ 7 ! ERR B ! -! ! !! ! ! !! ! ! H ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 102 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! R AC LO ! R RESET !! R MEM BUSY ! R I/O BUSY ! R BAD DATA !! R COM ADR ! R I/O DATA ! R DATA ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 103 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! UBA1 PE ! UBA4 PE !! R PAR RIGHT ! R PAR LEFT ! R DATA 0 !! R DATA 1 ! R DATA 2 ! R DATA 3 ! -! L ! L !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - READ I/O 300 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! CTY ! CTY CHAR !! KLINIK ! KLINIK ! DPM !! RUN (1) ! EXECUTE ! CONTINUE ! -! BIT # ! LENGTH !! BIT # ! LENGTH ! HALT LOOP !! H ! H ! H ! -! (SW) ! (SW) !! (SW) ! (SW) ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 301 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! 10 ! NXM !! SPARE ! BUS ! PE (1) !! CONSOLE ! BOOT ! DATA ACK ! -! INTERRUPT ! H !! ! REQ ! H !! ENABLE H ! H ! H ! -! H ! !! H ! ! !! (SW) ! (SW) ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 302 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! REMOTE !! REMOTE EN ! TERMINAL ! KLINIK ! -! 0 ! 0 !! 0 ! 0 ! PROTECT H !! H ! CARRIER ! CARRIER ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -READ I/O 303 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! R CLK !! CRAM CLK ! DPE/M CLK ! RAM ! -! 0 ! 0 !! 0 ! 0 ! ENB (0) !! ENA ! ENABLE ! ERROR ! -! ! !! ! ! H !! H ! L ! L ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - - - WRT I/O 204 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! CRAM ! CRM ADR ! SS !! DP ! STACK ! CRAM ! -! 0 ! 0 !! WRITE ! LOAD ! MODE !! RESET ! RESET ! RESET ! -! ! !! ! ! !! H ! H ! H ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT I/O 205 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! MAINT ! !! CLR 10 ! ! !! ! ! ! -! CLK ! MAINT !! INTERRUPT ! TRAP ! DIAG 10 !! DIAG 4 ! DIAG 2 ! DIAG 1 ! -! PULSE ! ENB !! L ! EN ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT I/O 206 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! 0 ! 0 !! 0 ! 0 ! 0 !! 0 ! SINGLE ! CLK RUN ! -! ! !! ! ! !! ! CLK H ! H ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT I/O 210 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! CHECK ! CONSOLE !! XMIT ADR ! XMIT DATA ! CRA T CLK !! CRA R CLK ! LATCH ! CLOSE ! -! NXM ! REQ !! (1) ! (1) ! ENB (1) !! ENB (1) ! DATA ! LATCHS ! -! ! !! ! ! !! ! (1) ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT I/O 212 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! 0 ! 0 !! 0 ! 0 ! 0 !! RUN ! EXECUTE ! CONTINUE ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - - WRT 100 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! RESET ! PE DETECT !! CRM PE ! DP PE ! CACHE !! 1 MSEC ! 0 ! 0 ! -! ! ENABLE !! DETECT ! DETECT ! ENABLE !! ENABLE H ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 101 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! MODEM !! ! ! ! -! 0 ! 0 !! 0 ! 0 ! DTR !! STATE ! REMOTE ! FAULT ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 102/103 DATA/ADR -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! DATA 28 ! DATA 29 !! DATA 30 ! DATA 31 ! DATA 32 !! DATA 33 ! DATA 34 ! DATA 35 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 104/105 DATA/ADR -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! DATA 20 ! DATA 21 !! DATA 22 ! DATA 23 ! DATA 24 !! DATA 25 ! DATA 26 ! DATA 27 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 106/107 DATA/ADR -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! DATA 12 ! DATA 13 !! DATA 14 ! DATA 15 ! DATA 16 !! DATA 17 ! DATA 18 ! DATA 19 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - WRT 110/111 DATA/ADR -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! DATA 4 ! DATA 5 !! DATA 6 ! DATA 7 ! DATA 8 !! DATA 9 ! DATA 10 ! DATA 11 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 112/113 DATA/ADR -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! 0 ! 0 !! 0 ! 0 ! DATA 0 !! DATA 1 ! DATA 2 ! DATA 3 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 114/115 ADR/DATA -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! 0 ! 0 !! 0 ! 0 ! BAD DATA !! COM/ADR ! I/O DATA ! DATA ! -! ! !! ! ! CYCLE !! CYCLE ! CYCLE ! CYCLE ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT 116 -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! CSL INTERRUPT ! -! 0 ! 0 !! 0 ! 0 ! 0 !! 0 ! 0 ! THE 10 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - - WRT I/O 200 CTY UART WRITE STATUS REGISTER(DATA BUFFER IS I/O 201) -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! HUNT MODE ! UART !! REQUEST ! RESET ! SEND !! RECEIVE ! TERMINAL ! TRANSMIT ! -! ON(SYNC) ! RESET !! TO SEND L ! ERRORS ! BREAK CHAR !! ENABLE ! READY ! ENABLE ! -! ! !! ! ! H !! ! L ! ! -****************************************************************************************************************************** - - -WRT I/O 200 CTY UART READ STATUS REGISTER(DATA BUFFER IS I/O 201) -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! DATA SET ! SYNC !! FRAMING ! OVERRUN ! PARITY !! TRANSMITTER ! RECEIVER ! TRANSMITTER ! -! READY ! DETECT !! ERROR ! ERROR ! ERROR !! EMPTY ! READY ! READY ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - -WRT I/O 202 REMOTE UART WRITE STATUS REGISTER(DATA BUFFER IS I/O 203) -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! HUNT MODE ! UART !! REQUEST ! RESET ! SEND !! RECEIVE ! TERMINAL ! TRANSMIT ! -! ON(SYNC) ! RESET !! TO SEND L ! ERRORS ! BREAK CHAR !! ENABLE ! READY ! ENABLE ! -! ! !! ! ! H !! ! L ! ! -****************************************************************************************************************************** - - -WRT I/O 202 REMOTE UART READ STATUS REGISTER(DATA BUFFER IS I/O 203) -****************************************************************************************************************************** -! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 ! -! ! !! ! ! !! ! ! ! -! ! !! ! ! !! ! ! ! -! DATA SET ! SYNC !! FRAMING ! OVERRUN ! PARITY !! TRANSMITTER ! RECEIVER ! TRANSMITTER ! -! READY ! DETECT !! ERROR ! ERROR ! ERROR !! EMPTY ! READY ! READY ! -! ! !! ! ! !! ! ! ! -****************************************************************************************************************************** - - - - \ No newline at end of file diff --git a/src/kshack/msg.m80 b/src/kshack/msg.m80 new file mode 100644 index 00000000..4b2e3838 --- /dev/null +++ b/src/kshack/msg.m80 @@ -0,0 +1,42 @@ +.IIF NDF,NOROOM INIER: .ASCIZ /?BUS\/ ;BUS POLLUTED ON POWER UP +BV: .ASCIZ /?BFO/ ;INPUT BUFFER OVERFLOW +CMDNG: .ASCII /?IL/ ;ILLEGAL INSTRUCTION + .BYTE ^O15,^O12,0 ;CR-LF +TTM: .ASCIZ /?UI\/ ;UNKNOWN INTERRRUPT +EBHED: .ASCIZ /BUS 0-35\/ ;MESSAGE HEADER FOR "EB" CMD +KSPRMT: .ASCII /KS10>/ ;PROMPT MESSAGE + .BYTE ^O377,0 +MSG10: .ASCIZ % CYC\SENT/% ;CYCLE TYPE FOR "DB" COMMAND +DRCVD: .ASCIZ %\RCVD/% ;DATA RECEIVED ON BUS(DB CMD) +ECVER: .ASCIZ %?A/B\% ;A & B COPIES OF CRAM BITS DID NOT MATCH +PCMSG: .ASCIZ %PC/% ;OBVIOUS +HLTMS: .ASCIZ .%HLTD/. ;MESSAGE "HALTED/XXXXXX" WHERE XXXXXX IS DATA +EXMS: .ASCIZ /?DNF\/ ;"DID NOT FINISH"-INSTR +BTFAIL: .ASCIZ /?BT / ;DEVICE ERROR OR TIMEOUT DURING BOOT OPERATION +BTMSG1: .ASCIZ /BT SW/ ;MESSAGE SAYS BOOTING, USING BOOT SW +SMERR: .ASCIZ /?DNC\/ ;"DID NOT COMPLETE"-THE HALT +OFFMSG: .ASCIZ /OFF\/ ;MESSAGE SAYS SIGNAL IS "OFF" +PARMSG: .ASCIZ /?PAR ERR / ;REPORT CLOCK FREEZE DUE TO PAR ERR +MOSMSG: .ASCIZ /?MRE\/ ;MEMORY REFRESH ERROR +ERRMSG: .ASCIZ /?BC / ;TA-DA....BOOT CHECK +RN.: .ASCIZ /?RUNNING\/ ;TRYING TO DO A CMD THAT MAY SCREW UP +NOA: .ASCIZ /?NDA\/ ;RECEIVED NO DATA ACKNOWLEDGE ON MEM REQUEST +NXMMSG: .ASCIZ /?NXM\/ ;REFERRENCED NON EXISTANT MEMORY LOCATION +NBR: .ASCIZ /?NBR\/ ;CONSOLE WAS NOT GRANTED BUS ON A REQUEST +RAG: .ASCIZ /?RA/ ;CMD REQUIRES ARGUEMENT..U GOTTA TYPE SOMETHING +BB1: .ASCIZ /?BN/ ;TYPED A BAD NUMBER(I.E 9 OR X OR # ETC.) +Q.UBA: .ASCIZ />>UBA?/ ;QUERY FOR UNIBUS ADAPTER +Q.RH: .ASCIZ />>RHBASE?/ ;QUERY FOR RH11 TO USE +Q.UNIT: .ASCIZ />>UNIT?/ ;QUERY FOR UNIT TO USE +Q.TCU: .ASCIZ />>TCU?/ ;QUERY FOR TAPE CONTROLL UNIT +Q.DEN: .ASCIZ />>DENS?/ ;QUERY FOR TAPE DENSITY +Q.SLV: .ASCIZ />>SLV?/ ;QUERY FOR TAPE SLAVE +KAMSG: .ASCIZ /?KA\/ ;KEEP ALIVE FAILED +FRCMSG: .ASCIZ /?FRC\/ ;HAD A FORCED RELOAD +PWLEN: .ASCIZ /?PWL/ ;PASSWORD LENGTH ERROR +NOACCS: .ASCII /?NA/ ;NOT AVAILABLE (KLINIK LINE THAT IS) + .BYTE ^O15,^O12,0 ;CR-LF +QPW: .ASCII /PW:/ ;ASK FOR A PASSWORD MESSAGE + .BYTE ^O15,^O12,0 ;CR-LF +AUTOMS: .ASCIZ /BT AUTO/ ;BEGINNING AUTO BOOT SEQUENCE + \ No newline at end of file diff --git a/src/kshack/store.m80 b/src/kshack/store.m80 new file mode 100644 index 00000000..986ae7e6 --- /dev/null +++ b/src/kshack/store.m80 @@ -0,0 +1,123 @@ +.SBTTL - SM10 DATA STORAGE PARAMETERS +;NOTE THAT ALL THESE LOCATIONS ARE RAM LOCATIONS +;AND MAY BE USED WITH THE +;ASSEMBLY OF SEPARATE MODULES OF CONSOLE CODE.... + .= RAMST +T80DT: .BLKB 2 +C80AD: .BLKB 2 +CRMAD: .BLKB 2 +BYTCNT: .BLKB 2 +CRMFN: .BLKB 2 +EMBUF: .BLKB 5 +MEMAD: .BLKB 5 +IOAD: .BLKB 5 +ENEXT: .BLKB 2 +DNEXT: .BLKB 2 +CHRBUF: .BLKB 5 +BUSAD: .BLKB 5 +DMDAT: .BLKB 5 +RAMX1: .BLKB 6 +RAMX2: .BLKB 6 +ER.LOC: .BLKB 3 ;PLACE TO EXECUTE 8080 "IN'S" AND "OUT'S" +TMPBF2: .BLKB 5 +TMPB2: .BLKB 5 +BLKNUM: .BLKB 5 +BLKADR: .BLKB 5 +EXM1: .BLKB 1 +NOPNT: .BLKB 1 +BT.TYPE: .BLKB 1 +P8.TMP: .BLKB 1 +ERADDR: .BLKB 1 +KLNKSW: .BLKB 1 +KPWPNT: .BLKB 2 +KPWCNT: .BLKB 1 +WATCHC: .BLKB 1 +CMDS..: .BLKB 1 +UNITNM: .BLKB 5 +TAPEUNIT: .BLKB 5 +SKP.GO: .BLKB 5 +BRKON: .BLKB 1 +BRKDT: .BLKB 2 +ERRCD: .BLKB 2 +USRMD: .BLKB 1 +RPEND: .BLKB 1 +RPCNTR: .BLKB 1 +BFCNT: .BLKB 1 +STPPD: .BLKB 1 +EIFLAG: .BLKB 1 +DIFLAG: .BLKB 1 +RNFLG: .BLKB 1 +CHKPAR: .BLKB 1 +CHKREF: .BLKB 1 +ECSAV: .BLKB 2 +RM100: .BLKB 8 +BTMSK: .BLKB 1 +BTNUM: .BLKB 1 +EOL: .BLKB 1 +AM.AI: .BLKB 2 +RPBUFS: .BLKB 2 +RPLST: .BLKB 2 +RPTON: .BLKB 1 +CHRCNT: .BLKB 1 +BUF.: .BLKB 2 +HLSAVE: .BLKB 2 +CMD..: .BLKB 2 +.ARG1: .BLKB 2 +CMCNT: .BLKB 2 +FIRST: .BLKB 2 +CHKHLT: .BLKB 2 +OCTSV: .BLKB 2 +SHRTAD: .BLKB 5 +RHBASE: .BLKB 5 +CSLMODE: .BLKB 1 +KACNTR: .BLKB 1 +MMFLG: .BLKB 1 +MAILFG: .BLKB 1 +VERCNT: .BLKB 1 +UBANUM: .BLKB 1 +GOCODE: .BLKB 1 +SECRET: .BLKB 1 +DIECNT: .BLKB 1 +CNTLQ.ON: .BLKB 1 +APTANS: .BLKB 1 +PASSWORD: .BLKB 7 +KPWBUF: .BLKB 6 +PWRTRY: .BLKB 1 +KLLINE.ON: .BLKB 1 +E.CNT: .BLKB 1 +CRMBF: .BLKB ^D16 +CRMTM: .BLKB ^D16 +KATIM1: .BLKB 2 +.IIF DF,SCECOD,SCEADR: .BLKB 2 ;LAST FAILING ADDRESS +MODDIS: .BLKB 2 +NOREND: .BLKB 2 +ENVPNT: .BLKB 2 +PARBT: .BLKB 1 +TRAPEN: .BLKB 1 +MTAUBA: .BLKB 1 +DSKUBA: .BLKB 1 +STATE: .BLKB 1 +LSTMSG: .BLKB 1 +DEN.SLV: .BLKB 5 +MTBASE: .BLKB 5 +DSBASE: .BLKB 5 +RPINI: .BLKB ^D25 +RPTBFI: .BLKB ^D50 +BUFBG: .BLKB ^D90 +BUFEN: .BLKB 1 +E.BUF: .BLKB 2 +E.BEG: .BLKB ^O140 +ENVMNO: .BLKB 1 +ENVCHK: .BLKB 1 +ENVBUF: .BLKB 70 ;EB IS LONGEST COMMAND WITH 67. CHARS +SYSIN: .BLKB 2 +SYSOUT: .BLKB 2 +SYSBUF: .BLKB ^O200 +SYSEND: .BLKB 1 ;AND EMPTY BYTE TO HOLD END OF LIST +.IF DF,SCECOD +SC.OFF: .BLKB 1 ;RECOVERY ON OR OFF FLAG +RHSAVE: .BLKB 40. ;BUFFER FOR SAVING RH STUFF +.ENDC +FREE: + .END ;END STATEMENT + \ No newline at end of file diff --git a/src/kshack/subrtn.m80 b/src/kshack/subrtn.m80 new file mode 100644 index 00000000..f13713ac --- /dev/null +++ b/src/kshack/subrtn.m80 @@ -0,0 +1,1472 @@ +.SBTTL ****KS10 CONSOLE SUBROUTINE FILE +;SUBROUTINE TO CHECK IF THE CPU IS RUNNING, AND IF IT IS, +;TO ABORT THE COMMAND THAT CALLED IT +.RUN..: POP H ;MUST FIX THE STACK + PUSH PSW ;SAVE FLAGS(STATE OF THE "C-BIT" + LDA RNFLG ;CHECK SOFTWARE RUN FLAG TO SEE IF CPU CLK ON + ANA A ;IS IT ZERO? , OR NOT ZERO + JNZ YSRUN ;IF NOT ZERO, JMP OFF TO PRINT MESSAGE + + POP PSW ;OTHERWISE, RESTORE FLAGS + RET ;AND OUT + +YSRUN: PLINE RN. ;MESSAGE TO SAY RUNNING.. + JMP MMERR ;NOW GO RESTART OURSELVES + + ;ROUTINE TO REPORT A PARITY ERROR WHEN DETECTED BY THE 8080 CONSOLE +RPTPAR: CLRB NOPNT ;TURN TYPING ON + XRA A ;ACCUM MUST BE ZERO + OUT CLKCTL ;KILL CLK, SO PAR ERR CLRING WONT RELEASE THE CPU CLKS + +.IF DF,SCECOD + LDA SC.OFF ;GET FLAG TO SEE IF WE CAN TRY FOR SOFT RECOVER + ANA A ;SET 8080 FLAGS + JNZ HRDERR ;IF FLAG .NE. 0, THEN WE WILL NOT RECOVER +;FIRST THING WE NEED TO DO IS CHECK FOR CRAM/CRA PARITY ERRORS, AND DECIDE +;IF WE CAN RECOVER FROM THEM + LONG.DELAY 1 ;LET DISK TRAFFIC STOP + MVI A,SMPAR ;GET WHICH REG HAS PARITY INFO IN IT + CALL ER.UTL ;READ DATA,PARITY BITS RETURNED IN ACCUM + CMA ;INVERT SO THAT .TRUE. .EQ. HI + ANI ^O22 ;SEE IF CRA/CRM ERROR TYPE + JZ HRDERR ;IF NO, GO FOR A HARD ERROR + +;WELL, LETS SEE IF MEM BUSY OR I/O BUSY + IN R.BUSY ;*****I/O RD 102***** + CMA ;FIX HARDWARE COMPLIMENT + ANI ^O60 ;SEE IF EITHER OF THOSE TWO BITS SET + MOV B,A ;SAVE RESULTS OF THIS "AND" FOR A BIT + IN REFERR ;SEE IF MEM REFRESH ERR EITHER + CMA ;FIX HARDWARE INVERSION + ANI 1 ;ONLY KEEP THE REFRESH BIT + ORA B ;THROW THE TWO TOGETHER..IF RESULTS .EQ. 0, THEN ALL OK + JZ SOFTERR ;IF NOTHING, GO TRY FOR THE SOFT ERROR RECOVERY + ;GET TO HERE IF ERROR IS CONSIDERED NON-RECOVERABLE +NR: PLINE NRSCE ;"?NR-SCE". NON RECOVERABLE-SOFT CRAM ERROR +.ENDC + + +HRDERR: CLRB CHKPAR ;SAY NOT TO REPORT AGAIN & AGAIN + CALL CLRUSE ;EXIT FROM USER MODE + PLINE PARMSG ;MESSAGE TO CTY + + IN SMPAR ;***** I/O RD PARITY ***** + CMA ;FIX THE HARDWARE INVERSION + CALL P8BITA ;AND PRINT IT OUT WITH THE ERROR MESSAGE + PSPACE ;SEPARATE THE 8 BIT DATUMS + IN ^O303 ;READ "DPM PARITY BIT" + CMA ;FIX CPU INVERSION + ANI ^O1 ;ONLY INTERESTED IN BIT 0 "DPM PAR ERR" + CALL P8BITA ;AND THEN PRINT THE "DPM PAR" DATA + PSPACE ;AGAIN, SEPARATE BY SPACES + IN ^O103 ;READ REG THAT HAS R PAR RIGHT & R PAR LEFT + CMA ;FIX THE HARDARE INVERSION + ANI ^O360 ;KEEP ONLY THE 2 "R PAR" BITS + CALL P8CRLF ;PRINT IT + CALL CLRRN ;CLEAR THE SOFTWARE "RUNNING" FLAG TOO + CALL LTFLT ;PARITY ERROR LIGHTS THE FAULT LIGHT + JMP REINI ;AND GO RE-INIT..PAR ERRS ARE FATAL +.IF DF,SCECOD + ;COMMAND LIST FOR READING UBA INFO +UBA.RD: UBA. 763,001 + ENDLST + +;RH11 COMMAND LIST FOR CHECKING FOR RECOVERABLE & NON RECOVERABLE +;STATES OF THE CONTROLLER +RH.TST: EI. D776,P.00 ;EXAM CONTROLLER STATUS REG + ERRTST 60000 ;TEST FOR FATAL ERRS + EI. D776,P.12 ;EXAM DRIVE STATUS REG + ERRTST 40000 ;CHECK THAT GUY FOR ERRS + ENDLST ;HERE IF ALL OK + +RH.EXE: EI. D776,P.00 ;A TEMPLATE FOR RH EXAMINES + ENDLST ;THAT'S ALL WE NEED FOR THIS + +SAVLST: .BYTE P.00 ;READ 776700 + .BYTE P.02 ;READ 776702 + .BYTE P.04 ;READ 776704 + .BYTE P.06 ;READ 776706 + .BYTE P.10 ;READ 776710 + .BYTE P.32 ;READ 776732 + .BYTE P.34 ;READ 776734 + .BYTE -1 ;END OF LIST MARKER +;THE ASCII MESSAGES REQUIRED FOR PARITY RECOVERY +NRSCE: .ASCIZ/?NR-SCE / ;NOT RECOVERABLE SOFT CRAM ERROR +OKSCE: .ASCIZ/%SCE / ;RECOVERABLE SOFT CRAM ERROR + ;NOW GET THE CURRENT CRAM ADDRESS & CHECK FOR HARD CRAM ERRORS. +;(NOTE: A HARD CRAM ERROR IS A CRAM PARITY ERROR OCCURRING AT +;THE SAME CRAM ADDRESS MORE THAN ONCE IN A ROW) +SOFTERR: LXI D,SCEADR ;"D,E" PAIR WILL POINT AT THE DESIRED + CALL BREAK ;GO CHECK IF CURRENT .EQ. DESIRED.. + JZ HRDERR ;IF YES, JUMP 'CAUSE ITS A HARD ERROR + +;SOFT CRAM ERRO RECOVERY CONTINUED.... +;RECOVERY BEGINS BY ZAPPING THE PE(1) FLOP SO WE MAY CATCH ANY ADDITIONAL +;PARITY ERRORS + MVI A,1 ;BIT TO RESET CRAM C.R. & PE(1) + OUT CRMCTL ;***** I/O WRT/204 ***** + +;FALL THRU IF ADDRESS NOT THE SAME +NOTSAME: SHLD SCEADR ;SAVE IT AS THE NEW "PREVIOUS" + +;NOW CHECK RH11 TO SEE IF THIS FAILURE IS RECOVERABLE FOR THE +;MONITOR. 8080 WILL SIMPLY EXECUTE A CHANNEL COMMAND LIST +;OF "ERRTST" , WITH THE CORRECT ERROR BITS CHECKED FOR + LXI H,RH.TST ;POINT TO ERROR CHECKER COMMAND LIST + CALL CHNXCT ;EXECUTE THAT LIST + JC NR ;IF BAD, SAY NOT RECOVERABLE +;ELSE...FALL INTO THE SOFT RECOVERY CODE + ;FINALLY GET TO HERE IF THIS THING LOOKS RECOVERABLE. NOW WE MUST +;BEGIN SAVING THINGS... +;FIRST.. GET THE CURRENT DISK UBA NUMBER TO SET UP THE RH11 REGISTER +;SAVING. THEN WE MUST SET UP THE RH11 BASE REGISTER ITSELF +;WHILE WE ARE AT IT, MIGHT AS WELL PRINT A LITTLE MESSAGE SAYING WHAT WE ARE +;DOING IN HERE +RECVR: PLINE OKSCE ;ERR MSG "%SCE" SOFT CRAM ERROR + LXI H,SCEADR ;NOW POINT TO THIS BAD ADDRESS + CALL P16 ;AND PRINT IT + PCRLF ;TERMINATE EVERYTHING WITH A CR-LF + CALL DSKDFT ;NOW GET THOSE DEFAULTS JUST MENTIONED + XRA A ;CLEAR ACCUM + OUT RESET ;*****I/O WRT 100***** NO PAR CHECKING + +;FINALLY READY TO BEGIN THE ACT OF SAVING SOME REGISTERS +;FIRST GET UBA LOCATION 763001 + LXI H,UBA.RD ;POINTER TO UBA READ-IN LIST + CALL CHNXCT ;READ-IN THE UBA INFO.. NOW ITS IN EMBUF + INTON ;DON'T PRINT THIS + CALL EI1 ;ACTUALLY DO THE READ-IN + INTOFF ;OK NOW + +;BEFORE WE SAVE IT, WE WILL SET UP FOR SAVING RH REGISTERS.. THAT WAY, WE +;CAN USE SOME COMMON CODE FOR PUTTING DATA INTO OUR SAVE BUFFER. + LXI B,RH.EXE ;NOW POINT TO A CHANNEL COMMAND LIST + LXI D,RM100 ;AND POINT TO A PLACE TO PUT THE LIST + MVI A,6 ;IT TAKES SIX BYTES TO MOVE THE ENTIRE LIST + CALL M5B ;MOVE THE STUFF TO RAM + ;THE CODE TO MOVE BYTES REQUIRES "B,C" POINTING TO THE SOURCE +;AND "D,E" POINTING TO THE DESTINATION +;AND "A" HAVING HOW MANY BYTES TO BE MOVED.. "MOVREG" DOES 5 BYTES +;FREE OF CHARGE..B,C AND D,E ARE UPDATED BY THE NUMBER OF BYTES MOVED. + LXI H,SAVLST ;POINT TO A LIST OF THINGS WHICH WE MUST SAVE + PUSH H ;PLACE IT IN THE RAM FOR SAFE KEEPING + LXI D,RHSAVE ;D,E GETS THE POINTER TO THE SAVE AREA +RH.LP: LXI B,EMBUF ;WE WILL ALWAYS BE MOVING STUFF FROM "EMBUF" + CALL MOVREG ;MOVE 5 BYTES, PLEASE + +;TO SAVE THE RH REGISTERS, WE WILL PUT A TINY CHANNEL COMMAND +;LIST INTO RAM SPACE, THEN EXECUTE IT, CHANGING THE DESIRED REGISTERS +;BETWEEN READS, WHICH WILL GIVE US A CHANCE TO SAVE THE RESULTS +;OF THE READ + POP H ;GET POINTER INTO "REG TO BE SAVED" BUFFER + MOV A,M ;GET CURRENT BYTE INTO ACCUM + STA RM100+1 ;PUT BYTE INTO BUFFER SO CAN BE EXECUTED + INR A ;UP BY ONE + JZ SCE.GO ;IF THAT MAKES .EQ. 0, THEN OUT + + INX H ;ELSE UPDATE POINTER + PUSH H ;SAVE THE POINTER TOO + LXI H,RM100 ;PREPARE TO EXECUTE THE READIN BUFFER + PUSH D ;NOW SAVE THE SPOT WE ARE IN IN THE RHSAVE AREA + CALL CHNXCT ;DO IT..ONE RH REGISTER IS IN + POP D ;RETRIEVE POINTER TO THE DATA SAVE SPACE + JMP RH.LP ;SAVE INFO, AND READ IN NEXT RH REGISTER + ;NOW DATA HAS BEEN SAVED, WE CAN ACTUALLY BEGIN TO RESTORE THE MICRO-CODE +SCE.GO: INTON ;SET INTERNAL MODE + LXI D,^O1002 ;PLACE IN DISK PAGE OF POINTERS TO MICRO-CODE + CALL FILESH ;GO READ IN THE FIRST PAGE OF MICRO-CODE + JC C.BTERR ;IF ERR ITS ALL OVER + + CALL DMEM2CR ;GO LOAD CRAM + + LHLD SCEADR ;GET ADDRESS AT WHICH TO CONTINUE + CALL CADWR ;SET THE CRAM ADDRESS TO THE GUY THAT SLIPPED +;WE ARE NEARING THE END OF THIS RECOVERY STUFF.. WE MUST RESTORE THE STATE +;OF THE RH11 AND UBA TO WHAT IT WAS BEFORE WE STARTED, THEN WE CAN TURN THE +;CLOCKS ON AGAIN + LXI H,UBA.RD ;POINT TO A UBA READ CHANNEL COMMAND LIST + CALL CHNXCT ;SET THE I/O ADDRESS TO A UBA PAGE REGISTER + +;NOW FIX UP THE FORMAT BETWEEN A READ OF THE UBA PAGING REG, AND +;THE WRITE WE WISH TO DO TO THE PAGING RAM + LDA RHSAVE+3 ;GET THE BYTE THAT HAS THE CURRENT CNTRL BITS + ANI ^O170 ;OFF JUNK, KEEP ONLY 4 RELEVANT BITS + MOV C,A ;SAVE IN THE C REG + LXI H,RHSAVE ;NOW POINT TO OUR BUFFER WITH THE DESIRED INFO + CALL SHR36 ;SHIFT DATA RIGHT, 4 PLACES + .BYTE 4 + + MOV A,C ;GET OUR CONTROL BITS BACK + STA RHSAVE+2 ;PLOP THEM INTO THE 36 BIT WORD + CALL SHR36 ;NOW SHIFT THE WHOLE MESS 5 MORE PLACES + .BYTE 5 + +;AND THATS IT.. MOVE STUFF TO A DEPOSIT BUFFER + MOV5B ;A "MOVE" + .ADDR RHSAVE ;FROM THE SAVE BUFFER + .ADDR DMDAT ; TO THE DEPOSIT BUFFER + CALL DI1 ;WRITE THIS MESS BACK TO UBA PAGING RAM + ;NOW WE WANT TO WRITE BACK THE RH11 REGISTERS THAT WE SAVED, THEN DESTROYED + LXI H,RH.EXE ;NOW SET THE RH11 REGISTER I.D. INTO THE + CALL CHNXCT ;INTERNAL BUFFER "IOAD",INCLUDING UBA NUMBER + + LXI H,SAVLST ;POINT TO LIST OF REGS TO BE RESTORED + PUSH H ;SAVE THIS INFO ON THE STACK + LXI B,RHSAVE+5 ;WILL BEGIN MOVING STUFF WE SAVED FROM RH +DI.LP: LXI D,DMDAT ;ALWAYS MOVE THE STUFF TO THE DEPOSIT BUFFER + CALL MOVREG ;MOVE THE STUFF INTO "DMDAT" + POP H ;GET OUR LITTLE LIST POINTER + LDA IOAD ;GET CURRENT OFFSET INTO RH + ANI ^O300 ;THROW AWAY CURRENT OFFSET + ORA M ;THROW OUR DESIRED OFFSET INTO THE WORD + STA IOAD ;PUT IT BACK INTO THE IOAD BUFFER + MOV A,M ;GET THE OFFSET WE JUST MESSED WITH + INR A ;TEST TO SEE IF END OF LIST + JZ CONT.I ;IF END OF LIST, FINISH THE RECOVERY + +;NOT END OF LIST, MUST SAVE SOME MORE RH REGISTERS + INX H ;UPDATE THE LIST POINTER + PUSH H ;SAVE THE POINTER + PUSH B ;SAVE POINTER TO THE SAVED DATA IN "RHSAVE" + CALL DI1 ;NOW RESTORE THIS RH REGISTER + POP B ;RESTORE POINTER INTO BUFFER + JMP DI.LP ;CONTINUE + +CONT.I: CALL SMFINI ;GET CURRENT PARITY DEFAULTS & WRITE THEM OUT + CALL CSCMD ;TURN THE CLOCK BACK ON + INTOFF ;NO MORE INTERNAL MODE + JMP NULLJ ;GO +.ENDC + ;ROUTINE TO CHECK IF CURRENT RAM ADDRESS IS THE DESIRED BREA +;ADDRESS.. +BREAK: PUSH D ;"D,E" HAS POINTER TO DESIRED ADDR, SAVE IT PLEASE + MVI A,3 ;DIAG FUNC TO READ CURRENT RAM ADDR + CALL READC ;GO DO FUNCTION READ + POP D ;NOW MAKE "D,E" POINT AT DESIRED AGAIN + + LHLD TMPB2 ;GET CURRENT ADDRESS.. + MOV A,H ;ALSO MAKE SURE THE CURRENT JUST READ IS 11 BITS + ANI ^O7 ;8 BITS LO HALF, PLUS 3 BITS HI HALF + MOV H,A ;NOW PUT THE WHOLE MESS BACK + + LDAX D ;GET LO ORDER PIECE TO ACCUM + CMP L ;CHECK VERSUS JUST READ + RNZ ;IF .NE. 0, THEN NO MATCH, SO OUT.. + INX D ;OK, SO UPDATE PNTR TO READ-IN + LDAX D ;GET HI ORDER OF DESIRED PIECE + CMP H ;COMPARE, SIGNS TAKE CARE OF THEMSELVES + RET ;IF RESULT OF ADD WAS ZERO, GOOD.IF NOT,OK TOO.. + +;ROUTINE TO DO SHORT FORM OF EXAMINE MEMORY +;ENTER WITH "D,E" CONTAINING SHORT ADDRESS +EXAMSH: STC ;SET C-BIT FOR LATER USE IN COMMON CODE +DEPSHT: XTHL ;SWAP SO H,L POINTS TO TRAILING ARG + CALL TARG1 ;COLLECT TRAILING ARG INTO "D,E" + XTHL ;SWAP BACK SO THAT THINGS ARE RIGHT + XCHG ;AND NOW MAKE "H,L" HOLD THE TRAILING ARG +EXMHL: SHLD SHRTAD ;STORE SHORT ADDRESS IN THE RAM + LXI D,SHRTAD ;DE, GETS REPLACE WITH A POINTER TO SHORT ADDRESS + PUSH PSW ;SAVE THE C-BIT FOR LATER USE + CC EMINT ;IF C WAS SET, GO DO AN EXAMINE + POP PSW ;GET FLAGS AS THEY WERE + CNC DMINT ;IF C WAS CLR DO A DEPOSIT + RET ;NOW OK TO RETURN + +;ROUTINE THAT EXECUTES AN "ARG16", THEN RETURNS THE DATA IN "H,L" +ARG16.: ARG16 ;ARGUMENT ASSEMBLER + .ADDR T80DT ;USE A TEMP LOCATION + + LHLD T80DT ;GATHER DATA INTO H,L + RET ;AND BACK + ;SUBROUTINE TO PRINT A SINGLE 8-BIT BYTE AS OCTAL DATA +;OF THE FORM: XXX +;NO REGS DESTROYED..PNTR TO 8-BIT BYTE PASSED IN "H,L" +P8BIT: PUSH H ;SAVE ALL REGISTERS +P8BIT1: PUSH B + PUSH D + PUSH PSW + CALL OCTAL ;CREATE 8-BIT BUFFER AS A 3 OCTAL CHARACTERS + .BYTE 1 ;ONE BYTE OF BINARY DATA INVOLVED + .BYTE 3 ;WANT ONLY 3 OCTAL CHARS + MVI C,03 ;NUM CHARS TO PRINT +P8LP: POP PSW ;CHAR OFF TOP OF STACK + CALL PCHR ;AND GO PRINT IT + DCR C ;DOWN COUNT + JNZ P8LP ;AND CONTINUE TILL DONE ALL 3 + + POP PSW ;RESTORE REGS + POP D + POP B + POP H + RET ;AND ALL DONE + + +;WHEN DOING A "P8BIT" WITH THE DATA PASSED IN THE ACCUM +;INSTEAD OF BEING POINTED TO BY H,L THEN COME HERE +P8BITA: PUSH H ;MUST SAVE H,L HERE, SO WE CAN MESS IT UP + LXI H,P8.TMP ;KEEP A PLACE FOR PRINTING DATA + MOV M,A ;PUT THE THING TO BE PRINTED IN THE RAM SPACE + JMP P8BIT1 ;GO TO COMMON CODE + ;SUBROUTINE TO PRINT 16-BITS WORTH OF DATA.. +;POINTER TO THAT DATA IS PASSED TO THE ROUTINE IN +;REGISTER "H,L" +P16.: LXI H,TMPB2 ;IN THIS TYPE CALL, WE LOAD H,L AUTOMATICALLY +P16: PUSH PSW ;SAVE ALL THE REGISTERS + PUSH B + PUSH D + PUSH H + + CALL OCTAL ;CREATE OCTAL CHARS FROM THE 16-BIT DATA + .BYTE 2 ;WE HAVE 2 BYTES OF RELEVANT DATA + .BYTE 6 ;AND WE WANT 6 OCTAL CHARS TO PRINT + + MVI B,6 ;ON RETURN WE WANT TO PRINT 6 CHARS +P16LP: POP PSW ;GET OCTAL CHAR OFF STACK + CALL PCHR ;AND GO PRINT IT + DCR B ;DOWN THE COUNT + JNZ P16LP ;BACK TO PRINT MORE TILL ALL DONE + + POP H ;DONE..NOW RESTORE ALL REGS + POP D + POP B + POP PSW + RET ;AND RETURN + ;SUBROUTINE PRINT 36-BIT BINARY DATA AS +;A 12-OCTAL DIGIT CHARACTER STRING IN THE FORM: +; XXXXXX,,XXXXXX -NO REGS DESTROYED-BIN DATA PNTR PASSED IN "H,L" +P36.: LXI H,EMBUF ;IN THIS CALL, WE LOAD H,L AUTOMATICALLY +P36: PUSH PSW ;WILL SAVE ALL REGS IN HERE + PUSH B + PUSH D + PUSH H + CALL OCTAL ;CREATE 36-BIT BUFFER AS AN OCTAL CHARACTER STRING + .BYTE 5 ;5BYTES REQUIRED BY 36-BITS + .BYTE ^D12 ;WANT 12 OCTAL DIGITS + + CALL PHALF ;PRINT 18 BITS +;IF HERE, JUST FINISHED FIRST PASS, NEED 2 COMMAS. + PCHAR COMMA + PCHAR COMMA ;PRINT ",," +P36RH: CALL PHALF ;PRINT 18 MORE BITS... + POP H ;NOW RESTORE ALL THE REGS + POP D + POP B + POP PSW + RET ;RETURN + +;ROUTINE PRINTS 18 BITS AS 6 OCTAL CHARS +PHALF: POP H ;GET A RETURN ADDR OFF STACK,SO STACK IS CLR + MVI B,6 ;"B" WILL BE A COUNTER, IN IT WITH 3 +P36L2: POP PSW ;CHARACTERS TO ACCUM + CALL PCHR ;PRINT IT + + DCR B ;DOWN COUNT + JNZ P36L2 ;CONTINUE IF NOT DONE 6 CHARS YET + PCHL ;RETURN + + +;ROUTINE TO ALONE PRINT 18 BITS +P18: PUSH PSW ;WILL SAVE ALL REGS IN HERE + PUSH B + PUSH D + PUSH H + CALL OCTAL ;CREATE 6 OCTAL CHARS + .BYTE 3 ;3 BYTES HAVE RELEVANT DATA + .BYTE 6 ;AND DESIRE 6 OCTAL CHARS + + JMP P36RH ;GO TO RIGHT HALF PRINTER FROM "P36" + ;UNIVERSAL BINARY DATA TO ASCII CHARACTER SUBROUTINE +;ROUTINE DESTROYS THE CONTENTS OF ALL REGISTERS +;PASS POINTER TO BINARY DATA IN "H,L" ,THEN CALL APPROPRIATE +;COVERSION DESIRED WITH 2 TRAILING PARAMETERS-CHARS PLACED ON STACK, MSB-LSB +; CALL ROUTINE +; DB XX ;NUMBER OF BYTES HOLDING RELEVANT BINARY DATA +; DB YY ;NUMBER OF ASCII CHARACTERS TO BE GENERATED +;ROUTINES ARE "OCTAL", "BINRY", AND "HEXIDECIMAL" + + +;CODE WAS NEVER USED..KEEP TEXT HERE JUST IN CASE WE EVER NEED TO ADD IT.. +;THIS WAY WE WON'T HAVE TO FIGURE IT ALL OUT AGAIN +;BINRY: LXI D,^O401 ;LOAD D=1,E=1 +; JMP COMEN ;GO TO COMMON CODE + +OCTAL: LXI D,^O1407 ;LOAD D=3,E=7 + XCHG ;SWAP "D,E" WITH "H,L" + SHLD BTMSK ;SET DATA INTO "BTMSK" & "BTNUM" + +;POINTER TO BIN DATA NOW IN "D,E" + XTHL ;"H,L" NOW POINTS TO TRAILING ARGS + MOV B,M ;BOMB "B" REGISTER, NOW CONTAINS "NUM" BYTES + INX H ;UPDATE PNTR + MOV C,M ;NUM CHARS INTO C + INX H ;AND UPDATE PNTR TO RET ADDR + + SHLD HLSAVE ;SAVE RETURN IN RAM + POP H ;CLEAR OLD STUFF OFF STACK + PUSH B ;SAVE "B,C" JUST TEMPORARILY + + LXI H,TMPBF2 ;"H,L" NOW POINTS TO TEMPORARY BUFFER +;IF FALL TO HERE, MUST MOVE DATA FROM BINARY BUFFER TO TEMP BUFFER +OCTL1: LDAX D ;DATA POINTED TO BY "D,E" TO ACCUM + INX D ;BUMP POINTER + MOV M,A ;SET THAT DATA IN RAM + INX H ;BUMP POINTER + DCR B ;DONE ALL BYTES YET? + JNZ OCTL1 ;BACK TILL MOVED ALL. + + POP B ;RESTORE "B,C" AND GO + + LXI H,TMPBF2 ;"H,L" NOW PNTS TO TMP BUFF + XRA A ;CLEAR ACCUM + MOV D,A ;CLEAR "D" REG + MOV E,B ;BYTE COUNT TO "E" + DCR E ;BUFF IS ALWAYS 1 LESS THAN BYTE COUNT + DAD D ;"H,L" GETS BUFF ADDR PLUS BYTE COUNT + SHLD OCTSV ;AND SAVE THIS ADDR IN THE RAM + ;HERE WILL BEGIN TRANSLATION FROM BINARY TO CHARACTERS +OCTLC: LXI H,TMPBF2 ;"H,L" NOW POINTS TO TEMPORARY BUFFER + LDA BTMSK ;NOW GET BIT MASK + ANA M ;AND TO KEEP ONLY DESIRED CHARS + + ADI ^O60 ;MAKE INTO ASCII +;NOW MUST ROTATE ENTIRE BUFFER 3 PLACES TO RID OURSELVES OF CHAR JUST PROCESSED + PUSH PSW ;NOW SAVE CHARACTER WEVE JUST CREATED + DCR C ;DOWN THE CHAR COUNT + JZ OCTL5 ;JUMP OUT IF PROCESSED ALL CHARS + LDA BTNUM ;GET NUM BITS INTO ACCUM + MOV D,A ;"D" GETS INITAL COUNT OF BITS + +OCTL3: MOV E,B ;"E" GETS BYTE COUNT + LHLD OCTSV ;GET UPDATED BUFF PNTR TO "H,L" + ANA A ;CLEAR "C-BIT" + +OCTL4: MOV A,M ;GROUP OF BINARY BITS TO ACCUM + RAR ;BIT 0 INTO "C" BIT + MOV M,A ;AND SHIFTED DATA BACK INTO MEM + DCX H ;STEP UP IN THE BUFFER (UPSIDE-DOWN BUFFER) + DCR E ;DOWN BYTE COUNT + JNZ OCTL4 ;CONTINUE WITH BUFFER + DCR D ;DONE BUFFERS WORTH, SEE IF DONE ALL 3 BITS WORTH + JNZ OCTL3 +;DONE THE 3-BITS, NOW CONTINUE WITH NEXT CHARACTER + JMP OCTLC ;GO PROCESS NEXT CHARACTER + +;HERE WHEN DONE ALL CHARS. +OCTL5: LHLD HLSAVE ;GRAB THE RETURN ADDRESS + PCHL ;AND RETURN + ;SUBROUTINE TO SHIFT 36-BIT DATA BUFFER SOME +;NUMBER OF PLACES TO THE RIGHT.. ADDRESS OF BUFFER TO BE +;SHIFTED IS PASSED IN "H,L"..NUMBER OF PLACES FOR IT +;TO BE SHIFTED IS PASSED AS A TRAILING PARAMETER +;IN A BYTE TRAILING THE SUBROUTINE CALL +; CALL SHR36 +; .BYTE XX ;NUM PLACES TO SHIFT + +SHR36: MVI A,5 ;A SHIFT 36 REQUIRES 5 BYTES TO BE MOVED +SHR24: +SHRGO: XTHL ;POINTER TO TRAILING BYTE INTO "H,L" + PUSH B ;SAVE ALL THE REGISTERS + MOV B,M ;NUMBER PLACES TO SHIFT IN "B" + + INX SP ;BUMP STACK POINTER AROUND THE SAVED "B,C" + INX SP + INX H ;NOW BUMP RETURN ADDRESS PAST THE TRAILING ARG + XTHL ;AND PUT IT BACK ONTO THE STACK + DCX SP ;NOW FIX STACK SO THAT SAVED "B,C" IS BACK ON TOP + DCX SP + PUSH D + PUSH H + + MOV E,A ;NUMBER OF BYTES INVOLVED WAS IN A, SAVE IN E + + DCR A ;FIX COUNT + ADD L ;AND NOW ADD COUNT TO "H,L" ADDRESS + MOV L,A ;PUT BACK INTO LO ORDER + MOV A,H ;GET HI PIECE + ACI 0 ;AND ADD A CARRY TO H IF THERE WAS ONE + MOV H,A ;NOW PUT IT BACK + + PUSH H ;AND PUT ON STACK FOR REUSE + +S36BL: POP H ;FETCH SAVED, UPDATED ADDRESS + PUSH H ;NOW SAVE "H,L" + MOV C,E ;GET NUMBER BYTE INVOLVED INTO C AGAIN + ANA A ;CLEAR THE C-BIT + +S36LP: MOV A,M ;GET BYTE FROM BUFF TO ACCUM + RAR ;SHIFT IT RIGHT + MOV M,A ;NOW PUT IT BACK INTO THE BUFFER + DCX H ;NEXT BYTE + + DCR C ;WAIT!..HAVE WE DONE ALL BYTES YET?? + JNZ S36LP ;BACK INTO LOOP IF NOT YET + ;FALL THRU WHEN DONE THE 5 BYTES + DCR B ;DONE NUMBER OF TIMES YET?? + JNZ S36BL ;JUMP IF YES DONE ALL + +;HERE WHEN ALL DONE + POP H ;RESTORE THE "H,L"+X + POP H ;RESTORE "B,C" + POP D ;RESTORE "D,E" + POP B ;RESTORE "H,L" + RET + ;ROUTINE TO ASSEMBLE 16-BIT ARGUMENT +;PLACE TO PUT 16-BIT DATA PASSED AS A TRAILING +;ARG... "B,C" IS MESSED UP BY THIS ROUTINE + +; CALL ARG16 +ARG96: MVI A,12. ;NUMB BYTES USED IN ARG96 IS 12 + JMP ARGBG1 + +.ARG36: MVI A,5 ;NUMB BYTES USED IN ARG36 IS 5 + JMP ARGBEG + +.ARG16: MVI A,2 ;NUMB BYTES USED IN ARG16 IS 2 +ARGBEG: POP H ;GET H,L FROM TRAP HANDLER +ARGBG1: STA CHRCNT ;SAVE IT + LDA RPTON ;IS THIS A REPEAT?? + ANA A ;CHECK THE REPEAT FLAG + JNZ CLEAN ;JUMP IF YES A REPEAT.... + +;ELSE FALL THRU AND "GET" CHARACTERS AS BINARY DATA + LHLD .ARG1 ;GET PNTR TO ARG + LXI B,00 ;CLR REGS "B,C" + +GETLP: MOV A,M ;GET AN ASCII CHARACTER + SUI ^O60 ;OTHERWISE, OFF ASCII STUFF + ANI ^O370 ;NOW BE SURE IT WAS NUM AND NOT CHAR + JNZ GETEN ;IF HAD BITS GO SEE IF PROPER ENDING + MOV A,M ;MESSED UP CHAR, GET IT BACK + SUI ^O60 ;OFF THE ASCII AGAIN + PUSH PSW ;SO WE CAN STACK IT + + INR C ;WAS OK.. SO UP COUNT + INX H ;AND UPDATE TO NEXT CHAR + JMP GETLP ;AND CONTINUE TILL DONE + +;JUMP TO HERE WHEN STACKED ALL THE CHARS +GETEN: CALL SEPCHR ;THROW OUT TRAILING SPACES & TABS + SHLD .ARG1 ;SAVE "H,L" + CALL EOCML ;END OF LINE?? + JNC KILNM ;IF NOT WE HAVE A PROBLEM + + LHLD RPBUFS ;GET PNTR TO REPEAT DATA BUFFER + XRA A ;CLR ACCM + MOV M,A ;CLR THE "BYTE" COUNTER + INX H ;UPDATE POINTER + + MOV E,L ;COPY POINTER INTO "D,E" REG + MOV D,H + DCR C ;MAKE C START AT COUNT-1 + + RPINCB: PUSH D ;H,L SHOULD BE SAME AS D,E + POP H ;SO DO IT USING STACK + INX D ;EXCEPT D,E SHOULD BE + INX D ;3 GREATER + INX D + + PUSH H ;SAVE H,L FOR A MINUTE + LHLD RPBUFS ;WHILE THE "BYTE" COUNTER GETS UPDATED + MOV A,M ;COPY CURRENT COUNT + ADI 3 ;UPDATE BY 3 + MOV M,A ;NOW PUT IT BACK + POP H ;AND FIX UP H,L + + MVI B,8. ;B GETS A COUNT OF 8 FOR OUR LOOP +A16PK: POP PSW ;GET 3-BIT BINARY + +ARGQQ: STAX D ;AND PUT INTO TMP BUFFER + +;DONT MESS UP "H,L", ITS NEEDED BY "SHR36" ROUTINE + CALL SHR36 ;SHIFT THING 36 PLACES + .BYTE 3 ;SHIFT 3 PLACES + + DCR C ;DOWN CHAR COUNT + JP NOTRK ;FOOL THE 8-TIME LOOP IF GOES MINUS + XRA A ;CLR ACCUM,IN ORDER TO PAD WITH ZEROES + DCR B ;DOWN OUR "8" COUNTER + JZ CHKSTK ;AND OUT IF ZERO + JMP ARGQQ ;ELSE CONTINUE LOOPING + +NOTRK: DCR B ;DOWN COUNT THE 8-TIME LOOP + JNZ A16PK ;IF STILL DOING 8-TIMES + +;DONE 8-TIMES..NOW CHECK IF C HAS GONE TO ZERO +CHKSTK: MOV A,C ;COPY C TO ACCM TO CHECK IF ZERO + ANA A ;.EQ. 0?? + JP RPINCB ;JUMP IF NOT YET.. + + ;ELSE FALL THRU..MUST NOW MOVE ASSEMBLED NUMBER TO DESTINATION +CLEAN: LHLD RPBUFS ;GET BYTE COUNTER FOR THIS DATA + MOV B,M ;NOW B HAS COUNT OF NUMBER BYTES ASSY'D + INX H ;FIX H,L UP AGAIN.. +;NOW H,L HAS SRC..D,E HAS FF.. STACK HAS PC + XTHL ;SWAP-EEE + CALL TARG1 ;ASSEMBLE DEST ADDR INTO D,E + XTHL ;SWAP-EEE BACK + + LDA CHRCNT ;GET NUMB CHARS DESIRED BY THIS ROUTINE + MOV C,A ;C NOW HAS DESIRED..B HAS NUMB CHAR ASSY'D +MOVLP: MOV A,M ;START MOVING CHARS TO DESTINATION + STAX D ;CHAR TO DEST.. + INX H ;UPDATE SRC POINTER + INX D ;UPDATE DEST POINTER + DCR C ;DOWN THE DESIRED COUNT + JZ FIXPNT ;IF GOT DESIRED NUMBER,DONT PASS ANY MORE + + DCR B ;DOWN THE ASSY'D COUNT + JNZ MOVLP ;KEEP ON KEEPIN' ON + +;WHEN FALL THRU WEVE MOVED ALL THAT WE CAN..NOW PAD THE BUFFER + MOV A,B ;CLR ACCUM..B MUST BE ZERO +PADLP: DCR C ;DOWN THE DESIRED COUNT + JM FINARG ;IF THAT'S MINUS, WERE ALL DONE.. + STAX D ;OTHERWISE STACK A ZERO + INX D ;UPDAT DEST POINTER + JMP PADLP ;AND CONTINUE TILL DONE + +FIXLP: INX H ;MUST UPDATE BUFFER POINTER +FIXPNT: DCR B ;DOWN THE ASSEMBLED COUNT + JNZ FIXLP ;AND GO BACK TO ADJUST POINTER IF NOT ZERO + +FINARG: SHLD RPBUFS ;NOW PUT BACK OUR LITTLE POINTER + RET ;AND GET OUT + ;ROUTINE FOR SHUFFLING BITS FOR A NICE CRAM FORMAT +PLACE: MOV A,M ;GET PIECE OF SRC BYTE + STAX D ;PLACE AT DESTINATION + INX H ;UPDATE SRC POINTER + INX D ;UPDATE DESTINATION POINTER + MOV A,M ;GET UPPER 4 BITS OF 12 BIT CHUNK + ANI ^O17 ;MAKE SURE ONLY 4 BITS WORTH + STAX D ;AND PLACE AT THE DESTINATION + INX D ;DESTINATION UPDATE + DCX H ;BACKUP THE SRC POINTR TO BEGIN OF 24 BITS + RET ;AND RETURN + + ;ROUTINE TO COMPLETE THE TRAP HANDLING TYPE OPERATION WHICH CHANGES +;A NORMAL 3 BYTE SUBROUTINE CALL INTO A 2 BYTE TRAP TYPE CALL.. +;IT COSTS 3 BYTES TO ADD ANY SUBROUTINE TO THE TRAP CALL,SO THAT YOU SAVE +;AT LEAST ONE BYTE FOR ANY SUBROUTINE THAT IS CALLED 3 TIMES..AND YOU SAVE +;ONE BYTE FOR EACH ADDITIONAL TIME IT IS CALLED +RTNDIS: LXI H,DLIST ;GET POINTER TO DISPATCH LIST + PUSH PSW ;SAVE STATE OF PROCESSOR FLAGS + PUSH D ;SAVE "D,E"..TRAP CANT DESTROY REGS + ADD L ;ADD OFFSET IN ACCUM TO ADDRESS. + MOV L,A ;PUT ADDR PLUS OFFSET BACK + MOV A,H ;GET HI ORDER PIECE + ACI 0 ;NOW ADD IN A CARRY IF THERE WAS ONE + MOV H,A ;PUT IT BACK + + MOV E,M ;NOW GO FETCH ADDR TO BE DISPATCHED TO + INX H ;UPDATE TO NEXT + MOV D,M ;NOW FETCH HI ORDER PIECE OF ADDR TO BE DISPATCHED TO + XCHG ;GET DISPATCH ADDR INTO H,L + POP D ;RESTORE D,E...NOW ONLY H,L //RET ADDR ON STACK + POP PSW ;RESTORE PROCESSOR FLAGS + PCHL ;DISPATCH TO APPROPRIATE SUBROUTINE + +DLIST: .ADDR .MOV5B ;+0 + .ADDR .CRLF ;+2 + .ADDR .ARG16 ;+4 + .ADDR .RUN.. ;+6 + .ADDR .ARG36 ;+8. + .ADDR .CLRRM ;+10. + .SBTTL **** CLRB EXECUTE CODE **** +CLRBYT: MVI H,^O40 ;THIS HALF GENERATES THE "20000'S" WEIGHT OF ADDRESS + MOV L,A ;THIS GENERATES THE REST OF THE RAM ADDRESS + MVI M,0 ;CLEAR THAT LOCATION + POP H ;FIX H,L + RET ;OUT & DONE + +.SBTTL **** SOME ERROR CODES **** +RRARG: PLINE RAG ;"?REQUIRES ARG" + JMP NORML ;ERROR MUST RESET THE STACK +KILNM: PLINE BB1 ;?BN BAD NUMBER +MMERR: LDA MMFLG ;SEE IF IN MAINTENACE MODE + ANA A ;SET 8080 FLAGS + JZ REINI ;IF NO MM MODE, OUT + CALL DECNET ;FINISH UP ANY MESSAGES +MMERR1: CALL MMCMD ;IF YES, RESET MODE + JMP REINI ;ERROR MUST RESET THE STACK + ;ERRORS INCURRED DURING THE BOOT PROCESS +D.BTERR: ADI 1*2 ;FAILURE WHEN TRIED TO START MICRO-CODE AFTER A BOOT + +C.BTERR: ADI 1*2 ;FAILURE DURING THE READING OF THE MICRO-CODE + +B.BTERR: ADI 1*2 ;FAILURE DURING THE READING OF THE PAGE OF POINTERS + +A.BTERR: ADI 1*2 ;FAILURE DURING THE READING OF THE HOME BLOCK + + CALL LTFLT ;THESE BOOT ERRORS ARE FATAL +BTERR1: STA ERRCD+1 ;THIS BIT OF CODE GOES IN THE HI ORDER BYTE OF THE NUMB + CLRB NOPNT ;RESTORE PRINTING + PLINE BTFAIL ;PRINT MESSAGE "?BT " + LXI H,ERRCD ;POINT TO THE ERROR CODE + CALL P16 ;PRINT THE 16-BIT NUMBER + JMP REINI ;KILL THE PROCESS + +;CODE FOR WHEN ONLY BOOTSTRAP FAILS TO READIN +L.BTERR: LXI H,STATE ;GET POINTER TO STATE LIGHT + MVI A,^O01 ;SET FAULT LIGHT, BUT DONT CHANGE STATE + ORA M ;THROW CURRENT STATE WITH FAULT BIT + MOV M,A ;PUT STUFF BACK + MVI A,8*2 ;FAILURE DURING THE LOADING OF THE PRE-BOOT PROGRAM + JMP BTERR1 ;AVOID SOME CODE + ;SUBROUTINE TO CHECK IF A COMMAND FROM THE CSL BOARD HAS BEEN +;GRANTED THE BUS.. WHICH IT MUST ALWAYS BE GRANTED BECAUSE IT IS THE +;BUS MASTER +BUSRESP: XTHL ;GET POINTER TO TRAILING ARG + IN SMSTS ;***** I/O RD 301 ***** + CMA ;FIX INVERSION + ANA M ;"AND" READ STUFF VS. TRAILING ARG + INX H ;UPDATE TO RETURN ADDR + XTHL ;SWAP RETURN BACK TO STACK + RET ;RETURN.."Z-BIT" CORRESPONDS TO "AND" RESULTS + +;LITTLE ROUTINE TO SET AND OR CLR THE SOFTWARE RUN FLAG +SETRN: MVI B,STBIT ;WE WANT TO SET THE RUN LIGHT + CALL STATEM ;GO DO IT + .BYTE ^O17 ;AND DONT MASH ANYTHING + XRA A ;CLEAR ACCUM + CMA ;ACCUM = -1 +RNCOM: STA RNFLG ;DATA TO RUN FLAG + RET ;AND OUT + +CLRRN: MVI B,0 ;WE DONT WANT TO SET ANYTHING + CALL STATEM ;JUST GO AND CLEAR SOME THINGS + .BYTE ^O13 ;BITS TO KEEP + XRA A ;CLEAR ACCUM + JMP RNCOM ;AND OUT. + +NOREFRESH: CLRB NOPNT ;TURN TYPING ON + CLRB CHKREF ;SAY NOT TO REPORT OVER AND OVER + CALL CLRUSE ;EXIT FROM USER MODE + PLINE MOSMSG ;MESSAGE TO CTY + +LTFLT: PUSH PSW ;MUST SAVE ACCUM TO GET CORRECT "BT ERR MSG" + MVI B,1 ;WE MERELY WANT TO SET FAULT LIGHT + CALL STATEM ;GO SET THE LIGHTS + .BYTE ^O12 ;BITS TO FLUSH WITH THIS + POP PSW ;RESTORE ACCUM + RET ;AND NOW SAFE TO RETURN + ;ROUTINE TO CLEAR AND SET BITS IN THE STATE WORD, THEN TO LIGHT +;THE LIGHTS ON THE FRONT PANEL AS SPECIFIED BY THE STATE WORD +STATEM: XTHL ;GET POINTER TO MASK + LDA STATE ;NOW FETCH CURRENT STATE OF THE MACHINE + ANA M ;MASK AS SPECIFIED + INX H ;UPDATE RETURN POINTER + XTHL ;AND PUT IT BACK ON THE STACK + + ORA B ;NOW THROW IN ANY NEW BITS + STA STATE ;NOW SAVE IT + OUT LIGHTS ;CHANGE THE LIGHTS + RET ;OUT + ;SUBROUTINE TO DECIDE IF "FIRST" POINTS TO +;AN END-OF-COMMAND CHARACTER..C-BIT SET IF YES, "FIRST" +;DOES POINT TO END-OF-COMMAND..ACCUMULATOR IS DESTROYED +EOCML: PUSH H ;SAVE "H,L" + LHLD .ARG1 ;GET CURRENT POINTER FOR COMMAND BUFFER + + MOV A,M ;GET CHARACTER + CPI EOLCH ;END-OF-COMMAND?? + JZ EOLYS ;JUMP IF YES + + CPI COMMA ;OR, END-OF-COMMAND?? + JZ EOLYS ;JUMP IF YES + +;HERE IF NOT... CLR "C-BIT" & LEAVE + ANA A ;CLR "C-BIT" + + POP H ;RESTORE "H,L" + RET ;RETURN + +;HERE IF YES, AT END-OF-COMMAND +EOLYS: STC ;SET CARRY + POP H ;RESTORE "H,L" + RET ;RETURN + ;SUBROUTINE TO MOVE 5 CONTIGUOUS BYTES BEGINNING +;WITH A SPECIFIED SOURCE ADDRESS,TO ANOTHER BUFFER AREA, ITS +;ADDRESS ALSO PASSED AS A TRAILING ARG. SOURCE ADDRESS IS +;FIRST TRAILING PARAMETER, DESTINATION IS SECOND TRAILING PARAMETER +.MOV5B: POP H ;GET H,L FROM TRAP HANDLER + XTHL ;SWAP STACK TOP WITH "H,L" + PUSH D ;SAVE "D,E" + PUSH B ;SAVE "B,C" + CALL TARG2 ;ASSEMBLE ARGS INTO "B,C" AND "D,E" + + CALL MOVREG ;MOVE THE DATA, ARGS PASSED IN REGISTERS + POP B ;RESTORE "B,C" + POP D ;RESTORE "D,E" + + XTHL ;RESTORE STACK + RET ;AND RETURN + +MOVREG: MVI A,5 ;SET COUNTER TO 5 +M5B: DCR A ;DOWN COUNTER + CNZ M5B ; AND BE RECURSIVE TILL DOWN COUNTED + + LDAX B ;BYTE TO ACCUM + STAX D ;STORE AT DESTINATION + INX D ;UP BOTH PNTRS + INX B ; TO NEXT BYTE + RET ;AND BACK TO CALLER + + ;SUBROUTINE TO COMPARE 2 36-BIT VALUES. +;IF THE ADDRESSES OF THE 2 36-BIT BUFFERS ARE +;PASSED AS TRAILING PARAMETERS TO THE ROUTINE +;IF BOTH BUFFERS ARE THE SAME, THE "C-BIT" IS +;CLR UPON RETURN. IF THEY ARE DIFFER, THE "C-BIT" IS +;SET ON RETURN. +CMP36: XTHL ;SWAP STACK TOP WITH "H,L" + CALL TARG2 ;GET THE 2 TRAILING ARGS INTO "B,C" & "D,E" + XTHL ;PUT RETURN BACK ON STACK + XCHG ;SWAP "D,E" & "H,L" + MVI D,5 ;SET COUNTER TO 4. + +CMPLP: LDAX B ;GET A BYTE OF DATA + CMP M ;COMPARE + RNZ ;RETURN WITH Z-CLR IF HAD ERR.. + INX B ;BUMP POINTER + INX H ;BUMP OTHER POINTER + DCR D ;DOWN COUNT + JNZ CMPLP ;CONTINUE TILL DONE + RET ;NORMAL RETURN + + ;SUBROUTINE TO ASSEMBLE TRAILING ARGS INTO REGISTER PAIRS. +;ROUTINE USED TO SAVE CORE ONLY BECAUSE THIS SEQUENCE OF CODING +;IS REPEATED SO OFTEN.."H,L" POINTS TO THE TRAILING ARG OF THE +;ORIGINAL CALLER.."D,E" AND "B,C" MUST HAVE BEEN SAVED BEFORE +;THIS ROUTINE IS CALLED OR THEY WILL BE DESTROYED..IF A SINGLE +;TRAILING ARG IS TO BE GATHERED UP, IT WILL BE PUT INTO THE +;REG PAIR "D,E" VIA THE CALL "TARG1"..IF 2 TRAILING ARGS TO BE +;GATHERED UP, THE FIRST WILL BE PUT INTO "B,C" AND THE SECOND +;WILL BE PUT INTO "D,E".."H,L" IS UPDATED TO POINT TO THE BYTE +;FOLLOWING THE TRAILING ARGS.. +TARG2: MOV C,M ;LO ORDER SOURCE TO "C" + INX H + MOV B,M ;HI ORDER SOURCE TO "B" + INX H + +TARG1: MOV E,M ;LO ORDER SOURCE TO "E" + INX H + MOV D,M ;HI ORDER SOURCE TO "D" + INX H + + RET ;AND RETURN +;SUBROUTINE TO ADD 1 TO A 36-BIT BUFFER AND GUARANTEE +;THAT THE CARRY PROPAGATES CORRECTLY. BUFFER TO BE +;INCREMENTED IS PASSED AS A TRAILING ARG. +INC36: XTHL ;GET POINTER TO TRAILING ARG + CALL TARG1 ;ASSEMBLE ARG INTO "D,E" + + XTHL ;PUT RETURN BACK ON THE STACK + XCHG ;NOW H,L PNTS TO BUFFER TO BE INCREMENTED + + XRA A ;CLR THE ACCUM + STC ; AND SET "C-BIT" + +INCLP: ADC M ;ADD PIECE OF DATA BUFF, WITH CRY + MOV M,A ;AND PUT IT BACK, WITH THE ADDITION + RNC ;RETURN IF FINALLY STOPPED CRY'S INTO NEXT BYTE + INX H ;NEXT PIECE TO INC + JMP INCLP ;AND CONTINUE IF THERE WAS A CRY + + ;SUBROUTINE "RDATT" + +;ROUTINE READS I/O REGISTERS 0,1,2,3,103 AND MOVES THE +;DATA IN THOSE BUFFERS (BUS.BITS 0-35) INTO A RAM AREA +;WHOSE ADDRESS IS SPECIFIED BY A TRAILING PARAMETER +;USED WITH THE CALL TO THIS ROUTINE +;CALL IS: +; CALL RDATT +; DW XXX ;XXX IS PLACE TO MOVE THE 36 BITS OF DATA +;ACCUMULATOR IS DESTROYED, REG PAIR "D,E" IS INCREMENTED BY 5. +RDATT: + XTHL ;SWAP STACK TOP WITH "H,L" + CALL TARG1 ;ASSEMBLE TRAILING ARG INTO "D,E" + XTHL ;PUT BACK THE STACK + +;THE REAL READING CODE BEGINS HERE & ALSO SERVES AS AN +;ALTERNATE ENTRY IF YOU CHOOSE TO PASS THE BUFFER ADDRESS +;IN REGISTER "D,E" +RDATP: + PUSH D ;SAVE "D,E" + IN D2835 ;***** I/O RD "0" (BITS 28-35) ***** + CMA + STAX D ;SAVE IN RAM + INX D ;UP PNTR TO NEXT BYTE + IN D2027 ;***** I/O RD "1" (BITS 20-27) ***** + CMA + STAX D ;SAVE IN RAM + INX D ;UP PNTR TO NEXT BYTE + IN D1219 ;*****I/O RD "2" (BITS 12-19) ***** + CMA + STAX D ;SAVE IN RAM + INX D ;UP PNTR + IN D0411 ;***** I/O RD "3" (BITS 4-11) ***** + CMA + STAX D ;SAVE + INX D ;UP PNTR + IN D0003 ;***** I/O RD "103" (BITS 0-03) ***** + CMA + ANI ^O17 ;OFF TRASH IN D BITS 7-4 + STAX D ;SAVE + POP D ;RESTORE "D,E" + RET ;RETURN + ;SUBROUTINE "WDATT" +;ROUTINE WRITES I/O REGISTERS 102,104,106,110,112 AND GETS ADDR +;EITHER PASSED AS A TRAILING PARAMETER, OR PASSED IN "D,E" +;CALL IS: +; CALL WDATT +; DW XXX ;XXX IS SOURCE OF DATA TO BE WRITTEN + +WDATT: XTHL ;SWAP STACK TOP WITH "H,L" + CALL TARG1 ;ASSEMBLE TRAILING ARG INTO "D,E" + XTHL ;SWAP STACK BACK TO ORIGINAL STATE +;ALTERNATE ENTRY FOR WHEN PASSING DATA POINTER IN "D,E" + +WDATP: PUSH D ;SAVE "D,E" + LDAX D ;DATA 28-35 TO ACCUM + OUT W2835 ;***** I/O WRT "102" (BITS 28-35) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 20-27 TO ACCUM + OUT W2027 ;***** I/O WRT "104" (BITS 20-27) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 12-19 TO ACCUM + OUT W1219 ;***** I/O WRT "106" (BITS 12-19) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 4-11 TO ACCUM + OUT W0411 ;***** I/O WRT "110" (BITS 04-11) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 0-3 TO ACCUM + OUT W0003 ;***** I/O WRT "112" (BITS 00-03) ***** + POP D ;RESTORE "D,E" + RET ;RETURN + ;SUBROUTINE "ADATT" +;ROUTINE WRITES I/O REGISTERS 103,105,107,111,113 AND GETS ADDR +;EITHER PASSED AS A TRAILING PARAMETER, OR PASSED IN "D,E" +;CALL IS: +; CALL ADATT +; DW XXX ;XXX IS SOURCE OF DATA TO BE WRITTEN + +ADATT: XTHL ;SWAP STACK TOP WITH "H,L" + CALL TARG1 ;ASSEMBLE TRAILING ARG INTO "D,E" + XTHL ;SWAP STACK BACK TO ORIGINAL STATE +;ALTERNATE ENTRY FOR WHEN PASSING DATA POINTER IN "D,E" + +ADATP: PUSH D ;SAVE "D,E" + LDAX D ;DATA 28-35 TO ACCUM + OUT A2835 ;***** I/O WRT "103" (BITS 28-35) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 20-27 TO ACCUM + OUT A2027 ;***** I/O WRT "105" (BITS 20-27) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 12-19 TO ACCUM + OUT A1219 ;***** I/O WRT "107" (BITS 12-19) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 4-11 TO ACCUM + OUT A0411 ;***** I/O WRT "111" (BITS 04-11) ***** + INX D ;NEXT DATUM + + LDAX D ;DATA 0-3 TO ACCUM + OUT A0003 ;***** I/O WRT "113" (BITS 00-03) ***** + POP D ;RESTORE "D,E" + RET ;RETURN + ;LOCAL SUBROUTINE TO CLR +.CLRRM: POP H ;FIX REG AS MESSED UP BY RST INSTR + XTHL ;POINTER TO THE TRAILING PARAM + CALL TARG1 ;ASSY ARG INTO "D,E" + XTHL ;FIX "H,L" AND REPLACE FOR RETURN + XCHG ;PUT "D,E" STUFF INTO "H,L" + MVI A,5 ;AND SET STARTING COUNT TO 5 +CLRT1: DCX H ;DOWN THE MEM ADDRESS + MVI M,0 ;0 DATA TO MEM + DCR A ;DOWN THE COUNTER + JNZ CLRT1 ;BACK TILL DONE + RET ;RETURN + + ;SUBROUTINE TO SWALLOW SEPARATOR CHARACTERS FROM THE ADDRESS POINTED +;TO BY "H,L", UP TO THE FIRST NON-SEPARATOR CHARACTER. +;SEPARATORS ARE: +; "SPACE" +; "TAB" +;ONLY THE "H,L" REGISTER SHOULD BE CHANGED BY THIS ROUTINE + +SEPCHR: PUSH PSW ;SAVE ACCUM AND STATUS + DCX H ;DOWN COUNT H,L SO NEXT INSTR WILL MAKE IT EVEN +SEPYS: INX H ;UP THE COUNT + MOV A,M ;COPY CHARACTER INTO ACCUM + CPI ' ;IS THE CHAR A "SPACE" + JZ SEPYS ;GO UPDATE "H,L" IF YES.. + +;ELSE SEE IF ITS A TAB + CPI ' ;IS THE CHAR A "TAB" + JZ SEPYS ;GO UPDATE "H,L" IF YES + +;ELSE NO MORE SEPARATORS-TIME TO RETURN + POP PSW ;RESTORE ACCUM AND STATUS + RET ;ALL DONE RETURN + +.SBTTL SUBROUTINE TIME DELAY +;EACH UNIT OF DELAY COUNTED IN THE TRAILING BYTE IS WORTH 1.02 MICRO-SEC +;THIS SUBROUTINE WASTES SOME AMOUNT OF TIME..THE GREATER THE TRAILING +;ARGUEMENT, THE MORE TIME IS WASTED... +DELAY.: XTHL ;GET POINTER TO TRAILING ARG INTO "H,L" + PUSH PSW ;NOW SAVE ACCUM + MOV A,M ;GET THE TRAILING ARG INTO ACCUM + INX H ;UP DATE TO CORRECT RETURN LOCATION +DLYLP: DCR A ;DOWN THE COUNTER + PUSH PSW ;ADD MORE DELAY IN THE LOOP + POP PSW ; BECAUSE PUSHES AND POPS TAKE LONG TIME + JNZ DLYLP ;LOOP TILL ZERO + POP PSW ;RESTORE ACCUM + XTHL ;PUT RETURN BACK ONTO THE STACK + RET ;AND DONE + .SBTTL STRING COMPARE ROUTINE +;ROUTINE TO COMPARE A TYPED IN ASCII STRING VERSUS SOME EXPECTED +;STRING. ENTER WITH "H,L" POINTING TO THE BEGINNING OF THE TYPE-IN +;BUFFER AND WITH D,E POINTING TO THE EXPECTED STRING. +;RETURN Z-BIT CLR IF NO MATCH...Z-BIT SET IF MATCH +STRCMP: LDAX D ;GET FIRST EXPECTED CHARACTER + ANA A ;SET FLAGS TO SEE IF ZERO BYTE + JZ STREND ;IF ZERO BYTE, END OF EXPECTED STRING.. OUT + + CMP M ;IF A REAL BYTE, COMPARE AGAINST THE TYPE-IN + RNZ ;IF NO MATCH, TAKE ERROR RETURN + INX D ;IF MATCH , UPDATE TO NEXT EXPECTED + INX H ;AND UPDATE TO NEXT TYPED IN. + JMP STRCMP ;LOOP + +STREND: SHLD .ARG1 ;PASS CURRENT POINTER TO ROUTINE THAT CHECKS FOR EOL + CALL EOCML ;CHECK THAT TYPE IN WAS TERMINATED + RC ;IF YES, Z-BIT IS SET,... OK TO RETURN + + ORA H ;CLR Z-BIT FLAG.. H WILL BE NON-ZERO + RET ;AND OUT..... + ;ROUTINE CALLED WHENEVER KLINIK SWITCH CHANGES STATE +;THE ROUTINE EXAMINES THE NEW STATE OF KLINIK,ZAPS THE LIGHTS AS REQUIRED +;THEN SETS THE KLINIK LINE INTO THE APPROPRIATE STATE. IF KLINIK WAS +;ESTABLISHED, GOING TO ENABLE POSITION WILL CHANGE NOTHING, BUT ANY SWITCH +;CHANGE THAT INCREASES THE AMOUNT OF PROTECTION WILL FORCE CHANGE THE +;MODE OF THE KLINIK LINE. +;THE ROUTINE IS ENTERED WITH "B" HOLDING THE NEW KLINIK SWITCH STATE, AND +;"KLNKSW" HOLDING THE OLD STATE. VALUES ARE AS FOLLOWS: +; ENABLE = 2 +; PROTECT = 6 +; DISABLE = 4 +KLNKLT: MOV A,B ;COPY KLINIK STATE INTO THE ACCUM + STA KLNKSW ;SAVE THE NEW STATUS + CPI 4 ;IS SWITCH NOW IN DISABLED POSITION + JZ SETM0 ;GO SET MODE 0 IF YES + + CPI 6 ;IS SWITCH NOW IN THE PROTECT POSITION? + JZ .SETM1 ;IF YES, GO SET MODE 1 + +;FALL THRU IF NEW SWITCH POSITION IS THE "ENABLE" POSITION +;.. FIRST CHECK CURRENT MODE. IF IN MODE 3 ALREADY, WE MAKE NO CHANGE + LDA CSLMODE ;GET CURRENT CSL MODE + CPI .MODE3 ;IS IT MODE 3 + +;FLAGS ARE SET, FALL INTO CODE THAT DOES THE RIGHT THING IF IN MODE 3 + + CNZ SETM2 ;IF WAS NOT MODE 3, THIS WILL SET MODE 2 + +;AND FALL INTO KL.LON CODE + +KL.LON: MVI B,2 ;GET A BIT FOR SETTING THE REMOTE LIGHT ON + +;AND FALL INTO CODE FOR SETTING THE LIGHTS +KL.LAMP: CALL STATEM ;SET LIGHTS AS SPECIFIED IN B REG + .BYTE ^O375 ;KEEP ALL LIGHTS, 'CEPT REMOTE + RET ;AND DONE WITH THIS MESS + .SBTTL UART MODE MODIFICATIONS +;CODE FOR SETTING THE KLINIK LINE INTO MODE 1 +.SETM1: LDA PASSWORD ;GET CURRENT PASSWORD + ANA A ;SET FLAGS TO SEE IF ANY PASSWORD EXISTS + JZ SETM0 ;IF NO PASSWORD, THEN SET INTO MODE 0 + CNZ SETM1 ;IF PASSWORD EXISTS, SET THINGS INTO MODE 1 + JNZ KL.LON ;IF WE WENT MODE 1, THEN MUST TURN ON LIGHT + +;CODE FOR ACTUALLY SETTING THE KLINIK LINE MODE TO 1 +SETM1: MVI A,.MODE1 ;GET MODE 1 FLAG + LXI H,MODE1 ;GET THE MODE 1 DISPATCH + JMP SETM ;SET UP RAM + +;CODE THAT SETS BOTH MODE 0 AND THE APPROPRIATE LIGHTS +SETM0: MVI B,0 ;THE PASS LIGHTS OFF IN REGISTER "B" + CALL KL.LAMP ;AND GO DO THE LIGHTS + CALL HANGUP ;CLEAR KLINIK LINE + MVI A,.MODE0 ;GET THE MODE 0 FLAG + LXI H,MODE0 ;GET THE MODE 0 DISPATCH + JMP SETM ;SET UP RAM + +;CODE TO SET US INTO MODE 3 +SETM3: MVI A,.MODE3 ;GET MODE 3 FLAG + LXI H,MODE3 ;GET THE MODE 3 DISPATCH + JMP SETM ;SET UP RAM + ;CODE TO SET US INTO MODE 4 +SETM4: LDA USRMD ;SEE IF USER, IF WHICH CASE WE WONT DO "MODE4" + ANA A ;SET 8080 FLAGS + RNZ ;AND OUT IF USER MODE + +;ACCUM MUST .EQ. 0 IF FELL TO HERE + STA MAILFG ;BETTER CLEAR THIS FLAG TOO + STA E.CNT ;USE FASTEST WAY TO CLEAR THIS LOCATION + LXI H,E.BEG-1 ;AND RESET ENVELOPER + SHLD E.BUF + MVI A,.MODE4 ;GET MODE 4 FLAG + LXI H,MODE4 ;GET THE MODE 4 DISPATCH + JMP SETM ;SET UP RAM + +;SET LINE TO MODE 2 +SETM2: LDA CSLMODE ;BEFORE ANYTHING ELSE, SEE WHAT WE ARE DOING NOW + ANI .MODE0!.MODE1 ;IF MODES 0 OR 1, MUST INTERRUPT KS10 + JZ SETM2X ;IF NOT, DONT BOTHER KS10 AT ALL + + MVI A,KL.ACTIVE ;MUST INFORM THE TEN THAT WE ARE ENTERING KLINIK + CALL WRD34 ;CALL ROUTINE THAT WRITES WORD 34 +SETM2X: LXI H,MODE2 ;GET DISPATCH FOR MODE 2 + MVI A,.MODE2 ;SET MOE TWO TO THE STATE FLAG ALSO +SETM: STA CSLMODE +SETDIS: SHLD MODDIS ;AND SET TO KLINIK DISPATCHER + RET ;AND ALL DONE + ;LITTLE ROUTINE TO HANG UP THE KLINIK LINE +HANGUP: LDA STATE ;GET CURRENT STATE + ANI ^O7 ;OFF THE "DTR" SIGNAL + OUT DTR ;CLR DTR + MVI A,CARRLOSS ;TELL KS10 THAT KLINIK CARRIER HAS GONE AWAY + CALL WRD34 ;DEPOSIT INTO WORD 34 + LXI H,200. * 2 ;SET A TIMEING DELAY OF 2 SECONDS + JMP LTLOOP ;GO DO DELAY, AND USE HIS RETURN TO EXIT + +;ROUTINE FOR DOING SIMPLE DEPOSIT INTO KS10 MEMORY AT WORD 34, AND +;THEN INTERRUPTING THE 10 +WRD34: PUSH PSW ;SAVE ACCUM & STATUS + CLRRM DMDAT ;CLEAR A BUFFER + POP PSW ;FETCH THE ACCUM'S CONTENTS AGAIN + INX H ;BUMP H,L(VALUE AFTER A CLRRM IS .EQ. 1ST LOC OF BUFF) + MOV M,A ;STORE DATA AT "DMDAT+1" + DEPOS 34 ;DEPOSIT + JMP POKE10 ;INTERRUPT THE KS10 & USE HIS RETURN + ;CODE USED IN ADDING UP THE CHECKSUMS ON ENVELOPES TO BE SENT +CHKADD: ADD B ;HERE TO ADD NEW CHAR TO THE CURRENT SUM + MOV B,A ;AND KEEP THE RESULTS IN "B" + INX H ;BUMP UP TO LOOK AT THE NEXT CHAR + JMP TSKLP ;BACK TO LOOP + +;THIS IS THE APT ENVELOPE SENDER.. WHEN WE HAVE A BUFFER OF INFO TO SEND TO +;THE APT HOST SYSTEM, THIS IS THE CODE THAT GETS CALLED +DECNET: LDA MAILFG ;ONLY DO SOMETHING HERE IF THE MAILING FLAG SET + ANA A ;SET 8080 FLAGS + RZ ;NO FLAG, NO SENDY.... + + EI ;ABSOLUTLY MUST ALLOW INTERRUPTS, IN CASE HOST DIES + LDA ENVMNO ;FIRST THING TO DO IS COMPLIMENT THE MESSAGE NUMBER + CMA ;FLIP + ANI ^O177 ;NO SIGN BITS ALLOWED + STA ENVMNO ;PUT IT BACK + + LXI H,ENVBUF ;FIRST THING TO DO IS COMPUTE CHECKSUM FOR THE ENVELOPE + MVI B,0 ;"B" WILL HOLD THE CURRENT SUM +TSKLP: MOV A,M ;GRAB A CHARACTER + CPI CRCHR ;SEE IF END OF THE ENVELOPE CHARACTER + JZ TSKGO ;IF YES, GO TO THE ACTUAL SENDER + + ANA A ;MAYBE THE CHAR WAS A 0, BECAUSE THERE IS NO CRCHR + JNZ CHKADD ;IF NOT, GO ADD THE CHARACTER TO THE SUM + ;HERE WHEN TIME TO ACTUALLY MAIL AN ENVELOPE +TSKGO: INX H ;UPDATE PAST THE "CR" CHARACTER + MVI M,0 ;NOW GUARANTEE THAT WE END WITH "CR","0" PAIR + MOV A,B ;GRAB THE CURRENT SUM + CMA ;COMPLIMENT + INR A ;MAKE TWOS COMPLIMENT + ANI ^O77 ;AND ONLY SIX BITS COUNT + +;NOW MUST DECIDE IF YOU NEED TO ASCII-IZE THE CHECKSUM + CPI ^O75 ;75,76,77 DONT GET ASCII-ED + JP TSKGO1 ;SO JUMP IF ANY OF THOSE THREE + ORI ^O100 ;HAD TO ASCII-IZE, SO DO IT WITH A 100 +TSKGO1: STA ENVCHK ;SAVE IN THE APPROPRIATE PLACE IN THE BUFFER + +TSK2TSK: CLRB APTANS ;CLEAR THE ANSWER + KCHAR SYNC ;2 SYNCS START EVERY MESSAGE + KCHAR SYNC + + LXI D,ENVMNO ;NOW SEND THE REST + CALL KLINE1 + LDA ENVBUF ;GRAB FIRST CHAR OF ENVELOPE JUST SENT + CPI QUES ;IS IT QUESTION MARK?? + JZ MMERR1 ;IF IT WAS, ABORT ENVELOPE STUFF, RESET APT + + CPI PERCNT ;IS IT A PER CENT SIGN?? + JZ MMERR1 ;IF IT WAS, ABORT ENVELOPE STUFF, RESET APT + +APT.WT: LDA APTANS ;NOW WAIT FOR THE APT SYS TO ANSWER(ACK OR NACK) + ANA A ;IF ZERO, GOT NO ANSWER YET + JZ APT.WT ;SO WAIT + ;FINALLY GOT AN ANSWER + CPI 'N ;WAS IT A NACK?? + JZ TSK2TSK ;IF YES, SEND IT OUT AGAIN +DECEX1: +DECEX2: + XRA A ;USE FAST WAY TO CLEAR A RAM LOCATION + STA MAILFG ;SAY END OF THIS ENVELOPE + LXI H,ENVBUF ;POINT TO THE BUFFER + SHLD ENVPNT ;SAVE THE POINTER TO THE BUFFER + RET ;THEN OUT + ;SUBROUTINE TO MOVE A STRING OF CHARACTERS INTO THE TTY INPUT BUFFER, +;KEEPING TRACK OF THE NUMBER OF COMMAS AND OTHER IMPORTANT FEATURES OF THE +;STRING. MUST PASS THE SOURCE OF THE CHARACTERS IN REG B,C, SUBROUTINE WILL +;BOMB REGISTERS D,E AND H,L +MV.ALL: LXI B,E.BEG+2 ;POINT TO THE CHARACTER BUFFER TO BE EXECUTED + CALL BFRST ;RESET CMD CHAIN POINTERS +MV.INP: LXI D,BUFBG ;DE, WILL POINT TO THE INPUT BUFFER + LXI H,EOL ;AND HL WILL POINT TO THE COMMA/EOL COUNTER + MVI M,0 ;MAKE SURE COUNT BEGINS AT 0 + +MV.IN1: LDAX B ;GET FIRST CHARACTER FROM WHEREVER IT IS + STAX D ;AND PUT IT INTO THE BUFFER + INX B ;UP POINTER + INX D ;AND THIS ONE TOO + +;NOW CHECK FOR COMMA OR EOL + CPI COMMA ;IS IT A COMMA?? + CZ MV.CNT ;IF YES, INCREMENT THE COUNT + +;FALL THRU IF WAS A COMMA BEFORE, EOLCH WILL NOT MATCH + CPI EOLCH ;IS IT AN END OF LINE? + JNZ MV.IN1 ;IF NOT, THERE IS MORE TO DO + +;HERE IF WAS AN EOL.. NOT ONLY DO WE BUMP THE COUNT, WE ALSO GET OUT +MV.CNT: INR M ;UP COUNT + RET ;AND OUT + .SBTTL MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT +;MODE 4 HANDLER. WATCHES FOR THE FIRST SYNC CHAR, THEN GOES INTO +;A FINITE STATE MACHINE MODE WHERE IT COLLECTS AN ENVELOPE +;WHEN YOU ENTER HERE, REG B HAS A COPY OF THE CHARACTER JUST TYPED +MODE4: +M4.0: CPI SYNC ;LOOK FOR A SYNC CHARACTER + JNZ MMOUT ;IF NOT, SIMPLE PRINT OF CHARACTER ON CTY + + LXI H,M4.1 ;SHIFT ENVELOPER TO NEXT INPUT STATE + JMP SETDIS ;AND SET INTERRUPT HANDLER TO COME HERE WHEN + ;DONE WITH INTERRUPT + +;STATE 2 OF ENVELOPE EATER.. THIS CODE WILL DISCARD ANY ADDITIONAL SYNCS +; STORE THE MESSAGE NUMBER WHEN IT FINALLY GETS HERE (& FLIC TO STATE 3) +; OR COLLECT THE FIRST CHARACTER OF A CMD SEQUENCE(& FLIC TO STATE 3) +M4.1: + CPI SYNC ;IS THIS AN ADDITIONAL SYNC CHAR + RZ ;IF YES, IGNORE AND PROCEED +;FALL THRU IF NOT A SYNC + LXI H,COLLECT ;NOW GO TO NEXT STATE OF THE ENVELOPE COLLECTOR + SHLD MODDIS ;SET UP FOR INTERRUPT HANDLER TO FIND + .SBTTL ENVELOPE COLLECTOR +;THIS IS WHERE YOU COME ON CHARACTERS THAT ARE PART OF AN ENVELOPE. +;THIS CODE CHECKS FOR 2 KINDS OF TERMINATORS +;1) END OF ENVELOPE +;2) END OF CONTROL SEQUENCE +;OR ELSE MERELY STUFFS THE CHARACTER INTO THE ENVELOPE BUFFER. +;WHEN AN ENTIRE MESSAGE HAS BEEN RECEIVED, THEN WE WILL CALCULATE THE +;CHECKSUMS OR WHATEVER, MAKE WITH THE ACKS, NACKS, AND EXECUTE WHATEVER +;THE STUFF MAY BE +;WHEN YOU ENTER HERE, REG B HAS A COPY OF THE CHARACTER JUST TYPED +COLLECT: CPI DOLLAH ;TOPS20 CALLS A SPADE A "DOLLAR" + JZ ACTION ;IF "$", TREAT LIKE AN ALTMODE + + CPI ALT ;IF ALTMODE, THEN END OF CONTROL SEQUENCE + JZ ACTION ;AND JUMP IF IT WAS ALTMODE. EXECUTE CONTROL CHAR + + CPI CRCHR ;IF CARRIAGE RETURN, THEN END OF ENVELOPE + JZ EXECUT ;GO EXECUTE THE ENVELOPE IF + + CPI SYNC ;ALSO LOOK FOR "SYNC", WHICH MEANS "RESYNC" + JZ SETM4 ;IF YES, THEN MUST RE-SYNC +;WE MUST BE AWARE OF "RE-SYNCING", IN CASE THE "ALT" OR "CR" WAS GARBLED +;AS IT CAME DOWN THE LINE, AND WAS MISSED BY THE 8080 +;RE-SYNCING REQUIRES STARTING AT THE BEGINNING OF MODE4 + + +;FALL THRU IF MUST SIMPLY SHOVE THE CHARACTER INTO THE BUFFER +COL.LP: LHLD E.BUF ;GET POINTER TO THE LAST CHARACTER IN THE BUFFER + INX H ;BUMP POINTER TO FIRST FREE + MOV M,A ;AND STACK THE CHARACTER IN THE BUFFER + SHLD E.BUF ;REPLACE THE POINTER + + LXI H,E.CNT ;GET CURRENT CHARACTER COUNT + INR M ;UPDATE + MOV A,M ;NOW COPY COUNT TO ACCUM FOR TESTING + CPI ^O134 ;TOO MUCH FOR AN ENVELOPE?? + JNC NACK.EN ;IF TOO MANY, NACK IT.. MAYBE HE WILL START OVER + RET ;ELSE OUT + ;HERE WHEN AN ENVELOPE IS COMPLETE... WE MUST COMPUTE THE CHECKSUM +;AND COMPARE AGAINST THE CHECK CHARACTER SENT OVER, THEN ACTUALLY EXECUTE +;THE CONTENTS OF THE ENVELOPE +EXECUT: LDA E.CNT ;GET CHAR COUNT SO WE CAN TELL WHEN WE FINISH + MOV C,A ;PUT IT IN "C" + + LXI H,E.BEG+1 ;POINT TO THE CHECKSUM IN THE ENVELOPE BUFFER + MOV A,M ;GET CHECKSUM CHARACTER INTO THE ACCUM + INX H ;UPDATE PAST THE CHECKSUM JUST COLLECTED + DCR C ; AND DOWN THE CHAR COUNT FOR THE THINGS WE JUST + DCR C ; PICKED OUT OF THE LIST + DCR C ;WE WANT LOOP TO END AT -1, INSTEAD OF 0 + +ENV.LP: ADD M ;ADD CHARACTERS TO CHECKSUM + INX H ;NEXT CHARACTER + DCR C ;BUT FIRST SEE IF DONE YET + JP ENV.LP ;BACK IF NOT + +;WHEN DONE,CHECK THAT CHECKSUM HAS WORKED OUT TO BE ZERO + ANI ^O77 ;ONLY SIX BITS COUNT + JNZ NACK.EN ;IF NOT .EQ. 0, THEN CHECKSUM FAILED AND "NACK" + ;FALL THRU TO HERE IF OK SO FAR + MVI M,EOLCH ;MARK THE END OF THE ENVELOPE WITH EOL MARKER + +;NOW MUST CHECK THE MESSAGE NUMBER FOR OK-NESS + LXI H,LSTMSG ;GET POINTER TO MESSAGE NUMBER + MOV C,M ;SAVE IT IN "C" FOR A LITTLE WHILE + LDA E.BEG ;GRAB CURRENT MESSAGE NUMBER + + CMP C ;ARE THEY THE SAME?? + JZ ACK.EN ;IF YES, DO SIMPLE ACK AND IGNORE MESSAGE + +;IF DIFF, TWAS A GOOD MESSAGE, SAVE NUMBER AND EXECUTE + MOV M,A ;SAVE MESSAGE NUMBER AS THE LAST + + CALL MV.ALL ;AND MOVE THE STUFF TO A BUFFER FOR EXECUTION + MVI A,^O41 ;EVERY COMMAND ENVELOPE EXECUTED RESETS THE ENV NUMBER + STA ENVMNO ; SO RESET THE ENVELOPE MESSAGE NUMBER TO 41 + CALL SETM4 ;MODE 4 TO GRAB INTERRUPTS CORRECTLY WHILE RUNNING + CALL DECEX1 ;BEFORE EXECUTING, CLEAR ALL OLD MESSAGES + LXI H,OKDN ;TELL NORMAL ENDS TO RETURN HERE FOR FURTHER ORDERS + SHLD NOREND ;PASS INFO IN THE DEDICATED RAM POSITION + JMP DCODE ;AND BEGIN EXECUTION OF THE STRING READ IN + OKDN: EI ;MUST ALLOW INTERRUPTS HERE + CALL DECNET ;IF YES, MAIL ENVELOPE BEFORE ACK'ING + +;NOW OK TO ACKNOWLEDGE THE COMMAND +ACK.EN: CALL SETM4 ;SEND "ACK" DOWN THE KLINIK LINE + +ACK: KLINE M.ACK + RET ;DONE WITH THIS +M.ACK: .BYTE SYNC ;SYNC + .BYTE SYNC ;SYNC + .BYTE 'A ;ACKNOWLEDGE CHAR + .BYTE ALT ;ALTMODE + .BYTE 0 ;END OF STRING +NACK.EN: CALL SETM4 ;SEND "NACK" DOWN THE KLINIK LINE +NACK: KLINE M.NACK + RET ;BACK TO CALLER + +M.NACK: .BYTE SYNC ;SYNC + .BYTE SYNC ;SYNC + .BYTE 'N ;NEGATIVE ACKNOWLEDGE CHAR + .BYTE ALT ;ALTMODE + .BYTE 0 ;END OF STRING + +ACTION: LHLD E.BUF ;GET THE TYPE OF CONTROL THIS WAS(ACK OR NACK) + MOV A,M ;PUT IT INTO ACCUM + STA APTANS ;SET IT INTO THE ANSWER WORD + JMP SETM4 ;AND NOW RESET INTERRUPT HANDLER AND OUT + ;THIS IS THE CODE DO DO STRAIGHT OUTPUT FROM THE KLINIK LINE TO THE CTY +;AND INCLUDE A SCHEME FOR BUFFERING THE OUTPUT SO THAT A 9600 BAUD +;KLINIK LINE WILL OUTPUT OK TO A 300 BAUD CTY. +;IF INTERRUPTED WHILE PRINTING A CHARACTER, THE CHARACTERS WAITING TO BE +;PRINTED ARE STACKED AT THE "SYSOUT" POINTER. CHARACTERS THAT ARE REMOVED FROM +;THE WAITING BUFFER ARE REMOVED VIA THE POINTER "SYSIN" +MMOUT: ANA A ;SEE IF THIS IS A NULL CHARACTER + RZ ;IF YES, DONT DO NOTHIN + LHLD SYSOUT ;SEE IF WE ARE BUSY PRINTING + MOV A,H ;GET AN INDICATOR + ANA A ;SET PC FLAGS + JZ NOTBUSY ;GO IF NOT BUSY + +;FELL TO HERE IF BUSY PRINTING + XCHG ;SAVE THE CURRENT "SYSOUT" VALUE(IN D,E) + LHLD SYSIN ; NOW SEE IF THIS IS FIRST TIME IN + MOV A,H ;GET THE INDICATOR + ANA A ;SET FLAGS + JNZ STCK.Y ;JUMP IF ALREADY STACKING + + LXI H,SYSBUF ;FIRST TIME IN, SO SET INPUT FLAG + SHLD SYSIN ;SET IT + +STCK.Y: LXI H,-SYSEND ;NOW SEE IF BUFFER IS FULL + DAD D ;ADD END TO THE CURRENT TO SEE IF BUFF FULL + MOV A,H ;SEE IF ZERO + ORA L ;SEE IF ZERO + RZ ;IF .EQ. 0 THROW AWAY STUFF..BUFF IS FULL + +;HERE IF NOT FULL. MUST STACK THIS CHARACTER + XCHG ;CURRENT POINTER GOES BACK TO HL REG(PNT TO SYSOUT) + MOV M,B ;CHAR INTO RAM SPACE + INX H ;UP COUNT + MVI M,0 ;GUARANTEE A ZERO BYTE AT THE END OF BUFFER + JMP SETOUT ;PUT THE POINTER BACK WHERE IT GOES + ;HERE IF NOT PRINTING YET.. PRINT FIRST CHARACTER AND PLAN ON SOME MORE +NOTBUSY: LXI H,SYSBUF ;THIS IS THE FIRST TIME IN + SHLD SYSOUT ;SET THE FLAG & THE POINTER + + MOV A,B ;GET CHAR BACK TO ACCUM SO CAN PRINT IT +MORE.: MOV B,A ;WHERE EVER U COME FROM, SAVE ACCUM IN B REG + CPI LFCHR ;IS THIS A LINE FEED?? + JNZ MM.PNT ;IF NO, NOTHING SPECIAL + + LDA CNTLQ.ON ;MUST WE ANSWER EVERY WITH A "CNTROL-Q" + ANA A ;IF FLAG .EQ., THEN NO, IF YES THEN WRITE IT + CNZ KCHR0 ;YES, A LINE FEED, SEND THE SYSTEM A "CONTROL-Q" +MM.PNT: MOV A,B ;NO MATTER HOW U GOT HERE, CHAR GOES TO ACCUM + EI ;INTERRUPTS ON NOW, BEGIN PRINTING + CALL PCHR1Z ;PRINT A CHAR + +;BACK TO HERE WHEN DONE PRINTING + DI ;DON'T BOTHER ME FOR A BIT + LHLD SYSIN ;GRAB POINTER OF THINGS WAITING TO BE PRINTED + MOV A,H ;GET FLAG + ANA A ;SET FLAGS + JZ DONE.BUF ;IF NOTHIN, ALL DONE + +;HERE WHEN SOMETHING TO DO + MOV A,M ;GRAB A CHARACTER TO PRINT + ANA A ;MUST FIRST CHECK FOR END OF BUFFER + JZ DONE.BUF ;IF DONE RESET THE POINTERS AND GET OUT + + INX H ;NEXT POINT + SHLD SYSIN ;SET INTO RAM + JMP MORE. ;DO MORE + +;HERE ON DONE ALL..FALL INTO Z-BUFF CODE +DONE.BUF: +Z.TBUF: LXI H,0 ;WE NEED TO CLEAR SOME BUFFERS + SHLD SYSIN ;CLEAR POINTER +SETOUT: SHLD SYSOUT ; AND CLEAR POINTER + RET + .SBTTL **** MORE ERROR ESCAPES **** +NOACK: PLINE NOA ;"PRINT NO DATA ACK" + + LXI H,1 ;ERR CODE IS 1 +ERRRTN: SHLD ERRCD ;SET ERROR CODE + ENDCMD + +NOARB: XRA A ;CLR ACCUM + OUT BUSCTL ;***** I/O WRT 210/0 ***** + PLINE NBR ;"?NO BUS RESP" + + LXI H,2 ;ERR CODE IS 2 + JMP ERRRTN ;GO SET ERROR CODE + +NIXOM: XRA A ;CLR ACCUM + OUT BUSCTL ;***** I/O WRT 210/0 ***** CLR OUT NIXOM BIT AFTER THE REPORT + PLINE NXMMSG ;"PRINT ?NXM" + LXI H,3 ;ERROR CODE 3 + + JMP ERRRTN ;SET ERROR CODE + \ No newline at end of file