PDA

Просмотр полной версии : Что происходит при старте бейсика (48)



Lisitsin
10.10.2010, 22:51
Всем доброго времени.
Я вот тут интересуюсь, а что происходит при старте BASICа? Сначала я знаю: загрузка ОЗУ под завязку числом 02. Потом какой-то хитрый алгоритм, обнуляющий ОЗУ, но уже в обратном направлении. А потом что?
Может меня кто просветить на эту тему? Есть замедленное видео:
http://dl.dropbox.com/u/12408899/Sta...1%80%D1%82.zip
И после чего должно появиться основное сообщение?

Спасибо !!!

Лас
11.10.2010, 00:15
Программа в ПЗУ SOS с адреса 0000h:
- запрещаются прерывания;
- в порт feh отправляется значение 07h;
- регистр вектора прерываний устанавливается в 3fh;
- память с ffffh по 4000h (включит.) последовательно от старших адресов к младшим заполняется байтом со значением 02h;
-затем последовательно, от младших адресов к старшим, тестируется каждая ячейка памяти на исправность: ранее записанное содержимое ячейки памяти уменьшается на 1 (в исправной ячейке было 02h, стало 01h) и в случае если неожиданно в этой ячейке вместо 01h окажется 00h - тест на этом заканчивается, иначе содержимое ячейки памяти уменьшается еще на 1 (в исправной ячейке было 01h, стало 00h)и если вдруг в этой ячейке окажется не ноль, тест на этом заканчивается, иначе ячейка считается исправной и тест переходит к следующей ячейке;
- тест продолжается до конца памяти или до первой встреченной сбойной ячейки;
- адрес последней исправной ячейки памяти записывается в системные переменные бейсика;
- устанавливаются некоторые другие системные переменные;
- если выполняется 'сброс', а не команда 'new', то из ПЗУ в ОЗУ копируется a8h байт UDG-графики (копируется в область последней исправной ячейки от старших адресов к младшим, начиная с этой ячейки);
- устанавливается соответствующая системная переменная, которая указывает на эту область и устанавливаются некоторые другие переменные;
-устанавливается стек на свободную область в ОЗУ (перед областью UDG);
- устанавливаются некоторые системные переменные;
- режим прерываний устанавливается в 1;
- инициализируются переменные клавиатуры, переменные каналов и потоков, переменные принтера;
- инициализируются переменные экрана и производится очистка экрана;
- выполняется печать © 1982 Sinclair Research Ltd;
- ожидается прием команд с клавиатуры.

NB! Команда new выполняется несколько иначе.

Lisitsin
21.10.2010, 22:55
Гениально!
Вот у меня вроде бы всё происходит нормально до установки режима прерывания 1. Но потом начинает происходить что-то странное: весь экран заполняется вертикальными полосками, на их фоне появляются некоторые левые атрибуты и система рестартунт заново - т. е. опять красные вертикальные полоски и т. д.
Пытаюсь я отследить всё это дело,но что-то плохо у меня получается понять где у меня эмулятор сбоит.

Lisitsin
21.10.2010, 23:00
Справа после ";" зелёным цветом пытаюсь отрисовать стек, сообщение типа 09 C3 7E = это у меня счётчик машинных циклов M1.
Ну так вот, участок программы с адреса 0adc что-то у меня повторяется и не один раз. Вот я и хотел бы знать что это за подпрограмма и за что отвечает. Ещё хочу знать где можно поставить мне точки останова и что можно посмотреть для контроля правильности работы эмулятора. И ещё хочу знать в какой области памяти начинает крутиться программа после выведения сообщения © 1982 Sinclair Research Ltd
СПАСИБО !!!

goodboy
21.10.2010, 23:18
ftp://ftp.worldofspectrum.org/pub/sinclair/books/CompleteSpectrumROMDisassemblyThe.txt

Lisitsin
21.10.2010, 23:31
Вот именно !!!! То, что мне и было нужно !!!!!!!!!!!

Лас
22.10.2010, 00:03
Вот именно !!!! То, что мне и было нужно !!!!!!!!!!!

Spectrum Rom Disassembling.zip (http://zx.pk.ru/attachment.php?attachmentid=21132&d=1286538311)
В виде html, где подпрограммы ПЗУ в виде ссылок, по которым можно перемещаться.

Lisitsin
30.10.2010, 22:50
п о м о г и т е ! ! !

В смысле всем доброго времени суток. Нуждаюсь в профессиональной консультации. Заранее благодарен.
Пытаюсь эмулироваться дальше. Софт начинает печатать (c) 1982 Sinclair Research Ltd начиная с символа (с) из корректной области графики символов ((3FF8)=3C), но не на экран, а в область памяти принтера (подпрограмма PO-MSG). Дело в том, что бит 1 переменной FLAGS у меня установлен в 1, что говорит о том, что используется принтер. А экран устанавливается подпрограммой 'CHANNEL 'S' FLAG', но при инициализации я в неё не попадаю.
Кто может подсказать, в какой момент инициализации это должно происходить и кто эту подпрограмму вызывает?
Аминь.

Vadim
02.11.2010, 06:18
skipped
Пытаюсь эмулироваться дальше. Софт начинает печатать (c) 1982 Sinclair Research Ltd
skipped


Подозреваю, что проблемы из-за неточной эмуляции Z-80. Поищите инфу о флагах, как они себя ведут при разных командах (недокументированные возможности). Кое-что было в описании к эмулю z80, есть в инетах. Доков куча. Я много читал, сейчас даже не помню где это все взять, т.к. эмуляцией не был обеспокоен. На форуме также была подобная инфа.

Ewgeny7
03.11.2010, 18:56
weiv, эмулятор не софтверный, а аппаратный, с логами кагбэ напряженка.

Spectramine
03.11.2010, 22:16
weiv, эмулятор не софтверный, а аппаратный, с логами кагбэ напряженка.

А, спасибо, я не в теме, сейчас глянул другие сообщения автора, нашёл, о чём речь. Отлаживать эмуляцию z80 в таком эмуляторе будет очень непросто.

Lisitsin
11.11.2010, 19:32
Всем спасибо! Ошибочку нашёл: у меня вместо декремента одной регистровой пары декрементировалась на самом деле другая. В результате во флагах - принтер по умолчанию и не изменялся на экран. Результат в моей теме.

Lisitsin
09.01.2011, 16:31
Помогите !!!
Сам буду искать долго. Короче дело такое:
http://dl.dropbox.com/u/12408899/CVBS%20%28110109-162101%29.zip
При старте до нажатия клавиши ждёт нормально. При клавише (любой) выводит целый экран вопросительных знаков. После этого на клавиатуру реагирует нормально, но ошибки остаются.
Что сие могло бы значить? Есть там такая подпрограмма ввода строки ...