IMD 1.16: 2/09/2008 14:33:52 84-93736-01 a000 f73601 scout adds viewpoint crt okidata micro line source    @0|)wwЀЀtQql)  " }gA `_l M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF182070102014904811119063127 811119063127MF73601 VOLSCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER TEST PROGRAM   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_l M@iGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B @0DAJL w+™ЀЀΖQA1"   i ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G9H@pܾrCHC C GTq` Lg"gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYS"iwvc Bc A@6<# Ic B# gIjHc r TITL SCOUT VIEWPOINT CRT/OKIDATA PRINTER TEST PROGRAM 93736-10A0 TITL TITLE PAGE * * SCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER * * * TEST PROGRAM * * * 84-93736-10-A0 * * * COPYRIGHT 1982 COMPUTER AUTOMATION INC. * TITL REVISION HISTORY ****************************** * * REVISION HISTORY * ****************************** * * REVISION ISSUE DATE COMMENTS * -------- ---------- -------- * * A0 7/82 ORIGINAL RELEASE * BY ROBERT ROBINSON * REV: EQU 'A0' LATEST REVISION TITL HARDWARE REQUIREMENTS ****************************** * * HARDWARE REQUIREMENTS * ****************************** * * SCOUT 4/04 PROCESSOR WITH PROGRAMMER'S CONSOLE. * * MINIMUM OF 16K WORDS OF READ/WRITE MEMORY. * * SCOUT RS-232 2/4 CHANNEL SERIAL I/O BOARD * (REFERENCE NUMBER 54121) WITH A DEVICE ADDRESS OF :40. * * ADDS VIEWPOINT CRT/KEYBOARD CONNECTED TO CHANNEL 0 * OF THE SERIAL I/O BOARD. * * OKIDATA MICROLINE LINE PRINTER CONNECTED TO CHANNEL * 1 OF THE SERIAL I/O BOARD. * TITL LINKER INFORMATION ****************************** * * LINKER INFORMATION * ****************************** * OBJNOTE 'VEW:OKI:TP.OBJ - REV. ',REV:%-8,REV:&:FF TIT L TEST PROGRAM INFORMATION ****************************** * * TEST PROGRAM INFORMATION * ****************************** * *  CONSISTS OF: * * FUNCTION TESTS * * TEST C - ADDS VIEWPOINT CRT TEST: THIS TEST * ISSUES VARIOUS CURSOR COMMANDS AND * DISPLAYS PATTERNS ON THE ADDS CRT * SCREEN. THE OPERATOR IS REQUIRED * TO VERIFY THAT THE DISPLAY IS * CORRECT. * * TEST K - ADDS VIEWPOINT KEYBOARD TEST: THIS TEST * REQUIRES THE OPERATOR TO ENTER VARIOUS * KEYS/CHARACTERS ON THE KEYBOARD AND TO * VERIFY WHAT WAS ENTERED CORRESPONDS TO * WHAT IS DISPLAYED ON THE CRT. * * TEST P - OKIDATA MICROLINE PRINTER TEST: THIS TEST * WILL PRINT VARIOUS ALPHANUMERIC AND GRAPHIC * PATTERNS ON THE OKIDATA PRINTER. THE * OPERATOR IS REQUIRED TO VERIFY THAT THE * PRINTED PATTERN IS CORRECT. * ****************************** TITL EQUATES (PROGRAM EQUATES) ****************************** * * PROGRAM EQUATES * ****************************** * * ADDS VIEWPOINT CRT/KEYBOARD CONTROL CHARACTERS * HOME EQU :01 HOME CURSOR AT 1,1 SUBDUEMO EQU :41 SUBDUE MODE BLINK EQU :42 BLINKING MODE VIDEOSUP EQU :44 VIDEO SUPPRESS MODE RIGHT EQU :06 MOVE CURSOR 1 POSITION RIGHT BEEP EQU :07 SOUND BEEP BACKSPAC EQU :08 BACK SPACE LF EQU :0A LINE FEED DOWN EQU LF MOVE CURSOR 1 LINE DOWN PAGE EQU :0C CLEAR SCREEN (TOF) CR EQU :0D CARRIAGE RETURN RETURN EQU CR DITTO NEWLINE EQU CR NEW LINE SETTAG EQU :0E TAG BIT SET RESETTAG EQU :0F TAG BIT RESET REVERSEV EQU :50 REVERSE VIDEO MODE LEFT EQU :15 MOVE CURSOR 1 POSITION LEFT UP EQU :1A MOVE CURSOR 1 LINE UP ESCAPE EQU :1B ESCAPE KEY UNDERLIN EQU :60 UNDERLINE MODE PRINTON EQU :33 TRANSPARENT PRINT ON PRINTOFF EQU :34 TRANSPARENT PRINT OFF KEYLOCK EQU :35 KEYBOARD LOCK KEYUNLOC EQU :36 KEYBOARD UNLOCK NORMAL EQU :40 NORMAL DISPLAY ERASELIN EQU :4B ERASE LINE FRAMEERA EQU :6B FRAME ERASE * * OKIDATA MICROLINE PRINTER CONTROL CHARACTERS * GS EQU :1D REDUCED CHARACTER CODE RS EQU :1E NORMAL CHARACTER CODE US EQU :1F ENLARGED CHARACTER CODE TITL * * I/O DEVICE ADDRESSES * CONSL EQU :00 CONSOLE DEVICE ADDRESS MCSDA EQU :40 SCOUT MULTI. CHANNEL SERIAL DEVICE ADDRESS MC:CHAN0 EQU :00 CHANNEL 0 - ADDS VIEWPOINT CRT MC:CHAN1 EQU :02 CHANNEL 1 - OKIDATA PRINTER * * MCS MODE WORDS * CRTMODE EQU :BA EVEN PARITY ENABLED, 1 STP BIT, 7 BIT CHAR. LPMODE EQU :8E 8 DATA BIT, NO PARITY, 1 STOP BIT MCSECHO EQU :18 BOARD ENABLE WITH AUTO ECHO MCSNECHO EQU :08 BOARD ENABLE WITH NO ECHO MCSRTS EQU :23 RTS, DTR AND TRANSMIT ENABLE MCSDTR EQU :06 DTR AND RECEIVE ENABLE * * CONSOLE FUNCTION CODES * SSW EQU :00 CONSOLE SENSE SWITCH (FUNCTION CODE) INT EQU :01 CONSOLE INT. LIGHT (FUNCTION CODE) CDR EQU :04 CONSOLE DATA REG. (FUNCTION CODE) * * PSW BIT EQUATES * CY: EQU 0 CARRY BIT OV: EQU 1 OVERFLOW BIT BY: EQU 2 BYTE MODE BIT CI: EQU 4 CONSOLE INTERRUPT ENABLE BIT RC: EQU 5 REAL-TIME-CLOCK INT. ENABLE BIT XA: EQU 6 EXTENDED ADDRESSING BIT GI: EQU 8 GLOBAL INT. ENABLE BIT EI: EQU 12 EOBS INTS. BIT DI: EQU 13 DATA INTS. BIT TITL EQUATES (CDR DISPLAY) ****************************** * * CDR DISPLAY EQUATES * ****************************** * * END OF TESTING DISPLAY * FINI EQU 0 TESTING  IS ALL DONE * * TRAP/EXCEPTION/CONSOLE INT. DISPLAYS * ER3000 EQU :3000 CONSOLE INTERRUPT ER3100 EQU :3100 UNINPLEMENTED INSTRUCTION TRAP ER3200 EQU :3200 UNINSTALLED MEMORY TRAP ER3300 EQU :3300 POWER FAIL ER3400 EQU :3400 STACK OVERFLOW ER3500 EQU :3500 USER TRAP ER3600 EQU :3600 SYSTEM TRAP ER3700 EQU :3700 ARITHMETIC TRAP TITL MACROS (FILL1, FILL2) ****************************** * * FILL1 - DO SCREEN ERASE AND FILL SCREEN WITH SINGLE CHARACTER * * FILL2 - DO SCREEN ERASE AND FILL SCREEN WITH TWO CHARACTERS * * THESE MACROS WILL GENERATE CODE WHICH * WILL FILL THE CRT SCREEN WITH * CHARACTER(S) PASSED TO THE MACRO. * * CALLING SEQUENCE: * FILL1 CHAR. COUNT,FILL CHAR. * * FILL2 CHAR. COUNT,FILL CHAR. 1,FILL CHAR. 2 * ****************************** * * FILL1 MACRO * FILL1 XMACRO COPY =PAGE,A DO A SCREEN ERASE JSK MCSCRT SEND IT TO CRT COPY =-#(1),Q GET CHARACTER COUNT !CLP0: COPY =#(2),A GET FILL #(2) CHARACTER JSK MCSCRT DISPLAY ON CRT IJNE Q,!CLP0: LOOP UNTIL DONE ENDM * * FILL2 MACRO * FILL2 XMACRO COPY =PAGE,A DO SCREEN ERASE JSK MCSCRT SEND IT TO CRT COPY =-#(1),Q GET CHARACTER COUNT !CLP0: COPY =#(2),A GET FIRST FILL #(2) CHARACTER JSK MCSCRT DISPLAY ON CRT COPY =#(3),A GET SECOND FILL #(3) CHARACTER JSK MCSCRT DISPLAY ON CRT IJNE Q,!CLP0: LOOP UNTIL DONE ENDM TITL MACROS (MCBRX) ****************************** * * MCBRX - THIS MACRO WILL GENERATE CODE * FOR THE CBRX SUBROUTINE CALL. * * CALLING SEQUENCE: * MCBRX REPEAT ADDR.,PREVIOUS MOD. ADDR * ****************************** * MCBRX XMACRO JST CBRX CONTINUE,GO BACK,REPEAT,ABORT? JMP #(1) REPEAT JMP #(2) GO BACK * ENDM TITL MACROS (I:CHAR,I:CHARN) ****************************** * * I:CHAR - DISPLAY MESSAGES AND INPUT CHAR. * I:CHARN - DISPLAY MESSAGES ONLY. * THIS MACROS WILL GENERATE CODE * WHICH WILL CALL THE SUBROUTINE * TO INPUT ANY CHAR. FROM THE KEYBOARD * TO CONTINUE TESTING. * * CALLING SEQUENCE: * I:CHAR MESS. ADDR. * I:CHARN MESS. ADDR. * ****************************** * I:CHAR XMACRO 0 I:CHARN MACENT 1 JST DISMES DISPLAY MESSAGES WORD #(1) MESSAGE ADDR. IFF #(0) JSK INPUT INPUT CHARACTER WITH NO DISPLAY ENDC ENDM TITL MACROS (POSITION, CONTROL1) ****************************** * * POSITION - POSITION CURSOR AT GIVEN X,Y COORDINATES * * CONTROL1 - SEND CONTROL CHARACTER TO CRT * * THIS MACROS WILL GENERATE CODE WHICH WILL * SEND CONTROL CHARACTERS TO THE CRT. * * CALLING SEQUENCE: * POSITION X-COORDINATE,Y-COORDINATE * * CONTROL1 CTRL. CHAR. * ****************************** * * POSITION MACRO * POSITION XMACRO COPY =ESCAPE,A GET FIRST CTRL. CHAR. (ESC) JSK MCSCRT SEND TO CRT COPY ='Y',A GET SECOND CTRL. CHAR. ('Y') JSK MCSCRT SEND TO CRT COPY =#(1),A GET X-COORDINATE (#(1)) JSK MCSCRT SEND TO CRT COPY =#(2),A GET Y-COORDINATE (#(2)) JSK MCSCRT SEND TO CRT ENDM * * CONTROL1 MACRO * CONTROL1 XMACRO COPY =ESCAPE,A GET FIRST CONTROL CHAR. (ESC) JSK MCSCRT SEND IT TO CRT COPY =#(1),A GET SECOND CONTROL CHAR. (#(1)) JSK MCSCRT SEND IT TO CRT ENDM TITL MACROS (KEYTEST) ****************************** * * KEYTEST - KEYBOARD TEST * * THIS MACRO WILL GENERATE CODE *   FOR THE FIRST 5 MODULES OF THE * KEYBOARD TEST. * * CALLING SEQUENCE: (ONE LINE) * KEYTEST ASCII MODULE NUMBER, * CDR MODULE NUMBER, * TEST MESSAGE ADDRESS, * COMPARISON TABLE ADDRESS, * PRESENT MODULE STARTING ADDRESS, * PREVIOUS MODULE STARTING ADDRESS * ****************************** * KEYTEST XMACRO CDRMOD #(1),#(2) COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE #(1) - JST MSGA OUTPUT TEST MESS. WORD #(3) MESS. ADDR. JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG00 MESS. ADDR. COPY =#(4)%1,X GET COMPARISON TABLE ADDR. JSK INKEYBRD INPUT & CHECK KEYS MCBRX #(5),#(6) ENDM TITL MACROS (EJECTP) ****************************** * * EJECTP - EJECT PAGE * * THIS MACRO WILL GENERATE CODE FOR THE * BEGINNING OF EACH MODULE IN THE PRINTER * TEST. * * CALLING SEQUENCE: (ONE LINE) * EJECTP ASCII MODULE NUMBER, *  CDR MODULE NUMBER, * TEST MESSAGE ADDR. * ****************************** * EJECTP XMACRO CDRMOD #(1),#(2)  JST MSGA OUTPUT TEST MESS. WORD #(3) MESS. ADDR. JSK DISTST 'TEST P :MODULE ##(1) -' COPY =RS,A GET CTRL CHAR. (RS) JSK MCSLP SEND TO OKIDATA PRINTER COPY =PAGE,A GET CTRL. CHAR. JSK MCSLP EJECT PAGE COPY FORMTBL,X GET PARAMETER TABLE ADDR. ENDM TITL MACROS (CDRMOD) ****************************** * * CDRMOD - DISPLAY CDR MODULE NUMBER * * THIS MACRO WILL GENERATE CODE TO * DISPLAY THE MODULE NUMBER IN THE * CDR. * * CALLING SEQUENCE: * CDRMOD ASCII MODULE NUMBER, * CDR MODULE NUMBER * ****************************** * CDRMOD XMACRO COPY ='##(1)',A GET MODULE NUMBER - #(1) COPY A,MODNUM STORE IT COPY =:#(2),A GET MODULE NUMBER FOR CDR - :#(2) JSK CDRDIS DISPLAY IT ENDM TITL STANDARD TRAP ADDRESSES ****************************** * * STANDARD TRAPS/EXCEPTION ADDRESSES * ****************************** * MACHINE =:0001 SCOUT 4/04 OPTIONS -:0080 NO CONDITIONALS * ABS :80 POWER UP JST *$+1 JUMP TO POWER UP ROUTINE WORD POWERUP ADD. OF ROUTINE * ABS :84 TRAP ADD. :0084 RES 2,0 UNIMPLEMENTED INSTRUCTION TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UITRT ADD. OF ROUTINE * RES 2,0 UNIMSTALLED MEMORY TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UMRT ADD. OF ROUTINE * RES 2,0 POWER FAIL JST *$+1 JUMP TO SERVICE ROUTINE WORD PFRT ADD. OF ROUTINE * ABS :94 CONSOLE INT. JST *$+1 JUMP TO SERVICE ROUTINE WORD CINT ADD. OF ROUTINE * ABS :9C TRAP ADD. :009C RES 2,0 STACK OVERFLOW JST *$+1 JUMP TO SERVICE ROUTINE WORD STOV ADD. OF ROUTINE * RES 2,0 USER TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UTRT ADD. OF ROUTINE * RES 2,0 SYSTEM TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD STRT ADD. OF ROUTINE * RES 2,0 ARITHEMETIC ERROR JST *$+1 JUMP TO SERVICE ROUTINE WORD AERT ADD. OF ROUTINE TITL PROGRAM STARTUP ****************************** * * PROGRAM STARTUP * * :200 - DEFSTR (DEFAULT START) * * RESET STATUS REG. * RESET SENSE SWITCH * RESET CONSOLE INTERRUPT * SET STACK POINTERS * ENABLE CONSOLE INTERRUPT * PRINT TEST TITLE * ****************************** * ABS :200 PROGRAM START DEFSTR EQU $ COPY  =0,A RESET A-REG. COPY A,S RESET STATUS REG. OUT A,CONSL;INT RESET CONSOLE INT. COPY =STACK,A SET A TO LOW STACK COPY A,L SET LOW STACK LIMIT ADD =128,A SET STACK SIZE COPY A,K SET STACK POINTER JSK SETRDY INITIALIZE SCOUT MCS JST MSGA DISPLAY TITLE OF PROGRAM WORD TITLE MESS. ADD. SBIT CI:,S ENABLE CONSOLE INT. SBIT GI:,S ENABLE INTS. TITL QUERIES (TESTS) ****************************** * * TESTS * * QUERY: * C - ADDS VIEWPOINT CRT * K - ADDS VIEWPOINT KEYBOARD * P - OKIDATA MICROLINE PRINTER * SELECT TEST(S) [C,K,P]- * * DEFAULT IS C, K AND P. * ****************************** * QERY10 EQU $ COPY =TESTS,Y GET TEST TABLE COPY =C:TEST,A GET CRT TEST ADDR. COPY A,0(Y) STORE IN TABLE COPY =K:TEST,A GET KEYBOARD TEST ADDR. COPY A,1(Y) STORE IN TABLE COPY =P:TEST,A GET PRINTER TEST ADDR. COPY A,2(Y) STORE IN TABLE COPY =-1,A SET TERMINATOR COPY A,3(Y) STORE IN TABLE COPY =-4,Q SET INPUT COUNT JST MSGA OUTPUT QUERY WORD QERM10 MESS. ADD. QERY11 JSK MCSINP GET RESPONSE CLSN A,=RETURN CR? JMP QERY12 YES, EXIT CLSN A,=',' ','? JMP QERY11 YES, GET ANOTHER RBIT 5,A SET FOR UPPER CASE ASCII COPY =0,X RESET INPUT FLAG CLSN A,='C' CRT TEST? COPY =C:TEST,X YES, GET TEST ADDR. CLSN A,='K' KEYBOARD TEST? COPY =K:TEST,X YES, GET TEST ADDR. CLSN A,='P' PRINTER TEST? COPY =P:TEST,X YES, GET TEST ADDR. JEQ X,QERY10 IF INCORRECT, REPEAT COPY X,0(Y) STORE ADDR. COPY =-1,A GET TERMINATOR COPY A,1(Y) STORE IT ADD =1,Y INC. TABLE ADDR. IJNE Q,QERY11 GO FOR MORE JMP QERY10 TOO MANY QERY12 COPY =-3,Y SET FOR 3 TIMES COPY =P:TEST,A GET TEST ADDR. COPY =TESTS,X GET TABLE ADDR. COPY =-1,Q TERMINATOR QERY13 CSK Q,0(X) TERMINATOR? NOP NOPE JMP $+2 NOPE AGAIN JMP TSTCRL10 YES, GO DO TESTS CSK A,0(X) PRINTER TEST? NOP NOPE JMP $+2 NOPE ONCE MORE JMP QERY20 YES, DO OTHER QUERIES ADD =1,X INC. TABLE ADDR. IJNE Y,QERY13 LOOP FOR MORE JMP TSTCRL10 NO MORE, SO DO TESTS TITL QUERIES (PAPER SIZE) ****************************** * * PAPER SIZE * * QUERY: * * A - FORM 11 3/4" BY 8 1/2" * B - FORM 8 1/2" BY 11" * C - FORM 15" BY 11" * SELECT PAPER SIZE ([A], B OR C )- * * DEFAULT IS A. * ****************************** * QERY20 EQU $ COPY =FORM:A,A GET DEFAULT TABLE ADDR. COPY A,FORMTBL SET IT COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QERM20 MESS. ADDR. QERY21 JSK MCSINP GET RESPONSE CLSN A,='^' GO BACK? JEQ Q,QERY10 DO IT CLSN A,=RETURN CR? JMP QERY22 IS SO, EXIT JNE Q,QERY20 BEEN HERE BEFORE RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='A' FORM A? COPY =FORM:A,Q YES, GET TABLE ADDR. CLSN A,='B' FORM B? COPY =FORM:B,Q YES, GET TABLE ADDR. CLSN A,='C' FORM C? COPY =FORM:C,Q YES, GET TABLE ADDR. JNE Q,QERY21 GET TERMINATOR COPY =-1,Q SET ERROR FLAG JMP QERY21 GET TERMINATOR QERY22 JLT Q,QERY20 JUMP IF ERROR INPUT! JEQ Q,$+2 IF DEFAULT, JUMP COPY Q,FORMTBL STORE TABLE ADDR. JMP QERY30 GO ON * LPOOL TITL QUERIES (LINES PER INCH) ****************************** * * LINES PER INCH * * QUERY: * * A - 6 LPI * B - 8 LPI * LINES PER INCH ([A] OR B)- * * DEFAULT IS A. * ****************************** * QERY30 EQU $ COPY FORMTBL,X GET PARAMETER TABLE SHIFT X,LO,1 MAKE IT A BYTE ADDR. COPY ='6',A SET DEFAULT FOR 6 LPI SBIT BY:,S BYTE MODE COPYB A,7(X) STORE IN TABLE RBIT BY:, S WORD MODE COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QERM30 MESS. ADDR. QERY31 JSK MCSINP GET RESPONSE CLSN A,='^' GO BACK? JEQ Q,QERY20 DO IT CLSN A,=RETURN CR? JMP QERY32 IF SO, EXIT JNE Q,QERY30 BEEN HERE BEFORE RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='A' 6 LPI? COPY ='6',Q IF SO, GET CODE CLSN A,='B' 8 LPI? COPY ='8',Q IF SO, GET CODE JNE Q,QERY31 GET TERMINATOR COPY =-1,Q SET ERROR FLAG JMP QERY31 GET TERMINATOR QERY32 JLT Q,QERY30 JUMP IF ERROR INPUT! JEQ Q,$+6 DEFAULT  COPY FORMTBL,X GET PARAMETER TABLE SHIFT X,LO,1 MAKE IT A BYTE ADDR. SBIT BY:,S BYTE MODE COPYB Q,7(X) STORE IN TABLE RBIT BY:,S WORD MODE TITL TEST CONTROL (TEST EXECUTION) ****************************** * * TEST CONTROL - TEST EXECUTION AND CONTROL * * THIS SECTION WILL EXECUTE THE REQUESTED * FUNCTION TEST(S). * ****************************** * TSTCRL10 EQU $  COPY =TESTS,A GET TEST TABLE ADD. COPY A,TSTADD SET STARTING ADD. TSTCRL11 EQU $ COPY TSTADD,X GET TABLE ADD. COPY 0(X),X GET TEST ADDR. JGT X,TSTCRL12 IF MORE, JUMP COPY =FINI,A GET CDR 'END OF TESTS' DISPLAY SELP A,CONSL;CDR DISPLAY IT JST MSGA OUTPUT MESS. WORD EOT 'END OF TESTS' JMP QERY10 ELSE EXIT TSTCRL12 EQU $ JMP 0(X) DO TEST TSTCRL13 EQU $ IMS TSTADD INC. TABLE ADD. JMP TSTCRL11 LOOP FOR MORE * LPOOL TITL TESTS (TEST C - ADDS VIEWPOINT CRT TEST) ****************************** * * C:TEST - ADDS VIEWPOINT CRT TEST * * THIS TEST ISSUES VARIOUS CURSOR COMMANDS * AND DISPLAYS PATTERNS ON THE ADDS CRT * SCREEN. THE OPERATOR IS REQUIRED TO VERIFY * THAT THE DISPLAY IS CORRECT. * ****************************** * C:TEST EQU $ TEST C COPY =' C',A GET TEST LETTER COPY A,TSTLET STORE IT COPY =1,A GET CDR TEST DISPLAY SELP A,CONSL;CDR DISPLAY IT * * THIS MODULE WILL FILL THE SCREEN WITH '*'S AND 'U'S. * THEN IT WILL ALTERNATE WITH 'U'S AND '*'S. * CL:MOD00 EQU $ TEST C :MODULE 00 CDRMOD 00,00 FILL2 960,'*','U' I:CHAR C:MSG00 FILL2 960,'U','*' MCBRX CL:MOD00,CL:MOD00 * THIS MODULE WILL FILL THE SCREEN WITH '*'S AND 'U'S. * THEN IT WILL ISSUE A SCREEN ERASE. * CL:MOD01 EQU $ TEST C :MODULE 01 CDRMOD 01,10 FILL2 960,'*','U' I:CHAR C:MSG01 COPY =PAGE,A ISSUE A SCREEN ERASE JSK MCSCRT DO IT MCBRX CL:MOD01,CL:MOD00 JMP CL:MOD02 CONTINUE * LPOOL TITL * * THIS MODULE WILL FILL FIRST 12 LINES OF THE SCREEN WITH 'U'S. * IT WILL THEN PLACE THE CURSOR AT 1,12 AND * ISSUE A FRAME ERASE. * CL:MOD02 EQU $ TEST C :MODULE 02 CDRMOD 02,20 FILL1 960,'U' I:CHAR C:MSG02 POSITION ' ','+' CONTROL1 FRAMEERA MCBRX CL:MOD02,CL:MOD01 * THIS MODULE WILL FILL FIRST 12 LINES OF THE SCREEN WITH 'U'S. * THEN IT WILL PLACE THE CURSOR AT 6,40 AND ISSUE A FRAME ERASE. * THEN IT WILL PLACE THE CURSOR AT 5,1 AND ISSUE A LINE ERASE. * THEN IT WILL ISSUE A SCREEN ERASE. * CL:MOD03 EQU $ TEST C :MODULE 03 CDRMOD 03,30 FILL1 960,'U' I:CHAR C:MSG02 POSITION '%','G' CONTROL1 FRAMEERA I:CHAR C:MSG03 POSITION '$',' ' CONTROL1 ERASELIN I:CHAR C:MSG01 COPY =PAGE,A ERASE ENTIRE SCREEN JSK MCSCRT DO IT MCBRX CL:MOD03,CL:MOD02 JMP CL:MOD04 * LPOOL TITL * * THIS MODULE WILL DISPLAY ALL 'DISPLAYABLE' * CHARACTERS ON THE ADDS CRT. * CL:MOD04 EQU $ TEST C :MODULE 04 CDRMOD 04,40 COPY =PAGE,A ERASE SCREEN JSK MCSCRT DO IT JST MSGA OUTPU T STRING OF CHARACTERS WORD C:MSG04 MESSAGE ADDR. MCBRX CL:MOD04,CL:MOD03 * THIS MODULE WILL FILL THE FIRST 6 LINES OF THE CRT WITH * 'U'S AND PLACE THE CURSOR AT 3,20. THE VARIOUS CURSOR * COMMANDS ARE ISSUED AND THE OPERATOR HAS TO VERIFY THAT * NONE OF THE CHARACTERS ON THE CRT HAVE BEEN ERASED. * CL:MOD05 EQU $ TEST C :MODULE 05 CDRMOD 05,50 FILL1 480,'U' I:CHARN C:MSG05 POSITION '"','3' JSK INPUT GET CHAR. WITH NO ECHO COPY =UP,A GET 'UP' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =DOWN,A GET 'DOWN' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =RIGHT,A GET 'RIGHT' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =LEFT,A GET 'LEFT' CTRL. CHAR.  JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO MCBRX CL:MOD05,CL:MOD04 JMP CL:MOD06 CONTINUE * LPOOL TITL * *  THIS MODULE WILL TEST THE 'VIDEO SUPPRESS' AND * 'NORMAL' ATTRIBUTES OF THE CRT. * CL:MOD06 EQU $ TEST C :MODULE 06 CDRMOD 06,60 JST MSGA OUTPUT TEST MESSAGE WORD C:MSG09 'YOU SHOULD NOT BE ABLE TO SEE THIS' JST MSGA OUTPUT ANOTHER TEST MESSAGE WORD C:MSG11 'YOU SHOULD BE ABLE TO SEE THIS' MCBRX CL:MOD06,CL:MOD05 * THIS MODULE WILL FILL THE SCREEN WITH ALTERNATE * '$'S AND '%'S IN REVERSE VIDEO; THEN IN REVERSE VIDEO WITH * HALF INTENSITY; THEN IN REVERSE VIDEO WITH BLINKING; THEN * IN REVERSE VIDEO WITH HALF INTENSITY AND BLINKING. * CL:MOD07 EQU $ TEST C :MODULE 07 CDRMOD 07,70 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =REVERSEV,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL2 960,'$','%' COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BIT I:CHAR C:MSG12 COPY =REVERSEV;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG13 COPY =REVERSEV;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG14 COPY =REVERSEV;BLINK;SUBDUEMO,Q GET CTRL. CODE  JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD07,CL:MOD06 * THIS MODULE WILL FILL THE SCREEN WITH ALTERNATE * '@'S AND '#'S WITH UNDERLINES; THEN WITH UNDERLINES * AND HALF INTENSITY; THEN WITH UNDERLINES AND BLINKING; * THEN WITH UNERLINES, HALF INTENSITY AND BLINKING. * CL:MOD08 EQU $ TEST C :MODULE 08 CDRMOD 08,80 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =UNDERLIN,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL2 960,'@','#' COPY =RESETTAG,A GET CTRL.CODE JSK MCSCRT RESET TAG BITS I:CHAR C:MSG15 COPY =UNDERLIN;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG16 COPY =UNDERLIN;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG17 COPY =UNDERLIN;BLINK;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD08,CL:MOD07 JMP CL:MOD09 CONTINUE * LPOOL TITL * * THIS MODULE WILL FILL THE SCREEN WITH ALL '*'S IN * HALF INTENSITY; BLINKING; AND THEN IN HALF INTENSITY WITH * BLINKING. * CL:MOD09 EQU $ TEST C :MODULE 09 CDRMOD 09,90 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL1 1920,'*' COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BIT I:CHAR C:MSG19 COPY =BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG18 COPY =SUBDUEMO;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG20 COPY =NORMAL,Q GET CTRL. CODE JSK S ETATTR SET ATTRIBUTE MCBRX CL:MOD09,CL:MOD08 * THIS MODULE WILL TEST THE 'TRANSPARENT PRINT ON', * 'TRANSPARENT OFF' AND 'AUDIBLE TONE (BELL)'. * CL:MOD10 EQU $ TEST C :MODULE 10 CDRMOD 10,A0 COPY =PAGE,A DO A SCREEN ERASE JSK MCSCRT DO IT CONTROL1 PRINTON JST MSGA OUTPUT TEST MESSAGE WORD C:MSG10 'YOU SHOULD NOT BE ABLE TO SEE THIS' CONTROL1 PRINTOFF JST MSGA OUTPUT ANOTHER TEST MESSAGE WORD C:MSG11 I:CHAR C:MSG21 COPY =BEEP,A GET CTRL. CODE JSK MCSCRT SEND TO CRT MCBRX CL:MOD10,CL:MOD09 JMP TSTCRL13 EXIT TEST C * LPOOL TITL TESTS (TEST K - ADDS VIEWPOINT KEYBOARD TEST) ****************************** * * K:TEST - ADDS VIEWPOINT KEYBOARD TEST * * THIS TEST REQUIRES THE OPERATOR TO ENTER VARIOUS * KEYS/CHARACTERS ON THE KEYBOARD AND TO VERIFY * WHAT WAS ENTERED CORRESPONDS TO WHAT IS DISPLAYED * ON THE CRT. * ******************************* * K:TEST EQU $ COPY =' K',A TEST K COPY A,TSTLET STORE IT COPY =2,A GET CDR TEST NUMBER SELP A,CONSL;CDR SEND TO CDR * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN LOWER CASE MODE. * KL:MOD00 EQU $ TEST K :MODULE 00 KEYTEST 00,0,K:MSG01,TABLE0,KL:MOD00,KL:MOD00 * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CAPS MODE * KL:MOD01 EQU $ TEST K :MODULE 01 KEYTEST 01,10,K:MSG02,TABLE1,KL:MOD01,KL:MOD00 * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN SHIFT MODE * KL:MOD02 EQU $ TEST K :MODULE 02 KEYTEST 02,20,K:MSG03,TABLE2,KL:MOD02,KL:MOD01 JMP KL:MOD03 CONTINUE * LPOOL TITL * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CAPS & SHIFT MODE * KL:MOD03 EQU $ TEST K :MODULE 03 KEYTEST 03,30,K:MSG04,TABLE3,KL:MOD03,KL:MOD02 * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CONTROL MODE * KL:MOD04 EQU $ TEST K :MODULE 04 KEYTEST 04,40,K:MSG05,TABLE4,KL:MOD04,KL:MOD03 * * THIS MODULE WILL CHECK THE THREE FUNCTION KEYS F1, F2 AND F3. * KL:MOD05 EQU $ TEST K :MODULE 05 CDRMOD 05,50 COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE 05 - JST MSGA OUTPUT TEST MESS. WORD K:MSG06 MESS. ADDR. COPY =TABLE5%1,X GET COMPARISON TABLE ADDR. COPY =-6,Q SET BYTE COUNT JSK INKEYBRD+1 INPUT & CHECK KEYS MCBRX KL:MOD05,KL:MOD04 JMP KL:MOD06 CONTINUE * LPOOL TITL * * THIS MODULE WILL TEST THE KEYBOARD LOCK AND UNLOCK FUNCTIONS. * KL:MOD06 EQU $ TEST K :MODULE 06 CDRMOD 06,60 JST MSGA OUTPUT TEST MESS. WORD K:MSG07 TEST MESS. ADDR. JSK DISTST TEST K :MODULE 06 - JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG08 MESS. ADDR. CONTROL1 KEYLOCK JSK INPUT GET CHARACTER (HOPEFULLY IS A BREAK) JSK DISTST TEST K :MODULE 06 - JST MSGA OUTPUT THIRD MESS. WORD K:MSG09 MES. ADDR. CONTROL1 KEYLOCK JSK INPUT GET CHARACTER JNE A,$+5 IF NOT BREAK, BEEP COPY =-3,Q SET FOR 3 LOOPS IJNE A,$ INC. INNER LOOP IJNE Q,$-1 INC. OUTTER LOOP JMP $+3 CONTINUE COPY =BEEP,A SOUND THE ALARMS!! JSK MCSCRT AH-OO-GH! CONTROL1 KEYUNLOC MCBRX KL:MOD06,KL:MOD05 * THIS MODULE WILL CHECK THE KEY REPEATING FUNCTION. THE * OPERATOR IS INSTRUCTED TO HOLD DOWN ANY ONE CHARACTER * KEY LONG ENOUGH FOR THE KEY REPEAT TO FUNCTION AND * VISUALLY INSPECT THIS ON THE SCREEN. * KL:MOD07 EQU $ TEST K :MODULE 07 CDRMOD 07,70 COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE 07 - JST MSGA OUTPUT TEST MESS. WORD K:MSG10 MESS. ADDR. JST MSGA OUT PUT ANOTHER TEST MESS. WORD K:MSG11 MESS. ADDR. KLP0:01 JSK MCSINP GET CHAR. CLSN A,=' ' SPACE? JMP $+2 YES, EXIT JMP KLP0:01 ELSE LOOP MCBRX KL:MOD07,KL:MOD06 JMP TSTCRL13 EXIT TEST K * LPOOL TITL TESTS (TEST P - OKIDATA MICROLINE PRINTER TEST) ******************************* * * P:TEST - OKIDATA MICROLINE PRINTER TEST * * THIS TEST WILL PRINT VARIOUS ALPHANUMERIC * AND GRAPHIC PATTERNS ON THE OKIDATA PRINTER. * THE OPERATOR IS REQURIED TO VERIFY THAT THE * PRINTER PATTERN IS CORRECT. * ******************************* * P:TEST EQU $ TEST P COPY =' P',A GET TEST LETTER COPY A,TSTLET STORE IT COPY =3,A GET CDR TEST DISPLAY SELP A,CONSL;CDR DISPLAY IT JSK SETRDYLP INITIALIZE MCS FOR LP COPY FORMTBL,X GET PARAMETER TABLE ADDR. SHIFT X,LO,1 MAKE BYTE ADDR. COPY =-8,Q SET FOR 8 CONTROL CHARS. PLP0:00 SBIT BY:,S BYTE MODE COPYB 0(X),A GET CHAR. RBIT BY:,S WORD MODE JSK MCSLP SEND TO LP ADD =1,X INC. TABLE ADDR. IJNE Q,PLP0:00 DO MORE * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A ROTATING ASCII PATTERN IN NORMAL CHARACTER MODE * PL:MOD00 EQU $ TEST P :MODULE 00 EJECTP 00,00,P:MSG00 COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT COPY =:20,A GET FIRST CHAR. PLP0:01 COPY 4(X),Q GET 'CHARACTERS PER LINE' NEG Q NEGATE IT COPY A,CHARCNT SAVE STARTING CHAR. PLP0:02 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Q,PLP0:02 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP SEND TO LP COPY CHARCNT,A RESTORE CHAR. ADD =1,A CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Y,PLP0:01 DO MORE MCBRX PL:MOD00,PL:MOD00 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN REDUCED CHARACTER MODE. * PL:MOD01 EQU $ TEST P :MODULE 01 EJECTP 01,10,P:MSG01 COPY =GS,A REDUCED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A SET A TO ZERO DIV =3,AQ FIND A THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ FIND NUM. + 2/3(NUM). JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD01,PL:MOD00 JMP PL:MOD02 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN NORMAL CHARACTER MODE. * PL:MOD02 EQU $ TEST P :MODULE 02 EJECTP 02,20,P:MSG02 COPY 4(X),Q GET JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD02,PL:MOD01 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN EXPANDED CHARACTER MODE. * PL:MOD03 EQU $ TEST P :MODULE 03 EJECTP 03,30,P:MSG03 COPY =US,A GET EXPANDED MODE CTRL. CHAR. JSK MCSLP SEND TO LP COPY 4(X),Q GET CHARS. PER LINE SHIFT Q,RO,1 DIVIDE BY 2 JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD03,PL:MOD02 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN REDUCED & EXPANDED CHARACTER MODE. * PL:MOD04 EQU $ TEST P :MODULE 04 EJECTP 04,40,P:MSG04 COPY =GS,A FIRST REDUCED MODE JSK MCSLP SEND TO LP COPY =US,A THEN EXPANDED MODE JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A SET A TO ZERO DIV =3,AQ GET ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) SHIFT Q,RO,1 DIVIDE BY 2 - (NUM + 2/3(NUM))/2 JSK PRINTASC PRI  NT STRAIGHT ASCII MCBRX PL:MOD04,PL:MOD03 JMP PL:MOD05 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A ROTATING GRAPHIC PATTERN IN NORMAL CHARACTER MODE. * PL:MOD05 EQU $ TEST P :MODULE 05 EJECTP 05,50,P:MSG05 COPY =:80,A GET FIRST CHAR. COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT PLP0:03 COPY 4(X),Q GET 'CHARACTERS PER LINE' NEG Q NEGATE IT COPY A,CHARCNT SAVE STARTING CHAR. PLP0:04 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IJNE Q,PLP0:04 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP COPY CHARCNT,A RESTORE CHAR. ADD =1,A CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IJNE Y,PLP0:03 DO MORE MCBRX PL:MOD05,PL:MOD04 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN REDUCED CHARACTER MODE. * PL:MOD06 EQU $ TEST P :MODULE 06 EJECTP 06,60,P:MSG06 COPY =GS,A REDUCED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A RESET A REG. DIV =3,AQ FIND ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD06,PL:MOD05 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN NORMAL CHARACTER MODE. * PL:MOD07 EQU $ TEST P :MODULE 07 EJECTP 07,70,P:MSG07 COPY 4(X),Q GET CHARS. PER LINE JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD07,PL:MOD06 JMP PL:MOD08 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN EXPANDED CHARACTER MODE. * PL:MOD08 EQU $ TEST P :MODULE 08 EJECTP 08,80,P:MSG08 COPY =US,A EXPANDED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE SHIFT Q,RO,1 DIVIDE BY 2 JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD08,PL:MOD07 *  THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN REDUCED & EXPANDED CHARACTER MODE. * PL:MOD09 EQU $ TEST P :MODULE 09 EJECTP 09,90,P:MSG09 COPY =GS,A FIRST REDUCED MODE JSK MCSLP SEND TO OKIDATA COPY =US,A THEN EXPANDED MODE JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A RESET A REG. DIV =3,AQ FIND ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) SHIFT Q,RO,1 DIVIDE BY 2 - (NUM + 2/3(NUM))/2 JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD09,PL:MOD08 JMP TSTCRL13 EXIT TEST P * LPOOL TITL TEST UTILITIES (PRINTASC) ******************************* * * PRINTASC - PRINT STRAIGHT ASCII PATTERN (FULL CHAR. LINE) * * THIS SUBROUTINE WILL PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN. * * CALLING SEQUENCE: * COPY =CHARS. PER LINE,Q * JSK PRINTASC * ******************************* * PRINTASC EQU $ CSK Q,=132 DO RANGE CHECK JMP $+2 ITS OK COPY =132,Q TOO MANY, LIMIT = 132 NEG Q NEGATE IT COPY Q,CHARCNT STORE IT COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT PRINT:00 COPY CHARCNT,Q GET 'CHARACTERS PER LINE' COPY =:20,A FIRST CHARACTER PRINT:01 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Q,PRINT:01 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY   =LF,A LINE FEED JSK MCSLP SEND TO LP IJNE Y,PRINT:00 DO MORE RSK EXIT * CHARCNT WORD 0 CHARACTERS PER LINE TITL TEST UTILITIES (PRINTGRA) ******************************* * * PRINTGRA - PRINT STRAIGHT GRAPHIC PATTERN (FULL CHAR. LINE) * * THIS SUBROUTINE WILL PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN. * * CALLING SEQUENCE: * COPY =CHARS. PER LINE,Q * JSK PRINTGRA * ******************************* * PRINTGRA EQU $ CSK Q,=132 DO RANGE CHECK JMP $+2 ITS OK COPY =132,Q TOO MANY, LIMIT = 132 SUB =25,Q SUBTRACT BARS & SPACES SHIFT Q,RO,2 DIVIDE NUMBER BY 4 NEG Q NEGATE IT COPY Q,CHARCNT STORE IT COPY 5(X),Y GET 'LINES PER PAGE' SHIFT Y,RO,1 DIVIDE BY 2 NEG Y NEGATE IT COPY =:80,A GET STARTING CHAR. PRINT:02 JSK BARS DISPLAY BAR COPY =-4,Q GET SECOND COUNT COPY Q,CHARCNT2 STORE IT PRINT:03 COPY CHARCNT,Q GET 'CHARACTERS PER LINE/4' PRINT:04 JSK MCSLP PRINT CHAR. IJNE Q,PRINT:04 INC. FIRST CHAR. COUNT JSK BARS ADD =1,A NEW CHAR. CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IMS CHARCNT2 INC. SECOND CHAR. COUNT JMP PRINT:03 DO SOME MORE COPY A,Q SAVE CHAR. COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND IT COPY =LF,A CARRIAGE RETURN JSK MCSLP SEND IT JSK BARS DISPLAY BAR COPY =-4,A SET OUTTER COUNT COPY A,CHARCNT2 STORE IT PRINT5 COPY CHARCNT,X GET COUNT COPY =:80,A SET FOR BLANK CHAR. PRINT6 JSK MCSLP SEND TO LP IJNE X,PRINT6 JSK BARS DISPLAY BAR IMS CHARCNT2 INC. OUTTER LOOP JMP PRINT5 LOOP BACK COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND IT COPY =LF,A LINE FEED JSK MCSLP SEND IT COPY Q,A RESTORE CHAR. IJNE Y,PRINT:02 DO SOME MORE LINES RSK EXIT * CHARCNT2 WORD 0 SECOND CHAR. COUNT TITL TEST UTILITIES (BARS) ****************************** * * BARS - DISLAY A BAR IN GRAPHIC MODE * * THIS SUBROUTINE WILL DISPLAY A * GRAPHIC "BAR". * * CALLING SEQUENCE: * JSK BARS * ******************************* * BARS EQU $ PUSH :110 SAVE ALL REGS. COPY =' ',A DISPLAY A SPACE JSK MCSLP DO IT JSK MCSLP DO IT COPY =:BF,A HERE IS A 'BAR' JSK MCSLP DO IT COPY =' ',A DISPLAY A SPACE AGAIN JSK MCSLP DO IT JSK MCSLP DO IT POP  RESTORE ALL RSK EXIT TITL TEST UTILITIES (INKEYBRD) ****************************** * * INKEYBRD - INPUT ALL KEYS AND COMPARE * * THIS SUBROUTINE WILL INPUT ALL KEYS * FROM THE KEYBOARD AND COMPARE EACH * AGAINST THE EXPECTED VALUE FOR EACH * KEYS. * * IF A MISCOMPARE OCCURS THE BELL WILL SOUND * AND THE ROUTINE WILL BE EXITED. * * CALLING SEQUENCE: * COPY =TABLE ADDR.,X * JSK INKEYBRD * ****************************** * INKEYBRD EQU $ COPY =-63,Q TOTAL NUMBER OF KEYS INKEY1 JSK INPUT GET KEY INKEY2 SBIT BY:,S BYTE MODE XORB 0(X),A SAME AS TABLE? RBIT BY:,S WORD MODE JNE A,INKEY3 IF NOT, ERROR ADD =1,X INC. TABLE ADDR. IJNE Q,INKEY1 GO FOR MORE RSK ELSE EXIT INKEY3 COPY =BEEP,A SOUND THE ALARMS!!! JSK MCSCRT AH-OO-GH RSK AND EXIT TITL TEST UTILITIES (CDRDIS) ****************************** * * CDRDIS - DISPLAY MODULE AND TEST NUMBER IN CDR * * THIS SUBROUTINE WILL DISPLAY THE MODULE *  NUMBER PASSED IN THE A-REG. AND THE * TEST NUMBER IN THE CDR. * * CALLING SEQUENCE: * COPY =:MODULE N  UMBER,A * JSK CDRDIS * ****************************** * CDRDIS EQU $ IN CONSL;CDR,Q GET CDR DISPLAY AND =:F,Q MASK FOR TEST ONLY OR A,Q 'OR' IN MODULE NUMBER SELP Q,CONSL;CDR SEND TO CDR RSK EXIT TITL TEST UTILITIES (CBRX) ****************************** * * CBRX - CONTINUE, GO BACK, REPEAT, ABORT * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGES AT LOCATION 1,24: * * TEST X :MODULE XX - * * THEN IT WILL INPUT ONE CHARACTER, WHICH * MUST BE ONE OF THE FOLLOWING, AND EXECUTE * THE COMMAND. * * C - CONTINUE TO NEXT MODULE/TEST, *  B - GO BACK TO PREVIOUS MODULE, * R - REPEAT PRESENT MODULE, * X - ABORT TO NEXT TEST. * * CALLING SEQUENCE: * JST CBRX * WORD ADDR1 REPEAT MODULE * WORD ADDR2 GO TO PREVIOUS MODULE * ****************************** * CBRX ENT JSK DISTST DISPLAY TEST AND MODULE JST MSGA OUTPUT MESS. WORD CBRXMSG '' CBRX1 JSK INPUT GET INPUT - NO ECHO RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='C' CONTINUE? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='B' GO BACK? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='R' REPEAT? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='X' ABORT? JMP CBRX2 YES, DISPLAY ANSWER COPY =BEEP,A BAD ANSWER JSK MCSCRT BEEP THE BOZO JMP CBRX1 TRY AGAIN CBRX2 JSK MCSCRT DISPLAY IT FOR WHAT IT'S WORTH CLSN A,='R' REPEAT MODULE? JMP *CBRX YES, EXIT IMS CBRX INC. RETURN ADDR. CLSN A,='B' GO TO PREVIOUS MODULE? JMP *CBRX YES, EXIT IMS CBRX INC. RETURN ADDR. CLSN A,='C' CONTINUE TESTING? JMP *CBRX YES, EXIT JMP TSTCRL13 ELSE ABORT TEST TITL TEST UTILITIES (DISMES) ****************************** * * DISMES - DISPLAY TEST, MODULE, AND MESSAGE * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGE AT 1,24: * * TEST X :MODULE XX - PRESS ANY KEY - * * AND THEN DISPLAY ANY MESSAGE AFTER * THE '-'. * * CALLING SEQUENCE: * JST DISMES * WORD ADDR1 MESSAGE ADDRESS * ****************************** * DISMES ENT JSK DISTST DISPLAY TEST/MODULE MESS. COPY *DISMES,A GET MESS. ADDR. COPY A,DISMES1 STORE IT IMS DISMES INC. RETURN ADDR. JST MSGA DISPLAY PRESS MESS. WORD PRSMSG ' PRESS ANY KEY - ' JST MSGA DISPLAY NEXT MESS. DISMES1 WORD CBRXMSG MESS. ADDR. JMP *DISMES EXIT TITL TEST UTILITIES (DISTST) ****************************** * *  DISTST - DISPLAY TEST AND MODULE * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGE. * * TEST X:MODULE XX - * * CALLING SEQUENCE: * JSK DISTST * ****************************** * DISTST EQU $ JST MSGA OUTPUT MESS. WORD TSTMSG 'TEST X :MODULE XX - ' RSK EXIT TITL TEST UTILITIES (SETATTR) ****************************** * * SETATTR - SET ATTRIBUTE * * THIS SUBROUTINE WILL SET THE * VISUAL ATTRIBUTES OF THE CRT * ACCORDING TO THE CTRL. CODE * CHARACTER IN THE Q-REG. * * CALLING SEQUENCE: * COPY =CTRL. CODE,Q * JSK SETATTR * ****************************** * SETATTR EQU $ CONTROL1 '0' COPY Q,A PUT ATTRIBUTE CTRL. CODE CHAR. INTO Q JSK MCSCRT SEND TO CRT RSK EXIT * LPOOL TITL PROGRAM UTILITIES (SETRDY,SETRDYLP) ****************************** * * SETRDY - ENABLE MC  S CHANNEL FOR CRT * SETRDYLP - ENABLE MCS CHANNEL FOR PRINTER * * THESE SUBROUTINES WILL ENABLE THE * CHANNEL OF THE MCS FOR THE * DEVICE CONNECTED TO IT. * * CALLING SEQUENCE: * JSK SETRDY, * *  JSK SETRDYLP * ****************************** * SETRDY EQU $ COPY =MCSDA;MC:CHAN0,Q GET CRT DEVICE ADDR.;CHANNEL NO. COPY =8,X UN-RESET BOARD SELP X,MCSDA;3 BOARD CONTROL WORD COPY =CRTMODE,A GET CRT MODE WORD JMP $+3 JUMP OVER * SETRDYLP EQU $ COPY =MCSDA;MC:CHAN1,Q GET LP DEVICE ADDR.;CHANNEL NO. COPY =LPMODE,A GET LP MODE WORD COPY =2,X MEANINGLESS VALUE XNX Q INDEX NEXT OUT X,1 FORCE CHANNEL COPY =:50,X FOR INTERNAL RESET (CONTROL WORD) XNX Q INDEX NEXT OUT X,1 IN ORDER TO SEND THE MODE WORD XNX Q INDEX NEXT OUT A,1 SEND MODE WORD RSK EXIT TITL PROGRAM UTILITIES (MSGA) ****************************** * * MSGA - THIS SUBROUTINE WILL PRINT AN ASCII * MESSAGE, THE LAST CHAR. OF WHICH * MUST BE 0, TO THE CRT. * * CALLING SEQUENCE: * JST MSGA * WORD (MESSAGE ADDR.) * ****************************** * MSGA ENT PRINT MESSAGE COPY X,MSTMP SAVE THE X-REG. COPY *MSGA,X GET MESSAGE ADDR. IMS MSGA INC. RETURN ADDR. SHIFT X,LO,1 CONVERT WORD ADDR. TO A BYTE ADDR. MSGA1 SBIT BY:,S SET BYTE MODE COPYB 0(X),A GET CHAR. FROM MESSAGE RBIT BY:,S SET WORD MODE JEQ A,MSGA2 IF END OF MESSAGE, EXIT LOOP JSK MCSCRT DISPLAY CHAR. ADD =1,X INC. MESSAGE ADDR. JMP MSGA1 LOOP BACK FOR MORE MSGA2 COPY MSTMP,X RESTORE THE X-REG. JMP *MSGA EXIT * MSTMP WORD 0 SAVED X-REG. TITL TEST UTILITIES (INPUT) ****************************** * * INPUT - INPUT CHAR. WITH NO ECHO * * THIS SUBROUTINE WILL INPUT AN * ASCII CHAR. INTO THE A-REG. WITH * NO ECHO TO THE CRT. * * CALLING SEQUENCE: * JSK INPUT * ****************************** * INPUT EQU $ IN MCSDA;MC:CHAN0;1,A INPUT MCS STATUS TBIT 2,A TRANSMITTER EMPTY? JF OV,INPUT IF NOT, THEN WAIT UNTIL THEN COPY =MCSNECHO,A NOW, SET FOR NO ECHO JMP MCSINP0 DO IT TITL PROGRAM UTILITIES (MCSINP) ****************************** * * MCSINP - INPUT ASCII CHAR. FROM THE SCOUT *  MCS AND RETURN IT IN THE A-REG. * * CALLING SEQUENCE: * JST MCSINP * ****************************** * MCSINP EQU $ IN MCSDA;MC:CHAN0;1,A MUST CHECK FOR ALL CHARS. TRANSMITTED TBIT 2,A TRANSMITTER EMPTY? JF OV,MCSINP IF NOT, THEN WAIT UNITL THEN. COPY =MCSECHO,A NOW, SET ECHO TO RECEIVE MCSINP0 EQU $ SELP A,MCSDA;3 BOARD CONTROL WORD MCSINP1 EQU $ IN MCSDA;MC:CHAN0;1,A GET STATUS TBIT 7,A DEVICE READY? JF OV,MCSINP1 IF NOT, KEEY WAITING UNITL THEN COPY =MCSDTR,A GET DTR SETTING OUT A,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD MCSINP2 EQU $ IN MCSDA;MC:CHAN0;1,A GET STATUS TBIT 1,A RECEIVE READY? JF OV,MCSINP2 IF NOT, WAIT FOR IT IN MCSDA;MC:CHAN0,A GET CHAR. AND =:7F,A ENSURE NO PARITY PUSH :10 SAVE ALL COPY =0,X CLEAR TRANSMITTER/RECEIVER OUT X,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD COPY =MCSNECHO,X DISABLE AUTO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (MCSCRT) ****************************** * * MCSCRT - OUTPUT CHAR. IN A-REG. TO CRT * * THIS SUBROUTINE WILL OUTPUT AN * ASCII CHAR. CONTAIN IN THE LOWER * BYTE  OF THE A-REG. TO THE * CRT. * * CALLING SEQUENCE: * COPY =CHAR.,A * JSK MCSCRT * ****************************** * MCSCRT EQU $ PUSH :10 SAVE ALL COPY =MCSNECHO,X SET FOR NO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS OUT X,MCSDA;MC:CHAN0;1 NOT ENABLING TRANSMITTER MCSCRT1 EQU $ IN MCSDA;MC:CHAN0;1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JF OV,MCSCRT1 IF NOT, WAIT FOR IT COPY =MCSRTS,X RTS, DTR AND XMIT ENABLE OUT X,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD MCSCRT2 EQU $ IN MCSDA;MC:CHAN0;1,X WAIT FOR TRANSMIT READY TBIT 0,X IS IT? JF OV,MCSCRT2 IF NOT, WAIT FOR IT OUT A,MCSDA;MC:CHAN0 SEND DATA BYTE POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (MCSLP) ****************************** * * MCSLP - OUTPUT CHAR. IN A-REG. TO LP * * THIS SUBROUTINE WILL OUTPUT AN *  ASCII CHAR. CONTAINED IN THE LOWER * BYTE OF THE A-REG. TO THE LP * * IF THE LP DOESN'T RESPOND READY IN * 3 SECONDS THE FOLLOWING ERROR MESSAGE WILL * BE DISPLAYED ON THE CRT. * * LINE PRINTER TIMED OUT * * CALLING SEQUENCE: * COPY =CHAR.,A * JSK MCSLP * ****************************** * MCSLP EQU $ PUSH :10 SAVE ALL COPY =-2,Q 2 SECOND DELAY COPY Q,CNT2 STORE COUNT COPY =0,Q INNER LOOP COUNT COPY Q,CNT1 STORE COUNT COPY =MCSNECHO,X SET FOR NO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS OUT X,MCSDA;MC:CHAN1;1 NOT ENABLING TRANSMITTER MCSLP1 EQU $ IN MCSDA;MC:CHAN1;1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JT OV,MCSLP2 IF SO, JUMP JST TIME DO TIME DELAY JMP MCSLP1 TIME NOT EXPIRED JMP MCSLP4 TIME EXPIRED MCSLP2 EQU $ COPY =MCSRTS,X RTS, DTR AND XMIT ENABLE OUT X,MCSDA;MC:CHAN1;1 CHANNEL CONTROL WORD MCSLP3 EQU $ IN MCSDA;MC:CHAN1;1,X WAIT FOR TRANSMIT READY TBIT 0,X IS IT?  JT OV,MCSLP5 IF IT IS, JUMP JST TIME ELSE DO TIME DELAY JMP MCSLP3 TIME NOT EXPIRED MCSLP4 EQU $ PUSH :10 SAVE ALL AGAIN JST MSGA OUTPUT LINE PRINTER MESSAGE WORD LPTIOT 'LINE PRINTER TIMED OUT' JSK INPUT GET CHAR. POP RESTORE ALL JMP MCSLP+2 TRY AGAIN MCSLP5 EQU $ OUT A,MCSDA;MC:CHAN1 SEND CHARACTER POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (TIME) ****************************** * * TIME - THIS SUBROUTINE WILL INC. THE * TIME PARAMETERS AND MAKE THE * APPROPRIATE RETURN IF THE TIME * HAS OR HAS NOT EXPIRED. * * CALLING SEQUENCE: * JST TIME * JMP ? TIME NOT EXPIRED * JMP ? TIME EXPIRED * ****************************** * TIME ENT IMS CNT1 INC. INNER LOOP COUNT JMP *TIME COUNT NOT EXPIRED IMS CNT2 INC. OUTTER LOOP COUNT JMP *TIME COUNT NOT EXPIRED IMS TIME TIME EXPIRED JMP *TIME MAKE APPROPRIATE RETURN * CNT1 WORD 0 INNER LOOP COUNT CNT2 WORD 0 OUTTER LOOP COUNT TITL PROGRAM UTILITIES (RESETCRT) ****************************** * * RESETCRT - THIS SUBROUTINE WILL RESET THE * CRT TO 'NORMAL' MODE WITH TAG * BITS RESET AND A SCREEN ERASE. * * CALLING SEQUENCE: * COPY =CDR ERROR DISPLAY,A * JSK RESETCRT * ****************************** * RESETCRT EQU $ IN CONSL;CDR,Q GET CDR DISPLAY AND =:FF,Q MASK FOR TESTS ONLY OR A,Q 'OR' IN CDR ERROR DISPL AY SELP Q,CONSL;CDR COPY =0,A RESET A-REG. COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BITS COPY =NORMAL,Q GET CTRL. CODE JSK SETATTR SET NORMAL ATTRIBUTE CONTROL1 KEYUNLOC RSK EXIT * LPOOL TITL TRAP'S AND CONSOLE INT. SERVICE ROUTINES ****************************** * * TRAP SERVICE ROUTINES * ****************************** * * UNIMPLEMENTED INSTRUCTION TRAP * UITRT ENT UNI. INSTR. TRAP SERVICE ROUTINE SIN 4 STATUS INHIBIT COPY =INSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3100,A GET TRAP CDR DISPLAY SRT2 COPY =0,Y SET Y-REG. TO ZERO COPY Y,S SET PSW TO ZERO COPY X,SR:MSG SAVE MESSAGE ADDR. JSK RESETCRT SET CRT FOR NORMAL MODE JST MSGA OUTPUT ERROR MESSAGE SR:MSG WORD 0 MESSAGE ADDR. SELP Y,MCSDA;3 RESET MULTI-CHANNEL BOARD HLT WAIT HERE JMP DEFSTR GO TO QUERIES * * UNINSTALLED MEMORY TRAP * UMRT ENT UNI. MEM. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =MEMMSG,X GET TRAP MESSAGE ADDR. COPY =ER3200,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER UP * POWERUP ENT PWR. UP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =POWMSG,X GET TRAP MESSAGE ADDR. COPY =ER3300,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER FAIL * PFRT ENT PWR. FAIL SERVICE ROUTINE HLT WAIT FOR POWER * * STACK OVERFLOW * STOV ENT STK. OVR. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =STKMSG,X GET TRAP MESSAGE ADDR. COPY =ER3400,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * USER TRAP * UTRT ENT USER TRAP SERVICE ROUTINE SIN 5 STATUS INUS INHIBIT COPY =POWMSG,X GET TRAP MESSAGE ADDR. COPY =ER3300,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER FAIL * PFRT ENT PWR. FAIL SERVICE ROUTINE HLT WAIT FOR POWER * * STACK OVERFLOW * STOV ENT STK. OVR. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =STKMSG,X GET TRAP MESSAGE ADDR. COPY =ER3400,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * USER TRAP * UTRT ENT USER TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =USEMSG,X GET TRAP MESSAGE ADDR. COPY =ER3500,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * SYSTEM TRAP * STRT ENT SYSTEM TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =SYSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3600,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * ARITHMETIC TRAP * AERT ENT ARIT. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =ARIMSG,X GET TRAP MESSAGE ADDR. COPY =ER3700,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * ****************************** * * CONSOLE INT. SERVICE ROUTINE * ****************************** * CINT ENT CONSOLE INT. SERVICE ROUTINE SIN 2 STATUS INHIBIT COPY =0,X RESET X-REG. COPY X,S RESET STATUS REG. COPY =ER3000,A GET CDR DISPLAY JSK RESETCRT SET NORMAL CRT SELP X,MCSDA;3 RESET MULTI-CHANNEL BOARD JMP DEFSTR GO TO QUERIES * LPOOL TITL TABLES (GLOBAL VARIABLES) ****************************** * * GLOBAL VARIABLES * ****************************** * OPTIONS +:20 * TESTS RES 5,-1 WORKING TEST TABLE * TSTADD WORD TESTS TEST TABLE ADDR. * FORMTBL WORD FORM:A LINE PRINTER FORM TABLE ADDR. * TITL TABLES (KEYBOARD TEST - TABLE0) ****************************** * * TABLE0 - KEYBOARD CHARACTERS/KEYS IN * 'LOWER CASE' MODE * ****************************** * TABLE0 EQU $ * WORD :1B31, :3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:5B5D,:5C61,:7364 * WORD :6667,:686A,:6B6C,:3B27,:0D7F,:7A78,:6376,:626E * WORD :6D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE1) ****************************** * * TABLE1 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS' MODE * ****************************** * TABLE1 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:5B5D,:5C41,:5344 * WORD :4647,:484A,:4B4C,:3B27,:0D7F,:5A58,:4356,:424E * WORD :4D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE2 ****************************** * * TABLE2 - KEYBOARD CHARACTERS/KEYS IN * 'SHIFT' MODE * ****************************** * TABLE2 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:7B7D,:7C61,:7364 * WORD :6667,:686A,:6B6C,:3A22,:0D7F,:7A78,:6376,:626E * WORD :6D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00  TITL TABLES (KEYBOARD TEST - TABLE3) ****************************** * * TABLE3 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS & SHIFT' MODE * ****************************** * TABLE3 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:7B7D,:7C41,:5344 * WORD :4647,:484A,:4B4C,:3A22,:0D7F,:5A58,:4356,:424E * WORD :4D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE4) ****************************** * * TABLE4 - KEYBOARD CHARACTERS/KEYS IN * 'CONTROL' MODE * ****************************** * TABLE4 EQU $ * WORD :1B21,:0023,:2425,:1E26,:2A28,:291F,:2B1E,:0809 * WORD :1117,:0512,:1419,:1509,:0F10,:1B1D,:1C01,:1304 * WORD :0607,:080A,:0B0C,:3A22,:0D1F,:1A18,:0316,:020E * WORD :0D3C,:3E3F,:0037,:1A39,:1501,:0631,:0A33,:302E TITL TABLES (KEYBOARD TEST - TABLE5) ****************************** * * TABLE5 - SPECIAL FUNCTION KEYS F1, F2 AND F3 * ****************************** * TABLE5 EQU $ * BYTE 2,'1',2,'2',2,'3' TITL TABLES (PRINTER TEST - FORM:A) ****************************** * * FORM:A - PARAMETER TABLE FOR 11 3/4" BY 8 1/2" PAPER * *  TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "50" * LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS *  PER LINE - 100 * PROGRAM LINES PER * PAGE - 44 * ****************************** * FORM:A EQU $ * BYTE ESCAPE,'F50' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 100 * WORD 44 TITL TABLES (PRINTER TEST - FORM:B) ****************************** * * FORM:B - PARAMETER TABLE FOR 8 1/2" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "66" * SHORT LINE CODE  - "ESC","B" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE  - 80 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:B EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'B' * BYTE ESCAPE,'6' * WORD 80 * WORD 59 TITL TABLES (PRINTER TEST - FORM:C) *** *************************** * * FORM:C - PARAMETER TABLE FOR 15" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "66" * LONG LINE CODE - "ESC","A" *  LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 128 *  PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:C EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 128 * WORD 59 TITL CRT MESSAGES (QUERY MESSAGES) ****************************** * * QUERY MESSAGES * ****************************** * TITLE WORD :0C20 BYTE 'SCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER' BYTE CR,LF,'TEST PROGRAM - 93898-' WORD REV:,CR%8;LF,0 * QERM10 BYTE CR,LF,'C - ADDS VIEWPOINT CRT TEST' BYTE CR,LF,'K - ADDS VIEWPOINT KEYBOARD TEST' BYTE CR,LF,'P - OKIDATA MICROLINE PRINTER TEST' BYTE CR,LF,'SELECT TEST(S) [C,K,P]-',0 * QERM20 BYTE CR,LF,'A - FORM 11 3/4" BY 8 1/2"' BYTE CR,LF,'B - FORM 8 1/2" BY 11"' BYTE CR,LF,'C - FORM 15" BY 11"' BYTE CR,LF,'SELECT PAPER SIZE ([A], B OR C)-',0 * QERM30 BYTE CR,LF,'A - 6 LPI' BYTE CR,LF,'B - 8 LPI' BYTE CR,LF,'LINES PER INCH ([A] OR B)-',0 TITL CRT MESSAGES (TEST MESSAGES) ***************************** * * TEST MESSAGES * ***************************** * * GENERAL TEST MESSAGES * TSTMSG BYTE ESCAPE,'Y6 ' TESTMSG BYTE CR,LF,'TEST' TSTLET BYTE ' C' BYTE ' :MODULE ' MODNUM BYTE '00 - ',0 * PRSMSG BYTE 'PRESS ANY KEY - ',0 * CBRXMSG BYTE '',ESCAPE,ERASELIN,0 * EOT BYTE CR,LF,'END OF TESTS',CR,LF,0 * LPTIOT BYTE BEEP,CR,LF,'LINE PRINTER TIMED OUT',CR,LF,0 TITL * * TEST C: TEST MESSAGES * C:MSG00 BYTE '',ESCAPE,ERASELIN,0 * C:MSG01 BYTE '',ESCAPE,ERASELIN,0 * C:MSG02 BYTE '',ESCAPE,ERASELIN,0 * C:MSG03 BYTE '',ESCAPE,ERASELIN,0 * C:MSG04 BYTE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' BYTE CR,LF,'abcdefghijklmnopqrstuvwxyz' BYTE CR,LF,'0123456789' BYTE CR,LF,'?!#&$%|`~^_+-="''*@:;.,<>/\[](){}',0 * C:MSG05 BYTE '' BYTE ESCAPE,ERASELIN,0 * C:MSG09 BYTE PAGE,SETTAG,ESCAPE,'0',VIDEOSUP C:MSG10 BYTE 'YOU SHOULD NOT BE ABLE TO SEE THIS',RESETTAG,0 * C:MSG11 BYTE CR,LF,'YOU SHOULD BE ABLE TO SEE THIS',0 * C:MSG12 BYTE '',ESCAPE,ERASELIN,0 * C:MSG13 BYTE '',ESCAPE,ERASELIN,0 * C:MSG14 BYTE '',ESCAPE,ERASELIN,0 * C:MSG15 BYTE '',ESCAPE,ERASELIN,0 * C:MSG16 BYTE '',ESCAPE,ERASELIN,0 * C:MSG17 BYTE '',ESCAPE,ERASELIN,0 * C:MSG18 BYTE '',ESCAPE,ERASELIN,0 * C:MSG19 BYTE '',ESCAPE,ERASELIN,0 * C:MSG20 BYTE '',ESCAPE,ERASELIN,0 * C:MSG21 BYTE '',ESCAPE,ERASELIN,0 TITL * * TEST K: TEST MESSAGES * K:MSG00 BYTE CR,LF,'EACH KEY MUST BE TYPED IN EACH ROW, LEFT TO RIGHT, AS' BYTE ' FOLLOWS:' BYTE CR,LF,'1. MAIN KEYBOARD GROUP (LOWER LEFT GROUP):' BYTE CR,LF,' "ESC" THROUGH "BACK SPACE" KEYS,' BYTE CR,LF,' "TAB" THROUGH "\" KEYS,' BYTE  CR,LF,' "A" THROUGH "RETURN" KEYS,' BYTE CR,LF,' AND "DEL" THROUGH "/" KEYS.' BYTE CR,LF,'2. NUMERIC PAD GROUP (LOWER RIGHT GROUP):' BYTE CR,LF,' "7" THROUGH "9" KEYS,' BYTE CR,LF,' "4" THROUGH "6" KEYS,' BYTE CR,LF,' "1" THROUGH "3" KEYS,' BYTE CR,LF,' AND "0" THROUGH "." KEYS.' BYTE CR,LF,'BEEP TONE INDICATES ERROR.' BYTE CR,LF,'*********************************************************' BYTE CR,LF,0 * K:MSG01 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG02 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG03 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG04 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG05 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG06 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 * K:MSG07 BYTE PAGE,'',0 * K:MSG08 BYTE 'PRESS "ESC","6" AND ANY KEY TO UNLOCK KEYBOARD',0 * K:MSG09 BYTE 'PRESS "CTRL-BREAK" TO UNLOCK KEYBOARD',ESCAPE,ERASELIN,0 * K:MSG10 BYTE '',0 * K:MSG11 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:MSG02 BYTE PAGE,'',0 * P:MSG03 BYTE PAGE,'',0 * P:MSG04 BYTE PAGE,'',0 * P:MSG05 BYTE PAGE,'',0 * P:MSG06 BYTE PAGE,'',0 * P:MSG07 BYTE PAGE,'',0 * P:MSG08 BYTE PAGE,'',0 * P:MSG09 BYTE PAGE,'',0 TITL CRT MESSAGES (TRAP/EXCEPTION MESSAGES) ***************************** * * TRAP/EXCEPTION MESSAGES * ***************************** * INSMSG BYTE CR,LF,'UNIMPLEMENTED INSTRUCTION TRAP',CR,LF,0 * MEMMSG BYTE CR,LF,'UNINSTALLED MEMORY TRAP',CR,LF,0 * POWMSG BYTE CR,LF,'POWER FAIL',CR,LF,0 * STKMSG BYTE CR,LF,'STACK OVERFLOW',CR,LF,0 * USEMSG BYTE CR,LF,'USER TRAP',CR,LF,0 * SYSMSG BYTE CR,LF,'SYSTEM TRAP',CR,LF,0 * ARIMSG BYTE CR,LF,'ARITHMETIC TRAP',CR,LF,0 * TITL STACK ****************************** * * STACK SPACE * ****************************** * STACK EQU $ RES 128,0 STACK SPACE * ENDPROG EQU $ END OF PROGRAM END DEFSTR THAT'S ALL FOLKES!!! CR,LF,'UNIMPLEMENTED INSTRUCTION TRAP',CR,LF,0 * MEMMSG BYTE CR,LF,'UNINSTALLED MEMORY TRAP',CR,LF,0 * POWMSG BYTE CR,LF,'POWER FAIL',CR,LF,0 * STKMSG BYTE CR,LF,'STACK OVERFLOW',CR,LF,0 * USEMSG BYTE CR,LF,'USER TRAP',CR,LF,0 * SYSMSG BYTE CR,LF,'SYSTEM TRAP',CR,LF,0 * ARIMS /AS LO=TV MACRO VEW:OKI:TP(ERR) LINK VEW:OKI:TP 820701020149820701020149820701020149HIBIT COPY =USEMSG,X GET TRAP MESSAGE ADDR. COPY =ER3500,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * SYSTEM TRAP * STRT ENT SYSTEM TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =SYSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3600,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * ARITHMETIC TRAP * AERT ENT ARIT. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =ARIMSG,X GET TRAP MESSAGE ADDR. COPY =ER3700,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * ****************************** * * CONSOLE INT. SERVICE ROUTINE * ****************************** * CINT ENT CONSOLE INT. SERVICE ROUTINE SIN 2 STATUS INHIBIT COPY =0,X RESET X-REG. COPY X,S RESET STATUS REG. COPY =ER3000,A GET CDR DISPLAY JSK RESETCRT SET NORMAL CRT SELP X,MCSDA;3 RESET MULTI-CHANNEL BOARD JMP DEFSTR GO TO QUERIES * LPOOL TITL TABLES (GLOBAL VARIABLES) ****************************** * * GLOBAL VARIABLES * ****************************** * OPTIONS +:20 * TESTS RES 5,-1 WORKING TEST TABLE * TSTADD WORD TESTS TEST TABLE ADDR. * FORMTBL WORD FORM:A LINE PRINTER FORM TABLE ADDR. * TITL TABLES (KEYBOARD TEST - TABLE0) ****************************** * * TABLE0 - KEYBOARD CHARACTERS/KEYS IN * 'LOWER CASE' MODE * ****************************** * TABLE0 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:5B5D,:5C61,:7364 * WORD :6667,:686A,:6B6C,:3B27,:0D7F,:7A78,:6376,:626E * WORD :6D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00  TITL TABLES (KEYBOARD TEST - TABLE1) ****************************** * * TABLE1 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS' MODE * ****************************** * TABLE1 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:5B5D,:5C41,:5344 * WORD :4647,:484A,:4B4C,:3B27,:0D7F,:5A58,:4356,:424E * WORD :4D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE2 ****************************** * * TABLE2 - KEYBOARD CHARACTERS/KEYS IN * 'SHIFT' MODE * ****************************** * TABLE2 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:7B7D,:7C61,:7364 * WORD :6667,:686A,:6B6C,:3A22,:0D7F,:7A78,:6376,:626E * WORD :6D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE3) ****************************** * * TABLE3 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS & SHIFT' MODE * ****************************** * TABLE3 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:7B7D,:7C41,:5344 * WORD :4647,:484A,:4B4C,:3A22,:0D7F,:5A58,:4356,:424E * WORD :4D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE4) ************* ***************** * * TABLE4 - KEYBOARD CHARACTERS/KEYS IN * 'CONTROL' MODE * ****************************** * TABLE4 EQU $ * WORD :1B21,:0023,:2425,:1E26,:2A28,:291F,:2B1E,:0809 * WORD :1117,:0512,:1419,:1509,:0F10,:1B1D,:1C01,:1304 * WORD :0607,:080A,:0B0C,:3A22,:0D1F,:1A18,:0316,:020E * WORD :0D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE5) ****************************** * * TABLE5 - SPECIAL FUNCTION KEYS F1, F2 AND F3 * ****************************** * TABLE5 EQU $ * BYTE 2,'1',2,'2',2,'3' TITL TABLES (PRINTER TEST - FORM:A) ****************************** * * FORM:A - PARAMETER TABLE FOR 11 3/4" BY 8 1/2" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "50" * LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 100 * PROGRAM LINES PER * PAGE - 44 * ****************************** * FORM:A EQU $ * BYTE ESCAPE,'F50' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 100 * WORD 44 TITL TABLES (PRINTER TEST - FORM:B) ****************************** * * FORM:B - PARAMETER TABLE FOR 8 1/2" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE  - "66" * SHORT LINE CODE - "ESC","B" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 80 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:B EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'B' * BYTE ESCAPE,'6' * WORD 80 * WORD 59 TITL TABLES (PRINTER TEST - FORM:C) ****************************** * * FORM:C - PARAMETER TABLE FOR 15" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "66" *  LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS *  PER LINE - 128 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:C EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 128 * WORD 59 TITL CRT MESSAGES (QUERY MESSAGES) ****************************** * * QUERY MESSAGES * ****************************** * TITLE WORD :0C20 BYTE 'SCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER' BYTE CR,LF,'TEST PROGRAM - 93736-' WORD REV:,CR%8;LF,0 * QERM10 BYTE CR,LF,'C - ADDS VIEWPOINT CRT TEST' BYTE CR,LF,'K - ADDS VIEWPOINT KEYBOARD TEST' BYTE CR,LF,'P - OKIDATA MICROLINE PRINTER TEST'  BYTE CR,LF,'SELECT TEST(S) [C,K,P]-',0 * QERM20 BYTE CR,LF,'A - FORM 11 3/4" BY 8 1/2"' BYTE CR,LF,'B - FORM 8 1/2" BY 11"' BYTE CR,LF,'C - FORM 15" BY 11"' BYTE CR,LF,'SELECT PAPER SIZE ([A], B OR C)-',0 * QERM30 BYTE CR,LF,'A - 6 LPI' BYTE CR,LF,'B - 8 LPI' BYTE CR,LF,'LINES PER INCH ([A] OR B)-',0 TITL CRT MESSAGES (TEST MESSAGES) ***************************** * * TEST MESSAGES * ***************************** * * GENERAL TEST MESSAGES * TSTMSG BYTE ESCAPE,'Y6 ' TESTMSG BYTE CR,LF,'TEST' TSTLET B YTE ' C' BYTE ' :MODULE ' MODNUM BYTE '00 - ',0 * PRSMSG BYTE 'PRESS ANY KEY - ',0 * CBRXMSG BYTE '',ESCAPE,ERASELIN,0 * EOT BYTE CR,LF,'END OF TESTS',CR,LF,0 * LPTIOT BYTE BEEP,CR,LF,'LINE PRINTER TIMED OUT',CR,LF,0 TITL * * TEST C: TEST MESSAGES * C:MSG00 BYTE '',ESCAPE,ERASELIN,0 * C:MSG01 BYTE '',ESCAPE,ERASELIN,0 * C:MSG02 BYTE '',ESCAPE,ERASELIN,0 * C:MSG03 BYTE '',ESCAPE,ERASELIN,0 * C:MSG04 BYTE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' BYTE CR,LF,'abcdefghijklmnopqrstuvwxyz' BYTE CR,LF,'0123456789' BYTE CR,LF,'?!#&$%|`~^_+-="''*@:;.,<>/\[](){}',0 * C:MSG05 BYTE '' BYTE ESCAPE,ERASELIN,0 * C:MSG09 BYTE PAGE,SETTAG,ESCAPE,'0',VIDEOSUP C:MSG10 BYTE 'YOU SHOULD NOT BE ABLE TO SEE THIS',RESETTAG,0 * C:MSG11 BYTE CR,LF,'YOU SHOULD BE ABLE TO SEE THIS',0 * C:MSG12 BYTE '',ESCAPE,ERASELIN,0 * C:MSG13 BYTE '',ESCAPE,ERASELIN,0 * C:MSG14 BYTE '',ESCAPE,ERASELIN,0 * C:MSG15 BYTE '',ESCAPE,ERASELIN,0 * C:MSG16 BYTE '',ESCAPE,ERASELIN,0 * C:MSG17 BYTE '',ESCAPE,ERASELIN,0 * C:MSG18 BYTE '',ESCAPE,ERASELIN,0 * C:MSG19 BYTE '',ESCAPE,ERASELIN,0 * C:MSG20 BYTE '',ESCAPE,ERASELIN,0 * C:MSG21 BYTE '',ESCAPE,ERASELIN,0 TITL * * TEST K: TEST MESSAGES * K:MSG00 BYTE CR,LF,'EACH KEY MUST BE TYPED IN EACH ROW, LEFT TO RIGHT, AS' BYTE ' FOLLOWS:' BYTE CR,LF,'1. MAIN KEYBOARD GROUP (LOWER LEFT GROUP):' BYTE CR,LF,' "ESC" THROUGH "BACK SPACE" KEYS,' BYTE CR,LF,' "TAB" THROUGH "\" KEYS,' BYTE CR,LF,' "A" THROUGH "RETURN" KEYS,' BYTE CR,LF,' AND "DEL" THROUGH "/" KEYS.' BYTE CR,LF,'2. NUMERIC PAD GROUP (LOWER RIGHT GROUP):' BYTE CR,LF,' "7" THROUGH "9" KEYS,' BYTE CR,LF,' "4" THROUGH "6" KEYS,' BYTE CR,LF,' "1" THROUGH "3" KEYS,' BYTE CR,LF,' AND "0" THROUGH "." KEYS.' BYTE CR,LF,'BEEP TONE INDICATES ERROR.' BYTE CR,LF,'*********************************************************' BYTE CR,LF,0 * K:MSG01 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG02 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG03 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG04 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG05 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG06 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 * K:MSG07 BYTE PAGE,'',0 * K:MSG08 BYTE 'PRESS "ESC","6" AND ANY KEY TO UNLOCK KEYBOARD',0 * K:MSG09 BYTE 'PRESS "CTRL-BREAK" TO UNLOCK KEYBOARD',ESCAPE,ERASELIN,0 * K:MSG10 BYTE '',0 * K:MSG11 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:MSG02 BYTE PAGE,'',0 * P:MSG03 BYTE PAGE,'',0 * P:MSG04 BYTE PAGE,'',0 * P:MSG05 BYTE PAGE,'',0 * P:MSG06 BYTE PAGE,'',0 * P:MSG07 BYTE PAGE,'',0 * P:MSG08 BYTE PAGE,'',0 * P:MSG09 BYTE PAGE,'',0 TITL CRT MESSAGES (TRAP/EXCEPTION MESSAGES) ***************************** * * TRAP/EXCEPTION MESSAGES * ***************************** * INSMSG BYTE CR,LF,'UNIMPLEMENTED INSTRUCTION TRAP',CR,LF,0 * MEMMSG BYTE CR,LF,'UNINSTALLED MEMORY TRAP',CR,LF,0 * POWMSG BYTE CR,LF,'POWER FAIL',CR,LF,0 * STKMSG BYTE CR,LF,'STACK OVERFLOW',CR,LF,0 * USEMSG BYTE CR,LF,'USER TRAP',CR,LF,0 * SYSMSG BYTE CR,LF,'SYSTEM TRAP',CR,LF,0 * ARIMSG BYTE CR,LF,'ARITHMETIC TRAP',CR,LF,0 * TITL STACK ****************************** * * STACK SPACE * ****************************** * STACK EQU $ RES 128,0 STACK SPACE * ENDPROG EQU $ END OF PROGRAM END DEFSTR THAT'S ALL FOLKES!!! ,'AND PRESS THE SPACE BAR TO EXIT>',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:M=0,A RESET A-REG. COPY A,S RESET STATUS REG. OUT A,CONSL;INT RESET CONSOLE INT. COPY =STACK,A SET A TO LOW STACK COPY A,L SET LOW STACK LIMIT ADD =128,A SET STACK SIZE COPY A,K SET STACK POINTER JSK SETRDY INITIALIZE SCOUT MCS JST MSGA DISPLAY TITLE OF PROGRAM WORD TITLE MESS. ADD. SBIT CI:,S ENABLE CONSOLE INT. SBIT GI:,S ENABLE INTS. TITL QUERIES (TESTS) ****************************** * * TESTS * * QUERY: * C - ADDS VIEWPOINT CRT * K - ADDS VIEWPOINT KEYBOARD * P - OKIDATA MICROLINE PRINTER * SELECT TEST(S) [C,K,P]- * * DEFAULT IS C, K AND P. * ****************************** * QERY10 EQU $ COPY =TESTS,Y GET TEST TABLE COPY =C:TEST,A GET CRT TEST ADDR. COPY A,0(Y) STORE IN TABLE COPY =K:TEST,A GET KEYBOARD TEST ADDR. COPY A,1(Y) STORE IN TABLE COPY =P:TEST,A GET PRINTER TEST ADDR. COPY A,2(Y) STORE IN TABLE COPY =-1,A SET TERMINATOR COPY A,3(Y) STORE IN TABLE COPY =-4,Q SET INPUT COUNT JST MSGA OUTPUT QUERY WORD QERM10 MESS. ADD. QERY11 JSK MCSINP GET RESPONSE CLSN A,=RETURN CR? JMP QERY12 YES, EXIT CLSN A,=',' ','? JMP QERY11 YES, GET ANOTHER RBIT 5,A SET FOR UPPER CASE ASCII COPY =0,X RESET INPUT FLAG CLSN A,='C' CRT TEST? COPY =C:TEST,X YES, GET TEST ADDR. CLSN A,='K' KEYBOARD TEST? COPY =K:TEST,X YES, GET TEST ADDR. CLSN A,='P' PRINTER TEST? COPY =P:TEST,X YES, GET TEST ADDR. JEQ X,QERY10 IF INCORRECT, REPEAT COPY X,0(Y) STORE ADDR. COPY =-1,A GET TERMINATOR COPY A,1(Y) STORE IT ADD =1,Y INC. TABLE ADDR. IJNE Q,QERY11 GO FOR MORE JMP  QERY10 TOO MANY QERY12 COPY =-3,Y SET FOR 3 TIMES COPY =P:TEST,A GET TEST ADDR. COPY =TESTS,X GET TABLE ADDR. COPY =-1,Q TERMINATOR QERY13 CSK Q,0(X) TERMINATOR? NOP NOPE JMP $+2 NOPE AGAIN JMP TSTCRL10 YES, GO DO TESTS CSK A,0(X) PRINTER TEST? NOP NOPE JMP $+2 NOPE ONCE MORE JMP QERY20 YES, DO OTHER QUERIES ADD =1,X INC. TABLE ADDR. IJNE Y,QERY13 LOOP FOR MORE JMP TSTCRL10 NO MORE, SO DO TESTS TITL QUERIES (PAPER SIZE) ****************************** * * PAPER SIZE * * QUERY: * * A - FORM 11 3/4" BY 8 1/2" * B - FORM 8 1/2" BY 11" * C - FORM 15" BY 11" * SELECT PAPER SIZE ([A], B OR C )- * * DEFAULT IS A. * ****************************** * QERY20 EQU $ COPY =FORM:A,A GET DEFAULT TABLE ADDR. COPY A,FORMTBL SET IT COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QERM20 MESS. ADDR. QERY21 JSK MCSINP GET RESPONSE CLSN A,='^' GO BACK? JEQ Q,QERY10 DO IT CLSN A,=RETURN CR? JMP QERY22 IS SO, EXIT JNE Q,QERY20 BEEN HERE BEFORE RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='A' FORM A? COPY =FORM:A,Q YES, GET TABLE ADDR. CLSN A,='B' FORM B? COPY =FORM:B,Q YES, GET TABLE ADDR. CLSN A,='C' FORM C? COPY =FORM:C,Q YES, GET TABLE ADDR. JNE Q,QERY21 GET TERMINATOR COPY =-1,Q SET ERROR FLAG JMP QERY21 GET TERMINATOR QERY22 JLT Q,QERY20 JUMP IF ERROR INPUT! JEQ Q,$+2 IF DEFAULT, JUMP COPY Q,FORMTBL STORE TABLE ADDR. JMP QERY30 GO ON * LPOOL TITL QUERIES (LINES PER INCH) ****************************** * * LINES PER INCH * * QUERY: * * A - 6 LPI * B - 8 LPI * LINES PER INCH ([A] OR B)- * * DEFAULT IS A. * ****************************** * QERY30 EQU $ COPY FORMTBL,X GET PARAMETER TABLE SHIFT X,LO,1 MAKE IT A BYTE ADDR. COPY ='6',A SET DEFAULT FOR 6 LPI SBIT BY:,S BYTE MODE COPYB A,7(X) STORE IN TABLE RBIT BY:,S WORD MODE COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QERM30 MESS. ADDR. QERY31 JSK MCSINP GET RESPONSE CLSN A,='^' GO BACK? JEQ Q,QERY20 DO IT CLSN A,=RETURN CR? JMP QERY32 IF SO, EXIT JNE Q,QERY30 BEEN HERE BEFORE RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='A' 6 LPI? COPY ='6',Q IF SO, GET CODE CLSN A,='B' 8 LPI? COPY ='8',Q IF SO, GET CODE JNE Q,QERY31 GET TERMINATOR COPY =-1,Q SET ERROR FLAG JMP QERY31 GET TERMINATOR QERY32 JLT Q,QERY30 JUMP IF ERROR INPUT! JEQ Q,$+6 DEFAULT  COPY FORMTBL,X GET PARAMETER TABLE SHIFT X,LO,1 MAKE IT A BYTE ADDR. SBIT BY:,S BYTE MODE COPYB Q,7(X) STORE IN TABLE RBIT BY:,S WORD MODE TITL TEST CONTROL (TEST EXECUTION) ****************************** * * TEST CONTROL - TEST EXECUTION AND CONTROL * * THIS SECTION WILL EXECUTE THE REQUESTED * FUNCTION TEST(S). * ****************************** * TSTCRL10 EQU $  COPY =TESTS,A GET TEST TABLE ADD. COPY A,TSTADD SET STARTING ADD. TSTCRL11 EQU $ COPY TSTADD,X GET TABLE ADD. COPY 0(X),X GET TEST ADDR. JGT X,TSTCRL12 IF MORE, JUMP COPY =FINI,A GET CDR 'END OF TESTS' DISPLAY SELP A,CONSL;CDR DISPLAY IT JST MSGA OUTPUT MESS. WORD EOT 'END OF TESTS' JMP QERY10 ELSE EXIT TSTCRL12 EQU $ JMP 0(X) DO TEST TSTCRL13 EQU $ IMS TSTADD INC. TABLE ADD. JMP TSTCRL11 LOOP FOR MORE * LPOOL TITL TESTS (TEST C - ADDS VIEWPOINT CRT TEST) ****************************** * * C:TEST - ADDS VIEWPOINT CRT TEST * * THIS TEST ISSUES VARIOUS CURSOR COMMANDS * AND DISPLAYS PATTERNS ON THE  ADDS CRT * SCREEN. THE OPERATOR IS REQUIRED TO VERIFY * THAT THE DISPLAY IS CORRECT. * ****************************** * C:TEST EQU $ TEST C COPY =' C',A GET TEST LETTER COPY A,TSTLET STORE IT COPY =1,A GET CDR TEST DISPLAY SELP A,CONSL;CDR DISPLAY IT * * THIS MODULE WILL FILL THE SCREEN WITH '*'S AND 'U'S. * THEN IT WILL ALTERNATE WITH 'U'S AND '*'S. * CL:MOD00 EQU $ TEST C :MODULE 00 CDRMOD 00,00 FILL2 960,'*','U' I:CHAR C:MSG00 FILL2 960,'U','*' MCBRX CL:MOD00,CL:MOD00 * THIS MODULE WILL FILL THE SCREEN WITH '*'S AND 'U'S. * THEN IT WILL ISSUE A SCREEN ERASE. * CL:MOD01 EQU $ TEST C :MODULE 01 CDRMOD 01,10 FILL2 960,'*','U' I:CHAR C:MSG01 COPY =PAGE,A ISSUE A SCREEN ERASE JSK MCSCRT DO IT MCBRX CL:MOD01,CL:MOD00 JMP CL:MOD02 CONTINUE * LPOOL TITL * * THIS MODULE WILL FILL FIRST 12 LINES OF THE SCREEN WITH 'U'S. * IT WILL THEN PLACE THE CURSOR AT 1,12 AND * ISSUE A FRAME ERASE. * CL:MOD02 EQU $ TEST C :MODULE 02 CDRMOD 02,20 FILL1 960,'U' I:CHAR C:MSG02 POSITION ' ','+' CONTROL1 FRAMEERA MCBRX CL:MOD02,CL:MOD01 * THIS MODULE WILL FILL FIRST 12 LINES OF THE SCREEN WITH 'U'S. * THEN IT WILL PLACE THE CURSOR AT 6,40 AND ISSUE A FRAME ERASE. * THEN IT WILL PLACE THE CURSOR AT 5,1 AND ISSUE A LINE ERASE. * THEN IT WILL ISSUE A SCREEN ERASE. * CL:MOD03 EQU $ TEST C :MODULE 03 CDRMOD 03,30 FILL1 960,'U' I:CHAR C:MSG02 POSITION '%','G' CONTROL1 FRAMEERA I:CHAR C:MSG03 POSITION '$',' ' CONTROL1 ERASELIN I:CHAR C:MSG01 COPY =PAGE,A ERASE ENTIRE SCREEN JSK MCSCRT DO IT MCBRX CL:MOD03,CL:MOD02 JMP CL:MOD04 * LPOOL TITL * * THIS MODULE WILL DISPLAY ALL 'DISPLAYABLE' * CHARACTERS ON THE ADDS CRT. * CL:MOD04 EQU $ TEST C :MODULE 04 CDRMOD 04,40 COPY =PAGE,A ERASE SCREEN JSK MCSCRT DO IT JST MSGA OUTPUT STRING OF CHARACTERS WORD C:MSG04 MESSAGE ADDR. MCBRX CL:MOD04,CL:MOD03 * THIS MODULE WILL FILL THE FIRST 6 LINES OF THE CRT WITH * 'U'S AND PLACE THE CURSOR AT 3,20. THE VARIOUS CURSOR * COMMANDS ARE ISSUED AND THE OPERATOR HAS TO VERIFY THAT * NONE OF THE CHARACTERS ON THE CRT HAVE BEEN ERASED. * CL:MOD05 EQU $ TEST C :MODULE 05 CDRMOD 05,50 FILL1 480,'U' I:CHARN C:MSG05 POSITION '"','3' JSK INPUT GET CHAR. WITH NO ECHO COPY =UP,A GET 'UP' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =DOWN,A GET 'DOWN' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =RIGHT,A GET 'RIGHT' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =LEFT,A GET 'LEFT' CTRL. CHAR.  JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO MCBRX CL:MOD05,CL:MOD04 JMP CL:MOD06 CONTINUE * LPOOL TITL * *  THIS MODULE WILL TEST THE 'VIDEO SUPPRESS' AND * 'NORMAL' ATTRIBUTES OF THE CRT. * CL:MOD06 EQU $ TEST C :MODULE 06 CDRMOD 06,60 JST MSGA OUTPUT TEST MESSAGE WORD C:MSG09 'YOU SHOULD NOT BE ABLE TO SEE THIS' JST MSGA OUTPUT ANOTHER TEST MESSAGE WORD C:MSG11 'YOU SHOULD BE ABLE TO SEE THIS' MCBRX CL:MOD06,CL:MOD05 * THIS MODULE WILL FILL THE SCREEN WITH ALTERNATE * '$'S AND '%'S IN REVERSE VIDEO; THEN IN REVERSE VIDEO WITH * HALF INTENSITY; THEN IN REVERSE VIDEO WITH BLINKING; THEN * IN REVERSE VIDEO WITH HALF INTENSITY AND BLINKING. * CL:MOD07 EQU $ TEST C :MODULE 07 CDRMOD 07,70 COPY =SETTAG,A GET CTRL. CODE JSK MCSC RT SEND TO CRT COPY =REVERSEV,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL2 960,'$','%' COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BIT I:CHAR C:MSG12 COPY =REVERSEV;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG13 COPY =REVERSEV;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG14 COPY =REVERSEV;BLINK;SUBDUEMO,Q GET CTRL. CODE  JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD07,CL:MOD06 * THIS MODULE WILL FILL THE SCREEN WITH ALTERNATE * '@'S AND '#'S WITH UNDERLINES; THEN WITH UNDERLINES * AND HALF INTENSITY; THEN WITH UNDERLINES AND BLINKING; * THEN WITH UNERLINES, HALF INTENSITY AND BLINKING. * CL:MOD08 EQU $ TEST C :MODULE 08 CDRMOD 08,80 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =UNDERLIN,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL2 960,'@','#' COPY =RESETTAG,A GET CTRL.CODE JSK MCSCRT RESET TAG BITS I:CHAR C:MSG15 COPY =UNDERLIN;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG16 COPY =UNDERLIN;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG17 COPY =UNDERLIN;BLINK;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD08,CL:MOD07 JMP CL:MOD09 CONTINUE * LPOOL TITL * * THIS MODULE WILL FILL THE SCREEN WITH ALL '*'S IN * HALF INTENSITY; BLINKING; AND THEN IN HALF INTENSITY WITH * BLINKING. * CL:MOD09 EQU $ TEST C :MODULE 09 CDRMOD 09,90 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL1 1920,'*' COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BIT I:CHAR C:MSG19 COPY =BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG18 COPY =SUBDUEMO;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG20 COPY =NORMAL,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD09,CL:MOD08 * THIS MODULE WILL TEST THE 'TRANSPARENT PRINT ON', * 'TRANSPARENT OFF' AND 'AUDIBLE TONE (BELL)'. * CL:MOD10 EQU $ TEST C :MODULE 10 CDRMOD 10,A0 COPY =PAGE,A DO A SCREEN ERASE JSK MCSCRT DO IT CONTROL1 PRINTON JST MSGA OUTPUT TEST MESSAGE WORD C:MSG10 'YOU SHOULD NOT BE ABLE TO SEE THIS' CONTROL1 PRINTOFF JST MSGA OUTPUT ANOTHER TEST MESSAGE WORD C:MSG11 I:CHAR C:MSG21 COPY =BEEP,A GET CTRL. CODE JSK MCSCRT SEND TO CRT MCBRX CL:MOD10,CL:MOD09 JMP TSTCRL13 EXIT TEST C * LPOOL TITL TESTS (TEST K - ADDS VIEWPOINT KEYBOARD TEST) ****************************** * * K:TEST - ADDS VIEWPOINT KEYBOARD TEST * * THIS TEST REQUIRES THE OPERATOR TO ENTER VARIOUS * KEYS/CHARACTERS ON THE KEYBOARD AND TO VERIFY * WHAT WAS ENTERED CORRESPONDS TO WHAT IS DISPLAYED * ON THE CRT. * ******************************* * K:TEST EQU $ COPY =' K',A TEST K COPY A,TSTLET STORE IT COPY =2,A GET CDR TEST NUMBER SELP A,CONSL;CDR SEND TO CDR * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN LOWER CASE MODE. * KL:MOD00 EQU $ TEST K :MODULE 00 KEYTEST 00,0,K:MSG01,TABLE0,KL:MOD00,KL:MOD00 * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CAPS MODE * KL:MOD01 EQU $ TEST K :MODULE 01 KEYTEST 01,10,K:MSG02,TABLE1,KL:MOD01,KL:MOD00 * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN SHIFT MODE * KL:MOD02 EQU $ TEST K :MODULE 02 KEYTEST 02,20,K:MSG03,TABLE2,KL:MOD02,KL:MOD01 JMP KL:MOD03 CONTINUE * LPOOL TITL * * THIS MODULE WILL AS K FOR INPUT OF ALL KEYS - IN CAPS & SHIFT MODE * KL:MOD03 EQU $ TEST K :MODULE 03 KEYTEST 03,30,K:MSG04,TABLE3,KL:MOD03,KL:MOD02 * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CONTROL MODE * KL:MOD04 EQU $ TEST K :MODULE 04 KEYTEST 04,40,K:MSG05,TABLE4,KL:MOD04,KL:MOD03 * * THIS MODULE WILL CHECK THE THREE FUNCTION KEYS F1, F2 AND F3. * KL:MOD05 EQU $ TEST K :MODULE 05 CDRMOD 05,50 COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE 05 - JST MSGA OUTPUT TEST MESS. WORD K:MSG06 MESS. ADDR. COPY =TABLE5%1,X GET COMPARISON TABLE ADDR. COPY =-6,Q SET BYTE COUNT JSK INKEYBRD+1 INPUT & CHECK KEYS MCBRX KL:MOD05,KL:MOD04 JMP KL:MOD06 CONTINUE * LPOOL TITL * * THIS MODULE WILL TEST THE KEYBOARD LOCK AND UNLOCK FUNCTIONS. * KL:MOD06 EQU $ TEST K :MODULE 06 CDRMOD 06,60 JST MSGA OUTPUT TEST MESS. WORD K:MSG07 TEST MESS. ADDR. JSK DISTST TEST K :MODULE 06 - JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG08 MESS. ADDR. CONTROL1 KEYLOCK JSK INPUT GET CHARACTER (HOPEFULLY IS A BREAK) JSK DISTST TEST K :MODULE 06 - JST MSGA OUTPUT THIRD MESS. WORD K:MSG09 MES. ADDR. CONTROL1 KEYLOCK JSK INPUT GET CHARACTER JNE A,$+5 IF NOT BREAK, BEEP COPY =-3,Q SET FOR 3 LOOPS IJNE A,$ INC. INNER LOOP IJNE Q,$-1 INC. OUTTER LOOP JMP $+3 CONTINUE COPY =BEEP,A SOUND THE ALARMS!! JSK MCSCRT AH-OO-GH! CONTROL1 KEYUNLOC MCBRX KL:MOD06,KL:MOD05 * THIS MODULE WILL CHECK THE KEY REPEATING FUNCTION. THE * OPERATOR IS INSTRUCTED TO HOLD DOWN ANY ONE CHARACTER * KEY LONG ENOUGH FOR THE KEY REPEAT TO FUNCTION AND * VISUALLY INSPECT THIS ON THE SCREEN. * KL:MOD07 EQU $ TEST K :MODULE 07 CDRMOD 07,70 COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE 07 - JST MSGA OUTPUT TEST MESS. WORD K:MSG10 MESS. ADDR. JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG11 MESS. ADDR. KLP0:01 JSK MCSINP GET CHAR. CLSN A,=' ' SPACE? JMP $+2 YES, EXIT JMP KLP0:01 ELSE LOOP MCBRX KL:MOD07,KL:MOD06 JMP TSTCRL13 EXIT TEST K * LPOOL TITL TESTS (TEST P - OKIDATA MICROLINE PRINTER TEST) ******************************* * * P:TEST - OKIDATA MICROLINE PRINTER TEST * * THIS TEST WILL PRINT VARIOUS ALPHANUMERIC * AND GRAPHIC PATTERNS ON THE OKIDATA PRINTER. * THE OPERATOR IS REQURIED TO VERIFY THAT THE * PRINTER PATTERN IS CORRECT. * ******************************* * P:TEST EQU $ TEST P COPY =' P',A GET TEST LETTER COPY A,TSTLET STORE IT COPY =3,A GET CDR TEST DISPLAY SELP A,CONSL;CDR DISPLAY IT JSK SETRDYLP INITIALIZE MCS FOR LP COPY FORMTBL,X GET PARAMETER TABLE ADDR. SHIFT X,LO,1 MAKE BYTE ADDR. COPY =-8,Q SET FOR 8 CONTROL CHARS. PLP0:00 SBIT BY:,S BYTE MODE COPYB 0(X),A GET CHAR. RBIT BY:,S WORD MODE JSK MCSLP SEND TO LP ADD =1,X INC. TABLE ADDR. IJNE Q,PLP0:00 DO MORE * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A ROTATING ASCII PATTERN IN NORMAL CHARACTER MODE * PL:MOD00 EQU $ TEST P :MODULE 00 EJECTP 00,00,P:MSG00 COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT COPY =:20,A GET FIRST CHAR. PLP0:01 COPY 4(X),Q GET 'CHARACTERS PER LINE' NEG Q NEGATE IT COPY A,CHARCNT SAVE STARTING CHAR. PLP0:02 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Q,PLP0:02 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND  TO LP COPY =LF,A LINE FEED JSK MCSLP SEND TO LP COPY CHARCNT,A RESTORE CHAR. ADD =1,A CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Y,PLP0:01 DO MORE MCBRX PL:MOD00,PL:MOD00 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN REDUCED CHARACTER MODE. * PL:MOD01 EQU $ TEST P :MODULE 01 EJECTP 01,10,P:MSG01 COPY =GS,A REDUCED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A SET A TO ZERO DIV =3,AQ FIND A THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ FIND NUM. + 2/3(NUM). JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD01,PL:MOD00 JMP PL:MOD02 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN NORMAL CHARACTER MODE. * PL:MOD02 EQU $ TEST P :MODULE 02 EJECTP 02,20,P:MSG02 COPY 4(X),Q GET JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD02,PL:MOD01 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN EXPANDED CHARACTER MODE. * PL:MOD03 EQU $ TEST P :MODULE 03 EJECTP 03,30,P:MSG03 COPY =US,A GET EXPANDED MODE CTRL. CHAR. JSK MCSLP SEND TO LP COPY 4(X),Q GET CHARS. PER LINE SHIFT Q,RO,1 DIVIDE BY 2 JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD03,PL:MOD02 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN REDUCED & EXPANDED CHARACTER MODE. * PL:MOD04 EQU $ TEST P :MODULE 04 EJECTP 04,40,P:MSG04 COPY =GS,A FIRST REDUCED MODE JSK MCSLP SEND TO LP COPY =US,A THEN EXPANDED MODE JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A SET A TO ZERO DIV =3,AQ GET ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) SHIFT Q,RO,1 DIVIDE BY 2 - (NUM + 2/3(NUM))/2 JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD04,PL:MOD03 JMP PL:MOD05 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A ROTATING GRAPHIC PATTERN IN NORMAL CHARACTER MODE. * PL:MOD05 EQU $ TEST P :MODULE 05 EJECTP 05,50,P:MSG05 COPY =:80,A GET FIRST CHAR. COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT PLP0:03 COPY 4(X),Q GET 'CHARACTERS PER LINE' NEG Q NEGATE IT COPY A,CHARCNT SAVE STARTING CHAR. PLP0:04 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IJNE Q,PLP0:04 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP COPY CHARCNT,A RESTORE CHAR. ADD =1,A CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IJNE Y,PLP0:03 DO MORE MCBRX PL:MOD05,PL:MOD04 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN REDUCED CHARACTER MODE. * PL:MOD06 EQU $ TEST P :MODULE 06 EJECTP 06,60,P:MSG06 COPY =GS,A REDUCED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A RESET A REG. DIV =3,AQ FIND ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD06,PL:MOD05 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN NORMAL CHARACTER MODE. * PL:MOD07 EQU $ TEST P :MODULE 07 EJECTP 07,70,P:MSG07 COPY 4(X),Q GET CHARS. PER LINE JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD07,PL:MOD06 JMP PL:MOD08  CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN EXPANDED CHARACTER MODE. * PL:MOD08 EQU $ TEST P :MODULE 08 EJECTP 08,80,P:MSG08 COPY =US,A EXPANDED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE SHIFT Q,RO,1 DIVIDE BY 2 JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD08,PL:MOD07 *  THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN REDUCED & EXPANDED CHARACTER MODE. * PL:MOD09 EQU $ TEST P :MODULE 09 EJECTP 09,90,P:MSG09 COPY =GS,A FIRST REDUCED MODE JSK MCSLP SEND TO OKIDATA COPY =US,A THEN EXPANDED MODE JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A RESET A REG. DIV =3,AQ FIND ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) SHIFT Q,RO,1 DIVIDE BY 2 - (NUM + 2/3(NUM))/2 JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD09,PL:MOD08 JMP TSTCRL13 EXIT TEST P * LPOOL TITL TEST UTILITIES (PRINTASC) ******************************* * * PRINTASC - PRINT STRAIGHT ASCII PATTERN (FULL CHAR. LINE) * * THIS SUBROUTINE WILL PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN. * * CALLING SEQUENCE: * COPY =CHARS. PER LINE,Q * JSK PRINTASC * ******************************* * PRINTASC EQU $ CSK Q,=132 DO RANGE CHECK JMP $+2 ITS OK COPY =132,Q TOO MANY, LIMIT = 132 NEG Q NEGATE IT COPY Q,CHARCNT STORE IT COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT PRINT:00 COPY CHARCNT,Q GET 'CHARACTERS PER LINE' COPY =:20,A FIRST CHARACTER PRINT:01 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Q,PRINT:01 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP SEND TO LP IJNE Y,PRINT:00 DO MORE RSK EXIT * CHARCNT WORD 0 CHARACTERS PER LINE TITL TEST UTILITIES (PRINTGRA) ******************************* * * PRINTGRA - PRINT STRAIGHT GRAPHIC PATTERN (FULL CHAR. LINE) * * THIS SUBROUTINE WILL PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN. * * CALLING SEQUENCE: * COPY =CHARS. PER LINE,Q * JSK PRINTGRA * ******************************* * PRINTGRA EQU $ CSK Q,=132 DO RANGE CHECK JMP $+2 ITS OK COPY =132,Q TOO MANY, LIMIT = 132 SUB =25,Q SUBTRACT BARS & SPACES SHIFT Q,RO,2 DIVIDE NUMBER BY 4 NEG Q NEGATE IT COPY Q,CHARCNT STORE IT COPY 5(X),Y GET 'LINES PER PAGE' SHIFT Y,RO,1 DIVIDE BY 2 NEG Y NEGATE IT COPY =:80,A GET STARTING CHAR. PRINT:02 JSK BARS DISPLAY BAR COPY =-4,Q GET SECOND COUNT COPY Q,CHARCNT2 STORE IT PRINT:03 COPY CHARCNT,Q GET 'CHARACTERS PER LINE/4' PRINT:04 JSK MCSLP PRINT CHAR. IJNE Q,PRINT:04 INC. FIRST CHAR. COUNT JSK BARS ADD =1,A NEW CHAR. CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IMS CHARCNT2 INC. SECOND CHAR. COUNT JMP PRINT:03 DO SOME MORE COPY A,Q SAVE CHAR. COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND IT COPY =LF,A CARRIAGE RETURN JSK MCSLP SEND IT JSK BARS DISPLAY BAR COPY =-4,A SET OUTTER COUNT COPY A,CHARCNT2 STORE IT PRINT5 COPY CHARCNT,X GET COUNT COPY =:80,A SET FOR BLANK CHAR. PRINT6 JSK MCSLP SEND TO LP IJNE X,PRINT6 JSK BARS DISPLAY BAR IMS CHARCNT2 INC. OUTTER LOOP JMP PRINT5 LOOP BACK COPY =CR,A CARRIAGE RETUR N JSK MCSLP SEND IT COPY =LF,A LINE FEED JSK MCSLP SEND IT COPY Q,A RESTORE CHAR. IJNE Y,PRINT:02 DO SOME MORE LINES RSK EXIT * CHARCNT2 WORD 0 SECOND CHAR. COUNT TITL TEST UTILITIES (BARS) ****************************** * * BARS - DISLAY A BAR IN GRAPHIC MODE * * THIS SUBROUTINE WILL DISPLAY A * GRAPHIC "BAR". * * CALLING SEQUENCE: * JSK BARS * ******************************* * BARS EQU $ PUSH :110 SAVE ALL REGS. COPY =' ',A DISPLAY A SPACE JSK MCSLP DO IT JSK MCSLP DO IT COPY =:BF,A HERE IS A 'BAR' JSK MCSLP DO IT COPY =' ',A DISPLAY A SPACE AGAIN JSK MCSLP DO IT JSK MCSLP DO IT POP  RESTORE ALL RSK EXIT TITL TEST UTILITIES (INKEYBRD) ****************************** * * INKEYBRD - INPUT ALL KEYS AND COMPARE * * THIS SUBROUTINE WILL INPUT ALL KEYS * FROM THE KEYBOARD AND COMPARE EACH * AGAINST THE EXPECTED VALUE FOR EACH * KEYS. * * IF A MISCOMPARE OCCURS THE BELL WILL SOUND * AND THE ROUTINE WILL BE EXITED. * * CALLING SEQUENCE: * COPY =TABLE ADDR.,X * JSK INKEYBRD * ****************************** * INKEYBRD EQU $ COPY =-63,Q TOTAL NUMBER OF KEYS INKEY1 JSK INPUT GET KEY INKEY2 SBIT BY:,S BYTE MODE XORB 0(X),A SAME AS TABLE? RBIT BY:,S WORD MODE JNE A,INKEY3 IF NOT, ERROR ADD =1,X INC. TABLE ADDR. IJNE Q,INKEY1 GO FOR MORE RSK ELSE EXIT INKEY3 COPY =BEEP,A SOUND THE ALARMS!!! JSK MCSCRT AH-OO-GH RSK AND EXIT TITL TEST UTILITIES (CDRDIS) ****************************** * * CDRDIS - DISPLAY MODULE AND TEST NUMBER IN CDR * * THIS SUBROUTINE WILL DISPLAY THE MODULE *  NUMBER PASSED IN THE A-REG. AND THE * TEST NUMBER IN THE CDR. * * CALLING SEQUENCE: * COPY =:MODULE NUMBER,A * JSK CDRDIS * ****************************** * CDRDIS EQU $ IN CONSL;CDR,Q GET CDR DISPLAY AND =:F,Q MASK FOR TEST ONLY OR A,Q 'OR' IN MODULE NUMBER SELP Q,CONSL;CDR SEND TO CDR RSK EXIT TITL TEST UTILITIES (CBRX) ****************************** * * CBRX - CONTINUE, GO BACK, REPEAT, ABORT * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGES AT LOCATION 1,24: * * TEST X :MODULE XX - * * THEN IT WILL INPUT ONE CHARACTER, WHICH * MUST BE ONE OF THE FOLLOWING, AND EXECUTE * THE COMMAND. * * C - CONTINUE TO NEXT MODULE/TEST, *  B - GO BACK TO PREVIOUS MODULE, * R - REPEAT PRESENT MODULE, * X - ABORT TO NEXT TEST. * * CALLING SEQUENCE: * JST CBRX * WORD ADDR1 REPEAT MODULE * WORD ADDR2 GO TO PREVIOUS MODULE * ****************************** * CBRX ENT JSK DISTST DISPLAY TEST AND MODULE JST MSGA OUTPUT MESS. WORD CBRXMSG '' CBRX1 JSK INPUT GET INPUT - NO ECHO RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='C' CONTINUE? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='B' GO BACK? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='R' REPEAT? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='X' ABORT? JMP CBRX2 YES, DISPLAY ANSWER COPY =BEEP,A BAD ANSWER JSK MCSCRT BEEP THE BOZO JMP CBRX1 TRY AGAIN CBRX2 JSK MCSCRT DISPLAY IT FOR WHAT IT'S WORTH CLSN A,='R' REPEAT MODULE? JMP *CBRX YES, EXIT IMS CBRX INC. RETURN ADDR. CLSN A,='B' GO TO PREVIOUS MODULE? JMP *CBRX YES,  EXIT IMS CBRX INC. RETURN ADDR. CLSN A,='C' CONTINUE TESTING? JMP *CBRX YES, EXIT JMP TSTCRL13 ELSE ABORT TEST TITL TEST UTILITIES (DISMES) ****************************** * * DISMES - DISPLAY TEST, MODULE, AND MESSAGE * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGE AT 1,24: * * TEST X :MODULE XX - PRESS ANY KEY - * * AND THEN DISPLAY ANY MESSAGE AFTER * THE '-'. * * CALLING SEQUENCE: * JST DISMES * WORD ADDR1 MESSAGE ADDRESS * ****************************** * DISMES ENT JSK DISTST DISPLAY TEST/MODULE MESS. COPY *DISMES,A GET MESS. ADDR. COPY A,DISMES1 STORE IT IMS DISMES INC. RETURN ADDR. JST MSGA DISPLAY PRESS MESS. WORD PRSMSG ' PRESS ANY KEY - ' JST MSGA DISPLAY NEXT MESS. DISMES1 WORD CBRXMSG MESS. ADDR. JMP *DISMES EXIT TITL TEST UTILITIES (DISTST) ****************************** * *  DISTST - DISPLAY TEST AND MODULE * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGE. * * TEST X:MODULE XX - * * CALLING SEQUENCE: * JSK DISTST * ****************************** * DISTST EQU $ JST MSGA OUTPUT MESS. WORD TSTMSG 'TEST X :MODULE XX - ' RSK EXIT TITL TEST UTILITIES (SETATTR) ****************************** * * SETATTR - SET ATTRIBUTE * * THIS SUBROUTINE WILL SET THE * VISUAL ATTRIBUTES OF THE CRT * ACCORDING TO THE CTRL. CODE * CHARACTER IN THE Q-REG. * * CALLING SEQUENCE: * COPY =CTRL. CODE,Q * JSK SETATTR * ****************************** * SETATTR EQU $ CONTROL1 '0' COPY Q,A PUT ATTRIBUTE CTRL. CODE CHAR. INTO Q JSK MCSCRT SEND TO CRT RSK EXIT * LPOOL TITL PROGRAM UTILITIES (SETRDY,SETRDYLP) ****************************** * * SETRDY - ENABLE MCS CHANNEL FOR CRT * SETRDYLP - ENABLE MCS CHANNEL FOR PRINTER * * THESE SUBROUTINES WILL ENABLE THE * CHANNEL OF THE MCS FOR THE * DEVICE CONNECTED TO IT. * * CALLING SEQUENCE: * JSK SETRDY, * *  JSK SETRDYLP * ****************************** * SETRDY EQU $ COPY =MCSDA;MC:CHAN0,Q GET CRT DEVICE ADDR.;CHANNEL NO. COPY =8,X UN-RESET BOARD SELP X,MCSDA;3 BOARD CONTROL WORD COPY =CRTMODE,A GET CRT MODE WORD JMP $+3 JUMP OVER * SETRDYLP EQU $ COPY =MCSDA;MC:CHAN1,Q GET LP DEVICE ADDR.;CHANNEL NO. COPY =LPMODE,A GET LP MODE WORD COPY =2,X MEANINGLESS VALUE XNX Q INDEX NEXT OUT X,1 FORCE CHANNEL COPY =:50,X FOR INTERNAL RESET (CONTROL WORD) XNX Q INDEX NEXT OUT X,1 IN ORDER TO SEND THE MODE WORD XNX Q INDEX NEXT OUT A,1 SEND MODE WORD RSK EXIT TITL PROGRAM UTILITIES (MSGA) ****************************** * * MSGA - THIS SUBROUTINE WILL PRINT AN ASCII * MESSAGE, THE LAST CHAR. OF WHICH * MUST BE 0, TO THE CRT. * * CALLING SEQUENCE: * JST MSGA * WORD (MESSAGE ADDR.) * ****************************** * MSGA ENT PRINT MESSAGE COPY X,MSTMP SAVE THE X-REG. COPY *MSGA,X GET MESSAGE ADDR. IMS MSGA INC. RETURN ADDR. SHIFT X,LO,1 CONVERT WORD ADDR. TO A BYTE ADDR. MSGA1 SBIT BY:,S SET BYTE MODE COPYB 0(X),A GET CHAR. FROM MESSAGE RBIT BY:,S SET WORD MODE JEQ A,MSGA2 IF END OF MESSAGE, EXIT LOOP JSK MCSCRT DISPLAY CHAR. ADD =1,X INC. MESSAGE ADDR. JMP MSGA1 LOOP BACK FOR MORE MSGA2 COPY MSTMP,X RESTORE THE X-REG . JMP *MSGA EXIT * MSTMP WORD 0 SAVED X-REG. TITL TEST UTILITIES (INPUT) ****************************** * * INPUT - INPUT CHAR. WITH NO ECHO * * THIS SUBROUTINE WILL INPUT AN * ASCII CHAR. INTO THE A-REG. WITH * NO ECHO TO THE CRT. * * CALLING SEQUENCE: * JSK INPUT * ****************************** * INPUT EQU $ IN MCSDA;MC:CHAN0;1,A INPUT MCS STATUS TBIT 2,A TRANSMITTER EMPTY? JF OV,INPUT IF NOT, THEN WAIT UNTIL THEN COPY =MCSNECHO,A NOW, SET FOR NO ECHO JMP MCSINP0 DO IT TITL PROGRAM UTILITIES (MCSINP) ****************************** * * MCSINP - INPUT ASCII CHAR. FROM THE SCOUT *  MCS AND RETURN IT IN THE A-REG. * * CALLING SEQUENCE: * JST MCSINP * ****************************** * MCSINP EQU $ IN MCSDA;MC:CHAN0;1,A MUST CHECK FOR ALL CHARS. TRANSMITTED TBIT 2,A TRANSMITTER EMPTY? JF OV,MCSINP IF NOT, THEN WAIT UNITL THEN. COPY =MCSECHO,A NOW, SET ECHO TO RECEIVE MCSINP0 EQU $ SELP A,MCSDA;3 BOARD CONTROL WORD MCSINP1 EQU $ IN MCSDA;MC:CHAN0;1,A GET STATUS TBIT 7,A DEVICE READY? JF OV,MCSINP1 IF NOT, KEEY WAITING UNITL THEN COPY =MCSDTR,A GET DTR SETTING OUT A,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD MCSINP2 EQU $ IN MCSDA;MC:CHAN0;1,A GET STATUS TBIT 1,A RECEIVE READY? JF OV,MCSINP2 IF NOT, WAIT FOR IT IN MCSDA;MC:CHAN0,A GET CHAR. AND =:7F,A ENSURE NO PARITY PUSH :10 SAVE ALL COPY =0,X CLEAR TRANSMITTER/RECEIVER OUT X,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD COPY =MCSNECHO,X DISABLE AUTO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (MCSCRT) ****************************** * * MCSCRT - OUTPUT CHAR. IN A-REG. TO CRT * * THIS SUBROUTINE WILL OUTPUT AN * ASCII CHAR. CONTAIN IN THE LOWER * BYTE OF THE A-REG. TO THE * CRT. * * CALLING SEQUENCE: * COPY =CHAR.,A * JSK MCSCRT * ****************************** * MCSCRT EQU $ PUSH :10 SAVE ALL COPY =MCSNECHO,X SET FOR NO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS OUT X,MCSDA;MC:CHAN0;1 NOT ENABLING TRANSMITTER MCSCRT1 EQU $ IN MCSDA;MC:CHAN0;1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JF OV,MCSCRT1 IF NOT, WAIT FOR IT COPY =MCSRTS,X RTS, DTR AND XMIT ENABLE OUT X,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD MCSCRT2 EQU $ IN MCSDA;MC:CHAN0;1,X WAIT FOR TRANSMIT READY TBIT 0,X IS IT? JF OV,MCSCRT2 IF NOT, WAIT FOR IT OUT A,MCSDA;MC:CHAN0 SEND DATA BYTE POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (MCSLP) ****************************** * * MCSLP - OUTPUT CHAR. IN A-REG. TO LP * * THIS SUBROUTINE WILL OUTPUT AN *  ASCII CHAR. CONTAINED IN THE LOWER * BYTE OF THE A-REG. TO THE LP * * IF THE LP DOESN'T RESPOND READY IN * 3 SECONDS THE FOLLOWING ERROR MESSAGE WILL * BE DISPLAYED ON THE CRT. * * LINE PRINTER TIMED OUT * * CALLING SEQUENCE: * COPY =CHAR.,A * JSK MCSLP * ****************************** * MCSLP EQU $ PUSH :10 SAVE ALL COPY =-2,Q 2 SECOND DELAY COPY Q,CNT2 STORE COUNT COPY =0,Q INNER LOOP COUNT COPY Q,CNT1 STORE COUNT COPY =MCSNECHO,X SET FOR NO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS OUT X,MCSDA;MC:CHAN1;1  NOT ENABLING TRANSMITTER MCSLP1 EQU $ IN MCSDA;MC:CHAN1;1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JT OV,MCSLP2 IF SO, JUMP JST TIME DO TIME DELAY JMP MCSLP1 TIME NOT EXPIRED JMP MCSLP4 TIME EXPIRED MCSLP2 EQU $ COPY =MCSRTS,X RTS, DTR AND XMIT ENABLE OUT X,MCSDA;MC:CHAN1;1 CHANNEL CONTROL WORD MCSLP3 EQU $ IN MCSDA;MC:CHAN1;1,X WAIT FOR TRANSMIT READY TBIT 0,X IS IT?  JT OV,MCSLP5 IF IT IS, JUMP JST TIME ELSE DO TIME DELAY JMP MCSLP3 TIME NOT EXPIRED MCSLP4 EQU $ PUSH :10 SAVE ALL AGAIN JST MSGA OUTPUT LINE PRINTER MESSAGE WORD LPTIOT 'LINE PRINTER TIMED OUT' JSK INPUT GET CHAR. POP RESTORE ALL JMP MCSLP+2 TRY AGAIN MCSLP5 EQU $ OUT A,MCSDA;MC:CHAN1 SEND CHARACTER POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (TIME) ****************************** * * TIME - THIS SUBROUTINE WILL INC. THE * TIME PARAMETERS AND MAKE THE * APPROPRIATE RETURN IF THE TIME * HAS OR HAS NOT EXPIRED. * * CALLING SEQUENCE: * JST TIME * JMP ? TIME NOT EXPIRED * JMP ? TIME EXPIRED * ****************************** * TIME ENT IMS CNT1 INC. INNER LOOP COUNT JMP *TIME COUNT NOT EXPIRED IMS CNT2 INC. OUTTER LOOP COUNT JMP *TIME COUNT NOT EXPIRED IMS TIME TIME EXPIRED JMP *TIME MAKE APPROPRIATE RETURN * CNT1 WORD 0 INNER LOOP COUNT CNT2 WORD 0 OUTTER LOOP COUNT TITL PROGRAM UTILITIES (RESETCRT) ****************************** * * RESETCRT - THIS SUBROUTINE WILL RESET THE * CRT TO 'NORMAL' MODE WITH TAG * BITS RESET AND A SCREEN ERASE. * * CALLING SEQUENCE: * COPY =CDR ERROR DISPLAY,A * JSK RESETCRT * ****************************** * RESETCRT EQU $ IN CONSL;CDR,Q GET CDR DISPLAY AND =:FF,Q MASK FOR TESTS ONLY OR A,Q 'OR' IN CDR ERROR DISPLAY SELP Q,CONSL;CDR COPY =0,A RESET A-REG. COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BITS COPY =NORMAL,Q GET CTRL. CODE JSK SETATTR SET NORMAL ATTRIBUTE CONTROL1 KEYUNLOC RSK EXIT * LPOOL TITL TRAP'S AND CONSOLE INT. SERVICE ROUTINES ****************************** * * TRAP SERVICE ROUTINES * ****************************** * * UNIMPLEMENTED INSTRUCTION TRAP * UITRT ENT UNI. INSTR. TRAP SERVICE ROUTINE SIN 4 STATUS INHIBIT COPY =INSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3100,A GET TRAP CDR DISPLAY SRT2 COPY =0,Y SET Y-REG. TO ZERO COPY Y,S SET PSW TO ZERO COPY X,SR:MSG SAVE MESSAGE ADDR. JSK RESETCRT SET CRT FOR NORMAL MODE JST MSGA OUTPUT ERROR MESSAGE SR:MSG WORD 0 MESSAGE ADDR. SELP Y,MCSDA;3 RESET MULTI-CHANNEL BOARD HLT WAIT HERE JMP DEFSTR GO TO QUERIES * * UNINSTALLED MEMORY TRAP * UMRT ENT UNI. MEM. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =MEMMSG,X GET TRAP MESSAGE ADDR. COPY =ER3200,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER UP * POWERUP ENT PWR. UP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =POWMSG,X GET TRAP MESSAGE ADDR. COPY =ER3300,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER FAIL * PFRT ENT PWR. FAIL SERVICE ROUTINE HLT WAIT FOR POWER * * STACK OVERFLOW * STOV ENT STK. OVR. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =STKMSG,X GET TRAP MESSAGE ADDR. COPY =ER3400,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * USER TRAP * UTRT ENT USER TRAP SERVICE ROUTINE SIN 5 STATUS IN  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIe820701020149820701020149811117142911e@820701020149820701020149811117143011" e820701020149820701020149820701020149e820701020149820701020149820701020149820701020149820701020149820701020149eZv8111171427355081111714281150811117143009eu08207010205390082070102054275811119063029evZ8111181147412581111811481650811118115032 e4p# 8111181149557581111811503350811117142810$ % & ' ( ) * + . VEW:OKI:TP ASMVEW:OKI:TP JCLVEW:OKI:TP BAKVEW:OKI:TP BAK, HIBIT COPY =USEMSG,X GET TRAP MESSAGE ADDR. COPY =ER3500,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * SYSTEM TRAP * STRT ENT SYSTEM TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =SYSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3600,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * ARITHMETIC TRAP * AERT ENT ARIT. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =ARIMSG,X GET TRAP MESSAGE ADDR. COPY =ER3700,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * ****************************** * * CONSOLE INT. SERVICE ROUTINE * ****************************** * CINT ENT CONSOLE INT. SERVICE ROUTINE SIN 2 STATUS INHIBIT COPY =0,X RESET X-REG. COPY X,S RESET STATUS REG. COPY =ER3000,A GET CDR DISPLAY JSK RESETCRT SET NORMAL CRT SELP X,MCSDA;3 RESET MULTI-CHANNEL BOARD JMP DEFSTR GO TO QUERIES * LPOOL TITL TABLES (GLOBAL VARIABLES) ****************************** * * GLOBAL VARIABLES * ****************************** * OPTIONS +:20 * TESTS RES 5,-1 WORKING TEST TABLE * TSTADD WORD TESTS TEST TABLE ADDR. * FORMTBL WORD FORM:A LINE PRINTER FORM TABLE ADDR. * TITL TABLES (KEYBOARD TEST - TABLE0) ****************************** * * TABLE0 - KEYBOARD CHARACTERS/KEYS IN * 'LOWER CASE' MODE * ****************************** * TABLE0 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:5B5D,:5C61,:7364 * WORD :6667,:686A,:6B6C,:3B27,:0D7F,:7A78,:6376,:626E * WORD :6D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00  TITL TABLES (KEYBOARD TEST - TABLE1) ****************************** * * TABLE1 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS' MODE * ****************************** * TABLE1 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:5B5D,:5C41,:5344 * WORD :4647,:484A,:4B4C,:3B27,:0D7F,:5A58,:4356,:424E * WORD :4D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE2 ****************************** * * TABLE2 - KEYBOARD CHARACTERS/KEYS IN * 'SHIFT' MODE * ****************************** * TABLE2 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:7B7D,:7C61,:7364 * WORD :6667,:686A,:6B6C,:3A22,:0D7F,:7A78,:6376,:626E * WORD :6D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE3) ****************************** * * TABLE3 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS & SHIFT' MODE * ****************************** * TABLE3 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:7B7D,:7C41,:5344 * WORD :4647,:484A,:4B4C,:3A22,:0D7F,:5A58,:4356,:424E * WORD :4D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE4) ****************************** * * TABLE4 - KEYBOARD CHARACTERS/KEYS IN * 'CONTROL' MODE * ****************************** * TABLE4 EQU $ * WORD :1B21,:0023,:2425,:1E26,:2A28,:291F,:2B1E,:0809 * WORD :1117,:0512,:1419,:1509,:0F10,:1B1D,:1C01,:1304 * WORD :0607,:080A,:0B0C,:3A22,:0D1F,:1A18,:0316,:020E * WORD :0D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE5) ****************************** * * TABLE5 - SPECIAL FUNCTION KEYS F1, F2 AND F3 * ****************************** *-  TABLE5 EQU $ * BYTE 2,'1',2,'2',2,'3' TITL TABLES (PRINTER TEST - FORM:A) ****************************** * * FORM:A - PARAMETER TABLE FOR 11 3/4" BY 8 1/2" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "50" * LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 100 * PROGRAM LINES PER * PAGE - 44 * ****************************** * FORM:A EQU $ * BYTE ESCAPE,'F50' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 100 * WORD 44 TITL TABLES (PRINTER TEST - FORM:B) ****************************** * * FORM:B - PARAMETER TABLE FOR 8 1/2" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE  - "66" * SHORT LINE CODE - "ESC","B" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 80 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:B EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'B' * BYTE ESCAPE,'6' * WORD 80 * WORD 59 TITL TABLES (PRINTER TEST - FORM:C) ****************************** * * FORM:C - PARAMETER TABLE FOR 15" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "66" *  LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS *  PER LINE - 128 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:C EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 128 * WORD 59 TITL CRT MESSAGES (QUERY MESSAGES) ****************************** * * QUERY MESSAGES * ****************************** * TITLE WORD :0C20 BYTE 'SCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER' BYTE CR,LF,'TEST PROGRAM - 93898-' WORD REV:,CR%8;LF,0 * QERM10 BYTE CR,LF,'C - ADDS VIEWPOINT CRT TEST' BYTE CR,LF,'K - ADDS VIEWPOINT KEYBOARD TEST' BYTE CR,LF,'P - OKIDATA MICROLINE PRINTER TEST'  BYTE CR,LF,'SELECT TEST(S) [C,K,P]-',0 * QERM20 BYTE CR,LF,'A - FORM 11 3/4" BY 8 1/2"' BYTE CR,LF,'B - FORM 8 1/2" BY 11"' BYTE CR,LF,'C - FORM 15" BY 11"' BYTE CR,LF,'SELECT PAPER SIZE ([A], B OR C)-',0 * QERM30 BYTE CR,LF,'A - 6 LPI' BYTE CR,LF,'B - 8 LPI' BYTE CR,LF,'LINES PER INCH ([A] OR B)-',0 TITL CRT MESSAGES (TEST MESSAGES) ***************************** * * TEST MESSAGES * ***************************** * * GENERAL TEST MESSAGES * TSTMSG BYTE ESCAPE,'Y6 ' TESTMSG BYTE CR,LF,'TEST' TSTLET BYTE ' C' BYTE ' :MODULE ' MODNUM BYTE '00 - ',0 * PRSMSG BYTE 'PRESS ANY KEY - ',0 * CBRXMSG BYTE '',ESCAPE,ERASELIN,0 * EOT BYTE CR,LF,'END OF TESTS',CR,LF,0 * LPTIOT BYTE BEEP,CR,LF,'LINE PRINTER TIMED OUT',CR,LF,0 TITL * * TEST C: TEST MESSAGES * C:MSG00 BYTE '',ESCAPE,ERASELIN,0 * C:MSG01 BYTE '',ESCAPE,ERASELIN,0 * C:MSG02 BYTE '',ESCAPE,ERASELIN,0 * C:MSG03 BYTE '',ESCAPE,ERASELIN,0 * C:MSG04 BYTE '. ABCDEFGHIJKLMNOPQRSTUVWXYZ' BYTE CR,LF,'abcdefghijklmnopqrstuvwxyz' BYTE CR,LF,'0123456789' BYTE CR,LF,'?!#&$%|`~^_+-="''*@:;.,<>/\[](){}',0 * C:MSG05 BYTE '' BYTE ESCAPE,ERASELIN,0 * C:MSG09 BYTE PAGE,SETTAG,ESCAPE,'0',VIDEOSUP C:MSG10 BYTE 'YOU SHOULD NOT BE ABLE TO SEE THIS',RESETTAG,0 * C:MSG11 BYTE CR,LF,'YOU SHOULD BE ABLE TO SEE THIS',0 * C:MSG12 BYTE '',ESCAPE,ERASELIN,0 * C:MSG13 BYTE '',ESCAPE,ERASELIN,0 * C:MSG14 BYTE '',ESCAPE,ERASELIN,0 * C:MSG15 BYTE '',ESCAPE,ERASELIN,0 * C:MSG16 BYTE '',ESCAPE,ERASELIN,0 * C:MSG17 BYTE '',ESCAPE,ERASELIN,0 * C:MSG18 BYTE '',ESCAPE,ERASELIN,0 * C:MSG19 BYTE '',ESCAPE,ERASELIN,0 * C:MSG20 BYTE '',ESCAPE,ERASELIN,0 * C:MSG21 BYTE '',ESCAPE,ERASELIN,0 TITL * * TEST K: TEST MESSAGES * K:MSG00 BYTE CR,LF,'EACH KEY MUST BE TYPED IN EACH ROW, LEFT TO RIGHT, AS' BYTE ' FOLLOWS:' BYTE CR,LF,'1. MAIN KEYBOARD GROUP (LOWER LEFT GROUP):' BYTE CR,LF,' "ESC" THROUGH "BACK SPACE" KEYS,' BYTE CR,LF,' "TAB" THROUGH "\" KEYS,' BYTE CR,LF,' "A" THROUGH "RETURN" KEYS,' BYTE CR,LF,' AND "DEL" THROUGH "/" KEYS.' BYTE CR,LF,'2. NUMERIC PAD GROUP (LOWER RIGHT GROUP):' BYTE CR,LF,' "7" THROUGH "9" KEYS,' BYTE CR,LF,' "4" THROUGH "6" KEYS,' BYTE CR,LF,' "1" THROUGH "3" KEYS,' BYTE CR,LF,' AND "0" THROUGH "." KEYS.' BYTE CR,LF,'BEEP TONE INDICATES ERROR.' BYTE CR,LF,'*********************************************************' BYTE CR,LF,0 * K:MSG01 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG02 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG03 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG04 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG05 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG06 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 * K:MSG07 BYTE PAGE,'',0 * K:MSG08 BYTE 'PRESS "ESC","6" AND ANY KEY TO UNLOCK KEYBOARD',0 * K:MSG09 BYTE 'PRESS "CTRL-BREAK" TO UNLOCK KEYBOARD',ESCAPE,ERASELIN,0 * K:MSG10 BYTE '',0 * K:MSG11 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:MSG02 BYTE PAGE,'',0 * P:MSG03 BYTE PAGE,'',0 * P:MSG04 BYTE PAGE,'',0 * P:MSG05 BYTE P/ AGE,'',0 * P:MSG06 BYTE PAGE,'',0 * P:MSG07 BYTE PAGE,'',0 * P:MSG08 BYTE PAGE,'',0 * P:MSG09 BYTE PAGE,'',0 TITL CRT MESSAGES (TRAP/EXCEPTION MESSAGES) ***************************** * * TRAP/EXCEPTION MESSAGES * ***************************** * INSMSG BYTE CR,LF,'UNIMPLEMENTED INSTRUCTION TRAP',CR,LF,0 * MEMMSG BYTE CR,LF,'UNINSTALLED MEMORY TRAP',CR,LF,0 * POWMSG BYTE CR,LF,'POWER FAIL',CR,LF,0 * STKMSG BYTE CR,LF,'STACK OVERFLOW',CR,LF,0 * USEMSG BYTE CR,LF,'USER TRAP',CR,LF,0 * SYSMSG BYTE CR,LF,'SYSTEM TRAP',CR,LF,0 * ARIMSG BYTE CR,LF,'ARITHMETIC TRAP',CR,LF,0 * TITL STACK ****************************** * * STACK SPACE * ****************************** * STACK EQU $ RES 128,0 STACK SPACE * ENDPROG EQU $ END OF PROGRAM END DEFSTR THAT'S ALL FOLKES!!! ,'AND PRESS THE SPACE BAR TO EXIT>',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:M TITL SCOUT VIEWPOINT CRT/OKIDATA PRINTER TEST PROGRAM 93736-10A0 TITL TITLE PAGE * * SCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER * * * TEST PROGRAM * * * 84-93736-10-A0 * * * COPYRIGHT 1982 COMPUTER AUTOMATION INC. * TITL REVISION HISTORY ****************************** * * REVISION HISTORY * ****************************** * * REVISION ISSUE DATE COMMENTS * -------- ---------- -------- * * A0 7/82 ORIGINAL RELEASE * BY ROBERT ROBINSON * REV: EQU 'A0' LATEST REVISION TITL HARDWARE REQUIREMENTS ****************************** * * HARDWARE REQUIREMENTS * ****************************** * * SCOUT 4/04 PROCESSOR WITH PROGRAMMER'S CONSOLE. * * MINIMUM OF 16K WORDS OF READ/WRITE MEMORY. * * SCOUT RS-232 2/4 CHANNEL SERIAL I/O BOARD * (REFERENCE NUMBER 54121) WITH A DEVICE ADDRESS OF :40. * * ADDS VIEWPOINT CRT/KEYBOARD CONNECTED TO CHANNEL 0 * OF THE SERIAL I/O BOARD. * * OKIDATA MICROLINE LINE PRINTER CONNECTED TO CHANNEL * 1 OF THE SERIAL I/O BOARD. * TITL LINKER INFORMATION ****************************** * * LINKER INFORMATION * ****************************** * OBJNOTE 'VEW:OKI:TP.OBJ - REV. ',REV:%-8,REV:&:FF TITL TEST PROGRAM INFORMATION ****************************** * * TEST PROGRAM INFORMATION * ****************************** * *  CONSISTS OF: * * FUNCTION TESTS * * TEST C - ADDS VIEWPOINT CRT TEST: THIS TEST * ISSUES VARIOUS CURSOR COMMANDS AND * DISPLAYS PATTERNS ON THE ADDS CRT * SCREEN. THE OPERATOR IS REQUIRED * TO VERIFY THAT THE DISPLAY IS * CORRECT. * * TEST K - ADDS VIEWPOINT KEYBOARD TEST: THIS TEST * REQUIRES THE OPERATOR TO ENTER VARIOUS * KEYS/CHARACTERS ON THE KEYBOARD AND TO * VERIFY WHAT WAS ENTERED CORRESPONDS TO * WHAT IS DISPLAYED ON THE CRT. * * TEST P - OKIDATA MICROLINE PRINTER TEST: THIS TEST *0  WILL PRINT VARIOUS ALPHANUMERIC AND GRAPHIC * PATTERNS ON THE OKIDATA PRINTER. THE * OPERATOR IS REQUIRED TO VERIFY THAT THE * PRINTED PATTERN IS CORRECT. * ****************************** TITL EQUATES (PROGRAM EQUATES) ****************************** * * PROGRAM EQUATES * ****************************** * * ADDS VIEWPOINT CRT/KEYBOARD CONTROL CHARACTERS * HOME EQU :01 HOME CURSOR AT 1,1 SUBDUEMO EQU :41 SUBDUE MODE BLINK EQU :42 BLINKING MODE VIDEOSUP EQU :44 VIDEO SUPPRESS MODE RIGHT EQU :06 MOVE CURSOR 1 POSITION RIGHT BEEP EQU :07 SOUND BEEP BACKSPAC EQU :08 BACK SPACE LF EQU :0A LINE FEED DOWN EQU LF MOVE CURSOR 1 LINE DOWN PAGE EQU :0C CLEAR SCREEN (TOF) CR EQU :0D CARRIAGE RETURN RETURN EQU CR DITTO NEWLINE EQU CR NEW LINE SETTAG EQU :0E TAG BIT SET RESETTAG EQU :0F TAG BIT RESET REVERSEV EQU :50 REVERSE VIDEO MODE LEFT EQU :15 MOVE CURSOR 1 POSITION LEFT UP EQU :1A MOVE CURSOR 1 LINE UP ESCAPE EQU :1B ESCAPE KEY UNDERLIN EQU :60 UNDERLINE MODE PRINTON EQU :33 TRANSPARENT PRINT ON PRINTOFF EQU :34 TRANSPARENT PRINT OFF KEYLOCK EQU :35 KEYBOARD LOCK KEYUNLOC EQU :36 KEYBOARD UNLOCK NORMAL EQU :40 NORMAL DISPLAY ERASELIN EQU :4B ERASE LINE FRAMEERA EQU :6B FRAME ERASE * * OKIDATA MICROLINE PRINTER CONTROL CHARACTERS * GS EQU :1D REDUCED CHARACTER CODE RS EQU :1E NORMAL CHARACTER CODE US EQU :1F ENLARGED CHARACTER CODE TITL * * I/O DEVICE ADDRESSES * CONSL EQU :00 CONSOLE DEVICE ADDRESS MCSDA EQU :40 SCOUT MULTI. CHANNEL SERIAL DEVICE ADDRESS MC:CHAN0 EQU :00 CHANNEL 0 - ADDS VIEWPOINT CRT MC:CHAN1 EQU :02 CHANNEL 1 - OKIDATA PRINTER * * MCS MODE WORDS * CRTMODE EQU :BA EVEN PARITY ENABLED, 1 STP BIT, 7 BIT CHAR. LPMODE EQU :8E 8 DATA BIT, NO PARITY, 1 STOP BIT MCSECHO EQU :18 BOARD ENABLE WITH AUTO ECHO MCSNECHO EQU :08 BOARD ENABLE WITH NO ECHO MCSRTS EQU :23 RTS, DTR AND TRANSMIT ENABLE MCSDTR EQU :06 DTR AND RECEIVE ENABLE * * CONSOLE FUNCTION CODES * SSW EQU :00 CONSOLE SENSE SWITCH (FUNCTION CODE) INT EQU :01 CONSOLE INT. LIGHT (FUNCTION CODE) CDR EQU :04 CONSOLE DATA REG. (FUNCTION CODE) * * PSW BIT EQUATES * CY: EQU 0 CARRY BIT OV: EQU 1 OVERFLOW BIT BY: EQU 2 BYTE MODE BIT CI: EQU 4 CONSOLE INTERRUPT ENABLE BIT RC: EQU 5 REAL-TIME-CLOCK INT. ENABLE BIT XA: EQU 6 EXTENDED ADDRESSING BIT GI: EQU 8 GLOBAL INT. ENABLE BIT EI: EQU 12 EOBS INTS. BIT DI: EQU 13 DATA INTS. BIT TITL EQUATES (CDR DISPLAY) ****************************** * * CDR DISPLAY EQUATES * ****************************** * * END OF TESTING DISPLAY * FINI EQU 0 TESTING IS ALL DONE * * TRAP/EXCEPTION/CONSOLE INT. DISPLAYS * ER3000 EQU :3000 CONSOLE INTERRUPT ER3100 EQU :3100 UNINPLEMENTED INSTRUCTION TRAP ER3200 EQU :3200 UNINSTALLED MEMORY TRAP ER3300 EQU :3300 POWER FAIL ER3400 EQU :3400 STACK OVERFLOW ER3500 EQU :3500 USER TRAP ER3600 EQU :3600 SYSTEM TRAP ER3700 EQU :3700 ARITHMETIC TRAP TITL MACROS (FILL1, FILL2) ****************************** * * FILL1 - DO SCREEN ERASE AND FILL SCREEN WITH SINGLE CHARACTER * * FILL2 - DO SCREEN ERASE AND FILL SCREEN WITH TWO CHARACTERS * * THESE MACROS WILL GENERATE CODE WHICH * WILL FILL THE CRT SCREEN WITH * CHARACTER(S) PASSED TO THE MACRO. * * CALLING SEQUENCE: * FILL1 CHAR. COUNT,FILL CHAR. * * FILL2 CHAR. COUNT,FILL CHAR. 1,FI1 LL CHAR. 2 * ****************************** * * FILL1 MACRO * FILL1 XMACRO COPY =PAGE,A DO A SCREEN ERASE JSK MCSCRT SEND IT TO CRT COPY =-#(1),Q GET CHARACTER COUNT !CLP0: COPY =#(2),A GET FILL #(2) CHARACTER JSK MCSCRT DISPLAY ON CRT IJNE Q,!CLP0: LOOP UNTIL DONE ENDM * * FILL2 MACRO * FILL2 XMACRO COPY =PAGE,A DO SCREEN ERASE JSK MCSCRT SEND IT TO CRT COPY =-#(1),Q GET CHARACTER COUNT !CLP0: COPY =#(2),A GET FIRST FILL #(2) CHARACTER JSK MCSCRT DISPLAY ON CRT COPY =#(3),A GET SECOND FILL #(3) CHARACTER JSK MCSCRT DISPLAY ON CRT IJNE Q,!CLP0: LOOP UNTIL DONE ENDM TITL MACROS (MCBRX) ****************************** * * MCBRX - THIS MACRO WILL GENERATE CODE * FOR THE CBRX SUBROUTINE CALL. * * CALLING SEQUENCE: * MCBRX REPEAT ADDR.,PREVIOUS MOD. ADDR * ****************************** * MCBRX XMACRO JST CBRX CONTINUE,GO BACK,REPEAT,ABORT? JMP #(1) REPEAT JMP #(2) GO BACK * ENDM TITL MACROS (I:CHAR,I:CHARN) ****************************** * * I:CHAR - DISPLAY MESSAGES AND INPUT CHAR. * I:CHARN - DISPLAY MESSAGES ONLY. * THIS MACROS WILL GENERATE CODE * WHICH WILL CALL THE SUBROUTINE * TO INPUT ANY CHAR. FROM THE KEYBOARD * TO CONTINUE TESTING. * * CALLING SEQUENCE: * I:CHAR MESS. ADDR. * I:CHARN MESS. ADDR. * ****************************** * I:CHAR XMACRO 0 I:CHARN MACENT 1 JST DISMES DISPLAY MESSAGES WORD #(1) MESSAGE ADDR. IFF #(0) JSK INPUT INPUT CHARACTER WITH NO DISPLAY ENDC ENDM TITL MACROS (POSITION, CONTROL1) ****************************** * * POSITION - POSITION CURSOR AT GIVEN X,Y COORDINATES * * CONTROL1 - SEND CONTROL CHARACTER TO CRT * * THIS MACROS WILL GENERATE CODE WHICH WILL * SEND CONTROL CHARACTERS TO THE CRT. * * CALLING SEQUENCE: * POSITION X-COORDINATE,Y-COORDINATE * * CONTROL1 CTRL. CHAR. * ****************************** * * POSITION MACRO * POSITION XMACRO COPY =ESCAPE,A GET FIRST CTRL. CHAR. (ESC) JSK MCSCRT SEND TO CRT COPY ='Y',A GET SECOND CTRL. CHAR. ('Y') JSK MCSCRT SEND TO CRT COPY =#(1),A GET X-COORDINATE (#(1)) JSK MCSCRT SEND TO CRT COPY =#(2),A GET Y-COORDINATE (#(2)) JSK MCSCRT SEND TO CRT ENDM * * CONTROL1 MACRO * CONTROL1 XMACRO COPY =ESCAPE,A GET FIRST CONTROL CHAR. (ESC) JSK MCSCRT SEND IT TO CRT COPY =#(1),A GET SECOND CONTROL CHAR. (#(1)) JSK MCSCRT SEND IT TO CRT ENDM TITL MACROS (KEYTEST) ****************************** * * KEYTEST - KEYBOARD TEST * * THIS MACRO WILL GENERATE CODE *  FOR THE FIRST 5 MODULES OF THE * KEYBOARD TEST. * * CALLING SEQUENCE: (ONE LINE) * KEYTEST ASCII MODULE NUMBER, * CDR MODULE NUMBER, * TEST MESSAGE ADDRESS, * COMPARISON TABLE ADDRESS, * PRESENT MODULE STARTING ADDRESS, * PREVIOUS MODULE STARTING ADDRESS * ****************************** * KEYTEST XMACRO CDRMOD #(1),#(2) COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE #(1) - JST MSGA OUTPUT TEST MESS. WORD #(3) MESS. ADDR. JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG00 MESS. ADDR. COPY =#(4)%1,X GET COMPARISON TABLE ADDR. JSK INKEYBRD INPUT & CHECK KEYS MCBRX #(5),#(6) ENDM TITL MACROS (EJECTP) ************2 ****************** * * EJECTP - EJECT PAGE * * THIS MACRO WILL GENERATE CODE FOR THE * BEGINNING OF EACH MODULE IN THE PRINTER * TEST. * * CALLING SEQUENCE: (ONE LINE) * EJECTP ASCII MODULE NUMBER, *  CDR MODULE NUMBER, * TEST MESSAGE ADDR. * ****************************** * EJECTP XMACRO CDRMOD #(1),#(2)  JST MSGA OUTPUT TEST MESS. WORD #(3) MESS. ADDR. JSK DISTST 'TEST P :MODULE ##(1) -' COPY =RS,A GET CTRL CHAR. (RS) JSK MCSLP SEND TO OKIDATA PRINTER COPY =PAGE,A GET CTRL. CHAR. JSK MCSLP EJECT PAGE COPY FORMTBL,X GET PARAMETER TABLE ADDR. ENDM TITL MACROS (CDRMOD) ****************************** * * CDRMOD - DISPLAY CDR MODULE NUMBER * * THIS MACRO WILL GENERATE CODE TO * DISPLAY THE MODULE NUMBER IN THE * CDR. * * CALLING SEQUENCE: * CDRMOD ASCII MODULE NUMBER, * CDR MODULE NUMBER * ****************************** * CDRMOD XMACRO COPY ='##(1)',A GET MODULE NUMBER - #(1) COPY A,MODNUM STORE IT COPY =:#(2),A GET MODULE NUMBER FOR CDR - :#(2) JSK CDRDIS DISPLAY IT ENDM TITL STANDARD TRAP ADDRESSES ****************************** * * STANDARD TRAPS/EXCEPTION ADDRESSES * ****************************** * MACHINE =:0001 SCOUT 4/04 OPTIONS -:0080 NO CONDITIONALS * ABS :80 POWER UP JST *$+1 JUMP TO POWER UP ROUTINE WORD POWERUP ADD. OF ROUTINE * ABS :84 TRAP ADD. :0084 RES 2,0 UNIMPLEMENTED INSTRUCTION TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UITRT ADD. OF ROUTINE * RES 2,0 UNIMSTALLED MEMORY TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UMRT ADD. OF ROUTINE * RES 2,0 POWER FAIL JST *$+1 JUMP TO SERVICE ROUTINE WORD PFRT ADD. OF ROUTINE * ABS :94 CONSOLE INT. JST *$+1 JUMP TO SERVICE ROUTINE WORD CINT ADD. OF ROUTINE * ABS :9C TRAP ADD. :009C RES 2,0 STACK OVERFLOW JST *$+1 JUMP TO SERVICE ROUTINE WORD STOV ADD. OF ROUTINE * RES 2,0 USER TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UTRT ADD. OF ROUTINE * RES 2,0 SYSTEM TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD STRT ADD. OF ROUTINE * RES 2,0 ARITHEMETIC ERROR JST *$+1 JUMP TO SERVICE ROUTINE WORD AERT ADD. OF ROUTINE TITL PROGRAM STARTUP ****************************** * * PROGRAM STARTUP * * :200 - DEFSTR (DEFAULT START) * * RESET STATUS REG. * RESET SENSE SWITCH * RESET CONSOLE INTERRUPT * SET STACK POINTERS * ENABLE CONSOLE INTERRUPT * PRINT TEST TITLE * ****************************** * ABS :200 PROGRAM START DEFSTR EQU $ COPY =0,A RESET A-REG. COPY A,S RESET STATUS REG. OUT A,CONSL;INT RESET CONSOLE INT. COPY =STACK,A SET A TO LOW STACK COPY A,L SET LOW STACK LIMIT ADD =128,A SET STACK SIZE COPY A,K SET STACK POINTER JSK SETRDY INITIALIZE SCOUT MCS JST MSGA DISPLAY TITLE OF PROGRAM WORD TITLE MESS. ADD. SBIT CI:,S ENABLE CONSOLE INT. SBIT GI:,S ENABLE INTS. TITL QUERIES (TESTS) ****************************** * * TESTS * * QUERY: * C - ADDS VIEWPOINT CRT * K - ADDS VIEWPOINT KEYBOARD * P - OKIDATA MICROLINE PRINTER * SELECT TEST(S) [C,K,P]- * * DEFAULT IS C, K AND P. * ****************************** * QERY10 EQU $ COPY =TESTS,Y GET TEST TABLE COPY =C:TEST,A GET CRT TEST ADDR. COPY A,0(Y) STORE IN TABLE COPY =K:TEST,A GET KEYBOARD TEST3  ADDR. COPY A,1(Y) STORE IN TABLE COPY =P:TEST,A GET PRINTER TEST ADDR. COPY A,2(Y) STORE IN TABLE COPY =-1,A SET TERMINATOR COPY A,3(Y) STORE IN TABLE COPY =-4,Q SET INPUT COUNT JST MSGA OUTPUT QUERY WORD QERM10 MESS. ADD. QERY11 JSK MCSINP GET RESPONSE CLSN A,=RETURN CR? JMP QERY12 YES, EXIT CLSN A,=',' ','? JMP QERY11 YES, GET ANOTHER RBIT 5,A SET FOR UPPER CASE ASCII COPY =0,X RESET INPUT FLAG CLSN A,='C' CRT TEST? COPY =C:TEST,X YES, GET TEST ADDR. CLSN A,='K' KEYBOARD TEST? COPY =K:TEST,X YES, GET TEST ADDR. CLSN A,='P' PRINTER TEST? COPY =P:TEST,X YES, GET TEST ADDR. JEQ X,QERY10 IF INCORRECT, REPEAT COPY X,0(Y) STORE ADDR. COPY =-1,A GET TERMINATOR COPY A,1(Y) STORE IT ADD =1,Y INC. TABLE ADDR. IJNE Q,QERY11 GO FOR MORE JMP QERY10 TOO MANY QERY12 COPY =-3,Y SET FOR 3 TIMES COPY =P:TEST,A GET TEST ADDR. COPY =TESTS,X GET TABLE ADDR. COPY =-1,Q TERMINATOR QERY13 CSK Q,0(X) TERMINATOR? NOP NOPE JMP $+2 NOPE AGAIN JMP TSTCRL10 YES, GO DO TESTS CSK A,0(X) PRINTER TEST? NOP NOPE JMP $+2 NOPE ONCE MORE JMP QERY20 YES, DO OTHER QUERIES ADD =1,X INC. TABLE ADDR. IJNE Y,QERY13 LOOP FOR MORE JMP TSTCRL10 NO MORE, SO DO TESTS TITL QUERIES (PAPER SIZE) ****************************** * * PAPER SIZE * * QUERY: * * A - FORM 11 3/4" BY 8 1/2" * B - FORM 8 1/2" BY 11" * C - FORM 15" BY 11" * SELECT PAPER SIZE ([A], B OR C )- * * DEFAULT IS A. * ****************************** * QERY20 EQU $ COPY =FORM:A,A GET DEFAULT TABLE ADDR. COPY A,FORMTBL SET IT COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QERM20 MESS. ADDR. QERY21 JSK MCSINP GET RESPONSE CLSN A,='^' GO BACK? JEQ Q,QERY10 DO IT CLSN A,=RETURN CR? JMP QERY22 IS SO, EXIT JNE Q,QERY20 BEEN HERE BEFORE RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='A' FORM A? COPY =FORM:A,Q YES, GET TABLE ADDR. CLSN A,='B' FORM B? COPY =FORM:B,Q YES, GET TABLE ADDR. CLSN A,='C' FORM C? COPY =FORM:C,Q YES, GET TABLE ADDR. JNE Q,QERY21 GET TERMINATOR COPY =-1,Q SET ERROR FLAG JMP QERY21 GET TERMINATOR QERY22 JLT Q,QERY20 JUMP IF ERROR INPUT! JEQ Q,$+2 IF DEFAULT, JUMP COPY Q,FORMTBL STORE TABLE ADDR. JMP QERY30 GO ON * LPOOL TITL QUERIES (LINES PER INCH) ****************************** * * LINES PER INCH * * QUERY: * * A - 6 LPI * B - 8 LPI * LINES PER INCH ([A] OR B)- * * DEFAULT IS A. * ****************************** * QERY30 EQU $ COPY FORMTBL,X GET PARAMETER TABLE SHIFT X,LO,1 MAKE IT A BYTE ADDR. COPY ='6',A SET DEFAULT FOR 6 LPI SBIT BY:,S BYTE MODE COPYB A,7(X) STORE IN TABLE RBIT BY:,S WORD MODE COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QERM30 MESS. ADDR. QERY31 JSK MCSINP GET RESPONSE CLSN A,='^' GO BACK? JEQ Q,QERY20 DO IT CLSN A,=RETURN CR? JMP QERY32 IF SO, EXIT JNE Q,QERY30 BEEN HERE BEFORE RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='A' 6 LPI? COPY ='6',Q IF SO, GET CODE CLSN A,='B' 8 LPI? COPY ='8',Q IF SO, GET CODE JNE Q,QERY31 GET TERMINATOR COPY =-1,Q SET ERROR FLAG JMP QERY31 GET TERMINATOR QERY32 JLT Q,QERY30 JUMP IF ERROR INPUT! JEQ Q,$+6 DEFAULT  COPY FORMTBL,X GET PARAMETER TABLE SHIFT X,LO,1 MAKE IT A BYTE ADDR. SBIT BY:,S BYTE MODE COPYB Q,7(X) STORE IN TABLE RBIT BY:,S WORD MODE TITL TEST CONTROL (TEST EXECUTION) ****************************** * * TEST CONTROL - TEST EXECUTION AND CONTRO4 L * * THIS SECTION WILL EXECUTE THE REQUESTED * FUNCTION TEST(S). * ****************************** * TSTCRL10 EQU $  COPY =TESTS,A GET TEST TABLE ADD. COPY A,TSTADD SET STARTING ADD. TSTCRL11 EQU $ COPY TSTADD,X GET TABLE ADD. COPY 0(X),X GET TEST ADDR. JGT X,TSTCRL12 IF MORE, JUMP COPY =FINI,A GET CDR 'END OF TESTS' DISPLAY SELP A,CONSL;CDR DISPLAY IT JST MSGA OUTPUT MESS. WORD EOT 'END OF TESTS' JMP QERY10 ELSE EXIT TSTCRL12 EQU $ JMP 0(X) DO TEST TSTCRL13 EQU $ IMS TSTADD INC. TABLE ADD. JMP TSTCRL11 LOOP FOR MORE * LPOOL TITL TESTS (TEST C - ADDS VIEWPOINT CRT TEST) ****************************** * * C:TEST - ADDS VIEWPOINT CRT TEST * * THIS TEST ISSUES VARIOUS CURSOR COMMANDS * AND DISPLAYS PATTERNS ON THE ADDS CRT * SCREEN. THE OPERATOR IS REQUIRED TO VERIFY * THAT THE DISPLAY IS CORRECT. * ****************************** * C:TEST EQU $ TEST C COPY =' C',A GET TEST LETTER COPY A,TSTLET STORE IT COPY =1,A GET CDR TEST DISPLAY SELP A,CONSL;CDR DISPLAY IT * * THIS MODULE WILL FILL THE SCREEN WITH '*'S AND 'U'S. * THEN IT WILL ALTERNATE WITH 'U'S AND '*'S. * CL:MOD00 EQU $ TEST C :MODULE 00 CDRMOD 00,00 FILL2 960,'*','U' I:CHAR C:MSG00 FILL2 960,'U','*' MCBRX CL:MOD00,CL:MOD00 * THIS MODULE WILL FILL THE SCREEN WITH '*'S AND 'U'S. * THEN IT WILL ISSUE A SCREEN ERASE. * CL:MOD01 EQU $ TEST C :MODULE 01 CDRMOD 01,10 FILL2 960,'*','U' I:CHAR C:MSG01 COPY =PAGE,A ISSUE A SCREEN ERASE JSK MCSCRT DO IT MCBRX CL:MOD01,CL:MOD00 JMP CL:MOD02 CONTINUE * LPOOL TITL * * THIS MODULE WILL FILL FIRST 12 LINES OF THE SCREEN WITH 'U'S. * IT WILL THEN PLACE THE CURSOR AT 1,12 AND * ISSUE A FRAME ERASE. * CL:MOD02 EQU $ TEST C :MODULE 02 CDRMOD 02,20 FILL1 960,'U' I:CHAR C:MSG02 POSITION ' ','+' CONTROL1 FRAMEERA MCBRX CL:MOD02,CL:MOD01 * THIS MODULE WILL FILL FIRST 12 LINES OF THE SCREEN WITH 'U'S. * THEN IT WILL PLACE THE CURSOR AT 6,40 AND ISSUE A FRAME ERASE. * THEN IT WILL PLACE THE CURSOR AT 5,1 AND ISSUE A LINE ERASE. * THEN IT WILL ISSUE A SCREEN ERASE. * CL:MOD03 EQU $ TEST C :MODULE 03 CDRMOD 03,30 FILL1 960,'U' I:CHAR C:MSG02 POSITION '%','G' CONTROL1 FRAMEERA I:CHAR C:MSG03 POSITION '$',' ' CONTROL1 ERASELIN I:CHAR C:MSG01 COPY =PAGE,A ERASE ENTIRE SCREEN JSK MCSCRT DO IT MCBRX CL:MOD03,CL:MOD02 JMP CL:MOD04 * LPOOL TITL * * THIS MODULE WILL DISPLAY ALL 'DISPLAYABLE' * CHARACTERS ON THE ADDS CRT. * CL:MOD04 EQU $ TEST C :MODULE 04 CDRMOD 04,40 COPY =PAGE,A ERASE SCREEN JSK MCSCRT DO IT JST MSGA OUTPUT STRING OF CHARACTERS WORD C:MSG04 MESSAGE ADDR. MCBRX CL:MOD04,CL:MOD03 * THIS MODULE WILL FILL THE FIRST 6 LINES OF THE CRT WITH * 'U'S AND PLACE THE CURSOR AT 3,20. THE VARIOUS CURSOR * COMMANDS ARE ISSUED AND THE OPERATOR HAS TO VERIFY THAT * NONE OF THE CHARACTERS ON THE CRT HAVE BEEN ERASED. * CL:MOD05 EQU $ TEST C :MODULE 05 CDRMOD 05,50 FILL1 480,'U' I:CHARN C:MSG05 POSITION '"','3' JSK INPUT GET CHAR. WITH NO ECHO COPY =UP,A GET 'UP' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =DOWN,A GET 'DOWN' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =RIGHT,A GET 'RIGHT' CTRL. CHAR. JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO COPY =LEFT,A GET 'LEFT' CTRL. CHAR. 5  JSK MCSCRT SEND IT TO CRT JSK INPUT GET CHAR. WITH NO ECHO MCBRX CL:MOD05,CL:MOD04 JMP CL:MOD06 CONTINUE * LPOOL TITL * *  THIS MODULE WILL TEST THE 'VIDEO SUPPRESS' AND * 'NORMAL' ATTRIBUTES OF THE CRT. * CL:MOD06 EQU $ TEST C :MODULE 06 CDRMOD 06,60 JST MSGA OUTPUT TEST MESSAGE WORD C:MSG09 'YOU SHOULD NOT BE ABLE TO SEE THIS' JST MSGA OUTPUT ANOTHER TEST MESSAGE WORD C:MSG11 'YOU SHOULD BE ABLE TO SEE THIS' MCBRX CL:MOD06,CL:MOD05 * THIS MODULE WILL FILL THE SCREEN WITH ALTERNATE * '$'S AND '%'S IN REVERSE VIDEO; THEN IN REVERSE VIDEO WITH * HALF INTENSITY; THEN IN REVERSE VIDEO WITH BLINKING; THEN * IN REVERSE VIDEO WITH HALF INTENSITY AND BLINKING. * CL:MOD07 EQU $ TEST C :MODULE 07 CDRMOD 07,70 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =REVERSEV,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL2 960,'$','%' COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BIT I:CHAR C:MSG12 COPY =REVERSEV;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG13 COPY =REVERSEV;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG14 COPY =REVERSEV;BLINK;SUBDUEMO,Q GET CTRL. CODE  JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD07,CL:MOD06 * THIS MODULE WILL FILL THE SCREEN WITH ALTERNATE * '@'S AND '#'S WITH UNDERLINES; THEN WITH UNDERLINES * AND HALF INTENSITY; THEN WITH UNDERLINES AND BLINKING; * THEN WITH UNERLINES, HALF INTENSITY AND BLINKING. * CL:MOD08 EQU $ TEST C :MODULE 08 CDRMOD 08,80 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =UNDERLIN,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL2 960,'@','#' COPY =RESETTAG,A GET CTRL.CODE JSK MCSCRT RESET TAG BITS I:CHAR C:MSG15 COPY =UNDERLIN;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG16 COPY =UNDERLIN;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG17 COPY =UNDERLIN;BLINK;SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD08,CL:MOD07 JMP CL:MOD09 CONTINUE * LPOOL TITL * * THIS MODULE WILL FILL THE SCREEN WITH ALL '*'S IN * HALF INTENSITY; BLINKING; AND THEN IN HALF INTENSITY WITH * BLINKING. * CL:MOD09 EQU $ TEST C :MODULE 09 CDRMOD 09,90 COPY =SETTAG,A GET CTRL. CODE JSK MCSCRT SEND TO CRT COPY =SUBDUEMO,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE FILL1 1920,'*' COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BIT I:CHAR C:MSG19 COPY =BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG18 COPY =SUBDUEMO;BLINK,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE I:CHAR C:MSG20 COPY =NORMAL,Q GET CTRL. CODE JSK SETATTR SET ATTRIBUTE MCBRX CL:MOD09,CL:MOD08 * THIS MODULE WILL TEST THE 'TRANSPARENT PRINT ON', * 'TRANSPARENT OFF' AND 'AUDIBLE TONE (BELL)'. * CL:MOD10 EQU $ TEST C :MODULE 10 CDRMOD 10,A0 COPY =PAGE,A DO A SCREEN ERASE JSK MCSCRT DO IT CONTROL1 PRINTON JST MSGA OUTPUT TEST MESSAGE WORD C:MSG10 'YOU SHOULD NOT BE ABLE TO SEE THIS' CONTROL1 PRINTOFF JST MSGA OUTPUT ANOTHER TEST MESSAGE WORD C:MSG11 I:CHAR C:MSG21 COPY =BEEP,A GET CTRL. CODE JSK MCSCRT SEND TO CRT MCBRX CL:MOD10,CL:MOD09 JMP TSTCRL13 EXIT TEST C * LPOOL TITL TESTS (TEST K - ADDS VIEWPOINT KEYBOARD TEST) ****************************** * * K:TEST - ADDS VIEWPOINT KEYBOARD TEST * * THIS TEST REQUIRES THE OPERATOR TO ENTER VARIOUS * KEYS/CHARACTERS ON THE6  KEYBOARD AND TO VERIFY * WHAT WAS ENTERED CORRESPONDS TO WHAT IS DISPLAYED * ON THE CRT. * ******************************* * K:TEST EQU $ COPY =' K',A TEST K COPY A,TSTLET STORE IT COPY =2,A GET CDR TEST NUMBER SELP A,CONSL;CDR SEND TO CDR * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN LOWER CASE MODE. * KL:MOD00 EQU $ TEST K :MODULE 00 KEYTEST 00,0,K:MSG01,TABLE0,KL:MOD00,KL:MOD00 * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CAPS MODE * KL:MOD01 EQU $ TEST K :MODULE 01 KEYTEST 01,10,K:MSG02,TABLE1,KL:MOD01,KL:MOD00 * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN SHIFT MODE * KL:MOD02 EQU $ TEST K :MODULE 02 KEYTEST 02,20,K:MSG03,TABLE2,KL:MOD02,KL:MOD01 JMP KL:MOD03 CONTINUE * LPOOL TITL * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CAPS & SHIFT MODE * KL:MOD03 EQU $ TEST K :MODULE 03 KEYTEST 03,30,K:MSG04,TABLE3,KL:MOD03,KL:MOD02 * * THIS MODULE WILL ASK FOR INPUT OF ALL KEYS - IN CONTROL MODE * KL:MOD04 EQU $ TEST K :MODULE 04 KEYTEST 04,40,K:MSG05,TABLE4,KL:MOD04,KL:MOD03 * * THIS MODULE WILL CHECK THE THREE FUNCTION KEYS F1, F2 AND F3. * KL:MOD05 EQU $ TEST K :MODULE 05 CDRMOD 05,50 COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE 05 - JST MSGA OUTPUT TEST MESS. WORD K:MSG06 MESS. ADDR. COPY =TABLE5%1,X GET COMPARISON TABLE ADDR. COPY =-6,Q SET BYTE COUNT JSK INKEYBRD+1 INPUT & CHECK KEYS MCBRX KL:MOD05,KL:MOD04 JMP KL:MOD06 CONTINUE * LPOOL TITL * * THIS MODULE WILL TEST THE KEYBOARD LOCK AND UNLOCK FUNCTIONS. * KL:MOD06 EQU $ TEST K :MODULE 06 CDRMOD 06,60 JST MSGA OUTPUT TEST MESS. WORD K:MSG07 TEST MESS. ADDR. JSK DISTST TEST K :MODULE 06 - JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG08 MESS. ADDR. CONTROL1 KEYLOCK JSK INPUT GET CHARACTER (HOPEFULLY IS A BREAK) JSK DISTST TEST K :MODULE 06 - JST MSGA OUTPUT THIRD MESS. WORD K:MSG09 MES. ADDR. CONTROL1 KEYLOCK JSK INPUT GET CHARACTER JNE A,$+5 IF NOT BREAK, BEEP COPY =-3,Q SET FOR 3 LOOPS IJNE A,$ INC. INNER LOOP IJNE Q,$-1 INC. OUTTER LOOP JMP $+3 CONTINUE COPY =BEEP,A SOUND THE ALARMS!! JSK MCSCRT AH-OO-GH! CONTROL1 KEYUNLOC MCBRX KL:MOD06,KL:MOD05 * THIS MODULE WILL CHECK THE KEY REPEATING FUNCTION. THE * OPERATOR IS INSTRUCTED TO HOLD DOWN ANY ONE CHARACTER * KEY LONG ENOUGH FOR THE KEY REPEAT TO FUNCTION AND * VISUALLY INSPECT THIS ON THE SCREEN. * KL:MOD07 EQU $ TEST K :MODULE 07 CDRMOD 07,70 COPY =PAGE,A SCREEN ERASE JSK MCSCRT DO IT JSK DISTST TEST K :MODULE 07 - JST MSGA OUTPUT TEST MESS. WORD K:MSG10 MESS. ADDR. JST MSGA OUTPUT ANOTHER TEST MESS. WORD K:MSG11 MESS. ADDR. KLP0:01 JSK MCSINP GET CHAR. CLSN A,=' ' SPACE? JMP $+2 YES, EXIT JMP KLP0:01 ELSE LOOP MCBRX KL:MOD07,KL:MOD06 JMP TSTCRL13 EXIT TEST K * LPOOL TITL TESTS (TEST P - OKIDATA MICROLINE PRINTER TEST) ******************************* * * P:TEST - OKIDATA MICROLINE PRINTER TEST * * THIS TEST WILL PRINT VARIOUS ALPHANUMERIC * AND GRAPHIC PATTERNS ON THE OKIDATA PRINTER. * THE OPERATOR IS REQURIED TO VERIFY THAT THE * PRINTER PATTERN IS CORRECT. * ******************************* * P:TEST EQU $ TEST P COPY =' P',A GET TEST LETTER COPY A,TSTLET STORE IT COPY =3,A GET CDR TEST DISPLAY SELP A,CONSL;CDR DISPLAY IT JSK SETRDYLP INITIALIZE MCS FOR LP COPY FORMTBL,X GET P7 ARAMETER TABLE ADDR. SHIFT X,LO,1 MAKE BYTE ADDR. COPY =-8,Q SET FOR 8 CONTROL CHARS. PLP0:00 SBIT BY:,S BYTE MODE COPYB 0(X),A GET CHAR. RBIT BY:,S WORD MODE JSK MCSLP SEND TO LP ADD =1,X INC. TABLE ADDR. IJNE Q,PLP0:00 DO MORE * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A ROTATING ASCII PATTERN IN NORMAL CHARACTER MODE * PL:MOD00 EQU $ TEST P :MODULE 00 EJECTP 00,00,P:MSG00 COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT COPY =:20,A GET FIRST CHAR. PLP0:01 COPY 4(X),Q GET 'CHARACTERS PER LINE' NEG Q NEGATE IT COPY A,CHARCNT SAVE STARTING CHAR. PLP0:02 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Q,PLP0:02 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP SEND TO LP COPY CHARCNT,A RESTORE CHAR. ADD =1,A CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Y,PLP0:01 DO MORE MCBRX PL:MOD00,PL:MOD00 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN REDUCED CHARACTER MODE. * PL:MOD01 EQU $ TEST P :MODULE 01 EJECTP 01,10,P:MSG01 COPY =GS,A REDUCED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A SET A TO ZERO DIV =3,AQ FIND A THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ FIND NUM. + 2/3(NUM). JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD01,PL:MOD00 JMP PL:MOD02 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN NORMAL CHARACTER MODE. * PL:MOD02 EQU $ TEST P :MODULE 02 EJECTP 02,20,P:MSG02 COPY 4(X),Q GET JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD02,PL:MOD01 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN EXPANDED CHARACTER MODE. * PL:MOD03 EQU $ TEST P :MODULE 03 EJECTP 03,30,P:MSG03 COPY =US,A GET EXPANDED MODE CTRL. CHAR. JSK MCSLP SEND TO LP COPY 4(X),Q GET CHARS. PER LINE SHIFT Q,RO,1 DIVIDE BY 2 JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD03,PL:MOD02 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN IN REDUCED & EXPANDED CHARACTER MODE. * PL:MOD04 EQU $ TEST P :MODULE 04 EJECTP 04,40,P:MSG04 COPY =GS,A FIRST REDUCED MODE JSK MCSLP SEND TO LP COPY =US,A THEN EXPANDED MODE JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A SET A TO ZERO DIV =3,AQ GET ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) SHIFT Q,RO,1 DIVIDE BY 2 - (NUM + 2/3(NUM))/2 JSK PRINTASC PRINT STRAIGHT ASCII MCBRX PL:MOD04,PL:MOD03 JMP PL:MOD05 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A ROTATING GRAPHIC PATTERN IN NORMAL CHARACTER MODE. * PL:MOD05 EQU $ TEST P :MODULE 05 EJECTP 05,50,P:MSG05 COPY =:80,A GET FIRST CHAR. COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT PLP0:03 COPY 4(X),Q GET 'CHARACTERS PER LINE' NEG Q NEGATE IT COPY A,CHARCNT SAVE STARTING CHAR. PLP0:04 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IJNE Q,PLP0:04 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP COPY CHARCNT,A RESTORE CHAR. ADD =1,A CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IJNE Y,PLP08 :03 DO MORE MCBRX PL:MOD05,PL:MOD04 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN REDUCED CHARACTER MODE. * PL:MOD06 EQU $ TEST P :MODULE 06 EJECTP 06,60,P:MSG06 COPY =GS,A REDUCED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A RESET A REG. DIV =3,AQ FIND ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD06,PL:MOD05 * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN NORMAL CHARACTER MODE. * PL:MOD07 EQU $ TEST P :MODULE 07 EJECTP 07,70,P:MSG07 COPY 4(X),Q GET CHARS. PER LINE JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD07,PL:MOD06 JMP PL:MOD08 CONTINUE * LPOOL TITL * * THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN EXPANDED CHARACTER MODE. * PL:MOD08 EQU $ TEST P :MODULE 08 EJECTP 08,80,P:MSG08 COPY =US,A EXPANDED MODE CTRL. CHAR. JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE SHIFT Q,RO,1 DIVIDE BY 2 JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD08,PL:MOD07 *  THIS MODULE WILL EJECT A PAGE AND PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN IN REDUCED & EXPANDED CHARACTER MODE. * PL:MOD09 EQU $ TEST P :MODULE 09 EJECTP 09,90,P:MSG09 COPY =GS,A FIRST REDUCED MODE JSK MCSLP SEND TO OKIDATA COPY =US,A THEN EXPANDED MODE JSK MCSLP SEND TO OKIDATA COPY 4(X),Q GET CHARS. PER LINE COPY =0,A RESET A REG. DIV =3,AQ FIND ONE THIRD COPY 4(X),A GET CHARS. PER LINE INTO A MUL =2,AQ GENERATE NUM. + 2/3(NUM) SHIFT Q,RO,1 DIVIDE BY 2 - (NUM + 2/3(NUM))/2 JSK PRINTGRA PRINT STRAIGHT GRAPHIC MCBRX PL:MOD09,PL:MOD08 JMP TSTCRL13 EXIT TEST P * LPOOL TITL TEST UTILITIES (PRINTASC) ******************************* * * PRINTASC - PRINT STRAIGHT ASCII PATTERN (FULL CHAR. LINE) * * THIS SUBROUTINE WILL PRINT ONE PAGE * OF A STRAIGHT ASCII PATTERN. * * CALLING SEQUENCE: * COPY =CHARS. PER LINE,Q * JSK PRINTASC * ******************************* * PRINTASC EQU $ CSK Q,=132 DO RANGE CHECK JMP $+2 ITS OK COPY =132,Q TOO MANY, LIMIT = 132 NEG Q NEGATE IT COPY Q,CHARCNT STORE IT COPY 5(X),Y GET 'LINES PER PAGE' NEG Y NEGATE IT PRINT:00 COPY CHARCNT,Q GET 'CHARACTERS PER LINE' COPY =:20,A FIRST CHARACTER PRINT:01 JSK MCSLP PRINT CHAR. ADD =1,A NEW CHAR. CLSN A,=:5F START AGAIN? COPY =:20,A YES, GET FIRST CHAR. IJNE Q,PRINT:01 INC. CHAR. COUNT COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND TO LP COPY =LF,A LINE FEED JSK MCSLP SEND TO LP IJNE Y,PRINT:00 DO MORE RSK EXIT * CHARCNT WORD 0 CHARACTERS PER LINE TITL TEST UTILITIES (PRINTGRA) ******************************* * * PRINTGRA - PRINT STRAIGHT GRAPHIC PATTERN (FULL CHAR. LINE) * * THIS SUBROUTINE WILL PRINT ONE PAGE * OF A STRAIGHT GRAPHIC PATTERN. * * CALLING SEQUENCE: * COPY =CHARS. PER LINE,Q * JSK PRINTGRA * ******************************* * PRINTGRA EQU $ CSK Q,=132 DO RANGE CHECK JMP $+2 ITS OK COPY =132,Q TOO MANY, LIMIT = 132 SUB =25,Q SUBTRACT BARS & SPACES SHIFT Q,RO,2 DIVIDE NUMBER BY 4 NEG Q NEGATE IT COPY Q,CHARCNT STORE IT COPY 5(X),Y GET 'LINES PER PAGE' SHIFT Y,RO,1 DIVIDE BY 2 NEG Y NEGATE IT COPY =:80,A GET STARTING CH9 AR. PRINT:02 JSK BARS DISPLAY BAR COPY =-4,Q GET SECOND COUNT COPY Q,CHARCNT2 STORE IT PRINT:03 COPY CHARCNT,Q GET 'CHARACTERS PER LINE/4' PRINT:04 JSK MCSLP PRINT CHAR. IJNE Q,PRINT:04 INC. FIRST CHAR. COUNT JSK BARS ADD =1,A NEW CHAR. CLSN A,=:C0 START AGAIN? COPY =:80,A YES, GET FIRST CHAR. IMS CHARCNT2 INC. SECOND CHAR. COUNT JMP PRINT:03 DO SOME MORE COPY A,Q SAVE CHAR. COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND IT COPY =LF,A CARRIAGE RETURN JSK MCSLP SEND IT JSK BARS DISPLAY BAR COPY =-4,A SET OUTTER COUNT COPY A,CHARCNT2 STORE IT PRINT5 COPY CHARCNT,X GET COUNT COPY =:80,A SET FOR BLANK CHAR. PRINT6 JSK MCSLP SEND TO LP IJNE X,PRINT6 JSK BARS DISPLAY BAR IMS CHARCNT2 INC. OUTTER LOOP JMP PRINT5 LOOP BACK COPY =CR,A CARRIAGE RETURN JSK MCSLP SEND IT COPY =LF,A LINE FEED JSK MCSLP SEND IT COPY Q,A RESTORE CHAR. IJNE Y,PRINT:02 DO SOME MORE LINES RSK EXIT * CHARCNT2 WORD 0 SECOND CHAR. COUNT TITL TEST UTILITIES (BARS) ****************************** * * BARS - DISLAY A BAR IN GRAPHIC MODE * * THIS SUBROUTINE WILL DISPLAY A * GRAPHIC "BAR". * * CALLING SEQUENCE: * JSK BARS * ******************************* * BARS EQU $ PUSH :110 SAVE ALL REGS. COPY =' ',A DISPLAY A SPACE JSK MCSLP DO IT JSK MCSLP DO IT COPY =:BF,A HERE IS A 'BAR' JSK MCSLP DO IT COPY =' ',A DISPLAY A SPACE AGAIN JSK MCSLP DO IT JSK MCSLP DO IT POP  RESTORE ALL RSK EXIT TITL TEST UTILITIES (INKEYBRD) ****************************** * * INKEYBRD - INPUT ALL KEYS AND COMPARE * * THIS SUBROUTINE WILL INPUT ALL KEYS * FROM THE KEYBOARD AND COMPARE EACH * AGAINST THE EXPECTED VALUE FOR EACH * KEYS. * * IF A MISCOMPARE OCCURS THE BELL WILL SOUND * AND THE ROUTINE WILL BE EXITED. * * CALLING SEQUENCE: * COPY =TABLE ADDR.,X * JSK INKEYBRD * ****************************** * INKEYBRD EQU $ COPY =-63,Q TOTAL NUMBER OF KEYS INKEY1 JSK INPUT GET KEY INKEY2 SBIT BY:,S BYTE MODE XORB 0(X),A SAME AS TABLE? RBIT BY:,S WORD MODE JNE A,INKEY3 IF NOT, ERROR ADD =1,X INC. TABLE ADDR. IJNE Q,INKEY1 GO FOR MORE RSK ELSE EXIT INKEY3 COPY =BEEP,A SOUND THE ALARMS!!! JSK MCSCRT AH-OO-GH RSK AND EXIT TITL TEST UTILITIES (CDRDIS) ****************************** * * CDRDIS - DISPLAY MODULE AND TEST NUMBER IN CDR * * THIS SUBROUTINE WILL DISPLAY THE MODULE *  NUMBER PASSED IN THE A-REG. AND THE * TEST NUMBER IN THE CDR. * * CALLING SEQUENCE: * COPY =:MODULE NUMBER,A * JSK CDRDIS * ****************************** * CDRDIS EQU $ IN CONSL;CDR,Q GET CDR DISPLAY AND =:F,Q MASK FOR TEST ONLY OR A,Q 'OR' IN MODULE NUMBER SELP Q,CONSL;CDR SEND TO CDR RSK EXIT TITL TEST UTILITIES (CBRX) ****************************** * * CBRX - CONTINUE, GO BACK, REPEAT, ABORT * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGES AT LOCATION 1,24: * * TEST X :MODULE XX - * * THEN IT WILL INPUT ONE CHARACTER, WHICH * MUST BE ONE OF THE FOLLOWING, AND EXECUTE * THE COMMAND. * * C - CONTINUE TO NEXT MODULE/TEST, *  B - GO BACK TO PREVIOUS MODULE, * R - REPEAT PRESENT MODULE, * X - ABORT TO NEXT TEST. * * CALLING SEQUENCE: : * JST CBRX * WORD ADDR1 REPEAT MODULE * WORD ADDR2 GO TO PREVIOUS MODULE * ****************************** * CBRX ENT JSK DISTST DISPLAY TEST AND MODULE JST MSGA OUTPUT MESS. WORD CBRXMSG '' CBRX1 JSK INPUT GET INPUT - NO ECHO RBIT 5,A SET FOR UPPER CASE ASCII CLSN A,='C' CONTINUE? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='B' GO BACK? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='R' REPEAT? JMP CBRX2 YES, DISPLAY ANSWER CLSN A,='X' ABORT? JMP CBRX2 YES, DISPLAY ANSWER COPY =BEEP,A BAD ANSWER JSK MCSCRT BEEP THE BOZO JMP CBRX1 TRY AGAIN CBRX2 JSK MCSCRT DISPLAY IT FOR WHAT IT'S WORTH CLSN A,='R' REPEAT MODULE? JMP *CBRX YES, EXIT IMS CBRX INC. RETURN ADDR. CLSN A,='B' GO TO PREVIOUS MODULE? JMP *CBRX YES, EXIT IMS CBRX INC. RETURN ADDR. CLSN A,='C' CONTINUE TESTING? JMP *CBRX YES, EXIT JMP TSTCRL13 ELSE ABORT TEST TITL TEST UTILITIES (DISMES) ****************************** * * DISMES - DISPLAY TEST, MODULE, AND MESSAGE * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGE AT 1,24: * * TEST X :MODULE XX - PRESS ANY KEY - * * AND THEN DISPLAY ANY MESSAGE AFTER * THE '-'. * * CALLING SEQUENCE: * JST DISMES * WORD ADDR1 MESSAGE ADDRESS * ****************************** * DISMES ENT JSK DISTST DISPLAY TEST/MODULE MESS. COPY *DISMES,A GET MESS. ADDR. COPY A,DISMES1 STORE IT IMS DISMES INC. RETURN ADDR. JST MSGA DISPLAY PRESS MESS. WORD PRSMSG ' PRESS ANY KEY - ' JST MSGA DISPLAY NEXT MESS. DISMES1 WORD CBRXMSG MESS. ADDR. JMP *DISMES EXIT TITL TEST UTILITIES (DISTST) ****************************** * *  DISTST - DISPLAY TEST AND MODULE * * THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING MESSAGE. * * TEST X:MODULE XX - * * CALLING SEQUENCE: * JSK DISTST * ****************************** * DISTST EQU $ JST MSGA OUTPUT MESS. WORD TSTMSG 'TEST X :MODULE XX - ' RSK EXIT TITL TEST UTILITIES (SETATTR) ****************************** * * SETATTR - SET ATTRIBUTE * * THIS SUBROUTINE WILL SET THE * VISUAL ATTRIBUTES OF THE CRT * ACCORDING TO THE CTRL. CODE * CHARACTER IN THE Q-REG. * * CALLING SEQUENCE: * COPY =CTRL. CODE,Q * JSK SETATTR * ****************************** * SETATTR EQU $ CONTROL1 '0' COPY Q,A PUT ATTRIBUTE CTRL. CODE CHAR. INTO Q JSK MCSCRT SEND TO CRT RSK EXIT * LPOOL TITL PROGRAM UTILITIES (SETRDY,SETRDYLP) ****************************** * * SETRDY - ENABLE MCS CHANNEL FOR CRT * SETRDYLP - ENABLE MCS CHANNEL FOR PRINTER * * THESE SUBROUTINES WILL ENABLE THE * CHANNEL OF THE MCS FOR THE * DEVICE CONNECTED TO IT. * * CALLING SEQUENCE: * JSK SETRDY, * *  JSK SETRDYLP * ****************************** * SETRDY EQU $ COPY =MCSDA;MC:CHAN0,Q GET CRT DEVICE ADDR.;CHANNEL NO. COPY =8,X UN-RESET BOARD SELP X,MCSDA;3 BOARD CONTROL WORD COPY =CRTMODE,A GET CRT MODE WORD JMP $+3 JUMP OVER * SETRDYLP EQU $ COPY =MCSDA;MC:CHAN1,Q GET LP DEVICE ADDR.;CHANNEL NO. COPY =LPMODE,A GET LP MODE WORD COPY =2,X MEANINGLESS VALUE XNX Q INDEX NEXT OUT X,1 FORCE CHANNEL COPY =:50,X FOR INTERNAL RESET (CONTROL WORD) XNX Q INDEX NEXT OUT X,1 IN ORDER TO SEND THE MODE WO; RD XNX Q INDEX NEXT OUT A,1 SEND MODE WORD RSK EXIT TITL PROGRAM UTILITIES (MSGA) ****************************** * * MSGA - THIS SUBROUTINE WILL PRINT AN ASCII * MESSAGE, THE LAST CHAR. OF WHICH * MUST BE 0, TO THE CRT. * * CALLING SEQUENCE: * JST MSGA * WORD (MESSAGE ADDR.) * ****************************** * MSGA ENT PRINT MESSAGE COPY X,MSTMP SAVE THE X-REG. COPY *MSGA,X GET MESSAGE ADDR. IMS MSGA INC. RETURN ADDR. SHIFT X,LO,1 CONVERT WORD ADDR. TO A BYTE ADDR. MSGA1 SBIT BY:,S SET BYTE MODE COPYB 0(X),A GET CHAR. FROM MESSAGE RBIT BY:,S SET WORD MODE JEQ A,MSGA2 IF END OF MESSAGE, EXIT LOOP JSK MCSCRT DISPLAY CHAR. ADD =1,X INC. MESSAGE ADDR. JMP MSGA1 LOOP BACK FOR MORE MSGA2 COPY MSTMP,X RESTORE THE X-REG. JMP *MSGA EXIT * MSTMP WORD 0 SAVED X-REG. TITL TEST UTILITIES (INPUT) ****************************** * * INPUT - INPUT CHAR. WITH NO ECHO * * THIS SUBROUTINE WILL INPUT AN * ASCII CHAR. INTO THE A-REG. WITH * NO ECHO TO THE CRT. * * CALLING SEQUENCE: * JSK INPUT * ****************************** * INPUT EQU $ IN MCSDA;MC:CHAN0;1,A INPUT MCS STATUS TBIT 2,A TRANSMITTER EMPTY? JF OV,INPUT IF NOT, THEN WAIT UNTIL THEN COPY =MCSNECHO,A NOW, SET FOR NO ECHO JMP MCSINP0 DO IT TITL PROGRAM UTILITIES (MCSINP) ****************************** * * MCSINP - INPUT ASCII CHAR. FROM THE SCOUT *  MCS AND RETURN IT IN THE A-REG. * * CALLING SEQUENCE: * JST MCSINP * ****************************** * MCSINP EQU $ IN MCSDA;MC:CHAN0;1,A MUST CHECK FOR ALL CHARS. TRANSMITTED TBIT 2,A TRANSMITTER EMPTY? JF OV,MCSINP IF NOT, THEN WAIT UNITL THEN. COPY =MCSECHO,A NOW, SET ECHO TO RECEIVE MCSINP0 EQU $ SELP A,MCSDA;3 BOARD CONTROL WORD MCSINP1 EQU $ IN MCSDA;MC:CHAN0;1,A GET STATUS TBIT 7,A DEVICE READY? JF OV,MCSINP1 IF NOT, KEEY WAITING UNITL THEN COPY =MCSDTR,A GET DTR SETTING OUT A,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD MCSINP2 EQU $ IN MCSDA;MC:CHAN0;1,A GET STATUS TBIT 1,A RECEIVE READY? JF OV,MCSINP2 IF NOT, WAIT FOR IT IN MCSDA;MC:CHAN0,A GET CHAR. AND =:7F,A ENSURE NO PARITY PUSH :10 SAVE ALL COPY =0,X CLEAR TRANSMITTER/RECEIVER OUT X,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD COPY =MCSNECHO,X DISABLE AUTO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (MCSCRT) ****************************** * * MCSCRT - OUTPUT CHAR. IN A-REG. TO CRT * * THIS SUBROUTINE WILL OUTPUT AN * ASCII CHAR. CONTAIN IN THE LOWER * BYTE OF THE A-REG. TO THE * CRT. * * CALLING SEQUENCE: * COPY =CHAR.,A * JSK MCSCRT * ****************************** * MCSCRT EQU $ PUSH :10 SAVE ALL COPY =MCSNECHO,X SET FOR NO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS OUT X,MCSDA;MC:CHAN0;1 NOT ENABLING TRANSMITTER MCSCRT1 EQU $ IN MCSDA;MC:CHAN0;1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JF OV,MCSCRT1 IF NOT, WAIT FOR IT COPY =MCSRTS,X RTS, DTR AND XMIT ENABLE OUT X,MCSDA;MC:CHAN0;1 CHANNEL CONTROL WORD MCSCRT2 EQU $ IN MCSDA;MC:CHAN0;1,X WAIT FOR TRANSMIT READY TBIT 0,X IS IT? JF OV,MCSCRT2 IF NOT, WAIT FOR IT OUT A,MCSDA;MC:CHAN0 SEND DATA BYTE POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (MC< SLP) ****************************** * * MCSLP - OUTPUT CHAR. IN A-REG. TO LP * * THIS SUBROUTINE WILL OUTPUT AN *  ASCII CHAR. CONTAINED IN THE LOWER * BYTE OF THE A-REG. TO THE LP * * IF THE LP DOESN'T RESPOND READY IN * 3 SECONDS THE FOLLOWING ERROR MESSAGE WILL * BE DISPLAYED ON THE CRT. * * LINE PRINTER TIMED OUT * * CALLING SEQUENCE: * COPY =CHAR.,A * JSK MCSLP * ****************************** * MCSLP EQU $ PUSH :10 SAVE ALL COPY =-2,Q 2 SECOND DELAY COPY Q,CNT2 STORE COUNT COPY =0,Q INNER LOOP COUNT COPY Q,CNT1 STORE COUNT COPY =MCSNECHO,X SET FOR NO ECHO SELP X,MCSDA;3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS OUT X,MCSDA;MC:CHAN1;1 NOT ENABLING TRANSMITTER MCSLP1 EQU $ IN MCSDA;MC:CHAN1;1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JT OV,MCSLP2 IF SO, JUMP JST TIME DO TIME DELAY JMP MCSLP1 TIME NOT EXPIRED JMP MCSLP4 TIME EXPIRED MCSLP2 EQU $ COPY =MCSRTS,X RTS, DTR AND XMIT ENABLE OUT X,MCSDA;MC:CHAN1;1 CHANNEL CONTROL WORD MCSLP3 EQU $ IN MCSDA;MC:CHAN1;1,X WAIT FOR TRANSMIT READY TBIT 0,X IS IT?  JT OV,MCSLP5 IF IT IS, JUMP JST TIME ELSE DO TIME DELAY JMP MCSLP3 TIME NOT EXPIRED MCSLP4 EQU $ PUSH :10 SAVE ALL AGAIN JST MSGA OUTPUT LINE PRINTER MESSAGE WORD LPTIOT 'LINE PRINTER TIMED OUT' JSK INPUT GET CHAR. POP RESTORE ALL JMP MCSLP+2 TRY AGAIN MCSLP5 EQU $ OUT A,MCSDA;MC:CHAN1 SEND CHARACTER POP RESTORE ALL RSK EXIT TITL PROGRAM UTILITIES (TIME) ****************************** * * TIME - THIS SUBROUTINE WILL INC. THE * TIME PARAMETERS AND MAKE THE * APPROPRIATE RETURN IF THE TIME * HAS OR HAS NOT EXPIRED. * * CALLING SEQUENCE: * JST TIME * JMP ? TIME NOT EXPIRED * JMP ? TIME EXPIRED * ****************************** * TIME ENT IMS CNT1 INC. INNER LOOP COUNT JMP *TIME COUNT NOT EXPIRED IMS CNT2 INC. OUTTER LOOP COUNT JMP *TIME COUNT NOT EXPIRED IMS TIME TIME EXPIRED JMP *TIME MAKE APPROPRIATE RETURN * CNT1 WORD 0 INNER LOOP COUNT CNT2 WORD 0 OUTTER LOOP COUNT TITL PROGRAM UTILITIES (RESETCRT) ****************************** * * RESETCRT - THIS SUBROUTINE WILL RESET THE * CRT TO 'NORMAL' MODE WITH TAG * BITS RESET AND A SCREEN ERASE. * * CALLING SEQUENCE: * COPY =CDR ERROR DISPLAY,A * JSK RESETCRT * ****************************** * RESETCRT EQU $ IN CONSL;CDR,Q GET CDR DISPLAY AND =:FF,Q MASK FOR TESTS ONLY OR A,Q 'OR' IN CDR ERROR DISPLAY SELP Q,CONSL;CDR COPY =0,A RESET A-REG. COPY =RESETTAG,A GET CTRL. CODE JSK MCSCRT RESET TAG BITS COPY =NORMAL,Q GET CTRL. CODE JSK SETATTR SET NORMAL ATTRIBUTE CONTROL1 KEYUNLOC RSK EXIT * LPOOL TITL TRAP'S AND CONSOLE INT. SERVICE ROUTINES ****************************** * * TRAP SERVICE ROUTINES * ****************************** * * UNIMPLEMENTED INSTRUCTION TRAP * UITRT ENT UNI. INSTR. TRAP SERVICE ROUTINE SIN 4 STATUS INHIBIT COPY =INSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3100,A GET TRAP CDR DISPLAY SRT2 COPY =0,Y SET Y-REG. TO ZERO COPY Y,S SET PSW TO ZERO COPY X,SR:MSG SAVE MESSAGE ADDR. JSK RESETCRT SET CRT FOR NORMAL MODE JST MSGA OUTPUT ERROR MESSAGE SR:MSG WORD 0 MESSAGE ADDR. SELP Y,MCSDA;3 RESET MULTI-CHANNEL BOARD HLT WAIT = HERE JMP DEFSTR GO TO QUERIES * * UNINSTALLED MEMORY TRAP * UMRT ENT UNI. MEM. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =MEMMSG,X GET TRAP MESSAGE ADDR. COPY =ER3200,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER UP * POWERUP ENT PWR. UP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =POWMSG,X GET TRAP MESSAGE ADDR. COPY =ER3300,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER FAIL * PFRT ENT PWR. FAIL SERVICE ROUTINE HLT WAIT FOR POWER * * STACK OVERFLOW * STOV ENT STK. OVR. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =STKMSG,X GET TRAP MESSAGE ADDR. COPY =ER3400,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * USER TRAP * UTRT ENT USER TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =USEMSG,X GET TRAP MESSAGE ADDR. COPY =ER3500,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * SYSTEM TRAP * STRT ENT SYSTEM TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =SYSMSG,X GET TRAP MESSAGE ADDR. COPY =ER3600,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * ARITHMETIC TRAP * AERT ENT ARIT. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =ARIMSG,X GET TRAP MESSAGE ADDR. COPY =ER3700,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * ****************************** * * CONSOLE INT. SERVICE ROUTINE * ****************************** * CINT ENT CONSOLE INT. SERVICE ROUTINE SIN 2 STATUS INHIBIT COPY =0,X RESET X-REG. COPY X,S RESET STATUS REG. COPY =ER3000,A GET CDR DISPLAY JSK RESETCRT SET NORMAL CRT SELP X,MCSDA;3 RESET MULTI-CHANNEL BOARD JMP DEFSTR GO TO QUERIES * LPOOL TITL TABLES (GLOBAL VARIABLES) ****************************** * * GLOBAL VARIABLES * ****************************** * OPTIONS +:20 * TESTS RES 5,-1 WORKING TEST TABLE * TSTADD WORD TESTS TEST TABLE ADDR. * FORMTBL WORD FORM:A LINE PRINTER FORM TABLE ADDR. * TITL TABLES (KEYBOARD TEST - TABLE0) ****************************** * * TABLE0 - KEYBOARD CHARACTERS/KEYS IN * 'LOWER CASE' MODE * ****************************** * TABLE0 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:5B5D,:5C61,:7364 * WORD :6667,:686A,:6B6C,:3B27,:0D7F,:7A78,:6376,:626E * WORD :6D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00  TITL TABLES (KEYBOARD TEST - TABLE1) ****************************** * * TABLE1 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS' MODE * ****************************** * TABLE1 EQU $ * WORD :1B31,:3233,:3435,:3637,:3839,:302D,:3D60,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:5B5D,:5C41,:5344 * WORD :4647,:484A,:4B4C,:3B27,:0D7F,:5A58,:4356,:424E * WORD :4D2C,:2E2F,:3738,:3934,:3536,:3132,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE2 ****************************** * * TABLE2 - KEYBOARD CHARACTERS/KEYS IN * 'SHIFT' MODE * ****************************** * TABLE2 EQU $ * WORD :1B21,:4023,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :7177,:6572,:7479,:7569,:6F70,:7B7D,:7C61,:7364 * WORD :6667,:686A,:6B6C,:3A22,:0D7F,:7A78,:6376,:626E * WORD :6D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE3) ****************************** * * TABLE3 - KEYBOARD CHARACTERS/KEYS IN * 'CAPS & SHIFT' MODE * ****************************** * TABLE3 EQU $ * WORD :1B21,:4023> ,:2425,:5E26,:2A28,:295F,:2B7E,:0809 * WORD :5157,:4552,:5459,:5549,:4F50,:7B7D,:7C41,:5344 * WORD :4647,:484A,:4B4C,:3A22,:0D7F,:5A58,:4356,:424E * WORD :4D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE4) ****************************** * * TABLE4 - KEYBOARD CHARACTERS/KEYS IN * 'CONTROL' MODE * ****************************** * TABLE4 EQU $ * WORD :1B21,:0023,:2425,:1E26,:2A28,:291F,:2B1E,:0809 * WORD :1117,:0512,:1419,:1509,:0F10,:1B1D,:1C01,:1304 * WORD :0607,:080A,:0B0C,:3A22,:0D1F,:1A18,:0316,:020E * WORD :0D3C,:3E3F,:371A,:3915,:0106,:310A,:3330,:2E00 TITL TABLES (KEYBOARD TEST - TABLE5) ****************************** * * TABLE5 - SPECIAL FUNCTION KEYS F1, F2 AND F3 * ****************************** * TABLE5 EQU $ * BYTE 2,'1',2,'2',2,'3' TITL TABLES (PRINTER TEST - FORM:A) ****************************** * * FORM:A - PARAMETER TABLE FOR 11 3/4" BY 8 1/2" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "50" * LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 100 * PROGRAM LINES PER * PAGE - 44 * ****************************** * FORM:A EQU $ * BYTE ESCAPE,'F50' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 100 * WORD 44 TITL TABLES (PRINTER TEST - FORM:B) ****************************** * * FORM:B - PARAMETER TABLE FOR 8 1/2" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE  - "66" * SHORT LINE CODE - "ESC","B" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS * PER LINE - 80 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:B EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'B' * BYTE ESCAPE,'6' * WORD 80 * WORD 59 TITL TABLES (PRINTER TEST - FORM:C) ****************************** * * FORM:C - PARAMETER TABLE FOR 15" BY 11" PAPER * * TABLE FORMAT: * FORM LENGTH CODE - "ESC","F" * PAPER SIZE CODE - "66" *  LONG LINE CODE - "ESC","A" * LINES PER INCH CODE - "ESC","6" OR "8" * PROGRAM CHARACTERS *  PER LINE - 128 * PROGRAM LINES PER * PAGE - 59 * ****************************** * FORM:C EQU $ * BYTE ESCAPE,'F66' * BYTE ESCAPE,'A' * BYTE ESCAPE,'6' * WORD 128 * WORD 59 TITL CRT MESSAGES (QUERY MESSAGES) ****************************** * * QUERY MESSAGES * ****************************** * TITLE WORD :0C20 BYTE 'SCOUT ADDS VIEWPOINT CRT/OKIDATA MICROLINE PRINTER' BYTE CR,LF,'TEST PROGRAM - 93898-' WORD REV:,CR%8;LF,0 * QERM10 BYTE CR,LF,'C - ADDS VIEWPOINT CRT TEST' BYTE CR,LF,'K - ADDS VIEWPOINT KEYBOARD TEST' BYTE CR,LF,'P - OKIDATA MICROLINE PRINTER TEST'  BYTE CR,LF,'SELECT TEST(S) [C,K,P]-',0 * QERM20 BYTE CR,LF,'A - FORM 11 3/4" BY 8 1/2"' BYTE CR,LF,'B - FORM 8 1/2" BY 11"' BYTE CR,LF,'C - FORM 15" BY 11"' BYTE CR,LF,'SELECT PAPER SIZE ([A], B OR C)-',0 * QERM30 BYTE CR,LF,'A - 6 LPI' BYTE CR,LF,'B ? - 8 LPI' BYTE CR,LF,'LINES PER INCH ([A] OR B)-',0 TITL CRT MESSAGES (TEST MESSAGES) ***************************** * * TEST MESSAGES * ***************************** * * GENERAL TEST MESSAGES * TSTMSG BYTE ESCAPE,'Y6 ' TESTMSG BYTE CR,LF,'TEST' TSTLET BYTE ' C' BYTE ' :MODULE ' MODNUM BYTE '00 - ',0 * PRSMSG BYTE 'PRESS ANY KEY - ',0 * CBRXMSG BYTE '',ESCAPE,ERASELIN,0 * EOT BYTE CR,LF,'END OF TESTS',CR,LF,0 * LPTIOT BYTE BEEP,CR,LF,'LINE PRINTER TIMED OUT',CR,LF,0 TITL * * TEST C: TEST MESSAGES * C:MSG00 BYTE '',ESCAPE,ERASELIN,0 * C:MSG01 BYTE '',ESCAPE,ERASELIN,0 * C:MSG02 BYTE '',ESCAPE,ERASELIN,0 * C:MSG03 BYTE '',ESCAPE,ERASELIN,0 * C:MSG04 BYTE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' BYTE CR,LF,'abcdefghijklmnopqrstuvwxyz' BYTE CR,LF,'0123456789' BYTE CR,LF,'?!#&$%|`~^_+-="''*@:;.,<>/\[](){}',0 * C:MSG05 BYTE '' BYTE ESCAPE,ERASELIN,0 * C:MSG09 BYTE PAGE,SETTAG,ESCAPE,'0',VIDEOSUP C:MSG10 BYTE 'YOU SHOULD NOT BE ABLE TO SEE THIS',RESETTAG,0 * C:MSG11 BYTE CR,LF,'YOU SHOULD BE ABLE TO SEE THIS',0 * C:MSG12 BYTE '',ESCAPE,ERASELIN,0 * C:MSG13 BYTE '',ESCAPE,ERASELIN,0 * C:MSG14 BYTE '',ESCAPE,ERASELIN,0 * C:MSG15 BYTE '',ESCAPE,ERASELIN,0 * C:MSG16 BYTE '',ESCAPE,ERASELIN,0 * C:MSG17 BYTE '',ESCAPE,ERASELIN,0 * C:MSG18 BYTE '',ESCAPE,ERASELIN,0 * C:MSG19 BYTE '',ESCAPE,ERASELIN,0 * C:MSG20 BYTE '',ESCAPE,ERASELIN,0 * C:MSG21 BYTE '',ESCAPE,ERASELIN,0 TITL * * TEST K: TEST MESSAGES * K:MSG00 BYTE CR,LF,'EACH KEY MUST BE TYPED IN EACH ROW, LEFT TO RIGHT, AS' BYTE ' FOLLOWS:' BYTE CR,LF,'1. MAIN KEYBOARD GROUP (LOWER LEFT GROUP):' BYTE CR,LF,' "ESC" THROUGH "BACK SPACE" KEYS,' BYTE CR,LF,' "TAB" THROUGH "\" KEYS,' BYTE CR,LF,' "A" THROUGH "RETURN" KEYS,' BYTE CR,LF,' AND "DEL" THROUGH "/" KEYS.' BYTE CR,LF,'2. NUMERIC PAD GROUP (LOWER RIGHT GROUP):' BYTE CR,LF,' "7" THROUGH "9" KEYS,' BYTE CR,LF,' "4" THROUGH "6" KEYS,' BYTE CR,LF,' "1" THROUGH "3" KEYS,' BYTE CR,LF,' AND "0" THROUGH "." KEYS.' BYTE CR,LF,'BEEP TONE INDICATES ERROR.' BYTE CR,LF,'*********************************************************' BYTE CR,LF,0 * K:MSG01 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG02 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG03 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG04 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG05 BYTE ESCAPE,'Y ' BYTE '',0 * K:MSG06 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 * K:MSG07 BYTE PAGE,'',0 * K:MSG08 BYTE 'PRESS "ESC","6@ " AND ANY KEY TO UNLOCK KEYBOARD',0 * K:MSG09 BYTE 'PRESS "CTRL-BREAK" TO UNLOCK KEYBOARD',ESCAPE,ERASELIN,0 * K:MSG10 BYTE '',0 * K:MSG11 BYTE ESCAPE,'Y ' BYTE '',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:MSG02 BYTE PAGE,'',0 * P:MSG03 BYTE PAGE,'',0 * P:MSG04 BYTE PAGE,'',0 * P:MSG05 BYTE PAGE,'',0 * P:MSG06 BYTE PAGE,'',0 * P:MSG07 BYTE PAGE,'',0 * P:MSG08 BYTE PAGE,'',0 * P:MSG09 BYTE PAGE,'',0 TITL CRT MESSAGES (TRAP/EXCEPTION MESSAGES) ***************************** * * TRAP/EXCEPTION MESSAGES * ***************************** * INSMSG BYTE CR,LF,'UNIMPLEMENTED INSTRUCTION TRAP',CR,LF,0 * MEMMSG BYTE CR,LF,'UNINSTALLED MEMORY TRAP',CR,LF,0 * POWMSG BYTE CR,LF,'POWER FAIL',CR,LF,0 * STKMSG BYTE CR,LF,'STACK OVERFLOW',CR,LF,0 * USEMSG BYTE CR,LF,'USER TRAP',CR,LF,0 * SYSMSG BYTE CR,LF,'SYSTEM TRAP',CR,LF,0 * ARIMSG BYTE CR,LF,'ARITHMETIC TRAP',CR,LF,0 * TITL STACK ****************************** * * STACK SPACE * ****************************** * STACK EQU $ RES 128,0 STACK SPACE * ENDPROG EQU $ END OF PROGRAM END DEFSTR THAT'S ALL FOLKES!!! ,'AND PRESS THE SPACE BAR TO EXIT>',CR,LF,0 TITL * * TEST P: TEST MESSAGES * P:MSG00 BYTE PAGE,'',0 * P:MSG01 BYTE PAGE,'',0 * P:MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIB IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIID IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII