;z80 ;zx-spectrum ;assembler ; haiku (c) Gasman 2005 ; ribbon.asm: generate ribbon bitmap ld hl,sine rib_rowlp1 push hl ld a,(hl) ld e,l srl a srl a ; divide by 4 to scale sinewave ld d,a srl d srl d ; divide by 8 to get address of pixel srl d and 7 ; get bit of pixel ld l,a ld h,screenbits2 / 0x100 ld a,(hl) ld hl,ribbon add hl,de or (hl) ld (hl),a pop hl inc l jr nz,rib_rowlp1 ; repeat at half amplitude rib_rowlp2 push hl ld a,(hl) ld e,l add a,64 ; so it will be centred after we scale by 8 srl a srl a ; divide by 8 to scale sinewave srl a ld d,a srl d srl d ; divide by 8 to get address of pixel srl d and 7 ; get bit of pixel ld l,a ld h,screenbits / 0x100 ld a,(hl) ld hl,ribbon add hl,de or (hl) ld (hl),a pop hl inc l jr nz,rib_rowlp2 ; repeat inverted ld hl,sine rib_rowlp3 push hl ld a,0x7f sub (hl) ld e,l srl a srl a ; divide by 4 to scale sinewave ld d,a srl d srl d ; divide by 8 to get address of pixel srl d and 7 ; get bit of pixel ld l,a ld h,screenbits2 / 0x100 ld a,(hl) ld hl,ribbon add hl,de or (hl) ld (hl),a pop hl inc l jr nz,rib_rowlp3 rib_rowlp4 push hl ld a,0x7f sub (hl) ld e,l add a,64 ; so it will be centred after we scale by 8 srl a srl a ; divide by 8 to scale sinewave srl a ld d,a srl d srl d ; divide by 8 to get address of pixel srl d and 7 ; get bit of pixel ld l,a ld h,screenbits / 0x100 ld a,(hl) ld hl,ribbon add hl,de or (hl) ld (hl),a pop hl inc l jr nz,rib_rowlp4