COMMODORE PLUS/4 WORLD
  Home  Search  Games  Tapes  Covers  Cheats  Maps  Software  New Stuff 
 Hall Of Fame  HVTC  Game Endings  Solutions  Remakes  Publications  Magazines  Effects  Top List 
 Members  Groups  Features  Plus/4 Encyclopedia  Hardware  Tools  Options  Forum 
Login
Back to forumClick here to see the full topicGo to last reply

Posted By

Mad
on 2017-12-07
13:36:20
 Re: Does the Plus/4 support some form of VARPTR() command?

I am not sure about this. But for me it seems, that this code from CHRGOT/CHRGET:

SEC ; prepare subtraction ...
SBC #$30 ; Petscii "0"
SEC ; now invert carry... (letters are >=0)
SBC #$D0 ; subtraction retour, lesser "0", Carry-Flag=1
RTS ; Zero-Flag=1 end of instruction, Carry-Flag=1 no digit

could be replaced by a slightly faster version..

this takes 8 cycles without the rts

perhaps it can be replaced with this:


cmp #$30 ; 2 cycles
bcc invertcarry ; 2 cycles if >= $30, 3 cycles if < $30
cmp #$ff ; set carry to 0 and zero flag to 0 (bytes should not be $ff); 2 cycles
rts ; 6 cycles here
invertcarry:
cmp #$00 ; 2 + (2+3) cycles; carry is now 1 and zero flag is only 1 if a zero byte was encountered (like above)
rts ; 7 cycles here


I don't know if it's an improvement perhaps it's not worth the hussle anyways.. I hope I did not make a mistake there..

Have fun!

p.s.: Seems a $ff cannot occur there because of a bcs directly before:
CMP #$3A ; ":" (colon)
BCS L8143 ; if colon, exit

edit: i think you can rewrite the routine like this, sparing some more bytes and gain some performance:
edit2: perhaps it's not a good idea to use this version here below. The cmp #$3a comes later in the code path, so most probably it's slower in most cases, the version above should be cool anyways.

LDY #$00
LDA (LastBasicLineNo),y ; $3b
CMP #$20 ; " " (space)
BEQ $0473 ; if space, get NEXT byte from basic
cmp #$30 ; 2 cycles
bcc invertcarry ; 2 cycles if >= $30, 3 cycles if < $30
cmp #$3a ; set carry to 0 and zero flag to 0 (if not $3a, if below $3a then the >=$3a procedure from the old code is processed here); 2 cycles
rts ; 6 cycles here
invertcarry:
cmp #$00 ; 2 + (2+3) cycles; carry is now 1 and zero flag is only 1 if a zero byte was encountered (like above)
rts ; 7 cycles here

so the $3a call is also included in this.. I hope it works.. It's just a quick guess at optimizing it..

Just some thoughts... Don't take this to serious!



Back to top


Copyright © Plus/4 World Team, 2001-2017