Создать ответ 
 
Рейтинг темы:
  • Голосов: 1 - Средняя оценка: 5
  • 1
  • 2
  • 3
  • 4
  • 5
DreamShell v4.0.2 Release
Автор Сообщение
SWAT Не на форуме
Администратор
*******

Сообщений: 7406
Зарегистрирован: 04.01.2005
Рейтинг: 32
Сказал спасибо: 160
Поблагодарили 1366 раз(а) в 845 сообщ.
Сообщение: #76
RE: DreamShell v4.0.2 Release
(27.06.2025 20:12)Elgor4uk писал(а):  Похоже есть одно решение для NTSC приставок, которые испытывают трудности в PAL играх при принудительном багнутом изображении в 50Hz (актуально для игр, где отсутствует переключение в 60Hz). Мне помог выбор Behind the loader. Отсюда пару вопросов ведающим:
1. Может ли навредить включение Behind the loader игре? Мне допустим не трудно включить VGA для нормальной картинки PAL игр. Но если нету VGA, то Behind the loader как альтернатива будет ухудшать другие параметры игры?
2. Что вообще такое этот Behind the loader?

Эта настройка влияет косвенно и я кажется знаю почему. Забегая вперед скажу что ты таким образом просто затираешь другими данным область памяти для метаданных IP.BIN. И это не страшно.

Ну а вообще ты оторвал от контекста этот параметр. На какой вкладке он находится? Он находится на вкладке Heap (она же куча), а это в свою очередь область памяти, в которой загрузчик размещает динамические данные, например буфер для CDDA, служебная информация для файловой системы и т.п., что изначально не заложено внутри бинарника загрузчика.
По умолчанию загрузчик пытается автоматически подобрать место для этого, там есть ряд критериев, но обычно если в игре нет CDDA и не используется запуск с IP.BIN, то он размещается за метаданными из IP.BIN, при этом из IP.BIN эти самые метаданные загружаются в нужную область памяти.
Если же вручную выставить "Behind the loader", а это в контексте памяти для "кучи" должно говорить само за себя, типа разместить ее сразу за загрузчиком.
Если используется CDDA, но не используется запуск с IP.BIN, то загрузчик автоматически за собой размещает, потому что нет места для метаданных из IP.BIN. А если загрузчик размещается в конце оперативной памяти, то там работают другие правила...
В общем я понял что я буду очень долго разъяснять как это работает на самом деле и решил попросить нейросеть сгенерировать подробное описание на основе кода в загрузчике, вот что получилось:

Цитата:Анализ условий размещения памяти для malloc в DreamShell ISO Loader

Типы управления памятью

1. KATANA malloc (игровая память)
  • Используется только если IsoInfo->heap == HEAP_MODE_INGAME
  • Работает только с играми типа BIN_TYPE_KATANA
  • Активируется только после загрузки игры (first == 0)
  • Если инициализация KATANA malloc не удалась, переключается на внутренний malloc

2. Internal malloc (собственная реализация)
  • Используется во всех остальных случаях
  • Имеет несколько режимов размещения памяти

Режимы размещения памяти (Internal malloc)

Режим HEAP_MODE_SPECIFY (≥ заданного значения)
  • Память размещается по адресу, указанному в IsoInfo->heap
  • Пользователь сам задает адрес

Режим HEAP_MODE_AUTO (автоматический)
Сложная логика выбора адреса в функции internal_malloc_init_auto():

Области памяти Dreamcast:
  • APP_BIN_ADDR = 0x8c010000 (область загрузки исполняемых файлов)
  • IP_BIN_ADDR = 0x8c008000 (область IP.BIN)
  • ISOLDR_DEFAULT_ADDR_LOW = 0x8c004000 (низкий адрес загрузчика)
  • ISOLDR_DEFAULT_ADDR_HIGH = 0x8cfe8000 (высокий адрес загрузчика)
  • ISOLDR_DEFAULT_ADDR_MIN = 0x8c000100 (минимальный адрес)

Условие 1: Loader ниже APP_BIN_ADDR И НЕ WinCE
if (loader_addr < 0x8c010000 && exec.type != BIN_TYPE_WINCE)

Подусловие 1.1 - Размещение в верхней памяти:
Адрес: 0x8cfe0000 (ISOLDR_DEFAULT_ADDR_HIGH - 0x8000)
  • Loader в области 0x8c004000+ И включена эмуляция CDDA
    (loader_addr >= ISOLDR_DEFAULT_ADDR_LOW && emu_cdda)
  • ИЛИ: Эмуляция CDDA включена И IRQ отключены
    (emu_cdda && use_irq == 0)
  • ИЛИ: Режим загрузки НЕ прямой
    (boot_mode != BOOT_MODE_DIRECT)
    - BOOT_MODE_IPBIN = Bootstrap 1
    - BOOT_MODE_IPBIN_TRUNC = Bootstrap 2

Подусловие 1.2 - Размещение после IP.BIN:
Адрес: 0x8c008800 (IP_BIN_ADDR + 0x800)
  • Loader заканчивается до IP_BIN_ADDR
    (loader_end < 0x8c008000)
  • И: Эмуляция CDDA выключена ИЛИ IRQ включены
    (emu_cdda == 0 || use_irq)

Условие 2: Loader выше APP_BIN_ADDR
if (loader_addr > 0x8c010000)
  • Адрес: 0x8c001100 (ISOLDR_DEFAULT_ADDR_MIN + 0x1000)

Условие 3: WinCE исполняемые файлы
if (exec.type == BIN_TYPE_WINCE)
  • Если loader заканчивается до IP_BIN_ADDR:
    Адрес: 0x8c008800 (IP_BIN_ADDR + 0x800)

Режим HEAP_MODE_MAPLE
Функция internal_malloc_init_maple(int first):

После загрузки игры (first == 0):
  • Базовый адрес: MAPLE_REG(MAPLE_DMA_ADDR) (адрес Maple DMA)
  • Смещения зависят от условий:

Условие: CSO образы ИЛИ эмуляция CDDA
if (image_type == ISOFS_IMAGE_TYPE_CSO || emu_cdda)
  • Смещение: +0x1000

Иначе: Зависит от типа исполняемого файла
  • KOS исполняемые: BIN_TYPE_KOS - смещение +0x3000
  • Остальные типы: BIN_TYPE_KATANA/WINCE - смещение +0x5000

При первом запуске (first != 0):
  • Используется автоматический режим internal_malloc_init_auto()

Режим по умолчанию
  • Адрес: ALIGN32_ADDR(loader_end) (сразу после загрузчика)

Эта сложная система позволяет DreamShell ISO Loader адаптироваться под конкретные условия запуска и обеспечивать стабильную работу различных игр и homebrew приложений на Dreamcast.

Возможно тут есть ошибки в нюансах, но в целом примерно так и есть.

[Изображение: barbers.png]
(Последний раз сообщение было отредактировано 28.06.2025 в 09:33, отредактировал пользователь SWAT.)
28.06.2025 08:50
Вебсайт Найти все сообщения Цитировать это сообщение
 Сказали спасибо: Elgor4uk
Создать ответ 


Сообщения в этой теме
DreamShell v4.0.2 Release - SWAT - 06.06.2025, 17:59
RE: DreamShell v4.0.2 Release - ands - 06.06.2025, 19:56
RE: DreamShell v4.0.2 Release - SWAT - 07.06.2025, 08:50
RE: DreamShell v4.0.2 Release - SWAT - 07.06.2025, 20:29
RE: DreamShell v4.0.2 Release - SWAT - 12.06.2025, 10:01
RE: DreamShell v4.0.2 Release - SWAT - 10.06.2025, 13:15
RE: DreamShell v4.0.2 Release - max4 - 12.06.2025, 17:47
RE: DreamShell v4.0.2 Release - max4 - 12.06.2025, 20:33
RE: DreamShell v4.0.2 Release - max4 - 12.06.2025, 21:15
RE: DreamShell v4.0.2 Release - SWAT - 12.06.2025, 19:41
RE: DreamShell v4.0.2 Release - max4 - 12.06.2025, 21:04
RE: DreamShell v4.0.2 Release - SWAT - 12.06.2025, 21:33
RE: DreamShell v4.0.2 Release - max4 - 12.06.2025, 22:39
RE: DreamShell v4.0.2 Release - SWAT - 13.06.2025, 22:00
RE: DreamShell v4.0.2 Release - SWAT - 16.06.2025, 07:29
RE: DreamShell v4.0.2 Release - SWAT - 16.06.2025, 14:43
RE: DreamShell v4.0.2 Release - SWAT - 16.06.2025, 20:08
RE: DreamShell v4.0.2 Release - SWAT - 17.06.2025, 09:42
RE: DreamShell v4.0.2 Release - SWAT - 17.06.2025, 20:02
RE: DreamShell v4.0.2 Release - SWAT - 17.06.2025, 09:46
RE: DreamShell v4.0.2 Release - SWAT - 26.06.2025, 09:27
RE: DreamShell v4.0.2 Release - SWAT - 27.06.2025, 04:45
RE: DreamShell v4.0.2 Release - SWAT - 28.06.2025, 08:48
RE: DreamShell v4.0.2 Release - SWAT - 28.06.2025 08:50

Похожие темы
Тема: Автор Ответов: Просмотров: Посл. сообщение
  Результаты теста DreamShell v4.0.1 Elgor4uk 27 9134 06.06.2025 16:03
Посл. сообщение: SWAT
Звезда DreamShell v4.0.1 Release SWAT 210 127100 14.05.2025 11:54
Посл. сообщение: fafadou
Радуга DreamShell на GitHub SWAT 76 164035 24.03.2025 03:39
Посл. сообщение: yo4yo4
  Sonic theme for DreamShell v4.0.1 Dolphin_PS2 0 1573 20.02.2025 03:09
Посл. сообщение: Dolphin_PS2
Улыбка DreamShell bootloader bios megavolt85 171 594426 26.12.2024 23:53
Посл. сообщение: megavolt85
Звезда DreamShell v4.0.0 Release SWAT 202 208922 14.10.2024 14:09
Посл. сообщение: SWAT
  ISO_CSO in Dreamshell aldair 0 2129 12.10.2024 02:57
Посл. сообщение: aldair
  GTA3 Dreamshell SD Card/Dreamcast aldair 3 5506 26.08.2024 06:29
Посл. сообщение: SWAT
  Dreamshell freeze at logo boot up pkerga 17 14472 22.07.2024 06:10
Посл. сообщение: SWAT
  Custom DreamShell Themes pcwzrd13 11 35259 27.04.2024 13:42
Посл. сообщение: Ro Magnus Larsson

Переход:


Пользователи просматривают эту тему: 1 Гость(ей)