- Нет, не прочитает...
Вид для печати
Если после нажатия "P" лента не читается - значит всё идёт в рамках ранее определённой нами логики контроллера: нет бита 200 в регистре 176732 - значит первый код команды чтения ( 33407 ) контроллером не выполнен.
Теперь нужно понять, почему контроллер не выполняет первый код команды чтения.
В драйвере ПЗУ - команды
Mov #33407,@#176732
Mov #1,@#176730
идут прямо друг за другом.
Поэтому здесь большая задержка точно не нужна.
Возможно, как-то "мешается" предыдущее непрочитанное значение в 176732. И из-за этого код команды с первого раза не проходит.
Чтобы это проверить - предлагаю повторить прогон ещё раз. При этом - после останова по адресу 01060:
1. Открыть 176732
2. Открыть 176730
3. Записать 1 в 176730
Подождать пару секунд.
4. Открыть 176732
5. Нажать "P"
Идея в том, чтобы проверить, установится ли бит 0200 в регистре 176732 после ручной записи "1" в регистр 176730.
Сейчас проверю..
---------- Post added at 01:38 ---------- Previous post was at 01:23 ----------
@
@1000G 001060
@176732/000066
@176730/000040 1 (Прочитал ленту)
@176732/000200
@
@20000/000000
@P 001122
@20000/000001
020002/000666
020004/000666
@
Теперь слегка модифицируем нашу программу, чтобы подавать первый код команды вручную.
После запуска программа выполнит останов по адресу 01030, после чего нужно вручную:Код:001000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000000
001026/012713 / 000
001030/000007 / 240
001032/012712 / 240
001034/000001 / 240
001036/032712
001040/000040
001042/001775
001044/032712
001046/000010
001050/001406
001052/111304
001054/100401
001056/000000
001060/006204
1. Записать "7" в регистр 176732
2. Записать "1" в регистр 176730
3. Нажать "P"
@
@1000G 001030
@176732/000066 7
@176730/000040 1 (Прочитал ленту)
@P 001122
@20000/000001
020002/000666
020004/000666
@
Значит, есть только два варианта "улучшения" нашей реализации алгоритма чтения:
1. Читать 176732 перед записью.
2. Вставить для задержки пару команд типа Cmp @#0,@#0 между записью 7 в 176732 и 1 в 176730.
Для проверки каждого из вариантов нужен свой вариант программы.
Сделаю их завтра :)
Хорошо, спасибо!
Вот новая версия программы:
Кстати, вполне возможно, что после чтения блока ленты в буфер контроллера командой "7" - содержимое буфера можно читать в компьютер командой "2" больше одного раза.Код:
.NList SEQ, LOC
TPS =: 176730
TPD =: 176732
Buffer =: 20000
Start:
Clr R0 ; 005000
Mov #Buffer, R1 ; 012701
; 020000
Mov #TPS, R2 ; 012702
; 176730
Mov #TPD, R3 ; 012703
; 176732
BiT #40, (R2) ; 032712
; 000040
BNE 1$ ; 001001
Halt ; 000000
1$:
MovB (R3), R4 ; 111304
Cmp @#240,@#240 ; 023737
; 000240
; 000240
Mov #7, (R3) ; 012713
; 000007
Cmp @#240,@#240 ; 023737
; 000240
; 000240
Mov #1, (R2) ; 012712
; 000001
2$:
BiT #40, (R2) ; 032712
; 000040
BEq 2$ ; 001775
BiT #10, (R2) ; 032712
; 000010
BEq 7$ ; 001406
MovB (R3), R4 ; 111304
BMi 6$ ; 100401
Halt ; 000000
6$:
ASR R4 ; 006204
BCC 7$ ; 103001
Halt ; 000000
7$:
Mov #2, (R3) ; 012713
; 000002
Mov #1, (R2) ; 012712
; 000001
4$:
BiT #60, (R2) ; 032712
; 000060
BNE 3$ ; 001006
BiT #10, (R2) ; 032712
; 000010
BEq 4$ ; 001772
MovB (R3), (R1)+ ; 111321
Inc R0 ; 005200
Br 4$ ; 000767
3$:
Halt ; 000000
.End Start
;
Это тоже нужно будет проверить.
...
В настоящее время нам известны следующие коды команд:
Код:00 - сброс контроллера (?)
01 - ...
02 - чтение буфера контроллера
03 - перемотка ленты на начало
04 - запись маркера "Tape Mark"
05 - ...
06 - ...
07 - чтение блока ленты в буфер
10 - перемотка ленты на файл назад
11 - перемотка ленты на файл вперёд
12 - перемотка ленты на блок назад
13 - перемотка ленты на блок вперёд
Похоже, что при записи всех магнитных лент такого типа используется общий формат файлов, описанный в стандарте ANSI Standard X3.27–1978, File Structure and Labeling of Magnetic Tapes for Information Interchange.
Операционные системы фирмы DEC используют подмножество этого стандарта с ограничением на размер блока в 512 байт.
Код:ВСЯ ИНФОРМАЦИЯ НА МАГНИТНОЙ ЛЕНТЕ РАСПОЛОЖЕНА В ЛОГИ-
ЧЕСКИХ БЛОКАХ.
МАГНИТНАЯ ЛЕНТА В СИСТЕМЕ ИМЕЕТ СТАНДАРТНЫЙ НАБОР
МЕТОК, КОТОРЫЙ НЕОБХОДИМ ДЛЯ УПРАВЛЕНИЯ ДАННЫМИ. В МЕТКАХ
НАХОДИТСЯ ИНФОРМАЦИЯ, ИСПОЛЬЗУЕМАЯ ДЛЯ КОНТРОЛЯ. НАПРИМЕР,
В МЕТКЕ МОЖЕТ СОДЕРЖАТЬСЯ ЧИСЛО БЛОКОВ В ФАЙЛЕ. ПОСЛЕ РАБО-
ТЫ С ФАЙЛОМ МОЖЕТ БЫТЬ ПРОИЗВЕДЕНА ПРОВЕРКА КОЛИЧЕСТВА
ИМЕЮЩИХСЯ В ФАЙЛЕ БЛОКОВ С УКАЗАННЫМ В МЕТКЕ. НЕСОВПАДЕНИЕ
ЭТИХ ДВУХ ЗНАЧЕНИЙ В НЕКОТОРЫХ СЛУЧАЯХ УКАЗЫВАЕТ НА ОШИБКУ
ПРИ ОБРАБОТКЕ ФАЙЛА.
СТАНДАРТНЫЕ МЕТКИ:
МЕТКА ТОМА (VOL1)
- МАГНИТНАЯ ЛЕНТА В СИСТЕМЕ ИМЕЕТ ТОЛЬКО ОДИН ТОМ;
НЕ ИСПОЛЬЗУЕТСЯ МЕТКА КОНЦА ТОМА EOV, ПОЭТОМУ
НЕЛЬЗЯ РАСПОЛАГАТЬ ФАЙЛ НА ДВУХ ЛЕНТАХ;
ЛЕНТОЧНЫЙ МАРКЕР (*)
- МЕТКИ ОТ ДАННЫХ ОТДЕЛЯЮТСЯ ЛЕНТОЧНЫМ МАРКЕРОМ; ДВА
ЛЕНТОЧНЫХ МАРКЕРА ОЗНАЧАЮТ ЛОГИЧЕСКИЙ КОНЕЦ ЛЕНТЫ;
МЕТКА НАЧАЛА ФАЙЛА (HDR1)
- МЕТКА СОДЕРЖИТ ВСЮ НЕОБХОДИМУЮ ИНФОРМАЦИЮ О ФАЙЛЕ,
ЗА ИСКЛЮЧЕНИЕМ ДЛИНЫ ФАЙЛА; ДЛИНА ФАЙЛА РАВНА 0;
МЕТКА КОНЦА ФАЙЛА (EOF1)
- МЕТКА ПОЛНОСТЬЮ ПОВТОРЯЕТ ИНФОРМАЦИЮ, СОДЕРЖАЩУЮСЯ
В МЕТКЕ HDR1, ЗА ИСКЛЮЧЕНИЕМ ДЛИНЫ ФАЙЛА; ДЛИНА
РАВНА ЧИСЛУ БЛОКОВ ДАННЫХ;
МЕЖБЛОЧНЫЙ ПРОМЕЖУТОК
- СЛУЖЕБНАЯ ЗАПИСЬ, РАЗДЕЛЯЮЩАЯ БЛОКИ ДАННЫХ МЕЖДУ
СОБОЙ; НЕОБХОДИМА ДЛЯ РАЗГОНА И ОСТАНОВА БОБИНЫ
МАГНИТНОЙ ЛЕНТЫ ПРИ СЧИТЫВАНИИ ИЛИ ЗАПИСИ ИНФОРМА-
ЦИИ.
СИСТЕМНЫЕ ПРОГРАММЫ DIR, DUP, PIP И Т.Д. ОСУЩЕСТВЛЯЮТ
ЗАПИСЬ НА ЛЕНТУ ИЛИ СЧИТЫВАНИЕ ПОБЛОЧНО, Т.Е. ЗАПИСЯМИ ПО
512 БАЙТ.
ФАЙЛ, СОЗДАННЫЙ НА МАГНИТНОЙ ЛЕНТЕ, ИМЕЕТ ВИД:
HDR1 * ДАННЫЕ * EOF1 *
ТОМ, СОДЕРЖАЩИЙ ОДИН ФАЙЛ, ИМЕЕТ ФОРМАТ:
VOL1 HDR1 * ДАННЫЕ * EOF1 * * *
ТОМ, СОДЕРЖАЩИЙ ДВА ФАЙЛА, ИМЕЕТ ФОРМАТ:
VOL1 HDR1 * ДАННЫЕ * EOF1 * HDR1 * ДАННЫЕ * EOF1 * * *
МАГНИТНАЯ ЛЕНТА, КОТОРАЯ БЫЛА ИНИЦИАЛИЗИРОВАНА, ИМЕЕТ
СЛЕДУЮЩИЙ ФОРМАТ:
VOL1 HDR1 * * EOF1 * * *
НАЧАЛЬНЫЙ ЗАГРУЗЧИК МАГНИТНОЙ ЛЕНТЫ ТОМА ИМЕЕТ ФОРМАТ:
VOL1 МBOOT HDR1 * ДАННЫЕ * EOF1 * * *
ПРИ СОЗДАНИИ ЗАГРУЗЧИКА НА МАГНИТНОЙ ЛЕНТЕ ФАЙЛ
MBOOT.BOT (ПЕРВИЧНЫЙ ЗАГРУЗЧИК) ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ ДЛЯ
КОПИРОВАНИЯ ВТОРИЧНОГО ЗАГРУЗЧИКА МАГНИТНОЙ ЛЕНТЫ. ПЕРВЫЙ
ФАЙЛ, КОТОРЫЙ ДОЛЖЕН БЫТЬ ЗАПИСАН ПОСЛЕ ПЕРВИЧНОГО ЗАГРУЗ-
ЧИКА (МBOOT), ЭТО MSBOOT.BOT, КОТОРЫЙ СОДЕРЖИТ ВТОРИЧНЫЙ
ЗАГРУЗЧИК МАГНИТНОЙ ЛЕНТЫ. ПЕРВИЧНЫЙ ЗАГРУЗЧИК ЗАНИМАЕТ
ОДИН БЛОК (512 БАЙТОВ).
КАЖДАЯ МЕТКА НА МАГНИТНОЙ ЛЕНТЕ ИСПОЛЬЗУЕТ ТОЛЬКО ПЕР-
ВЫЕ 80 БАЙТОВ (ИЗ ЗАНИМАЕМЫХ 512 БАЙТОВ), И КАЖДЫЙ БАЙТ В
МЕТКЕ СОДЕРЖИТ ИНФОРМАЦИЮ В СИМВОЛЬНОМ КОДЕ. ИНФОРМАЦИЯ,
СОДЕРЖАЩАЯСЯ В МЕТКЕ ТОМА, ПРЕДСТАВЛЕНА В ТАБЛ. 9.
ТАБЛИЦА 9
ФОРМАТ МЕТКИ ТОМА (VOL1)
-------------------------------------------------------
! !ДЛИНА ! ЗНАЧЕНИЕ ПОЛЯ
ПОЗИЦИЯ !ИМЯ ПОЛЯ!ПОЛЯ, ! (ПО УМОЛЧАНИЮ ЗАПИСЫВАЕТСЯ
ПОЛЯ ! !БАЙТЫ ! В КОДЕ КОИ-7)
-------------------------------------------------------
!ИДЕНТИ- ! 3 !
!ФИКАТОР ! !
1 - 3 ! (ID) ! ! VOL
! МЕТКИ ! !
----------!--------!------!----------------------------
4 ! НОМЕР ! 1 ! 1
! МЕТКИ ! !
----------!--------!------!----------------------------
! ! ! RAFOS, ЗА КОТОРЫМ СЛЕДУЕТ
5 - 10 ! ID ТОМА! 6 ! ОДИН ПРОБЕЛ (МЕТКА ТОМА),
! ! ! ЕСЛИ НЕТ, ТО ID ТОМА
----------!--------!------!----------------------------
11 ! ! 1 ! ПРОБЕЛ
----------!--------!------!----------------------------
! НЕ ! !
12 - 37 ! ИСПОЛЬ-! 26 ! ПРОБЕЛЫ
! ЗУЕТСЯ ! !
----------!--------!------!----------------------------
38 - 50 !ID ПОЛЬ-! 13 ! С 38 ПО 40 ID D&B;
!ЗОВАТЕЛЯ! ! С 41 ПО 50 ID ПОЛЬЗОВАТЕЛЯ
! ! ! ИЛИ ПРОБЕЛЫ
----------!--------!------!----------------------------
!СТАНДАР-! !
51 ! ТНАЯ ! 1 ! 1
! ВЕРСИЯ ! !
! СИСТЕМЫ! !
----------!--------!------!----------------------------
! НЕ ! !
52 - 79 !ИСПОЛЬ- ! 28 ! ПРОБЕЛЫ
! ЗУЕТСЯ ! !
----------!--------!------!----------------------------
!СТАНДАР-! !
80 ! ТНАЯ ! 1 ! 3
! ВЕРСИЯ ! !
! МЕТКИ ! !
ИНФОРМАЦИЯ, СОДЕРЖАЩАЯСЯ В МЕТКЕ ФАЙЛА, ПРЕДСТАВЛЕНА В
ТАБЛ. 10.
ТАБЛИЦА 10
ФОРМАТ МЕТКИ ФАЙЛА (HDR1)
-------------------------------------------------------
! !ДЛИНА ! ЗНАЧЕНИЕ ПОЛЯ
ПОЗИЦИЯ !ИМЯ ПОЛЯ !ПОЛЯ, !(ПО УМОЛЧАНИЮ ЗАПИСЫВАЕТСЯ
ПОЛЯ ! !БАЙТЫ ! В КОДЕ КОИ-7)
-------------------------------------------------------
1 - 3 !ID МЕТКИ ! 3 ! HDR
----------!---------!------!---------------------------
4 ! НОМЕР ! 1 ! 1
! МЕТКИ ! !
----------!---------!------!---------------------------
5 - 21 !ID ФАЙЛА ! 17 ! ИМЯ, РАЗДЕЛИТЕЛЬ (".")
! ! ! И ТИП
----------!---------!------!---------------------------
22 - 27 !ID ЗАПИСИ! 6 ! RAFOS, ЗА КОТОРЫМ СЛЕДУЕТ
! ФАЙЛА ! ! ОДИН ПРОБЕЛ
----------!---------!------!---------------------------
! НОМЕР ! !
28 - 31 ! СЕКЦИИ ! 4 ! 0001
! ФАЙЛА ! ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
!ПОРЯДКО- ! ! ПЕРВЫЙ ФАЙЛ ИМЕЕТ НОМЕР
32 - 35 !ВЫЙ НОМЕР! 4 ! 0001; НОМЕР СЛЕДУЮЩЕГО
! ФАЙЛА ! ! ФАЙЛА УВЕЛИЧИВАЕТСЯ НА 1;
! ! ! ПОСЛЕ ИНИЦИАЛИЗАЦИИ ЛЕНТЫ
! ! ! ЕГО ЗНАЧЕНИЕ РАВНО 0000
! ! ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
! НОМЕР ! ! 0001
36 - 39 !ГЕНЕРАЦИИ! 4 ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
! ВЕРСИЯ ! ! 00
40 - 41 !ГЕНЕРАЦИИ! 2 ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
! ДАТА ! ! ПРОБЕЛ, ЗА КОТОРЫМ СЛЕДУ-
42 - 47 !СОЗДАНИЯ ! 6 ! ЕТ (ГОД * 1000 + ДЕНЬ)
----------!---------!------!---------------------------
! ДАТА ! ! ПРОБЕЛ, ЗА КОТОРЫМ СЛЕДУЮТ
48 - 53 !ОКОНЧАНИЯ! 6 ! ПЯТЬ НУЛЕЙ
----------!---------!------!---------------------------
54 ! МЕТОД ! 1 ! ПРОБЕЛ
! ДОСТУПА ! !
----------!---------!------!---------------------------
55 - 60 ! СЧЕТЧИК ! 6 ! 000000
! БЛОКОВ ! ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
61 - 73 ! КОД ! 13 ! INERAFOS
! СИСТЕМЫ ! !
----------!---------!------!---------------------------
! НЕ ! !
74 - 80 ! ИСПОЛЬ- ! 7 ! ПРОБЕЛЫ
! ЗУЕТСЯ ! !
ПРИМЕЧАНИЕ. ДАТА СОЗДАНИЯ (DAT) ЗАПОМИНАЕТСЯ СЛЕДУЮЩИМ
ОБРАЗОМ:
DAT = Г * 1000 + Д (4.4)
ГДЕ
Г - ГОД;
Д - КОЛИЧЕСТВО ДНЕЙ ОТ НАЧАЛА ГОДА.
НАПРИМЕР, ДАТА 5.05.83. БУДЕТ ПРЕДСТАВЛЕНА В ВИДЕ
83 * 1000 + (31 + 28 + 31 + 30 + 5) = 83125
ЕСЛИ ДАТА ОТСУТСТВУЕТ, ТО ДАННЫЕ ПОЗИЦИИ ЗАПОЛНЯЮТСЯ НУЛЯМИ
(ПРИЧЕМ, ПЕРВЫМ СТОИТ ОДИН ПРОБЕЛ, ЗА КОТОРЫМ СЛЕДУЮТ ПЯТЬ
НУЛЕЙ).
МЕТКА КОНЦА ФАЙЛА (EOF1) ТОЧНО ТАКАЯ ЖЕ, КАК И МЕТКА
НАЧАЛА ФАЙЛА (HDR1), ЗА ИСКЛЮЧЕНИЕМ НЕСКОЛЬКИХ БАЙТОВ,
КОТОРЫЕ УКАЗАНЫ В ТАБЛ. 11.
ТАБЛИЦА 11
СТРУКТУРА МЕТКИ КОНЦА ФАЙЛА (EOF1)
-------------------------------------------------------
! !ДЛИНА ! ЗНАЧЕНИЕ ПОЛЯ
ПОЗИЦИЯ !ИМЯ ПОЛЯ!ПОЛЯ, ! (ПО УМОЛЧАНИЮ ЗАПИСЫВАЕТСЯ
ПОЛЯ ! !БАЙТЫ ! В КОДЕ КОИ-7)
-------------------------------------------------------
1 - 3 !ID МЕТКИ! 3 ! EOF
----------!--------!------!----------------------------
! ! !КОЛИЧЕСТВО БЛОКОВ ДАННЫХ,
! ! !СОДЕРЖАЩИХСЯ В ФАЙЛЕ (ЕСЛИ
55 - 60 ! СЧЕТЧИК! 6 !ФАЙЛ НЕ СОЗДАН МАКРОКОМАНДОЙ
! БЛОКОВ ! !.SPFUN); ПРИ СОЗДАНИИ ФАЙЛА
! ! !МАКРОКОМАНДОЙ .SPFUN СЧЕТЧИК
! ! !РАВЕН НУЛЮ; ЕСЛИ .SPFUN ПРИ
! ! !ЗАПИСИ ИСПОЛЬЗУЕТ БЛОКИ ПО
! ! !256 (ДЕСЯТИЧНОЕ) СЛОВ, ТО
! ! !СЧЕТЧИК БЛОКОВ УСТАНАВЛИВА-
! ! !ЕТСЯ КАК ОБЫЧНО
Magtape Label and Header Formats:
Note that the 000007 in the EOF1 label indicates that there are 7 data blocks in the DATA AREA.Код:*** MTFMGR: DB MU0:, 256. Words, (Base 8) ***
047526 030514 052122 030461 020101 020040 020040 020040 *VOL1RT11A *
020040 020040 020040 020040 020040 020040 020040 020040 * *
020040 020040 042040 041045 020040 020040 020040 020040 * D%B *
020040 020061 020040 020040 020040 020040 020040 020040 * 1 *
020040 020040 020040 020040 020040 020040 020040 031440 * 3*
*** MTFMGR: DB MU0:, 256. Words, (Base 8) ***
042110 030522 042532 047522 042105 055056 055132 020040 *HDR1FILE.DAT *
020040 020040 051040 030524 040461 030040 030060 030061 * RT11A 00010 *
030060 030060 030060 030061 020060 030060 030060 020060 *001000100 00000 *
030060 030060 020060 030060 030060 030060 042504 051103 *00000 000000DECR*
030524 040461 020040 020040 020040 020040 020040 020040 *T11A *
** Tape Mark **
DATA AREA - 256-word fixed-length blocks. These blocks are exactly
the same as the disk files that they represent.
** Tape Mark **
*** MTFMGR: DB MU0:, 256. Words, (Base 8) ***
047505 030506 042532 047522 042105 055056 055132 020040 *EOF1FILE.DAT *
020040 020040 051040 030524 040461 030040 030060 030061 * RT11A 00010 *
030060 030060 030060 030061 020060 030060 030060 020060 *001000100 00000 *
030060 030060 020060 030060 030060 030060 042504 051103 *00000 000007DECR*
030524 040461 020040 020040 020040 020040 020040 020040 *T11A *
** Tape Mark **
** Tape Mark **
** Tape Mark **