rom.by/biosedit/examples/ami.rar Там как раз есть разобранный биос от TX100. Что касается HDD>32Gb - берёшь модуль Int-13 (0Dh), ищешь там:
pushf cli cld mov cx,00100 ;"? " repe insw popf pop di pop dx call 00000004D -------- ( pushf push bx je 000000032 -------- ( push eax pop ax pop dx mov bx,007A1 ;"•б" cmp dx,bx jb 000000022 -------- ( mov ax,0FFFF ;" " jmps 00000002E -------- ( div bx shr bx,1 cmp bx,dx ja 00000002E -------- ( inc ax jne 00000002E -------- ( dec ax shl eax,010 ;"?" pop bx mov cx,es:[bx][00002] mov ax,es:[bx][00006] mov dh,al mov bx,es:[bx][0000C] mov al,001 ;"?" popf jne 0FFFFFFCD or ah,bh je 0FFFFFFCD jmp 00000FFCB
...и меняешь в нём на такое:
pushf push bx or eax,eax je 000000054 -------- ( push eax mov al,es:[bx][0000C] mul b,es:[bx][00006] mov cx,ax cmp eax,003EFFC10 ;"?я№?" jbe 00000003B -------- ( mov b,es:[bx][00006],0FF ; cmp eax,03EC0C13F ;">???" jbe 00000003B -------- ( mov b,es:[bx][0000C],0FF ; mov al,es:[bx][0000C] mul b,es:[bx][00006] mov cx,ax pop ax pop dx div cx shr cx,1 cmp dx,cx jb 000000050 -------- ( inc ax mov cx,ax jmps 000000058 -------- ( mov cx,es:[bx][00002] pop bx mov ax,es:[bx][00006] mov dh,al mov bx,es:[bx][0000C] mov al,001 ;"?" popf jne 00000FFAC or ah,bh je 00000FFAC jmp 00000FFAA xor eax,eax test b,es:[bx][00063],002 ; je 000000092 -------- ( mov eax,es:[bx][00078] cmp eax,000FBFC10 ;" ?№?" jb 000000092 -------- ( cmp w,es:[bx][00002],03FFF je 000000096 -------- ( cmp al,al jmps 000000099 -------- ( or eax,eax retn
Или лучше всего добавляешь переход на такую процедурку:
_AMI32G:
je .skip
push eax mov al, [es:bx+0Ch] mul byte [es:bx+6] mov cx, ax cmp eax, 03EFFC10h jbe @F
mov byte [es:bx+6], 0FFh cmp eax, 03EC0C13Fh jbe @F mov byte [es:bx+0Ch], 0FFh @@: mov al, [es:bx+0Ch] mul byte [es:bx+6] mov cx, ax pop ax pop dx div cx
shr cx, 1 cmp dx, cx jb @F inc ax @@: mov cx, ax jmp .exit
.skip: mov cx, [es:bx+2] .exit: ret
rom.by/biosedit/examples/ami.rar
Там как раз есть разобранный биос от TX100.
Что касается HDD>32Gb - берёшь модуль Int-13 (0Dh), ищешь там:
pushf
cli
cld
mov cx,00100 ;"? "
repe insw
popf
pop di
pop dx
call 00000004D -------- (
pushf
push bx
je 000000032 -------- (
push eax
pop ax
pop dx
mov bx,007A1 ;"•б"
cmp dx,bx
jb 000000022 -------- (
mov ax,0FFFF ;" "
jmps 00000002E -------- (
div bx
shr bx,1
cmp bx,dx
ja 00000002E -------- (
inc ax
jne 00000002E -------- (
dec ax
shl eax,010 ;"?"
pop bx
mov cx,es:[bx][00002]
mov ax,es:[bx][00006]
mov dh,al
mov bx,es:[bx][0000C]
mov al,001 ;"?"
popf
jne 0FFFFFFCD
or ah,bh
je 0FFFFFFCD
jmp 00000FFCB
mov eax,es:[bx][00078]
cmp eax,000FBFC10 ;" ?№?"
jb 000000062 -------- (
cmp w,es:[bx][00002],03FFF
je 000000065 -------- (
xor eax,eax
or eax,eax
retn
...и меняешь в нём на такое:
pushf
push bx
or eax,eax
je 000000054 -------- (
push eax
mov al,es:[bx][0000C]
mul b,es:[bx][00006]
mov cx,ax
cmp eax,003EFFC10 ;"?я№?"
jbe 00000003B -------- (
mov b,es:[bx][00006],0FF ;
cmp eax,03EC0C13F ;">???"
jbe 00000003B -------- (
mov b,es:[bx][0000C],0FF ;
mov al,es:[bx][0000C]
mul b,es:[bx][00006]
mov cx,ax
pop ax
pop dx
div cx
shr cx,1
cmp dx,cx
jb 000000050 -------- (
inc ax
mov cx,ax
jmps 000000058 -------- (
mov cx,es:[bx][00002]
pop bx
mov ax,es:[bx][00006]
mov dh,al
mov bx,es:[bx][0000C]
mov al,001 ;"?"
popf
jne 00000FFAC
or ah,bh
je 00000FFAC
jmp 00000FFAA
xor eax,eax
test b,es:[bx][00063],002 ;
je 000000092 -------- (
mov eax,es:[bx][00078]
cmp eax,000FBFC10 ;" ?№?"
jb 000000092 -------- (
cmp w,es:[bx][00002],03FFF
je 000000096 -------- (
cmp al,al
jmps 000000099 -------- (
or eax,eax
retn
Или лучше всего добавляешь переход на такую процедурку:
_AMI32G:
je .skip
push eax
mov al, [es:bx+0Ch]
mul byte [es:bx+6]
mov cx, ax
cmp eax, 03EFFC10h
jbe @F
mov byte [es:bx+6], 0FFh
cmp eax, 03EC0C13Fh
jbe @F
mov byte [es:bx+0Ch], 0FFh
@@:
mov al, [es:bx+0Ch]
mul byte [es:bx+6]
mov cx, ax
pop ax
pop dx
div cx
shr cx, 1
cmp dx, cx
jb @F
inc ax
@@:
mov cx, ax
jmp .exit
.skip:
mov cx, [es:bx+2]
.exit:
ret