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

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

?? fat32.inc

?? MenuetOS是一個用匯編開發的32/64位PC操作系統
?? INC
?? 第 1 頁 / 共 4 頁
字號:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                 ;;
;;  FAT32.INC                                                      ;;
;;                                                                 ;;
;;  FAT32 functions for MenuetOS                                   ;;
;;                                                                 ;;
;;  Copyright 2002 Paolo Minazzi, paolo.minazzi@inwind.it          ;;
;;                                                                 ;;
;;  See file COPYING for details                                   ;;
;;                                                                 ;;
;;  10.9.2004  Fat16 file system - Mario79                         ;;
;;  06.9.2004  Fix free space by Mario79 added - MH                ;;
;;  24.5.2004  Write back buffer for File_write - VT               ;;
;;  20.5.2004  File_read function to work with syscall 58 - VT     ;;
;;  30.3.2004  Error parameters at function return - VT            ;;
;;  01.5.2002  Bugfix in device write - VT                         ;;
;;  20.5.2002  Hd status check - VT                                ;;
;;  29.6.2002  Improved fat32 verification - VT                    ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;       CLUSTER[0]  CLUSTER[1]  CLUSTER[2] CLUSTER[3]
;
;###    ######## -->######## -->########   ########
;#2#--> #      # |  #      # |  #      #   #      #
;###    #      # |  #      # |  #      #   #      #
;       #      # |  #      # |  #      #   #      #
;       #      # |  #      # |  #      #   #      #
;       #      # |  #      # |  #      #   #      #          CLUSTER
;       #      # |  #      # |  #      #   #      #
;       #      # |  #      # |  #      #   #      #
;       #      # |  #      # |  #      #   #      #
;       ######## |  ######## |  ########   ########
;                |           |
;                |           ------------------
;                |                            |
;                --------------------         |
;                                   |         |
;      ########    ########    ########   ########
;      # xxxx #    # xxxx #    #   3  #   #   4  #
;      ########    ########    ########   ########          FAT
;
;       FAT[0]       FAT[1]      FAT[2]    FAT[3]
;

cache_max equ 1000

RESERVED_SECTOR:     dd 0x20
PARTITION_START:     dd 0x3f
FAT32_SIZE:          dd 0x1f3a
NUMBER_OF_FATS:      dd 0x2
SECTOR_PER_CLUSTER:  dd 0x8
ROOT_CLUSTER:        dd 2
buffer:              times 64 dd 0,0
cluster:             dd 0
cluster1:            dd 0
valid_fat:           db 0
PARTITION_SIZE:      dd 0
PARTITION_END:       dd 0

hd_error             dd 0
hd_setup             dd 0

;***********************
;*         Start       *
;* Mario79 edited code *
;*  correct free mem   *
;*     change 1.1      *
;***********************
FILE_SIZE:           dd 0
ADR_FSINFO:          dd 0
change_mem           db 0
old_size_file:       dd 0
;***********************
;*         End         *
;* Mario79 edited code *
;*  correct free mem   *
;*     change 1.1      *
;***********************

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.1      *
;***********************
fs_type              dd 0
file_or_directory    dd 0
analyze_f16          db 0
correct_fat16        dd 0
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.1      *
;***********************

reserve_hd1:

    push  eax
    mov   eax,[0x3000]
    imul  eax,32
    add   eax,0x3000
    mov   eax,[eax+4]
    mov   [hd1_status],eax
    pop   eax

    ret

clear_hd_cache:

    pusha
    mov   edi,0x600000
    mov   ecx,65535
    mov   eax,0
    cld
    rep   stosb
    popa

    ret


set_FAT32_variables:

    cli
    cmp   [hd1_status],0
    je    set_fat32_l1

    sti
    call  change_task
    jmp   set_FAT32_variables

  set_fat32_l1:

    call  reserve_hd1

    sti

    call  clear_hd_cache

    cmp   dword [hdpos],0
    je    problem_hd_or_partition_or_fat32_ret

    push  eax
    push  ebx

    xor   eax,eax                        ; Read MBR
    mov   ebx,buffer
    call  hd_read

    cmp   dword [fat32part],0
    jnz   hd_and_partition_ok

