⛏️ index : haiku.git

/*
 * Copyright 2008, Haiku, Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		FranΓ§ois Revol, revol@free.fr
 */


#include <debug.h>
#include <driver_settings.h>
#include <ISA.h>

static isa_module_info *sISAModule;


static int
debugger_puts(const char *s, int32 length)
{
	int i;
	for (i = 0; i < length; i++)
		sISAModule->write_io_8(0xe9, s[i]);
	return i;
}


static status_t
std_ops(int32 op, ...)
{
	void *handle;
	bool load = false;

	switch (op) {
	case B_MODULE_INIT:
		handle = load_driver_settings("kernel");
		if (handle) {
			load = get_driver_boolean_parameter(handle,
				"bochs_debug_output", load, true);
			unload_driver_settings(handle);
		}
		if (load) {
			if (get_module(B_ISA_MODULE_NAME, (module_info **)&sISAModule) < B_OK)
				return B_ERROR;
		}
		return load ? B_OK : B_ERROR;
	case B_MODULE_UNINIT:
		put_module(B_ISA_MODULE_NAME);
		return B_OK;
	}
	return B_BAD_VALUE;
}


static struct debugger_module_info sModuleInfo = {
	{
		"debugger/bochs/v1",
		0,
		&std_ops
	},
	NULL,
	NULL,
	debugger_puts,
	NULL
};

module_info *modules[] = { 
	(module_info *)&sModuleInfo,
	NULL
};