uxn-client/xrxs.tal (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
( utility macros ) %INC-X { .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 } ( -- ) %INC-Y { .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 } ( -- ) %CENTER-X { .Screen/width DEI2 #01 SFT2 } %CENTER-Y { .Screen/height DEI2 #01 SFT2 } %MOD { DIVk MUL SUB } %MOD2 { DIV2k MUL2 SUB2 } %NEXT-TILE { DUP2 #0010 ADD2 } %RTN { JMP2r } ( devices ) |00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 ] |10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ] |20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &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 ] |40 @Audio1 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ] |50 @Audio2 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ] |60 @Audio3 [ &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 &wheel $1 ] |a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ] |b0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ] ( variables ) |0000 @state $1 @ticker $1 @logo-coords [ &x $2 &y $2 ] @cart $64 @realm $64 ( program ) |0100 @init ( -> ) ( steppewnolf-dark theme ) #02c1 .System/r DEO2 #02cd .System/g DEO2 #02cb .System/b DEO2 ;spritesheet .File/name DEO2 #0100 .File/length DEO2 #0000 .File/offset DEO2 ;uxnlogo .File/load DEO2 #0200 .File/offset DEO2 ;xrxslogo .File/load DEO2 #00 .ticker STZ #00 .state STZ CENTER-X .logo-coords/x STZ2 CENTER-Y .logo-coords/y STZ2 ;on-frame .Screen/vector DEO2 BRK @on-frame ( -> ) ( draw a piece of the logos ~ every half second ) .ticker LDZ #01 ADD DUP #20 EQU ,&next-render JCN .ticker STZ BRK &next-render .state LDZ #00 .ticker STZ DUP #00 NEQ ,&state1 JCN ;draw-uxn-logo JSR2 #01 ADD .state STZ BRK &state1 DUP #01 NEQ ,&state2 JCN ;draw-xrxs-logo-xr JSR2 #01 ADD .state STZ BRK &state2 DUP #02 NEQ ,&state3 JCN ;draw-xrxs-logo-xs JSR2 #01 ADD .state STZ BRK &state3 BRK @draw-uxn-logo ( -> ) .logo-coords/x LDZ2 #0020 SUB2 .Screen/x DEO2 .logo-coords/y LDZ2 #0010 SUB2 .Screen/y DEO2 #0100 #0000 &while EQU2k ,&end JCN DUP2 ;uxnlogo ADD2 .Screen/addr DEO2 #81 .Screen/sprite DEO INC-X NEXT-TILE #0030 AND2 #0000 NEQ2 ,&no-inc-y JCN .logo-coords/x LDZ2 #0020 SUB2 .Screen/x DEO2 INC-Y &no-inc-y #0010 ADD2 ,&while JMP &end POP2 POP2 RTN @draw-xrxs-logo-xr ( -> ) .logo-coords/x LDZ2 .Screen/x DEO2 .logo-coords/y LDZ2 #0010 SUB2 .Screen/y DEO2 #0080 #0000 &while EQU2k ,&end JCN DUP2 ;xrxslogo ADD2 .Screen/addr DEO2 #81 .Screen/sprite DEO INC-X NEXT-TILE #0030 AND2 #0000 NEQ2 ,&no-inc-y JCN .logo-coords/x LDZ2 .Screen/x DEO2 INC-Y &no-inc-y #0010 ADD2 ,&while JMP &end POP2 POP2 RTN @draw-xrxs-logo-xs ( -> ) .logo-coords/x LDZ2 .Screen/x DEO2 .logo-coords/y LDZ2 .Screen/y DEO2 #0100 #0080 &while EQU2k ,&end JCN DUP2 ;xrxslogo ADD2 .Screen/addr DEO2 #81 .Screen/sprite DEO INC-X NEXT-TILE #0030 AND2 #0000 NEQ2 ,&no-inc-y JCN .logo-coords/x LDZ2 .Screen/x DEO2 INC-Y &no-inc-y #0010 ADD2 ,&while JMP &end POP2 POP2 RTN ( constants ) @spritesheet "xrxs.chr 00 ( sprites ) @uxnlogo $128 @xrxslogo $128 |