Your Tool which should save the VGA-BIOS does not really produce an 1:1 Image of the VGA-BIOS/ does not really saves a 32kb rom image!!!!
http://www.wimsbios.com/ajzchips/index.php
Code: Select all
VGA Savebios.zip zip 353 B 05-04-04 Saves a 32KB ROM image of your VGA BIOS
Furthermore I putted all the EEPROMS from that mentioned graphic cards to my EEPROM-programmer and created images.
After this I compared them with the images produced by your tool.
Allways there are differences in some/or some more bytes.
Your tool simply dumps the memory area C0000-C7FFF.
The content of this memory area was copied from the VGA-BIOS to to the ram by the System Bios.
The content is allready modified (by the System-BIOS) and it is not the completely the same like data inside the EEPROM.
Furthermore you cannot dump VGA-BIOSes which are larger than 32K.
Nearly all graphic cards have more than 32K space in their EEPROMS.
Only the suitable VGA-BIOS/EEPROM-flasher utilities or an additional flash-device are/is able to dump the VGABIOS 1:1.
PS:
Here are the sources... if you lost them.

Code: Select all
seg000 segment byte public 'CODE'
assume cs:seg000
org 100h
assume es:nothing, ss:seg000, ds:seg000
public start
start proc near
mov dx, 145h
mov ah, 9
int 21h ; DOS - PRINT STRING
; DS:DX -> string terminated by "$"
mov ah, 3Ch
xor cx, cx
mov dx, 1C3h
int 21h ; DOS - 2+ - CREATE A FILE WITH HANDLE (CREAT)
; CX = attributes for file
; DS:DX -> ASCIZ filename (may include drive and path)
jb loc_13C
mov bx, ax
mov ds:1EBh, ax
mov cx, 8000h
mov ax, 0C000h
mov ds, ax
assume ds:nothing
xor dx, dx
mov ah, 40h
int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE
; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
mov bx, cs
mov ds, bx
assume ds:seg000
jb loc_13C
cmp ax, 8000h
jnz loc_13C
loc_130: ; CODE XREF: start+43j
mov bx, ds:1EBh
mov ah, 3Eh
int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE
; BX = file handle
mov ah, 4Ch
int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
; AL = exit code
loc_13C: ; CODE XREF: start+10j start+29j ...
mov ah, 9
mov dx, 1CFh
int 21h ; DOS - PRINT STRING
; DS:DX -> string terminated by "$"
jmp short loc_130
start endp
db 0Dh ;
db 0Ah ;
db 56h ; V
db 69h ; i
db 64h ; d
db 65h ; e
db 6Fh ; o
db 20h ;
db 42h ; B
db 49h ; I
db 4Fh ; O
db 53h ; S
db 20h ;
db 53h ; S
db 61h ; a
db 76h ; v
db 65h ; e
db 72h ; r
db 20h ;
db 76h ; v
db 65h ; e
db 72h ; r
db 2Eh ; .
db 20h ;
db 31h ; 1
db 2Eh ; .
db 30h ; 0
db 0Dh ;
db 0Ah ;
db 28h ; (
db 43h ; C
db 29h ; )
db 20h ;
db 43h ; C
db 6Fh ; o
db 70h ; p
db 79h ; y
db 72h ; r
db 69h ; i
db 67h ; g
db 68h ; h
db 74h ; t
db 20h ;
db 62h ; b
db 79h ; y
db 20h ;
db 47h ; G
db 61h ; a
db 72h ; r
db 61h ; a
db 76h ; v
db 73h ; s
db 6Bh ; k
db 79h ; y
db 20h ;
db 41h ; A
db 6Eh ; n
db 64h ; d
db 72h ; r
db 65h ; e
db 77h ; w
db 2Ch ; ,
db 20h ;
db 31h ; 1
db 39h ; 9
db 39h ; 9
db 37h ; 7
db 2Eh ; .
db 0Dh ;
db 0Ah ;
db 53h ; S
db 6Dh ; m
db 65h ; e
db 6Ch ; l
db 6Ch ; l
db 20h ;
db 6Fh ; o
db 66h ; f
db 20h ;
db 53h ; S
db 6Fh ; o
db 75h ; u
db 74h ; t
db 68h ; h
db 20h ;
db 53h ; S
db 6Fh ; o
db 66h ; f
db 74h ; t
db 77h ; w
db 61h ; a
db 72h ; r
db 65h ; e
db 2Ch ; ,
db 20h ;
db 4Fh ; O
db 64h ; d
db 65h ; e
db 73h ; s
db 73h ; s
db 61h ; a
db 0Dh ;
db 0Ah ;
db 32h ; 2
db 3Ah ; :
db 34h ; 4
db 36h ; 6
db 37h ; 7
db 2Fh ; /
db 32h ; 2
db 39h ; 9
db 2Eh ; .
db 34h ; 4
db 20h ;
db 40h ; @
db 20h ;
db 46h ; F
db 69h ; i
db 64h ; d
db 6Fh ; o
db 4Eh ; N
db 65h ; e
db 74h ; t
db 0Dh ;
db 0Ah ;
db 24h ; $
db 76h ; v
db 69h ; i
db 64h ; d
db 62h ; b
db 69h ; i
db 6Fh ; o
db 73h ; s
db 2Eh ; .
db 62h ; b
db 69h ; i
db 6Eh ; n
db 0 ;
db 0Dh ;
db 0Ah ;
db 21h ; !
db 21h ; !
db 21h ; !
db 20h ;
db 45h ; E
db 52h ; R
db 52h ; R
db 4Fh ; O
db 52h ; R
db 20h ;
db 49h ; I
db 4Eh ; N
db 20h ;
db 53h ; S
db 41h ; A
db 56h ; V
db 49h ; I
db 4Eh ; N
db 47h ; G
db 20h ;
db 21h ; !
db 21h ; !
db 21h ; !
db 0Dh ;
db 0Ah ;
db 24h ; $
seg000 ends
end start
Code: Select all
data_4e equ 1EBh ;*(9C7B:01EB=0)
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
savebios proc far
start:
mov dx,offset data_1 ; (9C7B:0145='')
mov ah,9
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
mov ah,3Ch ; '<'
xor cx,cx ; Zero register
mov dx,offset data_2 ; (9C7B:01C3='vidbios.bin')
int 21h ; DOS Services ah=function 3Ch
; create/truncate file @ ds:dx
jc loc_2 ; Jump if carry Set
mov bx,ax
mov ds:data_4e,ax ; (9C7B:01EB=0)
mov cx,8000h
mov ax,0C000h
mov ds,ax
xor dx,dx ; Zero register
mov ah,40h
int 21h ; DOS Services ah=function 40h
; write file bx=file handle
; cx=bytes from ds:dx buffer
mov bx,cs
mov ds,bx
jc loc_2 ; Jump if carry Set
cmp ax,8000h
jne loc_2 ; Jump if not equal
loc_1:
mov bx,ds:data_4e ; (9C7B:01EB=0)
mov ah,3Eh
int 21h ; DOS Services ah=function 3Eh
; close file, bx=file handle
mov ah,4Ch
int 21h ; DOS Services ah=function 4Ch
; terminate with al=return code
loc_2:
mov ah,9
mov dx,offset data_3 ; (9C7B:01CF='')
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
jmp short loc_1 ; (0130)
data_1 db 0Dh, 0Ah, 'Video BIOS Saver ver. '
db '1.0', 0Dh, 0Ah
copyright db '(C) Copyright by Garavsky Andrew'
db ', 1997.'
db 0Dh, 0Ah, 'Smell of South Softwar'
db 'e, Odessa', 0Dh, 0Ah, '2:467/29.'
db '4 @ FidoNet', 0Dh, 0Ah, '$'
data_2 db 'vidbios.bin', 0
data_3 db 0Dh, 0Ah, '!!! ERROR IN SAVING !!'
db '!', 0Dh, 0Ah, '$'
savebios endp
seg_a ends
end start