<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=ULINK_DriveMaster</id>
	<title>ULINK DriveMaster - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=ULINK_DriveMaster"/>
	<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=ULINK_DriveMaster&amp;action=history"/>
	<updated>2026-05-08T17:41:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://aznot.com/index.php?title=ULINK_DriveMaster&amp;diff=4384&amp;oldid=prev</id>
		<title>Kenneth: /* keywords */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=ULINK_DriveMaster&amp;diff=4384&amp;oldid=prev"/>
		<updated>2017-07-15T05:01:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;keywords&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== DriveMaster ==&lt;br /&gt;
&lt;br /&gt;
DriveMaster 2015 Professional SATA Features | ULINK Technology - http://ulinktech.com/drivemaster-2015-professional-sata-features.php&lt;br /&gt;
&lt;br /&gt;
== Help ==&lt;br /&gt;
&lt;br /&gt;
 C:\Program Files (x86)\ULINK DM2012\v980\Help\User Guide.pdf&lt;br /&gt;
&lt;br /&gt;
== Basic IO ==&lt;br /&gt;
&lt;br /&gt;
An LBA (Logical Block Address) size is generally the same size as a sector (512 bytes).  An LPAGE (Logical PAGE) is generally 4096 bytes or 8 LBAs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// write buffer&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 4096, 0  // (bytes, offset)&lt;br /&gt;
patr &amp;quot;write&amp;quot;  // r for random fill&lt;br /&gt;
//patf &amp;quot;write&amp;quot;  // f for FF fill&lt;br /&gt;
//patz &amp;quot;write&amp;quot;  // z for 00 fill&lt;br /&gt;
&lt;br /&gt;
// write then read and compare&lt;br /&gt;
wdmx 0, 8  // (lba_offset, lbas) write 8 lbas from write buffer, from offset 0 lba&lt;br /&gt;
rdmx 0, 8  // (lba_offset, lbas) read 8 lbas to read buffer, from offset 0 lba&lt;br /&gt;
cmp  // compare read buffer to original write buffer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== basic Traffic Test v3 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dim lba, lpage, max_lbas, max_lpages, max_lpage, tsize, lpage_range, lpage_offset, lba_size, lpage_size, lba_per_lpage&lt;br /&gt;
&lt;br /&gt;
HALTERR ON  // halt on error&lt;br /&gt;
IDFY  // identify&lt;br /&gt;
//identify  // Run the Identify command.&lt;br /&gt;
upd on  // Decrease frequency of screen refresh to speed up processing.&lt;br /&gt;
fullspeed on  // Speed up processing by turning off command tracing.&lt;br /&gt;
echo off  // Don&amp;#039;t auto echo every SATA command.  We will log what we want.&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;----------------------------------\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lba_size = 512&lt;br /&gt;
lpage_size = 4096&lt;br /&gt;
lba_per_lpage = 8&lt;br /&gt;
&lt;br /&gt;
// TEST CONFIGURATION&lt;br /&gt;
// limit read/write range, transfer size&lt;br /&gt;
lpage_offset = 0  // starting lpage&lt;br /&gt;
//lpage_range = totallba / 8  // do the whole range (totallba macro from IDFY)&lt;br /&gt;
//lpage_range = 512  // limit to the first 512 lpages (2MB)&lt;br /&gt;
lpage_range = (1024 * 1024 * 2) / 4096  // 512 = 2MB - limit to the first 512 lpages (2MB)&lt;br /&gt;
//tsize = 2048  // 2048 for a 1MB transfer size (2048 = 1MB / 512)&lt;br /&gt;
//tsize = 8  // 8 for a 4kB transfer size (8 = 4kB / 512)&lt;br /&gt;
tsize = 4096 / 512  // 8 = 4kB - for a 4kB transfer size (8 = 4kB / 512)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Test Details&lt;br /&gt;
prnf &amp;quot;Test LPAGE count (lpages): %d&amp;quot;, lpage_range&lt;br /&gt;
prnf &amp;quot;Test LPAGE range (start/end lpages): %d -&amp;quot;, lpage_offset&lt;br /&gt;
prnf &amp;quot; %d\n&amp;quot;, (lpage_offset + lpage_range)&lt;br /&gt;
prnf &amp;quot;Transfer size (lbas | bytes): %d |&amp;quot;, tsize&lt;br /&gt;
prnf &amp;quot; %d\n&amp;quot;, (tsize * lba_size)&lt;br /&gt;
&lt;br /&gt;
// calculations&lt;br /&gt;
max_lbas = totallba  // totallba is a macro populated by identify command&lt;br /&gt;
max_lpages = max_lbas / lba_per_lpage  // lpages are 4k (or 8 lbas)&lt;br /&gt;
max_lba = max_lbas - 1  // last addressable lba&lt;br /&gt;
max_lpage = max_lpages - 1  // last addressable lpage&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;total lbas: %d &amp;quot;, max_lbas&lt;br /&gt;
prnf &amp;quot;total lpages: %d\n&amp;quot;, max_lpages&lt;br /&gt;
prnf &amp;quot;max lba: %d &amp;quot;, max_lba&lt;br /&gt;
prnf &amp;quot;max lpage: %d\n&amp;quot;, max_lpage&lt;br /&gt;
&lt;br /&gt;
// fill write buffer with random data&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * max_lbas, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;  // r for random fill&lt;br /&gt;
//patf &amp;quot;write&amp;quot;  // f for ff fill&lt;br /&gt;
//patz &amp;quot;write&amp;quot;  // z for zero fill&lt;br /&gt;
&lt;br /&gt;
// note: random 0-9 =   rand % 10&lt;br /&gt;
&lt;br /&gt;
// loop through range&lt;br /&gt;
for (lpage = lpage_offset ; lpage &amp;lt; lpage_range + lpage_offset ; lpage += 1)&lt;br /&gt;
    lba = lpage * tsize&lt;br /&gt;
    prnf &amp;quot;lba: %d&amp;quot;, lba&lt;br /&gt;
    prnf &amp;quot; / %d || &amp;quot;, (lpage_range + lpage_offset) * lba_per_lpage&lt;br /&gt;
    prnf &amp;quot;lpage: %d&amp;quot;, lpage&lt;br /&gt;
    prnf &amp;quot; / %d || &amp;quot;, lpage_range + lpage_offset&lt;br /&gt;
    prnf &amp;quot;bytes: %d&amp;quot;, lpage * lpage_size&lt;br /&gt;
    prnf &amp;quot; / %d\n&amp;quot;, (lpage_range + lpage_offset) * lpage_size&lt;br /&gt;
    wdmx lba, tsize  // write from write buffer&lt;br /&gt;
    rdmx lba, tsize  // read to read buffer&lt;br /&gt;
    cmp  // compare read buffer to write buffer&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;Done!&amp;quot;&lt;br /&gt;
