Floppyzugriffe Commodore...

  • Hallo.


    Ich hab an anderen Systemen schon kleinere Programme mit Floppyzugriff geschrieben. Da hatte ich aber ein System mit einem Floppycontroller und einem Standard-Shugart-Bus. Bei Commodore hab ich ja zum einen den Rechner (C64, CBM3032....) und den Rechner in der Floppy selber. Im Gegensatz zu PC Laufwerken haben wir ja bei Commodore ein intelligentes Laufwerk mit eigenem, integriertem Rechner. Ich hab am C64 schon einige Sachen in Assembler gemacht, die aber nur im Rechner selber statt fanden, also keine Zugriffe auf irgendwelche Peripheriegeräte hatten. Wie muß ich mir das vorstellen ? Wie ist das mit dem Umdenken ? Wenn ich den Floppykanal öffne, bin ich dann im Rechner der Floppy oder bin ich dann im Hauptrechner. Also muß ich mich in die Floppy "einwählen" und dann zB das directory aus der Diskette lesen und dieses dann über den seriellen Ausgang an den Rechner senden ? Vielleicht kann mir hier jemand mit ein paar Stichpunkten aushelfen ?!


    Vielen Dank !


    Gruß Jan

  • Hallo Jan,

    es ist viel einfacher. Wenn du nicht irgendwelche Tricks durchführen willst, greifst du auf die Disketteninhalte mit den eingebauten Befehlen zu.

    In BASIC sind das LOAD, SAVE, VERIFY, OPEN, CLOSE, INPUT#, GET#, PRINT#. Die Directory bekommt man mit LOAD "$",8

    In Assembler wie oben, du kannst aber auch direkt den IEEE488 Bus mit Kernal-Befehlen steuern.

    Ich empfehle ein Floppy-Handbuch zu suchen (gibt es im Netz) z.B. für die 1541

    und eine Programmer's Reference für den von dir benutzten Rechner, in dem die Kernal-Routinen beschrieben werden.

    Gruß, Bit Shifter

  • Vielen Dank für die Antwort ! Ich hab oben glaub ich vergessen zu erwähnen, dass ich das alles in Assembler machen will. Die Basic Befehle kenne ich natürlich alle. Handbücher hab ich da, die suche ich mal raus. Mir ging es darum. Wenn ich mit ASM den Floppy-kanal öffne, werden die weiteren instructions dann im Rechner der Floppy oder im Hauptcomputer durchgeführt ?


    Gruß Jan

  • Wenn du in Assembler eine Datei öffnen möchtest, dann kannst du die Kernal-Routinen benutzen.

    Mit der Floppy wird über Kommandos kommuniziert. Um die Abläufe in der Floppy muss man

    sich normalerweise keine Gedanken machen, außer man möchte außergewöhnliche Sachen machen.

    Selbst der Direktzugriff auf Floppy Sektoren kann mit den Kommandos U1 und U2 gesteuert werden.


    Hier ein Beispiel:


  • Den Commodore Kernal zu nutzen in Assembler geht auf zwei verschiedene Arten:

    • du benutzt dieselbe Art wie BASIC das tut: OPEN,CLOSE,CHKIN,CHKOUT,BASIN,BASOUT (Kernal Sprungtabelle)
    • oder du nutzt den IEEE-488 direkt: LISTEN, TALK, UNLISTEN, UNTALK, IEEEOUT, IEEEIN


    Variante 1 ist sinnvoll, wenn du

    • BASIC Programme kombinierst mit Assembler
    • wenn das Ziel nicht nur IEEE-488 ist


    Bei den Sachen kann ich dir gut weiter helfen, das kenne ich sehr gut.

  • Wenn ich mit ASM den Floppy-kanal öffne, werden die weiteren instructions dann im Rechner der Floppy oder im Hauptcomputer durchgeführt ?

    Um es mal klarzustellen - falls Du Deine Frage so meintest:

    Wenn ein Assembler-Programm im C64 den Kanal zur Floppy öffnet, dann läuft auch das genannte Programm natürlich weiterhin in Deinem C64 weiter, Du hast eben nur einen Kanal für eine Daten-/Befehlsübertragung zur Floppy geöffnet. Nach dem Öffnen wartet der Prozessor in der Floppy quasi dauernd drauf, dass der C64 ihm über diesen Kanal nun Befehle und / oder Daten schickt, die dann autark in der Floppy verarbeitet werden (die Floppy "lauscht" am Bus, bis etwas auf dem geöffneten Kanal mit ihrer Nummer vom C64 gesendet wird). Die Ergebnisse dieser Befehle / Arbeiten in der Floppy schiebt Dir der Floppy-Prozessor (bzw. das Betriebssystem IN DER 1541) dann wieder über den geöffneten Kanal zurück, und Du musst die Ergebnisse halt aus dem Kanal auslesen.


    Da die 1541 auch ein wenig Ram enthält, kann man z.B. mittels "M-W", "M-R" und "M-E" (Memory-Write, -Read, Execute) Daten und sogar kleine Programmcodes ins Ram der Floppy laden und völlig unabhängig vom C64 ausführen lassen, so dass man quasi 2 getrennte Computer nutzt, die sich dann über das Kabel / die Kanäle untereinander verständigen können. So kann man z.B. eigene kleine Fastload-Routinen "auf beiden Seiten des Kabels" etablieren - ich denke, diverse Soft-Fastloader liefen so.

  • Also muß ich mich in die Floppy "einwählen" und dann zB das directory aus der Diskette lesen und dieses dann über den seriellen Ausgang an den Rechner senden ? Vielleicht kann mir hier jemand mit ein paar Stichpunkten aushelfen ?!

    Die Floppy ist ein eigenständiger Computer.


    Es gibt Kanäle über die man kommunizieren kann.


    Manche Kanäle haben fixe Verwendung:

    • Kanal 0 - LOAD
    • Kanal 1 - SAVE
    • KANAL 15 - Kommando senden, Fehlerkanal lesen


    Am besten du schaust dir das im BASIC genauer an.

    In Assembler läuft es sinngemäß exakt gleich.


    Um an das Datei Verzeichnis des Drive 0 heran zu kommen, ladest du einfach die "Datei" mit dem Namen "$0":

    LOAD"$0",8


    Um einen Befehl an die Floppy zu senden, benutzt du Kanal 15:

    OPEN 1,8,15,"I0":CLOSE 1


    Um den Fehlerkanal zu lesen liest du den Kanal 15:

    OPEN 1,8,15:INPUT#15,A,B$,C,D:CLOSE 1


    Um auf eine Datei zuzugreifen, benutzt du OPEN mit einem Kanal zwischen 2 und 14:

    OPEN 1,8,5,"ADRESSEN,S"


  • Sehr interessant ! Vielen Dank für die Info ! Ich hab das C64 intern Buch mit dem kompletten Kernal Listing. Da schau ich später mal noch rein.


    Gruß Jan

  • Sehr gut ist auch das Buch zur 1541 mit ROM-Listing aus dem Markt&Technik-Verlag, war eines mit blauem Buchrücken. Das würde dann quasi das Gegenstück zum C64 sein, und man versteht dank des kommentierten ROMs auch ganz gut, was in der Floppy selbst so alles passiert.


    Das hier isses:


    https://www.c64-wiki.de/wiki/Datei:Die_Floppy_1541.jpg