From ffc852641fce9d28585f8a45b6a864641bd6c7e9 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 10 Nov 2020 13:37:14 -0500 Subject: [PATCH] appleiibot: star nonsense --- appleiibot/Makefile | 12 +- appleiibot/fastar2.bas | 14 +-- appleiibot/fastar2.s | 239 ++++++++++++++++++++++++++++++++++++++++ appleiibot/mul16_slow.s | 32 ++++++ appleiibot/star.c | 94 ++++++++-------- 5 files changed, 338 insertions(+), 53 deletions(-) create mode 100644 appleiibot/fastar2.s create mode 100644 appleiibot/mul16_slow.s diff --git a/appleiibot/Makefile b/appleiibot/Makefile index a8e510d3..0652d340 100644 --- a/appleiibot/Makefile +++ b/appleiibot/Makefile @@ -11,9 +11,10 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.BAS \ RASTER4.BAS RASTER5.BAS PUMPKIN.BAS PUMPKIN_SMALL.BAS LADY.BAS \ A2.BAS FOURAM.BAS FLOPPY.BAS QR.BAS A2_4EVER.BAS RLE.BAS RLE2.BAS \ RLEASM.BAS HORIZON.BAS FLYER.BAS STAR.BAS HYPER.BAS FASTAR.BAS \ - FASTAR2.BAS + FASTAR2.BAS FASTAR2 cp empty.dsk appleiibot.dsk $(DOS33) -y appleiibot.dsk BSAVE -a 0x0300 LOAD + $(DOS33) -y appleiibot.dsk BSAVE -a 0x0C00 FASTAR2 $(DOS33) -y appleiibot.dsk SAVE A E2.BAS $(DOS33) -y appleiibot.dsk SAVE A FLAME.BAS $(DOS33) -y appleiibot.dsk SAVE A FLAME2.BAS @@ -91,6 +92,15 @@ LOAD: load.o load.o: load.s ca65 -o load.o load.s -l load.lst +### + +FASTAR2: fastar2.o + ld65 -o FASTAR2 fastar2.o -C ../linker_scripts/apple2_c00.inc + +fastar2.o: fastar2.s + ca65 -o fastar2.o fastar2.s -l fastar2.lst + + #### QKUMBA2.BAS: qkumba_seasons.bas diff --git a/appleiibot/fastar2.bas b/appleiibot/fastar2.bas index fcc6ac90..9703ed5e 100644 --- a/appleiibot/fastar2.bas +++ b/appleiibot/fastar2.bas @@ -1,8 +1,6 @@ -0 DIMX(8,20),Y(8,20) -1FORJ=1TO20:FORI=1TO8:A=X(I,J-1):B=Y(I,J-1):C=Z(I)*.1:X(I,J)=A+(A-140)*C:Y(I,J)=B+(B-96)*C:Z(I)=Z(I)+.1 -2IFX(I,J)<1ORX(I,J)>279ORY(I,J)<1ORY(I,J)>191THENX(I,J)=RND(1)*280:Y(I,J)=RND(1)*192:Z(I)=0 -3NEXTI,J -4HGR:HGR2:HCOLOR=3 -5FORJ=1TO20:POKE230,32+32*P:P=NOTP:POKE49236+P,0:CALL-3086 -6FORI=1TO8:HPLOTX(I,J-1),Y(I,J-1)TOX(I,J),Y(I,J) -8NEXTI,J:GOTO5 +0R=191:DIMX(R),Y(R):FORI=1TOR:C=Z*.1:A=A+(A-140)*C:B=B+(B-96)*C:Z=Z+.1 +2IFA<1ORA>279ORB<1ORB>RTHENI=I+1:A=RND(1)*280:B=RND(1)*R:Z=0 +3X(I)=A:Y(I)=B:NEXT:HGR2 +5FORJ=1TOR:POKE230,32+32*P:P=NOTP:POKE49236+P,0:CALL-3086 +6A=X(J-1):IFAANDX(J)THENHPLOTA,Y(J-1)TOX(J),Y(J) +8NEXT:GOTO5 diff --git a/appleiibot/fastar2.s b/appleiibot/fastar2.s new file mode 100644 index 00000000..137703a5 --- /dev/null +++ b/appleiibot/fastar2.s @@ -0,0 +1,239 @@ +DRAW_PAGE = $E6 +ZL = $06 +ZH = $07 +SEEDLO = $4E +SEEDHI = $4F + +NUM1 = $F0 +NUM1L = $F1 +NUM2 = $F2 +NUM2L = $F3 +RESULT = $F4 +RESULT2 = $F5 +RESULT3 = $F6 +RESULT4 = $F7 +XL = $F8 +XH = $F9 +YL = $FA +YH = $FB +MINUS = $FC +Z = $FD + +HGR2 = $F3D8 +HPLOT0 = $F457 ; plot (Y,X), (A) +HGLIN = $F53A ; plot to (A,X), (Y) +HCLEAR0 = $F3F2 ; clear current hgr page to blackh +HCOLOR = $F6F0 ; color in X (must be 0..7) + + + lda #$ff + sta XH + + ldx #0 +populate_loop: + ; Z = XXYY YYYY +; C=Z*.125 +; A=A+(A-64)*C +; B=B+(B-64)*C + + ; check to see if out of bounds + + lda XH + bmi redo_point + lda YH + bpl all_good + +redo_point: + ; store a break in the lines + lda #0 + sta $1000,X + sta $1100,X + sta Z ; needed? + inx + + jsr rand16 + sta XH + jsr rand16 + sta YH + +all_good: + + ; X is in NUM1 for this + + lda #0 + sta MINUS + + sec + lda XH + sbc #64 + bpl no_minus +set_minus: + inc MINUS + + sec + lda #0 + sbc XL + sta NUM1 + lda #0 + sbc XH + sta NUM1+1 + jmp do_mult + +no_minus: + sta NUM1+1 + lda XL + sta NUM1 + +do_mult: + lda #0 + sta NUM2+1 + lda Z + sta NUM2 + + txa + pha + + jsr mult16 + + pla + tax + + ; result has result but due to our fixed point + ; we want to shift the whole thing left by 2 + ; then grab RESULT+2 as high and RESULT+1 as low + + rol RESULT+1 + rol RESULT+2 + ror RESULT+1 + lda RESULT+2 + + lda RESULT+1 ; low + sta NUM1 + lda RESULT+2 ; hight + sta NUM1+1 + + ; add to AA + clc + lda XL + adc NUM1 + sta XL + lda XH + adc NUM1+1 + sta XH + + ; Z=Z+.125 + + clc + lda Z + adc #$8 + sta Z + + ; write out + + lda XH + sta $1000,X + lda YH + sta $1100,X + + inx + beq done_pop + jmp populate_loop +done_pop: + ;========================= + ;========================= + ;========================= + + jsr HGR2 + ldx #3 + jsr HCOLOR + + ldx #0 +star_loop: + txa + and #$1 + beq page2 +page1: ; draw page1, show page2 + bit $C055 + lda #$20 + bne adjust_page +page2: + bit $C054 + lda #$40 +adjust_page: + sta DRAW_PAGE + + ; clear background + jsr HCLEAR0 + + txa + pha + + lda $1100,X ; ycoord + beq skip_draw + pha + ldy $1000,X ; xcoord + tya + tax + ldy #0 + pla + + jsr HPLOT0 ; plot (Y,X), (A) + +skip_draw: + + pla + tax + + inx + jmp star_loop + + + ; make sure seed isn't 0000 +rand16: + ; batari rand16 + lda SEEDHI + lsr + rol SEEDLO + bcc noeor + eor #$B4 +noeor: + sta SEEDHI + eor SEEDLO + + ; we only want 127 bits + and #$7f + + rts + + + ;===================== + ;===================== + ; 16x16 -> 32 multiply + ;===================== + ;===================== + ; destroys NUM2 +mult16: + lda #0 ; Initialize RESULT to 0 + sta RESULT+2 + ldx #16 ; There are 16 bits in NUM2 +L1: + lsr NUM2+1 ; top part of 16 bit shift right + ror NUM2 + bcc L2 ; 0 or 1? + tay ; If 1, add NUM1 (hi byte of RESULT is in A) + clc + lda NUM1 + adc RESULT+2 + sta RESULT+2 + tya + adc NUM1+1 +L2: + ror ; "Stairstep" shift + ror RESULT+2 + ror RESULT+1 + ror RESULT + dex + bne L1 + sta RESULT+3 + + rts diff --git a/appleiibot/mul16_slow.s b/appleiibot/mul16_slow.s new file mode 100644 index 00000000..a32d6c35 --- /dev/null +++ b/appleiibot/mul16_slow.s @@ -0,0 +1,32 @@ +; from http://nparker.llx.com/a2/mult.html + + ;===================== + ;===================== + ; 16x16 -> 32 multiply + ;===================== + ;===================== +mul16_slow: + lda #0 ; Initialize RESULT to 0 + sta RESULT+2 + ldx #16 ; There are 16 bits in NUM2 +L1: + lsr NUM2+1 ; Get low bit of NUM2 into C + ror NUM2 + bcc L2 ; 0 or 1? + tay ; If 1, add NUM1 (hi byte of RESULT is in A) + clc + lda NUM1 + adc RESULT+2 + sta RESULT+2 + tya + adc NUM1+1 +L2: + ror ; "Stairstep" shift + ror RESULT+2 + ror RESULT+1 + ror RESULT + dex + bne L1 + sta RESULT+3 + + rts diff --git a/appleiibot/star.c b/appleiibot/star.c index 77d599d1..a572d357 100644 --- a/appleiibot/star.c +++ b/appleiibot/star.c @@ -1,44 +1,50 @@ -#include -#include - -#define SIZE 10 -#define REPEAT 100 - -int main(int argc, char **argv) { - - int i,j; - double a,b,c; - double x[SIZE],y[SIZE],z[SIZE]; - double speed=0.1; - - double outputx[SIZE][REPEAT]; - double outputy[SIZE][REPEAT]; - - for(j=1;j279) || (y[i]<0) || (y[i]>191)) { - x[i]=rand()%279; - y[i]=rand()%191; - z[i]=0; - } - else { - outputx[i][j]=x[i]; - outputy[i][j]=y[i]; - } - } - } - - for(i=1;i +#include + +#define SIZE 10 +#define REPEAT 100 + +int main(int argc, char **argv) { + + int i,j; + double a,b,c; + double x[SIZE],y[SIZE],z[SIZE]; + double speed=0.1; + + double outputx[SIZE][REPEAT]; + double outputy[SIZE][REPEAT]; + + for(i=1;i279) || (y[i]<0) || (y[i]>191)) { + x[i]=0; + y[i]=0; + i++; + x[i]=rand()%279; + y[i]=rand()%191; + z[i]=0; + } + else { +// outputx[i][j]=x[i]; +// outputy[i][j]=y[i]; +// + } + printf("%i:%i: %.1f %.1f %.2f\n",i,j,x[i],y[i],z[i]); + + } + } + +// for(i=1;i