bootsector2-cpu-hidden-regs-1-template.mac revision cf22150eaeeb72431bf1cf65c309a431454fb22b
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; $Id$
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;; @file
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; bootsector2 hidden CPU registers - multi mode template.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Copyright (C) 2007-2014 Oracle Corporation
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; available from http://www.virtualbox.org. This file is free software;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; you can redistribute it and/or modify it under the terms of the GNU
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; General Public License (GPL) as published by the Free Software
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; The contents of this file may alternatively be used under the terms
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; of the Common Development and Distribution License Version 1.0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; VirtualBox OSE distribution, in which case the provisions of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; CDDL are applicable instead of those of the GPL.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; You may elect to license modified versions of this file under the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; terms and conditions of either the GPL or the CDDL or both.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%include "bootsector2-template-header.mac"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Helper for reporting several register values at in a sequence.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xBX, xAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.next:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, xBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(TestValueReg)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.inner_next:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync inc xBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cmp byte [xBX], 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jne .inner_next
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync inc xBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cmp byte [xBX], 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync je .done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jmp .next
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Tests various LDTR values
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(doLdtrTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; The inital LDT.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szLdtrInitial
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Load our LDT
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, BS2_SEL_LDT
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync lldt ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szLdtrValid
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; NULL LDTR.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync xor eax, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync lldt ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szLdtr0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; NULL(1) LDTR.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync lldt ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szLdtr1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; NULL(2) LDTR.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync lldt ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szLdtr2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; NULL(3) LDTR.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov eax, 3
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync lldt ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szLdtr3
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szLdtrInitial:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Initial) sel:ldtr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Initial) base:ldtr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Initial) limit:ldtr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Initial) attr:ldtr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szLdtrValid:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Valid) sel:ldtr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Valid) base:ldtr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Valid) limit:ldtr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(Valid) attr:ldtr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szLdtr0:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(0) sel:ldtr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(0) base:ldtr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(0) limit:ldtr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(0) attr:ldtr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szLdtr1:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(1) sel:ldtr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(1) base:ldtr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(1) limit:ldtr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(1) attr:ldtr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szLdtr2:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(2) sel:ldtr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(2) base:ldtr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(2) limit:ldtr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(2) attr:ldtr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szLdtr3:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(3) sel:ldtr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(3) base:ldtr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(3) limit:ldtr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'LDTR(3) attr:ldtr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(doLdtrTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Tests various LDTR values
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(doTrTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Initial TR values.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szTrInitial
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jmp .next1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szTrInitial:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(Initial) sel:tr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(Initial) base:tr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(Initial) limit:tr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(Initial) attr:tr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.next1:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Our TR.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifdef TMPL_CMN_LM
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, BS2_SEL_TSS64
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ltr ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szTrTss64
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jmp .next2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szTrTss64:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(64) sel:tr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(64) base:tr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(64) limit:tr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(64) attr:tr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%elifdef TMPL_PP32
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, BS2_SEL_TSS32
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ltr ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szTrTss32
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jmp .next2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szTrTss32:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(32) sel:tr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(32) base:tr_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(32) limit:tr_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'TR(32) attr:tr_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;%elifdef TMPL_PP16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; mov ax, BS2_SEL_TSS16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; mov sAX, .szTrTss16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.next2:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ; Note! Loading 0 into TR is not possible, unlike with LDTR.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(doTrTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Test loading of NULL selectors.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(doNullSelTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push xBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push gs
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, ss
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov gs, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szGsSs
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync xor eax, eax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov gs, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szGs0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, 3
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov gs, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szGs3
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifdef TMPL_64BIT
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pushf
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cli
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov bx, ss
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ss, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szSs0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ss, bx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync popf
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(Bs2ToRing2)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov bx, ss
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, 2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ss, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szSs1Ring2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ss, bx
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync test byte [g_fCpuAmd], 1
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jz .not_amd
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ax, 3
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov ss, ax
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov sAX, .szSs3Ring2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(TestValueRegSZZ)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.not_amd:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(Bs2ToRing0)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop gs
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop xBX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szGsSs:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(ss) sel:gs', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(ss) base:gs_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(ss) limit:gs_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(ss) attr:gs_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szGs0:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(0) sel:gs', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(0) base:gs_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(0) limit:gs_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(0) attr:gs_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szGs3:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(3) sel:gs', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(3) base:gs_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(3) limit:gs_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'GS(3) attr:gs_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%ifdef TMPL_64BIT
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szSs0:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'SS(0) sel:ss', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'SS(0) base:ss_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'SS(0) limit:ss_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'SS(0) attr:ss_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szSs1Ring2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(2) sel:ss', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(2) base:ss_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(2) limit:ss_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(2) attr:ss_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.szSs3Ring2
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(3) sel:ss', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(3) base:ss_base', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(3) limit:ss_lim', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 'ring-2 SS(3) attr:ss_attr', 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%endif
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(doNullSelTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(doTestsWorker)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync push sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync mov xAX, .s_szSubTest
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM_CMN(TestSub)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(doLdtrTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(doTrTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(doNullSelTests)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pop sAX
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.s_szSubTest:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync db TMPL_MODE_STR, 0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(doTestsWorker)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; Do the tests for this mode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync; @uses nothing
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINCODELOW
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBEGINPROC TMPL_NM(doTests_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2IsModeSupported_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync jz .done
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2EnterMode_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(doTestsWorker)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync call TMPL_NM(Bs2ExitMode)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS 16
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync.done:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ret
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncENDPROC TMPL_NM(doTests_rm)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncTMPL_BEGINCODE
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncBITS TMPL_BITS
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync%include "bootsector2-template-footer.mac"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync