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" |