pouët.net

Traumaphore by Trope [web]

............................................................
THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE
CHARACTER OF THIS POINT IS THEREFORE ANOTHER  METHOD FOR THE
LETTERS THAT THE TIME  OF  WHO  EVER TOLD THE PROBLEM FOR AN
UNEXPECTED . . .

Traumaphore is a 64-byte intro for the Commodore 64.
By nom de nom of TROPE, released at Demosplash 2017.

Do not view the intro if you have photosensitive epilepsy or
are triggered by BASIC error messages.

The intro generates text using a Markov chain model (bigram,
per-character) with the page of BASIC error messages as data.

This underlying text scrolls up, appearing in four different
graphics modes. It is used to set sound, background color, &
border color registers for a variety of effects on different
scales, all in a well-behaved program. A BASIC bootloader is
included, and the intro breaks properly when STOP is pressed.

02 08 01 00 00 9E 32 30
36 31 00 00 00 C8 B9 9E
A1 85 FB 09 80 20 D2 FF
09 15 29 1F 8D 18 D0 B9
9F A1 85 FC 99 DE D3 AC
12 D0 C8 20 E1 FF F0 D3
B9 9E A1 C5 FB D0 ED B9
9F A1 C5 FC D0 E6 50 CD

02 08 /Load at $802, $801-$802 just needs to be non-null
01 00 00 9E 32 30 36 31 00 00 00 /BASIC bootloader
C8 B9 9E A1 85 FB 09 80 20 D2 FF 09 15 29 1F 8D 18 D0 B9 9F A1 85 FC
/character:
    iny            ; move 1 ahead through the source text
    lda $a19e, y   ; get character #1 from BASIC error message page
    sta $fb        ; store on zero page
    ora #%10000000 ; force to uppercase/graphics
    jsr $ffd2      ; print what's in the accumulator

    ora #%00010101 ; turn all the bits in $15 on
    and #%00011111 ; turn all except in $1f off; four possible modes
    sta $d018      ; VIC-II control register

    lda $a19f, y   ; get character #2 from BASIC error message page
    sta $fc        ; store on zero page & fall through to grab

                   ; now $fb and $fc have the characters we seek

99 DE D3 AC 12 D0 C8 20 E1 FF F0 D3 B9 9E A1 C5 FB D0 ED B9 9F A1 C5
FC D0 E6 50 CD
/grab:
    sta $d3de, y   ; sound, bg, border color - chopper sound
    ldy $d012      ; get noisy value, current raster line
    iny            ; skip ahead 1, alter timing
    jsr $ffe1      ; check STOP
    beq zero       ; if STOP pressed, brk
    lda $a19e, y   ; get new char #1 from BASIC errors
    cmp 251        ; compare to zero page 251
    bne grab       ; if no match, grab a character again
    lda $a19f, y   ; if a match, get new char #2 from BASIC errors
    cmp 252        ; compare to zero page 252
    bne grab       ; if no match, grab (starting with 1st char) again
    bvc character

Rather than build a table of conditional probabilities, this
technique follows the one described by Claude Shannon in his
A Mathematical Theory of Communication (1948): starting with
some token (he used words, we use letters), select a pair of
them and look ahead to the next place where token 2 is found.

The current version is not highly legible while running, but
a short version that can be read aloud is also in the works.

-nom de nom, 2017-11-10