org 0x8000 ; greetings from gasman! ; have a good jam y'alls :-) ld hl,0x4000 ld de,0x4001 ld bc,0x00ff ld (hl),0x55 ldir ld hl,0x4000 ld de,0x4200 ld bc,0x0600 ldir ld hl,0x4000 ld de,0x4800 ld bc,0x1000 ldir ld ix,0x9000 call gen_sin ld hl,0x9200 ld de,0x9201 ld (hl),0x03 ld bc,0x02ff ldir ld hl,0xa000 ld de,0xa001 ld (hl),0x00 ld bc,8*0x0300 dec bc ldir loop ld hl,0x5800 ld b,0 ysin ld hl,0x9000 inc l inc l ld (ysin+1),hl ld a,(hl) and 0xf0 srl a ld l,a ld h,0 add hl,hl add hl,hl bob2 ld de,0xa000 add hl,de ex de,hl xsin ld hl,0x9000 inc l ld a,l and 0x07 jr nz,noskipsin inc l noskipsin ld (xsin+1),hl ld a,(hl) srl a srl a srl a ld l,a ld h,0 add hl,de call bock colorsin ld hl,0x9000 inc l inc l inc l ld (colorsin+1),hl ld a,(hl) srl a srl a ld hl,0x94e0 ld b,0x20 colorlp and 0x07 ld (hl),a inc l inc a djnz colorlp ld hl,0x9220 ld de,0x9200 ld bc,0x2e0 ldir halt bob1 ld hl,0xa000 ld ix,0x9200 ld de,0x5800 ld bc,0x0300 complp ld a,(hl) or a jr nz,nobg ld a,(ix) nobg ld (de),a inc hl inc ix inc de dec bc ld a,b or c jr nz,complp bobframe ld a,0 inc a and 0x07 ld (bobframe+1),a ld b,a add a,a add a,b add a,0xa0 ld h,a ld l,0 ld (bob1+1),hl ld (bob2+1),hl jp loop bock ld bc,32 add hl,bc add hl,bc bockcount ld a,0 inc a ld (bockcount+1),a bockcol ld a,0x50 jr nz,noincbock add a,8 and 0x38 ld (bockcol+1),a noincbock ld (hl),0x24 add hl,bc ld (hl),a dec c add hl,bc ld (hl),a inc l ld (hl),a inc l ld (hl),a dec c add hl,bc ld (hl),a inc l ld (hl),0x17 inc l ld (hl),a add hl,bc ld (hl),a inc l ld (hl),a inc l ld (hl),a ret ;---------------------------------------- ; 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