1
Lowlevel-Coding / VESA-Mode Cpp Kernel problem
« am: 12. March 2007, 14:55 »
Hi leute, ich hab ein kleines problem bzw eine frage.
Ich hab da einen Kernel, welcher vom realmode zum pmode springt und dann weiter in eine prozedur springt welche in c++ geschrieben ist,
wärend der kernel noch im rmode ist schalte ich schnell noch vesa (vbe) ein und will wenn ich dann in meiner c prozedur bin, inhalte auf dem bildschirm bringen.
Dafür habe ich ja beim initalisieren von VESA daten in die Vesastruktur geladen (ähm nahme ist mir gerade entfallen)
aber wie finde ich die adresse dieser struktur heraus?
Also das ist die struktur:
und das die prozedur vorm umschalten in den realmode:
Also kurz und knapp nochmal:
Wie kann ich auf Variabeln die im ASM code stehen von c++ aus zugreifen?
und sagt mal nebenbei, zeichen tue ich doch einfach wenn ich auf den speicherbereich vom video memory schreibe... oder?
danke für eure hilfe
Ich hab da einen Kernel, welcher vom realmode zum pmode springt und dann weiter in eine prozedur springt welche in c++ geschrieben ist,
wärend der kernel noch im rmode ist schalte ich schnell noch vesa (vbe) ein und will wenn ich dann in meiner c prozedur bin, inhalte auf dem bildschirm bringen.
Dafür habe ich ja beim initalisieren von VESA daten in die Vesastruktur geladen (ähm nahme ist mir gerade entfallen)
aber wie finde ich die adresse dieser struktur heraus?
Also das ist die struktur:
Code: [Auswählen]
Mode_Info:
ModeInfo_ModeAttributes dw 1
ModeInfo_WinAAttributes db 1
ModeInfo_WinBAttributes db 1
ModeInfo_WinGranularity dw 1
ModeInfo_WinSize dw 1
ModeInfo_WinASegment dw 1
ModeInfo_WinBSegment dw 1
ModeInfo_WinFuncPtr dd 1
ModeInfo_BytesPerScanLine dw 1
ModeInfo_XResolution dw 1
ModeInfo_YResolution dw 1
ModeInfo_XCharSize db 1
ModeInfo_YCharSize db 1
ModeInfo_NumberOfPlanes db 1
ModeInfo_BitsPerPixel db 1
ModeInfo_NumberOfBanks db 1
ModeInfo_MemoryModel db 1
ModeInfo_BankSize db 1
ModeInfo_NumberOfImagePages db 1
ModeInfo_Reserved_page db 1
ModeInfo_RedMaskSize db 1
ModeInfo_RedMaskPos db 1
ModeInfo_GreenMaskSize db 1
ModeInfo_GreenMaskPos db 1
ModeInfo_BlueMaskSize db 1
ModeInfo_BlueMaskPos db 1
ModeInfo_ReservedMaskSize db 1
ModeInfo_ReservedMaskPos db 1
ModeInfo_DirectColorModeInfo db 1
ModeInfo_PhysBasePtr dd 1
ModeInfo_OffScreenMemOffset dd 1
ModeInfo_OffScreenMemSize dw 1
und das die prozedur vorm umschalten in den realmode:
Code: [Auswählen]
;VESA MODE STARTEN
mov bx, 4108h ; VesaModus festlegen und in register ablegen
mov ax, 4f01h ; 4f = Statusflag, 01 VesaFunktion
mov di, Mode_Info; Ziel Index = Bereich Mode_info
int 10h; Grafik Interrupt um auf VESA zuzugreifen
mov ax, 4f02h ;funktion 2 von VESA, einschalten des Grafikmodus
int 10h; Grafik Interrupt um Grafikmodus zu initalisieren
Also kurz und knapp nochmal:
Wie kann ich auf Variabeln die im ASM code stehen von c++ aus zugreifen?
und sagt mal nebenbei, zeichen tue ich doch einfach wenn ich auf den speicherbereich vom video memory schreibe... oder?
danke für eure hilfe