/TEXT: OS/8 READABLE PUNCH TAPE HANDLER -JVZ- / MODIFIED FOR NON-CONSOLE DEVICE 34 RON LARKIN MARCH 1977 /THIS HANDLER WORKS WITH EITHER THE HIGH-SPEED OR THE LOW- /SPEED PUNCH. SEPARATE ENTRY POINTS ("HS" AND "LS") ARE /USED SO THAT BOTH DEVICES MAY BE ACTIVE AT THE SAME TIME. /BOTH ^C AND ^O ARE RECOGNIZED DURING (AND BEFORE) OUTPUT. /THE MOST FREQUENCLY USED DEVICE SHOULD BE NAMED "TXT" WHEN /ADDING THIS HANDLER TO THE SYSTEM. THIS IS DONE WITH BUILD /USING THE '$NAME' COMMAND. IF BOTH ENTRY POINTS ARE NEEDED /THE SECOND MAY BE CALLED "TEX". /EXAMPLE: / .R BUILD / $LO SYS:TEXT / $IN TEXT,LS / $IN TEXT,HS / $NA HS=TXT / $NA LS=TEX / . / . / . / $BO /DEFINE LOW SPEED IOT'S TSFL= 6341 TLSL= 6346 /HEADER BLOCK FOR BUILD: *0 -2 DEVICE TEXT DEVICE TXT 1400;4101 ZBLOCK 2 DEVICE TEXT DEVICE HS 1400;4151 ZBLOCK 2 PAGE /EXIT, KSF /WAIT TO TURN OFF LOW SPEED PUNCH / JMP EXIT /=0000 (NOP) FOR HIGH SPEED PUNCH / KCC /CLEAR THE AC & KEYBOARD EXIT, SKP /NO NEED TO WAIT SINCE SKP /THIS IS A NON-CONSOLE DEVICE NOP / TCF PCF /DON'T LEAVE THE FLAG UP! ISZ HS /PASS THE BLOCK NUMBER ISZ HS /AND THE ERROR RETURN ISZ HS CDIX, HLT /SET TO CALLING FIELD JMP I HS /**RETURN** START, 0 /CONTAINS LOCATION OF SECOND PAGE / TAD UPARR / TLSL /TELL THEM WE'RE READY AND WAIT / KSF /FOR PUNCH TO BE TURNED ON / JMP .-1 /(ALSO DELAYS WHILE '^' PRINTS) NOP /NEED TO PRESERVE MCMO AT NOP /LOCATION PAGE+100 NOP / NOP / CDF CIF 0 K3700, DCA I MCMO /MONITOR/ODT SCRATCH AREA JMP BEGIN /SET THE BUFFER D.F. LOOP, JMS GETC /PUNCH CHARACTER 1 DCA TEMP /SAVE HALF OF CHAR 3 JMS GETC /PUNCH CHARACTER 2 CLL RTR RTR TAD TEMP /P;UT TOGETHER CHAR 3 RTR RTR BEGIN, JMS PUTC /PUNCH CHARACTER 3 ISZ LS /CHECK FOR END OF BUFFER JMP LOOP /CONTINUE JMP EXIT+2 /CLEAR THE FLAGS & EXIT TEMP, 0 PUTC, 0 CDF 0 /D.F. FOR 2ND PAGE OR ^C AND K377 /STRIP LOWER 8 BITS SNA JMP NONE /OS/I IGNORES CODE 0 TAD M232 SNA /CTRL Z? DONE, JMP EXIT TAD MZMS SPA /IS IT A CONTROL CODE? CLA /SUBSTITUTE A SPACE INSTEAD STL RAL /*2+1 TAD START /BEGINNING OF PATTERN TABLE DCA ADDR JMS OUTC /PUNCH SOME HOLES ISZ ADDR JMS OUTC /PUNCH SOME MORE HOLES JMS PNCH /PUT A SPACE BETWEEN LETTERS NONE, KSF /CHECK FOR KEYBOARD INTERRUPTS JMP CDFX KRB /GET THE CHARACTER TAD M203 SNA /WAS IT A CTRL C? JMP I K7600 /EXIT TO THE MONITOR TAD MCMO /CHECK FOR CTRL O SNA CLA JMP EXIT+2 /ABORT OUTPUT CDFX, CDF /APPROPRIATELY JMP I PUTC ADDR, 0 M203, -203 M232, -232 MZMS, 32-40 MCMO, "C-"O /LOCATION = PAGE+100 LS, 2 /LOW SPEED ENTRY POINT CLA TAD LS DCA HS /MOVE ARGUMENT POINTER TAD DONE /'JMP EXIT' JMP HS+2 GETC, 0 /UNPACK THE BUFFER TAD I BUFF /GET A WORD JMS PUTC /CHECK AND PUNCH TAD I BUFF /GET HALF OF CHAR 3 AND .+2 ISZ BUFF /ADVANCE POINTER 7400 /NOP JMP I GETC PNCH, 0 AND K77 TAD EXIT+1 /5200 OR 0000 DEPENDING SPA /WHICH PUNCH? JMP UPARR /LOW SPEED PLS PSF JMP .-1 JMP K7600 UPARR, AND K77 /REMOVE THE TEST BITS TLSL TSFL JMP .-1 K7600, 7600 /CLA JMP I PNCH K77, 77 /LOCATION = PAGE+136 BUFF, 0 OUTC, 0 /6-BIT UNPACK ROUTINE TAD I ADDR RTR RTR RTR JMS PNCH TAD I ADDR JMS PNCH JMP I OUTC HS, 2 /HIGH-SPEED ENTRY POINT CLA DCA EXIT+1 /SET THE ENTRY FLAG RDF TAD K3700-1 /FIGURE OUT HOW TO RETURN DCA CDIX TAD I HS /ART 1 SMA /WRITE CALL? JMP EXIT+2 /ERROR EXIT FOR READ CALLS K377, AND K70 /EXTRACT BUFFER FIELD TAD PUTC+1 DCA CDFX TAD I HS ISZ HS AND K3700 /GET PAGE COUNT SNA /NULL CALL? JMP EXIT+2 CMA DCA LS /WORD COUNT+1 TAD I HS /ARG 2 DCA BUFF JMS START /STORE TABLE ADDERSS K70, 70 /END OF PAGE 1 0000 /SPACE 0000 5600 /! 0000 0303 /" 0000 1477 /# 7714 5652 /$ 7772 2313 /% 6462 7652 /& 7752 0300 /' 0000 3641 /( 0000 4136 /) 0000 0005 /* 0205 1034 /+ 1000 0040 /, 3000 1010 /- 1000 4000 /. 0000 2010 // 0402 3641 /0 4136 4442 /1 7740 4261 /2 5146 2145 /3 5321 1710 /4 1077 4745 /5 4531 7750 /6 5070 6111 /7 0503 2255 /8 5522 0705 /9 0577 2400 /: 0000 0040 /; 3200 1024 /> 4200 1212 /= 1200 4224 /< 1000 0255 /? 0300 7775 /@ 4577 7611 /A 1176 7745 /B 4532 3641 /C 4122 7741 /D 4136 7745 /E 4541 7705 /F 0501 7741 /G 5173 7710 /H 1077 4177 /I 4100 2040 /J 4037 7714 /K 2241 7740 /L 4040 7702 /M 0277 7706 /N 3077 7741 /O 4177 7705 /P 0502 3641 /Q 6176 7715 /R 2542 2245 /S 5122 0177 /T 0100 3740 /U 4037 1720 /V 4037 7730 /W 3077 4136 /X 3641 0374 /Y 7403 6151 /Z 4543 7741 /[ 0000 0204 /\ 1020 4177 /] 0000 0436 /^ 0400 0416 /_ 3704 $