/* * Copyright (c) 2005 Jakub Jermar * Copyright (c) 2008 Jiri Svoboda * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @defgroup msimfb MSIM text console * @brief HelenOS MSIM text console. * @ingroup fbs * @{ */ /** @file */ #include #include #include #include #include #include "serial_console.h" #include "ski.h" #define SKI_PUTCHAR 31 #define WIDTH 80 #define HEIGHT 24 /** Display character on ski debug console * * Use SSC (Simulator System Call) to * display character on debug console. * * @param ch Character to be printed. */ static void ski_putc(const char ch) { asm volatile ( "mov r15 = %0\n" "mov r32 = %1\n" /* r32 is in0 */ "break 0x80000\n" /* modifies r8 */ : : "i" (SKI_PUTCHAR), "r" (ch) : "r15", "in0", "r8" ); if (ch == '\n') ski_putc('\r'); } int ski_init(void) { serial_console_init(ski_putc, WIDTH, HEIGHT); async_set_client_connection(serial_client_connection); return 0; } /** * @} */