From 9633c05d45e4f99dda27b5514f5dd14be403d6d8 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 13 Feb 2021 01:13:44 -0500 Subject: [PATCH] wires, wires --- graphics/gr/plasma/Makefile | 11 +- graphics/gr/plasma/wires.s | 206 ++++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 graphics/gr/plasma/wires.s diff --git a/graphics/gr/plasma/Makefile b/graphics/gr/plasma/Makefile index e285dae4..28fbd5b3 100644 --- a/graphics/gr/plasma/Makefile +++ b/graphics/gr/plasma/Makefile @@ -6,12 +6,13 @@ LINKERSCRIPTS = ../../../linker_scripts all: plasma.dsk -plasma.dsk: HELLO PLASMA PLASMA_TINY PLASMA_BOT +plasma.dsk: HELLO PLASMA PLASMA_TINY PLASMA_BOT WIRES cp empty.dsk plasma.dsk $(DOS33) -y plasma.dsk SAVE A HELLO $(DOS33) -y plasma.dsk BSAVE -a 0x300 PLASMA $(DOS33) -y plasma.dsk BSAVE -a 0xC00 PLASMA_TINY $(DOS33) -y plasma.dsk BSAVE -a 0x36B PLASMA_BOT + $(DOS33) -y plasma.dsk BSAVE -a 0xC00 WIRES ### @@ -43,6 +44,14 @@ PLASMA_TINY: plasma_tiny.o plasma_tiny.o: plasma_tiny.s ca65 -o plasma_tiny.o plasma_tiny.s -l plasma_tiny.lst +### + +WIRES: wires.o + ld65 -o WIRES wires.o -C $(LINKERSCRIPTS)/apple2_c00.inc + +wires.o: wires.s + ca65 -o wires.o wires.s -l wires.lst + ### diff --git a/graphics/gr/plasma/wires.s b/graphics/gr/plasma/wires.s new file mode 100644 index 00000000..4a14bca6 --- /dev/null +++ b/graphics/gr/plasma/wires.s @@ -0,0 +1,206 @@ +; wires + +; 159 -- initial +; 158 -- jmp to branch +; 152 -- special case dark blue +; 151 -- another jmp to branch +; 148 -- use $10 instead of $ff for black color +; 147 -- optimize color code + +; goal=135 + +.include "zp.inc" +.include "hardware.inc" + +CTEMP = $FC + + + ;================================ + ; Clear screen and setup graphics + ;================================ +plasma: + + jsr SETGR ; set lo-res 40x40 mode + bit FULLGR ; make it 40x48 + + ; we only create a 16x16 texture, which we pattern across 40x48 screen + +create_lookup: + ldy #15 +create_yloop: + ldx #15 +create_xloop: + + ; vertical + txa + and #$7 + bne horiz + +xnot: + tya + bne lookup_smc + +horiz: + ; horizontal + tya + and #$7 + beq ynot + lda #$10 + bne lookup_smc + +ynot: + txa +lookup_smc: + sta lookup ; always starts at $d00 + + inc lookup_smc+1 + + dex + bpl create_xloop + + dey + bpl create_yloop + + ; X and Y both $FF + +create_lookup_done: + +forever_loop: + +cycle_colors: + ; cycle colors + + ; can't do palette rotate on Apple II so faking it here + ; just incrementing every entry in texture by 1 + + ; X is $FF when arriving here +; ldx #0 + inx ; make X 0 +cycle_loop: + ldy lookup,X + cpy #$10 + beq skip_zero + iny + tya + and #$f + sta lookup,X +skip_zero: + inx + bne cycle_loop + + + + + ; set/flip pages + ; we want to flip pages and then draw to the offscreen one + +flip_pages: + +; ldx #0 ; x already 0 + + lda draw_page_smc+1 ; DRAW_PAGE + beq done_page + inx +done_page: + ldy PAGE0,X ; set display page to PAGE1 or PAGE2 + + eor #$4 ; flip draw page between $400/$800 + sta draw_page_smc+1 ; DRAW_PAGE + + + ; plot current frame + ; scan whole 40x48 screen and plot each point based on + ; lookup table colors +plot_frame: + + ldx #47 ; YY=47 (count backwards) + +plot_yloop: + + txa ; get (y&0xf)<<4 + pha ; save YY / SAVEX + + asl + asl + asl + asl + sta CTEMP ; save for later + + txa ; get Y in accumulator + lsr ; call actually wants Ycoord/2 + + + ldy #$0f ; setup mask for odd/even line + bcc plot_mask + ldy #$f0 +plot_mask: + sty MASK + + jsr GBASCALC ; point GBASL/H to address in (A is ycoord/2) + ; after, A is GBASL, C is clear + + lda GBASH ; adjust to be PAGE1/PAGE2 ($400 or $800) +draw_page_smc: + adc #0 + sta GBASH + + ;========== + + ldy #39 ; XX = 39 (countdown) + +plot_xloop: + + tya ; get x&0xf + and #$f + ora CTEMP ; combine with val from earlier + ; get ((y&0xf)*16)+x + + tax + +plot_lookup: + +plot_lookup_smc: + lda lookup,X ; load lookup, (y*16)+x + cmp #11 + bcs color_notblue ; if < 11, blue + +color_blue: + lda #$11 ; blue offset + +color_notblue: + tax + lda colorlookup-11,X ; lookup color + +color_notblack: + + sta COLOR ; each nibble should be same + + jsr PLOT1 ; plot at GBASL,Y (x co-ord goes in Y) + + dey + bpl plot_xloop + + pla + tax + + dex + bpl plot_yloop + bmi forever_loop + +colorlookup: + +;.byte $22,$22,$22,$22,$22,$22,$22,$22 +;.byte $22,$22,$22, +.byte $66,$77,$ff,$77,$66,$00,$22 + + + ; want this to be at 3f5 + ; Length is 141 so start at $3f4 - + ; 1013 - 141 + 3 = 875 = $36B + + jmp plasma + +; make lookup happen at page boundary + +.org $d00 +lookup: