Compare commits
2 Commits
d38e30e70f
...
eccd3e0db4
Author | SHA1 | Date |
---|---|---|
Ben Bridle | eccd3e0db4 | |
Ben Bridle | 84423e60c9 |
|
@ -0,0 +1,57 @@
|
|||
@acorn_font
|
||||
&width
|
||||
0405 0408 0807 0802 0505 0807 0405 0307
|
||||
0705 0707 0707 0707 0707 0304 0605 0607
|
||||
0707 0707 0706 0607 0705 0707 0608 0807
|
||||
0707 0707 0707 0708 0707 0705 0705 0706
|
||||
0407 0707 0707 0607 0705 0507 0508 0707
|
||||
0708 0707 0607 0708 0707 0705 0205 0808
|
||||
&characters
|
||||
0000 0000 0000 0000 ( ) 60f0 f060 6000 6000 ( ! )
|
||||
a0a0 0000 0000 0000 ( " ) 6c6c fe6c fe6c 6c00 ( # )
|
||||
107c e07c 0e7c 1000 ( $ ) cccc 1830 60cc cc00 ( % )
|
||||
70d8 d870 dacc 7600 ( & ) 8080 0000 0000 0000 ( ' )
|
||||
3060 c0c0 c060 3000 ( o_paren ) c060 3030 3060 c000 ( c_paren )
|
||||
6c38 fe38 6c00 0000 ( * ) 0030 30fc 3030 0000 ( + )
|
||||
0000 0000 0060 60c0 ( , ) 0000 00f0 0000 0000 ( - )
|
||||
0000 0000 00c0 c000 ( . ) 0c18 1830 3060 60c0 ( / )
|
||||
78cc dcfc eccc 7800 ( 0 ) 60e0 6060 6060 f000 ( 1 )
|
||||
78cc 0c38 60c4 fc00 ( 2 ) 78cc 0c38 0ccc 7800 ( 3 )
|
||||
1838 78d8 fc18 1800 ( 4 ) fcc0 f81c 0ccc 7800 ( 5 )
|
||||
3860 c0f8 cccc 7800 ( 6 ) fc0c 1830 6060 6000 ( 7 )
|
||||
78cc cc78 cccc 7800 ( 8 ) 78cc cc7c 0c18 7000 ( 9 )
|
||||
00c0 c000 00c0 c000 ( : ) 0060 6000 0060 60c0 ( ; )
|
||||
1830 60c0 6030 1800 ( < ) 0000 f000 f000 0000 ( = )
|
||||
c060 3018 3060 c000 ( > ) 78cc 1830 3000 3000 ( ? )
|
||||
78cc dcd4 dcc0 7800 ( @ ) 78cc cccc fccc cc00 ( A )
|
||||
f8cc ccf8 cccc f800 ( B ) 78cc c0c0 c0cc 7800 ( C )
|
||||
f8cc cccc cccc f800 ( D ) f8c0 c0f0 c0c0 f800 ( E )
|
||||
f8c0 c0f0 c0c0 c000 ( F ) 78cc c0dc cccc 7800 ( G )
|
||||
cccc ccfc cccc cc00 ( H ) f060 6060 6060 f000 ( I )
|
||||
7c18 1818 18d8 7000 ( J ) cccc d8f0 d8cc cc00 ( K )
|
||||
c0c0 c0c0 c0c0 f800 ( L ) c6ee fed6 d6c6 c600 ( M )
|
||||
c6e6 f6de cec6 c600 ( N ) 78cc cccc cccc 7800 ( O )
|
||||
f8cc cccc f8c0 c000 ( P ) 78cc cccc d4d8 6c00 ( Q )
|
||||
f8cc ccf8 cccc cc00 ( R ) 78cc c078 0ccc 7800 ( S )
|
||||
fc30 3030 3030 3000 ( T ) cccc cccc cccc 7800 ( U )
|
||||
cccc cccc cc78 3000 ( V ) c6c6 c6d6 d6fe 6c00 ( W )
|
||||
cccc 7830 78cc cc00 ( X ) cccc cc78 3030 3000 ( Y )
|
||||
fc1c 3830 70e0 fc00 ( Z ) f0c0 c0c0 c0c0 f000 ( [ )
|
||||
c060 6030 3018 180c ( \ ) f030 3030 3030 f000 ( ] )
|
||||
3071 cc84 0000 0000 ( ^ ) 0000 0000 0000 f800 ( _ )
|
||||
c060 0000 0000 0000 ( ` ) 0000 780c 7ccc 7c00 ( a )
|
||||
c0c0 f8cc cccc f800 ( b ) 0000 78cc c0cc 7800 ( c )
|
||||
0c0c 7ccc cccc 7c00 ( d ) 0000 78cc fcc0 7800 ( e )
|
||||
3860 60f8 6060 6000 ( f ) 0000 7ccc cc7c 0c78 ( g )
|
||||
c0c0 f8cc cccc cc00 ( h ) 6000 e060 6060 f000 ( i )
|
||||
3000 7030 3030 30e0 ( j ) c0c0 ccd8 f0d8 cc00 ( k )
|
||||
e060 6060 6060 f000 ( l ) 0000 6cfe d6d6 c600 ( m )
|
||||
0000 f8cc cccc cc00 ( n ) 0000 78cc cccc 7800 ( o )
|
||||
0000 f8cc ccf8 c0c0 ( p ) 0000 7ccc cc7c 0c0e ( q )
|
||||
0000 d8ec c0c0 c000 ( r ) 0000 7ce0 781c f800 ( s )
|
||||
6060 f860 6060 3800 ( t ) 0000 cccc cccc 7800 ( u )
|
||||
0000 cccc cc78 3000 ( v ) 0000 c6d6 d6fe 6c00 ( w )
|
||||
0000 cc78 3078 cc00 ( x ) 0000 cccc cc7c 0c78 ( y )
|
||||
0000 fc18 3060 fc00 ( z ) 3060 60c0 6060 3000 ( { )
|
||||
8080 8080 8080 8000 ( | ) c060 6030 6060 c000 ( } )
|
||||
0000 62d6 8c00 0000 ( ~ )
|
|
@ -11,41 +11,59 @@
|
|||
%BITMASK_4 { #08 } %BITMASK_8 { #80 }
|
||||
|
||||
( Colour mappings for pixel colours, 1-bit sprite colours, and 2-bit sprite colours. )
|
||||
%COL_0 { #00 } %COL_00 { #00 } %COL_0012 { #00 }
|
||||
%COL_1 { #01 } %COL_01 { #01 } %COL_0123 { #01 }
|
||||
%COL_2 { #02 } %COL_02 { #02 } %COL_0231 { #02 }
|
||||
%COL_3 { #03 } %COL_03 { #03 } %COL_0312 { #03 }
|
||||
%COL_10 { #04 } %COL_1012 { #04 }
|
||||
%COL_T1 { #05 } %COL_T123 { #05 }
|
||||
%COL_12 { #06 } %COL_1231 { #06 }
|
||||
%COL_13 { #07 } %COL_1312 { #07 }
|
||||
%COL_20 { #08 } %COL_2012 { #08 }
|
||||
%COL_21 { #09 } %COL_2123 { #09 }
|
||||
%COL_T2 { #0a } %COL_T231 { #0a }
|
||||
%COL_23 { #0b } %COL_2312 { #0b }
|
||||
%COL_30 { #0c } %COL_3012 { #0c }
|
||||
%COL_31 { #0d } %COL_3123 { #0d }
|
||||
%COL_32 { #0e } %COL_3231 { #0e }
|
||||
%COL_T3 { #0f } %COL_T312 { #0f }
|
||||
%COL_0123_2B { #81 }
|
||||
%COL_0 { #00 } %COL_00 { #00 } %COL_0012 { #80 }
|
||||
%COL_1 { #01 } %COL_01 { #01 } %COL_0123 { #81 }
|
||||
%COL_2 { #02 } %COL_02 { #02 } %COL_0231 { #82 }
|
||||
%COL_3 { #03 } %COL_03 { #03 } %COL_0312 { #83 }
|
||||
%COL_10 { #04 } %COL_1012 { #84 }
|
||||
%COL_T1 { #05 } %COL_T123 { #85 }
|
||||
%COL_12 { #06 } %COL_1231 { #86 }
|
||||
%COL_13 { #07 } %COL_1312 { #87 }
|
||||
%COL_20 { #08 } %COL_2012 { #88 }
|
||||
%COL_21 { #09 } %COL_2123 { #89 }
|
||||
%COL_T2 { #0a } %COL_T231 { #8a }
|
||||
%COL_23 { #0b } %COL_2312 { #8b }
|
||||
%COL_30 { #0c } %COL_3012 { #8c }
|
||||
%COL_31 { #0d } %COL_3123 { #8d }
|
||||
%COL_32 { #0e } %COL_3231 { #8e }
|
||||
%COL_T3 { #0f } %COL_T312 { #8f }
|
||||
|
||||
( Flipped X )
|
||||
%COL_0_X { #10 } %COL_00_X { #10 } %COL_0012_X { #90 }
|
||||
%COL_1_X { #11 } %COL_01_X { #11 } %COL_0123_X { #91 }
|
||||
%COL_2_X { #12 } %COL_02_X { #12 } %COL_0231_X { #92 }
|
||||
%COL_3_X { #13 } %COL_03_X { #13 } %COL_0312_X { #93 }
|
||||
%COL_10_X { #14 } %COL_1012_X { #94 }
|
||||
%COL_T1_X { #15 } %COL_T123_X { #95 }
|
||||
%COL_12_X { #16 } %COL_1231_X { #96 }
|
||||
%COL_13_X { #17 } %COL_1312_X { #97 }
|
||||
%COL_20_X { #18 } %COL_2012_X { #98 }
|
||||
%COL_21_X { #19 } %COL_2123_X { #99 }
|
||||
%COL_T2_X { #1a } %COL_T231_X { #9a }
|
||||
%COL_23_X { #1b } %COL_2312_X { #9b }
|
||||
%COL_30_X { #1c } %COL_3012_X { #9c }
|
||||
%COL_31_X { #1d } %COL_3123_X { #9d }
|
||||
%COL_32_X { #1e } %COL_3231_X { #9e }
|
||||
%COL_T3_X { #1f } %COL_T312_X { #9f }
|
||||
|
||||
|
||||
( Colour mappings for pixel colours, 1-bit sprite colours, and 2-bit sprite colours. )
|
||||
%COL_0_FG { #40 } %COL_00_FG { #40 } %COL_0012_FG { #40 }
|
||||
%COL_1_FG { #41 } %COL_01_FG { #41 } %COL_0123_FG { #41 }
|
||||
%COL_2_FG { #42 } %COL_02_FG { #42 } %COL_0231_FG { #42 }
|
||||
%COL_3_FG { #43 } %COL_03_FG { #43 } %COL_0312_FG { #43 }
|
||||
%COL_10_FG { #44 } %COL_1012_FG { #44 }
|
||||
%COL_T1_FG { #45 } %COL_T123_FG { #45 }
|
||||
%COL_12_FG { #46 } %COL_1231_FG { #46 }
|
||||
%COL_13_FG { #47 } %COL_1312_FG { #47 }
|
||||
%COL_20_FG { #48 } %COL_2012_FG { #48 }
|
||||
%COL_21_FG { #49 } %COL_2123_FG { #49 }
|
||||
%COL_T2_FG { #4a } %COL_T231_FG { #4a }
|
||||
%COL_23_FG { #4b } %COL_2312_FG { #4b }
|
||||
%COL_30_FG { #4c } %COL_3012_FG { #4c }
|
||||
%COL_31_FG { #4d } %COL_3123_FG { #4d }
|
||||
%COL_32_FG { #4e } %COL_3231_FG { #4e }
|
||||
%COL_T3_FG { #4f } %COL_T312_FG { #4f }
|
||||
%COL_0_FG { #40 } %COL_00_FG { #40 } %COL_0012_FG { #c0 }
|
||||
%COL_1_FG { #41 } %COL_01_FG { #41 } %COL_0123_FG { #c1 }
|
||||
%COL_2_FG { #42 } %COL_02_FG { #42 } %COL_0231_FG { #c2 }
|
||||
%COL_3_FG { #43 } %COL_03_FG { #43 } %COL_0312_FG { #c3 }
|
||||
%COL_10_FG { #44 } %COL_1012_FG { #c4 }
|
||||
%COL_T1_FG { #45 } %COL_T123_FG { #c5 }
|
||||
%COL_12_FG { #46 } %COL_1231_FG { #c6 }
|
||||
%COL_13_FG { #47 } %COL_1312_FG { #c7 }
|
||||
%COL_20_FG { #48 } %COL_2012_FG { #c8 }
|
||||
%COL_21_FG { #49 } %COL_2123_FG { #c9 }
|
||||
%COL_T2_FG { #4a } %COL_T231_FG { #ca }
|
||||
%COL_23_FG { #4b } %COL_2312_FG { #cb }
|
||||
%COL_30_FG { #4c } %COL_3012_FG { #cc }
|
||||
%COL_31_FG { #4d } %COL_3123_FG { #cd }
|
||||
%COL_32_FG { #4e } %COL_3231_FG { #ce }
|
||||
%COL_T3_FG { #4f } %COL_T312_FG { #cf }
|
||||
|
||||
%TRUE { #01 }
|
||||
%FALSE { #01 }
|
||||
|
|
|
@ -2,73 +2,154 @@
|
|||
( D E V I C E M A C R O S )
|
||||
|
||||
( Device port numbers )
|
||||
%/SYSTEM.WST { LIT 02 } %r/SYSTEM.WST { LITr 02 }
|
||||
%/SYSTEM.RST { LIT 03 } %r/SYSTEM.RST { LITr 03 }
|
||||
%/SYSTEM.RED { LIT 08 } %r/SYSTEM.RED { LITr 08 }
|
||||
%/SYSTEM.GREEN { LIT 0a } %r/SYSTEM.GREEN { LITr 0a }
|
||||
%/SYSTEM.BLUE { LIT 0c } %r/SYSTEM.BLUE { LITr 0c }
|
||||
%/SYSTEM.DEBUG { LIT 0e } %r/SYSTEM.DEBUG { LITr 0e }
|
||||
%/SYSTEM.HALT { LIT 0f } %r/SYSTEM.HALT { LITr 0f }
|
||||
%/CONSOLE.VECTOR { LIT 10 } %r/CONSOLE.VECTOR { LITr 10 }
|
||||
%/CONSOLE.READ { LIT 12 } %r/CONSOLE.READ { LITr 12 }
|
||||
%/CONSOLE.WRITE { LIT 18 } %r/CONSOLE.WRITE { LITr 18 }
|
||||
%/CONSOLE.ERROR { LIT 19 } %r/CONSOLE.ERROR { LITr 19 }
|
||||
%/SCREEN.VECTOR { LIT 20 } %r/SCREEN.VECTOR { LITr 20 }
|
||||
%/SCREEN.WIDTH { LIT 22 } %r/SCREEN.WIDTH { LITr 22 }
|
||||
%/SCREEN.HEIGHT { LIT 24 } %r/SCREEN.HEIGHT { LITr 24 }
|
||||
%/SCREEN.AUTO { LIT 26 } %r/SCREEN.AUTO { LITr 26 }
|
||||
%/SCREEN.X { LIT 28 } %r/SCREEN.X { LITr 28 }
|
||||
%/SCREEN.Y { LIT 2a } %r/SCREEN.Y { LITr 2a }
|
||||
%/SCREEN.ADDR { LIT 2c } %r/SCREEN.ADDR { LITr 2c }
|
||||
%/SCREEN.PIXEL { LIT 2e } %r/SCREEN.PIXEL { LITr 2e }
|
||||
%/SCREEN.SPRITE { LIT 2f } %r/SCREEN.SPRITE { LITr 2f }
|
||||
%/CONTROLLER.VECTOR { LIT 80 } %r/CONTROLLER.VECTOR { LITr 80 }
|
||||
%/CONTROLLER.BUTTON { LIT 82 } %r/CONTROLLER.BUTTON { LITr 82 }
|
||||
%/CONTROLLER.KEY { LIT 83 } %r/CONTROLLER.KEY { LITr 83 }
|
||||
%/MOUSE.VECTOR { LIT 90 } %r/MOUSE.VECTOR { LITr 90 }
|
||||
%/MOUSE.X { LIT 92 } %r/MOUSE.X { LITr 92 }
|
||||
%/MOUSE.Y { LIT 94 } %r/MOUSE.Y { LITr 94 }
|
||||
%/MOUSE.STATE { LIT 96 } %r/MOUSE.STATE { LITr 96 }
|
||||
%/MOUSE.SCROLLX { LIT 9a } %r/MOUSE.SCROLLX { LITr 9a }
|
||||
%/MOUSE.SCROLLY { LIT 9c } %r/MOUSE.SCROLLY { LITr 9c }
|
||||
%/SYSTEM.VECTOR { LIT 00 } %r/SYSTEM.VECTOR { LITr 00 }
|
||||
%/SYSTEM.WST { LIT 02 } %r/SYSTEM.WST { LITr 02 }
|
||||
%/SYSTEM.RST { LIT 03 } %r/SYSTEM.RST { LITr 03 }
|
||||
%/SYSTEM.RED { LIT 08 } %r/SYSTEM.RED { LITr 08 }
|
||||
%/SYSTEM.GREEN { LIT 0a } %r/SYSTEM.GREEN { LITr 0a }
|
||||
%/SYSTEM.BLUE { LIT 0c } %r/SYSTEM.BLUE { LITr 0c }
|
||||
%/SYSTEM.DEBUG { LIT 0e } %r/SYSTEM.DEBUG { LITr 0e }
|
||||
%/SYSTEM.STATE { LIT 0f } %r/SYSTEM.STATE { LITr 0f }
|
||||
%/CONSOLE.VECTOR { LIT 10 } %r/CONSOLE.VECTOR { LITr 10 }
|
||||
%/CONSOLE.READ { LIT 12 } %r/CONSOLE.READ { LITr 12 }
|
||||
%/CONSOLE.WRITE { LIT 18 } %r/CONSOLE.WRITE { LITr 18 }
|
||||
%/CONSOLE.ERROR { LIT 19 } %r/CONSOLE.ERROR { LITr 19 }
|
||||
%/SCREEN.VECTOR { LIT 20 } %r/SCREEN.VECTOR { LITr 20 }
|
||||
%/SCREEN.WIDTH { LIT 22 } %r/SCREEN.WIDTH { LITr 22 }
|
||||
%/SCREEN.HEIGHT { LIT 24 } %r/SCREEN.HEIGHT { LITr 24 }
|
||||
%/SCREEN.AUTO { LIT 26 } %r/SCREEN.AUTO { LITr 26 }
|
||||
%/SCREEN.X { LIT 28 } %r/SCREEN.X { LITr 28 }
|
||||
%/SCREEN.Y { LIT 2a } %r/SCREEN.Y { LITr 2a }
|
||||
%/SCREEN.ADDR { LIT 2c } %r/SCREEN.ADDR { LITr 2c }
|
||||
%/SCREEN.PIXEL { LIT 2e } %r/SCREEN.PIXEL { LITr 2e }
|
||||
%/SCREEN.SPRITE { LIT 2f } %r/SCREEN.SPRITE { LITr 2f }
|
||||
%/CONTROLLER.VECTOR { LIT 80 } %r/CONTROLLER.VECTOR { LITr 80 }
|
||||
%/CONTROLLER.BUTTON { LIT 82 } %r/CONTROLLER.BUTTON { LITr 82 }
|
||||
%/CONTROLLER.KEY { LIT 83 } %r/CONTROLLER.KEY { LITr 83 }
|
||||
%/CONTROLLER.FUNC { LIT 84 } %r/CONTROLLER.FUNC { LITr 84 }
|
||||
%/MOUSE.VECTOR { LIT 90 } %r/MOUSE.VECTOR { LITr 90 }
|
||||
%/MOUSE.X { LIT 92 } %r/MOUSE.X { LITr 92 }
|
||||
%/MOUSE.Y { LIT 94 } %r/MOUSE.Y { LITr 94 }
|
||||
%/MOUSE.STATE { LIT 96 } %r/MOUSE.STATE { LITr 96 }
|
||||
%/MOUSE.SCROLLX { LIT 9a } %r/MOUSE.SCROLLX { LITr 9a }
|
||||
%/MOUSE.SCROLLY { LIT 9c } %r/MOUSE.SCROLLY { LITr 9c }
|
||||
%/FILE.VECTOR { LIT a0 } %r/FILE.VECTOR { LITr a0 }
|
||||
%/FILE.SUCCESS { LIT a2 } %r/FILE.SUCCESS { LITr a2 }
|
||||
%/FILE.STAT { LIT a4 } %r/FILE.STAT { LITr a4 }
|
||||
%/FILE.DELETE { LIT a6 } %r/FILE.DELETE { LITr a6 }
|
||||
%/FILE.APPEND { LIT a7 } %r/FILE.APPEND { LITr a7 }
|
||||
%/FILE.NAME { LIT a8 } %r/FILE.NAME { LITr a8 }
|
||||
%/FILE.LENGTH { LIT aa } %r/FILE.LENGTH { LITr aa }
|
||||
%/FILE.READ { LIT ac } %r/FILE.READ { LITr ac }
|
||||
%/FILE.WRITE { LIT ae } %r/FILE.WRITE { LITr ae }
|
||||
%/DATETIME.YEAR { LIT c0 } %r/DATETIME.YEAR { LITr c0 }
|
||||
%/DATETIME.MONTH { LIT c2 } %r/DATETIME.MONTH { LITr c2 }
|
||||
%/DATETIME.DAY { LIT c3 } %r/DATETIME.DAY { LITr c3 }
|
||||
%/DATETIME.HOUR { LIT c4 } %r/DATETIME.HOUR { LITr c4 }
|
||||
%/DATETIME.MINUTE { LIT c5 } %r/DATETIME.MINUTE { LITr c5 }
|
||||
%/DATETIME.SECOND { LIT c6 } %r/DATETIME.SECOND { LITr c6 }
|
||||
%/DATETIME.DOTW { LIT c7 } %r/DATETIME.DOTW { LITr c7 }
|
||||
%/DATETIME.DOTY { LIT c8 } %r/DATETIME.DOTY { LITr c8 }
|
||||
%/DATETIME.ISDST { LIT ca } %r/DATETIME.ISDST { LITr ca }
|
||||
|
||||
( Read from device ports )
|
||||
%/SYSTEM.WST? { /SYSTEM.WST DEI } %r/SYSTEM.WST? { r/SYSTEM.WST DEIr }
|
||||
%/SYSTEM.RST? { /SYSTEM.RST DEI } %r/SYSTEM.RST? { r/SYSTEM.RST DEIr }
|
||||
%/CONSOLE.READ? { /CONSOLE.READ DEI } %r/CONSOLE.READ? { r/CONSOLE.READ DEIr }
|
||||
%/SCREEN.WIDTH? { /SCREEN.WIDTH DEI* } %r/SCREEN.WIDTH? { r/SCREEN.WIDTH DEIr* }
|
||||
%/SCREEN.HEIGHT? { /SCREEN.HEIGHT DEI* } %r/SCREEN.HEIGHT? { r/SCREEN.HEIGHT DEIr* }
|
||||
%/SCREEN.AUTO? { /SCREEN.AUTO DEI } %r/SCREEN.AUTO? { r/SCREEN.AUTO DEIr }
|
||||
%/SCREEN.X? { /SCREEN.X DEI* } %r/SCREEN.X? { r/SCREEN.X DEIr* }
|
||||
%/SCREEN.Y? { /SCREEN.Y DEI* } %r/SCREEN.Y? { r/SCREEN.Y DEIr* }
|
||||
%/SCREEN.ADDR? { /SCREEN.ADDR DEI* } %r/SCREEN.ADDR? { r/SCREEN.ADDR DEIr* }
|
||||
%/CONTROLLER.BUTTON? { /CONTROLLER.BUTTON DEI } %r/CONTROLLER.BUTTON? { r/CONTROLLER.BUTTON DEIr }
|
||||
%/CONTROLLER.KEY? { /CONTROLLER.KEY DEI } %r/CONTROLLER.KEY? { r/CONTROLLER.KEY DEIr }
|
||||
%/MOUSE.X? { /MOUSE.X DEI* } %r/MOUSE.X? { r/MOUSE.X DEIr* }
|
||||
%/MOUSE.Y? { /MOUSE.Y DEI* } %r/MOUSE.Y? { r/MOUSE.Y DEIr* }
|
||||
%/MOUSE.STATE? { /MOUSE.STATE DEI } %r/MOUSE.STATE? { r/MOUSE.STATE DEIr }
|
||||
%/MOUSE.SCROLLX? { /MOUSE.SCROLLX DEI } %r/MOUSE.SCROLLX? { r/MOUSE.SCROLLX DEIr }
|
||||
%/MOUSE.SCROLLY? { /MOUSE.SCROLLY DEI } %r/MOUSE.SCROLLY? { r/MOUSE.SCROLLY DEIr }
|
||||
%/SYSTEM.VECTOR? { /SYSTEM.VECTOR DEI* } %r/SYSTEM.VECTOR? { r/SYSTEM.VECTOR DEIr* }
|
||||
%/SYSTEM.WST? { /SYSTEM.WST DEI } %r/SYSTEM.WST? { r/SYSTEM.WST DEIr }
|
||||
%/SYSTEM.RST? { /SYSTEM.RST DEI } %r/SYSTEM.RST? { r/SYSTEM.RST DEIr }
|
||||
%/SYSTEM.RED? { /SYSTEM.RED DEI* } %r/SYSTEM.RED? { r/SYSTEM.RED DEIr* }
|
||||
%/SYSTEM.GREEN? { /SYSTEM.GREEN DEI* } %r/SYSTEM.GREEN? { r/SYSTEM.GREEN DEIr* }
|
||||
%/SYSTEM.BLUE? { /SYSTEM.BLUE DEI* } %r/SYSTEM.BLUE? { r/SYSTEM.BLUE DEIr* }
|
||||
%/SYSTEM.DEBUG? { /SYSTEM.DEBUG DEI } %r/SYSTEM.DEBUG? { r/SYSTEM.DEBUG DEIr }
|
||||
%/SYSTEM.STATE? { /SYSTEM.STATE DEI } %r/SYSTEM.STATE? { r/SYSTEM.STATE DEIr }
|
||||
%/CONSOLE.VECTOR? { /CONSOLE.VECTOR DEI* } %r/CONSOLE.VECTOR? { r/CONSOLE.VECTOR DEIr* }
|
||||
%/CONSOLE.READ? { /CONSOLE.READ DEI } %r/CONSOLE.READ? { r/CONSOLE.READ DEIr }
|
||||
%/CONSOLE.WRITE? { /CONSOLE.WRITE DEI } %r/CONSOLE.WRITE? { r/CONSOLE.WRITE DEIr }
|
||||
%/CONSOLE.ERROR? { /CONSOLE.ERROR DEI } %r/CONSOLE.ERROR? { r/CONSOLE.ERROR DEIr }
|
||||
%/SCREEN.VECTOR? { /SCREEN.VECTOR DEI* } %r/SCREEN.VECTOR? { r/SCREEN.VECTOR DEIr* }
|
||||
%/SCREEN.WIDTH? { /SCREEN.WIDTH DEI* } %r/SCREEN.WIDTH? { r/SCREEN.WIDTH DEIr* }
|
||||
%/SCREEN.HEIGHT? { /SCREEN.HEIGHT DEI* } %r/SCREEN.HEIGHT? { r/SCREEN.HEIGHT DEIr* }
|
||||
%/SCREEN.AUTO? { /SCREEN.AUTO DEI } %r/SCREEN.AUTO? { r/SCREEN.AUTO DEIr }
|
||||
%/SCREEN.X? { /SCREEN.X DEI* } %r/SCREEN.X? { r/SCREEN.X DEIr* }
|
||||
%/SCREEN.Y? { /SCREEN.Y DEI* } %r/SCREEN.Y? { r/SCREEN.Y DEIr* }
|
||||
%/SCREEN.ADDR? { /SCREEN.ADDR DEI* } %r/SCREEN.ADDR? { r/SCREEN.ADDR DEIr* }
|
||||
%/SCREEN.PIXEL? { /SCREEN.PIXEL DEI } %r/SCREEN.PIXEL? { r/SCREEN.PIXEL DEIr }
|
||||
%/SCREEN.SPRITE? { /SCREEN.SPRITE DEI } %r/SCREEN.SPRITE? { r/SCREEN.SPRITE DEIr }
|
||||
%/CONTROLLER.VECTOR? { /CONTROLLER.VECTOR DEI* } %r/CONTROLLER.VECTOR? { r/CONTROLLER.VECTOR DEIr* }
|
||||
%/CONTROLLER.BUTTON? { /CONTROLLER.BUTTON DEI } %r/CONTROLLER.BUTTON? { r/CONTROLLER.BUTTON DEIr }
|
||||
%/CONTROLLER.KEY? { /CONTROLLER.KEY DEI } %r/CONTROLLER.KEY? { r/CONTROLLER.KEY DEIr }
|
||||
%/CONTROLLER.FUNC? { /CONTROLLER.FUNC DEI } %r/CONTROLLER.FUNC? { r/CONTROLLER.FUNC DEIr }
|
||||
%/MOUSE.VECTOR? { /MOUSE.VECTOR DEI* } %r/MOUSE.VECTOR? { r/MOUSE.VECTOR DEIr* }
|
||||
%/MOUSE.X? { /MOUSE.X DEI* } %r/MOUSE.X? { r/MOUSE.X DEIr* }
|
||||
%/MOUSE.Y? { /MOUSE.Y DEI* } %r/MOUSE.Y? { r/MOUSE.Y DEIr* }
|
||||
%/MOUSE.STATE? { /MOUSE.STATE DEI } %r/MOUSE.STATE? { r/MOUSE.STATE DEIr }
|
||||
%/MOUSE.SCROLLX? { /MOUSE.SCROLLX DEI* } %r/MOUSE.SCROLLX? { r/MOUSE.SCROLLX DEIr* }
|
||||
%/MOUSE.SCROLLY? { /MOUSE.SCROLLY DEI* } %r/MOUSE.SCROLLY? { r/MOUSE.SCROLLY DEIr* }
|
||||
%/FILE.VECTOR? { /FILE.VECTOR DEI* } %r/FILE.VECTOR? { r/FILE.VECTOR DEIr* }
|
||||
%/FILE.SUCCESS? { /FILE.SUCCESS DEI* } %r/FILE.SUCCESS? { r/FILE.SUCCESS DEIr* }
|
||||
%/FILE.STAT? { /FILE.STAT DEI* } %r/FILE.STAT? { r/FILE.STAT DEIr* }
|
||||
%/FILE.DELETE? { /FILE.DELETE DEI } %r/FILE.DELETE? { r/FILE.DELETE DEIr }
|
||||
%/FILE.APPEND? { /FILE.APPEND DEI } %r/FILE.APPEND? { r/FILE.APPEND DEIr }
|
||||
%/FILE.NAME? { /FILE.NAME DEI* } %r/FILE.NAME? { r/FILE.NAME DEIr* }
|
||||
%/FILE.LENGTH? { /FILE.LENGTH DEI* } %r/FILE.LENGTH? { r/FILE.LENGTH DEIr* }
|
||||
%/FILE.READ? { /FILE.READ DEI* } %r/FILE.READ? { r/FILE.READ DEIr* }
|
||||
%/FILE.WRITE? { /FILE.WRITE DEI* } %r/FILE.WRITE? { r/FILE.WRITE DEIr* }
|
||||
%/DATETIME.YEAR? { /DATETIME.YEAR DEI* } %r/DATETIME.YEAR? { r/DATETIME.YEAR DEIr* }
|
||||
%/DATETIME.MONTH? { /DATETIME.MONTH DEI } %r/DATETIME.MONTH? { r/DATETIME.MONTH DEIr }
|
||||
%/DATETIME.DAY? { /DATETIME.DAY DEI } %r/DATETIME.DAY? { r/DATETIME.DAY DEIr }
|
||||
%/DATETIME.HOUR? { /DATETIME.HOUR DEI } %r/DATETIME.HOUR? { r/DATETIME.HOUR DEIr }
|
||||
%/DATETIME.MINUTE? { /DATETIME.MINUTE DEI } %r/DATETIME.MINUTE? { r/DATETIME.MINUTE DEIr }
|
||||
%/DATETIME.SECOND? { /DATETIME.SECOND DEI } %r/DATETIME.SECOND? { r/DATETIME.SECOND DEIr }
|
||||
%/DATETIME.DOTW? { /DATETIME.DOTW DEI } %r/DATETIME.DOTW? { r/DATETIME.DOTW DEIr }
|
||||
%/DATETIME.DOTY? { /DATETIME.DOTY DEI* } %r/DATETIME.DOTY? { r/DATETIME.DOTY DEIr* }
|
||||
%/DATETIME.ISDST? { /DATETIME.ISDST DEI } %r/DATETIME.ISDST? { r/DATETIME.ISDST DEIr }
|
||||
|
||||
( Write to device ports )
|
||||
%/SYSTEM.WST! { /SYSTEM.WST DEO } %r/SYSTEM.WST! { r/SYSTEM.WST DEOr }
|
||||
%/SYSTEM.RST! { /SYSTEM.RST DEO } %r/SYSTEM.RST! { r/SYSTEM.RST DEOr }
|
||||
%/SYSTEM.RED! { /SYSTEM.RED DEO* } %r/SYSTEM.RED! { r/SYSTEM.RED DEOr* }
|
||||
%/SYSTEM.GREEN! { /SYSTEM.GREEN DEO* } %r/SYSTEM.GREEN! { r/SYSTEM.GREEN DEOr* }
|
||||
%/SYSTEM.BLUE! { /SYSTEM.BLUE DEO* } %r/SYSTEM.BLUE! { r/SYSTEM.BLUE DEOr* }
|
||||
%/SYSTEM.DEBUG! { /SYSTEM.DEBUG DEO } %r/SYSTEM.DEBUG! { r/SYSTEM.DEBUG DEOr }
|
||||
%/SYSTEM.HALT! { /SYSTEM.HALT DEO } %r/SYSTEM.HALT! { r/SYSTEM.HALT DEOr }
|
||||
%/CONSOLE.VECTOR! { /CONSOLE.VECTOR DEO* } %r/CONSOLE.VECTOR! { r/CONSOLE.VECTOR DEOr* }
|
||||
%/CONSOLE.WRITE! { /CONSOLE.WRITE DEO } %r/CONSOLE.WRITE! { r/CONSOLE.WRITE DEOr }
|
||||
%/CONSOLE.ERROR! { /CONSOLE.ERROR DEO } %r/CONSOLE.ERROR! { r/CONSOLE.ERROR DEOr }
|
||||
%/SCREEN.VECTOR! { /SCREEN.VECTOR DEO* } %r/SCREEN.VECTOR! { r/SCREEN.VECTOR DEOr* }
|
||||
%/SCREEN.WIDTH! { /SCREEN.WIDTH DEO* } %r/SCREEN.WIDTH! { r/SCREEN.WIDTH DEOr* }
|
||||
%/SCREEN.HEIGHT! { /SCREEN.HEIGHT DEO* } %r/SCREEN.HEIGHT! { r/SCREEN.HEIGHT DEOr* }
|
||||
%/SCREEN.AUTO! { /SCREEN.AUTO DEO } %r/SCREEN.AUTO! { r/SCREEN.AUTO DEOr }
|
||||
%/SCREEN.X! { /SCREEN.X DEO* } %r/SCREEN.X! { r/SCREEN.X DEOr* }
|
||||
%/SCREEN.Y! { /SCREEN.Y DEO* } %r/SCREEN.Y! { r/SCREEN.Y DEOr* }
|
||||
%/SCREEN.ADDR! { /SCREEN.ADDR DEO* } %r/SCREEN.ADDR! { r/SCREEN.ADDR DEOr* }
|
||||
%/SCREEN.PIXEL! { /SCREEN.PIXEL DEO } %r/SCREEN.PIXEL! { r/SCREEN.PIXEL DEOr }
|
||||
%/SCREEN.SPRITE! { /SCREEN.SPRITE DEO } %r/SCREEN.SPRITE! { r/SCREEN.SPRITE DEOr }
|
||||
%/CONTROLLER.VECTOR! { /CONTROLLER.VECTOR DEO* } %r/CONTROLLER.VECTOR! { r/CONTROLLER.VECTOR DEOr* }
|
||||
%/MOUSE.VECTOR! { /MOUSE.VECTOR DEO* } %r/MOUSE.VECTOR! { r/MOUSE.VECTOR DEOr* }
|
||||
%/SYSTEM.VECTOR! { /SYSTEM.VECTOR DEO* } %r/SYSTEM.VECTOR! { r/SYSTEM.VECTOR DEOr* }
|
||||
%/SYSTEM.WST! { /SYSTEM.WST DEO } %r/SYSTEM.WST! { r/SYSTEM.WST DEOr }
|
||||
%/SYSTEM.RST! { /SYSTEM.RST DEO } %r/SYSTEM.RST! { r/SYSTEM.RST DEOr }
|
||||
%/SYSTEM.RED! { /SYSTEM.RED DEO* } %r/SYSTEM.RED! { r/SYSTEM.RED DEOr* }
|
||||
%/SYSTEM.GREEN! { /SYSTEM.GREEN DEO* } %r/SYSTEM.GREEN! { r/SYSTEM.GREEN DEOr* }
|
||||
%/SYSTEM.BLUE! { /SYSTEM.BLUE DEO* } %r/SYSTEM.BLUE! { r/SYSTEM.BLUE DEOr* }
|
||||
%/SYSTEM.DEBUG! { /SYSTEM.DEBUG DEO } %r/SYSTEM.DEBUG! { r/SYSTEM.DEBUG DEOr }
|
||||
%/SYSTEM.STATE! { /SYSTEM.STATE DEO } %r/SYSTEM.STATE! { r/SYSTEM.STATE DEOr }
|
||||
%/CONSOLE.VECTOR! { /CONSOLE.VECTOR DEO* } %r/CONSOLE.VECTOR! { r/CONSOLE.VECTOR DEOr* }
|
||||
%/CONSOLE.READ! { /CONSOLE.READ DEO } %r/CONSOLE.READ! { r/CONSOLE.READ DEOr }
|
||||
%/CONSOLE.WRITE! { /CONSOLE.WRITE DEO } %r/CONSOLE.WRITE! { r/CONSOLE.WRITE DEOr }
|
||||
%/CONSOLE.ERROR! { /CONSOLE.ERROR DEO } %r/CONSOLE.ERROR! { r/CONSOLE.ERROR DEOr }
|
||||
%/SCREEN.VECTOR! { /SCREEN.VECTOR DEO* } %r/SCREEN.VECTOR! { r/SCREEN.VECTOR DEOr* }
|
||||
%/SCREEN.WIDTH! { /SCREEN.WIDTH DEO* } %r/SCREEN.WIDTH! { r/SCREEN.WIDTH DEOr* }
|
||||
%/SCREEN.HEIGHT! { /SCREEN.HEIGHT DEO* } %r/SCREEN.HEIGHT! { r/SCREEN.HEIGHT DEOr* }
|
||||
%/SCREEN.AUTO! { /SCREEN.AUTO DEO } %r/SCREEN.AUTO! { r/SCREEN.AUTO DEOr }
|
||||
%/SCREEN.X! { /SCREEN.X DEO* } %r/SCREEN.X! { r/SCREEN.X DEOr* }
|
||||
%/SCREEN.Y! { /SCREEN.Y DEO* } %r/SCREEN.Y! { r/SCREEN.Y DEOr* }
|
||||
%/SCREEN.ADDR! { /SCREEN.ADDR DEO* } %r/SCREEN.ADDR! { r/SCREEN.ADDR DEOr* }
|
||||
%/SCREEN.PIXEL! { /SCREEN.PIXEL DEO } %r/SCREEN.PIXEL! { r/SCREEN.PIXEL DEOr }
|
||||
%/SCREEN.SPRITE! { /SCREEN.SPRITE DEO } %r/SCREEN.SPRITE! { r/SCREEN.SPRITE DEOr }
|
||||
%/CONTROLLER.VECTOR! { /CONTROLLER.VECTOR DEO* } %r/CONTROLLER.VECTOR! { r/CONTROLLER.VECTOR DEOr* }
|
||||
%/CONTROLLER.BUTTON! { /CONTROLLER.BUTTON DEO } %r/CONTROLLER.BUTTON! { r/CONTROLLER.BUTTON DEOr }
|
||||
%/CONTROLLER.KEY! { /CONTROLLER.KEY DEO } %r/CONTROLLER.KEY! { r/CONTROLLER.KEY DEOr }
|
||||
%/CONTROLLER.FUNC! { /CONTROLLER.FUNC DEO } %r/CONTROLLER.FUNC! { r/CONTROLLER.FUNC DEOr }
|
||||
%/MOUSE.VECTOR! { /MOUSE.VECTOR DEO* } %r/MOUSE.VECTOR! { r/MOUSE.VECTOR DEOr* }
|
||||
%/MOUSE.X! { /MOUSE.X DEO* } %r/MOUSE.X! { r/MOUSE.X DEOr* }
|
||||
%/MOUSE.Y! { /MOUSE.Y DEO* } %r/MOUSE.Y! { r/MOUSE.Y DEOr* }
|
||||
%/MOUSE.STATE! { /MOUSE.STATE DEO } %r/MOUSE.STATE! { r/MOUSE.STATE DEOr }
|
||||
%/MOUSE.SCROLLX! { /MOUSE.SCROLLX DEO* } %r/MOUSE.SCROLLX! { r/MOUSE.SCROLLX DEOr* }
|
||||
%/MOUSE.SCROLLY! { /MOUSE.SCROLLY DEO* } %r/MOUSE.SCROLLY! { r/MOUSE.SCROLLY DEOr* }
|
||||
%/FILE.VECTOR! { /FILE.VECTOR DEO* } %r/FILE.VECTOR! { r/FILE.VECTOR DEOr* }
|
||||
%/FILE.SUCCESS! { /FILE.SUCCESS DEO* } %r/FILE.SUCCESS! { r/FILE.SUCCESS DEOr* }
|
||||
%/FILE.STAT! { /FILE.STAT DEO* } %r/FILE.STAT! { r/FILE.STAT DEOr* }
|
||||
%/FILE.DELETE! { /FILE.DELETE DEO } %r/FILE.DELETE! { r/FILE.DELETE DEOr }
|
||||
%/FILE.APPEND! { /FILE.APPEND DEO } %r/FILE.APPEND! { r/FILE.APPEND DEOr }
|
||||
%/FILE.NAME! { /FILE.NAME DEO* } %r/FILE.NAME! { r/FILE.NAME DEOr* }
|
||||
%/FILE.LENGTH! { /FILE.LENGTH DEO* } %r/FILE.LENGTH! { r/FILE.LENGTH DEOr* }
|
||||
%/FILE.READ! { /FILE.READ DEO* } %r/FILE.READ! { r/FILE.READ DEOr* }
|
||||
%/FILE.WRITE! { /FILE.WRITE DEO* } %r/FILE.WRITE! { r/FILE.WRITE DEOr* }
|
||||
%/DATETIME.YEAR! { /DATETIME.YEAR DEO* } %r/DATETIME.YEAR! { r/DATETIME.YEAR DEOr* }
|
||||
%/DATETIME.MONTH! { /DATETIME.MONTH DEO } %r/DATETIME.MONTH! { r/DATETIME.MONTH DEOr }
|
||||
%/DATETIME.DAY! { /DATETIME.DAY DEO } %r/DATETIME.DAY! { r/DATETIME.DAY DEOr }
|
||||
%/DATETIME.HOUR! { /DATETIME.HOUR DEO } %r/DATETIME.HOUR! { r/DATETIME.HOUR DEOr }
|
||||
%/DATETIME.MINUTE! { /DATETIME.MINUTE DEO } %r/DATETIME.MINUTE! { r/DATETIME.MINUTE DEOr }
|
||||
%/DATETIME.SECOND! { /DATETIME.SECOND DEO } %r/DATETIME.SECOND! { r/DATETIME.SECOND DEOr }
|
||||
%/DATETIME.DOTW! { /DATETIME.DOTW DEO } %r/DATETIME.DOTW! { r/DATETIME.DOTW DEOr }
|
||||
%/DATETIME.DOTY! { /DATETIME.DOTY DEO* } %r/DATETIME.DOTY! { r/DATETIME.DOTY DEOr* }
|
||||
%/DATETIME.ISDST! { /DATETIME.ISDST DEO } %r/DATETIME.ISDST! { r/DATETIME.ISDST DEOr }
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
( Draw proportional text )
|
||||
@draw_text ( colour text_addr* -- )
|
||||
ROT ,&colour STR ( t_addr* )
|
||||
r/SCREEN.X DEIkr* ROTr ( t_addr* | x* axis )
|
||||
&loop ( t_addr* | x* axis )
|
||||
LDAk DUP ,&render JCN ( t_addr* ascii | x* axis )
|
||||
POP POP* DEOr* RETURN ( -- )
|
||||
&render
|
||||
ASCII_TO_INDEX TO_SHORT DUP* MUL8* ( t_addr* code* code8* | x* axis )
|
||||
;acorn_font/characters ADD* ( t_addr* code* sprite* | x* axis )
|
||||
/SCREEN.ADDR! ( t_addr* code* | x* axis )
|
||||
[ LIT &colour $1 ] /SCREEN.SPRITE! ( t_addr* code* | x* axis )
|
||||
;acorn_font/width ADD* LDA TO_SHORT ( t_addr* char_width* | x* axis )
|
||||
/SCREEN.X? ADD* /SCREEN.X! ( t_addr* | x* axis )
|
||||
INC* ,&loop JMP ( t_addr* | x* axis )
|
||||
|
||||
@get_text_width ( text_addr* -- width* )
|
||||
#0000 SWP* ( width* t_addr* )
|
||||
&loop ( width* t_addr* )
|
||||
LDAk DUP ,&cont JCN ( width* t_addr* ascii )
|
||||
&end ( width* t_addr* ascii )
|
||||
POP POP* RETURN ( width* )
|
||||
&cont ( width* t_addr* ascii )
|
||||
ASCII_TO_INDEX TO_SHORT ( width* t_addr* code* )
|
||||
;acorn_font/width ADD* LDA TO_SHORT ( width* t_addr* char_width* )
|
||||
ROT* ADD* SWP* INC* ,&loop JMP ( width* t_addr* )
|
||||
|
|
@ -78,66 +78,3 @@
|
|||
RETURN
|
||||
&colour $1 &width $2
|
||||
|
||||
|
||||
|
||||
( ---------------------------------------------------------------------------- )
|
||||
( D R A W I N G S U B R O U T I N E S )
|
||||
|
||||
( Draw proportional text )
|
||||
@draw_text ( colour text_addr* -- )
|
||||
ROT ,&colour STR ( t_addr* )
|
||||
r/SCREEN.X DEIkr* ROTr ( t_addr* | x* axis )
|
||||
&loop ( t_addr* | x* axis )
|
||||
LDAk DUP ,&render JCN ( t_addr* ascii | x* axis )
|
||||
POP POP* DEOr* RETURN ( -- )
|
||||
&render
|
||||
ASCII_TO_INDEX TO_SHORT DUP* MUL8* ( t_addr* code* code8* | x* axis )
|
||||
;acorn_font/characters ADD* ( t_addr* code* sprite* | x* axis )
|
||||
/SCREEN.ADDR! ( t_addr* code* | x* axis )
|
||||
[ LIT &colour $1 ] /SCREEN.SPRITE! ( t_addr* code* | x* axis )
|
||||
;acorn_font/width ADD* LDA TO_SHORT ( t_addr* char_width* | x* axis )
|
||||
/SCREEN.X? ADD* /SCREEN.X! ( t_addr* | x* axis )
|
||||
INC* ,&loop JMP ( t_addr* | x* axis )
|
||||
|
||||
@get_text_width ( text_addr* -- width* )
|
||||
#0000 SWP* ( width* t_addr* )
|
||||
&loop ( width* t_addr* )
|
||||
LDAk DUP ,&cont JCN ( width* t_addr* ascii )
|
||||
&end ( width* t_addr* ascii )
|
||||
POP POP* RETURN ( width* )
|
||||
&cont ( width* t_addr* ascii )
|
||||
ASCII_TO_INDEX TO_SHORT ( width* t_addr* code* )
|
||||
;acorn_font/width ADD* LDA TO_SHORT ( width* t_addr* char_width* )
|
||||
ROT* ADD* SWP* INC* ,&loop JMP ( width* t_addr* )
|
||||
|
||||
|
||||
@draw_capsule ( colour width* height* )
|
||||
r/SCREEN.X? r/SCREEN.Y? ( c w* h* | x* y* )
|
||||
INCkr* r/SCREEN.Y! ( c w* h* | x* y* )
|
||||
( Draw wider rectangle )
|
||||
STH* STH* DUP STHkr* OVRr* STHr* ( c c w* h-2* | x* y* h* w* )
|
||||
#0002 SUB* ;draw_rect_filled CALL ( c | x* y* h* w* )
|
||||
( Draw taller rectangle )
|
||||
STHr* #0002 SUB* STHr* ( c w-2* h* | x* y* )
|
||||
SWPkr* INCr* r/SCREEN.X! r/SCREEN.Y! ( c w-2* h* | x* y* )
|
||||
;draw_rect_outline CALL ( | x* y* )
|
||||
( Clear stacks )
|
||||
r/SCREEN.Y! r/SCREEN.X! RETURN ( -- )
|
||||
|
||||
@draw_capsule_smooth ( colour width* height* )
|
||||
r/SCREEN.X? r/SCREEN.Y? SWPkr* ( c w* h* | sx* sy* sy* sx* )
|
||||
INCr* r/SCREEN.X! INCr* r/SCREEN.Y! ( c w* h* | sx* sy* )
|
||||
( Draw inner rectangle )
|
||||
STH* STH* DUPk ( c c c | sx* sy* h* w* )
|
||||
STHkr* #0002 SUB* OVRr* STHr* #0002 SUB* ( c c c w-2* h-2* | sx* sy* h* w* )
|
||||
;draw_rect_filled CALL ( c c | sx* sy* h* w* )
|
||||
( Draw wider rectangle )
|
||||
#0001 INCk* MOVE_DOWN MOVE_LEFT
|
||||
STHkr* OVRr* STHr* #0006 SUB* ( c c w* h-6* | sx* sy* h* w* )
|
||||
;draw_rect_outline CALL ( c | sx* sy* h* w* )
|
||||
( Draw taller rectangle )
|
||||
#0003 DUP* MOVE_RIGHT MOVE_UP
|
||||
STHr* #0006 SUB* STHr* ( c w-6* h* | sx* sy* )
|
||||
;draw_rect_outline CALL ( | sx* sy* )
|
||||
( Clear stacks )
|
||||
r/SCREEN.Y! r/SCREEN.X! RETURN ( -- )
|
|
@ -0,0 +1,14 @@
|
|||
( Convert an integer to a null-terminated string )
|
||||
@convert_byte_to_decimal_string ( byte -- text_addr* )
|
||||
TO_SHORT
|
||||
@convert_short_to_decimal_string ( value* -- text_addr* )
|
||||
;&array_end SWP*
|
||||
&loop ( addr* value* )
|
||||
#000a DIVMOD* ( addr* value/10* digit* )
|
||||
DIGIT_TO_ASCII ( addr* value* junk ascii )
|
||||
ROT* STAk NIP* DEC* SWP* ( addr-1* value* )
|
||||
DUP* ADD ,&loop JCN ( addr* value* )
|
||||
&end
|
||||
POP* INC* RETURN ( text_addr* )
|
||||
&array $4 &array_end $1 <NULL>
|
||||
|
|
@ -75,18 +75,3 @@
|
|||
LDAk* PRINTF(%d*\s)
|
||||
INC* INC* ,&loop JMP
|
||||
&end POP* POP* PRINTF(\n) RETURN
|
||||
|
||||
( Convert an integer to a null-terminated string )
|
||||
@convert_byte_to_decimal_string ( byte -- text_addr* )
|
||||
TO_SHORT
|
||||
@convert_short_to_decimal_string ( value* -- text_addr* )
|
||||
;&array_end SWP*
|
||||
&loop ( addr* value* )
|
||||
#000a DIVMOD* ( addr* value/10* digit* )
|
||||
DIGIT_TO_ASCII ( addr* value* junk ascii )
|
||||
ROT* STAk NIP* DEC* SWP* ( addr-1* value* )
|
||||
DUP* ADD ,&loop JCN ( addr* value* )
|
||||
&end
|
||||
POP* INC* RETURN ( text_addr* )
|
||||
&array $4 &array_end $1 <NULL>
|
||||
|
||||
|
|
|
@ -4,11 +4,10 @@
|
|||
|
||||
( Callbacks are two-byte addresses )
|
||||
@ui__callbacks
|
||||
( TODO: Do something with this callback, or remove it )
|
||||
&on_screen $2
|
||||
|
||||
( One callback per UI element, signature [ -- ] )
|
||||
&dec $32
|
||||
&inc $32
|
||||
&go $32
|
||||
( One callback per controller button, signature [ -- ] )
|
||||
&left $2
|
||||
|
@ -19,13 +18,16 @@
|
|||
&B $2
|
||||
&start $2
|
||||
&select $2
|
||||
( One callback per UI element, signature [ a -- ] )
|
||||
( One callback per UI element, signature [ active? -- ] )
|
||||
&draw $32
|
||||
( One callback per UI element, signature [ delta -- ] )
|
||||
&change $32
|
||||
( One callback per mouse action, signature [ state -- ]. 0: held, 1: released )
|
||||
&mouse1 $2
|
||||
&mouse2 $2
|
||||
&mouse3 $2
|
||||
&end
|
||||
( TODO: Add byte to each of the 16 zones )
|
||||
( Zones are groups of left* right* top* bottom* inclusive bounds for each control )
|
||||
@ui__zones $128
|
||||
&end
|
||||
|
|
|
@ -61,9 +61,9 @@
|
|||
LDA* CALLRETURN ( active? )
|
||||
|
||||
( Call the callback for a single UI element by index, [ index -- ] )
|
||||
@ui__press_inc ;ui__callbacks/inc ,__ui__call_callback JMP
|
||||
@ui__press_dec ;ui__callbacks/dec ,__ui__call_callback JMP
|
||||
@ui__press_go ;ui__callbacks/go ,__ui__call_callback JMP
|
||||
@ui__press_go ;ui__callbacks/go ,__ui__call_callback JMP
|
||||
@ui__press_inc #01 SWP ;ui__callbacks/change ,__ui__call_callback JMP
|
||||
@ui__press_dec #ff SWP ;ui__callbacks/change ( ... jump elided ... )
|
||||
( Calculate the real address of a callback and call )
|
||||
@__ui__call_callback ( index callback_block_start_addr* )
|
||||
ROT TO_SHORT DOUBLE ADD* LDA* CALL ( real_callback_addr* )
|
||||
|
@ -74,14 +74,14 @@
|
|||
and a callback address, followed by the number of pairs that were provided.
|
||||
For example: [ #00 ;func0 #01 ;func1 #04 ;func4 #03 ]
|
||||
Draw callbacks MUST consume the 1-byte 'active?' bool that is passed to them.
|
||||
Controller input callbacks (inc, dec, go) do not receive any data.
|
||||
Change callbacks MUST consume the 1-byte 'delta' that is passed to them (is either -1 or 1).
|
||||
Go callbacks do not receive any data.
|
||||
Callbacks SHOULD consume the return address on the return stack by calling
|
||||
either RETURN or NORETURN.
|
||||
Signature for each 'register' subroutine is: [index callback*]+ count -- )
|
||||
@ui__register_draw_callbacks ;ui__callbacks/draw ,__ui__register_callbacks JMP
|
||||
@ui__register_inc_callbacks ;ui__callbacks/inc ,__ui__register_callbacks JMP
|
||||
@ui__register_dec_callbacks ;ui__callbacks/dec ,__ui__register_callbacks JMP
|
||||
@ui__register_go_callbacks ;ui__callbacks/go ,__ui__register_callbacks JMP
|
||||
@ui__register_draw_callbacks ;ui__callbacks/draw ,__ui__register_callbacks JMP
|
||||
@ui__register_change_callbacks ;ui__callbacks/change ,__ui__register_callbacks JMP
|
||||
@ui__register_go_callbacks ;ui__callbacks/go ( ... jump elided ... )
|
||||
@__ui__register_callbacks ( [index callback*]+ count block_addr* -- )
|
||||
,&block_addr STR* ( [index callback*]+ count )
|
||||
&loop ( [index callback*]+ count )
|
||||
|
@ -142,6 +142,8 @@
|
|||
( Mouse vector )
|
||||
@ui__on_mouse ( -- )
|
||||
( TODO: Add back in the mouse2 stuff )
|
||||
|
||||
( Update the mouse button state variables )
|
||||
/MOUSE.STATE? DUP /I.MOUSE.HELD? DUPk* ( held now prev now prev now prev )
|
||||
EOR AND SWP SWP* EOR AND ( held released pressed )
|
||||
/I.MOUSE.PRESSED! /I.MOUSE.RELEASED! /I.MOUSE.HELD!
|
||||
|
@ -214,20 +216,19 @@
|
|||
BUTTON_MASK_START ;ui__callbacks/start ;&null ,&call_if_pressed JSR
|
||||
BUTTON_MASK_SELECT ;ui__callbacks/select ;&null ,&call_if_pressed JSR BRK
|
||||
( Call two callbacks if the button matching this mask was pressed.
|
||||
Calls a user-provided callback and a UI logic callback. )
|
||||
Calls a UI logic callback and a user-provided callback. )
|
||||
&call_if_pressed ( mask user_callback* ui_callback* -- )
|
||||
,&ui_callback STR* LDA* ,&user_callback STR* ( mask )
|
||||
/I.BUTTON.PRESSED? IF_NOT_MASK RETURN ( -- )
|
||||
/I.ACTIVE_ELEMENT? LIT* &ui_callback $2 CALL ( -- )
|
||||
LIT* &user_callback $2 CALLRETURN ( -- )
|
||||
&prev ( active -- )
|
||||
IF_FALSEY RETURN /I.ACTIVE_ELEMENT DEC_Z RETURN
|
||||
&next ( active -- )
|
||||
INC /I.NUM_ELEMENTS? IF_EQUAL RETURN /I.ACTIVE_ELEMENT INC_Z RETURN
|
||||
/I.ACTIVE_ELEMENT? ( active )
|
||||
[ LIT* &ui_callback $2 ] CALL ( -- )
|
||||
[ LIT* &user_callback $2 ] CALLRETURN ( -- )
|
||||
&dec ;ui__press_dec CALLRETURN
|
||||
&inc ;ui__press_inc CALLRETURN
|
||||
&go ;ui__press_go CALLRETURN
|
||||
&null RETURN
|
||||
&next #01 [ INCk JMP ]
|
||||
&prev #ff ADD /I.NUM_ELEMENTS? ;clamp CALL ;ui__set_active_control CALLRETURN
|
||||
&null RETURN
|
||||
|
||||
( Redraw the active and previously-active controls, and set prev_active to active )
|
||||
@ui__redraw_controls ( -- )
|
||||
|
|
155
tungsten2.tal
155
tungsten2.tal
|
@ -20,13 +20,13 @@
|
|||
( The currently active drawing tool. )
|
||||
%/V.ACTIVE_TOOL { #0e } %/V.ACTIVE_TOOL? { #0e LDZ } %/V.ACTIVE_TOOL! { #0e STZ }
|
||||
|
||||
%TOOL_COUNT? { #05 }
|
||||
%TOOL_COUNT? { #07 }
|
||||
|
||||
( ---------------------------------------------------------------------------- )
|
||||
( P R O G R A M S T A R T )
|
||||
|
||||
|0100
|
||||
#0080 /V.CANVAS.WIDTH! #0060 /V.CANVAS.HEIGHT! #04 /V.ACTIVE_TOOL!
|
||||
#0080 /V.CANVAS.WIDTH! #0060 /V.CANVAS.HEIGHT! #01 /V.ACTIVE_TOOL!
|
||||
;default_colour_palette ;ui__load_colour_palette CALL
|
||||
;ui__clear CALL
|
||||
;recenter_canvas CALL
|
||||
|
@ -43,8 +43,16 @@
|
|||
;ui__clear CALL
|
||||
;draw_canvas CALL
|
||||
;canvas_screen__tool /I.CALLBACK.MOUSE1!
|
||||
;canvas_screen__A /I.CALLBACK.A!
|
||||
;canvas_screen__B /I.CALLBACK.B!
|
||||
;ui__run_blank GOTO
|
||||
@canvas_screen__A
|
||||
( TODO: Think about having A trigger for press and release. Maybe a separate callback? A_UP and A_DOWN? )
|
||||
/MOUSE.STATE? BITMASK_1 ORA /MOUSE.STATE!
|
||||
/MOUSE.VECTOR? CALL
|
||||
RETURN
|
||||
|
||||
|
||||
@canvas_screen__B NORETURN ;tool_screen GOTO
|
||||
@canvas_screen__tool
|
||||
( Dispatch control to the routine of the active tool )
|
||||
|
@ -109,32 +117,94 @@
|
|||
;ui__clear CALL
|
||||
( Draw non-interactive elements )
|
||||
COL_0 ;fill_screen_with_colour CALL
|
||||
( Labels )
|
||||
#0039 CENTER_LEFT? /SCREEN.X! #0008 CENTER_DOWN? /SCREEN.Y!
|
||||
COL_1 ;&colour_text ;draw_text CALL
|
||||
#0034 CENTER_LEFT? /SCREEN.X! #0016 CENTER_DOWN? /SCREEN.Y!
|
||||
COL_1 ;&shape_text ;draw_text CALL
|
||||
#0040 CENTER_LEFT? /SCREEN.X! #0024 CENTER_DOWN? /SCREEN.Y!
|
||||
COL_1 ;&pattern_text ;draw_text CALL
|
||||
|
||||
#0008 CENTER_LEFT? /SCREEN.X! #0008 CENTER_DOWN? /SCREEN.Y!
|
||||
;sprite/capsule_half /SCREEN.ADDR!
|
||||
#01 /SCREEN.AUTO!
|
||||
COL_T2 /SCREEN.SPRITE! COL_T2_X /SCREEN.SPRITE!
|
||||
#0003 MOVE_RIGHT
|
||||
COL_T2 /SCREEN.SPRITE! COL_T2_X /SCREEN.SPRITE!
|
||||
#0003 MOVE_RIGHT
|
||||
COL_T2 /SCREEN.SPRITE! COL_T2_X /SCREEN.SPRITE!
|
||||
#0003 MOVE_RIGHT
|
||||
COL_T2 /SCREEN.SPRITE! COL_T2_X /SCREEN.SPRITE!
|
||||
#00 /SCREEN.AUTO!
|
||||
|
||||
|
||||
( Register inc/dec callbacks )
|
||||
#00 ;tool_screen__dec__palette
|
||||
#01 ;ui__register_dec_callbacks CALL
|
||||
#00 ;tool_screen__change__palette
|
||||
#01 ;ui__register_change_callbacks CALL
|
||||
( Register draw callbacks )
|
||||
#00 ;tool_screen__draw__palette
|
||||
#01 ;ui__register_draw_callbacks CALL
|
||||
#01 ;tool_screen__draw__colour
|
||||
#02 ;ui__register_draw_callbacks CALL
|
||||
( Register raw input callbacks )
|
||||
;tool_screen__B /I.CALLBACK.B!
|
||||
( Finish callback registration )
|
||||
#0001 ;ui__run GOTO
|
||||
#0002 ;ui__run GOTO
|
||||
&colour_text "Colour: <NULL>
|
||||
&shape_text "Shape: <NULL>
|
||||
&pattern_text "Pattern: <NULL>
|
||||
@tool_screen__B NORETURN ;canvas_screen GOTO
|
||||
@tool_screen__dec__palette
|
||||
/V.ACTIVE_TOOL? INC TOOL_COUNT? MOD /V.ACTIVE_TOOL! RETURN
|
||||
@tool_screen__change__palette ( delta -- )
|
||||
/V.ACTIVE_TOOL? ADD TOOL_COUNT? ;clamp CALL /V.ACTIVE_TOOL! RETURN
|
||||
|
||||
|
||||
@tool_screen__draw__palette
|
||||
;draw_tool_palette_background CALL
|
||||
@tool_screen__draw__colour ( active? )
|
||||
POP RETURN
|
||||
COL_12 COL_32 CHOOSE
|
||||
#0040 CENTER_LEFT? /SCREEN.X! #002c CENTER_DOWN? /SCREEN.Y!
|
||||
#0020 DUP* ;draw_text CALLRETURN
|
||||
|
||||
|
||||
@tool_screen__draw__palette ( active? )
|
||||
( Choose between the real active tool and an impossible tool number )
|
||||
#ff /V.ACTIVE_TOOL? CHOOSE ,&active_tool STR
|
||||
( Draw a label on top, containing the name of the active tool )
|
||||
#0040 CENTER_LEFT? /SCREEN.X! #002c CENTER_UP? /SCREEN.Y!
|
||||
COL_20 #0080 /V.ACTIVE_TOOL? ;get_tool_name CALL ;draw_button CALL
|
||||
( Draw a large capsule to use as a background for the tool icons )
|
||||
#001c CENTER_UP! COL_2 ( colour -- )
|
||||
;get_tool_palette_width CALL ( colour width* )
|
||||
/SCREEN.WIDTH? OVR* SUB* HALVE* ( colour width* bg_x* )
|
||||
/SCREEN.X! #001b ;draw_capsule CALL ( -- )
|
||||
( Draw each of the large tool icons )
|
||||
TOOL_COUNT? #00 ( total i )
|
||||
&loop
|
||||
EQUk ,&end JCN
|
||||
DUPk /V.ACTIVE_TOOL? EQU
|
||||
;draw_tool_palette_icon CALL
|
||||
INC ,&loop JMP
|
||||
&end
|
||||
POP* RETURN
|
||||
&loop DUPk [ LIT &active_tool $1 ] EQU
|
||||
;draw_tool_palette_icon CALL
|
||||
INC GTHk ,&loop JCN
|
||||
&end POP* RETURN
|
||||
|
||||
|
||||
@get_tool_name ( index -- text_addr* )
|
||||
MUL4 JMP
|
||||
;&pan RETURN
|
||||
;&brush1 RETURN
|
||||
;&brush2 RETURN
|
||||
;&brush3 RETURN
|
||||
;&line RETURN
|
||||
;&rect RETURN
|
||||
;&fill RETURN
|
||||
&pan "Pan <SPACE> "canvas <NULL>
|
||||
&brush1 "Brush <SPACE> "1 <NULL>
|
||||
&brush2 "Brush <SPACE> "2 <NULL>
|
||||
&brush3 "Brush <SPACE> "3 <NULL>
|
||||
&line "Line <SPACE> "tool <NULL>
|
||||
&rect "Rectangle <SPACE> "tool <NULL>
|
||||
&fill "Bucket <SPACE> "fill <NULL>
|
||||
|
||||
|
||||
|
||||
( Calculates the width of the tool palette from the number of icons )
|
||||
@get_tool_palette_width ( -- width* )
|
||||
#00 TOOL_COUNT? #001a MUL* INC* RETURN ( width* )
|
||||
( Draw a single tool icon )
|
||||
@draw_tool_palette_icon ( index active? )
|
||||
LITr 00 STHk* POP LITr 00 STH ( | index* active index* )
|
||||
|
@ -143,21 +213,10 @@
|
|||
SUB* HALVE* ADD2* ( zone_0_x* | index* active index* )
|
||||
STHr* #001a MUL* ADD* /SCREEN.X! ( | index* active )
|
||||
STHr STHkr /V.ACTIVE_TOOL? EQU ( active? current_tool? | index* )
|
||||
COL_0 COL_2 CHOOSE COL_3 CHOOSE ( colour | index* )
|
||||
COL_0 COL_1 CHOOSE COL_3 CHOOSE ( colour | index* )
|
||||
#0017 DUP* ;draw_capsule_smooth CALL ( | index* )
|
||||
COL_T1 ;tool_icon STHr* #0048 MUL* ADD* ( colour 3x3_sprite_addr* )
|
||||
;draw_3x3_sprite CALLRETURN
|
||||
( Draw a large capsule to use as a background for the tool icons )
|
||||
@draw_tool_palette_background ( -- )
|
||||
#001c CENTER_UP! COL_1 ( colour -- )
|
||||
,get_tool_palette_width JSR ( colour width* )
|
||||
/SCREEN.WIDTH? OVR* SUB* HALVE* ( colour width* bg_x* )
|
||||
/SCREEN.X! #001b ;draw_capsule CALLRETURN ( -- )
|
||||
( Calculates the width of the tool palette from the number of icons )
|
||||
@get_tool_palette_width ( -- width* )
|
||||
#00 TOOL_COUNT? #001a MUL* INC* RETURN ( width* )
|
||||
( Draw a 1-bit 3x3 sprite )
|
||||
@draw_3x3_sprite ( colour sprite_addr* -- )
|
||||
COL_T2 ;tool_icon STHr* #0048 MUL* ADD* ( colour 3x3_sprite_addr* )
|
||||
( Draw the 1-bit 3x3 sprite ) ( colour sprite_addr* )
|
||||
/SCREEN.ADDR! #26 /SCREEN.AUTO!
|
||||
/SCREEN.SPRITE DEOk DEOk DEO
|
||||
#00 /SCREEN.AUTO! #0018 MOVE_UP
|
||||
|
@ -225,6 +284,16 @@
|
|||
@gth_signed* SWP*
|
||||
@lth_signed* #8000 STHk* ADD* SWP* STHr* ADD* GTH* RETURN
|
||||
|
||||
( Returns 0 <= index < total )
|
||||
@clamp ( index total -- index )
|
||||
LITr 80 ( index total | 80 )
|
||||
( Subtract 1 from total, add #80 to index and total )
|
||||
STHkr INC SUB SWP STHkr SUB ( max index | 80 )
|
||||
( Keep max if max < index, else keep index )
|
||||
LTHk JMP SWP POP STHkr ( index 80 | 80 )
|
||||
( Keep 80 if index < 80, else keep index )
|
||||
LTHk JMP SWP NIP STHr SUB RETURN ( index )
|
||||
|
||||
|
||||
|
||||
( Recalculate the canvas position in order to center the canvas on the screen )
|
||||
|
@ -244,7 +313,7 @@
|
|||
/V.CANVAS.X? /SCREEN.X! ( sprite_height* )
|
||||
/V.CANVAS.WIDTH? CEIL8DIV8* ( sprite_height* sprite_width* )
|
||||
&loop ( sprite_height* sprite_width* )
|
||||
COL_0123_2B /SCREEN.SPRITE! ( sprite_height* sprite_width* )
|
||||
COL_0123 /SCREEN.SPRITE! ( sprite_height* sprite_width* )
|
||||
DEC* DUP* GTH0* ,&loop JCN ( sprite_height* sprite_width* )
|
||||
( Move down to the next sprite row )
|
||||
POP* DEC* #0008 MOVE_DOWN ( sprite_height* )
|
||||
|
@ -259,9 +328,19 @@
|
|||
~_draw_line.tal
|
||||
~_draw_rect.tal
|
||||
~_draw_shapes.tal
|
||||
~_draw_text.tal
|
||||
~_integer_to_string.tal
|
||||
~_draw_ui_elements.tal
|
||||
~_acorn_font.tal
|
||||
|
||||
|
||||
@default_colour_palette
|
||||
14ad 269d 2689
|
||||
14ac 269a 268f
|
||||
14ae 269a 3780
|
||||
14ac 269b 378d
|
||||
1d9e 161a 1010
|
||||
e19a a116 0112
|
||||
|
||||
|
||||
@tool_icon
|
||||
|
@ -280,10 +359,18 @@
|
|||
&line 0000 0000 0000 0000 0000 0000 0001 0001 0000 0040 40f0 4040
|
||||
0000 0000 0000 0005 0204 0810 2040 8000 0000 0000 0000 0000
|
||||
041f 0404 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
|
||||
&rect 0000 0008 083e 080b 0000 0000 0000 00ff 0000 0020 20f8 20a0
|
||||
0302 0302 0302 030b 55aa 55aa 55aa 55ff 8080 8080 8080 80a0
|
||||
083e 0808 0000 0000 0000 0000 0000 0000 20f8 2020 0000 0000
|
||||
&fill 0000 0000 0000 0001 0000 0000 385f af53 0000 0000 0000 c0e0
|
||||
0205 0a14 1008 0402 8100 0401 1224 4890 f0f0 b030 3030 2020
|
||||
0100 0000 0000 0000 20c0 0000 0000 0000 2000 0000 0000 0000
|
||||
|
||||
@sprite
|
||||
&cursor 80c0 e0f0 f8e0 1000
|
||||
&blank 0000 0000 0000 0000
|
||||
&left_chevron 1030 70f0 7030 1000
|
||||
&cursor 80c0 e0f0 f8e0 1000
|
||||
&capsule_half 7f80 8080 8080 807f
|
||||
&blank 0000 0000 0000 0000
|
||||
|
||||
|
||||
~_user_interface_callbacks.tal
|
||||
|
|
Loading…
Reference in New Issue