*20 / /PDP-12 DEMO MONITOR / / / / SEG1 / / / // LAST MODS 3/15/70 RICH DE JOHN "ON THE IDES OF MARCH"!!!!!!!!!!!!!!!!!!!!!!!!! / / /RELEASE VERSION 1 /22 AUG 69 /REVISED 14 SEP 69 / / / /DEFINITIONS / LMODE OKST=0512 KBDA=0513 TYP=0514 BUFFER=3400 ZDIR=BUFFER ION=6001 IOF=6002 / /BANK 0 CROSS BANK REFERENCES Y07=655 STSVD=2134 TIMER=2031 BADT=1314 INEXT=2133 SEGMNT 1 LMODE *20 /*************************************** /STATE 1 ROUTINE / /ENTERED WITH MESSAGE NUMBER IN AC / /IF MESSAGE NUMBER >=6, UNIT NO. MESSAGE / IS DISPLAYED FIRST / Y01, LDF 0 STC Y01D0 /SAVE THE PARAMETER ADD ONE STC STATE /SET THE STATE TO 1 IOB ION Y01A, LDA I Y01D0, 0 ADA I -5 APO JMP Y01D /DONT DISPLAY UNIT MESSAGE JMP DSPLAY UNITN 0036 Y01D, LDA I Y01TAB /GET TABLE ADDRESS ADD Y01D0 /INDEX BY MESSAGE NUMBER STC .+2 LDA 0 /GET TABLE ENTRY STC Y01D2 JMP DSPLAY Y01D2, 0 0032 JMP Y01A /DO IT AGAIN Y01TAB, ERR0 /MONITOR HELP ERR1 /TAPE OPERATION ERR2 /SPURIOUS INTERRUPT ERR3 /UNCLEARABLE INT ERR4 /CANNOT FIND PROG. OR GROUP ERR5 /LOADING ****** ERR6 /ILLEGAL WIRTE BLOCK *** ERR7 /NOT SELECTED ERR10 /BAD BLOCK ERR11 /BAD TAPE ERR12 /SET WRITE ENABLE /*************************************** /STATE 2 / /DISPALY INDEX AND EXAMINE INPUT CHARACTERS / Y02, ADD XERR1 STC TAPMES B1RI1, RDC 7016 /READ IN THE DISPLAY BLOCK DSIX, SET I 16 ZPNAME+4000 / /INITIALIZE INPUT BUFFER / LDA I 0640 /"F " STC ZPNAME /FULL SIZED CHARACTERS STC ZPNAME+1 STC ZPNAME+2 STC ZPNAME+3 CLR STH I 16 ADD C3400 STC ZPNAME+4 / /DISPLAY INDEX / DSIXN, JMP DSPLAY BUFFER 0034 / JMP DSPLAY BUFFER+363 /EXECUTE MESSAGE 0046 / /DISPLAY THE CURRENT INPUT AS OVERLAY // JMP DSPLAY ZPNAME 0042 / /SERVICE INPUT CHARACTERS / OKST JMP DSIXN /CONTINUE DISPLAY KBDA /GET FULL ACSII SAE I 215 /CR??? SKP JMP DSTERP /DO SOMETHING SAE I 377 /RUBOUT SKP JMP DSRUB /YES RUBOUT STH 16 /STORE THE CHARACEER LDA 16 SAE I ZPNAME+4 JMP DSIXN-4 LDH I 16 /END OF BUFFER DSRUB, LDA 16 SAE I ZPNAME+1 /TOP OF BUFFER??? SKP /NO JMP DSIXN / YES - DO NOT BACK UP ADD M1 /BACK UP 2 CHARS. STC 16 JMP DSIXN-4 /INTERPRET THE INPUT BUFFER DSTERP, LDA 16 SAE I ZPNAME+1 SKP JMP DSIXN SAE I ZPNAME+4 SKP JMP DSTERX LDA I 40 /FILL TRAILING SPACES STH 16 LDH I 16 /JUST TO INCREMENT 16 JMP DSTERP DSTERX, LDH BUFFER+4377 /LAST CHAR IN DISPLAY BLOCK /CONTAINS GROUP COUNT COM AZE I JMP DSIX STC 15 SET I 14 -32 /TRY ALL 26 LETTERS FOR PROG LOOKUP ADD C140 /"A " STC DSTFX JMP GTRES /READ IN THE INDEX DSTRX, ADD ZPNAME+1 SAE I DSTFX, 0 SKP JMP DSGRP LDA DSTFX ADD C100 STC DSTFX XSK I 15 JMP DSTRX /DO A PROGAM CALL DSPROG, LDA I 5601 /.A STC ZPNAME JMP DLOOK SKP JMP DSLEX /O.K. EXIT LDA I 1 ADD ZPNAME STC ZPNAME XSK I 14 JMP DSPROG+3 / /ERROR ON NAME LOOKUP DSLER, SET I 17 ERRL+3777 SET I 16 ZPNAME+4000 SET I 15 -6 LDH I 16 STH I 17 XSK I 15 JMP .-3 LDA I 0004 /CANNOT FIND ERR NO. JMP Y01 /GO TO STATE 1 TO DISPLAY ERR / /TRY A GROUP CALL / DSGRP, SCR 6 ADA I 5600 STC ZPNAME /.X JMP DLOOF JMP DSPROG /NOT GROUP - TRY PROG /NORMAL EXIT DSLEX, STA THISDP SET I 11 DEMON-1 SET I 12 -6 LDA I 10 STA I 11 XSK I 12 JMP .-3 JMP NXSTAT DS3, 3 /GO TO STATE 3 /*************************************** / STATE 3 ROUTINE / /THIS ROUTINE LOADS THE SUMMARY FRAME / FOR THE SELECTED DEMO INTO THE BUFFER / AND SETS IT UP AS THE MESSAGE TO BE / DISPLAYED DURING SUBSEQUENT TAPE / OPERATIONS (AS WHILE LOADING THE DEMO) Y03, STC ZDML /RESET DEMO LOADED FLAG STA INEXT STA STSVD JMP Y05R /RESET IMMEDIATE EXECUTION SWITCH ADD BKSM BSE I C7000, 7000 JMP READT /READ TAPE, TAPE OP DISPLD LDA I BUFFX, BUFFER Y03X, STC TAPMES /SUMMARY AS MESSAGE JMP NXSTAT 0004 /GO TO STATE 4 /*************************************** /DEMO-12 LOADER / Y04, ADD C7000 ADD BKSB STC LOHED /TAPE WORD HEADER ADD CLDF2 STC LOREAD LDF 3 JMP LORD /READ HEADER BCL I /CREATE CORE ADDRESS 3000 STC LOHED /TAPE READ INSTRUCTON SET I 11 /COUNT TO 40 -30 SET I 10 /CORE MAP POINTER 3747 / LOSWT, LDF 3 /SET TO HEADER BANK LDA I 10 /GET MAP WORD APO /SKIP IF NO TAPE BLOCK JMP LOREAD /READ BLOCK INTO CORE CLR ADD C1000 LAM LOHED LZE /WRAP-AROUND? JMP LORSTB /RESET BANK XSK I 11 /COUNT JMP LOSWT ADD TWO STC ZDML /SET DEMO LOADED FLAG LOEXIT, JMP NXSTAT FIVE, 5 /GO TO STATE 5 / LORSTB, ADA I /RESET QUARTER 4000 STC LOHED LAM LOREAD JMP 0 /EXIT WITH NEXT BANK SETUP / LOREAD, LDF 2 /CORE BANK LORD, RDC /READ BLOCK LOHED, 7000 LDA I /BUMP BLOCK NUMBER ONE, 1 ADM LOHED JMP 0 /EXIT /*************************************** / STATE 5 ROUTINE / /DISPLAY THE SUMMARY FRAME / /THE DEMO PROGRAM IS LOADED WITH THE / SUMMARY FRAME DISPLAYED - THIS STATE / KEEPS THE SUMMARY ON THE SCREEN / /IF Y05 IS SET TO A JMP Y05A, STATE 7 IS /ENTERED IMMEDIATELY / Y05, NOP JMP DSPLAY BUFFER 0036 /TOP LEFT OF SCREEN JMP Y05+1 / Y05B, LDA I 5 STC STATE Y05A, JMP B1RI2 /A SNEAKY WAY INTO GTRES IOB IOF /GO TO STATE 7 WITH IOF JMP Y05R /RESET SWITCH ADD SEVEN STC STATE ADD XERR1 STC TAPMES STC ZDML LDF 1 LIF 0 JMP Y07 / Y05R, LDA I NOP STC Y05 JMP 0 /RETURN /*************************************** /STATE 6 ROUTINE / /THIS ROUTINE IS ENTERED WHENEVER THE / DEMO HAS NOT BEEN LOADED, BUT THE / SUMMARY FRAME HAS ALREADY BEEN / DISPLAYED AND AN OPERATOR ACTION HAS / SUPERSEDED IT (FOR EXAMPLE, THE OPER. / COULD HAVE ASKED FOR DEMO HELP, THEN / ASKED FOR THE DEMO TO BE RUN). / /THE STATE IS ALSO ENTERED WHENEVER / THE OPER ASKS FOR THE DEMO TO START / BEFORE IT IS LOADED BUT AFTER THE / SUMMARY IS DISPLAYED. Y06, STC ZDML /RESET DEMO LOADED FLAG STA STSVD ADD DEMON STC MSG5+1 ADD DEMON+1 STC MSG5+2 ADD DEMON+2 STC MSG5+3 LDA I JMP Y05A STC Y05 /SET IMMEDIATE EXECUTION /SWITCH LDA I ERR5 JMP Y03X /INDIRECTLY TO STATE 4 /*************************************** /DEMO HELP STATE / /STATES 8, 9, AND 10 / /DISPLAYS HELP FOR CURRENT DEMO / /WATCHES FOR B (CTRL B) OR F (CTRL F) / AND CHANGES FRAMES ACCORDINGLY Y10, ADD BKSM /START OF HELP ON TAPE ROL 1 ADD Y10ONE /START WITH SECOND FRAME STC Y10FF STC READT2 ADD BKSM ADD BKNM /START BK + N BK ADD M1 /-1 = LAST BLOCK NUMBER ROL 1 BSE I Y10ONE, 1 STC Y10LF ADD Y10FF Y10G, STA Y10FN Y10A, ROR 1 BSE I 7000 SAE READT2 JMP READT Y10C, LDA Y10FN BCL I M1, 7776 ROL 7 ADD BUFFX STC .+2 Y10D, JMP DSPLAY 0 0036 OKST JMP Y10D KBDA BCL I 7700 SAE I 02 /B OR CTRL B JMP Y10E C1000, LDA Y10FN SAE I Y10FF, 0 SKP JMP Y10D ADD M1 JMP Y10G Y10E, SAE I 6 /F OR CTRL F JMP Y10D LDA I Y10FN, 0 SAE I Y10LF, 0 SKP JMP Y10D ADD Y10ONE JMP Y10G /*************************************** /STATE CHANGER / /INTERRUPT HANDLER ENTRY / /SUBROUTINE ENTRY (NXSTAT) / NEW STATE IN P+1 SCI, LDF 0 ADD STATE SHD I 0700 JMP Y05B ADA I JMP SCJT STC SCJT IOB ION CLR SCJT, JMP . JMP Y01 JMP Y02 JMP Y03 JMP Y04 JMP Y05 JMP Y06 0 /STATE 7 IS SPECIAL JMP Y10 JMP Y10 JMP Y10 JMP SCS11 JMP SCS12 JMP SCS13 SCS14, JMP GTRES /GET INDEX SET 10 THISDP LDH 10 SHD I 5600 JMP SCS11A SCS14A, JMP NXSTAT TWO, 2 /TO STATE 2 / SCS11, JMP GTRES SET 11 THISDP SET 10 THISDP JMP BM10 /POINT 10 AT NEXT ENTRY LDA 10 SAE 11 JMP SCS14A /NOT SAME GROUP LDA 10 JMP DSLEX /SET THISDP & 6 WORDS /TH EN GO TO STATE 3 / SCS11A, JMP NXSTAT 0003 /GO TO STATE 3 SCS12, LDA STSVD /IS THERE A DEMO STATE SAVED??? AZE I JMP SCS13 /NO SCS12A, JMP NXSTAT SEVEN, 7 /EXECUTE THE DEMO / SCS13, ADD ZDML AZE I JMP SCS14 /DEMO IS NOT LOADED JMP SCS12A/ DEMO IS LOADED - START IT NXSTAT, IOB IOF / STATE CHANGER RUNS IOF LDF 1 SET 10 0000 LDA 10 /GET CONTENTS OF P+1 - NEWSTATE STC STATE JMP SCI /*************************************** /DIRECTORY LOOKUP / /ENTERED WITH NAME TO BE /FOUND IN ZPNAME. / /DIRECTORY MUST HAVE BEEN LOADED INTO /Q4 OF BANK 0 BEFORE CALLING THESE ROUTINES /A CONVENIENT ROUTINE FOR DOING THAT IS /CALLED GTRES / /RETURN IS TO PC+2 WITH /POINTER IN AC IF FOUND, /PC+1 IF NOT FOUND. / / DLOOK, SET 16 0 SET I 10 ZDIR-1 /POINT TO DIRECTORY JMP DLOOKU /TEST JMP BM10 /NEXT ENTRY JMP .-2 / DLOOKU, SET 11 /INNER POINTER 10 LDA I 11 /GET FIRST WORD SAE I /END TEST 5757 SKP /SKIP EXIT JMP DLCOM+1 /RETURN NO SKIP SAE ZPNAME JMP 0 /FAIL LDA I 11 /FIRST NAME PAIR SAE ZPNAME+1 JMP 0 /FAIL LDA I 11 SAE ZPNAME+2 JMP 0 /FAIL LDA I 11 SAE ZPNAME+3 JMP 0 /FAIL JMP DLCOM /SKIP RETURN / /LOOKUP GROUP NAME / /CALL IS THE SAME AS ABOVE. /ONLY THE FIRST [GROUP] CHARACTERS /ARE TESTED. / DLOOF, SET 16 0 SET I 10 ZDIR-1 DLOOFA, SET 11 10 JMP DLOOKY /TEST JMP BM10 /NEXT ENTRY JMP DLOOFA / DLOOKY, LDA I 11 SAE I /END TEST 5757 SKP JMP DLCOM+1 /FAIL EXIT SAE ZPNAME JMP 0 /FAIL DLCOM, XSK I 16 /SKIP EXIT XSK I 10 /MAKE 10 POINT AT THE ENTRY LDA 10 JMP 16 /RETURN / /READ IN THE INDEX TO BUFFER / GTRES, LDA I XERR1, ERR1 STC TAPMES B1RI2, RDC 7017 JMP 0 /*************************************** / DISPLAY SUBROUTINE / /DERIVATIVE OF DEC QANDA / /CALL: / JMP DSPLAY / TEXTADDRESS / X/Y (COORDINATES OF DISPLAY) / RETURN (CHARACTER COUNT IN AC) / /IF THE X/Y ARGUMENT IS 0, DISPLAY IS / CONTINUED FROM THE LAST CALL / /SPECIAL CHARACTERS: / \ (34) IS TEXT TERMINATOR / (43) IS CAARRIAGE RETURN / F (06) *AS FIRST CHARACTER OF A LINE / ONLY* FORCES FULL SIZED / DISPLAY. OTHERWISE, HALF / SIZE IS ASSUMED / /SPECIAL MODE FOR INDEX DISPLAY / /IF THE FIRST CHARACTER IS A 00, SPECIAL /MODE IS SET. IN SPECIAL MODE: / /> (76) FORCES FULL SIZE /< (74) FORCES HALF SIZE / DSPLAY, LDA I 2 ADD 0 STC DSXT /SET UP EXIT / /PICK UP ARGUMENTS / ADD 0 BCL I 6000 STC 1 LDA 1 STC 2 /SET TEXT POINTER / LDH 2 /GET FIRST CHAR. OF DISPLAY SET I 5 /SET THE NORMAL/INDEX SWITCH 7777 /TO NORMAL AZE I /IS THE FIRST CHAR. A 0? JMP UNSW /YES - UNSET SWITCH LDA 2 ADD M4000 /BACK UP 1 CHAR STC 2 LDA I 1 AZE I /ZERO ARGUMENT 2?? JMP DSN /YES SCR 3 BCL I 7007 STC DSX / X COORDINATE LDA 1 ROL 6 SCR 3 /THIS WAY THE SIGN IS GENERATED BCL I 17 STC DSY /Y COORDINATE DSN, STC DSCNT /ZERO THE CHAR. COUNT SET I 1 DSX, 0 XSK 5 /NORMAL MODE??? JMP DSNOW /NO DSH, SET I 3 7777 /SET FIRST CHAR FLAG LDA I NOP STC DSCRLF+1 SFA /READ SPECIAL FUNCTIONS BCL I 200 /SET TO HALF SIZE DSESF, ESF / /DISPLAY THE TEXT / DSNOW, LDH I 2 /CHARACTER PICKUP SHD I C3400, 3400 JMP DSXIT /TERMINATRO FOUND SHD I 4300 JMP DSCRLF /LINE FEED FOUND XSK 5 /NORMAL MODE??? JMP DSNNM /NO SHD I 1000 JMP DSHA /H FOUND SHD I 0600 JMP DSFA /F FOUND - FULL SIZE JMP DSCHR /GO DISPLAY IT DSNNM, SHD I 7400 JMP DSH /HAALF SIZE SHD I 7600 JMP DSF /FULL SIZE / /NOW GET IT ON SCOPE / DSCHR, ROL 1 /24 BIT TABLE ADA I DSTABL STC 4 /CHAR PATTERN ADDRESS LDA I DSY, 0 DSC 4 DSC I 4 DSC I 0000 /CHARACTER SPACING LDA I 1 ADD DSCNT STC DSCNT /BUMP CHARACTER COUNT DSY1, STC 3 /CLEAR FIRST CHAR. FLAG JMP DSNOW /NEXT CHAR / DSCRLF, JMP YBMP NOP /OR JMP YBMP JMP DSN+1 / DSF, LDA I JMP YBMP STC DSCRLF+1 ADD DSY BCL I 37 /MAKE SURE ITS ON A FULL SIZE LINE STC DSY SFA BSE I 200 /SET FULL SIZE ESF JMP DSY1 / DSHA, XSK 3 /TEST FLAG JMP DSCHR /NO FLAG - DISPLAY IT JMP DSY1 /NO ACTION REQD - CLEAR FLAG /AND DO NEXT CHAR / DSFA, XSK 3 /TEST FLAG JMP DSCHR /NO FLAG - DISPLAY IT JMP YBMP JMP DSF / DSXIT, LDA I DSCNT, 0 DSXT, JMP . /THIS WAS INITIALIZED / UNSW, LDA I 5 /UNSET SWITCH LDH I 2 /INCREMENT 2 BY ONE CHAR JMP 0 / YBMP, LDA I -17 ADD DSY BCL I 17 STC DSY JMP 0 /*************************************** /CHARACTER PATTERNS *1126 DSTABL, 0101 /KBD 0 ILLEGAL 0101 /USED AS MARKER 4477 /1:A 7744 5177 /2:B 2651 4136 /3:C 2241 4177 /4:D 3641 4577 /5:E 4145 4477 /6:F 4044 4136 /7:G 2645 1077 /10:H 7710 7741 /11:I 0041 4142 /12:J 4076 1077 /13:K 4324 0177 /14:L 0301 3077 /15:M 7730 3077 /16:N 7706 4177 /17:O 7741 4477 /20:P 3044 4276 /21:Q 0376 4477 /22:R 3146 5121 /23:S 4651 4040 /24:T 4077 0177 /25:U 7701 0176 /26:V 7402 0677 /27:W 7701 1463 /30:X 6314 0770 /31:Y 7007 4543 /32:Z 6151 4177 /33:/ 0000 C100, 0100 /34:\ NOT DISPLAYED C140, 0140 0000 /35:] 7741 /36 & 37 NOT DISPLAYED THISDP, 0 /POINTER TO DIRECTIRY ENNTRY STATE, 0 ZDML, 0 /DEMO LOADED FLAG CLDF2, LDF 2 0000 /40:SPACE 0000 7500 /41:! 0000 7000 /42:" 0070 /43,44,45 NOT DISPLAYED BM10, LDA I 10 ADD 10 STC 10 JMP 0 M4000, -4000 5166 /46:& 0526 0000 /47:TAB NOT DISPLAYED 0000 3600 /50:( 0041 4100 /51:) 0036 2050 /52:* 0050 0404 /53:+ 0437 0500 /54:, 0006 0404 /55:- 0404 0001 /56:. 0000 0601 /57:\ 4030 4536 /60:0 3651 2101 /61:1 0177 4523 /62:2 2151 4122 /63:3 2651 2414 /64:4 0477 5172 /65:5 0651 1506 /66:6 4225 4443 /67:7 6050 5126 /70:8 2651 5122 /71:9 3651 2200 /72:: 0000 4601 /73:; 0000 2000 /74: UPARROW 2077 1212 /75:= 1212 0200 /76: DOWNARROW 0277 4020 /77:? 2055 /*************************************** READT, STC READT2 LDA I ERR1 STC TAPMES RDC READT2, 0 JMP 0 /RETURN / / /THE FOLLOWING CODE IS CALLED FROM BANK 2 / /IT IS OVERLAYED WITH DEMO NAME AND /PERTINENT BLOCK INFORMATION ONCE /INITIALIZATION IS COMPLETED / DEMON, DCALL, JMP DSPLAY 0 /FILLED IN FROM BANK 2 0 /SAME HERE LIF 2 JMP 761 BKSB, 0 BKSM=BKSB-2 BKNM=BKSB-1 / / /THE FOLLOWING ROUTINES ARE CALLED FROM / BANK 0. TAPDSP, LDF 0 JMP DSPLAY TAPMES, 0 0036 SCR 4 ADM TIMER NOP /KLUDGE TIME OUT FIX JMP TAPDSP+1 LIF 0 JMP BADT / CALLDL, JMP DLOOK SKP XSK I 5 JMP 4 /LIF 0, JMP RETURN WERE PLACED IN 4&5 / / /***********************************: / / UNITN, TEXT "FUNIT " UNITM, TEXT " \" / ZPNAME, TEXT " \" / ERR0, TEXT "F DEMO12 TYPE COMMANDS F CTRL F S START PROGRAMS F I INDEX DISPLAY F N NEXT PROGRAM F C CONT. PROGRAM F H HELP!!!!!!!!!! B OR F TO GO BKWRD OR FRWRD IN HELP FRAMES\" / *1621 ERR1, TEXT "TAPE OPERATION IN PROGRESS\" / ERR2, TEXT "SPURIOUS INTERRUPT\" / ERR3, TEXT "UNCLEARABLE INTERRUPT\" / ERR4, TEXT "FCANNOT FIND FPROGRAM OR GROUP F" ERRL, 0 0 0 3434 / ERR5, TEXT "FLOADING " MSG5, TEXT " \" / ERR6, TEXT "FILLEGAL WRITE - F BLOCK " ERR6T, TEXT "000\" / ERR7, TEXT "FNOT SELECTED\" / ERR10, TEXT "FBAD BLOCK " ERR10T, TEXT "000\" / ERR11, TEXT "FBAD TAPE\" / ERR12, TEXT "FSET WRITE ENABLE\" / / / /END OF SEG1 ROUTINE / / / LAST MODS 3/15/70 RICH DE JOHN "ON THE IDES OF MARCH"!!!!!!!!!!!!!!!!!!!!!!!!!