.TITLE CONVERT FROM ONE RECORD FORMAT TO ANOTHER .IDENT /01/ ; ; P. A. NIDD ; 18-SEPT-78 ; ; MODIFIED: DW. ENSTROM -- ADDITION OF TRANSLATION FROM EBCDIC TO ASCII ; 10-DEC-79 ; ; ; THIS PROGRAM IS MEANT TO BE USED TO CONVERT BETWEEN DIFFERENT RECORD ; FORMATS. FOR EXAMPLE, FROM CARD IMAGE FORMAT TO LINE PRINTER FORMAT ; WHERE THE FIRST CHARACTER IS A CARRIAGE CONTROL CHARACTER. IT WILL ; ALSO TRANSLATE THE INPUT FROM EBCDIC TO ASCII IF DESIRED. ; ; THIS PROGRAM IS ACTIVATED BY A RUN COMMAND ISSUED BY A TERMINAL. THE ; PROGRAM THEN PROMPTS FOR THE FOLLOWING INFORMATION: ; INPUT DEVICE, DEFAULT DK1:, MAXIMUM 4 CHARACTERS ; INPUT UIC, DEFAULT [200,200], MAXIMUM 9. CHARACTERS ; INPUT FILENAME, DEFAULT GARBAGE.DAT, MAXIMUM 13. CHARACTERS ; THE PROGRAM THEN PRINTS OUT THE FOLLOWING INFORMATION: ; INPUT FILE TYPE (FIXED, VARIABLE, OR DON'T KNOW) ; MAXIMUM RECORD SIZE ON INPUT FILE ; WHETHER OR NOT THE FIRST CHARACTER OF EACH INPUT RECORD CONTAINS ; A CARRIAGE CONTROL CHARACTER ; THE PROGRAM THEN CONTINUES PROMPTING FOR THE FOLLOWING INFORMATION: ; INPUT LOGICAL RECORD SIZE (DEFAULT MAXIMUM RECORD LENGTH) ; MAXIMUM 3 CHARACTERS ; WHETHER OR NOT TO TRUNCATE TRAILING BLANKS OF OUTPUT, DEFAULT ; YES, MAXIMUM 1 CHARACTER ; WHETHER OR NOT TO TRANSLATE THE FILE FROM EBCDIC TO ASCII, DEFAULT ; NO, MAXIMUM 1 CHARACTER ; LOGICAL OUTPUT RECORD SIZE, DEFAULT 133, MAXIMUM 3 CHARACTERS ; WHETHER OR NOT FIRST CHARACTER OF EACH OUTPUT RECORD CONTAINS ; A CARRIAGE CONTROL CHARACTER, DEFAULT YES, MAXIMUM ; 1 CHARACTER ; OUTPUT DEVICE, DEFAULT DK1:, MAXIMUM 4 CHARACTERS ; OUTPUT UIC, DEFAULT [200,200], MAXIMUM 9. CHARACTERS ; OUTPUT FILENAME, DEFAULT GARBAGE.DAT, MAXIMUM 13. CHARACTERS ; NUMBER OF RECORDS TO BE READ IN BEFORE OUTPUTTING ANY, DEFAULT ; 1 IF LOGICAL INPUT RECORD SIZE IS GREATER THAN OR EQUAL ; TO LOGICAL OUTPUT RECORD SIZE, 2 OTHERWISE, MAXIMUM ; 1 CHARACTER ; NUMBER OF RECORDS TO BE OUTPUT FROM THOSE JUST READ IN, DEFAULT ; 1 IF LOGICAL INPUT RECORD SIZE IS LESS THAN OR EQUAL ; TO LOGICAL OUTPUT RECORD SIZE, 2 OTHERWISE, MAXIMUM ; 1 CHARACTER ; ; THE SPECIFIED NUMBER OF RECORDS ARE THEN READ IN AND THEY ARE CONTATINATED ; TOGETHER (ALL RECORDS READ IN ARE FIRST PADDED BY BLANKS OUT TO THE ; LOGICAL INPUT RECORD LENGTH IF NEED BE). THE SPECIFIED NUMBER OF OUTPUT ; RECORDS ARE NOW WRITTEN FROM THIS BUFFER (IF VARIABLE LENGTH OUTPUT WAS ; CHOSEN THEN TRAILING BLANKS ARE NOT OUTPUT). IF THE BUFFER WAS NOT LONG ; ENOUGH THEN IT IS PADDED BY BLANKS, IF IT WAS TOO LONG THEN THE EXTRA ; BYTES ARE THROWN AWAY. ; ; THE COMMAND FILE TO BUILD THIS TASK IS: ; ; ; ; CONVERT,CONVERT=CONVERT ; / ; UNITS=3 ; ASG=TI:1,DK1:2:3 ; ACTFIL=2 ; STACK=60 ; RESLIB=DK0:[1,1]FCSRES/RO ; TASK=...CON ; // ; ; ; .MCALL FCSMC$,QIOW$C,EXIT$S FCSMC$ FSRSZ$ 2 FDBIN: FDBDF$ FDOP$A 2,DATIN,,,FA.ENB!FA.DLK DATIN: .WORD 4,DEVIN,9.,UICIN,11.,FILIN FDBOUT: FDBDF$ FDAT$A R.VAR,FD.FTN,133. FDOP$A 3,DATOUT,,,FA.ENB!FA.DLK DATOUT: .WORD 4,DEVOUT,9.,UICOUT,11.,FILOUT DEVIN: .ASCII /DK1:/ DEVOUT: .ASCII /DK1:/ UICIN: .ASCII /[200,200]/ UICOUT: .ASCII /[200,200]/ FILIN: .ASCII /GARBAGE.DAT / FILOUT: .ASCII /GARBAGE.DAT / .EVEN ; ; ; START: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 2$ JMP ERROR 2$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 4$ JMP ERROR 4$: TST IOST+2 BEQ CONT3 MOV IOST+2,DATIN ; ; ; CONT3: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 6$ JMP ERROR 6$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 8$ JMP ERROR 8$: TST IOST+2 BEQ CONT4 MOV IOST+2,DATIN+4 ; ; ; CONT4: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 10$ JMP ERROR 10$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 12$ JMP ERROR 12$: TST IOST+2 BEQ CONTN MOV IOST+2,DATIN+8. ; ; ; CONTN: OPEN$R #FDBIN,,,,,,ERROR MOV FDBIN+F.RSIZ,LIRL ; BITB FDBIN+F.RTYP,#R.FIX BEQ CONTP BITB FDBIN+F.RTYP,#R.VAR BNE CONTQ QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ CONTR JMP ERROR ; CONTP: BITB FDBIN+F.RTYP,#R.VAR BEQ CONTQ QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ CONTR JMP ERROR ; CONTQ: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ CONTR JMP ERROR ; ; ; CONTR: CLR R0 MOV FDBIN+F.RSIZ,R1 BIC #177400,R1 DIV #100.,R0 ADD #'0,R0 MOVB R0,L1 CLR R0 DIV #10.,R0 ADD #'0,R0 MOVB R0,L2 ADD #'0,R1 MOVB R1,L3 QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ A$ JMP ERROR ; ; ; A$: BITB FDBIN+F.RATT,#FD.CR BEQ CONTS BITB FDBIN+F.RATT,#FD.FTN BNE CONTT QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ CONTU JMP ERROR ; CONTS: BITB FDBIN+F.RATT,#FD.FTN BEQ CONTT QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ CONTU JMP ERROR CONTT: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ CONTU JMP ERROR ; ; ; CONTU: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 16$ JMP ERROR 16$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 18$ JMP ERROR 18$: TST IOST+2 BEQ CONTV CLR R3 MOV #BUFF,R0 MOV IOST+2,R1 LOOP1: MOVB (R0)+,R2 SUB #'0,R2 CMPB #10.,R2 BLOS CONTU MUL #10.,R3 ADD R2,R3 SOB R1,LOOP1 ; CMP R3,FDBIN+F.RSIZ BLO CONTU MOV R3,LIRL ; ; ; CONTV: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 20$ JMP ERROR 20$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 22$ JMP ERROR 22$: TST IOST+2 BEQ CONTI CMPB #'Y,BUFF BEQ CONTI CMPB #'N,BUFF BNE CONTV MOVB #R.FIX,FDBOUT+F.RTYP ; ; ; ; CONTI: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 24$ JMP ERROR 24$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 26$ JMP ERROR 26$: TST IOST+2 BEQ CONT5 CMPB #'N,BUFF BEQ CONT5 CMPB #'Y,BUFF BNE CONTI MOV #1,TRANSL ; ; ; ; CONT5: MOV FDBOUT+F.RSIZ,LORL QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 28$ 28$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 30$ JMP ERROR 30$: TST IOST+2 BEQ CONT6 CLR R3 MOV #BUFF,R0 MOV IOST+2,R1 LOOP2: MOVB (R0)+,R2 SUB #'0,R2 CMPB #10.,R2 BLOS CONT5 MUL #10.,R3 ADD R2,R3 SOB R1,LOOP2 ; MOV R3,LORL CMPB #R.FIX,FDBOUT+F.RTYP BNE CONT6 MOV R3,FDBOUT+F.RSIZ ; ; ; CONT6: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 32$ JMP ERROR 32$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 34$ JMP ERROR 34$: TST IOST+2 BEQ CONT7 CMPB #'Y,BUFF BEQ CONT7 CMPB #'N,BUFF BNE CONT6 MOVB #FD.CR,FDBOUT+F.RATT ; ; ; CONT7: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 36$ JMP ERROR 36$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 38$ JMP ERROR 38$: TST IOST+2 BEQ CONT8 MOV IOST+2,DATOUT ; ; ; CONT8: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 40$ JMP ERROR 40$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 42$ JMP ERROR 42$: TST IOST+2 BEQ CONT9 MOV IOST+2,DATOUT+4 ; ; ; CONT9: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 44$ JMP ERROR 44$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 46$ JMP ERROR 46$: TST IOST+2 BEQ CONTA MOV IOST+2,DATOUT+8. ; ; ; ; CONTA: CMP LIRL,LORL BEQ CONTB BLO CONTC MOV #1.,NUMIN MOVB #'1,L4 MOV #2.,NUMOUT MOVB #'2,L5 JMP CONTD ; CONTB: MOV #1.,NUMIN MOVB #'1,L4 MOV #1.,NUMOUT MOVB #'1,L5 JMP CONTD ; CONTC: MOV #2.,NUMIN MOVB #'2,L4 MOV #1.,NUMOUT MOVB #'1,L5 ; ; ; CONTD: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 48$ JMP ERROR 48$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 50$ JMP ERROR 50$: TST IOST+2 BEQ CONTE MOVB BUFF,R1 SUB #'0,R1 BEQ CONTD CMPB #10.,R1 BLOS CONTD MOV R1,NUMIN ; ; ; CONTE: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 52$ JMP ERROR 52$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 54$ JMP ERROR 54$: TST IOST+2 BEQ CONTF MOVB BUFF,R1 SUB #'0,R1 BEQ CONTE CMPB #10.,R1 BLOS CONTE MOV R1,NUMOUT ; ; ; CONTF: OPEN$W #FDBOUT,,,,,,ERROR MOV LIRL,R1 MUL NUMIN,R1 MOV LORL,R3 MUL NUMOUT,R3 CMP R3,R1 BLOS LOOP4 MOV #BUFF,R2 ADD R1,R2 SUB R1,R3 ; LOOP3: MOVB #' ,(R2)+ SOB R3,LOOP3 ; ; ; LOOP4: MOV NUMIN,R1 MOV #BUFF,R2 ; LOOP5: GET$ #FDBIN,R2,#999.,ERRE TST TRANSL BEQ 10$ MOV FDBIN+F.NRBD,R4 BEQ 10$ MOV R2,R3 CALL EBCDIC 10$: ADD FDBIN+F.NRBD,R2 MOV LIRL,R3 SUB FDBIN+F.NRBD,R3 BLOS CONTG ; LOOP6: MOVB #' ,(R2)+ SOB R3,LOOP6 ; CONTG: SOB R1,LOOP5 ; ; ; MOV NUMOUT,R1 MOV #BUFF,R2 ; LOOP7: MOV LORL,R3 CMPB FDBOUT+F.RTYP,#R.VAR BNE CONTH MOV R2,R4 ADD LORL,R4 ; LOOP8: CMPB #' ,-(R4) BNE CONTH SOB R3,LOOP8 ; MOV #1,R3 ; CONTH: PUT$ #FDBOUT,R2,R3,ERROR ADD LORL,R2 SOB R1,LOOP7 ; JMP LOOP4 ; ; ; ; ; ERRE: CLOSE$ #FDBOUT,ERROR CLOSE$ #FDBIN,ERROR EXIT$S ; ; ; ERROR: MOV IOST,R1 MOV IOST+2,R2 MOV F.ERR(R0),R3 ; ; ; .NLIST BEX PBUF3: .ASCII <15>/INPUT DEVICE? (DEFAULT DK1:): / PBUF3S=.-PBUF3 PBUF4: .ASCII <15>/INPUT UIC? (DEFAULT [200,200]): / PBUF4S=.-PBUF4 PBUF5: .ASCII <15>/INPUT FILENAME? (DEFAULT GARBAGE.DAT): / PBUF5S=.-PBUF5 BUFP: .ASCII /INPUT RECORDS ARE FIXED LENGTH FORMAT./ BUFPS=.-BUFP BUFQ: .ASCII /INPUT RECORDS ARE VARIABLE LENGTH FORMAT./ BUFQS=.-BUFQ BUFR: .ASCII /DON'T KNOW INPUT RECORD TYPE./ BUFRS=.-BUFR BUFS: .ASCII /MAXIMUM INPUT RECORD SIZE IS / L1: .ASCII / / L2: .ASCII / / L3: .ASCII / / BUFSS=.-BUFS BUFT: .ASCII /INPUT RECORDS DO NOT HAVE CARRIAGE CONTROL CHARACTER IN FIRST/ .ASCII / BYTE OF EVERY RECORD./ BUFTS=.-BUFT BUFU: .ASCII /INPUT RECORDS DO HAVE CARRIAGE CONTROL CHARACTER IN FIRST/ .ASCII / BYTE OF EVERY RECORD./ BUFUS=.-BUFU BUFV: .ASCII /DO NOT KNOW WHETHER INPUT RECORDS HAVE CARRIAGE CONTROL CHAR/ .ASCII / IN FIRST BYTE OF EVERY RECORD./ BUFVS=.-BUFV PBUFW: .ASCII <15>/INPUT LOGICAL RECORD SIZE? (GE MAXIMUM, DEFAULT MAXIMUM): / PBUFWS=.-PBUFW PBUFX: .ASCII <12><15>/TRUNCATE TRAILING BLANKS TO GIVE VARIABLE LENGTH OUTPUT? (/ .ASCII /Y OR N, DEFAULT Y): / PBUFXS=.-PBUFX PBUFT: .ASCII <15>/TRANSLATE FROM EBCDIC TO ASCII? (Y OR N, DEFAULT N): / PBUFTS=.-PBUFT PBUF6: .ASCII <15>/LOGICAL OUTPUT RECORD SIZE? (DEFAULT 133): / PBUF6S=.-PBUF6 PBUF7: .ASCII <15>/FIRST BYTE OF EACH OUTPUT RECORD CARRIAGE CONTROL? (Y OR N/ .ASCII /, DEFAULT Y): / PBUF7S=.-PBUF7 PBUF8: .ASCII <15>/OUTPUT DEVICE? (DEFAULT DK1:): / PBUF8S=.-PBUF8 PBUF9: .ASCII <15>/OUTPUT UIC? (DEFAULT [200,200]): / PBUF9S=.-PBUF9 PBUFA: .ASCII <15>/OUTPUT FILENAME? (DEFAULT GARBAGE.DAT): / PBUFAS=.-PBUFA PBUFB: .ASCII <12><15>/NUMBER OF RECORDS INPUT EACH ITERATION? (DEFAULT / L4: .ASCII / / .ASCII /): / PBUFBS=.-PBUFB PBUFC: .ASCII <15>/NUMBER OF RECORDS OUTPUT EACH ITERATION? (DEFAULT / L5: .ASCII / ): / PBUFCS=.-PBUFC ; ; ; .EVEN IOST: .BLKW 2 NUMIN: .WORD 0 NUMOUT: .WORD 0 LIRL: .WORD 0 LORL: .WORD 0 TRANSL: .WORD 0 BUFF: .BLKB 9000. ; ;***************************************************************** ; CALL EBCDIC WITH: R3 = ADDRESS TO CONVERT ; R4= BYTE COUNT TO CONVERT ;***************************************************************** ; EBCDIC: MOVB (R3),R5 BIC #177400,R5 ;0-377 MOVB TABLE(R5),(R3)+ SOB R4,EBCDIC RETURN ; ;***************************************************************** ; ; ; EBCDIC TO ASCII TRANSLATE TABLE ; - EXTRA EBCIDIC CODES TRANSLATED TO A SPACE ; ;**************************************************************** ; TABLE: .BYTE 000 ;NUL .BYTE 001 ;SOH .BYTE 002 ;STX .BYTE 003 ;ETX .BYTE 040 ;PF - NO ASCII .BYTE 011 ;HT .BYTE 040 ;LC - NO ASCII .BYTE 177 ;DEL ;010 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;SMM - N.A. .BYTE 013 ;VT .BYTE 014 ;FF .BYTE 015 ;CR .BYTE 016 ;SO .BYTE 017 ;SI ;020 .BYTE 020 ;DLE .BYTE 021 ;DC1 .BYTE 022 ;DC2 .BYTE 023 ;DC3(TM) .BYTE 040 ;RES - N.A. .BYTE 040 ;NL - N.A. .BYTE 010 ;BS .BYTE 040 ;IL - N.A. ;030 .BYTE 030 ;CAN .BYTE 031 ;EM .BYTE 040 ;CC - N.A. .BYTE 040 ;N.A. .BYTE 034 ;IFS .BYTE 035 ;IGS .BYTE 036 ;IRS .BYTE 037 ;IUS(ITB) ;040 .BYTE 040 ;DS - N.A. .BYTE 040 ;SOS - N.A. .BYTE 040 ;FS - N.A. .BYTE 040 ;N.A. .BYTE 040 ;BYP - N.A. .BYTE 012 ;LF .BYTE 040 ;ETB(EOB) .BYTE 033 ;ESC(PRE) ;050 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;SM - N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 005 ;ENQ .BYTE 006 ;ACK .BYTE 007 ;BEL ;060 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 026 ;SYN .BYTE 040 ;N.A. .BYTE 040 ;PN - N.A. .BYTE 040 ;RS - N.A. .BYTE 040 ;UC - N.A. .BYTE 004 ;EOT ;070 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 024 ;DC4 .BYTE 025 ;NAK .BYTE 040 ;N.A. .BYTE 032 ;SUB ;100 .BYTE 040 ;SPACE .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;110 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 133 ;CENT SIGN ([ IN ASCII) .BYTE 056 ;. .BYTE 074 ;< .BYTE 050 ;( .BYTE 053 ;+ .BYTE 136 ;^ ;120 .BYTE 046 ;& .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;130 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 041 ;! .BYTE 044 ;$ .BYTE 052 ;* .BYTE 051 ;) .BYTE 073 ;; .BYTE 135 ;] (WAS EBCDIC "NOT" OPERATOR) ;140 .BYTE 055 ;- .BYTE 057 ;/ .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;150 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 174 ;NON - PRINTING (ASCII - |) .BYTE 054 ;, .BYTE 045 ;% .BYTE 137 ;_ .BYTE 076 ;> .BYTE 077 ;? ;160 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;170 .BYTE 040 ;N.A. .BYTE 140 ;ACCENT GRAVE .BYTE 072 ;: .BYTE 043 ;# .BYTE 100 ;@ .BYTE 047 ;' .BYTE 075 ;= .BYTE 042 ;" ;200 .BYTE 040 ;N.A. .BYTE 141 ;A - LOWER CASE .BYTE 142 ;B .BYTE 143 ;C .BYTE 144 ;D .BYTE 145 ;E .BYTE 146 ;F .BYTE 147 ;G ;210 .BYTE 150 ;H - LOWER CASE .BYTE 151 ;I .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;220 .BYTE 040 ;N.A. .BYTE 152 ;J - LOWER CASE .BYTE 153 ;K .BYTE 154 ;L .BYTE 155 ;M .BYTE 156 ;N .BYTE 157 ;O .BYTE 160 ;P ;230 .BYTE 161 ;Q - LOWER CASE .BYTE 162 ;R .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;240 .BYTE 040 ;N.A. .BYTE 176 ;~ .BYTE 163 ;S - LOWER CASE .BYTE 164 ;T .BYTE 165 ;U .BYTE 166 ;V .BYTE 167 ;W .BYTE 170 ;X ;250 .BYTE 171 ;Y - LOWER CASE .BYTE 172 ;Z .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;260 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;270 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;300 .BYTE 173 ;{ .BYTE 101 ;A .BYTE 102 ;B .BYTE 103 ;C .BYTE 104 ;D .BYTE 105 ;E .BYTE 106 ;F .BYTE 107 ;G ;310 .BYTE 110 ;H .BYTE 111 ;I .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;320 .BYTE 175 ;} .BYTE 112 ;J .BYTE 113 ;K .BYTE 114 ;L .BYTE 115 ;M .BYTE 116 ;N .BYTE 117 ;O .BYTE 120 ;P ;330 .BYTE 121 ;Q .BYTE 122 ;R .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;340 .BYTE 134 ;\ .BYTE 040 ;N.A. .BYTE 123 ;S .BYTE 124 ;T .BYTE 125 ;U .BYTE 126 ;V .BYTE 127 ;W .BYTE 130 ;X ;350 .BYTE 131 ;Y .BYTE 132 ;Z .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ;360 .BYTE 060 ;0 .BYTE 061 ;1 .BYTE 062 ;2 .BYTE 063 ;3 .BYTE 064 ;4 .BYTE 065 ;5 .BYTE 066 ;6 .BYTE 067 ;7 ;370 .BYTE 070 ;8 .BYTE 071 ;9 .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. .BYTE 040 ;N.A. ; ; .END START