Hallo Besucher, der Thread wurde 1,3k mal aufgerufen und enthält 4 Antworten

letzter Beitrag von syshack am

VICE, binary mem dump

  • Mahlzeit die Herren!


    Das x.te Mal versuche ich mich wieder an dem Binary-Mem Dump, den VICE über den Remote-Monitor anbietet. Die Schnittstelle ans ich ist ja auch halbwegs beschrieben, sogar mit Beispiel.
    Ich mische das beim C64 Studio schön mit normalen Text-Kommandos.


    Ich habe das Problem, dass mein Kommando regelmässig nicht anerkannt wird. VICE erkannt zwar offenbar, dass es ein Binary-Mem-Dump-Request ist, aber meldet mir dann einen Fehler. Im Log von VICE steht dann auch eine sinnvolle Fehlermeldung. Das Gesamtbild passt aber nicht:


    Ich sende


    Debugger>02050100005F0100, 8 bytes


    Laut Beschreibung ist der Request ja
    02 - STX - Kennung für Binary Command
    05 - Länge der Kommando-Daten in Bytes (auch im Beispiel mit 5 vorgegeben)
    01 - Kommando - Mem Dump
    0000 - Start-Adresse
    015F - End-Adresse
    00 - Mem Dump from C64 Memory


    Als Antwort erhalte ich 020000000081, was für


    02 - STX- Binary Command
    00000000 - Länge der Daten gleich Null
    81 - Fehler - ungültiger Mem-Dump-Typ


    steht.


    Im Log steht dann monitor_network binary memdump: Unknown memspace 95. Da geht er ja offenbar auf das 0x5f.
    Nur: Das Binär-Kommando hat er ja erkannt, samt Länge und Kommando-Byte. Wie kann dann ausgerechnet das Dump-Type-Byte daneben liegen?


    Mein erster Ansatz: Ich habe vorher ein Textkommando nicht sauber abgeschlossen, und VICE hat noch 2 Bytes im internen Empfangspuffer. Deshalb habe Ich auch mal mit Rawcap mitgesnifft, Mein letztes Textkommando davor "registers" ist aber sauber mit einem 0x0a abgeschlossen. Da alles ausser dem 0x0a ein ASCII-Zeichen ist, kann eigentlich keins der Bytes ein 0x02 sein.


    Hat da jemand Erfahrung mit diesem Modus?

  • Wäre es Dir evt. möglich, hier oder im "Heute so gecodet" Thread, entsprechende Code-Snippets zu zeigen, wie man den Remote-Debugger abfragt.
    Also nicht nur den Memory Dump, sondern auch das mit dem Source Code Level Debugging.
    Ich kann mich etwas erinnern, als ich es mal angeschaut hatte, dass die Kommunikation über Port 6510 (was für ein Zufall :-) ) abläuft. Läuft das per Webservices Kommunikation ab?

  • WebServices wäre schön. Dann wäre es aufgeräumt.


    Nee, wenn man VICE mit -remotemonitor startet, macht der ein Listen auf einem Port (den 6510). Dort kann man dann alle Kommandos als Text rüberschicken, als ob man sie manuell im Monitor-Fenster eintippert. Mit einem 0x0a als Line-Break.


    Das hat den Vorteil, dass die Kommandos alle schön lesbar sind, aber den Riesen-Nachteil, dass die Rück-Antworten Kraut und Rüben sind; einfach die Ausgaben, die man sonst im Monitor sehen würde. Man erkennt nicht wirklich, wann eine Ausgabe abgeschlossen ist. Nur durch viel Rumprobieren in Erfolgs- und Fehlerfällen habe ich da was zusammengestümpert, so dass ich quasi errate, wieviele Zeilen ich in der Antwort erhalte.
    D.h. manchmal bekommt man eine Zeile ohne Abschluss (den Prompt), manchmal eine, manchmal mehrere Zeilen.


    Du kannst dir das gerne im C64Studio-Code ansehen, das ist alles mehr oder weniger in RemoteDebugger.cs drin. Aber Vorsicht, ist krass hässlich, Män!
    Ich räume da drin gerade etwas auf, im nächsten Release geht der Binary Mem Dump; dann sind die Speicherabfragen deutlich schneller.


    Jetzt müsste nur noch mal jemand rangehen, und die restlichen Kommandos ver-binarisieren. Im Moment gibt es da ja nur Mem-Dump. Wenn das mit den Open-Source-Projekten nicht immer so ein Gewürge wäre, die ans Kompilieren zu kriegen, würde ich mich da glatt mal ransetzen.

  • Du kannst dir das gerne im C64Studio-Code ansehen, das ist alles mehr oder weniger in RemoteDebugger.cs drin. Aber Vorsicht, ist krass hässlich, Män!

    Äh ja, das weiss ich ja, hab's schon mal angeschaut/gesucht vor 1-2 Jahren oder so... deshalb frage ich ja nach Erklärungen :bgdev


    Gut, dann werde ich das Mal mit Fiddler oder TCPMon anschauen/analysieren.