https://zxaaa.ru/view_demos.php?vers=23

Код: Выделить всё
/ 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