summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/libnds/source/arm9/console.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-04-16 18:37:33 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-04-16 18:37:33 +0000
commit311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a (patch)
tree47eaf22ca7bb8cc68486ffe964abd54b535902ad /c/src/lib/libbsp/arm/nds/libnds/source/arm9/console.c
parent2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com> (diff)
downloadrtems-311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a.tar.bz2
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac, mk_libnds.sh, patch.libnds, preinstall.am, block/block.c, clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c, coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile, dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c, dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile, dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h, dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h, dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c, dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c, dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c, dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c, dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c, dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c, dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c, dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c, dswifi/arm9/source/sgIP_memblock.h, dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h, dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h, dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h, dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h, dswifi/include/dswifi7.h, dswifi/include/dswifi9.h, dswifi/include/dswifi_version.h, dswifi/include/netdb.h, dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c, fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h, include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h, libfat/gba/include/fat.h, libfat/include/fat.h, libfat/nds/include/fat.h, libfat/source/bit_ops.h, libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h, libfat/source/directory.c, libfat/source/directory.h, libfat/source/fatdir.c, libfat/source/fatdir.h, libfat/source/fatfile.c, libfat/source/fatfile.h, libfat/source/file_allocation_table.c, libfat/source/file_allocation_table.h, libfat/source/filetime.c, libfat/source/filetime.h, libfat/source/libfat.c, libfat/source/mem_allocate.h, libfat/source/partition.c, libfat/source/partition.h, libfat/source/disc_io/disc.c, libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h, libfat/source/disc_io/io_cf_common.c, libfat/source/disc_io/io_cf_common.h, libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s, libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h, libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h, libfat/source/disc_io/io_m3_common.c, libfat/source/disc_io/io_m3_common.h, libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h, libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h, libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h, libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h, libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h, libfat/source/disc_io/io_sc_common.c, libfat/source/disc_io/io_sc_common.h, libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h, libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h, libfat/source/disc_io/io_scsd_s.s, libfat/source/disc_io/io_sd_common.c, libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7, libnds/Makefile.arm9, libnds/libnds_license.txt, libnds/basicARM7/source/defaultARM7.c, libnds/include/default_font_bin.h, libnds/include/gbfs.h, libnds/include/nds.h, libnds/include/nds/bios.h, libnds/include/nds/card.h, libnds/include/nds/dma.h, libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h, libnds/include/nds/jtypes.h, libnds/include/nds/memory.h, libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h, libnds/include/nds/system.h, libnds/include/nds/timers.h, libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h, libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h, libnds/include/nds/arm9/background.h, libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h, libnds/include/nds/arm9/console.h, libnds/include/nds/arm9/exceptions.h, libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h, libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h, libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h, libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h, libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h, libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h, libnds/source/arm7/audio.c, libnds/source/arm7/clock.c, libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c, libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c, libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s, libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s, libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s, libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c, libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin, libnds/source/arm9/default_font.s, libnds/source/arm9/exceptionHandler.S, libnds/source/arm9/exceptionHandler.s, libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c, libnds/source/arm9/icache.s, libnds/source/arm9/image.c, libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c, libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c, libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c, libnds/source/arm9/system.c, libnds/source/arm9/touch.c, libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c, libnds/source/common/biosCalls.s, libnds/source/common/card.c, libnds/source/common/gbfs.c, libnds/source/common/interruptDispatcher.s, libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c, sound/sound.h, start/start.S, startup/linkcmds, startup/start.c, timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c, tools/configure.ac, tools/runtest, tools/ndstool/include/arm7_sha1_homebrew.h, tools/ndstool/include/arm7_sha1_nintendo.h, tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h, tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h, tools/ndstool/include/encryption.h, tools/ndstool/include/header.h, tools/ndstool/include/hook.h, tools/ndstool/include/little.h, tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h, tools/ndstool/include/ndscreate.h, tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h, tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h, tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h, tools/ndstool/include/passme_vhd1.h, tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h, tools/ndstool/include/sha1.h, tools/ndstool/include/types.h, tools/ndstool/source/arm7_sha1_homebrew.c, tools/ndstool/source/arm7_sha1_nintendo.c, tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp, tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp, tools/ndstool/source/default_icon.c, tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp, tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c, tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp, tools/ndstool/source/ndscreate.cpp, tools/ndstool/source/ndsextract.cpp, tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp, tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c, tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp, touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c, touchscreen/reco.h, touchscreen/touchscreen.c, touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c: New files.
Diffstat (limited to '')
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/arm9/console.c459
1 files changed, 459 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/arm9/console.c b/c/src/lib/libbsp/arm/nds/libnds/source/arm9/console.c
new file mode 100644
index 0000000000..47ff72df27
--- /dev/null
+++ b/c/src/lib/libbsp/arm/nds/libnds/source/arm9/console.c
@@ -0,0 +1,459 @@
+/*---------------------------------------------------------------------------------
+ $Id$
+
+ Copyright (C) 2005
+ Michael Noland (joat)
+ Jason Rogers (dovoto)
+ Dave Murphy (WinterMute)
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any
+ damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you use
+ this software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and
+ must not be misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source
+ distribution.
+
+---------------------------------------------------------------------------------*/
+
+#include <nds/jtypes.h>
+#include <nds/memory.h>
+#include <nds/arm9/console.h>
+#include <nds/arm9/video.h>
+#include <nds/arm9/background.h>
+#include <default_font_bin.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/iosupport.h>
+
+// global console variables
+
+#define CONSOLE_WIDTH 32
+#define CONSOLE_HEIGHT 24
+#define TAB_SIZE 3
+
+// map to print to
+static u16* fontMap;
+
+// location of cursor
+static int row, col;
+static int savedX, savedY;
+
+// font may not start on a character base boundry
+static u16 fontOffset;
+
+// the first character in the set (0 if you have a full set)
+static u16 fontStart;
+
+// the 16-color palette to use
+bool fontBold = false;
+static u16 fontPal;
+
+static int consoleInitialised = 0;
+
+void consolePrintChar(char c);
+
+
+//---------------------------------------------------------------------------------
+static void consoleCls(char mode) {
+//---------------------------------------------------------------------------------
+
+ int i = 0;
+ int colTemp,rowTemp;
+
+ switch (mode)
+ {
+ case '0':
+ {
+ colTemp = col;
+ rowTemp = row;
+
+ while(i++ < ((CONSOLE_HEIGHT * CONSOLE_WIDTH) - (rowTemp * CONSOLE_WIDTH + colTemp))) consolePrintChar(' ');
+
+ col = colTemp;
+ row = rowTemp;
+ break;
+ }
+ case '1':
+ {
+ colTemp = col;
+ rowTemp = row;
+
+ row = 0;
+ col = 0;
+
+ while (i++ < (rowTemp * CONSOLE_WIDTH + colTemp)) consolePrintChar(' ');
+
+ col = colTemp;
+ row = rowTemp;
+ break;
+ }
+ case '2':
+ {
+ row = 0;
+ col = 0;
+
+ while(i++ < CONSOLE_HEIGHT * CONSOLE_WIDTH) consolePrintChar(' ');
+
+ row = 0;
+ col = 0;
+ break;
+ }
+ }
+}
+//---------------------------------------------------------------------------------
+static void consoleClearLine(char mode) {
+//---------------------------------------------------------------------------------
+
+ int i = 0;
+ int colTemp;
+
+ switch (mode)
+ {
+ case '0':
+ {
+ colTemp = col;
+
+ while(i++ < (CONSOLE_WIDTH - colTemp)) {
+ consolePrintChar(' ');
+ }
+
+ col = colTemp;
+
+ break;
+ }
+ case '1':
+ {
+ colTemp = col;
+
+ col = 0;
+
+ while(i++ < ((CONSOLE_WIDTH - colTemp)-2)) {
+ consolePrintChar(' ');
+ }
+
+ col = colTemp;
+
+ break;
+ }
+ case '2':
+ {
+ colTemp = col;
+
+ col = 0;
+
+ while(i++ < CONSOLE_WIDTH) {
+ consolePrintChar(' ');
+ }
+
+ col = colTemp;
+
+ break;
+ }
+ default:
+ {
+ colTemp = col;
+
+ while(i++ < (CONSOLE_WIDTH - colTemp)) {
+ consolePrintChar(' ');
+ }
+
+ col = colTemp;
+
+ break;
+ }
+ }
+}
+//---------------------------------------------------------------------------------
+int con_write(struct _reent *r,int fd,const char *ptr,int len) {
+//---------------------------------------------------------------------------------
+
+ if (!consoleInitialised) return -1;
+
+ char chr;
+
+ int i, count = 0;
+ char *tmp = (char*)ptr;
+
+ if(!tmp || len<=0) return -1;
+
+ i = 0;
+ while(*tmp!='\0' && i<len) {
+
+ chr = *(tmp++);
+ i++; count++;
+
+ if ( chr == 0x1b && *tmp == '[' ) {
+ bool escaping = true;
+ char *escapeseq = tmp;
+ int escapelen = 0;
+
+ do {
+ chr = *(tmp++);
+ i++; count++; escapelen++;
+ int parameter;
+
+ switch (chr) {
+ /////////////////////////////////////////
+ // Cursor directional movement
+ /////////////////////////////////////////
+ case 'A':
+ siscanf(escapeseq,"[%dA", &parameter);
+ row = (row - parameter) < 0 ? 0 : row - parameter;
+ escaping = false;
+ break;
+ case 'B':
+ siscanf(escapeseq,"[%dB", &parameter);
+ row = (row + parameter) > CONSOLE_HEIGHT - 1 ? CONSOLE_HEIGHT - 1 : row + parameter;
+ escaping = false;
+ break;
+ case 'C':
+ siscanf(escapeseq,"[%dC", &parameter);
+ col = (col + parameter) > CONSOLE_WIDTH - 1 ? CONSOLE_WIDTH - 1 : col + parameter;
+ escaping = false;
+ break;
+ case 'D':
+ siscanf(escapeseq,"[%dC", &parameter);
+ col = (col - parameter) < 0 ? 0 : col - parameter;
+ escaping = false;
+ break;
+ /////////////////////////////////////////
+ // Cursor position movement
+ /////////////////////////////////////////
+ case 'H':
+ case 'f':
+ siscanf(escapeseq,"[%d;%df", &row, &col);
+ escaping = false;
+ break;
+ /////////////////////////////////////////
+ // Screen clear
+ /////////////////////////////////////////
+ case 'J':
+ consoleCls(escapeseq[escapelen-2]);
+ escaping = false;
+ break;
+ /////////////////////////////////////////
+ // Line clear
+ /////////////////////////////////////////
+ case 'K':
+ consoleClearLine(escapeseq[escapelen-2]);
+ escaping = false;
+ break;
+ /////////////////////////////////////////
+ // Save cursor position
+ /////////////////////////////////////////
+ case 's':
+ savedX = col;
+ savedY = row;
+ escaping = false;
+ break;
+ /////////////////////////////////////////
+ // Load cursor position
+ /////////////////////////////////////////
+ case 'u':
+ col = savedX;
+ row = savedY;
+ escaping = false;
+ break;
+ }
+ } while (escaping);
+ continue;
+ }
+
+ consolePrintChar(chr);
+ }
+
+ return count;
+}
+
+const devoptab_t dotab_stdout = {
+ "con",
+ 0,
+ NULL,
+ NULL,
+ con_write,
+ NULL,
+ NULL,
+ NULL
+};
+
+
+/*---------------------------------------------------------------------------------
+ consoleInit
+ param:
+ font: 16 color font
+ charBase: the location the font data will be loaded to
+ numCharacters: count of characters in the font
+ charStart: The ascii number of the first character in the font set
+ if you have a full set this will be zero
+ map: pointer to the map you will be printing to.
+ pal: specifies the 16 color palette to use, if > 15 it will change all non-zero
+ entries in the font to use palette index 255
+---------------------------------------------------------------------------------*/
+void consoleInit( u16* font, u16* charBase,
+ u16 numCharacters, u8 charStart,
+ u16* map, u8 pal, u8 bitDepth) {
+//---------------------------------------------------------------------------------
+ int i;
+
+ row = col = 0;
+
+ fontStart = charStart;
+
+ fontOffset = 0;
+
+ fontMap = map;
+
+ if(bitDepth == 16)
+ {
+ if(pal < 16)
+ {
+ fontPal = pal << 12;
+
+ for (i = 0; i < numCharacters * 16; i++)
+ charBase[i] = font[i];
+ }
+ else
+ {
+ fontPal = 15 << 12;
+
+ for (i = 0; i < numCharacters * 16; i++)
+ {
+ u16 temp = 0;
+
+ if(font[i] & 0xF)
+ temp |= 0xF;
+ if(font[i] & 0xF0)
+ temp |= 0xF0;
+ if(font[i] & 0xF00)
+ temp |= 0xF00;
+ if(font[i] & 0xF000)
+ temp |= 0xF000;
+
+ charBase[i] = temp;
+ }
+ }
+ }//end if bitdepth
+ else
+ {
+ fontPal = 0;
+ for(i = 0; i < numCharacters * 16; i++)
+ {
+ u32 temp = 0;
+
+ if(font[i] & 0xF)
+ temp = 255;
+ if(font[i] & 0xF0)
+ temp |= 255 << 8;
+ if(font[i] & 0xF00)
+ temp |= 255 << 16;
+ if(font[i] & 0xF000)
+ temp |= 255 << 24;
+
+ ((u32*)charBase)[i] = temp;
+
+ }
+ }
+
+ devoptab_list[STD_OUT] = &dotab_stdout;
+ devoptab_list[STD_ERR] = &dotab_stdout;
+ setvbuf(stderr, NULL , _IONBF, 0);
+ setvbuf(stdout, NULL , _IONBF, 0);
+ consoleCls('2');
+ consoleInitialised = 1;
+
+}
+
+//---------------------------------------------------------------------------------
+// Places the console in a default mode using bg0 of the sub display, and vram c for
+// font and map..this is provided for rapid prototyping and nothing more
+void consoleDemoInit(void) {
+//---------------------------------------------------------------------------------
+ videoSetModeSub(MODE_0_2D | DISPLAY_BG0_ACTIVE); //sub bg 0 will be used to print text
+ vramSetBankC(VRAM_C_SUB_BG);
+
+ SUB_BG0_CR = BG_MAP_BASE(31);
+
+ BG_PALETTE_SUB[255] = RGB15(31,31,31); //by default font will be rendered with color 255
+
+ //consoleInit() is a lot more flexible but this gets you up and running quick
+ consoleInitDefault((u16*)SCREEN_BASE_BLOCK_SUB(31), (u16*)CHAR_BASE_BLOCK_SUB(0), 16);
+}
+
+//---------------------------------------------------------------------------------
+void consoleInitDefault(u16* map, u16* charBase, u8 bitDepth) {
+//---------------------------------------------------------------------------------
+ consoleInit((u16*)default_font_bin, charBase, 256, 0, map, CONSOLE_USE_COLOR255, bitDepth);
+}
+
+//void consoleInitColorDefault(u16* map, u16* charBase) {
+// consoleInit((u16*)default_font_bin, charBase, 256, 0, map, CONSOLE_USE_COLOR255, bitDepth);
+//}
+
+//---------------------------------------------------------------------------------
+static void newRow() {
+//---------------------------------------------------------------------------------
+ int i;
+ row++;
+ if(row >= CONSOLE_HEIGHT) {
+ row--;
+
+ for(i = CONSOLE_WIDTH; i < CONSOLE_HEIGHT * CONSOLE_WIDTH; i++) fontMap[i - CONSOLE_WIDTH] = fontMap[i];
+
+ for(i = 0; i < CONSOLE_WIDTH; i++) fontMap[i + (CONSOLE_HEIGHT-1)*CONSOLE_WIDTH] = fontPal | (u16)(' ' + fontOffset - fontStart);
+
+ }
+}
+
+
+//---------------------------------------------------------------------------------
+void consolePrintChar(char c) {
+//---------------------------------------------------------------------------------
+
+ if(col >= CONSOLE_WIDTH) {
+ col = 0;
+
+ newRow();
+ }
+
+ switch(c) {
+ /*
+ The only special characters we will handle are tab (\t), carriage return (\r) & line feed (\n).
+ Carriage return & line feed will function the same: go to next line and put cursor at the beginning.
+ For everything else, use VT sequences.
+
+ Reason: VT sequences are more specific to the task of cursor placement.
+ The special escape sequences \b \f & \v are archaic and non-portable.
+ */
+ case 9:
+ col += TAB_SIZE;
+ break;
+ case 10:
+ case 13:
+ newRow();
+ col = 0;
+ break;
+ default:
+ fontMap[col + row * CONSOLE_WIDTH] = fontPal | (u16)(c + fontOffset - fontStart);
+ ++col;
+ break;
+ }
+}
+
+//---------------------------------------------------------------------------------
+void consoleClear(void) {
+//---------------------------------------------------------------------------------
+ iprintf("\x1b[2J");
+}
+
+