kos_sys/os/
dbgio.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Rust for KallistiOS/Dreamcast
// Copyright (C) 2024 Eric Fradella
// https://dreamcast.rs/

use crate::prelude::*;

#[repr(C)]
pub struct dbgio_handler_t {
    name:           *const c_char,
    detected:       Option<unsafe extern "C" fn() -> c_int>,
    init:           Option<unsafe extern "C" fn() -> c_int>,
    shutdown:       Option<unsafe extern "C" fn() -> c_int>,
    set_irq_usage:  Option<unsafe extern "C" fn(mode: c_int) -> c_int>,
    read:           Option<unsafe extern "C" fn() -> c_int>,
    write:          Option<unsafe extern "C" fn(c: c_int) -> c_int>,
    flush:          Option<unsafe extern "C" fn() -> c_int>,
    write_buffer:   Option<unsafe extern "C" fn(data: *const u8, len: c_int,
                                                xlat: c_int) -> c_int>,
    read_buffer:    Option<unsafe extern "C" fn(data: *mut u8, len: c_int) -> c_int>,
}

pub const DBGIO_MODE_POLLED: c_int  = 0;
pub const DBGIO_MODE_IRQ: c_int     = 1;

#[link(name = "kallisti")]
extern "C" {
    pub static mut dbgio_handlers: *mut *mut dbgio_handler_t;
    pub static mut dbgio_handler_cnt: c_int;
    pub static mut dbgio_null: dbgio_handler_t;
    pub fn dbgio_dev_select(name: *const c_char) -> c_int;
    pub fn dbgio_dev_get() -> *const c_char;
    pub fn dbgio_init() -> c_int;
    pub fn dbgio_set_irq_usage(mode: c_int) -> c_int;
    pub fn dbgio_read() -> c_int;
    pub fn dbgio_write(c: c_int) -> c_int;
    pub fn dbgio_flush() -> c_int;
    pub fn dbgio_write_buffer(data: *const u8, len: c_int) -> c_int;
    pub fn dbgio_read_buffer(data: *mut u8, len: c_int) -> c_int;
    pub fn dbgio_write_buffer_xlat(data: *const u8, len: c_int) -> c_int;
    pub fn dbgio_write_str(str: *const c_char) -> c_int;
    pub fn dbgio_disable();
    pub fn dbgio_enable();
    pub fn dbgio_printf(fmt: *const c_char, ...) -> c_int;
}