vertical_scroller: trying some size optimization

This commit is contained in:
Vince Weaver 2022-03-02 01:32:10 -05:00
parent 19f0960ca0
commit 366ebbe08c
6 changed files with 464 additions and 6 deletions

View File

@ -5,12 +5,12 @@ PNG_TO_40x96 = ../../utils/gr-utils/png_to_40x96
PNG_TO_40x48D = ../../utils/gr-utils/png_to_40x48d
PNG2RLE = ../../utils/gr-utils/png2rle
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
EMPTY = ../../empty_disk/empty.dsk
all: scroller.dsk
scroller.dsk: HELLO SCROLLER
cp empty.dsk scroller.dsk
cp $(EMPTY) scroller.dsk
$(DOS33) -y scroller.dsk SAVE A HELLO
$(DOS33) -y scroller.dsk BSAVE -a 0x1000 SCROLLER

View File

@ -0,0 +1,90 @@
include ../../Makefile.inc
DOS33 = ../../utils/dos33fs-utils/dos33
PNG_TO_40x96 = ../../utils/gr-utils/png_to_40x96
PNG_TO_40x48D = ../../utils/gr-utils/png_to_40x48d
PNG2RLE = ../../utils/gr-utils/png2rle
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
EMPTY = ../../empty_disk/empty.dsk
PNG2GR = ../../utils/gr-utils/png2gr
LZSA = ~/research/lzsa/lzsa/lzsa
PNG2RAW = ../../utils/gr-utils/png2raw
all: scroller.dsk
scroller.dsk: HELLO SCROLLER DSR_INTRO
cp $(EMPTY) scroller.dsk
$(DOS33) -y scroller.dsk SAVE A HELLO
$(DOS33) -y scroller.dsk BSAVE -a 0x1000 SCROLLER
$(DOS33) -y scroller.dsk BSAVE -a 0x1000 DSR_INTRO
###
HELLO: hello.bas
$(TOKENIZE) < hello.bas > HELLO
####
SCROLLER: scroller.o
ld65 -o SCROLLER scroller.o -C ../../linker_scripts/apple2_1000.inc
scroller.o: scroller.s gr_copy.s gr_unrle.s gr_unrle_large.s \
gr_copy_large.s \
zp.inc hardware.inc spaceman.lzsa spaceman2.lzsa
ca65 -o scroller.o scroller.s -l scroller.lst
####
DSR_INTRO: dsr_intro.o
ld65 -o DSR_INTRO dsr_intro.o -C ../../linker_scripts/apple2_1000.inc
dsr_intro.o: dsr_intro.s gr_copy.s gr_unrle.s gr_unrle_large.s \
gr_copy_large.s \
zp.inc hardware.inc desire.lzsa desire2.lzsa
ca65 -o dsr_intro.o dsr_intro.s -l dsr_intro.lst
####
desire.inc: desire.png desire2.png
$(PNG2RLE) asm desire.png desire_rle > desire.inc
$(PNG2RLE) asm desire2.png desire2_rle >> desire.inc
desire.lzsa: desire.gr
$(LZSA) -r -f2 desire.gr desire.lzsa
desire.gr: desire.png
$(PNG2GR) desire.png desire.gr
desire2.lzsa: desire2.gr
$(LZSA) -r -f2 desire2.gr desire2.lzsa
desire2.gr: desire2.png
$(PNG2GR) desire2.png desire2.gr
spaceman.lzsa: spaceman_big.raw
$(LZSA) -r -f2 spaceman_big.raw spaceman.lzsa
spaceman_big.raw: spaceman_big.png
$(PNG2RAW) spaceman_big.png spaceman_big.raw
spaceman2.lzsa: spaceman_big2.raw
$(LZSA) -r -f2 spaceman_big2.raw spaceman2.lzsa
spaceman_big2.raw: spaceman_big2.png
$(PNG2RAW) spaceman_big2.png spaceman_big2.raw
spaceman.inc: spaceman_big.png
$(PNG2RLE) asm spaceman_big.png spaceman_rle > spaceman.inc
spaceman2.inc: spaceman_big2.png
$(PNG2RLE) asm spaceman_big2.png spaceman2_rle > spaceman2.inc
####
clean:
rm -f *~ *.o *.lst SCROLLER HELLO DSR_INTRO

View File

@ -0,0 +1,117 @@
; dsr Intro
; by deater (Vince Weaver) <vince@deater.net>
; graphics by porta2note
NIBCOUNT = $09
; 2302 bytes when RLE
; 2459 bytes move to lzsa code
; 1060 bytes lzsa the graphics
; Zero Page
.include "zp.inc"
.include "hardware.inc"
;===================
; init screen
jsr TEXT
jsr HOME
bit KEYRESET
; GR part
bit PAGE1
bit LORES ; 4
bit SET_GR ; 4
bit FULLGR ; 4
;===================
; init vars
lda #0
sta DRAW_PAGE
lda #4
sta DISP_PAGE
;=============================
; Load desire 1st
; lda #<desire_rle
; sta GBASL
; lda #>desire_rle
; sta GBASH
; lda #$c
; jsr load_rle_gr
lda #<desire_lzsa
sta getsrc_smc+1
lda #>desire_lzsa
sta getsrc_smc+2
lda #$c
jsr decompress_lzsa2_fast
jsr gr_copy_to_current ; copy to page1
jsr page_flip
jsr wait_until_keypress
;=============================
; Load desire 2nd
; lda #<desire2_rle
; sta GBASL
; lda #>desire2_rle
; sta GBASH
; lda #$c
; jsr load_rle_gr
lda #<desire2_lzsa
sta getsrc_smc+1
lda #>desire2_lzsa
sta getsrc_smc+2
lda #$c
jsr decompress_lzsa2_fast
jsr gr_copy_to_current ; copy to page1
jsr page_flip
jsr wait_until_keypress
forever:
jmp forever
wait_until_keypress:
lda KEYPRESS
bpl wait_until_keypress
bit KEYRESET
rts
.include "decompress_fast_v2.s"
; .include "gr_unrle.s"
.include "gr_offsets.s"
.include "gr_copy.s"
.include "gr_pageflip.s"
; .include "desire.inc"
desire_lzsa:
.incbin "desire.lzsa"
desire2_lzsa:
.incbin "desire2.lzsa"

View File

@ -0,0 +1,169 @@
; Vertical scroll lo-res
; by deater (Vince Weaver) <vince@deater.net>
; Zero Page
.include "zp.inc"
.include "hardware.inc"
NIBCOUNT = $09
; 5529 original
; 3283 using LZSA instead
;===================
; init screen
jsr TEXT
jsr HOME
bit KEYRESET
; GR part
bit PAGE1
bit LORES ; 4
bit SET_GR ; 4
bit FULLGR ; 4
;===================
; init vars
lda #0
sta DRAW_PAGE
lda #4
sta DISP_PAGE
;=============================
; Load spaceman top
; lda #<spaceman_rle
; sta GBASL
; lda #>spaceman_rle
; sta GBASH
; lda #$90
; jsr load_rle_large
lda #<spaceman_lzsa
sta getsrc_smc+1
lda #>spaceman_lzsa
sta getsrc_smc+2
lda #$90
jsr decompress_lzsa2_fast
; Load spaceman bottom
; lda #<spaceman2_rle
; sta GBASL
; lda #>spaceman2_rle
; sta GBASH
; lda #$A0
; jsr load_rle_large
lda #<spaceman2_lzsa
sta getsrc_smc+1
lda #>spaceman2_lzsa
sta getsrc_smc+2
lda #$a0
jsr decompress_lzsa2_fast
rescroll:
lda #0
sta SCROLL_COUNT
lda #<$9000
sta TINL
lda #>$9000
sta TINH
lda #<$A000
sta BINL
lda #>$A000
sta BINH
; delay
lda #200
jsr WAIT
scroll_loop:
lda TINL
sta OUTL
lda TINH
sta OUTH
jsr gr_copy_to_current_large ; copy to page1
jsr page_flip
lda #100
jsr WAIT
lda BINL
sta OUTL
lda BINH
sta OUTH
jsr gr_copy_to_current_large ; copy to page1
jsr page_flip
lda #100
jsr WAIT
lda TINL ; inc to next line
clc
adc #$28
sta TINL
lda TINH
adc #$0
sta TINH
lda BINL ; inc to next line
clc
adc #$28
sta BINL
lda BINH
adc #$0
sta BINH
inc SCROLL_COUNT
lda SCROLL_COUNT
cmp #73
bne scroll_loop
jsr wait_until_keypress
jmp rescroll
forever:
jmp forever
wait_until_keypress:
lda KEYPRESS
bpl wait_until_keypress
bit KEYRESET
rts
; .include "gr_unrle.s"
; .include "gr_unrle_large.s"
.include "decompress_fast_v2.s"
.include "gr_offsets.s"
; .include "gr_copy.s"
.include "gr_copy_large.s"
.include "gr_pageflip.s"
; .include "spaceman.inc"
; .include "spaceman2.inc"
spaceman_lzsa:
.incbin "spaceman.lzsa"
spaceman2_lzsa:
.incbin "spaceman2.lzsa"

