uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit ec3c5a691b3660cfd18e9fb6ec62dc708e1d5000
parent 3d5e7f7e4875a5fd8b7fd0dea7c6a0c1a9d80598
Author: neauoire <aliceffekt@gmail.com>
Date:   Wed, 28 Apr 2021 21:00:39 -0700

Cleaned a few examples

Diffstat:
MREADME.md | 2+-
Mprojects/demos/bifurcan.usm | 14++++++++------
Mprojects/demos/theme.usm | 169++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mprojects/examples/devices/audio.usm | 77+++++++++++++++++++++++++++++++++--------------------------------------------
Mprojects/examples/devices/console.usm | 2+-
Mprojects/examples/devices/controller.keys.usm | 6+++++-
Mprojects/examples/devices/datetime.usm | 8+++++---
Mprojects/examples/devices/file.usm | 4++--
Mprojects/examples/devices/mouse.usm | 32++++++++++++++++++--------------
Mprojects/examples/devices/screen.usm | 88+++++++++++++------------------------------------------------------------------
Mprojects/examples/gui/animation.usm | 3+++
Mprojects/examples/gui/hover.usm | 2+-
12 files changed, 180 insertions(+), 227 deletions(-)

diff --git a/README.md b/README.md @@ -38,7 +38,7 @@ Read more in the [Uxambly Guide](https://wiki.xxiivv.com/site/uxambly.html). BRK -@print ( addr -- ) +@print ( addr* -- ) &loop ( send ) DUP2 GET .Console/char DEO diff --git a/projects/demos/bifurcan.usm b/projects/demos/bifurcan.usm @@ -14,7 +14,7 @@ |00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] |20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] -|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] +|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] |b0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ] ( variables ) @@ -54,6 +54,7 @@ BRK ( only draw once per second ) .DateTime/second DEI .last PEK NEQ #01 JNZ [ BRK ] + .DateTime/second DEI .last POK ;redraw JSR2 @@ -144,7 +145,7 @@ RTN @draw-cursor ( -- ) ( clear last cursor ) - ;clear .Screen/addr DEO2 + #fff8 .Screen/addr DEO2 .pointer/x PEK2 .Screen/x DEO2 .pointer/y PEK2 .Screen/y DEO2 #30 .Screen/color DEO @@ -160,13 +161,14 @@ RTN RTN -@clear [ - 0000 0000 0000 0000 ] @cursor [ 80c0 e0f0 f8e0 1000 ] + @digits [ - 7b6f 2492 73e7 73cf 5bc9 - 79cf 49ef 7249 7bef 7bc9 ] + 7b6f 2492 73e7 73cf + 5bc9 79cf 49ef 7249 + 7bef 7bc9 ] + @tiles [ 0102 0408 1020 4080 8040 2010 0804 0201 diff --git a/projects/demos/theme.usm b/projects/demos/theme.usm @@ -5,27 +5,26 @@ %2/ { #0001 SFT2 } %8+ { #0008 ADD2 } %STEP8 { #0033 SFT2 } -%S2B { SWP POP } ( devices ) -|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] -|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] -|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] +|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] +|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] +|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] ( variables ) |0000 -@center [ &x $2 &y $2 ] -@color [ &byte $1 ] -@pointer [ &x $2 &y $2 &sprite $2 ] -@rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@window [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &w $2 &h $2 ] -@label [ &x $2 &y $2 &addr $2 ] -@slider [ &x1 $2 &y $2 &x2 $2 &pos $2 ] -@selection [ &byte $1 ] -@addr [ &byte $1 ] +@color $1 +@selection $1 + +@center [ &x $2 &y $2 ] +@pointer [ &x $2 &y $2 ] +@rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] +@window [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &w $2 &h $2 ] +@slider [ &x1 $2 &y $2 &x2 $2 &pos $2 ] + @theme [ &r1 $1 &r2 $1 &r3 $1 &r4 $1 &g1 $1 &g2 $1 &g3 $1 &g4 $1 @@ -34,18 +33,23 @@ ( program ) -|0100 +|0100 ( -> ) + + ( theme ) + #027f .System/r DEO2 + #04e7 .System/g DEO2 + #06c4 .System/b DEO2 - ( theme ) #127f .System/r DEO2 #34e7 .System/g DEO2 #56c4 .System/b DEO2 - ( vectors ) ;on-mouse .Mouse/vector DEO2 + ( vectors ) + ;on-mouse .Mouse/vector DEO2 + ( size window ) #00b0 .window/w POK2 #0050 .window/h POK2 ( center window ) - - .Screen/width DEI2 #0002 DIV2 .window/w PEK2 #0002 DIV2 SUB2 .window/x1 POK2 - .Screen/height DEI2 #0002 DIV2 .window/h PEK2 #0002 DIV2 SUB2 .window/y1 POK2 + .Screen/width DEI2 2/ .window/w PEK2 2/ SUB2 .window/x1 POK2 + .Screen/height DEI2 2/ .window/h PEK2 2/ SUB2 .window/y1 POK2 #01 .theme/r1 POK #02 .theme/g1 POK #03 .theme/b1 POK #04 .theme/r2 POK #06 .theme/g2 POK #07 .theme/b2 POK @@ -53,8 +57,8 @@ #0c .theme/r4 POK #0b .theme/g4 POK #0d .theme/b4 POK ( find screen center ) - .Screen/width DEI2 #0002 DIV2 .center/x POK2 - .Screen/height DEI2 #0002 DIV2 .center/y POK2 + .Screen/width DEI2 2/ .center/x POK2 + .Screen/height DEI2 2/ .center/y POK2 ;update-theme JSR2 ;draw-background JSR2 @@ -62,35 +66,33 @@ BRK -@on-mouse +@on-mouse ( -> ) ;draw-cursor JSR2 - .Mouse/state DEI #00 NEQ ;&no-skip JNZ2 BRK &no-skip + .Mouse/state DEI #00 NEQ #01 JNZ [ BRK ] .Mouse/y DEI2 .window/y1 PEK2 SUB2 STEP8 - DUP2 #0010 NEQ2 ,&no-touch-red JNZ .Mouse/x DEI2 .window/x1 PEK2 #0060 ADD2 LTH2 ,&no-touch-red JNZ .Mouse/x DEI2 .window/x1 PEK2 #009c ADD2 GTH2 ,&no-touch-red JNZ - ( get new value ) .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0060 SUB2 #0004 DIV2 S2B ;theme/r1 #00 .selection PEK ADD2 PUT + ( get new value ) .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0060 SUB2 #0004 DIV2 SWP POP ;theme/r1 #00 .selection PEK ADD2 PUT &no-touch-red DUP2 #0020 NEQ2 ,&no-touch-green JNZ .Mouse/x DEI2 .window/x1 PEK2 #0060 ADD2 LTH2 ,&no-touch-green JNZ .Mouse/x DEI2 .window/x1 PEK2 #009c ADD2 GTH2 ,&no-touch-green JNZ - ( get new value ) .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0060 SUB2 #0004 DIV2 S2B ;theme/g1 #00 .selection PEK ADD2 PUT + ( get new value ) .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0060 SUB2 #0004 DIV2 SWP POP ;theme/g1 #00 .selection PEK ADD2 PUT &no-touch-green DUP2 #0030 NEQ2 ,&no-touch-blue JNZ .Mouse/x DEI2 .window/x1 PEK2 #0060 ADD2 LTH2 ,&no-touch-blue JNZ .Mouse/x DEI2 .window/x1 PEK2 #009c ADD2 GTH2 ,&no-touch-blue JNZ - ( get new value ) .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0060 SUB2 #0004 DIV2 S2B ;theme/b1 #00 .selection PEK ADD2 PUT + ( get new value ) .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0060 SUB2 #0004 DIV2 SWP POP ;theme/b1 #00 .selection PEK ADD2 PUT &no-touch-blue DUP2 #0040 NEQ2 ,&no-touch-radio JNZ .Mouse/x DEI2 .window/x1 PEK2 #0050 ADD2 LTH2 ,&no-touch-radio JNZ .Mouse/x DEI2 .window/x1 PEK2 #008c ADD2 GTH2 ,&no-touch-radio JNZ - .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0050 SUB2 STEP8 2/ #0008 DIV2 S2B .selection POK + .Mouse/x DEI2 .window/x1 PEK2 SUB2 #0050 SUB2 STEP8 2/ #0008 DIV2 SWP POP .selection POK &no-touch-radio - POP2 ;update-theme JSR2 @@ -98,7 +100,7 @@ BRK BRK -@update-theme +@update-theme ( -- ) #08 DEI #0f AND .theme/r1 PEK #40 SFT ADD #08 DEO #0a DEI #0f AND .theme/g1 PEK #40 SFT ADD #0a DEO @@ -115,7 +117,7 @@ BRK RTN -@draw-background +@draw-background ( -- ) ( draw hor line ) #0000 .Screen/x DEO2 .center/y PEK2 .Screen/y DEO2 @@ -140,7 +142,7 @@ RTN #0010 .Screen/y DEO2 #00 #08 &draw-pixel1 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + ( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2 ( draw ) OVR .Screen/color DEO ( incr ) SWP #01 ADD SWP DUP2 LTH ,&draw-pixel1 JNZ @@ -148,7 +150,7 @@ RTN #0018 .Screen/y DEO2 #00 #08 &draw-pixel2 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + ( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2 ( draw ) OVR #08 ADD .Screen/color DEO ( incr ) SWP #01 ADD SWP DUP2 LTH ,&draw-pixel2 JNZ @@ -156,7 +158,7 @@ RTN #0020 .Screen/y DEO2 #00 #08 &draw-icn1 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + ( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2 ( draw ) OVR #20 ADD .Screen/color DEO ( incr ) SWP #01 ADD SWP DUP2 LTH ,&draw-icn1 JNZ @@ -164,7 +166,7 @@ RTN #0028 .Screen/y DEO2 #00 #08 &draw-icn2 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + ( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2 ( draw ) OVR #28 ADD .Screen/color DEO ( incr ) SWP #01 ADD SWP DUP2 LTH ,&draw-icn2 JNZ @@ -172,7 +174,7 @@ RTN #0030 .Screen/y DEO2 #00 #08 &draw-chr1 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + ( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2 ( draw ) OVR #40 ADD .Screen/color DEO ( incr ) SWP #01 ADD SWP DUP2 LTH ,&draw-chr1 JNZ @@ -180,7 +182,7 @@ RTN #0038 .Screen/y DEO2 #00 #08 &draw-chr2 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + ( move ) OVR #08 MUL #00 SWP #0010 ADD2 .Screen/x DEO2 ( draw ) OVR #48 ADD .Screen/color DEO ( incr ) SWP #01 ADD SWP DUP2 LTH ,&draw-chr2 JNZ @@ -188,7 +190,7 @@ RTN RTN -@draw-window +@draw-window ( -- ) .window/x1 PEK2 .window/w PEK2 ADD2 .window/x2 POK2 .window/y1 PEK2 .window/h PEK2 ADD2 .window/y2 POK2 @@ -196,17 +198,17 @@ RTN .window/x1 PEK2 .window/y1 PEK2 .window/x2 PEK2 .window/y2 PEK2 #01 ;line-rect JSR2 .window/x1 PEK2 #0002 SUB2 .window/y1 PEK2 #0002 SUB2 .window/x2 PEK2 #0002 ADD2 .window/y2 PEK2 #0002 ADD2 #01 ;line-rect JSR2 - .window/x1 PEK2 #0008 ADD2 .window/y1 PEK2 #0010 ADD2 #25 ;red_txt ;draw-label JSR2 - .window/x1 PEK2 #0038 ADD2 .window/y1 PEK2 #0010 ADD2 #28 .System/r ;draw-byte JSR2 - .window/x1 PEK2 #0048 ADD2 .window/y1 PEK2 #0010 ADD2 #28 .System/r #01 ADD ;draw-byte JSR2 + .window/x1 PEK2 #0008 ADD2 .window/y1 PEK2 #0010 ADD2 ;red_txt #25 ;draw-label JSR2 + .window/x1 PEK2 #0038 ADD2 .Screen/x DEO2 + .System/r DEI2 #28 ;draw-short JSR2 - .window/x1 PEK2 #0008 ADD2 .window/y1 PEK2 #0020 ADD2 #25 ;green_txt ;draw-label JSR2 - .window/x1 PEK2 #0038 ADD2 .window/y1 PEK2 #0020 ADD2 #28 .System/g ;draw-byte JSR2 - .window/x1 PEK2 #0048 ADD2 .window/y1 PEK2 #0020 ADD2 #28 .System/g #01 ADD ;draw-byte JSR2 + .window/x1 PEK2 #0008 ADD2 .window/y1 PEK2 #0020 ADD2 ;green_txt #25 ;draw-label JSR2 + .window/x1 PEK2 #0038 ADD2 .Screen/x DEO2 + .System/g DEI2 #28 ;draw-short JSR2 - .window/x1 PEK2 #0008 ADD2 .window/y1 PEK2 #0030 ADD2 #25 ;blue_txt ;draw-label JSR2 - .window/x1 PEK2 #0038 ADD2 .window/y1 PEK2 #0030 ADD2 #28 .System/b ;draw-byte JSR2 - .window/x1 PEK2 #0048 ADD2 .window/y1 PEK2 #0030 ADD2 #28 .System/b #01 ADD ;draw-byte JSR2 + .window/x1 PEK2 #0008 ADD2 .window/y1 PEK2 #0030 ADD2 ;blue_txt #25 ;draw-label JSR2 + .window/x1 PEK2 #0038 ADD2 .Screen/x DEO2 + .System/b DEI2 #28 ;draw-short JSR2 .window/x1 PEK2 #0060 ADD2 .window/y1 PEK2 #0010 ADD2 .window/x1 PEK2 #0090 ADD2 #00 ;theme/r1 .selection PEK ADD GET #0004 MUL2 #01 ;draw-slider JSR2 .window/x1 PEK2 #0060 ADD2 .window/y1 PEK2 #0020 ADD2 .window/x1 PEK2 #0090 ADD2 #00 ;theme/g1 .selection PEK ADD GET #0004 MUL2 #01 ;draw-slider JSR2 @@ -235,15 +237,16 @@ RTN RTN @draw-cursor ( -- ) - + ( clear last cursor ) - ;clear_icn .Screen/addr DEO2 + #fff8 .Screen/addr DEO2 .pointer/x PEK2 .Screen/x DEO2 .pointer/y PEK2 .Screen/y DEO2 #30 .Screen/color DEO ( record pointer positions ) - .Mouse/x DEI2 .pointer/x POK2 .Mouse/y DEI2 .pointer/y POK2 + .Mouse/x DEI2 .pointer/x POK2 + .Mouse/y DEI2 .pointer/y POK2 ( draw new cursor ) ;pointer_icn .Screen/addr DEO2 @@ -253,7 +256,7 @@ RTN RTN -@draw-slider ( x1 y x2 pos color -- ) +@draw-slider ( x1* y* x2* pos* color -- ) ( load ) .color POK .slider/pos POK2 .slider/x2 POK2 .slider/y POK2 .slider/x1 POK2 @@ -280,7 +283,7 @@ RTN RTN -@fill-rect ( x1 y1 x2 y2 color ) +@fill-rect ( x1* y1* x2* y2* color -- ) .color POK ( x1 x2 y1 y2 ) ROT2 SWP2 @@ -299,7 +302,7 @@ RTN RTN -@line-rect ( x1 y1 x2 y2 color -- ) +@line-rect ( x1* y1* x2* y2* color -- ) ( load ) .color POK .rect/y2 POK2 .rect/x2 POK2 DUP2 .Screen/y DEO2 .rect/y1 POK2 DUP2 .Screen/x DEO2 .rect/x1 POK2 &hor @@ -316,49 +319,58 @@ RTN RTN -@draw-label ( x y color addr -- ) +@draw-label ( x* y* addr* color -- ) - ( load ) .label/addr POK2 .color POK .Screen/y DEO2 .Screen/x DEO2 .label/addr PEK2 + STH STH2 + .Screen/y DEO2 + .Screen/x DEO2 + STH2r &loop - ( draw ) DUP2 GET #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 .color PEK .Screen/color DEO + DUP2 GET #00 SWP #0008 MUL2 + ;font ADD2 .Screen/addr DEO2 + ( draw ) DUPr STHr .Screen/color DEO ( incr ) ++ ( incr ) .Screen/x DEI2 8+ .Screen/x DEO2 DUP2 GET #00 NEQ ,&loop JNZ - POP2 + POP2 POPr RTN -@draw-byte ( x y color addr -- ) +@draw-short ( short* color -- ) - .addr POK STH - .Screen/y DEO2 - .Screen/x DEO2 - ;font_hex #00 .addr PEK DEI #04 SFT #0008 MUL2 ADD2 .Screen/addr DEO2 - STHr DUP STH .Screen/color DEO - ;font_hex #00 .addr PEK DEI #0f AND #0008 MUL2 ADD2 .Screen/addr DEO2 + STH SWP + DUP #04 SFT #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 + ( draw ) DUPr STHr .Screen/color DEO + #0f AND #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 .Screen/x DEI2 8+ .Screen/x DEO2 - STHr .Screen/color DEO + ( draw ) DUPr STHr .Screen/color DEO + DUP #04 SFT #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 + .Screen/x DEI2 8+ .Screen/x DEO2 + ( draw ) DUPr STHr .Screen/color DEO + #0f AND #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 + .Screen/x DEI2 8+ .Screen/x DEO2 + ( draw ) STHr .Screen/color DEO RTN -@clear_icn [ 0000 0000 0000 0000 ] +@red_txt [ "Red 00 ] +@green_txt [ "Green 00 ] +@blue_txt [ "Blue 00 ] + @pointer_icn [ 80c0 e0f0 f8e0 1000 ] @halftone_icn [ aa55 aa55 aa55 aa55 ] @slidera_icn [ 3f7f ffff ffff 7f3f ] @sliderb_icn [ ffff ffff ffff ffff ] @sliderc_icn [ fcfe ffff ffff fefc ] @sliderd_icn [ 003c 7e7e 7e7e 3c00 ] -@preview_icn [ 183c 66db db66 3c18 0000 183c 3c18 0000 ] + +@preview_icn [ + 183c 66db db66 3c18 + 0000 183c 3c18 0000 ] @radio_icns [ 3c42 8181 8181 423c ] [ 3c42 99bd bd99 423c ] - -@red_txt [ "Red 00 ] -@green_txt [ "Green 00 ] -@blue_txt [ "Blue 00 ] - -@font_hex ( 0-F TODO: should pull from @font instead.. ) -[ +@font-hex [ 003c 464a 5262 3c00 0018 0808 0808 1c00 003c 4202 3c40 7e00 003c 421c 0242 3c00 000c 1424 447e 0400 007e 407c 0242 3c00 @@ -366,11 +378,9 @@ RTN 003c 423c 4242 3c00 003c 4242 3e02 3c00 003c 4242 7e42 4200 007c 427c 4242 7c00 003c 4240 4042 3c00 007c 4242 4242 7c00 - 007e 4078 4040 7e00 007e 4078 4040 4000 -] + 007e 4078 4040 7e00 007e 4078 4040 4000 ] -@font ( spectrum-zx font ) -[ +@font ( spectrum-zx font ) [ 0000 0000 0000 0000 0000 2400 7e3c 0000 0000 2400 3c42 0000 0000 6c7c 7c38 1000 0010 387c 7c38 1000 0038 387c 6c10 3800 0010 387c 7c10 3800 0000 0018 1800 0000 007e 4242 4242 7e00 0000 1824 2418 0000 0018 2442 4224 1800 001e 063a 4a48 3000 @@ -402,5 +412,4 @@ RTN 0000 7844 4478 4040 0000 3c44 443c 0406 0000 2c30 2020 2000 0000 3840 3804 7800 0010 103c 1010 0c00 0000 4444 4444 3800 0000 4444 2828 1000 0000 4454 5454 2800 0000 4428 1028 4400 0000 4444 443c 0438 0000 7c08 1020 7c00 000c 0810 1008 0c00 - 0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c -] + 0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c ] diff --git a/projects/examples/devices/audio.usm b/projects/examples/devices/audio.usm @@ -7,35 +7,38 @@ ( devices ) -|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] -|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] -|30 @Audio [ &pad $8 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ] +|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] +|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] +|30 @Audio0 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ] |0100 ( -> ) - ( set color pallete ) + ( theme ) #00ff .System/r DEO2 #0f0f .System/g DEO2 #0ff0 .System/b DEO2 - ;on-frame .Screen/vector DEO2 ( run on-frame every 1/60th of a second ) - #ff .Audio/volume DEO ( set volume to max ) - ;saw .Audio/addr DEO2 ( set waveform to saw for audio engine ) - ;saw/end ;saw SUB2 .Audio/len DEO2 - #1202 .Audio/adsr DEO2 ( set envelope for audio engine ) + ( vectors ) + ;on-frame .Screen/vector DEO2 + + ( setup synth ) + #1202 .Audio0/adsr DEO2 + ;saw .Audio0/addr DEO2 + #0100 .Audio0/length DEO2 + #ff .Audio0/volume DEO BRK @on-frame ( -> ) ( incr ) .timer PEK #01 ADD .timer POK - ( skip ) .timer PEK #10 EQU ,&play-note JNZ BRK &play-note + ( skip ) .timer PEK #10 EQU #01 JNZ [ BRK ] ( get note ) ;melody #00 .progress PEK ADD2 GET ( play note ) - DUP .Audio/pitch DEO + DUP .Audio0/pitch DEO ( erase last note ) #20 .Screen/color DEO @@ -52,42 +55,28 @@ BRK BRK -@silence ( -> ) - -BRK - -( defines a sawtooth wave. ) - -@saw ( -> ) - 5f5f 5e5e 5e5d 5d5d 5c5c 5b5b 5b5a 5a5a - 5959 5858 5857 5757 5656 5555 5554 5454 - 5353 5252 5251 5151 5050 4f4f 4f4e 4e4e - 4d4d 4c4c 4c4b 4b4b 4a4a 4949 4948 4848 - 4747 4646 4645 4545 4444 4343 4342 4242 - 4141 4040 403f 3f3f 3e3e 3d3d 3d3c 3c3c - 3b3b 3a3a 3a39 3939 3838 3737 3736 3636 - 3535 3434 3433 3333 3232 3131 3130 3030 - 2f2f 2e2e 2e2d 2d2d 2c2c 2b2b 2b2a 2a2a - 2929 2828 2827 2727 2626 2525 2524 2424 - 2323 2222 2221 2121 2020 1f1f 1f1e 1e1e - 1d1d 1c1c 1c1b 1b1b 1a1a 1919 1918 1818 - 1717 1616 1615 1515 1414 1313 1312 1212 - 1111 1010 100f 0f0f 0e0e 0d0d 0d0c 0c0c - 0b0b 0a0a 0a09 0909 0808 0707 0706 0606 - 0505 0404 0403 0303 0202 0101 0100 0000 - &end - -BRK +@dot [ 003c 7eff 7e3c 0000 ] -( song data, #ff is used for a rest ) +@saw [ + 0003 0609 0c0f 1215 181b 1e21 2427 2a2d + 3033 3639 3b3e 4143 4649 4b4e 5052 5557 + 595b 5e60 6264 6667 696b 6c6e 7071 7274 + 7576 7778 797a 7b7b 7c7d 7d7e 7e7e 7e7e + 7f7e 7e7e 7e7e 7d7d 7c7b 7b7a 7978 7776 + 7574 7271 706e 6c6b 6967 6664 6260 5e5b + 5957 5552 504e 4b49 4643 413e 3b39 3633 + 302d 2a27 2421 1e1b 1815 120f 0c09 0603 + 00fd faf7 f4f1 eeeb e8e5 e2df dcd9 d6d3 + d0cd cac7 c5c2 bfbd bab7 b5b2 b0ae aba9 + a7a5 a2a0 9e9c 9a99 9795 9492 908f 8e8c + 8b8a 8988 8786 8585 8483 8382 8282 8282 + 8182 8282 8282 8383 8485 8586 8788 898a + 8b8c 8e8f 9092 9495 9799 9a9c 9ea0 a2a5 + a7a9 abae b0b2 b5b7 babd bfc2 c5c7 cacd + d0d3 d6d9 dcdf e2e5 e8eb eef1 f4f7 fafd ] @melody [ 54 52 54 4f 4b 4f 48 ff 54 52 54 4f 4b 4f 48 ff 54 56 57 56 57 54 56 54 - 56 52 54 52 54 50 54 ff -] - -( dot sprite ) - -@dot [ 003c 7eff 7e3c 0000 ] + 56 52 54 52 54 50 54 ff ] diff --git a/projects/examples/devices/console.usm b/projects/examples/devices/console.usm @@ -14,7 +14,7 @@ BRK -@print ( addr -- ) +@print ( addr* -- ) &loop ( send ) DUP2 GET .Console/char DEO diff --git a/projects/examples/devices/controller.keys.usm b/projects/examples/devices/controller.keys.usm @@ -18,6 +18,7 @@ #0f73 .System/r DEO2 #0fe3 .System/g DEO2 #0fc3 .System/b DEO2 + ( vectors ) ;on-button .Controller/vector DEO2 ;draw-cursor JSR2 @@ -26,7 +27,8 @@ BRK @on-button ( -> ) - .Controller/key DEI #00 NEQ ,&skip JNZ BRK &skip + ( skip ) .Controller/key DEI #00 NEQ #01 JNZ [ BRK ] + .Controller/key DEI #0d NEQ ,&no-return JNZ ( draw ) #20 .Screen/color DEO ( reset ) #0000 .Screen/x DEO2 @@ -34,9 +36,11 @@ BRK ;draw-cursor JSR2 BRK &no-return + ;font #00 .Controller/key DEI 8* ADD2 .Screen/addr DEO2 ( draw ) #21 .Screen/color DEO ( incr ) .Screen/x DEI2 8+ .Screen/x DEO2 + ;draw-cursor JSR2 BRK diff --git a/projects/examples/devices/datetime.usm b/projects/examples/devices/datetime.usm @@ -24,21 +24,23 @@ ( program ) -|0100 +|0100 ( -> ) ( theme ) #0ff8 .System/r DEO2 #0f08 .System/g DEO2 #0f08 .System/b DEO2 + ( vectors ) ;on-frame .Screen/vector DEO2 BRK -@on-frame +@on-frame ( -> ) ( only draw once per second ) - .DateTime/second DEI .current PEK NEQ #01 JNZ [ BRK ] + ( skip ) .DateTime/second DEI .current PEK NEQ #01 JNZ [ BRK ] + .DateTime/second DEI .current POK ( clear ) diff --git a/projects/examples/devices/file.usm b/projects/examples/devices/file.usm @@ -62,8 +62,8 @@ BRK BRK -@successtxt "Success! $1 -@failedtxt "Failed. $1 +@successtxt "Success! 09 $1 +@failedtxt "Failed. 09 $1 @srcpath "projects/pictures/ako10x10.chr $1 @dstpath "bin/image-copy.chr $1 diff --git a/projects/examples/devices/mouse.usm b/projects/examples/devices/mouse.usm @@ -11,18 +11,19 @@ |0000 +@color $1 @line [ &x0 $2 &y0 $2 &x $2 &y $2 &sx $2 &sy $2 &dx $2 &dy $2 &e1 $2 &e2 $2 ] @pointer [ &x $2 &y $2 &lastx $2 &lasty $2 &state $1 ] -@color $1 ( program ) |0100 ( -> ) ( theme ) - #f0f0 .System/r DEO2 - #f00f .System/g DEO2 - #f000 .System/b DEO2 + #f030 .System/r DEO2 + #f04f .System/g DEO2 + #f050 .System/b DEO2 + ( vectors ) ;on-mouse .Mouse/vector DEO2 @@ -31,8 +32,10 @@ BRK @on-mouse ( -> ) ;draw-cursor JSR2 + ( on down ) .Mouse/state DEI #00 NEQ .pointer/state PEK #00 EQU #0101 EQU2 ,on-mouse-down JNZ + ( on drag ) .Mouse/state DEI #00 NEQ ,on-mouse-drag JNZ .Mouse/state DEI .pointer/state POK @@ -57,6 +60,7 @@ BRK .pointer/y PEK2 #01 [ .Mouse/state DEI #10 EQU #02 MUL ADD ] ;draw-line JSR2 + ( record last position ) .Mouse/x DEI2 .pointer/lastx POK2 .Mouse/y DEI2 .pointer/lasty POK2 @@ -67,19 +71,20 @@ BRK @draw-cursor ( -- ) ( clear last cursor ) - ;clear .Screen/addr DEO2 - .pointer/x PEK2 .Screen/x DEO2 - .pointer/y PEK2 .Screen/y DEO2 + #fff8 .Screen/addr DEO2 + .pointer/x PEK2 .Screen/x DEO2 + .pointer/y PEK2 .Screen/y DEO2 #30 .Screen/color DEO + ( record pointer positions ) .Mouse/x DEI2 .pointer/x POK2 .Mouse/y DEI2 .pointer/y POK2 + ( draw new cursor ) - ;cursor .Screen/addr DEO2 - .pointer/x PEK2 .Screen/x DEO2 - .pointer/y PEK2 .Screen/y DEO2 - ( colorize on state ) - #31 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/color DEO + ;pointer_icn .Screen/addr DEO2 + .pointer/x PEK2 .Screen/x DEO2 + .pointer/y PEK2 .Screen/y DEO2 + #33 .Mouse/state DEI #00 NEQ #02 MUL SUB .Screen/color DEO RTN @@ -111,5 +116,4 @@ RTN RTN -@clear [ 0000 0000 0000 0000 ] -@cursor [ 80c0 e0f0 f8e0 1000 ] +@pointer_icn [ 80c0 e0f0 f8e0 1000 ] diff --git a/projects/examples/devices/screen.usm b/projects/examples/devices/screen.usm @@ -1,6 +1,7 @@ ( dev/screen ) %RTN { JMP2r } +%MOD { DUP2 DIV MUL SUB } ( devices ) @@ -18,95 +19,34 @@ |0100 ( -> ) ( theme ) - #530f .System/r DEO2 - #f20f .System/g DEO2 - #ad0f .System/b DEO2 + #0c5f .System/r DEO2 + #022f .System/g DEO2 + #0da4 .System/b DEO2 ( find screen center ) .Screen/width DEI2 #0002 DIV2 .center/x POK2 .Screen/height DEI2 #0002 DIV2 .center/y POK2 ( draw ) - ;draw-background JSR2 ;draw-sprites JSR2 BRK -@draw-background ( -- ) - - ( draw hor line ) - #0000 .Screen/x DEO2 .center/y PEK2 .Screen/y DEO2 - #0000 .Screen/width DEI2 ( from/to ) - &draw-hor - ( draw ) #01 .Screen/color DEO - ( incr ) SWP2 #0002 ADD2 DUP2 .Screen/x DEO2 SWP2 - OVR2 OVR2 LTH2 ,&draw-hor JNZ - POP2 POP2 - - ( draw ver line ) - .center/x PEK2 .Screen/x DEO2 #0000 .Screen/y DEO2 - #0000 .Screen/height DEI2 ( from/to ) - &draw-ver - ( draw ) #02 .Screen/color DEO - ( incr ) SWP2 #0002 ADD2 DUP2 .Screen/y DEO2 SWP2 - OVR2 OVR2 LTH2 ,&draw-ver JNZ - POP2 POP2 - -RTN - @draw-sprites ( -- ) - ( draw blending modes ) ;preview_icn .Screen/addr DEO2 - #0010 .Screen/y DEO2 - #00 #08 - &draw-pixel1 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 + + #00 #ff + &loop + ( move ) OVR #0f AND #40 SFT #02 DIV #00 SWP + .center/x PEK2 #0040 SUB2 ADD2 .Screen/x DEO2 + ( move ) OVR #f0 AND #02 DIV #00 SWP + .center/y PEK2 #0018 SUB2 ADD2 .Screen/y DEO2 ( draw ) OVR .Screen/color DEO ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&draw-pixel1 JNZ - POP POP - #0018 .Screen/y DEO2 - #00 #08 - &draw-pixel2 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 - ( draw ) OVR #08 ADD .Screen/color DEO - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&draw-pixel2 JNZ - POP POP - #0020 .Screen/y DEO2 - #00 #08 - &draw-icn1 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 - ( draw ) OVR #20 ADD .Screen/color DEO - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&draw-icn1 JNZ - POP POP - #0028 .Screen/y DEO2 - #00 #08 - &draw-icn2 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 - ( draw ) OVR #28 ADD .Screen/color DEO - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&draw-icn2 JNZ - POP POP - #0030 .Screen/y DEO2 - #00 #08 - &draw-chr1 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 - ( draw ) OVR #40 ADD .Screen/color DEO - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&draw-chr1 JNZ - POP POP - #0038 .Screen/y DEO2 - #00 #08 - &draw-chr2 - ( move ) OVR #00 SWP #0008 MUL2 #0010 ADD2 .Screen/x DEO2 - ( draw ) OVR #48 ADD .Screen/color DEO - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&draw-chr2 JNZ - POP POP - + DUP2 LTH ,&loop JNZ + POP2 + RTN @preview_icn [ 183c 66db db66 3c18 0000 183c 3c18 0000 ] \ No newline at end of file diff --git a/projects/examples/gui/animation.usm b/projects/examples/gui/animation.usm @@ -15,11 +15,14 @@ #4cfd .System/r DEO2 #4cf3 .System/g DEO2 #dcf2 .System/b DEO2 + ( vectors ) ;on-frame .Screen/vector DEO2 + ( starting position ) .Screen/width DEI2 #0002 DIV2 .dvd/x POK2 .Screen/height DEI2 #0002 DIV2 .dvd/y POK2 + #21 ;draw-dvd JSR2 BRK diff --git a/projects/examples/gui/hover.usm b/projects/examples/gui/hover.usm @@ -82,7 +82,7 @@ BRK RTN -@line-rect ( x1 y1 x2 y2 color ) +@line-rect ( x1* y1* x2* y2* color -- ) ( load ) .color POK .rect/y2 POK2 .rect/x2 POK2 DUP2 .Screen/y DEO2 .rect/y1 POK2 DUP2 .Screen/x DEO2 .rect/x1 POK2 &hor