Virus Labs & Distribution
VLAD #3 - HD Port Writing
;
; Writing to the hard disk using the ports! by qark
; +---------------------------------------+
;
; The only differences between reading and writing using the ports is
; that 30h is sent to the command register, and instead of INSW you
; OUTSW.
;
; I chose to write to sector 2 because some idiot would trash their MBR
; by running this.
;
mov dx,1f6h ;Drive and head port
mov al,0a0h ;Drive 0, head 0
out dx,al
mov dx,1f2h ;Sector count port
mov al,1 ;Write one sector
out dx,al
mov dx,1f3h ;Sector number port
mov al,2 ;Wrote to sector two
out dx,al
mov dx,1f4h ;Cylinder low port
mov al,0 ;Cylinder 0
out dx,al
mov dx,1f5h ;Cylinder high port
mov al,0 ;The rest of the cylinder 0
out dx,al
mov dx,1f7h ;Command port
mov al,30h ;Write with retry.
out dx,al
oogle:
in al,dx
test al,8 ;Wait for sector buffer ready.
jz oogle
mov cx,512/2 ;One sector /2
mov si,offset buffer
mov dx,1f0h ;Data port - data comes in and out of here.
rep outsw ;Send it.
; ------------
mov ax,201h ;We'll read in sector 2 using
mov bx,offset buffer2 ;int13h and see if we are successful.
mov cx,2
mov dx,80h
int 13h
mov cx,512
mov si,offset buffer
mov di,offset buffer2
repe cmpsb ;Compare the buffers.
jne failure
mov ah,9
mov dx,offset write_msg
int 21h
jmp w_exit
failure:
mov ah,9
mov dx,offset fail
int 21h
w_exit:
mov ax,4c00h ;Exit the program
int 21h
write_msg db 'Sector two written to using the ports.$'
fail db 'Writing using ports failed.$'
buffer db 512 dup ('A')
buffer2 db 512 dup ('D')
- VLAD #3 INDEX -
About VLAD -
Links -
Contact Us -
Main
|
|