Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Томахомэ

Страницы: [1] 2 3 4 5 ... 37 Далее
1
А как многоигровки вообще обходятся с векторами и обработчиками прерываний, которые у каждой игры разные?

2
Глянул я как-то в lostwsga в gun adjustments, и там после небольшой проверки сложилось ощущение, будто "реальный" прицел игры движется сильно быстрее MAMEовского, из-за чего и рождается откос при стрельбе. Никому больше так не кажется?

3
хорошо, что я ничего не понял... а то бы как понял!

Всё проще, чем звучит. Представь, что вот этот вот роскошный кусище

VBlank:
0017F4: 48E7 FFFE                movem.l D0-D7/A0-A6, -(A7)
0017F8: 007C 0700                ori     #$700, SR
0017FC: 2A7C 00C0 0004           movea.l #$c00004, A5
001802: 2C7C 00C0 0000           movea.l #$c00000, A6
001808: 4A38 E2B2                tst.b   $e2b2.w
00180C: 6704                     beq     $1812
00180E: 4EBA F01E                jsr     ($82e,PC)
001812: 2038 E002                move.l  $e002.w, D0
001816: 6704                     beq     $181c
001818: 2040                     movea.l D0, A0
00181A: 4E90                     jsr     (A0)
00181C: 5278 E006                addq.w  #1, $e006.w
001820: 52B8 E01A                addq.l  #1, $e01a.w
001824: 4A38 E426                tst.b   $e426.w
001828: 6704                     beq     $182e
00182A: 5338 E426                subq.b  #1, $e426.w
00182E: 45F8 F800                lea     $f800.w, A2
001832: 141A                     move.b  (A2)+, D2
001834: 6F20                     ble     $1856
001836: 0242 0003                andi.w  #$3, D2
00183A: 7600                     moveq   #$0, D3
00183C: 161A                     move.b  (A2)+, D3
00183E: 0C43 0014                cmpi.w  #$14, D3
001842: 6D0E                     blt     $1852
001844: 0C43 003C                cmpi.w  #$3c, D3
001848: 6E08                     bgt     $1852
00184A: 2F03                     move.l  D3, -(A7)
00184C: 4EB8 1664                jsr     $1664.w
001850: 588F                     addq.l  #4, A7
001852: 5302                     subq.b  #1, D2
001854: 6EE6                     bgt     $183c
001856: 42B8 F800                clr.l   $f800.w
00185A: 4CDF 7FFF                movem.l (A7)+, D0-D7/A0-A6
00185E: 4E73                     rte

переписали на ассемблере для PowerPC или MIPS с учётом всей специфики Model 3 либо же PS2 соответственно. Он в таком виде будет лежать в памяти железяки наряду и параллельно с "родным" обработчиком. У переписанного саба есть определённый адрес - в случае с PS2 этот адрес достаточно сунуть в тот участок таблицы, где хранится вектор кадрового прерывания. C Model 3 придётся повыворачиваться чуть побольше - берём с адреса $500 (вроде кадровые прерывания там повешены именно на него) первые 16 байт - т. е. 4 инструкции PowerPC, у которого в силу RISC-архитектуры все команды фиксированного размера - помещаем их в какое-нибудь временное хранилище, откуда они потом, перед возвращением в материнскую игру, будут достаны и возвращены обратно, и заменяем на $3c000000|regX<<21|VBlank>>16 (то есть li regX, VBlank&$ffff0000), $38000000|regX<<21|regX<<16|VBlank&$ffff (addi regX, VBlank&$ffff), $7c0803a6|regX<<21 (mtspr lr,regX) и $4e800020 (blr).

4
Если вознамерился портировать Dune или какой-то из её хаков на другую платформу с одной стороны, не "на глазок", а через переписку дизассемблята под нужную архитектуру, а с другой, не как самостоятельную игру, а как высокоинтегративный SDK-, движко-, и, может быть, даже языконезависимый модуль (несущий на себе функцию, например, какой-то бонусной активности внутри другой игры), то как бы перевалить отрисовку экрана и всякий такой код, который надо выполнять каждый кадр, с обработчика прерываний (пусть модуль полагается на таковой у материнской игры) на сердцевину модуля?

