📄 pcirom.txt
字号:
code segment ;PCI netwark BOOTROM演示
assume cs:code,ds:code
org 0h
stt db 55h,0aah,10h ;
jmp init
org 18h
PCI_STRU_ADDR DW offset PCI_DATA_STRU ;
org 1ah
PCI_DATA_STRU db 'PCIR' ;
dw 10ech
dw 8139h
dw 0
dw 0018h
db 0
db 0,0,2
dw 0010h
dw 0000h
db 0
db 80h
dw 0
org 33h
db 'Data Protect V1.00'
org 4dh
db '$pnp'
org 60H
org 100h
init:pushf ;
db 60h ;pusha
push ds
push es
xor ax,ax
mov ds,ax
mov di,64h
mov ax,cs
cmp ax,[di+2] ;
jz e19 ;
mov si,80h
cli
mov ax,[di] ;
mov bx,[di+2]
mov [si],ax
mov [si+2],bx
lea dx,new19
mov [di],dx ;
mov [di+2],cs
sti
e19:pop es
pop ds
db 61h ;popa
popf
db 0cbh ;retf ;
new19:pushf ;
db 60h ;pusha
push ds
push es
mov si,80h
mov di,64h
mov ax,0
mov ds,ax
cli
mov ax,[si] ;
mov cx,[si+2]
mov [di],ax
mov [di+2],cx
sti
xor ax,ax
mov ds,ax
mov ax,ds:[413h]
sub ax,4 ;
mov cl,6
shl ax,cl
mov es,ax ;
push cs
pop ds
mov cx,1000h ;
lea si,stt
mov di,0
rep movsb
lea bx,xia
push es
push bx
db 0cbh ;
xia:push cs
pop ds
push cs
pop es
lea bx,s001
mov cx,1
mov dx,0080h
mov ax,0201h
int 13h ;
mov cx,64
add bx,1beh
mov al,0
lopb:cmp [bx],al
jnz jx
inc bx
loop lopb ;
jmp jian
jx:mov ax,3
int 10h
lea si,setts;
call xs
mov ah,0 ;
int 16h
pop es
pop ds
db 61h
popf
int 19h ;
jian:mov ax,4c49h
mov cx,414fh
mov dl,80h
int 13h ;
cmp ax,1234h
jnz r8139
jmp quit ;
r8139:jmp rmbt
iobase dw 0
addre db 20h ;
dbuf db 64 dup(0)
errts db 0dh,0ah,'There is not RTL8139',0
errhd db 0dh,0ah,'The HDD ERR',0
setts db 0dh,0ah,'[PASSWORD_PROTECTOR]'
db 0dh,0ah,'setting please!',0
count db 0 ;
old19:db 0eah
old19adr:dd 0
mc1 macro n ;
mov al,n
out dx,al
call ys
endm
mc2 macro m ;
push ax
or al,m
out dx,al
call ys
pop ax
endm
rmbt:push cs
pop ds
push cs
pop es
mov ax,0b102h
mov cx,8139h
mov dx,10ech
mov si,0
int 1ah ;
cmp ah,0
jz bg1
jmp rerrxs
bg1:mov ax,0b109h
mov di,10h
int 1ah
cmp ah,0
jz bg2
jmp rerrxs
bg2:and cx,0fffeh ;
mov iobase,cx
mov dx,cx
add dx,50h ;
lea di,dbuf ;
ag: mc1 80h ;
mov bl,addre ;
add bl,count
mc1 88h ;
or bl,80h ;
call wdmdz ;
mc1 8ch ;
mc1 88h ;
mov ax,0 ;
mov cx,10h ;
lopr:push ax
mc1 8ch ;
mc1 88h ;
in al,dx ;
shr al,1 ;
pop ax
rcl ax,1 ;
loop lopr ;
stosw
inc count
cmp count,20h
jz rend
jmp ag
rend:mov al,0 ;
out dx,al
eok:lea si,dbuf
lea di,s001
add di,1beh
mov cx,40h
rep movsb
set13:xor ax,ax ;
mov ds,ax
mov ax,ds:[4ch]
mov bx,ds:[4eh]
lea di,old13adr
mov cs:[di],ax
mov cs:[di+2],bx
lea si,new13
mov word ptr ds:[4ch],si
mov word ptr ds:[4eh],cs
jmp quit
wdmdz proc near;
mc1 88h
mc1 8ch
mc1 8ah
mc1 8eh
mov cx,8 ;
lopwd:shl bl,1 ;
rcl al,1
rcl al,1
and al,2
mc2 88h
mc2 8ch
loop lopwd
ret
wdmdz endp
ys proc near ;
push cx
mov cx,0020h
lopy:loop lopy
pop cx
ret
ys endp
xs proc near ;
push si
push ax
lzxs:mov al,[si]
cmp al,0
jz tc
mov ah,0eh
int 10h
inc si
jmp lzxs
tc:pop ax
pop si
ret
xs endp
rerrxs:lea si,errts;
call xs
mov ah,0
int 16h
jmp eqq
ehdd:lea si,errhd ;
call xs
mov ah,0
int 16h
jmp eqq
quit:xor ax,ax
mov ds,ax
sub byte ptr ds:[0413h],4 ;
eqq:xor ax,ax
mov ds,ax
lea bx,old19adr ;
mov ax,ds:[0080h]
mov cs:[bx],ax
mov ax,ds:[0082h]
mov cs:[bx+2],ax
push cs
pop ds
push cs
pop es
lea bx,buf2
mov cx,2
mov dx,0080h
mov ax,0201h
int 13h ;
mov al,[bx]
mov gs,al
zai:mov ax,3
int 10h
bj1:call yzmm
cmp escbz,1 ;
jz qx
cmp mmbz,1 ;
jz yesok
qx:inc js
cmp js,3
jb zai
sj: jmp sj ;
yesok:pop es
pop ds
db 61h ;
popf
jmp old19 ;
old13:db 0eah
old13adr:dd 0
new13:jmp bgnew13 ;
s001 db 512 dup(0) ;
bgnew13:pushf
cmp ax,4c49h
jnz ok1
cmp cx,414fh
jnz ok1
mov ax,1234h ;
popf
iret
ok1:db 60h ;
cmp dx,0080h
jz cmp1
jmp q13
cmp1:cmp cx,1
jz cmp2
jmp q13
cmp2:cmp ah,2
jz ok2
q13:db 61h ;popa
popf
jmp old13
ok2:push ds
mov di,bx
lea si,s001
push cs
pop ds
mov cx,512
rep movsb
pop ds
db 61h ;popa
popf
clc
mov ah,0
db 0cah,02h ;retf 2
escbz db 0 ;
js db 0 ;
key db 8 dup(0) ;
mmbz db 0 ;
yzts db 'password: '
yzmm proc near ;
db 60h ;
mov escbz,0
mov cx,8 ;
lea di,key ;
mov al,0 ;
repnz stosb
mov ax,1301h ;
mov bx,000eh ;
mov cx,18 ;
mov dx,101fh ;
lea bp,yzts
int 10h
mov ah,2
mov bh,0
mov dx,1028h ;
int 10h
lea di,key
mov cx,8
zjr:mov ah,0 ;
int 16h
cmp al,0dh ;
jz hc
cmp al,1bh ;
jnz yxj
jmp fq
GS DB 0 ;
yxj:cmp al,'0' ;
jb zjr
cmp al,'9' ;
jbe yx
zm: cmp al,'A'
jb zjr
cmp al,'Z'
jbe yx
zm1:cmp al,'a'
jb zjr
cmp al,'z'
ja zjr
yx: mov [di],al ;
mov ax,0e2ah ;
int 10h
inc di
dec cx
jz hc ;
jmp zjr ;
hc: cmp cl,8
jz fq ;
mov ch,8
sub ch,CL ;
MOV CL,CH
mov ch,0
cmp cl,gs ;
jnz fq
push cx
lea di,key ;
mov al,5ah
lop1:xor [di],al
inc di
loop lop1
LEA SI,BUF2 ;
pop cx ;
inc si ;
lea di,key
repz cmpsb ;
jnz fq ;
ok:mov mmbz,1 ;
jmp exit
fq:cmp gs,0
jnz gsn
jmp ok
gsn:mov mmbz,0 ;
cmp al,1bh
jnz exit
mov escbz,1
exit:db 61h
ret
yzmm endp
BUF2 DB 512 DUP(0) ;
code ends
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -