.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 ; 0006 ; 0006 ; 0006 ; 0006 ; // FUNCTION PROTOTYPES 0006 ; void shellcmd_help(char *argv1); 0006 ; void shellcmd_tcb(signed char id); 0006 ; void shellcmd_mcb(signed char id); 0006 ; void shellcmd_mcbPrint(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 ; mcb, 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 ; get_mutex(COM1); // get COM1 mutex 0006 CC0003 ldd #3 0009 160000 jsr _get_mutex 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 CC0E3F ldd #L76 03B4 160000 jsr _puts 03B7 ; puts("[] -- optional arguments\n"); 03B7 CC0E25 ldd #L77 03BA 160000 jsr _puts 03BD ; puts("help [cmd] -- help on a specific command"); 03BD CC0DFC ldd #L78 03C0 160000 jsr _puts 03C3 ; puts("tcb [task_id] -- prints task control block"); 03C3 CC0DD1 ldd #L79 03C6 160000 jsr _puts 03C9 ; puts("mcb [[task_id] | [-b]] -- prints mutex control block"); 03C9 CC0D9C ldd #L80 03CC 160000 jsr _puts 03CF ; puts("ticks -- shows system tick"); 03CF CC0D81 ldd #L81 03D2 160000 jsr _puts 03D5 ; puts("start -- start a task"); 03D5 CC0D61 ldd #L82 03D8 160000 jsr _puts 03DB ; puts("stop -- stop a task"); 03DB CC0D42 ldd #L83 03DE 160000 jsr _puts 03E1 ; puts("priority , -- change prio"); 03E1 CC0D0E ldd #L84 03E4 160000 jsr _puts 03E7 ; puts("time [ ]-- display/set the current system time"); 03E7 CC0CCE ldd #L85 03EA 160000 jsr _puts 03ED ; puts("freemem -- get approximate free RAM space"); 03ED CC0CA4 ldd #L86 03F0 160000 jsr _puts 03F3 ; puts("kdb [1|0] -- turn kernel debug on/off"); 03F3 CC0C7E ldd #L87 03F6 160000 jsr _puts 03F9 ; puts("quit -- quit the shell (carefull!)"); 03F9 CC0C5B 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 mcb: 045E ; if (argc == 1) // print entire rcb 045E ECE1D5 ldd -43,x 0461 8C0001 cpd #1 0464 260A bne L100 0466 ; shellcmd_mcb(-1); 0466 CCFFFF ldd #-1 0469 16075A jsr _shellcmd_mcb 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 CC0C58 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_mcb(-2); 048A CCFFFE ldd #-2 048D 16075A jsr _shellcmd_mcb 0490 ; } 0490 182001BD lbra L70 0494 L104: 0494 ; else 0494 ; shellcmd_mcb(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_mcb 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 16083D 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 160865 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 160890 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 1608BD 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 1609C6 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 1609DE jsr _shellcmd_kdb 05D5 ; break; 05D5 18200078 lbra L70 05D9 L139: 05D9 ; case quit: 05D9 ; shellcmd_quitShell(); 05D9 1609ED 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 CC0C43 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_mcb:: 075A 3B pshd 075B 34 pshx 075C B775 tfr s,x 075E 1B9E leas -2,sp 0760 ; 0760 ; 0760 ; 0760 ; 0760 ; void shellcmd_mcb(signed char option) { 0760 ; 0760 ; // Local Variables 0760 ; unsigned char id; 0760 ; 0760 ; 0760 ; 0760 ; // print all 0760 ; if (option == -1) { 0760 E603 ldab 3,x 0762 C1FF cmpb #-1 0764 2628 bne L178 0766 691F clr -1,x 0768 201C bra L183 076A L180: 076A ; for (id=0; id= MAXMUTEXES) { 07BA E603 ldab 3,x 07BC C104 cmpb #4 07BE 2D08 blt L194 07C0 ; puts(error_msg[6]); 07C0 CC0096 ldd #_error_msg+150 07C3 160000 jsr _puts 07C6 ; return; 07C6 2019 bra L177 07C8 L194: 07C8 ; } 07C8 ; else 07C8 ; shellcmd_mcbPrint(option); 07C8 E603 ldab 3,x 07CA B714 tfr b,d 07CC 1607E7 jsr _shellcmd_mcbPrint 07CF ; 07CF ; } 07CF L187: 07CF L179: 07CF ; 07CF ; 07CF ; puts ("-----------+--------+----------+-----------+------------+"); 07CF CC0AF8 ldd #L197 07D2 160000 jsr _puts 07D5 ; 07D5 ; puts("\nState: 0=notbusy, 1=busy"); 07D5 CC0ADE ldd #L198 07D8 160000 jsr _puts 07DB ; puts("Owner: 0..15=task ID, -1=nobody"); 07DB CC0ABE ldd #L199 07DE 160000 jsr _puts 07E1 ; 07E1 ; } 07E1 L177: 07E1 B757 tfr x,s 07E3 30 pulx 07E4 1B82 leas 2,sp 07E6 .dbline 0 ; func end 07E6 3D rts 07E7 ; id -> 3,x 07E7 _shellcmd_mcbPrint:: 07E7 3B pshd 07E8 34 pshx 07E9 B775 tfr s,x 07EB 1B90 leas -16,sp 07ED ; 07ED ; 07ED ; 07ED ; void shellcmd_mcbPrint(signed char id) { 07ED ; 07ED ; puts ("-----------+--------+----------+-----------+------------+"); 07ED CC0AF8 ldd #L197 07F0 160000 jsr _puts 07F3 ; 07F3 ; INTR_OFF(); 07F3 1410 sei 07F5 07F5 ; printf("Type: %s | ID: %2d | State: %x | Owner: %2d | Waiting: %d |\n", 07F5 E603 ldab 3,x 07F7 B714 tfr b,d 07F9 87 clra 07FA 160000 jsr _get_mutex_name 07FD 6C1E std -2,x 07FF E603 ldab 3,x 0801 B714 tfr b,d 0803 87 clra 0804 160000 jsr _get_mutex_state 0807 6C1C std -4,x 0809 E603 ldab 3,x 080B B714 tfr b,d 080D 87 clra 080E 160000 jsr _get_mutex_owner 0811 6C1A std -6,x 0813 E603 ldab 3,x 0815 B714 tfr b,d 0817 87 clra 0818 160000 jsr _get_mutex_queuelen 081B 6C88 std 8,sp 081D ED1A ldy -6,x 081F 6D86 sty 6,sp 0821 ED1C ldy -4,x 0823 6D84 sty 4,sp 0825 E603 ldab 3,x 0827 B714 tfr b,d 0829 6C82 std 2,sp 082B ED1E ldy -2,x 082D 6D80 sty 0,sp 082F CC0A81 ldd #L201 0832 160000 jsr _printf 0835 ; get_mutex_name(id), 0835 ; id, 0835 ; get_mutex_state(id), 0835 ; get_mutex_owner(id), 0835 ; get_mutex_queuelen(id)); 0835 ; INTR_ON(); 0835 10EF cli 0837 0837 ; 0837 ; } 0837 L200: 0837 B757 tfr x,s 0839 30 pulx 083A 1B82 leas 2,sp 083C .dbline 0 ; func end 083C 3D rts 083D ; lreg1 -> -4,x 083D ; lreg2 -> -8,x 083D _shellcmd_ticks:: 083D 34 pshx 083E B775 tfr s,x 0840 1B94 leas -12,sp 0842 ; 0842 ; 0842 ; 0842 ; void shellcmd_ticks(void) { 0842 ; 0842 ; INTR_OFF(); 0842 1410 sei 0844 0844 ; printf("ticks: %ld\n", system_tick); 0844 CD0000 ldy #_system_tick 0847 1802401C movw 0,y,-4,x 084B 1802421E movw 2,y,-2,x 084F 1980 leay 0,sp 0851 18021C40 movw -4,x,0,y 0855 18021E42 movw -2,x,2,y 0859 CC0A75 ldd #L203 085C 160000 jsr _printf 085F ; INTR_ON(); 085F 10EF cli 0861 0861 ; } 0861 L202: 0861 B757 tfr x,s 0863 30 pulx 0864 .dbline 0 ; func end 0864 3D rts 0865 ; id -> 3,x 0865 _shellcmd_startTask:: 0865 3B pshd 0866 34 pshx 0867 B775 tfr s,x 0869 1B9E leas -2,sp 086B ; 086B ; 086B ; 086B ; 086B ; void shellcmd_startTask(unsigned char id) { 086B ; 086B ; INTR_OFF(); 086B 1410 sei 086D 086D ; if (set_task_state(id, PENDING) == 0) 086D CC0001 ldd #1 0870 6C80 std 0,sp 0872 E603 ldab 3,x 0874 87 clra 0875 160000 jsr _set_task_state 0878 8C0000 cpd #0 087B 260B bne L205 087D ; printf("task %d started\n", id); 087D E603 ldab 3,x 087F 87 clra 0880 6C80 std 0,sp 0882 CC0A64 ldd #L207 0885 160000 jsr _printf 0888 L205: 0888 ; INTR_ON(); 0888 10EF cli 088A 088A ; } 088A L204: 088A B757 tfr x,s 088C 30 pulx 088D 1B82 leas 2,sp 088F .dbline 0 ; func end 088F 3D rts 0890 ; id -> 3,x 0890 _shellcmd_stopTask:: 0890 3B pshd 0891 34 pshx 0892 B775 tfr s,x 0894 1B9E leas -2,sp 0896 ; 0896 ; 0896 ; 0896 ; 0896 ; void shellcmd_stopTask(unsigned char id) { 0896 ; 0896 ; if ((set_task_state(id, STOPPED)) == 0) { 0896 CC0004 ldd #4 0899 6C80 std 0,sp 089B E603 ldab 3,x 089D 87 clra 089E 160000 jsr _set_task_state 08A1 8C0000 cpd #0 08A4 2611 bne L209 08A6 ; give_mutex(COM1); 08A6 CC0003 ldd #3 08A9 160000 jsr _give_mutex 08AC ; printf("task %d stopped\n", id); 08AC E603 ldab 3,x 08AE 87 clra 08AF 6C80 std 0,sp 08B1 CC0A53 ldd #L211 08B4 160000 jsr _printf 08B7 ; } 08B7 L209: 08B7 ; 08B7 ; } 08B7 L208: 08B7 B757 tfr x,s 08B9 30 pulx 08BA 1B82 leas 2,sp 08BC .dbline 0 ; func end 08BC 3D rts 08BD ; lreg1 -> -4,x 08BD ; lreg2 -> -8,x 08BD ; ?temp -> -29,x 08BD ; milliseconds -> -25,x 08BD ; seconds -> -23,x 08BD ; minutes -> -22,x 08BD ; hours -> -21,x 08BD ; time -> -20,x 08BD ; remainder2 -> -16,x 08BD ; remainder1 -> -12,x 08BD _shellcmd_time:: 08BD 34 pshx 08BE B775 tfr s,x 08C0 1BF1DA leas -38,sp 08C3 ; 08C3 ; 08C3 ; 08C3 ; 08C3 ; void shellcmd_time(void) { 08C3 ; 08C3 ; // LOCAL VARIABLES 08C3 ; unsigned long int remainder1, remainder2, time; 08C3 ; char hours, minutes, seconds; 08C3 ; int milliseconds; 08C3 ; 08C3 ; 08C3 ; // get the current time, in milliseconds 08C3 ; time = get_sysTime(); 08C3 160000 jsr _get_sysTime 08C6 19E1E3 leay -29,x 08C9 18021C40 movw -4,x,0,y 08CD 18021E42 movw -2,x,2,y 08D1 19E1E3 leay -29,x 08D4 1802401C movw 0,y,-4,x 08D8 1802421E movw 2,y,-2,x 08DC 19E1EC leay -20,x 08DF 18021C40 movw -4,x,0,y 08E3 18021E42 movw -2,x,2,y 08E7 ; 08E7 ; // convert to hh:mm:ss.ms 08E7 ; hours = time / mS_PER_HOUR; 08E7 19E1EC leay -20,x 08EA 1802401C movw 0,y,-4,x 08EE 1802421E movw 2,y,-2,x 08F2 CD0A4F ldy #L213 08F5 18024018 movw 0,y,-8,x 08F9 1802421A movw 2,y,-6,x 08FD 160000 jsr __ludiv 0900 160000 jsr __lreg2d 0903 6BE1EB stab -21,x 0906 ; remainder1 = time % mS_PER_HOUR; 0906 19E1EC leay -20,x 0909 1802401C movw 0,y,-4,x 090D 1802421E movw 2,y,-2,x 0911 CD0A4F ldy #L213 0914 18024018 movw 0,y,-8,x 0918 1802421A movw 2,y,-6,x 091C 160000 jsr __lumod 091F 1914 leay -12,x 0921 18021C40 movw -4,x,0,y 0925 18021E42 movw -2,x,2,y 0929 ; minutes = remainder1 / mS_PER_MINUTE; 0929 1914 leay -12,x 092B 1802401C movw 0,y,-4,x 092F 1802421E movw 2,y,-2,x 0933 CD0A4B ldy #L214 0936 18024018 movw 0,y,-8,x 093A 1802421A movw 2,y,-6,x 093E 160000 jsr __ludiv 0941 160000 jsr __lreg2d 0944 6BE1EA stab -22,x 0947 ; remainder2 = remainder1 % mS_PER_MINUTE; 0947 1914 leay -12,x 0949 1802401C movw 0,y,-4,x 094D 1802421E movw 2,y,-2,x 0951 CD0A4B ldy #L214 0954 18024018 movw 0,y,-8,x 0958 1802421A movw 2,y,-6,x 095C 160000 jsr __lumod 095F 1910 leay -16,x 0961 18021C40 movw -4,x,0,y 0965 18021E42 movw -2,x,2,y 0969 ; seconds = remainder2 / mS_PER_SECOND; 0969 1910 leay -16,x 096B 1802401C movw 0,y,-4,x 096F 1802421E movw 2,y,-2,x 0973 CD0A47 ldy #L215 0976 18024018 movw 0,y,-8,x 097A 1802421A movw 2,y,-6,x 097E 160000 jsr __ludiv 0981 160000 jsr __lreg2d 0984 6BE1E9 stab -23,x 0987 ; milliseconds = remainder2 % mS_PER_SECOND; 0987 1910 leay -16,x 0989 1802401C movw 0,y,-4,x 098D 1802421E movw 2,y,-2,x 0991 CD0A47 ldy #L215 0994 18024018 movw 0,y,-8,x 0998 1802421A movw 2,y,-6,x 099C 160000 jsr __lumod 099F 160000 jsr __lreg2d 09A2 6CE1E7 std -25,x 09A5 ; 09A5 ; printf(" %d:%d:%d.%d\n", hours, minutes,seconds, milliseconds); 09A5 EDE1E7 ldy -25,x 09A8 6D86 sty 6,sp 09AA E6E1E9 ldab -23,x 09AD 87 clra 09AE 6C84 std 4,sp 09B0 E6E1EA ldab -22,x 09B3 87 clra 09B4 6C82 std 2,sp 09B6 E6E1EB ldab -21,x 09B9 87 clra 09BA 6C80 std 0,sp 09BC CC0A39 ldd #L216 09BF 160000 jsr _printf 09C2 ; 09C2 ; } 09C2 L212: 09C2 B757 tfr x,s 09C4 30 pulx 09C5 .dbline 0 ; func end 09C5 3D rts 09C6 _shellcmd_freeMemCheck:: 09C6 34 pshx 09C7 B775 tfr s,x 09C9 1B9E leas -2,sp 09CB ; 09CB ; 09CB ; 09CB ; 09CB ; void shellcmd_freeMemCheck(void) { 09CB ; 09CB ; 09CB ; INTR_OFF(); 09CB 1410 sei 09CD 09CD ; printf("approximate free heap memory: %d bytes\n", get_free_memory()); 09CD 160000 jsr _get_free_memory 09D0 6C80 std 0,sp 09D2 CC0A11 ldd #L218 09D5 160000 jsr _printf 09D8 ; INTR_ON(); 09D8 10EF cli 09DA 09DA ; 09DA ; } 09DA L217: 09DA B757 tfr x,s 09DC 30 pulx 09DD .dbline 0 ; func end 09DD 3D rts 09DE ; onoff -> 2,x 09DE _shellcmd_kdb:: 09DE 3B pshd 09DF 34 pshx 09E0 B775 tfr s,x 09E2 ; 09E2 ; 09E2 ; 09E2 ; void shellcmd_kdb(int onoff) { 09E2 ; 09E2 ; 09E2 ; kdb_trace = onoff; 09E2 EC02 ldd 2,x 09E4 7B0000 stab _kdb_trace 09E7 ; 09E7 ; } 09E7 L219: 09E7 B757 tfr x,s 09E9 30 pulx 09EA 1B82 leas 2,sp 09EC .dbline 0 ; func end 09EC 3D rts 09ED _shellcmd_quitShell:: 09ED ; 09ED ; 09ED ; 09ED ; 09ED ; void shellcmd_quitShell(void) { 09ED ; 09ED ; puts("exiting shell"); 09ED CC0A03 ldd #L221 09F0 160000 jsr _puts 09F3 ; puts("\n"); 09F3 CC0A01 ldd #L222 09F6 160000 jsr _puts 09F9 ; shellcmd_stopTask(get_task_id()); 09F9 160000 jsr _get_task_id 09FC 87 clra 09FD 160890 jsr _shellcmd_stopTask 0A00 ; 0A00 ; } 0A00 L220: 0A00 .dbline 0 ; func end 0A00 3D rts 0A01 L222: 0A01 0A00 .byte 10,0 0A03 L221: 0A03 65786974696E67207368656C6C00 .byte 'e,'x,'i,'t,'i,'n,'g,32,'s,'h,'e,'l,'l,0 0A11 L218: 0A11 617070726F78696D6174652066726565 .byte 'a,'p,'p,'r,'o,'x,'i,'m,'a,'t,'e,32,'f,'r,'e,'e 0A21 2068656170206D656D6F72793A202564 .byte 32,'h,'e,'a,'p,32,'m,'e,'m,'o,'r,'y,58,32,37,'d 0A31 2062797465730A00 .byte 32,'b,'y,'t,'e,'s,10,0 0A39 L216: 0A39 2025643A25643A25642E25640A00 .byte 32,37,'d,58,37,'d,58,37,'d,46,37,'d,10,0 0A47 L215: 0A47 000003E8 .word 0,1000 0A4B L214: 0A4B 0000EA60 .word 0,60000 0A4F L213: 0A4F 0036EE80 .word 54,61056 0A53 L211: 0A53 7461736B2025642073746F707065640A .byte 't,'a,'s,'k,32,37,'d,32,'s,'t,'o,'p,'p,'e,'d,10 0A63 00 .byte 0 0A64 L207: 0A64 7461736B20256420737461727465640A .byte 't,'a,'s,'k,32,37,'d,32,'s,'t,'a,'r,'t,'e,'d,10 0A74 00 .byte 0 0A75 L203: 0A75 7469636B733A20256C640A00 .byte 't,'i,'c,'k,'s,58,32,37,'l,'d,10,0 0A81 L201: 0A81 547970653A202573207C2049443A2025 .byte 'T,'y,'p,'e,58,32,37,'s,32,124,32,'I,'D,58,32,37 0A91 3264207C2053746174653A202578207C .byte 50,'d,32,124,32,'S,'t,'a,'t,'e,58,32,37,'x,32,124 0AA1 204F776E65723A20253264207C205761 .byte 32,'O,'w,'n,'e,'r,58,32,37,50,'d,32,124,32,'W,'a 0AB1 6974696E673A202564207C0A00 .byte 'i,'t,'i,'n,'g,58,32,37,'d,32,124,10,0 0ABE L199: 0ABE 4F776E65723A20302E2E31353D746173 .byte 'O,'w,'n,'e,'r,58,32,48,46,46,49,53,61,'t,'a,'s 0ACE 6B2049442C202D313D6E6F626F647900 .byte 'k,32,'I,'D,44,32,45,49,61,'n,'o,'b,'o,'d,'y,0 0ADE L198: 0ADE 0A53746174653A20303D6E6F74627573 .byte 10,'S,'t,'a,'t,'e,58,32,48,61,'n,'o,'t,'b,'u,'s 0AEE 792C20313D6275737900 .byte 'y,44,32,49,61,'b,'u,'s,'y,0 0AF8 L197: 0AF8 2D2D2D2D2D2D2D2D2D2D2D2B2D2D2D2D .byte 45,45,45,45,45,45,45,45,45,45,45,43,45,45,45,45 0B08 2D2D2D2D2B2D2D2D2D2D2D2D2D2D2D2B .byte 45,45,45,45,43,45,45,45,45,45,45,45,45,45,45,43 0B18 2D2D2D2D2D2D2D2D2D2D2D2B2D2D2D2D .byte 45,45,45,45,45,45,45,45,45,45,45,43,45,45,45,45 0B28 2D2D2D2D2D2D2D2D2B00 .byte 45,45,45,45,45,45,45,45,43,0 0B32 L176: 0B32 4D6573736167653A205B206269743720 .byte 'M,'e,'s,'s,'a,'g,'e,58,32,91,32,'b,'i,'t,55,32 0B42 7C2062697436207C2062697435207C20 .byte 124,32,'b,'i,'t,54,32,124,32,'b,'i,'t,53,32,124,32 0B52 62697434207C2062697433207C206269 .byte 'b,'i,'t,52,32,124,32,'b,'i,'t,51,32,124,32,'b,'i 0B62 7432207C207072696F207C2073746174 .byte 't,50,32,124,32,'p,'r,'i,'o,32,124,32,'s,'t,'a,'t 0B72 65205D00 .byte 'e,32,93,0 0B76 L175: 0B76 0A53746174653A20303D69646C652C20 .byte 10,'S,'t,'a,'t,'e,58,32,48,61,'i,'d,'l,'e,44,32 0B86 313D70656E64696E672C20323D72756E .byte 49,61,'p,'e,'n,'d,'i,'n,'g,44,32,50,61,'r,'u,'n 0B96 6E696E672C20333D77616974696E672C .byte 'n,'i,'n,'g,44,32,51,61,'w,'a,'i,'t,'i,'n,'g,44 0BA6 20343D73746F7070656400 .byte 32,52,61,'s,'t,'o,'p,'p,'e,'d,0 0BB1 L174: 0BB1 4E616D653A20253873207C2049443A20 .byte 'N,'a,'m,'e,58,32,37,56,'s,32,124,32,'I,'D,58,32 0BC1 2564207C2053746174653A202564207C .byte 37,'d,32,124,32,'S,'t,'a,'t,'e,58,32,37,'d,32,124 0BD1 205072696F3A20253364207C20416464 .byte 32,'P,'r,'i,'o,58,32,37,51,'d,32,124,32,'A,'d,'d 0BE1 723A20253478207C204D7367733A2030 .byte 'r,58,32,37,52,'x,32,124,32,'M,'s,'g,'s,58,32,48 0BF1 78253278207C0A00 .byte 'x,37,50,'x,32,124,10,0 0BF9 L173: 0BF9 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2B .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,43 0C09 2D2D2D2D2D2D2D2B2D2D2D2D2D2D2D2D .byte 45,45,45,45,45,45,45,43,45,45,45,45,45,45,45,45 0C19 2D2D2B2D2D2D2D2D2D2D2D2D2D2D2B2D .byte 45,45,43,45,45,45,45,45,45,45,45,45,45,45,43,45 0C29 2D2D2D2D2D2D2D2D2D2D2D2B2D2D2D2D .byte 45,45,45,45,45,45,45,45,45,45,45,43,45,45,45,45 0C39 2D2D2D2D2D2D2D2D2B00 .byte 45,45,45,45,45,45,45,45,43,0 0C43 L166: 0C43 0A5461736B20436F6E74726F6C20426C .byte 10,'T,'a,'s,'k,32,'C,'o,'n,'t,'r,'o,'l,32,'B,'l 0C53 6F636B3A00 .byte 'o,'c,'k,58,0 0C58 L106: 0C58 2D6200 .byte 45,'b,0 0C5B L88: 0C5B 71756974202D2D207175697420746865 .byte 'q,'u,'i,'t,32,45,45,32,'q,'u,'i,'t,32,'t,'h,'e 0C6B 207368656C6C20286361726566756C6C .byte 32,'s,'h,'e,'l,'l,32,40,'c,'a,'r,'e,'f,'u,'l,'l 0C7B 212900 .byte 33,41,0 0C7E L87: 0C7E 6B6462205B317C305D202D2D20747572 .byte 'k,'d,'b,32,91,49,124,48,93,32,45,45,32,'t,'u,'r 0C8E 6E206B65726E656C206465627567206F .byte 'n,32,'k,'e,'r,'n,'e,'l,32,'d,'e,'b,'u,'g,32,'o 0C9E 6E2F6F666600 .byte 'n,47,'o,'f,'f,0 0CA4 L86: 0CA4 667265656D656D202D2D206765742061 .byte 'f,'r,'e,'e,'m,'e,'m,32,45,45,32,'g,'e,'t,32,'a 0CB4 7070726F78696D617465206672656520 .byte 'p,'p,'r,'o,'x,'i,'m,'a,'t,'e,32,'f,'r,'e,'e,32 0CC4 52414D20737061636500 .byte 'R,'A,'M,32,'s,'p,'a,'c,'e,0 0CCE L85: 0CCE 74696D65205B3C6872733E203C6D696E .byte 't,'i,'m,'e,32,91,60,'h,'r,'s,62,32,60,'m,'i,'n 0CDE 3E203C7365633E205D2D2D2064697370 .byte 62,32,60,'s,'e,'c,62,32,93,45,45,32,'d,'i,'s,'p 0CEE 6C61792F736574207468652063757272 .byte 'l,'a,'y,47,'s,'e,'t,32,'t,'h,'e,32,'c,'u,'r,'r 0CFE 656E742073797374656D2074696D6500 .byte 'e,'n,'t,32,'s,'y,'s,'t,'e,'m,32,'t,'i,'m,'e,0 0D0E L84: 0D0E 7072696F72697479203C7461736B5F69 .byte 'p,'r,'i,'o,'r,'i,'t,'y,32,60,'t,'a,'s,'k,95,'i 0D1E 643E2C203C7461736B5F7072696F7269 .byte 'd,62,44,32,60,'t,'a,'s,'k,95,'p,'r,'i,'o,'r,'i 0D2E 74793E20202D2D206368616E67652070 .byte 't,'y,62,32,32,45,45,32,'c,'h,'a,'n,'g,'e,32,'p 0D3E 72696F00 .byte 'r,'i,'o,0 0D42 L83: 0D42 73746F70203C7461736B5F69643E2020 .byte 's,'t,'o,'p,32,60,'t,'a,'s,'k,95,'i,'d,62,32,32 0D52 2D2D2073746F702061207461736B00 .byte 45,45,32,'s,'t,'o,'p,32,'a,32,'t,'a,'s,'k,0 0D61 L82: 0D61 7374617274203C7461736B5F69643E20 .byte 's,'t,'a,'r,'t,32,60,'t,'a,'s,'k,95,'i,'d,62,32 0D71 2D2D2073746172742061207461736B00 .byte 45,45,32,'s,'t,'a,'r,'t,32,'a,32,'t,'a,'s,'k,0 0D81 L81: 0D81 7469636B73202D2D2073686F77732073 .byte 't,'i,'c,'k,'s,32,45,45,32,'s,'h,'o,'w,'s,32,'s 0D91 797374656D207469636B00 .byte 'y,'s,'t,'e,'m,32,'t,'i,'c,'k,0 0D9C L80: 0D9C 6D6362205B5B7461736B5F69645D207C .byte 'm,'c,'b,32,91,91,'t,'a,'s,'k,95,'i,'d,93,32,124 0DAC 205B2D625D5D202D2D207072696E7473 .byte 32,91,45,'b,93,93,32,45,45,32,'p,'r,'i,'n,'t,'s 0DBC 206D7574657820636F6E74726F6C2062 .byte 32,'m,'u,'t,'e,'x,32,'c,'o,'n,'t,'r,'o,'l,32,'b 0DCC 6C6F636B00 .byte 'l,'o,'c,'k,0 0DD1 L79: 0DD1 746362205B7461736B5F69645D202D2D .byte 't,'c,'b,32,91,'t,'a,'s,'k,95,'i,'d,93,32,45,45 0DE1 207072696E7473207461736B20636F6E .byte 32,'p,'r,'i,'n,'t,'s,32,'t,'a,'s,'k,32,'c,'o,'n 0DF1 74726F6C20626C6F636B00 .byte 't,'r,'o,'l,32,'b,'l,'o,'c,'k,0 0DFC L78: 0DFC 68656C70205B636D645D202D2D206865 .byte 'h,'e,'l,'p,32,91,'c,'m,'d,93,32,45,45,32,'h,'e 0E0C 6C70206F6E2061207370656369666963 .byte 'l,'p,32,'o,'n,32,'a,32,'s,'p,'e,'c,'i,'f,'i,'c 0E1C 20636F6D6D616E6400 .byte 32,'c,'o,'m,'m,'a,'n,'d,0 0E25 L77: 0E25 5B5D202D2D206F7074696F6E616C2061 .byte 91,93,32,45,45,32,'o,'p,'t,'i,'o,'n,'a,'l,32,'a 0E35 7267756D656E74730A00 .byte 'r,'g,'u,'m,'e,'n,'t,'s,10,0 0E3F L76: 0E3F 3C3E202D2D2072657175697265642061 .byte 60,62,32,45,45,32,'r,'e,'q,'u,'i,'r,'e,'d,32,'a 0E4F 7267756D656E747300 .byte 'r,'g,'u,'m,'e,'n,'t,'s,0 0E58 L75: 0E58 2D2D2D48454C502D2D2D0A00 .byte 45,45,45,'H,'E,'L,'P,45,45,45,10,0 0E64 L66: 0E64 7175697400 .byte 'q,'u,'i,'t,0 0E69 L63: 0E69 6B646200 .byte 'k,'d,'b,0 0E6D L60: 0E6D 667265656D656D00 .byte 'f,'r,'e,'e,'m,'e,'m,0 0E75 L57: 0E75 74696D6500 .byte 't,'i,'m,'e,0 0E7A L54: 0E7A 7072696F7269747900 .byte 'p,'r,'i,'o,'r,'i,'t,'y,0 0E83 L51: 0E83 73746F7000 .byte 's,'t,'o,'p,0 0E88 L48: 0E88 737461727400 .byte 's,'t,'a,'r,'t,0 0E8E L45: 0E8E 7469636B7300 .byte 't,'i,'c,'k,'s,0 0E94 L42: 0E94 6D636200 .byte 'm,'c,'b,0 0E98 L39: 0E98 74636200 .byte 't,'c,'b,0 0E9C L36: 0E9C 68656C7000 .byte 'h,'e,'l,'p,0