Для общего развития наваял загрузчик с HX для KDJ11-B. Загрузчик совсем простой: не проверяет что считал, не отслеживает возможное отсутствие готовности передатчика. Определяет наличие HX и ругается если нету. В идеале надо ROM просить написать "starting system" сразу после определения наличия HX, но уже лень переделывать
Код:
Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key: L
Device Unit
name numbers Source Device type
DU 0-255 CPU ROM RDnn, RXnn, RC25, RAnn
DL 0-3 CPU ROM RL01, RL02
DX 0-1 CPU ROM RX01
DY 0-1 CPU ROM RX02
DD 0-1 CPU ROM TU58
DK 0-7 CPU ROM RK05
MU 0-255 CPU ROM TK50, TU81
MS 0-3 CPU ROM TK25, TS05
XH 0-1 CPU ROM DECNET ETHERNET
NU 0-15 CPU ROM DECNET DUV11
NE 0-15 CPU ROM DECNET DLV11-E
NF 0-15 CPU ROM DECNET DLV11-F
HX 0 EEPROM TTY MUX
Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key: B HX
Trying HX0
Message 15
Non existent drive
Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key:
Код:
.TITLE HXBOOT
CSR == 177560 ;CSR ПО УМОЛЧАНИЮ
;DEC РЕКОМЕНДУЕТ ИСПОЛЬЗОВАТЬ НАЧАЛЬНЫЙ АДРЕС 40000.
.ASECT
.=40000
;ТОЧКА ВХОДА В ЗАГРУЗЧИК. В ЭТОМ МЕСТЕ:
; - MMU ВЫКЛЮЧЕН
; - 22-БИТНАЯ АДРЕСАЦИЯ ВЫКЛЮЧЕНА
; - ВЫБРАН ОСНОВНОЙ НАБОР РЕГИСТРОВ
; - R0 СОДЕРЖИТ UNIT (ВСЕГДА 0)
; - R1 СОДЕРЖИТ 0 ИЛИ УКАЗАННЫЙ CSR
START: TST R1 ;CSR УКАЗАН?
BNE 10$ ;ДА
MOV #CSR,R1 ;НЕТ, ИСПОЛЬЗУЕМ ОБЫЧНЫЙ
10$: MOV #IDENT,R5 ;ПОСЫЛАЕМ КОМАНДУ ПРОВЕРКИ
CALL SEND ;
MOV #2,R3 ;ПРИНИМАЕМ 2 БАЙТА
CALL RECV ;
BCS 30$ ;CS - НЕТ УСТРОЙСТВА
CMP #375,-(R4) ;HX ДОЛЖЕН ВЕРНУТЬ 375
BNE 40$ ;КЮ!
MOV #BOOT,R5 ;ПОСЫЛАЕМ КОМАНДУ ЗАГРУЗКИ
CALL SEND ;
MOV #512.,R3 ;ПРИНИМАЕМ ЗАГРУЗЧИК
CALL RECV ;
BCS 40$ ;КЮ!
MOV #1,R5 ;ЗАПРАШИВАЕМ "STARTING SYSTEM"
;В ДОКУМЕНТАЦИИ DEC, ПОПАВШЕЙ ПОД РУКУ, НИЧЕГО НЕ ГОВОРИТСЯ ПРО
;СТЕК. ОДНАКО ЕСЛИ ЕГО ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ ПРИ ЗАПРОСЕ СООБЩЕНИЯ,
;АДРЕС ВОЗВРАТА ЗАТРЕТСЯ И БУДЕТ ОШИБКА "E 75". ДЛЯ ЗАПРОСА СООБЩЕНИЙ
;ОБ ОШИБКАХ УСТАНАВЛИВАТЬ СТЕК НЕ ТРЕБУЕТСЯ.
MOV #START,SP ;УСТАНАВЛИВАЕМ СТЕК
20$: CALL @#165762 ;ЗАПРАШИВАЕМ СООБЩЕНИЕ
CLR PC ;ЗАПУСКАЕМ СИСТЕМУ
30$: MOV #ERASE,R5 ;СТИРАЕМ МУСОР ОТ ЗАПРОСА HX
CALL SEND ;
MOV #275,R5 ;ОШИБКА - NONEXISTENT DRIVE
BR 20$ ;ВОЗВРАТ В ROM
40$: MOV #301,R5 ;ОШИБКА - DRIVE ERROR
BR 20$ ;ВОЗВРАТ В ROM
RECV:: MOV #-1,R2 ;УСТАНАВЛИВАЕМ ЧИСЛО ПОПЫТОК
10$: TSTB @R1 ;ЖДЕМ ГОТОВНОСТИ
BPL 20$ ;
MOVB 2(R1),(R4)+ ;ПОЛУЧАЕМ БАЙТ
SOB R3,RECV ;ЦИКЛИМСЯ ДО КОНЦА
RETURN ;ВОЗВРАТ (C СБРОШЕН - TSTB)
20$: SOB R2,10$ ;ПОВТОРЯЕМ ПОПЫТКУ
SEC ;УСТАНАВЛИВАЕМ C
RETURN ;ВОЗВРАТ
SEND:: MOVB (R5)+,R4 ;ПОЛУЧАЕМ КОЛИЧЕСТВО БАЙТОВ
10$: TSTB 4(R1) ;ЖДЕМ ГОТОВНОСТИ
BPL 10$ ;
MOVB (R5)+,6(R1) ;ПОСЫЛАЕМ БАЙТ
SOB R4,10$ ;ЦИКЛИМСЯ ДО КОНЦА
RETURN ;ВОЗВРАТ
IDENT: .BYTE 4,1,376,0,0
BOOT: .BYTE 3,4,10,0
ERASE: .BYTE 3,10,40,10
.END
PS. DAY в системе 5.4G которая идет в комплекте - стабильно "?MON-F-Trap to 4 001264"