Хммм... В принципе, уже для другого проекта, Sails of Charon - тоже на основе переписанного под другие архитектуры дизассемблята Dune - в случае с версией для Sega Model 3 (использующей PowerPC, у которого адреса прерываний фиксированные, и притом в случае конкретно с Model 3 лежат они в области ОЗУ) можно по-тихому зарезервировать куда-нибудь первые несколько байт у обработчиков прерываний материнской игры и подменить их на байты короткой операции скачка на подставные, родом из модуля, обработчики. В случае с портом на PS2 (у MIPS-ов прерывания вроде как раз, наоборот, жёстко привязаны к таблице векторов, как у M68000) можно аналогичным образом поступить с адресами из таблицы.  А вот с портами на PS3, XBOX360 и Wii, где имеется полноценная ОСька, уже сложнее - неясно, не лишит ли такой ход возможности обращаться к стандартным системным функциям, понизив тем самым уровень hardware abstraction, и не начнётся ли у систем безопасности истерика, будто какое-то вредоносное ПО пытается просочиться в запретные области.

5
1 ядро будет работать, остальные курить...

Впрочем, может, для двухмерной или трёх-, но достаточно минималистичной по полигонажу, текстурам, эффектам и т. д. (благо, с высоты птичьего полёта экономии будет не особо заметно) встроенной, по сути, мини-игры и этого окажется вполне достаточно.

6
под одно ядро...

А сколько, кстати, ядер было у PS4, XBOX One и ранних моделей LG Smart TV (с не столь уж и давних пор - тоже ретро, хоть и не настолько, как Mega Drive)? Разработчикам хоумбрю-игр под эти платформы модуль на основе переписанного под соответствующие архитектуры декомпилята Dune
как встройку в их игры предлагать буду.

7
Если вознамерился портировать Dune или какой-то из её хаков на другую платформу с одной стороны, не "на глазок", а через переписку дизассемблята под нужную архитектуру, а с другой, не как самостоятельную игру, а как высокоинтегративный SDK-, движко-, и, может быть, даже языконезависимый модуль (несущий на себе функцию, например, какой-то бонусной активности внутри другой игры), то как бы перевалить отрисовку экрана и всякий такой код, который надо выполнять каждый кадр, с обработчика прерываний (пусть модуль полагается на таковой у материнской игры) на сердцевину модуля?

8
Самым же лучшим вариантом для программирования будет Claude Opus 4.6. Для него тоже есть штуковина для агентного программирования. Нейронки в таком режиме могут разрабатывать код часами, а не выдавать результат после пяти секунд раздумий.

Жаль только, там с российским номером не верифицироваться.

9
Если брать только американские нейронки, то Grok - самый тупой. Он даже не способен написать код эмулятора. Единственный его плюс - не стесняется материться и может послать на *** :biggrin:.

Вовремя я, однако, на Gemini пересел.  :biggrin: Кстати, о последнем - насколько адекватен тут созданный им прикреплённый ниже скрипт снятия художественного стиля с пакета изображений и сохранения в формате .pth?

10
а в комментариях там дан ответ в чем вероятная причина.

Это вот здесь
Цитата
With the cycle-granular Z80 and new memory system features, it might be time to revisit this stuff.
, что ли?

11
какого бага? внизу я вижу коментарии Vas-а типа что тот кто создал issue просто голову морочит

Растянутости сэмплов музыкальных инструментов и, иногда, подзаикивании звуковых эффектов, которые будут в играх с Capcom Play System Dash, если самостоятельно собрать MAME без QSound HLE, при том что в целом игра будет работать на фулспиде.

12
Как кто думает, что может быть причиной бага низкоуровневой эмуляции QSound, описанного здесь? Для максимального сужения круга версий вот .сам низкоуровневый драйвер.

13
Новости из мира эмуляции экзотических систем:
310479-0

310481-1


Есть ли здесь кто-то, кто очень-очень ждёт реализации в MAME какой-то из Sun'овских машин, и потому видит в новости по ссылке знак добрый? Я, например, жду Sun Ultra 30 - ради ориентировавшегося по большей части именно на неё как на эталон Solaris SPARC-эксклюзивного 3D-бенчмарка Damn, are we really going to Vietnam again?

Просьба не размещать с помощью тэга img изображение со стороной более 700 пикселей. ghostdog3

14
Никто тута часом не знает, откуда Yun Sung взяли вот этот сэмпл для Paparazzi?

15
movem.l d0-d2/a0-a1, -(a7)
movea.l #$200000, a1
add.l d0, d0
subq.l #$1, d1
move.b $1(a1, d0.l), d2 ;d0=423e
move.b d2, (a0)+

Вроде в пределах первых 4 МБ адресуемого адресного пространства, если данная область заполнена не полностью, SMD заполненную зеркалит по нескольку раз.

Добавлено позже:
В этом я убедился, просматривая дебаггер MAME на позициях параллельно $0 и $100000 во время выполнения Dune II.

Добавлено позже:
Ровно такая же ситуация с $200000 и $300000.

Добавлено позже:
Процитированный тобой код - это, возможно, форма антипиратской защиты.

16
Никто не знает, как на редких рабочих и условно рабочих в MAME IBM-совместимых машинах (вроде ct486) добиться поддержки General MIDI в играх? Девайса mpu401 в виртуальном слоте isa3 что в DOS, что в Windows для этого, как я погляжу, явно недостаточно.

17
Общий / Идеи игр и Хаков!
« : 05 Февраль 2026, 15:06:36 »
Ни у кого случайно не зажжёт огоньку в глазах идея хаков игр автоматских?

18
Так всё-таки нужно или не нужно?

19
Конечно по Сатурну.

Которую из PDF-ок из базы по ссылке выше?

20
Почитай про обработку исключений и регистр VBR.

Искать эту инфу надо в документах конкретно по Сатурну или по всем семейству процессоров SH вообще?

21
Значит, плохо смотрел.

Это-то ясно, а вот с функционалом конкретных адресов внутри Work RAM-H уже непонятица пошла. Что же именно хранится конкретно перед областью стека (в моём случае начинающейся с $6001000, ибо, как видим на первом из моих скриншотов, по смещению $f8 - то есть, если отбросить маркер начала сектора, $e8 - о меня нулики)?

22
Во-первых, зачем тебе это? А во-вторых, почему бы не почитать официальную документацию?

Реверс-энжинеринг требует ясности. А когда непонятно даже толком, что где лежит... Хорошо еще, если это область после стека, куда консоль грузит данные с диска - тогда это для хранения внутриигровых данных. А вот переменные $60002dc и $6000260 (см. кусок дизасма бута всё того же Death Crimson ниже) - они для чего, учитывая, что заносится в моём случае бут в область, начинающуюся с $6002000?

Официальную техдокументацию я уже прошуровал, по самым разным PDFкам - нашел только про STACK-(M/S) и 1st READ ADDRESS. О назначении прочих областей RAM - пока ничего.

AIP:
0e20: d708  MOV.L   @($0020,PC),R7 [00000E44]
0e22: d507  MOV.L   @($001C,PC),R5 [00000E40]
0e24: 6772  MOV.L   @R7,R7
0e26: 6352  MOV.L   @R5,R3
0e28: c71b  MOVA    @($006C,PC),R0 [00000E98]
0e2a: 2032  MOV.L   R3,@R0
0e2c: c706  MOVA    @($0018,PC),R0 [00000E48]
0e2e: 6173  MOV     R7,R1
0e30: e215  MOV     #$15,R2
0e32: 6406  MOV.L   @R0+,R4
0e34: 4210  DT      R2
0e36: 2142  MOV.L   R4,@R1
0e38: 8ffb  BFS     $00000E32
0e3a: 7104  ADD     #$04,R1
0e3c: a030  BRA     $00000EA0
0e3e: 2572  MOV.L   R7,@R5

0e40: 0600 02dc

0e44: 0600 0260
<...>
0e98: 0000 0000

23
Судя по границе 2-го и 3-го секторов, система коррекции ошибок чтения на сатурновских CD также присутствует. Размеры данных для неё, я так понимаю, нужно также учитывать?

Добавлено позже:
В общем-то так и оказалось, что надо. Теперь вопрос посерьёзнее - есть ли у Сатурна какие-то свои системные переменные и стандартные вызовы BIOS'а, как у MSX или Neo-Geo? И если да, то как(ой/ая) за каким адресом закрепл(ё/е)н(а):

24
Задался тут вопросом, почему стейтсэйвинг в драйверах snk.cpp, snk.h и snk_v.cpp до сих пор аж десятилетия спустя всё ещё остаётся неподдерживаемым.

Пошуровал по списку переменных в заголовочном файле. Из, например, более-менее общих для всего драйвера до сих пор не засэйвлены int m_num_sprites, int m_yscroll_mask, uint32_t m_bg_tile_offset и uint32_t m_tx_tile_offset. Их надо вообще сохранять, и если да, то куда класть соответствующие вызовы функции save_item - в void snk_state::register_save_state() (файл snk_v.cpp) или куда-то ещё?

25
Почитав тему о том, почему на "Денди" была редка или вообще отсутствовала "Castlevania 3", задался вопросом, озвученным в названии этой темы. Понятно, что "Зельду", вероятно, не пиратили или почти не пиратили из-за необходимости воспроизводить батарейку для сохранений. Но есть и другие случаи. Да и можно задаться вопросом, почему некоторые игры пиратили гораздо реже, чем другие. Понятно, что причины, вероятно, разные.

Вроде Castlevania пиратнули Kaiser. Правда, взяли они за основу не картриджную (для японского релиза которой Konami добавили свой звуковой чип VRC7), а FDS'овскую.

26
ммм, а что с ней не так ?
вас в школе таблицы читать не учили? вверху столбца английским по белому написано SIZE, т.е. длина, и она не фиксированная потому что IP может поддерживать один или несколько регионов

Поддерживаемый регион у DC, как видим по первому скриншоту, только 1. Значит, AIP должен начинаться с $e40 (System ID+Security Code+монорегиональный Area Code+маркера нового сектора по смещениям 0 и $930)?

27
Диапазон.

Его-то я как раз и имел в виду под "плавающим".
Короче, вон у нас тут куски хекса в начале образа. Если учесть 16-байтные маркера секторов и взять максимальный размер кода регионов - $100 - то AIP должен начинаться с $f20, но там вместо данных, должных напоминать код - середина текста копирайтов, а сами какие-то такие данные идут лишь с $f60. Я что-то упустил при расчёте?

28
Оно не плавающее, а постоянное. Внизу документа же идёт расшифровка.

А что тогда должно значить 20~100h?

29
Надыбал на SegaRetro.org один из техдоков по Сатурну. От чего может зависеть "плавающее" значение Area Code Group? Знать его важно, чтобы вычислить адрес Application Initial Program внутри диска.

30
Почему? Те кто в теме и так знают, а те кто не в теме - им скорей пофиг. Дримовскому диску для запуска нажны две сессии - это был главный прикол, из-за чего дримку не надо было чиповать и ломать другими способами.
А структура... так посмотри на cui от первой плойки - там по большей части примерно так же.

Только это не Dreamcast'овская - это Saturn'овская самая первая часть серии. Или у Сатурна так же?

Страницы: [1] 2 3 4 5 ... 37 Далее