home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / diskutil / ramled / ramd_led.s < prev   
Text File  |  1987-02-28  |  2KB  |  90 lines

  1.     .text
  2.  
  3.     move.l    4(sp),a0        * compute size to Ptermres
  4.     move.l    $c(a0),d0
  5.     add.l    $14(a0),d0
  6.     add.l    $1c(a0),d0
  7.     add.l    #$100,d0
  8.     move.l    d0, size_store        * keep value
  9.     
  10.     move.l    #install, -(sp)        * address of install routine
  11.     move.w    #38, -(sp)        * Supexec()
  12.     trap    #14            * -> xbios
  13.     addq.l    #6, sp            * correct sp
  14.     
  15.     move.w    #0, -(sp)        * No error
  16.     move.l    size_store, -(sp)    * size of pgm.
  17.     move.w    #$31, -(sp)        * Ptermres()
  18.     trap    #1
  19.  
  20. idle:
  21.     bra    idle            * infinite loop
  22.  
  23. *----------------
  24. *
  25. *    Rwabs() intercept
  26. *    o  save return address
  27. *    o  setup to return to ret_handler
  28. *    o  turn on the indicator
  29. *    o  follow through old Rwabs() vector
  30. *
  31. handler:
  32.     move.l    (sp),ret_addr        * save return address
  33.     move.l    #ret_handler,(sp)    * arrange return to ret_handler
  34.  
  35.     cmp.w    #6, 14(sp)        * is it the ramdisk ???
  36.     bne    skip            * NO -> do nothing
  37.     
  38.     move.w    sr, -(sp)        * save sr
  39.     or.w    #$700, sr        * disable IRQs
  40.     move.b    #14, $ff8800        * select GIA PORT A
  41.     and.b    #$FD, $ff8802        * turn on DRIVE-A led ...
  42.     move.w    (sp)+, sr        * restore sr
  43.     st    now_flag        * keep action in mind
  44.  
  45. skip:
  46.     move.l    old_rw,a0        * follow through to
  47.     jmp    (a0)            *    original handler
  48.  
  49.  
  50. *----------------
  51. *
  52. *    Rwabs return intercept
  53. *    o  turn off the indicator
  54. *    o  flip indicator offset
  55. *    o  return to original caller
  56. *
  57. ret_handler:
  58.  
  59.     tst    now_flag        * NOW ?
  60.     beq    skip2            * No ---
  61.  
  62.     clr.b    now_flag        * reset flag
  63.     move.w    sr, -(sp)        * save sr
  64.     or.w    #$700, sr        * mask out ALL IRQs
  65.     move.b    #14, $ff8800        * select GIA-PORT A
  66.     or.b    #2, $ff8802        * set bit 1
  67.     move.w    (sp)+, sr        * reset sr
  68.  
  69. skip2:
  70.     move.l    ret_addr,a0        * return to original caller
  71.     jmp    (a0)
  72.  
  73. *----------------
  74. *
  75. *    Rwabs() intercept installer
  76. *
  77. hdv_rw    equ    $476
  78.  
  79. install:
  80.     move.l    hdv_rw,old_rw        * save old vector
  81.     move.l    #handler,hdv_rw        * install our new one
  82.     rts
  83.  
  84.  
  85.     .bss
  86. size_store:    ds.l    1        * temp storage
  87. old_rw:        ds.l    1        * = original hdv_rw vector
  88. ret_addr:    ds.l    1        * = caller's return address
  89. now_flag:    ds.w    1        * = LED turned ON before RWABS ?
  90.