Source file: /~heha/basteln/PC/oszi/adc2usb/adc2usb.zip/MAKROS.I51

;**********************
;** Ntzliche Makros **
;**********************
NEXT	equ	1	;; diese Adresse wird man wohl nie mit XDATA wollen
PREV	equ	-1

_loaddptr_ MACRO addr	;; Wegen Bug in ASEM51 diese Bocksprnge!
 if addr EQ NEXT
	inc	dptr
 else
	mov	dptr,#addr
 endif
ENDM

_loadkonst_ MACRO konst
 if konst
	mov	a,#konst
 else
	clr	a
 endif
ENDM

LOAD MACRO addr		;; Laden von XDATA (feste Adresse) via DataPointer
 ifnb <addr>
  _loaddptr_ addr
 endif
	movx	a,@dptr
ENDM

STORE MACRO addr,konst	;; Speichern nach XDATA (feste Adr.) via DataPointer
 ifnb <konst>
  _loadkonst_ konst
 endif
 ifnb <addr>
  _loaddptr_ addr
 endif
	movx	@dptr,a
ENDM

JMPTBL	MACRO tbl	;; Sprung mit Tabelle, A=Index
	rl	a
	mov	dptr,#tbl
	jmp	@a+dptr
ENDM

DWI MACRO w		;; "dw" in Intel-Byte-Anordnung
	db	LOW(w)
	db	HIGH(w)
ENDM

DBU MACRO c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl
;;Unicode-String definieren, ohne Hochkomma-Orgien
 ifnb <c0>
	db	'&c0',0
	DBU	c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl
 endif
ENDM

_loadreg_ MACRO reg,addr
 if addr EQ NEXT
	inc	reg
 elseif addr EQ PREV
	dec	reg
 else
	mov	reg,#LOW(addr)
 endif
ENDM

LD MACRO addr		;; XDATA-Zugriff krzer ber MPAGE:R0
 ifnb <addr>
  _loadreg_ r0,addr
 endif
	movx	a,@r0
ENDM

ST MACRO addr,konst	;; XDATA-Zugriff krzer ber MPAGE:R0
 ifnb <konst>
  _loadkonst_ konst
 endif
 ifnb <addr>
  _loadreg_ r0,addr
 endif
	movx	@r0,a
ENDM

ALIGN MACRO ali
 ORG ($+ali-1)/ali*ali
ENDM

SYNCDELAY MACRO
	inc	dptr	;; 1 Byte fr 3 Takte
ENDM

CJE MACRO x,y,z		;; der "fehlende" Befehl
	cjne	x,y,$+5
	ajmp	z
ENDM
Detected encoding: UTF-80