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

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


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

Страницы: [1] 2 3 4 5 ... 33 Далее
1
Вот тут у нас - первичный лонч Double Point:

000106: 46FC 2700                move    #$2700, SR
00010A: 4FF9 0008 4000           lea     $84000.l, A7
000110: 41F9 0008 0000           lea     $80000.l, A0
000116: 303C 0FFF                move.w  #$fff, D0
00011A: 20FC 0000 0000           move.l  #$0, (A0)+
000120: 51C8 FFF8                dbra    D0, $11a
000124: 41F9 0003 F800           lea     $3f800.l, A0
00012A: 43F9 0008 0000           lea     $80000.l, A1
000130: 3E3C 01FF                move.w  #$1ff, D7
000134: 22D8                     move.l  (A0)+, (A1)+
000136: 51CF FFFC                dbra    D7, $134
00013A: 4EB9 0001 489A           jsr     $1489a.l
000140: 60FE                     bra     $140
<...>
01489A: 303C 48E7 movem.l D2-D3/A2-A5, -(A7)
01489E: 207C 0000 B97C move.l #$b97c, A0
0148A4: 2408                     move.l  A0, D2
0148A6: 263C 0008 24EC           move.l  #$824ec, D3
0148AC: 4EB9 0000 B1C2           jsr     $b1c2.l
0148B2: 4241                     clr.w   D1
0148B4: 207C 0008 24C6           movea.l #$824c6, A0
0148BA: 227C 0000 062A           movea.l #$62a, A1
0148C0: 247C 0008 24B2           movea.l #$824b2, A2
0148C6: 267C 0000 063E           movea.l #$63e, A3
0148CC: 287C 0008 24DA           movea.l #$824da, A4
0148D2: 203C 0000 0652           move.l  #$652, D0
0148D8: 20D9                     move.l  (A1)+, (A0)+
0148DA: 24DB                     move.l  (A3)+, (A2)+
0148DC: 2A40                     movea.l D0, A5
0148DE: 38D5                     move.w  (A5), (A4)+
0148E0: 5241                     addq.w  #1, D1
0148E2: 5480                     addq.l  #2, D0
0148E4: 0C41 0005                cmpi.w  #$5, D1
0148E8: 65EE                     bcs     $148d8
0148EA: 4EB9 0000 BA14           jsr     $ba14.l
0148F0: 4240                     clr.w   D0
0148F2: 33C0 0008 24EA           move.w  D0, $824ea.l
0148F8: 33C0 0008 2498           move.w  D0, $82498.l
0148FE: 33C0 0008 24F6           move.w  D0, $824f6.l
014904: 4EB9 0000 DFD8           jsr     $dfd8.l
01490A: 2443                     movea.l D3, A2
01490C: 082A 0007 0001           btst    #$7, ($1,A2)
014912: 6706                     beq     $1491a
014914: 4878 0003                pea     $3.w
014918: 6022                     bra     $1493c
01491A: 2043                     movea.l D3, A0
01491C: 0828 0004 0001           btst    #$4, ($1,A0)
014922: 6706                     beq     $1492a
014924: 4878 0004                pea     $4.w
014928: 6012                     bra     $1493c
01492A: 2043                     movea.l D3, A0
01492C: 0828 0005 0001           btst    #$5, ($1,A0)
014932: 6706                     beq     $1493a
014934: 4878 0005                pea     $5.w
014938: 6002                     bra     $1493c
01493A: 42A7                     clr.l   -(A7)
01493C: 4EB9 0000 B97C           jsr     $b97c.l
014942: 588F                     addq.l  #4, A7
014944: 4EB9 0000 0174           jsr     $174.l
01494A: 60FE                     bra     $1494a

А тут - обработчик кадрового прерывания:

000142: 48E7 FFFE                movem.l D0-D7/A0-A6, -(A7)
000146: 3039 0008 1E96           move.w  $81e96.l, D0
00014C: 0C40 0000                cmpi.w  #$0, D0
000150: 6700 0010                beq     $162
000154: 4EB8 0180                jsr     $180.w
000158: 4E71                     nop
00015A: 33FC 0000 0008 1E96      move.w  #$0, $81e96.l
000162: 4EB8 01C2                jsr     $1c2.w
000166: 4E71                     nop
000168: 4EB9 0001 4EB6           jsr     $14eb6.l
00016E: 4CDF 7FFF                movem.l (A7)+, D0-D7/A0-A6
000172: 4E73                     rte

Дизассемблят Double Point я решил взять за основу limited access-source'ного движка бонусной активности для разных хоумбрюшных игр на Neo-Geo. Такой перенос повторяющихся действий с обработчика прерываний на основной код достаточно грамотен?

;movem.l D2-D3/A2-A5, -(A7)
;move.l #LocalModeSelect, D2
jsr cls_local
moveq #4, D1
movea.l #TemporaryLocalPlayerNames, A0
movea.l #LocalPlayerNames, A1
movea.l #TemporaryLocalHiScore, A2
movea.l #LocalHiScore, A3
movea.l #TemporaryLocalAvatars, A4
movea.l #LocalAvatars, A5
LocalHiScoreInit:
move.l (A1)+, (A0)+
move.l (A3)+, (A2)+
move.w (A5)+, (A4)+
dbra D1, LocalHiScoreInit
;jsr LocalSoundInit
clr.w $824ea.l
clr.w $82498.l
clr.w $824f6.l
clr.l -(A7)
jsr LocalModeSelect
addq.l #4, A7
VBlankReturnCheck:
cmp BIOS_FRAME_COUNTER, LocalFrameCounter
beq VBlankReturnCheck
movem.l D0-D7/A0-A6, -(A7)
move.w LocalPalChange, D0
cmpi.w #0, D0
beq LocalNewFrame
jsr LocalLoadPal
move.w #0,  LocalPalChange
LocalNewFrame:
jsr LocalPlaySound
jsr BonusGameLoop
movem.l (A7)+, D0-D7/A0-A6
bra VBlankReturnCheck

Предваряя возникающие вопросы, спешу предупредить, что в последней цитате из кода сохранившие свою числовую форму переменные считайте, называются так условно (про то, что work RAM у Neo-Geo и железа Double Point назначен на разные области адресуемого пространства, я таки прекрасно в курсах), LocalFrameCounter должна прирасти в BonusGameLoop или одной из её дочерних подпрограмм (примерно как системный счётчик кадров в оригинальной Double Point), а код с jsr     $dfd8.l по clr.l   -(A7) пропал потому, что у Double Point он отвечал за считывание аппаратных (в то время как у Neo-Geo за сугубо игровые настройки отвечают программные, да и вообще сложность и пр. у бонусной игры должны плясать от аналогичных параметров материнской игры) DIPов и переход, в зависимости от включенных, в один из нескольких разных сервисных режимов (коих у мини-игры, понятно-дело, быть не может). Сообразуясь с той же логикой, под нож пущены и предварительная чистка ОЗУ.

2
но, некоторые изменения действительно ожидаются, вернее они уже есть в репозитории - переход на стандарт С++20.
в связи с чем идут лесом компиляторы без его поддержки, то есть GCC ниже 11й версии (видимо кто-то на банистере на это жаловался) а значит и все более старые дистрибутивы линуха их использующие. виндовые минимальные требования также планируется повысить, хз до каких, по идее до win10.

Ну что ж, как говорил дядя Билл, обосновывая прекращение поддержки Windows XP, "ностальгия - это не стратегия"! К тому же опыт оставления MAME за бортом ещё более старых GCC уже был, причём недавний.

3
Томахомэ, анонсирован когда? 1го апреля? вы там хоть по праздникам голову включайте что-ли ;)

Первоапрельские шутки у MAME Team выглядят вроде по-другому. К тому же это были как раз дни, когда они в чятике на forums.bannister.org жаловались на трудности компиляции - я и подумал, что у них код на C++ с течением времени засрался до неуклюжести. Плюс недовольство недостаточно высокими темпами охвата дампинга и прогресса в росте точности эмуляции (вплоть до намёков, что кое-что могут и не успеть достаточно сэмулировать, пока оно "живо")... К тому же, если это шутка, зачем называть конкретный срок начала реэмиграции - майский релиз?

