added more int to string conversions
This commit is contained in:
parent
9fcfe4cb05
commit
5ec9cc709f
|
@ -3,4 +3,8 @@
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
|
||||||
int stoi(const char* string);
|
int stoi(const char* string);
|
||||||
char* itoa(int number, char* string);
|
|
||||||
|
char* ultoa(unsigned long number, char* string, int base);
|
||||||
|
char* ltoa(long number, char* string, int base);
|
||||||
|
char* utoa(unsigned int number, char* string, int base);
|
||||||
|
char* itoa(int number, char* string, int base);
|
|
@ -24,6 +24,8 @@ _start:
|
||||||
cbnz w2, 3b
|
cbnz w2, 3b
|
||||||
|
|
||||||
4: # Jump to main() in C
|
4: # Jump to main() in C
|
||||||
ldr x4, =_start
|
ldr x0, =_start
|
||||||
|
ldr x1, =0x50000
|
||||||
|
str x0, [x1]
|
||||||
bl main
|
bl main
|
||||||
b 1b
|
b 1b
|
|
@ -21,8 +21,14 @@ int stoi(const char* string)
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* itoa(int number, char* string)
|
char* ultoa(unsigned long number, char* string, int base)
|
||||||
{
|
{
|
||||||
|
if(base < 2 || base > 16)
|
||||||
|
{
|
||||||
|
string[0] = '\0';
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
volatile char* temp = (volatile char*)0x40000000;
|
volatile char* temp = (volatile char*)0x40000000;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if(number == 0)
|
if(number == 0)
|
||||||
|
@ -31,17 +37,12 @@ char* itoa(int number, char* string)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for(int n = (number < 0 ? -number : number); n > 0; n /= 10)
|
for(; number > 0; number /= base)
|
||||||
{
|
{
|
||||||
temp[i++] = '0' + (n % 10);
|
temp[i++] = '0' + (number % base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(number < 0)
|
|
||||||
{
|
|
||||||
temp[i++] = '-';
|
|
||||||
}
|
|
||||||
|
|
||||||
temp[i] = '\0';
|
temp[i] = '\0';
|
||||||
string[i] = '\0';
|
string[i] = '\0';
|
||||||
|
|
||||||
|
@ -51,4 +52,27 @@ char* itoa(int number, char* string)
|
||||||
}
|
}
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* ltoa(long number, char* string, int base)
|
||||||
|
{
|
||||||
|
char* old_string = string;
|
||||||
|
if(number < 0)
|
||||||
|
{
|
||||||
|
number *= -1;
|
||||||
|
*string++ = '-';
|
||||||
|
}
|
||||||
|
|
||||||
|
itoa(number, string, base);
|
||||||
|
return old_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* utoa(unsigned int number, char* string, int base)
|
||||||
|
{
|
||||||
|
return ultoa(number, string, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
char* itoa(int number, char* string, int base)
|
||||||
|
{
|
||||||
|
return ltoa(number, string, base);
|
||||||
}
|
}
|
30
src/kernel.c
30
src/kernel.c
|
@ -3,29 +3,24 @@
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
void print_clippy();
|
void print_clippy();
|
||||||
|
char* get_user_input(char* buffer);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
const char* hex_chars = "0123456789ABCDEF";
|
const char* hex_chars = "0123456789ABCDEF";
|
||||||
register int* start_address asm ("x4");
|
long int start = *(volatile long int*)0x50000;
|
||||||
long int start = (long int)start_address;
|
char buffer[1024];
|
||||||
|
|
||||||
uart_init();
|
uart_init();
|
||||||
print_clippy();
|
print_clippy();
|
||||||
uart_puts("Boot successful! \n");
|
uart_puts("Boot successful! \n");
|
||||||
uart_puts("Started execution at 0x");
|
uart_puts("Started execution at 0x");
|
||||||
for(int i = 0; i < 8; i++)
|
uart_puts(ultoa(start, buffer, 16));
|
||||||
{
|
|
||||||
uart_putchar(hex_chars[start & 0xF]);
|
|
||||||
start >>= 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
char buffer[1024];
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
uart_puts("\n\nPlease enter first operand\n");
|
uart_puts("\n\nPlease enter first operand\n");
|
||||||
uart_puts("📎 ");
|
get_user_input(buffer);
|
||||||
uart_gets(buffer);
|
|
||||||
|
|
||||||
if(!strcmp(buffer, "clippy"))
|
if(!strcmp(buffer, "clippy"))
|
||||||
{
|
{
|
||||||
|
@ -36,18 +31,23 @@ void main()
|
||||||
int a = stoi(buffer);
|
int a = stoi(buffer);
|
||||||
|
|
||||||
uart_puts("\nPlease enter second operand\n");
|
uart_puts("\nPlease enter second operand\n");
|
||||||
uart_puts("📎 ");
|
int b = stoi(get_user_input(buffer));
|
||||||
int b = stoi(uart_gets(buffer));
|
|
||||||
|
|
||||||
uart_puts("\n");
|
uart_puts("\n");
|
||||||
uart_puts(itoa(a, buffer));
|
uart_puts(itoa(a, buffer, 10));
|
||||||
uart_puts(" * ");
|
uart_puts(" * ");
|
||||||
uart_puts(itoa(b, buffer));
|
uart_puts(itoa(b, buffer, 10));
|
||||||
uart_puts(" = ");
|
uart_puts(" = ");
|
||||||
uart_puts(itoa(a * b, buffer));
|
uart_puts(itoa(a * b, buffer, 10));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* get_user_input(char* buffer)
|
||||||
|
{
|
||||||
|
uart_puts("📎 ");
|
||||||
|
return uart_gets(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
void print_clippy()
|
void print_clippy()
|
||||||
{
|
{
|
||||||
uart_puts(" ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \n");
|
uart_puts(" ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \n");
|
||||||
|
|
Loading…
Reference in a new issue