prnf &amp;quot;----------------------------------\n&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== basic Traffic Test v2 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dim lba, lpage, max_lbas, max_lpages, max_lpage, tsize, lpage_range, &lt;br /&gt;
&lt;br /&gt;
HALTERR ON  // halt on error&lt;br /&gt;
IDFY  // identify&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;----------------------------------\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// calculations&lt;br /&gt;
max_lbas = totallba  // totallba is a macro populated by identify command&lt;br /&gt;
max_lpages = max_lbas / 8  // lpages are 4k (or 8 lbas)&lt;br /&gt;
max_lba = max_lbas - 1  // last addressable lba&lt;br /&gt;
max_lpage = max_lpages - 1  // last addressable lpage&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;total lbas: %d &amp;quot;, max_lbas&lt;br /&gt;
prnf &amp;quot;total lpages: %d\n&amp;quot;, max_lpages&lt;br /&gt;
prnf &amp;quot;max lba: %d &amp;quot;, max_lba&lt;br /&gt;
prnf &amp;quot;max lpage: %d\n&amp;quot;, max_lpage&lt;br /&gt;
&lt;br /&gt;
// limit read/write range, transfer size&lt;br /&gt;
//lpage_range = max_lpages  // do the whole range&lt;br /&gt;
lpage_range = 512  // limit to the first 512 lpages (2MB)&lt;br /&gt;
//tsize = 2048  // 2048 for a 1MB transfer size (2048 = 1MB / 512)&lt;br /&gt;
tsize = 8  // 8 for a 4kB transfer size (8 = 4kB / 512)&lt;br /&gt;
prnf &amp;quot;limit read/write lpage range (lpages): %d\n&amp;quot;, lpage_range&lt;br /&gt;
prnf &amp;quot;Transfer size (lbas): %d\n&amp;quot;, tsize&lt;br /&gt;
&lt;br /&gt;
// fill write buffer with random data&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * max_lbas, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;  // r for random fill&lt;br /&gt;
//patf &amp;quot;write&amp;quot;  // f for ff fill&lt;br /&gt;
//patz &amp;quot;write&amp;quot;  // z for zero fill&lt;br /&gt;
&lt;br /&gt;
// note: random 0-9 =   rand % 10&lt;br /&gt;
&lt;br /&gt;
// loop through range&lt;br /&gt;
for (lpage = 0 ; lpage &amp;lt; lpage_range ; lpage += 1)&lt;br /&gt;
    lba = lpage * 8&lt;br /&gt;
    prnf &amp;quot;lba: %d&amp;quot;, lba&lt;br /&gt;
    prnf &amp;quot; / %d - &amp;quot;, max_lba&lt;br /&gt;
    prnf &amp;quot;lpage: %d&amp;quot;, lpage&lt;br /&gt;
    prnf &amp;quot; / %d\n&amp;quot;, max_lpage&lt;br /&gt;
    wdmx lba, tsize  // write from write buffer&lt;br /&gt;
    rdmx lba, tsize  // read to read buffer&lt;br /&gt;
    cmp  // compare read buffer to original write buffer&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;Done!&amp;quot;&lt;br /&gt;
prnf &amp;quot;----------------------------------\n&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== basic Traffic Test v1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dim lba, lpage, maxlbas, maxlpages, tsize, lpage_range&lt;br /&gt;
&lt;br /&gt;
HALTERR ON  // halt on error&lt;br /&gt;
IDFY  // identify&lt;br /&gt;
&lt;br /&gt;
maxlbas = totallba  // totallba is a macro populated by identify command&lt;br /&gt;
maxlpages = maxlbas / 8  // lpages are 4k (or 8 lbas)&lt;br /&gt;
tsize = 4096 / 512  // 4k transfer size 8 = 4k / 512&lt;br /&gt;
prnf &amp;quot;total lbas: %d &amp;quot;, maxlbas&lt;br /&gt;
prnf &amp;quot;total lpages: %d\n&amp;quot;, maxlpages&lt;br /&gt;
&lt;br /&gt;
// limit read/write range&lt;br /&gt;
lpage_range = maxlpages&lt;br /&gt;
lpage_range = 10&lt;br /&gt;
prnf &amp;quot;limit read/write lpage range: %d\n&amp;quot;, lpage_range&lt;br /&gt;
&lt;br /&gt;
// fill write buffer with random data&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * maxlbas, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;  // r for random fill&lt;br /&gt;
//patf &amp;quot;write&amp;quot;  // f for ff fill&lt;br /&gt;
//patz &amp;quot;write&amp;quot;  // z for zero fill&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// random 0-9 =   rand % 10&lt;br /&gt;
&lt;br /&gt;
// loop through range&lt;br /&gt;
for (lpage = 0 ; lpage &amp;lt; lpage_range ; lpage += 1)&lt;br /&gt;
    lba = lpage * 8&lt;br /&gt;
    prnf &amp;quot;lba: %d /&amp;quot;, lba&lt;br /&gt;
    prnf &amp;quot;lpage: %d\n&amp;quot;, lpage&lt;br /&gt;
    wdmx lba, tsize  // write from write buffer&lt;br /&gt;
    rdmx lba, tsize  // read to read buffer&lt;br /&gt;
    cmp  // compare read buffer to original write buffer&lt;br /&gt;
endfor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Simple Read ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dim tsize, lpage_range&lt;br /&gt;
IDFY&lt;br /&gt;
tsize = 4096 / 512  // 4k transfer&lt;br /&gt;
lpage_range = totallba / 8  // totallba is macro populated by IDFY&lt;br /&gt;
for (lpage = 0 ; lpage &amp;lt; lpage_range ; lpage += 1)&lt;br /&gt;
    lba = lpage * 8&lt;br /&gt;
    prnf &amp;quot;lba: %d\n&amp;quot;, lba&lt;br /&gt;
    prnf &amp;quot;lpage: %d\n&amp;quot;, lpage&lt;br /&gt;
    //wdmx lba, tsize  // write from write buffer&lt;br /&gt;
    rdmx lba, tsize  // read to read buffer&lt;br /&gt;
    //cmp  // compare read buffer to original write buffer&lt;br /&gt;
endfor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TODO Test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dim sector_range, buffer_size, buffer_offset, lba_size, lpage_size, lpage, lpage_range&lt;br /&gt;
&lt;br /&gt;
// Write the first 2 lpages&lt;br /&gt;
lba_range = 8  // must be divisible by tsize&lt;br /&gt;
buffer_offset = 0  // buffer offset in bytes&lt;br /&gt;
&lt;br /&gt;
// calculations&lt;br /&gt;
lba_size = 512  // lba size in bytes&lt;br /&gt;
lpage_size = 4096  // lpage size in bytes (4k)&lt;br /&gt;
lpage_lba_ratio = lpage_size / lba_size  // 8 lbas per lpage&lt;br /&gt;
lba_range = lpage_range * lpage_lba_ratio  // number of lbas in target range&lt;br /&gt;
tsize = 8  // lba count transfer size&lt;br /&gt;
           //   4k transfer size 8 = 4k / 512 (lpage_size / lba_size)&lt;br /&gt;
buffer_size = lba_range * 512  // size in bytes&lt;br /&gt;
&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, sector_range, buffer_offset&lt;br /&gt;
patr &amp;quot;write&amp;quot;  // r for random fill&lt;br /&gt;
//patf &amp;quot;write&amp;quot;  // f for FF fill&lt;br /&gt;
//patz &amp;quot;write&amp;quot;  // z for 00 fill&lt;br /&gt;
&lt;br /&gt;
for (lpage = 0 ; lpage &amp;lt; lpage_range ; lpage += 1)&lt;br /&gt;
    lba = lpage * 8&lt;br /&gt;
    prnf &amp;quot;lba: %d&amp;quot;, lba&lt;br /&gt;
    prnf &amp;quot; / %d - &amp;quot;, max_lba&lt;br /&gt;
    prnf &amp;quot;lpage: %d&amp;quot;, lpage&lt;br /&gt;
    prnf &amp;quot; / %d\n&amp;quot;, max_lpage&lt;br /&gt;
    wdmx lba, tsize  // write from write buffer&lt;br /&gt;
    rdmx lba, tsize  // read to read buffer&lt;br /&gt;
    cmp  // compare read buffer to original write buffer&lt;br /&gt;
endfor&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Hold on Error&lt;br /&gt;
HALTERR ON&lt;br /&gt;
&lt;br /&gt;
// set buffer size  [buffername] [buffer in byte size], [offset]&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * 8 , 0&lt;br /&gt;
&lt;br /&gt;
// fill buffer with &amp;quot;FF&amp;quot;&lt;br /&gt;
patf &amp;quot;write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// fill buffer with &amp;quot;00&amp;quot;&lt;br /&gt;
patz &amp;quot;write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// fill buffer with random&lt;br /&gt;
patr &amp;quot;write&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// write buffer &lt;br /&gt;
wdma 0, 8&lt;br /&gt;
&lt;br /&gt;
// read buffer&lt;br /&gt;
rdma 0, 8&lt;br /&gt;
&lt;br /&gt;
// compare buffers, to verify&lt;br /&gt;
cmp&lt;br /&gt;
&lt;br /&gt;
// printing&lt;br /&gt;
some_number = 100&lt;br /&gt;
prns &amp;quot;print string&amp;quot;&lt;br /&gt;
prnl  some_number&lt;br /&gt;
prnsl &amp;quot;print string&amp;quot;, some_number&lt;br /&gt;
prnsr  &amp;quot;don&amp;#039;t new line&amp;quot;  // &amp;#039;r&amp;#039; can be added to above&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
totallba  # total LBAs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for (i=1 ; i&amp;lt;10; i+=1)&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for (i=0 ; i&amp;lt;1000 ; i+=1)&lt;br /&gt;
  //prnsl &amp;quot;count: &amp;quot;, i&lt;br /&gt;
  rdma 0, 8&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * 64, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;&lt;br /&gt;
wdma 1024, 64&lt;br /&gt;
&lt;br /&gt;
rdma 1024, 64&lt;br /&gt;
cmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * 8, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;&lt;br /&gt;
wdma 0, 8&lt;br /&gt;
rdma 0, 8&lt;br /&gt;
cmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * 8, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;&lt;br /&gt;
wdma 0, 8&lt;br /&gt;
rdma 0, 8&lt;br /&gt;
cmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for (i=0 ; i&amp;lt;1000 ; i+=1)&lt;br /&gt;
  //prnsl &amp;quot;count: &amp;quot;, i&lt;br /&gt;
  rdma 0, 1024&lt;br /&gt;
  cmp&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
h d d - hip debug dump&lt;br /&gt;
&lt;br /&gt;
h d c - clear&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// read buffer&lt;br /&gt;
//rdma 0, 8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Uninitialized Reads - size/alignment=4k pattern=0x00000000 sequential entire range.&lt;br /&gt;
for (i=0 ; i&amp;lt;totallba ; i+=1)&lt;br /&gt;
  prnsl &amp;quot;lba: &amp;quot;, i&lt;br /&gt;
  rdma i, 8&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
// READ DMA&lt;br /&gt;
//   lba - starting address&lt;br /&gt;
//   lenght - number of sectors (from 0 to 255)&lt;br /&gt;
RDMA lba, length&lt;br /&gt;
&lt;br /&gt;
// LBAMODE&lt;br /&gt;
lbamode on  // or off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// read lba 0 - 1000 times&lt;br /&gt;
for (i=0 ; i&amp;lt;1000 ; i+=1)&lt;br /&gt;
  prnsl &amp;quot;count: &amp;quot;, i&lt;br /&gt;
  rdma 0, 8&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
got to 32 blocks and died&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0x11680300&lt;br /&gt;
&lt;br /&gt;
h d d&lt;br /&gt;
&lt;br /&gt;
h d c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Uninitialized Reads - size/alignment=4k pattern=0x00000000 sequential entire range.&lt;br /&gt;
for (i=0 ; i&amp;lt;totallba/8 ; i+=1)&lt;br /&gt;
  prnsl &amp;quot;lba: &amp;quot;, i&lt;br /&gt;
  rdma i*8, 8&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for (j=0 ; j&amp;lt;= 10 ; i+=1)&lt;br /&gt;
  for (i=0 ; i&amp;lt;=32 ; i+=1)&lt;br /&gt;
    prnsl &amp;quot;lba: &amp;quot;, i&lt;br /&gt;
    rdma i*8, 8&lt;br /&gt;
  endfor&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * 8 * 32, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;&lt;br /&gt;
for (i=0 ; i&amp;lt;=32 ; i+=1)&lt;br /&gt;
  wdma i*8, 8&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fillset &amp;quot;write&amp;quot;, 512 * 8 * 33, 0&lt;br /&gt;
patr &amp;quot;write&amp;quot;&lt;br /&gt;
for (i=0 ; i&amp;lt;=32 ; i+=1)&lt;br /&gt;
  wdma i*8, 8&lt;br /&gt;
endfor&lt;br /&gt;
for (j=0 ; j&amp;lt;= 10 ; i+=1)&lt;br /&gt;
  for (i=0 ; i&amp;lt;=32 ; i+=1)&lt;br /&gt;
    //prnsl &amp;quot;lba: &amp;quot;, i&lt;br /&gt;
    rdma i*8, 8&lt;br /&gt;
    cmp&lt;br /&gt;
  endfor&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dim maxlpage, lba&lt;br /&gt;
