Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: Системные переменные BASIC 48

  1. #1
    SaintTurnip
    Гость

    По умолчанию Системные переменные BASIC 48

    Мне нужно 3-4 байта в безопасной (в режиме бейсика 48) области памяти.

    Системные переменные расположены в диапазоне 23552 to 23733.

    Можно ли как-нибудь сдвинуть эту область вниз или вверх на несколько байт?

    UPD: хочу расширить себе фирмварь, но не теряя совместимости с существующим софтом.
    Последний раз редактировалось SaintTurnip; 29.04.2018 в 17:29.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я помню, если не используется ZX-принтер, можно использовать его буфер безнаказанно.

  4. #3
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от eugeniusz Посмотреть сообщение
    Мне нужно 3-4 байта в безопасной (в режиме бейсика 48) области памяти.

    Системные переменные расположены в диапазоне 23552 to 23733.

    Можно ли как-нибудь сдвинуть эту область вниз или вверх на несколько байт?
    Нет, нельзя. Системные переменные жестко привязаны к адресам. Но можно уменьшить объем бейсик-памяти командой CLEAR X, и память выше X можно будет безопасно использовать. Также, как уже указали, в режиме 48 бейсика можно относительно безопасно использовать область буфера принтера 23296-23551, если не использовать вывод на ZX-принтер. Ну и ещё можно зарезервировать место после REM в бейсик-строке, но тогда придется находить адрес этой строки в памяти.

  5. #4
    SaintTurnip
    Гость

    По умолчанию

    Может забрать себе что-нибудь не очень нужное?

    На мой взгляд, главный кандидат это область 23734...(CHANS) - буфер интерфейса-1 или микродрайва. Но если влоб записать значение в CHANS, можно испортить бейсику жизнь. Как бы задействовать эту область? В ПЗУ пять или шесть обращений к регистру CHANS (5C4F), а упоминаний 23734 (5CB6) еще меньше. Но сходу не могу понять, с чем оно пересекается и по какой причине.

    Скрытый текст

    КАРТА МИКРОДРАЙВА - Если к Вашему компьютеру подключен ZX интер-
    фейс-! , то с адреса 23734 до адреса, на 1 меньшего, чем содержимое
    CHANS, находится карта микродрайва - область, используемая как буфер
    для трансляции данных, как набор добавочных системных переменных и
    т.п. Если интерфейс не подключен, то эта область попросту не сущеет-
    вуpi - переменная CHANS содержит адрес 23734. Она определяет начало
    блока памяти, в котором содержатся данные о существующих каналах.
    [свернуть]


    23728, обработчик юзер-НМИ. Он чем-нибудь используется в реальности?

    Скрытый текст

    23728 NMIADD This is the address of a user supplied NMI address which is read by the standard ROM when a peripheral activates the NMI.
    Probably intentionally disabled so that the effect is to perform a reset if both locations hold zero, but do nothing if the locations hold a non-zero value.
    Interface 1's with serial number greater than 87315 will initialize these locations to 0 and 80 to allow the RS232 "T" channel to use a variable line width. 23728 is the current print position and 23729 the width - default 80.
    [свернуть]


    23732, последний адрес ОЗУ. 16 кб уже давно неактуально, можно смело засунуть заглушки во все места, где идет чтение этих ячеек. Правда как разные там программы отреагируют.

    Скрытый текст

    23732 P RAMT Address of last byte of physical RAM.
    [свернуть]


    23656, которая указывает на область памяти калькулятора. Насколько опасно зафиксировать это значение?

    Скрытый текст

    N2 23656 MEM Address of area used for calculator's memory. (Usually MEMBOT, but not always.)
    [свернуть]

  6. #5
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно в UDG на крайняк

  7. #6
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,486
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    115 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    23348-23383 ?

  8. #7
    SaintTurnip
    Гость

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Можно в UDG на крайняк

    хочу расширить себе фирмварь, но не теряя совместимости с существующим софтом.



    Цитата Сообщение от Bedazzle Посмотреть сообщение
    23348-23383 ?
    вероятность печати близка к нулю, но некоторый софт использует LPRINT для своих странных целей. это может помешать.
    Последний раз редактировалось SaintTurnip; 29.04.2018 в 03:49.

  9. #8
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от eugeniusz Посмотреть сообщение
    хочу расширить себе фирмварь, но не теряя совместимости с существующим софтом.
    Это надо было упомянуть в стартовом посте. NMI_ADD нужна для выставления собственной процедуры обработки немаскируемого прерывания. Но из-за ошибки в ПЗУ она не используется. Так что, если не планируется использование немаскируемого прерывания, или, как минимум, перехват его обработчика после исправления ошибки в ПЗУ, её можно юзать.

    P_RAMT - указатель на адрес верха физического ОЗУ. Естественно, на исправной машине от 48к в ней всегда #FFFF. Используется она командой CLEAR. Может, теоретически, использоваться расширителями Бейсика.

    Теоретически, можно использовать память в переменных каналов/потоков, если достаточно плотно с ними поразбираться. А вот системные переменные калькулятора трогать точно не стоит.


    Я занимался расширением ПЗУ в своё время. Для своих задач я использовал под переменные верх буфера принтера. Да, программы могут затирать его, но для моих целей это было некритично.

    Имейте ввиду, некоторые программы используют содержимое ПЗУ для декодирования своих загрузчиков, а некоторые тесты - для расчета контрольных сумм, так что расширение фирмвари ВСЕГДА ведет к некоторой потере совместимости.

    Кроме того, и это более важно, очень много программ использует свободное место в ПЗУ как таблицу векторов прерывания IM 2 (сходу вспомню Bomb Jack и Rambo). Допись туда своего кода ведет, естественно, к потере работоспособности этих программ - с этим столкнулись пользователи клонов с расширенным ПЗУ, а также пользователи оригинальных +2А/+3. Частично проблему можно решить, оставляя байты #FFFF хотя бы по адресам #3XFF-#3XFF+1, т.к. на исправной машине без подключенной редкой периферии (AMX Mouse) на шине данных в момент прерывания всегда #FF.

    А ещё некоторые программы используют проверку содержимого свободной области для выяснения, запущена ли программа под 48к или 128к (использующем свободную область ПЗУ Бейсика 48), и принятия решения, проигрывать ли музыку на бипере или AY, в частности Golden Axe и Exolon. Соответственно, при запуске таких программ на 48к с измененным ПЗУ мы остаемся без музыки.
    Последний раз редактировалось Spectramine; 29.04.2018 в 08:11.

  10. #9
    SaintTurnip
    Гость

    По умолчанию

    Ценный ответ, weiv!

    Где может использоваться NMI? Моя тема это Спектрум 48, так что скорпионы и прочие не актуальны.

  11. #10
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для использования NMI на компьютере должна быть как минимум кнопка NMI, посылающая сигнал на процессор. NMI может, например, использоваться расширением ПЗУ для входа в встроенный в ПЗУ монитор, как в Турбо90. Или (тоже расширением ПЗУ) для выгрузки дампа игры на ленту по нажатию на кнопку NMI.

    Программы по прямому назначению переменную NMI_ADD использовать не могут, но могут для своих целей, как неиспользуемую. Это может быть теоретически причиной несовместимости для Бейсик-программ и расширителей Бейсика, - игровые программы в машкоде вообще часто затирают системные переменные полностью, но для них и работоспособность Бейсика не нужна.

    Если нужна только флаговая информация - можно поискать неиспользуемые биты в флаговых системных переменных.

    - - - Добавлено - - -

    Всё-таки, лучше наверно использовать часть области STRMS, предварительно с нею разобравшись, там 38 байт, думаю, что-то можно найти.
    Последний раз редактировалось Spectramine; 29.04.2018 в 18:24.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. SB-225B и системные картриджи к ней
    от Mx_Serg в разделе Nintendo
    Ответов: 11
    Последнее: 03.05.2017, 09:39
  2. Ответов: 7
    Последнее: 05.06.2010, 18:50
  3. Старые системные программы
    от ^m00h^ в разделе Софт
    Ответов: 31
    Последнее: 12.03.2008, 00:24
  4. Системные программы ?!?
    от AAA в разделе Софт
    Ответов: 11
    Последнее: 02.03.2008, 14:33
  5. Ответов: 16
    Последнее: 18.02.2008, 18:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •