Interrupt 10h

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Lord Stweccys

Betreff: Interrupt 10h

BeitragFr, Jun 18, 2010 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich beschäftige mich immoment mit Assembler, genauer mit Assembler für DOS.
Die Programme teste ich unter DosBox und das geht auch ganz gut. Cool
Nur irgendwie funktioniert mein Programm nicht, wenn ich Grafikbefehle per Interrupt 10h ausführen will.
Ich schreibe ein Programm, welches die Grafikauflösung ändert und einen farbigen Pixel hinzeichnet. Die Grafikauflösung ändert sich, aber sonst passiert nichts. Sad
Kennt sich jemand mit Dos, bzw. Interrupt 10h für DOS aus und kann mir sagen, ob ich irgendwas vergessen hab oder falsch mache.

Danke jetztschonmal Very Happy

Thunder

BeitragFr, Jun 18, 2010 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein bisschen Code wäre gut. Relevant ist wahrscheinlich eher der Pixel-Zeichnen-Teil. Ich kenne zwar Mode 10h nicht, aber ich werde Mal sehen, was ich tun kann.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Lord Stweccys

BeitragFr, Jun 18, 2010 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas in der Richtung:
Code: [AUSKLAPPEN]

ORG 100h  ;Wikipedia
 
mov ax, cs ;Wikipedia
mov ds, ax ;Wikipedia

mov ah,00h ;Videomodus setzen
mov al,13h
int 10h

mov ah,0Ch ;Pixel malen
mov cx,100
mov dx,100
mov al,16 ;Irgendein Wert, hier hab ich keine Ahnung
int 10h

 
mov ax, 4C00h ;Wikipedia
int 21h ;Wikipedia
 



Achtung: Das ganze muss unter DOS (unter Windows emuliert mit DosBox) ausgeführt werden; Unter Windows gibt es eine Fehlermeldung

Thunder

BeitragSa, Jun 19, 2010 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe den Code jetzt ein bisschen umgebaut und glaube nicht, dass du etwas vergessen hast. Ich habe das Pixelzeichnen durch eine Routine ersetzt, die den ganzen Hintergrund weiß macht:

Code: [AUSKLAPPEN]
org 100h
 
mov ax, cs
mov ds, ax

xor ah,ah
mov al,13h
int 10h

mov ah,0bh
xor bh,bh ; Vielleicht weil du das nicht drinnen hast?
int 10h

xor dx,dx
mov ah,0Ch
xor bh,bh
mov al,0x0F
outer_loop:
   mov cx,320
   inner_loop:
      int 10h
   loop inner_loop
   inc dx
   cmp dx,200
jle outer_loop

 
mov ax, 4C00h
int 21h

int 20h


Was ich mir nicht erklären kann ist, dass der Pixel (0|0) immer schwarz bleibt.


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Lord Stweccys

BeitragSa, Jun 19, 2010 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Äh, kurze Frage: Was bringt dieses Xor bh,bh bzw. Xor dx,dx?

Thunder

BeitragSa, Jun 19, 2010 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sind nur andere Schreibweisen für mov bh,0 und mov dx,0, die aber weniger Speicher verbrauchen (1 Byte, statt 2):

Code: [AUSKLAPPEN]
 XOR:
10011101
10011101
--------------
00000000
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Lord Stweccys

BeitragSa, Jun 19, 2010 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, genial Very Happy
Sicherlich gut zu Wissen.

Danke nochmal, du hast mir sehr geholfen. Smile

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group