@@ 2,13 2,16 @@
TODO
- Catch ports that overflow out of grid
- - Display character on cursor head
- Scale selection
- Get case from right-side port
- Display short timer
- - Rename file
- Save file
- - Copy/Paste
+ - Copy Selection
+ - Paste Selection
+ - Drag Selection
+ - sharp notes
+ - Draw VU
+ - Change BPM
)
%+ { ADD } %- { SUB } %* { MUL } %/ { DIV }
@@ 19,11 22,12 @@
%8** { #30 SFT2 } %8// { #03 SFT2 }
%TOB { SWP POP } %TOS { #00 SWP }
%INCR { SWP #01 + SWP } %DECR { SWP #01 - SWP }
-%INCR2 { SWP2 #0001 ++ SWP2 }
%DEBUG { .Console/byte DEO #0a .Console/char DEO }
%DEBUG2 { .Console/short DEO2 #0a .Console/char DEO }
+%RELEASE-MOUSE { #00 .Mouse/state DEO }
+
%RTN { JMP2r }
%MOD { DUP2 / * - }
%MOD8 { #07 AND }
@@ 33,10 37,8 @@
%TOGGLE { DUP LDZ #00 = SWP STZ }
%GET-ITERATORS { SWP2k POP SWP POP }
-%LOCKED-TYPE { #01 }
-%PORTEL-TYPE { #02 }
-%OPERATOR-TYPE { #03 }
-%PORTER-TYPE { #04 }
+%LOCKED-TYPE { #01 } %PORTEL-TYPE { #02 }
+%OPERATOR-TYPE { #03 } %PORTER-TYPE { #04 }
%OUTPUT-TYPE { #05 }
%DATA-CELLS { #b000 }
@@ 45,38 47,27 @@
%DATA-FILE { #e000 } ( file transfer )
%DATA-CLIP { #f000 } ( copy/paste )
-%CHAR-NULL { #00 }
-%CHAR-LINE { #0a }
-%CHAR-HASH { #23 }
-%CHAR-BANG { #2a }
-%CHAR-DOT { #2e }
-%CHAR-EQUAL { #3d }
+%CHAR-NULL { #00 } %CHAR-LINE { #0a }
+%CHAR-HASH { #23 } %CHAR-BANG { #2a }
+%CHAR-DOT { #2e } %CHAR-EQUAL { #3d }
%IS-CHAR-KEY { STHk #20 > STHr #7b < #0101 == }
%GET-INDEX { #00 SWP #00 .grid/width LDZ ** ROT #00 SWP ++ } ( x y -- index )
%GET-CHAR { #24 MOD #00 SWP ;b36clc ++ LDA } ( b36 -- char )
%GET-VALUE { #20 - #00 SWP ;values ++ LDA } ( char -- b36 )
-
+%GET-NOTE { GET-VALUE TOS ;uc-notes ++ LDA } ( char -- midi )
%GET-CELL { GET-INDEX DATA-CELLS ++ LDA } ( x y -- char )
%SET-CELL { ROT ROT GET-INDEX DATA-CELLS ++ STA } ( x y char -- )
-
%GET-TYPE { GET-INDEX DATA-TYPES ++ LDA } ( x y -- type )
%SET-TYPE { ROT ROT GET-INDEX DATA-TYPES ++ STA } ( x y type -- )
-
%GET-LOCK { GET-INDEX DATA-LOCKS ++ LDA } ( x y -- type )
%SET-LOCK { ROT ROT GET-INDEX DATA-LOCKS ++ STA } ( x y type -- )
-
%GET-PORT-LEFT { DUP2 PORTEL-TYPE SET-TYPE GET-CELL GET-VALUE } ( x y -- char )
%GET-PORT-RIGHT { DUP2 PORTER-TYPE SET-TYPE DUP2 #01 SET-LOCK GET-CELL GET-VALUE } ( x y -- char )
%GET-PORT-RIGHT-RAW { DUP2 PORTER-TYPE SET-TYPE DUP2 #01 SET-LOCK GET-CELL } ( x y -- char )
-
%SET-PORT-OUTPUT { STH DUP2 OUTPUT-TYPE SET-TYPE DUP2 #01 SET-LOCK STHr SET-CELL } ( x y char -- )
-%GET-NOTE { GET-VALUE TOS ;uc-notes ++ LDA }
-
-%RELEASE-MOUSE { #00 .Mouse/state DEO }
-
( devices )
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
@@ 95,6 86,11 @@
|0000
+@state
+ &timer $1
+ &trap $1
+ &blink $1
+ &changed $1
@timer
&beat $1
&alive $1
@@ 126,18 122,11 @@
#0f95 .System/b DEO2
( synths )
- #dd .Audio0/volume DEO
- #0118 .Audio0/adsr DEO2
- #0100 .Audio0/length DEO2
- #ce .Audio1/volume DEO
- #0334 .Audio1/adsr DEO2
- #0100 .Audio1/length DEO2
- #ec .Audio2/volume DEO
- #0414 .Audio2/adsr DEO2
- #0100 .Audio2/length DEO2
- #ee .Audio3/volume DEO
- #022c .Audio3/adsr DEO2
- #0100 .Audio3/length DEO2
+ #dd .Audio0/volume DEO #0118 .Audio0/adsr DEO2 #0100 .Audio0/length DEO2
+ #ce .Audio1/volume DEO #0334 .Audio1/adsr DEO2 #0100 .Audio1/length DEO2
+ #ec .Audio2/volume DEO #0414 .Audio2/adsr DEO2 #0100 .Audio2/length DEO2
+ #ee .Audio3/volume DEO #022c .Audio3/adsr DEO2 #0100 .Audio3/length DEO2
+
;piano-pcm .Audio0/addr DEO2
;piano-pcm .Audio1/addr DEO2
;tri-pcm .Audio2/addr DEO2
@@ 185,12 174,14 @@
BRK
@on-frame ( -> )
+
+ .state/trap LDZ ;on-frame-trap JCN2
( paused ) .timer/alive LDZ #01 JCN [ BRK ]
.timer/beat LDZ #01 + DUP .timer/beat STZ
- ( skip ) #08 = ,&tick JCN BRK &tick
+ ( skip ) #08 = #01 JCN [ BRK ]
.timer/frame LDZ2 #0001 ++ .timer/frame STZ2
@@ 200,8 191,24 @@ BRK
BRK
+@on-frame-trap ( -> )
+
+ .state/trap LDZ #00 ! #01 JCN [ RTN ]
+
+ ( incr ) .state/timer LDZ #01 + DUP .state/timer STZ
+
+ #08 ! ,&no-toggle JCN
+ .state/blink TOGGLE
+ #23 .state/blink LDZ #09 * + ;draw-filepath JSR2
+ #00 .state/timer STZ
+ &no-toggle
+
+BRK
+
@on-button ( -> )
+ .Controller/key DEI #00 ! .state/trap LDZ #0101 == ;on-button-trap JCN2
+
( ignore release when key/button is blank )
.Controller/button DEI2 #0000 !! #01 JCN [ BRK ]
@@ 242,6 249,31 @@ BRK
BRK
+@on-button-trap ( -> )
+
+ ( enter )
+ .Controller/key DEI #0d ! ,&no-edit-enter JCN
+ #00 .state/trap STZ
+ #23 ;draw-filepath JSR2
+ BRK
+ &no-edit-enter
+ ( backspace )
+ .Controller/key DEI #08 ! ,&no-edit-backspace JCN
+ .path/length LDZ #00 = ,&edit-end JCN
+ .path/length LDZ #01 - .path/length STZ
+ #00 .path/name .path/length LDZ + STZ
+ #23 ;draw-filepath JSR2
+ BRK
+ &no-edit-backspace
+ ( default )
+ .path/length LDZ #1f = ,&edit-end JCN
+ .Controller/key DEI .path/name .path/length LDZ + STZ
+ .path/length LDZ #01 + .path/length STZ
+ &edit-end
+ #00 .path/name .path/length LDZ + STZ
+
+BRK
+
@on-mouse (-> )
( clear last cursor )
@@ 266,6 298,7 @@ BRK
;on-touch-grid JCN2
.Mouse/y DEI2 .grid/y2 LDZ2 #0008 ++ -- 8// TOB #00 =
;on-touch-toolbar JCN2
+ RELEASE-MOUSE
BRK
@@ 287,7 320,11 @@ BRK
( left-side )
.Mouse/x DEI2 .grid/x1 LDZ2 -- 8// TOB
- ( TODO: touch controls )
+ DUP #09 > OVR .grid/width LDZ SWP - #05 > #0101 !! ,&no-rename JCN
+ .state/trap TOGGLE
+ #00 .state/blink STZ
+ #23 ;draw-filepath JSR2
+ &no-rename
POP
( right-side )
@@ 315,8 352,8 @@ BRK
DUP2 #01 + GET-CELL CHAR-BANG = ,&bang JCN
DUP2 #01 - GET-CELL CHAR-BANG = ,&bang JCN
- DUP2 INCR GET-CELL CHAR-BANG = ,&bang JCN
- DUP2 DECR GET-CELL CHAR-BANG = ,&bang JCN
+ DUP2 INCR GET-CELL CHAR-BANG = ,&bang JCN
+ DUP2 DECR GET-CELL CHAR-BANG = ,&bang JCN
POP2 #00 RTN
&bang
POP2 #01
@@ 883,7 920,7 @@ RTN
( incr y ) ,&y LDR #01 + ,&y STR
POP
&continue
- INCR2
+ ( incr ) SWP2 #0001 ++ SWP2
LTH2k ,&loop JCN
&end
POP2 POP2 POP
@@ 903,6 940,27 @@ RTN
RTN
+@redraw ( -- )
+
+ #00 .grid/height LDZ
+ &ver
+ ( pos-y ) OVR #00 SWP 8** [ .grid/y1 LDZ2 ++ ] .Screen/y DEO2
+ #00 .grid/width LDZ
+ &hor
+ ( pos-x ) OVR #00 SWP 8** [ .grid/x1 LDZ2 ++ ] .Screen/x DEO2
+ GET-ITERATORS
+ ( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2
+ ( draw ) ;get-cell-type JSR2 TOS ;cell-styles ++ LDA .Screen/color DEO
+ INCR
+ LTHk ,&hor JCN
+ POP2
+ INCR
+ LTHk ,&ver JCN
+ POP2
+ ,draw-toolbar JSR
+
+RTN
+
@draw-toolbar ( -- )
.grid/y2 LDZ2 #0008 ++ .Screen/y DEO2
@@ 966,31 1024,10 @@ RTN
RTN
-@redraw ( -- )
-
- #00 .grid/height LDZ
- &ver
- ( pos-y ) OVR #00 SWP 8** [ .grid/y1 LDZ2 ++ ] .Screen/y DEO2
- #00 .grid/width LDZ
- &hor
- ( pos-x ) OVR #00 SWP 8** [ .grid/x1 LDZ2 ++ ] .Screen/x DEO2
- GET-ITERATORS
- ( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2
- ( draw ) ;get-cell-type JSR2 TOS ;cell-styles ++ LDA .Screen/color DEO
- INCR
- LTHk ,&hor JCN
- POP2
- INCR
- LTHk ,&ver JCN
- POP2
-
- ;draw-toolbar JSR2
-
-RTN
-
@draw-filepath ( color -- )
STH
+ .grid/y2 LDZ2 #0008 ++ .Screen/y DEO2
#0068 .Screen/x DEO2
;path/name
&loop