tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
1057
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    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!
    Geändert von FishHead (14.11.03 um 15:39 Uhr)
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  2. #2
    chibisuke chibisuke ist offline Mitglied Brillant
    Registriert seit
    Sep 2003
    Beiträge
    807
    mit bildschirmmode 0C wirste da nicht viel glück haben...

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

    dann gehts auch
     

  3. #3
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    Ups! Danke
    Ich tests gleich mal
    Aber heißt das nicht mov AL, 13h?
    Geändert von FishHead (11.11.03 um 14:22 Uhr)
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  4. #4
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    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
    Geändert von FishHead (11.11.03 um 16:32 Uhr)
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  5. #5
    chibisuke chibisuke ist offline Mitglied Brillant
    Registriert seit
    Sep 2003
    Beiträge
    807
    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:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    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
    Geändert von chibisuke (11.11.03 um 16:56 Uhr)
     

  6. #6
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    Wow, danke! werd ich mal sofort testen!
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  7. #7
    chibisuke chibisuke ist offline Mitglied Brillant
    Registriert seit
    Sep 2003
    Beiträge
    807
    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
     

  8. #8
    Lampe Lampe ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Beiträge
    106
    Original geschrieben von FishHead
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    
    ; 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

    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 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
     

  9. #9
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    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?
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  10. #10
    Retlaw Retlaw ist offline Mitglied Platin
    Registriert seit
    Jul 2003
    Ort
    Bayern
    Beiträge
    508
    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.
     

  11. #11
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    Aaaaaaalso: Ich benutze NASM und habe ein buch namens:Programmiersprache 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.
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  12. #12
    Retlaw Retlaw ist offline Mitglied Platin
    Registriert seit
    Jul 2003
    Ort
    Bayern
    Beiträge
    508
    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
     

  13. #13
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    Ü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?
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

  14. #14
    chibisuke chibisuke ist offline Mitglied Brillant
    Registriert seit
    Sep 2003
    Beiträge
    807
    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
     

  15. #15
    FishHead FishHead ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    13
    Boaaaa genial! Muss ich sofort testen!
     
    Athlon64 3700+
    3GB RAM DDR400
    240GB RAID
    Nforce3
    Radeon9800XT
    ----------------------
    Mein TraumPC

Ähnliche Themen

  1. » Open Office [OpenOffice] Grafik nicht darstellbar
    Von Marius2706 im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 02.07.10, 23:26
  2. IE7 zeigt Grafik nicht an
    Von Melways im Forum Photoshop
    Antworten: 12
    Letzter Beitrag: 29.01.10, 15:28
  3. Grafik wird nicht dargestellt [VC++]
    Von Trombo79 im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 23.07.08, 13:29
  4. hintergrund grafik erscheint nicht ?
    Von Stephan Liebig im Forum CSS
    Antworten: 3
    Letzter Beitrag: 30.08.07, 23:04
  5. Grafik in php will nicht funktionieren
    Von php-beginner im Forum PHP
    Antworten: 18
    Letzter Beitrag: 06.10.05, 15:59