1 /*
2 * Copyright 2008, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 * François Revol, revol@free.fr
7 */
8
9
10 #include <debug.h>
11 #include <driver_settings.h>
12 #include <ISA.h>
13
14 static isa_module_info *sISAModule;
15
16
17 static int
debugger_puts(const char * s,int32 length)18 debugger_puts(const char *s, int32 length)
19 {
20 int i;
21 for (i = 0; i < length; i++)
22 sISAModule->write_io_8(0xe9, s[i]);
23 return i;
24 }
25
26
27 static status_t
std_ops(int32 op,...)28 std_ops(int32 op, ...)
29 {
30 void *handle;
31 bool load = false;
32
33 switch (op) {
34 case B_MODULE_INIT:
35 handle = load_driver_settings("kernel");
36 if (handle) {
37 load = get_driver_boolean_parameter(handle,
38 "bochs_debug_output", load, true);
39 unload_driver_settings(handle);
40 }
41 if (load) {
42 if (get_module(B_ISA_MODULE_NAME, (module_info **)&sISAModule) < B_OK)
43 return B_ERROR;
44 }
45 return load ? B_OK : B_ERROR;
46 case B_MODULE_UNINIT:
47 put_module(B_ISA_MODULE_NAME);
48 return B_OK;
49 }
50 return B_BAD_VALUE;
51 }
52
53
54 static struct debugger_module_info sModuleInfo = {
55 {
56 "debugger/bochs/v1",
57 0,
58 &std_ops
59 },
60 NULL,
61 NULL,
62 debugger_puts,
63 NULL
64 };
65
66 module_info *modules[] = {
67 (module_info *)&sModuleInfo,
68 NULL
69 };
70
71