Прямо квест какой-то. :)
Вид для печати
Нашёл где зацикливается 4.06 при загрузке M5.DSK -- это DATE пытается вывести строку.
Кто-то испортил полезную ячейку 177774.Код:163744: CALL @177774
133050: HALT
И помнится kapitan-u говорил что SG.SYS нам всё портит.
А дело в том, что назначение этой ячейки разное -- в 3.03 это адрес знакогенератора, а в 4.0x это адрес подпрограммы вывода символа.
Нужно делать дискету M5 без SG.
Ну вот вам диск M5-40x.dsk и NemigaBTL 1.0.53 -- вместе оно загружается на 4.06.
Пруфпик:
https://img-fotki.yandex.ru/get/1955...0a66f_orig.png
Без SG буквы только в верхнем регистре.
Я просто тупо удалил SG.SYS с диска. Но можно взять SG.SYS с дисков от новой системы.
http://www.emuverse.ru/wiki/%D0%9D%D...B8%D0%B3%D0%B0 -- тут в начале есть команды Пульта.
Команда "D" начинает загрузку с диска MD0.
https://github.com/nzeemin/nemigabtl...er/data/m5.dsk -- основной диск для загрузки в конфигурации 3.03 (в 4.0x он не грузится из-за драйвера SG.SYS).
http://zx-pk.ru/attachment.php?attac...2&d=1485734710 -- тут диск m5-40x.dsk, пока единственный для загрузки в 4.05/4.06.
https://github.com/nzeemin/nemigabtl...ee/master/data -- тут есть ещё несколько дисков.
Ну и если пройти по этой теме и соседним по Немиге то можно нарыть ещё с десяток дисков.
В целом пока более-менее работает конфигурация 3.03, но она для Немиги не основная -- бОльшая часть Немиг это 4.06.
Конфигурация 4.06 пока очень нестабильна, легко вылетает. Но собственно она и запустилась только сегодня ночью.
Наверное, у меня акула попалась глухая) Ни одну игру на эмуле не смог запустить)
Причем даже саму систему удается запустить на 5-й раз)
Нажимаю D, Enter - она опять переходит в надпись ПУЛЬТ. И только на какой-то там раз начинает грузить систему.
А при попытке запустить игрушки типа BOB, DIG и т.д., иногда спрашивает 'РМУ?' (это эти игры спрашивают вначале перед стартом) и благополучно зависает. Таким образом, что кнопка 'RUN' на тулбаре выпадает и не нажимается до ресета.
Спасибо за наводку.
3.03 работает стабильнее, хотя Dig в итоге тоже вылетела в пульт.
Зато хоть посмотрел, наконец, что это за игры)
Выложил тут скриншоты.
Потрассировал SH DEV в поисках того где считается память.
В итоге увидел что искомое число инициализируется ещё до загрузки команды с диска.
Как я понял, SH DEV по $MEMPT смотрит на memory control block, в котором указана верхняя граница виртуальной памяти.
- - - Updated - - -
Не заметил сразу. IOSCAN показывает регистр 170014. В описании такого нет.
Регистры 170000-170004 -- используются микросхемой, выполняющей операции умножения и деления.
На тестовом стенде проверил копирование дисков под 3.03 -- работает.
В MD0: ставим диск M5.dsk
В MD1: ставим чистый диск
DIR MD1: -- даёт "Directory I/O error"
INIT MD1: -- инициализируем диск
DIR MD1: -- показывает пустой диск
COPY MD0:PIP.SAV MD1: -- проверяем копирование файла
DIR/BR/C:3 MD1: -- показывает PIP.SAV
COPY /DEVICE MD0: MD1: -- копируем диск на диск поблочно
DIR/BR/C:3 MD1: -- убеждаемся что новый диск такой же как M5.dsk
Теперь загрузимся с нового диска.
SET SG OFF -- как советует драйвер SG, возвращаем знакогенератор по умолчанию -- если этого не сделать то первые надписи при загрузке будут выводить мусор.
BOOT MD1: -- запускаем загрузку с нового диска
Вот тестовый стенд: https://github.com/nzeemin/nemigabtl-testbench
Это ядро эмулятора (папка emubase просто копируется из nemigabtl) + набор тестов.
Позволяет за минуту прогнать все тесты которые есть, убедиться что ничего не сломалось.
Плюс на нём я разбираю подробно отдельные случаи.
Из другой темы, но подходит для этой.
Как и говорил, после адреса 160000 ячейки заблокированы и с пульта не прочитаются до 170000.
На реале после включения (ром 4.05, 4.06)
170000/000000
170002/000000
170004/047764
170006/001412
170010/074010
170012/000000
170014/000000
Далее 170016 не откликается.
170020/001261
170022/000000
170024/000000
170026/000000
170030/000000
170032/000000
Далее.
177100/000271
177102/000377
177104/000127
177106/000106
И ещё ( с эмулятором совпадают).
177560/000000
177562/000012
177562/000200
177564/000000
177570/000000
177572/000000
177574/000000
На 4.06 для команды пульта '/' есть переменная 177744 с адресом, ниже которого можно смотреть ячейки. На остальных прошивках такого нет.
Правильное значение переменной 177744 равно 160000 и устанавливается только в одном месте, код на 161720:
На это место мы переходим из двух точек: (1) прерывание HALT, (2) команда 'D'.Код:161720: MOV #160000, @#177744
То есть, признаком того что нужно настроить 177744, является отсутствие значения 056364 по адресу 177776.Код:; Обработчик прерывания по сигналу/команде HALT
160210: CMP #056364, @#177776 ; Проверка, настроена ли память режима HALT
160216: BEQ 160224 ; Да, настроена
160220: JMP @#161720 ; Нет => выход на процедуру холодного старта
Теперь смотрим процедуру холодного старта:
То есть, сразу на холодном старте переменная 177776 будет установлена. В итоге переменная 177744 у меня оказывается не настроена, но на реале с ней всё в порядке.Код:; Холодный старт при включении питания
161726: MOV #001000, SP ; Устанавливаем стек
161732: CLR R0
161734: MOV #056364, -(R0) ; -> (177776)
161740: MOV #164042, -(R0) ; Адрес стандартной п/п вывода символа -> (177774)
Какой из этого вывод? видимо при холодном старте сразу после первой команды (настройки стека) возникает прерывание HALT.
- - - Updated - - -
NemigaBTL 1.0.77
Изменения с версии 53:
* Отладчик: подсказки для текущей инструкции.
* Режим экрана 896 x 624 увеличение 1.75 x 2
* Прерывание HALT на старте, только для конфигураций 4.05/4.06
- - - Updated - - -
Как итог, в этой версии заработала команда пульта '/', нужные ячейки стали открываться.
- - - Updated - - -
https://img-fotki.yandex.ru/get/4046...45051_orig.bmp
nzeemin, На реале после включения пишет:
И мигающий курсор. При этом на дисководе 0/1 загорается светодиод (двигатель не крутит).Код:МРТИ КВ НЕМИГА 4.06 177777 РМП
ЖДИТЕ..._
Т.е в пульт самостоятельно не выходит, а только тогда когда будет нажата кнопка ПУСК.
- - - Добавлено - - -
А состояние регистров устройств?
Думаю тут причина в том что функции сетевой платы пока не реализованы никак.
Буду делать постепенно, нужно разбираться с каждым отдельно.
Например, разница по 170004 -- эта ячейка используется микросхемой умножения/деления, пока не видел описания её работы.
Селектор адреса ВТ1 с аппаратным умножителем ВР2 с прошивкой 0006. ВГ1 управляется пр. 0007.
Кстати неверно что на emuverse указана прошивка 0005. Пр. 0005 и 0003 используются когда нет ап. умножителя. Т.е. умножение идет программно при этих прошивках.
На Немигах 4.05 и 4.06 ап. умножение. Да и на 3.03 судя по схеме тоже.
И ошибка MUL при тесте TSTVM2 при ап. умножителе, а при программном возможно её нет.
- - - Добавлено - - -
Можно использовать программу TSTMD для правильной эмуляции дисководов.
- - - Добавлено - - -
И ещё баги.
В эмуляторе на пр.4.06.
Команда SH CON показывает память 3052Кб.
Команда SH МЕМ вылет в пульт.
Мысль правильная, тем более что я так уже делал для МС-0515.
В аттаче сырые треки, полученные после форматирования дискеты через TSTMD.
- - - Updated - - -
Ещё один аттачмент, сырые треки после форматирования в программе MF.SAV.
Отличие только в первом секторе дорожки 00:
Код:0000000A: FF 17 -- правильное число секторов на дорожку, 23.
...
00000059: FF 17 -- правильное число секторов на дорожку, 23.
0000005A: FF 30
0000005B: FF 07
0000008A: 80 39 -- контрольная сумма
0000008B: FF 07 -- контрольная сумма
Поразбирался с драйвером MX.SYS, который называет себя "ДРАЙВЕР ГМД ФОРМАТА MX40/80 МИКРОЦОС LTD. V2.2"
Ожидания были такие что он соответствует драйверам MX от ДВК, описанному тут: http://zx-pk.ru/threads/20541-kontro...programmy.html
Но оказалось что он скорее "по мотивам".
Дорожка всегда читается и пишется целиком от начала до конца.
Структура дорожки которую ожидает этот драйвер.
Читаются первые 2841 байта от индекса.
Все слова данных сектора, а также слово контрольной суммы, записываются в формате старший байт затем младший байт, что отличается от обычного представления слов в памяти (младший потом старший), поэтому после чтения сектора и перед записью выполняется SWAB над всеми словами.Код:Заголовок, 3 байта:
Маркер 0363.
Байт 0 (его можно рассматривать как старший байт от слова номера дорожки).
Байт номер дорожки.
Данные секторов, всего 11 секторов по 256+2 байт на сектор:
128 слов = 256 байт данные секторов
Слово контрольной суммы, полученное обычным сложением всех слов сектора.
Концевик
4 байта: 20 4F 54 01 (hex)
Слово: номер дорожки * 2
Без концевика получается 3 + 11 * (256 + 2) = 2841 байт, именно столько читает драйвер, остальные байты до конца дорожки игнорируются (длина дорожки примерно 3125 байт).
При записи дорожки кроме заголовка и данных секторов пишется ещё 6 байт концевика.
А разве для MX не всегда так?
>Структура дорожки которую ожидает этот драйвер.
Есть отличия от ДВКшного MX? Я только в двух словах концевика отличия увидел, так они у разных mx.sys на двк тоже отличаются.
>что он скорее "по мотивам". ..... выполняется SWAB над всеми словами
А как иначе? В ДВК кнгмд аппаратно работает со словами, а в Немиге - с байтами.
У меня замечание к информации в emuverse по векторе прерывания 160006. Судя по листинге ПЗУ калькулятора Электроника МК-90, это вектор обработки прерывания от двойной ошибки шины в режиме HALT (в Немиге вызывает перезагрузку системы).
Код:160000: .WORD 000000
160002: .WORD 160016, 000340
160006: .WORD 160022, 000340
160012: .WORD 160030, 000340
160016: CLR R0
160020: BR 160034
160022: MOV #000002,R0
160026: BR 160034
160030: MOV #000004,R0
160034: TST @#000050
160040: BEQ 160050
160042: ADD @#000050,R0
160046: JMP (R0)
160050: MOV (SP),R1
160052: MOV #001000,SP
160056: MOV 160116(R0),R0
160062: MOV R0,R5
160064: ADD #000025,R0 ;адрес конца строки
160070: MOV #000006,R4 ;число цифр
160074: JSR PC,100032 ;вывод восьмеричного числа
160100: MOV R5,R0
160102: MOVB (R0)+,R2
160104: BEQ 160114
160106: JSR PC,120034 ;вывод символа r2 на экран
160112: BR 160102
160114: BR 160114
160116: .WORD 006236 ;строка "ОСТ ПО АДРЕСУ 000000"
160120: .WORD 006265 ;строка "ДВ ОШ КАНАЛА 000000"
160122: .WORD 006314 ;строка "ОШ ВЕК ПРЕРЫВ 000000"
piotr433, спасибо. По 160006 я опираюсь на информацию из ТО: http://www.emuverse.ru/wiki/%D0%9D%D...0/%D0%A2%D0%9E
Цитата:
При нажатии на кнопку "ПУСК" на передней панели на выводах
8, 12 микросхемы D40 формируются сигналы начального пуска, которые
устанавливают микросхемы управляющей памяти и системного контролле-
ра в начальное положение и запускают микропрограмму начального пус-
ка. Данная микропрограмма формирует обращение процессорного ядра к
ячейкам памяти с адресами 160006 и 160010, где читает и устанавли-
вает программный счетчик и слово состояния процессора соответственно.
nzeemin, Ещё 4 бага.
Курсор не всегда мигает.
Положение курсора выходит за экран.
Кнопка забой неправильно функционирует.
При включении опции serial 176500 выдаёт ошибку "Failed to open COM port (0x00000002).
nzeemin, А каков сейчас статус эмулятора?
То что я вижу:
4.06 не работает вообще (после ввода D снова выдает приглашение пульта)
4.05 пробует грузиться, но я не нашел ни одного образа где бы загрузка пошла дальше вывода "MD Handler".
3.03 грузится, но ведёт себя странно.
пробовал версию 1.0 от 08.06.2016
В эмуляторе сейчас главная проблема это понять как должны правильно должны работать прерывания, и реализовать это видение.
Это должно решить большинство остальных проблемы, включая курсор, звук и общую стабильность.
А что для этого нужно?
Просто тут существует мнение (не моё) что не хватает образов дисков, и если изыскать несколько образов - то всё сразу завертится и чуть ли не сразу появится работающая версия эмулятора.
Вложение 83444
Подскажите пожалуйста, каким образом можно запускать Бейсик и загружать исходный код?