commit 6ff202a23c4638f5cc35fa5ca599a21e520e04fa
parent 71e81776571adbb361685228545a59f439fe0cf7
Author: neauoire <aliceffekt@gmail.com>
Date: Sat, 27 Nov 2021 11:38:12 -0800
(boot.rom) Scrolling support
Diffstat:
1 file changed, 44 insertions(+), 3 deletions(-)
diff --git a/projects/software/boot.tal b/projects/software/boot.tal
@@ -99,8 +99,8 @@ BRK
#41 .Mouse/state DEI #01 = + .Screen/sprite DEO
( select choice )
- .Mouse/y DEI2
- 10// NIP #01 - ;select-file JSR2
+ .Mouse/y DEI2 .browser/y LDZ2 --
+ 10// NIP ;select-file JSR2
.Mouse/state DEI #00 = ,&no-click JCN
.browser/sel LDZ ;run-file JSR2
@@ -180,6 +180,8 @@ RTN
POP RTN
&has-changed
+ DUP ;scroll-browser JSR2
+
.browser/x LDZ2 #0018 -- .browser/y LDZ2 [ .browser/sel LDZ TOS 10** ++ ]
#0010 #0010
;hand-icn #00 ;draw-icn JSR2
@@ -201,6 +203,29 @@ RTN
RTN
+( Scroll the browser to accomodate off-screen line items )
+@scroll-browser ( id -- )
+ ( Check whether the selection moved up or down )
+ .browser/last LDZ OVR SWP SUB #80 AND ,&negative JCN
+
+ &positive ( The selection moved down )
+ ( Calculate the id currently at the bottom of the screen )
+ .Screen/height DEI2 .browser/y LDZ2 #0010 ++ -- 10// NIP
+ GTH ,&scroll-up JCN [ RTN ]
+ &scroll-up
+ .browser/y LDZ2k #0010 -- ROT STZ2
+ RTN
+
+ &negative ( The selection moved up )
+ ( Calculate the id currently at the top of the screen )
+ ( TODO make a macro constant for y initial pos )
+ #0010 .browser/y LDZ2 -- 10// NIP
+
+ LTH ,&scroll-down JCN [ RTN ]
+ &scroll-down
+ .browser/y LDZ2k #0010 ++ ROT STZ2 ( Decrement y by 0x10 )
+ RTN
+
@run-file ( id -- )
SEL-ENTRY LDA2
@@ -236,11 +261,13 @@ RTN
.browser/y LDZ2 .Screen/y DEO2
SEL-ENTRY ;dir/entries
&outer ( selected-entry* this-entry* )
+ .Screen/y DEI2 #0010 LTH2 ,&inc JCN ( Don't draw anything in the first row )
EQU2k #0c * #01 + STH
LDA2k ORAk #00 = ,&end JCN
+ ,&clear JSR
STHr ,&draw-one JSR
.browser/x LDZ2 .Screen/x DEO2
- .Screen/y DEI2 #0010 ++ .Screen/y DEO2
+ &inc .Screen/y DEI2 #0010 ++ .Screen/y DEO2
INC2 INC2 ,&outer JMP
&end
POP2 POP2 POP2 POPr
@@ -261,6 +288,20 @@ RTN
POP2 POPr
RTN
+ &clear ( -- )
+ .Screen/x DEI2k ( Stash the current x pos )
+ #ff00
+ &clear-loop
+ #00 .Screen/sprite DEO
+ .Screen/y DEI2k #0008 ++ ROT DEO2
+ #00 .Screen/sprite DEO
+ .Screen/y DEI2k #0008 -- ROT DEO2
+ .Screen/x DEI2k #0008 ++ ROT DEO2
+ INC NEQk ,&clear-loop JCN
+ POP2
+ ROT DEO2
+RTN
+
@draw-time ( -- )
.DateTime/day DEI