home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / diskutil / bootinfo / bootinfo.s < prev   
Text File  |  1990-07-26  |  8KB  |  352 lines

  1. *********************************************
  2. *             Bootinfo.acc v4.00            *
  3. *         (C) J.B. Lancashire 1989          *
  4. *        assemble as 'BOOTINFO.ACC'.        *
  5. *********************************************
  6.  
  7. ****************************************
  8. * Initialisation only done at boot up. *
  9. ****************************************
  10. start   move.l    #mystack,a7    Set up stack.
  11.     
  12.     move.w    #10,control    Initialise application.
  13.     move.w    #0,control+2
  14.     move.w    #1,control+4    
  15.     move.w    #0,control+6
  16.     bsr    aes
  17.     move.w    d0,ap_id
  18.     
  19.     move.w    ap_id,int_in    Register accessory in menu.
  20.     move.l    #name,addr_in
  21.     move.w    #35,control
  22.     move.w    #1,control+2
  23.     move.w    #1,control+4    
  24.     move.w    #1,control+6    
  25.     bsr    aes
  26.  
  27.     move.w    #17,d4        Convert main dialog coordinates.
  28.     move.l    #tree1,addr_in
  29.     bsr    obfix
  30.     bsr    fcent
  31.  
  32. ***************************************
  33. * The start of the main program loop. *
  34. ***************************************
  35.  
  36. wait    move.l    #message,addr_in    Wait for a menu call.
  37.     move.w    #23,control
  38.     move.w    #0,control+2
  39.     move.w    #1,control+4    
  40.     move.w    #1,control+6    
  41.     bsr    aes
  42.     move.l    #message,a0
  43.     move.w    (a0),d0
  44.     cmpi.w    #40,d0
  45.     bne    wait        Not a call for us, carry on waiting.
  46.     
  47.     move.w    #0,int_in    Prepare to display dialog.
  48.     bsr    fdial
  49.     
  50.     move.l    #tree1,addr_in    Draw the dialog box.
  51.     move.w    #0,int_in
  52.     move.w    #3,int_in+2
  53.     bsr    obdraw
  54.     
  55. *****************
  56. * Info routine. *
  57. *****************
  58.  
  59. info    move.w    #0,-(sp)    Read bios parameter block.
  60.     move.w    #7,-(sp)
  61.     trap    #13
  62.     addq.l    #4,sp
  63.     cmpi.l    #0,d0
  64.     beq    err        Failed to find bios block etc.
  65.     move.l    d0,a0        Save address of parameter block.
  66.  
  67.     move.b    #12,d1
  68.     lea    drecsiz,a1    Convert bios info to text.
  69. iloop    move.w    (a0)+,d0    
  70.     bsr    conv
  71.     adda.l    #24,a1
  72.     dbra    d1,iloop
  73.     
  74. draw    move.l    #tree1,addr_in    Redraw dialog box.
  75.     move.w    #7,int_in
  76.     move.w    #1,int_in+2
  77.     bsr    obdraw
  78.             
  79. wait1    move.l    #tree1,addr_in    Wait for event.
  80.     bsr    formdo
  81.     cmpi    #1,d0        Evaluate user input.
  82.     beq    about
  83.     cmpi    #5,d0
  84.     beq    info
  85.     cmpi    #6,d0
  86.     beq    exit
  87.     bra    wait1        Non valid input, return.
  88.  
  89. ********************************
  90. * Misc functions and routines. *
  91. ********************************
  92.  
  93. conv    move.l    #$30303000,(a1)    Convert a hex word in D0 into
  94.                 * an ascii decimal string.
  95. coma    cmp.w    #100,d0        Calculate 100's.
  96.     blt    comb
  97.     addi.b    #1,0(a1)
  98.     sub.w    #100,d0
  99.     bra    coma
  100. comb    cmp.w    #10,d0        Calculate 10's.
  101.     blt    comc
  102.     addi.b    #1,1(a1)
  103.     sub.w    #10,d0
  104.     bra    comb
  105. comc    add.b    d0,2(a1)    Whats left must be 1's.
  106.  
  107.     cmp.b    #48,0(a1)    Supress leading zero.
  108.     bne    econ
  109.     sub.b    #16,0(a1)
  110.     cmp.b    #48,1(a1)    Supress next zero.
  111.     bne    econ
  112.     sub.b    #16,1(a1)    
  113. econ    move.b    #0,3(a1)
  114.     rts
  115.  
  116. ****
  117. exit    move.w    #3,int_in
  118.     bsr    fdial
  119.     bra    wait        Return to the desktop.
  120.  
  121. *****
  122. about    move.w    #1,int_in    Show about alert box.
  123.     move.l    #alert,addr_in#
  124.     bsr    falert
  125.     bra    wait1
  126.  
  127. *****
  128. err    move.w    #1,int_in
  129.     move.l    #error,addr_in
  130.     bsr    falert
  131.     bra    wait1    
  132.  
  133. *******************************
  134. * Operating system functions. *
  135. *******************************
  136.  
  137. obdraw    move.w    #42,control    Draw a dialog box.
  138.     move.w    #6,control+2
  139.     move.w    #1,control+4    
  140.     move.w    #1,control+6    
  141.     move.w    fcx,int_in+4
  142.     move.w    fcx+2,int_in+6
  143.     move.w    fcx+4,int_in+8
  144.     move.w    fcx+6,int_in+10
  145.     bsr    aes
  146.     rts
  147. *****
  148. obfix    move.w    #114,control    Fix object tree1 coordinates.
  149.     move.w    #1,control+2
  150.     move.w    #1,control+4    
  151.     move.w    #1,control+6    
  152. fix    move.w    d4,int_in    Repeat for all objects in tree.
  153.     bsr    aes
  154.     dbra    d4,fix
  155.     rts
  156. ******
  157. formdo    move.w    #50,control    Handle returns from dialog box.
  158.     move.w    #1,control+2
  159.     move.w    #1,control+4
  160.     move.w    #1,control+6
  161.     move.w    #0,int_in
  162.     bsr    aes
  163.     rts
  164. *****    
  165. fcent    move.w    #54,control    Center a dialog box.
  166.     move.w    #0,control+2
  167.     move.w    #5,control+4
  168.     move.w    #1,control+6
  169.     bsr    aes
  170.     move.w    int_out+2,fcx
  171.     move.w    int_out+4,fcx+2
  172.     move.w    int_out+6,fcx+4
  173.     move.w    int_out+8,fcx+6    
  174.     rts
  175. *****        
  176. fdial    move.w    #51,control    Prepare to draw a dialog box.
  177.     move.w    #9,control+2
  178.     move.w    #1,control+4    
  179.     move.w    #1,control+6    
  180.     move.w    #0,int_in+2
  181.     move.w    #0,int_in+4
  182.     move.w    #0,int_in+6
  183.     move.w    #0,int_in+8
  184.     move.w    fcx,int_in+10
  185.     move.w    fcx+2,int_in+12
  186.     move.w    fcx+4,int_in+14
  187.     move.w    fcx+6,int_in+16
  188.     bsr    aes
  189.     rts
  190. ******
  191. falert    move.w    #52,control    Display an alert box.
  192.     move.w    #1,control+2
  193.     move.w    #1,control+4
  194.     move.w    #1,control+6
  195.     bsr    aes
  196.     rts
  197. ***
  198. aes    move.w    #0,control+8    Call aes routine.
  199.     move.l    #aespb,d1
  200.     move.l    #$c8,d0
  201.     trap    #2
  202.     move.w    int_out,d0
  203.     rts
  204.     
  205. **********************************
  206. * The data arrays and variables. *
  207. **********************************
  208.  
  209. * The name of the accessory.
  210.  
  211. name    dc.b    32,14,15,' Bootinfo v4.00',0
  212.  
  213. * The alert boxes.
  214.  
  215. alert     dc.b    '[0][ Bootinfo v4.00 (C) 1989|'
  216.     dc.b    '   by J.B. Lancashire.|'
  217.     dc.b    '------------------------  |'
  218.     dc.b    '     Disk analyzer.]'
  219.     dc.b    '[ ok ]',0
  220.  
  221. error    dc.b    '[0][ Bootinfo v4.00 (C) 1989|'
  222.     dc.b    '   by J.B. Lancashire.|'
  223.     dc.b    '------------------------  |'
  224.     dc.b    '     Error reading|'
  225.     dc.b    ' bios parammeter block.]'
  226.     dc.b    '[ abort ]',0
  227.  
  228. * General data and arrays.
  229.     even
  230.  
  231. aespb    dc.l    control,global,int_in,int_out,addr_in,addr_out
  232.  
  233. ap_id        ds.w     1    Application I.D.
  234. message        ds.b     16    Message pipe.
  235.         ds.l    100
  236. mystack        ds.w    1    User defined stack (goes backwards). 
  237. global        ds.w    15
  238. control        ds.w    5
  239. int_in        ds.w    16
  240. addr_in        ds.l    2
  241. int_out        ds.w    7
  242. addr_out    ds.l    1
  243.  
  244. *****************************                
  245. * Data for the  dialog box. *
  246. *****************************
  247.     even
  248. fcx    ds.w    4        Storage for form center.
  249.  
  250. * Data for main dialog.
  251. tree1    dc.l    $ffff0001,$00070014,$00000000
  252.     dc.l    $000211a2
  253.     dc.l    $00000000,$001e0011
  254.  
  255.     dc.l    $00050002,$00040014,$00400000
  256.     dc.l    $00fe1033
  257.     dc.l    $00020001,$00120003
  258.  
  259.     dc.l    $0003ffff,$ffff001c,$00000000
  260.     dc.l    titstr
  261.     dc.l    $00020000,$00000001
  262.  
  263.     dc.l    $0004ffff,$ffff001c,$00000000
  264.     dc.l    titstr1
  265.     dc.l    $00050001,$00000001
  266.  
  267.     dc.l    $0001ffff,$ffff001c,$00200000
  268.     dc.l    titstr2
  269.     dc.l    $00010002,$00000001
  270.  
  271.     dc.l    $0006ffff,$ffff001a,$00400000
  272.     dc.l    infostr
  273.     dc.l    $00160001,$00060001
  274.  
  275.     dc.l    $0007ffff,$ffff001a,$00420000
  276.     dc.l    exitstr
  277.     dc.l    $00160003,$00060001
  278.  
  279.     dc.l    $00000008,$00110014,$00000000
  280.     dc.l    $000211a3
  281.     dc.l    $00020005,$001a000b
  282.  
  283.     dc.l    $0009ffff,$ffff001c,$00200000
  284.     dc.l    recsiz
  285.     dc.l    $00020001,$001a0000
  286.  
  287.     dc.l    $000affff,$ffff001c,$00200000
  288.     dc.l    clsiz
  289.     dc.l    $00020002,$001a0000
  290.  
  291.     dc.l    $000bffff,$ffff001c,$00200000
  292.     dc.l    rdlen
  293.     dc.l    $00020003,$001a0000
  294.  
  295.     dc.l    $000cffff,$ffff001c,$00200000
  296.     dc.l    fsiz
  297.     dc.l    $00020004,$001a0000
  298.  
  299.     dc.l    $000dffff,$ffff001c,$00200000
  300.     dc.l    fatrec
  301.     dc.l    $00020005,$001a0000
  302.  
  303.     dc.l    $000effff,$ffff001c,$00200000
  304.     dc.l    datrec
  305.     dc.l    $00020006,$001a0000
  306.  
  307.     dc.l    $000fffff,$ffff001c,$00200000
  308.     dc.l    numcl
  309.     dc.l    $00020007,$001a0000
  310.  
  311.     dc.l    $0010ffff,$ffff001c,$00200000
  312.     dc.l    sides
  313.     dc.l    $00020008,$001a0000
  314.  
  315.     dc.l    $0011ffff,$ffff001c,$00200000
  316.     dc.l    tracks
  317.     dc.l    $00020009,$001a0000
  318.  
  319.     dc.l    $0007ffff,$ffff001c,$00200000
  320.     dc.l    sectrk
  321.     dc.l    $0002000a,$001a0000
  322.  
  323. * Text for dialog box.
  324.  
  325. titstr    dc.b 'Bootinfo v4.00',0
  326. titstr1    dc.b '(C) 1989',0
  327. titstr2    dc.b 'J.B. Lancashire.',0
  328. infostr    dc.b 'info',0    
  329. exitstr    dc.b 'exit',0
  330.  
  331.     even
  332. recsiz    dc.b    'Bytes per sector.   '
  333. drecsiz    ds.l    1
  334. clsiz    dc.b    'Secs per cluster.   '
  335.     ds.l    7
  336. rdlen    dc.b    'Secs per dir.       '
  337.     ds.l    1
  338. fsiz    dc.b    'Secs per FAT.       '
  339.     ds.l    1
  340. fatrec    dc.b    'Sec No of 2nd FAT.  '
  341.     ds.l    1
  342. datrec    dc.b    'First data sec.     '
  343.     ds.l    1
  344. numcl    dc.b    'Data clusters.      '
  345.     ds.l    7
  346. tracks    dc.b    'No of tracks.       '
  347.     ds.l    1
  348. sides    dc.b    'No of sides.        '
  349.     ds.l    7
  350. sectrk    dc.b    'Secs per track.     '
  351.     ds.l    1
  352.