Hardware > Emulatoren
AtariX => MagicOnLinux
AndreasKromke:
Bin da gerade auf ein Problem gestoßen, dessen Ursache etwa im Jahr 2005 entstanden ist. Damals habe ich für MagicMacX zwei anscheinend ungültige 68k-Opcodes für die Kommunikation mit dem PPC-Host verwendet. Jetzt wollte ich meinem Disassembler beibringen, die korrekt zu behandeln, ohne aus dem Tritt zu geraten, d.h. den nächsten Opcode zu verschlucken. Und - voilá - mein Disassembler hatte recht, und der von mir verwendete 68k-Emulator Musashi hatte unrecht. Die Opcodes waren scheinbar ungültig. Nämlich doch nicht. Und nun?
Die neue Musashi-Emulator-Version, die ich früher oder später verwende möchte (kann wohl auch Fließkomma) erfordert nicht nur große Umbauten, sondern dekodiert die Befehle cmp2 und chk2 anscheinend auch korrekt. Das sind selten verwendete Befehle im 68020-Befehlssatz.
Wenn ich jetzt alles umbaue auf andere Opcodes, welche Programme laufen dann nicht mehr? Thorstens Netzwerktreiber nutzt den Opcode 0x00c0. Noch jemand? Oder ist das alles? Ich könnte mir andere Opcodes suchen, wenn es noch welche gibt, oder man könnte dahinter immer ein "nop" schreiben. Dann wäre sichergestellt, daß der chk2-Befehl ungültig ist.
Bitgefusel für Insider:
0x00c0 0000 decodiert zu cmp2.b d0,d0
0x00c0 4e71 decodiert zu DC.W $c0; nop
Thorsten Otto:
--- Zitat von: AndreasKromke am Fr 12.12.2025, 15:33:07 ---Bitgefusel für Insider:
0x00c0 0000 decodiert zu cmp2.b d0,d0
0x00c0 4e71 decodiert zu DC.W $c0; nop
--- Ende Zitat ---
Mit welchem Disassembler? $00c0 is kein gültiger opcode, weder für 68000 noch für 68020+, von daher sehe ich da eigentlich kein Problem (data-register direkt, wie oben ausgegeben, ist keine gültige Addressierungs-Art für cmp2) Nur für Coldfire ist das ein gültiger opcode (bitrev.l d0), aber das kann man hier wohl vernachlässigen ;) (Die von den NatFeats verwendeten Opcodes wären für ColdFire ebenfalls gültig).
--- Zitat ---die korrekt zu behandeln, ohne aus dem Tritt zu geraten, d.h. den nächsten Opcode zu verschlucken.
--- Ende Zitat ---
Warum verschlucken? Nach dem Opcode kommt nix mehr was zum Interface gehört, Parameter werden in Registern übergeben??
--- Zitat ---Thorstens Netzwerktreiber nutzt den Opcode 0x00c0.
--- Ende Zitat ---
MVDI und dein HostXFS.s nutzen den ebenfalls.
--- Zitat ---Die neue Musashi-Emulator-Version, die ich früher oder später verwende möchte
--- Ende Zitat ---
In https://github.com/th-otto/AtariX/tree/master/src/AtariX-MT/AtariX hatte ich das schon umgestellt auf 3.4 (soviel ich weiss die letzte Version). Die Umstellung war, wenn ich mich recht erinnere, nicht allzu dramatisch. Fließkomma-Befehle konnte die aber auch noch nicht.
Fliesskomma korrekt zu emulieren ist sowieso so eine Sache. Problem ist daß bei den meisten Compilern double nur 64bit ist, womit sich die 68k-Fließkomma-Werte nicht korrekt darstellen lassen. Und long-double ist nicht überall verfügbar. Selbst wenn, gibt es da kleine aber feine Unterschiede in der externen Darstellung (nicht nur endian-Probleme, 68k speichert die ohne implizites integer-Bit und hat dadurch 1 bit mehr für die Mantisse als z.B. x86).
Edit: oh, sehe gerade, unter https://github.com/kstenerud/Musashi gibt es eine deutlich neuere Version.
AndreasKromke:
--- Zitat von: Thorsten Otto am Fr 12.12.2025, 16:51:59 ---$00c0 is kein gültiger opcode, weder für 68000 noch für 68020+, von daher sehe ich da eigentlich kein Problem (data-register direkt, wie oben ausgegeben, ist keine gültige Addressierungs-Art für cmp2)
--- Ende Zitat ---
Danke! Ich hatte mich dumm und dusselig gesucht nach einer Liste der 68k-Befehle und ihrer Codierung. Ich habe ausschließlich "68000_68010_68020_Primer.pdf" gefunden. Das Dokument ist sehr unübersichtlich, und Deine Information fehlt dort. Kennst ein besseres Dokument im pdf-Format?
PS: Hier ist es hübsch: https://oldwww.nvg.ntnu.no/amiga/MC680x0_Sections/chk2.HTML. Dort steht auch, welche Adressierungsarten erlaubt sind. Und tatsächlich, da ist einiges verboten.
PS/2: Disassembler ist korrigiert, und tatsächlich ergeben sich einige Unterschiede, anhand derer ich sehen kann, daß die Korrektur erfolgreich war.
czietz:
--- Zitat von: AndreasKromke am Sa 13.12.2025, 10:47:23 ---Danke! Ich hatte mich dumm und dusselig gesucht nach einer Liste der 68k-Befehle und ihrer Codierung.
--- Ende Zitat ---
Das PRM kennst Du sicherlich? https://www.nxp.com/docs/en/reference-manual/M68000PRM.pdf
AndreasKromke:
--- Zitat von: czietz am Sa 13.12.2025, 11:07:45 ---
--- Zitat von: AndreasKromke am Sa 13.12.2025, 10:47:23 ---Danke! Ich hatte mich dumm und dusselig gesucht nach einer Liste der 68k-Befehle und ihrer Codierung.
--- Ende Zitat ---
Das PRM kennst Du sicherlich? https://www.nxp.com/docs/en/reference-manual/M68000PRM.pdf
--- Ende Zitat ---
Nee, bei NXP hätte ich zuletzt gesucht. Aber schönes Dokument, da scheint alles Wichtige drinzustehen Danke!
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln