// absolutely no ideas lol // but here we go :D // // greets: nyuk.sq.pator.bfox.enfys.alexwinston.n1k-o.rook // robat.a64.kuvo.totettmatt.ps (you def would like that :D). // shatalspine.dart.adamych.frongy.natt.nihirash (we miss you!) // and all at multimatograf2024 ! // --artemka o2.o5.2o25 at multimatograf 2025 // and of course this is powered by the almighty: /* | | o ,---., .. .|__/ ,---.,--.--.,---.|--- .,---. | || || || \ | || | |,---|| || ` '`---|`---'` ``---'` ' '`---^`---'``---' `---' :.by..stardust..2025.: */ ; default org = $6000 (any address within $6000..$ff00 is fine) ; esc: toggle editor | f1: options | f5: recompile | f12: reset sintab equ 0x8000 org $6000 ld ix, sintab call gen_sin // HOLE 100500 // no grtz to ded // more grtz to diver! // SCREW BASIC VARIABLES! ld sp, 0xF000 ld bc, 0 ei fl: halt ld de, 0x5800 ld iyl, 32 ld hl, sintab yl: push bc ld a, iyl and c and b jp nz, .nz xor a sub c ld c, a ld a, 1 out (0xFE), a jp .aoa .nz: push bc sra b sra b sra b sra b sra b and b out (0xFE), a pop bc .aoa: i = 0 dup 32 ld a, c ld l, a ld a, [hl] and iyl xor b and (0 << 0) | (7 << 3) //and (7 << 3) ld [de], a inc bc inc de i = i+1 edup pop bc dec iyl jp nz, yl inc b inc c bit 7, b jp z, aaaa ; barrier push bc exx exa pop bc dup 11 call rnd16 ld l, 0 call hl_to_scr ld a, 0 dup 32 ld [hl], a out (0xFE), a inc l edup edup exx exa jp fl aaaa: ; barrier push bc exx exa pop bc dup 7 xs = 1 call rnd16 ld l, 0 call hl_to_scr dup 32 ld a, [hl] out (0xFE), a xor xs xor b ld [hl], a inc l xs = (xs << 1) ^ (xs >> 1) ^ (xs >> 1) edup edup exx exa jp fl ;---------------------------------------- ; 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 and #f8 add 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 #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 .3 rlca xor h and #c7 xor h .2 rlca ld l, a ld a, h and #c0 inc a .3 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 .3 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 e ld e, a ld a, (de) xor (hl) 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 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