problem_hd_or_partition_or_fat32:

    pop   ebx
    pop   eax

problem_hd_or_partition_or_fat32_ret:

    mov   [valid_fat],byte 0
    mov   [hd1_status],0 ; free

    ret

hd_and_partition_ok:

    mov   ecx,[fat32part]
    mov   eax,0
    mov   ebx,buffer+0x1be+8  -16
  hdapl1:
    add   ebx,16
    add   eax,[ebx]
    loop  hdapl1

    mov   [PARTITION_START],eax
    mov   ebx,[ebx+4]
    mov   [PARTITION_SIZE],ebx

    mov   [hd_setup],1
    mov   ebx,buffer
    call  hd_read ;_new        ; Read boot sector of partition
    mov   [hd_setup],0

    cmp   [ebx+0x53],dword 'AT32'
    ; jnz  problem_hd_or_partition_or_fat32
    jnz   problem_hd_or_partition_or_fat32_1

    mov   [valid_fat],byte 1
    movzx eax,word [ebx+0xe]
    mov   [RESERVED_SECTOR],eax
    mov   eax,[ebx+0x24]
    mov   [FAT32_SIZE],eax
    movzx eax,byte [ebx+0x10]
    mov   [NUMBER_OF_FATS],eax
    movzx eax,byte [ebx+0xd]
    mov   [SECTOR_PER_CLUSTER],eax
    mov   eax,[ebx+44]
    mov   [ROOT_CLUSTER],eax
    mov   eax,[PARTITION_START]
    add   eax,[PARTITION_SIZE]
    dec   eax
    mov   [PARTITION_END],eax
    pop   ebx
    pop   eax

;    mov [hd1_status],0   ; free
;    ret
;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.2      *
;***********************

    mov   [fs_type],1      ; 1 -Fat32
    mov   [hd1_status],0   ; free
    ret

problem_hd_or_partition_or_fat32_1:

    cmp   [ebx+55],dword 'AT16'
    je    par_fat16
    jmp   problem_hd_or_partition_or_fat32

par_fat16:

    mov   [valid_fat],byte 1
    movzx eax,word [ebx+0xe]
    mov   [RESERVED_SECTOR],eax
    movzx eax,word [ebx+0x16]
    mov   [FAT32_SIZE],eax
    movzx eax,byte [ebx+0x10]
    mov   [NUMBER_OF_FATS],eax
    movzx eax,byte [ebx+0xd]
    mov   [SECTOR_PER_CLUSTER],eax

    xor   eax,eax
    mov   [ROOT_CLUSTER],eax
    mov   eax,[PARTITION_START]
    add   eax,[PARTITION_SIZE]
    dec   eax
    mov   [PARTITION_END],eax

    mov   eax,[SECTOR_PER_CLUSTER]
    shl   eax,1
    mov   ebx,32
    sub   ebx,eax
    mov   [correct_fat16],ebx

    pop   ebx
    pop   eax

    mov   [fs_type],2      ; 2 - Fat16
    mov   [hd1_status],0   ; Free
    ret

;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.2      *
;***********************

set_FAT:
;--------------------------------
; set_FAT
;
; input :  EAX = #block
;          EDX = value to save
; output:  nothing
;--------------------------------

    push  eax  ; [esp+16]
    push  ebx  ; [esp+12]
    push  ecx  ; [esp+8]
    push  edx  ; [esp+4]
    push  esi  ; [esp]

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.3      *
;***********************

    cmp [fs_type],1
    je correct3_11
    shl eax,1
    jmp  correct3_12
correct3_11:
    shl eax,2
correct3_12:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.3      *
;***********************

    xor edx,edx
    mov ebx,512
    div ebx
    mov esi,edx

    add eax,[RESERVED_SECTOR]
    add eax,[PARTITION_START]
    mov ebx,buffer

    mov ecx,[NUMBER_OF_FATS]
    mov edx,[esp+4]

set_an_other_FAT:

    call hd_read ;_new

    cmp  [f_del],1
    je   fat_zero

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.4      *
;***********************

    cmp [fs_type],1
    je correct3_11_1
    cmp  [buffer+esi],word 0
    je   fat_zero
    jmp  correct3_12_1
correct3_11_1:
   cmp  [buffer+esi],dword 0
   je   fat_zero
correct3_12_1:
   mov  [8*0x100000],dword 0xffffff
   jmp  fat_nonzero
fat_zero:
  cmp [fs_type],1
  je correct3_13_3
   mov [buffer+esi],dx
   jmp correct3_13_4
correct3_13_3:
   mov [buffer+esi],edx
correct3_13_4:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.4      *
;***********************

   call hd_write_new

  fat_nonzero:

   add eax,[FAT32_SIZE]
   loop set_an_other_FAT

   pop esi
   pop edx
   pop ecx
   pop ebx
   pop eax
   ret


get_FAT:
;--------------------------------
; get_FAT
;
; input :  EAX = #block
; output:  EAX = #block
;--------------------------------
   push ebx
   push edx

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.5      *
;***********************
  cmp [fs_type],1
  je correct3_13_5
  shl eax,1
  jmp  correct3_14_1
correct3_13_5:
   shl eax,2
correct3_14_1:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.5      *
;***********************

   xor edx,edx
   mov ebx,512
   div ebx

   add eax,[RESERVED_SECTOR]
   add eax,[PARTITION_START]
   mov ebx,buffer

   call hd_read ;_new

   mov  eax,[buffer+edx]

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.6      *
;***********************
  cmp [fs_type],1
  je correct3_13_6
  and  eax,0xffff
correct3_13_6:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.6      *
;***********************

   pop edx
   pop ebx
   ret


get_FAT_cache:
;--------------------------------
; get_FAT_cache - used for reading only : internal cache
;
; input :  EAX = #block
; output:  EAX = #block
;--------------------------------
   push ebx
   push edx

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.7      *
;***********************
  cmp [fs_type],1
  je correct3_13
  shl eax,1
  jmp  correct3_14
correct3_13:
   shl eax,2
correct3_14:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.7      *
;***********************

   xor edx,edx
   mov ebx,512
   div ebx

   add eax,[RESERVED_SECTOR]
   add eax,[PARTITION_START]
   mov ebx,fat_cache

   cmp  eax,[fat_in_cache]
   je   fat_found_in_cache
   mov  [fat_in_cache],eax
   call hd_read
 fat_found_in_cache:

   mov  eax,[fat_cache+edx]

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.8      *
;***********************
  cmp [fs_type],1
  je correct3_13_1
  and  eax,0xffff
correct3_13_1:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.8      *
;***********************

   pop edx
   pop ebx
   ret


fat_in_cache dd -1
fat_cache: times 512 db 0



;find_pointer_in_FAT:
;--------------------------------
; For each item of FAT do
;   if (item read == EAX)
;     return #item
;     carry=0
;   else
;     carry=1;
;
; input :  EAX = #block
; output:  if CARRY=0 then EAX = #block
;          if CARRY=1 then EAX = distroyed
;--------------------------------
;  add eax,2
;  push eax
;  push ecx
;  push edx

;  mov ecx,[FAT32_SIZE]
;  shl ecx,9-2                 ; *512 for sector   /4 for dword
;  mov edx,2

;adr78:
;  mov eax,edx
;  call get_FAT
;  cmp eax,[esp+8]
;  je found_pointer
;  inc edx
;  loop adr78

;  pop edx
;  pop ecx
;  add esp,4
;  stc
;  ret

;found_pointer:
;  mov eax,edx
;  pop edx
;  pop ecx
;  add esp,4
;  clc
;  ret

analyze_directory:
;--------------------------------
; input  : EAX = first cluster of the directory
;          EBX = pointer to filename
; output : IF CARRY=0 EAX = sector where th file is found
;                     EBX = pointer in buffer
;                     [buffer .. buffer+511]
;                     ECX,EDX,EDI,EDI not changed
;          IF CARRY=1
;--------------------------------
   push ebx ;[esp+16]
   push ecx
   push edx
   push esi
   push edi


