• Please review our updated Terms and Rules here
  • Exhibitor application for VCF West 2022 is now open! If you are interested in exhibiting, please fill out the form here.

IBM PC 5150 BIOS Versions

fs5500

Experienced Member
Joined
Nov 5, 2008
Messages
438
Thanks modem7.

This is only possibility.

BIOS with IBM BASIC C1.00 (BIOS - 1501476 COPR. IBM 1982 / Checksum : 00, value of FFFFh is 77h)

--> In this case, any user may upgrade (exchange) U33 ROM chip on Rev.1 or Rev.2 motherboard.
It is also possible to be updated with IBM PC 5150 BIOS Upgrade kit.
 

fs5500

Experienced Member
Joined
Nov 5, 2008
Messages
438
>-------------------------
>10/19/81
>-------------------------
>ROM SIZE = 40K (U33 BIOS = 8K, U29-U32 BASIC = 8K each)
>ROM U33 = 8K chip labeled with IBM part number of 5700671
>ID/SUBMODEL/VERSION = FF/--/--
>* Fixed a couple of minor display bugs.

I've checked about "Fixed a couple of minor display bugs."
I think it is related with font of CHR(4) on IBM PC 5150 Rev.1 (04/24/81)

Charactor 4 Font from IBM PC 5150 Revision 1 (04/24/81)

http://www.mediafire.com/?hx2ts944uq56ovr


Charactor 4 Font from IBM PC 5150 Revision 2 (10/19/81)

http://www.mediafire.com/?lfiooocq053zm2x


I've compared two bioses from 1A6E (F000:FA6E) to 1E6D (F000:FE6D)

Only 1 byte is different from each other at 1A95 (F000:FA95)

Rev.1 : 08h / Rev.2 : 00h

08h must be incorrect, 00h is right.

I've tested in PCE (IBM 5150) emulator with Rev.1 (BASIC Mode)
Screen is changed to 1 (40x24 mode with graphic)

http://www.mediafire.com/?sqz9wicbxfvzfub

A font of Character 4 must be strange.

But if you change SCREEN 1 to SCREEN 0 (Text Mode), the font is shown correctly.

http://www.mediafire.com/?odthb88vcs7ndb1

I think this must be from CGA font ROM.
Anyway, Rev.1 BIOS has a minor bug.
But I think it is Not bad dumped, because checksum byte is correct and source code of IBM PC 5150 is shown as 08h.

http://www.classiccmp.org/cini/files/PCBios.ASM
 

GOLD CHIP

Member
Joined
Mar 1, 2013
Messages
10
8086 , ibm compatible

8086 , ibm compatible

Hi all,

I want to build 8086 based computer with 16-bit ISA bus, compatible with IBM 5150 or 5160. this is for educational purpose only.

Reason, 8086 is 16-bit computer, so I want it build with 16 bit ROM and SRAM. I hate swapping 8-bit data around.

This make the design straight forward.

QUESTION:

Can I read BIOS from original BIOS chip in IBM 5150 and insert it to 16-bit EEPROM.
I have 2 IBM 5150, one with cassette port and the other doesn't have it.

IF I can't do that, is there some free BIOS which I can program into 16-bit EEPROM.

Thank you in advance
 

Chuck(G)

25k Member
Joined
Jan 11, 2007
Messages
39,135
Location
Pacific Northwest, USA
There's no practical reason why an 8-bit BIOS won't work on a 16-bit card. But I suspect that the width of the PROM bus is going to be the least of your problems.

In particular, You will need to observe the rigamarole that goes on when odd addresses are accessed (gate them to the lower part of the bus) to emulate the 8088 BIU operation. Look to the 5170 logic for that.
 

sergey

Veteran Member
Joined
Jul 15, 2010
Messages
732
Location
Silicon Forest, Oregon, USA
Hi all,

I want to build 8086 based computer with 16-bit ISA bus, compatible with IBM 5150 or 5160. this is for educational purpose only.

Reason, 8086 is 16-bit computer, so I want it build with 16 bit ROM and SRAM. I hate swapping 8-bit data around.

This make the design straight forward.

QUESTION:

Can I read BIOS from original BIOS chip in IBM 5150 and insert it to 16-bit EEPROM.
I have 2 IBM 5150, one with cassette port and the other doesn't have it.

