Changeset 60439 in vbox
- Timestamp:
- Apr 11, 2016 7:08:38 PM (8 years ago)
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 2 added
- 23 edited
-
Config.kmk (modified) (8 diffs)
-
bs3kit/Makefile.kmk (modified) (2 diffs)
-
bs3kit/bs3-c16-Trap16Generic.asm (modified) (3 diffs)
-
bs3kit/bs3-cmn-PrintStrN.asm (modified) (1 diff)
-
bs3kit/bs3-cmn-RegCtxRestore.asm (modified) (5 diffs)
-
bs3kit/bs3-cmn-RegCtxSave.asm (modified) (5 diffs)
-
bs3kit/bs3-cmn-SwitchTo16BitV86.asm (modified) (1 diff)
-
bs3kit/bs3-cmn-TestFailed.c (modified) (5 diffs)
-
bs3kit/bs3-cmn-TestPrintf.c (modified) (4 diffs)
-
bs3kit/bs3-cmn-TestSendCmdWithStr.asm (modified) (2 diffs)
-
bs3kit/bs3-cmn-TestSendCmdWithU32.asm (modified) (1 diff)
-
bs3kit/bs3-cmn-TestSkipped.c (modified) (1 diff)
-
bs3kit/bs3-cmn-TrapPrintFrame.c (modified) (2 diffs)
-
bs3kit/bs3-cmn-test.h (modified) (2 diffs)
-
bs3kit/bs3-first-common.mac (modified) (13 diffs)
-
bs3kit/bs3-first-dosexe.asm (added)
-
bs3kit/bs3-first-rm.asm (modified) (1 diff)
-
bs3kit/bs3-mode-SwitchToRM.asm (modified) (5 diffs)
-
bs3kit/bs3-mode-TestDoModesHlp.asm (modified) (1 diff)
-
bs3kit/bs3-mode-TrapSystemCallHandler.asm (modified) (6 diffs)
-
bs3kit/bs3-system-data.asm (modified) (1 diff)
-
bs3kit/bs3cpudt.c (added)
-
bs3kit/bs3kit-template-header.mac (modified) (2 diffs)
-
bs3kit/bs3kit.h (modified) (4 diffs)
-
bs3kit/bs3kit.mac (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/Config.kmk
r60319 r60439 53 53 # The bs3kit source directory. 54 54 VBOX_PATH_BS3KIT_SRC = $(VBOX_PATH_VALIDATIONKIT_SRC)/bootsectors/bs3kit 55 56 57 # The 16-bit code & data segment classes. 58 if 1 59 BS3KIT_CLASS_CODE16 = CODE 60 BS3KIT_SEGNM_DATA16 = 61 BS3KIT_CLASS_DATA16 = DATA 62 BS3KIT_GRPNM_DATA16 = DGROUP 63 BS3KIT_CLASS_BSS16 = BSS 64 else 65 BS3KIT_CLASS_CODE16 = BS3CLASS16CODE 66 BS3KIT_SEGNM_DATA16 = BS3DATA16 67 BS3KIT_CLASS_DATA16 = FAR_DATA 68 BS3KIT_GRPNM_DATA16 = BS3DATA16_GROUP 69 BS3KIT_CLASS_BSS16 = ??? 70 endif 71 55 72 56 73 # Dummy CP "linker" tool. … … 425 442 # -wx Maxium warning level. 426 443 # -zl Don't emit default library information. 427 # -zdp DS pegged to BS3DATA16_GROUP .444 # -zdp DS pegged to BS3DATA16_GROUP/DGROUP. 428 445 # -zu Assume SS != DS. 429 446 # -mc Compact memory model, far data, small code. … … 453 470 TEMPLATE_VBoxBS3KitImg_ASTOOL = VBoxNasm 454 471 TEMPLATE_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 472 TEMPLATE_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) 456 475 TEMPLATE_VBoxBS3KitImg_DEFS = IN_BS3KIT 457 476 TEMPLATE_VBoxBS3KitImg_DEFS.debug = BS3_STRICT … … 461 480 TEMPLATE_VBoxBS3KitImg_CTOOL = Bs3Ow16 462 481 TEMPLATE_VBoxBS3KitImg_CXXTOOL = Bs3Ow16 463 TEMPLATE_VBoxBS3KitImg_CFLAGS = \464 -nt=BS3TEXT16 -n d=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 -n d=BS3DATA16 -nc=BS3CLASS16CODE-ecc -q -0 -wx -zl -zdp -zu -mc $(BS3_OW_DBG_OPT) -s -oa -ob -of -oi -ol -or -os -d+482 TEMPLATE_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+ 484 TEMPLATE_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+ 467 486 TEMPLATE_VBoxBS3KitImg_CDEFS = ARCH_BITS=16 RT_ARCH_X86 468 487 … … 509 528 clname BS3FLAT segaddr=0x0000 \ 510 529 segment BS3FLAT segaddr=0x0000 \ 511 clname BS3CLASS16CODEsegaddr=0x1000 \530 clname $(BS3KIT_CLASS_CODE16) segaddr=0x1000 \ 512 531 segment BS3TEXT16 \ 513 532 segment BS3TEXT16_END \ 514 533 clname BS3SYSTEM16 segaddr=0x2000 \ 515 534 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 , \ 516 554 clname FAR_DATA \ 517 555 segment BS3DATA16 segaddr=0x2900 \ 556 segment FAR_DATA \ 518 557 segment BS3DATA16CONST \ 519 558 segment BS3DATA16CONST2 \ 520 559 segment BS3DATA16_DATA \ 521 560 segment BS3DATA16_END \ 561 ) \ 522 562 segment BS3DATA32 \ 523 563 segment BS3DATA32CONST \ 524 564 segment BS3DATA32CONST2 \ 525 565 segment BS3DATA32_DATA \ 526 segment DATA32\566 segment BS3DATA32_BSS \ 527 567 segment BS3DATA32_END \ 568 \ 528 569 segment BS3DATA64 \ 529 segment DATA64\530 segment .data\531 segment DATA64_END \570 segment BS3DATA64CONST \ 571 segment BS3DATA64_BSS \ 572 segment BS3DATA64_END \ 532 573 clname BS3CLASS32CODE \ 533 574 segment BS3TEXT32 \ 534 segment TEXT32 \535 575 clname BS3CLASS64CODE \ 536 segment BS3TEXT64 \ 537 segment TEXT64 \ 538 segment .text \ 539 segment .rdata \ 576 segment BS3TEXT64 540 577 541 578 TEMPLATE_VBoxBS3KitImg_LNK_DEPS = \ … … 583 620 TEMPLATE_VBoxBS3KitImg32_ASOBJSUFF = .o32 584 621 TEMPLATE_VBoxBS3KitImg32_ASFLAGS = -f obj -g $(BS3KIT_NASM_allow_64_bit) -w+orphan-labels 585 TEMPLATE_VBoxBS3KitImg32_ASDEFS = ASM_FORMAT_OMF RT_NOINC_SEGMENTS __NASM__ 622 TEMPLATE_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) 586 625 TEMPLATE_VBoxBS3KitImg32_DEFS = ARCH_BITS=32 IN_BS3KIT 587 626 TEMPLATE_VBoxBS3KitImg32_DEFS.debug = BS3_STRICT … … 604 643 TEMPLATE_VBoxBS3KitImg64_ASOBJSUFF = .o64 605 644 TEMPLATE_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__ 645 TEMPLATE_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) 607 648 TEMPLATE_VBoxBS3KitImg64_DEFS = IN_BS3KIT ARCH_BITS=64 608 649 TEMPLATE_VBoxBS3KitImg64_DEFS.debug = BS3_STRICT … … 636 677 TEMPLATE_VBoxBS3KitBS_ASTOOL = YASM 637 678 TEMPLATE_VBoxBS3KitBS_ASFLAGS = -f bin --mapfile 638 TEMPLATE_VBoxBS3KitBS_ASDEFS = ASM_FORMAT_BIN RT_NOINC_SEGMENTS ARCH_BITS=16 __YASM__ 679 TEMPLATE_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) 639 682 TEMPLATE_VBoxBS3KitBS_INCS = $(VBOX_PATH_BS3KIT_SRC) . 640 683 TEMPLATE_VBoxBS3KitBS_LDTOOL = VBoxBsCpLd 641 684 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 # 692 TEMPLATE_VBoxBS3KitUtil = Utility using bs3kit code. 693 TEMPLATE_VBoxBS3KitUtil_EXTENDS = VBoxBS3KitImg 694 TEMPLATE_VBoxBS3KitUtil_BINSUFF = .exe 695 TEMPLATE_VBoxBS3KitUtil_DEFS = $(TEMPLATE_VBoxBS3KitImg_DEFS) BS3_IS_DOS_EXE 696 TEMPLATE_VBoxBS3KitUtil_CFLAGS = $(filter-out -zl,$(TEMPLATE_VBoxBS3KitImg_CFLAGS)) 697 TEMPLATE_VBoxBS3KitUtil_CXXFLAGS = $(filter-out -zl,$(TEMPLATE_VBoxBS3KitImg_CXXFLAGS)) 698 TEMPLATE_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 773 TEMPLATE_VBoxBS3KitUtil_LNK_DEPS = $(NO_SUCH_VARIABLE) 774 TEMPLATE_VBoxBS3KitUtil_POST_CMDS = $(NO_SUCH_VARIABLE) 775 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk
r60302 r60439 39 39 BLDPROGS += VBoxBs3ObjConverter 40 40 VBoxBs3ObjConverter_TEMPLATE = VBoxAdvBldProg 41 VBoxBs3ObjConverter_DEFS = BS3KIT_BS3CLASS16CODE=$(BS3KIT_BS3CLASS16CODE) 41 42 VBoxBs3ObjConverter_SOURCES = $(VBOX_PATH_BS3KIT_SRC)/VBoxBs3ObjConverter.cpp 42 43 … … 416 417 417 418 419 # 420 # DOS Utilities / Testcases. 421 # 422 MISCBINS += bs3cpudt 423 bs3cpudt_TEMPLATE = VBoxBS3KitUtil 424 bs3cpudt_SOURCES = \ 425 bs3-first-dosexe.asm \ 426 bs3cpudt.c 427 428 418 429 include $(FILE_KBUILD_SUB_FOOTER) 419 430 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm
r60319 r60439 248 248 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rbp], dx 249 249 250 mov dl, [bp + 4]250 mov dl, [bp + 2] 251 251 mov [ss:bx + BS3TRAPFRAME.bXcpt], dl 252 252 … … 299 299 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rdi], edi 300 300 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 301 303 jmp .save_segment_registers 302 304 .save_word_grps: … … 308 310 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.ds], ds 309 311 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.es], es 310 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.fs], fs311 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.gs], gs312 312 313 313 ; -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PrintStrN.asm
r60291 r60439 152 152 ; 153 153 BS3_PROC_BEGIN Bs3PrintStrN_c16_CX_Bytes_At_DS_SI 154 CPU 8086 154 155 ; Check if CX is zero first. 155 156 test cx, cx -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxRestore.asm
r60319 r60439 50 50 BS3_PROC_BEGIN_CMN Bs3RegCtxRestore_aborts ; special entry point for when watcom applies __aborts 51 51 %if TMPL_BITS == 16 52 CPU 8086 52 53 xor xAX, xAX 53 54 push xAX ; fake return address. … … 84 85 85 86 ; 86 ; Prologue. Loads ES with BS3 DATA16/FLAT (for g_bBs3CurrentMode and87 ; 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. 88 89 ; 89 90 %if TMPL_BITS == 16 90 mov ax, BS3 DATA1691 mov ax, BS3_SEL_DATA16 91 92 mov es, ax 92 93 lds bx, [bp + 4] … … 127 128 cmp byte [es:BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286 128 129 jb .restore_16_bit_ancient 130 CPU 286 129 131 130 132 lmsw [bx + BS3REGCTX.cr0] … … 132 134 je .restore_16_bit_ancient 133 135 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: 134 155 ltr [bx + BS3REGCTX.tr] 156 .skip_tr_286: 135 157 136 158 .restore_16_bit_ancient: 159 CPU 8086 137 160 ; Some general registers. 138 161 mov cx, [bx + BS3REGCTX.rcx] … … 198 221 pop bp 199 222 iret 200 %endif 201 223 224 CPU 386 225 %endif 202 226 203 227 .restore_full: -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxSave.asm
r60319 r60439 44 44 ; 45 45 BS3_PROC_BEGIN_CMN Bs3RegCtxSave 46 TMPL_ONLY_16BIT_STMT CPU 8086 46 47 BS3_CALL_CONV_PROLOG 1 47 48 push xBP … … 56 57 ; 57 58 ; Prologue. Load ES:xDI with pRegCtx. 58 ; (ASSUMES ds is BS3 DATA16/FLAT of course.)59 ; (ASSUMES ds is BS3KIT_GRPNM_DATA16/FLAT of course.) 59 60 ; 60 61 %if TMPL_BITS == 16 … … 111 112 cmp cl, BS3CPU_80286 112 113 jb .common_ancient 114 CPU 286 113 115 114 116 smsw [xDI + BS3REGCTX.cr0] 115 117 jmp .common_80286 118 119 CPU 386 116 120 %endif 117 121 … … 196 200 ; 80286 control registers. 197 201 .common_80286: 202 TMPL_ONLY_16BIT_STMT CPU 286 198 203 str [xDI + BS3REGCTX.tr] 199 204 sldt [xDI + BS3REGCTX.ldtr] … … 201 206 ; Common stuff - stuff on the stack, 286 segment registers. 202 207 .common_ancient: 208 TMPL_ONLY_16BIT_STMT CPU 8086 203 209 mov xAX, [xBP - xCB*1] 204 210 mov [xDI + BS3REGCTX.rflags], xAX -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo16BitV86.asm
r60218 r60439 78 78 79 79 .not_v8086: 80 pop ax ; Drop the push ds so the stacks are identical. Keep DS = BS3 DATA16 though.80 pop ax ; Drop the push ds so the stacks are identical. Keep DS = BS3KIT_GRPNM_DATA16 though. 81 81 %endif 82 82 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestFailed.c
r60311 r60439 40 40 BS3_DECL_CALLBACK(size_t) bs3TestFailedStrOutput(char ch, void BS3_FAR *pvUser) 41 41 { 42 bool *pfNewLine = (bool *)pvUser;42 PBS3TESTFAILEDBUF pBuf = (PBS3TESTFAILEDBUF)pvUser; 43 43 44 44 /* … … 48 48 if (g_fbBs3VMMDevTesting) 49 49 { 50 if ( *pfNewLine && ch != '\0')50 if (pBuf->fNewLine && ch != '\0') 51 51 ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, '\n'); 52 pBuf->fNewLine = ch == '\n'; 52 53 if (ch != '\n') 53 54 ASMOutU8(VMMDEV_TESTING_IOPORT_DATA, ch); … … 57 58 * Console next. 58 59 */ 59 if (ch != 0)60 if (ch != '\0') 60 61 { 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'; 63 74 } 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) 67 88 Bs3PrintChr('\n'); 68 89 69 return 1;90 return ch != '\0'; 70 91 } 71 92 … … 76 97 BS3_DECL(void) Bs3TestFailedV(const char *pszFormat, va_list va) 77 98 { 78 bool fNewLine;99 BS3TESTFAILEDBUF Buf; 79 100 80 101 if (!++g_cusBs3TestErrors) … … 82 103 83 104 if (g_fbBs3VMMDevTesting) 105 #if ARCH_BITS == 16 106 ASMOutU16(VMMDEV_TESTING_IOPORT_CMD, (uint16_t)VMMDEV_TESTING_CMD_FAILED); 107 #else 84 108 ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_FAILED); 109 #endif 85 110 86 fNewLine = false; 87 Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &fNewLine); 111 Buf.fNewLine = false; 112 Buf.cchBuf = 0; 113 Bs3StrFormatV(pszFormat, va, bs3TestFailedStrOutput, &Buf); 88 114 } 89 115 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestPrintf.c
r60311 r60439 36 36 37 37 /********************************************************************************************************************************* 38 * Defined Constants And Macros * 39 *********************************************************************************************************************************/ 40 #define SMALL_BUFFER 1 41 42 43 /********************************************************************************************************************************* 38 44 * Structures and Typedefs * 39 45 *********************************************************************************************************************************/ … … 41 47 typedef struct BS3TESTPRINTBUF 42 48 { 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 46 57 } BS3TESTPRINTBUF; 47 58 … … 66 77 if (pBuf->fNewCmd) 67 78 { 79 #if ARCH_BITS == 16 80 ASMOutU16(VMMDEV_TESTING_IOPORT_CMD, (uint16_t)VMMDEV_TESTING_CMD_PRINT); 81 #else 68 82 ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_PRINT); 83 #endif 69 84 pBuf->fNewCmd = false; 70 85 } … … 89 104 dropping too much info when the formatter crashes on bad input. */ 90 105 if ( pBuf->cchBuf < RT_ELEMENTS(pBuf->achBuf) 91 && ch != '\n')106 && (!SMALL_BUFFER || ch != '\n') ) 92 107 return 1; 93 108 } -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSendCmdWithStr.asm
r59949 r60439 43 43 BS3_ONLY_16BIT_STMT push ds 44 44 45 mov ax, seg g_fbBs3VMMDevTesting46 mov ds, ax47 45 cmp byte [BS3_DATA16_WRT(g_fbBs3VMMDevTesting)], 0 48 46 je .no_vmmdev … … 50 48 ; The command (uCmd). 51 49 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 52 54 mov eax, [xBP + xCB*2] 53 55 out dx, eax 56 %endif 54 57 55 58 ; The string. 56 59 mov dx, VMMDEV_TESTING_IOPORT_DATA 57 %if def TMPL_16BIT60 %if TMPL_BITS == 16 58 61 lds si, [xBP + xCB*2 + sCB] 59 62 %else -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSendCmdWithU32.asm
r59949 r60439 42 42 push xSI 43 43 44 BS3_ONLY_16BIT_STMT push ds45 mov ax, seg g_fbBs3VMMDevTesting46 mov ds, ax47 44 cmp byte [BS3_DATA16_WRT(g_fbBs3VMMDevTesting)], 0 48 BS3_ONLY_16BIT_STMT pop ds49 45 je .no_vmmdev 50 46 51 ; The command (uCmd) .47 ; The command (uCmd) - 52 48 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 53 53 mov eax, [xBP + xCB*2] 54 54 out dx, eax 55 %endif 56 55 57 56 58 ; The value (uValue). 57 59 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 58 66 mov eax, [xBP + xCB*2 + sCB] 59 67 out dx, eax 68 %endif 60 69 70 %if TMPL_BITS == 16 71 pop sAX 72 %endif 61 73 .no_vmmdev: 62 74 pop xSI -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestSkipped.c
r60311 r60439 46 46 /* Tell VMMDev */ 47 47 if (g_fbBs3VMMDevTesting) 48 #if ARCH_BITS == 16 49 ASMOutU16(VMMDEV_TESTING_IOPORT_CMD, (uint16_t)VMMDEV_TESTING_CMD_SKIPPED); 50 #else 48 51 ASMOutU32(VMMDEV_TESTING_IOPORT_CMD, VMMDEV_TESTING_CMD_SKIPPED); 52 #endif 49 53 50 54 /* The reason why it was skipped is optional. */ 51 55 if (pszFormat) 52 56 { 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); 55 61 } 56 62 else if (g_fbBs3VMMDevTesting) -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapPrintFrame.c
r60302 r60439 33 33 BS3_DECL(void) Bs3TrapPrintFrame(PCBS3TRAPFRAME pTrapFrame) 34 34 { 35 #if 1 35 36 Bs3TestPrintf("Trap %#04x errcd=%#06RX64 at %04x:%016RX64 - test step %d (%#x)\n", 36 37 pTrapFrame->bXcpt, … … 40 41 g_usBs3TestStep, g_usBs3TestStep); 41 42 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 42 69 } 43 70 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-test.h
r60311 r60439 141 141 * Used by Bs3TestFailedV and Bs3TestSkippedV. 142 142 * 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. } 144 144 */ 145 145 BS3_DECL_CALLBACK(size_t) bs3TestFailedStrOutput_c16(char ch, void BS3_FAR *pvUser); … … 148 148 #define bs3TestFailedStrOutput BS3_CMN_NM(bs3TestFailedStrOutput) /**< Selects #bs3TestFailedStrOutput_c16, #bs3TestFailedStrOutput_c32 or #bs3TestFailedStrOutput_c64. */ 149 149 150 /** 151 * Output buffering for bs3TestFailedStrOutput. 152 */ 153 typedef 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. */ 163 typedef BS3TESTFAILEDBUF BS3_FAR *PBS3TESTFAILEDBUF; 164 150 165 #endif 151 166 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-common.mac
r60088 r60439 39 39 ; 16-bit text 40 40 ; 41 BS3_BEGIN_TEXT16 41 %ifndef BS3_IS_DOS_EXE 42 BS3_BEGIN_TEXT16 43 %else 44 section BEGTEXT align=2 CLASS=BS3CLASS16CODE PUBLIC USE16 45 BS3_BEGIN_TEXT16 46 section BEGTEXT 47 %endif 42 48 BS3_GLOBAL_DATA Bs3Text16_StartOfSegment, 0 43 49 44 50 ; Entry point with eye-catcher. 45 51 GLOBALNAME start 46 global __ImageBase ; for MS compiler 52 global __ImageBase ; for MS compiler - must be first! 47 53 __ImageBase: 54 global ___begtext ; for DOS EXEs (causes harmless duplicate symbol warning) 55 ___begtext: 56 %ifndef BS3_IS_DOS_EXE 48 57 jmp .after_eye_catcher 58 %else 59 int3 60 jmp __ImageBase 61 %endif 49 62 db 10,13,'eye-catcher: BS3TEXT16',10,13 63 BS3_BEGIN_TEXT16 50 64 .after_eye_catcher: 51 65 … … 53 67 section BS3TEXT16_END align=2 progbits alloc exec nowrite 54 68 %else 69 section _TEXT align=2 CLASS=BS3CLASS16CODE PUBLIC USE16 55 70 section BS3TEXT16_END align=2 CLASS=BS3CLASS16CODE PUBLIC USE16 56 71 %endif … … 59 74 60 75 %ifndef ASM_FORMAT_ELF 76 %ifndef BS3_IS_DOS_EXE 61 77 GROUP CGROUP16 BS3TEXT16 BS3TEXT16_END 78 %else 79 GROUP CGROUP16 BEGTEXT BS3TEXT16 _TEXT BS3TEXT16_END 80 %endif 62 81 %endif 63 82 … … 66 85 ; 16-bit data 67 86 ; 87 %define BS3_BEGIN_DATA16_WITHOUT_GROUP 68 88 BS3_BEGIN_DATA16 69 89 BS3_GLOBAL_DATA Bs3Data16_StartOfSegment, 0 … … 72 92 ALIGNDATA(16) 73 93 BS3_GLOBAL_DATA Bs3Data16_Size, 4 74 dd BS3_DATA_NM(Bs3Data16_EndOfSegment) wrt BS3 DATA16_GROUP94 dd BS3_DATA_NM(Bs3Data16_EndOfSegment) wrt BS3KIT_GRPNM_DATA16 75 95 BS3_GLOBAL_DATA Bs3Data16Thru64Text32And64_TotalSize, 4 76 dd BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt BS3 DATA16_GROUP96 dd BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt BS3KIT_GRPNM_DATA16 77 97 BS3_GLOBAL_DATA Bs3TotalImageSize, 4 78 98 dd BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt CGROUP16 … … 86 106 section BS3DATA16_END align=2 progbits alloc noexec write 87 107 %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 108 section BS3DATA16CONST align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16 109 section BS3DATA16CONST2 align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16 110 section BS3DATA16_DATA align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16 111 %ifdef BS3_IS_DOS_EXE 112 section _NULL align=16 CLASS=BEGDATA PUBLIC USE16 113 section _AFTERNULL align=2 CLASS=BEGDATA PUBLIC USE16 114 %endif 115 section CONST align=2 CLASS=DATA PUBLIC USE16 116 section CONST2 align=2 CLASS=DATA PUBLIC USE16 117 section _DATA align=2 CLASS=DATA PUBLIC USE16 118 %ifdef BS3_IS_DOS_EXE 119 section XIB align=1 CLASS=DATA PUBLIC USE16 120 section XI align=1 CLASS=DATA PUBLIC USE16 121 section XIE align=1 CLASS=DATA PUBLIC USE16 122 section YIB align=1 CLASS=DATA PUBLIC USE16 123 section YI align=1 CLASS=DATA PUBLIC USE16 124 section YIE align=1 CLASS=DATA PUBLIC USE16 125 %endif 126 section STRINGS align=2 CLASS=DATA PUBLIC USE16 127 section DATA align=2 CLASS=DATA PUBLIC USE16 128 section _BSS align=2 CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16 129 section BSS align=2 CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16 130 %ifdef BS3_IS_DOS_EXE 131 section STACK align=16 CLASS=STACK STACK USE16 132 %endif 133 section BS3DATA16_END align=2 CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16 92 134 %endif 93 135 … … 95 137 96 138 %ifndef ASM_FORMAT_ELF 97 GROUP BS3DATA16_GROUP BS3DATA16 BS3DATA16_DATA BS3DATA16CONST BS3DATA16CONST2 BS3DATA16_END 139 %ifndef BS3_IS_DOS_EXE 140 GROUP BS3KIT_GRPNM_DATA16 BS3DATA16 BS3DATA16_DATA _DATA DATA BS3DATA16CONST CONST BS3DATA16CONST2 CONST2 STRINGS _BSS BSS BS3DATA16_END 141 %else 142 GROUP 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 98 148 %endif 99 149 … … 122 172 db 10,13,'eye-catcher: BS3TEXT64',10,13 123 173 124 %ifdef ASM_FORMAT_OMF125 ;section TEXT64 align=4 CLASS=CODE PUBLIC USE32126 ;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 USE32128 ;GROUP CODE64 TEXT64 _text _rdata129 %endif130 131 174 %ifdef ASM_FORMAT_ELF 132 175 section BS3TEXT64_END align=1 progbits alloc exec nowrite … … 136 179 BS3_GLOBAL_DATA Bs3Text64_EndOfSegment, 0 137 180 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 186 section FAR_DATA align=1 CLASS=FAR_DATA PUBLIC USE16 187 %endif 138 188 139 189 ; … … 149 199 section BS3DATA32CONST2 align=16 CLASS=FAR_DATA PUBLIC USE32 150 200 section BS3DATA32_DATA align=16 CLASS=FAR_DATA PUBLIC USE32 201 section BS3DATA32_BSS align=16 CLASS=FAR_DATA PUBLIC USE32 151 202 section BS3DATA32_END align=16 CLASS=FAR_DATA PUBLIC USE32 152 203 %endif … … 154 205 155 206 %ifndef ASM_FORMAT_ELF 156 GROUP BS3DATA32_GROUP BS3DATA32 BS3DATA32_DATA BS3DATA32CONST BS3DATA32CONST2 BS3DATA32_ END207 GROUP BS3DATA32_GROUP BS3DATA32 BS3DATA32_DATA BS3DATA32CONST BS3DATA32CONST2 BS3DATA32_BSS BS3DATA32_END 157 208 %endif 158 209 … … 166 217 section BS3DATA64_END align=16 progbits alloc noexec write 167 218 %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 219 section BS3DATA64CONST align=16 CLASS=FAR_DATA PUBLIC USE32 220 section BS3DATA64_BSS align=16 CLASS=FAR_DATA PUBLIC USE32 173 221 section BS3DATA64_END align=16 CLASS=FAR_DATA PUBLIC USE32 174 222 %endif … … 176 224 177 225 %ifndef ASM_FORMAT_ELF 178 ;GROUP BS3DATA64_GROUP BS3DATA64 .data .rdata .xdata .pdata .bss BS3DATA64_END 179 GROUP BS3DATA64_GROUP BS3DATA64 BS3DATA64_END 226 GROUP BS3DATA64_GROUP BS3DATA64 BS3DATA64CONST BS3DATA64_BSS BS3DATA64_END 180 227 %endif 181 228 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-rm.asm
r59863 r60439 45 45 ; Nothing to init here, just call main and shutdown if it returns. 46 46 ; 47 mov ax, BS3 DATA1647 mov ax, BS3_SEL_DATA16 48 48 mov es, ax 49 49 mov ds, ax -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-SwitchToRM.asm
r60291 r60439 30 30 %if TMPL_MODE == BS3_MODE_PE16 31 31 BS3_EXTERN_DATA16 g_uBs3CpuDetected 32 BS3_EXTERN_CMN Bs3KbdWrite 33 BS3_EXTERN_CMN Bs3KbdWait 34 %endif 35 36 37 ;********************************************************************************************************************************* 38 ;* Global Variables * 39 ;********************************************************************************************************************************* 40 %if TMPL_MODE == BS3_MODE_PE16 41 BS3_BEGIN_DATA16 42 ;; Where to start restoring stack. 43 g_ResumeSp: dw 0xfeed 44 ;; Where to start restoring stack. 45 g_ResumeSs: dw 0xface 32 46 %endif 33 47 … … 107 121 ; On 80286 we must reset the CPU to get back to real mode. 108 122 ; 123 CPU 286 109 124 pop ax 110 125 push ax 111 126 test ax, ax 112 127 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 180 hlt 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 119 235 %elif TMPL_BITS != 16 120 236 ; … … 163 279 add sp, [bx + 2 + Bs3Gdt] ; ASSUMES not expand down segment. 164 280 adc ax, 0 165 %ifdef BS3_STRICT281 %ifdef BS3_STRICT 166 282 test ax, 0fff0h 167 283 jz .stack_conv_ok 168 284 int3 169 285 .stack_conv_ok: 170 %endif286 %endif 171 287 shl ax, 12 172 288 mov ss, ax … … 188 304 ; Call routine for doing mode specific setups. 189 305 ; 306 .enter_mode: 190 307 extern NAME(Bs3EnteredMode_rm) 191 308 call NAME(Bs3EnteredMode_rm) … … 198 315 pop bx 199 316 pop ax 200 pop bp317 ret 201 318 %endif 202 319 .do_386_epilogue: -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesHlp.asm
r60295 r60439 158 158 ; 159 159 ; For checking that the mode switching macros doesn't screw up GPRs. 160 ; Note! Does not work on pre 286 hardware! 161 ; 162 %if def BS3_STRICT160 ; Note! Does not work on pre 286 hardware! So, for debugging only. 161 ; 162 %if 0 163 163 %macro STRICT_SAVE_REGS 0 164 164 movzx esp, sp -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TrapSystemCallHandler.asm
r60319 r60439 103 103 push ds 104 104 %ifdef TMPL_CMN_R86 105 push BS3 DATA16105 push BS3_SEL_DATA16 106 106 %else 107 107 push RT_CONCAT(BS3_SEL_R0_DS,TMPL_BITS) 108 108 %endif 109 pop ds ; DS = BS3 DATA16_GROUPor FLAT and we can safely access data110 %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) 111 111 cmp byte [BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286 112 112 jbe .prologue_pre_80386 … … 123 123 push esp 124 124 pushfd 125 %if TMPL_MODE == BS3_MODE_ SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16125 %if TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16 126 126 jmp .prologue_end 127 127 … … 157 157 cmp ax, BS3_SYSCALL_LAST 158 158 ja .invalid_syscall 159 %if def TMPL_16BIT159 %if TMPL_BITS == 16 160 160 mov bx, ax 161 161 shl bx, 1 … … 362 362 cmp bl, BS3_MODE_CODE_32 363 363 je .return_to_32bit_from_16bit_krnl 364 %if TMPL_MODE == BS3_MODE_ SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16364 %if TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16 365 365 cmp byte [BS3_DATA16_WRT(g_uBs3CpuDetected)], BS3CPU_80286 366 366 jbe .return_pre_80386 … … 389 389 390 390 %if TMPL_BITS == 16 391 %if TMPL_MODE == BS3_MODE_ SYS_RM || TMPL_MODE == BS3_MODE_SYS_PE16391 %if TMPL_MODE == BS3_MODE_RM || TMPL_MODE == BS3_MODE_PE16 392 392 ; Variant of the above for 80286 and older. 393 393 .return_pre_80386: 394 394 add sp, 0ch 395 395 pop di 396 pop di396 pop bx ; dummy 397 397 pop si 398 pop si398 pop bx ; dummy 399 399 pop dx 400 pop dx400 pop bx ; dummy 401 401 pop cx 402 pop cx402 pop bx ; dummy 403 403 pop ax 404 pop ax405 pop bx 404 pop bx ; dummy 405 pop bx ; pushed twice 406 406 pop bx 407 407 pop ds … … 756 756 ret 757 757 758 %if TMPL_BITS == 16 759 CPU 286 760 %endif 758 761 759 762 ; -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-system-data.asm
r60291 r60439 422 422 423 423 ; 424 ; 2900h - the real mode segment number for BS3 DATA16. DPL=3. BASE=0x29000h424 ; 2900h - the real mode segment number for BS3KIT_GRPNM_DATA16. DPL=3. BASE=0x29000h 425 425 ; 426 426 BS3GdtAssertOffset 02900h -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac
r59977 r60439 403 403 ; 404 404 %ifdef TMPL_16BIT 405 %define TMPL_WRT_DATA16_OR_FLAT wrt BS3 DATA16405 %define TMPL_WRT_DATA16_OR_FLAT wrt BS3KIT_GRPNM_DATA16 406 406 %else 407 407 %define TMPL_WRT_DATA16_OR_FLAT wrt FLAT … … 413 413 ; 414 414 %if TMPL_BITS == 16 415 %define TMPL_DATA16_WRT(a_Var) a_Var wrt BS3 DATA16415 %define TMPL_DATA16_WRT(a_Var) a_Var wrt BS3KIT_GRPNM_DATA16 416 416 %elif TMPL_BITS == 32 417 417 %define TMPL_DATA16_WRT(a_Var) a_Var wrt FLAT -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r60319 r60439 182 182 * @sa BS3_SEL_SYSTEM16 */ 183 183 #define BS3_ADDR_BS3SYSTEM16 0x20000 184 /** The base address of the BS3DATA16 segment.184 /** The base address of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment. 185 185 * @sa BS3_SEL_DATA16 */ 186 186 #define BS3_ADDR_BS3DATA16 0x29000 … … 354 354 #define BS3_SEL_FREE_PART3_LAST 0x28f8 /**< Free selector space - part \#3, last entry. */ 355 355 356 #define BS3_SEL_DATA16 0x2900 /**< The BS3DATA16 selector. */356 #define BS3_SEL_DATA16 0x2900 /**< The BS3DATA16/BS3KIT_GRPNM_DATA16 selector. */ 357 357 358 358 #define BS3_SEL_FREE_PART4 0x2908 /**< Free selector space - part \#4. */ … … 945 945 /** Free GDTes, part \#3. */ 946 946 extern X86DESC BS3_FAR_DATA Bs3GdteFreePart3[223]; 947 /** The BS3DATA16/BS3 _FAR_DATAGDT entry. */947 /** The BS3DATA16/BS3KIT_GRPNM_DATA16 GDT entry. */ 948 948 extern X86DESC BS3_FAR_DATA Bs3Gdte_DATA16; 949 949 /** Free GDTes, part \#4. */ … … 1050 1050 extern uint8_t BS3_FAR_DATA Bs3System16_EndOfSegment; 1051 1051 1052 /** Start of the BS3DATA16 segment. */1052 /** Start of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment. */ 1053 1053 #ifndef DOXYGEN_RUNNING 1054 1054 # define Bs3Data16_StartOfSegment BS3_DATA_NM(Bs3Data16_StartOfSegment) 1055 1055 #endif 1056 1056 extern uint8_t BS3_FAR_DATA Bs3Data16_StartOfSegment; 1057 /** End of the BS3DATA16 segment. */1057 /** End of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment. */ 1058 1058 #ifndef DOXYGEN_RUNNING 1059 1059 # define Bs3Data16_EndOfSegment BS3_DATA_NM(Bs3Data16_EndOfSegment) -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac
r60319 r60439 213 213 %undef BS3_DATA16_WRT 214 214 %if %1 == 16 215 %define BS3_DATA16_WRT(a_Var) a_Var wrt BS3 DATA16215 %define BS3_DATA16_WRT(a_Var) a_Var wrt BS3KIT_GRPNM_DATA16 216 216 %elif %1 == 32 217 217 %define BS3_DATA16_WRT(a_Var) a_Var wrt FLAT … … 346 346 %endif 347 347 348 348 349 %macro BS3_BEGIN_TEXT16 0 349 350 %ifndef BS3_BEGIN_TEXT16_NOT_FIRST … … 366 367 section BS3DATA16 align=2 progbits alloc noexec write 367 368 %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 369 373 %endif 370 374 %else … … 1119 1123 ;; @sa BS3_SEL_SYSTEM16 1120 1124 %define BS3_ADDR_BS3SYSTEM16 020000h 1121 ;; The base address of the BS3DATA16 segment.1125 ;; The base address of the BS3DATA16/BS3KIT_GRPNM_DATA16 segment. 1122 1126 ;; @sa BS3_SEL_DATA16 1123 1127 %define BS3_ADDR_BS3DATA16 029000h … … 1396 1400 %define BS3_SEL_FREE_PART3_LAST 28f8h ;;< Free selector space - part \%3, last entry. 1397 1401 1398 %define BS3_SEL_DATA16 2900h ;;< The BS3DATA16 selector.1402 %define BS3_SEL_DATA16 2900h ;;< The BS3DATA16/BS3KIT_GRPNM_DATA16 selector. 1399 1403 1400 1404 %define BS3_SEL_FREE_PART4 2908h ;;< Free selector space - part \#4.
Note:
See TracChangeset
for help on using the changeset viewer.

