diff --git a/demosplash/Makefile b/demosplash/Makefile index 57f8abf5..6d44d0ad 100644 --- a/demosplash/Makefile +++ b/demosplash/Makefile @@ -4,11 +4,12 @@ DOS33 = ../dos33fs-utils/dos33 PNG2RLE = ../gr-utils/png2rle PNG2LZ4 = ../gr-utils/png2lz4 PNG_TO_40x96 = ../gr-utils/png_to_40x96 - +PNG_TO_40x48D = ../gr-utils/png_to_40x48d +B2D = ../bmp2dhr/b2d all: demosplash.dsk -demosplash.dsk: HELLO DEMOSPLASH LOADER +demosplash.dsk: HELLO DEMOSPLASH LOADER BOOK_HGR2C.BIN cp empty.dsk demosplash.dsk $(DOS33) -y demosplash.dsk SAVE A HELLO $(DOS33) -y demosplash.dsk BSAVE -a 0x1400 LOADER @@ -34,7 +35,8 @@ demosplash.o: demosplash.s \ starbase.s starbase_action.s \ graphics/starbase/starbase.inc \ graphics/sprites/alien.inc graphics/sprites/astronaut.inc \ - dya_space_demo.pt3 appleII_40_96.inc + dya_space_demo.pt3 appleII_40_96.inc \ + book.s book_40_48d.inc ca65 -o demosplash.o demosplash.s -l demosplash.lst ##### @@ -51,6 +53,22 @@ loader.o: loader.s appleII_40_96.inc: appleII_40_96.png $(PNG_TO_40x96) asm appleII_40_96.png appleII > appleII_40_96.inc +##### + + +#ball.img.lz4: ball.img +# lz4 -f -16 ball.img + +#ball.img: BALLC.BIN +# cp BALLC.BIN ball.img + +BOOK_HGR2C.BIN: book_hgr2.bmp + $(B2D) book_hgr2.bmp HGR -d + +##### + +book_40_48d.inc: book_40_48d.png + $(PNG_TO_40x48D) asm book_40_48d.png book > book_40_48d.inc ##### diff --git a/demosplash/book.s b/demosplash/book.s new file mode 100644 index 00000000..c9102b82 --- /dev/null +++ b/demosplash/book.s @@ -0,0 +1,218 @@ +; Display a 40x48d lo-res image + +; Uses the 40x48d page1/page2 every-1-scanline pageflip mode + +; by deater (Vince Weaver) + +; Zero Page +;FRAME = $60 +;BLARGH = $69 +;DRAW_PAGE = $EE +;LASTKEY = $F1 +;PADDLE_STATUS = $F2 +;TEMP = $FA +WHICH = $E3 + + + +book: + lda #0 + sta WHICH + + ;=================== + ; init screen + jsr TEXT + jsr HOME + bit KEYRESET + + ;=================== + ; init vars + + lda #0 + sta DRAW_PAGE + + ;============================= + ; Load graphic page0 + + lda WHICH + asl + asl ; which*4 + tay + + lda pictures,Y + sta GBASL + lda pictures+1,Y + sta GBASH + + lda #$c ; load image to $c00 + + jsr load_rle_gr + + lda #4 + sta DRAW_PAGE + + + + jsr gr_copy_to_current ; copy to page1 + + ; GR part + bit PAGE1 + bit LORES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 + + jsr wait_until_keypressed + + + ;============================= + ; Load graphic page1 + + lda WHICH + asl + asl ; which*4 + tay + + lda pictures+2,Y + sta GBASL + lda pictures+3,Y + sta GBASH + lda #$c ; load image to $c00 + jsr load_rle_gr + + lda #0 + sta DRAW_PAGE + + jsr gr_copy_to_current + + ; GR part + bit PAGE0 + + jsr wait_until_keypressed + + + ;============================== + ; setup graphics for vapor lock + ;============================== + + jsr vapor_lock + + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 lines to go + + ; GR part + bit LORES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 + + jsr gr_copy_to_current ; 6+ 9292 + + ; now we have 322 left + + ; 322 - 12 = 310 + ; - 3 for jmp + ; 307 + + ; Try X=9 Y=6 cycles=307 + + ldy #6 ; 2 +loopQ: ldx #9 ; 2 +loopR: dex ; 2 + bne loopR ; 2nt/3 + dey ; 2 + bne loopQ ; 2nt/3 + + jmp book_loop ; 3 +.align $100 + + + ;================================================ + ; Display Loop + ;================================================ + ; each scan line 65 cycles + ; 1 cycle each byte (40cycles) + 25 for horizontal + ; Total of 12480 cycles to draw screen + ; Vertical blank = 4550 cycles (70 scan lines) + ; Total of 17030 cycles to get back to where was + + ; We want to alternate between page1 and page2 every 65 cycles + ; vblank = 4550 cycles to do scrolling + + + ; 2 + 48*( (4+2+25*(2+3)) + (4+2+23*(2+3)+4+5)) + 9) + ; 48*[(6+125)-1] + [(6+115+10)-1] + +book_loop: + + ldy #96 ; 2 + +book_outer_loop: + + bit PAGE0 ; 4 + ldx #12 ; 65 cycles with PAGE0 ; 2 +book_page0_loop: ; delay 61+bit + dex ; 2 + bne book_page0_loop ; 2/3 + + + ; bit(4) -1(fallthrough) + loop*5 -1(fallthrouh)+4 extra = 61 + ; 5L = 55 + + bit PAGE1 ; 4 + ldx #11 ; 65 cycles with PAGE1 ; 2 + ; +book_page1_loop: ; delay 115+(7 loop)+4 (bit)+4(extra) + dex ; 2 + bne book_page1_loop ; 2/3 + + dey ; 2 + bne book_outer_loop ; 2/3 + + + + ;====================================================== + ; We have 4550 cycles in the vblank, use them wisely + ;====================================================== + ; do_nothing should be 4550+1 -2-9 -7= 4533 + + jsr book_do_nothing ; 6 + + lda KEYPRESS ; 4 + bpl book_no_keypress ; 3 + rts +book_no_keypress: + + jmp book_loop ; 3 + + + + ;================================= + ; do nothing + ;================================= + ; and take 4533-6 = 4527 cycles to do it +book_do_nothing: + + ; Try X=4 Y=174 cycles=4525 R2 + + nop ; 2 + + ldy #174 ; 2 +bloop1: + ldx #4 ; 2 +bloop2: + dex ; 2 + bne bloop2 ; 2nt/3 + + dey ; 2 + bne bloop1 ; 2nt/3 + + + rts ; 6 + + +pictures: + .word book_low,book_high + + +.include "book_40_48d.inc" + + diff --git a/demosplash/book_40_48d.png b/demosplash/book_40_48d.png new file mode 100644 index 00000000..b56e64a6 Binary files /dev/null and b/demosplash/book_40_48d.png differ diff --git a/demosplash/book_hgr2.png b/demosplash/book_hgr2.png new file mode 100644 index 00000000..dc093422 Binary files /dev/null and b/demosplash/book_hgr2.png differ diff --git a/demosplash/demosplash.s b/demosplash/demosplash.s index f57d6123..badce740 100644 --- a/demosplash/demosplash.s +++ b/demosplash/demosplash.s @@ -57,9 +57,15 @@ ending: ; start music - cli ; enable interrupts +; cli ; enable interrupts - jsr starbase +; jsr starbase + + ;=========================== + ; book scene + ;=========================== + + jsr book ; wait wait wait @@ -97,6 +103,9 @@ wait_until_keypressed: ; Starbase .include "starbase.s" +; book +.include "book.s" + ; Music player .include "pt3_lib_core.s" .include "pt3_lib_init.s" diff --git a/gr-sim/gr/Makefile b/gr-sim/gr/Makefile index 56cf2d88..1157b75e 100644 --- a/gr-sim/gr/Makefile +++ b/gr-sim/gr/Makefile @@ -11,7 +11,7 @@ all: gr_view ### gr_view: gr_view.o $(GR_SIM) - $(CC) $(LFLAGS) $(SDL_LIBS) -o gr_view gr_view.o $(GR_SIM) + $(CC) -o gr_view gr_view.o $(GR_SIM) $(LFLAGS) $(SDL_LIBS) gr_view.o: gr_view.c $(CC) $(CFLAGS) -c gr_view.c diff --git a/interlace_demo/hello.bas b/interlace_demo/hello.bas index 90307b16..52d6568f 100644 --- a/interlace_demo/hello.bas +++ b/interlace_demo/hello.bas @@ -1,2 +1,2 @@ 10 PRINT "INTERLACE V0.3" - 100 PRINT CHR$ (4)"BRUN RASTERBARS_SOUND" + 100 PRINT "BRUN RASTERBARS_SOUND"