aboutsummaryrefslogtreecommitdiff
path: root/mubios/arch/reset.S
blob: aedf3d176a0e6b06ef562a81924a6cb2fecf5d7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# RCC-Project
#
# Copyright (C) 2026 Richard Qin
#
# This file is part of RCC-Project.
#
# RCC-Project is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version.
#
# RCC-Project is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# RCC-Project; see the file COPYING.  If not see
# <http://www.gnu.org/licenses/>.
	
	.intel_syntax noprefix
	.code16

	.extern enter_protected_mode
	
	.section .text16, "ax"

	.global reset_entry
	.type reset_entry, @function

reset_entry:
	cli
	cld

	xor ax, ax
	mov ds, ax
	mov es, ax
	mov ss, ax
	mov sp, 0x8000

	call enter_protected_mode

reset_halt:
	hlt
	jmp reset_halt

	.section .reset, "ax"
	
	.global reset_vector

reset_vector:
	cli

	/*
        * The linker places .text16 at physical address 0xF0000.
        * F000:0000 therefore reaches the first 16-bit entry.
        */
	.byte 0xEA
	.word 0x0000
	.word 0xF000

	.fill 16 - (. - reset_vector), 1, 0x90