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