4
Железо / Альтернативы MiSTerFPGA.
« : 04 Апрель 2026, 16:45:33 »
Когда еще Мистер не был столь популярен, плату DE10 nano  у Terasic можно было урвать за 100$, так что выводы сколько стоит можете сделать сами. Скорее всего себестоимость гораздо ниже даже этой цены, ибо в убыток себе никто продавать не будет. И таки да, самый дорогой чип на этой плате это 5cseba6u23i7 SOC Cyclone V. Кстати на EBAY самый дешевый 5cseba6u23i7 стоит 18.48$

А уж если найти что подешевле, обладая при этом достаточным запасом пряморучия и деловой жилкой, можно навариться на самосборной FPGA-реализации какого-нибудь ретро-игрового автомата.

5
Железо / Альтернативы MiSTerFPGA.
« : 04 Апрель 2026, 13:04:05 »
Как по мне, цена мистера очень сильно раздута в последнее время.

И не понятно даже - это сама ПЛИСина в его цене столько занимает, или весь прочий "обвес"?

6
Железо / Альтернативы MiSTerFPGA.
« : 04 Апрель 2026, 11:51:38 »
Потянут ли какую-нибудь 8- или 16-битку крохотусьные и "хилюсенькие" FPGA-чипчики на самой рудиментарной плате - которые, по логике вещей, должны быть кратно дешевле MiSTer'а?

7
Проанонсирован переход проекта на Rust+широкое использование ИИ-консультирования. Поперву слишком трудно поверить, но... Мы с вами пережили и переход с C на C++ во 2-й половине 10-х, и регруппировку драйверов по папкам в зависимости от производителя в двадцать, кажется, 2-м - и уже спустя время обнаруживали, что в новом виде всё даже проще и удобнее.

8
Ромхакинг / Вопросы новичков
« : 03 Апрель 2026, 17:42:20 »
Ты не пользуешся нейросетями? Они бы смогли хорошо ответить. Очень хорошый и доступный в РФ - Deepseek (не забудь там оставить нажатой кнопку Search). Также Гугл теперь встроил свой в поиск Режим ИИ.

По простому говоря, в современных системах нет прерываний и програмист сам решает когда обновлять всё. Например, измеряет прошедшее время, и если оно более 16 милисекунд, то запускает новый цыкл опроса, обновления.

https://chat.deepseek.com/share/fs2wxxqv9xhn33f1mg

Нажатой она же синеет, да?... Так вот почему за прерывания спрашиваю - среди портов под ретро-системы на правах различных бонусных активностей для других игр, которые я планирую толкать в виде движко-, SDK-, а может, даже и языконезависимых высокоинтегративных модулей на ASM разным хоумбрюерам, я планирую и переписать под Neo-Geo дизассемблят нескольких казуальных немецких "офисных" игрушек (например, первые части Moorhuhn и первый Frutti Freak, причём последний - образца лета-осени 2005 г.). И опыт в обращении с ними, видимо, обещает быть полезным и для портировки игр с различных ROM based-платформ - подскажет, как бы безболезненно перенести код, ответственный за повторяющиеся каждый кадр действия в "стержневую" подпрограмму модуля, а обработчики у материнской игры не трогать.

9
Ромхакинг / Вопросы новичков
« : 03 Апрель 2026, 10:28:29 »
Каким образом виндовые экзешники выполняют код, ответственный за действия, повторяемые с каждым новым кадром - считывание устройств управления, отрисовку нового кадра и т. д.? У ромов для простеньких cartridge based-консолей или ROM based-автоматов для этого есть обработчики аппаратных кадровых прерываний, но у ОСек наверняка же ведь ситуация посложнее.

10
А как многоигровки вообще обходятся с векторами и обработчиками прерываний, которые у каждой игры разные?

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

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

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

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).

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

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

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

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

15
под одно ядро...

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

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

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

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

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

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

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

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

310481-1


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

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

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

22
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.

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

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

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

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

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

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

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

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

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

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

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

Реверс-энжинеринг требует ясности. А когда непонятно даже толком, что где лежит... Хорошо еще, если это область после стека, куда консоль грузит данные с диска - тогда это для хранения внутриигровых данных. А вот переменные $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

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

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

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