const char *apps_lst[] = { "", "reboot", "osver", "time", "place", "cls", "memory", "help", "cpu_info", "mem_alloc", //0 "mem_free", //1 "mem_stat", "mem_test", //2 }; int apps_count = 13; unsigned int atox(const char* str) { unsigned int temp = 0; int i; unsigned int digit = 0; for (i = 0; str[i]!=0; i++) { if (str[i] >= '0' && str[i] <= '9') digit = str[i] - '0'; else if (str[i] >= 'A' && str[i] <= 'F') digit = str[i] - 'A' + 10; else if (str[i] >= 'a' && str[i] <= 'f') digit = str[i] - 'a' + 10; else break; temp = temp*16 + digit; } return temp; } unsigned int atoui(const char* str) { unsigned int temp = 0; int i; for (i = 0; str[i] >= '0' && str[i] <= '9' ; i++) temp = temp*10 + (str[i] - '0'); return temp; } void apps_osver() { printf ("CTA 32bit Operating System v0.1"); printf ("\n(c) CTA 2010\n"); } void apps_time() { printf ("Today is %s, %u of %s, %u%u.\n", clock_weekdays[_internal_clock.weekday], (unsigned int) _internal_clock.day, clock_months[_internal_clock.month], (unsigned int) _internal_clock.century, (unsigned int) _internal_clock.year); printf ("Now is %u:%u:%u.\n", (unsigned int) _internal_clock.hours, (unsigned int) _internal_clock.minutes, (unsigned int) _internal_clock.seconds); } void apps_place() { printf ("On your desk, if you didn't notice... \n"); } void apps_clrscr() { clrscr(); } void apps_memory(const int pn, const char* param[]) { if (pn<3) { printf ("Correct syntax: memory [start_address] [end_address] (in hex)\n"); return; } byte *start, *end; start = (byte *) atox (param[1]); end = (byte *) atox (param[2]); byte* count; while (start <= end) { put_hex ((unsigned int) start); puts(": "); for (count = start; count < start+16; count++) { putc(hex[*count/16]); putc(hex[*count%16]); putc(' '); } puts(" "); for (count = start; count < start+16; count++) { if (*count < 32) putc('.'); else putc(*count); } putc('\n'); start+=16; } } void apps_help(const int pn, const char* param[]) { int i; puts ("\n"); if (pn==1) { puts("[BeTA]\n"); puts("Available commands:"); for (i = 1; i < apps_count; i++) { puts("\n \t "); puts((char*)apps_lst[i]); } puts("\n\nUse help [command] for help on individual commands.\n"); return; } for (i = 0; strcmp(apps_lst[i], param[1])!=0 && i 1 && strcmp(param[1], "times") == 0) times = atoui(param[2]); uint32_t temp; for (; times > 0; times--) { temp = (uint32_t) pmmngr_alloc_block(); if (temp == 0) { printf ("Out of memory.\n"); break; } else printf ("New block allocated at address 0x%x\n", temp); } return; } // Free case 1: { if (pn <= 1) { printf ("Parameter missing: [address (hex)]\n"); return; } uint32_t temp = atox(param[1]); pmmngr_free_block ((void*)temp); printf ("Block containing address 0x%x now free.", temp); return; } // Test case 2: { if (pn <= 1) { printf ("Parameter missing: [block number]"); return ; } unsigned int temp = atoui(param[1]); printf (pmmngr_test_block(temp) ? "Block %u is free.\n" : "Block %u is used.\n", temp); } } } void apps_memory_status() { printf ("Memory available: %u KB \n", pmmngr_get_memory_size ()); printf ("Total blocks: %u Used: %u Free: %u\n", pmmngr_get_block_count (), pmmngr_get_use_block_count (), pmmngr_get_free_block_count ()); printf ("Block size: %u bytes\nPaging is ", pmmngr_get_block_size()); printf ( pmmngr_is_paging() ? "enabled.\n" : "disabled.\n"); }