diff --git a/hello_world/Makefile b/hello_world/Makefile index 9051e7d..4c7d3ac 100644 --- a/hello_world/Makefile +++ b/hello_world/Makefile @@ -15,6 +15,9 @@ LDFLAGS = -T powerpc.lds all: hello_world.hex +console.o: ../lib/console.c + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ + hello_world.elf: hello_world.o head.o console.o $(LD) $(LDFLAGS) -o $@ $^ diff --git a/hello_world/hello_world.c b/hello_world/hello_world.c index 7e853d8..6575667 100644 --- a/hello_world/hello_world.c +++ b/hello_world/hello_world.c @@ -3,13 +3,13 @@ #include "console.h" -#define HELLO_WORLD "Hello World\r\n" +#define HELLO_WORLD "Hello World\n" int main(void) { potato_uart_init(); - putstr(HELLO_WORLD, strlen(HELLO_WORLD)); + puts(HELLO_WORLD); while (1) { unsigned char c = getchar(); diff --git a/hello_world/console.h b/include/console.h similarity index 66% rename from hello_world/console.h rename to include/console.h index 5cf303a..cfd9dc1 100644 --- a/hello_world/console.h +++ b/include/console.h @@ -4,6 +4,6 @@ void potato_uart_init(void); void potato_uart_irq_en(void); void potato_uart_irq_dis(void); int getchar(void); -void putchar(unsigned char c); -void putstr(const char *str, unsigned long len); +int putchar(int c); +int puts(const char *str); size_t strlen(const char *s); diff --git a/hello_world/console.c b/lib/console.c similarity index 91% rename from hello_world/console.c rename to lib/console.c index 6c1c311..fa2ade3 100644 --- a/hello_world/console.c +++ b/lib/console.c @@ -98,19 +98,26 @@ int getchar(void) return potato_uart_read(); } -void putchar(unsigned char c) +int putchar(int c) { while (potato_uart_tx_full()) /* Do Nothing */; potato_uart_write(c); + return c; } -void putstr(const char *str, unsigned long len) +int puts(const char *str) { - for (unsigned long i = 0; i < len; i++) { - putchar(str[i]); + unsigned int i; + + for (i = 0; *str; i++) { + char c = *(str++); + if (c == 10) + putchar(13); + putchar(c); } + return 0; } size_t strlen(const char *s) diff --git a/litedram/gen-src/sdram_init/Makefile b/litedram/gen-src/sdram_init/Makefile index 28395a3..367b89d 100644 --- a/litedram/gen-src/sdram_init/Makefile +++ b/litedram/gen-src/sdram_init/Makefile @@ -4,7 +4,7 @@ include variables.mak OBJ = $(BUILD_DIR)/obj PROGRAM = sdram_init -OBJECTS = $(OBJ)/head.o $(OBJ)/main.o $(OBJ)/sdram.o +OBJECTS = $(OBJ)/head.o $(OBJ)/main.o $(OBJ)/sdram.o $(OBJ)/console.o #### Compiler @@ -50,10 +50,12 @@ all: objdir $(OBJ)/$(PROGRAM).hex $(OBJ)/sdram.o: $(LXSRC_DIR)/sdram.c $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@) -$(OBJ)/%.o : $(SRC_DIR)/%.S - $(call Q,AS, $(CC) $(ASFLAGS) -c $< -o $@, $@) +$(OBJ)/console.o: $(SRC_DIR)/../../../lib/console.c + $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@) $(OBJ)/%.o : $(SRC_DIR)/%.c $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@) +$(OBJ)/%.o : $(SRC_DIR)/%.S + $(call Q,AS, $(CC) $(ASFLAGS) -c $< -o $@, $@) $(OBJ)/%.o : $(SRC_DIR)/libc/src/%.c $(call Q,CC, $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@, $@) diff --git a/rust_lib_demo/console.c b/rust_lib_demo/console.c index 112b085..1c80e34 120000 --- a/rust_lib_demo/console.c +++ b/rust_lib_demo/console.c @@ -1 +1 @@ -../hello_world/console.c \ No newline at end of file +../lib/console.c \ No newline at end of file diff --git a/rust_lib_demo/console.h b/rust_lib_demo/console.h index fbe66d5..7a6f2c3 120000 --- a/rust_lib_demo/console.h +++ b/rust_lib_demo/console.h @@ -1 +1 @@ -../hello_world/console.h \ No newline at end of file +../include/console.h \ No newline at end of file diff --git a/rust_lib_demo/hello_world.c b/rust_lib_demo/hello_world.c index f46140d..c8797fd 100644 --- a/rust_lib_demo/hello_world.c +++ b/rust_lib_demo/hello_world.c @@ -20,14 +20,14 @@ void init_bss() } } -#define HELLO_WORLD "Hello World\r\n" +#define HELLO_WORLD "Hello World\n" int main(void) { init_bss(); potato_uart_init(); - putstr(HELLO_WORLD, strlen(HELLO_WORLD)); + puts(HELLO_WORLD); rust_main(); crash(); diff --git a/tests/Makefile.test b/tests/Makefile.test index 9241e3f..3b800d0 100644 --- a/tests/Makefile.test +++ b/tests/Makefile.test @@ -9,14 +9,17 @@ CC = $(CROSS_COMPILE)gcc LD = $(CROSS_COMPILE)ld OBJCOPY = $(CROSS_COMPILE)objcopy -CFLAGS = -Os -g -Wall -std=c99 -msoft-float -mno-string -mno-multiple -mno-vsx -mno-altivec -mlittle-endian -fno-stack-protector -mstrict-align -ffreestanding -fdata-sections -ffunction-sections -I ../../hello_world -I ../../include +CFLAGS = -Os -g -Wall -std=c99 -msoft-float -mno-string -mno-multiple -mno-vsx -mno-altivec -mlittle-endian -fno-stack-protector -mstrict-align -ffreestanding -fdata-sections -ffunction-sections -I ../../include ASFLAGS = $(CFLAGS) LDFLAGS = -T powerpc.lds all: $(TEST).hex -$(TEST).elf: $(TEST).o head.o ../../hello_world/console.o - $(LD) $(LDFLAGS) -o $(TEST).elf $(TEST).o head.o ../../hello_world/console.o +console.o: ../../lib/console.c + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ + +$(TEST).elf: $(TEST).o head.o console.o + $(LD) $(LDFLAGS) -o $(TEST).elf $(TEST).o head.o console.o $(TEST).bin: $(TEST).elf $(OBJCOPY) -O binary $(TEST).elf $(TEST).bin diff --git a/tests/decrementer/decrementer.c b/tests/decrementer/decrementer.c index 2617a94..e6cff2c 100644 --- a/tests/decrementer/decrementer.c +++ b/tests/decrementer/decrementer.c @@ -5,8 +5,8 @@ #include "console.h" #define TEST "Test " -#define PASS "PASS\r\n" -#define FAIL "FAIL\r\n" +#define PASS "PASS\n" +#define FAIL "FAIL\n" extern int dec_test_1(void); extern int dec_test_2(void); @@ -15,10 +15,10 @@ extern int dec_test_3(void); // i < 100 void print_test_number(int i) { - putstr(TEST, strlen(TEST)); + puts(TEST); putchar(48 + i/10); putchar(48 + i%10); - putstr(":", 1); + putchar(':'); } int main(void) @@ -30,24 +30,24 @@ int main(void) print_test_number(1); if (dec_test_1() != 0) { fail = 1; - putstr(FAIL, strlen(FAIL)); + puts(FAIL); } else - putstr(PASS, strlen(PASS)); + puts(PASS); print_test_number(2); if (dec_test_2() != 0) { fail = 1; - putstr(FAIL, strlen(FAIL)); + puts(FAIL); } else - putstr(PASS, strlen(PASS)); + puts(PASS); print_test_number(3); if (dec_test_3() != 0) { fail = 1; - putstr(FAIL, strlen(FAIL)); + puts(FAIL); } else - putstr(PASS, strlen(PASS)); + puts(PASS); return fail; } diff --git a/tests/illegal/illegal.c b/tests/illegal/illegal.c index a1ea325..af0c04b 100644 --- a/tests/illegal/illegal.c +++ b/tests/illegal/illegal.c @@ -5,18 +5,18 @@ #include "console.h" #define TEST "Test " -#define PASS "PASS\r\n" -#define FAIL "FAIL\r\n" +#define PASS "PASS\n" +#define FAIL "FAIL\n" extern int ill_test_1(void); // i < 100 void print_test_number(int i) { - putstr(TEST, strlen(TEST)); + puts(TEST); putchar(48 + i/10); putchar(48 + i%10); - putstr(":", 1); + putchar(':'); } int main(void) @@ -28,9 +28,9 @@ int main(void) print_test_number(1); if (ill_test_1() != 0) { fail = 1; - putstr(FAIL, strlen(FAIL)); + puts(FAIL); } else - putstr(PASS, strlen(PASS)); + puts(PASS); return fail; } diff --git a/tests/sc/sc.c b/tests/sc/sc.c index 2914291..a705d19 100644 --- a/tests/sc/sc.c +++ b/tests/sc/sc.c @@ -5,18 +5,18 @@ #include "console.h" #define TEST "Test " -#define PASS "PASS\r\n" -#define FAIL "FAIL\r\n" +#define PASS "PASS\n" +#define FAIL "FAIL\n" extern int sc_test_1(void); // i < 100 void print_test_number(int i) { - putstr(TEST, strlen(TEST)); + puts(TEST); putchar(48 + i/10); putchar(48 + i%10); - putstr(":", 1); + putchar(':'); } int main(void) @@ -28,9 +28,9 @@ int main(void) print_test_number(1); if (sc_test_1() != 0) { fail = 1; - putstr(FAIL, strlen(FAIL)); + puts(FAIL); } else - putstr(PASS, strlen(PASS)); + puts(PASS); return fail; } diff --git a/tests/xics/xics.c b/tests/xics/xics.c index 6652cbf..2ff4c54 100644 --- a/tests/xics/xics.c +++ b/tests/xics/xics.c @@ -29,29 +29,29 @@ void print_number(unsigned int i) // only for i = 0-999 } #ifdef DEBUG -#define DEBUG_STR "\r\nDEBUG: " +#define DEBUG_STR "\nDEBUG: " void debug_print(int i) { - putstr(DEBUG_STR, strlen(DEBUG_STR)); + puts(DEBUG_STR); print_number(i); - putstr("\r\n", 2); + puts("\n"); } -#define debug_putstr(a, b) putstr(a,b) +#define debug_puts(a) puts(a) #else -#define debug_putstr(a, b) +#define debug_puts(a) #define debug_print(i) #endif -#define ASSERT_FAIL "() ASSERT_FAILURE!\r\n " +#define ASSERT_FAIL "() ASSERT_FAILURE!\n " #define assert(cond) \ if (!(cond)) { \ - putstr(__FILE__, strlen(__FILE__)); \ - putstr(":", 1); \ + puts(__FILE__); \ + putchar(':'); \ print_number(__LINE__); \ - putstr(":", 1); \ - putstr(__FUNCTION__, strlen(__FUNCTION__));\ - putstr(ASSERT_FAIL, strlen(ASSERT_FAIL)); \ + putchar(':'); \ + puts(__FUNCTION__);\ + puts(ASSERT_FAIL); \ __asm__ ("attn"); \ } @@ -62,17 +62,17 @@ volatile uint64_t isrs_run; #define ISR_UART 0x0000000000000002 #define ISR_SPURIOUS 0x0000000000000004 -#define IPI "IPI\r\n" +#define IPI "IPI\n" void ipi_isr(void) { - debug_putstr(IPI, strlen(IPI)); + debug_puts(IPI); isrs_run |= ISR_IPI; } -#define UART "UART\r\n" +#define UART "UART\n" void uart_isr(void) { - debug_putstr(UART, strlen(UART)); + debug_puts(UART); potato_uart_irq_dis(); // disable interrupt to ack it @@ -80,9 +80,9 @@ void uart_isr(void) { } // The hardware doesn't support this but it's part of XICS so add it. -#define SPURIOUS "SPURIOUS\r\n" +#define SPURIOUS "SPURIOUS\n" void spurious_isr(void) { - debug_putstr(SPURIOUS, strlen(SPURIOUS)); + debug_puts(SPURIOUS); isrs_run |= ISR_SPURIOUS; } @@ -113,9 +113,9 @@ void isr(void) xirr = xics_read32(XICS_XIRR); // read hardware irq source #ifdef DEBUG - putstr(ISR, strlen(ISR)); + puts(ISR); print_number(xirr & 0xff); - putstr("\r\n", 2); + puts("\n"); #endif op = isr_table; @@ -221,8 +221,8 @@ int xics_test_2(void) } #define TEST "Test " -#define PASS "PASS\r\n" -#define FAIL "FAIL\r\n" +#define PASS "PASS\n" +#define FAIL "FAIL\n" int (*tests[])(void) = { xics_test_0, @@ -246,14 +246,14 @@ int main(void) if (!t) break; - putstr(TEST, strlen(TEST)); + puts(TEST); print_number(i); - putstr(": ", 1); + putchar(':'); if (t() != 0) { fail = 1; - putstr(FAIL, strlen(FAIL)); + puts(FAIL); } else - putstr(PASS, strlen(PASS)); + puts(PASS); i++; }