You are not logged in.

Dear visitor, welcome to Forum64. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

mario

Beginner

  • "mario" started this thread

Posts: 39

Date of registration: Jul 31st 2011

  • Send private message

member since 18 member since

1

Saturday, March 3rd 2012, 12:36pm

von drive 8 auf 9 kopieren grösser als 255 blocks ?

Hallo zusammen,

ich brauche mal einen kleinden Denkanstoss.

Ich lese einzelne Tracks und Sektoren einer Disk oder Platte ein und schreibe lege die Sektoren jeweils nach $2000 bis $2100 ab.

Im moment speichere ich dann immer ein file ab was 256 bytes gross ist.

Ich könnte natürlich den ganzen Speicher vollschreiben und dann erst abspeichern, aber wenn ich jetzt ein Ramlink dumpen will komme ich natürlich an die Grenzen des C64 Speichers.

Wie halte ich also die zu speichernde Datei offen und lese jeweils den Sektor und speichere (appende) ihn dann an die geöffnete Datei ?

Gruß Mario

mario

Beginner

  • "mario" started this thread

Posts: 39

Date of registration: Jul 31st 2011

  • Send private message

member since 18 member since

2

Saturday, March 3rd 2012, 2:24pm

in ASM mittels ACME hätte ich vielleicht noch dazu schreiben sollen.

3

Sunday, March 4th 2012, 12:20pm

Ich verstehe Dein Problem nicht wirklich.

Eine RAMLink kann bis zu 16MB speichern. Wo möchtest Du die denn unterbringen ? -Üblicherweise wird die als temporäres Laufwerk für CMD-HD oder FD2000 verwendet. Die Frage des Sichern stellt sich dann nicht.

Wenn Du von der 1541 auf eine 1541 kopieren, also ein komplettes Backup ziehen möchtest, wird immer Track/Sektor gelesen und geschrieben. Offene Dateien gibt es da nicht. Wenn Du z.B. von der 1541 auf ein (viel) größeres Medium sichern möchtest, wirst Du ein D64 erstellen müssen. Ich habe mich noch nie damit auseinander gesetzt, aber dann wirst Du ein paar Low-Level Routinen brauchen. Ich würde mir dazu den ROM-Save-Befehl und Open/Close anschauen.
Du wirst das auch komplett selbst programmieren können, da Du die Datei über 255 Blocks per nativem DOS sowieso nicht mehr laden kannst. Wenn ich mich im Moment richtig erinnere, muss Track/Sektor-Verkettung immer passend sein, damit man den optimalen Interleave verwendet. Ich müsste es auch erst nachlesen ...

edit: Hier steht es für D64 : http://unusedino.de/ec64/technical/formats/d64.html , Sektor-Interleave ist 3.
If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -

mario

Beginner

  • "mario" started this thread

Posts: 39

Date of registration: Jul 31st 2011

  • Send private message

member since 18 member since

4

Sunday, March 4th 2012, 10:17pm

Ganz einfach,

ich möchte eben eine Ramlink oder HD partition Dumpen und da ich nach einem Track mit allen Sektoren schon den kompletten Speicher vollhaben würde speichere ich das dann halt so.

Es gibt halt eine Lösung für Geos, eine mittels Driveghost, die Linux geschichte , aber eben keine von der aus ich eine Partition auf ein SD2IEC,Ultimate,Chameloen oder was auch immer speichern kann.

Geos will ich nicht, das hab ich nie benutzt und da fang ich jetzt auch garnicht erst mit an.
Driveghost kackt bei mir alle Naselangs ab und davon abgesehen einen DosRechner mit Paralellport nur dafür zu betrieben ist mir zu albern.
Linux ist schön und gut aber jedesmal die gesamte Platte auszubauen tut der Hardware sicher auch nicht gut.

Und alleine schon der anreiz etwas zu coden was bis jetzt nicht existent ist, was mit sicherheit auch nur max 10 Leute auf der Welt brauchen, ist halt da. Komischerweise brauche ich immer Programme die es nirgends gibt, und da mach ich es einfach selber.

Soweit alles kein Problem, funktioniert auch schon zu 95% nur bekomm ich es einfach nicht hin Byteweise jeweils nach dem einlesen eines Sektorpakets $80 Sektoren die Daten zu schreiben.

Das erste mal ja aber dann das zweite dritte usw Paket anzuhängen das bekomm ich nicht hin. Ich werd es mit Sicherheit auch irgendwie alleine hinbekommen, nur hatte ich gehofft das mir jemand hier eine hilfestellung hätte geben können um das ganze etwas zu Beschleunigen.

Ich bin nach wie vor für alle Denkanstösse offen :-)

Und das ich das nicht mehr in den 64er laden kann ist auch klar, wir sprechen hier schliesslich von 16 MB bei einer kompletten native Partition.
Darum gehts ja auch nicht, ich kann die Partitionen nachher ja schön im Dirmaster laden um auf die Files zurückzugreifen.

Gruß Mario

sauhund

ist falsch abgebogen

  • "sauhund" is male

Posts: 20,339

Date of registration: Jul 16th 2005

Location: zuhause

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

5

Sunday, March 4th 2012, 10:35pm

ich sehe das problem irgendwie auch nicht.... du öffnest am anfang eine datei zum schreiben auf dem zielgerät, und immer wenn du einen block von der ramlink geholt hast schreibst du diese 256 bytes per chrout da rein. fertig.
http://www.hitmen-console.org http://magicdisk.untergrund.net
Die Furcht vor der freimütigen Antwort kann auch robuste Charaktere befallen.

mario

Beginner

  • "mario" started this thread

Posts: 39

Date of registration: Jul 31st 2011

  • Send private message

member since 18 member since

6

Sunday, March 4th 2012, 10:43pm

ich sehe das problem irgendwie auch nicht.... du öffnest am anfang eine datei zum schreiben auf dem zielgerät, und immer wenn du einen block von der ramlink geholt hast schreibst du diese 256 bytes per chrout da rein. fertig.
Mach ich eigentlich auch genau so,

4 Routinen gemacht,

a open file drv 9
b get bytes drv 8
c save data drv 9
loop to b until b ende
d close file drv 9


und jedesmal wenn ich 256 bytes geholt hab spring ich in die save data, aber irgendwas iss noch falsch.

Normalerweise plain easy, aber irgendwie seh ich grad den Wald vor lauter Bäumen wieder nicht. Ich werds mir mal in ruhe ansehen was ich mir da wieder für nen mist zusammengecodet hab.

7

Sunday, March 4th 2012, 11:18pm

Auf welchem Laufwerk möchtest Du das denn sichern ? - Bei einer 1541 kämen da rund 100 Diskseiten zusammen. Das wird es doch nicht sein ?
If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -

mario

Beginner

  • "mario" started this thread

Posts: 39

Date of registration: Jul 31st 2011

  • Send private message

member since 18 member since

8

Monday, March 5th 2012, 12:40pm

Auf ein SD2IEC zum Beispiel, das hab ich zumindest hier. Chameleon und Ultimate hab ich keins.

Damit jetzt keiner die Glaskugel anwerfen muss, hier der code, aber irgendwo hab ich nen Fehler drin und seh ihn nicht


opensavefile

LDA #ssname_end-ssname
LDX #<ssname
LDY #>ssname
JSR $FFBD ; call SETNAM
LDA #$04 ; file number 4
LDX #$09 ; default to device 9
LDY #$02 ; secondary address 2
JSR $FFBA ; call SETLFS
JSR $FFC0 ; call OPEN
BCS .error3 ; if carry set, the file could not be opened
rts

closesavefile

.close3
LDA #$04 ; filenumber 4
JSR $FFC3 ; call CLOSE
LDX #$00 ; filenumber 0
JSR $FFC9 ; call CHKOUT (reset output device)
rts

savefile

file_start2 = $2000 ; sector address
file_end2 = $2100

ldx #$04 ; filenumber 4
JSR $FFC9 ; call CHKOUT (file 4 now used as output)

ldx #$00
next
lda file_start2,x
beq done
jsr $ffd2
inx
bne next
done
rts

Beim ersten start rufe ich halt opensavefile auf, nach jedem Sektor savefile, und em ende closesavefile

WTE

Master

  • "WTE" is male
  • »WTE« is a verified user

Posts: 1,903

Date of registration: Feb 11th 2005

Location: Deutschland

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

9

Tuesday, March 6th 2012, 12:10am

Vielleicht solltest Du das ganze Programm hier reinsetzen. Vielleicht schließt Du beim Nachladen alle Files? Ansonsten sollte sequentielles "lesen hier, schreiben da" funktionieren (bei mir tut es das jedenfalls).

Quoted

ldx #$00
next
lda file_start2,x
beq done
jsr $ffd2
inx
bne next
done
rts


Was erhofft Du dir von diesem beq ?
In Programmdaten (und Diskdumps) soll es auch ab und zu mal ein Nullbyte geben ...

Gruß WTE

mario

Beginner

  • "mario" started this thread

Posts: 39

Date of registration: Jul 31st 2011

  • Send private message

member since 18 member since

10

Tuesday, March 6th 2012, 12:39pm

Vielleicht solltest Du das ganze Programm hier reinsetzen. Vielleicht schließt Du beim Nachladen alle Files? Ansonsten sollte sequentielles "lesen hier, schreiben da" funktionieren (bei mir tut es das jedenfalls).

Quoted

ldx #$00
next
lda file_start2,x
beq done
jsr $ffd2
inx
bne next
done
rts


Was erhofft Du dir von diesem beq ?
In Programmdaten (und Diskdumps) soll es auch ab und zu mal ein Nullbyte geben ...

Gruß WTE

Argh :zzz: da sieht man mal wieder was copy/paste anrichten kann. Natürlich muss der beq weg, der hat da überhaupt nichts zu suchen, ich habs einfach nicht gesehen. Danke für den schlag in den Nacken.

Funktioniert jetzt natürlich auch so wie es soll ^^

Gruß Mario

WTE

Master

  • "WTE" is male
  • »WTE« is a verified user

Posts: 1,903

Date of registration: Feb 11th 2005

Location: Deutschland

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

11

Wednesday, March 7th 2012, 1:15am

Gern geschehen ;)