Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
150 COMPUTEI COMPUTE! Moy.1982, May, Issue 24<br />
number GETting subroutine) at $D93E $093E (Ramcard),<br />
or the equivalent command at $ 1140 forr Taperam<br />
to JSR jSR $300 (or wherever you wish to store this<br />
patch). This changes the first command of GOTO,<br />
forcing it to treat the patch as its line number getting<br />
subroutine. The patch consists of:<br />
JSR jSRFRMEVL<br />
JSR jSRGETADR<br />
RTS.<br />
The Ramcard locations of these routines are $ $DD7B D07B<br />
for FRMEVL, which evaluates the expression<br />
following the GOTO or GOSUS GOSUB and deposits this<br />
in Applesoft's floating point accumulator, FAC,<br />
and $E752 for GET AOR, which moves the contents<br />
and $E752 for GETADR, which moves the contents<br />
of F FAC to locations $50 and $51, where GOTO<br />
expects to find the line number r to which to go.<br />
The locations for T TAPERAM are $ $157E, and<br />
$ $1F49 IF49 for the two routines. routines' That's all there is to it.<br />
Seven bytes of new code and, to top it off, IF...<br />
Seven bytes of new code and, to top it off, IF ...<br />
GOTO X works (IF...THEN .THEN X will not), as do<br />
IF .. .THEN GOTO X and IF ... T H EN GOSUB X<br />
IF...THEN GOTO X and IF...THEN GOSUB X<br />
though, to preserve program portability, you will<br />
probably want to include the colon, entering only<br />
probably want to include the colon, entering only<br />
IF...THEN: GOTO (or GOSUB) statements when<br />
using labels rather than literal line numbers.<br />
To "lise use this Ihis rouline, routme, the Ihe Applesoft A/'I,lesofi C/-I CHRGET RCET ·rouline routine al at $ $B1 m"list must be modified. This may /Ita)' be accollllllislwd accomplishedfrom the Ihe<br />
monilm· monitor by writing Bl B 1 :4C 00 03N116:00 N B6 or by calli·ng calling the Ihe inilia.liw initialization .lion patch Ila.lch (in.clllded (included below) from BASIC.<br />
000 0 28 0300<br />
0<br />
0029 0300<br />
0030 0<br />
0031 O:lIlO<br />
0 3 0 0<br />
00 32 0300<br />
00 33 0300<br />
00 0034 :3 4 0300<br />
000 0 355 0300<br />
00 36 0300<br />
00370 0 0300<br />
00 3 8 0300<br />
00 38 0300<br />
000 0 :19 39 0:3 030000<br />
E6E:8 E6B8<br />
0040 00*0<br />
03022 000 DO 022<br />
00'11 00*1 0304 030* E6E:9 E6B9<br />
00*2 0306 20B700<br />
0042 03116 2 0E: 70 0<br />
00 00*3 '13 0309<br />
000**<br />
'1 '1 03099<br />
00 "15 030 9<br />
00*5 0 309<br />
00'160 0*6<br />
0309'J C9CO C9C0<br />
00 00*7 '17 0~10B 3 0B &0 E:0 25 2~5<br />
00'18 00*8 03003 0D 86E:'I 86B*<br />
00*9 030F B*B5<br />
00'19 030F 8'IE:~5<br />
0311 A8<br />
00 OO~,,;O SO 0311 A8<br />
00~';1 51<br />
03122 1016<br />
00~,,;2 52 031'10 31* A/IE:6 A*B6<br />
00~';3 S3 0 316 D 0 1D<br />
00 OO~ 5*<br />
'; 'I 03188 A2FF<br />
o 000 55 ~~;5<br />
o 000 56<br />
~:.;6<br />
0057<br />
0 057<br />
00 0058 ~";8<br />
00 o 0 59 ~'i9<br />
00 60 bO<br />
0061<br />
0062<br />
00 006363<br />
00 6'1 6*<br />
00 65 b5<br />
0066<br />
0316 DOID<br />
031AA<br />
E8<br />
0318 031B E8<br />
031C E8 e:b<br />
0310 031D BC5 BC5*03<br />
/103<br />
0320 F008<br />
0322 005'103<br />
DD5*03<br />
032~) 325 D0F3 DOF ~1<br />
0327 203B03<br />
203803<br />
032A2A A2 000 0<br />
o 0 32C 86E:6 8&B6<br />
o Q32E<br />
A6E:4 A6B*<br />
0330 0 A'IE:~5<br />
A*B5<br />
;EmJATE; equates: S:<br />
SY SYNERR<br />
TXTPTR TXTF' TR<br />
CHf(GOT<br />
CMRGOT<br />
XTEMP<br />
XTEMP<br />
YTEMPP<br />
FL.AG FLAG<br />
;THE NEW<br />
=*B7 ~$E:7<br />
JTHE NEW CHRGET ROUTINE;<br />
TXTPTR ; INCREMENT LOW BYTE<br />
GETCHR JGET NEXT CHARACTER<br />
INC TXTPTR+1 ^INCREMENT HIGH BYTE<br />
GETCHR JSR CHRGOT<br />
; JGET CHAF,ACTER<br />
CHARACTER<br />
JTHE<br />
=$DEC9<br />
=*DEC9<br />
;GENERATE SYNTAXX ERROROR<br />
='$E:8 ~$B8<br />
=1' «*B* E:'I<br />
=' =$B5 $E:5<br />
;;:: ~iE: b<br />
CHRGE T ROUTINE:<br />
NEWGET INC TXT PTR<br />
E:NE BNE GET CHR<br />
INC TXTF'TR+l<br />
;THE SUB-INTERPRETER:<br />
BUB-INTERPRETER?<br />
CMF' CMP HeO<br />
E:CS OUT<br />
**C0 JIS IT A NON-COMMAND TOKEN?<br />
BCS OUT JYES, GO<br />
STX XTI'.:MF'<br />
XTEMP ; fELSE, I'.:L. SE:, SAVE SAME X<br />
STY YTEMP Y"lTMP ;AND JAND Y<br />
TAY<br />
;TEST JTEST N FL.AG FLAG<br />
E:F'L. EPL ,.JMP JMPGOT GO T<br />
JNOT A TOKEN?, GO<br />
L.DY<br />
FLAG<br />
LDY FLAG fCOMMAND IN PROGRESS?<br />
E:N[': BNE ERROUT E RI~ ;YES, ?YES, ERROR<br />
ERROI~<br />
L.D X 'HFF<br />
LDX **FF ?NO, SET X FOR TABLE LOOKUP<br />
NXTCMD IN INXX<br />
lPOINT ; X AT<br />
NEXT CO COMMAND TOKEN<br />
INX<br />
INX<br />
INXX<br />
LO LDYY CMD TE:L ,X<br />
E:EQ BEQ ,JMF'GOT<br />
CMF' CMP CMDTE:L, X<br />
BNE E:NE NXTCMD<br />
JGR JSR GOT ONE<br />
JMPGOT LDX I_OX<br />
STX FLAG<br />
L.D LDXX XTE MF'<br />
L.D LDYY YTEMF'<br />
CMDTBLtX JGET TOKEN<br />
JMPGOT JEND OF TABLE? GO<br />
CMDTBLtX fELSE, COMPARE TO TABLE TOKEN<br />
NXTCMD JNO MATCH, GET NEXT COMMAND<br />
GOTONE JELSE SET UP FORCED JUMP<br />
U #0<br />
FLAG JCLEAR FLAG<br />
XTEMP JRECOVER X<br />
YTEMP I RECOVER Y<br />
;FL.AG FLAG COMMAND IN PROGRESS<br />
;INCREMENT LOW E:YTE<br />
;GI'.:T NE XT CHARACTER<br />
;INCREMENT HIGH BYTE<br />
;IG IT A NON -CO MMAND<br />
;YES, GO<br />
;N OT A TOKEN? , GO<br />
;COMMA ND IN PROGRES S?<br />
TOKEN?<br />
;NO, SET X FOR TABLE L.OOKUP<br />
; GET Tm~EN<br />
lEND OF TAE:L.E? GO<br />
;EL.SE, COMF'ARE TO TABLE TOKEN<br />
;NO MATCH, GET NEXT COMMAND<br />
;EL.SE SE T UP FO RCED JUMP<br />
;CLEAI'( FLAG<br />
;RECOVER X<br />
; RECOVER Y