.module shell.c .area text ; ?temp -> -49,x ; ?temp -> -47,x ; cmd_length -> -46,x ; cmd -> -44,x ; argc -> -43,x ; argv -> -41,x ; cursor1 -> -39,x ; j -> -37,x ; cursor2 -> -36,x ; command -> -34,x ; i -> -1,x 0000 _shell:: 0000 34 pshx 0001 B775 tfr s,x 0003 1BF1C0 leas -64,sp 0006 ; // shell.c 0006 ; 0006 ; #include <912d60.h> 0006 ; #include 0006 ; #include 0006 ; #include 0006 ; #include 0006 ; #include "kernel.h" 0006 ; #include "semlib.h" 0006 ; 0006 ; 0006 ; 0006 ; 0006 ; // FUNCTION PROTOTYPES 0006 ; void shellcmd_help(char *argv1); 0006 ; void shellcmd_tcb(signed char id); 0006 ; void shellcmd_rcb(signed char id); 0006 ; void shellcmd_rcbPrint(signed char rid); 0006 ; void shellcmd_ticks(void); 0006 ; void shellcmd_startTask(unsigned char id); 0006 ; void shellcmd_stopTask(unsigned char id); 0006 ; void shellcmd_time(void); 0006 ; void shellcmd_freeMemCheck(void); 0006 ; void shellcmd_kdb(int onoff); 0006 ; void shellcmd_quitShell(void); 0006 ; /* 0006 ; void shellcmd_setTaskPriority(unsigned char id, unsigned char priority); 0006 ; */ 0006 ; 0006 ; 0006 ; 0006 ; 0006 ; // GLOBAL VARIABLES 0006 ; extern unsigned long int system_tick; 0006 ; extern unsigned int current; // current task id number 0006 ; 0006 ; extern char error_msg[8][25]; 0006 ; extern char error_src[5][18]; 0006 ; 0006 ; extern char kdb_trace; 0006 ; 0006 ; 0006 ; 0006 ; 0006 ; int shell(void) { 0006 ; 0006 ; // LOCAL CONSTANTS 0006 ; #define cmd_size (32+1) 0006 ; 0006 ; 0006 ; 0006 ; // LOCAL ENUMERATIONS 0006 ; enum command_type { help = 1, 0006 ; tcb, 0006 ; rcb, 0006 ; ticks, 0006 ; start, 0006 ; stop, 0006 ; priority, 0006 ; time, 0006 ; freemem, 0006 ; kdb, 0006 ; quit, 0006 ; taskname 0006 ; }; 0006 ; 0006 ; 0006 ; 0006 ; // LOCAL VARIABLES 0006 ; char command[cmd_size], i, j, **argv, *cursor1, *cursor2; 0006 ; int cmd_length, argc; 0006 ; enum command_type cmd; 0006 ; 0006 ; 0006 ; 0006 ; 0006 ; // INITIALIZE SHELL 0006 ; sem_get(COM1); // get COM1 semaphore 0006 CC0003 ldd #3 0009 160000 jsr _sem_get 000C ; set_task_priority(current, 200); 000C CC00C8 ldd #200 000F 6C80 std 0,sp 0011 FC0000 ldd _current 0014 87 clra 0015 160000 jsr _set_task_priority 0018 ; INTR_ON(); // enable interrupts 0018 10EF cli 001A 001A 18200661 lbra L5 001E L4: 001E ; 001E ; 001E ; 001E ; 001E ; 001E ; // SHELL COMMAND LINE INTERPRETER 001E ; while (1) { 001E ; 001E ; INTR_ON(); 001E 10EF cli 0020 0020 ; i = 0; 0020 691F clr -1,x 0022 ; cursor1 = command; 0022 19E1DE leay -34,x 0025 6DE1D9 sty -39,x 0028 ; cursor2 = command; 0028 19E1DE leay -34,x 002B 6DE1DC sty -36,x 002E ; 002E ; 002E ; // put a PROMPT 002E ; putchar('>'); putchar('>'); putchar(' '); 002E CC003E ldd #62 0031 160000 jsr _putchar 0034 CC003E ldd #62 0037 160000 jsr _putchar 003A CC0020 ldd #32 003D 160000 jsr _putchar 0040 2056 bra L8 0042 L7: 0042 ; 0042 ; 0042 ; // GET AND ECHO THE COMMAND on the console 0042 ; while (((command[i]=getchar()) != 0xD) && (i -- required arguments"); 03B1 CC0E13 ldd #L76 03B4 160000 jsr _puts 03B7 ; puts("[] -- optional arguments\n"); 03B7 CC0DF9 ldd #L77 03BA 160000 jsr _puts 03BD ; puts("help [cmd] -- help on a specific command"); 03BD CC0DD0 ldd #L78 03C0 160000 jsr _puts 03C3 ; puts("tcb [task_id] -- prints task control block"); 03C3 CC0DA5 ldd #L79 03C6 160000 jsr _puts 03C9 ; puts("rcb [[task_id] | [-b]] -- prints resource control block"); 03C9 CC0D6D ldd #L80 03CC 160000 jsr _puts 03CF ; puts("ticks -- shows system tick"); 03CF CC0D52 ldd #L81 03D2 160000 jsr _puts 03D5 ; puts("start -- start a task"); 03D5 CC0D32 ldd #L82 03D8 160000 jsr _puts 03DB ; puts("stop -- stop a task"); 03DB CC0D13 ldd #L83 03DE 160000 jsr _puts 03E1 ; puts("priority , -- change prio"); 03E1 CC0CDF ldd #L84 03E4 160000 jsr _puts 03E7 ; puts("time [ ]-- display/set the current system time"); 03E7 CC0C9F ldd #L85 03EA 160000 jsr _puts 03ED ; puts("freemem -- get approximate free RAM space"); 03ED CC0C75 ldd #L86 03F0 160000 jsr _puts 03F3 ; puts("kdb [1|0] -- turn kernel debug on/off"); 03F3 CC0C4F ldd #L87 03F6 160000 jsr _puts 03F9 ; puts("quit -- quit the shell (carefull!)"); 03F9 CC0C2C ldd #L88 03FC 160000 jsr _puts 03FF ; putchar('\n'); 03FF CC000A ldd #10 0402 160000 jsr _putchar 0405 ; } 0405 18200248 lbra L70 0409 L73: 0409 ; else if (argc == 2) 0409 ECE1D5 ldd -43,x 040C 8C0002 cpd #2 040F 1826023E lbne L70 0413 ; shellcmd_help(argv[1]); 0413 EDE1D7 ldy -41,x 0416 EC42 ldd 2,y 0418 160692 jsr _shellcmd_help 041B ; break; 041B 18200232 lbra L70 041F L91: 041F ; case tcb: 041F ; if (argc == 1) 041F ECE1D5 ldd -43,x 0422 8C0001 cpd #1 0425 260A bne L92 0427 ; shellcmd_tcb(-1); 0427 CCFFFF ldd #-1 042A 160699 jsr _shellcmd_tcb 042D 18200220 lbra L70 0431 L92: 0431 ; else if (argc == 2) 0431 ECE1D5 ldd -43,x 0434 8C0002 cpd #2 0437 2611 bne L94 0439 ; shellcmd_tcb(atoi(argv[1])); 0439 EDE1D7 ldy -41,x 043C EC42 ldd 2,y 043E 160000 jsr _atoi 0441 B714 tfr b,d 0443 160699 jsr _shellcmd_tcb 0446 18200207 lbra L70 044A L94: 044A ; else if (argc > 2) 044A ECE1D5 ldd -43,x 044D 8C0002 cpd #2 0450 182F01FD lble L70 0454 ; puts(error_msg[1]); 0454 CC0019 ldd #_error_msg+25 0457 160000 jsr _puts 045A ; break; 045A 182001F3 lbra L70 045E L99: 045E ; case rcb: 045E ; if (argc == 1) // print entire rcb 045E ECE1D5 ldd -43,x 0461 8C0001 cpd #1 0464 260A bne L100 0466 ; shellcmd_rcb(-1); 0466 CCFFFF ldd #-1 0469 16075A jsr _shellcmd_rcb 046C 182001E1 lbra L70 0470 L100: 0470 ; else if (argc == 2) { 0470 ECE1D5 ldd -43,x 0473 8C0002 cpd #2 0476 262D bne L102 0478 ; if (!strcmp(argv[1], "-b")) { // print 'busy' only 0478 CC0C29 ldd #L106 047B 6C80 std 0,sp 047D EDE1D7 ldy -41,x 0480 EC42 ldd 2,y 0482 160000 jsr _strcmp 0485 8C0000 cpd #0 0488 260A bne L104 048A ; shellcmd_rcb(-2); 048A CCFFFE ldd #-2 048D 16075A jsr _shellcmd_rcb 0490 ; } 0490 182001BD lbra L70 0494 L104: 0494 ; else 0494 ; shellcmd_rcb(atoi(argv[1])); // single 0494 EDE1D7 ldy -41,x 0497 EC42 ldd 2,y 0499 160000 jsr _atoi 049C B714 tfr b,d 049E 16075A jsr _shellcmd_rcb 04A1 ; } 04A1 182001AC lbra L70 04A5 L102: 04A5 ; else if (argc > 2) 04A5 ECE1D5 ldd -43,x 04A8 8C0002 cpd #2 04AB 182F01A2 lble L70 04AF ; puts(error_msg[1]); 04AF CC0019 ldd #_error_msg+25 04B2 160000 jsr _puts 04B5 ; break; 04B5 18200198 lbra L70 04B9 L110: 04B9 ; case ticks: 04B9 ; if (argc > 1) 04B9 ECE1D5 ldd -43,x 04BC 8C0001 cpd #1 04BF 2F0A ble L111 04C1 ; puts(error_msg[1]); 04C1 CC0019 ldd #_error_msg+25 04C4 160000 jsr _puts 04C7 18200186 lbra L70 04CB L111: 04CB ; else 04CB ; shellcmd_ticks(); 04CB 160822 jsr _shellcmd_ticks 04CE ; break; 04CE 1820017F lbra L70 04D2 L114: 04D2 ; case start: 04D2 ; if ((argc != 2) || 04D2 ECE1D5 ldd -43,x 04D5 8C0002 cpd #2 04D8 2610 bne L117 04DA EDE1D7 ldy -41,x 04DD ED42 ldy 2,y 04DF E640 ldab 0,y 04E1 87 clra 04E2 160000 jsr _isdigit 04E5 8C0000 cpd #0 04E8 260A bne L115 04EA L117: 04EA ; (!isdigit(*argv[1]))) 04EA ; puts(error_msg[1]); 04EA CC0019 ldd #_error_msg+25 04ED 160000 jsr _puts 04F0 1820015D lbra L70 04F4 L115: 04F4 ; else 04F4 ; shellcmd_startTask(atoi(argv[1])); 04F4 EDE1D7 ldy -41,x 04F7 EC42 ldd 2,y 04F9 160000 jsr _atoi 04FC 87 clra 04FD 16084A jsr _shellcmd_startTask 0500 ; break; 0500 1820014D lbra L70 0504 L119: 0504 ; case stop: 0504 ; if ((argc != 2) || 0504 ECE1D5 ldd -43,x 0507 8C0002 cpd #2 050A 2610 bne L122 050C EDE1D7 ldy -41,x 050F ED42 ldy 2,y 0511 E640 ldab 0,y 0513 87 clra 0514 160000 jsr _isdigit 0517 8C0000 cpd #0 051A 260A bne L120 051C L122: 051C ; (!isdigit(*argv[1]))) 051C ; puts(error_msg[1]); 051C CC0019 ldd #_error_msg+25 051F 160000 jsr _puts 0522 1820012B lbra L70 0526 L120: 0526 ; else 0526 ; shellcmd_stopTask(atoi(argv[1])); 0526 EDE1D7 ldy -41,x 0529 EC42 ldd 2,y 052B 160000 jsr _atoi 052E 87 clra 052F 160875 jsr _shellcmd_stopTask 0532 ; break; 0532 1820011B lbra L70 0536 L124: 0536 ; case priority: 0536 ; puts(error_msg[0]); 0536 CC0000 ldd #_error_msg 0539 160000 jsr _puts 053C ; break; 053C 18200111 lbra L70 0540 L125: 0540 ECE1D5 ldd -43,x 0543 8C0001 cpd #1 0546 270A beq L128 0548 ECE1D5 ldd -43,x 054B 8C0004 cpd #4 054E 2709 beq L129 0550 2055 bra L126 0552 X2: 0552 ; case time: 0552 ; switch (argc) { 0552 L128: 0552 ; case 1: 0552 ; shellcmd_time(); 0552 16089C jsr _shellcmd_time 0555 ; break; 0555 182000F8 lbra L70 0559 L129: 0559 ; case 4: 0559 ; if (argv[1] && argv[2] && argv[3]) 0559 EDE1D7 ldy -41,x 055C EC42 ldd 2,y 055E 273D beq L130 0560 EDE1D7 ldy -41,x 0563 EC44 ldd 4,y 0565 2736 beq L130 0567 EDE1D7 ldy -41,x 056A EC46 ldd 6,y 056C 272F beq L130 056E ; set_sysTime(atoi(argv[1]), 056E EDE1D7 ldy -41,x 0571 EC42 ldd 2,y 0573 160000 jsr _atoi 0576 6CE1C8 std -56,x 0579 EDE1D7 ldy -41,x 057C EC44 ldd 4,y 057E 160000 jsr _atoi 0581 6CE1C6 std -58,x 0584 EDE1D7 ldy -41,x 0587 EC46 ldd 6,y 0589 160000 jsr _atoi 058C 6C82 std 2,sp 058E ECE1C6 ldd -58,x 0591 6C80 std 0,sp 0593 ECE1C8 ldd -56,x 0596 160000 jsr _set_sysTime 0599 182000B4 lbra L70 059D L130: 059D ; atoi(argv[2]), 059D ; atoi(argv[3])); 059D ; else 059D ; puts(error_msg[1]); 059D CC0019 ldd #_error_msg+25 05A0 160000 jsr _puts 05A3 ; break; 05A3 182000AA lbra L70 05A7 L126: 05A7 ; default: 05A7 ; puts(error_msg[1]); 05A7 CC0019 ldd #_error_msg+25 05AA 160000 jsr _puts 05AD ; } 05AD ; break; 05AD 182000A0 lbra L70 05B1 L134: 05B1 ; case freemem: 05B1 ; shellcmd_freeMemCheck(); 05B1 1609A5 jsr _shellcmd_freeMemCheck 05B4 ; break; 05B4 18200099 lbra L70 05B8 L135: 05B8 ; case kdb: 05B8 ; if (argc < 2) 05B8 ECE1D5 ldd -43,x 05BB 8C0002 cpd #2 05BE 2C0A bge L136 05C0 ; puts(error_msg[1]); 05C0 CC0019 ldd #_error_msg+25 05C3 160000 jsr _puts 05C6 18200087 lbra L70 05CA L136: 05CA ; else 05CA ; shellcmd_kdb(atoi(argv[1])); 05CA EDE1D7 ldy -41,x 05CD EC42 ldd 2,y 05CF 160000 jsr _atoi 05D2 1609BD jsr _shellcmd_kdb 05D5 ; break; 05D5 18200078 lbra L70 05D9 L139: 05D9 ; case quit: 05D9 ; shellcmd_quitShell(); 05D9 1609CC jsr _shellcmd_quitShell 05DC ; return 1; 05DC CC0001 ldd #1 05DF 182000AB lbra L3 05E3 L140: 05E3 ; case taskname: 05E3 ; // start a stopped task that's already created 05E3 ; cmd = 0; 05E3 69E1D4 clr -44,x 05E6 691F clr -1,x 05E8 2042 bra L144 05EA L141: 05EA ; for (i=0; i 2,x 0692 _shellcmd_help:: 0692 ; 0692 ; } // end shell() 0692 ; 0692 ; 0692 ; 0692 ; 0692 ; 0692 ; void shellcmd_help(char *argv1) { 0692 ; 0692 ; puts(error_msg[0]); 0692 CC0000 ldd #_error_msg 0695 160000 jsr _puts 0698 ; } 0698 L159: 0698 .dbline 0 ; func end 0698 3D rts 0699 ; start -> -2,x 0699 ; max -> -1,x 0699 ; tid -> 3,x 0699 _shellcmd_tcb:: 0699 3B pshd 069A 34 pshx 069B B775 tfr s,x 069D 1BF1EA leas -22,sp 06A0 ; 06A0 ; 06A0 ; 06A0 ; void shellcmd_tcb(signed char tid) { 06A0 ; 06A0 ; // Local Variables 06A0 ; unsigned char max, start; 06A0 ; 06A0 ; if (tid >= MAXTASKS) { 06A0 E603 ldab 3,x 06A2 C108 cmpb #8 06A4 2D0A blt L161 06A6 ; puts(error_msg[2]); 06A6 CC0032 ldd #_error_msg+50 06A9 160000 jsr _puts 06AC ; return; 06AC 182000A4 lbra L160 06B0 L161: 06B0 ; } 06B0 ; 06B0 ; if (tid < 0) { 06B0 E703 tst 3,x 06B2 2C08 bge L164 06B4 ; start = 0; 06B4 691E clr -2,x 06B6 ; max = MAXTASKS; 06B6 C608 ldab #8 06B8 6B1F stab -1,x 06BA ; } 06BA 200F bra L165 06BC L164: 06BC ; else { 06BC ; start = tid; 06BC E603 ldab 3,x 06BE B714 tfr b,d 06C0 6B1E stab -2,x 06C2 ; max = tid + 1; 06C2 E603 ldab 3,x 06C4 B714 tfr b,d 06C6 C30001 addd #1 06C9 6B1F stab -1,x 06CB ; } 06CB L165: 06CB ; 06CB ; puts("\nTask Control Block:"); 06CB CC0C14 ldd #L166 06CE 160000 jsr _puts 06D1 E61E ldab -2,x 06D3 6B03 stab 3,x 06D5 2065 bra L170 06D7 L167: 06D7 ; for (tid=start; tid -1,x 075A ; option -> 3,x 075A _shellcmd_rcb:: 075A 3B pshd 075B 34 pshx 075C B775 tfr s,x 075E 1B9E leas -2,sp 0760 ; 0760 ; 0760 ; 0760 ; 0760 ; void shellcmd_rcb(signed char option) { 0760 ; 0760 ; // Local Variables 0760 ; unsigned char rid; 0760 ; 0760 ; 0760 ; 0760 ; // print all 0760 ; if (option == -1) { 0760 E603 ldab 3,x 0762 C1FF cmpb #-1 0764 261B bne L178 0766 691F clr -1,x 0768 200F bra L183 076A L180: 076A E61F ldab -1,x 076C B714 tfr b,d 076E 1607DA jsr _shellcmd_rcbPrint 0771 L181: 0771 E61F ldab -1,x 0773 87 clra 0774 C30001 addd #1 0777 6B1F stab -1,x 0779 L183: 0779 ; for (rid=0; rid= NUMRESOURCES) { 07AD E603 ldab 3,x 07AF C104 cmpb #4 07B1 2D08 blt L192 07B3 ; puts(error_msg[6]); 07B3 CC0096 ldd #_error_msg+150 07B6 160000 jsr _puts 07B9 ; return; 07B9 2019 bra L177 07BB L192: 07BB ; } 07BB ; else 07BB ; shellcmd_rcbPrint(option); 07BB E603 ldab 3,x 07BD B714 tfr b,d 07BF 1607DA jsr _shellcmd_rcbPrint 07C2 ; 07C2 ; } 07C2 L185: 07C2 L179: 07C2 ; 07C2 ; 07C2 ; puts ("-----------+----------+------------+------------+"); 07C2 CC0AD1 ldd #L195 07C5 160000 jsr _puts 07C8 ; 07C8 ; puts("\nState: 0=notbusy, 1=busy"); 07C8 CC0AB7 ldd #L196 07CB 160000 jsr _puts 07CE ; puts("Owner: 0..15=task ID, 255=nobody"); 07CE CC0A96 ldd #L197 07D1 160000 jsr _puts 07D4 ; 07D4 ; } 07D4 L177: 07D4 B757 tfr x,s 07D6 30 pulx 07D7 1B82 leas 2,sp 07D9 .dbline 0 ; func end 07D9 3D rts 07DA ; rid -> 3,x 07DA _shellcmd_rcbPrint:: 07DA 3B pshd 07DB 34 pshx 07DC B775 tfr s,x 07DE 1B94 leas -12,sp 07E0 ; 07E0 ; 07E0 ; 07E0 ; void shellcmd_rcbPrint(signed char rid) { 07E0 ; 07E0 ; puts ("-----------+----------+------------+------------+"); 07E0 CC0AD1 ldd #L195 07E3 160000 jsr _puts 07E6 ; 07E6 ; INTR_OFF(); 07E6 1410 sei 07E8 07E8 ; printf("RsrcID: %2d | State: %x | Owner: %3d | Waiting: %d |\n", 07E8 E603 ldab 3,x 07EA B714 tfr b,d 07EC 87 clra 07ED 160000 jsr _get_resource_state 07F0 6C1E std -2,x 07F2 E603 ldab 3,x 07F4 B714 tfr b,d 07F6 87 clra 07F7 160000 jsr _get_resource_owner 07FA 6C1C std -4,x 07FC E603 ldab 3,x 07FE B714 tfr b,d 0800 87 clra 0801 160000 jsr _get_resource_queuelen 0804 6C86 std 6,sp 0806 ED1C ldy -4,x 0808 6D84 sty 4,sp 080A ED1E ldy -2,x 080C 6D82 sty 2,sp 080E E603 ldab 3,x 0810 B714 tfr b,d 0812 6C80 std 0,sp 0814 CC0A60 ldd #L199 0817 160000 jsr _printf 081A ; rid, 081A ; get_resource_state(rid), 081A ; get_resource_owner(rid), 081A ; get_resource_queuelen(rid)); 081A ; INTR_ON(); 081A 10EF cli 081C 081C ; 081C ; } 081C L198: 081C B757 tfr x,s 081E 30 pulx 081F 1B82 leas 2,sp 0821 .dbline 0 ; func end 0821 3D rts 0822 ; lreg1 -> -4,x 0822 ; lreg2 -> -8,x 0822 _shellcmd_ticks:: 0822 34 pshx 0823 B775 tfr s,x 0825 1B94 leas -12,sp 0827 ; 0827 ; 0827 ; 0827 ; void shellcmd_ticks(void) { 0827 ; 0827 ; INTR_OFF(); 0827 1410 sei 0829 0829 ; printf("ticks: %ld\n", system_tick); 0829 CD0000 ldy #_system_tick 082C 1802401C movw 0,y,-4,x 0830 1802421E movw 2,y,-2,x 0834 1980 leay 0,sp 0836 18021C40 movw -4,x,0,y 083A 18021E42 movw -2,x,2,y 083E CC0A54 ldd #L201 0841 160000 jsr _printf 0844 ; INTR_ON(); 0844 10EF cli 0846 0846 ; } 0846 L200: 0846 B757 tfr x,s 0848 30 pulx 0849 .dbline 0 ; func end 0849 3D rts 084A ; id -> 3,x 084A _shellcmd_startTask:: 084A 3B pshd 084B 34 pshx 084C B775 tfr s,x 084E 1B9E leas -2,sp 0850 ; 0850 ; 0850 ; 0850 ; 0850 ; void shellcmd_startTask(unsigned char id) { 0850 ; 0850 ; INTR_OFF(); 0850 1410 sei 0852 0852 ; if (set_task_state(id, PENDING) == 0) 0852 CC0001 ldd #1 0855 6C80 std 0,sp 0857 E603 ldab 3,x 0859 87 clra 085A 160000 jsr _set_task_state 085D 8C0000 cpd #0 0860 260B bne L203 0862 ; printf("task %d started\n", id); 0862 E603 ldab 3,x 0864 87 clra 0865 6C80 std 0,sp 0867 CC0A43 ldd #L205 086A 160000 jsr _printf 086D L203: 086D ; INTR_ON(); 086D 10EF cli 086F 086F ; } 086F L202: 086F B757 tfr x,s 0871 30 pulx 0872 1B82 leas 2,sp 0874 .dbline 0 ; func end 0874 3D rts 0875 ; id -> 3,x 0875 _shellcmd_stopTask:: 0875 3B pshd 0876 34 pshx 0877 B775 tfr s,x 0879 1B9E leas -2,sp 087B ; 087B ; 087B ; 087B ; 087B ; void shellcmd_stopTask(unsigned char id) { 087B ; 087B ; if ((set_task_state(id, STOPPED)) == 0) 087B CC0004 ldd #4 087E 6C80 std 0,sp 0880 E603 ldab 3,x 0882 87 clra 0883 160000 jsr _set_task_state 0886 8C0000 cpd #0 0889 260B bne L207 088B ; printf("task %d stopped\n", id); 088B E603 ldab 3,x 088D 87 clra 088E 6C80 std 0,sp 0890 CC0A32 ldd #L209 0893 160000 jsr _printf 0896 L207: 0896 ; 0896 ; } 0896 L206: 0896 B757 tfr x,s 0898 30 pulx 0899 1B82 leas 2,sp 089B .dbline 0 ; func end 089B 3D rts 089C ; lreg1 -> -4,x 089C ; lreg2 -> -8,x 089C ; ?temp -> -29,x 089C ; milliseconds -> -25,x 089C ; seconds -> -23,x 089C ; minutes -> -22,x 089C ; hours -> -21,x 089C ; time -> -20,x 089C ; remainder2 -> -16,x 089C ; remainder1 -> -12,x 089C _shellcmd_time:: 089C 34 pshx 089D B775 tfr s,x 089F 1BF1DA leas -38,sp 08A2 ; 08A2 ; 08A2 ; 08A2 ; 08A2 ; void shellcmd_time(void) { 08A2 ; 08A2 ; // LOCAL VARIABLES 08A2 ; unsigned long int remainder1, remainder2, time; 08A2 ; char hours, minutes, seconds; 08A2 ; int milliseconds; 08A2 ; 08A2 ; 08A2 ; // get the current time, in milliseconds 08A2 ; time = get_sysTime(); 08A2 160000 jsr _get_sysTime 08A5 19E1E3 leay -29,x 08A8 18021C40 movw -4,x,0,y 08AC 18021E42 movw -2,x,2,y 08B0 19E1E3 leay -29,x 08B3 1802401C movw 0,y,-4,x 08B7 1802421E movw 2,y,-2,x 08BB 19E1EC leay -20,x 08BE 18021C40 movw -4,x,0,y 08C2 18021E42 movw -2,x,2,y 08C6 ; 08C6 ; // convert to hh:mm:ss.ms 08C6 ; hours = time / mS_PER_HOUR; 08C6 19E1EC leay -20,x 08C9 1802401C movw 0,y,-4,x 08CD 1802421E movw 2,y,-2,x 08D1 CD0A2E ldy #L211 08D4 18024018 movw 0,y,-8,x 08D8 1802421A movw 2,y,-6,x 08DC 160000 jsr __ludiv 08DF 160000 jsr __lreg2d 08E2 6BE1EB stab -21,x 08E5 ; remainder1 = time % mS_PER_HOUR; 08E5 19E1EC leay -20,x 08E8 1802401C movw 0,y,-4,x 08EC 1802421E movw 2,y,-2,x 08F0 CD0A2E ldy #L211 08F3 18024018 movw 0,y,-8,x 08F7 1802421A movw 2,y,-6,x 08FB 160000 jsr __lumod 08FE 1914 leay -12,x 0900 18021C40 movw -4,x,0,y 0904 18021E42 movw -2,x,2,y 0908 ; minutes = remainder1 / mS_PER_MINUTE; 0908 1914 leay -12,x 090A 1802401C movw 0,y,-4,x 090E 1802421E movw 2,y,-2,x 0912 CD0A2A ldy #L212 0915 18024018 movw 0,y,-8,x 0919 1802421A movw 2,y,-6,x 091D 160000 jsr __ludiv 0920 160000 jsr __lreg2d 0923 6BE1EA stab -22,x 0926 ; remainder2 = remainder1 % mS_PER_MINUTE; 0926 1914 leay -12,x 0928 1802401C movw 0,y,-4,x 092C 1802421E movw 2,y,-2,x 0930 CD0A2A ldy #L212 0933 18024018 movw 0,y,-8,x 0937 1802421A movw 2,y,-6,x 093B 160000 jsr __lumod 093E 1910 leay -16,x 0940 18021C40 movw -4,x,0,y 0944 18021E42 movw -2,x,2,y 0948 ; seconds = remainder2 / mS_PER_SECOND; 0948 1910 leay -16,x 094A 1802401C movw 0,y,-4,x 094E 1802421E movw 2,y,-2,x 0952 CD0A26 ldy #L213 0955 18024018 movw 0,y,-8,x 0959 1802421A movw 2,y,-6,x 095D 160000 jsr __ludiv 0960 160000 jsr __lreg2d 0963 6BE1E9 stab -23,x 0966 ; milliseconds = remainder2 % mS_PER_SECOND; 0966 1910 leay -16,x 0968 1802401C movw 0,y,-4,x 096C 1802421E movw 2,y,-2,x 0970 CD0A26 ldy #L213 0973 18024018 movw 0,y,-8,x 0977 1802421A movw 2,y,-6,x 097B 160000 jsr __lumod 097E 160000 jsr __lreg2d 0981 6CE1E7 std -25,x 0984 ; 0984 ; printf(" %d:%d:%d.%d\n", hours, minutes,seconds, milliseconds); 0984 EDE1E7 ldy -25,x 0987 6D86 sty 6,sp 0989 E6E1E9 ldab -23,x 098C 87 clra 098D 6C84 std 4,sp 098F E6E1EA ldab -22,x 0992 87 clra 0993 6C82 std 2,sp 0995 E6E1EB ldab -21,x 0998 87 clra 0999 6C80 std 0,sp 099B CC0A18 ldd #L214 099E 160000 jsr _printf 09A1 ; 09A1 ; } 09A1 L210: 09A1 B757 tfr x,s 09A3 30 pulx 09A4 .dbline 0 ; func end 09A4 3D rts 09A5 _shellcmd_freeMemCheck:: 09A5 34 pshx 09A6 B775 tfr s,x 09A8 1B9E leas -2,sp 09AA ; 09AA ; 09AA ; 09AA ; 09AA ; void shellcmd_freeMemCheck(void) { 09AA ; 09AA ; 09AA ; INTR_OFF(); 09AA 1410 sei 09AC 09AC ; printf("approximate free heap memory: %d bytes\n", get_free_memory()); 09AC 160000 jsr _get_free_memory 09AF 6C80 std 0,sp 09B1 CC09F0 ldd #L216 09B4 160000 jsr _printf 09B7 ; INTR_ON(); 09B7 10EF cli 09B9 09B9 ; 09B9 ; } 09B9 L215: 09B9 B757 tfr x,s 09BB 30 pulx 09BC .dbline 0 ; func end 09BC 3D rts 09BD ; onoff -> 2,x 09BD _shellcmd_kdb:: 09BD 3B pshd 09BE 34 pshx 09BF B775 tfr s,x 09C1 ; 09C1 ; 09C1 ; 09C1 ; void shellcmd_kdb(int onoff) { 09C1 ; 09C1 ; 09C1 ; kdb_trace = onoff; 09C1 EC02 ldd 2,x 09C3 7B0000 stab _kdb_trace 09C6 ; 09C6 ; } 09C6 L217: 09C6 B757 tfr x,s 09C8 30 pulx 09C9 1B82 leas 2,sp 09CB .dbline 0 ; func end 09CB 3D rts 09CC _shellcmd_quitShell:: 09CC ; 09CC ; 09CC ; 09CC ; 09CC ; void shellcmd_quitShell(void) { 09CC ; 09CC ; puts("exiting shell"); 09CC CC09E2 ldd #L219 09CF 160000 jsr _puts 09D2 ; puts("\n"); 09D2 CC09E0 ldd #L220 09D5 160000 jsr _puts 09D8 ; shellcmd_stopTask(get_task_id()); 09D8 160000 jsr _get_task_id 09DB 87 clra 09DC 160875 jsr _shellcmd_stopTask 09DF ; 09DF ; } 09DF L218: 09DF .dbline 0 ; func end 09DF 3D rts 09E0 L220: 09E0 0A00 .byte 10,0 09E2 L219: 09E2 65786974696E67207368656C6C00 .byte 'e,'x,'i,'t,'i,'n,'g,32,'s,'h,'e,'l,'l,0 09F0 L216: 09F0 617070726F78696D6174652066726565 .byte 'a,'p,'p,'r,'o,'x,'i,'m,'a,'t,'e,32,'f,'r,'e,'e 0A00 2068656170206D656D6F72793A202564 .byte 32,'h,'e,'a,'p,32,'m,'e,'m,'o,'r,'y,58,32,37,'d 0A10 2062797465730A00 .byte 32,'b,'y,'t,'e,'s,10,0 0A18 L214: 0A18 2025643A25643A25642E25640A00 .byte 32,37,'d,58,37,'d,58,37,'d,46,37,'d,10,0 0A26 L213: 0A26 000003E8 .word 0,1000 0A2A L212: 0A2A 0000EA60 .word 0,60000 0A2E L211: 0A2E 0036EE80 .word 54,61056 0A32 L209: 0A32 7461736B2025642073746F707065640A .byte 't,'a,'s,'k,32,37,'d,32,'s,'t,'o,'p,'p,'e,'d,10 0A42 00 .byte 0 0A43 L205: 0A43 7461736B20256420737461727465640A .byte 't,'a,'s,'k,32,37,'d,32,'s,'t,'a,'r,'t,'e,'d,10 0A53 00 .byte 0 0A54 L201: 0A54 7469636B733A20256C640A00 .byte 't,'i,'c,'k,'s,58,32,37,'l,'d,10,0 0A60 L199: 0A60 5273726349443A20253264207C205374 .byte 'R,'s,'r,'c,'I,'D,58,32,37,50,'d,32,124,32,'S,'t 0A70 6174653A202578207C204F776E65723A .byte 'a,'t,'e,58,32,37,'x,32,124,32,'O,'w,'n,'e,'r,58 0A80 20253364207C2057616974696E673A20 .byte 32,37,51,'d,32,124,32,'W,'a,'i,'t,'i,'n,'g,58,32 0A90 2564207C0A00 .byte 37,'d,32,124,10,0 0A96 L197: 0A96 4F776E65723A20302E2E31353D746173 .byte 'O,'w,'n,'e,'r,58,32,48,46,46,49,53,61,'t,'a,'s 0AA6 6B2049442C203235353D6E6F626F6479 .byte 'k,32,'I,'D,44,32,50,53,53,61,'n,'o,'b,'o,'d,'y 0AB6 00 .byte 0 0AB7 L196: 0AB7 0A53746174653A20303D6E6F74627573 .byte 10,'S,'t,'a,'t,'e,58,32,48,61,'n,'o,'t,'b,'u,'s 0AC7 792C20313D6275737900 .byte 'y,44,32,49,61,'b,'u,'s,'y,0 0AD1 L195: 0AD1 2D2D2D2D2D2D2D2D2D2D2D2B2D2D2D2D .byte 45,45,45,45,45,45,45,45,45,45,45,43,45,45,45,45 0AE1 2D2D2D2D2D2D2B2D2D2D2D2D2D2D2D2D .byte 45,45,45,45,45,45,43,45,45,45,45,45,45,45,45,45 0AF1 2D2D2D2B2D2D2D2D2D2D2D2D2D2D2D2D .byte 45,45,45,43,45,45,45,45,45,45,45,45,45,45,45,45 0B01 2B00 .byte 43,0 0B03 L176: 0B03 4D6573736167653A205B206269743720 .byte 'M,'e,'s,'s,'a,'g,'e,58,32,91,32,'b,'i,'t,55,32 0B13 7C2062697436207C2062697435207C20 .byte 124,32,'b,'i,'t,54,32,124,32,'b,'i,'t,53,32,124,32 0B23 62697434207C2062697433207C206269 .byte 'b,'i,'t,52,32,124,32,'b,'i,'t,51,32,124,32,'b,'i 0B33 7432207C207072696F207C2073746174 .byte 't,50,32,124,32,'p,'r,'i,'o,32,124,32,'s,'t,'a,'t 0B43 65205D00 .byte 'e,32,93,0 0B47 L175: 0B47 0A53746174653A20303D69646C652C20 .byte 10,'S,'t,'a,'t,'e,58,32,48,61,'i,'d,'l,'e,44,32 0B57 313D70656E64696E672C20323D72756E .byte 49,61,'p,'e,'n,'d,'i,'n,'g,44,32,50,61,'r,'u,'n 0B67 6E696E672C20333D77616974696E672C .byte 'n,'i,'n,'g,44,32,51,61,'w,'a,'i,'t,'i,'n,'g,44 0B77 20343D73746F7070656400 .byte 32,52,61,'s,'t,'o,'p,'p,'e,'d,0 0B82 L174: 0B82 4E616D653A20253873207C2049443A20 .byte 'N,'a,'m,'e,58,32,37,56,'s,32,124,32,'I,'D,58,32 0B92 2564207C2053746174653A202564207C .byte 37,'d,32,124,32,'S,'t,'a,'t,'e,58,32,37,'d,32,124 0BA2 205072696F3A20253364207C20416464 .byte 32,'P,'r,'i,'o,58,32,37,51,'d,32,124,32,'A,'d,'d 0BB2 723A20253478207C204D7367733A2030 .byte 'r,58,32,37,52,'x,32,124,32,'M,'s,'g,'s,58,32,48 0BC2 78253278207C0A00 .byte 'x,37,50,'x,32,124,10,0 0BCA L173: 0BCA 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2B .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,43 0BDA 2D2D2D2D2D2D2D2B2D2D2D2D2D2D2D2D .byte 45,45,45,45,45,45,45,43,45,45,45,45,45,45,45,45 0BEA 2D2D2B2D2D2D2D2D2D2D2D2D2D2D2B2D .byte 45,45,43,45,45,45,45,45,45,45,45,45,45,45,43,45 0BFA 2D2D2D2D2D2D2D2D2D2D2D2B2D2D2D2D .byte 45,45,45,45,45,45,45,45,45,45,45,43,45,45,45,45 0C0A 2D2D2D2D2D2D2D2D2B00 .byte 45,45,45,45,45,45,45,45,43,0 0C14 L166: 0C14 0A5461736B20436F6E74726F6C20426C .byte 10,'T,'a,'s,'k,32,'C,'o,'n,'t,'r,'o,'l,32,'B,'l 0C24 6F636B3A00 .byte 'o,'c,'k,58,0 0C29 L106: 0C29 2D6200 .byte 45,'b,0 0C2C L88: 0C2C 71756974202D2D207175697420746865 .byte 'q,'u,'i,'t,32,45,45,32,'q,'u,'i,'t,32,'t,'h,'e 0C3C 207368656C6C20286361726566756C6C .byte 32,'s,'h,'e,'l,'l,32,40,'c,'a,'r,'e,'f,'u,'l,'l 0C4C 212900 .byte 33,41,0 0C4F L87: 0C4F 6B6462205B317C305D202D2D20747572 .byte 'k,'d,'b,32,91,49,124,48,93,32,45,45,32,'t,'u,'r 0C5F 6E206B65726E656C206465627567206F .byte 'n,32,'k,'e,'r,'n,'e,'l,32,'d,'e,'b,'u,'g,32,'o 0C6F 6E2F6F666600 .byte 'n,47,'o,'f,'f,0 0C75 L86: 0C75 667265656D656D202D2D206765742061 .byte 'f,'r,'e,'e,'m,'e,'m,32,45,45,32,'g,'e,'t,32,'a 0C85 7070726F78696D617465206672656520 .byte 'p,'p,'r,'o,'x,'i,'m,'a,'t,'e,32,'f,'r,'e,'e,32 0C95 52414D20737061636500 .byte 'R,'A,'M,32,'s,'p,'a,'c,'e,0 0C9F L85: 0C9F 74696D65205B3C6872733E203C6D696E .byte 't,'i,'m,'e,32,91,60,'h,'r,'s,62,32,60,'m,'i,'n 0CAF 3E203C7365633E205D2D2D2064697370 .byte 62,32,60,'s,'e,'c,62,32,93,45,45,32,'d,'i,'s,'p 0CBF 6C61792F736574207468652063757272 .byte 'l,'a,'y,47,'s,'e,'t,32,'t,'h,'e,32,'c,'u,'r,'r 0CCF 656E742073797374656D2074696D6500 .byte 'e,'n,'t,32,'s,'y,'s,'t,'e,'m,32,'t,'i,'m,'e,0 0CDF L84: 0CDF 7072696F72697479203C7461736B5F69 .byte 'p,'r,'i,'o,'r,'i,'t,'y,32,60,'t,'a,'s,'k,95,'i 0CEF 643E2C203C7461736B5F7072696F7269 .byte 'd,62,44,32,60,'t,'a,'s,'k,95,'p,'r,'i,'o,'r,'i 0CFF 74793E20202D2D206368616E67652070 .byte 't,'y,62,32,32,45,45,32,'c,'h,'a,'n,'g,'e,32,'p 0D0F 72696F00 .byte 'r,'i,'o,0 0D13 L83: 0D13 73746F70203C7461736B5F69643E2020 .byte 's,'t,'o,'p,32,60,'t,'a,'s,'k,95,'i,'d,62,32,32 0D23 2D2D2073746F702061207461736B00 .byte 45,45,32,'s,'t,'o,'p,32,'a,32,'t,'a,'s,'k,0 0D32 L82: 0D32 7374617274203C7461736B5F69643E20 .byte 's,'t,'a,'r,'t,32,60,'t,'a,'s,'k,95,'i,'d,62,32 0D42 2D2D2073746172742061207461736B00 .byte 45,45,32,'s,'t,'a,'r,'t,32,'a,32,'t,'a,'s,'k,0 0D52 L81: 0D52 7469636B73202D2D2073686F77732073 .byte 't,'i,'c,'k,'s,32,45,45,32,'s,'h,'o,'w,'s,32,'s 0D62 797374656D207469636B00 .byte 'y,'s,'t,'e,'m,32,'t,'i,'c,'k,0 0D6D L80: 0D6D 726362205B5B7461736B5F69645D207C .byte 'r,'c,'b,32,91,91,'t,'a,'s,'k,95,'i,'d,93,32,124 0D7D 205B2D625D5D202D2D207072696E7473 .byte 32,91,45,'b,93,93,32,45,45,32,'p,'r,'i,'n,'t,'s 0D8D 207265736F7572636520636F6E74726F .byte 32,'r,'e,'s,'o,'u,'r,'c,'e,32,'c,'o,'n,'t,'r,'o 0D9D 6C20626C6F636B00 .byte 'l,32,'b,'l,'o,'c,'k,0 0DA5 L79: 0DA5 746362205B7461736B5F69645D202D2D .byte 't,'c,'b,32,91,'t,'a,'s,'k,95,'i,'d,93,32,45,45 0DB5 207072696E7473207461736B20636F6E .byte 32,'p,'r,'i,'n,'t,'s,32,'t,'a,'s,'k,32,'c,'o,'n 0DC5 74726F6C20626C6F636B00 .byte 't,'r,'o,'l,32,'b,'l,'o,'c,'k,0 0DD0 L78: 0DD0 68656C70205B636D645D202D2D206865 .byte 'h,'e,'l,'p,32,91,'c,'m,'d,93,32,45,45,32,'h,'e 0DE0 6C70206F6E2061207370656369666963 .byte 'l,'p,32,'o,'n,32,'a,32,'s,'p,'e,'c,'i,'f,'i,'c 0DF0 20636F6D6D616E6400 .byte 32,'c,'o,'m,'m,'a,'n,'d,0 0DF9 L77: 0DF9 5B5D202D2D206F7074696F6E616C2061 .byte 91,93,32,45,45,32,'o,'p,'t,'i,'o,'n,'a,'l,32,'a 0E09 7267756D656E74730A00 .byte 'r,'g,'u,'m,'e,'n,'t,'s,10,0 0E13 L76: 0E13 3C3E202D2D2072657175697265642061 .byte 60,62,32,45,45,32,'r,'e,'q,'u,'i,'r,'e,'d,32,'a 0E23 7267756D656E747300 .byte 'r,'g,'u,'m,'e,'n,'t,'s,0 0E2C L75: 0E2C 2D2D2D48454C502D2D2D0A00 .byte 45,45,45,'H,'E,'L,'P,45,45,45,10,0 0E38 L66: 0E38 7175697400 .byte 'q,'u,'i,'t,0 0E3D L63: 0E3D 6B646200 .byte 'k,'d,'b,0 0E41 L60: 0E41 667265656D656D00 .byte 'f,'r,'e,'e,'m,'e,'m,0 0E49 L57: 0E49 74696D6500 .byte 't,'i,'m,'e,0 0E4E L54: 0E4E 7072696F7269747900 .byte 'p,'r,'i,'o,'r,'i,'t,'y,0 0E57 L51: 0E57 73746F7000 .byte 's,'t,'o,'p,0 0E5C L48: 0E5C 737461727400 .byte 's,'t,'a,'r,'t,0 0E62 L45: 0E62 7469636B7300 .byte 't,'i,'c,'k,'s,0 0E68 L42: 0E68 72636200 .byte 'r,'c,'b,0 0E6C L39: 0E6C 74636200 .byte 't,'c,'b,0 0E70 L36: 0E70 68656C7000 .byte 'h,'e,'l,'p,0