2008-04-17 Joel Sherrill <joel.sherrill@OARcorp.com>

* Makefile.am: Move .s files to .S
	* dswifi/common/source/spinlock.S, libfat/source/disc_io/io_dldi.S,
	libfat/source/disc_io/io_scsd_s.S, libnds/source/arm9/COS.S,
	libnds/source/arm9/SIN.S, libnds/source/arm9/TAN.S,
	libnds/source/arm9/dcache.S, libnds/source/arm9/default_font.S,
	libnds/source/arm9/icache.S, libnds/source/common/biosCalls.S,
	libnds/source/common/interruptDispatcher.S: New files.
	* dswifi/common/source/spinlock.s, libfat/source/disc_io/io_dldi.s,
	libfat/source/disc_io/io_scsd_s.s, libnds/source/arm9/COS.s,
	libnds/source/arm9/SIN.s, libnds/source/arm9/TAN.s,
	libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.s,
	libnds/source/arm9/exceptionHandler.s, libnds/source/arm9/icache.s,
	libnds/source/common/biosCalls.s,
	libnds/source/common/interruptDispatcher.s: Removed.
This commit is contained in:
Joel Sherrill
2008-04-17 23:09:42 +00:00
parent ed8206bfe8
commit f9af0c1565
16 changed files with 699 additions and 391 deletions

View File

@@ -1,3 +1,20 @@
2008-04-17 Joel Sherrill <joel.sherrill@OARcorp.com>
* Makefile.am: Move .s files to .S
* dswifi/common/source/spinlock.S, libfat/source/disc_io/io_dldi.S,
libfat/source/disc_io/io_scsd_s.S, libnds/source/arm9/COS.S,
libnds/source/arm9/SIN.S, libnds/source/arm9/TAN.S,
libnds/source/arm9/dcache.S, libnds/source/arm9/default_font.S,
libnds/source/arm9/icache.S, libnds/source/common/biosCalls.S,
libnds/source/common/interruptDispatcher.S: New files.
* dswifi/common/source/spinlock.s, libfat/source/disc_io/io_dldi.s,
libfat/source/disc_io/io_scsd_s.s, libnds/source/arm9/COS.s,
libnds/source/arm9/SIN.s, libnds/source/arm9/TAN.s,
libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.s,
libnds/source/arm9/exceptionHandler.s, libnds/source/arm9/icache.s,
libnds/source/common/biosCalls.s,
libnds/source/common/interruptDispatcher.s: Removed.
2008-04-17 Joel Sherrill <joel.sherrill@OARcorp.com>
* .cvsignore, include/.cvsignore: New files.

View File

@@ -101,7 +101,7 @@ bin2s: $(srcdir)/tools/bin2s.c
SUFFIXES = .bin
%.s: %.bin bin2s
%.S: %.bin bin2s
$(srcdir)/tools/bin2s $< > $(srcdir)/$@
libnds9_rel_SOURCES = libnds/source/common/biosCalls.S \
@@ -110,9 +110,9 @@ libnds9_rel_SOURCES = libnds/source/common/biosCalls.S \
libnds/source/common/interruptDispatcher.S \
libnds/source/common/interrupts.c \
libnds/source/arm9/boxtest.c \
libnds/source/arm9/default_font.s \
libnds/source/arm9/default_font.S \
libnds/source/arm9/console.c \
libnds/source/arm9/COS.s \
libnds/source/arm9/COS.S \
libnds/source/arm9/dcache.S \
libnds/source/arm9/exceptionHandler.S \
libnds/source/arm9/exceptions.c \
@@ -124,10 +124,10 @@ libnds9_rel_SOURCES = libnds/source/common/biosCalls.S \
libnds/source/arm9/ndsmotion.c \
libnds/source/arm9/pcx.c \
libnds/source/arm9/rumble.c \
libnds/source/arm9/SIN.s \
libnds/source/arm9/SIN.S \
libnds/source/arm9/sound.c \
libnds/source/arm9/system.c \
libnds/source/arm9/TAN.s \
libnds/source/arm9/TAN.S \
libnds/source/arm9/touch.c \
libnds/source/arm9/video.c \
libnds/source/arm9/videoGL.c
@@ -139,7 +139,7 @@ if HAS_NETWORKING
# dswifi, ARM9 side
noinst_PROGRAMS += dswifi9.rel
dswifi9_rel_SOURCES = dswifi/arm9/source/wifi_arm9.c \
dswifi/common/source/spinlock.s
dswifi/common/source/spinlock.S
dswifi9_rel_CPPFLAGS = $(AM_CPPFLAGS) -DARM9 -I$(srcdir)/dswifi/include -I$(srcdir)/libnds/include -I$(srcdir)/dswifi/common/source -I$(srcdir)/wifi -D_KERNEL -Dcaddr_t=uint32_t
dswifi9_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
endif
@@ -160,8 +160,8 @@ libdldi_rel_SOURCES = libfat/source/disc_io/disc.c \
libfat/source/disc_io/io_sc_common.c \
libfat/source/disc_io/io_scsd.c \
libfat/source/disc_io/io_sd_common.c \
libfat/source/disc_io/io_dldi.s \
libfat/source/disc_io/io_scsd_s.s
libfat/source/disc_io/io_dldi.S \
libfat/source/disc_io/io_scsd_s.S
libdldi_rel_CPPFLAGS = $(AM_CPPFLAGS) -DARM9 -I$(srcdir)/libnds/include -I$(srcdir)/libfat/source/disc_io
libdldi_rel_CCASFLAGS = $(AM_CCASFLAGS) -DARM9 -I$(srcdir)/libnds/include -I$(srcdir)/libfat/source/disc_io
libdldi_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
@@ -188,7 +188,7 @@ if HAS_NETWORKING
# dswifi, ARM7 side
noinst_PROGRAMS += dswifi7.rel
dswifi7_rel_SOURCES = dswifi/arm7/source/wifi_arm7.c \
dswifi/common/source/spinlock.s
dswifi/common/source/spinlock.S
dswifi7_rel_CPPFLAGS = $(AM_CPPFLAGS) -DARM7 -I$(srcdir)/dswifi/include -I$(srcdir)/libnds/include -I$(srcdir)/dswifi/common/source
dswifi7_rel_CFLAGS = -mcpu=arm7tdmi -msoft-float
dswifi7_rel_CCASFLAGS = -mcpu=arm7tdmi -msoft-float

View File

