Windows 95 / xpatch.exe
There are at least two versions of the video bios, the one captured here I believe is the patched one, I will update this note with details on what was changed, but as it is described there was an issue using 256 Colors in Windows 95 when you had a 16MB memory upgrade module installed. A patch was released that updated the bios to address this issue.
This site has some additional commentary on the issue: http://apj.co.uk/pc110/pt_qa.htm
This is the patch:
It includes a disk image which you must write to a floppy and boot the system from, and then run xpatch.exe
Vpatch
You can modify these in the shadow memory and then soft reboot to see the results. I will have a more final program later and update this page, but currently you can try this out with:
You can compile and run vpatch2.exe. The first thing the program does is do a simple checksum of the videobios, and it will only apply changes if it matches value in the first line of config.txt. So, if you run vpatch2.exe on your freshly cold booted PC110 and get a checksum error, update config.txt with the displayed value. This is safe for the shadow ram version as the changes are reset on hard reset so no harm can be done.
Reverse Engineering
This is my analysis of the video bios extracted from the PC110 flash chip at 20000h. On the booted system this is of course copied to C000:0000
I have only identified the locations of interest for supporting the TFT display modifications. The page numbers in my table do not have a significant meaning. They are based on the page numbers within the 65535 BMP Editor, which does not recognize the BIOS on the PC110.
In the following data, I show the pages as seen in the C&T 65535 Bios Modification Program for a bios I pulled from a different C&T 65535 powered industrial card.
The values in the tables are as seen on a PC110 that has been patched with xpatch.exe
The start address is the address of the XR register, to find the address for the associated value just add 1.
Table of contents
Page# | Name | Start | Length | |
1 | Message Options | |||
2 | BIOS Features | |||
3 | BIOS Features | |||
4 | Extended Modes (1MB Memory) | |||
5 | CRT 132x25x16 (Mode 60) | |||
6 | CRT 132x50x16 (Mode 61) | |||
7 | CRT 800x600x16 (Mode 6A/70) | |||
8 | CRT 1024x768x16 Non Interlace (Mode 72/75) | |||
9 | CRT 1024x768x16 Interlace (Mode 72I/75I) | |||
10 | CRT 640×480 (Mode 20,30,79) | |||
11 | CRT 800×600 (Mode 22,32,7C) | |||
12 | CRT 1024×768 (Mode 24,34,7E) | |||
13 | CRT 1024×768 (Mode 24I, 34I, 7EI) | |||
14 | CRT 640×380 (Mode 40,41) | |||
15 | CRT, Flat Panel & Simultaneous Boot | A33 | 82 | |
16 | CRT | A8F | 10 | |
17 | Flat Panel and Simultaneous | A99 | 2 | |
18 | Flat Panel and Simultaneous | |||
19 | Panel Control Parameters | A9B | 36 | |
21 | Simultaneous video parameters | ABF | 38 | |
20 | Flat Panel parameters | AE5 | 38 |
Page 1 – Display Options
Page 2 – BIOS Feature
Page 3 – BIOS Features
Page 4 – Extended Modes (1MB Memory)
Page 5 – CRT 132x25x16 (Mode 60)
Page 6 – CRT 132x50x16 (Mode 61)
Page 7 – CRT 800x600x16 (Mode 6A/70)
Page 8 – CRT 1024x768x16 Non Interlace (Mode 72/75)
Page 9 – CRT 1024x768x16 Interlace (72I/75I)
Page 10 – CRT 640×480 (Mode 20,30,79)
Page 11 – CRT 800×600 (Mode 22,32,7C)
Page 12 – CRT 1024×768 (Mode 24,34,7E)
Page 13 – CRT 1024×768 (Mode 24I, 34I, 7EI)
Page 14 – CRT 640×480 (Mode 40,41)
Page 15 – CRT, Flat Panel & Simultaneous Boot
A33 | 02 | 01 |
A35 | 04 | A1 |
A37 | 05 | 00 |
A39 | 0B | 00 |
A3B | 08 | 00 |
A3D | 0C | 00 |
A3F | 0D | 00 |
A41 | 0E | 80 |
A43 | 10 | 00 |
A45 | 11 | 00 |
A47 | 51 | 63 |
A49 | 14 | 00 |
A4B | 15 | 00 |
A4D | 16 | 00 |
A4F | 17 | 00 |
A51 | 1F | 00 |
A53 | 24 | 12 |
A55 | 25 | 59 |
A57 | 26 | 00 |
A59 | 28 | 80 |
A5B | 29 | 4C |
A5D | 2B | 00 |
A5F | 33 | 60 |
A61 | 30 | 03 |
A63 | 31 | 58 |
A65 | 32 | 3F |
A67 | 33 | 40 |
A69 | 30 | 03 |
A6B | 31 | 4E |
A6D | 32 | 59 |
A6F | 00 | 00 |
A71 | 44 | 00 |
A73 | 45 | 00 |
A75 | 4F | 04 |
A77 | 58 | 00 |
A79 | 59 | 84 |
A7B | 5A | 00 |
A7D | 5C | 02 |
A7F | 5F | 00 |
A81 | 60 | 88 |
A83 | 61 | 2E |
A85 | 62 | 07 |
A87 | 63 | 01 |
A89 | 70 | 00 |
A8B | 72 | 24 |
A8D | 00 | 00 |
Page 16 – CRT
Location | XR Register | XR Value |
A8F | 52 | 42 |
A91 | 53 | 00 |
A93 | 6F | 00 |
A95 | 00 | 00 |
A97 | 00 | 00 |
Page 17 – Flat Panal and Simultaneous
Location | XR Register | XR Value |
A99 | 52 | 44 |
Page 18 – Flat Panel and Simultaneous
This is a menu of options, I have not identified their locations yet, and currently they are not needed.
Page 19 – Panel Control Parameters
Location | XR Register | XR Value |
A9B | 06 | C2 |
A9D | 0F | 10 |
A9F | 4F | 04 |
AA1 | 50 | 15 |
AA3 | 51 | 63 |
AA5 | 54 | 3A |
AA7 | 55 | E5 |
AA9 | 56 | 00 |
AAB | 57 | 1B |
AAD | 5B | 8F |
AAF | 5D | 10 |
AB1 | 5E | 80 |
AB3 | 6C | 18 |
AB5 | 6E | DA |
AB7 | 6F | 1B |
AB9 | 00 | 00 |
ABB | 00 | 00 |
ABD | 00 | 00 |
Page 21 – Simultaneous video
Location | XR Register | XR Value |
ABF | 19 | 55 |
AC1 | 1A | 00 |
AC3 | 1B | 5E |
AC5 | 1C | 4F |
AC7 | 2C | 15 |
AC9 | 2D | 50 |
ACB | 2E | 50 |
ACD | 2F | 00 |
ACF | 53 | 1C |
AD1 | 50 | 15 |
AD3 | 64 | FF |
AD5 | 65 | 07 |
AD7 | 66 | EA |
AD9 | 67 | 0C |
ADB | 68 | DF |
ADD | 6F | 1B |
ADF | 00 | 00 |
AE1 | 00 | 00 |
AE3 | 00 | 00 |
Page 20 – Flat Panel
Location | XR Register | XR Value |
AE5 | 19 | 57 |
AE7 | 1A | 19 |
AE9 | 1B | 59 |
AEB | 1C | 4F |
AED | 2C | 04 |
AEF | 2D | 50 |
AF1 | 2E | 50 |
AF3 | 2F | 00 |
AF5 | 50 | 15 |
AF7 | 53 | 1C |
AF9 | 64 | E4 |
AFB | 65 | 07 |
AFD | 66 | E0 |
AFF | 67 | 01 |
B01 | 68 | DF |
B03 | 6F | 1B |
B05 | 00 | 00 |
B07 | 00 | 00 |
B09 | 00 | 00 |