summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2005-05-08 14:17:28 +0000
committernyan <nyan@FreeBSD.org>2005-05-08 14:17:28 +0000
commit27c543668baefe5a124d7e62e2250fe8e836e773 (patch)
treee22736b5de266941b5b960296376f7f3f9f5c1c8
parent7ccdf6dff30bd501b457faa9e066fba043a5916f (diff)
downloadFreeBSD-src-27c543668baefe5a124d7e62e2250fe8e836e773.zip
FreeBSD-src-27c543668baefe5a124d7e62e2250fe8e836e773.tar.gz
Remove ifdef PC98.
-rw-r--r--sys/boot/pc98/boot2/Makefile2
-rw-r--r--sys/boot/pc98/boot2/boot.c44
-rw-r--r--sys/boot/pc98/boot2/boot.h5
-rw-r--r--sys/boot/pc98/boot2/boot2.S2
-rw-r--r--sys/boot/pc98/boot2/disk.c31
-rw-r--r--sys/boot/pc98/boot2/io.c26
-rw-r--r--sys/boot/pc98/boot2/sys.c17
-rw-r--r--sys/boot/pc98/boot2/table.c4
-rw-r--r--sys/boot/pc98/btx/btx/Makefile2
-rw-r--r--sys/boot/pc98/btx/btx/btx.S106
-rw-r--r--sys/boot/pc98/btx/btxldr/Makefile1
-rw-r--r--sys/boot/pc98/btx/btxldr/btxldr.S47
-rw-r--r--sys/boot/pc98/kgzldr/Makefile2
-rw-r--r--sys/boot/pc98/kgzldr/crt.s39
-rw-r--r--sys/boot/pc98/libpc98/Makefile1
-rw-r--r--sys/boot/pc98/libpc98/biosdisk.c450
-rw-r--r--sys/boot/pc98/libpc98/biosmem.c63
-rw-r--r--sys/boot/pc98/libpc98/comconsole.c6
-rw-r--r--sys/boot/pc98/libpc98/gatea20.c21
-rw-r--r--sys/boot/pc98/libpc98/time.c26
-rw-r--r--sys/boot/pc98/libpc98/vidconsole.c239
-rw-r--r--sys/boot/pc98/loader/Makefile1
-rw-r--r--sys/boot/pc98/loader/main.c10
23 files changed, 12 insertions, 1133 deletions
diff --git a/sys/boot/pc98/boot2/Makefile b/sys/boot/pc98/boot2/Makefile
index 7d2447a..2bac1e4 100644
--- a/sys/boot/pc98/boot2/Makefile
+++ b/sys/boot/pc98/boot2/Makefile
@@ -10,7 +10,7 @@ BINMODE= 444
CFLAGS= -Os -mrtd \
-fno-guess-branch-probability \
-fno-unit-at-a-time \
- -D_KERNEL -DPC98 -DBOOTWAIT=${BOOTWAIT} -DTIMEOUT=${TIMEOUT}
+ -D_KERNEL -DBOOTWAIT=${BOOTWAIT} -DTIMEOUT=${TIMEOUT}
CFLAGS+= -DBOOTSEG=${BOOTSEG} -DBOOTSTACK=${BOOTSTACK}
CFLAGS+= ${CWARNFLAGS}
CFLAGS+= -I${.CURDIR}/../../.. -I.
diff --git a/sys/boot/pc98/boot2/boot.c b/sys/boot/pc98/boot2/boot.c
index 58c789d..fe288c0 100644
--- a/sys/boot/pc98/boot2/boot.c
+++ b/sys/boot/pc98/boot2/boot.c
@@ -81,24 +81,16 @@ static void readfile(char *path, char *buf, size_t nbytes);
void
boot(int drive)
{
- int ret;
-#ifdef PC98
- int i;
+ int i, ret;
unsigned char disk_equips;
-#endif
/* Pick up the story from the Bios on geometry of disks */
-#ifdef PC98
for(ret = 0; ret < 2; ret ++) {
if (*(unsigned char*)V(0xA155d) & (1 << ret)) {
bootinfo.bi_bios_geom[ret] = get_diskinfo(ret + 0x80);
}
}
-#else /* IBM-PC */
- for(ret = 0; ret < N_BIOS_GEOM; ret ++)
- bootinfo.bi_bios_geom[ret] = get_diskinfo(ret + 0x80);
-#endif /* PC98 */
bootinfo.bi_basemem = memsize(0);
bootinfo.bi_extmem = memsize(1);
@@ -106,17 +98,14 @@ boot(int drive)
gateA20();
-#ifdef PC98
/* set machine type to PC98_SYSTEM_PARAMETER */
machine_check();
-#endif /* PC98 */
/*
* The default boot device is the first partition in the
* compatibility slice on the boot drive.
*/
dosdev = drive;
-#ifdef PC98
maj = (drive&0x70) >> 3; /* a good first bet */
if (maj == 4) { /* da */
disk_equips = *(unsigned char *)V(0xA1482);
@@ -132,29 +121,6 @@ boot(int drive)
} else {
unit = drive & 0x0f;
}
-#else /* IBM-PC */
- maj = 2;
- unit = drive & 0x7f;
-#ifdef dontneed
- slice = 0;
- part = 0;
-#endif
- if (drive & 0x80) {
- /* Hard drive. Adjust. */
- maj = 0;
-#if BOOT_HD_BIAS > 0
- if (unit >= BOOT_HD_BIAS) {
- /*
- * The drive is probably a SCSI drive with a unit
- * number BOOT_HD_BIAS less than the BIOS drive
- * number.
- */
- maj = 4;
- unit -= BOOT_HD_BIAS;
- }
-#endif
- }
-#endif /* PC98 */
readfile("boot.config", boot_config, BOOT_CONFIG_SIZE);
name = "/boot/loader";
if (boot_config[0] != '\0') {
@@ -173,11 +139,7 @@ loadstart:
ouraddr, bootinfo.bi_basemem, bootinfo.bi_extmem,
(loadflags & RB_SERIAL) ? "serial" : "internal",
(loadflags & RB_DUAL) ? "/dual" : "",
-#ifdef PC98
dosdev & 0x0f, devs[maj], unit, 'a' + part,
-#else
- dosdev & 0x7f, devs[maj], unit, 'a' + part,
-#endif
name ? name : "*specify_a_kernel_name*",
boot_help);
@@ -242,11 +204,7 @@ loadprog(void)
startaddr = head.a_entry & 0x00FFFFFF;
addr = startaddr;
printf("Booting %d:%s(%d,%c)%s @ 0x%x\n"
-#ifdef PC98
, dosdev & 0x0f
-#else
- , dosdev & 0x7f
-#endif
, devs[maj]
, unit
, 'a'+part
diff --git a/sys/boot/pc98/boot2/boot.h b/sys/boot/pc98/boot2/boot.h
index 6fd1e99..e39fee5 100644
--- a/sys/boot/pc98/boot2/boot.h
+++ b/sys/boot/pc98/boot2/boot.h
@@ -89,9 +89,7 @@ int strcasecmp(const char *s1, const char *s2);
#endif /* !CDBOOT */
void memcpy(const void *from, void *to, size_t len);
void twiddle(void);
-#ifdef PC98
void machine_check(void);
-#endif
/* probe_keyboard.c */
int probe_keyboard(void);
@@ -107,7 +105,4 @@ void xread(char *addr, int size);
void read(char *buffer, int count);
int openrd(void);
-#ifdef PC98
#define V(ra) (ra - BOOTSEG * 0x10)
-#endif
-
diff --git a/sys/boot/pc98/boot2/boot2.S b/sys/boot/pc98/boot2/boot2.S
index 6055475..be85030 100644
--- a/sys/boot/pc98/boot2/boot2.S
+++ b/sys/boot/pc98/boot2/boot2.S
@@ -173,9 +173,7 @@ ENTRY(boot2)
movl %esp, EXT(dflt_name)
#endif
-#ifdef PC98
movb 0xA1584 - BOOTSEG * 0x10, %dl
-#endif
movzbl %dl, %edx /* discard head (%dh) and random high bits */
pushl %edx
call EXT(boot)
diff --git a/sys/boot/pc98/boot2/disk.c b/sys/boot/pc98/boot2/disk.c
index 835fff0..f9706ca 100644
--- a/sys/boot/pc98/boot2/disk.c
+++ b/sys/boot/pc98/boot2/disk.c
@@ -98,7 +98,6 @@ devopen(void)
#ifdef EMBEDDED_DISKLABEL
dl = &disklabel;
#else /* EMBEDDED_DISKLABEL */
-#ifdef PC98
p = Bread(dosdev_copy, 1);
dptr = (struct pc98_partition *)p;
slice = WHOLE_DISK_SLICE;
@@ -111,20 +110,6 @@ devopen(void)
p = Bread(dosdev, sector + LABELSECTOR);
dl=((struct disklabel *)p);
disklabel = *dl; /* structure copy (maybe useful later)*/
-#else
- p = Bread(dosdev_copy, 0);
- dptr = (struct dos_partition *)(p+DOSPARTOFF);
- slice = WHOLE_DISK_SLICE;
- for (i = 0; i < NDOSPART; i++, dptr++)
- if (dptr->dp_typ == DOSPTYP_386BSD) {
- slice = BASE_SLICE + i;
- sector = dptr->dp_start;
- break;
- }
- p = Bread(dosdev_copy, sector + LABELSECTOR);
- dl=((struct disklabel *)p);
- disklabel = *dl; /* structure copy (maybe useful later)*/
-#endif /* PC98 */
#endif /* EMBEDDED_DISKLABEL */
if (dl->d_magic != DISKMAGIC) {
printf("bad disklabel\n");
@@ -133,16 +118,6 @@ devopen(void)
/* This little trick is for OnTrack DiskManager disks */
boff = dl->d_partitions[part].p_offset -
dl->d_partitions[2].p_offset + sector;
-
-#ifndef PC98
- bsize = dl->d_partitions[part].p_size;
- if (bsize == 0) {
- printf("empty partition\n");
- return 1;
- }
-
-#endif
-
}
#endif /* RAWBOOT */
return 0;
@@ -176,12 +151,6 @@ Bread(int dosdev, int sector)
int cyl, head, sec, nsec;
cyl = sector/spc;
-#ifndef PC98
- if (cyl > 1023) {
- printf("Error: C:%d > 1023 (BIOS limit)\n", cyl);
- for(;;); /* loop forever */
- }
-#endif
head = (sector % spc) / spt;
sec = sector % spt;
nsec = spt - sec;
diff --git a/sys/boot/pc98/boot2/io.c b/sys/boot/pc98/boot2/io.c
index 88dc8ba..d4657a2 100644
--- a/sys/boot/pc98/boot2/io.c
+++ b/sys/boot/pc98/boot2/io.c
@@ -32,10 +32,7 @@ __FBSDID("$FreeBSD$");
#include "boot.h"
#include <machine/cpufunc.h>
#include <sys/reboot.h>
-#ifdef PC98
#include <pc98/pc98/pc98.h>
-#endif
-
static int getchar(int in_buf);
@@ -159,15 +156,10 @@ loop:
void
delay1ms(void)
{
-#ifdef PC98
int i = 800;
+
while (--i >= 0)
(void)outb(0x5f,0); /* about 600ns */
-#else
- int i = 800;
- while (--i >= 0)
- (void)inb(0x84);
-#endif
}
static __inline int
@@ -193,7 +185,6 @@ isch(void)
static __inline unsigned
pword(unsigned physaddr)
{
-#ifdef PC98
static int counter = 0;
int i;
@@ -201,28 +192,13 @@ pword(unsigned physaddr)
(void)outb(0x5f, 0);
return (counter++);
-#else
- unsigned result;
-
- /*
- * Give the fs prefix separately because gas omits it for
- * "movl %fs:0x46c, %eax".
- */
- __asm __volatile("fs; movl %1, %0" : "=r" (result)
- : "m" (*(unsigned *)physaddr));
- return (result);
-#endif
}
int
gets(char *buf)
{
#define bios_tick pword(0x46c)
-#ifdef PC98
#define BIOS_TICK_MS 1
-#else
-#define BIOS_TICK_MS 55
-#endif
unsigned initial_bios_tick;
char *ptr=buf;
diff --git a/sys/boot/pc98/boot2/sys.c b/sys/boot/pc98/boot2/sys.c
index d924624..0ceb07e 100644
--- a/sys/boot/pc98/boot2/sys.c
+++ b/sys/boot/pc98/boot2/sys.c
@@ -262,11 +262,7 @@ openrd(void)
}
biosdrive = biosdrivedigit - '0';
if (biosdrivedigit == '\0') {
-#ifdef PC98
biosdrive = dosdev & 0x0f;
-#else
- biosdrive = unit;
-#endif
#if BOOT_HD_BIAS > 0
/* XXX */
if (maj == 4)
@@ -275,29 +271,16 @@ openrd(void)
}
switch(maj)
{
-#ifdef PC98
case 4: /* da */
dosdev_copy = biosdrive | 0xA0; /* SCSI HD or MO */
-#else /* IBM-PC */
- case 0:
- case 4:
- dosdev_copy = biosdrive | 0x80;
-#endif
break;
-#ifdef PC98
case 0: /* wd */
case 2: /* 1200KB fd */
dosdev_copy = (maj << 3) | unit | 0x80;
-#else
- case 2:
- dosdev_copy = biosdrive;
-#endif
break;
-#ifdef PC98
case 6: /* 1440KB fd */
dosdev_copy = (maj << 3) | unit;
break;
-#endif
default:
printf("Unknown device\n");
return 1;
diff --git a/sys/boot/pc98/boot2/table.c b/sys/boot/pc98/boot2/table.c
index bcdc178..e8e6dea5 100644
--- a/sys/boot/pc98/boot2/table.c
+++ b/sys/boot/pc98/boot2/table.c
@@ -85,16 +85,12 @@ struct seg_desc Gdt[] = {
{0xFFFF, 0x0, 0x0, 0x93, 0xCF, 0x0}, /* 0x10 : kernel data */
/* 0x92? */
{0xFFFF, RUN, RUN, 0x9E, 0x40, 0x0}, /* 0x18 : boot code */
-#ifdef PC98
/*
* The limit of boot data should be more than or equal to 0x9FFFF
* for saving BIOS parameter and EPSON machine ID into 2'nd T-VRAM,
* because base address is normally 0x10000.
*/
{0xFFFF, RUN, RUN, 0x92, 0x4F, 0x0}, /* 0x20 : boot data */
-#else
- {0xFFFF, RUN, RUN, 0x92, 0x40, 0x0}, /* 0x20 : boot data */
-#endif
{0xFFFF, RUN, RUN, 0x9E, 0x0, 0x0}, /* 0x28 : boot code, 16 bits */
{0xFFFF, 0x0, 0x0, 0x92, 0x0, 0x0}, /* 0x30 : boot data, 16 bits */
#ifdef BDE_DEBUGGER
diff --git a/sys/boot/pc98/btx/btx/Makefile b/sys/boot/pc98/btx/btx/Makefile
index c9517ea..ac9a64e 100644
--- a/sys/boot/pc98/btx/btx/Makefile
+++ b/sys/boot/pc98/btx/btx/Makefile
@@ -5,8 +5,6 @@ INTERNALPROG=
NO_MAN=
SRCS= btx.S
-CFLAGS+=-DPC98
-
.if defined(PAGING)
CFLAGS+=-DPAGING
.endif
diff --git a/sys/boot/pc98/btx/btx/btx.S b/sys/boot/pc98/btx/btx/btx.S
index 6ee9f8f..337f191 100644
--- a/sys/boot/pc98/btx/btx/btx.S
+++ b/sys/boot/pc98/btx/btx/btx.S
@@ -71,27 +71,15 @@
/*
* 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_MEM,0x501 # Free memory
.set BDA_KEYFLAGS,0x53a # Keyboard shift-state flags
.set BDA_POS,0x53e # Cursor position
-#else
- .set BDA_MEM,0x413 # Free memory
- .set BDA_KEYFLAGS,0x417 # Keyboard shift-state flags
- .set BDA_SCR,0x449 # Video mode
- .set BDA_POS,0x450 # Cursor position
- .set BDA_BOOT,0x472 # Boot howto flag
-#endif
/*
* Derivations, for brevity.
*/
@@ -233,13 +221,9 @@ init.8: xorl %ecx,%ecx # Zero
ltr %cx # register
movl $MEM_USR,%edx # User base address
movzwl %ss:BDA_MEM,%eax # Get free memory
-#ifdef PC98
andl $0x7,%eax
incl %eax
shll $0x11,%eax # To bytes
-#else
- shll $0xa,%eax # To bytes
-#endif
subl $0x1000,%eax # Less arg space
subl %edx,%eax # Less base
movb $SEL_UDATA,%cl # User data selector
@@ -302,11 +286,7 @@ exit.1: mov $SEL_RDATA,%cl # 16-bit selector
exit.2: xor %ax,%ax # Real mode segment
mov %ax,%ss # Reload SS
mov %ax,%ds # Address data
-#ifdef PC98
mov $0x1008,%bx # Set real mode
-#else
- mov $0x7008,%bx # Set real mode
-#endif
callw setpic # IRQ offsets
lidt ivtdesc # Set IVT
/*
@@ -315,20 +295,14 @@ exit.2: xor %ax,%ax # Real mode segment
sti # Enable interrupts
testb $0x1,btx_hdr+0x7 # Reboot?
exit.3: jz exit.3 # No
-#ifdef PC98
movb $0xa0,%al
outb %al,$0x35
movb 0,%al
outb %al,$0xf0
exit.4: jmp exit.4
-#else
- movw $0x1234, BDA_BOOT # Do a warm boot
- ljmp $0xf000,$0xfff0 # reboot the machine
-#endif
/*
* Set IRQ offsets by reprogramming 8259A PICs.
*/
-#ifdef PC98
setpic: in $0x02,%al # Save master
push %ax # IMR
in $0x0a,%al # Save slave
@@ -352,30 +326,6 @@ setpic: in $0x02,%al # Save master
outb %al,$0x0a # IMR
pop %ax # Restore master
outb %al,$0x02 # IMR
-#else
-setpic: in $0x21,%al # Save master
- push %ax # IMR
- in $0xa1,%al # Save slave
- push %ax # IMR
- movb $0x11,%al # ICW1 to
- outb %al,$0x20 # master,
- outb %al,$0xa0 # slave
- movb %bl,%al # ICW2 to
- outb %al,$0x21 # master
- movb %bh,%al # ICW2 to
- outb %al,$0xa1 # slave
- movb $0x4,%al # ICW3 to
- outb %al,$0x21 # master
- movb $0x2,%al # ICW3 to
- outb %al,$0xa1 # slave
- movb $0x1,%al # ICW4 to
- outb %al,$0x21 # master,
- outb %al,$0xa1 # slave
- pop %ax # Restore slave
- outb %al,$0xa1 # IMR
- pop %ax # Restore master
- outb %al,$0x21 # IMR
-#endif
retw # To caller
.code32
/*
@@ -455,7 +405,6 @@ except.2: push $SEL_SDATA # Set up
movl %esp,%ebx # Stack frame
movl $dmpfmt,%esi # Dump format string
movl $MEM_BUF,%edi # Buffer
-#ifdef PC98
pushl %eax
pushl %edx
wait.1:
@@ -482,7 +431,6 @@ wait.2:
movw %ax,(%edx)
popl %edx
popl %eax
-#endif
pushl %edi # Dump to
call dump # buffer
popl %esi # and
@@ -751,13 +699,8 @@ v86intn: lodsb # Get int no
v86intn.1: cmpw $0x4f53,%ax # is it the delete key callout?
jne v86intn.2 # no, handle the int normally
movb BDA_KEYFLAGS,%al # get the shift key state
-#ifdef PC98
andb $0x18,%al # mask off just Ctrl and Alt
cmpb $0x18,%al # are both Ctrl and Alt down?
-#else
- andb $0xc,%al # mask off just Ctrl and Alt
- cmpb $0xc,%al # are both Ctrl and Alt down?
-#endif
jne v86intn.2 # no, handle the int normally
popl %eax # restore EAX
jmp reboot # reboot the machine
@@ -794,7 +737,6 @@ intx20: push $0x8 # Int 0x20: IRQ0
jmp int_hw # V86 int 0xe
push $0xf # Int 0x27: IRQ7
jmp int_hw # V86 int 0xf
-#ifdef PC98
push $0x10 # Int 0x28: IRQ8
jmp int_hw # V86 int 0x10
push $0x11 # Int 0x29: IRQ9
@@ -811,24 +753,6 @@ intx20: push $0x8 # Int 0x20: IRQ0
jmp int_hw # V86 int 0x16
push $0x17 # Int 0x2f: IRQ15
jmp int_hw # V86 int 0x17
-#else
- push $0x70 # Int 0x28: IRQ8
- jmp int_hw # V86 int 0x70
- push $0x71 # Int 0x29: IRQ9
- jmp int_hw # V86 int 0x71
- push $0x72 # Int 0x2a: IRQ10
- jmp int_hw # V86 int 0x72
- push $0x73 # Int 0x2b: IRQ11
- jmp int_hw # V86 int 0x73
- push $0x74 # Int 0x2c: IRQ12
- jmp int_hw # V86 int 0x74
- push $0x75 # Int 0x2d: IRQ13
- jmp int_hw # V86 int 0x75
- push $0x76 # Int 0x2e: IRQ14
- jmp int_hw # V86 int 0x76
- push $0x77 # Int 0x2f: IRQ15
- jmp int_hw # V86 int 0x77
-#endif
/*
* Reflect hardware interrupts.
*/
@@ -1163,17 +1087,9 @@ putchr: pusha # Save
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 putchr.1 # No
- xorw %di,%di # Regen buffer (mono)
-#endif
putchr.1: cmpb $0xa,%al # New line?
je putchr.2 # Yes
-#ifdef PC98
movw %dx,%cx
movb %al,(%edi,%ecx,1) # Write char
addl $0x2000,%ecx
@@ -1187,39 +1103,17 @@ putchr.2: movw %dx,%ax
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 putchr.3 # No
-putchr.2: xorb %dl,%dl # Zero column
- incb %dh # Bump row
-putchr.3: cmpb $SCR_ROW,%dh # Beyond screen?
-#endif
jb 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 $0x20,%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
putchr.4: movw %dx,(%ebx) # Update position
popa # Restore
ret # To caller
diff --git a/sys/boot/pc98/btx/btxldr/Makefile b/sys/boot/pc98/btx/btxldr/Makefile
index 726149f..ba7a993 100644
--- a/sys/boot/pc98/btx/btxldr/Makefile
+++ b/sys/boot/pc98/btx/btxldr/Makefile
@@ -5,7 +5,6 @@ INTERNALPROG=
NO_MAN=
SRCS= btxldr.S
-CFLAGS+=-DPC98
CFLAGS+=-DLOADER_ADDRESS=${LOADER_ADDRESS}
.if defined(BTXLDR_VERBOSE)
diff --git a/sys/boot/pc98/btx/btxldr/btxldr.S b/sys/boot/pc98/btx/btxldr/btxldr.S
index 9c414a6..2104605 100644
--- a/sys/boot/pc98/btx/btxldr/btxldr.S
+++ b/sys/boot/pc98/btx/btxldr/btxldr.S
@@ -43,24 +43,14 @@
/*
* Screen constants.
*/
-#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_MEM,0xa1501 # Free memory
.set BDA_POS,0xa153e # Cursor position
-#else
- .set BDA_MEM,0x413 # Free memory
- .set BDA_SCR,0x449 # Video mode
- .set BDA_POS,0x450 # Cursor position
-#endif
/*
* Required by aout gas inadequacy.
*/
@@ -73,7 +63,6 @@
* BTX program loader for ELF clients.
*/
start: cld # String ops inc
-#ifdef PC98
cli
gdcwait.1: inb $0x60,%al
testb $0x04,%al
@@ -94,17 +83,12 @@ gdcwait.2: inb $0x60,%al
shlw $1,%dx
movl $BDA_POS,%ebx
movw %dx,(%ebx)
-#endif
movl $m_logo,%esi # Identify
call putstr # ourselves
movzwl BDA_MEM,%eax # Get base memory
-#ifdef PC98
andl $0x7,%eax
incl %eax
shll $0x11,%eax # in bytes
-#else
- shll $0xa,%eax # in bytes
-#endif
movl %eax,%ebp # Base of user stack
#ifdef BTXLDR_VERBOSE
movl $m_mem,%esi # Display
@@ -330,17 +314,9 @@ putchr: pusha # Save
movb $SCR_MAT,%ah # Mode/attribute
movl $BDA_POS,%ebx # BDA pointer
movw (%ebx),%dx # Cursor position
-#ifdef PC98
movl $0xa0000,%edi # Regen buffer (color)
-#else
- movl $0xb8000,%edi # Regen buffer (color)
- cmpb %ah,BDA_SCR-BDA_POS(%ebx) # Mono mode?
- jne putchr.1 # No
- xorw %di,%di # Regen buffer (mono)
-#endif
putchr.1: cmpb $0xa,%al # New line?
je putchr.2 # Yes
-#ifdef PC98
movw %dx,%cx
movb %al,(%edi,%ecx,1) # Write char
addl $0x2000,%ecx
@@ -354,35 +330,16 @@ putchr.2: movw %dx,%ax
mul %dl
movw %ax,%dx
putchr.3: cmpw $SCR_COL*SCR_ROW*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 putchr.3 # No
-putchr.2: xorb %dl,%dl # Zero column
- incb %dh # Bump row
-putchr.3: cmpb $SCR_ROW,%dh # Beyond screen?
-#endif
jb 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
putchr.4: movw %dx,(%ebx) # Update position
shrw $1,%dx
@@ -395,10 +352,6 @@ gdcwait.3: inb $0x60,%al
outb %al,$0x60
movb %dh,%al
outb %al,$0x60
-#else
- movb $SCR_ROW-1,%dh # Bottom line
-putchr.4: movw %dx,(%ebx) # Update position
-#endif
popa # Restore
ret # To caller
/*
diff --git a/sys/boot/pc98/kgzldr/Makefile b/sys/boot/pc98/kgzldr/Makefile
index e90a0b3..2303fd9 100644
--- a/sys/boot/pc98/kgzldr/Makefile
+++ b/sys/boot/pc98/kgzldr/Makefile
@@ -15,8 +15,6 @@ LDFLAGS=-Wl,-r
.PATH: ${.CURDIR}/../../i386/kgzldr
BOOT_COMCONSOLE_PORT?= 0x238
-
-AFLAGS+=--defsym PC98=1
AFLAGS+=--defsym SIO_PRT=${BOOT_COMCONSOLE_PORT}
.include <bsd.prog.mk>
diff --git a/sys/boot/pc98/kgzldr/crt.s b/sys/boot/pc98/kgzldr/crt.s
index 1435435..e028bc8 100644
--- a/sys/boot/pc98/kgzldr/crt.s
+++ b/sys/boot/pc98/kgzldr/crt.s
@@ -29,22 +29,13 @@
# 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
@@ -56,17 +47,9 @@ crt_putchr: movb 0x4(%esp,1),%al # Get character
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
@@ -80,39 +63,17 @@ crt_putchr.2: movw %dx,%ax
mul %dl
movw %ax,%dx
crt_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
diff --git a/sys/boot/pc98/libpc98/Makefile b/sys/boot/pc98/libpc98/Makefile
index c5162b4..161bbad 100644
--- a/sys/boot/pc98/libpc98/Makefile
+++ b/sys/boot/pc98/libpc98/Makefile
@@ -24,7 +24,6 @@ CFLAGS+= -DDISK_DEBUG
# Include simple terminal emulation (cons25-compatible)
CFLAGS+= -DTERM_EMU
-CFLAGS+= -DPC98
CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../btx/lib \
-I${.CURDIR}/../../i386/libi386 \
-I${.CURDIR}/../../.. -I.
diff --git a/sys/boot/pc98/libpc98/biosdisk.c b/sys/boot/pc98/libpc98/biosdisk.c
index ec0d9a4..ba736fc 100644
--- a/sys/boot/pc98/libpc98/biosdisk.c
+++ b/sys/boot/pc98/libpc98/biosdisk.c
@@ -81,9 +81,7 @@ struct open_disk {
#define BD_FLOPPY 0x0004
#define BD_LABELOK 0x0008
#define BD_PARTTABOK 0x0010
-#ifdef PC98
#define BD_OPTICAL 0x0020
-#endif
struct disklabel od_disklabel;
int od_nslices; /* slice count */
struct pc98_partition od_slicetab[NDOSPART];
@@ -98,9 +96,7 @@ static struct bdinfo
int bd_unit; /* BIOS unit number */
int bd_flags;
int bd_type; /* BIOS 'drive type' (floppy only) */
-#ifdef PC98
int bd_da_unit; /* kernel unit number for da */
-#endif
} bdinfo [MAXBDDEV];
static int nbdinfo = 0;
@@ -174,7 +170,6 @@ bd_unit2bios(int unit)
static int
bd_init(void)
{
-#ifdef PC98
int base, unit;
int da_drive=0, n=-0x10;
@@ -210,32 +205,6 @@ bd_init(void)
nbdinfo++;
}
}
-#else
- int base, unit, nfd = 0;
-
- /* sequence 0, 0x80 */
- for (base = 0; base <= 0x80; base += 0x80) {
- for (unit = base; (nbdinfo < MAXBDDEV); unit++) {
- /* check the BIOS equipment list for number of fixed disks */
- if((base == 0x80) &&
- (nfd >= *(unsigned char *)PTOV(BIOS_NUMDRIVES)))
- break;
-
- bdinfo[nbdinfo].bd_unit = unit;
- bdinfo[nbdinfo].bd_flags = (unit < 0x80) ? BD_FLOPPY : 0;
-
- if (!bd_int13probe(&bdinfo[nbdinfo]))
- break;
-
- /* XXX we need "disk aliases" to make this simpler */
- printf("BIOS drive %c: is disk%d\n",
- (unit < 0x80) ? ('A' + unit) : ('C' + unit - 0x80), nbdinfo);
- nbdinfo++;
- if (base == 0x80)
- nfd++;
- }
- }
-#endif
return(0);
}
@@ -245,7 +214,6 @@ bd_init(void)
static int
bd_int13probe(struct bdinfo *bd)
{
-#ifdef PC98
int addr;
if (bd->bd_flags & BD_FLOPPY) {
@@ -269,34 +237,6 @@ bd_int13probe(struct bdinfo *bd)
}
}
return(0);
-#else
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0x800;
- v86.edx = bd->bd_unit;
- v86int();
-
- if (!(v86.efl & 0x1) && /* carry clear */
- ((v86.edx & 0xff) > ((unsigned)bd->bd_unit & 0x7f))) { /* unit # OK */
- bd->bd_flags |= BD_MODEINT13;
- bd->bd_type = v86.ebx & 0xff;
-
- /* Determine if we can use EDD with this device. */
- v86.eax = 0x4100;
- v86.edx = bd->bd_unit;
- v86.ebx = 0x55aa;
- v86int();
- if (!(v86.efl & 0x1) && /* carry clear */
- ((v86.ebx & 0xffff) == 0xaa55) && /* signature */
- (v86.ecx & 0x1)) { /* packets mode ok */
- bd->bd_flags |= BD_MODEEDD1;
- if((v86.eax & 0xff00) > 0x300)
- bd->bd_flags |= BD_MODEEDD3;
- }
- return(1);
- }
- return(0);
-#endif
}
/*
@@ -312,12 +252,7 @@ bd_print(int verbose)
struct pc98_partition *dptr;
for (i = 0; i < nbdinfo; i++) {
-#ifdef PC98
sprintf(line, " disk%d: BIOS drive %c:\n", i, 'A' + i);
-#else
- sprintf(line, " disk%d: BIOS drive %c:\n", i,
- (bdinfo[i].bd_unit < 0x80) ? ('A' + bdinfo[i].bd_unit) : ('C' + bdinfo[i].bd_unit - 0x80));
-#endif
pager_output(line);
/* try to open the whole disk */
@@ -332,7 +267,6 @@ bd_print(int verbose)
dptr = &od->od_slicetab[0];
/* Check for a "dedicated" disk */
-#ifdef PC98
for (j = 0; j < od->od_nslices; j++) {
switch(dptr[j].dp_mid) {
case DOSMID_386BSD:
@@ -346,103 +280,12 @@ bd_print(int verbose)
break;
}
}
-#else
- if ((dptr[3].dp_typ == DOSPTYP_386BSD) &&
- (dptr[3].dp_start == 0) &&
- (dptr[3].dp_size == 50000)) {
- sprintf(line, " disk%d", i);
- bd_printbsdslice(od, 0, line, verbose);
- } else {
- for (j = 0; j < od->od_nslices; j++) {
- sprintf(line, " disk%ds%d", i, j + 1);
- bd_printslice(od, &dptr[j], line, verbose);
- }
- }
-#endif
}
bd_closedisk(od);
}
}
}
-#ifndef PC98
-/*
- * Print information about slices on a disk. For the size calculations we
- * assume a 512 byte sector.
- */
-static void
-bd_printslice(struct open_disk *od, struct dos_partition *dp, char *prefix,
- int verbose)
-{
- char line[80];
-
- switch (dp->dp_typ) {
- case DOSPTYP_386BSD:
- bd_printbsdslice(od, (daddr_t)dp->dp_start, prefix, verbose);
- return;
- case DOSPTYP_LINSWP:
- if (verbose)
- sprintf(line, "%s: Linux swap %.6dMB (%d - %d)\n",
- prefix, dp->dp_size / 2048,
- dp->dp_start, dp->dp_start + dp->dp_size);
- else
- sprintf(line, "%s: Linux swap\n", prefix);
- break;
- case DOSPTYP_LINUX:
- /*
- * XXX
- * read the superblock to confirm this is an ext2fs partition?
- */
- if (verbose)
- sprintf(line, "%s: ext2fs %.6dMB (%d - %d)\n", prefix,
- dp->dp_size / 2048, dp->dp_start,
- dp->dp_start + dp->dp_size);
- else
- sprintf(line, "%s: ext2fs\n", prefix);
- break;
- case 0x00: /* unused partition */
- case DOSPTYP_EXT:
- return;
- case 0x01:
- if (verbose)
- sprintf(line, "%s: FAT-12 %.6dMB (%d - %d)\n", prefix,
- dp->dp_size / 2048, dp->dp_start,
- dp->dp_start + dp->dp_size);
- else
- sprintf(line, "%s: FAT-12\n", prefix);
- break;
- case 0x04:
- case 0x06:
- case 0x0e:
- if (verbose)
- sprintf(line, "%s: FAT-16 %.6dMB (%d - %d)\n", prefix,
- dp->dp_size / 2048, dp->dp_start,
- dp->dp_start + dp->dp_size);
- else
- sprintf(line, "%s: FAT-16\n", prefix);
- break;
- case 0x0b:
- case 0x0c:
- if (verbose)
- sprintf(line, "%s: FAT-32 %.6dMB (%d - %d)\n", prefix,
- dp->dp_size / 2048, dp->dp_start,
- dp->dp_start + dp->dp_size);
- else
- sprintf(line, "%s: FAT-32\n", prefix);
- break;
- default:
- if (verbose)
- sprintf(line, "%s: Unknown fs: 0x%x %.6dMB (%d - %d)\n",
- prefix, dp->dp_typ, dp->dp_size / 2048,
- dp->dp_start, dp->dp_start + dp->dp_size);
- else
- sprintf(line, "%s: Unknown fs: 0x%x\n", prefix,
- dp->dp_typ);
- }
- pager_output(line);
-}
-#endif
-
/*
* Print out each valid partition in the disklabel of a FreeBSD slice.
* For size calculations, we assume a 512 byte sector size.
@@ -580,12 +423,10 @@ bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
/*
* Find the slice in the DOS slice table.
*/
-#ifdef PC98
if (od->od_flags & BD_FLOPPY) {
sector = 0;
goto unsliced;
}
-#endif
if (bd_read(od, 0, 1, buf)) {
DEBUG("error reading MBR");
error = EIO;
@@ -605,26 +446,18 @@ bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
sector = 0;
goto unsliced; /* may be a floppy */
}
-#ifdef PC98
if (bd_read(od, 1, 1, buf)) {
DEBUG("error reading MBR");
error = EIO;
goto out;
}
-#endif
/*
* copy the partition table, then pick up any extended partitions.
*/
bcopy(buf + DOSPARTOFF, &od->od_slicetab,
sizeof(struct pc98_partition) * NDOSPART);
-#ifdef PC98
od->od_nslices = NDOSPART; /* extended slices start here */
-#else
- od->od_nslices = 4; /* extended slices start here */
- for (i = 0; i < NDOSPART; i++)
- bd_checkextended(od, i);
-#endif
od->od_flags |= BD_PARTTABOK;
dptr = &od->od_slicetab[0];
@@ -646,18 +479,6 @@ bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
}
}
-#ifndef PC98
- /*
- * Check for the historically bogus MBR found on true dedicated disks
- */
- if ((dptr[3].dp_typ == DOSPTYP_386BSD) &&
- (dptr[3].dp_start == 0) &&
- (dptr[3].dp_size == 50000)) {
- sector = 0;
- goto unsliced;
- }
-#endif
-
/* Try to auto-detect the best slice; this should always give a slice number */
if (dev->d_kind.biosdisk.slice == 0) {
slice = bd_bestslice(od);
@@ -674,7 +495,6 @@ bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
* at a DOS partition).
*/
dptr += (dev->d_kind.biosdisk.slice - 1); /* we number 1-4, offsets are 0-3 */
-#ifdef PC98
sector = dptr->dp_scyl * od->od_hds * od->od_sec +
dptr->dp_shd * od->od_sec + dptr->dp_ssect;
{
@@ -683,19 +503,11 @@ bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
DEBUG("slice entry %d at %d, %d sectors",
dev->d_kind.biosdisk.slice - 1, sector, end-sector);
}
-#else
- sector = dptr->dp_start;
- DEBUG("slice entry %d at %d, %d sectors", dev->d_kind.biosdisk.slice - 1, sector, dptr->dp_size);
-#endif
/*
* If we are looking at a BSD slice, and the partition is < 0, assume the 'a' partition
*/
-#ifdef PC98
if ((dptr->dp_mid == DOSMID_386BSD) && (dev->d_kind.biosdisk.partition < 0))
-#else
- if ((dptr->dp_typ == DOSPTYP_386BSD) && (dev->d_kind.biosdisk.partition < 0))
-#endif
dev->d_kind.biosdisk.partition = 0;
unsliced:
@@ -755,51 +567,6 @@ bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
return(error);
}
-#ifndef PC98
-static void
-bd_checkextended(struct open_disk *od, int slicenum)
-{
- char buf[BIOSDISK_SECSIZE];
- struct dos_partition *dp;
- u_int base;
- int i, start, end;
-
- dp = &od->od_slicetab[slicenum];
- start = od->od_nslices;
-
- if (dp->dp_size == 0)
- goto done;
- if (dp->dp_typ != DOSPTYP_EXT)
- goto done;
- if (bd_read(od, (daddr_t)dp->dp_start, 1, buf))
- goto done;
- if (((u_char)buf[0x1fe] != 0x55) || ((u_char)buf[0x1ff] != 0xaa)) {
- DEBUG("no magic in extended table");
- goto done;
- }
- base = dp->dp_start;
- dp = (struct dos_partition *)(&buf[DOSPARTOFF]);
- for (i = 0; i < NDOSPART; i++, dp++) {
- if (dp->dp_size == 0)
- continue;
- if (od->od_nslices == NDOSPART)
- goto done;
- dp->dp_start += base;
- bcopy(dp, &od->od_slicetab[od->od_nslices], sizeof(*dp));
- od->od_nslices++;
- }
- end = od->od_nslices;
-
- /*
- * now, recursively check the slices we just added
- */
- for (i = start; i < end; i++)
- bd_checkextended(od, i);
-done:
- return;
-}
-#endif
-
/*
* Search for a slice with the following preferences:
*
@@ -834,8 +601,6 @@ bd_bestslice(struct open_disk *od)
dp = &od->od_slicetab[0];
for (i = 0; i < od->od_nslices; i++, dp++) {
-
-#ifdef PC98
switch(dp->dp_mid & 0x7f) {
case DOSMID_386BSD & 0x7f: /* FreeBSD */
if ((dp->dp_mid & 0x80) &&
@@ -864,33 +629,6 @@ bd_bestslice(struct open_disk *od)
}
break;
}
-#else
- switch (dp->dp_typ) {
- case DOSPTYP_386BSD: /* FreeBSD */
- pref = dp->dp_flag & 0x80 ? PREF_FBSD_ACT : PREF_FBSD;
- break;
-
- case DOSPTYP_LINUX:
- pref = dp->dp_flag & 0x80 ? PREF_LINUX_ACT : PREF_LINUX;
- break;
-
- case 0x01: /* DOS/Windows */
- case 0x04:
- case 0x06:
- case 0x0b:
- case 0x0c:
- case 0x0e:
- pref = dp->dp_flag & 0x80 ? PREF_DOS_ACT : PREF_DOS;
- break;
-
- default:
- pref = PREF_NONE;
- }
- if (pref < preflevel) {
- preflevel = pref;
- prefslice = i + 1;
- }
-#endif
}
return (prefslice);
}
@@ -1016,12 +754,7 @@ bd_read(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
p = dest;
/* Decide whether we have to bounce */
-#ifdef PC98
- if (
-#else
- if ((od->od_unit < 0x80) &&
-#endif
- ((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16))) {
+ if (((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16))) {
/*
* There is a 64k physical boundary somewhere in the destination buffer, so we have
@@ -1029,11 +762,7 @@ bd_read(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
* need to. Use the bottom half unless there is a break there, in which case we
* use the top half.
*/
-#ifdef PC98
x = min(od->od_sec, (unsigned)blks);
-#else
- x = min(FLOPPY_BOUNCEBUF, (unsigned)blks);
-#endif
bbuf = malloc(x * 2 * BIOSDISK_SECSIZE);
if (((u_int32_t)VTOP(bbuf) & 0xffff0000) == ((u_int32_t)VTOP(bbuf + x * BIOSDISK_SECSIZE) & 0xffff0000)) {
breg = bbuf;
@@ -1062,31 +791,19 @@ bd_read(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
xp = bbuf == NULL ? p : breg;
/* correct sector number for 1-based BIOS numbering */
-#ifdef PC98
if ((od->od_unit & 0xf0) == 0x30 || (od->od_unit & 0xf0) == 0x90)
sec++;
-#else
- sec++;
-#endif
/* Loop retrying the operation a couple of times. The BIOS may also retry. */
for (retry = 0; retry < 3; retry++) {
/* if retrying, reset the drive */
if (retry > 0) {
-#ifdef PC98
v86.ctl = V86_FLAGS;
v86.addr = 0x1b;
v86.eax = 0x0300 | od->od_unit;
-#else
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0;
- v86.edx = od->od_unit;
-#endif
v86int();
}
-#ifdef PC98
v86.ctl = V86_FLAGS;
v86.addr = 0x1b;
if (od->od_flags & BD_FLOPPY) {
@@ -1111,64 +828,14 @@ bd_read(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
result = (v86.efl & 0x1);
if (result == 0)
break;
-#else
- if(cyl > 1023) {
- /* use EDD if the disk supports it, otherwise, return error */
- if(od->od_flags & BD_MODEEDD1) {
- static unsigned short packet[8];
-
- packet[0] = 0x10;
- packet[1] = x;
- packet[2] = VTOPOFF(xp);
- packet[3] = VTOPSEG(xp);
- packet[4] = dblk & 0xffff;
- packet[5] = dblk >> 16;
- packet[6] = 0;
- packet[7] = 0;
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0x4200;
- v86.edx = od->od_unit;
- v86.ds = VTOPSEG(packet);
- v86.esi = VTOPOFF(packet);
- v86int();
- result = (v86.efl & 0x1);
- if(result == 0)
- break;
- } else {
- result = 1;
- break;
- }
- } else {
- /* Use normal CHS addressing */
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0x200 | x;
- v86.ecx = ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
- v86.edx = (hd << 8) | od->od_unit;
- v86.es = VTOPSEG(xp);
- v86.ebx = VTOPOFF(xp);
- v86int();
- result = (v86.efl & 0x1);
- if (result == 0)
- break;
- }
-#endif
}
-#ifdef PC98
DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd, od->od_flags & BD_FLOPPY ? sec - 1 : sec, p, VTOP(p), result ? "failed" : "ok");
/* BUG here, cannot use v86 in printf because putchar uses it too */
DEBUG("ax = 0x%04x cx = 0x%04x dx = 0x%04x status 0x%x",
od->od_flags & BD_FLOPPY ? 0xd600 | od->od_unit : 0x0600 | od->od_unit,
od->od_flags & BD_FLOPPY ? 0x0200 | cyl : cyl, (hd << 8) | sec,
(v86.eax >> 8) & 0xff);
-#else
- DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd, sec - 1, p, VTOP(p), result ? "failed" : "ok");
- /* BUG here, cannot use v86 in printf because putchar uses it too */
- DEBUG("ax = 0x%04x cx = 0x%04x dx = 0x%04x status 0x%x",
- 0x200 | x, ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec, (hd << 8) | od->od_unit, (v86.eax >> 8) & 0xff);
-#endif
if (result) {
if (bbuf != NULL)
free(bbuf);
@@ -1203,12 +870,7 @@ bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
p = dest;
/* Decide whether we have to bounce */
-#ifdef PC98
- if (
-#else
- if ((od->od_unit < 0x80) &&
-#endif
- ((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16))) {
+ if (((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16))) {
/*
* There is a 64k physical boundary somewhere in the destination buffer, so we have
@@ -1217,11 +879,7 @@ bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
* use the top half.
*/
-#ifdef PC98
x = min(od->od_sec, (unsigned)blks);
-#else
- x = min(FLOPPY_BOUNCEBUF, (unsigned)blks);
-#endif
bbuf = malloc(x * 2 * BIOSDISK_SECSIZE);
if (((u_int32_t)VTOP(bbuf) & 0xffff0000) == ((u_int32_t)VTOP(bbuf + x * BIOSDISK_SECSIZE) & 0xffff0000)) {
breg = bbuf;
@@ -1250,13 +908,8 @@ bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
xp = bbuf == NULL ? p : breg;
/* correct sector number for 1-based BIOS numbering */
-#ifdef PC98
if ((od->od_unit & 0xf0) == 0x30 || (od->od_unit & 0xf0) == 0x90)
sec++;
-#else
- sec++;
-#endif
-
/* Put your Data In, Put your Data out,
Put your Data In, and shake it all about
@@ -1271,20 +924,12 @@ bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
for (retry = 0; retry < 3; retry++) {
/* if retrying, reset the drive */
if (retry > 0) {
-#ifdef PC98
v86.ctl = V86_FLAGS;
v86.addr = 0x1b;
v86.eax = 0x0300 | od->od_unit;
-#else
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0;
- v86.edx = od->od_unit;
-#endif
v86int();
}
-#ifdef PC98
v86.ctl = V86_FLAGS;
v86.addr = 0x1b;
if (od->od_flags & BD_FLOPPY) {
@@ -1302,53 +947,8 @@ bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
result = (v86.efl & 0x1);
if (result == 0)
break;
-#else
- if(cyl > 1023) {
- /* use EDD if the disk supports it, otherwise, return error */
- if(od->od_flags & BD_MODEEDD1) {
- static unsigned short packet[8];
-
- packet[0] = 0x10;
- packet[1] = x;
- packet[2] = VTOPOFF(xp);
- packet[3] = VTOPSEG(xp);
- packet[4] = dblk & 0xffff;
- packet[5] = dblk >> 16;
- packet[6] = 0;
- packet[7] = 0;
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- /* Should we Write with verify ?? 0x4302 ? */
- v86.eax = 0x4300;
- v86.edx = od->od_unit;
- v86.ds = VTOPSEG(packet);
- v86.esi = VTOPOFF(packet);
- v86int();
- result = (v86.efl & 0x1);
- if(result == 0)
- break;
- } else {
- result = 1;
- break;
- }
- } else {
- /* Use normal CHS addressing */
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0x300 | x;
- v86.ecx = ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
- v86.edx = (hd << 8) | od->od_unit;
- v86.es = VTOPSEG(xp);
- v86.ebx = VTOPOFF(xp);
- v86int();
- result = (v86.efl & 0x1);
- if (result == 0)
- break;
- }
-#endif
}
-#ifdef PC98
DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd,
od->od_flags & BD_FLOPPY ? sec - 1 : sec, p, VTOP(p),
result ? "failed" : "ok");
@@ -1357,12 +957,7 @@ bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
od->od_flags & BD_FLOPPY ? 0xd600 | od->od_unit : 0x0600 | od->od_unit,
od->od_flags & BD_FLOPPY ? 0x0200 | cyl : cyl, (hd << 8) | sec,
(v86.eax >> 8) & 0xff);
-#else
- DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd, sec - 1, p, VTOP(p), result ? "failed" : "ok");
- /* BUG here, cannot use v86 in printf because putchar uses it too */
- DEBUG("ax = 0x%04x cx = 0x%04x dx = 0x%04x status 0x%x",
- 0x200 | x, ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec, (hd << 8) | od->od_unit, (v86.eax >> 8) & 0xff);
-#endif
+
if (result) {
if (bbuf != NULL)
free(bbuf);
@@ -1379,7 +974,6 @@ static int
bd_getgeom(struct open_disk *od)
{
-#ifdef PC98
if (od->od_flags & BD_FLOPPY) {
od->od_cyl = 79;
od->od_hds = 2;
@@ -1400,23 +994,6 @@ bd_getgeom(struct open_disk *od)
if (v86.efl & 0x1)
return(1);
}
-#else
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0x800;
- v86.edx = od->od_unit;
- v86int();
-
- if ((v86.efl & 0x1) || /* carry set */
- ((v86.edx & 0xff) <= (unsigned)(od->od_unit & 0x7f))) /* unit # bad */
- return(1);
-
- /* convert max cyl # -> # of cylinders */
- od->od_cyl = ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1;
- /* convert max head # -> # of heads */
- od->od_hds = ((v86.edx & 0xff00) >> 8) + 1;
- od->od_sec = v86.ecx & 0x3f;
-#endif
DEBUG("unit 0x%x geometry %d/%d/%d", od->od_unit, od->od_cyl, od->od_hds, od->od_sec);
return(0);
@@ -1439,8 +1016,6 @@ bd_getgeom(struct open_disk *od)
u_int32_t
bd_getbigeom(int bunit)
{
-
-#ifdef PC98
int hds = 0;
int unit = 0x80; /* IDE HDD */
u_int addr = 0xA155d;
@@ -1470,17 +1045,6 @@ bd_getbigeom(int bunit)
if (v86.efl & 0x1)
return 0x4F020F; /* 1200KB FD C:80 H:2 S:15 */
return ((v86.ecx & 0xffff) << 16) | (v86.edx & 0xffff);
-#else
- v86.ctl = V86_FLAGS;
- v86.addr = 0x13;
- v86.eax = 0x800;
- v86.edx = 0x80 + bunit;
- v86int();
- if (v86.efl & 0x1)
- return 0x4f010f;
- return ((v86.ecx & 0xc0) << 18) | ((v86.ecx & 0xff00) << 8) |
- (v86.edx & 0xff00) | (v86.ecx & 0x3f);
-#endif
}
/*
@@ -1506,11 +1070,7 @@ bd_getdev(struct i386_devdesc *dev)
if (bd_opendisk(&od, dev) != 0) /* oops, not a viable device */
return(-1);
-#ifdef PC98
if ((biosdev & 0xf0) == 0x90 || (biosdev & 0xf0) == 0x30) {
-#else
- if (biosdev < 0x80) {
-#endif
/* floppy (or emulated floppy) or ATAPI device */
if (bdinfo[dev->d_kind.biosdisk.unit].bd_type == DT_ATAPI) {
/* is an ATAPI disk */
@@ -1537,14 +1097,10 @@ bd_getdev(struct i386_devdesc *dev)
}
}
/* default root disk unit number */
-#ifdef PC98
if ((biosdev & 0xf0) == 0xa0)
unit = bdinfo[dev->d_kind.biosdisk.unit].bd_da_unit;
else
unit = biosdev & 0xf;
-#else
- unit = (biosdev & 0x7f) - unitofs;
-#endif
/* XXX a better kludge to set the root disk unit number */
if ((nip = getenv("root_disk_unit")) != NULL) {
diff --git a/sys/boot/pc98/libpc98/biosmem.c b/sys/boot/pc98/libpc98/biosmem.c
index e2e792c..4f22086 100644
--- a/sys/boot/pc98/libpc98/biosmem.c
+++ b/sys/boot/pc98/libpc98/biosmem.c
@@ -37,76 +37,13 @@ __FBSDID("$FreeBSD$");
vm_offset_t memtop;
u_int32_t bios_basemem, bios_extmem;
-#ifndef PC98
-#define SMAPSIG 0x534D4150
-
-struct smap {
- u_int64_t base;
- u_int64_t length;
- u_int32_t type;
-} __packed;
-
-static struct smap smap;
-#endif
-
void
bios_getmem(void)
{
-#ifdef PC98
bios_basemem = ((*(u_char *)PTOV(0xA1501) & 0x07) + 1) * 128 * 1024;
bios_extmem = *(u_char *)PTOV(0xA1401) * 128 * 1024 +
*(u_int16_t *)PTOV(0xA1594) * 1024 * 1024;
-#else
- /* Parse system memory map */
- v86.ebx = 0;
- do {
- v86.ctl = V86_FLAGS;
- v86.addr = 0x15; /* int 0x15 function 0xe820*/
- v86.eax = 0xe820;
- v86.ecx = sizeof(struct smap);
- v86.edx = SMAPSIG;
- v86.es = VTOPSEG(&smap);
- v86.edi = VTOPOFF(&smap);
- v86int();
- if ((v86.efl & 1) || (v86.eax != SMAPSIG))
- break;
- /* look for a low-memory segment that's large enough */
- if ((smap.type == 1) && (smap.base == 0) && (smap.length >= (512 * 1024)))
- bios_basemem = smap.length;
- /* look for the first segment in 'extended' memory */
- if ((smap.type == 1) && (smap.base == 0x100000)) {
- bios_extmem = smap.length;
- }
- } while (v86.ebx != 0);
-
- /* Fall back to the old compatibility function for base memory */
- if (bios_basemem == 0) {
- v86.ctl = 0;
- v86.addr = 0x12; /* int 0x12 */
- v86int();
-
- bios_basemem = (v86.eax & 0xffff) * 1024;
- }
-
- /* Fall back through several compatibility functions for extended memory */
- if (bios_extmem == 0) {
- v86.ctl = V86_FLAGS;
- v86.addr = 0x15; /* int 0x15 function 0xe801*/
- v86.eax = 0xe801;
- v86int();
- if (!(v86.efl & 1)) {
- bios_extmem = ((v86.ecx & 0xffff) + ((v86.edx & 0xffff) * 64)) * 1024;
- }
- }
- if (bios_extmem == 0) {
- v86.ctl = 0;
- v86.addr = 0x15; /* int 0x15 function 0x88*/
- v86.eax = 0x8800;
- v86int();
- bios_extmem = (v86.eax & 0xffff) * 1024;
- }
-#endif
/* Set memtop to actual top of memory */
memtop = 0x100000 + bios_extmem;
diff --git a/sys/boot/pc98/libpc98/comconsole.c b/sys/boot/pc98/libpc98/comconsole.c
index 71c8a5d..155ecb5 100644
--- a/sys/boot/pc98/libpc98/comconsole.c
+++ b/sys/boot/pc98/libpc98/comconsole.c
@@ -1,4 +1,4 @@
-/*
+/*-
* Copyright (c) 1998 Michael Smith (msmith@freebsd.org)
*
* Redistribution and use in source and binary forms, with or without
@@ -37,11 +37,7 @@ __FBSDID("$FreeBSD$");
#define COMC_BPS(x) (115200 / (x)) /* speed to DLAB divisor */
#ifndef COMPORT
-#ifdef PC98
#define COMPORT 0x238
-#else
-#define COMPORT 0x3f8
-#endif
#endif
#ifndef COMSPEED
#define COMSPEED 9600
diff --git a/sys/boot/pc98/libpc98/gatea20.c b/sys/boot/pc98/libpc98/gatea20.c
index 677a11e..3928064 100644
--- a/sys/boot/pc98/libpc98/gatea20.c
+++ b/sys/boot/pc98/libpc98/gatea20.c
@@ -2,11 +2,11 @@
* $NetBSD: gatea20.c,v 1.2 1997/10/29 00:32:49 fvdl Exp $
*/
+/* extracted from freebsd:sys/i386/boot/biosboot/io.c */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-/* extracted from freebsd:sys/i386/boot/biosboot/io.c */
-
#include <stand.h>
#include <machine/cpufunc.h>
@@ -36,24 +36,7 @@ static unsigned char x_20 = KB_A20;
void gateA20()
{
__asm("pushfl ; cli");
-#ifdef PC98
outb(0xf2, 0x00);
outb(0xf6, 0x02);
-#else /* IBM PC */
-#ifdef IBM_L40
- outb(0x92, 0x2);
-#else /* !IBM_L40 */
- while (inb(K_STATUS) & K_IBUF_FUL);
- while (inb(K_STATUS) & K_OBUF_FUL)
- (void)inb(K_RDWR);
-
- outb(K_CMD, KC_CMD_WOUT);
- delay(100);
- while (inb(K_STATUS) & K_IBUF_FUL);
- outb(K_RDWR, x_20);
- delay(100);
- while (inb(K_STATUS) & K_IBUF_FUL);
-#endif /* IBM_L40 */
-#endif /* IBM PC */
__asm("popfl");
}
diff --git a/sys/boot/pc98/libpc98/time.c b/sys/boot/pc98/libpc98/time.c
index 406b180..b8dbe02 100644
--- a/sys/boot/pc98/libpc98/time.c
+++ b/sys/boot/pc98/libpc98/time.c
@@ -29,9 +29,7 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <btxv86.h>
-#ifdef PC98
#include <machine/cpufunc.h>
-#endif
#include "bootstrap.h"
#include "libi386.h"
@@ -48,32 +46,18 @@ time(time_t *t)
{
static time_t lasttime, now;
int hr, minute, sec;
-
-#ifdef PC98
unsigned char bios_time[6];
-#endif
v86.ctl = 0;
-#ifdef PC98
v86.addr = 0x1c; /* int 0x1c, function 0 */
v86.eax = 0x0000;
v86.es = VTOPSEG(bios_time);
v86.ebx = VTOPOFF(bios_time);
-#else
- v86.addr = 0x1a; /* int 0x1a, function 2 */
- v86.eax = 0x0200;
-#endif
v86int();
-#ifdef PC98
hr = bcd2bin(bios_time[3]);
minute = bcd2bin(bios_time[4]);
sec = bcd2bin(bios_time[5]);
-#else
- hr = bcd2bin((v86.ecx & 0xff00) >> 8); /* hour in %ch */
- minute = bcd2bin(v86.ecx & 0xff); /* minute in %cl */
- sec = bcd2bin((v86.edx & 0xff00) >> 8); /* second in %dh */
-#endif
now = hr * 3600 + minute * 60 + sec;
if (now < lasttime)
@@ -94,18 +78,10 @@ time(time_t *t)
void
delay(int period)
{
-#ifdef PC98
int i;
+
period = (period + 500) / 1000;
for( ; period != 0 ; period--)
for(i=800;i != 0; i--)
outb(0x5f,0); /* wait 600ns */
-#else
- v86.ctl = 0;
- v86.addr = 0x15; /* int 0x15, function 0x86 */
- v86.eax = 0x8600;
- v86.ecx = period >> 16;
- v86.edx = period & 0xffff;
- v86int();
-#endif
}
diff --git a/sys/boot/pc98/libpc98/vidconsole.c b/sys/boot/pc98/libpc98/vidconsole.c
index be5b561..19fb981 100644
--- a/sys/boot/pc98/libpc98/vidconsole.c
+++ b/sys/boot/pc98/libpc98/vidconsole.c
@@ -1,4 +1,4 @@
-/*
+/*-
* Copyright (c) 1998 Michael Smith (msmith@freebsd.org)
* Copyright (c) 1997 Kazutaka YOKOTA (yokota@zodiac.mech.utsunomiya-u.ac.jp)
* All rights reserved.
@@ -34,9 +34,7 @@ __FBSDID("$FreeBSD$");
#include <bootstrap.h>
#include <btxv86.h>
#include <machine/psl.h>
-#ifdef PC98
#include <machine/cpufunc.h>
-#endif
#include "libi386.h"
#if KEYBOARD_PROBE
@@ -73,7 +71,6 @@ static int fg_c, bg_c, curx, cury;
static int esc;
#endif
-#ifdef PC98
static unsigned short *crtat, *Crtat;
static int row = 25, col = 80;
#ifdef TERM_EMU
@@ -114,7 +111,6 @@ static u_int8_t ibmpc_to_pc98[256] = {
};
#define at2pc98(fg_at, bg_at) ibmpc_to_pc98[((bg_at) << 4) | (fg_at)]
#endif /* TERM_EMU */
-#endif /* PC98 */
struct console vidconsole = {
"vidconsole",
@@ -147,15 +143,11 @@ vidc_probe(struct console *cp)
static int
vidc_init(int arg)
{
- int i;
-#ifdef PC98
- int hw_cursor;
-#endif
+ int i, hw_cursor;
if (vidc_started && arg == 0)
return (0);
vidc_started = 1;
-#ifdef PC98
Crtat = (unsigned short *)PTOV(0xA0000);
while ((inb(0x60) & 0x04) == 0)
;
@@ -168,7 +160,6 @@ vidc_init(int arg)
inb(0x62);
inb(0x62);
crtat = Crtat + hw_cursor;
-#endif
#ifdef TERM_EMU
/* Init terminal emulator */
end_term();
@@ -182,7 +173,6 @@ vidc_init(int arg)
return (0); /* XXX reinit? */
}
-#ifdef PC98
static void
beep(void)
{
@@ -191,13 +181,11 @@ beep(void)
delay(40000);
outb(0x37, 7);
}
-#endif
#if 0
static void
vidc_biosputchar(int c)
{
-#ifdef PC98
unsigned short *cp;
int i, pos;
@@ -238,14 +226,6 @@ vidc_biosputchar(int c)
outb(0x60, pos & 0xff);
outb(0x60, pos >> 8);
#endif
-#else
-
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0xe00 | (c & 0xff);
- v86.ebx = 0x7;
- v86int();
-#endif
}
#endif
@@ -259,17 +239,10 @@ vidc_rawputchar(int c)
for (i = 0; i < 8; i++)
vidc_rawputchar(' ');
else {
-#if !defined(TERM_EMU) && !defined(PC98)
- vidc_biosputchar(c);
-#else
/* Emulate AH=0eh (teletype output) */
switch(c) {
case '\a':
-#ifdef PC98
beep();
-#else
- vidc_biosputchar(c);
-#endif
return;
case '\r':
curx = 0;
@@ -306,7 +279,6 @@ vidc_rawputchar(int c)
}
}
curs_move(curx, cury);
-#endif
}
}
@@ -318,28 +290,16 @@ vidc_rawputchar(int c)
void
get_pos(void)
{
-#ifdef PC98
int pos = crtat - Crtat;
curx = pos % col;
cury = pos / col;
-#else
-
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0300;
- v86.ebx = 0x0;
- v86int();
- curx = v86.edx & 0x00ff;
- cury = (v86.edx & 0xff00) >> 8;
-#endif
}
/* Move cursor to x rows and y cols (0-based). */
void
curs_move(int x, int y)
{
-#ifdef PC98
int pos;
pos = x + y * col;
@@ -355,29 +315,6 @@ curs_move(int x, int y)
if (!isvisible(*crtat & 0x00ff)) {
write_char(' ', fg_c, bg_c);
}
-#else
-
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0200;
- v86.ebx = 0x0;
- v86.edx = ((0x00ff & y) << 8) + (0x00ff & x);
- v86int();
- curx = x;
- cury = y;
- /* If there is ctrl char at this position, cursor would be invisible.
- * Make it a space instead.
- */
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0800;
- v86.ebx = 0x0;
- v86int();
-#define isvisible(c) (((c) >= 32) && ((c) < 255))
- if (!isvisible(v86.eax & 0x00ff)) {
- write_char(' ', fg_c, bg_c);
- }
-#endif
}
/* Scroll up the whole window by a number of rows. If rows==0,
@@ -387,7 +324,6 @@ curs_move(int x, int y)
void
scroll_up(int rows, int fgcol, int bgcol)
{
-#ifdef PC98
unsigned short *cp;
int i;
@@ -402,18 +338,6 @@ scroll_up(int rows, int fgcol, int bgcol)
*(cp + 0x1000) = at2pc98(fgcol, bgcol);
*cp++ = ' ';
}
-#else
-
- if (rows == 0)
- rows = 25;
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0600 + (0x00ff & rows);
- v86.ebx = (bgcol << 12) + (fgcol << 8);
- v86.ecx = 0x0;
- v86.edx = 0x184f;
- v86int();
-#endif
}
/* Write character and attribute at cursor position. */
@@ -421,17 +345,8 @@ void
write_char(int c, int fgcol, int bgcol)
{
-#ifdef PC98
*crtat = (c == 0x5c ? 0xfc : (c & 0xff));
*(crtat + 0x1000) = at2pc98(fgcol, bgcol);
-#else
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0900 + (0x00ff & c);
- v86.ebx = (bgcol << 4) + fgcol;
- v86.ecx = 0x1;
- v86int();
-#endif
}
/**************************************************************/
@@ -445,7 +360,6 @@ write_char(int c, int fgcol, int bgcol)
void
CD(void)
{
-#ifdef PC98
int pos;
get_pos();
@@ -454,31 +368,6 @@ CD(void)
*(crtat + pos + 0x1000) = at2pc98(fg_c, bg_c);
}
end_term();
-#else
-
- get_pos();
- if (curx > 0) {
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0600;
- v86.ebx = (bg_c << 4) + fg_c;
- v86.ecx = (cury << 8) + curx;
- v86.edx = (cury << 8) + 79;
- v86int();
- if (++cury > 24) {
- end_term();
- return;
- }
- }
- v86.ctl = 0;
- v86.addr = 0x10;
- v86.eax = 0x0600;
- v86.ebx = (bg_c << 4) + fg_c;
- v86.ecx = (cury << 8) + 0;
- v86.edx = (24 << 8) + 79;
- v86int();
- end_term();
-#endif
}
/* Absolute cursor move to args[0] rows and args[1] columns
@@ -679,11 +568,7 @@ vidc_getchar(void)
if (vidc_ischar()) {
v86.ctl = 0;
-#ifdef PC98
v86.addr = 0x18;
-#else
- v86.addr = 0x16;
-#endif
v86.eax = 0x0;
v86int();
return (v86.eax & 0xff);
@@ -696,137 +581,17 @@ static int
vidc_ischar(void)
{
-#ifdef PC98
v86.ctl = 0;
v86.addr = 0x18;
v86.eax = 0x100;
v86int();
return ((v86.ebx >> 8) & 0x1);
-#else
- v86.ctl = V86_FLAGS;
- v86.addr = 0x16;
- v86.eax = 0x100;
- v86int();
- return (!(v86.efl & PSL_Z));
-#endif
}
#if KEYBOARD_PROBE
-
-#ifdef PC98
static int
probe_keyboard(void)
{
return (*(u_char *)PTOV(0xA1481) & 0x48);
}
-#else /* PC98 */
-#define PROBE_MAXRETRY 5
-#define PROBE_MAXWAIT 400
-#define IO_DUMMY 0x84
-#define IO_KBD 0x060 /* 8042 Keyboard */
-
-/* selected defines from kbdio.h */
-#define KBD_STATUS_PORT 4 /* status port, read */
-#define KBD_DATA_PORT 0 /* data port, read/write
- * also used as keyboard command
- * and mouse command port
- */
-#define KBDC_ECHO 0x00ee
-#define KBDS_ANY_BUFFER_FULL 0x0001
-#define KBDS_INPUT_BUFFER_FULL 0x0002
-#define KBD_ECHO 0x00ee
-
-/* 7 microsec delay necessary for some keyboard controllers */
-static void
-delay7(void)
-{
- /*
- * I know this is broken, but no timer is available yet at this stage...
- * See also comments in `delay1ms()'.
- */
- inb(IO_DUMMY); inb(IO_DUMMY);
- inb(IO_DUMMY); inb(IO_DUMMY);
- inb(IO_DUMMY); inb(IO_DUMMY);
-}
-
-/*
- * This routine uses an inb to an unused port, the time to execute that
- * inb is approximately 1.25uS. This value is pretty constant across
- * all CPU's and all buses, with the exception of some PCI implentations
- * that do not forward this I/O address to the ISA bus as they know it
- * is not a valid ISA bus address, those machines execute this inb in
- * 60 nS :-(.
- *
- */
-static void
-delay1ms(void)
-{
- int i = 800;
- while (--i >= 0)
- (void)inb(0x84);
-}
-
-/*
- * We use the presence/absence of a keyboard to determine whether the internal
- * console can be used for input.
- *
- * Perform a simple test on the keyboard; issue the ECHO command and see
- * if the right answer is returned. We don't do anything as drastic as
- * full keyboard reset; it will be too troublesome and take too much time.
- */
-static int
-probe_keyboard(void)
-{
- int retry = PROBE_MAXRETRY;
- int wait;
- int i;
-
- while (--retry >= 0) {
- /* flush any noise */
- while (inb(IO_KBD + KBD_STATUS_PORT) & KBDS_ANY_BUFFER_FULL) {
- delay7();
- inb(IO_KBD + KBD_DATA_PORT);
- delay1ms();
- }
-
- /* wait until the controller can accept a command */
- for (wait = PROBE_MAXWAIT; wait > 0; --wait) {
- if (((i = inb(IO_KBD + KBD_STATUS_PORT))
- & (KBDS_INPUT_BUFFER_FULL | KBDS_ANY_BUFFER_FULL)) == 0)
- break;
- if (i & KBDS_ANY_BUFFER_FULL) {
- delay7();
- inb(IO_KBD + KBD_DATA_PORT);
- }
- delay1ms();
- }
- if (wait <= 0)
- continue;
-
- /* send the ECHO command */
- outb(IO_KBD + KBD_DATA_PORT, KBDC_ECHO);
-
- /* wait for a response */
- for (wait = PROBE_MAXWAIT; wait > 0; --wait) {
- if (inb(IO_KBD + KBD_STATUS_PORT) & KBDS_ANY_BUFFER_FULL)
- break;
- delay1ms();
- }
- if (wait <= 0)
- continue;
-
- delay7();
- i = inb(IO_KBD + KBD_DATA_PORT);
-#ifdef PROBE_KBD_BEBUG
- printf("probe_keyboard: got 0x%x.\n", i);
-#endif
- if (i == KBD_ECHO) {
- /* got the right answer */
- return (0);
- }
- }
-
- return (1);
-}
-#endif /* PC98 */
#endif /* KEYBOARD_PROBE */
diff --git a/sys/boot/pc98/loader/Makefile b/sys/boot/pc98/loader/Makefile
index 6180515..1d83855 100644
--- a/sys/boot/pc98/loader/Makefile
+++ b/sys/boot/pc98/loader/Makefile
@@ -6,7 +6,6 @@ NEWVERSWHAT= "bootstrap loader" pc98
# architecture-specific loader code
SRCS= main.c conf.c vers.c
-CFLAGS+= -DPC98
.PATH: ${.CURDIR}/../../i386/loader
# Enable PXE TFTP or NFS support, not both.
diff --git a/sys/boot/pc98/loader/main.c b/sys/boot/pc98/loader/main.c
index 580570b..8b472c5 100644
--- a/sys/boot/pc98/loader/main.c
+++ b/sys/boot/pc98/loader/main.c
@@ -137,11 +137,6 @@ main(void)
initial_bootinfo->bi_extmem = bios_extmem / 1024;
}
-#ifndef PC98
- /* detect ACPI for future reference */
- biosacpi_detect();
-#endif
-
printf("\n");
printf("%s, Revision %s\n", bootprog_name, bootprog_rev);
printf("(%s, %s)\n", bootprog_maker, bootprog_date);
@@ -212,17 +207,12 @@ extract_currdev(void)
* and we are not booting from the lowest-numbered disk type
* (ie. SCSI when IDE also exists).
*/
-#ifdef PC98
if ((biosdev == 0) && (B_TYPE(initial_bootdev) != 2)) { /* biosdev doesn't match major */
if (B_TYPE(initial_bootdev) == 6)
biosdev = 0x30 + B_UNIT(initial_bootdev);
else
biosdev = (major << 3) + 0x80 + B_UNIT(initial_bootdev);
}
-#else
- if ((biosdev == 0) && (B_TYPE(initial_bootdev) != 2)) /* biosdev doesn't match major */
- biosdev = 0x80 + B_UNIT(initial_bootdev); /* assume harddisk */
-#endif
}
new_currdev.d_type = new_currdev.d_dev->dv_type;
OpenPOWER on IntegriCloud