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!
:
Verschoben durch User
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.
Hier sollte sich einiges an Informationen finden lassen: http://www.intel.de/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf Aber ob sich der Aufwand lohnt?
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.
:
Bearbeitet durch User
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. dann versuche einen alten DOS Rechner zu bekommen mit max. 286er, besser 8088 http://www.ebay.de/itm/Olivetti-PCS-286-Computer-1x-Floppy-HDD-/171876721930?hash=item2804a6a50a leicher wäre doch ein Z80 CP/M single Board. http://www.pci-card.com/euro-z80.html
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.
Man könnte sich den Job natürlich auch einfacher gestalten, in dem man den RPi als PC deklariert. ;-)
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
:
Bearbeitet durch User
> 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.
NB: Gehört ein Thread, der mit "PC Programmierung" anfängt, nicht nach "PC-Programmierung"?
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.
> UEFI hat ein Legacy-BIOS-Modus
Wenn man Glück hat ja. Aber nur dann.
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.
Stefan U. schrieb: > Wenn man Glück hat ja. Aber nur dann. sonst schreibt man sich halt ein UEFI Programm. http://wiki.osdev.org/UEFI
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. :-)
Noch ein Nachtrag von mir: Ich habe das Buch [1] noch hier im Regal stehen. Ist natürlich steinalt, aber durchaus lesenswert und recht detailliert. Gruß Dennis [1] http://www.amazon.de/PC-Hardwarebuch-Aufbau-Funktionsweise-Programmierung-Allgemein/dp/3827313023/
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
:
Bearbeitet durch User
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.
Ich würde mich mal in der Demoszene umschauen. 8088 mph Demo, und so...
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 ?
oder nimm einen Schneider CPC 464 oder 6128, der hat einen Z80 CPU einen einfachen Soundchip etc alles mittlerweile gut dokumentiert, und ein Z80 ist ja problemlos mit einem IBM PC 8086 vergleichbar..bzw sogar schon besser als der Originale Intel.. Und der Schneider macht auch sonst mehr Spaß :-9 Das integrierte Basic ist klasse und erlaubt vollen Zugriff auf alle Funtkionen (im Gegensatz zu einem C64!!) Es gibt aber auch PAscal.. Aber Du willst ja eher ASM..das geht natürlich auch http://www.ebay.de/sch/i.html?_from=R40&_trksid=p2047675.m570.l1313.TR12.TRC2.A0.H0.Xschneider+cpc.TRS0&_nkw=schneider+cpc&_sacat=0 http://www.ebay.de/itm/DATA-BECKER-DAS-MASCHINENSPRACHEBUCH-ZUM-CPC-464-SCHNEIDER-CPC-AMSTRAD-3-/221849324036?hash=item33a7400a04 http://www.ebay.de/itm/DATA-BECKER-CPC464-GRAPHIK-SOUND-WIE-NEU-UNGELESEN-SCHNEIDER-CPC-AMSTRAD-2-/221849324045?hash=item33a7400a0d
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.
:
Bearbeitet durch User
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.
Dennis S. schrieb: > Aber ob sich der Aufwand lohnt? Gut dass Linus Torvalds sich das nicht gefragt hat.
Wenn man etwas in Richtung eigener CPU machen wollte waere ein Design in einem FPGA eine Moeglichkeit. Nachteil : Es gibt sehr lange nichts anzufassen.
Villeicht möchtest du dich mit V2OS auseinandersetzen. Robert
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
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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 ;-)
Joachim B. schrieb: > 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 über CP/M schrieb Thom Hogan einen bestseller mit über 300.000 exemplare, "CP/M Users Guide". wenn du noch mehr grundlagen brauchst, dann leg dir auch dieses buch zu: http://www.goodreads.com/book/show/4963357-cp-m-user-s-guide oder mal hier gucken: eine ganze bücherliste und links dazu http://www.himpdf.org/ahzvo_the-osborne-mcgraw-hill-cp-m-user-guide-by-hogan-thom.pdf oder hier: http://www.amazon.com/Osborne-CP-M-user-guide/dp/0931988829 thom hogan ist ein veteran. mehr über ihn: http://www.bythom.com/thom.htm lg ;-) bild src: http://www.bythom.com/thom.htm
- 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. bei früher 50 Zeilen für geübte Programmierer ist es heute von einem kaum noch zu stemmen. Da stecken Mannjahre drin! Schoof schrieb: > 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 da bietet sich ein Arduino mega2560 an mit aufgestecktem GC Display http://www.exp-tech.de/adafruit-2-8-tft-touch-shield-fuer-arduino-v2?gclid=CNiN3YOYo8cCFefItAodm6kOvQ steckt man 1:1 auf und es kann losgehen über RS232 könnte erst mal mit http://www.ebay.com/bhp/rs232-ttl-max3232 eine alte RS232 Maus anstecken mit USB würde ich gerade nicht einsteigen eine alte PC Tastatur mit 5-pol DIN Schnittstelle ist 5V seriell auch das würde gehen http://www.ebay.de/itm/like/351393001370?lpid=106&chn=ps
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
Georg schrieb: > Wenn du > da auch nur eine Minute pro Codezeile rechnest... Ja, mir persönlich ist der Nutzen/Aufwand da doch zu groß.
Josef G. schrieb: > Schau dir das mal an: http://www.bomerenzprojekt.de Das sieht auch interessant aus, kann ich mir für später aufheben!
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.