亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vesa20.inc

?? MenuetOS是一個用匯編開發的32/64位PC操作系統
?? INC
?? 第 1 頁 / 共 2 頁
字號:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                        ;;
;;  VESA20.INC                                            ;;
;;                                                        ;;
;;  Vesa 2.0 functions for MenuetOS                       ;;
;;                                                        ;;
;;  Copyright 2002 Ville Turjanmaa                        ;;
;;  Alexey, kgaz@crosswindws.net                          ;;
;;  - Voodoo compatible graphics                          ;;
;;  Juan M. Caravaca                                      ;;
;;  - Graphics optimimizations eg. drawline               ;;
;;                                                        ;;
;;  See file COPYING for details                          ;;
;;                                                        ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
; If you're planning to write your own video driver I suggest
; you replace the VESA12.INC file and see those instructions.
   
ScreenWidth             equ     0xfe00
ScreenHeight            equ     0xfe04
BytesPerScanLine        equ     0xfe08
LFBAddress              equ     0xfe80
ScreenBPP               equ     0xfbf1
WinMapAddress           equ     0x400000
   
   
vesa20_read_screen_pixel:
   
     and        eax, 0x3FFFFF
     shl        eax, 2
   
     cmp        byte [ScreenBPP], 24      ; 24 or 32 bpp ?
     jz         .no24bpp
   
     shr        eax, 2
     lea        eax, [eax+eax*2]
   
.no24bpp:
   
     add        eax, [LFBAddress]
     mov        eax, [eax]
     and        eax, 0x00ffffff
     ret
   
; getpixel
;
; in:
; eax = x coordinate
; ebx = y coordinate
;
; ret:
; ecx = 00 RR GG BB
   
getpixel:
        push    eax
        push    ebx
        push    edx
        push    edi
        call    dword [0xe024]
        pop     edi
        pop     edx
        pop     ebx
        pop     eax
        ret
   
Vesa20_getpixel24:
        ; eax = x
        ; ebx = y
        imul    ebx, [BytesPerScanLine]    ; ebx = y * y multiplier
        lea     edi, [eax+eax*2] ; edi = x*3
        add     edi, ebx         ; edi = x*3+(y*y multiplier)
        add     edi, [LFBAddress]    ; ebx = where pixel is in memory
        mov     ecx, [edi]
        and     ecx, 0xffffff
        ret
   
Vesa20_getpixel32:
        imul    ebx, [BytesPerScanLine]    ; ebx = y * y multiplier
        lea     edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
        add     edi, [LFBAddress]    ; ebx = where pixel is in memory
        mov     ecx, [edi]
        and     ecx, 0xffffff
        ret
   
   
   
