summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/libnds/source/common
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/libnds/source/common')
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/common/biosCalls.S333
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/common/card.c393
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c202
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/common/interruptDispatcher.S117
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/common/interrupts.c145
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;
-}
-