Beiträge von funkenzupfer

    RD,WR >20ns nach CS, sonst startet der PCF im 68000er Modus.

    Schau dir das CPU Timing an!

    I.a. kommt die Adresse deutlich frueher als RD und WR

    Wenn du aus der Adresse das CS machst reicht das.


    Abgesehen davon, du hast das CS2 um 20ns verzoegert, nicht RD und WR.

    Ok, ohne geaenderten Schaltplan bzw eine Erklaerung, wie du was verdrahten willst, ist das nicht aussagekraeftig.

    Da hat es sich aber gelohnt die 5 Pins noch rauszubauen.

    Den Sockel rechts daneben wuerde ich auch noch rausnehmen.


    Und was ist den mit dem IC darueber passiert (Pfeil) ?

    So ein GAL hilft oft bei soviel Gatterlogik.


    Man staune, ich brauch mindestens zwei Durchläufe der Makrozellen, um auf die 20ns Verzug zu kommen. Die haben 10ns Gatterlaufzeit. Gar nicht so übel für die Zeit.

    Wofür brauchst du eine Verzögerung?


    Und, wenn man sich auf Durchlaufzeiten verlässt, ist man (irgendwann) verlassen.

    Wenn auf dem GAL -10 für 10ns Durchlaufzeit draufsteht, ist das der Maximalwert. Es können aber auch nur 5ns sein.


    Was machst du mit WR und RD ?

    Wenn aber der 245er Treiber mit dem /CS dazukommt, feuert der auf den Bus. Ohne den würde das wohl gehen.

    Stimmt. Gut aufgepasst.

    Dann musst du besser das IOR+IOW nach dem /CS verknüpfen.


    Ist wohl das ACK für seinen Interrupt. Ich wäre versucht den an /INTA anzuschließen

    Du hast den INT-Ausgang über Jumper an die Restarts (RSTx.5) gelegt. M.W. erzeugen die kein INTA, weil die nicht vektorisiert sind.

    Bei den Interrupts am 8085 kenn ich mich nicht so genau aus.


    A0 und B0 auf Masse gezogen

    Ist egal wie du die Ax und Bx belegst. Es geht nur um Gleichheit.

    Bei dieser Schaltung kommt /CS Verzögert nach /IOR /IOW.

    Eigentlich sollte erst der /CS da sein und danach erst /IOR /IOW (20ns). In diesem Fall muss das sogar sein, sonst springt der PCF in den falschen Modus.

    Vollkommen richtig.

    Da hast du viel gelesen und anscheinend verstanden, find ich gut.


    Schmeiss das IOWR weg und leg einfach den A=B Eingang auf VCC. Das reicht.

    /CS darf ja auch aktiv werden ohne ein /IOR oder /IOW.

    /CS sagt ja nur, das jetzt die richtige Adresse aktiv ist. Ob dann ein /IOR oder /IOW aktiv wird oder nicht, ist vollkommen egal.


    Oder nimm einen LS688, damit kannst du die Adresse besser ausdekodieren.


    Gibts da nicht schon ein schönes Beispiel zum abmalen? ... Man, beim MFA machen die die Adresscodierung ja auch dauernd so. Menno. Motz ;o)

    Abmalen heisst meistens Fehler uebernehmen. Selber denken hilft meist mehr.

    Hab ich ja gesagt, das die Dekodierung in den MFA-Schaltungen genauso falsch ist. Durch's abmalen wird's nicht richtiger.

    da müssen funkenzupfer u. ä. ran ...

    Immer die kleinen dicken. ;)




    Sonstige Vorschläge?

    Zum Adressdekoder habe ich mich schon mal geaeussert. Auch zur Verwendung von IOR und IOW am LS85.

    WICHTIG! Schau dir im Datasheet das Interface Mode Control an.


    Wo kommt der INTI2C denn her? Ich seh nur einen Pullup.


    LS245 ist empfehlenswert. Der PCF8584 kann aehnlich wenig treiben wie der 8251.



    BTW, was willst du denn mit dem I2C Busmaster machen?

    Man kann I2C auch mit einfacheren Bausteinen und Software aufbauen. Sinngemaess 1. Bild aus RE: Midicom Floppy Anschluss

    Kann aber sein, dass am Laufwerk auf den Datenbits irgendwas wie ein Bandpassfilter ist, der nur MFM Frequenzen durch lässt.

    Die Frequenzen sind gleich.

    Bei FM wird je ein Clock und Datenbit uebertragen. Bei MFM werden Clock und Datenbit zusammen kodiert.

    Die Fluxwechselfrequenz liegt im gleichen Bereich, die Datenbits sind bei FM eben weniger.


    Bei HD und 8" Floppies ist die Datenrate hoeher, da sind auch andere Bandpaesse noeitg.

    Diese Methode hier dürfte aber bei allem möglichen von EPROMs bis Flash-ICs funktionieren, solange sie CMOS sind.

    Da gehe ich auch von aus.

    Aber wie reinhard habe ich auch ueberlegt bei einem EEPROM oder FLASH den /WE Eingang als Versorgungspin zu benutzen.

    Erstens ist der Lesen immer High und man spart sich den 2. Durchgang und das zusammenkopieren der Daten.

    Wie bereist geschrieben habe ich CP/M2 schon von mit der MKC CPUII und der Disk IO Karte booten können. Leider ist dann das "DIR" erfolglos.

    aber ich habe kein Binär-Image

    Wenn du kein Binaerimage hast, wie kannst du denn booten?



    Eine CF-Karte kannst du ganz einfach fuer CP/M formatieren, wenn du alle Sektoren mit 0xE5 vollschreibst. Wenigstens so weit bis das Directory vollstaendig ist. Dafuer nimmst du einen Diskeditor wie HxD (https://mh-nexus.de/de/). Unter Linux wird wohl auch dd funktionieren.


    Oder du hast ja das Diskettenformat im BIOS stehen (DPB). Daraus schreibst du die diskdef Datei fuer die cpmtools. Und dann mkfs.cpm starten.


    Und ich geh mal davon aus, das du die Dateien aus deinem ZIP File uebersetzen kannst. Dann hast du doch CCP, BDOS und BIOS zusammen.

    Das sind jeweils Heads und Sectors fuer 2 unterschiedliche CF-Karten.

    Leider ist dann das "DIR" erfolglos.

    Ich schliesse daraus das meine CF-Karte nicht richtig formatiert ist.

    Wahrscheinlich ist die CF Karte richtig formatiert, aber deine DPB Parameter im BIOS passen nicht dazu.

    Die diskdef Einstellungen kann man eigentlich erarbeiten, wenn man ein Binaerimage hat.


    im Anhang findest du meine Sourcen.

    Hast du den Code geschrieben?

    Es gibt 2 Stellen, die ich seltsam finde.


    HDIDE.MAC, Zeile 303

    Code
        ld    a,d        ; reset write pin
        out    (pio_ctl),a

    Wo nimmst du ploetzlich Register D her?


    HDIDE.MAC, Zeile 271:

    Code
        xor    a        ; set all control pins of
        out    (pio_ctl),a
    ; new
        call    ide_rd_8    ; return value in c
        ld    a,c
        and    080H        ; check if busy flag is off

    Hier willst du bestimmt den Status abfragen.

    ide_rd_8 erwartet die IDE-Adresse in A. Der Status ist aber nicht im Register 0.

    Ausserdem solltst du im Status nicht nur das BUSY testen, sondern auch READY und ERROR.


    Viel Erfolg

    Ich glaub, da kommt schlicht SD&DD sowie SS&DS durcheinander. Die "Double Sided" Disketten wurden auf der zweiten Seite auch überprüft, die "Single Sided" Disketten nicht (bzw. gab es angeblich ganz zu Beginn auch einseitig beschichtete Disketten, aber wohl nur bei 8 Zoll).

    Das kann natuerlich sein.

    Bei einer SS Diskette brauche ich die Rueckseite nicht testen/pruefen.


    Bei 8" Disketten ist bei SS/DS das Indexloch anders.

    DD wurden mit höheren Anforderungen geprüft als SD.

    SD ist FM kodiert.

    DD ist MFM kodiert.

    Die Anforderung, also die Flux-Wechsel, ist bei beiden gleich.


    Zur Erklärung:
    FM sendet pro Datenbit einen Takt und das Bit. Für 125kbit/s habe ich 250kFluxe/s

    Bei MFM werden Takt und Datum zusammengefasst und bei 250kbit/s sind es genauso 250kFluxe/s.


    Also, bis auf HD und hard-sektoriert ist alles gleich.

    Aber das dies auch für den /CLK gilt war mir neu. Würde die /CLK-Leitung des 8251 aber schon gerne mit im Systemtakt belassen, denn hier vermute ich Seiteneffekte durch nicht mehr synchronisierte Zugriffe auf den Chip. Denn /CLK aus IC8a zu entnehmen, würde bedeuten, dass dieser mit dem Steuerbus nicht mehr synchron ist (und dabei noch schneller wäre als der Systemtakt)

    Im Datasheet des 8251 steht ganz klar, das der CLK Eingang nichts mit den Read/Write Zugriffen zu tun hat.



    Bezüglich der Z180-Karte hat diese doch einen einstellbaren Taktteiler der aus Phi erzeugt wird. Passt der für solche Karten nicht?

    Doch, da hast du recht. Und :thumbup: , gut mitgedacht!

    Der CLK aus der 8085-CPU Karte hat 2 MHz, der Teiler auf der Z180 Karte kann "nur" 2n teilen. Bei Oszillatoren, die nicht mit 2MHz * 2n schwingen haben dann auch der CLK-Leitung einen Takt ungleich 2MHz.

    Im aktuellen Fall ist das nicht wichtig. Wenn man die Baudrate aus diesem Takt erzeugt, wie bei der MFA-ProgSerSchnittstelle, hat man ein Problem.

    Also, für deine Karte will ich meine Aussage zurück ziehen.



    die Ansteuerung des 8251 habe ich aus den Original-MFA-Unterlagen 4.10 entnommen

    Ja, ich weiss,die können das auch nicht richtig. ;)

    Aber ein Fehler abschreiben macht es nicht richtig.


    Gilt auch für die Baudratenteiler und die Kondensatoren.

    Der '192/'193 ist ja schon fast synchron, aber nicht der LOAD Eingang.

    Schau dir mal den '161 an, der ist m.W. komplett synchron. Schau ich mir aber ggf. auch noch mal genau an.

    Damit kannst du BorrowOut/CarryOut direkt auf den LOAD Eingang verbinden.


    7497 muss ich mir anschauen.



    Bei der Interrupt-Steuerung macht m.E. nur der Empfang sinn. Denn warum sollte ich einen Interrupt beim Versenden auslösen? In dem Augenblick befinde ich mich in der Regel softwaretechnisch eh in einer Senderoutine, bei der Unterbrechungen vermutlich eher störend wären.

    Bei einem Empfang von Zeichen (z.B. Eingabe über ein Terminal) könnte hier ein anderes Programm unterbrochen werden, um die eingetippten Zeichen einzulesen.

    Der Rx-Intr ist auf jeden Fall interessanter.

    Mit dem Tx-Intr kann man einen Sendebuffer in Software realisieren. Zeichen, die ich senden möchte die UART aber belegt ist, werden in einem Buffer zwischen gespeichert. Wenn das UART-Senderegister frei ist, wird der Intr ausgelöst und ein Zeichen aus dem Buffer in die UART geschickt. ich Das kann Wartezeiten in der Software verkürzen bzw emiminieren. Und ja, auch ein Sendebuffer kann voll werden.

    Ist ein Nice-To-Have. Früher hab ich sowas standartmässig implementiert.



    Weiterhin viel Erfolg.

    Im Vertrag steht Aufbautage: 8. + 9.9.2022, ohne Uhrzeit.

    Da in der Halle auch Firmen sitzen sollte die Uhrzeit kein Problem darstellen.


    Aus der Erfahrung der letzten Jahre reicht meistens 10 Uhr. Da bleibt i.a. genug Zeit. Feierabend ist ja erst wenn alles fertig ist.