Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
CSEP551
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Krishna Vinnakota
CSEP551
Commits
5d1f4b8a
Commit
5d1f4b8a
authored
17 years ago
by
rsc
Browse files
Options
Downloads
Patches
Plain Diff
Rework comments a bit. Move initialization of %sp after protected mode jump and change to %esp.
parent
20365348
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
bootasm.S
+25
-29
25 additions, 29 deletions
bootasm.S
with
25 additions
and
29 deletions
bootasm.S
+
25
−
29
View file @
5d1f4b8a
#include "asm.h"
.
set
PROT_MODE_CSEG
,0
x8
#
code
segment
selector
.
set
PROT_MODE_DSEG
,0
x10
#
data
segment
selector
.
set
CR0_PE_ON
,0
x1
#
protected
mode
enable
flag
#
Start
the
first
CPU
:
switch
to
32
-
bit
protected
mode
,
jump
into
C
.
#
The
BIOS
loads
this
code
from
the
first
sector
of
the
hard
disk
into
#
memory
at
physical
address
0x7c00
and
starts
executing
in
real
mode
#
with
%
cs
=
0
%
ip
=
7
c00
.
#########################################################################
#
ENTRY
POINT
for
the
bootstrap
processor
#
This
code
should
be
stored
in
the
first
sector
of
the
hard
disk
.
#
After
the
BIOS
initializes
the
hardware
on
startup
or
system
reset
,
#
it
loads
this
code
at
physical
address
0x7c00
-
0x7d00
(
512
bytes
)
.
#
Then
the
BIOS
jumps
to
the
beginning
of
it
,
address
0x7c00
,
#
while
running
in
16
-
bit
real
-
mode
(
8086
compatibility
mode
)
.
#
The
Code
Segment
register
(
CS
)
is
initially
zero
on
entry
.
#
#
This
code
switches
into
32
-
bit
protected
mode
so
that
all
of
#
memory
can
accessed
,
then
calls
into
C
.
#########################################################################
.
set
PROT_MODE_CSEG
,
0x8
#
kernel
code
segment
selector
.
set
PROT_MODE_DSEG
,
0x10
#
kernel
data
segment
selector
.
set
CR0_PE_ON
,
0x1
#
protected
mode
enable
flag
.
globl
start
#
Entry
point
start
:
.
code16
#
This
runs
in
real
mode
cli
#
Disable
interrupts
cld
#
String
operations
increment
#
Set
up
the
important
data
segment
registers
(
DS
,
ES
,
SS
)
.
xorw
%
ax
,%
ax
#
Segment
number
zero
...
...
@@ -29,26 +20,25 @@ start:
movw
%
ax
,%
es
#
->
Extra
Segment
movw
%
ax
,%
ss
#
->
Stack
Segment
#
Set
up
the
stack
pointer
,
growing
downward
from
0x7c00
.
movw
$start
,%
sp
#
Stack
Pointer
#
Enable
A20
:
#
For
backwards
compatibility
with
the
earliest
PCs
,
physical
#
address
line
20
is
tied
low
,
so
that
addresses
higher
than
#
1
MB
wrap
around
to
zero
by
default
.
This
code
undoes
this
.
seta20
.
1
:
inb
$
0x64
,%
al
#
Get
status
testb
$
0x2
,%
al
#
Busy
?
jnz
seta20
.1
#
Yes
movb
$
0xd1
,%
al
#
Command
:
Write
outb
%
al
,
$
0x64
#
output
port
inb
$
0x64
,%
al
#
Wait
for
not
busy
testb
$
0x2
,%
al
jnz
seta20
.1
movb
$
0xd1
,%
al
#
0xd1
->
port
0x64
outb
%
al
,
$
0x64
seta20
.
2
:
inb
$
0x64
,%
al
#
Get
status
testb
$
0x2
,%
al
#
Busy
?
jnz
seta20
.2
#
Yes
movb
$
0xdf
,%
al
#
Enable
outb
%
al
,
$
0x60
#
A20
inb
$
0x64
,%
al
#
Wait
for
not
busy
testb
$
0x2
,%
al
jnz
seta20
.2
movb
$
0xdf
,%
al
#
0xdf
->
port
0x60
outb
%
al
,
$
0x60
#
Switch
from
real
to
protected
mode
#
The
descriptors
in
our
GDT
allow
all
physical
memory
to
be
accessed
.
...
...
@@ -80,16 +70,22 @@ protcseg:
movw
%
ax
,
%
fs
#
->
FS
movw
%
ax
,
%
gs
#
->
GS
movw
%
ax
,
%
ss
#
->
SS
:
Stack
Segment
#
Set
up
the
stack
pointer
,
growing
downward
from
0x7c00
.
movl
$start
,
%
esp
call
cmain
#
finish
the
boot
load
from
C
.
#
cmain
()
should
not
return
spin
:
jmp
spin
#
..
but
in
case
it
does
,
spin
#
Bootstrap
GDT
.
p2align
2
#
force
4
byte
alignment
gdt
:
SEG_NULLASM
#
null
seg
SEG_ASM
(
STA_X
|
STA_R
,
0x0
,
0xffffffff
)
#
code
seg
SEG_ASM
(
STA_W
,
0x0
,
0xffffffff
)
#
data
seg
gdtdesc
:
.
word
0x17
#
sizeof
(
gdt
)
-
1
.
long
gdt
#
address
gdt
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment