Для тех, кто уже попробовал запускать программы из
PSY-Q SDK, понятно, что этот древний софт ещё не мало проблем принесёт.
На удивление, компилятор ccpsx оказался 32-битным и спокойно работает в Windows10 x64, чего не скажешь о
cpe2x.exe (конвертер .cpe в .exe) и
psymake.exe (аналог make), они 16 битные, написаны под DOS, а в Windows x64 NTVDM выпилен, потому приложения запустить невозможно. Видел я, конечно, порты NTVDM под x64, но там встраивание в систему идёт через заднее место и мне это не нравится, тем более они все с жирными пометками "proof of concept".
Но кто сказал, что это конец?
psymake как бы можно вообще выкинуть, заменить его обычным make, например из MinGW! Я решил ради любви к прекрасному оставить таки имя этой утилиты таким, какое оно есть, потому переименовал
PSYMAKE.EXE в
_PSYMAKE.EXE, вдруг пригодится, а так же вместо него запилил BAT файл
PSYMAKE.BAT
1 2 | @echo off
"C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin\mingw32-make.exe" %*
|
Теперь при вызове psymake на самом деле перевызывается mingw32-make.exe и всё параметры ему передаются через %*
А вот с cpe2x всё немного сложнее. Я видел его порт под x64, не из оригинальных исходников, а с нуля написанный. И снова у него были какие-то проблемы. Не тру это всё. Есть же рабочее решение, его просто нужно запустить...
DosBOX - вот кто придёт на помощь. Заменяем
CPE2X.EXE на
CPE2X.BAT вот примерно с таким контентом
1 2 3 4 5 6 7 8 9 10 | @echo off
SET PSYQ_PATH=D:\L\PSOne\psyq
SET DOSBOX_EXE= "C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe"
SET SDL_VIDEODRIVER=dummy
REM cleanup CPE2X.EXE stdout file
copy /Y nul: CPE2XOUT.TXT > nul
REM execute CPE2X.EXE inside DOSBOX
%DOSBOX_EXE% -noconsole -c "MOUNT D 'D:\'" -c "D:" -c "cd %cd%" -c "%PSYQ_PATH%\bin\_CPE2X.EXE %* > CPE2XOUT.TXT" -c exit
REM print CPE2X.EXE stdout to console
type CPE2XOUT.TXT
|
Я тут свои реальные пути в системе оставил, ну да ладно.
Что там происходит:
1.
1 | SET SDL_VIDEODRIVER=dummy
|
- т.к. DOSBOX написан с использованием SDL, то есть такой вот легальный путь запустить dosbox в headless режиме!
2.
1 | copy /Y nul: CPE2XOUT.TXT > nul
|
- тут генерится/очищается файл, который будет содержать в себе выхлоп реального cpe2x.exe, нам же надо всё красиво сделать!
3. Вызываем DOSBOX! Я монтирую реальный диск D в диск D внутри DOSBOX, так проще работать с путями. Потом переход в папку проекта: -c "cd %cd%" тут важное уточнение: cd указывает на папку проекта, ибо я из неё запускаю данную команду, о том как это делается - напишу ниже. Дальше идёт запуск реального приложения
1 | "%PSYQ_PATH%\bin\_CPE2X.EXE %* > CPE2XOUT.TXT"
|
с перенаправлением вывода в файл, чтоб потом этот файл запринтить хостовому приложению для красоты, типа я запустил настоящее приложение и увидел вывод.
4. Ну и принтим в консоль вывод
С SDK вроде всё.
Далее внутри проекта прям рядом с сорцами и мейкфайлом я создаю ещё 1 bat файл build_console.bat
1 | start "PSX Build Console" call "D:\L\PSOne\psyq\PSPATHS.BAT"
|
Он мне настраивает пути psy-q и оставляет окно консоли в котором я могу билдить проект! Это удобно!
Внутри окна консоли я просто вбиваю psymake и происходит магия! Всё отлично собирается и даже не видно, что я запускал dosbox!
Вот мой тестовый
Makefile
1 2 3 4 5 | .PHONY: all
all:main.c
ccpsx -O3 -Xo$80010000 main.c -omain.cpe,main.sym,mem.map
cpe2x main.cpe
|
После запуска psymake в этой консоли получаем вот такой красивый вывод:
1 2 3 4 5 6 7 | D:\L\PSOne\projects\PS1Dev>psymake
ccpsx -O3 -Xo0010000 main.c -omain.cpe,main.sym,mem.map
cpe2x main.cpe
CPE2X Ver1.5
Copyright (C) 1994,1995 by Sony Computer Entertainment Inc.
convert from main.cpe to main.EXE for Japan area
pc0:0000881c t_addr:00002710 t_size:00008800
|