summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/coproc
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/coproc')
-rw-r--r--c/src/lib/libbsp/arm/nds/coproc/coproc.S112
-rw-r--r--c/src/lib/libbsp/arm/nds/coproc/coproc.c207
-rw-r--r--c/src/lib/libbsp/arm/nds/coproc/coproc.ld195
3 files changed, 0 insertions, 514 deletions
diff --git a/c/src/lib/libbsp/arm/nds/coproc/coproc.S b/c/src/lib/libbsp/arm/nds/coproc/coproc.S
deleted file mode 100644
index f1bc2bac61..0000000000
--- a/c/src/lib/libbsp/arm/nds/coproc/coproc.S
+++ /dev/null
@@ -1,112 +0,0 @@
-@---------------------------------------------------------------------------------
- .section ".init"
- .global _start
- .global _init
-@---------------------------------------------------------------------------------
- .align 4
- .arm
-@---------------------------------------------------------------------------------
-_start:
-@---------------------------------------------------------------------------------
- mov r0, #0x04000000 @ IME = 0;
- str r0, [r0, #0x208]
-
- mov r0, #0x12 @ Switch to IRQ Mode
- msr cpsr, r0
- ldr sp, =__sp_irq @ Set IRQ stack
-
- mov r0, #0x13 @ Switch to SVC Mode
- msr cpsr, r0
- ldr sp, =__sp_svc @ Set SVC stack
-
- mov r0, #0x1F @ Switch to System Mode
- msr cpsr, r0
- ldr sp, =__sp_usr @ Set user stack
-
- ldr r0, =__bss_start @ Clear BSS section to 0x00
- ldr r1, =__bss_end
- sub r1, r1, r0
- bl ClearMem
-
- ldr r3, =__libc_init_array @ global constructors
- bl _call_via_r3
-
- mov r0, #0 @ int argc
- mov r1, #0 @ char *argv[]
- ldr r3, =main
- bl _call_via_r3 @ jump to user code
-
- @ If the user ever returns, return to flash cartridge
- mov r0, #0x08000000
- bx r0
-
-@---------------------------------------------------------------------------------
-@ Clear memory to 0x00 if length != 0
-@ r0 = Start Address
-@ r1 = Length
-@---------------------------------------------------------------------------------
-ClearMem:
-@---------------------------------------------------------------------------------
- mov r2, #3 @ Round down to nearest word boundary
- add r1, r1, r2 @ Shouldn't be needed
- bics r1, r1, r2 @ Clear 2 LSB (and set Z)
- bxeq lr @ Quit if copy size is 0
-
- mov r2, #0
-ClrLoop:
- stmia r0!, {r2}
- subs r1, r1, #4
- bne ClrLoop
- bx lr
-
-@---------------------------------------------------------------------------------
-@ Copy memory if length != 0
-@ r1 = Source Address
-@ r2 = Dest Address
-@ r4 = Dest Address + Length
-@---------------------------------------------------------------------------------
-CopyMemCheck:
-@---------------------------------------------------------------------------------
- sub r3, r4, r2 @ Is there any data to copy?
-@---------------------------------------------------------------------------------
-@ Copy memory
-@ r1 = Source Address
-@ r2 = Dest Address
-@ r3 = Length
-@---------------------------------------------------------------------------------
-CopyMem:
-@---------------------------------------------------------------------------------
- mov r0, #3 @ These commands are used in cases where
- add r3, r3, r0 @ the length is not a multiple of 4,
- bics r3, r3, r0 @ even though it should be.
- bxeq lr @ Length is zero, so exit
-CIDLoop:
- ldmia r1!, {r0}
- stmia r2!, {r0}
- subs r3, r3, #4
- bne CIDLoop
- bx lr
-
-_init:
- bx lr
-
-@---------------------------------------------------------------------------------
- .align
-@ .pool
-@ .end
-@---------------------------------------------------------------------------------
-
-@---------------------------------------------------------------------------------
- .section ".fini"
- .global _fini
-@---------------------------------------------------------------------------------
- .align 4
- .arm
-@---------------------------------------------------------------------------------
-_fini:
- bx lr
-@---------------------------------------------------------------------------------
- .align
- .pool
- .end
-@---------------------------------------------------------------------------------
diff --git a/c/src/lib/libbsp/arm/nds/coproc/coproc.c b/c/src/lib/libbsp/arm/nds/coproc/coproc.c
deleted file mode 100644
index 611bd31971..0000000000
--- a/c/src/lib/libbsp/arm/nds/coproc/coproc.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*---------------------------------------------------------------------------------
-
- default ARM7 core
-
- 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.h>
-#include "../include/my_ipc.h"
-
-#ifdef ENABLE_WIFI
-#include <dswifi7.h>
-#endif
-
-//---------------------------------------------------------------------------------
-void startSound(int sampleRate, const void* data, u32 bytes, u8 channel, u8 vol, u8 pan, u8 format) {
-//---------------------------------------------------------------------------------
- SCHANNEL_TIMER(channel) = SOUND_FREQ(sampleRate);
- SCHANNEL_SOURCE(channel) = (u32)data;
- SCHANNEL_LENGTH(channel) = bytes >> 2 ;
- SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==1?SOUND_8BIT:SOUND_16BIT);
-}
-
-//---------------------------------------------------------------------------------
-s32 getFreeSoundChannel() {
-//---------------------------------------------------------------------------------
- int i;
- for (i=0; i<16; i++) {
- if ( (SCHANNEL_CR(i) & SCHANNEL_ENABLE) == 0 ) return i;
- }
- return -1;
-}
-
-
-touchPosition first,tempPos;
-
-//---------------------------------------------------------------------------------
-void VcountHandler() {
-//---------------------------------------------------------------------------------
- static int lastbut = -1;
-
- uint16 but=0, x=0, y=0, xpx=0, ypx=0, z1=0, z2=0;
-
- but = REG_KEYXY;
-
- if (!( (but ^ lastbut) & (1<<6))) {
-
- tempPos = touchReadXY();
-
- if ( tempPos.x == 0 || tempPos.y == 0 ) {
- but |= (1 <<6);
- lastbut = but;
- } else {
- x = tempPos.x;
- y = tempPos.y;
- xpx = tempPos.px;
- ypx = tempPos.py;
- z1 = tempPos.z1;
- z2 = tempPos.z2;
- }
-
- } else {
- lastbut = but;
- but |= (1 <<6);
- }
- IPC->touchX = x;
- IPC->touchY = y;
- IPC->touchXpx = xpx;
- IPC->touchYpx = ypx;
- IPC->touchZ1 = z1;
- IPC->touchZ2 = z2;
- IPC->buttons = but;
-
-}
-
-//---------------------------------------------------------------------------------
-void VblankHandler(void) {
-//---------------------------------------------------------------------------------
- static u8 is_recording = 0;
- u32 i;
-
- //sound code :)
- TransferSound *snd = IPC->soundData;
- IPC->soundData = 0;
-
- if (0 != snd) {
-
- for (i=0; i<snd->count; i++) {
- s32 chan = getFreeSoundChannel();
-
- if (chan >= 0) {
- startSound(snd->data[i].rate, snd->data[i].data, snd->data[i].len, chan, snd->data[i].vol, snd->data[i].pan, snd->data[i].format);
- }
- }
- }
-
- // microphone code
- if (!is_recording && my_IPC->record)
- {
- StartRecording((u8 *)my_IPC->record_buffer, my_IPC->record_length_max);
- is_recording = 1;
- }
-
- if (is_recording && !my_IPC->record)
- {
- my_IPC->recorded_length = 1 + StopRecording();
- is_recording = 0;
- }
-
-#ifdef ENABLE_WIFI
- Wifi_Update(); // update wireless in vblank
-#endif
-}
-
-#ifdef ENABLE_WIFI
-// callback to allow wifi library to notify arm9
-void arm7_synctoarm9() { // send fifo message
- REG_IPC_FIFO_TX = 0x87654321;
-}
-// interrupt handler to allow incoming notifications from arm9
-void arm7_fifo() { // check incoming fifo messages
- u32 msg = REG_IPC_FIFO_RX;
- if(msg==0x87654321) Wifi_Sync();
-}
-#endif
-
-//---------------------------------------------------------------------------------
-int main(int argc, char ** argv) {
-//---------------------------------------------------------------------------------
-#ifdef ENABLE_WIFI
- REG_IPC_FIFO_CR = IPC_FIFO_ENABLE | IPC_FIFO_SEND_CLEAR; // enable & prepare
- // fifo asap
-#endif
-
- // read User Settings from firmware
- readUserSettings();
-
- //enable sound
- powerON(POWER_SOUND);
- writePowerManagement(PM_CONTROL_REG, ( readPowerManagement(PM_CONTROL_REG) & ~PM_SOUND_MUTE ) | PM_SOUND_AMP );
- SOUND_CR = SOUND_ENABLE | SOUND_VOL(0x7F);
-
- irqInit();
-
- // Start the RTC tracking IRQ
- initClockIRQ();
-
- SetYtrigger(80);
- irqSet(IRQ_VCOUNT, VcountHandler);
- irqSet(IRQ_VBLANK, VblankHandler);
- irqSet(IRQ_TIMER0, ProcessMicrophoneTimerIRQ);
-
- irqEnable(IRQ_VBLANK | IRQ_VCOUNT | IRQ_TIMER0);
-
-#ifdef ENABLE_WIFI
- irqSet(IRQ_WIFI, Wifi_Interrupt); // set up wifi interrupt
- irqEnable(IRQ_WIFI);
-
- // sync with arm9 and init wifi
- u32 fifo_temp;
-
- while (1)
- { // wait for magic number
- while (REG_IPC_FIFO_CR & IPC_FIFO_RECV_EMPTY)
- swiWaitForVBlank();
- fifo_temp = REG_IPC_FIFO_RX;
- if (fifo_temp == 0x12345678)
- break;
- }
- while (REG_IPC_FIFO_CR & IPC_FIFO_RECV_EMPTY)
- swiWaitForVBlank();
- fifo_temp = REG_IPC_FIFO_RX;
- Wifi_Init(fifo_temp);
-
- irqSet(IRQ_FIFO_NOT_EMPTY,arm7_fifo); // set up fifo irq
- irqEnable(IRQ_FIFO_NOT_EMPTY);
- REG_IPC_FIFO_CR = IPC_FIFO_ENABLE | IPC_FIFO_RECV_IRQ;
-
- Wifi_SetSyncHandler(arm7_synctoarm9); // allow wifi lib to notify arm9
-#endif
- // Keep the ARM7 mostly idle
- while (1) {
- swiWaitForVBlank();
- }
-}
-
-
diff --git a/c/src/lib/libbsp/arm/nds/coproc/coproc.ld b/c/src/lib/libbsp/arm/nds/coproc/coproc.ld
deleted file mode 100644
index deb2fe4343..0000000000
--- a/c/src/lib/libbsp/arm/nds/coproc/coproc.ld
+++ /dev/null
@@ -1,195 +0,0 @@
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-
-MEMORY {
-
- rom : ORIGIN = 0x08000000, LENGTH = 32M
- iwram : ORIGIN = 0x037f8000, LENGTH = 96K
-}
-
-__iwram_start = ORIGIN(iwram);
-__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
-__sp_irq = __iwram_top - 0x60;
-__sp_svc = __sp_irq - 0x100;
-__sp_usr = __sp_svc - 0x100;
-
-__irq_flags = __iwram_top - 8;
-__irq_vector = __iwram_top - 4;
-
-SECTIONS
-{
- .init :
- {
- __text_start = . ;
- KEEP (*(.init))
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
- .plt : { *(.plt) } >iwram = 0xff
-
- .text : /* ALIGN (4): */
- {
-
- *(.text*)
- *(.stub)
- /* .gnu.warning sections are handled specially by elf32.em. */
- *(.gnu.warning)
- *(.gnu.linkonce.t*)
- *(.glue_7)
- *(.glue_7t)
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
-
- .fini :
- {
- KEEP (*(.fini))
- } >iwram =0xff
-
- __text_end = . ;
-
- .rodata :
- {
- *(.rodata)
- *all.rodata*(*)
- *(.roda)
- *(.rodata.*)
- *(.gnu.linkonce.r*)
- SORT(CONSTRUCTORS)
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
-
- .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram
- __exidx_start = .;
- .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >iwram
- __exidx_end = .;
-
-/* Ensure the __preinit_array_start label is properly aligned. We
- could instead move the label definition inside the section, but
- the linker would then create the section even if it turns out to
- be empty, which isn't pretty. */
- . = ALIGN(32 / 8);
- PROVIDE (__preinit_array_start = .);
- .preinit_array : { KEEP (*(.preinit_array)) } >iwram = 0xff
- PROVIDE (__preinit_array_end = .);
- PROVIDE (__init_array_start = .);
- .init_array : { KEEP (*(.init_array)) } >iwram = 0xff
- PROVIDE (__init_array_end = .);
- PROVIDE (__fini_array_start = .);
- .fini_array : { KEEP (*(.fini_array)) } >iwram = 0xff
- PROVIDE (__fini_array_end = .);
-
- .ctors :
- {
- /* gcc uses crtbegin.o to find the start of the constructors, so
- we make sure it is first. Because this is a wildcard, it
- doesn't matter if the user does not actually link against
- crtbegin.o; the linker won't look for a file to match a
- wildcard. The wildcard also means that it doesn't matter which
- directory crtbegin.o is in. */
- KEEP (*crtbegin.o(.ctors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
-
- .dtors :
- {
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
-
- .eh_frame :
- {
- KEEP (*(.eh_frame))
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
-
- .gcc_except_table :
- {
- *(.gcc_except_table)
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram = 0xff
- .jcr : { KEEP (*(.jcr)) } >iwram = 0
- .got : { *(.got.plt) *(.got) } >iwram = 0
-
-
- .iwram ALIGN(4) :
- {
- __iwram_start = ABSOLUTE(.) ;
- *(.iwram)
- *iwram.*(.text)
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- __iwram_end = ABSOLUTE(.) ;
- } >iwram = 0xff
-
-
- .data ALIGN(4) : {
- __data_start = ABSOLUTE(.);
- *(.data)
- *(.data.*)
- *(.gnu.linkonce.d*)
- CONSTRUCTORS
- . = ALIGN(4);
- __data_end = ABSOLUTE(.) ;
- } >iwram = 0xff
-
-
-
- .bss ALIGN(4) :
- {
- __bss_start = ABSOLUTE(.);
- __bss_start__ = ABSOLUTE(.);
- *(.dynbss)
- *(.gnu.linkonce.b*)
- *(.bss*)
- *(COMMON)
- . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
- } >iwram
-
- __bss_end = . ;
- __bss_end__ = . ;
-
- _end = . ;
- __end__ = . ;
- PROVIDE (end = _end);
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
- /* DWARF debug sections.
- Symbols in the DWARF debugging sections are relative to the beginning
- of the section so we begin them at 0. */
- /* DWARF 1 */
- .debug 0 : { *(.debug) }
- .line 0 : { *(.line) }
- /* GNU DWARF 1 extensions */
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- /* DWARF 2 */
- .debug_info 0 : { *(.debug_info) }
- .debug_abbrev 0 : { *(.debug_abbrev) }
- .debug_line 0 : { *(.debug_line) }
- .debug_frame 0 : { *(.debug_frame) }
- .debug_str 0 : { *(.debug_str) }
- .debug_loc 0 : { *(.debug_loc) }
- .debug_macinfo 0 : { *(.debug_macinfo) }
- /* SGI/MIPS DWARF 2 extensions */
- .debug_weaknames 0 : { *(.debug_weaknames) }
- .debug_funcnames 0 : { *(.debug_funcnames) }
- .debug_typenames 0 : { *(.debug_typenames) }
- .debug_varnames 0 : { *(.debug_varnames) }
- .stack 0x80000 : { _stack = .; *(.stack) }
- /* These must appear regardless of . */
-}