z80pack: add shared devlpr
authorAlan Cox <alan@etchedpixels.co.uk>
Sun, 23 Nov 2014 20:07:36 +0000 (20:07 +0000)
committerAlan Cox <alan@etchedpixels.co.uk>
Sun, 23 Nov 2014 20:07:36 +0000 (20:07 +0000)
Kernel/dev/z80pack/devlpr.c [new file with mode: 0644]
Kernel/dev/z80pack/devlpr.h [new file with mode: 0644]

diff --git a/Kernel/dev/z80pack/devlpr.c b/Kernel/dev/z80pack/devlpr.c
new file mode 100644 (file)
index 0000000..65d8c43
--- /dev/null
@@ -0,0 +1,38 @@
+#include <kernel.h>
+#include <version.h>
+#include <kdata.h>
+#include <devlpr.h>
+
+__sfr __at 0x02 lpstat;                /* I/O 2 and 3 */
+__sfr __at 0x03 lpdata;
+
+int lpr_open(uint8_t minor, uint16_t flag)
+{
+    minor; flag; // shut up compiler
+    return 0;
+}
+
+int lpr_close(uint8_t minor)
+{
+    minor; // shut up compiler
+    return 0;
+}
+
+int lpr_write(uint8_t minor, uint8_t rawflag, uint8_t flag)
+{
+    int c = udata.u_count;
+    char *p = udata.u_base;
+    minor; rawflag; flag; // shut up compiler
+
+    while(c) {
+        /* Note; on real hardware it might well be necessary to
+           busy wait a bit just to get acceptable performance */
+        while (lpstat != 0xFF) {
+//            if (psleep_flags(&clocktick, flag))
+//                return -1;
+        }
+        /* FIXME: tidy up ugetc and sysio checks globally */
+        lpdata = ugetc(p++);
+    }
+    return (-1);
+}
diff --git a/Kernel/dev/z80pack/devlpr.h b/Kernel/dev/z80pack/devlpr.h
new file mode 100644 (file)
index 0000000..7765c18
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __DEVLPR_DOT_H__
+#define __DEVLPR_DOT_H__
+
+int lpr_open(uint8_t minor, uint16_t flag);
+int lpr_close(uint8_t minor);
+int lpr_write(uint8_t minor, uint8_t rawflag, uint8_t flag);
+
+#endif