@@ -0,0 +1,245 @@
/*---------------------------------------------------------------------------------
$Id$
Copyright (C) 2005
Michael Noland (joat)
Jason Rogers (dovoto)
Dave Murphy (WinterMute)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
$Log$
Revision 1.1 2008/04/16 18:37:32 joel
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac,
mk_libnds.sh, patch.libnds, preinstall.am, block/block.c,
clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c,
coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile,
dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c,
dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile,
dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h,
dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h,
dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c,
dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c,
dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c,
dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c,
dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c,
dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c,
dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c,
dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c,
dswifi/arm9/source/sgIP_memblock.h,
dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h,
dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h,
dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h,
dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h,
dswifi/include/dswifi7.h, dswifi/include/dswifi9.h,
dswifi/include/dswifi_version.h, dswifi/include/netdb.h,
dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c,
fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h,
include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h,
libfat/gba/include/fat.h, libfat/include/fat.h,
libfat/nds/include/fat.h, libfat/source/bit_ops.h,
libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h,
libfat/source/directory.c, libfat/source/directory.h,
libfat/source/fatdir.c, libfat/source/fatdir.h,
libfat/source/fatfile.c, libfat/source/fatfile.h,
libfat/source/file_allocation_table.c,
libfat/source/file_allocation_table.h, libfat/source/filetime.c,
libfat/source/filetime.h, libfat/source/libfat.c,
libfat/source/mem_allocate.h, libfat/source/partition.c,
libfat/source/partition.h, libfat/source/disc_io/disc.c,
libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h,
libfat/source/disc_io/io_cf_common.c,
libfat/source/disc_io/io_cf_common.h,
libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s,
libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h,
libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h,
libfat/source/disc_io/io_m3_common.c,
libfat/source/disc_io/io_m3_common.h,
libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h,
libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h,
libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h,
libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h,
libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h,
libfat/source/disc_io/io_sc_common.c,
libfat/source/disc_io/io_sc_common.h,
libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h,
libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h,
libfat/source/disc_io/io_scsd_s.s,
libfat/source/disc_io/io_sd_common.c,
libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7,
libnds/Makefile.arm9, libnds/libnds_license.txt,
libnds/basicARM7/source/defaultARM7.c,
libnds/include/default_font_bin.h, libnds/include/gbfs.h,
libnds/include/nds.h, libnds/include/nds/bios.h,
libnds/include/nds/card.h, libnds/include/nds/dma.h,
libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h,
libnds/include/nds/jtypes.h, libnds/include/nds/memory.h,
libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h,
libnds/include/nds/system.h, libnds/include/nds/timers.h,
libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h,
libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h,
libnds/include/nds/arm9/background.h,
libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h,
libnds/include/nds/arm9/console.h,
libnds/include/nds/arm9/exceptions.h,
libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h,
libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h,
libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h,
libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h,
libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h,
libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h,
libnds/source/arm7/audio.c, libnds/source/arm7/clock.c,
libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c,
libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c,
libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s,
libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s,
libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s,
libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c,
libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin,
libnds/source/arm9/default_font.s,
libnds/source/arm9/exceptionHandler.S,
libnds/source/arm9/exceptionHandler.s,
libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c,
libnds/source/arm9/icache.s, libnds/source/arm9/image.c,
libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c,
libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c,
libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c,
libnds/source/arm9/system.c, libnds/source/arm9/touch.c,
libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c,
libnds/source/common/biosCalls.s, libnds/source/common/card.c,
libnds/source/common/gbfs.c,
libnds/source/common/interruptDispatcher.s,
libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c,
sound/sound.h, start/start.S, startup/linkcmds, startup/start.c,
timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c,
tools/configure.ac, tools/runtest,
tools/ndstool/include/arm7_sha1_homebrew.h,
tools/ndstool/include/arm7_sha1_nintendo.h,
tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h,
tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h,
tools/ndstool/include/encryption.h, tools/ndstool/include/header.h,
tools/ndstool/include/hook.h, tools/ndstool/include/little.h,
tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h,
tools/ndstool/include/ndscreate.h,
tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h,
tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h,
tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h,
tools/ndstool/include/passme_vhd1.h,
tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h,
tools/ndstool/include/sha1.h, tools/ndstool/include/types.h,
tools/ndstool/source/arm7_sha1_homebrew.c,
tools/ndstool/source/arm7_sha1_nintendo.c,
tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp,
tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp,
tools/ndstool/source/default_icon.c,
tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp,
tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c,
tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp,
tools/ndstool/source/ndscreate.cpp,
tools/ndstool/source/ndsextract.cpp,
tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp,
tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c,
tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp,
touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c,
touchscreen/reco.h, touchscreen/touchscreen.c,
touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c:
New files.
Revision 1.1 2006/07/04 01:35:32 wntrmute
move cache.s to dcache.s
Revision 1.5 2006/06/18 21:18:32 wntrmute
*** empty log message ***
Revision 1.4 2005/08/23 17:06:10 wntrmute
converted all endings to unix
Revision 1.3 2005/08/03 05:12:29 wntrmute
adjusted header for logging
---------------------------------------------------------------------------------*/
#define ICACHE_SIZE 0x2000
#define DCACHE_SIZE 0x1000
#define CACHE_LINE_SIZE 32
//---------------------------------------------------------------------------------
.arm
//---------------------------------------------------------------------------------
.global DC_FlushAll
//---------------------------------------------------------------------------------
DC_FlushAll:
/*---------------------------------------------------------------------------------
Clean and invalidate entire data cache
---------------------------------------------------------------------------------*/
mov r1, #0
outer_loop:
mov r0, #0
inner_loop:
orr r2, r1, r0 @ generate segment and line address
mcr p15, 0, r2, c7, c14, 2 @ clean and flush the line
add r0, r0, #CACHE_LINE_SIZE
cmp r0, #DCACHE_SIZE/4
bne inner_loop
add r1, r1, #0x40000000
cmp r1, #0
bne outer_loop
bx lr
//---------------------------------------------------------------------------------
.global DC_FlushRange
//---------------------------------------------------------------------------------
DC_FlushRange:
/*---------------------------------------------------------------------------------
Clean and invalidate a range
---------------------------------------------------------------------------------*/
add r1, r1, r0
bic r0, r0, #(CACHE_LINE_SIZE - 1)
.flush:
mcr p15, 0, r0, c7, c14, 1 @ clean and flush address
add r0, r0, #CACHE_LINE_SIZE
cmp r0, r1
blt .flush
bx lr
//---------------------------------------------------------------------------------
.global DC_InvalidateAll
//---------------------------------------------------------------------------------
DC_InvalidateAll:
/*---------------------------------------------------------------------------------
Clean and invalidate entire data cache
---------------------------------------------------------------------------------*/
mov r0, #0
mcr p15, 0, r0, c7, c6, 0
bx lr
//---------------------------------------------------------------------------------
.global DC_InvalidateRange
//---------------------------------------------------------------------------------
DC_InvalidateRange:
/*---------------------------------------------------------------------------------
Invalidate a range
---------------------------------------------------------------------------------*/
add r1, r1, r0
bic r0, r0, #CACHE_LINE_SIZE - 1
.invalidate:
mcr p15, 0, r0, c7, c6, 1
add r0, r0, #CACHE_LINE_SIZE
cmp r0, r1
blt .invalidate
bx lr

