title M80 FEATURES
subttl Macros, conditional assembly & repeat blocks
.z80
;.sfcond


IF1
.PRINTX Prvi  prehod MACRO-80
PAGE <60>
ENDIF

CSEG
	ENTRY START
START: 
	ld hl,1234
	ld c,7
	call divl
	ret

; rutina deli HL register z C registrom, 
;rezultat je v B ostanek pa v H registru
divl: 	ld a,c		;preveri ali je mo`na prekora~itev (OV)
	dec a
	sub h
	ret c 		
	ld b,0		;nastavi kvocient na 0
dloop:	sla b		;pomakni rezultat v levo za en bit
	add hl,hl	;pomakni v levo tudi HL (divident)
	ld a,h		;ali je MSB dividenta ve~ji od delitelja
	cp c
	jr c, nosub	;~e je potem
	sub c		;od{tej od MSB dividenta delitelj 
	ld h,a
	inc b		;in pove~aj  rezultat za 1
nosub:	ld a,l		;ali smo `e vse zdelili
	cp 0

	jr nz, dloop	;ponavljaj dokler ni LSB ni~en
	ret



;podprogram mno`i BC in DE ter rezultat spravi v HL
mull:	ld hl,0000	;postavimo rezultat na 0
while:	ld a,d	       	
	or e
	ret z		;ce je de==0000 je mno`enje kon~ano
	sra d		;pomakni drugi mno`itelj (DE) en bit v desno
	rr e
	jr nc,noadd	;~e je bit, ki je bil porinjen ven 1 (CY=1)
	ld a,l		;potem pri{tej rezultatu prvi multiplikand

	add a,c
	ld l,a
	ld a,b
	adc a,h
	ld h,a
noadd:	sla c		;pomakni drugi multiplikand (BC) en bit v levo
	rl b		
	jr while	;ponavljaj, dokler ne bo prvi multiplikand iz~rpan





FLAG 	EQU 3

	IF FLAG GE 3
	ld a,b
	ENDIF

	IFT FLAG NE 5
	ld d,e
	ELSE
	ld l,a
	ENDIF


MOVW 	MACRO dest, sour
	  IFIDN <dest>,<HL>
	    IFIDN <sour>,<BC>
	ld h,b
	ld l,c
	      EXITM
	    ELSE
	      IFIDN <sour>,<DE>
	ld h,d
	ld l,e
		EXITM
	      ELSE
	        IF2 
		  ERROR Napacen izvor sour v MOVW
		  EXITM
		ENDIF
	      ENDIF
	    ENDIF
	  ENDIF
	  IFIDN <dest>,<DE>
	    IFIDN <sour>,<BC>
	ld d,b
	ld e,c
	      EXITM
	    ELSE
	      IFIDN <sour>,<HL>
	ld d,h
	ld e,l
	        EXITM
	      ELSE
	        IF2
	          ERROR Napacen izvor sour v MOVW
		  EXITM
		ENDIF
	      ENDIF
	    ENDIF
	  ENDIF
	  IFIDN <dest>,<BC>
	    IFIDN <sour>,<DE>
	ld b,d
	ld c,e
	      EXITM
	    ELSE
	      IFIDN <sour>,<HL>
	ld b,h
	ld c,l
		EXITM
	      ELSE
	        IF2
		  ERROR Napacen izvor sour v MOVW
		ENDIF
	      ENDIF
	    ENDIF
	  ENDIF
	ENDM

	MOVW HL,BC

	REPT 4
	RRA
	ENDM

	IRP x,<AF, BC, DE, HL>
	 push x
	ENDM


	IRPC x,<ABCDE>
	ld x,0
	ENDM

	END