fl : address \ display data-block by sd-card's address ." Input Address(hex) > " 0 tmp W! begin begin key dup 30 < if d = if tmp W@ 0> if 1 else 0 then else 0 then else dup 3a 40 between if drop 0 else dup 47 60 between if drop 0 else dup 66 > if drop 0 else dup emit tmp W@ 8 = if 9 0 do drop loop 0 tmp W! ." incorect input" cr ." Input Address(hex) > " 0 else todigit tmp dup W@ 1+ swap W! 0 then then then then then until tmp W@ 1 > if tmp W@ 1- 0 do swap i 1+ 4 * lshift or loop then \ convert data dup 200 u/mod drop if drop 0 tmp W! ." incorect input" cr ." Input Address(hex) > " 0 else 1 then until sdhc W@ if ccs W@ 1 = if 200 u/ then then cr cr Block ; : menu \ display menu ." j -- Display CSD" cr ." k -- Display CID" cr ." l -- Display SD-information" cr ." h -- memu list" cr ." s(Address) -- Single Block Read" cr ." m -- Master Boot Record" cr ." b -- BIOS Parameter Block" cr ." f -- File Allocation Table" cr ." r -- Root Directory Entry" cr ." u -- File Detail" cr ." t -- Display top sector of Cluster number" cr ." q -- Quit" cr ; : viewer \ main card_alive? if sd_init tmp W@ 100 = if exit then collect_info then cr menu cr ." >" begin key dup emit cr dup 6a = if drop csd 0 cr cr else dup 6b = if drop cid 0 cr cr else dup 68 = if drop cr menu 0 cr cr else dup 73 = if drop cr address 0 cr cr else dup 6d = if drop cr MBR 0 cr cr else dup 62 = if drop cr BTB 0 cr cr else dup 66 = if drop cr FAT 0 cr cr else dup 72 = if drop cr RDE 0 cr cr else dup 75 = if drop cr file 0 cr cr else dup 6c = if drop cr info 0 cr cr else dup 74 = if drop cr disp_cluster 0 cr cr else dup 71 = if drop 1 else drop 0 then then then then then then then then then then then then ." >" until ;