существует ли шанс что эмуль соберут по windows/arm? unreal работает более менее нормально при эмуляции а zxmak2 крашится…
Вид для печати
существует ли шанс что эмуль соберут по windows/arm? unreal работает более менее нормально при эмуляции а zxmak2 крашится…
ZXMAK, спасибо Вам, видимо все таки владете телепатией, сегодня внезапно заработало само все, скорее всего дело в апдейтах винды, работает довольно клево на Win11Arm@VMWare Fusion@Apple M3
а где ссылки на сам актуальный эмулятор? а то тему читаю, все время чтото поправляют и добавляют, а на гитхабе дохлая мышь от 2018 года только висит.
нужно синхронизировать код с репозиторием, когда я начинал исправлять код, у меня не был настроен git. Сейчас там нужно потратить время, чтобы все корректно синхронизировать, т.к. изменения включают исправления в регистре имени файлов (важно для линукса), я также делал OpenGL бакенд но работа приостановилась в состоянии - прототип на Linux отлично работает, не хуже чем бакенд DirectX в Windows, но в Windows у меня сейчас нет возможностей проверить, а по некоторым отзывам на Windows с новым OpenGL бакендом есть проблемы с пропуском кадров при отображении, непонятно с чем связанные - это не нагрузка на процессор, скорости хватает, все кадры отправляются на дисплей, но система почему-то пропускает некоторые кадры даже на простом приложении с переключением цвета заливки экрана на каждом кадре, возможно проблема с конкретным драйвером nVidia.
Готов с этим помочь, если выложишь просто снапшот текущей директории. Замежу и пулл-реквест пришлю. Больно смотреть, как эмулятор превращается в распространяющийся бинарями closed source.
- - - Добавлено - - -
Вот, кстати, может будет интересно. Недавно озаботился причесыванием своей архивной копии репозитория.
Там у меня не как у тебя, где первый коммит - это переезд на гитхаб, а хранится вся история со времен codeplex. Я перетащил все более свежие коммиты из основного репо и настроил автосборку на серверах гитхаба при пуше.
Еще переписал всю историю, распаковав ROMS.PAK. Теперь всё лежит отдельными ромами (так намного удобней отслеживать историю изменений в логе), а в архив собирается уже при окончательной релизной сборке автоматом.
https://github.com/atsidaev/ZXMAK2-archive
да, с ромами я тоже сделал отдельную папку с ромами и скриптом для сборки, правда скрипт bash, для линукс. Можно и для Windows батник добавить, но может есть лучше варианты?
Я там также убрал ildasm/ilasm из проектного файла, т.к. оно сильно тормозило сборку и слишком сложно было править большой IL файл и были проблемы с компиляцией на линукс, теперь код генерится с помощью Mono.Cecil, и достаточно просто добавить прототип функции в C# и он автоматически при сборке имплементируется. Это используется для реализации OpenGL, где для вызова функции теперь достаточно толко объявить прототип функции и переменную с указателем с таким-же именем и они автоматически имплементятся и инициализируются при компиляции - можно сразу вызывать и проверять указатель - найдена ли функция. Переписывание кода с си заключается по сути в добавлении прототипов функций в класс gl и замене glClear на gl.Clear, или GL_VERSION на GL.VERSION.
Вот пример OpenGL кода:
А как ты перетащил историю с codeplex?Код:static void onResize(Vector2i wndSize) {
gl.Viewport(0, 0, wndSize.X, wndSize.Y);
gl.MatrixMode(GL.PROJECTION);
gl.LoadIdentity();
gl.Ortho(0.0, 1.0, 1.0, 0.0, 1, 0);
gl.MatrixMode(GL.MODELVIEW);
}
static void onRender(Context ctx, Vector2i size) {
gl.MatrixMode(GL.MODELVIEW);
gl.PushMatrix();
gl.Clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT);
gl.Enable(GL.TEXTURE_2D);
gl.LoadIdentity();
if (_program.IsLinked) {
gl.UseProgram(_program.Id);
if (_rubyInputSizeId != -1)
gl.Uniform2f(_rubyInputSizeId, 320f, 256f);
if (_rubyOutputSizeId != -1)
gl.Uniform2f(_rubyOutputSizeId, (float)size.X, (float)size.Y);
if (_rubyTextureSizeId != -1)
gl.Uniform2f(_rubyTextureSizeId, 320f, 256f);
}
curtxid = texids[curtex];
gl.BindTexture(GL.TEXTURE_2D, curtxid);
gl.Begin(GL.TRIANGLE_STRIP);
gl.TexCoord2f(1.0f, 0.0f); gl.Vertex2f(1.0f, 0.0f); // RT
gl.TexCoord2f(0.0f, 0.0f); gl.Vertex2f(0.0f, 0.0f); // LT
gl.TexCoord2f(1.0f, 1.0f); gl.Vertex2f(1.0f, 1.0f); // RB
gl.TexCoord2f(0.0f, 1.0f); gl.Vertex2f(0.0f, 1.0f); // LB
gl.End();
if (_program.IsLinked) {
gl.UseProgram(0);
}
gl.Disable(GL.TEXTURE_2D);
gl.MatrixMode(GL.MODELVIEW);
gl.PopMatrix();
gl.Flush();
//gl.Finish();
ctx.SwapBuffers();
}
Я уже не помню, что там не кодеплексе было, svn вроде? Экспортировал весь репо в несколько сотен патчей, а потом на их основе гит-репо конструировал.
А зачем? Для разработки достаточно того, что папка ROMS копируется в папку с экзешником (я добавил в csproj таргет для этого). У тебя же там так и сделано, что в ROMS.PAK мы лезем только если файл не найден в файловой системе. Поэтому скопировать всю папку достаточно. А релизные версии пусть сам гитхаб собирает, раз он предоставляет теперь такие возможности. Вот такой у меня там скрипт - https://github.com/atsidaev/ZXMAK2-a...lows/build.ymlЦитата:
да, с ромами я тоже сделал отдельную папку с ромами и скриптом для сборки, правда скрипт bash, для линукс. Можно и для Windows батник добавить
Я там еще начал делать чтобы артефакты сборки куда-нибудь выкладывались, но не допилил еще. Можно сделать даже так, что новые версии будут прямо в Releases выкладываться.
Обновил тестовый билд 9: https://github.com/zxmak/ZXMAK2/issu...ent-2844988275
Из основных изменений:
- исправлена эмуляция MEMPTR и флагов для блоковых инструкций inir/indr/otir/otdr
- наконец реализована полная поддержка Z80 NMOS и CMOS процессоров. Вроде все тесты что у меня есть для Z80 NMOS и CMOS типов проходит. Реализация позволяет переключать тип процессора. Но пока эта настройка не протянута. Т.к. текущая реализация для NEC и ST типов процессоров хоть и проходит тесты но почему-то не проходит SELF TEST - непонятно почему, поэтому пока процессор инициализируется как Zilog Z80 NMOS, где все тесты проходят ок. Позже приделаю выбор типа процессора и его можно будет менять на лету.
- исправлена, переписана и оптимизирована загрузка из WAV файлов, теперь не тупит и грузит шустро, также теперь поддерживаются WAV_FORMAT_EXTENSIBLE форматы и поправлены ошибки обработки сэмплов. Эмулятор всегда грузит WAV из первого (левого) канала (стерео и квадро поддерживается, но остальные каналы просто игнорируются), никакие фильтры не применяет, поэтому перед загрузкой WAV рекомендуется обработать его ФВЧ фильтром со срезом порядка 450 Гц.
- еще какие-то исправления, вклюая TZX/CSW и еще чтото точно не помню.
Релиз в двух архивах - можно использовать любой на любой платформе Windows, Linux или MacOS. Это просто билды разными компиляторами. msbuild версия на Linux может кидать ворнинги в консоль, но вроде работает пошустрее, чем mono версия.
ZXMAK, Приветствую!
Попробовал сейчас запустить на macos 12.7.6 (intel)
Новую версию mono поставил через brew
Скрытый текст
abayrak@MacBook-Air-Alexander ZXMAK2 % mono --version
Mono JIT compiler version 6.14.1 (tarball Tue Apr 29 17:43:02 UTC 2025)
Copyright (C) Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS:
SIGSEGV: altstack
Notification: kqueue
Architecture: amd64
Disabled: none
Misc: softdebug
Interpreter: yes
LLVM: supported, not enabled.
Suspend: hybrid
GC: sgen (concurrent by default)
[свернуть]
При запуске (через ./zxmak2) - вот такая ошибка:
Скрытый текст
abayrak@MacBook-Air-Alexander ZXMAK2 % ./zxmak2
WARNING: The Carbon driver has not been ported to 64bits, and very few parts of Windows.Forms will work properly, or at all
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Drawing.GDIPlus' threw an exception. ---> System.DllNotFoundException: libgdiplus.dylib assembly:<unknown assembly> type:<unknown type> member:(null)
at (wrapper managed-to-native) System.Drawing.GDIPlus.GdiplusStartup(ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&)
at System.Drawing.GDIPlus..cctor () [0x000b0] in <e6eb2331cafe45d88e5f98d6df8e2628>:0
--- End of inner exception stack trace ---
at System.Drawing.Icon.Dispose () [0x00011] in <e6eb2331cafe45d88e5f98d6df8e2628>:0
at (wrapper remoting-invoke-with-check) System.Drawing.Icon.Dispose()
at System.Drawing.Icon.Finalize () [0x00000] in <e6eb2331cafe45d88e5f98d6df8e2628>:0
[свернуть]
Что с этим можно предпринять? :-)
Судя по ошибке mono работает и эмулятор запустился, но отсутствует необходимая библиотека libgdiplus - нужно установить.
На Linux она ставится как sudo apt install libgdiplus, как на Mac не знаю.
Если нет в репозитории, можно из исходников собрать и установить: https://github.com/mono/libgdiplus
Сборка на Linux выглядит примерно так:
Как собрать на MacOS, там на странице библиотеки есть инструкции.Код:sudo apt-get install libgif-dev autoconf libtool automake build-essential gettext libglib2.0-dev libcairo2-dev libtiff-dev libexif-dev
git clone https://github.com/mono/libgdiplus.git
cd libgdiplus
./autogen.sh --prefix=$PREFIX
make -j$(nproc)
sudo make install
если разберетесь, как на MacOS установить или собрать libgdiplus, отпишите шаги.
ZXMAK, Благодарю за ответ!
Дело сдвинулось. На macos libgdiplus я поставил через brew ( https://formulae.brew.sh/formula/mono-libgdiplus )
Команда для установки: brew install mono-libgdiplus
Теперь оно крешится вот так:
Скрытый текст
abayrak@MacBook-Air-Alexander ZXMAK2 % ./zxmak2
WARNING: The Carbon driver has not been ported to 64bits, and very few parts of Windows.Forms will work properly, or at all
=================================================================
Native Crash Reporting
=================================================================
Got a segv while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
=================================================================
Native stacktrace:
=================================================================
0x10378685c - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_dump_native_crash_info
0x10372ef59 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_handle_native_crash
0x10392e54d - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : altstack_handle_and_restore.cold.1
0x103781e58 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_amd64_get_exception_trampolines
0x7ff822d93d87 - /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight : SLDisplayBounds
0x10a3c5408 - Unknown
0x103ff9b76 - Unknown
0x1036b0017 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_runtime_invoke
0x103865c5d - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : do_runtime_invoke
0x1038620b8 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_runtime_class_init_full
0x1036a89a2 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_compile_method_inner
0x1036ac33b - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_compile_method_with_opt
0x1037312c0 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : common_call_trampoline
0x103730cf1 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_magic_trampoline
0x103bfb396 - Unknown
0x10a166023 - Unknown
0x10a3c0108 - Unknown
0x1064d8403 - Unknown
0x103fcdf39 - Unknown
0x103fcdc93 - Unknown
0x103f6c53a - Unknown
0x103c8d671 - Unknown
0x1036b0017 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_runtime_invoke
0x103865c5d - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : do_runtime_invoke
0x103868f0c - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : do_exec_main_checked
0x1036fed93 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_exec
0x10370199a - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_main
0x1036a238c - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : main
0x1129f552e - Unknown
=================================================================
External Debugger Dump:
=================================================================
=================================================================
Basic Fault Address Reporting
=================================================================
Memory around native instruction pointer (0x7ff822d93d87):0x7ff822d93d77 89 fb 48 8b 05 d0 18 fe 3a 0f 10 00 0f 10 48 10 ..H.....:.....H.
0x7ff822d93d87 0f 11 4f 10 0f 11 07 89 f7 48 89 de e8 67 00 fb ..O......H...g..
0x7ff822d93d97 ff 48 89 d8 48 83 c4 08 5b 5d c3 55 48 89 e5 53 .H..H...[].UH..S
0x7ff822d93da7 48 83 ec 28 48 8b 05 16 2b fe 3a 48 8b 00 48 89 H..(H...+.:H..H.
=================================================================
Managed Stacktrace:
=================================================================
at <unknown> <0xffffffff>
at System.Windows.Forms.XplatUICarbon:CGDisplayBounds <0x000b7>
at System.Windows.Forms.XplatUICarbon:get_WorkingArea <0x00072>
at System.Windows.Forms.XplatUICarbon:get_VirtualScreen <0x00043>
at System.Windows.Forms.XplatUI:get_VirtualScreen <0x00048>
at System.Windows.Forms.Screen:.cctor <0x0017a>
at System.Object:runtime_invoke_void <0x000a5>
at <unknown> <0xffffffff>
at System.Windows.Forms.Form:get_CreateParams <0x00622>
at System.Windows.Forms.Form:SetClientSizeCore <0x001c7>
at System.Windows.Forms.Control:set_ClientSize <0x00048>
at System.Windows.Forms.Form:set_ClientSize <0x00052>
at System.Windows.Forms.Form:UpdateWindowText <0x00082>
at System.Windows.Forms.Control:set_Text <0x000a8>
at System.Windows.Forms.Form:set_Text <0x0004a>
at ZXMAK2.Host.WinForms.Views.MainView:InitializeComponent <0x06100>
at ZXMAK2.Host.WinForms.Views.MainView:.ctor <0x00382>
at ZXMAK2.Host.WinForms.Views.MainView:.ctor <0x00072>
at System.Object:BuildUp_ZXMAK2.Host.WinForms.Views.MainView <0x00272>
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan:BuildUp <0x00046>
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy:PreBuildUp <0x001d6>
at Microsoft.Practices.ObjectBuilder2.StrategyChain:ExecuteBuildUp <0x000c1>
at Microsoft.Practices.Unity.UnityContainer:DoBuildUp <0x00288>
at Microsoft.Practices.Unity.UnityContainer:DoBuildUp <0x00062>
at Microsoft.Practices.Unity.UnityContainer:Resolve <0x0005a>
at Microsoft.Practices.Unity.UnityContainerExtensions:Resolve <0x00087>
at ZXMAK2.Dependency.ResolverUnity:Resolve <0x00322>
at ZXMAK2.Host.Presentation.Launcher:Run <0x0017f>
at ZXMAK2.Program:RunSafe <0x00059>
at ZXMAK2.Program:Main <0x0015a>
at <Module>:runtime_invoke_void_object <0x000b0>
=================================================================
./zxmak2: line 3: 83662 Abort trap: 6 mono "$(dirname ${BASH_SOURCE[0]:-$0})"/ZXMAK2.exe "$@"
[свернуть]
Вообщем я думаю вот в чем основная причина:
WARNING: The Carbon driver has not been ported to 64bits, and very few parts of Windows.Forms will work properly, or at all
И так да, с 10.15 macos 64bit только.
В подтверждении по части carbon'а:
--
With the release of the Macintosh's 10.15 (Catalina) update, the Carbon API was officially discontinued and removed, leaving Cocoa as the sole primary API for developing modern Mac applications.
--
Тогда это очень печально :-(
А кто то из пользователей активных писал о том что удачно все запустил под macos?
А попробуйте создать вот такой файл testwf.cs:
и затем скомпилировать его и запустить:Код:using System;
using System.Windows.Forms;
class Program {
static void Main(string[] args) {
try {
using (var form = new Form())
{
Application.Run(form);
}
} catch (Exception ex) {
Console.WriteLine("\x1b[31;1m{0}:\x1b[22m {1}\n{2}\x1b[0m", ex.GetType().Name, ex.Message, ex.StackTrace);
}
}
}
Откроется окно?Код:mcs -out:"testwf.exe" -debug -define:DEBUG testwf.cs -r:System.Windows.Forms
mono --debug testwf.exe
Крешнулось :-(
Скрытый текст
abayrak@MacBook-Air-Alexander ZXMAK2 % mcs -out:"testwf.exe" -debug -define:DEBUG testwf.cs -r:System.Windows.Forms
abayrak@MacBook-Air-Alexander ZXMAK2 % mono --debug testwf.exe
WARNING: The Carbon driver has not been ported to 64bits, and very few parts of Windows.Forms will work properly, or at all
=================================================================
Native Crash Reporting
=================================================================
Got a segv while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
=================================================================
Native stacktrace:
=================================================================
0x10ac8585c - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_dump_native_crash_info
0x10ac2df59 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_handle_native_crash
0x10ae2d54d - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : altstack_handle_and_restore.cold.1
0x10ac80e58 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_amd64_get_exception_trampolines
0x7ff822d93d87 - /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight : SLDisplayBounds
0x111f8bda8 - Unknown
0x10b32dcc6 - Unknown
0x10abaf017 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_runtime_invoke
0x10ad64c5d - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : do_runtime_invoke
0x10ad610b8 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_runtime_class_init_full
0x10aba79a2 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_compile_method_inner
0x10abab33b - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_jit_compile_method_with_opt
0x10ac302c0 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : common_call_trampoline
0x10ac2fcf1 - /usr/local/Cellar/mono/6.14.1/bin/mono-sgen : mono_magic_trampoline
0x10b0fa396 - Unknown
0x111f8b32b - Unknown
=================================================================
External Debugger Dump:
=================================================================
=================================================================
Basic Fault Address Reporting
=================================================================
Memory around native instruction pointer (0x7ff822d93d87):0x7ff822d93d77 89 fb 48 8b 05 d0 18 fe 3a 0f 10 00 0f 10 48 10 ..H.....:.....H.
0x7ff822d93d87 0f 11 4f 10 0f 11 07 89 f7 48 89 de e8 67 00 fb ..O......H...g..
0x7ff822d93d97 ff 48 89 d8 48 83 c4 08 5b 5d c3 55 48 89 e5 53 .H..H...[].UH..S
0x7ff822d93da7 48 83 ec 28 48 8b 05 16 2b fe 3a 48 8b 00 48 89 H..(H...+.:H..H.
=================================================================
Managed Stacktrace:
=================================================================
at <unknown> <0xffffffff>
at System.Windows.Forms.XplatUICarbon:CGDisplayBounds <0x000b7>
at System.Windows.Forms.XplatUICarbon:get_WorkingArea <0x00072>
at System.Windows.Forms.XplatUICarbon:get_VirtualScreen <0x00043>
at System.Windows.Forms.XplatUI:get_VirtualScreen <0x00048>
at System.Windows.Forms.Screen:.cctor <0x0017a>
at System.Object:runtime_invoke_void <0x000a5>
at <unknown> <0xffffffff>
at System.Windows.Forms.Hwnd:GetNextStackedFormLocation <0x001aa>
at System.Windows.Forms.XplatUICarbon:CreateWindow <0x00462>
at System.Windows.Forms.XplatUI:CreateWindow <0x00047>
at System.Windows.Forms.NativeWindow:CreateHandle <0x0006a>
at System.Windows.Forms.Control:CreateHandle <0x000ac>
at System.Windows.Forms.Form:CreateHandle <0x00052>
at System.Windows.Forms.Control:CreateControl <0x000ba>
at System.Windows.Forms.Control:SetVisibleCore <0x000fa>
at System.Windows.Forms.Form:SetVisibleCore <0x0023a>
at System.Windows.Forms.Control:set_Visible <0x00052>
at System.Windows.Forms.Control:set_Visible <0x000aa>
at System.Windows.Forms.Application:RunLoop <0x00422>
at System.Windows.Forms.Application:Run <0x00092>
at System.Windows.Forms.Application:Run <0x0007a>
at Program:Main <0x000b2>
at <Module>:runtime_invoke_void_object <0x000b0>
=================================================================
zsh: abort mono --debug testwf.exe
abayrak@MacBook-Air-Alexander ZXMAK2 %
[свернуть]
это плохо, значит Windows.Forms не получится использовать. Можно еще попробовать более старую версию mono 6.12, может там бакенд для Windows.Forms на MacOS работает.
Попробуйте еще вот этот тест запустить, это на основе моего нового opengl движка, он не использует Windows.Forms, должен открыть окно и показывать два кадра из raw файлов (это сырой код текстур 320x256x4 записаный из эмулятора) должна получиться мультиколорная картинка из эмулятора. По F11 переключается в полноэкранный режим и обратно, но это помоему только для Linux и Windows реализовано, для MacOS я полноэкранный режим помоему не доделал. Я когда-то отлаживал на старой версии MacOS и вроде работало, работает ли сейчас на MacOS не знаю, т.к. основная отладка велась на Linux и Windows. Скопируете лог инициализации который в консоль пишется сюда.
Вообще хотел использовать его совместно с Windows.Forms, но раз на MacOS он не работает, то прийдется без Windows.Forms чтото придумывать. Это печально. На Linux с OpenGL все замечательно работает, я думал и на MacOS все будет хорошо, в Windows только с OpenGL проблемы с потерей некоторых кадров. А тут еще и в MacOS поддержку убрали...
ZXMAK, Полный провал, но есть мысли.
Скрытый текст
abayrak@MacBook-Air-Alexander test_gl % mono test-zx.exe
sizeof(void*): 8
sizeof(utsname): 2304
EntryPointNotFoundException: NewEventHandlerUPP assembly:<unknown assembly> type:<unknown type> member:(null)
at (wrapper managed-to-native) SFGL.Platform.Mac.NativeMethods.NewEventHandlerUPP(SFGL.Platform.Mac.Carbon.MacOSEventHandler)
at SFGL.Platform.Mac.CarbonApp.ConnectEvents () [0x0011f] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
at SFGL.Platform.Mac.CarbonApp.Initialize () [0x0001e] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
at SFGL.Platform.Mac.Window.CreateNativeWindow (SFGL.Platform.Mac.Carbon.WindowClass class, SFGL.Platform.Mac.Carbon.WindowAttributes attrib, SFGL.Platform.Mac.Carbon.Rect r) [0x00001] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
at SFGL.Platform.Mac.Window..ctor (SFGL.Platform.Mac.Carbon.WindowClass class, SFGL.Platform.Mac.Carbon.WindowAttributes attrib, System.Int16 width, System.Int16 height, SFGL.Platform.PixelSettings pixelSettings) [0x0002b] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
at SFGL.Platform.Mac.Window..ctor (System.Int16 width, System.Int16 height, SFGL.Platform.PixelSettings pixelSettings) [0x00000] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
at SFGL.Platform.Mac.FactoryMac.CreateWindow (System.Int32 width, System.Int32 height, SFGL.Platform.PixelSettings pixelSettings) [0x00001] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
at TESTZX.Program.Main () [0x0000e] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
abayrak@MacBook-Air-Alexander test_gl %
[свернуть]
Опять упоминается Carbon - который не работает на 64bit. Я не программист, но меня в логе смутило:
System.Int16 и System.Int32 - Под Int я-ж правильно понимаю что это Integer?
хм, судя по логу программа не смогла загрузить функцию NewEventHandlerUPP для инициализации Carbon.
Хотя она работает в 64-битном режиме, получается Carbon в 64 битном режиме не доступен?
А в 32-битном режиме он доступен? Или его вообще выпилили из MacOS с концами?
Уже не помню деталей, возможно я отлаживал код на 32-битной MacOS и возможно в этом проблема - на 64-битной системе возможно нужно использовать другое имя функции или чтото подправить. Ну или как вариант - ждать пока в mono добавят драйвер для Cocoa.
Если ктото может привести пример на Си для инициализации окна OpenGL под новые API MacOS, можно попробовать сделать новый бакенд.
System.Int32 - это тип int C# он всегда 32-битный независимо от того на какой платформе и каком процессоре работает.
System.Int16 - это тип short C# он всегда 16-битный независимо от того на какой платформе и каком процессоре работает.
с тем фрагментом кода все в порядке - это обертка над MacOS API. Проблема возникает тут:
Функция CarbonApp.ConnectEvents () пытается инициализировать Carbon, а точнее установить обработчик событий окна, но падает, т.к. не может найти функцию NewEventHandlerUPP, вот как эта функция определена:Код:EntryPointNotFoundException: NewEventHandlerUPP assembly:<unknown assembly> type:<unknown type> memberhttps://zx-pk.ru/images/smilies/dizzy_frown.gifnull)
at (wrapper managed-to-native) SFGL.Platform.Mac.NativeMethods.NewEventHandlerUPP(SFGL.Platform.Mac.Carbon.MacOSEventHandler)
at SFGL.Platform.Mac.CarbonApp.ConnectEvents () [0x0011f] in <5b0a5322be994d2cb9f0eb60e99c30c7>:0
любопытно тут то, что перед этой функцией вызывается AcquireRootMenu() и судя по логу она вызвалась успешно, т.е. Carbon всетаки есть, но видимо API поменялся и вместо NewEventHandlerUPP нужно дергать чтото другое...Код:private const string Carbon = "/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon";
private const string GestaltLib = "/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon";
private const string Agl = "/System/Library/Frameworks/AGL.framework/Versions/Current/AGL";
[SuppressUnmanagedCodeSecurity]
[DllImport(Carbon)]
public static extern IntPtr AcquireRootMenu();
[SuppressUnmanagedCodeSecurity]
[DllImport(Carbon)]
public static extern IntPtr NewEventHandlerUPP(MacOSEventHandler handler);
...
internal delegate OSStatus MacOSEventHandler(IntPtr inCaller, IntPtr inEvent, IntPtr userData);
}
AI говорит, что Carbon вообще выпилили... Говорит, что запустить Carbon приложение можно только из 32-битного режима, для этого предлагает запускать так:
но тут-же пишет, что это сработает только если у вас установлена 32-битная версия Mono и вы используете старую версию macOS (<10.15). Начиная с macOS Catalina, 32-битные приложения вообще не поддерживаются. Т.е. Carbon вообще никак теперь нельзя использовать. А некоторые функции все еще работают, т.к. используются в Cocoa. Вот так...Код:arch -i386 mono test-zx.exe
Вобщем можно поправить, но для этого нужно переделать код для использования Cocoa вместо Carbon.
В процессе прогона тестов оказалось, что в тестовом билде 9 была добавлена ошибка. Точнее при исправлении флагов INIR/INDR по ошибке была удалена 1T задержка. Что привело к ошибкам в contended memory тестах.
Вот исправленная версия 9b: https://github.com/zxmak/ZXMAK2/issu...ent-2845991083
PS: Кстати, к своему удивлению заметил что скорость в режиме max speed стала в 3-4 раза выше, чем в старом релизе 2.9.3.8. Не обратил внимание, что привело к такому ускорению, но теперь эмулятор стал заметно шустрее.
видимо от процессора зависит у меня 200 vs 700
ZXMAK, а когда планируешь стабильную версию выпустить ?
вроде уже довольно много изменений набралось.
ZXMAK, По части сборки для macos - пока временная тишина. У себя пока ничего нового сделать не могу. Тут видимо у кого маки - или не интересно, или лень.
Я уже написал 2 людям проверенным у кого mac - в наличии - но один ща в 4 дне запоя по случаю майских, а второй в пути.
Но тех задание, и просьбу выйти на связь - я заслал, так что продолжим в ближайшее время - наш мини-детектив, со сборочкой ZXMAK2 - для macos.
Думаю просто дело чести довести до конца, а как идеал - оформим еще что бы через brew можно было поставить.
вот есть какой-то Cocoa driver для mono в MacOS: https://github.com/migueldeicaza/CocoaDriver, посмотрите, может получится собрать с ним.
У меня macOS нету и виртуалку запустить не могу, поэтому проверять не на чем.
ZXMAK, подскажи пожалуйста, можно ли в новых тестовых версиях отключить принудительное логгирование в текстовый файл *.log?
Поставил свежий релиз 2.9.3.8 (другие не пробовал на этой машине) на полностью заапдейченную 10-ю винду - вроде работает, но вверху экрана постоянно горит сообщение "System.DllNotFoundException: Unable to load DLL 'd3dx9_43'. The specified module could not be found."
Полагаю, эмуль требует какой-то фиксированной версии DirectX?
Видимо, нужен https://www.microsoft.com/ru-ru/down...ils.aspx?id=35
Надеюсь, с @ZXMAK все хорошо. Что-то он с лета не появлялся.