Hallo Besucher, der Thread wurde 19k mal aufgerufen und enthält 123 Antworten

letzter Beitrag von Unseen am

sd2iec auf petSD portiert

  • Das petSD läuft momentan auf einem selbstgestricktem Entwicklerboard, das man so nicht 1:1 fertigen lassen kann. Da ist erst noch etwas Arbeit an der Hardware und somit neben Geld auch Zeit vonnöten.
    Ich werde das petSD aber nach meinen Erfahrungen mit dem XS-1541, dem easyflash und dem VC20 Final Expansion nicht selbst vertreiben - vielleicht ist das etwas für Jim Brain oder Donald.

  • Zwingend: AVR 1284p (die Firmware würde aber momentan auch in einen 644 passen), SD-Slot, rot-grün-bi-color-LED


    optional: 75160/75161 IEEE Bustreiber
    optional: PCF8583 Echtzeituhr (batteriegepuffert)
    optional: seriell-USB-Interface


    Für letzteres habe ich derzeit wie beim XS-1541 ein FT232RL verwendet, der leider nur im SMD-Gehäuse verfügbar ist. Mir ist da aber eine Idee gekommen, wie man nicht nur ein bastelfreundliches DIP-Gehäuse verwendet, sondern dazu noch... mehr wird noch nicht verraten.

  • Hast du das ATN Problem per Interrupt in den Griff bekommen? Was hast du für Antwortzeiten? Wenn du auch nur selten über 5µs bist, dann funktioniert es nicht immer. Richtig sauber würde das nur mit ein paar Gatter funktionieren, wie bei den IEEE Floppys.

  • Momentan habe ich nichts, was ich eindeutig als ATN-Problem identifizieren kann.


    caT zickt ab und an und bricht die Ausgabe vorzeitig ab, load"$",8 bzw. @$ der Wedge arbeiten aber absolut zuverlässig und zudem noch deutlich schneller. caT arbeitet viel auf dem Bus und fällt der Floppy ständig in's Wort, ist von daher langsamer.


    Ich habe aber alle benötigten ICs hier, um einen Hardware-ATN-Acknowlede zu bauen und kann ja mal gucken, ob das was ändert.


    Die genaue Antwortzeit lässt sich nicht ermitteln, da sie davon abhängig ist, ob z.Zt. ein anderer Interrupt (wie z.B. timer) verarbeitet wird oder nicht. Es gibt aber noch viel Luft, den software-acknowledge zu optimieren, da ich derzeit den pin change interrupt verwende (der immer ausgelöst wird, wenn sich der Zustand am Pin ändert) und daher erst prüfen muss, ob ATN low ist. Ich werde das noch auf EXTINT ändern, wo ich das so konfigurieren kann, dass der interrupt nur bei der fallenden Flanke von ATN ausgelöst wird.
    Die Interrupt-Routine ist derzeit in C und sichert erst einmal alle Register, in Assembler wäre eine deutlich schnellere Routine möglich, die auf das unnötige Sichern aller Register verzichtet und möglichst schnell NRFD/NDAC auf low legt.


    Laut meiner Literatur erwartet der PET das Acknowledge binnen 14 uS, was bei einer fast 18 MIPS-Maschine doch recht lang ist.

  • Laut meiner Literatur erwartet der PET das Acknowledge binnen 14 uS, was bei einer fast 18 MIPS-Maschine doch recht lang ist.


    Mag sein, das gilt für einen langsamen 6502 Controller, bzw. den langsamen Kernel Routinen. Es wäre aber schön, wenn ein anderer IEEE Controller (zb. eine PC Karte) auch funktionieren würde.



    Richtig gelöst ist es mit einer Hardware, die NRFD low zieht sobald ATN low geht. Ein eigener IO (NRFD-O) kann die Sperre dann wieder lösen (bzw. invertieren). Die 4040 und die 8050 machen das auch mit NDAC, was aber eigentlich unnötig ist.

  • Mag sein, das gilt für einen langsamen 6502 Controller, bzw. den langsamen Kernel Routinen. Es wäre aber schön, wenn ein anderer IEEE Controller (zb. eine PC Karte) auch funktionieren würde.


    Du möchtest mit einem PC mit IEEE-Controller-Karte auf ein über IEEE-488-Bus angeschlossenes SD-Karteninterface zugreifen? Ich würde Dir lieber zu einem über USB angeschlossenen Kartenleser für fünf Euros raten.

  • Ne aber ich möchte mit einem IEEE-488 slave die IEEE-488 Normen möglichst gut einhalten.


    Das soll auch sicher funktionieren wenn grad ein SPI Transfer von der SD Karte und/oder ein Timer Interrupt läuft.



    Nicht so wie die Commodore Festplatten, wo man 2€ für ein paar Gatter gespart hat, und beim 8032 das Timeout mit dem POKE ausschalten muss, damit nicht immer zwischendurch das "device not present error" kommt ...

  • Hallo Mitstreiter,
    ich habe 1987 im Rahmen meiner Diplomarbeit eine normkonforme IEEE488 (DIN-IEC 66.22 / 625) für ein 6502 System entwickelt und nach einigen Versuchen mit einer Softwarelösung über die üblichen I/O Bausteine (MOS6522...) eingesehen, dass einige Forderungen der Norm ohne zusätzliche Hardware nicht zu erfüllen sind. Ich habe damals den GPIB Controller uP7210 eingesetzt.


    Die Diskussion über die exakte Normeinhaltung ist aber eher akademisch. Commodore hat Gerätefunktionen wie z.B. den 64ms Timeout mit Schnittstellenfunktionen vermisch - das Ganze sollte halt irgendwie funktionieren.


    Der 64ms Timeout hat übrigens überhaupt nix mit der Norm zu tun, normkonforme Schnittstellenfunktionen warten auch auf extrem langsame Listener/Talker ohne abzubrechen.


    &nbsp; <br><blockquote username="Diddl" linkhref="'index.php?page=Thread&amp;postID=520554#post520554'">Ne aber ich möchte mit einem IEEE-488 slave die IEEE-488 Normen möglichst gut einhalten.<br><br>Das soll auch sicher funktionieren wenn grad ein SPI Transfer von der SD Karte und/oder ein Timer Interrupt läuft. <br><br><br>Nicht so wie die Commodore Festplatten, wo man 2€ für ein paar Gatter gespart hat, und beim 8032 das Timeout mit dem POKE ausschalten muss, damit nicht immer zwischendurch das "device not present error" kommt ...</blockquote>


    Also ein paar Informationen zum "ATN Problem" :-)


    • Am IEEE488 Bus kann nur ein Controller, nur <b>ein </b>Talker aber <b>mehrere </b>Listener parallel ardessiert sein. In der Regel gibt es aber Geräte, die nicht adressiert sind und sich bei den normalen Datenaustausch am BUS neutral verhalten müssen. Wenn z.B. ein CBM8032 als Listener Daten von einer CBM2031 Floppy empfängt, nimmt ein am Bus angeschlossener, aber nicht adressierter Drucker nicht am Dreidraht-Handshake teil.
    • Das Dreidraht-Handshake ist so konzipiert, dass schnelle Geräte einwandfrei mit sehr langsamen Geräte kommunizieren können. Das Commodore Timeout sorgt nur dafür, dass nicht ewig gewartet wird, wenn sich ein Teilnehmer 'aufgehangen' hat.
    • Wenn der Controller Befehle an die Geräte schicken will, setzt er ATN auf low. Das kann völlig asynchron zu einem gleichzeitig stattfindendem Datenaustausch passieren. Auf ATN = low werden <b>alle Geräte am Bus Listener</b> und dass wiederum muss zuverlässig synchron zu ATN stattfinden. Deshalb sieht die Norm vor, dass alle Geräte als Reaktion auf ATN=low das Listerner Handshake initialisieren und innerhalb von <b>200ns NRFD und NDAC ebenfalls auf low</b> bringen.
    • 200ns is so kurz, dass es unmöglich ist, dass ein sehr schneller Listener schon Daten von Controller abholt, während langsame Listener noch nicht zum Handshake bereit sind. 200ns sind aber mit Programmierung auf einem MCU nicht einzuhalten. Das geht nur z.B. mit Gattern wie z.B. bei der CBM2031, einem speziellen IEEE488 Buscontroller (z.B. uP7210) etc.</li><li>Auch professionelle USB-IEEE488 Devices wie z.B. der Prologix USB-GPIB Controller halten das nicht ein.

    Grosse Frage!! Ist das in der Praxis überhaupt von Bedeutung?

    • Nein, solange alle Geräte NRFD und NDAC auf low bringen, <b>bevor </b>der schnellste Listener sein NRFD wieder auf high setzt und Empfangsbeteitschaft zu signalisieren, passiert garnichts. Nach meiner Erfahrung dauert das i.d.R. mehrere 100us. D.h. wenn ein Gerät auf ATN=low innerhalb von 2-5 us antwortet ist erfahrungsgemäß noch alles o.k.Besonders in der Commodorewelt.
    • Unten seht ihr, dass eine CBM2031 ungefähr 540us benötigt um NRFD wieder auf high zu setzen.

    print_ds$_CBM2031.jpg

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Aus dem Buch 'PET and the IEEE488 Bus(GPIB)' geklaut:
    CBM_is_Talker.jpg
    Da ist die kritische Stelle an der der CBM prüft ob NRFD und NDAC gleichzeitig high sind. Wenn ja, ist per Def kein Gerät am Bus und es gibt einen Fehler [ST=-128]. Wenn der CBM Controller ist, kommt er irgendwann an dieser Abfrage an und wg. ATN=low müssen ja alle Geräte innerhalb von 200ns NRFD und NDAC auf low gesetzt haben.


    Ich weiß nicht, ob es noch eine Commodore eigene Zeitkonstante gibt, gegen die die Zeit zwischen ATN=low und NRFD und NDAC = low geprüft wird.


    BTW: wenn mehrere Geräte am Bus angeschlossen sind, kann der Controller sowieso nicht prüfen, ob ein einzelnes Gerät langsamer auf ATN=low reagiert. Sobald der schnellste Listener NRFD und NDAC auf low gezogen hat, tritt der Fehlerfall oben nicht mehr auf.

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Ich weiß nicht, ob es noch eine Commodore eigene Zeitkonstante gibt, gegen die die Zeit zwischen ATN=low und NRFD und NDAC = low geprüft wird.


    Die 3000 Maschinen und der PET waren da noch recht kulant.


    Richtig scharf sind die erst ab BASIC 4. Die setzen ATN low und ein paar Maschinen Befehle später lesen die NRFD und NDAC. Wenn kein Gerät am Bus schnell genug war, - dann wird gleich "device not present" error ausgegeben.


    Deshalb konnte man ja manche Harddisk am 8032 nur betreiben, wenn auch eine Floppy angeschlossen und eingeschaltet war. Oder wenn man den POKE gemacht hat um den Timeout auszuschalten.

  • Nochmal aus dem Buch 'PET and the IEEE488 Bus(GPIB)' geklaut:
    CBM_14us_timeout.jpg
    CBM_14us_timeout_II.jpg
    Das ist auch der Part, auf den sich Nils bezieht. Leider enstand dieses Buch noch zu 'vor BASIC 4.0' Zeiten. Ich kann mir aber nicht vorstellen, dass ein BASIC 4.0 Rechner Probleme mit Reaktionszeiten im einstellingen us Bereich hat.
    Allerdings muss man schon darauf achten, dass der ATN Interrupt nicht durch irgendeine andere Aktion blckiert wird wenn man keine zusätzlichen Gatter verwendet.

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Ich hab noch ein anderes Problem festgestellt.N ständig aktiv ist. Meine standardkonforme, so nehme ich an, IEEE488 Karte von NI macht das so, und sendet somit die CBM Floppy in eine Endlossschleife, in der sie auf nix mehr reagieren kann und nichts mehr arbeitet. Ich hab das so gelöst, dass ich die NI Karte "zu Fuss" programmiere, und ATN zurücknehme, wenn die Floppy einen Befehl erhalten hat.

  • Ich hab noch ein anderes Problem festgestellt.N ständig aktiv ist. Meine standardkonforme, so nehme ich an, IEEE488 Karte von NI macht das so, und sendet somit die CBM Floppy in eine Endlossschleife, in der sie auf nix mehr reagieren kann und nichts mehr arbeitet. Ich hab das so gelöst, dass ich die NI Karte "zu Fuss" programmiere, und ATN zurücknehme, wenn die Floppy einen Befehl erhalten hat.

    Hallo Nicolas,
    irgendwie ist in Deinem Text 'was verlorengegangen. Ist ATN ständig aktiv=low??
    ATN wird vom Controller nur während der Befehlsübertragung auf low gesetzt. In dieser Phase ist nur der Controller Talker und alle anderen Geräte sind Listener. Zur normalen Datenübertragung muß ATN high sein

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Ja das meinte ich. Die NI Karte macht das so, das funktioniert mit anderen Geräten einwandfrei (Oszilloskope usw.) aber die Commodore Geräte machen dann gar nix. Die arbeiten ja nur wenn ATN inaktiv (high) ist. Ob das Standard ist oder nicht weiss ich nicht. Es gibt ja bei diesen "modernen" Geräten auch noch erweiterte Protokolle um Multi-Controller und Hi Speed usw. zu handeln, da fehlen den CBM Geräten auch die Signalleitungen teilweise dazu.


  • Die 3000 Maschinen und der PET waren da noch recht kulant.


    Richtig scharf sind die erst ab BASIC 4. Die setzen ATN low und ein paar Maschinen Befehle später lesen die NRFD und NDAC. Wenn kein Gerät am Bus schnell genug war, - dann wird gleich "device not present" error ausgegeben.


    Deshalb konnte man ja manche Harddisk am 8032 nur betreiben, wenn auch eine Floppy angeschlossen und eingeschaltet war. Oder wenn man den POKE gemacht hat um den Timeout auszuschalten.

    Im BASIC 4.0 werden 10 Takte benötigt von ATN=low bis zum Einlesen des Ports $E840 zur Prüfung von NRFD und NDAC.
    Das sind bei einer 1MHz 6502 10us.


    ;#####################################################
    ;# ATN auf low
    ;#####################################################
    F0FF LDA $E840 ; VIA CHIP
    F102 BPL $F0FF
    F104 AND #$FB
    F106 STA $E840 ; <= hier ist ATN low


    F109 LDA #$3C ; 2 clocks
    F10B STA $E823 ; 4 clocks
    ;
    ;#######################################################
    ;# Prüfen ob NRFD und NDAC high ist -> wenn ja => Fehler
    ;#######################################################
    F10E LDA $E840 ; 4 clocks <= hier wir zur Prüfung geladen
    F111 AND #$41
    F113 CMP #$41
    F115 BEQ $F16C ; - Status #80 - device not present


    Ich habe leider nur das ROM Listing von Zimmer - evtl. habe ich nochwas übersehen :whistling:

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Nils hat Recht, es geht eigentlich ganz gut ohne externe Hardware auf meinem CBM-8296, ohne dass ich jetzt sehr exzessiv getestet habe. Gestern war es regnerisch, da habe ich mal mein SD2IEEE fertig implementiert auf einem bestehenden Teensy++ Zoomfloppy. Aber garantieren würde ich es nicht wollen, dass es in jedem Falle tadellos geht.


    Der ATN hängt direkt am Interrupt, D82 Support ist aber leider noch ausstehend.



    Teensy als SD2IEC / µIEC (oder wahlweise als Zoomfloppy):



    Teensy als SD2IEEE / µIEEE (oder wahlweise als Zoomfloppy):