more slides
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
; -----------------------------------------------------------
|
||||
; main.asm - C64 demo: giant TTG logo + credits scroller
|
||||
; effects: color wash on the logo, smooth pixel scroll,
|
||||
; pulsing title - all timed by polling the raster beam
|
||||
; main.asm - C64 demo: slide show (6 seconds per slide)
|
||||
; slide 1: giant TTG logo + credits scroller
|
||||
; slide 2: OUR FIRST GAME - Definitely not an Impostor
|
||||
; slide 3: OUR SECOND GAME IS COMING (full-screen raster bars)
|
||||
; slide 4: CONTACT
|
||||
; slide 5: the assembly confession
|
||||
; slides cross-fade through black between switches
|
||||
; all timed by polling the raster beam
|
||||
; Build: acme -f cbm -o main.prg main.asm
|
||||
; -----------------------------------------------------------
|
||||
|
||||
@@ -21,6 +26,7 @@
|
||||
* = $0810 ; = 2064 in decimal
|
||||
|
||||
; ---- hardware registers ----
|
||||
SCRCTRL = $d011 ; vertical control: bit 4 switches the display on/off
|
||||
BORDER = $d020 ; border color register
|
||||
BG = $d021 ; background color register
|
||||
RASTER = $d012 ; current raster line
|
||||
@@ -33,16 +39,15 @@ BLACK = 0
|
||||
WHITE = 1
|
||||
CYAN = 3
|
||||
YELLOW = 7
|
||||
DGREY = 11
|
||||
LGREEN = 13
|
||||
LGREY = 15
|
||||
|
||||
; ---- screen layout ----
|
||||
; ---- screen layout (slide 1) ----
|
||||
BIGROW = 2 ; top row of the giant letters
|
||||
BIGCOL = 6 ; left column (3*8 + 2*2 = 28 wide, centered)
|
||||
TITLE_POS = 12*40 + 13 ; "TELETYPE GAMES" (14 chars, centered)
|
||||
SCROLLROW = 14 ; scroller row
|
||||
WWW_POS = 17*40 + 9 ; "WWW.TELETYPEGAMES.ORG" (21 chars)
|
||||
CITY_POS = 19*40 + 14 ; "SZEGED, 2026" (12 chars)
|
||||
|
||||
; ---- timing ----
|
||||
SCROLL_STEP = 2 ; pixels per frame (8 px / 4 frames = 1 char)
|
||||
@@ -50,23 +55,282 @@ RAS_SCRTOP = 160 ; just above the scroller row (row 14 = lines 1
|
||||
RAS_SCRBOT = 171 ; just below it (rows 13 and 15 are blank, so
|
||||
; a line of jitter here is invisible)
|
||||
RAS_BOTTOM = 248 ; lower border: safe time for screen updates
|
||||
RAS_BARTOP = 16 ; first raster line of the bar area (slide 3):
|
||||
; starts in the upper border
|
||||
BAR_STEPS = 57 ; 57 steps * 4 lines = up to line 244
|
||||
|
||||
NUM_SLIDES = 5
|
||||
SLIDE_TIME = 300 ; 6 seconds per slide (PAL, 50 frames/s)
|
||||
FADE_STEPS = 5 ; fade steps (longest fadetbl chain is 4)
|
||||
FADE_SPEED = 4 ; frames between two fade steps
|
||||
|
||||
FADEBUF = $c000 ; snapshot of color RAM for the fade-in
|
||||
|
||||
; ---- zero page pointers ----
|
||||
scrlo = $fb
|
||||
scrhi = $fc
|
||||
collo = $fd
|
||||
colhi = $fe
|
||||
txtlo = $f5 ; text pointer for the print routines (2 bytes)
|
||||
txthi = $f6
|
||||
vec = $f7 ; slide init vector (2 bytes)
|
||||
updvec = $f9 ; slide update vector (2 bytes)
|
||||
scrlo = $fb
|
||||
scrhi = $fc
|
||||
collo = $fd
|
||||
colhi = $fe
|
||||
|
||||
; ---- helper macros: print a normal / big text line ----
|
||||
!macro prtext .row, .col, .color, .txt, .len {
|
||||
lda #<.txt
|
||||
sta txtlo
|
||||
lda #>.txt
|
||||
sta txthi
|
||||
lda #.row
|
||||
sta prow
|
||||
lda #.col
|
||||
sta pcol
|
||||
lda #.color
|
||||
sta pcolor
|
||||
lda #.len
|
||||
sta plen
|
||||
jsr print_text
|
||||
}
|
||||
|
||||
!macro prbig .row, .col, .color, .txt, .len {
|
||||
lda #<.txt
|
||||
sta txtlo
|
||||
lda #>.txt
|
||||
sta txthi
|
||||
lda #.row
|
||||
sta bigrow
|
||||
lda #.col
|
||||
sta bigcol
|
||||
lda #.color
|
||||
sta bigcolor
|
||||
lda #.len
|
||||
sta biglen
|
||||
jsr draw_big
|
||||
}
|
||||
|
||||
start:
|
||||
sei ; no KERNAL IRQ - raster polling must not jitter
|
||||
|
||||
lda #0
|
||||
sta framectr
|
||||
sta slide
|
||||
jsr show_slide ; draw slide 0 hidden, then fade it in
|
||||
|
||||
; ============================================================
|
||||
; main loop - one update call per frame; when the slide's
|
||||
; duration runs out, switch to the next slide
|
||||
; ============================================================
|
||||
main:
|
||||
jsr call_update
|
||||
|
||||
lda durlo ; 16-bit frame countdown
|
||||
bne dur_dec
|
||||
dec durhi
|
||||
dur_dec:
|
||||
dec durlo
|
||||
lda durlo
|
||||
ora durhi
|
||||
bne main
|
||||
|
||||
jsr fade_out ; time's up: fade the old slide to black
|
||||
|
||||
ldx slide ; advance to the next slide
|
||||
inx
|
||||
cpx #NUM_SLIDES
|
||||
bne slide_ok
|
||||
ldx #0
|
||||
slide_ok:
|
||||
stx slide
|
||||
jsr show_slide ; draw it hidden, then fade it in
|
||||
jmp main
|
||||
|
||||
call_update:
|
||||
jmp (updvec) ; each update runs exactly one frame, ends with rts
|
||||
|
||||
; ---- load a slide's vectors and duration, then run its init ----
|
||||
slide_setup:
|
||||
ldx slide
|
||||
lda slide_dur_lo,x
|
||||
sta durlo
|
||||
lda slide_dur_hi,x
|
||||
sta durhi
|
||||
lda slide_upd_lo,x
|
||||
sta updvec
|
||||
lda slide_upd_hi,x
|
||||
sta updvec+1
|
||||
lda slide_init_lo,x
|
||||
sta vec
|
||||
lda slide_init_hi,x
|
||||
sta vec+1
|
||||
lda #BLACK
|
||||
sta BORDER
|
||||
sta BG
|
||||
jmp (vec) ; init ends with rts -> returns to slide_setup's caller
|
||||
|
||||
; clear screen RAM, fill color RAM with white
|
||||
; ============================================================
|
||||
; slide transition: fade through black
|
||||
; ============================================================
|
||||
|
||||
; ---- draw the current slide while the display is switched off
|
||||
; (everything shows border color = black), snapshot its colors,
|
||||
; blacken them, switch the display back on and fade in ----
|
||||
show_slide:
|
||||
lda #$0b ; display off
|
||||
sta SCRCTRL
|
||||
jsr slide_setup
|
||||
jsr snapshot_colram
|
||||
lda #$1b ; display on
|
||||
sta SCRCTRL
|
||||
|
||||
; fade in: fadecnt counts how many times the target color is
|
||||
; darkened; counting 4 -> 0 walks each cell from black back
|
||||
; up to its snapshot color
|
||||
lda #FADE_STEPS-1
|
||||
sta fadecnt
|
||||
fi_step:
|
||||
jsr build_map
|
||||
jsr apply_map
|
||||
ldx #FADE_SPEED
|
||||
fi_wait:
|
||||
jsr wait_frame
|
||||
dex
|
||||
bne fi_wait
|
||||
lda fadecnt
|
||||
beq fi_done
|
||||
dec fadecnt
|
||||
jmp fi_step
|
||||
fi_done:
|
||||
rts
|
||||
|
||||
; ---- darken the whole color RAM step by step until black ----
|
||||
fade_out:
|
||||
lda #FADE_STEPS
|
||||
sta fadecnt
|
||||
fo_step:
|
||||
ldx #FADE_SPEED
|
||||
fo_wait:
|
||||
jsr wait_frame
|
||||
dex
|
||||
bne fo_wait
|
||||
jsr apply_fade
|
||||
dec fadecnt
|
||||
bne fo_step
|
||||
rts
|
||||
|
||||
; ---- wait for the next bottom-border arrival of the beam ----
|
||||
wait_frame:
|
||||
wf_leave:
|
||||
lda RASTER ; first leave line RAS_BOTTOM if we are on it
|
||||
cmp #RAS_BOTTOM
|
||||
beq wf_leave
|
||||
wf_reach:
|
||||
lda RASTER
|
||||
cmp #RAS_BOTTOM
|
||||
bne wf_reach
|
||||
rts
|
||||
|
||||
; ---- one fade-out step: every color RAM cell one shade darker ----
|
||||
apply_fade:
|
||||
ldx #0
|
||||
clear_loop:
|
||||
af_loop:
|
||||
lda COLRAM,x
|
||||
and #15 ; color RAM reads have garbage upper bits
|
||||
tay
|
||||
lda fadetbl,y
|
||||
sta COLRAM,x
|
||||
lda COLRAM+250,x
|
||||
and #15
|
||||
tay
|
||||
lda fadetbl,y
|
||||
sta COLRAM+250,x
|
||||
lda COLRAM+500,x
|
||||
and #15
|
||||
tay
|
||||
lda fadetbl,y
|
||||
sta COLRAM+500,x
|
||||
lda COLRAM+750,x
|
||||
and #15
|
||||
tay
|
||||
lda fadetbl,y
|
||||
sta COLRAM+750,x
|
||||
inx
|
||||
cpx #250
|
||||
bne af_loop
|
||||
rts
|
||||
|
||||
; ---- copy color RAM to FADEBUF, then blacken color RAM ----
|
||||
snapshot_colram:
|
||||
ldx #0
|
||||
sn_loop:
|
||||
lda COLRAM,x
|
||||
and #15
|
||||
sta FADEBUF,x
|
||||
lda COLRAM+250,x
|
||||
and #15
|
||||
sta FADEBUF+250,x
|
||||
lda COLRAM+500,x
|
||||
and #15
|
||||
sta FADEBUF+500,x
|
||||
lda COLRAM+750,x
|
||||
and #15
|
||||
sta FADEBUF+750,x
|
||||
lda #BLACK
|
||||
sta COLRAM,x
|
||||
sta COLRAM+250,x
|
||||
sta COLRAM+500,x
|
||||
sta COLRAM+750,x
|
||||
inx
|
||||
cpx #250
|
||||
bne sn_loop
|
||||
rts
|
||||
|
||||
; ---- curmap[c] = color c darkened fadecnt times ----
|
||||
build_map:
|
||||
ldx #15
|
||||
bm_color:
|
||||
txa
|
||||
tay
|
||||
lda fadecnt
|
||||
sta bmcnt
|
||||
beq bm_store ; 0 steps: identity map
|
||||
bm_apply:
|
||||
lda fadetbl,y
|
||||
tay
|
||||
dec bmcnt
|
||||
bne bm_apply
|
||||
bm_store:
|
||||
tya
|
||||
sta curmap,x
|
||||
dex
|
||||
bpl bm_color
|
||||
rts
|
||||
|
||||
; ---- write curmap[FADEBUF] into the whole color RAM ----
|
||||
apply_map:
|
||||
ldx #0
|
||||
am_loop:
|
||||
ldy FADEBUF,x
|
||||
lda curmap,y
|
||||
sta COLRAM,x
|
||||
ldy FADEBUF+250,x
|
||||
lda curmap,y
|
||||
sta COLRAM+250,x
|
||||
ldy FADEBUF+500,x
|
||||
lda curmap,y
|
||||
sta COLRAM+500,x
|
||||
ldy FADEBUF+750,x
|
||||
lda curmap,y
|
||||
sta COLRAM+750,x
|
||||
inx
|
||||
cpx #250
|
||||
bne am_loop
|
||||
rts
|
||||
|
||||
; ---- clear screen RAM, fill color RAM with white ----
|
||||
clear_screen:
|
||||
ldx #0
|
||||
cls_loop:
|
||||
lda #$20 ; space
|
||||
sta SCREEN,x
|
||||
sta SCREEN+$100,x
|
||||
@@ -78,9 +342,117 @@ clear_loop:
|
||||
sta COLRAM+$200,x
|
||||
sta COLRAM+$2e8,x
|
||||
inx
|
||||
bne clear_loop
|
||||
bne cls_loop
|
||||
rts
|
||||
|
||||
; ---- print a text line: txtlo/hi, prow, pcol, pcolor, plen ----
|
||||
print_text:
|
||||
ldx prow
|
||||
lda mul40lo,x
|
||||
clc
|
||||
adc pcol
|
||||
sta scrlo
|
||||
sta collo
|
||||
lda mul40hi,x
|
||||
adc #>SCREEN ; carry still valid from the low-byte add
|
||||
sta scrhi
|
||||
clc
|
||||
adc #$d4 ; COLRAM - SCREEN high byte distance
|
||||
sta colhi
|
||||
ldy #0
|
||||
pt_loop:
|
||||
lda (txtlo),y
|
||||
sta (scrlo),y
|
||||
lda pcolor
|
||||
sta (collo),y
|
||||
iny
|
||||
cpy plen
|
||||
bne pt_loop
|
||||
rts
|
||||
|
||||
; ---- draw a text line with big 3x5 block letters ----
|
||||
; txtlo/hi = text (screen codes), bigrow/bigcol = top-left cell,
|
||||
; bigcolor = color, biglen = char count; each letter is 3 cells
|
||||
; wide + 1 gap, 5 cells tall
|
||||
draw_big:
|
||||
lda #0
|
||||
sta bigi
|
||||
db_char:
|
||||
ldy bigi
|
||||
lda (txtlo),y
|
||||
cmp #$20 ; space: leave the cell empty
|
||||
beq db_next
|
||||
tax
|
||||
lda bigmap,x ; screen code -> glyph index
|
||||
sta glyphbase
|
||||
asl ; glyph base = index * 5
|
||||
asl
|
||||
clc
|
||||
adc glyphbase
|
||||
sta glyphbase
|
||||
lda bigi ; cell x = bigcol + charindex * 4
|
||||
asl
|
||||
asl
|
||||
clc
|
||||
adc bigcol
|
||||
sta charx
|
||||
lda #0
|
||||
sta rowidx
|
||||
db_row:
|
||||
lda bigrow ; row pointers from the row*40 tables
|
||||
clc
|
||||
adc rowidx
|
||||
tax
|
||||
lda mul40lo,x
|
||||
sta scrlo
|
||||
sta collo
|
||||
lda mul40hi,x
|
||||
clc
|
||||
adc #>SCREEN
|
||||
sta scrhi
|
||||
clc
|
||||
adc #$d4
|
||||
sta colhi
|
||||
lda glyphbase
|
||||
clc
|
||||
adc rowidx
|
||||
tax
|
||||
lda bigglyphs,x
|
||||
asl ; 3-bit pattern up to bits 7-5
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta curbits
|
||||
ldy charx
|
||||
lda #3
|
||||
sta bitcnt
|
||||
db_bit:
|
||||
asl curbits ; leftmost pixel first
|
||||
bcc db_nobit
|
||||
lda #$a0 ; inverse space = solid block
|
||||
sta (scrlo),y
|
||||
lda bigcolor
|
||||
sta (collo),y
|
||||
db_nobit:
|
||||
iny
|
||||
dec bitcnt
|
||||
bne db_bit
|
||||
inc rowidx
|
||||
lda rowidx
|
||||
cmp #5
|
||||
bne db_row
|
||||
db_next:
|
||||
inc bigi
|
||||
lda bigi
|
||||
cmp biglen
|
||||
beq db_done
|
||||
jmp db_char ; too far for a relative branch
|
||||
db_done:
|
||||
rts
|
||||
|
||||
; ---- draw the giant TTG letters from 8x8 bitmaps ----
|
||||
draw_logo:
|
||||
lda #0
|
||||
sta letter
|
||||
letter_loop:
|
||||
@@ -144,37 +516,18 @@ col_nocarry:
|
||||
lda letter
|
||||
cmp #3
|
||||
bne letter_loop
|
||||
rts
|
||||
|
||||
; ---- static texts ----
|
||||
ldx #0
|
||||
title_loop:
|
||||
lda txt_title,x
|
||||
sta SCREEN+TITLE_POS,x
|
||||
lda #WHITE
|
||||
sta COLRAM+TITLE_POS,x
|
||||
inx
|
||||
cpx #txt_title_end - txt_title
|
||||
bne title_loop
|
||||
; ============================================================
|
||||
; slide 1: giant logo + credits scroller
|
||||
; ============================================================
|
||||
s1_init:
|
||||
jsr clear_screen
|
||||
jsr draw_logo
|
||||
|
||||
ldx #0
|
||||
www_loop:
|
||||
lda txt_www,x
|
||||
sta SCREEN+WWW_POS,x
|
||||
lda #LGREEN
|
||||
sta COLRAM+WWW_POS,x
|
||||
inx
|
||||
cpx #txt_www_end - txt_www
|
||||
bne www_loop
|
||||
|
||||
ldx #0
|
||||
city_loop:
|
||||
lda txt_city,x
|
||||
sta SCREEN+CITY_POS,x
|
||||
lda #LGREY
|
||||
sta COLRAM+CITY_POS,x
|
||||
inx
|
||||
cpx #txt_city_end - txt_city
|
||||
bne city_loop
|
||||
+prtext 12, 13, WHITE, txt_title, txt_title_end - txt_title
|
||||
+prtext 17, 9, LGREEN, txt_www, txt_www_end - txt_www
|
||||
+prtext 19, 14, LGREY, txt_city, txt_city_end - txt_city
|
||||
|
||||
; scroller row color
|
||||
ldx #39
|
||||
@@ -188,13 +541,10 @@ scrollcol_loop:
|
||||
sta xscroll
|
||||
lda #0
|
||||
sta scrollidx
|
||||
sta framectr
|
||||
sta washphase
|
||||
rts
|
||||
|
||||
; ============================================================
|
||||
; main loop - one iteration per frame, driven by the raster
|
||||
; ============================================================
|
||||
main:
|
||||
s1_update:
|
||||
; switch on fine scroll + 38-column mode for the scroller row only
|
||||
wait_scrtop:
|
||||
lda RASTER
|
||||
@@ -239,7 +589,7 @@ wash_hold:
|
||||
|
||||
jsr do_wash
|
||||
jsr do_pulse
|
||||
jmp main
|
||||
rts
|
||||
|
||||
; ---- shift the scroller row one char left, feed in the next char ----
|
||||
shift_row:
|
||||
@@ -299,8 +649,213 @@ dp_loop:
|
||||
bpl dp_loop
|
||||
rts
|
||||
|
||||
; ============================================================
|
||||
; slide 2: OUR FIRST GAME - Definitely not an Impostor
|
||||
; big letters with the gold wash running across them
|
||||
; ============================================================
|
||||
s2_init:
|
||||
jsr clear_screen
|
||||
+prtext 1, 13, WHITE, txt_firstgame, txt_firstgame_end - txt_firstgame
|
||||
+prbig 4, 0, YELLOW, big_definitely, 10
|
||||
+prbig 10, 8, YELLOW, big_notan, 6
|
||||
+prbig 16, 4, YELLOW, big_impostor, 8
|
||||
+prtext 23, 10, LGREY, txt_tic80, txt_tic80_end - txt_tic80
|
||||
rts
|
||||
|
||||
s2_update:
|
||||
lda RASTER
|
||||
cmp #RAS_BOTTOM
|
||||
bne s2_update
|
||||
|
||||
inc framectr
|
||||
lda framectr ; wash moves one column every 2nd frame
|
||||
and #1
|
||||
bne s2_hold
|
||||
inc washphase
|
||||
s2_hold:
|
||||
|
||||
; gold wash across all 15 big-letter rows (4-8, 10-14, 16-20)
|
||||
ldx #39
|
||||
s2_loop:
|
||||
txa
|
||||
clc
|
||||
adc washphase
|
||||
and #15
|
||||
tay
|
||||
lda washtbl,y
|
||||
sta COLRAM + 4*40,x
|
||||
sta COLRAM + 5*40,x
|
||||
sta COLRAM + 6*40,x
|
||||
sta COLRAM + 7*40,x
|
||||
sta COLRAM + 8*40,x
|
||||
sta COLRAM + 10*40,x
|
||||
sta COLRAM + 11*40,x
|
||||
sta COLRAM + 12*40,x
|
||||
sta COLRAM + 13*40,x
|
||||
sta COLRAM + 14*40,x
|
||||
sta COLRAM + 16*40,x
|
||||
sta COLRAM + 17*40,x
|
||||
sta COLRAM + 18*40,x
|
||||
sta COLRAM + 19*40,x
|
||||
sta COLRAM + 20*40,x
|
||||
dex
|
||||
bpl s2_loop
|
||||
rts
|
||||
|
||||
; ============================================================
|
||||
; slide 3: OUR SECOND GAME IS COMING
|
||||
; full-screen raster bars (background + border) behind the text
|
||||
; ============================================================
|
||||
s3_init:
|
||||
jsr clear_screen
|
||||
+prtext 4, 12, WHITE, txt_secondgame, txt_secondgame_end - txt_secondgame
|
||||
+prbig 8, 3, DGREY, big_iscoming, 9 ; drop shadow first (+1 row, +1 col)
|
||||
+prbig 7, 2, YELLOW, big_iscoming, 9 ; then the letters on top of it
|
||||
+prtext 15, 4, WHITE, txt_pointclick, txt_pointclick_end - txt_pointclick
|
||||
+prtext 18, 7, LGREY, txt_steam, txt_steam_end - txt_steam
|
||||
lda #0
|
||||
sta s3phase
|
||||
rts
|
||||
|
||||
s3_update:
|
||||
inc framectr
|
||||
lda framectr ; bars scroll one step every 2nd frame
|
||||
and #1
|
||||
bne s3_hold
|
||||
inc s3phase
|
||||
s3_hold:
|
||||
|
||||
; chase the beam: every 4th raster line from RAS_BARTOP down,
|
||||
; set the BORDER color from the cyclic 64-entry bar table;
|
||||
; the background stays black so the text remains readable
|
||||
lda #RAS_BARTOP
|
||||
sta s3line
|
||||
ldx #0 ; bar step counter
|
||||
s3_bar:
|
||||
lda s3line
|
||||
s3_wait:
|
||||
cmp RASTER
|
||||
bne s3_wait
|
||||
txa
|
||||
clc
|
||||
adc s3phase
|
||||
and #63
|
||||
tay
|
||||
lda rastbl,y
|
||||
sta BORDER
|
||||
lda s3line
|
||||
clc
|
||||
adc #4
|
||||
sta s3line
|
||||
inx
|
||||
cpx #BAR_STEPS
|
||||
bne s3_bar
|
||||
|
||||
lda #BLACK ; below the bar area: back to black
|
||||
sta BORDER
|
||||
|
||||
s3_wbot: ; keep the one-call-per-frame contract
|
||||
lda RASTER
|
||||
cmp #RAS_BOTTOM
|
||||
bne s3_wbot
|
||||
rts
|
||||
|
||||
; ============================================================
|
||||
; slide 4: CONTACT
|
||||
; pulsing big title, contact lines below
|
||||
; ============================================================
|
||||
s4_init:
|
||||
jsr clear_screen
|
||||
+prbig 2, 6, WHITE, big_contact, 7
|
||||
+prtext 10, 7, LGREEN, txt_web, txt_web_end - txt_web
|
||||
+prtext 13, 6, YELLOW, txt_bbs, txt_bbs_end - txt_bbs
|
||||
+prtext 16, 4, CYAN, txt_irc, txt_irc_end - txt_irc
|
||||
rts
|
||||
|
||||
s4_update:
|
||||
lda RASTER
|
||||
cmp #RAS_BOTTOM
|
||||
bne s4_update
|
||||
|
||||
inc framectr
|
||||
lda framectr ; grey-white pulse on the big title rows (2-6)
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
and #7
|
||||
tay
|
||||
lda pulsetbl,y
|
||||
ldx #39
|
||||
s4_loop:
|
||||
sta COLRAM + 2*40,x
|
||||
sta COLRAM + 3*40,x
|
||||
sta COLRAM + 4*40,x
|
||||
sta COLRAM + 5*40,x
|
||||
sta COLRAM + 6*40,x
|
||||
dex
|
||||
bpl s4_loop
|
||||
rts
|
||||
|
||||
; ============================================================
|
||||
; slide 5: the assembly confession
|
||||
; ============================================================
|
||||
s5_init:
|
||||
jsr clear_screen
|
||||
+prtext 3, 11, WHITE, txt_conf1, txt_conf1_end - txt_conf1
|
||||
+prtext 7, 5, LGREY, txt_conf2, txt_conf2_end - txt_conf2
|
||||
+prtext 9, 4, LGREY, txt_conf3, txt_conf3_end - txt_conf3
|
||||
+prtext 12, 5, WHITE, txt_conf4, txt_conf4_end - txt_conf4
|
||||
+prtext 15, 5, LGREY, txt_conf5, txt_conf5_end - txt_conf5
|
||||
+prtext 17, 5, LGREY, txt_conf6, txt_conf6_end - txt_conf6
|
||||
+prtext 21, 11, CYAN, txt_conf7, txt_conf7_end - txt_conf7
|
||||
rts
|
||||
|
||||
s5_update:
|
||||
lda RASTER
|
||||
cmp #RAS_BOTTOM
|
||||
bne s5_update
|
||||
|
||||
inc framectr
|
||||
lda framectr ; pulse on the "(the ai says hi.)" line
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
and #7
|
||||
tay
|
||||
lda pulsetbl,y
|
||||
ldx #txt_conf7_end - txt_conf7 - 1
|
||||
s5_loop:
|
||||
sta COLRAM + 21*40 + 11,x
|
||||
dex
|
||||
bpl s5_loop
|
||||
rts
|
||||
|
||||
; ---- data ----
|
||||
|
||||
; slide table: init vector, update vector, duration in frames
|
||||
slide_init_lo:
|
||||
!byte <s1_init, <s2_init, <s3_init, <s4_init, <s5_init
|
||||
slide_init_hi:
|
||||
!byte >s1_init, >s2_init, >s3_init, >s4_init, >s5_init
|
||||
slide_upd_lo:
|
||||
!byte <s1_update, <s2_update, <s3_update, <s4_update, <s5_update
|
||||
slide_upd_hi:
|
||||
!byte >s1_update, >s2_update, >s3_update, >s4_update, >s5_update
|
||||
slide_dur_lo:
|
||||
!byte <SLIDE_TIME, <SLIDE_TIME, <SLIDE_TIME, <SLIDE_TIME, <SLIDE_TIME
|
||||
slide_dur_hi:
|
||||
!byte >SLIDE_TIME, >SLIDE_TIME, >SLIDE_TIME, >SLIDE_TIME, >SLIDE_TIME
|
||||
|
||||
; row * 40 lookup tables (25 rows)
|
||||
mul40lo:
|
||||
!byte $00, $28, $50, $78, $a0, $c8, $f0, $18, $40, $68
|
||||
!byte $90, $b8, $e0, $08, $30, $58, $80, $a8, $d0, $f8
|
||||
!byte $20, $48, $70, $98, $c0
|
||||
mul40hi:
|
||||
!byte $00, $00, $00, $00, $00, $00, $00, $01, $01, $01
|
||||
!byte $01, $01, $01, $02, $02, $02, $02, $02, $02, $02
|
||||
!byte $03, $03, $03, $03, $03
|
||||
|
||||
; 8x8 bitmaps of the giant letters (one byte per row, MSB = left pixel)
|
||||
bigfont:
|
||||
; T
|
||||
@@ -313,6 +868,33 @@ bigfont:
|
||||
letter_off: ; column offset of each letter (8 wide + 2 gap)
|
||||
!byte 0, 10, 20
|
||||
|
||||
; 3x5 block font for the big slide titles (5 bytes per glyph,
|
||||
; low 3 bits used, MSB side = left)
|
||||
bigglyphs:
|
||||
!byte 0, 0, 0, 0, 0 ; 0 space
|
||||
!byte 2, 5, 7, 5, 5 ; 1 A
|
||||
!byte 3, 4, 4, 4, 3 ; 2 C
|
||||
!byte 6, 5, 5, 5, 6 ; 3 D
|
||||
!byte 7, 4, 6, 4, 7 ; 4 E
|
||||
!byte 7, 4, 6, 4, 4 ; 5 F
|
||||
!byte 7, 2, 2, 2, 7 ; 6 I
|
||||
!byte 4, 4, 4, 4, 7 ; 7 L
|
||||
!byte 5, 7, 7, 5, 5 ; 8 M
|
||||
!byte 6, 5, 5, 5, 5 ; 9 N
|
||||
!byte 7, 5, 5, 5, 7 ; 10 O
|
||||
!byte 6, 5, 6, 4, 4 ; 11 P
|
||||
!byte 6, 5, 6, 5, 5 ; 12 R
|
||||
!byte 3, 4, 2, 1, 6 ; 13 S
|
||||
!byte 7, 2, 2, 2, 2 ; 14 T
|
||||
!byte 5, 5, 2, 2, 2 ; 15 Y
|
||||
!byte 3, 4, 5, 5, 7 ; 16 G
|
||||
|
||||
bigmap: ; screen code (a=1..z=26) -> glyph index
|
||||
!byte 0 ; (unused)
|
||||
!byte 1, 0, 2, 3, 4, 5, 16, 0, 6, 0 ; a-j
|
||||
!byte 0, 7, 8, 9, 10, 11, 0, 12, 13, 14 ; k-t
|
||||
!byte 0, 0, 0, 0, 15, 0 ; u-z
|
||||
|
||||
washtbl: ; gold glow ramp (16 entries, cyclic)
|
||||
!byte $09, $02, $08, $0a, $07, $07, $01, $01
|
||||
!byte $01, $01, $07, $07, $0a, $08, $02, $09
|
||||
@@ -320,24 +902,105 @@ washtbl: ; gold glow ramp (16 entries, cyclic)
|
||||
pulsetbl: ; grey-white pulse (8 entries, cyclic)
|
||||
!byte $0b, $0c, $0f, $01, $01, $0f, $0c, $0b
|
||||
|
||||
fadetbl: ; fade-to-black: each color -> one shade darker,
|
||||
; every chain reaches black in at most 4 steps
|
||||
; (e.g. white -> lgrey -> mgrey -> dgrey -> black)
|
||||
; blk wht red cyn pur grn blu yel
|
||||
!byte $00, $0f, $09, $0e, $06, $0b, $00, $08
|
||||
; org brn lrd dgr mgr lgn lbl lgr
|
||||
!byte $02, $00, $02, $00, $0b, $05, $06, $0c
|
||||
|
||||
rastbl: ; raster bar colors (64 entries, cyclic):
|
||||
; red, green, blue, grey ramps
|
||||
!byte $00, $00, $02, $02, $08, $08, $0a, $01
|
||||
!byte $0a, $08, $08, $02, $02, $00, $00, $00
|
||||
!byte $00, $00, $05, $05, $0d, $0d, $07, $01
|
||||
!byte $07, $0d, $0d, $05, $05, $00, $00, $00
|
||||
!byte $00, $00, $06, $06, $0e, $0e, $03, $01
|
||||
!byte $03, $0e, $0e, $06, $06, $00, $00, $00
|
||||
!byte $00, $00, $0b, $0b, $0c, $0c, $0f, $01
|
||||
!byte $0f, $0c, $0c, $0b, $0b, $00, $00, $00
|
||||
|
||||
; texts in screen codes (!scr); lowercase source shows as uppercase on C64
|
||||
|
||||
; slide 1
|
||||
txt_title:
|
||||
!scr "teletype games"
|
||||
txt_title_end:
|
||||
|
||||
txt_www:
|
||||
!scr "www.teletypegames.org"
|
||||
txt_www_end:
|
||||
|
||||
txt_city:
|
||||
!scr "szeged, 2026"
|
||||
txt_city_end:
|
||||
|
||||
scrolltext:
|
||||
!scr "mr.zero - tasnadi zsolt / mr.one - tari balazs / "
|
||||
!scr "mr.two - timar zoltan / mr.three - mezo bela / "
|
||||
scrolltext_end:
|
||||
|
||||
; slide 2
|
||||
txt_firstgame:
|
||||
!scr "our first game"
|
||||
txt_firstgame_end:
|
||||
big_definitely:
|
||||
!scr "definitely"
|
||||
big_notan:
|
||||
!scr "not an"
|
||||
big_impostor:
|
||||
!scr "impostor"
|
||||
txt_tic80:
|
||||
!scr "introduced on tic-80"
|
||||
txt_tic80_end:
|
||||
|
||||
; slide 3
|
||||
txt_secondgame:
|
||||
!scr "our second game"
|
||||
txt_secondgame_end:
|
||||
big_iscoming:
|
||||
!scr "is coming"
|
||||
txt_pointclick:
|
||||
!scr "a new point and click adventure"
|
||||
txt_pointclick_end:
|
||||
txt_steam:
|
||||
!scr "will be available on steam"
|
||||
txt_steam_end:
|
||||
|
||||
; slide 4
|
||||
big_contact:
|
||||
!scr "contact"
|
||||
txt_web:
|
||||
!scr "web: www.teletypegames.org"
|
||||
txt_web_end:
|
||||
txt_bbs:
|
||||
!scr "bbs: teletypegames.org 2323"
|
||||
txt_bbs_end:
|
||||
txt_irc:
|
||||
!scr "irc: libera.chat #teletypegames"
|
||||
txt_irc_end:
|
||||
|
||||
; slide 5
|
||||
txt_conf1:
|
||||
!scr "a quick confession"
|
||||
txt_conf1_end:
|
||||
txt_conf2:
|
||||
!scr "we speak c, c++, python, java,"
|
||||
txt_conf2_end:
|
||||
txt_conf3:
|
||||
!scr "php, javascript and even pascal."
|
||||
txt_conf3_end:
|
||||
txt_conf4:
|
||||
!scr "but 6502 assembly? not a word."
|
||||
txt_conf4_end:
|
||||
txt_conf5:
|
||||
!scr "so this slideshow was written"
|
||||
txt_conf5_end:
|
||||
txt_conf6:
|
||||
!scr "with a little help from an ai."
|
||||
txt_conf6_end:
|
||||
txt_conf7:
|
||||
!scr "(the ai says hi.)"
|
||||
txt_conf7_end:
|
||||
|
||||
; ---- variables ----
|
||||
letter: !byte 0
|
||||
rowcount: !byte 0
|
||||
@@ -346,3 +1009,24 @@ framectr: !byte 0
|
||||
xscroll: !byte 0
|
||||
washphase: !byte 0
|
||||
scrollidx: !byte 0
|
||||
slide: !byte 0 ; current slide index
|
||||
durlo: !byte 0 ; frames left on this slide (16 bit)
|
||||
durhi: !byte 0
|
||||
s3phase: !byte 0 ; raster bar scroll offset
|
||||
s3line: !byte 0 ; current raster line while drawing bars
|
||||
prow: !byte 0 ; print_text: row, column, color, length
|
||||
pcol: !byte 0
|
||||
pcolor: !byte 0
|
||||
plen: !byte 0
|
||||
bigrow: !byte 0 ; draw_big: row, column, color, length
|
||||
bigcol: !byte 0
|
||||
bigcolor: !byte 0
|
||||
biglen: !byte 0
|
||||
bigi: !byte 0 ; draw_big internals
|
||||
glyphbase: !byte 0
|
||||
charx: !byte 0
|
||||
rowidx: !byte 0
|
||||
bitcnt: !byte 0
|
||||
fadecnt: !byte 0 ; fade step counter
|
||||
bmcnt: !byte 0 ; build_map inner counter
|
||||
curmap: !fill 16, 0 ; current fade-in color map
|
||||
|
||||
Reference in New Issue
Block a user