diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/libnds/source/common')
5 files changed, 0 insertions, 1190 deletions
diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/common/biosCalls.S b/c/src/lib/libbsp/arm/nds/libnds/source/common/biosCalls.S deleted file mode 100644 index 94e0bc908b..0000000000 --- a/c/src/lib/libbsp/arm/nds/libnds/source/common/biosCalls.S +++ /dev/null @@ -1,333 +0,0 @@ -/*--------------------------------------------------------------------------------- - 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. - ----------------------------------------------------------------------------------*/ - - .text - .align 4 - - .thumb - -@--------------------------------------------------------------------------------- - .global swiSoftReset - .thumb_func -@--------------------------------------------------------------------------------- -swiSoftReset: -@--------------------------------------------------------------------------------- - swi 0x00 - bx lr - - -@--------------------------------------------------------------------------------- - .global swiDelay - .thumb_func -@--------------------------------------------------------------------------------- -swiDelay: -@--------------------------------------------------------------------------------- - swi 0x03 - bx lr - -@--------------------------------------------------------------------------------- - .global swiIntrWait - .thumb_func -@--------------------------------------------------------------------------------- -swiIntrWait: -@--------------------------------------------------------------------------------- - swi 0x04 - bx lr - - -@--------------------------------------------------------------------------------- - .global swiWaitForVBlank - .thumb_func -@--------------------------------------------------------------------------------- -swiWaitForVBlank: -@--------------------------------------------------------------------------------- - swi 0x05 - bx lr - -@--------------------------------------------------------------------------------- - .global swiSleep - .thumb_func -@--------------------------------------------------------------------------------- -swiSleep: -@--------------------------------------------------------------------------------- - swi 0x07 - bx lr - -@--------------------------------------------------------------------------------- - .global swiChangeSoundBias - .thumb_func -@--------------------------------------------------------------------------------- -swiChangeSoundBias: -@--------------------------------------------------------------------------------- - swi 0x08 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDivide - .thumb_func -@--------------------------------------------------------------------------------- -swiDivide: -@--------------------------------------------------------------------------------- - swi 0x09 - bx lr - -@--------------------------------------------------------------------------------- - .global swiRemainder - .thumb_func -@--------------------------------------------------------------------------------- -swiRemainder: -@--------------------------------------------------------------------------------- - swi 0x09 - mov r0, r1 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDivMod - .thumb_func -@--------------------------------------------------------------------------------- -swiDivMod: -@--------------------------------------------------------------------------------- - push {r2, r3} - swi 0x09 - pop {r2, r3} - str r0, [r2] - str r1, [r3] - bx lr - -@--------------------------------------------------------------------------------- - .global swiCopy - .thumb_func -@--------------------------------------------------------------------------------- -swiCopy: -@--------------------------------------------------------------------------------- - swi 0x0B - bx lr - -@--------------------------------------------------------------------------------- - .global swiFastCopy - .thumb_func -@--------------------------------------------------------------------------------- -swiFastCopy: -@--------------------------------------------------------------------------------- - swi 0x0C - bx lr - -@--------------------------------------------------------------------------------- - .global swiSqrt - .thumb_func -@--------------------------------------------------------------------------------- -swiSqrt: -@--------------------------------------------------------------------------------- - swi 0x0D - bx lr - -@--------------------------------------------------------------------------------- - .global swiCRC16 - .thumb_func -@--------------------------------------------------------------------------------- -swiCRC16: -@--------------------------------------------------------------------------------- - swi 0x0E - bx lr - -@--------------------------------------------------------------------------------- - .global swiIsDebugger - .thumb_func -@--------------------------------------------------------------------------------- -swiIsDebugger: -@--------------------------------------------------------------------------------- - swi 0x0F - bx lr - -@--------------------------------------------------------------------------------- - .global swiUnpackBits - .thumb_func -@--------------------------------------------------------------------------------- -swiUnpackBits: -@--------------------------------------------------------------------------------- - swi 0x10 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecompressLZSSWram - .thumb_func -@--------------------------------------------------------------------------------- -swiDecompressLZSSWram: -@--------------------------------------------------------------------------------- - swi 0x11 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecompressLZSSVram - .thumb_func -@--------------------------------------------------------------------------------- -swiDecompressLZSSVram: -@--------------------------------------------------------------------------------- - swi 0x12 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecompressHuffman - .thumb_func -@--------------------------------------------------------------------------------- -swiDecompressHuffman: -@--------------------------------------------------------------------------------- - swi 0x13 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecompressRLEWram - .thumb_func -@--------------------------------------------------------------------------------- -swiDecompressRLEWram: -@--------------------------------------------------------------------------------- - swi 0x14 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecompressRLEVram - .thumb_func -@--------------------------------------------------------------------------------- -swiDecompressRLEVram: -@--------------------------------------------------------------------------------- - swi 0x15 - bx lr - -@--------------------------------------------------------------------------------- -@ ARM7 only bios calls -@--------------------------------------------------------------------------------- -#ifdef ARM7 - -@--------------------------------------------------------------------------------- - .global swiHalt - .thumb_func -@--------------------------------------------------------------------------------- -swiHalt: -@--------------------------------------------------------------------------------- - swi 0x06 - bx lr - -@--------------------------------------------------------------------------------- - .global swiGetSineTable - .thumb_func -@--------------------------------------------------------------------------------- -swiGetSineTable: -@--------------------------------------------------------------------------------- - swi 0x1A - bx lr - -@--------------------------------------------------------------------------------- - .global swiGetPitchTable - .thumb_func -@--------------------------------------------------------------------------------- -swiGetPitchTable: -@--------------------------------------------------------------------------------- - swi 0x1B - bx lr - -@--------------------------------------------------------------------------------- - .global swiGetVolumeTable - .thumb_func -@--------------------------------------------------------------------------------- -swiGetVolumeTable: -@--------------------------------------------------------------------------------- - swi 0x1C - bx lr - - -@ ARM7 function, but no real point in exposing it, at least not -@ without adding a way to get the 3 arguments back into C -@ .global swiGetFptrs -@ .thumb_func -@swiGetFptrs: -@ swi 0x1D -@ bx lr - - -@--------------------------------------------------------------------------------- - .global swiSwitchToGBAMode - .thumb_func -@--------------------------------------------------------------------------------- -swiSwitchToGBAMode: -@--------------------------------------------------------------------------------- - mov r0, #0x40 - swi 0x1F -@ does not return, of course - -@--------------------------------------------------------------------------------- - .global swiSetHaltCR - .thumb_func -@--------------------------------------------------------------------------------- -swiSetHaltCR: -@--------------------------------------------------------------------------------- - mov r2, r0 - swi 0x1F - bx lr - -#endif // ARM7 - -@--------------------------------------------------------------------------------- -@ ARM9 only bios calls -@--------------------------------------------------------------------------------- -#ifdef ARM9 - -@--------------------------------------------------------------------------------- - .global swiWaitForIRQ - .thumb_func -@--------------------------------------------------------------------------------- -swiWaitForIRQ: -@--------------------------------------------------------------------------------- - swi 0x06 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecodeDelta8 - .thumb_func -@--------------------------------------------------------------------------------- -swiDecodeDelta8: -@--------------------------------------------------------------------------------- - swi 0x16 - bx lr - -@--------------------------------------------------------------------------------- - .global swiDecodeDelta16 - .thumb_func -@--------------------------------------------------------------------------------- -swiDecodeDelta16: -@--------------------------------------------------------------------------------- - swi 0x18 - bx lr - -@--------------------------------------------------------------------------------- - .global swiSetHaltCR - .thumb_func -@--------------------------------------------------------------------------------- -swiSetHaltCR: -@--------------------------------------------------------------------------------- - swi 0x1F - bx lr - -#endif // ARM9 - diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/common/card.c b/c/src/lib/libbsp/arm/nds/libnds/source/common/card.c deleted file mode 100644 index 523bb6ca68..0000000000 --- a/c/src/lib/libbsp/arm/nds/libnds/source/common/card.c +++ /dev/null @@ -1,393 +0,0 @@ -/*--------------------------------------------------------------------------------- - 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/card.h" -#include "nds/dma.h" -#include "nds/memory.h" - - -//--------------------------------------------------------------------------------- -void cardWriteCommand(const uint8 * command) { -//--------------------------------------------------------------------------------- - int index; - - CARD_CR1H = CARD_CR1_ENABLE | CARD_CR1_IRQ; - - for (index = 0; index < 8; index++) { - CARD_COMMAND[7-index] = command[index]; - } -} - - -//--------------------------------------------------------------------------------- -void cardPolledTransfer(uint32 flags, uint32 * destination, uint32 length, const uint8 * command) { -//--------------------------------------------------------------------------------- - u32 data; - cardWriteCommand(command); - CARD_CR2 = flags; - uint32 * target = destination + length; - do { - // Read data if available - if (CARD_CR2 & CARD_DATA_READY) { - data=CARD_DATA_RD; - if (destination < target) - *destination = data; - destination++; - } - } while (CARD_CR2 & CARD_BUSY); -} - - -//--------------------------------------------------------------------------------- -void cardStartTransfer(const uint8 * command, uint32 * destination, int channel, uint32 flags) { -//--------------------------------------------------------------------------------- - cardWriteCommand(command); - - // Set up a DMA channel to transfer a word every time the card makes one - DMA_SRC(channel) = (uint32)&CARD_DATA_RD; - DMA_DEST(channel) = (uint32)destination; - DMA_CR(channel) = DMA_ENABLE | DMA_START_CARD | DMA_32_BIT | DMA_REPEAT | DMA_SRC_FIX | 0x0001; - - CARD_CR2 = flags; -} - - -//--------------------------------------------------------------------------------- -uint32 cardWriteAndRead(const uint8 * command, uint32 flags) { -//--------------------------------------------------------------------------------- - cardWriteCommand(command); - CARD_CR2 = flags | CARD_ACTIVATE | CARD_nRESET | 0x07000000; - while (!(CARD_CR2 & CARD_DATA_READY)) ; - return CARD_DATA_RD; -} - - -//--------------------------------------------------------------------------------- -void cardRead00(uint32 address, uint32 * destination, uint32 length, uint32 flags) { -//---------------------------------------------------------------------------------f - uint8 command[8]; - command[7] = 0; - command[6] = (address >> 24) & 0xff; - command[5] = (address >> 16) & 0xff; - command[4] = (address >> 8) & 0xff; - command[3] = address & 0xff; - command[2] = 0; - command[1] = 0; - command[0] = 0; - cardPolledTransfer(flags, destination, length, command); -} - - -//--------------------------------------------------------------------------------- -void cardReadHeader(uint8 * header) { -//--------------------------------------------------------------------------------- - cardRead00(0, (uint32 *)header, 512, 0xA93F1FFF); -} - - -//--------------------------------------------------------------------------------- -int cardReadID(uint32 flags) { -//--------------------------------------------------------------------------------- - uint8 command[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90}; - return cardWriteAndRead(command, flags); -} - - -//--------------------------------------------------------------------------------- -static inline void EepromWaitBusy(void) { -//--------------------------------------------------------------------------------- - while (CARD_CR1 & /*BUSY*/0x80); -} - -//--------------------------------------------------------------------------------- -uint8 cardEepromReadID(uint8 i) { -//--------------------------------------------------------------------------------- - return cardEepromCommand(/*READID*/0xAB, i&1); -} - -//--------------------------------------------------------------------------------- -uint8 cardEepromCommand(uint8 command, uint32 address) { -//--------------------------------------------------------------------------------- - uint8 retval; - int k; - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - - CARD_CR1 = 0xFFFF; - CARD_EEPDATA = command; - - EepromWaitBusy(); - - CARD_EEPDATA = (address >> 16) & 0xFF; - EepromWaitBusy(); - - CARD_EEPDATA = (address >> 8) & 0xFF; - EepromWaitBusy(); - - CARD_EEPDATA = (address) & 0xFF; - EepromWaitBusy(); - - for(k=0;k<256;k++) - { - retval = CARD_EEPDATA; - if(retval!=0xFF) - break; - EepromWaitBusy(); - } - - CARD_CR1 = /*MODE*/0x40; - return retval; -} - -//--------------------------------------------------------------------------------- -int cardEepromGetType(void) -//--------------------------------------------------------------------------------- -{ - uint8 c00; - uint8 c05; - uint8 c9f; - uint8 c03; - -#ifdef ARM9 - sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9); -#endif - - (void) c03; /* avoid set but not used warning */ - c03=cardEepromCommand(0x03,0); - c05=cardEepromCommand(0x05,0); - c9f=cardEepromCommand(0x9f,0); - c00=cardEepromCommand(0x00,0); - - if((c00==0x00) && (c9f==0x00)) return 0; // PassMe? - if((c00==0xff) && (c05==0xff) && (c9f==0xff))return -1; - - if((c00==0xff) && (c05 & 0xFD) == 0xF0 && (c9f==0xff))return 1; - if((c00==0xff) && (c05 & 0xFD) == 0x00 && (c9f==0xff))return 2; - if((c00==0xff) && (c05 & 0xFD) == 0x00 && (c9f==0x00))return 3; - if((c00==0xff) && (c05 & 0xFD) == 0x00 && (c9f==0x12))return 3; // NEW TYPE 3 - if((c00==0xff) && (c05 & 0xFD) == 0x00 && (c9f==0x13))return 3; // NEW TYPE 3+ 4Mbit - if((c00==0xff) && (c05 & 0xFD) == 0x00 && (c9f==0x14))return 3; // NEW TYPE 3++ 8Mbit MK4-FLASH Memory - - return 0; -} - -//--------------------------------------------------------------------------------- -uint32 cardEepromGetSize() { -//--------------------------------------------------------------------------------- - - int type = cardEepromGetType(); - - if(type == -1) - return 0; - if(type == 0) - return 8192; - if(type == 1) - return 512; - if(type == 2) { - static const uint32 offset0 = (8*1024-1); // 8KB - static const uint32 offset1 = (2*8*1024-1); // 16KB - u8 buf1; // +0k data read -> write - u8 buf2; // +8k data read -> read - u8 buf3; // +0k ~data write - u8 buf4; // +8k data new comp buf2 - cardReadEeprom(offset0,&buf1,1,type); - cardReadEeprom(offset1,&buf2,1,type); - buf3=~buf1; - cardWriteEeprom(offset0,&buf3,1,type); - cardReadEeprom (offset1,&buf4,1,type); - cardWriteEeprom(offset0,&buf1,1,type); - if(buf4!=buf2) // +8k - return 8*1024; // 8KB(64kbit) - else - return 64*1024; // 64KB(512kbit) - } - if(type == 3) { - uint8 c9f; - c9f=cardEepromCommand(0x9f,0); - - if(c9f==0x14) - return 1024*1024; // NEW TYPE 3++ 8Mbit(1024KByte) - - if(c9f==0x13) - return 512*1024; // NEW TYPE 3+ 4Mbit(512KByte) - - return 256*1024; // TYPE 3 2Mbit(256KByte) - } - - return 0; -} - - -//--------------------------------------------------------------------------------- -void cardReadEeprom(uint32 address, uint8 *data, uint32 length, uint32 addrtype) { -//--------------------------------------------------------------------------------- - - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - CARD_EEPDATA = 0x03 | ((addrtype == 1) ? address>>8<<3 : 0); - EepromWaitBusy(); - - if (addrtype == 3) { - CARD_EEPDATA = (address >> 16) & 0xFF; - EepromWaitBusy(); - } - - if (addrtype >= 2) { - CARD_EEPDATA = (address >> 8) & 0xFF; - EepromWaitBusy(); - } - - - CARD_EEPDATA = (address) & 0xFF; - EepromWaitBusy(); - - while (length > 0) { - CARD_EEPDATA = 0; - EepromWaitBusy(); - *data++ = CARD_EEPDATA; - length--; - } - - EepromWaitBusy(); - CARD_CR1 = /*MODE*/0x40; -} - - -//--------------------------------------------------------------------------------- -void cardWriteEeprom(uint32 address, uint8 *data, uint32 length, uint32 addrtype) { -//--------------------------------------------------------------------------------- - - uint32 address_end = address + length; - int i; - int maxblocks = 32; - if(addrtype == 1) maxblocks = 16; - if(addrtype == 2) maxblocks = 32; - if(addrtype == 3) maxblocks = 256; - - while (address < address_end) { - // set WEL (Write Enable Latch) - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - CARD_EEPDATA = 0x06; EepromWaitBusy(); - CARD_CR1 = /*MODE*/0x40; - - // program maximum of 32 bytes - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - - if(addrtype == 1) { - // WRITE COMMAND 0x02 + A8 << 3 - CARD_EEPDATA = 0x02 | (address & BIT(8)) >> (8-3) ; - EepromWaitBusy(); - CARD_EEPDATA = address & 0xFF; - EepromWaitBusy(); - } - else if(addrtype == 2) { - CARD_EEPDATA = 0x02; - EepromWaitBusy(); - CARD_EEPDATA = address >> 8; - EepromWaitBusy(); - CARD_EEPDATA = address & 0xFF; - EepromWaitBusy(); - } - else if(addrtype == 3) { - CARD_EEPDATA = 0x02; - EepromWaitBusy(); - CARD_EEPDATA = (address >> 16) & 0xFF; - EepromWaitBusy(); - CARD_EEPDATA = (address >> 8) & 0xFF; - EepromWaitBusy(); - CARD_EEPDATA = address & 0xFF; - EepromWaitBusy(); - } - - for (i=0; address<address_end && i<maxblocks; i++, address++) { - CARD_EEPDATA = *data++; - EepromWaitBusy(); - } - CARD_CR1 = /*MODE*/0x40; - - // wait programming to finish - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - CARD_EEPDATA = 0x05; EepromWaitBusy(); - do { CARD_EEPDATA = 0; EepromWaitBusy(); } while (CARD_EEPDATA & 0x01); // WIP (Write In Progress) ? - EepromWaitBusy(); - CARD_CR1 = /*MODE*/0x40; - } -} - - -// Chip Erase : clear FLASH MEMORY (TYPE 3 ONLY) -//--------------------------------------------------------------------------------- -void cardEepromChipErase(void) { -//--------------------------------------------------------------------------------- - int sz; - sz=cardEepromGetSize(); - cardEepromSectorErase(0x00000); - cardEepromSectorErase(0x10000); - cardEepromSectorErase(0x20000); - cardEepromSectorErase(0x30000); - if(sz==512*1024) - { - cardEepromSectorErase(0x40000); - cardEepromSectorErase(0x50000); - cardEepromSectorErase(0x60000); - cardEepromSectorErase(0x70000); - } -} - -// COMMAND Sec.erase 0xD8 -void cardEepromSectorErase(uint32 address) -{ - // set WEL (Write Enable Latch) - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - CARD_EEPDATA = 0x06; - EepromWaitBusy(); - - CARD_CR1 = /*MODE*/0x40; - - // SectorErase 0xD8 - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - CARD_EEPDATA = 0xD8; - EepromWaitBusy(); - CARD_EEPDATA = (address >> 16) & 0xFF; - EepromWaitBusy(); - CARD_EEPDATA = (address >> 8) & 0xFF; - EepromWaitBusy(); - CARD_EEPDATA = address & 0xFF; - EepromWaitBusy(); - - CARD_CR1 = /*MODE*/0x40; - - // wait erase to finish - CARD_CR1 = /*E*/0x8000 | /*SEL*/0x2000 | /*MODE*/0x40; - CARD_EEPDATA = 0x05; - EepromWaitBusy(); - - do - { - CARD_EEPDATA = 0; - EepromWaitBusy(); - } while (CARD_EEPDATA & 0x01); // WIP (Write In Progress) ? - CARD_CR1 = /*MODE*/0x40; -} - - diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c b/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c deleted file mode 100644 index 7f174e4c84..0000000000 --- a/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c +++ /dev/null @@ -1,202 +0,0 @@ -/*--------------------------------------------------------------------------------- - access object in a GBFS file - - Copyright 2002-2005 Damian Yerrick - - Additional code Dave Murphy - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - ----------------------------------------------------------------------------------*/ - - -/*--------------------------------------------------------------------------------- - This code assumes a LITTLE ENDIAN target. It'll need a boatload - of itohs and itohl calls if converted to run on Sega Genesis. It - also assumes that the target uses 16-bit short and 32-bit longs. ----------------------------------------------------------------------------------*/ - -#include <stdlib.h> -#include <string.h> -#include <nds/jtypes.h> -#include "gbfs.h" - -/*--------------------------------------------------------------------------------- - change this to the end of your ROM, - or to 0x02040000 for gba multiboot - or to 0x24000000 for nds main ram ----------------------------------------------------------------------------------*/ - -static const u32 * GBFS_1ST_SEARCH_LIMIT = (const u32 *)0x02400000; -static const u32 * GBFS_2ND_SEARCH_START = (const u32 *)0x08000000; -static const u32 * GBFS_2ND_SEARCH_LIMIT = (const u32 *)0x0a000000; -/*--------------------------------------------------------------------------------- - a power of two, less than or equal to the argument passed to - padbin. Increasing the stride makes find_first_gbfs_file() - faster at the cost of a slightly larger binary. ----------------------------------------------------------------------------------*/ -static int GBFS_STRIDE = 256; - -/*--------------------------------------------------------------------------------- - Set the search limits and stride for searching ----------------------------------------------------------------------------------*/ -void gbfs_search_range( - u32 gbfs_1st_limit, - u32 gbfs_2nd_start, u32 gbfs_2nd_limit, - u32 gbfs_stride -) { -//--------------------------------------------------------------------------------- - if ( 0 != gbfs_1st_limit ) GBFS_1ST_SEARCH_LIMIT = (u32 *)gbfs_1st_limit; - if ( 0 != gbfs_2nd_limit ) GBFS_2ND_SEARCH_LIMIT = (u32 *)gbfs_2nd_limit; - if ( 0 != gbfs_2nd_start ) GBFS_2ND_SEARCH_START = (u32 *)gbfs_2nd_start; - if ( 0 != gbfs_stride ) GBFS_STRIDE = gbfs_stride; - -} - -//--------------------------------------------------------------------------------- -const GBFS_FILE * find_first_gbfs_file(const void *start) { -//--------------------------------------------------------------------------------- - /* align the pointer */ - const u32 *here = (const u32 *) - ((unsigned long)start & (-GBFS_STRIDE)); - const char rest_of_magic[] = "ightGBFS\r\n\x1a\n"; - - /* Linear-search first in multiboot space. */ - while(here < GBFS_1ST_SEARCH_LIMIT) - { - /* We have to keep the magic code in two pieces; otherwise, - this function may find itself and think it's a GBFS file. - This obviously won't work if your compiler stores this - numeric literal just before the literal string, but Devkit - Advance R4 and R5 seem to keep numeric constant pools - separate enough from string pools for this to work. - */ - if(*here == 0x456e6950) { /* ASCII code for little endian "PinE" */ - /* We've matched the first four bytes. - If the rest of the magic matches, then we've found a file. */ - if(!memcmp(here + 1, rest_of_magic, 12)) - return (const GBFS_FILE *)here; - } - here += GBFS_STRIDE / sizeof(here); - } - - /* Now search in ROM space. */ - if(here < GBFS_2ND_SEARCH_START) - here = GBFS_2ND_SEARCH_START; - while(here < GBFS_2ND_SEARCH_LIMIT) { - /* Search loop same as above. */ - if(*here == 0x456e6950) { /* ASCII code for little endian "PinE" */ - if(!memcmp(here + 1, rest_of_magic, 12)) - return (const GBFS_FILE *)here; - } - here += GBFS_STRIDE / sizeof(*here); - } - return 0; -} - - -//--------------------------------------------------------------------------------- -const void *skip_gbfs_file(const GBFS_FILE *file) { -//--------------------------------------------------------------------------------- - return ((char *)file + file->total_len); -} - - -//--------------------------------------------------------------------------------- -static int namecmp(const void *a, const void *b) { -//--------------------------------------------------------------------------------- - return memcmp(a, b, 24); -} - - -//--------------------------------------------------------------------------------- -const void *gbfs_get_obj( const GBFS_FILE *file, - const char *name, - u32 *len) { -//--------------------------------------------------------------------------------- - char key[24] = {0}; - - const GBFS_ENTRY *dirbase = (const GBFS_ENTRY *)((const char *)file + file->dir_off); - size_t n_entries = file->dir_nmemb; - const GBFS_ENTRY *here; - - strncpy(key, name, 24); - - here = bsearch( key, dirbase, - n_entries, sizeof(GBFS_ENTRY), - namecmp); - if(!here) - return NULL; - - if(len) - *len = here->len; - return (char *)file + here->data_offset; -} - - -//--------------------------------------------------------------------------------- -const void *gbfs_get_nth_obj( const GBFS_FILE *file, - size_t n, - char *name, - u32 *len) -//--------------------------------------------------------------------------------- -{ - const GBFS_ENTRY *dirbase = (const GBFS_ENTRY *)((const char *)file + file->dir_off); - size_t n_entries = file->dir_nmemb; - const GBFS_ENTRY *here = dirbase + n; - - if(n >= n_entries) - return NULL; - - if(name) { - strncpy(name, here->name, 24); - name[24] = 0; - } - - if(len) - *len = here->len; - - return (char *)file + here->data_offset; -} - - -//--------------------------------------------------------------------------------- -void *gbfs_copy_obj( void *dst, - const GBFS_FILE *file, - const char *name) { -//--------------------------------------------------------------------------------- - u32 len; - const void *src = gbfs_get_obj(file, name, &len); - - if(!src) - return NULL; - - memcpy(dst, src, len); - return dst; -} - - -//--------------------------------------------------------------------------------- -size_t gbfs_count_objs(const GBFS_FILE *file) { -//--------------------------------------------------------------------------------- - return file ? file->dir_nmemb : 0; -} - diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/common/interruptDispatcher.S b/c/src/lib/libbsp/arm/nds/libnds/source/common/interruptDispatcher.S deleted file mode 100644 index 927fa74e65..0000000000 --- a/c/src/lib/libbsp/arm/nds/libnds/source/common/interruptDispatcher.S +++ /dev/null @@ -1,117 +0,0 @@ -/*--------------------------------------------------------------------------------- - Copyright (C) 2005 - 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. - ----------------------------------------------------------------------------------*/ - -#ifdef ARM7 - .text -#endif - -#ifdef ARM9 - .section .bsp_fast_text,"ax",%progbits -#endif - - .extern irqTable - .code 32 - - .global IntrMain -@--------------------------------------------------------------------------------- -IntrMain: -@--------------------------------------------------------------------------------- - mov r3, #0x4000000 @ REG_BASE - - ldr r1, [r3, #0x208] @ r1 = IME - str r3, [r3, #0x208] @ disable IME - mrs r0, spsr - stmfd sp!, {r0-r1,r3,lr} @ {spsr, IME, REG_BASE, lr_irq} - - ldr r1, [r3,#0x210] @ REG_IE - ldr r2, [r3,#0x214] @ REG_IF - and r1,r1,r2 - - ldr r0,=__irq_flags @ defined by linker script - - ldr r2,[r0] - orr r2,r2,r1 - str r2,[r0] - - ldr r2,=irqTable -@--------------------------------------------------------------------------------- -findIRQ: -@--------------------------------------------------------------------------------- - ldr r0, [r2, #4] - cmp r0,#0 - beq no_handler - ands r0, r0, r1 - bne jump_intr - add r2, r2, #8 - b findIRQ - -@--------------------------------------------------------------------------------- -no_handler: -@--------------------------------------------------------------------------------- - str r1, [r3, #0x0214] @ IF Clear - ldmfd sp!, {r0-r1,r3,lr} @ {spsr, IME, REG_BASE, lr_irq} - str r1, [r3, #0x208] @ restore REG_IME - mov pc,lr - -@--------------------------------------------------------------------------------- -jump_intr: -@--------------------------------------------------------------------------------- - ldr r1, [r2] @ user IRQ handler address - cmp r1, #0 - bne got_handler - mov r1, r0 - b no_handler -@--------------------------------------------------------------------------------- -got_handler: -@--------------------------------------------------------------------------------- - - mrs r2, cpsr - bic r2, r2, #0xdf @ \__ - orr r2, r2, #0x1f @ / --> Enable IRQ & FIQ. Set CPU mode to System. - msr cpsr,r2 - - str r0, [r3, #0x0214] @ IF Clear - - push {lr} - adr lr, IntrRet - bx r1 - -@--------------------------------------------------------------------------------- -IntrRet: -@--------------------------------------------------------------------------------- - mov r3, #0x4000000 @ REG_BASE - str r3, [r3, #0x208] @ disable IME - pop {lr} - - mrs r3, cpsr - bic r3, r3, #0xdf @ \__ - orr r3, r3, #0x92 @ / --> Disable IRQ. Enable FIQ. Set CPU mode to IRQ. - msr cpsr, r3 - - ldmfd sp!, {r0-r1,r3,lr} @ {spsr, IME, REG_BASE, lr_irq} - msr spsr, r0 @ restore spsr - str r1, [r3, #0x208] @ restore REG_IME - mov pc,lr - - .pool - .end diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/common/interrupts.c b/c/src/lib/libbsp/arm/nds/libnds/source/common/interrupts.c deleted file mode 100644 index 7e42ebf942..0000000000 --- a/c/src/lib/libbsp/arm/nds/libnds/source/common/interrupts.c +++ /dev/null @@ -1,145 +0,0 @@ -/*--------------------------------------------------------------------------------- - Copyright (C) 2005 - 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/interrupts.h> -#include <nds/system.h> - -void IntrMain(void); // Prototype for assembly interrupt dispatcher - -static void irqDummy(void) {} - - -#ifdef ARM9 -#define INT_TABLE_SECTION __attribute__((section(".bsp_fast_text"))) -#else -#define INT_TABLE_SECTION -#endif - -struct IntTable irqTable[MAX_INTERRUPTS] INT_TABLE_SECTION; - -//--------------------------------------------------------------------------------- -void irqSet(int mask, IntFn handler) { -//--------------------------------------------------------------------------------- - if (!mask) return; - - int i; - - for (i=0;i<MAX_INTERRUPTS;i++) - if (!irqTable[i].mask || irqTable[i].mask == mask) break; - - if ( i == MAX_INTERRUPTS ) return; - - irqTable[i].handler = handler; - irqTable[i].mask = mask; - - if(mask & IRQ_VBLANK) - REG_DISPSTAT |= DISP_VBLANK_IRQ ; - if(mask & IRQ_HBLANK) - REG_DISPSTAT |= DISP_HBLANK_IRQ ; - - REG_IE |= mask; -} - -//--------------------------------------------------------------------------------- -void irqInit() { -//--------------------------------------------------------------------------------- - int i; - - // Set all interrupts to dummy functions. - for(i = 0; i < MAX_INTERRUPTS; i ++) - { - irqTable[i].handler = irqDummy; - irqTable[i].mask = 0; - } - - IRQ_HANDLER = IntrMain; - - REG_IE = 0; // disable all interrupts - REG_IF = IRQ_ALL; // clear all pending interrupts - REG_IME = 1; // enable global interrupt - -} - - -//--------------------------------------------------------------------------------- -void irqClear(int mask) { -//--------------------------------------------------------------------------------- - int i = 0; - - for (i=0;i<MAX_INTERRUPTS;i++) - if (irqTable[i].mask == mask) break; - - if ( i == MAX_INTERRUPTS ) return; - - irqTable[i].handler = irqDummy; - - if (mask & IRQ_VBLANK) - REG_DISPSTAT &= ~DISP_VBLANK_IRQ ; - if (mask & IRQ_HBLANK) - REG_DISPSTAT &= ~DISP_HBLANK_IRQ ; - if (mask & IRQ_VCOUNT) - REG_DISPSTAT &= ~DISP_YTRIGGER_IRQ; - - REG_IE &= ~mask; -} - - -//--------------------------------------------------------------------------------- -void irqInitHandler(IntFn handler) { -//--------------------------------------------------------------------------------- - REG_IME = 0; - REG_IF = ~0; - REG_IE = 0; - - IRQ_HANDLER = handler; - - REG_IME = 1; -} - -//--------------------------------------------------------------------------------- -void irqEnable(uint32 irq) { -//--------------------------------------------------------------------------------- - if (irq & IRQ_VBLANK) - REG_DISPSTAT |= DISP_VBLANK_IRQ ; - if (irq & IRQ_HBLANK) - REG_DISPSTAT |= DISP_HBLANK_IRQ ; - if (irq & IRQ_VCOUNT) - REG_DISPSTAT |= DISP_YTRIGGER_IRQ; - - REG_IE |= irq; - REG_IME = 1; -} - -//--------------------------------------------------------------------------------- -void irqDisable(uint32 irq) { -//--------------------------------------------------------------------------------- - if (irq & IRQ_VBLANK) - REG_DISPSTAT &= ~DISP_VBLANK_IRQ ; - if (irq & IRQ_HBLANK) - REG_DISPSTAT &= ~DISP_HBLANK_IRQ ; - if (irq & IRQ_VCOUNT) - REG_DISPSTAT &= ~DISP_YTRIGGER_IRQ; - - REG_IE &= ~irq; -} - |