-
Про запись мы пока ничего не знаем, а чтение можно выполнять точно так же, как это делает ПЗУ:
1. Подать коды 033407 + 02
2. Ожидать установки битов 040|010 в регистре 176730
3. Если бит 010 регистра 176730 установлен - регистр 176732 содержит очередной байт данных, который нужно скопировать в буфер.
4. Если бит 040 регистра 176730 сброшен - перейти к п.2
-
А можно все это изобразить в виде маленькой программки?
---------- Post added at 06:01 ---------- Previous post was at 05:59 ----------
А то не совсем понятно, когда можно начинать чтение, что произойдет когда данные с ленты не поместятся в буфер контроллера, и как проверить правильно ли он прочитал данные, да и как он поступает с блоками, ведь они могут иметь разный размер...
-
1. Процесс можно начинать, когда в регистре 176730 установлен бит 040 . Если этот бит не установлен - выполнить команду RESET.
2. Фаза подачи команды ранее уже была досконально расписана и выполнена вручную.
3. Похоже, что данные с ленты "не слишком" буферизуются контроллером - если не успеть прочитать очередной байт данных - он скорее всего пропадёт.
4. Думаю, что при аварийном завершении - устанавливается бит 020 регистра 176730 ( кроме того, установка этого бита драйвером - прекращает процедуру чтения ленты контроллером ).
5. Блоки могут иметь любой размер - контроллер передаёт данные побайтно до тех пор, пока (как я полагаю) накопитель не наткнётся на метку конца блока.
-
@176730/000054
176732/000066
@176730/000044
176732/000066
@176730/000044
176732/000066 7
@176730/000040 1
Прочитал кусочек ленты.
@176730/000054
176732/000200 2
@176730/000040 1
@176730/000014
176732/000240 (240 - Начало загрузчика с системной ленты)
176734/
BUS ERROR
@176730/000014
176732/000000
176734/
BUS ERROR
@176730/000014
176732/000015
176734/
BUS ERROR
@176730/000014
176732/000001
176734/
BUS ERROR
-
Вот так может выглядеть программка, читающая блок с ленты в буфер по адресу 020000:
Код:
TPS =: 176730
TPD =: 176732
Buffer =: 20000
Mov #Buffer, R1
Clr R0
BiT #40, @#TPS
BNE 1$
Reset
1$:
Mov #33407, @#TPD
Mov #1, @#TPS
2$:
Cmp #54, @#TPS
BNE 2$
Mov #2, @#TPD
Tst @#TPD
Mov #1, @#TPS
4$:
BiT #40, @#TPS
BNE 3$
BiT #10, @#TPS
BEq 4$
MovB @#TPD, (R1)+
Inc R0
Br 4$
3$:
BiT #10, @#TPS
BEq 5$
MovB @#TPD, (R1)+
Inc R0
5$:
Halt
После завершения - R0 содержит число байт, записанных в память, начиная с адреса 020000 .
-
А можно пожалуйста в кодах тоже, а то замучаюсь переводить...
-
Код:
005000 Clr R0
012701 Mov #Buffer, R1
020000
012702 Mov #TPS, R2
176730
012703 Mov #TPD, R3
176732
032712 BiT #40, (R2)
000040
001001 BNE 1$
000005 Reset
1$:
012713 Mov #33407, (R3)
033407
012712 Mov #1, (R2)
000001
2$:
022712 Cmp #54, (R2)
000054
001375 BNE 2$
012713 Mov #2, (R3)
000002
005713 Tst (R3)
012712 Mov #1, (R2)
000001
4$:
032712 BiT #40, (R2)
000040
001006 BNE 3$
032712 BiT #10, (R2)
000010
001772 BEq 4$
111321 MovB (R3), (R1)+
005200 Inc R0
000767 Br 4$
3$:
032712 BiT #10, (R2)
000010
001402 BEq 5$
111321 MovB (R3), (R1)+
005200 Inc R0
5$:
000000 Halt
-
Я вот думаю, может выпаять ПЗУ из контроллера и считать его?
---------- Post added at 16:57 ---------- Previous post was at 16:44 ----------
Сегодня вечером попробую...
-
Попробовал, программка вешается на коде
022712 Cmp #54, (R2)
000054
001375 BNE 2$
---------- Post added at 23:47 ---------- Previous post was at 23:41 ----------
@1000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000005
001026/012713
001030/033407
001032/012712
001034/000001
001036/022712
001040/000054
001042/001375
001044/012713
001046/000002
001050/005713
001052/012712
001054/000001
001056/032712
001060/000040
001062/001006
001064/032712
001066/000010
001070/001772
001072/111321
001074/005200
001076/000767
001100/032712
001102/000010
001104/001402
001106/111321
001110/005200
001112/000000
@
@1000G 'Висит, делаю останов' 001042
@
-
Прервав программу - нужно проверить содержимое регистра 176730.
Программа ждёт, когда там появится 054, а что там на самом деле ?