diff --git a/demos/vertical_scroll/Makefile b/demos/vertical_scroll/Makefile index aa614757..091cecd0 100644 --- a/demos/vertical_scroll/Makefile +++ b/demos/vertical_scroll/Makefile @@ -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 diff --git a/demos/vertical_scroll2/Makefile b/demos/vertical_scroll2/Makefile new file mode 100644 index 00000000..6756498f --- /dev/null +++ b/demos/vertical_scroll2/Makefile @@ -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 diff --git a/demos/vertical_scroll2/dsr_intro.s b/demos/vertical_scroll2/dsr_intro.s new file mode 100644 index 00000000..8aa79fbc --- /dev/null +++ b/demos/vertical_scroll2/dsr_intro.s @@ -0,0 +1,117 @@ +; dsr Intro + +; by deater (Vince Weaver) + +; 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 GBASH +; lda #$c +; jsr load_rle_gr + + 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 GBASH +; lda #$c +; jsr load_rle_gr + + + 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" + diff --git a/demos/vertical_scroll2/scroller.s b/demos/vertical_scroll2/scroller.s new file mode 100644 index 00000000..beabdffc --- /dev/null +++ b/demos/vertical_scroll2/scroller.s @@ -0,0 +1,169 @@ +; Vertical scroll lo-res + +; by deater (Vince Weaver) + +; 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 GBASH +; lda #$90 +; jsr load_rle_large + + lda #spaceman_lzsa + sta getsrc_smc+2 + + lda #$90 + + jsr decompress_lzsa2_fast + + + ; Load spaceman bottom + +; lda #spaceman2_rle +; sta GBASH +; lda #$A0 +; jsr load_rle_large + + + 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" diff --git a/utils/gr-utils/Makefile b/utils/gr-utils/Makefile index cc449197..656decdb 100644 --- a/utils/gr-utils/Makefile +++ b/utils/gr-utils/Makefile @@ -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 diff --git a/utils/gr-utils/png2raw.c b/utils/gr-utils/png2raw.c new file mode 100644 index 00000000..45dfc8ea --- /dev/null +++ b/utils/gr-utils/png2raw.c @@ -0,0 +1,73 @@ +#include +#include + +#include +#include +#include +#include +#include + +#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