Laufwerksunabhängiger Zugriff auf SEQ- und REL-Dateien

Es gibt 19 Antworten in diesem Thema, welches 3.190 mal aufgerufen wurde. Der letzte Beitrag (3. Juli 2016 um 22:43) ist von ThomBraxton.

  • Hallo Leute,

    mal wieder eine Frage an die Profis unter Euch:
    Wie kann ich ein BASIC Programm oder auch Assemblerprogramm laufwerksunabhängig programmieren?

    Für mich geht es diesbezüglich nicht nur darum, ob ich Laufwerk 8 bis 11 ansprechen möchte, sondern auch das Programm mit Zugriff auf SEQ- und REL-Dateien auf einem SD-Karten-System lauffähig zu machen. Gerne mit den Möglichkeiten des BASIC 7.0 des C128ers oder wie auch immer.... :wink: Also wie muss der OPEN- DOPEN-Befehl aussehen und kann ich dann trotzdem mit Record# und Input# darauf zugreifen....

    Liebe Grüße!
    ThomBraxton

  • Bei OPEN x, y, z ist y die Geräteadresse. Bei den Basic-7-Anweisungen wie APPEND, DOPEN, DLOAD, BLOAD, DIRECTORY etc. wird die Geräteadresse mit ",U" angehängt. Besonders beachten muss man da nur, dass Variablen geklammert werden müssen, also DIRECTORY U9 bzw DIRECTORY U(y).

    Datenzugriffe gehen ja dann eh über die Dateinummern, sind also von den Geräteadressen abgekoppelt.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • OK, soweit habe ich das schon verstanden. Danke! Das heißt dann für mich als Programmentwickler ist es kein Extraaufwand, wenn man mein Programm dann von einem Diskimage auf einem SD-Laufwerk benutzt? Der User stellt vorher dann an seinem Rechner den Zugriff per Open und was weiß ich her, um das Image zu mounten und dann läuft es als Laufwerk 8 oder 9? Oder wie muss diese SD-Sache auslegen? Die Auswahl von Laufwerk 8 bis 11 kann ich ja als Einstellungsmöglichkeit anbieten...

  • Entweder den Benutzer fragen oder einen peek auf Adresse 186 machen. Die sollte nämlich die zuletzt benutze Geräteadresse beinhalten.

    Klappt übrigens auch umgekehrt ganz gut: Programm vom sd2iec laden und per poke die Adresse 186 ändern. Dann klappen auch Kopierprogramme, die ansonsten das Laden vom sd2iec nicht mögen und danach mit einem echten Diskettenlaufwerk weiterarbeiten sollen.

    ---
    Meine Github-Projekte: Bitte melde dich an, um diesen Link zu sehen. Vice 3.2 Improved: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II / Ultimate 64 Firmware Releases: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II Update instructions: Bitte melde dich an, um diesen Link zu sehen.

  • Also nochmal für die "Ganzblöden"-Wie-Mich: Ich schreibe ein Basic-Programm, das mit REL-Dateien arbeiten soll. Dieses Programm wird mit der benötigten REL-Datenbank in einem Disk-Image abgelegt. Der Anwender möchte jetzt dieses Image auf seinem sd2iec-Gerät mounten,mein Programm benutzen und die Datenbank liegt aber jetzt in dem besagten Image... Ist das sd2iec-Laufwerk dann mein Laufwerk 8 oder muss ich erst die Adresse 186 peeken, damit ich die Zieladresse ermitteln kann? Als was wird das sd2iec-Laufwerk bzw. das gemountete Image behandelt? Stellt die Mount-Software mir in Adresse 186 die Laufwerksnummer zur Verfügung?


    Danke für Eure Hilfe!
    Liebe Grüße!
    ThomBraxton

    P.X.:Ich merke schon, ich muss mich mit diesem Ding auch noch genauer befassen... *grrrrr*

  • Diskimage-mounten beim SD2IEC entspricht dem Diskette-einlegen beim realen Laufwerk, das hat also mit den Geräteadressen nichts zu tun - wenn Dein SD2IEC auf Adresse 9 eingestellt ist, ist es das auch noch nach dem Mounten des Images.

    Bei den REL-Dateien klingelt es allerdings gerade - war da nicht sowas, dass die in SD2IEC (noch) nicht 100%ig unterstützt werden oder so? Ich will hier keine Gerüchte in die Welt setzen, also schau mal in die Docs oder frag Unseen direkt.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Dieses Programm wird mit der benötigten REL-Datenbank in einem Disk-Image abgelegt.

    Unter dieser Voraussetzung ist es am sinnvollsten, am Programmanfang einmal Adresse 186 auszulesen und jenen Wert für die Geräteadresse (auch Gerätenummer genannt) bei jedem OPEN der REL-Datenbank zu verwenden.

    ---
    Meine Github-Projekte: Bitte melde dich an, um diesen Link zu sehen. Vice 3.2 Improved: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II / Ultimate 64 Firmware Releases: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II Update instructions: Bitte melde dich an, um diesen Link zu sehen.

  • Bei den REL-Dateien klingelt es allerdings gerade - war da nicht sowas, dass die in SD2IEC (noch) nicht 100%ig unterstützt werden oder so?

    Auch ich will keine Gerüchte in die Welt setzen, deswegen zitiere ich ausschließlich aus der Doc (Quelle: Bitte melde dich an, um diesen Link zu sehen. )

    Demzufolge für diesen Zweck besser eine 1541 Ultimate als ein SD2IEC verwenden.

    ---
    Meine Github-Projekte: Bitte melde dich an, um diesen Link zu sehen. Vice 3.2 Improved: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II / Ultimate 64 Firmware Releases: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II Update instructions: Bitte melde dich an, um diesen Link zu sehen.

  • Bei den REL-Dateien klingelt es allerdings gerade - war da nicht sowas, dass die in SD2IEC (noch) nicht 100%ig unterstützt werden oder so?

    REL geht direkt auf der Karte, aber nicht auf Diskimages - das hat den Hintergrund, dass REL direkt auf der Karte relativ leicht geht weil die FAT-Library einen Seek-Befehl zur Positionierung des Dateizeigers anbietet, aber REL in Diskimages die Unterstützung der Commodore-spezifischen REL-Dateiformate braucht (Stichworte Side Sectors und Super Side Sectors). Ausserdem wird REL kaum verwendet, daher gabs bisher auch nicht unbedingt akuten Bedarf, die Arbeit dafür zu investieren.

    Aber wie immer gilt: Wenn jemand einen Patch schickt, steigen die Implementierungschancen deutlich (sofern er funktioniert und nichts anderes kaputtmacht)

    Zitat

    Ich will hier keine Gerüchte in die Welt setzen

    Endlich denkt mal jemand an die Gerüchteküche! ;)

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Im C64wiki zum Thema SD2IEC habe ich gelesen, dass der Zugriff ohne Probleme funktionieren sollte, weil man dort die Funktionsweise der 1571 komplett implementiert hätte. Das Image wird im D71-Format sein. Somit sollte es dann eigentlich funzen. Es sollte natürlich zuvor ausprobiert werden.

    Aber recht herzlichen Dank für Eure Hilfen!

    Liebe Grüße!
    ThomBraxton

    P.X. Muss nur noch ein paar Diskettenfehlerbehandlungsroutinen implementieren und die Gerätenummer abfragen und als Variable einbauen, dann ist dat Progämmschen fettisch! Eine Testcompilierung mit PET-Speed 128 habe ich auch schon durchlaufen lassen. Da wird die Arbeitsgeschwindigkeit dann einigermaßen erträglich. Vor allem der Grafikaufbau geht wesentlich fixer.

  • Aber wie immer gilt: Wenn jemand einen Patch schickt, steigen die Implementierungschancen deutlich (sofern er funktioniert und nichts anderes kaputtmacht)

    Tja, wenn ich genügend Plan dafür hätte, dann würde ich ja was abliefern. Aber nur mit BASIC-Kenntnissen sieht dat Ganze dann nich so jut uss!
    Aber wenn jemand die Funktion einbauen würde, wäre das toll. Ich würde auch dafür ein oder zwei Kisten Bier zur Verfügung stellen... :wink:

  • Im C64wiki zum Thema SD2IEC habe ich gelesen, dass der Zugriff ohne Probleme funktionieren sollte, weil man dort die Funktionsweise der 1571 komplett implementiert hätte.

    Da hast du was falsch verstanden... Die IEC-Routinen orientieren sich an einem 1571-ROM-Listing (genauer gesagt: dem Teil für den 1541-Modus), aber das ist meilenweit von "Funktionsweise der 1571 komplett implementiert" entfernt.

    Zitat

    Das Image wird im D71-Format sein. Somit sollte es dann eigentlich funzen.

    Kein REL in Diskimages, egal welches Format...

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • OK, verstanden. Somit sehr schade, dass es nicht auf SD2IEC-Laufwerken lauffähig sein wird...

  • Das versteh' ich gerade nicht. Außerhalb eines Images sollen REL-Dateien ja auf einem SD2IEC funktionieren. Macht Deine Software wirklich etwas, was nur in einem Image geht (wie Direktzugriff auf einen Sektor)?
    Ansonsten reicht ja ein Verzeichnis auf den SD2IEC, wo man die PRG-Datei reinkopiert - ohne Image.

    ---
    Meine Github-Projekte: Bitte melde dich an, um diesen Link zu sehen. Vice 3.2 Improved: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II / Ultimate 64 Firmware Releases: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II Update instructions: Bitte melde dich an, um diesen Link zu sehen.

  • markusC64:

    Danke für Deinen Hinweis. Also, solange mein Programm direkt von der Karte läuft und in keinem Image steckt, sollte es funzen! OK! So langsam bekomme ich es geistig sortiert!

  • Weiter oben hatte markusC64 aus der Dokumentation zitiert. Dort steht, dass REL-Dateien zwar (außerhalb von Diskimages) unterstützt werden, aber eben nur zum Teil. Ob die Neuerstellung von REL-Files oder das Hinzufügen von Einträgen funktioniert, kann nicht garantiert werden, funktioniert u.U. also nicht.

    Edit: Namen korrigiert.

  • Das stimmt wohl, jedoch könnte man Posting 10 so deuten, dass außerhalb von Diskimages man durchaus Chancen hat, dass es geht - kann aber sein, dass ich da zu viel rein interpretiere.
    Jedenfalls steht dort nicht "REL geht direkt auf der Karte mit Einschränkungen". Und Unseen müsste es eigentlich wissen.
    Allerdings ist natürlich zu bedenken, dass REL-Dateien auf dem SD2IEC viel weniger Praxistest hinter sich haben. Man sollte sich sich hüten, da zu viel zu versprechen.

    ---
    Meine Github-Projekte: Bitte melde dich an, um diesen Link zu sehen. Vice 3.2 Improved: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II / Ultimate 64 Firmware Releases: Bitte melde dich an, um diesen Link zu sehen.
    1541 Ultimate II Update instructions: Bitte melde dich an, um diesen Link zu sehen.

  • Ob die Neuerstellung von REL-Files

    Das funktioniert

    Zitat

    oder das Hinzufügen von Einträgen funktioniert

    Das funktioniert auch.

    Allerdings ist natürlich zu bedenken, dass REL-Dateien auf dem SD2IEC viel weniger Praxistest hinter sich haben.

    Genau, also testet mal mehr! =)

    sd2iec kopiert übrigens nicht den REL-Bug der 1541 - unter gewissen Umständen liefert die nämlich falsche Daten, wenn der bei einer Positionierung angesprungene Record über zwei Sektoren verteilt ist. Meines Wissens reicht es als Workaround, den Position-Befehl immer zweimal zu senden.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.