On 7/19/2014 2:08 PM, Enrico Lazzerini wrote:
I managed to find a bios for an IBM 5170 AT 286 Type1
Mainboard. It is
here: 30aprile1989 (list here:
http://ibm-pc.org/firmware/ibm/5170/5170.htm)
In practice I have manually added the number of cylinders, heads, and sect
/ trk that allow the machine to recognise a disk IBM 250MB. At this point
regularly boots DOS.
But I wish to program these data permanently in the bios. Does anyone know
what program to use and give me the procedure? I tried with BIOSUTL, but
the new EPROM do not boot the machine.
With BIOSUTL i made what follow: read actual BIOS, you can add new disk
geometry parameters at free 47 position, then you have to recalculate bios
checsum, then BIOSUTIL devides BIOS into EVEN and ODD file so i can finally
program them into two 27256 150nS eprom.
Thank you
Enrico
Enrico,
I suspect you do not have a good checksum on your image, unless you took
pains to change that as well as the table Once you have modified your
table, you have to bring the sum which will be visible in the bios space
at F000:0 thru F000:ffff back to 0.
A simple checksum of the data is all that the bios does. See below. I
have patched numerous bios images, but always have to add a fudge in
some byte somewhere to bring the simple sum below back to 0 overall.
Jim
I used a copy from bitsavers for the listing below. Had to clean up the
OCR a bit :-)
http://bitsavers.trailing-edge.com/pdf/ibm/pc/at/1502494_PC_AT_Technical_Re…
If you look at the PC At tech reference, bios listing you can see what
they do:
On page 5-36, during startup ROS_CHECKSUM is called to check the roms.
On page 5-67 (PDF file page 205 on bitsavers)
EXTRN ROM_ERR: NEAR
;----------------------------------------
; ROS CHECKSUM SUBROUTINE ;
;----------------------------------------
ASSUME CS;CODE, DS:ABSO
POST3:
ROS_CHECKSUM PROC NEAR ; NEXT ROS MODULE
SUB CX,CX ; NUMBER OF BYTES TO ADD IS 64K
ROS_CHECKSUM_CNT: ; ENTRY FOR OPTIONAL ROS TEST
XOR AL,AL
C26:
ADD AL,DS:[BX]
INC BX ;POINT TO NEXT BYTE
LOOP C6 ; ADD ALL BYTES IN ROS MODULE
OR AL,AL ; SUM = O?
RET
ROS_CHECKSUM ENDP