/ MASTER DATA ACQUISITION PROGRAM XLIST 1 IFNDEF OFF ON= 0 XLIST ON; IFZERO 1 < MASTER PDP-8 AND PDP-12 DATA ACQUISITION PROGRAM. WRITTEN BY CHARLES J. LASNER. LAST EDIT: 26-DEC-1989 14:00:00 CJL MAY BE ASSEMBLED WITH '/J' SWITCH SET. MUST BE ASSEMBLED WITH '/8' SWITCH SET IF PDP12=1. MUST BE ASSEMBLED WITH '/9' SWITCH OFF. PROGRAM SUPPORTS AX08, LAB-8/E AND PDP-12 LABORATORY PERIPHERALS, PDP-8/I TYPE PROCESSORS (PDP-8/I, /L AND PDP-12) AND PDP-8/E TYPE PROCESSORS (PDP-8/E, /F, /M, AND /A). OPERATION IS NOT POSSIBLE ON PDP-5 OR PDP-8/S, HOWEVER OPERATION IS POSSIBLE ON PDP-8 IF SLIGHT MODIFICATIONS ARE IMPLEMENTED. > XLIST OFF IFNZRO PDP8E < XLIST ON; IFZERO 1 < THIS IS THE PDP-8/E VERSION > XLIST OFF > IFNZRO PDP8I < IFNZRO PDP12 < XLIST ON; IFZERO 1 < THIS IS THE PDP-12 VERSION > XLIST OFF > IFZERO PDP12 < XLIST ON; IFZERO 1 < THIS IS THE PDP-8/I VERSION > XLIST OFF > > IFNZRO AX08 < XLIST ON; IFZERO 1 < FOR AX08 LABORATORY PERIPHERAL > XLIST OFF > IFNZRO LAB8E < XLIST ON; IFZERO 1 < FOR LAB-8/E PERIPHERALS > XLIST OFF > IFNZRO DECTAPE < XLIST ON; IFZERO 1 < WHICH USES DECTAPE > XLIST OFF > IFNZRO LINCTAPE < XLIST ON; IFZERO 1 < WHICH USES LINCTAPE > XLIST OFF > IFNZRO FLOPPY < XLIST ON; IFZERO 1 < WHICH USES FLOPPY DISKS > XLIST OFF > IFNZRO MULTAPE < XLIST ON; IFZERO 1 < MULTIPLE DRIVE VERSION > XLIST OFF > XLIST ON / OPERATIONAL PARAMETERS: / AX08= 1 /USE AX08 LAB8E= 1 /USE LAB-8/E PERIPHERALS / PDP12= 1 /USE PDP-12 LAB PERIPHERALS BUFFLD= 10 /USE FIELD ONE FOR BUFFERS CHAN= 0 /USE SPECIAL 4-WORD MODE / CHAN= 2 /USE TWO CHANNEL A-D / CHAN= 4 /USE FOUR CHANNEL A-D / DECTAPE=1 /USE DECTAPE I/O FLOPPY= 1 /USE FLOPPY DISK I/O / LINCTAP=1 /USE LINCTAPE I/O ON PDP-12 MULTAPE=0 /USE ONE TAPE ONLY / MULTAPE=1 /USE TWO TAPES PDP8E= 1 /USE 8/E INTERRUPT HANDLING / PDP8I= 1 /USE 8/I INTERRUPT HANDLING / AX08DA= 1 /USE AX08 D-A OUTPUT AA01= 1 /USE AA01 (A. S.) D-A OUTPUT AACODE= 55 /DEVICE CODE OF AA01 (A. S.) D-A CONVERTOR / VC8E= 1 /USE LAB-8/E VC-8/E D-A OUTPUT / LIMIT= 6600/3300 /NUMBER OF BLOCKS ON OUTPUT DEVICE / LIMIT= 5600/2700 /NUMBER OF BLOCKS ON OUTPUT DEVICE LIMIT= 7740 /NUMBER OF BLOCKS ON OUTPUT DEVICE SCTSIZE=200 /NUMBER OF BLOCKS PER SECTION SECT= 0 /USE ENTIRE TAPE(S) WITHOUT SECTIONS / SECT= 1 /USE /A-/L TO SECTION THE TAPE(S) NERVAX= 0 /DON'T ALLOW SCHMITT TRIGGER INPUT IF AX08 2 CHANNEL / NERVAX= 1 /ALLOW SCHMITT TRIGGER INPUT IF AX08 2 CHANNEL TICKS= 20 /USE 16 100 US. TICKS FOR 2 CHANEL AX08 / UNIT= 6/7 /OUTPUT UNIT UNIT= 1 /OUTPUT UNIT XLIST OFF IFNDEF AX08 IFNDEF LAB8E IFNDEF PDP12 IFNZRO AX08+LAB8E+PDP12-1 IFNDEF DECTAPE IFNDEF FLOPPY IFNDEF LINCTAP IFNZRO DECTAPE+FLOPPY+LINCTAPE-1 IFNZRO LINCTAP!PDP12 IFNDEF PDP8E IFNDEF PDP8I IFNZRO PDP8E+PDP8I-1 IFNDEF CHAN IFNZRO CHAN&7771 IFNZRO CHAN%2&CHAN IFNDEF MULTAPE IFNZRO MULTAPE&7776 IFNZRO UNIT&MULTAPE IFNZRO AX08!LAB8E!PDP12&7776 IFNZRO DECTAPE!FLOPPY!LINCTAPE&7776 IFNZRO PDP8E!PDP8I&7776 IFNDEF AA01 IFNDEF AX08DA IFNDEF VC8E IFNDEF VC12 IFZERO AX08DA+AA01+VC8E < IFNZRO PDP12 > IFZERO AA01+VC12+VC8E IFZERO AX08DA+VC12+VC8E IFZERO AA01+AX08DA+VC12 XLIST ON / PROCESSOR DEFINITIONS. DKIE= 6435 /ENABLE/DISABLE VT-8/E INTERRUPT DVI= 7407 /DIVIDE NL0000= CLA /LOAD AC WITH 0000 NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL0003= CLA STL IAC RAL /LOAD AC WITH 0003 NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 NL0006= CLA STL IAC RTL /LOAD AC WITH 0006 NL0100= CLA IAC BSW /LOAD AC WITH 0100 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL5777= CLA CLL CMA RTR /LOAD AC WITH 5777 NL6000= CLA STL IAC RTR /LOAD AC WITH 6000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 SWBA= 7447 /SWITCH TO MODE "A" XLIST OFF IFNZRO AX08 < XLIST ON / AX08 DEFINITIONS. ACMX= 6371 /LOAD MULTIPLEXOR ADCV= 6364 /START CONVERSION CLER= 6351 /CLEAR A-D FLAGS CLRK= 6354 /CLEAR R-C CLOCK FLAG CLXK= 6352 /CLEAR CRYSTAL CLOCK FLAG C0= 0200 /CONTINGENCY BIT FOR TAKING DATA C1= 0100 /CONTINGENCY BIT FOR PAUSE XLIST OFF IFNZRO AX08DA < XLIST ON DIS= 6304 /INTENSIFY DSB= 6324 /SET BRIGHTNESS DXC= 6301 /CLEAR X DXL= 6302 /OR X WITH AC DYC= 6311 /CLEAR Y DYL= 6312 /OR Y WITH AC XLIST OFF > XLIST ON ICMX= 6361 /INCREMENT MULTIPLEXOR CHANNEL OTEN= 6344 /ONES TO ENABLE, CLEAR AC RADC= 6362 /LOAD AC WITH A-D VALUE, CLEAR FLAG SKAD= 6332 /SKIP ON A-D DONE FLAG SKER= 6322 /SKIP ON A-D TIMING ERROR FLAG SKRK= 6341 /SKIP ON R-C CLOCK FLAG SKXK= 6321 /SKIP ON CRYSTAL CLOCK FLAG XLIST OFF IFNZRO CHAN-4 < XLIST ON S2= 1000 /SCHMITT TRIGGER INPUT BIT XLIST OFF > XLIST ON XRCL= 6334 /CLEAR EXTERNAL BITS SET IN AC XRIN= 6331 /OR EXTERNAL BITS, AC ZTEN= 6342 /ZEROES CLEAR ENABLE XLIST OFF > IFNZRO LAB8E < XLIST ON / LAB-8/E DEFINITIONS. ADCL= 6530 /CLEAR ALL A-D FLAGS, ETC. ADLE= 6536 /LOAD ENABLE OF A-D ADLM= 6531 /LOAD MULTIPLEXOR ADRB= 6533 /LOAD AC WITH A-D VALUE ADRS= 6537 /READ A-D STATUS ADSE= 6535 /SKIP ON A-D TIMING ERROR FLAG ADSK= 6534 /SKIP ON A-D DONE FLAG ADST= 6532 /START A-D CLAB= 6133 /AC TO PRESET REGISTER CLBA= 6136 /BUFFER TO AC CLCA= 6137 /COUNTER TO AC CLEN= 6134 /CLOCK ENABLE TO AC CLOE= 6132 /ONES SET CLOCK ENABLE CLSA= 6135 /CLOCK STATUS TO AC, CLEAR CLOCK FLAG CLSK= 6131 /SKIP ON CLOCK FLAG CLZE= 6130 /ONES CLEAR CLOCK ENABLE DBCI= 6503 /ONES CLEAR INPUT REGISTER DBCO= 6505 /ONES CLEAR OUTPUT REGISTER DBDI= 6500 /DISABLE DIGITAL I/O INTERRUPTS DBEI= 6501 /ENABLE DIGITAL I/O INTERRUPTS DBRI= 6504 /LOAD INPUT REGISTER INTO AC DBRO= 6507 /LOAD OUTPUT REGISTER INTO AC DBSK= 6502 /SKIP ON INPUT FLAG DBSO= 6506 /ONES SET OUTPUT REGISTER XLIST OFF IFNZRO VC8E < XLIST ON DICD= 6051 /CLEAR DISPLAY DONE FLAG DILC= 6050 /CLEAR ALL DISPLAY FLAGS, ETC. DILE= 6056 /LOAD ENABLE FROM AC, CLEAR AC DILX= 6053 /LOAD X DILY= 6054 /LOAD Y DIRE= 6057 /READ DISPLAY STATUS DISD= 6052 /SKIP ON DISPLAY DONE DIXY= 6055 /INTENSIFY XLIST OFF > XLIST ON LKRB= 6406 /READ MODEM CHARACTER LKSF= 6401 /SKIP ON MODEM CHARACTER RECEIVED FLAG XLIST OFF > IFNZRO PDP12 < XLIST ON / PDP-12 DEFINITIONS. CLAB= 6133 /AC TO PRESET REGISTER CLCA= 6137 /COUNTER TO AC CLR= 0011 /CLEAR AC, LINK, MQ CLEN= 6134 /CLOCK ENABLE CLLR= 6132 /CLOCK CONTROL CLSA= 6135 /STATUS TO AC, CLEAR FLAG CLSK= 6131 /SKIP ON CLOCK LKRB= 6406 /READ MODEM CHARACTER LKSF= 6401 /SKIP ON MODEM CHARACTER RECEIVED FLAG XCOORD= 0003 /"X" COORDINATE FOR DIS INSTRUCTIONS XLIST OFF > XLIST ON XLIST OFF IFNZRO DECTAPE < XLIST ON / DECTAPE DEFINITIONS. DTCA= 6762 /CLEAR "A" REGISTER DTLA= 6766 /LOAD STATUS "A" REGISTER DTLB= 6774 /LOAD STATUS "B" REGISTER DTRA= 6761 /READ STATUS "A" REGISTER DTRB= 6772 /READ STATUS "B" REGISTER DTSF= 6771 /SKIP ON DECTAPE OR ERROR FLAG DTXA= 6764 /XOR AC WITH STATUS "A" REGISTER UNITCOM=UNIT^1000 /DECTAPE COMMAND BITS XLIST OFF > IFNZRO FLOPPY < XLIST ON / MDC8 FLOPPY DEFINITIONS. DEVCODE=70 /USES 670X DMA= 4000 /DMA INDICATOR DMUNIT= UNIT&1+2^40 /COMMAND UNIT DSEI= DEVCODE^10+6000 /INTERRUPT ENABLE/DISABLE PER AC[11] DSSF= DEVCODE^10+6001 /SKIP ON DONE FLAG DSCF= DEVCODE^10+6002 /CLEAR DONE FLAG DSHI= DEVCODE^10+6003 /LOAD HIGH-ORDER COMMAND ADDRESS DSGO= DEVCODE^10+6004 /LOAD LOW-ORDER COMMAND AND GO / = DEVCODE^10+6005 /UNUSED DSRS= DEVCODE^10+6006 /READ STATUS DSIM= DEVCODE^10+6007 /INTERFACE MAINTENANCE INSTRUCTION XLIST OFF > IFNZRO LINCTAP < XLIST ON / LINCTAPE DEFINITIONS. LMR= 6151 /LOAD MAINTENANCE REGISTER (FOR TAPE FUNCTIONS) TAPFLD= BUFFLD^100 /TAPE TRANSFER FIELD XLIST OFF > IFNZRO LAB8E-1&VC8E < XLIST ON / OUTPUT CONVERTER DEFINITIONS. DICD= 6051 /CLEAR DISPLAY DONE FLAG DILC= 6050 /CLEAR ALL DISPLAY FLAGS, ETC. DILE= 6056 /LOAD ENABLE FROM AC, CLEAR AC DILX= 6053 /LOAD X DILY= 6054 /LOAD Y DIRE= 6057 /READ DISPLAY STATUS DISD= 6052 /SKIP ON DISPLAY DONE DIXY= 6055 /INTENSIFY XLIST OFF > IFNZRO AX08-1&AX08DA < XLIST ON / OUTPUT CONVERTER DEFINITIONS. DIS= 6304 /INTENSIFY DSB= 6324 /SET BRIGHTNESS DXC= 6301 /CLEAR X DXL= 6302 /OR X WITH AC DYC= 6311 /CLEAR Y DYL= 6312 /OR Y WITH AC XLIST OFF > IFNZRO AA01 < XLIST ON / OUTPUT CONVERTER DEFINITIONS. DAL1= AACODE^10+6001 /LOAD "X" CONVERTER DAL2= AACODE^10+6002 /LOAD "Y" CONVERTER DINT= AACODE^10+6004 /INTENSIFY XLIST OFF > XLIST ON / P?S MONITOR DEFINITIONS. SBOOT= 7600 /SYSTEM BOOTSTRAP LOCATION SCRSIZE=7611 /SOFTWARE CORE SIZE SDATE= 7610 /CURRENT DATE WORD SFILES= 7757 /FILE LIST PASSED HERE SPARM= 7756 /EQUALS PARAMETER PASSED HERE SWAL= 7604 /SWITCHES /A-/L SWMX= 7605 /SWITCHES /M-/X SWY9= 7606 /SWITCHES /Y-/9 SYSIO= 7640 /I/O ENTRY POINT XLIST OFF IFNZRO MULTAPE < XLIST ON / DEVICE SIZE DEFINITIONS. LIMHAF= LIMIT%2 /NUMBER OF BLOCKS ON FIRST DEVICE XLIST OFF > XLIST ON PAGE 0 /START AT THE BEGINNING INTPC, .-. /INTERRUPT P. C. STORED HERE XLIST OFF IFNZRO CHAN%2&AX08 < XLIST ON SKXK /CRYSTAL CLOCK FLAG? JMP I (INTER) /NO, TRY OTHER FLAGS CLXK /YES, CLEAR CLOCK FLAG ISZ CLKCNT /CLOCK OVERFLOW? JMP CLKREG /NO, JUST ANOTHER TICK ADCV /YES, START A CONVERSION NOW JMP I (CLKOVFL) /CONTINUE IT THERE CLKREG, ION /RESTORE INTERRUPTS RMF /AND PRIOR MEMORY FIELDS JMP I INTPC /RETURN TO BACKGROUND XLIST OFF > IFZERO CHAN%2&AX08 < XLIST ON JMP I (INTER) /SERVICE INTERRUPTS THERE XLIST OFF > XLIST ON *16 /DEFINE AUTO-INDEX AREA XR1, .-. /STACK POINTER XR2, .-. /STACK TEMPORARY AC, .-. /INTERRUPT AC SAVED HERE ADTEMX, .-. /"X" DISPLAY VALUE STORED HERE ADTEMY, .-. /"Y" DISPLAY VALUE STORED HERE BAR, -1 /TIMER TEMPORARY BLKTMP, .-. /BLOCK TEMPORARY BLIMIT, -LIMIT /HIGH BLOCK LIMIT CLKAC, .-. /AC SAVED HERE CLKCNT, -1 /SOFTWARE CLOCK COUNTER CLKLNK, .-. /LINK SAVED HERE DBLK, .-. /LATEST BLOCK NUMBER DFUN, .-. /I/O FUNCTION DNCB, .-. /BLOCK COUNT DSEG, .-. /LATEST TRANSFER ADDRESS (-1) FLAGS, .-. /INTERRUPT FLAGS FOO, .-. /ADDRESS TEMPORARY FOOBAR, .-. /TIME WASTER LIMPTR, LIMTBL /SECTION TABLE POINTER LOWBLK, 0 /STARTING BLOCK FOR ENTIRE DATA TRANSFER NRVTMP, .-. /FIRING TEMPORARY PATTERN,2525 /NULL JOB LIGHT PATTERN PLINK, .-. /LINK SAVED HERE PTR, .-. /BUFFER POINTER TBLK, .-. /TAPE BLOCK / MAIN DRIVER FOR DATA PROGRAM. PAGE XLIST OFF IFNZRO PDP8E < XLIST ON START, CAF /CLEAN UP DKIE /PREVENT VT-8/E INTERRUPTS SWBA /MAKE SURE MODE "A" NOP /IN CASE WE'RE AN 8/I CLA CLL /CLEAN UP XLIST OFF > IFNZRO PDP8I < XLIST ON START, CLA CLL /CLEAN UP XLIST OFF > XLIST ON MQL /MQ ALSO XLIST OFF IFNZRO CHAN%2!CHAN&2%2-1&AX08 < XLIST ON TAD [2304] /SETUP FOR A-D START ON R-C CLOCK, /A-D DONE, TIMING ERROR INTERRUPT, /EXTERNAL R-C CLOCK TIMING XLIST OFF > IFNZRO CHAN%2&AX08 < XLIST ON TAD [0604] /SETUP FOR CRYSTAL CLOCK, /SCHMITT TRIGGER, AND A-D /TIMING ERROR INTERRUPT XLIST OFF > IFNZRO CHAN%4&AX08 < XLIST ON TAD [2302] /SETUP FOR A-D START ON R-C CLOCK, /A-D DONE, TIMING ERROR INTERRUPT, /INTERNAL R-C *1 CLOCK TIMING XLIST OFF > IFNZRO AX08 < XLIST ON OTEN ZTEN /LOAD ENABLE REGISTER CLER /CLEAR A-D ERROR ACMX /INITIALIZE FOR CHANNEL ZERO NL7777 /SETUP TO CLEAR XRCL /ALL EXTERNAL BITS XLIST OFF > IFNZRO LAB8E < XLIST ON DBDI /DISABLE EXTERNAL INTERRUPTS CLSA /CLEAR THE CLOCK NOW CLA /CLEAN UP TAD [-3100] /SETUP THE CLAB /CLOCK BUFFER REGISTER CLA /CLEAN UP XLIST OFF IFZERO CHAN&4 < XLIST ON TAD [500] /ENABLE TIMING ERROR INTERRUPT, /MULTIPLEXOR CHANNEL AUTO-INCREMENT XLIST OFF > IFNZRO CHAN%4 < XLIST ON TAD [700] /ENABLE TIMING ERROR INTERRUPT, EXTERNAL START, /MULTIPLEXOR CHANNEL AUTO-INCREMENT XLIST OFF > XLIST ON ADLE /LOAD ENABLE REGISTER NL0004 /SETUP MULTIPLEXOR ADLM /FOR CHANNEL FOUR XLIST OFF IFZERO CHAN&4 < XLIST ON TAD [6611] /ENABLE OVERFLOW, MODE 10, 1 MHZ., CLOCK /INTERRUPT, SCHMITT TRIGGER NUMBER 1 XLIST OFF > IFNZRO CHAN%4 < XLIST ON TAD [5650] /ENABLE OVERFLOW, MODE 01, /1 MHZ., CLOCK INTERRUPT, A-D START XLIST OFF > XLIST ON CLOE /LOAD ONES CMA /INVERT CLZE /LOAD ZEROES XLIST OFF > IFNZRO PDP12 < XLIST ON TAD [200] /GET TAPE CLEAR BIT LMR /CLEAR TAPE FLAG TAD [1500-200] /ENABLE 400 KHZ, MODE 01, /A-D STARTUP ON OVERFLOW CLLR /LOAD CLOCK ENABLE REGISTER XLIST OFF IFZERO CHAN%4 < XLIST ON TAD [0303-1500] /ENABLE CHANNEL 3 INTERRUPT, /OVERFLOW INTERRUPT, INITIALLY /OR BUFFER INTO COUNTER CLEN /LOAD CLOCK ENABLE REGISTER TAD [-1200-0303] /GET RESET VALUE XLIST OFF > IFNZRO CHAN%4 < XLIST ON TAD [0300-1500] /ENABLE OVERFLOW INTERRUPT, /INITIALLY OR BUFFER INTO COUNTER CLEN /LOAD CLOCK ENABLE REGISTER TAD [-1200-0300] /GET RESET VALUE XLIST OFF > XLIST ON CLAB /LOAD BUFFER/PRESET REGISTER LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ALSO LDA I; 100 /GET A-D START BIT ESF /GOTO FAST-SAMPLE MODE SAM 10 /SETUP THE CHANNEL PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ABOUT IT XLIST OFF > XLIST ON NL2000 /SETUP THE DCA XR1 /STACK POINTER XLIST OFF IFNZRO AX08DA < XLIST ON DSB 2 /SET HIGH BRIGHTNESS XLIST OFF > XLIST ON XLIST OFF IFNZRO FLOPPY < XLIST ON DSRS /GET STATUS NOW SPA CLA /SHOULD BE IDLE JMP .-2 /ELSE WAIT FOR IT NL0001 /SET INTERRUPT ENABLE BIT DSEI /ENABLE MDC8 INTERRUPTS XLIST OFF > XLIST ON XLIST OFF IFZERO SECT < XLIST ON ION /ALLOW INTERRUPTS NOW XLIST OFF > IFNZRO SECT < XLIST ON TAD I [SWAL] /GET THE SWITCHES /A-/L SNA /SKIP IF ANY SET JMP REGLAR /FORGET IT SWLOP, SPA /THIS ONE SET? JMP FOUNDIT /YES RAL /NO, MOVE UP ONE BIT ISZ LIMPTR /POINT TO NEXT SECTION LIMIT JMP SWLOP /TRY AGAIN FOUNDIT,CLA /CLEAN UP TAD I LIMPTR /GET THIS LIMIT DCA LOWBLK /SAVE AS LOWER TRANSFER BLOCK ISZ LIMPTR /BUMP TO NEXT TAD I LIMPTR /GET NEXT LIMIT CIA /INVERT IT DCA BLIMIT /USE AS BLOCK LIMIT REGLAR, ION /ALLOW INTERRUPTS NOW XLIST OFF > XLIST ON CLA CLL /INSURE A READ TAD LOWBLK /GET FIRST DATA BLOCK JMS I [BLKIO] /HAVE IT READ IN XLIST OFF IFNZRO MULTAPE < XLIST ON TAD [LIMHAF] /LINK IS CLEAR, AC= FIRST BLOCK ON /SECOND UNIT SO GO POSITION THE JMS I [BLKIO] /SECOND TAPE TO THE BEGINNING XLIST OFF > XLIST ON XLIST OFF IFNZRO AX08 < XLIST ON WAIT, NL7777 /TRY TO XRCL /CLEAR ALL BITS JMS WAITROUTINE /UPDATE THE LIGHTS XRIN XRCL /GET THE INPUT REGISTER AND [C0] /JUST CONTROL BIT SNA CLA /SKIP IF SET JMP WAIT /JUMP IF NOT IOF /PREVENT PROBLEMS ACMX /RESET A-D MULTIPLEXOR CHANNEL CLER /CLEAR RESIDUAL TIMING ERROR XLIST OFF > IFNZRO LAB8E < XLIST ON WAIT, JMS WAITROUTINE /UPDATE THE LIGHTS DBRI /GET SOME INPUT AND [200] /JUST BIT[4] DBCI /TRY TO CLEAR IT SNA CLA /SKIP IF EXTERNAL SEARCH READY JMP WAIT /JUMP IF NOT IOF /PREVENT PROBLEMS ADCL /CLEAR RESIDUAL TIMING ERROR NL0004 /RESET THE ADLM /MULTIPLEXOR CHANNEL XLIST OFF IFZERO CHAN&4 < XLIST ON TAD [500] /RESTORE THE STATUS REGISTER XLIST OFF > IFNZRO CHAN%4 < XLIST ON TAD [700] /RESTORE THE STATUS REGISTER XLIST OFF > XLIST ON ADLE /TO INITIAL VALUES XLIST OFF > IFNZRO PDP12 < XLIST ON WAIT, JMS WAITROUTINE /UPDATE THE LIGHTS CIF 00 /PREVENT LINC INTERRUPTS LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT SXL I 0 /SKIP IF EXTERNAL BIT SET COM /COMPLEMENT IF NOT PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ABOUT IT SPA CLA /WAS IT SET? JMP WAIT /NO, TRY AGAIN LINC /BACK TO L...MODE LMODE /TELL ASSEMBLER ALSO SAM 10 /SET MULTIPLEXOR CHANNEL PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ALSO XLIST OFF > XLIST ON XLIST OFF IFZERO CHAN-2 < XLIST ON NL0002 /SET THE INITIAL XLIST OFF > IFNZRO CHAN-2 < XLIST ON NL0004 /SET THE INITIAL XLIST OFF > XLIST ON DCA PTR /BUFFER POINTER DCA DBLK /USE BLOCK ZERO NL7777 /SETUP DCA DSEG /TRANSFER ADDRESS XLIST OFF IFNZRO DECTAPE < XLIST ON TAD [150] /GET WRITE VALUE XLIST OFF > IFNZRO FLOPPY < XLIST ON TAD [12] /GET WRITE VALUE XLIST OFF > IFNZRO LINCTAPE < IFNZRO UNIT&1 < XLIST ON TAD [WRI U] /GET WRITE INSTRUCTION XLIST OFF > IFZERO UNIT&1 < XLIST ON TAD [WRI] /GET WRITE INSTRUCTION XLIST OFF > XLIST OFF > XLIST ON DCA DFUN /SETUP WRITE OPERATION ION /TURN INTERRUPTS ON CHECK, NL4000 /GET BUFFER-HALF BIT AND PTR /GET CURRENT HALF TAD DSEG /COMPARE TO DEVICE BUFFER SMA CLA /SKIP IF SAME BUFFER AS BEFORE JMS I [DEVIO] /WRITE OUT LATEST BUFFER NULJOB, JMS WAITROUTINE /UPDATE THE LIGHTS TAD DNCB /CURRENT OPERATION DONE? SZA CLA /SKIP IF SO JMP NULJOB /JUMP IF NOT XLIST OFF IFNZRO AX08 < XLIST ON XRIN /GET EXTERNAL REGISTER AND [C0] /JUST CONTINGENCY BIT XRCL /TRY TO CLEAR IT SNA CLA /SKIP IF STILL SET XLIST OFF > IFNZRO LAB8E < XLIST ON DBRI /GET INPUT REGISTER AND [200] /JUST BIT[4] DBCI /TRY TO CLEAR IT SNA CLA /SKIP IF STILL SET XLIST OFF > IFNZRO PDP12 < XLIST ON CIF 00 /PREVENT LINC INTERRUPTS LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT SXL I 0 /CHECK IF EXTERNAL LEVEL STILL ON COM /COMPLEMENT AC IF WE GET HERE PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ALSO SPA CLA /SKIP IF STILL SET XLIST OFF > XLIST ON JMP WRTLAST /JUMP IF NOT CLL /CLEAR LINK FOR TEST TAD DBLK /GET LAST BLOCK TAD BLIMIT /COMPARE TO LIMIT SNL CLA /SKIP IF WE CANT'T GO FURTHER JMP CHECK /ELSE KEEP GOING WRTLAST,TAD DBLK /GET LAST BLOCK AND [7740] /JUST WHOLE FIELD BITS DCA BLKTMP /SAVE IT FOR LATER XLIST OFF IFNZRO AX08 < XLIST ON ZTEN /PREVENT CLOCK PROBLEMS XLIST OFF > IFNZRO LAB8E < XLIST ON NL7777 /TURN OFF CLZE /THE CLOCK XLIST OFF > IFNZRO PDP12 < XLIST ON CLLR /TURN OFF CLEN /THE CLOCK XLIST OFF > XLIST ON CLA CLL /CLEAN UP AND ENSURE A READ TAD LOWBLK /GET FIRST DATA BLOCK AGAIN JMS I [BLKIO] /HAVE IT READ IN AGAIN TAD BLKTMP /GET THE HIGHEST BLOCK CDF BUFFLD /GOTO BUFFER FIELD DCA I [4000] /STORE IN BUFFER XLIST OFF IFNZRO MULTAPE < XLIST ON TAD [LIMHAF] /GET STARTING BLOCK OF SECOND TAPE DCA I [4001] /STORE IN BUFFER XLIST OFF > XLIST ON CDF 00 /BACK TO FIELD 0 STL /INDICATE WRITING TAD LOWBLK /GET FIRST DATA BLOCK NUMBER JMS I [BLKIO] /HAVE IT WRITTEN BACK AFTER THE UPDATE IOF /PREVENT TAPE ROCK IF APPLICABLE JMP I [SBOOT] /BYE, BYE! WAITROU,.-. /WAIT ROUTINE LAS /GET SWITCHES SMA CLA /SKIP IF HIGH-BIT SET TAD [RAR-RAL] /ELSE CHANGE DIRECTION TAD [CMA CML RAL] /GET BASE INSTRUCTION DCA INST /STORE IN-LINE LAS /GET SWITCHES DCA FOO /SAVE THEM ISZ BAR /ENOUGH TIMES? JMP LOADIT /NO, JUST DO IT NL7775 /YES, RESET DCA BAR /THE COUNTER TAD PLINK /GET PATTERN LINK CLL RAL /MOVE TO LINK TAD PATTERN /GET THE PATTERN INST, CMA CML RAR /COULD BE CMA CML RAL DCA PATTERN /STORE BACK RAR /GET THE LINK DCA PLINK /SAVE FOR NEXT TIME LOADIT, TAD I FOO /GET THE CONTENTS MQL /DISPLAY IT TAD PATTERN /GET THE PATTERN ISZ FOOBAR /WASTE JMP .-1 /SOME TIME CLA /CLEAN UP JMP I WAITROUTINE /RETURN PAGE XLIST OFF IFNZRO CHAN%2&AX08 < XLIST ON CLKOVFL,DCA CLKAC /SAVE INTERRUPT AC RAL /GET THE LINK DCA CLKLNK /SAVE IT ALSO CDF BUFFLD /GOTO BUFFER FIELD TAD [-TICKS] /RELOAD THE DCA CLKCNT /CLOCK COUNTER SKAD /A-D DONE YET? JMP .-1 /NO, WAIT FOR IT ICMX RADC ADCV /YES, READ IT IN AND START THE NEXT ONE XLIST OFF IFNZRO NERVAX < XLIST ON AND [774] /MAKE IT SEVEN BITS XLIST OFF > XLIST ON DCA ADTEMX /SAVE IT TAD ADTEMX /GET IT BACK XLIST OFF IFNZRO NERVAX < XLIST ON CLL RTR /MOVE OVER TWO BITS XLIST OFF > XLIST ON DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT SKAD /A-D DONE YET? JMP .-1 /NO, WAIT FOR IT ACMX RADC /YES, READ IT IN AND SETUP FOR NEXT TIME XLIST OFF IFNZRO NERVAX < XLIST ON AND [774] /JUST SEVEN BITS WORTH XLIST OFF > XLIST ON XLIST OFF IFNZRO AX08DA < XLIST ON DYC DYL /DISPLAY IT AS "Y" CHANNEL XLIST OFF IFNZRO NERVAX < XLIST ON CLL RTR /MOVE OVER XLIST OFF > XLIST ON XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE OVER RAL /THREE BITS DAL2 /LOAD Y RTR /MOVE BACK RTR /TO THE LOWER RAR /SEVEN BITS XLIST OFF > IFNZRO VC8E < XLIST ON CLL RAL /MOVE OVER DILY /DISPLAY "Y" CHANNEL VALUE RAR /MOVE BACK RTR /TO LOW SEVEN BITS XLIST OFF > XLIST ON DCA I PTR /STORE IN THE BUFFER TAD ADTEMX /GET "X" VALUE XLIST OFF IFNZRO AX08DA < XLIST ON TAD [400] /CENTER IT DXC DXL DIS /DISPLAY IT XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE OVER RAL /THREE BITS DAL1 /LOAD X XLIST OFF > IFNZRO VC8E < XLIST ON CLL RAL /MOVE OVER DILX /LOAD "X" CHANNEL DISD /WAIT UNTIL JMP .-1 /DISPLAY IS READY AGAIN DIXY /INTENSIFY NOW XLIST OFF > XLIST ON CLA /CLEAN UP TAD CLKLNK /GET THE SAVED LINK RAR /RESTORE IT TAD CLKAC /RESTORE AC RMF /RESTORE PRIOR MEMORY FIELDS XLIST OFF IFNZRO AA01 < XLIST ON DINT /INTENSIFY NOW XLIST OFF > XLIST ON ION /RESTORE INTERRUPTS ISZ PTR /BUMP TO NEXT JMP I INTPC /RETURN TO BACKGROUND JMP I INTPC /JUST IN CASE IT SKIPS! XLIST OFF > IFNZRO CHAN%2&LAB8E < XLIST ON NERVE, CLA /CLEAN UP TAD CLKCNT /GET CLOCK COUNTER AT FIRING TIME TAD [3100] /ADJUST TO RANGE 0-3077 MQL DVI;144 /DIVIDE INTO RANGE 0-17 CLA MQA /0 0 0 0 0 0 0 0 0 D D D D RTR /D D 0 0 0 0 0 0 0 0 0 D D RTR /D D D D 0 0 0 0 0 0 0 0 0 IAC RTR /0 1 D D D D 0 0 0 0 0 0 0 MQL /SAVE FIRING INFORMATION NL7776 /BACKUP TAD PTR /TO THE DCA NRVTMP /PREVIOUS PAIR TAD I NRVTMP /GET PREVIOUS MQA /OR IN FIRING INFORMATION DCA I NRVTMP /STORE COMPOSITE JMP INTXIT /FINISH IT THERE XLIST OFF > IFNZRO CHAN%2!CHAN&2%2-1&LAB8E < XLIST ON NERVE, NL7776 /BACKUP TAD PTR /TO WHERE DCA NRVTMP /FIRING GOES TAD CLKCNT /GET CLOCK COUNTER TAD [3100+4000] /ADJUST TO 0-3077+4000 DCA I NRVTMP /STORE IN THE BUFFER JMP INTXIT /FINISH IT THERE XLIST OFF > IFNZRO CHAN%2&PDP12 < XLIST ON NERVE, CLA /CLEAN UP TAD CLKCNT /GET CLOCK COUNTER AT FIRING TIME TAD [1200-0000] /ADJUST TO RANGE 0-1177 MQL DVI;50 /DIVIDE INTO RANGE 0-17 CLA MQA /0 0 0 0 0 0 0 0 0 D D D D RTR /D D 0 0 0 0 0 0 0 0 0 D D RTR /D D D D 0 0 0 0 0 0 0 0 0 IAC RTR /0 1 D D D D 0 0 0 0 0 0 0 MQL /SAVE FIRING INFORMATION NL7776 /BACKUP TAD PTR /TO THE DCA NRVTMP /PREVIOUS PAIR TAD I NRVTMP /GET PREVIOUS MQA /OR IN FIRING INFORMATION DCA I NRVTMP /STORE COMPOSITE JMP INTXIT /FINISH IT THERE XLIST OFF > IFNZRO CHAN%2!CHAN&2%2-1&PDP12 < XLIST ON NERVE, NL7776 /BACKUP TAD PTR /TO WHERE DCA NRVTMP /FIRING GOES TAD CLKCNT /GET CLOCK COUNTER TAD [1200+4000-0000]/ADJUST TO RANGE 0-1177+4000 DCA I NRVTMP /STORE IN THE BUFFER JMP INTXIT /FINISH IT THERE XLIST OFF > XLIST ON INTER, DCA I XR1 /SAVE AC MQA /GET MQ DCA I XR1 /SAVE THAT TOO XLIST OFF IFNZRO PDP8E < XLIST ON GTF /GET INTERRUPT FLAGS + LINK XLIST OFF > IFNZRO PDP8I < XLIST ON RTR /MOVE LINK RAR /TO AC[2] RIB /GET CURRENT INTERRUPT FIELDS XLIST OFF > XLIST ON DCA I XR1 /SAVE ON STACK TAD INTPC /GET PROGRAM COUNTER DCA I XR1 /SAVE ALSO NL2000 /-6000 TAD XR1 /COMPARE TO STACK POINTER SMA CLA /SKIP IF STILL OK HLT /BARF XLIST OFF IFNZRO CHAN%2&AX08 < XLIST ON NERVE, XRIN /GET EXTERNAL INPUT AND [S2] /JUST SCHMITT TRIGGER BIT SNA /SKIP IF SET JMP I [TRYWRT] /JUMP IF NOT XRCL /CLEAR THE TRIGGER BIT CDF BUFFLD /GOTO BUFFER FIELD NL7776 /-2 TAD PTR /BACKUP TO PREVIOUS PAIR DCA NRVTMP /SAVE OUR POINTER TAD CLKCNT /GET CURRENT CLOCK COUNTER ION /SAFE TO COME OUT NOW! TAD [40] /L 0 0 0 0 0 0 0 1 C C C C XLIST OFF IFNZRO PDP8E < XLIST ON CLL RAL /0 0 0 0 0 0 0 1 C C C C 0 BSW /0 1 C C C C 0 0 0 0 0 0 0 XLIST OFF > IFNZRO PDP8I < XLIST ON CLL RTR /C C 0 0 0 0 0 0 0 0 1 C C RTR /C C C C 0 0 0 0 0 0 0 0 1 RTR /0 1 C C C C 0 0 0 0 0 0 0 XLIST OFF > XLIST ON TAD I NRVTMP /0 1 C C C C D D D D D D D DCA I NRVTMP /STORE THE COMPOSITE BACK XLIST OFF > IFNZRO CHAN%4&AX08 < XLIST ON ADCHEK, SKAD /A-D INTERRUPT? JMP I [TRYWRT] /NO ICMX RADC ADCV /YES, READ IT IN AND START NEXT ONE CLRK /CLEAR THE R-C CLOCK FLAG NOW CDF BUFFLD /GOTO BUFFER FIELD DCA I PTR /STORE IN THE BUFFER TAD I PTR /GET IT BACK TAD [400] /CENTER IT DCA ADTEMX /SAVE AS "X" CHANNEL FOR LATER ISZ PTR /BUMP TO NEXT ICMX RADC ADCV /READ IN VALUE AND STARTUP NEXT DCA I PTR /STORE IN THE BUFFER TAD I PTR /GET IT BACK DCA ADTEMY /SAVE AS "Y" CHANNEL FOR LATER ISZ PTR /BUMP TO NEXT SKAD /A-D DONE YET? JMP .-1 /NO, WAIT FOR IT ICMX RADC ADCV /YES, READ IT IN AND START NEXT DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT SKAD /A-D DONE YET? JMP .-1 /NO, WAIT FOR IT ACMX RADC /YES, READ IT IN AND SET CHANNEL FOR NEXT TIME DCA I PTR /STORE IN THE BUFFER TAD ADTEMX /GET "X" DISPLAY DXC DXL /LOAD IT CLA /CLEAN UP TAD ADTEMY /GET "Y" DISPLAY DYC DYL DIS /LOAD IT AND INTENSIFY SCOPE ISZ PTR /BUMP TO NEXT XLIST OFF > IFNZRO CHAN%2&LAB8E < XLIST ON CLOCK, CLSK /CLOCK INTERRUPT? JMP I [TRYWRT] /NO, TRY OUTPUT DEVICE CLBA /YES, GET CLOCK COUNTER DCA CLKCNT /SAVE IT IN CASE OF FIRING CLSA /GET CLOCK STATUS CDF BUFFLD /NEED BUFFER FIELD EITHER WAY SMA /OVERFLOW? JMP NERVE /NO, MUST BE SCHMITT TRIGGER ADST /YES, START THE A-D NOW DCA NRVTMP /BUT SAVE IT IN CASE BOTH CLCA /OVERFLOW HAS DEFINITELY OCCURED TAD [-3100+4] /GET CORRECTED RELOAD FACTOR CLAB /UPDATE THE CLOCK ADSK /WAIT FOR THE JMP .-1 /A-D DONE FLAG ADRB /GET "X" VALUE ADST /START ANOTHER ON NEXT CHANNEL AND [1770] /JUST SEVEN BITS WORTH XLIST OFF IFNZRO VC8E < XLIST ON DILX /DISPLAY IT CLL RAR /MOVE RTR /OVER XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE OVER DAL1 /LOAD X CHANNEL RTR /MOVE BACK RTR /TO LOW-ORDER RAR /SEVEN BITS XLIST OFF > IFNZRO AX08DA < XLIST ON CLL RAR /MOVE OVER TAD [400] /CENTER IT DXC DXL /LOAD X CHANNEL TAD [7400] /RESTORE VALUE CLL RTR /MOVE TO LOW-ORDER SEVEN BITS XLIST OFF > DCA ADTEMX /SAVE IT TAD NRVTMP /GET STATUS BACK RAR /MOVE TO LINK CLA RAR /TO AC[0] TAD ADTEMX /ADD ON "X" VALUE DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT ADRB /GET "Y" VALUE AND [1770] /JUST SEVEN BITS WORTH XLIST OFF IFNZRO VC8E < XLIST ON DILY /DISPLAY IT CLL RAR /MAKE IT RTR /SEVEN BITS XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE OVER DAL2 /LOAD Y RTR /MOVE BACK RTR /TO LOW-ORDER RAR /SEVEN BITS XLIST OFF > IFNZRO AX08DA < XLIST ON CLL RAR /MOVE OVER DYC DYL DIS /LOAD "Y" CHANNEL AND INTENSIFY RTR /MOVE TO LOW-ORDER SEVEN BITS XLIST OFF > XLIST ON DCA I PTR /STORE IN THE BUFFER NL0004 /RESET THE ADLM /MULTIPLEXOR FOR NEXT TIME ISZ PTR /BUMP TO NEXT XLIST OFF IFNZRO VC8E < XLIST ON DIXY /INTENSIFY VC8E NOW XLIST OFF > IFNZRO AA01 < XLIST ON DINT /INTENSIFY NOW XLIST OFF > XLIST ON XLIST OFF > IFNZRO CHAN%2!CHAN&2%2-1&LAB8E < XLIST ON CLOCK, CLSK /CLOCK INTERRUPT? JMP I [TRYWRT] /NO, TRY OUTPUT DEVICE CLBA /YES, GET CLOCK COUNTER DCA CLKCNT /SAVE IT IN CASE OF FIRING CLSA /GET CLOCK STATUS CDF BUFFLD /NEED BUFFER FIELD EITHER WAY SMA /OVERFLOW? JMP NERVE /NO, MUST BE SCHMITT TRIGGER ADST /YES, START THE A-D NOW DCA NRVTMP /SAVE IT IN CASE BOTH HAPPENED CLCA /OVERFLOW HAS DEFINITELY OCCURED TAD [-3100+4] /ADD RELOAD FACTOR + CORRECTION CLAB /UPDATE THE CLOCK ADSK /WAIT FOR THE JMP .-1 /A-D DONE FLAG ADRB /GET "X" VALUE ADST /START "Y" GOING AND [1777] /JUST TEN BITS XLIST OFF IFNZRO VC8E < XLIST ON DILX /DISPLAY IT XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE OVER DAL1 /LOAD X CHANNEL RTR /MOVE BACK XLIST OFF > IFNZRO AX08DA < XLIST ON CLL RAR /MOVE OVER TAD [400] /CENTER IT DXC DXL /LOAD "X" CHANNEL RAL /MOVE BACK TAD [7000] /RESTORE VALUE XLIST OFF > XLIST ON DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT ADSK /DONE YET? JMP .-1 /NO, WAIT FOR IT ADRB /YES, READ IT IN AND [1777] /JUST TEN BITS XLIST OFF IFNZRO VC8E < XLIST ON DILY /DISPLAY IT XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE OVER DAL2 /LOAD "Y" CHANNEL RTR /MOVE BACK XLIST OFF > IFNZRO AX08DA < XLIST ON CLL RAR /MOVE OVER DYC DYL DIS /LOAD "Y" CHANNEL AND INTENSIFY RAL /MOVE BACK XLIST OFF > XLIST ON DCA I PTR /STORE IN THE BUFFER NL0004 /RESET THE ADLM /MULTIPLEXOR ISZ PTR /BUMP TO NEXT TAD NRVTMP /GET STATUS RAR /SCHMITT TRIGGER BIT TO LINK SNL CLA /SKIP IF FIRING OCCURRED JMP .+3 /JUMP IF NOT TAD CLKCNT /GET CLOCK COUNTER TAD [3100+4000] /ADJUST TO RANGE 0-3077+4000 DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT DCA I PTR /CLEAR THE MODEM WORD ISZ PTR /BUMP TO NEXT XLIST OFF IFNZRO VC8E < XLIST ON DIXY /INTENSIFY VC8E NOW XLIST OFF > IFNZRO AA01 < XLIST ON DINT /INTENSIFY NOW XLIST OFF > XLIST ON XLIST OFF > IFNZRO CHAN%4&LAB8E < XLIST ON CLOCK, CLSK /CLOCK INTERRUPT? JMP I [TRYWRT] /NO, TRY OUTPUT DEVICE CLSA /GET STATUS THUS CLEARING THE INTERRUPT SMA CLA /BETTER BE CAUSED BY OVERFLOW HLT /BARF! CDF BUFFLD /SET BUFFER FIELD BEFORE WAITING ADSK /FLAG UP YET? JMP .-1 /NO, WAIT FOR IT ADRB /GET FIRST A-D INPUT ADST /START ANOTHER ONE XLIST OFF IFNZRO VC8E < XLIST ON DILX /LOAD X DISPLAY NOW XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE UP DAL1 /LOAD X DISPLAY NOW RTR /MOVE BACK XLIST OFF > XLIST ON DCA I PTR /STORE X DATA ISZ PTR /BUMP TO NEXT ADSK /FLAG UP YET? JMP .-1 /NO, WAIT FOR IT ADRB /GET SECOND A-D INPUT ADST /START ANOTHER ONE XLIST OFF IFNZRO VC8E < XLIST ON DILY /LOAD Y DISPLAY NOW XLIST OFF > IFNZRO AA01 < XLIST ON CLL RTL /MOVE UP DAL2 /LOAD Y DISPLAY NOW RTR /MOVE BACK XLIST OFF > XLIST ON DCA I PTR /STORE Y DATA ISZ PTR /BUMP TO NEXT ADSK /FLAG UP YET? JMP .-1 /NO, WAIT FOR IT ADRB /GET THIRD A-D INPUT ADST /START ANOTHER ON XLIST OFF IFNZRO VC8E < XLIST ON DIXY /INTENSIFY NOW XLIST OFF > IFNZRO AA01 < XLIST ON DINT /INTENSIFY NOW XLIST OFF > XLIST ON DCA I PTR /STORE THIRD VALUE ISZ PTR /BUMP TO NEXT ADSK /FLAG UP YET? JMP .-1 /NO, WAIT FOR IT ADRB /GET FOURTH A-D INPUT DCA I PTR /STORE IT NL0004 /RESET THE ADLM /MULTIPLEXOR CHANNEL ISZ PTR /BUMP TO NEXT FOR NEXT TIME XLIST OFF > IFNZRO CHAN%2&PDP12 < XLIST ON CLOCK, CLSK /CLOCK INTERRUPT? JMP I [TRYWRT] /NO, TRY OUTPUT DEVICE CLCA /YES, GET CURRENT CLOCK DCA CLKCNT /SAVE IT IN CASE FIRING TAD [-1200] /RESET THE CLAB /PRESET REGISTER CLA /CLEAN UP CLSA /GET CLOCK STATUS CDF BUFFLD /WILL BE NEEDED EITHER WAY SMA /SKIP IF OVERFLOW JMP NERVE /JUMP IF FIRING ONLY DCA NRVTMP /SAVE IN CASE BOTH TAD [1100] /ALLOW NON-CLOCK CLLR /A-D CONVERSIONS LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT SAM 11 /GET CHANNEL 10 AND START CHANNEL 11 IOB; DAL1 /DISPLAY "X" VALUE ON D-A SCR 1 /MAKE IT NINE-BIT STA; ADTEMX /SAVE IT PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ALSO TAD [400] /CENTER IT ON THE SCREEN DCA XCOORD /SAVE IT FOR VR12 USE LATER LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT SAM 10 /GET CHANNEL 11 AND SETUP FOR CHANNEL 10 NEXT TIME IOB; DAL2 /DISPLAY "Y" VALUE ON D-A SCR 1 /MAKE IT NINE-BIT DIS XCOORD /DISPLAY IT ON VR12 STC ADTEMY /SAVE IT FOR LATER PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ABOUT IT TAD [1500] /RESET THE CLLR /PREVIOUS CLOCK MODE TAD NRVTMP /GET THE STATUS RAR /TO LINK CLA RAR /TO AC[0] DCA NRVTMP /STASH IT TAD ADTEMX /GET "X" VALUE RTR /MAKE IT AND [177] /SEVEN-BIT TAD NRVTMP /ADD ON 4000 IF COINCIDENT FIRING DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT TAD ADTEMY /GET THE "Y" VALUE RTR /MAKE IT AND [177] /SEVEN-BIT DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT XLIST OFF > IFNZRO CHAN%2!CHAN&2%2-1&PDP12 < XLIST ON CLOCK, CLSK /CLOCK INTERRUPT? JMP I [TRYWRT] /NO, TRY OUTPUT DEVICE CLCA /YES, GET THE CLOCK COUNTER DCA CLKCNT /SAVE IT IN CASE FIRING TAD [-1200] /RESET THE CLAB /PRESET REGISTER CLA /CLEAN UP CLSA /GET CLOCK STATUS CDF BUFFLD /BUFFER FIELD NEEDED EITHER WAY SMA /OVERFLOW? JMP NERVE /NO, MUST BE SCHMITT TRIGGER DCA NRVTMP /SAVE STATUS IN CASE BOTH OCCURRED TAD [1100] /ALLOW NON-CLOCK CLLR /A-D CONVERSIONS LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT SAM 11 /GET CHANNEL 10 AND START CHANNEL 11 BCL I; 6000 /JUST TEN BITS IOB; DAL1 /DISPLAY "X" VALUE STA; ADTEMX /SAVE IT FOR LATER SCR 1 /MAKE IT NINE BITS PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ABOUT IT TAD [400] /CENTER THE DISPLAY DCA XCOORD /SAVE IT FOR DISPLAY LATER LINC /BACK TO L...MODE LMODE /TELL ASSEMBLER ALSO SAM 10 /GET CHANNEL 11 AND SETUP FOR CHANNEL 10 NEXT TIME BCL I; 6000 /JUST TEN BITS IOB; DAL2 /DISPLAY "Y" VALUE STA; ADTEMY /SAVE IT FOR LATER SCR 1 /MAKE IT NINE BITS DIS XCOORD /DISPLAY THE POINT LDA I; 5100 /GET OLD CLOCK REGISTER VALUE PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ALSO CLLR /RELOAD PREVIOUS CLOCK VALUE CLA /CLEAN UP TAD ADTEMX /GET THE "X" VALUE DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT TAD ADTEMY /GET THE "Y" VALUE DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT TAD NRVTMP /GET STATUS RAR /SCHMITT TRIGGER BIT TO LINK SNL CLA /SKIP IF FIRING OCCURRED JMP .+3 /JUMP IF NOT TAD CLKCNT /GET CLOCK COUNTER TAD [1200+4000+0000]/ADJUST TO RANGE 0-1177+4000 DCA I PTR /STORE IN THE BUFFER ISZ PTR /BUMP TO NEXT DCA I PTR /CLEAR MODEM WORD ISZ PTR /BUMP TO NEXT XLIST OFF > IFNZRO CHAN%4&PDP12 < XLIST ON /PDP12 4 CHANNEL XLIST OFF > XLIST ON / CHECK FOR A-D PAUSE HERE. NOP /PREVENT PROBLEMS XLIST OFF IFNZRO AX08 < XLIST ON NL7777 /TRY TO XRCL /CLEAR ALL BITS XRIN XRCL /GET THE INPUT REGISTER AND [C1] /JUST CONTROL BIT SNA CLA /SKIP IF SET XLIST OFF > IFNZRO LAB8E < XLIST ON DBRI /GET INPUT REGISTER AND [100] /JUST PAUSE BIT DBCI /CLEAR IT SNA CLA /SKIP IF SET XLIST OFF > IFNZRO PDP12 < XLIST ON LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT SXL I 1 /SKIP IF EXTERNAL BIT SET COM /COMPLEMENT IF NOT PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ABOUT IT SPA CLA /SKIP IF IT WAS SET XLIST OFF > XLIST ON JMP INTXIT /FORGET IT XLIST OFF IFZERO CHAN-2 < XLIST ON NL7776 /SET BACKUP FACTOR XLIST OFF > IFNZRO CHAN-2 < XLIST ON TAD [-4] /SET BACKUP FACTOR XLIST OFF > XLIST ON TAD PTR /BACKUP THE POINTER DCA PTR /STORE BACK INTXIT, IOF /SOME ROUTINES LEAVE IT ON! CDF 00 /BACK TO FIELD 0 NL0004 /AC MAY BE DIRTY CIA /GETS -4 BY FASTEST METHOD AVILABLE! TAD XR1 /BACKUP DCA XR1 /STACK POINTER TAD XR1 /COPY IT TO DCA XR2 /TEMPORARY COPY TAD I XR2 /GET THE SAVED AC DCA AC /STASH IT FOR NOW TAD I XR2 /GET THE SAVED MQ MQL /RESTORE IT TAD I XR2 /GET SAVED FLAGS XLIST OFF IFNZRO PDP8E < XLIST ON DCA FLAGS /SAVE FOR NOW TAD I XR2 /GET THE P. C. DCA INTPC /SET IT UP TAD FLAGS /GET THE FLAGS BACK RTF /RESTORE THE NOW CLA /ISN'T THIS STUPID? TAD AC /RESTORE AC JMP I INTPC /RETURN TO BACKGROUND XLIST OFF > IFNZRO PDP8I < XLIST ON DCA CDFINS /SAVE FOR NOW TAD CDFINS /GET IT BACK AND [70] /JUST INSTRUCTION FIELD TAD [CIF 00] /MAKE INTO CIF INSTRUCTION DCA CIFINS /STORE IN-LINE TAD CDFINS /GET IT AGAIN RTL /MOVE OVER, RESTORING LINK RAL /AND SETTING UP DATA FIELD BITS AND [70] /ISOLATE DATA FIELD BITS TAD [CDF 00] /MAKE INTO CDF INSTRUCTION DCA CDFINS /STORE IN-LINE TAD I XR2 /GET THE P. C. DCA INTPC /SET IT UP TAD AC /RESTORE AC ION /TURN INTERRUPT ON AGAIN CIFINS, .-. /CHANGE TO OLD INSTRUCTION FIELD AND INHIBIT INTERRUPTS CDFINS, .-. /CHANGE TO OLD DATA FIELD JMP I INTPC /RETURN TO BACKGROUND XLIST OFF > XLIST ON PAGE XLIST OFF IFNZRO DECTAPE < XLIST ON TRYWRT, DTSF /DECTAPE FLAG? XLIST OFF IFNZRO CHAN < XLIST ON JMP TSTTTY /NO, TRY TTY: XLIST OFF > IFZERO CHAN < XLIST ON JMP TRYMODEM /NO, TRY MODEM INPUT XLIST OFF > XLIST ON TAD [7] /YES, TURN OFF INTERRUPTS BUT PRESERVE THE FLAGS DTXA /SO WE CAN OBSERVE THEM LATER DTRB /GET THE ERROR STATUS BITS ION /WE CAN COME OUT NOW! JMP I ENABLE /RETURN TO WHOMEVER XLIST OFF > IFNZRO FLOPPY < XLIST ON TRYWRT, DSSF /MDC8 FLAG? XLIST OFF IFNZRO CHAN < XLIST ON JMP TSTTTY /NO, TRY TTY: XLIST OFF > IFZERO CHAN < XLIST ON JMP TRYMODEM /NO, TRY MODEM INPUT XLIST OFF > XLIST ON DSCF /CLEAR OUR FLAG ION /WE CAN COME OUT NOW! JMP I ENABLE /RETURN TO WHOMEVER XLIST OFF > IFNZRO LINCTAPE < XLIST ON TRYWRT, TAD [100] /GET SKIP ON LINCTAPE FLAG BIT LMR /TAPE INTERRUPT? JMP CLRTST /NO, CLEAN UP AND CONTINUE TESTING CLL RAL /CHANGE TO CLEAR LINCTAPE FLAG BIT LMR /CLEAR THE FLAG ION /WE CAN COME OUT NOW! CLA /CLEAN UP JMP I ENABLE /RETURN TO WHOMEVER XLIST OFF > XLIST ON ENABLE, .-. /OUTPUT DEVICE CO-ROUTINE EXIT XLIST OFF IFNZRO DECTAPE < XLIST ON TAD [4] /ADD ON INTERRUPT ENABLE BIT DTEXIT, DTXA /UPDATE "A" REGISTER XLIST OFF > XLIST ON JMP I [INTXIT] /RETURN TO BACKGROUND XLIST OFF IFNZRO LINCTAPE < XLIST ON CLRTST, CLA /CLEAN UP FROM LINCTAPE TEST XLIST OFF > IFZERO CHAN < XLIST ON TRYMODE,LKSF /MODEM CHARACTER? JMP TSTTTY /NO, TRY TTY: NL7777 /BACKUP TO TAD PTR /PREVIOUS DCA NRVTMP /MODEM WORD LKRB /GET THE CHARACTER CDF BUFFLD /GOTO BUFFER FIELD TAD [400] /IN CASE MODEM WORD IS ZERO! DCA I NRVTMP /STORE IN THE BUFFER JMP I [INTXIT] /FINISH IT THERE XLIST OFF > IFNZRO PDP8E < XLIST ON TSTTTY, TSK /EITHER FLAG UP? JMP INTERR /NO, CHECK FOR ERRORS KSF /YES, KEYBOARD INTERRUPT? XLIST OFF > IFNZRO PDP8I < XLIST ON TSTTTY, KSF /KEYBOARD INTERRUPT? XLIST OFF > XLIST ON JMP TSTOUT /NO, TRY TELEPRINTER KRS /YES, READ IT IN AND [177] /JUST SEVEN-BIT ASCII TAD [-3] /COMPARE TO <^C> SPA SNA CLA /SKIP IF GREATER JMP I [SBOOT] /JUMP IF NOT KRB /READ IT IN AGAIN AND CLEAR THE FLAG TPC /OUTPUT IT FOR ECHO JMP I [INTXIT] /RETURN TO BACKGROUND TSTOUT, TSF /OUTPUT FLAG? JMP INTERR /NO, CHECK FOR ERRORS TCF /YES, CLEAR THE FLAG JMP I [INTXIT] /RETURN TO BACKGROUND XLIST OFF IFNZRO AX08 < XLIST ON INTERR, SKER /A-D TIMING ERROR? JMP BADERR /NO, SOMETHING WORSE! HLT /BARF JMP .-1 /JUST IN CASE XLIST OFF > IFNZRO LAB8E < XLIST ON INTERR, ADSE /A-D TIMING ERROR? JMP BADERR /NO, SOMETHING WORSE! HLT /BARF JMP .-1 /JUST IN CASE XLIST OFF > IFNZRO PDP12 < XLIST ON INTERR, HLT /UNSPECIFIED INTERRUPT ERROR JMP .-1 /JUST IN CASE XLIST OFF > XLIST ON BADERR, HLT /BARF JMP BADERR /JUST IN CASE BLKIO, .-. /BLOCK-ORIENTED I/O ROUTINE DCA DBLK /SAVE DESIRED BLOCK SZL /DO WE READ? XLIST OFF IFNZRO DECTAPE < XLIST ON TAD [150-130] /NO, ADD ON WRITE OFFSET TAD [130] /GET READ VALUE XLIST OFF > IFNZRO FLOPPY < XLIST ON TAD [12-10] /NO, ADD ON WRITE OFFSET TAD [10] /GET READ VALUE XLIST OFF > IFNZRO LINCTAP < XLIST ON NL0004 /NO, GET WRITE-READ OFFSET TAD [RDE] /GET READ VALUE XLIST OFF > XLIST ON DCA DFUN /SAVE OPERATION NL3777 /FORCE THE DCA DSEG /TRANSFER ADDRESS JMS I [DEVIO] /CALL I/O ROUTINES TAD DNCB /DONE YET? SZA CLA /SKIP IF SO JMP .-2 /WAIT IF NOT JMP I BLKIO /RETURN PAGE DEVIO, .-. /INTERRUPTIBLE STORAGE DEVICE ROUTINE IOF /JUST LIKE AN INTERRUPT CLA CLL /CLEAN UP RDF /GET CURRENT DATA FIELD RAR /MOVE TO RTR /AC[9-11] DCA DNCB /SAVE FOR LATER CDF 00 /BACK TO FIELD 0 DCA I XR1 /SAVE NON-AC MQA /GET MQ DCA I XR1 /SAVE ALSO TAD DNCB /GET FLAGS DCA I XR1 /SAVE ALSO TAD DEVIO /GET P. C. DCA I XR1 /SAVE ALSO TAD [-20] /SETUP THE DCA DNCB /BLOCK COUNT XLIST OFF IFNZRO DECTAPE < XLIST ON XLIST OFF IFNZRO MULTAPE < XLIST ON TAD DBLK /GET LATEST BLOCK DCA TBLK /INTO TEMPORARY COPY TAD DBLK /GET BLOCK NUMBER TAD [-LIMHAF] /COMPARE TO FIRST TAPE LIMIT SZL /SKIP IF LESS DCA TBLK /REDUCE BLOCK BY ENTIRE TAPE SIZE SZL CLA /OVER LIMIT? TAD [1000] /YES, GOTO NEXT UNIT XLIST OFF > XLIST ON TAD [UNITCOM+10] /GET SEARCH FUNCTION DTLA /LOAD "A" REGISTER DTLB /LOAD "B" REGISTER FOR FIELD ZERO SEARCH DTURNX, NL4000 /GET A "GO" BIT DCONT, CML RTR /KEEP 'EM MOVING RTR /MOVING DTXA /MOVING (FRANKIE LAINE, RAWHIDE) TAD [7755] /POINT CURRENT ADDRESS DCA I [7755] /TO ITSELF JMS I [ENABLE] /RETURN RTL /LOOK FOR END ZONE SPA CLA /TURN AROUND? JMP DTURNX /YES DTRB /CHECK FOR REAL ERROR SPA CLA /SKIP IF NONE JMP DERR /BADNESS DTRA /GET MOTION BITS CMA RTL /MOVE 'EM AGAIN RTL /AGAIN SNL CLA /ESTABLISH DIRECTION CML RTL /SET UP COMPARISON TAD I [7755] /ADD ON BLOCK NUMBER CML CIA /INVERT XLIST OFF IFNZRO MULTAPE < XLIST ON TAD TBLK /COMPARE TO DESIRED BLOCK XLIST OFF > IFZERO MULTAPE < XLIST ON TAD DBLK /COMPARE TO DESIRED BLOCK XLIST OFF > XLIST ON SNA CLA /GOOD? SNL CLA /MAYBE! JMP DCONT /NO TAD [BUFFLD] /YES, SETUP TRANSFER FIELD DTLB /FOR FURTHER OPERATIONS TAD DSEG /WHICH HALF DCA I [7755] /TO USE TAD DFUN /FUNCTIONAL BITS DTXA /TO STATUS REGISTER DNEXT, TAD [-200] /1 PAGE DCA I [7754] /TO WORD COUNT JMS I [ENABLE] /GO WAIT FOR NEXT SPA CLA /CHECK FOR ERRORS JMP DERR /BADNESS ISZ DNCB /DONE ALL BLOCKS YET? JMP DNEXT /NO, GO DO ANOTHER ONE TAD [20] /GET UPDATE VALUE TAD DBLK /FOR THE DCA DBLK /NEXT TIME NL4000 /INVERT TAD DSEG /CORE DCA DSEG /SEGMENT DISMISS,NL0002 /A GOOD BIT DTRA /OR IN MOTION AND [206] /KEEP ERRORS, INTERRUPT STATUS JMP I [DTEXIT] /FINISH IT THERE DERR, HLT /UNRECOVERABLE IN REAL TIME JMP .-1 /BARF XLIST OFF > IFNZRO FLOPPY < XLIST ON DSRS /GET STATUS NOW SPA CLA /BETTER BE IDLE JMS DSHALT /ELSE BARF DSHI /SEND HIGH-ORDER COMMAND ADDRESS NL0001 /SET INCREMENT TAD DSEG /NOW HAVE TRANSFER ADDRESS DCA TRADDR /STORE IN COMMAND TAD DFUN /GET READ/WRITE FUNCTION DCA RWCOM /STORE IN COMMAND TAD DBLK /GET BLOCK NUMBER AND [7400] /JUST HIGH-ORDER CLL RTL;RTL;RAL /MOVE TO LOW-ORDER DCA SECTMD /STORE AS MIDDLE SECTOR NUMBER TAD DBLK /GET BLOCK NUMBER AGAIN DCA SECTLO /STORE AS LOW-ORDER SECTOR NUMBER DSRS /GET STATUS NOW SMA CLA /SKIP IF NOW BUSY JMP .-2 /ELSE WAIT FOR IT DSCF /CLEAR FLAG NOW (JUST IN CASE) TAD [COMMAND] /POINT TO COMMAND TABLE DSGO /GO START IT UP JMS I [ENABLE] /WAIT FOR INTERRUPT DSRS /GET STATUS CLL RAL /REMOVE BUSY BIT SZA /BETTER BE OTHERWISE CLEAR JMS DSHALT /ELSE COMPLAIN DSIM /FINISH THE COMMAND JMS I [ENABLE] /WAIT FOR COMMAND TO COMPLETE DSRS /GET STATUS NOW SZA /BETTER BE CLEAR JMS DSHALT /ELSE COMPLAIN DCA DNCB /INDICATE COMPLETION TO OTHERS TAD [20] /GET UPDATE VALUE TAD DBLK /FOR THE DCA DBLK /NEXT TIME NL4000 /INVERT TAD DSEG /CORE DCA DSEG /SEGMENT JMP I [INTXIT] /FINISH IT THERE / MDC8 ERRORS COME HERE. DSHALT, .-. /ERROR ROUTINE DSRS /GET STATUS MQL /TO MQ TAD DSHALT /GET ERROR ADDRESS HLT /STOP! JMP I [SBOOT] /GOODBYE! / COMMAND TABLE. COMMAND,6!DMA /TABLE LENGTH PLUS DMA INDICATOR RWCOM, .-.&377 /0010 IN READING, 0012 IF WRITING SECTHI, DMUNIT&377 /HIGH-ORDER SECTOR ADDRESS AND UNIT SECTMD, .-.&377 /MIDDLE SECTOR ADDRESS SECTLO, .-.&377 /LOW-ORDER SECTOR ADDRESS SCTCNT, 20&377 /SECTOR COUNTER CONTRL, 0&377 /CONTROL WORD TRFLD, BUFFLD%10&377 /TRANSFER BANK AND FIELD TRADDR, .-. /TRANSFER ADDRESS XLIST OFF > IFNZRO LINCTAPE < XLIST ON XLIST OFF IFNZRO MULTAPE < XLIST ON TAD DBLK /LINK IS CLEAR, SO GET DESIRED BLOCK TAD [-LIMHAF] /COMPARE TO ONE-TAPE LIMIT SNL /SKIP IF GREATER JMP DOGOOD /JUMP IF OK DCA LBLK /SAVE AS TAPE BLOCK TAD [U] /GET ODD UNIT BIT DGUDIN, TAD DFUN /GET EVEN TAPE FUNCTION DCA LFUN /SETUP TAPE INSTRUCTION JMP DOTAP /START IT UP DOGOOD, CLA /CLEAN UP TAD DBLK /GET TAPE BLOCK DCA LBLK /SAVE AS IN-LINE TAPE BLOCK JMP DGUDIN /CONTINUE THERE XLIST OFF > IFZERO MULTAPE < XLIST ON TAD DBLK /GET TAPE BLOCK DCA LBLK /PUT IN-LINE XLIST OFF > XLIST ON DOTAP, TAD DSEG /GET CURRENT TRANSFER SEGMENT IAC /CHANGE TO TRANSFER ADDRESS DCA LCORE /STORE IN-LINE DNEXT, CIF 00 /PREVENT LINC INTERRUPTS LINC /GOTO L...MODE LMODE /TELL ASSEMBLER ABOUT IT LDA I /GET THE LCORE, .-. /TRANSFER ADDRESS TMA /LOAD HARDWARE ADDRESS LDA I /GET THE UNIT%2+TAPFLD+130 /FIELD, INTERRUPT ENABLE, /EXTENDED UNITS, NOPAUSE, /EXTENDED ADDRESSING BITS AXO /SETUP EXTENDED OPERATIONS LFUN, .-. /DO TAPE FUNCTION LBLK, .-. /FOR THIS BLOCK CLR /CLEAN UP PDP /BACK TO P...MODE PMODE /TELL ASSEMBLER ABOUT IT JMS I [ENABLE] /EXIT TO BACKGROUND ION /ALLOW INTERRUPTS AGAIN ISZ LBLK /BUMP TO NEXT BLOCK TAD LCORE /GET TRANSFER ADDRESS TAD [200] /BUMP TO NEXT PAGE DCA LCORE /STASH IT ISZ DNCB /DONE ENOUGH YET? JMP DNEXT /NO, GO DO ANOTHER ONE TAD DBLK /YES, GET THE BLOCK NUMBER TAD [20] /UPDATE BY HALF A FIELD DCA DBLK /STASH IT NL4000 /GET HALF-FIELD BIT TAD DSEG /INVERT SEGMENT DCA DSEG /STASH IT JMP I [INTXIT] /RETURN TO ORIGINAL CALLER XLIST OFF > XLIST ON LIMTBL, 0 /LOWEST LOWER LIMIT SCTSIZE^1 /A SCTSIZE^2 /B SCTSIZE^3 /C SCTSIZE^4 /D SCTSIZE^5 /E SCTSIZE^6 /F SCTSIZE^7 /G SCTSIZE^10 /H SCTSIZE^11 /I SCTSIZE^12 /J SCTSIZE^13 /K SCTSIZE^14 /L / HERE COME THE PAGE ZERO LITERALS! $ /THAT'S ALL FOLK!