home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / fish / code_examples / a68kex / dm.asm < prev    next >
Assembly Source File  |  1991-01-17  |  22KB  |  899 lines

  1. *
  2. * This is a remake of
  3. *
  4. *  :ts=8 bk=0
  5. * Disk mapper.  Uses trackdisk.device to grab and read sector bitmap
  6. * to discover what's allocated, then displays a (hopefully) pretty picture
  7. * showing disk useage.
  8. *
  9. * Crufted together by Leo Schwab while desperately bored.  8606.8
  10. * Turned into something working for the Manx compiler.  8607.23
  11. *
  12. * from AmigaLibDisk33
  13. * with a few minor enhancements.
  14. *
  15. * This implementation was written by:
  16. * E. Lenz
  17. * Johann-Fichte-Strasse 11
  18. * 8 Munich 40
  19. * Germany
  20. *
  21.  
  22. _AbsExecBase        equ 4
  23.  
  24. **** exec *****
  25.  
  26. _LVOForbid       equ -$84
  27. _LVOPermit       equ -$8a
  28. _LVOAllocMem     equ -$c6
  29. _LVOFreeMem      equ -$d2
  30. _LVOAddPort      equ -$162
  31. _LVORemPort      equ -$168
  32. _LVOGetMsg       equ -$174
  33. _LVOReplyMsg     equ -$17a
  34. _LVOWaitPort     equ -$180
  35. _LVOCloseLibrary equ -$19e
  36. _LVOOpenDevice   equ -$1bc
  37. _LVOCloseDevice  equ -$1c2
  38. _LVODoIO         equ -$1c8
  39. _LVOOpenLibrary  equ -$228
  40.  
  41. **** intuition ******
  42.  
  43. _LVOCloseWindow    equ -$48
  44. _LVOOpenWindow     equ -$cc
  45. _LVOSetMenuStrip   equ -$108
  46.  
  47. ***** graphics ******
  48.  
  49. _LVOText            equ -$3c
  50. _LVOMove            equ -$f0
  51. _LVODraw            equ -$f6
  52. _LVORectFill        equ -$132
  53. _LVOSetAPen         equ -$156
  54.  
  55. ***** dos *****
  56.  
  57. _LVOLock          equ -$54
  58. _LVOUnLock        equ -$5a
  59. _LVOInfo          equ -$72
  60.  
  61. ACCESS_READ        equ -2
  62. ID_NO_DISK_PRESENT equ -1
  63. MEMF_CHIP          equ 2
  64. TD_MOTOR           equ 9
  65. TD_CHANGENUM       equ $d
  66. wd_RPort           equ $32
  67. wd_UserPort        equ $56
  68. pr_MsgPort         equ $5c
  69. pr_CLI             equ $ac
  70. ThisTask           equ $114
  71. VBlankFrequency    equ $212
  72. MEMF_CLEAR         equ $10000
  73.  
  74. BITMAPINDEX        equ 79*4
  75.  
  76. long             set 4
  77. InfoData         set 0
  78. id_NumSoftErrors set InfoData
  79. InfoData         set InfoData+long
  80. id_UnitNumber    set InfoData
  81. InfoData         set InfoData+long
  82. id_DiskState     set InfoData
  83. InfoData         set InfoData+long
  84. id_NumBlocks     set InfoData
  85. InfoData         set InfoData+long
  86. id_NumBlocksUsed set InfoData
  87. InfoData         set InfoData+long
  88. id_BytesPerBlock set InfoData
  89. InfoData         set InfoData+long
  90. id_DiskType      set InfoData
  91. InfoData         set InfoData+long
  92. id_VolumeNode    set InfoData
  93. InfoData         set InfoData+long
  94. id_InUse         set InfoData
  95. InfoData         set InfoData+long
  96. id_SIZEOF        set InfoData
  97.  
  98.        XREF request
  99.  
  100.        movea.l _AbsExecBase,a6   test if WB or CLI
  101.        movea.l ThisTask(a6),a0
  102.        tst.l   pr_CLI(a0)
  103.        bne.s   isCLI
  104.  
  105.        lea     pr_MsgPort(a0),a0 for WB get WB Message
  106.        jsr     _LVOWaitPort(a6)
  107.        jsr     _LVOGetMsg(a6)
  108.        move.l  d0,WBenchMsg
  109.  
  110. isCLI  cmpi.b  #60,VBlankFrequency(a6) test if PAL or NTSC
  111.        beq.s   isNTSC
  112.        move.w  #256,nw+6
  113.  
  114. isNTSC lea     GfxName(pc),a1        open graphics library
  115.        moveq   #0,d0
  116.        jsr     _LVOOpenLibrary(a6)
  117.        move.l  d0,GfxBase
  118.        beq.s   Gexit
  119.  
  120.        lea     IntName(pc),a1        open intuition library
  121.        moveq   #0,d0
  122.        jsr     _LVOOpenLibrary(a6)
  123.        move.l  d0,IntBase
  124.        beq.s   Gexit
  125.  
  126.        lea     DosName(pc),a1        open dos library
  127.        moveq   #0,d0
  128.        jsr     _LVOOpenLibrary(a6)
  129.        move.l  d0,DosBase
  130. Gexit  beq     exit
  131.  
  132. Trok   lea     nw(pc),a0             open window
  133.        movea.l IntBase(pc),a6
  134.        jsr     _LVOOpenWindow(a6)
  135.        move.l  d0,window
  136.        beq.s   Gexit
  137.  
  138.  
  139. ; Set menu
  140.  
  141.        movea.l d0,a0           which window
  142.        lea     Menu1(pc),a1    which menu
  143.        jsr     _LVOSetMenuStrip(a6)
  144.  
  145.        movea.l window(pc),a0
  146.        movea.l wd_RPort(a0),a5
  147.  
  148.        bra.s   disk            initialize with DF0:
  149.  
  150. wait   movea.l _AbsExecBase,a6
  151.        moveq   #0,d7
  152.        movea.l window(pc),a0
  153.        movea.l wd_UserPort(a0),a0  load Window.UserPort
  154.        jsr     _LVOGetMsg(a6)
  155.        tst.l   d0
  156.        beq.s   wait         No message
  157.  
  158.        movea.l d0,a1
  159.        move.l  $14(a1),d7       Message in d7
  160.  
  161.        beq.s   wait
  162.        cmpi.l  #$200,d7
  163.        beq.s   exit
  164.  
  165.        cmpi.l  #$100,d7
  166.        bne.s   wait
  167.  
  168. ; Choice from menu
  169.  
  170.        movea.l window(pc),a0
  171.        movea.l $5e(a0),a0   Load Window.MessageKey
  172.        move.w  $18(a0),d0   Load message code
  173.        move.w  d0,d1
  174.        andi.w  #$f,d1
  175.        bne.s   wait
  176.  
  177.        andi.w  #$f0,d0      Menu 1
  178.        bne.s   menu12       Submenu 1
  179. disk   move.l  #'DF0:',d0
  180. gwait  lea     buf(pc),a0
  181.        move.l  d0,(a0)+
  182.        clr.l   (a0)
  183.        bsr     Map
  184.        bra.s   wait
  185.  
  186. menu12 cmpi.w  #$20,d0      Submenu 2
  187.        bne.s   menu13
  188.        move.l  #'DF1:',d0
  189.        bra.s   gwait
  190.  
  191. menu13 cmpi.w  #$40,d0      Submenu 3
  192.        bne.s   menu14
  193.        move.l  #'DF2:',d0
  194.        bra.s   gwait
  195.  
  196. menu14 cmpi.w  #$60,d0      Submenu 4
  197.        bne.s   wait
  198.        move.l  #'DF3:',d0
  199.        bra.s   gwait
  200.  
  201. exit   movea.l IntBase(pc),a6
  202.        move.l  window(pc),d0
  203.        beq.s   noWin
  204.        movea.l d0,a0
  205.        jsr     _LVOCloseWindow(a6)    close window
  206.  
  207. noWin  movea.l _AbsExecBase,a6
  208.        tst.l   WBenchMsg
  209.        beq.s   NoBenh
  210.        jsr     _LVOForbid(a6)       reply to WB
  211.        movea.l WBenchMsg(pc),a1
  212.        jsr     _LVOReplyMsg(a6)
  213.        jsr     _LVOPermit(a6)
  214.  
  215. NoBenh move.l  IntBase(pc),d1       close intuition library
  216.        beq.s   noInt
  217.        movea.l d1,a1
  218.        jsr     _LVOCloseLibrary(a6)
  219.  
  220. noInt  move.l  GfxBase(pc),d1       close graphics library
  221.        beq.s   noGfx
  222.        movea.l d1,a1
  223.        jsr     _LVOCloseLibrary(a6)
  224.  
  225. noGfx  move.l  DosBase(pc),d1       close dos library
  226.        beq.s   NoDos
  227.        movea.l d1,a1
  228.        jsr     _LVOCloseLibrary(a6)
  229.  
  230. NoDos  moveq   #0,d0                no error
  231.        rts
  232.  
  233. ************************
  234. * Disk Map
  235. ************************
  236.  
  237. Error  movem.l a4-a5,-(a7)
  238.        suba.l  a1,a1             no second line
  239.        suba.l  a2,a2             no third line
  240.        lea     hdtxt(pc),a3      header
  241.        lea     OkTxt(pc),a4      gadget text
  242.        suba.l  a5,a5             no 2nd gadget
  243.        moveq   #0,d0
  244.        moveq   #1,d1
  245.        jsr     request
  246.        movem.l (a7)+,a4-a5
  247.        rts
  248.  
  249. Map    lea     free(pc),a0        initilize free sectors
  250.        move.l  #1758,(a0)
  251.        movea.l DosBase(pc),a6     get the unit number from the
  252.        lea     buf(pc),a0         device name
  253.        move.l  a0,d1
  254.        move.l  #ACCESS_READ,d2
  255.        jsr     _LVOLock(a6)
  256.        lea     nolock(pc),a0
  257.        move.l  d0,lok
  258.        beq.s   Error
  259.  
  260.        movea.l _AbsExecBase,a6
  261.        moveq   #id_SIZEOF,d0
  262.        move.l  #MEMF_CLEAR,d1
  263.        jsr     _LVOAllocMem(a6)
  264.        lea     nomem(pc),a0
  265.        movea.l d0,a4
  266.        tst.l   d0
  267.        beq.s   Error
  268.  
  269.        movea.l DosBase(pc),a6
  270.        move.l  lok(pc),d1
  271.        move.l  d0,d2
  272.        jsr     _LVOInfo(a6)
  273.  
  274.        lea     nodisk(pc),a0
  275.        move.l  id_DiskType(a5),d0
  276.        cmp.l   #ID_NO_DISK_PRESENT,d0
  277. GoErr  beq.s   Error
  278.  
  279.        move.l  id_UnitNumber(a4),unit
  280.  
  281.        movea.l _AbsExecBase,a6
  282.        movea.l a4,a1
  283.        moveq   #id_SIZEOF,d0
  284.        jsr     _LVOFreeMem(a6)             made it!
  285.  
  286.        lea     reply(pc),a1                get a reply port
  287.        move.l  ThisTask(a6),$10(a1)
  288.        jsr     _LVOAddPort(a6)
  289.  
  290.        lea     TrackName(pc),a0            open trackdisk device
  291.        move.l  unit(pc),d0
  292.        lea     diskio(pc),a1
  293.        moveq   #0,d1
  294.        jsr     _LVOOpenDevice(a6)
  295.        lea     noget(pc),a0
  296.        tst.l   d0
  297.        bne     Error
  298.  
  299.        move.l  #1024,d0                     allocate disk buffer
  300.        move.l  #MEMF_CLEAR|MEMF_CHIP,d1
  301.        jsr     _LVOAllocMem(a6)
  302.        lea     nobuf(pc),a0
  303.        move.l  d0,diskbuffer
  304.        beq.s   GoErr
  305.  
  306.        moveq   #0,d0                 get boot block
  307.        bsr     GetSec
  308.        movea.l diskbuffer(pc),a0
  309.        move.l  (a0),d0
  310.        cmpi.l  #'DOS'*$100,d0         check if boot disk
  311.        bne.s   stand                 (accept only DOS disks)
  312.        move.l  8(a0),d0              bitmap sector if check sum ok
  313.        cmpi.l  #1760,d0              can't be more than 1759
  314.        bcc.s   stand
  315.        moveq   #0,d2
  316.        move.w  #$ff,d1
  317. check  add.l   (a0)+,d2              see if check sum ok
  318.        bcc.s   noc
  319.        addq.l  #1,d2
  320. noc    dbra    d1,check
  321.        not.l   d2
  322.        beq.s   nostd
  323. stand  move.l  #880,d0               assume standard root block
  324. nostd  bsr     GetSec
  325.        movea.l diskbuffer(pc),a0
  326.        move.l  BITMAPINDEX(a0),d0
  327.        move.l  d0,sectno             remember bitmap sector
  328.        bsr     GetSec
  329.  
  330.        lea     reply(pc),a1
  331.        jsr     _LVORemPort(a6)        remove reply port
  332.  
  333.        lea     diskio(pc),a1
  334.        jsr     _LVOCloseDevice(a6)    close trackdisk device
  335.  
  336.        movea.l DosBase(pc),a6         unlock disk
  337.        move.l  lok(pc),d1
  338.        jsr     _LVOUnLock(a6)
  339.  
  340. ***********************************************
  341. *
  342. * now all we have to do is display the bitmap
  343. *
  344. ***********************************************
  345. XX     equ         6
  346. YY     equ         6
  347. XOFF   equ         30
  348. YOFF   equ         25
  349.  
  350.  
  351.        movea.l GfxBase(pc),a6  clear screen
  352.        moveq   #0,d0
  353.        movea.l a5,a1
  354.        jsr     _LVOSetAPen(a6)
  355.  
  356.        movea.l a5,a1
  357.        moveq   #0,d0
  358.        moveq   #0,d1
  359.        move.l  #640,d2
  360.        move.l  #250,d3
  361.        jsr     _LVORectFill(a6)
  362.  
  363.        movea.l a5,a1
  364.        moveq   #3,d0
  365.        jsr     _LVOSetAPen(a6)
  366.  
  367.        movea.l a5,a1
  368.        moveq   #XOFF,d0
  369.        moveq   #YOFF,d1
  370.        moveq   #XX,d2
  371.        add.l   d0,d2
  372.        moveq   #YY,d3
  373.        add.l   d3,d3
  374.        add.l   d1,d3
  375.        jsr     _LVORectFill(a6)
  376.  
  377. i equr d7
  378. k equr d6
  379. n equr d5
  380. NUMLONGS  equ 880/16
  381.  
  382.        moveq   #1,i
  383. loop1  movea.l diskbuffer(pc),a0
  384.        move.l  i,k
  385.        asl.l   #2,k
  386.        move.l  0(a0,k.l),k
  387.        moveq   #0,n
  388. loop2  cmpi.l  #NUMLONGS,i
  389.        blt.s   doit
  390.        cmpi.l  #30,n
  391.        bge.s   dont
  392. doit   move.l  k,d0
  393.        not.l   d0
  394.        and.l   #1,d0
  395.        beq.s   next
  396.  
  397.        move.l  i,d4
  398.        subq.l  #1,d4
  399.        asl.l   #5,d4
  400.        add.l   n,d4
  401.        addq.l  #2,d4       l = (i-1 << 5) + n + 2;
  402.  
  403.        move.l  d4,d1
  404.        divu    #22,d1
  405.        moveq   #0,d0
  406.        move.w  d1,d0
  407.        mulu    #XX,d0
  408.        add.l   #XOFF,d0    x = (l / 22) * XX + XOFF;
  409.  
  410.        move.l  d4,d2
  411.        divu    #22,d2
  412.        swap    d2
  413.        moveq   #0,d1
  414.        move.w  d2,d1
  415.        mulu    #YY,d1
  416.        add.l   #YOFF,d1     y = (l % 22) * YY + YOFF;
  417.  
  418. BRKOVER  equ       91
  419. SEP      equ       6
  420.  
  421.        cmpi.l  #BRKOVER,d1
  422.        blt.s   nosep
  423.        addi.l  #SEP,d1      if (y >= BRKOVER) y += SEP;
  424.  
  425. nosep  move.l  d0,d2
  426.        addi.l  #XX-1,d2
  427.        move.l  d1,d3
  428.        addi.l  #YY-1,d3
  429.        movea.l a5,a1
  430.        jsr     _LVORectFill(a6)   RectFill (rp, x, y, x+XX-1, y+YY-1);
  431.        sub.l   #1,free
  432.  
  433. next   asr.l   #1,k
  434. dont   addq    #1,n
  435.        cmpi.l  #32,n
  436.        blt     loop2
  437.        addq    #1,i
  438.        cmpi.l  #NUMLONGS,i
  439.        ble     loop1
  440.  
  441. **************
  442. *
  443. * Draw grid
  444. *
  445. **************
  446.  
  447.        movea.l a5,a1
  448.        moveq   #1,d0
  449.        jsr     _LVOSetAPen(a6)
  450.  
  451. x equr d7
  452.  
  453.        moveq   #XOFF,x
  454. xloop  movea.l a5,a1
  455.        move.l  x,d0
  456.        moveq   #YOFF,d1
  457.        jsr     _LVOMove(a6)
  458.        movea.l a5,a1
  459.        move.l  x,d0
  460.        moveq   #YOFF,d1
  461.        addi.l  #11*YY,d1
  462.        jsr     _LVODraw(a6)
  463.        movea.l a5,a1
  464.        move.l  x,d0
  465.        move.l  #BRKOVER+SEP,d1
  466.        jsr     _LVOMove(a6)
  467.        movea.l a5,a1
  468.        move.l  x,d0
  469.        move.l  #BRKOVER+SEP,d1
  470.        add.l   #11*YY,d1
  471.        jsr     _LVODraw(a6)
  472.        addq.l  #XX,x
  473.        cmpi.l  #80*XX+XOFF,x
  474.        ble.s   xloop
  475.  
  476. y equr d7
  477.  
  478.        moveq   #0,y
  479. yloop  movea.l a5,a1
  480.        move.l  #XOFF,d0
  481.        move.l  y,d1
  482.        add.l   #YOFF,d1
  483.        jsr     _LVOMove(a6)
  484.        movea.l a5,a1
  485.        move.l  #XOFF+80*XX,d0
  486.        move.l  y,d1
  487.        add.l   #YOFF,d1
  488.        jsr     _LVODraw(a6)
  489.        movea.l a5,a1
  490.        move.l  #XOFF,d0
  491.        move.l  y,d1
  492.        add.l   #BRKOVER+SEP,d1
  493.        jsr     _LVOMove(a6)
  494.        movea.l a5,a1
  495.        move.l  #XOFF+80*XX,d0
  496.        move.l  y,d1
  497.        add.l   #BRKOVER+SEP,d1
  498.        jsr     _LVODraw(a6)
  499.        addq.l  #YY,y
  500.        cmpi.l  #11*YY,y
  501.        ble.s   yloop
  502.  
  503.        movea.l a5,a1
  504.        move.l  #XOFF+XX/2,d0
  505.        moveq   #YOFF,d1
  506.        jsr     _LVOMove(a6)
  507.        movea.l a5,a1
  508.        move.l  #XOFF+XX/2,d0
  509.        moveq   #YOFF-3,d1
  510.        jsr     _LVODraw(a6)
  511.  
  512.        movea.l a5,a1
  513.        move.l  #XOFF+80*XX-XX/2,d0
  514.        moveq   #YOFF,d1
  515.        jsr     _LVOMove(a6)
  516.        movea.l a5,a1
  517.        move.l  #XOFF+80*XX-XX/2,d0
  518.        moveq   #YOFF-3,d1
  519.        jsr     _LVODraw(a6)
  520.  
  521.        movea.l a5,a1
  522.        move.l  #XOFF,d0
  523.        moveq   #YOFF+YY/2,d1
  524.        jsr     _LVOMove(a6)
  525.        movea.l a5,a1
  526.        move.l  #XOFF-3,d0
  527.        moveq   #YOFF+YY/2,d1
  528.        jsr     _LVODraw(a6)
  529.  
  530.        movea.l a5,a1
  531.        move.l  #XOFF,d0
  532.        moveq   #YOFF+YY*10+YY/2,d1
  533.        jsr     _LVOMove(a6)
  534.        movea.l a5,a1
  535.        move.l  #XOFF-3,d0
  536.        moveq   #YOFF+YY*10+YY/2,d1
  537.        jsr     _LVODraw(a6)
  538.  
  539.        movea.l a5,a1
  540.        move.l  #XOFF-1,d0
  541.        moveq   #YOFF-3,d1
  542.        jsr     _LVOMove(a6)
  543.        movea.l a5,a1
  544.        lea     text1(pc),a0
  545.        moveq   #1,d0
  546.        jsr     _LVOText(a6)
  547.  
  548.        movea.l a5,a1
  549.        move.l  #XOFF+79*XX-1,d0
  550.        moveq   #YOFF-3,d1
  551.        jsr     _LVOMove(a6)
  552.        movea.l a5,a1
  553.        lea     text2(pc),a0
  554.        moveq   #2,d0
  555.        jsr     _LVOText(a6)
  556.  
  557.        movea.l a5,a1
  558.        move.l  #XOFF-12,d0
  559.        moveq   #YOFF+6,d1
  560.        jsr     _LVOMove(a6)
  561.        movea.l a5,a1
  562.        lea     text1(pc),a0
  563.        moveq   #1,d0
  564.        jsr     _LVOText(a6)
  565.  
  566.        movea.l a5,a1
  567.        move.l  #XOFF-20,d0
  568.        moveq   #YOFF+11*YY,d1
  569.        jsr     _LVOMove(a6)
  570.        movea.l a5,a1
  571.        lea     text3(pc),a0
  572.        moveq   #2,d0
  573.        jsr     _LVOText(a6)
  574.  
  575.        movea.l a5,a1
  576.        move.l  #520,d0
  577.        moveq   #60,d1
  578.        jsr     _LVOMove(a6)
  579.        movea.l a5,a1
  580.        lea     text4(pc),a0
  581.        moveq   #9,d0
  582.        jsr     _LVOText(a6)
  583.  
  584.        movea.l a5,a1
  585.        move.l  #520,d0
  586.        move.l  #132,d1
  587.        jsr     _LVOMove(a6)
  588.        movea.l a5,a1
  589.        lea     text5(pc),a0
  590.        moveq   #9,d0
  591.        jsr     _LVOText(a6)
  592.  
  593.        movea.l a5,a1
  594.        move.l  #XOFF,d0
  595.        move.l  #176,d1
  596.        jsr     _LVOMove(a6)
  597.        movea.l a5,a1
  598.        lea     text6(pc),a0
  599.        moveq   #17,d0
  600.        jsr     _LVOText(a6)
  601.        move.l  sectno(pc),d0
  602.        bsr     ShowPr
  603.  
  604.        movea.l a5,a1
  605.        move.l  #250,d0
  606.        move.l  #176,d1
  607.        jsr     _LVOMove(a6)
  608.        movea.l a5,a1
  609.        lea     text7(pc),a0
  610.        moveq   #14,d0
  611.        jsr     _LVOText(a6)
  612.        move.l  free(pc),d0
  613.        bsr     ShowPr
  614.  
  615.        movea.l a5,a1
  616.        move.l  #450,d0
  617.        move.l  #176,d1
  618.        jsr     _LVOMove(a6)
  619.        movea.l a5,a1
  620.        lea     text8(pc),a0
  621.        moveq   #11,d0
  622.        jsr     _LVOText(a6)
  623.        move.l  #1760,d0
  624.        sub.l   free(pc),d0
  625.        bsr     ShowPr
  626.  
  627.        movea.l a5,a1
  628.        move.l  #520,d0
  629.        moveq   #60,d1
  630.        jsr     _LVOMove(a6)
  631.        movea.l a5,a1
  632.        lea     text4(pc),a0
  633.        moveq   #9,d0
  634.        jsr     _LVOText(a6)
  635.  
  636.        movea.l a5,a1
  637.        move.l  #520,d0
  638.        move.l  #132,d1
  639.        jsr     _LVOMove(a6)
  640.        movea.l a5,a1
  641.        lea     text5(pc),a0
  642.        moveq   #9,d0
  643.        jsr     _LVOText(a6)
  644.  
  645.        move.l  #1024,d0                free disk buffer
  646.        movea.l diskbuffer(pc),a1
  647.        movea.l _AbsExecBase,a6
  648.        jsr     _LVOFreeMem(a6)
  649.  
  650.        rts
  651.  
  652. GetSec lea     diskio(pc),a1          get a sector from disk
  653.        lea     reply(pc),a0
  654.        move.l  a0,14(a1)
  655.        move.w  #2,28(a1)
  656.        move.l  diskbuffer(pc),40(a1)
  657.        move.l  #1024,36(a1)
  658.        mulu    #512,d0
  659.        move.l  d0,44(a1)
  660.        jsr     _LVODoIO(a6)
  661.  
  662.        lea     diskio(pc),a1         switch motor off
  663.        move.w  #TD_MOTOR,28(a1)
  664.        clr.l   36(a1)
  665.        jsr     _LVODoIO(a6)
  666.        rts
  667.  
  668. ********************************************
  669. *                                          *
  670. * Write number in d0 as decimal to console *
  671. *                                          *
  672. ********************************************
  673.  
  674.  
  675. ShowPr movem.l d0-d3/a0-a1,-(a7)
  676.        tst.l   d0                 zero is a special case
  677.        beq.s   zero
  678.        lea     Prime(pc),a1
  679.        movea.l a1,a0
  680.        move.l  #'0000',d1
  681.        move.l  d1,(a1)+
  682.        move.l  d1,(a1)+
  683.        move.l  d1,(a1)+
  684.        lea     Num(pc),a1
  685. plop   move.l  (a1)+,d1
  686.        addq.l  #1,a0
  687. pnext  cmp.l   d1,d0
  688.        bcs.s   plop
  689.        sub.l   d1,d0
  690.        addq.b  #1,(a0)
  691.        tst.l   d0
  692.        bne.s   pnext
  693.        lea     Prime(pc),a0
  694.        moveq   #11,d0
  695. ptest  cmpi.b  #'0',(a0)
  696.        bne.s   endp
  697.        subq.l  #1,d0
  698.        addq.l  #1,a0
  699.        bra.s   ptest
  700. endp   movea.l a5,a1
  701.        jsr     _LVOText(a6)
  702.        movem.l (a7)+,d0-d3/a0-a1
  703.        rts
  704.  
  705. zero   lea     Prime(pc),a0
  706.        move.w  #'00',(a0)
  707.        moveq   #1,d0
  708.        bra.s   endp
  709.  
  710. Num       dc.l 1000000000,100000000,10000000,1000000,100000,10000,1000,100,10,1
  711.  
  712. nolock      dc.b "Can't obtain lock.",0
  713.             even
  714. nomem       dc.b "Can't get InfoData memory.",0
  715.             even
  716. noinfo      dc.b 'Call to Info() failed.',0
  717.             even
  718. nodisk      dc.b 'No disk in drive.',0
  719.             even
  720. noget       dc.b "Can't get at disk.",0
  721.             even
  722. nobuf       dc.b "Can't allocate disk buffer.",0
  723.             even
  724.  
  725. text8       dc.b 'Allocated: '
  726. text7       dc.b 'Sectors free: '
  727. text6       dc.b 'Bitmap on sector '
  728. text2       dc.b '79'
  729. text4       dc.b 'Surface 0'
  730. text5       dc.b 'Surface '
  731. text3       dc.b '1'
  732. text1       dc.b '0'
  733.             even
  734.  
  735. diskio
  736. message     ds.w 10
  737. io          ds.w 6
  738. ioreq       ds.w 8
  739. reply       ds.l 8
  740.  
  741. WBenchMsg   dc.l 0
  742. DosBase     dc.l 0
  743. GfxBase     dc.l 0
  744. IntBase     dc.l 0
  745. lok         dc.l 0
  746. unit        dc.l 0
  747. diskbuffer  dc.l 0
  748. sectno      dc.l 0
  749. free        dc.l 0
  750. window      dc.l 0
  751.  
  752. ; requester texts
  753.  
  754. hdtxt       dc.b ' DiskMapper Request',0
  755. OkTxt       dc.b ' OK',0
  756.             even
  757.  
  758. buf
  759. DosName     dc.b 'dos.library',0
  760.             even
  761.  
  762. Prime
  763. GfxName     dc.b 'graphics.library',0
  764. IntName     dc.b 'intuition.library',0
  765. TrackName   dc.b 'trackdisk.device',0
  766.             even
  767.  
  768. title       dc.b  'Disk Allocation Map',0
  769.             even
  770.  
  771. ***** Window definition *****
  772.  
  773. nw          dc.w 0,0         Position left,top
  774.             dc.w 640,199     Size width,height
  775.             dc.b 0,1         Colors detail-,block pen
  776.             dc.l $340        IDCMP-Flags
  777.             dc.l $140f       Window flags
  778.             dc.l 0           ^Gadget
  779.             dc.l 0           ^Menu check
  780.             dc.l title       ^Window name
  781. nws         dc.l 0           ^Screen structure,
  782.             dc.l 0           ^BitMap
  783.             dc.w 100         MinWidth
  784.             dc.w 40          MinHeight
  785.             dc.w -1          MaxWidth
  786.             dc.w -1,1        MaxHeight,Screen type
  787.  
  788. **** menu definition ****
  789.  
  790. Menu1       dc.l 0           Next menu
  791.             dc.w 50,0        Position left edge,top edge
  792.             dc.w 50,20       Dimensions width,height
  793.             dc.w 1           Menu enabled
  794.             dc.l mtext1      Text for menu header
  795.             dc.l item11      ^First in chain
  796.             dc.l 0,0         Internal
  797.  
  798. mtext1      dc.b 'Disk',0
  799.             even
  800.  
  801. item11      dc.l item12      next in chained list
  802.             dc.w 0,0         Position left edge,top edge
  803.             dc.w 50,10       Dimensions width,height
  804.             dc.w $52         itemtext+highcomp+itemenabled
  805.             dc.l 0           Mutual exclude
  806.             dc.l I11txt      Pointer to intuition text
  807.             dc.l 0
  808.             dc.b 0,0
  809.             dc.l 0
  810.             dc.w 0
  811.  
  812.  
  813. I11txt      dc.b 0           Front pen  (blue)
  814.             dc.b 1           Back pen   (white)
  815.             dc.b 0,0         Draw mode
  816.             dc.w 0           Left edge
  817.             dc.w 0           Top edge
  818.             dc.l 0           Text font
  819.             dc.l item11txt   Pointer to text
  820.             dc.l 0           Next text
  821.  
  822. item11txt   dc.b 'DF0:',0
  823.             even
  824.  
  825. item12      dc.l item13      next in chained list
  826.             dc.w 0,10        Position left edge,top edge
  827.             dc.w 50,10       Dimensions width,height
  828.             dc.w $52         itemtext+highcomp+itemenabled
  829.             dc.l 0           Mutual exclude
  830.             dc.l I12txt      Pointer to intuition text
  831.             dc.l 0
  832.             dc.b 0,0
  833.             dc.l 0
  834.             dc.w 0
  835.  
  836.  
  837. I12txt      dc.b 0           Front pen  (blue)
  838.             dc.b 1           Back pen   (white)
  839.             dc.b 0,0         Draw mode
  840.             dc.w 0           Left edge
  841.             dc.w 0           Top edge
  842.             dc.l 0           Text font
  843.             dc.l item12txt   Pointer to text
  844.             dc.l 0           Next text
  845.  
  846. item12txt   dc.b 'DF1:',0
  847.             even
  848.  
  849. item13      dc.l item14      next in chained list
  850.             dc.w 0,20        Position left edge,top edge
  851.             dc.w 50,10       Dimensions width,height
  852.             dc.w $52         itemtext+highcomp+itemenabled
  853.             dc.l 0           Mutual exclude
  854.             dc.l I13txt      Pointer to intuition text
  855.             dc.l 0
  856.             dc.b 0,0
  857.             dc.l 0
  858.             dc.w 0
  859.  
  860.  
  861. I13txt      dc.b 0           Front pen  (blue)
  862.             dc.b 1           Back pen   (white)
  863.             dc.b 0,0         Draw mode
  864.             dc.w 0           Left edge
  865.             dc.w 0           Top edge
  866.             dc.l 0           Text font
  867.             dc.l item13txt   Pointer to text
  868.             dc.l 0           Next text
  869.  
  870. item13txt   dc.b 'DF2:',0
  871.             even
  872.  
  873. item14      dc.l 0           next in chained list
  874.             dc.w 0,30        Position left edge,top edge
  875.             dc.w 50,10       Dimensions width,height
  876.             dc.w $52         itemtext+highcomp+itemenabled
  877.             dc.l 0           Mutual exclude
  878.             dc.l I14txt      Pointer to intuition text
  879.             dc.l 0
  880.             dc.b 0,0
  881.             dc.l 0
  882.             dc.w 0
  883.  
  884.  
  885. I14txt      dc.b 0           Front pen  (blue)
  886.             dc.b 1           Back pen   (white)
  887.             dc.b 0,0         Draw mode
  888.             dc.w 0           Left edge
  889.             dc.w 0           Top edge
  890.             dc.l 0           Text font
  891.             dc.l item14txt   Pointer to text
  892.             dc.l 0           Next text
  893.  
  894. item14txt   dc.b 'DF3:',0
  895.             even
  896.             end
  897.  
  898.  
  899.