VirtualBox

Ignore:
Timestamp:
Nov 9, 2018 1:39:01 AM (6 years ago)
Author:
vboxsync
Message:

Add/os2/VBoxSF: Early shared folders for OS/2. Not perfect yet, but was able to build all the disassembler libraries on a shared folder mount.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFA.asm

    r69339 r75337  
    3030
    3131
    32 ;*******************************************************************************
    33 ;* Header Files                                                                *
    34 ;*******************************************************************************
     32;*********************************************************************************************************************************
     33;*  Header Files                                                                                                                 *
     34;*********************************************************************************************************************************
    3535%define RT_INCL_16BIT_SEGMENTS
    3636%include "iprt/asmdefs.mac"
    3737%include "iprt/err.mac"
     38%include "iprt/x86.mac"
     39%include "iprt/formats/dwarf.mac"
    3840%include "VBox/VBoxGuest.mac"
    3941
    4042
    41 ;*******************************************************************************
    42 ;*  Defined Constants And Macros                                               *
    43 ;*******************************************************************************
     43;*********************************************************************************************************************************
     44;*  Dwarf constants and macros                                                                                                   *
     45;*********************************************************************************************************************************
     46;; enable dwarf debug info
     47%define WITH_DWARF 1
     48
     49;; Emits a LEB128 (signed) constant (%1) - limited range.
     50%macro DWARF_LEB128 1
     51%if %1 >= 0
     52 %if %1 < 64
     53        db  %1
     54 %else
     55        db  (%1 & 0x7f) | 0x80
     56        db  (%1 >> 7)   & 0x7f
     57 %endif
     58%else
     59 %if %1 > -64
     60        db  (%1 & 0x3f) | 0x40
     61 %else
     62        db  (%1 & 0x7f) | 0x80
     63        db  ((%1 >> 7)  & 0x7f) | 0x40
     64 %endif
     65%endif
     66%endmacro
     67
     68;; Emits a ULEB128 (unsigned) constant (%1) - limited range.
     69%macro DWARF_ULEB128 1
     70%if %1 < 0x80
     71        db  %1
     72%elif %1 < 0x4000
     73        db  (%1 & 0x7f) | 0x80
     74        db  (%1 >> 7)
     75%elif %1 < 0x200000
     76        db  ((%1)       & 0x7f) | 0x80
     77        db  ((%1 >> 7)  & 0x7f) | 0x80
     78        db  ((%1 >> 14))
     79%else
     80 %error out of range: %1
     81%endif
     82%endmacro
     83
     84;; Emits a pair of ULEB128 constants.  Useful for .debug_abbrev.
     85%macro DWARF_ULEB128_PAIR 2
     86        DWARF_ULEB128 %1
     87        DWARF_ULEB128 %2
     88%endmacro
     89
     90
     91;; defines a CFA offset by register (%1) + unsigned offset (%2).
     92%macro CFA_DEF_CFA 2
     93        db      DW_CFA_def_cfa
     94        DWARF_ULEB128 %1
     95        DWARF_ULEB128 %2
     96%endmacro
     97
     98;; defines the register (%1) value as CFA + unsigned offset (%2) * data_alignment_factor.
     99%macro CFA_VAL_OFFSET 2
     100        db      DW_CFA_val_offset
     101        DWARF_ULEB128 %1
     102        DWARF_ULEB128 %2
     103%endmacro
     104
     105;; defines the register (%1) save location as CFA + unsigned offset (%2) * data_alignment_factor.
     106%macro CFA_OFFSET 2
     107%if %1 < 0x40
     108        db      DW_CFA_offset | %1
     109%else
     110        db      DW_CFA_offset_extended
     111        DWARF_ULEB128 %1
     112%endif
     113        DWARF_ULEB128 %2
     114%endmacro
     115
     116%define MY_ABBREV_CODE_CU       2
     117%define MY_ABBREV_CODE_LABEL    3
     118
     119
     120;; Emits a debug info for a label in CODE16.
     121;; @param %1    symbol
     122%macro DWARF_LABEL_CODE16 1
     123%ifdef WITH_DWARF
     124segment _debug_info
     125        DWARF_ULEB128       MY_ABBREV_CODE_LABEL
     126        dd                  %1 wrt CODE16
     127        db                  2 ; Hardcoded CODE16 number.
     128%defstr tmp_str_conversion %1
     129        db                  tmp_str_conversion, 0
     130%endif
     131segment CODE16
     132%endmacro
     133
     134
     135;; Emits a debug info for a label in CODE32.
     136;; @param %1    symbol
     137%macro DWARF_LABEL_TEXT32 1
     138%ifdef WITH_DWARF
     139segment _debug_info
     140        DWARF_ULEB128       MY_ABBREV_CODE_LABEL
     141        dd                  %1 wrt TEXT32
     142        db                  3 ; Hardcoded TEXT32 number.
     143%defstr tmp_str_conversion %1
     144        db                  tmp_str_conversion, 0
     145%endif
     146segment TEXT32
     147%endmacro
     148
     149
     150
     151;*********************************************************************************************************************************
     152;*  Additional Segment definitions.                                                                                                         *
     153;*********************************************************************************************************************************
     154%ifdef WITH_DWARF       ; We need to use '_debug_xxx' + dotseg.exe here rather than '.debug_xxx' because some nasm crap.
     155segment _debug_frame       public CLASS=DWARF align=4 use32
     156g_cie_thunk_back:
     157        dd      (g_cie_thunk_end - g_cie_thunk_back - 4)    ; Length
     158        dd      0xffffffff                      ; I'm a CIE.
     159        db      4                               ; DwARF v4
     160        db      0                               ; Augmentation.
     161        db      4                               ; Address size.
     162        db      4                               ; Segment size.
     163        DWARF_LEB128  1                         ; Code alignment factor.
     164        DWARF_LEB128 -1                         ; Data alignment factor.
     165        DWARF_ULEB128   DWREG_X86_RA            ; Return register column.
     166        CFA_DEF_CFA     DWREG_X86_EBP, 8        ; cfa = EBP + 8
     167        CFA_OFFSET      DWREG_X86_EBP, 8        ; EBP = [CFA - 8]
     168        CFA_OFFSET      DWREG_X86_ESP, 8+10     ; SS  = [CFA - 8 - 10]
     169        CFA_OFFSET      DWREG_X86_SS,  8+6      ; SS  = [CFA - 8 - 6]
     170        CFA_OFFSET      DWREG_X86_ES,  8+4      ; ES  = [CFA - 8 - 4]
     171        CFA_OFFSET      DWREG_X86_DS,  8+2      ; DS  = [CFA - 8 - 2]
     172        CFA_OFFSET      DWREG_X86_CS,  2        ; CS  = [CFA - 2]
     173;        CFA_OFFSET      DWREG_X86_RA,  4        ; RetAddr = [CFA - 4]
     174        align   4, db DW_CFA_nop
     175g_cie_thunk_end:
     176
     177
     178segment _debug_abbrev       public CLASS=DWARF align=1 use32
     179g_abbrev_compile_unit:
     180        DWARF_ULEB128       MY_ABBREV_CODE_CU
     181        DWARF_ULEB128_PAIR  DW_TAG_compile_unit, DW_CHILDREN_yes
     182        DWARF_ULEB128_PAIR  DW_AT_name, DW_FORM_string
     183        db                  0, 0 ; the end.
     184g_abbrev_label:
     185        db                  MY_ABBREV_CODE_LABEL
     186        DWARF_ULEB128_PAIR  DW_TAG_label, DW_CHILDREN_no
     187        DWARF_ULEB128_PAIR  DW_AT_low_pc, DW_FORM_addr
     188        DWARF_ULEB128_PAIR  DW_AT_segment, DW_FORM_data1
     189        DWARF_ULEB128_PAIR  DW_AT_name, DW_FORM_string
     190        db                  0, 0 ; the end.
     191
     192
     193segment _debug_info         public CLASS=DWARF align=1 use32
     194g_dwarf_compile_unit_header:
     195        dd                  g_dwarf_compile_unit_end - g_dwarf_compile_unit_header - 4
     196        dw                  2           ; DWARF v2
     197        dd                  g_abbrev_compile_unit wrt _debug_abbrev
     198        db                  4           ; address_size
     199.compile_unit_die:
     200        db                  MY_ABBREV_CODE_CU
     201        db                  __FILE__, 0
     202
     203segment TEXT32
     204%endif ; WITH_DWARF
     205
     206
     207
     208;*********************************************************************************************************************************
     209;*  Defined Constants And Macros                                                                                                 *
     210;*********************************************************************************************************************************
    44211%define ERROR_NOT_SUPPORTED         50
    45212%define ERROR_INVALID_PARAMETER     87
    46213%define DevHlp_AttachDD             2ah
     214
    47215
    48216;;
     
    53221%%my_dbg_str: db %1, 0ah, 0
    54222segment CODE16
    55     push    ax
    56     mov     ax, %%my_dbg_str
    57     call    NAME(dbgstr16)
    58     pop     ax
     223        push    ax
     224        mov     ax, %%my_dbg_str
     225        call    NAME(dbgstr16)
     226        pop     ax
    59227%endif
    60228%endmacro
    61229
     230;%define RT_STR_QUOTE    "
     231;%define RT_STR(a_Label)       RT_STR_QUOTE a_Label RT_STR_QUOTE
    62232
    63233%macro VBOXSF_EP16_BEGIN 2
     234DWARF_LABEL_CODE16 %1
    64235global %1
    65236%1:
    66     DEBUG_STR16 {'VBoxSF: ', %2}
     237        ;DEBUG_STR16 {'VBoxSF: ', %2}
    67238
    68239%endmacro
     
    74245
    75246;;
    76 ; Used to taking us to 32-bit and reserving a parameter frame.
     247; Used in a 16-bit entrypoint for taking us to 32-bit and reserving a parameter frame.
    77248;
    78249; @param    %1      The function name
     
    80251;
    81252%macro VBOXSF_TO_32 2
    82     ; prologue
    83     push    ebp
    84     mov     ebp, esp                    ; bp
    85     push    ds                          ; bp - 2
    86     push    es                          ; bp - 4
    87 
    88     ; Reserve the 32-bit parameter and align the stack on a 16 byte
    89     ; boundary to make GCC really happy.
    90     sub     sp, %2
    91     and     sp, 0fff0h
    92 
    93     ;jmp far dword NAME(%i %+ _32) wrt FLAT
    94     db      066h
    95     db      0eah
    96     dd      NAME(%1 %+ _32) ;wrt FLAT
    97     dw      TEXT32 wrt FLAT
     253        ; prologue
     254%ifdef DEBUG
     255 %ifndef WITH_DWARF
     256        inc     ebp
     257 %endif
     258%endif
     259        push    ebp
     260        mov     ebp, esp                    ; bp
     261        push    ds                          ; bp - 2
     262        push    es                          ; bp - 4
     263%ifdef WITH_DWARF
     264        push    ss                          ; bp - 6
     265        lea     eax, [esp + 3*2 + 4 + 4]    ; bp - 10: return esp (16-bit)
     266        push    eax
     267%endif
     268
     269        ; Reserve the 32-bit parameter and align the stack on a 16 byte
     270        ; boundary to make GCC really happy.
     271        sub     sp, %2
     272        and     sp, 0fff0h
     273
     274        ;jmp far dword NAME(%i %+ _32) wrt FLAT
     275        db      066h
     276        db      0eah
     277        dd      NAME(%1 %+ _32) ;wrt FLAT
     278        dw      TEXT32 wrt FLAT
    98279segment TEXT32
    99280GLOBALNAME %1 %+ _32
    100     mov     ax, DATA32 wrt FLAT
    101     mov     ds, ax
    102     mov     es, ax
    103 
    104     call    KernThunkStackTo32
    105 
    106 %endmacro VBOXSF_TO_32 1
     281DWARF_LABEL_TEXT32 NAME(%1 %+ _32)
     282        mov     ax, DATA32 wrt FLAT
     283        mov     ds, ax
     284        mov     es, ax
     285
     286        call    KernThunkStackTo32
     287.vboxsf_to_32_end:
     288
     289%endmacro ; VBOXSF_TO_32
    107290
    108291;;
     
    112295;
    113296%macro VBOXSF_TO_16 1
    114     push    eax
    115     call    KernThunkStackTo16
    116     pop     eax
    117 
    118     ;jmp far dword NAME(%1 %+ _16) wrt CODE16
    119     db      066h
    120     db      0eah
    121     dw      NAME(%1 %+ _16) wrt CODE16
    122     dw      CODE16
     297.vboxsf_to_16_start:
     298        push    eax
     299        call    KernThunkStackTo16
     300        pop     eax
     301
     302        ;jmp far dword NAME(%1 %+ _16) wrt CODE16
     303        db      066h
     304        db      0eah
     305        dw      NAME(%1 %+ _16) wrt CODE16
     306        dw      CODE16
     307.vboxsf_to_16_done_32:
     308%ifdef WITH_DWARF
     309segment _debug_frame
     310.fde_start:
     311        dd      (.fde_end - .fde_start) - 4
     312        dd      g_cie_thunk_back wrt _debug_frame
     313        dd      2 ; TEXT32 idx
     314        dd      NAME(%1 %+ _32) wrt TEXT32
     315        dd      .vboxsf_to_16_done_32 - NAME(%1 %+ _32)
     316        db      DW_CFA_advance_loc | 4
     317        db      DW_CFA_advance_loc | 2
     318        db      DW_CFA_advance_loc | 2
     319        db      DW_CFA_advance_loc | 5
     320        db      DW_CFA_advance_loc2                         ; Hack to easily cover the parameter conversion code.
     321        dw      .vboxsf_to_16_start - .vboxsf_to_32_end
     322        db      DW_CFA_advance_loc | 1
     323        db      DW_CFA_advance_loc | 5
     324        db      DW_CFA_advance_loc | 1
     325        db      DW_CFA_advance_loc | 6
     326        align 4, db DW_CFA_nop
     327.fde_end:
     328 %endif ; WITH_DWARF
    123329segment CODE16
    124330GLOBALNAME %1 %+ _16
    125 
    126     ; Epilogue
    127     lea     sp, [bp - 4h]
    128     pop     es
    129     pop     ds
    130     mov     esp, ebp
    131     pop     ebp
     331DWARF_LABEL_CODE16 NAME(%1 %+ _16)
     332
     333        ; Epilogue
     334        lea     sp, [bp - 4h]
     335        pop     es
     336        pop     ds
     337        mov     esp, ebp
     338        pop     ebp
     339%ifdef DEBUG
     340 %ifndef WITH_DWARF
     341        dec     ebp
     342 %endif
     343%endif
    132344%endmacro
    133345
    134346;;
    135 ; Thunks the given 16:16 pointer to a flat pointer.
    136 ;
    137 ; @param    %1      The negated ebp offset of the input.
     347; Thunks the given 16:16 pointer to a flat pointer, NULL is returned as NULL.
     348;
     349; @param    %1      The ebp offset of the input.
    138350; @param    %2      The esp offset of the output.
    139351; @users    eax, edx, ecx
    140352;
    141353%macro VBOXSF_FARPTR_2_FLAT 2
    142     movzx   eax, word [ebp - (%1) + 2]
    143     push    eax
    144     call    KernSelToFlat
    145     movzx   edx, word [ebp - (%1)]
    146     add     eax, edx
    147     mov     [esp + (%2)], eax
     354        push    dword [ebp + (%1)]
     355        call    KernSelToFlat
     356        add     esp, 4h
     357        mov     [esp + (%2)], eax
    148358%endmacro
    149359
     
    151361; Thunks the given 16:16 struct sffsd pointer to a flat pointer.
    152362;
    153 ; @param    %1      The negated ebp offset of the input.
     363; @param    %1      The ebp offset of the input.
    154364; @param    %2      The esp offset of the output.
    155365; @users    eax, ecx
    156366;
    157367%macro VBOXSF_PSFFSD_2_FLAT 2
    158     lds     cx, [ebp - (%1)]
    159     and     ecx, 0ffffh
    160     mov     eax, dword [ecx]
    161     mov     cx, DATA32 wrt FLAT
    162     mov     [esp + (%2)], eax
    163     mov     ds, cx
     368%if 1 ; optimize later if we can.
     369        VBOXSF_FARPTR_2_FLAT %1, %2
     370%else
     371        lds     cx, [ebp + (%1)]
     372        and     ecx, 0ffffh
     373        mov     eax, dword [ecx]
     374        mov     cx, DATA32 wrt FLAT
     375        mov     [esp + (%2)], eax
     376        mov     ds, cx
     377%endif
    164378%endmacro
    165379
     
    168382; Thunks the given 16:16 struct cdfsd pointer to a flat pointer.
    169383;
    170 ; @param    %1      The negated ebp offset of the input.
     384; @param    %1      The ebp offset of the input.
    171385; @param    %2      The esp offset of the output.
    172386; @users    eax, ecx
    173387;
    174388%macro VBOXSF_PCDFSD_2_FLAT 2
    175     lds     cx, [ebp - (%1)]
    176     and     ecx, 0ffffh
    177     mov     eax, dword [ecx]
    178     mov     cx, DATA32 wrt FLAT
    179     mov     [esp + (%2)], eax
    180     mov     ds, cx
     389%if 1 ; optimize later if possible.
     390        VBOXSF_FARPTR_2_FLAT %1, %2
     391%else
     392        lds     cx, [ebp + (%1)]
     393        and     ecx, 0ffffh
     394        mov     eax, dword [ecx]
     395        mov     cx, DATA32 wrt FLAT
     396        mov     [esp + (%2)], eax
     397        mov     ds, cx
     398%endif
    181399%endmacro
    182400
     
    184402; Thunks the given 16:16 struct fsfsd pointer to a flat pointer.
    185403;
    186 ; @param    %1      The negated ebp offset of the input.
     404; @param    %1      The ebp offset of the input.
    187405; @param    %2      The esp offset of the output.
    188406; @users    eax, ecx
    189407;
    190408%macro VBOXSF_PFSFSD_2_FLAT 2
    191     lds     cx, [ebp - (%1)]
    192     and     ecx, 0ffffh
    193     mov     eax, dword [ecx]
    194     mov     cx, DATA32 wrt FLAT
    195     mov     [esp + (%2)], eax
    196     mov     ds, cx
     409%if 1 ; optimize later if possible.
     410        VBOXSF_FARPTR_2_FLAT %1, %2
     411%else
     412        lds     cx, [ebp + (%1)]
     413        and     ecx, 0ffffh
     414        mov     eax, dword [ecx]
     415        mov     cx, DATA32 wrt FLAT
     416        mov     [esp + (%2)], eax
     417        mov     ds, cx
     418%endif
    197419%endmacro
    198420
    199421
    200 
    201 ;*******************************************************************************
    202 ;* External Symbols                                                            *
    203 ;*******************************************************************************
     422;;
     423; Used for taking us from 32-bit and reserving a parameter frame.
     424;
     425; @param    %1      The function name
     426; @param    %2      The number of bytes to reserve
     427;
     428%macro VBOXSF_FROM_32 2
     429        ; prologue
     430        push    ebp
     431        mov     ebp, esp                    ; ebp
     432        push    ds                          ; ebp - 4
     433        push    es                          ; ebp - 8
     434        push    ebx                         ; ebp - 0ch
     435        push    esi                         ; ebp - 10h
     436        push    edi                         ; ebp - 14h
     437
     438        ; Reserve the 32-bit parameter
     439        sub     esp, %2
     440
     441        call    KernThunkStackTo16
     442
     443        ;jmp far dword NAME(%1 %+ _16) wrt CODE16
     444        db      066h
     445        db      0eah
     446        dw      NAME(%1 %+ _16) wrt CODE16
     447        dw      CODE16
     448.vboxsf_from_32_end:
     449
     450segment CODE16
     451GLOBALNAME %1 %+ _16
     452DWARF_LABEL_CODE16 NAME(%1 %+ _16)
     453
     454%endmacro
     455
     456
     457;;
     458; Partially countering VBOXSF_FROM_32:
     459; Take us back to 32-bit mode, but don't do the epilogue stuff.
     460;
     461; @param    %1      The function name
     462;
     463%macro VBOXSF_FROM_16_SWITCH 1
     464.vboxsf_from_16_start:
     465        ;jmp far dword NAME(%i %+ _32) wrt FLAT
     466        db      066h
     467        db      0eah
     468        dd      NAME(%1 %+ _32) ;wrt FLAT
     469        dw      TEXT32 wrt FLAT
     470.vboxsf_from_16_done_16:
     471
     472segment TEXT32
     473GLOBALNAME %1 %+ _32
     474DWARF_LABEL_TEXT32 NAME(%1 %+ _32)
     475
     476        push    eax
     477        call    KernThunkStackTo32
     478        mov     ax, DATA32 wrt FLAT
     479        mov     ds, eax
     480        mov     es, eax
     481        pop     eax
     482%endmacro
     483
     484
     485;;
     486; Does the remaining recovery after VBOXSF_FROM_32.
     487;
     488%macro VBOXSF_FROM_16_EPILOGUE 0
     489        ; Epilogue
     490        lea     esp, [ebp - 14h]
     491        pop     edi
     492        pop     esi
     493        pop     ebx
     494        pop     es
     495        pop     ds
     496        cld
     497        mov     esp, ebp
     498        pop     ebp
     499%endmacro
     500
     501
     502
     503
     504;*********************************************************************************************************************************
     505;*  External Symbols                                                                                                             *
     506;*********************************************************************************************************************************
    204507segment CODE32
    205508extern KernThunkStackTo32
     
    208511segment CODE16
    209512extern FSH_FORCENOSWAP
     513extern FSH_GETVOLPARM
    210514extern DOS16WRITE
    211515
     
    252556extern NAME(FS32_SETSWAP)
    253557extern NAME(FS32_SHUTDOWN)
     558extern NAME(FS32_VERIFYUNCNAME)
    254559extern FS32_WRITE
    255560
     
    267572global FS_NAME
    268573FS_NAME:
    269     db 'VBOXSF',0
     574        db 'VBOXSF',0
    270575
    271576;;
     
    284589FS_ATTRIBUTE:
    285590FS32_ATTRIBUTE:
    286     dd FSA_REMOTE + FSA_LARGEFILE ;+ FSA_LVL7 + FSA_LOCK
     591        dd FSA_REMOTE + FSA_LARGEFILE + FSA_UNC + FSA_LVL7 ;+ FSA_LOCK
    287592
    288593;; 64-bit mask.
     
    291596global FS_MPSAFEFLAGS2
    292597FS_MPSAFEFLAGS2:
    293     dd  0
    294     dd  0
     598        dd  1 | (1<<6)
     599        dd  0
    295600
    296601;;
    297602; Set after VBoxSFR0Init16Bit has been called.
    298603GLOBALNAME g_fDoneRing0
    299     db 0
     604        db 0
    300605
    301606align 4
     
    304609; (This is set by FS_INIT.)
    305610GLOBALNAME g_fpfnDevHlp
    306     dd 0
     611        dd 0
    307612
    308613;;
    309614; Whether initialization should be verbose or quiet.
    310615GLOBALNAME g_fVerbose
    311     db 1
     616        db 1
    312617
    313618;; DEBUGGING DEBUGGING
    314619GLOBALNAME g_u32Info
    315     dd 0
     620        dd 0
    316621
    317622;; Far pointer to DOS16WRITE (corrected set before called).
    318623; Just a 'temporary' hack to work around a wlink/nasm issue.
    319624GLOBALNAME g_fpfnDos16Write
    320     dw  DOS16WRITE
    321     dw  seg DOS16WRITE
     625        dw  DOS16WRITE
     626        dw  seg DOS16WRITE
    322627
    323628;;
    324629; The attach dd data.
    325630GLOBALNAME g_VBoxGuestAttachDD
    326     dd 0
    327     dw 0
    328     dd 0
    329     dw 0
     631        dd 0
     632        dw 0
     633        dd 0
     634        dw 0
    330635;;
    331636; The AttachDD name of the VBoxGuest.sys driver.
    332637GLOBALNAME g_szVBoxGuestName
    333     db VBOXGUEST_DEVICE_NAME_SHORT, 0
     638        db VBOXGUEST_DEVICE_NAME_SHORT, 0
    334639;;
    335640; The VBoxGuest IDC connection data.
    336641GLOBALNAME g_VBoxGuestIDC
    337     times VBGLOS2ATTACHDD_size db 0
     642        times VBGLOS2ATTACHDD_size db 0
    338643
    339644;;
     
    341646segment DATA32
    342647g_pfnDos16Write:
    343     dd  DOS16WRITE  ; flat
     648        dd  DOS16WRITE  ; flat
    344649
    345650
     
    363668VBOXSF_EP16_BEGIN   FS_ALLOCATEPAGESPACE, 'FS_ALLOCATEPAGESPACE'
    364669VBOXSF_TO_32        FS_ALLOCATEPAGESPACE, 4*4
    365     movzx   ecx, word [ebp + 08h]       ; cbWantContig
    366     mov     [esp + 3*4], ecx
    367     mov     edx, [ebp + 0ah]            ; cb
    368     mov     [esp + 2*4], edx
    369     VBOXSF_PSFFSD_2_FLAT  0eh, 1*4      ; psffsd
    370     VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; psffsi
    371     call    NAME(FS32_ALLOCATEPAGESPACE)
     670        movzx   ecx, word [ebp + 08h]       ; cbWantContig
     671        mov     [esp + 3*4], ecx
     672        mov     edx, [ebp + 0ah]            ; cb
     673        mov     [esp + 2*4], edx
     674        VBOXSF_PSFFSD_2_FLAT  0eh, 1*4      ; psffsd
     675        VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; psffsi
     676        call    NAME(FS32_ALLOCATEPAGESPACE)
    372677VBOXSF_TO_16        FS_ALLOCATEPAGESPACE
    373     retf    0eh
     678        retf    0eh
    374679VBOXSF_EP16_END     FS_ALLOCATEPAGESPACE
    375680
     
    378683;
    379684VBOXSF_EP16_BEGIN   FS_ATTACH, 'FS_ATTACH'
    380     ;
    381     ; Initialized ring-0 yet? (this is a likely first entry point)
    382     ;
    383     push    ds
    384     mov     ax, DATA16
    385     mov     ds, ax
    386     test    byte [NAME(g_fDoneRing0)], 1
    387     jnz     .DoneRing0
    388     call    NAME(VBoxSFR0Init16Bit)
     685        ;
     686        ; Initialized ring-0 yet? (this is a likely first entry point)
     687        ;
     688        push    ds
     689        mov     ax, DATA16
     690        mov     ds, ax
     691        test    byte [NAME(g_fDoneRing0)], 1
     692        jnz     .DoneRing0
     693        call    NAME(VBoxSFR0Init16Bit)
    389694.DoneRing0:
    390     pop     ds
     695        pop     ds
    391696
    392697VBOXSF_TO_32        FS_ATTACH, 6*4
    393     VBOXSF_FARPTR_2_FLAT  08h, 5*4      ; pcbParm
    394     VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pszParm
    395     VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pcdfsd
    396     VBOXSF_FARPTR_2_FLAT  14h, 2*4      ; pvpfsd
    397     VBOXSF_FARPTR_2_FLAT  18h, 1*4      ; pszDev
    398     movzx   ecx, word [ebp + 1ch]       ; fFlag
    399     mov     [esp], ecx
    400     call    NAME(FS32_ATTACH)
     698        VBOXSF_FARPTR_2_FLAT  08h, 5*4      ; pcbParm
     699        VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pszParm
     700        VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pcdfsd
     701        VBOXSF_FARPTR_2_FLAT  14h, 2*4      ; pvpfsd
     702        VBOXSF_FARPTR_2_FLAT  18h, 1*4      ; pszDev
     703        movzx   ecx, word [ebp + 1ch]       ; fFlag
     704        mov     [esp], ecx
     705        call    NAME(FS32_ATTACH)
    401706VBOXSF_TO_16        FS_ATTACH
    402     retf    16h
     707        retf    16h
    403708VBOXSF_EP16_END     FS_ATTACH
    404709
     
    408713VBOXSF_EP16_BEGIN   FS_CANCELLOCKREQUEST, 'FS_CANCELLOCKREQUEST'
    409714VBOXSF_TO_32        FS_CANCELLOCKREQUEST, 3*4
    410     VBOXSF_FARPTR_2_FLAT  08h, 2*4      ; pLockRange
    411     VBOXSF_PSFFSD_2_FLAT  0ch, 1*4      ; psffsd
    412     VBOXSF_FARPTR_2_FLAT  10h, 0*4      ; psffsi
    413     call    NAME(FS32_CANCELLOCKREQUEST)
     715        VBOXSF_FARPTR_2_FLAT  08h, 2*4      ; pLockRange
     716        VBOXSF_PSFFSD_2_FLAT  0ch, 1*4      ; psffsd
     717        VBOXSF_FARPTR_2_FLAT  10h, 0*4      ; psffsi
     718        call    NAME(FS32_CANCELLOCKREQUEST)
    414719VBOXSF_TO_16        FS_CANCELLOCKREQUEST
    415     retf    0ch
     720        retf    0ch
    416721VBOXSF_EP16_END     FS_CANCELLOCKREQUEST
    417722
     
    421726VBOXSF_EP16_BEGIN   FS_CANCELLOCKREQUESTL, 'FS_CANCELLOCKREQUESTL'
    422727VBOXSF_TO_32        FS_CANCELLOCKREQUESTL, 3*4
    423     VBOXSF_FARPTR_2_FLAT  08h, 2*4      ; pLockRange
    424     VBOXSF_PSFFSD_2_FLAT  0ch, 1*4      ; psffsd
    425     VBOXSF_FARPTR_2_FLAT  10h, 0*4      ; psffsi
    426     call    NAME(FS32_CANCELLOCKREQUESTL)
     728        VBOXSF_FARPTR_2_FLAT  08h, 2*4      ; pLockRange
     729        VBOXSF_PSFFSD_2_FLAT  0ch, 1*4      ; psffsd
     730        VBOXSF_FARPTR_2_FLAT  10h, 0*4      ; psffsi
     731        call    NAME(FS32_CANCELLOCKREQUESTL)
    427732VBOXSF_TO_16        FS_CANCELLOCKREQUESTL
    428     retf    0ch
     733        retf    0ch
    429734VBOXSF_EP16_END     FS_CANCELLOCKREQUESTL
    430735
     
    434739VBOXSF_EP16_BEGIN   FS_CHDIR, 'FS_CHDIR'
    435740VBOXSF_TO_32        FS_CHDIR, 5*4
    436     movzx   ecx, word [ebp + 08h]       ; iCurDirEnd
    437     mov     [esp + 4*4], ecx
    438     VBOXSF_FARPTR_2_FLAT  0ah, 3*4      ; pszDir
    439     VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pcdfsd (use slow thunk here, see flag)
    440     VBOXSF_FARPTR_2_FLAT  12h, 1*4      ; pcdfsi
    441     movzx   eax, word [ebp + 16h]       ; flag
    442     mov     [esp], eax
    443     call    NAME(FS32_CHDIR)
     741        movsx   ecx, word [ebp + 08h]       ; iCurDirEnd
     742        mov     [esp + 4*4], ecx
     743        VBOXSF_FARPTR_2_FLAT  0ah, 3*4      ; pszDir
     744        VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pcdfsd (use slow thunk here, see flag)
     745        VBOXSF_FARPTR_2_FLAT  12h, 1*4      ; pcdfsi
     746        movzx   eax, word [ebp + 16h]       ; flag
     747        mov     [esp], eax
     748        call    NAME(FS32_CHDIR)
    444749VBOXSF_TO_16        FS_CHDIR
    445     retf    10h
     750        retf    10h
    446751VBOXSF_EP16_END     FS_CHDIR
    447752
     
    450755VBOXSF_EP16_BEGIN   FS_CHGFILEPTR, 'FS_CHGFILEPTR'
    451756VBOXSF_TO_32        FS_CHGFILEPTR, 6*4
    452     movzx   ecx, word [ebp + 08h]       ; IOflag
    453     mov     [esp + 5*4], ecx
    454     movzx   edx, word [ebp + 0ah]       ; usMethod
    455     mov     [esp + 4*4], edx
    456     mov     eax, [ebp + 0ch]            ; off
    457     mov     [esp + 2*4], eax
    458     rol     eax, 1                      ; high dword - is there a better way than this?
    459     and     eax, 1
    460     mov     edx, 0ffffffffh
    461     mul     edx
    462     mov     [esp + 3*4], eax
    463     VBOXSF_PSFFSD_2_FLAT  10h, 1*4      ; psffsd
    464     VBOXSF_FARPTR_2_FLAT  14h, 0*4      ; psffsi
    465     call    FS32_CHGFILEPTRL
     757        movzx   ecx, word [ebp + 08h]       ; IOflag
     758        mov     [esp + 5*4], ecx
     759        movzx   edx, word [ebp + 0ah]       ; usMethod
     760        mov     [esp + 4*4], edx
     761        mov     eax, [ebp + 0ch]            ; off
     762        mov     [esp + 2*4], eax
     763        rol     eax, 1                      ; high dword - is there a better way than this?
     764        and     eax, 1
     765        mov     edx, 0ffffffffh
     766        mul     edx
     767        mov     [esp + 3*4], eax
     768        VBOXSF_PSFFSD_2_FLAT  10h, 1*4      ; psffsd
     769        VBOXSF_FARPTR_2_FLAT  14h, 0*4      ; psffsi
     770        call    FS32_CHGFILEPTRL
    466771VBOXSF_TO_16        FS_CHGFILEPTR
    467     retf    10h
     772        retf    10h
    468773VBOXSF_EP16_END     FS_CHGFILEPTR
    469774
     
    474779VBOXSF_EP16_BEGIN   FS_CLOSE, 'FS_CLOSE'
    475780VBOXSF_TO_32        FS_CLOSE, 4*4
    476     VBOXSF_PSFFSD_2_FLAT  08h, 3*4      ; psffsd
    477     VBOXSF_FARPTR_2_FLAT  0ch, 2*4      ; psffsi
    478     movzx   ecx, word [ebp + 10h]       ; IOflag
    479     mov     [esp + 1*4], ecx
    480     movzx   edx, word [ebp + 12h]       ; type
    481     mov     [esp], edx
    482     call    NAME(FS32_CLOSE)
     781        VBOXSF_PSFFSD_2_FLAT  08h, 3*4      ; psffsd
     782        VBOXSF_FARPTR_2_FLAT  0ch, 2*4      ; psffsi
     783        movzx   ecx, word [ebp + 10h]       ; IOflag
     784        mov     [esp + 1*4], ecx
     785        movzx   edx, word [ebp + 12h]       ; type
     786        mov     [esp], edx
     787        call    NAME(FS32_CLOSE)
    483788VBOXSF_TO_16        FS_CLOSE
    484     retf    0ch
     789        retf    0ch
    485790VBOXSF_EP16_END     FS_CLOSE
    486791
     
    491796VBOXSF_EP16_BEGIN   FS_COMMIT, 'FS_COMMIT'
    492797VBOXSF_TO_32        FS_COMMIT, 4*4
    493     VBOXSF_PSFFSD_2_FLAT  08h, 3*4      ; psffsd
    494     VBOXSF_FARPTR_2_FLAT  0ch, 2*4      ; psffsi
    495     movzx   ecx, word [ebp + 10h]       ; IOflag
    496     mov     [esp + 1*4], ecx
    497     movzx   edx, word [ebp + 12h]       ; type
    498     mov     [esp], edx
    499     call    NAME(FS32_COMMIT)
     798        VBOXSF_PSFFSD_2_FLAT  08h, 3*4      ; psffsd
     799        VBOXSF_FARPTR_2_FLAT  0ch, 2*4      ; psffsi
     800        movzx   ecx, word [ebp + 10h]       ; IOflag
     801        mov     [esp + 1*4], ecx
     802        movzx   edx, word [ebp + 12h]       ; type
     803        mov     [esp], edx
     804        call    NAME(FS32_COMMIT)
    500805VBOXSF_TO_16        FS_COMMIT
    501     retf    0ch
     806        retf    0ch
    502807VBOXSF_EP16_END     FS_COMMIT
    503808
     
    507812VBOXSF_EP16_BEGIN   FS_COPY, 'FS_COPY'
    508813VBOXSF_TO_32        FS_COPY, 8*4
    509     movzx   ecx, word [ebp + 08h]       ; flag
    510     mov     [esp + 7*4], ecx
    511     movzx   edx, word [ebp + 0ah]       ; iDstCurDirEnd
    512     mov     [esp + 6*4], edx
    513     VBOXSF_FARPTR_2_FLAT  0ch, 5*4      ; pszDst
    514     movzx   eax, word [ebp + 10h]       ; iSrcCurDirEnd
    515     mov     [esp + 4*4], eax
    516     VBOXSF_FARPTR_2_FLAT  12h, 3*4      ; pszSrc
    517     VBOXSF_PCDFSD_2_FLAT  16h, 2*4      ; psffsd
    518     VBOXSF_FARPTR_2_FLAT  1ah, 1*4      ; psffsi
    519     movzx   ecx, word [ebp + 1eh]       ; flag
    520     mov     [esp], ecx
    521     call    NAME(FS32_COPY)
     814        movzx   ecx, word [ebp + 08h]       ; flag
     815        mov     [esp + 7*4], ecx
     816        movsx   edx, word [ebp + 0ah]       ; iDstCurDirEnd
     817        mov     [esp + 6*4], edx
     818        VBOXSF_FARPTR_2_FLAT  0ch, 5*4      ; pszDst
     819        movsx   eax, word [ebp + 10h]       ; iSrcCurDirEnd
     820        mov     [esp + 4*4], eax
     821        VBOXSF_FARPTR_2_FLAT  12h, 3*4      ; pszSrc
     822        VBOXSF_PCDFSD_2_FLAT  16h, 2*4      ; psffsd
     823        VBOXSF_FARPTR_2_FLAT  1ah, 1*4      ; psffsi
     824        movzx   ecx, word [ebp + 1eh]       ; flag
     825        mov     [esp], ecx
     826        call    NAME(FS32_COPY)
    522827VBOXSF_TO_16        FS_COPY
    523     retf    18h
     828        retf    18h
    524829VBOXSF_EP16_END     FS_COPY
    525830
     
    529834VBOXSF_EP16_BEGIN   FS_DELETE, 'FS_DELETE'
    530835VBOXSF_TO_32        FS_DELETE, 4*4
    531     movzx   ecx, word [ebp + 08h]       ; iCurDirEnd
    532     mov     [esp + 3*4], ecx
    533     VBOXSF_FARPTR_2_FLAT  0ah, 2*4      ; pszFile
    534     VBOXSF_PCDFSD_2_FLAT  0eh, 1*4      ; pcdfsd
    535     VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; pcdfsi
    536     call    NAME(FS32_DELETE)
     836        movsx   ecx, word [ebp + 08h]       ; iCurDirEnd
     837        mov     [esp + 3*4], ecx
     838        VBOXSF_FARPTR_2_FLAT  0ah, 2*4      ; pszFile
     839        VBOXSF_PCDFSD_2_FLAT  0eh, 1*4      ; pcdfsd
     840        VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; pcdfsi
     841        call    NAME(FS32_DELETE)
    537842VBOXSF_TO_16        FS_DELETE
    538     retf    0eh
     843        retf    0eh
    539844VBOXSF_EP16_END FS_DELETE
    540845
     
    544849VBOXSF_EP16_BEGIN   FS_DOPAGEIO, 'FS_DOPAGEIO'
    545850VBOXSF_TO_32        FS_DOPAGEIO, 3*4
    546     VBOXSF_FARPTR_2_FLAT  08h, 2*4      ; pList
    547     VBOXSF_PSFFSD_2_FLAT  0ch, 1*4      ; psffsd
    548     VBOXSF_FARPTR_2_FLAT  10h, 0*4      ; psffsi
    549     call    NAME(FS32_DOPAGEIO)
     851        VBOXSF_FARPTR_2_FLAT  08h, 2*4      ; pList
     852        VBOXSF_PSFFSD_2_FLAT  0ch, 1*4      ; psffsd
     853        VBOXSF_FARPTR_2_FLAT  10h, 0*4      ; psffsi
     854        call    NAME(FS32_DOPAGEIO)
    550855VBOXSF_TO_16        FS_DOPAGEIO
    551     retf    0ch
     856        retf    0ch
    552857VBOXSF_EP16_END     FS_DOPAGEIO
    553858
     
    555860; @cproto void FS_EXIT(USHORT uid, USHORT pid, USHORT pdb)
    556861VBOXSF_EP16_BEGIN   FS_EXIT, 'FS_EXIT'
    557     ;
    558     ; Initialized ring-0 yet? (this is a likely first entry point)
    559     ;
    560     push    ds
    561     mov     ax, DATA16
    562     mov     ds, ax
    563     test    byte [NAME(g_fDoneRing0)], 1
    564     jnz     .DoneRing0
    565     call    NAME(VBoxSFR0Init16Bit)
     862        ;
     863        ; Initialized ring-0 yet? (this is a likely first entry point)
     864        ;
     865        push    ds
     866        mov     ax, DATA16
     867        mov     ds, ax
     868        test    byte [NAME(g_fDoneRing0)], 1
     869        jnz     .DoneRing0
     870        call    NAME(VBoxSFR0Init16Bit)
    566871.DoneRing0:
    567     pop     ds
     872        pop     ds
    568873
    569874VBOXSF_TO_32        FS_EXIT, 3*4
    570     movzx   ecx, word [ebp + 08h]       ; pdb
    571     mov     [esp + 2*4], ecx
    572     movzx   edx, word [ebp + 0ah]       ; pib
    573     mov     [esp + 1*4], edx
    574     movzx   eax, word [ebp + 0ch]       ; uid
    575     mov     [esp], eax
    576     call    NAME(FS32_EXIT)
     875        movzx   ecx, word [ebp + 08h]       ; pdb
     876        mov     [esp + 2*4], ecx
     877        movzx   edx, word [ebp + 0ah]       ; pib
     878        mov     [esp + 1*4], edx
     879        movzx   eax, word [ebp + 0ch]       ; uid
     880        mov     [esp], eax
     881        call    NAME(FS32_EXIT)
    577882VBOXSF_TO_16        FS_EXIT
    578     retf    6h
     883        retf    6h
    579884VBOXSF_EP16_END     FS_EXIT
    580885
     
    585890VBOXSF_EP16_BEGIN   FS_FILEATTRIBUTE, 'FS_FILEATTRIBUTE'
    586891VBOXSF_TO_32        FS_FILEATTRIBUTE, 6*4
    587     VBOXSF_FARPTR_2_FLAT  08h, 5*4      ; pAttr
    588     movzx   ecx, word [ebp + 0ch]       ; iCurDirEnd
    589     mov     [esp + 4*4], ecx
    590     VBOXSF_FARPTR_2_FLAT  0eh, 3*4      ; pszName
    591     VBOXSF_PCDFSD_2_FLAT  12h, 2*4      ; pcdfsd
    592     VBOXSF_FARPTR_2_FLAT  16h, 1*4      ; pcdfsi
    593     movzx   edx, word [ebp + 1ah]       ; flag
    594     mov     [esp], edx
    595     call    NAME(FS32_FILEATTRIBUTE)
     892        VBOXSF_FARPTR_2_FLAT  08h, 5*4      ; pAttr
     893        movsx   ecx, word [ebp + 0ch]       ; iCurDirEnd - caller may pass 0xffff, so sign extend.
     894        mov     [esp + 4*4], ecx
     895        VBOXSF_FARPTR_2_FLAT  0eh, 3*4      ; pszName
     896        VBOXSF_PCDFSD_2_FLAT  12h, 2*4      ; pcdfsd
     897        VBOXSF_FARPTR_2_FLAT  16h, 1*4      ; pcdfsi
     898        movzx   edx, word [ebp + 1ah]       ; flag
     899        mov     [esp], edx
     900        call    NAME(FS32_FILEATTRIBUTE)
    596901VBOXSF_TO_16        FS_FILEATTRIBUTE
    597     retf    14h
     902        retf    14h
    598903VBOXSF_EP16_END     FS_FILEATTRIBUTE
    599904
     
    604909VBOXSF_EP16_BEGIN   FS_FILEINFO, 'FS_FILEINFO'
    605910VBOXSF_TO_32        FS_FILEINFO, 7*4
    606     movzx   ecx, word [ebp + 08h]       ; IOflag
    607     mov     [esp + 6*4], ecx
    608     movzx   edx, word [ebp + 0ah]       ; cbData
    609     mov     [esp + 5*4], edx
    610     VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pData
    611     movzx   eax, word [ebp + 10h]       ; level
    612     mov     [esp + 3*4], eax
    613     VBOXSF_PSFFSD_2_FLAT  12h, 2*4      ; psffsd
    614     VBOXSF_FARPTR_2_FLAT  16h, 1*4      ; psffsi
    615     movzx   ecx, word [ebp + 1ah]       ; flag
    616     mov     [esp], ecx
    617     call    NAME(FS32_FILEINFO)
     911        movzx   ecx, word [ebp + 08h]       ; IOflag
     912        mov     [esp + 6*4], ecx
     913        movzx   edx, word [ebp + 0ah]       ; cbData
     914        mov     [esp + 5*4], edx
     915        VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pData
     916        movzx   eax, word [ebp + 10h]       ; level
     917        mov     [esp + 3*4], eax
     918        VBOXSF_PSFFSD_2_FLAT  12h, 2*4      ; psffsd
     919        VBOXSF_FARPTR_2_FLAT  16h, 1*4      ; psffsi
     920        movzx   ecx, word [ebp + 1ah]       ; flag
     921        mov     [esp], ecx
     922        call    NAME(FS32_FILEINFO)
    618923VBOXSF_TO_16        FS_FILEINFO
    619     retf    14h
     924        retf    14h
    620925VBOXSF_EP16_END     FS_FILEINFO
    621926
     
    626931VBOXSF_EP16_BEGIN   FS_FILEIO, 'FS_FILEIO'
    627932VBOXSF_TO_32        FS_FILEIO, 6*4
    628     movzx   ecx, word [ebp + 08h]       ; IOFlag
    629     mov     [esp + 5*4], ecx
    630     VBOXSF_FARPTR_2_FLAT  0ah, 4*4      ; poError
    631     movzx   edx, word [ebp + 0eh]       ; cbCmdList
    632     mov     [esp + 3*4], edx
    633     VBOXSF_FARPTR_2_FLAT  10h, 2*4      ; pCmdList
    634     VBOXSF_PSFFSD_2_FLAT  14h, 1*4      ; psffsd
    635     VBOXSF_FARPTR_2_FLAT  18h, 0*4      ; psffsi
    636     call    NAME(FS32_FILEIO)
     933        movzx   ecx, word [ebp + 08h]       ; IOFlag
     934        mov     [esp + 5*4], ecx
     935        VBOXSF_FARPTR_2_FLAT  0ah, 4*4      ; poError
     936        movzx   edx, word [ebp + 0eh]       ; cbCmdList
     937        mov     [esp + 3*4], edx
     938        VBOXSF_FARPTR_2_FLAT  10h, 2*4      ; pCmdList
     939        VBOXSF_PSFFSD_2_FLAT  14h, 1*4      ; psffsd
     940        VBOXSF_FARPTR_2_FLAT  18h, 0*4      ; psffsi
     941        call    NAME(FS32_FILEIO)
    637942VBOXSF_TO_16        FS_FILEIO
    638     retf    14h
     943        retf    14h
    639944VBOXSF_EP16_END     FS_FILEIO
    640945
     
    645950VBOXSF_EP16_BEGIN   FS_FILELOCKS, 'FS_FILELOCKS'
    646951VBOXSF_TO_32        FS_FILELOCKS, 6*4
    647     mov     ecx, [ebp + 08h]            ; flags
    648     mov     [esp + 5*4], ecx
    649     mov     edx, [ebp + 0ch]            ; timeout
    650     mov     [esp + 4*4], edx
    651     VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pLockRange
    652     VBOXSF_FARPTR_2_FLAT  14h, 2*4      ; pUnLockRange
    653     VBOXSF_PSFFSD_2_FLAT  18h, 1*4      ; psffsd
    654     VBOXSF_FARPTR_2_FLAT  1ch, 0*4      ; psffsi
    655     call    NAME(FS32_FILELOCKS)
     952        mov     ecx, [ebp + 08h]            ; flags
     953        mov     [esp + 5*4], ecx
     954        mov     edx, [ebp + 0ch]            ; timeout
     955        mov     [esp + 4*4], edx
     956        VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pLockRange
     957        VBOXSF_FARPTR_2_FLAT  14h, 2*4      ; pUnLockRange
     958        VBOXSF_PSFFSD_2_FLAT  18h, 1*4      ; psffsd
     959        VBOXSF_FARPTR_2_FLAT  1ch, 0*4      ; psffsi
     960        call    NAME(FS32_FILELOCKS)
    656961VBOXSF_TO_16        FS_FILELOCKS
    657     retf    18h
     962        retf    18h
    658963VBOXSF_EP16_END     FS_FILELOCKS
    659964
     
    664969VBOXSF_EP16_BEGIN   FS_FILELOCKSL, 'FS_FILELOCKSL'
    665970VBOXSF_TO_32        FS_FILELOCKSL, 6*4
    666     mov     ecx, [ebp + 08h]            ; flags
    667     mov     [esp + 5*4], ecx
    668     mov     edx, [ebp + 0ch]            ; timeout
    669     mov     [esp + 4*4], edx
    670     VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pLockRange
    671     VBOXSF_FARPTR_2_FLAT  14h, 2*4      ; pUnLockRange
    672     VBOXSF_PSFFSD_2_FLAT  18h, 1*4      ; psffsd
    673     VBOXSF_FARPTR_2_FLAT  1ch, 0*4      ; psffsi
    674     call    NAME(FS32_FILELOCKS)
     971        mov     ecx, [ebp + 08h]            ; flags
     972        mov     [esp + 5*4], ecx
     973        mov     edx, [ebp + 0ch]            ; timeout
     974        mov     [esp + 4*4], edx
     975        VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pLockRange
     976        VBOXSF_FARPTR_2_FLAT  14h, 2*4      ; pUnLockRange
     977        VBOXSF_PSFFSD_2_FLAT  18h, 1*4      ; psffsd
     978        VBOXSF_FARPTR_2_FLAT  1ch, 0*4      ; psffsi
     979        call    NAME(FS32_FILELOCKS)
    675980VBOXSF_TO_16        FS_FILELOCKSL
    676     retf    18h
     981        retf    18h
    677982VBOXSF_EP16_END     FS_FILELOCKSL
    678983
     
    683988VBOXSF_EP16_BEGIN   FS_FINDCLOSE, 'FS_FINDCLOSE'
    684989VBOXSF_TO_32        FS_FINDCLOSE, 2*4
    685     VBOXSF_PFSFSD_2_FLAT  08h, 1*4      ; pfsfsd
    686     VBOXSF_FARPTR_2_FLAT  0ch, 0*4      ; pfsfsi
    687     call    NAME(FS32_FINDCLOSE)
     990        VBOXSF_PFSFSD_2_FLAT  08h, 1*4      ; pfsfsd
     991        VBOXSF_FARPTR_2_FLAT  0ch, 0*4      ; pfsfsi
     992        call    NAME(FS32_FINDCLOSE)
    688993VBOXSF_TO_16        FS_FINDCLOSE
    689     retf    8h
     994        retf    8h
    690995VBOXSF_EP16_END     FS_FINDCLOSE
    691996
     
    6981003VBOXSF_EP16_BEGIN   FS_FINDFIRST, 'FS_FINDFIRST'
    6991004VBOXSF_TO_32        FS_FINDFIRST, 12*4
    700     movzx   ecx, word [ebp + 08h]       ; flags
    701     mov     [esp + 11*4], ecx
    702     movzx   edx, word [ebp + 0ah]       ; level
    703     mov     [esp + 10*4], edx
    704     VBOXSF_FARPTR_2_FLAT  0ch, 9*4      ; pcMatch
    705     movzx   eax, word [ebp + 10h]       ; cbData
    706     mov     [esp + 8*4], eax
    707     VBOXSF_FARPTR_2_FLAT  12h, 7*4      ; pbData
    708     VBOXSF_FARPTR_2_FLAT  16h, 6*4      ; pfsfsd
    709     VBOXSF_FARPTR_2_FLAT  1ah, 5*4      ; pfsfsi
    710     movzx   ecx, word [ebp + 1eh]       ; attr
    711     mov     [esp + 4*4], ecx
    712     movzx   edx, word [ebp + 20h]       ; iCurDirEnd
    713     mov     [esp + 3*4], edx
    714     VBOXSF_FARPTR_2_FLAT  22h, 2*4      ; pszName
    715     VBOXSF_PCDFSD_2_FLAT  26h, 1*4      ; pcdfsd
    716     VBOXSF_FARPTR_2_FLAT  2ah, 0*4      ; pcdfsi
    717     call    NAME(FS32_FINDFIRST)
     1005        movzx   ecx, word [ebp + 08h]       ; flags
     1006        mov     [esp + 11*4], ecx
     1007        movzx   edx, word [ebp + 0ah]       ; level
     1008        mov     [esp + 10*4], edx
     1009        VBOXSF_FARPTR_2_FLAT  0ch, 9*4      ; pcMatch
     1010        movzx   eax, word [ebp + 10h]       ; cbData
     1011        mov     [esp + 8*4], eax
     1012        VBOXSF_FARPTR_2_FLAT  12h, 7*4      ; pbData
     1013        VBOXSF_FARPTR_2_FLAT  16h, 6*4      ; pfsfsd
     1014        VBOXSF_FARPTR_2_FLAT  1ah, 5*4      ; pfsfsi
     1015        movzx   ecx, word [ebp + 1eh]       ; attr
     1016        mov     [esp + 4*4], ecx
     1017        movsx   edx, word [ebp + 20h]       ; iCurDirEnd
     1018        mov     [esp + 3*4], edx
     1019        VBOXSF_FARPTR_2_FLAT  22h, 2*4      ; pszName
     1020        VBOXSF_PCDFSD_2_FLAT  26h, 1*4      ; pcdfsd
     1021        VBOXSF_FARPTR_2_FLAT  2ah, 0*4      ; pcdfsi
     1022        call    NAME(FS32_FINDFIRST)
    7181023VBOXSF_TO_16        FS_FINDFIRST
    719     retf    26h
     1024        retf    26h
    7201025VBOXSF_EP16_END FS_FINDFIRST
    7211026
     
    7271032VBOXSF_EP16_BEGIN   FS_FINDFROMNAME, 'FS_FINDFROMNAME'
    7281033VBOXSF_TO_32        FS_FINDFROMNAME, 9*4
    729     movzx   ecx, word [ebp + 08h]       ; flags
    730     mov     [esp + 8*4], ecx
    731     VBOXSF_FARPTR_2_FLAT  0ah, 7*4      ; pszName
    732     mov     edx, [ebp + 0eh]            ; position
    733     mov     [esp + 6*4], edx
    734     movzx   eax, word [ebp + 12h]       ; level
    735     mov     [esp + 5*4], eax
    736     VBOXSF_FARPTR_2_FLAT  14h, 4*4      ; pcMatch
    737     movzx   eax, word [ebp + 18h]       ; cbData
    738     mov     [esp + 3*4], eax
    739     VBOXSF_FARPTR_2_FLAT  1ah, 2*4      ; pbData
    740     VBOXSF_PFSFSD_2_FLAT  1eh, 1*4      ; pfsfsd
    741     VBOXSF_FARPTR_2_FLAT  22h, 0*4      ; pfsfsi
    742     call    NAME(FS32_FINDFROMNAME)
     1034        movzx   ecx, word [ebp + 08h]       ; flags
     1035        mov     [esp + 8*4], ecx
     1036        VBOXSF_FARPTR_2_FLAT  0ah, 7*4      ; pszName
     1037        mov     edx, [ebp + 0eh]            ; position
     1038        mov     [esp + 6*4], edx
     1039        movzx   eax, word [ebp + 12h]       ; level
     1040        mov     [esp + 5*4], eax
     1041        VBOXSF_FARPTR_2_FLAT  14h, 4*4      ; pcMatch
     1042        movzx   eax, word [ebp + 18h]       ; cbData
     1043        mov     [esp + 3*4], eax
     1044        VBOXSF_FARPTR_2_FLAT  1ah, 2*4      ; pbData
     1045        VBOXSF_PFSFSD_2_FLAT  1eh, 1*4      ; pfsfsd
     1046        VBOXSF_FARPTR_2_FLAT  22h, 0*4      ; pfsfsi
     1047        call    NAME(FS32_FINDFROMNAME)
    7431048VBOXSF_TO_16        FS_FINDFROMNAME
    744     retf    1eh
     1049        retf    1eh
    7451050VBOXSF_EP16_END     FS_FINDFROMNAME
    7461051
     
    7521057VBOXSF_EP16_BEGIN   FS_FINDNEXT, 'FS_FINDNEXT'
    7531058VBOXSF_TO_32        FS_FINDNEXT, 7*4
    754     movzx   ecx, word [ebp + 08h]       ; flags
    755     mov     [esp + 6*4], ecx
    756     movzx   eax, word [ebp + 0ah]       ; level
    757     mov     [esp + 5*4], eax
    758     VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pcMatch
    759     movzx   eax, word [ebp + 10h]       ; cbData
    760     mov     [esp + 3*4], eax
    761     VBOXSF_FARPTR_2_FLAT  12h, 2*4      ; pbData
    762     VBOXSF_PFSFSD_2_FLAT  16h, 1*4      ; pfsfsd
    763     VBOXSF_FARPTR_2_FLAT  1ah, 0*4      ; pfsfsi
    764     call    NAME(FS32_FINDNEXT)
     1059        movzx   ecx, word [ebp + 08h]       ; flags
     1060        mov     [esp + 6*4], ecx
     1061        movzx   eax, word [ebp + 0ah]       ; level
     1062        mov     [esp + 5*4], eax
     1063        VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pcMatch
     1064        movzx   eax, word [ebp + 10h]       ; cbData
     1065        mov     [esp + 3*4], eax
     1066        VBOXSF_FARPTR_2_FLAT  12h, 2*4      ; pbData
     1067        VBOXSF_PFSFSD_2_FLAT  16h, 1*4      ; pfsfsd
     1068        VBOXSF_FARPTR_2_FLAT  1ah, 0*4      ; pfsfsi
     1069        call    NAME(FS32_FINDNEXT)
    7651070VBOXSF_TO_16        FS_FINDNEXT
    766     retf    16h
     1071        retf    16h
    7671072VBOXSF_EP16_END     FS_FINDNEXT
    7681073
     
    7731078VBOXSF_EP16_BEGIN   FS_FINDNOTIFYCLOSE, 'FS_FINDNOTIFYCLOSE'
    7741079VBOXSF_TO_32        FS_FINDNOTIFYCLOSE, 1*4
    775     movzx   ecx, word [ebp + 08h]       ; handle
    776     mov     [esp], ecx
    777     call    NAME(FS32_FINDNOTIFYCLOSE)
     1080        movzx   ecx, word [ebp + 08h]       ; handle
     1081        mov     [esp], ecx
     1082        call    NAME(FS32_FINDNOTIFYCLOSE)
    7781083VBOXSF_TO_16        FS_FINDNOTIFYCLOSE
    779     retf    2h
     1084        retf    2h
    7801085VBOXSF_EP16_END     FS_FINDNOTIFYCLOSE
    7811086
     
    7881093VBOXSF_EP16_BEGIN   FS_FINDNOTIFYFIRST, 'FS_FINDNOTIFYFIRST'
    7891094VBOXSF_TO_32        FS_FINDNOTIFYFIRST, 11*4
    790     movzx   ecx, word [ebp + 08h]       ; flags
    791     mov     [esp + 10*4], ecx
    792     movzx   edx, word [ebp + 0ah]       ; level
    793     mov     [esp + 9*4], edx
    794     VBOXSF_FARPTR_2_FLAT  0ch, 8*4      ; pcMatch
    795     movzx   eax, word [ebp + 10h]       ; cbData
    796     mov     [esp + 7*4], eax
    797     VBOXSF_FARPTR_2_FLAT  12h, 6*4      ; pbData
    798     VBOXSF_FARPTR_2_FLAT  16h, 5*4      ; pHandle
    799     movzx   ecx, word [ebp + 1ah]       ; attr
    800     mov     [esp + 4*4], ecx
    801     movzx   edx, word [ebp + 1ch]       ; iCurDirEnd
    802     mov     [esp + 3*4], edx
    803     VBOXSF_FARPTR_2_FLAT  1eh, 2*4      ; pszName
    804     VBOXSF_PCDFSD_2_FLAT  22h, 1*4      ; pcdfsd
    805     VBOXSF_FARPTR_2_FLAT  26h, 0*4      ; pcdfsi
    806     call    NAME(FS32_FINDNOTIFYFIRST)
     1095        movzx   ecx, word [ebp + 08h]       ; flags
     1096        mov     [esp + 10*4], ecx
     1097        movzx   edx, word [ebp + 0ah]       ; level
     1098        mov     [esp + 9*4], edx
     1099        VBOXSF_FARPTR_2_FLAT  0ch, 8*4      ; pcMatch
     1100        movzx   eax, word [ebp + 10h]       ; cbData
     1101        mov     [esp + 7*4], eax
     1102        VBOXSF_FARPTR_2_FLAT  12h, 6*4      ; pbData
     1103        VBOXSF_FARPTR_2_FLAT  16h, 5*4      ; pHandle
     1104        movzx   ecx, word [ebp + 1ah]       ; attr
     1105        mov     [esp + 4*4], ecx
     1106        movsx   edx, word [ebp + 1ch]       ; iCurDirEnd
     1107        mov     [esp + 3*4], edx
     1108        VBOXSF_FARPTR_2_FLAT  1eh, 2*4      ; pszName
     1109        VBOXSF_PCDFSD_2_FLAT  22h, 1*4      ; pcdfsd
     1110        VBOXSF_FARPTR_2_FLAT  26h, 0*4      ; pcdfsi
     1111        call    NAME(FS32_FINDNOTIFYFIRST)
    8071112VBOXSF_TO_16        FS_FINDNOTIFYFIRST
    808     retf    22h
     1113        retf    22h
    8091114VBOXSF_EP16_END     FS_FINDNOTIFYFIRST
    8101115
     
    8161121VBOXSF_EP16_BEGIN FS_FINDNOTIFYNEXT, 'FS_FINDNOTIFYNEXT'
    8171122VBOXSF_TO_32        FS_FINDNOTIFYNEXT, 6*4
    818     mov     ecx, [ebp + 08h]            ; timeout
    819     mov     [esp + 5*4], ecx
    820     movzx   edx, word [ebp + 0ch]       ; level
    821     mov     [esp + 4*4], edx
    822     VBOXSF_FARPTR_2_FLAT  0eh, 3*4      ; pcMatch
    823     movzx   eax, word [ebp + 12h]       ; cbData
    824     mov     [esp + 2*4], eax
    825     VBOXSF_FARPTR_2_FLAT  14h, 1*4      ; pbData
    826     movzx   ecx, word [ebp + 18h]       ; handle
    827     mov     [esp], ecx
    828     call    NAME(FS32_FINDNOTIFYNEXT)
     1123        mov     ecx, [ebp + 08h]            ; timeout
     1124        mov     [esp + 5*4], ecx
     1125        movzx   edx, word [ebp + 0ch]       ; level
     1126        mov     [esp + 4*4], edx
     1127        VBOXSF_FARPTR_2_FLAT  0eh, 3*4      ; pcMatch
     1128        movzx   eax, word [ebp + 12h]       ; cbData
     1129        mov     [esp + 2*4], eax
     1130        VBOXSF_FARPTR_2_FLAT  14h, 1*4      ; pbData
     1131        movzx   ecx, word [ebp + 18h]       ; handle
     1132        mov     [esp], ecx
     1133        call    NAME(FS32_FINDNOTIFYNEXT)
    8291134VBOXSF_TO_16        FS_FINDNOTIFYNEXT
    830     retf    12h
     1135        retf    12h
    8311136VBOXSF_EP16_END     FS_FINDNOTIFYNEXT
    8321137
     
    8351140VBOXSF_EP16_BEGIN FS_FLUSHBUF, 'FS_FLUSHBUF'
    8361141VBOXSF_TO_32        FS_FLUSHBUF, 2*4
    837     movzx   edx, word [ebp + 08h]       ; flag
    838     mov     [esp + 1*4], edx
    839     movzx   eax, word [ebp + 0ch]       ; hVPB
    840     mov     [esp + 0*4], eax
    841     call    NAME(FS32_FLUSHBUF)
     1142        movzx   edx, word [ebp + 08h]       ; flag
     1143        mov     [esp + 1*4], edx
     1144        movzx   eax, word [ebp + 0ch]       ; hVPB
     1145        mov     [esp + 0*4], eax
     1146        call    NAME(FS32_FLUSHBUF)
    8421147VBOXSF_TO_16        FS_FLUSHBUF
    843     retf    4h
     1148        retf    4h
    8441149VBOXSF_EP16_END FS_FLUSHBUF
    8451150
     
    8491154;                       PVOID pData, USHORT lenData, PUSHORT plenDataIO);
    8501155VBOXSF_EP16_BEGIN FS_FSCTL, 'FS_FSCTL'
    851     ;
    852     ; Initialized ring-0 yet? (this is a likely first entry point)
    853     ;
    854     push    ds
    855     mov     ax, DATA16
    856     mov     ds, ax
    857     test    byte [NAME(g_fDoneRing0)], 1
    858     jnz     .DoneRing0
    859     call    NAME(VBoxSFR0Init16Bit)
     1156        ;
     1157        ; Initialized ring-0 yet? (this is a likely first entry point)
     1158        ;
     1159        push    ds
     1160        mov     ax, DATA16
     1161        mov     ds, ax
     1162        test    byte [NAME(g_fDoneRing0)], 1
     1163        jnz     .DoneRing0
     1164        call    NAME(VBoxSFR0Init16Bit)
    8601165.DoneRing0:
    861     pop     ds
     1166        pop     ds
    8621167
    8631168VBOXSF_TO_32        FS_FSCTL, 9*4
    864     VBOXSF_FARPTR_2_FLAT  08h, 8*4      ; plenDataIO
    865     movzx   ecx, word [ebp + 0ch]       ; lenData
    866     mov     [esp + 7*4], ecx
    867     VBOXSF_FARPTR_2_FLAT  0eh, 6*4      ; pData
    868     VBOXSF_FARPTR_2_FLAT  12h, 5*4      ; plenDataIO
    869     movzx   ecx, word [ebp + 16h]       ; lenData
    870     mov     [esp + 4*4], ecx
    871     VBOXSF_FARPTR_2_FLAT  18h, 3*4      ; pData
    872     movzx   edx, word [ebp + 1ch]       ; func
    873     mov     [esp + 2*4], edx
    874     movzx   eax, word [ebp + 1eh]       ; iArgType
    875     mov     [esp + 1*4], eax
    876     VBOXSF_FARPTR_2_FLAT  20h, 0*4      ; pArgdat
    877     call    NAME(FS32_FSCTL)
     1169        VBOXSF_FARPTR_2_FLAT  08h, 8*4      ; plenDataIO
     1170        movzx   ecx, word [ebp + 0ch]       ; lenData
     1171        mov     [esp + 7*4], ecx
     1172        VBOXSF_FARPTR_2_FLAT  0eh, 6*4      ; pData
     1173        VBOXSF_FARPTR_2_FLAT  12h, 5*4      ; plenDataIO
     1174        movzx   ecx, word [ebp + 16h]       ; lenData
     1175        mov     [esp + 4*4], ecx
     1176        VBOXSF_FARPTR_2_FLAT  18h, 3*4      ; pData
     1177        movzx   edx, word [ebp + 1ch]       ; func
     1178        mov     [esp + 2*4], edx
     1179        movzx   eax, word [ebp + 1eh]       ; iArgType
     1180        mov     [esp + 1*4], eax
     1181        VBOXSF_FARPTR_2_FLAT  20h, 0*4      ; pArgdat
     1182        call    NAME(FS32_FSCTL)
    8781183VBOXSF_TO_16        FS_FSCTL
    879     retf    1ch
     1184        retf    1ch
    8801185VBOXSF_EP16_END FS_FSCTL
    8811186
     
    8841189VBOXSF_EP16_BEGIN FS_FSINFO, 'FS_FSINFO'
    8851190VBOXSF_TO_32        FS_FSINFO, 5*4
    886     movzx   ecx, word [ebp + 08h]       ; level
    887     mov     [esp + 10h], ecx
    888     movzx   edx, word [ebp + 0ah]       ; cbData
    889     mov     [esp + 0ch], edx
    890     VBOXSF_FARPTR_2_FLAT  0ch, 2*4      ; pbData
    891     movzx   edx, word [ebp + 10h]       ; hVPB
    892     mov     [esp], edx
    893     movzx   eax, word [ebp + 12h]       ; flag
    894     mov     [esp], eax
    895     call    NAME(FS32_FSINFO)
     1191        movzx   ecx, word [ebp + 08h]       ; level
     1192        mov     [esp + 10h], ecx
     1193        movzx   edx, word [ebp + 0ah]       ; cbData
     1194        mov     [esp + 0ch], edx
     1195        VBOXSF_FARPTR_2_FLAT  0ch, 2*4      ; pbData
     1196        movzx   edx, word [ebp + 10h]       ; hVPB
     1197        mov     [esp + 4], edx
     1198        movzx   eax, word [ebp + 12h]       ; flag
     1199        mov     [esp], eax
     1200        call    NAME(FS32_FSINFO)
    8961201VBOXSF_TO_16        FS_FSINFO
    897     retf    14h
     1202        retf    14h
    8981203VBOXSF_EP16_END     FS_FSINFO
    8991204
     
    9051210VBOXSF_EP16_BEGIN   FS_IOCTL, 'FS_IOCTL'
    9061211VBOXSF_TO_32        FS_IOCTL, 10*4
    907     VBOXSF_FARPTR_2_FLAT  08h, 9*4      ; plenDataIO
    908     movzx   ecx, word [ebp + 0ch]       ; lenData
    909     mov     [esp + 8*4], ecx
    910     VBOXSF_FARPTR_2_FLAT  0eh, 7*4      ; pData
    911     VBOXSF_FARPTR_2_FLAT  12h, 6*4      ; plenDataIO
    912     movzx   ecx, word [ebp + 16h]       ; lenData
    913     mov     [esp + 5*4], ecx
    914     VBOXSF_FARPTR_2_FLAT  18h, 4*4      ; pData
    915     movzx   edx, word [ebp + 1ch]       ; cat
    916     mov     [esp + 3*4], edx
    917     movzx   eax, word [ebp + 1eh]       ; func
    918     mov     [esp + 2*4], eax
    919     VBOXSF_PSFFSD_2_FLAT  20h, 1*4      ; psffsd
    920     VBOXSF_FARPTR_2_FLAT  24h, 0*4      ; pData
    921     call    NAME(FS32_IOCTL)
     1212        VBOXSF_FARPTR_2_FLAT  08h, 9*4      ; plenDataIO
     1213        movzx   ecx, word [ebp + 0ch]       ; lenData
     1214        mov     [esp + 8*4], ecx
     1215        VBOXSF_FARPTR_2_FLAT  0eh, 7*4      ; pData
     1216        VBOXSF_FARPTR_2_FLAT  12h, 6*4      ; plenDataIO
     1217        movzx   ecx, word [ebp + 16h]       ; lenData
     1218        mov     [esp + 5*4], ecx
     1219        VBOXSF_FARPTR_2_FLAT  18h, 4*4      ; pData
     1220        movzx   edx, word [ebp + 1ch]       ; cat
     1221        mov     [esp + 3*4], edx
     1222        movzx   eax, word [ebp + 1eh]       ; func
     1223        mov     [esp + 2*4], eax
     1224        VBOXSF_PSFFSD_2_FLAT  20h, 1*4      ; psffsd
     1225        VBOXSF_FARPTR_2_FLAT  24h, 0*4      ; pData
     1226        call    NAME(FS32_IOCTL)
    9221227VBOXSF_TO_16        FS_IOCTL
    923     retf    20h
     1228        retf    20h
    9241229VBOXSF_EP16_END     FS_IOCTL
    9251230
     
    9301235VBOXSF_EP16_BEGIN   FS_MKDIR, 'FS_MKDIR'
    9311236VBOXSF_TO_32        FS_MKDIR, 6*4
    932     movzx   ecx, word [ebp + 08h]       ; flag
    933     mov     [esp + 5*4], ecx
    934     VBOXSF_FARPTR_2_FLAT  0ah, 4*4      ; pEABuf
    935     movzx   edx, word [ebp + 0eh]       ; iCurDirEnd
    936     mov     [esp + 3*4], edx
    937     VBOXSF_FARPTR_2_FLAT  10h, 2*4      ; pszName
    938     VBOXSF_PCDFSD_2_FLAT  14h, 1*4      ; pcdfsd
    939     VBOXSF_FARPTR_2_FLAT  18h, 0*4      ; pcdfsi
    940     call    NAME(FS32_MKDIR)
     1237        movzx   ecx, word [ebp + 08h]       ; flag
     1238        mov     [esp + 5*4], ecx
     1239        VBOXSF_FARPTR_2_FLAT  0ah, 4*4      ; pEABuf
     1240        movsx   edx, word [ebp + 0eh]       ; iCurDirEnd
     1241        mov     [esp + 3*4], edx
     1242        VBOXSF_FARPTR_2_FLAT  10h, 2*4      ; pszName
     1243        VBOXSF_PCDFSD_2_FLAT  14h, 1*4      ; pcdfsd
     1244        VBOXSF_FARPTR_2_FLAT  18h, 0*4      ; pcdfsi
     1245        call    NAME(FS32_MKDIR)
    9411246VBOXSF_TO_16        FS_MKDIR
    942     retf    14h
     1247        retf    14h
    9431248VBOXSF_EP16_END     FS_MKDIR
    9441249
     
    9471252; @cproto int FS_MOUNT(USHORT flag, PVPFSI pvpfsi, PVBOXSFVP pvpfsd, USHORT hVPB, PCSZ pszBoot)
    9481253VBOXSF_EP16_BEGIN   FS_MOUNT, 'FS_MOUNT'
    949     ;
    950     ; Initialized ring-0 yet? (this is a likely first entry point)
    951     ;
    952     push    ds
    953     mov     ax, DATA16
    954     mov     ds, ax
    955     test    byte [NAME(g_fDoneRing0)], 1
    956     jnz     .DoneRing0
    957     call    NAME(VBoxSFR0Init16Bit)
     1254        ;
     1255        ; Initialized ring-0 yet? (this is a likely first entry point)
     1256        ;
     1257        push    ds
     1258        mov     ax, DATA16
     1259        mov     ds, ax
     1260        test    byte [NAME(g_fDoneRing0)], 1
     1261        jnz     .DoneRing0
     1262        call    NAME(VBoxSFR0Init16Bit)
    9581263.DoneRing0:
    959     pop     ds
     1264        pop     ds
    9601265
    9611266VBOXSF_TO_32        FS_MOUNT, 5*4
    962     VBOXSF_FARPTR_2_FLAT  08h, 4*4      ; pszBoot
    963     movzx   ecx, word [ebp + 0ch]       ; hVPB
    964     mov     [esp + 3*4], ecx
    965     VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pvpfsd
    966     VBOXSF_FARPTR_2_FLAT  12h, 1*4      ; pvpfsi
    967     movzx   ecx, word [ebp + 16h]       ; flag
    968     mov     [esp], ecx
    969     call    NAME(FS32_MOUNT)
     1267        VBOXSF_FARPTR_2_FLAT  08h, 4*4      ; pszBoot
     1268        movzx   ecx, word [ebp + 0ch]       ; hVPB
     1269        mov     [esp + 3*4], ecx
     1270        VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pvpfsd
     1271        VBOXSF_FARPTR_2_FLAT  12h, 1*4      ; pvpfsi
     1272        movzx   ecx, word [ebp + 16h]       ; flag
     1273        mov     [esp], ecx
     1274        call    NAME(FS32_MOUNT)
    9701275VBOXSF_TO_16        FS_MOUNT
    971     retf    10h
     1276        retf    10h
    9721277VBOXSF_EP16_END     FS_MOUNT
    9731278
     
    9781283VBOXSF_EP16_BEGIN   FS_MOVE, 'FS_MOVE'
    9791284VBOXSF_TO_32        FS_MOVE, 7*4
    980     movzx   ecx, word [ebp + 08h]       ; type
    981     mov     [esp + 6*4], ecx
    982     movzx   edx, word [ebp + 0ah]       ; iDstCurDirEnd
    983     mov     [esp + 5*4], edx
    984     VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pszDst
    985     movzx   eax, word [ebp + 10h]       ; iSrcCurDirEnd
    986     mov     [esp + 3*4], eax
    987     VBOXSF_FARPTR_2_FLAT  12h, 2*4      ; pszSrc
    988     VBOXSF_PCDFSD_2_FLAT  16h, 1*4      ; psffsd
    989     VBOXSF_FARPTR_2_FLAT  1ah, 0*4      ; psffsi
    990     call    NAME(FS32_MOVE)
     1285        movzx   ecx, word [ebp + 08h]       ; type
     1286        mov     [esp + 6*4], ecx
     1287        movzx   edx, word [ebp + 0ah]       ; iDstCurDirEnd
     1288        mov     [esp + 5*4], edx
     1289        VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pszDst
     1290        movzx   eax, word [ebp + 10h]       ; iSrcCurDirEnd
     1291        mov     [esp + 3*4], eax
     1292        VBOXSF_FARPTR_2_FLAT  12h, 2*4      ; pszSrc
     1293        VBOXSF_PCDFSD_2_FLAT  16h, 1*4      ; psffsd
     1294        VBOXSF_FARPTR_2_FLAT  1ah, 0*4      ; psffsi
     1295        call    NAME(FS32_MOVE)
    9911296VBOXSF_TO_16        FS_MOVE
    992     retf    16h
     1297        retf    16h
    9931298VBOXSF_EP16_END     FS_MOVE
    9941299
     
    9981303VBOXSF_EP16_BEGIN   FS_NEWSIZE, 'FS_NEWSIZE'
    9991304VBOXSF_TO_32        FS_NEWSIZE, 5*4     ; thunking to longlong edition.
    1000     movzx   ecx, word [ebp + 08h]       ; IOflag
    1001     mov     [esp + 4*4], ecx
    1002     mov     eax, [ebp + 0ah]            ; cbFile (ULONG -> LONGLONG)
    1003     mov     dword [esp + 3*4], 0
    1004     mov     [esp + 2*4], eax
    1005     VBOXSF_PSFFSD_2_FLAT  0eh, 1*4      ; psffsd
    1006     VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; psffsi
    1007     call            NAME(FS32_NEWSIZEL)
     1305        movzx   ecx, word [ebp + 08h]       ; IOflag
     1306        mov     [esp + 4*4], ecx
     1307        mov     eax, [ebp + 0ah]            ; cbFile (ULONG -> LONGLONG)
     1308        mov     dword [esp + 3*4], 0
     1309        mov     [esp + 2*4], eax
     1310        VBOXSF_PSFFSD_2_FLAT  0eh, 1*4      ; psffsd
     1311        VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; psffsi
     1312        call            NAME(FS32_NEWSIZEL)
    10081313VBOXSF_TO_16        FS_NEWSIZE
    1009     retf    0eh
     1314        retf    0eh
    10101315VBOXSF_EP16_END     FS_NEWSIZE
    10111316
     
    10151320VBOXSF_EP16_BEGIN FS_NEWSIZEL, 'FS_NEWSIZEL'
    10161321VBOXSF_TO_32        FS_NEWSIZEL, 5*4
    1017     movzx   ecx, word [ebp + 08h]       ; IOflag
    1018     mov     [esp + 4*4], ecx
    1019     mov     eax, [ebp + 0ah]            ; cbFile
    1020     mov     edx, [ebp + 0eh]
    1021     mov     [esp + 3*4], edx
    1022     mov     [esp + 2*4], eax
    1023     VBOXSF_PSFFSD_2_FLAT  12h, 1*4      ; psffsd
    1024     VBOXSF_FARPTR_2_FLAT  16h, 0*4      ; psffsi
    1025     call            NAME(FS32_NEWSIZEL)
     1322        movzx   ecx, word [ebp + 08h]       ; IOflag
     1323        mov     [esp + 4*4], ecx
     1324        mov     eax, [ebp + 0ah]            ; cbFile
     1325        mov     edx, [ebp + 0eh]
     1326        mov     [esp + 3*4], edx
     1327        mov     [esp + 2*4], eax
     1328        VBOXSF_PSFFSD_2_FLAT  12h, 1*4      ; psffsd
     1329        VBOXSF_FARPTR_2_FLAT  16h, 0*4      ; psffsi
     1330        call            NAME(FS32_NEWSIZEL)
    10261331VBOXSF_TO_16        FS_NEWSIZEL
    1027     retf    12h
     1332        retf    12h
    10281333VBOXSF_EP16_END FS_NEWSIZEL
    10291334
     
    10341339VBOXSF_EP16_BEGIN   FS_NMPIPE, 'FS_NMPIPE'
    10351340VBOXSF_TO_32        FS_NMPIPE, 6*4
    1036     VBOXSF_FARPTR_2_FLAT  08h, 5*4      ; pszName
    1037     VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pData
    1038     VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pOpRec
    1039     movzx   ecx, word [ebp + 14h]       ; OpType
    1040     mov     [esp + 2*4], ecx
    1041     VBOXSF_FARPTR_2_FLAT  16h, 1*4      ; psffsd (take care...)
    1042     VBOXSF_FARPTR_2_FLAT  1ah, 0*4      ; psffsi
    1043     call            NAME(FS32_NMPIPE)
     1341        VBOXSF_FARPTR_2_FLAT  08h, 5*4      ; pszName
     1342        VBOXSF_FARPTR_2_FLAT  0ch, 4*4      ; pData
     1343        VBOXSF_FARPTR_2_FLAT  10h, 3*4      ; pOpRec
     1344        movzx   ecx, word [ebp + 14h]       ; OpType
     1345        mov     [esp + 2*4], ecx
     1346        VBOXSF_FARPTR_2_FLAT  16h, 1*4      ; psffsd (take care...)
     1347        VBOXSF_FARPTR_2_FLAT  1ah, 0*4      ; psffsi
     1348        call            NAME(FS32_NMPIPE)
    10441349VBOXSF_TO_16        FS_NMPIPE
    1045     retf    16h
     1350        retf    16h
    10461351VBOXSF_EP16_END     FS_NMPIPE
    10471352
     
    10531358VBOXSF_EP16_BEGIN   FS_OPENCREATE, 'FS_OPENCREATE'
    10541359VBOXSF_TO_32        FS_OPENCREATE, 12*4
    1055     VBOXSF_FARPTR_2_FLAT  08h, 11*4     ; pfgenflag
    1056     VBOXSF_FARPTR_2_FLAT  0ch, 10*4     ; pcEABuf
    1057     movzx   ecx, word [ebp + 10h]       ; usAttr
    1058     mov     [esp + 9*4], ecx
    1059     VBOXSF_FARPTR_2_FLAT  12h, 8*4      ; pusAction
    1060     movzx   edx, word [ebp + 16h]       ; usOpenFlag
    1061     mov     [esp + 7*4], edx
    1062     mov     eax, [ebp + 18h]            ; ulOpenMode
    1063     mov     [esp + 6*4], eax
    1064     VBOXSF_FARPTR_2_FLAT  1ch, 5*4      ; psffsd (new, no short cuts)
    1065     VBOXSF_FARPTR_2_FLAT  20h, 4*4      ; psffsi
    1066     movzx   ecx, word [ebp + 24h]       ; iCurDirEnd
    1067     mov     [esp + 3*4], ecx
    1068     VBOXSF_FARPTR_2_FLAT  26h, 2*4      ; pszName
    1069     VBOXSF_PCDFSD_2_FLAT  2ah, 1*4      ; pcdfsd
    1070     VBOXSF_FARPTR_2_FLAT  2eh, 0*4      ; pcdfsi
    1071     call    NAME(FS32_OPENCREATE)
     1360        VBOXSF_FARPTR_2_FLAT  08h, 11*4     ; pfgenflag
     1361        VBOXSF_FARPTR_2_FLAT  0ch, 10*4     ; pcEABuf
     1362        movzx   ecx, word [ebp + 10h]       ; usAttr
     1363        mov     [esp + 9*4], ecx
     1364        VBOXSF_FARPTR_2_FLAT  12h, 8*4      ; pusAction
     1365        movzx   edx, word [ebp + 16h]       ; usOpenFlag
     1366        mov     [esp + 7*4], edx
     1367        mov     eax, [ebp + 18h]            ; ulOpenMode
     1368        mov     [esp + 6*4], eax
     1369        VBOXSF_FARPTR_2_FLAT  1ch, 5*4      ; psffsd (new, no short cuts)
     1370        VBOXSF_FARPTR_2_FLAT  20h, 4*4      ; psffsi
     1371        movsx   ecx, word [ebp + 24h]       ; iCurDirEnd
     1372        mov     [esp + 3*4], ecx
     1373        VBOXSF_FARPTR_2_FLAT  26h, 2*4      ; pszName
     1374        VBOXSF_PCDFSD_2_FLAT  2ah, 1*4      ; pcdfsd
     1375        VBOXSF_FARPTR_2_FLAT  2eh, 0*4      ; pcdfsi
     1376        call    NAME(FS32_OPENCREATE)
    10721377VBOXSF_TO_16        FS_OPENCREATE
    1073     retf    42
     1378        retf    42
    10741379VBOXSF_EP16_END FS_OPENCREATE
    10751380
     
    10801385VBOXSF_EP16_BEGIN   FS_OPENPAGEFILE, 'FS_OPENPAGEFILE'
    10811386VBOXSF_TO_32        FS_OPENPAGEFILE, 9*4
    1082     mov     ecx, [ebp + 08h]            ; Reserved
    1083     mov     [esp + 8*4], ecx
    1084     movzx   edx, word [ebp + 0ch]       ; usAttr
    1085     mov     [esp + 7*4], edx
    1086     movzx   eax, word [ebp + 0eh]       ; usOpenFlag
    1087     mov     [esp + 6*4], eax
    1088     movzx   ecx, word [ebp + 10h]       ; usOpenMode
    1089     mov     [esp + 5*4], ecx
    1090     VBOXSF_FARPTR_2_FLAT  12h, 4*4      ; psffsd (new, no short cuts)
    1091     VBOXSF_FARPTR_2_FLAT  16h, 3*4      ; psffsi
    1092     VBOXSF_FARPTR_2_FLAT  1ah, 2*4      ; pszName
    1093     VBOXSF_FARPTR_2_FLAT  1eh, 1*4      ; pcMaxReq
    1094     VBOXSF_FARPTR_2_FLAT  22h, 0*4      ; pFlag
    1095     call    NAME(FS32_OPENPAGEFILE)
     1387        mov     ecx, [ebp + 08h]            ; Reserved
     1388        mov     [esp + 8*4], ecx
     1389        movzx   edx, word [ebp + 0ch]       ; usAttr
     1390        mov     [esp + 7*4], edx
     1391        movzx   eax, word [ebp + 0eh]       ; usOpenFlag
     1392        mov     [esp + 6*4], eax
     1393        movzx   ecx, word [ebp + 10h]       ; usOpenMode
     1394        mov     [esp + 5*4], ecx
     1395        VBOXSF_FARPTR_2_FLAT  12h, 4*4      ; psffsd (new, no short cuts)
     1396        VBOXSF_FARPTR_2_FLAT  16h, 3*4      ; psffsi
     1397        VBOXSF_FARPTR_2_FLAT  1ah, 2*4      ; pszName
     1398        VBOXSF_FARPTR_2_FLAT  1eh, 1*4      ; pcMaxReq
     1399        VBOXSF_FARPTR_2_FLAT  22h, 0*4      ; pFlag
     1400        call    NAME(FS32_OPENPAGEFILE)
    10961401VBOXSF_TO_16        FS_OPENPAGEFILE
    1097     retf    1eh
     1402        retf    1eh
    10981403VBOXSF_EP16_END     FS_OPENPAGEFILE
    10991404
     
    11041409VBOXSF_EP16_BEGIN   FS_PATHINFO, 'FS_PATHINFO'
    11051410VBOXSF_TO_32        FS_PATHINFO, 8*4
    1106     movzx   ecx, word [ebp + 08h]       ; cbData
    1107     mov     [esp + 7*4], ecx
    1108     VBOXSF_FARPTR_2_FLAT  0ah, 6*4      ; pData
    1109     movzx   edx, word [ebp + 0eh]       ; level
    1110     mov     [esp + 5*4], edx
    1111     movzx   eax, word [ebp + 10h]       ; iCurDirEnd
    1112     mov     [esp + 4*4], eax
    1113     VBOXSF_FARPTR_2_FLAT  12h, 3*4      ; pszName
    1114     VBOXSF_PCDFSD_2_FLAT  16h, 2*4      ; pcdfsd
    1115     VBOXSF_FARPTR_2_FLAT  1ah, 1*4      ; pcdfsi
    1116     movzx   edx, word [ebp + 1eh]       ; flag
    1117     mov     [esp], edx
    1118     call    NAME(FS32_PATHINFO)
     1411        movzx   ecx, word [ebp + 08h]       ; cbData
     1412        mov     [esp + 7*4], ecx
     1413        VBOXSF_FARPTR_2_FLAT  0ah, 6*4      ; pData
     1414        movzx   edx, word [ebp + 0eh]       ; level
     1415        mov     [esp + 5*4], edx
     1416        movsx   eax, word [ebp + 10h]       ; iCurDirEnd
     1417        mov     [esp + 4*4], eax
     1418        VBOXSF_FARPTR_2_FLAT  12h, 3*4      ; pszName
     1419        VBOXSF_PCDFSD_2_FLAT  16h, 2*4      ; pcdfsd
     1420        VBOXSF_FARPTR_2_FLAT  1ah, 1*4      ; pcdfsi
     1421        movzx   edx, word [ebp + 1eh]       ; flag
     1422        mov     [esp], edx
     1423        call    NAME(FS32_PATHINFO)
    11191424VBOXSF_TO_16        FS_PATHINFO
    1120     retf    18h
     1425        retf    18h
    11211426VBOXSF_EP16_END     FS_PATHINFO
    11221427
     
    11251430VBOXSF_EP16_BEGIN FS_PROCESSNAME, 'FS_PROCESSNAME'
    11261431VBOXSF_TO_32        FS_PROCESSNAME, 1*4
    1127     VBOXSF_FARPTR_2_FLAT  08h, 0*4      ; pszName
    1128     call    NAME(FS32_PROCESSNAME)
     1432        VBOXSF_FARPTR_2_FLAT  08h, 0*4      ; pszName
     1433        call    NAME(FS32_PROCESSNAME)
    11291434VBOXSF_TO_16        FS_PROCESSNAME
    1130     retf    4h
     1435        retf    4h
    11311436VBOXSF_EP16_END FS_PROCESSNAME
    11321437
     
    11361441VBOXSF_EP16_BEGIN   FS_READ, 'FS_READ'
    11371442VBOXSF_TO_32        FS_READ, 6*4        ; extra local for ULONG cbDataTmp.
    1138     movzx   ecx, word [ebp + 08h]       ; IOflag
    1139     mov     [esp + 4*4], ecx
    1140     les     dx, [ebp + 0ah]             ; cbDataTmp = *pcbData;
    1141     movzx   edx, dx
    1142     lea     ecx, [esp + 5*4]            ; pcbData = &cbDataTmp
    1143     movzx   eax, word [es:edx]
    1144     mov     [ecx], eax
    1145     mov     [esp + 3*4], ecx
    1146     mov     edx, DATA32
    1147     mov     es, edx
    1148     VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pbData
    1149     VBOXSF_PSFFSD_2_FLAT  12h, 1*4      ; psffsd
    1150     VBOXSF_FARPTR_2_FLAT  16h, 0*4      ; psffsi
    1151     call    FS32_READ
    1152 
    1153     les     dx, [ebp + 0ah]             ; *pcbData = cbDataTmp;
    1154     movzx   edx, dx
    1155     mov     cx, [esp + 5*4]
    1156     mov     [es:edx], cx
    1157     mov     edx, DATA32
    1158     mov     es, edx
     1443        movzx   ecx, word [ebp + 08h]       ; IOflag
     1444        mov     [esp + 4*4], ecx
     1445        les     dx, [ebp + 0ah]             ; cbDataTmp = *pcbData;
     1446        movzx   edx, dx
     1447        lea     ecx, [esp + 5*4]            ; pcbData = &cbDataTmp
     1448        movzx   eax, word [es:edx]
     1449        mov     [ecx], eax
     1450        mov     [esp + 3*4], ecx
     1451        mov     edx, DATA32
     1452        mov     es, edx
     1453        VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pbData
     1454        VBOXSF_PSFFSD_2_FLAT  12h, 1*4      ; psffsd
     1455        VBOXSF_FARPTR_2_FLAT  16h, 0*4      ; psffsi
     1456        call    FS32_READ
     1457
     1458        les     dx, [ebp + 0ah]             ; *pcbData = cbDataTmp;
     1459        movzx   edx, dx
     1460        mov     cx, [esp + 5*4]
     1461        mov     [es:edx], cx
     1462        mov     edx, DATA32
     1463        mov     es, edx
    11591464
    11601465VBOXSF_TO_16        FS_READ
    1161 
    1162     pop     es
    1163     retf    12h
     1466        retf    12h
    11641467VBOXSF_EP16_END     FS_READ
    11651468
     
    11701473VBOXSF_EP16_BEGIN   FS_RMDIR, 'FS_RMDIR'
    11711474VBOXSF_TO_32        FS_RMDIR, 4*4
    1172     movzx   edx, word [ebp + 08h]       ; iCurDirEnd
    1173     mov     [esp + 3*4], edx
    1174     VBOXSF_FARPTR_2_FLAT  0ah, 2*4      ; pszName
    1175     VBOXSF_PCDFSD_2_FLAT  0eh, 1*4      ; pcdfsd
    1176     VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; pcdfsi
    1177     call    NAME(FS32_RMDIR)
     1475        movsx   edx, word [ebp + 08h]       ; iCurDirEnd
     1476        mov     [esp + 3*4], edx
     1477        VBOXSF_FARPTR_2_FLAT  0ah, 2*4      ; pszName
     1478        VBOXSF_PCDFSD_2_FLAT  0eh, 1*4      ; pcdfsd
     1479        VBOXSF_FARPTR_2_FLAT  12h, 0*4      ; pcdfsi
     1480        call    NAME(FS32_RMDIR)
    11781481VBOXSF_TO_16        FS_RMDIR
    1179     retf    14h
     1482        retf    0eh
    11801483VBOXSF_EP16_END     FS_RMDIR
    11811484
     
    11861489VBOXSF_EP16_BEGIN FS_SETSWAP, 'FS_SETSWAP'
    11871490VBOXSF_TO_32        FS_SETSWAP, 2*4
    1188     VBOXSF_PSFFSD_2_FLAT  08h, 1*4      ; psffsd
    1189     VBOXSF_FARPTR_2_FLAT  0ch, 0*4      ; psffsi
    1190     call    NAME(FS32_SETSWAP)
     1491        VBOXSF_PSFFSD_2_FLAT  08h, 1*4      ; psffsd
     1492        VBOXSF_FARPTR_2_FLAT  0ch, 0*4      ; psffsi
     1493        call    NAME(FS32_SETSWAP)
    11911494VBOXSF_TO_16        FS_SETSWAP
    1192     retf    8h
     1495        retf    8h
    11931496VBOXSF_EP16_END     FS_SETSWAP
    11941497
     
    11991502VBOXSF_EP16_BEGIN   FS_SHUTDOWN, 'FS_SHUTDOWN'
    12001503VBOXSF_TO_32        FS_SHUTDOWN, 3*4
    1201     mov     ecx, [ebp + 08h]            ; type
    1202     mov     [esp + 1*4], edx
    1203     movzx   edx, word [ebp + 0ah]       ; reserved
    1204     mov     [esp], eax
    1205     call    NAME(FS32_SHUTDOWN)
     1504        mov     ecx, [ebp + 0ch]            ; type
     1505        mov     [esp + 1*4], edx
     1506        movzx   edx, word [ebp + 08h]       ; reserved
     1507        mov     [esp], eax
     1508        call    NAME(FS32_SHUTDOWN)
    12061509VBOXSF_TO_16        FS_SHUTDOWN
    1207     retf    6h
     1510        retf    6h
    12081511VBOXSF_EP16_END     FS_SHUTDOWN
     1512
     1513
     1514;;
     1515; @cproto int FS_VERIFYUNCNAME(USHORT type, PCSZ pszName);
     1516;
     1517VBOXSF_EP16_BEGIN   FS_VERIFYUNCNAME, 'FS_VERIFYUNCNAME'
     1518VBOXSF_TO_32        FS_VERIFYUNCNAME, 3*4
     1519        VBOXSF_FARPTR_2_FLAT  08h, 1*4      ; pszDev
     1520        movzx   ecx, word [ebp + 0ch]       ; fFlag
     1521        mov     [esp], ecx
     1522        call    NAME(FS32_VERIFYUNCNAME)
     1523VBOXSF_TO_16        FS_VERIFYUNCNAME
     1524        retf    6h
     1525VBOXSF_EP16_END     FS_VERIFYUNCNAME
    12091526
    12101527
     
    12131530VBOXSF_EP16_BEGIN   FS_WRITE, 'FS_WRITE'
    12141531VBOXSF_TO_32        FS_WRITE, 6*4       ; extra local for ULONG cbDataTmp.
    1215     movzx   ecx, word [ebp + 08h]       ; IOflag
    1216     mov     [esp + 4*4], ecx
    1217     les     dx, [ebp + 0ah]             ; cbDataTmp = *pcbData;
    1218     movzx   edx, dx
    1219     lea     ecx, [esp + 5*4]            ; pcbData = &cbDataTmp
    1220     movzx   eax, word [es:edx]
    1221     mov     [ecx], eax
    1222     mov     [esp + 3*4], ecx
    1223     mov     edx, DATA32
    1224     mov     es, edx
    1225     VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pbData
    1226     VBOXSF_PSFFSD_2_FLAT  12h, 1*4      ; psffsd
    1227     VBOXSF_FARPTR_2_FLAT  16h, 0*4      ; psffsi
    1228     call    FS32_WRITE
    1229 
    1230     les     dx, [ebp + 0ah]             ; *pcbData = cbDataTmp;
    1231     movzx   edx, dx
    1232     mov     cx, [esp + 5*4]
    1233     mov     [es:edx], cx
    1234     mov     edx, DATA32
    1235     mov     es, edx
     1532        movzx   ecx, word [ebp + 08h]       ; IOflag
     1533        mov     [esp + 4*4], ecx
     1534        les     dx, [ebp + 0ah]             ; cbDataTmp = *pcbData;
     1535        movzx   edx, dx
     1536        lea     ecx, [esp + 5*4]            ; pcbData = &cbDataTmp
     1537        movzx   eax, word [es:edx]
     1538        mov     [ecx], eax
     1539        mov     [esp + 3*4], ecx
     1540        mov     edx, DATA32
     1541        mov     es, edx
     1542        VBOXSF_FARPTR_2_FLAT  0eh, 2*4      ; pbData
     1543        VBOXSF_PSFFSD_2_FLAT  12h, 1*4      ; psffsd
     1544        VBOXSF_FARPTR_2_FLAT  16h, 0*4      ; psffsi
     1545        call    FS32_WRITE
     1546
     1547        les     dx, [ebp + 0ah]             ; *pcbData = cbDataTmp;
     1548        movzx   edx, dx
     1549        mov     cx, [esp + 5*4]
     1550        mov     [es:edx], cx
     1551        mov     edx, DATA32
     1552        mov     es, edx
    12361553
    12371554VBOXSF_TO_16        FS_WRITE
    1238 
    1239     pop     es
    1240     retf    12h
     1555        retf    12h
    12411556VBOXSF_EP16_END     FS_WRITE
    12421557
     1558
     1559;
     1560;
     1561; Calling 16-bit kernel code.
     1562;
     1563;
     1564
     1565BEGINCODE
     1566
     1567;;
     1568; Wrapper around FSH_GETVOLPARM.
     1569;
     1570; @returns  VPBFSD.
     1571; @param    hVbp            The volume handle to resolve.
     1572; @param    ppVbpFsi
     1573;
     1574BEGINPROC       Fsh32GetVolParams
     1575VBOXSF_FROM_32  Fsh32GetVolParams, 2*4
     1576        mov     di, sp                  ; make the top of the stack addressable via di
     1577
     1578        mov     [ss:di], eax            ; clear the return variables
     1579        mov     [ss:di + 4], eax
     1580
     1581        mov     ax, [bp + 8]            ; hVbp
     1582        push    ax
     1583
     1584        lea     ax, [ss:di]             ; &hvfsi
     1585        push    ss
     1586        push    ax
     1587
     1588        lea     ax, [ss:di + 4]         ; &hvfsd
     1589        push    ss
     1590        push    ax
     1591
     1592        call far FSH_GETVOLPARM
     1593
     1594        mov     sp, di                  ; paranoia (pascal pops params)
     1595
     1596VBOXSF_FROM_16_SWITCH Fsh32GetVolParams
     1597
     1598        ; Convert vpfsi to flat and store it in return location.
     1599        mov     ebx, [ebp + 0ch]
     1600        test    ebx, ebx
     1601        jz      .no_vpfsi
     1602        call    KernSelToFlat
     1603        mov     [ebx], eax
     1604.no_vpfsi:
     1605        add     esp, 4
     1606
     1607        ; Convert vpfsd to flat and return it.
     1608        call    KernSelToFlat
     1609
     1610VBOXSF_FROM_16_EPILOGUE
     1611        ret
     1612ENDPROC     Fsh32GetVolParams
    12431613
    12441614
     
    12641634VBOXSF_EP16_BEGIN FS_INIT, 'FS_INIT'
    12651635;    DEBUG_STR16 'VBoxSF: FS_INIT - enter'
    1266     push    ebp
    1267     mov     ebp, esp
    1268     push    ds                          ; bp - 02h
    1269     push    es                          ; bp - 04h
    1270     push    esi                         ; bp - 08h
    1271     push    edi                         ; bp - 0ch
    1272 
    1273     mov     ax, DATA16
    1274     mov     ds, ax
    1275     mov     es, ax
    1276 
    1277     ;
    1278     ; Save the device help entry point.
    1279     ;
    1280     mov     eax, [bp + 0ch]
    1281     mov     [NAME(g_fpfnDevHlp)], eax
    1282 
    1283     ;
    1284     ; Parse the command line.
    1285     ; Doing this in assembly is kind of ugly...
    1286     ;
    1287     cmp     word [bp + 10h + 2], 3
    1288     jbe near .no_command_line
    1289     lds     si, [bp + 10h]              ; ds:si -> command line iterator.
     1636        push    ebp
     1637        mov     ebp, esp
     1638        push    ds                          ; bp - 02h
     1639        push    es                          ; bp - 04h
     1640        push    esi                         ; bp - 08h
     1641        push    edi                         ; bp - 0ch
     1642
     1643        mov     ax, DATA16
     1644        mov     ds, ax
     1645        mov     es, ax
     1646
     1647        ;
     1648        ; Save the device help entry point.
     1649        ;
     1650        mov     eax, [bp + 0ch]
     1651        mov     [NAME(g_fpfnDevHlp)], eax
     1652
     1653        ;
     1654        ; Parse the command line.
     1655        ; Doing this in assembly is kind of ugly...
     1656        ;
     1657        cmp     word [bp + 10h + 2], 3
     1658        jbe near .no_command_line
     1659        lds     si, [bp + 10h]              ; ds:si -> command line iterator.
    12901660.parse_next:
    12911661
    1292     ; skip leading blanks.
     1662        ; skip leading blanks.
    12931663.parse_next_char:
    1294     mov     di, si                      ; DI = start of argument.
    1295     lodsb
    1296     cmp     al, ' '
    1297     je      .parse_next_char
    1298     cmp     al, 9                       ; tab
    1299     je      .parse_next_char
    1300     cmp     al, 0
    1301     je near .parse_done
    1302 
    1303     ; check for '/' or '-'
    1304     cmp     al, '/'
    1305     je      .parse_switch
    1306     cmp     al, '-'
    1307     je      .parse_switch
    1308     jmp     .parse_error
    1309 
    1310     ; parse switches.
     1664        mov     di, si                      ; DI = start of argument.
     1665        lodsb
     1666        cmp     al, ' '
     1667        je      .parse_next_char
     1668        cmp     al, 9                       ; tab
     1669        je      .parse_next_char
     1670        cmp     al, 0
     1671        je near .parse_done
     1672
     1673        ; check for '/' or '-'
     1674        cmp     al, '/'
     1675        je      .parse_switch
     1676        cmp     al, '-'
     1677        je      .parse_switch
     1678        jmp     .parse_error
     1679
     1680        ; parse switches.
    13111681.parse_switch:
    1312     lodsb
    1313     cmp     al, 0
    1314     je      .parse_error
    1315     and     al, ~20h                    ; uppercase
    1316 
    1317     cmp     al, 'V'                     ; /V - verbose
    1318     je      .parse_verbose
    1319     cmp     al, 'Q'                     ; /Q - quiet.
    1320     je      .parse_quiet
    1321     jmp     .parse_error
     1682        lodsb
     1683        cmp     al, 0
     1684        je      .parse_error
     1685        and     al, ~20h                    ; uppercase
     1686
     1687        cmp     al, 'V'                     ; /V - verbose
     1688        je      .parse_verbose
     1689        cmp     al, 'Q'                     ; /Q - quiet.
     1690        je      .parse_quiet
     1691        jmp     .parse_error
    13221692
    13231693.parse_verbose:
    1324     mov     byte [es:NAME(g_fVerbose)], 1
    1325     jmp     .parse_next
     1694        mov     byte [es:NAME(g_fVerbose)], 1
     1695        jmp     .parse_next
    13261696
    13271697.parse_quiet:
    1328     mov     byte [es:NAME(g_fVerbose)], 0
    1329     jmp     .parse_next
     1698        mov     byte [es:NAME(g_fVerbose)], 0
     1699        jmp     .parse_next
    13301700
    13311701.parse_error:
    13321702segment DATA16
    13331703.szSyntaxError:
    1334     db 0dh, 0ah, 'VBoxSF.ifs: command line parse error at: ', 0
     1704        db 0dh, 0ah, 'VBoxSF.ifs: command line parse error at: ', 0
    13351705.szNewLine:
    1336     db 0dh, 0ah, 0dh, 0ah, 0
     1706        db 0dh, 0ah, 0dh, 0ah, 0
    13371707segment CODE16
    1338     mov     bx, .szSyntaxError
    1339     call    NAME(FS_INIT_FPUTS)
    1340 
    1341     push    es
    1342     push    ds
    1343     pop     es
    1344     mov     bx, di
    1345     call    NAME(FS_INIT_FPUTS)
    1346     pop     es
    1347 
    1348     mov     bx, .szNewLine
    1349     call    NAME(FS_INIT_FPUTS)
    1350 
    1351     mov     ax, ERROR_INVALID_PARAMETER
    1352     jmp     .done
     1708        mov     bx, .szSyntaxError
     1709        call    NAME(FS_INIT_FPUTS)
     1710
     1711        push    es
     1712        push    ds
     1713        pop     es
     1714        mov     bx, di
     1715        call    NAME(FS_INIT_FPUTS)
     1716        pop     es
     1717
     1718        mov     bx, .szNewLine
     1719        call    NAME(FS_INIT_FPUTS)
     1720
     1721        mov     ax, ERROR_INVALID_PARAMETER
     1722        jmp     .done
    13531723
    13541724.parse_done:
    1355     mov     ax, DATA16
    1356     mov     ds, ax
     1725        mov     ax, DATA16
     1726        mov     ds, ax
    13571727.no_command_line:
    13581728
    1359     ;
    1360     ; Write our greeting to STDOUT.
    1361     ; APIRET  _Pascal DosWrite(HFILE hf, PVOID pvBuf, USHORT cbBuf, PUSHORT pcbBytesWritten);
    1362     ;
    1363     cmp     byte [NAME(g_fVerbose)], 0
    1364     je near .quiet
     1729        ;
     1730        ; Write our greeting to STDOUT.
     1731        ; APIRET  _Pascal DosWrite(HFILE hf, PVOID pvBuf, USHORT cbBuf, PUSHORT pcbBytesWritten);
     1732        ;
     1733        cmp     byte [NAME(g_fVerbose)], 0
     1734        je near .quiet
    13651735segment DATA16
    13661736.szMessage:
    1367     db 'VirtualBox Guest Additions IFS for OS/2', 0dh, 0ah, 0
     1737        db 'VirtualBox Guest Additions IFS for OS/2', 0dh, 0ah, 0
    13681738segment CODE16
    1369     mov     bx, .szMessage
    1370     call    NAME(FS_INIT_FPUTS)
     1739        mov     bx, .szMessage
     1740        call    NAME(FS_INIT_FPUTS)
    13711741.quiet:
    13721742
    1373     ; return success.
    1374     xor     eax, eax
     1743        ; return success.
     1744        xor     eax, eax
    13751745.done:
    1376     lea     sp, [bp - 0ch]
    1377     pop     edi
    1378     pop     esi
    1379     pop     es
    1380     pop     ds
    1381     mov     esp, ebp
    1382     pop     ebp
    1383     DEBUG_STR16 'VBoxSF: FS_INIT - leave'
    1384     retf    0ch
     1746        lea     sp, [bp - 0ch]
     1747        pop     edi
     1748        pop     esi
     1749        pop     es
     1750        pop     ds
     1751        mov     esp, ebp
     1752        pop     ebp
     1753        DEBUG_STR16 'VBoxSF: FS_INIT - leave'
     1754        retf    0ch
    13851755VBOXSF_EP16_END FS_INIT
    13861756
     
    13921762; @uses     nothing.
    13931763GLOBALNAME FS_INIT_FPUTS
    1394     push    bp
    1395     mov     bp, sp
    1396     push    es                          ; bp - 02h
    1397     push    ds                          ; bp - 04h
    1398     push    ax                          ; bp - 06h
    1399     push    bx                          ; bp - 08h
    1400     push    cx                          ; bp - 0ah
    1401     push    dx                          ; bp - 0ch
    1402     push    si                          ; bp - 0eh
    1403     push    di                          ; bp - 10h
    1404 
    1405     ; cx = strlen(es:bx)
    1406     xor     al, al
    1407     mov     di, bx
    1408     mov     cx, 0ffffh
    1409     cld
    1410     repne scasb
    1411     not     cx
    1412     dec     cx
    1413 
    1414     ; APIRET  _Pascal DosWrite(HFILE hf, PVOID pvBuf, USHORT cbBuf, PUSHORT pcbBytesWritten);
    1415     push    cx
    1416     mov     ax, sp                      ; cbBytesWritten
    1417     push    1                           ; STDOUT
    1418     push    es                          ; pvBuf
    1419     push    bx
    1420     push    cx                          ; cbBuf
    1421     push    ss                          ; pcbBytesWritten
    1422     push    ax
     1764        push    bp
     1765        mov     bp, sp
     1766        push    es                          ; bp - 02h
     1767        push    ds                          ; bp - 04h
     1768        push    ax                          ; bp - 06h
     1769        push    bx                          ; bp - 08h
     1770        push    cx                          ; bp - 0ah
     1771        push    dx                          ; bp - 0ch
     1772        push    si                          ; bp - 0eh
     1773        push    di                          ; bp - 10h
     1774
     1775        ; cx = strlen(es:bx)
     1776        xor     al, al
     1777        mov     di, bx
     1778        mov     cx, 0ffffh
     1779        cld
     1780        repne scasb
     1781        not     cx
     1782        dec     cx
     1783
     1784        ; APIRET  _Pascal DosWrite(HFILE hf, PVOID pvBuf, USHORT cbBuf, PUSHORT pcbBytesWritten);
     1785        push    cx
     1786        mov     ax, sp                      ; cbBytesWritten
     1787        push    1                           ; STDOUT
     1788        push    es                          ; pvBuf
     1789        push    bx
     1790        push    cx                          ; cbBuf
     1791        push    ss                          ; pcbBytesWritten
     1792        push    ax
    14231793%if 0 ; wlink/nasm generates a non-aliased fixup here which results in 16-bit offset with the flat 32-bit selector.
    1424     call far DOS16WRITE
     1794        call far DOS16WRITE
    14251795%else
    1426     ; convert flat pointer to a far pointer using the tiled algorithm.
    1427     mov     ax, DATA32 wrt FLAT
    1428     mov     ds, ax
    1429     mov     eax, g_pfnDos16Write wrt FLAT
    1430     movzx   eax, word [eax + 2]                     ; High word of the flat address (in DATA32).
    1431     shl     ax, 3
    1432     or      ax, 0007h
    1433     mov     dx, DATA16
    1434     mov     ds, dx
    1435     mov     [NAME(g_fpfnDos16Write) + 2], ax        ; Update the selector (in DATA16).
    1436     ; do the call
    1437     call far [NAME(g_fpfnDos16Write)]
     1796        ; convert flat pointer to a far pointer using the tiled algorithm.
     1797        mov     ax, DATA32 wrt FLAT
     1798        mov     ds, ax
     1799        mov     eax, g_pfnDos16Write wrt FLAT
     1800        movzx   eax, word [eax + 2]                     ; High word of the flat address (in DATA32).
     1801        shl     ax, 3
     1802        or      ax, 0007h
     1803        mov     dx, DATA16
     1804        mov     ds, dx
     1805        mov     [NAME(g_fpfnDos16Write) + 2], ax        ; Update the selector (in DATA16).
     1806        ; do the call
     1807        call far [NAME(g_fpfnDos16Write)]
    14381808%endif
    14391809
    1440     lea     sp, [bp - 10h]
    1441     pop     di
    1442     pop     si
    1443     pop     dx
    1444     pop     cx
    1445     pop     bx
    1446     pop     ax
    1447     pop     ds
    1448     pop     es
    1449     pop     bp
    1450     ret
     1810        lea     sp, [bp - 10h]
     1811        pop     di
     1812        pop     si
     1813        pop     dx
     1814        pop     cx
     1815        pop     bx
     1816        pop     ax
     1817        pop     ds
     1818        pop     es
     1819        pop     bp
     1820        ret
    14511821ENDPROC FS_INIT_FPUTS
    14521822
     
    14591829;
    14601830GLOBALNAME VBoxSFR0Init16Bit
    1461     DEBUG_STR16 'VBoxSF: VBoxSFR0Init16Bit - enter'
    1462     push    ds
    1463     push    es
    1464     push    fs
    1465     push    gs
    1466     push    esi
    1467     push    edi
    1468     push    ebp
    1469     mov     ebp, esp
    1470     and     sp, 0fffch
    1471 
    1472     ;
    1473     ; Only try once.
    1474     ;
    1475     mov     ax, DATA16
    1476     mov     ds, ax
    1477     mov     byte [NAME(g_fDoneRing0)], 1
    1478 
    1479     ;
    1480     ; Try attach to the VBoxGuest driver.
    1481     ;
    1482     mov     bx, NAME(g_szVBoxGuestName)
    1483     mov     di, NAME(g_VBoxGuestAttachDD)
    1484     mov     dl, DevHlp_AttachDD
    1485     call far [NAME(g_fpfnDevHlp)]
    1486     jc      .attach_attempt_done
    1487 
    1488     push    seg NAME(g_VBoxGuestIDC)
    1489     push    NAME(g_VBoxGuestIDC)
    1490     call far [NAME(g_VBoxGuestAttachDD) + 6]
     1831        DEBUG_STR16 'VBoxSF: VBoxSFR0Init16Bit - enter'
     1832        push    ds
     1833        push    es
     1834        push    fs
     1835        push    gs
     1836        push    esi
     1837        push    edi
     1838        push    ebp
     1839        mov     ebp, esp
     1840        and     sp, 0fffch
     1841
     1842        ;
     1843        ; Only try once.
     1844        ;
     1845        mov     ax, DATA16
     1846        mov     ds, ax
     1847        mov     byte [NAME(g_fDoneRing0)], 1
     1848
     1849        ;
     1850        ; Try attach to the VBoxGuest driver.
     1851        ;
     1852        mov     bx, NAME(g_szVBoxGuestName)
     1853        mov     di, NAME(g_VBoxGuestAttachDD)
     1854        mov     dl, DevHlp_AttachDD
     1855        call far [NAME(g_fpfnDevHlp)]
     1856        jc      .attach_attempt_done
     1857
     1858        push    seg NAME(g_VBoxGuestIDC)
     1859        push    NAME(g_VBoxGuestIDC)
     1860        call far [NAME(g_VBoxGuestAttachDD) + 6]
    14911861.attach_attempt_done:
    14921862
    14931863%ifndef DONT_LOCK_SEGMENTS
    1494     ;
    1495     ; Lock the two 16-bit segments.
    1496     ;
    1497     push    DATA16
    1498     call far FSH_FORCENOSWAP
    1499     push    CODE16
    1500     call far FSH_FORCENOSWAP
    1501     ; Wonder if this'll work if wlink could mark the two segments as ALIASed...
    1502     ;push DATA32
    1503     ;call far FSH_FORCENOSWAP
    1504     ;push TEXT32
    1505     ;call far FSH_FORCENOSWAP
     1864        ;
     1865        ; Lock the two 16-bit segments.
     1866        ;
     1867        push    DATA16
     1868        call far FSH_FORCENOSWAP
     1869        push    CODE16
     1870        call far FSH_FORCENOSWAP
     1871        ; Wonder if this'll work if wlink could mark the two segments as ALIASed...
     1872        ;push DATA32
     1873        ;call far FSH_FORCENOSWAP
     1874        ;push TEXT32
     1875        ;call far FSH_FORCENOSWAP
    15061876%endif
    15071877
    1508     ;
    1509     ; Do 32-bit ring-0 init.
    1510     ;
    1511     ;jmp far dword NAME(VBoxSFR0Init16Bit_32) wrt FLAT
    1512     db      066h
    1513     db      0eah
    1514     dd      NAME(VBoxSFR0Init16Bit_32) ;wrt FLAT
    1515     dw      TEXT32 wrt FLAT
     1878        ;
     1879        ; Do 32-bit ring-0 init.
     1880        ;
     1881        ;jmp far dword NAME(VBoxSFR0Init16Bit_32) wrt FLAT
     1882        db      066h
     1883        db      0eah
     1884        dd      NAME(VBoxSFR0Init16Bit_32) ;wrt FLAT
     1885        dw      TEXT32 wrt FLAT
    15161886segment TEXT32
    15171887GLOBALNAME VBoxSFR0Init16Bit_32
    1518     mov     ax, DATA32 wrt FLAT
    1519     mov     ds, ax
    1520     mov     es, ax
    1521 
    1522     call    KernThunkStackTo32
    1523     call    NAME(VBoxSFR0Init)
    1524     call    KernThunkStackTo16
    1525 
    1526     ;jmp far dword NAME(VBoxSFR0Init16Bit_16) wrt CODE16
    1527     db      066h
    1528     db      0eah
    1529     dw      NAME(VBoxSFR0Init16Bit_16) wrt CODE16
    1530     dw      CODE16
     1888        mov     ax, DATA32 wrt FLAT
     1889        mov     ds, ax
     1890        mov     es, ax
     1891
     1892        call    KernThunkStackTo32
     1893        call    NAME(VBoxSFR0Init)
     1894        call    KernThunkStackTo16
     1895
     1896        ;jmp far dword NAME(VBoxSFR0Init16Bit_16) wrt CODE16
     1897        db      066h
     1898        db      0eah
     1899        dw      NAME(VBoxSFR0Init16Bit_16) wrt CODE16
     1900        dw      CODE16
    15311901segment CODE16
    15321902GLOBALNAME VBoxSFR0Init16Bit_16
    15331903
    1534     mov     esp, ebp
    1535     pop     ebp
    1536     pop     edi
    1537     pop     esi
    1538     pop     gs
    1539     pop     fs
    1540     pop     es
    1541     pop     ds
    1542     DEBUG_STR16 'VBoxSF: VBoxSFR0Init16Bit - leave'
    1543     ret
     1904        mov     esp, ebp
     1905        pop     ebp
     1906        pop     edi
     1907        pop     esi
     1908        pop     gs
     1909        pop     fs
     1910        pop     es
     1911        pop     ds
     1912        DEBUG_STR16 'VBoxSF: VBoxSFR0Init16Bit - leave'
     1913        ret
    15441914ENDPROC VBoxSFR0Init16Bit
    15451915
     
    15511921;
    15521922GLOBALNAME dbgstr16
    1553     push    ds
    1554     push    ebx
    1555     push    edx
    1556 
    1557     mov     bx, ax
    1558     mov     dx, 0504h                   ; RTLOG_DEBUG_PORT
    1559     mov     ax, DATA16
    1560     mov     ds, ax
     1923        push    ds
     1924        push    ebx
     1925        push    edx
     1926
     1927        mov     bx, ax
     1928        mov     dx, 0504h                   ; RTLOG_DEBUG_PORT
     1929        mov     ax, DATA16
     1930        mov     ds, ax
    15611931
    15621932.next:
    1563     mov     al, [bx]
    1564     or      al, al
    1565     jz      .done
    1566     inc     bx
    1567     out     dx, al
    1568     jmp     .next
     1933        mov     al, [bx]
     1934        or      al, al
     1935        jz      .done
     1936        inc     bx
     1937        out     dx, al
     1938        jmp     .next
    15691939
    15701940.done:
    1571     pop     edx
    1572     pop     ebx
    1573     pop     ds
    1574     ret
     1941        pop     edx
     1942        pop     ebx
     1943        pop     ds
     1944        ret
    15751945ENDPROC dbgstr16
    15761946%endif
    15771947
     1948
     1949%ifdef WITH_DWARF
     1950;
     1951; Close debug info
     1952;
     1953segment _debug_info
     1954        db  0
     1955g_dwarf_compile_unit_end:
     1956%endif
     1957
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette