file_id.diz
Vegan Rasteurant
By Promana 29-30 de outubro 2026.
128b RGB rasters under ice, with sound (kudo to BSC).
Nothing earth-shattering, just a small contribution to be with you in spirit.
Jacques Barre: What? Another self-indulgent intro coded in 11 hours instead of a real production? We can see how much you value them!
Random parameters. Some runs will turn out better than others.
Yes this text is bigger than the demo.
Rien de transcendant, juste une petite contribution pour etre avec vous en esprit.
Jacques Barre : Quoi ? Encore une intro onaniste codee en 11 heures plutot qu'une vraie prod ? On voit l'estime que tu leur portes !
Parametres aleatoires. Certaines executions seront plus heureuses que d'autres.
Fuck AI, Fuck CrossDev and Love your neighbours.
Oui ce texte est plus gros que la demo.
Greetings to Odiesoft (we miss you) and BNDCPC (Benediction Coding Party Community)
; Vegan Rasteurant (Color Phreaking Cylcing)
; Promana 29-30 de outubro 2026
; Based on rgbhack.o
; Dev mode: SPACE to change params, ESC to exit
; -- Params raster size
stepB = 0 ; 0 = random
stepR = 9
stepG = 6
; vG: Randomness for stepG
; vF: &7f Optim
; vE: &84 Random speed
; beau bug
; vD: &7f Optim rast_pnt
; vC: &82 no more vsync wait, add sound
; update compenent in penlp
; vB: &7e Random map (no more sine needed)
; vA: &108 Update cols inline (for real)
; v9: Restore from 4b.
; Mode 1: only update 4 colors.
; v8: TODO: Update cols inline
; v7: &f6 Simpler height map, but pixel-precise instead of byte
; -> much less satisfying
; v6: &116 Use sinebaze
; v5: &12b Rasters cover all the screen
; Nice colors but i don't know why!
; v4b: Experiment raster without sine
; v4: Remove jerkiness but using rolling buffer for vga_cols
; v3: Proper height map (height -} pen 0, 16)
; v2: Mode 1: pretty bug
; v1: Add map. Ugly
; v0: just rasters
dev = 1
IF dev
colors# = 139 ; size raster table (vga_cols)
ELSE
colors# = 140
END
ORG &9080
ENT start
IF dev
IMPORT ":lib/testkey.o"
END
MACRO MAKE_NOISE
; Pseudo random.
; In BC = C000 (will we only set B to save 1 byte)
; HL = seed (whatever)
.fillscreen
xor h:ld (bc),a:inc bc
add hl,bc
ld a,c:or b
jr nz,.fillscreen
ENDM
MACRO BORDER col
IF dev
push bc
ld bc,&7F10:out (c),c
ld c,col:out (c),c
pop bc
END
ENDM
start
IF dev
ld a,1:call &BC0E
END
restart_
; cut firmware: we use EXX, and no more synchro
di
ld bc,&F409:out (c),c
IF stepB == 0
ld a,r ; :or b
ld (params),a
END
ld d,c ; workzone for colors, expected to be 00
;rast_pnt ld d,vga_cols / &0100
ld bc,&F6C0:out (c),c:out (c),0
ld b,c
MAKE_NOISE()
frame
BORDER(&58)
; --- update indices
timer_6128 = &B8B4 ; timer for randomness
ld hl,timer_6128
ld bc,params
.update ld a,(hl):or c ; speed
inc l
add (hl):ld (hl),a:inc l
inc c:ld (bc),a:3 ** inc c
jr nz,.update
push de
ex de,hl
; --- display rasters amd update components
ld e,colors#
.rastlp
exx
ld hl,params
ld c,&54
exx
ld bc,&7F03
.penlp
out (c),c:outi
exx
ld a,(hl):inc l ; step
add (hl):ld (hl),a:inc l
cp h:jr nc,.lvl2 ; &90
cp c:jr c,.lvl0 ; between &40/&5f
;lvl1
ld a,(hl):inc l:jr .shift
.lvl0
xor a:inc l:jr .shift
.lvl2 inc l:ld a,(hl)
.shift inc l
add c:ld c,a
exx
dec c
jr nz,.penlp
ld (hl),a
ld bc,&768D:out (c),c
out (c),0:dec b:outi ; PPI port A as well
res 3,h
dec e
jr nz,.rastlp
BORDER(&54)
pop de
inc de:res 3,d
IF dev
ld a,&45:call testkey ; Space
rla:jr nc,restart
ld a,&48:call testkey ; ESC
ld bc,&F409:out (c),c
ld bc,&F6C0:out (c),c:out (c),0
bit 2,a
jp nz,frame
ret
restart
; simulate timer update
ld hl,(timer_6128)
inc hl
ld (timer_6128),hl
jp restart_
ELSE
jr frame
END
IF dev
ORG &91F4
END
params
; Step, pos, shift component +1, shift component +2
BYTE stepB,0,-4,1
BYTE stepR,0,8,-8
BYTE stepG,0,2,-2
IF $ AND &FF
!! error align
END