34 | 34 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,63 @@ |
1 |
+( GUI Animation ) |
|
2 |
+ |
|
3 |
+;dvd { x 2 y 2 dx 1 dy 1 } |
|
4 |
+ |
|
5 |
+|0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |
|
6 |
+|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |
|
7 |
+ |
|
8 |
+( program ) |
|
9 |
+ |
|
10 |
+|0200 |
|
11 |
+ |
|
12 |
+ ( theme ) #4cfd =System.r #4cf3 =System.g #dcf2 =System.b |
|
13 |
+ ( vectors ) ,on-frame =Screen.vector |
|
14 |
+ ( init ) ~Screen.width #0002 DIV2 =dvd.x |
|
15 |
+ ( init ) ~Screen.height #0002 DIV2 =dvd.y |
|
16 |
+ |
|
17 |
+BRK |
|
18 |
+ |
|
19 |
+@on-frame ( -> ) |
|
20 |
+ |
|
21 |
+ ( clear ) #20 ,draw-dvd JSR2 |
|
22 |
+ ( hit-right ) ~dvd.x ~Screen.width #0020 SUB2 EQU2 |
|
23 |
+ ( hit-left ) ~dvd.x #0000 EQU2 |
|
24 |
+ #0000 EQU2 ^$no-flipx JNZ |
|
25 |
+ ~dvd.dx #00 EQU =dvd.dx $no-flipx |
|
26 |
+ ( hit-bottom ) ~dvd.y ~Screen.height #0010 SUB2 EQU2 |
|
27 |
+ ( hit-top ) ~dvd.y #0000 EQU2 |
|
28 |
+ #0000 EQU2 ^$no-flipy JNZ |
|
29 |
+ ~dvd.dy #00 EQU =dvd.dy $no-flipy |
|
30 |
+ ( incr ) ~dvd.x #0001 #00 ~dvd.dx #00 EQU #fffe MUL2 ADD2 ADD2 =dvd.x |
|
31 |
+ ( incr ) ~dvd.y #0001 #00 ~dvd.dy #00 EQU #fffe MUL2 ADD2 ADD2 =dvd.y |
|
32 |
+ ( draw ) #21 ,draw-dvd JSR2 |
|
33 |
+ |
|
34 |
+BRK |
|
35 |
+ |
|
36 |
+@draw-dvd ( color -- ) |
|
37 |
+ |
|
38 |
+ ( stash color ) STH |
|
39 |
+ ,dvd_icn =Screen.addr |
|
40 |
+ ~dvd.y ~dvd.y #0010 ADD2 |
|
41 |
+ $ver |
|
42 |
+ OVR2 =Screen.y |
|
43 |
+ ~dvd.x ~dvd.x #0020 ADD2 |
|
44 |
+ $hor |
|
45 |
+ OVR2 =Screen.x |
|
46 |
+ ( draw ) DUPr STHr =Screen.color |
|
47 |
+ ( next ) ~Screen.addr #0008 ADD2 =Screen.addr |
|
48 |
+ ( incr ) SWP2 #0008 ADD2 SWP2 |
|
49 |
+ OVR2 OVR2 LTH2 ^$hor JNZ |
|
50 |
+ POP2 POP2 |
|
51 |
+ ( incr ) SWP2 #0008 ADD2 SWP2 |
|
52 |
+ OVR2 OVR2 LTH2 ^$ver JNZ |
|
53 |
+ POP2 POP2 |
|
54 |
+ ( destroy color ) POPr |
|
55 |
+ |
|
56 |
+JMP2r |
|
57 |
+ |
|
58 |
+@dvd_icn [ |
|
59 |
+ 001f 3f38 3838 787f 00fe fe7e 7777 e3c3 |
|
60 |
+ 000f 1f3b 7b77 e7c7 00fc fe8f 8707 0efc |
|
61 |
+ 7f00 000f ff7f 0700 0301 00ff f0f8 ff00 |
|
62 |
+ 8700 00ff 7f7f ff00 f000 00e0 fcfc 8000 |
|
63 |
+] |
|
0 | 64 |
\ No newline at end of file |
... | ... |
@@ -27,6 +27,8 @@ |
27 | 27 |
#0128 #0010 #0080 #0080 #2e ,pict_medium ,draw-picture JSR2 |
28 | 28 |
#0020 #00d0 #0020 #0020 #25 ,pict_small ,draw-picture JSR2 |
29 | 29 |
|
30 |
+ #0010 #0010 #0020 #0010 #25 ,dvd_icn ,draw-picture JSR2 |
|
31 |
+ |
|
30 | 32 |
BRK |
31 | 33 |
|
32 | 34 |
@on-mouse |
... | ... |
@@ -78,6 +80,17 @@ RTN |
78 | 80 |
|
79 | 81 |
RTN |
80 | 82 |
|
83 |
+@dvd_icn [ |
|
84 |
+ 001f 3f38 3838 787f |
|
85 |
+ 00fe fe7e 7777 e3c3 |
|
86 |
+ 000f 1f3b 7b77 e7c7 |
|
87 |
+ 00fc fe8f 8707 0efc |
|
88 |
+ 7f00 000f ff7f 0700 |
|
89 |
+ 0301 00ff f0f8 ff00 |
|
90 |
+ 8700 00ff 7f7f ff00 |
|
91 |
+ f000 00e0 fcfc 8000 |
|
92 |
+] |
|
93 |
+ |
|
81 | 94 |
@clear_icn [ 0000 0000 0000 0000 ] |
82 | 95 |
@pointer_icn [ 80c0 e0f0 f8e0 1000 ] |
83 | 96 |
|
... | ... |
@@ -50,19 +50,6 @@ drawpixel(Ppu *p, Uint16 x, Uint16 y, Uint8 color) |
50 | 50 |
p->output[y * p->width + x] = p->colors[color]; |
51 | 51 |
} |
52 | 52 |
|
53 |
-void |
|
54 |
-drawchr(Ppu *p, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 alpha) |
|
55 |
-{ |
|
56 |
- Uint8 v, h; |
|
57 |
- for(v = 0; v < 8; v++) |
|
58 |
- for(h = 0; h < 8; h++) { |
|
59 |
- Uint8 ch1 = ((sprite[v] >> h) & 0x1); |
|
60 |
- Uint8 ch2 = (((sprite[v + 8] >> h) & 0x1) << 1); |
|
61 |
- if(!alpha || (alpha && ch1 + ch2 != 0)) |
|
62 |
- drawpixel(p, x + 7 - h, y + v, ch1 + ch2); |
|
63 |
- } |
|
64 |
-} |
|
65 |
- |
|
66 | 53 |
void |
67 | 54 |
putpixel(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 color) |
68 | 55 |
{ |
... | ... |
@@ -142,9 +129,20 @@ drawppu(Ppu *p) |
142 | 129 |
Uint16 x, y; |
143 | 130 |
for(y = 0; y < p->ver; ++y) |
144 | 131 |
for(x = 0; x < p->hor; ++x) { |
132 |
+ Uint8 v, h; |
|
145 | 133 |
Uint16 key = (y * p->hor + x) * 16; |
146 |
- drawchr(p, x * 8 + p->pad, y * 8 + p->pad, &p->bg[key], 0); |
|
147 |
- drawchr(p, x * 8 + p->pad, y * 8 + p->pad, &p->fg[key], 1); |
|
134 |
+ for(v = 0; v < 8; v++) |
|
135 |
+ for(h = 0; h < 8; h++) { |
|
136 |
+ Uint8 *sprite = &p->fg[key]; |
|
137 |
+ Uint8 ch1 = ((sprite[v] >> h) & 0x1); |
|
138 |
+ Uint8 ch2 = (((sprite[v + 8] >> h) & 0x1) << 1); |
|
139 |
+ if(ch1 + ch2 == 0) { |
|
140 |
+ sprite = &p->bg[key]; |
|
141 |
+ ch1 = ((sprite[v] >> h) & 0x1); |
|
142 |
+ ch2 = (((sprite[v + 8] >> h) & 0x1) << 1); |
|
143 |
+ } |
|
144 |
+ drawpixel(p, x * 8 + p->pad + 7 - h, y * 8 + p->pad + v, ch1 + ch2); |
|
145 |
+ } |
|
148 | 146 |
} |
149 | 147 |
} |
150 | 148 |
|