mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-10 08:23:49 +00:00
mode7_demo: split off scroller code
This commit is contained in:
parent
a3c4beea48
commit
3281551767
193
asm_routines/gr_scroll.s
Normal file
193
asm_routines/gr_scroll.s
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
scroll_row1 EQU $8A00
|
||||||
|
scroll_row2 EQU $8B00
|
||||||
|
scroll_row3 EQU $8C00
|
||||||
|
scroll_row4 EQU $8D00
|
||||||
|
|
||||||
|
SCROLL_LENGTH EQU $61
|
||||||
|
OFFSET EQU $62
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; scroll some text
|
||||||
|
;========================
|
||||||
|
; RLE compressed data in INL/INH
|
||||||
|
; CV is Y position to display at
|
||||||
|
|
||||||
|
gr_scroll:
|
||||||
|
lda #0
|
||||||
|
sta OFFSET
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; decompress scroll text
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
jsr decompress_scroll
|
||||||
|
|
||||||
|
|
||||||
|
scroll_loop:
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
ldy CV
|
||||||
|
lsr
|
||||||
|
|
||||||
|
lda gr_offsets,Y ; get position
|
||||||
|
sta sm1+1
|
||||||
|
lda gr_offsets+2,Y ; get position
|
||||||
|
sta sm2+1
|
||||||
|
lda gr_offsets+4,Y ; get position
|
||||||
|
sta sm3+1
|
||||||
|
lda gr_offsets+6,Y ; get position
|
||||||
|
sta sm4+1
|
||||||
|
|
||||||
|
|
||||||
|
iny
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
lda gr_offsets,Y ; get position
|
||||||
|
adc DRAW_PAGE
|
||||||
|
sta sm1+2
|
||||||
|
lda gr_offsets+2,Y ; get position
|
||||||
|
adc DRAW_PAGE
|
||||||
|
sta sm2+2
|
||||||
|
lda gr_offsets+4,Y ; get position
|
||||||
|
adc DRAW_PAGE
|
||||||
|
sta sm3+2
|
||||||
|
lda gr_offsets+6,Y ; get position
|
||||||
|
adc DRAW_PAGE
|
||||||
|
sta sm4+2
|
||||||
|
|
||||||
|
ldy OFFSET
|
||||||
|
|
||||||
|
draw_loop:
|
||||||
|
|
||||||
|
lda scroll_row1,Y
|
||||||
|
sm1:
|
||||||
|
sta $400,X
|
||||||
|
|
||||||
|
lda scroll_row2,Y
|
||||||
|
sm2:
|
||||||
|
sta $480,X
|
||||||
|
|
||||||
|
lda scroll_row3,Y
|
||||||
|
sm3:
|
||||||
|
sta $500,X
|
||||||
|
|
||||||
|
lda scroll_row4,Y
|
||||||
|
sm4:
|
||||||
|
sta $580,X
|
||||||
|
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
cpx #40
|
||||||
|
bne draw_loop
|
||||||
|
|
||||||
|
;==================
|
||||||
|
; flip pages
|
||||||
|
;==================
|
||||||
|
|
||||||
|
jsr page_flip ; 6
|
||||||
|
|
||||||
|
;==================
|
||||||
|
; delay
|
||||||
|
;==================
|
||||||
|
|
||||||
|
lda #125
|
||||||
|
jsr WAIT
|
||||||
|
|
||||||
|
|
||||||
|
;==================
|
||||||
|
; loop forever
|
||||||
|
;==================
|
||||||
|
clc
|
||||||
|
lda OFFSET
|
||||||
|
adc #40
|
||||||
|
cmp SCROLL_LENGTH
|
||||||
|
beq done_scrolling
|
||||||
|
inc OFFSET
|
||||||
|
jmp scroll_loop ; 3
|
||||||
|
|
||||||
|
done_scrolling:
|
||||||
|
rts
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; decompress scroll
|
||||||
|
;=======================
|
||||||
|
decompress_scroll:
|
||||||
|
ldy #0
|
||||||
|
jsr scroll_load_and_increment
|
||||||
|
sta SCROLL_LENGTH
|
||||||
|
|
||||||
|
lda #<scroll_row1
|
||||||
|
sta OUTL
|
||||||
|
lda #>scroll_row1
|
||||||
|
sta OUTH
|
||||||
|
|
||||||
|
decompress_scroll_loop:
|
||||||
|
jsr scroll_load_and_increment ; load compressed value
|
||||||
|
|
||||||
|
cmp #$A1 ; EOF marker
|
||||||
|
beq done_decompress_scroll ; if EOF, exit
|
||||||
|
|
||||||
|
pha ; save
|
||||||
|
|
||||||
|
and #$f0 ; mask
|
||||||
|
cmp #$a0 ; see if special AX
|
||||||
|
beq decompress_scroll_special
|
||||||
|
|
||||||
|
pla ; note, PLA sets flags!
|
||||||
|
|
||||||
|
ldx #$1 ; only want to print 1
|
||||||
|
bne decompress_scroll_run
|
||||||
|
|
||||||
|
decompress_scroll_special:
|
||||||
|
pla
|
||||||
|
|
||||||
|
and #$0f ; check if was A0
|
||||||
|
|
||||||
|
bne decompress_scroll_color ; if A0 need to read run, color
|
||||||
|
|
||||||
|
decompress_scroll_large:
|
||||||
|
jsr scroll_load_and_increment ; get run length
|
||||||
|
|
||||||
|
decompress_scroll_color:
|
||||||
|
tax ; put runlen into X
|
||||||
|
jsr scroll_load_and_increment ; get color
|
||||||
|
|
||||||
|
decompress_scroll_run:
|
||||||
|
sta (OUTL),Y
|
||||||
|
pha
|
||||||
|
|
||||||
|
clc ; increment 16-bit pointer
|
||||||
|
lda OUTL
|
||||||
|
adc #$1
|
||||||
|
sta OUTL
|
||||||
|
lda OUTH
|
||||||
|
adc #$0
|
||||||
|
sta OUTH
|
||||||
|
|
||||||
|
pla
|
||||||
|
|
||||||
|
dex ; repeat for X times
|
||||||
|
bne decompress_scroll_run
|
||||||
|
|
||||||
|
beq decompress_scroll_loop ; get next run
|
||||||
|
|
||||||
|
done_decompress_scroll:
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
scroll_load_and_increment:
|
||||||
|
lda (INL),Y ; load and increment 16-bit pointer
|
||||||
|
pha
|
||||||
|
clc
|
||||||
|
lda INL
|
||||||
|
adc #$1
|
||||||
|
sta INL
|
||||||
|
lda INH
|
||||||
|
adc #$0
|
||||||
|
sta INH
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
171
mode7/scroller.c
171
mode7/scroller.c
@ -58,7 +58,18 @@ static unsigned char font[256][9]={
|
|||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
|
{2,
|
||||||
|
0x00,
|
||||||
|
0x00, //
|
||||||
|
0x00, //
|
||||||
|
0x00, //
|
||||||
|
0x00, //
|
||||||
|
0x00, //
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
},
|
||||||
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
{0,0,0,0,0,0,0,0,0}, // 48
|
{0,0,0,0,0,0,0,0,0}, // 48
|
||||||
/*
|
/*
|
||||||
@ -166,24 +177,83 @@ static unsigned char font[256][9]={
|
|||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{4,
|
||||||
|
0x00,
|
||||||
|
0xe0, // ******
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0xe0, // ******
|
||||||
|
},
|
||||||
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
|
||||||
/*
|
/*
|
||||||
****** **** ** ** ** ** ** ** ** **** ******
|
**** ** **
|
||||||
** ** ** ** ** **** **** **** ** ** ** ** **
|
** ** **
|
||||||
** ** ** ** ** ** ** ** **** ** ** ** ** **
|
** ** **
|
||||||
** ** **** ** ** ** ** **** ** ** ******
|
** ****
|
||||||
** ** ** ** ** ** ** ** **** ** ** **
|
** ** **
|
||||||
** ** ** ** ** ** ** ** ** ** ** ** **
|
** ** ** **
|
||||||
****** **** ** ** ******** ** ** ** ** **** **
|
**** ** **
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
{5,
|
||||||
|
0x00,
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
0xf0, // ********
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{6,
|
||||||
|
0x00,
|
||||||
|
0x88, // ** **
|
||||||
|
0xd8, // **** ****
|
||||||
|
0xa8, // ** ** **
|
||||||
|
0x88, // ** **
|
||||||
|
0x88, // ** **
|
||||||
|
0x88, // ** **
|
||||||
|
0x88, // ** **
|
||||||
|
},
|
||||||
|
{5,
|
||||||
|
0x00,
|
||||||
|
0x90, // ** **
|
||||||
|
0xd0, // **** **
|
||||||
|
0xd0, // **** **
|
||||||
|
0xb0, // ** ****
|
||||||
|
0xb0, // ** ****
|
||||||
|
0x90, // ** **
|
||||||
|
0x90, // ** **
|
||||||
|
},
|
||||||
|
{5,
|
||||||
|
0x00,
|
||||||
|
0x60, // ****
|
||||||
|
0x90, // ** **
|
||||||
|
0x90, // ** **
|
||||||
|
0x90, // ** **
|
||||||
|
0x90, // ** **
|
||||||
|
0x90, // ** **
|
||||||
|
0x60, // ****
|
||||||
|
},
|
||||||
|
{5,
|
||||||
|
0x00,
|
||||||
|
0xe0, // ******
|
||||||
|
0x90, // ** **
|
||||||
|
0x90, // ** **
|
||||||
|
0xe0, // ******
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
0x80, // **
|
||||||
|
},
|
||||||
|
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -236,10 +306,11 @@ static unsigned char font[256][9]={
|
|||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
0x90, // ****
|
0x60, // ****
|
||||||
},
|
},
|
||||||
|
|
||||||
{5,
|
{5,
|
||||||
|
0x00,
|
||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
0x90, // ** **
|
0x90, // ** **
|
||||||
@ -259,19 +330,35 @@ static unsigned char font[256][9]={
|
|||||||
0xd8, // **** ****
|
0xd8, // **** ****
|
||||||
0x88, // ** **
|
0x88, // ** **
|
||||||
},
|
},
|
||||||
|
{4,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0x00,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0x40, // **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
},
|
||||||
|
{4,
|
||||||
|
0x00,
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
},
|
||||||
{0,0,0,0,0,0,0,0,0},
|
{0,0,0,0,0,0,0,0,0},
|
||||||
/*
|
/*
|
||||||
** ** ** ** **********
|
**********
|
||||||
** ** ** ** **
|
**
|
||||||
** ** ** ** **
|
**
|
||||||
** ** **
|
**
|
||||||
** ** ** **
|
**
|
||||||
** ** ** **
|
**
|
||||||
** ** ** **********
|
**********
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -333,10 +420,20 @@ static int rle_compress(int color, int j) {
|
|||||||
return need_comma;
|
return need_comma;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vmw_logo[4][18]={
|
||||||
|
{0x10,0x10,0x10,0x10,0x10,0x40, 0x20,0x20,0x20,0x20,0x20,0x40, 0x20,0x20,0x20,0x20,0x20,0x00},
|
||||||
|
{0x11,0x11,0x11,0x11,0x11,0x44, 0x22,0x22,0x22,0x22,0x22,0x44, 0x22,0x22,0x22,0x22,0x22,0x00},
|
||||||
|
{0x00,0x11,0x11,0x11,0x44,0x44, 0x44,0x22,0x22,0x22,0x44,0x44, 0x44,0x22,0x22,0x22,0x00,0x00},
|
||||||
|
{0x00,0x00,0x11,0x44,0x44,0x44, 0x44,0x44,0x22,0x44,0x44,0x44, 0x44,0x44,0x22,0x00,0x00,0x00},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
//char string[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
//char string[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||||
char string[]=" \001DEATER \002WAS \003HERE!!! ";
|
// char string[]=" \001DEATER \002WAS \003HERE!!! ";
|
||||||
|
char string[]=" \001BY DEATER... \002A \010 PRODUCTION ";
|
||||||
|
// char string[]="\003* APPLE ][ FOREVER * ";
|
||||||
int length=0,width=0,x,y,i,j;
|
int length=0,width=0,x,y,i,j;
|
||||||
int color,color1,color2;
|
int color,color1,color2;
|
||||||
int which_color=0;
|
int which_color=0;
|
||||||
@ -345,6 +442,26 @@ int main(int argc, char **argv) {
|
|||||||
for(i=0;i<strlen(string);i++) {
|
for(i=0;i<strlen(string);i++) {
|
||||||
if (string[i]<5) { which_color=string[i]-1; continue;}
|
if (string[i]<5) { which_color=string[i]-1; continue;}
|
||||||
|
|
||||||
|
/* VMW logo */
|
||||||
|
if (string[i]==8) {
|
||||||
|
width=18;
|
||||||
|
// ********** ********** **********
|
||||||
|
// ********** ********** **********
|
||||||
|
// ********** ********** **********
|
||||||
|
// ****** ****** ******
|
||||||
|
// ****** ****** ******
|
||||||
|
// ** ** **
|
||||||
|
// ** ** **
|
||||||
|
for(x=0;x<width;x++) {
|
||||||
|
for(j=0;j<4;j++) {
|
||||||
|
row[j][length]=vmw_logo[j][x];
|
||||||
|
}
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
width=font[(int)string[i]][0];
|
width=font[(int)string[i]][0];
|
||||||
for(x=0;x<width;x++) {
|
for(x=0;x<width;x++) {
|
||||||
for(j=0;j<4;j++) {
|
for(j=0;j<4;j++) {
|
||||||
|
@ -19,12 +19,13 @@ mode7_demo.dsk: $(DOS33) MODE7_DEMO
|
|||||||
MODE7_DEMO: mode7_demo.o
|
MODE7_DEMO: mode7_demo.o
|
||||||
ld65 -o MODE7_DEMO mode7_demo.o -C ./apple2_1000.inc
|
ld65 -o MODE7_DEMO mode7_demo.o -C ./apple2_1000.inc
|
||||||
|
|
||||||
mode7_demo.o: mode7_demo.s mode7_demo_backgrounds.inc \
|
mode7_demo.o: mode7_demo.s mode7_demo_backgrounds.inc scrolltext.inc \
|
||||||
../asm_routines/gr_unrle.s \
|
../asm_routines/gr_unrle.s \
|
||||||
../asm_routines/hlin_clearscreen.s \
|
../asm_routines/hlin_clearscreen.s \
|
||||||
../asm_routines/gr_setpage.s \
|
../asm_routines/gr_setpage.s \
|
||||||
../asm_routines/gr_fade.s \
|
../asm_routines/gr_fade.s \
|
||||||
../asm_routines/gr_copy.s
|
../asm_routines/gr_copy.s \
|
||||||
|
../asm_routines/gr_scroll.s
|
||||||
ca65 -o mode7_demo.o mode7_demo.s -l mode7_demo.lst
|
ca65 -o mode7_demo.o mode7_demo.s -l mode7_demo.lst
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
; Original size = 668 bytes
|
|
||||||
deater_scroll:
|
|
||||||
; scroll_length:
|
|
||||||
.byte 167
|
|
||||||
.byte $A0,$28,$00,$20,$20,$A3,$00,$A4,$20,$00,$00,$20,$20,$00,$00,$A3,$20,$00,$A4,$20,$00,$A3,$20,$A7,$00,$40,$A3,$00,$40,$00,$00,$40,$40,$A3,$00,$A3,$40,$A6,$00,$10,$00,$00,$10,$00,$A4,$10,$00,$A3,$10,$00,$00,$A4,$10,$00,$A3,$10,$00,$A3,$10,$00,$A3,$10,$A0,$82,$00
|
|
||||||
.byte $A0,$28,$00,$E6,$00,$06,$E0,$00,$E6,$A4,$00,$E6,$00,$00,$E6,$00,$00,$E6,$00,$00,$E6,$A4,$00,$E6,$00,$00,$E6,$A6,$00,$DC,$A3,$00,$DC,$00,$DC,$00,$00,$DC,$00,$DC,$A9,$00,$B3,$00,$00,$B3,$00,$B3,$A4,$00,$B3,$00,$00,$B3,$00,$B3,$A4,$00,$03,$B3,$03,$00,$03,$B3,$03,$00,$03,$B3,$03,$A0,$82,$00
|
|
||||||
.byte $A0,$28,$00,$EF,$00,$00,$EF,$00,$EF,$0F,$0F,$00,$00,$EF,$0F,$0F,$EF,$00,$00,$EF,$00,$00,$EF,$0F,$0F,$00,$00,$EF,$0F,$0F,$E0,$A6,$00,$DF,$00,$D0,$00,$DF,$00,$DF,$0F,$0F,$DF,$00,$00,$0F,$0F,$D0,$A6,$00,$BF,$0F,$0F,$BF,$00,$BF,$0F,$0F,$00,$00,$BF,$0F,$0F,$B0,$00,$BF,$0F,$0F,$A3,$00,$0F,$A3,$00,$0F,$A3,$00,$0F,$A0,$83,$00
|
|
||||||
.byte $A0,$28,$00,$26,$20,$06,$00,$00,$26,$A3,$20,$00,$26,$00,$00,$26,$00,$00,$26,$00,$00,$26,$A3,$20,$00,$26,$00,$00,$26,$A6,$00,$4C,$0C,$00,$0C,$4C,$00,$4C,$00,$00,$4C,$00,$A3,$40,$0C,$A6,$00,$13,$00,$00,$13,$00,$13,$A3,$10,$00,$13,$00,$00,$13,$00,$13,$A3,$10,$00,$00,$13,$A3,$00,$13,$A3,$00,$13,$A0,$83,$00
|
|
||||||
.byte $A1
|
|
||||||
; Compressed size = 294 bytes
|
|
@ -77,212 +77,15 @@ demo_loop:
|
|||||||
.include "../asm_routines/pageflip.s"
|
.include "../asm_routines/pageflip.s"
|
||||||
.include "../asm_routines/gr_fade.s"
|
.include "../asm_routines/gr_fade.s"
|
||||||
.include "../asm_routines/gr_copy.s"
|
.include "../asm_routines/gr_copy.s"
|
||||||
|
.include "../asm_routines/gr_scroll.s"
|
||||||
|
|
||||||
.include "mode7_demo_backgrounds.inc"
|
.include "mode7_demo_backgrounds.inc"
|
||||||
|
|
||||||
|
|
||||||
scroll_row1 EQU $8A00
|
|
||||||
scroll_row2 EQU $8B00
|
|
||||||
scroll_row3 EQU $8C00
|
|
||||||
scroll_row4 EQU $8D00
|
|
||||||
|
|
||||||
SCROLL_LENGTH EQU $61
|
|
||||||
OFFSET EQU $62
|
|
||||||
|
|
||||||
|
|
||||||
;========================
|
|
||||||
; scroll some text
|
|
||||||
;========================
|
|
||||||
; RLE compressed data in INL/INH
|
|
||||||
; CV is Y position to display at
|
|
||||||
|
|
||||||
gr_scroll:
|
|
||||||
lda #0
|
|
||||||
sta OFFSET
|
|
||||||
|
|
||||||
;=======================
|
|
||||||
; decompress scroll text
|
|
||||||
;=======================
|
|
||||||
|
|
||||||
jsr decompress_scroll
|
|
||||||
|
|
||||||
|
|
||||||
scroll_loop:
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
ldy CV
|
|
||||||
lsr
|
|
||||||
|
|
||||||
lda gr_offsets,Y ; get position
|
|
||||||
sta sm1+1
|
|
||||||
lda gr_offsets+2,Y ; get position
|
|
||||||
sta sm2+1
|
|
||||||
lda gr_offsets+4,Y ; get position
|
|
||||||
sta sm3+1
|
|
||||||
lda gr_offsets+6,Y ; get position
|
|
||||||
sta sm4+1
|
|
||||||
|
|
||||||
|
|
||||||
iny
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
lda gr_offsets,Y ; get position
|
|
||||||
adc DRAW_PAGE
|
|
||||||
sta sm1+2
|
|
||||||
lda gr_offsets+2,Y ; get position
|
|
||||||
adc DRAW_PAGE
|
|
||||||
sta sm2+2
|
|
||||||
lda gr_offsets+4,Y ; get position
|
|
||||||
adc DRAW_PAGE
|
|
||||||
sta sm3+2
|
|
||||||
lda gr_offsets+6,Y ; get position
|
|
||||||
adc DRAW_PAGE
|
|
||||||
sta sm4+2
|
|
||||||
|
|
||||||
ldy OFFSET
|
|
||||||
|
|
||||||
draw_loop:
|
|
||||||
|
|
||||||
lda scroll_row1,Y
|
|
||||||
sm1:
|
|
||||||
sta $400,X
|
|
||||||
|
|
||||||
lda scroll_row2,Y
|
|
||||||
sm2:
|
|
||||||
sta $480,X
|
|
||||||
|
|
||||||
lda scroll_row3,Y
|
|
||||||
sm3:
|
|
||||||
sta $500,X
|
|
||||||
|
|
||||||
lda scroll_row4,Y
|
|
||||||
sm4:
|
|
||||||
sta $580,X
|
|
||||||
|
|
||||||
iny
|
|
||||||
inx
|
|
||||||
cpx #40
|
|
||||||
bne draw_loop
|
|
||||||
|
|
||||||
;==================
|
|
||||||
; flip pages
|
|
||||||
;==================
|
|
||||||
|
|
||||||
jsr page_flip ; 6
|
|
||||||
|
|
||||||
;==================
|
|
||||||
; delay
|
|
||||||
;==================
|
|
||||||
|
|
||||||
lda #125
|
|
||||||
jsr WAIT
|
|
||||||
|
|
||||||
|
|
||||||
;==================
|
|
||||||
; loop forever
|
|
||||||
;==================
|
|
||||||
clc
|
|
||||||
lda OFFSET
|
|
||||||
adc #40
|
|
||||||
cmp SCROLL_LENGTH
|
|
||||||
bne blah
|
|
||||||
lda #0
|
|
||||||
sta OFFSET
|
|
||||||
jmp scroll_loop
|
|
||||||
|
|
||||||
blah:
|
|
||||||
inc OFFSET
|
|
||||||
jmp scroll_loop ; 3
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;=======================
|
|
||||||
; decompress scroll
|
|
||||||
;=======================
|
|
||||||
decompress_scroll:
|
|
||||||
ldy #0
|
|
||||||
jsr scroll_load_and_increment
|
|
||||||
sta SCROLL_LENGTH
|
|
||||||
|
|
||||||
lda #<scroll_row1
|
|
||||||
sta OUTL
|
|
||||||
lda #>scroll_row1
|
|
||||||
sta OUTH
|
|
||||||
|
|
||||||
decompress_scroll_loop:
|
|
||||||
jsr scroll_load_and_increment ; load compressed value
|
|
||||||
|
|
||||||
cmp #$A1 ; EOF marker
|
|
||||||
beq done_decompress_scroll ; if EOF, exit
|
|
||||||
|
|
||||||
pha ; save
|
|
||||||
|
|
||||||
and #$f0 ; mask
|
|
||||||
cmp #$a0 ; see if special AX
|
|
||||||
beq decompress_scroll_special
|
|
||||||
|
|
||||||
pla ; note, PLA sets flags!
|
|
||||||
|
|
||||||
ldx #$1 ; only want to print 1
|
|
||||||
bne decompress_scroll_run
|
|
||||||
|
|
||||||
decompress_scroll_special:
|
|
||||||
pla
|
|
||||||
|
|
||||||
and #$0f ; check if was A0
|
|
||||||
|
|
||||||
bne decompress_scroll_color ; if A0 need to read run, color
|
|
||||||
|
|
||||||
decompress_scroll_large:
|
|
||||||
jsr scroll_load_and_increment ; get run length
|
|
||||||
|
|
||||||
decompress_scroll_color:
|
|
||||||
tax ; put runlen into X
|
|
||||||
jsr scroll_load_and_increment ; get color
|
|
||||||
|
|
||||||
decompress_scroll_run:
|
|
||||||
sta (OUTL),Y
|
|
||||||
pha
|
|
||||||
|
|
||||||
clc ; increment 16-bit pointer
|
|
||||||
lda OUTL
|
|
||||||
adc #$1
|
|
||||||
sta OUTL
|
|
||||||
lda OUTH
|
|
||||||
adc #$0
|
|
||||||
sta OUTH
|
|
||||||
|
|
||||||
pla
|
|
||||||
|
|
||||||
dex ; repeat for X times
|
|
||||||
bne decompress_scroll_run
|
|
||||||
|
|
||||||
beq decompress_scroll_loop ; get next run
|
|
||||||
|
|
||||||
done_decompress_scroll:
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
scroll_load_and_increment:
|
|
||||||
lda (INL),Y ; load and increment 16-bit pointer
|
|
||||||
pha
|
|
||||||
clc
|
|
||||||
lda INL
|
|
||||||
adc #$1
|
|
||||||
sta INL
|
|
||||||
lda INH
|
|
||||||
adc #$0
|
|
||||||
sta INH
|
|
||||||
pla
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
;===============================================
|
;===============================================
|
||||||
; Variables
|
; Variables
|
||||||
;===============================================
|
;===============================================
|
||||||
|
|
||||||
.include "deater_scroll.inc"
|
.include "scrolltext.inc"
|
||||||
|
|
||||||
|
|
||||||
|
10
mode7_demo/scrolltext.inc
Normal file
10
mode7_demo/scrolltext.inc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
; Original size = 860 bytes
|
||||||
|
deater_scroll:
|
||||||
|
; scroll_length:
|
||||||
|
.byte 215
|
||||||
|
.byte $A0,$28,$00,$A3,$20,$00,$00,$20,$00,$20,$A6,$00,$20,$20,$A3,$00,$A4,$20,$00,$00,$20,$20,$00,$00,$A3,$20,$00,$A4,$20,$00,$A3,$20,$AE,$00,$40,$40,$A7,$00,$A5,$10,$40,$A5,$20,$40,$A5,$20,$A6,$00,$A3,$40,$00,$00,$A3,$40,$A3,$00,$40,$40,$00,$00,$40,$40,$A3,$00,$40,$00,$00,$40,$00,$00,$A3,$40,$00,$A3,$40,$00,$A3,$40,$00,$00,$40,$40,$00,$00,$40,$00,$00,$40,$A0,$52,$00
|
||||||
|
.byte $A0,$28,$00,$E6,$00,$00,$E6,$00,$E6,$00,$E6,$A6,$00,$E6,$00,$06,$E0,$00,$E6,$A4,$00,$E6,$00,$00,$E6,$00,$00,$E6,$00,$00,$E6,$A4,$00,$E6,$00,$00,$E6,$AC,$00,$DC,$00,$00,$DC,$A6,$00,$A5,$11,$44,$A5,$22,$44,$A5,$22,$A6,$00,$DC,$00,$00,$DC,$00,$DC,$00,$00,$DC,$00,$DC,$00,$00,$DC,$00,$DC,$00,$0C,$D0,$00,$DC,$00,$00,$DC,$00,$DC,$A5,$00,$DC,$A3,$00,$DC,$00,$00,$DC,$00,$00,$DC,$00,$DC,$DC,$00,$DC,$A0,$52,$00
|
||||||
|
.byte $A0,$28,$00,$EF,$0F,$0F,$E0,$00,$00,$EF,$A7,$00,$EF,$00,$00,$EF,$00,$EF,$0F,$0F,$00,$00,$EF,$0F,$0F,$EF,$00,$00,$EF,$00,$00,$EF,$0F,$0F,$00,$00,$EF,$0F,$0F,$E0,$AC,$00,$DF,$0F,$0F,$DF,$A7,$00,$A3,$11,$A3,$44,$A3,$22,$A3,$44,$A3,$22,$A7,$00,$DF,$0F,$0F,$00,$00,$DF,$0F,$0F,$D0,$00,$DF,$00,$00,$DF,$00,$DF,$00,$00,$DF,$00,$DF,$00,$00,$DF,$00,$DF,$A5,$00,$DF,$A3,$00,$DF,$00,$00,$DF,$00,$00,$DF,$00,$DF,$00,$DF,$DF,$A0,$52,$00
|
||||||
|
.byte $A0,$28,$00,$26,$20,$20,$06,$00,$00,$26,$A7,$00,$26,$20,$06,$00,$00,$26,$A3,$20,$00,$26,$00,$00,$26,$00,$00,$26,$00,$00,$26,$A3,$20,$00,$26,$00,$00,$26,$00,$26,$00,$26,$00,$26,$A6,$00,$4C,$00,$00,$4C,$A8,$00,$11,$A5,$44,$22,$A5,$44,$22,$A8,$00,$4C,$A4,$00,$4C,$00,$00,$4C,$00,$0C,$40,$40,$0C,$00,$4C,$40,$0C,$00,$00,$0C,$40,$40,$0C,$00,$0C,$A3,$40,$00,$00,$4C,$00,$00,$40,$4C,$40,$00,$0C,$40,$40,$0C,$00,$4C,$00,$00,$4C,$A0,$52,$00
|
||||||
|
.byte $A1
|
||||||
|
; Compressed size = 407 bytes
|
Loading…
Reference in New Issue
Block a user