was macht das so schwer das zu unterscheiden, nicht XT/AT, sondern sie müssen wissen, es gibt drei. Wobei die ersten sind eigentlich gleich. Keine Sorge AT/XT verwechsele ich immer, aber ich verwechsle die Graphikkarten nicht. Vielleicht kann man das auswendig lernen, little endian und big endian. Das kann ich nämlich, ich habe das so gelernt
little endian: falsch rum big endian: richtig rum |
Vielleicht
AT: Falsch rum XT: Richtig rum |
Es gibt an Graphikkarten
Und auf dem PC, gibt es an jumpern, die einstellung, es gibt ja, die Systemboard Switches, davon gibt es die Continously Perform Power On Selftest. Den macht er immer, nur dass er immer wieder von vorne anfängt, und es gibt die Einstellung Diskette 1, 2, 3, 4, keine
Die System Board Switches sind in Assembler als Address abfragbar. Die sind jeweils ein Pin/Bit
Und für die Graphikkarte:
Was sagt das? Monochrome ist klar. Das sind halt zwei Farben. Es gab auch IBM PC's ohne Display. Zum Beispiel bei Maschinensteuerung oder so - kann man sich vorstellen
Dann das spielt beim NVIDIA Problem von Linux eine Rolle
die haben Operanden irgendwie mit 6 Operanden oder so, anders als andere. Der Witz ist halt, dass ich ein Programm da hinschicke, mit MDA
MDA: Einfach an die entsprechende Speicherstelle schreiben
er hat ein alte Tastatur. Und altes Netzteil und so weiter ist eigentlich komplett alt was Neues auch das auch die Grafikkarte ega cga ich glaube, Hercules ah was ich trotzdem tue ich Kauf mir trotzdem ein komplett alten PC an mit einem Monitor und der komplett als System komplett ist. Ich finde es gerade bequem, dass ich hier Video Adapter haben trotzdem mit alten Bildschirm und allem
Es läuft Dost drauf auf dem jetzigen und die Spiele Digger dazu Turbo C. Turbo Assembler. Ich spiele mal ne Runde, digger.
Sie müssen zwischen Memory Mapped IO und DMA unterscheiden, das hat nichts miteinander zu tun. Mich hat mal eine Frau gefragt, können sie auch mit bluetooth. Ich baue ihnen vielleicht bald eine Schaltung mit Bluetooth. Weil es gibt halt Adapter. Man darf sich das nicht so vorstellen, dass man selber eine schaltung lötet. Sondern es gibt Bausteine. Das ist, wie mit dem UART - wenn sie beim UART sind sie schnell bei - also RS232 CCITT, dann sind sie schnell bei I2C und dann schnell bei USB - also sie können einfach USB machen, das sind aber fertige bausteine
beim x86er ist das ein externen Baustein und beim AVR, das lerne ich ja gerade ist der UART - auf dem Prozessor
Sie müssen halt Baudrate wissen, Zeichen pro Sekunde. Das hängt von ihrem Satz ab, ab sie 1 Bit Zeichen haben, das heisst 0/1 ist. Dann ist 0 oder 1 pro Sekunde ein Baud. Oder sie 5 Bit haben, wie bei CCITT-1 - von Baudot selber oder 256 Zeichen, ASCII Code oder
2^16.
Gut - das muss man wissen, dann gibt es für den Baustein Register. Beim AVR müssen sie nur noch einen MAX232 anschliessen, weil RS232 arbeitet mit 12V und nicht mit 5V
So. Und dann gibt es einen UART Baustein, der kann integriert sein. Und dann geht auch Bluetooth. So, das ist das. Das andere ist - dass sie bei DMA einen Baustein. Ich habe 4 fertige x86er. Von Ebay. Jeweils 6 Euro oder so. Sie können eine einfache Schaltung bauen, und sie müssen halt ein EEPROM nehmen. Das ist kein Problem. Aber der Witz ist, DMA zum Beispiel, sie machen nicht selber einen schaltung
Der DMA Controller ist nicht mit dem Prozessor verbunden, sondern mit dem RAM - das ist ein eigener Baustein. Und wenn sie an eine Addresse schreiben, dann überträgt der das an das gerät
Und beim x86er, sind die typischen Bausteine PIC 8259A - das ist der Interrupt Controller, 8253, und dann 51 und 57, Paralleler und serieller Input/Output Controller. Und zum Beispiel Z80 Prozessor heissen die SIO/PIO
Und der DMA macht das selber, bei Memory Mapped I/O ist es so - die anbindung von x86er an den RAM und die I/O ist nicht extrem kompliziert. Schauen sie sich das Blockschaltbild an
Sie brauchen kein DMA - aber beim x86er kommen Memory Mapped I/O nicht herum. Das geht nicht anders. Weil das Konzept ist so
Folgendes: Sie haben einen externen Systembus
Sie müssen unterscheiden zwischen
So, der Externe Systembus ist
Und wenn sie einen AVR angucken - sie brauchen beim x86er keine Interrupts, nicht zwingend. Das wird uns durch das multitasking und Betriebssystem DOS 0x21, so erklärt, aber sie brauchen keine Interrupts
Aber sie brauchen Memory Mapped I/O. Weil - beim AVR Atmega8, haben sie den RAM und den Speicher auf dem Baustein, natürlich haben sie Ports für die EA
Das sind 8 bit, jeweils, PORTA, PORTB, PORTC, ...
Jeweils 8 "Leitungen" Bits. Und - der Witz ist halt. Dass sie quasi 3 Geräte anschliessen können, oder vier
PORTA, PORTB, PORTC, PORTD |
PORTA, PORTB, ... |
Also ein Wort. Jetzt sind sie aber mit einem Gerät nicht zufrieden. das hat mit Interrupts nichts zu tun. Sie haben 16 Interrupts. Aber das sind Unterbrechungen, die werde ausgelöst. Da meldet sich jemand. Das brauchen sie aber nicht
Wenn sie dem LCD was schicken, dann brauchen sie keine Unterbrechung. Trotzdem haben sie
2^16geräte
Was machen sie, wenn sie nur PORTA haben, sie brauchen
2^16Ports. Brauchen sie nicht
sie nehmen, Addressbus und Datenbus, sie schicken die Daten an das Gerät, wie an den RAM - und sie brauchen aber
2^16geräte. Dafür sie die Addressen. Das sind adressen von 0 bis
2^{16}-1.
Gut - jetzt haben sie ein Problem. der eine Adress und Datenbus ist für den RAM zuständig. Was unterscheidet das jetzt von den Geräten
Und jetzt muss man aufpassen. Man könnte an der CPU ein Bit machen, wenn das HIGH ist, dann ist der RAM gemeint. Wenn es LOW ist, dann ist die E/A gemeint
Und genau ist es. Beim x86er gibt es - 3 Bit. Sie können ins Blockschaltbild gucken. Da sind 3 Bit. Die unterscheiden, einen Zugriff vom RAM von dem von der E/A. Und der Witz ist - dass das Pins aussen dran sind
So, jetzt ist die Frage - warum heisst das Memory Mapped I/O. Speicherbereich. Das ist eine verwechslung. Bei DMA ist der Speicher im RAM - und der Controller, das machen sie nicht selber überträgt die Daten
Memory Mapped I/O benutzt wie der RAM, Addressen und Datenbus. Und die Addressen sind wie alle. Aber das ist kein Bereich im Arbeitsspeicher
Sie schreiben auf den Bus aussen auf Daten und Addressen, derselbe Bus. Aber ein Mal ist RAM gemeint und ein Mal E/A
Und dann eben 1 Bit könnte man sagen, aussen dran, zur unterscheidung, oder - 3 Bit beim x86
Jetzt wie handelt man das mit den 3 Bit. Komplizierte Schaltung bauen. Nein eben nicht Intel bietet einen Baustein an. Die 3 Bit, sind am x86er kompliziert, das ist nicht easy. Es gibt einen fertigen Baustein
Es gibt nur eine Frage. Wie setze ich die Bits? Wenn ich HIGH die E/A will und LOW den RAM, wie mache ich das?
Jetzt müssen sie gucken, das kommt in ihrem Programm vor
Es gibt normalerweise
Laden, ist von Speicher zu Register Speichern von Register zu Speicher Move von Register zu Register
Bei Intel sind alle zu MOV zusammengefasst
Aber was mit der E/A.Sie kommen um Memory Mapped I/O herum. Nur wie Bit setzen?
Ganz einfach es gibt die Befehle
IN/OUT
Und beim AVR geht
in r16, PORTD |
und bei Intel sagen wir
out 0x0f, ax |
Das machen die Befehle
IN/OUT MOV |
in/out mov, ld, st |
So, das ist das. Damit ist Memory Mapped I/O und DMA geklärt
was macht die Graphikkarte aus?
Und was ist, wenn sie ihren UART - Memory Mapped I/O Controller, Bluetooth Controller doch selber bauen wollen
Dann tun sie mir einen Gefallen. Generell kein Problem. Sie müssen vor allem auf die Spezifikation achten. Sie müssen nichts erfinden. RS-232 wurde erfunden. Gut, die Register machen sie. dann nehmen sie einen FPGA und machen den in VHDL und sie machen ins Windeseile - einen Cache speicher, CAM - Inhaltsaddressiert in VHDL weil sie einen Latch schreiben, dann ein FF, dann ein Register, dann sie können das beliebig verfiehlfältigen, einen Speicher und mit einer Schaltung, die sie verfiehlfältigen einen Inhaltsadressierten
Ebenso so schnell der eigene Bluetooth Controller. Müssen sie aber nicht.
So und wenn das passiert ist. Was macht die graphikkarte
Die normale, die erste
Stellen sie sich vor. Sie senden 'a'. wenn sie das senden wird auf ihrem Monochromen Text Display - dann kommt ein 'a' auf dem Display. das ist unser Adapter. Und - ja, warum überhaupt. Wissen sie, wenn sie das Kabel an den Prozessor anlöten, dann wird sich manch einer sagen, was ist das denn. Deswegen gibt es einen Adapter. Der setzt aber das - was der Prozessor sendet, quasi 1 zu 1 um. Das ist der Adapter
Jetzt kommt der Controller. sagen wir der geht so. Sagen wir einfach mal. Der kennt die Befehle
READ/WRITE/POWER ON/OFF
So, jetzt können sie die Graphikkarte auslesen und abschalten. Dafür gibt es daten, das sind die dargestellten Zeichen und es gibt die Befehle READ/WRITE/POWER ON/OFF
Und - dann ist das ein Controller
Jetzt kommt 3D - sie können einen 3D Soundkarte machen, mit AVR oder ARM32 Cortex 7 oder mit FPGA
Sie haben jetzt eine Graphikkarte, die hat keinen Controller - da senden sie lesen schreiben. sondern sie haben assembler programme, zum Beispiel
add r0, r0, r1 add r1, r0, r1 add r2, r1, r0 |
Instruction Set Architecture
Das ist was der Programmierer sieht. jetzt haben sie 5 Register. Oder so. Das halt eine andere CPU. Die hat auch einen Speicher
Der Unterschied - sie haben halt keine x86er Programme, also
again: mov ax, 0xff cmp ax, 0xff je again |
ldi r16, 0xff add r15, r15, r15 |
Und jetzt egal. Wie kommt das Programm in den speicher von der Graphikkarte
Jetzt kommt DMA. Sie können IN/OUT nehmen. Könnten sie? Macht das das langsamer. Ja, aber darum geht es nicht
Wenn sie an Graphikkarte denken, denken sie an Shadder einheiten
das brauchen sie nicht unbedingt. Schon aber - das ist weil ihre Graphikkarte - darauf spezialisiert ist
so, nehmen eine CPU und eine RAM. Für die Graphikkarte
Und sie schicken das Programm an die Graka. Und was macht das schnell? Das DMA oder IN/OUT = Memory Mapped I/O
keins von beiden. Angenommen sie haben ein Quadrat
Sie könnten auch Memory Mapped I/O. Ein Quadrat hat vier Ecken
Und sie wollen einen roten Bildschirm, mit einem Blauen Quadrat.
jetzt haben sie
a, a+width b = a+hight d = (width+a, hight+a) |
Gut, wenn sie das Bildschirm darstellen wollen, müssen sie von x0, bis x127 und von y0 bis y127
Durchlaufen, zeile spalte, für die Pixel Und müssen jeden Pixel rot oder blau färben
Wenn sie das machen, dann haben sie 128x128 Rechenoperationen
Das heisst, sie müssen den speicherbereich durchgehen - 128x128 Jetzt müssen die alle durchgehen und müssen machen rot oder blau, je nachdem innerhalb des Quadrats oder ausserhalb, begrenzt durch a, b, c, d. Ecken mit kanten, (a,b), (b,c), (c,d), (d,a)
Gut. Wenn sie das durchlaufen ein Mal OK. angenommen das quadrat ändert seine Farbe ständig 25x pro Sekunde. Das Programm was sie haben macht anders. Dann lassen sie das die Graphikkarte machen
Sie senden, a, b, c, d und blau und rot. Jetzt geht die Graphikkarte die Pixel durch
Jetzt müssen sie in ihrem Programm keine schleife machen, mit 128x128 durchlaufen
eine geschachtelte, aussen 128, innen 128
Sie senden per DMA und per IN/OUT nur a, b, c, d und rot und blau
So, jetzt haben sie ein Problem. Sie können lauter Punkte senden, a, b,c, d, e, f, g, ...
Wenn die welt so einfach wäre.
Jetzt wo die Graka programme ausführt. schicken sie doch einfach das Programm rüber, wie
ldi r16, 0xff add r15, r15, r15 |
Und dann nehmen sie DMA - Sie schreiben Das Programm, es ist 512 kByte. Tun es an die DMA Addresse die Graka übernimmt es, und lässt es laufen. Und - was die Shedder Einheit
Es gibt halt typisch graphische Problem. Antialising. Müssen sie nicht verstehen
Wenn sie Geraden zeichnen, dann haben sie Pixel und sie machen eine Schräge. s Dann haben sie
x, y x+1, y+1 x+2, y+2 ... |
Das ist eine typische aufgabe der Graphikkarte, was die selber macht, das müssen sie nicht machen
Das ist so zu sagen, darauf ist die spezialisiert. Ansonsten führt die ganz normale Programme in ihrem RAM aus, die im RAM der CPU vom Computer sind und per DMA 512 kByte zum Beispiel in den RAM der Graka geladen werden. Werden ausgeführt und spezialisiert ist sie auf Antialysing z.b.
fertig