Subversion Repositories HelenOS-historic

Rev

Rev 586 | Rev 893 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 586 Rev 892
Line 44... Line 44...
44
 * @param d Character device.
44
 * @param d Character device.
45
 * @param ch Character to be printed.
45
 * @param ch Character to be printed.
46
 */
46
 */
47
void ski_putchar(chardev_t *d, const char ch)
47
void ski_putchar(chardev_t *d, const char ch)
48
{
48
{
49
    __asm__ (
49
    __asm__ volatile (
50
        "mov r15=%0\n"
50
        "mov r15=%0\n"
51
        "mov r32=%1\n"      /* r32 is in0 */
51
        "mov r32=%1\n"      /* r32 is in0 */
52
        "break 0x80000\n"   /* modifies r8 */
52
        "break 0x80000\n"   /* modifies r8 */
53
        :
53
        :
54
        : "i" (SKI_PUTCHAR), "r" (ch)
54
        : "i" (SKI_PUTCHAR), "r" (ch)
Line 70... Line 70...
70
 */
70
 */
71
__s32 ski_getchar(void)
71
__s32 ski_getchar(void)
72
{
72
{
73
    __u64 ch;
73
    __u64 ch;
74
   
74
   
75
    __asm__ (
75
    __asm__ volatile (
76
        "mov r15=%1\n"
76
        "mov r15=%1\n"
77
        "break 0x80000;;\n" /* modifies r8 */
77
        "break 0x80000;;\n" /* modifies r8 */
78
        "mov %0=r8;;\n"    
78
        "mov %0=r8;;\n"    
79
 
79
 
80
        : "=r" (ch)
80
        : "=r" (ch)
Line 83... Line 83...
83
    );
83
    );
84
 
84
 
85
    return (__s32) ch;
85
    return (__s32) ch;
86
}
86
}
87
 
87
 
-
 
88
/**
-
 
89
    This is blocking wrap function of ski_getchar
-
 
90
    It active waits ... for using with non-stable kernel
-
 
91
*/
-
 
92
static char ski_getchar_blocking(chardev_t *d)
-
 
93
{
-
 
94
    volatile int ch;
-
 
95
    while(!(ch=ski_getchar()));
-
 
96
    if(ch == '\r') ch = '\n';
-
 
97
    return (char) ch;
-
 
98
}
-
 
99
 
-
 
100
 
88
/** Ask keyboard if a key was pressed. */
101
/** Ask keyboard if a key was pressed. */
89
void poll_keyboard(void)
102
void poll_keyboard(void)
90
{
103
{
91
    char ch;
104
    char ch;
92
 
105
 
Line 114... Line 127...
114
 
127
 
115
 
128
 
116
static chardev_operations_t ski_ops = {
129
static chardev_operations_t ski_ops = {
117
    .resume = ski_kb_enable,
130
    .resume = ski_kb_enable,
118
    .suspend = ski_kb_disable,
131
    .suspend = ski_kb_disable,
119
    .write = ski_putchar
132
    .write = ski_putchar,
-
 
133
    .read = ski_getchar_blocking
120
};
134
};
121
 
135
 
122
 
136
 
123
/** Initialize debug console
137
/** Initialize debug console
124
 *
138
 *
125
 * Issue SSC (Simulator System Call) to
139
 * Issue SSC (Simulator System Call) to
126
 * to open debug console.
140
 * to open debug console.
127
 */
141
 */
128
void ski_init_console(void)
142
void ski_init_console(void)
129
{
143
{
130
    __asm__ (
144
    __asm__ volatile (
131
        "mov r15=%0\n"
145
        "mov r15=%0\n"
132
        "break 0x80000\n"
146
        "break 0x80000\n"
133
        :
147
        :
134
        : "i" (SKI_INIT_CONSOLE)
148
        : "i" (SKI_INIT_CONSOLE)
135
        : "r15", "r8"
149
        : "r15", "r8"