Hi Leute,
ich habe mir das super Tutorial über den VGA-Modus durchgelesen und bin begeistert. Ich kann jetzt in den Vesa-Mode schalten, sowohl in Windows als auch in meinem (ASM-)Kernel. Leider bleiben noch folgende Fragen offen:
- wie kann ich einzelne Pixel "anmalen"
- wie schreibe ich Text?
- wie portiere ich folgenden (nach dem Vesa-Tutorail erstellten) Asm-Code in C / C++?
VbeInfoBlock:
        VbeSignature            db      'VBE2'          ; 4 Bytes
        VbeVersion              db      0, 0
        VbeOEMStringPtr         db      0, 0, 0, 0
        VbeCapabilities         db      0, 0, 0, 0
        VbeVideoModePtr         db      0, 0, 0, 0
        VbeTotalMemory          db      0, 0
        VbeOEMSoftwareRev       db      0, 0
        VbeOEMVendorNamePtr     db      0, 0, 0, 0
        VbeOEMProductNamePtr    db      0, 0, 0, 0
        VbeOEMProductRevPtr     db      0, 0, 0, 0
        VbeReserved times 222   db 0
        VbeOEMData times 256    db 0
VbeModeInfoBlock:
        VbeModeModeAttributes           db      0, 0
        VbeModeWinAAttributes           db      0
        VbeModeWinBAttributes           db      0
        VbeModeWinGranularity           db      0, 0
        VbeModeWinSize                  db      0, 0
        VbeModeWinASegment              db      0, 0
        VbeModeWinBSegment              db      0, 0
        VbeModeWinFuncPtr               db      0, 0, 0, 0
        VbeModeBytesPerScanLine         db      0, 0
        VbeModeXResolution              db      0, 0
        VbeModeYResolution              db      0, 0
        VbeModeXCharSize                db      0
        VbeModeYCharSize                db      0
        VbeModeNumberOfPlanes           db      0
        VbeModeBitsPerPixel             db      0
        VbeModeNumberOfBanks            db      0
        VbeModeMemoryModel              db      0
        VbeModeBankSize                 db      0
        VbeModeNumberOfImagePages       db      0
        VbeModeReserved_page            db      0
        VbeModeRedMaskSize              db      0
        VbeModeRedMaskPos               db      0
        VbeModeGreenMaskSize            db      0
        VbeModeGreenMaskPos             db      0
        VbeModeBlueMaskSize             db      0
        VbeModeBlueMaskPos              db      0
        VbeModeReservedMaskSize         db      0
        VbeModeReservedMaskPos          db      0
        VbeModeDirectColorModeInfo      db      0
        VbeModePhysBasePtr              db      0, 0, 0, 0
        VbeModeOffScreenMemOffset       db      0, 0, 0, 0
        VbeModeOffScreenMemSize         db      0, 0
        VbeModeLinBytesPerScanLine      db      0, 0
        VbeModeBnkNumberOfPages         db      0
        VbeModeLinNumberOfPages         db      0
        VbeModeLinRedMaskSize           db      0
        VbeModeLinRedFieldPos           db      0
        VbeModeLinGreenMaskSize         db      0
        VbeModeLinGreenFieldPos         db      0
        VbeModeLinBlueMaskSize          db      0
        VbeModeLinBlueFieldPos          db      0
        VbeModeLinRsvdMaskSize          db      0
        VbeModeLinRsvdFieldPos          db      0
        VbeModeMaxPixelClock            db      0, 0, 0, 0
        VbeModeReserved db 0 times 190       db      0
mov     ax,     0x4F00
mov     di,     VbeInfoBlock
int     0x10
mov     ax,     0x4F01
mov     di,     VbeModeInfoBlock
mov     cx,     0x4105
and     cx,     0xFFF
int     0x10
mov     ax,     0x4F02
mov     bx,     0x4101
int     0x10
mov     edi,    [VbeModePhysBasePtr]
mov     ecx,    640 * 480
mov     eax,    0xCC
rep     stosd
Danke im Voraus.
MfG, Scorpion!