Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > address for changing pointers for rts?
2006-02-11 01:23
midiland
Account closed

Registered: Nov 2004
Posts: 4
address for changing pointers for rts?

Hey guys

I need a reminder of the addresses used for when I need to change an address for a "rts" so it returns to a new location rather than the old

eg

jsr blah
rts
blah rts

but instead of returning to the jsr'd address to go to a new address

Thanks!!

I cant remember the mem locations to change it :(
 
... 11 posts hidden. Click here to view all posts....
 
2006-02-14 23:02
Bastet

Registered: Jul 2005
Posts: 88
Look over here, i wrote a nice snippet some time ago about that one: Playing around with the return pointer ;)
2006-02-15 17:48
Cruzer

Registered: Dec 2001
Posts: 1051
@Frantic: Yes I do, for calling speedcode generated by the main code.
2006-02-15 19:21
hannenz
Account closed

Registered: Nov 2002
Posts: 24
well, i think this is a very smart coding style. Espoecially if you want to jump to different routines depending on some value (similar to ON... GOTO):
let's say you want to jump to routine0,routine1,routine2...,routinen depending on the accus's value:

asl                     ;*2
tax                     ;to .X
lda adresstab+1,x       ;push hi byte of adress
pha                     ;on stack
lda adresstab,x         ;and lo-byte...
pha
rts                     ;now RTS will get the adress from the stack and jump to it
adresstab .word routine0-1,routine1-1,routine2-2,routine3-1... ;you'll need the adresses MINUS 1 here...!

btw: tmp/style (turbo macro pro assembler) features a handy pseudo-op for this, called ".rta" which assembles the given adresses as "adresses-1" as needed for this technique...

e.g.:

.rta routine0,routine1,routine2,routine3...

i like this technique!


2006-02-15 20:38
TNT
Account closed

Registered: Oct 2004
Posts: 189
Using rts to branch to different routines is worth the trouble only if you can't spare two memory locations to do "jmp ($nnnn)"...

I've used return address changing for passing arguments to routines, similar to Primm in C128 ROM. Printing strings becomes easy when you can do just
    jsr Primm
    dc.b "Text to print",0
    blah blah ;code continues here

instead of first loading the star address to registers and then calling the routine. It's bitch to disassemble, tho.

If you really want to get creative with it, use BRK interrupt followed with function ID and have functions with different number of data bytes following BRK+ID ;)
2006-02-16 06:01
chatGPZ

Registered: Dec 2001
Posts: 11523
also using the stack is slooow
2006-02-16 13:26
Ninja

Registered: Jan 2002
Posts: 418
and it destroys the table put there :)
2006-02-16 14:14
Monte Carlos

Registered: Jun 2004
Posts: 370
Stack is sometimes like local variables.
So doing a lda desttablo,x pha lda desttabhi,x pha rts
is a far better style than lda desttab,x sta jumpdest lda desttab,x sta jumpdest+1 jmp(jumpdest).
2006-02-16 22:07
Oswald

Registered: Apr 2002
Posts: 5127
unreadable style is a good style ? dont think so
2006-02-17 10:49
Monte Carlos

Registered: Jun 2004
Posts: 370
If you introduce a variable jumpdest and than do a jmp(jumpdest) you need the 2 bytes as long as your program is running. if you use the stack like in the example above, you only reserve memory as long as you need to, the code is shorter and it is faster.

lda #0..51
jsr mul5
....
mul5:
tsx
pha
asl
asl
adc $0100,x
txs
rts

Monte
2006-02-17 10:50
Monte Carlos

Registered: Jun 2004
Posts: 370
Just another example for locals. ;)

monte
Previous - 1 | 2 | 3 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
sebalozlepsi
Enforcer/Deers
Guests online: 470
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Codeboys & Endians  (9.7)
4 Mojo  (9.6)
5 Coma Light 13  (9.6)
6 Edge of Disgrace  (9.6)
7 Signal Carnival  (9.6)
8 Wonderland XIV  (9.5)
9 Uncensored  (9.5)
10 Comaland 100%  (9.5)
Top onefile Demos
1 Nine  (9.7)
2 Layers  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.5)
6 Scan and Spin  (9.5)
7 Onscreen 5k  (9.5)
8 Grey  (9.5)
9 Dawnfall V1.1  (9.5)
10 Rainbow Connection  (9.5)
Top Groups
1 Artline Designs  (9.3)
2 Booze Design  (9.3)
3 Performers  (9.3)
4 Oxyron  (9.3)
5 Censor Design  (9.3)
Top Crackers
1 Mr. Z  (9.9)
2 OTD  (9.8)
3 Antitrack  (9.8)
4 Fungus  (9.8)
5 S!R  (9.8)

Home - Disclaimer
Copyright © No Name 2001-2025
Page generated in: 0.081 sec.