seti $printhelp = $printhelp seti $help = $help if $help = 1 echo 'Perform the old 28 bit readlong command.' echo 'This command is obsolete and not supported on all drives.' echo 'This requires number variables "sector" to be set.' echo '"sector" is the sector to read.' echo 'This also requires the string variable "file" to be set.' echo '"file" is the name of the file the data will be written to.' echo 'Example: opensuperclone --tool -t /dev/sda -f ata28_readlong sector=0 file=="longsector0.bin"' if $printhelp = 1 exit 0 endif echo 'Hit ENTER to continue...' userinput $choicestring previousscript endif include good_subroutines.osc # 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 variablecheck $file if $error_level < 16 seti $ask = 1 elseif $using_menu = 1 seti $ask = 1 endif if $ask = 1 echo "Enter file name, or leave blank to show data on screen:" userinput $choicestring sets $file = $choicestring endif # set the buffer size to one sector plus 8 ecc bytes seti $buffersize = 512 + 8 buffersize $buffersize clearbuffer # set the LBAs to the proper sector start seti $LBAlow = $sector & 0xff seti $temp = $sector > 8 seti $LBAmid = $temp & 0xff seti $temp = $sector > 16 seti $LBAhigh = $temp & 0xff seti $temp = $sector > 24 seti $LBAdevice = $temp & 0x0f # set some things for the ata read command setreadpio # set features to 0 seti $features = 0 # set count to 1 seti $count = 1 # set device bits 7(compatibility) 6(LBA mode) 5(compatibility) seti $device = 0xe0 # set device bits 0-3 to high 4 bits of LBA seti $device = $device | $LBAdevice # set the command for readlong seti $command = 0x22 # perform the command ata28cmd $features $count $LBAlow $LBAmid $LBAhigh $device $command # check if command failed gosub status_check # show the actual data on the screen or write the data to the file if $file = $null printbuffer 0 $data_transferred else writebuffer $file 0 0 $data_transferred echo "Data written to file: " $file endif previousscript end