( mandelbrot ) %+ { ADD } %- { SUB } %* { MUL } %/ { DIV } %< { LTH } %> { GTH } %= { EQU } %! { NEQ } %++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } %AUTO-X { #01 .Screen/auto DEO } %NEXT-LINE { #0000 .Screen/x DEO2 .Screen/y DEI2k INC2 ROT DEO2 } %XMIN { #de69 } ( -8601 ) %XMAX { #0b33 } ( 2867 ) %YMIN { #ecc7 } ( -4915 ) %YMAX { #1333 } ( 4915 ) %MAXI { #20 } ( 32 ) %DX { XMAX XMIN -- #004f // } ( (XMAX-XMIN)/79 ) %DY { YMAX YMIN -- #0018 // } ( (YMAX-YMIN)/24 ) %X { .x LDZ2 } %Y { .y LDZ2 } %X2 { .x2 LDZ2 } %Y2 { .y2 LDZ2 } %GTS2 { #8000 ++ SWP2 #8000 ++ << } %HALT { #010f DEO } %EMIT { #18 DEO } %PRINT { ;print-str JSR2 #0a EMIT } %DEBUG { ;print-hex/byte JSR2 #0a EMIT } %DEBUG2 { ;print-hex JSR2 #0a EMIT } |00 @System &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |0000 ( zero-page ) @x $2 @y $2 @x2 $2 @y2 $2 |0100 ( -> ) ( theme ) #048c .System/r DEO2 #048c .System/g DEO2 #048c .System/b DEO2 #0280 .Screen/width DEO2 ( 640 ) #01e0 .Screen/height DEO2 ( 480 ) #0000 .Screen/x DEO2 #0000 .Screen/y DEO2 AUTO-X ;draw-mandel JSR2 BRK @draw-mandel ( -- ) YMAX YMIN &ver DUP2 ,&y STR2 XMAX XMIN &hor DUP2 ,&x STR2 #0000 DUP2 DUP2 DUP2 .x STZ2 .y STZ2 .x2 STZ2 .y2 STZ2 MAXI #00 &loop X Y ;smul2 JSR2 #0b SFT2 [ LIT2 &y $2 ] ++ .y STZ2 X2 Y2 -- [ LIT2 &x $2 ] ++ .x STZ2 X X ;smul2 JSR2 #0c SFT2 .x2 STZ2 Y Y ;smul2 JSR2 #0c SFT2 .y2 STZ2 X2 Y2 ++ >> #4000 ,&end JCN INC GTHk ,&loop JCN &end NIP POP #03 .Screen/pixel DEO DX ++ OVR2 OVR2 GTS2 ;&hor JCN2 POP2 POP2 NEXT-LINE DY ++ OVR2 OVR2 GTS2 ;&ver JCN2 POP2 POP2 JMP2r @print-hex ( value* -- ) SWP ,&byte JSR &byte ( byte -- ) STHk #04 SFT ,&parse JSR #18 DEO STHr #0f AND ,&parse JSR #18 DEO JMP2r &parse ( byte -- char ) DUP #09 GTH ,&above JCN #30 ADD JMP2r &above #57 ADD JMP2r JMP2r @smul2 ( a* b* -- c* ) OVR2 POP #80 AND #07 SFT STH OVR #80 AND #07 SFT STHr ADD #01 AND ,&sign STR #10 SFT2 #01 SFT2 SWP2 #10 SFT2 #01 SFT2 MUL2 ,&sign LDR ,&flip JCN JMP2r &flip #0000 SWP2 -- JMP2r &sign $1 @sprites 0000 0000 0000 0000 0000 0000 0000 0000 0000 0018 1800 0000 0000 0000 0000 0000 0000 183c 3c18 0000 0000 0000 0000 0000 0018 3c7e 7e3c 1800 0000 0000 0000 0000 183c 7eff ff7e 3c18 0000 0000 0000 0000 3c7e ffff ffff 7e3c 0000 0000 0000 0000 7eff ffff ffff ff7e 0000 0000 0000 0000 ffff ffff ffff ffff 0000 0000 0000 0000 ffff ffe7 e7ff ffff 0000 0018 1800 0000 ffff e7c3 c3e7 ffff 0000 183c 3c18 0000 ffe7 c381 81c3 e7ff 0018 3c7e 7e3c 1800 e7c3 8100 0081 c3e7 183c 7eff ff7e 3c18 c381 0000 0000 81c3 3c7e ffff ffff 7e3c 8100 0000 0000 0081 7eff ffff ffff ff7e 0000 0000 0000 0000 ffff ffff ffff ffff 0000 0018 1800 0000 ffff ffff ffff ffff 0000 183c 3c18 0000 ffff ffff ffff ffff 0018 3c7e 7e3c 1800 ffff ffff ffff ffff 183c 7eff ff7e 3c18 ffff ffff ffff ffff 3c7e ffff ffff 7e3c ffff ffff ffff ffff 7eff ffff ffff ff7e ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffe7 e7ff ffff ffff ffe7 e7ff ffff ffff e7c3 c3e7 ffff ffff e7c3 c3e7 ffff ffe7 c381 81c3 e7ff ffe7 c381 81c3 e7ff e7c3 8100 0081 c3e7 e7c3 8100 0081 c3e7 c381 0000 0000 81c3 c381 0000 0000 81c3 8100 0000 0000 0081 8100 0000 0000 0081