~rabbits/nasu

2d969dc781543bc4db8dc0cf0da577d8692948b0 — Devine Lu Linvega 8 months ago 55340ee
Optimized font-drawing
2 files changed, 146 insertions(+), 72 deletions(-)

M src/font.tal
M src/nasu.tal
M src/font.tal => src/font.tal +112 -48
@@ 1,49 1,113 @@
@font ( block8 )
0000 0000 0000 0000 1010 1010 1000 1000
2828 0000 0000 0000 44fe 4444 44fe 4400
107e 807c 02fc 1000 0044 0810 2044 0000
7884 8864 9a84 7a00 1020 0000 0000 0000
2040 4040 4040 2000 0804 0404 0404 0800
0044 2810 2844 0000 0010 107c 1010 0000
0000 0000 0010 2000 0000 007c 0000 0000
0000 0000 0000 1000 0204 0810 2040 8000
7c82 8282 8282 7c00 3010 1010 1010 3800
7c82 027c 8080 fe00 7c82 021c 0282 7c00
2242 82fe 0202 0200 fe80 807c 0282 7c00
7c82 80fc 8282 7c00 fe82 0408 0810 1000
7c82 827c 8282 7c00 7c82 827e 0202 0200
0000 1000 1000 0000 0000 1000 1010 2000
0008 1020 1008 0000 0000 7c00 7c00 0000
0010 0804 0810 0000 7c82 820c 1000 1000
7c82 92aa aa92 6400 7c82 82fe 8282 8200
fc82 82fc 8282 fc00 7c82 8080 8082 7c00
fc82 8282 8282 fc00 fe80 80f0 8080 fe00
fe80 80f0 8080 8000 7c82 808e 8282 7c00
8282 82fe 8282 8200 3810 1010 1010 3800
0602 0202 0282 7c00 8284 88f0 8884 8200
8080 8080 8080 fe00 ec92 9292 9292 9200
c2a2 a292 8a8a 8600 7c82 8282 8282 7c00
fc82 82fc 8080 8000 7c82 8282 8a84 7a00
fc82 82fc 8282 8200 7c82 807c 0282 7c00
fe10 1010 1010 1000 8282 8282 8286 7a00
8282 4444 2828 1000 9292 9292 9292 6c00
8244 2810 2844 8200 8282 4428 1010 1000
fe02 0c10 6080 fe00 6040 4040 4040 6000
8040 2010 0804 0200 0c04 0404 0404 0c00
1028 0000 0000 0000 0000 0000 0000 fe00
1008 0000 0000 0000 0000 7c02 7e82 7e00
0000 fc82 fc82 fc00 0000 7c82 8082 7c00
0000 027e 8282 7e00 0000 7c82 fc80 7e00
0000 7c82 e080 8000 0000 7c82 7e02 fc00
0000 80fc 8282 8200 0000 1000 1010 1000
0000 0200 0282 7c00 0000 8284 f884 8200
0000 8080 8080 7e00 0000 6c92 9292 9200
0000 bcc2 8282 8200 0000 7c82 8282 7c00
0000 fc82 fc80 8000 0000 7c82 7e02 0200
0000 bcc2 8080 8000 0000 7e80 7c02 fc00
0000 fe10 1010 1000 0000 8282 8282 7c00
0000 8282 4428 1000 0000 9292 9292 6c00
0000 8244 3844 8200 0000 8282 7e02 7c00
0000 fe02 7c80 fe00 2040 4080 4040 2000
1010 1010 1010 1000 0804 0402 0404 0800
0000 0032 4c00 0000 aa55 aa55 aa55 aa55
0000 0000 0000 0000 6060 6060 6000 6000
6666 6600 0000 0000 006c fe6c 6cfe 6c00
183e 603c 067c 1800 0066 6c18 3066 4600
386c 3870 decc 7600 6060 6000 0000 0000
0e1c 1818 181c 0e00 7038 1818 1838 7000
0066 3cff 3c66 0000 0018 187e 1818 0000
0000 0000 0030 3060 0000 007e 0000 0000
0000 0000 0018 1800 0206 0c18 3060 4000
3c66 6e76 6666 3c00 1838 1818 1818 7e00
3c66 060c 1830 7e00 7e0c 180c 0666 3c00
0c1c 3c6c 7e0c 0c00 7e60 7c06 0666 3c00
3c60 607c 6666 3c00 7e06 0c18 3030 3000
3c66 663c 6666 3c00 3c66 663e 060c 3800
0060 6000 6060 0000 0030 3000 3030 6000
0c18 3060 3018 0c00 0000 7e00 007e 0000
6030 180c 1830 6000 3c66 060c 1800 1800
3c66 6e6a 6e60 3e00 183c 6666 7e66 6600
7c66 667c 6666 7c00 3c66 6060 6066 3c00
786c 6666 666c 7800 7e60 607c 6060 7e00
7e60 607c 6060 6000 3e60 606e 6666 3e00
6666 667e 6666 6600 7830 3030 3030 7800
0606 0606 0666 3c00 666c 7870 786c 6600
6060 6060 6060 7e00 c6ee fed6 c6c6 c600
6676 7e7e 6e66 6600 3c66 6666 6666 3c00
7c66 667c 6060 6000 3c66 6666 766c 3600
7c66 667c 6c66 6600 3c66 603c 0666 3c00
7e18 1818 1818 1800 6666 6666 6666 3e00
6666 6666 663c 1800 c6c6 c6d6 feee c600
6666 3c18 3c66 6600 6666 663c 1818 1800
7e06 0c18 3060 7e00 7860 6060 6060 7800
4060 3018 0c06 0200 7818 1818 1818 7800
1038 6cc6 0000 0000 0000 0000 0000 fe00
00c0 6030 0000 0000 0000 3c06 3e66 3e00
6060 7c66 6666 7c00 0000 3c60 6060 3c00
0606 3e66 6666 3e00 0000 3c66 7e60 3c00
1c30 7c30 3030 3000 0000 3e66 663e 067c
6060 7c66 6666 6600 1800 3818 1818 3c00
1800 1818 1818 1870 6060 666c 786c 6600
7030 3030 3030 7800 0000 ecfe d6c6 c600
0000 7c66 6666 6600 0000 3c66 6666 3c00
0000 7c66 6666 7c60 0000 3e66 6666 3e06
0000 7c66 6060 6000 0000 3e60 3c06 7c00
0018 7e18 1818 0e00 0000 6666 6666 3e00
0000 6666 663c 1800 0000 c6c6 d67c 6c00
0000 663c 183c 6600 0000 6666 663e 067c
0000 7e0c 1830 7e00 1c30 3060 3030 1c00
6060 6060 6060 6060 7018 180c 1818 7000
0060 f29e 0c00 0000 0018 1834 3462 7e00
003c 6660 663c 0838 6600 0066 6666 3e00
0c18 003c 7e60 3c00 1866 003c 067e 3e00
6600 3c06 3e66 3e00 3018 003c 067e 3e00
1818 003c 067e 3e00 0000 3c60 603c 0818
1866 003c 7e60 3c00 6600 3c66 7e60 3c00
3018 003c 7e60 3c00 6600 0038 1818 3c00
1866 0038 1818 3c00 6030 0038 1818 3c00
6600 183c 667e 6600 1800 183c 667e 6600
0c18 7e60 7c60 7e00 0000 7e1b 7fd8 7e00
3f78 d8de f8d8 df00 1866 003c 6666 3c00
6600 003c 6666 3c00 3018 003c 6666 3c00
1866 0066 6666 3e00 3018 0066 6666 3e00
6600 6666 663e 067c 6600 3c66 6666 3c00
6600 6666 6666 3e00 1818 3c60 603c 1818
1c3a 307c 3030 7e00 6666 3c18 3c18 1800
1c36 667c 6666 7c60 1e30 7c30 3030 6000
0c18 003c 067e 3e00 0c18 0038 1818 3c00
0c18 003c 6666 3c00 0c18 0066 6666 3e00
3458 007c 6666 6600 3458 0066 766e 6600
003c 063e 663e 003c 003c 6666 663c 003c
0018 0018 3060 663c 0000 003e 3030 3000
0000 007c 0c0c 0c00 c6cc d836 6bc3 860f
c6cc d836 6ed6 9f06 0018 0018 1818 1818
1b36 6cd8 6c36 1b00 d86c 361b 366c d800
3458 003c 067e 3e00 3458 003c 6666 3c00
023c 666e 7666 3c40 0002 3c6e 7666 3c40
0000 7edb dfd8 7e00 7fd8 d8de d8d8 7f00
3018 0018 3c66 7e66 3458 0018 3c66 7e66
3458 3c66 6666 663c 6600 0000 0000 0000
1830 6000 0000 0000 0020 7020 2020 0000
7aca caca 7a0a 0a0a 7ec3 bdb1 b1bd c37e
7ec3 bda5 b9ad c37e f15b 5f55 5100 0000
6600 e666 66f6 061c f666 6666 66f6 061c
0066 763c 6e66 0000 007c 0c0c 0c7e 0000
001e 060e 1e36 0000 007e 0c0c 0c0c 0000
007c 0666 6666 0000 0070 3030 3030 0000
0078 3018 1818 0000 007e 3636 3636 0000
606e 6666 667e 0000 0078 1818 0000 0000
007c 0c0c 0c7c 0000 607e 0606 060e 0000
006c 3e66 666e 0000 0038 1818 1878 0000
007c 6c6c 6c38 0000 0036 3636 367e 0000
007e 6676 067e 0000 0066 663c 0e7e 0000
007c 0c6c 6c68 6000 0078 0c0c 0c0c 0000
00d6 d6d6 d6fe 0000 007c 6c6c 6cec 0000
0070 3030 3030 3000 007c 0c0c 0c0c 0c00
00fe 6666 667e 0000 007e 6676 0606 0600
006c 6c38 1818 1800 0e1b 3c66 663c d870
0010 386c c682 0000 66f7 9999 ef66 0000
0000 76dc c8dc 7600 1c36 667c 6666 7c60
00fe 6662 6060 60f8 0000 fe6c 6c6c 6c48
fe66 3018 3066 fe00 001e 386c 6c6c 3800
0000 6c6c 6c6c 7fc0 0000 7e18 1818 1810
3c18 3c66 663c 183c 003c 667e 6666 3c00
003c 6666 6624 6600 1c36 78dc ccec 7800
0c18 3854 5438 3060 0010 7cd6 d6d6 7c10
3e70 607e 6070 3e00 3c66 6666 6666 6600
007e 007e 007e 0000 1818 7e18 1800 7e00
3018 0c18 3000 7e00 0c18 3018 0c00 7e00
000e 1b1b 1818 1818 1818 1818 d8d8 7000
1818 007e 0018 1800 0032 4c00 324c 0000
386c 3800 0000 0000 387c 3800 0000 0000
0000 0000 6060 0000 0000 0f18 d870 3000
386c 6c6c 6c00 0000 386c 1830 7c00 0000
780c 380c 7800 0000 00fe 0000 0000 0000

