亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲va欧美va天堂v国产综合| 一本大道久久a久久综合婷婷| 成人一级片在线观看| 在线免费观看日韩欧美| 2024国产精品| 亚洲成人一二三| av成人动漫在线观看| 久久伊人蜜桃av一区二区| 亚洲成人免费影院| 91福利精品视频| 日韩伦理av电影| zzijzzij亚洲日本少妇熟睡| 日韩免费高清av| 日本视频一区二区三区| 色94色欧美sute亚洲线路二| 国产精品美女一区二区三区 | 国产精品自在欧美一区| 欧美日韩国产高清一区二区三区 | 丁香六月综合激情| 精品88久久久久88久久久| 奇米综合一区二区三区精品视频| 97精品久久久午夜一区二区三区 | 99久久精品免费精品国产| 久久嫩草精品久久久精品一| 激情图片小说一区| 91麻豆精品国产无毒不卡在线观看 | 老司机精品视频在线| 欧美日韩国产另类不卡| 亚洲va欧美va人人爽| 欧美日韩dvd在线观看| 亚洲国产日产av| 欧美三区免费完整视频在线观看| 亚洲午夜视频在线| 欧美猛男超大videosgay| 亚洲午夜久久久久久久久电影网 | 亚洲精品高清在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品久久久久久久浪潮网站| 国产91对白在线观看九色| 久久欧美中文字幕| 成人理论电影网| 亚洲猫色日本管| 欧美精品久久一区| 麻豆精品一区二区综合av| 精品国产免费人成电影在线观看四季| 激情亚洲综合在线| 国产亚洲成年网址在线观看| 91性感美女视频| 亚洲一区二区三区自拍| 欧美一区二区三区四区高清| 精品一区二区三区日韩| 国产精品视频观看| 欧美午夜免费电影| 久久成人久久爱| 国产女人水真多18毛片18精品视频| 99re热这里只有精品视频| 一区二区国产盗摄色噜噜| 884aa四虎影成人精品一区| 黄色成人免费在线| 亚洲视频网在线直播| 欧美精品色综合| 成人免费毛片高清视频| 午夜精品一区二区三区电影天堂 | 91麻豆精品国产91久久久久久久久 | 中文字幕一区二区三区四区不卡| 久久精品国产亚洲高清剧情介绍 | 久久夜色精品国产噜噜av| 成人免费不卡视频| 午夜电影一区二区| 国产精品毛片大码女人| 欧美军同video69gay| 国产成人亚洲综合a∨婷婷| 一区二区三区精密机械公司| 久久综合九色综合97婷婷| 一本久久a久久免费精品不卡| 人禽交欧美网站| 亚洲精品福利视频网站| 国产色一区二区| 欧美丰满少妇xxxxx高潮对白| 豆国产96在线|亚洲| 日日夜夜免费精品| 亚洲欧美日韩在线| 国产午夜亚洲精品理论片色戒 | 亚洲v精品v日韩v欧美v专区| 中文字幕第一区综合| 制服丝袜亚洲色图| 在线视频你懂得一区| 粉嫩在线一区二区三区视频| 视频一区中文字幕| 亚洲精品乱码久久久久久| 国产精品免费久久久久| 欧美www视频| 欧美精品一二三| 色婷婷精品久久二区二区蜜臀av | 欧美偷拍一区二区| 成人在线视频一区| 韩国欧美一区二区| 蜜桃视频第一区免费观看| 亚洲综合激情另类小说区| 中文字幕中文字幕一区| 国产亚洲欧美日韩在线一区| 欧美大片国产精品| 日韩视频永久免费| 91麻豆精品国产91久久久使用方法| 在线视频国内自拍亚洲视频| 99久久免费精品| 99国产一区二区三精品乱码| 成人手机在线视频| 国产成人日日夜夜| 免费在线观看视频一区| 日本91福利区| 韩国毛片一区二区三区| 久久国产精品99久久人人澡| 丝袜亚洲精品中文字幕一区| 天天色天天爱天天射综合| 午夜久久久久久久久久一区二区| 香蕉久久一区二区不卡无毒影院| 亚洲自拍偷拍网站| 亚洲自拍偷拍麻豆| 亚洲成人一区二区| 日本一道高清亚洲日美韩| 日韩av电影免费观看高清完整版在线观看| 香港成人在线视频| 青青草成人在线观看| 国产一区二区调教| 丁香亚洲综合激情啪啪综合| 成人国产精品视频| 色噜噜狠狠色综合欧洲selulu| 色婷婷av一区二区三区之一色屋| 欧美无砖砖区免费| 91麻豆精品国产91久久久更新时间| 91精品国产乱码| 国产亚洲一二三区| 亚洲欧美日韩精品久久久久| 午夜久久电影网| 韩国成人在线视频| www.欧美色图| 欧美日韩免费在线视频| 日韩精品中文字幕一区二区三区| 久久久久久久av麻豆果冻| 亚洲色图在线看| 日韩福利电影在线| 国产成a人亚洲| 在线免费观看一区| 精品国产乱子伦一区| 亚洲欧美日韩在线| 蜜桃精品视频在线| 成人精品视频网站| 欧美日韩国产成人在线免费| 精品国产不卡一区二区三区| 亚洲欧美视频在线观看视频| 男人的天堂久久精品| 97se亚洲国产综合在线| 欧美一区二区三区视频| 国产精品免费视频网站| 日韩精品成人一区二区三区| 成人性色生活片| 91精品在线麻豆| 国产精品入口麻豆原神| 午夜成人在线视频| 99久久精品免费看| www激情久久| 日日噜噜夜夜狠狠视频欧美人| 成人综合婷婷国产精品久久免费| 欧美日韩免费观看一区二区三区| 久久久久97国产精华液好用吗| 亚洲国产日日夜夜| 97se亚洲国产综合自在线不卡| 精品国产乱码久久久久久久久| 亚洲永久免费av| av一区二区不卡| 久久精品亚洲一区二区三区浴池| 五月婷婷色综合| 在线中文字幕一区二区| 国产精品热久久久久夜色精品三区| 日韩电影在线免费看| 91国在线观看| 亚洲欧美国产高清| 99久久99久久免费精品蜜臀| 久久久综合视频| 国产一区二区免费在线| 欧美一区二区三区婷婷月色| 亚洲国产视频直播| 色噜噜夜夜夜综合网| 亚洲欧洲成人精品av97| 国产**成人网毛片九色| 欧美精品一区二区三区高清aⅴ| 亚洲国产综合色| 在线观看亚洲成人| 亚洲美女在线一区| 91福利精品视频| 一区二区三区日韩欧美| 91在线播放网址| 日韩一区在线播放| 91麻豆国产精品久久| 亚洲桃色在线一区| 色哦色哦哦色天天综合| 亚洲精品v日韩精品| 色天使久久综合网天天| 亚洲精品国产a久久久久久|