JMP *+3 YES E012 JSB ERMS,I E012 INT DURING HOLD OFF DEF ZBE12 LDA ZBD5A CHECK RETURN ADDRESS LDB CPTO IF 210X SSB ADD ONE INA CPA ZBI5 JMP ZBI5A E015 JSB ERMS,I E015 INT RTN ADDR ERROR DEF ZBE15 JMP ZBIO6 ZBI5A JSB ZTCJI SET SECOND INT TRAP DEF ZBT5 STF INTP TURN I/O SYSTEM ON JMP ZBI5,I CONTINUE TEST * *ñ * *ñ ZBT5 NOP CLF INTP TURN I/O SYSTEM OFF E013 JSB ERMS,I E013 SECOND INT OCURRED DEF ZBE13 * * * * * *ñ SKP * CLC CH AND CLC 0 * ZBIO6 JSB ZTCJI SET JSB INSTRUCTION DEF ZBI61 ZBS61 STC CH SET CH CONTROL ZBS62 STF CH SET CH FLAG STF INTP TURN ON INTERRUPTS ZBS63 CLC CH CLEAR CH CONTROL NOP GIVE IT A CHANCE NOP CLF INTP TURN INTS OFF ZB60 JSB ZTCJI SET JSB INSTRUCTION DEF ZBI62 ZBS64 CLF CH CLEAR CH FLAG ZBS65 STC CH SET CH CONTROL ZBS66 STF CH SET CH FLAG STF INTP TURN ON INTS CLC INTP CLEAR I/O SYSTEM NOP GIVE IT A CHANCE NOP CLF INTP TURN OFF INTS JMP ZBIO7 * * *ñ ZBI61 NOP CLF INTP TURN OFF INTS E016 JSB ERMS,I E016 CLC CH ERROR DEF ZBE16 JMP ZB60 * ññ ZBI62 NOP CLF INTP TURN OFF INTS E017 JSB ERMS,I E017 CLC 0 ERROR DEF ZBE17 JMP ZBIO7 * ZBE16 ASC 9,E016 CLC CH ERROR/ ZBE17 ASC 9,E017 CLC 0 ERROR/ SKP * EXTERNAL & INTERNAL PRESET TEST * ZBIO7 LDB ZS812 CHECK TO SUPPRESS JSB SWRT,I ? JMP H025 YES - SKIP PRESET TEST H024 JSB MSGC,I TELL OPERATOR DEF ZBM24 PRESS PRESET * ññ ZBS71 CLF CH CLEAR CH FLAG STF INTP TURN ON INTS JSB ZTCJI SET TRAP CELL JSB INSTRUCTION DEF ZBI70 HLT 24B WAIT FOR OPERATOR CLA,INA SET UP FLAGS FOR TESTS SFS INTP CHECK INTP FLAG CLA NOT SET SO CLEAR FLAG RAL MOVE TO NEXT FLAG CLF INTP TURN OFF ONTPS ZBS72 SFS CH CHECK CHANNEL FLAG INA NOT SET SO FLAG IT RAL MOVE TO NEXT FLAG LIB 0 CHECK I/O BUSS SZB SHOULD BE ZERO INA NOT SO FLAG IT RAL MOVE TO NEXT FLAG STF INTP CHECK CONTROL ON CARD NOP GIVE IT A CHANCE NOP CLF INTP TURN OFF INTPS SKP ZB70 SLA,RSS CHECK FOR ERRORS JMP *+3 E022 JSB ERMS,I E022 DID NOT CLEAR CONTROL DEF ZBE22 RAR SLA,RSS JMP *+3 E023 JSB ERMS,I E023 I/O LINES NOT CLEAR DEF ZBE23 RAR SLA,RSS JMP *+3 E020 JSB ERMS,I E020 FLAG NOT SET DEF ZBE20 RAR SLA,RSS JMP *+3 E021 JSB ERMS,I E021 DID NOT DIABLE INTS DEF ZBE21 H025 JSB MSGC,I TELL OPERATOR DEF ZBM25 BASIC I/O IS COMPLETE JMP ZBIO,I RETURN TO CALLER * ZBI70 NOP CONTROL FAILED CLF INTP TURN OFF INTPS INA JMP ZB70 * ññ ZBE20 ASC 17,E020 PRESET(EXT) DID NOT SET FLAG/ ZBE21 ASC 19,E021 PRESET(INT) DID NOT DISABLE INTS/ ZBE22 ASC 20,E022 PRESET(EXT) DID NOT CLEAR CONTROL/ ZBE23 ASC 21,E023 PRESET(EXT) DID NOT CLEAR I-O LINES/ ZBM24 ASC 17,H024 PRESS PRESET (EXT&INT),RUN/ ZBM25 ASC 08,H025 BI-O COMP/ SKP ZBIOD DEF *+1 DEF ZBS21 DEF ZBS22 DEF ZBS23 DEF ZBS24 DEF ZBS25 DEF ZBS26 DEF ZBS27 DEF ZBS31 DEF ZBS32 DEF ZBS33 DEF ZBS41 DEF ZBS42 DEF ZBS51 DEF ZBS52 DEF ZBS53 DEF ZBS61 DEF ZBS62 DEF ZBS63 DEF ZBS64 DEF ZBS65 DEF ZBS66 DEF ZBS71 DEF ZBS72 DEC -1 * ZCEND EQU * HED BASE PAGE TABLES AND LINKS ORG 126B DSN OCT 105104 DIAGNOSTIC SERIAL NUMBER ORG 140B IOIP DEF IOID POINTER TO I/O INSTRUCTIONS LIST TSTP DEF TSTD POINTER TO TEST LIST HDMP DEF HDMS POINTER TO HEADER MESSAGE STDA OCT 177 STDB OCT 0 * ORG 150B HDMS EQU * ASC 16,HP 9866 LINE PRINTER DIAGNOSTIC/ IOID EQU * DEF SC00 DEF SC01 DEF SC02 DEF SC03 DEF SC04 DEF SC05 DEF SC06 DEF SC07 DEF SC08 DEF SC09 DEF SC10 DEF SC11 DEF SC12 DEF SC13 DEF SC14 DEF SC15 DEF SC16 DEF SC17 DEF DMAC1 DEC -1 END-OF-LIST * TSTD EQU * DEF TST.0 BASIC I/O DEF TST01 STATUS & BUFFER CLEAR DEF TST02 CHARACTER SET DEF TST03 TRIANGLE PRINT & OVER BUFFER FULL DEF TST04 NON-PRINTING CHARACTERS DEF TST05 WORST CASE PATTERN DEF TST06 DMA TEST DEF TST07 PSEUDO OPDESIGN DEC -1 SKP * .12 OCT 12 .37 OCT 37 .40 OCT 40 .177 OCT 177 D300 DEC 300 BIT9 OCT 1000 BT812 OCT 10400 DM10 DEC -10 DM60 DEC -60 DM80 DEC -80 SLASH OCT 57 AA OCT 101 BFCLB OCT 100200 BIT7 OCT 200 LCHR OCT 176 * CNTR NOP TMP NOP FCHR NOP CHR NOP * * * * *ñ * * * CLEAR CHARACTER IN INTERFACE * BEFORE DOING BASIC I/O * *ñ TST.0 EQU * * NOP CLA SC00 OTA CH JSB *+2,I JMP *-4,I DEF TST00 HED COMMON ROUTINES * OUTPUT A REG * TIME OUT = E027 FLAG TIME OUT (CHR) * *ñ OTCHR NOP LDB INCHR SET TRAP CELL JSB SC01 STB CH SC02 OTA CH OUTPUT CHARACTER CLA,INA SET FOR MAX OF 1MS STF INTP TURN ON INTERRUPTS SC03 STC CH,C JSB TMRR,I GO WAIT CLC INTP,C LONG ENOUGH E027 JSB ERMS,I REPORT TIME OUT DEF ER27 LDB BIT9 CHECK IF ABORT JSB SWRT,I JMP EXRT,I YES JMP OTCHR,I RETURN * ññ ER27 ASC 13,E027 FLAG TIME OUT (CHR)/ * *ñ INCHR JSB *+1 NOP INTERRUPT LOCATION CLF INTP TURN OFF INTERRUPTS JMP OTCHR,I * * * OUTPUT PRINT COMMAND * TIME OUT = E030 FLAG TIME OUT (CMD) * OTCMD NOP LDA .12 USE LF AS PRINT COMMAND LDB INCMD SET TRAP CELL JSB SC04 STB CH SC05 OTA CH OUTPUT PRINT COMMAND LDA D300 SET FOR MAX OF 300MS STF INTP TURN ON INTERRUPTS SC06 STC CH,C JSB TMRR,I GO WAIT CLC INTP,C LONG ENOUGH E030 JSB ERMS,I REPORT TIME OUT DEF ER30 LDB BIT9 CHECK IF ABORT JSB SWRT,I JMP EXRT,I YES JMP OTCMD,I RETURN * ññ ER30 ASC 13,E030 FLAG TIME OUT (CMD)/ * INCMD JSB *+1 NOP INTERRUPT LOCATION CLF INTP TURN OFF INTERRUPTS JMP OTCMD,I SKP * OUTPUT A MESSAGE TO THE LINE PRINTER * *ñ OTMSG NOP LDB BIT7 GET BIT 7 JSB SWRT,I SUPPRESS MESSAGES JMP OTMSX JSB CFOP CHECK FOR OUT OF PAPER LDA OTMSG,I GET POINTER TO MESSAGE RAL CONVERT TO BYTE ADDRESS STA TMP SAVE IT OTMS0 LDB TMP GET A CHARACTER CLE,ERB LDA B,I SEZ,RSS ALF,ALF AND .177 CPA SLASH END-OF-MESSAGE JMP *+4 YES JSB OTCHR NO OUTPUT CHARACTER ISZ TMP MOVE TO NEXT CHARACTER JMP OTMS0 DO IT JSB OTCMD PRINT LINE OTMSX ISZ OTMSG JMP OTMSG,I RETURN * * CHECK FOR LP OUT OF PAPER * CFOP NOP SC07 LIA CH GET STATUS SLA,RSS IF BIT 0 IS CLEAR JMP CFOP,I THEN IT'S READY E031 JSB ERMS,I NOT THEN REPORT IT DEF *+2 AS OUT OF PAPER JMP CFOP,I CONTINUE * *ñ ASC 11,E031 LP OUT OF PAPER/ * HED L.P. TESTS * THIS TEST CHECKS THE PAPER OUT STATUS * AND THE BUFFER CLEAR COMMAND * TST01 EQU * * STBF NOP ENTRY FROM EXEC LDB BT812 CHECK TO SUPPRESS JSB SWRT,I PAPER OUT STATUS CHECK JMP BFCT YES GO TO BUFFER CLEAR CHECK H100 JSB MSGH,I TELL OPERATOR TO DEF STPOM REMOVE PAPER FROM L.P. SC08 LIA CH GET STATUS SLA BIT 0 SHOULD BE HIGH JMP *+3 OK E032 JSB ERMS,I NO TELL OPERATOR DEF ER32 THAT STATUS IS IN ERROR H101 JSB MSGH,I TELL OPERATOR TO DEF STPIM READY STALL THE PAPER SC09 LIA CH GET STATUS SLA,RSS BIT 0 SHOULD BE LOW JMP *+3 OK E033 JSB ERMS,I NO TELL OPERATOR DEF ER33 THAT STATUS IS IN ERROR BFCT JSB OTMSG OUTPUT TO LP DEF STPMM TITLE JSB OTMSG OUTPUT LP DEF NLSBB NEXT LINE SHOULD BE BLANK LDA DM80 SET FOR 80 CHARACTERS STA CNTR LDA AA GET ASCII A JSB OTCHR OUTPUT IT ISZ CNTR DONE? JMP *-3 NO LDA BFCLB GET BUFFER CLEAR BIT (7) SC10 OTA CH OUTPUT IT CLA SC11 OTA CH CLEAR COMMAND JSB OTCMD OUTPUT PRINT COMMAND JMP STBF,I RETURN TO EXEC * ññ STPOM ASC 14,H100 REMOVE PAPER FROM L.P./ STPIM ASC 11,H101 LOAD L.P. PAPER/ ER32 ASC 19,E032 STATUS IS LOW AND SHOULD BE HIGH/ ER33 ASC 19,E033 STATUS IS HIGH AND SHOULD BE LOW/ STPMM ASC 15,STATUS & BUFFER CLEAR TEST 01/ NLSBB ASC 13,NEXT LINE SHOULD BE BLANK/ SKP * THIS TEST WILL OUTPUT 60 LINES * OF CYCLIC CHARACTERS * TST02 EQU * * *ñ CYCL NOP ENTRY FROM EXEC JSB OTMSG TELL OPERATOR WHAT TEST DEF CYCLM LDA DM60 SET 60 STA TMP LINES LDA .40 START WITH A SPACE STA FCHR SAVE FIRST CHARACTER CYCL0 JSB CFOP CHECK FOR OUT OF PAPER LDA FCHR STA CHR AND CHR INCREMENT LDA DM80 SET FOR 80 CHARACTERS STA CNTR CYCL1 LDA CHR GET THE CHARACTER CPA LCHR CHECK IF LAST CHARACTER LDA .40 YES RESET TO FIRST STA CHR JSB OTCHR GIVE IT TO L.P. ISZ CHR MOVE TO NEXT CHARACTER ISZ CNTR 80 CHRS OUT JMP CYCL1 NO JSB OTCMD OUTPUT PRINT COMMAND ISZ FCHR MOVE TO NEXT CHARACTER ISZ TMP 60 LINES JMP CYCL0 NO JMP CYCL,I YES RETURN TO EXEC * CYCLM ASC 17,CYCLIC PATTERN TEST 02 (60 LINES)/ SKP * TRIANGLE & OVER BUFFER FULL * TST03 EQU * * TROV NOP JSB OTMSG TELL OPERATOR WHAT TEST DEF TRM TRIANGLE PATTERN & OVER BUFFER FULL LDA DM80 START WITH 80 CHARACTERS STA CNTR TRL0 JSB CFOP CHECK FOR OUT OF PAPER LDA CNTR SET FOR SPACES CMA,INA ADA DM80 ARS DIVIDE BY 2 STA TMP SAVE AS COUNTER TRL1 LDA TMP SZA,RSS DONE? JMP TRC ISZ TMP NO - COUNT SPACE NOP LDA .40 OUTPUT SPACE JSB OTCHR JMP TRL1 DO NEXT ONE * TRC LDA CNTR OUTPUT STA TMP CHARACTER LDA .H "H" JSB OTCHR ISZ TMP JMP *-3 JSB OTCMD DO A PRINT COMMAND ISZ CNTR ISZ CNTR DONE TRIANGLE? JMP TRL0 NO SKP * *ñ OVBF JSB OTMSG TELL OPERATOR DEF NLSBA NEXT LINE SHOULD BE ALL A'S LDA DM80 STA CNTR OUTPUT 80 A'S JSB CFOP CHECK FOR OUT OF PAPER LDA AA JSB OTCHR ISZ CNTR JMP *-3 LDA DM80 OUTPUT 80 H'S STA CNTR LDA .H JSB OTCHR ISZ CNTR JMP *-3 JSB OTCMD DO A PRINT COMMAND JMP TROV,I * * ññ TRM ASC 21,TRIANGLE PRINT & OVER BUFFER FULL TEST 03/ NLSBA ASC 14,NEXT LINE SHOULD BE ALL A'S/ SKP * THIS TEST OUTPUTS ALL NON-PRINTING CHARACTERS * THEN OUTPUTS A PRINT COMMAND * TST04 EQU * * NPC NOP JSB OTMSG OUTPUT MESSAGE TO PRINTER DEF NPCM NON-PRINTING CHARACTER TEST JSB OTMSG OUTPUT DEF NLSBB NEXT LINE SHOULD BE BLANK LDA .177 START WITH LAST CHR STA CHR LDA DM80 SET FOR 80 CHARACTERS STA CNTR JSB CFOP CHECK FOR OUT-OF-PAPER NPC0 LDA CHR GET CHARACTER INA INCREMENT IT CPA .40 IS THIS THE FIRST PRINT LDA .177 YES - SKIP TO LAST+1 AND .177 ROUND TO ZERO CPA .12 SKIP PRINT COMMAND INA STA CHR JSB OTCHR OUTPUT IT TO LP ISZ CNTR DONE 80? JMP NPC0 NO JSB OTCMD YES ATTEMPT PRINT JMP NPC,I * NPCM ASC 16,NON-PRINTING CHARACTER TEST 04/ SKP * OUTPUT WORST CASE PATTERN * E H I $ # * TST05 EQU * * WCP NOP ENTRY FROM EXEC JSB OTMSG OUTPUT MESSAGE TO PRINTER DEF WCPM WORST CASE PATTERN TEST LDA .E GET CHARACTER E JSB WCPR OUTPUT IT LDA .H GET CHARACTER H JSB WCPR OUTPUT IT LDA .I GET CHARACTER I JSB WCPR OUTPUT IT LDA .$ GET CHARACTER $ JSB WCPR OUTPUT IT LDA .# GET CHARACTER # JSB WCPR OUTPUT IT JMP WCP,I RETURN * WCPM ASC 14,WORST CASE PATTERN TEST 05/ * WCPR NOP STA CHR SAVE CHARACTER LDA DM10 SET FOR 10 LINES STA TMP WCPR0 LDA DM80 AND 80 CHARACTERS STA CNTR JSB CFOP CHECK FOR OUT-OF-PAPER LDA CHR GET CHARACTER JSB OTCHR OUTPUT IT ISZ CNTR DONE 80 CHARACTERS? JMP *-3 JSB OTCMD OUTPUT PRINT COMMAND ISZ TMP DONE 10 LINES? JMP WCPR0 NO JMP WCPR,I YES-RETURN * ñññû .E OCT 105 .H OCT 110 .I OCT 111 .$ OCT 44 .# OCT 43 SKP * THIS TEST MAKES OUTPUTS USING DMA * *ñ TST06 EQU * * DMA NOP LDA CPTO CHECK IF DMA IS AVAILABLE RAR,RAR SLA,RSS ? JMP DMA,I NOT AVAILABLE ABORT TEST JSB OTMSG OUTPUT MESSAGE TO PRINTER DEF DMAM DMA CYCLIC PATTERN TEST (60 LINES) LDA DM60 SET FOR 60 LINES STA TMP LDA .40 START WITH A SPACE STA FCHR SAVE FIRST CHARACTER DMA0 LDA DM80 STA CNTR 80 CHARACTER PATTERN JSB CFOP CHECK FOR OUT OF PAPER LDB DMABF GET POINTER TO BUFFER LDA FCHR GET CHARACTER DMA1 CPA LCHR CHECK IF LAST CHARACTER LDA .40 YES - RESET TO FIRST STA B,I PUT IT IN BUFFER INA MOVE TO NEXT CHARACTER INB MOVE TO NEXT LOCATION ISZ CNTR DONE 80 CHARACTERS JMP DMA1 NO LDA DMAC1 GET CONTROL WORD OTA 6 LDA DMABF GET ADDRESS INA MOVE PAST FIRST CHARACTER CLC 2 PREPAIR DMA FOR ADDRESS OTA 2 OUTPUT ADDRESS LDA DM80 GET COUNT STC 2 PREPAIR DMA FOR COUNT OTA 2 OUTPUT COUNT LDA INDMA SET DMA INTERRUPT TRAP STA 6 LDA IEDMA SET LP INTERRUPT SC12 STA CH LDA DMABF,I GET FIRST CHARACTER SC13 OTA CH SC14 STC CH,C START L.P. STC 6,C AND DMA STF INTP TURN ON INTERRUPTS CLA,INA SET 2MS MAX INA JSB TMRR,I GO WAIT CLC INTP,C LONG ENOUGH E034 JSB ERMS,I TELL OPERATOR THAT DEF DMAE1 DMA TIMED OUT JMP DMA,I RETURN TO EXEC SKP DMAM ASC 22,DMA-DCPC TEST 06 (CYCLIC PATTERN 60 LINES)/ DMAE1 ASC 10,E034 DMA TIMED OUT/ * ñññû DMAC1 OCT 100000 DMABF DEF *+1 BSS 80 OCT 12 ADD PRINT TO END OF BUFFER * IEDMA JSB *+1 LINE PRINTER INTERRUPT NOP CLC INTP,C TURN OFF I/O E035 JSB ERMS,I TELL OPERATOR THAT DEF DMAE2 LP INTERRUPTED BEFORE DMA JMP DMA,I RETURN * ññ DMAE2 ASC 17,E035 L.P. INTERRUPTED BEFORE DMA/ * INDMA JSB *+1 DMA INTERRUPT NOP CLF 6 CLEAR DMA FLAG FOR PRIORITY STRING LDA INLPC SET L.P. COMPLETION ADDRESS SC17 STA CH LDA D300 GET MAX OF 300 MILLSEC JSB TMRR,I CLF INTP LONG ENOUGH E036 JSB ERMS,I REPORT ERROR DEF DMAE3 JMP DMA,I RETURN TO EXEC * ññ DMAE3 ASC 15,E036 L.P. TIMED OUT AFTER DMA ASC 05,TRANSFER/ * *ñ INLPC JSB *+1 L.P. COMPLETION INTERRUPT NOP CLF INTP TURN OFF INTERRUPTS ISZ FCHR MOVE TO NEXT CHARACTER ISZ TMP DONE 60 LINES? JMP DMA0 NO JMP DMA,I YES RETURN TO EXEC SKP * PSEUDO OPERATOR DESIGN * * SWITCH REGISTER MEANING * * 0 = OUTPUT CYCLIC PATTERN * 1 = OUTPUT ONE CHARACTER * 2 = OUTPUT CLEAR BUFFER * 3 = OUTPUT PRINT COMMAND * 4 = LOOP ON SECTION * * TST07 EQU * * POD NOP ENTRY FROM EXEC LDA .40 SET FIRST STA FCHR CHARACTER JSB MSGC,I TELL OPERATOR TO DEF PODM MAKE SWR SELECTION PODL OCT 106002 WAIT FOR HIM LDB .37 JSB SWRT,I CHECK TO EXIT JMP *+2 JMP POD,I YES-ALL SWITCHES DONWN LDB SW0.1 CHECK TO OUTPUT ANY CHARACTERS JSB SWRT,I JSB PODOT YES - OUTPUT LDA BFCLB LDB SW2 CHECK FOR CLEAR BUFFER JSB SWRT,I SC15 OTA CH YES CLA SC16 OTA CH LDB SW3 CHECK TO PRINT JSB SWRT,I JSB OTCMD YES LDB SW4 CHECK TO LOOP JSB SWRT,I JMP PODL+1 YES JMP PODL NO HALT * PODM ASC 14,H102 MAKE SWR SELECTION FOR ASC 08,PSEUDO OPDESIGN/ * ññ SW0.1 OCT 3 SW0 OCT 1 SW1 OCT 2 SW2 OCT 4 SW3 OCT 10 SW4 OCT 20 * SKP * OUTPUT TO LP * * PODOT NOP LDB SW1 CHECK IF A'SINGLE CHARACTER JSB SWRT,I JMP PODOC SINGLE CHARACTER LDA FCHR STA CHR SET FIRST CHARACTER LDA DM80 SET FOR 80 CHARACTERS STA CNTR PODO1 LDA CHR GET CHARACTER CPA LCHR IS IT LAST CHARACTER LDA .40 YES RESET TO FIRST STA CHR JSB OTCHR GIVE IT TO L.P. ISZ CHR MOVE TO NEXT CHARACTER ISZ CNTR 80 CHRS OUT? JMP PODO1 NO JMP PODOX INCREMENT CHARACTER * PODOC LDA DM80 SET FOR 80 CHRS STA CNTR LDA FCHR GET CHARACTER JSB OTCHR GIVE IT TO LP ISZ CNTR 80 CHRS OUT? JMP *-3 NO LDB SW0 CHECK TO INCREMENT CHR JSB SWRT,I JMP *+2 YES JMP PODOT,I PODOX LDA FCHR GET CHARACTER INA INCREMENT IT CPA LCHR IS IT THE LAST LDA .40 YES RESET TO FIRST STA FCHR JMP PODOT,I RETURN * * FWAA EQU ZCEND * END