ASC1ROM IDENT ASC1ROM * * 'REVISION 'B005 * ************************************************************************ * * OUTPUT FUNCTION DEFINITIONS * ************************************************************************ * * CHANNEL FUNCTION DESCRIPTION * * 0 0 OPERATORS PANEL DATA * * OUTPUT FROM A REGISTER * BIT 1 OUTPUT REGISTER BIT 1 * BIT 2 OUTPUT REGISTER BIT 2 * BIT 3 OUTPUT REGISTER BIT 3 * BIT 4 OUTPUT REGISTER BIT 4 * BIT 5 OUTPUT REGISTER BIT 5 * BIT 6 OUTPUT REGISTER BIT 6 * BIT 7 COMMUNICATION ERROR INDICATOR * BIT 8 UNUSED * * 1 0 COMMUNICATION CHANNEL DATA * * OUTPUT FROM A REGISTER * BIT 1 COMMUNICATION OUTPUT BIT 1 * BIT 2 COMMUNICATION OUTPUT BIT 2 * BIT 3 COMMUNICATION OUTPUT BIT 3 * BIT 4 COMMUNICATION OUTPUT BIT 4 * BIT 5 COMMUNICATION OUTPUT BIT 5 * BIT 6 COMMUNICATION OUTPUT BIT 6 * BIT 7 COMMUNICATION OUTPUT BIT 7 * BIT 8 COMMUNICATION OUTPUT BIT 8 * * 1 1 COMMUNICATION CHANNEL DATA * * OUTPUT FROM A REGISTER * BIT 1 COMUNICATION OUTPUT BIT 9 * BIT 2 COMUNICATION OUTPUT BIT 10 * BIT 3-8 UNUSED * * 1 2 COMMUNICATION CHANNEL CONTROL * * OUTPUT FROM A REGISTER * BIT 1 ENABLE CHARACTER READY INTERRUPT * BIT 2 ENABLE CHARACTER REQUEST INTERRUPT * BIT 3 ENABLE LOOP BACK * BIT 4-8 UNUSED * * 2 0 KEYBOARD CONTROL * * OUTPUT FROM A REGISTER * BIT 1 ENABLE CHARACTER READY INTERRUPT * BIT 2-8 UNUSED * 3 0 TOUCH PANEL CONTROL * * OUTPUT FROM A REGISTER * BIT 1 ENABLE CHARACTER READY INTERRUPT * BIT 2-8 UNUSED * * 3 1 SLIDE PROJECTOR CONTROL * OUTPUT FROM A REGISTER * * BIT 1 SHUTTER OPEN=/ CLOSED=1 * BIT 2 LAMP OFF=0 ON=1 * * 3 2 SLIDE PROJECTOR DATA * * OUTPUT FROM A REGISTER * BIT 1 Y IMAGE COORDINATE BIT 1 * BIT 2 Y IMAGE COORDINATE BIT 2 * BIT 3 Y IMAGE COORDINATE BIT 3 * BIT 4 Y IMAGE COORDINATE BIT 4 * BIT 5 X IMAGE COORDINATE BIT 1 * BIT 6 X IMAGE COORDINATE BIT 2 * BIT 7 X IMAGE COORDINATE BIT 3 * BIT 8 X IMAGE COORDINATE BIT 4 * 4 3 DISPLAY DATA * * OUTPUT FROM A REGISTER * BIT 1 CHARACTER DATA BIT * BIT 2-7 UNUSED * BIT 8 VECTOR DATA BIT * * 4 4 DISPLAY X COORDINATE * * OUTPUT FROM A REGISTER * BIT 1 X COORDINATE BIT 1 * BIT 2 X COORDINATE BIT 2 * BIT 3 X COORDINATE BIT 3 * BIT 4 X COORDINATE BIT 4 * BIT 5 X COORDINATE BIT 5 * BIT 6 X COORDINATE BIT 6 * BIT 7 X COORDINATE BIT 7 * BIT 8 X COORDINATE BIT 8 * * 4 5 DISPLAY Y COORDINATE * * OUTPUT FROM A REGISTER * BIT 1 Y COORDINATE BIT 1 * BIT 2 Y COORDINATE BIT 2 * BIT 3 Y COORDINATE BIT 3 * BIT 4 Y COORDINATE BIT 4 * BIT 5 Y COORDINATE BIT 5 * BIT 6 Y COORDINATE BIT 6 * BIT 7 Y COORDINATE BIT 7 * BIT 8 Y COORDINATE BIT 8 * * 4 6 DISPLAY CONTROL 1 * * OUTPUT FROM A REGISTER * BIT 1 X COORDINATE BIT 9 * BIT 2 Y COORDINATE BIT 9 * BIT 3 ENABLE LOAD X/Y COORDINATE BITS * BIT 4 X DIRECTION DEC EQUALS 1 * BIT 5 Y DIRECTION DEC EQUALS 1 * BIT 6 SHORT AXIS Y AXIS EQUALS 1 * BIT 7 INHIBIT WRITE/ERASE INHIBIT EQUAL 1 * BIT 8 VECTOR/CHARACTER VECTOR EQUALS 1 * * 4 7 DISPLAY CONTROL 2 * * OUTPUT FROM A REGISTER * BIT 1 BULK ERASE * BIT 2 W/E0 * BIT 3 W/E1 * BIT 4 ENABLE SELECT INVERSE VIDEO * BIT 5 SELECT INVERSE VIDEO * BIT 6 ENABLE CHARACTER ORIENTATION * BIT 7 CHARACTER ORIENTATION * BIT 8 UNUSED * ************************************************************************ ************************************************************************ * * INPUT FUNCTION DEFINITIONS * ************************************************************************ * * CHANNEL FUNCTION DESCRIPTION * * 0 1 OPERATORS PANEL DATA * * BIT 1 INPUT REGISTER BIT 1 * BIT 2 INPUT REGISTER BIT 2 * BIT 3 INPUT REGISTER BIT 3 * BIT 4 INPUT REGISTER BIT 4 * BIT 5 INPUT REGISTER BIT 5 * BIT 6 INPUT REGISTER BIT 6 * BIT 7 UNUSED * BIT 8 UNUSED * * 1 0 COMMUNICATION CHANNEL DATA * * BIT 1 COMMUNICATION INPUT BIT 13 * BIT 2 COMMUNICATION INPUT BIT 14 * BIT 3 COMMUNICATION INPUT BIT 15 * BIT 4 COMMUNICATION INPUT BIT 16 * BIT 5 COMMUNICATION INPUT BIT 17 * BIT 6 COMMUNICATION INPUT BIT 18 * BIT 7 COMMUNICATION INPUT PARITY BIT * BIT 8 COMMUNICATION INPUT BIT 19 * * * 1 1 COMMUNICATION CHANNEL DATA * * BIT 1 COMMUNICATION INPUT BIT 7 * BIT 2 COMMUNICATION INPUT BIT 8 * BIT 3 COMMUNICATION INPUT BIT 9 * BIT 4 COMMUNICATION INPUT BIT 10 * BIT 5 COMMUNICATION INPUT BIT 11 * BIT 6 COMMUNICATION INPUT BIT 12 * BIT 7 ZERO * BIT 8 ZERO * * 1 2 COMMUNICATION CHANNEL DATA * * BIT 1 COMMUNICATION INPUT BIT 1 * BIT 2 COMMUNICATION INPUT BIT 2 * BIT 3 COMMUNICATION INPUT BIT 3 * BIT 4 COMMUNICATION INPUT BIT 4 * BIT 5 COMMUNICATION INPUT BIT 5 * BIT 6 COMMUNICATION INPUT BIT 6 * BIT 7 UNUSED * BIT 8 UNUSED * * 1 3 COMMUNICATION CHANNEL STATUS * * BIT 1-4 UNUSED * BIT 5 OVERRUN * BIT 6 PARITY ERROR * BIT 7 CHARACTER REQUEST * BIT 8 CHARACTER READY * * 2 2 KEYBOARD DATA * * BIT 1 KEYBOARD INPUT DATA BIT 1 * BIT 2 KEYBOARD INPUT DATA BIT 2 * BIT 3 KEYBOARD INPUT DATA BIT 3 * BIT 4 KEYBOARD INPUT DATA BIT 4 * BIT 5 KEYBOARD INPUT DATA BIT 5 * BIT 6 KEYBOARD INPUT DATA BIT 6 * BIT 7 KEYBOARD INPUT DATA BIT 7 * BIT 8 ZERO * * 2 1 KEYBOARD STATUS * * BIT 1 CHARACTER READY * BIT 2-8 UNUSED * * 3 0 TOUCH PANEL DATA * * BIT 1 Y POSITION BIT 1 * BIT 2 Y POSITION BIT 2 * BIT 3 Y POSITION BIT 3 * BIT 4 Y POSITION BIT 4 * BIT 5 X POSITION BIT 1 * BIT 6 X POSITION BIT 2 * BIT 7 X POSITION BIT 3 * BIT 8 X POSITION BIT 4 * * 3 1 TOUCH PANEL STATUS * * BIT 1 CHARACTER READY * BIT 2-8 UNUSED * * 4 0 DISPLAY READ X REGISTER * * BIT 1 X REGISTER BIT 1 * BIT 2 X REGISTER BIT 2 * BIT 3 X REGISTER BIT 3 * BIT 4 X REGISTER BIT 4 * BIT 5 X REGISTER BIT 5 * BIT 6 X REGISTER BIT 6 * BIT 7 X REGISTER BIT 7 * BIT 8 X REGISTER BIT 8 * * 4 1 DISPLAY READ Y REGISTER * * BIT 1 Y REGISTER BIT 1 * BIT 2 Y REGISTER BIT 2 * BIT 3 Y REGISTER BIT 3 * BIT 4 Y REGISTER BIT 4 * BIT 5 Y REGISTER BIT 5 * BIT 6 Y REGISTER BIT 6 * BIT 7 Y REGISTER BIT 7 * BIT 8 Y REGISTER BIT 8 * * 4 2 DISPLAY READ X/Y * * BIT 1 X REGISTER BIT 9 * BIT 2 Y REGISTER BIT 9 * BIT 3-8 UNUSED ************************************************************************ ************************************************************************ * * EQUATE STATEMENTS * ************************************************************************ * VIDEO DISPLAY DISCHAN EQU 4 DISPLAY CHANNEL NUMBER DISDATA EQU 3 DISPLAY DATA DISCON1 EQU 6 DISPLAY CONTROL 1 FUNCTION DISCON2 EQU 7 DISPLAY CONTROL 2 FUNCTION YCOORD EQU 5 DISPLAY Y COORDINATE DATA XCOORD EQU 4 DISPLAY X COORDINATE DATA XYREAD EQU 2 DISPLAY READ XY BIT 9 FUNCTION ************************************************************************ * * INTERRUPT AREA * * THE TERMINAL HAS EIGHT PRIORITY ENCODED INTERRUPT LINES. * LOWER NUMBERED INTERRUPT LINES HAVE A HIGHER PRIORITY THAN * HIGHER NUMBERED INTERRUPT LINES. THE PROCESSOR RECOGNIZES THE * INTERRUPT AT THE END OF THE CURRENT INSTRUCTION. THE * CURRENT VALUE OF THE PROGRAM COUNTER IS PUSHED INTO THE * PUSHDOWN STACK AND THE PROGRAM COUNTER IS SET TO THE TRAP * LOCATION DEFINED BY THE ACTIVATED INTERRUPT LINE. * * INTERRUPT LOCATION DEVICE * 0 HEX 00 MASTER CLEAR * 1 HEX 08 COMMUNICATION CHANNELS * 2 HEX 10 KEYBOARD * 3 HEX 18 TOUCH PANEL * 4 HEX 20 RESERVED * 5 HEX 28 EXTERNAL INTERFACE * 6 HEX 30 OPTIONS * 7 HEX 38 OPTIONS * ************************************************************************ START EQU $ * TRAP0 EQU $ DI JMP RST.SEC0 MASTER RESET DB #00,#00,#00,#00 * TRAP1 EQU $ IN RSF.COMM*32+COMMSTAT XRA A TURN OFF THIS INT. OUT RSF.COMM*32+COMMCONT EI ENABLE SYSTEM INT.S RET DB #00 * TRAP2 EQU $ PUSH PSW KEYBOARD PUSH B PUSH D PUSH H JMP KEYINP * DB #00 * TRAP3 EQU $ PUSH PSW TOUCH PANEL PUSH B PUSH D PUSH H JMP TOUCHINP * DB #00 * TRAP4 EQU $ RET UNASSIGNED * DB #00,#00,#00,#00,#00,#00,#00 * TRAP5 EQU $ PUSH PSW PUSH B PUSH D PUSH H JMP EXT.PR EXTERNAL INTERRUPT DB #00 * TRAP6 EQU $ PUSH PSW PUSH B PUSH D PUSH H JMP EXT.PR EXTERNAL INTERRUPT DB #00 * TRAP7 EQU $ PUSH PSW PUSH B PUSH D PUSH H JMP EXT.PR EXTERNAL INTERRUPT DB #00 * * * * * * * * * * * * * * * * * * * * * * * * * * USER JUMP TABLE TO ACCESS RESIDENT ROUTINES. * * * * * * * * * * * * * * * * * * * * * * * * * R.INIT JMP #4051 PLATO INITIALIZE R.DOT JMP #4003 WRITE/ERASE DOT R.LINE JMP #4006 DRAW LINE R.CHARS JMP CHARS DISPLAY CHARACTERS R.BLOCK JMP #400C BLOCK WRITE/ERASE R.INPX JMP #400F READ DISPLAY X COORD R.INPY JMP #4012 READ DISPLAY Y COORD R.OUTX JMP OUTX SETS NEW X COORD R.OUTY JMP OUTY SETS NEW Y COORD R.XMIT JMP #401B TRANSMIT DATA TO HLP R.MODE JMP MODESET SETS MODE,W/E,BULK ERASE R.STEPX JMP #4021 STEPS X AXIS COORD R.STEPY JMP #4024 STEPS Y AXIS COORD R.WE JMP #4027 W/E CURRENT POSITION R.DIR JMP #402A SET DIRECTION OF XY STEP R.INPUT JMP #402D DIRECTS DEVICE INPUT R.SSF JMP #4030 SELECT SPECIAL FUNCTION R.CCR JMP CCR SET CHARACTER INFO. R.EXTOUT JMP #4036 TO R.RETURN FOR NOW R.EXEC JMP #4039 R.GJOB JMP #403C R.XJOB JMP #403F R.RETURN JMP #4042 RESTORE, ENABLE, RETURN JMP #4045 EXPANSION EXT.PR JMP #4048 KEYINP JMP #404B TOUCHINP JMP #404E A.INIT JMP #4000 ASCII INITIALIZE DB #00,#00 M0ADR DW M0CODE00 M1ADR DW M1CODE00 * * EXTERNAL ENTRY TO VARIOUS ROUTINES * BEGINNING AT ADDRESS #009A JMP SUPER JMP SUB JMP SELECTM0 JMP SELECTM1 JMP SELECTMM JMP HORZ JMP VERTICAL JMP FORWARD JMP REVERSE JMP SIZE.1 JMP SIZE.2 JMP BKSPACE JMP RETURN JMP TAB JMP LINEFEED JMP VERTAB JMP FORMFEED * MODE 3 - CHARACTER MODE USER ENTRY * CHARS EQU $ MOV A,M LOAD DATA BYTE. INX H INCREMENT ADDRESS TO NEXT BYTE. SHLD M.ORG AND STORE FOR NEXT BYTE. ANI #7F MASK FOR SEVEN BIT CHARACTER CODES. MOV C,A SAVE CHARACTER CODE CPI #1B TEST FOR ESCAPE SEQ. JZ CHARACT4 SET FLAG FOR CONTROL CODE. * LXI H,M.CCR LOAD ADDRESS OF UNCOVER FLAG MVI A,#80 AND TEST FOR ANA M UNCOVER CODE IN PREVIOUS CHARACTER JZ CHARACT3 NOT CONTROL, PROCESS DATA. MVI A,#7F CLEAR ESCAPE FLAG ANA M MOV M,A MOV A,C EXIT IF ESC ASCII ZERO CPI #30 RZ * * EXECUTE CONTROL FUNCTION DEFINED BY CHARACTER CODE * MOV A,C LOAD CHARACTER CODE CPI #40 JC CHARACT2 CHARACT2, SEQ OUT OF RANGE CPI #50 JNC CHARACT2 CHARACT2, SEQ OUT OF RANGE SUI #40 IN RANGE LXI H,CHARESC BASE ADDR ESC TBL CALL CONTROL JMP CHARACT2 CHARACT2 EQU $ LHLD M.ORG LOAD FWA OF DATA JMP CHARS LOAD NEXT CHARACTER CODE. * * CHARACT3 EQU $ MOV A,C LOAD CHARACTER CODE CPI #20 JNC CHAR3.A CHAR3.A, NOT CTL CODE CPI #08 TEST FOR CTL RANGE JC CHARACT2 CHARACT2, CTL OUT OF RANGE CPI #0E JP CHARACT2 CHARACT2, CTL OUT OF RANGE SUI #08 IN RANGE LXI H,CHARCTL BASE ADDR CTL TBL CALL CONTROL JMP CHARACT2 CHAR3.A EQU $ SUI #20 CALL CHAREN AND DISPLAY CHARACTER. JMP CHARACT2 * CHARACT4 EQU $ LXI B,#7F80 CALL UD.CCR JMP CHARACT2 CHARCTL EQU $ DW BKSPACE DW TAB DW LINEFEED DW VERTAB DW FORMFEED DW RETURN * CHARESC EQU $ DW SUPER DW SUB DW SELECTM0 DW SELECTM1 DW SELECT SELECT M2, M3 DW SELECT DW SELECT M4, M5, M6, OR M7 DW SELECT DW SELECT CHARACTER SET. DW SELECT DW HORZ DW VERTICAL DW FORWARD DW REVERSE DW SIZE.1 8 X 16 CHARACTERS DW SIZE.2 16 X 32 CHARACTERS * CONTROL EQU $ RLC MVI B,#00 CLEAR REGISTER B MOV C,A LOAD CHARACTER CODE DAD B FORM JUMP TABLE TABLE POINTER MOV E,M LOAD LEAST SIGN BYTE INX H INCREMENT ADDRESS MOV D,M LOAD MOST SIGN BYTE XCHG LXI D,HOR LOAD HOR PLOT FLAG ADDRESS. PCHL BKSPACE EQU $ LDA FWD.REV LOAD FORWARD REVERSE FLAG CMA AND COMPLIMENT IT. STA FWD.REV CALL CH.PLOT CALCULATE VARIABLES FOR OPPOSITE PLOT CALL DISP.TAB TAB TO NEXT CHARACTER POSITION. LDA FWD.REV LOAD FORWARD REVERSE FLAG CMA AND RESTORE TO STA FWD.REV THE ORIGINAL . JMP CH.PLOT RESET PLOTTING VARIABLES. * TAB EQU $ JMP DISP.TAB TAB TO NEXT CHARACTER POSITION. * LINEFEED EQU $ LDAX D LOAD HOR. PLOT FLAG ANA A AND TEST FOR ZERO. LXI B,#FFF0 LOAD TAB ADJUSTMENT JNZ V.ADJ ADJUST VERTICAL LXI B,16 LOAD HOR. ADJUST JMP H.ADJ AMD ADJUST HOR. * VERTAB EQU $ LDAX D LOAD HOR. PLOT FLAG ANA A AND TEST. LXI B,16 LOAD TAB ADJUST JNZ V.ADJ AND ADJUST VERT. LXI B,#FFF0 LOAD TAB ADJUST JMP H.ADJ AND ADJUST HOR. * FORMFEED EQU $ LXI H,0000 LOAD COORDINATE 00 LDA FWD.REV TEST FLAG FOR ORA A FORWARD OR REVRESE PLOT. CNZ FF.3 LOAD REVERSE PLOT COORDINATE. * * FORWARD PLOT SETTING. * LDAX D LOAD HOR. PLOT FLAG ORA A OR HORIZONTAL PLOT. JZ FF.2 GO TO VERTICAL SETTING. * * HORIZONTAL PLOT SETTING. * FF.1 EQU $ CALL OUTX OUTPUT X COORDINATE. LXI H,512 LOAD FULL SCREEN COORDINATE LXI B,#FFF0 LOAD 2 " SIZE CALL SIZE.ADJ AND ADJUST FOR CHARACTER SIZE. JMP OUTY OUTPUT Y COORDINATE. * * VERTICAL PLOT SETTING. * FF.2 EQU $ CALL OUTY OUTPUT Y COORDINATE. LXI H,#FFFF LOAD ADJUST VALUE LXI B,16 LOAD 2 X SIZE. CALL SIZE.ADJ ADJUST FOR CHARACTER SIZE. JMP OUTX OUTPUT X COORDINATE * * REVERSE PLOT SETTING. * FF.3 EQU $ LXI H,512 LOAD FULL SCREEN COORDINATE. LXI B,#FFF8 LOAD NEGATIVE SIZE JMP SIZE.ADJ ADJUST FOR CHARACTER SIZE. * RETURN EQU $ LHLD M.MARGIN LOAD DISPLAY MARGIN. LDAX D LOAD HOR. PLOT FLAG ANA A AND TEST. JZ RETURN1 NOT HORIZONTAL. * CALL OUTX OUTPUT X COORDINATE. LXI B,#FFF0 LOAD VERTICAL ADJUST JMP V.ADJ * RETURN1 EQU $ CALL OUTY OUTPUT Y COORDINATE. LXI B,16 LOAD HORIZONTAL ADJUST VALUE. JMP H.ADJ * SUPER EQU $ LDAX D LOAD HOR. PLOT FLAG ANA A AND TEST LXI B,05 LOAD SUPERSCRIPT ADJUST FOR HOR. JNZ V.ADJ ADJUST VERT. LXI B,#FFFB LOAD SUPERSCRIPT ADJUST JMP H.ADJ * SUB EQU $ LDAX D LOAD HOR. PLOT FLAG ANA A AND TEST. LXI B,#FFFB LOAD SUBSCRIPT ADJUST JNZ V.ADJ ADJUST VERT. LXI B,05 LOAD ADJUST FOR SUBSCRIPT FOR VERT. JMP H.ADJ GO ADJUST HOR. * SELECTM0 EQU $ LHLD M0ADR LOAD ADDRESS OF M0 JMP SELECT.1 SELECTM1 EQU $ LHLD M1ADR LOAD ADDRESS OF M1 JMP SELECT.1 * SELECTMM EQU $ MOV A,C SUI #44 RLC JMP SELECT.0 * SELECT EQU $ RRC ADJUST CODE FOR INDEX SUI #08 SELECT.0 EQU $ MOV E,A ADDRESS STORE. * LXI H,MEMORY.2 LOAD ADDR. OF MEM2 POINTER MVI D,00 DAD D AND ADD INDEX. * MOV E,M LOAD CHARACTER SET INX H ADDRESS FROM MOV D,M STORE AREA. XCHG * SELECT.1 EQU $ SHLD MEMSEL CHARACTER SET MOV A,C GET BIT PATTERN SET UP ADI #0C FOR SETTING M.CCR WITH MOV C,A CORRECT CHARACTER SET MVI A,#0E MASK BITS ANA C FOR MEMORY SELECTED. MOV C,A MVI B,#F1 JMP UD.CCR GO SET FLAG. HORZ EQU $ XCHG LOAD HOR FLAG ADDRESS MVI M,#FF AND SET TO ALL ONES FOR HOR. PLOT. INX H INCREMENT ADDRESS TO VERT. MVI M,00 AND CLEAR VERT PLOT FLAG. * CALL CH.PLOT CALL ROUTINE TO CALCULATE PLOTTING. LXI B,#FE00 LOAD MASK AND HOR BITS CALL UD.CCR GO UPDATE PLOT FLAG MVI A,#20 SET HORIZONTAL CHARACTER ORIENTATION. JMP VERTICA1 VERTICAL EQU $ XCHG LOAD HOR FLAG ADDRESS MVI M,00 CLEAR HOR PLOT FLAG. INX H INCREMENT ADDRESS MVI M,#FF AND SET FLAG FOR VERT. PLOT. CALL CH.PLOT CALL ROUTINE TO CALCULATE PLOTTING. LXI B,#FE01 LOAD MASK AND VERT BIT CALL UD.CCR GO UPDATE PLOT FLAG XRA A CLEAR A REGISTER. VERTICA1 EQU $ ORI #40 SET ORIENTATION ENABLE BIT MOV B,A SAVE ORIENTATION BITS LDA D.CNTL2 LOAD DISPLAY CONTROL 2 ANI 06 AND MASK WRITE EREASE BITS. ORA B ADD ORIENTATION BITS TO CONTROL STA D.CNTL2 AND STORE FOR CHARACTER GENERATOR. RET REVERSE EQU $ MVI A,#FF LOAD REVERSE FLAG JMP FRWD.1 FORWARD EQU $ XRA A LOAD FORWARD FLAG * FRWD.1 EQU $ STA FWD.REV STORE FORWARD REVERSE FLAG LXI B,#BF40 LOAD MASK AND REVERSE BIT ANA C SET REVERSE FOR FORWARD OR REVERSE MOV C,A CALL UD.CCR GO UPDATE PLOT FLAG JMP CH.PLOT CALL ROUTINE TO CALCULATE PLOTTING. SIZE.2 EQU $ MVI A,16 LOAD SIZE TWO LXI H,CHAR.S2 LOAD CHARACTER GENERATOR FOR SIZE 2 JMP SIZE.11 SIZE.1 EQU $ MVI A,8 LOAD SIZE ONE. LXI H,CHAR.S1 LOAD CHARACTER GENERATOR FOR SIZE 1 SIZE.11 EQU $ SHLD CHAR.GEN STORE CHARACTER GENERATOR ADDRESS. STA SIZE IN SIZE REGISTER. MVI B,#DF LOAD MASK RLC ROTATE SIZE BIT ANI #20 AND MASK FOR SIZE TWO MOV C,A CALL UD.CCR GO UPDATE PLOT FLAG JMP CH.PLOT CALL ROUTINE TO CALCULATE PLOTTING. * * UPDATE OF M.CCR * UD.CCR EQU $ LDA M.CCR LOAD CURRENT FLAG. ANA B MASK BIT BEING CHANGED ORA C SET NEW VALUE OF BIT STA M.CCR STORE UPDATED FLAG. RET RETURN TO CALLER ************************************************************************ * * CHARACTER GENERATOR * ************************************************************************ * THE FORMAT OF MODE 3 DATA WORDS CONTAINS THREE 6 BIT CHARACTER * THESE CODES DEFINES THE MEMORY ADDRESSES OF THE CHARACTERS TO B * PLOTTED. FOUR 64 CHARACTER MEMORIES ARE CONTAINED IN THE TERMI * MEMORIES M0 AND M1 CONTAIN FIXED CHARACTERS AND MEMORIES M2 AND * CONTAIN VARIABLE CHARACTERS LOADED BY MODE 1 WORDS AND ARE PROC * BY MODE 3 AS 64 ARRAYS OF 8X16 MATRIX. THE TOP THREE ROWS AND T * BOTTOM ROW OF THE MATRICES FOR ALL CHARACTERS FROM M0 AND M1 AR * ALWAYS UNFILLED. LIKEWISE THE EIGHTH COLOMN IS ALSO UNFILLED T * PROVIDE INTERCHARACTER SPACING. AS A RESULT THE BASIC CHARACTE * IS 7X9 FOR THE CHARACTERS FROM M0 AND M1 MEMORIES * * CHARACTER WRITE/ERASE IS CONTROLLED BY THE WRITE/ERASE BITS IN * LDM INSTRUCTION WORD. IF BIT 2=1,CHARACTERS ARE WRITTEN IN * ACCORDANCE WITH DATA STORED IN M0 AND M1.IF BIT 2=0,CHARACTERS * ARE ERASED. IF BIT 3=0,THE BACKGROUND OF EACH CHARACTER MATRIX * ERASED.IF BIT 3=1,THE BACKGROUND REMAINS UNALTERED(OVERSTRIKE). * * WHEN A CHARACTER HAS BEEN COMPLETELY PLOTTED THE X/Y ADDRESS IS * AT THE LOWER LEFT HAND CORNER OF THE NEXT MATRIX READY FOR THE * PLOT. IN THIS WAY,CHARACTER PLOTTING PROCEEDS FROM LEFT TO RIG * ACROSS THE SCREEN. UP TO 32 LINES OF 64 CHARACTERS EACH MAY BE * FOR A TOTAL OF 2048 CHARACTERS * ************************************************************************ * * INITIALIZE MEMORY ADDRESS OF CHARACTER * CHAREN MVI H,#00 CLEAR H REGISTER MOV L,A PLACE CHARACTER CODE IN REGISTER DAD H SHIFT LEFT ONE PLACE DAD H SHIFT LEFT ONE PLACE DAD H SHIFT LEFT ONE PLACE DAD H SHIFT LEFT ONE PLACE XCHG SAVE CHARACTER INDEX LHLD MEMSEL LOAD CHARACTER MEMORY. DAD D ADD INDEX FOR CHARACTER ADDRESS XCHG SAVE CHARACTER ADDRESS IN DE * * LDA FWD.REV LOAD FORWARD REVERSE FLAG ANA A AND TEST PLOTTING DIRECTION. JZ CHAR6 FORWARD, CONTINUE. PUSH D SAVE DE REGISTERS CALL DISP.TAB AND TAB TO REVERSE CHARACTER POP D POSITION BEFORE CHARACTER. CHAR6 EQU $ LDA D.CNTL2 LOAD CONTROL 2 FOR CHARACTER OUT DISCHAN*32+DISCON2 ND OUT PUT ORIENTATION AND W/E LDA VER LOAD VERTICAL PLOT FLAG ANI 08 AND MASK FOR VERTICAL PLOT BIT. OUT DISCHAN*32+DISCON1 ND OUTPUT FOR CHARACTER PLOT. RLC MOV B,A SAVE X DIRECTION BIT LHLD YREG LOAD CURRENT Y COORD. SHLD YSAVE AND SAVE MOV C,L SAVE LOWER 8 BITS OF Y LHLD XREG LOAD CURRENT X COORD. SHLD XSAVE AND SAVE IN DISCHAN*32+XYREAD READ UPPER X,Y BITS ANI #3 MOV H,A TEMP SAVE RLC SHIFT Y BIT UP 1 POSITION XRA H INSERT X BIT ANI #5 MASK FOR X,Y BITS ONLY XRI #08 AND ENABLE BIT,SETS NZ FLG XRA B ADD X DIRECTION BIT MOV H,A LDA SIZE LOAD CHARACTER SIZE MOV B,A AND SAVE AS COLUMN COUNT ************************************************************ * * CHARACTER GENERATOR ENTRY * REG B COLUMN COUNT * REG C LOWER 8 BITS OF Y COORDINATE * REG L LOWER 8 BITS OF X COORDINATE * REG H ENABLE,Y,0,X * REG DE CHARACTER DATA WORD ADDRESS ************************************************************ CHAR7 EQU $ PUSH H LHLD CHAR.GEN LOAD CHARACTER GENERATOR ADDRESS CALL INDIRECT POP H * LDA VER TEST FOR VERTICAL OR RAL HORIZONTAL CHARACTER PLOT. JC CHAR9 GO TO VERTICAL PLOT. * * HORIZONTAL CHARACTER PLOTTING * INX H INCREMENT X COORDINATE CHARH MOV A,L OUT DISCHAN*32+XCOORD OUTPUT LOWER 8 OF X MOV A,C OUT DISCHAN*32+YCOORD OUTPUT LOWER 8 OF Y MOV A,H ANI #1D CLEAR X OVERFLOW BIT INR A MOVES X BIT RIGHT 1 RAR MOVE WORD RIGHT ONE OUT DISCHAN*32+DISCON1 OUTPUT UPPER X,Y BITS DCR B DECREMENT COLUMN COUNT JNZ CHAR7 CHECK FOR CHAR. COMPLETE * LOCATE FOR NEXT CHARACTER. CHAR10 EQU $ MOV E,C SAVE LOWER 8 OF Y COORD. MOV A,H RRC RRC ANI 1 MOV D,A SAVE UPPER BIT OF Y COORD. MOV A,H ANI 1 MOV H,A SAVE UPPER X COORD. SHLD XREG XCHG SHLD YREG LDA FWD.REV TEST FOR FORWARD OR REVERSE ANA A CHARACTER PLOTTING. RZ FORWARD, GET NEXT CHARACTER. * LHLD YSAVE LOAD Y AND X XCHG COORDINATES FOR LHLD XSAVE FOR POSITIONING JMP OUTCOORD FOR REVERSE PLOTTING. * * VERTICAL CHARACTER PLOTTING. * CHAR9 EQU $ INR C INCREMENT Y COORD. JNZ CHARH JUMP IF NO OVERFLOW MOV A,H XRI #04 TOGGLE UPPER BIT OF Y MOV H,A SAVE UPPER BITS JMP CHARH ************************************************************************ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * S U B R O U T I N E S * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SIZE ONE CHARACTER GENERATOR * * THIS ROUTINE OUTPUTS TWO BYTES OF A 8 X 16 CHARACTER * TO THE DISPLAY. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TWICE XRA A SET ZERO FLAG CHAR.S1 EQU $ LDAX D LOAD BYTE OF CHARACTER DATA INX D INCREMENT CHARACTER ADDRESS OUT DISCHAN*32+DISDATA OUTPUT BYTE RAR OUT DISCHAN*32+DISDATA OUTPUT RAR OUT DISCHAN*32+DISDATA CHARACTER RAR OUT DISCHAN*32+DISDATA DATA RAR OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA RZ RETURN AFTER SECOND PASS JMP TWICE * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SIZE TWO CHARACTER GENERATOR * * THIS ROUTINE OUTPUTS TWO BYTES OF A 16 X 32 CHARACTER * TO THE DISPLAY. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TWICE1 XRA A SET ZERO FLAG CHAR.S2 EQU $ LDAX D LOAD CHARACTER DATA BYTE INX D INCREMENT DATA ADDRESS OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA RAR OUT DISCHAN*32+DISDATA OUT DISCHAN*32+DISDATA JNZ TWICE1 CHECK FOR SECOND PASS MOV A,B LOAD COLUMN COUNT RAR AND TEST FOR RC DCX D DECREMENT THE DATA DCX D POINTER RET * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DISPLAY TAB ROUTINE. * * THIS ROUTINE SET THE X AND Y REGISTERS TO TAB FOR * THE NEXT CHARACTER POSITION. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DISP.TAB EQU $ LHLD XREG LOAD CURRENT X XCHG AND SAVE IN DE LHLD X.PLOT LOAD X CHARACTER PLOT DAD D ADD TO CURRENT X CALL OUTX OUTPUT X COORDINATE. LHLD YREG LOAD CURREMT Y XCHG AND SAVE IN DE LHLD Y.PLOT LOAD Y CHARACTER PLOT DAD D ADD TO CURRENT Y JMP OUTY OUTPUT Y COORDINATE. * * * HORIZONTAL AND VERTICAL COORDINATE ADJUST ROUTINE * V.ADJ EQU $ LHLD YREG LOAD CURRENT Y COORDINATE CALL SIZE.ADJ AND ADJUST WITH CHARACTER SIZE. JMP OUTY OUTPUT Y COORDINATE. * H.ADJ EQU $ LHLD XREG LOAD CURRENT X COORDINATE CALL SIZE.ADJ AND ADJUST WITH CHARACTER SIZE. JMP OUTX OUTPUT X COORDINATE. * SIZE.ADJ EQU $ LDA SIZE LOAD CHARACTER SIZE CPI 08 AND TEST FOR SIZE 1. JZ S.ADJ.1 SIZE 1 , CONTINUE. MOV A,C LOAD LOWER BYTE OF ADJUST ADD A AND DOUBLE IT. MOV C,A * S.ADJ.1 EQU $ DAD B ADD ADJUST TO COORDINATE RET * * * * * * * * * * * * * * * * * * * * * * * INITIALIZE PLOTTING FLAG FOR HORIZONTAL, SIZE 0 * CHARACTERS IN THE FORWARD DIRECTION. * INIT.PLT EQU $ MVI L,#1A SET CHARACTER MODE CALL R.MODE AND WRITE BITS MVI L,00 SET CHAR. PLOT PARAMS * * * * * * * * * * * * * * * * * * * * * * * * * * * M.CCR AND CHARACTER PLOTTING PARAMETERS ARE SET IN ACCORDANCE * WITH THE CONTENTS OF HL REGISTERS. * * BIT FUNCTION * 1 1=VERTICAL, 0=HORIZONTAL * 2,3,4 CHARACTER MEMORY SELECTED, 0-7 * 5 UNUSED * 6 1=SIZE TWO CHARACTERS, 0=SIZE ONE CHARACTERS * 7 1=REVERSE, 0=FORWARD * 8 UNUSED * * * * * * * * * * * * * * * * * * * * * * * * * CCR EQU $ SHLD M.CCR STORE PARAMETERS MOV A,L * ANI 01 MASK HOR/VERT BIT ADI #0A ADD CONSTANT TO RUN LXI H,CHARESC THIS THRU CONTROL CALL CONTROL * LDA M.CCR LOAD FLAG BITS RRC ADD ROTATE TO CHAR SET BITS. ANI 07 MASK OFF CHAR SET BITS ADI #02 ADD CONSTANT TO RUN LXI H,CHARESC THIS THRU CONTROL AGAIN CALL CONTROL * LDA M.CCR LOAD UP BITS AGAIN RLC AND ROTATE RLC TO FORWARD/REVERSE BITS ANI 01 MASK FORWARD/REVERSE BIT ADI #0C ADD CONSTANT TO RUN LXI H,CHARESC THIS THRU CONTROL AGAIN CALL CONTROL * LDA M.CCR LOAD FLAG BITS RLC NOW ROTATE RLC TO THE RLC SIZE BIT ANI 01 MASK HIM OFF ADI #0E ADD CONSTANT TO RUN LXI H,CHARESC THIS THRU CONTROL AGAIN CALL CONTROL RET * LOAD TERMINAL OPERATING MODE INSTRUCTION * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CHARACTER PLOTTING CALCULATIONS. * * THIS SUBROUTINE CALCULATES THE VALUES TO PLOT CHARACTERS * AS TO HORIZONTAL, VERTICAL, FORWARD, REVERSE, AND SIZE. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CH.PLOT EQU $ MVI B,#FF LXI H,SIZE LOAD CHARACTER MOV A,M SIZE AND ADD INX H TO FORWARD/REVERSE ADD M TO SET DIRECTION OF PLOT. JNC CH.PLOT1 IF CARRY IS SET CMA COMPLIMENT RESULT FOR NEGATIVE. CH.PLOT1 EQU $ MOV C,A SAVE RESULT. INX H ANA M AND RESULT TO DETERMINE MOV E,A VALUE OF X AXIS PLOTTING. MOV D,B AND LOAD FOR STORING. JM CH.PLOT2 IF RESULT IS POSITIVE, INR D CLEAR UPPER BYTE. CH.PLOT2 EQU $ XCHG STORE THE RESULT SHLD X.PLOT FOR X AXIS XCHG CHARACTER PLOTTING. MOV A,C LOAD SIZE AND DIRECTION RESULT INX H ANA M AND RESULT TO DETERMINE MOV E,A VALUE OF Y AXIS PLOTTING, MOV D,B AND LOAD FOR STORE. JM CH.PLOT3 IF RESULT IS POSITIVE INR D CLEAR UPPER BYTE. CH.PLOT3 EQU $ XCHG STORE RESULT FOR SHLD Y.PLOT Y AXIS CHARACTER PLOTTING. RET * * THIS INSTRUCTION PERFORMS THE FOLLOWING FOUR FUNCTIONS * * 1. INHIBIT TOUCH PANEL IF INHIBIT BIT IS SET * 2. LOAD WORD COUNT IF WORD COUNT ENABLE BIT IS SET * 3. BULK ERASE IF BULK ERASE BIT IS SET * 4. LOAD MODE WORD * ************************************************************************ * * MODE SELECTION * * BIT 1 BULK ERASE * * BIT 3 BIT 2 * 0 0 ERASE WRITE CHARACTER BACKGROUND * 0 1 WRITE ERASE CHARACTER BACKGROUND * 1 0 ERASE NO OPERATION * 1 1 WRITE NO OPERATION * * BIT 6 BIT 5 BIT 4 * 0 0 0 MODE 0 POINT PLOT * 0 0 1 MODE 1 DRAW LINE * 0 1 0 MODE 2 LOAD MEMORY * 0 1 1 MODE 3 CHARACTER * 1 0 0 MODE 4 BLOCK ERASE * 1 0 1 MODE 5 USER PROGRAM * 1 1 0 MODE 6 USER PROGRAM * 1 1 1 MODE 7 USER PROGRAM * * BIT 7-13 WORD COUNT * * BIT 14 LOAD WORD COUNT * * BIT 15 INHIBIT * ************************************************************************ MODESET EQU $ MOV A,L ANI #07 OUT DISCHAN*32+DISCON2 OUTPUT DISPLAY CONTROL 2 ANI 06 SAVE WRITE ERASE BITS MOV B,A IN B REG. LDA D.CNTL2 LOAD DISPLAY CONTROL 2 ANI #60 AND MASK ORIENTATION BITS. ORA B ADD WRITE ERASE BITS STA D.CNTL2 AND STORE FOR CHARACTER GENERATOR * MVI A,#3E MASK MODE AND ANA L W/E BITS RRC STA M.MODE AND STORE. RET * * * * * * * * * * * * * * * * * * * * * * * * OUTX EQU $ MVI A,01 CHOP OFF UNWANTED ANA H BITS THAT WILL MOV H,A SCREW THINGS UP. SHLD XREG STORE NEW X COORDINATE. MOV A,L LOAD LOWER 8 BITS OUT DISCHAN*32+XCOORD ND OUTPUT TO DISPLAY. IN DISCHAN*32+XYREAD PUT UPPER BITS OF X AND Y ANI 02 MASK Y ORA H INCLUDE NEW X BIT ORI 04 SET LOAD ENABLE OUT DISCHAN*32+DISCON1 OUTPUT UPPER BITS OF X AND Y. RET RETURN TO CALLER * * * * * * * * * * * * * * * * * * * * * * * * * * SUBROUTINE TO OUTPUT Y COORDINATE TO THE DISPLAY. * * * * * * * * * * * * * * * * * * * * * * * * * OUTY EQU $ MVI A,01 CHOP OFF UNWANTED ANA H BITS THAT WILL MOV H,A SCREW THINGS UP. SHLD YREG STORE NEW Y COORDINATE. MOV A,L LOAD LOWER 8 BITS OUT DISCHAN*32+YCOORD ND OUTPUT TO DISPLAY. IN DISCHAN*32+XYREAD NPUT CURRENT UPPER BITS ANI 01 MASK X COORDINATE BIT RRC SHIFT IN ORA H NEW Y BIT RLC ORI 04 SET LOAD ENABLE BIT OUT DISCHAN*32+DISCON1 OUTPUT NEW UPPER BITS RET RETURN TO CALLER. * * * * * * * * * * * * OUTPUT X AND Y COORDINATES * Y COORDINATE DE REGISTER PAIR * X COORDINATE HL REGISTER PAIR * * * *@*@ * * * * * * * OUTCOORD EQU $ CALL OUTX SET X COORDINATE XCHG JMP OUTY SET Y COORDINATE * * * * * * * * * * * * USED TO CALL A ROUTINE WITH CONTENTS OF HL REGISTER * * * * * * * * * * * * INDIRECT EQU $ PCHL * *** * 1.0 GENERAL- * * RIST - RESIDENT DIAGNOSTIC FOR INFORMATION SYSTEMS * TERMINAL (IST) * * COPYRIGHT CONTROL DATA CORP., 1975 * * M.C. FEGELY * SUPAL ASSEMBLY LANGUAGE * FIELD DIAGNOSTIC * * 2.0 PURPOSE- * * THIS DIAGNOSTIC WILL VERIFY CORRECT OPERATION OF THE * SUB-MINI CONTROLLER (SMC) AND THE IST TERMINAL. THE * TESTING WILL PERFORM A COMMAND TEST * TEST THE DISPLAY INTERFACE, TEST THE * KEYBOARD AND TOUCH PANEL. * * 3.0 APPLICABLE DOCUMENTS * * 16031600 PROCESSOR MODULE SPECIFICATION * - IST DIAGNOSTIC PLAN * ARH750 - EXTERNAL REFERENCE SPECIFICATION - SUPAL * ASSEMBLER * - INTEL 8080 PROGRAMMING MANUAL * 16040600 EXTERNAL SPECIFICATION - INFORMATION * SYSTEMS TERMINAL (REV. C) * 62964500 QLIA - QUICKLOOK CONFIDENCE TEST FOR * THE SMC (SUB-MINI CONTROLLER) - ERS * * * 4.0 REQUIREMENTS * * 4.1 HARDWARE- * * IST CONFIGURATION: * * PROCESSOR MODULE * 16K RAM BOARD * ROM MODULE (6K) * DISPLAY INTERFACE * MAINTENANCE PANEL FOR EXECUTION SELECTION AND * DISPLAYING OF ERRORS * KEYBOARD/TOUCH PANNEL * * 4.2 SOFTWARE- * * THE DIAGNOSTIC WILL TEST THE HARDWARE OF THE IST * TERMINAL. IF AN ERROR OCCURS, THE ERROR * CODE WILL BE DISPLAYED ON THE * MAINENANCE PANEL LEDS. * * UPON SUCCESSFUL EXECUTION OF THE RESIDENT DIAGNOSTIC, * CONTROL WILL BE GIVEN TO THE CONTROLWARE. * * 4.3 ACCESORIES- * * NONE * * 4.4 TIME LIMIT * * EXECUTION TIME SHALL NOT EXCEED 1 MIN. EXCLUDING * THE MANUAL INTERVENTION SECTION (SEC. 4 - KEYBOARD/ * TOUCH PANEL TEST). * * 4.5 DETECTION/ISOLATION * * THE DETECTION LEVEL WILL BE 95 PER CENT. THE * ISOLATION WILL BE 90 PER CENT. * * 5.0 OPERATIONAL PROCEDURE- * * 5.1 LOADING- * * NO LOADING IS REQUIRED IN THAT THE DIAGNOSTIC * RESIDES IN ROM. * * 5.2 PARAMETERS- * * MAINTENANCE SWITCHES MAY BE SELECTED AS DESCRIBED * IN 5.4 (EXECUTION) BELOW. * * SWITCH SUMMARY * * SWITCH 1 OFF - EXECUTE DIAGNOSTIC * ON - BYPASS DIAGNOSTIC * * SWITCH 2 OFF - 300 BAUD * ON - 1200 BAUD * * SWITCH 3 OFF - BYPASS KYBD-TOUCH PANEL SECTION * ON - EXECUTE KYBD-TOUCH PANEL SECTION * * SWITCH 4 OFF - DO NOT LOOP DIAGNOSTIC * ON - LOOP ENTIRE DIAGNOSTIC * * SWITCH 5 OFF - CHECK KYBD ONLY * ON - CHECK KYBD AND TOUCH PANEL * * 5.3 SECTION DESCRIPTION INDEX- * * SECTION 1 COMMAND TEST * SECTION 3 DISPLAY INTERFACE TEST * SECTION 4 KEYBOARD/TOUCH PANEL TEST * * 5.4 EXECUTION- * * THERE ARE TWO (2) WAYS TO EXECUTE THE RESIDENT * DIAGNOSTIC: * 1) POWER-ON * 2) MASTER CLEAR * * TO BY-PASS THE RESIDENT TEST COMPLETLY, SET SWITCH 1 * ON THE MAINTENANCE SWITCHES BEFORE MASTER CLEAR. * * * TO EXECUTE THE KEYBOARD-TOUCH PANEL TEST, SET * SWITCHES 3,5 ON THE MAINTENANCE SWITCHES * SET SWITCH 3 ONLY TO BYPASS THE TOUCH PANEL * * 6.0 OPERATOR COMMUNICATION- * * 6.1 ERRORS AND RESPONSES- * * WHEN AN ERROR IS ENCOUNTERED, THE RESIDENT TEST * WILL EXECUTE A HALT INSTRUCTION. ERROR CODES WILL * BE DISPLAYED ON THE MAINTENANCE PANEL LEDS WHICH * WILL INDICATE WHICH BOARD IS BELIEVED TO BE BAD * VIA THE MOST SIGNIFICANT DIGIT OF THE ERROR CODE * DESCRIBED BELOW INDICATING THE LOCATION OF THE * BOARD BELIEVED TO BE BAD. * * OCTAL CODE FAILURE * ADDRESS * RANGE * * 30 COMMAND FAILURE * * * 42 TOUCH PANEL ERROR * * 70 DISPLAY INTERFACE ERROR * 71 KEYBOARD ERROR * * 77 INDICATES TERMINATION OF THE DIAGNOSTIC * *E * 7.0 DESCRIPTION * * 7.1 GENERAL * * THIS PROGRAM CONSISTS OF 3 SECTIONS OF * RESIDENT DIAGNOSTICS. THE TESTING * INCLUDES THE COMMAND REPERTOIRE, * DISPLAY INTERFACE TEST, KEYBOARD AND * TOUCH PANEL TESTS. * 7.2 SECTION 1 COMMAND TEST * * THIS SECTION WILL EXECUTE ALL OF THE COMMAND * REPERTOIRE OF THE SUB-MINI CONTROLLER EXCLUDING THE * EIN,DIN,RST,HLT INSTRUCTIONS. THE TESTING OF THE * INSTRUCTIONS IS BASIC AND DOES NOT DIAGNOSE THE * SETTING OR CLEARING OF ALL POSSIBLE FLAG CONDITIONS * FOR A PARTICULAR INSTRUCTION. * * ERROR CODES ARE: * 30 COMMAND FAILURE * *E * 7.3 SECTION 2 DISPLAY INTERFACE TEST * * THIS SECTION PERFORMS A BASIC CHECK ON THE DISPLAY * INTERFACE TEST. THE DISPLAY INTERFACE MODULE * CONTAINS TWO REGISTERS, ONE FOR THE X-COORDINATE * AND ONE FOR THE Y-COORDINATE. THESE REGISTERS CAN * BE LOADED, INCREMENTED AND DECREMENTED, AND * READ VIA ISSUING FUNCTION COMMANDS TO THE MODULE. * THE FOLLOWING TYPE OF CHECKS SHALL BE MADE IN THIS * SECTION CONSISTING OF THREE DISTINCT CONDITIONS: * * 1) LOAD X AND Y REGISTERS, READ BACK AND COMPARE * * OUTPUT - CH=4,DV=0,FN=7 (BULK ERASE, WRITE/ERASE) * * OUTPUT - ,FN=4 (X COOR.) * * OUTPUT - ,FN=5 (Y COOR.) * * OUTPUT - ,FN=6 (X/Y 2-8) * * INPUT - ,FN=0 (X COOR.) * * INPUT - ,FN=1 (Y COOR.) * * INPUT - ,FN=2 (X/Y 2-8) * ... CONTINUE THRU DATA TABLE - DEFINED IN SEC 2 * * * * * 2) INCREMENT/DECREMENT X,Y REGISTERS IN VECTOR MODE * * C * <................. * . .>. * . . . * . F . . * . . . . * D . . .E . B * .< . . * . . . * . . . * . . . * .................> * A * * * MOVE TO LOWER LEFT CORNER * * OUTPUT - CH=4,DV=0,FN=7 (BULK ERASE, WRITE/ERASE) * OUTPUT - ,FN=4 (X COOR. = 00) * OUTPUT - ,FN=5 (Y COOR. = 00) * * * A) OUTPUT - ,FN=6 (Y SHT VTR,X/Y 2-8,INC X, * VECTOR MODE) * * OUTPUT - ,FN=3 (DATA) VECTOR BIT (A=00) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * B) OUTPUT - ,FN=6 (X SHT VTR, INC Y, * VECTOR MODE) * * OUTPUT - ,FN=3 (DATA) VECTOR BIT (A=00) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * C) OUTPUT - ,FN=6 (Y SHT VTR, DEC X, * VECTOR MODE) * * OUTPUT - ,FN=3 (DATA) VECTOR BIT (A=00) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * D) OUTPUT - ,FN=6 (X SHT VTR, DEC Y, * VECTOR MODE) * * OUTPUT - ,FN=3 (DATA) VECTOR BIT (A=00) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * E) OUTPUT - ,FN=6 (Y SHT VTR,INC,X,INC Y, * VECTOR MODE) * * OUTPUT - ,FN=3 (DATA) VECTOR BIT (A=80) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * F) OUTPUT ,FN=6 (Y SHT VTR,DEC X,VTR MODE * DEC Y EVERY OTHER TIME) * * OUTPUT - ,FN=3 (DATA) VECTOR BIT (A=80) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * * * 3) INCREMENT/DECREMENT X,Y REGISTERS IN CHARACTER * MODE. * * * * MOVE TO LOWER LEFT * * OUTPUT - ,FN=4 (X COOR. = 00) * OUTPUT - ,FN=5 (Y COOR. = 00) * * A) OUTPUT - ,FN=6 (X/Y 2-8,INC X,CHAR MODE) * OUTPUT - ,FN=7 (BULK ERASE, 90 DEG ORNT, * WRITE/ERASE) * * OUTPUT - ,FN=3 (DATA) CHAR BIT (A=01) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * B) OUTPUT - ,FN=7 (NORMAL ORNT,WRITE/ERASE) * OUTPUT - ,FN=6 (INC Y, CHAR MODE) * * OUTPUT - ,FN=3 (DATA) CHAR BIT (A=01) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * C) OUTPUT - ,FN=7 (90 DEG ORNT,WRITE/ERASE) * OUTPUT - ,FN=6 (DEC X, CHAR MODE) * * OUTPUT - ,FN=3 (DATA) CHAR BIT (A=01) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * * D) OUTPUT - ,FN=7 (NORMAL ORNT,WRITE/ERASE) * OUTPUT - ,FN=6 (DEC Y, CHAR MODE) * * OUTPUT - ,FN=3 (DATA) CHAR BIT (A=01) * * INPUT - ,FN=0 (X REG) * COMPARE * * INPUT - ,FN=1 (Y REG) * COMPARE * * INPUT - ,FN=2 (X/Y 2-8) * COMPARE * ... CONTINUE TO END OF VECTOR * * ERROR CODES ARE: * 70 DISPLAY INTERFACE ERROR * * *E * 7.6 SECTION 4 - KEYBOARD/TOUCH PANEL TEST * * THIS SECTION PERFORMS A BASIC CHECK ON THE KEYBOARD * AND TOUCH PANEL BY INPUTTING THE CODE AFTER A * CHARACTER READY HAD BEEN DETECTED. THE CODE IS THEN * DISPLAYED ON THE LEDS LOCATED ON THE MAINTENANCE * PANEL. THIS SECTION OF THE TEST WILL BE BY-PASSED * IF SWITCH 3 OF THE MAINTENANCE SWITCHES IS OFF. * IF SWITCH 5 IS OFF ONLY THE KEYBOARD WILL BE CHECKED. * * * 1. CHECK IF SWITCH 3 IS SET ON MAINT PANEL * 2. IF NOT, THEN EXIT SECTION * 3. IF SWITCH 5 IS OFF CONTINUE AT STEP 7 * ELSE STATUS TOUCH PANEL * IF NO CHAR ROY, THEN CONTINUE AT STEP 7 * 4. ELSE INPUT TOUCH PANEL X,Y DATA * 5. DISPLAY SAME DATA VIA CONTROLWARE ON DISPLAY * 6. CONTINUE AT STEP 3 * 7. STATUS KEYBOARD * IF NO CHAR ROY, THEN CONTINUE AT STEP 3 * 8. ELSE INPUT KEYBOARD DATA * 9. DISPLAY KYEBOARD DATA AS TWO (2) HEX DIGITS VIA * CONTROLWARE ON DISPLAY * 10. IF KEYBOARD DATA IS A SHIFT/STOP CODE * THEN EXIT SECTION (EXIT DIAGNOSTIC) * 11. ELSE CONTINUE AT STEP 3 * * ERROR CODES ARE: * 42 TOUCH PANEL ERROR * 71 KEYBOARD ERROR * *E * 7.7 END OF DIAGNOSTIC * * CODE 77 IS DISPLAYED ON MAINTENANCE PANEL LEDS * INDICATING COMPLETION OF DIAGNOSTIC. * * CONTROL IS THEN GIVEN TO CONTROLWARE WHICH WILL * BEGIN BY INDICATING TERMIANL IS READY ON DISPLAY. * RST.SEC0 EQU $ IN RSF.PANL*32+PANLSWCH ANI RSM.EXIT CHECK FOR EXIT DIAG. JNZ RST.DONE SET, EXIT DIAGNOSTICS JMP RST.S000 DO ROM/RAM TESTS * RST.VXY VERIFY X,Y REGISTERS * * ENTRY BY CALL FROM SECTION THREE * * CALLS NONE * * ALTERS A,B,C REGISTERS * * EXIT BY RETURN TO CALLER * * ERRORS REPORTED * NONE RST.VXY SHLD RSV.SRAM SAVE HL XCHG SHLD RSV.SRAM+2 SAVE DE POP H GET RETURN ADDRESS POP D GET X COR POP B GET Y COR IN RSF.DISP*32+DISPXREG CMP E COMPARE X COR 0-7 JZ RST.VXY2 HLT ERROR HALT RST.VXY2 IN RSF.DISP*32+DISPYREG CMP C COMPARE Y COR 0-7 JZ RST.VXY4 HLT ERROR HALT RST.VXY4 PUSH B RESTORE Y PUSH D RESTORE X PUSH H RESTORE RETURN ADDRESS MOV A,B ANI 1 SAVE Y COR 2**8 RLC MOV B,A MOV A,D ANI 1 SAVE X COR 2**8 ORA B MOV B,A SAVE EXPECTED XY 2**8 LHLD RSV.SRAM+2 XCHG RESTORE DE LHLD RSV.SRAM RESTORE HL IN RSF.DISP*32+DISPXY28 ANI 3 CMP B COMPARE XY 2**8 RZ RETURN IF EQUAL HLT ERROR HALT RST.DATT DB #04,#00 DB #84,#01 DB #84,#02 DB #84,#04 DB #84,#08 DB #84,#10 DB #84,#20 DB #84,#40 DB #84,#80 DB #85,#00 DB #86,#00 DB #07,#FF DB #04,#00 DB #85,#55 DB #86,#AA DB #04,#00 RST.MSG DB #14,#22,#0B,#0D,#36,#1D,#19,#36,#1D,#0E,#1C,#1D RST.CON1 DB 255 RST.CON2 DB 1,0 RST.CON3 DB 255 RST.CON4 DB 0,0 RST.TPAL LXI H,40 OUTPUT X,Y = 1,15 LXI D,488 TO ALLIGN MVI C,#1F TOUCH PANEL CALL RST.OCHR LXI H,296 OUTPUT X,Y = 9,7 LXI D,232 MVI C,#97 CALL RST.OCHR LXI H,456 OUTPUT X,Y = 14,0 LXI D,8 MVI C,#E0 CALL RST.OCHR RET INDI.1 JMP INIT.PLT INDIRECT TO INITIALIZE CHARACTER PLOT. INDI.2 JMP OUTCOORD INDIRECT TO OUTPUT COORDINATES. INDI.3 JMP CHAREN INDIRECT TO CHARACTER GENERATOR. DB #00,#00,#00,#00 DB #00,#00,#00 EJECT ** *E * RST.SEC1 COMMAND TEST * * ENTRY CONTROL IS GIVEN TO SECTION ONE UPON * COMPLETION OF SECTION ZERO. * * CALLS NONE * * ALTERS ALL REGISTERS * * EXIT TO RST.SEC3 UPON COMPLETION * * ERRORS REPORTED (OCTAL CODE) * * 30 - COMMAND FAILURE RST.SEC1 MVI A,#18 OUT RSF.PANL*32+PANLDATA UT ERROR CODE FOR COMMAND FAIL MVI A,#55 A=55 MOV B,A LOAD ALL REGISTERS FROM A MOV C,A MOV D,A MOV E,A MOV H,A MOV L,A RLC A=AA ORA B A=FF XRA C A=AA ANA D A=00 SUB E A=AB XRI #AB A=00 INR H H=56 DCR L L=54 ADD H A=56 ADD L A=AA ADI #55 A=FF SUI #AA A=55 ORI #22 A=77 ANI #AA A=22 XRI #22 A=0 STC SET CARRY ACI #0E A=0F CMA A=F0 RRC A=78 CARRY=0 CMC CARRY=1 ADC B A=CE CMC CARRY=1 SBB B A=78 CMC CARRY=1 SBI #07 A=70 CMC CARRY=1 RAR A=B8 CARRY=0 RAL A=70 CARRY=1 NOP JC RST.S105 IF CARRY NOT SET REPORT ERROR * * ERROR 50 - COMMAND FAILURE * HLT ERROR HALT RST.S105 CPI #70 JZ RST.S110 HLT ERROR HALT RST.S110 MVI A,#EE STA RST.CON5 MVI B,#EE LXI H,RST.CON5+1 MOV M,B CMP M VERIFY B STORED CORRECTLY JZ RST.S112 HLT ERROR HALT RST.S112 LDA RST.CON5 CPI #EE VERIFY A STORED CORRECTLY JZ RST.S114 HLT ERROR HALT RST.S114 LXI B,RST.CON1 LXI H,RST.CON3 LXI SP,RST.STAK LDAX B CMP M JZ RST.S116 HLT ERROR HALT RST.S116 LHLD RST.CON1 LOAD HL SHLD RST.CON5 STORE HL INTO MEMORY PUSH H STORE HL INTO STACK LXI H,RST.STAK LOAD HL WITH STACK ADDRESS SPHL DCX SP DECREMENT SP DCX SP DECREMENT SP DCX SP DECREMENT SP INX SP INCREMENT SP POP D LOAD DE FROM STACK LDA RST.CON5 CMP E JZ RST.S118 HLT ERROR HALT RST.S118 LDA RST.CON5+1 CMP D JZ RST.S120 HLT ERROR HALT RST.S120 LXI H,#AAAA LOAD HL LXI D,#5555 LOAD DE PUSH D STORE DE INTO STACK XTHL EXCHANGE STACK AND HL POP D MOV A,D CPI #AA VERIFY EXCHANGE JZ RST.S122 HLT ERROR HALT RST.S122 MOV A,H CPI #55 VERIFY EXCHANGE JZ RST.S124 HLT ERROR HALT RST.S124 LHLD RST.CON2 LOAD HL FROM MEMORY HL=0001 LXI D,#0001 DAD D HL=0002 INX H HL=0003 MOV A,H CPI 0 VERIFY H=0 JZ RST.S126 HLT ERROR HALT RST.S126 MOV A,L CPI 3 VERIFY L=3 JZ RST.S128 HLT ERROR HALT RST.S128 LXI H,#0001 HL=0001 SHLD RST.CON6 STORE HL INTO MEMORY LXI H,RST.CON6 SET HL TO ADDRESS MVI A,0 ADD M A=1 STC ADC M A=3 INR M MEMORY = 2 SUB M A=1 DCR M DCR M MEMORY=0 STC SBB M A=0 ADI #0F A=0F ORA M A=0F MVI M,#01 MEMORY=1 ANA M A=1 XRA M A=0 CPI 0 VERIFY A = 0 JZ RST.SEC3 HLT ERROR HALT * EXIT SECTION ONE * RST.SEC3 DISPLAY INTERFACE TEST * * ENTRY CONTROL IS GIVEN TO SECTION THREE UPON * COMPLETION OF SECTION ONE * * CALLS RST.VXY VERIFY X,Y REGISTERS * * ALTERS ALL REGISTERS * * EXIT TO RST.SEC4 UPON COMPLETION * * ERRORS REPORTED (OCTAL CODE) * * 70 - DISPLAY INTERFACE ERROR RST.SEC3 MVI A,#38 ERROR CODE FOR DISPLAY TEST OUT RSF.PANL*32+PANLDATA * * CONDITION 1 * MVI A,#03 BULK ERASE, WRITE/ERASE OUT RSF.DISP*32+DISPCON2 LXI H,RST.DATT SET UP TABLE POINTER MVI E,16 SET UP COUNTER RST.S305 MOV B,M DO UNTIL COUNTER=0 INX H MOV C,M FORM X COR IN BC INX H LXI SP,RST.STAK SET STACK POINTER PUSH B SAVE Y COR IN STACK PUSH B SAVE X COR IN STACK MOV A,C OUT RSF.DISP*32+DISPXCOR TPUT XCOR 0-7 OUT RSF.DISP*32+DISPYCOR TPUT YCOR 0-7 MOV A,B ANI 1 SAVE XCOR 2**8 MOV B,A RLC ORA B ADI #04 FORM - ENABLE XY 2**8 LOAD OUT RSF.DISP*32+DISPCON1 CALL RST.VXY GO VERIFY XY DCR E UPDATE COUNTER JNZ RST.S305 END DO * * CONDITION 2 * MVI A,#03 BULK ERASE, WRITE/ERASE OUT RSF.DISP*32+DISPCON2 LXI H,0 PUSH H STORE Y COR PUSH H STORE X COR MVI A,#A4 VECTOR,Y=SHORT,INC X,LOAD XY OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S310 MVI A,0 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT INC X COMMAND POP D GET X COR INX D UPDATE PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S310 END DO MVI A,#80 VECTOR,X=SHORT,INC Y OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S315 MVI A,0 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT INC Y COMMAND POP D GET X COR POP B GET Y COR INX B MODIFY Y PUSH B SAVE Y PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S315 END DO MVI A,#A8 VECTOR,Y=SHORT,DEC X OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S320 MVI A,0 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT DEC X COMMAND POP D GET X COR DCX D MODIFY PUSH D SAVE CALL RST.VXY GO VERIFY XY DCX H MOV A,H ORA L JNZ RST.S320 END DO MVI A,#90 VECTOR,X=SHORT,DEC Y OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S325 MVI A,0 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT DEC Y COMMAND POP D GET X COR POP B GET Y COR DCX B MODIFY Y PUSH B SAVE Y PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S325 END DO MVI A,#A0 VECTOR,Y=SHORT,INC X,INC Y OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S330 MVI A,#80 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT INC X, INC Y COMMAND POP D GET X COR POP B GET Y COR INX D INX B PUSH B SAVE Y PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S330 END DO MVI A,#B8 VECTOR,Y=SHORT,DECX,(DEC Y) OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S335 MOV A,L DO UNTIL COUNTER=0 ANI 1 RRC FORM DATA OUTPUT CONTROL OUT RSF.DISP*32+DISPDATA POP D GET X COR POP B GET Y COR DCX D MODIFY X COR JNC RST.S340 DCX B CONDITIONALLY MODIFY Y RST.S340 PUSH B SAVE Y PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H MODIFY COUNTER MOV A,H ORA L JNZ RST.S335 END DO * * CONDITION 3 * MVI A,0 OUT RSF.DISP*32+DISPXCOR UT XCOR=0 OUT RSF.DISP*32+DISPYCOR UT YCOR=0 MVI A,#43 BULK ERASE, WRITE/ERASE, 90 DEG OUT RSF.DISP*32+DISPCON2 MVI A,#04 CHAR, INC X, LOAD XY 2**8 OUT RSF.DISP*32+DISPCON1 LXI H,0 PUSH H INIT. Y COR PUSH H INIT. X COR LXI H,511 SET UP COUNTER RST.S345 MVI A,1 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT INC X COMMAND POP D GET X COR INX D UPDATE PUSH D SAVE X COR CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S345 END DO MVI A,#62 WRITE/ERASE, NORMAL OUT RSF.DISP*32+DISPCON2 MVI A,#00 CHAR, INC Y OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S350 MVI A,1 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT INC Y COMMAND POP D GET X COR POP B GET Y COR INX B UPDATE Y PUSH B SAVE Y PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S350 END DO MVI A,#42 WRITE/ERASE, 90 DEG OUT RSF.DISP*32+DISPCON2 MVI A,#08 CHAR, DEC X OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S355 MVI A,1 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT DEC X COMMAND POP D GET X COR DCX D UPDATE PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S355 END DO MVI A,#62 WRITE/ERASE, NORMAL OUT RSF.DISP*32+DISPCON2 MVI A,#10 CHAR, DEC Y OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S360 MVI A,1 DO UNTIL COUNTER=0 OUT RSF.DISP*32+DISPDATA TPUT DEC Y COMMAND POP D GET X COR POP B GET Y COR DCX B MODIFY Y PUSH B SAVE Y PUSH D SAVE X CALL RST.VXY GO VERIFY XY DCX H UPDATE COUNTER MOV A,H ORA L JNZ RST.S360 END DO * EXIT SECTION THREE ** *E * RST.SEC4 KEYBOARD - TOUCH PANEL TEST * * ENTRY CONTROL IS GIVEN TO SECTION FOUR UPON * COMPLETION OF SECTION THREE * * CALLS RST.OCHR OUTPUT CHAR. TO CONTROLWARE * * ALTERS ALL REGISTERS * MODE FLAG IN CONTROLWARE * * EXIT TO RST.EXIT UPON COMPLETION * * ERRORS REPORTED * * 42 - TOUCH PANEL ERROR * 71 - KEYBOARD ERROR RST.SEC4 IN RSF.PANL*32+PANLSWCH ANI RSM.SEC4 CHECK FOR BYPASS OF SECTION JZ RST.EXIT IF NOT SET - BYPASS SECTION LXI SP,IST.STK INITIALIZE STACK POINTER. MVI A,0 OUTPUT X-YCORDS OUT RSF.DISP*32+DISPXCOR OUT RSF.DISP*32+DISPYCOR MVI A,#A4 VECTOR Y%SHORT LOAD XY 2**8 OUT RSF.DISP*32+DISPCON1 LXI H,511 SET UP COUNTER RST.S430 MVI A,#80 DO UNTIL COUNTER = 0 OUT RSF.DISP*32+DISPDATA C X - INC Y COMMAND DCX H MOV A,H ORA L JNZ RST.S430 END DO MVI A,0 OUT RSF.DISP*32+DISPXCOR MVI A,#FF OUT RSF.DISP*32+DISPYCOR MVI A,#B6 OUT RSF.DISP*32+DISPCON1 LXI H,511 RST.S440 MVI A,#80 OUT RSF.DISP*32+DISPDATA DCX H MOV A,H ORA L JNZ RST.S440 CALL INIT.PLT INITIALIZE FOR CHARACTER PLOT LXI H,208 LOAD X COORDINATE LXI D,80 LOAD Y COORDINATE. CALL OUTCOORD SET DISPLAY COORDINATES MVI D,12 LXI H,RST.MSG GET ADDRESS OF MSG RST.S402 PUSH H SAVE HL PUSH D SAVE DE MOV A,M GET NEXT CODE CALL RST.OUT OUTPUT TO FIRMWARE POP D RESTORE DE POP H RESTORE HL INX H UPDATE INDEX DCR D UPDATE COUNTER JNZ RST.S402 LOOP FOR COMPLETE TABLE CALL RST.TPAL RST.S404 IN RSF.PANL*32+PANLSWCH PUT SWITCHES ANI RSM.TOCH CHECK FOR TOUCH PANEL PRESENT JZ RST.S420 JUMP IF NOT RST.S405 MVI A,#22 OUTPUT TOUCH PANEL ERROR CODE OUT RSF.PANL*32+PANLDATA IN RSF.TOCH*32+TOCHSTAT PUT TOUCH PANEL STATUS ANI 1 CHECK FOR CHAR RDY JZ RST.S420 JUMP IF NOT IN RSF.TOCH*32+TOCHDATA PUT DATA (X,Y) MOV C,A SAVE DATA IN C LXI H,244 LXI D,32 CALL RST.OCHR GO TO OUTPUT SUBROUTINE MVI A,#1D CALL RST.OUT OUTPUT -T- FOR TOUCH PANEL JMP RST.S405 LOOP RST.S420 MVI A,#39 OUTPUT KYBD ERROR CODE OUT RSF.PANL*32+PANLDATA IN RSF.KYBD*32+KYBDSTAT PUT KYBD STATUS ANI 1 CHECK FOR CHAR RDY JZ RST.S404 JUMP IF NOT SET IN RSF.KYBD*32+KYBDDATA PUT DATA (KYBD CODE) CMA ANI #7F MOV C,A SAVE IN C CPI #3A CHECK FOR SHIFT-STOP JZ RST.EXIT IF MATCH EXIT SECTION LXI H,244 LXI D,32 CALL RST.OCHR GO TO OUTPUT SUBROUTINE MVI A,#14 CALL RST.OUT OUTPUT -K- FOR KYBD MOV A,C GET DATA JMP RST.S404 EJECT ** *E * RST.EXIT DIAGNOSTIC EXIT ROUTINE * * ENTRY BY JUMP FROM SECTION ZERO OR SECTION FOUR * * CALLS NONE * * ALTERS A REGISTER * * EXIT CONTROL IS GIVEN TO -START1- IN CONTROLWARE * * ERRORS REPORTED * NONE RST.EXIT IN RSF.PANL*32+PANLSWCH PUT SWITCHES ANI RSM.LOOP CHECK FOR LOOP OPTION JNZ RST.SEC0 LOOP IF SET RST.DONE MVI A,#3F OUTPUT TERMINATION CODE OUT RSF.PANL*32+PANLDATA IN RSF.PANL*32+PANLSWCH SWITCH SETTING ANI #02 JZ RST.HI NOT SET, 1200 BAUD MVI A,#3E SET, SO 300 BAUD JMP RST.BD RST.HI EQU * MVI A,#7E SET UP FOR 1200 RST.BD EQU * STA SC.OC LXI SP,IST.STK CALL INIT.PLT INITIALIZE CHAR. PLOT MVI A,0 STA M.HALT INITIALIZE SOME VARAIBLES STA M.STATUS MVI A,3 STA M.SBTYPE LXI H,M0CODE00 SHLD M.M0 * * CHECKSUM RAM * IF BAD, RELOAD AND JUMP TO ASCII INIT * OTHERWISE, CHECK MODE AND GO TO CORRESPONDING INIT * RAMCK EQU * MVI C,00 INITIALIZE SUM AND LXI H,#3FFF RAM MEMORY ADDRESS POINTER. LDA LWA+1 LOAD UPPER BITS FOR LWA CMP H AND TEST FOR VALUE. JC RST.LDR INCORRECT ADDRESS STORED. CS1 EQU * MOV A,C LOAD CHECKSUM RESULTS INX H INCREMENT MEMORY POINTER ADD M ADD BYTE TO CHECKSUM MOV C,A AND SAVE LDA LWA LOAD LOWER HALF OF LWA DCR A CMP L AND TEST. JNZ CS1 JUMP IF NOT END. MOV A,H TEST UPPER BITS OF LOADING CPI #5F ADDRESS FOR MAX. JZ RST.LDR ADDRESS TOO HIGH, LOAD. LDA LWA+1 LOAD UPPER HALF OF ADDR. CMP H AND TEST. JNZ CS1 JUMP IF NOT END. LDA CKSM LOAD CHECKSUM CMP C AND TEST AGAINST CAL. JNZ RST.LDR LOAD RAM IF NOT CORRECT. * * TEST FOR ASCII MODE OR PLATO * LDA MODE ANI #80 JZ A.INIT * * LXI H,IST.STK PLATO.1 EQU $ MVI M,00 INX H MVI A,#23 XRA H JNZ PLATO.1 LDA #34 STA M.TYPE JMP R.INIT EJECT * * RAM RESIDENT LOAD ROUTINE * RST.LDR EQU $ LDA SC.OC LOAD SERIAL CHAN. CONTROL OUT COMSTAT * INITIALIZE FOR LOAD ROUTINE. S100 XRA A STA SEQ1 STA SEQ2 STA A1 STA A3 STA FLAGREG STA CNTR STA CHAR STA CKSM CLEAR CHECKSUM IN RSF.PANL*32+PANLSWCH ANI #E0 GET LOAD NUMBER RLC FROM THE TOP THREE RLC SWITCH SETTINGS. RLC STA LDN LXI H,DISP4 LOAD MESSAGE STORE ADDRESS MVI M,SPACE INX H LOAD BLOCK MVI M,SPACE NUMBER DATA. INX H MVI M,SPACE INX H MVI M,SPACE INX H MVI M,ESC INX H MVI M,ASC0 INX H MVI M,ASCL LOAD INX H INX H L,N,N,CR INX H MVI M,CR MESSAGE. INX H MVI M,DLE LOAD DLE,EOT INX H MVI M,EOT INX H MVI M,NAK LOAD NAK,XXYY MESSAGE. MVI A,#40 STA A2 MVI L,#1B CALL R.MODE BULK ERASE, MODE 05 * * LXI H,SAVE * MVI A,#3A LOAD SHIFT STOP CODE * MOV M,A AND SEND FOUR TIMES * MVI B,4 TO TAKE TERMINAL OUT *S100A CALL OUTDATA OF PLATO MODE. * DCR B * JNZ S100A * S101 CALL S107 SEND LOAD REQUEST S101A LXI H,0000 INITIALIZE 30 SEC TIME-OUT. MVI B,#0F 30 SEC TIMEOUT S102 CALL INDATA JC S104 DAD D JNC S102 DCR B JZ S109 S103 JMP S102 S104 DAD D JNC S105 DCR B JZ S109 S105 LDA CHAR CPI SLASH TEST FOR / CODE. JNZ S102 D.LOOP INX H TIME DELAY MOV A,L ORA H JNZ D.LOOP LXI D,#00 DISP ',LOADING BLOCK', LXI H,#B8 CALL R.OUTX XCHG CALL R.OUTY MVI L,#1B CALL R.MODE BULK ERASE AND MODE 5 LXI H,DISP1 CALL R.CHARS CALL L.DISP DISPL BLOCK NO. S106 EQU * LDA FLAGREG ANI #01 JNZ A.INIT EOT FLAG SET, JUMP MVI A,#03 STA CNTR CALL S107 SEND LOAD REQUEST JNC TERLD LOADING TERMINATED JMP S200 S109 LDA FLAGREG ANI #01 JZ TERLD LDA CNTR ORA A JZ TERLD DCR A STA CNTR JMP E006 F000 EQU * LDA CNTR ORI #00 JZ TERLD DCR A STA CNTR LDA FLAGREG ANI #04 NAK FLAG JNZ C000 CALL S107 SEND LOAD REQUEST. JNC TERLD LOADING TERMINATED S200 EQU * DLE-STX MVI B,#0F 30 SEC TIMEOUT LXI H,#0000 S201 CALL INDATA JC S203 DAD D JNC S201 DCR B JZ F000 TIMEOUT, JUMP JMP S201 S203 DAD D JNC S204 DCR B JZ F000 S204 LDA CHAR S205 CPI DLE TEST FOR DLE CODE JNZ S201 S206 CALL INDATA JC S208 DAD D JNC S206 DCR B JZ F000 JMP S206 S208 DAD D JNC S209 DCR B JZ F000 S209 LDA CHAR CPI STX TEST FOR STX CODE JNZ S205 S210 XRA A STA CRC1 STA CRC2 STA CNTR STA FLAGREG B000 EQU * HEADER ROUTINE LXI H,SEQ1 MVI B,#06 MVI A,#02 LOAD DLE COUNT STA SAVE B001 CALL INDATA JNC B001 MOV C,A SAVE CHAR. CPI DLE TEST FOR DLE CODE JZ B004 B002 LDA SAVE GET DLE COUNT ORA A AND TEST FOR ZERO. JNZ B005 MOV C,M LDA CHAR CMP C JNZ C000 B003 CALL CRCGEN DCR B JZ D000 INX H JMP B001 B004 CALL INDATA JNC B004 MOV C,A SAVE CHAR. CPI DLE TEST FOR DLE CODE JZ B002 JMP E000 B005 MOV A,M CMP C JNZ B006 LDA SAVE GET DLE COUNT DCR A AND DECREMENT IT. STA SAVE JMP B003 B006 EQU * JNC S201 C000 EQU * NAK ARQ LXI H,OUT4+1 LDA SEQ1 MOV M,A CMA MOV D,A INX H LDA SEQ2 MOV M,A CMA INX H MOV M,D INX H MOV M,A LXI H,OUT4 MVI B,#05 C001 CALL OUTDATA JNC TERLD INX H DCR B JNZ C001 LDA FLAGREG ANI #04 JNZ C002 MVI A,#02 STA CNTR LDA FLAGREG ORI #04 STA FLAGREG C002 JMP S200 EJECT * * LOAD RAM RESIDENT DATA * B REG. BYTE COUNT * HL REG. DATA STORE ADDR. * D000 EQU * DATA SECTION LDA A3 MOV L,A LDA A2 MOV H,A XRA A MOV B,A CLEAR BYTE COUNTER STA CNTR D001 CALL INDATA JNC D001 CPI DLE TEST FOR DLE CODE JZ D003 D002 MOV A,B CPI #F0 JZ C000 LDA CHAR MOV M,A LDA CKSM LOAD CHECKSUM ADD M AND ADD LAST BYTE STA CKSM AND SAVE. CALL CRCGEN INX H SHLD LWA SAVE LAST STORE ADDRESS INR B LDA CNTR INR A STA CNTR JMP D001 D003 CALL INDATA JNC D003 CPI DLE TEST FOR DLE CODE JNZ D004 JUMP IF NOT DLE INR B ELSE INC. BYTE COUNT. JMP D002 D004 INX H INC. STORE ADDRESS EJECT E000 EQU * ETB/ETX DETECTION CPI ETB TEST FOR ETB CODE JNZ E005 MVI A,#02 SET ETB FLAG STA FLAGREG E001 CALL CRCGEN DO CRC CALCULATION * * TEST CRC CALCULATION WITH CRC RECEIVED * E001A CALL INDATA JNC E001A LXI H,CRC1 LOAD ADDRES OF CRC CMP M AND TEST AGAINST REC. JNZ C000 JUMP IF BAD CRC E001B CALL INDATA JNC E001B LXI H,CRC2 LOAD ADDRESS OF CRC CMP M AND TEST AGAINST REC JNZ C000 JUMP IF BAD CRC LDA CNTR LXI H,A3 ADD M MOV M,A JNC E002 DCX H INR M E002 EQU * INCREMENT DATA STORE ADDR. LDA SEQ2 ADI #01 STA SEQ2 JNC E003 LDA SEQ1 ADI #01 STA SEQ1 E003 LDA FLAGREG ANI #02 TEST FOR ETB FLAG JZ E003A CALL L.DISP DISP LOADING BLOCK JMP S200 E003A LDA FLAGREG ORI #01 STA FLAGREG MVI A,#02 STA CNTR E006 LXI H,OUT3 OUTPUT ',DLE EOT', MVI B,#02 E004 CALL OUTDATA JNC TERLD INX H DCR B JNZ E004 JMP E007 E005 CPI ETX TEST FOR ETX CODE JZ E001 CPI STX TEST FOR STX CODE# JNZ C000 JMP S210 E007 EQU * MVI L,#1B DO BULK ERASE, CALL R.MODE AND SET MODE 5. JMP S101A RETURN TO LOOK FOR SLASHES TERLD EQU * LXI D,#00 LXI H,#B8 CALL R.OUTX OUTPUT COORDINATES XCHG TO THE DISPLAY. CALL R.OUTY MVI L,#1B DO BULK ERASE, CALL R.MODE AND SET MODE 5. LXI H,DISP2 DISPLAY '7SYSTEM CALL R.CHARS NOT ESTABLISHED'7. JMP S101 EJECT S107 LXI H,OUT1 OUTPUT ',LNN ', INX H LDA LDN CALL CONVERT CONVERT HEX TO ASCII LXI H,OUT1 MVI B,#04 S108 CALL OUTDATA RNC ERROR, TERMINATE LOADING INX H DCR B JNZ S108 RET * * INPUT COMM. DATA * DATA INPUT IS DONE USING COMM. STATUS. * INDATA EQU * LXI D,#0000 IN1 INX D MVI A,#0A SUB D RZ IN COMSTAT ANI #04 TEST FOR CHAR. RDY. STATUS JZ IN1 IN COMDATA STA CHAR STC SET '7RECEIVED DATA'7 FLAG. RET OUTDATA EQU * LXI D,#0A00 O100 DCX D MOV A,D ORA E RZ IN COMSTAT ANI #02 TEST FOR CHAR. REQ. STATUS JZ O100 MOV A,M OUT COMDATA STC SET DATA TRANSMITTED FLAG. RET * * CODE CONVERTION ROUTINE * A BINARY BYTE IS CONVERTED TO TWO * ASCII CHARACTERS. * CONVERT EQU * MOV B,A RAR RAR RAR RAR ANI #0F CONVERT LOWER 4 BITS CALL C.CON BINARY TO ASCII MOV M,A INX H MOV A,B ANI #0F CONVERT UPPER 4 BITS CALL C.CON MOV M,A RET * * ENTRY LOWER FOUR BITS OF A IS HEX CODE * EXIT A REG IS ASCII EQUIVALENT * C REG. IS CHANGED * C.CON EQU * BINARY TO ASCII MOV C,A SUI #09 JZ CON01 JP CON02 CON01 MOV A,C ADI #30 JMP CON03 CON02 MOV A,C ADI #37 CON03 JPE CON04 XRI #80 CON04 RET * * CRC GENERATOR * THE POLYNOMIAL DIVISOR IS * X**16+X**15+X**2+1 * CRCGEN EQU * LDA CRC1 MOV C,A LDA CHAR XRA C MOV C,A RAR ANI #7F XRA C MOV C,A RAR RAR XRA C MOV D,A RAR RAR RAR RAR XRA D ANI #03 MOV D,A MOV A,C RLC RLC MOV E,A ANI #FC ORA D MOV D,A MOV A,E RLC ANI #06 MOV E,A MOV A,D RAR MOV A,E RAR MOV C,A LDA CRC2 XRA C STA CRC1 MOV A,D STA CRC2 RET EJECT L.DISP EQU * DISPL LOADING BLOCK LXI D,#00 LXI H,#0120 CALL R.OUTX OUTPUT COORDINATES XCHG TO THE DISPLAY. CALL R.OUTY LXI H,DISP4 LDA SEQ1 CALL CONVERT CONVERT HEX TO ASCII INX H LDA SEQ2 CALL CONVERT CONVERT HEX TO ASCII LXI H,DISP4 CALL R.CHARS RET SPACE 6 BSSZ #0BF9+START-* * * ROM CHECKSUM TABLE * RST.CHP0 BSSZ 1 ROM 0 CHECKSUM RST.CHP1 BSSZ 1 ROM 1 CHECKSUM RST.CHP2 BSSZ 1 ROM 2 CHECKSUM RST.CHP3 BSSZ 1 ROM 3 CHECKSUM RST.CHP4 BSSZ 1 ROM 4 CHECKSUM RST.CHP5 BSSZ 1 ROM 5 CHECKSUM RST.CKSM BSSZ 1 ROM TABLE CHECKSUM * * * * * * * * * * * * * * * 'R'O'M 'CHECKSUM AND 'R'A'M 'TESTS * * 'THIS SECTION WILL CHECKSUM 6'K OF 'R'O'M WHICH INCLUDES * LOADER, DIAGNOSTIC AND CHARACTER GENERATORS. 'THE * CHECKSUM IS GENERATED AS FOLLOWS'; STARTING WITH THE * HIGHEST 'R'O'M ADDRESS AND THE 'A REGISTER EQUAL TO ZERO * AN EXCLUSIVE-OR BETWEEN THE CONTENTS OF MEMORY AND * THE A REGISTER WILL BE PERFORMED. 'THE RESULT IS THEN * LEFT-SHIFTED END-AROUND. 'THE 'R'O'M ADDRESS IS DECREMENTED * AND THE PROCEDURE CONTINUES UNTIL A CHIP * BOUNDARY IS REACHED. 'THE RESULTING CHECKSUM IS * VERIFIED AGAINST A TABLE OF EXPECTED CHECKSUM * BYTES. 'THIS PROCEDURE IS REPEATED FOR ALL SIX * CHIPS. * * 'THE RAM MEMORY TEST WILL TEST A 2000H TO 3000H * AND 4000H TO 8000H * * 'ERROR CODES ARE'; * 20 ROM FAILURE - CHIP 0 * 21 ROM FAILURE - CHIP 1 * 22 COMMAND/ROM FAILURE - CHIP 2 * 23 ROM FAILURE - CHIP 3 * 24 ROM FAILURE - CHIP 4 * 25 ROM FAILURE - CHIP 5 * 26 COMMAND/RAM FAILURE * * * * * * * * * * * * * * * RST.S000 EQU * MVI A,#12 ERROR CODE FOR CHIP 2 OUT RSF.PANL*32+PANLDATA LXI H,RST.CHP5 SET HL TO ADDR OF CHECKSUM TABLE MVI D,6 MVI A,0 RST.S002 EQU * XRA M DO UNTIL CHKSUM TABLE IS CHECKSUMMED RLC DCX H DCR D JNZ RST.S002 MOV C,A LDA RST.CKSM GET EXPECTED RESULT CMP C COMPARE JZ RST.S004 JUMP IF CORRECT HLT RST.S004 EQU * LXI H,RSV.HROM SET HL TO FIRST ADR. TO CHECKSUM LXI D,RSV.ROML SET DE TO LENGTH OF CHECKSUM LXI SP,RST.CHP5-1 SET SP TO EXPECTED CHECKSUM RST.S005 EQU * MOV A,H ANI #1C RRC RRC FORM NUMBER OF CURRENT CHIP ORI #10 FORM ERROR CODE OUT RSF.PANL*32+PANLDATA OUTPUT ERROR CODE MVI C,0 ZERO PARTIAL RESULT RST.S010 EQU * MOV A,C DO UNTIL CURRENT CHIP IS DONE XRA M CHECKSUM NEXT BYTE RLC MOV C,A SAVE PARTIAL RESULT DCX H UPDATE INDEX DCX D UPDATE COUNTER MOV A,D CHECK FOR CHIP BOUNDARY ANI #03 ORA E JNZ RST.S010 END DO MOV A,C GET ACTUAL CHECK SUM POP B GET EXPECTED CHECKSUM IN B DCX SP DCX SP MODIFY SP FOR NEXT CHIP DCX SP CMP B JZ RST.S015 * * ERROR 2X - CHECKSUM ERROR ON CHIP X * HLT * RST.S015 EQU * MOV A,D END IF NEXT CHIP = 2 CPI #0C JNZ RST.S016 DCX D DCX D THEN UPDATE DE AND HL TO SKIP DCX D OVER CHECKSUMMING LAST DCX D 4 LOCATIONS OF CHIP 2 DCX D DCX D DCX D DCX H DCX H DCX H DCX H DCX H DCX H DCX H RST.S016 EQU * MOV A,D END IF ORA E CHECK FOR COUNT = 0 JNZ RST.S005 * * 'R'A'M CHECK * MVI A,#16 OUT RSF.PANL*32+PANLDATA OUTPUT ERROR CODE MVI B,#55 LOAD DATA PATTERN RST.S030 EQU * LXI H,#2000 STARTING ADDRESS LXI D,#1000 LENGTH RST.S020 EQU * MOV M,B MOV A,M CMP B JNZ RST.S050 JUMP IF ERROR INX H DCX D MOV A,D ORA E JNZ RST.S020 REPEAT IF NOT DONE ALL BYTES MOV A,H XRI #80 JZ RST.S025 IF DONE HL = 8000H LXI H,#4000 LXI D,#4000 JMP RST.S020 RST.S025 EQU * LDA #7FFF XRI #AA JZ RST.SEC1 MVI B,#AA JMP RST.S030 RST.S050 EQU * HLT ERROR 26 EJECT BSSZ #0D00-*+START ** *E * RST.OCHR DISPLAY CHAR ON DISPLAY VIA CONTROLWARE * * ENTRY BY CALL FROM SECTION FOUR * * CALLS CHAREN CONTROLWARE ENTRY POINT * * ALTERS MEMSEL FLAG IN CONTROLWARE * * EXIT BY RETURN TO CALLER * * ERRORS REPORTED * NONE RST.OCHR PUSH B SAVE BC CALL OUTCOORD SET DISPLAY COORDINATES MOV A,C GET CHAR TO OUTPUT RRC RRC RRC RRC ANI #0F SAVE UPPER DIGIT CALL RST.OUT GO TO COMMON CODE POP B RESTORE BC PUSH B MOV A,C ANI #0F SAVE LOWER DIGIT CALL RST.OUT POP B RESTORE BC RET RETURN TO CALLER RST.OUT EQU $ LHLD M0ADR LOAD ADDRESS OF M0 SHLD MEMSEL CHARACTER SET. CPI #0A JC RST.OUT5 JUMP IF 0-9 CPI #36 JNZ RST.OUT3 XRA A SET TO 00 FOR SPACE JMP RST.OUT4 RST.OUT3 EQU $ ADI #17 RST.OUT4 EQU $ CALL CHAREN CALL CHARACTER GENERATOR RET RETURN TO CALLER RST.OUT5 EQU $ ADI #10 CALL CHAREN CALL CHARACTER GENERATOR RET RETURN TO CALLER RSV.HROM EQU #17FF LWA OF ROM RSV.ROML EQU #1800 LENGTH OF ROM RSV.RAML EQU #1000 LENGTH OF 4K RAM RSV.SRAM EQU #2000 FWA OF RAM RST.STAK EQU #205D RST.CON5 EQU #2055 RST.CON6 EQU #2056 RSM.EXIT EQU #01 RSM.RAM EQU #02 RSM.SEC4 EQU #04 RSM.LOOP EQU #08 RSM.TOCH EQU #10 RSM.CCLR EQU #02 RSM.CSET EQU #D7 RSF.PANL EQU 0 RSF.COMM EQU 1 RSF.KYBD EQU 2 RSF.TOCH EQU 3 RSF.DISP EQU 4 COMMDAT1 EQU 0 COMMDAT2 EQU 1 COMMDAT3 EQU 2 COMMCONT EQU 2 COMMSTAT EQU 3 KYBDCONT EQU 0 KYBDSTAT EQU 1 KYBDDATA EQU 2 TOCHCONT EQU 0 TOCHSTAT EQU 1 TOCHDATA EQU 0 DISPDATA EQU 3 DISPXCOR EQU 4 DISPYCOR EQU 5 DISPCON1 EQU 6 DISPCON2 EQU 7 DISPXREG EQU 0 DISPYREG EQU 1 DISPXY28 EQU 2 PANLDATA EQU #10 PANLSWCH EQU #11 * EQUATES USED FOR LOADER CONT1 EQU #A1 COMSTAT EQU #E3 COMDATA EQU #E2 DUMPY EQU #00 ETX EQU #03 ETX CODE ETB EQU #17 ETB CODE ESC EQU #1B ESCAPE CODE SPACE EQU #20 SPACE CODE DLE EQU #90 DLE CODE STX EQU #82 STX CODE EOT EQU #84 EOT CODE CR EQU #8D CR CODE NAK EQU #95 NAK CODE ASCL EQU #CC ASCII L ASC0 EQU #30 ASCII 0 SLASH EQU #AF / CODE EJECT FIX EQU * BSSZ #0DAB-*+START * * LOADER DISPLAY MESSAGES * SPACE 2 DISP3 EQU * DB #4C,#4F,#41,#44 L O A D DB #49,#4E,#47,#20 I N G DB #44,#4F,#4E,#45 D O N E DB #1B,#30 DISP2 EQU * DB #4C,#4F,#41,#44 'L 'O 'A 'D DB #49,#4E,#47,#20 'I 'N 'G SP DB #46,#41,#49,#4C 'F 'A 'I 'L DB #55,#52,#45,#20 'U 'R 'E SP DB #1B,#30 DISP1 EQU * DB #4C,#4F,#41,#44 L O A D DB #49,#4E,#47,#20 I N G DB #42,#4C,#4B,#20 B L K DB #20,#1B,#30 EJECT * * PLATO M0 CHARACTER SET * M0CODE00 DB #00,#00,#00,#00 SPACE DB #00,#00,#00,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE01 DB #00,#00,#00,#00 EXCLAMATION MARK DB #00,#00,#90,#1F DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE02 DB #00,#00,#00,#00 DOUBLE QUOTES DB #00,#1C,#00,#00 DB #00,#1C,#00,#00 DB #00,#00,#00,#00 M0CODE03 DB #00,#05,#00,#05 NUMBER SIGN DB #C0,#1F,#00,#05 DB #C0,#1F,#00,#05 DB #00,#05,#00,#00 M0CODE04 DB #40,#06,#20,#09 DOLLAR SIGN DB #20,#09,#F0,#1F DB #20,#09,#20,#09 DB #C0,#04,#00,#00 M0CODE05 DB #20,#0C,#40,#12 PERCENT SIGN DB #80,#0C,#00,#01 DB #60,#02,#90,#04 DB #60,#08,#00,#00 M0CODE06 DB #E0,#00,#10,#0D AMPER SIGN DB #10,#13,#90,#0C DB #60,#00,#60,#00 DB #90,#01,#00,#00 M0CODE07 DB #00,#00,#00,#00 SINGLE QUOTE DB #00,#00,#00,#1C DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE08 DB #00,#00,#00,#00 LEFT PAREN DB #00,#00,#00,#00 DB #E0,#07,#10,#08 DB #08,#10,#00,#00 M0CODE09 DB #08,#10,#10,#08 RIGHT PAREN DB #E0,#07,#00,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE0A DB #00,#00,#40,#02 ASTERISK DB #80,#01,#60,#06 DB #80,#01,#40,#02 DB #00,#00,#00,#00 M0CODE0B DB #00,#00,#80,#00 PLUS DB #80,#00,#E0,#03 DB #80,#00,#80,#00 DB #00,#00,#00,#00 M0CODE0C DB #00,#00,#00,#00 COMMA DB #34,#00,#38,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE0D DB #00,#00,#80,#00 MINUS DB #80,#00,#80,#00 DB #80,#00,#80,#00 DB #00,#00,#00,#00 M0CODE0E DB #00,#00,#00,#00 PERIOD DB #30,#00,#30,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE0F DB #10,#00,#20,#00 SLASH DB #40,#00,#80,#00 DB #00,#01,#00,#02 DB #00,#04,#00,#00 M0CODE10 DB #10,#00,#E0,#07 NUMERAL ZERO DB #50,#08,#90,#09 DB #10,#0A,#E0,#07 DB #00,#08,#00,#00 M0CODE11 DB #00,#00,#00,#00 NUMERAL ONE DB #10,#04,#F0,#0F DB #10,#00,#00,#00 DB #00,#00,#00,#00 M0CODE12 DB #00,#00,#30,#04 NUMERAL TWO DB #50,#08,#90,#08 DB #10,#09,#10,#06 DB #00,#00,#00,#00 M0CODE13 DB #00,#00,#20,#04 NUMERAL THREE DB #10,#08,#10,#09 DB #10,#09,#E0,#06 DB #00,#00,#00,#00 M0CODE14 DB #00,#00,#80,#00 NUMERAL FOUR DB #80,#01,#80,#02 DB #80,#04,#F0,#0F DB #80,#00,#00,#00 M0CODE15 DB #00,#00,#10,#0F NUMERAL FIVE DB #10,#09,#10,#09 DB #20,#09,#C0,#08 DB #00,#00,#00,#00 M0CODE16 DB #00,#00,#E0,#03 NUMERAL SIX DB #10,#05,#10,#09 DB #10,#09,#E0,#00 DB #00,#00,#00,#00 M0CODE17 DB #00,#00,#00,#08 NUMERAL SEVEN DB #30,#08,#C0,#08 DB #00,#0B,#00,#0C DB #00,#00,#00,#00 M0CODE18 DB #00,#00,#E0,#06 NUMERAL EIGHT DB #10,#09,#10,#09 DB #10,#09,#E0,#06 DB #00,#00,#00,#00 M0CODE19 DB #00,#00,#00,#07 NUMERAL NINE DB #90,#08,#90,#08 DB #A0,#08,#C0,#07 DB #00,#00,#00,#00 M0CODE1A DB #00,#00,#00,#00 COLON DB #30,#03,#30,#03 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE1B DB #00,#00,#00,#00 SEMICOLON DB #34,#03,#38,#03 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE1C DB #00,#00,#80,#00 LESS THAN DB #40,#01,#20,#02 DB #10,#04,#00,#00 DB #00,#00,#00,#00 M0CODE1D DB #00,#00,#40,#01 EQUALS DB #40,#01,#40,#01 DB #40,#01,#40,#01 DB #00,#00,#00,#00 M0CODE1E DB #00,#00,#00,#00 GREATER THAN DB #10,#04,#20,#02 DB #40,#01,#80,#00 DB #00,#00,#00,#00 M0CODE1F DB #00,#00,#00,#0C QUESTION MARK DB #00,#10,#D0,#10 DB #00,#11,#00,#0E DB #00,#00,#00,#00 M0CODE20 DB #E0,#01,#10,#02 COMMERCIAL AT DB #C8,#04,#28,#05 DB #E8,#05,#20,#02 DB #C0,#01,#00,#00 M0CODE21 DB #F0,#07,#00,#09 UPPER CASE A DB #00,#11,#00,#11 DB #00,#11,#00,#09 DB #F0,#07,#00,#00 M0CODE22 DB #F0,#1F,#10,#12 UPPER CASE B DB #10,#12,#10,#12 DB #10,#12,#10,#0E DB #E0,#01,#00,#00 M0CODE23 DB #C0,#07,#20,#08 UPPER CASE C DB #10,#10,#10,#10 DB #10,#10,#10,#10 DB #20,#08,#00,#00 M0CODE24 DB #F0,#1F,#10,#10 UPPER CASE D DB #10,#10,#10,#10 DB #10,#10,#20,#08 DB #C0,#07,#00,#00 M0CODE25 DB #F0,#1F,#10,#11 UPPER CASE E DB #10,#11,#10,#11 DB #10,#10,#10,#10 DB #10,#10,#00,#00 M0CODE26 DB #F0,#1F,#00,#11 UPPER CASE F DB #00,#11,#00,#11 DB #00,#10,#00,#10 DB #00,#10,#00,#00 M0CODE27 DB #C0,#07,#20,#08 UPPER CASE G DB #10,#10,#10,#10 DB #90,#10,#90,#10 DB #E0,#08,#00,#00 M0CODE28 DB #F0,#1F,#00,#01 UPPER CASE H DB #00,#01,#00,#01 DB #00,#01,#00,#01 DB #F0,#1F,#00,#00 M0CODE29 DB #00,#00,#10,#10 UPPER CASE I DB #10,#10,#F0,#1F DB #10,#10,#10,#10 DB #00,#00,#00,#00 M0CODE2A DB #20,#00,#10,#00 UPPER CASE J DB #10,#10,#10,#10 DB #E0,#1F,#00,#10 DB #00,#10,#00,#00 M0CODE2B DB #F0,#1F,#80,#00 UPPER CASE K DB #00,#01,#80,#02 DB #40,#04,#20,#08 DB #10,#10,#00,#00 M0CODE2C DB #F0,#1F,#10,#00 UPPER CASE L DB #10,#00,#10,#00 DB #10,#00,#10,#00 DB #10,#00,#00,#00 M0CODE2D DB #F0,#1F,#00,#08 UPPER CASE M DB #00,#04,#00,#02 DB #00,#04,#00,#08 DB #F0,#1F,#00,#00 M0CODE2E DB #F0,#1F,#00,#08 UPPER CASE N DB #00,#06,#00,#01 DB #C0,#00,#20,#00 DB #F0,#1F,#00,#00 M0CODE2F DB #C0,#07,#20,#08 UPPER CASE O DB #10,#10,#10,#10 DB #10,#10,#20,#08 DB #C0,#07,#00,#00 M0CODE30 DB #F0,#1F,#00,#11 UPPER CASE P DB #00,#11,#00,#11 DB #00,#11,#00,#11 DB #00,#0E,#00,#00 M0CODE31 DB #C0,#07,#20,#08 UPPER CASE Q DB #10,#10,#18,#10 DB #14,#10,#24,#08 DB #C0,#07,#00,#00 M0CODE32 DB #F0,#1F,#00,#11 UPPER CASE R DB #00,#11,#80,#11 DB #40,#11,#20,#11 DB #10,#0E,#00,#00 M0CODE33 DB #20,#0E,#10,#11 UPPER CASE S DB #10,#11,#10,#11 DB #10,#11,#10,#11 DB #E0,#08,#00,#00 M0CODE34 DB #00,#10,#00,#10 UPPER CASE T DB #00,#10,#F0,#1F DB #00,#10,#00,#10 DB #00,#10,#00,#00 M0CODE35 DB #E0,#1F,#10,#00 UPPER CASE U DB #10,#00,#10,#00 DB #10,#00,#10,#00 DB #E0,#1F,#00,#00 M0CODE36 DB #00,#18,#00,#07 UPPER CASE V DB #C0,#00,#30,#00 DB #C0,#00,#00,#07 DB #00,#18,#00,#00 M0CODE37 DB #E0,#1F,#10,#00 UPPER CASE W DB #20,#00,#C0,#03 DB #20,#00,#10,#00 DB #E0,#1F,#00,#00 M0CODE38 DB #30,#18,#40,#04 UPPER CASE X DB #80,#02,#00,#01 DB #80,#02,#40,#04 DB #30,#18,#00,#00 M0CODE39 DB #00,#18,#00,#04 UPPER CASE Y DB #00,#02,#F0,#01 DB #00,#02,#00,#04 DB #00,#18,#00,#00 M0CODE3A DB #30,#18,#50,#10 UPPER CASE Z DB #90,#10,#10,#11 DB #10,#12,#10,#14 DB #30,#18,#00,#00 M0CODE3B DB #00,#00,#00,#00 LEFT BRACKET DB #00,#00,#00,#00 DB #F8,#1F,08,#10 DB 08,#10,00,00 M0CODE3C DB #00,#04,#00,#02 REVERSE SLASH DB #00,#01,#80,#00 DB #40,#00,#20,#00 DB #10,#00,#00,#00 M0CODE3D DB #08,#10,#08,#10 RIGHT BRACKET DB #F8,#1F,#00,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE3E DB #00,#00,#00,#10 HAT DB #00,#20,#00,#40 DB #00,#20,#00,#10 DB #00,#00,#00,#00 M0CODE3F DB #04,#00,#04,#00 UNDERLINE DB #04,#00,#04,#00 DB #04,#00,#04,#00 DB #04,#00,#00,#00 M0CODE40 DB #00,#00,#00,#40 SINGLE LEFT QUOTE DB #00,#20,#00,#10 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE41 DB #60,#00,#90,#02 LOWER CASE A DB #90,#02,#90,#02 DB #90,#02,#E0,#01 DB #10,#00,#00,#00 M0CODE42 DB #F0,#1F,#20,#01 LOWER CASE B DB #10,#02,#10,#02 DB #10,#02,#20,#01 DB #C0,#00,#00,#00 M0CODE43 DB #C0,#00,#20,#01 LOWER CASE C DB #10,#02,#10,#02 DB #10,#02,#10,#02 DB #20,#01,#00,#00 M0CODE44 DB #C0,#00,#20,#01 LOWER CASE D DB #10,#02,#10,#02 DB #10,#02,#20,#01 DB #F0,#1F,#00,#00 M0CODE45 DB #C0,#00,#A0,#01 LOWER CASE E DB #90,#02,#90,#02 DB #90,#02,#90,#02 DB #90,#01,#00,#00 M0CODE46 DB #00,#00,#00,#00 LOWER CASE F DB #10,#02,#F0,#0F DB #10,#12,#00,#10 DB #00,#08,#00,#00 M0CODE47 DB #A8,#01,#54,#02 LOWER CASE G DB #54,#02,#54,#02 DB #54,#02,#94,#01 DB #08,#02,#00,#00 M0CODE48 DB #00,#10,#F0,#1F LOWER CASE H DB #00,#01,#00,#02 DB #00,#02,#00,#02 DB #F0,#01,#00,#00 M0CODE49 DB #00,#00,#00,#00 LOWER CASE I DB #10,#02,#F0,#13 DB #10,#00,#00,#00 DB #00,#00,#00,#00 M0CODE4A DB 00,00,02,00 LOWER CASE J DB 02,02,#FC,#13 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE4B DB #10,#10,#F0,#1F LOWER CASE K DB #80,#00,#40,#01 DB #20,#02,#10,#02 DB #10,#00,#00,#00 M0CODE4C DB 00,00,00,00 LOWER CASE L DB #10,#10,#F0,#1F DB #10,00,00,00 DB #00,#00,#00,#00 M0CODE4D DB #F0,#03,#00,#02 LOWER CASE M DB #00,#02,#F0,#01 DB #00,#02,#00,#02 DB #F0,#01,#00,#00 M0CODE4E DB #00,#02,#F0,#03 LOWER CASE N DB #00,#01,#00,#02 DB #00,#02,#00,#02 DB #F0,#01,#00,#00 M0CODE4F DB #C0,#00,#20,#01 LOWER CASE O DB #10,#02,#10,#02 DB #10,#02,#20,#01 DB #C0,#00,#00,#00 M0CODE50 DB #FE,#03,#20,#01 LOWER CASE P DB #10,#02,#10,#02 DB #10,#02,#20,#01 DB #C0,#00,#00,#00 M0CODE51 DB #C0,#00,#20,#01 LOWER CASE Q DB #10,#02,#10,#02 DB #10,#02,#20,#01 DB #FE,#03,#00,#00 M0CODE52 DB #00,#02,#F0,#03 LOWER CASE R DB #00,#01,#00,#02 DB #00,#02,#00,#02 DB #00,#01,#00,#00 M0CODE53 DB #20,#01,#90,#02 LOWER CASE S DB #90,#02,#90,#02 DB #90,#02,#90,#02 DB #60,#00,#00,#00 M0CODE54 DB #00,#02,#00,#02 LOWER CASE T DB #E0,#1F,#10,#02 DB #10,#02,#10,#02 DB #00,#00,#00,#00 M0CODE55 DB #E0,#03,#10,#00 LOWER CASE U DB #10,#00,#10,#00 DB #10,#00,#E0,#03 DB #10,#00,#00,#00 M0CODE56 DB #00,#02,#00,#03 LOWER CASE V DB #C0,#00,#30,#00 DB #C0,#00,#00,#03 DB #00,#02,#00,#00 M0CODE57 DB #E0,#03,#10,#00 LOWER CASE W DB #20,#00,#C0,#01 DB #20,#00,#10,#00 DB #E0,#03,#00,#00 M0CODE58 DB #00,#02,#10,#02 LOWER CASE X DB #20,#01,#C0,#00 DB #C0,#00,#20,#01 DB #10,#02,#00,#00 M0CODE59 DB #82,#03,#44,#00 LOWER CASE Y DB #28,#00,#10,#00 DB #20,#00,#40,#00 DB #80,#03,#00,#00 M0CODE5A DB #10,#03,#30,#02 LOWER CASE Z DB #50,#02,#90,#02 DB #10,#03,#30,#02 DB #00,#00,#00,#00 M0CODE5B DB #00,#00,#00,#00 LEFT BRACE DB #00,#00,#80,#00 DB #78,#0F,#04,#10 DB #04,#10,#00,#00 M0CODE5C DB #00,#00,#E0,#3D ELONGATED COLON DB #E0,#3D,#E0,#3D DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE5D DB #04,#10,#04,#10 RIGHT BRACE DB #78,#0F,#80,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M0CODE5E DB #00,#00,#80,#00 APPROXIMATE DB #00,#01,#00,#01 DB #80,#00,#80,#00 DB #00,#01,#00,#00 M0CODE5F DB #F0,#1F,#F0,#1F RUBOUT DB #F0,#1F,#F0,#1F DB #F0,#1F,#F0,#1F DB #F0,#1F,#F0,#1F M0CODE60 DB #01,#00,#01,#00 CURSOR DB #01,#00,#01,#00 DB #01,#00,#01,#00 DB #01,#00,#01,#00 M0CODE61 DB #00,#00,#00,#00 CHCURSOR DB #00,#00,#00,#01 DB #80,#03,#00,#01 DB #00,#00,#00,#00 * * PLATO M1 CHARACTER SET * M1CODE00 DB #00,#00,#00,#00 SPACE DB #00,#00,#00,#00 DB #00,#00,#00,#00 DB #00,#00,#00,#00 M1CODE01 DB #00,#00,#40,#00 SHORTER SLASH DB #80,#00,#00,#01 DB #00,#02,#00,#04 DB #00,#08,#00,#00 M1CODE02 DB #00,#00,#A0,#02 EQUIVALENT DB #A0,#02,#A0,#02 DB #A0,#02,#A0,#02 DB #00,#00,#00,#00 M1CODE03 DB #00,#00,#00,#10 SPANISH N DB #00,#20,#00,#20 DB #00,#10,#00,#10 DB #00,#20,#00,#00 M1CODE04 DB #80,#00,#40,#01 REPLACEMENT ARROW DB #20,#02,#70,#07 DB #40,#01,#40,#01 DB #40,#01,#00,#00 M1CODE05 DB #50,#01,#60,#01 NOT EQUAL DB #40,#01,#C0,#01 DB #40,#01,#40,#03 DB #40,#05,#00,#00 M1CODE06 DB #00,#00,#00,#01 UP ARROW DB #00,#03,#F0,#07 DB #00,#03,#00,#01 DB #00,#00,#00,#00 M1CODE07 DB #80,#00,#80,#00 RIGHT ARROW DB #80,#00,#80,#00 DB #E0,#03,#C0,#01 DB #80,00,00,00 M1CODE08 DB #00,#00,#40,#00 DOWN ARROW DB #60,#00,#F0,#07 DB #60,#00,#40,#00 DB #00,#00,#00,#00 M1CODE09 DB #80,#00,#C0,#01 LEFT ARROW DB #E0,#03,#80,#00 DB #80,#00,#80,#00 DB #80,#00,#00,#00 M1CODE0A DB #00,#00,#00,#00 STAR DB #40,#02,#80,#01 DB #80,#01,#40,#02 DB #00,#00,#00,#00 M1CODE0B DB #10,#10,#30,#18 CAPITAL SIGMA DB #50,#14,#90,#12 DB #10,#11,#10,#10 DB #10,#10,#00,#00 M1CODE0C DB #30,#00,#D0,#00 CAPITAL DELTA DB #10,#03,#10,#0C DB #10,#03,#D0,#00 DB #30,#00,#00,#00 M1CODE0D DB #00,#00,#80,#03 CUP DB #40,#00,#40,#00 DB #40,#00,#80,#03 DB #00,#00,#00,#00 M1CODE0E DB #00,#00,#C0,#01 CAP DB #00,#02,#00,#02 DB #00,#02,#C0,#01 DB #00,#00,#00,#00 M1CODE0F DB #00,#00,#80,#00 DIVIDE DB #80,#00,#A0,#02 DB #80,#00,#80,#00 DB #00,#00,#00,#00 M1CODE10 DB #E0,#01,#10,#02 ALPHA DB #10,#02,#A0,#01 DB #60,#00,#90,#00 DB #10,#03,#00,#00 M1CODE11 DB #02,#00,#FC,#03 BETA DB #10,#05,#10,#09 DB #10,#09,#90,#06 DB #60,#00,#00,#00 M1CODE12 DB #00,#00,#E0,#0C SMALL DELTA DB #10,#13,#10,#11 DB #90,#08,#60,#04 DB #00,#00,#00,#00 M1CODE13 DB #00,#00,#30,#10 LAMDA DB #C0,#0C,#00,#03 DB #C0,#00,#30,#00 DB #00,#00,#00,#00 M1CODE14 DB #02,#00,#02,#00 MU DB #FC,#03,#10,#00 DB #10,#00,#E0,#03 DB #10,#00,#00,#00 M1CODE15 DB #00,#01,#00,#02 PI DB #F0,#03,#00,#02 DB #F0,#03,#00,#02 DB #00,#04,#00,#00 M1CODE16 DB #06,#00,#38,#00 RHO DB #E0,#00,#10,#01 DB #10,#02,#20,#02 DB #C0,#01,#00,#00 M1CODE17 DB #E0,#00,#10,#01 SMALL SIGMA DB #10,#02,#10,#03 DB #E0,#02,#00,#02 DB #00,#02,#00,#00 M1CODE18 DB #E0,#01,#10,#02 OMEGA DB #10,#00,#E0,#00 DB #10,#00,#10,#02 DB #E0,#01,#00,#00 M1CODE19 DB #20,#02,#20,#02 LESSOR OR EQUAL DB #20,#05,#20,#05 DB #A0,#08,#A0,#08 DB #00,#00,#00,#00 M1CODE1A DB #00,#00,#A0,#08 GREATER OR EQUAL DB #A0,#08,#20,#05 DB #20,#05,#20,#02 DB #20,#02,#00,#00 M1CODE1B DB #C0,#07,#20,#09 THETA DB #10,#11,#10,#11 DB #10,#11,#20,#09 DB #C0,#07,#00,#00 M1CODE1C DB 00,00,#80,00 EMBEDDED LEFT PAREN DB #40,01,#20,02 DB #F0,07,#10,08 DB #08,#10,00,00 M1CODE1D DB #00,#00,#00,#0C DEGREE SIGN DB #00,#12,#00,#12 DB #00,#0C,#00,#00 DB #00,#00,#00,#00 M1CODE1E DB 08,#10,#10,08 EMBEDDED RIGHT PAREN DB #F0,07,#20,02 DB #40,01,#80,00 DB #00,00,00,00 M1CODE1F DB #1C,#1C,#24,#12 RIGHT ARROW HEAD DB #48,#09,#90,#04 DB #20,#02,#40,#01 DB #80,#00,#00,#00 M1CODE20 DB #84,#21,#44,#22 PART OF COPYRIGHT DB #24,#24,#24,#24 CENTER DB #24,#24,#24,#24 DB #44,#22,#00,#00 M1CODE21 DB #00,#00,#00,#00 2 DOTS DB #00,#10,#00,#00 DB #00,#10,#00,#00 DB #00,#00,#00,#00 M1CODE22 DB #00,#00,#C0,#03 SQUARE DB #40,#02,#40,#02 DB #40,#02,#C0,#03 DB #00,#00,#00,#00 M1CODE23 DB 00,00,#80,01 MATRIX MULTIPLY DB #40,02,#40,02 DB #80,01,00,00 DB #00,00,00,00 M1CODE24 DB #80,#00,#C0,#01 DIAMOND DB #E0,#03,#F0,#07 DB #E0,#03,#C0,#01 DB #80,#00,#00,#00 M1CODE25 DB #10,04,#20,02 VECTOR PRODUCT DB #40,01,#80,00 DB #40,01,#20,02 DB #10,04,00,00 M1CODE26 DB 00,00,00,00 SINGLE RIGHT QUOTE DB 00,00,00,#10 DB 00,#20,00,#40 DB 00,00,00,00 M1CODE27 DB 00,00,00,00 CEDILLA DB 00,00,08,00 DB #10,00,#20,00 DB #00,00,00,00 M1CODE28 DB #00,00,00,#40 MAD HAT DB 00,#20,00,#10 DB 00,#20,00,#40 DB 00,00,00,00 M1CODE29 DB 00,00,#40,01 UP AND DOWN ARROWS DB #60,03,#F0,#07 DB #60,#03,#40,01 DB 00,00,00,00 M1CODE2A DB 00,00,00,00 VERTICAL LINE DB 00,00,#F0,#1F DB 00,00,00,00 DB 00,00,00,00 BSSZ #2000-*+START ORG #2000 LWA BSS 2 LWA OF RAM RESIDENT CKSM BSS 1 RAM RESIDENT CHECKSUM BSS 36 BSS 41 STACK STORAGE AREA IST.STK EQU $ *****STACK INITIALIZATION ADDRESS***** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TERMINAL VARIABLES AND SCRATCH AREA * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * D.CNTL2 BSS 1 DISPLAY CONTROL 2 FOR CHARACTER GEN. SIZE BSS 1 CHARACTER SIZE REGISTER FWD.REV BSS 1 CHARACTER PLOT FORWARD OR REVERSE HOR BSS 1 HORIZONTAL PLOTTING FLAG VER BSS 1 VERTICAL PLOTTING FLAG. X.PLOT BSS 2 X CONSTANT FOR NEXT CHARACTER. Y.PLOT BSS 2 Y CONSTANT FOR NEXT CHARACTER. CHAR.GEN BSS 2 CHARACTER GENERATOR ADDRESS XREG BSS 2 CURRENT X COORDINATE YREG BSS 2 CURRENT Y POSITION XSAVE BSS 2 X POSITION SCRATCH REGISTER YSAVE BSS 2 Y POSITION SCRATCH REGISTER MEMSEL BSS 2 CHARACTER MEMORY SELECTED ADDRESS M.ORG BSS 2 BASE ADDRESS OF DATA ORG #22E6 * * * * * * * * * * * * * * * * * * * * * * * * M.SBTYPE DB 03 M.CONFIG DB 0 M.M0 DW M0CODE00 M.VERS DB 01 M.TYPE BSS 1 TERMINAL TYPE M.CLOCK BSS 2 CLOCK M.EXTPA BSS 2 EXTERNAL INTERRUPT PROCESSOR ADDRESS M.MARGIN BSS 2 MARGIN USED FOR CARRIAGE RETURNS M.DIFF BSS 2 INPUT FIFO DIFFERANCE COUNT. M.CCR BSS 2 M.MODE BSS 2 WRITE/ERASE/MODE M.DIR BSS 2 DIRECTION OF STEPY/X, 0=FWD, 1=REV M.KSW BSS 2 M.ENAB BSS 2 M.SELECT BSS 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * COMPUTER LOADED MODE ADDRESSES MODE5A BSS 2 MODE 5 ADDRESS MODE6A BSS 2 MODE 6 ADDRESS MODE7A BSS 2 MODE 6 ADDRESS * COMPUTER LOADED CHARACTER SET STORAGE MEMORY.2 BSS 2 CHARACTER SET M2 STORE ADDRESS MEMORY.3 BSS 2 CHARACTER SET M3 STORE ADDRESS MEMORY.4 BSS 2 CHARACTER SET M4 STORE ADDRESS MEMORY.5 BSS 2 CHARACTER SET M5 STORE ADDRESS MEMORY.6 BSS 2 CHARACTER SET M6 STORE ADDRESS MEMORY.7 BSS 2 CHARACTER SET M7 STORE ADDRESS BSS 2 M.HALT DW 0000 M.STATUS DW 0000 MODE BSSZ 1 SC.OC BSSZ 1 * *FOLLOWING FLAGS USED FOR LOAD AND MUST BE IN THIS ORDER * FLAGREG BSSZ 1 CNTR BSSZ 1 CHAR BSSZ 1 INPUT DATA SAVE CRC1 BSSZ 1 16 BIT CYCLIC CRC2 BSSZ 1 REDUNDENCY CHECK. SEQ1 BSSZ 1 16 BIT LOAD BLOCK SEQ2 BSSZ 1 SEQUEANCE NUMBER. LDN BSSZ 1 LOAD FILE IDENTIFIER. A1 BSSZ 1 24 BIT STARTING A2 BSSZ 1 ADDRESS OF THE A3 BSSZ 1 LOAD DATA. SAVE BSSZ 1 SAVE DLE COUNT * * OUTPUT MESSAGE STORE FOR LOAD PROTOCOL * DISP4 EQU * BSS 6 BLOCK NUMDER OUT1 EQU * BSS 4 MSG L,N,N,CR OUT3 EQU * BSS 2 MSG DLE,EOT OUT4 EQU * BSS 5 MSG NAK,XXYY * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END START