View File

@ -3,8 +3,8 @@ include ../../Makefile.inc
CFLAGS = -g -Wall -O2
all: text2gr png2gr png2gr_text png2rle png2lz4 png_to_40x48d png_to_40x96 \
png2sixbitmap png2six80 png2sixrle png2fourrle png2sixrle2 png_16x16
png2sixbitmap png2six80 png2sixrle png2fourrle png2sixrle2 png_16x16 \
png2raw
###
@ -96,6 +96,15 @@ png2rle: png2rle.o loadpng.o rle_common.o
png2rle.o: png2rle.c loadpng.h rle_common.h
$(CC) $(CFLAGS) -c png2rle.c
###
png2raw: png2raw.o loadpng.o
$(CC) $(LFLAGS) -o png2raw png2raw.o loadpng.o -lpng
png2raw.o: png2raw.c loadpng.h
$(CC) $(CFLAGS) -c png2raw.c
###
@ -127,8 +136,8 @@ png_to_40x96.o: png_to_40x96.c loadpng.h rle_common.h
###
install:
cp png2gr png2gr_text png2rle png2lz4 png_to_40x48d png_to_40x96 png2sixbitmap png2sixrle png2sixrle2 png2fourrle png2six80 png_16x16 $(INSTALL_LOC)
cp png2gr png2gr_text png2rle png2lz4 png_to_40x48d png_to_40x96 png2sixbitmap png2sixrle png2sixrle2 png2fourrle png2six80 png_16x16 png2raw $(INSTALL_LOC)
clean:
rm -f *~ *.o png2gr png2gr_text png2rle png2lz4 png_to_40x48d png_to_40x96 png2sixbitmap png2sixrle png2fourrle png2sixrle2 png2six80 text2gr pnglarge2rle png_16x16
rm -f *~ *.o png2gr png2gr_text png2rle png2lz4 png_to_40x48d png_to_40x96 png2sixbitmap png2sixrle png2fourrle png2sixrle2 png2six80 text2gr pnglarge2rle png_16x16 png2raw

73
utils/gr-utils/png2raw.c Normal file
View File

@ -0,0 +1,73 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "loadpng.h"
//static short gr_offsets[]={
// 0x400,0x480,0x500,0x580,0x600,0x680,0x700,0x780,
// 0x428,0x4a8,0x528,0x5a8,0x628,0x6a8,0x728,0x7a8,
// 0x450,0x4d0,0x550,0x5d0,0x650,0x6d0,0x750,0x7d0,
//};
/* Converts a PNG to a RAW memory image */
int main(int argc, char **argv) {
int row=0;
int col=0;
// int x;
// unsigned char out_buffer[1024];
unsigned char *image;
int xsize,ysize;
FILE *outfile;
if (argc<3) {
fprintf(stderr,"Usage:\t%s INFILE OUTFILE\n\n",argv[0]);
exit(-1);
}
outfile=fopen(argv[2],"w");
if (outfile==NULL) {
fprintf(stderr,"Error! Could not open %s\n",argv[2]);
exit(-1);
}
if (loadpng(argv[1],&image,&xsize,&ysize,PNG_WHOLETHING)<0) {
fprintf(stderr,"Error loading png!\n");
exit(-1);
}
fprintf(stderr,"Loaded image %d by %d\n",xsize,ysize);
// memset(out_buffer,0,1024);
// for(row=0;row<24;row++) {
// for(col=0;col<40;col++) {
// out_buffer[(gr_offsets[row]-0x400)+col]=
// image[row*xsize+col];
// }
// }
// for(x=0;x<1024;x++) fputc( out_buffer[x],outfile);
for(row=0;row<ysize/2;row++) {
for(col=0;col<40;col++) {
fputc(image[row*xsize+col],outfile);
}
}
fclose(outfile);
return 0;
}