Hi, ich habe mal eine Frage, die mich eher aus Interesse bschäftigt, als
dass ich es zeitnah mal versuchen möchte.
Ich habe in letzter zeit viel mit dem MEGA8 rumgespielt und
programmiert.
Wie ist das bei "echten" Porozessoren, z.B. gängigen Intel / AMD Cpus?
Kann man die auch so leicht wie einen MEGA8 programmieren?
Wenn man sie kauft sind sie offenbar schon ihrer Funktion bewusst, man
muss sie nur noch in ein Mainboard einbauen. Ist das Programm auch
extern draufgespielt worden oder ergibt sich die Funktion einfach anhand
des Aufbaus, der Hardware selber?
Falls man sie auch seperat mit einer Software besipielen muss würde ich
die einfach gerne mal mir ansehen... Gibt es den Quellcode irgendwo?
Die Prozessoren sind "dumm" und haben auch kein Programm.
erst das Mainbaord mit seiner Perepherie und dem Bios machen den
Prozessor funktionsbereit.
die Programme kommen halt aus einem externem speicher (ROM/RAM/HAD...)
Klar lassen sich PC Prozessoren auch einfach programmieren. Das nennt
man dann Programmiersprache + Compiler oder direkt in Assembler. Als
Betriebssystem nutzt man meistens Windows, Linux (oder MacOS). Gibt auch
noch paar andere.
Ne, jetzt mal im Ernst, zwischen nem AVR und einer modernen X86-CPU von
AMD/Intel CPU liegen ein paar Welten. Vorallem bedenk was man alleine an
Peripherie braucht damit der überhaupt was macht ..
Ohne dir zu Nahe treten zu wollen, aber vergiss es (außer natürlich mit
nem fertigen Mainbord/RAM/HDD etc. aber ich denke darauf zielte die
Frage nicht ab)
Na ja, es gibt zumindest die Möglichkeit, ein Microcode-Update
durchzuführen. Damit sind die im Prinzip schon in gewisser Weise
'programmierbar', was das Ausführen der einzelnen Befehle angeht.
Aber das nur am Rande.
Wie bereits geschrieben, werden die CPUs nicht direkt progammiert,
sondern diese sind auf externen Speicher angewiesen, d.h. die verfügen
über einen Adress-/Datenbus und beim Reset des Prozessors beginnt
dieser, an einer definierten Adresse an zu arbeiten.
Das Programmieren (wenn Du denn die Software-Entwicklung meinst) selbst
bietet in der Regel verschiedene Befehlssätze und mit Assembler sieht
das dem eines RISC-Prozessors nur noch zum Teil ähnlich.
Als Anwendungsprogrammierer hat man meistens nicht den vollen Zugriff
auf den Prozessor, da die CPU meist im 'Protected Mode' läuft und ein
Großteil der Speicherverwaltungs- und Task-Switchting-Aufgaben vom
Betriebssystem übernommen wird.
Man kann aber sehr wohl Programme (auch Windows-Programme) komplett in
Assembler verfassen, auch wenn das vermutlich nur selten vorkommt, da
die CPUs doch wirklich einiges an Geschwindigkeit zu bieten haben und
man nicht unbedingt jede Kleinigkeit optimieren muss.
die ticken so ähnlich ... im prinzip, ja...
ungefähr so : stell dir ein modell-auto mit verbrennungsmotor vor, und
einen formel-1 boliden....auch im prinzip : die ticken so
ähnlich
> Na ja, es gibt zumindest die Möglichkeit, ein Microcode-Update> durchzuführen.
Das hat mal gar nix mit dem AVR zu tun, denn ein reiner RISC Prozessor
hat im Normalfall keinen microcode.
Es gibt auf jeden Fall hochintegrierte x86 clones die bereits MMU, PIO,
etc on board haben (teilweise sogar VGA). Früher von Cyrix, IDT, etc.
und auch der AMD Geode und die VIA Eden sind sowas in der Art.
Allerdings wirst die Hardware selbstbau nicht gebacken bekommen. Ich
rechne mal mit 200++ pins...
Alternative wäre ein fertiges VIA board im µATX Format.
LieGrü,
strub
>Es gibt auf jeden Fall hochintegrierte x86 clones die bereits MMU, PIO,
etc on board haben (teilweise sogar VGA).
Welche CPU hat denn eine externe MMU???
Auch der ARM7-Prozessor, mit dem ich gerade arbeite, hat ein Interface,
um eine externe MMU anschließen zu können, wenn man eine braucht. Man
kann ihn aber auch ohne betreiben.
Es ist durchaus nicht so das die Prozessoren nur in PC-Hardware zum
Einsatz kommen. Weil sie dahingehend konstruiert sind, ist das in der
Regel eines der ersten Einsatzgebiete, aber sie kommen genauso z.B. in
Vermittlungsanlagen, Bahntechnik ect. zum Einsatz ganz ohne
Betriebssystem, sondern , ganz ohne PC-Hintergrund. Natürlich sind
Hersteller wie Sie.... oder Alca.... immer etwas hinterher, was die
Generationen betrifft, aber sie benutzen die gleichen prozessoren, die
auch in Deinem PC verbaut sind.
Du kannst das übrigens auch mal probieren. Suche Dir ein altes 286er
oder 386 -Board, und besorge Dir einen Eprom-Simulator, und schon kanns
losgehen. Die Befehlssätze und Register sind noch für ein Einmannprojekt
überschaubar.
Scho interessant, es ging um aktuelle INTEL & AMD Prozessoren und jetzt
wird von MC68../ARM7/286er gesprochen.
Also die genannten PC-Prozessoren würde natürlich auch ohne ein
Betriebssystem funktinieren und könnten natürlich auch Programme von
z.B. einem Flash ausführen. Nur das drumherum ist nicht ganz einfach. Ob
man es Mainbord oder Platine nennt ist egal, irgendwie will der Speicher
angesprochen werden, die Stromversorgung ist auch nicht so ohne etc...
es gibt einige seiten im internet, die sich mit dem ansteuern von 386ern
beschäftigt. mit pinbelegung, beschreibung und was man sonst noch so
benötigt.
nach dieser seite kann man sich auch sein eigenes kleines mainboard
zusammenbasteln. leider weiß ich die seite nicht mehr, 386er sind ja
auch so lahm ;) aber das prinzip eine x86 cpu anzusteuern wird da schon
vermittelt.
@ Storage Scope schade, dass du die Seite nicht findest.
Ok eine "echte" CPU hat keinen internet Raum usw. und ist deswegen nicht
direkt funktionsfähig wie der Mega8. Und er versteht auch glaube ich die
Sprache Assembler nicht direkt da kein Flash drauf ist.
Wenn man sich den Ram, das Bios und und und noch dazudenkt, wie bekommt
man es dann hin, dass z.B. nach dem Einschalten Schrift erscheint. Das
muss doch irgendwo festgelegt sein.
Wie programmiert man denn eine CPU? Geht das z.B. über das BIOS dann
letztendlich doch über einen Assemblercode?
Ich sags mal einfach so:
Ein Mikrocontroller ist eine CPU mit Peripherie und Speicher auf dem
selben Chip. Bei einer reinen CPU muss man das eben extern anschließen,
und klar "verstehen" die Assembler, das wird ja in reine
Maschinensprache übersetzt. Steht eben nur im BIOS zunächst, dies
enthält auch grundlegende Routinen wie Tastaturtreiber, Textgrafik,
Festplattenzugriff.
Da diese Routinen jedoch auf einen recht niedrigen Level arbeiten (sie
müssen ja mit jeder(!) Hardware laufen), werden sie vom Betriebssystem
durch eigene optimierte Routinen "ersetzt". Entweder sind sie parallel
verfügbar oder der Softwareinterrupt, der sie normal aufruft, wird
"umgebogen".
Gruß,
Christian
@jochen
das bios ist das was die CPU am anfang "sieht". das ist so ähnlich wie
beim Mega8 er sieht auch seinen eigenen flash "zuerst"(ok er sieht ihn
nur).
Beschäftige dich mal mit CPUs an sich, das wird dir sicher interesieren.
also mit "von neumann"
http://tech-www.informatik.uni-hamburg.de/applets/baukasten/DA/VNR_Einleitung.html
und "Harvard"
http://de.wikipedia.org/wiki/Harvard-Architektur
Im grundegenommen sind CPUs sehr simpel. kompliziert wird nur das drum
herrum :) und ein paar "unbedeutende" (achtung ironie) optimierungen.
@jochen :
CPUs (Mikrocontroller eingeschlossen) verstehen immer nur ihre jeweilige
Maschinensprache direkt. Für alle Programme, die in menschenlesbaern
Programmiersprachen geschrieben sind (dazu gehört auch Assembler) ist
(mindestens) ein zusätzliches Übersetzungsprogramm nötig.
Das arbeitet entweder so, daß es das Programm vorab in die jeweilige
Maschinensprache übersetzt, dann nennt man es Compiler bzw. Assembler
(z.B. bei C, C++, Pascal, Assembler) oder es nimmt die Umsetzung zur
Laufzeit vor, dann nennt man es Interpreter (Basic, Perl, Python, Tcl).
Java und C# verwenden eine Kombination aus beidem, aber darauf gehe ich
jetzt nicht näher ein, weil es zu weit vom Thema wegführen würde.
> Wie programmiert man denn eine CPU? Geht das z.B. über das BIOS dann
letztendlich doch über einen Assemblercode?
Natürlich steht im BIOS x86-Assemblercode.
Dazu, was beim Boot-Prozess abläuft, ist eine Internetsuche recht
ergiebig:
http://www.pcguide.com/ref/mbsys/bios/bootSequence-c.html
Wenn man bedenkt das ein Mikrocontroller - wie schon gesagt - nur eine
CPU+ROM+RAM+Zeitgeber+sonstige Peripherie ist lautet die Antwort auf die
Frage "Wie programmiert man eine CPU?": "Wie einen Mikrocontroller." Der
Unterschied ist nur das der Programmspeicher (also das "Flash-ROM") -
wie die übrige Peripherie - als getrennte Bausteine vorliegen. Somit
programmierst Du nur den ROM und setzt ihn dann in die Schaltung ein.
Die Schaltung an sich kannst Du als Mikrocontroller sehen - nur eben auf
einer Platine statt auf einem Chip.
Hier mal ein Beispiel:
http://www.nue.tu-berlin.de/wer/knoerig/elektronik_de.html#Z80Comp
Ich habe eben versucht, die Seite zu finden, wie man einen 386er
ansteuert. Das würde mich gerne mal interessieren, gibt es da eine
anfängergerechte Seite oder evtl auch ein Buch, wo man darüber lesen
kann?
Wie habt ihr damals gelernt, ich finde meine passenden Infos nirgendswo,
als in diesem Forum und teils auch im Tutorial.
> Da diese Routinen jedoch auf einen recht niedrigen Level arbeiten (sie> müssen ja mit jeder(!) Hardware laufen), werden sie vom Betriebssystem> durch eigene optimierte Routinen "ersetzt".
Nicht nur deshalb. Das BIOS war mal as Basis für ein
Realmode-Betriebssystem wie DOS gedacht. Da wurden die BIOS-Funktionen
zum Zugriff auf die Peripherie auch viel eingesetzt. Wenn das
Betriebssystem aber mal im Protected Mode läuft, wie es jedes moderne
Betreibssystem tut, ist es viel zu umständlich, diese BIOS-Funktionen
aufzurufen.
> Entweder sind sie parallel verfügbar oder der Softwareinterrupt, der> sie normal aufruft, wird "umgebogen".
Die BIOS-Aufrufe (z.B. in einem DOS-Emulator) gehen dann aber auch nicht
mehr direkt ans BIOS, sondern an eine Emulationsschicht im
Betriebssystem.
> Welche CPU hat denn eine externe MMU???
MIPS und SuperH haben meines Wissens weder eine interne noch eine
externe MMU. Intern ist nur der TLB vorhanden, wenn eine Adresse nicht
gefunden wird, gibt es eine TLB-Miss-Exception und das Betriebssystem
muß sich um die Verwaltung der Page-Table kümmern.
Ich glaube der 88000 von Motorola hatte auch einen separaten Baustein
für die Speicherverwaltung. Das hatte aber damit zu tun, daß man an
diesen vom Konzept her mehrere CPUs hängen sollte. Eigentlich keine
schlechte Idee, hat sich damals aber nicht wirklich durchgesetzt.