summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2000-05-23 12:28:31 +0000
committerjhb <jhb@FreeBSD.org>2000-05-23 12:28:31 +0000
commitbb04c4fd93f735f81db7fa6471be98f6398905a1 (patch)
treee4a991daf3ada377b0bf6c4e50bdd003bcd571ff /sys
parent5053ee0d6cc0d8390a4e29ba7b7de827c6cce053 (diff)
downloadFreeBSD-src-bb04c4fd93f735f81db7fa6471be98f6398905a1.zip
FreeBSD-src-bb04c4fd93f735f81db7fa6471be98f6398905a1.tar.gz
Clean up some more 16-bit code and get rid of more m4 macros.
Diffstat (limited to 'sys')
-rw-r--r--sys/boot/i386/mbr/Makefile6
-rw-r--r--sys/boot/i386/mbr/mbr.m451
-rw-r--r--sys/boot/i386/mbr/mbr.s53
3 files changed, 27 insertions, 83 deletions
diff --git a/sys/boot/i386/mbr/Makefile b/sys/boot/i386/mbr/Makefile
index 1090ab0..ed77dba 100644
--- a/sys/boot/i386/mbr/Makefile
+++ b/sys/boot/i386/mbr/Makefile
@@ -6,8 +6,6 @@ STRIP=
BINDIR?= /boot
BINMODE= 444
-M4?= m4
-
ORG= 0x600
mbr: mbr.o
@@ -19,10 +17,6 @@ mbr: mbr.o
objcopy -S -O binary mbr.out ${.TARGET}
.endif
-mbr.o: mbr.m4 mbr.s
- (cd ${.CURDIR}; ${M4} mbr.m4 mbr.s) | \
- ${AS} ${AFLAGS} -o ${.TARGET}
-
CLEANFILES+= mbr.out mbr.o
.include <bsd.prog.mk>
diff --git a/sys/boot/i386/mbr/mbr.m4 b/sys/boot/i386/mbr/mbr.m4
deleted file mode 100644
index c8783b9..0000000
--- a/sys/boot/i386/mbr/mbr.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright (c) 1999 Robert Nordier
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms are freely
-# permitted provided that the above copyright notice and this
-# paragraph and the following disclaimer are duplicated in all
-# such forms.
-#
-# This software is provided "AS IS" and without any express or
-# implied warranties, including, without limitation, the implied
-# warranties of merchantability and fitness for a particular
-# purpose.
-#
-
-# $FreeBSD$
-
-define(_al,0x0)dnl
-define(_cl,0x1)dnl
-define(_dl,0x2)dnl
-define(_bl,0x3)dnl
-define(_ah,0x4)dnl
-define(_ch,0x5)dnl
-define(_dh,0x6)dnl
-define(_bh,0x7)dnl
-
-define(_ax,0x0)dnl
-define(_cx,0x1)dnl
-define(_dx,0x2)dnl
-define(_bx,0x3)dnl
-define(_sp,0x4)dnl
-define(_bp,0x5)dnl
-define(_si,0x6)dnl
-define(_di,0x7)dnl
-
-define(_bx_si,0x0)dnl
-define(_bx_di,0x1)dnl
-define(_bp_si,0x2)dnl
-define(_bp_di,0x3)dnl
-define(_si_,0x4)dnl
-define(_di_,0x5)dnl
-define(_bp_,0x6)dnl
-define(_bx_,0x7)dnl
-
-define(cmpbr0,`.byte 0x38; .byte ($1 << 0x3) | $2')dnl
-define(cmpwi2,`.byte 0x81; .byte 0xb8 | $3; .word $2; .word $1')dnl
-define(movb0r,`.byte 0x8a; .byte ($2 << 0x3) | $1')dnl
-define(movb1r,`.byte 0x8a; .byte 0x40 | ($3 << 0x3) | $2; .byte $1')dnl
-define(movw1r,`.byte 0x8b; .byte 0x40 | ($3 << 0x3) | $2; .byte $1')dnl
-define(movwir,`.byte 0xb8 | $2; .word $1')dnl
-define(jmpnwi,`.byte 0xe9; .word $1 - . - 0x2')dnl
diff --git a/sys/boot/i386/mbr/mbr.s b/sys/boot/i386/mbr/mbr.s
index 6c030de..d93b729 100644
--- a/sys/boot/i386/mbr/mbr.s
+++ b/sys/boot/i386/mbr/mbr.s
@@ -25,34 +25,35 @@
.set NDRIVE,0x8 # Drives to support
.globl start # Entry point
+ .code16
start: cld # String ops inc
- xorl %eax,%eax # Zero
- movl %eax,%es # Address
- movl %eax,%ds # data
+ xorw %ax,%ax # Zero
+ movw %ax,%es # Address
+ movw %ax,%ds # data
cli # Disable interrupts
- movl %eax,%ss # Set up
- movwir(LOAD,_sp) # stack
+ movw %ax,%ss # Set up
+ movw $LOAD,%sp # stack
sti # Enable interrupts
- movwir(main-EXEC+LOAD,_si) # Source
- movwir(main,_di) # Destination
- movwir(0x200-(main-start),_cx) # Byte count
+ movw $main-EXEC+LOAD,%si # Source
+ movw $main,%di # Destination
+ movw $0x200-(main-start),%cx # Byte count
rep # Relocate
movsb # code
- jmpnwi(main-LOAD+EXEC) # To relocated code
+ jmp main-LOAD+EXEC # To relocated code
-main: xorl %esi,%esi # No active partition
- movwir(partbl,_bx) # Partition table
+main: xorw %si,%si # No active partition
+ movw $partbl,%bx # Partition table
movb $0x4,%cl # Number of entries
-main.1: cmpbr0(_ch,_bx_) # Null entry?
+main.1: cmpb %ch,(%bx) # Null entry?
je main.2 # Yes
jg err_pt # If 0x1..0x7f
- testl %esi,%esi # Active already found?
+ testw %si,%si # Active already found?
jnz err_pt # Yes
- movl %ebx,%esi # Point to active
+ movw %bx,%si # Point to active
main.2: addb $0x10,%bl # Till
loop main.1 # done
- testl %esi,%esi # Active found?
+ testw %si,%si # Active found?
jnz main.3 # Yes
int $0x18 # BIOS: Diskless boot
@@ -60,27 +61,27 @@ main.3: cmpb $0x80,%dl # Drive valid?
jb main.4 # No
cmpb $0x80+NDRIVE,%dl # Within range?
jb main.5 # Yes
-main.4: movb0r(_si_,_dl) # Load drive
-main.5: movb1r(0x1,_si_,_dh) # Load head
- movw1r(0x2,_si_,_cx) # Load cylinder:sector
- movwir(LOAD,_bx) # Transfer buffer
- movwir(0x201,_ax) # BIOS: Read from
+main.4: movb (%si),%dl # Load drive
+main.5: movb 0x1(%si),%dh # Load head
+ movw 0x2(%si),%cx # Load cylinder:sector
+ movw $LOAD,%bx # Transfer buffer
+ movw $0x201,%ax # BIOS: Read from
int $0x13 # disk
jc err_rd # If error
- cmpwi2(MAGIC,0x1fe,_bx_) # Bootable?
+ cmpw $MAGIC,0x1fe(%bx) # Bootable?
jne err_os # No
- jmp *%ebx # Invoke bootstrap
+ jmp *%bx # Invoke bootstrap
-err_pt: movwir(msg_pt,_si) # "Invalid partition
+err_pt: movw $msg_pt,%si # "Invalid partition
jmp putstr # table"
-err_rd: movwir(msg_rd,_si) # "Error loading
+err_rd: movw $msg_rd,%si # "Error loading
jmp putstr # operating system"
-err_os: movwir(msg_os,_si) # "Missing operating
+err_os: movw $msg_os,%si # "Missing operating
jmp putstr # system"
-putstr.0: movwir(0x7,_bx) # Page:attribute
+putstr.0: movw $0x7,%bx # Page:attribute
movb $0xe,%ah # BIOS: Display
int $0x10 # character
putstr: lodsb # Get character
OpenPOWER on IntegriCloud