
Сообщение от
AFZ
Зачем? Разве 8-го бита PSW недостаточно? Ведь ходит же способ запустить свою программу в HALT-mode (Полетаев в свое время выдал), она же точно в основном ОЗУ располагается, не в теневом.
Для возврата из 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