View File

@@ -1,107 +0,0 @@
/*---------------------------------------------------------------------------------
$Id$
Copyright (C) 2005
Michael Noland (joat)
Jason Rogers (dovoto)
Dave Murphy (WinterMute)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
$Log$
Revision 1.1 2006/07/04 01:35:32 wntrmute
move cache.s to dcache.s
Revision 1.5 2006/06/18 21:18:32 wntrmute
*** empty log message ***
Revision 1.4 2005/08/23 17:06:10 wntrmute
converted all endings to unix
Revision 1.3 2005/08/03 05:12:29 wntrmute
adjusted header for logging
---------------------------------------------------------------------------------*/
#define ICACHE_SIZE 0x2000
#define DCACHE_SIZE 0x1000
#define CACHE_LINE_SIZE 32
//---------------------------------------------------------------------------------
.arm
//---------------------------------------------------------------------------------
.global DC_FlushAll
//---------------------------------------------------------------------------------
DC_FlushAll:
/*---------------------------------------------------------------------------------
Clean and invalidate entire data cache
---------------------------------------------------------------------------------*/
mov r1, #0
outer_loop:
mov r0, #0
inner_loop:
orr r2, r1, r0 @ generate segment and line address
mcr p15, 0, r2, c7, c14, 2 @ clean and flush the line
add r0, r0, #CACHE_LINE_SIZE
cmp r0, #DCACHE_SIZE/4
bne inner_loop
add r1, r1, #0x40000000
cmp r1, #0
bne outer_loop
bx lr
//---------------------------------------------------------------------------------
.global DC_FlushRange
//---------------------------------------------------------------------------------
DC_FlushRange:
/*---------------------------------------------------------------------------------
Clean and invalidate a range
---------------------------------------------------------------------------------*/
add r1, r1, r0
bic r0, r0, #(CACHE_LINE_SIZE - 1)
.flush:
mcr p15, 0, r0, c7, c14, 1 @ clean and flush address
add r0, r0, #CACHE_LINE_SIZE
cmp r0, r1
blt .flush
bx lr
//---------------------------------------------------------------------------------
.global DC_InvalidateAll
//---------------------------------------------------------------------------------
DC_InvalidateAll:
/*---------------------------------------------------------------------------------
Clean and invalidate entire data cache
---------------------------------------------------------------------------------*/
mov r0, #0
mcr p15, 0, r0, c7, c6, 0
bx lr
//---------------------------------------------------------------------------------
.global DC_InvalidateRange
//---------------------------------------------------------------------------------
DC_InvalidateRange:
/*---------------------------------------------------------------------------------
Invalidate a range
---------------------------------------------------------------------------------*/
add r1, r1, r0
bic r0, r0, #CACHE_LINE_SIZE - 1
.invalidate:
mcr p15, 0, r0, c7, c6, 1
add r0, r0, #CACHE_LINE_SIZE
cmp r0, r1
blt .invalidate
bx lr

