80 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdlib.h>
 | 
						|
#include <errno.h>
 | 
						|
#include <unistd.h>
 | 
						|
#include "libsys.h"
 | 
						|
 | 
						|
static void* stdout_handle;
 | 
						|
 | 
						|
static void* of_finddevice(const char* name)
 | 
						|
{
 | 
						|
    struct
 | 
						|
    {
 | 
						|
        const char* method;
 | 
						|
        int ins, outs;
 | 
						|
        const char* name;
 | 
						|
        void* phandle;
 | 
						|
    } args;
 | 
						|
 | 
						|
    args.method = "finddevice";
 | 
						|
    args.ins = 1;
 | 
						|
    args.outs = 1;
 | 
						|
    args.name = name;
 | 
						|
    openfirmware_call(&args);
 | 
						|
    return args.phandle;
 | 
						|
}
 | 
						|
 | 
						|
static int of_getprop(void* phandle, const char* name, void* dest, int destlen)
 | 
						|
{
 | 
						|
    struct
 | 
						|
    {
 | 
						|
        const char* method;
 | 
						|
        int ins, outs;
 | 
						|
        void* phandle;
 | 
						|
        const char* name;
 | 
						|
        void* dest;
 | 
						|
        int destlen;
 | 
						|
        int flag;
 | 
						|
    } args;
 | 
						|
 | 
						|
    args.method = "getprop";
 | 
						|
    args.ins = 4;
 | 
						|
    args.outs = 1;
 | 
						|
    args.phandle = phandle;
 | 
						|
    args.name = name;
 | 
						|
    args.dest = dest;
 | 
						|
    args.destlen = destlen;
 | 
						|
    openfirmware_call(&args);
 | 
						|
    return args.flag;
 | 
						|
}
 | 
						|
 | 
						|
void openfirmware_init(void)
 | 
						|
{
 | 
						|
    void* chosen = of_finddevice("/chosen");
 | 
						|
    of_getprop(chosen, "stdout", &stdout_handle, sizeof(stdout_handle));
 | 
						|
}
 | 
						|
 | 
						|
unsigned char _sys_rawread(void)
 | 
						|
{
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
void _sys_rawwrite(unsigned char c)
 | 
						|
{
 | 
						|
    struct
 | 
						|
    {
 | 
						|
        const char* method;
 | 
						|
        int ins, outs;
 | 
						|
        void* ihandle;
 | 
						|
        void* address;
 | 
						|
        int len;
 | 
						|
        int actual;
 | 
						|
    } args;
 | 
						|
 | 
						|
    args.method = "write";
 | 
						|
    args.ins = 3;
 | 
						|
    args.outs = 1;
 | 
						|
    args.ihandle = stdout_handle;
 | 
						|
    args.address = &c;
 | 
						|
    args.len = 1;
 | 
						|
    openfirmware_call(&args);
 | 
						|
}
 |