home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 6 / Sonderheft_6-96.iso / pd / libraries / patchlibv4 / examples / snf / asmmacros.i next >
Text File  |  1996-11-03  |  3KB  |  121 lines

  1.           IFND ASMMACROS_I
  2. ASMMACROS_I  SET  1
  3.  
  4. ;***************************************
  5. ;**** Usefull Assembler Macros V1.7 ****
  6. ;**** (C) 1992-95 Stefan Fuchs      ****
  7. ;***************************************
  8.  
  9.     IFND EXEC_TYPES_I
  10.     INCLUDE "exec/types.i"
  11.     ENDC
  12.  
  13. TRUE equ 1
  14.  
  15. ;* Memory Attributes:
  16. PUBLIC    = $1
  17. CHIP    = $2
  18. FAST    = $4        ;Don't use
  19. CLEAR    = $10000
  20. LARGEST    = $20000
  21.  
  22. ;--------------------------------------------------------------
  23. ;--------- CALL jump to Library function (and set LibraryBase)
  24. ;--------------------------------------------------------------
  25.  
  26. CALL    MACRO
  27.     IFGT    NARG-2
  28.         FAIL "Too many arguments for call makro"
  29.     ENDIF
  30.     IFEQ NARG-2
  31.     move.l    \2,a6
  32.     ENDIF
  33.     jsr    \1(a6)
  34.     ENDM
  35.  
  36. ;--------------------------------------------------------------
  37. ;-------- BSREQ branch to subroutine if equal
  38. ;-------- BSREQ Subroutine[,Label after bsr]
  39. ;--------------------------------------------------------------
  40. BSREQ    MACRO
  41.     IFGT    NARG-2
  42.         FAIL "Too many arguments for BSREQ makro"
  43.     ENDIF
  44.     bne BSREQ\@
  45.     bsr \1
  46.     IFEQ NARG-2
  47.     bra \2
  48.     ENDIF
  49. BSREQ\@
  50.     ENDM
  51. ;--------------------------------------------------------------
  52. ;-------- BSRNE branch to subroutine if not equal
  53. ;-------- BSRNE Subroutine[,Label after bsr]
  54. ;--------------------------------------------------------------
  55. BSRNE    MACRO
  56.     IFGT    NARG-2
  57.         FAIL "Too many arguments for BSRNE makro"
  58.     ENDIF
  59.     beq BSRNE\@
  60.     bsr \1
  61.     IFEQ NARG-2
  62.     bra \2
  63.     ENDIF
  64. BSRNE\@
  65.     ENDM
  66.  
  67. ;--------------------------------------------------------------
  68. ;-------- SKIPLISTHEADER  Returns a pointer to first node in a list
  69. ;-------- SKIPLISTHEADER ax,NOListErrorLabel,EmptyListErrorLabel
  70. ;---------ax includes pointer to ListHeader
  71. ;--------------------------------------------------------------
  72. SKIPLISTHEADER    MACRO
  73.     IFGT    NARG-3
  74.         FAIL "Too many arguments for SKIPLISTHEADER makro"
  75.     ENDIF
  76.     tst.l (\1)
  77.     beq \2
  78.     move.l (\1),\1
  79.     tst.l (\1)
  80.     beq \3
  81.     ENDM
  82.  
  83. ;--------------------------------------------------------------
  84. ;-------- OPENLIB open a library and test returncode
  85. ;-------- OPENLIB LibNameLabel,Version[,Label to branch on Error]
  86. ;-------- Destroys d0-d1/a0-a1/a6
  87. ;--------------------------------------------------------------
  88. OPENLIB    MACRO
  89.     IFGT    NARG-3
  90.         FAIL "Too many arguments for OPENLIB makro"
  91.     ENDIF
  92.     move.l #\1,a1
  93.     moveq.l #\2,d0
  94.     move.l 4.w,a6
  95.     jsr -552(a6)
  96.     IFEQ NARG-3
  97.     tst.l d0
  98.     beq \3
  99.     ENDIF
  100.     ENDM
  101.  
  102. ;--------------------------------------------------------------
  103. ;-------- CLOSELIB test librarybase on non-null and close a library
  104. ;-------- CLOSELIB LibBaseLabel
  105. ;-------- Destroys d0-d1/a0-a1/a6
  106. ;--------------------------------------------------------------
  107. CLOSELIB    MACRO
  108.     IFGT    NARG-1
  109.         FAIL "Too many arguments for CLOSELIB makro"
  110.     ENDIF
  111.     cmp.l #0,\1
  112.     beq CLOSELIB\@
  113.     move.l \1,a1
  114.     move.l 4.w,a6
  115.     jsr -414(a6)
  116. CLOSELIB\@
  117.     ENDM
  118.  
  119.  
  120.     ENDC
  121.