GithubHelp home page GithubHelp logo

8088_bios's Introduction

8088 BIOS

Open source BIOS for Micro 8088, NuXT (Git repo), and Xi 8088 systems

Acknowledgements

Following folks contributed to this project. Thank you!

  • 640-KB
    • XT-related fixes
    • Delay implementation using the 8253 PIT
  • Aitor Gómez
    • RTC add-on board support
    • CPU clock frequency configuration setting
  • horkthane
    • Keyboard code fixes
    • VGA/EGA initialization fixes
  • Curt J. Sampson
    • Documentation enhancements
  • Rink
    • Video code update that improves compatibility with FreeDOS utilties
  • Multiple other individuals that helped this project by testing the code, submitting bug reports, and contributing their ideas for improvements

BIOS Images

File name Description
bios-micro8088.bin BIOS image for Micro 8088 Version 1.1 to use with xiflash utility
bios-micro8088-noide.rom BIOS image for Micro 8088 Version 1.1
bios-micro8088-xtide.rom BIOS image for Micro 8088 Version 1.1 with XT-IDE
bios-xi8088.bin BIOS image for Xi 8088 Version 2.0 to use with xiflash utility
bios-xi8088-noide.rom BIOS image for Xi 8088 Version 2.0
bios-xi8088-xtide.rom BIOS image for Xi 8088 Version 2.0 with XT-IDE
bios-sergey-xt-noide.rom BIOS image for Sergey's XT Version 1.0
bios-sergey-xt-xtide.rom BIOS image for Sergey's XT Version 1.0 with XT-IDE
bios-book8088-xtide.rom BIOS image for Book8088 with XT-IDE
bios-book8088-xtide-v20.rom BIOS image for Book8088 with XT-IDE optimized for NEC V20
bios-xt.bin BIOS image for IBM XT (not tested, 16 KiB ROM)

Build Instructions

Release Notes

Changes

  • Version 1.0.0

    • Add support for Book8088
    • Use PIT for delays on XT-compatible systems
    • Implement several fixes for IBM XT
    • Update XT-IDE Extension BIOS to r625
    • Use CMake and build ROM images for all supported machines and configurations
  • Version 0.9.9

    • Port floppy BIOS from Multi-Floppy BIOS extension
    • Add chipset detection for Faraday FE2010A and Proton PT8010AF chipsets. Disable memory refresh on these chipsets
    • Add a setup option for configuring wait states for Faraday FE2010A and Proton PT8010AF chipsets
    • Add a setup configuration option to disable power-on memory test. Disabling the memory test speeds up the boot process
    • Add support for SST39SF020A and SST39SF040 Flash ROMs. Note that unused address lines on these chips need to be connected to the ground
    • Update XT-IDE BIOS ROM Extension to r624. Add corresponding xtidecfg.com utility. The XT-IDE BIOS ROM image provided with 8088 BIOS is configured for XT-CF-Lite at port 0x320. Use the xtidecfg.com utility to reconfigure that if needed prior to building the BIOS
    • Fix keyboard scan codes for several key combinations: Ctrl-b, Ctrl-v, Ctrl-q, Alt-q, Ctrl-+
    • Fix an issue with BIOS resetting equipment list after VGA BIOS extension initialization, which resulted in a missing or incorrect video output then VGA is connected to a monochrome display
  • Version 0.9.8

    • Merge Micro 8088 and Xi 8088 to master branch (use same code base)
    • Implement BIOS setup option for F0000-F7FFF area extension ROM scan
    • Fix FDC data rate setting on systems with 360KB/720KB drives
    • Update the number of floppies in equipment_word when saving configuration
    • Revise POST codes. Display POST code prior to an action, such as device test or subsystem initialization
    • Micro 8088: RTC autodetect fixes
    • Micro 8088: Fix floppy drives configuration
    • Xi 8088: AT / PS/2 keyboard controller initialization code improved
  • Version 0.9.7

    • Micro 8088: Implement RTC support and autodetect (based on the code contributed by Aitor Gomez)
    • Micro 8088: Implement setting 40x25 CGA mode using DIP switches
    • Xi 8088: Implement CPU clock frequency configuration in the BIOS setup
  • Version 0.9.6

    • Micro 8088: Implement CPU clock frequency configuration in the BIOS setup utility (contributed by Aitor Gomez)
    • Fix the issue where BIOS would activate RTS when sending a character
    • Fix the issue with 24 hours clock rollover
  • Version 0.9.5

    • Micro 8088: Fix reading serial port status
    • Micro 8088: Implement checksum for the Flash ROM configuration space
    • Fix booting without XTIDE Universal BIOS
  • Version 0.9.4

    • Micro 8088: Implement BIOS setup utility including saving configuration to the BIOS Flash ROM
    • Improve build configurability
  • Version 0.9.3

    • Implement turbo mode switching using keyboard on Micro 8088
    • Fix the issue where the number of serial and printer ports was not updated in the equipment word
    • Update XT keyboard reset and buffer flush code
    • Fix the issue where the BIOS would hang when one of the Lock keys is pressed
    • Increase I/O delay in RTC code to solve 'FF' displayed in the year issue
  • Version 0.9.2

    • Update configuration mechanism to enable support of multiple target platforms
    • Add initial support for Micro 8088 board using Faraday FE2010A chipset
  • Version 0.9.0

    • No updates except of BIOS date and version
  • Version 0.8.2

    • Fix keypad '*' interpreted as print screen
    • Output '00' POST code to Port 80h when booting OS
    • Use OKI-designed 80C88 and Harris-designed 80C88 instead older/newer 80C88
    • Add date and time setup to RTC setup utility
    • NVRAM setup utility - print help only if requested
    • Minor bug fixes and readability improvements in floppy code
    • Fix compilation errors with AT_COMPAT and PS2_MOUSE disabled
  • Changes - Version 0.8.1

    • Fix BIOS extension ROM scan procedure. Previously in some cases it was failing to initialize more than one BIOS extension ROM.
  • Changes - Version 0.8

    • Add serial port (INT 14h) support
    • Add printer (INT 17h) support
    • Add print screen (INT 5) support
    • Print BIOS extension ROM addresses on ROM initialization
    • Add more POST checkpoints, update POST codes
    • Rename Sergey's XT references to Xi 8088
  • Version 0.7e

    • Set DS to the BIOS data segment after calling extension ROM initialization routines. Fixes the bug where POST would stuck following initialization of an extension ROM that doesn't preserve DS. (Reported by Bill Lewis)
  • Version 0.7d

    • Extension ROM scan
      • Include 0F0000h - 0F7FFFh area in scan, so that extensions can be added to the system's flash.
    • POST
      • Reset IOCHK trigger, disable turbo mode
  • Version 0.7c

    • IPL
      • Fix boot sector signature address
      • Fix error when booting from floppy (call INT 13h AH=08h before boot)
    • POST
      • Add DMA initialization
      • Skip memory test if ESC pressed
      • Skip memory test on warm reboot
    • Keyboard / INT 09h
      • Add support for Ctrl-Break
      • Add support for Pause
    • Video / INT 10h
      • Functions 06h and 07h: Improve scrolling implementation
      • Function 00h: Fix bug with clearing display in graphics modes
      • Use free font for graphics modes
      • Add graphics font for characters 80h-0FFh
    • Floppy / INT 13h:
      • Use 2.88M settings for the default disk parameter table. Previosly 160K settings were used and BIOS was failing to boot from disks with more than 8 sectors per track.
      • More clean and effective fdc_get_result implementation, fdc_wait_input removed as it no longer needed
  • Version 0.7b

    • Initial public release

TODO

  • (high) Add technical documentation
  • (med) Finalize extended keyboard support - full extended keyboard support
  • (med) Beep if no video, install dummy handler
  • (low) Xi 8088: Debug mouse issue with Intel 8242
  • (low) Xi 8088: Debug issues with Microsoft and Logitech mouse drivers
  • (low) Keyboard - sound on buffer overflow
  • (low) More tests - RTC, memory, DMA
  • (low) Init display before keyboard, so KBD errors can be displayed. Alternatively store non-fatal errors and display them after display is initialized
  • (low) Check possibility of using same EBDA for XT-IDE BIOS and system BIOS PS/2 mouse functions
  • (low) BIOS checksum
  • (enh) Add PnP extension

Switches and jumpers settings - Xi 8088

  • SW2-8: Display adapter type:
    • Off = CGA
    • On = MDA or Hercules
    • Ignored if Video BIOS is present (EGA / VGA cards)

8088_bios's People

Contributors

0cjs avatar 640-kb avatar hak-foo avatar horkthane avatar skiselev avatar spark2k06 avatar zhmu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

8088_bios's Issues

book8088 BIOS Source Code

I've heard that there were complaints about GPL violations with the book8088 BIOS. To make examining the evidence easier, I've imported the source code a friend received after ordering one into a branch in my fork repo: vendor/book8088. (I have not myself ordered one.)

As the parent I used the latest commit in the original code that was before the date in the new code's config.inc, so a diff with the parent should turn up mainly just the vendor changes.

If you have questions about this import, it's better to contact me in text chat via Telegram (@cjs_cynic) or Discord (cjs#6537).

move keyboard initialisation

hi! i was slowly collecting all necessary parts to solder and recently was able to do first power up attempt.
it was playing tune but then nothing no image no nothing. it make me think something very wrong ! but after some time (couple month tbh) i found the only issue was keyboard controller. cheap chinese post card behave very unstable and didnt help much.
so at some point i start mess around with bios code and find out that for some reason keyboard controller is considered some vital part and if it fail to initialize everything just halts !
from my experiments it seems very wrong. for example im able to boot to dos without working keyboard controller at all.
so suggestion is:
1)move kbc_init to later stages AFTER video init. this will allow simple visual indication of "keyboard error" instead just freezing with blank screen.
2)i see kbc_init should get "display select" switch BEFORE video init. so other alternative to moving kbc_init is maybe do this:
if that disp_select is really usefull for someone leave kbc_init where it is now, but in case of error not freeze but proceed to go further setting some "kbc_init_result" flag and after video init if there was a keyboard init error print message about it and continue to boot (sort of behave same as with CMOS clock). but we still need disp_sel to do video init? right. in case we was unable to init kbc properly we can just assume it is "color" set it to color mode and proceed with video init.
result:
instead of just black screen freeze we will get image and clear text indication of what went wrong with kbc and continue to boot this will give option to even autorun some custom tests from disk if someone want to do so.

Building on macOS

I wrote the instructions to build this on macOS using Homebrew as the basis to install everything else that's necessary.

I didn't just make a pull request because while building the project works per se there is some quirkiness in the tr utility included in macOS (Sonoma in my case but I suspect it applies to other versions as well) in that LANG=C is seemingly ignored and the result is that the output of for example dd if=/dev/zero ibs=1k count=40 | LANG=C tr "\000" "\377" is 0xC3BF instead of 0xFF which produces invalid binaries.
Using LC_ALL=C instead fixes the problem.

