From e2dc374012b4199d49ce32503353a272251ee3fe Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 17 Oct 2023 01:19:06 -0400 Subject: [PATCH] second: add ocean --- demos/second/Makefile | 7 +- demos/second/hgr_table.s | 50 +++- demos/second/part05_dot_tunnel/tunnel.s | 270 +++++++++++++++++- demos/second/part16_ocean/Makefile | 32 +++ demos/second/part16_ocean/graphics/Makefile | 81 ++++++ .../part16_ocean/graphics/frame00000024.png | Bin 0 -> 5284 bytes .../part16_ocean/graphics/frame00000025.png | Bin 0 -> 5303 bytes .../part16_ocean/graphics/frame00000026.png | Bin 0 -> 5146 bytes .../part16_ocean/graphics/frame00000027.png | Bin 0 -> 5321 bytes .../part16_ocean/graphics/frame00000028.png | Bin 0 -> 5337 bytes .../part16_ocean/graphics/frame00000029.png | Bin 0 -> 5320 bytes .../part16_ocean/graphics/frame00000030.png | Bin 0 -> 5410 bytes .../part16_ocean/graphics/frame00000031.png | Bin 0 -> 6109 bytes demos/second/part16_ocean/ocean.s | 108 +++++++ demos/second/part18_3d/3d.inc | 12 +- demos/second/qload.s | 15 +- demos/second/start.s | 11 +- demos/second/zp.inc | 39 ++- graphics/hgr/circles/Makefile | 24 +- graphics/hgr/circles/squares.s | 253 ++++++++++++++++ graphics/hgr/circles/tunnel.s | 239 ++++++++++++++++ graphics/hgr/circles/web2.s | 239 ++++++++++++++++ 22 files changed, 1345 insertions(+), 35 deletions(-) create mode 100644 demos/second/part16_ocean/Makefile create mode 100644 demos/second/part16_ocean/graphics/Makefile create mode 100644 demos/second/part16_ocean/graphics/frame00000024.png create mode 100644 demos/second/part16_ocean/graphics/frame00000025.png create mode 100644 demos/second/part16_ocean/graphics/frame00000026.png create mode 100644 demos/second/part16_ocean/graphics/frame00000027.png create mode 100644 demos/second/part16_ocean/graphics/frame00000028.png create mode 100644 demos/second/part16_ocean/graphics/frame00000029.png create mode 100644 demos/second/part16_ocean/graphics/frame00000030.png create mode 100644 demos/second/part16_ocean/graphics/frame00000031.png create mode 100644 demos/second/part16_ocean/ocean.s create mode 100644 graphics/hgr/circles/squares.s create mode 100644 graphics/hgr/circles/tunnel.s create mode 100644 graphics/hgr/circles/web2.s diff --git a/demos/second/Makefile b/demos/second/Makefile index f530fdf1..869f2ca1 100644 --- a/demos/second/Makefile +++ b/demos/second/Makefile @@ -15,6 +15,8 @@ all: second.dsk second.dsk: QBOOT QLOAD SECOND MUSIC START \ ./part01_intropan/INTRO \ + ./part05_dot_tunnel/TUNNEL \ + ./part16_ocean/OCEAN \ ./part18_3d/THREED cp $(EMPTY_DISK) second.dsk $(DOS33_RAW) second.dsk 0 0 QBOOT 0 1 @@ -22,10 +24,11 @@ second.dsk: QBOOT QLOAD SECOND MUSIC START \ $(DOS33_RAW) second.dsk 0 4 QBOOT 2 1 $(DOS33_RAW) second.dsk 1 0 QLOAD 0 0 $(DOS33_RAW) second.dsk 3 0 MUSIC 0 0 -# $(DOS33_RAW) second.dsk 5 0 SECOND 0 0 $(DOS33_RAW) second.dsk 5 0 START 0 0 $(DOS33_RAW) second.dsk 8 0 ./part01_intropan/INTRO 0 0 - $(DOS33_RAW) second.dsk 11 0 ./part18_3d/THREED 0 0 + $(DOS33_RAW) second.dsk 11 0 ./part05_dot_tunnel/TUNNEL 0 0 + $(DOS33_RAW) second.dsk 13 0 ./part16_ocean/OCEAN 0 0 + $(DOS33_RAW) second.dsk 20 0 ./part18_3d/THREED 0 0 #### diff --git a/demos/second/hgr_table.s b/demos/second/hgr_table.s index 3462059b..0b4c59c3 100644 --- a/demos/second/hgr_table.s +++ b/demos/second/hgr_table.s @@ -1,3 +1,51 @@ +;div7_table = $b800 +;mod7_table = $b900 +;hposn_high = $ba00 +;hposn_low = $bb00 + + +hgr_make_tables: + + ;===================== + ; make /7 %7 tables + ;===================== + +hgr_make_7_tables: + + ldy #0 + lda #0 + ldx #0 +div7_loop: + sta div7_table,Y + + inx + cpx #7 + bne div7_not7 + + clc + adc #1 + ldx #0 +div7_not7: + iny + bne div7_loop + + + ldy #0 + lda #0 +mod7_loop: + sta mod7_table,Y + clc + adc #1 + cmp #7 + bne mod7_not7 + lda #0 +mod7_not7: + iny + bne mod7_loop + + + ; Hposn table + ; hposn_low, hposn_high will each be filled with $C0 bytes ; based on routine by John Brooks ; posted on comp.sys.apple2 on 2018-07-11 @@ -8,7 +56,7 @@ ; vmw note: version I was using based on applesoft HPOSN was ~64 bytes ; this one is 37 bytes -build_tables: +build_hposn_tables: ldx #0 btmi: txa diff --git a/demos/second/part05_dot_tunnel/tunnel.s b/demos/second/part05_dot_tunnel/tunnel.s index cb8696f7..f6127cd6 100644 --- a/demos/second/part05_dot_tunnel/tunnel.s +++ b/demos/second/part05_dot_tunnel/tunnel.s @@ -7,18 +7,33 @@ .include "../hardware.inc" .include "../qload.inc" -hposn_low = $1713 ; 0xC0 bytes (lifetime, used by DrawLargeCharacter) -hposn_high = $1800 ; 0xC0 bytes (lifetime, used by DrawLargeCharacter) +div7_table = $b800 +mod7_table = $b900 +hposn_high = $ba00 +hposn_low = $bb00 + + + +.if 0 +R = $FC +RR = $F5 +D = $FB +CX = $FD +CY = $FE +COUNT = $F6 +MINUSXX = $F8 +MINUSYY = $FA +.endif + +tunnel: -intro_start: ;===================== ; initializations ;===================== - ;=================== - ; Load graphics - ;=================== -load_loop: +setup_graphics: + + sei bit SET_GR bit HIRES @@ -28,15 +43,248 @@ load_loop: lda #0 jsr hgr_page1_clearscreen - jsr build_tables + jsr hgr_make_tables + + + ; from R=12 to R=256 or so + +tunnel_again: + lda #0 + sta RR + +draw_next: + + ldx RR + lda star_z,X + tax + lda radii,X + sta R + + + lda #128 + sta CX + lda #96 + sta CY + + + ;=============================== + ; draw circle + ;=============================== + ; draw circle at (CX,CY) of radius R + ; signed 8-bit math so problems if R > 64? + + + ; XX=0 YY=R + ; D=3-2*R + ; GOTO6 + + lda #0 + sta XX + + lda R + sta YY + + lda #3 + sec + sbc R + sbc R + sta D + + jmp do_plots + +circle_loop: + ; X=X+1 + + inc XX + + ; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10 + lda D + bmi else + + dec YY + + lda XX + sec + sbc YY + asl + asl + clc + adc D + adc #10 + jmp store_D + +else: + ; ELSE D=D+4*X+6 + lda XX + asl + asl + clc + adc D + adc #6 +store_D: + sta D + +do_plots: + lda XX + and #$3 + bne done2 + + + ; setup constants + + lda XX + eor #$FF + sta MINUSXX + inc MINUSXX + + lda YY + eor #$FF + sta MINUSYY + inc MINUSYY + + ; HPLOT CX+X,CY+Y + ; HPLOT CX-X,CY+Y + ; HPLOT CX+X,CY-Y + ; HPLOT CX-X,CY-Y + ; HPLOT CX+Y,CY+X + ; HPLOT CX-Y,CY+X + ; HPLOT CX+Y,CY-X + ; HPLOT CX-Y,CY-X + + ; calc X co-ord + + lda #7 + sta COUNT +pos_loop: + lda COUNT + and #$4 + lsr + tay + + lda COUNT + lsr + bcc xnoc + iny +xnoc: + lda CX + clc + adc XX,Y + tax + + ; calc y co-ord + + lda COUNT + lsr + eor #$2 + tay + + lda CY + clc + adc XX,Y ; A has Y-coord + + ldy #0 + + ; want X/7 into X + ; want A looked up into OUTL + + jsr hplot ; plot at (Y,X), (A) + + dec COUNT + bpl pos_loop + + +done2: + ; IFY>=XTHEN4 + lda YY + cmp XX + bcs circle_loop + +done: + lda RR + clc + adc #1 + sta RR + + cmp #19 + beq done_frame + + ; GOTO1 + jmp draw_next + +done_frame: + lda #0 + jsr hgr_page1_clearscreen + + ldx #19 +move_circles: + dec star_z,X + dex + bpl move_circles + + jmp tunnel_again + +radii: + .byte <4000, <3200, <1600, <1066, <800, <640, <533, <457 + .byte <400, <355, <320, <290, <266, 246, 228, 213 + .byte 200, 188, 177, 168, 160, 152, 145, 139 + .byte 133, 128, 123, 118, 114, 110, 106, 103 + .byte 100, 96, 94, 91, 88, 86, 84, 82 + .byte 80, 78, 76, 74, 72, 71, 69, 68 + .byte 66, 65, 64, 62, 61, 60, 59, 58 + .byte 57, 56, 55, 54, 53, 52, 51, 50 + .byte 50, 49, 48, 47, 47, 46, 45, 45 + .byte 44, 43, 43, 42, 42, 41, 41, 40 + .byte 40, 39, 39, 38, 38, 37, 37, 36 + .byte 36, 35, 35, 35, 34, 34, 34, 33 + .byte 33, 32, 32, 32, 32, 31, 31, 31 + .byte 30, 30, 30, 29, 29, 29, 29, 28 + .byte 28, 28, 28, 27, 27, 27, 27, 26 + .byte 26, 26, 26, 26, 25, 25, 25, 25 + .byte 25, 24, 24, 24, 24, 24, 23, 23 + .byte 23, 23, 23, 23, 22, 22, 22, 22 + .byte 22, 22, 21, 21, 21, 21, 21, 21 + .byte 21, 20, 20, 20, 20, 20, 20, 20 + .byte 20, 19, 19, 19, 19, 19, 19, 19 + .byte 19, 18, 18, 18, 18, 18, 18, 18 + .byte 18, 18, 17, 17, 17, 17, 17, 17 + .byte 17, 17, 17, 17, 17, 16, 16, 16 + .byte 16, 16, 16, 16, 16, 16, 16, 16 + .byte 16, 15, 15, 15, 15, 15, 15, 15 + .byte 15, 15, 15, 15, 15, 15, 14, 14 + .byte 14, 14, 14, 14, 14, 14, 14, 14 + .byte 14, 14, 14, 14, 14, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 12 + .byte 12, 12, 12, 12, 12, 12, 12, 12 + +; num-stars = 20 + +star_z: + .byte 15,26,38,50,63,75,78,100,112,125,137 + .byte 150,162,175,187,200,212,224,237 + + -blah: - jmp blah -.align $100 .include "../wait_keypress.s" .include "../hgr_table.s" .include "../hgr_clear_screen.s" + ; A is Ycoord value + ; X is Xcoord value +hplot: + tay + lda hposn_low,Y + sta OUTL + lda hposn_high,Y + sta OUTH + + ldy div7_table,X + + lda mod7_table,X + + sta (OUTL),Y + + rts diff --git a/demos/second/part16_ocean/Makefile b/demos/second/part16_ocean/Makefile new file mode 100644 index 00000000..8e40bf6a --- /dev/null +++ b/demos/second/part16_ocean/Makefile @@ -0,0 +1,32 @@ +include ../../../Makefile.inc + +DOS33 = ../../../utils/dos33fs-utils/dos33 +DOS33_RAW = ../../../utils/dos33fs-utils/dos33_raw +EMPTY_DISK = ../../../empty_disk/empty.dsk +TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft +LINKER_SCRIPTS = ../../../linker_scripts/ + +all: OCEAN + +#### + +OCEAN: ocean.o + ld65 -o OCEAN ocean.o -C $(LINKER_SCRIPTS)/apple2_6000.inc + +ocean.o: ocean.s ../zx02_optim.s \ + graphics/frame00000024.hgr.zx02 \ + graphics/frame00000025.hgr.zx02 \ + graphics/frame00000026.hgr.zx02 \ + graphics/frame00000027.hgr.zx02 \ + graphics/frame00000028.hgr.zx02 \ + graphics/frame00000029.hgr.zx02 \ + graphics/frame00000030.hgr.zx02 \ + graphics/frame00000031.hgr.zx02 \ + ../zp.inc ../hardware.inc ../qload.inc + ca65 -o ocean.o ocean.s -l ocean.lst + +### + + +clean: + rm -f *~ *.o *.lst OCEAN diff --git a/demos/second/part16_ocean/graphics/Makefile b/demos/second/part16_ocean/graphics/Makefile new file mode 100644 index 00000000..84d4c850 --- /dev/null +++ b/demos/second/part16_ocean/graphics/Makefile @@ -0,0 +1,81 @@ +include ../../../../Makefile.inc + +ZX02 = ~/research/6502_compression/zx02.git/build/zx02 +PNG_TO_HGR = ../../../../utils/hgr-utils/png2hgr +PNG2GR = ../../../../utils/gr-utils/png2gr + +all: frame00000024.hgr.zx02 frame00000025.hgr.zx02 \ + frame00000026.hgr.zx02 frame00000027.hgr.zx02 \ + frame00000028.hgr.zx02 frame00000029.hgr.zx02 \ + frame00000030.hgr.zx02 frame00000031.hgr.zx02 + +#### + +frame00000024.hgr.zx02: frame00000024.hgr + $(ZX02) frame00000024.hgr frame00000024.hgr.zx02 + +frame00000024.hgr: frame00000024.png + $(PNG_TO_HGR) frame00000024.png > frame00000024.hgr + +#### + +frame00000025.hgr.zx02: frame00000025.hgr + $(ZX02) frame00000025.hgr frame00000025.hgr.zx02 + +frame00000025.hgr: frame00000025.png + $(PNG_TO_HGR) frame00000025.png > frame00000025.hgr + +#### + +frame00000026.hgr.zx02: frame00000026.hgr + $(ZX02) frame00000026.hgr frame00000026.hgr.zx02 + +frame00000026.hgr: frame00000026.png + $(PNG_TO_HGR) frame00000026.png > frame00000026.hgr + +#### + +frame00000027.hgr.zx02: frame00000027.hgr + $(ZX02) frame00000027.hgr frame00000027.hgr.zx02 + +frame00000027.hgr: frame00000027.png + $(PNG_TO_HGR) frame00000027.png > frame00000027.hgr + +#### + +frame00000028.hgr.zx02: frame00000028.hgr + $(ZX02) frame00000028.hgr frame00000028.hgr.zx02 + +frame00000028.hgr: frame00000028.png + $(PNG_TO_HGR) frame00000028.png > frame00000028.hgr + +#### + +frame00000029.hgr.zx02: frame00000029.hgr + $(ZX02) frame00000029.hgr frame00000029.hgr.zx02 + +frame00000029.hgr: frame00000029.png + $(PNG_TO_HGR) frame00000029.png > frame00000029.hgr + +#### + +frame00000030.hgr.zx02: frame00000030.hgr + $(ZX02) frame00000030.hgr frame00000030.hgr.zx02 + +frame00000030.hgr: frame00000030.png + $(PNG_TO_HGR) frame00000030.png > frame00000030.hgr + +#### + +frame00000031.hgr.zx02: frame00000031.hgr + $(ZX02) frame00000031.hgr frame00000031.hgr.zx02 + +frame00000031.hgr: frame00000031.png + $(PNG_TO_HGR) frame00000031.png > frame00000031.hgr + + + +#### + +clean: + rm -f *~ diff --git a/demos/second/part16_ocean/graphics/frame00000024.png b/demos/second/part16_ocean/graphics/frame00000024.png new file mode 100644 index 0000000000000000000000000000000000000000..c751f171245436f726045cd78b5b92f5070b96c0 GIT binary patch literal 5284 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 literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000025.png b/demos/second/part16_ocean/graphics/frame00000025.png new file mode 100644 index 0000000000000000000000000000000000000000..905cf5ca2420ceb149f6e88bc5ae3746ddbc8e4e GIT binary patch literal 5303 zcmeHKYg7~07LJxeiAV+U0a^_ar7Fo}GI>i-lsKOjGK0 zIpeSRNQ$n`j<0X>IhjJt)&m{C9JVh1aQW%r-3uCoc_ z^3J*jdZ*L;ZKv;a&vN_zmRH=W0nMgVccv07cebrbhp$)8sLT_#wU-3Ul*|pD>*joz z@nB13+L|EO#5-%W!R_ge(Eh{D);1|s)~k5>1Ae=8+c`Pwd3PrSr>$%X%_vy5yP&u3 zv*``p3+vbXi<{~+HP6hFY}YFCexH?fuIt!p-$G>Vr_7DFey5lOCU1mgvIdXG}z zBR)A?t5xv;AT~CZ8VgaC>M#K0a=8GF4$$co96`~oIC%ueMt`Z7g(JM5gD&TqmI#>mOR2m?c17kfjTCW(KWHg|^^w5a$ za|#5a8fCOvih9MM3hkV+6o~YdzbaZCX-Wr?0%#;E$Dta0Rq%}^eFQ?$D-WXtVKTYO z}K5^B5q7#^BM$;FX9Bi~BpY@$isbN4DHoroq>bGnqzC)Cx3eWHd62l$nkaiDWty zJXkuCf(DL35mTHv*T|GK99D#(c=s4B*OzwLUz7reg-KZ`6E7r$DZ#4=gD4UhK`0=T z%VDuWCS3xeZ?bEYm^KzxqwZn2j<{BMd788$eQesO`ER0Q!%^cd;DS*=8s)WM^ijcp z(S!kG&v==!EAT&>xS9ZCnhfqYV#Avk-V1?O&2UsRW83)$Kcjo`53Ybyzgy(3^nEAS zJGtIUfwuy`tFCu)y_EuQ1%6ju|2Mgaudh?60{<5ji(i%&dbfAs7cE}G^sB?_pak}iqF}Tq}D-e2F+#}k&KYl@Sb$KFz zV75Zw=`Pk?e;68?pF^@j0u+v+_n#~8HdHJxcir2}T`B8I%&-AjLfb7xUwV@F`a0Pr z{oP{?u|3Eoa|b2hMuSgqdGY!Xle1l!|J)I>F+JHTfN}||6wUDXaVSc^newA zxHPD-Fmdg}x#L#>-4D?V`)|ESK5{Z1`JnKevf#z`A7`aZV-!YoWnp3g^r$;y%l+qu z(p7{QGhWy62LT5fOPT#M)jXHSLzDEk`NCYPBwaSU{(8P_X^3Y+S-<5U!YTZlnMKYa%IJsCPEO8LDk3!0Nk+&!Z%RdFkBTxPPMz{b$}baBsbbLjVz zTj#Y*1&X@7(&{hjIvfDRt1a`vuBIYwpYJ|{3*X;sC?Q97K50_D8@AO2v1#)%MD<2z9$4&X=i=k$3|@@Jol|;{NhDFFwMf3=TDzMn;35HF)2MMH}~1n zt$Pf5A%OzO+drRDfL*@QYaX&z^1{ipAuG&!`l<=+Pn<7zeO?TfyKnoN6n zrK5z}>bGuboPyD~(=EGAWj58Sa<_f2bo)K;)?LcF9^z1qAuo2aa_PaNvn^emBPK*s zpwDkc>c3=}KW8_Z#r!_F0DN|EQG*}XzUAiCv}VzU^H|4^k44Egu=l@f>!9A&l)xHG zaksw;YVtdOimPw-&)=>~5`W0wpAuCXKG3zJ=Pm=NnDW!2e#!dd8J+V)K28O$Q5g@8 zV&k{1>ny2zYUPfZttD-!Tk_34;r>4E zS0xG{Ct0=l`;>IsCp4$<>c^Hog7Ulmb_2Z<@7(Z!hIPK2zTx?eg8?PZ)$1SDTir|> zWK6Czd{pR%Ru9E%3>fVbu;YYy)7SR-dQh6W{74@LlJ4d-G&VQ^9@`=@axyos_$+jf+uXDIsKW*33&2S=+2;-R-`=Ao_a$E1NX4ez3n6nw>kY77 zi=qAJ&;SV*_^IY3=0CGm*xFFnGI=)C6q3?EZr!w9ISm7LkiNpIvDK>gCo3v4@A&kM z+$wr{LV9Mp;o@y%(J_a%gWY<^G-e^zKKNznL|^~eP^HyrNhjy*?c(mQ7!_FUcd7Q+ z+HK#K@{=n38lPUPxfFhA7eB|rdA(PtRGIgJrjD*dH=GhIrJwMKY+(Y VJr=>&@s2|fc=>ytUb=3}e*wV535oy! literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000026.png b/demos/second/part16_ocean/graphics/frame00000026.png new file mode 100644 index 0000000000000000000000000000000000000000..02c655fe2bb4556580d5ddc3dd41f837621c5f40 GIT binary patch literal 5146 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 Xa9(=M$Z7u^v^9q3vy5Bl9kJm*5GKIM literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000027.png b/demos/second/part16_ocean/graphics/frame00000027.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a782af417f6ce315897725294b0914f345db96 GIT binary patch literal 5321 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 literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000028.png b/demos/second/part16_ocean/graphics/frame00000028.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b5e4590e4c6ba2fd7064b778b6295de7d93c45 GIT binary patch literal 5337 zcmeHKc~DbV7Y~S_C{+|i1Th8`QIov9ti%Mw1R+Xf6^yt&l9v!6i%B2>6ju-tv0!C! zL1hYREm*!vm1-3QL`no)s1{tHhz^^msL;Cb-2_COuQMHIzW!$>dGEfn{O&owbMBeE zU4F~FtSqNmVlWsho;NoDgE5%`)}>}6z!m>9!UMOm*q{}f07Q#bsuW^rB#PC4RL1$mL6Xu_NYUPs&Z$2n$ndi=+xvC4XV^;M@MR>zy5(`$B6_W!z(sNrqeG|Jzh zlc?IvKbEt|$A69s6gEF{_3@5TJ&D@zDU2JcnrWGCVcC&!5yf#?;VoCf_4A)&qJ>S( z35O5%hd+c)U3L+V`Sa}Y5zj^hE)itl|Ja%U^4lThaQt{2&WChB5{EXWvAxR{I#jF; z%$qyOVoWkabmDMlZh%9?q-4Jtw=D~pS*!jU$)B2TW9xOfxT&c!tp0L^AjBfXWBgmp zhNukznzRZ1nKmoSW0m*zYI_~E-I!zk$btHa7L@z6TU9%EXvS zT@nggIvm|DKJbhQ?p1G2^`I(9rOp#7vyp~!`|=`wW77p+hp<_KS#Hibl(ucupnW0(s^ZqQq|G>5KRcfF&ac<(I>EN69|e9LwYHsIUNSA_1T9i3ed z$p!D@G4*w-n!5o>5NJD{6tve0z7JEVkP#4(A`B(yWJ=I?7!1o@r$mGis0JH`N~Cf& zuKWBY99Ak~<3gx>h_B?J;ZpBd6&e`3EJzp|A#@et+}$i$Iwk;+p&A6MlSRtaOdT6% z#ASlDK}^J9jV781Hf{yq56e-gP%MQ&AwYOfoirN8xmjXaDv_8Oz+F5D0iM{naE(UE zBoeh+EkR2rC{z+6$<@`B2*E@c#sdqyI!3NRba=Vi$pA5c!9~?Vl~k#bD&$xLCK9HI z(y(zjpvQiQPp0Jahv4PvK^6cXL>;0ek_Zq{CL<2_P-{G+0mxuLf9s(R0;iN1fT|Ty zDk16_jmkAn!y!b%A%A6*D$wPhvA@jOh#y1h^03eq#M0ccU?|;`5nYg)qtx9*@h$8TMz26hf(pXEoN`)CTG6^O#J{kq1DmCat111R~kSRuup)5?03?LRU z^eF%^%0VtnjtWII3RRFo5y{3GLc$t6htzy3X0H%Q#WDY6Z8$tw)Xm)__VFj>sh_m>z@e`av%Jn^u4j28{;M>3C2o1W!RgD=<5pV_C)5sNejq9%8Lq-Rg!KQ~V)m6+ny7v6Owj=57c5c?T>GroO{mdw>edS9Z*FI`2 zqMA-$Y6Fd4uV`|ty1}!&mC@68@2sWwYkjn5PeO2LgL99ZCynjNCr|B)_pvv(EqyYn zv*=K>CXJ%4#8_~G+b;&58Pjoxoe@~?TPCWDG0{2iB<=WZ9yQ0;raQ6oEYl%yR^IIK zVomN-7qb(cg74mc)7_Camc>ZC7_ABS-aUI^f`gz|ZoGCP?!O85LiX^s8dsS;>O!Oh~I9J5Z% zn@^}sN1@s}tgY~7iOsCZ(TwrwV<%Pxr}zh^bh&VoMlMWBVVF+J zPj7+u-P|{R)a=I@_lc3Tq`y4vi+^{c*qjTfDEss3m0bOtKR4dE)4&Ow^bk8`?8!|h z#^jy&(WPCIrM%W`SAp+3W0KZTald$)C?#&;t ze0?9uxpAB1k)VV=bCV^binXluLCI^bBsNF?{=&4BN3G8vm&Mfj1Rn1%k~l>8Wj3^j>~r>n&uq4b~iyfSEcwaL||Hx z62GV;AH+q^Ko&BjXAcf;g$y!RxSFAWcK>&g4+45IQ$(iHhFr{k%$*(21QhR(b`f7isuIdMY`P!L1 literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000029.png b/demos/second/part16_ocean/graphics/frame00000029.png new file mode 100644 index 0000000000000000000000000000000000000000..cf48cca23118657391ac75989b3b094302b67c38 GIT binary patch literal 5320 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 literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000030.png b/demos/second/part16_ocean/graphics/frame00000030.png new file mode 100644 index 0000000000000000000000000000000000000000..8579d9a10bd32afc1dc69ba9011ff0b3078a5a33 GIT binary patch literal 5410 zcmeHKX;f3!77mJ_AXc0ZRJ;ZpP?OwDkVL{@n4&~uKqC*V+?(9QNG6gX0V*os0MZ}` z3aB_#P^w_HqOFQTMNtIA0*XTgL7-J8Wm0S9-2_xzuj{?#TCe}iTDj-kefIv&-rwG5 zuY2OT%e*bjY|Jnij0M}rgNMNwO-1KL#v{=u?gGR{hpUnPt2I0*98jthB8e0MG!aS! zK(rDO2BUo-<36;w3XXm&PS9=MQU~g~kJnf*qC8{%mDT1p#rF{;|r$1k_MKZgD6Icvu+ zU9awR-J5h~5}dG@y~S1lQDyfmTP!-OXyA@L>JDv><dQ7wO5{u%$>Y|N( zyYH)t6?q9;_&oyS5!f9!%SkQv z4qNk^p4+-ye(V{ss$acH=T21+i{?%!&43=1Oe;CfdDw7i`E+=8z-*VfS(HCwN|J*3 z&e2Ulnt+CkS>)YWbH`ckyf$tXBR$RcTkSU5$@Pq8^MIt4m4W*UmV8^#adYj|^5+X~ z1s$X7?5CVI9)q1!!}S{Fc;xJ}qpN+YqmS&|RNlMvDeuNg6T8w8-&X+_qq|&R{g$^f zJ?mvk%$P&{*Fs(9Y%aoAom^Def4YgX95X;xW}pA7)&%^M9a)&SHEHuF z=5gQ~;fSU~w8XdxwmhzAKW8DY4ETI0C^1sQVaZ!OgR=qV-e5Vayq zB|tnkAaae}a0sE`gS|3LB{hU26c7+8B12Wx=&r<1w)AFmxF0O^6o@4{+u^W_8Ee?m_p%8@W-D7(&vHJZPLWMvgWDHK7NK`~5 zq~c%_6~a*<0TD;1K`@Ri6v2oSg$fI4#9>fuxmp9s1&AIB1;m`)VnV31CNK^jD()18JvELTa;s)VG&z0yMoQ792vL?t0)7$=~DjyQ^th~Vh3 zkc1N?Dx|<5Y=9C97+wmM3_{Z>kwIdFpp=UZ3wpvC?p!t#OTvR6C0r?_5upZ5 ztgl2Krv13!FOeaB8c5G3(UI;%B|4HR6rvM_lmMm;6mBP!JeK1PC2RqljP}MdXB56Ol^AkthO~ z4w30(nqV-0AJEkbktQ5cA?{+7N0ckHJPlj{^9+e{_|%v1b%;I-C}B7vi2FzwWr#4s zP{0Iz&v+lPGvPltaW*InYci+gw<({33( zrMw#$7^ny|nwI%4`5?<0m5x#R1gJ3>yq*4Uq|J8SfC^1DY>uaCtC^+oL}O#~xIGw* zaS_|Y-Cz5leV2X_7I+hLl$Yy2 zKW$0&e;=Oz(*J^d#HuiQ&K}N{t{q*T4_|yUucSx2kPz)Go^WVcl5scowbp(*ub2C^ z)YQfR`Lv}A<@`Rk&3!XzrrR2t zGTUFp{TjKg;B-f5)7U?28-pv)MMa&uSf;F+c`)QKH>z;CjqdP#o4);Vjt$Zvda zGWYoS?&){!cDsu!$$@X|$LyrdVP{!(gai@%f(|K*TXc470&^M9I;vwGbZ$?M?;jnb zPK~h6^mkomF0Dzdj&)zGO%6+Zd*nKd#IIv7y0cT`7#z{k%n&|27wuj_6`#qi(i8_Z z$Hcjf*_9P8Y4t+C7eW#;!0yv&eQ_p@imZlu8Y>YL@Svz^2HboM2xDRWn@DY>(7 zj$KX1fu&`?hu^53fxu+azw)*ajUxj!xuX;(x({6W!OJ>hISf5vyaBm-6t3q7qO{eVn? zS#I~zf)U)-14Z}Pxl&)Rm*#lvM2CF0`q0{ncD(K0AmP)3Kc*e`$&$Rq=96^u8;bA7 z&$FJYqVsj~C$Ls@$+57jz|AHiQ(aa@*_f1=x@P@t%%~If5hNB~Eo}L^v2BLM+TO(C zQJrl|aT$l#>X?OKW=raorxUD$eovQ>8s!c$>4p2`hPr_>X9(`S=hJ(X%3ZyCI9nE8 zHHUwV_8e&ybsex9IJe`pxNJ9ax6mmdXpcDKN$2f!9sNvVK`M+`?=o*3Z56Z^aqGNw zY)q9>+lqQhB^ew!tlg}F2 r@y&MUTSYZ^Q>E2)(Zc@Z6+Nb`4S-Ra>s@2Cy literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/graphics/frame00000031.png b/demos/second/part16_ocean/graphics/frame00000031.png new file mode 100644 index 0000000000000000000000000000000000000000..cd35f4c0e5d504866d658d6a52b20702d76f7ce1 GIT binary patch literal 6109 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 literal 0 HcmV?d00001 diff --git a/demos/second/part16_ocean/ocean.s b/demos/second/part16_ocean/ocean.s new file mode 100644 index 00000000..ab07fd59 --- /dev/null +++ b/demos/second/part16_ocean/ocean.s @@ -0,0 +1,108 @@ +; Ocean + +; +; by deater (Vince Weaver) + +.include "../zp.inc" +.include "../hardware.inc" +.include "../qload.inc" + +ocean_start: + ;===================== + ; initializations + ;===================== + + ;=================== + ; Load graphics + ;=================== +load_loop: + + bit SET_GR + bit HIRES + bit FULLGR + bit PAGE1 + + lda #0 + sta COUNT + +ocean_loop: + + ; logo 1 + ldx COUNT + + lda frame_data_l,X + sta zx_src_l+1 + + lda frame_data_h,X + sta zx_src_h+1 + + lda #$40 + + jsr zx02_full_decomp + + + bit PAGE2 + inc COUNT + + ; right logo + + ldx COUNT + + lda frame_data_l,X + sta zx_src_l+1 + + lda frame_data_h,X + sta zx_src_h+1 + + lda #$20 + + jsr zx02_full_decomp + + bit PAGE1 + + inc COUNT + lda COUNT + cmp #14 + bne no_count_oflo + + lda #0 + sta COUNT +no_count_oflo: + + jmp ocean_loop + + + .include "../wait_keypress.s" + .include "../zx02_optim.s" + +frame_data_l: + .byte frame24_data,>frame25_data,>frame26_data,>frame27_data + .byte >frame28_data,>frame29_data,>frame30_data,>frame31_data + + .byte >frame30_data,>frame29_data,>frame28_data + .byte >frame27_data,>frame26_data,>frame25_data;,>frame24_data + +frame24_data: + .incbin "graphics/frame00000024.hgr.zx02" +frame25_data: + .incbin "graphics/frame00000025.hgr.zx02" +frame26_data: + .incbin "graphics/frame00000026.hgr.zx02" +frame27_data: + .incbin "graphics/frame00000027.hgr.zx02" +frame28_data: + .incbin "graphics/frame00000028.hgr.zx02" +frame29_data: + .incbin "graphics/frame00000029.hgr.zx02" +frame30_data: + .incbin "graphics/frame00000030.hgr.zx02" +frame31_data: + .incbin "graphics/frame00000031.hgr.zx02" + diff --git a/demos/second/part18_3d/3d.inc b/demos/second/part18_3d/3d.inc index abda241f..eeed5203 100644 --- a/demos/second/part18_3d/3d.inc +++ b/demos/second/part18_3d/3d.inc @@ -130,7 +130,17 @@ frame15: ; handmade / auto .include "auto/frame143.inc" ; .include "auto/frame144.inc" ; .include "auto/frame145.inc" ; + .include "auto/frame146.inc" ; + .include "auto/frame147.inc" ; + .include "auto/frame148.inc" ; + .include "auto/frame149.inc" ; + .include "auto/frame150.inc" ; + .include "auto/frame151.inc" ; + .include "auto/frame152.inc" ; + .include "auto/frame153.inc" ; + .include "auto/frame154.inc" ; + .include "auto/frame155.inc" ; -num_scenes=(145-15)+1 +num_scenes=(155-15)+1 diff --git a/demos/second/qload.s b/demos/second/qload.s index 17b4365a..e99261f6 100644 --- a/demos/second/qload.s +++ b/demos/second/qload.s @@ -160,19 +160,24 @@ error_string: .endif which_disk_array: - .byte 1,1,1,1 ; SECOND, MUSIC, INTRO, 3D + .byte 1,1,1,1 ; SECOND, MUSIC, INTRO, TUNNEL + .byte 1,1 ; 3D, OCEAN load_address_array: - .byte $20,$D0,$60,$40 ; SECOND, MUSIC, INTRO, 3D + .byte $20,$D0,$60,$60 ; SECOND, MUSIC, INTRO, TUNNEL + .byte $40,$60 ; 3D, OCEAN track_array: - .byte 5, 3, 8,11 ; SECOND, MUSIC, ?, ? + .byte 5, 3, 8, 11 ; SECOND, MUSIC, INTRO, TUNNEL + .byte 20,13 ; 3D, OCEAN sector_array: - .byte 0, 0, 0, 0 ; SECOND, MUSIC, ?, ? + .byte 0, 0, 0, 0 ; SECOND, MUSIC, INTRO, TUNNEL + .byte 0, 0 ; 3D, OCEAN length_array: - .byte 16, 32, 84, 128 ; SECOND, MUSIC, ?, ? + .byte 16, 32, 84, 16 ; SECOND, MUSIC, INTRO, TUNNEL + .byte 128,64 ; 3D, OCEAN .include "lc_detect.s" .include "wait.s" diff --git a/demos/second/start.s b/demos/second/start.s index 6e69c805..d7a0f842 100644 --- a/demos/second/start.s +++ b/demos/second/start.s @@ -238,8 +238,11 @@ load_loop: ; start music ;======================= - lda #3 -; lda #2 + lda #5 ; OCEAN + +; lda #4 ; THREED +; lda #3 ; TUNNEL +; lda #2 ; INTRO sta WHICH_LOAD @@ -248,7 +251,9 @@ load_loop: cli - jmp $4000 +; jmp $4000 + + jmp $6000 forever: jmp forever diff --git a/demos/second/zp.inc b/demos/second/zp.inc index cc625544..b5054e4d 100644 --- a/demos/second/zp.inc +++ b/demos/second/zp.inc @@ -139,8 +139,7 @@ ANGLE = $9A ;COLOR1 = $E0 ;COLOR2 = $E1 ;MATCH = $E2 -XX = $E3 -YY = $E4 + HGR_COLOR = $E4 ;SHIPY = $E4 ;YADD = $E5 @@ -165,25 +164,45 @@ OFFSET = $EF IRQ_COUNTDOWN = $F0 -LASTKEY = $F1 -PADDLE_STATUS = $F2 +;LASTKEY = $F1 +;PADDLE_STATUS = $F2 SPRITETEMP = $F2 XPOS = $F3 YPOS = $F4 +XSAVE = $F6 +SCROLL_IN = $F7 +SCROLL_OUT = $F8 +STRING_COUNT = $F9 TEMP = $FA +MEMCOUNT = $FA TEMPY = $FB +LEAD0 = $FB INL = $FC INH = $FD OUTL = $FE OUTH = $FF -XSAVE = $F6 -SCROLL_IN=$F7 -SCROLL_OUT=$F8 -STRING_COUNT = $F9 -MEMCOUNT= $FA -LEAD0 = $FB +; tunnel + +RR = $F0 +COUNT = $F1 +XX = $F2 +MINUSXX = $F3 +YY = $F4 +MINUSYY = $F5 +D = $F6 +R = $F7 +CX = $F8 +CY = $F9 + + + + + + + + diff --git a/graphics/hgr/circles/Makefile b/graphics/hgr/circles/Makefile index 1e420008..c8e1274d 100644 --- a/graphics/hgr/circles/Makefile +++ b/graphics/hgr/circles/Makefile @@ -9,7 +9,8 @@ all: circles.dsk circles.dsk: HELLO CIRCLES CIRCLES_FILL ARCS WEB PAC ORB ORB_TINY \ BRES.BAS BRESBOT.BAS BRESCOOL.BAS HORROR \ - MID.BAS MIDBOT.BAS MIDCOOL.BAS BRESTEST.BAS ARCS_BOT + MID.BAS MIDBOT.BAS MIDCOOL.BAS BRESTEST.BAS ARCS_BOT \ + TUNNEL WEB2 cp $(EMPTY_DISK)/empty.dsk circles.dsk $(DOS33) -y circles.dsk SAVE A HELLO $(DOS33) -y circles.dsk SAVE A BRES.BAS @@ -28,6 +29,8 @@ circles.dsk: HELLO CIRCLES CIRCLES_FILL ARCS WEB PAC ORB ORB_TINY \ $(DOS33) -y circles.dsk BSAVE -a 0x03f5 ORB_TINY $(DOS33) -y circles.dsk BSAVE -a 0x03f5 HORROR $(DOS33) -y circles.dsk BSAVE -a 0x9600 ARCS_BOT + $(DOS33) -y circles.dsk BSAVE -a 0x0C00 TUNNEL + $(DOS33) -y circles.dsk BSAVE -a 0x0C00 WEB2 ### @@ -81,6 +84,23 @@ circles.o: circles.s ### +TUNNEL: tunnel.o + ld65 -o TUNNEL tunnel.o -C $(LINKER_SCRIPTS)/apple2_c00.inc + +tunnel.o: tunnel.s + ca65 -o tunnel.o tunnel.s -l tunnel.lst + +### + +WEB2: web2.o + ld65 -o WEB2 web2.o -C $(LINKER_SCRIPTS)/apple2_c00.inc + +web2.o: web2.s + ca65 -o web2.o web2.s -l web2.lst + + +### + CIRCLES_FILL: circles_fill.o ld65 -o CIRCLES_FILL circles_fill.o -C $(LINKER_SCRIPTS)/apple2_c00.inc @@ -149,4 +169,4 @@ horror.o: horror.s clean: rm -f *~ *.o *.lst CIRCLES ARCS WEB CIRCLES_FILL PAC ORB \ BRES.BAS BRESBOT.BAS BRESCOOL.BAS BRESTEST.BAS \ - MID.BAS MIDBOT.BAS MIDCOOL.BAS ORB_TINY HORROR + MID.BAS MIDBOT.BAS MIDCOOL.BAS ORB_TINY HORROR TUNNEL WEB2 diff --git a/graphics/hgr/circles/squares.s b/graphics/hgr/circles/squares.s new file mode 100644 index 00000000..2d669282 --- /dev/null +++ b/graphics/hgr/circles/squares.s @@ -0,0 +1,253 @@ +; tunnel + +; D0+ used by HGR routines + +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +RR = $F5 +COUNT = $F6 + + + +XX = $F7 +MINUSXX = $F8 +YY = $F9 +MINUSYY = $FA + +D = $FB +R = $FC +CX = $FD +CY = $FE +FRAME = $FF + +; soft-switches + +KEYPRESS = $C000 +KEYRESET = $C010 + +; ROM routines + +HGR2 = $F3D8 ; set hires page2 and clear $4000-$5fff +HGR = $F3E2 ; set hires page1 and clear $2000-$3fff +HPLOT0 = $F457 ; plot at (Y,X), (A) +HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X +COLORTBL = $F6F6 +PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved) +NEXTCOL = $F85F ; COLOR=COLOR+3 +SETCOL = $F864 ; COLOR=A +SETGR = $FB40 ; set graphics and clear LO-RES screen +BELL2 = $FBE4 +WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us + +tunnel: + ; from R=12 to R=256 or so + + + jsr HGR2 + + lda #0 + sta RR + +draw_next: + + ldx RR + lda star_z,X + tax + lda radii,X + sta R + + +; lda KEYPRESS +; bpl draw_next + +; bit KEYRESET + + + lda #128 + sta CX + lda #96 + sta CY + + + ;=============================== + ; draw circle + ;=============================== + ; draw circle at (CX,CY) of radius R + ; signed 8-bit math so problems if R > 64? + + + ; XX=0 YY=R + ; D=3-2*R + ; GOTO6 + + lda #0 + sta XX + + lda R + sta YY + + lda #3 + sec + sbc R + sbc R + sta D + + jmp do_plots + +circle_loop: + ; X=X+1 + + inc XX + + lda XX + and #3 + bne circle_loop + + ; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10 + lda D + bmi else + + dec YY + + lda XX + sec + sbc YY + asl + asl + clc + adc D + adc #10 + jmp store_D + +else: + ; ELSE D=D+4*X+6 + lda XX + asl + asl + clc + adc D + adc #6 +store_D: + sta D + +do_plots: + ; setup constants + + lda XX + eor #$FF + sta MINUSXX + inc MINUSXX + + lda YY + eor #$FF + sta MINUSYY + inc MINUSYY + + ; HPLOT CX+X,CY+Y + ; HPLOT CX-X,CY+Y + ; HPLOT CX+X,CY-Y + ; HPLOT CX-X,CY-Y + ; HPLOT CX+Y,CY+X + ; HPLOT CX-Y,CY+X + ; HPLOT CX+Y,CY-X + ; HPLOT CX-Y,CY-X + + ; calc X co-ord + + lda #7 + sta COUNT +pos_loop: + lda COUNT + and #$4 + lsr + tay + + lda COUNT + lsr + bcc xnoc + iny +xnoc: + lda CX + clc + adc XX,Y + tax + + ; calc y co-ord + + lda COUNT + lsr + eor #$2 + tay + + lda CY + clc + adc XX,Y + + ldy #0 + + jsr HPLOT0 ; plot at (Y,X), (A) + + dec COUNT + bpl pos_loop + + + ; IFY>=XTHEN4 + lda YY + cmp XX + bcs circle_loop + +done: + lda RR + clc + adc #1 + sta RR +stop: + cmp #19 + beq stop + + ; GOTO1 + jmp draw_next + + +radii: + .byte <4000, <3200, <1600, <1066, <800, <640, <533, <457 + .byte <400, <355, <320, <290, <266, 246, 228, 213 + .byte 200, 188, 177, 168, 160, 152, 145, 139 + .byte 133, 128, 123, 118, 114, 110, 106, 103 + .byte 100, 96, 94, 91, 88, 86, 84, 82 + .byte 80, 78, 76, 74, 72, 71, 69, 68 + .byte 66, 65, 64, 62, 61, 60, 59, 58 + .byte 57, 56, 55, 54, 53, 52, 51, 50 + .byte 50, 49, 48, 47, 47, 46, 45, 45 + .byte 44, 43, 43, 42, 42, 41, 41, 40 + .byte 40, 39, 39, 38, 38, 37, 37, 36 + .byte 36, 35, 35, 35, 34, 34, 34, 33 + .byte 33, 32, 32, 32, 32, 31, 31, 31 + .byte 30, 30, 30, 29, 29, 29, 29, 28 + .byte 28, 28, 28, 27, 27, 27, 27, 26 + .byte 26, 26, 26, 26, 25, 25, 25, 25 + .byte 25, 24, 24, 24, 24, 24, 23, 23 + .byte 23, 23, 23, 23, 22, 22, 22, 22 + .byte 22, 22, 21, 21, 21, 21, 21, 21 + .byte 21, 20, 20, 20, 20, 20, 20, 20 + .byte 20, 19, 19, 19, 19, 19, 19, 19 + .byte 19, 18, 18, 18, 18, 18, 18, 18 + .byte 18, 18, 17, 17, 17, 17, 17, 17 + .byte 17, 17, 17, 17, 17, 16, 16, 16 + .byte 16, 16, 16, 16, 16, 16, 16, 16 + .byte 16, 15, 15, 15, 15, 15, 15, 15 + .byte 15, 15, 15, 15, 15, 15, 14, 14 + .byte 14, 14, 14, 14, 14, 14, 14, 14 + .byte 14, 14, 14, 14, 14, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 12 + .byte 12, 12, 12, 12, 12, 12, 12, 12 + +; num-stars = 20 + +star_z: + .byte 15,26,38,50,63,75,78,100,112,125,137 + .byte 150,162,175,187,200,212,224,237 + + diff --git a/graphics/hgr/circles/tunnel.s b/graphics/hgr/circles/tunnel.s new file mode 100644 index 00000000..03e1ae01 --- /dev/null +++ b/graphics/hgr/circles/tunnel.s @@ -0,0 +1,239 @@ +; tunnel + +; D0+ used by HGR routines + +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +RR = $F5 +COUNT = $F6 + + + +XX = $F7 +MINUSXX = $F8 +YY = $F9 +MINUSYY = $FA + +D = $FB +R = $FC +CX = $FD +CY = $FE +FRAME = $FF + +; soft-switches + +KEYPRESS = $C000 +KEYRESET = $C010 + +; ROM routines + +HGR2 = $F3D8 ; set hires page2 and clear $4000-$5fff +HGR = $F3E2 ; set hires page1 and clear $2000-$3fff +HPLOT0 = $F457 ; plot at (Y,X), (A) +HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X +COLORTBL = $F6F6 +PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved) +NEXTCOL = $F85F ; COLOR=COLOR+3 +SETCOL = $F864 ; COLOR=A +SETGR = $FB40 ; set graphics and clear LO-RES screen +BELL2 = $FBE4 +WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us + +tunnel: + ; from R=12 to R=256 or so + + + jsr HGR2 + + lda #10 + sta RR + +draw_next: + + ldx RR + lda radii,X + sta R + + +; lda KEYPRESS +; bpl draw_next + +; bit KEYRESET + + + lda #128 + sta CX + lda #96 + sta CY + + + ;=============================== + ; draw circle + ;=============================== + ; draw circle at (CX,CY) of radius R + ; signed 8-bit math so problems if R > 64? + + + ; XX=0 YY=R + ; D=3-2*R + ; GOTO6 + + lda #0 + sta XX + + lda R + sta YY + + lda #3 + sec + sbc R + sbc R + sta D + + jmp do_plots + +circle_loop: + ; X=X+1 + + inc XX + + ; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10 + lda D + bmi else + + dec YY + + lda XX + sec + sbc YY + asl + asl + clc + adc D + adc #10 + jmp store_D + +else: + ; ELSE D=D+4*X+6 + lda XX + asl + asl + clc + adc D + adc #6 +store_D: + sta D + +do_plots: + ; setup constants + + lda XX + eor #$FF + sta MINUSXX + inc MINUSXX + + lda YY + eor #$FF + sta MINUSYY + inc MINUSYY + + ; HPLOT CX+X,CY+Y + ; HPLOT CX-X,CY+Y + ; HPLOT CX+X,CY-Y + ; HPLOT CX-X,CY-Y + ; HPLOT CX+Y,CY+X + ; HPLOT CX-Y,CY+X + ; HPLOT CX+Y,CY-X + ; HPLOT CX-Y,CY-X + + ; calc X co-ord + + lda #7 + sta COUNT +pos_loop: + lda COUNT + and #$4 + lsr + tay + + lda COUNT + lsr + bcc xnoc + iny +xnoc: + lda CX + clc + adc XX,Y + tax + + ; calc y co-ord + + lda COUNT + lsr + eor #$2 + tay + + lda CY + clc + adc XX,Y + + ldy #0 + + jsr HPLOT0 ; plot at (Y,X), (A) + + dec COUNT + bpl pos_loop + + + ; IFY>=XTHEN4 + lda YY + cmp XX + bcs circle_loop + +done: + lda RR + clc + adc #1 + sta RR +stop: + cmp #250 + beq stop + + ; GOTO1 + jmp draw_next + + +radii: + .byte <4000, <3200, <1600, <1066, <800, <640, <533, <457 + .byte <400, <355, <320, <290, <266, 246, 228, 213 + .byte 200, 188, 177, 168, 160, 152, 145, 139 + .byte 133, 128, 123, 118, 114, 110, 106, 103 + .byte 100, 96, 94, 91, 88, 86, 84, 82 + .byte 80, 78, 76, 74, 72, 71, 69, 68 + .byte 66, 65, 64, 62, 61, 60, 59, 58 + .byte 57, 56, 55, 54, 53, 52, 51, 50 + .byte 50, 49, 48, 47, 47, 46, 45, 45 + .byte 44, 43, 43, 42, 42, 41, 41, 40 + .byte 40, 39, 39, 38, 38, 37, 37, 36 + .byte 36, 35, 35, 35, 34, 34, 34, 33 + .byte 33, 32, 32, 32, 32, 31, 31, 31 + .byte 30, 30, 30, 29, 29, 29, 29, 28 + .byte 28, 28, 28, 27, 27, 27, 27, 26 + .byte 26, 26, 26, 26, 25, 25, 25, 25 + .byte 25, 24, 24, 24, 24, 24, 23, 23 + .byte 23, 23, 23, 23, 22, 22, 22, 22 + .byte 22, 22, 21, 21, 21, 21, 21, 21 + .byte 21, 20, 20, 20, 20, 20, 20, 20 + .byte 20, 19, 19, 19, 19, 19, 19, 19 + .byte 19, 18, 18, 18, 18, 18, 18, 18 + .byte 18, 18, 17, 17, 17, 17, 17, 17 + .byte 17, 17, 17, 17, 17, 16, 16, 16 + .byte 16, 16, 16, 16, 16, 16, 16, 16 + .byte 16, 15, 15, 15, 15, 15, 15, 15 + .byte 15, 15, 15, 15, 15, 15, 14, 14 + .byte 14, 14, 14, 14, 14, 14, 14, 14 + .byte 14, 14, 14, 14, 14, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 12 + .byte 12, 12, 12, 12, 12, 12, 12, 12 diff --git a/graphics/hgr/circles/web2.s b/graphics/hgr/circles/web2.s new file mode 100644 index 00000000..daaf2264 --- /dev/null +++ b/graphics/hgr/circles/web2.s @@ -0,0 +1,239 @@ +; tunnel + +; D0+ used by HGR routines + +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +RR = $F5 +COUNT = $F6 + + + +XX = $F7 +MINUSXX = $F8 +YY = $F9 +MINUSYY = $FA + +D = $FB +R = $FC +CX = $FD +CY = $FE +FRAME = $FF + +; soft-switches + +KEYPRESS = $C000 +KEYRESET = $C010 + +; ROM routines + +HGR2 = $F3D8 ; set hires page2 and clear $4000-$5fff +HGR = $F3E2 ; set hires page1 and clear $2000-$3fff +HPLOT0 = $F457 ; plot at (Y,X), (A) +HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X +COLORTBL = $F6F6 +PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved) +NEXTCOL = $F85F ; COLOR=COLOR+3 +SETCOL = $F864 ; COLOR=A +SETGR = $FB40 ; set graphics and clear LO-RES screen +BELL2 = $FBE4 +WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us + +tunnel: + ; from R=12 to R=256 or so + + + jsr HGR2 + + lda #13 + sta RR + +draw_next: + + ldx RR + lda radii,X + sta R + + +; lda KEYPRESS +; bpl draw_next + +; bit KEYRESET + + + lda #128 + sta CX + lda #96 + sta CY + + + ;=============================== + ; draw circle + ;=============================== + ; draw circle at (CX,CY) of radius R + ; signed 8-bit math so problems if R > 64? + + + ; XX=0 YY=R + ; D=3-2*R + ; GOTO6 + + lda #0 + sta XX + + lda R + sta YY + + lda #3 + sec + sbc R + sbc R + sta D + + jmp do_plots + +circle_loop: + ; X=X+1 + + inc XX + + ; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10 + lda D + bmi else + + dec YY + + lda XX + sec + sbc YY + asl + asl + clc + adc D + adc #10 + jmp store_D + +else: + ; ELSE D=D+4*X+6 + lda XX + asl + asl + clc + adc D + adc #6 +store_D: + sta D + +do_plots: + ; setup constants + + lda XX + eor #$FF + sta MINUSXX + inc MINUSXX + + lda YY + eor #$FF + sta MINUSYY + inc MINUSYY + + ; HPLOT CX+X,CY+Y + ; HPLOT CX-X,CY+Y + ; HPLOT CX+X,CY-Y + ; HPLOT CX-X,CY-Y + ; HPLOT CX+Y,CY+X + ; HPLOT CX-Y,CY+X + ; HPLOT CX+Y,CY-X + ; HPLOT CX-Y,CY-X + + ; calc X co-ord + + lda #7 + sta COUNT +pos_loop: + lda COUNT + and #$4 + lsr + tay + + lda COUNT + lsr + bcc xnoc + iny +xnoc: + lda CX + clc + adc XX,Y + tax + + ; calc y co-ord + + lda COUNT + lsr + eor #$2 + tay + + lda CY + clc + adc XX,Y + + ldy #0 + + jsr HPLOT0 ; plot at (Y,X), (A) + + dec COUNT + bpl pos_loop + + + ; IFY>=XTHEN4 + lda YY + cmp XX + bcs circle_loop + +done: + lda RR + clc + adc #1 + sta RR +stop: + cmp #250 + beq stop + + ; GOTO1 + jmp draw_next + + +radii: + .byte <4000, <3200, <1600, <1066, <800, <640, <533, <457 + .byte <400, <355, <320, <290, <266, 246, 228, 213 + .byte 200, 188, 177, 168, 160, 152, 145, 139 + .byte 133, 128, 123, 118, 114, 110, 106, 103 + .byte 100, 96, 94, 91, 88, 86, 84, 82 + .byte 80, 78, 76, 74, 72, 71, 69, 68 + .byte 66, 65, 64, 62, 61, 60, 59, 58 + .byte 57, 56, 55, 54, 53, 52, 51, 50 + .byte 50, 49, 48, 47, 47, 46, 45, 45 + .byte 44, 43, 43, 42, 42, 41, 41, 40 + .byte 40, 39, 39, 38, 38, 37, 37, 36 + .byte 36, 35, 35, 35, 34, 34, 34, 33 + .byte 33, 32, 32, 32, 32, 31, 31, 31 + .byte 30, 30, 30, 29, 29, 29, 29, 28 + .byte 28, 28, 28, 27, 27, 27, 27, 26 + .byte 26, 26, 26, 26, 25, 25, 25, 25 + .byte 25, 24, 24, 24, 24, 24, 23, 23 + .byte 23, 23, 23, 23, 22, 22, 22, 22 + .byte 22, 22, 21, 21, 21, 21, 21, 21 + .byte 21, 20, 20, 20, 20, 20, 20, 20 + .byte 20, 19, 19, 19, 19, 19, 19, 19 + .byte 19, 18, 18, 18, 18, 18, 18, 18 + .byte 18, 18, 17, 17, 17, 17, 17, 17 + .byte 17, 17, 17, 17, 17, 16, 16, 16 + .byte 16, 16, 16, 16, 16, 16, 16, 16 + .byte 16, 15, 15, 15, 15, 15, 15, 15 + .byte 15, 15, 15, 15, 15, 15, 14, 14 + .byte 14, 14, 14, 14, 14, 14, 14, 14 + .byte 14, 14, 14, 14, 14, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 13 + .byte 13, 13, 13, 13, 13, 13, 13, 12 + .byte 12, 12, 12, 12, 12, 12, 12, 12