; ; Слой 0 - загрузчики и программы для отладки оперативной памяти ;_______________________________________________________________________ ; .ASECT . = 173000 .if ne, 1 BGSL0: . = BGSL0 ;_______________________________________________________________________ ; ; Определим значения меток из слоя номер один ; PDX = 173002 PMT = 173164 CMN1 = 173266 PMM = 173336 PDM = 173476 PSM = 173524 PDR = 173556 PBS = 173750 ;_______________________________________________________________________ ; VX1: mov #200, @#173024 ; Выход на эмулятор ; по включению питания ; JT1: mov #200, @#173024 ; Выход на выполнение тестов READ: .word 7 ; перед загрузкой .word 27 ; ;_______________________________________________________________________ ; ; Программа подключения переключателя общей шины (ПОШ) ; BS: .ascii "SB" ; .word DK ; ; ; адрес запуска в этой ячейке (173024) устанавливается ; распаиваемыми перемычками на плате 2420.006 в диапазоне от 173000 до 173776 ; работает схема "МОНТАЖНОЕ И", поэтому в ПЗУ запишем единичные значение битов ; адреса (и нулевой младший - адрес четный всегда) обычно тут 173000 ; Установленная перемычка означает единичное значение разряда, отсутствующая ; перемычка означает нулевое значение разряда, если все перемычки отсутствуют ; то стартовый адрес равен 173000 ; .word 173776 .word 340 ; ; STBS.2: mov #177420, R1 ; mov #PBS, SP ; bne PRODZ1 ; ;_______________________________________________________________________ ; ; Загрузчик с диска DK ; DK: .ascii "KD" ; имя устройства .word DP ; адрес загрузчика с диска DP STDK.1: mov PC, R4 ; запоминание адреса возврата bne JT1 ; STDK.2: mov #177400, R1 ; вход из эмулятора по START STDK.3: add #4, R1 ; адрес PKC в R1 add R3, R3 ; add R3, R3 ; add R3, R3 ; add R3, R3 ; add R3, R3 ; в разрядах 15,..13 R3 номер диска mov R3, 6(R1) ; пересылка в РАД S1: mov #5, R2 ; код команды GOCMN1: mov #CMN1, SP ; адрес продолжения в первом слое PRODZ1: mov #PRODZ, PC ; переход в первый слой ;_______________________________________________________________________ ; ; Загрузчик с диска DP ; DP: .ascii "PD" ; имя устройства .word DR ; адрес загрузчика с диска DR STDP.1: mov PC, R4 ; запоминание адреса возврата bne JT1 ; на выполнение тестов STDP.2: mov #176710, R1 ; вход из эмулятора по START STDP.3: add #4, R1 ; сброс PKC в R1 mov R3, (R1) ; пересылка в PKC номера диска mov #S1, PC ; переход на общее продолжение ;_______________________________________________________________________ ; ; Загрузчик с диска DR ; DR: .ascii "RD" ; имя устройства .word DX ; адрес загрузчика с диска DR STDR.1: mov PC, R4 ; запоминание адреса возврата bne JT1 ; на выполнение тестов STDR.2: mov #176700, R1 ; вход из эмулятора по START STDR.3: mov #40, 10(R1) ; сброс контроллера mov #PDR, SP ; адрес продолжения в первом слое bne PRODZ1 ; ;_______________________________________________________________________ ; ; Загрузчик с диска DX ; DX: .ascii "XD" ; имя устройства .word DM ; адрес загрузчика с диска DX STDX.1: mov PC, R4 ; JT1.1: bne JT1 ; на выполнение тестов STDX.2: mov #177170, R1 ; вход из эмулятора по START STDX.3: mov #7, R3 ; код команды в R3 (чтение сектора) bic #177776, R4 ; выделение номера устройства beq 7$ ; нулевое устройство mov #27, R3 ; код выдачи в РКС для устройства 1 ; (чтение сектора DX1:) 7$: mov (R1), R2 ; есть КОП? (ожидание bic #77737, R2 ; готовности после RESET) beq 7$ ; нет mov R3, (R1) ; выдача кода в РКС mov #PDX, SP ; переход в первый слой для bne PRODZ1 ; продолжения загрузки ;_______________________________________________________________________ ; ; Загрузчик с диска DM ; DM: .ascii "MD" ; имя устройства .word DY ; адрес загрузчика с диска DY STDM.1: mov PC, R4 ; запоминание адреса возврата bne JT1 ; на выполнение тестов STDM.2: mov #177440, R1 ; вход из эмулятора по START STDM.3: mov R4, 10(R1) ; пересылка номера диска mov #3, (R1) ; подтверждение тома СМ5400 (тип 0) mov #21, R2 ; код команды для чтения 6$: mov (R1), R4 ; ожидание готовности bic #177577, R4 ; beq 6$ ; ; mov (R1), R4 ; bic #77777, R4 ; проверка на ошибку beq GOCMN1 ; переход на общую часть mov 14(R1), R4 ; bic #177737, R4 ; ошибка типа накопителя? beq ER ; нет, переход по ошибке reset ; да. продолжить, сменив тип накопителя mov #PDM, SP ; адрес продолжения в первом слое bne PRODZ1 ; ;_______________________________________________________________________ ; ; Подпрограмма загрузчика DY ; EMPTY: bic #4, R3 ; команда "разгрузка сектора" RDDY: mov R3, @#177170 ; выдача команды в РКС bne WAITY ; на п/п ожидания готовности ;_______________________________________________________________________ ; ; Загрузчик с гибкого магнитного диска DY ; DY: .ascii "YD" ; имя устройства .word MT ; адрес загрузчика с диска MT STDY.1: mov PC, R4 ; запоминание адреса возврата bne JT1.1 ; на выполнение тестов STDY.2: add R4, R4 ; смещение к таблице команд ERRDY: reset ; mov R1, R1 ; mov R1, R1 ; mov #1, R0 ; номер сектора bic R2, R2 ; очистка текущего адреса загрузки mov #100, R5 ; слов в секторе при одинарной плотности mov #400, SP ; bic R3, SP ; инвертирование бита плотности beq 15$ ; add R5, R5 ; двойная плотность. удвоение счетчика 15$: mov READ(R4), R3 ; код команды в R3 add SP, R3 ; добавим бит плотности к команде mov PC, SP ; bne RDDY ; выдача команды чтения bne WAITS ; выдача адреса сетора bne WAITT ; выдача адреса дорожки bne EMPTY ; выдача команды разгрузки буфера bne WAITD ; выдача счетчика слов bne WAITD2 ; выдача адреса загрузки add R5, R2 ; add R5, R2 ; коррекция адреса загрузки add #2, R0 ; адрес сектора 1, 3, 5, 7 cmp #11, R0 ; сектор 7 уже загружен? bne 15$ ; bic PC, PC ; запуск загрузчика ; WAITD2: mov R2, @#177172 ; выдача адреса загрузки bne WAITY ; на ожидание готовности WAITT: mov #1, R1 ; первая дорожка bne WAITST ; WAITS: mov R4, R1 ; WAITST: mov R1, @#177172 ; выдача адреса сектора или дорожки WAITY: mov @#177170, R1 ; bic #77537, R1 ; есть готовность? beq WAITY ; нет bic #240, R1 ; bne ERRDY ; переход по ошибке add #2, SP ; mov SP, PC ; выход из подпрограммы ; WAITD: mov R5, @#177172 ; bne WAITY ; ;_______________________________________________________________________ ; ; Загрузчик с магнитной ленты MT ; MT: .ascii "TM" ; имя устройства .word MM ; загрузка с фазокодированной ленты STMT.1: mov PC, R4 ; JT1.2: bne JT1.1 ; на выполнение тестов STMT.2: mov #172520, R1 ; запишем адрес РКС в R1 STMT.3: mov #PMT, SP ; адрес продолжения в первом слое bne PRODZ ; переход в первый слой ;_______________________________________________________________________ ; ; Загрузчик с фазокодированной ленты MM ; MM: .ascii "MM" ; имя загрузчика MM .word PR ; указатель на следующий загрузчик STMM.1: mov PC, R4 ; bne JT1.1 ; STMM.2: mov #172440, R1 ; запишем адрес РКС в R1 STMM.3: mov #PMM, SP ; адрес продолжения в первом слое bne PRODZ ; переход в первый слой .word -1, -1, -1 ; для продолжения загрузки ;_______________________________________________________________________ ; ; Программы для отладки оперативной памяти ; . = BGSL0+610 ; ; Запись, чтение, чтение-инверсия-запись, чтение слова ; 1000$: mov @#177570, (R0)+ ; адрес R0, данные РП mov -(R0), R4 ; чтение слова com (R0) ; инверсия mov (R0), R3 ; чтение слова br 1000$ ; ; ; Запись, чтение-инверсия-запись байта, чтение слова ; 1001$: mov @#177570, (R0) ; адрес R0, данные РП comb (R1) ; адрес байта R1 mov (R0), R4 ; чтение слова br 1001$ ; ; ; Запись, запись байта, чтение слова ; 1002$: mov R2, (R0)+ ; адрес R0, данные R2 movb @#177570, (R1) ; адрес R1, данные РП mov -(R0), R4 ; чтение слова br 1002$ ; ;_______________________________________________________________________ ; ; Выход по ошибке ; . = BGSL0 + 650 ER: reset ;_______________________________________________________________________ ; ; Старт по адресу в R5 ; Подготовка в R3 сдвинутого на 8 разрядов влево номера ; загружаемого устройства ; START0: mov #100,@#173024 ; переход в первый слой add R3, R3 ; на продолжение подпрограммы add R3, R3 ; вход из первого слоя add R3, R3 ; на продолжение старта add R3, R3 ; add R3, R3 ; mov R5, PC ; на подпрограмму или загрузчик ;_______________________________________________________________________ ; . = BGSL0+674 ; переход в первый слой PRODZ: mov #100,@#173024 ; для продолжения загрузки ;_______________________________________________________________________ ; ; Абсолютный загрузчик с перфоленты ; PR: .ascii "RP" ; имя устройства .word SM ; адрес следующего загрузчика bic R0, R0 ; очистка смещения загрузчика bic R0, R0 ; mov R1, R1 ; mov R1, R1 ; mov #200, @#173024 ; переход на продолжение ; загрузки во втором слое ;_______________________________________________________________________ ; ; Загрусчик с диска SM ; SM: .ascii "MS" ; имя устройства .word 0 ; признак последнего загрузчика mov PC, R4 ; bne JT1.2 ; STSM.2: mov #PSM, SP ; переход на продолжение bne PRODZ ; загрузки в первом слое ;_______________________________________________________________________ ; ; Подпрограмма поиска загрузчика по имени ; . = BGSL0+742 ; 90$: add #4,R4 ; коррекция адреса начала mov #300, @#173024 ; переход в третий слой ; после успешного поиска ;_______________________________________________________________________ ; ; Вход из третьего слоя на поиск ; mov #BS, R4 ; засылка адреса заголовка первого загрузчика 91$: cmp (R4)+, R2 ; сравнение имени загрузчика с командой эмулятора beq 90$ ; если равны, то поиск успешно окончен mov (R4)+, R4 ; иначе получаем адрес следующего загрузчика bne 91$ ; повторяем поиск пока адрес не нулевой mov #300, @#173024 ; не нашли, возврат в эмулятор в третий слой ;_______________________________________________________________________ ; ; Старт по адресу в R5 при входе с третьего слоя ; bne START0 ;_______________________________________________________________________ ; ; Дамп, прочитанный из реальной машины, совпадает с результатом компиляции (кроме 173024) ; .iff .word 012737, 000200, 173024, 012737, 000200, 173024, 000007, 000027 .word 041123, 173042, 173000, 000340, 012701, 177420, 012706, 173750 .word 001023, 042113, 173114, 010704, 001356, 012701, 177400, 062701 .word 000004, 060303, 060303, 060303, 060303, 060303, 010361, 000006 .word 012702, 000005, 012706, 173266, 012707, 173674, 042120, 173142 .word 010704, 001331, 012701, 176710, 062701, 000004, 010311, 012707 .word 173100, 042122, 173172, 010704, 001316, 012701, 176700, 012761 .word 000040, 000010, 012706, 173556, 001347, 042130, 173244, 010704 .word 001302, 012701, 177170, 012703, 000007, 042704, 177776, 001402 .word 012703, 000027, 011102, 042702, 077737, 001774, 010311, 012706 .word 173002, 001322, 042115, 173350, 010704, 001255, 012701, 177440 .word 010461, 000010, 012711, 000003, 012702, 000021, 011104, 042704 .word 177577, 001774, 011104, 042704, 077777, 001674, 016104, 000014 .word 042704, 177737, 001551, 000005, 012706, 173476, 001265, 042703 .word 000004, 010337, 177170, 001055, 042131, 173536, 010704, 001310 .word 060404, 000005, 010101, 010101, 012700, 000001, 040202, 012705 .word 000100, 012706, 000400, 040306, 001401, 060505, 016403, 173014 .word 060603, 010706, 001346, 001022, 001016, 001341, 001035, 001010 .word 060502, 060502, 062700, 000002, 022700, 000011, 001357, 040707 .word 010237, 177172, 001006, 012701, 000001, 001001, 010401, 010137 .word 177172, 013701, 177170, 042701, 077537, 001773, 042701, 000240 .word 001320, 062706, 000002, 010607, 010537, 177172, 001362, 046524 .word 173560, 010704, 001215, 012701, 172520, 012706, 173164, 001046 .word 046515, 173702, 010704, 001204, 012701, 172440, 012706, 173336 .word 001035, 177777, 177777, 177777, 013720, 177570, 014004, 005110 .word 011003, 000772, 013710, 177570, 105111, 011004, 000773, 010220 .word 113711, 177570, 014004, 000773, 000005, 012737, 000100, 173024 .word 060303, 060303, 060303, 060303, 060303, 010507, 012737, 000100 .word 173024, 050122, 173724, 040000, 040000, 010101, 010101, 012737 .word 000200, 173024, 051515, 000000, 010704, 001304, 012706, 173524 .word 001355, 062704, 000004, 012737, 000300, 173024, 012704, 173020 .word 022402, 001767, 012404, 001374, 012737, 000300, 173024, 001325 .endc ;_______________________________________________________________________ ; .end