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