640-kb / glabios Goto Github PK
View Code? Open in Web Editor NEWA modern, scratch-built, open-source (GPLv3) alternative ROM BIOS for PC, XT, 8088 Clone or Turbo PCs.
Home Page: https://glabios.org/
License: GNU General Public License v3.0
A modern, scratch-built, open-source (GPLv3) alternative ROM BIOS for PC, XT, 8088 Clone or Turbo PCs.
Home Page: https://glabios.org/
License: GNU General Public License v3.0
Line 10500 in 0d215eb
There's an extension to have the interrupt handler increment the day expired / midnight flag rather than set it to 1. This can help avoid missing a day if the time is not queried from interrupt 1Ah for as long as a day. (Plus, it saves a byte of code.)
Current Book8088 build boots. However, there is an error 6000 (keyboard controller and keyboard stuck error), pressing any key allows the computer to continue to boot and the keyboard seems to work as expected.
Book8088 version 2 with VGA and V20 processor with only minimal testing.
Additionally, it has 2MB EMS ISA card and RTC ISA on port 70h. When I get time, I want to try adding GLaTICK to the BIOS.
I love seeing new software (and firmware) being developed to squeeze every last bit of performance out of our beloved vintage systems, and to allow them to do things they were never designed to do. Thanks for sharing this with the world!
How difficult would it be to port GLaBIOS
to popular 8086/V30 systems from back in the day?
There are a number notable of 8086-based PC/XT systems that this would be useful for:
For instance, I grew up with the 8086-based Olivetti M24, and it's always been an obsession for me to tune and optimize it further than the designers of the system initially intended. Would love to see a version of GLaBIOS being developed for that old beast.
Thanks for considering.
The Plantronics video adapter does not work properly in 16 color mode with 2SHOW.
MASM 5.1 does not accept HIGH OFFSET
and LOW OFFSET
(though MASM 5.0 and 6.1 do). MASM 6.0 should be tested also.
Is there some documentation available for TD3300A
or everything used here (e.g. reg 0x90 usage) has been accomplished by reverse engineering juko's BIOS?
Any chance for the following features:
-Expansion ROM search end segment at FE00h?
-RTC detection at 2C0h?
BTW, impressive work!
Best regards
Has anybody tested GLaBIOS with the NuXT motherboard yet? It's an open-source design for an 8088/V20 motherboard with switchable clock speeds.
Hi!
Thank you very much for creating this. It would be impossible of us working on downstream emulators to create out of the box opensource emulators without projects like this. <3
If I could wish for something it would be the ability to auto detect the max memory size. (above 640k)
Right now it is a compile flag controlling it. But it would be cool if the 736kb could be detected automatically. (as an option)
I think this would be possible by first look at the switches and detect EGA/VGA, then determine if there is a MDA or CGA card by testing some IO registers. Perhaps a simple r/w test.
If this was supported we would not have to ship multiple builds of the BIOS. :)
Thanks again!
BYTES_HERE MACRO does not exit with error if a fixed ORG is overrun as it does on MASM 5.0.
Example:
Line 4772 in 39fcfef
You can use iret
here by modifying the stack frame's fl
word with the lahf
instruction. This could be shared among all handlers that want to return CF or ZF. This is what it should look like:
push bp
mov bp, sp
push ax
lahf
; bp + 0 = saved bp
; bp + 2 = ip
; bp + 4 = cs
; bp + 6 = fl
mov byte [bp + 6], ah
pop ax
pop bp
iret
The benefit is that all the control flags IF, TF, and DF are restored from what they held when the interrupt was invoked.
I've noticed that FDD won't work on Micro 8088 unless I add Sergey's Multi-Floppy BIOS Extension.
ROM BASIC (INT 18
) loads but doesn't work properly. Memory at 40:200
(or 50:100
or 60:0
, which is ES and SS when BASIC is running) is being overwritten after first key press. Screen doesn't draw properly first time.
Hi,
Please consider including the .lst for each .rom-file, e.g. the assembly listing annotated with all addresses and hexcodes.
Currently, 128KB images are offered, which can be flashed on the whole EEPROM. While this is a nice thing, I would like to see also smaller 32K images. AFAICS, you cannot flash those 128KB images via software on the NuXT itself. And if flashed externally, the whole EEPROM is programmed.
NuXT has a 128KB EEPROM, which is controlled via DIP switch, aka "dual BIOS". ON = First 64KB, OFF = Last 64KB. As 64KB can't be flashed at once, it must be divided into 2x32KB, 32KB for BIOS and 32KB for ROM. Flashing those 32KB files makes it possible to flash them via uflash in DOS. If a BIOS/ROM is smaller than 32KB, the rest up to 32768 Bytes is filled up with FF.
See manual, which describes this: https://raw.githubusercontent.com/monotech/NuXTv2/master/Monotech%20NuXT%202.0%20User%20Manual.pdf
Using smaller 32K images, it makes possible to flash them and for example, use ON=GlaDOS and OFF=Micro8080_Bios, so you can toggle between two BIOS variants.
Although the code sets the "default" value of 0FFh to AH, that will not get written to INT_LAST i
INT_IRQ PROC
ASSUME DS:_BDA
PUSH AX ; save registers
PUSH BX
MOV BX, SEG _BDA ; set up for DS to BDA
MOV AX, DBW <0FFH, OCW3 <,,,,11B>> ; AL = OCW3 (Read ISR reg on next pulse)
; AH = default return 0xFF in INT_LAST <-- default value
OUT INT_P0, AL ; write to PIC port 0 (20h)
PUSH DS ; save DS and delay for PIC at least 1 clock pulse
IN AL, INT_P0 ; get In-Service Register (ISR)
TEST AL, AL ; is there an active hardware interrupt?
JZ INT_IRQ_DONE ; jump and exit if not <-- if there is no active interrupt, it will exit without writing 0FFh to INT_LAST
MOV AH, AL ; Save ISR in AH
IN AL, INT_IMR ; get current Interrupt Mask Register (IMR)
MOV DS, BX ; set DS to BDA
MOV INT_LAST, AH ; save last interrupt to BDA and delay for PIC <-- not reached if there is no active interrupt
OR AL, AH ; apply IMR mask to ISR
OUT INT_IMR, AL ; write AL to PIC port 1 (21h)
MOV AL, INT_EOI ; End of Interrupt OCW
OUT INT_P0, AL ; write EOI to PIC port 0 (20h)
INT_IRQ_DONE:
POP DS
POP BX
POP AX
IRETINT_IRQ ENDP
I've noticed that the default CPU clock set for Micro 8088 is 9.54 MHz, 4 RAM WS and this is not good, as it will fail on boards with 14.3MHz quartz. 7.15 MHz, 0 RAM WS would be much safer.
Is there any option to switch the "Turbo Mode" ON and OFF?
The UART detection code seems to rely on the fact that the UART will have bits 7-3 in the IIR reset to 0.
This is probably true for 8250 and 16450 UARTs. The 16550, 16550A, 16750, and various other newer UARTs can have non-zero values in bits 7-6 and 3.
Particularly, I observed an issue were GLaBIOS will not detect the UART after enabling FIFO on a 16550A UART and then warm-resetting the system (the SYSCHK utility mentioned here does that: skiselev/8088_bios#31)
8088 BIOS uses a slightly more complicated approach: It writes 00001111b to IER, reads IER back, and verifies that it still has the same value, and then it writes 0 or IER, and again verifies that it reads back the same value
Hi!
Have you given EMS support any thoughts? I see you have worked a bit on the Intel Above board. :)
I currently emulate the LoTech EMS 2MB board. But lately with the addition of VGA support in VirtualXT I have been trying to minimize the conventional memory usage in the default image. So I have reduced the amount of drivers that are loaded by default. GLaTICK helps a lot, but it would also be very cool if we had a GLaMEM. ;)
Big thanks again for supplying GLaBIOS <3
1 - PC always boots on Turbo Mode
2 - Pressing the Turbo Button does not trigger switch between Turbo and Normal mode.
#1
: I guess this is related to TURBO_TYPE
default value.
#2
: is this implemented?
Hi, I have an IBM 5162 XT/286 as well as 5170 / AT. Have you considered supporting the 286 at any point?
Cheers!
MASM isn't available on Linux. I don't want to use Windows or DOSBox. Is there a MASM-like assembler that's available for Linux? Maybe convert it into a NASM-compatible syntax as a separate assembly file?
Hi,
Can you please elaborate on the build proces?
Because with current mlasm32.com assembler (with /Zm) doesn't succeed.
C:\GLaBIOS\src>ml /Zm GLABIOS.ASM
Microsoft (R) Macro Assembler Version 14.38.33133.0
Copyright (C) Microsoft Corporation. All rights reserved.
Assembling: GLABIOS.ASM
GLABIOS.ASM(1380) : error A2008:syntax error : CR3
GLABIOS.ASM(6267) : error A2023:instruction operand must have size
GLABIOS.ASM(4416) : error A2006:undefined symbol : TC0
GLABIOS.ASM(2556) : warning A4013:instructions and initialized data not supported in AT segments
GLABIOS.ASM(2732) : error A2004:symbol type conflict
GLABIOS.ASM(3264) : error A2004:symbol type conflict
GLABIOS.ASM(3417) : error A2004:symbol type conflict
GLABIOS.ASM(3450) : error A2004:symbol type conflict
GLABIOS.ASM(3679) : error A2004:symbol type conflict
GLABIOS.ASM(3680) : error A2004:symbol type conflict
GLABIOS.ASM(4293) : error A2004:symbol type conflict
GLABIOS.ASM(4441) : error A2004:symbol type conflict
GLABIOS.ASM(4800) : error A2004:symbol type conflict
GLABIOS.ASM(4902) : error A2004:symbol type conflict
GLABIOS.ASM(5327) : error A2004:symbol type conflict
GLABIOS.ASM(5399) : error A2004:symbol type conflict
GLABIOS.ASM(5707) : error A2004:symbol type conflict
GLABIOS.ASM(6126) : error A2004:symbol type conflict
GLABIOS.ASM(6805) : error A2004:symbol type conflict
GLABIOS.ASM(7867) : error A2004:symbol type conflict
GLABIOS.ASM(8090) : error A2004:symbol type conflict
GLABIOS.ASM(8134) : error A2004:symbol type conflict
GLABIOS.ASM(8240) : error A2004:symbol type conflict
GLABIOS.ASM(8245) : error A2004:symbol type conflict
GLABIOS.ASM(8251) : error A2004:symbol type conflict
GLABIOS.ASM(8253) : error A2004:symbol type conflict
GLABIOS.ASM(8258) : error A2004:symbol type conflict
GLABIOS.ASM(8266) : error A2004:symbol type conflict
GLABIOS.ASM(10199) : error A2004:symbol type conflict
GLABIOS.ASM(10217) : error A2004:symbol type conflict
GLABIOS.ASM(11453) : error A2004:symbol type conflict
...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.