diff --git a/demos/driven/Makefile b/demos/driven/Makefile
index dcb90498..46d8506a 100644
--- a/demos/driven/Makefile
+++ b/demos/driven/Makefile
@@ -11,7 +11,8 @@ all:	driven.dsk
 driven.dsk:	QBOOT QLOAD \
 	MUSIC \
 	music.inc qload.inc \
-	./part00_intro/INTRO
+	./part00_intro/INTRO \
+	./part20_credits/CREDITS
 	cp $(EMPTY_DISK) driven.dsk
 	$(DOS33_RAW) driven.dsk 0 0 QBOOT		0 1
 	$(DOS33_RAW) driven.dsk 0 2 QBOOT		1 1
@@ -19,6 +20,7 @@ driven.dsk:	QBOOT QLOAD \
 	$(DOS33_RAW) driven.dsk 1 0 QLOAD		0 0
 	$(DOS33_RAW) driven.dsk 4 0 MUSIC		0 0
 	$(DOS33_RAW) driven.dsk 9 0 ./part00_intro/INTRO 0 0
+	$(DOS33_RAW) driven.dsk 13 0 ./part20_credits/CREDITS 0 0
 
 #second_d1.dsk:	QBOOT QLOAD \
 #	music.inc qload.inc \
@@ -64,38 +66,8 @@ driven.dsk:	QBOOT QLOAD \
 part00_intro/INTRO:	
 	cd part00_intro && make
 
-part01_intropan/INTRO:	
-	cd part01_intropan && make
-
-part04_chess_shapes/CHESS:	
-	cd part04_chess_shapes && make
-
-part08_gorilla/GORILLA:	
-	cd part08_gorilla && make
-
-part09_leaves/LEAVES:	
-	cd part09_leaves && make
-
-part10_lens_rotozoom/LENS:	
-	cd part10_lens_rotozoom && make
-
-part12_plasma/PLASMA:	
-	cd part12_plasma && make
-
-part13_plasmacube/PLASMACUBE:	
-	cd part13_plasmacube && make
-
-part14_dotbounce/DOTS:	
-	cd part14_dotbounce && make
-
-part15_transmission/SPHERES:	
-	cd part15_transmission && make
-
-part16_ocean/OCEAN:	
-	cd part16_ocean && make
-
-part17_polar/POLAR:	
-	cd part17_polar && make
+part20_credits/CREDITS:	
+	cd part20_credits && make
 
 
 ####
@@ -232,6 +204,7 @@ clean:
 	rm -f *~ *.o *.lst HELLO SECOND QBOOT QLOAD MUSIC START
 	rm -f qload.inc qload2.inc music.inc music2.inc
 	cd part00_intro && make clean
+	cd part20_credits && make clean
 
 ###
 
