главная проблема возникла с Pspaths.bat в корне папки PlayStation 1 SDK 4.4
Я настраивал версию с emuparadise на Win7 x86, на x64 нужно менять программы, я не пробовал, об этом ниже. Есть другая версия SDK, с ней не заладилось. Не хотел засорять C:\, расположил SDK в C:\Libraries\psyq\. Батник не использовал, прописал в переменные среды, в Path добавил: C:\Libraries\psyq\psx\bin;C:\Libraries\psyq\pssn\bin;C:\Libraries\psyq\psxgraph\bin и добавил такие переменные (всё как в .bat файле):
C_INCLUDE_PATH C:\Libraries\psyq\psx\include
C_PLUS_INCLUDE_PATH C:\Libraries\psyq\psx\include
LIBRARY_PATH C:\Libraries\psyq\psx\lib
PSX_PATH C:\Libraries\psyq\psx\bin
PSYQ_PATH C:\Libraries\psyq\pssn\bin
SN_PATH C:\Libraries\psyq\pssn\bin
Также в C:\Libraries\psyq\pssn\bin\sn.ini приколочены пути, изменил все вхождения c:\ps\ на c:\Libraries\psyq\, а в конце c:\pssn\lib на c:\Libraries\psyq\pssn\lib.
Для компиляции прописываются .ln и MAKEFILE.MAK, выполнить команду psymake для сборки или psymake clean для очистки. Если файл один, то можно без MAKEFILE:
ccpsx -O0 -Xo$80010000 main.c -omain.cpe
cpe2x /ce main.cpe
Создание ISO с помощью
https://github.com/Lameguy64/mkpsxiso. Прописал после компиляции сборку в ISO и запуск в эмуляторе.
Мне помог журнал FPS:
https://fps.xtreme3d.ru/index.php?content=issues. В этих номерах про разработку под PSX: 36, 43, 44, 46, 47, 48. Во 2-й части (№43) написано как запустить Psy-Q SDK под 64-битной Windows 8 (думаю, можно и под Win10). В 1-й части написано ccpsx -O0 -Xo$80020000 main.c -omain.cpe, но я писал -O0 -Xo$80010000, вроде так правильнее (
UPD: хотя в некоторых примерах 80080000, не знаю почему). К слову, не используйте malloc() и free(), память не очищается, их нужно заменять на InitHeap3(), malloc3(), free3() (как во 2-й части). Всегда можно прочитать доки из SDK.
--------
Ещё запрещены имена файлов длиннее 8 символов.
Оказалось, что это у меня .ln, а в примерах .lnk. Не помню где взял, но у меня такая структура файла MAKEFILE.MAK:
ASM = asmpsx
CC = ccpsx
LINK = psylink
CCOPTS = -Wunused -comments-c++ -c -O3
LINKOPTS = /c /z /m
OBJS = obj/main.obj \
obj/controls.obj \
obj/sound.obj
#Make & Link
all: main.cpe
main.cpe: $(OBJS) main.ln makefile.mak
$(LINK) $(LINKOPTS) @main.ln,main.cpe,main.sym,main.map
cpe2x /CJ main.cpe
del main.cpe
obj/main.obj: main.c
$(CC) $(CCOPTS) main.c -o obj/main.obj
#DMPSX -b main.obj
obj/controls.obj: common/controls.c common/controls.h
$(CC) $(CCOPTS) common/controls.c -o obj/controls.obj
obj/sound.obj: common/sound.c common/sound.h
$(CC) $(CCOPTS) common/sound.c -o obj/sound.obj
#a.obj: a.s
# $(ASM) /l /c a.s,a.obj
clean:
del obj\*.obj
del *.cpe
del *.sym
del *.map
del *.bak
Такая структура main.ln:
org $80010000
text group ; main text group
bss group bss ; main data group
section .rdata,text ; main sections
section .text,text
section .data,text
section .sdata,text
section .sbss,bss
section .bss,bss
; **********************************************************
; LIB FILES
; **********************************************************
; *************************************************************
; PSYQ LIBS
; *************************************************************
inclib "C:\Libraries\psyq\psx\lib\libapi.lib"
inclib "C:\Libraries\psyq\psx\lib\libsnd.lib"
inclib "C:\Libraries\psyq\psx\lib\libcd.lib"
;inclib "C:\Libraries\psyq\psx\lib\libpress.lib"
inclib "C:\Libraries\psyq\psx\lib\libgpu.lib"
inclib "C:\Libraries\psyq\psx\lib\libpad.lib"
inclib "C:\Libraries\psyq\psx\lib\libgte.lib"
inclib "C:\Libraries\psyq\psx\lib\libetc.lib"
;inclib "C:\Libraries\psyq\psx\lib\libds.lib"
inclib "C:\Libraries\psyq\psx\lib\libc.lib"
;inclib "C:\Libraries\psyq\psx\lib\libcard.lib"
;inclib "C:\Libraries\psyq\psx\lib\libsio.lib"
inclib "C:\Libraries\psyq\psx\lib\libmcrd.lib"
inclib "C:\Libraries\psyq\psx\lib\libspu.lib"
inclib "C:\Libraries\psyq\psx\lib\libsn.lib"
inclib "C:\Libraries\psyq\psx\lib\libgs.lib"
inclib "C:\Libraries\psyq\psx\lib\libmath.lib"
;inclib "sow.lib"
; **********************************************************
; GAME FILES
; **********************************************************
include "obj/main.obj"
include "obj/controls.obj"
include "obj/sound.obj"
; *************************************************************
; ENTRY POINT
; *************************************************************
regs pc=__SN_ENTRY_POINT ; entry point
Нужно создать папку obj, туда складывал объектные файлы. Для каждого .c/.h приходится прописывать в этих файлов, по аналогии с sound.c/.h.