mirror of
https://github.com/izzy2lost/dolphin.git
synced 2026-06-19 01:16:48 -07:00
DSPSpy: First version submitted, resurrected from the ages of time. Build the dsp code by running dspbuild.bat (or an equivalent shell script), then build the elf using devkitpro/libogc and boot it on your Wii using Homebrew Channel or whatever. You'll get a lot of numbers on your screen.
DSPTool: build fix. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2995 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@@ -118,10 +118,10 @@ void CodeToHeader(const std::vector<u16> &code, const char *name, std::string *h
|
||||
header->clear();
|
||||
header->reserve(code.size() * 4);
|
||||
header->append("#ifndef _MSCVER\n");
|
||||
sprintf(buffer, "const unsigned short %s = {\n", name);
|
||||
sprintf(buffer, "const unsigned short %s[0x1000] = {\n", name);
|
||||
header->append(buffer);
|
||||
header->append("#else\n");
|
||||
sprintf(buffer, "const unsigned short %s __attribute__ ((aligned (64))) = {\n", name);
|
||||
sprintf(buffer, "const unsigned short %s[0x1000] __attribute__ ((aligned (64))) = {\n", name);
|
||||
header->append(buffer);
|
||||
header->append("#endif\n\n ");
|
||||
for (int i = 0; i < code.size(); i++)
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
#---------------------------------------------------------------------------------
|
||||
# Clear the implicit built in rules
|
||||
#---------------------------------------------------------------------------------
|
||||
.SUFFIXES:
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(DEVKITPPC)),)
|
||||
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
|
||||
endif
|
||||
|
||||
include $(DEVKITPPC)/wii_rules
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
# SOURCES is a list of directories containing source code
|
||||
# INCLUDES is a list of directories containing extra header files
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET := $(notdir $(CURDIR))
|
||||
BUILD := build
|
||||
SOURCES := . source
|
||||
RESOURCES := ../resources
|
||||
DATA := data
|
||||
INCLUDES := include
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
CFLAGS = -save-temps -g -O2 -Wall --no-strict-aliasing $(MACHDEP) $(INCLUDE)
|
||||
CXXFLAGS = $(CFLAGS)
|
||||
|
||||
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# any extra libraries we wish to link with the project
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBS := -lfat -lasnd -lmodplay -lwiiuse -lbte -lz -logc -lm
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBDIRS :=
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# no real need to edit anything past this point unless you need to add additional
|
||||
# rules for different file extensions
|
||||
#---------------------------------------------------------------------------------
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) $(foreach dir,$(RESOURCES),$(CURDIR)/$(dir))\
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# automatically build a list of object files for our project
|
||||
#---------------------------------------------------------------------------------
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CFILES += $(foreach dir,$(RESOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# use CXX for linking C++ projects, CC for standard C
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
export LD := $(CC)
|
||||
else
|
||||
export LD := $(CXX)
|
||||
endif
|
||||
|
||||
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
|
||||
$(sFILES:.s=.o) $(SFILES:.S=.o)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# build a list of include paths
|
||||
#---------------------------------------------------------------------------------
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD) \
|
||||
-I$(LIBOGC_INC)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# build a list of library paths
|
||||
#---------------------------------------------------------------------------------
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
||||
-L$(LIBOGC_LIB)
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||
.PHONY: $(BUILD) clean
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol
|
||||
#---------------------------------------------------------------------------------
|
||||
run:
|
||||
wiiload $(OUTPUT).dol
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
#%.biz: %.ds
|
||||
# gcdsptool -c $< -o $@
|
||||
|
||||
#%.h: %.biz
|
||||
# raw2c $< $@
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
$(OUTPUT).dol: $(OUTPUT).elf
|
||||
$(OUTPUT).elf: $(OFILES)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# This rule links in binary data with the .bin extension
|
||||
#---------------------------------------------------------------------------------
|
||||
#%.bin.o : %.bin
|
||||
#---------------------------------------------------------------------------------
|
||||
# @echo $(notdir $<)
|
||||
# $(bin2o)
|
||||
|
||||
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------
|
||||
@@ -0,0 +1,317 @@
|
||||
#ifndef __ASM_H__
|
||||
#define __ASM_H__
|
||||
|
||||
#ifdef _LANGUAGE_ASSEMBLY
|
||||
/* Condition Register Bit Fields */
|
||||
|
||||
#define cr0 0
|
||||
#define cr1 1
|
||||
#define cr2 2
|
||||
#define cr3 3
|
||||
#define cr4 4
|
||||
#define cr5 5
|
||||
#define cr6 6
|
||||
#define cr7 7
|
||||
|
||||
|
||||
/* General Purpose Registers (GPRs) */
|
||||
|
||||
#define r0 0
|
||||
#define r1 1
|
||||
#define sp 1
|
||||
#define r2 2
|
||||
#define toc 2
|
||||
#define r3 3
|
||||
#define r4 4
|
||||
#define r5 5
|
||||
#define r6 6
|
||||
#define r7 7
|
||||
#define r8 8
|
||||
#define r9 9
|
||||
#define r10 10
|
||||
#define r11 11
|
||||
#define r12 12
|
||||
#define r13 13
|
||||
#define r14 14
|
||||
#define r15 15
|
||||
#define r16 16
|
||||
#define r17 17
|
||||
#define r18 18
|
||||
#define r19 19
|
||||
#define r20 20
|
||||
#define r21 21
|
||||
#define r22 22
|
||||
#define r23 23
|
||||
#define r24 24
|
||||
#define r25 25
|
||||
#define r26 26
|
||||
#define r27 27
|
||||
#define r28 28
|
||||
#define r29 29
|
||||
#define r30 30
|
||||
#define r31 31
|
||||
|
||||
|
||||
/* Floating Point Registers (FPRs) */
|
||||
|
||||
#define fr0 0
|
||||
#define fr1 1
|
||||
#define fr2 2
|
||||
#define fr3 3
|
||||
#define fr4 4
|
||||
#define fr5 5
|
||||
#define fr6 6
|
||||
#define fr7 7
|
||||
#define fr8 8
|
||||
#define fr9 9
|
||||
#define fr10 10
|
||||
#define fr11 11
|
||||
#define fr12 12
|
||||
#define fr13 13
|
||||
#define fr14 14
|
||||
#define fr15 15
|
||||
#define fr16 16
|
||||
#define fr17 17
|
||||
#define fr18 18
|
||||
#define fr19 19
|
||||
#define fr20 20
|
||||
#define fr21 21
|
||||
#define fr22 22
|
||||
#define fr23 23
|
||||
#define fr24 24
|
||||
#define fr25 25
|
||||
#define fr26 26
|
||||
#define fr27 27
|
||||
#define fr28 28
|
||||
#define fr29 29
|
||||
#define fr30 30
|
||||
#define fr31 31
|
||||
|
||||
#define vr0 0
|
||||
#define vr1 1
|
||||
#define vr2 2
|
||||
#define vr3 3
|
||||
#define vr4 4
|
||||
#define vr5 5
|
||||
#define vr6 6
|
||||
#define vr7 7
|
||||
#define vr8 8
|
||||
#define vr9 9
|
||||
#define vr10 10
|
||||
#define vr11 11
|
||||
#define vr12 12
|
||||
#define vr13 13
|
||||
#define vr14 14
|
||||
#define vr15 15
|
||||
#define vr16 16
|
||||
#define vr17 17
|
||||
#define vr18 18
|
||||
#define vr19 19
|
||||
#define vr20 20
|
||||
#define vr21 21
|
||||
#define vr22 22
|
||||
#define vr23 23
|
||||
#define vr24 24
|
||||
#define vr25 25
|
||||
#define vr26 26
|
||||
#define vr27 27
|
||||
#define vr28 28
|
||||
#define vr29 29
|
||||
#define vr30 30
|
||||
#define vr31 31
|
||||
|
||||
#define SPRG0 272
|
||||
#define SPRG1 273
|
||||
#define SPRG2 274
|
||||
#define SPRG3 275
|
||||
|
||||
#define PMC1 953
|
||||
#define PMC2 954
|
||||
#define PMC3 957
|
||||
#define PMC4 958
|
||||
|
||||
#define MMCR0 952
|
||||
#define MMCR1 956
|
||||
|
||||
|
||||
#define LINK_REGISTER_CALLEE_UPDATE_ROOM 4
|
||||
#define EXCEPTION_NUMBER 8
|
||||
#define SRR0_OFFSET 12
|
||||
#define SRR1_OFFSET 16
|
||||
#define GPR0_OFFSET 20
|
||||
#define GPR1_OFFSET 24
|
||||
#define GPR2_OFFSET 28
|
||||
#define GPR3_OFFSET 32
|
||||
#define GPR4_OFFSET 36
|
||||
#define GPR5_OFFSET 40
|
||||
#define GPR6_OFFSET 44
|
||||
#define GPR7_OFFSET 48
|
||||
#define GPR8_OFFSET 52
|
||||
#define GPR9_OFFSET 56
|
||||
#define GPR10_OFFSET 60
|
||||
#define GPR11_OFFSET 64
|
||||
#define GPR12_OFFSET 68
|
||||
#define GPR13_OFFSET 72
|
||||
#define GPR14_OFFSET 76
|
||||
#define GPR15_OFFSET 80
|
||||
#define GPR16_OFFSET 84
|
||||
#define GPR17_OFFSET 88
|
||||
#define GPR18_OFFSET 92
|
||||
#define GPR19_OFFSET 96
|
||||
#define GPR20_OFFSET 100
|
||||
#define GPR21_OFFSET 104
|
||||
#define GPR22_OFFSET 108
|
||||
#define GPR23_OFFSET 112
|
||||
#define GPR24_OFFSET 116
|
||||
#define GPR25_OFFSET 120
|
||||
#define GPR26_OFFSET 124
|
||||
#define GPR27_OFFSET 128
|
||||
#define GPR28_OFFSET 132
|
||||
#define GPR29_OFFSET 136
|
||||
#define GPR30_OFFSET 140
|
||||
#define GPR31_OFFSET 144
|
||||
|
||||
#define GQR0_OFFSET 148
|
||||
#define GQR1_OFFSET 152
|
||||
#define GQR2_OFFSET 156
|
||||
#define GQR3_OFFSET 160
|
||||
#define GQR4_OFFSET 164
|
||||
#define GQR5_OFFSET 168
|
||||
#define GQR6_OFFSET 172
|
||||
#define GQR7_OFFSET 176
|
||||
|
||||
#define CR_OFFSET 180
|
||||
#define LR_OFFSET 184
|
||||
#define CTR_OFFSET 188
|
||||
#define XER_OFFSET 192
|
||||
#define MSR_OFFSET 196
|
||||
#define DAR_OFFSET 200
|
||||
|
||||
#define STATE_OFFSET 204
|
||||
#define MODE_OFFSET 206
|
||||
|
||||
#define FPR0_OFFSET 208
|
||||
#define FPR1_OFFSET 216
|
||||
#define FPR2_OFFSET 224
|
||||
#define FPR3_OFFSET 232
|
||||
#define FPR4_OFFSET 240
|
||||
#define FPR5_OFFSET 248
|
||||
#define FPR6_OFFSET 256
|
||||
#define FPR7_OFFSET 264
|
||||
#define FPR8_OFFSET 272
|
||||
#define FPR9_OFFSET 280
|
||||
#define FPR10_OFFSET 288
|
||||
#define FPR11_OFFSET 296
|
||||
#define FPR12_OFFSET 304
|
||||
#define FPR13_OFFSET 312
|
||||
#define FPR14_OFFSET 320
|
||||
#define FPR15_OFFSET 328
|
||||
#define FPR16_OFFSET 336
|
||||
#define FPR17_OFFSET 344
|
||||
#define FPR18_OFFSET 352
|
||||
#define FPR19_OFFSET 360
|
||||
#define FPR20_OFFSET 368
|
||||
#define FPR21_OFFSET 376
|
||||
#define FPR22_OFFSET 384
|
||||
#define FPR23_OFFSET 392
|
||||
#define FPR24_OFFSET 400
|
||||
#define FPR25_OFFSET 408
|
||||
#define FPR26_OFFSET 416
|
||||
#define FPR27_OFFSET 424
|
||||
#define FPR28_OFFSET 432
|
||||
#define FPR29_OFFSET 440
|
||||
#define FPR30_OFFSET 448
|
||||
#define FPR31_OFFSET 456
|
||||
|
||||
#define FPSCR_OFFSET 464
|
||||
|
||||
#define PSR0_OFFSET 472
|
||||
#define PSR1_OFFSET 480
|
||||
#define PSR2_OFFSET 488
|
||||
#define PSR3_OFFSET 496
|
||||
#define PSR4_OFFSET 504
|
||||
#define PSR5_OFFSET 512
|
||||
#define PSR6_OFFSET 520
|
||||
#define PSR7_OFFSET 528
|
||||
#define PSR8_OFFSET 536
|
||||
#define PSR9_OFFSET 544
|
||||
#define PSR10_OFFSET 552
|
||||
#define PSR11_OFFSET 560
|
||||
#define PSR12_OFFSET 568
|
||||
#define PSR13_OFFSET 576
|
||||
#define PSR14_OFFSET 584
|
||||
#define PSR15_OFFSET 592
|
||||
#define PSR16_OFFSET 600
|
||||
#define PSR17_OFFSET 608
|
||||
#define PSR18_OFFSET 616
|
||||
#define PSR19_OFFSET 624
|
||||
#define PSR20_OFFSET 632
|
||||
#define PSR21_OFFSET 640
|
||||
#define PSR22_OFFSET 648
|
||||
#define PSR23_OFFSET 656
|
||||
#define PSR24_OFFSET 664
|
||||
#define PSR25_OFFSET 672
|
||||
#define PSR26_OFFSET 680
|
||||
#define PSR27_OFFSET 688
|
||||
#define PSR28_OFFSET 696
|
||||
#define PSR29_OFFSET 704
|
||||
#define PSR30_OFFSET 712
|
||||
#define PSR31_OFFSET 720
|
||||
/*
|
||||
* maintain the EABI requested 8 bytes aligment
|
||||
* As SVR4 ABI requires 16, make it 16 (as some
|
||||
* exception may need more registers to be processed...)
|
||||
*/
|
||||
#define EXCEPTION_FRAME_END 728
|
||||
|
||||
#define IBAT0U 528
|
||||
#define IBAT0L 529
|
||||
#define IBAT1U 530
|
||||
#define IBAT1L 531
|
||||
#define IBAT2U 532
|
||||
#define IBAT2L 533
|
||||
#define IBAT3U 534
|
||||
#define IBAT3L 535
|
||||
|
||||
#define DBAT0U 536
|
||||
#define DBAT0L 537
|
||||
#define DBAT1U 538
|
||||
#define DBAT1L 538
|
||||
#define DBAT2U 540
|
||||
#define DBAT2L 541
|
||||
#define DBAT3U 542
|
||||
#define DBAT3L 543
|
||||
|
||||
#define HID0 1008
|
||||
#define HID1 1009
|
||||
#define HID2 920
|
||||
|
||||
#define GQR0 912
|
||||
#define GQR1 913
|
||||
#define GQR2 914
|
||||
#define GQR3 915
|
||||
#define GQR4 916
|
||||
#define GQR5 917
|
||||
#define GQR6 918
|
||||
#define GQR7 919
|
||||
|
||||
#define L2CR 1017
|
||||
|
||||
#define DMAU 922
|
||||
#define DMAL 923
|
||||
|
||||
#endif //_LANGUAGE_ASSEMBLY
|
||||
|
||||
#define MSR_RI 0x00000002
|
||||
#define MSR_DR 0x00000010
|
||||
#define MSR_IR 0x00000020
|
||||
#define MSR_IP 0x00000040
|
||||
#define MSR_SE 0x00000400
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_FP 0x00002000
|
||||
#define MSR_POW 0x00004000
|
||||
#define MSR_EE 0x00008000
|
||||
|
||||
#define PPC_ALIGNMENT 4
|
||||
|
||||
#endif //__ASM_H__
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef __COLOR_H__
|
||||
#define __COLOR_H__
|
||||
|
||||
// luminance is stored twice, thus one of the lum. is
|
||||
// redundant, but this way we can fill the screen.
|
||||
|
||||
#define COLOR_BLACK (0x00800080)
|
||||
#define COLOR_MAROON (0x266A26C0)
|
||||
#define COLOR_GREEN (0x4B554B4A)
|
||||
#define COLOR_OLIVE (0x7140718A)
|
||||
#define COLOR_NAVY (0x0EC00E75)
|
||||
#define COLOR_PURPLE (0x34AA34B5)
|
||||
#define COLOR_TEAL (0x59955940)
|
||||
#define COLOR_GRAY (0x80808080)
|
||||
#define COLOR_SILVER (0xC080C080)
|
||||
#define COLOR_RED (0x4C544CFF)
|
||||
#define COLOR_LIME (0x952B9515)
|
||||
#define COLOR_YELLOW (0xE100E194)
|
||||
#define COLOR_BLUE (0x1DFF1D6B)
|
||||
#define COLOR_FUCHSIA (0x69D469EA)
|
||||
#define COLOR_AQUA (0xB2ABB200)
|
||||
#define COLOR_WHITE (0xFF80FF80)
|
||||
#define COLOR_MONEYGREEN (0xD076D074)
|
||||
#define COLOR_SKYBLUE (0xC399C36A)
|
||||
#define COLOR_CREAM (0xFA79FA82)
|
||||
#define COLOR_MEDGRAY (0xA082A07F)
|
||||
|
||||
#endif /* COLOR_H */
|
||||
@@ -0,0 +1,211 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <reent.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#undef errno
|
||||
extern int errno;
|
||||
|
||||
#include "asm.h"
|
||||
#include "processor.h"
|
||||
#include "color.h"
|
||||
|
||||
#define FONT_XSIZE 8
|
||||
#define FONT_YSIZE 16
|
||||
#define FONT_XFACTOR 1
|
||||
#define FONT_YFACTOR 1
|
||||
#define FONT_XGAP 2
|
||||
#define FONT_YGAP 0
|
||||
|
||||
typedef struct _display_data_s {
|
||||
u8 *framebuffer;
|
||||
u8 *font;
|
||||
int xres,yres,stride;
|
||||
int cursor_x,cursor_y;
|
||||
int border_left,border_right,border_top,border_bottom;
|
||||
int scrolled_lines;
|
||||
|
||||
unsigned int foreground,background;
|
||||
} display_data_s;
|
||||
|
||||
int displ_open(struct _reent *r, const char *path, int flags,int mode);
|
||||
int displ_write(struct _reent *r, int fd, const char *ptr, int len);
|
||||
|
||||
static struct _display_data_s dsp_displ;
|
||||
static struct _display_data_s *displ = &dsp_displ;
|
||||
extern u8 display_font_8x16[];
|
||||
|
||||
|
||||
static void __display_drawc(int xpos, int ypos, int c)
|
||||
{
|
||||
xpos >>= 1;
|
||||
int ax, ay;
|
||||
unsigned int *ptr = (unsigned int*)(displ->framebuffer + displ->stride * ypos + xpos * 4);
|
||||
for (ay = 0; ay < FONT_YSIZE; ay++)
|
||||
#if FONT_XFACTOR == 2
|
||||
for (ax = 0; ax < 8; ax++)
|
||||
{
|
||||
unsigned int color;
|
||||
if ((displ->font[c * FONT_YSIZE + ay] << ax) & 0x80)
|
||||
color = displ->foreground;
|
||||
else
|
||||
color = displ->background;
|
||||
#if FONT_YFACTOR == 2
|
||||
// pixel doubling: we write u32
|
||||
ptr[ay * 2 * displ->stride/4 + ax] = color;
|
||||
// line doubling
|
||||
ptr[(ay * 2 +1) * displ->stride/4 + ax] = color;
|
||||
#else
|
||||
ptr[ay * displ->stride/4 + ax] = color;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
for (ax = 0; ax < 4; ax ++)
|
||||
{
|
||||
unsigned int color[2];
|
||||
int bits = (displ->font[c * FONT_YSIZE + ay] << (ax*2));
|
||||
if (bits & 0x80)
|
||||
color[0] = displ->foreground;
|
||||
else
|
||||
color[0] = displ->background;
|
||||
if (bits & 0x40)
|
||||
color[1] = displ->foreground;
|
||||
else
|
||||
color[1] = displ->background;
|
||||
ptr[ay * displ->stride/4 + ax] = (color[0] & 0xFFFF00FF) | (color[1] & 0x0000FF00);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void ds_init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride)
|
||||
{
|
||||
unsigned int level;
|
||||
|
||||
_CPU_ISR_Disable(level);
|
||||
|
||||
displ->framebuffer = (u8 *)framebuffer;
|
||||
displ->xres = xres;
|
||||
displ->yres = yres;
|
||||
displ->border_left = xstart;
|
||||
displ->border_top = ystart;
|
||||
displ->border_right = displ->xres;
|
||||
displ->border_bottom = displ->yres;
|
||||
displ->stride = stride;
|
||||
displ->cursor_x = xstart;
|
||||
displ->cursor_y = ystart;
|
||||
|
||||
displ->font = display_font_8x16;
|
||||
|
||||
displ->foreground = COLOR_WHITE;
|
||||
displ->background = COLOR_BLACK;
|
||||
|
||||
displ->scrolled_lines = 0;
|
||||
|
||||
unsigned int c = (displ->xres*displ->yres)/2;
|
||||
unsigned int *p = (unsigned int*)displ->framebuffer;
|
||||
while(c--)
|
||||
*p++ = displ->background;
|
||||
|
||||
_CPU_ISR_Restore(level);
|
||||
}
|
||||
|
||||
void ds_clear(void)
|
||||
{
|
||||
unsigned int c = (displ->xres*displ->yres)/2;
|
||||
unsigned int *p = (unsigned int*)displ->framebuffer;
|
||||
c /= 2;
|
||||
p += c;
|
||||
while(c--)
|
||||
*p++ = displ->background;
|
||||
}
|
||||
|
||||
int display_putc(int c)
|
||||
{
|
||||
if(!displ) return -1;
|
||||
|
||||
switch(c)
|
||||
{
|
||||
case '\n':
|
||||
displ->cursor_y += FONT_YSIZE*FONT_YFACTOR+FONT_YGAP;
|
||||
displ->cursor_x = displ->border_left;
|
||||
break;
|
||||
default:
|
||||
__display_drawc(displ->cursor_x,displ->cursor_y,c);
|
||||
displ->cursor_x += FONT_XSIZE*FONT_XFACTOR+FONT_XGAP;
|
||||
if((displ->cursor_x+FONT_XSIZE*FONT_XFACTOR)>displ->border_right) {
|
||||
displ->cursor_y += FONT_YSIZE*FONT_YFACTOR+FONT_YGAP;
|
||||
displ->cursor_x = displ->border_left;
|
||||
}
|
||||
}
|
||||
|
||||
if((displ->cursor_y+FONT_YSIZE*FONT_YFACTOR)>=displ->border_bottom) {
|
||||
memcpy(displ->framebuffer,
|
||||
displ->framebuffer+displ->stride*(FONT_YSIZE*FONT_YFACTOR+FONT_YGAP),
|
||||
displ->stride*displ->yres-FONT_YSIZE);
|
||||
|
||||
unsigned int cnt = (displ->stride * (FONT_YSIZE * FONT_YFACTOR + FONT_YGAP))/4;
|
||||
unsigned int *ptr = (unsigned int*)(displ->framebuffer + displ->stride * (displ->yres - FONT_YSIZE));
|
||||
while(cnt--)
|
||||
*ptr++ = displ->background;
|
||||
displ->cursor_y -= FONT_YSIZE * FONT_YFACTOR + FONT_YGAP;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int displ_write(struct _reent *r,int fd, const char *ptr,int len)
|
||||
{
|
||||
int i, count = 0;
|
||||
char *tmp = (char*)ptr;
|
||||
|
||||
if(!tmp || len<=0) return -1;
|
||||
|
||||
i = 0;
|
||||
while(*tmp!='\0' && i<len) {
|
||||
count += display_putc(*tmp++);
|
||||
i++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
void ds_text_out(int xpos, int ypos, const char *str)
|
||||
{
|
||||
ypos *= (FONT_YSIZE * FONT_YFACTOR + FONT_YGAP);
|
||||
xpos *= (FONT_XSIZE * FONT_XFACTOR + FONT_XGAP);
|
||||
while(*str != '\0')
|
||||
{
|
||||
__display_drawc(xpos, ypos, *str++);
|
||||
xpos += (FONT_XSIZE * FONT_XFACTOR + FONT_XGAP);
|
||||
};
|
||||
}
|
||||
|
||||
void ds_printf(int x, int y, const char *fmt, ...)
|
||||
{
|
||||
char tmpbuf[255];
|
||||
va_list marker;
|
||||
va_start(marker,fmt);
|
||||
vsprintf(tmpbuf, fmt, marker );
|
||||
va_end(marker);
|
||||
ds_text_out(x, y, tmpbuf);
|
||||
|
||||
}
|
||||
|
||||
void ds_set_colour(int f, int b)
|
||||
{
|
||||
displ->background = b;
|
||||
displ->foreground = f;
|
||||
}
|
||||
void ds_underline(int xpos, int ypos, int len, int col)
|
||||
{
|
||||
int i;
|
||||
ypos = (ypos + 1) * (FONT_YSIZE * FONT_YFACTOR + FONT_YGAP) - 1;
|
||||
xpos *= (FONT_XSIZE * FONT_XFACTOR + FONT_XGAP)/2;
|
||||
len *= (FONT_XSIZE * FONT_XFACTOR + FONT_XGAP)/2;
|
||||
unsigned int *ptr = (unsigned int*)(displ->framebuffer + displ->stride * ypos + xpos * 4);
|
||||
for(i=0 ; i < len ; i++)
|
||||
ptr[i] = col;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,59 @@
|
||||
#ifndef __DSP_H__
|
||||
#define __DSP_H__
|
||||
|
||||
#include <gctypes.h>
|
||||
|
||||
#define DSPTASK_INIT 0
|
||||
#define DSPTASK_RUN 1
|
||||
#define DSPTASK_YIELD 2
|
||||
#define DSPTASK_DONE 3
|
||||
|
||||
#define DSPTASK_CLEARALL 0x00000000
|
||||
#define DSPTASK_ATTACH 0x00000001
|
||||
#define DSPTASK_CANCEL 0x00000002
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef void (*DSPCallback)(void *task);
|
||||
|
||||
typedef struct _dsp_task {
|
||||
vu32 state;
|
||||
vu32 prio;
|
||||
vu32 flags;
|
||||
|
||||
u16 init_vec;
|
||||
u16 resume_vec;
|
||||
|
||||
u16 *iram_maddr;
|
||||
u32 iram_len;
|
||||
u16 iram_addr;
|
||||
|
||||
u16 *dram_maddr;
|
||||
u32 dram_len;
|
||||
u16 dram_addr;
|
||||
|
||||
DSPCallback init_cb;
|
||||
DSPCallback res_cb;
|
||||
DSPCallback done_cb;
|
||||
DSPCallback req_cb;
|
||||
|
||||
struct _dsp_task *next;
|
||||
struct _dsp_task *prev;
|
||||
} dsptask_t;
|
||||
|
||||
void DSP_Init();
|
||||
u32 DSP_CheckMailTo();
|
||||
u32 DSP_CheckMailFrom();
|
||||
u32 DSP_ReadMailFrom();
|
||||
void DSP_AssertInt();
|
||||
void DSP_SendMailTo(u32 mail);
|
||||
u32 DSP_ReadCPUtoDSP();
|
||||
dsptask_t* DSP_AddTask(dsptask_t *task);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
||||
#ifndef _MSCVER
|
||||
const unsigned short dsp_code[0x1000] = {
|
||||
#else
|
||||
const unsigned short dsp_code[0x1000] __attribute__ ((aligned (64))) = {
|
||||
#endif
|
||||
|
||||
0x029f, 0x015b, 0x029f, 0x015f, 0x029f, 0x0163, 0x029f, 0x0167, 0x029f, 0x016b, 0x029f, 0x016f, 0x029f, 0x0180, 0x029f, 0x0184,
|
||||
0x1302, 0x1303, 0x1204, 0x1305, 0x1306, 0x8e00, 0x0092, 0x00ff, 0x8900, 0x8100, 0x02bf, 0x014f, 0x16fc, 0x8888, 0x16fd, 0xdead,
|
||||
0x16fb, 0x0001, 0x02bf, 0x0155, 0x26ff, 0x0340, 0x7fff, 0x00ff, 0x0f7e, 0x00fe, 0x0f7f, 0x0098, 0x0000, 0x0099, 0x0000, 0x009a,
|
||||
0x2000, 0x00dc, 0x0f7e, 0x00de, 0x0f7f, 0x02bf, 0x013f, 0x02bf, 0x014f, 0x16fc, 0x8888, 0x16fd, 0xbeef, 0x16fb, 0x0001, 0x02bf,
|
||||
0x0155, 0x26ff, 0x0340, 0x7fff, 0x00ff, 0x0f7e, 0x00fe, 0x0f7f, 0x0098, 0x0f80, 0x0099, 0x0000, 0x009a, 0x0080, 0x00dc, 0x0f7e,
|
||||
0x00de, 0x0f7f, 0x02bf, 0x013f, 0x0080, 0x0f81, 0x1901, 0x1902, 0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, 0x190a,
|
||||
0x190b, 0x190c, 0x190d, 0x190e, 0x190f, 0x1910, 0x1911, 0x1912, 0x1913, 0x1914, 0x1915, 0x1916, 0x1917, 0x1918, 0x1919, 0x191a,
|
||||
0x191b, 0x191c, 0x191d, 0x191e, 0x191f, 0x00c0, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x8600, 0x02bf, 0x0194, 0x029f, 0x0136,
|
||||
0x00de, 0x03f1, 0x02bf, 0x0194, 0x0200, 0x0a60, 0x02bf, 0x0194, 0x1c7e, 0x02bf, 0x0194, 0x8100, 0x02bf, 0x0194, 0x8900, 0x02bf,
|
||||
0x0194, 0x009f, 0x00a0, 0x02bf, 0x0194, 0x00de, 0x03f1, 0x02bf, 0x0194, 0x5d00, 0x02bf, 0x0194, 0x0e50, 0x02bf, 0x0194, 0x0750,
|
||||
0x02bf, 0x0194, 0x0270, 0x02bf, 0x0194, 0x5d00, 0x02bf, 0x0194, 0x00da, 0x03f2, 0x02bf, 0x0194, 0x8600, 0x02bf, 0x0194, 0x0290,
|
||||
0x00e7, 0x00de, 0x03f3, 0x02bf, 0x0194, 0x5c00, 0x02bf, 0x0194, 0x0293, 0x00bc, 0x029f, 0x00f0, 0x00db, 0x03f7, 0x02bf, 0x0194,
|
||||
0x009e, 0x8000, 0x02bf, 0x0194, 0x4600, 0x02bf, 0x0194, 0x029f, 0x00d4, 0x00db, 0x03f7, 0x02bf, 0x0194, 0x009e, 0x8000, 0x02bf,
|
||||
0x0194, 0x5600, 0x02bf, 0x0194, 0x00fe, 0x03f5, 0x02bf, 0x0194, 0x1fda, 0x02bf, 0x0194, 0x7c00, 0x02bf, 0x0194, 0x1f5e, 0x02bf,
|
||||
0x0194, 0x00fe, 0x03f2, 0x02bf, 0x0194, 0x029f, 0x00f0, 0x00de, 0x03f4, 0x02bf, 0x0194, 0x5d00, 0x02bf, 0x0194, 0x0293, 0x00c9,
|
||||
0x8900, 0x02bf, 0x0194, 0x00dd, 0x03f5, 0x02bf, 0x0194, 0x1501, 0x02bf, 0x0194, 0x8100, 0x02bf, 0x0194, 0x00dc, 0x03f6, 0x02bf,
|
||||
0x0194, 0x008b, 0x009f, 0x02bf, 0x0194, 0x0080, 0x0a00, 0x02bf, 0x0194, 0x0900, 0x02bf, 0x0194, 0x1150, 0x011d, 0x1878, 0x02bf,
|
||||
0x0194, 0x4c00, 0x02bf, 0x0194, 0x1cfe, 0x02bf, 0x0194, 0x001f, 0x02bf, 0x0194, 0x1fd9, 0x02bf, 0x0194, 0x1b18, 0x02bf, 0x0194,
|
||||
0x009f, 0x0a60, 0x02bf, 0x0194, 0x1fc3, 0x02bf, 0x0194, 0x5c00, 0x02bf, 0x0194, 0x00fe, 0x03f1, 0x02bf, 0x0194, 0x00fc, 0x03f6,
|
||||
0x02bf, 0x0194, 0x008b, 0xffff, 0x02bf, 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x029f, 0x013d, 0x00fc,
|
||||
0xffce, 0x00fe, 0xffcf, 0x00f8, 0xffcd, 0x00f9, 0xffc9, 0x00fa, 0xffcb, 0x27c9, 0x03c0, 0x0004, 0x029d, 0x0149, 0x02df, 0x27fc,
|
||||
0x03c0, 0x8000, 0x029d, 0x014f, 0x02df, 0x27fe, 0x03c0, 0x8000, 0x029c, 0x0155, 0x02df, 0x009e, 0x0000, 0x029f, 0x0188, 0x009e,
|
||||
0x0001, 0x029f, 0x0188, 0x009e, 0x0002, 0x029f, 0x0188, 0x009e, 0x0003, 0x029f, 0x0188, 0x009e, 0x0004, 0x029f, 0x0188, 0x8e00,
|
||||
0x1dbc, 0x1dbe, 0x8100, 0x1fcd, 0x1f8d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ff, 0x009e, 0x0005, 0x029f, 0x0188,
|
||||
0x009e, 0x0006, 0x029f, 0x0188, 0x009e, 0x0007, 0x029f, 0x0188, 0x27fc, 0x03c0, 0x8000, 0x029d, 0x0188, 0x16fc, 0x8bad, 0x00eb,
|
||||
0xfffd, 0x16fb, 0x0001, 0x0021, 0x00e0, 0x0f80, 0x0080, 0x0f81, 0x1b01, 0x1b02, 0x1b03, 0x1b04, 0x1b05, 0x1b06, 0x1b07, 0x1b08,
|
||||
0x1b09, 0x1b0a, 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b0f, 0x1b10, 0x1b11, 0x1b12, 0x1b13, 0x1b14, 0x1b15, 0x1b16, 0x1b17, 0x1b18,
|
||||
0x1b19, 0x1b1a, 0x1b1b, 0x1b1c, 0x1b1d, 0x1b1e, 0x1b1f, 0x0098, 0x0000, 0x0099, 0x0001, 0x009a, 0x0200, 0x00dc, 0x0f7e, 0x00de,
|
||||
0x0f7f, 0x0081, 0x0010, 0x0061, 0x01ce, 0x02bf, 0x013f, 0x0200, 0x0200, 0x1ff8, 0x0300, 0x0100, 0x1f1f, 0x0000, 0x0000, 0x02bf,
|
||||
0x014f, 0x16fc, 0x8888, 0x16fd, 0xfeeb, 0x16fb, 0x0001, 0x02bf, 0x0155, 0x26ff, 0x0340, 0x7fff, 0x0080, 0x0f81, 0x1901, 0x1902,
|
||||
0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, 0x190a, 0x190b, 0x190c, 0x190d, 0x190e, 0x190f, 0x1910, 0x1911, 0x1912,
|
||||
0x1913, 0x1914, 0x1915, 0x1916, 0x1917, 0x1918, 0x1919, 0x191a, 0x191b, 0x191c, 0x191d, 0x191e, 0x191f, 0x00c0, 0x0f80, 0x02df,
|
||||
0x8e00, 0x02bf, 0x0194, 0x8f00, 0x02df, 0x0082, 0x0000, 0x009e, 0x1000, 0x0081, 0x1000, 0x0061, 0x0215, 0x1c7e, 0x80f0, 0x1fe0,
|
||||
0x1c02, 0x1b1b, 0x1c40, 0x1c1f, 0x0401, 0x0000, 0x02df,
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
../../Binary/x64/DSPTool.exe -h dsp_code dsp_code.ds
|
||||
@@ -0,0 +1,97 @@
|
||||
#ifndef __IRQ_H__
|
||||
#define __IRQ_H__
|
||||
|
||||
#include <gctypes.h>
|
||||
#include "context.h"
|
||||
|
||||
#define IM_NONE (0x00000000)
|
||||
#define IRQ_MEM0 0
|
||||
#define IRQ_MEM1 1
|
||||
#define IRQ_MEM2 2
|
||||
#define IRQ_MEM3 3
|
||||
#define IRQ_MEMADDRESS 4
|
||||
#define IRQ_DSP_AI 5
|
||||
#define IRQ_DSP_ARAM 6
|
||||
#define IRQ_DSP_DSP 7
|
||||
#define IRQ_AI_AI 8
|
||||
#define IRQ_EXI0_EXI 9
|
||||
#define IRQ_EXI0_TC 10
|
||||
#define IRQ_EXI0_EXT 11
|
||||
#define IRQ_EXI1_EXI 12
|
||||
#define IRQ_EXI1_TC 13
|
||||
#define IRQ_EXI1_EXT 14
|
||||
#define IRQ_EXI2_EXI 15
|
||||
#define IRQ_EXI2_TC 16
|
||||
#define IRQ_PI_CP 17
|
||||
#define IRQ_PI_PETOKEN 18
|
||||
#define IRQ_PI_PEFINISH 19
|
||||
#define IRQ_PI_SI 20
|
||||
#define IRQ_PI_DI 21
|
||||
#define IRQ_PI_RSW 22
|
||||
#define IRQ_PI_ERROR 23
|
||||
#define IRQ_PI_VI 24
|
||||
#define IRQ_PI_DEBUG 25
|
||||
#define IRQ_PI_HSP 26
|
||||
#define IRQ_MAX 32
|
||||
|
||||
#define IRQMASK(irq) (0x80000000u>>irq)
|
||||
|
||||
#define IM_MEM0 IRQMASK(IRQ_MEM0)
|
||||
#define IM_MEM1 IRQMASK(IRQ_MEM1)
|
||||
#define IM_MEM2 IRQMASK(IRQ_MEM2)
|
||||
#define IM_MEM3 IRQMASK(IRQ_MEM3)
|
||||
#define IM_MEMADDRESS IRQMASK(IRQ_MEMADDRESS)
|
||||
#define IM_MEM (IM_MEM0|IM_MEM1|IM_MEM2|IM_MEM3|IM_MEMADDRESS)
|
||||
|
||||
#define IM_DSP_AI IRQMASK(IRQ_DSP_AI)
|
||||
#define IM_DSP_ARAM IRQMASK(IRQ_DSP_ARAM)
|
||||
#define IM_DSP_DSP IRQMASK(IRQ_DSP_DSP)
|
||||
#define IM_DSP (IM_DSP_AI|IM_DSP_ARAM|IM_DSP_DSP)
|
||||
|
||||
#define IM_AI_AI IRQMASK(IRQ_AI_AI)
|
||||
#define IM_AI (IRQ_AI_AI)
|
||||
|
||||
#define IM_EXI0_EXI IRQMASK(IRQ_EXI0_EXI)
|
||||
#define IM_EXI0_TC IRQMASK(IRQ_EXI0_TC)
|
||||
#define IM_EXI0_EXT IRQMASK(IRQ_EXI0_EXT)
|
||||
#define IM_EXI0 (IM_EXI0_EXI|IM_EXI0_TC|IM_EXI0_EXT)
|
||||
|
||||
#define IM_EXI1_EXI IRQMASK(IRQ_EXI1_EXI)
|
||||
#define IM_EXI1_TC IRQMASK(IRQ_EXI1_TC)
|
||||
#define IM_EXI1_EXT IRQMASK(IRQ_EXI1_EXT)
|
||||
#define IM_EXI1 (IM_EXI1_EXI|IM_EXI1_TC|IM_EXI1_EXT)
|
||||
|
||||
#define IM_EXI2_EXI IRQMASK(IRQ_EXI2_EXI)
|
||||
#define IM_EXI2_TC IRQMASK(IRQ_EXI2_TC)
|
||||
#define IM_EXI2 (IM_EXI2_EXI|IM_EXI2_TC)
|
||||
#define IM_EXI (IM_EXI0|IM_EXI1|IM_EXI2)
|
||||
|
||||
#define IM_PI_CP IRQMASK(IRQ_PI_CP)
|
||||
#define IM_PI_PETOKEN IRQMASK(IRQ_PI_PETOKEN)
|
||||
#define IM_PI_PEFINISH IRQMASK(IRQ_PI_PEFINISH)
|
||||
#define IM_PI_SI IRQMASK(IRQ_PI_SI)
|
||||
#define IM_PI_DI IRQMASK(IRQ_PI_DI)
|
||||
#define IM_PI_RSW IRQMASK(IRQ_PI_RSW)
|
||||
#define IM_PI_ERROR IRQMASK(IRQ_PI_ERROR)
|
||||
#define IM_PI_VI IRQMASK(IRQ_PI_VI)
|
||||
#define IM_PI_DEBUG IRQMASK(IRQ_PI_DEBUG)
|
||||
#define IM_PI_HSP IRQMASK(IRQ_PI_HSP)
|
||||
#define IM_PI (IM_PI_CP|IM_PI_PETOKEN|IM_PI_PEFINISH|IM_PI_SI|IM_PI_DI|IM_PI_RSW|IM_PI_ERROR|IM_PI_VI|IM_PI_DEBUG|IM_PI_HSP)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef void (raw_irq_handler_t)(u32,void *);
|
||||
|
||||
raw_irq_handler_t* IRQ_Request(u32 nIrq,raw_irq_handler_t *pHndl,void *pCtx);
|
||||
raw_irq_handler_t* IRQ_Free(u32 nIrq);
|
||||
raw_irq_handler_t* IRQ_GetHandler(u32 nIrq);
|
||||
u32 IRQ_Disable();
|
||||
void IRQ_Restore(u32 level);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,98 @@
|
||||
#ifndef __PROCESSOR_H__
|
||||
#define __PROCESSOR_H__
|
||||
|
||||
#include <gctypes.h>
|
||||
|
||||
#define __stringify(rn) #rn
|
||||
#define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v)))
|
||||
|
||||
#define ppcsync() asm volatile("sc")
|
||||
#define ppchalt() ({ \
|
||||
asm volatile("sync"); \
|
||||
while(1) { \
|
||||
asm volatile("nop"); \
|
||||
asm volatile("li 3,0"); \
|
||||
asm volatile("nop"); \
|
||||
} \
|
||||
})
|
||||
|
||||
#define mfdcr(_rn) ({register u32 _rval; \
|
||||
asm volatile("mfdcr %0," __stringify(_rn) \
|
||||
: "=r" (_rval)); _rval;})
|
||||
#define mtdcr(rn, val) asm volatile("mtdcr " __stringify(rn) ",%0" : : "r" (val))
|
||||
|
||||
#define mfmsr() ({register u32 _rval; \
|
||||
asm volatile("mfmsr %0" : "=r" (_rval)); _rval;})
|
||||
#define mtmsr(val) asm volatile("mtmsr %0" : : "r" (val))
|
||||
|
||||
#define mfdec() ({register u32 _rval; \
|
||||
asm volatile("mfdec %0" : "=r" (_rval)); _rval;})
|
||||
#define mtdec(_val) asm volatile("mtdec %0" : : "r" (_val))
|
||||
|
||||
#define mfspr(_rn) ({register u32 _rval; \
|
||||
asm volatile("mfspr %0," __stringify(_rn) \
|
||||
: "=r" (_rval)); _rval;})
|
||||
#define mtspr(_rn, _val) asm volatile("mtspr " __stringify(_rn) ",%0" : : "r" (_val))
|
||||
|
||||
#define mfwpar() mfspr(921)
|
||||
#define mtwpar(_val) mtspr(921,_val)
|
||||
|
||||
#define mfmmcr0() mfspr(952)
|
||||
#define mtmmcr0(_val) mtspr(952,_val)
|
||||
#define mfmmcr1() mfspr(956)
|
||||
#define mtmmcr1(_val) mtspr(956,_val)
|
||||
|
||||
#define mfpmc1() mfspr(953)
|
||||
#define mtpmc1(_val) mtspr(953,_val)
|
||||
#define mfpmc2() mfspr(954)
|
||||
#define mtpmc2(_val) mtspr(954,_val)
|
||||
#define mfpmc3() mfspr(957)
|
||||
#define mtpmc3(_val) mtspr(957,_val)
|
||||
#define mfpmc4() mfspr(958)
|
||||
#define mtpmc4(_val) mtspr(958,_val)
|
||||
|
||||
#define cntlzw(_val) ({register u32 _rval; \
|
||||
asm volatile("cntlzw %0, %1" : "=r"((_rval)) : "r"((_val))); _rval;})
|
||||
|
||||
#define _CPU_MSR_GET( _msr_value ) \
|
||||
do { \
|
||||
_msr_value = 0; \
|
||||
asm volatile ("mfmsr %0" : "=&r" ((_msr_value)) : "0" ((_msr_value))); \
|
||||
} while (0)
|
||||
|
||||
#define _CPU_MSR_SET( _msr_value ) \
|
||||
{ asm volatile ("mtmsr %0" : "=&r" ((_msr_value)) : "0" ((_msr_value))); }
|
||||
|
||||
#define _CPU_ISR_Enable() \
|
||||
{ register u32 _val = 0; \
|
||||
asm volatile ("mfmsr %0; ori %0,%0,0x8000; mtmsr %0" : \
|
||||
"=&r" (_val) : "0" (_val));\
|
||||
}
|
||||
|
||||
#define _CPU_ISR_Disable( _isr_cookie ) \
|
||||
{ register u32 _disable_mask = MSR_EE; \
|
||||
_isr_cookie = 0; \
|
||||
asm volatile ( \
|
||||
"mfmsr %0; andc %1,%0,%1; mtmsr %1" : \
|
||||
"=&r" ((_isr_cookie)), "=&r" ((_disable_mask)) : \
|
||||
"0" ((_isr_cookie)), "1" ((_disable_mask)) \
|
||||
); \
|
||||
}
|
||||
|
||||
#define _CPU_ISR_Restore( _isr_cookie ) \
|
||||
{ \
|
||||
asm volatile ( "mtmsr %0" : \
|
||||
"=r" ((_isr_cookie)) : \
|
||||
"0" ((_isr_cookie))); \
|
||||
}
|
||||
|
||||
#define _CPU_ISR_Flash( _isr_cookie ) \
|
||||
{ register u32 _disable_mask = MSR_EE; \
|
||||
asm volatile ( \
|
||||
"mtmsr %0; andc %1,%0,%1; mtmsr %1" : \
|
||||
"=r" ((_isr_cookie)), "=r" ((_disable_mask)) : \
|
||||
"0" ((_isr_cookie)), "1" ((_disable_mask)) \
|
||||
); \
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Version="9,00"
|
||||
Name="DSPTool"
|
||||
ProjectGUID="{1970D175-3DE8-4738-942A-4D98D1CDBF64}"
|
||||
RootNamespace="DSPTool"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#include "FileUtil.h"
|
||||
#include "DSPCodeUtil.h"
|
||||
|
||||
#include "dsp_test.h"
|
||||
//#include "dsp_test.h"
|
||||
|
||||
// Stub out the dsplib host stuff, since this is just a simple cmdline tools.
|
||||
u8 DSPHost_ReadHostMemory(u32 addr) { return 0; }
|
||||
|
||||
Reference in New Issue
Block a user