So if LC_ALL=C is also applicable to Linux without breaking anything consider using that instead to make the build process compatible with macOS without a special case for it

Build_Instructions-macOS.md
CMakeLists.txt

PC Speaker Compatibility

Seems like a silly thing to ask about, but I couldn't figure out where else to ask as it seems hardware and BIOS related.

So I had decided to learn assembly language in DOS using the Book 8088 with the help of the book "Assembly Language Primer for the IBM PC & XT." Things were going good until I got to the section involving sound using the PC speaker, then everything stopped working. I then tried as many examples from the internet on using the PC speaker, including the beep code from your BIOS and all failed. The frustrating part is that other applications including the beep command seem to work fine. In desperation I then figured out how to get Virtualbox to passthrough the PC speaker, and the programs I was having troubble with worked. It still does not explain how your bios and various applications is able to make sound. Could you explain how I'm screwing my code up, please? Also I'm using the msa2 assembler, so I commented out all the MASM specific parts of the code. I may still end up using MASM so I figure writing the MASM parts in the comments was the best way to learn even if I wasn't using that assembler. Sorry if it makes the code harder to read.

`
;SIREN--Uses Timer2 to run speaker
; features siren effect
;
;**************************************************
;prognam segment ;define code segment

;--------------------------------------------------
;main:	;proc far	;main part of program

;assume	cs:prognam

;org 0x100	;first address

start:		;starting execution address

;start 1/pitch at FFFFh
    mov	bx,0x0ffff	;set 1/pitch in BX

;sound the tone
    mov	al,0xb6 	;put magic number
    out	0x43,al		;  into timer2
tone:	mov	ax,bx		;move 1/pitch into AX
    out	0x42,al		;LSB into timer2
   mov	al,ah		;MSB to AL, then
    out	0x42,al		;  to timer2
    in	al,0x61		;read port B into AL
    or 	al,0x03		;turn on bits 0 and 1
   out	0x61,al		;to turn on speaker

;increase the pitch and wait a bit
    dec	bx		;increase the pitch
    mov	cx,100		;set up wait loop
wait:	loop 	wait		;wait
    jmp	tone		;go do new tone

;main	endp	;end of main part of program
;---------------------------------------------------
;
;prognam ends	;end of code segment
;***************************************************
;
    ;end	start	;end assembly

`

Windows build setup instructions

Building BIOS'es For Fun and Profit

This isn't too difficult just follow the instructions.

Download and installs
NASM - the latest stable version works
NASM

GNUWin32 tools (includes make and tr)
GNUWin32

rawwrite dd for windows version 0.6beta3
We need this since it implements /dev/zero internally
rawwrite dd

rawwrite dd instructions
rename GNUWin32\bin\dd.exe to dd_gnu.exe
dd we downloaded and unzipped should be put in the GNUWin32\bin folder

Modify your Windows path
Add NASM and GNUWin32 to the windows path under settings->advanced settings->Environment Variables->Path(ether local or system)
NASM defaults to c:\program files\NASM
GNUWin32 defaults to c:\program files (86)\GnuWin32\bin
Just changing your path at the command prompt will not work!

Create batch file bios_lst.bat in the same folder as your source files
place this in the file and save.
@echo off dir *.inc /B > bios.lst

(needed for building with NASM)

MakeFile Changes
Modify the MakeFile
replace ibs=1k to just bs=1k
the version of dd we downloaded doesn't support ibs but it won't effect the build or the bin file

Running The Build
Run start a administrator command console
switch to your source directory
run the bios_lst.bat file
run make in the source folder
take the output and enjoy!

Burning the BIOS
There is no minipro alternative for windows other than the gui so if you have a minipro stick to what you know.

First startup
Your first startup will be slow
it will eventually complain about missing or corrupted nvram settings
go into the settings menu and clean it up.

Next Steps

Go learn assembly

Book8088 V2.0

Is the Bios update compatible with the updated Book8088 V2.0 with serial and parallel ports?

How to create a new bootable image for CF card for BOOK 8088

Hi,

I know that you are not book 8088 support, but you are very experienced guys that probably could help

goal: Make bootable CF card (1GB) with fresh msdos 6.22

When I'm try to create empty image with MSDOS 6.22 - book 8088 is not able to boot on it. My modern notebook book is able to boot from this image
I know that old system uses CHS system and probably this is source of the problem, but how can I configure it for my new CF card?
I don't see any setup menu i bios for CHS config

Ranish Partition Manager show me that CHS is 933,33,63, but how can I check - what values are in bios?
(CHS of original card (500mb) RPM show me as 933,16,63)

  1. When I create new image in dosbox:
    IMGMAKE 8086_cga.img -t hd -nofs -force -chs 993,16,63
  2. mount it
    IMGMOUNT 2 8086_cga.img -size 512,63,16,993 -t hdd -fs none
  3. Boot from msdos 6.22 install disk
    BOOT disk1.img disk2.img disk3.img
  4. Install msdos, next-next-next
  5. burn image to CF card
  6. copy additional software via default windows explorer
    ...
    boot failure

Thank you

BIOS error beeps?

Hi Sergey,

Thanx for the hard work on 8088_bios. :)

I recently bought Book8088 and it gives me a beep error while booting. As their BIOS is based on yours I was looking for the information on beep codes for 8088_bios but couldn't find it.

I did found two places with beeps in the source. A long beep means something is wrong with CPU. Two beeps means something is wrong with memory.

What would one long and two short beeps mean? Is this combination of those beeps above (I hope not), or it means something completely different?

After this, it stays turned on, but nothing is happening. The screen is empty and shows only "No video signal", so there is no output.

[Book8088] Support for XT-IDE F8 BOOT ROM feature (adding an option rom to use with it)

I discovered someone compressed IBM BASIC C1.10 to fit in a 32k ROM:
https://www.vogons.org/viewtopic.php?p=762423#p762423

I also discovered it boots just fine in the Book8088 by simply concatenating it inside the ROM just after XT-IDE, however while it does boot it only boots that, XT-IDE doesn't load.

EDIT: It seems to be an issue with that specific ROM so I don't know if it could be supported, this version should work but I don't know how to or even if it could be fitted in the Book8088 ROM
https://www.vogons.org/viewtopic.php?t=67340

On the other end I'd like for the Book8088 to boot into basic when no CF-Card is inserter or manually by using the F8 BOOT ROM feature of XT-IDE.

I understand you most likely cannot just distribute that file, however would it be possible to add support for this scenario (and eventually any other generic option rom) and possibly a flag on the Make file to build with that extra binary to be provided by the user?

FreeDOS Fails to Boot in Book 8088

FreeDOS fails to boot with the new bios in the Book 8088. This is a regression compared to the BIOS that came in the computer.
CF card brand used is Fujifilm 128MB. This might also be a FreeDOS problem to as an installation on the original 512 MB card will fail with the message of Starting FreeDOS then an unending beep in both the original BIOS that came with the computer and your BIOS.

Not able to boot Minix 1.2

Currently, the BIOS is not able to boot old Minix versions like 1.1 or 1.2.

The reason for that is, that these disk images don't have the 0xAA55 boot sector signature. Initially I thought, these images must be bad or something, but it turns out, that the boot sector signature on floppy disks is actually not checked by basically every historical BIOS.
I tried a lot of different BIOSes using 86Box (IBM PC, XT, American XT, AMI XT, Generic XT, ...even 286, 386 or Pentiums), as well as external floppy BIOSes (Magitronic B215, DTK) - every BIOS is able to boot the Minix disk without the boot sector signature.

All the messages, that exist ("Disk is not bootable, ...") and we are used to actually come from valid default bootsectors on every disk, not from the BIOS itself.

So I would suggest to remove the check for the boot sector signature for floppies from the BIOS, since this would be in line with the default behavior of other BIOSes (and enables booting from uncommon disk images)

Keyboard buffer reset

Hi Sergey!
Not a bug or issue, just a quick question:
What is the actual purpose of

8088_bios/src/bios.asm

Lines 1057 to 1065 in 8fd8cea

mov cx,1000
.kbd_flush:
mov ah,01h
int 16h
jz .kbd_no_key
mov ah,00h
int 16h
.kbd_no_key:
loop .kbd_flush

It's called right before keyboard buffer reset, so i think it's not needed, unless you wanted to do a stuck key detect there?

Also a suggestion - clean up keyboard buffer before entering settings loop, as entering a key several times causes menu reprint and that is quite slow thing. Like this:

.menu_loop:
	mov	si,msg_set_prompt
	call	print

.menu_input:				; cleanup buffer before start preocessing input
	mov	ah,01
	int	16h
	jz	.menu_next
	mov	ah,00
	int	16h
	jmp	.menu_input
.menu_next:

apps dont see cmos chip

me again ! i hope im not getting too annoying yet.
i noticed some odd behavior of "diagnostic" software.
for some reason programs like "checkit" and others when i try to do tests refuse to check cmos and clock. some just dont let me do those tests others show messages about "you dont have cmos clock" BUT I HAVE ! i can see time counting properly and i can see content of chip at ports 70/71 normally.
is it some well known issue or actually real bug ? at first i was thinking maybe it is some sort of hardware issue so i add logging to dosbox and see what checkit does and it dont do anything odd. address port (0x70) is write only and data port (0x71) some read and some write access. so they dont do anything not implemented at board level (like maybe reading 0x70 or something). it is not issue of clock chip itself since i have another board (factory made SBC board) with socketed cmos chip and i can put my chip there and at that board checkit does see that same chip.
so i put scope on one shot waiting mode to address strobe signal or data port read access for cmos chip and did few runs of checkit. it dont even try to access hardware.
so for some reason checkit decide there is no cmos chip here and dont even try to access it. maybe some bits in bios data area should be set to indicate presence of cmos clock ?
if its actually bug i can investigate further and report about my research ^_^

Book 8088 BIOS in context of ELKS

Dear Sergey,

I am trying to boot ELKS on Book 8088. I didn’t yet flash your BIOS so the laptop is on stock version. I wonder whether you have any recommendations on the correct CHS configuration of the boot drive (cf card)?

I have also created a corresponding issue in the ELKS repository ghaerr/elks#1619

Thank you.

CGA 40x25 mode

Cloned from NuXT project: monotech/NuXT#3

I have an official IBM CGA card and would like the system to boot in 40 column mode, but the switch for that doesn't seem to work. The machine always boots in 80 column mode. I can switch to 40 columns successfully from dos using the mode 40 command. Any ideas? Thank you.

Makefile needs small update

On the FreeBSD with locale UTF-8, I've encountered with 'tr' utility problem. In fact I could made it work only with using LANG=C patch. Like this:

bios-micro8088.bin: bios.bin
	dd if=/dev/zero ibs=1k count=40 | LANG=C tr "\000" "\377" > bios-micro8088.bin
	cat bios.bin >> bios-micro8088.bin
	dd if=/dev/zero ibs=1k count=64 | LANG=C tr "\000" "\377" >> bios-micro8088.bin
...

Would be helpful to apply this patch to all commands with 'tr'. This patch works okay on linux OS as well.

XT IDE Turbo Basic compatibility

Hi.
Turbo Basic hangs on file load on Book8088.
Fix is described here:
https://www.vogons.org/viewtopic.php?t=75536
I've tested it and it works.
Built and tested BIOS ( tbh, tested only v20, i afraid my winbond chip will soon break :) ) here : https://github.com/jinshin/Book8088

It's not a bug in BIOS, but since XT IDE BIOS is included in your binary and if there's no objections using XT IDE BIOS in full operating mode, you might consider changing that option for XT IDE BIOS in binary release.

Best,
Serhii

A few incorrect entries in scan_xlat_table

Short version, I was trying to play Might & Magic, and CTRL-B was being interpreted as CTRL-F. Using a keychecker, I discovered CTRL-V was also being interpreted as CTRL-F. I think I see some erroneous entries in scan_xlat_table. The ascii return for CTRL-V, CTRL-F and CTRL-B are all 0x06, where as on other machines I test against, they are 0x02 for CTRL-B, 0x06 for CTRL-F and 0x16 for CTRL-V. If I'm reading the scan_xlat_table correctly, the ascii return for all these is 0x06.

Re-Read errors with floppy on 8088 bios 0.9.8

I would like to report an issue with current bios 0.9.8 with using a floppy drive. As hardware, I am using the NuXT v2.0, which uses the default 8088 bios 0.9.8.

It appears, that the bios seems to contain some sort of a bug. If a floppy is being read, the reading produces always an error on first read and it causes an re-read. The re-read is always being successfull. While MS-DOS does not log such information and does not show such re-read, other operating systems, like ELKS do show such errors and they happen a lot. The DOS tool CheckIt v3.0 also can reproduce this, as sector 0 cylinder 0 fails on first read.

This is not related to any kind of floppy drive. A real floppy drive, gotek floppy emulator and hxc floppy emulator where tested. All drives show the same kind of issue.

If floppy support is disabled in 8088 bios and the external floppy bios v2.6 instead is being used as option rom, the issue is completly gone. It looks like, that this could be some bug in 8088 bios, which maybe was fixed in your floppy bios rom?

Steps to reproduce with ELKS:

1) Download Release from https://github.com/jbruchon/elks/releases
2) Take the corresponding image for MINIX format for your floppy size.
3) If you have, for example, a 1.44mb floppy drive, take fd1440-minix.img and write it as RAW to floppy.
4) Insert floppy in NuXT and boot from it.
5) When booting from floppy start, you will as first see the bootloader fireing up: ELKS.... Linux found..............
6) After the words "ELKS" and "Linux found" you will see many dots. Each dot represents a track read.
7) If you see on some * characters instead a dot character, that means, a (sucessful) track re-read has been done.
8) Continue watching boot, you will notice, that the systems will stop upon printing "xms: A20 was off"
9) Just press enter in this case and boot will continue.
10) Wait until ELKS fully booted and you will get a login prompt.

11) While ELKS is booting, please check, if you are getting those messages printed: ```bioshd(0): track read retry #1 CHS 0/1/3 count 16``` The values after CHS and count will differ. The message means, first track read fails, second re-read succseded.

Create 1.0.0 release?

Hi! Since you added support for Book 8088 and misc stuff, could you create the release 1.0.0?
Changelog indicate this version, but no release on Github?

Not really an issue, but Micro8088 can safely work with 0 WS at any clock.

Like in the title - as Micro8088 is using AS6C4008 SRAM, which are 55ns, they can safely operate with 0 Wait States, even at 9.45 MHz, yet the default seem to be 4 WS @ 9.54MHz.

I've prepared a small utility to write values
01h - 4.77MHz / 0WS
61h - 5.17MHz / 0WS
E1h - 9.54MHz / 0WS
to port 63h, and it works stable on any of these settings.

P.S.
Have you managed to solve disabling DRAM refresh on Proton PT8010AF?

Micro8088 BIOS on Ericsson PC XT

Hello @skiselev
This is not really an issue, rather an question.
My collegue has an Ericsson PC XT
PCXT1

here is some infotmation about it:
https://theretroweb.com/motherboards/s/ericsson-8301-60-52-10

Its very similar to IBM PC XT, but has some parts which are different. Originally it was sold with an MDA Monitor with an proprietary connector, where the DC voltage for the monitor was given over the graphic card.
Also the keyboard is different, it has a normal DIN Connector, but its not an XT, nor AT Keyboard.

My colleagues wish was to use CGA graphics card on this system. The first problem was BIOS.
Its a special BIOS (somehow made by NOKIA). And it doesn't support CGA. EGA and VGA running like a charm, because of the own BIOS on the graphics card. We tried also the new CGA graphics card made by the same bad guys, who made Book8088. It has own BIOS - but it also refuse to work on this PC.

The original BIOS is 16Kb, split on two 2764 EPROMs.
My Idea was, to take your Micro8088 BIOS, the binary for the IBM PC XT, split it in two 8Kb halfs an burn it to the 2x 2764 EPROMs.

