/LABL: OS/8 LEGIBLE TAPE LEADER HANDLER -JVZ- /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 FREQUENTLY USED DEVICE SHOULD BE NAMED "LBL" 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 "LDR". /EXAMPLE: / .R BUILD / $LO SYS:LABL / $IN LABL,LS / $IN LABL,HS / $NA HS=LBL / $NA LS=LDR / . / . / . / $BO /HEADER BLOCK FOR BUILD: *0 -2 DEVICE LABL DEVICE LS 1400;4143 ZBLOCK 2 DEVICE LABL 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 & THE KEYBOARD 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 TLS /TELL THEM WE'RE READY AND WAIT KSF /FOR THE PUNCH TO BE TURNED ON JMP .-1 /(ALSO DELAYS WHILE '^' PRINTS) CLA CDI0, CDF CIF 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 /PUT 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 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 BUFF, 0 PUTC, 0 CDF0, CDF 0 /D.F. FOR 2ND PAGE OR ^C AND K377 /STRIP LOWER 8 BITS SNA JMP NULL /OS/8 IGNORES CODE 0 TAD M232 SNA /CTRL Z? DONE, JMP EXIT TAD MZMS SPA /IS IT A CONTROL CODE? CLA /SUBSTITUTE A SPACE INSTEAD CLL RAL /*2 TAD START /BEGINNING OF PATTERN TABLE DCA ADDR JMS OUTC /PUNCH SOME HOLES JMS OUTC /PUNCH SOME MORE HOLES JMS PNCH /PUT A SPACE BETWEEN LETTERS NULL, 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 /TEST FOR CTRL O SNA CLA JMP EXIT+2 /ABORT OUTPUT CDFX, CDF /APPROPRIATELY JMP I PUTC OUTC, 0 /6-BIT UNPACK ROUTINE ISZ ADDR TAD I ADDR RTR RTR RTR JMS PNCH TAD I ADDR JMS PNCH JMP I OUTC ADDR, 0 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 TLS TSF JMP .-1 K7600, 7600 /CLA JMP I PNCH *"^ K77, 77 /LOCATION = PAGE+136 M203, -203 M232, -232 MZMS, 32-40 MCMO, "C-"O LS, "C&77 /LOW SPEED ENTRY POINT CLA STL TAD LS DCA HS /MOVE ARGUMENT POINTER TAD DONE /'JMP EXIT' JMP HS+2 HS, "C&77 /HIGH-SPEED ENTRY POINT CLA STL DCA EXIT+1 /SET THE ENTRY FLAG RDF /FIGURE OUT HOW TO RETURN TAD CDI0 DCA CDIX TAD I HS /ARG 1 K377, AND (70 /EXTRACT BUFFER FIELD TAD CDF0 DCA CDFX TAD I HS /GET PAGE COUNT - MULT. BY 2 TAD I HS /TO MOVE -(R/W) BIT TO LINK AND K7600 /MASK OFF WORD COUNT SNL /TEST FOR A READ CALL ISZ HS /SKIP THE ERROR RETURN SZL SNA /TEST FOR READ OR CLOSING CALLS JMP EXIT+2 /RETURN IN EITHER CASE STL CMA RAR /DIVIDE BY 2, NEGATE, SUBTRACT 1 DCA LS /LOAD DOUBLE-WORD COUNTER TAD I HS /ARG 2 DCA BUFF /SAVE BUFFER ADDRESS JMS START /GET ADDRESS OF PAGE TWO PAGE 2 /START OF PATTERN TABLE 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 $