# Grafik in OS. . .  nicht!



## FishHead (10. November 2003)

*Grafik in OS...   nicht!*

Hallo!
Ich bin neu hier aber kenn euer Forum schon seit längerem. Über das OS tutorial  ich angefangen asm zu lernen. Und morgen kommt warscheinlich auch mein "PC Intern 5.0". Vielleicht kennts ja jemand. Also ich  mal ne Frage zu meinem billigOS, Helix! Ich wollte mal über 10h einen pixel malen, also nicht in den grafikspeicher einimpfen-und dann kommt nur dieser Strich da: _ Bitte helft mir ! Ach übrigens: Dies hier ist nur der Kernel! Der Loader geht soweit...

; Kernel ist auf 0800:0000 geladen
ORG 0000h

JMP start
print_string:
		lodsb                   ; lade das Byte auf ds:si in al
                or al,al                         ; teste ob der character 0 ist(Ende)
                jz done
                mov ah,0eh              ; put character
                mov bx,0007             ; Attribut
                int 0x10                     ; rufe BIOS auf
                jmp print_string
done:
		ret
;==== data section =====================

; message:
		msg  DB 'Willkommen zu Helix!', 13, 10		
;======================================
clear_screen:
		MOV AH, 00h
		MOV AL, 0Ch
		INT 10h
	ret
start:
	; data segment:
		PUSH    CS
		POP     DS
	; setzte auf: 640*480*16:
		MOV     AH, 00h
		MOV     AL, 0Ch
		INT     10h
	; clear screen:
		CALL    clear_screen
;die message
		MOV     SI, msg
		CALL    print_string
		CALL getkey
		MOV AH, 0Ch
		MOV DX, 20
		MOV CX, 30
		MOV AL, 05h
		INT 10h
		HLT
		CALL getkey
		Call reboot




getkey:
                mov ah, 0               ; Warte auf Tastendruck
                int 016h
                ret


reboot:

               db 0EAh                 ; Maschinensprache um auf FFFF:0000 
                                        ;(reboot) zu springen

                dw 0000h
                dw 0FFFFh

DANKE!


----------



## chibisuke (10. November 2003)

mit bildschirmmode 0C wirste da nicht viel glück haben...

setz also erstmal einen entsprechenden mode
mov ax, 13h
int10h

dann gehts auch ;-)


----------



## FishHead (11. November 2003)

Ups! Danke
Ich tests gleich mal 
Aber heißt das nicht mov AL, 13h?


----------



## FishHead (11. November 2003)

Neee...  Geht leider nicht! Weder mit ax noch al Immer nur dieses blinkende '_' ! Aber: Ich hab jetzt eine andere Möglichkeit gefunden pixel zu malen


----------



## chibisuke (11. November 2003)

also...
1.) mov ax, 13h
ist das gleiche wie
mov ah, 0h
mov al, 13h
2.)
des weiteren ist in der mode table für VGA genau definiert das der mode 640x480x16 als 0x12 also 12hex angesprochen wird... 
13h is ähnlich,, das is 320x200x256
0Ch = reserved for internal use of the EGA Bios

die genaue tabelle ist nachzulesen unter http://www.ctyme.com/intr/rb-0069.htm

3.)
Das erste was du machen musst befor du irgend eine codestück aufrufst das graphik zeichnet, musst du den graphikmodus richtig setzen, wie aus 2.) herforgeht ist 0Ch kein allgemein benutzbarer modi, dem zu folge kann dein code nicht funktionieren..

entsprechend empfehl ich dir mal mode 12h oder 13h zu setzen
mov ax, 12h
int 10h
und dann kannst du auch problemlos deine pixel setzen

4.) dein stück code schreibt außerdem versehendlich auf page 07h!
also setz bitt bl = 0

5.) textausgabe im graphimodus kommt immer gut, tu also erstmal die textausgabe raus...

und dann sieht der kernel wohl eher so aus:


```
org 0000h

jmp start
clear_screen:
    mov ax, 12h
    int 10h
    ret

start:
    push cs
    pop ds
    call clear_screen

    mov ah, 0Ch
    mov dx, 20
    mov cx, 30
    mov al, 05h
    xor bl, bl 
    int 10h

    call getkey
    call reboot

getkey:
    mov ah, 0
    int 16h
    ret

reboot:
    db 0EAh
    dw 0000h
    dw 0FFFFh
```


----------



## FishHead (11. November 2003)

Wow, danke! werd ich mal sofort testen!


----------



## chibisuke (11. November 2003)

Ich hoffe es funktioniert, hab es selbst nicht ausprobiert, aber bereits auf dem gebiet reichlich erfahrung, als ich nen bootmanager programmiert hab gesammelt von daher...

