01.03.2014 Views

Section 2 - Commodore Computers

Section 2 - Commodore Computers

Section 2 - Commodore Computers

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!