IF I can't do that, is there some free BIOS which I can program into 16-bit EEPROM.

Thank you in advance

First of all to answer your question, there is the XT BIOS by Anonymous, which is as far as I can tell is pretty popular for clone XT systems.
I wrote my own BIOS, which is IBM PC compatible, but also supports many features from AT and PS/2 (RTC, AT keyboard, PS/2 mouse, support for HD/ED floppy drives). You can find the source code and binaries here. Note that this BIOS will not work on the original PC or XT, at least because it requires AT keyboard and doesn't configure DMA to perform DRAM refresh.

Now I would like to question your idea of building 8086 based system :)

It is completely possible to build a 8086-based system with 16-bit SRAM and ROM. The memory part is the least trouble just use 2 chips to get 16-bit data width. You can also put 8-bit I/O devices without using A0 address line (using A1) instead, and use only even addresses to access them.
But it is impossible to implement an IBM PC compatible system without implementing proper data bus steering logic. That is because in IBM PC compatible systems:
- All the on-board I/O (Keyboard/8255 PPI, 8259 PIC, 8237 DMA, and so on) is using 8-bit data bus and steering logic will be required to access odd I/O addresses.
- ISA cards can have 8-bit memory, and many have 8-bit I/O.

So you have several choices here:
- You can implement a non-IBM PC compatible 8086 system. But in this case I see little reason for using 8086 CPU (unless you happen to have one and really want to put it in use). You could use a 80186 instead, and enjoy multiple peripherals it has on the chip, or use 80286 (or perhaps even 386SX/386EX) and get a more speedy system. The IBM PC compatible BIOS will not work on such system, at least not without serious modifications.
- You can implement an IBM PC compatible system, implementing bus steering logic (which is quite complex). There are a few IBM compatible PCs that have done that: Olivetti M24, ES1840/ES1841, IBM PS/2 models 25 and 30. I think I saw Olivetti M24 schematics on the net - and it is considerably more complicated than IBM PC one.
- You can use 8088 processor, which makes building IBM PC compatible system much easier.

In case you just want to build an x86 computer, you might want to check the following:
- PC Retro kit. Basically a complete copy of an IBM PC
- My Xi 8088 project.
- SBC-188 project. Much more simple than previous two, yet partially IBM PC compatible (as long as the program uses BIOS/DOS API to access the hardware).
 
Last edited:

Chuck(G)

25k Member
Joined
Jan 11, 2007
Messages
39,135
Location
Pacific Northwest, USA
One other consideration--if you are set on using 16-bit cards, bear in mind that these come in two flavors.

There are those that were made to function in either 8 or 16-bit slots (several NICs and display cards)--they're okay. Then there were those that would work in 16-bit slots only (e.g. disk adapters, SCSI cards, etc.) You'll find that very often, their extension ROMs use the 80186 instruction additions and that an 8086 won't execute the code. You can, however, substitute a NEC V30 to accommodate those.
 

Chuck(G)

25k Member
Joined
Jan 11, 2007
Messages
39,135
Location
Pacific Northwest, USA
Yeah, we "rediscovered" this 6300 quirk when trying to get the XT-CF going in 16-bit mode on a 6300--all the bytes were swapped. The answer was to conduct our 6300-to-CF traffic in 8 bit mode. Fortunately, 8 bit mode is a non-optional requirement for CF cards, unlike PATA drives.

The 6300 bus converter logic is far from simple.
 

GOLD CHIP

Member
Joined
Mar 1, 2013
Messages
10
It is completely possible to build a 8086-based system with 16-bit SRAM and ROM. The memory part is the least trouble just use 2 chips to get 16-bit data width. You can also put 8-bit I/O devices without using A0 address line (using A1) instead, and use only even addresses to access them.
But it is impossible to implement an IBM PC compatible system without implementing proper data bus steering logic. That is because in IBM PC compatible systems:
- All the on-board I/O (Keyboard/8255 PPI, 8259 PIC, 8237 DMA, and so on) is using 8-bit data bus and steering logic will be required to access odd I/O addresses.
- ISA cards can have 8-bit memory, and many have 8-bit I/O.

Sergey, your super, super kind thank you.