Denk aber bitte daran, wenn du mit dem code weiter arbeitest das du auf die art und weise nur 1MB arbeitsspeicher ansprechen kannst, willst du mehr musst du dich mit dem protected mode auseinander setzen....und dementsprechend auch mit eigenen graphikangelegenheiten ;-)


----------



## Lampe (13. November 2003)

*Re: Grafik in OS...   nicht!*



> _Original geschrieben von FishHead _
> 
> ```
> ; Kernel ist auf 0800:0000 geladen
> ...




Ich will echt nicht meckern, aber dieser Code sieht so aus wie jeder andere realmode os loader auch. Und da redet jeder noch, vom selber lernen und selbst programmierten obwoll man wirklick eindeutig sieht dass das verdammt noch mal der identische Code ist wie zig andere auch verwenden und in zahlreichen Tutorials veröffentlicht ist.

Schon mal was vom selbst entwickeln gehört...

Klar, es gibt zahlreiche Beispiele OS's, wenn ich ich nur an http://www.osdev.org denke, aber wird nicht allein schon aus dieser Tatsache klar, dass die Welt nicht noch ein OS brauch. Sicher du schreibst es zum "lernen" -> bzw. kopierst dir viel zusammen, aber gib es auf. Es werden viele Probleme kommen bei dennen du schnell die Lust verlierst.

- intreruppthandling
- protected mode (oder soll es nur ein kack dos werden?)
- speicher verwaltung
- acpi
- grafik (nen schönes X)
- netzwerk
- und vieles mehr...


Ich will damit nur sagen, gib es auf!

mfg
Christian Ries


----------



## FishHead (13. November 2003)

Ja stimmt schon, ich hab den Loader aus einem anderen OS und den kernel auch hauptsächlich aus anderen Tutorials, und die grafikfunktion aus einem buch. das war auch nur mal so zum experimentieren, wie das denn so funktionert. Schliesslich hab ich ja auch nie gesagt dass ich mit meinem os geld verdienen will, eigentlich mach ich das ja nur zum spaß, bzw um assembler zu lernen! Und noch was: Wenn das sowas schlimmes ist, sich ein tutorial zur Hilfe zu nehmen, wozu sind die denn dann da? Für irgendwelche profis, die schon selber wissen wies geht?


----------



## Retlaw (13. November 2003)

Nicht entmutigen lassen, hauptsache es macht Spaß  

Mit welchen Tutorials und Tools hast du denn angefangen Assembler und OS-Programmierung zu lernen ? Ist ein Thema das mich auch mal interessieren würde.


----------



## FishHead (13. November 2003)

Aaaaaaalso: Ich benutze NASM und habe ein buch namensrogrammiersprache Asssembler von Reiner Backer. Die Tutorials hab ich mir irgendwo aus ganz vielen seiten und links zusammengeklaut (ich habe mittlerweile ein ganzes archiv aus dokus, pdfs, OS's...), aber schau mal unter objectsos:de:vu! Dort sind tolle Links. Du sagtest 'Tools'- also ich hab nur Rawrite4Windows und BMP2ASM, sonst nichts.


----------



## Retlaw (14. November 2003)

Danke, werd mir das mal anschauen.
Mein erster Versuch Assembler zu lernen scheiterte daran das kein Freeware Assembler das erste Beispiel aus meinem Buch akzeptieren wollte


----------



## FishHead (14. November 2003)

Übrigens: An alle die TASM haben wollen und kein geld dafür ausgeben wollen: http://www.triadaos.narod.ru/toolkit.htm! Da hat irgendjemand zu seinem OS Tasm reingestellt! Habs aber noch nicht getestet. @Chibisuke: Du hattest vor dem datencrash geschrieben, dass du ein tutorial über p.mode und noch so ein paar andere sachen schreiben würdest-machst du das jetzt wirklich?


----------



## chibisuke (14. November 2003)

jep

hab mal n wenig angefangen was zu machen, ich zeig einfach mal...

im ersten Teil zeige ich wie man mithilfe des protected mode in den Unrealmode schaltet, das ist Vorraussetzung für den nächsten Teil, in dem DMA benutz wird um den Kernel in den Speicher zu laden..
wie die GDT aufgebaut ist und andere Fragen die unbeantwortet blieben, werden im nächsten Teil hoffendlich beantworten..

http://chibisuke.dnsalias.com/pmode1.txt


----------



## FishHead (15. November 2003)

Boaaaa genial! Muss ich sofort testen!


----------



## chibisuke (15. November 2003)

Klar mach das... ich hoffe du verzeihst mir die rechtschreibfehler... hatte absolut noch keine zeit es korrektur zu lesen...


----------

