WIP Satan Claus - Sega Mega Drive / 32X
|
|
TLT | Дата: Вторник, 17.12.2024, 15:49 | Сообщение # 46 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| В игре есть чит-секрет для смены палитры герою игры, чтобы он был похож на злобного эльфа.
Вот так.
|
|
| |
TLT | Дата: Пятница, 27.12.2024, 20:55 | Сообщение # 47 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| Секрет, про который выше писал, теперь описан тут. Как делать его и как пополнить +3 жизни - читайте там.
Незначительный баг исправлен в новой ревизии:
Вот так.
|
|
| |
natikantv | Дата: Суббота, 04.01.2025, 02:58 | Сообщение # 48 |
Рядовой
Группа: Проверенные
Сообщений: 1
Статус: Оффлайн
| Не понятно где можно приобрести, и стоимость картриджа?
|
|
| |
TLT | Дата: Понедельник, 13.01.2025, 18:47 | Сообщение # 49 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| Цитата natikantv (  ) Не понятно где можно приобрести, и стоимость картриджа?
Если кто-то ещё будет интересоваться - на Авито есть (цена с доставкой там указана: выплатите 2900 руб из них у меня берут 420 на почтовые расходы, вы ничего дополнительно не платите) - https://www.avito.ru/gusev/igry_pristavki_i_programmy/kartridzh_satan_claus_sega_genesis_mega_drive_4747804025
______ Пока Ютуб снова немного начал работать в РФ вот ссылка на недавний стрим с полным прохождением игры - https://youtu.be/dd_xdtwEPH4?t=3616
К сожалению, новодельные консоли на FPGA-системе имеют проблемы с совместимостью, поэтому там есть проблемы с темпом музыки. На оригинальных Sega Mega Drive / Genesis 1/2/3 всё должно быть в норме. Да и на клонах из 1990-ых должно быть ОК. Я чаще тестировал на Genesis 2 и Mega Drive 2, а также на старом клоне Mega Drive 2 с переключателем регионов.
Вот тут альтернатива для просмотра, если вы в РФ и Ютуб вам недоступен - https://live.vkvideo.ru/vetal_911/record/042d3e9e-a23f-40de-b096-15233277bf76/records
Вот так.
|
|
| |
Томахомэ | Дата: Четверг, 13.02.2025, 17:45 | Сообщение # 50 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| Насчёт 32X, думаю, отчаиваться ещё рано - только что допилил наконец до конца модуль поддержки SH2 для ASMX (того, между прочим, самого, который в BEX'е за конечную компиляцию рома отвечает). По идее, он должен помочь там, где BEX не справляется (например, в тех вопиющих случаях с графикой) - благо, мнемоника у него на M68k, в принципе, похожая, система векторов - тоже.
Сообщение отредактировал Томахомэ - Четверг, 13.02.2025, 17:47 |
|
| |
Томахомэ | Дата: Пятница, 14.02.2025, 17:05 | Сообщение # 51 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| На случай, если лень заморачиваться с самосбором, вот готовый exe.
|
|
| |
TLT | Дата: Суббота, 15.02.2025, 20:11 | Сообщение # 52 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| Цитата Томахомэ (  ) По идее, он должен помочь там, где BEX не справляется (например, в тех вопиющих случаях с графикой) Заменил, проверил... Все равно графика сыпется также...
Вот так.
|
|
| |
Томахомэ | Дата: Воскресенье, 16.02.2025, 05:32 | Сообщение # 53 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| А тут не на BEX'е надо, а на самом ASM-е. BEX с его закрытыми исходниками всё равно как был, так и остался способен генерерировать всё тот же местами кривоватый код только под M68k. Или у тебя на BEX'е - только первичный загрузчик импортируемой как отдельный bin-файл заранее собранной на соответствующем ассемблере основной программы для SH2?
Сообщение отредактировал Томахомэ - Воскресенье, 16.02.2025, 08:08 |
|
| |
TLT | Дата: Понедельник, 17.02.2025, 17:23 | Сообщение # 54 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| Томахомэ, я пользуюсь BEX как средой. Выбирается платформа для компиляции и по одному клику компилируется. Как иначе проект BEX можно компилировать?
Вот так.
|
|
| |
Томахомэ | Дата: Понедельник, 17.02.2025, 18:48 | Сообщение # 55 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| С 32X там фокус хитрый - если попробуешь открыть любой собранный в BEX ром для 32X в дебаггере любого эмулятора данной платформы и переключишь на дебаггинг любого из двух SH2, то с удивлением обнаружишь, что весь исполняемый для них код там - это загруженные в общие для M68k и SH2 участок RAM по адресу $6000000~7
Код bra $6000000 nop bra $6000004 nop
- то есть зацикливание на одной точке и для основного, и для вспомогательного (см. прикреплённый скриншот). Причём в опкодах оно представленно как дважды повторённое $affe0009 - для такого кода достаточно даже не предсобранных бинарных данных, а просто длинной hex-константы. За счёт чего, собственно, хитрый жук Норман и сэкономил на внутренних инструментах для асемблирования SH2, тем самым во многом сковав потенциальным девелоперам для 32X руки.
Поэтому выкручиваться придётся способом немного читерастическим - сначала включим в source на BEX'е bin-файл с предварительно собранным на новом ASMX'е кодом для SH2, а затем, в начале программы, загрузим по адресу $6000004 (с помощью команды Poke) код перескока на его label - в виде всё тех же сырых опкодов: сначала цапнем его адрес с помощью функции LblPtr&, и вычислим первое из нужных слов посредством операции $e0|(SH2_CodeAddr&FF000000>>24) - то есть, команду MOV #[старший байт адреса], R0, следом - числа $4028 и затем $4018 (shll16 R0 и shll8 r0 соответственно), а дальше аналогичным образом будем загружать в R1 по убыванию один из средних байт адреса, и, прокрутив влево на нужное число бит, применять к R0 "или" с R1. Ну а самый младший байт в конце можно просто прибавить ($7000|младший байт адреса). Последней загружаем команду braf R0 ($23). И вот после загрузки всех этих чисел мы уже по адресу 6000000 просто подменяем $AFFE на $A006, чтобы SH2 перескочил на код загрузки адреса расположения нашего предсобранного кода для SH2 внутри рома и перескока туда.
На случай, если я что-то не слишко понятно изложил, то официальный даташит по SH2, включая таблицу опкодов - также в прикреплениях.
Сообщение отредактировал Томахомэ - Понедельник, 17.02.2025, 18:56 |
|
| |
TLT | Дата: Понедельник, 17.02.2025, 19:20 | Сообщение # 56 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| Томахомэ, у тебя есть исходники BEX? Их, вроде, раньше можно было у автора выпросить, что сделал автор Second Basic, но сейчас - не знаю...
Вот так.
|
|
| |
Томахомэ | Дата: Вторник, 18.02.2025, 05:21 | Сообщение # 57 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| В публичном доступе - пока что только файл, прикреплённый ниже. Я так понимаю, в BEX за каждой самой элементарной BASIC-like командой скрывается целая подпрограмма на ассемблере для M68k.
Сообщение отредактировал Томахомэ - Вторник, 18.02.2025, 06:03 |
|
| |
TLT | Дата: Вторник, 18.02.2025, 14:03 | Сообщение # 58 |
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
| Томахомэ, как и в любой среде команда на BEX описана на ASMX. Просто в BEX сам exe-шник их содержит, а не отдельный файл, поэтому их неудобно редактировать. Вот как функции описываются на ASM:
Код
; Play a CD track once command_a: lea track(PC),a0 move.w (SCOMMR+2),(a0) move.b #'P',(SCOMMFW) move.l #$12,d0 jsr ($5F22) bra wait_main
; Play a CD track continuously command_b: lea track(PC),a0 move.w (SCOMMR+2),(a0) move.b #'P',(SCOMMFW) move.l #$13,d0 jsr ($5F22) bra wait_main
; Stop CD play command_c: move.b #'P',(SCOMMFW) move.l #$10,d0 jsr ($5F22) bra wait_main
; Pause CD play command_f: move.b #'P',(SCOMMFW) ; move.l #$1b,d0 move.l #$03,d0 jsr ($5F22) bra wait_main
; Un-Pause CD play command_g: move.b #'P',(SCOMMFW) ; move.l #$19,d0 move.l #$04,d0 jsr ($5F22) bra wait_main
; Load a Sega CD Executable into word RAM ; Does not use CD Buffer, writes directly into word RAM command_d: move.l (SCOMMR+2),d0 lsl.l #7,d0 move.l #128,d1 ; @ 2m = #128 move.l #$80000,a0 ; @ 2m = #$80000 bsr readcd bset #0, $FF8003 move.b #'P',(SCOMMFW) bra wait_main
@copy_1_byte: move.b (a0)+,(a1)+ dbra d0,@copy_1_byte @finished_copy: move.l (a7)+,a3 rts
screen_init_scroll: move.w #$8F01,4(a4) move.w #$9300,4(a4) move.w #$9404,4(a4) move.w #$9500,4(a4) move.w #$9600,4(a4) move.w #$9780,4(a4) move.l #$68000082,4(a4) move.w #$0000,(a4) bsr wait_dma move.w #$8F02,4(a4) move.l #$40000010,4(a4) move.l #39,d0 screen_init_scroll_loop: move.w #$0000,(a4) dbra d0,screen_init_scroll_loop rts
Но в BEX можно так описать функции и прописать в сам файл проекта. Например, так:
Код ShadowON_320: ' VMode=0 'Shadow and highlight asm move.w #$8C89,($c00004).l end asm Return
А затем уже ссылаться просто как "GoSub ShadowON_320".
Либо задекларировать:
Код declare sub loadlevel() for ly=0 to 63 read lx$ map$(ly)=lx$ locate ly,0 next ly end sub
И уже просто юзать функцией "loadlevel" в коде локации.
Вот так.
|
|
| |
Томахомэ | Дата: Вторник, 18.02.2025, 15:30 | Сообщение # 59 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| Надо ещё учесть, что поскольку в src.html датирован 2003-2004 годом, некоторых из имеющихся на данный момент подпрограмм BEX совершенно закономерно не хватает (например, Sleep и ли FreeSprite) - так что, если возникла идея зафигачить похожий по функционалу, но уже свой, инструмент, с блэкджеком и всем, чем ещё положено (типа ассемблирования не только под M68k), то над реализацией многих функций придётся додумывать с нуля, держа также в уме, что asmx (по крайней мере, пока), умеет ассемблировать код для только одной архитектуры зараз, и что, возможно, заморочиться придётся ещё и с внедрением несколькоэтапной сборки рома, если нужно будет в одном source-файле держать не только основной код, но и исходники звукового драйвера (если какому-нибудь разрабу вдруг захочется написать именно свой драйвер), а в случае с 32X - всё тот же код для SH2, да ещё внедрить способ разграничения, где для какой архитектуры код.
|
|
| |
Томахомэ | Дата: Среда, 19.02.2025, 13:36 | Сообщение # 60 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 544
Статус: Оффлайн
| Цитата Томахомэ (  ) Причём в опкодах оно представленно как дважды повторённое $affe0009 - для такого кода достаточно даже не предсобранных бинарных данных, а просто длинной hex-константы.
Именно так оно по итогу и оказалось. Если в опциях всё-того же старого доброго неизменного BEX во вкладке Compiler поставить галочку в пункте Output Assembly source, а в Targer - флажок Compile as 32X ROM, то после каждой сборки рома будет создаваться промежуточный файл basic.s в корневой директории BEX, который видимый только для окна открытия файлов в BEX, однако там этот файл можно скопировать в буфер обмена и вставить в любую понравившуюся папку, где он будет также полноценно видим, как любые другие файлы.
Вот тут вот, например, полупустой сорс-заготовка на BEX, в который можно вставить абсолютно всё, что угодно:
А вот что выводит промежуточный ASM-файл.
Код include basicasm.cni
__WHILE_JUMP_0 __WHILE_JUMP3_0: jmp __WHILE_JUMP_0 __WHILE_JUMP2_0: forever: bra forever
EVEN
include basicstr.s EVEN
include basicdat.s EVEN
__STRING_MARSVRAM EQU $840000 __INTEGER_MARSVRAM EQU $840000 __LONG_MARSVRAM EQU $840000 __STRING_MARSVRAMOW EQU $860000 __INTEGER_MARSVRAMOW EQU $860000 __LONG_MARSVRAMOW EQU $860000 __INTEGER_MARSCRAM EQU $A15200
HEAPSTART EQU $FF004C align 4 __32x_source: dc.l $AFFE0009 __slave_sh2_start: dc.l $AFFE0009 __32x_source_end: __DATA_Pendcode: REND END
Особое внимание прошу обратить на строчку 32x_source - именно этот код загружает на этапе бутинга 32X в шерную (увы, только для двух SH2, а не для SH2 с M68k) память, адрес нужного участка которой прописан ещё в заголовке рома для 32X, который BEX генерирует строго фиксированный.
Сообщение отредактировал Томахомэ - Среда, 19.02.2025, 13:36 |
|
| |