10 REM > DecodeIC09
   20 :
   30 in%=OPENIN("ic09/bin")
   40 :
   50 PRINT"  L6 A0---------+    +--------D7 -"
   60 PRINT"  L7 A1--------+|    |+-------D6 BLK0 EXTERNAL"
   70 PRINT"  L8 A2-------+||    ||+------D5 M1   APP ROM"
   80 PRINT" A14 A3------+|||    |||+-----D4 M3   RAM"
   90 PRINT" A15 A4-----+||||    ||||+----D3 M2   RAM"
  100 PRINT" A11 A5----+|||||    |||||+---D2 M0   MOS ROM"
  110 PRINT" A12 A6---+||||||    ||||||+--D1 CB   A13 to RAM"
  120 PRINT" A13 A7--+|||||||    |||||||+-D0 IO   I/O SPACE"
  130 PRINT"  L9 A8-+||||||||    ||||||||"
  140 PRINT"        |||||||||    ||||||||"
  150 :
  160 FOR loop%=0 TO 511
  170   a%=(loop%AND7)*32+(loop%AND&18)+(loop%AND&E0)DIV32
  180   PTR#in%=a%:b%=BGET#in%
  190   a$=FNb0(a%,9):b$=FNb0(b%,8)
  200   IF loop%:IF (loop% AND 31)=0:PRINT
  210   IF (loop% AND 31)=0:PRINT "link=";~loop%DIV32;"  "ELSE PRINT SPC8;
  220   PRINT a$;" -> ";b$;
  230   addr%=(a%AND&18)*&800+(a%AND&E0)*&40
  240   PRINT SPC3;"&";FNh0(addr%,4);" -> ";
  250   b%=NOTb%
  260   IF b%AND1  :PRINT"IO ";
  270   IF b%AND2  :PRINT"CB ";
  280   IF b%AND4  :PRINT"M0 ";
  290   IF b%AND8  :PRINT"M2 ";
  300   IF b%AND16 :PRINT"M3 ";
  310   IF b%AND32 :PRINT"M1 ";
  320   IF b%AND64 :PRINT"BLK0 ";
  330   IF b%AND128:PRINT"d7 ";
  340   PRINT
  350 NEXT loop%
  360 CLOSE#in%
  370 END
  380 :
  390 REM Hexadecimal padded with zeros
  400 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
  410 :
  420 REM Binary padded with zeros
  430 DEFFNb0(A%,N%):LOCAL A$,B$:IFA%<0:B$="1":A%=A% AND &7FFFFFFF ELSE B$="0"
  440 REPEAT A$=STR$(A% AND 1)+A$:A%=A% DIV 2:UNTILA%=0:=RIGHT$(STRING$(N%,B$)+A$,N%)
  450 :