100 / NICOLET 1070 P?S/8 FOCAL PATCHES 110 120 / (C) 1984, 1985 CHARLES LASNER ASSOCIATES. 130 140 / LAST EDIT: 03-NOV-1985 10:00:00 CJL 150 160 / PATCHES TO P?S/8 FOCAL TO CONTROL THE NICOLET 1070 AVERAGER, ETC. 170 180 / ASSEMBLY INSTRUCTIONS: 190 200 / SET "BUFFLD" TO PROPER FIELD FOR FBLK (DEFAULT IS 20). 210 220 / SET "N" TO AMOUNT OF P?S/8 BLOCKS PER READ/WRITE FOR FBLK (DEFAULT IS 2). 230 / MUST BE A POWER OF TWO FOR PROPER OPERATION. 240 250 / SET "NICODE" TO PROPER BASE DEVICE CODE (DEFAULT IS 30). 260 270 / MAY BE ASSEMBLED WITH '/J' SWITCH SET. 280 290 / THESE ARE PATCHES TO P?S/8 FOCAL FOR THE IMPLEMENTATION OF THREE FUNCTIONS: 300 310 / 1): FBLK(BLOCKNUMBER[,WRITEINDICATOR]) 320 / 2): FWRD(ADDRESS[,NEWVALUE]) 330 / 3): FNIC(ADDRESS[,NEWVALUE]) 340 350 / FUNCTION FBLK READS IN N DISK BLOCKS INTO FIELD BUFFLD STARTING FROM THE 360 / BLOCK NUMBER PASSED. IF A SECOND ARGUMENT IS PASSED, THE BLOCKS ARE WRITTEN 370 / INSTEAD OF READ. THE UNIT USED FOR ALL I/O IS . 380 390 / FUNCTION FWRD RETURNS THE CONTENTS OF THE SPECIFIED LOCATION WHOSE ADDRESS 400 / IS THE FIRST ARGUMENT. IF A SECOND ARGUMENT IS PASSED, IT BECOMES THE NEW 410 / STORED VALUE. 420 430 / FUNCTION FNIC RETURNS THE CONTENTS OF THE SPECIFIED LOCATION IN THE AVERAGER 440 / WHOSE ADDRESS IS THE FIRST ARGUMENT. IF A SECOND ARGUMENT IS PASSED, IT 450 / BECOMES THE NEW STORED VALUE. THE FUNCTION RETURNS ZERO IF TWO ARGUMENTS ARE 460 / USED. 470 EJECT 480 / DEFINITIONS FROM FOCAL, 1969 (ORIGINAL PAPER-TAPE VERSION). 490 500 BOTTOM= 0035 /FOCAL PUSHDOWN LIMIT 510 CHAR= 0066 /FOCAL'S INPUT BUFFER 520 EFUN3I= 0136 /FUNCTION RETURN POINTER 530 EVAL= 1613 /EVALUATOR ENTRY POINT 540 FLAC= 0044 /FLOATING ACCUMULATOR HERE 550 FNTABF= 0374 /FUNCTION ADDRESS TABLE 560 FNTABL= 2165 /HASHED FUNCTION NAME TABLE 570 INTEGER=0053 /FLOATING TO FIXED CONVERSION POINTER 580 POPA= TAD I 13 /REMOVE WORD FROM STACK 590 POPJ= JMP I 141 /REMOVE AND RETURN FROM STACK 600 PUSHA= JMS I 142 /PUSH WORD ONTO STACK 610 PUSHJ= JMS I 140 /CALL WITH RETURN ON STACK 620 P7600= 0104 /CONSTANT 7600 630 P7700= 0101 /CONSTANT 7700 640 RETURN= JMP I EFUN3I /FUNCTION RETURN INSTRUCTION 650 660 / DEFINITIONS FROM P?S/8 FOCAL OVERLAY. 670 680 BEOFZAP=7505 /BINARY LOADER ZAP WORD 690 BONCE= 3600 /OVERLAY ONCE-ONLY ADDRESS 700 SBTFUN= 7602 /P?S/8 MONITOR BOOTSTRAP FUNCTION 710 SYSIO= 7640 /SYSTEM I/O ENTRY POINT 720 730 / MISCELLANEOUS DEFINITIONS. 740 750 IFNDEF BUFFLD /BUFFER FIELD FOR FBLK AND FWRD 760 IOT= 6000 /IOT BASE 770 IFNDEF N /NUMBER OF P?S/8 BLOCKS IN READ/WRITE 780 IFNDEF NICODE /BASE DEVICE CODE OF AVERAGER 790 NL4000= CLA CLL CML RAR /SET AC TO 4000 800 NL7777= CLA CMA /SET AC TO 7777 810 NSTART= 4035 /PATCH ASSEMBLY ADDRESS 820 EJECT 830 / AVERAGER IOT INSTRUCTIONS. 840 850 TSWEEP= NICODE^10+IOT 1 /SKIP IF SWEEP IN PROGRESS 860 TSTOP= NICODE^10+IOT 2 /SKIP IF AVERAGER IS STOPPED 870 PULSE= NICODE^10+IOT 4 /PULSE EXT ADDRESS ADVANCE TERMINAL 880 TREADY= NICODE+1^10+IOT 1 /SKIP IF AVERAGER IS IN P0 STATE 890 TCCF= NICODE+1^10+IOT 2 /SKIP IF COMPUTER CONTROL IS SET 900 TADCL= NICODE+1^10+IOT 4 /TRANSFER ADC CONTENTS TO L REGISTER 910 STARTM= NICODE+2^10+IOT 1 /START MEASURE PROGRAM 920 STARTR= NICODE+2^10+IOT 2 /START READOUT PROGRAM 930 STOP= NICODE+2^10+IOT 4 /STOP HARDWIRE PROGRAMS 940 LANDM= NICODE+3^10+IOT 1 /M+L=>M 950 WRITE= NICODE+3^10+IOT 2 /C(M)=>MEM(ADDRESS) 960 / = NICODE+3^10+IOT 4 /NOT USED 970 TACAS= NICODE+4^10+IOT 1 /C(AC)=>ADDRESS 980 READ= NICODE+4^10+IOT 2 /C(MEM(ADDRESS))=>M 990 / = NICODE+4^10+IOT 4 /NOT USED 1000 RMRL= NICODE+5^10+IOT 1 /RESET M AND L REGISTERS