- push hl ;11\r
- push ix ;15\r
- pop hl ;10\r
- ld a,(ix+o.in_idx) ;19\r
- add a,l ;4\r
- ld l,a ;4\r
- jr nc,bp.1 ;12/7\r
- inc l ;4\r
- ld (hl),c ;7\r
- ld a,(ix+o.in_idx) ;19\r
- inc a ;4\r
- and (ix+o.mask) ;19\r
-bp.wait:\r
- cp (ix+o.out_idx) ;19\r
- jr z,bp.wait ;12/7\r
- ld (ix+o.in_idx),a ;19\r
-\r
- out (AVRINT6),a ;11\r
- ld a,c ;4\r
- pop hl ;10\r
- pop ix ;14\r
- ret ;10 |\r
-\r
- endif\r
-\r
-;--------------------------------------------------------------\r
+ push ix ;\r
+ pop hl ; get buffer start address\r
+\r
+ ld a,c ;\r
+ ld c,(ix+o.in_idx) ; add input index\r
+ ld b,0 ;\r
+ add hl,bc ;\r
+ ld (hl),a ; one place is allways free\r
+ ld b,a ;\r
+\r
+ ld a,c ; bump input index\r
+ inc a ;\r
+ and (ix+o.mask) ;\r
+bp.wait: ; do\r
+ cp (ix+o.out_idx) ;\r
+ jr z,bp.wait ; while new input idx == ouput idx\r
+ ld (ix+o.in_idx),a ;\r
+\r
+ out (AVRINT6),a ; tell monitor\r
+ ld a,b ;\r
+ pop ix ;\r
+ ret ;\r