Спасибо, то что нужно.
Осталось выяснить, на какие адреса ссылаются переменные:
CHANS
PROG
VARS
WORKSP
STKBOT
STKEND
Вид для печати
Спасибо, то что нужно.
Осталось выяснить, на какие адреса ссылаются переменные:
CHANS
PROG
VARS
WORKSP
STKBOT
STKEND
При сбросе эти переменные одинаковые (в 16К и 48К). К конкретной программе надо выяснять значения отдельно..
А можно узнать содержимое этих переменных? А то реальный Спектрум я увижу не ранее, чем через неделю. А в литературе как назло нет.
А чем плох, допустим, spectaculator? Загрузите в него свою программу и сравнивайте значение нужных вам переменных, со значениями после сброса (до загрузки)!?
----
Короче, кинул архив с дампами памяти после ресета для 16 и 48 килобайт в виде файлов для эмулятора, на диске (trd) и ленте (tap) - изучайте!
У меня почему-то в лучшем случае рестарт после загрузки.
Начальный адрес 23552?
Данные файлы содержат участок памяти с переменными ZX ОС. Если грузить их по их настояшему местоположению (23552), то комп зависнет, или сбросится. Попробуйте набрать такую мини программу:
Скрытый текст
вводя числа в интервале 23552-23733 будут выводиться: номер смежных ячейки, значения для 16К и 48К модели, а ниже значения для двухбайтовых переменных.Код:1 clear 29999
2 load "16k" code 30000
3 load "48k" code 40000
4 input i
5 print i;"_";peek (3e4+(i-23552));"_";peek(4e4+(i-23552))
6 print
7 print i+1;"_";peek (3e4+(i-23551));"_";peek(4e4+(i-23551))
8 print
9 print peek (3e4+(i-23552))+256*peek((3e4+(i-23551));"_";peek(4e4+(i-23552))+256*peek((4e4+(i-23551)
10 goto 4
[свернуть]
При сбросе ОС ищет последнюю рабочую ячейку (появляются и исчезают красные полосы на экране при тестировании ячеек памяти) и запоминает ее в p_ramt.
Затем нужные ей области памяти, которые она привыкла располагать в конце ОЗУ, она и отсчитывает от этой переменной. Они уже перечислены выше null_device:
err_sp - стек при ошибке,
еще тут где-то есть стек GO SUB, но спец. переменной начала у него нет(?), во всяком случае он заканчивается как раз по адресу RAMTOP,
собственно ramtop, задаваемый командой CLEAR - последняя ячейка ДЛЯ ОС,
udg символы пользовательской графики, которые после сброса ОС располагает за RAMTOP.
Вот все эти переменные и будут после сброса отличаться для 16к и 48к моделей.
А значения других переменных, ну, и этих тоже, так или иначе можно выписать, хотя не знаю, зачем, они на разных моделях действительно разные, ОС может найти устройства типа Microdrive или Interface II и вдруг взять поднять все адреса для BASIC-программы, переменных и т.п. выше... TR-DOS ПЗУ тоже так делает, поэтому их полезно помнить для своей привычной рабочей модели, а закладываться на них на будущее - из-за этого куча релизов не универсальны в работе, там загрузятся, а тут нет.
---------- Post added at 20:07 ---------- Previous post was at 19:48 ----------
Вот базовый список областей и соотв. ОС-переменных для 16к и 48к, за которыми надо следить:
Код:Hex Dec Назначение 2B переменная Hex Dec
4000 16384 экран ---
5B00 23296 буфер печати(уст.) ---
5C00 23552 ОС-переменные ---
5CB6 23734 зона динамической памяти
5CB6 5CB6 карты микродрайвов(если они есть) ---
--- --- инормационные каналы CHANS 5C4F 23631
--- --- Бейсик-программа PROG 5C53 23635
--- --- Бейсик-переменные VARS 5C4B 23627
--- --- редактируемая строка ELINE 5C59 23641
--- --- временная рабочая область WORKS 5C61 23649
--- --- стек вычислителя STKBOT 5C63 23651
--- --- "куча", резерв ОС STKEND 5C65 23653
--- --- стек а вот нет переменной, начинается от адреса регистра SP Z80
--- --- Бейсик-стек (GO SUB -стек) ERR_SP+2 5C3D 23613
--- --- конец памяти ОС RAMTOP 5CB2 23730
--- --- конец памяти PRAMT 5CB4 23732