vesa20_putimage:

        call    disable_mouse
   
        mov [novesachecksum],dword 0
        push ebp ;
   
        mov     esi, ebx
   
        xor     ebx, ebx
        mov     bx, dx          ; ebx := y
        shr     edx, 16         ; edx := x
   
        mov     eax, [0x3010]
        add     edx, [eax-twdw]  ; edx+=Xwin
        add     ebx, [eax-twdw+4]; ebx+=Ywin
   
        mov     edi, ebx        ; edi:=(y+Ywin)
        imul    edi, dword [BytesPerScanLine]  ; edi:=BPScanLine*(y+Ywin)
   
        mov     ebp, ebx        ; ebp:=(y+Ywin)
        imul    ebp, [ScreenWidth]
        add     ebp, ebx        ; (ScreenXSize+1)*(Y+YWin)
                                ; +(x+Xwin)+AddrBuffer
   
        lea     edi, [edi + edx*4]  ; edi += (X+XWin)*4
   
        lea     ebp, [ebp + edx + WinMapAddress] ; ebp:=(y+Ywin)*(SXSize+
                                                 ; +(x+Xwin)+AddrBuffer
        add     edi, [LFBAddress]
   
        xor     ebx, ebx        ; ebx:=H
        mov     bx, cx
        shr     ecx, 16         ; ecx = B
        mov     eax, ecx
        shl     ecx, 2          ; ecx *= 4
   
        cmp     byte [ScreenBPP], 32
        jz      .bpp32
   
        ; corrections for 24 bpp
        sub     edi, edx
        sub     ecx, eax
   
.bpp32:
   
        ; ecx:=B*PytesPerPixel
        ;mov esi,[esp+8] ; esi:=AddrImg
   
        ; check limits while draw ?
   
        push    ebx
   
        mov     edx, [0x3010]
   
        cmp     dword [edx+draw_data-0x3000+0], 0
        jnz dbcblimitlset2
   
        cmp     dword [edx+draw_data-0x3000+4], 0
        jnz dbcblimitlset2
   
        mov     ebx, [edx+draw_data-0x3000+8]
        cmp     ebx, [ScreenWidth] ; ecx <> Screen X size
        jnz dbcblimitlset2
   
        mov     ebx, [edx+draw_data-0x3000+12]
        cmp     ebx, [ScreenHeight] ; ecx <> Screen Y size
        jnz dbcblimitlset2
   
        mov     bh, 0
   
        jmp dbcblimitlno2
   
      dbcblimitlset2:
   
        mov     bh, 1
   
      dbcblimitlno2:
   
        mov     bl, [edx+0xe]
   
        cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ?
        jz pi24bit
        jmp pi32bit
   
   
; eax = B
; ecx = B*PytesPerPixel
; edx = 0x3010
; esi = ptr to image data
; edi = ptr to screen where begining painting
; ds:ebp = ptr to windows map
; bh = 0 force
;      1 not force
; bl = window ID on windows map
   
pi24bit:
   
   
      .RenderBlock:
   
        push edi
        push esi
        push eax
        push ebp
   
        .RenderLine:
   
          cmp   bl,[ds:ebp]
          jnz   .imp24no
          cmp   bh, 0
          jz    .imp24yes
          call  voodoodbcplimit
          jnz   .imp24no
   
        .imp24yes:
   
          mov   edx, [esi]
          mov   [edi], dx
          shr   edx, 16
          mov   [edi+2], dl
   
        .imp24no:
   
          add   esi, 3 ; esi+=3 ptrImage+=3
          add   edi, 3 ; edi+=3 ptrScreen+=3
          inc   ebp
   
          dec   eax ; B--
          jnz   .RenderLine
   
      pop ebp
      pop eax
      pop esi
      pop edi
   
      add       edi, [BytesPerScanLine] ; ptrScreen+=BytesPerScanLine
      add       esi, ecx
      add       ebp, [ScreenWidth]
      inc       ebp
   
      dec       dword [esp]   ; H--
      jnz       .RenderBlock
   
      pop       ebx
      pop       ebp
   
      xor       eax, eax
      ret
   
   
pi32bit:
   
        sub     ecx, eax    ; ecx = B*4 - B = B*3
   
      .RenderBlock:
   
        push edi
        push esi
        push eax
        push ebp
   
        .RenderLine:
   
          cmp   bl,[ds:ebp]
          jnz   .imp32no
          cmp   bh,0
          jz    .imp32yes
          call  voodoodbcplimit
          jnz   .imp32no
   
        .imp32yes:
   
          mov   edx, [esi]
          mov   [edi], edx
   
        .imp32no:
   
          add   esi, 3 ; esi+=3 ptrImage+=3
          add   edi, 4 ; edi+=4 ptrScreen+=4
          inc   ebp
   
          dec   eax ; B--
          jnz   .RenderLine
   
      pop ebp
      pop eax
      pop esi
      pop edi
   
      add       edi, [BytesPerScanLine] ; ptrScreen+=BytesPerScanLine
      add       esi, ecx
      add       ebp, [ScreenWidth]
      inc       ebp
   
      dec       dword [esp]   ; H--
      jnz       .RenderBlock
   
      pop       ebx
      pop       ebp
   
      xor       eax, eax
      ret
   
   
putpixel:
   
; eax = x coordinate
; ebx = y coordinate
; ecx = ?? RR GG BB    ; 0x01000000 negation
; edi = 0x00000001 force

        mov  [novesachecksum], dword 0
   
        pusha
        test edi,1                 ; force ?
        jnz   drawok2
      noforce:
        call checkpixel
        cmp  ecx, 0
        jnz  ppr
      drawok2:
        cmp [ScreenWidth], eax
        jb  ppr
        cmp [ScreenHeight], ebx
        jb  ppr
      ppok:
        ; check if negation
        test ecx,0x01000000
        jz   noneg
        call getpixel
        not  ecx
        mov  [esp+32-8],ecx
      noneg:
        ; OK to set pixel
        call dword [0xe020]
      ppr:
        popa
        ret
   
   
Vesa20_putpixel24:
   
        ; eax = x
        ; ebx = y
   
        imul    ebx, [BytesPerScanLine]     ; ebx = y * y multiplier
        lea     edi, [eax+eax*2]  ; edi = x*3
        mov     eax, [esp+32-8+4]
        add     edi, [LFBAddress]
        add     edi, ebx          ; ebx = where to put pixel in memory
        mov     [edi], ax
        shr     eax, 16
        mov     [edi+2], al
   
        ret
   
   
   
Vesa20_putpixel32:
   
        ; eax = x
        ; ebx = y
   
        imul    ebx, [BytesPerScanLine]     ; ebx = y * y multiplier
        lea     edi, [ebx+eax*4]  ; edi = x*4+(y*y multiplier)
        mov     eax, [esp+32-8+4] ; eax = color
        add     edi, [LFBAddress]     ; ebx = where to put pixel in memory
        mov     [edi], eax
   
        ret
   
   
   
   
;-------------------------------------------------
calculate_edi:
        mov     edi, ebx
        imul    edi, [ScreenWidth]
        add     edi, ebx
        add     edi, eax
        ret
;-------------------------------------------------
; DRAWLINE
   
draw_line:

        call    disable_mouse

   
; draw a line
; eax = HIWORD = x1
;       LOWORD = x2
; ebx = HIWORD = y1
;       LOWORD = y2
; ecx = color
; edi = force ?
        pusha
   
dl_x1 equ esp+20
dl_y1 equ esp+16
dl_x2 equ esp+12
dl_y2 equ esp+8
dl_dx equ esp+4
dl_dy equ esp+0
   
        xor     edx, edx      ; clear edx
        xor     esi, esi      ; unpack arguments
        xor     ebp, ebp
        mov     si, ax        ; esi = x2
        mov     bp, bx        ; ebp = y2
        shr     eax, 16       ; eax = x1
        shr     ebx, 16       ; ebx = y1
   
        push    eax           ; save x1
        push    ebx           ; save y1
        push    esi           ; save x2
        push    ebp           ; save y2
   
        ; checking x-axis...
        sub     esi, eax      ; esi = x2-x1
        push    esi           ; save y2-y1
        jl      .x2lx1        ; is x2 less than x1 ?
        jg      .no_vline     ; x1 > x2 ?
        mov     edx, ebp      ; else (if x1=x2)
        call    vline
        push    edx    ; necessary to rightly restore stack frame at .exit
        jmp     .exit
.x2lx1:
        neg     esi            ; get esi absolute value
.no_vline:
   
        ; checking y-axis...
        sub     ebp, ebx       ; ebp = y2-y1
        push    ebp            ; save y2-y1
        jl      .y2ly1         ; is y2 less than y1 ?
        jg      .no_hline      ; y1 > y2 ?
        mov     edx, [dl_x2]   ; else (if y1=y2)
        call    hline
        jmp     .exit
.y2ly1:
        neg     ebp            ; get ebp absolute value
.no_hline:
   
   
        cmp     ebp, esi
        jle     .x_rules       ; |y2-y1| < |x2-x1|  ?
   
        cmp     [dl_y2], ebx   ; make sure y1 is at the begining
        jge     .no_reverse1
   
        neg     dword [dl_dx]
        mov     edx, [dl_x2]
        mov     [dl_x2], eax
        mov     [dl_x1], edx
        mov     edx, [dl_y2]
        mov     [dl_y2], ebx
        mov     [dl_y1], edx
   
.no_reverse1:
   
        mov     eax, [dl_dx]
        cdq                    ; extend eax sing to edx
        shl     eax, 16        ; using 16bit fix-point maths
        idiv    ebp            ; eax = ((x2-x1)*65536)/(y2-y1)
        mov     edx, ebp       ; edx = counter (number of pixels to draw)
        mov     ebp, 1 *65536  ; <<16   ; ebp = dy = 1.0
        mov     esi, eax       ; esi = dx
   
        jmp     .y_rules
.x_rules:
   
        cmp     [dl_x2], eax    ; make sure x1 is at the begining
        jge     .no_reverse2
   
        neg     dword [dl_dy]
        mov     edx, [dl_x2]
        mov     [dl_x2], eax
        mov     [dl_x1], edx
        mov     edx, [dl_y2]
        mov     [dl_y2], ebx
        mov     [dl_y1], edx
   
.no_reverse2:
   
        xor     edx, edx
        mov     eax, [dl_dy]
        cdq                    ; extend eax sing to edx
        shl     eax, 16        ; using 16bit fix-point maths
        idiv    esi            ; eax = ((y2-y1)*65536)/(x2-x1)
        mov     edx, esi       ; edx = counter (number of pixels to draw)
        mov     esi, 1 *65536  ;<< 16   ; esi = dx = 1.0
        mov     ebp, eax       ; ebp = dy
   
.y_rules:
   
        mov     eax, [dl_x1]
        mov     ebx, [dl_y1]
        shl     eax, 16
        shl     ebx, 16
   
.draw:
        push    eax
        push    ebx
   
        shr     eax, 16
        shr     ebx, 16
        call    putpixel
   
        pop     ebx
        pop     eax
   
        add     ebx, ebp        ; y = y+dy
        add     eax, esi        ; x = x+dx
   
        dec     edx
        jnz     .draw
   
        ; force last drawn pixel to be at (x2,y2)
        mov     eax, [dl_x2]
        mov     ebx, [dl_y2]
        call    putpixel
   
.exit:
        add     esp, 6*4
        popa
        ret
   
hline:
; draw an horizontal line
; eax = x1
; edx = x2
; ebx = y
; ecx = color
; edi = force ?
        push    eax
        push    edx
   
        cmp     edx, eax      ; make sure x2 is above x1
        jge     .draw_hline
   
        xchg    eax, edx
   
.draw_hline:
   
        call    putpixel
        inc     eax
   
        cmp     eax, edx
        jle     .draw_hline
   
        pop     edx
        pop     eax
        ret
   
vline:
; draw a vertical line
; eax = x
; ebx = y1
; edx = y2
; ecx = color
; edi = force ?
        push    ebx
        push    edx
   
        cmp     edx, ebx      ; make sure y2 is above y1
        jge     .draw_vline
   
        xchg    ebx, edx
   
.draw_vline:
   
        call    putpixel
        inc     ebx
   
        cmp     ebx, edx
        jle     .draw_vline
   
        pop     edx
        pop     ebx
        ret
   
   
   
   
vesa20_drawbar:

     call    disable_mouse
   
     mov [novesachecksum],dword 0
   
     sub edx,ebx ; edx:=Yend-Ystart=H
     sub ecx,eax ; ecx:=Xend-Xstat=B
   
     push ebp ; +24
     push esi ; +20
     push edi ; +16
     push eax ; +12
     push ebx ; +8
     push ecx ; +4
     push edx ; +0
   
   
     mov ecx,[0x3010]       ;
     add eax,[ecx-twdw]   ; eax:=Xwin+x
     add ebx,[ecx-twdw+4] ; ebx:=Ywin+y
   
     mov ecx, eax           ; ecx:=(x+Xwin)
     mov eax, [BytesPerScanLine]      ; BytesPerScanLine
     mul ebx                ; *(y+Ywin)
     mov edi, eax           ; edi:=BytesPerScanLine*(y+Ywin)
   
     mov eax, [ScreenWidth] ; ScreenXSize
     inc eax                ; +1
     mul ebx                ; *(y+Ywin)
     mov ebp, eax           ;
     add ebp, ecx           ; +(x+Win)
     add ebp, WinMapAddress ; ebp:=(y+Ywin)*(ScreenXSize+1)+(x+Xwin)+AdrBf

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜精品浪潮av一区二区三区| 99这里只有精品| 国产一区二区三区四区五区美女| 岛国一区二区在线观看| 精品视频在线视频| 欧美激情一区二区三区| 午夜影视日本亚洲欧洲精品| 国产盗摄女厕一区二区三区| 5858s免费视频成人| 自拍偷拍亚洲欧美日韩| 激情小说欧美图片| 欧美另类高清zo欧美| 国产精品二三区| 国产精品一区二区在线观看网站| 欧美日本高清视频在线观看| 亚洲天堂a在线| 成人黄色777网| 久久欧美一区二区| 日韩精品电影一区亚洲| 一本色道久久综合亚洲aⅴ蜜桃 | 丁香六月久久综合狠狠色| 欧美日韩成人综合| 亚洲在线中文字幕| 成人h动漫精品一区二区| 久久婷婷国产综合国色天香| 蜜桃视频在线一区| 欧美一级黄色录像| 日韩一区欧美二区| 欧美日韩二区三区| 亚洲动漫第一页| 在线观看国产一区二区| 综合分类小说区另类春色亚洲小说欧美| 激情欧美日韩一区二区| 精品国产自在久精品国产| 三级在线观看一区二区| 91精品在线免费| 日本不卡一区二区三区高清视频| 欧美精选一区二区| 视频在线观看国产精品| 91精品国产综合久久精品| 午夜久久久影院| 欧美精品777| 久久精品久久99精品久久| 欧美成人女星排名| 国产精品一卡二卡在线观看| 国产亚洲污的网站| 成人av在线看| 一区二区久久久久久| 欧美日韩免费在线视频| 蜜桃精品视频在线观看| 久久久一区二区三区| 成人av影视在线观看| 亚洲柠檬福利资源导航| 欧美人与z0zoxxxx视频| 久久精品久久久精品美女| 亚洲国产精品高清| 色偷偷久久人人79超碰人人澡| 亚洲综合无码一区二区| 3d动漫精品啪啪| 国产又粗又猛又爽又黄91精品| 国产精品网站在线播放| 欧美视频在线一区二区三区 | 亚洲欧美日韩精品久久久久| 91在线视频网址| 午夜av区久久| 久久久激情视频| 色综合久久久久综合| 日本一道高清亚洲日美韩| 国产日韩欧美a| 欧美日韩美少妇| 国产乱妇无码大片在线观看| 亚洲在线成人精品| 2019国产精品| 欧美午夜理伦三级在线观看| 国内外精品视频| 亚洲精品一二三区| 精品裸体舞一区二区三区| av电影天堂一区二区在线| 日本不卡在线视频| 日韩毛片精品高清免费| 欧美电影免费提供在线观看| 91视频在线看| 国产夫妻精品视频| 午夜精品一区二区三区三上悠亚| 国产精品乱子久久久久| 日韩欧美激情在线| 欧美午夜不卡视频| 成人综合在线观看| 久久99国产精品久久99| 亚洲国产精品一区二区www | 欧美性猛交xxxx乱大交退制版| 国产一区美女在线| 免费av网站大全久久| 一区二区三区影院| 国产亚洲一区二区三区四区| 91麻豆精品国产91久久久使用方法| 不卡的av在线播放| 国产在线精品一区二区夜色| 日韩中文字幕麻豆| 一区二区高清免费观看影视大全 | 国产精品99久久久久久宅男| 午夜精品久久久久久久99樱桃| 自拍视频在线观看一区二区| 欧美精品一区二区三区很污很色的| 欧美日韩视频在线第一区| 99久久99久久久精品齐齐| 国产在线国偷精品产拍免费yy| 偷窥少妇高潮呻吟av久久免费| 亚洲精品久久嫩草网站秘色| 国产精品白丝在线| 国产精品日韩精品欧美在线| 久久精品一级爱片| 国产日韩亚洲欧美综合| 久久丝袜美腿综合| 国产婷婷色一区二区三区四区| 日韩欧美中文字幕制服| 日韩欧美在线网站| 精品国产在天天线2019| 日韩免费电影一区| 久久综合成人精品亚洲另类欧美| 日韩欧美www| 久久先锋影音av| 中文一区一区三区高中清不卡| 国产欧美一区二区三区在线老狼| 欧美激情一区二区三区全黄| 成人欧美一区二区三区| 综合久久久久久久| 亚洲影视资源网| 日本不卡视频在线| 国产一区二区三区蝌蚪| 国产精品一区二区男女羞羞无遮挡| 狠狠色综合色综合网络| 国产精品一区二区在线播放| 波多野结衣精品在线| 91成人免费网站| 欧美剧情片在线观看| 欧美成人高清电影在线| 国产婷婷色一区二区三区 | 亚洲一区二三区| 天堂影院一区二区| 久久精品国产网站| 国产成人av福利| 日本韩国欧美三级| 亚洲欧美色图小说| 亚洲国产精品麻豆| 精品一二三四在线| 99re这里只有精品首页| 91久久精品一区二区三| 日韩视频免费直播| 国产精品视频一二三区| 亚洲靠逼com| 另类欧美日韩国产在线| 处破女av一区二区| 欧美一区在线视频| 国产精品乱子久久久久| 五月天国产精品| 成人妖精视频yjsp地址| 欧美男女性生活在线直播观看| 久久精品无码一区二区三区| 亚洲精品菠萝久久久久久久| 麻豆国产欧美日韩综合精品二区| 不卡高清视频专区| 精品国产乱码久久久久久图片| 亚洲欧美视频一区| 国产精品影视天天线| 欧美色视频一区| 国产精品久久久久久亚洲毛片| 天堂va蜜桃一区二区三区| 成人午夜电影小说| 欧美一二三区精品| 亚洲精品大片www| 国产成+人+日韩+欧美+亚洲| 51精品秘密在线观看| 一区二区三区中文在线观看| 国产成人综合在线播放| 91精品在线麻豆| 亚洲成人自拍一区| 94-欧美-setu| 中文字幕精品一区| 国产在线视视频有精品| 欧美精品久久一区| 亚洲综合在线第一页| 91尤物视频在线观看| 久久精品欧美日韩精品| 免费日韩伦理电影| 欧美老女人第四色| 亚洲午夜精品久久久久久久久| caoporm超碰国产精品| 国产三级精品三级在线专区| 麻豆国产欧美一区二区三区| 7777精品久久久大香线蕉| 亚洲在线中文字幕| 欧洲生活片亚洲生活在线观看| 1024国产精品| 97精品久久久午夜一区二区三区 | 久久国产免费看| 91精品国产欧美一区二区18| 偷拍日韩校园综合在线| 欧美无人高清视频在线观看| 亚洲一区免费视频|