Files
OpenSuperClone/res/oscscripts/ata48_write_sectors_pio

170 lines
3.7 KiB
Plaintext

seti $printhelp = $printhelp
seti $help = $help
if $help = 1
echo 'Write sector(s) to the disk using 48 bit write pio data-out command.'
echo 'This requires number variables "sector" and "count" to be set.'
echo '"sector" is the starting sector to write.'
echo '"count" is the number of sectors to write (max 65536).'
echo 'This also requires the string variable "file" to be set.'
echo '"file" is the name of the file the data will be read from.'
echo 'Example: hddsupertool -t /dev/sda -f ata48_write_sectors_pio sector=0 count=1 file=="sector0.bin"'
echo 'Example: hddsupertool -t /dev/sda -f ata48_write_sectors_pio sector=2048 count=16 file=="sectors2048-2053.bin"'
if $printhelp = 1
exit 0
endif
echo 'Hit ENTER to continue...'
userinput $choicestring
previousscript
endif
include good_subroutines
# set a blank string variable to compare with user input
# make sure not to set this anyplace else
sets $null = ""
# set this to itself for use with the menu system
# make sure not to set this anyplace else
# if it was not previously set it will = 0
seti $using_menu = $using_menu
# find out if using menus or if variables were set on the command line, and ask for input if they were not set
seti $ask = 0
while 1 = 1
variablecheck $sector
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "Enter starting sector:"
userinput $choicestring
if $choicestring != $null
seti $sector = $choicestring 0
break
else
echo "Choice cannot be blank!"
endif
else
break
endif
done
seti $ask = 0
while 1 = 1
variablecheck $count
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "Enter count:"
userinput $choicestring
if $choicestring != $null
seti $count = $choicestring 0
break
else
echo "Choice cannot be blank!"
endif
else
break
endif
done
seti $ask = 0
while 1 = 1
variablecheck $file
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "Enter file name:"
userinput $choicestring
if $choicestring != $null
sets $file = $choicestring
break
else
echo "Choice cannot be blank!"
endif
else
break
endif
done
seti $ask = 0
variablecheck $yes
if $error_level < 16
seti $ask = 1
elseif $using_menu = 1
seti $ask = 1
endif
if $ask = 1
echo "You are about to perform a data changing command,"
echo 'type "YES" to continue:'
userinput $choicestring
if $choicestring != yes
if $choicestring != YES
echo "You chose not to continue."
previousscript
endif
endif
endif
# set the buffer size
seti $buffersize = $count * 512
buffersize $buffersize
clearbuffer
getfilesize $file
if $error_level < 0
echo "File '" $file "' not found."
previousscript
else
readbuffer $file 0 0 $buffersize
echo "Data read from file: " $file
endif
# set the LBAs to the proper sector start
seti $LBAlow = $sector & 0xffff
seti $temp = $sector > 16
seti $LBAmid = $temp & 0xffff
seti $temp = $sector > 32
seti $LBAhigh = $temp & 0xffff
# set some things for the ata write command
setwritepio
# set features to 0
seti $features = 0
# set device bits 7(compatibility) 6(LBA mode) 5(compatibility)
seti $device = 0xe0
# set the command for write pio extended data-out
seti $command = 0x34
# perform the command
ata48cmd $features $count $LBAhigh $LBAmid $LBAlow $device $command
# check if command failed
seti $command_failed = 0
gosub check_command_status
if $command_failed = 1
echo "Command failed!"
gosub show_sense_data
gosub show_ata_return_status
previousscript
endif
previousscript
end