Перейти к содержанию
    

Реализация расширенной FPGA-реплики ретро-компьютера

У них была зашита программка "монитор" наподобие простейшего BIOS. При включении Электроника 60 выходила на этот монитор на TT (дисплее) рисовала значок @. Дальше можно было подать команду , например 173000G (идти к восьмеричному адресу 173000) - запуск ДВК2 с дисковода DX0:; или посмотреть/модифицировать содержимое памяти или регистров. Там этих команд было меньше 10. указатель стека поумолчанию имел адрес 1000, дальше шла программа. Последние 4К памяти отводились для адресации железок.

Именно так. Причем этот монитор находился в коде микрокоманд реализуюющих систему команд процессора. Адреса памяти начиная с нуля - системные регистры и вектора прерывания.

Подробно процедуру первоночальной загрузки и пуска можно прочитать в http://narod.ru/disk/8373965000/Микро-ЭВМ%...а%201.djvu.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался, как выводить лог выполнения инструкций в simh (симулятор для PDP-11) - теперь могу сравнивать с логом своего симулятора, и вылавливать ошибки (пока одну увидел - флаг переноса неправильно устанавливается :smile3046: ).

В симуляторе simh: в starts.com прописал останов, и вывел весь "эталонный" лог загрузки RT-11 в файл, ~200000 кодов. Выловил еще пару дурацких ошибок :maniac: , теперь расхождения после ~7000 кодов только из-за неполного описания прерываний внешних устройств - буду доделывать. Вся программа, кстати, ~300 строк на Паскале.

 

В "эталонном" логе значимыми являются только первые ~10000 кодов, остальные - пустой цикл между прерываниями таймера, много тактов почему-то до загрузки "starts.com".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже выводится приветственное сообщение, но символы через один теряются...

Может, что-то не так с периферией? Бит готовности терминала (200 в регистре 177564) сбрасывается после записи символа в 177566?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бит готовности терминала (200 в регистре 177564) сбрасывается после записи символа в 177566?

Нет, все время установлен. Непонятно, как использовать этот бит: по моему логу эти регистры не опрашиваются, используются только по записи, в 177564 пишется 100. "Эталонный" лог из SIMH мне понять сложно, тк в логе не приводятся реальные адреса. Кусок "эталонного" лога, соответствующий прерыванию по 64 (если не напутал):

154502 000200|154050 007746  MOV R5,-(SP)
154504 000210|154504 154050  MOV #154070,R5
154510 000210|000015 154510  JSR R4,154522
154522 000210|       154522  TST #0
154526 000204|               BNE 154732
154530 000204|       154514  DEC (R4)+
154532 000210|               BGT 154630
154534 000210|154516 007742  MOV R4,-(SP)
154536 000210|       154516  CLR -(R4)
154540 000204|154540 154514  MOV 150764,R4
154544 000204|               BEQ 154554
154554 000204|007740 000000  MOV (SP)+,R4
154556 000210|154070 154070  CMP (R5),2(R5)
154562 000211|               BNE 154570
154570 000211|       154070  DEC -(R5)
154572 000205|154066 154572  CMP (R5)+,#177777
154576 000201|               BEQ 154724
154600 000201|154070 154516  MOVB @(R5)+,(R4)
154602 000201|154602 154516  BIC #177600,(R4)
154606 000201|154606 154606  JSR PC,157340
157340 000201|154516 157340  CMP (R4)+,#177
157344 000211|               BEQ 157400
157346 000211|154520 157346  CMP 177776(R4),#40
157354 000211|               BGE 157404
157356 000211|154520 157356  CMP 177776(R4),#10
157364 000200|               BNE 157374
157374 000200|157374 007740  ADD #12,(SP)
157400 000210|157400 007740  ADD #12,(SP)
157404 000210|       157404  RTS PC
154636 000210|154520 154636  CMP -(R4),#11
154642 000200|               BNE 154656
154656 000200|154516 154656  CMP (R4)+,#15
154662 000204|               BNE 154674
154664 000204|       154520  CLR 177774(R4)
154670 000204|154670 154520  MOV #10,(R4)
154674 000200|       154520  DEC R4
154676 000210|154517 154676  CMPB -(R4),@#56
154702 000200|               BNE 154626
154626 000200|       154072  INC -(R5)
154630 000210|154516 154630  MOV (R4),@150410
154634 000200|               BR 154732
154732 000200|               BR 154746
154746 000200|007742 154516  MOV (SP)+,R4
154750 000200|007744 154070  MOV (SP)+,R5
154752 000210|               RTI

 

154630 000210|154516 154630 MOV (R4),@150410

- это запись в 177566 (вижу по своему логу)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, все время установлен. Непонятно, как использовать этот бит: по моему логу эти регистры не опрашиваются, используются только по записи, в 177564 пишется 100. "

154630 000210|154516 154630 MOV (R4),@150410

- это запись в 177566 (вижу по своему логу)

 

В логе мне разобраться, пожалуй, слабо... Из того, что помню:

Запись 100 в 177564 - разрешение прерывания. В подпрограмме обработчика запись в 177566 - вывод символа. По этой записи на время передачи символа должна сняться готовность (бит 200 в 177564), иначе новое прерывание не наступит. В прерывании программа может и не анализировать снятие готовности по передаче символа, но в целях отладки такой анализ полезно ввести.