adr56:
   mov [cluster_tmp],eax

   mov ecx,[FAT32_SIZE]
   imul ecx,[NUMBER_OF_FATS]
   add ecx,[RESERVED_SECTOR]

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.9      *
;***********************
  cmp [fs_type],2
  je correct2_11
  sub  eax,2
correct2_11:
   imul eax,[SECTOR_PER_CLUSTER]
  cmp [fs_type],1
  je correct2_13
  cmp [file_or_directory],0
  je  correct2_13
  cmp [analyze_f16],0
  je  correct2_13
  add eax,[correct_fat16]
correct2_13:
;***********************
;*         End         *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.9      *
;***********************

   add eax,[PARTITION_START]
   add eax,ecx

   mov edx,[SECTOR_PER_CLUSTER]

new_sector_in_cluster:
   mov ebx,buffer
   call hd_read ;_new

   mov ecx,512/32

adr1_analyze:

   mov edi,[ebx+11]
   and edi,0xf
   cmp edi,0xf
   je  long_filename_data

   mov esi,[esp+16]
   mov edi,ebx
   cld
   push ecx
   mov ecx,11
   rep cmpsb
   pop ecx
   je found_file_analyze

 long_filename_data:

   add ebx,32
   loop adr1_analyze

   inc eax
   dec edx
   jne new_sector_in_cluster

   mov eax,[cluster_tmp]
   call get_FAT
   mov [cluster_tmp],eax

