diff --git a/basic/appleiibot/Makefile b/basic/appleiibot/Makefile index 976caeab..71180e8f 100644 --- a/basic/appleiibot/Makefile +++ b/basic/appleiibot/Makefile @@ -12,7 +12,7 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.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 BIN.BAS FALLING.BAS SNOW.BAS XMAS.BAS AN3.BAS PLASMA.BAS \ - C64.BAS SIERPINSKI.BAS FAKES.BAS + C64.BAS SIERPINSKI.BAS FAKES.BAS SIER.BAS cp empty.dsk appleiibot.dsk $(DOS33) -y appleiibot.dsk BSAVE -a 0x0300 LOAD # $(DOS33) -y appleiibot.dsk BSAVE -a 0x0C00 FASTAR2 @@ -59,6 +59,7 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.BAS \ $(DOS33) -y appleiibot.dsk SAVE A C64.BAS $(DOS33) -y appleiibot.dsk SAVE A SIERPINSKI.BAS $(DOS33) -y appleiibot.dsk SAVE A FAKES.BAS + $(DOS33) -y appleiibot.dsk SAVE A SIER.BAS ### @@ -343,6 +344,11 @@ HYPER.BAS: hyper.bas FAKES.BAS: fakes.bas $(TOKENIZE) < fakes.bas > FAKES.BAS +#### + +SIER.BAS: sier.bas + $(TOKENIZE) < sier.bas > SIER.BAS + #### diff --git a/basic/appleiibot/convert_tgreene.c b/basic/appleiibot/convert_tgreene.c index 7e470cb8..43ae882b 100644 --- a/basic/appleiibot/convert_tgreene.c +++ b/basic/appleiibot/convert_tgreene.c @@ -105,6 +105,9 @@ int main(int argc, char **argv) { "192+(PEEK(%d+I/3)-%d)/4^(I-INT(I/3)*3):NEXT\n", filesize-1,2128,2128+filesize,OFFSET2); printf("2CALL768\"%s%s\n",enc2,enc); +#endif + +#if 1 // if using & to the end then jumping back printf("1FORI=0TO%d:POKE%d+I,4*PEEK(%d+I)-" "192+(PEEK(%d+I/3)-%d)/4^(I-INT(I/3)*3):NEXT\n", @@ -112,7 +115,9 @@ int main(int argc, char **argv) { 0x3f5-filesize+3, 2125,2125+filesize,OFFSET2); printf("2&\"%s%s\n",enc2,enc); -#else +#endif + +#if 0 // if using & to jump to beginning (over-writing text page) printf("1FORI=0TO%d:POKE%d+I,4*PEEK(%d+I)-" "192+(PEEK(%d+I/3)-%d)/4^(I-INT(I/3)*3):NEXT\n", diff --git a/basic/appleiibot/sier.bas b/basic/appleiibot/sier.bas new file mode 100644 index 00000000..9b1f9afd --- /dev/null +++ b/basic/appleiibot/sier.bas @@ -0,0 +1,2 @@ +1FORI=0TO139:POKE876+I,4*PEEK(2125+I)-192+(PEEK(2265+I/3)-35)/4^(I-INT(I/3)*3):NEXT +2&",=n9D`V/QfOoP.QaNnUnInQoRmIbNnPBT0XlTU3O;8=mY9X0PnQmJ0N9VBmQjXnDnQmYnCnQlR>em9n:le/Z,:ZbQ<63nb`:bejh0SU0CK0CH0S+4HE[4(@Y-&U+6&''0@:8(<+4*?3'+#+#:8H4M.X'#40// diff --git a/graphics/gr/sier/Makefile b/graphics/gr/sier/Makefile index 172ef711..17f2f53a 100644 --- a/graphics/gr/sier/Makefile +++ b/graphics/gr/sier/Makefile @@ -9,7 +9,7 @@ all: sier.dsk sier.dsk: HELLO SIER SIER_TINY cp empty.dsk sier.dsk $(DOS33) -y sier.dsk SAVE A HELLO - $(DOS33) -y sier.dsk BSAVE -a 0x300 SIER + $(DOS33) -y sier.dsk BSAVE -a 0x36C SIER $(DOS33) -y sier.dsk BSAVE -a 0x300 SIER_TINY ### @@ -20,7 +20,7 @@ HELLO: hello.bas ### SIER: sier.o - ld65 -o SIER sier.o -C $(LINKERSCRIPTS)/apple2_300.inc + ld65 -o SIER sier.o -C ./apple2_36c.inc sier.o: sier.s ca65 -o sier.o sier.s -l sier.lst diff --git a/graphics/gr/sier/apple2_36c.inc b/graphics/gr/sier/apple2_36c.inc new file mode 100644 index 00000000..6bf85c47 --- /dev/null +++ b/graphics/gr/sier/apple2_36c.inc @@ -0,0 +1,12 @@ +MEMORY { + ZP: start = $00, size = $1A, type = rw; + RAM: start = $36C, size = $8E00, file = %O; +} + +SEGMENTS { +CODE: load = RAM, type = ro, align = $1; +RODATA: load = RAM, type = ro; +DATA: load = RAM, type = rw; +BSS: load = RAM, type = bss, define = yes; +ZEROPAGE: load = ZP, type = zp; +} diff --git a/graphics/gr/sier/sier.s b/graphics/gr/sier/sier.s index 12ca12ef..ed12048e 100644 --- a/graphics/gr/sier/sier.s +++ b/graphics/gr/sier/sier.s @@ -1,5 +1,8 @@ ; fake sierpinski +; 143 bytes -- sorta working + + ; x=0..39 ; T =0 XX_T = 0 .. 0 ; T =1 XX_T = 0 .. 39 ($0027) @@ -17,16 +20,14 @@ GBASH = $27 MASK = $2E COLOR = $30 -XX = $F5 -XX_TH = $F6 -XX_TL = $F7 -YY = $F8 -YY_TH = $F9 -YY_TL = $FA -T_L = $FB -T_H = $FC -FACTOR1 = $FD -FACTOR2 = $FE +;XX = $F7 +XX_TH = $F8 +XX_TL = $F9 +;YY = $FA +YY_TH = $FB +YY_TL = $FC +T_L = $FD +T_H = $FE SAVED = $FF @@ -44,23 +45,21 @@ sier: sier_outer: - lda #0 - sta YY - sta YY_TL - sta YY_TH + ldx #0 ; YY + stx YY_TL + stx YY_TH sier_yloop: ; reset XX to 0 - lda #0 - sta XX - sta XX_TL - sta XX_TH +; ldy #0 ; XX +; sty XX_TL +; sty XX_TH - ; calc YY_T - clc + ; calc YY_T (8.8 fixed point add) +; clc lda YY_TL adc T_L sta YY_TL @@ -68,20 +67,30 @@ sier_yloop: adc T_H sta YY_TH - lda YY - + txa ; YY lsr - bcc even_mask - ldx #$f0 - bne set_mask -even_mask: - ldx #$0f -set_mask: - stx MASK + bcc even_mask + ldy #$f0 + .byte $C2 ; bit hack +even_mask: + ldy #$0f + sty MASK + +; txa ; YY +; lsr jsr GBASCALC ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear) lda GBASH + + + ; reset XX to 0 + + ldy #0 ; XX + sty XX_TL + sty XX_TH + + draw_page_smc: adc #0 sta GBASH @@ -93,14 +102,14 @@ sier_xloop: ; SAVED = XX+(Y*T) - clc - lda XX ; XX +; clc + tya ; XX adc YY_TH sta SAVED ; calc XX*T - clc +; clc lda XX_TL adc T_L sta XX_TL @@ -110,7 +119,7 @@ sier_xloop: ; calc (YY-X_T) - lda YY + txa ; lda YY sec sbc XX_TH @@ -118,42 +127,45 @@ sier_xloop: and SAVED -; and #$ff - beq red + and #$f0 + beq red black: lda #00 ; black .byte $2C ; bit trick red: - lda #$11 ; red - + lda #$CC ; red sta COLOR - ldy XX + + +; ldy XX jsr PLOT1 ; PLOT AT (GBASL),Y - inc XX - lda XX - cmp #40 + iny ; XX + cpy #40 bne sier_xloop - inc YY - lda YY - cmp #48 + inx + cpx #48 bne sier_yloop ; inc T - clc +; clc lda T_L +blah_smc: adc #1 sta T_L lda T_H adc #0 sta T_H + ; speed up the zoom + inc blah_smc+1 + flip_pages: - ; X already 0 + ldx #0 lda draw_page_smc+1 ; DRAW_PAGE beq done_page @@ -164,5 +176,8 @@ done_page: eor #$4 ; flip draw page between $400/$800 sta draw_page_smc+1 ; DRAW_PAGE - jmp sier_outer + jmp sier_outer ; just slightly too far??? + ; this is at 389 + ; we want to be at 3F5, so load program at 36C? + jmp sier ; entry point from &