M src/nasu.tal => src/nasu.tal +34 -24
@@ 48,9 48,9 @@
|0100 ( -> )

	( theme )
	#0a6f .System/r DEO2
	#05cf .System/g DEO2
	#0caf .System/b DEO2
	#086f .System/r DEO2
	#059f .System/g DEO2
	#0abf .System/b DEO2
	( size )
	#012e .Screen/width DEO2
	#00f0 .Screen/height DEO2


@@ 886,7 886,10 @@ JMP2r
	( label )
	.preview/x1 LDZ2 .Screen/x DEO2
	.preview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2
	.settings/ratio LDZ #03 ;draw-byte JSR2
	#01 .Screen/auto DEO
	#03 ;draw-chr/color STA
	.settings/ratio LDZ ;draw-byte JSR2
	#00 .Screen/auto DEO

JMP2r



@@ 894,9 897,12 @@ JMP2r

	.colorview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2
	.colorview/x1 LDZ2 .Screen/x DEO2
	.System/r ,&get-color JSR #03 ;draw-hex JSR2
	.System/g ,&get-color JSR #03 ;draw-hex JSR2
	.System/b ,&get-color JSR #03 ;draw-hex JSR2
	#01 .Screen/auto DEO
	#03 ;draw-chr/color STA
	.System/r ,&get-color JSR ;draw-hex JSR2
	.System/g ,&get-color JSR ;draw-hex JSR2
	.System/b ,&get-color JSR ;draw-hex JSR2
	#00 .Screen/auto DEO

	.colorview/x1 LDZ2 .colorview/y1 LDZ2
		OVR2 OVR2 [ .System/r ,&get-color JSR ] ,&slider JSR


@@ 938,7 944,10 @@ JMP2r
	( label )
	.blendview/x1 LDZ2 .Screen/x DEO2
	.blendview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2
	( get blending ) .settings/blend LDZ #03 ;draw-byte JSR2
	#01 .Screen/auto DEO
	#03 ;draw-chr/color STA
	( get blending ) .settings/blend LDZ ;draw-byte JSR2
	#00 .Screen/auto DEO

	( y )
	.blendview/x1 LDZ2 #0010 ADD2 .Screen/x DEO2


@@ 959,19 968,26 @@ JMP2r
	( position )
	.dataview/x1 LDZ2 .Screen/x DEO2
	.dataview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2
	.selection/a LDZ #03 ;draw-byte JSR2
	#01 .Screen/auto DEO
	#03 ;draw-chr/color STA
	.selection/a LDZ ;draw-byte JSR2
	#00 .Screen/auto DEO
	.dataview/y1 LDZ2 .Screen/y DEO2
	#01 .Screen/auto DEO
	#0400
	&loop
		.dataview/x1 LDZ2 .Screen/x DEO2
		#00 OVR #10 SFT .settings/focus LDZ2 ADD2
			( ch1 ) LDA2k #01 ;draw-short JSR2
			#01 ;draw-chr/color STA
			( ch1 ) LDA2k ;draw-short JSR2
			.Screen/x DEI2k #000c ADD2 ROT DEO2
			( ch2 ) #0008 ADD2 LDA2 #02 ;draw-short JSR2
			#02 ;draw-chr/color STA
			( ch2 ) #0008 ADD2 LDA2 ;draw-short JSR2
		( skip line )
		.Screen/y DEI2k #0008 ADD2 ROT DEO2
		INC GTHk ,&loop JCN
	POP2
	#00 .Screen/auto DEO

JMP2r



@@ 1047,28 1063,22 @@ JMP2r

( drawing primitives )

@draw-short ( short* color -- )
@draw-short ( short* -- )

	STH SWP STHkr ,draw-byte JSR STHr
	SWP ,draw-byte JSR

@draw-byte ( byte color -- )
@draw-byte ( byte -- )

	STH DUP #04 SFT STHkr ,draw-hex JSR #0f AND STHr
	 DUP #04 SFT ,draw-hex JSR

@draw-hex ( char color -- )
@draw-hex ( char -- )

	SWP #0f AND [ DUP #09 GTH #07 MUL ADD #30 ADD ]

	#20 SUB #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2
	.Screen/sprite DEO
	.Screen/x DEI2k #0008 ADD2 ROT DEO2

JMP2r
	 #0f AND DUP #09 GTH #07 MUL ADD #30 ADD

@draw-chr ( char -- )

	#20 SUB #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2
	[ LIT &color 01 ] .Screen/sprite DEO
	[ LIT &color 03 ] .Screen/sprite DEO

JMP2r