summaryrefslogtreecommitdiff
path: root/device/include/pic16/stdio.h
diff options
context:
space:
mode:
Diffstat (limited to 'device/include/pic16/stdio.h')
-rw-r--r--device/include/pic16/stdio.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/device/include/pic16/stdio.h b/device/include/pic16/stdio.h
new file mode 100644
index 0000000..aff4d49
--- /dev/null
+++ b/device/include/pic16/stdio.h
@@ -0,0 +1,120 @@
+/*-------------------------------------------------------------------------
+ stdio.h - ANSI functions forward declarations
+
+ Copyright (C) 1998, Sandeep Dutta . sandeep.dutta@usa.net
+ Ported to PIC16 port by Vangelis Rokas, 2004 <vrokas AT otenet.gr>
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this library; see the file COPYING. If not, write to the
+ Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ MA 02110-1301, USA.
+
+ As a special exception, if you link this library with other files,
+ some of which are compiled with SDCC, to produce an executable,
+ this library does not by itself cause the resulting executable to
+ be covered by the GNU General Public License. This exception does
+ not however invalidate any other reasons why the executable file
+ might be covered by the GNU General Public License.
+-------------------------------------------------------------------------*/
+
+#ifndef __STDIO_H
+#define __STDIO_H 1
+
+/* link the C library */
+#pragma library c
+
+#include <stdarg.h>
+
+#include <sdcc-lib.h>
+
+#ifndef NULL
+ #define NULL (void *)0
+#endif
+
+#ifndef _SIZE_T_DEFINED
+#define _SIZE_T_DEFINED
+ typedef unsigned int size_t;
+#endif
+
+/* stream descriptor definition */
+typedef char *FILE;
+
+/* USART and MSSP module stream descriptors */
+
+/* since FILE is declared as a generic pointer,
+ * the upper byte is used to dereference the pointer
+ * information. For the stream descriptors we
+ * use the 5th bit and the lower nubble bits.
+ * Descriptors are denoted by an 1 in bit 5,
+ * further dereference is made for:
+ * <stream> <3:0> bits
+ * USART 0 (0x0)
+ * MSSP 1 (0x1)
+ * USER 15 (0xf)
+ *
+ * There is a special value for GPSIM specific (see below)
+ * which is:
+ * GPSIM 14 (0xe)
+ *
+ *
+ * if further stream descriptors need to be added then more
+ * bits of the upper byte can be used
+ */
+
+#define USART_DEREF 0x0
+#define MSSP_DEREF 0x1
+#define USER_DEREF 0xf
+
+#define STREAM_USART ((FILE *)(0x00200000UL))
+#define STREAM_MSSP ((FILE *)(0x00210000UL))
+#define STREAM_USER ((FILE *)(0x002f0000UL))
+
+/* this is a custom dereference which points to a custom
+ * port of GPSIM simulator. This port redirects characters
+ * to /tmp/gpsim.debug.1 file (used for debugging purposes)
+ * NOTICE: This feature is not part of the official gpsim
+ * distribution. Contact vrokas AT users.sourceforge.net
+ * for more info */
+#define GPSIM_DEREF 0xe
+#define STREAM_GPSIM ((FILE *)(0x002e0000UL))
+
+extern FILE *stdin;
+extern FILE *stdout;
+
+/* printf_small() supports float print */
+void printf_small (const char *fmt, ...);
+
+/* printf_tiny() does not support float print */
+void printf_tiny (const char *fmt, ...); // __reentrant;
+
+extern int printf (const char *fmt, ...);
+extern int fprintf (FILE *stream, const char *fmt, ...);
+extern int sprintf (char *str, const char *fmt, ...);
+
+extern int vprintf (const char *fmt, va_list ap);
+extern int vfprintf (FILE *stream, const char *fmt, va_list ap);
+extern int vsprintf (char *str, const char *fmt, va_list ap);
+
+#define PUTCHAR(C) void putchar (char C) __wparam
+extern PUTCHAR (c);
+
+extern void __stream_putchar (FILE *stream, char c);
+
+extern void __stream_usart_putchar (char c) __wparam __naked;
+extern void __stream_mssp_putchar (char c) __wparam __naked;
+extern void __stream_gpsim_putchar (char c) __wparam __naked;
+
+extern char *gets (char *str);
+extern char getchar (void);
+
+#endif /* __STDIO_H */