Hallo allerseits, ich möchte mich mit der Programmierung von PCs
beschäftigen, allerdings auf unterster Ebene. Ich möchte verstehen wie
die Hardware arbeitet und wie man auf diese zugreift und programmiert.
Ich suche ein dafür geeignetes Buch, je ausführlicher dieses ist umso
besser. Ich hoffe ich konnte einigermaßen zum Ausdruck bringen was ich
meine.
Wenn ich einen vergleich machen müsste würde ich die Dokumentation von
Mikrocontrollern heranziehen, die Doku beschreibt die Hardware und deren
Programmierung, so etwas suche ich für PCs.
Ich habe auf diesem Gebiet noch keine Erfahrung, will mich aber wirklich
einarbeiten, es macht nichts wenn es schwer und langwierig ist.
Ich habe auch selbst etwas im Internet gesucht und bin auf diese beiden
Bücher gestoßen:
Mikroprozessortechnik - Klaus Wüst (ist etwas kurz??)
Mikroprozessortechnik und Rechnerstrukturen - Thomas Flik
Computerarchitektur. Strukturen, Konzepte, Grundlagen - Andrew S.
Tanenbaum
Könnt ihr mir etwas besseres empfehlen? Sind die von mir genannten
Bücher geeignet für mein vorhaben? Es dürfen auch englischsprachige
Bücher sein.
Mir sind eure Empfehlungen wichtig!
schoof schrieb:> Wenn ich einen vergleich machen müsste würde ich die Dokumentation von> Mikrocontrollern heranziehen, die Doku beschreibt die Hardware und deren> Programmierung, so etwas suche ich für PCs.
warum nimmst du dann nicht die Doku von den aktuellen CPUs von Intel.
Unterste Ebenen sind auch sehr vielschichtig.
Bis wie tief willste denn gehen?
Sehr hilfreich sind zum Beispiel die Programmierhandbücher für Linux
Kernel Treiber. Da biste schon auf Registerebenen unterwegs.
schoof schrieb:> es macht nichts wenn es schwer und langwierig ist.
Das wird es. Wenn du sämtliche Handbücher zusammennimmst, die diese
Ebene eines heutigen PCs ausmachen, dann ist der virtuelle Regalmeter
voll. Und nicht alle Information dazu ist frei verfügbar.
Anno IBM PC/XT war das noch etwas einfacher. Das schöne daran ist
allerdings, dass die heutigen PCs auch die damalige Software zumindest
dem Prinzip nach starten können, sofern kein UEFI-BIOS das verhindert.
Naja - wenn man sich einen alten ISA-Rechner holt kann man sogar ein
HD44780-Display in den Bus hängen und viele andere Spielereien zum Thema
Mikroprozessor durchspielen.
Martin G. schrieb:> Unterste Ebenen sind auch sehr vielschichtig.>> Bis wie tief willste denn gehen?
Da ich mich damit noch nicht beschäftigt habe, kann ich gar nicht genau
sagen auf was es mir ankommmt. Ein wirklich absolut minimalistisches OS
zu entwickeln wäre vielleicht der richtige Anfang? Da müsste ich
eigentlich alles ansprechen was so im PC drinsitzt.
schoof schrieb:> Da müsste ich> eigentlich alles ansprechen was so im PC drinsitzt.
Und das ist heutzutage eine fast unüberschaubare Menge an sehr
komplizierter Hardware...
schoof schrieb:> Ein wirklich absolut minimalistisches OS> zu entwickeln wäre vielleicht der richtige Anfang? Da müsste ich> eigentlich alles ansprechen was so im PC drinsitzt.
nein, z.b. DOS nutzt nur ein Bruchteil der Fähigkeit von einen aktuellen
PC.
schoof schrieb:> Ein wirklich absolut minimalistisches OS> zu entwickeln wäre vielleicht der richtige Anfang?
Ja. Dazu gibt es zahlreiche Bücher und Websites.
Ganz hilfreich fand ich http://wiki.osdev.org/Tutorials> Da müsste ich eigentlich alles ansprechen was so im PC drinsitzt.
Wohl kaum. Ein wirklich minimalistisches OS macht nix mit deiner
Graphikkarte (außer ein bisschen Text ausgeben vielleicht), deine
Soundkarte oder Netzwerk.
Joachim B. schrieb:> dann versuche einen alten DOS Rechner zu bekommen mit max. 286er, besser> 8088> Ebay-Artikel Nr. 171876721930
kann man sich in form einer Virtuelle Maschine einfach Downloaden - wozu
noch Hardware?
Joachim B. schrieb:> dann versuche einen alten DOS Rechner zu bekommen
Eigentlich braucht er nur die Doku davon. Nutzen kann er diese
Erkenntnisse auch mit neueren Rechnern. Da fehlt dann zwar sehr viel von
dem, was die ausmachen, aber so ganz geschlachtet wurde die heilige Kuh
"Kompatibilität" noch nicht.
Und mit virtueller Hardware wirds ohnehin einfacher. Also als VM.
schoof schrieb:> allerdings auf unterster Ebene.
Ich kann da so eine (sinnvolle) Zwischenebene anbieten. Ich hatte mal
das Buch 'PC Intern' oder so (ich würde da auch verschieden Auflagen
überprüfen), und die sind schon weit rein gegangen. Haben aber bei den
BIOS-Aufrufen aufgehört. Und das ist auch erstmal so sinnvoll. Beim PC
ist erstmal unbekannt welchen Hardware eingebaut ist, und die 'unterste
genormte' Schicht ist der BIOS Aufruf. Dieses BIOS wird ja vom Herstelle
mitgeliefert.
Zudem enthält das Buch auch noch eine Einführung über die
unterschiedlichen Prozessormodi.
Das würde ich mit erst einmal anschauen. Damit (und mit Hilfe des
Internets) könntest Du schon ein eigenes Bootbares Betriebssystem
schreiben, falls Du das denn möchtest.
Falls Du noch tiefer einsteigen möchtest, würde ich danach versuchen ein
Motherboard mit Chips zu bekommen, zu denen es Datenblätter gibt, und
danach das Bios auslesen und versuchen einzelne diese Teile der BIOS-API
zu verstehen.
Ich bin diesen Weg nicht gegangen, denke aber es sollte möglich sein.
Wobei man fragt sich: warum.
Sinvoller wäre es vielleicht eine PCI Karte zu entwickeln und versuchen
einen Treiber für Windows/Linux zu schreiben. Lernt man vermutlich
genauso viel ist nur sinnvoller.
A. K. schrieb:> Man könnte sich den Job natürlich auch einfacher gestalten, in dem man> den RPi als PC deklariert. ;-)
Würde ich auch so machen und meiner Meinung nach handelt es sich bei
einem solchen Board auch ohne wenn und aber um einen vollwertigen
Computer.
Alternativ zum Raspberry Pi könnte man auch ein BeagleBone nehmen.
http://beagleboard.org/black
Ich finde diese Boards vorallem interessant, weil man dann mit aktueller
Hardware arbeitet und nicht mit völlig veraltetem PC zeug aus 1990.
Ausserdem kann man immer auf bestehende (Open-Source) Betriebssysteme
für diese Boards zurückgreifen und gucken, wie die das machen (Linux,
RiscOS, etc.).
Dumdi D. schrieb:> Sinvoller wäre es vielleicht eine PCI Karte zu entwickeln und versuchen> einen Treiber für Windows/Linux zu schreiben. Lernt man vermutlich> genauso viel ist nur sinnvoller.
Kannst du ein ausführliches Buch oder Tutorial empfehlen? Wäre wohl auch
ein guter und einfacherer Anfang.
Das lowlevel-Tutorial sieht sehr interessant aus, danke!
Johnny B. schrieb:> Würde ich auch so machen und meiner Meinung nach handelt es sich bei> einem solchen Board auch ohne wenn und aber um einen vollwertigen> Computer.> Alternativ zum Raspberry Pi könnte man auch ein BeagleBone nehmen.> http://beagleboard.org/black
diese haben aber den Nachteil, das der Boot Prozess nicht standardisiert
ist. Beim PC ist er ordentlich beschrieben. Bei den ganzen ARM-Boards
macht jeder was er will.
Und die Doku von der Grafik im Raspi wird man auch lange suchen müssen.
Dass der Boot Prozess beim PC ordentlich beschrieben ist, kann man
vielleicht noch so stehen lassen. Nur ist es seit UEFI dermaßen
umfangreich -- das ist schon wieder obsolet, bevor du die Doku
durchgearbeitet hast.
Dumdi D. schrieb:
> Sinvoller wäre es vielleicht eine PCI Karte zu entwickeln und versuchen> einen Treiber für Windows/Linux zu schreiben. Lernt man vermutlich> genauso viel ist nur sinnvoller.
Kannst du ein ausführliches Buch oder Tutorial empfehlen? Wäre wohl auch
ein guter und einfacherer Anfang.
Das lowlevel-Tutorial sieht sehr interessant aus, danke!
PCI Treiber ? Vergiss das schnell wieder. Da gab's mal eine Firma
Sysinternals (www.sysinternals.com), jetzt gehoerts zu Microsoft, die
verkauft(e) Kurse fuer solche Anwendungen. Ich hab's mir angeschaut. Die
Anforderungen einen Treiber zu schreiben waren zu hoch. Die Interrupts
muss man kennen, die MMU, die Lowlevel APIs, ...
Ein Kollege hatte nach 6 Monaten das Handtuch geworfen. Es waren die
kleinen Details, die man erst alle heausfinden muss. Microsoft hat zB
mit den Interrupts gepfuscht.
Schau mal bei
http://www.thesycon.de/eng/home.shtml
> Ich möchte verstehen wie die Hardware arbeitet und wie man> auf diese zugreift und programmiert.
Zu DOS Zeiten ging das noch. Da konnte man sich die Schaltpläne vom IBM
PC oder AT besorgen, und die Datenblätter der dort verbauten Mikrochips.
Hinzu kommen Laufwerke, und Peripherie.
Nur gibt es heute nicht mehr "den" Standard PC. Erstes Problem wird
sein, einen vollständigen Schaltplan zu bekommen. Zweites Problem wird
sein, Datenblätter von allen Chips deines konkreten Modells zu bekommen.
Und wenn du soweit bist, dann kannst du damit vielleicht deinen PC
programmieren, aber meinen nicht, denn der besteht aus anderen Chips.
Nächste Hürde bei aktuellen Rechnern dürfte das UEFI Bios sein. Denn das
will nur von Microsoft zertifizierte Software starten.
Dein Vorhaben ist ja ganz nett, aber nahezu unmöglich.
Ich denke, du wirst dich damit abfinden müssen, deinen PC niemals
vollständig zu beherrschen.
Ich habe einen alternativen Vorschlag:
Nimm den Linux Kernel als Ausgangslage und baue Dir darauf deine eigene
Software. Das Prinzip ist simpel, sofern du einen Rechner ohne UEFI hast
bzw. mit Legacy BISO Support:
Beim Einschalten liest er vom Bootlaufwerk (Festplatte) die
Partitionstabelle. Dann von der bootbaren Partition den Bootsektor.
Darin befindest sich ein winzig kleines Programm (z.B. Lilo), welches
mit Hilfe von BIOS Calls den Bootloader lädt und startet.
Der Bootloader wiederum lädt den Linux Kernel in den Speicher und
startet ihn mit den nötigen Parameters. Einer davon gibt an, wie das
root Filesystem heisst.
Der Kernel lädt die Datei /usr/bin/init und führt sie aus.
Das heisst, dein Minimales Programm muss /usr/bin/init heissen. Das ist
zunächst die einzige Datei, die sich im Dateisystem befinden muss.
Stefan U. schrieb:> Nur gibt es heute nicht mehr "den" Standard PC. Erstes Problem wird> sein, einen vollständigen Schaltplan zu bekommen. Zweites Problem wird> sein, Datenblätter von allen Chips deines konkreten Modells zu bekommen.
CPU und Chipsatz kommen von Intel - da gibt auch die Doku.
> Nächste Hürde bei aktuellen Rechnern dürfte das UEFI Bios sein. Denn das> will nur von Microsoft zertifizierte Software starten.
warum schreibt jeder den Unsinn? hast du schon mal einen PC gesehen wo
das der Fall ist ( also nicht einfach abschaltbar?).
MS sagt nur das es vorhanden sein muss, mehr nicht. Wenn es nicht
braucht schaltet es einfach ab. Nur auf ARM Geräten ist es nicht
abschaltbar.
PC haben zum glück standard-Schnittstellen. AHCI ist dokumentiert und
funktioniert auf AMD und Intel Kisten. Selbst USB 2.0 sollte nicht das
Problem sein, ist auch im UHCI definiert. Dabei ist es egal was für
Chips verbaut sind.
Aber sinnlos finde ich das unterfangen trotzdem, das wissen wird später
kaum gebraucht. Sinnvoller ist mal mit den normalen
Kernel-Schnittstellen beschäftigen. (Seriellen Schnittstelle, USB usw. )
> hast du schon mal einen PC gesehen wo das der Fall ist
Ja, zumindest fast. Auf den Laptop meiner Frau musste ich zuerst ein
Service-Tool von HP installieren, um den Legacy BIOS Modus
freizuschalten. Bis dahin war der "Schalter" nämlich grau, als nicht
veränderbar.
Wenn das heißen soll "ohne Betriebssystem programmieren" oder
"Betriebssystem selbst programmieren", also bare-metal auf PC, dann
empfehlen sich die Bücher:
- PC Intern 4.0 (Tischer)
- Der PC als Mikrocontroller (Matthes)
beide nur antiquarisch zu haben.
Online-Ressourcen gibt es auch, z.B. hier:
http://www.lowlevel.eu/wiki/Hauptseite
Wichtig ist, daß die verwendete Hardware ein klassisches BIOS hat, bei
Industrieboards ist das oft noch der Fall, aktuelle Consumerware
unterstützt teilweise nur noch UEFI.
Sebastian schrieb:> Wichtig ist, daß die verwendete Hardware ein klassisches BIOS hat, bei> Industrieboards ist das oft noch der Fall, aktuelle Consumerware> unterstützt teilweise nur noch UEFI.
und? UEFI hat ein Legacy-BIOS-Modus- der macht dann das gleich wie das
Bios.
schoof schrieb:> Mir sind eure Empfehlungen wichtig!
Meine Empfehlung: Lass es bleiben, wenn kein zwingender Grund dahinter
steckt. Das ist ein Fass ohne Boden, der Kram mit einfachen BIOS und x86
Geschichten aus der DOS-Steinzeit sind heute kaum mehr von nutzen.
Nimm dir einen Mikrocontroller und fummeln da drauf auf unterster Eeben
rum, ist einfacher, genauso lehrreich und nach 8 Wochen hast du sowieso
keine Zeit oder Lust mehr weil das Ziel fehlt.
Ansonsten reicht es erst mal diverse Bücher zu dem Thema zu lesen oder
die oben genannten Tutrorials diverser bekannter Seiten, wurde ja alles
schon genannt.
Automatentheoretiker schrieb:> Nimm dir einen Mikrocontroller und fummeln da drauf auf unterster Eeben> rum, ist einfacher, genauso lehrreich und nach 8 Wochen hast du sowieso> keine Zeit oder Lust mehr weil das Ziel fehlt.> Ansonsten reicht es erst mal diverse Bücher zu dem Thema zu lesen oder> die oben genannten Tutrorials diverser bekannter Seiten, wurde ja alles> schon genannt.
Full ACK.
Wenn's PC sein muss, dann einfach mit einem einfachen Bootloader
anfangen...
https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders
Der schreibt zwar nur Hello World, damit hat man aber eine Ausgangsbasis
(für kleine Real-Mode und BIOS basierte Programme).
Dann kann man sich überlegen ob/wie man weiter machen möchte. :-)
schoof schrieb:> Da ich mich damit noch nicht beschäftigt habe, kann ich gar nicht genau> sagen auf was es mir ankommmt. Ein wirklich absolut minimalistisches OS> zu entwickeln wäre vielleicht der richtige Anfang?
Wer sowas allen Ernstes in Betracht zieht, kann nur ein Troll sein oder
direkt vom Olymp.
Viel Spass noch, Pit
Automatentheoretiker schrieb:> Meine Empfehlung: Lass es bleiben, wenn kein zwingender Grund dahinter> steckt. Das ist ein Fass ohne Boden, der Kram mit einfachen BIOS und x86> Geschichten aus der DOS-Steinzeit sind heute kaum mehr von nutzen.
auch wenn ich oben einen alten PC empfohlen hatte muss ich diese Aussage
leider unterstützen.
Es hat einfach keinen Sinn, das Wissen wäre zwar toll aber sinnlos.
Ich schmeisse alle Tipps und Tricks rund um PC und DOS raus, was soll
ich heute damit?
Ich werde nie wieder ein DOS System mit Qemm aufsetzen, muss nicht mehr
alle Schalter kennen und wo ich was hinschiebe.
Nach XP kann ich nicht mal mehr auf die RTC LPT COM direkt zugreifen,
jetzt geht es ja noch mit Treiber
http://www.b-kainka.de/portnt.htm
Gut, wenn es so kompliziert ist einen PC durch und durch zu kennen,
kommt mir da eine andere Frage. Ist es dann einfacher einen Rechner
selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und
ein paar I/O-Bausteine? Quasi eine Art SPS.
Gibts hierfür ein passendes Buch?
Wenn ich die Komponenten selbst aussuche, dann bestimme ich ja selbst
die Komplexität des Rechnersystems. Und nein ich will keine fertige SPS
kaufen, mich interessiert die Technik und das selber machen.
Oder du schaust dir mal an wie ein Raspi oder ein sonstiges ARM Linux
Board bootet. Also so vom Einsprungpunkt des ARM Kern bis zu einer
Linuxshell. Da lernt man sehr viel über Hardware Initialisierung und den
allgemeinen Ablauf und hat den Vorteil dass alles im Quellcode vorhanden
ist und die Doku zu den beteiligten Bauteilen auch komplett vorhanden
ist.
Matthias
Schoof schrieb:> Gut, wenn es so kompliziert ist einen PC durch und durch zu> kennen, kommt mir da eine andere Frage.
Wenn du wirklich ASM lernen willst, kommst du auf keinen Fall drum
rum, die Prozessorarchitektur zu kennen. Sprich: welche Register gibt
es, welche Operationen sind auf welchen Registern erlaubt und wie kommen
Daten aus dem Arbeitsspeicher in diese Register. Dafür soll es hier im
Forum einen ganz geheimen Link geben, wo das für Atmels AVR-Architektur
und dessen Befehlssatz für Einsteiger beschrieben wird. Ist glaube ich
gut versteckt ganz links oben auf der Seite.
> Ist es dann einfacher einen Rechner> selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und> ein paar I/O-Bausteine? Quasi eine Art SPS.> Gibts hierfür ein passendes Buch?
Folge A.K.s Empfehlung und kauf dir einen Raspberry. Oder nimm QEmu und
entwickle erstmal ein simples BareMetal-Programm für ARM. Ein klasse
Tutorial gibt's hier:
https://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/> Wenn ich die Komponenten selbst aussuche, dann bestimme ich ja selbst> die Komplexität des Rechnersystems. Und nein ich will keine fertige SPS> kaufen, mich interessiert die Technik und das selber machen.
Fang mit 'nem Mikrocontroller an. Das ist ein ganz einfacher 'PC' in
einem Chip. Sprich, der hat I/O, RAM, Register und ein paar nette
Sonderfunktionen, die man schön an einem Prozessor-Emulator
nachvollziehen kann.
Kannst natürlich auch mit einem guten Buch zur ASM-Programmierung unter
Windows oder Linux einsteigen. Dann nimmt dir das Betriebssystem schon
einige Komplexität ab und du brauchst nur externe Funktionsaufrufe zu
machen (z.B. LoadLibrary oder MessageBox Funktionsaufrufe).
Man sollte nur nicht den Fehler machen, um Elite zu sein, sofort alles
machen zu wollen. Ist sicher verlockend aufgrund der Freiheiten, aber
gut gewählte Einschränkungen sind für realisierbare Projekte
entscheidend.
... auf unterster Ebene.
Bei den heutigen Intel Prozessoren kannst du den Microcode ändern. Der
Prozessor-Kern führt gar keine x86 Befehle aus. Die Maschinenbefehle
werden von einem Microcode interpretiert, den du ändern kannst.
Ja nun,
was verstehst Du denn unter "unterster Ebene" ?
Wie eine von Neumann bzw. Harvard
Architektur aussieht ?
Wie eine MMU und TLB funktionieren ?
Oder wie man Treiber programmiert ?
Dann kommt's noch drauf an ob es eine Einadress, Zweiadress oder
Dreiadress Maschine ist.
CISC oder RISC oder VLIW ?
Was willst Du also lernen ?
Schoof schrieb:
Es könnte uns helfen Dir einen Rat zu geben, wenn Du mal relativ
ausführlich Deinen Hintergrund beschreibst. So in etwa was Du in einen
Lebenslauf (natürlich natürlich die konkreten Daten durch Zeitdauer und
Firmen/Schulen durch allgemeine Bezeichnungen ersetzen; also
anonymisieren) und ein Verzeichnis Deiner Kenntnisse und Fähigkeiten
schreiben würdest.
Falls Deine bisherigen Aktivitäten rein privat waren (das sog. "Hobby")
so schreibe einmal eine Liste von Projekten, die Du fertiggestellt hast
und was die Basis war (Eigener Entwurf vs. fremder Entwurf)
Falk S. schrieb:> selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und>> ein paar I/O-Bausteine?
Die bekommst du überhaupt nicht, das sind heute alles extrem
hochintegrierte Chips mit 1000 und mehr Anschlüssen, die im Handel nicht
erhältlich sind.
Du kannst zwar aus den alten Unterlagen zum XT/AT entnehmen, welche
register eine Parallelschnittstelle im Prinzip hat, aber praktisch ist
die heute in einem der Systemchips auf 0,01 % der Fläche mit
untergebracht, sofern es sie überhaupt noch gibt.
Das kleinstmögliche Bauteil, das du beschaffen kannst, ist ein
Motherboard.
Georg
Noch einer schrieb:> Bei den heutigen Intel Prozessoren kannst du den Microcode ändern. Der> Prozessor-Kern führt gar keine x86 Befehle aus. Die Maschinenbefehle> werden von einem Microcode interpretiert, den du ändern kannst.
Änderbarer Microcode ist für Patches bei CPU-Bugs reserviert und recht
wahrscheinlich nur bei jenen komplexen Befehlen machbar, die ohnehin
schon per Microcode-ROM implementiert sind. In der dynamischen
Befehlsveteilung sind das wenige Prozent der ausgeführten Befehle. Die
anderen werden von den Dekodern direkt in Microops umgesetzt.
Schoof schrieb:> Gut, wenn es so kompliziert ist einen PC durch und durch zu kennen,> kommt mir da eine andere Frage. Ist es dann einfacher einen Rechner> selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und> ein paar I/O-Bausteine? Quasi eine Art SPS.> Gibts hierfür ein passendes Buch?
Wenn es Dir ernst ist, wäre vielleicht das aktuelle Oberon Projekt etwas
für Dich. Ich habe das in den letzten Jahren nicht mehr verfolgt, aber
Wirth hat jetzt wohl einen Rechner auf einem FPGA-Board implementiert,
auf dem das in der Sprache Oberon gschriebene Oberon Betriebssystem
läuft. Da hat man dann wirklich alles unter Kontrolle und kann
prinzipiell alles verstehen. Die Einschränkungen und Nachteile liegen
natürlich auf der Hand.
Wenn es Dir dagegen um ein minimales OS/Kernel geht: Jemand hat da in
Nim einem bootbaren Kernel geschrieben.
Wenn man etwas in Richtung eigener CPU machen wollte waere ein Design in
einem FPGA eine Moeglichkeit. Nachteil : Es gibt sehr lange nichts
anzufassen.
Für das Grundverständnis, was in einem PC vor sich geht, hat mir damals
zu MS/PC-DOS 2.11(bzw.3.0)-Zeiten auch das anschauen des BIOS-Quellcodes
des IBM-PCs geholfen. Der war Bestandteil des technischen
Systemhandbuches der IBM-PCs. Ich konnte mir damals von einem an der Uni
vorhandenen Exemplar eine Kopie machen.
Diese Doku war damals garantiert schweineteuer.
Ziemlich einfach dürfte da der Interrupt 17h und der Interrupt 10h sein.
Im Internet findet man das ganze mittlerweile unter
http://www.intel-assembler.it/PORTALE/4/286bios_20090616.zip, wichtiger
Kommentar dazu unter
http://www.intel-assembler.it/portale/5/ibm-at-286-souce-code/ibm-at-286-souce-code.asp
Stefan U. schrieb:> Nächste Hürde bei aktuellen Rechnern dürfte das UEFI Bios sein. Denn das> will nur von Microsoft zertifizierte Software starten.
Du verwechselst UEFI im Allgemeinen mit dessen Feature Secure Boot.
Stefan U. schrieb:> Ja, zumindest fast. Auf den Laptop meiner Frau musste ich zuerst ein> Service-Tool von HP installieren, um den Legacy BIOS Modus> freizuschalten. Bis dahin war der "Schalter" nämlich grau, als nicht> veränderbar.
UEFI lässt sich auch ohne Legacy BIOS Mode und ohne BIOS Compatibility
Mode mit abgeschalteten Secure Boot verwenden.
Schoof schrieb:> Gut, wenn es so kompliziert ist einen PC durch und durch zu kennen,> kommt mir da eine andere Frage. Ist es dann einfacher einen Rechner> selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und> ein paar I/O-Bausteine? Quasi eine Art SPS.> Gibts hierfür ein passendes Buch?>> Wenn ich die Komponenten selbst aussuche, dann bestimme ich ja selbst> die Komplexität des Rechnersystems. Und nein ich will keine fertige SPS> kaufen, mich interessiert die Technik und das selber machen.
Als Mikrocontroller ist das garnicht mal so schwierig. Nimm dir einen
Logiksimulator (z.B. Logisim), bau dir eine Schaltung damit und schreib
dir nen Assembler dazu. Ist nicht x86 spezifisch oder so, aber die
Prinzipien mit ALU, Registern, Stack, Ram, Rom, IO etc versteht man
danach durch und durch.
Hab das auch selbst mal zum Spaß gemacht:
https://hackaday.io/project/1228-another-microcontroller-built-in-logisim
Und dann noch die Erweiterung auf octa core, wobei nicht 8 einzelne
threads ausgeführt werden, sondern 1 thread 8x so schnell:
https://hackaday.io/project/4373-serial-multicore-mikrocontroller
Und wenns funktioniert kannst dus noch als Hardware aufbauen oder in nen
Fpga packen
Schoof schrieb:> Gut, wenn es so kompliziert ist einen PC durch und durch zu kennen,> kommt mir da eine andere Frage. Ist es dann einfacher einen Rechner> selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und> ein paar I/O-Bausteine?
Wenn es Dir nur um das grundlegende Verständnis als intellektuelle
Herausforderung geht, schau Dir doch mal "The Elements of Computing
Systems, MIT Press, By Noam Nisan and Shimon Schocken"
(http://www.nand2tetris.org) an.
hast Du Dir das TempleOs inzwischen mal angesehen?
Unabhängig von den Überzeugungen des Erfinders ist das ähm sehr
fundamental.
"""
TempleOS is an x86_64, multi-tasking, multi-cored, public domain, open
source,
ring-0-only, single-address-map (identity-mapped), non-networked, PC
operating
system for recreational programming.
"""
Alles Textmode, Grafik 640x480x16 - also eher ein Fan der C64 Idee.
Spartanischer (und damit übersichticher) wird's nicht. 7MB 120k LOC sind
noch zu Lebzeiten erforschbar, wenn auch teilw. spärlich kommentiert.
Georg schrieb:> Falk S. schrieb:>> selbst aus einzelnen komponenten aufzubauen? Also Cpu, Bus, Speicher und>>> ein paar I/O-Bausteine?>> Die bekommst du überhaupt nicht, das sind heute alles extrem> hochintegrierte Chips mit 1000 und mehr Anschlüssen, die im Handel nicht> erhältlich sind.
Einspruch, wenn er wirklich mag gibt es das hier:
Joachim B. schrieb:> leicher wäre doch ein Z80 CP/M single Board.> http://www.pci-card.com/euro-z80.html
sonst kann er auch mit einem Arduino anfangen auch jenseits der Arduino
IDE per AVR Studio
RAM "ROM" I/O alles in einem Chip, er könnte die ersten LED leuchten
lassen, Tasten abfragen, sich in ISR IRQ und Timerprogrammierung
einarbeiten und dann immer noch zum PI oder STM sich vorarbeiten, gleich
mit einem 32-bitter und OS anzufangen halte ich für unmöglich.
Zwar war es leicht eine simple LED Ampel am PI zu machen, aber wenn es
ums genaue Timing geht oder den PI am Port nicht abzuschiessen gehört
schon etwas Erfahrung dazu.
Joachim B. schrieb:> Einspruch, wenn er wirklich mag gibt es das hier:
Du hast natürlich recht, das man daraus was lernen könnte, aber:
schoof schrieb:> ich möchte mich mit der Programmierung von PCs> beschäftigen, allerdings auf unterster Ebene
hast du wohl überlesen. Ein PC hat alles mögliche, aber keine Z80-CPU.
Georg
Georg schrieb:> hast du wohl überlesen. Ein PC hat alles mögliche, aber keine Z80-CPU.
PC heist personal computer und aus Z80 kann man erst mal CP/M machen
danach zu DOS kommen.
https://de.wikipedia.org/wiki/CP/M
Ich wüsste nicht warum ein Compi mit Z80 kein PC sein sollte, das waren
die ersten noch vor dem "PC" (genauso mit 6502).
Hier im Forum gibt es doch einen Thread über das z180 Modul.
Alternativ gab es in der c't mal eine Serie über die x86 Chips wie
Keyboard-Controller usw. Auch einen x86 Einplatinencomputer gab es da.
> Ist es dann einfacher einen Rechner> selbst aus einzelnen Komponenten aufzubauen?
Einen PC kannst du nicht nachbauen, denn die Chips kannst du nicht
kaufen und die Datenblätter sind nicht zugänglich. Dann kommt noch dazu,
dass einige Chips ohne Firmware nicht funktionsfähig sind. Auch die
brauchst du.
Einen funktionierenden Rechner kann man sich jedoch bauen. Dazu suchst
du Dir eine CPU aus, und dann die ganze Peripherie, die zu dessen
Betrieb nötig ist.
Nur würdest du dich dann mit veraltetem Kram beschäftigen. Aktuelle
Entwicklungen basieren stets entweder auf einem PC oder einem
Mikrocontroller.
> Ich wüsste nicht warum ein Compi mit Z80 kein PC sein sollte
Sie waren PC's im Sinne von "Personal Computer". Wer heute das Wort PC
meint, denkt dabei allerdings eher an einen Rechner mit aktuellem Intel
Prozessor, so Windows drauf laufen kann.
hi
empfehle dir als erste grundlage
MS-DOS, PC-DOS, MS-Windows, PC, PS/2 Hardware
Thom Hogan:
https://www.rebuy.de/i,2892166/buecher/die-pc-referenz-fuer-programmierer-thom-hogan
an den grundlagen hat sich nicht viel geändert.
nächster schritt,
welche cpu / schnittstellen interessieren dich?
welche richtung soll es gehen? windows, linux, andere?
lg
;-)
- OS Empfehlungen
- Buchempfehlungen
- Webseiten mit Tutorials
- Persönliche Empfehlungen bzgl. Mikrocontrollern, großen Rechnern, RPI
etc.
- Simulationstool
...ich hoffe, dass ich niemanden vergessen habe zu erwähnen.
Ich kann mich gar nicht genug bei allen hier bedanken für die vielen
Beiträge, für mich ist dieser Thread eine wahre Fundgrube an
Informationen. Nachdem ich alles mitgelesen habe, steht für mich eines
fest:
Ich fange lieber einfach an, d. h. ich beschäftige mich zuerst mit
Mikrocontrollern, wenn ich mind. die Grundlagen beherrsche, kann ich
mich daran wagen ein kleines Grafikdisplay, Maus und Tastatur an einen
leistungsstärkeren Mikrocontroller anzuschließen und dafür ein
primitives OS zu schreiben. Das ist fürs erste vom Umfang her sicher
mehr als genug.
Mit Logisim werde ich mich wohl auch beschäftigen, das sieht sehr
spannend aus (danke Simon S.) und hat den Vorteil, dass ich mich nicht
bestimmten Architekturen beschäftige, sondern lerne Logikschaltungen zu
entwerfen unabhängig von einer Architektur (ich hoffe, dass ich das
richtig verstanden habe).
Die größeren OS wie Temple, V2, müssen leider warten. 120k Codezeilen
sind doch etwas arg viel fürs erste. Installieren kann ich sie zum Test
aber dennoch mal.
Schoof schrieb:> 120k Codezeilen> sind doch etwas arg viel fürs erste.
So musst du auch die Empfehlungen hier für Linux sehen: es ging gerade
durch die Presse, dass der Kernel die 20 Millionen Codezeilen
überschritten hat. Und das ist nur der nackte Kernel, da kommen noch
hunderte Millionen dazu, um das System real benutzen zu können. Wenn du
da auch nur eine Minute pro Codezeile rechnest...
Georg
Man kann sich (grundlegende) Programmiertechniken ganz gut selber
erarbeiten, indem man sich verfügbare Sourcecodes (auch in C, OO C, oder
Pascal) anschaut.
64 Bit Programmierung ist nicht sehr viel anderes als 16 Bit
Programmierung, nur eben mit ein paar Änderungen.
Was man auch noch braucht, wäre das ein oder andere (aktuell verfügbare)
Buch zum Nachschlagen.
(und die wichtigsten Systemfunktionen des Zielsystems.)
(nur ein Beispiel von vielen: http://flatassembler.net/examples.php )
(und: auch in Assembler ließe sich Skript-Kiddie-Kultur-Extrem und Code
Obfuscation bis zum Erbrechen betreiben)