I agree about the data bus thing, Its going to be more complicated than simple when using pure 16-bit bus.

:confused1:

I will ask some VLSI guy whether they can burn this mess into a silicon. The plan is to put all chip except the micro and memory section on VLSI.
So the layout on the PCB would be "microprocessor", Memory, and "glue chip" very simple.

Since the RAM is using SRAM instead of DRAM, what kind of change do you thing it is appropriate?

Its got to use AT or PS2 keyboard, its too damn difficult to get XT keyboard (I've got 2 of them but I don't lend them for school use hehe)

I think I know the answer about the 8-bit ISA card, its strictly forbidden, its not pure 16-bit design.

For now, I've got several tube of 8086, several 16-bit sRAM (left over from 68K project), CPLD chip and its programmer.

BTW
I've browse through the Xi 8088 project, its really awesome, where can I get that?
 
Last edited:

sergey

Veteran Member
Joined
Jul 15, 2010
Messages
732
Location
Silicon Forest, Oregon, USA
Sorry, it took me some time to reply.

I will ask some VLSI guy whether they can burn this mess into a silicon. The plan is to put all chip except the micro and memory section on VLSI.
So the layout on the PCB would be "microprocessor", Memory, and "glue chip" very simple.

While it is possible to implement all the glue logic, and possibly clock generator (8284) and bus controller (8288 ) in a CPLD, you still will need DMAC (8237), PIC (8259), PIT (8254), and keyboard controller ICs. They are way too complicated to be implemented in a CPLD. Of course you can do FPGA, but then why not implement the 8086 itself in the FPGA too?! :)
[another question is where to get the VHDL implementation for all these ICs...]

Since the RAM is using SRAM instead of DRAM, what kind of change do you thing it is appropriate?

Using SRAM makes things easier - you don't need to implement memory refresh and address multiplexing. Just connect it to the address / data bus. You can use a couple of 512 Kbit x 8 SRAMs (like this). With 16-bit you'll need to decode /BHE and A0 to generate /CS to one or both SRAMs.


Its got to use AT or PS2 keyboard, its too damn difficult to get XT keyboard (I've got 2 of them but I don't lend them for school use hehe)

Two options here:
1. Use an AT or PS/2 compatible keyboard controller - usually 8242 micro-controller with keyboard controller firmware or a specialized keyboard controller IC (e.g. VIA VT82C42N). PS/2 compatible controllers also provide mouse interface... You can refer to Xi 8088 schematic for such implementation. Note that it is not a 100% PC compatible (rather a 100% AT or PS/2 compatible), but it is compatible enough for most programs.
2. Implement XT compatible keyboard interface and use XT2AT keyboard converter.

I've browse through the Xi 8088 project, its really awesome, where can I get that?

I still have a few Xi 8088 PCBs left, they are $25 + shipping (something like $4 in US and $13 anywhere else). PM me if you want to purchase one.
 

GOLD CHIP

Member
Joined
Mar 1, 2013
Messages
10
Sorry, it took me some time to reply.

It gives me time to think it over thoroughly.

I want this project clean and pure 16-bit design. to do with that I need to get away from "IBM PC compatibility". Hmmm why can't I think of that many years ago. stupid me.

ok.

the spec. would be

1. clean 16-bit design
2. using 8086 micro (not FPGA clone hehe) // allready have 2 tube of 8086 chips.
3. using 16-bit SRAM (I allready have the 16-bit SRAM chip)
4. all those glue logic would be in FPGA.

Question
how do we design the easiest DMA, PIC, PIT, keyboard controller (using PS2 keyboard)?

My guess is to design the address for each DMA, PIC, etc. and then call the FPGA guy to do the rest.

Question again:
How do we modified the BIOS to suit this new arrangement of glue chips.

Thank you in advance
 

mbbrutman

Associate Cat Herder
Staff member
Joined
May 3, 2003
Messages
6,242
Guys,

This thread is supposed to be a reference for BIOS versions. Please start another thread. (I will clean this thread up when that happens.)


Mike
 

fs5500

Experienced Member
Joined
Nov 5, 2008
Messages
438
Here are all IBM PC 5150's ROM BIOS and checksum (verified)
(Assume that segment of BIOS is F000. All checksum bytes are 00h)


