/ P?S/8 FOCAL 8K OVERLAY / LAST EDIT: 28-DEC-1986 03:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / MODIFICATIONS TO P?S/8 FOCAL TO USE FIELD ONE FOR TEXT BUFFERING. / MUST BE LOADED BEFORE OTHER BINARY PATCHES TO FOCAL (4 WORD OVERLAY IS THE / ONLY EXCEPTION). / DEFINITIONS FROM FOCAL, 1969 (ORIGINAL PAPER-TAPE VERSION). AXIN= 0010 /PACKING AUTO-INDEX REGISTER BUFR= 0060 /POINTER TO NEXT FREE LOCATION IN TEXT BUFFER CFRS= 0133 /POINTER TO DUMMY LINE COMBOT= 0226 /PDL PROTECTION POINTER COMBUF= 0132 /START OF COMMAND BUFFER STORED HERE DGRP= 0425 /DO ROUTINE ADDRESS DGRP1= 0441 /DO ROUTINE ADDRESS ERG= 2225 /ERASE LINES ADDRESS ERT= 2214 /ERASE TEXT ADDRESS ERV= 2217 /ERASE VARIABLES ADDRESS ERVX= 2237 /ERASE VARIABLES ADDRESS FINDN= 2246 /FINDLN ADDRESS GET3= 2345 /GET ONE HALFWORD ADDRESS GONE= 0232 /COMMAND PROCESSOR ADDRESS GS1= 1437 /SUBSCRIPT SEARCH ROUTINE ADDRESS INPUTX= 0271 /IMMEDIATE COMMAND ADDRESS END= 0134 /FIRST VARIABLE LOCATION IN 8K VERSION ENDT= 0135 /END OF TEXT POINTER LASTV= 0031 /ADDRESS OF LAST VARIABLE MODIFY= 1256 /MODIFY ROUTINE ADDRESS OUTDG= 6154 /OUTPUT ONE DIGIT ROUTINE PACKST= 0027 /RUBOUT PROTECTION WORD PC= 0022 /PROGRAM COUNTER PCK1= 2535 /PACK ONE HALFWORD ROUTINE PDLXR= 0013 /PUSHDOWN LIST AUTO-INDEX REGISTER PT1= 0030 /TEMPORARY FOR TDUMP ROUTINE, ETC. RECOVX= 2761 /RECOVERY ADDRESS RETRN= 1563 /ADDRESS OF RETURN ROUTINE RUB1= 3004 /RUBOUT ADDRESS START= 0177 /FOCAL'S INTERNAL STARTING ADDRESS TDUMP= 3052 /SYMBOL TABLE TYPEOUT ROUTINE THISLN= 0023 /LINE POINTER FOR FINDLN WALL= 0664 /WRITE COMMAND ADDRESS WRITE= 0635 /WRITE COMMAND ADDRESS WTEST2= 0653 /WRITE COMMAND ADDRESS XDELETE=2062 /DELETE ROUTINE ADDRESS XENDLN= 2360 /ENDLN ROUTINE XRT= 0011 /TEXT, ETC. AUTO-INDEX REGISTER / DEFINITIONS FROM P?S/8 FOCAL OVERLAY. NCOMEIN=3235 /NEW COMMAND BUFFER ADDRESS (IN 4K) P8K= 0167 /8K POINTERS START HERE REVISIO="D&77 /REVISION OF FOCPQS VERSION=12 /VERSION OF FOCPQS / MISCELLANEOUS DEFINITIONS. JMPIC= JMP I . /JUMP INDIRECT CURRENT PAGE DEFINITION TXTFLD= 10 /USE FIELD ONE FOR TEXT / DIRECT PATCHES TO THE RUNNING P?S/8 (4K) FOCAL. FIELD 0 /ENSURE FIELD ZERO *AXIN /OVER PACKING AUTO-INDEX REGISTER AXIN, INBUF /POINT TO NEW COMMAND BUFFER *PDLXR /OVER PDL AUTO-INDEX REGISTER PDLXR, LINE0 /SETUP COMMAND BUFFER PROTECTION VALUE *PC /OVER PC PC, ZEROPC /ZERO DATA IN TEXT FIELD *PACKST /OVER BUFFER START LOCATION PACKST, INBUF /SETUP RUBOUT PROTECTION *LASTV /LAST VARIABLE POINTER LASTV, NCOMEIN /USE OLD COMMAND BUFFER, OLD DUMMY LINE AS WELL *BUFR /USER TEXT POINTER BUFR, LINE1 /POINT TO NEW SPACE *COMBUF /OVER COMMAND BUFFER POINTER COMBUF, INBUF /POINT TO NEW INPUT BUFFER *CFRS /OVER START OF TEXT POINTER (DUMMY LINE) CFRS, LINE0 /POINT TO DUMMY LINE *END /OVER 8K END POINTER END, NCOMEIN /8K VARIABLE LIMIT *ENDT /OVER RESET VALUE FOR ERASE ENDT, LINE1 /POINT TO NEW SPACE *P8K /OVER AVAILABLE POINTER SPACE DAXIN, AXIND /DCA I AXIN ROUTINE POINTER DPC, PCD /TAD I PC ROUTINE POINTER DPT1, PT1D /TAD I PT1 ROUTINE POINTER DTHIS, THISD /TAD I THISLN ROUTINE POINTER DXRT, XRTD /TAD I XRT ROUTINE POINTER *START+2 /OVER TAD CFRSX NOP /JUST POINT TO LOCATION ZERO (ZEROPC) IN TEXT FIELD *COMBOT /OVER END OF COMMAND BUFFER POINTER COMBOT, LINE0 /WAS NCOMEOUT+12; NO BIAS NEEDED FOR PROTECTION *GONE+23 /OVER DCA I AXIN JMS I DAXIN/[AXIND] /CALL 8K STORE ROUTINE *INPUTX+2 /OVER TAD I PC JMS I DPC/[PCD] /CALL 8K READ ROUTINE *DGRP+11 /OVER TAD I XRT JMS I DXRT/[XRTD] /CALL 8K READ ROUTINE *DGRP1+4 /OVER TAD I PC JMS I DPC/[PCD] /CALL 8K READ ROUTINE *DGRP1+14 /OVER TAD I PT1 JMS I DPT1/[PT1D] /CALL 8K READ ROUTINE *DGRP1+17 /OVER TAD I PT1 JMS I DPT1/[PT1D] /CALL 8K READ ROUTINE *WRITE+15 /OVER TAD I THISLN JMS I DTHIS/[THISD] /CALL 8K READ ROUTINE *WTEST2+6 /OVER TAD I PT1 JMS I DPT1/[PT1D] /CALL 8K READ ROUTINE *WALL /OVER TAD I PT1 WALL, JMS I DPT1/[PT1D] /CALL 8K READ ROUTINE *MODIFY+7 /OVER DCA I AXIN JMS I DAXIN/[AXIND] /CALL 8K STORE ROUTINE *GS1+1 /OVER TAD STARTV TAD END /USE 8K END INSTEAD *RETRN /OVER TAD CFRSX NOP /JUST USE LOCATION ZERO IN TEXT FIELD (ZEROPC) *XDELETE+23 /OVER NOP CDF TXTFLD /USE TEXT FIELD *ERT+2 /OVER DCA I CFRS CDF TXTFLD /GOTO TEXT FIELD ERV, DCA I CFRS/[LINE0] /CLEAR FORWARD POINTER IN DUMMY LINE CDF 00 /BACK TO OUR FIELD *ERG+4 /OVER TAD I THISLN JMS I DTHIS/[THISD] /CALL 8K READ ROUTINE *ERG+6 /OVER JMP ERV JMP START /DON'T ERASE VARIABLES JMS I DTHIS/[THISD] /CALL 8K READ ROUTINE *ERVX /OVER TAD STARTV ERVX, TAD END /USE 8K END INSTEAD *FINDN+5 /OVER TAD I XRT JMS I DXRT/[XRTD] /CALL 8K READ ROUTINE *FINDN+14 /OVER TAD I THISLN JMS I DTHIS/[THISD] /CALL 8K READ ROUTINE *GET3+2 /OVER NOP CDF TXTFLD /USE TEXT FIELD *XENDLN+1 /OVER NOP CDF TXTFLD /USE TEXT FIELD *XENDLN+14 /OVER TAD STARTV CDF 00 /BACK TO OUR FIELD JMP I XENDLN /RETURN WITH VARIABLES INTACT *PCK1+4 /OVER DCA I AXIN JMS I DAXIN/[AXIND] /CALL 8K READ ROUTINE *PCK1+6 /OVER OVERFLOW CHECK NOP /WAS TAD PDLXR NOP /WAS CLL CIA TAD AXIN /GET INDEX CLL CMA /INVERT FOR TEST SZA CLA /SKIP IF FULL *RECOVX+6 /OVER TAD I PC JMS I DPC/[PCD] /CALL 8K READ ROUTINE *RUB1+14 /OVER NOP CDF TXTFLD /USE TEXT FIELD *TDUMP /OVER TAD STARTV TDUMP, TAD END /USE 8K END INSTEAD / 8K SUPPORT ROUTINES IN FIELD ZERO. *OUTDG+4 /OVER AVAILABLE SPACE AXIND, .-. /DCA I AXIN ROUTINE CIF TXTFLD /GOTO TEXT FIELD JMP DOAXIN /FINISH IT THERE PCD, .-. /TAD I PC ROUTINE CIF TXTFLD /GOTO TEXT FIELD JMP DOPC /FINISH IT THERE PT1D, .-. /TAD I PT1 ROUTINE CIF TXTFLD /GOTO TEXT FIELD JMP DOPT1 /FINISH IT THERE THISD, .-. /TAD I THISLN ROUTINE CIF TXTFLD /GOTO TEXT FIELD JMP DOTHISLN /FINISH IT THERE XRTD, .-. /TAD I XRT ROUTINE CIF TXTFLD /GOTO TEXT FIELD JMP DOXRT /FINISH IT THERE RJMP, .-. /WILL BE RETURN JUMP FIELD TXTFLD%10 /WHERE THE REST GOES *0 /START AT THE BEGINNING ZEROPC, ZBLOCK 2 /FOR COMMANDS, ETC. AXRETUR,AXIND&177+JMPIC /JMP I AXIND COMPTR, .-. /ARGUMENT ADDRESS STASHED HERE COMSAVE,.-. /AC SAVED HERE PAXIN, AXIN /POINTER TO AXIN PRJMP, RJMP /POINTER TO RJMP / FIELD ONE SUPPORT ROUTINES. DOAXIN, CDF 00 /ENSURE FIELD ZERO DCA COMSAVE /SAVE PASSED AC ISZ I PAXIN/[AXIN] /FAKE AUTO-INDEX OPERATION TAD I PAXIN/[AXIN] /GET BUMPED VALUE DCA COMPTR /STASH IT TAD AXRETU/[AXIND&177+JMPIC]/GET RETURN INSTRUCTION DCA I PRJMP/[RJMP] /SETUP RETURN CDF TXTFLD /GOTO OUR FIELD TAD COMSAVE /GET AC VALUE DCA I COMPTR /STORE IT JMP COMEXIT /FINISH IT THERE DOPC, JMS COMMON /DO COMMON STUFF PC /WITH PC PCD&177+JMPIC/JMP I PCD /RETURN INSTRUCTION DOPT1, JMS COMMON /DO COMMON STUFF PT1 /WITH PT1 PT1D&177+JMPIC/JMP I PT1D /RETURN INSTRUCTION DOTHISL,JMS COMMON /DO COMMON STUFF THISLN /WITH THISLN THISD&177+JMPIC/JMP I THISD /RETURN INSTRUCTION DOXRT, CDF 00 /ENSURE FIELD ZERO ISZ I PXRT/[XRT] /FAKE AUTO-INDEX OPERATION JMS COMMON /DO COMMON STUFF PXRT, XRT /WITH XRT XRTD&177+JMPIC/JMP I XRTD /RETURN INSTRUCTION COMMON, .-. /COMMON ROUTINE FOR SUPPORT ROUTINES DCA COMSAVE /SAVE PASSED AC CDF TXTFLD /GOTO OUR FIELD TAD I COMMON /GET ARGUMENT DCA COMPTR /STASH IT ISZ COMMON /BUMP TO NEXT TAD I COMMON /GET RETURN INSTRUCTION CDF 00 /GOTO MAIN FIELD DCA I PRJMP/[RJMP] /SETUP RETURN JUMP INSTRUCTION TAD I COMPTR /GET VALUE OF SPECIFIED POINTER DCA COMPTR /SET IT UP TAD COMSAVE /RESTORE AC CDF TXTFLD /GOTO OUR FIELD TAD I COMPTR /DO SPECIFIED OPERATION COMEXIT,CIF CDF 00 /GOTO MAIN FIELD JMP I PRJMP/[RJMP] /RETURN THERE INBUF, ZBLOCK 102 /COMMAND INPUT BUFFER / DUMMY LINE. LINE0, 0 /FORWARD POINTER 0 /LINE 00.00 TEXT "C 8K P" /TEXT BLURB "?-40^100+"S-300 /?S TEXT "/8 FOCAL V" /MORE TEXT VERSION%12^66+VERSION+6060 / REVISION^100+" -200 / 7715 / LINE1= . /AVAILABLE FOR USER TEXT FIELD 0 /RESET FIELD FOR NAIVE OVERLAYS $ /THAT'S ALL FOLK!