Статус-строка: LEVEL N и лейбл QS/QL до дисковой операции
* pop_status_level() — порт show_level (seg008:25A8): «LEVEL N» на старте уровня. Демо-уровень 0 и номера от 14 молчат, тринадцатый показывается двенадцатым, бесшовный переход 12->13 пропускается и гасит флаг за собой. Первое сообщение с ПАРАМЕТРОМ: строка собирается вручную (dec2, без printf и без деления), номер хранится снимком st_arg — иначе вторая страница дабл-буфера нарисовала бы другое число. * pop_status_show_now() — печать немедленно, в ВИДИМУЮ страницу. QuickSave/QuickLoad заявляют лейбл ПЕРВЫМ действием, до mem_alloc/ESTEX: запись снимка занимает доли секунды, и раньше игрок видел сначала необъяснённый фриз, а надпись — уже после него. Отказ переписывает строку на NO QUICKSAVE/NO QUICKLOAD обычной заявкой. Расхождение с оригиналом (он печатает по результату) — impl_diff.md. Проверено в MAME: watchpoint ловит заявку внутри pop_status_show_now, step_out возвращает в pop_qsave_process — и QUICKSAVE уже на экране, диск ещё не тронут. Бюджет прежний: _CODE 23981, куча 266 Б. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,7 @@ enum {
|
||||
POP_MSG_NO_QUICKLOAD, /* F9 нечего грузить / битый слот */
|
||||
POP_MSG_SOUND_ON, /* Ctrl+S */
|
||||
POP_MSG_SOUND_OFF,
|
||||
POP_MSG_LEVEL, /* «LEVEL N» — строка собирается с номером */
|
||||
POP_MSG_N
|
||||
};
|
||||
|
||||
@@ -34,6 +35,17 @@ enum {
|
||||
* только если строка уже погасла (как у оригинала: он тоже сравнивает). */
|
||||
extern uint8_t pop_status_msg;
|
||||
|
||||
/* Показать сообщение НЕМЕДЛЕННО, до конца кадра: строка выкладывается в
|
||||
* видимую страницу прямо сейчас. Нужна там, где сразу за вызовом идёт
|
||||
* длинная операция (QuickSave/QuickLoad): обычная заявка напечаталась бы
|
||||
* уже ПОСЛЕ фриза, когда объяснять его поздно. */
|
||||
void pop_status_show_now(uint8_t msg) __banked;
|
||||
|
||||
/* Порт show_level (seg008:25A8): заявить «LEVEL N» на старте уровня.
|
||||
* Сама решает, показывать ли (демо-уровень и финальные номера молчат) —
|
||||
* вызывающему условий знать не нужно. */
|
||||
void pop_status_level(void) __banked;
|
||||
|
||||
/* Сколько логических кадров сообщение ещё висит; 0 — не висит. Читает
|
||||
* pop_hp_draw (банк 4), чтобы не затирать чужой текст своим фоном. */
|
||||
extern uint8_t pop_status_ticks;
|
||||
|
||||
Reference in New Issue
Block a user