home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / dos / bdisk / stddef.inc < prev   
Encoding:
Text File  |  1987-12-04  |  2.7 KB  |  124 lines

  1. ;***************************************
  2. ; Standard definitions.
  3.  
  4.         IFNDEF _STDDEF_
  5.         _STDDEF_ = 1
  6.  
  7. FALSE   EQU 0           ;false value
  8. TRUE    EQU -1          ;true value
  9.  
  10. ;=======================================
  11. ; Check if argument is 8 bit register.
  12. ; If so, ?ISR8 is set to TRUE.
  13.  
  14. ?reg8   MACRO arg
  15.         ?isr8 = FALSE
  16.         IRP test, <ah, al, bh, bl, ch, cl, dh, dl>
  17.           IFIDNI <arg>, <test>
  18.             ?isr8 = TRUE
  19.             EXITM
  20.           ENDIF
  21.         ENDM
  22.         ENDM
  23.  
  24. ;=======================================
  25. ; Check if argument is 16 bit register.
  26. ; If so, ?ISR16 is set to TRUE.
  27.  
  28. ?reg16  MACRO arg
  29.         ?isr16 = FALSE
  30.         IRP test, <ax, bx, cx, dx, di, si, bp, cs, ds, es, ss>
  31.           IFIDNI <arg>, <test>
  32.             ?isr16  = TRUE
  33.             EXITM
  34.           ENDIF
  35.         ENDM
  36.         ENDM
  37.  
  38. ;=======================================
  39. ; Check if argument is immediate data.
  40. ; If so, ?ISI is set to true.
  41.  
  42. ?imed   MACRO arg
  43.         ?isi = FALSE
  44.         IFE (TYPE arg)
  45.           ?reg16 arg
  46.           IFE ?isr16
  47.             ?reg8 arg
  48.             IFE ?isr8
  49.               ?isi = TRUE
  50.             ENDIF
  51.           ENDIF
  52.         ENDIF
  53.         ENDM
  54.  
  55. ;=======================================
  56. ; Load any 16 bit argument to the stack.
  57. ; WARNING: destroys BP if argument is
  58. ; immediate data.
  59.  
  60. ldarg   MACRO arg
  61.         IF (TYPE arg) EQ 0
  62.           ?reg16 arg
  63.           IF ?isr16
  64.             push arg
  65.           ELSE
  66.             mov bp, arg
  67.             push bp
  68.           ENDIF
  69.         ELSE
  70.           push arg
  71.         ENDIF
  72.         ENDM
  73.  
  74. ;=======================================
  75. ; Load some number of 16 bit arguments
  76. ; to the stack.
  77.  
  78. ldargs  MACRO args
  79.         IRP arg, <args>
  80.           ldarg arg
  81.         ENDM
  82.         ENDM
  83.  
  84. ;=======================================
  85. ; Load a register.
  86.  
  87. ldreg   MACRO reg, val
  88.         IFNB <val>
  89.           IFDIFI <val>, <reg>
  90.             mov reg, val
  91.           ENDIF
  92.         ENDIF
  93.         ENDM
  94.  
  95. ;=======================================
  96. ; Load an address to DX or DS:DX.
  97.  
  98. ldadr   MACRO addr
  99.         IFNB <addr>
  100.           IF TYPE (addr) EQ 0
  101.             IFDIFI <addr>, <dx>
  102.               mov dx, addr
  103.             ENDIF
  104.           ELSE
  105.             IF TYPE (addr) EQ 1
  106.               mov dx, OFFSET addr
  107.             ELSE
  108.               IF TYPE (addr) EQ 2
  109.                 mov dx, addr
  110.               ELSE
  111.                 IF TYPE (addr) EQ 4
  112.                   lds dx, addr
  113.                 ELSE
  114.                   .ERR
  115.                   %OUT Incorrect address specification
  116.                 ENDIF
  117.               ENDIF
  118.             ENDIF
  119.           ENDIF
  120.         ENDIF
  121.         ENDM
  122.  
  123.         ENDIF
  124.