Browse code

Improved clock

neauoire authored on 02/04/2021 04:44:23
Showing 17 changed files
... ...
@@ -16,21 +16,27 @@ WITH REGARD TO THIS SOFTWARE.
16 16
 
17 17
 typedef unsigned char Uint8;
18 18
 
19
+int
20
+clamp(int val, int min, int max)
21
+{
22
+	return (val >= min) ? (val <= max) ? val : max : min;
23
+}
24
+
19 25
 int
20 26
 main()
21 27
 {
22 28
 	int i;
23 29
 	printf("60 points on a circle128(bytex,bytey):\n\n");
24 30
 	for(i = 0; i < 60; ++i) {
25
-		double cx = 128, cy = 128, r = 127;
26
-		double pos = (60 - i + 30) % 60;
31
+		double cx = 128, cy = 128, r = 128;
32
+		double pos = (i - 15) % 60;
27 33
 		double deg = (pos / 60.0) * 360.0;
28 34
 		double rad = deg * (PI / 180);
29 35
 		double x = cx + r * cos(rad);
30 36
 		double y = cy + r * sin(rad);
31 37
 		if(i > 0 && i % 8 == 0)
32 38
 			printf("\n");
33
-		printf("%02x%02x ", (Uint8)x, (Uint8)y);
39
+		printf("%02x%02x ", (Uint8)clamp(x, 0x00, 0xff), (Uint8)clamp(y, 0x00, 0xff));
34 40
 	}
35 41
 	printf("\n\n");
36 42
 	return 0;
... ...
@@ -15,7 +15,7 @@
15 15
 
16 16
 ( vectors )
17 17
 
18
-|0200 ,RESET JMP2
18
+|0200 ^RESET JMP
19 19
 |0204 ,ERROR JMP2
20 20
 |0208 ,FRAME JMP2
21 21
 
... ...
@@ -5,7 +5,7 @@
5 5
 ( devices )
6 6
 
7 7
 |0100 ;Console { pad 8 char 1 byte 1 short 2 }
8
-|0200 ,RESET JMP2
8
+|0200 ^RESET JMP
9 9
 |0204 ,ERROR JMP2
10 10
 |0208 ,FRAME JMP2
11 11
 
... ...
@@ -15,7 +15,7 @@
15 15
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
16 16
 |0130 ;Controller { p1 1 }
17 17
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
18
-|0200 ,RESET JMP2
18
+|0200 ^RESET JMP
19 19
 |0204 ,ERROR JMP2
20 20
 |0208 ,FRAME JMP2
21 21
 
... ...
@@ -13,7 +13,7 @@
13 13
 |0130 ;Controller { buttons 1 }
14 14
 |0140 ;Keys { key 1 }
15 15
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
16
-|0200 ,RESET JMP2
16
+|0200 ^RESET JMP
17 17
 |0204 ,ERROR JMP2
18 18
 |0208 ,FRAME JMP2
19 19
 
... ...
@@ -14,7 +14,7 @@
14 14
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
15 15
 |0150 ;Mouse  { x 2 y 2 state 1 chord 1 }
16 16
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
17
-|0200 ,RESET JMP2
17
+|0200 ^RESET JMP
18 18
 |0204 ,ERROR JMP2
19 19
 |0208 ,FRAME JMP2
20 20
 
... ...
@@ -26,7 +26,7 @@
26 26
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
27 27
 |0150 ;Mouse  { x 2 y 2 state 1 chord 1 }
28 28
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
29
-|0200 ,RESET JMP2
29
+|0200 ^RESET JMP
30 30
 |0204 ,ERROR JMP2
31 31
 |0208 ,FRAME JMP2
32 32
 
... ...
@@ -1,7 +1,9 @@
1 1
 %RTN { JMP2r }
2 2
 %ABS2 { DUP2 #000f SFT2 EQU #04 JNZ #ffff MUL2 }
3
-%SCALE { #0002 DIV2 #0020 ADD2 }
3
+%SCALEX { #0002 DIV2 ~Screen.width #0002 DIV2 ADD2 #0040 SUB2 }
4
+%SCALEY { #0002 DIV2 ~Screen.height #0002 DIV2 ADD2 #0040 SUB2 }
4 5
 %12HOURS { DUP #0c GTH #0c MUL SUB }
6
+%MOD { DUP2 DIV MUL SUB }
5 7
 
6 8
 ;current { second 1 }
7 9
 ;line { x0 2 y0 2 x 2 y 2 sx 2 sy 2 dx 2 dy 2 e1 2 e2 2 }
... ...
@@ -11,11 +13,11 @@
11 13
 ( devices )
12 14
 
13 15
 |0100 ;Console { pad 8 char 1 byte 1 short 2 }
14
-|0110 ;Screen { width 2 height 2 pad 4 y 2 x 2 color 1 }
16
+|0110 ;Screen { width 2 height 2 pad 4 x 2 y 2 color 1 }
15 17
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
16 18
 |0190 ;Time { year 2 month 1 day 1 hour 1 minute 1 second 1 dow 1 doy 2 isdst 1 get 1 }
17 19
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
18
-|0200 ,RESET JMP2
20
+|0200 ^RESET JMP
19 21
 |0204 ,ERROR JMP2
20 22
 |0208 ,FRAME JMP2
21 23
 
... ...
@@ -36,46 +38,37 @@ BRK
36 38
 	~Time.second =current.second
37 39
 
38 40
 	( clear )
39
-	#0080 SCALE #0080 SCALE ~needles.sx ~needles.sy #00 ,draw-line JSR2
40
-	#0080 SCALE #0080 SCALE ~needles.mx ~needles.my #00 ,draw-line JSR2
41
-	#0080 SCALE #0080 SCALE ~needles.hx ~needles.hy #00 ,draw-line JSR2
41
+	#0080 SCALEX #0080 SCALEY ~needles.sx ~needles.sy #00 ,draw-line JSR2
42
+	#0080 SCALEX #0080 SCALEY ~needles.mx ~needles.my #00 ,draw-line JSR2
43
+	#0080 SCALEX #0080 SCALEY ~needles.hx ~needles.hy #00 ,draw-line JSR2
42 44
 
43 45
 	( place )
44 46
 	#00 ~Time.second #0002 MUL2 ,table ADD2 LDR2
45
-	#00 SWP SCALE =needles.sy #00 SWP SCALE =needles.sx
47
+	#00 SWP SCALEY =needles.sy #00 SWP SCALEX =needles.sx
46 48
 	#00 ~Time.minute #0002 MUL2 ,table ADD2 LDR2
47
-	#00 SWP #0004 DIV2 #0003 MUL2 #0020 ADD2 SCALE =needles.my 
48
-	#00 SWP #0004 DIV2 #0003 MUL2 #0020 ADD2 SCALE =needles.mx
49
+	#00 SWP #0004 DIV2 #0003 MUL2 #0020 ADD2 SCALEY =needles.my 
50
+	#00 SWP #0004 DIV2 #0003 MUL2 #0020 ADD2 SCALEX =needles.mx
49 51
 	#00 ~Time.hour 12HOURS #05 MUL #0002 MUL2 ,table ADD2 LDR2
50
-	#00 SWP #0002 DIV2 #0040 ADD2 SCALE =needles.hy 
51
-	#00 SWP #0002 DIV2 #0040 ADD2 SCALE =needles.hx
52
+	#00 SWP #0002 DIV2 #0040 ADD2 SCALEY =needles.hy 
53
+	#00 SWP #0002 DIV2 #0040 ADD2 SCALEX =needles.hx
52 54
 
53 55
 	( draw )
54
-	#0080 SCALE #0080 SCALE ~needles.sx ~needles.sy #02 ,draw-line JSR2
55
-	#0080 SCALE #0080 SCALE ~needles.mx ~needles.my #01 ,draw-line JSR2
56
-	#0080 SCALE #0080 SCALE ~needles.hx ~needles.hy #03 ,draw-line JSR2
56
+	#0080 SCALEX #0080 SCALEY ~needles.sx ~needles.sy #02 ,draw-line JSR2
57
+	#0080 SCALEX #0080 SCALEY ~needles.mx ~needles.my #01 ,draw-line JSR2
58
+	#0080 SCALEX #0080 SCALEY ~needles.hx ~needles.hy #03 ,draw-line JSR2
57 59
 
58 60
 	,draw-circle JSR2
59 61
 
60 62
 	( display )
61
-	#0000 =Sprite.x
62
-	,font_hex #00 ~Time.hour #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr
63
-	#02 =Sprite.color
64
-	#0008 =Sprite.x
65
-	,font_hex #00 ~Time.hour #0f AND #08 MUL ADD2 =Sprite.addr
66
-	#02 =Sprite.color
67
-	#0018 =Sprite.x
68
-	,font_hex #00 ~Time.minute #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr
69
-	#02 =Sprite.color
70
-	#0020 =Sprite.x
71
-	,font_hex #00 ~Time.minute #0f AND #08 MUL ADD2 =Sprite.addr
72
-	#02 =Sprite.color
73
-	#0030 =Sprite.x
74
-	,font_hex #00 ~Time.second #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr
75
-	#02 =Sprite.color
76
-	#0038 =Sprite.x
77
-	,font_hex #00 ~Time.second #0f AND #08 MUL ADD2 =Sprite.addr
78
-	#02 =Sprite.color
63
+	~Screen.height #0002 DIV2 #0048 ADD2 =Sprite.y
64
+	~Screen.width #0002 DIV2
65
+	DUP2 #0020 SUB2 =Sprite.x ,font_hex #00 ~Time.hour #0a DIV #08 MUL ADD2 =Sprite.addr #02 =Sprite.color
66
+	DUP2 #0018 SUB2 =Sprite.x ,font_hex #00 ~Time.hour #0a MOD #08 MUL ADD2 =Sprite.addr #02 =Sprite.color
67
+	DUP2 #0008 SUB2 =Sprite.x ,font_hex #00 ~Time.minute #0a DIV #08 MUL ADD2 =Sprite.addr #02 =Sprite.color
68
+	DUP2 =Sprite.x ,font_hex #00 ~Time.minute #0a MOD #08 MUL ADD2 =Sprite.addr #02 =Sprite.color
69
+	DUP2 #0010 ADD2 =Sprite.x ,font_hex #00 ~Time.second #0a DIV #08 MUL ADD2 =Sprite.addr #02 =Sprite.color
70
+	DUP2 #0018 ADD2 =Sprite.x ,font_hex #00 ~Time.second #0a MOD #08 MUL ADD2 =Sprite.addr #02 =Sprite.color
71
+	POP2
79 72
 
80 73
 BRK
81 74
 
... ...
@@ -88,9 +81,9 @@ BRK
88 81
 	#00 #3c 
89 82
 	$loop
90 83
 		( load ) OVR #00 SWP #0002 MUL2 ,table ADD2 LDR2 
91
-		#00 SWP SCALE =Screen.y
92
-		#00 SWP SCALE =Screen.x
93
-		OVR #00 EQU #01 ADD =Screen.color
84
+		#00 SWP SCALEY =Screen.y
85
+		#00 SWP SCALEX =Screen.x
86
+		OVR #0f MOD #00 EQU #01 ADD =Screen.color
94 87
 		( incr ) SWP #01 ADD SWP
95 88
 		DUP2 LTH ^$loop JNZ
96 89
 	POP2
... ...
@@ -125,14 +118,14 @@ RTN
125 118
 
126 119
 @table ( 60 positions on a circle in bytes )
127 120
 [
128
-	0180 018d 039a 07a7 0bb3 12bf 19ca 21d4 
129
-	2bde 35e6 40ed 4cf4 58f8 65fc 72fe 80ff 
130
-	8dfe 9afc a7f8 b3f4 bfed cae6 d4de ded4 
131
-	e6ca edbf f4b3 f8a7 fc9a fe8d ff80 fe72 
132
-	fc65 f858 f44c ed40 e635 de2b d421 ca19 
133
-	bf12 b30b a707 9a03 8d01 7f01 7201 6503 
134
-	5807 4c0b 4012 3519 2b21 212b 1935 1240 
135
-	0b4c 0758 0365 0172
121
+	8000 8d00 9a02 a706 b40b c011 cb18 d520 
122
+	df2a e734 ee40 f44b f958 fd65 ff72 ff80 
123
+	ff8d fd9a f9a7 f4b4 eec0 e7cb dfd5 d5df 
124
+	cbe7 c0ee b4f4 a7f9 9afd 8dff 80ff 72ff 
125
+	65fd 58f9 4bf4 40ee 34e7 2adf 20d5 18cb 
126
+	11c0 0bb4 06a7 029a 008d 0080 0072 0265 
127
+	0658 0b4b 113f 1834 202a 2a20 3418 3f11 
128
+	4b0b 5806 6502 7200
136 129
 ]
137 130
 
138 131
 @font_hex ( 0-F ) 
... ...
@@ -14,7 +14,7 @@
14 14
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
15 15
 |0150 ;Mouse  { x 2 y 2 state 1 chord 1 }
16 16
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
17
-|0200 ,RESET JMP2
17
+|0200 ^RESET JMP
18 18
 |0204 ,ERROR JMP2
19 19
 |0208 ,FRAME JMP2
20 20
 
... ...
@@ -10,7 +10,7 @@
10 10
 |0110 ;Screen { width 2 height 2 pad 4 x 2 y 2 color 1 }
11 11
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
12 12
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
13
-|0200 ,RESET JMP2
13
+|0200 ^RESET JMP
14 14
 |0204 ,ERROR JMP2
15 15
 |0208 ,FRAME JMP2
16 16
 
... ...
@@ -6,7 +6,7 @@
6 6
 
7 7
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
8 8
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
9
-|0200 ,RESET JMP2
9
+|0200 ^RESET JMP
10 10
 |0204 ,ERROR JMP2
11 11
 |0208 ,FRAME JMP2
12 12
 
... ...
@@ -16,7 +16,7 @@
16 16
 |0110 ;Screen { width 2 height 2 pad 4 x 2 y 2 color 1 }
17 17
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
18 18
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
19
-|0200 ,RESET JMP2
19
+|0200 ^RESET JMP
20 20
 |0204 ,ERROR JMP2
21 21
 |0208 ,FRAME JMP2
22 22
 
... ...
@@ -16,7 +16,7 @@
16 16
 
17 17
 ( vectors )
18 18
 
19
-|0200 ,RESET JMP2
19
+|0200 ^RESET JMP
20 20
 |0204 BRK
21 21
 |0208 BRK
22 22
 
... ...
@@ -51,7 +51,7 @@
51 51
 |0160 ;File { pad 8 name 2 length 2 load 2 save 2 }
52 52
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
53 53
 
54
-|0200 ,RESET JMP2
54
+|0200 ^RESET JMP
55 55
 |0204 ,ERROR JMP2
56 56
 |0208 ,FRAME JMP2
57 57
 
... ...
@@ -39,7 +39,7 @@
39 39
 |0160 ;File { pad 8 name 2 length 2 load 2 save 2 }
40 40
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
41 41
 
42
-|0200 ,RESET JMP2
42
+|0200 ^RESET JMP
43 43
 |0204 ,ERROR JMP2
44 44
 |0208 ,FRAME JMP2
45 45
 
... ...
@@ -17,12 +17,12 @@
17 17
 |0190 ;DateTime { year 2 month 1 day 1 hour 1 minute 1 second 1 dow 1 doy 2 isdst 1 pad 4 get 1 }
18 18
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
19 19
 
20
-|0200 ,RESET JMP2
20
+|0200 ^RESET JMP
21 21
 |0204 ,ERROR JMP2
22 22
 |0208 ,FRAME JMP2
23 23
 
24 24
 @RESET
25
-	( theme ) #13fd =System.r #1ef3 =System.g #1bf2 =System.b
25
+	( theme ) #03fd =System.r #0ef3 =System.g #0bf2 =System.b
26 26
 	#01 =fps.current
27 27
 
28 28
 	#000c
... ...
@@ -59,7 +59,7 @@
59 59
 |0150 ;Mouse { x 2 y 2 state 1 chord 1 }
60 60
 |0160 ;File { pad 8 name 2 length 2 load 2 save 2 }
61 61
 |01F0 ;System { pad 8 r 2 g 2 b 2 }
62
-|0200 ,RESET JMP2
62
+|0200 ^RESET JMP
63 63
 |0204 ,ERROR JMP2
64 64
 |0208 ,FRAME JMP2
65 65