Hallo Besucher, der Thread wurde 11k mal aufgerufen und enthält 36 Antworten

letzter Beitrag von Shadowolf am

sd2iec 0.1

  • Wie clone ich mit WinGIT das Repository?


    In der GUI soll man ja angeben, wo das Repository zu finden ist.


    Hier scheint es nicht zu sein: http://snowcat.de/mmc2iec/sd2iec.git/ ??



    Na, mal weiter fummeln....


    ...geht irgendwie nicht. Und da ich in der GUI nur den Pfad angeben soll komme ich wohl nicht dahinter, was der korrekte Pfad denn nun wäre.


    Probleme mit den Tools finde ich immer super eklig, kann das nicht mal so laufen, dass man lediglich auf C-code beschränkte Probleme hat, ohne Compiler-Fehler oder ähnliches?


    Seufz.

  • Zitat

    Originally posted by Shadowolf
    Wie clone ich mit WinGIT das Repository?


    In der GUI soll man ja angeben, wo das Repository zu finden ist.


    Scheint wohl noch ein Bug in der WinGIT-GUI zu sein.


    Zitat

    Hier scheint es nicht zu sein: http://snowcat.de/mmc2iec/sd2iec.git/ ??


    Doch, das ist die Repository-URL. Mit "git clone http://snowcat.de/mmc2iec/sd2iec.git/ c:\sd2iec" funktioniert das Kopieren hier auch.


    Edit: Ach ja, nach dem Clone befindest du dich per Default auf einer Kopie des master-Branches meines Repositories, den ich für Release-Versionen verwende. Um den devel-Branch zu verwenden in dem einige wenige weitere Änderungen enthalten sind ist noch ein "git checkout origin/devel" in c:\sd2iec (oder wo auch immer es liegt) nötig.


    (GIT-Prinzip: Branches sind billig, benutze so viele wie nötig oder mehr)


    Zitat

    Probleme mit den Tools finde ich immer super eklig, kann das nicht mal so laufen, dass man lediglich auf C-code beschränkte Probleme hat, ohne Compiler-Fehler oder ähnliches?


    Einfach Maschinencode direkt via Schalter in den Rechner eingeben, dann sind da keine Tools mehr die Probleme verursachen könnten. ;-)

  • Zitat

    Original von Unseen
    Scheint wohl noch ein Bug in der WinGIT-GUI zu sein.


    Bug ist gut, das scheint überhaupt nicht zu funktionieren.


    Zitat


    Doch, das ist die Repository-URL. Mit "git clone http://snowcat.de/mmc2iec/sd2iec.git/ c:\sd2iec" funktioniert das Kopieren hier auch.


    Okay, das funktioniert in der komischen Shell die mit WinGIT kommt hier auch.
    Blöderweise funktioniert kopieren und einfügen damit überhaupt nicht.
    Ich finde es garnicht komisch, immer wieder den exakt gleichen Text eintippen zu müssen.


    Zitat

    Einfach Maschinencode direkt via Schalter in den Rechner eingeben, dann sind da keine Tools mehr die Probleme verursachen könnten. ;-)


    Naja, das war jetzt etwas sehr übertrieben, oder?


    Wenn die Tools schon nicht funktionieren, wie soll man dann zusammen arbeiten?
    Mache ich jetzt irgendeine kleine Änderung kann ich die momentan schlichtweg nicht zurückgeben.
    Wobei mir auch nicht klar ist, was GIT mit den Änderungen macht, ich habe NULL Erfahrung mit GIT und NULL Erfahrung mit Linux.



    Nun denn, nachdem mir aufgefallen ist, dass im makefile jetzt -Os gesetzt ist und ich das in AVR-Studio auch gesetzt habe, kommt schon mal die gleiche Code- und Daten-Grösse raus für das Compilieren mit AVR-Studio und durch make von der Shell.


    Allerdings, die beiden Kompilate unterscheiden sich immer noch irgendwie.
    Die Checksumme im .bin ist nicht gleich.
    Und wenn ich die vom makefile erzeugte .bin durch crc-gen schubse dann bekomme
    ich nicht die gleiche CRC wie in der veröffentlichten .bin.


    Das kann man erstmal ignorieren. Im Falle von Fehlern wäre es allerdings gut zu wissen, dass es nicht am Compiler oder dessen Aufruf liegt.

  • Zitat

    Originally posted by Shadowolf
    Okay, das funktioniert in der komischen Shell die mit WinGIT kommt hier auch.
    Blöderweise funktioniert kopieren und einfügen damit überhaupt nicht.
    Ich finde es garnicht komisch, immer wieder den exakt gleichen Text eintippen zu müssen.


    Dann nimm doch irgendeine andere... Wenn c:\program files\git\cmd (oder vergleichbar) im Pfad liegt ist git auch in jeder Win32-Shell wie zB cmd.exe aufrufbar.



    Zitat

    Wenn die Tools schon nicht funktionieren, wie soll man dann zusammen arbeiten?
    Mache ich jetzt irgendeine kleine Änderung kann ich die momentan schlichtweg nicht zurückgeben.


    diff?


    Zitat

    Wobei mir auch nicht klar ist, was GIT mit den Änderungen macht, ich habe NULL Erfahrung mit GIT und NULL Erfahrung mit Linux.


    Es speichert sie lokal. Jedes Repository (und git clone erzeugt ein solches im Zielverzeichnis) ist komplett unabhängig von allen anderen. Um Änderungen in ein anderes solches zu übernehmen muss man sie entweder von der Quelle aus mit push schieben (geht via http nicht), vom Ziel aus mit pull oder fetch ziehen oder mit format-patch eine Reihe von patches erstellen und via Mail verschicken (die History bleibt dabei erhalten).


    Mir gefällt dieses Modell weit besser als die Zentralarchitektur von svn, bei der jeder experimentelle und später weggeworfene Branch mit Testimplementationen von Features auf Ewig erhalten bleibt.


    Zitat

    Allerdings, die beiden Kompilate unterscheiden sich immer noch irgendwie.
    Die Checksumme im .bin ist nicht gleich.


    Andersherum gefragt: Warum sollten die identisch sein? IIRC benutze ich hier irgendeine neuere CVS-Version von avr-libc und ein paar Patches sowohl im gcc, gebaut mittels Script aus den avrfreaks-Foren.

  • Ich habe beschlossen, GIT erstmal zu ignorieren, immerhin habe ich so oder so einen Source-Code den ich kompilieren kann und es funktioniert erstmal.


    Das hier kommt (gekürzt) mit meiner "action cartridge plus vers6.0" am C64 wenn ich per F5 eine Datei laden will:


    ---
    M-R fe ff 01
    M-R 01 18 01
    M-W 50 01 22 78 20 8d 01 a9 7a 8d 02 18 20 e9 f5 20 62 01 4c 00 03 a0 00 a9 00 8
    d 00 18 ad 00 18 d0 fb 08 ad 00 18
    M-W 72 01 22 0a 28 4d 00 18 0a 0a 0a ea ea ea 4d 00 18 0a ea ea ea 4d 00 18 99 0
    0 03 c8 d0 dc a9 08 8d 00 18 60 20
    M-E 50 01 02 31 03 2c 54 45 53 54 31 a0
    ---


    Meine "Action Replay Professional 6.0" erzeugt beim Laden das hier:


    ---
    M-R fe ff 01
    M-R 01 18 01
    M-W 50 01 23 78 20 8f 01 a9 7a 8d 02 18 20 e9 f5 20 62 01 4c 00 03 a0 00 a9 00 8
    d 00 18 ad 00 18 d0 fb 08 ad 00 18 0a
    M-W 73 01 23 28 4d 00 18 0a 0a 0a ea ea ea 4d 00 18 0a ea ea ea 4d 00 18 99 00 0
    3 c8 ea ea d0 da a9 08 8d 00 18 60 20
    M-E 50 01 02 31 03 2c 54 45 53 54 31 a0
    ---


    Das ist schonmal ziemlich ähnlich - und recht kurz.


    Mal sehen.


    Memory-Write an 0x0150, 35 Bytes


    $0150 $78 SEI
    $0151 $20 $8f $01 JSR $018f
    $0154 $a9 $7a $8d LDA $7a


    Bäh, das geht so nicht, zum Disassemblieren muss ich mir wohl was anderes suchen...



    Eine Final-Cartridge III habe ich auch noch, die zickt allerdings schon am Ende der Directory Ausgabe:


    ---
    A3f
    A28
    Af0
    LEA3f
    A48
    A60
    T++A48
    Ae0
    C
    ---


    Das Verzeichnis ist komplett gelesen aber der C64 hängt.

  • Zitat

    Originally posted by Shadowolf
    M-E 50 01 02 31 03 2c 54 45 53 54 31 a0


    Das AR6 scheint in dem Kommando den Filenamen zu übergeben, allerdings nur wenn man via % lädt. Mit LOAD"test.prg",8 erhalte ich im M-E nur folgendes:


    ---
    M-E 50 01 02 31 03 2c 4c 4f 41 44 45 52 00 ff a0
    ---


    EXOS v3 sendet übrigens 490 Byte Daten an die Floppy...


    Zitat

    Eine Final-Cartridge III habe ich auch noch, die zickt allerdings schon am Ende der Directory Ausgabe: [...]
    Das Verzeichnis ist komplett gelesen aber der C64 hängt.


    Oh, da war mein mieser Hack wohl wirklich mies. Wird in 0.2 beseitigt sein, temporär sollte es reichen die mit "FIXME: Big Fat Hack" gekennzeichnete Zeile auszukommentieren und gelegentliche "unknown data state"-Meldungen zu ignorieren.

  • Das hier habe ich gerade mit Rosetta erzeugt nachdem ich den Hex-Code in ein .prg übertragen habe:


    ---
    *= $0150
    SEI
    JSR $018D
    LDA #$7A
    STA $1802
    JSR $F5E9
    JSR $0162
    JMP $0300
    LDY #$00
    LDA #$00
    STA $1800
    LDA $1800
    BNE $0169
    PHP
    LDA $1800
    ASL
    PLP
    EOR $1800
    ASL
    ASL
    ASL
    NOP
    NOP
    NOP
    EOR $1800
    ASL
    NOP
    NOP
    NOP
    EOR $1800
    STA $0300,y
    INY
    BNE $0169
    LDA #$08
    STA $1800
    RTS;_______________________________
    JSR $0000
    ---

    Macht das irgendeinen Sinn?
    Scheint mir kaputt zu sein.


    Zitat


    EXOS v3 sendet übrigens 490 Byte Daten an die Floppy...


    Man kann ja klein anfangen und viel Code muss nicht unbedingt viel Sinn ergeben. :)


    Zitat


    temporär sollte es reichen die mit "FIXME: Big Fat Hack" gekennzeichnete Zeile auszukommentieren


    Yep, damit kommt nach dem Dir-Listing der Basic-Prompt zurück.


    Das hier kommt von der Final III bei Load mit F5:


    ---
    M-W 00 04 20 a5 43 85 c1 20 82 05 50 fe b8 ad 01 1c 99 25 00 c8 c0 07 d0 f2 20 56 f5 50 fe b8 ad 01 1c 91 30
    M-W 20 04 20 c8 c0 05 d0 f3 20 97 f4 a2 05 a9 00 55 15 ca d0 fb a8 f0 03 4c 0b f4 e8 b5 12 d5 16 d0 f6 ca 10
    M-W 40 04 20 f7 20 e8 f7 a6 19 e4 43 b0 ea a5 53 9d 0f 06 a5 54 9d fa 05 a9 ff 9d 24 06 c6 c1 d0 a7 a9 01 85
    M-W 60 04 20 c3 a6 09 a5 c2 9d 24 06 e6 c2 bd 0f 06 c5 08 d0 0a bd fa 05 aa e6 c3 d0 ea f0 b9 c9 24 b0 b5 85
    M-W 80 04 20 08 bd fa 05 85 09 20 82 05 c8 50 fe b8 ad 01 1c 91 30 c8 c0 04 d0 f3 a0 00 20 e8 f7 a6 54 e4 43
    M-W a0 04 20 b0 92 bd 24 06 c9 ff f0 dd 86 c0 20 56 f5 50 fe b8 ad 01 1c 91 30 c8 d0 f5 a0 ba 50 fe b8 ad 01
    M-W c0 04 20 1c 99 00 01 c8 d0 f4 20 e8 f7 a5 53 f0 04 a9 00 85 54 85 34 85 c1 a6 c0 bd 24 06 85 53 a9 ff 9d
    M-W e0 04 20 24 06 20 d0 f6 a9 42 85 36 a0 08 8c 00 18 ad 00 18 4a 90 fa a0 00 c6 36 8c 00 18 d0 07 c6 c3 d0
    M-W 00 05 20 85 4c 18 f4 a4 c1 b1 30 4a 4a 4a 85 5c b1 30 29 07 85 5d c8 d0 05 c8 84 31 a0 ba b1 30 0a 26 5d
    M-W 20 05 20 0a 26 5d 4a 4a 4a 85 5a b1 30 4a c8 b1 30 2a 2a 2a 2a 2a 29 1f 85 5b b1 30 29 0f 85 58 c8 b1 30
    M-W 40 05 20 0a 26 58 4a 4a 4a 85 59 b1 30 0a 0a 0a 29 18 85 56 c8 b1 30 2a 2a 2a 2a 29 07 05 56 85 56 b1 30
    M-W 60 05 20 29 1f 85 57 c8 84 c1 a0 08 8c 00 18 b6 55 bd c2 05 8d 00 18 bd da 05 b6 54 8d 00 18 88 d0 ef 4c
    M-W 80 05 20 f6 04 a2 03 86 31 e8 d0 03 4c 0b f4 20 56 f5 50 fe b8 ad 01 1c c5 24 d0 ed 60 a2 00 8e 00 18 86
    M-W a0 05 20 c2 a5 19 85 09 a5 18 85 08 a9 e0 85 01 a5 01 30 fc c9 02 b0 0c a5 08 d0 f0 a9 02 8d 00 18 4c 94
    M-W c0 05 20 c1 e8 a0 0a 8c 00 18 4c 0a e6 00 0a 0a 02 00 0a 0a 02 00 00 08 00 00 00 08 00 00 02 08 00 00 02
    M-W e0 05 20 08 00 00 08 0a 0a 00 00 02 02 00 00 0a 0a 00 00 02 02 00 08 08 08 00 00 00 00 00 ff ff ff ff ff
    M-E 9a 05
    ---


    Auch eine Menge Holz.
    Und bei der Menge an Daten wundert es mich, dass die Übertragung überhaupt schneller abläuft...

  • Zitat

    Originally posted by Shadowolf
    Macht das irgendeinen Sinn?
    Scheint mir kaputt zu sein.


    nö, könnte Sinn machen :) Offenbar wird nur eine kleine Empfangsroutine per M-W übertragen, der Rest des Fastloaders wird schon über diese Routine übertragen und zwar nach $300.


    Warum keiner der Speeder das M-W Limit umgeht verstehe ich nicht, ich schreibe 256 Bytes am Stück in den Speicher indem ich einfach einen Kanal öffne :)

  • Zitat

    Original von x1541
    nö, könnte Sinn machen :) Offenbar wird nur eine kleine Empfangsroutine per M-W übertragen, der Rest des Fastloaders wird schon über diese Routine übertragen und zwar nach $300.


    Also, ist die erste Action-Cartridge Routine, habe ich vorher nicht erwähnt.


    Woran siehst Du denn, dass überhaupt irgendwas nach $300 übertragen wird?
    Bloss an dem JMP $0300?


    Also müsste nach dem erfolglosen M-E ja wieder ein M-W kommen,
    bzw. was eigenes äquivalentes - bäh!


    Wobei sich mir dann die Frage stellt, wofür der restliche Kram nach dem JMP übertragen wird.

  • Zitat

    Originally posted by Shadowolf
    Woran siehst Du denn, dass überhaupt irgendwas nach $300 übertragen wird?
    Bloss an dem JMP $0300?


    Nein, ich kommentier das mal schnell, auch wenn ich es jetzt nicht so 100% im detail verstehe:


    *= $0150
    SEI ;IRQs aus
    JSR $018D; subroutine, irgendwas am seriellen Bus einstellen
    LDA #$7A
    STA $1802; auch etwas am Bus einstellen
    JSR $F5E9 ; irgenwas im ROM
    JSR $0162 ; Übertragungsroutine
    JMP $0300 ; gerade übertragene Routine anspringen


    $162:
    LDY #$00 ; Zähler auf 0
    LDA #$00
    STA $1800
    $169:
    LDA $1800
    BNE $0169 ; Warteschleife auf ein Handshakesignal vom Bus
    PHP ; was jetzt kommt sieht aus wie eine Byteübertragungsroutine die immer 2 Bits gleichzeitig über den Bus schiebt und wieder zu einem Byte zusammensetzt (weil viermal das Busregister $1800 gelesen wird)
    LDA $1800
    ASL
    PLP
    EOR $1800
    ASL
    ASL
    ASL
    NOP
    NOP
    NOP
    EOR $1800
    ASL
    NOP
    NOP
    NOP
    EOR $1800
    STA $0300,y; empfanges byte in Speicher schreiben
    INY ; Zähler erhöhen
    BNE $0169 ; zum Anfang wenn <>0


    $18d:
    LDA #$08
    STA $1800
    RTS

  • Zitat

    Originally posted by Shadowolf
    Macht das irgendeinen Sinn?
    Scheint mir kaputt zu sein.


    Ja, macht es. Das AR6 lädt seinen Schnellladercode mit einem Schnelltransfercode. =)


    Ich habe gerade mal einen kompletten Ladevorgang mitgeschnitten, man sieht deutlich, dass das konventionell übertragene Codesegment sofort abläuft und erst später eine grössere Pause ist in der der eigentliche Diskettenzugriff erfolgt - noch einen Tick schneller als die Übertragung des Laders.


    Edit: Ich mache definitiv zu viel Kram nebenbei, x1541 hat zwei Postings in der Zeit abgesetzt die ich für meines brauchte...


    Zitat

    Auch eine Menge Holz.
    Und bei der Menge an Daten wundert es mich, dass die Übertragung überhaupt schneller abläuft...


    Die Geschwindigkeit in der sd2iec das abarbeitet ist nicht repräsentativ, da die Daten ja noch über die serielle Schnittstelle ausgegeben werden müssen.


    Wie ich gerade merke verträgt sich sd2iec im Augenblick nicht mit einer 1581 am Bus. Seltsam, da es mit einer 1541 keine Probleme gibt...

  • Zitat

    Originally posted by Unseen
    Wie ich gerade merke verträgt sich sd2iec im Augenblick nicht mit einer 1581 am Bus. Seltsam, da es mit einer 1541 keine Probleme gibt...


    Da habe ich mir mit meinem Debuggingcode selbst in den Fuss geschossen, die 1581 wechselt wohl in den Burstmodus wenn man die SRQ-Leitung mehr oder weniger ständig auf Low hält. Schade, war praktisch um im Logicanalyzer Markierungen zu bekommen wann der Code bestimmte Stellen passiert.


    Zitat

    Originally posted by Shadowwolf
    Jetzt habe ich mal eine Demo geladen, das Ergebnis ist ein 33-Syntax-Error...


    Das ist wohl entweder un unbekanntes Kommando (etwas Code der die seriell ausgibt wirst du ja wohl selbst hinbekommen :-) ) oder Resultat eines Richtig Dämlichen Bugs[tm]: In iec.c fehlt ein "iecflags.eoi_recvd = 0;" vor dem "Slight protocol violation"-Kommentarblock. Letzteres sollte aber nur dann relevant sein wenn die Übertragung des Kommandos durch eine Aktivierung der ATN-Leitung unterbrochen wird.


    Wenn ich mir den Kram so anschaue frage ich mich wozu Commodore überhaupt UNLISTEN/UNTALK verwendet - sobald die ATN-Leitung aktiv wird setzt das Laufwerk die Flags dafür eh zurück. Ändern werde ich es sicherheitshalber trotzdem nicht.

  • Noch einen? :)



    Das ist vielleicht ein wenig sinnlos da der Autor noch zu erreichen ist.
    Das ist DTV_Speed_Load.
    Zumindest was so bis zu dem "M-E 36 07" übertragen wird.
    Mein 6502 Assembler ist etwas eingerostet, vor allem im Bezug auf die Adressierungs-Arten.
    Aber der JMP $04AF lässt mich vermuten, dass das wiederrum 2-stufig ist?


    Übertragen wird das mit drei M-W's.

  • Ist für mich jetzt auch schon zu spät, aber ja, das ist eine Empfangsroutine die irgendwas in den Puffer schreibt und dann startet. Von wo bis wo da was empfangen wird erschliesst sich mit aber gerade auch nicht :zzz:


    Gute Nacht :)

  • Wenn man das auch falsch abtippt...



    Startadresse für den zu schreibenden Puffer ist demnach $0300.
    Da wird also auch eine Menge Code übertragen.


    Was machen die bloss alle?


    Wenigstens die IEC-Übertragung kann nicht so viel sein.
    Der Rest ist wahrscheinlich sowieso nur Code der dazu dient,
    die Daten schneller von der Disk zu lesen -> Überflüssig.