Compare commits
10 Commits
c0e46834c3
...
5146395169
Author | SHA1 | Date | |
---|---|---|---|
5146395169 | |||
2cc1a27427 | |||
582261eef5 | |||
3e162c8d14 | |||
fcf31ce095 | |||
06bc9b49bf | |||
f6c9380ece | |||
0c7c2e663a | |||
5f515a20d4 | |||
1a72e2068e |
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,3 +6,4 @@ segasmp/lib/sys_init.o
|
|||||||
*.bin
|
*.bin
|
||||||
*.gch
|
*.gch
|
||||||
*.out
|
*.out
|
||||||
|
*.d
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 saturn contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
59
common.mk
59
common.mk
@ -1,6 +1,7 @@
|
|||||||
LIB ?= .
|
LIB ?= .
|
||||||
OPT ?= -Og
|
OPT ?= -Og
|
||||||
DEBUG ?= -g -gdwarf-4
|
DEBUG ?= -g -gdwarf-4
|
||||||
|
GENERATED ?=
|
||||||
|
|
||||||
AARCH = --isa=sh2 --big
|
AARCH = --isa=sh2 --big
|
||||||
AFLAGS = --fatal-warnings
|
AFLAGS = --fatal-warnings
|
||||||
@ -8,6 +9,7 @@ AFLAGS = --fatal-warnings
|
|||||||
CARCH = -m2 -mb
|
CARCH = -m2 -mb
|
||||||
CFLAGS += -falign-functions=4 -ffunction-sections -fdata-sections -fshort-enums -ffreestanding -nostdlib
|
CFLAGS += -falign-functions=4 -ffunction-sections -fdata-sections -fshort-enums -ffreestanding -nostdlib
|
||||||
CFLAGS += -Wall -Werror -Wfatal-errors -Wno-error=unused-variable
|
CFLAGS += -Wall -Werror -Wfatal-errors -Wno-error=unused-variable
|
||||||
|
DEPFLAGS = -MMD -E
|
||||||
LDFLAGS = --gc-sections --print-gc-sections --no-warn-rwx-segment --print-memory-usage --entry=_start --orphan-handling=error
|
LDFLAGS = --gc-sections --print-gc-sections --no-warn-rwx-segment --print-memory-usage --entry=_start --orphan-handling=error
|
||||||
CXXFLAGS = -std=c++20 -fno-exceptions -fno-non-call-exceptions -fno-rtti -fno-threadsafe-statics
|
CXXFLAGS = -std=c++20 -fno-exceptions -fno-non-call-exceptions -fno-rtti -fno-threadsafe-statics
|
||||||
|
|
||||||
@ -28,19 +30,36 @@ define BUILD_BINARY_O
|
|||||||
$< $@
|
$< $@
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
as_obj_binary = _binary_$(subst .,_,$(subst /,_,$(basename $(1))))
|
||||||
|
|
||||||
|
define BUILD_BINARY_H
|
||||||
|
@echo gen $@
|
||||||
|
@echo '#pragma once' > $@
|
||||||
|
@echo '#include <stdint.h>' >> $@
|
||||||
|
@echo 'extern uint32_t $(call as_obj_binary,$@)_start __asm("$(call as_obj_binary,$@)_start");' >> $@
|
||||||
|
@echo 'extern uint32_t $(call as_obj_binary,$@)_end __asm("$(call as_obj_binary,$@)_end");' >> $@
|
||||||
|
@echo 'extern uint32_t $(call as_obj_binary,$@)_size __asm("$(call as_obj_binary,$@)_size");' >> $@
|
||||||
|
endef
|
||||||
|
|
||||||
%.o: %.s
|
%.o: %.s
|
||||||
$(AS) $(AARCH) $(AFLAGS) $(DEBUG) $< -o $@
|
$(AS) $(AARCH) $(AFLAGS) $(DEBUG) $< -o $@
|
||||||
|
|
||||||
%.o: %.S
|
%.o: %.S
|
||||||
$(CC) $(CARCH) $(CFLAGS) $(OPT) $(DEBUG) -c $< -o $@
|
$(CC) $(CARCH) $(CFLAGS) $(OPT) $(DEBUG) -c $< -o $@
|
||||||
|
|
||||||
%.o: %.c
|
%.c.d: | $(GENERATED)
|
||||||
|
$(CC) $(CARCH) $(CFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -c $(basename $@) -MF $@ -o /dev/null
|
||||||
|
|
||||||
|
%.o: %.c %.c.d
|
||||||
$(CC) $(CARCH) $(CFLAGS) $(OPT) $(DEBUG) -c $< -o $@
|
$(CC) $(CARCH) $(CFLAGS) $(OPT) $(DEBUG) -c $< -o $@
|
||||||
|
|
||||||
%.o: %.cpp
|
%.cpp.d: | $(GENERATED)
|
||||||
|
$(CXX) $(CARCH) $(CFLAGS) $(CXXFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -c $(basename $@) -MF $@ -o /dev/null
|
||||||
|
|
||||||
|
%.o: %.cpp %.cpp.d
|
||||||
$(CXX) $(CARCH) $(CFLAGS) $(CXXFLAGS) $(OPT) $(DEBUG) -c $< -o $@
|
$(CXX) $(CARCH) $(CFLAGS) $(CXXFLAGS) $(OPT) $(DEBUG) -c $< -o $@
|
||||||
|
|
||||||
%.elf:
|
%.elf: $(LIB)/start.o
|
||||||
$(LD) $(LDFLAGS) -T $(LIB)/sh2.lds $^ -o $@
|
$(LD) $(LDFLAGS) -T $(LIB)/sh2.lds $^ -o $@
|
||||||
|
|
||||||
%.bin: %.elf
|
%.bin: %.elf
|
||||||
@ -52,20 +71,20 @@ endef
|
|||||||
--rename-section .data=.rodata,alloc,load,readonly,data,contents \
|
--rename-section .data=.rodata,alloc,load,readonly,data,contents \
|
||||||
$< $@
|
$< $@
|
||||||
|
|
||||||
SYS_IP_OBJ += $(LIB)/sys_id.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_id.o
|
||||||
SYS_IP_OBJ += $(LIB)/sys_sec.o
|
SYS_IP_OBJ += $(LIB)/ip/segasmp/sys_sec.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_area.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_area.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_areb.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_areb.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_aree.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_aree.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_arej.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_arej.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_arek.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_arek.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_arel.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_arel.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_aret.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_aret.o
|
||||||
SYS_IP_OBJ += $(LIB)/area/sys_areu.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_areu.o
|
||||||
SYS_IP_OBJ += $(LIB)/sys_init.o
|
SYS_IP_OBJ += $(LIB)/ip/sys_init.o
|
||||||
SYS_IP_OBJ += $(LIB)/smpsys.o
|
SYS_IP_OBJ += $(LIB)/ip/smpsys.o
|
||||||
|
|
||||||
$(LIB)/sys_%.o: $(LIB)/segasmp/lib/sys_%.o
|
$(LIB)/ip/segasmp/sys_%.o: $(LIB)/segasmp/lib/sys_%.o
|
||||||
$(OBJCOPY) -I coff-sh -O elf32-sh -g \
|
$(OBJCOPY) -I coff-sh -O elf32-sh -g \
|
||||||
--rename-section .text=.text.$* \
|
--rename-section .text=.text.$* \
|
||||||
$< $@
|
$< $@
|
||||||
@ -116,9 +135,15 @@ sys_ip.elf: $(SYS_IP_OBJ)
|
|||||||
@echo " INDEX 01 00:00:00" >> $@
|
@echo " INDEX 01 00:00:00" >> $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.iso *.o *.bin *.elf *.cue
|
rm -f *.iso *.o *.d *.bin *.elf *.cue *.gch
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.INTERMEDIATE:
|
.INTERMEDIATE:
|
||||||
.SECONDARY:
|
.SECONDARY:
|
||||||
.PHONY: all clean
|
.PHONY: all clean
|
||||||
|
|
||||||
|
%: RCS/%,v
|
||||||
|
%: RCS/%
|
||||||
|
%: %,v
|
||||||
|
%: s.%
|
||||||
|
%: SCCS/s.%
|
||||||
|
0
ip/segasmp/.empty
Normal file
0
ip/segasmp/.empty
Normal file
@ -27,6 +27,17 @@ define BUILD_BINARY_O
|
|||||||
$< $@
|
$< $@
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
as_obj_binary = _binary_$(subst /,_,$(subst .,_,$(basename $(1))))
|
||||||
|
|
||||||
|
define BUILD_BINARY_H
|
||||||
|
@echo $@
|
||||||
|
@echo '#pragma once' > $@
|
||||||
|
@echo '#include <stdint.h>' >> $@
|
||||||
|
@echo 'extern uint32_t $(call as_obj_binary,$@)_start __asm("$(call as_obj_binary,$@)_start");' >> $@
|
||||||
|
@echo 'extern uint32_t $(call as_obj_binary,$@)_end __asm("$(call as_obj_binary,$@)_end");' >> $@
|
||||||
|
@echo 'extern uint32_t $(call as_obj_binary,$@)_size __asm("$(call as_obj_binary,$@)_size");' >> $@
|
||||||
|
endef
|
||||||
|
|
||||||
all: main.bin
|
all: main.bin
|
||||||
|
|
||||||
%.o: %.s
|
%.o: %.s
|
||||||
|
142
scu.h
142
scu.h
@ -70,6 +70,148 @@ extern struct scu scu __asm("scu");
|
|||||||
|
|
||||||
/* bits */
|
/* bits */
|
||||||
|
|
||||||
|
#define D0R__READ_ADDRESS(n) ((n) & 0x3ffffff)
|
||||||
|
#define D0W__WRITE_ADDRESS(n) ((n) & 0x3ffffff)
|
||||||
|
#define D0C__BYTE_COUNT(n) ((n) & 0x7ffff)
|
||||||
|
enum d0ad_bits {
|
||||||
|
D0AD__D0RA__0BYTES = (0 << 8),
|
||||||
|
D0AD__D0RA__4BYTES = (1 << 8),
|
||||||
|
D0AD__D0WA__0BYTES = (0b000 << 0),
|
||||||
|
D0AD__D0WA__2BYTES = (0b001 << 0),
|
||||||
|
D0AD__D0WA__4BYTES = (0b010 << 0),
|
||||||
|
D0AD__D0WA__8BYTES = (0b011 << 0),
|
||||||
|
D0AD__D0WA__16BYTES = (0b100 << 0),
|
||||||
|
D0AD__D0WA__32BYTES = (0b101 << 0),
|
||||||
|
D0AD__D0WA__64BYTES = (0b110 << 0),
|
||||||
|
D0AD__D0WA__128BYTES = (0b111 << 0),
|
||||||
|
};
|
||||||
|
enum d0en_bits {
|
||||||
|
D0EN__D0EN = (1 << 8),
|
||||||
|
D0EN__D0GO = (1 << 0),
|
||||||
|
};
|
||||||
|
enum d0md_bits {
|
||||||
|
D0MD__D0MOD = (1 << 24),
|
||||||
|
D0MD__D0RUP = (1 << 16),
|
||||||
|
D0MD__D0WUP = (1 << 8),
|
||||||
|
D0MD__D0FT__V_BLANK_IN = (0b000 << 0),
|
||||||
|
D0MD__D0FT__V_BLANK_OUT = (0b001 << 0),
|
||||||
|
D0MD__D0FT__H_BLANK_IN = (0b010 << 0),
|
||||||
|
D0MD__D0FT__TIMER_0 = (0b011 << 0),
|
||||||
|
D0MD__D0FT__TIMER_1 = (0b100 << 0),
|
||||||
|
D0MD__D0FT__SOUND_REQ = (0b101 << 0),
|
||||||
|
D0MD__D0FT__SPRITE_DRAW = (0b110 << 0),
|
||||||
|
D0MD__D0FT__FACTOR_BIT = (0b111 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
#define D1R__READ_ADDRESS(n) ((n) & 0x3ffffff)
|
||||||
|
#define D1W__WRITE_ADDRESS(n) ((n) & 0x3ffffff)
|
||||||
|
#define D1C__BYTE_COUNT(n) ((n) & 0x7ffff)
|
||||||
|
enum d1ad_bits {
|
||||||
|
D1AD__D1RA__0BYTES = (0 << 8),
|
||||||
|
D1AD__D1RA__4BYTES = (1 << 8),
|
||||||
|
D1AD__D1WA__0BYTES = (0b000 << 0),
|
||||||
|
D1AD__D1WA__2BYTES = (0b001 << 0),
|
||||||
|
D1AD__D1WA__4BYTES = (0b010 << 0),
|
||||||
|
D1AD__D1WA__8BYTES = (0b011 << 0),
|
||||||
|
D1AD__D1WA__16BYTES = (0b100 << 0),
|
||||||
|
D1AD__D1WA__32BYTES = (0b101 << 0),
|
||||||
|
D1AD__D1WA__64BYTES = (0b110 << 0),
|
||||||
|
D1AD__D1WA__128BYTES = (0b111 << 0),
|
||||||
|
};
|
||||||
|
enum d1en_bits {
|
||||||
|
D1EN__D1EN = (1 << 8),
|
||||||
|
D1EN__D1GO = (1 << 0),
|
||||||
|
};
|
||||||
|
enum d1md_bits {
|
||||||
|
D1MD__D1MOD = (1 << 24),
|
||||||
|
D1MD__D1RUP = (1 << 16),
|
||||||
|
D1MD__D1WUP = (1 << 8),
|
||||||
|
D1MD__D1FT__V_BLANK_IN = (0b000 << 0),
|
||||||
|
D1MD__D1FT__V_BLANK_OUT = (0b001 << 0),
|
||||||
|
D1MD__D1FT__H_BLANK_IN = (0b010 << 0),
|
||||||
|
D1MD__D1FT__TIMER_0 = (0b011 << 0),
|
||||||
|
D1MD__D1FT__TIMER_1 = (0b100 << 0),
|
||||||
|
D1MD__D1FT__SOUND_REQ = (0b101 << 0),
|
||||||
|
D1MD__D1FT__SPRITE_DRAW = (0b110 << 0),
|
||||||
|
D1MD__D1FT__FACTOR_BIT = (0b111 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
#define D2R__READ_ADDRESS(n) ((n) & 0x3ffffff)
|
||||||
|
#define D2W__WRITE_ADDRESS(n) ((n) & 0x3ffffff)
|
||||||
|
#define D2C__BYTE_COUNT(n) ((n) & 0x7ffff)
|
||||||
|
enum d2ad_bits {
|
||||||
|
D2AD__D2RA__0BYTES = (0 << 8),
|
||||||
|
D2AD__D2RA__4BYTES = (1 << 8),
|
||||||
|
D2AD__D2WA__0BYTES = (0b000 << 0),
|
||||||
|
D2AD__D2WA__2BYTES = (0b001 << 0),
|
||||||
|
D2AD__D2WA__4BYTES = (0b010 << 0),
|
||||||
|
D2AD__D2WA__8BYTES = (0b011 << 0),
|
||||||
|
D2AD__D2WA__16BYTES = (0b100 << 0),
|
||||||
|
D2AD__D2WA__32BYTES = (0b101 << 0),
|
||||||
|
D2AD__D2WA__64BYTES = (0b110 << 0),
|
||||||
|
D2AD__D2WA__128BYTES = (0b111 << 0),
|
||||||
|
};
|
||||||
|
enum d2en_bits {
|
||||||
|
D2EN__D2EN = (1 << 8),
|
||||||
|
D2EN__D2GO = (1 << 0),
|
||||||
|
};
|
||||||
|
enum d2md_bits {
|
||||||
|
D2MD__D2MOD = (1 << 24),
|
||||||
|
D2MD__D2RUP = (1 << 16),
|
||||||
|
D2MD__D2WUP = (1 << 8),
|
||||||
|
D2MD__D2FT__V_BLANK_IN = (0b000 << 0),
|
||||||
|
D2MD__D2FT__V_BLANK_OUT = (0b001 << 0),
|
||||||
|
D2MD__D2FT__H_BLANK_IN = (0b010 << 0),
|
||||||
|
D2MD__D2FT__TIMER_0 = (0b011 << 0),
|
||||||
|
D2MD__D2FT__TIMER_1 = (0b100 << 0),
|
||||||
|
D2MD__D2FT__SOUND_REQ = (0b101 << 0),
|
||||||
|
D2MD__D2FT__SPRITE_DRAW = (0b110 << 0),
|
||||||
|
D2MD__D2FT__FACTOR_BIT = (0b111 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum dstp_bits {
|
||||||
|
DSTP__FORCE_STOP = (1 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum dsta_bits {
|
||||||
|
DSTA__DACSD = (1 << 22),
|
||||||
|
DSTA__DACSB = (1 << 21),
|
||||||
|
DSTA__DACSA = (1 << 20),
|
||||||
|
DSTA__D1BK = (1 << 17),
|
||||||
|
DSTA__D0BK = (1 << 16),
|
||||||
|
DSTA__D2WT = (1 << 13),
|
||||||
|
DSTA__D2MV = (1 << 12),
|
||||||
|
DSTA__D1WT = (1 << 9),
|
||||||
|
DSTA__D1MV = (1 << 8),
|
||||||
|
DSTA__D0WT = (1 << 5),
|
||||||
|
DSTA__D0MV = (1 << 4),
|
||||||
|
DSTA__DDWT = (1 << 1),
|
||||||
|
DSTA__DDMV = (1 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ppaf_bits {
|
||||||
|
PPAF__PR = (1 << 26),
|
||||||
|
PPAF__EP = (1 << 25),
|
||||||
|
PPAF__T0 = (1 << 23),
|
||||||
|
PPAF__S = (1 << 22),
|
||||||
|
PPAF__Z = (1 << 21),
|
||||||
|
PPAF__C = (1 << 20),
|
||||||
|
PPAF__V = (1 << 19),
|
||||||
|
PPAF__E = (1 << 18),
|
||||||
|
PPAF__ES = (1 << 17),
|
||||||
|
PPAF__EX = (1 << 16),
|
||||||
|
PPAF__LE = (1 << 15),
|
||||||
|
#define PPAF__PRG_ADDRESS(n) (((n) & 0xff) << 0)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum pda_bits {
|
||||||
|
PDA__RA__RAM0 = (0b00 << 6),
|
||||||
|
PDA__RA__RAM1 = (0b01 << 6),
|
||||||
|
PDA__RA__RAM2 = (0b10 << 6),
|
||||||
|
PDA__RA__RAM3 = (0b11 << 6),
|
||||||
|
#define PDA__RAM_ADDRESS(n) (((n) & 0x3f) << 0)
|
||||||
|
};
|
||||||
|
|
||||||
enum ims_bits {
|
enum ims_bits {
|
||||||
IMS__A_BUS = (1 << 15),
|
IMS__A_BUS = (1 << 15),
|
||||||
IMS__DRAW_END = (1 << 13),
|
IMS__DRAW_END = (1 << 13),
|
||||||
|
26
smpc.h
26
smpc.h
@ -103,19 +103,19 @@ enum comreg_bit {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum oreg_bit {
|
enum oreg_bit {
|
||||||
OREG31__MSHON = 0b0000'0000,
|
OREG31__MSHON = 0b00000000,
|
||||||
OREG31__SSHON = 0b0000'0010,
|
OREG31__SSHON = 0b00000010,
|
||||||
OREG31__SSHOFF = 0b0000'0011,
|
OREG31__SSHOFF = 0b00000011,
|
||||||
OREG31__SNDON = 0b0000'0110,
|
OREG31__SNDON = 0b00000110,
|
||||||
OREG31__SNDOFF = 0b0000'0111,
|
OREG31__SNDOFF = 0b00000111,
|
||||||
OREG31__CDON = 0b0000'1000,
|
OREG31__CDON = 0b00001000,
|
||||||
OREG31__CDOFF = 0b0000'1001,
|
OREG31__CDOFF = 0b00001001,
|
||||||
OREG31__SYSRES = 0b0000'1101,
|
OREG31__SYSRES = 0b00001101,
|
||||||
OREG31__CKCHG352 = 0b0000'1110,
|
OREG31__CKCHG352 = 0b00001110,
|
||||||
OREG31__CKCHG320 = 0b0000'1111,
|
OREG31__CKCHG320 = 0b00001111,
|
||||||
OREG31__NMIREQ = 0b0001'1000,
|
OREG31__NMIREQ = 0b00011000,
|
||||||
OREG31__RESENAB = 0b0001'1001,
|
OREG31__RESENAB = 0b00011001,
|
||||||
OREG31__RESDISA = 0b0001'1010,
|
OREG31__RESDISA = 0b00011010,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum intback_ireg_bit {
|
enum intback_ireg_bit {
|
||||||
|
16
vdp1.h
16
vdp1.h
@ -67,6 +67,7 @@ enum ctrl_bit {
|
|||||||
CTRL__ZP__LOWER_CENTER = (0b1110 << 8),
|
CTRL__ZP__LOWER_CENTER = (0b1110 << 8),
|
||||||
CTRL__ZP__LOWER_RIGHT = (0b1111 << 8),
|
CTRL__ZP__LOWER_RIGHT = (0b1111 << 8),
|
||||||
|
|
||||||
|
CTRL__DIR__NOT_INVERTED = (0b00 << 4),
|
||||||
CTRL__DIR__INVERTED_HORIZONTALLY = (0b01 << 4),
|
CTRL__DIR__INVERTED_HORIZONTALLY = (0b01 << 4),
|
||||||
CTRL__DIR__INVERTED_VERTICALLY = (0b10 << 4),
|
CTRL__DIR__INVERTED_VERTICALLY = (0b10 << 4),
|
||||||
|
|
||||||
@ -101,9 +102,22 @@ enum pmod_bit {
|
|||||||
#define PMOD__COLOR_CALCULATION ( << 0)
|
#define PMOD__COLOR_CALCULATION ( << 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// see "Pixel Data in Frame Buffer" in VDP1 manual
|
||||||
|
// see "Figure 9.1" in VDP2 manual
|
||||||
|
// - these two figures refer to the same bits (VDP1 framebuffer data)
|
||||||
|
// see "Scroll Dot Pixels" in the VDP2 manual
|
||||||
|
// - "Dot Color" (DC0, DC1, ...) is described in the "Scroll Dot
|
||||||
|
// Pixels" section.
|
||||||
enum colr_bit {
|
enum colr_bit {
|
||||||
COLR__RGB = (1 << 15)
|
COLR__RGB = (1 << 15)
|
||||||
#define COLR__ADDRESS(n) ((n) >> 3)
|
#define COLR__LOOKUP_TABLE__ADDRESS(n) ((n) >> 3)
|
||||||
|
|
||||||
|
#define COLR__COLOR_BANK__4BPP__PALETTE(n) (((n) & 0x7f) << 4)
|
||||||
|
#define COLR__COLOR_BANK__TYPE0__PR(n) (((n) & 0b11) << 14)
|
||||||
|
#define COLR__COLOR_BANK__TYPE0__CC(n) (((n) & 0b111) << 11)
|
||||||
|
|
||||||
|
#define COLR__COLOR_BANK__TYPE1__PR(n) (((n) & 0b111) << 13)
|
||||||
|
#define COLR__COLOR_BANK__TYPE1__CC(n) (((n) & 0b11) << 11)
|
||||||
};
|
};
|
||||||
|
|
||||||
//enum srca_bit {
|
//enum srca_bit {
|
||||||
|
354
vdp2.h
354
vdp2.h
@ -33,14 +33,34 @@ typedef struct vdp2_reg {
|
|||||||
reg16 VCNT; /* V-COUNTER */
|
reg16 VCNT; /* V-COUNTER */
|
||||||
reg16 _res0;
|
reg16 _res0;
|
||||||
reg16 RAMCTL; /* RAM CONTROL */
|
reg16 RAMCTL; /* RAM CONTROL */
|
||||||
reg16 CYCA0L; /* VRAM CYCLE PATTERN (BANK A0) */
|
union {
|
||||||
reg16 CYCA0U; /* VRAM CYCLE PATTERN (BANK A0) */
|
struct {
|
||||||
reg16 CYCA1L; /* VRAM CYCLE PATTERN (BANK A1) */
|
reg16 CYCA0L; /* VRAM CYCLE PATTERN (BANK A0) */
|
||||||
reg16 CYCA1U; /* VRAM CYCLE PATTERN (BANK A1) */
|
reg16 CYCA0U; /* VRAM CYCLE PATTERN (BANK A0) */
|
||||||
reg16 CYCB0L; /* VRAM CYCLE PATTERN (BANK A0) */
|
};
|
||||||
reg16 CYCB0U; /* VRAM CYCLE PATTERN (BANK A0) */
|
reg32 CYCA0;
|
||||||
reg16 CYCB1L; /* VRAM CYCLE PATTERN (BANK B1) */
|
};
|
||||||
reg16 CYCB1U; /* VRAM CYCLE PATTERN (BANK B1) */
|
union {
|
||||||
|
struct {
|
||||||
|
reg16 CYCA1L; /* VRAM CYCLE PATTERN (BANK A1) */
|
||||||
|
reg16 CYCA1U; /* VRAM CYCLE PATTERN (BANK A1) */
|
||||||
|
};
|
||||||
|
reg32 CYCA1;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
reg16 CYCB0L; /* VRAM CYCLE PATTERN (BANK A0) */
|
||||||
|
reg16 CYCB0U; /* VRAM CYCLE PATTERN (BANK A0) */
|
||||||
|
};
|
||||||
|
reg32 CYCB0;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
reg16 CYCB1L; /* VRAM CYCLE PATTERN (BANK B1) */
|
||||||
|
reg16 CYCB1U; /* VRAM CYCLE PATTERN (BANK B1) */
|
||||||
|
};
|
||||||
|
reg32 CYCB1;
|
||||||
|
};
|
||||||
reg16 BGON; /* SCREEN DISPLAY ENABLE */
|
reg16 BGON; /* SCREEN DISPLAY ENABLE */
|
||||||
reg16 MZCTL; /* MOSAIC CONTROL */
|
reg16 MZCTL; /* MOSAIC CONTROL */
|
||||||
reg16 SFSEL; /* SPECIAL FUNCTION CODE SELECT */
|
reg16 SFSEL; /* SPECIAL FUNCTION CODE SELECT */
|
||||||
@ -57,14 +77,34 @@ typedef struct vdp2_reg {
|
|||||||
reg16 PLSZ; /* PLANE SIZE */
|
reg16 PLSZ; /* PLANE SIZE */
|
||||||
reg16 MPOFN; /* MAP OFFSET (NBG0~NBG3) */
|
reg16 MPOFN; /* MAP OFFSET (NBG0~NBG3) */
|
||||||
reg16 MPOFR; /* MAP OFFSET (ROTATION PARAMETER A,B) */
|
reg16 MPOFR; /* MAP OFFSET (ROTATION PARAMETER A,B) */
|
||||||
reg16 MPABN0; /* MAP (NBG0, PLANE A,B) */
|
union {
|
||||||
reg16 MPCDN0; /* MAP (NBG0, PLANE C,D) */
|
struct {
|
||||||
reg16 MPABN1; /* MAP (NBG1, PLANE A,B) */
|
reg16 MPABN0; /* MAP (NBG0, PLANE A,B) */
|
||||||
reg16 MPCDN1; /* MAP (NBG1, PLANE C,D) */
|
reg16 MPCDN0; /* MAP (NBG0, PLANE C,D) */
|
||||||
reg16 MPABN2; /* MAP (NBG2, PLANE A,B) */
|
};
|
||||||
reg16 MPCDN2; /* MAP (NBG2, PLANE C,D) */
|
reg32 MPN0;
|
||||||
reg16 MPABN3; /* MAP (NBG3, PLANE A,B) */
|
};
|
||||||
reg16 MPCDN3; /* MAP (NBG3, PLANE C,D) */
|
union {
|
||||||
|
struct {
|
||||||
|
reg16 MPABN1; /* MAP (NBG1, PLANE A,B) */
|
||||||
|
reg16 MPCDN1; /* MAP (NBG1, PLANE C,D) */
|
||||||
|
};
|
||||||
|
reg32 MPN1;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
reg16 MPABN2; /* MAP (NBG2, PLANE A,B) */
|
||||||
|
reg16 MPCDN2; /* MAP (NBG2, PLANE C,D) */
|
||||||
|
};
|
||||||
|
reg32 MPN2;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
reg16 MPABN3; /* MAP (NBG3, PLANE A,B) */
|
||||||
|
reg16 MPCDN3; /* MAP (NBG3, PLANE C,D) */
|
||||||
|
};
|
||||||
|
reg32 MPN3;
|
||||||
|
};
|
||||||
reg16 MPABRA; /* MAP (ROTATION PARAMETER A, PLANE A,B) */
|
reg16 MPABRA; /* MAP (ROTATION PARAMETER A, PLANE A,B) */
|
||||||
reg16 MPCDRA; /* MAP (ROTATION PARAMETER A, PLANE C,D) */
|
reg16 MPCDRA; /* MAP (ROTATION PARAMETER A, PLANE C,D) */
|
||||||
reg16 MPEFRA; /* MAP (ROTATION PARAMETER A, PLANE E,F) */
|
reg16 MPEFRA; /* MAP (ROTATION PARAMETER A, PLANE E,F) */
|
||||||
@ -73,7 +113,7 @@ typedef struct vdp2_reg {
|
|||||||
reg16 MPKLRA; /* MAP (ROTATION PARAMETER A, PLANE K,L) */
|
reg16 MPKLRA; /* MAP (ROTATION PARAMETER A, PLANE K,L) */
|
||||||
reg16 MPMNRA; /* MAP (ROTATION PARAMETER A, PLANE M,N) */
|
reg16 MPMNRA; /* MAP (ROTATION PARAMETER A, PLANE M,N) */
|
||||||
reg16 MPOPRA; /* MAP (ROTATION PARAMETER A, PLANE O,P) */
|
reg16 MPOPRA; /* MAP (ROTATION PARAMETER A, PLANE O,P) */
|
||||||
reg16 MPABRB; /* MAP (ROTATION PARAMETER B, PLANE B,B) */
|
reg16 MPABRB; /* MAP (ROTATION PARAMETER B, PLANE A,B) */
|
||||||
reg16 MPCDRB; /* MAP (ROTATION PARAMETER B, PLANE C,D) */
|
reg16 MPCDRB; /* MAP (ROTATION PARAMETER B, PLANE C,D) */
|
||||||
reg16 MPEFRB; /* MAP (ROTATION PARAMETER B, PLANE E,F) */
|
reg16 MPEFRB; /* MAP (ROTATION PARAMETER B, PLANE E,F) */
|
||||||
reg16 MPGHRB; /* MAP (ROTATION PARAMETER B, PLANE G,H) */
|
reg16 MPGHRB; /* MAP (ROTATION PARAMETER B, PLANE G,H) */
|
||||||
@ -417,14 +457,14 @@ enum plsz_bit {
|
|||||||
PLSZ__N0PLSZ__2x2 = (0b11 << 0),
|
PLSZ__N0PLSZ__2x2 = (0b11 << 0),
|
||||||
};
|
};
|
||||||
// enum mpofn_bit {
|
// enum mpofn_bit {
|
||||||
#define MPOFN__N3MP(n) ((n) << 12)
|
#define MPOFN__N3MP(n) (((n) & 0b111) << 12)
|
||||||
#define MPOFN__N2MP(n) ((n) << 8)
|
#define MPOFN__N2MP(n) (((n) & 0b111) << 8)
|
||||||
#define MPOFN__N1MP(n) ((n) << 4)
|
#define MPOFN__N1MP(n) (((n) & 0b111) << 4)
|
||||||
#define MPOFN__N0MP(n) ((n) << 0)
|
#define MPOFN__N0MP(n) (((n) & 0b111) << 0)
|
||||||
// };
|
// };
|
||||||
// enum mpofr_bit {
|
// enum mpofr_bit {
|
||||||
#define MPOFR__RBMP(n) ((n) << 4)
|
#define MPOFR__RBMP(n) (((n) & 0b111) << 4)
|
||||||
#define MPOFR__RAMP(n) ((n) << 0)
|
#define MPOFR__RAMP(n) (((n) & 0b111) << 0)
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// 4.8 Maps § Map Selection Register
|
// 4.8 Maps § Map Selection Register
|
||||||
@ -434,33 +474,37 @@ enum plsz_bit {
|
|||||||
#define MPABN0__N0MPA(n) ((n) << 0)
|
#define MPABN0__N0MPA(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
// enum mpcdn0_bit {
|
// enum mpcdn0_bit {
|
||||||
#define MPABN0__N0MPD(n) ((n) << 8)
|
#define MPCDN0__N0MPD(n) ((n) << 8)
|
||||||
#define MPABN0__N0MPC(n) ((n) << 0)
|
#define MPCDN0__N0MPC(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
|
#define MPN0__N0MP(n) (((n) << 24) | ((n) << 16) | ((n) << 8) | ((n) << 0))
|
||||||
// enum mpabn1_bit {
|
// enum mpabn1_bit {
|
||||||
#define MPABN1__N1MPB(n) ((n) << 8)
|
#define MPABN1__N1MPB(n) ((n) << 8)
|
||||||
#define MPABN1__N1MPA(n) ((n) << 0)
|
#define MPABN1__N1MPA(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
// enum mpcdn1_bit {
|
// enum mpcdn1_bit {
|
||||||
#define MPABN1__N1MPD(n) ((n) << 8)
|
#define MPCDN1__N1MPD(n) ((n) << 8)
|
||||||
#define MPABN1__N1MPC(n) ((n) << 0)
|
#define MPCDN1__N1MPC(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
|
#define MPN1__N1MP(n) (((n) << 24) | ((n) << 16) | ((n) << 8) | ((n) << 0))
|
||||||
// enum mpabn2_bit {
|
// enum mpabn2_bit {
|
||||||
#define MPABN2__N2MPB(n) ((n) << 8)
|
#define MPABN2__N2MPB(n) ((n) << 8)
|
||||||
#define MPABN2__N2MPA(n) ((n) << 0)
|
#define MPABN2__N2MPA(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
// enum mpcdn2_bit {
|
// enum mpcdn2_bit {
|
||||||
#define MPABN2__N2MPD(n) ((n) << 8)
|
#define MPCDN2__N2MPD(n) ((n) << 8)
|
||||||
#define MPABN2__N2MPC(n) ((n) << 0)
|
#define MPCDN2__N2MPC(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
|
#define MPN2__N2MP(n) (((n) << 24) | ((n) << 16) | ((n) << 8) | ((n) << 0))
|
||||||
// enum mpabn3_bit {
|
// enum mpabn3_bit {
|
||||||
#define MPABN3__N3MPB(n) ((n) << 8)
|
#define MPABN3__N3MPB(n) ((n) << 8)
|
||||||
#define MPABN3__N3MPA(n) ((n) << 0)
|
#define MPABN3__N3MPA(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
// enum mpcdn3_bit {
|
// enum mpcdn3_bit {
|
||||||
#define MPABN3__N3MPD(n) ((n) << 8)
|
#define MPCDN3__N3MPD(n) ((n) << 8)
|
||||||
#define MPABN3__N3MPC(n) ((n) << 0)
|
#define MPCDN3__N3MPC(n) ((n) << 0)
|
||||||
// };
|
// };
|
||||||
|
#define MPN3__N3MP(n) (((n) << 24) | ((n) << 16) | ((n) << 8) | ((n) << 0))
|
||||||
// enum mpabra_bit {
|
// enum mpabra_bit {
|
||||||
// };
|
// };
|
||||||
// enum mpcdra_bit {
|
// enum mpcdra_bit {
|
||||||
@ -591,14 +635,74 @@ enum bktau_bit {
|
|||||||
// };
|
// };
|
||||||
// enum wpey1_bit {
|
// enum wpey1_bit {
|
||||||
// };
|
// };
|
||||||
// enum wctla_bit {
|
enum wctla_bit {
|
||||||
// };
|
WCTLA__N1LOG__AND = (1 << 15), /* Overlay logic for NBG1 */
|
||||||
// enum wctlb_bit {
|
WCTLA__N1SWE = (1 << 13), /* Enable NBG1 on the Sprite window */
|
||||||
// };
|
WCTLA__N1SWA__OUTSIDE = (1 << 12), /* Enable the outside of the Sprite window */
|
||||||
// enum wctlc_bit {
|
WCTLA__N1W1E = (1 << 11), /* Enable NBG1 on the W1 window */
|
||||||
// };
|
WCTLA__N1W1A__OUTSIDE = (1 << 10), /* Enable the outside of the W1 window */
|
||||||
// enum wctld_bit {
|
WCTLA__N1W0E = (1 << 9), /* Enable NBG1 on the W0 window */
|
||||||
// };
|
WCTLA__N1W0A__OUTSIDE = (1 << 8), /* Enable the outside of the W0 window */
|
||||||
|
|
||||||
|
WCTLA__N0LOG__AND = (1 << 7), /* Overlay logic for NBG0 */
|
||||||
|
WCTLA__N0SWE = (1 << 5), /* Enable NBG0 on the Sprite window */
|
||||||
|
WCTLA__N0SWA__OUTSIDE = (1 << 4), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLA__N0W1E = (1 << 3), /* Enable NBG0 on the W1 window */
|
||||||
|
WCTLA__N0W1A__OUTSIDE = (1 << 2), /* Enable the outside of the W1 window */
|
||||||
|
WCTLA__N0W0E = (1 << 1), /* Enable NBG0 on the W0 window */
|
||||||
|
WCTLA__N0W0A__OUTSIDE = (1 << 0), /* Enable the outside of the W0 window */
|
||||||
|
};
|
||||||
|
enum wctlb_bit {
|
||||||
|
WCTLB__N3LOG__AND = (1 << 15), /* Overlay logic for NBG3 */
|
||||||
|
WCTLB__N3SWE = (1 << 13), /* Enable NBG3 on the Sprite window */
|
||||||
|
WCTLB__N3SWA__OUTSIDE = (1 << 12), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLB__N3W1E = (1 << 11), /* Enable NBG3 on the W1 window */
|
||||||
|
WCTLB__N3W1A__OUTSIDE = (1 << 10), /* Enable the outside of the W1 window */
|
||||||
|
WCTLB__N3W0E = (1 << 9), /* Enable NBG3 on the W0 window */
|
||||||
|
WCTLB__N3W0A__OUTSIDE = (1 << 8), /* Enable the outside of the W0 window */
|
||||||
|
|
||||||
|
WCTLB__N2LOG__AND = (1 << 7), /* Overlay logic for NBG2 */
|
||||||
|
WCTLB__N2SWE = (1 << 5), /* Enable NBG2 on the Sprite window */
|
||||||
|
WCTLB__N2SWA__OUTSIDE = (1 << 4), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLB__N2W1E = (1 << 3), /* Enable NBG2 on the W1 window */
|
||||||
|
WCTLB__N2W1A__OUTSIDE = (1 << 2), /* Enable the outside of the W1 window */
|
||||||
|
WCTLB__N2W0E = (1 << 1), /* Enable NBG2 on the W0 window */
|
||||||
|
WCTLB__N2W0A__OUTSIDE = (1 << 0), /* Enable the outside of the W0 window */
|
||||||
|
};
|
||||||
|
enum wctlc_bit {
|
||||||
|
WCTLC__SPLOG__AND = (1 << 15), /* Overlay logic for Sprite */
|
||||||
|
WCTLC__SPSWE = (1 << 13), /* Enable Sprite on the Sprite window */
|
||||||
|
WCTLC__SPSWA__OUTSIDE = (1 << 12), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLC__SPW1E = (1 << 11), /* Enable Sprite on the W1 window */
|
||||||
|
WCTLC__SPW1A__OUTSIDE = (1 << 10), /* Enable the outside of the W1 window */
|
||||||
|
WCTLC__SPW0E = (1 << 9), /* Enable Sprite on the W0 window */
|
||||||
|
WCTLC__SPW0A__OUTSIDE = (1 << 8), /* Enable the outside of the W0 window */
|
||||||
|
|
||||||
|
WCTLC__R0LOG__AND = (1 << 7), /* Overlay logic for RBG0 */
|
||||||
|
WCTLC__R0SWE = (1 << 5), /* Enable RBG0 on the Sprite window */
|
||||||
|
WCTLC__R0SWA__OUTSIDE = (1 << 4), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLC__R0W1E = (1 << 3), /* Enable RBG0 on the W1 window */
|
||||||
|
WCTLC__R0W1A__OUTSIDE = (1 << 2), /* Enable the outside of the W1 window */
|
||||||
|
WCTLC__R0W0E = (1 << 1), /* Enable RBG0 on the W0 window */
|
||||||
|
WCTLC__R0W0A__OUTSIDE = (1 << 0), /* Enable the outside of the W0 window */
|
||||||
|
};
|
||||||
|
enum wctld_bit {
|
||||||
|
WCTLD__CCLOG__AND = (1 << 15), /* Overlay logic for Rotation Parameter */
|
||||||
|
WCTLD__CCSWE = (1 << 13), /* Enable Rotation Parameter on the Sprite window */
|
||||||
|
WCTLD__CCSWA__OUTSIDE = (1 << 12), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLD__CCW1E = (1 << 11), /* Enable Rotation Parameter on the W1 window */
|
||||||
|
WCTLD__CCW1A__OUTSIDE = (1 << 10), /* Enable the outside of the W1 window */
|
||||||
|
WCTLD__CCW0E = (1 << 9), /* Enable Rotation Parameter on the W0 window */
|
||||||
|
WCTLD__CCW0A__OUTSIDE = (1 << 8), /* Enable the outside of the W0 window */
|
||||||
|
|
||||||
|
WCTLD__RPLOG__AND = (1 << 7), /* Overlay logic for Color Calculation */
|
||||||
|
WCTLD__RPSWE = (1 << 5), /* Enable Color Calculation on the Sprite window */
|
||||||
|
WCTLD__RPSWA__OUTSIDE = (1 << 4), /* Enable the outside of the Sprite window */
|
||||||
|
WCTLD__RPW1E = (1 << 3), /* Enable Color Calculation on the W1 window */
|
||||||
|
WCTLD__RPW1A__OUTSIDE = (1 << 2), /* Enable the outside of the W1 window */
|
||||||
|
WCTLD__RPW0E = (1 << 1), /* Enable Color Calculation on the W0 window */
|
||||||
|
WCTLD__RPW0A__OUTSIDE = (1 << 0), /* Enable the outside of the W0 window */
|
||||||
|
};
|
||||||
// enum lwta0u_bit {
|
// enum lwta0u_bit {
|
||||||
// };
|
// };
|
||||||
// enum lwta0l_bit {
|
// enum lwta0l_bit {
|
||||||
@ -607,75 +711,199 @@ enum bktau_bit {
|
|||||||
// };
|
// };
|
||||||
// enum lwta1l_bit {
|
// enum lwta1l_bit {
|
||||||
// };
|
// };
|
||||||
// enum spctl_bit {
|
enum spctl_bit {
|
||||||
// };
|
#define SPCTL__SPCCCS(n) (((n) & 0b11) << 12)
|
||||||
// enum sdctl_bit {
|
#define SPCTL__SPCCN(n) (((n) & 0b111) << 8)
|
||||||
// };
|
SPCTL__SPCLMD = (1 << 5),
|
||||||
|
SPCTL__SPWINEN = (1 << 4),
|
||||||
|
#define SPCTL__SPTYPE(n) (((n) & 0b1111) << 0)
|
||||||
|
};
|
||||||
|
enum sdctl_bit {
|
||||||
|
SDCTL__TPSDSL = (1 << 8),
|
||||||
|
SDCTL__BKSDEN = (1 << 5),
|
||||||
|
SDCTL__R0SDEN = (1 << 4),
|
||||||
|
SDCTL__N3SDEN = (1 << 3),
|
||||||
|
SDCTL__N2SDEN = (1 << 2),
|
||||||
|
SDCTL__N1SDEN = (1 << 1),
|
||||||
|
SDCTL__N0SDEN = (1 << 0),
|
||||||
|
};
|
||||||
// enum craofa_bit {
|
// enum craofa_bit {
|
||||||
|
#define CRAOFA__N3CAOS(n) (((n) & 0b111) << 12)
|
||||||
|
#define CRAOFA__N2CAOS(n) (((n) & 0b111) << 8)
|
||||||
|
#define CRAOFA__N1CAOS(n) (((n) & 0b111) << 4)
|
||||||
|
#define CRAOFA__N0CAOS(n) (((n) & 0b111) << 0)
|
||||||
// };
|
// };
|
||||||
// enum craofb_bit {
|
// enum craofb_bit {
|
||||||
|
#define CRAOFB__SPCAOS(n) (((n) & 0b111) << 4)
|
||||||
|
#define CRAOFB__R0CAOS(n) (((n) & 0b111) << 0)
|
||||||
// };
|
// };
|
||||||
// enum lnclen_bit {
|
enum lnclen_bit {
|
||||||
// };
|
LNCLEN__SPLCEN = (1 << 5),
|
||||||
// enum sfprmd_bit {
|
LNCLEN__R0LCEN = (1 << 4),
|
||||||
// };
|
LNCLEN__N3LCEN = (1 << 3),
|
||||||
// enum ccctl_bit {
|
LNCLEN__N2LCEN = (1 << 2),
|
||||||
// };
|
LNCLEN__N1LCEN = (1 << 1),
|
||||||
// enum sfccmd_bit {
|
LNCLEN__N0LCEN = (1 << 0),
|
||||||
// };
|
};
|
||||||
|
enum sfprmd_bit {
|
||||||
|
SFPRMD__R0SPRM__MODE0 = (0b00 << 8),
|
||||||
|
SFPRMD__R0SPRM__MODE1 = (0b01 << 8),
|
||||||
|
SFPRMD__R0SPRM__MODE2 = (0b10 << 8),
|
||||||
|
|
||||||
|
SFPRMD__N3SPRM__MODE0 = (0b00 << 6),
|
||||||
|
SFPRMD__N3SPRM__MODE1 = (0b01 << 6),
|
||||||
|
SFPRMD__N3SPRM__MODE2 = (0b10 << 6),
|
||||||
|
|
||||||
|
SFPRMD__N2SPRM__MODE0 = (0b00 << 4),
|
||||||
|
SFPRMD__N2SPRM__MODE1 = (0b01 << 4),
|
||||||
|
SFPRMD__N2SPRM__MODE2 = (0b10 << 4),
|
||||||
|
|
||||||
|
SFPRMD__N1SPRM__MODE0 = (0b00 << 2),
|
||||||
|
SFPRMD__N1SPRM__MODE1 = (0b01 << 2),
|
||||||
|
SFPRMD__N1SPRM__MODE2 = (0b10 << 2),
|
||||||
|
|
||||||
|
SFPRMD__N0SPRM__MODE0 = (0b00 << 0),
|
||||||
|
SFPRMD__N0SPRM__MODE1 = (0b01 << 0),
|
||||||
|
SFPRMD__N0SPRM__MODE2 = (0b10 << 0),
|
||||||
|
};
|
||||||
|
enum ccctl_bit {
|
||||||
|
CCCTL__BOKEN = (1 << 15),
|
||||||
|
CCCTL__BOKN__SPRITE = (0b000 << 12),
|
||||||
|
CCCTL__BOKN__RBG0 = (0b001 << 12),
|
||||||
|
CCCTL__BOKN__NBG0_OR_RBG1 = (0b010 << 12),
|
||||||
|
CCCTL__BOKN__NBG1_OR_EXBG = (0b100 << 12),
|
||||||
|
CCCTL__BOKN__NBG2 = (0b101 << 12),
|
||||||
|
CCCTL__BOKN__NBG3 = (0b110 << 12),
|
||||||
|
CCCTL__EXCCEN = (1 << 10),
|
||||||
|
CCCTL__CCRTMD = (1 << 9),
|
||||||
|
CCCTL__CCMD = (1 << 8),
|
||||||
|
CCCTL__SPCCEN = (1 << 6),
|
||||||
|
CCCTL__LCCCEN = (1 << 5),
|
||||||
|
CCCTL__R0CCEN = (1 << 4),
|
||||||
|
CCCTL__N3CCEN = (1 << 3),
|
||||||
|
CCCTL__N2CCEN = (1 << 2),
|
||||||
|
CCCTL__N1CCEN = (1 << 1),
|
||||||
|
CCCTL__N0CCEN = (1 << 0),
|
||||||
|
};
|
||||||
|
enum sfccmd_bit {
|
||||||
|
SFCCMD__R0SCCM__PER_SCREEN = (0b00 << 8),
|
||||||
|
SFCCMD__R0SCCM__PER_CHARACTER = (0b01 << 8),
|
||||||
|
SFCCMD__R0SCCM__PER_DOT = (0b10 << 8),
|
||||||
|
SFCCMD__R0SCCM__COLOR_DATA_MSB = (0b11 << 8),
|
||||||
|
|
||||||
|
SFCCMD__N3SCCM__PER_SCREEN = (0b00 << 6),
|
||||||
|
SFCCMD__N3SCCM__PER_CHARACTER = (0b01 << 6),
|
||||||
|
SFCCMD__N3SCCM__PER_DOT = (0b10 << 6),
|
||||||
|
SFCCMD__N3SCCM__COLOR_DATA_MSB = (0b11 << 6),
|
||||||
|
|
||||||
|
SFCCMD__N2SCCM__PER_SCREEN = (0b00 << 4),
|
||||||
|
SFCCMD__N2SCCM__PER_CHARACTER = (0b01 << 4),
|
||||||
|
SFCCMD__N2SCCM__PER_DOT = (0b10 << 4),
|
||||||
|
SFCCMD__N2SCCM__COLOR_DATA_MSB = (0b11 << 4),
|
||||||
|
|
||||||
|
SFCCMD__N1SCCM__PER_SCREEN = (0b00 << 2),
|
||||||
|
SFCCMD__N1SCCM__PER_CHARACTER = (0b01 << 2),
|
||||||
|
SFCCMD__N1SCCM__PER_DOT = (0b10 << 2),
|
||||||
|
SFCCMD__N1SCCM__COLOR_DATA_MSB = (0b11 << 2),
|
||||||
|
|
||||||
|
SFCCMD__N0SCCM__PER_SCREEN = (0b00 << 0),
|
||||||
|
SFCCMD__N0SCCM__PER_CHARACTER = (0b01 << 0),
|
||||||
|
SFCCMD__N0SCCM__PER_DOT = (0b10 << 0),
|
||||||
|
SFCCMD__N0SCCM__COLOR_DATA_MSB = (0b11 << 0),
|
||||||
|
};
|
||||||
// enum prisa_bit {
|
// enum prisa_bit {
|
||||||
#define PRISA__S1PRIN(n) ((n) << 8)
|
#define PRISA__S1PRIN(n) (((n) & 0xff) << 8)
|
||||||
#define PRISA__S0PRIN(n) ((n) << 0)
|
#define PRISA__S0PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum prisb_bit {
|
// enum prisb_bit {
|
||||||
#define PRISA__S3PRIN(n) ((n) << 8)
|
#define PRISA__S3PRIN(n) (((n) & 0xff) << 8)
|
||||||
#define PRISA__S2PRIN(n) ((n) << 0)
|
#define PRISA__S2PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum prisc_bit {
|
// enum prisc_bit {
|
||||||
#define PRISA__S5PRIN(n) ((n) << 8)
|
#define PRISA__S5PRIN(n) (((n) & 0xff) << 8)
|
||||||
#define PRISA__S4PRIN(n) ((n) << 0)
|
#define PRISA__S4PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum prisd_bit {
|
// enum prisd_bit {
|
||||||
#define PRISA__S7PRIN(n) ((n) << 8)
|
#define PRISA__S7PRIN(n) (((n) & 0xff) << 8)
|
||||||
#define PRISA__S6PRIN(n) ((n) << 0)
|
#define PRISA__S6PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum prina_bit {
|
// enum prina_bit {
|
||||||
|
#define PRINA__N1PRIN(n) (((n) & 0xff) << 8)
|
||||||
|
#define PRINA__N0PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum prinb_bit {
|
// enum prinb_bit {
|
||||||
|
#define PRINB__N3PRIN(n) (((n) & 0xff) << 8)
|
||||||
|
#define PRINB__N2PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum prir_bit {
|
// enum prir_bit {
|
||||||
|
#define PRIR__R0PRIN(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrsa_bit {
|
// enum ccrsa_bit {
|
||||||
|
#define CCRSA__S1CCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRSA__S0CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrsb_bit {
|
// enum ccrsb_bit {
|
||||||
|
#define CCRSB__S3CCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRSB__S2CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrsc_bit {
|
// enum ccrsc_bit {
|
||||||
|
#define CCRSC__S5CCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRSC__S4CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrsd_bit {
|
// enum ccrsd_bit {
|
||||||
|
#define CCRSD__S7CCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRSD__S6CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrna_bit {
|
// enum ccrna_bit {
|
||||||
|
#define CCRNA__N1CCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRNA__N0CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrnb_bit {
|
// enum ccrnb_bit {
|
||||||
|
#define CCRNB__N3CCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRNB__N2CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrr_bit {
|
// enum ccrr_bit {
|
||||||
|
#define CCRR__R0CCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum ccrlb_bit {
|
// enum ccrlb_bit {
|
||||||
|
#define CCRLB__BKCCRT(n) (((n) & 0xff) << 8)
|
||||||
|
#define CCRLB__LCCCRT(n) (((n) & 0xff) << 0)
|
||||||
// };
|
// };
|
||||||
// enum clofen_bit {
|
enum clofen_bit {
|
||||||
// };
|
CLOFEN__SPCOEN = (1 << 6),
|
||||||
// enum clofsl_bit {
|
CLOFEN__BKCOEN = (1 << 5),
|
||||||
// };
|
CLOFEN__R0COEN = (1 << 4),
|
||||||
|
CLOFEN__N3COEN = (1 << 3),
|
||||||
|
CLOFEN__N2COEN = (1 << 2),
|
||||||
|
CLOFEN__N1COEN = (1 << 1),
|
||||||
|
CLOFEN__N0COEN = (1 << 0),
|
||||||
|
};
|
||||||
|
enum clofsl_bit {
|
||||||
|
CLOFEN__SPCOSL = (1 << 6),
|
||||||
|
CLOFEN__BKCOSL = (1 << 5),
|
||||||
|
CLOFEN__R0COSL = (1 << 4),
|
||||||
|
CLOFEN__N3COSL = (1 << 3),
|
||||||
|
CLOFEN__N2COSL = (1 << 2),
|
||||||
|
CLOFEN__N1COSL = (1 << 1),
|
||||||
|
CLOFEN__N0COSL = (1 << 0),
|
||||||
|
};
|
||||||
// enum coar_bit {
|
// enum coar_bit {
|
||||||
|
#define COAR__COARD() ((n) & 0x1ff)
|
||||||
// };
|
// };
|
||||||
// enum coag_bit {
|
// enum coag_bit {
|
||||||
|
#define COAG__COAGR() ((n) & 0x1ff)
|
||||||
// };
|
// };
|
||||||
// enum coab_bit {
|
// enum coab_bit {
|
||||||
|
#define COAB__COABL() ((n) & 0x1ff)
|
||||||
// };
|
// };
|
||||||
// enum cobr_bit {
|
// enum cobr_bit {
|
||||||
|
#define COBR__COBRD() ((n) & 0x1ff)
|
||||||
// };
|
// };
|
||||||
// enum cobg_bit {
|
// enum cobg_bit {
|
||||||
|
#define COBG__COBGR() ((n) & 0x1ff)
|
||||||
// };
|
// };
|
||||||
// enum cobb_bit {
|
// enum cobb_bit {
|
||||||
|
#define COBB__COBBL() ((n) & 0x1ff)
|
||||||
// };
|
// };
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user