diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-07-06 22:09:19 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-09-08 21:10:27 +0200 |
| commit | c8f9dbd494732c43d5b3626ba7010bf27d1f7664 (patch) | |
| tree | 3799e318528e04b1a614a8b921cdc0f48d69edbf /src/ps1 | |
| parent | a0672be24d53ec78d1a2567cf60d9f774b0d158a (diff) | |
| download | wnix-c8f9dbd494732c43d5b3626ba7010bf27d1f7664.tar.gz | |
Move PS1-specific files to subdirectory
Diffstat (limited to 'src/ps1')
| -rw-r--r-- | src/ps1/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/ps1/playstation.x | 72 | ||||
| -rw-r--r-- | src/ps1/start.c | 10 | ||||
| -rw-r--r-- | src/ps1/system.cnf | 4 |
4 files changed, 91 insertions, 0 deletions
diff --git a/src/ps1/CMakeLists.txt b/src/ps1/CMakeLists.txt new file mode 100644 index 0000000..6ba4543 --- /dev/null +++ b/src/ps1/CMakeLists.txt @@ -0,0 +1,5 @@ +target_link_libraries(${PROJECT_NAME} PRIVATE c) +target_link_libraries(nanowasm PRIVATE c) +target_sources(${PROJECT_NAME} PRIVATE start.c) +target_link_options(${PROJECT_NAME} PRIVATE + -T${CMAKE_CURRENT_LIST_DIR}/playstation.x) diff --git a/src/ps1/playstation.x b/src/ps1/playstation.x new file mode 100644 index 0000000..00a1a74 --- /dev/null +++ b/src/ps1/playstation.x @@ -0,0 +1,72 @@ +/* + * Linker script to generate an ELF file + * that has to be converted to PS-X EXE. + */ + +TARGET("elf32-littlemips") +OUTPUT_ARCH("mips") +ENTRY(_start) +INPUT(-lgcc) + +SECTIONS +{ + . = 0x80010000; + + .text ALIGN(4) : + { + *(.text.startup) + *(.text*) + } + + .rodata ALIGN(4) : + { + *(.rodata) + } + + .data ALIGN(4) : + { + *(.data) + } + + .ctors ALIGN(4) : + { + *(.ctors) + } + + .dtors ALIGN(4) : + { + *(.dtors) + } + + .bss ALIGN(4) : + { + *(.bss) + *(.bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + *(.sbss) + *(.sbss.*) + *(.gnu.linkonce.sb.*) + *(.scommon) + } + + __text_start = ADDR(.text); + __text_end = ADDR(.text) + SIZEOF(.text); + + __rodata_start = ADDR(.rodata); + __rodata_end = ADDR(.rodata) + SIZEOF(.rodata); + + __data_start = ADDR(.data); + __data_end = ADDR(.data) + SIZEOF(.data); + + __ctor_list = ADDR(.ctors); + __ctor_end = ADDR(.ctors) + SIZEOF(.ctors); + + __dtor_list = ADDR(.dtors); + __dtor_end = ADDR(.dtors) + SIZEOF(.dtors); + + __bss_start = ADDR(.bss); + __bss_end = ADDR(.bss) + SIZEOF(.bss); + + __scratchpad = 0x1f800000; +} diff --git a/src/ps1/start.c b/src/ps1/start.c new file mode 100644 index 0000000..09ca6c9 --- /dev/null +++ b/src/ps1/start.c @@ -0,0 +1,10 @@ +__attribute__((__section__(".text.startup"))) void _start(void) +{ + int main(void); + extern char *__bss_start, *__bss_end; + + for (char *s = __bss_start; s < __bss_end; s++) + *s = 0; + + main(); +} diff --git a/src/ps1/system.cnf b/src/ps1/system.cnf new file mode 100644 index 0000000..716bb6c --- /dev/null +++ b/src/ps1/system.cnf @@ -0,0 +1,4 @@ +BOOT = cdrom:\wanix.exe;1 +TCB = 4 +EVENT = 8 +STACK = 801FF800 |
