Save VGABIOS

Discusses BIOS flashers and utilities from Award, AMI and Uniflash
Post Reply
Borg Number One
Master Flasher
Posts: 169
Joined: Sun May 02, 2004 7:47 pm
Contact:

@AJChips

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
I have tried different PCI/ISA cards to gether with your tool.
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
or:

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
BIOS backup - Multi BIOS - prevent a BIOS update failure:
RD1 BIOS Savior

http://www.ioss.com.tw
ajzchips
El cheapo dude
Posts: 3048
Joined: Sat Mar 23, 2002 12:41 pm
Location: Madrid, Spain

Forgot about this thread.... Now I use another utility which saves upto 64KB, and works 100% fine with ATI and Nvidia cards, among many others :)
Post Reply