004
29.07.2010, 20:13 Uhr
timetube
|
Zitat: | proof80 postete Meine Frage war eher, wo denn die "hardware-Signale" beim Emulieren 'rauskommen.
Gruß, Wolfram |
Ich befürchte, wenn ich da nun wirklich in Prosa drauf einginge, dass wir ins philosophische abrutschen könnten, oder es gibt eben wieder Krieg )
Lass es mich daher in C++ versuchen:
Um eine CPU zu instaziiren reicht es aus die folgenden Ableitung zu erschaffen (gekürzt): Mann, Frau auch, überschreibt einfach die virtuellen Funktionen, das Interface zur CPU also wie folgt.
Quellcode: | class MyZ80 : public CZ80 { public: MyZ80() { m_stat.memreq=false; m_stat.busack=false; m_stat.m1=false; m_stat.rd=false; m_stat.wr=false; m_stat.ioreq=false; } protected: ... ... struct s_stat { unsigned char memreq:1 ,busack:1 ,m1:1 ,rd:1 ,wr:1 ,ioreq; }m_stat;
virtual void busack(bool stat) { m_stat.busack = stat; } virtual void memreq(bool level) { m_stat.memreq = level;} virtual void ioreq(bool level) { m_stat.ioreq = level;}
virtual void rd(bool x) { m_stat.rd = x;} virtual void wr(bool x) { m_stat.wr = x;} virtual void m1(bool x) { m_stat.m1 = x;}
virtual void halt(bool x) {}
virtual void addr(word Addr) { m_abus = Addr;} virtual void data(byte data) { if(m_stat.memreq && m_stat.wr) ::ram[m_abus] = data; else if( m_stat.ioreq && m_stat.wr) Out( m_abus, data); }
virtual byte data(void) const { if(m_stat.memreq && m_stat.rd) return ::ram[m_abus]; else if( m_stat.ioreq && m_stat.rd) return In(m_abus); return 0xFF; }
};
|
Wie man sehen kann, werden die Zustände der Pins ausgegeben von der Simulation und zwar in der von Zilog für diese CPU (Z80) spezifizierten Reihenfolge. Inklusive Refresch u.s.w.
Eine Mitschnitt dieser Zustandsänderungen ergibt also ein Timing-Diagramm, wie es von Zilog in seinen Manuals für die verschiedenen Zyklen angegeben ist.
Gibt man die Zustandsänderungen nun anstelle sie in irgend welchen Bits zu speichern das System-Environment zu emulieren auf einen 40 poligen Port aus (z.B. Profibus) und hängt an diesem Port ein Kabel mit einem 40 Poligen DIL Sockel, welcher der der Z80 Pinbelegung entspricht, dann kann man möglicherweise mit wenig Aufwand die Z80 eines wirklichen Systems damit von einem PC oder so simulieren lassen. Könnte mir vorstellen das kann bei z.B. Reparaturen oder einfach nur so eine spaßige Sache sein.
Jedenfalls ist es mal was Neues, nicht nur die OpCodes so genau wie möglich zu simulieren sondern als Interface quasi die CPU-PINS (deren Zustände) auch.
j. -- "Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein. |