The result was - it works! And it works with CGA cards!
But with one nasty issue: Keyboard is not working now. Original Ericsson Keyboard doesn't work, and standart XT keyboard doesn't work also.

Maybe you have an idea, what need to be changed in Micro8088 BIOS, so that the original keyboard works?
It would be very cool.

Thank you!

I attach some pictures and original Ericsson ROM Images.
PCXT_Mainboard
CGA_ISA
PCXT_CGA1
PCXT_CGA2
Ericcsson_PCXT_BIOS.zip

3-Demon compatibility

Hi!
I'm really not sure if that could be considered as bug.
There's a game, called 3-Demon, that shows garbled sprites when run on Book8088 with your BIOS (and stolen one with wiped copyrights as well)
I've done some reversing, and found that it's timer proc, installed on 1Ch, doesn't save DS, AX and DX registers. Modifying code to save those fixed the glitch.
I was wondering why the author didn't save registers and found that in original 5160 BIOS those are preserved

TIMER_INT	PROC	FAR
	STI				; INTERRUPTS BACK ON
	PUSH	DS
	PUSH	AX
	PUSH	DX			; SAVE MACHINE STATE
	CALL	DDS
	INC	TIMER_LOW		; INCREMENT TIME
	JNZ	T4			; TEST_DAY
	INC	TIMER_HIGH		; INCREMENT HIGH WORD OF TIME
T4:					; TEST_DAY
	CMP	TIMER_HIGH,018H		; TEST FOR COUNT EQUALING 24 HOURS
	JNZ	T5			; DISKETTE_CTL
	CMP	TIMER_LOW,0B0H
	JNZ	T5			; DISKETTE_CTL

;------  TIMER HAS GONE 24 HOURS

	SUB	AX,AX
	MOV	TIMER_HIGH,AX
	MOV	TIMER_LOW,AX
	MOV	TIMER_OFL,1

;------ TEST FOR DISKETTE TIME OUT

T5:					; DISKETTE_CTL
	DEC	MOTOR_COUNT
	JNZ	T6			; RETURN IF COUNT NOT OUT
	AND	MOTOR_STATUS,0F0H	; TURN OFF MOTOR RUNNING BITS
	MOV	AL,0CH
	MOV	DX,03F2H		; FDC CTL PORT
	OUT	DX,AL			; TURN OFF THE MOTOR
T6:					; TIMER_RET
	INT	1CH			; TRANSFER CONTROL TO A USER ROUTINE
	MOV	AL,EOI
	OUT	020H,AL			; END OF INTERRUPT TO 8259
	POP	DX
	POP	AX
	POP	DS			; RESET MACHINE STATE
	IRET				; RETURN FROM INTERRUPT
TIMER_INT	ENDP 

Maybe you could consider adding DX push/pop to your BIOS int_08 routine to fix that incompatibility?

Best,
Serhii

adding one more option to the BIOS menu: disable boot beep

Hi,
it could be silly and trivial, but when all is working fine, the initial multi-beep at boot is annoying (and loud, if you use it at night and you're married LOL).

Any chance to put one more option into the BIOS menu enable/disable the beep?

Issues with HDD Clicker

I am not sure, if this is a hardware or software issue. But I noticed, when connecting a HDD Clicker [*] to my NuXT and using 0.9.8 or master, it behaves really strange. Upon pressing power on button, it starts to make noise, as if disk would do a never ending seek. Even during memory test. It stops doing that never ending seek, when I do start booting A or C. Then it behaves normally and only does some noise, when really disk is doing some work. I can only observe this on my NuXT. Other older devices, like some 486 stuff does not show that.

I also noticed, that the floppy access led (from my HxC emulator) is constantly blinking fast, same as the never ending noise from HDD clicker. All becomes "normal", when A or C starts to boot. Is this some sort of init, which polls something from power on?

Crash on floppy write with PC-DOS 3.30

I've encountered a 100% repetitive crash when trying to write anything to floppy disk when booting to PC-DOS 3.30. When I try to format a floppy, it goes to 100% and crashes at the end (creating file system). The computer I use is Micro 8088. When I use GLaBIOS with your Multi-Floppy BIOS Extension v2.6, it works normally. Also, under PC-DOS 5.00 it works fine with your BIOS, as well as with any other BIOS.

Compilation error for MACHINE=MACHINE_XI8088

Makefile

# Target machine type is defined below
# Xi 8088 Board
MACHINE=MACHINE_XI8088

# Flash ROM IC type (as supported by minipro programmer)
FLASH_ROM=SST39SF010A

$ gmake
nasm -DMACHINE_XI8088 -O9 -f bin -o bios.bin -l bios.lst bios.asm
bios.asm:625: warning: Inserting 13892 bytes [-w+user]
bios.asm:1129: warning: Inserting 27 bytes [-w+user]
bios.asm:1196: warning: Inserting 919 bytes [-w+user]
serial2.inc:1298: warning: Inserting 42 bytes [-w+user]
keyboard.inc:1330: warning: Inserting 10 bytes [-w+user]
keyboard.inc:1520: warning: Inserting 153 bytes [-w+user]
floppy2.inc:1344: warning: Inserting 105 bytes [-w+user]
floppy2.inc:1848: warning: Inserting 5 bytes [-w+user]
floppy2.inc:1907: warning: Inserting 10 bytes [-w+user]
video.inc:1312: warning: Inserting 4 bytes [-w+user]
video.inc:1419: warning: Inserting 3 bytes [-w+user]
bios.asm:1324: warning: Inserting 96 bytes [-w+user]
**fnt00-7F.inc:1686: error: Preceding code extends beyond setloc location by 3 bytes
time2.inc:1695: error: Preceding code extends beyond setloc location by 3 bytes**
time2.inc:1731: warning: Inserting 5 bytes [-w+user]
bios.asm:1668: warning: Inserting 42 bytes [-w+user]
bios.asm:1698: warning: Inserting 7 bytes [-w+user]
bios.asm:1817: warning: Inserting 7 bytes [-w+user]
gmake: *** [Makefile:53: bios.bin] Error 1

Got this error on Debian and FreeBSD as well.

No BIOS Screen on monochrome VGA Monitor

Dear @skiselev, dear @spark2k06, dear @horkthane

Found a weird bug on an old monochrome VGA Monitor EIZO 4050:
The whole BIOS Screen of the Micro8088 BIOS is not displayed.
I see the Trident TVGA9000i BIOS Message, afterwards i see black screen with moving cursor and after some time i see XTCF BIOS messages:

On a normal VGA Display anything is working fine.
Could it be a problem with the Trident TVGA9000i VGA Card or Micro8088 BIOS issue?

Micro8088_VGA_Bug.mp4

Update 1:
Seen this pull request by @horkthane
master...horkthane:8088_bios:master

I think its exact my Problem.

Update 2:
Build the 0.9.8 BIOS with @horkthane patch.

Now - BIOS is shown fine on the monochrome VGA Monitor, but recognized as MDA or Hercules during BIOS messages.
It would be great, when it would be recognized as VGA but would also work on monochrome VGA displays.
Thanks!

Doubt: XT-IDE Bios vs. XT-IDE card

Hi, just a silly doubt, actually...

I'm waiting for PCB and parts for the Micro8088 and I was planning the further steps.

I've seen that there are two BIOS versions I would use:

bios-micro8088-noide.rom -- BIOS image for Micro 8088 Version 1.1
bios-micro8088-xtide.rom -- BIOS image for Micro 8088 Version 1.1 with XT-IDE

I'm going to use an XT-IDE card, so I suppose I should use the "bios-micro8088-xtide.rom" file. BUT: does it replace the actual XT-IDE on-board Bios? Or it is just a matter of compatibility/optimization?

---> If it replaces the XT-IDE actual Bios, should I forget the XT-IDE "xtidecfg.com" BIOS configuration step?


ONE MORE QUESTION: I've seen in the Micro8088 there's a 0.9 release; should I use the 1.1 or the 0.9 ?

thank you!

Bios extension causes CGA gaphics to not update

Hi Sergey,

Working with the micro 8088 with proton chip I have run into a couple of odd issues.
I am using several components from an ibm 5155, floppy controller/disk drive and ibm CGA card.

I assumed I could use the XT-IDE i had running the ibm and drop it into this board, flash the rom with bios-micro8088.bin and all would function. (xt-ide version from 2020)

In practice, I get the screen below. The video card has a blinking cursor but the screen fails to update. I have seen the CF card accessed, I even used serdrive.exe through a serial cable and see the computer booting, accessing files and keyboard work but the graphics adapter seems to disconnect.

... Now in contrast, If I use the version of XT-IDE included in your rom. The top of screen menus for drives A/C/comDetect/romBoot show up and booting progresses.

I am guessing that the CGA rom data is being shifted to a different location when extended bios is being used (or if it is not exactly 8kb)
I'm waiting on some parts to come in for the vga card to see if it only related to CGA vs a video bios card.

20220807_090314

Great project. You have awesome documentation and instructions. I would put a recommendation that the PLD/GAL chip is not really optional. Making any changes to XT-IDE configuration is not easy (load xt-ide.bin and xtidecfg.com on a dos machine, make edits, recompile/burn that section with programmer), changing the setting for floppy drive requires recompile.

AT KBC - check other input bit for video mode select?

Even though the Xi 8088 does not have a trace running to it, would it be possible to also check input port 17 (pin 34) on the 8242 for the other video mode bit in order to make it possible to solder a switch that would enable 40-column CGA mode on this board?

[Book8088] BIOS revision 0.9.4 fails to set DS if encountering an unsupported INT13 function

This is for documentation purposes. We had a person contacting the FreeDOS project about the FreeDOS kernel not booting on a Book8088 / Xi8088 emulation with BIOS version 0.9.4. This problem occurs when an unsupported INT13 function, specifically INT13,41 is called by the kernel.

The root cause of the problem is that the BIOS fails to set DS to segment 0040 if encountering an unsupported INT13 function

8088_bios/floppy2.inc

Lines 89 to 94 in 6da84ae

ja .invalid_function
mov al,ah
cbw
mov di,ax
shl di,1
mov ax,biosdseg

, while still writing to it:

8088_bios/floppy2.inc

Lines 126 to 128 in 6da84ae

.invalid_function:
mov ah,fdc_e_invalid
mov byte [fdc_last_error],ah

In the case of FDISK, where DS is set to 0 before calling the BIOS, this trashes the INT10 vector, making the system unusable.

Disabling FreeDOS kernel LBA and FDISK LBA support mitigates this problem, because than XT-IDE is able to handle all requests.

While this is fixed in more recent BIOS versions, it is still noteworthy for documentation purposes.

Time and DSE issues in version 0.9.7

Some issues detected in version 0.9.7:

  1. When the time is modified from the setup, it does not seem to apply immediately. A time command in msdos shows the previous time. Only updated after a machine restart (CTRL + ALT + DEL)

  2. The msdos time command always disables the DSE, and it is due to this code in time1.inc:

and	dl,cmos_dse		; mask the daylight saving flag
and	ah,~cmos_dse		; clear daylight saving flag for now
or	ah,dl			; add it from the input
mov	al,cmos_control_b
call	rtc_write		; write control B register

Please add @spark2k06's alternative branch changes to the main Repo.

Hello @skiselev ! Again thank you very much for your work and the new changes.
I try to ask again, if it would be possible to add @spark2k06 alternative branch

https://github.com/spark2k06/8088_bios/tree/alternative

somehow to the main repo.

As i know, @spark2k06 is working on other projects at the moment and has no time, to maintain his alternative repo.
So atm. on every your update, @skiselev i need every time to add sparks changes in the main code.

The changes i would like to see in the main repo are:

  • Initial delay before BIOS starts, to allow time for some ISA cards to be initialized (#define INIT_DELAY in config.inc)
  • POST code visualization in debug mode (#define DEBUG in config.inc)
  • The Intel Inside tune is moved until just before the video card initializes.
  • Short beep once the video card has been initialized, and prior to the copyright message.
  • OPL Sound Card detection
  • In addition to identifying the type of card installed in the equipment, if it is available on port 388h, the Intel Inside symphony will play through it instead of through the PC-Speaker.

Maybe its possible to create additional branch in your repo @skiselev, if you don't want to have all this changes in the main code.

Thank you very much!

Pawel aka explit7

[book8088] BIOS POST intel chime plays slower than it should

This is more of an interesting quirk that can lead to a broader realisation (perhaps on my part only) than a critical issue, but I noticed while testing this BIOS that the intel chime that plays at boot plays slower than normal.

I used two things to compare:

  • The Xi8088 machine in pcem (using the latest xi8088 version of the BIOS from this repo's master)
  • This video

In both, the startup chime can be heard at the correct speed, but when played on the book8088 (also on pcem using the book8088 bios built from master on this repo, so it doesn't appear to be v20 related), it can be heard like this:

https://ima.lol/~imanol/boot_sound.wav

Comparing both audio sources reveals that the book8088 BIOS plays it 69.74% slower.

So it appears that for whichever reason, on the book8088 the speed of the chime is slower.

Another fun fact, if I turn on turbo mode on the book8088, it seems to play to the correct speed (or very close, I haven't measured).

So in short, there seems to be some timing issue with the platform, or the way the BIOS sets it up?

NEC V20 optimized Book 8088 bios crashing

At least I think it is crashing, I tried flashing the bios-book8088-xtide-v20.rom version first since my Book 8088 has a NEC chip in it. But this caused all the CGA games I tried to stop displaying video. Some of them seemed to crash entirely, others I could still hear the sound but had no display. Text mode programs all worked fine.

I've now switched to the other bios-book8088-xtide.rom version and all the games that worked with the stock Book 8088 bios work fine again. What are the NEC V20 optimizations, could they interfere with the CPLD CGA implementation or is it more likely that I have a dud CPU?

My particular CPU is marked NEC 9621ND V20 D70108C-10 (c)'84NEC

Fast boot option

Implement the fast boot setup option that (mostly?) skips memory test

keyboard doesn't work with micro8088

On my micro8088, with v1.0 of the 8088_bios, right before OS load, there's a moment in the startup where the keyboard_clock line goes dead and never recovers. Rolling back to v0.95, this problem does not happen.

On close examination of the at_kbc.inc in the 1.0 source, the keyboard interface is disabled in the kbc_init module. However, in the 0.95 source, there seems to be a typo in the equivalent line, wherein the keyboard interface is not disabled, but a reserved register that must be zero is set to 1. All this assuming I'm reading your chart correctly.

mov ah,01101000b ; this value is what's used in 0.95
mov ah,01110000b; this is what's used in 1.0.

That being the case, it looks very much as though the keyboard interface is not, and was never re-enabled, but the bug in 0.95 masked this by not disabling the interface in the first place.

This is assuming AT_KEYBOARD is set for the FE2010A machine. If I read the logic in bios.asm starting at line 1042, if AT_KEYBOARD is set, we call kbc_init, and skip over all the code down to line 1067. In as much as the only keyboard socket on the micro8088 is an ps/2 port, one assumes AT_KEYBOARD is set, but I'm not proficient enough with nasm and make to really know for sure.

My suspicion is that because the interface is completely disabled, the keyboard interface subsequently fails testing, throws a post code, and the bios carries on without it. The system boots, but the keyboard doesn't work.

I'll test this as soon as I can.

0.9.7 only: 1.2M floppy drive type reported as 1.44M to DOS - General failure reading

This issue is only in version 0.9.7 (binary SHA1: E5807B7A0CB36E7176F08A6B107FB15D7F1DB5AE ).
Version 0.9.6 behaves as expected.

In version 0.9.7, if I set a floppy drive type to 1.2M, it is correctly reported as 1.2M on the POST screen, but I get "General failure reading drive" in DOS.
In CheckIt, the System Config screen shows the type as being 1.44M, not 1.2M.

In version 0.9.6, CheckIt reports 1.2M as expected, and the drive works correctly in DOS.

If using version 0.9.7, and I put Sergey's HD Floppy BIOS in ROM, taking over BIOS floppy functions, it also behaves correctly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.