( build: uxnasm src/cccc.tal cccc.ram | start: uxnemu cccc.rom ) |00 @System/vector $2 &pad $6 &r $2 &g $2 &b $2 |10 @Console/vector $2 &read $1 &pad $5 &write $1 |20 @Screen/vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |30 @Audio0/vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 |80 @Controller/vector $2 &button $1 &key $1 |90 @Mouse/vector $2 &x $2 &y $2 &state $1 &chord $1 |a0 @File/vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |000 @mode &dec $1 &dot $1 &mute $1 @sel &d &dx $1 &dy $1 @input &num $2 &den $2 @length $2 |100 @on-reset ( -> ) ( | meta ) ;meta #06 DEO2 ( | theme ) theme/ #00e2 #0110 window/ ( | setup synth ) #1006 .Audio0/adsr DEO2 ;tone .Audio0/addr DEO2 #0100 .Audio0/length DEO2 ( toggle ) #ff .Audio0/volume DEO ( | defaults ) #0001 .input/den STZ2 ( | initial draw ) ( | vectors ) ;on-console .Console/vector DEO2 ;on-button .Controller/vector DEO2 ;on-mouse .Mouse/vector DEO2 ;on-frame .Screen/vector DEO2 BRK @meta $1 ( name ) "CCCC 0a ( details ) "A 20 "Desktop 20 "Calculator 0a ( author ) "By 20 "Devine 20 "Lu 20 "Linvega 0a ( date ) "18 20 "Mar 20 "2025 $2 ( @|vectors ) @on-console ( -> ) .Console/read DEI listen BRK @on-button ( -> ) .Controller/button DEI2 ( | button key handlers ) DUP2 [ LIT2 01 "v ] NEQ2 ?{ POP2 snarf/ BRK } ( | button handlers ) SWP DUP #10 NEQ ?{ ( up ) POP2 .sel/dx LDZ .sel/dy LDZ #01 SUB set-sel BRK } DUP #20 NEQ ?{ ( down ) POP2 .sel/dx LDZ .sel/dy LDZ INC set-sel BRK } DUP #40 NEQ ?{ ( left ) POP2 .sel/dx LDZ #01 SUB .sel/dy LDZ set-sel BRK } DUP #80 NEQ ?{ ( right ) POP2 .sel/dx LDZ INC .sel/dy LDZ set-sel BRK } DUP #02 NEQ ?{ ( A ) POP2 press-sel BRK } DUP #08 NEQ ?{ ( B ) POP2 erase BRK } POP ( keys ) listen BRK @on-frame ( -> ) ( delay ) [ LIT &f 00 ] INCk ,&f STR #03 AND #00 EQU [ JMP BRK ] ( find buttons ) ;buttons/end ;buttons &>l ( -- ) #0008 ADD2 LDAk #00 EQU ?{ ( decr time ) DUP2 LDAk #01 SUB ROT ROT STA ( release button ) LDAk ?{ DUP2 #0008 SUB2 #00 press-button/release } } INC2 GTH2k ?&>l POP2 POP2 BRK @on-mouse ( -> ) cursor/ [ LIT2 &last $1 -Mouse/state ] DEI ( | handlers ) DUP2 #0001 NEQ2 ?{ /touch } ,&last STR POP BRK @on-mouse/touch ( -- ) ( x ) .Mouse/x DEI2 #0010 SUB2 #03 SFT2 NIP #03 DIV ( y ) .Mouse/y DEI2 #00a0 SUB2 #03 SFT2 NIP ( | handlers ) DUP #fc EQU ?/touch-bitpad DUP #fd EQU ?/touch-bitpad DUP #0b GTH ?{ OVR #02 LTH ?/touch-fncpad OVR #06 LTH ?/touch-numpad OVR #08 LTH ?/touch-modpad } POP2 JMP2r @on-mouse/touch-bitpad ( x y -- ) POP2 .Mouse/x DEI2 #0070 SUB2 #0070 LTH2 ?{ JMP2r } #0001 ( shift ) #000f .Mouse/x DEI2 #0070 SUB2 #0005 DIV2 DUP2 #0005 DIV2 SUB2 SUB2 #40 SFT NIP ( mask ) SFT2 .input LDZ2 EOR2 .input STZ2 ! @on-mouse/touch-fncpad ( x/3 y -> ) #01 SFT SWP #06 MUL ADD #00 SWP DUP ADD ;fncpad ADD2 LDA2 JMP2 @on-mouse/touch-numpad ( x/3 y -> ) SWP #02 SUB SWP #03 DIV #20 SFT ADD #00 SWP DUP ADD ;numpad ADD2 LDA2 JMP2 @on-mouse/touch-modpad ( x/3 y -> ) #03 DIV SWP #06 SUB #20 SFT ADD #00 SWP DUP ADD ;modpad ADD2 LDA2 JMP2 ( @|main ) @listen ( c -- ) STHk #00 EQU ?{ ;keys/end ;keys &>l ( -- ) LDAk STHkr NEQ ?{ INC2k LDA2 JSR2 !&end } INC2 INC2 INC2 GTH2k ?&>l &end POP2 POP2 } POPr JMP2r @eval ( -- ) ;buttons/push press-button .input LDZ2 #0001 push #0000 .input STZ2 ! @append ( val -- ) #00 SWP .input LDZ2 #00 #0a10 .mode/dec LDZ [ JMP SWP POP ] MUL2 ADD2 .input STZ2 ! @erase ( -- ) ( clamp ) .input LDZ2 ORA ?{ ;buttons/pop press-button .length LDZ2 ORA #01 [ JCN JMP2r ] pop POP2 .input/num STZ2 ! } .input LDZ2 #00 #0a10 .mode/dec LDZ [ JMP SWP POP ] DIV2 .input STZ2 ! @clear ( -- ) ;buttons/clr press-button #0000 .length STZ2 #0000 .input STZ2 ! @toggle-mode ( -- ) ;buttons/mode press-button .mode/dec LDZk INC #01 AND SWP STZ .mode/dot LDZk .mode/dec LDZ #00 EQU ADD #01 AND SWP STZ !header/ @set-dec ( -- ) [ LIT2 01 -mode/dec ] STZ !header/ @set-hex ( -- ) [ LIT2 00 -mode/dec ] STZ !header/ @set-sel ( x y -- ) #00 ;fill-icn ( store new sel ) #03 AND .sel/dy STZ #07 AND .sel/dx STZ #81 ;dpad-chr ! @press-sel ( -- ) [ LIT2 00 -sel/d ] LDZ2 #30 SFT ADD #20 SFT2 ;layout ADD2 INC2 INC2 LDA2 JMP2 @gcd ( num* den* -- d* ) ORAk ?{ POP2 JMP2r } SWP2 OVR2 ( MOD2 ) [ DIV2k MUL2 SUB2 ] !gcd @push ( num* den* -- ) OVR2 #0000 EQU2 ?{ ORAk #00 EQU ?{ ( reduce ) OVR2 OVR2 gcd STH2k DIV2 SWP2 STH2r DIV2 ( store ) .length LDZ2 #20 SFT2 ;memory ADD2 STH2k STA2 STH2r INC2 INC2 STA2 ( inc ) .length LDZ2k INC2 ROT STZ2 JMP2r } } POP2 POP2 JMP2r @pop ( -- num* den* ) ( dec ) .length LDZ2k #0001 SUB2 ROT STZ2 .length LDZ2 #20 SFT2 ;memory ADD2 LDA2k SWP2 INC2 INC2 LDA2 JMP2r ( @|operations ) @dup ( -- ) ;buttons/dup press-button eval .length LDZ2 #0000 EQU2 ?{ pop OVR2 OVR2 push push } JMP2r @swp ( -- ) ;buttons/swp press-button eval .length LDZ2 #0002 LTH2 ?{ pop pop ROT2 STH2 ROT2 STH2r push push } JMP2r @vid ( -- ) ;buttons/vid press-button eval .length LDZ2 #0000 EQU2 ?{ .length LDZ2 #20 SFT2 #0002 SUB2 ;memory ADD2 LDA2 #0001 EQU2 ?{ pop SWP2 #0001 push #0001 push } } JMP2r @inv ( -- ) ;buttons/inv press-button eval .length LDZ2 #0000 EQU2 ?{ pop SWP2 push } JMP2r @do-add ( -- ) ;buttons/add press-button eval .length LDZ2 #0002 LTH2 ?{ pop ,&bd STR2 ,&bn STR2 pop ,&ad STR2 ,&an STR2 [ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2 [ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 ADD2 ,&ad LDR2 ,&bd LDR2 MUL2 push } JMP2r @do-sub ( -- ) ;buttons/sub press-button eval .length LDZ2 #0002 LTH2 ?&skip pop ,&bd STR2 ,&bn STR2 pop ,&ad STR2 ,&an STR2 [ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2 [ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 SUB2 ,&ad LDR2 ,&bd LDR2 MUL2 push &skip JMP2r @do-mul ( -- ) ;buttons/mul press-button eval .length LDZ2 #0002 LTH2 ?{ pop ,&bd STR2 ,&bn STR2 pop ,&ad STR2 ,&an STR2 [ LIT2 &an $2 ] [ LIT2 &bn $2 ] MUL2 [ LIT2 &ad $2 ] [ LIT2 &bd $2 ] MUL2 push } JMP2r @do-div ( -- ) ;buttons/div press-button eval .length LDZ2 #0002 LTH2 ?{ pop ,&bd STR2 ,&bn STR2 pop ,&ad STR2 ,&an STR2 [ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2 [ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 push } JMP2r @do-and ( -- ) ;buttons/and press-button eval .length LDZ2 #0002 LTH2 ?{ pop ,&bd STR2 ,&bn STR2 pop ,&ad STR2 ,&an STR2 [ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2 [ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 AND2 ,&ad LDR2 ,&bd LDR2 MUL2 push } JMP2r @do-ora ( -- ) ;buttons/ora press-button eval .length LDZ2 #0002 LTH2 ?{ pop ,&bd STR2 ,&bn STR2 pop ,&ad STR2 ,&an STR2 [ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2 [ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 ORA2 ,&ad LDR2 ,&bd LDR2 MUL2 push } JMP2r @do-sfl ( -- ) ;buttons/sfl press-button eval .length LDZ2 #0000 EQU2 ?{ pop SWP2 DUP2 ADD2 SWP2 push } JMP2r @do-sfr ( -- ) ;buttons/sfr press-button eval .length LDZ2 #0000 EQU2 ?{ pop SWP2 #01 SFT2 SWP2 push } JMP2r @put ( -- ) &0 #000b ;buttons/0 !press-number &1 #010c ;buttons/1 !press-number &2 #020e ;buttons/2 !press-number &3 #0310 ;buttons/3 !press-number &4 #0411 ;buttons/4 !press-number &5 #0513 ;buttons/5 !press-number &6 #0615 ;buttons/6 !press-number &7 #0717 ;buttons/7 !press-number &8 #0818 ;buttons/8 !press-number &9 #091a ;buttons/9 !press-number &a #0a09 ;buttons/a !press-number &b #0b07 ;buttons/b !press-number &c #0c21 ;buttons/c !press-number &d #0d1f ;buttons/d !press-number &e #0e1d ;buttons/e !press-number &f #0f1c ;buttons/f !press-number @press-number ( value note button* -- ) press-button play-note ( ignore hex keys in dec mode ) DUP #09 GTH .mode/dec LDZ AND ?{ !append } POP JMP2r @press-button ( button* -- ) ( set timer ) DUP2 #0008 ADD2 #04 ROT ROT STA #01 &release ( button* state -- ) STH LDA2k .Screen/x DEO2 INC2 INC2 LDA2k .Screen/y DEO2 INC2 INC2 LDA2k ( icon ) SWP2 INC2 INC2 LDA2 STHr ROT ROT JMP2 @play-note ( pitch -- ) .mode/mute LDZ ?{ DUP #18 ADD .Audio0/pitch DEO } POP JMP2r ( @|drawing ) @ ( -- ) ( >> ) @ ( -- ) #04 ;buttons/ctl #08 ;buttons/mod #04 ;buttons/wst #10 ;buttons/num header/ ! @ ( -- ) #0001 .Screen/x DEO2 #0013 .Screen/y DEO2 #01e4 ;fill-icn #f1 #0001 .Screen/x DEO2 #0076 .Screen/y DEO2 #00e4 ;dotted-icn #01 #0a ;draw-num/color STA #0600 &>l ( -- ) #00 OVR INC .length LDZ2 GTH2 ?{ #0010 .Screen/x DEO2 #00 OVR #40 SFT2 #0066 SWP2 SUB2 .Screen/y DEO2 #00 OVR INC .length LDZ2 SWP2 SUB2 #20 SFT2 ;memory ADD2 INC GTHk ?&>l } POP2 ( >> ) @ ( -- ) #0010 .Screen/x DEO2 #007e .Screen/y DEO2 #04 ;draw-num/color STA ;input ( | arrow ) [ LIT2 00 -Screen/auto ] DEO #0000 .Screen/x DEO2 #0082 .Screen/y DEO2 ;arrow-icn .Screen/addr DEO2 [ LIT2 00 -Screen/sprite ] DEO ( | binary ) [ LIT2 00 -Screen/auto ] DEO #0070 .Screen/x DEO2 #0082 .Screen/y DEO2 #1000 &>l ( -- ) #0f OVR SUB .input LDZ2 ROT SFT2 #0001 AND2 #30 SFT2 ;bin-icn ADD2 .Screen/addr DEO2 [ LIT2 07 -Screen/sprite ] DEO .Screen/x DEI2k #0005 ADD2 ROT DEO2 INCk #03 AND ?{ .Screen/x DEI2k #0005 ADD2 ROT DEO2 } INC GTHk ?&>l POP2 JMP2r @ ( length sprites* -- ) STH2 #00 &>l ( -- ) #00 OVR #0009 MUL2 STH2kr ADD2 #00 press-button/release INC GTHk ?&>l POP2 POP2r JMP2r @draw-button-clr ( icon* state -- ) ( >> ) @draw-button-small ( icon* state -- ) #00 NEQ STH [ LIT2 26 -Screen/auto ] DEO ;button/down-chr ;button/up-chr STHkr [ JMP SWP2 POP2 ] STH2k .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEO STH2r #0060 ADD2 .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEO ( icon ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/y DEI2 #000c SUB2 #00 STHr ADD2 .Screen/y DEO2 [ LIT2 00 -Screen/auto ] DEO .Screen/addr DEO2 [ LIT2 09 -Screen/sprite ] DEOk DEO JMP2r @draw-button-tall ( icon* state -- ) #00 NEQ STH [ LIT2 26 -Screen/auto ] DEO ;button/down-chr ;button/up-chr STHkr [ JMP SWP2 POP2 ] STH2k .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEO ( body ) #0400 &>l ( -- ) STH2kr #0030 ADD2 .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEO INC GTHk ?&>l POP2 STH2r #0060 ADD2 .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEO ( icon ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/y DEI2 #0010 SUB2 #00 STHr ADD2 .Screen/y DEO2 [ LIT2 00 -Screen/auto ] DEO .Screen/addr DEO2 [ LIT2 09 -Screen/sprite ] DEOk DEO JMP2r @draw-button-hex ( icon* state -- ) ( >> ) @draw-button ( icon* state -- ) #00 NEQ STH [ LIT2 26 -Screen/auto ] DEO ;button/down-chr ;button/up-chr STHkr [ JMP SWP2 POP2 ] .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEOk DEOk DEO ( icon ) .Screen/x DEI2 #0004 ADD2 .Screen/x DEO2 .Screen/y DEI2 #0014 SUB2 #00 STHr ADD2 .Screen/y DEO2 [ LIT2 16 -Screen/auto ] DEO .Screen/addr DEO2 [ LIT2 09 -Screen/sprite ] DEOk DEO JMP2r @draw-button-opc ( icon* state -- ) #00 NEQ STH [ LIT2 26 -Screen/auto ] DEO ;button/opc-down-chr ;button/opc-up-chr STHkr [ JMP SWP2 POP2 ] .Screen/addr DEO2 [ LIT2 81 -Screen/sprite ] DEOk DEOk DEO ( icon ) .Screen/x DEI2 #0004 ADD2 .Screen/x DEO2 .Screen/y DEI2 #0014 SUB2 #00 STHr ADD2 .Screen/y DEO2 [ LIT2 16 -Screen/auto ] DEO .Screen/addr DEO2 [ LIT2 05 -Screen/sprite ] DEOk DEO JMP2r @ ( addr* -- ) [ LIT2 01 -Screen/auto ] DEO LDA2k SWP2 INC2 INC2 LDA2 DUP2 #0001 EQU2 ?&whole GTH2k ?&mixed &proper ( num* den* -- ) .mode/dot LDZ ?&proper-dot SWP2 draw-value draw-slash !draw-value &proper-dot ( num* den* -- ) #00 draw-num draw-dot SWP2 #03e8 #1000 .mode/dec LDZ [ JMP SWP2 POP2 ] MUL2 SWP2 DIV2 !draw-value &mixed ( num* den* -- ) .mode/dot LDZ ?&mixed-dot DIV2k draw-value draw-quote STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r !&proper &mixed-dot ( num* den* -- ) DIV2k draw-value draw-dot STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r SWP2 #03e8 #1000 .mode/dec LDZ [ JMP SWP2 POP2 ] MUL2 SWP2 DIV2 !draw-value &whole ( num* den* -- ) POP2 @draw-value ( short* -- ) ORAk ?{ POP2 #00 !draw-num } .mode/dec LDZ ?draw-dec ( | draw hex ) #00 ,&z STR /parse /parse /parse /parse POP2 JMP2r &parse OVR #04 SFT DUP [ LIT &z $1 ] EQU ?&skip #ff ,&z STR DUP draw-num &skip POP #40 SFT2 JMP2r @draw-dec ( short* -- ) #00 ,&z STR #2710 /parse #03e8 /parse #0064 /parse #000a /parse NIP &emit DUP [ LIT &z $1 ] EQU ?&skip #ff ,&z STR DUP draw-num &skip POP JMP2r &parse DIV2k DUP /emit MUL2 SUB2 JMP2r @hex-char ( hex -- char ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD JMP2r @draw-num ( num -- ) #00 SWP #50 SFT2 ;num-icns ADD2 .Screen/addr DEO2 [ LIT2 16 -Screen/auto ] DEOk DEO [ LIT2 &color 01 -Screen/sprite ] DEOk DEO .Screen/y DEI2k #0010 SUB2 ROT DEO2 .Screen/x DEI2k #000d ADD2 ROT DEO2 JMP2r @draw-dot ( -- ) ;dot-icns ! @draw-quote ( -- ) ;quote-icns ! @draw-slash ( -- ) ;slash-icns ( >> ) @ ( addr* -- ) .Screen/addr DEO2 .Screen/x DEI2k INC2 INC2 INC2 ROT DEO2 [ LIT2 15 -Screen/auto ] DEOk DEO [ LIT2 04 -Screen/sprite ] DEO JMP2r @ ( color addr* -- ) [ LIT2 00 -Screen/auto ] DEO .Screen/addr DEO2 #00 .sel/d LDZ2 #30 SFT ADD #20 SFT2 ;layout ADD2 LDA2 LDA2k #0008 ADD2 .Screen/x DEO2 INC2 INC2 LDA2 #0002 SUB2 .Screen/y DEO2 #40 ADD .Screen/sprite DEO JMP2r @ ( color times addr* auto -- ) .Screen/auto DEO ,&addr STR2 SWP STH [ LITr -Screen/sprite ] &>l ( -- ) [ LIT2 &addr $2 ] .Screen/addr DEO2 DEOkr INC DUP ?&>l POP POP2r JMP2r @ ( color times addr* auto -- ) .Screen/auto DEO .Screen/addr DEO2 SWP STH [ LITr -Screen/sprite ] &>l ( -- ) DEOkr INC DUP ?&>l POP POP2r JMP2r ( @|printing ) @print ( -- ) .length LDZ2 ORA ?{ ;empty-txt print-str #0a18 DEO JMP2r } .length LDZ2 #0001 SUB2 #20 SFT2 ;memory ADD2 ( | print fraction ) LDA2k SWP2 INC2 INC2 LDA2 DUP2 #0001 EQU2 ?&whole GTH2k ?&mixed &proper ( num* den* -- ) SWP2 print-value LIT "/ #18 DEO print-value #0a18 DEO JMP2r &mixed ( num* den* -- ) DIV2k print-value STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r LIT "' #18 DEO !&proper &whole ( num* den* -- ) POP2 print-value #0a18 DEO JMP2r @print-value ( short* -- ) ORAk ?{ LIT "0 #18 DEO JMP2r } .mode/dec LDZ ?print-dec @print-hex ( short* -- ) #00 ,&z STR /parse /parse /parse /parse POP2 JMP2r &parse OVR #04 SFT DUP [ LIT &z $1 ] EQU ?&skip #ff ,&z STR DUP hex-char #18 DEO &skip POP #40 SFT2 JMP2r @print-dec ( short* -- ) #00 ,&z STR #2710 /parse #03e8 /parse #0064 /parse #000a /parse NIP &emit DUP [ LIT &z $1 ] EQU ?&skip #ff ,&z STR DUP #30 ADD #18 DEO &skip POP JMP2r &parse DIV2k DUP /emit MUL2 SUB2 JMP2r @print-str ( str* -- ) &w LDAk #18 DEO INC2 LDAk ?&w POP2 JMP2r ( @|ecosystem ) @snarf/ ( -- ) ;&snarf-txt .File/name DEO2 #0001 .File/length DEO2 &>s ( -- ) ;&buf .File/read DEO2 [ LIT2 00 -File/success-lb ] DEI EQU ?{ [ LIT &buf 20 ] listen !&>s } JMP2r &snarf-txt ".snarf $1 ( @|window ) @window/ ( width* height* -- ) DUP2 ,&height STR2 .Screen/height DEO2 .Screen/width DEO2 JMP2r @window/toggle-shade ( -- ) #0011 .Screen/height DEI2 EQU2 ?{ #0011 .Screen/height DEO2 !header/ } [ LIT2 &height $2 ] .Screen/height DEO2 ! ( @|header ) @header/on-mouse ( -> ) cursor/ [ LIT2 &last $1 -Mouse/state ] DEI ( | handlers ) DUP2 #0002 NEQ2 ?{ window/toggle-shade } DUP2 #0001 NEQ2 ?{ /outside-quit ?{ / } } DUP2 #0100 NEQ2 ?{ / } ,&last STR POP BRK @header/outside-quit ( -- f ) .Mouse/x DEI2 #0008 SUB2 #000c GTH2 ?{ .Mouse/y DEI2 #0002 SUB2 #000c GTH2 ?{ #00 JMP2r } } #01 JMP2r @header/ ( -- ) ;&button-down-icn !/ @header/ ( -- ) /outside-quit ?{ #800f DEO } ( >> ) @header/ ( -- ) #0000 .Screen/x DEO2 #0000 .Screen/y DEO2 #85e3 ;&bg-chr #25 ( | 1px right ) .Screen/width DEI2 #0001 SUB2 .Screen/x DEO2 #000e .Screen/y DEO2 [ LIT2 a2 -Screen/pixel ] DEO ( | 1px left ) #0001 .Screen/x DEO2 [ LIT2 b2 -Screen/pixel ] DEO ( | title ) / ;&button-icn ( >> ) @header/ ( button* -- ) .Screen/addr DEO2 #0008 .Screen/x DEO2 #0000 .Screen/y DEO2 [ LIT2 15 -Screen/auto ] DEO [ LIT2 09 -Screen/sprite ] DEOk DEO JMP2r @header/ ( -- ) .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 #0001 .Screen/y DEO2 #09 ;chicago/color STA .mode LDZ2 ( | handlers ) DUP2 #0000 NEQ2 ?{ POP2 ;dict/calc-hexd-txt !chicago/ } DUP2 #0001 NEQ2 ?{ POP2 ;dict/calc-hex-txt !chicago/ } DUP2 #0100 NEQ2 ?{ POP2 ;dict/calc-decd-txt !chicago/ } POP2 ;dict/calc-dec-txt !chicago/ ( @|chicago ) @chicago/get-str-width ( text* -- width* ) [ LITr 00 ] &>ww ( -- ) LDAk #20 SUB #00 SWP ;&widths ADD2 LDA STH ( > ) ADDr INC2 LDAk ?&>ww POP2 #00 STHr JMP2r @chicago/ ( text* color -- ) .Screen/x DEI2 OVR2 /get-str-width #01 SFT2 SUB2 .Screen/x DEO2 [ LIT2 15 -Screen/auto ] DEO &>ws ( -- ) LDAk #1f GTH ?{ POP2 JMP2r } LDAk / INC2 !&>ws @chicago/ ( char -- ) #00 SWP #20 SUB DUP2 ( addr ) #50 SFT2 ;&font ADD2 .Screen/addr DEO2 ( move ) ;&widths ADD2 LDA #00 SWP .Screen/x DEI2 ADD2 ( draw ) [ LIT2 &color 01 -Screen/sprite ] DEOk DEO .Screen/x DEO2 JMP2r ( @|cursor ) @cursor/ ( -- ) .Mouse/y DEI2 #0012 GTH2 ?{ ( ) ;header/on-mouse .Mouse/vector DEO2 JMP2r } ;on-mouse .Mouse/vector DEO2 JMP2r @cursor/ ( -- ) [ LIT2 12 -Screen/auto ] DEO #40 ;fill-icn / [ LIT2 16 -Screen/auto ] DEO #c1 ;&down-chr .Mouse/state DEI ?{ POP2 ;&up-chr } .Mouse/x DEI2 ,&x STR2 .Mouse/y DEI2 ,&y STR2 / ( >> ) @cursor/ ( color addr* -- ) .Screen/addr DEO2 [ LIT2 &x $2 ] #0004 SUB2 .Screen/x DEO2 [ LIT2 &y $2 ] #0004 SUB2 .Screen/y DEO2 .Screen/sprite DEOk DEO JMP2r ( @|theme ) @theme/ ( -- ) #f0a8 #f0ec #f0b9 ( >> ) @theme/ ( r* g* b* -- ) .System/b DEO2 .System/g DEO2 .System/r DEO2 JMP2r @theme/ ( -- ) ;&path .File/name DEO2 #0002 .File/length DEO2 ;&r .File/read DEO2 ;&g .File/read DEO2 ;&b .File/read DEO2 .File/success-lb DEI ?{ !theme/ } [ LIT2 &r $2 ] [ LIT2 &g $2 ] [ LIT2 &b $2 ] !theme/ &path ".theme $1 ( @|stdlib ) @ ( short* -: ) SWP /b &b ( byte -: ) DUP #04 SFT /c &c ( byte -: ) #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO JMP2r ( @|etc ) @empty-txt "Empty 20 "Stack $1 @dict/calc-hex-txt 20 20 "Hexadecimal $1 @dict/calc-hexd-txt 20 20 "Hexadecimal(f) $1 @dict/calc-dec-txt 20 20 "Decimal $1 @dict/calc-decd-txt 20 20 "Decimal(f) $1 ( @|LUTs ) @fncpad =clear =swp =dup =erase =erase =erase =toggle-mode =inv =vid =eval =eval =eval @numpad =put/7 =put/8 =put/9 =put/f =put/4 =put/5 =put/6 =put/e =put/1 =put/2 =put/3 =put/d =put/0 =put/a =put/b =put/c @modpad =do-mul =do-div =do-add =do-sub =do-and =do-ora =do-sfl =do-sfr @keys "~ =clear 09 =toggle-mode "? =inv "@ =vid "+ =do-add "- =do-sub "* =do-mul "/ =do-div "& =do-and "| =do-ora "< =do-sfl "> =do-sfr 20 =eval 08 =erase "% =swp "" =dup "7 =put/7 "8 =put/8 "9 =put/9 "f =put/f "4 =put/4 "5 =put/5 "6 =put/6 "e =put/e "1 =put/1 "2 =put/2 "3 =put/3 "d =put/d "0 =put/0 "a =put/a "b =put/b "c =put/c 0d =eval 0a =eval "! =erase ". =print 1b =clear "# =set-hex "$ =set-dec &end @layout [ =buttons/clr =clear =buttons/mode =toggle-mode =buttons/7 =put/7 =buttons/8 =put/8 =buttons/9 =put/9 =buttons/f =put/f =buttons/mul =do-mul =buttons/and =do-and =buttons/swp =swp =buttons/inv =inv =buttons/4 =put/4 =buttons/5 =put/5 =buttons/6 =put/6 =buttons/e =put/e =buttons/div =do-div =buttons/ora =do-ora =buttons/dup =dup =buttons/vid =vid =buttons/1 =put/1 =buttons/2 =put/2 =buttons/3 =put/3 =buttons/d =put/d =buttons/add =do-add =buttons/sfl =do-sfl =buttons/pop =erase =buttons/push =eval =buttons/0 =put/0 =buttons/a =put/a =buttons/b =put/b =buttons/c =put/b =buttons/sub =do-sub =buttons/sfr =do-sfr ] @buttons ( x* y* icon* size* state ) &ctl &clr 0010 00a0 =ctl-icns/clr =draw-button-clr 00 &swp 0010 00b0 =wst-icns/swp =draw-button-small 00 &dup 0010 00c0 =wst-icns/dup =draw-button-small 00 &pop 0010 00d0 =wst-icns/pop =draw-button-tall 00 &wst &mode 0028 00a0 =ctl-icns/mode =draw-button-small 00 &inv 0028 00b0 =ctl-icns/inv =draw-button-small 00 &vid 0028 00c0 =ctl-icns/vid =draw-button-small 00 &push 0028 00d0 =wst-icns/push =draw-button-tall 00 &num &7 0040 00a0 =num-icns/7 =draw-button 00 &8 0058 00a0 =num-icns/8 =draw-button 00 &9 0070 00a0 =num-icns/9 =draw-button 00 &f 0088 00a0 =num-icns/f =draw-button-hex 00 &4 0040 00b8 =num-icns/4 =draw-button 00 &5 0058 00b8 =num-icns/5 =draw-button 00 &6 0070 00b8 =num-icns/6 =draw-button 00 &e 0088 00b8 =num-icns/e =draw-button-hex 00 &1 0040 00d0 =num-icns/1 =draw-button 00 &2 0058 00d0 =num-icns/2 =draw-button 00 &3 0070 00d0 =num-icns/3 =draw-button 00 &d 0088 00d0 =num-icns/d =draw-button-hex 00 &0 0040 00e8 =num-icns/0 =draw-button 00 &a 0058 00e8 =num-icns/a =draw-button-hex 00 &b 0070 00e8 =num-icns/b =draw-button-hex 00 &c 0088 00e8 =num-icns/c =draw-button-hex 00 &mod &mul 00a0 00a0 =mod-icns/mul =draw-button-opc 00 &div 00a0 00b8 =mod-icns/div =draw-button-opc 00 &add 00a0 00d0 =mod-icns/add =draw-button-opc 00 &sub 00a0 00e8 =mod-icns/sub =draw-button-opc 00 &and 00b8 00a0 =mod-icns/and =draw-button-opc 00 &ora 00b8 00b8 =mod-icns/ora =draw-button-opc 00 &sfl 00b8 00d0 =mod-icns/sfl =draw-button-opc 00 &sfr 00b8 00e8 =mod-icns/sfr =draw-button-opc 00 &end ( @|assets ) @fill-icn [ ffff ffff ffff ffff ] @dotted-icn [ 0000 0055 0000 0000 ] @bin-icn [ 6090 9090 9090 9060 60f0 f0f0 f0f0 f060 ] @arrow-icn [ 80c0 e0f0 f0e0 c080 ] @header &bg-chr [ 0000 00ff 00ff 00ff ffff ff00 ff00 ff00 00ff 00ff 00ff 0000 ff00 ff00 ff00 ffff 00ff 0000 0000 0000 ff00 0000 0000 0000 ] &button-icn [ 0000 007f 4040 4040 4040 4040 407f 0000 0000 00f7 1017 1017 1017 1017 10f7 0000 ] &button-down-icn [ 0000 007f 4252 4a40 7840 4a52 427f 0000 0000 00f7 1057 9017 f017 9057 10f7 0000 ] @cursor/up-chr [ 0000 0000 0814 1417 0000 0000 0008 0808 0000 0000 0000 00c0 0000 0000 0000 0000 1010 2010 1008 0700 0f0f 1f0f 0f07 0000 2010 1010 2020 c000 c0e0 e0e0 c0c0 0000 ] @cursor/down-chr [ 0000 0000 0000 0817 0000 0000 0000 0008 0000 0000 0000 00c0 0000 0000 0000 0000 1010 2010 1008 0700 0f0f 1f0f 0f07 0000 2010 1010 2020 c000 c0e0 e0e0 c0c0 0000 ] @button/up-chr [ 001f 2040 4040 4040 0000 1f3f 3f3f 3f3f 00ff 0000 0000 0000 0000 ffff ffff ffff 00f8 0402 0202 0202 0000 f8fc fcfc fcfc 4040 4040 4040 4040 3f3f 3f3f 3f3f 3f3f 0000 0000 0000 0000 ffff ffff ffff ffff 0202 0202 0202 0202 fcfc fcfc fcfc fcfc 4040 4040 4020 1f00 3f3f 3f3f 1f00 0000 0000 0000 0000 ff00 ffff ffff ff00 0000 0202 0202 0204 f800 fcfc fcfc f800 0000 ] @button/down-chr [ 0000 1f20 4040 4040 0000 0000 1f3f 3f3f 0000 ff00 0000 0000 0000 0000 ffff ffff 0000 f804 0202 0202 0000 0000 f8fc fcfc 4040 4040 4040 4040 3f3f 3f3f 3f3f 3f3f 0000 0000 0000 0000 ffff ffff ffff ffff 0202 0202 0202 0202 fcfc fcfc fcfc fcfc 4040 4040 4020 1f00 3f3f 3f3f 3f1f 0000 0000 0000 0000 ff00 ffff ffff ffff 0000 0202 0202 0204 f800 fcfc fcfc fcf8 0000 ] @button/opc-up-chr [ 001f 3f7f 7f7f 7f7f 0000 1f3f 3f3f 3f3f 00ff ffff ffff ffff 0000 ffff ffff ffff 00f8 fcfe fefe fefe 0000 f8fc fcfc fcfc 7f7f 7f7f 7f7f 7f7f 3f3f 3f3f 3f3f 3f3f ffff ffff ffff ffff ffff ffff ffff ffff fefe fefe fefe fefe fcfc fcfc fcfc fcfc 7f7f 7f7f 5f20 1f00 3f3f 3f3f 1f00 0000 ffff ffff ff00 ff00 ffff ffff ff00 0000 fefe fefe fa04 f800 fcfc fcfc f800 0000 ] @button/opc-down-chr [ 0000 1f3f 7f7f 7f7f 0000 001f 3f3f 3f3f 0000 ffff ffff ffff 0000 00ff ffff ffff 0000 f8fc fefe fefe 0000 00f8 fcfc fcfc 7f7f 7f7f 7f7f 7f7f 3f3f 3f3f 3f3f 3f3f ffff ffff ffff ffff ffff ffff ffff ffff fefe fefe fefe fefe fcfc fcfc fcfc fcfc 7f7f 7f7f 5f20 1f00 3f3f 3f3f 1f00 0000 ffff ffff ff00 ff00 ffff ffff ff00 0000 fefe fefe fa04 f800 fcfc fcfc f800 0000 ] @ctl-icns &clr [ 0000 183c 3c18 0000 ] &mode [ 0000 007f fe00 0000 ] &inv [ 006c 6666 6666 3600 ] &vid [ 0033 6666 6666 cc00 ] @wst-icns &push [ 0018 3c7e 1818 1800 ] &pop [ 0018 1818 7e3c 1800 ] &swp [ 007c 7e02 407e 3e00 ] &dup [ 003c 6666 6666 6c00 ] @mod-icns &and 0000 000f 1f18 180f 0000 00e0 e000 00f8 0f18 181f 0f00 0000 f860 60e0 e000 0000 &ora 0000 0001 0101 0101 0000 0080 8080 8080 0101 0101 0100 0000 8080 8080 8000 0000 &sfl 0000 0006 060c 0c19 0000 0060 60c0 c080 190c 0c06 0600 0000 80c0 c060 6000 0000 &sfr 0000 0006 0603 0301 0000 0060 6030 3098 0103 0306 0600 0000 9830 3060 6000 0000 &add 0000 0001 0101 011f 0000 0080 8080 80f8 1f01 0101 0100 0000 f880 8080 8000 0000 &sub 0000 0000 0000 001f 0000 0000 0000 00f8 1f00 0000 0000 0000 f800 0000 0000 0000 &mul 0000 0018 1806 0601 0000 0018 1860 6080 0106 0618 1800 0000 8060 6018 1800 0000 &div 0000 0001 0100 001f 0000 0080 8000 00f8 1f00 0001 0100 0000 f800 0080 8000 0000 @num-icns &0 0000 000f 1f18 1818 0000 00f0 f818 1818 1818 181f 0f00 0000 1818 18f8 f000 0000 &1 0000 0003 0307 0701 0000 0080 8080 8080 0101 0101 0100 0000 8080 8080 8000 0000 &2 0000 001f 1f00 000f 0000 00f0 f818 18f8 1f18 181f 1f00 0000 f000 00f8 f800 0000 &3 0000 001f 1f00 001f 0000 00f0 f818 18f0 1f00 001f 1f00 0000 f018 18f8 f000 0000 &4 0000 0018 1818 181f 0000 0018 1818 18f8 0f00 0000 0000 0000 f818 1818 1800 0000 &5 0000 001f 1f18 181f 0000 00f8 f800 00f0 0f00 001f 1f00 0000 f818 18f8 f000 0000 &6 0000 0018 1818 181f 0000 0000 0000 00f0 1f18 181f 0f00 0000 f818 18f8 f000 0000 &7 0000 001f 1f00 0000 0000 00f8 f818 1830 0000 0000 0000 0000 3060 60c0 c000 0000 &8 0000 000f 1f18 180f 0000 00f0 f818 18f0 0f18 181f 0f00 0000 f018 18f8 f000 0000 &9 0000 000f 1f18 181f 0000 00f0 f818 18f8 0f00 0000 0000 0000 f818 1818 1800 0000 &a 0000 000f 1f18 181f 0000 00f0 f818 18f8 1f18 1818 1800 0000 f818 1818 1800 0000 &b 0000 001f 1f18 181f 0000 00f0 f818 18f0 1f18 181f 1f00 0000 f018 18f8 f000 0000 &c 0000 000f 1f18 1818 0000 00f8 f800 0000 1818 181f 0f00 0000 0000 00f8 f800 0000 &d 0000 001f 1f18 1818 0000 00f0 f818 1818 1818 181f 1f00 0000 1818 18f8 f000 0000 &e 0000 001f 1f18 181f 0000 00f8 f800 00f8 1f18 181f 1f00 0000 f800 00f8 f800 0000 &f 0000 000f 1f18 181f 0000 00f8 f800 0080 1f18 1818 1800 0000 8000 0000 0000 0000 @slash-icns [ 0000 0006 060c 0c18 1830 3060 6000 0000 ] @dot-icns [ 0000 0000 0000 0000 0000 0018 1800 0000 ] @quote-icns [ 0000 0018 1818 0800 0000 0000 0000 0000 ] @dpad-chr [ 0000 ff81 8142 2418 0000 007e 7e3c 1800 ] @tone [ 8eae b5b9 c0ce dbdc cdb6 a295 8b80 7364 5953 5256 585a 5d62 686f 7579 7d7e 8183 8585 8483 8587 8b96 9d9e 9282 7876 7674 706b 696c 7479 7d81 8385 898d 8d8d 8c8a 8a88 8684 8180 7f7e 7d7c 7c7c 7c7c 7a74 6445 221d 4179 a2b4 b7bc c7d6 ddd5 c0aa 9b8f 867a 6b5e 5553 5456 585c 6065 6c73 787c 7e80 8284 8484 8484 8589 919a a098 897c 7676 7572 6e6a 6b6f 777d 7f81 8587 8c8e 8e8d 8c8a 8988 8584 817f 7e7d 7e7d 7c7d 7c7c 786d 5530 1a2d 5e91 aeb7 b9c1 cfdc dacb b4a0 948b 8072 6458 5354 5558 5a5e 636a 7076 7a7d 7f82 8484 8584 8485 878d 969e 9d91 8177 7575 7470 6b69 6c74 7a7e 8182 8589 8d8e 8e8d 8a8a 8887 8582 807e 7e7d 7c7c 7c7c 7d7b 7463 4121 1e46 ] @chicago/widths [ 0406 070a 070b 0a03 0505 0707 0407 0407 0808 0808 0808 0808 0808 0404 0608 0608 0b08 0808 0807 0708 0806 0709 070c 0908 0808 0807 0608 080c 0808 0805 0705 0808 0608 0807 0808 0608 0804 0608 040c 0808 0808 0607 0608 080c 0808 0805 0505 0808 ] @chicago/font [ 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0030 3030 3030 3000 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0028 2828 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0909 3f12 127f 2424 0000 0000 0000 0000 0000 8000 0000 0000 0000 0000 0000 0000 1038 5470 7038 1c1c 5438 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 3749 4a32 0404 090a 1211 0000 0000 0000 0000 0000 0000 8040 4080 0000 0000 0000 003c 6666 3067 6666 663c 0000 0000 0000 0000 0080 8000 0000 0000 0000 0000 0000 0040 4040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1020 6060 6060 6060 6020 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4020 3030 3030 3030 3020 4000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 5438 5410 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 107c 1010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 6060 2040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0404 0808 1010 2020 4040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0018 3818 1818 1818 1818 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 4606 060c 1830 607e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007e 0c18 3c06 0606 463c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0006 0e16 2646 7f06 0606 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007e 6060 7c06 0606 463c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001c 3060 7c66 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007e 0606 060c 1818 1818 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 663c 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 6666 3e06 0c38 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 6000 0000 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 6000 0000 6060 2040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1830 60c0 6030 1800 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 7e00 7e00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 c060 3018 3060 c000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 4606 0c18 1800 1818 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1f20 4e52 524d 201f 0000 0000 0000 0000 0080 4040 4080 0000 0000 0000 0000 003c 6666 667e 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6666 667c 6666 667c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6260 6060 6060 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6666 6666 6666 667c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6060 6078 6060 607c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6060 6078 6060 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6260 606e 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 667e 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0030 3030 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 000c 0c0c 0c0c cccc cc78 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0063 666c 7870 786c 6663 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 6060 6060 6060 607c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0040 6070 795f 4e44 4040 0000 0000 0000 0020 60e0 e060 6060 6060 0000 0000 0000 0041 6171 795d 4f47 4341 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6666 667c 6060 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 6666 6666 663c 0600 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6666 667c 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 6460 7038 1c0c 4c38 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00fc 3030 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 6666 6478 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 6666 667f 0000 0000 0000 0060 6060 6060 6060 4080 0000 0000 0000 0066 6666 663c 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 663c 1818 1818 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007e 0606 0c18 3060 607e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 7060 6060 6060 6060 6060 7000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4040 2020 1010 0808 0404 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 7030 3030 3030 3030 3030 7000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0008 1422 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00ff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4020 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 607c 6666 6666 667c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 6460 6060 6438 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0006 063e 6666 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 7e60 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001c 3078 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003e 6666 6666 663e 0646 3c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 607c 6666 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 0060 6060 6060 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0018 0018 1818 1818 1818 1898 7000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 6066 6c78 7078 6c66 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0060 6060 6060 6060 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007f 6666 6666 6666 0000 0000 0000 0000 00c0 6060 6060 6060 0000 0000 0000 0000 007c 6666 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 6666 6666 667c 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003e 6666 6666 663e 0606 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 006c 7060 6060 6060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 6470 381c 4c38 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0030 3078 3030 3030 3018 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 6478 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 667f 0000 0000 0000 0000 0060 6060 6060 4080 0000 0000 0000 0000 0066 6666 3c66 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0066 6666 6666 663e 0646 3c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007e 060c 1830 607e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1020 2020 2040 2020 2020 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 2020 2020 2020 2020 2020 2000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4020 2020 2010 2020 2020 4000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0032 4c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 003c 6666 667e 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1824 243c 6666 667e 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6260 6060 6060 623c 1808 1000 0000 0000 0000 0000 0000 0000 0000 0000 0810 007c 6060 6078 6060 607c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 324c 0041 6171 795d 4f47 4341 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 003c 6666 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 0066 6666 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0810 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1008 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1824 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 324c 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1824 2418 003c 463e 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003c 6260 6060 623c 1808 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0810 003c 6666 7e60 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1008 003c 6666 7e60 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1824 003c 6666 7e60 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 003c 6666 7e60 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1020 0030 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 2010 0030 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 3048 0030 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0048 0030 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 324c 007c 6666 6666 6666 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0810 003c 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1008 003c 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1824 003c 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 003c 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 324c 003c 6666 6666 663c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0810 0066 6666 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1008 0066 6666 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1824 0066 6666 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0024 0066 6666 6666 663e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0020 7020 2020 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0030 4848 3000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1038 5450 5054 3810 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001c 3230 3078 3030 317e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 3844 6030 584c 6434 180c 4438 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 7c7c 7c38 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003f 6565 653d 0505 0505 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001e 3333 3633 3333 3376 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001e 215c 525c 5252 211e 0000 0000 0000 0000 0080 8080 8080 0000 0000 0000 0000 001e 214c 5250 524c 211e 0000 0000 0000 0000 0080 8080 8080 0000 0000 0000 0000 0074 2625 2400 0000 0000 0000 0000 0000 0040 c040 4000 0000 0000 0000 0000 0000 0010 2040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0048 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0004 7f08 7f10 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 003f 6666 667f 6666 6667 0000 0000 0000 00c0 0000 0080 0000 00c0 0000 0000 0000 001e 3333 373b 3333 739e 0000 0000 0000 0080 0000 0000 0000 0000 0000 0000 0000 0000 0038 4543 463c 0000 0000 0000 0000 0000 00f0 8808 8870 0000 0000 0000 0000 0000 0010 107c 1010 007c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 2040 2010 0078 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0020 1008 1020 0078 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0061 337f 0c7f 0c0c 0c0c 0000 0000 0000 0080 0080 0080 0000 0000 0000 0000 0000 0000 0033 3333 3333 333e 2040 0000 0000 0000 0000 0000 0000 0080 0000 0000 0000 0000 380c 1e36 6666 6438 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007f 3118 0c06 0c18 317f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007f 3333 3333 3333 3333 0000 0000 0000 0080 0000 0000 0000 0000 0000 0000 0000 0000 003f 5919 1919 1911 0000 0000 0000 0000 4080 8080 8080 8000 0000 0000 0000 0018 3030 3030 3030 3030 3060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 4c3c 6c6c 3c00 7c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0038 6c6c 6c6c 3800 7c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001e 3361 6161 2112 1233 0000 0000 0000 0000 0080 8080 0000 0000 0000 0000 0000 0000 003f 463e 6766 663f 0000 0000 0000 0000 00c0 6060 e000 20c0 0000 0000 0000 0000 003d 6666 6e76 66bc 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0018 1800 1818 3060 623c 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0030 3000 3030 3030 3030 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 007c 0404 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0101 2262 1414 0808 0000 0000 0000 e080 0000 0000 0000 0000 0000 0000 0000 0018 3030 7830 3030 3030 3060 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 1e21 1e20 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0808 1414 2222 417f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0009 1224 4824 1209 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0048 2412 0912 2448 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 3333 0000 0000 0000 0000 0000 0000 0000 3030 0000 0000 ] ( @|memory ) @memory ( den*, num*, den*, num*, .. )