Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / arch / x86 / xbox / methods.c
diff --git a/qemu/roms/openbios/arch/x86/xbox/methods.c b/qemu/roms/openbios/arch/x86/xbox/methods.c
new file mode 100644 (file)
index 0000000..741d15c
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ *   Creation Date: <2004/08/28 18:38:22 greg>
+ *   Time-stamp: <2004/08/28 18:38:22 greg>
+ *
+ *     <methods.c>
+ *
+ *     Misc device node methods
+ *
+ *   Copyright (C) 2004 Greg Watson
+ *
+ *   Based on MOL specific code which is
+ *
+ *   Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se)
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   version 2
+ *
+ */
+
+#include "config.h"
+#include "libopenbios/bindings.h"
+#include "libc/string.h"
+// #include "libopenbios/ofmem.h"
+
+/************************************************************************/
+/*     stdout                                                          */
+/************************************************************************/
+
+DECLARE_NODE( video_stdout, INSTALL_OPEN, 0, "Tdisplay" );
+
+/* ( addr len -- actual ) */
+static void
+stdout_write( void )
+{
+       int len = POP();
+       char *addr = (char*)POP();
+
+       printk( "%s", s );
+       //vfd_draw_str( s );
+        console_draw_fstr(addr, len);
+
+       PUSH( len );
+}
+
+NODE_METHODS( video_stdout ) = {
+       { "write",      stdout_write    },
+};
+
+
+/************************************************************************/
+/*     tty                                                             */
+/************************************************************************/
+
+DECLARE_NODE( tty, INSTALL_OPEN, 0, "/packages/terminal-emulator" );
+
+/* ( addr len -- actual ) */
+static void
+tty_read( void )
+{
+       int ch, len = POP();
+       char *p = (char*)POP();
+       int ret=0;
+
+       if( len > 0 ) {
+               ret = 1;
+               ch = getchar();
+               if( ch >= 0 ) {
+                       *p = ch;
+               } else {
+                       ret = 0;
+               }
+       }
+       PUSH( ret );
+}
+
+/* ( addr len -- actual ) */
+static void
+tty_write( void )
+{
+       int i, len = POP();
+       char *p = (char*)POP();
+       for( i=0; i<len; i++ )
+               putchar( *p++ );
+       RET( len );
+}
+
+NODE_METHODS( tty ) = {
+       { "read",       tty_read        },
+       { "write",      tty_write       },
+};
+
+/************************************************************************/
+/*     init                                                            */
+/************************************************************************/
+
+void
+node_methods_init( void )
+{
+       REGISTER_NODE( video_stdout );
+       REGISTER_NODE( tty );
+}