diff --git a/fire/Makefile b/fire/Makefile index 3c8ca8bd..8e0ff8fc 100644 --- a/fire/Makefile +++ b/fire/Makefile @@ -51,6 +51,15 @@ fire_extreme.o: fire_extreme.s #### +FIRE_HIGH: fire_high.o + ld65 -o FIRE_HIGH fire_high.o -C ../linker_scripts/apple2_c00.inc + +fire_high.o: fire_high.s + ca65 -o fire_high.o fire_high.s -l fire_high.lst + + +#### + FIRE_QKUMBA: fire_qkumba.o ld65 -o FIRE_QKUMBA fire_qkumba.o -C ../linker_scripts/apple2_70.inc diff --git a/fire/fire_high.s b/fire/fire_high.s new file mode 100644 index 00000000..cfe5b836 --- /dev/null +++ b/fire/fire_high.s @@ -0,0 +1,153 @@ +; Apple ][ Lo-res fire animation, size-optimized to 64 bytes + +; by deater (Vince Weaver) + +; originally based on code described here +; http://fabiensanglard.net/doom_fire_psx/ +; but this is a slightly different algorithm (but still cool looking) + +; Optimization history: +; 80 bytes -- the size of tire_tiny.s +; 64 bytes -- use the firmware SCROLL routine to handle the scrolling +; this adds some flicker but saves many bytes +; 63 bytes -- qkumba noted that SCROLL leaves BAS2L:BAS2H pointing at $7d0 +; 66 bytes -- tried on real hardware. Found that the original firmware +; never sets MIXCLR on boot, and my II+ machine was leaving +; it off so for correctness need to add it on. +; 66 bytes -- wasted a lot of time trying to either find clever ways to +; get $C050/C052 accessed, or to shorten the lookup table +; in half by lsr. Nothing panned out. +; 64 bytes -- realized I could save/restore the random SEEDL on the stack! +; doesn't seem to affect the output pattern either. + + +; Zero Page + +WNDTOP = $22 +WNDBTM = $23 +CV = $25 +BASL = $28 +BASH = $29 +BAS2L = $2A +BAS2H = $2B +SEEDL = $4E + +; Soft Switches +SET_GR = $C050 ; Enable graphics +MIXCLR = $C052 ; Full screen, no text at bottom +LORES = $C056 ; Enable LORES graphics + +; Monitor ROM routines. Try to use well-known entry points as +; these did sometimes change with newer models +SCROLL = $FC70 +VTAB = $FC22 ; takes row in CV, Result is in BASL:BASH ($28/$29) +VTABZ = $FC24 ; VTABZ variant takes row in Accumulator + +fire_demo: + + ; Set lores graphics + + bit SET_GR ; force graphics mode ; 3 + ; LORES and LOWSCR (lo-res page1) + ; are set by the boot rom + + bit MIXCLR ; want full-screen graphics w/o mixed ; 3 + ; text the boot process doesn't set this + ; (it doesn't matter in text mode) + ; and while IIe and emulators come up clear + ; my Apple II+ doesn't + + ; Set window. This seems to be set properly at boot though + ; lda #0 + ; sta WNDTOP + ; lda #24 + ; sta WNDBTM + + +scroll_loop: + + jsr SCROLL ; scrolls screen up one row ; 3 + + + ;====================================== + ; re-draw bottom line (row 23) as white + + + ; Y is left at 40 after SCROLL + ; also BAS2L:BAS2H is left at $7d0 + ; this code over-writes $7F8 (the MSLOT screen hole value) + ; but this should not matter for this demo + + lda #$ff ; top/bottom white ; 2 +w_loop: + sta (BAS2L),Y ; hline 23 (46+47) ; 2 + dey ; 1 + bpl w_loop ; 2 + ;============ + ; 8 + +fire_loop: + + lda #22 ; start at line 22 ; 2 + sta CV ; store in Row location ; 2 + +yloop: + ; puts address of row CV into BASL:BASH + jsr VTAB ; 3 + + + ; loop for X values 39 ... 0 + ldy #39 ; 2 +xloop: + + ;============================= + ; random8 + ;============================= + ; 8-bit 6502 Random Number Generator + ; Linear feedback shift register PRNG by White Flame + ; http://codebase64.org/doku.php?id=base:small_fast_8-bit_prng + +random8: + pla +; lda SEEDL ; 2 + beq doEor ; 2 + asl ; 1 + beq noEor ; if the input was $80, skip the EOR ; 2 + bcc noEor ; 2 +doEor: eor #$1d ; 2 +noEor: ;sta SEEDL ; 2 + pha + + ; end inlined RNG + + ; Randomly either use current value, or decay by one + bmi no_change ; assume bit 7 is as random as bit 0 ; 2 + + ; Lookup the new color in table + lda (BASL),Y ; load value ; 2 + and #$7 ; mask off ; 2 + tax ; 1 +; lda <(color_progression),X ; 2 + lda color_progression,X ; 3 + sta (BASL),Y ; 2 +no_change: + + dey ; 1 + bpl xloop ; 2 + + dec CV ; 2 + + bpl yloop ; 2 + + bmi scroll_loop ; 2 + +color_progression: + .byte $00 ; 8->0 ; 1000 -> 0000 ; needed + .byte $bb ; 9->11 ; 1001 -> 1011 + .byte $00 ; 10->0 ; 1010 -> 0000 ; needed + .byte $aa ; 11->10 ; 1011 -> 1010 + .byte $00 ; 12->0 ; 1100 -> 0000 ; don't care + .byte $99 ; 13->9 ; 1101 -> 1001 + .byte $00 ; 14->0 ; 1110 -> 0000 ; don't care + .byte $dd ; 15->13 ; 1111 -> 1101 + diff --git a/hellmood_memories/Makefile b/hellmood_memories/Makefile index 7c187ca8..b7c7ff19 100644 --- a/hellmood_memories/Makefile +++ b/hellmood_memories/Makefile @@ -9,7 +9,7 @@ B2D = ../bmp2dhr/b2d all: memories.dsk memories.dsk: HELLO CIRCLES.BAS CIRCLES CHECKERS CHECKERS_SMALL PLANE \ - SIER TUNNEL TNM + SIER TUNNEL TNM CIRCLES_NORMAL cp empty.dsk memories.dsk $(DOS33) -y memories.dsk SAVE A HELLO $(DOS33) -y memories.dsk SAVE A CIRCLES.BAS @@ -20,6 +20,7 @@ memories.dsk: HELLO CIRCLES.BAS CIRCLES CHECKERS CHECKERS_SMALL PLANE \ $(DOS33) -y memories.dsk BSAVE -a 0x1000 SIER $(DOS33) -y memories.dsk BSAVE -a 0x1000 TUNNEL $(DOS33) -y memories.dsk BSAVE -a 0x1000 TNM + $(DOS33) -y memories.dsk BSAVE -a 0x300 CIRCLES_NORMAL CIRCLES: circles.o ld65 -o CIRCLES circles.o -C ../linker_scripts/apple2_70_zp.inc @@ -27,6 +28,12 @@ CIRCLES: circles.o circles.o: circles.s ca65 -o circles.o circles.s -l circles.lst +CIRCLES_NORMAL: circles_normal.o + ld65 -o CIRCLES_NORMAL circles_normal.o -C ../linker_scripts/apple2_300.inc + +circles_normal.o: circles_normal.s + ca65 -o circles_normal.o circles_normal.s -l circles_normal.lst + ### CHECKERS: checkers.o diff --git a/hellmood_memories/circles_normal.s b/hellmood_memories/circles_normal.s new file mode 100644 index 00000000..8244b60b --- /dev/null +++ b/hellmood_memories/circles_normal.s @@ -0,0 +1,157 @@ +; Zooming Circles, based on the code in Hellmood's Memories + +; by deater (Vince Weaver) + +; Zero Page +BASL = $28 +BASH = $29 +H2 = $2C +COLOR = $30 + +X1 = $F0 +X2 = $F1 +Y1 = $F2 +Y2 = $F3 + +TEMP = $FA +TEMPY = $FB +FRAME = $FC +TEMPX = $FD + + +; Soft Switches +KEYPRESS= $C000 +KEYRESET= $C010 +SET_GR = $C050 ; Enable graphics +FULLGR = $C052 ; Full screen, no text +PAGE0 = $C054 ; Page0 +PAGE1 = $C055 ; Page1 +LORES = $C056 ; Enable LORES graphics + +; ROM routines + +PLOT = $F800 ; plot, horiz=y, vert=A (A trashed, XY Saved) +SETCOL = $F864 +TEXT = $FB36 ;; Set text mode +BASCALC = $FBC1 +SETGR = $FB40 +HOME = $FC58 ;; Clear the text screen +WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us +HLINE = $F819 + +; 103 bytes + +; attempted HLINE, not much help (122 bytes, slow) + +; quad plot, also 122 + + +;.globalzp squares_table_y +;.globalzp color_lookup +;.globalzp smc1,smc2,smc3,smc4 + +;.zeropage + +zooming_circles: + + ;=================== + ; init screen +; jsr SETGR ; 3 + bit FULLGR ; 3 + ;==== + ; 6 +circle_forever: + + inc FRAME ; 2 + + ldx #24 ; 2 + stx Y2 ; 2 + dex ; 1 + +yloop: + ldy #20 ; 2 + sty X2 ; 2 + dey ; 1 + +xloop: + + clc ; 1 + lda squares_table_y+4,y ; 3 + asl ; 1 + asl ; 1 + adc squares_table_y,x ; 2 + + lsr ; 1 + adc FRAME ; 2 + and #$1f ; 2 + +; and #$18 +; 00, 10 = black +; 01 = grey 55 or aa +; 11 = light blue 77 + + lsr ; 1 + lsr ; 1 + lsr ; 1 + sty TEMPY ; 2 + tay ; 1 + lda color_lookup,Y ; 3 + sta COLOR ; 2 + + ldy X2 ; Y==X2 ; 2 + txa ; A==Y1 ; 1 + jsr PLOT ; (X2,Y1) ; 3 + lda Y2 ; A==Y2 ; 2 + jsr PLOT ; (X2,Y2) ; 3 + + ldy TEMPY ; Y==X1 ; 2 + txa ; A==Y1 ; 1 + jsr PLOT ; (X1,Y1) ; 3 + lda Y2 ; A==Y2 ; 2 + jsr PLOT ; (X1,Y2) ; 3 + + inc X2 ; 2 + + dey ; 1 + bpl xloop ; 2 + + inc Y2 ; 2 + + dex ; 1 + bpl yloop ; 2 + + bmi circle_forever ; 2 + + + + +; 24 bytes +squares_table_y: +.byte $24,$21,$1e,$1b,$19,$16,$14,$12 +.byte $10,$0e,$0c,$0a,$09,$07,$06,$05 +.byte $04,$03,$02,$01,$01,$00,$00 + +color_lookup: +.byte $00 ; also last byte of squares table +.byte $55,$00,$77 + + + +;.byte $00,$00,$00,$00,$01,$01,$02,$03 +;.byte $04,$05,$06,$07,$09,$0a,$0c,$0e +;.byte $10,$12,$14,$16,$19,$1b,$1e,$21 + + + + +; 40 bytes +;squares_table_x: +;.byte $71,$6a,$64,$5d,$57,$51,$4b,$45 +;.byte $40,$3a,$35,$31, +;.byte $2c,$28,$24,$20 +;.byte $1c,$19,$15,$12,$10,$0d,$0b,$09 +;.byte $07,$05,$04,$02,$01,$01,$00,$00 +;.byte $00,$00,$00,$01,$01,$02,$04,$05 +;.byte $07,$09,$0b,$0d,$10,$12,$15,$19 +;.byte $1c,$20,$24,$28 ;,$2c,$31,$35,$3a +;;.byte $40,$45,$4b,$51,$57,$5d,$64,$6a diff --git a/seasons/Makefile b/seasons/Makefile index 4a40e26b..1b905d8b 100644 --- a/seasons/Makefile +++ b/seasons/Makefile @@ -8,10 +8,11 @@ B2D = ../bmp2dhr/b2d all: seasons.dsk -seasons.dsk: HELLO SEASONS +seasons.dsk: HELLO SEASONS AUTUMN cp empty.dsk seasons.dsk $(DOS33) -y seasons.dsk SAVE A HELLO $(DOS33) -y seasons.dsk BSAVE -a 0x50 SEASONS + $(DOS33) -y seasons.dsk BSAVE -a 0x300 AUTUMN SEASONS: seasons.o @@ -21,6 +22,14 @@ SEASONS: seasons.o seasons.o: seasons.s ca65 -o seasons.o seasons.s -l seasons.lst + +AUTUMN: autumn.o + ld65 -o AUTUMN autumn.o -C ../linker_scripts/apple2_300.inc + +autumn.o: autumn.s + ca65 -o autumn.o autumn.s -l autumn.lst + + ### @@ -30,6 +39,6 @@ HELLO: hello.bas #### clean: - rm -f *~ *.o *.lst HELLO SEASONS + rm -f *~ *.o *.lst HELLO SEASONS AUTUMN diff --git a/seasons/autumn.s b/seasons/autumn.s new file mode 100644 index 00000000..2ed110e3 --- /dev/null +++ b/seasons/autumn.s @@ -0,0 +1,157 @@ +; Autumn, based on the code in Hellmood's Autumn +; by deater (Vince Weaver) + +; Zero Page Addresses + +XCOORDL = $F0 +XCOORDH = $F1 +YCOORDL = $F2 +YCOORDH = $F3 +EBP1 = $F4 +EBP2 = $F5 +EBP3 = $F6 +EBP4 = $F7 +COLORL = $F8 +COLORH = $F9 + +; Soft Switches +KEYPRESS= $C000 +KEYRESET= $C010 + +; ROM routines +; Some of these are in the Applesoft ROMs so need at least an Apple II+ +; or later to run + +TEXT = $FB36 ; Set text mode +HGR2 = $F3D8 ; Set full-screen hi-res mode using page 2 ($4000) + ; 280x192 6-colors +HPLOT0 = $F457 ; Plot point, (Y,X) = Horizontal, (A=Vertical) +HCOLOR = $F6EC ; Set color in X, must be 0..7 + + +autumn: + + ;=================== + ; init screen ; Instruction Length + jsr HGR2 ; 3 + +autumn_forever: + + ; save old Xcoord value to X/Y for later + ; push/pop is 1 byte each but have to get + ; value into accumulator first + ldx XCOORDL ; 2 + ldy XCOORDH ; 2 + + ; 16-bit subtraction x=x-y + ; need to set carry before subtraction on 6502 + txa ; 1 + sec ; 1 + sbc YCOORDL ; 2 + sta XCOORDL ; 2 + tya ; 1 + sbc YCOORDH ; 2 + + ; 16-bit arithmatic shift right of X + ; 6502 has no asr instruction + ; cmp #$80 sets carry if high bit set + cmp #$80 ; 2 ; XCOORDH still in A from before + ror ; 1 + sta XCOORDH ; 2 + ror XCOORDL ; 2 + + ; 16-bit add, ycoord=ycoord+oldx + clc ; 1 + txa ; 1 + adc YCOORDL ; 2 + sta YCOORDL ; 2 + tya ; 1 + adc YCOORDH ; 2 + + ; 16-bit arithmatic shift right of y-coord + cmp #$80 ; 2 ; YCOORDH still in A from before + ror ; 1 + sta YCOORDH ; 2 + ror YCOORDL ; 2 + + ; 32 bit rotate of low bit shifted out of Y-coordinate + ror EBP1 ; 2 + ror EBP2 ; 2 + ror EBP3 ; 2 + ror EBP4 ; 2 + + ; branch if carry set + bcs label_11f ; 2 + + ; 16-bit increment of color + inc COLORL ; 2 + bne no_oflo ; 2 + inc COLORH ; 2 +no_oflo: + + ; 16-bit add of X-coord by 0x80 + ; this keeps the drawing roughly to the 280x192 screen + ; carry should still be clear (inc doesn't set it) + lda XCOORDL ; 2 + adc #$80 ; 2 + sta XCOORDL ; 2 + bcc no_oflo2 ; 2 + inc XCOORDH ; 2 +no_oflo2: + + ; 16-bit negate of Y-coord + sec ; 1 + lda #0 ; 2 + sbc YCOORDL ; 2 + sta YCOORDL ; 2 + lda #0 ; 2 + sbc YCOORDH ; 2 + sta YCOORDH ; 2 + +label_11f: + + ; skipping the color manipulation done here by original + + ; mix colors a bit? + + ; 16-bit shift of color + ; 2nd is a rotate as asl doesn't shift in cary + + lda COLORL ; 2 + asl ; 1 ; shl %ax + rol COLORH ; 2 + eor COLORH ; 2 + sta COLORL ; 2 + + ; get color mapping + ; using a color lookup table looks best but too many bytes + ; you can approximate something close to the lookup with + ; two extra instructions + + and #$7 ; 2 + ora #$2 ; 2 + tax ; 1 + + ; if ycoord negative, loop + lda YCOORDH ; 2 + bmi autumn_forever ; 2 + + ; if top bits of xcoord, loop + lda XCOORDH ; 2 + and #$f0 ; 2 + bne autumn_forever ; 2 + +put_pixel: + + ; actually set the color + jsr HCOLOR ; 3 + + ; set up paramaters for HPLOT call + ldx XCOORDL ; 2 + ldy XCOORDH ; 2 + lda YCOORDL ; 2 + jsr HPLOT0 ; 3 + + jmp autumn_forever ; 3 ; if we get under 128 bytes + + diff --git a/two-liners/Makefile b/two-liners/Makefile index 1c0125d1..786128af 100644 --- a/two-liners/Makefile +++ b/two-liners/Makefile @@ -3,11 +3,37 @@ include ../Makefile.inc DOS33 = ../dos33fs-utils/dos33 TOKENIZE = ../asoft_basic-utils/tokenize_asoft -all: entropy.dsk +all: entropy.dsk convert_to convert_back -entropy.dsk: ENTROPY ENTROPY.BAS +entropy.dsk: ENTROPY ENTROPY.BAS E2.BAS FLAME.BAS FLAME2.BAS \ + CIRCLES.BAS AUTUMN.BAS LOAD $(DOS33) -y entropy.dsk BSAVE -a 0x0C00 ENTROPY + $(DOS33) -y entropy.dsk BSAVE -a 0x0300 LOAD $(DOS33) -y entropy.dsk SAVE A ENTROPY.BAS + $(DOS33) -y entropy.dsk SAVE A E2.BAS + $(DOS33) -y entropy.dsk SAVE A FLAME.BAS + $(DOS33) -y entropy.dsk SAVE A FLAME2.BAS + $(DOS33) -y entropy.dsk SAVE A AUTUMN.BAS + $(DOS33) -y entropy.dsk SAVE A CIRCLES.BAS + +### + +convert_to: convert_to.o + $(CC) $(LFLAGS) -o convert_to convert_to.o + +convert_to.o: convert_to.c + $(CC) $(CFLAGS) -c convert_to.c + +### + +convert_back: convert_back.o + $(CC) $(LFLAGS) -o convert_back convert_back.o + +convert_back.o: convert_back.c + $(CC) $(CFLAGS) -c convert_back.c + + +### ENTROPY: entropy.o ld65 -o ENTROPY entropy.o -C ../linker_scripts/apple2_c00.inc @@ -15,8 +41,49 @@ ENTROPY: entropy.o entropy.o: entropy.s ca65 -o entropy.o entropy.s -l entropy.lst +### + +LOAD: load.o + ld65 -o LOAD load.o -C ../linker_scripts/apple2_300.inc + +load.o: load.s + ca65 -o load.o load.s -l load.lst + + +#### + ENTROPY.BAS: entropy.bas $(TOKENIZE) < entropy.bas > ENTROPY.BAS +#### + +E2.BAS: entropy_small.bas + $(TOKENIZE) < entropy_small.bas > E2.BAS + + +#### + +FLAME2.BAS: flame2.bas + $(TOKENIZE) < flame2.bas > FLAME2.BAS + + +#### + +FLAME.BAS: flame.bas + $(TOKENIZE) < flame.bas > FLAME.BAS + +#### + +AUTUMN.BAS: autumn.bas + $(TOKENIZE) < autumn.bas > AUTUMN.BAS + +#### + +CIRCLES.BAS: circles.bas + $(TOKENIZE) < circles.bas > CIRCLES.BAS + + +#### + clean: - rm -f *~ *.o *.lst ENTROPY + rm -f *~ *.o *.lst ENTROPY LOAD diff --git a/two-liners/autumn.bas b/two-liners/autumn.bas new file mode 100644 index 00000000..3c4e74f5 --- /dev/null +++ b/two-liners/autumn.bas @@ -0,0 +1,8 @@ +2 FOR X=0TO116:A=(PEEK(2264+X/2)-32)/4:IFJTHENA=(A-INT(A))*4 +3 J=NOTJ:POKE768+X,(PEEK(2147+X)-32)*4+A:NEXT:CALL768 +9 REM (V\I\I\B.Y\A\FY\R@:A\9\&B9\A\F9\R@:A\9\9]9]9]9]L'Y^T Y^I\:@A\D Y\.J Y\A\J Y\A\I^")^1^A^*!" JI\,HI\*\TG([]I\I\I\(5]3 . &!) '$)& ))('$).*"&*,& *%!! *$$&&$''$*%%!-*'#%$! * %(,#, + + + + + diff --git a/two-liners/circles.bas b/two-liners/circles.bas new file mode 100644 index 00000000..39f7806a --- /dev/null +++ b/two-liners/circles.bas @@ -0,0 +1,2 @@ +2 GR:FOR X=0TO100:A=(PEEK(2245+X/2)-32)/4:IFJTHENA=(A-INT(A))*4 +3 J=NOTJ:POKE768+X,(PEEK(2144+X)-32)*4+A:NEXT:CALL768:REM+4PY_H&A\RH%A\B&N3 ""?2 29_*'222A^JN8 A,I\B( ^I\( ^I^B( ^I\( ^Y\B$SY\R$P,N)('&&%%$$##""!!!! 5 ="""". ! &.)+)!.*#!'$!( ' . !, ) "."!!+&"""')#)$ $, diff --git a/two-liners/convert4_4/autumn.bas b/two-liners/convert4_4/autumn.bas new file mode 100644 index 00000000..495c5d17 --- /dev/null +++ b/two-liners/convert4_4/autumn.bas @@ -0,0 +1,8 @@ +1 FOR X=0TO116:POKE 768+X,(PEEK(2115+X)-64)*16+(PEEK(X+2232))-64:NEXT X:CALL768 +9 "BMOJOJOHCNOHOINOLHFHOFOAHFOHOIFOLHFHOFOFOFOFOFOKANOM@NOJOFHHOI@NOCJ@NOHOJ@NOHOJO@BODOHOB@@@JJOCJJOBOMIBNOJOJOJOBEOD@@@HCF@DAJHEBE@HECI@JEAF@HJEBEBHECI@JECFBFDFEFFFG@MFH@BFIE@I@E@@BFAHI@EBEBI@ECECEHJFIEIEHIGIBJEC@CEAI@@M@LFF@DAEB@GDLCC" + + + + + + diff --git a/two-liners/convert4_4/convert_to.c b/two-liners/convert4_4/convert_to.c new file mode 100644 index 00000000..0697c96d --- /dev/null +++ b/two-liners/convert4_4/convert_to.c @@ -0,0 +1,25 @@ +#include +#include + +int main(int argc, char **argv) { + + int i,len,rv; + unsigned char string[BUFSIZ]; + unsigned char out[BUFSIZ]; + + rv=read(0,string,BUFSIZ); + if (rv<=0) return -1; + + len=rv; + printf("Len=%d\n",len); + printf("\""); + for(i=0;i>4); + out[i+len]='@'+(string[i]&0xf); + } + out[2*len]=0; + printf("%s",out); + printf("\"\n"); + + return 0; +} diff --git a/two-liners/convert6/autumn.bas b/two-liners/convert6/autumn.bas new file mode 100644 index 00000000..93ff459d --- /dev/null +++ b/two-liners/convert6/autumn.bas @@ -0,0 +1,2 @@ +1 FOR X=0TO116:POKE 768+X,(PEEK(2112+X)-32)*4+PEEK(X+2229)-32:NEXT:CALL768 +9 REM (V\I\I\B.Y\A\FY\R@:A\9\&B9\A\F9\R@:A\9\9]9]9]9]L'Y^T Y^I\:@A\D Y\.J Y\A\J Y\A\I^")^1^A^*!" JI\,HI\*\TG([]I\I\I\(5]3 #" !" !"! !#! "!!" "!"!" !#! "!#""" "!"""# !" ""!! ! ! ""! ! !"!"! !#!#! ""!!!! !#!""!# #!!! ! "" !!" # ## diff --git a/two-liners/convert6/convert_to.c b/two-liners/convert6/convert_to.c new file mode 100644 index 00000000..35e0f7e6 --- /dev/null +++ b/two-liners/convert6/convert_to.c @@ -0,0 +1,25 @@ +#include +#include + +int main(int argc, char **argv) { + + int i,len,rv; + unsigned char string[BUFSIZ]; + unsigned char out[BUFSIZ]; + + rv=read(0,string,BUFSIZ); + if (rv<=0) return -1; + + len=rv; + printf("Len=%d\n",len); + printf("\""); + for(i=0;i>2); + out[i+len]=' '+(string[i]&0x3); + } + out[2*len]=0; + printf("%s",out); + printf("\"\n"); + + return 0; +} diff --git a/two-liners/convert6_2/convert_back.c b/two-liners/convert6_2/convert_back.c new file mode 100644 index 00000000..182c5a53 --- /dev/null +++ b/two-liners/convert6_2/convert_back.c @@ -0,0 +1,35 @@ +#include +#include + +int main(int argc, char **argv) { + + int i,a,x,len; + char buf[BUFSIZ]; + char out[BUFSIZ]; + + len=read(0,buf,BUFSIZ); + + i=1; + while(buf[i]!='\"') { + if (buf[i]==' ') len=i; + buf[i]-='#'; + i++; + } + +// for(i=1;i +#include + +int main(int argc, char **argv) { + + int i,len,rv; + char string[BUFSIZ]; + unsigned char a; + + rv=read(0,string,BUFSIZ); + if (rv<=0) return -1; + + len=rv; + printf("\""); + for(i=0;i>2; + a|=(string[i+1]&0xc0)>>4; + a|=(string[i+2]&0xc0)>>6; + a+='#'; + printf("%c",a); + } + + printf("\"\n"); + + return 0; +} diff --git a/two-liners/convert6_2/load.good.s b/two-liners/convert6_2/load.good.s new file mode 100644 index 00000000..cac58f82 --- /dev/null +++ b/two-liners/convert6_2/load.good.s @@ -0,0 +1,66 @@ +LEN = $ff + +load: + ldy #1 +sub_loop: + lda string,Y + bmi done_sub_loop + cmp #' ' + bne nolen + sty LEN +nolen: + sec + sbc #'#' + sta string,Y + iny + jmp sub_loop + +done_sub_loop: + + ldx LEN + inx + ldy #1 +hard_loop: + cpy LEN + bcs all_done + + lda string,X ; a=buf[len+x+1]; +; lda #00 + asl + asl + pha + and #$c0 + ora string,Y + sta $2FF,Y + pla + iny + + asl + asl + pha + and #$c0 + ora string,Y + sta $2FF,Y + pla + iny + + asl + asl + pha + and #$c0 + ora string,Y + sta $2FF,Y + pla + iny + + ; out[i]=buf[i]|((a<<2)&0xc0); + ; out[i+1]=buf[i+1]|((a<<4)&0xc0); + ; out[i+2]=buf[i+2]|((a<<6)&0xc0); + inx + jmp hard_loop + +all_done: + jmp $300 + +string: +.byte 34,"O3#O5#CS_Lb4M+3^L9(HCE_CJKS(-S'3%,@+S-TKL*M`\&4K+3I)H3@S0#^#M#<#@ ***Q+[C1*&+4%#K+FSV+E/",$80 diff --git a/two-liners/convert6_2/load.good2.s b/two-liners/convert6_2/load.good2.s new file mode 100644 index 00000000..25da297c --- /dev/null +++ b/two-liners/convert6_2/load.good2.s @@ -0,0 +1,56 @@ +LEN = $ff + +load: + ldx #1 +sub_loop: + lda string,X + cmp #' ' + beq done_sub_loop +; sty LEN +;nolen: + sec + sbc #'#' + sta string,X + inx + bne sub_loop + +done_sub_loop: + +; ldx LEN + inx + ldy #1 ; make Y 1 +hard_loop: +; cpy LEN +; bcs all_done + + lda string,X ; a=buf[len+x+1]; + bmi all_done + sec + sbc #'#' + + stx $FE + ldx #3 + +inner_loop: + asl + asl + pha + and #$c0 + ora string,Y + sta $2FF,Y + pla + iny + + dex + bne inner_loop + + ldx $FE + + inx + jmp hard_loop + +all_done: + jmp $300 + +string: +.byte 34,"O3#O5#CS_Lb4M+3^L9(HCE_CJKS(-S'3%,@+S-TKL*M`\&4K+3I)H3@S0#^#M#<#@ ***Q+[C1*&+4%#K+FSV+E/",$80 diff --git a/two-liners/convert6_2/load.s b/two-liners/convert6_2/load.s new file mode 100644 index 00000000..2d805836 --- /dev/null +++ b/two-liners/convert6_2/load.s @@ -0,0 +1,51 @@ +LEN = $ff + +load: + ldx #1 +sub_loop: + lda string,X + cmp #' ' + beq done_sub_loop + sec + sbc #'#' + sta string,X + inx + bne sub_loop + +done_sub_loop: + + inx + ldy #1 ; make Y 1 +hard_loop: + + lda string,X ; a=buf[len+x+1]; + bmi all_done + sec + sbc #'#' + + stx $FE + ldx #3 + +inner_loop: + asl + asl + pha + and #$c0 + ora string,Y + sta $2FF,Y + pla + iny + + dex + bne inner_loop + + ldx $FE + + inx + jmp hard_loop + +all_done: + jmp $300 + +string: +.byte 34,"O3#O5#CS_Lb4M+3^L9(HCE_CJKS(-S'3%,@+S-TKL*M`\&4K+3I)H3@S0#^#M#<#@ ***Q+[C1*&+4%#K+FSV+E/",$80 diff --git a/two-liners/convert6_2/simple.s b/two-liners/convert6_2/simple.s new file mode 100644 index 00000000..c861a0b0 --- /dev/null +++ b/two-liners/convert6_2/simple.s @@ -0,0 +1,71 @@ +; 35..96 +; +; = 35<<2 + 35 = 175 235 +; = 40<<2 + 35 = 195 4 +; = 50<<2 + 35 = 235 39 +; = 60<<2 + 35 = 19 79 +; = 64<<2 + 35 = 35 95 + + + +; 35 96 +; = 35<<1 + 35 = 105 166 +; = 45<<1 + 35 = 125 186 +; = 55<<1 + 35 = 145 206 + = 95<<1 + 35 = 225 29 + + +; 32..96 +; << +; add +; 1 +; 2631 +; 8426 8421 +; 4 bits 0XXX X000 so +; ..95 +load: + ldx #1 +sub_loop: + lda string,X + bmi done_sub_loop + sec + sbc #'#' + + +done_sub_loop: + + inx + ldy #1 ; make Y 1 +hard_loop: + + lda string,X ; a=buf[len+x+1]; + bmi all_done + sec + sbc #'#' + + stx $FE + ldx #3 + +inner_loop: + asl + asl + pha + and #$c0 + ora string,Y + sta $2FF,Y + pla + iny + + dex + bne inner_loop + + ldx $FE + + inx + jmp hard_loop + +all_done: + jmp $300 + +string: +.byte 34,"O3#O5#CS_Lb4M+3^L9(HCE_CJKS(-S'3%,@+S-TKL*M`\&4K+3I)H3@S0#^#M#<#@ ***Q+[C1*&+4%#K+FSV+E/",$80 diff --git a/two-liners/convert_back.c b/two-liners/convert_back.c new file mode 100644 index 00000000..3bbc0d56 --- /dev/null +++ b/two-liners/convert_back.c @@ -0,0 +1,26 @@ +#include +#include + +int main(int argc, char **argv) { + + int i,a,x,len; + char buf[BUFSIZ]; + char out[BUFSIZ]; + + len=read(0,buf,BUFSIZ)-2; + len/=2; + + i=1; + while(buf[i]!='\"') { + a=buf[i]<<3; + a^=buf[i+len]; + out[i-1]=a; + i++; + } + + write(1,out,len); + + return 0; +} + + diff --git a/two-liners/convert_to.c b/two-liners/convert_to.c new file mode 100644 index 00000000..8a133c03 --- /dev/null +++ b/two-liners/convert_to.c @@ -0,0 +1,27 @@ +#include +#include + +int main(int argc, char **argv) { + + int i,len,rv,a; + unsigned char string[BUFSIZ]; + unsigned char out[BUFSIZ]; + + rv=read(0,string,BUFSIZ); + if (rv<=0) return -1; + + len=rv; + printf("Len=%d\n",len); + for(i=0;i>2); + } + for(i=0;i +#include + +int main(int argc, char **argv) { + + int i,a,x,len; + char buf[BUFSIZ]; + char out[BUFSIZ]; + + len=read(0,buf,BUFSIZ)-2; + len/=2; + + i=1; + while(buf[i]!='\"') { + a=buf[i]<<3; + a^=buf[i+len]; + out[i-1]=a; + i++; + } + + write(1,out,len); + + return 0; +} + + diff --git a/two-liners/convert_xor/convert_to.c b/two-liners/convert_xor/convert_to.c new file mode 100644 index 00000000..1489cc70 --- /dev/null +++ b/two-liners/convert_xor/convert_to.c @@ -0,0 +1,25 @@ +#include +#include + +int main(int argc, char **argv) { + + int i,len,rv; + char string[BUFSIZ]; + char out[BUFSIZ]; + + rv=read(0,string,BUFSIZ); + if (rv<=0) return -1; + + len=rv; + printf("Len=%d\n",len); + printf("\""); + for(i=0;i>3)&0x1f)^8); + out[i+len]='@'+(string[i]&0x7); + } + out[2*len]=0; + printf("%s",out); + printf("\"\n"); + + return 0; +} diff --git a/two-liners/entropy_small.bas b/two-liners/entropy_small.bas new file mode 100644 index 00000000..8474b4fb --- /dev/null +++ b/two-liners/entropy_small.bas @@ -0,0 +1,2 @@ +1 ROT=0:POKE 232,252:POKE 233,29:FOR I=1 TO 14:READ A:POKE 7675+I,A:NEXT:DATA 1,255,4,0,18,63,36,36,45,45,54,54,63,0 +9 HGR2:FOR E=.08 TO .15 STEP .01:FOR Y=4 TO 189 STEP 6:FOR X=4 TO 278 STEP 6:SCALE=(RND(1)< E)*RND(1)*E*20+1:XDRAW 1 AT X,Y:NEXT:NEXT:NEXT:GOTO 2 diff --git a/two-liners/flame.bas b/two-liners/flame.bas new file mode 100644 index 00000000..fa141370 --- /dev/null +++ b/two-liners/flame.bas @@ -0,0 +1,5 @@ + +1 FOR X=768TO832:READ A:POKE X,A:NEXT:CALL768 +9 DATA 44,80,192,44,82,192,32,112,252,169,255,145,42,136,16,251,169,22,133,37,32,34,252,160,39,104,240,5,10,240,4,144,2,73,29,72,48,10,177,40,41,7,170,189,57,3,145,40,136,16,230,198,37,16,221,48,205,0,187,0,170,0,153,0,221 + + diff --git a/two-liners/flame2.bas b/two-liners/flame2.bas new file mode 100644 index 00000000..49eda4bd --- /dev/null +++ b/two-liners/flame2.bas @@ -0,0 +1,5 @@ +1 FOR X=768TO789:READ A:POKE X,A:NEXT:CALL768:DATA162,0,189,106,8,48,12,10,10,10,93,171,8,157,0,12,232,208,239,76,0,12 +9 "MBPMBPLFW]WZMYJW]JXLLLW\LEVHIVHZHAKANI^MMH]_OIZMYJTPLJSNQH_H]H[HSD@@DB@@@DAGAB@@CAFEE@BD@G@@EB@D@BAE@@BA@AGBEADA@@@FFE@E@E@C@B@A@E"+ + + + diff --git a/two-liners/load.s b/two-liners/load.s new file mode 100644 index 00000000..c42b1479 --- /dev/null +++ b/two-liners/load.s @@ -0,0 +1,24 @@ +string = $86A +;size = 65 +size=117 + +load: + ldx #0 +sub_loop: + lda string,X + bmi all_done ; goes off end, do we care? + + asl + asl + asl + eor string+size,X + sta $C00,X + inx + bne sub_loop +all_done: + jmp $c00 + +;string: +.byte 34,"MBPMBPLFW]WZMYJW]JXLLLW\LEVHIVHZHAKANI^MMH]_OIZMYJTPLJSNQH_H]H[HSD@@DB@@@DAGAB@@CAFEE@BD@G@@EB@D@BAE@@BA@AGBEADA@@@FFE@E@E@C@B@A@E",80 + +