// task2.c

#include <stdio.h>
#include <912d60.h>
#include "kernel.h"



/* counts seconds and displays them  */
void task2 (void) {
	 
	 
	 char i;
	 
	 extern unsigned long int system_tick;
	 unsigned long int delta_t;
	 const unsigned int tick_size = 65535;
	 const unsigned long int one_second = 1000000;
	 
	 
	 static unsigned char hh=0, hm=0, hl=0, mh=0, ml=0, sh=0, sl=0;
	 static unsigned long int last_mark;
	 int redraw;
	 static char startup = 1;
	 
	 
	 INTR_ON();
	 
	
	 
	 		  delta_t = (system_tick - last_mark) * tick_size;

	 		  if (delta_t > one_second) {
			  	 last_mark = system_tick;
			  	 sl++;
				 redraw = 1;
				 if (sl > 9) {
				 	sh++;
					sl = 0;
					redraw = 2;
					}
				 if (sh > 5) {
				 	ml++;
					sh = 0;
					redraw = 4;
					}
				 if (ml > 9) {
				 	mh++;
					ml = 0;
					redraw = 5;
					}
				 if (mh > 5) {
				 	hl++;
					mh = 0;
					redraw = 7;
					}
				 if (hl > 9) {
				 	hm++;
					hl = 0;
					redraw = 8;
					}
				 if (hm > 9) {
				 	hh++;
					hm = 0;
					redraw = 9;
					}
				 if (hh > 9) {
				 	hh = 0; 
					redraw = 9;
					}

				 
				 // display time
				 if (startup) {
				 	putchar(hh+48);
					putchar(hm+48);
					putchar(hl+48);
					putchar(':');
					putchar(mh+48);
					putchar(ml+48);
					putchar(':');
					putchar(sh+48);
				 	putchar(sl+48);
					
					startup = 0;
					}
				 else {
				 	  for (i=0; i<redraw; i++)
				 	  	  putchar(8);		 // backspaces
						  
				 	  switch (redraw) {
				 		case 9:	 putchar(hh+48);
						case 8:	 putchar(hm+48);
						case 7:	 putchar(hl+48);
						case 6:	 putchar(':');
						case 5:	 putchar(mh+48);
						case 4:	 putchar(ml+48);
						case 3:	 putchar(':');
						case 2:	 putchar(sh+48);
				 		case 1:	 putchar(sl+48);
						}
				 	}
				 }
	 


	 
	 INTR_OFF();
	 
}

