mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-08-27 21:29:36 +00:00
xmas2018: scrolling text works
This commit is contained in:
parent
4de3183240
commit
f70de4c203
137
mode7/scroller.c
137
mode7/scroller.c
@ -71,25 +71,83 @@ 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}, // 48
|
{4, // 48
|
||||||
|
0x00,
|
||||||
|
0x40, // **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0x40, // **
|
||||||
|
|
||||||
|
},
|
||||||
|
{4,
|
||||||
|
0x00,
|
||||||
|
0x40, // **
|
||||||
|
0xc0, // ****
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0xe0, // ******
|
||||||
|
},
|
||||||
|
{4,
|
||||||
|
0x00,
|
||||||
|
0x40, // **
|
||||||
|
0xa0, // ** **
|
||||||
|
0x20, // **
|
||||||
|
0x40, // **
|
||||||
|
0x40, // **
|
||||||
|
0x80, // **
|
||||||
|
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},
|
{4,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0x00,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0x00,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0x00,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0x00,
|
||||||
{0,0,0,0,0,0,0,0,0}, // 56
|
0x00,
|
||||||
{0,0,0,0,0,0,0,0,0},
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
},
|
||||||
|
{4,0,0,0,0,0,0,0,0},
|
||||||
|
{4,0,0,0,0,0,0,0,0},
|
||||||
|
{4,0,0,0,0,0,0,0,0},
|
||||||
|
{4,0,0,0,0,0,0,0,0},
|
||||||
|
{4, // 56
|
||||||
|
0x00,
|
||||||
|
0x40, // **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0x40, // **
|
||||||
|
0xa0, // ** **
|
||||||
|
0xa0, // ** **
|
||||||
|
0x40, // **
|
||||||
|
},
|
||||||
|
{4,
|
||||||
|
0x00,
|
||||||
|
0x60, // ****
|
||||||
|
0xc0, // ** **
|
||||||
|
0xc0, // ** **
|
||||||
|
0x60, // ****
|
||||||
|
0x20, // **
|
||||||
|
0x20, // **
|
||||||
|
0x20, // **
|
||||||
|
},
|
||||||
{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},
|
||||||
@ -460,13 +518,28 @@ static int rainbow_logo[4][6]={
|
|||||||
{0x02,0x62,0x62,0x62,0x02,0x00 },
|
{0x02,0x62,0x62,0x62,0x02,0x00 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int xmas_tree[4][5]={
|
||||||
|
{0x00,0x00,0x4d,0x00,0x00 },
|
||||||
|
{0x00,0x44,0xd4,0x4d,0x00 },
|
||||||
|
{0x40,0x4d,0x44,0x44,0x40 },
|
||||||
|
{0x00,0x10,0x18,0x10,0x00 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static int holly[4][9]={
|
||||||
|
{0x00,0x00,0x00,0x10,0x11,0x10,0x00,0x00,0x00 },
|
||||||
|
{0x00,0xc0,0x4c,0xc1,0x11,0xc1,0x4c,0xc0,0x00 },
|
||||||
|
{0xc0,0x4c,0xc4,0xcc,0x00,0xcc,0xc4,0x4c,0xc0 },
|
||||||
|
{0xcc,0xc4,0x0c,0x00,0x00,0x00,0x0c,0xc4,0xcc },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
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[]=" \001BY DEATER... \002A \010 PRODUCTION ";
|
||||||
char string[]=" \003\011APPLE ][ FOREVER\011 ";
|
// char string[]=" \003\011APPLE ][ FOREVER\011 ";
|
||||||
|
char string[]=" \012 \001MERRY XMAS 2018 \003FROM DEATER \013 ";
|
||||||
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;
|
||||||
@ -508,6 +581,34 @@ int main(int argc, char **argv) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* christmas tree */
|
||||||
|
if (string[i]==10) {
|
||||||
|
width=5;
|
||||||
|
for(x=0;x<width;x++) {
|
||||||
|
for(j=0;j<4;j++) {
|
||||||
|
row[j][length]=xmas_tree[j][x];
|
||||||
|
}
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* holly */
|
||||||
|
if (string[i]==11) {
|
||||||
|
width=9;
|
||||||
|
for(x=0;x<width;x++) {
|
||||||
|
for(j=0;j<4;j++) {
|
||||||
|
row[j][length]=holly[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++) {
|
||||||
|
@ -27,7 +27,7 @@ xmas2018.o: xmas2018.s \
|
|||||||
vapor_lock.s delay_a.s wait_keypress.s \
|
vapor_lock.s delay_a.s wait_keypress.s \
|
||||||
play_music.s mockingboard.s rts.s \
|
play_music.s mockingboard.s rts.s \
|
||||||
wreath.s wreath.img.lz4 sprites.inc \
|
wreath.s wreath.img.lz4 sprites.inc \
|
||||||
ball.s ball.img.lz4 \
|
ball.s ball.img.lz4 greets.inc gr_scroll.s \
|
||||||
merry.s merry.img.lz4
|
merry.s merry.img.lz4
|
||||||
ca65 -o xmas2018.o xmas2018.s -l xmas2018.lst
|
ca65 -o xmas2018.o xmas2018.s -l xmas2018.lst
|
||||||
|
|
||||||
|
@ -20,24 +20,24 @@ ball:
|
|||||||
sta FRAMEH
|
sta FRAMEH
|
||||||
|
|
||||||
;=============================
|
;=============================
|
||||||
; Load graphic hgr
|
; ball graphic already loaded to $4000 (HGR page1)
|
||||||
|
|
||||||
; lda #<ball_hgr
|
;=============================
|
||||||
; sta LZ4_SRC
|
; set up scrolling
|
||||||
; lda #>ball_hgr
|
|
||||||
; sta LZ4_SRC+1
|
|
||||||
|
|
||||||
; lda #<(ball_hgr_end-8) ; skip checksum at end
|
lda #0
|
||||||
; sta LZ4_END
|
sta OFFSET
|
||||||
; lda #>(ball_hgr_end-8) ; skip checksum at end
|
|
||||||
; sta LZ4_END+1
|
|
||||||
|
|
||||||
; lda #<$2000
|
;=============================
|
||||||
; sta LZ4_DST
|
; decompress scroll image to $800
|
||||||
; lda #>$2000
|
|
||||||
; sta LZ4_DST+1
|
lda #>a2_scroll
|
||||||
|
sta INH
|
||||||
|
lda #<a2_scroll
|
||||||
|
sta INL
|
||||||
|
|
||||||
|
jsr decompress_scroll
|
||||||
|
|
||||||
; jsr lz4_decode
|
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
; setup graphics for vapor lock
|
; setup graphics for vapor lock
|
||||||
@ -137,24 +137,29 @@ baloopF:dex ; 2
|
|||||||
;======================================================
|
;======================================================
|
||||||
|
|
||||||
; do_nothing should be 4550
|
; do_nothing should be 4550
|
||||||
|
; -1023 music
|
||||||
|
; -1841 scroll
|
||||||
; -10 keypress
|
; -10 keypress
|
||||||
; ===========
|
; ===========
|
||||||
; 4540
|
; 1676
|
||||||
|
|
||||||
|
|
||||||
; jsr play_music ; 6+1032
|
jsr play_music ; 6+1017
|
||||||
|
|
||||||
|
jsr scroll_loop ; 6+1835
|
||||||
|
|
||||||
; Try X=9 Y=89 cycles=4540
|
; Try X=1 Y=152 cycles=1673 R3
|
||||||
|
|
||||||
ldy #89 ; 2
|
lda $0 ; nop
|
||||||
baloop1:ldx #9 ; 2
|
|
||||||
|
ldy #152 ; 2
|
||||||
|
baloop1:ldx #1 ; 2
|
||||||
baloop2:dex ; 2
|
baloop2:dex ; 2
|
||||||
bne baloop2 ; 2nt/3
|
bne baloop2 ; 2nt/3
|
||||||
dey ; 2
|
dey ; 2
|
||||||
bne baloop1 ; 2nt/3
|
bne baloop1 ; 2nt/3
|
||||||
|
|
||||||
; no keypress = 10+(24) = 34
|
; keypress = 10
|
||||||
|
|
||||||
lda KEYPRESS ; 4
|
lda KEYPRESS ; 4
|
||||||
bpl ba_no_keypress ; 3
|
bpl ba_no_keypress ; 3
|
||||||
@ -168,3 +173,5 @@ ba_handle_keypress:
|
|||||||
rts ; 6
|
rts ; 6
|
||||||
|
|
||||||
|
|
||||||
|
.include "gr_scroll.s"
|
||||||
|
.include "greets.inc"
|
||||||
|
145
xmas_2018/gr_scroll.s
Normal file
145
xmas_2018/gr_scroll.s
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
scroll_row1 = $800
|
||||||
|
scroll_row2 = $900
|
||||||
|
scroll_row3 = $A00
|
||||||
|
scroll_row4 = $B00
|
||||||
|
|
||||||
|
SCROLL_LENGTH = $61
|
||||||
|
;OFFSET = $62
|
||||||
|
|
||||||
|
|
||||||
|
; 5 + (45*40) +4 + 13 + 7 + 6 = 1835
|
||||||
|
|
||||||
|
scroll_loop:
|
||||||
|
|
||||||
|
ldx #0 ; 2
|
||||||
|
ldy OFFSET ; 3
|
||||||
|
|
||||||
|
draw_loop:
|
||||||
|
|
||||||
|
lda scroll_row1,Y ; 4
|
||||||
|
sta $650,X ; 5
|
||||||
|
lda scroll_row2,Y ; 4
|
||||||
|
sta $6d0,X ; 5
|
||||||
|
lda scroll_row3,Y ; 4
|
||||||
|
sta $750,X ; 5
|
||||||
|
lda scroll_row4,Y ; 4
|
||||||
|
sta $7d0,X ; 5
|
||||||
|
|
||||||
|
iny ; 2
|
||||||
|
inx ; 2
|
||||||
|
cpx #40 ; 2
|
||||||
|
bne draw_loop ; 2nt/3
|
||||||
|
;===============
|
||||||
|
; 45
|
||||||
|
|
||||||
|
|
||||||
|
; -1
|
||||||
|
inc OFFSET ; 5
|
||||||
|
;============
|
||||||
|
; 4
|
||||||
|
;==================
|
||||||
|
; wrap scrolltext
|
||||||
|
;==================
|
||||||
|
clc ; 2
|
||||||
|
lda OFFSET ; 3
|
||||||
|
adc #40 ; 2
|
||||||
|
cmp SCROLL_LENGTH ; 3
|
||||||
|
|
||||||
|
bne no_wrap ; 3
|
||||||
|
;============
|
||||||
|
; 13
|
||||||
|
|
||||||
|
; -1
|
||||||
|
lda #0 ; 2
|
||||||
|
sta OFFSET ; 3
|
||||||
|
jmp done_wrap ; 3
|
||||||
|
no_wrap:
|
||||||
|
lda $0 ; 3
|
||||||
|
nop ; 2
|
||||||
|
nop ; 2
|
||||||
|
;===========
|
||||||
|
; 7
|
||||||
|
|
||||||
|
done_wrap:
|
||||||
|
rts ; 6
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; 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
|
||||||
|
|
10
xmas_2018/greets.inc
Normal file
10
xmas_2018/greets.inc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
; Original size = 948 bytes
|
||||||
|
a2_scroll:
|
||||||
|
; scroll_length:
|
||||||
|
.byte 237
|
||||||
|
.byte $A0,$2E,$00,$4D,$A6,$00,$20,$A3,$00,$20,$00,$A4,$20,$00,$A3,$20,$00,$00,$A3,$20,$00,$00,$20,$00,$20,$A5,$00,$20,$00,$20,$00,$20,$A3,$00,$20,$00,$00,$20,$20,$A3,$00,$A3,$20,$A6,$00,$20,$A3,$00,$20,$A3,$00,$20,$A3,$00,$20,$A6,$00,$A4,$10,$00,$A3,$10,$A3,$00,$10,$10,$00,$00,$10,$A3,$00,$10,$A5,$00,$10,$10,$A3,$00,$A4,$10,$00,$00,$10,$10,$00,$00,$A3,$10,$00,$A4,$10,$00,$A3,$10,$A9,$00,$10,$11,$10,$A0,$42,$00
|
||||||
|
.byte $A0,$2D,$00,$44,$D4,$4D,$A5,$00,$E6,$06,$E0,$06,$E6,$00,$E6,$A4,$00,$E6,$00,$00,$E6,$00,$E6,$00,$00,$E6,$00,$E6,$00,$E6,$A5,$00,$E6,$00,$E6,$00,$E6,$06,$E0,$06,$E6,$00,$E6,$00,$00,$E6,$00,$E6,$A8,$00,$06,$00,$E6,$00,$E6,$00,$E6,$00,$06,$E6,$00,$00,$E6,$00,$E6,$A5,$00,$B3,$A4,$00,$B3,$00,$00,$B3,$00,$B3,$00,$00,$B3,$00,$B3,$03,$B0,$03,$B3,$A5,$00,$B3,$00,$03,$B0,$00,$B3,$A4,$00,$B3,$00,$00,$B3,$00,$00,$B3,$00,$00,$B3,$A4,$00,$B3,$00,$00,$B3,$A6,$00,$C0,$4C,$C1,$11,$C1,$4C,$C0,$A0,$40,$00
|
||||||
|
.byte $A0,$2C,$00,$40,$4D,$44,$44,$40,$A4,$00,$EF,$A3,$00,$EF,$00,$EF,$0F,$0F,$00,$00,$EF,$0F,$0F,$E0,$00,$EF,$0F,$0F,$E0,$00,$00,$EF,$A6,$00,$E0,$0F,$E0,$00,$EF,$A3,$00,$EF,$00,$EF,$0F,$0F,$EF,$00,$00,$0F,$0F,$E0,$A6,$00,$EF,$00,$00,$EF,$00,$EF,$00,$00,$EF,$00,$00,$E0,$0F,$E0,$A5,$00,$BF,$0F,$0F,$00,$00,$BF,$0F,$0F,$B0,$00,$BF,$00,$00,$BF,$00,$BF,$A3,$00,$BF,$A5,$00,$BF,$00,$00,$BF,$00,$BF,$0F,$0F,$00,$00,$BF,$0F,$0F,$BF,$00,$00,$BF,$00,$00,$BF,$0F,$0F,$00,$00,$BF,$0F,$0F,$B0,$A5,$00,$C0,$4C,$C4,$CC,$00,$CC,$C4,$4C,$C0,$A0,$3F,$00
|
||||||
|
.byte $A0,$2D,$00,$10,$18,$10,$A5,$00,$26,$A3,$00,$26,$00,$26,$A3,$20,$00,$26,$00,$00,$26,$00,$26,$00,$00,$26,$00,$00,$26,$A6,$00,$26,$00,$26,$00,$26,$A3,$00,$26,$00,$26,$00,$00,$26,$00,$A3,$20,$06,$A5,$00,$26,$20,$20,$00,$06,$20,$06,$00,$20,$26,$20,$00,$06,$20,$06,$A5,$00,$13,$A4,$00,$13,$00,$00,$13,$00,$03,$10,$10,$03,$00,$13,$A3,$00,$13,$A5,$00,$13,$10,$03,$00,$00,$13,$A3,$10,$00,$13,$00,$00,$13,$00,$00,$13,$00,$00,$13,$A3,$10,$00,$13,$00,$00,$13,$A5,$00,$CC,$C4,$0C,$A3,$00,$0C,$C4,$CC,$A0,$3F,$00
|
||||||
|
.byte $A1
|
||||||
|
; Compressed size = 484 bytes
|
Loading…
Reference in New Issue
Block a user