From 00659143de0bee03bb03038c40ad91b306710d6f Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 24 Oct 2022 01:20:19 -0400 Subject: [PATCH] gr: moon --- basic/appleiibot/Makefile | 14 +- basic/appleiibot/magic_cube.bas | 45 ++++++ graphics/gr/moon/Makefile | 44 ++++++ graphics/gr/moon/hello.bas | 2 + graphics/gr/moon/moon.s | 183 ++++++++++++++++++++++ graphics/gr/moon/moon2.s | 266 ++++++++++++++++++++++++++++++++ 6 files changed, 553 insertions(+), 1 deletion(-) create mode 100644 basic/appleiibot/magic_cube.bas create mode 100644 graphics/gr/moon/Makefile create mode 100644 graphics/gr/moon/hello.bas create mode 100644 graphics/gr/moon/moon.s create mode 100644 graphics/gr/moon/moon2.s diff --git a/basic/appleiibot/Makefile b/basic/appleiibot/Makefile index 853dc26c..a5b37fc3 100644 --- a/basic/appleiibot/Makefile +++ b/basic/appleiibot/Makefile @@ -28,7 +28,7 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.BAS HELLO \ BOXES.BAS SOLARIS.BAS SOLARIS2.BAS ASPLODE.BAS SOLARIS3.BAS \ TARGET.BAS ELITE.BAS MYSTERY.BAS OFFICE.BAS GR_XOR.BAS \ LARGE_XOR.BAS PAR_XOR.BAS PAR_HGR.BAS SIER_XOR.BAS PATTERN_LOGO.BAS \ - GEARS.BAS DSR_LORES.BAS A2_LORES.BAS + GEARS.BAS DSR_LORES.BAS A2_LORES.BAS MAGIC_CUBE.BAS MOON.BAS cp $(EMPTY_DISK)/empty_lots_of_dirents.dsk appleiibot.dsk # cp empty.dsk appleiibot.dsk # $(DOS33) -y appleiibot.dsk BSAVE -a 0x0300 LOAD @@ -151,6 +151,8 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.BAS HELLO \ $(DOS33) -y appleiibot.dsk SAVE A GEARS.BAS $(DOS33) -y appleiibot.dsk SAVE A DSR_LORES.BAS $(DOS33) -y appleiibot.dsk SAVE A A2_LORES.BAS + $(DOS33) -y appleiibot.dsk SAVE A MAGIC_BOX.BAS + $(DOS33) -y appleiibot.dsk SAVE A MOON.BAS #### @@ -843,6 +845,16 @@ DSR_LORES.BAS: dsr_lores.bas A2_LORES.BAS: a2_lores.bas $(TOKENIZE) < a2_lores.bas > A2_LORES.BAS +#### + +MOON.BAS: moon.bas + $(TOKENIZE) < moon.bas > MOON.BAS + +#### + +MAGIC_BOX.BAS: magic_box.bas + $(TOKENIZE) < magic_box.bas > MAGIC_BOX.BAS + diff --git a/basic/appleiibot/magic_cube.bas b/basic/appleiibot/magic_cube.bas new file mode 100644 index 00000000..409ac47e --- /dev/null +++ b/basic/appleiibot/magic_cube.bas @@ -0,0 +1,45 @@ +5 HGR:HGR2 +6 C=0 +40 FOR W=3 TO 64 STEP 0.5 +50 A=4/W+T/4 +60 K=145/W +70 X=64+COS(A)*K +80 Y=64+SIN(A)*K +100 HCOLOR=C +110 HPLOT X-W,Y-W TO X+W,Y-W TO X+W,Y+W TO X-W,Y+W TO X-W,Y-W +115 C=C+1:IF C>7 THEN C=0 +120 NEXT +130 T=T+1:POKE230,32+32*P:P=NOTP:POKE49236+P,0:GOTO 6 + +'5 GR +'40 FOR W=3 TO 68 STEP 0.1 +'50 A=4/W+T/4 +'60 K=60/W +'70 X=20+COS(A)*K +'80 Y=20+SIN(A)*K +'90 I=35/W+2+T*3 +'100 COLOR=C/4 +'110 HLIN X-W,X+W AT Y-W +'111 HLIN X-W,X+W AT Y+W +'112 VLIN Y-W,Y+W AT X-W +'113 VLIN Y-W,Y+W AT X+W +'115 C=C+1 +'120 NEXT + + +'c={0,1,2,8,14,15,7} +'fillp(0xa5a5) +'function _draw() +'for w=3,68,.1 do +' a=4/w+t()/4 +' k=145/w +' x=64+cos(a)*k +' y=64+sin(a)*k +' i=35/w+2+t()*3 +' rect(x-w,y-w,x+w,y+w,f(i)*16+f(i+.5)) +'end +'end +'function f(i) +'return c[flr(1.5+abs(6-i%12))] +'end + diff --git a/graphics/gr/moon/Makefile b/graphics/gr/moon/Makefile new file mode 100644 index 00000000..c346b62a --- /dev/null +++ b/graphics/gr/moon/Makefile @@ -0,0 +1,44 @@ +include ../../../Makefile.inc + +LINKER_DIR = ../../../linker_scripts/ + +EMPTY_DISK = ../../../empty_disk/empty.dsk +DOS33 = ../../../utils/dos33fs-utils/dos33 +TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft + +all: moon.dsk + +moon.dsk: HELLO MOON MOON2 + cp $(EMPTY_DISK) moon.dsk + $(DOS33) -y moon.dsk SAVE A HELLO + $(DOS33) -y moon.dsk BSAVE -a 0xc00 MOON + $(DOS33) -y moon.dsk BSAVE -a 0xc00 MOON2 + +### + +MOON: moon.o + ld65 -o MOON moon.o -C $(LINKER_DIR)/apple2_c00.inc + +moon.o: moon.s + ca65 -o moon.o moon.s -l moon.lst + +### + +MOON2: moon2.o + ld65 -o MOON2 moon2.o -C $(LINKER_DIR)/apple2_c00.inc + +moon2.o: moon2.s + ca65 -o moon2.o moon2.s -l moon2.lst + + +### + + +HELLO: hello.bas + $(TOKENIZE) < hello.bas > HELLO + +#### + + +clean: + rm -f *~ *.o *.lst HELLO MOON MOON2 diff --git a/graphics/gr/moon/hello.bas b/graphics/gr/moon/hello.bas new file mode 100644 index 00000000..0e3aae36 --- /dev/null +++ b/graphics/gr/moon/hello.bas @@ -0,0 +1,2 @@ +5 HOME +40 PRINT CHR$(4)"CATALOG" diff --git a/graphics/gr/moon/moon.s b/graphics/gr/moon/moon.s new file mode 100644 index 00000000..1b21fa93 --- /dev/null +++ b/graphics/gr/moon/moon.s @@ -0,0 +1,183 @@ +; Moon + +; by deater (Vince Weaver) + + +; Zero Page +GBASL = $26 +GBASH = $27 + +COLOR = $30 + +SEEDL = $43 +SEEDH = $44 + +FRAME = $EA +FRAME2 = $EB +FRAME4 = $EC + +TEMP = $FC +PAGE = $FD +COUNT = $FE +WHICH = $FF + +; Soft Switches +SET_GR = $C050 ; Enable graphics +FULLGR = $C052 ; Full screen, no text +PAGE1 = $C054 ; Page1 +PAGE2 = $C055 ; Page2 +LORES = $C056 ; Enable LORES graphics + +; ROM routines + +GBASCALC= $F847 ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear) + +SETGR = $FB40 +WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us +PLOT = $F800 ;; PLOT AT Y,A +SETCOL = $F864 ;; COLOR=A + + +moon: + + ;=================== + ; init screen + jsr SETGR ; lores graphics + bit FULLGR ; full screen + + lda #$0 ; start on page1 + sta PAGE + +;parallax_forever: + +; inc FRAME ; increment frame +; +; lda FRAME ; also have frame/2 and frame/4 +; lsr +; sta FRAME2 +; lsr +; sta FRAME4 + + ;========================== + ; flip page + +; lda PAGE ; get current page +; pha ; save for later + +; lsr ; switch visible page +; lsr +; tay +; lda PAGE1,Y + +; pla ; save old draw page + +; eor #$4 ; toggle to other draw page +; sta PAGE + + +big_loop: + lda #$66 + sta COLOR + + ldx #24 + stx COUNT +water: + ldx COUNT + jsr get_z + sta TEMP + asl + asl + asl + tax + +water_line: + + jsr random + +; adc FRAME + adc COUNT + + and #$1F + + tay + lda COUNT + clc + adc #23 + jsr PLOT ; plot at Y,A +skip: + dex + bne water_line + + dec COUNT + bne water + +over: + lda #1 + sta SEEDL + lda #1 + sta SEEDH + + inc FRAME + lda #100 + jsr WAIT + jsr clear_bottom + jmp big_loop + + +; from batari basic (?) + +random: + lda SEEDH + lsr + rol SEEDL + bcc noeor + eor #$B4 +noeor: + sta SEEDH + eor SEEDL + rts + + +get_z: + lda #1 + cpx #10 + bcs done_z + lda Z_lookup,X +done_z: + rts + + +HLIN = $F819 ; HLINE Y,$2C at A +clear_bottom: + lda #0 + sta COLOR + lda #24 + sta WHICH +clear_bottom_loop: + ldy #0 + lda #39 + sta $2C + lda WHICH + cmp #48 + beq done_clear + jsr HLIN + inc WHICH + bne clear_bottom_loop +done_clear: + rts + + +Z_lookup: + .byte 24, 12, 8, 6, 5, 4, 3, 3 + .byte 2, 2 + + +;20 FOR Y=0 TO 24 +;30 Z=24/(Y+1) +;40 FOR I=0 TO Z*4 +;50 X=INT(RND(1)*39)+T*150/Z +;'60 W=COS(RND(1)+T)*12/Z +;65 C=SCRN(X,20-Y/2):IF C=0 THEN C=6 +;70 COLOR=C:PLOT X,Y+20 +;80 NEXT:NEXT:GOTO 20 + diff --git a/graphics/gr/moon/moon2.s b/graphics/gr/moon/moon2.s new file mode 100644 index 00000000..7ac79562 --- /dev/null +++ b/graphics/gr/moon/moon2.s @@ -0,0 +1,266 @@ +; Moon2 + +; by deater (Vince Weaver) + + +; Zero Page +GBASL = $26 +GBASH = $27 + +COLOR = $30 + +SEEDL = $43 +SEEDH = $44 + + +OFFSETS = $D0 + +FRAME = $EA +FRAME2 = $EB +FRAME4 = $EC + +LINE2 = $FB +TEMP = $FC +PAGE = $FD +COUNT = $FE +WHICH = $FF + +; Soft Switches +SET_GR = $C050 ; Enable graphics +FULLGR = $C052 ; Full screen, no text +PAGE1 = $C054 ; Page1 +PAGE2 = $C055 ; Page2 +LORES = $C056 ; Enable LORES graphics + +; ROM routines + +GBASCALC= $F847 ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear) + +SETGR = $FB40 +WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us +PLOT = $F800 ;; PLOT AT Y,A +SETCOL = $F864 ;; COLOR=A + + +moon: + + ;=================== + ; init screen + jsr SETGR ; lores graphics + bit FULLGR ; full screen + +; lda #$0 ; start on page1 +; sta PAGE + + + ldx #12 + lda #0 +clear_offsets: + sta OFFSETS,X + dex + bpl clear_offsets + +setup_outer: + ldx #0 +setup_loop: + txa + and #$8 + beq setup_zero + + lda #$66 + bne setup_save ; bra +setup_zero: + lda #$00 +setup_save: + +setup_save_smc: + sta $2000,X + + dex + bne setup_loop + + inc setup_save_smc+2 + lda setup_save_smc+2 + cmp #$2C + bne setup_outer + + +outer_outer: + lda #$20 + sta out_smc+2 + + lda #12 + sta LINE2 + +outer_display_loop: + + lda LINE2 + jsr GBASCALC + + ldy #39 + + lda LINE2 + tax + lda OFFSETS-12,X + clc + adc adds-12,X + sta OFFSETS-12,X + tax + +display_loop: + +out_smc: + lda $2000,X + sta (GBASL),Y + inx + dey + bpl display_loop + + inc out_smc+2 + + inc LINE2 + lda LINE2 + cmp #24 + bne outer_display_loop + + lda #100 + jsr WAIT + + jmp outer_outer + +;parallax_forever: + +; inc FRAME ; increment frame +; +; lda FRAME ; also have frame/2 and frame/4 +; lsr +; sta FRAME2 +; lsr +; sta FRAME4 + + ;========================== + ; flip page + +; lda PAGE ; get current page +; pha ; save for later + +; lsr ; switch visible page +; lsr +; tay +; lda PAGE1,Y + +; pla ; save old draw page + +; eor #$4 ; toggle to other draw page +; sta PAGE + + +big_loop: + lda #$66 + sta COLOR + + ldx #24 + stx COUNT +water: + ldx COUNT + jsr get_z + sta TEMP + asl + asl + asl + tax + +water_line: + + jsr random + +; adc FRAME + adc COUNT + + and #$1F + + tay + lda COUNT + clc + adc #23 + jsr PLOT ; plot at Y,A +skip: + dex + bne water_line + + dec COUNT + bne water + +over: + lda #1 + sta SEEDL + lda #1 + sta SEEDH + + inc FRAME + lda #100 + jsr WAIT + jsr clear_bottom + jmp big_loop + + +; from batari basic (?) + +random: + lda SEEDH + lsr + rol SEEDL + bcc noeor + eor #$B4 +noeor: + sta SEEDH + eor SEEDL + rts + + +get_z: + lda #1 + cpx #10 + bcs done_z + lda Z_lookup,X +done_z: + rts + + +HLIN = $F819 ; HLINE Y,$2C at A +clear_bottom: + lda #0 + sta COLOR + lda #24 + sta WHICH +clear_bottom_loop: + ldy #0 + lda #39 + sta $2C + lda WHICH + cmp #48 + beq done_clear + jsr HLIN + inc WHICH + bne clear_bottom_loop +done_clear: + rts + + +adds: + .byte 1,1,2,2,3,3,4,5,6,8,12,24 + +Z_lookup: + .byte 24, 12, 8, 6, 5, 4, 3, 3 + .byte 2, 2 + + +;20 FOR Y=0 TO 24 +;30 Z=24/(Y+1) +;40 FOR I=0 TO Z*4 +;50 X=INT(RND(1)*39)+T*150/Z +;'60 W=COS(RND(1)+T)*12/Z +;65 C=SCRN(X,20-Y/2):IF C=0 THEN C=6 +;70 COLOR=C:PLOT X,Y+20 +;80 NEXT:NEXT:GOTO 20 +