VirtualBox

Changeset 60439 in vbox


Ignore:
Timestamp:
Apr 11, 2016 7:08:38 PM (8 years ago)
Author:
vboxsync
Message:

bs3kit: updates :-)

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 added
23 edited

Legend:

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

    r60319 r60439  
    5353# The bs3kit source directory.
    5454VBOX_PATH_BS3KIT_SRC = $(VBOX_PATH_VALIDATIONKIT_SRC)/bootsectors/bs3kit
     55
     56
     57# The 16-bit code & data segment classes.
     58if 1
     59BS3KIT_CLASS_CODE16 = CODE
     60BS3KIT_SEGNM_DATA16 =
     61BS3KIT_CLASS_DATA16 = DATA
     62BS3KIT_GRPNM_DATA16 = DGROUP
     63BS3KIT_CLASS_BSS16  = BSS
     64else
     65BS3KIT_CLASS_CODE16 = BS3CLASS16CODE
     66BS3KIT_SEGNM_DATA16 = BS3DATA16
     67BS3KIT_CLASS_DATA16 = FAR_DATA
     68BS3KIT_GRPNM_DATA16 = BS3DATA16_GROUP
     69BS3KIT_CLASS_BSS16  = ???
     70endif
     71
    5572
    5673# Dummy CP "linker" tool.
     
    425442#       -wx                    Maxium warning level.
    426443#       -zl                    Don't emit default library information.
    427 #       -zdp                   DS pegged to BS3DATA16_GROUP.
     444#       -zdp                   DS pegged to BS3DATA16_GROUP/DGROUP.
    428445#       -zu                    Assume SS != DS.
    429446#       -mc                    Compact memory model, far data, small code.
     
    453470TEMPLATE_VBoxBS3KitImg_ASTOOL       = VBoxNasm
    454471TEMPLATE_VBoxBS3KitImg_ASFLAGS      = -f obj -g $(BS3KIT_NASM_allow_64_bit) -w+orphan-labels
    455 TEMPLATE_VBoxBS3KitImg_ASDEFS       = ASM_FORMAT_OMF RT_NOINC_SEGMENTS __NASM__ ARCH_BITS=16 RT_ARCH_X86
     472TEMPLATE_VBoxBS3KitImg_ASDEFS       = ASM_FORMAT_OMF RT_NOINC_SEGMENTS __NASM__ ARCH_BITS=16 RT_ARCH_X86 \
     473        BS3CLASS16CODE=$(BS3KIT_CLASS_CODE16) BS3KIT_CLASS_DATA16=$(BS3KIT_CLASS_DATA16) \
     474         BS3KIT_GRPNM_DATA16=$(BS3KIT_GRPNM_DATA16) BS3KIT_CLASS_BSS16=$(BS3KIT_CLASS_BSS16)
    456475TEMPLATE_VBoxBS3KitImg_DEFS         = IN_BS3KIT
    457476TEMPLATE_VBoxBS3KitImg_DEFS.debug   = BS3_STRICT
     
    461480TEMPLATE_VBoxBS3KitImg_CTOOL        = Bs3Ow16
    462481TEMPLATE_VBoxBS3KitImg_CXXTOOL      = Bs3Ow16
    463 TEMPLATE_VBoxBS3KitImg_CFLAGS       = \
    464         -nt=BS3TEXT16 -nd=BS3DATA16 -nc=BS3CLASS16CODE -ecc -q -0 -wx -zl -zdp -zu -mc $(BS3_OW_DBG_OPT) -s -oa -ob -of -oi -ol -or -os -d+
    465 TEMPLATE_VBoxBS3KitImg_CXXFLAGS     = \
    466         -nt=BS3TEXT16 -nd=BS3DATA16 -nc=BS3CLASS16CODE -ecc -q -0 -wx -zl -zdp -zu -mc $(BS3_OW_DBG_OPT) -s -oa -ob -of -oi -ol -or -os -d+
     482TEMPLATE_VBoxBS3KitImg_CFLAGS       = $(if $(BS3KIT_SEGNM_DATA16),-nd=$(BS3KIT_SEGNM_DATA16),) \
     483        -nt=BS3TEXT16 -nc=$(BS3KIT_CLASS_CODE16) -ecc -q -0 -wx -zl -zdp -zu -mc $(BS3_OW_DBG_OPT) -s -oa -ob -of -oi -ol -or -os -d+
     484TEMPLATE_VBoxBS3KitImg_CXXFLAGS     = $(if $(BS3KIT_SEGNM_DATA16),-nd=$(BS3KIT_SEGNM_DATA16),) \
     485        -nt=BS3TEXT16 -nc=$(BS3KIT_CLASS_CODE16) -ecc -q -0 -wx -zl -zdp -zu -mc $(BS3_OW_DBG_OPT) -s -oa -ob -of -oi -ol -or -os -d+
    467486TEMPLATE_VBoxBS3KitImg_CDEFS        = ARCH_BITS=16 RT_ARCH_X86
    468487
     
    509528         clname BS3FLAT segaddr=0x0000 \
    510529           segment BS3FLAT segaddr=0x0000 \
    511          clname BS3CLASS16CODE segaddr=0x1000 \
     530         clname $(BS3KIT_CLASS_CODE16) segaddr=0x1000 \
    512531          segment BS3TEXT16 \
    513532          segment BS3TEXT16_END \
    514533        clname BS3SYSTEM16 segaddr=0x2000 \
    515534         segment BS3SYSTEM16 \
     535$(if-expr "$(BS3KIT_SEGNM_DATA16)" == "", \
     536         clname DATA \
     537          segment BS3DATA16 segaddr=0x2900 \
     538          segment BS3DATA16_DATA \
     539          segment DATA \
     540          segment _DATA \
     541          segment BS3DATA16CONST \
     542          segment CONST \
     543          segment BS3DATA16CONST2 \
     544          segment CONST2 \
     545          segment STRINGS \
     546          segment BS3DATA16_END \
     547        clname BSS \
     548          segment BSS \
     549          segment _BSS \
     550          segment BS3DATA16_END \
     551         clname FAR_DATA \
     552         segment FAR_DATA \
     553, \
    516554         clname FAR_DATA \
    517555          segment BS3DATA16 segaddr=0x2900 \
     556         segment FAR_DATA \
    518557          segment BS3DATA16CONST \
    519558          segment BS3DATA16CONST2 \
    520559          segment BS3DATA16_DATA \
    521560          segment BS3DATA16_END \
     561) \
    522562          segment BS3DATA32 \
    523563          segment BS3DATA32CONST \
    524564          segment BS3DATA32CONST2 \
    525565          segment BS3DATA32_DATA \
    526           segment DATA32 \
     566          segment BS3DATA32_BSS \
    527567          segment BS3DATA32_END \
     568         \
    528569          segment BS3DATA64 \
    529           segment DATA64 \
    530           segment .data \
    531           segment DATA64_END \
     570          segment BS3DATA64CONST \
     571          segment BS3DATA64_BSS \
     572          segment BS3DATA64_END \
    532573        clname BS3CLASS32CODE \
    533574          segment BS3TEXT32 \
    534           segment TEXT32 \
    535575        clname BS3CLASS64CODE \
    536           segment BS3TEXT64 \
    537           segment TEXT64 \
    538           segment .text \
    539           segment .rdata \
     576          segment BS3TEXT64
    540577
    541578TEMPLATE_VBoxBS3KitImg_LNK_DEPS = \
     
    583620TEMPLATE_VBoxBS3KitImg32_ASOBJSUFF    = .o32
    584621TEMPLATE_VBoxBS3KitImg32_ASFLAGS      = -f obj -g $(BS3KIT_NASM_allow_64_bit) -w+orphan-labels
    585 TEMPLATE_VBoxBS3KitImg32_ASDEFS       = ASM_FORMAT_OMF RT_NOINC_SEGMENTS __NASM__
     622TEMPLATE_VBoxBS3KitImg32_ASDEFS       = ASM_FORMAT_OMF RT_NOINC_SEGMENTS __NASM__ \
     623        BS3CLASS16CODE=$(BS3KIT_CLASS_CODE16) BS3KIT_CLASS_DATA16=$(BS3KIT_CLASS_DATA16) \
     624         BS3KIT_GRPNM_DATA16=$(BS3KIT_GRPNM_DATA16) BS3KIT_CLASS_BSS16=$(BS3KIT_CLASS_BSS16)
    586625TEMPLATE_VBoxBS3KitImg32_DEFS         = ARCH_BITS=32 IN_BS3KIT
    587626TEMPLATE_VBoxBS3KitImg32_DEFS.debug   = BS3_STRICT
     
    604643TEMPLATE_VBoxBS3KitImg64_ASOBJSUFF    = .o64
    605644TEMPLATE_VBoxBS3KitImg64_ASFLAGS      = -f obj -g $(BS3KIT_NASM_allow_64_bit) -w+orphan-labels
    606 TEMPLATE_VBoxBS3KitImg64_ASDEFS       = ASM_FORMAT_OMF ASM_CALL64_MSC RT_NOINC_SEGMENTS __NASM__
     645TEMPLATE_VBoxBS3KitImg64_ASDEFS       = ASM_FORMAT_OMF ASM_CALL64_MSC RT_NOINC_SEGMENTS __NASM__ \
     646        BS3CLASS16CODE=$(BS3KIT_CLASS_CODE16) BS3KIT_CLASS_DATA16=$(BS3KIT_CLASS_DATA16) \
     647         BS3KIT_GRPNM_DATA16=$(BS3KIT_GRPNM_DATA16) BS3KIT_CLASS_BSS16=$(BS3KIT_CLASS_BSS16)
    607648TEMPLATE_VBoxBS3KitImg64_DEFS         = IN_BS3KIT ARCH_BITS=64
    608649TEMPLATE_VBoxBS3KitImg64_DEFS.debug   = BS3_STRICT
     
    636677TEMPLATE_VBoxBS3KitBS_ASTOOL          = YASM
    637678TEMPLATE_VBoxBS3KitBS_ASFLAGS         = -f bin --mapfile
    638 TEMPLATE_VBoxBS3KitBS_ASDEFS          = ASM_FORMAT_BIN RT_NOINC_SEGMENTS ARCH_BITS=16 __YASM__
     679TEMPLATE_VBoxBS3KitBS_ASDEFS          = ASM_FORMAT_BIN RT_NOINC_SEGMENTS ARCH_BITS=16 __YASM__ \
     680        BS3CLASS16CODE=$(BS3KIT_CLASS_CODE16) BS3KIT_CLASS_DATA16=$(BS3KIT_CLASS_DATA16) \
     681         BS3KIT_GRPNM_DATA16=$(BS3KIT_GRPNM_DATA16) BS3KIT_CLASS_BSS16=$(BS3KIT_CLASS_BSS16)
    639682TEMPLATE_VBoxBS3KitBS_INCS            = $(VBOX_PATH_BS3KIT_SRC) .
    640683TEMPLATE_VBoxBS3KitBS_LDTOOL          = VBoxBsCpLd
    641684
     685
     686
     687#
     688# Extends VBoxBS3KitImg
     689# User must starts SOURCES with: $(VBOX_PATH_BS3KIT_SRC)/bs3-first-dosexe.asm
     690##       disable 1014, 1080, 1150
     691#
     692TEMPLATE_VBoxBS3KitUtil = Utility using bs3kit code.
     693TEMPLATE_VBoxBS3KitUtil_EXTENDS  = VBoxBS3KitImg
     694TEMPLATE_VBoxBS3KitUtil_BINSUFF  = .exe
     695TEMPLATE_VBoxBS3KitUtil_DEFS     = $(TEMPLATE_VBoxBS3KitImg_DEFS) BS3_IS_DOS_EXE
     696TEMPLATE_VBoxBS3KitUtil_CFLAGS   = $(filter-out -zl,$(TEMPLATE_VBoxBS3KitImg_CFLAGS))
     697TEMPLATE_VBoxBS3KitUtil_CXXFLAGS = $(filter-out -zl,$(TEMPLATE_VBoxBS3KitImg_CXXFLAGS))
     698TEMPLATE_VBoxBS3KitUtil_LDFLAGS  = system dos \
     699        debug $(BS3_OW_DBG_LDOPT) all \
     700        option quiet, map, statics, verbose, symfile \
     701       disable 1080 \
     702        order \
     703         clname $(BS3KIT_CLASS_CODE16) \
     704          segment BEGTEXT \
     705          segment BS3TEXT16 \
     706          segment _TEXT \
     707          segment BS3TEXT16_END \
     708        clname BS3SYSTEM16  \
     709         segment BS3SYSTEM16 \
     710         \
     711         clname BEGDATA \
     712          segment _NULL  \
     713          segment _AFTERNULL  \
     714         clname DATA \
     715$(if-expr "$(BS3KIT_SEGNM_DATA16)" == "", \
     716          segment BS3DATA16 \
     717          segment BS3DATA16CONST \
     718          segment CONST \
     719          segment BS3DATA16CONST2 \
     720          segment CONST2 \
     721,\
     722          segment CONST \
     723          segment CONST2 \
     724) \
     725          segment _DATA  \
     726          segment XIB  \
     727          segment XI  \
     728          segment XIE  \
     729          segment YIB  \
     730          segment YI  \
     731          segment YIE  \
     732          segment STRINGS  \
     733$(if-expr "$(BS3KIT_SEGNM_DATA16)" == "", \
     734          segment BS3DATA16_DATA \
     735,) \
     736          segment DATA  \
     737         clname BSS \
     738          segment _BSS \
     739          segment BSS \
     740          segment BS3DATA16_END \
     741         clname STACK \
     742          segment STACK \
     743         \
     744         clname FAR_DATA \
     745$(if-expr "$(BS3KIT_SEGNM_DATA16)" != "", \
     746          segment BS3DATA16  \
     747          segment BS3DATA16_DATA \
     748          segment BS3DATA16CONST \
     749          segment BS3DATA16CONST2 \
     750          segment FAR_DATA \
     751          segment BS3DATA16_END \
     752,\
     753          segment FAR_DATA \
     754)\
     755          segment BS3DATA32 \
     756          segment BS3DATA32CONST \
     757          segment BS3DATA32CONST2 \
     758          segment BS3DATA32_DATA \
     759          segment BS3DATA32_BSS \
     760          segment BS3DATA32_END \
     761         \
     762          segment BS3DATA64 \
     763          segment BS3DATA64CONST \
     764          segment BS3DATA64_BSS \
     765          segment BS3DATA64_END \
     766        clname BS3CLASS32CODE \
     767          segment BS3TEXT32 \
     768        clname BS3CLASS64CODE \
     769          segment BS3TEXT64
     770#        clname BS3FLAT segaddr=0x0000 \
     771#          segment BS3FLAT segaddr=0x0000
     772
     773TEMPLATE_VBoxBS3KitUtil_LNK_DEPS  = $(NO_SUCH_VARIABLE)
     774TEMPLATE_VBoxBS3KitUtil_POST_CMDS = $(NO_SUCH_VARIABLE)
     775
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk

    r60302 r60439  
    3939BLDPROGS += VBoxBs3ObjConverter
    4040VBoxBs3ObjConverter_TEMPLATE = VBoxAdvBldProg
     41VBoxBs3ObjConverter_DEFS     =  BS3KIT_BS3CLASS16CODE=$(BS3KIT_BS3CLASS16CODE)
    4142VBoxBs3ObjConverter_SOURCES  = $(VBOX_PATH_BS3KIT_SRC)/VBoxBs3ObjConverter.cpp
    4243
     
    416417
    417418
     419#
     420# DOS Utilities / Testcases.
     421#
     422MISCBINS += bs3cpudt
     423bs3cpudt_TEMPLATE = VBoxBS3KitUtil
     424bs3cpudt_SOURCES  = \
     425        bs3-first-dosexe.asm \
     426        bs3cpudt.c
     427
     428
    418429include $(FILE_KBUILD_SUB_FOOTER)
    419430
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm

    r60319 r60439  
    248248        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rbp], dx
    249249
    250         mov     dl, [bp + 4]
     250        mov     dl, [bp + 2]
    251251        mov     [ss:bx + BS3TRAPFRAME.bXcpt], dl
    252252
     
    299299        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rdi], edi
    300300        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rsi], esi
     301        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.fs], fs
     302        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.gs], gs
    301303        jmp     .save_segment_registers
    302304.save_word_grps:
     
    308310        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.ds], ds
    309311        mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.es], es
    310         mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.fs], fs
    311         mov     [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.gs], gs
    312312
    313313        ;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PrintStrN.asm

    r60291 r60439  
    152152;
    153153BS3_PROC_BEGIN Bs3PrintStrN_c16_CX_Bytes_At_DS_SI
     154        CPU 8086
    154155        ; Check if CX is zero first.
    155156        test    cx, cx
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxRestore.asm

    r60319 r60439  
    5050BS3_PROC_BEGIN_CMN Bs3RegCtxRestore_aborts ; special entry point for when watcom applies __aborts
    5151 %if TMPL_BITS == 16
     52        CPU 8086
    5253        xor     xAX, xAX
    5354        push    xAX                     ; fake return address.
     
    8485
    8586        ;
    86         ; Prologue.  Loads ES with BS3DATA16/FLAT (for g_bBs3CurrentMode and
    87         ; g_uBs3CpuDetected), DS:xBX with pRegCtx and fFlags into xCX.
     87        ; Prologue.  Loads ES with BS3KIT_GRPNM_DATA16/FLAT (for g_bBs3CurrentMode
     88        ; and g_uBs3CpuDetected), DS:xBX with pRegCtx and fFlags into xCX.
    8889        ;
    8990%if TMPL_BITS == 16
    90         mov     ax, BS3DATA16
     91        mov     ax, BS3_SEL_DATA16
    9192        mov     es, ax
    9293        lds     bx, [bp + 4]
     
    127128        cmp     byte [es:BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286
    128129        jb      .restore_16_bit_ancient
     130        CPU 286
    129131
    130132        lmsw    [bx + BS3REGCTX.cr0]
     
    132134        je      .restore_16_bit_ancient
    133135        lldt    [bx + BS3REGCTX.ldtr]
     136
     137        ; TR - complicated because we need to clear the busy bit. ASSUMES GDT.
     138        str     ax
     139        cmp     ax, [bx + BS3REGCTX.tr]
     140        je      .skip_tr_286
     141
     142        mov     di, word [xBX + BS3REGCTX.tr]
     143        or      di, di                  ; check for null.
     144        jz      .load_tr_286
     145
     146        push    ds
     147        push    BS3_SEL_SYSTEM16
     148        pop     ds
     149        add     di, Bs3Gdt wrt BS3SYSTEM16
     150        add     di, X86DESCGENERIC_BIT_OFF_TYPE / 8
     151        and     byte [di], ~(X86_SEL_TYPE_SYS_TSS_BUSY_MASK << (X86DESCGENERIC_BIT_OFF_TYPE % 8))
     152        pop     ds
     153
     154.load_tr_286:
    134155        ltr     [bx + BS3REGCTX.tr]
     156.skip_tr_286:
    135157
    136158.restore_16_bit_ancient:
     159        CPU 8086
    137160        ; Some general registers.
    138161        mov     cx, [bx + BS3REGCTX.rcx]
     
    198221        pop     bp
    199222        iret
    200 %endif
    201 
     223
     224        CPU 386
     225%endif
    202226
    203227.restore_full:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxSave.asm

    r60319 r60439  
    4444;
    4545BS3_PROC_BEGIN_CMN Bs3RegCtxSave
     46        TMPL_ONLY_16BIT_STMT CPU 8086
    4647        BS3_CALL_CONV_PROLOG 1
    4748        push    xBP
     
    5657        ;
    5758        ; Prologue. Load ES:xDI with pRegCtx.
    58         ; (ASSUMES ds is BS3DATA16/FLAT of course.)
     59        ; (ASSUMES ds is BS3KIT_GRPNM_DATA16/FLAT of course.)
    5960        ;
    6061%if TMPL_BITS == 16
     
    111112        cmp     cl, BS3CPU_80286
    112113        jb      .common_ancient
     114        CPU 286
    113115
    114116        smsw    [xDI + BS3REGCTX.cr0]
    115117        jmp     .common_80286
     118
     119        CPU 386
    116120%endif
    117121
     
    196200        ; 80286 control registers.
    197201.common_80286:
     202        TMPL_ONLY_16BIT_STMT CPU 286
    198203        str     [xDI + BS3REGCTX.tr]
    199204        sldt    [xDI + BS3REGCTX.ldtr]
     
    201206        ; Common stuff - stuff on the stack, 286 segment registers.
    202207.common_ancient:
     208        TMPL_ONLY_16BIT_STMT CPU 8086
    203209        mov     xAX, [xBP - xCB*1]
    204210        mov     [xDI + BS3REGCTX.rflags], xAX
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo16BitV86.asm

    r60218 r60439  
    7878
    7979.not_v8086:
    80         pop     ax                      ; Drop the push ds so the stacks are identical. Keep DS = BS3DATA16 though.
     80        pop     ax                      ; Drop the push ds so the stacks are identical. Keep DS = BS3KIT_GRPNM_DATA16 though.
    8181 %endif
    8282
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestFailed.c

    r60311 r60439  
    4040BS3_DECL_CALLBACK(size_t) bs3TestFailedStrOutput(char ch, void BS3_FAR *pvUser)
    4141{
    42     bool *pfNewLine = (bool *)pvUser;
     42    PBS3TESTFAILEDBUF pBuf = (PBS3TESTFAILEDBUF)pvUser;
    4343
    4444    /*
     
    4848    if (g_fbBs3VMMDevTesting)
    4949    {
    50         if (*pfNewLine && ch != '\0')
     50        if (pBuf->fNewLine && ch != '\0')
    5151            ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, '\n');
     52        pBuf->fNewLine = ch == '\n';
    5253        if (ch != '\n')
    5354            ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, ch);
     
    5758     * Console next.
    5859     */
    59     if (ch != 0)
     60    if (ch != '\0')
    6061    {
    61         Bs3PrintChr(ch);
    62         *pfNewLine = ch == '\n';
     62        BS3_ASSERT(pBuf->cchBuf < RT_ELEMENTS(pBuf->achBuf));
     63        pBuf->achBuf[pBuf->cchBuf++] = ch;
     64
     65        /* Whether to flush the buffer.  We do line flushing here to avoid
     66           dropping too much info when the formatter crashes on bad input. */
     67        if (   pBuf->cchBuf < RT_ELEMENTS(pBuf->achBuf)
     68            && ch != '\n')
     69        {
     70            pBuf->fNewLine = false;
     71            return 1;
     72        }
     73        pBuf->fNewLine = '\n';
    6374    }
    64     /* We're called with '\0' to indicate end-of-string. Supply trailing
    65        newline if necessary. */
    66     else if (!*pfNewLine)
     75    /* Try fit missing newline into the buffer. */
     76    else if (!pBuf->fNewLine && pBuf->cchBuf < RT_ELEMENTS(pBuf->achBuf))
     77    {
     78        pBuf->fNewLine = true;
     79        pBuf->achBuf[pBuf->cchBuf++] = '\n';
     80    }
     81
     82    BS3_ASSERT(pBuf->cchBuf <= RT_ELEMENTS(pBuf->achBuf));
     83    Bs3PrintStrN(&pBuf->achBuf[0], pBuf->cchBuf);
     84    pBuf->cchBuf = 0;
     85
     86    /* In case we failed to add trailing new line, print one separately.  */
     87    if (!pBuf->fNewLine)
    6788        Bs3PrintChr('\n');
    6889
    69     return 1;
     90    return ch != '\0';
    7091}
    7192
     
    7697BS3_DECL(void) Bs3TestFailedV(const char *pszFormat, va_list va)
    7798{
    78     bool fNewLine;
     99    BS3TESTFAILEDBUF Buf;
    79100
    80101    if (!++g_cusBs3TestErrors)
     
    82103
    83104    if (g_fbBs3VMMDevTesting)
     105#if ARCH_BITS == 16
     106        ASMOutU16(VMMDEV_TESTING_IOPORT_CMD, (uint16_t)VMMDEV_TESTING_CMD_FAILED);
     107#else
    84108        ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_FAILED);
     109#endif
    85110
    86     fNewLine = false;
    87     Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &fNewLine);
     111    Buf.fNewLine = false;
     112    Buf.cchBuf   = 0;
     113    Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &Buf);
    88114}
    89115
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestPrintf.c

    r60311 r60439  
    3636
    3737/*********************************************************************************************************************************
     38*   Defined Constants And Macros                                                                                                 *
     39*********************************************************************************************************************************/
     40#define SMALL_BUFFER 1
     41
     42
     43/*********************************************************************************************************************************
    3844*   Structures and Typedefs                                                                                                      *
    3945*********************************************************************************************************************************/
     
    4147typedef struct BS3TESTPRINTBUF
    4248{
    43     bool    fNewCmd;
    44     uint8_t cchBuf;
    45     char    achBuf[78];
     49    bool     fNewCmd;
     50#if SMALL_BUFFER
     51    uint8_t  cchBuf;
     52    char     achBuf[78];
     53#else
     54    uint16_t cchBuf;
     55    char     achBuf[512];
     56#endif
    4657} BS3TESTPRINTBUF;
    4758
     
    6677            if (pBuf->fNewCmd)
    6778            {
     79#if ARCH_BITS == 16
     80                ASMOutU16(VMMDEV_TESTING_IOPORT_CMD, (uint16_t)VMMDEV_TESTING_CMD_PRINT);
     81#else
    6882                ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_PRINT);
     83#endif
    6984                pBuf->fNewCmd = false;
    7085            }
     
    89104           dropping too much info when the formatter crashes on bad input. */
    90105        if (   pBuf->cchBuf < RT_ELEMENTS(pBuf->achBuf)
    91             && ch != '\n')
     106            && (!SMALL_BUFFER || ch != '\n') )
    92107            return 1;
    93108    }
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSendCmdWithStr.asm

    r59949 r60439  
    4343        BS3_ONLY_16BIT_STMT push ds
    4444
    45         mov     ax, seg g_fbBs3VMMDevTesting
    46         mov     ds, ax
    4745        cmp     byte [BS3_DATA16_WRT(g_fbBs3VMMDevTesting)], 0
    4846        je      .no_vmmdev
     
    5048        ; The command (uCmd).
    5149        mov     dx, VMMDEV_TESTING_IOPORT_CMD
     50%if TMPL_BITS == 16
     51        mov     ax, [xBP + xCB*2]       ; We ignore the top bits in 16-bit mode.
     52        out     dx, ax
     53%else
    5254        mov     eax, [xBP + xCB*2]
    5355        out     dx, eax
     56%endif
    5457
    5558        ; The string.
    5659        mov     dx, VMMDEV_TESTING_IOPORT_DATA
    57 %ifdef TMPL_16BIT
     60%if TMPL_BITS == 16
    5861        lds     si, [xBP + xCB*2 + sCB]
    5962%else
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSendCmdWithU32.asm

    r59949 r60439  
    4242        push    xSI
    4343
    44         BS3_ONLY_16BIT_STMT push ds
    45         mov     ax, seg g_fbBs3VMMDevTesting
    46         mov     ds, ax
    4744        cmp     byte [BS3_DATA16_WRT(g_fbBs3VMMDevTesting)], 0
    48         BS3_ONLY_16BIT_STMT pop  ds
    4945        je      .no_vmmdev
    5046
    51         ; The command (uCmd).
     47        ; The command (uCmd) -
    5248        mov     dx, VMMDEV_TESTING_IOPORT_CMD
     49%if TMPL_BITS == 16
     50        mov     ax, [xBP + xCB*2]       ; We ignore the top bits in 16-bit mode.
     51        out     dx, ax
     52%else
    5353        mov     eax, [xBP + xCB*2]
    5454        out     dx, eax
     55%endif
     56
    5557
    5658        ; The value (uValue).
    5759        mov     dx, VMMDEV_TESTING_IOPORT_DATA
     60%if TMPL_BITS == 16
     61        mov     ax, [xBP + xCB*2 + sCB]
     62        out     dx, ax
     63        mov     ax, [xBP + xCB*2 + sCB + 2]
     64        out     dx, ax
     65%else
    5866        mov     eax, [xBP + xCB*2 + sCB]
    5967        out     dx, eax
     68%endif
    6069
     70%if TMPL_BITS == 16
     71        pop     sAX
     72%endif
    6173.no_vmmdev:
    6274        pop     xSI
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSkipped.c

    r60311 r60439  
    4646        /* Tell VMMDev */
    4747        if (g_fbBs3VMMDevTesting)
     48#if ARCH_BITS == 16
     49            ASMOutU16(VMMDEV_TESTING_IOPORT_CMD, (uint16_t)VMMDEV_TESTING_CMD_SKIPPED);
     50#else
    4851            ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_SKIPPED);
     52#endif
    4953
    5054        /* The reason why it was skipped is optional. */
    5155        if (pszFormat)
    5256        {
    53             bool fNewLine = false;
    54             Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &fNewLine);
     57            BS3TESTFAILEDBUF Buf;
     58            Buf.fNewLine = false;
     59            Buf.cchBuf   = 0;
     60            Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &Buf);
    5561        }
    5662        else if (g_fbBs3VMMDevTesting)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapPrintFrame.c

    r60302 r60439  
    3333BS3_DECL(void) Bs3TrapPrintFrame(PCBS3TRAPFRAME pTrapFrame)
    3434{
     35#if 1
    3536    Bs3TestPrintf("Trap %#04x errcd=%#06RX64 at %04x:%016RX64 - test step %d (%#x)\n",
    3637                  pTrapFrame->bXcpt,
     
    4041                  g_usBs3TestStep, g_usBs3TestStep);
    4142    Bs3RegCtxPrint(&pTrapFrame->Ctx);
     43#else
     44    /* This is useful if having trouble returning from real mode. */
     45    PCBS3REGCTX pRegCtx = &pTrapFrame->Ctx;
     46    Bs3TestPrintf("Trap %#04x errcd=%#06RX64 at %04x:%016RX64 - test step %d (%#x)\n"
     47                  "eax=%08RX32 ebx=%08RX32 ecx=%08RX32 edx=%08RX32 esi=%08RX32 edi=%08RX32\n"
     48                  "eip=%08RX32 esp=%08RX32 ebp=%08RX32 efl=%08RX32 cr0=%08RX32 cr2=%08RX32\n"
     49                  "cs=%04RX16   ds=%04RX16 es=%04RX16 fs=%04RX16 gs=%04RX16   ss=%04RX16 cr3=%08RX32 cr4=%08RX32\n"
     50                  "tr=%04RX16 ldtr=%04RX16 cpl=%d   mode=%#x fbFlags=%#x\n"
     51                  ,
     52                  pTrapFrame->bXcpt,
     53                  pTrapFrame->uErrCd,
     54                  pTrapFrame->Ctx.cs,
     55                  pTrapFrame->Ctx.rip.u64,
     56                  g_usBs3TestStep, g_usBs3TestStep
     57                  ,
     58                  pRegCtx->rax.u32, pRegCtx->rbx.u32, pRegCtx->rcx.u32, pRegCtx->rdx.u32, pRegCtx->rsi.u32, pRegCtx->rdi.u32
     59                  ,
     60                  pRegCtx->rip.u32, pRegCtx->rsp.u32, pRegCtx->rbp.u32, pRegCtx->rflags.u32,
     61                  pRegCtx->cr0.u32, pRegCtx->cr2.u32
     62                  ,
     63                  pRegCtx->cs, pRegCtx->ds, pRegCtx->es, pRegCtx->fs, pRegCtx->gs, pRegCtx->ss,
     64                  pRegCtx->cr3.u32, pRegCtx->cr4.u32
     65                  ,
     66                  pRegCtx->tr, pRegCtx->ldtr, pRegCtx->bCpl, pRegCtx->bMode, pRegCtx->fbFlags);
     67
     68#endif
    4269}
    4370
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-test.h

    r60311 r60439  
    141141 *      Used by Bs3TestFailedV and Bs3TestSkippedV.
    142142 *
    143  *      The @a pvUser parameter must point to a boolean that was initialized to false. }
     143 *      The @a pvUser parameter must point a BS3TESTFAILEDBUF structure. }
    144144 */
    145145BS3_DECL_CALLBACK(size_t) bs3TestFailedStrOutput_c16(char ch, void BS3_FAR *pvUser);
     
    148148#define bs3TestFailedStrOutput BS3_CMN_NM(bs3TestFailedStrOutput) /**< Selects #bs3TestFailedStrOutput_c16, #bs3TestFailedStrOutput_c32 or #bs3TestFailedStrOutput_c64. */
    149149
     150/**
     151 * Output buffering for bs3TestFailedStrOutput.
     152 */
     153typedef struct BS3TESTFAILEDBUF
     154{
     155    /** Initialize to false. */
     156    bool    fNewLine;
     157    /** Initialize to zero. */
     158    uint8_t cchBuf;
     159    /** Buffer, uninitialized. */
     160    char    achBuf[128];
     161} BS3TESTFAILEDBUF;
     162/** Pointer to a bs3TestFailedStrOutput buffer.  */
     163typedef BS3TESTFAILEDBUF BS3_FAR *PBS3TESTFAILEDBUF;
     164
    150165#endif
    151166
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-common.mac

    r60088 r60439  
    3939; 16-bit text
    4040;
    41 BS3_BEGIN_TEXT16
     41%ifndef BS3_IS_DOS_EXE
     42BS3_BEGIN_TEXT16
     43%else
     44section BEGTEXT align=2 CLASS=BS3CLASS16CODE PUBLIC USE16
     45BS3_BEGIN_TEXT16
     46section BEGTEXT
     47%endif
    4248BS3_GLOBAL_DATA Bs3Text16_StartOfSegment, 0
    4349
    4450; Entry point with eye-catcher.
    4551GLOBALNAME start
    46 global __ImageBase                      ; for MS compiler
     52global __ImageBase                      ; for MS compiler - must be first!
    4753__ImageBase:
     54global ___begtext                       ; for DOS EXEs (causes harmless duplicate symbol warning)
     55___begtext:
     56%ifndef BS3_IS_DOS_EXE
    4857    jmp     .after_eye_catcher
     58%else
     59    int3
     60    jmp     __ImageBase
     61%endif
    4962    db      10,13,'eye-catcher: BS3TEXT16',10,13
     63BS3_BEGIN_TEXT16
    5064.after_eye_catcher:
    5165
     
    5367section BS3TEXT16_END   align=2 progbits alloc exec nowrite
    5468%else
     69section _TEXT           align=2 CLASS=BS3CLASS16CODE PUBLIC USE16
    5570section BS3TEXT16_END   align=2 CLASS=BS3CLASS16CODE PUBLIC USE16
    5671%endif
     
    5974
    6075%ifndef ASM_FORMAT_ELF
     76 %ifndef BS3_IS_DOS_EXE
    6177GROUP CGROUP16 BS3TEXT16 BS3TEXT16_END
     78 %else
     79GROUP CGROUP16 BEGTEXT BS3TEXT16 _TEXT BS3TEXT16_END
     80 %endif
    6281%endif
    6382
     
    6685; 16-bit data
    6786;
     87%define BS3_BEGIN_DATA16_WITHOUT_GROUP
    6888BS3_BEGIN_DATA16
    6989BS3_GLOBAL_DATA Bs3Data16_StartOfSegment, 0
     
    7292ALIGNDATA(16)
    7393BS3_GLOBAL_DATA Bs3Data16_Size, 4
    74     dd  BS3_DATA_NM(Bs3Data16_EndOfSegment) wrt BS3DATA16_GROUP
     94    dd  BS3_DATA_NM(Bs3Data16_EndOfSegment) wrt BS3KIT_GRPNM_DATA16
    7595BS3_GLOBAL_DATA Bs3Data16Thru64Text32And64_TotalSize, 4
    76     dd  BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt BS3DATA16_GROUP
     96    dd  BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt BS3KIT_GRPNM_DATA16
    7797BS3_GLOBAL_DATA Bs3TotalImageSize, 4
    7898    dd  BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt CGROUP16
     
    86106section BS3DATA16_END   align=2   progbits alloc noexec write
    87107%else
    88 section BS3DATA16CONST  align=2   CLASS=FAR_DATA PUBLIC USE16
    89 section BS3DATA16CONST2 align=2   CLASS=FAR_DATA PUBLIC USE16
    90 section BS3DATA16_DATA  align=2   CLASS=FAR_DATA PUBLIC USE16
    91 section BS3DATA16_END   align=2   CLASS=FAR_DATA PUBLIC USE16
     108section BS3DATA16CONST  align=2   CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
     109section BS3DATA16CONST2 align=2   CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
     110section BS3DATA16_DATA  align=2   CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
     111 %ifdef BS3_IS_DOS_EXE
     112section _NULL           align=16  CLASS=BEGDATA  PUBLIC USE16
     113section _AFTERNULL      align=2   CLASS=BEGDATA  PUBLIC USE16
     114 %endif
     115section CONST           align=2   CLASS=DATA     PUBLIC USE16
     116section CONST2          align=2   CLASS=DATA     PUBLIC USE16
     117section _DATA           align=2   CLASS=DATA     PUBLIC USE16
     118 %ifdef BS3_IS_DOS_EXE
     119section XIB             align=1   CLASS=DATA     PUBLIC USE16
     120section XI              align=1   CLASS=DATA     PUBLIC USE16
     121section XIE             align=1   CLASS=DATA     PUBLIC USE16
     122section YIB             align=1   CLASS=DATA     PUBLIC USE16
     123section YI              align=1   CLASS=DATA     PUBLIC USE16
     124section YIE             align=1   CLASS=DATA     PUBLIC USE16
     125 %endif
     126section STRINGS         align=2   CLASS=DATA     PUBLIC USE16
     127section DATA            align=2   CLASS=DATA     PUBLIC USE16
     128section _BSS            align=2   CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16
     129section BSS             align=2   CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16
     130 %ifdef BS3_IS_DOS_EXE
     131section STACK           align=16  CLASS=STACK    STACK  USE16
     132 %endif
     133section BS3DATA16_END   align=2   CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16
    92134%endif
    93135
     
    95137
    96138%ifndef ASM_FORMAT_ELF
    97 GROUP BS3DATA16_GROUP BS3DATA16 BS3DATA16_DATA BS3DATA16CONST BS3DATA16CONST2 BS3DATA16_END
     139 %ifndef BS3_IS_DOS_EXE
     140GROUP BS3KIT_GRPNM_DATA16 BS3DATA16 BS3DATA16_DATA _DATA DATA BS3DATA16CONST CONST BS3DATA16CONST2 CONST2 STRINGS _BSS BSS BS3DATA16_END
     141 %else
     142GROUP BS3KIT_GRPNM_DATA16 \
     143    _NULL _AFTERNULL \
     144    CONST BS3DATA16CONST CONST2 BS3DATA16CONST2 _DATA XIB XI XIE YIB YI YIE STRINGS DATA BS3DATA16 BS3DATA16_DATA \
     145    _BSS BSS BS3DATA16_END \
     146    STACK
     147 %endif
    98148%endif
    99149
     
    122172    db      10,13,'eye-catcher: BS3TEXT64',10,13
    123173
    124 %ifdef ASM_FORMAT_OMF
    125 ;section TEXT64 align=4 CLASS=CODE PUBLIC USE32
    126 ;section .text  align=4 CLASS=CODE PUBLIC USE32 - nasm doesn't do '.' at the start of segments in OMF mode. Not that this helps anyways...
    127 ;section .rdata align=4 CLASS=CODE PUBLIC USE32
    128 ;GROUP CODE64 TEXT64 _text _rdata
    129 %endif
    130 
    131174%ifdef ASM_FORMAT_ELF
    132175section BS3TEXT64_END   align=1 progbits alloc exec nowrite
     
    136179BS3_GLOBAL_DATA Bs3Text64_EndOfSegment, 0
    137180
     181
     182;
     183; FAR_DATA segment in DOS EXEs should be near the other FAR_DATA class segments.
     184;
     185%ifdef BS3_IS_DOS_EXE
     186section FAR_DATA        align=1 CLASS=FAR_DATA PUBLIC USE16
     187%endif
    138188
    139189;
     
    149199section BS3DATA32CONST2 align=16   CLASS=FAR_DATA PUBLIC USE32
    150200section BS3DATA32_DATA  align=16   CLASS=FAR_DATA PUBLIC USE32
     201section BS3DATA32_BSS   align=16   CLASS=FAR_DATA PUBLIC USE32
    151202section BS3DATA32_END   align=16   CLASS=FAR_DATA PUBLIC USE32
    152203%endif
     
    154205
    155206%ifndef ASM_FORMAT_ELF
    156 GROUP BS3DATA32_GROUP BS3DATA32 BS3DATA32_DATA BS3DATA32CONST BS3DATA32CONST2 BS3DATA32_END
     207GROUP BS3DATA32_GROUP BS3DATA32 BS3DATA32_DATA BS3DATA32CONST BS3DATA32CONST2 BS3DATA32_BSS BS3DATA32_END
    157208%endif
    158209
     
    166217section BS3DATA64_END   align=16   progbits alloc noexec write
    167218%else
    168 ;section .data           align=8    CLASS=DATA PUBLIC USE32
    169 ;section .rdata          align=8    CLASS=DATA PUBLIC USE32
    170 ;section .xdata          align=8    CLASS=DATA PUBLIC USE32
    171 ;section .pdata          align=8    CLASS=DATA PUBLIC USE32
    172 ;section .bss            align=8    CLASS=DATA PUBLIC USE32
     219section BS3DATA64CONST  align=16   CLASS=FAR_DATA PUBLIC USE32
     220section BS3DATA64_BSS   align=16   CLASS=FAR_DATA PUBLIC USE32
    173221section BS3DATA64_END   align=16   CLASS=FAR_DATA PUBLIC USE32
    174222%endif
     
    176224
    177225%ifndef ASM_FORMAT_ELF
    178 ;GROUP BS3DATA64_GROUP BS3DATA64 .data .rdata .xdata .pdata .bss BS3DATA64_END
    179 GROUP BS3DATA64_GROUP BS3DATA64 BS3DATA64_END
     226GROUP BS3DATA64_GROUP BS3DATA64 BS3DATA64CONST BS3DATA64_BSS BS3DATA64_END
    180227%endif
    181228
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-rm.asm

    r59863 r60439  
    4545        ; Nothing to init here, just call main and shutdown if it returns.
    4646        ;
    47         mov     ax, BS3DATA16
     47        mov     ax, BS3_SEL_DATA16
    4848        mov     es, ax
    4949        mov     ds, ax
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToRM.asm

    r60291 r60439  
    3030%if TMPL_MODE == BS3_MODE_PE16
    3131BS3_EXTERN_DATA16 g_uBs3CpuDetected
     32BS3_EXTERN_CMN Bs3KbdWrite
     33BS3_EXTERN_CMN Bs3KbdWait
     34%endif
     35
     36
     37;*********************************************************************************************************************************
     38;*  Global Variables                                                                                                             *
     39;*********************************************************************************************************************************
     40%if TMPL_MODE == BS3_MODE_PE16
     41BS3_BEGIN_DATA16
     42;; Where to start restoring stack.
     43g_ResumeSp: dw 0xfeed
     44;; Where to start restoring stack.
     45g_ResumeSs: dw 0xface
    3246%endif
    3347
     
    107121        ; On 80286 we must reset the CPU to get back to real mode.
    108122        ;
     123        CPU 286
    109124        pop     ax
    110125        push    ax
    111126        test    ax, ax
    112127        jz      .is_386_or_better
    113 .implement_this_later:
    114         int3
    115         jmp     .implement_this_later
    116 
    117         jmp     .reload_cs
    118 
     128
     129        ; Save registers and flags, storing SS:SP in at a known global address.
     130%ifdef BS3_STRICT
     131        mov     ax, 0feedh
     132        mov     bx, 0faceh
     133%endif
     134        push    di
     135        push    si
     136        push    bp
     137        push    bx
     138        push    dx
     139        push    cx
     140        push    ax
     141        pushf
     142
     143        ; Convert ss:sp to real mode address.
     144        BS3_EXTERN_CMN Bs3SelProtFar32ToFlat32
     145        mov     ax, sp
     146        push    ss
     147        push    0
     148        push    ax
     149        call    Bs3SelProtFar32ToFlat32
     150        add     sp, 6
     151
     152        mov     [g_ResumeSp], ax
     153        shl     dx, 12
     154        mov     [g_ResumeSs], dx
     155
     156        ; Setup resume vector.
     157        mov     bx, BS3_SEL_R0_SS16
     158        mov     es, bx
     159        mov     word [es:467h],   .resume
     160        mov     word [es:467h+2], BS3_SEL_TEXT16
     161
     162        mov     al, 0fh | 80h
     163        out     70h, al                 ; set register index
     164        in      al, 80h
     165        mov     al, 0ah                 ; shutdown action command - no EOI, no 287 reset.
     166        out     71h, al                 ; set cmos[f] = al - invoke testResume as early as possible.
     167        in      al, 71h                 ; flush
     168
     169 %if 0 ; for testing in VM
     170        CPU 386
     171        mov     ax, BS3_SEL_R0_DS16
     172        mov     ds, ax
     173        mov     es, ax
     174        mov     fs, ax
     175        mov     gs, ax
     176
     177        mov     eax, cr0
     178        and     ax, ~X86_CR0_PE
     179        mov     cr0, eax
     180hlt
     181        jmp     BS3_SEL_TEXT16:.resume
     182 %endif
     183
     184        ; Port A reset. (FYI: tripple fault does not do the trick)
     185        in      al, 92h
     186        or      al, 1
     187        out     92h, al
     188        in      al, 80h                 ; flush
     189        mov     cx, 0ffffh
     190.reset_delay:
     191        loop    .reset_delay
     192
     193        ; Keyboard controller reset.
     194        call    Bs3KbdWait
     195        push    0                       ; zero data (whatever.
     196        push    0fh                     ; KBD_CCMD_RESET
     197        call    Bs3KbdWrite
     198.forever:
     199        jmp     .forever
     200
     201        ; This is the resume point. We should be in real mode now, at least in theory.
     202.resume:
     203        mov     ax, BS3_SEL_DATA16
     204        mov     ds, ax
     205        mov     es, ax
     206        mov     ax, [g_ResumeSp]
     207        mov     ss, [g_ResumeSs]
     208        mov     sp, ax
     209
     210        popf
     211        pop     ax
     212        pop     cx
     213        pop     dx
     214        pop     bx
     215        pop     bp
     216        pop     si
     217        pop     di
     218 %ifdef BS3_STRICT
     219        cmp     ax, 0feedh
     220        jne     .bad_286_rm_switch
     221        cmp     bx, 0faceh
     222        jne     .bad_286_rm_switch
     223 %endif
     224        jmp     .enter_mode
     225
     226 %ifdef BS3_STRICT
     227.bad_286_rm_switch:
     228        mov ax, 0e00h + 'Q'
     229        mov bx, 0ff00h
     230        int 10h
     231        jmp     .bad_286_rm_switch
     232 %endif
     233
     234        CPU 386
    119235 %elif TMPL_BITS != 16
    120236        ;
     
    163279        add     sp, [bx + 2 + Bs3Gdt]   ; ASSUMES not expand down segment.
    164280        adc     ax, 0
    165 %ifdef BS3_STRICT
     281 %ifdef BS3_STRICT
    166282        test    ax, 0fff0h
    167283        jz      .stack_conv_ok
    168284        int3
    169285.stack_conv_ok:
    170 %endif
     286 %endif
    171287        shl     ax, 12
    172288        mov     ss, ax
     
    188304        ; Call routine for doing mode specific setups.
    189305        ;
     306.enter_mode:
    190307        extern  NAME(Bs3EnteredMode_rm)
    191308        call    NAME(Bs3EnteredMode_rm)
     
    198315        pop     bx
    199316        pop     ax
    200         pop     bp
     317        ret
    201318 %endif
    202319.do_386_epilogue:
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesHlp.asm

    r60295 r60439  
    158158;
    159159; For checking that the mode switching macros doesn't screw up GPRs.
    160 ; Note! Does not work on pre 286 hardware!
    161 ;
    162 %ifdef BS3_STRICT
     160; Note! Does not work on pre 286 hardware! So, for debugging only.
     161;
     162%if 0
    163163 %macro STRICT_SAVE_REGS 0
    164164        movzx   esp, sp
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TrapSystemCallHandler.asm

    r60319 r60439  
    103103        push    ds
    104104 %ifdef TMPL_CMN_R86
    105         push    BS3DATA16
     105        push    BS3_SEL_DATA16
    106106 %else
    107107        push    RT_CONCAT(BS3_SEL_R0_DS,TMPL_BITS)
    108108 %endif
    109         pop     ds                      ; DS = BS3DATA16_GROUP or FLAT and we can safely access data
    110  %if TMPL_BITS == 16 && (TMPL_MODE == BS3_MODE_SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16)
     109        pop     ds                      ; DS = BS3KIT_GRPNM_DATA16 or FLAT and we can safely access data
     110 %if TMPL_BITS == 16 && (TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16)
    111111        cmp     byte [BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286
    112112        jbe     .prologue_pre_80386
     
    123123        push    esp
    124124        pushfd
    125  %if TMPL_MODE == BS3_MODE_SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16
     125 %if TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16
    126126        jmp     .prologue_end
    127127
     
    157157        cmp     ax, BS3_SYSCALL_LAST
    158158        ja      .invalid_syscall
    159 %ifdef TMPL_16BIT
     159%if TMPL_BITS == 16
    160160        mov     bx, ax
    161161        shl     bx, 1
     
    362362        cmp     bl, BS3_MODE_CODE_32
    363363        je      .return_to_32bit_from_16bit_krnl
    364  %if TMPL_MODE == BS3_MODE_SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16
     364 %if TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16
    365365        cmp     byte [BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286
    366366        jbe     .return_pre_80386
     
    389389
    390390%if TMPL_BITS == 16
    391  %if TMPL_MODE == BS3_MODE_SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16
     391 %if TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16
    392392        ; Variant of the above for 80286 and older.
    393393.return_pre_80386:
    394394        add     sp, 0ch
    395395        pop     di
    396         pop     di
     396        pop     bx                      ; dummy
    397397        pop     si
    398         pop     si
     398        pop     bx                      ; dummy
    399399        pop     dx
    400         pop     dx
     400        pop     bx                      ; dummy
    401401        pop     cx
    402         pop     cx
     402        pop     bx                      ; dummy
    403403        pop     ax
    404         pop     ax
    405         pop     bx
     404        pop     bx                      ; dummy
     405        pop     bx                      ; pushed twice
    406406        pop     bx
    407407        pop     ds
     
    756756        ret
    757757
     758%if TMPL_BITS == 16
     759        CPU 286
     760%endif
    758761
    759762        ;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-system-data.asm

    r60291 r60439  
    422422
    423423        ;
    424         ; 2900h - the real mode segment number for BS3DATA16. DPL=3. BASE=0x29000h
     424        ; 2900h - the real mode segment number for BS3KIT_GRPNM_DATA16. DPL=3. BASE=0x29000h
    425425        ;
    426426BS3GdtAssertOffset 02900h
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac

    r59977 r60439  
    403403;
    404404%ifdef TMPL_16BIT
    405  %define TMPL_WRT_DATA16_OR_FLAT    wrt BS3DATA16
     405 %define TMPL_WRT_DATA16_OR_FLAT    wrt BS3KIT_GRPNM_DATA16
    406406%else
    407407 %define TMPL_WRT_DATA16_OR_FLAT    wrt FLAT
     
    413413;
    414414%if TMPL_BITS == 16
    415  %define TMPL_DATA16_WRT(a_Var)     a_Var wrt BS3DATA16
     415 %define TMPL_DATA16_WRT(a_Var)     a_Var wrt BS3KIT_GRPNM_DATA16
    416416%elif TMPL_BITS == 32
    417417 %define TMPL_DATA16_WRT(a_Var)     a_Var wrt FLAT
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r60319 r60439  
    182182 * @sa BS3_SEL_SYSTEM16 */
    183183#define BS3_ADDR_BS3SYSTEM16    0x20000
    184 /** The base address of the BS3DATA16 segment.
     184/** The base address of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment.
    185185 * @sa BS3_SEL_DATA16 */
    186186#define BS3_ADDR_BS3DATA16      0x29000
     
    354354#define BS3_SEL_FREE_PART3_LAST     0x28f8 /**< Free selector space - part \#3, last entry. */
    355355
    356 #define BS3_SEL_DATA16              0x2900 /**< The BS3DATA16 selector. */
     356#define BS3_SEL_DATA16              0x2900 /**< The BS3DATA16/BS3KIT_GRPNM_DATA16 selector. */
    357357
    358358#define BS3_SEL_FREE_PART4          0x2908 /**< Free selector space - part \#4. */
     
    945945/** Free GDTes, part \#3. */
    946946extern X86DESC BS3_FAR_DATA Bs3GdteFreePart3[223];
    947 /** The BS3DATA16/BS3_FAR_DATA GDT entry. */
     947/** The BS3DATA16/BS3KIT_GRPNM_DATA16 GDT entry. */
    948948extern X86DESC BS3_FAR_DATA Bs3Gdte_DATA16;
    949949/** Free GDTes, part \#4. */
     
    10501050extern uint8_t  BS3_FAR_DATA Bs3System16_EndOfSegment;
    10511051
    1052 /** Start of the BS3DATA16 segment.   */
     1052/** Start of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment.   */
    10531053#ifndef DOXYGEN_RUNNING
    10541054# define Bs3Data16_StartOfSegment BS3_DATA_NM(Bs3Data16_StartOfSegment)
    10551055#endif
    10561056extern uint8_t  BS3_FAR_DATA Bs3Data16_StartOfSegment;
    1057 /** End of the BS3DATA16 segment.   */
     1057/** End of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment.   */
    10581058#ifndef DOXYGEN_RUNNING
    10591059# define Bs3Data16_EndOfSegment BS3_DATA_NM(Bs3Data16_EndOfSegment)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac

    r60319 r60439  
    213213 %undef BS3_DATA16_WRT
    214214 %if %1 == 16
    215   %define BS3_DATA16_WRT(a_Var)     a_Var wrt BS3DATA16
     215  %define BS3_DATA16_WRT(a_Var)     a_Var wrt BS3KIT_GRPNM_DATA16
    216216 %elif %1 == 32
    217217  %define BS3_DATA16_WRT(a_Var)     a_Var wrt FLAT
     
    346346%endif
    347347
     348
    348349%macro BS3_BEGIN_TEXT16 0
    349350 %ifndef  BS3_BEGIN_TEXT16_NOT_FIRST
     
    366367        section BS3DATA16 align=2 progbits alloc noexec write
    367368  %else
    368         section BS3DATA16 align=2 CLASS=FAR_DATA PUBLIC USE16
     369        section BS3DATA16 align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
     370   %ifndef BS3_BEGIN_DATA16_WITHOUT_GROUP ; bs3-first-common.mac trick.
     371    GROUP BS3KIT_GRPNM_DATA16 BS3DATA16
     372   %endif
    369373  %endif
    370374 %else
     
    11191123;; @sa BS3_SEL_SYSTEM16
    11201124%define BS3_ADDR_BS3SYSTEM16    020000h
    1121 ;; The base address of the BS3DATA16 segment.
     1125;; The base address of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment.
    11221126;; @sa BS3_SEL_DATA16
    11231127%define BS3_ADDR_BS3DATA16      029000h
     
    13961400%define BS3_SEL_FREE_PART3_LAST     28f8h ;;< Free selector space - part \%3, last entry.
    13971401
    1398 %define BS3_SEL_DATA16              2900h ;;< The BS3DATA16 selector.
     1402%define BS3_SEL_DATA16              2900h ;;< The BS3DATA16/BS3KIT_GRPNM_DATA16 selector.
    13991403
    14001404%define BS3_SEL_FREE_PART4          2908h ;;< Free selector space - part \#4.
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