/ TV / PS8 SCOPE DEVICE HANDLER / FOR A PDP-12. / SEPTEMBER, 1971 / MARIO DENOBILI, P?S / THIS ROUTINE WAS WRITTEN VERY HASTILY. / THE FOLLOWING FEATURES SHOULD BE PUT / IN, BUT I WAS TOO LAZY TO DO SO. / WITH A FEW HOURS WORK, A COMPETENT / PROGRAMMER SHOULD BE ABLE TO / COMPACT MY HASTY CODE AND EASILY ADD / AT LEAST A FEW OF THE FOLLOWING / FEATURES. /1. TABS SHOULD BE HANDLED CORRECTLY. /2. FORM FEEDS SHOULD SIGNAL A NEW / SCOPE PAGE. [BRANCH TO LOCATION 'FULL'] /3. VERTICAL TABS SHOULD BE TREATED AS / 7 LINE FEEDS. /4. RUBOUTS SHOULD BE IGNORED. /5. THE BUG THAT THE FIRST CHARACTER ON A / NEW SCOPE PAGE MIGHT DUPLICATE ONE / SHOWN ON THE LAST PAGE SHOULD BE FIXED. /6. IF THE BUFFER OVERLAPS THE BETA REGISTER, / THIS SHOULD NOT CAUSE A CRAPPY / CHARACTER TO BE DISPLAYED. /7. CTRL/Z SHOULD BE CHECKED FOR AND SIGNIFY / END OF BUFFER. [BRANCH TO 'FULL' WITH / LINK 0] /8. THE DISPLAY ALGORITHM SHOULD BE IMPROVED / SO THAT THERE IS LESS FLICKER. /9. THE NUMBER OF LINES DISPLAYED SHOULD / BE CONTROLLED BY A POT. /10. THE RESTRICTION THAT THE USER'S BUFFER / START AT AN EVEN ADDRESS IS USELESS / AND SHOULD BE REMOVED. /11. THE KEYBOARD FLAG SHOULD BE CLEARED / THE FIRST TIME THE ROUTINE IS ENTERED. /12. THE STATUS OF THE SPECIAL FUNCTIONS / REGISTER SHOULD BE SAVED AND RESTORED / BEFORE EXITING. /13. THE PROGRAM SHOULD TEST FOR CTRL/C / WHICH SHOULD SIGNIFY RETURN TO MONITOR. /14. THE PROGRAM SHOULD TEST TO SEE IF THE / USER IS TRYING TO READ FROM THE SCOPE / BY MISTAKE AND SIGNAL AN ERROR. /15. SENSE SWITCH 0 SHOULD BE USED TO / SPECIFY SMALL OR LARGE SIZE CHARACTERS. / TV FIELD 0 / PS/8 BUILD HEADER BLOCK *0 -1 DEVICE VR12;DEVICE TV;1300;4013;ZBLOCK 2 ORIGIN=200 / TWO PAGE SCOPE DEVICE HANDLER / PAGE INDEPENDENT AND REUSABLE LINC=6141 PDP=2 ESF=4 CLR=11 *ORIGIN L70, 70 LOC, 0 /CAN'T USE - POSSIBLE BETA REGISTER LINKNT, TAD LOC /COUNT OF # OF LINES YCOORD, AND L6141 /DISPLAY ORDIANTE BETA, DCA . /8-MODE ADDRESS OF BETA REGISTER 1 SAVE, TAD LOC /HOLDS PREVIOUS CONTENTS OF BETA REGISTER 1 BUFEND, TAD CBASE /END OF BUFFER BPTR, DCA CBASE /POINTS INTO BUFFER BUFFER, TAD X /BEGINNING OF BUFFER T1, DCA BEGIN /TEMPORARY L7410, SKP SCOPE, 0 BEGIN, JMS LOC /WARNING: ADDRESS OF BEGIN MUST BE EVEN /WITH BITS 5 AND 6 ZERO AND L70 /GET DATA FIELD OF BUFFER TAD KCDF DCA XCDF RDF /GET DATA FIELD TAD FULL DCA XCIF X, TAD I SCOPE /GET FUNCTION WORD AND L7700 /GET # OF PAGES ISZ SCOPE CLL RAL SNA YINIT, JMP OVERX TAD I SCOPE /ADD IN BUFFER START DCA BUFEND /TO GET END OF BUFFER TAD I SCOPE /GET BUFFER START DCA BUFFER /[RESTRICTION: IT MUST BE EVEN] CDF 0 TAD I BETA DCA SAVE /SAVE CONTENTS OF BETA REGISTER NEW, DCA I BETA /GO TO LEFT MARGIN JMS TEMP /SET CORRECT DF TAD BUFFER DCA BPTR /POINT TO BEGIN OF BUFFER TAD YINIT DCA YCOORD /GO TO TOP OF SCREEN M14, SMA SZA SNL LAS /READ NEG LINE COUNT FROM RIGHT SWITCHES CBASE, CHRTBL-BEGIN-60 DCA LINKNT LOOP, TAD I BPTR AND L7410 DCA T1 /GET LEFT HALF OF CHAR 3 TAD I BPTR JMS DISP /DISPLAY CHAR 1 OF 3 ISZ BPTR TAD I BPTR JMS DISP /DISPLAY CHAR 2 OF 3 TAD I BPTR AND L7410 CLL RTR LINEND, RTR /GET RIGHT HALF OF CHAR 3 TAD T1 CLL RTR RTR JMS DISP /DISPLAY CHAR 3 OF 3 ISZ BPTR L177, 177 /WRAP-AROUND PROTECTION TAD BPTR CMA CLL /COMPARE BUFFER POINTER TAD BUFEND /WITH BUFFER END. SZL CLA /AT END OF BUFFER? JMP LOOP /NO FULL, CIF CDF 0 /YES KSF /GO TO NEXT SCOPE PAGE? JMP NEW /NO, REFRESH KCC /YES SNL /END OF BUFFER? JMP OVER /YES CLL CLA CMA RAL /NO AND BPTR /TAKE QUOT ON DIV BY 2 DCA BUFFER /GET NEW BUFFER 'START' JMP NEW TEMP, 0 XCDF, HLT /CHANGE DATA FIELD TO THAT OF BUFFER JMP I TEMP DISP, 0 KCDF, CDF 0 AND L177 TAD M14 SZA /IS IT FORM FEED? TAD L2 /NO SNA /IS IT LINE FEED? JMP NEWLIN /YES IAC RAL CLL CML /NO SNA /IS IT TAB? TAD L11 /YES CONVERT TO CR TAD CBASE DCA TEMP /GET DISPLAY BIT PATTERN PTR 0 /CR CODE 0 /MUST BE AT REL LOCS 132-3 TAD I TEMP DCA LEFT /GET LEFT HALF OF DISPLAY BITS ISZ TEMP TAD I TEMP DCA RIGHT /GET RIGHT HALF TAD YCOORD /PUT ORDINATE IN AC L6141, LINC YINC, 1760 /DSC I LEFT, 0 /DISPLAY LEFT HALF 1760 /DSC I RIGHT, 0 /DISPLAY RIGHT HALF L11, CLR ESF /SET SMALL CHARACTER SIZE L2, PDP ISZ I BETA /LEAVE A BISSEL SPACE TAD I BETA /GET ABSCISSA TAD LINEND /COMPARE WITH RIGHT MARGIN L7700, SMA CLA /AT RIGHT EDGE OF SCREEN? JMP NEWLIN /YES, GO TO NEXT LINE SCDF, JMS TEMP /NO, SET PROPER DF JMP I DISP /RETURN NEWLIN, DCA I BETA /BACK TO LEFT MARGIN TAD YCOORD TAD YINC DCA YCOORD /MOVE DOWN TO NEXT LINE ISZ LINKNT /AT BOTTOM OF SCREEN? JMP SCDF /NO STL /YES, FORCE LINK ON JMP FULL /SO 'FULL' REALIZES NOT AT BUFFER'S END OVER, TAD SAVE DCA I BETA /RESTORE BETA REGISTER OVERX, ISZ SCOPE /POINT TO BLOCK # ISZ SCOPE /POINT TO ERROR RETURN ISZ SCOPE /POINT TO NORMAL RETURN XCIF, HLT /RESTORE INSTRUCTION FIELD & DATA FIELD JMP I SCOPE /LEAVE *ORIGIN+200 /THE TABLE OF PATTERN WORDS BEGINS HERE CHRTBL, 0000; 0000 /SPACE 7500; 0000 /! 7000; 0070 /" 7714; 1477 /# 5721; 4671 /$ 6661; 4333 /% 5166; 0526 /& 0000; 0070 /' 3600; 0041 /( 4100; 0036 /) 2050; 0050 /* 0404; 0437 /+ 0500; 0006 /, 0404; 0404 /- 0001; 0000 /. 0601; 4030 // 4536; 3651 /0 2101; 0177 /1 4523; 2151 /2 4122; 2651 /3 2414; 0477 /4 5172; 0651 /5 1506; 4225 /6 4443; 6050 /7 5126; 2651 /8 5122; 3651 /9 2200; 0000 /: 4601; 0000 /; 2410; 0042 /< 1212; 1212 /= 4200; 1024 /> 4020; 2055 /? 4136; 3656 /@ 4477; 7744 /A 5177; 2651 /B 4136; 2241 /C 4177; 3641 /D 4577; 4145 /E 4477; 4044 /F 4136; 2645 /G 1077; 7710 /H 7741; 0041 /I 4142; 4076 /J 1077; 4324 /K 0177; 0301 /L 3077; 7730 /M 3077; 7706 /N 4177; 7741 /O 4477; 3044 /P 4276; 0376 /Q 4477; 3146 /R 5121; 4651 /S 4040; 4077 /T 0177; 7701 /U 0176; 7402 /V 0677; 7701 /W 1463; 6314 /X 0770; 7007 /Y 4543; 6151 /Z 4177; 0000 /[ 3040; 0106 /\ 0000; 7741 /] 2000; 2076 /^ 1604; 0404 /_ $