Hallo Besucher, der Thread wurde 6,6k mal aufgerufen und enthält 34 Antworten

letzter Beitrag von GenerationCBM am

Generelles Thema: OS-ROMs mit Eprommer auslesen

  • Danke, hast du ein Tool um die 4 Roms wieder zu einem Guss zu verschränken? Im Hex-Editor sehen die 4 Teile am Ende so aus, als ob sie dort irgendwelche Meldungstexte oder sowas enthalten könnten.
    Wo stünde denn die Versionsnummer ? Wenn du die lokalisieren könntest, das wäre super.

  • Danke, hast du ein Tool um die 4 Roms wieder zu einem Guss zu verschränken?

    Da dauert das Suchen ja länger als das selberschreiben...
    Gezippt ist die Datei immer noch über ein Megabyte groß, daher kann ich sie nicht hier hochladen.

    Wo stünde denn die Versionsnummer ? Wenn du die lokalisieren könntest, das wäre super.

    Es sind diverse Datumsangaben von April 1992 zu finden, damit sollte man die Version herausfinden können.

  • Meine "weapon of choice" ist Standard-C, in Python oder Perl oder wasweißich geht das sicher auch in weniger als zehn Zeilen. Hier hast Du:

  • Das ist ein Versionstext im BIN:
    RISC OS3.10 (30 Apr 1992)


    Das steht mittendrin:
    Help! Help! We are being held prisoner in a software factory!


    Das steht am Ende:



    Mac Bacon: Schönes Programm. Hätte ich in der Tat quick and dirty (auch in C) gemacht.

  • Das steht mittendrin:
    Help! Help! We are being held prisoner in a software factory!

    Das ist wohl original so, habe ich von gehört. Komme jetzt bloß nicht darauf, wie man das Easteregg startet.

    Dieser String ist der Default-Inhalt eines Feldes in einer Fensterdefinition. Im Betrieb bekommt man den meines Wissens nicht zu sehen, da muss man schon absichtlich im ROM-Dateisystem die entsprechende Fensterdefinitionsdatei mit einem Template-Editor öffnen.


    Bei einer späteren Desktop-Version (mit grafischer Hervorhebung) wurde das dann noch geändert zu "We are being held prisoner in a software factory, in 3D!"

  • Mac Bacon: Schönes Programm. Hätte ich in der Tat quick and dirty (auch in C) gemacht.

    Danke für die Blumen. Leider kann das Programm bei unterschiedlich langen Dateien in eine Endlosschleife geraten, daher hier noch schnell die reparierte Version. :whistling:

  • Um mehrere Files zusammenzufügen, gabs doch einen ganz enfachen copy-batch Befehl. Komme jetzt nicht drauf.


    Edit: copy *.bin gesamt.bin

  • Hier geht's nicht um zusammenkopieren (cat), sondern um byte-weise zusammenmischen. Byte 1 aus File 1, Byte 1 aus File 2, Byte 1 aus File 3, Byte 1 aus File 4, Byte 2 aus File 1, Byte 2 aus File 2, usw...



    Wenn ich das mit gather mache, sind im destination file ganz brav alle 0x0a in 0x0d 0x0a erweitert. Das ist ... ungut. Liegt das am Quellcode von gather, oder hab' ich das falsch kompiliert?

  • Ach so, ok. :thumbup:

  • Wenn ich das mit gather mache, sind im destination file ganz brav alle 0x0a in 0x0d 0x0a erweitert. Das ist ... ungut. Liegt das am Quellcode von gather, oder hab' ich das falsch kompiliert?

    Keins von beiden, das (Windows-)Problem liegt außerhalb: Im Quellcode öffne ich die angegebenen Dateien mit dem "Binary"-Flag, damit dieses CRLF-Konvertierungsgedöns nicht stattfindet. Aber als Eingabe bei "scatter" und als Ausgabe bei "gather" benutze ich stdin/stdout und überlasse es dem Benutzer, diese Streams mit "<" bzw. ">" auf Dateien umzuleiten. Diese Umleitungen werden von der Shell eingerichtet, und wenn die das so macht, dass da Konvertierungen stattfinden, ist das natürlich blöd...


    Möglicherweise kann man das mit fcntl() o.ä. zur Programmlaufzeit dann tatsächlich wieder anders einstellen, aber auf die Schnelle hab ich nichts Passendes gefunden (das mag daran liegen, dass Linux-manpages keine Windows-Workarounds beschreiben :D ).


    Was aber auf jeden Fall gehen sollte, ist: In beiden Programmen den fraglichen Stream durch eine explizit angegebene Datei ersetzen.
    In "scatter.c":

    Code
    1. stdin = freopen("INPUTFILE", "rb", stdin);

    In "gather.c":

    Code
    1. stdout = freopen("OUTPUTFILE", "wb", stdout);

    Wenn man die entsprechende Zeile direkt hinter den Variablendeklarationen in main() einfügt, sollte(tm) das Problem gelöst sein - nur ist dann jeweils ein Dateiname hardcoded.


    Um es "schön" zu machen, könnte man Kommandozeilenargumente hinzufügen ("--outfile DINGS" oder so), oder einfach festlegen, dass das erste/letzte Argument die Einzeldatei sein soll - aber irgendwie widerstrebt es mir, sowas nur für Windows einzubauen, wenn ordentliche Kommandozeileninterpreter doch bereits einen passenden Mechanismus mitbringen...