;***********************
;*         Start       *
;* Mario79 edited code *
;*        Fat16        *
;*     change 1.10     *
;***********************
  cmp [fs_type],2
  je  correct5_2
   cmp eax,0x0f000000
   jb  adr56
 correct6_2:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久福利视频一区二区| 欧洲亚洲国产日韩| 一区二区三区日韩欧美| 国产欧美精品在线观看| 日韩免费一区二区三区在线播放| 色94色欧美sute亚洲线路一ni| 777精品伊人久久久久大香线蕉| 99精品偷自拍| 91年精品国产| 在线一区二区三区| 国产丝袜美腿一区二区三区| 26uuu色噜噜精品一区二区| 久久嫩草精品久久久久| 久久精品一二三| 青草国产精品久久久久久| 午夜精品福利视频网站| 欧美aaaaa成人免费观看视频| 91日韩精品一区| 欧美激情中文字幕| 亚洲一区成人在线| 久久精品国产99国产精品| 欧洲一区在线电影| 亚洲免费av高清| 香蕉影视欧美成人| 寂寞少妇一区二区三区| 成人精品免费看| 极品美女销魂一区二区三区| 欧美日韩国产区一| 精品电影一区二区三区| 成人欧美一区二区三区1314| 亚洲一区免费观看| 97国产一区二区| 亚洲欧洲精品一区二区三区 | 国产精品久久久久久妇女6080| 亚洲日本电影在线| 秋霞影院一区二区| 在线成人av影院| 国产日产精品1区| 国产在线一区观看| 色婷婷久久久久swag精品| 欧美四级电影在线观看| 久久久久久一级片| 国产一区二区伦理片| 色综合久久综合| 一区2区3区在线看| 欧美日韩精品三区| 久久精品理论片| 久久先锋影音av| 高清不卡一二三区| 欧美xxxx在线观看| 婷婷开心激情综合| 精品精品欲导航| 丁香激情综合五月| 一区二区三区中文字幕电影| 欧美日韩久久一区二区| 日韩va亚洲va欧美va久久| 成人精品鲁一区一区二区| 亚洲色图第一区| 精品视频在线免费| 夜色激情一区二区| 日韩欧美第一区| 成人午夜激情在线| 亚洲成人精品影院| 久久青草欧美一区二区三区| 91美女精品福利| 婷婷开心激情综合| 国产色产综合色产在线视频| 色老综合老女人久久久| 另类小说综合欧美亚洲| 亚洲欧洲一区二区在线播放| 777欧美精品| 成人精品免费视频| 日韩激情视频网站| 欧美性生活影院| 国产一区二区不卡老阿姨| 日韩理论片网站| 精品精品国产高清a毛片牛牛| 成人av在线播放网址| 日韩av午夜在线观看| 国产精品久久久久久久久动漫| 在线成人小视频| 91网站最新网址| 狠狠色狠狠色综合| 亚洲成人动漫一区| 国产精品护士白丝一区av| 日韩亚洲欧美综合| 国内久久婷婷综合| 亚洲福利电影网| 日韩欧美在线网站| 色欧美日韩亚洲| 成人av动漫在线| 精品一区二区三区视频| 亚洲国产精品久久不卡毛片| 中文在线资源观看网站视频免费不卡 | 亚洲精品国产视频| 欧美在线你懂得| 成人黄色在线视频| 国产伦精一区二区三区| 天涯成人国产亚洲精品一区av| 中文字幕在线不卡国产视频| 亚洲精品一区二区三区福利| 欧美精品色综合| 欧美日韩在线观看一区二区| 91亚洲大成网污www| 国产高清成人在线| 亚洲一级二级在线| 亚洲免费观看高清完整版在线观看 | 91麻豆产精品久久久久久| 国产电影精品久久禁18| 久久99精品久久久| 日本成人超碰在线观看| 香蕉成人啪国产精品视频综合网| 综合色天天鬼久久鬼色| 中文字幕日韩一区二区| 国产精品人成在线观看免费| 91天堂素人约啪| 不卡欧美aaaaa| 99久久国产免费看| 99精品久久免费看蜜臀剧情介绍| 成人丝袜18视频在线观看| 欧美亚洲国产一区二区三区va| 99精品国产一区二区三区不卡| 国产大片一区二区| 成人精品视频.| 99久久久无码国产精品| 色婷婷精品久久二区二区蜜臂av| 色综合天天综合给合国产| 免费av网站大全久久| 日本不卡免费在线视频| 久久超碰97人人做人人爱| 极品瑜伽女神91| 成人污视频在线观看| 91麻豆自制传媒国产之光| 91精品办公室少妇高潮对白| 欧美日韩黄色影视| 日韩免费一区二区三区在线播放| 国产三级精品视频| 亚洲女爱视频在线| 日本免费在线视频不卡一不卡二| 久久99精品久久久久久国产越南| 国产99精品国产| 91浏览器入口在线观看| 欧美精品日韩一本| 久久久.com| 亚洲精品精品亚洲| 精品午夜一区二区三区在线观看 | 日韩欧美国产三级| 国产欧美日韩综合精品一区二区| 专区另类欧美日韩| 午夜精品久久久久久久99樱桃| 激情综合色丁香一区二区| 99久久精品国产一区| 欧美高清视频一二三区 | 欧美经典一区二区三区| 亚洲欧美激情插| 久久国产精品色| 91丝袜呻吟高潮美腿白嫩在线观看| 7777精品久久久大香线蕉| 国产日韩欧美麻豆| 丝袜亚洲另类欧美综合| 国产成人精品亚洲777人妖 | www.综合网.com| 丁香一区二区三区| 欧美日韩在线三区| 国产精品区一区二区三区 | 中文字幕第一区| 奇米精品一区二区三区在线观看| 国产.欧美.日韩| 欧美肥妇毛茸茸| 成人免费在线观看入口| 国产一区二区三区电影在线观看| 欧美三级三级三级爽爽爽| 中文字幕在线播放不卡一区| 九九视频精品免费| 欧美日韩视频在线一区二区| 国产精品久线观看视频| 国产一区视频网站| 91精品国产一区二区三区蜜臀| 欧美一区二区三区在线| 亚洲激情网站免费观看| 成人精品一区二区三区四区 | 国产精品素人视频| 久久99精品视频| 欧美欧美欧美欧美| 亚洲精品v日韩精品| 高清日韩电视剧大全免费| 精品处破学生在线二十三| 石原莉奈一区二区三区在线观看| 色老汉av一区二区三区| 国产精品进线69影院| 高清在线不卡av| 国产肉丝袜一区二区| 欧美午夜视频网站| 亚洲欧美成人一区二区三区| 不卡av在线免费观看| 国产色产综合产在线视频| 国产宾馆实践打屁股91| 久久精品欧美一区二区三区麻豆 | 日韩精品资源二区在线| 日韩不卡一区二区三区|