; TmK^deMarche org 0x8000 ld hl,#c000: ld de,#c001: ld bc,16384-1: ld (hl),l: ldir ld hl,buff4: ld d,#c0+22 ld c,20 L8 ld b,20: ld e,256-10 L7 ld a,(hl): ld (de),a: inc hl: inc e: djnz,L7 inc d:dec c: jr nz,L8 ld hl,#4000 ld a,%01010101 ld b,24 L1 ld (hl),a inc l jr nz,L1 xor #ff dec l inc hl djnz L1 loop ld ix,buff ld bc,768 L2 call rnd16 ld a,l and 63 ld (ix),a inc ix dec bc ld a,b or c jr nz,L2 ld ly,4 L4 ld ix,buff: ld de,buff2: ld bc,768 L3 ld a,(ix): add a,(ix+1): add a,(ix+32): add a,(ix-1) srl a: srl a: ld (de),a: inc de: inc ix dec bc: ld a,b:or c: jr nz,L3 ld hl,buff2: ld de,buff: ld bc,768: ldir dec ly: jr nz,L4 ld ix,buff: ld hl,buff3: ld bc,768 L5 ld a,(ix): sub (ix+1): ld (hl),a: inc hl ld a,(ix): sub (ix+32): ld (hl),a: inc hl: inc ix dec bc: ld a,b: or c: jr nz,L5 ld ix,stbl: call gen_sin loop2 ei halt exx ld b,pall/256 ld de,buff3 ld lx,256-16 ddx equ $-1 ld hx,0 ddy equ $-1 ld ly,3 exx ld c,24 ld b,32 ld hl,#5800 LL1 exx ld a,(de): inc de add a,lx: inc lx ld l,a ld a,(de): inc de add a,hx or #c0 ld h,a ld c,(hl) ld b,pall/256 ld a,(bc) exx ld (hl),a: inc hl: djnz LL1 ld b,32 ld a,(ddx): ld lx,a inc hx dec c jr nz,LL1 ld a,(ddy): inc a: and 63: ld (ddy),a jr loop2 align 256 stbl ds 256,0 pall db 0,1,65,8*1+1+64,3*8+1+64,3*8+3+64,6*8+3+64,6*8+6+64,6*8+7+64,7*8+7+64,7*8+7+64,7*8+7+64 buff ds 768,0 buff2 ds 768,0 buff3 ds 1536,0 buff4 db 00,00,00,00,00,00,00,01,01,01,01,01,01,00,00,00,00,00,00,00 db 00,00,00,00,01,01,01,02,02,02,02,02,02,01,01,01,00,00,00,00 db 00,00,00,01,02,02,02,03,03,03,03,03,03,02,02,02,01,00,00,00 db 00,00,01,02,03,03,03,04,04,04,04,04,04,03,03,03,02,01,00,00 db 00,01,02,03,03,04,04,05,05,05,05,05,05,04,04,03,03,02,01,00 db 00,01,02,03,04,04,05,06,06,06,06,06,05,05,04,04,03,02,01,00 db 00,01,02,03,04,05,06,07,07,07,07,07,06,05,05,04,03,02,01,00 db 01,02,03,04,05,06,07,07,08,08,08,08,07,07,06,04,04,03,02,01 db 01,02,03,04,05,06,07,08,09,09,09,09,08,07,06,05,04,03,02,01 db 01,02,03,04,05,06,07,08,09,10,10,09,08,07,06,05,04,03,02,01 db 01,02,03,04,05,06,07,08,09,10,10,09,08,07,06,05,04,03,02,01 db 01,02,03,04,05,06,07,08,09,09,09,09,08,07,06,05,04,03,02,01 db 01,02,03,04,05,06,07,07,08,08,08,08,07,07,06,04,04,03,02,01 db 00,01,02,03,04,05,06,07,07,07,07,07,06,05,05,04,03,02,01,00 db 00,01,02,03,04,04,05,06,06,06,06,06,05,05,04,04,03,02,01,00 db 00,01,02,03,03,04,04,05,05,05,05,05,05,04,04,03,03,02,01,00 db 00,00,01,02,03,03,03,04,04,04,04,04,04,03,03,03,02,01,00,00 db 00,00,00,01,02,02,02,03,03,03,03,03,03,02,02,02,01,00,00,00 db 00,00,00,00,01,01,01,02,02,02,02,02,02,01,01,01,00,00,00,00 db 00,00,00,00,00,00,00,01,01,01,01,01,01,00,00,00,00,00,00,00 ;---------------------------------------- ; Snippets: ; down_hl ; up_hl ; hl_to_scr ; scr_to_attrs ; set_point ; rnd16 ; gen_sin ;---------------------------------------- ;---------------------------------------- ; Next screen line address in HL ;---------------------------------------- down_hl inc h ld a, h and #07 ret nz ld a, l sub #e0 ld l, a sbc a, a and #f8 add a, h ld h, a ret ;---------------------------------------- ; Previous screen line address in HL ;---------------------------------------- up_hl dec h ld a, h cpl and #07 ret nz ld a, l sub #20 ld l, a ret c ld a, h add a, #08 ld h, a ret ;---------------------------------------- ; in: L = x [0..255] ; H = y [0..191] ; out: HL = addr in screen [4000..57FF] ; C = pixel number [0..7] ;---------------------------------------- hl_to_scr ld c, l ld a, l rlca : rlca : rlca xor h and #c7 xor h rlca : rlca ld l, a ld a, h and #c0 inc a rra : rra : rra xor h and #f8 xor h ld h, a ld a, c and 7 ret ;---------------------------------------- ; in: HL = addr in screen [4000..57FF] ; out: HL = addr in attrs [5800..5AFF] ;---------------------------------------- scr_to_attrs ld a, h rrca : rrca : rrca and #03 or #58 ld h, a ret ;---------------------------------------- ; in: L = x [0..255] ; H = y [0..191] ;---------------------------------------- set_point call hl_to_scr ld de, pixel_tbl add a, e ld e, a ld a, (de) ld (hl), a ret align 8 pixel_tbl db #80,#40,#20,#10,#08,#04,#02,#01 ;---------------------------------------- ; in: none ; out: HL = random 16bit value ;---------------------------------------- rnd16 .sd equ $+1 ld de, 0 ld a, d ld h, e ld l, 253 or a sbc hl, de sbc a, 0 sbc hl, de ld d, 0 sbc a, d ld e, a sbc hl, de jr nc, .st inc hl .st ld (.sd), hl ret ;---------------------------------------- ; in: IX = addr of 256b buffer ; out: generated sin table ;---------------------------------------- gen_sin ld de, #7fbc ld hl, #ff7f .g0 ld a, d xor #80 ; uncomment for unsigned ld (ix), a xor #80 ; uncomment for unsigned rla sbc a, a ld b, a ld c, d adc hl, bc rr c rrca rr c add hl, bc ld b, h ld a, l ex de, hl sra b : rra sra b : rra sra b : rra ld c, a ;or a sbc hl, bc ex de, hl inc ixl jr nz, .g0 ret