From 8df8626ebdb61a67db991daf7ec3de4bda550d3e Mon Sep 17 00:00:00 2001 From: Yoshihiro Takahashi Date: Fri, 18 Jan 2002 09:00:38 +0000 Subject: [PATCH] Added kgzldr for pc98. crt.s is based on btx.s. --- sys/boot/pc98/Makefile | 2 +- sys/boot/pc98/kgzldr/Makefile | 37 +++++++++++ sys/boot/pc98/kgzldr/crt.s | 118 ++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 sys/boot/pc98/kgzldr/Makefile create mode 100644 sys/boot/pc98/kgzldr/crt.s diff --git a/sys/boot/pc98/Makefile b/sys/boot/pc98/Makefile index b86e09fe94ad..d63cb4c2e0a4 100644 --- a/sys/boot/pc98/Makefile +++ b/sys/boot/pc98/Makefile @@ -1,5 +1,5 @@ # $FreeBSD$ -SUBDIR= btx boot0 boot0.5 boot2 libpc98 loader +SUBDIR= btx boot0 boot0.5 boot2 kgzldr libpc98 loader .include diff --git a/sys/boot/pc98/kgzldr/Makefile b/sys/boot/pc98/kgzldr/Makefile new file mode 100644 index 000000000000..89104980ba68 --- /dev/null +++ b/sys/boot/pc98/kgzldr/Makefile @@ -0,0 +1,37 @@ +# $FreeBSD$ + +PROG= kgzldr.o +SRCS= start.s boot.c inflate.c lib.c crt.s sio.s +CFLAGS= -fno-builtin +.if ${OBJFORMAT} == aout +CFLAGS+=-O2 +.else +CFLAGS+=-Os +.endif +CFLAGS+=-DKZIP +LDFLAGS=-nostdlib -static -r +NOMAN= +BINDIR= /usr/lib +BINMODE=444 +STRIP= +.PATH: ${.CURDIR}/../../../kern + +.PATH: ${.CURDIR}/../../i386/kgzldr +AFLAGS+=--defsym PC98=1 + +M4?= m4 +M4FLAGS=-DOBJFORMAT=${OBJFORMAT} + +BOOT_COMCONSOLE_PORT?= 0x238 +M4FLAGS+=-DSIOPRT=${BOOT_COMCONSOLE_PORT} + +all: kgzldr.o + +kgzldr.o: ${OBJS} + ${CC} ${LDFLAGS} -o ${.TARGET} ${OBJS} + +.s.o: + (cd ${.CURDIR}; ${M4} ${M4FLAGS} ../../i386/kgzldr/kgzldr.m4 ${.IMPSRC}) |\ + ${AS} ${AFLAGS} -o ${.TARGET} + +.include diff --git a/sys/boot/pc98/kgzldr/crt.s b/sys/boot/pc98/kgzldr/crt.s new file mode 100644 index 000000000000..466ec297cbfd --- /dev/null +++ b/sys/boot/pc98/kgzldr/crt.s @@ -0,0 +1,118 @@ +# +# Copyright (c) 1999 Global Technology Associates, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# From: btx.s 1.10 1999/02/25 16:27:41 rnordier +# $FreeBSD$ +# + +# Screen defaults and assumptions. + +.`ifdef' PC98 + .set SCR_MAT,0xe1 # Mode/attribute +.else + .set SCR_MAT,0x7 # Mode/attribute +.endif + .set SCR_COL,0x50 # Columns per row + .set SCR_ROW,0x19 # Rows per screen + +# BIOS Data Area locations. + +.`ifdef' PC98 + .set BDA_POS,0x53e # Cursor position +.else + .set BDA_SCR,0x449 # Video mode + .set BDA_POS,0x450 # Cursor position +.endif + + .globl _(crt_putchr) + +# void crt_putchr(int c) + +_(crt_putchr): movb 0x4(%esp,1),%al # Get character + pusha # Save + xorl %ecx,%ecx # Zero for loops + movb $SCR_MAT,%ah # Mode/attribute + movl $BDA_POS,%ebx # BDA pointer + movw (%ebx),%dx # Cursor position +.`ifdef' PC98 + movl $0xa0000,%edi +.else + movl $0xb8000,%edi # Regen buffer (color) + cmpb %ah,BDA_SCR-BDA_POS(%ebx) # Mono mode? + jne crt_putchr.1 # No + xorw %di,%di # Regen buffer (mono) +.endif +crt_putchr.1: cmpb $0xa,%al # New line? + je crt_putchr.2 # Yes +.`ifdef' PC98 + movw %dx,%cx + movb %al,(%edi,%ecx,1) # Write char + addl $0x2000,%ecx + movb %ah,(%edi,%ecx,1) # Write attr + addw $0x02,%dx + jmp putchr.3 +putchr.2: movw %dx,%ax + movb $SCR_COL*2,%dl + div %dl + incb %al + mul %dl + movw %ax,%dx +putchr.3: cmpw $SCR_ROW*SCR_COL*2,%dx +.else + xchgl %eax,%ecx # Save char + movb $SCR_COL,%al # Columns per row + mulb %dh # * row position + addb %dl,%al # + column + adcb $0x0,%ah # position + shll %eax # * 2 + xchgl %eax,%ecx # Swap char, offset + movw %ax,(%edi,%ecx,1) # Write attr:char + incl %edx # Bump cursor + cmpb $SCR_COL,%dl # Beyond row? + jb crt_putchr.3 # No +crt_putchr.2: xorb %dl,%dl # Zero column + incb %dh # Bump row +crt_putchr.3: cmpb $SCR_ROW,%dh # Beyond screen? +.endif + jb crt_putchr.4 # No + leal 2*SCR_COL(%edi),%esi # New top line + movw $(SCR_ROW-1)*SCR_COL/2,%cx # Words to move + rep # Scroll + movsl # screen + movb $' ',%al # Space +.`ifdef' PC98 + xorb %ah,%ah +.endif + movb $SCR_COL,%cl # Columns to clear + rep # Clear + stosw # line +.`ifdef' PC98 + movw $(SCR_ROW-1)*SCR_COL*2,%dx +.else + movb $SCR_ROW-1,%dh # Bottom line +.endif +crt_putchr.4: movw %dx,(%ebx) # Update position + popa # Restore + ret # To caller