From fb4c42a3573af5806e960cba103cfc747b892a44 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt Date: Sat, 15 Oct 2016 23:36:53 +0200 Subject: [PATCH] Added custom log function for CBM machines. The log function writes directly to the screen. Combined with the usage of PFS this means that the POSIX layer of the C library isn't referenced anymore thus reducing the memory requirements. --- cpu/6502/6502def.h | 6 ++++++ cpu/6502/lib/log.c | 11 +++++------ platform/c128/Makefile.c128 | 2 +- platform/c128/contiki-conf.h | 2 ++ platform/c128/lib/logscr.S | 5 +++++ platform/c64/Makefile.c64 | 2 +- platform/c64/contiki-conf.h | 2 ++ platform/c64/lib/logscr.S | 38 ++++++++++++++++++++++++++++++++++++ 8 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 platform/c128/lib/logscr.S create mode 100644 platform/c64/lib/logscr.S diff --git a/cpu/6502/6502def.h b/cpu/6502/6502def.h index 2da81b02e..c0f5c999a 100644 --- a/cpu/6502/6502def.h +++ b/cpu/6502/6502def.h @@ -74,6 +74,12 @@ typedef unsigned short uip_stats_t; #define LOADER_CONF_ARCH "lib/unload.h" +#ifdef HAVE_LOGSCR +void logscr(const void *msg, unsigned len); +#else +#define logscr(msg, len) write(STDERR_FILENO, msg, len) +#endif + #if MTU_SIZE #define UIP_CONF_BUFFER_SIZE (UIP_LLH_LEN + MTU_SIZE) #else /* MTU_SIZE */ diff --git a/cpu/6502/lib/log.c b/cpu/6502/lib/log.c index 93ed0eeda..a259c06d6 100644 --- a/cpu/6502/lib/log.c +++ b/cpu/6502/lib/log.c @@ -32,7 +32,6 @@ * */ -#include #include #include "net/ip/uip.h" @@ -43,8 +42,8 @@ void uip_log(char *message) { - write(STDERR_FILENO, message, strlen(message)); - write(STDERR_FILENO, "\n", 1); + logscr(message, strlen(message)); + logscr("\n", 1); } #endif /* UIP_LOGGING */ /*-----------------------------------------------------------------------------------*/ @@ -52,9 +51,9 @@ uip_log(char *message) void log_message(const char *part1, const char *part2) { - write(STDERR_FILENO, part1, strlen(part1)); - write(STDERR_FILENO, part2, strlen(part2)); - write(STDERR_FILENO, "\n", 1); + logscr(part1, strlen(part1)); + logscr(part2, strlen(part2)); + logscr("\n", 1); } #endif /* LOG_CONF_ENABLED */ /*-----------------------------------------------------------------------------------*/ diff --git a/platform/c128/Makefile.c128 b/platform/c128/Makefile.c128 index dab80b1dc..c1adbaf08 100644 --- a/platform/c128/Makefile.c128 +++ b/platform/c128/Makefile.c128 @@ -31,7 +31,7 @@ # Author: Oliver Schmidt # -CONTIKI_TARGET_SOURCEFILES += exec.c lseek.c \ +CONTIKI_TARGET_SOURCEFILES += exec.c logscr.S lseek.c \ pfs.S pfs-dir.c pfs-dir-asm.S pfs_remove.S pfs_seek.S pfs_write.S CONTIKI_CPU = $(CONTIKI)/cpu/6502 diff --git a/platform/c128/contiki-conf.h b/platform/c128/contiki-conf.h index 0e72f20c4..9ee7cc2b7 100644 --- a/platform/c128/contiki-conf.h +++ b/platform/c128/contiki-conf.h @@ -35,6 +35,8 @@ #ifndef CONTIKI_CONF_H_ #define CONTIKI_CONF_H_ +#define HAVE_LOGSCR + #include "6502def.h" #if (WITH_PFS && !CFS_IMPL) diff --git a/platform/c128/lib/logscr.S b/platform/c128/lib/logscr.S new file mode 100644 index 000000000..e87e2aa17 --- /dev/null +++ b/platform/c128/lib/logscr.S @@ -0,0 +1,5 @@ +; 2016-04-28, Greg King +; +; The C128 function is the same as the C64 function. + + .include "../../c64/lib/logscr.S" diff --git a/platform/c64/Makefile.c64 b/platform/c64/Makefile.c64 index 96b54c287..7fcb4d19f 100644 --- a/platform/c64/Makefile.c64 +++ b/platform/c64/Makefile.c64 @@ -31,7 +31,7 @@ # Author: Oliver Schmidt # -CONTIKI_TARGET_SOURCEFILES += exec.c lseek.c \ +CONTIKI_TARGET_SOURCEFILES += exec.c logscr.S lseek.c \ pfs.S pfs-dir.c pfs-dir-asm.S pfs_remove.S pfs_seek.S pfs_write.S CONTIKI_CPU = $(CONTIKI)/cpu/6502 diff --git a/platform/c64/contiki-conf.h b/platform/c64/contiki-conf.h index 102d01a77..21ea459bd 100644 --- a/platform/c64/contiki-conf.h +++ b/platform/c64/contiki-conf.h @@ -35,6 +35,8 @@ #ifndef CONTIKI_CONF_H_ #define CONTIKI_CONF_H_ +#define HAVE_LOGSCR + #include "6502def.h" #if (WITH_PFS && !CFS_IMPL) diff --git a/platform/c64/lib/logscr.S b/platform/c64/lib/logscr.S new file mode 100644 index 000000000..e9f297be7 --- /dev/null +++ b/platform/c64/lib/logscr.S @@ -0,0 +1,38 @@ +; 2002-11-16, Ullrich von Bassewitz +; 2016-04-28, Greg King +; +; void logscr(const void *msg, unsigned len); + + .export _logscr + + .import BSOUT + .import popax + .importzp ptr1, ptr2 + +;-------------------------------------------------------------------------- + +.proc _logscr + eor #$FF + sta ptr2 + txa + eor #$FF + sta ptr2+1 ; remember -count-1 + + jsr popax ; get buf + sta ptr1 + stx ptr1+1 + +L1: inc ptr2 ; count the char that will be printed + bne L2 + inc ptr2+1 + beq L9 +L2: ldy #$00 + lda (ptr1),y + jsr BSOUT + inc ptr1 + bne L1 + inc ptr1+1 + bne L1 ; branch always + +L9: rts +.endproc