	.module task2.c
	.area data
L5:
	.blkb 1
	.area idata
	.byte 0
	.area data
L6:
	.blkb 1
	.area idata
	.byte 0
	.area data
L7:
	.blkb 1
	.area idata
	.byte 0
	.area data
L8:
	.blkb 1
	.area idata
	.byte 0
	.area data
L9:
	.blkb 1
	.area idata
	.byte 0
	.area data
L10:
	.blkb 1
	.area idata
	.byte 0
	.area data
L11:
	.blkb 1
	.area idata
	.byte 0
	.area data
	.area bss
L12:
	.blkb 4
	.area data
L13:
	.blkb 1
	.area idata
	.byte 1
	.area data
	.area text
;  lreg1 -> -4,x
;  lreg2 -> -8,x
;     one_second -> -21,x
;      tick_size -> -17,x
;        delta_t -> -15,x
;         redraw -> -11,x
;              i -> -9,x
_task2::
	pshx
	tfr s,x
	leas -22,sp
; // 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;
	ldd #0xffff
	std -17,x
; 	 const unsigned long int one_second = 1000000;
	ldy #L4
	movw 0,y,-4,x
	movw 2,y,-2,x
	leay -21,x
	movw -4,x,0,y
	movw -2,x,2,y
; 	 
; 	 
; 	 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();
		cli

; 	 
; 	
; 	 
; 	 		  delta_t = (system_tick - last_mark) * tick_size;
	ldy #_system_tick
	movw 0,y,-4,x
	movw 2,y,-2,x
	ldy #L12
	movw 0,y,-8,x
	movw 2,y,-6,x
	jsr __lsub
	ldd -17,x
	std -6,x
	movw #0,-8,x
	jsr __lmul
	leay -15,x
	movw -4,x,0,y
	movw -2,x,2,y
