Rev 4011 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4011 | Rev 6196 | ||
---|---|---|---|
1 | ; Timer with three buttons ; |
1 | ; Timer with three buttons ; |
2 | ; %define lang "ru" |
2 | ; %define lang "ru" |
3 | ; %define lang "it" |
3 | ; %define lang "it" |
4 | ORG 0 |
4 | ORG 0 |
5 | BITS 32 |
5 | BITS 32 |
6 | ; ---------------------------------------------------------------------------- ; |
6 | ; ---------------------------------------------------------------------------- ; |
7 | STACK_SIZE equ 256 |
7 | STACK_SIZE equ 256 |
8 | 8 | ||
9 | BUTTON_START equ 2 |
9 | BUTTON_START equ 2 |
10 | BUTTON_PAUSE equ 3 |
10 | BUTTON_PAUSE equ 3 |
11 | BUTTON_RESET equ 4 |
11 | BUTTON_RESET equ 4 |
12 | 12 | ||
13 | BORDER_SIZE equ 5 |
13 | BORDER_SIZE equ 5 |
14 | MARGIN equ 8 |
14 | MARGIN equ 8 |
15 | BUTTON_MARGIN equ 3 |
15 | BUTTON_MARGIN equ 3 |
16 | BUTTON_PADDING equ 5 |
16 | BUTTON_PADDING equ 5 |
17 | 17 | ||
18 | CHAR_WIDTH equ 6 |
18 | CHAR_WIDTH equ 6 |
19 | CHAR2_WIDTH equ 8 |
19 | CHAR2_WIDTH equ 8 |
20 | CHAR_HEIGHT equ 9 |
20 | CHAR_HEIGHT equ 9 |
21 | 21 | ||
22 | BUTTON_START_WIDTH equ (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH |
22 | BUTTON_START_WIDTH equ (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH |
23 | BUTTON_PAUSE_WIDTH equ (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH |
23 | BUTTON_PAUSE_WIDTH equ (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH |
24 | BUTTON_RESET_WIDTH equ (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH |
24 | BUTTON_RESET_WIDTH equ (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH |
25 | 25 | ||
26 | BUTTON_HEIGHT equ (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1 |
26 | BUTTON_HEIGHT equ (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1 |
27 | 27 | ||
28 | WINDOW_WIDTH equ (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH) |
28 | WINDOW_WIDTH equ (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH) |
29 | 29 | ||
30 | TIME_AREA_WIDTH equ (CHAR2_WIDTH * 8) ; HH MM SS |
30 | TIME_AREA_WIDTH equ (CHAR2_WIDTH * 8) ; HH MM SS |
31 | TIME_AREA_LEFT equ (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2 |
31 | TIME_AREA_LEFT equ (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2 |
32 | TIME_AREA_TOP equ MARGIN + 1 |
32 | TIME_AREA_TOP equ MARGIN + 1 |
33 | 33 | ||
34 | TEXT_ON_BUTTONS_TOP equ (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1 |
34 | TEXT_ON_BUTTONS_TOP equ (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1 |
35 | 35 | ||
36 | BUTTON_START_BACK_COLOR equ 0x880000 |
36 | BUTTON_START_BACK_COLOR equ 0x880000 |
37 | BUTTON_PAUSE_BACK_COLOR equ 0x008800 |
37 | BUTTON_PAUSE_BACK_COLOR equ 0x008800 |
38 | BUTTON_RESET_BACK_COLOR equ 0x000088 |
38 | BUTTON_RESET_BACK_COLOR equ 0x000088 |
39 | ; ---------------------------------------------------------------------------- ; |
39 | ; ---------------------------------------------------------------------------- ; |
40 | MENUET01 db 'MENUET01' |
40 | MENUET01 db 'MENUET01' |
41 | version dd 1 |
41 | version dd 1 |
42 | program.start dd START |
42 | program.start dd START |
43 | program.end dd END |
43 | program.end dd END |
44 | program.memory dd END + STACK_SIZE |
44 | program.memory dd END + STACK_SIZE |
45 | program.stack dd END + STACK_SIZE |
45 | program.stack dd END + STACK_SIZE |
46 | program.params dd 0 |
46 | program.params dd 0 |
47 | program.path dd 0 |
47 | program.path dd 0 |
48 | ; ---------------------------------------------------------------------------- ; |
48 | ; ---------------------------------------------------------------------------- ; |
49 | screen: |
49 | screen: |
50 | .height dw 0 |
50 | .height dw 0 |
51 | .width dw 0 |
51 | .width dw 0 |
52 | ; ---------------------------------------------------------------------------- ; |
52 | ; ---------------------------------------------------------------------------- ; |
53 | window: |
53 | window: |
54 | .left dd 0 |
54 | .left dd 0 |
55 | .top dd 0 |
55 | .top dd 0 |
56 | .width dd WINDOW_WIDTH |
56 | .width dd WINDOW_WIDTH |
57 | .height dd 0 |
57 | .height dd 0 |
58 | ; ---------------------------------------------------------------------------- ; |
58 | ; ---------------------------------------------------------------------------- ; |
59 | sc: |
59 | sc: |
60 | .frames dd 0 |
60 | .frames dd 0 |
61 | .grab dd 0 |
61 | .grab dd 0 |
62 | .grab_button dd 0 |
62 | .work_3d_dark dd 0 |
63 | .grab_button_text dd 0 |
63 | .work_3d_light dd 0 |
64 | .grab_text dd 0 |
64 | .grab_text dd 0 |
65 | .work dd 0 |
65 | .work dd 0 |
66 | .work_button dd 0 |
66 | .work_button dd 0 |
67 | .work_button_text dd 0 |
67 | .work_button_text dd 0 |
68 | .work_text dd 0 |
68 | .work_text dd 0 |
69 | .work_graph dd 0 |
69 | .work_graph dd 0 |
70 | ; ---------------------------------------------------------------------------- ; |
70 | ; ---------------------------------------------------------------------------- ; |
71 | timer_ticks dd 0 |
71 | timer_ticks dd 0 |
72 | last_timer_ticks dd 0 |
72 | last_timer_ticks dd 0 |
73 | hours dd 0 |
73 | hours dd 0 |
74 | minutes dd 0 |
74 | minutes dd 0 |
75 | seconds dd 0 |
75 | seconds dd 0 |
76 | timer_proc dd EmptyProc ; at start Timer yet disabled |
76 | timer_proc dd EmptyProc ; at start Timer yet disabled |
77 | ; ---------------------------------------------------------------------------- ; |
77 | ; ---------------------------------------------------------------------------- ; |
78 | Events: |
78 | Events: |
79 | dd On_Idle |
79 | dd On_Idle |
80 | dd On_Redraw |
80 | dd On_Redraw |
81 | dd On_KeyPress |
81 | dd On_KeyPress |
82 | dd On_ButtonPress |
82 | dd On_ButtonPress |
83 | ; ---------------------------------------------------------------------------- ; |
83 | ; ---------------------------------------------------------------------------- ; |
84 | ButtonEvents: |
84 | ButtonEvents: |
85 | dd 0 |
85 | dd 0 |
86 | .close dd On_ButtonClose |
86 | .close dd On_ButtonClose |
87 | .start dd On_ButtonStart |
87 | .start dd On_ButtonStart |
88 | .pause dd EmptyProc ; at start Pause must not work |
88 | .pause dd EmptyProc ; at start Pause must not work |
89 | .reset dd On_ButtonReset |
89 | .reset dd On_ButtonReset |
90 | ; ---------------------------------------------------------------------------- ; |
90 | ; ---------------------------------------------------------------------------- ; |
91 | %ifidn lang, "ru" |
91 | %ifidn lang, "ru" |
92 | sz_timer db "Òàéìåð",0 |
92 | sz_timer db "Òàéìåð",0 |
93 | 93 | ||
94 | sz_start: db "ñòàðò" |
94 | sz_start: db "ñòàðò" |
95 | .end: db 0 |
95 | .end: db 0 |
96 | sz_pause: db "ïàóçà" |
96 | sz_pause: db "ïàóçà" |
97 | .end: db 0 |
97 | .end: db 0 |
98 | sz_reset: db "ñáðîñ" |
98 | sz_reset: db "ñáðîñ" |
99 | .end: db 0 |
99 | .end: db 0 |
100 | %elifidn lang, "it" |
100 | %elifidn lang, "it" |
101 | sz_timer db "Timer",0 |
101 | sz_timer db "Timer",0 |
102 | 102 | ||
103 | sz_start: db "lancio" |
103 | sz_start: db "lancio" |
104 | .end: db 0 |
104 | .end: db 0 |
105 | sz_pause: db "pausa" |
105 | sz_pause: db "pausa" |
106 | .end: db 0 |
106 | .end: db 0 |
107 | sz_reset: db "reset" |
107 | sz_reset: db "reset" |
108 | .end: db 0 |
108 | .end: db 0 |
109 | %else |
109 | %else |
110 | sz_timer db "Timer",0 |
110 | sz_timer db "Timer",0 |
111 | 111 | ||
112 | sz_start: db "start" |
112 | sz_start: db "start" |
113 | .end: db 0 |
113 | .end: db 0 |
114 | sz_pause: db "pause" |
114 | sz_pause: db "pause" |
115 | .end: db 0 |
115 | .end: db 0 |
116 | sz_reset: db "reset" |
116 | sz_reset: db "reset" |
117 | .end: db 0 |
117 | .end: db 0 |
118 | %endif |
118 | %endif |
119 | ; ---------------------------------------------------------------------------- ; |
119 | ; ---------------------------------------------------------------------------- ; |
120 | START: |
120 | START: |
121 | ; get.screen.size |
121 | ; get.screen.size |
122 | mov eax, 61 |
122 | mov eax, 61 |
123 | mov ebx, 1 |
123 | mov ebx, 1 |
124 | int 64 |
124 | int 64 |
125 | mov [screen], eax |
125 | mov [screen], eax |
126 | 126 | ||
127 | movzx eax, word[screen.width] |
127 | movzx eax, word[screen.width] |
128 | sub eax, [window.width] |
128 | sub eax, [window.width] |
129 | shr eax, 1 |
129 | shr eax, 1 |
130 | mov [window.left], eax |
130 | mov [window.left], eax |
131 | 131 | ||
132 | ; skin.height |
132 | ; skin.height |
133 | mov eax, 48 |
133 | mov eax, 48 |
134 | mov ebx, 4 |
134 | mov ebx, 4 |
135 | int 64 |
135 | int 64 |
136 | add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT |
136 | add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT |
137 | mov [window.height], eax |
137 | mov [window.height], eax |
138 | 138 | ||
139 | movzx eax, word[screen.height] |
139 | movzx eax, word[screen.height] |
140 | sub eax, [window.height] |
140 | sub eax, [window.height] |
141 | shr eax, 1 |
141 | shr eax, 1 |
142 | mov [window.top], eax |
142 | mov [window.top], eax |
143 | 143 | ||
144 | call On_Redraw |
144 | call On_Redraw |
145 | ; ---------------------------------------------------------------------------- ; |
145 | ; ---------------------------------------------------------------------------- ; |
146 | wait.event: |
146 | wait.event: |
147 | mov eax, 23 |
147 | mov eax, 23 |
148 | mov ebx, 50 |
148 | mov ebx, 50 |
149 | int 64 |
149 | int 64 |
150 | call [eax * 4 + Events] |
150 | call [eax * 4 + Events] |
151 | jmp wait.event |
151 | jmp wait.event |
152 | ; ---------------------------------------------------------------------------- ; |
152 | ; ---------------------------------------------------------------------------- ; |
153 | On_KeyPress: |
153 | On_KeyPress: |
154 | mov eax, 2 |
154 | mov eax, 2 |
155 | int 64 |
155 | int 64 |
156 | ret |
156 | ret |
157 | ; ---------------------------------------------------------------------------- ; |
157 | ; ---------------------------------------------------------------------------- ; |
158 | On_ButtonPress: |
158 | On_ButtonPress: |
159 | mov eax, 17 |
159 | mov eax, 17 |
160 | int 64 |
160 | int 64 |
161 | movzx eax, ah |
161 | movzx eax, ah |
162 | call [eax * 4 + ButtonEvents] |
162 | call [eax * 4 + ButtonEvents] |
163 | ret |
163 | ret |
164 | ; ---------------------------------------------------------------------------- ; |
164 | ; ---------------------------------------------------------------------------- ; |
165 | On_ButtonClose: |
165 | On_ButtonClose: |
166 | or eax, -1 |
166 | or eax, -1 |
167 | int 64 |
167 | int 64 |
168 | ; ---------------------------------------------------------------------------- ; |
168 | ; ---------------------------------------------------------------------------- ; |
169 | On_ButtonStart: |
169 | On_ButtonStart: |
170 | ; get system counter |
170 | ; get system counter |
171 | mov eax, 26 |
171 | mov eax, 26 |
172 | mov ebx, 9 |
172 | mov ebx, 9 |
173 | int 64 |
173 | int 64 |
174 | sub eax, [last_timer_ticks] |
174 | sub eax, [last_timer_ticks] |
175 | and [last_timer_ticks], dword 0 |
175 | and [last_timer_ticks], dword 0 |
176 | mov [timer_ticks], eax |
176 | mov [timer_ticks], eax |
177 | mov [timer_proc], dword TimerStarted |
177 | mov [timer_proc], dword TimerStarted |
178 | mov [ButtonEvents.start], dword EmptyProc ; disable ButtonStart |
178 | mov [ButtonEvents.start], dword EmptyProc ; disable ButtonStart |
179 | mov [ButtonEvents.pause], dword On_ButtonPause ; enable ButtonPause |
179 | mov [ButtonEvents.pause], dword On_ButtonPause ; enable ButtonPause |
180 | ret |
180 | ret |
181 | ; ---------------------------------------------------------------------------- ; |
181 | ; ---------------------------------------------------------------------------- ; |
182 | On_ButtonPause: |
182 | On_ButtonPause: |
183 | ; get system counter |
183 | ; get system counter |
184 | mov eax, 26 |
184 | mov eax, 26 |
185 | mov ebx, 9 |
185 | mov ebx, 9 |
186 | int 64 |
186 | int 64 |
187 | sub eax, [timer_ticks] |
187 | sub eax, [timer_ticks] |
188 | mov [last_timer_ticks], eax |
188 | mov [last_timer_ticks], eax |
189 | mov [timer_proc], dword EmptyProc |
189 | mov [timer_proc], dword EmptyProc |
190 | mov [ButtonEvents.start], dword On_ButtonStart ; enable ButtonStart |
190 | mov [ButtonEvents.start], dword On_ButtonStart ; enable ButtonStart |
191 | mov [ButtonEvents.pause], dword EmptyProc ; disable ButtonPause |
191 | mov [ButtonEvents.pause], dword EmptyProc ; disable ButtonPause |
192 | ret |
192 | ret |
193 | ; ---------------------------------------------------------------------------- ; |
193 | ; ---------------------------------------------------------------------------- ; |
194 | On_ButtonReset: |
194 | On_ButtonReset: |
195 | xor eax, eax |
195 | xor eax, eax |
196 | mov [seconds], eax |
196 | mov [seconds], eax |
197 | mov [hours], eax |
197 | mov [hours], eax |
198 | mov [minutes], eax |
198 | mov [minutes], eax |
199 | mov [last_timer_ticks], eax |
199 | mov [last_timer_ticks], eax |
200 | mov [timer_proc], dword EmptyProc |
200 | mov [timer_proc], dword EmptyProc |
201 | mov [ButtonEvents.start], dword On_ButtonStart ; enable ButtonStart |
201 | mov [ButtonEvents.start], dword On_ButtonStart ; enable ButtonStart |
202 | mov [ButtonEvents.pause], dword EmptyProc ; disable ButtonPause |
202 | mov [ButtonEvents.pause], dword EmptyProc ; disable ButtonPause |
203 | ret |
203 | ret |
204 | ; ---------------------------------------------------------------------------- ; |
204 | ; ---------------------------------------------------------------------------- ; |
205 | On_Redraw: |
205 | On_Redraw: |
206 | ; redraw.start |
206 | ; redraw.start |
207 | mov eax, 12 |
207 | mov eax, 12 |
208 | mov ebx, 1 |
208 | mov ebx, 1 |
209 | int 64 |
209 | int 64 |
210 | ; get.standart.colors |
210 | ; get.standart.colors |
211 | mov eax, 48 |
211 | mov eax, 48 |
212 | mov ebx, 3 |
212 | mov ebx, 3 |
213 | mov ecx, sc |
213 | mov ecx, sc |
214 | mov edx, 40 |
214 | mov edx, 40 |
215 | int 64 |
215 | int 64 |
216 | ; skin.height |
216 | ; skin.height |
217 | mov eax, 48 |
217 | mov eax, 48 |
218 | mov ebx, 4 |
218 | mov ebx, 4 |
219 | int 64 |
219 | int 64 |
220 | add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT |
220 | add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT |
221 | mov [window.height], eax |
221 | mov [window.height], eax |
222 | ; draw.window |
222 | ; draw.window |
223 | xor eax, eax |
223 | xor eax, eax |
224 | mov ebx, [window.left] |
224 | mov ebx, [window.left] |
225 | shl ebx, 16 |
225 | shl ebx, 16 |
226 | add ebx, [window.width] |
226 | add ebx, [window.width] |
227 | mov ecx, [window.top] |
227 | mov ecx, [window.top] |
228 | shl ecx, 16 |
228 | shl ecx, 16 |
229 | add ecx, [window.height] |
229 | add ecx, [window.height] |
230 | mov edx, [sc.work] |
230 | mov edx, [sc.work] |
231 | or edx, 0x34000000 |
231 | or edx, 0x34000000 |
232 | mov edi, sz_timer |
232 | mov edi, sz_timer |
233 | int 64 |
233 | int 64 |
234 | ; draw.buttons: |
234 | ; draw.buttons: |
235 | mov eax, 8 |
235 | mov eax, 8 |
236 | mov ecx, ((MARGIN + CHAR_HEIGHT + MARGIN) << 16) | BUTTON_HEIGHT |
236 | mov ecx, ((MARGIN + CHAR_HEIGHT + MARGIN) << 16) | BUTTON_HEIGHT |
237 | 237 | ||
238 | mov ebx, (MARGIN << 16) | BUTTON_START_WIDTH |
238 | mov ebx, (MARGIN << 16) | BUTTON_START_WIDTH |
239 | mov edx, BUTTON_START |
239 | mov edx, BUTTON_START |
240 | mov esi, BUTTON_START_BACK_COLOR |
240 | mov esi, BUTTON_START_BACK_COLOR |
241 | int 64 |
241 | int 64 |
242 | 242 | ||
243 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_PAUSE_WIDTH |
243 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_PAUSE_WIDTH |
244 | mov edx, BUTTON_PAUSE |
244 | mov edx, BUTTON_PAUSE |
245 | mov esi, BUTTON_PAUSE_BACK_COLOR |
245 | mov esi, BUTTON_PAUSE_BACK_COLOR |
246 | int 64 |
246 | int 64 |
247 | 247 | ||
248 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_RESET_WIDTH |
248 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_RESET_WIDTH |
249 | mov edx, BUTTON_RESET |
249 | mov edx, BUTTON_RESET |
250 | mov esi, BUTTON_RESET_BACK_COLOR |
250 | mov esi, BUTTON_RESET_BACK_COLOR |
251 | int 64 |
251 | int 64 |
252 | ;---------------------- |
252 | ;---------------------- |
253 | ; draw.texts: |
253 | ; draw.texts: |
254 | mov eax, 4 |
254 | mov eax, 4 |
255 | mov ecx, 0x80FFFFFF |
255 | mov ecx, 0x80FFFFFF |
256 | 256 | ||
257 | mov ebx, ((MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP |
257 | mov ebx, ((MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP |
258 | mov edx, sz_start |
258 | mov edx, sz_start |
259 | int 64 |
259 | int 64 |
260 | 260 | ||
261 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP |
261 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP |
262 | mov edx, sz_pause |
262 | mov edx, sz_pause |
263 | int 64 |
263 | int 64 |
264 | 264 | ||
265 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP |
265 | mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP |
266 | mov edx, sz_reset |
266 | mov edx, sz_reset |
267 | int 64 |
267 | int 64 |
268 | ;---------------------- |
268 | ;---------------------- |
269 | call On_Idle |
269 | call On_Idle |
270 | ; redraw.finish |
270 | ; redraw.finish |
271 | mov eax, 12 |
271 | mov eax, 12 |
272 | mov ebx, 2 |
272 | mov ebx, 2 |
273 | int 64 |
273 | int 64 |
274 | ret |
274 | ret |
275 | ; ---------------------------------------------------------------------------- ; |
275 | ; ---------------------------------------------------------------------------- ; |
276 | DrawTime: |
276 | DrawTime: |
277 | mov ebx, (1 << 16) |
277 | mov ebx, (1 << 16) |
278 | mov esi, [sc.work_text] |
278 | mov esi, [sc.work_text] |
279 | mov edi, [sc.work] |
279 | mov edi, [sc.work] |
280 | ; HH |
280 | ; HH |
281 | mov eax, [hours] |
281 | mov eax, [hours] |
282 | xor edx, edx |
282 | xor edx, edx |
283 | mov ebp, 10 |
283 | mov ebp, 10 |
284 | div ebp |
284 | div ebp |
285 | mov ebp, edx |
285 | mov ebp, edx |
286 | 286 | ||
287 | mov ecx, eax ; [hours] first digit |
287 | mov ecx, eax ; [hours] first digit |
288 | 288 | ||
289 | or esi, 0x70000000 |
289 | or esi, 0x70000000 |
290 | mov eax, 47 |
290 | mov eax, 47 |
291 | mov edx, (TIME_AREA_LEFT << 16) | TIME_AREA_TOP |
291 | mov edx, (TIME_AREA_LEFT << 16) | TIME_AREA_TOP |
292 | int 64 |
292 | int 64 |
293 | and esi, 0x30FFFFFF |
293 | and esi, 0x30FFFFFF |
294 | mov eax, 47 |
294 | mov eax, 47 |
295 | mov edx, ((TIME_AREA_LEFT + 1) << 16) | TIME_AREA_TOP |
295 | mov edx, ((TIME_AREA_LEFT + 1) << 16) | TIME_AREA_TOP |
296 | int 64 |
296 | int 64 |
297 | 297 | ||
298 | mov ecx, ebp ; [hours] second digit |
298 | mov ecx, ebp ; [hours] second digit |
299 | 299 | ||
300 | or esi, 0x70000000 |
300 | or esi, 0x70000000 |
301 | mov eax, 47 |
301 | mov eax, 47 |
302 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP |
302 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP |
303 | int 64 |
303 | int 64 |
304 | and esi, 0x30FFFFFF |
304 | and esi, 0x30FFFFFF |
305 | mov eax, 47 |
305 | mov eax, 47 |
306 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP |
306 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP |
307 | int 64 |
307 | int 64 |
308 | ; MM |
308 | ; MM |
309 | mov eax, [minutes] |
309 | mov eax, [minutes] |
310 | xor edx, edx |
310 | xor edx, edx |
311 | mov ebp, 10 |
311 | mov ebp, 10 |
312 | div ebp |
312 | div ebp |
313 | mov ebp, edx |
313 | mov ebp, edx |
314 | 314 | ||
315 | mov ecx, eax ; [minutes] first digit |
315 | mov ecx, eax ; [minutes] first digit |
316 | 316 | ||
317 | or esi, 0x70000000 |
317 | or esi, 0x70000000 |
318 | mov eax, 47 |
318 | mov eax, 47 |
319 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) << 16) | TIME_AREA_TOP |
319 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) << 16) | TIME_AREA_TOP |
320 | int 64 |
320 | int 64 |
321 | and esi, 0x30FFFFFF |
321 | and esi, 0x30FFFFFF |
322 | mov eax, 47 |
322 | mov eax, 47 |
323 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) << 16) | TIME_AREA_TOP |
323 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) << 16) | TIME_AREA_TOP |
324 | int 64 |
324 | int 64 |
325 | 325 | ||
326 | mov ecx, ebp ; [minutes] second digit |
326 | mov ecx, ebp ; [minutes] second digit |
327 | 327 | ||
328 | or esi, 0x70000000 |
328 | or esi, 0x70000000 |
329 | mov eax, 47 |
329 | mov eax, 47 |
330 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP |
330 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP |
331 | int 64 |
331 | int 64 |
332 | and esi, 0x30FFFFFF |
332 | and esi, 0x30FFFFFF |
333 | mov eax, 47 |
333 | mov eax, 47 |
334 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP |
334 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP |
335 | int 64 |
335 | int 64 |
336 | ; SS |
336 | ; SS |
337 | mov eax, [seconds] |
337 | mov eax, [seconds] |
338 | xor edx, edx |
338 | xor edx, edx |
339 | mov ebp, 10 |
339 | mov ebp, 10 |
340 | div ebp |
340 | div ebp |
341 | mov ebp, edx |
341 | mov ebp, edx |
342 | 342 | ||
343 | mov ecx, eax ; [seconds] first digit |
343 | mov ecx, eax ; [seconds] first digit |
344 | 344 | ||
345 | or esi, 0x70000000 |
345 | or esi, 0x70000000 |
346 | mov eax, 47 |
346 | mov eax, 47 |
347 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) << 16) | TIME_AREA_TOP |
347 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) << 16) | TIME_AREA_TOP |
348 | int 64 |
348 | int 64 |
349 | and esi, 0x30FFFFFF |
349 | and esi, 0x30FFFFFF |
350 | mov eax, 47 |
350 | mov eax, 47 |
351 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) << 16) | TIME_AREA_TOP |
351 | mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) << 16) | TIME_AREA_TOP |
352 | int 64 |
352 | int 64 |
353 | 353 | ||
354 | mov ecx, ebp ; [seconds] second digit |
354 | mov ecx, ebp ; [seconds] second digit |
355 | 355 | ||
356 | or esi, 0x70000000 |
356 | or esi, 0x70000000 |
357 | mov eax, 47 |
357 | mov eax, 47 |
358 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP |
358 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP |
359 | int 64 |
359 | int 64 |
360 | and esi, 0x30FFFFFF |
360 | and esi, 0x30FFFFFF |
361 | mov eax, 47 |
361 | mov eax, 47 |
362 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP |
362 | mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP |
363 | int 64 |
363 | int 64 |
364 | ret |
364 | ret |
365 | ; ---------------------------------------------------------------------------- ; |
365 | ; ---------------------------------------------------------------------------- ; |
366 | On_Idle: |
366 | On_Idle: |
367 | call dword [timer_proc] |
367 | call dword [timer_proc] |
368 | call DrawTime |
368 | call DrawTime |
369 | ret |
369 | ret |
370 | ; ---------------------------------------------------------------------------- ; |
370 | ; ---------------------------------------------------------------------------- ; |
371 | TimerStarted: |
371 | TimerStarted: |
372 | ; get system counter |
372 | ; get system counter |
373 | mov eax, 26 |
373 | mov eax, 26 |
374 | mov ebx, 9 |
374 | mov ebx, 9 |
375 | int 64 |
375 | int 64 |
376 | sub eax, [timer_ticks] |
376 | sub eax, [timer_ticks] |
377 | xor edx, edx |
377 | xor edx, edx |
378 | mov ecx, 100 |
378 | mov ecx, 100 |
379 | div ecx |
379 | div ecx |
380 | mov ecx, 60 |
380 | mov ecx, 60 |
381 | xor edx, edx |
381 | xor edx, edx |
382 | div ecx |
382 | div ecx |
383 | mov [seconds], edx |
383 | mov [seconds], edx |
384 | xor edx, edx |
384 | xor edx, edx |
385 | div ecx |
385 | div ecx |
386 | mov [hours], eax |
386 | mov [hours], eax |
387 | mov [minutes], edx |
387 | mov [minutes], edx |
388 | ret |
388 | ret |
389 | ; ---------------------------------------------------------------------------- ; |
389 | ; ---------------------------------------------------------------------------- ; |
390 | EmptyProc: |
390 | EmptyProc: |
391 | ret |
391 | ret |
392 | ; ---------------------------------------------------------------------------- ; |
392 | ; ---------------------------------------------------------------------------- ; |
393 | END:><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><> |
393 | END:><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><> |