.module task2.c .area data 0000 L5: 0000 .blkb 1 .area idata 0000 00 .byte 0 .area data 0001 L6: 0001 .blkb 1 .area idata 0001 00 .byte 0 .area data 0002 L7: 0002 .blkb 1 .area idata 0002 00 .byte 0 .area data 0003 L8: 0003 .blkb 1 .area idata 0003 00 .byte 0 .area data 0004 L9: 0004 .blkb 1 .area idata 0004 00 .byte 0 .area data 0005 L10: 0005 .blkb 1 .area idata 0005 00 .byte 0 .area data 0006 L11: 0006 .blkb 1 .area idata 0006 00 .byte 0 .area data .area bss 0000 L12: 0000 .blkb 4 .area data 0007 L13: 0007 .blkb 1 .area idata 0007 01 .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 0000 _task2:: 0000 34 pshx 0001 B775 tfr s,x 0003 1BF1EA leas -22,sp 0006 ; // task2.c 0006 ; 0006 ; #include 0006 ; #include <912d60.h> 0006 ; #include "kernel.h" 0006 ; 0006 ; 0006 ; 0006 ; /* counts seconds and displays them */ 0006 ; void task2 (void) { 0006 ; 0006 ; 0006 ; char i; 0006 ; 0006 ; extern unsigned long int system_tick; 0006 ; unsigned long int delta_t; 0006 ; const unsigned int tick_size = 65535; 0006 CCFFFF ldd #0xffff 0009 6CE1EF std -17,x 000C ; const unsigned long int one_second = 1000000; 000C CD025C ldy #L4 000F 1802401C movw 0,y,-4,x 0013 1802421E movw 2,y,-2,x 0017 19E1EB leay -21,x 001A 18021C40 movw -4,x,0,y 001E 18021E42 movw -2,x,2,y 0022 ; 0022 ; 0022 ; static unsigned char hh=0, hm=0, hl=0, mh=0, ml=0, sh=0, sl=0; 0022 ; static unsigned long int last_mark; 0022 ; int redraw; 0022 ; static char startup = 1; 0022 ; 0022 ; 0022 ; INTR_ON(); 0022 10EF cli 0024 0024 ; 0024 ; 0024 ; 0024 ; delta_t = (system_tick - last_mark) * tick_size; 0024 CD0000 ldy #_system_tick 0027 1802401C movw 0,y,-4,x 002B 1802421E movw 2,y,-2,x 002F CD0000 ldy #L12 0032 18024018 movw 0,y,-8,x 0036 1802421A movw 2,y,-6,x 003A 160000 jsr __lsub 003D ECE1EF ldd -17,x 0040 6C1A std -6,x 0042 1800180000 movw #0,-8,x 0047 160000 jsr __lmul 004A 1911 leay -15,x 004C 18021C40 movw -4,x,0,y 0050 18021E42 movw -2,x,2,y 0054 ; 0054 ; if (delta_t > one_second) { 0054 1911 leay -15,x 0056 1802401C movw 0,y,-4,x 005A 1802421E movw 2,y,-2,x 005E 19E1EB leay -21,x 0061 18024018 movw 0,y,-8,x 0065 1802421A movw 2,y,-6,x 0069 160000 jsr __lcmp 006C 182301E6 lbls L14 0070 ; last_mark = system_tick; 0070 CD0000 ldy #_system_tick 0073 1802401C movw 0,y,-4,x 0077 1802421E movw 2,y,-2,x 007B CD0000 ldy #L12 007E 18021C40 movw -4,x,0,y 0082 18021E42 movw -2,x,2,y 0086 ; sl++; 0086 F60006 ldab L11 0089 87 clra 008A C30001 addd #1 008D 7B0006 stab L11 0090 ; redraw = 1; 0090 CC0001 ldd #1 0093 6C15 std -11,x 0095 ; if (sl > 9) { 0095 F60006 ldab L11 0098 C109 cmpb #9 009A 2312 bls L16 009C ; sh++; 009C F60005 ldab L10 009F 87 clra 00A0 C30001 addd #1 00A3 7B0005 stab L10 00A6 ; sl = 0; 00A6 790006 clr L11 00A9 ; redraw = 2; 00A9 CC0002 ldd #2 00AC 6C15 std -11,x 00AE ; } 00AE L16: 00AE ; if (sh > 5) { 00AE F60005 ldab L10 00B1 C105 cmpb #5 00B3 2312 bls L18 00B5 ; ml++; 00B5 F60004 ldab L9 00B8 87 clra 00B9 C30001 addd #1 00BC 7B0004 stab L9 00BF ; sh = 0; 00BF 790005 clr L10 00C2 ; redraw = 4; 00C2 CC0004 ldd #4 00C5 6C15 std -11,x 00C7 ; } 00C7 L18: 00C7 ; if (ml > 9) { 00C7 F60004 ldab L9 00CA C109 cmpb #9 00CC 2312 bls L20 00CE ; mh++; 00CE F60003 ldab L8 00D1 87 clra 00D2 C30001 addd #1 00D5 7B0003 stab L8 00D8 ; ml = 0; 00D8 790004 clr L9 00DB ; redraw = 5; 00DB CC0005 ldd #5 00DE 6C15 std -11,x 00E0 ; } 00E0 L20: 00E0 ; if (mh > 5) { 00E0 F60003 ldab L8 00E3 C105 cmpb #5 00E5 2312 bls L22 00E7 ; hl++; 00E7 F60002 ldab L7 00EA 87 clra 00EB C30001 addd #1 00EE 7B0002 stab L7 00F1 ; mh = 0; 00F1 790003 clr L8 00F4 ; redraw = 7; 00F4 CC0007 ldd #7 00F7 6C15 std -11,x 00F9 ; } 00F9 L22: 00F9 ; if (hl > 9) { 00F9 F60002 ldab L7 00FC C109 cmpb #9 00FE 2312 bls L24 0100 ; hm++; 0100 F60001 ldab L6 0103 87 clra 0104 C30001 addd #1 0107 7B0001 stab L6 010A ; hl = 0; 010A 790002 clr L7 010D ; redraw = 8; 010D CC0008 ldd #8 0110 6C15 std -11,x 0112 ; } 0112 L24: 0112 ; if (hm > 9) { 0112 F60001 ldab L6 0115 C109 cmpb #9 0117 2312 bls L26 0119 ; hh++; 0119 F60000 ldab L5 011C 87 clra 011D C30001 addd #1 0120 7B0000 stab L5 0123 ; hm = 0; 0123 790001 clr L6 0126 ; redraw = 9; 0126 CC0009 ldd #9 0129 6C15 std -11,x 012B ; } 012B L26: 012B ; if (hh > 9) { 012B F60000 ldab L5 012E C109 cmpb #9 0130 2308 bls L28 0132 ; hh = 0; 0132 790000 clr L5 0135 ; redraw = 9; 0135 CC0009 ldd #9 0138 6C15 std -11,x 013A ; } 013A L28: 013A ; 013A ; 013A ; // display time 013A ; if (startup) { 013A F70007 tst L13 013D 2760 beq L30 013F ; putchar(hh+48); 013F F60000 ldab L5 0142 87 clra 0143 C30030 addd #48 0146 87 clra 0147 160000 jsr _putchar 014A ; putchar(hm+48); 014A F60001 ldab L6 014D 87 clra 014E C30030 addd #48 0151 87 clra 0152 160000 jsr _putchar 0155 ; putchar(hl+48); 0155 F60002 ldab L7 0158 87 clra 0159 C30030 addd #48 015C 87 clra 015D 160000 jsr _putchar 0160 ; putchar(':'); 0160 CC003A ldd #58 0163 160000 jsr _putchar 0166 ; putchar(mh+48); 0166 F60003 ldab L8 0169 87 clra 016A C30030 addd #48 016D 87 clra 016E 160000 jsr _putchar 0171 ; putchar(ml+48); 0171 F60004 ldab L9 0174 87 clra 0175 C30030 addd #48 0178 87 clra 0179 160000 jsr _putchar 017C ; putchar(':'); 017C CC003A ldd #58 017F 160000 jsr _putchar 0182 ; putchar(sh+48); 0182 F60005 ldab L10 0185 87 clra 0186 C30030 addd #48 0189 87 clra 018A 160000 jsr _putchar 018D ; putchar(sl+48); 018D F60006 ldab L11 0190 87 clra 0191 C30030 addd #48 0194 87 clra 0195 160000 jsr _putchar 0198 ; 0198 ; startup = 0; 0198 790007 clr L13 019B ; } 019B 182000B7 lbra L31 019F L30: 019F ; else { 019F ; for (i=0; i