10REM Program HASHGEN to assemble m/c
program to secure correct printing of
20REM both # (hash) and £ (pound) sig
ns
30REM on parallel printers using soft
ware selection of national character set
s
40REM from Basic or from other langua
ges
50MODE7:DIM E 12:U=E+7
60PROCparms
70REM (C) H. L. Clarke & S. B. Yeo
80USERV=&200:WRCHV=&20E:oscli=&FFF7
85REM insert VDU2 here for assembly p
rintout
90FOR pass%=0 TO 3 STEP 3
100P%=&900
110[OPT pass%
120LDA #(switch MOD 256):STA USERV
130LDA #(switch DIV 256):STA USERV+1
140LDA WRCHV:STA sub+1
150LDA WRCHV+1:STA sub+2
160LDA #(routine MOD 256):STA WRCHV
170LDA #(routine DIV 256):STA WRCHV+1
180LDX #(key0 MOD 256):LDY #(key0 DIV
256):JSR oscli
190LDX #(key1 MOD 256):LDY #(key1 DIV
256):JSR oscli
200RTS
210.sub:JSR 0:RTS
220.switch:STX flag1:RTS
230.esc:LDA #1:JSR sub
240LDA #27:JSR sub
250LDA #1:JSR sub
260LDA #(?E):JSR sub
270LDA #1:JSR sub:RTS
280.byte:EQUB 0
290.flag1:EQUB 1
300.flag2:EQUB 3
310.routine:STA byte
320LDA flag1:BEQ finish
330LDA #3:CMP flag2:BEQ chkpr
340LDA byte:CMP #3:BEQ setpflag
350CMP #96:BNE notpd
360LDA #1:JSR sub:LDA #35:JSR sub
370LDA #3:JSR sub:LDA #96:JSR sub
380LDA #2:JMP jp
390.notpd:CMP #35:BNE jp
400JSR esc
410]
420N%=1:IF V%=1 THEN 490
430FOR N%=1 TO (V%-1)
440[OPT pass%
450LDA #(?(U+N%)):JSR sub
460LDA #1:JSR sub
470]
480NEXT
490[OPT pass%
500LDA #(?(U+N%)):JSR sub
510LDA #35:JSR sub
520JSR esc
530]
540N%=1:IF V%=1 THEN 610
550FOR N%=1 TO (V%-1)
560[OPT pass%
570LDA #(?(E+N%)):JSR sub
580LDA #1:JSR sub
590]
600NEXT
610[OPT pass%
620LDA #(?(E+N%))
630JMP jp
640.chkpr:LDA byte:CMP #2:BNE jp
650.setpflag:STA flag2
660.finish:LDA byte
670.jp:JMP (sub+1)
680.key0:EQUS"K.0 *CODE 0 |M":EQUB &D
690.key1:EQUS"K.1 *CODE 1 |M":EQUB &D
700]
710NEXT
720VDU3
730INPUT"Save machine code Y/N ?
"YN$
740 IF LEFT$(YN$,1)="N" OR LEFT$(YN$,1
)="n" THEN END
750INPUT"Name to be assigned "F$
760OSCLI"SAVE "+F$+" 900 A00"
10000END
10010DEFPROCparms
10020PRINT'''"This program is intended f
or use with"'"parallel printers in which
national"'"character sets are selected
by a"
10030PRINT"sequence in the form of:"'"ES
C+<letter>+n(+n....) up to a"'"maximum o
f 3 numerals following"'"the letter"'
10040PRINT"In instruction books this is
often"'"preceded by the LPRINT command (
to"'"suit Microsoft Basic"''
10050INPUT"Letter to follow <ESC> "L$
10060?E=ASC(L$)
10070PRINT"Number of numerals to follow
letter ?"
10080INPUT V%:IF V%>3 THEN PRINTCHR$(131
);"MACHINE CODE PROGRAM WOULD BE TOO"'CH
R$(131)"LONG FOR AVAILABLE MEMORY":STOP
10090PRINT'"Please input the numerals fo
r the"'"'England' character set"
10100FOR N%=1 TO V%
10110PRINT"Numeral ";N%;" ";:INPUT Z%
10120?(E+N%)=Z%
10130NEXT
10140PRINT'"Please input the numerals fo
r the"'"'USA' character set"
10150FOR N%=1 TO V%
10160PRINT"Numeral ";N%;" ";:INPUT Z%
10170?(U+N%)=Z%
10180NEXT
10190PRINT
10200ENDPROC