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 :(
2006-02-11 02:05
Style

Registered: Jun 2004
Posts: 498
PLA
PLA
LDA #<new address
PHA
LDA #>new address
PHA

or similar :) During a JSR the return address (PC + 2) is pushed to the stack. I think its in low byte/high byte order.

Obviously during an RTS the address is then pulled from the stack.
2006-02-11 02:13
midiland
Account closed

Registered: Nov 2004
Posts: 4
Ahhh thats it...!!!!

Thanks mate!

2006-02-11 12:36
Graham
Account closed

Registered: Dec 2002
Posts: 990
Not quite, you must store "address-1" to stack if you want to return to the opcode after the JSR.
2006-02-11 12:39
Ninja

Registered: Jan 2002
Posts: 411
PLA
PLA
JMP new_adress

is shorter and faster. And as we are at it:

JSR somewhere
RTS

can be replaced with

JMP somewhere

which is also shorter and faster.
2006-02-11 14:33
Style

Registered: Jun 2004
Posts: 498
He'll figure it out :)
2006-02-11 15:34
Oswald

Registered: Apr 2002
Posts: 5094
ninja, indeed, this question smells me some horrible coding style
2006-02-11 15:55
JackAsser

Registered: Jun 2002
Posts: 2014
@Oswald: That coding style have saved me quite some times. =) But yes, horrible indeed.
2006-02-11 16:45
Zyron

Registered: Jan 2002
Posts: 2381
You naughty boy :)
2006-02-12 09:41
Monte Carlos

Registered: Jun 2004
Posts: 359
If Steve Wozniak used it in its Sweet 16 asm style interpreter
for the Apple II, why should we not use it?
2006-02-12 16:44
Cruzer

Registered: Dec 2001
Posts: 1048
I prefer

        jmp subroutine
back:

subroutine:
        jmp back


for subroutines that are only called from one place, e.g. typically speedcode, since it saves 6 cycles. No coding style is horrible if it saves cycles :)
2006-02-12 19:52
Frantic

Registered: Mar 2003
Posts: 1648
Cruzer:
But on the other hand you very seldom need the concept of a "subroutine" at all if it's only called from one place. (The only case I could think of is when trying to fit in some code within a page or something.)

I'm smartass number 1.
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: 1048
@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: 11386
also using the stack is slooow
2006-02-16 13:26
Ninja

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

Registered: Jun 2004
Posts: 359
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: 5094
unreadable style is a good style ? dont think so
2006-02-17 10:49
Monte Carlos

Registered: Jun 2004
Posts: 359
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: 359
Just another example for locals. ;)

monte
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
Andy/AEG
rambo/Therapy/ Resou..
Alakran_64
psenough
slimeysmine
TPM/Silicon Ltd
t0m3000/hf^boom!^ibx
Devil/Clique
wil/VCC^CTG
E$G/HF ⭐ 7
sln.pixelrat
DivertigO
rtiainen
Guests online: 119
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 The Demo Coder  (9.6)
6 Edge of Disgrace  (9.6)
7 What Is The Matrix 2  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 No Listen  (9.7)
2 Layers  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 X-Mas Demo 2024  (9.5)
7 Dawnfall V1.1  (9.5)
8 Rainbow Connection  (9.5)
9 Onscreen 5k  (9.5)
10 Morph  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Censor Design  (9.3)
5 Triad  (9.3)
Top Swappers
1 Derbyshire Ram  (10)
2 Jerry  (9.8)
3 Violator  (9.7)
4 Acidchild  (9.7)
5 Cash  (9.6)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.053 sec.