Revision 1 (Apr.24.1981) (with Revision A 16-64K motherboard / IBM Cassette BASIC C1.00)

5700019.U29 (Size : 8192 / Area : 6000-7FFF / Checksum-32 : 000e2700 / CRC32 : b59e8f6c) - BASIC C1.00 (1/4)
5700027.U30 (Size : 8192 / Area : 8000-9FFF / Checksum-32 : 000f2d00 / CRC32 : bfff99b8) - BASIC C1.00 (2/4)
5700035.U31 (Size : 8192 / Area : A000-BFFF / Checksum-32 : 000e8900 / CRC32 : 9fe4ec11) - BASIC C1.00 (3/4)
5700043.U32 (Size : 8192 / Area : C000-DFFF / Checksum-32 : 000ede00 / CRC32 : ea2794e6) - BASIC C1.00 (4/4)
5700051.U33 (Size : 8192 / Area : E000-FFFF / Checksum-32 : 000e8600 / CRC32 : 12d33fb8) - BIOS (04/24/81, IBM Corp. 1981)


Revision 2 (Oct.19.1981) (with Revision A 16-64K motherboard / IBM Cassette BASIC C1.00)

5700019.U29 (Size : 8192 / Area : 6000-7FFF / Checksum-32 : 000e2700 / CRC32 : b59e8f6c) - BASIC C1.00 (1/4)
5700027.U30 (Size : 8192 / Area : 8000-9FFF / Checksum-32 : 000f2d00 / CRC32 : bfff99b8) - BASIC C1.00 (2/4)
5700035.U31 (Size : 8192 / Area : A000-BFFF / Checksum-32 : 000e8900 / CRC32 : 9fe4ec11) - BASIC C1.00 (3/4)
5700043.U32 (Size : 8192 / Area : C000-DFFF / Checksum-32 : 000ede00 / CRC32 : ea2794e6) - BASIC C1.00 (4/4)
5700671.U33 (Size : 8192 / Area : E000-FFFF / Checksum-32 : 000e8600 / CRC32 : b7d4ec46) - BIOS (10/19/81, IBM Corp. 1981)

Revision 3 (Oct.27.1982) (with Revision A 16-64K motherboard / IBM Cassette BASIC C1.00) -- (by Upgrade Kit)

5700019.U29 (Size : 8192 / Area : 6000-7FFF / Checksum-32 : 000e2700 / CRC32 : b59e8f6c) - BASIC C1.00 (1/4)
5700027.U30 (Size : 8192 / Area : 8000-9FFF / Checksum-32 : 000f2d00 / CRC32 : bfff99b8) - BASIC C1.00 (2/4)
5700035.U31 (Size : 8192 / Area : A000-BFFF / Checksum-32 : 000e8900 / CRC32 : 9fe4ec11) - BASIC C1.00 (3/4)
5700043.U32 (Size : 8192 / Area : C000-DFFF / Checksum-32 : 000ede00 / CRC32 : ea2794e6) - BASIC C1.00 (4/4)
1501476.U33 (Size : 8192 / Area : E000-FFFF / Checksum-32 : 000eb000 / CRC32 : e88792b3) - BIOS (10/27/82, IBM Corp. 1982)

Revision 3 (Oct.27.1982) (with Revision B 64-256K motherboard / IBM Cassette BASIC C1.00)

5700019.U29 (Size : 8192 / Area : 6000-7FFF / Checksum-32 : 000e2700 / CRC32 : b59e8f6c) - BASIC C1.00 (1/4)
5700027.U30 (Size : 8192 / Area : 8000-9FFF / Checksum-32 : 000f2d00 / CRC32 : bfff99b8) - BASIC C1.00 (2/4)
5700035.U31 (Size : 8192 / Area : A000-BFFF / Checksum-32 : 000e8900 / CRC32 : 9fe4ec11) - BASIC C1.00 (3/4)
5700043.U32 (Size : 8192 / Area : C000-DFFF / Checksum-32 : 000ede00 / CRC32 : ea2794e6) - BASIC C1.00 (4/4)
1501476.U33 (Size : 8192 / Area : E000-FFFF / Checksum-32 : 000eb000 / CRC32 : 9b791d3e) - BIOS (10/27/82, IBM Corp. 1981)


