home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / system / copymemquicker / source.lha / source / CopyMemQuicker.asm < prev    next >
Assembly Source File  |  1992-02-11  |  2KB  |  115 lines

  1.     nolist
  2. **********************************************************************
  3. *             CopyMemQuicker 2.2 - (C) 1991, 1992 Arthur Hagen       *
  4. *     Parts of code: (C) 1985-1991 Commodore Business Machines Ltd.  *
  5. *                    Posted to the Public Domain                     *
  6. **********************************************************************
  7.  
  8.     include    'exec/execbase.i'
  9.     include    'exec/memory.i'
  10.     public    _QuickMem
  11.     list
  12. _QuickMem
  13.     movea.l    (4).w,a6            ; ExecBase
  14.     lea    dosname(pc),a1
  15.     jsr    _LVOOldOpenLibrary#(a6)        ; Any version will do
  16.     movea.l    d0,a5
  17.     exg.l    a5,a6
  18.     jsr    _LVOOutput#(a6)
  19.     exg.l    a5,a6
  20.     move.l    d0,d5
  21.     moveq    #title_end-title,d3
  22.     lea    title(pc),a0
  23.     bsr.s    wrt
  24.     movea.l    _LVOCopyMem#+2(a6),a3
  25.     cmpi.l    #'*Art',-(a3)
  26.     beq.s    isquicker
  27.     moveq    #0,d4
  28.     moveq    #0,d6
  29.     moveq    #0,d7
  30.     move.b    AttnFlags+1(a6),d0
  31.     btst    #AFB_68020,d0
  32.     bne.s    has020
  33.     btst    #AFB_68010,d0
  34.     bne.s    has010
  35.     move.w    #CopyLen00#,d4
  36.     move.w    #Quicker00#,d6
  37.     move.w    #Quickest00#,d7
  38.     lea    Start00#(pc),a2
  39.     bra.s    allocit
  40.  
  41. has010    move.w    #CopyLen10#,d4
  42.     move.w    #Quicker10#,d6
  43.     move.w    #Quickest10#,d7
  44.     lea    Start10#(pc),a2
  45.     bra.s    allocit
  46.  
  47. has020    move.w    #CopyLen20#,d4
  48.     move.w    #Quicker20#,d6
  49.     move.w    #Quickest20#,d7
  50.     lea    Start20#(pc),a2
  51. allocit    move.l    d4,d0
  52.     addq.w    #6,d0
  53.     addq.w    #6,d0
  54.     moveq    #MEMF_PUBLIC,d1
  55.     jsr    _LVOAllocMem#(a6)
  56.     tst.l    d0
  57.     beq.s    nomem
  58.     move.l    d0,a3
  59.     lea    12(a3),a4
  60.     movea.l    a2,a0
  61.     movea.l    a4,a1
  62.     move.l    d4,d0
  63.     bsr.s    Start00
  64.     move.l    d7,d0
  65.     add.l    a4,d0
  66.     bsr.s    setcmq
  67.     move.l    d0,(a3)+
  68.     move.l    d6,d0
  69.     add.l    a4,d0
  70.     bsr.s    setcm
  71.     move.l    d0,(a3)+
  72.     move.l    #'*Art',(a3)
  73. quit    movea.l    a5,a1
  74.     jmp    _LVOCloseLibrary#(a6)    ; faster than jsr + rts
  75.  
  76. nomem    moveq    #memerr_end-memerr,d3
  77.     lea    memerr(pc),a0
  78.     pea    quit(pc)        ; faster than 'bsr.s wrt' + 'bra.s quit'
  79. wrt    move.l    a0,d2
  80.     move.l    d5,d1
  81.     exg.l    a5,a6
  82.     jsr    _LVOWrite#(a6)
  83.     exg.l    a5,a6
  84.     rts
  85.  
  86. isquicker
  87.     moveq    #already_end-already,d3
  88.     lea    already(pc),a0
  89.     bsr.s    wrt
  90.     move.l    -(a3),d0
  91.     bsr.s    setcm
  92.     move.l    -(a3),d0
  93.     pea    quit(pc)    ; faster than 'bsr.s setcmq' + 'bra.s quit'
  94.  
  95. setcmq    lea    (_LVOCopyMemQuick#).w,a0
  96.     bra.s    setit
  97.  
  98. setcm    lea    (_LVOCopyMem#).w,a0
  99. setit    movea.l    a6,a1
  100.     jmp    _LVOSetFunction#(a6)
  101.  
  102. ************************************************************
  103.  
  104. version    dc.b    '$VER: '
  105. title    dc.b    'CopyMemQuicker 2.2 (11 Feb 1992)',$0A,$0D
  106.     dc.b    'Copyright ',$A9,' 1992 Arthur Hagen.',$0A
  107. title_end
  108. already    dc.b    'Restoring vectors.',$0A
  109. already_end
  110. memerr    dc.b    'No memory!',$0A
  111. memerr_end
  112. dosname    dc.b    'dos.library',0
  113.     even
  114.  
  115.