; 
; 	 		  if (delta_t > one_second) {
	leay -15,x
	movw 0,y,-4,x
	movw 2,y,-2,x
	leay -21,x
	movw 0,y,-8,x
	movw 2,y,-6,x
	jsr __lcmp
	lbls L14
; 			  	 last_mark = system_tick;
	ldy #_system_tick
	movw 0,y,-4,x
	movw 2,y,-2,x
	ldy #L12
	movw -4,x,0,y
	movw -2,x,2,y
; 			  	 sl++;
	ldab L11
	clra
	addd #1
	stab L11
; 				 redraw = 1;
	ldd #1
	std -11,x
; 				 if (sl > 9) {
	ldab L11
	cmpb #9
	bls L16
; 				 	sh++;
	ldab L10
	clra
	addd #1
	stab L10
; 					sl = 0;
	clr L11
; 					redraw = 2;
	ldd #2
	std -11,x
; 					}
L16:
; 				 if (sh > 5) {
	ldab L10
	cmpb #5
	bls L18
; 				 	ml++;
	ldab L9
	clra
	addd #1
	stab L9
; 					sh = 0;
	clr L10
; 					redraw = 4;
	ldd #4
	std -11,x
; 					}
L18:
; 				 if (ml > 9) {
	ldab L9
	cmpb #9
	bls L20
; 				 	mh++;
	ldab L8
	clra
	addd #1
	stab L8
; 					ml = 0;
	clr L9
; 					redraw = 5;
	ldd #5
	std -11,x
; 					}
L20:
; 				 if (mh > 5) {
	ldab L8
	cmpb #5
	bls L22
; 				 	hl++;
	ldab L7
	clra
	addd #1
	stab L7
; 					mh = 0;
	clr L8
; 					redraw = 7;
	ldd #7
	std -11,x
; 					}
L22:
; 				 if (hl > 9) {
	ldab L7
	cmpb #9
	bls L24
; 				 	hm++;
	ldab L6
	clra
	addd #1
	stab L6
; 					hl = 0;
	clr L7
; 					redraw = 8;
	ldd #8
	std -11,x
; 					}
L24:
; 				 if (hm > 9) {
	ldab L6
	cmpb #9
	bls L26
; 				 	hh++;
	ldab L5
	clra
	addd #1
	stab L5
; 					hm = 0;
	clr L6
; 					redraw = 9;
	ldd #9
	std -11,x
; 					}
L26:
; 				 if (hh > 9) {
	ldab L5
	cmpb #9
	bls L28
; 				 	hh = 0; 
	clr L5
; 					redraw = 9;
	ldd #9
	std -11,x
; 					}
L28:
; 
; 				 
; 				 // display time
; 				 if (startup) {
	tst L13
	beq L30
; 				 	putchar(hh+48);
	ldab L5
	clra
	addd #48
	clra
	jsr _putchar
; 					putchar(hm+48);
	ldab L6
	clra
	addd #48
	clra
	jsr _putchar
; 					putchar(hl+48);
	ldab L7
	clra
	addd #48
	clra
	jsr _putchar
; 					putchar(':');
	ldd #58
	jsr _putchar
; 					putchar(mh+48);
	ldab L8
	clra
	addd #48
	clra
	jsr _putchar
; 					putchar(ml+48);
	ldab L9
	clra
	addd #48
	clra
	jsr _putchar
; 					putchar(':');
	ldd #58
	jsr _putchar
; 					putchar(sh+48);
	ldab L10
	clra
	addd #48
	clra
	jsr _putchar
; 				 	putchar(sl+48);
	ldab L11
	clra
	addd #48
	clra
	jsr _putchar
; 					
; 					startup = 0;
	clr L13
; 					}
	lbra L31
L30:
; 				 else {
; 				 	  for (i=0; i<redraw; i++)
	clr -9,x
	bra L35
L32:
	ldd #8
	jsr _putchar
L33:
	ldab -9,x
	clra
	addd #1
	stab -9,x
L35:
	ldab -9,x
	clra
	cpd -11,x
	blt L32
	ldd -11,x
	cpd #1
	lbeq L46
	ldd -11,x
	cpd #2
	lbeq L45
	ldd -11,x
	cpd #3
	beq L44
	ldd -11,x
	cpd #4
	beq L43
	ldd -11,x
	cpd #5
	beq L42
	ldd -11,x
	cpd #6
	beq L41
	ldd -11,x
	cpd #7
	beq L40
	ldd -11,x
	cpd #8
	beq L39
	ldd -11,x
	cpd #9
	beq L38
	bra L36
X0:
; 				 	  	  putchar(8);		 // backspaces
; 						  
; 				 	  switch (redraw) {
L38:
; 				 		case 9:	 putchar(hh+48);
	ldab L5
	clra
	addd #48
	clra
	jsr _putchar
L39:
; 						case 8:	 putchar(hm+48);
	ldab L6
	clra
	addd #48
	clra
	jsr _putchar
L40:
; 						case 7:	 putchar(hl+48);
	ldab L7
	clra
	addd #48
	clra
	jsr _putchar
L41:
; 						case 6:	 putchar(':');
	ldd #58
	jsr _putchar
L42:
; 						case 5:	 putchar(mh+48);
	ldab L8
	clra
	addd #48
	clra
	jsr _putchar
L43:
; 						case 4:	 putchar(ml+48);
	ldab L9
	clra
	addd #48
	clra
	jsr _putchar
L44:
; 						case 3:	 putchar(':');
	ldd #58
	jsr _putchar
L45:
; 						case 2:	 putchar(sh+48);
	ldab L10
	clra
	addd #48
	clra
	jsr _putchar
L46:
; 				 		case 1:	 putchar(sl+48);
	ldab L11
	clra
	addd #48
	clra
	jsr _putchar
; 						}
L36:
; 				 	}
L31:
; 				 }
L14:
; 	 
; 
; 
; 	 
; 	 INTR_OFF();
		sei

; 	 
; }
L3:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
L4:
	.word 15,16960

