[{"data":1,"prerenderedAt":559},["ShallowReactive",2],{"\u002Fprojects\u002Famiga-disk-file":3},{"id":4,"title":5,"body":6,"date":548,"description":549,"draft":550,"extension":551,"meta":552,"navigation":550,"path":553,"repository":554,"seo":555,"stem":556,"tags":557,"toc":550,"__hash__":558},"projects\u002Fprojects\u002Famiga-disk-file.md","Amiga Disk File",{"type":7,"value":8,"toc":542},"minimark",[9,13,43,90,101,119,159,164,190,204,223,227,232,240,246,250,272,276,294,298,312,318,322,339,358,362,382,386,403,409,413,433,437,454,460,464,480,484,503,507,538],[10,11,12],"p",{},"My father worked as an audiovisual technician in the early 80s, which exposed\nhim to microcomputing early on.",[10,14,15,16,26,27,34,35,42],{},"At home we had a ",[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCommodore_64",[21],"nofollow",[23,24,25],"em",{},"Commodore 64"," and\na ",[17,28,31],{"href":29,"rel":30},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FZX81",[21],[23,32,33],{},"Sinclair ZX81","; by the age of 10, I had\nmy first own computer: an ",[17,36,39],{"href":37,"rel":38},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAmiga_500",[21],[23,40,41],{},"Amiga 500",".",[10,44,45,46,53,54,53,61,53,68,53,75,53,82,89],{},"I burned hours playing classics like\n",[17,47,50],{"href":48,"rel":49},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKick_Off_(series)",[21],[23,51,52],{},"Kick Off",",\n",[17,55,58],{"href":56,"rel":57},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSWIV",[21],[23,59,60],{},"SWIV",[17,62,65],{"href":63,"rel":64},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FThe_Blues_Brothers_(video_game)",[21],[23,66,67],{},"The Blues Brothers",[17,69,72],{"href":70,"rel":71},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FThe_Chaos_Engine",[21],[23,73,74],{},"The Chaos Engine",[17,76,79],{"href":77,"rel":78},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTurrican_II:_The_Final_Fight",[21],[23,80,81],{},"Turrican II",[17,83,86],{"href":84,"rel":85},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FToki_(video_game)",[21],[23,87,88],{},"Toki",", etc.",[10,91,92,93,100],{},"I got my start in digital art with\n",[17,94,97],{"href":95,"rel":96},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDeluxe_Paint",[21],[23,98,99],{},"Deluxe Paint IV",", mostly\nrecreating Metallica and Iron Maiden logos.",[10,102,103,104,111,112,42],{},"Finally, I discovered music creation using\n",[17,105,108],{"href":106,"rel":107},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNoiseTracker",[21],[23,109,110],{},"NoiseTracker"," and\n",[17,113,116],{"href":114,"rel":115},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProtracker",[21],[23,117,118],{},"Protracker",[10,120,121,122,124,125,127,128,135,136,139,140,146,147,154,155,158],{},"I recently bought an old ",[23,123,41],{}," and started using ",[23,126,118],{}," to create\n",[17,129,132],{"href":130,"rel":131},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMOD_%28file_format%29",[21],[23,133,134],{},"MOD"," files. I also\ngathered a ton of samples but they were in ",[23,137,138],{},"LHA"," archives. To use them, I had\nto convert the ",[17,141,144],{"href":142,"rel":143},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLHA_(file_format)",[21],[23,145,138],{}," file\ninto ",[17,148,151],{"href":149,"rel":150},"http:\u002F\u002Flclevy.free.fr\u002Fadflib\u002Fadf_info.html",[21],[23,152,153],{},"ADF"," disk images. I know\nthere are already existing tools for this, but I saw it as the perfect\nopportunity to write some ",[23,156,157],{},"Rust"," code!",[160,161,163],"h2",{"id":162},"setup","Setup",[165,166,171],"pre",{"className":167,"code":168,"language":169,"meta":170,"style":170},"language-sh shiki shiki-themes catppuccin-mocha","git clone https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Famiga-disk-file.git\n","sh","",[172,173,174],"code",{"__ignoreMap":170},[175,176,179,183,187],"span",{"class":177,"line":178},"line",1,[175,180,182],{"class":181},"sO0CG","git",[175,184,186],{"class":185},"sX9bP"," clone",[175,188,189],{"class":185}," https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Famiga-disk-file.git\n",[165,191,193],{"className":167,"code":192,"language":169,"meta":170,"style":170},"cd amiga-disk-file\n",[172,194,195],{"__ignoreMap":170},[175,196,197,201],{"class":177,"line":178},[175,198,200],{"class":199},"sDSzL","cd",[175,202,203],{"class":185}," amiga-disk-file\n",[165,205,207],{"className":167,"code":206,"language":169,"meta":170,"style":170},"cargo install --path .\u002Fpackages\u002Fnd-adf-tools\n",[172,208,209],{"__ignoreMap":170},[175,210,211,214,217,220],{"class":177,"line":178},[175,212,213],{"class":181},"cargo",[175,215,216],{"class":185}," install",[175,218,219],{"class":185}," --path",[175,221,222],{"class":185}," .\u002Fpackages\u002Fnd-adf-tools\n",[160,224,226],{"id":225},"usage","Usage",[228,229,231],"h5",{"id":230},"get-help","Get help",[165,233,238],{"className":234,"code":236,"language":237},[235],"language-text","nd-adf-tools --help\n","text",[172,239,236],{"__ignoreMap":170},[165,241,244],{"className":242,"code":243,"language":237},[235],"nd-adf-tools \u003CCOMMAND> --help\n",[172,245,243],{"__ignoreMap":170},[228,247,249],{"id":248},"create-a-disk","Create a disk",[165,251,253],{"className":167,"code":252,"language":169,"meta":170,"style":170},"nd-adf-tools create --floppy-disk-drive dd disk.adf\n",[172,254,255],{"__ignoreMap":170},[175,256,257,260,263,266,269],{"class":177,"line":178},[175,258,259],{"class":181},"nd-adf-tools",[175,261,262],{"class":185}," create",[175,264,265],{"class":185}," --floppy-disk-drive",[175,267,268],{"class":185}," dd",[175,270,271],{"class":185}," disk.adf\n",[228,273,275],{"id":274},"format-a-disk","Format a disk",[165,277,279],{"className":167,"code":278,"language":169,"meta":170,"style":170},"nd-adf-tools format disk.adf FD1\n",[172,280,281],{"__ignoreMap":170},[175,282,283,285,288,291],{"class":177,"line":178},[175,284,259],{"class":181},[175,286,287],{"class":185}," format",[175,289,290],{"class":185}," disk.adf",[175,292,293],{"class":185}," FD1\n",[228,295,297],{"id":296},"get-info-about-the-disk","Get info about the disk",[165,299,301],{"className":167,"code":300,"language":169,"meta":170,"style":170},"nd-adf-tools info disk.adf\n",[172,302,303],{"__ignoreMap":170},[175,304,305,307,310],{"class":177,"line":178},[175,306,259],{"class":181},[175,308,309],{"class":185}," info",[175,311,271],{"class":185},[165,313,316],{"className":314,"code":315,"language":237},[235],"Volume name: FD1\nVolume type: OFS, INTL-OFF, CACHE-OFF\n\nVolume alteration date: Sun, 29 Mar 2026 15:33:44 +0000\n    Root creation date: Sun, 29 Mar 2026 15:33:44 +0000\n  Root alteration date: Sun, 29 Mar 2026 15:33:44 +0000\n\nTotal:     1760     901120\n Used:        4       2048   0.23%\n Free:     1756     899072  99.77%\n",[172,317,315],{"__ignoreMap":170},[228,319,321],{"id":320},"create-some-directories","Create some directories",[165,323,325],{"className":167,"code":324,"language":169,"meta":170,"style":170},"nd-adf-tools mkdir disk.adf foo\n",[172,326,327],{"__ignoreMap":170},[175,328,329,331,334,336],{"class":177,"line":178},[175,330,259],{"class":181},[175,332,333],{"class":185}," mkdir",[175,335,290],{"class":185},[175,337,338],{"class":185}," foo\n",[165,340,342],{"className":167,"code":341,"language":169,"meta":170,"style":170},"nd-adf-tools mkdir -p disk.adf bar\u002Fgee\n",[172,343,344],{"__ignoreMap":170},[175,345,346,348,350,353,355],{"class":177,"line":178},[175,347,259],{"class":181},[175,349,333],{"class":185},[175,351,352],{"class":185}," -p",[175,354,290],{"class":185},[175,356,357],{"class":185}," bar\u002Fgee\n",[228,359,361],{"id":360},"add-a-file","Add a file",[165,363,365],{"className":167,"code":364,"language":169,"meta":170,"style":170},"nd-adf-tools write disk.adf .\u002Fnd-adf-tools.nfo bar\u002Fgee\u002Fnd-adf-tools.nfo\n",[172,366,367],{"__ignoreMap":170},[175,368,369,371,374,376,379],{"class":177,"line":178},[175,370,259],{"class":181},[175,372,373],{"class":185}," write",[175,375,290],{"class":185},[175,377,378],{"class":185}," .\u002Fnd-adf-tools.nfo",[175,380,381],{"class":185}," bar\u002Fgee\u002Fnd-adf-tools.nfo\n",[228,383,385],{"id":384},"list-files","List files",[165,387,389],{"className":167,"code":388,"language":169,"meta":170,"style":170},"nd-adf-tools ls -lr disk.adf\n",[172,390,391],{"__ignoreMap":170},[175,392,393,395,398,401],{"class":177,"line":178},[175,394,259],{"class":181},[175,396,397],{"class":185}," ls",[175,399,400],{"class":185}," -lr",[175,402,271],{"class":185},[165,404,407],{"className":405,"code":406,"language":237},[235],"\u002F:\nd rwed--------          - 2026-03-29T17:35:48+02:00 foo\nd rwed--------          - 2026-03-29T17:36:45+02:00 bar\n\n\u002Ffoo:\n\n\u002Fbar:\nd rwed--------          - 2026-03-29T22:11:24+02:00 gee\n\n\u002Fbar\u002Fgee:\n  rwed--------       1290 2026-03-29T22:14:29+02:00 nulldev.nfo\n",[172,408,406],{"__ignoreMap":170},[228,410,412],{"id":411},"read-file","Read file",[165,414,416],{"className":167,"code":415,"language":169,"meta":170,"style":170},"nd-adf-tools read disk.adf bar\u002Fgee\u002Fnulldev.nfo nulldev.nfo\n",[172,417,418],{"__ignoreMap":170},[175,419,420,422,425,427,430],{"class":177,"line":178},[175,421,259],{"class":181},[175,423,424],{"class":185}," read",[175,426,290],{"class":185},[175,428,429],{"class":185}," bar\u002Fgee\u002Fnulldev.nfo",[175,431,432],{"class":185}," nulldev.nfo\n",[228,434,436],{"id":435},"print-file","Print file",[165,438,440],{"className":167,"code":439,"language":169,"meta":170,"style":170},"nd-adf-tools cat disk.adf bar\u002Fgee\u002Fnulldev.nfo\n",[172,441,442],{"__ignoreMap":170},[175,443,444,446,449,451],{"class":177,"line":178},[175,445,259],{"class":181},[175,447,448],{"class":185}," cat",[175,450,290],{"class":185},[175,452,453],{"class":185}," bar\u002Fgee\u002Fnulldev.nfo\n",[165,455,458],{"className":456,"code":457,"language":237},[235]," ██████   █████            ████  ████  ██████████\n░░██████ ░░███            ░░███ ░░███ ░░███░░░░███\n ░███░███ ░███  █████ ████ ░███  ░███  ░███   ░░███  ██████  █████ █████\n ░███░░███░███ ░░███ ░███  ░███  ░███  ░███    ░███ ███░░███░░███ ░░███\n ░███ ░░██████  ░███ ░███  ░███  ░███  ░███    ░███░███████  ░███  ░███\n ░███  ░░█████  ░███ ░███  ░███  ░███  ░███    ███ ░███░░░   ░░███ ███\n █████  ░░█████ ░░████████ █████ █████ ██████████  ░░██████   ░░█████\n░░░░░    ░░░░░   ░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░░░░░    ░░░░░░     ░░░░░\n",[172,459,457],{"__ignoreMap":170},[228,461,463],{"id":462},"remove-file","Remove file",[165,465,467],{"className":167,"code":466,"language":169,"meta":170,"style":170},"nd-adf-tools remove disk.adf bar\u002Fgee\u002Fnulldev.nfo\n",[172,468,469],{"__ignoreMap":170},[175,470,471,473,476,478],{"class":177,"line":178},[175,472,259],{"class":181},[175,474,475],{"class":185}," remove",[175,477,290],{"class":185},[175,479,453],{"class":185},[228,481,483],{"id":482},"remove-directories","Remove directories",[165,485,487],{"className":167,"code":486,"language":169,"meta":170,"style":170},"nd-adf-tools remove -rf disk.adf bar\n",[172,488,489],{"__ignoreMap":170},[175,490,491,493,495,498,500],{"class":177,"line":178},[175,492,259],{"class":181},[175,494,475],{"class":185},[175,496,497],{"class":185}," -rf",[175,499,290],{"class":185},[175,501,502],{"class":185}," bar\n",[160,504,506],{"id":505},"credits","Credits",[508,509,510,522],"ul",{},[511,512,513,514,517,518,42],"li",{},"Shout out to ",[23,515,516],{},"Laurent Clévy"," for the ",[17,519,521],{"href":149,"rel":520},[21],"Amiga Disk File format FAQ",[511,523,524,525,528,529,532,533,42],{},"I generated the ",[23,526,527],{},"ASCII"," ",[23,530,531],{},"NullDev"," logo with the ",[17,534,537],{"href":535,"rel":536},"https:\u002F\u002Fwww.asciiart.eu\u002Ftext-to-ascii-art",[21],"ASCII Art tools",[539,540,541],"style",{},"html pre.shiki code .sO0CG, html code.shiki .sO0CG{--shiki-default:#89B4FA;--shiki-default-font-style:italic}html pre.shiki code .sX9bP, html code.shiki .sX9bP{--shiki-default:#A6E3A1}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sDSzL, html code.shiki .sDSzL{--shiki-default:#F38BA8;--shiki-default-font-style:italic}",{"title":170,"searchDepth":543,"depth":543,"links":544},2,[545,546,547],{"id":162,"depth":543,"text":163},{"id":225,"depth":543,"text":226},{"id":505,"depth":543,"text":506},"2026-03-02","I wrote a CLI tool to handle ADF files in Rust.",true,"md",{},"\u002Fprojects\u002Famiga-disk-file","https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Famiga-disk-file",{"title":5,"description":549},"projects\u002Famiga-disk-file",[157],"XCRHfoBqGaocbl1y61eOSnaFtUHY83zr3nb-YgztBRk",1787695959005]