Assembler usw

Ja der code ist realmode bzw v86 code... nasm = nasmw...die executeable von nasm heißt nasmw.exe daher...

linien zeichnest du indem du die entsprechenden pixel der linie auf die entsprechende farbe stellst, was anderes gibt es soweit ich weiß auf assembler ebene nicht.. es gibt zwar entsprechende codestücke die das übernehmen.. ich setz mich in den nächsten tagen mal hin und such mal meine graphikbibliothek raus die ich damals geschrieben hab....

tatsächlich macht auch windows intern das mit einer schleife wie auch alle anderen systeme...
 
Zuletzt bearbeitet:
Hi Leute

Ich habe jetzt schon etwas mit den Modus 13 gearbeitet (320x200Pixel 256Farben)

Weiß jemand wie man mit den modus 12 arbeitet (640x480Pixel 16Farben)
habt ihr vieleicht ein Beispiel?
Kann man unter den Modus auch mit Tricks 256Farben nehmen?

ach so, hat jemand ein Programm mit denen man BMP oder JPG usw in einen ASM code umwandeln kann?
So das man nicht alle Pixel einzel setzen muss;)

Danke
 
was die 256 farben im 16farben-modus angeht bezweifel ich, dasses geht(ich weisse aber nich ;) )
aber was die bmp-files unter assembler angeht wüsstichs auch gerne.. ich hab mir MirageOS gesaugt.. und dabei sind die icon's auf dem desktop auch als bmp gespeichert (zumindest in der nicht-compileten version....leider weissich nich, obs compiled aus so is, da ich geine version gefunden hab, wo nur die fertig-compileten sachen dabei sind)...
kann plz nochma jemand posten, wie der ADD befehl richtig lautet ?
weil ichs irgendwie ned zum laufen bekomme ...mein code sieht folgendermaßen aus:

pixelnummer db 1

ADD pixelnummer, 2

...da kommt aber eine fehlermeldung ;(
 
Ich bin mir nicht sicher!
Ich Programmiere mit assembler erst seit ein paar wochen
und habe probiert das mit den Pixel zu setzen hinzubekommen. (was jetzt auch im modus 13 klapt)
Jetzt probiere ich erst das andere alles;)

Probier es mal so:

MOV ax, pixelnummer ;Setz Pixelnummer in AX
ADD ax, 1 ;Erweitere AX um eins
MOV pixelnummer, ax ;Setze AX in Pixelnummer

:(
Ich glaube, so war es mal in einen Beispiel erklärt, das man es erst in einen Register verschieben muss!
Falls es falsch ist würde ich mich auch um eine richtige antwort freuen
 
;)..der scheint ja zu funzen... (eigentlich hättich ja auf den compiler auch selber kommen müssen ...hab nämlich nen TI-83 ...und insofern binnich oft auf der page..)
also..schon ma ..aber wie rufich die damit erstellte asm-file denn dann in assembler auf? ;)
 
Hey coolyo

Das gleiche habe ich gerade auch probiert, leider ist kein Beispiel aufruf da
Wäre super wenn jemand helfen würde!
Oder ich muss ein Editor Programmieren mit den man Bilder Zeichnet und es in ASM Befehle umwandelt (mit Farben) das wird aber noch lange dauern:(
 
So ich habe mich gerade mal an den screen mode 12 herren gesetzt
Code:
	mov ax,0x0012		;12h = 640x480 16
	int 10h			
        mov bx,0xA000  
        mov es,bx          	 
	
	
	mov ecx,0x00		
        mov al,16
	mov byte [es:ecx],al  		

	mov ecx,0x00		
	mov al,1
	mov byte [es:ecx+646],al  
	mov ecx,eax

Eigentlich müsste der erste Pixel eine andere Farbe als Pixel Zwei haben, geht aber nicht?
Mit Screen 13 mode hat es funkz

Kann jemand dieses Beispiel mit anderen Farben machen?
 
also um bmp dateien auf den screen zu bringen ist es relativ einfach...

die BMP datei wird in den speicher geladen, dann überspringst du den BMP header (siehe BMP format spezifikationen)

und dann brauchst du das bild nur noch mit 2 schleifen in den graphikspicher blitten...

im prinzip ist das bild dann ein array als pixeln in der BMP datei..
entsprechend wenn du ein 320x200 pixel großes bild hast, so gehst du her
und sagst du hast das bild aus der datei nun in geladen und nennnst das array bild1
Code:
mov ecx, 64000
_loop1:
mov eax, _bild1
add eax, ecx
mov bl, [ds:eax]
mov byte [es:ecx], bl
loop _loop1

ob das nun im einzelnen mit der dereferenzierung stimmt, weiß ich jetzt net genau, müsst ich ausprobieren..


im mode 12 arbeitet man mit bitmasken...
erstmal setzt du nur schwarz oder weiß, und jedes pixel entspricht einem bit
nun musst du wenn du andere farben haben willst mit hilfe der graphikregister das plane wechseln und dort das selbe wieder machen.. insgesamt sinds 4 planes daher 16 farben.. das ist allerdings relativ komplex also hab ich mich damit eigendlich nie richtig beschäftigt.
am besten guckt ihr dafür mal in den beschreibungen zum int 10h
siehe funktion 10XX

die hächsteauflösung die direkt im realmode benutzt werden kann ist irgendwas mit 2100 oder so...

wenn ihr über die normalen VGA auflösungen hinaus gehen wollt so müsst ihr euch mit dem VESA standart befassen, erwähnt sei das hier 64KB graphikspeicher nicht mehr ausreichen, aber der addressbereich nur 64KB hatt, entsprechend kommt ihr um s.G. bankswitches nicht herum...
das heißt ihr schreibt zuerst einen teil des graphikspeichers voll mit eurem bild, dann ruft ihn n VESA interupt (über int10h) auf und schaltet die speicherbank um, dann muss man wieder den selben speicherbereich beschreiben nur mit dem unterschied das es n anderer bereich des displays ist...
für näheres dazu siehe bitte int10h funktion $4F00 - $4F0C
sollte jemand auf die idee kommen das im PMode versuchen zu wollen muss er mit dem entsprechenden bios interupt das VESA Protected Mode Interface laden und über die funktionspointer zugreifen.
 
Hi chibisuke

kannst du vielleicht mein Beispiel so um schreiben das einer von den Zwei Punkten eine andere Farbe hat?

Wenn ich das alles als Beispiel habe, kapiere ich es schneller als wenn ich mehrere Seiten durch lesen muss;) !

Danke
 
Zurück