home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d7xx / d754 / softrack.lha / SofTrack / Install.s < prev    next >
Text File  |  1992-11-05  |  5KB  |  271 lines

  1.  ;Install.Written by Kamran Karimi.It istalls two routines at the DoIO and
  2.  ;SendIO vectors.To be Assembled with Cape Assembler and linked with blink
  3.  ;to produce SofTrack
  4.  
  5.  
  6. ExecBase equ 4
  7. PutMsg equ -366
  8. Allocmem equ -198
  9. FreeMem equ -210
  10. DoIo equ -454
  11. SendIo equ -460
  12.  
  13.  XDEF _Install
  14.  XREF _Port
  15.  
  16. _Install:
  17.  move.l  a6,-(a7)
  18.  move.l  ExecBase,a6
  19.  move.l  DoIo(a6),SaveDoIo
  20.  move.l  SendIo(a6),SaveSendIo
  21.  lea     MessageD,a1
  22.  move.b  #5,8(a1)      ;message type
  23.  move.w  #6,18(a1)      ;message length
  24.  lea     MessageS,a1
  25.  move.b  #5,8(a1)     ;message type
  26.  move.w  #6,18(a1)  
  27.  move.l  ExecBase,a6
  28.  move.l  _Port,PortD
  29.  move.l  _Port,PortS
  30.  beq     End_Main
  31.  move.l  #EndeDoIo-BeginDoIo,d0
  32.  move.l  #$10000,d1
  33.  jsr     Allocmem(a6)
  34.  move.l  d0,ReservedDoIo
  35.  beq     End_Main
  36.  move.l  #EndeSendIo-BeginSendIo,d0
  37.  jsr     Allocmem(a6)
  38.  move.l  d0,ReservedSendIo
  39.  bne     MemAllocated
  40.  move.l  ReservedDoIo,a1
  41.  move.l  #EndeDoIo-BeginDoIo,d0
  42.  jsr     FreeMem(a6)
  43.  bra     End_Main
  44. MemAllocated: 
  45.  move.l  #BeginDoIo,a0
  46.  move.l  ReservedDoIo,a1
  47.  move.l  #EndeDoIo-BeginDoIo,d0
  48.  subi.l  #1,d0
  49. lop1:
  50.  move.b  (a0)+,(a1)+
  51.  dbra    d0,lop1
  52.  move.l  ReservedDoIo,DoIo(a6)
  53.  
  54.  move.l  #BeginSendIo,a0
  55.  move.l  ReservedSendIo,a1
  56.  move.l  #EndeSendIo-BeginSendIo,d0
  57.  subi.l  #1,d0
  58. lop2:
  59.  move.b  (a0)+,(a1)+
  60.  dbra    d0,lop2
  61.  move.l  ReservedSendIo,SendIo(a6)
  62.  moveq   #0,d0
  63.  bra     Payan
  64. End_Main:
  65.  move.l  #10,d0
  66. Payan:             ;in Persian (Parsi or Farsi, as we call it) means end
  67.  move.l (a7)+,a6
  68.  rts
  69.  
  70. ReservedDoIo:   dc.l 0
  71. ReservedSendIo: dc.l 0
  72.  
  73. BeginDoIo:
  74.  movem.l d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6,-(a7)
  75.  move.l  20(a1),a2
  76.  move.l  10(a2),a3
  77.  move.l  #15,d0
  78.  lea     TrackNameD(pc),a4
  79. lop2D:
  80.  cmpm.b  (a3)+,(a4)+
  81.  bne     EnditD
  82.  dbra    d0,lop2D
  83.  lea     MessageD(pc),a2
  84.  move.l  24(a1),a4
  85.  move.b  $41(a4),d0
  86.  btst.b  #3,d0
  87.  bne     df1D
  88.  move.b  #0,20(a2)
  89.  bra     ContD
  90. df1D:
  91.  btst.b  #4,d0
  92.  bne     df2D
  93.  move.b  #1,20(a2)
  94.  bra     ContD
  95. df2D:
  96.  btst    #5,d0
  97.  bne     df3D
  98.  move.b  #2,20(a2)
  99.  bra     ContD
  100. df3D:
  101.  btst.b  #6,d0
  102.  bne     EnditD
  103.  move.b  #3,20(a2)
  104. ContD:
  105.  move.b  #'R',26(a2)
  106.  move.w  28(a1),d0         ;d0 has command
  107.  andi.w  #$00ff,d0
  108.  cmpi.w  #2,d0
  109.  beq     TrackChangeD
  110.  cmpi.w  #10,d0
  111.  beq     TrackChangeD
  112.  cmpi.w  #16,d0
  113.  beq     TrackChangeD
  114.  move.b  #'W',26(a2)
  115.  cmpi.w  #3,d0
  116.  beq     TrackChangeD
  117.  cmpi.w  #11,d0
  118.  beq     TrackChangeD
  119.  cmpi.w  #17,d0
  120.  beq     TrackChangeD
  121.  bra     EnditD
  122.  
  123. TrackChangeD:
  124.  moveq   #0,d4  
  125.  move.l  #16,d2
  126.  move.l  44(a1),d1  ;sector offset
  127.  move.l  #11264,d3
  128.  divu    d3,d1     ;track
  129.  andi.l  #$0000ffff,d1
  130.  divu    #100,d1
  131.  addi.b  #48,d1
  132.  cmp.b   #'0',d1
  133.  bne     NZD1
  134.  move.b  #' ',d1
  135.  moveq   #1,d4
  136. NZD1:
  137.  move.b  d1,22(a2)
  138.  lsr.l   d2,d1
  139.  divu    #10,d1
  140.  addi.b  #48,d1
  141.  tst     d4
  142.  beq     NZD2
  143.  cmp.b   #'0',d1
  144.  bne     NZD2
  145.  move.b  #' ',d1
  146. NZD2:
  147.  move.b  d1,23(a2)
  148.  lsr.l   d2,d1
  149.  addi.b  #48,d1
  150.  move.b  d1,24(a2)
  151.  
  152.  move.l  ExecBase,a6
  153.  move.l  PortD(pc),a0
  154.  lea     MessageD(pc),a1
  155.  jsr     PutMsg(a6)
  156.  
  157. EnditD:
  158.  movem.l (a7)+,d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6
  159.  move.l  SaveDoIo(pc),-(a7)
  160.  rts
  161.  
  162.  
  163. SaveDoIo:   dc.l 0
  164. MessageD:   ds.b 20
  165.             dc.w 0
  166.             dc.b "000  ",0
  167. PortD:      dc.l 0
  168. TrackNameD: dc.b "trackdisk.device",0,0
  169. EndeDoIo:
  170.  
  171.  
  172. BeginSendIo:
  173.  movem.l d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6,-(a7)
  174.  move.l  20(a1),a2
  175.  move.l  10(a2),a3
  176.  move.l  #15,d0
  177.  lea     TrackNameS(pc),a4
  178. lop2S:
  179.  cmpm.b  (a3)+,(a4)+
  180.  bne     EnditS
  181.  dbra    d0,lop2S
  182.  lea     MessageS(pc),a2
  183.  move.l  24(a1),a4
  184.  move.b  $41(a4),d0
  185.  btst.b  #3,d0
  186.  bne     df1S
  187.  move.b  #0,20(a2)
  188.  bra     ContS
  189. df1S:
  190.  btst.b  #4,d0
  191.  bne     df2S
  192.  move.b  #1,20(a2)
  193.  bra     ContS
  194. df2S:
  195.  btst.b  #5,d0
  196.  bne     df3S
  197.  move.b  #2,20(a2)
  198.  bra     ContS
  199. df3S:
  200.  btst.b  #6,d0
  201.  bne     EnditS
  202.  move.b  #3,20(a2)
  203. ContS:
  204.  move.b  #'R',26(a2)
  205.  move.w  28(a1),d0         ;d0 has command
  206.  andi.w  #$00ff,d0
  207.  cmpi.w  #2,d0
  208.  beq     TrackChangeS
  209.  cmpi.w  #10,d0
  210.  beq     TrackChangeS
  211.  cmpi.w  #16,d0
  212.  beq     TrackChangeS
  213.  move.b  #'W',26(a2)
  214.  cmpi.w  #3,d0
  215.  beq     TrackChangeS
  216.  cmpi.w  #11,d0
  217.  beq     TrackChangeS
  218.  cmpi.w  #17,d0
  219.  beq     TrackChangeS
  220.  bra     EnditS
  221.  
  222. TrackChangeS:
  223.  moveq   #0,d4 
  224.  move.l  #16,d2
  225.  move.l  44(a1),d1  ;sector offset
  226.  move.l  #11264,d3
  227.  divu    d3,d1     ;track
  228.  andi.l  #$0000ffff,d1
  229.  divu    #100,d1
  230.  addi.b  #48,d1
  231.  cmp.b   #'0',d1
  232.  bne     NZS1
  233.  move.b  #' ',d1
  234.  moveq   #1,d4
  235. NZS1:
  236.  move.b  d1,22(a2)
  237.  lsr.l   d2,d1
  238.  divu    #10,d1
  239.  addi.b  #48,d1
  240.  tst     d4
  241.  beq     NZS2
  242.  cmp.b   #'0',d1
  243.  bne     NZS2
  244.  move.b  #' ',d1
  245. NZS2:
  246.  move.b  d1,23(a2)
  247.  lsr.l   d2,d1
  248.  addi.b  #48,d1
  249.  move.b  d1,24(a2)
  250.  
  251.  move.l  ExecBase,a6
  252.  move.l  PortS(pc),a0
  253.  lea     MessageS(pc),a1
  254.  jsr     PutMsg(a6)
  255.  
  256. EnditS:
  257.  movem.l (a7)+,d0/d1/d2/d3/d4/a0/a1/a2/a3/a4/a6
  258.  move.l  SaveSendIo(pc),-(a7)
  259.  rts
  260.  
  261.  
  262. SaveSendIo: dc.l 0
  263. MessageS:   ds.b 20
  264.             dc.w 0
  265.             dc.b "000  ",0
  266. PortS:      dc.l 0
  267. TrackNameS: dc.b "trackdisk.device",0,0
  268. EndeSendIo:
  269.  
  270.  end
  271.