From 222e181b576e5ff542c8bdae5e3ea1abe2f2f076 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 31 Jul 2018 21:04:32 -0400 Subject: [PATCH] space_bars: initial checkin --- space_bars/Makefile | 31 ++++ space_bars/gr_copy.s | 58 +++++++ space_bars/space_bars.dsk | Bin 0 -> 143360 bytes space_bars/space_bars.s | 350 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 439 insertions(+) create mode 100644 space_bars/Makefile create mode 100644 space_bars/gr_copy.s create mode 100644 space_bars/space_bars.dsk create mode 100644 space_bars/space_bars.s diff --git a/space_bars/Makefile b/space_bars/Makefile new file mode 100644 index 00000000..07685cbc --- /dev/null +++ b/space_bars/Makefile @@ -0,0 +1,31 @@ +include ../Makefile.inc + +DOS33 = ../dos33fs-utils/dos33 +PNG_TO_40x48D = ../gr-utils/png_to_40x48d + +all: space_bars.dsk + +space_bars.dsk: SPACE_BARS + $(DOS33) -y space_bars.dsk BSAVE -a 0x1000 SPACE_BARS + + +#### + +SPACE_BARS: space_bars.o + ld65 -o SPACE_BARS space_bars.o -C ../linker_scripts/apple2_1000.inc + +space_bars.o: space_bars.s gr_copy.s \ + spacebars_title.inc + ca65 -o space_bars.o space_bars.s -l space_bars.lst + +#### + +spacebars_title.inc: ./images/spacebars_title_scaled.png + $(PNG_TO_40x48D) asm ./images/spacebars_title_scaled.png spacebars_title > spacebars_title.inc + +### + +clean: + rm -f *~ *.o *.lst *.inc SPACE_BARS + + diff --git a/space_bars/gr_copy.s b/space_bars/gr_copy.s new file mode 100644 index 00000000..acd83f6f --- /dev/null +++ b/space_bars/gr_copy.s @@ -0,0 +1,58 @@ + ;========================================================= + ; gr_copy_to_current, 40x48 version + ;========================================================= + ; copy 0xc00 to DRAW_PAGE + ; + ; 45 + 2 + 120*(8*9 + 5) -1 + 6 = 9292 + +gr_copy_to_current: + + lda DRAW_PAGE ; 3 + clc ; 2 + adc #$4 ; 2 + sta gr_copy_line+5 ; 4 + sta gr_copy_line+11 ; 4 + adc #$1 ; 2 + sta gr_copy_line+17 ; 4 + sta gr_copy_line+23 ; 4 + adc #$1 ; 2 + sta gr_copy_line+29 ; 4 + sta gr_copy_line+35 ; 4 + adc #$1 ; 2 + sta gr_copy_line+41 ; 4 + sta gr_copy_line+47 ; 4 + ;=========== + ; 45 + + ldy #119 ; for early ones, copy 120 bytes ; 2 + +gr_copy_line: + lda $C00,Y ; load a byte (self modified) ; 4 + sta $400,Y ; store a byte (self modified) ; 5 + + lda $C80,Y ; load a byte (self modified) ; 4 + sta $480,Y ; store a byte (self modified) ; 5 + + lda $D00,Y ; load a byte (self modified) ; 4 + sta $500,Y ; store a byte (self modified) ; 5 + + lda $D80,Y ; load a byte (self modified) ; 4 + sta $580,Y ; store a byte (self modified) ; 5 + + lda $E00,Y ; load a byte (self modified) ; 4 + sta $600,Y ; store a byte (self modified) ; 5 + + lda $E80,Y ; load a byte (self modified) ; 4 + sta $680,Y ; store a byte (self modified) ; 5 + + lda $F00,Y ; load a byte (self modified) ; 4 + sta $700,Y ; store a byte (self modified) ; 5 + + lda $F80,Y ; load a byte (self modified) ; 4 + sta $780,Y ; store a byte (self modified) ; 5 + + dey ; decrement pointer ; 2 + bpl gr_copy_line ; ; 2nt/3 + + rts ; 6 + diff --git a/space_bars/space_bars.dsk b/space_bars/space_bars.dsk new file mode 100644 index 0000000000000000000000000000000000000000..ac820260682716cb835b5fc34b51f47f955750f8 GIT binary patch literal 143360 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 + +; Zero Page +FRAMEBUFFER = $00 ; $00 - $0F +YPOS = $10 +YPOS_SIN = $11 +CH = $24 +CV = $25 +GBASL = $26 +GBASH = $27 +BASL = $28 +BASH = $29 +FRAME = $60 +BLARGH = $69 +DRAW_PAGE = $EE +LASTKEY = $F1 +PADDLE_STATUS = $F2 +TEMP = $FA +WHICH = $FB + +; Soft Switches +KEYPRESS= $C000 +KEYRESET= $C010 +SET_GR = $C050 ; Enable graphics +FULLGR = $C052 ; Full screen, no text +PAGE0 = $C054 ; Page0 +PAGE1 = $C055 ; Page1 +LORES = $C056 ; Enable LORES graphics +PADDLE_BUTTON0 = $C061 +PADDL0 = $C064 +PTRIG = $C070 + +; ROM routines + +TEXT = $FB36 ;; Set text mode +HOME = $FC58 ;; Clear the text screen +WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us + +MAX = 1 + + lda #$ff + sta WHICH + +start_over: + inc WHICH + lda WHICH + cmp #MAX + bne in_range + lda #0 + sta WHICH + +in_range: + + ;=================== + ; init screen + jsr TEXT + jsr HOME + bit KEYRESET + + ;=================== + ; init vars + + lda #0 + sta DRAW_PAGE + + ;============================= + ; Load graphic page0 + + lda #$0c + sta BASH + lda #$00 + sta BASL ; load image to $c00 + + lda WHICH + asl + asl ; which*4 + tay + + lda pictures,Y + sta GBASL + lda pictures+1,Y + sta GBASH + 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 #$0c + sta BASH + lda #$00 + sta BASL ; load image to $c00 + + lda WHICH + asl + asl ; which*4 + tay + + lda pictures+2,Y + sta GBASL + lda pictures+3,Y + sta GBASH + 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 + ;============================== + + ; Clear Page0 + lda #$0 + sta DRAW_PAGE + lda #$44 + jsr clear_gr + + ; Make screen half green + lda #$11 + ldy #24 + jsr clear_page_loop + + + ;===================================================== + ; attempt vapor lock + ; by reading the "floating bus" we can see most recently + ; written value of the display + ; we look for $55 (which is the grey line) + ;===================================================== + ; See: + ; Have an Apple Split by Bob Bishop + ; Softalk, October 1982 + + ; Challenges: each scan line scans 40 bytes. + ; The blanking happens at the *beginning* + ; So 65 bytes are scanned, starting at adress of the line - 25 + + ; the scan takes 8 cycles, look for 4 repeats of the value + ; to avoid false positive found if the horiz blanking is mirroring + ; the line (max 3 repeats in that case) + +vapor_lock_loop: ; first make sure we have all zeroes + LDA #$11 +zxloop: + LDX #$04 +wiloop: + CMP $C051 + BNE zxloop + DEX + BNE wiloop + + LDA #$44 ; now look for our border color (4 times) +zloop: + LDX #$04 +qloop: + CMP $C051 + BNE zloop + DEX + BNE qloop + + ; found first line of black after green, at up to line 26 on screen + ; so we want roughly 22 lines * 4 = 88*65 = 5720 + 4550 = 10270 + ; - 65 (for the scanline we missed) = 10205 - 12 = 10193 + + jsr gr_copy_to_current ; 6+ 9292 + ; 10193 - 9298 = 895 + ; Fudge factor (unknown) -30 = 865 + + ; GR part + bit LORES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 + + ; Try X=88 Y=2 cycles=893 R2 + + nop + ldy #2 ; 2 +loopA: + ldx #88 ; 2 +loopB: + dex ; 2 + bne loopB ; 2nt/3 + + dey ; 2 + bne loopA ; 2nt/3 + + jmp display_loop +.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] + +display_loop: + + ldy #96 ; 2 + +outer_loop: + + bit PAGE0 ; 4 + ldx #12 ; 65 cycles with PAGE0 ; 2 +page0_loop: ; delay 61+bit + dex ; 2 + bne 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 + ; +page1_loop: ; delay 115+(7 loop)+4 (bit)+4(extra) + dex ; 2 + bne page1_loop ; 2/3 + + dey ; 2 + bne 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 do_nothing ; 6 + + lda KEYPRESS ; 4 + bpl no_keypress ; 3 + jmp start_over +no_keypress: + + jmp display_loop ; 3 + + + + ;================================= + ; do nothing + ;================================= + ; and take 4533-6 = 4527 cycles to do it +do_nothing: + + ; Try X=4 Y=174 cycles=4525 R2 + + nop ; 2 + + ldy #174 ; 2 +loop1: + ldx #4 ; 2 +loop2: + dex ; 2 + bne loop2 ; 2nt/3 + + dey ; 2 + bne loop1 ; 2nt/3 + + + rts ; 6 + + + + ;================================== + ; HLINE + ;================================== + + ; Color in A + ; Y has which line +hline: + pha ; 3 + ldx gr_offsets,y ; 4+ + stx hline_loop+1 ; 4 + lda gr_offsets+1,y ; 4+ + clc ; 2 + adc DRAW_PAGE ; 3 + sta hline_loop+2 ; 4 + pla ; 4 + ldx #39 ; 2 +hline_loop: + sta $5d0,X ; 38 ; 5 + dex ; 2 + bpl hline_loop ; 2nt/3 + rts ; 6 + + ;========================== + ; Clear gr screen + ;========================== + ; Color in A +clear_gr: + ldy #46 +clear_page_loop: + jsr hline + dey + dey + bpl clear_page_loop + rts + +gr_offsets: + .word $400,$480,$500,$580,$600,$680,$700,$780 + .word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8 + .word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0 + + +.include "../asm_routines/gr_unrle.s" +.include "../asm_routines/keypress.s" +.include "gr_copy.s" + +pictures: + .word spacebars_title_low,spacebars_title_high + +.include "spacebars_title.inc" +