summaryrefslogtreecommitdiffstats
path: root/usr.bin/doscmd/bios.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/doscmd/bios.c')
-rw-r--r--usr.bin/doscmd/bios.c306
1 files changed, 0 insertions, 306 deletions
diff --git a/usr.bin/doscmd/bios.c b/usr.bin/doscmd/bios.c
deleted file mode 100644
index 0577c74..0000000
--- a/usr.bin/doscmd/bios.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (c) 1992, 1993, 1996
- * Berkeley Software Design, 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Berkeley Software
- * Design, Inc.
- *
- * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``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 Berkeley Software Design, Inc. 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.
- *
- * BSDI bios.c,v 2.3 1996/04/08 19:32:19 bostic Exp
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "doscmd.h"
-#include "mouse.h"
-#include "com.h"
-
-#define BIOS_copyright 0xfe000
-#define BIOS_reset 0xfe05b
-#define BIOS_nmi 0xfe2c3
-#define BIOS_hdisk_table 0xfe401
-#define BIOS_boot 0xfe6f2
-#define BIOS_comm_table 0xfe729
-#define BIOS_comm_io 0xfe739
-#define BIOS_keyboard_io 0xfe82e
-#define BIOS_keyboard_isr 0xfe987
-#define BIOS_fdisk_io 0xfec59
-#define BIOS_fdisk_isr 0xfef57
-#define BIOS_disk_parms 0xfefc7
-#define BIOS_printer_io 0xfefd2
-#define BIOS_video_io 0xff065
-#define BIOS_video_parms 0xff0a4
-#define BIOS_mem_size 0xff841
-#define BIOS_equipment 0xff84d
-#define BIOS_cassette_io 0xff859
-#define BIOS_video_font 0xffa6e
-#define BIOS_time_of_day 0xffe6e
-#define BIOS_timer_int 0xffea5
-#define BIOS_vector 0xffef3
-#define BIOS_dummy_iret 0xfff53
-#define BIOS_print_screen 0xfff54
-#define BIOS_hard_reset 0xffff0
-#define BIOS_date_stamp 0xffff5
-#define BIOS_hardware_id 0xffffe
-
-static u_char disk_params[] = {
- 0xdf, 2, 0x25, 2, 0x0f, 0x1b, 0xff, 0x54, 0xf6, 0x0f, 8,
-};
-
-static u_short comm_table[] = {
- 1047, 768, 384, 192, 96, 48, 24, 12,
-};
-
-/* exports */
-
-int nfloppies = 0;
-int ndisks = 0;
-int nserial = 0;
-int nparallel = 0;
-unsigned long rom_config;
-
-/*
-** BIOS equipment list
-*/
-static void
-int11(regcontext_t *REGS)
-{
- R_AX =
- (nfloppies ? 1:0) | /* do we have any floppydisks? */
- (0x2 << 4) | /* 80x25 colour */
- ((nfloppies-1) << 6) | /* how many floppies? */
- (nserial << 9) | /* serial ports? */
- (nparallel << 14); /* parallel ports? */
-}
-
-/*
-** get installed memory
-*/
-static void
-int12(regcontext_t *REGS)
-{
- R_AX = 640;
-}
-
-/*
-** assorted oddments
-*/
-static void
-int15(regcontext_t *REGS)
-{
- R_FLAGS &= ~PSL_C;
-
- switch (R_AH) {
- case 0x00: /* Get Cassette Status */
- R_AH = 0x86;
- R_FLAGS |= PSL_C; /* We don't support a cassette */
- break;
- case 0x04: /* Set ABIOS table */
- R_FLAGS |= PSL_C; /* We don't support it */
- break;
- case 0x4f: /* Keyboard intercept */
- debug(D_TRAPS | 0x15, "BIOS: Keyboard intercept\n");
- /* Don't translate scan code. */
- break;
- case 0x88:
- get_raw_extmemory_info(REGS);
- break;
- case 0xc0: /* Get configuration */
- debug(D_TRAPS | 0x15, "BIOS: Get configuration\n");
- PUTVEC(R_ES, R_BX, rom_config);
- R_AH = 0;
- break;
- case 0xc1: /* Get extended BIOS data area */
- R_FLAGS |= PSL_C;
- break;
- case 0xc2: /* Pointing device */
- debug(D_TRAPS | 0x15, "BIOS: Pointing device?\n");
- R_FLAGS |= PSL_C;
- R_AH = 5; /* No pointer */
- break;
- default:
- unknown_int2(0x15, R_AX, REGS);
- break;
- }
-}
-
-void
-bios_init(void)
-{
- int i, j, k;
- u_char *jtab;
- struct timeval tv;
- time_t tv_sec;
- struct timezone tz;
- struct tm tm;
- u_long vec;
-
- strcpy((char *)BIOS_copyright,
- "Copyright (C) 1993 Krystal Technologies/BSDI");
-
- *(u_short *)BIOS_reset = 0xffcd;
- *(u_short *)BIOS_nmi = 0xffcd;
- *(u_short *)BIOS_boot = 0xffcd;
- *(u_short *)BIOS_comm_io = 0xffcd;
- *(u_short *)BIOS_keyboard_io = 0xffcd;
- *(u_short *)BIOS_keyboard_isr = 0xffcd;
- *(u_short *)BIOS_fdisk_io = 0xffcd;
- *(u_short *)BIOS_fdisk_isr = 0xffcd;
- *(u_short *)BIOS_printer_io = 0xffcd;
- *(u_short *)BIOS_video_io = 0xffcd;
- *(u_short *)BIOS_cassette_io = 0xffcd;
- *(u_short *)BIOS_time_of_day = 0xffcd;
- *(u_short *)BIOS_timer_int = 0xffcd;
- *(u_short *)BIOS_dummy_iret = 0xffcd;
- *(u_short *)BIOS_print_screen = 0xffcd;
- *(u_short *)BIOS_hard_reset = 0xffcd;
- *(u_short *)BIOS_mem_size = 0xffcd;
- *(u_short *)BIOS_equipment = 0xffcd;
- *(u_short *)BIOS_vector = 0xffcd;
- *(u_char *)0xffff2 = 0xcf; /* IRET */
-
- memcpy((u_char *)BIOS_disk_parms, disk_params, sizeof(disk_params));
- memcpy((u_char *)BIOS_comm_table, comm_table, sizeof(comm_table));
-
- *(u_short *)BIOS_video_font = 0xffcd;
-
- jtab = (u_char *)BIOS_date_stamp;
- *jtab++ = '1';
- *jtab++ = '0';
- *jtab++ = '/';
- *jtab++ = '3';
- *jtab++ = '1';
- *jtab++ = '/';
- *jtab++ = '9';
- *jtab++ = '3';
-
- *(u_char *)BIOS_hardware_id = 0xfc; /* Identify as a PC/AT */
-
- /*
- * Interrupt revectors F000:0000 - F000:03ff
- */
- for (i = 0, j = 0, k = 0; i < 0x100; ++i) {
- if ((i >= 0x60 && i < 0x68) ||
- (i >= 0x78 && i < 0xe2))
- continue;
- if ((i >= 0x00 && i < 0x2f) ||
- (i >= 0x30 && i < 0xfe)) {
- ivec[i] = 0xF0300000L | (k * 1);
- jtab = (u_char *)VECPTR(ivec[i]);
- *jtab++ = 0xf4; /* HLT */
- ++k;
- } else {
- ivec[i] = 0xF0000000L | (j * 6);
- jtab = (u_char *)VECPTR(ivec[i]);
- *jtab++ = 0xcd; /* INT i */
- *jtab++ = i;
- *jtab++ = 0xca; /* RETF 2 */
- *jtab++ = 2;
- *jtab++ = 0;
- ++j;
- }
- }
-
- /*
- * Misc variables from F000:0400 - F000:0fff
- */
- rom_config = 0xF0000400;
- jtab = (u_char *)VECPTR(rom_config);
- *jtab++ = 20; /* length of entry */
- *jtab++ = 0;
- *jtab++ = *(u_char *)BIOS_hardware_id;
- *jtab++ = 0x00; /* Sub model */
- *jtab++ = 0x01; /* Bios Rev Enhanced kbd w/3.5" floppy */
- *jtab++ = 0x20; /* real time clock present */
- *jtab++ = 0; /* Reserved */
- *jtab++ = 0;
- *jtab++ = 0;
- *jtab++ = 0;
- strcpy((char *)jtab, "BSDI BIOS");
- *jtab += 10;
-
- InDOS = jtab++;
- *InDOS = 0;
-
- mouse_area = jtab;
- jtab += 0x10;
-
- *(u_short *)&BIOSDATA[0x10] =
- (1 << 0) | /* Diskette avail for boot */
- (1 << 1) | /* Math co-processor */
- (nmice << 2) | /* No pointing device */
- (2 << 4) | /* Initial video (80 x 25 C) */
- ((nfloppies - 1) << 6) | /* Number of floppies - 1 */
- (nserial << 9) | /* Number of serial devices */
- (nparallel << 14); /* Number of parallel devices */
-
-
- *(u_short *)&BIOSDATA[0x13] = 640; /* Amount of memory */
- BIOSDATA[0x75] = ndisks; /* number of fixed disks */
-
- BIOSDATA[0x8F] = 0;
- if (nfloppies >= 1) {
- BIOSDATA[0x8F] |= 0x04;
- BIOSDATA[0x90] = 0x40;
- }
- if (nfloppies >= 2) {
- BIOSDATA[0x8F] |= 0x40;
- BIOSDATA[0x91] = 0x40;
- }
-
- gettimeofday(&tv, &tz);
- tv_sec = tv.tv_sec;
- tm = *localtime(&tv_sec);
- *(u_long *)&BIOSDATA[0x6c] =
- (((tm.tm_hour * 60 + tm.tm_min) * 60) + tm.tm_sec) * 182 / 10;
-
- vec = insert_softint_trampoline();
- ivec[0x11] = vec;
- register_callback(vec, int11, "int 11");
-
- vec = insert_softint_trampoline();
- ivec[0x12] = vec;
- register_callback(vec, int12, "int 12");
-
- vec = insert_softint_trampoline();
- ivec[0x14] = vec;
- register_callback(vec, int14, "int 14");
-
- vec = insert_softint_trampoline();
- ivec[0x15] = vec;
- register_callback(vec, int15, "int 15");
-
- vec = insert_softint_trampoline();
- ivec[0x16] = vec;
- register_callback(vec, int16, "int 16");
-
- vec = insert_softint_trampoline();
- ivec[0x17] = vec;
- register_callback(vec, int17, "int 17");
-
- vec = insert_softint_trampoline();
- ivec[0x1a] = vec;
- register_callback(vec, int1a, "int 1a");
-}
OpenPOWER on IntegriCloud