Schreiben Sie Grafiken Pixel in 16-bit-Montage
Ich versuche, mich zu entwickeln, mein eigenes, sehr grundlegende Betriebssystem für pädagogische Zwecke. Während die Kodierung der kernel, ich habe versucht, legen Sie Farbe auf einige Pixel auf dem Bildschirm, um es besser Aussehen, aber ich nicht.
Ich verwendet INT 10h
mit AH = 0CH
mit der video-Modus 13h
(320x200 Grafik, 256 Farben, 1 Seite) und habe versucht, einige andere Modi wie 01h
und 03h
aber Sie funktionieren nicht.
Dies ist mein vollständiger code:
;set video mode
mov ah, 00h
mov al, 13h
int 10h
;write pixels on screen
mov ah, 0ch
mov bh, 0
mov dx, 5
mov cx, 5
mov al, 0100b
int 10h
Was ist falsch an meinem code?
- Umm, video-Modus 03h ist ein Textmodus mit 80 Spalten und 25 Zeilen. Sie sagen, Sie wollen Modus 13h (und Sie tun), aber dein code sagt 03h.
- Ich denke, 16b VGA-es kann sicher davon ausgegangen werden, diese ist x86, aber tag und vollständige info würde definitiv helfen.
- ich verwendet
13h
dann versucht, mehrere Modi, und wenn ich es kopiert den code hier habe ich vergessen zu ändern, den Modus des Modus, den ich bereits in der Frage..ich werde Bearbeiten Sie die Frage und ändern Sie es - ich habe versucht, verschiedene Farben, aber es druckt keine nichts
- seine x86 ja, aber ich habe vergessen zu erwähnen, dass in der Frage, sorry
- ich vergaß zu erwähnen, dass in der Frage
- Sind Sie sicher, dass Ihre komplette komplette code? Erzählen Sie uns etwas über den compiler, den Sie verwenden.
- sicher ist es nicht der vollständige code, es ist ein kernel, so ich kann nicht nach eine von Hunderten von Zeilen, um Fragen über einfach mal ein bisschen code, ich bin mit nasm und testen Sie meinen kernel auf bochs
- So kann man irgendwie bestätigen der Modus geändert wird? Finden Sie den LCD-info-box? Die Auflösung oder vertikale/horizontale freq. wird wahrscheinlich ganz anders aus native-Modus. Und 13h-Modus verfügt über die Bildwiederholfrequenz auf 60 Hz. Wenn der Modus eingestellt ist, können Sie versuchen, zeichnen von Pixeln direkt in den VRAM. (unter DOS zugeordnet ist
a000:0000
für 13h-Modus, aber ich bin mir nicht sicher, wie wirkt sich dies auf Ihre eigenen operating system, wenn Sie Karte-VGA-Speicher ersten, oder das BIOS machen das für Sie). - Löschen Sie die meisten von Ihr Hunderte von Zeilen und lassen Sie nur den notwendigen code, um eine pixel-Sie sehen, bis Sie auf dem Bildschirm.
- Haben Sie sichergestellt, dass diese code-Zeilen sind tatsächlich erreicht wird, z.B. durch single-stepping mit dem Bochs internen debugger? (Nur Urteil heraus Ursachen hier.)
- Coole Idee, es wird mir helfen, herauszufinden, wo ist das falsch..danke
- Nein, aber ich werde versuchen, dies jetzt zu tun
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten:
Dein code funktioniert im DOS (getestet in
dosbox
auf meinem linux-Rechner).Also war es entweder nicht erreicht (problem mit dem boot-Prozess und den code vor das Stück), oder Ihre set-up von kernel/Umwelt verhindert
int 10h
BIOS-interrupt zu arbeiten (nicht, Sie zu zerstören IVT-Zufall?). Oder vielleicht ist dein bootloader ist bereits über 510B Größe, so dass der boot-Sektor nicht Aussehen, wie Sie es erwarten?Gemäß dieser wiki über Bootloader wie es aussieht, wenn Sie in den ersten Sektor auf der Festplatte Ihren eigenen code (oder in diesem Beispiel), und markieren Sie es mit 0xAA55 am Ende des Sektors, sollte es funktionieren (und es wird wahrscheinlich zu einem Absturz nach drücken der Taste am Ende).
Sie können auch versuchen, Ihrem Beispiel der bootloader (das schreiben von "hello world").
Testen direktes schreiben in das VRAM können Sie einen code wie diesen (funktioniert in dosbox auf meinem linux-Rechner, so dass, wenn Sie Ihre OS setzt, ähnlich 16b-Umgebung und ermöglicht das BIOS-interrupts):
palette.asm:
mov es:[di],ax
&mov es:[di+2],ax
&mov es:[di+4],al
.. es sagt "ungültige Kombination von opcode und Operanden"mov [es:di],ax
etc (mit dem segment innerhalb der eckigen Klammern).int 10h
zum einrichten des Modus, so dass direkte VRAM Zeichnung ist eigentlich die Lehre etwas neues. Auch ich denke, dass es etwas Freude in Ihr eigenes Grafik-Effekte... : -) Lernens ASM auf x86-kann kaum besser werden.es:
fix und Hinzugefügt gfx-Modus einrichten + exit-code, ansonsten kein problem gefunden) (ich habe NASM 2.11.05 in Kubuntu 15.04 linux). So sollten Sie wahrscheinlich konzentrieren sich auf den boot-Prozess und einrichten von kernel/Umgebung. Vielleicht hat dein original-code zeichnen der pixel wurde nicht einmal erreicht? Leider hab ich nie meine eigenen boot-Sektor + kernel, also habe ich keine Ahnung über mögliche Probleme gibt.Dem folgenden code wird ein pixel in rot. Farbe, nr, 4 nämlich. Kompilieren Sie es mit NASM, dann funktioniert es.