VirtualBox

Changeset 60554 in vbox


Ignore:
Timestamp:
Apr 18, 2016 7:11:32 PM (9 years ago)
Author:
vboxsync
Message:

bs3kit: far updates.

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
3 added
47 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/Config.kmk

    r60540 r60554  
    7878# @param    1   The target name.
    7979# @param    2   List of functions.
    80 BS3KIT_FN_GEN_NEARSTUBS = $(foreach fn,$2,$(evalcall2 def_Bs3KitGenNearStubSource,$1,$(fn)))
     80BS3KIT_FN_GEN_NEARSTUBS = $(foreach fn,$2,$(evalcall2 def_Bs3KitGenNearStubSource,$1,_$(fn)_c16,_$(fn)_f16))
     81
     82##
     83# Macro for generating near-call aliases for zero or more 16-bit C mode functions.
     84# @param    1   The target name.
     85# @param    2   List of mode functions.
     86BS3KIT_FN_GEN_MODE_NEARSTUBS = $(foreach fn,$2,$(foreach suff, \
     87        _rm \
     88        _pe16 \
     89        _pe16_v86 \
     90        _pe32_16 \
     91        _pev86 \
     92        _pp16 \
     93        _pp16_v86 \
     94        _pp32_16 \
     95        _ppv86 \
     96        _pae16 \
     97        _pae16_v86 \
     98        _pae32_16 \
     99        _paev86 \
     100        _lm16 \
     101        ,$(evalcall2 def_Bs3KitGenNearStubSource,$1,_$(fn)$(suff),_$(fn)$(suff)_far)))
     102
     103# @param    1   The target name.
     104# @param    2   The near function name.
     105# @param    3   The far function name.
    81106define def_Bs3KitGenNearStubSource
    82 $1_SOURCES += $$($1_0_OUTDIR)/near-call-to-$2_f16.asm
    83 $1_CLEAN   += $$($1_0_OUTDIR)/near-call-to-$2_f16.asm
    84 $$$$($1_0_OUTDIR)/near-call-to-$2_f16.asm: $$(VBOX_PATH_BOOTSECTORS_SRC)/Config.kmk | $$$$(dir $$$$@)
     107$1_SOURCES += $$($1_0_OUTDIR)/stub$2.asm
     108$1_CLEAN   += $$($1_0_OUTDIR)/stub$2.asm
     109$$$$($1_0_OUTDIR)/stub$2.asm: $$(VBOX_PATH_BOOTSECTORS_SRC)/Config.kmk | $$$$(dir $$$$@)
    85110        $(QUIET)$(APPEND) -tn $$@ \
    86111                '%include "bs3kit.mac"' \
    87112        'BS3_BEGIN_TEXT16' \
    88                '      extern  _$2_f16' \
     113               '      extern  $3' \
    89114        'BS3_BEGIN_TEXT16_NEARSTUBS' \
    90                 'BS3_GLOBAL_NAME_EX _$2_c16, function, 6' \
     115                'BS3_GLOBAL_NAME_EX $2, function, 6' \
    91116               '      pop     ax' \
    92117               '      push    cs' \
    93118               '      push    ax' \
    94                '      jmp     _$2_f16 wrt CGROUP16'
     119               '      jmp     $3 wrt CGROUP16'
    95120endef
    96121
     
    631656        ,,$(QUIET)$(MV_EXT) -f -- "$(out)" "$(out).tmp" \
    632657        $$(NLTAB)$(QUIET)$(VBoxBs3Linker_1_TARGET) -o $(out) $(bs3-bootsector_1_TARGET) $(out).tmp \
    633         $$(NLTAB)$(QUIET)$(RM_EXT) -f -- "$(out).tmp")
     658        $$(NLTAB)$(QUIET)$(RM_EXT) -f -- "$(out).tmp") \
     659        $(eval .PRECIOUS: $(outbase).map) # ugly hack!
     660
    634661
    635662TEMPLATE_VBoxBS3KitImg_LIBS = \
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-template.mac

    r60445 r60554  
    4040
    4141%if 0 ; Will be doing the testing in C, I think.
    42 BS3_PROC_BEGIN_MODE bs3CpuBasic2_iret
     42BS3_PROC_BEGIN_MODE bs3CpuBasic2_iret, BS3_PBC_FAR
    4343        BS3_CALL_CONV_PROLOG 1
    4444        push    xBP
     
    7979
    8080
    81 BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int80
     81BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int80, BS3_PBC_NEAR
    8282        int     80h
    8383.again: ud2
     
    8686
    8787
    88 BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int81
     88BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int81, BS3_PBC_NEAR
    8989        int     81h
    9090.again: ud2
     
    9393
    9494
    95 BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int82
     95BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int82, BS3_PBC_NEAR
    9696        int     82h
    9797.again: ud2
     
    100100
    101101
    102 BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int83
     102BS3_PROC_BEGIN_MODE bs3CpuBasic2_Int83, BS3_PBC_NEAR
    103103        int     83h
    104104.again: ud2
     
    107107
    108108
    109 BS3_PROC_BEGIN_MODE bs3CpuBasic2_sidt_bx_ud2
     109BS3_PROC_BEGIN_MODE bs3CpuBasic2_sidt_bx_ud2, BS3_PBC_NEAR
    110110        sidt    [xBX]
    111111.again: ud2
     
    114114
    115115
    116 BS3_PROC_BEGIN_MODE bs3CpuBasic2_lidt_bx_ud2
     116BS3_PROC_BEGIN_MODE bs3CpuBasic2_lidt_bx_ud2, BS3_PBC_NEAR
    117117        lidt    [xBX]
    118118.again: ud2
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk

    r60539 r60554  
    9090       bs3-cmn-SelFar32ToFlat32.c \
    9191       bs3-cmn-SelProtFar32ToFlat32.c \
     92       bs3-cmn-SelProtModeCodeToRealMode.asm \
    9293       bs3-cmn-SelRealModeCodeToProtMode.asm \
    9394       bs3-cmn-SelFlatCodeToRealMode.asm \
     
    102103       bs3-cmn-SlabListAllocEx.c \
    103104       bs3-cmn-SlabListFree.c \
     105       bs3-cmn-SwitchHlpConvRealModeRetfPopBpDecBpAndReturn.asm \
     106       bs3-cmn-SwitchHlpConvProtModeRetfPopBpDecBpAndReturn.asm \
    104107       bs3-cmn-SwitchToRing0.asm \
    105108       bs3-cmn-SwitchToRing1.asm \
     
    213216       Bs3TestSubF \
    214217       Bs3TestSubV \
    215        Bs3Trap16InitEx
     218       Bs3Trap16InitEx \
     219
     220bs3kit-common-16_VBOX_NEAR_TO_FAR_MODE_FUNCTIONS := \
     221        Bs3TestDoModes \
     222        Bs3TrapInit \
     223
    216224$(call BS3KIT_FN_GEN_NEARSTUBS,bs3kit-common-16,$(bs3kit-common-16_VBOX_NEAR_TO_FAR_FUNCTIONS))
     225$(call BS3KIT_FN_GEN_MODE_NEARSTUBS,bs3kit-common-16,$(bs3kit-common-16_VBOX_NEAR_TO_FAR_MODE_FUNCTIONS))
    217226
    218227# The 32-bit BS3Kit library.
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-A20Enable.asm

    r60527 r60554  
    4545        call    BS3_CMN_NM(Bs3A20EnableViaPortA)
    4646;; @todo real 286 support
    47 ;        call    TMPL_NM_CMN(Bs3A20EnableViaKbd)
     47;        call    BS3_CMN_NM(Bs3A20EnableViaKbd)
    4848
    4949        pop     xBP
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelRealModeCodeToProtMode.asm

    r60539 r60554  
    3838;;
    3939; @cproto   BS3_CMN_PROTO(uint16_t, Bs3SelRealModeCodeToProtMode,(uint16_t uRealSel), false);
     40; @uses     ax (return register)
    4041;
    4142BS3_PROC_BEGIN_CMN Bs3SelRealModeCodeToProtMode, BS3_PBC_NEAR
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-common.mac

    r60539 r60554  
    157157section BS3RMTEXT16_END   align=1 CLASS=BS3CLASS16RMCODE PUBLIC USE16
    158158BS3_GLOBAL_DATA Bs3RmText16_EndOfSegment, 0
     159GROUP BS3GROUPRMTEXT16 BS3RMTEXT16_START BS3RMTEXT16 BS3RMTEXT16_END
    159160
    160161
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-CpuDetect.asm

    r60365 r60554  
    4242; @remarks  ASSUMES we're in ring-0 when not in some kind of real mode.
    4343;
    44 BS3_PROC_BEGIN_MODE Bs3CpuDetect
     44BS3_PROC_BEGIN_MODE Bs3CpuDetect, BS3_PBC_HYBRID_0_ARGS
    4545CPU 8086
    4646        push    xBP
     
    293293        popf
    294294        pop     xBP
    295         ret
     295        BS3_HYBRID_RET
    296296
    297297BS3_PROC_END_MODE   Bs3CpuDetect
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-EnteredMode.asm

    r60527 r60554  
    4040; @remarks  ASSUMES we're in ring-0 when not in some kind of real mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3EnteredMode
     42BS3_PROC_BEGIN_MODE Bs3EnteredMode, BS3_PBC_NEAR ; won't need this outside the switchers, so always near.
    4343        push    xBP
    4444        mov     xBP, xSP
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForLM64.asm

    r60291 r60554  
    5151; @remarks  returns value in EAX, not dx:ax!
    5252;
    53 BS3_PROC_BEGIN_MODE Bs3PagingGetRootForLM64
     53BS3_PROC_BEGIN_MODE Bs3PagingGetRootForLM64, BS3_PBC_NEAR ; Internal function, no far variant necessary.
    5454        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootLM)]
    5555        cmp     eax, 0ffffffffh
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForPAE16.asm

    r59941 r60554  
    4040; @remarks  returns value in EAX, not dx:ax!
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPAE16
     42BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPAE16, BS3_PBC_NEAR ; Internal function, no far variant necessary.
    4343        jmp     TMPL_NM(Bs3PagingGetRootForPAE32)
    4444BS3_PROC_END_MODE   Bs3PagingGetRootForPAE16
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForPAE32.asm

    r60019 r60554  
    5151; @remarks  returns value in EAX, not dx:ax!
    5252;
    53 BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPAE32
     53BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPAE32, BS3_PBC_NEAR ; Internal function, no far variant necessary.
    5454        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootPAE)]
    5555        cmp     eax, 0ffffffffh
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForPP16.asm

    r59941 r60554  
    4040; @remarks  returns value in EAX, not dx:ax!
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPP16
     42BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPP16, BS3_PBC_NEAR ; Internal function, no far variant necessary.
    4343        jmp     TMPL_NM(Bs3PagingGetRootForPP32)
    4444BS3_PROC_END_MODE   Bs3PagingGetRootForPP16
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-PagingGetRootForPP32.asm

    r60291 r60554  
    5151; @remarks  returns value in EAX, not dx:ax!
    5252;
    53 BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPP32
     53BS3_PROC_BEGIN_MODE Bs3PagingGetRootForPP32, BS3_PBC_NEAR ; Internal function, no far variant necessary.
    5454        mov     eax, [BS3_DATA16_WRT(g_PhysPagingRootPP)]
    5555        cmp     eax, 0ffffffffh
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToLM16.asm

    r60291 r60554  
    4141; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4242;
    43 BS3_PROC_BEGIN_MODE Bs3SwitchToLM16
     43BS3_PROC_BEGIN_MODE Bs3SwitchToLM16, BS3_PBC_NEAR
    4444%ifdef TMPL_LM16
    4545        extern  BS3_CMN_NM(Bs3SwitchToRing0)
     
    8383BS3_PROC_END_MODE   Bs3SwitchToLM16
    8484
     85
     86%if TMPL_BITS == 16
     87;;
     88; Custom far stub.
     89BS3_BEGIN_TEXT16_FARSTUBS
     90BS3_PROC_BEGIN_MODE Bs3SwitchToLM16, BS3_PBC_FAR
     91        inc         bp
     92        push        bp
     93        mov         bp, sp
     94
     95        ; Call the real thing.
     96        call        TMPL_NM(Bs3SwitchToLM16)
     97
     98 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     99        ; Jmp to  common code for the tedious conversion.
     100        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     101        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     102 %else
     103        pop         bp
     104        dec         bp
     105        retf
     106 %endif
     107BS3_PROC_END_MODE   Bs3SwitchToLM16
     108%endif
     109
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToLM32.asm

    r59950 r60554  
    4444; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4545;
    46 BS3_PROC_BEGIN_MODE Bs3SwitchToLM32
     46BS3_PROC_BEGIN_MODE Bs3SwitchToLM32, BS3_PBC_NEAR
    4747%ifdef TMPL_LM32
    4848        ret
     
    152152BS3_PROC_END_MODE   Bs3SwitchToLM32
    153153
     154
     155%if TMPL_BITS == 16
     156;;
     157; Custom far stub.
     158BS3_BEGIN_TEXT16_FARSTUBS
     159BS3_PROC_BEGIN_MODE Bs3SwitchToLM32, BS3_PBC_FAR
     160        inc         bp
     161        push        bp
     162        mov         bp, sp
     163
     164        ; Call the real thing.
     165        call        TMPL_NM(Bs3SwitchToLM32)
     166        BS3_SET_BITS 32
     167
     168        ; Jmp to common code for the tedious conversion.
     169 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     170        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     171        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     172 %else
     173        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     174        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     175 %endif
     176        BS3_SET_BITS 16
     177BS3_PROC_END_MODE   Bs3SwitchToLM32
     178%endif
     179
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToLM64.asm

    r59287 r60554  
    4141; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4242;
    43 BS3_PROC_BEGIN_MODE Bs3SwitchToLM64
     43BS3_PROC_BEGIN_MODE Bs3SwitchToLM64, BS3_PBC_NEAR
    4444%ifdef TMPL_LM64
    4545        ret
     
    7676BS3_PROC_END_MODE   Bs3SwitchToLM64
    7777
     78
     79%if TMPL_BITS == 16
     80;;
     81; Custom far stub.
     82BS3_BEGIN_TEXT16_FARSTUBS
     83BS3_PROC_BEGIN_MODE Bs3SwitchToLM64, BS3_PBC_FAR
     84        inc         bp
     85        push        bp
     86        mov         bp, sp
     87
     88        ; Call the real thing.
     89        call        TMPL_NM(Bs3SwitchToLM64)
     90        BS3_SET_BITS 64
     91
     92        ; Jmp to common code for the tedious conversion.
     93 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     94        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     95        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     96 %else
     97        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     98        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     99 %endif
     100        BS3_SET_BITS 16
     101BS3_PROC_END_MODE   Bs3SwitchToLM64
     102%endif
     103
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAE16.asm

    r60291 r60554  
    4747; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4848;
    49 BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16
     49BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16, BS3_PBC_NEAR
    5050%ifdef TMPL_PAE16
    5151        extern  BS3_CMN_NM(Bs3SwitchToRing0)
     
    166166BS3_PROC_END_MODE   Bs3SwitchToPAE16
    167167
     168
     169%if TMPL_BITS == 16
     170;;
     171; Custom far stub.
     172BS3_BEGIN_TEXT16_FARSTUBS
     173BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16, BS3_PBC_FAR
     174        inc         bp
     175        push        bp
     176        mov         bp, sp
     177
     178        ; Call the real thing.
     179        call        TMPL_NM(Bs3SwitchToPAE16)
     180
     181 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     182        ; Jmp to  common code for the tedious conversion.
     183        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     184        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     185 %else
     186        pop         bp
     187        dec         bp
     188        retf
     189 %endif
     190BS3_PROC_END_MODE   Bs3SwitchToPAE16
     191%endif
     192
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAE16_32.asm

    r59934 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16_32
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16_32, BS3_PBC_NEAR
    4343%ifdef TMPL_PAE16_32
    4444        ret
     
    7676BS3_PROC_END_MODE   Bs3SwitchToPAE16_32
    7777
     78
     79%if TMPL_BITS == 16
     80;;
     81; Custom far stub.
     82BS3_BEGIN_TEXT16_FARSTUBS
     83BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16_32, BS3_PBC_FAR
     84        inc         bp
     85        push        bp
     86        mov         bp, sp
     87
     88        ; Call the real thing.
     89        call        TMPL_NM(Bs3SwitchToPAE16_32)
     90        BS3_SET_BITS 32
     91
     92        ; Jmp to common code for the tedious conversion.
     93 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     94        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     95        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     96 %else
     97        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     98        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     99 %endif
     100        BS3_SET_BITS 16
     101BS3_PROC_END_MODE   Bs3SwitchToPAE16_32
     102%endif
     103
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAE16_V86.asm

    r59938 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16_V86
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16_V86, BS3_PBC_NEAR
    4343%ifdef TMPL_PAE16_V86
    4444        ret
     
    7272BS3_PROC_END_MODE   Bs3SwitchToPAE16_V86
    7373
     74
     75%if TMPL_BITS == 16
     76;;
     77; Custom far stub.
     78BS3_BEGIN_TEXT16_FARSTUBS
     79BS3_PROC_BEGIN_MODE Bs3SwitchToPAE16_V86, BS3_PBC_FAR
     80        inc         bp
     81        push        bp
     82        mov         bp, sp
     83
     84        ; Call the real thing.
     85        call        TMPL_NM(Bs3SwitchToPAE16_V86)
     86
     87 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     88        ; Jmp to common code for the tedious conversion.
     89        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     90        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     91 %else
     92        pop         bp
     93        dec         bp
     94        retf
     95 %endif
     96BS3_PROC_END_MODE   Bs3SwitchToPAE16_V86
     97%endif
     98
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAE32.asm

    r59950 r60554  
    4242; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4343;
    44 BS3_PROC_BEGIN_MODE Bs3SwitchToPAE32
     44BS3_PROC_BEGIN_MODE Bs3SwitchToPAE32, BS3_PBC_NEAR
    4545%ifdef TMPL_PAE32
    4646        ret
     
    158158BS3_PROC_END_MODE   Bs3SwitchToPAE32
    159159
     160
     161%if TMPL_BITS == 16
     162;;
     163; Custom far stub.
     164BS3_BEGIN_TEXT16_FARSTUBS
     165BS3_PROC_BEGIN_MODE Bs3SwitchToPAE32, BS3_PBC_FAR
     166        inc         bp
     167        push        bp
     168        mov         bp, sp
     169
     170        ; Call the real thing.
     171        call        TMPL_NM(Bs3SwitchToPAE32)
     172        BS3_SET_BITS 32
     173
     174        ; Jmp to common code for the tedious conversion.
     175 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     176        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     177        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     178 %else
     179        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     180        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     181 %endif
     182        BS3_SET_BITS 16
     183BS3_PROC_END_MODE   Bs3SwitchToPAE32
     184%endif
     185
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAE32_16.asm

    r59934 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPAE32_16
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPAE32_16, BS3_PBC_NEAR
    4343%if TMPL_MODE == BS3_MODE_PAE32_16
    4444        ret
     
    8080BS3_PROC_END_MODE   Bs3SwitchToPAE32_16
    8181
     82%if TMPL_BITS == 16
     83;;
     84; Custom far stub.
     85BS3_BEGIN_TEXT16_FARSTUBS
     86BS3_PROC_BEGIN_MODE Bs3SwitchToPAE32_16, BS3_PBC_FAR
     87        inc         bp
     88        push        bp
     89        mov         bp, sp
     90
     91        ; Call the real thing.
     92        call        TMPL_NM(Bs3SwitchToPAE32_16)
     93
     94 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     95        ; Jmp to  common code for the tedious conversion.
     96        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     97        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     98 %else
     99        pop         bp
     100        dec         bp
     101        retf
     102 %endif
     103BS3_PROC_END_MODE   Bs3SwitchToPAE32_16
     104%endif
     105
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPAEV86.asm

    r60019 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPAEV86
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPAEV86, BS3_PBC_NEAR
    4343%if TMPL_MODE == BS3_MODE_PAEV86
    4444        ret
     
    6666BS3_PROC_END_MODE   Bs3SwitchToPAEV86
    6767
     68
     69%if TMPL_BITS == 16
     70;;
     71; Custom far stub.
     72BS3_BEGIN_TEXT16_FARSTUBS
     73BS3_PROC_BEGIN_MODE Bs3SwitchToPAEV86, BS3_PBC_FAR
     74        inc         bp
     75        push        bp
     76        mov         bp, sp
     77
     78        ; Call the real thing.
     79        call        TMPL_NM(Bs3SwitchToPAEV86)
     80
     81 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     82        ; Jmp to common code for the tedious conversion.
     83        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     84        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     85 %else
     86        pop         bp
     87        dec         bp
     88        retf
     89 %endif
     90BS3_PROC_END_MODE   Bs3SwitchToPAEV86
     91%endif
     92
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE16.asm

    r60291 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPE16
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPE16, BS3_PBC_NEAR
    4343%ifdef TMPL_PE16
    4444        extern  BS3_CMN_NM(Bs3SwitchToRing0)
     
    125125BS3_PROC_END_MODE   Bs3SwitchToPE16
    126126
     127
     128%if TMPL_BITS == 16
     129;;
     130; Custom far stub.
     131BS3_BEGIN_TEXT16_FARSTUBS
     132BS3_PROC_BEGIN_MODE Bs3SwitchToPE16, BS3_PBC_FAR
     133        inc         bp
     134        push        bp
     135        mov         bp, sp
     136
     137        ; Call the real thing.
     138        call        TMPL_NM(Bs3SwitchToPE16)
     139
     140 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     141        ; Jmp to  common code for the tedious conversion.
     142        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     143        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     144 %else
     145        pop         bp
     146        dec         bp
     147        retf
     148 %endif
     149BS3_PROC_END_MODE   Bs3SwitchToPE16
     150%endif
     151
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE16_32.asm

    r59934 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPE16_32
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPE16_32, BS3_PBC_NEAR
    4343%ifdef TMPL_PE16_32
    4444        ret
     
    7676BS3_PROC_END_MODE   Bs3SwitchToPE16_32
    7777
     78
     79%if TMPL_BITS == 16
     80;;
     81; Custom far stub.
     82BS3_BEGIN_TEXT16_FARSTUBS
     83BS3_PROC_BEGIN_MODE Bs3SwitchToPE16_32, BS3_PBC_FAR
     84        inc         bp
     85        push        bp
     86        mov         bp, sp
     87
     88        ; Call the real thing.
     89        call        TMPL_NM(Bs3SwitchToPE16_32)
     90        BS3_SET_BITS 32
     91
     92        ; Jmp to common code for the tedious conversion.
     93 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     94        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     95        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     96 %else
     97        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     98        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     99 %endif
     100        BS3_SET_BITS 16
     101BS3_PROC_END_MODE   Bs3SwitchToPE16_32
     102%endif
     103
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE16_V86.asm

    r60002 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPE16_V86
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPE16_V86, BS3_PBC_NEAR
    4343%ifdef TMPL_PE16_V86
    4444        ret
     
    7272BS3_PROC_END_MODE   Bs3SwitchToPE16_V86
    7373
     74
     75%if TMPL_BITS == 16
     76;;
     77; Custom far stub.
     78BS3_BEGIN_TEXT16_FARSTUBS
     79BS3_PROC_BEGIN_MODE Bs3SwitchToPE16_V86, BS3_PBC_FAR
     80        inc         bp
     81        push        bp
     82        mov         bp, sp
     83
     84        ; Call the real thing.
     85        call        TMPL_NM(Bs3SwitchToPE16_V86)
     86
     87 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     88        ; Jmp to common code for the tedious conversion.
     89        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     90        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     91 %else
     92        pop         bp
     93        dec         bp
     94        retf
     95 %endif
     96BS3_PROC_END_MODE   Bs3SwitchToPE16_V86
     97%endif
     98
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE32.asm

    r59950 r60554  
    4141; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4242;
    43 BS3_PROC_BEGIN_MODE Bs3SwitchToPE32
     43BS3_PROC_BEGIN_MODE Bs3SwitchToPE32, BS3_PBC_NEAR
    4444%ifdef TMPL_PE32
    4545        ret
     
    136136BS3_PROC_END_MODE   Bs3SwitchToPE32
    137137
     138
     139%if TMPL_BITS == 16
     140;;
     141; Custom far stub.
     142BS3_BEGIN_TEXT16_FARSTUBS
     143BS3_PROC_BEGIN_MODE Bs3SwitchToPE32, BS3_PBC_FAR
     144        inc         bp
     145        push        bp
     146        mov         bp, sp
     147
     148        ; Call the real thing.
     149        call        TMPL_NM(Bs3SwitchToPE32)
     150        BS3_SET_BITS 32
     151
     152        ; Jmp to common code for the tedious conversion.
     153 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     154        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     155        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     156 %else
     157        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     158        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     159 %endif
     160        BS3_SET_BITS 16
     161BS3_PROC_END_MODE   Bs3SwitchToPE32
     162%endif
     163
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPE32_16.asm

    r59934 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPE32_16
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPE32_16, BS3_PBC_NEAR
    4343%if TMPL_MODE == BS3_MODE_PE32_16
    4444        ret
     
    8080BS3_PROC_END_MODE   Bs3SwitchToPE32_16
    8181
     82
     83%if TMPL_BITS == 16
     84;;
     85; Custom far stub.
     86BS3_BEGIN_TEXT16_FARSTUBS
     87BS3_PROC_BEGIN_MODE Bs3SwitchToPE32_16, BS3_PBC_FAR
     88        inc         bp
     89        push        bp
     90        mov         bp, sp
     91
     92        ; Call the real thing.
     93        call        TMPL_NM(Bs3SwitchToPE32_16)
     94
     95 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     96        ; Jmp to  common code for the tedious conversion.
     97        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     98        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     99 %else
     100        pop         bp
     101        dec         bp
     102        retf
     103 %endif
     104BS3_PROC_END_MODE   Bs3SwitchToPE32_16
     105%endif
     106
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPEV86.asm

    r60019 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPEV86
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPEV86, BS3_PBC_NEAR
    4343%if TMPL_MODE == BS3_MODE_PEV86
    4444        ret
     
    6666BS3_PROC_END_MODE   Bs3SwitchToPEV86
    6767
     68
     69%if TMPL_BITS == 16
     70;;
     71; Custom far stub.
     72BS3_BEGIN_TEXT16_FARSTUBS
     73BS3_PROC_BEGIN_MODE Bs3SwitchToPEV86, BS3_PBC_FAR
     74        inc         bp
     75        push        bp
     76        mov         bp, sp
     77
     78        ; Call the real thing.
     79        call        TMPL_NM(Bs3SwitchToPEV86)
     80
     81 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     82        ; Jmp to common code for the tedious conversion.
     83        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     84        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     85 %else
     86        pop         bp
     87        dec         bp
     88        retf
     89 %endif
     90BS3_PROC_END_MODE   Bs3SwitchToPEV86
     91%endif
     92
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPP16.asm

    r60321 r60554  
    4747; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4848;
    49 BS3_PROC_BEGIN_MODE Bs3SwitchToPP16
     49BS3_PROC_BEGIN_MODE Bs3SwitchToPP16, BS3_PBC_NEAR
    5050%ifdef TMPL_PP16
    5151        extern  BS3_CMN_NM(Bs3SwitchToRing0)
     
    182182BS3_PROC_END_MODE   Bs3SwitchToPP16
    183183
     184
     185%if TMPL_BITS == 16
     186;;
     187; Custom far stub.
     188BS3_BEGIN_TEXT16_FARSTUBS
     189BS3_PROC_BEGIN_MODE Bs3SwitchToPP16, BS3_PBC_FAR
     190        inc         bp
     191        push        bp
     192        mov         bp, sp
     193
     194        ; Call the real thing.
     195        call        TMPL_NM(Bs3SwitchToPP16)
     196
     197 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     198        ; Jmp to  common code for the tedious conversion.
     199        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     200        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     201 %else
     202        pop         bp
     203        dec         bp
     204        retf
     205 %endif
     206BS3_PROC_END_MODE   Bs3SwitchToPP16
     207%endif
     208
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPP16_32.asm

    r59934 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPP16_32
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPP16_32, BS3_PBC_NEAR
    4343%ifdef TMPL_PP16_32
    4444        ret
     
    7676BS3_PROC_END_MODE   Bs3SwitchToPP16_32
    7777
     78
     79%if TMPL_BITS == 16
     80;;
     81; Custom far stub.
     82BS3_BEGIN_TEXT16_FARSTUBS
     83BS3_PROC_BEGIN_MODE Bs3SwitchToPP16_32, BS3_PBC_FAR
     84        inc         bp
     85        push        bp
     86        mov         bp, sp
     87
     88        ; Call the real thing.
     89        call        TMPL_NM(Bs3SwitchToPP16_32)
     90        BS3_SET_BITS 32
     91
     92        ; Jmp to common code for the tedious conversion.
     93 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     94        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     95        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     96 %else
     97        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     98        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     99 %endif
     100        BS3_SET_BITS 16
     101BS3_PROC_END_MODE   Bs3SwitchToPP16_32
     102%endif
     103
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPP16_V86.asm

    r59938 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPP16_V86
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPP16_V86, BS3_PBC_NEAR
    4343%ifdef TMPL_PP16_V86
    4444        ret
     
    7272BS3_PROC_END_MODE   Bs3SwitchToPP16_V86
    7373
     74
     75%if TMPL_BITS == 16
     76;;
     77; Custom far stub.
     78BS3_BEGIN_TEXT16_FARSTUBS
     79BS3_PROC_BEGIN_MODE Bs3SwitchToPP16_V86, BS3_PBC_FAR
     80        inc         bp
     81        push        bp
     82        mov         bp, sp
     83
     84        ; Call the real thing.
     85        call        TMPL_NM(Bs3SwitchToPP16_V86)
     86
     87 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     88        ; Jmp to common code for the tedious conversion.
     89        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     90        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     91 %else
     92        pop         bp
     93        dec         bp
     94        retf
     95 %endif
     96BS3_PROC_END_MODE   Bs3SwitchToPP16_V86
     97%endif
     98
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPP32.asm

    r60319 r60554  
    4242; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4343;
    44 BS3_PROC_BEGIN_MODE Bs3SwitchToPP32
     44BS3_PROC_BEGIN_MODE Bs3SwitchToPP32, BS3_PBC_NEAR
    4545%ifdef TMPL_PP32
    4646        ret
     
    166166BS3_PROC_END_MODE   Bs3SwitchToPP32
    167167
     168
     169%if TMPL_BITS == 16
     170;;
     171; Custom far stub.
     172BS3_BEGIN_TEXT16_FARSTUBS
     173BS3_PROC_BEGIN_MODE Bs3SwitchToPP32, BS3_PBC_FAR
     174        inc         bp
     175        push        bp
     176        mov         bp, sp
     177
     178        ; Call the real thing.
     179        call        TMPL_NM(Bs3SwitchToPP32)
     180        BS3_SET_BITS 32
     181
     182        ; Jmp to common code for the tedious conversion.
     183 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     184        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     185        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     186 %else
     187        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     188        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     189 %endif
     190        BS3_SET_BITS 16
     191BS3_PROC_END_MODE   Bs3SwitchToPP32
     192%endif
     193
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPP32_16.asm

    r59934 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPP32_16
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPP32_16, BS3_PBC_NEAR
    4343%if TMPL_MODE == BS3_MODE_PP32_16
    4444        ret
     
    8080BS3_PROC_END_MODE   Bs3SwitchToPP32_16
    8181
     82
     83%if TMPL_BITS == 16
     84;;
     85; Custom far stub.
     86BS3_BEGIN_TEXT16_FARSTUBS
     87BS3_PROC_BEGIN_MODE Bs3SwitchToPP32_16, BS3_PBC_FAR
     88        inc         bp
     89        push        bp
     90        mov         bp, sp
     91
     92        ; Call the real thing.
     93        call        TMPL_NM(Bs3SwitchToPP32_16)
     94
     95 %if BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     96        ; Jmp to  common code for the tedious conversion.
     97        BS3_EXTERN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     98        jmp         Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
     99 %else
     100        pop         bp
     101        dec         bp
     102        retf
     103 %endif
     104BS3_PROC_END_MODE   Bs3SwitchToPP32_16
     105%endif
     106
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToPPV86.asm

    r60019 r60554  
    4040; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    4141;
    42 BS3_PROC_BEGIN_MODE Bs3SwitchToPPV86
     42BS3_PROC_BEGIN_MODE Bs3SwitchToPPV86, BS3_PBC_NEAR
    4343%if TMPL_MODE == BS3_MODE_PPV86
    4444        ret
     
    6666BS3_PROC_END_MODE   Bs3SwitchToPPV86
    6767
     68
     69%if TMPL_BITS == 16
     70;;
     71; Custom far stub.
     72BS3_BEGIN_TEXT16_FARSTUBS
     73BS3_PROC_BEGIN_MODE Bs3SwitchToPPV86, BS3_PBC_FAR
     74        inc         bp
     75        push        bp
     76        mov         bp, sp
     77
     78        ; Call the real thing.
     79        call        TMPL_NM(Bs3SwitchToPPV86)
     80
     81 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     82        ; Jmp to  common code for the tedious conversion.
     83        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     84        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     85 %else
     86        pop         bp
     87        dec         bp
     88        retf
     89 %endif
     90BS3_PROC_END_MODE   Bs3SwitchToPPV86
     91%endif
     92
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToRM.asm

    r60439 r60554  
    6565; @remarks  Does not require 20h of parameter scratch space in 64-bit mode.
    6666;
    67 BS3_PROC_BEGIN_MODE Bs3SwitchToRM
     67BS3_PROC_BEGIN_MODE Bs3SwitchToRM, BS3_PBC_NEAR
    6868%ifdef TMPL_RM
    6969        push    ax
     
    338338BS3_PROC_END_MODE   Bs3SwitchToRM
    339339
     340
     341%if TMPL_BITS == 16
     342;;
     343; Custom far stub.
     344BS3_BEGIN_TEXT16_FARSTUBS
     345BS3_PROC_BEGIN_MODE Bs3SwitchToRM, BS3_PBC_FAR
     346        inc         bp
     347        push        bp
     348        mov         bp, sp
     349
     350        ; Call the real thing.
     351        call        TMPL_NM(Bs3SwitchToRM)
     352
     353 %if !BS3_MODE_IS_RM_OR_V86(TMPL_MODE)
     354        ; Jmp to  common code for the tedious conversion.
     355        BS3_EXTERN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     356        jmp         Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
     357 %else
     358        pop         bp
     359        dec         bp
     360        retf
     361 %endif
     362BS3_PROC_END_MODE   Bs3SwitchToRM
     363%endif
     364
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModes.c

    r60539 r60554  
    2525 */
    2626
     27/** @todo get this mess into the RM segment! */
     28
    2729
    2830/*********************************************************************************************************************************
     
    6163*   Assembly Symbols                                                                                                             *
    6264*********************************************************************************************************************************/
    63 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInRM)(uint32_t uCallbackFarPtr);
    64 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE16)(uint32_t uCallbackFarPtr);
    65 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE16_32)(uint32_t uFlatAddrCallback);
    66 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE16_V86)(uint32_t uCallbackFarPtr);
    67 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE32)(uint32_t uFlatAddrCallback);
    68 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE32_16)(uint32_t uCallbackFarPtr);
    69 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPEV86)(uint32_t uCallbackFarPtr);
    70 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP16)(uint32_t uCallbackFarPtr);
    71 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP16_32)(uint32_t uFlatAddrCallback);
    72 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP16_V86)(uint32_t uCallbackFarPtr);
    73 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP32)(uint32_t uFlatAddrCallback);
    74 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP32_16)(uint32_t uCallbackFarPtr);
    75 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPPV86)(uint32_t uCallbackFarPtr);
    76 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE16)(uint32_t uCallbackFarPtr);
    77 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE16_32)(uint32_t uFlatAddrCallback);
    78 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE16_V86)(uint32_t uCallbackFarPtr);
    79 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE32)(uint32_t uFlatAddrCallback);
    80 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE32_16)(uint32_t uCallbackFarPtr);
    81 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAEV86)(uint32_t uCallbackFarPtr);
    82 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInLM16)(uint32_t uCallbackFarPtr);
    83 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInLM32)(uint32_t uFlatAddrCallback);
    84 BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInLM64)(uint32_t uFlatAddrCallback);
     65BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInRM)(uint32_t uCallbackFarPtr);
     66BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPE16)(uint32_t uCallbackFarPtr);
     67BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPE16_32)(uint32_t uFlatAddrCallback);
     68BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPE16_V86)(uint32_t uCallbackFarPtr);
     69BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPE32)(uint32_t uFlatAddrCallback);
     70BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPE32_16)(uint32_t uCallbackFarPtr);
     71BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPEV86)(uint32_t uCallbackFarPtr);
     72BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPP16)(uint32_t uCallbackFarPtr);
     73BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPP16_32)(uint32_t uFlatAddrCallback);
     74BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPP16_V86)(uint32_t uCallbackFarPtr);
     75BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPP32)(uint32_t uFlatAddrCallback);
     76BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPP32_16)(uint32_t uCallbackFarPtr);
     77BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPPV86)(uint32_t uCallbackFarPtr);
     78BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPAE16)(uint32_t uCallbackFarPtr);
     79BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPAE16_32)(uint32_t uFlatAddrCallback);
     80BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPAE16_V86)(uint32_t uCallbackFarPtr);
     81BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPAE32)(uint32_t uFlatAddrCallback);
     82BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPAE32_16)(uint32_t uCallbackFarPtr);
     83BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInPAEV86)(uint32_t uCallbackFarPtr);
     84BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInLM16)(uint32_t uCallbackFarPtr);
     85BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInLM32)(uint32_t uFlatAddrCallback);
     86BS3_DECL_FAR(uint8_t) TMPL_FAR_NM(Bs3TestCallDoerInLM64)(uint32_t uFlatAddrCallback);
    8587
    8688
     
    174176}
    175177
    176 BS3_DECL(void) TMPL_NM(Bs3TestDoModes)(PCBS3TESTMODEENTRY paEntries, size_t cEntries)
     178
     179BS3_MODE_DEF(void, Bs3TestDoModes,(PCBS3TESTMODEENTRY paEntries, size_t cEntries))
    177180{
    178181    bool const      fVerbose         = true;
     
    215218        {
    216219            PRE_DO_CALL(g_szBs3ModeName_rm);
    217             bErrNo = TMPL_NM(Bs3TestCallDoerInRM)(CONV_TO_RM_FAR16(paEntries[i].pfnDoRM));
     220            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInRM)(CONV_TO_RM_FAR16(paEntries[i].pfnDoRM));
    218221            CHECK_RESULT(g_szBs3ModeName_rm);
    219222        }
     
    232235        {
    233236            PRE_DO_CALL(g_szBs3ModeName_pe16);
    234             bErrNo = TMPL_NM(Bs3TestCallDoerInPE16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPE16));
     237            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPE16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPE16));
    235238            CHECK_RESULT(g_szBs3ModeName_pe16);
    236239        }
     
    245248        {
    246249            PRE_DO_CALL(g_szBs3ModeName_pe16_32);
    247             bErrNo = TMPL_NM(Bs3TestCallDoerInPE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPE16_32));
     250            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPE16_32));
    248251            CHECK_RESULT(g_szBs3ModeName_pe16_32);
    249252        }
     
    252255        {
    253256            PRE_DO_CALL(g_szBs3ModeName_pe16_v86);
    254             bErrNo = TMPL_NM(Bs3TestCallDoerInPE16_V86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPE16_V86));
     257            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPE16_V86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPE16_V86));
    255258            CHECK_RESULT(g_szBs3ModeName_pe16_v86);
    256259        }
     
    259262        {
    260263            PRE_DO_CALL(g_szBs3ModeName_pe32);
    261             bErrNo = TMPL_NM(Bs3TestCallDoerInPE32)(CONV_TO_FLAT(paEntries[i].pfnDoPE32));
     264            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPE32)(CONV_TO_FLAT(paEntries[i].pfnDoPE32));
    262265            CHECK_RESULT(g_szBs3ModeName_pe32);
    263266        }
     
    266269        {
    267270            PRE_DO_CALL(g_szBs3ModeName_pe32_16);
    268             bErrNo = TMPL_NM(Bs3TestCallDoerInPE32_16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPE32_16));
     271            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPE32_16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPE32_16));
    269272            CHECK_RESULT(g_szBs3ModeName_pe32_16);
    270273        }
     
    273276        {
    274277            PRE_DO_CALL(g_szBs3ModeName_pev86);
    275             bErrNo = TMPL_NM(Bs3TestCallDoerInPEV86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPEV86));
     278            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPEV86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPEV86));
    276279            CHECK_RESULT(g_szBs3ModeName_pev86);
    277280        }
     
    283286        {
    284287            PRE_DO_CALL(g_szBs3ModeName_pp16);
    285             bErrNo = TMPL_NM(Bs3TestCallDoerInPP16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPP16));
     288            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPP16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPP16));
    286289            CHECK_RESULT(g_szBs3ModeName_pp16);
    287290        }
     
    290293        {
    291294            PRE_DO_CALL(g_szBs3ModeName_pp16_32);
    292             bErrNo = TMPL_NM(Bs3TestCallDoerInPP16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPP16_32));
     295            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPP16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPP16_32));
    293296            CHECK_RESULT(g_szBs3ModeName_pp16_32);
    294297        }
     
    297300        {
    298301            PRE_DO_CALL(g_szBs3ModeName_pp16_v86);
    299             bErrNo = TMPL_NM(Bs3TestCallDoerInPP16_V86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPP16_V86));
     302            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPP16_V86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPP16_V86));
    300303            CHECK_RESULT(g_szBs3ModeName_pp16_v86);
    301304        }
     
    304307        {
    305308            PRE_DO_CALL(g_szBs3ModeName_pp32);
    306             bErrNo = TMPL_NM(Bs3TestCallDoerInPP32)(CONV_TO_FLAT(paEntries[i].pfnDoPP32));
     309            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPP32)(CONV_TO_FLAT(paEntries[i].pfnDoPP32));
    307310            CHECK_RESULT(g_szBs3ModeName_pp32);
    308311        }
     
    311314        {
    312315            PRE_DO_CALL(g_szBs3ModeName_pp32_16);
    313             bErrNo = TMPL_NM(Bs3TestCallDoerInPP32_16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPP32_16));
     316            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPP32_16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPP32_16));
    314317            CHECK_RESULT(g_szBs3ModeName_pp32_16);
    315318        }
     
    318321        {
    319322            PRE_DO_CALL(g_szBs3ModeName_ppv86);
    320             bErrNo = TMPL_NM(Bs3TestCallDoerInPPV86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPPV86));
     323            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPPV86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPPV86));
    321324            CHECK_RESULT(g_szBs3ModeName_ppv86);
    322325        }
     
    335338        {
    336339            PRE_DO_CALL(g_szBs3ModeName_pae16);
    337             bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPAE16));
     340            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPAE16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPAE16));
    338341            CHECK_RESULT(g_szBs3ModeName_pae16);
    339342        }
     
    342345        {
    343346            PRE_DO_CALL(g_szBs3ModeName_pae16_32);
    344             bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE16_32));
     347            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPAE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE16_32));
    345348            CHECK_RESULT(g_szBs3ModeName_pae16_32);
    346349        }
     
    349352        {
    350353            PRE_DO_CALL(g_szBs3ModeName_pae16_v86);
    351             bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16_V86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPAE16_V86));
     354            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPAE16_V86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPAE16_V86));
    352355            CHECK_RESULT(g_szBs3ModeName_pae16_v86);
    353356        }
     
    356359        {
    357360            PRE_DO_CALL(g_szBs3ModeName_pae32);
    358             bErrNo = TMPL_NM(Bs3TestCallDoerInPAE32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE32));
     361            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPAE32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE32));
    359362            CHECK_RESULT(g_szBs3ModeName_pae32);
    360363        }
     
    363366        {
    364367            PRE_DO_CALL(g_szBs3ModeName_pae32_16);
    365             bErrNo = TMPL_NM(Bs3TestCallDoerInPAE32_16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPAE32_16));
     368            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPAE32_16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoPAE32_16));
    366369            CHECK_RESULT(g_szBs3ModeName_pae32_16);
    367370        }
     
    370373        {
    371374            PRE_DO_CALL(g_szBs3ModeName_paev86);
    372             bErrNo = TMPL_NM(Bs3TestCallDoerInPAEV86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPAEV86));
     375            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInPAEV86)(CONV_TO_RM_FAR16(paEntries[i].pfnDoPAEV86));
    373376            CHECK_RESULT(g_szBs3ModeName_paev86);
    374377        }
     
    387390        {
    388391            PRE_DO_CALL(g_szBs3ModeName_lm16);
    389             bErrNo = TMPL_NM(Bs3TestCallDoerInLM16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoLM16));
     392            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInLM16)(CONV_TO_PROT_FAR16(paEntries[i].pfnDoLM16));
    390393            CHECK_RESULT(g_szBs3ModeName_lm16);
    391394        }
     
    394397        {
    395398            PRE_DO_CALL(g_szBs3ModeName_lm32);
    396             bErrNo = TMPL_NM(Bs3TestCallDoerInLM32)(CONV_TO_FLAT(paEntries[i].pfnDoLM32));
     399            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInLM32)(CONV_TO_FLAT(paEntries[i].pfnDoLM32));
    397400            CHECK_RESULT(g_szBs3ModeName_lm32);
    398401        }
     
    401404        {
    402405            PRE_DO_CALL(g_szBs3ModeName_lm64);
    403             bErrNo = TMPL_NM(Bs3TestCallDoerInLM64)(CONV_TO_FLAT(paEntries[i].pfnDoLM64));
     406            bErrNo = TMPL_FAR_NM(Bs3TestCallDoerInLM64)(CONV_TO_FLAT(paEntries[i].pfnDoLM64));
    404407            CHECK_RESULT(g_szBs3ModeName_lm64);
    405408        }
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesHlp.asm

    r60539 r60554  
    154154        xPOPF
    155155        pop     xBP
     156%if TMPL_BITS == 16
     157        retf
     158%else
    156159        ret
     160%endif
    157161
    158162;
     
    213217; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInRM(uint16_t offBs3Text16);
    214218; @uses     rax
    215 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInRM
    216         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    217         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    218 BS3_BEGIN_TEXT16
    219 BS3_SET_BITS TMPL_BITS
    220 .doit:
    221         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    222         mov     dx, [xBP + xCB*2 + 2]
     219BS3_PROC_BEGIN_MODE Bs3TestCallDoerInRM, BS3_PBC_FAR
     220        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     221        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     222BS3_BEGIN_TEXT16
     223BS3_SET_BITS TMPL_BITS
     224.doit:
     225        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     226        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    223227
    224228        ; Mode switch, make the call, switch back.
     
    254258; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE16(uint16_t offBs3Text16);
    255259; @uses     rax
    256 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16
    257         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    258         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    259 BS3_BEGIN_TEXT16
    260 BS3_SET_BITS TMPL_BITS
    261 .doit:
    262         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    263         mov     dx, [xBP + xCB*2 + 2]
     260BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16, BS3_PBC_FAR
     261        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     262        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     263BS3_BEGIN_TEXT16
     264BS3_SET_BITS TMPL_BITS
     265.doit:
     266        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     267        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    264268
    265269        ; Mode switch, make the call, switch back.
     
    287291; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE16_32(uint16_t offBs3Text16);
    288292; @uses     rax
    289 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16_32
    290         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    291         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    292 .doit:
    293         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     293BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16_32, BS3_PBC_FAR
     294        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     295        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     296.doit:
     297        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    294298
    295299        ; Mode switch, make the call, switch back.
     
    312316; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE16_V86(uint16_t offBs3Text16);
    313317; @uses     rax
    314 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16_V86
    315         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    316         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    317 .doit:
    318         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    319         mov     dx, [xBP + xCB*2 + 2]
     318BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16_V86, BS3_PBC_FAR
     319        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     320        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     321.doit:
     322        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     323        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    320324
    321325        ; Mode switch, make the call, switch back.
     
    343347; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE32(uint16_t offBs3Text16);
    344348; @uses     rax
    345 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE32
    346         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    347         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    348 .doit:
    349         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     349BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE32, BS3_PBC_FAR
     350        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     351        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     352.doit:
     353        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    350354
    351355        ; Mode switch, make the call, switch back.
     
    368372; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE32_16(uint16_t offBs3Text16);
    369373; @uses     rax
    370 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE32_16
    371         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    372         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    373 BS3_BEGIN_TEXT16
    374 BS3_SET_BITS TMPL_BITS
    375 .doit:
    376         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    377         mov     dx, [xBP + xCB*2 + 2]
     374BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE32_16, BS3_PBC_FAR
     375        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     376        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     377BS3_BEGIN_TEXT16
     378BS3_SET_BITS TMPL_BITS
     379.doit:
     380        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     381        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    378382
    379383        ; Mode switch, make the call, switch back.
     
    402406; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPEV86(uint16_t offBs3Text16);
    403407; @uses     rax
    404 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPEV86
    405         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    406         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    407 BS3_BEGIN_TEXT16
    408 BS3_SET_BITS TMPL_BITS
    409 .doit:
    410         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    411         mov     dx, [xBP + xCB*2 + 2]
     408BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPEV86, BS3_PBC_FAR
     409        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     410        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     411BS3_BEGIN_TEXT16
     412BS3_SET_BITS TMPL_BITS
     413.doit:
     414        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     415        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    412416
    413417        ; Mode switch, make the call, switch back.
     
    442446; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP16(uint16_t offBs3Text16);
    443447; @uses     rax
    444 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16
    445         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    446         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    447 BS3_BEGIN_TEXT16
    448 BS3_SET_BITS TMPL_BITS
    449 .doit:
    450         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    451         mov     dx, [xBP + xCB*2 + 2]
     448BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16, BS3_PBC_FAR
     449        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     450        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     451BS3_BEGIN_TEXT16
     452BS3_SET_BITS TMPL_BITS
     453.doit:
     454        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     455        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    452456
    453457        ; Mode switch, make the call, switch back.
     
    476480; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP16_32(uint16_t offBs3Text16);
    477481; @uses     rax
    478 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16_32
    479         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    480         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    481 .doit:
    482         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     482BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16_32, BS3_PBC_FAR
     483        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     484        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     485.doit:
     486        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    483487
    484488        ; Mode switch, make the call, switch back.
     
    501505; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP16_V86(uint16_t offBs3Text16);
    502506; @uses     rax
    503 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16_V86
    504         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    505         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    506 .doit:
    507         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    508         mov     dx, [xBP + xCB*2 + 2]
     507BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16_V86, BS3_PBC_FAR
     508        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     509        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     510.doit:
     511        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     512        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    509513
    510514        ; Mode switch, make the call, switch back.
     
    532536; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP32(uint16_t offBs3Text16);
    533537; @uses     rax
    534 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP32
    535         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    536         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    537 .doit:
    538         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     538BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP32, BS3_PBC_FAR
     539        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     540        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     541.doit:
     542        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    539543
    540544        ; Mode switch, make the call, switch back.
     
    557561; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP32_16(uint16_t offBs3Text16);
    558562; @uses     rax
    559 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP32_16
    560         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    561         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    562 BS3_BEGIN_TEXT16
    563 BS3_SET_BITS TMPL_BITS
    564 .doit:
    565         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    566         mov     dx, [xBP + xCB*2 + 2]
     563BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP32_16, BS3_PBC_FAR
     564        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     565        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     566BS3_BEGIN_TEXT16
     567BS3_SET_BITS TMPL_BITS
     568.doit:
     569        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     570        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    567571
    568572        ; Mode switch, make the call, switch back.
     
    591595; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPPV86(uint16_t offBs3Text16);
    592596; @uses     rax
    593 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPPV86
    594         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    595         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    596 BS3_BEGIN_TEXT16
    597 BS3_SET_BITS TMPL_BITS
    598 .doit:
    599         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    600         mov     dx, [xBP + xCB*2 + 2]
     597BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPPV86, BS3_PBC_FAR
     598        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     599        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     600BS3_BEGIN_TEXT16
     601BS3_SET_BITS TMPL_BITS
     602.doit:
     603        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     604        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    601605
    602606        ; Mode switch, make the call, switch back.
     
    631635; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE16(uint16_t offBs3Text16);
    632636; @uses     rax
    633 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16
    634         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    635         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    636 BS3_BEGIN_TEXT16
    637 BS3_SET_BITS TMPL_BITS
    638 .doit:
    639         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    640         mov     dx, [xBP + xCB*2 + 2]
     637BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16, BS3_PBC_FAR
     638        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     639        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     640BS3_BEGIN_TEXT16
     641BS3_SET_BITS TMPL_BITS
     642.doit:
     643        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     644        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    641645
    642646        ; Mode switch, make the call, switch back.
     
    665669; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE16_32(uint16_t offBs3Text16);
    666670; @uses     rax
    667 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16_32
    668         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    669         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    670 .doit:
    671         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     671BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16_32, BS3_PBC_FAR
     672        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     673        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     674.doit:
     675        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    672676
    673677        ; Mode switch, make the call, switch back.
     
    690694; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE16_V86(uint16_t offBs3Text16);
    691695; @uses     rax
    692 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16_V86
    693         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    694         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    695 .doit:
    696         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    697         mov     dx, [xBP + xCB*2 + 2]
     696BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16_V86, BS3_PBC_FAR
     697        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     698        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     699.doit:
     700        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     701        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    698702
    699703        ; Mode switch, make the call, switch back.
     
    721725; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE32(uint16_t offBs3Text16);
    722726; @uses     rax
    723 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE32
    724         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    725         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    726 .doit:
    727         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     727BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE32, BS3_PBC_FAR
     728        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     729        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     730.doit:
     731        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    728732
    729733        ; Mode switch, make the call, switch back.
     
    746750; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE32_16(uint16_t offBs3Text16);
    747751; @uses     rax
    748 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE32_16
    749         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    750         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    751 BS3_BEGIN_TEXT16
    752 BS3_SET_BITS TMPL_BITS
    753 .doit:
    754         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    755         mov     dx, [xBP + xCB*2 + 2]
     752BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE32_16, BS3_PBC_FAR
     753        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     754        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     755BS3_BEGIN_TEXT16
     756BS3_SET_BITS TMPL_BITS
     757.doit:
     758        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     759        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    756760
    757761        ; Mode switch, make the call, switch back.
     
    780784; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAEV86(uint16_t offBs3Text16);
    781785; @uses     rax
    782 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAEV86
    783         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    784         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    785 BS3_BEGIN_TEXT16
    786 BS3_SET_BITS TMPL_BITS
    787 .doit:
    788         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    789         mov     dx, [xBP + xCB*2 + 2]
     786BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAEV86, BS3_PBC_FAR
     787        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     788        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     789BS3_BEGIN_TEXT16
     790BS3_SET_BITS TMPL_BITS
     791.doit:
     792        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     793        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    790794
    791795        ; Mode switch, make the call, switch back.
     
    820824; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInLM16(uint16_t offBs3Text16);
    821825; @uses     rax
    822 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM16
    823         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    824         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    825 BS3_BEGIN_TEXT16
    826 BS3_SET_BITS TMPL_BITS
    827 .doit:
    828         mov     ax, [xBP + xCB*2]       ; Load far function pointer.
    829         mov     dx, [xBP + xCB*2 + 2]
     826BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM16, BS3_PBC_FAR
     827        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     828        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     829BS3_BEGIN_TEXT16
     830BS3_SET_BITS TMPL_BITS
     831.doit:
     832        mov     ax, [xBP + xCB + cbCurRetAddr]      ; Load far function pointer.
     833        mov     dx, [xBP + xCB + cbCurRetAddr + 2]
    830834
    831835        ; Mode switch, make the call, switch back.
     
    854858; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInLM32(uint16_t offBs3Text16);
    855859; @uses     rax
    856 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM32
    857         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    858         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    859 .doit:
    860         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     860BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM32, BS3_PBC_FAR
     861        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     862        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     863.doit:
     864        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    861865
    862866        ; Mode switch, make the call, switch back.
     
    880884; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInLM64(uint16_t offBs3Text16);
    881885; @uses     rax
    882 BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM64
    883         BS3_LEA_MOV_WRT_RIP(xAX, .doit)
    884         jmp     TMPL_NM(bs3TestCallDoerPrologue)
    885 .doit:
    886         mov     eax, [xBP + xCB*2]      ; Load function pointer.
     886BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM64, BS3_PBC_FAR
     887        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     888        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     889.doit:
     890        mov     eax, [xBP + xCB + cbCurRetAddr]      ; Load function pointer.
    887891
    888892        ; Mode switch, make the call, switch back.
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TrapInit.c

    r60194 r60554  
    3232
    3333
    34 BS3_DECL(void) TMPL_NM(Bs3TrapInit)(void)
     34BS3_MODE_DEF(void, Bs3TrapInit,(void))
    3535{
    3636#if BS3_MODE_IS_16BIT_SYS(TMPL_MODE)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TrapSystemCallHandler.asm

    r60439 r60554  
    6767;       CPUs too!
    6868;
    69 BS3_PROC_BEGIN_MODE Bs3TrapSystemCallHandler
     69BS3_PROC_BEGIN_MODE Bs3TrapSystemCallHandler, BS3_PBC_NEAR ; Near because we'll probably only ever need this from BS3TEXT16.
    7070        ;
    7171        ; This prologue is kind of complicated because of 80286 and older CPUs
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h

    r60539 r60554  
    6464#define Bs3SelFar32ToFlat32                     BS3_CMN_MANGLER(Bs3SelFar32ToFlat32)
    6565#define Bs3SelProtFar32ToFlat32                 BS3_CMN_MANGLER(Bs3SelProtFar32ToFlat32)
     66#define Bs3SelProtModeCodeToRealMode            BS3_CMN_MANGLER(Bs3SelProtModeCodeToRealMode)
    6667#define Bs3SelRealModeCodeToProtMode            BS3_CMN_MANGLER(Bs3SelRealModeCodeToProtMode)
    6768#define Bs3Shutdown                             BS3_CMN_MANGLER(Bs3Shutdown)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h

    r60539 r60554  
    6464#undef Bs3SelFar32ToFlat32
    6565#undef Bs3SelProtFar32ToFlat32
     66#undef Bs3SelProtModeCodeToRealMode
    6667#undef Bs3SelRealModeCodeToProtMode
    6768#undef Bs3Shutdown
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-footer.h

    r60019 r60554  
    7272
    7373#undef TMPL_NM
    74 #undef TMPL_NM_CMN
     74#undef TMPL_FAR_NM
    7575#undef TMPL_MODE
    7676#undef TMPL_MODE_STR
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-footer.mac

    r59977 r60554  
    8383%undef TMPL_NM
    8484%undef TMPL_NM_U
     85%undef TMPL_FAR_NM
    8586%undef BS3_CMN_NM
    8687%undef TMPL_UNDESCORE
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.h

    r60527 r60554  
    107107 *
    108108 * @param   Name        The function or variable name to mangle.
     109 * @sa      #TMPL_FAR_NM, #BS3_CMN_NM, #BS3_CMN_FAR_NM
    109110 */
    110111# define TMPL_NM(Name)  RT_CONCAT(Name,_mode)
     112
     113/** @def TMPL_FAR_NM
     114 * Name mangling macro for the current mode into a far function name.
     115 *
     116 * In 32-bit and 64-bit code this does not differ from #TMPL_NM.
     117 *
     118 * Example: TMPL_FAR_NM(PrintChr)
     119 *
     120 * @param   Name        The function or variable name to mangle.
     121 * @sa      #TMPL_NM, #BS3_CMN_FAR_NM, #BS3_CMN_NM
     122 */
     123# define TMPL_FAR_NM(Name)  RT_CONCAT3(Name,_mode,_far)
    111124
    112125/** @def TMPL_MODE_STR
     
    473486
    474487
     488#if TMPL_MODE & (BS3_MODE_CODE_16 | BS3_MODE_CODE_V86)
     489# define TMPL_FAR_NM(Name)      RT_CONCAT3(TMPL_NM(Name),_f,ar) /* _far and far may be #defined already. */
     490#else
     491# define TMPL_FAR_NM(Name)      TMPL_NM(Name)
     492#endif
     493
     494
     495/** @def BS3_MODE_DEF
     496 * Macro for defining a mode specific function.
     497 *
     498 * This makes 16-bit mode functions far, while 32-bit and 64-bit are near.
     499 * You need to update the make file to generate near->far wrappers in most
     500 * cases.
     501 *
     502 * @param   a_RetType   The return type.
     503 * @param   a_Name      The function basename.
     504 * @param   a_Params    The parameter list (in parentheses).
     505 *
     506 * @sa      BS3_MODE_PROTO
     507 */
     508#if ARCH_BITS == 16
     509# define BS3_MODE_DEF(a_RetType, a_Name, a_Params) BS3_DECL_FAR(a_RetType) TMPL_FAR_NM(a_Name) a_Params
     510#else
     511# define BS3_MODE_DEF(a_RetType, a_Name, a_Params) BS3_DECL_NEAR(a_RetType)    TMPL_NM(a_Name) a_Params
     512#endif
     513
     514
     515
    475516#ifndef TMPL_MODE_STR
    476517# error "internal error"
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac

    r60439 r60554  
    388388%endif
    389389
     390; TMPL_FAR_NM
     391%if TMPL_MODE & (BS3_MODE_CODE_16 | BS3_MODE_CODE_V86)
     392 %define TMPL_FAR_NM(Name)      TMPL_NM(Name) %+ _far
     393%else
     394 %define TMPL_FAR_NM(Name)      TMPL_NM(Name)
     395%endif
     396
    390397
    391398;; @def TMPL_WRT_FLAT
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r60539 r60554  
    15281528 * @param   uRealSeg        Real mode code segment.
    15291529 */
    1530 BS3_CMN_PROTO(uint16_t, Bs3SelRealModeCodeToProtMode,(uint16_t uRealSel), false);
     1530BS3_CMN_PROTO(uint16_t, Bs3SelRealModeCodeToProtMode,(uint16_t uRealSeg), false);
     1531
     1532/**
     1533 * Converts a real mode code segment to a protected mode code segment selector.
     1534 *
     1535 * @returns protected mode segment selector.
     1536 * @param   uProtSel        Real mode code segment.
     1537 */
     1538BS3_CMN_PROTO(uint16_t, Bs3SelProtModeCodeToRealMode,(uint16_t uProtSel), false);
    15311539
    15321540/**
     
    25202528
    25212529
    2522 /**
     2530/** @def BS3_MODE_PROTO
    25232531 * Macro for reducing typing.
    25242532 *
    25252533 * Doxygen knows how to expand this, well, kind of.
    2526  */
    2527 #define BS3_MODE_EXPAND_PROTOTYPES(a_RetType, a_BaseFnNm, a_Parameters) \
    2528     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_rm)       a_Parameters; \
    2529     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_rm_far)   a_Parameters; \
    2530     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pe16)     a_Parameters; \
    2531     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pe16_32)  a_Parameters; \
    2532     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pe16_v86) a_Parameters; \
    2533     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pe32)     a_Parameters; \
    2534     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pe32_16)  a_Parameters; \
    2535     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pev86)    a_Parameters; \
    2536     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pp16)     a_Parameters; \
    2537     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pp16_32)  a_Parameters; \
    2538     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pp16_v86) a_Parameters; \
    2539     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pp32)     a_Parameters; \
    2540     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pp32_16)  a_Parameters; \
    2541     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_ppv86)    a_Parameters; \
    2542     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pae16)    a_Parameters; \
    2543     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pae16_32) a_Parameters; \
    2544     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pae16_v86)a_Parameters; \
    2545     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pae32)    a_Parameters; \
    2546     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_pae32_16) a_Parameters; \
    2547     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_paev86)   a_Parameters; \
    2548     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_lm16)     a_Parameters; \
    2549     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_lm32)     a_Parameters; \
    2550     BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_BaseFnNm,_lm64)     a_Parameters
     2534 *
     2535 * @param   a_RetType   The return type.
     2536 * @param   a_Name      The function basename.
     2537 * @param   a_Params    The parameter list (in parentheses).
     2538 * @param   a_fAutoStub Whether to autogenerate a 16-bit near -> 16-bit far stub
     2539 *                      function. Either 'true' for stub or 'false' for no stub.
     2540 */
     2541#define BS3_MODE_PROTO(a_RetType, a_Name, a_Params, a_fAutoStub) \
     2542    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_rm)           a_Params; \
     2543    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pe16)         a_Params; \
     2544    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pe16_32)      a_Params; \
     2545    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pe16_v86)     a_Params; \
     2546    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pe32)         a_Params; \
     2547    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pe32_16)      a_Params; \
     2548    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pev86)        a_Params; \
     2549    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pp16)         a_Params; \
     2550    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pp16_32)      a_Params; \
     2551    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pp16_v86)     a_Params; \
     2552    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pp32)         a_Params; \
     2553    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pp32_16)      a_Params; \
     2554    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_ppv86)        a_Params; \
     2555    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pae16)        a_Params; \
     2556    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pae16_32)     a_Params; \
     2557    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pae16_v86)    a_Params; \
     2558    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pae32)        a_Params; \
     2559    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_pae32_16)     a_Params; \
     2560    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_paev86)       a_Params; \
     2561    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_lm16)         a_Params; \
     2562    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_lm32)         a_Params; \
     2563    BS3_DECL_NEAR(a_RetType) RT_CONCAT(a_Name,_lm64)         a_Params; \
     2564    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_rm_far)       a_Params; \
     2565    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pe16_far)     a_Params; \
     2566    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pe16_v86_far) a_Params; \
     2567    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pe32_16_far)  a_Params; \
     2568    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pev86_far)    a_Params; \
     2569    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pp16_far)     a_Params; \
     2570    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pp16_v86_far) a_Params; \
     2571    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pp32_16_far)  a_Params; \
     2572    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_ppv86_far)    a_Params; \
     2573    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pae16_far)    a_Params; \
     2574    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pae16_v86_far)a_Params; \
     2575    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_pae32_16_far) a_Params; \
     2576    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_paev86_far)   a_Params; \
     2577    BS3_DECL_FAR(a_RetType)  RT_CONCAT(a_Name,_lm16_far)     a_Params
    25512578
    25522579/**
     
    25972624 *          capabilities.
    25982625 */
    2599 BS3_MODE_EXPAND_PROTOTYPES(uint8_t, Bs3CpuDetect,(void));
     2626BS3_MODE_PROTO(uint8_t, Bs3CpuDetect,(void), false);
    26002627
    26012628/** @name BS3CPU_XXX - CPU detected by BS3CpuDetect_c16() and friends.
     
    26332660 * Calls the appropriate Bs3Trap16Init, Bs3Trap32Init or Bs3Trap64Init function.
    26342661 */
    2635 BS3_MODE_EXPAND_PROTOTYPES(void, Bs3TrapInit,(void));
     2662BS3_MODE_PROTO(void, Bs3TrapInit,(void), true);
    26362663
    26372664/**
     
    26412668 * @param   cEntries        The number of sub-test entries.
    26422669 */
    2643 BS3_MODE_EXPAND_PROTOTYPES(void, Bs3TestDoModes, (PCBS3TESTMODEENTRY paEntries, size_t cEntries));
     2670BS3_MODE_PROTO(void, Bs3TestDoModes,(PCBS3TESTMODEENTRY paEntries, size_t cEntries), true);
    26442671
    26452672
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac

    r60539 r60554  
    680680
    681681
    682 ;; @name BS3_PBC_XXX - For use as the 2nd parameter to BS3_PROC_BEGIN_CMN.
     682;; @name BS3_PBC_XXX - For use as the 2nd parameter to BS3_PROC_BEGIN_CMN and BS3_PROC_BEGIN_MODE.
    683683;; @{
    684 %define BS3_PBC_NEAR          0 ;;< Only near.
    685 %define BS3_PBC_FAR           1 ;;< Only far.
    686 %define BS3_PBC_HYBRID        2 ;;< Hybrid near/far procedure, trashing AX
    687 %define BS3_PBC_HYBRID_SAFE   3 ;;< Hybrid near/far procedure, no trashing but slower.
    688 %define BS3_PBC_HYBRID_0_ARGS 4 ;;< Hybrid near/far procedure, no parameters so separate far stub, no trashing, fast near calls.
     684%define BS3_PBC_NEAR          1 ;;< Only near.
     685%define BS3_PBC_FAR           2 ;;< Only far.
     686%define BS3_PBC_HYBRID        3 ;;< Hybrid near/far procedure, trashing AX
     687%define BS3_PBC_HYBRID_SAFE   4 ;;< Hybrid near/far procedure, no trashing but slower.
     688%define BS3_PBC_HYBRID_0_ARGS 5 ;;< Hybrid near/far procedure, no parameters so separate far stub, no trashing, fast near calls.
    689689;; @}
     690
     691;; Internal begin procedure macro.
     692;
     693; @param    1       The near name.
     694; @param    2       The far name
     695; @param    3       BS3_PBC_XXX.
     696%macro BS3_PROC_BEGIN_INT 3
     697 ;%warning "BS3_PROC_BEGIN_INT:" 1=%1 2=%2 3=%3
     698 %undef BS3_CUR_PROC_FLAGS
     699 %if __BITS__ == 16
     700  %if %3 == BS3_PBC_NEAR
     701   %xdefine BS3_CUR_PROC_FLAGS  BS3_PBC_NEAR
     702   %xdefine cbCurRetAddr        2
     703   BS3_PROC_BEGIN       %1
     704
     705  %elif %3 == BS3_PBC_FAR
     706   %xdefine BS3_CUR_PROC_FLAGS  BS3_PBC_FAR
     707   %xdefine cbCurRetAddr        4
     708   BS3_PROC_BEGIN       %2
     709
     710  %elif %3 == BS3_PBC_HYBRID
     711   %xdefine BS3_CUR_PROC_FLAGS  BS3_PBC_HYBRID
     712   %xdefine cbCurRetAddr        4
     713   BS3_GLOBAL_NAME_EX   %1, function, 3
     714        pop     ax
     715        push    cs
     716        push    ax
     717   BS3_PROC_BEGIN       %2
     718
     719  %elif %3 == BS3_PBC_HYBRID_SAFE
     720   %xdefine BS3_CUR_PROC_FLAGS  BS3_PBC_HYBRID_SAFE
     721   %xdefine cbCurRetAddr        4
     722   BS3_GLOBAL_NAME_EX   %1, function, 3
     723        extern  Bs3CreateHybridFarRet_c16
     724        call    Bs3CreateHybridFarRet_c16
     725   BS3_PROC_BEGIN       %2
     726
     727  %elif %3 == BS3_PBC_HYBRID_0_ARGS
     728   %xdefine BS3_CUR_PROC_FLAGS  BS3_PBC_NEAR
     729   %xdefine cbCurRetAddr        2
     730   %xdefine TMP_BEGIN_PREV_SEG  BS3_CUR_SEG_BEGIN_MACRO
     731
     732   BS3_BEGIN_TEXT16_FARSTUBS
     733   BS3_PROC_BEGIN       %2
     734        call    %1
     735        retf
     736   BS3_PROC_END         %2
     737
     738   TMP_BEGIN_PREV_SEG
     739   BS3_PROC_BEGIN       %1
     740   %undef  TMP_BEGIN_PREV_SEG
     741
     742  %else
     743   %error BS3_PROC_BEGIN_CMN parameter 2 value %3 is not recognized.
     744
     745   %xdefine BS3_CUR_PROC_FLAGS   BS3_PBC_NEAR
     746   %xdefine cbCurRetAddr         4
     747   BS3_PROC_BEGIN       %1
     748  %endif
     749 %else
     750  %xdefine BS3_CUR_PROC_FLAGS   BS3_PBC_NEAR
     751  %xdefine cbCurRetAddr         xCB
     752  BS3_PROC_BEGIN        %1
     753 %endif
     754%endmacro
     755
     756;; Internal end procedure macro
     757;
     758; @param    1       The near name.
     759; @param    2       The far name
     760;
     761%macro BS3_PROC_END_INT 2
     762 %if __BITS__ == 16
     763  %if BS3_CUR_PROC_FLAGS == BS3_PBC_NEAR
     764   BS3_PROC_END      %1
     765  %else
     766   BS3_PROC_END      %2
     767  %endif
     768 %else
     769  BS3_PROC_END       %1
     770 %endif
     771 %undef BS3_CUR_PROC_FLAGS
     772 %undef cbCurRetAddr
     773%endmacro
     774
    690775
    691776;; Convenience macro for defining common procedures.
    692777; This will emit both near and far 16-bit symbols according to parameter %2 (BS3_PBC_XXX).
    693778%macro BS3_PROC_BEGIN_CMN 2
    694  %undef BS3_CUR_PROC_FLAGS
    695  %if __BITS__ == 16
    696   %if %2 == BS3_PBC_NEAR
    697    %define BS3_CUR_PROC_FLAGS   BS3_PBC_NEAR
    698    %xdefine cbCurRetAddr        2
    699    BS3_PROC_BEGIN       BS3_CMN_NM(%1)
    700 
    701   %elif %2 == BS3_PBC_FAR
    702    %define BS3_CUR_PROC_FLAGS   BS3_PBC_FAR
    703    %xdefine cbCurRetAddr        4
    704    BS3_PROC_BEGIN       BS3_CMN_NM_FAR(%1)
    705 
    706   %elif %2 == BS3_PBC_HYBRID
    707    %define BS3_CUR_PROC_FLAGS   BS3_PBC_HYBRID
    708    %xdefine cbCurRetAddr        4
    709    BS3_GLOBAL_NAME_EX   BS3_CMN_NM(%1), function, 3
    710         pop     ax
    711         push    cs
    712         push    ax
    713    BS3_PROC_BEGIN       BS3_CMN_NM_FAR(%1)
    714 
    715   %elif %2 == BS3_PBC_HYBRID_SAFE
    716    %define BS3_CUR_PROC_FLAGS   BS3_PBC_HYBRID_SAFE
    717    %xdefine cbCurRetAddr        4
    718    BS3_GLOBAL_NAME_EX   BS3_CMN_NM(%1), function, 3
    719         extern  Bs3CreateHybridFarRet_c16
    720         call    Bs3CreateHybridFarRet_c16
    721    BS3_PROC_BEGIN       BS3_CMN_NM_FAR(%1)
    722 
    723   %elif %2 == BS3_PBC_HYBRID_0_ARGS
    724    %define BS3_CUR_PROC_FLAGS   BS3_PBC_NEAR
    725    %xdefine cbCurRetAddr        2
    726    %undef  TMP_BEGIN_PREV_SEG
    727    %xdefine TMP_BEGIN_PREV_SEG   BS3_CUR_SEG_BEGIN_MACRO
    728 
    729    BS3_BEGIN_TEXT16_FARSTUBS
    730    BS3_PROC_BEGIN       BS3_CMN_NM_FAR(%1)
    731         call    BS3_CMN_NM(%1)
    732         retf
    733    BS3_PROC_END         BS3_CMN_NM_FAR(%1)
    734 
    735    TMP_BEGIN_PREV_SEG
    736    BS3_PROC_BEGIN       BS3_CMN_NM(%1)
    737 
    738   %else
    739    %error BS3_PROC_BEGIN_CMN parameter 2 value %2 is not recognized.
    740 
    741    %define BS3_CUR_PROC_FLAGS    BS3_PBC_NEAR
    742    %xdefine cbCurRetAddr         4
    743    BS3_PROC_BEGIN       BS3_CMN_NM(%1)
    744   %endif
    745  %else
    746   %define BS3_CUR_PROC_FLAGS    BS3_PBC_NEAR
    747   %xdefine cbCurRetAddr         xCB
    748   BS3_PROC_BEGIN        BS3_CMN_NM(%1)
    749  %endif
     779 BS3_PROC_BEGIN_INT BS3_CMN_NM(%1), BS3_CMN_NM_FAR(%1), %2
    750780%endmacro
    751781
    752782;; Convenience macro for defining common procedures.
    753783%macro BS3_PROC_END_CMN 1
    754  %if __BITS__ == 16
    755   %if BS3_CUR_PROC_FLAGS == BS3_PBC_NEAR
    756    BS3_PROC_END      BS3_CMN_NM(%1)
    757   %else
    758    BS3_PROC_END      BS3_CMN_NM_FAR(%1)
    759   %endif
    760  %else
    761   BS3_PROC_END       BS3_CMN_NM(%1)
    762  %endif
    763  %undef cbCurRetAddr
    764 %endmacro
    765 
    766 ;; Does a far return in 16-bit code, near return in 32-bit and 64-bit.
    767 ; This is for use with BS3_PBC_XXX
    768 %macro BS3_HYBRID_RET 0-1
    769  %if __BITS__ == 16
    770   %if %0 > 0
    771    %if BS3_CUR_PROC_FLAGS == BS3_PBC_NEAR || BS3_CUR_PROC_FLAGS == BS3_PBC_HYBRID_0_ARGS
    772         ret    %1
    773    %else
    774         retf    %1
    775    %endif
    776   %else
    777    %if BS3_CUR_PROC_FLAGS == BS3_PBC_NEAR || BS3_CUR_PROC_FLAGS == BS3_PBC_HYBRID_0_ARGS
    778         ret
    779    %else
    780         retf
    781    %endif
    782   %endif
    783  %else
    784   %if BS3_CUR_PROC_FLAGS != BS3_PBC_NEAR
    785    %error Expected BS3_CUR_PROC_FLAGS to be BS3_PBC_NEAR in non-16-bit code.
    786   %endif
    787   %if %0 > 0
    788         ret     %1
    789   %else
    790         ret
    791   %endif
    792  %endif
     784 BS3_PROC_END_INT BS3_CMN_NM(%1), BS3_CMN_NM_FAR(%1)
    793785%endmacro
    794786
     
    828820%endmacro
    829821
     822
    830823;; Convenience macro for defining mode specific procedures.
    831 %macro BS3_PROC_BEGIN_MODE 1
    832  BS3_PROC_BEGIN     TMPL_NM(%1)
     824%macro BS3_PROC_BEGIN_MODE 2
     825 ;%warning "BS3_PROC_BEGIN_MODE: 1=" %1 "2=" %2
     826 BS3_PROC_BEGIN_INT TMPL_NM(%1), TMPL_FAR_NM(%1), %2
    833827%endmacro
    834828
    835829;; Convenience macro for defining mode specific procedures.
    836830%macro BS3_PROC_END_MODE 1
    837  BS3_PROC_END       TMPL_NM(%1)
     831 BS3_PROC_END_INT TMPL_NM(%1), TMPL_FAR_NM(%1)
     832%endmacro
     833
     834;; Does a far return in 16-bit code, near return in 32-bit and 64-bit.
     835; This is for use with BS3_PBC_XXX
     836%macro BS3_HYBRID_RET 0-1
     837 %if __BITS__ == 16
     838  %if %0 > 0
     839   %if BS3_CUR_PROC_FLAGS == BS3_PBC_NEAR || BS3_CUR_PROC_FLAGS == BS3_PBC_HYBRID_0_ARGS
     840        ret    %1
     841   %else
     842        retf    %1
     843   %endif
     844  %else
     845   %if BS3_CUR_PROC_FLAGS == BS3_PBC_NEAR || BS3_CUR_PROC_FLAGS == BS3_PBC_HYBRID_0_ARGS
     846        ret
     847   %else
     848        retf
     849   %endif
     850  %endif
     851 %else
     852  %if BS3_CUR_PROC_FLAGS != BS3_PBC_NEAR
     853   %error Expected BS3_CUR_PROC_FLAGS to be BS3_PBC_NEAR in non-16-bit code.
     854  %endif
     855  %if %0 > 0
     856        ret     %1
     857  %else
     858        ret
     859  %endif
     860 %endif
    838861%endmacro
    839862
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