| |
Laxity
Registered: Aug 2005 Posts: 459 |
Saving from one memory location, loading to another!
Ok.. Maybe some'o you guys know how to do this:
I wan't to save a file, say from $c000 to $ce00. The file should however load to adress $1000 to $1e00 when loaded normally (like: load "foo",8,1). How am I going about this problem?
I was thinking that I could write each byte of the data to disk, and since the two first bytes of a file is the destination memory pointer I could start by writing $00 $10 in this case and then the data from $c000 to $ce00!.. Is this correct?
Cheers! |
|
| |
hollowman
Registered: Dec 2001 Posts: 474 |
this has been discussed before, unfortunately without any good answers, http://noname.c64.org/csdb/forums/?roomid=11&topicid=10710&show.. Saving files using Kernal |
| |
HCL
Registered: Feb 2003 Posts: 728 |
If you're using the kernal saver, it woun't work. I had the same idea in ByteBoozer, but then i ended up transfering all data (to where it should be when loading) before saving. Totally lame :/. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quote: Ok.. Maybe some'o you guys know how to do this:
I wan't to save a file, say from $c000 to $ce00. The file should however load to adress $1000 to $1e00 when loaded normally (like: load "foo",8,1). How am I going about this problem?
I was thinking that I could write each byte of the data to disk, and since the two first bytes of a file is the destination memory pointer I could start by writing $00 $10 in this case and then the data from $c000 to $ce00!.. Is this correct?
Cheers!
This is exactly correct!
example:
lda #$00
sta $90 ;status
lda #$61
sta $b9 ;secondary address
jsr $f3d5 ;iec-open
lda $ba ;device number
jsr $ffb1 ;LISTEN
lda $b9
jsr $ff93 ;SECOND
lda #<ADDRESS
jsr $ffa8 ;CIOUT
lda #>ADDRESS
jsr $ffa8 ;CIOUT
;* the main write loop
lp1:
lda (currzp),y
;* write byte to IEC-bus
jsr $ffa8 ;CIOUT
;* check status, exit if fail
lda $90
and #%10000011
bne fail1
;* increase address and check for end
inc currzp
bne skp1
inc currzp+1
skp1:
lda currzp
cmp endzp
bne lp1
lda currzp+1
cmp endzp+1
bne lp1
;* Normal exit, clean up and CLEAR carry.
jsr $ffae ;UNLSN
jsr $f642 ;iec-close
clc
rts
;* Failure exit, clean up and SET carry.
fail1:
jsr $ffae ;UNLSN
jsr $f642 ;iec-close
sec
rts
|
| |
Laxity
Registered: Aug 2005 Posts: 459 |
Oh.. Thanks a lot.. Example code even.. Makes it so easy I don't even have to think for myself ;) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
I'm home with a cold, so I have nothing better to do. :)
Sorry for spoiling the fun... |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Using Action Replay or comparable,
s"file",8,c000,ce00,1000
will do the trick.
From within a program, what tlr said.
But if you want it faster than plain kernel, 1541/40/70/71-only and with playing a tune while saving,
check: Plushdos for the irq1bit saver. |
| |
TNT Account closed
Registered: Oct 2004 Posts: 189 |
It might be nicer for IDE64 & MMC64 folks if you used standard open/chkout/chrout/clrchn/close instead of IEC-specific routines. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quote: It might be nicer for IDE64 & MMC64 folks if you used standard open/chkout/chrout/clrchn/close instead of IEC-specific routines.
I always did this with straight IEC-stuff, but I kind of figured it could be a problem with stuff like IDE64, MMC64 and similar...
Could you post a version doing the same as my code, but with straight I/O?
|
| |
TNT Account closed
Registered: Oct 2004 Posts: 189 |
I will try to remember to do that tonight with IDE64. There is currently no device emulation for MMC64, but I'm writing one for MMC64+RR combo. If everything works as planned all IDE64 fixed programs should work with it (as long as they don't overwrite $DExx as I'm running code in Retro Replay RAM). |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Great!
A related question: doesn't the IDE64/MMC64 supply a patched kernal? I believe that a lot of (old) software does direct IEC-calls, but uses no turbo, or other stuff that will make it impossible to run without patching. |
... 10 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 - Next |