VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchHlpConvRealModeRetfPopBpDecBpAndReturn.asm@ 103068

Last change on this file since 103068 was 98103, checked in by vboxsync, 2 years ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1; $Id: bs3-cmn-SwitchHlpConvRealModeRetfPopBpDecBpAndReturn.asm 98103 2023-01-17 14:15:46Z vboxsync $
2;; @file
3; BS3Kit - SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
4;
5
6;
7; Copyright (C) 2007-2023 Oracle and/or its affiliates.
8;
9; This file is part of VirtualBox base platform packages, as
10; available from https://www.virtualbox.org.
11;
12; This program is free software; you can redistribute it and/or
13; modify it under the terms of the GNU General Public License
14; as published by the Free Software Foundation, in version 3 of the
15; License.
16;
17; This program is distributed in the hope that it will be useful, but
18; WITHOUT ANY WARRANTY; without even the implied warranty of
19; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20; General Public License for more details.
21;
22; You should have received a copy of the GNU General Public License
23; along with this program; if not, see <https://www.gnu.org/licenses>.
24;
25; The contents of this file may alternatively be used under the terms
26; of the Common Development and Distribution License Version 1.0
27; (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28; in the VirtualBox distribution, in which case the provisions of the
29; CDDL are applicable instead of those of the GPL.
30;
31; You may elect to license modified versions of this file under the
32; terms and conditions of either the GPL or the CDDL or both.
33;
34; SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35;
36
37%include "bs3kit-template-header.mac"
38
39BS3_EXTERN_CMN Bs3SelFar32ToFlat32
40
41;;
42; SwitchToXxx helper that converts a 16-bit real mode far return
43; into something suitable for the current mode and performs the return.
44;
45; The caller jmps to this routine. The stack holds an incremented BP (odd is
46; far indicator) and a 16-bit far return address.
47;
48; @uses Nothing.
49; @remarks 16-bit ASSUMES we're returning to protected mode!!
50;
51%if TMPL_BITS == 16
52BS3_BEGIN_TEXT16_FARSTUBS
53%endif
54BS3_PROC_BEGIN_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn, BS3_PBC_NEAR
55%if TMPL_BITS == 16
56 ; Convert the selector of the 16:16 real mode return address to the
57 ; corresponding 16-bit protected mode selector.
58 push ax
59
60 mov ax, [bp + 2 + 2]
61 push ax
62 BS3_EXTERN_CMN Bs3SelRealModeCodeToProtMode
63 call Bs3SelRealModeCodeToProtMode ; This doesn't trash any registers (except AX).
64 add sp, 2
65 mov [bp + 2 + 2], ax
66
67 pop ax
68
69 pop bp
70 dec bp
71 retf
72
73%elif TMPL_BITS == 32
74 push xAX
75 push xDX
76
77 movzx eax, word [xSP + xCB*2 + 2 + 2] ; return segment
78 movzx edx, word [xSP + xCB*2 + 2] ; return offset
79 shl eax, 4
80 add eax, edx
81 mov [xSP + xCB*2 + 2], eax
82
83 pop xDX
84 pop xAX
85 pop bp
86 dec bp
87 ret
88%else
89 sub rsp, 2h
90
91 push xAX
92 push xDX
93
94 movzx eax, word [xSP + xCB*2 + 4 + 2] ; return segment
95 movzx edx, word [xSP + xCB*2 + 4] ; return offset
96 shl eax, 4
97 add eax, edx
98
99 mov bp, [xSP + xCB*2 + 2]
100 dec bp
101
102 mov [xSP + xCB*2], rax
103
104 pop xDX
105 pop xAX
106 ret
107%endif
108BS3_PROC_END_CMN Bs3SwitchHlpConvRealModeRetfPopBpDecBpAndReturn
109
Note: See TracBrowser for help on using the repository browser.

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