diff --git a/demos/driven/hgr_clear_screen.s b/demos/driven/hgr_clear_screen.s
new file mode 100644
index 00000000..aa0805ab
--- /dev/null
+++ b/demos/driven/hgr_clear_screen.s
@@ -0,0 +1,89 @@
+hgr_clear_screen:
+	lda	DRAW_PAGE
+	beq	hgr_page1_clearscreen
+	lda	#0
+	beq	hgr_page2_clearscreen
+
+hgr_page1_clearscreen:
+
+	ldy	#0
+hgr_page1_cls_loop:
+	sta	$2000,Y
+	sta	$2100,Y
+	sta	$2200,Y
+	sta	$2300,Y
+	sta	$2400,Y
+	sta	$2500,Y
+	sta	$2600,Y
+	sta	$2700,Y
+	sta	$2800,Y
+	sta	$2900,Y
+	sta	$2A00,Y
+	sta	$2B00,Y
+	sta	$2C00,Y
+	sta	$2D00,Y
+	sta	$2E00,Y
+	sta	$2F00,Y
+	sta	$3000,Y
+	sta	$3100,Y
+	sta	$3200,Y
+	sta	$3300,Y
+	sta	$3400,Y
+	sta	$3500,Y
+	sta	$3600,Y
+	sta	$3700,Y
+	sta	$3800,Y
+	sta	$3900,Y
+	sta	$3A00,Y
+	sta	$3B00,Y
+	sta	$3C00,Y
+	sta	$3D00,Y
+	sta	$3E00,Y
+	sta	$3F00,Y
+	iny
+	bne	hgr_page1_cls_loop
+
+	rts
+
+
+hgr_page2_clearscreen:
+
+	ldy	#0
+hgr_page2_cls_loop:
+	sta	$4000,Y
+	sta	$4100,Y
+	sta	$4200,Y
+	sta	$4300,Y
+	sta	$4400,Y
+	sta	$4500,Y
+	sta	$4600,Y
+	sta	$4700,Y
+	sta	$4800,Y
+	sta	$4900,Y
+	sta	$4A00,Y
+	sta	$4B00,Y
+	sta	$4C00,Y
+	sta	$4D00,Y
+	sta	$4E00,Y
+	sta	$4F00,Y
+	sta	$5000,Y
+	sta	$5100,Y
+	sta	$5200,Y
+	sta	$5300,Y
+	sta	$5400,Y
+	sta	$5500,Y
+	sta	$5600,Y
+	sta	$5700,Y
+	sta	$5800,Y
+	sta	$5900,Y
+	sta	$5A00,Y
+	sta	$5B00,Y
+	sta	$5C00,Y
+	sta	$5D00,Y
+	sta	$5E00,Y
+	sta	$5F00,Y
+	iny
+	bne	hgr_page2_cls_loop
+
+	rts
+
diff --git a/demos/driven/part20_credits/Makefile b/demos/driven/part20_credits/Makefile
new file mode 100644
index 00000000..cc4be53d
--- /dev/null
+++ b/demos/driven/part20_credits/Makefile
@@ -0,0 +1,31 @@
+include ../../../Makefile.inc
+
+DOS33 = ../../../utils/dos33fs-utils/dos33
+DOS33_RAW = ../../../utils/dos33fs-utils/dos33_raw
+EMPTY_DISK = ../../../empty_disk/empty.dsk
+TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft
+LINKER_SCRIPTS = ../../../linker_scripts/
+
+all:	CREDITS
+
+####
+
+CREDITS:	credits.o
+	ld65 -o CREDITS credits.o -C $(LINKER_SCRIPTS)/apple2_8000.inc
+
+credits.o:	credits.s vertical_scroll.s \
+	font_4am_1x8.s ./fonts/font_4am_1x8_data.s \
+	../zp.inc ../hardware.inc ../qload.inc
+	ca65 -o credits.o credits.s -l credits.lst
+
+###
+
+#graphics/summary1_invert.hgr.zx02:	
+#	cd graphics && make
+
+###
+
+clean:
+		rm -f *~ *.o *.lst CREDITS
+
+
diff --git a/demos/driven/part20_credits/credits.s b/demos/driven/part20_credits/credits.s
new file mode 100644
index 00000000..d2a0cede
--- /dev/null
+++ b/demos/driven/part20_credits/credits.s
@@ -0,0 +1,219 @@
+; Credits
+
+; o/~ It's the credits, yeah, that's the best part
+;     When the movie ends and the reading starts o/~
+
+;
+; by deater (Vince Weaver) <vince@deater.net>
+
+.include "../zp.inc"
+.include "../hardware.inc"
+.include "../qload.inc"
+.include "../music.inc"
+
+mod7_table	= $1c00
+div7_table	= $1d00
+hposn_low	= $1e00
+hposn_high	= $1f00
+
+intro_start:
+	;=====================
+	; initializations
+	;=====================
+
+	bit	KEYRESET		; clear just in case
+
+	;===================
+	; Load graphics
+	;===================
+load_loop:
+
+	bit	SET_GR
+	bit	HIRES
+	bit	FULLGR
+	bit	PAGE1
+
+	lda	#0
+	jsr	hgr_page1_clearscreen
+
+;	jsr	hgr_make_tables
+
+
+	;=======================
+	;=======================
+	; scroll job
+	;=======================
+	;=======================
+
+	ldx	#8
+	stx	FRAME
+
+	; print message
+
+	lda	#192			; top of $4000 PAGE2
+	sta	CV
+
+	lda	#<final_credits
+	sta	BACKUP_OUTL
+	lda	#>final_credits
+	sta	BACKUP_OUTH
+
+do_scroll:
+
+	inc	FRAME
+
+	lda	FRAME
+	cmp	#9
+	bne	no_update_message
+
+;	and	#$7
+;	bne	no_update_message
+
+	lda	#0
+	sta	FRAME
+
+	; clear lines on Page2
+
+	; we cheat and setup 192-200 to map to top of page2
+
+	ldx	#200
+cl_outer_loop:
+	lda	hposn_low,X
+	sta	INL
+	lda	hposn_high,X
+	sta	INH
+	ldy	#39
+	lda	#0
+cl_inner_loop:
+	sta	(INL),Y
+	dey
+	bpl	cl_inner_loop
+	dex
+	cpx	#191
+	bne	cl_outer_loop
+
+urgh:
+	lda	BACKUP_OUTL
+	sta	OUTL
+	lda	BACKUP_OUTH
+	sta	OUTH
+
+	jsr	draw_condensed_1x8_again
+
+			; point to location after
+	sec		; always add 1
+;	inx
+	txa
+	adc	OUTL
+	sta	BACKUP_OUTL
+	lda	#0
+	adc	OUTH
+	sta	BACKUP_OUTH
+
+
+no_update_message:
+
+	jsr	hgr_vertical_scroll
+
+	jmp	do_scroll
+
+.align $100
+	.include	"../wait_keypress.s"
+;	.include	"../zx02_optim.s"
+	.include	"../hgr_clear_screen.s"
+	.include	"vertical_scroll.s"
+
+	.include	"font_4am_1x8.s"
+	.include	"fonts/font_4am_1x8_data.s"
+
+;	.include	"font_4am_1x10.s"
+;	.include	"fonts/font_4am_1x10_data.s"
+
+;	.include	"thumbnail_credits.s"
+
+	.include	"../irq_wait.s"
+
+
+;summary1_data:
+;	.incbin "graphics/summary1_invert.hgr.zx02"
+;summary2_data:
+;	.incbin "graphics/summary2_invert.hgr.zx02"
+
+
+final_credits:
+	.byte 12,"Apple ][ Reality",0
+	.byte 20," ",0
+	.byte 11,"by Deater / Desire",0
+	.byte 20," ",0
+	.byte 4,"This demo won the oldskool demo",0
+	.byte 5,"competition at Demosplash 2023",0
+	.byte 8,"held in Pittsburgh, PA,",0
+	.byte 12,"in November 2023.",0
+	.byte 20," ",0
+	.byte 13,"Apologies to:",0
+	.byte 14,"Future Crew",0
+	.byte 20," ",0
+
+	.byte 15,"Code used:",0
+	.byte  9,"French Touch -- Plasma",0
+	.byte  7,"DMSC -- ZX02 decompression",0
+	.byte  7,"qkumba -- fast disk loader",0
+	.byte 15,"4am - font",0
+	.byte  2,"K. Kennaway -- iipix image converter",0
+	.byte  3,"O. Schmidt -- sampled audio player",0
+	.byte  6,"Hellmood -- circles/sierzoom",0
+	.byte 20," ",0
+
+	.byte 11,"Special Thanks to:",0
+	.byte 5,"mA2E for providing intro music",0
+	.byte 7,"at the extreme-last minute",0
+	.byte 20," ",0
+
+	.byte 15,"Greets to:",0
+	.byte 14,"French Touch",0
+	.byte 18,"4am",0
+	.byte 17,"qkumba",0
+	.byte 17,"Grouik",0
+	.byte 14,"Fenarinarsa",0
+	.byte 14,"Ninjaforce",0
+	.byte 15,"T. Greene",0
+	.byte 15,"K. Savetz",0
+	.byte 15,"Boo Atari",0
+	.byte 15,"textfiles",0
+	.byte 13,"Stealth Susie",0
+	.byte 17,"wiz21b",0
+	.byte 17,"Trixter",0
+	.byte 18,"LGR",0
+	.byte 16,"Hellmood",0
+	.byte 17,"Foone",0
+	.byte 20," ",0
+	.byte 14,"Talbot 0101",0
+	.byte 12,"Utopia BBS (410)",0
+	.byte 10,"Weave's World Talker",0
+	.byte 8,"Tell 'em Deater sent ya",0
+	; end
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 12,"Apple II Forever",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte 20," ",0
+	.byte $FF
diff --git a/demos/driven/part20_credits/fonts/font_4am_1x8_data.s b/demos/driven/part20_credits/fonts/font_4am_1x8_data.s
new file mode 100644
index 00000000..927f1069
--- /dev/null
+++ b/demos/driven/part20_credits/fonts/font_4am_1x8_data.s
@@ -0,0 +1,880 @@
+font_1x8_row0:
+	.byte $08	 ; 
+	.byte $08	 ; 
+	.byte $00	 ; 
+	.byte $10	 ; 
+	.byte $10	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $08	 ; !
+	.byte $14	 ; "
+	.byte $14	 ; #
+	.byte $08	 ; $
+	.byte $06	 ; %
+	.byte $0C	 ; &
+	.byte $08	 ; '
+	.byte $08	 ; (
+	.byte $08	 ; )
+	.byte $00	 ; *
+	.byte $00	 ; +
+	.byte $00	 ; ,
+	.byte $00	 ; -
+	.byte $00	 ; .
+	.byte $00	 ; /
+	.byte $1C	 ; 0
+	.byte $08	 ; 1
+	.byte $1C	 ; 2
+	.byte $1C	 ; 3
+	.byte $10	 ; 4
+	.byte $3E	 ; 5
+	.byte $18	 ; 6
+	.byte $3E	 ; 7
+	.byte $1C	 ; 8
+	.byte $1C	 ; 9
+	.byte $00	 ; :
+	.byte $00	 ; ;
+	.byte $10	 ; <
+	.byte $00	 ; =
+	.byte $04	 ; >
+	.byte $1C	 ; ?
+	.byte $1C	 ; @
+	.byte $08	 ; A
+	.byte $1E	 ; B
+	.byte $18	 ; C
+	.byte $0E	 ; D
+	.byte $3E	 ; E
+	.byte $3E	 ; F
+	.byte $38	 ; G
+	.byte $22	 ; H
+	.byte $1C	 ; I
+	.byte $38	 ; J
+	.byte $26	 ; K
+	.byte $0E	 ; L
+	.byte $22	 ; M
+	.byte $22	 ; N
+	.byte $08	 ; O
+	.byte $1E	 ; P
+	.byte $1C	 ; Q
+	.byte $1E	 ; R
+	.byte $1C	 ; S
+	.byte $3E	 ; T
+	.byte $22	 ; U
+	.byte $22	 ; V
+	.byte $22	 ; W
+	.byte $22	 ; X
+	.byte $22	 ; Y
+	.byte $3E	 ; Z
+	.byte $3C	 ; [
+	.byte $00	 ; \
+	.byte $1E	 ; ]
+	.byte $08	 ; ^
+	.byte $00	 ; _
+	.byte $08	 ; `
+	.byte $00	 ; a
+	.byte $06	 ; b
+	.byte $00	 ; c
+	.byte $30	 ; d
+	.byte $00	 ; e
+	.byte $18	 ; f
+	.byte $00	 ; g
+	.byte $06	 ; h
+	.byte $08	 ; i
+	.byte $20	 ; j
+	.byte $06	 ; k
+	.byte $0C	 ; l
+	.byte $00	 ; m
+	.byte $00	 ; n
+	.byte $00	 ; o
+	.byte $00	 ; p
+	.byte $00	 ; q
+	.byte $00	 ; r
+	.byte $00	 ; s
+	.byte $00	 ; t
+	.byte $00	 ; u
+	.byte $00	 ; v
+	.byte $00	 ; w
+	.byte $00	 ; x
+	.byte $00	 ; y
+	.byte $00	 ; z
+	.byte $30	 ; {
+	.byte $08	 ; |
+	.byte $06	 ; }
+	.byte $2C	 ; ~
+	.byte $00	 ; 
+font_1x8_row1:
+	.byte $08	 ; 
+	.byte $08	 ; 
+	.byte $00	 ; 
+	.byte $08	 ; 
+	.byte $08	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $1C	 ; !
+	.byte $14	 ; "
+	.byte $14	 ; #
+	.byte $3C	 ; $
+	.byte $26	 ; %
+	.byte $12	 ; &
+	.byte $08	 ; '
+	.byte $04	 ; (
+	.byte $10	 ; )
+	.byte $22	 ; *
+	.byte $08	 ; +
+	.byte $00	 ; ,
+	.byte $00	 ; -
+	.byte $00	 ; .
+	.byte $20	 ; /
+	.byte $22	 ; 0
+	.byte $0C	 ; 1
+	.byte $22	 ; 2
+	.byte $22	 ; 3
+	.byte $18	 ; 4
+	.byte $02	 ; 5
+	.byte $04	 ; 6
+	.byte $22	 ; 7
+	.byte $22	 ; 8
+	.byte $22	 ; 9
+	.byte $08	 ; :
+	.byte $08	 ; ;
+	.byte $08	 ; <
+	.byte $00	 ; =
+	.byte $08	 ; >
+	.byte $22	 ; ?
+	.byte $22	 ; @
+	.byte $14	 ; A
+	.byte $24	 ; B
+	.byte $24	 ; C
+	.byte $14	 ; D
+	.byte $24	 ; E
+	.byte $24	 ; F
+	.byte $04	 ; G
+	.byte $22	 ; H
+	.byte $08	 ; I
+	.byte $10	 ; J
+	.byte $24	 ; K
+	.byte $04	 ; L
+	.byte $36	 ; M
+	.byte $26	 ; N
+	.byte $14	 ; O
+	.byte $24	 ; P
+	.byte $22	 ; Q
+	.byte $24	 ; R
+	.byte $22	 ; S
+	.byte $2A	 ; T
+	.byte $22	 ; U
+	.byte $22	 ; V
+	.byte $22	 ; W
+	.byte $22	 ; X
+	.byte $22	 ; Y
+	.byte $22	 ; Z
+	.byte $04	 ; [
+	.byte $02	 ; \
+	.byte $10	 ; ]
+	.byte $14	 ; ^
+	.byte $00	 ; _
+	.byte $08	 ; `
+	.byte $00	 ; a
+	.byte $04	 ; b
+	.byte $00	 ; c
+	.byte $10	 ; d
+	.byte $00	 ; e
+	.byte $24	 ; f
+	.byte $00	 ; g
+	.byte $04	 ; h
+	.byte $00	 ; i
+	.byte $00	 ; j
+	.byte $04	 ; k
+	.byte $08	 ; l
+	.byte $00	 ; m
+	.byte $00	 ; n
+	.byte $00	 ; o
+	.byte $00	 ; p
+	.byte $00	 ; q
+	.byte $00	 ; r
+	.byte $00	 ; s
+	.byte $04	 ; t
+	.byte $00	 ; u
+	.byte $00	 ; v
+	.byte $00	 ; w
+	.byte $00	 ; x
+	.byte $00	 ; y
+	.byte $00	 ; z
+	.byte $08	 ; {
+	.byte $08	 ; |
+	.byte $08	 ; }
+	.byte $1A	 ; ~
+	.byte $08	 ; 
+font_1x8_row2:
+	.byte $7F	 ; 
+	.byte $08	 ; 
+	.byte $7F	 ; 
+	.byte $3E	 ; 
+	.byte $36	 ; 
+	.byte $17	 ; 
+	.byte $74	 ; 
+	.byte $17	 ; 
+	.byte $74	 ; 
+	.byte $1F	 ; 
+	.byte $7C	 ; 
+	.byte $7F	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $1C	 ; !
+	.byte $14	 ; "
+	.byte $3E	 ; #
+	.byte $02	 ; $
+	.byte $10	 ; %
+	.byte $0C	 ; &
+	.byte $04	 ; '
+	.byte $02	 ; (
+	.byte $20	 ; )
+	.byte $1C	 ; *
+	.byte $08	 ; +
+	.byte $00	 ; ,
+	.byte $00	 ; -
+	.byte $00	 ; .
+	.byte $10	 ; /
+	.byte $32	 ; 0
+	.byte $0A	 ; 1
+	.byte $20	 ; 2
+	.byte $20	 ; 3
+	.byte $14	 ; 4
+	.byte $1E	 ; 5
+	.byte $02	 ; 6
+	.byte $10	 ; 7
+	.byte $22	 ; 8
+	.byte $22	 ; 9
+	.byte $08	 ; :
+	.byte $08	 ; ;
+	.byte $04	 ; <
+	.byte $3E	 ; =
+	.byte $10	 ; >
+	.byte $20	 ; ?
+	.byte $2A	 ; @
+	.byte $22	 ; A
+	.byte $24	 ; B
+	.byte $02	 ; C
+	.byte $24	 ; D
+	.byte $04	 ; E
+	.byte $04	 ; F
+	.byte $02	 ; G
+	.byte $22	 ; H
+	.byte $08	 ; I
+	.byte $10	 ; J
+	.byte $14	 ; K
+	.byte $04	 ; L
+	.byte $2A	 ; M
+	.byte $2A	 ; N
+	.byte $22	 ; O
+	.byte $24	 ; P
+	.byte $22	 ; Q
+	.byte $24	 ; R
+	.byte $02	 ; S
+	.byte $08	 ; T
+	.byte $22	 ; U
+	.byte $22	 ; V
+	.byte $22	 ; W
+	.byte $14	 ; X
+	.byte $14	 ; Y
+	.byte $10	 ; Z
+	.byte $04	 ; [
+	.byte $04	 ; \
+	.byte $10	 ; ]
+	.byte $22	 ; ^
+	.byte $00	 ; _
+	.byte $10	 ; `
+	.byte $1C	 ; a
+	.byte $04	 ; b
+	.byte $1C	 ; c
+	.byte $10	 ; d
+	.byte $1C	 ; e
+	.byte $04	 ; f
+	.byte $1C	 ; g
+	.byte $1C	 ; h
+	.byte $0C	 ; i
+	.byte $30	 ; j
+	.byte $24	 ; k
+	.byte $08	 ; l
+	.byte $16	 ; m
+	.byte $1A	 ; n
+	.byte $1C	 ; o
+	.byte $1E	 ; p
+	.byte $3C	 ; q
+	.byte $1A	 ; r
+	.byte $3C	 ; s
+	.byte $1E	 ; t
+	.byte $22	 ; u
+	.byte $22	 ; v
+	.byte $22	 ; w
+	.byte $22	 ; x
+	.byte $22	 ; y
+	.byte $3E	 ; z
+	.byte $08	 ; {
+	.byte $08	 ; |
+	.byte $08	 ; }
+	.byte $00	 ; ~
+	.byte $14	 ; 
+font_1x8_row3:
+	.byte $00	 ; 
+	.byte $08	 ; 
+	.byte $00	 ; 
+	.byte $7F	 ; 
+	.byte $41	 ; 
+	.byte $10	 ; 
+	.byte $04	 ; 
+	.byte $10	 ; 
+	.byte $04	 ; 
+	.byte $10	 ; 
+	.byte $04	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $08	 ; !
+	.byte $00	 ; "
+	.byte $14	 ; #
+	.byte $1C	 ; $
+	.byte $08	 ; %
+	.byte $2A	 ; &
+	.byte $00	 ; '
+	.byte $02	 ; (
+	.byte $20	 ; )
+	.byte $3E	 ; *
+	.byte $3E	 ; +
+	.byte $00	 ; ,
+	.byte $3E	 ; -
+	.byte $00	 ; .
+	.byte $08	 ; /
+	.byte $2A	 ; 0
+	.byte $08	 ; 1
+	.byte $18	 ; 2
+	.byte $18	 ; 3
+	.byte $12	 ; 4
+	.byte $20	 ; 5
+	.byte $1E	 ; 6
+	.byte $08	 ; 7
+	.byte $1C	 ; 8
+	.byte $3C	 ; 9
+	.byte $00	 ; :
+	.byte $00	 ; ;
+	.byte $02	 ; <
+	.byte $00	 ; =
+	.byte $20	 ; >
+	.byte $10	 ; ?
+	.byte $3A	 ; @
+	.byte $22	 ; A
+	.byte $1C	 ; B
+	.byte $02	 ; C
+	.byte $24	 ; D
+	.byte $1C	 ; E
+	.byte $1C	 ; F
+	.byte $02	 ; G
+	.byte $3E	 ; H
+	.byte $08	 ; I
+	.byte $10	 ; J
+	.byte $0C	 ; K
+	.byte $04	 ; L
+	.byte $22	 ; M
+	.byte $32	 ; N
+	.byte $22	 ; O
+	.byte $1C	 ; P
+	.byte $22	 ; Q
+	.byte $1C	 ; R
+	.byte $1C	 ; S
+	.byte $08	 ; T
+	.byte $22	 ; U
+	.byte $22	 ; V
+	.byte $2A	 ; W
+	.byte $08	 ; X
+	.byte $08	 ; Y
+	.byte $08	 ; Z
+	.byte $04	 ; [
+	.byte $08	 ; \
+	.byte $10	 ; ]
+	.byte $00	 ; ^
+	.byte $00	 ; _
+	.byte $00	 ; `
+	.byte $20	 ; a
+	.byte $1C	 ; b
+	.byte $22	 ; c
+	.byte $1C	 ; d
+	.byte $22	 ; e
+	.byte $0E	 ; f
+	.byte $22	 ; g
+	.byte $24	 ; h
+	.byte $08	 ; i
+	.byte $20	 ; j
+	.byte $14	 ; k
+	.byte $08	 ; l
+	.byte $2A	 ; m
+	.byte $26	 ; n
+	.byte $22	 ; o
+	.byte $24	 ; p
+	.byte $12	 ; q
+	.byte $24	 ; r
+	.byte $02	 ; s
+	.byte $04	 ; t
+	.byte $22	 ; u
+	.byte $22	 ; v
+	.byte $22	 ; w
+	.byte $14	 ; x
+	.byte $22	 ; y
+	.byte $10	 ; z
+	.byte $06	 ; {
+	.byte $00	 ; |
+	.byte $30	 ; }
+	.byte $00	 ; ~
+	.byte $22	 ; 
+font_1x8_row4:
+	.byte $7F	 ; 
+	.byte $08	 ; 
+	.byte $7F	 ; 
+	.byte $3F	 ; 
+	.byte $21	 ; 
+	.byte $17	 ; 
+	.byte $74	 ; 
+	.byte $1F	 ; 
+	.byte $7C	 ; 
+	.byte $17	 ; 
+	.byte $74	 ; 
+	.byte $7F	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $08	 ; !
+	.byte $00	 ; "
+	.byte $3E	 ; #
+	.byte $20	 ; $
+	.byte $04	 ; %
+	.byte $12	 ; &
+	.byte $00	 ; '
+	.byte $02	 ; (
+	.byte $20	 ; )
+	.byte $1C	 ; *
+	.byte $08	 ; +
+	.byte $08	 ; ,
+	.byte $00	 ; -
+	.byte $00	 ; .
+	.byte $04	 ; /
+	.byte $26	 ; 0
+	.byte $08	 ; 1
+	.byte $04	 ; 2
+	.byte $20	 ; 3
+	.byte $3E	 ; 4
+	.byte $20	 ; 5
+	.byte $22	 ; 6
+	.byte $04	 ; 7
+	.byte $22	 ; 8
+	.byte $20	 ; 9
+	.byte $08	 ; :
+	.byte $08	 ; ;
+	.byte $04	 ; <
+	.byte $3E	 ; =
+	.byte $10	 ; >
+	.byte $08	 ; ?
+	.byte $1A	 ; @
+	.byte $3E	 ; A
+	.byte $24	 ; B
+	.byte $02	 ; C
+	.byte $24	 ; D
+	.byte $04	 ; E
+	.byte $04	 ; F
+	.byte $32	 ; G
+	.byte $22	 ; H
+	.byte $08	 ; I
+	.byte $12	 ; J
+	.byte $0C	 ; K
+	.byte $04	 ; L
+	.byte $22	 ; M
+	.byte $22	 ; N
+	.byte $22	 ; O
+	.byte $04	 ; P
+	.byte $2A	 ; Q
+	.byte $0C	 ; R
+	.byte $20	 ; S
+	.byte $08	 ; T
+	.byte $22	 ; U
+	.byte $22	 ; V
+	.byte $2A	 ; W
+	.byte $14	 ; X
+	.byte $08	 ; Y
+	.byte $04	 ; Z
+	.byte $04	 ; [
+	.byte $10	 ; \
+	.byte $10	 ; ]
+	.byte $00	 ; ^
+	.byte $00	 ; _
+	.byte $00	 ; `
+	.byte $3C	 ; a
+	.byte $24	 ; b
+	.byte $02	 ; c
+	.byte $12	 ; d
+	.byte $3E	 ; e
+	.byte $04	 ; f
+	.byte $22	 ; g
+	.byte $24	 ; h
+	.byte $08	 ; i
+	.byte $20	 ; j
+	.byte $0C	 ; k
+	.byte $08	 ; l
+	.byte $2A	 ; m
+	.byte $22	 ; n
+	.byte $22	 ; o
+	.byte $24	 ; p
+	.byte $12	 ; q
+	.byte $04	 ; r
+	.byte $1C	 ; s
+	.byte $04	 ; t
+	.byte $22	 ; u
+	.byte $22	 ; v
+	.byte $2A	 ; w
+	.byte $08	 ; x
+	.byte $22	 ; y
+	.byte $08	 ; z
+	.byte $08	 ; {
+	.byte $08	 ; |
+	.byte $08	 ; }
+	.byte $00	 ; ~
+	.byte $22	 ; 
+font_1x8_row5:
+	.byte $00	 ; 
+	.byte $08	 ; 
+	.byte $08	 ; 
+	.byte $3F	 ; 
+	.byte $21	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; !
+	.byte $00	 ; "
+	.byte $14	 ; #
+	.byte $1E	 ; $
+	.byte $32	 ; %
+	.byte $12	 ; &
+	.byte $00	 ; '
+	.byte $04	 ; (
+	.byte $10	 ; )
+	.byte $22	 ; *
+	.byte $08	 ; +
+	.byte $08	 ; ,
+	.byte $00	 ; -
+	.byte $08	 ; .
+	.byte $02	 ; /
+	.byte $22	 ; 0
+	.byte $08	 ; 1
+	.byte $22	 ; 2
+	.byte $22	 ; 3
+	.byte $10	 ; 4
+	.byte $22	 ; 5
+	.byte $22	 ; 6
+	.byte $04	 ; 7
+	.byte $22	 ; 8
+	.byte $10	 ; 9
+	.byte $08	 ; :
+	.byte $08	 ; ;
+	.byte $08	 ; <
+	.byte $00	 ; =
+	.byte $08	 ; >
+	.byte $00	 ; ?
+	.byte $02	 ; @
+	.byte $22	 ; A
+	.byte $24	 ; B
+	.byte $24	 ; C
+	.byte $14	 ; D
+	.byte $24	 ; E
+	.byte $04	 ; F
+	.byte $24	 ; G
+	.byte $22	 ; H
+	.byte $08	 ; I
+	.byte $12	 ; J
+	.byte $14	 ; K
+	.byte $24	 ; L
+	.byte $22	 ; M
+	.byte $22	 ; N
+	.byte $14	 ; O
+	.byte $04	 ; P
+	.byte $1C	 ; Q
+	.byte $14	 ; R
+	.byte $22	 ; S
+	.byte $08	 ; T
+	.byte $22	 ; U
+	.byte $14	 ; V
+	.byte $36	 ; W
+	.byte $22	 ; X
+	.byte $08	 ; Y
+	.byte $22	 ; Z
+	.byte $04	 ; [
+	.byte $20	 ; \
+	.byte $10	 ; ]
+	.byte $00	 ; ^
+	.byte $00	 ; _
+	.byte $00	 ; `
+	.byte $22	 ; a
+	.byte $24	 ; b
+	.byte $22	 ; c
+	.byte $12	 ; d
+	.byte $02	 ; e
+	.byte $04	 ; f
+	.byte $3C	 ; g
+	.byte $24	 ; h
+	.byte $08	 ; i
+	.byte $22	 ; j
+	.byte $14	 ; k
+	.byte $08	 ; l
+	.byte $2A	 ; m
+	.byte $22	 ; n
+	.byte $22	 ; o
+	.byte $1C	 ; p
+	.byte $1C	 ; q
+	.byte $04	 ; r
+	.byte $20	 ; s
+	.byte $24	 ; t
+	.byte $32	 ; u
+	.byte $14	 ; v
+	.byte $2A	 ; w
+	.byte $14	 ; x
+	.byte $3C	 ; y
+	.byte $04	 ; z
+	.byte $08	 ; {
+	.byte $08	 ; |
+	.byte $08	 ; }
+	.byte $00	 ; ~
+	.byte $3E	 ; 
+font_1x8_row6:
+	.byte $00	 ; 
+	.byte $08	 ; 
+	.byte $08	 ; 
+	.byte $7E	 ; 
+	.byte $4A	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $08	 ; !
+	.byte $00	 ; "
+	.byte $14	 ; #
+	.byte $08	 ; $
+	.byte $30	 ; %
+	.byte $2C	 ; &
+	.byte $00	 ; '
+	.byte $08	 ; (
+	.byte $08	 ; )
+	.byte $00	 ; *
+	.byte $00	 ; +
+	.byte $04	 ; ,
+	.byte $00	 ; -
+	.byte $08	 ; .
+	.byte $00	 ; /
+	.byte $1C	 ; 0
+	.byte $3E	 ; 1
+	.byte $3E	 ; 2
+	.byte $1C	 ; 3
+	.byte $38	 ; 4
+	.byte $1C	 ; 5
+	.byte $1C	 ; 6
+	.byte $04	 ; 7
+	.byte $1C	 ; 8
+	.byte $0C	 ; 9
+	.byte $00	 ; :
+	.byte $04	 ; ;
+	.byte $10	 ; <
+	.byte $00	 ; =
+	.byte $04	 ; >
+	.byte $08	 ; ?
+	.byte $3C	 ; @
+	.byte $22	 ; A
+	.byte $1E	 ; B
+	.byte $18	 ; C
+	.byte $0E	 ; D
+	.byte $3E	 ; E
+	.byte $0E	 ; F
+	.byte $38	 ; G
+	.byte $22	 ; H
+	.byte $1C	 ; I
+	.byte $0C	 ; J
+	.byte $26	 ; K
+	.byte $3E	 ; L
+	.byte $22	 ; M
+	.byte $22	 ; N
+	.byte $08	 ; O
+	.byte $0E	 ; P
+	.byte $20	 ; Q
+	.byte $26	 ; R
+	.byte $1C	 ; S
+	.byte $1C	 ; T
+	.byte $1C	 ; U
+	.byte $08	 ; V
+	.byte $22	 ; W
+	.byte $22	 ; X
+	.byte $1C	 ; Y
+	.byte $3E	 ; Z
+	.byte $3C	 ; [
+	.byte $00	 ; \
+	.byte $1E	 ; ]
+	.byte $00	 ; ^
+	.byte $00	 ; _
+	.byte $00	 ; `
+	.byte $3C	 ; a
+	.byte $1C	 ; b
+	.byte $1C	 ; c
+	.byte $3C	 ; d
+	.byte $1C	 ; e
+	.byte $0E	 ; f
+	.byte $20	 ; g
+	.byte $26	 ; h
+	.byte $1C	 ; i
+	.byte $22	 ; j
+	.byte $24	 ; k
+	.byte $1C	 ; l
+	.byte $22	 ; m
+	.byte $22	 ; n
+	.byte $1C	 ; o
+	.byte $04	 ; p
+	.byte $10	 ; q
+	.byte $0E	 ; r
+	.byte $1E	 ; s
+	.byte $18	 ; t
+	.byte $2C	 ; u
+	.byte $08	 ; v
+	.byte $36	 ; w
+	.byte $22	 ; x
+	.byte $20	 ; y
+	.byte $3E	 ; z
+	.byte $30	 ; {
+	.byte $08	 ; |
+	.byte $06	 ; }
+	.byte $00	 ; ~
+	.byte $00	 ; 
+font_1x8_row7:
+	.byte $00	 ; 
+	.byte $08	 ; 
+	.byte $08	 ; 
+	.byte $36	 ; 
+	.byte $36	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $14	 ; 
+	.byte $00	 ; 
+	.byte $00	 ; !
+	.byte $00	 ; "
+	.byte $00	 ; #
+	.byte $00	 ; $
+	.byte $00	 ; %
+	.byte $00	 ; &
+	.byte $00	 ; '
+	.byte $00	 ; (
+	.byte $00	 ; )
+	.byte $00	 ; *
+	.byte $00	 ; +
+	.byte $00	 ; ,
+	.byte $00	 ; -
+	.byte $00	 ; .
+	.byte $00	 ; /
+	.byte $00	 ; 0
+	.byte $00	 ; 1
+	.byte $00	 ; 2
+	.byte $00	 ; 3
+	.byte $00	 ; 4
+	.byte $00	 ; 5
+	.byte $00	 ; 6
+	.byte $00	 ; 7
+	.byte $00	 ; 8
+	.byte $00	 ; 9
+	.byte $00	 ; :
+	.byte $00	 ; ;
+	.byte $00	 ; <
+	.byte $00	 ; =
+	.byte $00	 ; >
+	.byte $00	 ; ?
+	.byte $00	 ; @
+	.byte $00	 ; A
+	.byte $00	 ; B
+	.byte $00	 ; C
+	.byte $00	 ; D
+	.byte $00	 ; E
+	.byte $00	 ; F
+	.byte $00	 ; G
+	.byte $00	 ; H
+	.byte $00	 ; I
+	.byte $00	 ; J
+	.byte $00	 ; K
+	.byte $00	 ; L
+	.byte $00	 ; M
+	.byte $00	 ; N
+	.byte $00	 ; O
+	.byte $00	 ; P
+	.byte $00	 ; Q
+	.byte $00	 ; R
+	.byte $00	 ; S
+	.byte $00	 ; T
+	.byte $00	 ; U
+	.byte $00	 ; V
+	.byte $00	 ; W
+	.byte $00	 ; X
+	.byte $00	 ; Y
+	.byte $00	 ; Z
+	.byte $00	 ; [
+	.byte $00	 ; \
+	.byte $00	 ; ]
+	.byte $00	 ; ^
+	.byte $7F	 ; _
+	.byte $00	 ; `
+	.byte $00	 ; a
+	.byte $00	 ; b
+	.byte $00	 ; c
+	.byte $00	 ; d
+	.byte $00	 ; e
+	.byte $00	 ; f
+	.byte $1E	 ; g
+	.byte $00	 ; h
+	.byte $00	 ; i
+	.byte $1C	 ; j
+	.byte $00	 ; k
+	.byte $00	 ; l
+	.byte $00	 ; m
+	.byte $00	 ; n
+	.byte $00	 ; o
+	.byte $0E	 ; p
+	.byte $38	 ; q
+	.byte $00	 ; r
+	.byte $00	 ; s
+	.byte $00	 ; t
+	.byte $00	 ; u
+	.byte $00	 ; v
+	.byte $00	 ; w
+	.byte $00	 ; x
+	.byte $1E	 ; y
+	.byte $00	 ; z
+	.byte $00	 ; {
+	.byte $00	 ; |
+	.byte $00	 ; }
+	.byte $00	 ; ~
+	.byte $00	 ; 
diff --git a/demos/driven/part20_credits/vertical_scroll.s b/demos/driven/part20_credits/vertical_scroll.s
new file mode 100644
index 00000000..31d75f07
--- /dev/null
+++ b/demos/driven/part20_credits/vertical_scroll.s
@@ -0,0 +1,29 @@
+
+hgr_vertical_scroll:
+	ldx	#0
+
+outer_vscroll_loop:
+	lda	hposn_low,X
+	sta	OUTL
+	lda	hposn_high,X
+	sta	OUTH
+
+	inx
+
+	lda	hposn_low,X
+	sta	INL
+	lda	hposn_high,X
+	sta	INH
+
+	ldy	#39
+inner_vscroll_loop:
+	lda	(INL),Y
+	sta	(OUTL),Y
+	dey
+	bpl	inner_vscroll_loop
+
+	cpx	#200
+	bne	outer_vscroll_loop
+
+	rts
+
diff --git a/demos/driven/qload.s b/demos/driven/qload.s
index a00ff901..ed3f508f 100644
--- a/demos/driven/qload.s
+++ b/demos/driven/qload.s
@@ -163,47 +163,46 @@ error_string:
 .endif
 
 which_disk_array:
