Midicom Floppy Anschluss

  • Hallo,


    ich würde den Midicom gern wie einen "normalen" Stand-alone Computer betreiben können, also Daten schreiben und lesen auf eigenes Floppydisklaufwerk.


    Da es ein Interface von Lucas-Nülle gab (LM 8825) und dieses an eine Commodore Floppy angeschlossen wird, sollte dies machbar sein.


    Ohne das Originalinterface und ohne den Schaltplan ist es sicher schwer, aber ich fange einfach mal an, die vorhandenen Infos zusammenzusuchen:




    Einführung Midicom S.746:


    Einführung Midicom S.95 ff:



    Einführung Midicom S.167 ff:





    Etwas Off-Topic, da es zu dem Sydicom Rechner gehört:


    Aufbau eines Mikrorechners S.243:






    Gruß Aquarius

  • Ich kann mich an einen Artikel in der mc erinnern, wie man die VC-1571 an ein Z80 System anschliesst.


    Und zum Glueck hab ich den Artikel endlich wieder gefunden.

    Er ist zwar keine direkte Loesung, aber auf jeden Fall zeigt er die notwendige Hardware und auch ein Teil der notwendigen Software.

    Files

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Ich kann mich an einen Artikel in der mc erinnern, wie man die VC-1571 an ein Z80 System anschliesst.


    Und zum Glueck hab ich den Artikel endlich wieder gefunden.

    Er ist zwar keine direkte Loesung, aber auf jeden Fall zeigt er die notwendige Hardware und auch ein Teil der notwendigen Software.


    Genial! Der Portbaustein ist ja der 8255! :xmas:


    Egal Z80 oder 8085 - ich glaube, dass das der "missing link" ist, um die Schnittstelle reverse zu engineeren.


    Vielen, vielen Dank funkenzupfer


    Ich kann es kaum erwarten, mal die Routinen von LN zu disassemblieren. Vielleicht haben die ja auch diesen Artikel genutzt!

  • Es deutet also vieles auf die Nutzung des 8255 ICs als Dreh-und Angelpunkt des Floppyinterfaces im Midicom hin.


    Das Interface aus der Zeitschrift MC ist ja echt übersichtlich:



    Die beiden internen PIOs 8255 des Midicoms:


    Stellt sich für mich die Frage, ob die Routinen von LN einen der beiden internen 8255 ICs nutzen, oder auf dem Floppycontroller ein separater 8255 saß.

  • Hier habe ich angefangen die Floppyroutine im Midicom ROM zu verfolgen:


    https://onlinedisassembler.com/odaweb/IohltLuA/0


    Und daraus eine Subroutine von FDINFO, die ich so interpretiere, dass auf den Ausgangsport $53 und $50 des Prozessors geschrieben wird:


    Dann wird dort also die 8255 PIO#1 angesprochen, die für die E/A zuständig ist. Was die übergebenen Bytes $82, $09, $03 und $ff bedeuten, müsste ja in der Beschreibung des Bausteins stehen...


    Beim Durchforsten des ROMs habe ich folgende Floppymeldungen gefunden:


  • Ich hab mir gerade auch mal die Doku angeschaut.

    In der Kurzanleitung ist eine Monitor Einsprungtabelle, da sind ja eine Menge Funktionen schon implementiert.


    Allerdings hat die PIO1 mehrere Aufgaben.

    Und im Schaltplan finde ich den X11 Stecker nicht, der fuer die Erweiterungen gut ist.

    Aber ich denke das laesst sich finden.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Adresse 0x53 ist das Steuerwortregister von PIO #1:


    0x82 entspricht 1000 0010, was INITIALIZE aktiviert und

    - Kanal A und C auf Ausgabe und Betriebsart 0,

    - Kanal B auf Eingabe und Betriebsart 0 setzt


    0x09 entspricht 0000 1001 was Bit #4 im Kanal C setzt.


    0x03 entspricht 0000 0011 was Bit #1 im Kanal C setzt.


    Sofern ich das hier richtig verstanden habe:


    Am Ende werden dann mit 0xff die LEDs über 0x50 aktiviert, wie Joe_IBM schreibt

    OUT 50H gibt einen Wert auf der LED-Zeile aus.


    Gruß, Jochen


    In der Routine der Zeitschrift MC wird das Steuerwortregister wohl mit 0x9A beschrieben:

    0x9A entspricht 1001 1010, was INITIALIZE aktiviert und


    - Kanal A, B und C auf Eingabe und Betriebsart 0 setzt



    Sieht also erstmal nicht so aus, dass LN die Routine aus der Zeitschrift MC direkt übernommen hat. Schade, wäre zu schön gewesen.


    Hat eigentlich jemand das Source-Listing der Z80-VC1541 Ansteuerung? Oder eine Idee, wie ich das aus dem Artikel abtippe - habe das vor 30 Jahren mal mit dem MSE auf dem C64 gemacht.

  • Oder eine Idee, wie ich das aus dem Artikel abtippe

    Beim letzten mal habe ich eine Datei mit Nullen im Editior im Hex-Modus geladen und alles in Hex eingetippt.

    Die Binaerdatei habe ich danach erstmal durch den Disassembler gejagt.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • In der FDLOAD Routine wird bei Adresse 0x1206

    1) 0x0a also 0000 1010 ins Steuerwortregister geschrieben, was Kanal C Bit 5 rücksetzen bedeutet

    2) 0x08 also 0000 1000 ins Steuerwortregister geschrieben, was Kanal C Bit 4 rücksetzen bedeutet

    3) 0x04 also 0000 0100 in Kanal C nach draußen geschickt


    Leider finde ich im Midicom ROM nirgends die Sequenz db 52 für den Befehl IN A,0x52.


    Also wird der Kanal C von PIO #1 nicht für die eingehenden Signale des Floppies verwendet.


    :nixwiss: Irgendwas stimmt hier nicht:nixwiss:

  • Kann ich mit der Checksumme am Ende irgendwas anfangen? Gibt es einen HEX-Editor, der mir zur Kontrolle diese Checksumme pro Zeile berechnet?

    Da kann ich dir ein kurzes Programm schreiben. Kontrollieren musst du die von Hand, aber das alleine ist besser als ohne Checksum.



    Da Kanal A des PIO #1 für die LEDs und Kanal B für die Schalter vorgegeben sind, bleibt nur Kanal C für den Datenaustausch Richtung Floppylaufwerk. Das wäre dann Adresse 0x52.

    Kanal A und B der PIO1 gehen auch über Buffer an X7 (Centronics Stecker). Wie gesagt, da gibt es mehr zu beachten.


    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Da kann ich dir ein kurzes Programm schreiben. Kontrollieren musst du die von Hand, aber das alleine ist besser als ohne Checksum.

    Danke Dir, habe gerade einen Editor gefunden, der mir die Checksumme berechnet:


    Bei HxD kann man die Zeile markieren und dann für diesen Bereich die Prüfsumme (Checksum-16) berechnen lassen und vergleichen mit dem Listing.

  • einen Editor gefunden, der mir die Checksumme berechnet:

    Super. Werd ich mir mal besorgen.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • VC1541 für Z80 Systeme

    IEC floppycontroller and software for Z80 based computers and Commodore diskdrives

    Quelle: mc-Zeitschrift 1984-06

    Autor: Hermann Josef Middeke


    Ergebnis des Abtippens im Anhang als .hex-Datei im Intel-16 Format und als RAW ab 0x0000.

    Die Routine liegt ab 0x3200.



    Habe es noch nicht getestet. Mache jetzt erstmal Pause ::hacking::.


    Gruß Aquarius

  • Super, ich schick das gleich mal durch den Disassembler.


    ..piep..piep..piep.. Bitte warten, Ihre verbindung wird gehalten. ..piep..piep..piep.. :-)

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Ergebnis des Abtippens im Anhang als .hex-Datei im Intel-16 Format und als RAW ab 0x0000.

    Hier mal mein Ergebnis und des Disassemblers.

    Der Code ist fuer den Z80, also nichts fuer den Midicom.


    Das CTL File ist das Control File fuer den Disassembler.


    Viel Spass

    Files

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Schicker Disassembler. Hast du mal einen Link dafür?

  • http://www.brouhaha.com/~eric/software/d52/


    Ich habe ein paar Aenderungen vorgenommen, wegen der Ausgabe-Formatierung.

    Wenn du es gebrauchen kannst, sag Bescheid.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)


  • Wow! Das sieht mal übersichtlich aus!


    Mit gesundem Halbwissen gefragt: Falls ich das wieder in Binärcode umwandeln will, nutze ich den verlinkten Assembler einen Assembler und ändere die Basisadresse des PIO und/oder nutze eine andere ORG, um den ganzen Code in einen anderen Speicherbereich zu legen, oder?

  • Falls ich das wieder in Binärcode umwandeln will

    Zum Test habe ich den disassemblierten Assemblercode durch einen Assembler geschickt und siehe da, das Ergebnis ist das gleiche.


    Bevor aber der disassemblierten Code zu einem allgemeingueltigen wird, muss man noch einiges an Handarbeit rein stecken.


    Zum Bleistift:

    Ich habe fuer die PIO Adresse Symbole angelegt, also z.B. 40h fuer PIO0A.

    Aus einem out (40h),a macht der Disassembler jetzt out (PIO0A),a, das ist lesbar.

    Aber er macht auch aus einem and 40h ein and PIO0A.

    Aenderst du jetzt die PIO Adressen, wird dein and 40h unsinnig.

    Oder:

    Der Disassembler hat fuer ld de,3e8h das "38eh" als Adresse erkannt und das Symbol "X3e8" erzeugt.

    Aenderst du die Adresslage des Codes, aendert sich der Wert fuers ld de,..., fuer Adressen genau richtig.

    In diesem Fall ist 3e8h aber keine Adresse, sondern ein Wert fuer eine Verzoegerung:

    ld de,1000

    call DELAY2

    Hier nicht so gut.


    Dann gibt es bei 355C-355E eine Opcode Trickserei.

    Der Opcode bei 355E dec (hl) ist m.E. ok.

    Allerdings wird der Opcode bei 355C jp p,X3559 direkt davon beieinflusst, da es sich um die hoehere Adresse eines Sprungbefehl handelt.

    D.h. dass das Programm nur funktioniert, wenn es ab 3200h beginnt.

    Ich weiss noch nicht, ob das ein Fehler oder Absicht ist.

    Kann auch sein, das der Sprung nach 355E ein Fehler ist.


    Fazit:

    Bloss nichts aendern!

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Der Code ist fuer den Z80, also nichts fuer den Midicom.

    Wie viel Arbeit ist es, den Code für den 8085 Prozessor umzuschreiben?


    Ich habe einfach mal versucht, Deine disassemblierte Routine in LN-Tools durch den Assembler zu schicken. Ergebnis: 418 Fehler bei 893 Zeilen!


    Ein reines Austauschen der Befehlswörter hat bei den ersten beiden Fehlern geholfen, aber bei djnz gebe ich auf.