Forum: Mikrocontroller und Digitale Elektronik x86 - mit Aussenwelt kommunizieren?


von André Freitag (Gast)


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é

von Markus K. (markus-)


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

von Hartmut Gröger (Gast)


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

von A.K. (Gast)


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.

von André Freitag (Gast)


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

von A.K. (Gast)


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.

von André Freitag (Gast)


Lesenswert?

ok dass das getrennte adressräume ist war mir auch klar ^^
aber alles läuft über den selben adress und datenbus? und die
überlegung mit den ports trifft doch so ungefähr zu oder?

von Stephan (Gast)


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.

von A.K. (Gast)


Lesenswert?

Ich habe deine Anmerkungen über Ports und Arrays und "65536
adressbusgröße-große bereiche" schlicht nicht verstanden.

von André Freitag (Gast)


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 :)

von A.K. (Gast)


Lesenswert?

Ein 16C450/550 UART benötigt einen Block aus 16 Adressen. Du kannst
davon also maximal 4096 Stück anschliessen, 4 Bit vom Adressbus für das
Gerät und 12 Bit für die Auswahl eines der 4096.

von Markus K. (markus-)


Lesenswert?

Du hast nur einen einzigen Adress- und Datenbus für den externen
Speicher und für die I/O. Über MRD/MWR und IORD/IOWR kannst Du
feststellen, was die CPU denn gerade möchte. Es gibt aber keine extra
I/O-Pins wie bei den AVRs.

Und wenn es Low Level sein soll, dann ist wohl immernoch
http://mycpu.mikrocontroller.net/ ungeschlagen.

Markus

von Unbekannter (Gast)


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...

von hans (Gast)


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

von André Freitag (Gast)


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!

von hans (Gast)


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

von André Freitag (Gast)


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é

von Markus K. (markus-)


Lesenswert?

Hier mal die Pinbelegung von einem 8086:
http://www.csee.umbc.edu/~plusquel/310/slides/8086_chipset.html

von André Freitag (Gast)


Lesenswert?

oh sehr gut! sowas hab ich gesucht :)
danke!

von Lupin (Gast)


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.

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
Noch kein Account? Hier anmelden.