Fw: Fw: Suche Linux-Anschluss im Raum Bi-Sennestadt

Pfeiffer familie_pfeiffer at arcor.de
Wed Apr 25 06:45:49 CEST 2007


Moin ...


> Sicher. Hmmm, wo ist denn mein M68k Assembler Buch?
> Der M68K hatte nur MMIO, oder? Naja, kein io-bridging notwendig.
> Und einen gesegneten Interupt-Mechanissmuss, den muesstet ihr in eurem
> FPGA emulieren und dann einen PCI-Interrupt erzeugen.
MMIO ist doch was feines. Mit dem Interrupt liegst du richtig.

>>>> Der Adressbereich wird 16MB betragen und sollte ab Adresse $00000000 
>>>> bis
>>>> $010000000 gemapped werden.
>> Uhps ... eine Null zuviel, beim programmieren wieder tödlich.
>>
> Oeh, rechne, rechne, koennt das dann passen?

$ x1xx.xxxx statt $ x1xx.xxxx0 ;-)

>> Ok, das liesse sich sicherlich auch über Offsets innerhalb des Emulators
>> erledigen.
> Denke das musst du sowieso!
> Gab doch beim M68K den Addressmodus "displacement" wo man negative
> displacements angeben kann? Sehr beliebt in in der short version bei
> bootloadern um mit 0 - x irgendwas da hinten im Addr.-Raum anzusprechen
> (Der Atari hatte da glaub ich das ROM). Naja, langes Raesteln kurzer sinn:
> Du willst ja nicht, das dein emulierter Gast bei 0 - x im Stack deines
> Emulators rauskommt.
> Also muss eh jeder Speicherzugriff gegen die Grenzen getestet werden
> (addr&0x0fff...).

Vor der Null kommt $FFFF..... ja.

> Oehm, in dem Moment wenn der Kernel hochgefahren ist? Der Kernel selbst
> besteht schon aus mehreren Tasks.
Ok, verstehe.
>
>> In meiner Phantasie müsste nur der Emulator gestartet werden,
> Solange ein OS-Unterbau da ist, der etwas mehr als ein loader ist (DOS,
> selbstgeschriebner boot-foo), wird das OS auch ungefragt Rechenzeit
> "stehlen" und wenn es nur zum verwalten der HW (Timerinterupt, etc.) ist.
>
>> dieser
>> würde den Bereich PCI-Bridge als normalen Arbeitsspeicher verwenden. Die
>> Hardware übernimmt den Transfer und das Busprotokoll, könnte also als
>> Arbeitsspeicher mit extrem langen Reaktionszeiten verstanden werden.
>>
> Der Emulator benoetigt ja noch weiteres RAM, was er auch besser lokal
> hat (sonst kauf dir besser fluessigen Stickstoff und ein Satz Quarze,
> mom, mittlerweile gibts ja ColdFire, die machen, suchsuchsuch, 266MHz
> hmmm, erinnert sich noch wer an einen (humoristischen)Artikel ueber den
> naechsten Atari TT mit eingebauter Herdplatte, mitgeliefert wird das
> Buch "Cooking with the TT"), er wuerde nur die Zugriffe in/auf den Amiga
> ausgeloesst durch entsprechende M68K Befehle dorthin umleiten.
Für die x86-Hardware gibt es den Speicher ja schon geschenkt. Sollte also 
kein Problem sein dort 256/512MB zu spendieren. Der Kernel und der Emulator 
sollten vielleicht einen Bedarf von ca. 16MB haben.
>
>>> Den Emulator in den Kernel? Uhhh...
>>> Hmmm...
>>> Echte Treiber fuer die devices schreiben? Mom, ne, der Gast im Emulator
>>> soll sie ja benutzen, Doppelemulation ist doof.
>>> RT-Linux? Interruptweiterleitung in den Emulator mit RT-Tasks...
>> Auf Heise stand letztens was zu einem RT-Patch mit 50ns Rekationszeit.
>> Aber wozu RT? Da müsstest du mich mal aufklären, das Amiga-System wartet
>> in der Regel auf die CPU.
>>
>
> Der Kernel wartet aber nicht auf deinen Emulator.
>
> Warum nun Echtzeit? So etwas wie z.B. den V-Blanc interrupt (OK, falls
> der Amiga sowas hatte) einfach an einen nicht RT-Emulator weiter zu
> geben ist sinnlos. Der Kernel koennte auf die Idee kommen, deinen
> Emulator einfach mal 100ms an die Seite zu legen, um sich seiner meinung
> wichtigeren Dingen zu widmen. Nur Echtzeit garantiert dir ein Interuppt
> aehnliches Verhalten, und du willst ja nicht, das deine Soundausgabe
> stockt. Oder du verzichtest auf ein Betriebsystem.
>
> Ich hatte mir das so gedacht:
> Deine Amiga-Bridge kann den M68K-Interupt-Zyklus emulieren und loest
> darauf einen PCI-Interupt aus.
> Dein Linuxtreiber hat diesen Interupt registriert.
> Der Emulator hat zwei Tasks, einen normalen, der "stumpf" M68K Befehl um
> Befehl verarbeitet.
> Der Interupthandler deines Treibers sichert die informationen aus dem
> M68K-IACK-Zyklus weg und "stoesst" den zweiten Emulator-Task an, einen
> RT-Task (den x86-interupt verlassend).
> Dieser stopt den ersten Task, emuliert mit RT-Prioritaet nun den
> "dazugehoerigen" M68K Interrupt-vector, wenn er damit fertig ist wird
> die normale emulation weitergefuehrt (Wie auf der echten CPU).
Du steckst voll im Thema ... ich glaube dass du die Idee schon voll 
verstanden hast.
>
> Nebenbei bist du mit x86 der neueren Generation eh aufgeschmissen, dank 
> SMI.
Können die nicht kompatibel gefahren werden? OK, liegt die Hälfte oder mehr 
ungenutzt rum.

>
> @JBG: Hmmm, ist wirklich ne interessante Frage wie schnell man wohl
> M68K-Befehle emulieren kann. Aber ich denke schon, das man mit den
> modernen GHz-Boliden die 50-66 MHz der letzten 68060 topen kann.

Wenn du mal WinUAE antestest, wirst du ein vielfaches gegenüber dem 68060 
sehen. Eine 1GHz x86 CPU bring es ca. auf die 5-fache Leistung. Und das mit 
Windows drunter.

Gruß
Andre 




More information about the Linux mailing list