x86 - mit Aussenwelt kommunizieren?

Gast #254579
Lesenswert?

Hi Leute!
Ich hab mal ne kurze Frage..
und zwar: ich will mir nen kleinen Gameboy basteln, will aber keinen
Mikrocontroller verwenden sondern ne richtige CPU (unter richtige CPU
versteh 8086 ähnliche Prozis, mit externem RAM, Programmspeicher etc.).

Fragt mich nicht warum ich das will ^^ vermutlich will ich das ganze
nur noch nen Stück "low leveler" machen, weiß ich aber selber nicht
so genau :P
Aufjedenfall hab ich mich jetzt gefragt wie ich mit so einer CPU "mit
der Außenwelt" kommunizieren kann? Bei den AVRs kann ich ja jeden Pin
einzeln ansprechen, Spannung draufgeben und so, aber mit ner CPU? Da
kann ich ja dann nur über den Daten- und Adressbus kommunizieren,
oder?
Und dann hat mich noch die Existenz der Mnemonics in und out im x86
Befehlssatz irritiert, da war dann doch die Rede von Ports!

Achso *laut überleg*arbeitet dann der Adressbus mit den Ports zusammen?
verwirrt bin

Naja.. ich hoffe mal ihr habt verstanden was ich will und könnt mir
eventuell sogar helfen ^^
Mit freundlichen Grüßen,
André
#254580
Lesenswert?

Man kann auch an einen AVR externes RAM ranpappen und einen
Programmspeicher hat er auch. Gut, externer Programmspeicher gibts bei
den AVRs nicht so wirklich, aber dafür gibts ja genügend andere MCs die
das können.

Externe I/O kann man z.B. einfach in den Adressraum der CPU einblenden,
z.B. indem man einen Latch an die Datenleitungen anschließt und das
Chipselect über Logik so ansteuert, daß es nur bei einer bestimmten
Adresse angesteuert wird.

Wenn ich mich recht erinnere, dann hat man bei x86 für die Ports
einfach ein weiteres Pin, womit man programmtechnisch einen zweiten
Adressraum hat und elektronisch die Adress- und Datenleitungen doppelt
benutzen kann.

Markus
Gast #254581
Lesenswert?

Hi

In den "Ur"-PCs waren z.B. PIOs (8255) zur prallelen Ausgabe
eingebaut (ursprünglich für den 8080 entwickelt). Als serielle
Schnittstelle könnten TL 16C550 (Reichelt) gehen. Du kannst ja auch
versuchen ,dir ein paar alte Steckkarten mit ISA-Bus zu besorgen.

MfG HG
Gast #254582
Lesenswert?

An was für eine x86 hast Du da gedacht? Kategorie 186 - kein Problem,
aber wahrscheinlich etwas unspannend. Alles ab spätestens Pentium wird
dir freilich ne lange Nase drehen. Aus beliebig vielen Gründen, einer
davon ist die Tatsache dass Du diese Frage stellt.
Gast #254583
Lesenswert?

@markus
aaah, wie ich gedacht hab.
die ports und und der adressbus bilden sozusagen ein array oder?
der port wäre dann der index? dann hätte ich also zugriff auf 65536
adressbusgröße-große bereiche?
und das ist dann auch die einzige möglichkeit mit der aussenwelt zu
kommunizeren?

@A.K
ne is klar ^^ eigentlich gehts mir nur ums grundprinzip.. wenn
überhaupt  wöllte ich aber maxiaml nen 386 nehmen.

@hartmut
danke, aber dann wär ja das "low levelige" dahin :P
Gast #254584
Lesenswert?

Programm/Daten einerseits und I/O andererseits sind zwei getrennte
Adressräume. 1MB (anno 8088) und 64KB gross. Sind die MRD/MWR Leitungen
aktiv, ist es ein Programm/Datenzugriff, sind IORD/IOWR aktiv, ist es
ein I/O-Zugriff.
Gast #254586
Lesenswert?

Es gab da mal vor Urzeiten ein Buch, mit einer Platine drin, für ein
x86-Derivat. Erschien im Markt-und-Technik-Verlag. Die verwendete CPU
war eine Weiterentwicklung, mit einigen eingebauten Sachen, die
normalerweise extern dazugebaut werden mussten.

Übrigens, es gibt noch heute von Intel, Cyrix, IBM etc. 386er-Derivate,
mit On-Board-Sachen. Sind sozusagen uCs. Die Teile haben sogar Speicher
drin etc. Einfach mal bei Intel schauen. "INTEL 386EX".

Nur so, als kleine Randinfo.
Stephan.
Gast #254588
Lesenswert?