Revision 3 (Oct.27.1982) (with Revision B 64-256K motherboard / IBM Cassette BASIC C1.10)

5000019.U29 (Size : 8192 / Area : 6000-7FFF / Checksum-32 : 000e2e00 / CRC32 : 80d3cf5d) - BASIC C1.10 (1/4)
5000021.U30 (Size : 8192 / Area : 8000-9FFF / Checksum-32 : 000f2d00 / CRC32 : 673a4acc) - BASIC C1.10 (2/4)
5000022.U31 (Size : 8192 / Area : A000-BFFF / Checksum-32 : 000e9700 / CRC32 : aac3fc37) - BASIC C1.10 (3/4)
5000023.U32 (Size : 8192 / Area : C000-DFFF / Checksum-32 : 000ef300 / CRC32 : 3062b3fc) - BASIC C1.10 (4/4)
1501476.U33 (Size : 8192 / Area : E000-FFFF / Checksum-32 : 000eb000 / CRC32 : 9b791d3e) - BIOS (10/27/82, IBM Corp. 1981)


Revision 3 (Oct.27.1982) (with Revision B 64-256K motherboard / IBM Cassette BASIC C1.10)

5000019.U29 (Size : 8192 / Area : 6000-7FFF / Checksum-32 : 000e2e00 / CRC32 : 80d3cf5d) - BASIC C1.10 (1/4)
5000021.U30 (Size : 8192 / Area : 8000-9FFF / Checksum-32 : 000f2d00 / CRC32 : 673a4acc) - BASIC C1.10 (2/4)
5000022.U31 (Size : 8192 / Area : A000-BFFF / Checksum-32 : 000e9700 / CRC32 : aac3fc37) - BASIC C1.10 (3/4)
5000023.U32 (Size : 8192 / Area : C000-DFFF / Checksum-32 : 000ef300 / CRC32 : 3062b3fc) - BASIC C1.10 (4/4)
1501476.U33 (Size : 8192 / Area : E000-FFFF / Checksum-32 : 000eb000 / CRC32 : e88792b3) - BIOS (10/27/82, IBM Corp. 1982)
 
Last edited:

fs5500

Experienced Member
Joined
Nov 5, 2008
Messages
438
I've maid simple BIOS sum program on BASIC.

10 CLS
20 DEF SEG=&HF000
30 FOR B=0 TO 7
40 GOSUB 60
50 NEXT:END
60 A=0:FOR I=&H2000*B TO &H2000*(B+1)-1
70 A=A+PEEK(I):NEXT
80 PRINT "SUM";B;"=";A
90 RETURN

To check BIOS version, run this statement on BASIC

PRINT "BIOS version is";:FOR I=0 TO 7:pRINT CHR$(PEEK(&HFFF5+I));:NEXT

Normal value must be following

SUM 0 = 2088960 (default, but variable, 0000-1FFF)
SUM 1 = 2088960 (default, but variable, 2000-3FFF)
SUM 2 = 2088960 (default, but variable, 4000-5FFF)
SUM 3 = 927488 (BASIC C1.00, 6000-7FFF), SUM 3 = 929280 (BASIC C1.10, 6000-7FFF)
SUM 4 = 994560 (BASIC C1.00 or C1.10, 8000-9FFF)
SUM 5 = 952576 (BASIC C1.00, A000-BFFF), SUM 5 = 956160 (BASIC C1.10, A000-BFFF)
SUM 6 = 974336 (BASIC C1.00, C000-DFFF), SUM 6 = 979712 (BASIC C1.10, C000-DFFF)
SUM 7 = 951808 (BIOS version 04/24/81 or 10/19/81, E000-FFFF), SUM 7 = 962560 (BIOS version 10/27/82, E000-FFFF)
 

ropersonline

Experienced Member
Joined
Jun 17, 2011
Messages
153
I've [made a] simple BIOS sum program on BASIC.

Thank you very much for this; that's really useful, especially with a machine that may not have a functioning floppy, but that definitely has ROM BASIC. :)
 
Last edited:

fs5500

Experienced Member
Joined
Nov 5, 2008
Messages
438

Vpd21LV.png


I fixed the link.
 
Top