mirror of
https://git.sr.ht/~rabbits/uxn
synced 2024-11-15 18:55:06 +00:00
Removed left/orca from the repo
This commit is contained in:
parent
e71817759b
commit
15ffab9d84
3 changed files with 0 additions and 1383 deletions
|
@ -1,718 +0,0 @@
|
|||
(
|
||||
app/left : text editor
|
||||
|
||||
TODO
|
||||
- Rename icon in titlebar
|
||||
- Save/Load
|
||||
- Double-click select word
|
||||
- Right-click find next instance of selection
|
||||
- Draw tab characters
|
||||
- Don't redraw if nothing has changed
|
||||
- Input on selection should erase selection range
|
||||
- Erase on selection should erase selection range
|
||||
- Scrollbar
|
||||
- Don't scroll past oef
|
||||
- Hor scroll
|
||||
- Real scrolling distance
|
||||
FIXME
|
||||
- Imperfect port from previous assembler syntax
|
||||
)
|
||||
|
||||
|
||||
%RTN { JMP2r }
|
||||
%RTN? { #00 EQU #02 JCN STH2r JMP2 }
|
||||
|
||||
%++ { #0001 ADD2 } %-- { #0001 SUB2 }
|
||||
%8/ { #03 SFT2 } %8* { #30 SFT2 }
|
||||
%8- { #0008 SUB2 } %8+ { #0008 ADD2 }
|
||||
|
||||
( devices )
|
||||
|
||||
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
||||
|10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ]
|
||||
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $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 $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ]
|
||||
|
||||
( variables )
|
||||
|
||||
|0000
|
||||
|
||||
@lock [ &byte $1 ]
|
||||
@k [ &byte $1 ]
|
||||
@l [ &byte $1 ]
|
||||
@i [ &short $2 ]
|
||||
@j [ &short $2 ]
|
||||
@addr [ &short $2 ]
|
||||
@selection [ &from $2 &to $2 ]
|
||||
@position [ &x $2 &y $2 ]
|
||||
@scroll [ &x $2 &y $2 ]
|
||||
@pt [ &x $2 &y $2 ]
|
||||
@mouse [ &x $2 &y $2 ]
|
||||
@touch [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &state $1 ]
|
||||
@textarea [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &addr $2 &cursor $1 ]
|
||||
@label [ &x $2 &y $2 &color $1 &addr $2 ] ( remove )
|
||||
|
||||
( program )
|
||||
|
||||
|0100 @RESET
|
||||
|
||||
( theme ) #e0fa .System/r DEO2 #30fa .System/g DEO2 #30fa .System/b DEO2
|
||||
( vectors ) ;on-mouse .Mouse/vector DEO2
|
||||
( vectors ) ;on-button .Controller/vector DEO2
|
||||
|
||||
( load file )
|
||||
;filepath ;load-file JSR2
|
||||
|
||||
( place textarea )
|
||||
#0018 .textarea/x1 STZ2 .Screen/height DEI2 8- .textarea/y2 STZ2
|
||||
|
||||
;select JSR2
|
||||
;redraw JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@on-button ( -> )
|
||||
|
||||
( alt + arrow )
|
||||
.Controller/button DEI #0f AND #02 NEQ ,&no-alt JCN
|
||||
.Controller/button DEI #04 SFT
|
||||
DUP #01 NEQ ,&no-aup JCN
|
||||
( sel word ) ;find-wordstart JSR2 .selection/to STZ2 &no-aup
|
||||
DUP #02 NEQ ,&no-adown JCN
|
||||
( sel word ) ;find-wordend JSR2 .selection/to STZ2 &no-adown
|
||||
DUP #04 NEQ ,&no-aleft JCN
|
||||
( sel decr ) .selection/to LDZ2 -- .selection/to STZ2 &no-aleft
|
||||
DUP #08 NEQ ,&no-aright JCN
|
||||
( sel incr ) .selection/to LDZ2 ++ .selection/to STZ2 &no-aright
|
||||
POP
|
||||
;clamp-selection JSR2
|
||||
;redraw JSR2
|
||||
BRK
|
||||
&no-alt
|
||||
|
||||
( ctrl + arrow )
|
||||
.Controller/button DEI #0f AND #01 NEQ ,&no-ctrl JCN
|
||||
.Controller/button DEI #04 SFT
|
||||
DUP #01 NEQ ,&no-cup JCN
|
||||
( jump scroll ) #0004 ;scroll-up JSR2 &no-cup
|
||||
DUP #02 NEQ ,&no-cdown JCN
|
||||
( jump scroll ) #0004 ;scroll-down JSR2 &no-cdown
|
||||
DUP #04 NEQ ,&no-cleft JCN
|
||||
( jump line ) ;goto-linestart JSR2 &no-cleft
|
||||
DUP #08 NEQ ,&no-cright JCN
|
||||
( jump line ) ;goto-lineend JSR2 &no-cright
|
||||
POP
|
||||
;redraw JSR2
|
||||
BRK
|
||||
&no-ctrl
|
||||
|
||||
( arrow )
|
||||
.Controller/button DEI #f0 AND #00 EQU ;&no-arrow JCN2
|
||||
.Controller/button DEI #f0 AND
|
||||
DUP #10 NEQ ,&no-arrowup JCN
|
||||
( clamp ) .position/y LDZ2 #0000 EQU2 ,&no-arrowup JCN
|
||||
;find-lineoffset JSR2 .position/x STZ2 .position/y LDZ2 -- .position/y STZ2
|
||||
;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowup
|
||||
DUP #20 NEQ ,&no-arrowdown JCN
|
||||
( clamp:TODO )
|
||||
;find-lineoffset JSR2 .position/x STZ2 .position/y LDZ2 ++ .position/y STZ2
|
||||
;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowdown
|
||||
DUP #40 NEQ ,&no-arrowleft JCN
|
||||
( clamp ) .selection/from LDZ2 ;document/body EQU2 ,&no-arrowleft JCN
|
||||
.selection/from LDZ2 -- DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowleft
|
||||
DUP #80 NEQ ,&no-arrowright JCN
|
||||
( clamp:TODO )
|
||||
#aa .Console/byte DEO
|
||||
.selection/from LDZ2 ++ DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowright
|
||||
POP
|
||||
;clamp-selection JSR2
|
||||
;follow-selection JSR2
|
||||
;redraw JSR2
|
||||
&no-arrow
|
||||
|
||||
.Controller/key DEI #08 NEQ ,&no-backspace JCN
|
||||
( erase )
|
||||
.selection/to LDZ2 .selection/from LDZ2 SUB2 #0001 NEQ2 ,&erase-multiple JCN
|
||||
.selection/to LDZ2 .selection/from LDZ2 SUB2 ;shift-left JSR2
|
||||
;&erase-end JMP2
|
||||
&erase-multiple
|
||||
.selection/from LDZ2 ++ .selection/from STZ2
|
||||
.selection/to LDZ2 .selection/from LDZ2 SUB2 ++ ;shift-left JSR2
|
||||
&erase-end
|
||||
.selection/from LDZ2 -- .selection/from STZ2
|
||||
.selection/from LDZ2 ++ .selection/to STZ2
|
||||
;redraw JSR2
|
||||
BRK
|
||||
&no-backspace
|
||||
|
||||
( insert )
|
||||
.selection/to LDZ2 .selection/from LDZ2 SUB2 ;shift-right JSR2
|
||||
.Controller/key DEI .selection/from LDZ2 STA
|
||||
.selection/from LDZ2 ++ .selection/from STZ2
|
||||
.selection/from LDZ2 ++ .selection/to STZ2
|
||||
;redraw JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@on-mouse ( -> )
|
||||
|
||||
.Mouse/state DEI #00 EQU ,&touch-end JCN
|
||||
.Mouse/x DEI2 #0010 LTH2 ;touch-linebar JCN2
|
||||
.Mouse/x DEI2 .Screen/width DEI2 8- LTH2 ;touch-body JCN2
|
||||
;touch-scrollbar JMP2
|
||||
&touch-end
|
||||
|
||||
.Mouse/state DEI .touch/state STZ
|
||||
|
||||
;draw-cursor JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@touch-linebar ( -- )
|
||||
|
||||
#0000 .position/x STZ2
|
||||
.Mouse/y DEI2 8/ .scroll/y LDZ2 ADD2 .position/y STZ2
|
||||
;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2
|
||||
;goto-linestart JSR2
|
||||
;redraw JSR2
|
||||
;draw-cursor JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@touch-body ( -- )
|
||||
|
||||
.Mouse/y DEI2 8/ .scroll/y LDZ2 ADD2 .position/y STZ2
|
||||
.Mouse/x DEI2 .textarea/x1 LDZ2 SUB2 #0007 ADD2 #0007 DIV2 .position/x STZ2
|
||||
( chords )
|
||||
.Mouse/chord DEI #00 EQU ,&no-chords JCN
|
||||
.Mouse/chord DEI
|
||||
DUP #01 NEQ ,&no-chord-cut JCN
|
||||
;cut JSR2 ( release ) #00 DUP .Mouse/state DEO .Mouse/chord DEO &no-chord-cut
|
||||
DUP #10 NEQ ,&no-chord-paste JCN
|
||||
;paste JSR2 ( release ) #00 DUP .Mouse/state DEO .Mouse/chord DEO &no-chord-paste
|
||||
POP
|
||||
;redraw JSR2
|
||||
BRK
|
||||
&no-chords
|
||||
( drag )
|
||||
.Mouse/state DEI .touch/state LDZ NEQ .Controller/button DEI #0f AND #02 NEQ #0101 EQU2 ,&no-drag JCN
|
||||
( on drag )
|
||||
;find-selection JSR2 ++ .selection/to STZ2
|
||||
;clamp-selection JSR2
|
||||
,&end JMP
|
||||
&no-drag
|
||||
( on click )
|
||||
;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2
|
||||
&end
|
||||
.Mouse/state DEI .touch/state STZ
|
||||
;draw-cursor JSR2
|
||||
;redraw JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@touch-scrollbar ( -- )
|
||||
|
||||
.Mouse/y DEI2 #0008 GTH2 ,&no-up JCN
|
||||
( decr ) .scroll/y LDZ2 #00 .scroll/y LDZ2 #0000 NEQ2 SUB2 .scroll/y STZ2
|
||||
,&end JMP
|
||||
&no-up
|
||||
.Mouse/y DEI2 .Screen/height DEI2 8- LTH2 ,&no-down JCN
|
||||
( incr ) .scroll/y LDZ2 ++ .scroll/y STZ2
|
||||
,&end JMP
|
||||
&no-down
|
||||
.Mouse/y DEI2 8- .scroll/y STZ2
|
||||
&end
|
||||
.Mouse/state DEI .touch/state STZ
|
||||
;draw-cursor JSR2
|
||||
;redraw JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@load-file ( path )
|
||||
|
||||
.File/name DEO2 #8000 .File/length DEO2 ;document/body .File/load DEO2
|
||||
( get file length )
|
||||
;document/body ;document/eof STA2
|
||||
&loop
|
||||
( incr ) ;document/eof LDA2 ++ ;document/eof STA2
|
||||
;document/eof LDA2 LDA ,&loop JCN
|
||||
|
||||
RTN
|
||||
|
||||
@scroll-up ( length -- )
|
||||
|
||||
DUP2 .scroll/y LDZ2 LTH2 ,&clamp JCN
|
||||
#0000 .scroll/y STZ2 POP2 RTN
|
||||
&clamp
|
||||
.scroll/y LDZ2 SWP2 SUB2 .scroll/y STZ2
|
||||
|
||||
RTN
|
||||
|
||||
@scroll-down ( length -- )
|
||||
|
||||
( TODO: Clamp )
|
||||
.scroll/y LDZ2 SWP2 ADD2 .scroll/y STZ2
|
||||
|
||||
RTN
|
||||
|
||||
@shift-left ( length -- )
|
||||
|
||||
.i STZ2
|
||||
.selection/from LDZ2 -- .j STZ2 ( start -> end )
|
||||
&loop
|
||||
( move ) .j LDZ2 .i LDZ2 ADD2 LDA .j LDZ2 STA
|
||||
( incr ) .j LDZ2 ++ .j STZ2
|
||||
.j LDZ2 ;document/eof LDA2 LTH2 ,&loop JCN
|
||||
;document/eof LDA2 .i LDZ2 SUB2 ;document/eof STA2
|
||||
|
||||
RTN
|
||||
|
||||
@shift-right ( length -- )
|
||||
|
||||
.i STZ2
|
||||
;document/eof LDA2 .j STZ2 ( end -> start )
|
||||
&loop
|
||||
( move ) .j LDZ2 .i LDZ2 SUB2 LDA .j LDZ2 STA
|
||||
( decr ) .j LDZ2 -- .j STZ2
|
||||
.j LDZ2 .selection/from LDZ2 GTH2 ,&loop JCN
|
||||
;document/eof LDA2 .i LDZ2 ADD2 ;document/eof STA2
|
||||
|
||||
RTN
|
||||
|
||||
@follow-selection ( -- )
|
||||
|
||||
.position/y LDZ2 .scroll/y LDZ2 GTH2 ,&no-up JCN
|
||||
.position/y LDZ2 .scroll/y STZ2 RTN
|
||||
&no-up
|
||||
.position/y LDZ2 .Screen/height DEI2 #0010 SUB2 8/ .scroll/y LDZ2 ADD2 LTH2 ,&no-down JCN
|
||||
.position/y LDZ2 .Screen/height DEI2 #0010 SUB2 8/ SUB2 .scroll/y STZ2 RTN
|
||||
&no-down
|
||||
|
||||
RTN
|
||||
|
||||
@clamp-selection ( -- )
|
||||
|
||||
.selection/from LDZ2 .selection/to LDZ2 LTH2 RTN?
|
||||
.selection/from LDZ2 ++ .selection/to STZ2
|
||||
|
||||
RTN
|
||||
|
||||
@goto-linestart ( -- )
|
||||
|
||||
&loop
|
||||
.selection/from LDZ2 -- LDA #0a EQU RTN?
|
||||
.selection/from LDZ2 -- LDA #0d EQU RTN?
|
||||
( decr ) .selection/from LDZ2 DUP2 .selection/to STZ2 -- .selection/from STZ2
|
||||
.selection/from LDZ2 LDA ,&loop JCN
|
||||
( clamp at document body )
|
||||
.selection/from LDZ2 ;document/body GTH2 RTN?
|
||||
;document/body DUP2 .selection/from STZ2 ++ .selection/to STZ2
|
||||
|
||||
RTN
|
||||
|
||||
@goto-lineend ( -- )
|
||||
|
||||
&loop
|
||||
.selection/from LDZ2 LDA #0a EQU RTN?
|
||||
.selection/from LDZ2 LDA #0d EQU RTN?
|
||||
( incr ) .selection/from LDZ2 ++ DUP2 ++ .selection/to STZ2 .selection/from STZ2
|
||||
.selection/from LDZ2 LDA ,&loop JCN
|
||||
( clamp at document body )
|
||||
.selection/from LDZ2 ;document/eof LTH2 RTN?
|
||||
;document/eof -- DUP2 .selection/from STZ2 ++ .selection/to STZ2
|
||||
|
||||
RTN
|
||||
|
||||
@find-wordstart ( -- )
|
||||
|
||||
.selection/to LDZ2 .j STZ2
|
||||
&loop
|
||||
( decr ) .j LDZ2 -- .j STZ2
|
||||
.j LDZ2 LDA #20 EQU ,&end JCN
|
||||
.j LDZ2 LDA #0a EQU ,&end JCN
|
||||
.j LDZ2 LDA #0d EQU ,&end JCN
|
||||
.j LDZ2 ;document/body GTH2 ,&loop JCN
|
||||
&end
|
||||
( return ) .j LDZ2 --
|
||||
|
||||
RTN
|
||||
|
||||
@find-wordend ( -- )
|
||||
|
||||
.selection/to LDZ2 .j STZ2
|
||||
&loop
|
||||
( incr ) .j LDZ2 ++ .j STZ2
|
||||
.j LDZ2 LDA #20 EQU ,&end JCN
|
||||
.j LDZ2 LDA #0a EQU ,&end JCN
|
||||
.j LDZ2 LDA #0d EQU ,&end JCN
|
||||
.j LDZ2 ;document/body GTH2 ,&loop JCN
|
||||
&end
|
||||
( return ) .j LDZ2 ++
|
||||
|
||||
RTN
|
||||
|
||||
@find-lineoffset ( return character offset from linestart )
|
||||
|
||||
#0000 .j STZ2
|
||||
&loop
|
||||
( incr ) .j LDZ2 ++ .j STZ2
|
||||
.selection/from LDZ2 .j LDZ2 SUB2 LDA #0a EQU ,&end JCN
|
||||
.selection/from LDZ2 .j LDZ2 SUB2 LDA #0d EQU ,&end JCN
|
||||
.selection/from LDZ2 .j LDZ2 SUB2 ;document/body GTH2 ,&loop JCN
|
||||
&end
|
||||
( return ) .j LDZ2
|
||||
|
||||
RTN
|
||||
|
||||
@find-line ( position -> addr )
|
||||
|
||||
;document/body .j STZ2 #0000 .pt/y STZ2
|
||||
&loop
|
||||
.pt/y LDZ2 .position/y LDZ2 -- GTH2 ,&end JCN
|
||||
.j LDZ2 LDA #0a NEQ .j LDZ2 LDA #0d NEQ #0101 EQU2 ,&no-space JCN
|
||||
( incr ) .pt/y LDZ2 ++ .pt/y STZ2
|
||||
&no-space
|
||||
( incr ) .j LDZ2 ++ .j STZ2
|
||||
.j LDZ2 LDA ,&loop JCN
|
||||
&end
|
||||
( return ) .j LDZ2
|
||||
|
||||
RTN
|
||||
|
||||
@find-selection ( position -> addr )
|
||||
|
||||
;find-line JSR2 ( find line )
|
||||
#0000 .pt/x STZ2
|
||||
&loop
|
||||
.j LDZ2 .pt/x LDZ2 ADD2 LDA #0a EQU ,&end JCN
|
||||
.j LDZ2 .pt/x LDZ2 ADD2 LDA #0d EQU ,&end JCN
|
||||
( incr ) .pt/x LDZ2 ++ .pt/x STZ2
|
||||
.pt/x LDZ2 .position/x LDZ2 -- LTH2 ,&loop JCN
|
||||
&end
|
||||
( return ) .pt/x LDZ2 ADD2
|
||||
|
||||
RTN
|
||||
|
||||
@cut ( -- )
|
||||
|
||||
;copy JSR2
|
||||
.selection/to LDZ2 .selection/from LDZ2 SUB2 ;shift-left JSR2
|
||||
.selection/from LDZ2 ++ .selection/to STZ2
|
||||
|
||||
RTN
|
||||
|
||||
@copy ( -- )
|
||||
|
||||
#0000 .i STZ2 ( start )
|
||||
.selection/to LDZ2 .selection/from LDZ2 SUB2 .j STZ2 ( end )
|
||||
.j LDZ2 ;clip/len STA2
|
||||
&loop
|
||||
.selection/from LDZ2 .i LDZ2 ADD2 LDA ;clip/body .i LDZ2 ADD2 STA
|
||||
( incr ) .i LDZ2 ++ .i STZ2
|
||||
.i LDZ2 .j LDZ2 LTH2 ,&loop JCN
|
||||
|
||||
RTN
|
||||
|
||||
@paste ( -- )
|
||||
|
||||
;clip/len LDA2 ;shift-right JSR2
|
||||
#0000 .i STZ2 ( start )
|
||||
;clip/len LDA2 .j STZ2 ( end )
|
||||
&loop
|
||||
;clip/body .i LDZ2 ADD2 LDA .selection/from LDZ2 .i LDZ2 ADD2 STA
|
||||
( incr ) .i LDZ2 ++ .i STZ2
|
||||
.i LDZ2 .j LDZ2 LTH2 ,&loop JCN
|
||||
|
||||
RTN
|
||||
|
||||
@select ( position -> selection )
|
||||
|
||||
;document/body .selection/from STZ2 #0000 .pt/x STZ2 #0000 .pt/y STZ2
|
||||
&loop
|
||||
.selection/from LDZ2 LDA #0a NEQ .selection/from LDZ2 LDA #0d NEQ #0101 EQU2 ,&no-space JCN
|
||||
( incr ) .pt/y LDZ2 ++ .pt/y STZ2
|
||||
#0000 .pt/x STZ2
|
||||
&no-space
|
||||
.pt/y LDZ2 .position/y LDZ2 -- GTH2 .pt/x LDZ2 .position/x LDZ2 -- GTH2 #0101 NEQ2 ,&no-reached JCN
|
||||
.selection/from LDZ2 ++ .selection/to STZ2
|
||||
RTN
|
||||
&no-reached
|
||||
( incr ) .pt/x LDZ2 ++ .pt/x STZ2
|
||||
( incr ) .selection/from LDZ2 ++ .selection/from STZ2
|
||||
.selection/from LDZ2 LDA ,&loop JCN
|
||||
|
||||
RTN
|
||||
|
||||
( drawing functions )
|
||||
|
||||
@redraw
|
||||
|
||||
;draw-textarea JSR2
|
||||
;draw-scrollbar JSR2
|
||||
;draw-titlebar JSR2
|
||||
|
||||
( save/load icons )
|
||||
.Screen/height DEI2 8- .Screen/y DEO2
|
||||
|
||||
.Screen/width DEI2 #0030 SUB2 .Screen/x DEO2
|
||||
;eye_icn .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
.Screen/width DEI2 #0028 SUB2 .Screen/x DEO2
|
||||
;name_icn .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
.Screen/width DEI2 #0020 SUB2 .Screen/x DEO2
|
||||
;load_icn .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
.Screen/width DEI2 #0018 SUB2 .Screen/x DEO2
|
||||
;save_icn .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
RTN
|
||||
|
||||
@draw-short ( short )
|
||||
|
||||
.addr STZ2
|
||||
;font_hex #00 ;addr LDA #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2
|
||||
( draw ) #2e .Screen/color DEO
|
||||
.Screen/x DEI2 8+ .Screen/x DEO2
|
||||
;font_hex #00 ;addr LDA #0f AND #08 MUL ADD2 .Screen/addr DEO2
|
||||
( draw ) #2e .Screen/color DEO
|
||||
.Screen/x DEI2 8+ .Screen/x DEO2
|
||||
;font_hex #00 ;addr ++ LDA #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2
|
||||
( draw ) #2e .Screen/color DEO
|
||||
.Screen/x DEI2 8+ .Screen/x DEO2
|
||||
;font_hex #00 ;addr ++ LDA #0f AND #08 MUL ADD2 .Screen/addr DEO2
|
||||
( draw ) #2e .Screen/color DEO
|
||||
|
||||
RTN
|
||||
|
||||
@draw-cursor
|
||||
|
||||
( clear last cursor )
|
||||
.mouse/x LDZ2 .Screen/x DEO2
|
||||
.mouse/y LDZ2 .Screen/y DEO2
|
||||
;blank_icn .Screen/addr DEO2
|
||||
#30 .Screen/color DEO
|
||||
|
||||
( record mouse positions )
|
||||
.Mouse/x DEI2 .mouse/x STZ2
|
||||
.Mouse/y DEI2 .mouse/y STZ2
|
||||
|
||||
( draw new cursor )
|
||||
.mouse/x LDZ2 .Screen/x DEO2
|
||||
.mouse/y LDZ2 .Screen/y DEO2
|
||||
;cursor_icn .Screen/addr DEO2
|
||||
#3f .Mouse/state DEI #01 EQU #0a MUL SUB .Screen/color DEO
|
||||
|
||||
RTN
|
||||
|
||||
@draw-textarea ( x y color addr )
|
||||
|
||||
;document/body .textarea/addr STZ2
|
||||
|
||||
( scroll to position )
|
||||
#0000 .j STZ2 ( j is linebreaks )
|
||||
&find-offset
|
||||
.scroll/y LDZ2 .j LDZ2 EQU2 ,&find-offset-end JCN
|
||||
.textarea/addr LDZ2 LDA #0a NEQ .textarea/addr LDZ2 LDA #0d NEQ #0101 EQU2 ,&no-break JCN
|
||||
( incr ) .j LDZ2 ++ .j STZ2 &no-break
|
||||
( incr ) .textarea/addr LDZ2 ++ .textarea/addr STZ2
|
||||
.textarea/addr LDZ2 LDA ,&find-offset JCN
|
||||
&find-offset-end
|
||||
|
||||
#0018 .Screen/x DEO2 #0000 .Screen/y DEO2
|
||||
.textarea/addr LDZ2 .i STZ2
|
||||
|
||||
&loop
|
||||
|
||||
.Screen/y DEI2 .Screen/height DEI2 #0010 SUB2 GTH2 ;&end JCN2
|
||||
|
||||
|
||||
.i LDZ2 LDA #0a NEQ .i LDZ2 LDA #0d NEQ #0101 EQU2 ;&no-linebreak JCN2
|
||||
( draw linebreak )
|
||||
;linebreak_icn .Screen/addr DEO2
|
||||
( draw ) #02
|
||||
.i LDZ2 .selection/from LDZ2 -- GTH2
|
||||
.i LDZ2 .selection/to LDZ2 LTH2 #0101 EQU2
|
||||
#26 MUL ADD .Screen/color DEO
|
||||
( fill clear )
|
||||
&fill-clear
|
||||
( incr ) .Screen/x DEI2 8+ .Screen/x DEO2
|
||||
;font .Screen/addr DEO2
|
||||
#21 .Screen/color DEO
|
||||
.Screen/x DEI2 .Screen/width DEI2 8- LTH2 ,&fill-clear JCN
|
||||
|
||||
( draw line number )
|
||||
#0000 .Screen/x DEO2
|
||||
.scroll/y LDZ2 .Screen/y DEI2 8/ ADD2 DUP2 SWP POP .k STZ
|
||||
.position/y LDZ2 EQU2 #05 MUL .l STZ
|
||||
;font_hex #00 .k LDZ #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2
|
||||
#24 .l LDZ ADD .Screen/color DEO
|
||||
#0008 .Screen/x DEO2
|
||||
;font_hex #00 .k LDZ #0f AND #08 MUL ADD2 .Screen/addr DEO2
|
||||
#24 .l LDZ ADD .Screen/color DEO
|
||||
|
||||
#0010 .Screen/x DEO2
|
||||
( incr ) .Screen/y DEI2 8+ .Screen/y DEO2
|
||||
&no-linebreak
|
||||
|
||||
|
||||
( get character )
|
||||
;font #00 .i LDZ2 LDA #20 SUB 8* ADD2 .Screen/addr DEO2
|
||||
( is a special character )
|
||||
.i LDZ2 LDA #20 GTH ,&no-tab JCN ;font .Screen/addr DEO2 &no-tab
|
||||
|
||||
( draw ) #21
|
||||
.i LDZ2 .selection/from LDZ2 -- GTH2
|
||||
.i LDZ2 .selection/to LDZ2 LTH2 #0101 EQU2
|
||||
#05 MUL ADD .Screen/color DEO
|
||||
|
||||
( incr ) .i LDZ2 ++ .i STZ2
|
||||
( incr ) .Screen/x DEI2 #0007 ADD2 .Screen/x DEO2
|
||||
|
||||
.i LDZ2 LDA ;&loop JCN2
|
||||
|
||||
&end
|
||||
|
||||
RTN
|
||||
|
||||
@draw-scrollbar ( -- )
|
||||
|
||||
;scrollbar_icn ( keeping a copy on stack )
|
||||
|
||||
.Screen/width DEI2 8- .Screen/x DEO2
|
||||
#0008 .Screen/y DEO2
|
||||
DUP2 .Screen/addr DEO2
|
||||
|
||||
#0008 .Screen/height DEI2 8-
|
||||
&loop
|
||||
( draw ) #21 .Screen/color DEO
|
||||
( incr ) SWP2 8+ DUP2 .Screen/y DEO2 SWP2
|
||||
OVR2 OVR2 LTH2 ,&loop JCN
|
||||
POP2 POP2
|
||||
|
||||
.scroll/y LDZ2 8+ .Screen/y DEO2
|
||||
DUP2 #0008 ADD2 .Screen/addr DEO2
|
||||
( draw ) #21 .Screen/color DEO
|
||||
|
||||
#0000 .Screen/y DEO2
|
||||
DUP2 #0010 ADD2 .Screen/addr DEO2
|
||||
( draw ) #24 .Screen/color DEO
|
||||
|
||||
.Screen/height DEI2 8- .Screen/y DEO2
|
||||
#0018 ADD2 .Screen/addr DEO2
|
||||
( draw ) #24 .Screen/color DEO
|
||||
|
||||
RTN
|
||||
|
||||
@draw-titlebar
|
||||
|
||||
#0018 .Screen/height DEI2 8- #29 ;filepath
|
||||
( load ) .label/addr STZ2 .label/color STZ .Screen/y DEO2 .Screen/x DEO2
|
||||
.label/addr LDZ2
|
||||
&loop
|
||||
( draw ) DUP2 LDA #00 SWP #20 SUB 8* ;font ADD2 .Screen/addr DEO2 .label/color LDZ .Screen/color DEO
|
||||
( incr ) ++
|
||||
( incr ) .Screen/x DEI2 8+ .Screen/x DEO2
|
||||
DUP2 LDA ,&loop JCN
|
||||
POP2
|
||||
( selection )
|
||||
.selection/from LDZ2 ;document/body SUB2 ;draw-short JSR2
|
||||
|
||||
RTN
|
||||
|
||||
@font_hex ( 0-F TODO: should pull from @font instead.. )
|
||||
[
|
||||
003c 464a 5262 3c00 0018 0808 0808 1c00
|
||||
003c 4202 3c40 7e00 003c 421c 0242 3c00
|
||||
000c 1424 447e 0400 007e 407c 0242 3c00
|
||||
003c 407c 4242 3c00 007e 0204 0810 1000
|
||||
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
|
||||
]
|
||||
|
||||
@font ( specter8-frag font )
|
||||
[
|
||||
0000 0000 0000 0000 0008 0808 0800 0800
|
||||
0014 1400 0000 0000 0024 7e24 247e 2400
|
||||
0008 1e28 1c0a 3c08 0000 2204 0810 2200
|
||||
0030 4832 4c44 3a00 0008 1000 0000 0000
|
||||
0004 0808 0808 0400 0020 1010 1010 2000
|
||||
0000 2214 0814 2200 0000 0808 3e08 0800
|
||||
0000 0000 0000 0810 0000 0000 3e00 0000
|
||||
0000 0000 0000 0800 0000 0204 0810 2000
|
||||
003c 464a 5262 3c00 0018 0808 0808 1c00
|
||||
003c 4202 3c40 7e00 003c 421c 0242 3c00
|
||||
000c 1424 447e 0400 007e 407c 0242 3c00
|
||||
003c 407c 4242 3c00 007e 0204 0810 1000
|
||||
003c 423c 4242 3c00 003c 4242 3e02 3c00
|
||||
0000 0010 0000 1000 0000 1000 0010 1020
|
||||
0000 0810 2010 0800 0000 003e 003e 0000
|
||||
0000 1008 0408 1000 003c 420c 1000 1000
|
||||
003c 4232 4a42 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 003c 4240 4642 3c00
|
||||
0042 427e 4242 4200 001c 0808 0808 1c00
|
||||
007e 0202 0242 3c00 0042 4478 4442 4200
|
||||
0040 4040 4040 7e00 0042 665a 4242 4200
|
||||
0042 6252 4a46 4200 003c 4242 4242 3c00
|
||||
007c 4242 7c40 4000 003c 4242 4244 3a00
|
||||
007c 4242 7c44 4200 003e 403c 0242 3c00
|
||||
007e 0808 0808 1000 0042 4242 4244 3a00
|
||||
0042 4242 4224 1800 0042 4242 5a66 4200
|
||||
0042 423c 4242 4200 0042 423e 0242 3c00
|
||||
007e 020c 3040 7e00 000c 0808 0808 0c00
|
||||
0040 2010 0804 0200 0030 1010 1010 3000
|
||||
0008 1400 0000 0000 0000 0000 0000 7e00
|
||||
0008 0400 0000 0000 0000 3c02 3e42 3a00
|
||||
0040 407c 4242 7c00 0000 3c42 4042 3c00
|
||||
0002 023e 4242 3e00 0000 3c42 7e40 3e00
|
||||
0000 3e40 7840 4000 0000 3c42 3e02 3c00
|
||||
0040 405c 6242 4200 0008 0018 0808 0400
|
||||
0008 0018 0808 4830 0040 4244 7844 4200
|
||||
0010 1010 1010 0c00 0000 6c52 5252 5200
|
||||
0000 5c62 4242 4200 0000 3c42 4242 3c00
|
||||
0000 7c42 427c 4040 0000 3e42 423e 0202
|
||||
0000 5c62 4040 4000 0000 3e40 3c02 7c00
|
||||
0008 7e08 0808 1000 0000 4242 4244 3a00
|
||||
0000 4242 4224 1800 0000 5252 5252 2e00
|
||||
0000 4224 1824 4200 0000 4242 3e02 7c00
|
||||
0000 7e02 3c40 7e00 000c 0810 1008 0c00
|
||||
0008 0808 0808 0800 0030 1008 0810 3000
|
||||
0000 0032 4c00 0000 3c42 99a1 a199 423c
|
||||
]
|
||||
|
||||
( interface )
|
||||
@eye_icn
|
||||
[ 0038 4492 2810 0000 ] ( open )
|
||||
[ 0000 0082 4438 0000 ] ( closed )
|
||||
|
||||
@scrollbar_icn
|
||||
[ aa55 aa55 aa55 aa55 ] ( bg )
|
||||
[ ffff ffff ffff ffff ] ( fg )
|
||||
[ 0010 387c fe10 1010 ] ( up )
|
||||
[ 0010 1010 fe7c 3810 ] ( down )
|
||||
|
||||
@name_icn [ 1054 28c6 2854 1000 ]
|
||||
@load_icn [ feaa d6aa d4aa f400 ]
|
||||
@save_icn [ fe82 8282 848a f400 ]
|
||||
|
||||
@linebreak_icn [ 003e 7474 3414 1400 ]
|
||||
|
||||
@blank_icn [ 0000 0000 0000 0000 ]
|
||||
@cursor_icn [ 80c0 e0f0 f8e0 1000 ]
|
||||
|
||||
@filepath1 [ "projects/examples/gui.hover.usm 00 ]
|
||||
@filepath [ "README.md 00 ]
|
||||
|
||||
@clip [ &len $2 &body $100 ]
|
||||
@document [ &eof $2 &body $0 ]
|
||||
|
|
@ -1,665 +0,0 @@
|
|||
( Orca
|
||||
|
||||
TODO
|
||||
- Synthax highlight
|
||||
- B operating doesn't loop around
|
||||
- Detect capitalization
|
||||
- Comments
|
||||
- Scale selection
|
||||
- Load/Save
|
||||
- Copy/Paste
|
||||
- Copy/paste(chorded)
|
||||
)
|
||||
|
||||
%RTN { JMP2r }
|
||||
%++ { #01 ADD } %-- { #01 SUB }
|
||||
%8++ { #0008 ADD2 }
|
||||
%8** { #30 SFT2 } %8// { #03 SFT2 }
|
||||
%MOD { DUP2 DIV MUL SUB }
|
||||
%MOD8 { #07 AND }
|
||||
%MOD2 { #01 AND }
|
||||
|
||||
%DATA-CELLS { #2000 }
|
||||
%DATA-LOCKS { #3000 }
|
||||
%DATA-TYPES { #4000 }
|
||||
|
||||
%LDA-CHAR { #24 MOD #00 SWP ;b36clc ADD2 LDA } ( b36 -- char )
|
||||
%LDA-VALUE { #20 SUB #00 SWP ;values ADD2 LDA } ( char -- b36 )
|
||||
|
||||
%LDA-INDEX { #00 SWP #00 .grid/width LDZ MUL2 ROT #00 SWP ADD2 } ( x y -- index )
|
||||
%LDA-CELL { LDA-INDEX DATA-CELLS ADD2 LDA } ( x y -- char )
|
||||
%SET-CELL { ROT ROT LDA-INDEX DATA-CELLS ADD2 STA } ( x y char -- )
|
||||
%LDA-TYPE { LDA-INDEX DATA-TYPES ADD2 LDA } ( x y -- type )
|
||||
%SET-TYPE { ROT ROT LDA-INDEX DATA-TYPES ADD2 STA } ( x y type -- )
|
||||
%LDA-LOCK { LDA-INDEX DATA-TYPES ADD2 LDA } ( x y -- type )
|
||||
%SET-LOCK { ROT ROT LDA-INDEX DATA-TYPES ADD2 STA } ( x y type -- )
|
||||
%LDA-PORT { } ( x y lock -- char )
|
||||
%SET-PORT { } ( x y char -- )
|
||||
|
||||
%LDA-CELL-VALUE { LDA-CELL LDA-VALUE } ( x y -- b36 )
|
||||
|
||||
( devices )
|
||||
|
||||
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
||||
|10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ]
|
||||
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ]
|
||||
|80 @Controller [ &vector $2 &button $1 &key $1 ]
|
||||
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]
|
||||
|
||||
( variables )
|
||||
|
||||
@timer [ &byte $1 &frame $1 &speed $1 ]
|
||||
@grid [ &width $1 &height $1 ]
|
||||
@selection [ &x1 $1 &y1 $1 &x2 $1 &y2 $1 ]
|
||||
@cursor [ &x $2 &y $2 ]
|
||||
|
||||
|0100
|
||||
|
||||
( theme ) #08f3 .System/r DEO2 #08fc .System/g DEO2 #08f9 .System/b DEO2
|
||||
( vectors ) ;on-button .Controller/vector DEO2
|
||||
( vectors ) ;on-mouse .Mouse/vector DEO2
|
||||
( vectors ) ;on-frame .Screen/vector DEO2
|
||||
|
||||
( find size )
|
||||
.Screen/width DEI2 8// SWP POP .grid/width STZ
|
||||
.Screen/height DEI2 8// SWP POP #02 SUB .grid/height STZ
|
||||
|
||||
( fill grid with dots )
|
||||
|
||||
;start JSR2
|
||||
;redraw JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@on-frame
|
||||
|
||||
.timer LDZ ++ DUP .timer STZ
|
||||
|
||||
( skip ) #08 EQU ,&tick JCN BRK &tick
|
||||
|
||||
.timer/frame LDZ ++ .timer/frame STZ
|
||||
|
||||
;run JSR2
|
||||
|
||||
#00 .timer STZ
|
||||
|
||||
BRK
|
||||
|
||||
@on-button
|
||||
|
||||
.Controller/key DEI #00 EQU ,&no-key JCN
|
||||
.selection/x1 LDZ .selection/y1 LDZ .Controller/key DEI SET-CELL
|
||||
;redraw JSR2
|
||||
&no-key
|
||||
|
||||
( arrows )
|
||||
.Controller/button DEI #f0 AND
|
||||
DUP #04 SFT #01 AND #01 NEQ ,&no-up JCN
|
||||
.selection/y1 LDZ #00 EQU ,&no-up JCN
|
||||
.selection/y1 LDZ -- .selection/y1 STZ
|
||||
.selection/y2 LDZ -- .selection/y2 STZ &no-up
|
||||
DUP #05 SFT #01 AND #01 NEQ ,&no-down JCN
|
||||
.selection/y1 LDZ .grid/height LDZ -- EQU ,&no-down JCN
|
||||
.selection/y1 LDZ ++ .selection/y1 STZ
|
||||
.selection/y2 LDZ ++ .selection/y2 STZ &no-down
|
||||
DUP #06 SFT #01 AND #01 NEQ ,&no-left JCN
|
||||
.selection/x1 LDZ #00 EQU ,&no-left JCN
|
||||
.selection/x1 LDZ -- .selection/x1 STZ
|
||||
.selection/x2 LDZ -- .selection/x2 STZ &no-left
|
||||
DUP #07 SFT #01 AND #01 NEQ ,&no-right JCN
|
||||
.selection/x1 LDZ .grid/width LDZ -- EQU ,&no-right JCN
|
||||
.selection/x1 LDZ ++ .selection/x1 STZ
|
||||
.selection/x2 LDZ ++ .selection/x2 STZ &no-right
|
||||
POP
|
||||
|
||||
.Controller/key DEI #08 NEQ ,&no-backspace JCN
|
||||
.selection/x1 LDZ .selection/y1 LDZ #2e SET-CELL ( put . char )
|
||||
&no-backspace
|
||||
|
||||
;redraw JSR2
|
||||
|
||||
BRK
|
||||
|
||||
@on-mouse
|
||||
|
||||
.Mouse/state DEI #00 EQU ,&no-touch JCN
|
||||
.Mouse/x DEI2 8// SWP POP .selection/x1 STZ
|
||||
.Mouse/y DEI2 8// SWP POP .selection/y1 STZ
|
||||
;redraw JSR2
|
||||
&no-touch
|
||||
|
||||
( clear last cursor )
|
||||
.cursor/x LDZ2 .Screen/x DEO2
|
||||
.cursor/y LDZ2 .Screen/y DEO2
|
||||
;blank_icn .Screen/addr DEO2
|
||||
#30 .Screen/color DEO
|
||||
|
||||
( record cursor positions )
|
||||
.Mouse/x DEI2 .cursor/x STZ2
|
||||
.Mouse/y DEI2 .cursor/y STZ2
|
||||
|
||||
( draw new cursor )
|
||||
.cursor/x LDZ2 .Screen/x DEO2
|
||||
.cursor/y LDZ2 .Screen/y DEO2
|
||||
;cursor_icn .Screen/addr DEO2
|
||||
#32 .Mouse/state DEI #01 EQU ADD .Screen/color DEO
|
||||
|
||||
BRK
|
||||
|
||||
@start ( -- )
|
||||
|
||||
#00 .grid/height LDZ
|
||||
&ver
|
||||
#00 .grid/width LDZ
|
||||
&hor
|
||||
( get x,y ) SWP2 OVR STH SWP2 OVR STHr
|
||||
#2e SET-CELL
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&hor JCN
|
||||
POP2
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&ver JCN
|
||||
POP2
|
||||
|
||||
#9a .timer/speed STZ
|
||||
|
||||
RTN
|
||||
|
||||
( operations )
|
||||
|
||||
@get-bang ( x y -- bang )
|
||||
RTN
|
||||
|
||||
( old )
|
||||
|
||||
@is-selected ( x y -- flag )
|
||||
|
||||
.selection/x1 LDZ .selection/y1 LDZ EQU2
|
||||
|
||||
RTN
|
||||
|
||||
@get-port ( x y lock -- value )
|
||||
|
||||
(
|
||||
DUP #01 NEQ ^$no-lock JCN
|
||||
DUP2 #01 SET-LOCK
|
||||
$no-lock
|
||||
STH DUP2 #02 #02 STHr MUL ADD ,set-type JSR2
|
||||
LDA-CELL
|
||||
)
|
||||
|
||||
RTN
|
||||
|
||||
@get-cell-sprite ( x y -- addr )
|
||||
|
||||
DUP2 LDA-CELL
|
||||
( if character is dot )
|
||||
DUP #2e NEQ ,&no-bar JCN
|
||||
( check if x,y is grid )
|
||||
POP
|
||||
DUP2 MOD8 #00 EQU SWP MOD8 #00 EQU #0101 NEQ2 ,&no-marker8 JCN POP2 ;marker8_icn RTN &no-marker8
|
||||
DUP2 MOD2 #00 EQU SWP MOD2 #00 EQU #0101 NEQ2 ,&no-marker4 JCN POP2 ;marker4_icn RTN &no-marker4
|
||||
POP2 ;font RTN
|
||||
&no-bar
|
||||
STH POP2 STHr
|
||||
#20 SUB #00 SWP 8** ;font ADD2
|
||||
|
||||
RTN
|
||||
|
||||
( operators )
|
||||
|
||||
@op-a ( x y char -- )
|
||||
|
||||
POP
|
||||
( get left ) DUP2 SWP -- SWP LDA-CELL-VALUE STH
|
||||
( get right ) DUP2 SWP ++ SWP LDA-CELL-VALUE STH
|
||||
( incr y ) ++
|
||||
( get result ) ADDr STHr
|
||||
LDA-CHAR
|
||||
SET-CELL
|
||||
|
||||
RTN
|
||||
|
||||
@op-b ( x y char -- )
|
||||
|
||||
POP
|
||||
( get left ) DUP2 SWP -- SWP LDA-CELL-VALUE STH
|
||||
( get right ) DUP2 SWP ++ SWP LDA-CELL-VALUE STH
|
||||
( incr y ) ++
|
||||
( get result ) SUBr STHr
|
||||
LDA-CHAR
|
||||
SET-CELL
|
||||
|
||||
( NOTE: Issue is not with modulo, but with converting ff to 36 )
|
||||
|
||||
RTN
|
||||
|
||||
@op-c ( x y char -- )
|
||||
|
||||
POP
|
||||
++
|
||||
#30 .timer/frame LDZ MOD8 ADD SET-CELL
|
||||
|
||||
RTN
|
||||
|
||||
@op-d ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-e ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-f ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-g ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-h ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-i ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-j ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-k ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-l ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-m ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-n ( x y char -- )
|
||||
|
||||
STH
|
||||
( limit )
|
||||
DUP ,¬-edge JCN
|
||||
#2a SET-CELL POP STHr RTN
|
||||
¬-edge
|
||||
( collide )
|
||||
DUP2 -- LDA-CELL #2e EQU ,¬-collide JCN
|
||||
#2a SET-CELL POP STHr RTN
|
||||
¬-collide
|
||||
( move )
|
||||
DUP2 STHr
|
||||
SWP -- SWP SET-CELL
|
||||
#2e SET-CELL
|
||||
|
||||
RTN
|
||||
|
||||
@op-o ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-p ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-q ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-r ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-s ( x y char -- )
|
||||
|
||||
STH
|
||||
( clear ) DUP2 #2e SET-CELL
|
||||
( move ) ++ DUP2 #01 SET-LOCK
|
||||
STHr SET-CELL
|
||||
|
||||
RTN
|
||||
|
||||
@op-t ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-u ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-v ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-w ( x y char -- )
|
||||
|
||||
STH
|
||||
( limit )
|
||||
OVR ,¬-edge JCN
|
||||
#2a SET-CELL POP STHr RTN
|
||||
¬-edge
|
||||
( collide )
|
||||
DUP2 SWP -- SWP LDA-CELL #2e EQU ,¬-collide JCN
|
||||
#2a SET-CELL POP STHr RTN
|
||||
¬-collide
|
||||
( move )
|
||||
DUP2
|
||||
SWP -- SWP STHr SET-CELL
|
||||
#2e SET-CELL
|
||||
|
||||
RTN
|
||||
|
||||
@op-x ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-y ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-z ( x y char -- )
|
||||
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@op-bang ( x y char -- )
|
||||
|
||||
POP
|
||||
#2e SET-CELL
|
||||
|
||||
RTN
|
||||
|
||||
@run-char ( x y char -- )
|
||||
|
||||
( skip dot )
|
||||
DUP #2e NEQ ,¬-dot JCN
|
||||
POP POP2 RTN
|
||||
¬-dot
|
||||
|
||||
( skip locked )
|
||||
ROT ROT DUP2 LDA-LOCK #00 EQU ,¬-locked JCN
|
||||
POP POP2 RTN
|
||||
¬-locked
|
||||
ROT
|
||||
|
||||
( A ) DUP #41 EQU ;op-a JCN2 ( B ) DUP #42 EQU ;op-b JCN2
|
||||
( C ) DUP #43 EQU ;op-c JCN2 ( D ) DUP #44 EQU ;op-d JCN2
|
||||
( E ) DUP #45 EQU ;op-e JCN2 ( F ) DUP #46 EQU ;op-f JCN2
|
||||
( G ) DUP #47 EQU ;op-g JCN2 ( H ) DUP #48 EQU ;op-h JCN2
|
||||
( I ) DUP #49 EQU ;op-i JCN2 ( J ) DUP #4a EQU ;op-j JCN2
|
||||
( K ) DUP #4b EQU ;op-k JCN2 ( L ) DUP #4c EQU ;op-l JCN2
|
||||
( M ) DUP #4d EQU ;op-m JCN2 ( N ) DUP #4e EQU ;op-n JCN2
|
||||
( O ) DUP #4f EQU ;op-o JCN2 ( P ) DUP #50 EQU ;op-p JCN2
|
||||
( Q ) DUP #51 EQU ;op-q JCN2 ( R ) DUP #52 EQU ;op-r JCN2
|
||||
( S ) DUP #53 EQU ;op-s JCN2 ( T ) DUP #54 EQU ;op-t JCN2
|
||||
( U ) DUP #55 EQU ;op-u JCN2 ( V ) DUP #56 EQU ;op-v JCN2
|
||||
( W ) DUP #57 EQU ;op-w JCN2 ( X ) DUP #58 EQU ;op-x JCN2
|
||||
( Y ) DUP #59 EQU ;op-y JCN2 ( Z ) DUP #5a EQU ;op-z JCN2
|
||||
( * ) DUP #2a EQU ;op-bang JCN2
|
||||
POP POP2
|
||||
|
||||
RTN
|
||||
|
||||
@init ( -- )
|
||||
|
||||
#00 .grid/height LDZ
|
||||
&ver
|
||||
#00 .grid/width LDZ
|
||||
&hor
|
||||
( get x,y ) SWP2 OVR STH SWP2 OVR STHr
|
||||
( unlock ) #00 SET-LOCK
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&hor JCN
|
||||
POP2
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&ver JCN
|
||||
POP2
|
||||
|
||||
RTN
|
||||
|
||||
@run ( -- )
|
||||
|
||||
;init JSR2
|
||||
|
||||
#00 .grid/height LDZ
|
||||
&ver
|
||||
#00 .grid/width LDZ
|
||||
&hor
|
||||
( get x,y ) SWP2 OVR STH SWP2 OVR STHr
|
||||
DUP2 LDA-CELL ;run-char JSR2
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&hor JCN
|
||||
POP2
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&ver JCN
|
||||
POP2
|
||||
;redraw JSR2
|
||||
|
||||
RTN
|
||||
|
||||
@draw-interface ( -- )
|
||||
|
||||
.Screen/height DEI2 #0008 SUB2 .Screen/y DEO2
|
||||
|
||||
( Positionx )
|
||||
#0000 .Screen/x DEO2
|
||||
.selection/x1 LDZ
|
||||
DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
#0008 .Screen/x DEO2
|
||||
#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
( Positiony )
|
||||
#0010 .Screen/x DEO2
|
||||
.selection/y1 LDZ
|
||||
DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
#0018 .Screen/x DEO2
|
||||
#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
#0020 .Screen/x DEO2
|
||||
;position_icn .Screen/addr DEO2
|
||||
#23 .Screen/color DEO
|
||||
|
||||
( Frame )
|
||||
#0030 .Screen/x DEO2
|
||||
.timer/frame LDZ
|
||||
DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
#0038 .Screen/x DEO2
|
||||
#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
#0040 .Screen/x DEO2
|
||||
;beat_icn .Screen/addr DEO2
|
||||
#21 .timer/frame LDZ MOD8 #00 EQU #02 MUL ADD .Screen/color DEO
|
||||
|
||||
( Speed )
|
||||
#0050 .Screen/x DEO2
|
||||
.timer/speed LDZ
|
||||
DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
#0058 .Screen/x DEO2
|
||||
#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
|
||||
#22 .Screen/color DEO
|
||||
|
||||
( TODO: Signal VU )
|
||||
|
||||
( File )
|
||||
.Screen/width DEI2 #0028 SUB2 .Screen/x DEO2
|
||||
.Screen/x DEI2 8++ .Screen/x DEO2 ;eye_icns .Screen/addr DEO2 #21 .Screen/color DEO
|
||||
.Screen/x DEI2 8++ .Screen/x DEO2 ;filestate_icn .Screen/addr DEO2 #21 .Screen/color DEO
|
||||
.Screen/x DEI2 8++ .Screen/x DEO2 ;load_icn .Screen/addr DEO2 #21 .Screen/color DEO
|
||||
.Screen/x DEI2 8++ .Screen/x DEO2 ;save_icn .Screen/addr DEO2 #21 .Screen/color DEO
|
||||
|
||||
RTN
|
||||
|
||||
@redraw ( -- )
|
||||
|
||||
#00 .grid/height LDZ
|
||||
&ver
|
||||
( pos-y ) OVR #00 SWP 8** .Screen/y DEO2
|
||||
#00 .grid/width LDZ
|
||||
&hor
|
||||
( pos-x ) OVR #00 SWP 8** .Screen/x DEO2
|
||||
( get x,y ) SWP2 OVR STH SWP2 OVR STHr
|
||||
( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2
|
||||
( draw ) ;is-selected JSR2 #0d MUL #21 ADD .Screen/color DEO
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&hor JCN
|
||||
POP2
|
||||
( incr ) SWP ++ SWP
|
||||
DUP2 LTH ,&ver JCN
|
||||
POP2
|
||||
|
||||
;draw-interface JSR2
|
||||
|
||||
RTN
|
||||
|
||||
( char to b36 )
|
||||
|
||||
@values [
|
||||
|
||||
00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00
|
||||
|
||||
00 01 02 03 04 05 06 07
|
||||
08 09 00 00 00 00 00 00
|
||||
|
||||
00 0a 0b 0c 0d 0e 0f 10
|
||||
11 12 13 14 15 16 17 18
|
||||
19 1a 1b 1c 1d 1e 1f 20
|
||||
21 22 23 00 00 00 00 00
|
||||
|
||||
00 0a 0b 0c 0d 0e 0f 10
|
||||
11 12 13 14 15 16 17 18
|
||||
19 1a 1b 1c 1d 1e 1f 20
|
||||
21 22 23 00 00 00 00 00
|
||||
|
||||
]
|
||||
|
||||
( b36 to char-lc )
|
||||
|
||||
@b36clc [
|
||||
30 31 32 33 34 35 36 37
|
||||
38 39 61 62 63 64 65 66
|
||||
67 68 69 6a 6b 6c 6d 6e
|
||||
6f 70 71 72 73 74 75 76
|
||||
77 78 79 7a
|
||||
]
|
||||
|
||||
@cursor_icn [ 80c0 e0f0 f8e0 1000 ]
|
||||
@blank_icn [ 0000 0000 0000 0000 ]
|
||||
@position_icn [ 0066 4200 0042 6600 ]
|
||||
@beat_icn [ 0000 1038 7c38 1000 ]
|
||||
@marker8_icn [ 0000 2400 0024 0000 ]
|
||||
@marker4_icn [ 0000 0000 0000 1000 ]
|
||||
@filestate_icn [ 1054 28c6 2854 1000 ]
|
||||
@load_icn [ feaa d6aa d4aa f400 ]
|
||||
@save_icn [ fe82 8282 848a f400 ]
|
||||
|
||||
@eye_icns
|
||||
[ 0038 4492 2810 0000 ] ( open )
|
||||
[ 0000 0082 4438 0000 ] ( closed )
|
||||
|
||||
|
||||
@font ( specter8-frag font )
|
||||
[
|
||||
0000 0000 0000 0000 0008 0808 0800 0800
|
||||
0014 1400 0000 0000 0024 7e24 247e 2400
|
||||
0008 1e28 1c0a 3c08 0000 2204 0810 2200
|
||||
0030 4832 4c44 3a00 0008 1000 0000 0000
|
||||
0004 0808 0808 0400 0020 1010 1010 2000
|
||||
005a 2442 4224 5a00 0000 0808 3e08 0800
|
||||
0000 0000 0000 0810 0000 0000 3e00 0000
|
||||
0000 0000 0000 0800 0000 0204 0810 2000
|
||||
003c 464a 5262 3c00 0018 0808 0808 1c00
|
||||
003c 4202 3c40 7e00 003c 421c 0242 3c00
|
||||
000c 1424 447e 0400 007e 407c 0242 3c00
|
||||
003c 407c 4242 3c00 007e 0204 0810 1000
|
||||
003c 423c 4242 3c00 003c 4242 3e02 3c00
|
||||
0000 0010 0000 1000 0000 1000 0010 1020
|
||||
0000 0810 2010 0800 0000 003e 003e 0000
|
||||
0000 1008 0408 1000 003c 420c 1000 1000
|
||||
003c 4232 4a42 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 003c 4240 4642 3c00
|
||||
0042 427e 4242 4200 001c 0808 0808 1c00
|
||||
007e 0202 0242 3c00 0042 4478 4442 4200
|
||||
0040 4040 4040 7e00 0042 665a 4242 4200
|
||||
0042 6252 4a46 4200 003c 4242 4242 3c00
|
||||
007c 4242 7c40 4000 003c 4242 4244 3a00
|
||||
007c 4242 7c44 4200 003e 403c 0242 3c00
|
||||
007e 0808 0808 1000 0042 4242 4244 3a00
|
||||
0042 4242 4224 1800 0042 4242 5a66 4200
|
||||
0042 423c 4242 4200 0042 423e 0242 3c00
|
||||
007e 020c 3040 7e00 000c 0808 0808 0c00
|
||||
0040 2010 0804 0200 0030 1010 1010 3000
|
||||
0008 1400 0000 0000 0000 0000 0000 7e00
|
||||
0008 0400 0000 0000 0000 3c02 3e42 3a00
|
||||
0040 407c 4242 7c00 0000 3c42 4042 3c00
|
||||
0002 023e 4242 3e00 0000 3c42 7e40 3e00
|
||||
0000 3e40 7840 4000 0000 3c42 3e02 3c00
|
||||
0040 405c 6242 4200 0008 0018 0808 0400
|
||||
0008 0018 0808 4830 0040 4244 7844 4200
|
||||
0010 1010 1010 0c00 0000 6c52 5252 5200
|
||||
0000 5c62 4242 4200 0000 3c42 4242 3c00
|
||||
0000 7c42 427c 4040 0000 3e42 423e 0202
|
||||
0000 5c62 4040 4000 0000 3e40 3c02 7c00
|
||||
0008 7e08 0808 1000 0000 4242 4244 3a00
|
||||
0000 4242 4224 1800 0000 5252 5252 2e00
|
||||
0000 4224 1824 4200 0000 4242 3e02 7c00
|
||||
0000 7e02 3c40 7e00 000c 0810 1008 0c00
|
||||
0008 0808 0808 0800 0030 1008 0810 3000
|
||||
0000 0032 4c00 0000 3c42 99a1 a199 423c
|
||||
]
|
||||
|
||||
@data [ ]
|
Loading…
Reference in a new issue