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