Если идёт вывод по прерываниям, линии запроса/предоставления прерываний должны быть подтянуты к "1", в запросе используется монтажное "или", линия предоставления прерывания использует последовательный арбитраж.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, ошибка вывода на TT косвенная: у меня прерывание по 220 вызывается сразу по записи 105 в 177404, впервые это происходит как раз при чтении TT.SYS (смотрю по номеру блока), до этого чтение RK выполняется без прерываний по 220. После выхода из прерывания поведение в SIMH и моем в симуляторе отличается...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, ошибка вывода на TT косвенная: у меня прерывание по 220 вызывается сразу по записи 105 в 177404, впервые это происходит как раз при чтении TT.SYS (смотрю по номеру блока), до этого чтение RK выполняется без прерываний по 220. После выхода из прерывания поведение в SIMH и моем в симуляторе отличается...

Запись 105 по адресу 177404 - это разрешение прерывания от RK: см. описание регистров, 220 - вектор прерывания RK:

Видимо, после загрузки ядра RT11 идёт разрешение прерываниий и проверка наличия устройств.

Для диагностики в своё время использовалась ТМОС, она работала без прерываний и грамотно написанные тесты проверяли каждое устройство в отдельности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Запарился искать ошибку, помучаюсь еще немного, не найду - перепишу прогу на Си, и выложу сюда...

Вывод в симуляторе: некоторые версии завершаются "HALT", другие все-таки доходят до приглашения ".", примеры:

--------------------  RT-11SJ    V02C-02  --------------------------
R-1J  0C0

.
--------------------  RT-11SJ    V05.03  -----------------------------
R-1J 0.3 

?O--Ivldcl oURN eieDrcoyIOerrBdFthOelyerrDrcoyoefo7
134720

.iE
--------------------  ados-SJ  (S)  A06.04  -------------------------
ao- J()A60 
?MNF EDON^A OAD

.   
------------------------------------------------------------------------------

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел еще одну дурацкую ошибку :maniac:, теперь с загрузкой порядок. :yeah:

Двигаюсь дальше: доделать внешние устройста(ввод с TT + запись на RK), проверить работу системных программ/компиляторов, перевести в FPGA.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"SHOW ALL" - работает, внешним устройствам отвел адреса, начиная с 177400 - Ок, но загрузчик "находит" лишние устройства, см лог. Будут вопросы, открою новую тему в "Системах на ПЛИС".

RT-11SJ  V04.00C 

.SH ALL

RT-11SJ  V04.00C 

Booted from RK0:RT11SJ
Resident Monitor base is 160076 (57406.)
USR is set SWAP
TT is set NOQUIET
Indirect file abort level is ERROR
Indirect file nesting depth is 3

LSI-11 Processor
Parity Memory
VT48 Graphics Display Hardware
60 Cycle System Clock
KW11-P User Programmable Clock

No SYSGEN options enabled

Device      Status       Vector
-------------------------------
  RK      Resident       220

TT   
RK  (Resident) 
    RK0 = SY , DK 
BA   
13 free slots

Job  Name  Console Level State    Low    High  Impure
0   RESORC   0      0   Run     000000 160034 000000

No multi-terminal support


.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проверить работу системных программ/компиляторов

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итак, резюме к сегодняшнему дню: USB и Ethernet предполагается реализовывать в составе контроллера microchip pic32mx795 (стоимость чипа от 200 руб), на нем же есть куча ног, которые можно использовать для LPT, родной клавиатуры и т.п. USB соответственно будет один, т.к. подходящих контроллеров с бОльшим количеством USB в одном флаконе почти нет, поэтому от PS/2-мыши и клавиатуры отказаться не получится.

В качестве базовой ПЛИС будет использоваться Altera Cyclone III - EP3C16Q240C8N - 240 выводный QFP-чип, который при определенной сноровке можно запаять паяльником. Стоимость чипа от 500 руб.

Микросхемы ОЗУ пока нашлись такие MT48LC4M16A2P, MT48LC2M32B2P - по 64 Мб, цена около 70 руб, в продаже в большом количестве. Больше 32 мб ставить нет смысла, т.к. диспетчер, заимствуемый из ВМ3 не сможет адресовать более 4 мб, остальная память будет использоваться под графические буферы.

С разрешениями тоже пришлось урезаться до набора 800*600, 640*480, 512*256 и 256*256, т.к. более высокие разрешения требуют нереального для этих мощностей цифрового потока под 300 мб/с (для отображения содержимого видеопамяти с частотой 75 Гц).

Что касается процессора, уже готова его упрощенная модель, которая будет в итоге работать с частотой примерно 100 мГц, но в отличие от оригинального ВМ1 будет выполнять 1 команду за 1 такт, а не за 10. Итого, получим ускорение процессора порядка 200 раз в сравнении с оригиналом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Микросхемы ОЗУ пока нашлись такие MT48LC4M16A2P, MT48LC2M32B2P - по 64 Мб, цена около 70 руб, в продаже в большом количестве. Больше 32 мб ставить нет смысла, т.к. диспетчер, заимствуемый из ВМ3 не сможет адресовать более 4 мб, остальная память будет использоваться под графические буферы.
MT48LC4M16 , 2M32 (4Mx16, 2Mx32) — это 64 Mb (мегабита), а ВМ3 держит 4MB (мегаБайта)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...от PS/2-мыши и клавиатуры отказаться не получится.

Напрасно - они уже вымерли как класс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...