rom: an attempt at IOP stuff
it seems multiple source files for each part break, and I don't quite know why
This commit is contained in:
parent
bdeb32b11c
commit
8ba1161404
|
@ -0,0 +1,46 @@
|
|||
# .clang-format for native code portion
|
||||
|
||||
BasedOnStyle: Google
|
||||
|
||||
# force T* or T&
|
||||
DerivePointerAlignment: false
|
||||
PointerAlignment: Left
|
||||
|
||||
TabWidth: 4
|
||||
IndentWidth: 4
|
||||
UseTab: Always
|
||||
IndentPPDirectives: BeforeHash
|
||||
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakStringLiterals: false
|
||||
|
||||
ColumnLimit: 150
|
||||
CompactNamespaces: false
|
||||
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ContinuationIndentWidth: 0
|
||||
|
||||
# turning this on causes major issues with initializer lists
|
||||
Cpp11BracedListStyle: false
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
|
||||
FixNamespaceComments: true
|
||||
|
||||
NamespaceIndentation: All
|
||||
ReflowComments: true
|
||||
|
||||
SortIncludes: CaseInsensitive
|
||||
SortUsingDeclarations: true
|
||||
|
||||
SpacesInSquareBrackets: false
|
||||
SpaceBeforeParens: Never
|
||||
SpacesBeforeTrailingComments: 1
|
|
@ -1,2 +1,4 @@
|
|||
bin/
|
||||
**/obj
|
||||
/.cache
|
||||
/compile_commands.json
|
7
Makefile
7
Makefile
|
@ -1,4 +1,4 @@
|
|||
.PHONY: all copy clean
|
||||
.PHONY: all copy clean bear
|
||||
|
||||
TOP=$(shell pwd)
|
||||
|
||||
|
@ -9,10 +9,12 @@ endif
|
|||
|
||||
all:
|
||||
make -C rom/ee TOP=$(TOP) CONFIG=$(CONFIG)
|
||||
make -C rom/iop TOP=$(TOP) CONFIG=$(CONFIG)
|
||||
make -C rom TOP=$(TOP) CONFIG=$(CONFIG)
|
||||
|
||||
clean:
|
||||
make -C rom/ee TOP=$(TOP) CONFIG=$(CONFIG) clean
|
||||
make -C rom/iop TOP=$(TOP) CONFIG=$(CONFIG) clean
|
||||
make -C rom TOP=$(TOP) CONFIG=$(CONFIG) clean
|
||||
|
||||
# copy to PCSX2 BIOS root
|
||||
|
@ -21,3 +23,6 @@ clean:
|
|||
# ROMDIR (and the BIOS selection menu only shows ROMs with a ROMDIR)
|
||||
copy:
|
||||
cp bin/ps2rom_$(CONFIG).rom ~/.config/PCSX2/bios
|
||||
|
||||
bear:
|
||||
bear -- $(MAKE) CONFIG=$(CONFIG)
|
|
@ -29,6 +29,8 @@ OBJECTS := $(patsubst %.c,obj/$(CONFIG)/%.o,$(filter %.c,$(SRCS)))
|
|||
OBJECTS += $(patsubst %.cpp,obj/$(CONFIG)/%.o,$(filter %.cpp,$(SRCS)))
|
||||
OBJECTS += $(patsubst %.s,obj/$(CONFIG)/%.o,$(filter %.s,$(SRCS)))
|
||||
|
||||
CFLAGS := $(CFLAGS) $(INCS)
|
||||
|
||||
# include target-specific recipies specifying how to
|
||||
# build for the target.
|
||||
include $(TOP)/build/targets/$(TARGET).mk
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
NAME=ps2rom
|
||||
TARGET=iop
|
||||
TARGET=ee
|
||||
KIND=bin
|
||||
|
||||
SELF=$(shell pwd)
|
||||
|
@ -13,6 +13,8 @@ LDFLAGS = -nostartfiles -nodefaultlibs -Wl,-Map,$(BINDIR)/$(FINALNAME).map -T$(S
|
|||
# this will only link to the EE ROM codebase.
|
||||
LIBS=-lps2rom_ee_$(CONFIG)
|
||||
|
||||
#-lps2rom_iop_$(CONFIG)
|
||||
|
||||
# sources
|
||||
SRCS = rom_start.s
|
||||
|
||||
|
@ -30,6 +32,10 @@ $(BINDIR)/:
|
|||
$(OBJDIR)/:
|
||||
mkdir -p $@
|
||||
|
||||
# make sure to assemble the primary ROM start routine
|
||||
# as MIPS-I, so that we don't get into any issues.
|
||||
$(OBJDIR)/rom_start.o: AS += -march=r3000
|
||||
|
||||
$(BINDIR)/$(FINALNAME).rom: $(BINDIR)/$(FINALNAME).elf
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ CXXFLAGS = -fno-exceptions -fno-rtti
|
|||
|
||||
# sources
|
||||
SRCS = _ee_start.s \
|
||||
ee_sio.c \
|
||||
ee_start.c
|
||||
|
||||
.PHONY: all clean clean-products
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
//! EE SIO implementation
|
||||
#include <shared/sio.h>
|
||||
|
||||
void SIO_putc(char c) {
|
||||
*((char*)0x1000f180) = c;
|
||||
}
|
||||
|
||||
void SIO_puts(const char* s) {
|
||||
while(*s)
|
||||
SIO_putc(*s++);
|
||||
}
|
|
@ -1,16 +1,8 @@
|
|||
|
||||
#define __noreturn __attribute__((noreturn))
|
||||
|
||||
static void putc(char c) {
|
||||
*((char*)0x1000f180) = c;
|
||||
}
|
||||
|
||||
static void puts(const char* s) {
|
||||
while (*s)
|
||||
putc(*s++);
|
||||
}
|
||||
#include "shared/sio.h"
|
||||
#include "shared/attributes.h"
|
||||
|
||||
__noreturn void _ee_start() {
|
||||
puts("EE: Hello World from Lily~\n");
|
||||
while(1);
|
||||
SIO_puts("EE: Hello World from Lily~\n");
|
||||
while(1)
|
||||
;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
NAME=ps2rom_iop
|
||||
TARGET=iop
|
||||
KIND=lib
|
||||
|
||||
INCS = -I$(TOP)/rom
|
||||
|
||||
CFLAGS = -ffreestanding -fno-stack-protector
|
||||
CXXFLAGS = -fno-exceptions -fno-rtti
|
||||
|
||||
# sources
|
||||
SRCS = _iop_start.s \
|
||||
iop_sio.c \
|
||||
iop_start.c
|
||||
|
||||
.PHONY: all clean clean-products
|
||||
|
||||
include $(TOP)/build/core.mk
|
||||
|
||||
all: $(BINDIR)/lib$(FINALNAME).a
|
||||
|
||||
$(BINDIR)/:
|
||||
mkdir -p $@
|
||||
|
||||
$(OBJDIR)/:
|
||||
mkdir -p $@
|
||||
|
||||
clean: clean-products
|
||||
|
||||
include $(TOP)/build/products/$(KIND).mk
|
|
@ -0,0 +1,10 @@
|
|||
.set noat
|
||||
.globl _iop_start
|
||||
.extern iop_start
|
||||
|
||||
// __noreturn __naked void _iop_start()
|
||||
// This is the primary entrypoint for the IOP code
|
||||
_iop_start:
|
||||
li $sp, 0x001fffc0 // temporary stack (2<<20-0x40)
|
||||
move $fp, $sp
|
||||
j iop_start
|
|
@ -0,0 +1,11 @@
|
|||
//! IOP SIO implementation
|
||||
#include <shared/sio.h>
|
||||
|
||||
void SIO_putc(char c) {
|
||||
*((char*)0x1f80380c) = c;
|
||||
}
|
||||
|
||||
void SIO_puts(const char* s) {
|
||||
while(*s)
|
||||
SIO_putc(*s++);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
#include "shared/attributes.h"
|
||||
#include "shared/sio.h"
|
||||
|
||||
__noreturn void _iop_start() {
|
||||
// setup iop
|
||||
*(char*)0xbf802070 = 9;
|
||||
|
||||
// Poke around with the cache control registers
|
||||
//
|
||||
*(int*)0xfffe0130 = 0xcc4;
|
||||
*(int*)0xfffe0130 = 0xcc0;
|
||||
|
||||
// it seems like if bit 8 is set here,
|
||||
// then the cache control is set nearly
|
||||
// exactly like the PS1 kernel did
|
||||
if((*(int*)0xbf801450) & 8)
|
||||
*(int*)0xfffe0130 = 0x1e988;
|
||||
else
|
||||
*(int*)0xfffe0130 = 0x1edd8;
|
||||
|
||||
SIO_puts("IOP: Hello World from Lily~\n");
|
||||
while(1)
|
||||
;
|
||||
}
|
13
rom/link.ld
13
rom/link.ld
|
@ -1,14 +1,21 @@
|
|||
_stack_size = 0x80000;
|
||||
_heap_size = 1024*1024*10;
|
||||
|
||||
_text_origin = 0xbfc00000;
|
||||
|
||||
ENTRY(_start);
|
||||
SECTIONS {
|
||||
.text 0xbfc00000 : {
|
||||
_text_origin = .;
|
||||
*start.o /* Always link reset first */
|
||||
. = 0xbfc00000;
|
||||
|
||||
.text : {
|
||||
*rom_start.o /* Always link reset as the first object */
|
||||
|
||||
*(libps2rom_ee_*.a)
|
||||
*(libps2rom_iop_*.a)
|
||||
|
||||
*(.text)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
}
|
||||
_text_size = . - _text_origin;
|
||||
|
||||
|
|
|
@ -10,8 +10,9 @@
|
|||
.org 0
|
||||
.set noat
|
||||
|
||||
// externs
|
||||
// externs from each piece of the code
|
||||
.extern _ee_start
|
||||
.extern _iop_start
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
|
@ -21,5 +22,7 @@ _start:
|
|||
nop
|
||||
j _ee_start // Call EE start routine
|
||||
nop
|
||||
__iop: // for now the iop stalls.
|
||||
__iop:
|
||||
j __iop
|
||||
//j _iop_start // Call IOP start routine
|
||||
//nop
|
|
@ -0,0 +1 @@
|
|||
#define __noreturn __attribute__((noreturn))
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef SIO_H
|
||||
#define SIO_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void SIO_putc(char c);
|
||||
|
||||
void SIO_puts(const char* s);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue