You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
IF4F 856C<br />
3200<br />
STA<br />
BUPSTR<br />
1F4F B56C 3200<br />
STA BUFSTR<br />
1F51 IF51 A555<br />
3210<br />
LDA LOA COLORS COLCRS<br />
1F53 IF53 856D 8560<br />
3220<br />
STA BUFSTR+1 SUFSTR+l<br />
3230 EGETC1 EGETCI<br />
1F55 IF55 20791F 2079lP<br />
3240<br />
JSR NEWKGETCH<br />
NEWKGETCtl ; What we really r wanted to replace r 1F58 IP58 844C<br />
3250<br />
STY<br />
DSTAT ; < (<br />
1F5A 1 F5A ADFB02 ADF B02<br />
3260<br />
LDA LOA<br />
ATACHR ; «<br />
1F5D IF5D C99B<br />
3270<br />
CMP ICR 'CR ; «<br />
33280<br />
1F5F lP5F F015 33290<br />
BEO<br />
GOEGETC2<br />
was<br />
just EGETC2<br />
3300 330"<br />
1F61 IF61 20ADF6 3310 331"<br />
JSR<br />
DOSS : < (<br />
1F64 IF64 20B3FC 20B3rC<br />
3320<br />
JSR<br />
SWAP : < (<br />
1F67 IF67 A563<br />
3330<br />
LDA LOA<br />
LOGCOL ; «<br />
1F69 lP69 C971<br />
3340<br />
CMP #113 1113 : «<br />
1F6B lF6B D003 0003<br />
3350<br />
BNE<br />
EGETC6 : «<br />
1F6D lF6D 200AF9<br />
3360<br />
JSR JS R<br />
BELL ; «<br />
3370 EGETC6<br />
1F70 IF70 4C551F<br />
3380<br />
JMP EGETC1 EGETCI : «<br />
3390<br />
3400 GOEGETC3<br />
1F73 IF73 4C7CF6<br />
3410 JMP EGETC3 £GETC3 ;becuz branch can't n ' t get there<br />
e<br />
3420<br />
3430 GOEGETC2<br />
1F76 IF76 4C6EF6<br />
3440 JMP<br />
EGETC2 :becuz branch can't get there<br />
3450<br />
1F79 IF79<br />
3990 . PAGE " The replacement KGETCH routine"<br />
4000<br />
4010<br />
10 ::::::;;;;:::;;;;:;;:::;;;;;::;::::;:;;;;;:;::;<br />
4020<br />
4030<br />
This is the routine that replaces r the<br />
4040<br />
ROM-baaed ROM-based KGETCH (Keyboard GET Character)<br />
4050<br />
routine.<br />
This routine is designed<br />
4060<br />
especially for NEWEGETCH, ETCtl , but could be<br />
4070<br />
called in place of KGETCH if the user<br />
4080 wished.<br />
.<br />
4090<br />
4100 411?10 ; ;;;:;:;:;;:::::;; ;: :::;: : :;;:;:;:: :;:::::;:;;<br />
4110<br />
4120<br />
NEWKGETCH<br />
IF79 1F79 ADC61F AOC61F 4130<br />
LDA LOA KPTR+1 KPTR+l msb of ptr to multikey string<br />
1F7C lF7C F024<br />
4140<br />
BEO<br />
NOSTRING<br />
but no string, so normal KGETCH<br />
1F7E IF7E A5E7 85E7 4150 41 50 STA<br />
ZTEMPl+l<br />
ZTEMP1+1<br />
need to put it in zero page<br />
IF80 1F80 ADC51F ADC51f' 4160<br />
LDA LOA<br />
KPTR ditto the LSB<br />
IF83 1F83 85E6<br />
4170<br />
STA<br />
ZTEMPI<br />
ZTEMP1<br />
IF85 1F85 EEC5lf'<br />
EEC51F 41B0 4180<br />
INC<br />
KPTR<br />
bump ptr for next time<br />
lPSS 1F88 0003 D003 4190<br />
BNE<br />
NI:."WKI NEWK1<br />
lFSA 1F8A<br />
EEC61F 4200<br />
INC<br />
KPTR+l<br />
KPTR+1 MSB also if needed<br />
4210 NEWKI<br />
NEWK1<br />
4220<br />
IPSO 1FBD A000<br />
4230<br />
LOY LDY<br />
,.<br />
#0<br />
IFSP 1F8F BlE6 B1E6 4240<br />
LOA LDA (ZTEMPl), (ZTEMP1),YY<br />
; get next char in str string<br />
If'9l 1F91 1003<br />
4250<br />
BPL<br />
NEWK2<br />
last char has MSB on<br />
If'93 1F93 8CC6lF<br />
8CC61F 4260<br />
STY<br />
KPTR+l<br />
KPTR+1 so reset pointer & flag<br />
4270 NEWK2<br />
l1F96<br />
297P 297F 4280<br />
AND<br />
'S7F #$7F ensure onlyy 7 bits<br />
If'9S 1F98 0002 D002 4290<br />
BNE<br />
NEWK3<br />
except... •..<br />
If'9A 1F9A A99B<br />
430" 4300<br />
LOA LDA 'CR #CR null nul1 becomes CR<br />
4310 NEWK3<br />
lF9C 1F9C BOFS02<br />
8DFB02 4320 STA ATACHR<br />
tthis is whatt KGETCH does<br />
IF9F 1F9F 4C34F6<br />
4330 GORETURN JM JMPP RETURI<br />
RETUR1 seems silly, but it works r 4340<br />
4350<br />
no string waiting fo forr us us--.get ... a real key<br />
4360<br />
4370<br />
NOSTRING<br />
IFA2 1FA2 20E2P6<br />
20E2F6 4380<br />
JSR<br />
KGETCH<br />
a rreal key<br />
IFA5 1FA5 84'1C 844C 4390<br />
STY<br />
DSTAT<br />
why??? just in case<br />
IFA7 1FA7 C900<br />
441'10 4400<br />
CMP ,.<br />
#0<br />
control-comma, the heart<br />
IFA9 1FA9 F0l F0177<br />
4410<br />
BEO BEQ REALCTL<br />
handled special<br />
I1FAB<br />
C91S C91B 4420<br />
CMP<br />
127 #27 one more than control-ZZ<br />
IFAO 1FAD B0F0<br />
4430<br />
BCS<br />
GORETURN<br />
a regular key<br />
4440<br />
: «<br />
: «<br />
: < <<br />
4450 ; if here, we have h control-A through control-Z<br />
l-Z<br />
1FAF IFAF 0A 011.<br />
4460<br />
4470<br />
ASL<br />
A<br />
1FB0 lFS0 A8<br />
4480<br />
TAY<br />
; doubled value used as index<br />
1FB1 If'Bl B9FE1F B9FEl.F 4490 4491'1<br />
LDA LOA STABLE-2.Y STABLE-2, Y; [ -2 - 2 becuz control-A is<br />
1FB4 IFS4 8DC51F BOC5lF<br />
4500<br />
STA KPTR ; value of 1 instead of zero<br />
1FB7 lFS7 B9FF1F B9f'FlF<br />
4510<br />
LDA LOA STABLE-l.Y<br />
STABLE-l, Y<br />
1FBA lFBA 8DC61F 80C61F<br />
KPTR+1 ; ;<br />
4520<br />
1FBD IPSO F0E0 4530 4 STA<br />
BEQ SEQ l<br />
GORETURN MSB of addr of string<br />
oops...no oope no string for this key<br />
4540<br />
1FBF IFSF 4C791F<br />
4550<br />
4560<br />
JMP J MP ; NEWKGETCH and pass back first char c of string<br />
4570<br />
4580<br />
4590<br />
special handling for control-comma ol-comma I1111<br />
I I I<br />
4600<br />
REALCTL<br />
1FC2 IFC2 4CE2F6<br />
4610<br />
JMP J MP KGETCH ; it is used as an escape key<br />
4620<br />
; to allow real control chars c I<br />
4630<br />
4900<br />
4910 MISCELLANEOUS NEOUS RAM<br />
USAGE<br />
1FC5 lFC5 0000<br />
4920<br />
4930<br />
30<br />
KPTR<br />
4921'1<br />
.WORD 0 :master ptr to next char c 4940<br />
1FC7 IFC7 0000 001'10<br />
4950<br />
NEWETBL -WORD .WORD 0,00 , 0 : jto be filled in<br />
1FC9 lFC9 0000 01'11'10<br />
1FCB IPCB 0000<br />
4960 NEWETBLGC .WORD 0,0,0,0,0,0 0,B,e,e,e,0<br />
1FCD IFCO 0000 001'11'1<br />
1FCF IPCF 1'100" 0000<br />
1FD1 IFOI 0000 el0e10<br />
1FD3 IFD3 1'1000 0000<br />
1FD5 lFD5 0000<br />
1FD7 IFD7<br />
4970<br />
4990<br />
. PAGE" The pointer table"<br />
50"'0 5000<br />
5010 ; :::::;::::::;; ; ::::::;:;:::: ::::;;:::: ;;: ; ; ::<br />
5020<br />
5030<br />
The strings and String TA.BLE<br />
TABLE<br />
5040<br />
5050<br />
5060<br />
5070<br />
5080<br />
5090<br />
Each string in use has its address placed<br />
in the corresponding location in STABLE<br />
Any control ol ccharacter whichh should not be<br />
translated should have S0000 $0000 as its<br />
etring string address in STADLE.<br />
STABLE.<br />
5100<br />
5110<br />
5120<br />
:::; (~l~!~~; ~~~: ~~: ~ ~~~; ~~~~~~~~) ; ; : :;;;; : ::;;:<br />
(first, get on even boundary)<br />
lFD7 1FD7 5U0 5130<br />
*= • • ORIGIN+$100<br />
ORIGIN+S100<br />
5140<br />
STABLE<br />
2000 "'000 0000 5150<br />
.WORD SA,SB,SC,SD,SE,SF,SG,SH,SI<br />
SS,SC,SD, SE, SF,SG, SH,SI<br />
20"'2 2002 01'100 0000<br />
2804 2004 0000<br />
2006 3420<br />
2009 2008 0000<br />
20011. 200A 0000<br />
200C 0"'0" 0000<br />
200E 0000<br />
20113 2010 0000<br />
}·**ERROR ]***ERROR -<br />
2012 0000<br />
5-UNOEFINED<br />
5-UNDEFINED<br />
5160 .WORD SJ,SK,SL,SM,SN,SO,SP,SQ,SR<br />
, SK,SL,SM, SN ,SO,SP,SQ, S R<br />
2014 0000<br />
2016 "000 0000<br />
21318 2018 001'10 0000<br />
201A ""00 0000<br />
20lC 201C 0800 0000<br />
2"1£ 201E 7F2e 7F20<br />
21320 2020 0000<br />
2022 0000<br />
}***ERROR<br />
]***ERROR<br />
2024 862" 8620<br />
2026 "' 0000<br />
2828 2028 001'10 0000<br />
5-UNDEFINED<br />
5170 .WORD SS SS,ST.SU,SV,SW,SX,SY,SZ<br />
, ST , SU,SV, SW,SX,SY,SZ<br />
&<br />
n<br />
o<br />
J:<br />
...<br />
c<br />
~<br />
!!!<br />
~<br />
~<br />
i<br />
~