-	.byte 1,1,1,1		; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte 1,1,1,1		; GORILLA,LEAVES,LENS,PLASMA
-	.byte 1,1,1,1		; CUBE,DOTS,SPHERES,OCEAN
-	.byte 1,1		; POLAR,FAKE_BIOS
+	.byte 1,1,1,1		; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte 1,1,1,1		;
+	.byte 1,1,1,1		;
+	.byte 1,1		;
 
 load_address_array:
-	.byte $D0,$D0,$80,$80	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte $60,$60,$60,$60	; GORILLA,LEAVES,LENS,PLASMA
-	.byte $60,$60,$60,$60	; CUBE,DOTS,SPHERES,OCEAN
-	.byte $60,$80		; POLAR,FAKE_BIOS
+	.byte $D0,$D0,$80,$80	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte $60,$60,$60,$60	;
+	.byte $60,$60,$60,$60	;
+	.byte $60,$80		;
 
 start_address:
-	.byte $D0,$D0,$80,$80	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte $60,$60,$60,$80	; GORILLA,LEAVES,LENS,PLASMA
-	.byte $80,$80,$80,$60	; CUBE,DOTS,SPHERES,OCEAN
-	.byte $80,$80		; POLAR,FAKE_BIOS
+	.byte $D0,$D0,$80,$80	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte $60,$60,$60,$80	;
+	.byte $80,$80,$80,$60	;
+	.byte $80,$80		;
 
 aux_dest:
-	.byte $D0,$D0,$A0,$A0	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte $70,$50,$40,$30	; GORILLA,LEAVES,LENS,PLASMA
-	.byte $20,$10,$80,$20	; CUBE,DOTS,SPHERES,OCEAN
-	.byte $10,$A0		; POLAR,FAKE_BIOS
+	.byte $D0,$D0,$A0,$A0	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte $70,$50,$40,$30	;
+	.byte $20,$10,$80,$20	;
+	.byte $10,$A0		;
 
 track_array:
-	.byte 2,4,10,15		; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte 19,21,23,24	; GORILLA,LEAVES,LENS,PLASMA
-	.byte 25,26,27,28	; CUBE,DOTS,SPHERES,OCEAN
-	.byte 34,9		; POLAR,FAKE_BIOS
+	.byte 2,4,9,13		; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte 19,21,23,24	;
+	.byte 25,26,27,28	;
+	.byte 34,9		;
 
 sector_array:
-	.byte 0,0,0,0		; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte 0,0,0,0		; GORILLA,LEAVES,LENS,PLASMA
-	.byte 0,0,0,0		; CUBE,DOTS,SPHERES,OCEAN
-	.byte 0,0		; POLAR,FAKE_BIOS
-
+	.byte 0,0,0,0		; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte 0,0,0,0		;
+	.byte 0,0,0,0		;
+	.byte 0,0		;
 
 length_array:
-	.byte 32,48,64,48	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS
-	.byte 32,32,16,16	; GORILLA,LEAVES,LENS,PLASMA
-	.byte 16,16,16,96	; CUBE,DOTS,SPHERES,OCEAN
-	.byte 16,16		; POLAR,FAKE_BIOS
+	.byte 32,48,48,64	; MUSIC_INTRO, MUSIC_MAIN, INTRO, CREDITS
+	.byte 32,32,16,16	;
+	.byte 16,16,16,96	;
+	.byte 16,16		;
 
 PT3_ENABLE_APPLE_IIC = 1
 
diff --git a/demos/driven/start.s b/demos/driven/start.s
index d6129f53..7abf136f 100644
--- a/demos/driven/start.s
+++ b/demos/driven/start.s
@@ -148,7 +148,7 @@ load_program_loop:
 
 	; load from disk
 
-	lda     #13		; INTRO
+	lda     #2		; INTRO
 	sta     WHICH_LOAD
 	jsr     load_file
 
@@ -161,7 +161,7 @@ load_program_loop:
 	cli			; start music
 
 	jsr	$8000
-.if 0
+
 
 	;=======================
 	;=======================
@@ -173,70 +173,25 @@ load_program_loop:
 	jsr	mute_ay_both
 	jsr	clear_ay_both		; stop from making noise
 
-	; load music
+	; load credits
 
-	lda	#1		; MUSIC_MAIN
+	lda	#3			; CREDITS
 	sta	WHICH_LOAD
 	jsr	load_file
 
-	; load from disk
-
-	lda     #3		; CHESS
-	sta     WHICH_LOAD
-	jsr     load_file
-
 
 	; restart music
 
-
-	;============================
-	; Re-Init the Mockingboard
-	;============================
-
-	; NOTE: I don't know how much of this is actually necessary
-	;	wasted a lot of time debugging, leaving it as-is
-	;	as it seems to be working
-
-	lda	#0
-	sta	DONE_PLAYING
-
-	lda	#1
-	sta	LOOP
-
-	;========================
-	; patch mockingboard
-
-	lda	SOUND_STATUS
-	beq	skip_mbp2
-        jsr     mockingboard_patch      ; patch to work in slots other than 4?
-skip_mbp2:
-
-	jsr	mockingboard_init
-	;=======================
-	; Set up 50Hz interrupt
-	;========================
-
-
-	jsr	mockingboard_setup_interrupt
-	jsr	reset_ay_both
-	jsr	clear_ay_both
-
-	;==================
-	; init song
-	;==================
-
-	jsr	pt3_init_song
-
 	cli		; start interrupts (music)
 
 	;=======================
 	;=======================
-	; Run Chess
+	; Run Credits
 	;=======================
 	;=======================
 
 	jsr	$8000
-
+.if 0
 	;==========================
 	;==========================
 	; Run 4-9, copy from AUX