Как раз его я хорошо знаю :) Даже сделал на своём возможность подключения двух винтов - так что один диск был под систему, второй под разный мой хлам :)
Вот только - или два винта или винт и флопы :)
Вид для печати
Эмулятор FIS в прошивке -055 копируется из теневого ПЗУ в теневое ОЗУ по адресу 0171000. Если команда FIS была вызвана с разрешенными прерываниями, то и эмулятор FIS их также разрешает. Соответственно при любом прерывании в происходит переход из режима HALT в режим USER и в стек ложится PC и PSW прерванного эмулятора. Соответственно адрес возврата больше 0171000 и в сохраненном PSW установлен восьмой бит. Адрес больший 0160000 нужен, чтобы по RTI возвратится обратно в режим HALT. Так что используется стек прерванной программы, сам эмулятор FIS стека не использует.
Для возврата из USER в HALT по RTI нужен не только установленный 8-й бит в сохраненном PSW, но и адрес возврата должен быть большим или равным 0160000.
С методом Полетаева знаком. По его методу программа перекачивается в теневое ОЗУ, там же и исполняется. А используется для этого выполнение команды FIS. Эмулятор FIS сохраняет в буфере регистры с R0 по R6, адрес буфера 0173002. Это и используется - программа перекачки располагается в регистрах с R0 по R5, делается левый FADD, а далее переходим на начало буфера через RTI, потом докачиваем, что надо.
Собственно его программа:Код:Программа, скачивающая в основное ОЗУ содержимое ОЗУ HALT-режима в плате набазе 1801ВМ2.
.TITLE VM2
; команды 1801ВМ2
GO =: 12 ; G
STEP =: 16 ; P
RSEL =: 20 ; R0:=SEL
MFUS =: 21 ; R0:=(R5)+
RCPC =: 22 ; R0:=CPC
RCPS =: 24 ; R0:=CPS
MTUS =: 31 ; -(R5):=R0
WCPC =: 32 ; CPC:=R0
WCPS =: 34 ; CPS:=R0
START::
MOV #PROG,R5
MOV (R5)+,R0
MOV (R5)+,R1
MOV (R5)+,R2
MOV (R5)+,R3
MOV (R5)+,R4
MOV (R5)+,R5
CLR -(SP)
CLR -(SP)
CLR -(SP)
CLR -(SP)
FADD SP
CMP (SP)+,(SP)+
MOV #740,-(SP)
MOV #173002,R1
MOV R1,-(SP)
MOV #PROG,R5
MOV #PLEN,R2
RTI
PROG: MFUS
MOV R0,(R1)+
SOB R2,PROG
MOV #160000,R1
MOV #10000,R2
MOV #10000+20000,R5
10$: MOV -(R1),R0
MTUS
SOB R2,10$
MOV #NEXT,R0
WCPC
CLR R0
WCPS
STEP
PLEN=.-PROG/2
NEXT: HALT
EMT 350
.END START
Это конкретно для 1201.02 с 055-й ПЗУ-хой. Неизвестно, пойдет ли с 279-й и, тем более, на УКНЦ. На УКНЦ, скорее всего, не пойдет - у нее нет теневого ПЗУ, вместо него используется теневое ОЗУ в странице ввода-вывода, программу туда загоняет ПП из своей ПЗУ-хи. Вероятность того, что регистры сохраняются в том же месте - около нуля. С другой стороны, конечно, никто не мешает посмотреть, где эти программы сохраняют регистры и подправить код...
На 279-й пойдёт, посмотрел. Там эмулятор FIS естественно в другом месте ПЗУ, но копируется он в теневое ОЗУ по тому же адресу 0171000, эмулятор такой же, соответственно и буфер там же.
На УКНЦ и эмулятор FIS, и его буфер, естественно расположены в другом месте, адрес буфера 0167506. Но на УКНЦ таких сложностей не надо. Системное ОЗУ спокойно доступно через регистры адреса и данных (0176640/0176642), адрес через РА от 070000 до 077777. Так что спокойно закачивайте через РА и РД что надо, ну и вызывайте через RTI. На УКНЦ системное ОЗУ свободно с адреса 172724. К тому же на УКНЦ методом Полетаева лучше не пользоваться, т.к. после эмулятора FIS там идут разные загрузчики и подпрограммы тестирования, а самое главное - подпрограммы взаимодействия с терминалом, которые использует пульт.
Vslav, на вашем сайте документация по 1801ВМ2, которую когда-то выкладывал Titus. Страница 65, таблица 4.
Написал на Питоне ассемблер для микрокода LSI-11:
- понимает стандартные мнемоники для Western Digital MCP-1600, которые были реализованы в DEC MICASM
- поддерживает radix 8/10, понимает 0xnnn, 0nnnn, nnnnn., 0nnnn, и radix
- поддерживает локальные метки n$
- поддерживает арифметические выражения "()+-/*|&^~", выполняет символьные подстановки
- ассемблирует множество входных файлов в единую прошивку
- выводит заданные адреса трансляции и дополнительных ttl в файл - можно будет обновлять PLA и делать свои трансляции
- портируемый, написано для Phyton 3.x, будет работать Windows/Linux
PS. Этот учебный условно-полезный проект написан вечерами этой недели + полный день вчера. Мое текущее мнение - Питон это бомба. Вторая бомба это VS code. Дальше по жизни буду пользоваться обеими :)
PPS. Отдельное спасибо Юре yu.zxpk за дельные советы и ревью моего нупского кода.