Files
2026-02-23 11:01:15 +01:00

393 lines
6.1 KiB
Plaintext

seti $printhelp = $printhelp
seti $help = $help
if $help = 1
echo 'Western Digital ROYL read data table.'
echo 'This requires the text variable "file" to be set.'
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
# set the file name to be written
while 1 = 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:"
userinput $choicestring
if $choicestring != $null
sets $file = $choicestring
break
else
echo "Choice cannot be blank!"
endif
else
break
endif
done
gosub enable_vsc
# vsc to prepare to get drive data table
echo "prepare to get data table"
buffersize 0x200
clearbuffer
setbuffer 0
0d 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
endbuffer
setwritepio
ata28cmd 0xd6 0x01 0xbe 0x4f 0xc2 0xa0 0xb0
# check if command failed
gosub status_check
# vsc to get to get drive data table
echo "getting data table"
buffersize 0x200
clearbuffer
setreadpio
ata28cmd 0xd5 0x01 0xbf 0x4f 0xc2 0xa0 0xb0
# check if command failed
gosub status_check
copybuffertoscratchpad 0 0 512
gosub disable_vsc
echo "data table read done"
printscratchpad 0 512
seti $offset = 0
seti $bytes = 2
gosub process_offset
seti $offset = 2
seti $bytes = 1
gosub process_offset
seti $offset = 10
seti $bytes = 1
gosub process_offset
seti $offset = 18
seti $bytes = 1
gosub process_offset
seti $offset = 26
seti $bytes = 2
gosub process_offset
seti $offset = 28
seti $bytes = 1
gosub process_offset
seti $offset = 29
seti $bytes = 1
gosub process_offset
seti $offset = 30
seti $bytes = 1
gosub process_offset
seti $offset = 31
seti $bytes = 1
gosub process_offset
seti $offset = 32
seti $bytes = 1
gosub process_offset
seti $offset = 33
seti $bytes = 1
gosub process_offset
seti $offset = 34
seti $bytes = 2
gosub process_offset
seti $offset = 36
seti $bytes = 2
gosub process_offset
seti $offset = 38
seti $bytes = 2
gosub process_offset
seti $offset = 40
seti $bytes = 4
gosub process_offset
seti $offset = 44
seti $bytes = 1
gosub process_offset
seti $offset = 45
seti $bytes = 1
gosub process_offset
seti $offset = 46
seti $bytes = 1
gosub process_offset
seti $offset = 47
seti $bytes = 1
gosub process_offset
seti $offset = 48
seti $bytes = 1
gosub process_offset
seti $offset = 49
seti $bytes = 1
gosub process_offset
seti $offset = 50
seti $bytes = 2
gosub process_offset
seti $offset = 52
seti $bytes = 2
gosub process_offset
seti $offset = 54
seti $bytes = 2
gosub process_offset
seti $offset = 56
seti $bytes = 2
gosub process_offset
seti $offset = 58
seti $bytes = 2
gosub process_offset
seti $offset = 60
seti $bytes = 2
gosub process_offset
seti $offset = 62
seti $bytes = 2
gosub process_offset
seti $offset = 64
seti $bytes = 2
gosub process_offset
seti $offset = 66
seti $bytes = 2
gosub process_offset
seti $offset = 68
seti $bytes = 2
gosub process_offset
seti $offset = 70
seti $bytes = 1
gosub process_offset
seti $offset = 71
seti $bytes = 1
gosub process_offset
seti $offset = 72
seti $bytes = 2
gosub process_offset
seti $offset = 74
seti $bytes = 1
gosub process_offset
seti $offset = 76
seti $bytes = 2
gosub process_offset
seti $offset = 78
seti $bytes = 1
gosub process_offset
seti $offset = 86
seti $bytes = 1
gosub process_offset
seti $offset = 94
seti $bytes = 4
gosub process_offset
seti $offset = 118
seti $bytes = 2
gosub process_offset
seti $offset = 120
seti $bytes = 2
gosub process_offset
seti $offset = 122
seti $bytes = 2
gosub process_offset
seti $offset = 124
seti $bytes = 2
gosub process_offset
seti $offset = 126
seti $bytes = 2
gosub process_offset
seti $offset = 128
seti $bytes = 2
gosub process_offset
seti $offset = 130
seti $bytes = 2
gosub process_offset
seti $offset = 132
seti $bytes = 4
gosub process_offset
seti $offset = 136
seti $bytes = 2
gosub process_offset
seti $offset = 138
seti $bytes = 2
gosub process_offset
seti $offset = 140
seti $bytes = 1
gosub process_offset
seti $offset = 142
seti $bytes = 2
gosub process_offset
seti $offset = 144
seti $bytes = 1
gosub process_offset
seti $offset = 148
seti $bytes = 4
gosub process_offset
seti $offset = 156
seti $bytes = 2
gosub process_offset
seti $offset = 158
seti $bytes = 2
gosub process_offset
seti $offset = 160
seti $bytes = 1
gosub process_offset
seti $offset = 164
seti $bytes = 1
gosub process_offset
seti $offset = 165
seti $bytes = 1
gosub process_offset
seti $offset = 166
seti $bytes = 1
gosub process_offset
seti $offset = 167
seti $bytes = 1
gosub process_offset
seti $offset = 168
seti $bytes = 1
gosub process_offset
seti $offset = 170
seti $bytes = 2
gosub process_offset
seti $offset = 172
seti $bytes = 2
gosub process_offset
seti $offset = 0
seti $bytes = 2
gosub process_offset
seti $offset = 0
seti $bytes = 2
gosub process_offset
previousscript
end
subroutine process_offset
if $bytes = 1
seti $value = scratchpad $offset b
elseif $bytes = 2
seti $value = scratchpad $offset w
elseif $bytes = 4
seti $value = scratchpad $offset dw
elseif $bytes = 8
seti $value = scratchpad $offset qw
else
seti $value = 0
echo "BYTE COUNT OUT OF RANGE"
endif
hex
sets $offset_string = "0x" $offset
sets $value_string = "0x" $value
sets $bytes_string = "0x" $bytes
decimal
echo "offset=" $offset " (" $offset_string ") value=" $value " (" $value_string ")(" $bytes " bytes)"
endsubroutine
subroutine enable_vsc
# enable vendor specific commands
echo "enable vsc"
buffersize 0
setreadpio
ata28cmd 0x45 0x0b 0x00 0x44 0x57 0xa0 0x80
# check if command failed
gosub status_check
endsubroutine
subroutine disable_vsc
# disable vendor specific commands
echo "disable vsc"
buffersize 0
setreadpio
ata28cmd 0x44 0x0b 0x00 0x44 0x57 0xa0 0x80
# check if command failed
gosub status_check
endsubroutine