russian ROMhacking
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
WIP Satan Claus - Sega Mega Drive / 32X
TLTДата: Вторник, 17.12.2024, 15:49 | Сообщение # 46
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
В игре есть чит-секрет для смены палитры герою игры, чтобы он был похож на злобного эльфа.

Прикрепления: 2128800.png (6.3 Kb)



Вот так.
 
TLTДата: Пятница, 27.12.2024, 20:55 | Сообщение # 47
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
Секрет, про который выше писал, теперь описан тут. Как делать его и как пополнить +3 жизни - читайте там.

Незначительный баг исправлен в новой ревизии:

Прикрепления: 6285821.png (19.0 Kb)



Вот так.
 
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.
Прикрепления: asmx.exe (462.8 Kb)
 
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, включая таблицу опкодов - также в прикреплениях.
Прикрепления: 9336279.png (477.4 Kb) · h12p0.zip (873.9 Kb)


Сообщение отредактировал Томахомэ - Понедельник, 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.
Прикрепления: src.zip (14.2 Kb)


Сообщение отредактировал Томахомэ - Вторник, 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, в который можно вставить абсолютно всё, что угодно:
Код
    while 1
    
    wend


А вот что выводит промежуточный 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
 
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: