BIOS Auslesen bei CP/M Maschine

  • Hallo!


    Ich habe bei meiner Sage das Bios mit einem Eprom-Brenner ausgelesen zur Archivierung.


    Geht sowas auch direkt von der Maschine aus, ohne Entfernen des Eproms?


    Ich vermute, auf diesem Weg erzeuge ich dann 1 File pro Maschine, obwohl 2 Eproms auf dem Board vorhanden sind.


    Im Netz habe ich ein paar Bios-Versionen als *.hex Dateien gefunden (Ein File für 2 Eproms). Wenn ich das Auslesen mit
    dem Eprom-Brenner vollziehe, habe ich naturgemäß 2 Files, ein "Even" und ein "Odd".


    Gibt es eine Möglichkeit, die beiden Varianten ineinander zu überführen?


    Danke
    Stephan

  • Unter Linux / Unix mit cat verknüpfen bzw. mit head und tail wieder zerteilen. Auf dem PC ( WIN ) heißt das entsprechende Kommando meist irgendwas mit "split", und kommt i.a. als Tool zum Verteilen großer Dateien auf Disketten daher, kann aber i.a. auch andere Größen als 1.44MB/720KB erzeugen.


    cat even.dat odd.dat > alles.dat


    und


    head -c 256K alles.dat > even.dat
    tail -c 256K alles.dat > odd.dat


    klappt aber natürlich so nur für 512K Gesamtgröße.
    head und tail geben Anfang bzw. Ende einer Datei aus, können aber auch "alles ab Position X" ausgeben; mal die info Seiten angucken.

  • Ok... Ich dachte, da sind gerade und ungerade Adressen (wegen odd und even) auf den beiden Eproms. Wenn ich die einfach aneinanderhängen / Teilen kann ist das einfach. Danke!

  • cat even.dat odd.dat > alles.dat


    und


    head -c 256K alles.dat > even.dat
    tail -c 256K alles.dat > odd.dat


    Lass das mal schoen bleiben! Es geht hier um 16bit Daten!
    Wie Toschi schon sagte, sind das ODD und EVEN Daten und nicht 2 EPROMs im Speicher hinter einander!


    Du brauchst ein kleines Programm oder Script um die EVEN und ODD Daten in einem BIN File hinter einander zu legen.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Geht sowas auch direkt von der Maschine aus, ohne Entfernen des Eproms?


    Du kannst einfach den Speicher auslesen und in eine Datei schreiben.
    Ueberleg aber, das evtl. (Teile der) EPROMs durch eine Banking Logik nicht (mehr) erreichbar sind.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • OK. Scheint doch was komplizierter zu sein.


    Dann müßte man aber auch unterscheiden zwischen selbst per Rechner ausgelesenen EPROMs ( wo ja die Reihenfolge stimmen sollte ) und direkt am Brenner ausgelesenen, da ein quasi MemoryDump des EPROMs am Rechner ja schon in richtiger Reihenfolge vorliegen sollte.
    Das Zusammenwürfeln kann man dann aber prinzipiell schon auch mit head/tail machen, nur daß man dann immer das jeweils erste Byte im Wechsel in eine neue Datei schreibt, also mit Option -c1.

  • Hiermit geht es glaub ich auch:


    https://linux.die.net/man/1/srec_examples


    Nur die Sache mit dem Offset habe ich nicht verstanden.


    Splitting an Image


    If you have a 16-bit data bus, but you are using two 8-bit EPROMs to hold your firmware, you can generate the even and odd images by using the -SPlit filter. Assuming your firmware is in the firmware.hex file, use the following:


    srec_cat firmware.hex -split 2 0 -o firmware.even.hex
    srec_cat firmware.hex -split 2 1 -o firmware.odd.hex


    This will result in the two necessary EPROM images. Note that the output addresses are divided by the split multiple, so if your EPROM images are at a particular offset (say 0x10000, in the following example), you need to remove the offset, and then replace it...


    srec_cat firmware.hex \
    -offset -0x10000 -split 2 0 \
    -offset 0x10000 -o firmware.even.hex
    srec_cat firmware.hex \
    -offset -0x10000 -split 2 1 \
    -offset 0x10000 -o firmware.odd.hex

  • Ich hab nun mal Winhex ausprobiert. Das läuft wunderbar ohne Installation aus WINE.


    Hier kann ich 8 Bit (Bytewise) oder 16 bit (Wordwise) auswählen.


    Ich würde sagen, in meinem Fall "Sage/68000er Maschine", 8 Bit, weil ich 2x ein 8 Bit Eprom am 16 Bit Datenbus habe?


    Weiterhin muß ich ein "erstes" und ein "zweites" File auswählen. Zuerst even, dann odd? Oder umgekehrt?


    Danke
    Stephan

  • So, hab mal alle Kombinationen durchprobiert.


    Mit 8Bit Unify und zuerst even, dann odd bekomme ich ein "gutes" Ergebnis. Zumindest kann ich im hexdump hin und wieder Worte lesen. Was bei allen anderen Kombinationen nicht gelingt.

  • zuerst even, dann odd


    Da alle Prozessoren bei Adresse 0 anfangen, kannst du immer mit Even anfangen.
    Nur wenn du zwischen Big- und Little-Endian wechselst musst du aufpassen.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Was ich nicht verstehe - wenn die ROMs schon im Internet in 2 Teilen angeboten werden, so hat das sicherlich seinen Grund.
    Ich denke, das dann auch im Rechner 2 ROMs anstatt einem ROM drin sind, insbesondere wenn eine 68K CPU im System sitzt, und kein 8-Bit Prozessor.

    "Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind."


    ... und schaut auch mal bei meinem Blog vorbei ...

  • OK.
    Also so eine Art Banking. Wahrscheinlich ist ja der Hintergrund dann, daß die 8Bit EPROMs billiger waren, als was Passendes in 16Bit.



    Hier mal noch die Version für die Kommandozeile. Bei langen Files ist das auch ein schöner Streßtest, weil die Files permanent zurückgeschrieben werden.


    Aber: Die verlinkte "fertige" Version dieses SRecord (srec_cat ...) ist schon deutlich fetziger. Offset ist vermutlich einfach nur eine Startadresse, das Tool möchte aber bei 0 beginnend umsortieren, daher muß zunächst auf 0 verschoben werden und nach Abschluß das Offset wieder eingefügt. Nett sind aber auch die Fülloptionen und das Zerteilen in quasi beliebige "Stückchen".

  • Ich wollte jetzt kein neues Thema aufmachen.


    Zu einem Siemens MX300 habe ich einen storagecontroller mit 68000CPU und 2 ROMS. Zu dem 68000 habe ich ja gar keinen Plan.


    Die roma.bin romb.bin zusammenzufügen ist ja nicht schwer, allerdings werden beim 68000 die bits anders angeordnet als beim 8086 und da

    habe ich aktuell keine Möglichkeit.

    Ich möchte gerne sehen ob im ROM ein lesbarer TEXT wie Copyright o.ä. steht.



  • beim 68000 die bits anders angeordnet als beim 8086

    Die Bits sind gleich angeordnet. D0 ist das LSB.

    Z.B. im Gegensatz zum PowerPC, da ist das D0 das MSB.


    Beim 68k sind die Bytes anders als beim 80x86.

    Bei Wort-Zugriffen liegt beim 68k das hoeherwertigen Byte auf der geraden Adresse, beim 80x86 das niederwertige Byte.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Die roma.bin romb.bin zusammenzufügen ist ja nicht schwer,

    Stimmt! :-)


    Die gemergte Datei (ich denke in der richtigen Reihenfolge) und das Programm fuers naechste mal.

    Files

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)