Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / arch / x86 / xbox / methods.c
1 /*
2  *   Creation Date: <2004/08/28 18:38:22 greg>
3  *   Time-stamp: <2004/08/28 18:38:22 greg>
4  *
5  *      <methods.c>
6  *
7  *      Misc device node methods
8  *
9  *   Copyright (C) 2004 Greg Watson
10  *
11  *   Based on MOL specific code which is
12  *
13  *   Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se)
14  *
15  *   This program is free software; you can redistribute it and/or
16  *   modify it under the terms of the GNU General Public License
17  *   version 2
18  *
19  */
20
21 #include "config.h"
22 #include "libopenbios/bindings.h"
23 #include "libc/string.h"
24 // #include "libopenbios/ofmem.h"
25
26 /************************************************************************/
27 /*      stdout                                                          */
28 /************************************************************************/
29
30 DECLARE_NODE( video_stdout, INSTALL_OPEN, 0, "Tdisplay" );
31
32 /* ( addr len -- actual ) */
33 static void
34 stdout_write( void )
35 {
36         int len = POP();
37         char *addr = (char*)POP();
38
39         printk( "%s", s );
40         //vfd_draw_str( s );
41         console_draw_fstr(addr, len);
42
43         PUSH( len );
44 }
45
46 NODE_METHODS( video_stdout ) = {
47         { "write",      stdout_write    },
48 };
49
50
51 /************************************************************************/
52 /*      tty                                                             */
53 /************************************************************************/
54
55 DECLARE_NODE( tty, INSTALL_OPEN, 0, "/packages/terminal-emulator" );
56
57 /* ( addr len -- actual ) */
58 static void
59 tty_read( void )
60 {
61         int ch, len = POP();
62         char *p = (char*)POP();
63         int ret=0;
64
65         if( len > 0 ) {
66                 ret = 1;
67                 ch = getchar();
68                 if( ch >= 0 ) {
69                         *p = ch;
70                 } else {
71                         ret = 0;
72                 }
73         }
74         PUSH( ret );
75 }
76
77 /* ( addr len -- actual ) */
78 static void
79 tty_write( void )
80 {
81         int i, len = POP();
82         char *p = (char*)POP();
83         for( i=0; i<len; i++ )
84                 putchar( *p++ );
85         RET( len );
86 }
87
88 NODE_METHODS( tty ) = {
89         { "read",       tty_read        },
90         { "write",      tty_write       },
91 };
92
93 /************************************************************************/
94 /*      init                                                            */
95 /************************************************************************/
96
97 void
98 node_methods_init( void )
99 {
100         REGISTER_NODE( video_stdout );
101         REGISTER_NODE( tty );
102 }