View File

@@ -1,123 +0,0 @@
/*---------------------------------------------------------------------------------
$Id$
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.
$Log$
Revision 1.3 2006/08/03 09:35:36 wntrmute
fix storing pc
Revision 1.2 2006/07/06 02:14:33 wntrmute
read r15 in enterException
add return to bios
Revision 1.1 2006/06/18 21:16:26 wntrmute
added arm9 exception handler API
---------------------------------------------------------------------------------*/
.text
.arm
@---------------------------------------------------------------------------------
.global getCPSR
@---------------------------------------------------------------------------------
getCPSR:
@---------------------------------------------------------------------------------
mrs r0,cpsr
bx r14
@---------------------------------------------------------------------------------
.global enterException
@---------------------------------------------------------------------------------
enterException:
@---------------------------------------------------------------------------------
// store context
ldr r12,=exceptionRegisters
stmia r12,{r0-r11}
str r13,[r12,#oldStack - exceptionRegisters]
// assign a stack
ldr r13,=exceptionStack
ldr r13,[r13]
// renable MPU
mrc p15,0,r0,c1,c0,0
orr r0,r0,#1
mcr p15,0,r0,c1,c0,0
// bios exception stack
ldr r0, =0x027FFD90
// grab r15 from bios exception stack
ldr r2,[r0,#8]
str r2,[r12,#reg15 - exceptionRegisters]
// grab stored r12 and SPSR from bios exception stack
ldmia r0,{r2,r12}
// grab banked registers from correct processor mode
mrs r3,cpsr
bic r4,r3,#0x1F
and r2,r2,#0x1F
orr r4,r4,r2
msr cpsr,r4
ldr r0,=reg12
stmia r0,{r12-r14}
msr cpsr,r3
// Get C function & call it
ldr r12,=exceptionC
ldr r12,[r12,#0]
blxne r12
// restore registers
ldr r12,=exceptionRegisters
ldmia r12,{r0-r11}
ldr r13,[r12,#oldStack - exceptionRegisters]
// return through bios
mov pc,lr
@---------------------------------------------------------------------------------
.global exceptionC
@---------------------------------------------------------------------------------
exceptionC:
@---------------------------------------------------------------------------------
.word 0x00000000
@---------------------------------------------------------------------------------
.global exceptionStack
@---------------------------------------------------------------------------------
exceptionStack:
@---------------------------------------------------------------------------------
.word 0x00000000
@---------------------------------------------------------------------------------
.global exceptionRegisters
@---------------------------------------------------------------------------------
exceptionRegisters:
@---------------------------------------------------------------------------------
.space 12 * 4
reg12: .word 0
reg13: .word 0
reg14: .word 0
reg15: .word 0
oldStack: .word 0

View File

@@ -24,6 +24,144 @@
distribution.
$Log$
Revision 1.1 2008/04/16 18:37:32 joel
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac,
mk_libnds.sh, patch.libnds, preinstall.am, block/block.c,
clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c,
coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile,
dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c,
dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile,
dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h,
dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h,
dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c,
dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c,
dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c,
dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c,
dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c,
dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c,
dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c,
dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c,
dswifi/arm9/source/sgIP_memblock.h,
dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h,
dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h,
dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h,
dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h,
dswifi/include/dswifi7.h, dswifi/include/dswifi9.h,
dswifi/include/dswifi_version.h, dswifi/include/netdb.h,
dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c,
fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h,
include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h,
libfat/gba/include/fat.h, libfat/include/fat.h,
libfat/nds/include/fat.h, libfat/source/bit_ops.h,
libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h,
libfat/source/directory.c, libfat/source/directory.h,
libfat/source/fatdir.c, libfat/source/fatdir.h,
libfat/source/fatfile.c, libfat/source/fatfile.h,
libfat/source/file_allocation_table.c,
libfat/source/file_allocation_table.h, libfat/source/filetime.c,
libfat/source/filetime.h, libfat/source/libfat.c,
libfat/source/mem_allocate.h, libfat/source/partition.c,
libfat/source/partition.h, libfat/source/disc_io/disc.c,
libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h,
libfat/source/disc_io/io_cf_common.c,
libfat/source/disc_io/io_cf_common.h,
libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s,
libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h,
libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h,
libfat/source/disc_io/io_m3_common.c,
libfat/source/disc_io/io_m3_common.h,
libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h,
libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h,
libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h,
libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h,
libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h,
libfat/source/disc_io/io_sc_common.c,
libfat/source/disc_io/io_sc_common.h,
libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h,
libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h,
libfat/source/disc_io/io_scsd_s.s,
libfat/source/disc_io/io_sd_common.c,
libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7,
libnds/Makefile.arm9, libnds/libnds_license.txt,
libnds/basicARM7/source/defaultARM7.c,
libnds/include/default_font_bin.h, libnds/include/gbfs.h,
libnds/include/nds.h, libnds/include/nds/bios.h,
libnds/include/nds/card.h, libnds/include/nds/dma.h,
libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h,
libnds/include/nds/jtypes.h, libnds/include/nds/memory.h,
libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h,
libnds/include/nds/system.h, libnds/include/nds/timers.h,
libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h,
libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h,
libnds/include/nds/arm9/background.h,
libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h,
libnds/include/nds/arm9/console.h,
libnds/include/nds/arm9/exceptions.h,
libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h,
libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h,
libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h,
libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h,
libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h,
libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h,
libnds/source/arm7/audio.c, libnds/source/arm7/clock.c,
libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c,
libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c,
libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s,
libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s,
libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s,
libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c,
libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin,
libnds/source/arm9/default_font.s,
libnds/source/arm9/exceptionHandler.S,
libnds/source/arm9/exceptionHandler.s,
libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c,
libnds/source/arm9/icache.s, libnds/source/arm9/image.c,
libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c,
libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c,
libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c,
libnds/source/arm9/system.c, libnds/source/arm9/touch.c,
libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c,
libnds/source/common/biosCalls.s, libnds/source/common/card.c,
libnds/source/common/gbfs.c,
libnds/source/common/interruptDispatcher.s,
libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c,
sound/sound.h, start/start.S, startup/linkcmds, startup/start.c,
timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c,
tools/configure.ac, tools/runtest,
tools/ndstool/include/arm7_sha1_homebrew.h,
tools/ndstool/include/arm7_sha1_nintendo.h,
tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h,
tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h,
tools/ndstool/include/encryption.h, tools/ndstool/include/header.h,
tools/ndstool/include/hook.h, tools/ndstool/include/little.h,
tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h,
tools/ndstool/include/ndscreate.h,
tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h,
tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h,
tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h,
tools/ndstool/include/passme_vhd1.h,
tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h,
tools/ndstool/include/sha1.h, tools/ndstool/include/types.h,
tools/ndstool/source/arm7_sha1_homebrew.c,
tools/ndstool/source/arm7_sha1_nintendo.c,
tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp,
tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp,
tools/ndstool/source/default_icon.c,
tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp,
tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c,
tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp,
tools/ndstool/source/ndscreate.cpp,
tools/ndstool/source/ndsextract.cpp,
tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp,
tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c,
tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp,
touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c,
touchscreen/reco.h, touchscreen/touchscreen.c,
touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c:
New files.
Revision 1.5 2006/03/15 12:37:14 wntrmute
reformatted for legibility
grouped arm7 and arm9 specific code

View File

@@ -0,0 +1,290 @@
/*---------------------------------------------------------------------------------
$Id$
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.
$Log$
Revision 1.1 2008/04/16 18:37:33 joel
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac,
mk_libnds.sh, patch.libnds, preinstall.am, block/block.c,
clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c,
coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile,
dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c,
dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile,
dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h,
dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h,
dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c,
dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c,
dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c,
dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c,
dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c,
dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c,
dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c,
dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c,
dswifi/arm9/source/sgIP_memblock.h,
dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h,
dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h,
dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h,
dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h,
dswifi/include/dswifi7.h, dswifi/include/dswifi9.h,
dswifi/include/dswifi_version.h, dswifi/include/netdb.h,
dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c,
fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h,
include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h,
libfat/gba/include/fat.h, libfat/include/fat.h,
libfat/nds/include/fat.h, libfat/source/bit_ops.h,
libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h,
libfat/source/directory.c, libfat/source/directory.h,
libfat/source/fatdir.c, libfat/source/fatdir.h,
libfat/source/fatfile.c, libfat/source/fatfile.h,
libfat/source/file_allocation_table.c,
libfat/source/file_allocation_table.h, libfat/source/filetime.c,
libfat/source/filetime.h, libfat/source/libfat.c,
libfat/source/mem_allocate.h, libfat/source/partition.c,
libfat/source/partition.h, libfat/source/disc_io/disc.c,
libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h,
libfat/source/disc_io/io_cf_common.c,
libfat/source/disc_io/io_cf_common.h,
libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s,
libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h,
libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h,
libfat/source/disc_io/io_m3_common.c,
libfat/source/disc_io/io_m3_common.h,
libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h,
libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h,
libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h,
libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h,
libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h,
libfat/source/disc_io/io_sc_common.c,
libfat/source/disc_io/io_sc_common.h,
libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h,
libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h,
libfat/source/disc_io/io_scsd_s.s,
libfat/source/disc_io/io_sd_common.c,
libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7,
libnds/Makefile.arm9, libnds/libnds_license.txt,
libnds/basicARM7/source/defaultARM7.c,
libnds/include/default_font_bin.h, libnds/include/gbfs.h,
libnds/include/nds.h, libnds/include/nds/bios.h,
libnds/include/nds/card.h, libnds/include/nds/dma.h,
libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h,
libnds/include/nds/jtypes.h, libnds/include/nds/memory.h,
libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h,
libnds/include/nds/system.h, libnds/include/nds/timers.h,
libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h,
libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h,
libnds/include/nds/arm9/background.h,
libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h,
libnds/include/nds/arm9/console.h,
libnds/include/nds/arm9/exceptions.h,
libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h,
libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h,
libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h,
libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h,
libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h,
libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h,
libnds/source/arm7/audio.c, libnds/source/arm7/clock.c,
libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c,
libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c,
libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s,
libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s,
libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s,
libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c,
libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin,
libnds/source/arm9/default_font.s,
libnds/source/arm9/exceptionHandler.S,
libnds/source/arm9/exceptionHandler.s,
libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c,
libnds/source/arm9/icache.s, libnds/source/arm9/image.c,
libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c,
libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c,
libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c,
libnds/source/arm9/system.c, libnds/source/arm9/touch.c,
libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c,
libnds/source/common/biosCalls.s, libnds/source/common/card.c,
libnds/source/common/gbfs.c,
libnds/source/common/interruptDispatcher.s,
libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c,
sound/sound.h, start/start.S, startup/linkcmds, startup/start.c,
timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c,
tools/configure.ac, tools/runtest,
tools/ndstool/include/arm7_sha1_homebrew.h,
tools/ndstool/include/arm7_sha1_nintendo.h,
tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h,
tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h,
tools/ndstool/include/encryption.h, tools/ndstool/include/header.h,
tools/ndstool/include/hook.h, tools/ndstool/include/little.h,
tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h,
tools/ndstool/include/ndscreate.h,
tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h,
tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h,
tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h,
tools/ndstool/include/passme_vhd1.h,
tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h,
tools/ndstool/include/sha1.h, tools/ndstool/include/types.h,
tools/ndstool/source/arm7_sha1_homebrew.c,
tools/ndstool/source/arm7_sha1_nintendo.c,
tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp,
tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp,
tools/ndstool/source/default_icon.c,
tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp,
tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c,
tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp,
tools/ndstool/source/ndscreate.cpp,
tools/ndstool/source/ndsextract.cpp,
tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp,
tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c,
tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp,
touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c,
touchscreen/reco.h, touchscreen/touchscreen.c,
touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c:
New files.
Revision 1.10 2007/08/11 06:00:23 wntrmute
make nesting really work
Revision 1.9 2007/01/10 15:48:27 wntrmute
remove unused code
Revision 1.8 2006/12/16 09:10:02 wntrmute
acknowledge interrupt before calling handler
Revision 1.7 2006/04/26 05:11:31 wntrmute
rebase dtcm, take __irq_flags and __irq_vector from linker script
move arm7 irq vector & irq flags to actual locations
Revision 1.6 2006/04/23 18:19:15 wntrmute
reworked interrupt code to allow dtcm moving
Revision 1.5 2005/12/12 13:01:55 wntrmute
disable interrupts on return from user handler
Revision 1.4 2005/10/21 22:43:42 wntrmute
restore REG_IME on exit from null handler
Revision 1.3 2005/09/27 18:21:53 wntrmute
safer nested interrupt support
Revision 1.2 2005/09/04 16:37:01 wntrmute
check for NULL handler
Revision 1.1 2005/09/03 17:09:35 wntrmute
added interworking aware interrupt dispatcher
---------------------------------------------------------------------------------*/
#ifdef ARM7
.text
#endif
#ifdef ARM9
.section .itcm,"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

View File

@@ -1,152 +0,0 @@
/*---------------------------------------------------------------------------------
$Id$
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.
$Log$
Revision 1.10 2007/08/11 06:00:23 wntrmute
make nesting really work
Revision 1.9 2007/01/10 15:48:27 wntrmute
remove unused code
Revision 1.8 2006/12/16 09:10:02 wntrmute
acknowledge interrupt before calling handler
Revision 1.7 2006/04/26 05:11:31 wntrmute
rebase dtcm, take __irq_flags and __irq_vector from linker script
move arm7 irq vector & irq flags to actual locations
Revision 1.6 2006/04/23 18:19:15 wntrmute
reworked interrupt code to allow dtcm moving
Revision 1.5 2005/12/12 13:01:55 wntrmute
disable interrupts on return from user handler
Revision 1.4 2005/10/21 22:43:42 wntrmute
restore REG_IME on exit from null handler
Revision 1.3 2005/09/27 18:21:53 wntrmute
safer nested interrupt support
Revision 1.2 2005/09/04 16:37:01 wntrmute
check for NULL handler
Revision 1.1 2005/09/03 17:09:35 wntrmute
added interworking aware interrupt dispatcher
---------------------------------------------------------------------------------*/
#ifdef ARM7
.text
#endif
#ifdef ARM9
.section .itcm,"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