.module task2.c .area data 0000 L4: 0000 .blkb 1 .area idata 0000 00 .byte 0 .area data 0001 L5: 0001 .blkb 1 .area idata 0001 00 .byte 0 .area data 0002 L6: 0002 .blkb 1 .area idata 0002 00 .byte 0 .area data 0003 L7: 0003 .blkb 1 .area idata 0003 00 .byte 0 .area data 0004 L8: 0004 .blkb 1 .area idata 0004 00 .byte 0 .area data 0005 L9: 0005 .blkb 1 .area idata 0005 00 .byte 0 .area data 0006 L10: 0006 .blkb 1 .area idata 0006 00 .byte 0 .area data .area bss 0000 L11: 0000 .blkb 4 .area data 0007 L12: 0007 .blkb 1 .area idata 0007 01 .byte 1 .area data .area text ; lreg1 -> -4,x ; lreg2 -> -8,x ; delta_t -> -15,x ; redraw -> -11,x ; i -> -9,x 0000 _task2:: 0000 34 pshx 0001 B775 tfr s,x 0003 1B90 leas -16,sp 0005 ; // task2.c 0005 ; 0005 ; #include 0005 ; #include <912d60.h> 0005 ; #include "kernel.h" 0005 ; 0005 ; 0005 ; 0005 ; /* counts seconds and displays them */ 0005 ; int task2 (void) { 0005 ; 0005 ; 0005 ; char i; 0005 ; unsigned long int delta_t; 0005 ; extern unsigned long int time_tick; 0005 ; 0005 ; 0005 ; static unsigned char hh=0, hm=0, hl=0, mh=0, ml=0, sh=0, sl=0; 0005 ; static unsigned long int last_mark; 0005 ; int redraw; 0005 ; static char startup = 1; 0005 ; 0005 ; 0005 ; INTR_ON(); 0005 10EF cli 0007 0007 ; 0007 ; 0007 ; 0007 ; delta_t = (time_tick - last_mark) * uS_PER_TIME_TICK; 0007 CD0000 ldy #_time_tick 000A 1802401C movw 0,y,-4,x 000E 1802421E movw 2,y,-2,x 0012 CD0000 ldy #L11 0015 18024018 movw 0,y,-8,x 0019 1802421A movw 2,y,-6,x 001D 160000 jsr __lsub 0020 18021E1A movw -2,x,-6,x 0024 18021C18 movw -4,x,-8,x 0028 CD024F ldy #L13 002B 1802401C movw 0,y,-4,x 002F 1802421E movw 2,y,-2,x 0033 160000 jsr __lmul 0036 1911 leay -15,x 0038 18021C40 movw -4,x,0,y 003C 18021E42 movw -2,x,2,y 0040 ; 0040 ; if (delta_t > uS_PER_SECOND) { 0040 1911 leay -15,x 0042 1802401C movw 0,y,-4,x 0046 1802421E movw 2,y,-2,x 004A CD024B ldy #L16 004D 18024018 movw 0,y,-8,x 0051 1802421A movw 2,y,-6,x 0055 160000 jsr __lcmp 0058 182301E6 lbls L14 005C ; last_mark = time_tick; 005C CD0000 ldy #_time_tick 005F 1802401C movw 0,y,-4,x 0063 1802421E movw 2,y,-2,x 0067 CD0000 ldy #L11 006A 18021C40 movw -4,x,0,y 006E 18021E42 movw -2,x,2,y 0072 ; sl++; 0072 F60006 ldab L10 0075 87 clra 0076 C30001 addd #1 0079 7B0006 stab L10 007C ; redraw = 1; 007C CC0001 ldd #1 007F 6C15 std -11,x 0081 ; if (sl > 9) { 0081 F60006 ldab L10 0084 C109 cmpb #9 0086 2312 bls L17 0088 ; sh++; 0088 F60005 ldab L9 008B 87 clra 008C C30001 addd #1 008F 7B0005 stab L9 0092 ; sl = 0; 0092 790006 clr L10 0095 ; redraw = 2; 0095 CC0002 ldd #2 0098 6C15 std -11,x 009A ; } 009A L17: 009A ; if (sh > 5) { 009A F60005 ldab L9 009D C105 cmpb #5 009F 2312 bls L19 00A1 ; ml++; 00A1 F60004 ldab L8 00A4 87 clra 00A5 C30001 addd #1 00A8 7B0004 stab L8 00AB ; sh = 0; 00AB 790005 clr L9 00AE ; redraw = 4; 00AE CC0004 ldd #4 00B1 6C15 std -11,x 00B3 ; } 00B3 L19: 00B3 ; if (ml > 9) { 00B3 F60004 ldab L8 00B6 C109 cmpb #9 00B8 2312 bls L21 00BA ; mh++; 00BA F60003 ldab L7 00BD 87 clra 00BE C30001 addd #1 00C1 7B0003 stab L7 00C4 ; ml = 0; 00C4 790004 clr L8 00C7 ; redraw = 5; 00C7 CC0005 ldd #5 00CA 6C15 std -11,x 00CC ; } 00CC L21: 00CC ; if (mh > 5) { 00CC F60003 ldab L7 00CF C105 cmpb #5 00D1 2312 bls L23 00D3 ; hl++; 00D3 F60002 ldab L6 00D6 87 clra 00D7 C30001 addd #1 00DA 7B0002 stab L6 00DD ; mh = 0; 00DD 790003 clr L7 00E0 ; redraw = 7; 00E0 CC0007 ldd #7 00E3 6C15 std -11,x 00E5 ; } 00E5 L23: 00E5 ; if (hl > 9) { 00E5 F60002 ldab L6 00E8 C109 cmpb #9 00EA 2312 bls L25 00EC ; hm++; 00EC F60001 ldab L5 00EF 87 clra 00F0 C30001 addd #1 00F3 7B0001 stab L5 00F6 ; hl = 0; 00F6 790002 clr L6 00F9 ; redraw = 8; 00F9 CC0008 ldd #8 00FC 6C15 std -11,x 00FE ; } 00FE L25: 00FE ; if (hm > 9) { 00FE F60001 ldab L5 0101 C109 cmpb #9 0103 2312 bls L27 0105 ; hh++; 0105 F60000 ldab L4 0108 87 clra 0109 C30001 addd #1 010C 7B0000 stab L4 010F ; hm = 0; 010F 790001 clr L5 0112 ; redraw = 9; 0112 CC0009 ldd #9 0115 6C15 std -11,x 0117 ; } 0117 L27: 0117 ; if (hh > 9) { 0117 F60000 ldab L4 011A C109 cmpb #9 011C 2308 bls L29 011E ; hh = 0; 011E 790000 clr L4 0121 ; redraw = 9; 0121 CC0009 ldd #9 0124 6C15 std -11,x 0126 ; } 0126 L29: 0126 ; 0126 ; 0126 ; // display time 0126 ; if (startup) { 0126 F70007 tst L12 0129 2760 beq L31 012B ; putchar(hh+48); 012B F60000 ldab L4 012E 87 clra 012F C30030 addd #48 0132 87 clra 0133 160000 jsr _putchar 0136 ; putchar(hm+48); 0136 F60001 ldab L5 0139 87 clra 013A C30030 addd #48 013D 87 clra 013E 160000 jsr _putchar 0141 ; putchar(hl+48); 0141 F60002 ldab L6 0144 87 clra 0145 C30030 addd #48 0148 87 clra 0149 160000 jsr _putchar 014C ; putchar(':'); 014C CC003A ldd #58 014F 160000 jsr _putchar 0152 ; putchar(mh+48); 0152 F60003 ldab L7 0155 87 clra 0156 C30030 addd #48 0159 87 clra 015A 160000 jsr _putchar 015D ; putchar(ml+48); 015D F60004 ldab L8 0160 87 clra 0161 C30030 addd #48 0164 87 clra 0165 160000 jsr _putchar 0168 ; putchar(':'); 0168 CC003A ldd #58 016B 160000 jsr _putchar 016E ; putchar(sh+48); 016E F60005 ldab L9 0171 87 clra 0172 C30030 addd #48 0175 87 clra 0176 160000 jsr _putchar 0179 ; putchar(sl+48); 0179 F60006 ldab L10 017C 87 clra 017D C30030 addd #48 0180 87 clra 0181 160000 jsr _putchar 0184 ; 0184 ; startup = 0; 0184 790007 clr L12 0187 ; } 0187 182000B7 lbra L32 018B L31: 018B ; else { 018B ; for (i=0; i