uxn/projects/examples/demos/mandelbrot.tal

138 lines
3.5 KiB
Tal
Raw Normal View History

2022-02-07 23:52:22 +00:00
( 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