maxlpage=32&lt;br /&gt;
for (j=0 ; j&amp;lt;= 1000 ; i+=1)&lt;br /&gt;
  i = rand % maxlpage + 1&lt;br /&gt;
  lba = i*8&lt;br /&gt;
  prnsl &amp;quot;lba: &amp;quot;, lba&lt;br /&gt;
  rdma lba, 8&lt;br /&gt;
  cmp&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
// 4k read&lt;br /&gt;
rdma 0, 8&lt;br /&gt;
&lt;br /&gt;
// 8k read&lt;br /&gt;
rdma 0, 16&lt;br /&gt;
&lt;br /&gt;
// 128k read from lba 0 - fails as it goes beyond lba 0  (128k/512=256)&lt;br /&gt;
rdma 0, 256&lt;br /&gt;
&lt;br /&gt;
// 1M read from lba 0 - fails as it goes beyond lba 0  (1M/512=2048)&lt;br /&gt;
&lt;br /&gt;
// 128k read from lba 256 - fails as it goes beyond lpage 256  (128k/512=256)&lt;br /&gt;
rdma 32*8, 256&lt;br /&gt;
&lt;br /&gt;
// extended mode read 4k/512=8&lt;br /&gt;
rdmx 0, 8&lt;br /&gt;
&lt;br /&gt;
// 1M from lba 0  1M/512=2048&lt;br /&gt;
rdmx 0, 2048&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 1M from lba 0  1M/512=2048&lt;br /&gt;
rdmx 0, 2048&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# fails to respond&lt;br /&gt;
rdmx 33*8, 8&lt;br /&gt;
&lt;br /&gt;
# fails to respond  - max lba 256&lt;br /&gt;
rdmx 32*8, 16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Uninitialized Reads - size/alignment=4k pattern=0x00000000 sequential entire range.&lt;br /&gt;
for (i=0 ; i&amp;lt;totallba/8 ; i+=1)&lt;br /&gt;
  lba = i*8&lt;br /&gt;
  prnsl &amp;quot;lba: &amp;quot;, lba&lt;br /&gt;
  rdmx lba, 8&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# success: 4k read to lba 256&lt;br /&gt;
rdmx 32*8, 8&lt;br /&gt;
&lt;br /&gt;
# crashes: 4k read to lba 264&lt;br /&gt;
rdmx 33*8, 8&lt;br /&gt;
&lt;br /&gt;
# crashes: 16k read to lba 256&lt;br /&gt;
rdmx 32*8, 16&lt;br /&gt;
&lt;br /&gt;
# crashes: 4k read to lpage 50&lt;br /&gt;
rdma 50*8, 8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HALTERR ON&lt;br /&gt;
for (i=1 ; i&amp;lt;1000 ; i+=1)&lt;br /&gt;
  fillset &amp;quot;write&amp;quot;, 512 * 64, 0&lt;br /&gt;
  patr &amp;quot;write&amp;quot;&lt;br /&gt;
  prnsl &amp;quot;write: &amp;quot;, i&lt;br /&gt;
  wdma 0, 8&lt;br /&gt;
  rdma 0, 8&lt;br /&gt;
  cmp&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
344 - safe&lt;br /&gt;
345 - dead&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
prnf &amp;quot;test %d&amp;quot;, 2  // does not put new line&lt;br /&gt;
prnf &amp;quot;test %d\n&amp;quot;, 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dim lba, lpage&lt;br /&gt;
HALTERR ON&lt;br /&gt;
for (lpage=0 ; lpage&amp;lt;1000 ; lpage+=1)&lt;br /&gt;
  lba = lpage * 8&lt;br /&gt;
  fillset &amp;quot;write&amp;quot;, 512 * 8, 0&lt;br /&gt;
  patr &amp;quot;write&amp;quot;&lt;br /&gt;
  prnf &amp;quot;lba: %d /&amp;quot;, lba&lt;br /&gt;
  prnf &amp;quot;lpage: %d&amp;quot;, lpage&lt;br /&gt;
  wdma lba, 8&lt;br /&gt;
  rdma lba, 8&lt;br /&gt;
  cmp&lt;br /&gt;
endfor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== keywords ==&lt;br /&gt;
&lt;br /&gt;
drivemaster Drive Master DriveMaster ULINK SATA&lt;/div&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
</feed>