Open explit7 opened 4 months ago
The Problem still exist on my Micro8088 Setup. I tried another Mainboard (Juko ST) with GLaBIOS (Thanks @640-KB !) and there the same CGA-Cards works without any issues. For me it looks so, that the Micro8088 BIOS doesnt wait long enough to initialize the CGA-Card. Aftert i press Crtl + Alt + Del (Warm Boot) - the card work without any issues, because its already initialized by the System.
I added the line:
%define INIT_DELAY 700 ; Initial delay in miliseconds before BIOS starts, to allow time for some ISA cards to be initialized.
into the config. The initialization take now longer, but the Problem is still not solved. Here i need to say, that i am not a coder, nor i have such skills and understanding in Hardware and Assembler... So i am literally in the desert without water :)
But i am sure, you guys ( @skiselev @spark2k06 @640-KB and others ) could solve it easily, just adding some proper delay before CGA graphics is initialized....
What i found out, that initialization of CGA Card is different than in @640-KB GLaBIOS. GLaBIOS on Micro8088 initialize the CGA card straight after PowerOn, on Micro8088 i see first the Graphics Gremlin Test Pattern, and in 1 cases of 10 it boots afterwards into BIOS. In 9 of 10 cases i hear the intel melody, GG test pattern stays static. After i press reset - it boots normal.
It is likely just a random garbage data it has in the RAM after power on, not a test pattern. That's likely not related to the issue. From what you described, it appears that the initialization delay doesn't solve the problem. And, if anything, shorter delay increases the chances of success... But possibly, the problem is elsewhere. I'll compare the initialization sequence of @640-KB and 8088 BIOS... Maybe the latter doesn't initialize some register or something else is amiss
Quite a perplexing issue! Taking a quick look at the startup code of GLaBIOS and 8088_bios, both write a 00h
to the CGA control port (disable video memory reads, 40x25 text) and a 01h
to the MDA (same thing but 80x25) shortly after power on (as they should!). If anything, GLaBIOS writes this slightly sooner on boot - though only by a couple hundred clock cycles or so, which is largely irrelevant. Your "garbage" display is in 40x25 mode implying that this initial register write is occurring though.
On a side note, @dbalsom (author of MartyPC and subject matter expert on Area5150) has pointed out that the Graphic Gremlin doesn't appear to handle disabling of video memory the same way as the CGA. Watching this video of Area5150 on Gremlin, if the wiggly text sequence has no horizontal lines around it, it's not disabling video. This implies that the GG may not implement this logic the same, which might be why you are seeing the garbage even after the CGA control register to disable memory read is being set.
I agree with @skiselev that I don't think this screen garbage has to do with the issue. According to the andavno.com blog post you mentioned, it was observed with a standard IBM CGA as well. The only difference being that they saw black instead of garbage (which would be consistent with the theory that this garbage is just a behavior of the Gremlin before video RAM is cleared).
Few thoughts...
When you get the screen garbage and then press the motherboard hardware reset button, does the garbage clear up right away or after the Intel song plays?
Is the garbage you see on screen with the Cycle Logic CGA exactly the same as the Gremlin?
Try removing the system BIOS ROM completely and power up system with Gremlin card installed and see if you get the same video. This might at least tell us if that's a default uninitialized state of the Graphics Gremlin hardware or not.
Also, let the system cold boot to DOS (with the garbage screen) and then type mode co80
and see if the video begins to work (make sure you have DOS MODE.COM
in your path since you won't be able to see what you're typing). This could tell us if INT 10H, AH=0 (reset) is all it takes to fix it, or if there's something in the BIOS boot sequence that's needed too.
Run DOS DEBUG, and type d c000:0
and see what it says (long shot).
Thanks for the technical explanation @640-KB, @skiselev .
When you get the screen garbage and then press the motherboard hardware reset button, does the garbage clear up right away or after the Intel song plays?
Yes, the garbage go away the same time the Intel melody is played, maybe 1/2 sec. after melody and Micro8088 boots normally.
Is the garbage you see on screen with the Cycle Logic CGA exactly the same as the Gremlin?
No. The "garbage" is shown only on Graphics Gremlin. On the Cycle Logic CGA-Card i get a black screen.
Try removing the system BIOS ROM completely and power up system with Gremlin card installed and see if you get the same video. This might at least tell us if that's a default uninitialized state of the Graphics Gremlin hardware or not.
Yes, when i remove BIOS ROM and boot Micro8088 just with Graphics Gremlin -> The garbage is showed.
Also, let the system cold boot to DOS (with the garbage screen) and then type mode co80 and see if the video begins to work (make sure you have DOS MODE.COM in your path since you won't be able to see what you're typing). This could tell us if INT 10H, AH=0 (reset) is all it takes to fix it, or if there's something in the BIOS boot sequence that's needed too.
I checked it again with Micro8088 BIOS and the System doesn't boot to DOS, when there is garbage on the Screen.
Run DOS DEBUG, and type d c000:0 and see what it says (long shot).
When i run Debug after Reset and warm boot on Micro8088 BIOS it shows me this:
Well, some of those answers weren't what I was expecting! :)
If you boot to DOS with F5 (no CONFIG/AUTOEXEC.BAT) what do you see in that same DEBUG?
Oh, and I'm sure you've done this, but I have to ask... does the same thing happen exactly if you remove all of the ISA cards except for the video?
Well, some of those answers weren't what I was expecting! :)
If you boot to DOS with F5 (no CONFIG/AUTOEXEC.BAT) what do you see in that same DEBUG?
My mistake. With F5 i get another output from debug:
Oh, and I'm sure you've done this, but I have to ask... does the same thing happen exactly if you remove all of the ISA cards except for the video?
Yes. the same thing happens when i remove all cards exept Video.
So you have the C000
segment enabled to RAM for UMBs using the on-board SPLD? If you disable that segment does that change anything?
When i disable this segment, nothing changed in case of garbage. With debug i get this:
And still the same behavior with the garbage/hardware reset I assume?
Any chance you have a POST code test card?
And still the same behavior with the garbage/hardware reset I assume?
Any chance you have a POST code test card?
Yes. I have no POST Code test card, but i can buy one.
And thank you very much for taking your time, to solve this prob!
The fact that it doesn't boot at all (the first time) is fascinating, and not what I would have expected. It would be interesting to see exactly where in the boot process it gets stopped (something a POST card could help tell us).
One last one... in DOS DEBUG, try o 3d8 0
. See what that does!
It switches immediately to a mode, my display cant show:
If you hit enter, does it come back?
If you hit enter, does it come back?
No, i need to reset...
Okay, well that proves the video reset register works, so that's something that makes sense. That points back to the very beginning of the boot process, because it's doing exactly what you just did there - the video output should turn off immediately on any boot.
Very weird problem. As i said, this problems never occurs on the GlaBIOS and never occurs on another mainboards. So the problem must be somewhere in the Micro8088 BIOS.
Weird is also, that the problem is absolutely sporadic: Sometime i can switch on the PC 10x Times - without any problems, or i can switch on 10 Times with the Problem exist.
When i switch on the PC, after a long period not using it - i get this Problem in 95% of the cases.
With GlaBIOS i never had this Problem....
I'd think the first thing would be to figure out why the video doesn't disable immediately on power on, since that's pretty simple and obviously not happening. Somehow there's some goofy hardware/software condition and it's just not working on 8088_bios out of bad luck. Both BIOSes likely do mostly the same things in the beginning but probably in different order so it might be a matter of experimenting and seeing which things make a difference. Taking a quick look...
GLaBIOS boot first few steps:
00h
to port A0H
)00h
00
to port 03D8
and 01
to 03B8
.
... (couple of other unimportant things)80h
for 9.54MHz (FE2010A) 4.77 MHz (FE2010), 6 I/O WS, 4 MB WS, 640K RAM, etcACh
: KB hold low+disable, NMI on, spkr data off8088_bios boot first few steps:
0000
to warm boot flag in RAM00h
to port A0H
)01h
for 4.77 MHz CPU, 1 I/O WS, 0 MB WS, 640K RAM, no FPU, RAM parity disabledBOh
: Disable motherboard NMI/parity/IO, speaker off00
to port 03D8
and 01
to 03B8
.I'd say the only relevant differences have to do with disabling the video before configuring the FE2010, or possibly initially configuring it with more wait states. We could try building 8088_bios moving step 10 ahead of step 8 and just see if that does anything different (I don't have the nasm toolchain set up right now to build it myself otherwise I would). And if that doesn't work try with 80h
as the initial FE2010A set up register value. At that point they'd be pretty much identical up until shutting off the video and there would be no rational reason why you'd see the garbage on power up. If we can get there, the rest will probably come to light.
Disable video adapters: write 00 to port 03D8 and 01 to 03B8. happens earlier on GLaBIOS. @skiselev Do you think its possible to run this task earlier?
Hello @skiselev @spark2k06 and other collegues! I have a strange issue with CGA Cards on Micro8088. Doesn't matter if it is a Cycle Logic CGA or Graphics Gremlin Card, it works only after second PowerOn cycle or reset.
If i switch Micro8088 for the first time - i have garbage on the screen (Cycle Logic CGA Card) or constant Graphics Gremlin Test Pattern (Graphics Gremlin 1) which stays static.
Thats very strange, in another XT Mainboard (TripleD TD-20) both cards works without any issues. VGA Card works also without any problems in Micro8088.
The CGA Card occupies the next ISA Slot after Micro8088 Board, in another Slots it the same issue. Could it be timing issue, that the CGA Card need more time to initialize?
I have following cards in My Micro8088 System:
Any ideas, where this problem is coming from? @skiselev , @spark2k06 You have also the Graphics Gremlin Card. Do you have the same Problems? Thanks
Update: Here seems to be the same issue: https://www.andavno.com/?p=248