;z80 ;zx-spectrum ;assembler ; haiku (c) Gasman 2005 ; bezier.asm: bezier curve plotter bezlist bezloop ld a,(hl) inc a ret z ld de,ay+1 call copy3 ld de,ax+1 call copy3 push hl call bezier pop hl jr bezloop copy3 ldi ; copy data byte 1 to ax / ay inc de inc de ldi ; copy data byte 2 to bx / by inc de inc de ldi ; copy data byte 3 to cx / cy ret bezier ; init ax ld hl,150 ; ax ld de,150 ; bx ld bc,50 ; cx ld a,c ld (nx+2),a or a sbc hl,de or a sbc hl,de add hl,bc ld (mxcoeff+1),hl ex de,hl or a sbc hl,bc add hl,hl ld (nxcoeff+1),hl ay ld hl,150 ; ay ld de,50 ; by ld bc,50 ; cy ld a,c ld (ny+2),a or a sbc hl,de or a sbc hl,de add hl,bc ld (mycoeff+1),hl ex de,hl or a sbc hl,bc add hl,hl ld (nycoeff+1),hl ld hl,0 ld (mx+1),hl ld (my+1),hl ld b,0 plotbez push bc mx ld hl,0 mxcoeff ld de,0 add hl,de ld (mx+1),hl sla l rl h sbc a,a ; a = 255 if h > 127, 0 if not ld l,h ld h,a nx ld de,0 add hl,de nxcoeff ld de,0 add hl,de ld (nx+1),hl ld a,h srl a srl a srl a ld (xcol+1),a ld a,h and 0x07 ld l,a ld h, brush / 256 ld a,(hl) ld (bit_pattern_1 + 1),a inc h ld a,(hl) ld (bit_pattern_2 + 1),a my ld hl,0 mycoeff ld de,0 add hl,de ld (my+1),hl sla l rl h sbc a,a ; a = 255 if h > 127, 0 if not ld l,h ld h,a ny ld de,0 add hl,de nycoeff ld de,0 add hl,de ld (ny+1),hl ld l,h ld h,ylo / 256 ld b,2 put_dot ld e,(hl) inc h ld d,(hl) dec h inc l ld a,e xcol or 0 ld e,a ld a,(de) bit_pattern_1 or 0x00 ld (de),a inc e ld a,(de) bit_pattern_2 or 0x00 ld (de),a djnz put_dot bez_halt_ctr ld a,7 dec a and 0x07 ld (bez_halt_ctr + 1),a jr nz, no_bez_halt bez_halt_on halt no_bez_halt pop bc djnz plotbez ret haiku_kanji include "haiku2b.b2" db 255 gasuman include "gasuman.b2" db 255 boat include "junk.b2" db 255 geisha include "geisha.b2" db 255 ; ytable equ 0xc500 ; ytable was: hi byte followed by lo byte align 0x0100 brush db 0xf0, 0x78, 0x3c, 0x1e, 0x0f, 0x07, 0x03, 0x01 align 0x0100 db 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0