oh, sry..

also ich hab mir das so vorgestellt:
über die ports kann ich nochmal das ziel des adressbuses einstellen.
port1 führt den adressbus zu controllerX, port2 zu controllerY.
so dass ich dann 2^16=655536 (soviel ports gibts) verschiedene geräte
mit dem adressbus ansprechen kann.

ah und danke @stephan, werd mich mal schlau machen :)
Gast #254591
Lesenswert?

Und die Unterscheidung in Port oder Memory-Zugriff brauchst Du je nach
Situation auch nicht, da Du die Hardware auch Memory-Mapped einbinden
kannst.

Aber wie weiter oben geschrieben, wenn Du solche Fragen stellst wird es
nicht ganz einfach werden so etwas zu entwickeln...
Gast #254592
Lesenswert?

wie schon einige erwähnt haben, gibt es zwei Möglichkeiten IO-Mapped mit
den x86-Befehlen INP bzw. OUTP, welche dan die speziellen Pins (s.
Spezifikation x86 jeweils..) benutzen oder
MemoryMapped mit den bekannten MOVXYZ-Befehlen welche wiederum andere
physikalische Pins benutzen.
--> dies gilt bei den klassischen X86-er. Bei anderen Prozessoren kann
es dennoch spezielle Ports geben die du in deinem Programm benutzen
kanst, denn die sind im Core schon als IO-Mapped Device eingebunden.
Aber es stellt sich die Frage warum das du Dir wirklich antun willst
-welchen Prozessor soll eingesetzt werden?
Leider versteh ich nicht, was du wirklich willst??? Sehr vage.. Gameboy
mit X86er?

Mit näherer Beschreibung und Wünsche kann Dir dieses Forum mehr helfen
als mit dieser sehr allgemeinen Frage. Mit Lesen einschlägiger Bücher
und Spezifikation kann man sich diese selbst beantworten :-)).

gruss hans
Gast #254593
Lesenswert?

neneee, eigentlich will ich ja gar keinen gameboy machen ^^, ich will
mich bloß jetzt mit µC beschäftigen und habe mir dann gedacht man
könnten nen gameboy auch mit nem "normalen cpu" machen und hab mich
dann gefragt wie das dann halt abläuft, aber wie ich gedacht habe halt
nur über adress und datenbus..
aber wenn ich dich richtig verstanden habe sagst du nun wieder es gibt
doch verschiedene pins für i/o und speicher? habe gedacht die teilen
sich die leitungen?

ach apropos gameboy, hat einer von euch ne ahnung wie ich das
gameboydisplay anspreche? ich habe leider keinen controller auf der
platine gefunden und weiß auch nicht was das für ein lcd ist.. ich habe
zwar schon eine seite gefunden auf der es heißt es wäre ein LH5028 oder
S890623, aber ich glaube das hat sich auf den gameboy color bezogen und
ich habe leider sowieso keine datenblätter darüber gefunden!
Gast #254594
Lesenswert?

@Andre'
schau dir doch einfach mal die Spezifikation eines x86-Proz. durch --
da wirste die Anwort hinsichtlich den Pins bestimmt finden, es sind
Pins die geteilt und Pins die für die eine oder andere Variante
verwendet werden. Es ist mühsam diese Tatsachen über dieses Forum zu
diskutieren....wenn's dich wirklich interessiert zieh bei Intel die
Specs runter :-)).
gruss hans
Gast #254595
Lesenswert?

das ding über meinem e gibts nebem sz, vielleicht brauchsts ja nochmal
:p

aber ok, mach ich ^^
müsste die noch rumliegen haben hab mir die mal schicken lassen wegem
instruction-set

gut aufjedenfall mal danke für eure bemühungen!
andré
Gast #254598
Lesenswert?

Ich würde einen ARM microcontroller nehmen anstatt so eine alte CPU.

Vorteile sind ganz klar die geschwindigkeit (bis zu 200 mips und mehr -
sollte für einen gameboy reichen ;)) und die hardware wie zB usb.

Ich würde einen kleinen USB bootloader machen mit dem man, wenn der
handheld mit den PC verbunden ist ein neues spiel laden kann (dazu
reicht u.U. sogar schon der interne speicher aus, ansonsten verbindet
man einen externen über den speicher bus).

Dann hast du das problem mit den speicher nicht, denn irgendwie musst
du den speicher deines handhelds ja auch beschreiben - entweder über
einen eeprom writer, dann musst du den speicher immer wieder aus den
sockel nehmen oder über speicherkarten, dann müsstest du aber auch ein
kleines schreibgerät haben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren