Ich suche eine Möglichkeit, einen in Textform vorliegenden Assembler-Programmcode (NOP, POP AF) für einen Zilog Z80 unter einem Windows auf einem x86/x64 zu testen. Es sollten die Register und Flags angezeigt werden können und mein Assembler-Programm es sollte mir in irgendeiner Form als Maschinencode (00, F1) ausgeben werde. Schön wäre Einzelschrittmöglichkeit (und Anzeige der Register/Flags dabei). Was brauche ich dafür? Wer kennt etwas?
:
Verschoben durch Moderator
Andi $nachname schrieb: > und mein Assembler-Programm es sollte mir in > irgendeiner Form als Maschinencode (00, F1) ausgeben werde. Dafür brauchst du (vor dem von Winne genannten Emulator) erstmal einen Assembler. Am besten einen, der zu den Pseudo-Ops und Opcodes deines Quelltextes passt. ;-) Wenn ich mich recht erinnere, gab es da (mindestens) zwei verschiedene "Geschmacks- richtungen". p.s.: Ich denke, dass das gar nicht so "Offtopic" ist, sondern irgendwie sowohl der Assembler als auch der Emulator noch ganz gut unter "PC Hard- und Software" passen.
Ich würde die Original Assembler/monitor programme auf dem EMU laufen lassen, dummerweise habe ich noch keinen gefunden der auch auf XP oder höher läuft, habe aber auch nicht richtig gesucht. anders meine 6502 emus die laufen auch unter XP z.B. http://a800win.atari-area.prv.pl/
Jörg Wunsch schrieb: > Dafür brauchst du (vor dem von Winne genannten Emulator) erstmal > einen Assembler. Hallo, bei Zilog kann man eine moderne IDE für den eZ80 herunterladen. Der Befehlssatz ist eine Erweiterung des Z80, man kann also Z80-Assembler damit übersetzen. Einen reinen Softwaresimulator gibt es da aber nicht. http://www.zilog.com/docs/ez80/devtools/fl0023.pdf Gruss Reinhard
Hallo! Hier ist ein günstiger, aber leider nicht kostefreier, Simulator, Assembler, Disassembler und BASIC-Compiler für Z80 erhältlich. Zusätzlich gibt es das noch für 8085, PIC und AVR. http://www.oshonsoft.com/z80.html
Reinhard Kern schrieb: > Jörg Wunsch schrieb: >> Dafür brauchst du (vor dem von Winne genannten Emulator) erstmal >> einen Assembler. > > Hallo, > > bei Zilog kann man eine moderne IDE für den eZ80 herunterladen. Der > Befehlssatz ist eine Erweiterung des Z80, man kann also Z80-Assembler > damit übersetzen. Danke für den Tipp, diese ZDS2 muss ich mir mal genauer anschauen. http://www.zilog.com/index.php?option=com_zcm&task=sdlp&softtype_id=3 Aber vielleicht kann mir mal jemand schon vorab weiterhelfen. Ich will eine Warteschleife bauen, die ich vorab leider nicht testen kann. Ich brauche den Maschinencode dafür: LD A,0A :loop NOP DJNZ loop Also Akku mit #10 laden, einmal nix machen und dann A um eins erniedrigen und solange in die Schleife springen, wie A ungleich 0 ist. In Maschinencode würde das wie folgt aussehen: 3E 0A 00 10 ?? Wer kann mir sagen, was bei ?? stehen muss. Das ist eindeutig bestimmt, da es ein relativer Sprung ist. BTW: Ist ja nun bescheuert, dass das zu PC Hard- & Software verschoben worden ist.
LD A,0A :loop NOP DJNZ A,loop ich denke ehr so: LD B,0Ah loop: djnz loop djnz bezieht sich auf B.
Stephan Henning schrieb: > LD A,0A > :loop NOP > DJNZ A,loop > > oder > > LD a,0Ah > loop: dec a > djnz loop > > wobei ich nicht weis ob DJNZ N,marke bei Z80 konform ist. Ist es nicht. Bei DJNZ LABEL ist klar, dass der Akku gemeint ist, das DJNZ N,marke ist also falsch. Edith: Ich korrigiere, es ist tatsächlich das B-Register, dass bei DJNZ bearbeitet wird. Das ändert aber mal nichts grundsätzliches am relativen Sprung. > Das ist über 20 Jahre her. Variante 2 funktioniert definitiv Variante 2 macht zweimal ein Dekrement von A. Funktioniert zwar, ist aber falsch. Außerdem will ich lediglich die Sprungweite (bzw. den zu kodierenden Wert) wissen.
Andi $nachname schrieb: > Außerdem will ich lediglich die Sprungweite (bzw. den zu kodierenden > Wert) wissen.
1 | INIT20: RTCDEL |
2 | 02E7 06 08 LD B,8 |
3 | 02E9 10 FE DJNZ $ |
D.h. der Sprung auf sich selbst ist 0FEH = -2 (es wird modulo 256 gerechnet), da der Programmzähler nach dem Lesen des Befehls auf 02EBH steht. Für n Bytes weiter zurück entsprechend n weniger, für Sprünge nach vorne n mehr, also positive Zahlen. Gruss Reinhard
1 | % cat djnz.lis |
2 | Z80-Assembler Release 1.1 Page 1 |
3 | Source file: djnz.s |
4 | Title: |
5 | |
6 | LOC OBJECT CODE LINE STMT SOURCE CODE |
7 | 0000 06 0a 1 1 ld b, 10 |
8 | 0002 00 2 2 l1: nop |
9 | 0003 10 fd 3 3 djnz l1 |
Wurde übrigens damit erzeugt: http://download-mirror.savannah.gnu.org/releases/z80asm/ Ja, nix IDE, altmodischer Kommandozeilenassembler. ;-)
Reinhard Kern schrieb: > Andi $nachname schrieb: >> Außerdem will ich lediglich die Sprungweite (bzw. den zu kodierenden >> Wert) wissen. > >
1 | > INIT20: RTCDEL |
2 | > 02E7 06 08 LD B,8 |
3 | > 02E9 10 FE DJNZ $ |
4 | > |
> > D.h. der Sprung auf sich selbst ist 0FEH = -2 (es wird modulo 256 > gerechnet), da der Programmzähler nach dem Lesen des Befehls auf 02EBH > steht. Das heißt während der Befehl abgearbeitet wird ist der Programmcounter schon auf den nächsten Befehl getrimmt. Ich finde das ist ganz schön ineffizient, tut der Prozessor da doch irgendwas, was er vielleicht gar nicht braucht. Na gut, die Chipentwickler werden schon wissen warum man es genau so macht.
Andi $nachname schrieb: > Ich finde das ist ganz schön > ineffizient, tut der Prozessor da doch irgendwas, was er vielleicht gar > nicht braucht. Du denkst viel zu sehr "in Software". Für eine Hardwareaktion ist das Weiterzählen eines Zählers nicht ineffizient, es passiert einfach so, gewissermaßen "nebenbei". Bei einem Sprung muss der PC ohnehin neu geladen werden, da ist es völlig egal, welchen Zustand er davor hatte.
Das ist ein ganz simples Maschinenmodell: Wenn ein Code-Byte gelesen wird, wird der PC autoincrementiert. Der djnz-Befehl sieht dann diesen PC-Wert, wenn er abgearbeitet wird. Das macht die ASM-Programmiererei zumindest in dieser Beziehung sehr einfach.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.