С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Как ни странно, я загрузился до приглашения командной строки.
Странно потому что эмулятор сейчас представляет из себя чудовище Франкенштейна.
Особенно жутко вышел эмулятор дисковода -- делал его глядя на эмуляцию диска в unrealspeccyp, но у меня другая модель времени, пришлось пока навставлять костылей. Ну и процессор пока довольно далёк от T11.
Дальше надо хоть как-то размапить клавиатуру, пока клавиатура в эмуляторе выполняет только одну функцию -- проходит начальный тест.
надо загримировать
а можно не мелочиться и сэмулировать intel mcs48мне легче, такое cpu core уже есть, оставалось только прочитать документацию и воткнуть в него "провода" по схеме. хотя с Искрой-1030 такой фокус не пока не прошел -- что-то загадочное там происходит с сигналами в порту...
На диске dump-OSA.dsk удалось загрузиться в командную строку и даже команды работают!
Но тест 183107.SAV пока не проходит -- пишет начальную надпись "УПРАЖНИТЕЛЬ МС0515 В1.0" и вываливается в HALT.
- - - Updated - - -
Конфигурация системы:
- - - Updated - - -
Ну и загрузившись с диска System3.dsk и запустив EXPRESS я получил живую игрушку:
Но с управлением действительно беда. Может оно джойстик хочет?
- - - Updated - - -
Сделал маскирование прерывания Vblank, теперь "УПРАЖНИТЕЛЬ" работает таким вот образом -- интересно, это так и должно быть?
![]()
Ну теперь ты в мой код можешь подглядывать ;-)
https://github.com/nzeemin/ms0515btl
На диске 059.dsk есть FORML.SAV -- форматирование нижней поверхности диска.
Собственно вот самая интересная часть -- здесь в памяти готовится образ дорожки с адреса 3000, но используется целое слово на один записываемый на дорожку байт. Из этого кода получаем то как выглядит "сырой" образ дорожки.
Плюс вот как выглядит 26 слов по адресу 2052 -- опять же каждое слово записывается на дорожку как один байт:Код:001142: MOV #003000, R5 ; Адрес начала образа дорожки 001146: MOV #000066, R4 ; Счётчик = 54. -- заполнитель от начала дорожки 001152: MOV #000116, (R5)+ ; пишем 4Eh 001156: SOB R4, 001152 ; повторяем 001160: MOV #000014, R4 ; Счётчик = 12. 001164: CLR (R5)+ ; пишем 00h 001166: SOB R4, 001164 ; повторяем 001170: MOV #000366, (R5)+ ; байт F6h -- пишем C2h 001174: MOV #000366, (R5)+ ; байт F6h -- пишем C2h 001200: MOV #000366, (R5)+ ; байт F6h -- пишем C2h 001204: MOV #000366, (R5)+ ; байт F6h -- пишем C2h 001210: MOV #000043, R4 ; Счётчик = 35. 001214: MOV #000116, (R5)+ ; пишем 4Eh 001220: SOB R4, 001214 ; повторяем 001222: MOV #000012, R3 ; Счётчик = 10. сектором ; Цикл подготовки секторов 001226: MOV #000001, R1 ; Номер сектора, начинаем с 1 001232: MOV #000010, R4 ; Счётчик = 8. 001236: CLR (R5)+ ; пишем 00h 001240: SOB R4, 001236 ; повторяем 001242: MOV #000365, (R5)+ ; байт F5h -- пишем A1h 001246: MOV #000365, (R5)+ ; байт F5h -- пишем A1h 001252: MOV #000365, (R5)+ ; байт F5h -- пишем A1h, начало CRC 001256: MOV #000376, (R5)+ ; пишем FEh 001262: MOV #000011, (R5)+ ; пишем 09h 001266: CLR (R5)+ ; пишем 00h 001270: MOV R1, (R5)+ ; пишем 01h -- номер сектора 001272: INC R1 ; Увеличиваем номер сектора 001274: MOV #000002, (R5)+ ; пишем 02h -- 512 байт на сектор 001300: MOV #000367, (R5)+ ; байт F7h -- пишем 2 байта CRC 001304: MOV #000026, R4 ; Счётчик = 22. 001310: MOV #000116, (R5)+ ; байт 4Eh 001314: SOB R4, 001310 ; повторяем 001316: MOV #000014, R4 ; Счётчик = 12. 001322: CLR (R5)+ ; пишем 00h 001324: SOB R4, 001322 ; повторяем 001326: MOV #000365, (R5)+ ; байт F5h -- пишем A1h 001332: MOV #000365, (R5)+ ; байт F5h -- пишем A1h 001336: MOV #000365, (R5)+ ; байт F5h -- пишем A1h, начало CRC 001342: MOV #000373, (R5)+ ; пишем FBh 001346: CMP #000001, 001264 ; 1-я дорожка? 001354: BNE 001406 ; нет => переходим 001356: CMP #000005, R1 ; 5-й сектор? 001362: BNE 001406 ; нет => переходим 001364: MOV #002052, R0 ; Откуда копируем начало сектора 001370: MOV #000032, R4 ; Счётчик = 26. 001374: MOV (R0)+, (R5)+ ; копируем 001376: SOB R4, 001374 ; повторяем 001400: MOV #000363, R4 ; Счётчик = 243. 001404: BR 001412 ; идём дописывать остаток сектора 001406: MOV #000400, R4 ; Счётчик = 256. -- готовим 512. байт данных 001412: MOV #000266, (R5)+ ; пишем B6h 001416: MOV #000155, (R5)+ ; пишем 6Dh 001422: SOB R4, 001412 ; повторяем 001424: MOV #000367, (R5)+ ; байт F7h -- пишем 2 байта CRC 001430: MOV #000054, R4 ; Счётчик = 44. 001434: MOV #000116, (R5)+ ; байт 4Eh 001440: SOB R4, 001434 ; повторяем 001442: DEC R3 ; Уменьшаем счётчик цикла по секторам 001444: BEQ 001452 ; если 0 => выходим из цикла 001446: JMP 001232 ; Продолжаем цикл по секторам 001452: MOV #000540, R4 ; Счётчик = 352. -- заполнение до конца дорожки 001456: MOV #000116, (R5)+ ; байт 4Eh 001462: SOB R4, 001456 ; повторяем 001464: MOV #000010, @#157732
Итого получаем вот такую структуру дорожки.Код:002052 000004 000000 000000 000000 000001 000000 000000 000000 002072 000016 000000 000000 000002 000325 000000 000071 000147 002112 000364 000046 000022 000003 000000 000000 000000 000000 002132 000000 000010
Отсчёт идёт от индексного отверстия. Количество байт указано десятичное, байты — шестнадцатеричные значения, в скобках указано что реально записывается на диск, в особых случаях.
- - - Updated - - -Код:Кол-во байт Записываемые байты 54 4E 12 00 4 F6 (записывается C2) 35 4E Начало сектора 1..10 8 00 3 F5 (записывается A1) 1 FE -- маркер заголовка сектора 1 xx -- номер дорожки 0..79 1 00 -- сторона: 0 - низ 1 01 -- номер сектора 1 02 -- 512 байт на сектор 1(2) F7 (записывается 2 байта CRC) 22 4E 12 00 3 F5 (записывается A1) 1 FB -- маркер данных сектора 512 xx -- данные сектора 1(2) F7 (записывается 2 байта CRC) 44 4E Конец сектора 352 4E -- до конца дорожки
Не понял здесь только зачем так важно было записать эти 26 байт в 5-й сектор первой дорожки -- с виду это заголовок директории.
Может таким образом отпадает необходимость делать команду INIT ?
Последний раз редактировалось nzeemin; 23.02.2017 в 01:55.
Процессор T11 имеет инструкцию MFPT (код 000007) -- в регистр R0 помещается 4, как признак того что тип процессора -- DCTII-AA.
Вижу что при загрузке системы инструкция вызывается.
Интересно, отдаёт ли КР1807ВМ1 такой же тип?
mame как раз это и не эмулирует. интересно, как тогда работает :-)
+ в T11_UsersMan.pdf сказано, что MOV/CLR/SXT перед записью в память читают ее (страница B-8) и нужно быть внимательным, если там устройства.
EDIT: теперь эмулирует и процессор определяется верно. не хватает только "проверки четности памяти", хм.
а результаты"упражнителя" просто надо ждать
![]()
Последний раз редактировалось shattered; 24.02.2017 в 13:58.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)