Trailing-Edge
-
PDP-10 Archives
-
AP-D543V_SB
-
cdpser.mac
There are 6 other files named cdpser.mac in the archive. Click here to see a list.
TITLE CDPSER CARD PUNCH SERVICE ROUTINE V1066
SUBTTL T WACHS/TW/CF/GH/JE/DAL 13 JUN 78
SEARCH F,S
$RELOC
$HIGH
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1973,1974,1975,1976,1977,1978 BY DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
XP VCDPSR,1066
ENTRY CDPSER
CDPSER:
$LOW
CDPDDB:: SIXBIT /CDP/
XWD 4*HUNGST, ;CODE 4 - HUNG TIME IS 16 SECONDS
CDPIOS: 0
EXP CDPDSP
XWD DVOUT+DVCDR,14403
0
CDPBUF: 0
CDPNTR: 0
CDPOAD: XWD R,0
CDPSTS: 0
CDPSTA: XWD .TYCDP!.SPCDP,0 ;SPOOLABLE, PUNCH
CDPXTR: 0
CPPEVM: 0
CPPPSI: 0
CPPESE: 0
CPPHCW: 0
CPPJOB: 0
CDPCTR: 0
CDPCNT:: 0
CDPCON: 0
CPFCON: 5100,,0
$HIGH
INTERN CDPDDB,CDPDSP,CDPINT
EXTERN CDPCHN,CDPCHL,CPFSAV,STOIOS,CLRACT,SETIOD,IOSET,ITMCT1,WAIT1
EXTERN ILLINP,ADVBFE,CKS12,CPOPJ1,OUT,PJOBN,JBTADR,JOB,HNGSTP,PBUFSZ
;CONI/CONO BITS
CO.INI==1B20 ;INITIALIZE
CO.RJT==1B21 ;REJECT/OFFSET A CARD
CO.EJT==1B23 ;EJECT A CARD
CO.PID==1B24 ;DISABLE PI INTERRUPTS ON TROUBLE
CO.PIE==1B25 ;ENABLE PI INTERRUPTS ON TROUBLE
CO.CLR==1B26 ;CLEAR ERROR FLOP
CO.DIE==1B27 ;DISABLE EOC INTERRUPTS
CO.EIE==1B28 ;ENABLE EOC INTERRUPTS
CO.CEO==1B29 ;CLEAR EOC FLOP
CO.PON==1B30 ;TURN ON PUNCH MOTOR
CO.CDR==1B31 ;CLEAR DATA REQUEST FLOP
CO.SDR==1B32 ;SET DATA REQUEST FLOP
CI.OFL==1B18 ;OFF LINE
CI.HSC==1B21 ;HOPPER/STACKER FULL OR CHAD BOX FULL
CI.PIK==1B22 ;PICK FAILURE
CI.EJT==1B23 ;EJECT FAILURE
CI.TRB==1B24 ;TROUBLE
CI.TIE==1B25 ;TROUBLE INTERRUPTS ENABLED
CI.ERR==1B26 ;DATA OR TIMING ERROR
CI.CIP==1B27 ;CARD IN PUNCH
CI.ECI==1B28 ;EOC INTERRUPTS ENABLED
CI.EOC==1B29 ;END OF CARD
CI.PON==1B30 ;PUNCH IS ON
CI.BSY==1B31 ;BUSY
CI.DRQ==1B32 ;DATA REQUEST
CDPCTO==:CDPCNT-CDPDDB
CDTRY==3 ;NUMBER OF RETRIES BEFORE CALLING IT A HARD ERROR
;BITS IN S
PCHBIT==2000 ;RH - ON IF PUNCH AN ASCII CARD (SAW A LINE-FEED)
;LEFT HAND BITS
NOADV==1000 ;ON IF MORE IN THE BUFFER TO PUNCH
CLSBIT==2000 ;CLOSE HAS HAPPENNED
FILPRT==4000 ;CURRENT BUFFER (MONITOR) IS PARTIALLY FULL
CDPTBL==10000 ;TROUBLE DETECTED ON INTERRUPT LEVEL
CDPRCV==20000 ;RECOVERY FROM TROUBLE IN PROGRESS
;DISPATCH TABLE
POPJ P,0 ;SPECIAL ERROR STATUS
JRST CDPSTL ;DDB SETUP ROUTINE
JRST CDPRST ;INITIALIZE
JRST CDPHNG ;HUNG DEVICE
CDPDSP: JRST CDPRST ;RELEASE
JRST CDPCLS ;CLOSE
JRST CDPOUT ;OUTPUT
JRST ILLINP ;INPUT IS ILLEGAL
;CLOSE UUO
CDPCLS: TLO S,CLSBIT ;CLOSE IS HAPPENING
IFN FTCPTR,<
TLZ S,CDPTBL ;CLEAR TROUBLE BIT
>
MOVEM S,CDPIOS ;SAVE IN DDB
PUSHJ P,OUT ;OUTPUT LAST PARTIAL BUFFER
PUSHJ P,WAIT1 ;WAIT FOR CARD TO BE PUNCHED
TLZ S,NOADV+CLSBIT+FILPRT ;ZERO SOME S BITS
MOVEI T1,7417 ;SET TO PUNCH AN EOF CARD
PUSHJ P,SETFRE
JRST CDPON ;PUNCH IT AND RETURN TO USER
;HERE TO RESET DDB
CDPRST: SETZ T1, ;GET A WORD OF ZEROES
DPB T1,PBUFSZ ;RESET SIZE TO ZERO
IFN FTCPTR,<
TLZ S,37010 ;CLEAR ALL BITS IN S
PUSHJ P,STOIOS ;AND SAVE IN DDB
>
MOVSI T1,DEPADV ;CLEAR DONT-ADVANCE BUFFERS BIT
ANDCAM T1,DEVADV(F) ; FROM DDB
JRST CDPOFF ;GO TURN OFF PUNCH
;HERE TO SETUP DDB BUFFERSIZE
CDPSTL: MOVEI T1,21 ;SET FOR ASCII
TRNN M,10 ;SKIP IF NOT ASCII
POPJ P, ;EXIT IF ASCII, T1=BUFFER SIZE
MOVEI T1,33 ;SET FOR BINARY
TRNN M,4 ;SKIP IF BINARY
MOVEI T1,34 ;MUST BE IMAGE
POPJ P, ;RETURN WITH T1=BUFFER SIZE
;OUTPUT UUO
CDPOUT:
IFN FTCPTR,<
TLZN S,CDPTBL ;TROUBLE DETECTED ON INTERRUPT LEVEL?
JRST CDPOU1 ;NO
MOVEM S,CDPIOS ;YES, SAVE S (CDPTBL OFF)
>
CDPSTP: MOVSI T1,DEPADV ;BIT TO TELL HNGSTP NOT TO DE-ADVANCE BUFFERS
IORM T1,CDPSTA ;PUT IN DEVADV (=CDPSTA)
TLNE S,IOBEG ;UNLESS VIRGIN BUFFERS
ANDCAM T1,CDPSTA ;THEN LET DE-ADVANCE HAPPEN
PUSHJ P,HNGSTP ;HALT JOB AND PRINT MESSAGE
MOVSI T1,DEPADV
ANDCAM T1,CDPSTA ;RESET DEPADV
TLZ S,IOSTBL ; AND S
CDPOU1: TLO S,IO ;TELL THE WORLD THIS IS OUTPUT
CONO CDP,CO.INI ;CLEAR PUNCH
CONSO CDP,474000 ;CHECK FOR TROUBLE
JRST OKAY ;CONTINUE IF READY
MOVE J,JOB ;SET UP MSG IF NOT
JRST CDPSTP ;GO WAIT FOR "CONT" TO BE TYPED
OKAY: TLZE S,CDPRCV ;RECOVERING
JRST CDPON ;YES, USE CURRENT BUFFER
TLZN S,IOBEG ;VIRGIN DEVICE?
JRST CDPSET ;NO
MOVEI T1,4242 ;YES. SET TO PUNCH A FREE CARD
TRNE S,100 ;029 CHAR SET?
MOVEI T1,5252 ;YES.
TRNN S,14 ;ASCII?
PUSHJ P,SETFRE ;YES. PUNCH A FREE CARD
;COME HERE TO SET UP THE MONITOR BUFFER
CDPSET: MOVEM S,CDPIOS ;IOSET LOADS S
PUSHJ P,IOSET ;SET UP R
MOVEI T3,44 ;ASSUME BINARY
TRNN S,10 ;IS IT?
MOVEI T3,7 ;NO, SET BYTE SIZE FOR ASCII
MOVEI U,@CDPOAD ;FIRST WORD OF BUFFER
AOS U ;POINT TO WDCNT WORD
HRRZ J,(U) ;WORD COUNT
CAILE J,33 ;26 2/3 WORDS ALLOWED - IMAGE BIN
MOVEI J,33
DPB J,WDCPTR ;STORE IN WDCNT OF BINARY CARD
MOVE T2,T3
PUSHJ P,ITMCT1 ;NUMBER OF DATA ITEMS
JUMPE J,BUFADV ;TRY NEXT BUFFER IF NULL
LSH T3,6 ;SET SIZE INTO POINTER
HRLM T3,U ;POINTER TO DATA
TLZE S,FILPRT ;CONTINUE IN SAME BUFFER?
JRST NXTCON ;YES. SET POINTER AND CONTINUE
NXTSET: SETZM COLCNT ;START AT COLUMN 1
MOVE T1,[XWD BUF,BUF+1]
SETZM BUF ;ZERO THE BUFFER OF EXTRANEOUS DATA
BLT T1,BUF+32
MOVEI T3,BUF-1
HLL T3,U ;SET UP SIZE FIELD
TLNE T3,100 ;IF ASCII, SET SIZE TO 14
HRLI T3,1400
TEMSET: ILDB T1,U ;DATA ITEM FROM USER
TRNN S,14 ;ASCII?
PUSHJ P,ASCONV ;YES. CONVERT TO 12 BITS
IDPB T1,T3 ;STORE IN MONITOR BUF
SOJG J,TEMSET ;LOOP ON COUNT
TRNN S,14
JRST SETPTR ;NO - IMAGE BIN OR ASCII
TRNN S,4
JRST TEMS2
MOVEI T2,@CDPOAD ;YES. COMPUTE CHKSUM
PUSHJ P,CKS12
MOVSS T1 ;IT COMES BACK IN LH(T1)
DPB T1,CKSPTR ;SAVE IN COLUMN 2 LOC
TEMS2: LDB T2,WDCPTR ;CONVERT WORDCOUNT TO
IMULI T2,3 ;NUMBER OF COLS TO PUNCH
ADDI T2,2 ;COLS 1 AND 2 ARE FREE
TRNE S,4
SKIPA T1,BINPTR ;OUTPUT POINTER IS BUF-1
SETPTR: MOVE T1,[POINT 12,BUF,] ;ASCII POINTER IS BUF
TDNN S,[XWD CLSBIT,PCHBIT+10]
JRST PRTFUL ;NO. ASCII WITH NO LINE FEED
MOVEM T1,CDPNTR ;POINTER TO DATA IN BUF
MOVEM T1,CDOPTR ;SAVE FOR ERROR
CAILE T2,^D80 ;ONLY PUNCH 80 COLUMNS
MOVEI T2,^D80
MOVEM T2,CDPCTR ;NUMBER OF COLUMNS TO PUNCH
MOVEM T2,CDOCTR ;SAVE FOR ERROR RECOVERY
SETZM ERRCNT
CDPON: MOVEI T1,5110 ;DATA OR EOC INTERRUPTS
SETZM EOCOK ;INDICATE THAT AN EOC INTERRUPT HERE IS SPURIOUS
CONO PI,PI.OFF
MOVEM T1,CDPCON ;
;(IF AN EJECT WAS GIVEN FOR THE PREVIOUS CARD, IT MAY STILL BE MOVING
;OUT OF THE PUNCH, AND WHEN IT FINALLY DOES CLEAR, AN END-OF-CARD INTERRUPT
;WILL BE GENERATED)
CONO CDP,3340+CDPCHN ;START THE PUNCH, CLEAR ALL FLOPS, ENABLE ALL
CONO PI,PI.ON
TRO S,IOACT ;SETACT ZEROES IOW, WHICH MIGHT BE ON
TRZ S,PCHBIT
JRST STOIOS
;HERE TO CONVERT ASCII TO 12 BITS TO PUNCH
ASCONV: AOS T2,COLCNT ;PRESENT COLUMN
JUMPE T1,NOPUN ;FORGET IT IF A NULL
CAIN T1,12 ;LINE FEED?
JRST PNCHCD ;YES. SET UP TO PUNCH
CAIE T1,15 ;NO,CAR RET?
CAIN T1,14 ;OR FORM FEED?
JRST NOPUN ;YES. IGNORE CHAR
CAIN T1,177 ;RUB-OUT?
JRST NOPUN ;YES,IGNORE CHAR.
CAILE T2,^D80 ;OVERFLOW?
JRST OVERFL ;YES. LIGHT IOBKTL
CAIL T1,40 ;REGULAR CHARACTER?
CAILE T1,140
JRST SPEC ;NO. SPECIAL HANDLING
SUBI T1,40 ;YES. CONVERT FROM TABLE
ASCNV2: IDIVI T1,3 ;3 CHARS PER TABLE WORD
TRNE S,100 ;029 SET?
ADDI T2,3 ;YES. BUMP TO 029 TABLE
LDB T1,CRDPTR(T2) ;GET 12 BITS
POPJ P, ;AND RETURN
SPEC: CAIL T1,40 ;LOWER CASE LETTER?
CAILE T1,172
JRST SPEC2 ;NO. CONTROL CHAR
TRZ T1,100 ;YES. CONVERT TO UPPER CASE, SUBI 40
JRST ASCNV2 ;GET TABLE WORD
SPEC2: CAIN T1,11 ;TAB?
JRST TAB ;YES. PUNCH SOME SPACES
MOVEI T1,100 ;ILLEGAL CHAR - PUNCH "\"
JRST ASCNV2
TAB: SETZ T1, ;SET TO PUNCH A BLANK
IDPB T1,T3 ;STORE A BLANK IN BUF
TRNE T2,7 ;AT A TAB STOP ?
AOJA T2,.-2 ;NO, SET NEXT COLUMN
MOVEM T2,COLCNT ;YES, SAVE UPDATED COLUMN
JRST CPOPJ1 ;AND CONTINUE
PNCHCD: TRO S,PCHBIT ;LIGHT PUNCH-A-CARD BIT
SOJLE J,NOPUN ;THROUGH WITH BUFFER IF 0
ILDB T1,U ;LOOK AT NEXT CHAR
JUMPE T1,.-2 ;LOOP IF NULL
TLO S,NOADV ;REAL CHAR. - DONT ADVANCE BUFFERS
MOVEM U,DATSAV ;SAVE POINTERS TO DATA
MOVEM J,ITMSAV
MOVEI J,0 ;SET TO DROP THROUGH LOOP
NOPUN: SOSN T2,COLCNT ;LAST CHAR SEEN IS NOT PUNCHED
MOVEI T2,1 ;ALWAYS PUNCH 1 COLUMN
JRST CPOPJ1 ;RETURN
NXTPRT: MOVE U,DATSAV ;RESTORE POINTERS TO DATA
MOVE J,ITMSAV ;COUNT OF DATA LEFT
JRSTF @.+1 ;LIGHT BYTE-INCREMENT-SUPPRESSION FLAG
XWD 24000,NXTSET ;AND GO PUNCH NEXT CARD
PRTFUL: MOVEM T3,DATSAV
TLO S,FILPRT
JRST BUFADV
;CONTINUE IN SAME MONITOR BUFFER
NXTCON: MOVE T3,DATSAV ;POINTER TO LAST CHAR STORED
JRST TEMSET ;GO FILL REST
;SET UP TO PUNCH A FREE CARD
SETFRE: MOVEM T1,FRECRD ;WHAT TO PUNCH
MOVEI T1,^D80 ;PUNCH 80 COLS.
MOVEM T1,FRECNT ;(EJECT ON 81ST DATA REQ)
POPJ P,
;INTERRUPT PROCESSING SECTION
CDPINT: CONSO CDP,@CDPCON ;PUNCH INTERRUPT?
JRST . ;NO. GO AWAY
IFN FT5UUO,<
CONI CDP,CDPSTS ;STORE CONI STATUS IN DDB
>
CONSZ CDP,4100 ;EOC OR TROUBLE?
JRST NOTDAT ;NON-DATA INTERRUPT
CONSZ CDP,1000 ;NO. PUNCH ERROR?
JRST LACE ;YES, LACE REST OF CARD
SKIPE FRECRD ;DATA REQUEST. PUNCHING A FREE CARD?
JRST FREINT ;YES. PUNCH IT
MOVEM T1,CDPTMP ;NO. SAVE T1
SOSGE CDPCTR ;ANY DATA TO PUNCH?
JRST CRDUN ;NO. THROUGH WITH CARD
ILDB T1,CDPNTR ;NEXT BYTE TO PUNCH
DATAO CDP,T1 ;GIVE IT TO PUNCH
INTXIT: MOVE T1,CDPTMP ;RESTORE T1
SETOM EOCOK ;ANY EOC INTERRUPT AFTER THIS IS LEGAL
JEN @CDPCHL ;AND DISMISS INTERRUPT
;HERE WHEN ALL DATA FOR A CARD IS PUNCHED
CRDUNX: MOVEM T1,CDPTMP
CRDUN: CONO CDP,10020+CPFCHN ;EJECT A CARD
HLRS CPFCON
SETZM CDPCON
JRST INTXIT
;HERE FOR A DATA REQUEST WHILE PUNCHING A FREE CARD
FREINT: SOSGE FRECNT ;PUNCHED 80 COLS.
JRST CRDUNX ;YES, EJECT
DATAO CDP,FRECRD ;NO, PUNCH A COLUMN
SETOM EOCOK ;EOC INTERRUPT IS LEGAL
JEN @CDPCHL ;DISMISS THE INTERRUPT
LACE: SKIPE CP10D## ;IS THIS A CP10D?
JRST NOTDAT ;YES, CARD IS AUTOMATICALLY REJECTED
DATAO CDP,SEVENS ;NO, LACE REST OF CARD
JEN @CDPCHL
;HERE ON A NON DATA-REQUEST INTERRUPT
NOTDAT: CONO PI,PI.OFF ;TURN OFF PI FOR SAFETY'S SAKE
CONO CDP,2220+CPFCHN## ;SWITCH CDP TO LOW PI LEVEL
SETZM CDPCON ; FOR END-OF-CARD PROCESSING
HLRS CPFCON ;ENABLE FOR ALL BUT DATA REQUEST
CONO PI,PI.ON ;RESTORE PI SYSTEM
JEN @CDPCHL ; AND GO AWAY
;INTERRUPT HERE ON LOWER LEVEL PI REQUEST
CPFINT::CONSO CDP,@CPFCON ;FOR US?
JRST . ;NO
IFN FT5UUO,<
CONI CDP,CDPSTS
>
HLLZS CPFCON ;YES, WE WONT WANT THIS PI INTRPT AGAIN
JSR CPFSAV ;SAVE ACS, SET UP P
MOVE S,CDPIOS ;SET S
MOVEI F,CDPDDB ;AND F
LDB J,PJOBN
MOVE R,JBTADR(J) ;RELOCATION
CONSZ CDP,CI.TRB ;TROUBLE?
JRST TRBL ;YES
CONSZ CDP,CI.ERR ;ERROR?
JRST ERROR ;YES. TOO BAD
;HERE ON AN END OF CARD INTERRUPT
SKIPN EOCOK ;SPURIOUS END-OF-CARD INTERRUPT?
JRST CDPON ;YES. CLEAR EOC AND TRY AGAIN
AOS CDPCNT ;COUNT THE CARDS
;AND FALL INTO CRDUN1
;HERE ON EOC INTERRUPT
CRDUN1: CONSZ CDP,CI.TRB ;PUNCH ERROR?
JRST ERROR ;YES. TOUGH
CONSZ CDP,CI.CIP ;CARD IN PUNCH?
CONO CDP,10020 ;YES, EJECT IT
SEVENS: SETZ T1,1414
EXCH T1,FRECRD ;DONE WITH A FREE CARD IF T1 NOT 0
JUMPN T1,FREDUN
BUFADV: TLZE S,NOADV
JRST NXTPRT ;PUNCH MORE FROM SAME BUFFER
;IO WAIT?
PUSHJ P,SETIOD ;YES. WAKE IT UP
PUSHJ P,ADVBFE ;ADVANCE BUFFERS
JRST CDPOFF ;NEXT IS NOT READY
JRST CDPSET ;GO PUNCH THIS BUFFER
FREDUN: SKIPG CDPCTR ;MORE DATA TO PUNCH?
JRST TRNOFF ;NO. SHUT DOWN PUNCH
CONSZ CDP,CI.CIP ;CARD STILL IN PUNCH
JRST .-1 ;YES, WAIT FOR IT TO CLEAR
JRST CDPON ;YES. DO NEXT CARD
OVERFL: POP P,T1
TROA S,IOBKTL ;YES. ERROR
TOOBAD: TRO S,IODERR ;DEVICE ERROR
TRNOFF: PUSHJ P,SETIOD ;TAKE OUT OF IO WAIT
CDPOFF: CONO CDP,CO.INI ;RESET PUNCH
HLLZS CDPCON ;DONT LOOK AT INTERRUPTS
TRZ S,IOACT ;CLEAR IOACT (ION MAY BE ON)
IFN FTKI10!FTKL10,<
PUSHJ P,RTEVMO##
>
JRST STOIOS## ;AND RETURN
;HERE ON TROUBLE OR PUNCH ERROR
ERROR: CONO CDP,51120 ;PUNCH ERROR - EJECT OFFSET
AOS T1,ERRCNT ;BUMP RETRY COUNT
CAIL T1,CDTRY ;TRIED ENOUGH?
JRST TOOBAD ;YES. SHUT DOWN
MOVE T1,CDOPTR ;NO. RESET TO TRY AGAIN
MOVEM T1,CDPNTR
MOVE T1,CDOCTR
MOVEM T1,CDPCTR
JRST CDPON ;TRY TRY AGAIN
IFN FTCPTR,<
CDPHNG: AOS (P) ;SKIP RETURN SO NO HUNG MESSAGE
TRBL: TLO S,CDPTBL+CDPRCV ;YES, SET TROUBLE
CONSO CDP,470000 ;SKIP IF TROUBLE CONDITION WHICH DOES
; NOT REQUIRE RESETTING BUFFERS.
CONSO CDP,CI.ERR ;SKIP IF ERROR ON
JRST CDPHG1 ;NO
MOVE T1,CDOPTR ;YES, RESET POINTERS FOR NEXT CARD
MOVEM T1,CDPNTR
MOVE T1,CDOCTR
MOVEM T1,CDPCTR
CDPHG1: PUSHJ P,CDPOFF ;TURN OFF CDP
JRST DEVERR## ;CAUSE UUOCON TO RETRY AT UUO LEVEL
>
IFE FTCPTR,<
CDPHNG=CDPOFF
TRBL: PUSHJ P,CDPOFF
JRST DEVERR##
>
CRDPTR: POINT 12,TBL26(T1),11
POINT 12,TBL26(T1),23
POINT 12,TBL26(T1),35
POINT 12,TBL29(T1),11
POINT 12,TBL29(T1),23
POINT 12,TBL29(T1),35
TBL26: BYTE (12) 0,4006,1022 ;SPACE ! "
BYTE (12) 1012,2102,1006 ;# $ %
BYTE (12) 2006,12,1042 ;& ' (
BYTE (12) 4042,2042,4000 ;) * +
BYTE (12) 1102,2000,4102 ;, - .
BYTE (12) 1400,1000,400 ;/ 0 1
BYTE (12) 200,100,40 ;2 3 4
BYTE (12) 20,10,4 ;5 6 7
BYTE (12) 2,1,3000 ;8 9 :
BYTE (12) 1202, 4012, 102 ;; < =
BYTE (12) 2012,5000,42 ;> ? @
BYTE (12) 4400,4200,4100 ;A B C
BYTE (12) 4040,4020,4010 ;D E F
BYTE (12) 4004,4002,4001 ;G H I
BYTE (12) 2400,2200,2100 ;J K L
BYTE (12) 2040,2020,2010 ;M N O
BYTE (12) 2004,2002,2001 ;P Q R
BYTE (12) 1200,1100,1040 ;S T U
BYTE (12) 1020,1010,1004 ;V W X
BYTE (12) 1002,1001,2022 ;Y Z [
BYTE (12) 6,4022,22 ;\ ] ^
BYTE (12) 202,6,0 ;_ (100=\)
TBL29: BYTE (12) 0,4006,6 ;SPACE ! "
BYTE (12) 102,2102,1042 ;# $ %
BYTE (12) 4000,22,4022 ;& ' (
BYTE (12) 2022,2042,4012 ;) * +
BYTE (12) 1102,2000,4102 ;, - .
BYTE (12) 1400,1000,400 ;/ 0 1
BYTE (12) 200,100,40 ;2 3 4
BYTE (12) 20,10,4 ;5 6 7
BYTE (12) 2,1,202 ;8 9 :
BYTE (12) 2012,4042,12 ;; < =
BYTE (12) 1012,1006,42 ;> ? @
BYTE (12) 4400,4200,4100 ;A B C
BYTE (12) 4040,4020,4010 ;D E F
BYTE (12) 4004,4002,4001 ;G H I
BYTE (12) 2400,2200,2100 ;J K L
BYTE (12) 2040,2020,2010 ;M N O
BYTE (12) 2004,2002,2001 ;P Q R
BYTE (12) 1200,1100,1040 ;S T U
BYTE (12) 1020,1010,1004 ;V W X
BYTE (12) 1002,1001,4202 ;Y Z [
BYTE (12) 1202,2202,2006 ;\ ] ^
BYTE (12) 1022,1202,0 ;_ (100=\)
WDCPTR: POINT 5,BINBUF,17
CKSPTR: POINT 12,BINBUF,35
BINPTR: POINT 12,BINBUF,11
$LOW
CDOCTR: 0
CDOPTR: 0
CDPTMP: 0
ERRCNT: 0
FRECRD: 0
FRECNT: 0
COLCNT: 0
ITMSAV: 0
DATSAV: 0
EOCOK: 0
BINBUF: EXP 50000
BUF: BLOCK 33
$LIT
END