Я скорее не правильно выразился, имел в виду именно задействование двух процессов под обсчет задач, наверное многопоточность, или скорее многоядерность. )
- - - Добавлено - - -
Я предполагал что их таки куда то закидывает подпрограмма, на которую указывает вектор в ячейке 340 (2 канал использую).
Я пытаюсь дизасембдлировать программу virus-4, и даже дизассемблировать у меня ее получилось, она компилится, а вот понять как работает пока не получается, все таки в случае с УКНЦ нужно строить в голове сразу две независимые машины, чтобы понять как работает программа под сразу два МП. Пока с этим туго, и даже отладчик пока что не сильно прояснил некоторые моменты.
В целом вот код программы:
Скрытый текст
.LIST ME
.TITLE V6
START: MOV #D1, R1
CALL T2
CMP D2, #65
BNE T0
MOV D3, R1
MOV R1, D5
MOV #D4, R1
CALL T2
MOVB #30, D6
MOV #D1, R1
CALL T2
MOV #D7, R0
BR T1
T0: MOV #D0, R0
T1: EMT 351
EMT 350
;------------------------------------------
T2: TSTB @#176674
BPL T2
MOVB R1, @#176676
SWAB R1
COM #0
BNE T2
COM R1
COM #0
BNE T2
T3: TSTB @#176674
BPL T3
RETURN
;------------------------------------------
; Далее - Массив Параметров для общения с ПП, текстовые сообщения для режима когда не хватает памяти ПП и сообщение для нормального запуска, и переносимые в память ПП (массив байт) и текст программы, который переносится в память ПП, запускается там, настраиает вектор прерывания так, чтобы от системного таймера запускался этот код, а потом передавал управление обработчику прерывания системного таймера, и этот код работает с таблицей строк и экранной памятью...
D1: .BYTE 00 ;\
; } 400 (WORD)
D6: .BYTE 01 ;/
T4: .WORD 32
D3: .WORD 0
D2: .WORD 65
D4: .WORD 10000
.WORD 32
D5: .WORD 0
.BYTE 252
.BYTE 02
.WORD 65
D0: .BYTE 16
.BYTE 156 ;n ;1162
.BYTE 105 ;E ;1163
.BYTE 124 ;T ;1164
.BYTE 40 ;_ ;1165
.BYTE 123 ;S ;1166
.BYTE 127 ;W ;1167
.BYTE 117 ;O ;1170
.BYTE 102 ;B ;1171
.BYTE 117 ;O ;1172
.BYTE 104 ;D ;1173
.BYTE 116 ;N ;1174
.BYTE 117 ;O ;1175
.BYTE 112 ;J ;1176
.BYTE 40 ;_ ;1177
.BYTE 120 ;P ;1200
.BYTE 101 ;A ;1201
.BYTE 115 ;M ;1202
.BYTE 121 ;Q ;1203
.BYTE 124 ;T ;1204
.BYTE 111 ;I ;1205
.BYTE 40 ;_ ;1206
.BYTE 127 ;W ;1207
.BYTE 40 ;_ ;1210
.BYTE 160 ;p ;1211
.BYTE 160 ;p ;1212
.BYTE 17 ; ;1213
.BYTE 0 ; ;1214
D7: .BYTE 11 ; ;1215
.BYTE 50 ; ( ;1216
.BYTE 103 ; C ;1217
.BYTE 51 ; ( ;1220
.BYTE 40 ;_ ;1221
.BYTE 105 ;E ;1222
.BYTE 154 ;l ;1223
.BYTE 151 ;i ;1224
.BYTE 164 ;t ;1225
.BYTE 145 ;e ;1226
.BYTE 40 ;_ ;1227
.BYTE 117 ;O ;1231
.BYTE 103 ;C ;1232
.BYTE 124 ;T ;1233
.BYTE 55 ;- ;1234
.BYTE 71 ;9 ;1235
.BYTE 64 ;4 ;1236
.BYTE 54 ;, ;1237
.BYTE 11 ; ;1240
.BYTE 16 ; ;1241
.BYTE 167 ; w ;1242
.BYTE 111 ; I ;1243
.BYTE 122 ; R ;1244
.BYTE 125 ; U ;1245
.BYTE 123 ; S ;1246
.BYTE 55 ;- ;1247
.BYTE 64 ;4 ;1250
.BYTE 17 ; 0F ;1251
.WORD 0
D8: MOV @#100, 1422 ;1252,1254, 1256
MOV PC, -(SP) ;1260
ADD #12, @SP ;1262,1264
MOV (SP)+, @#100
RETURN
DEC #144
BPL T5
MOV R0, -(SP)
MOV R2, -(SP)
CMP #10534, @#7214
BNE T6
MOV #1750, 1276
BR T7
T6: MOV #0, 1276
MOV #2500, R0
CMP @R0, #100117
BGE T7
T8: INC (R0)+
TST (R0)+
DEC (R0)+
TST (R0)+
CMP R0, #4664
BLE T8
BR T9
T7: MOV #2500, R0
MOV #100000, R2
T10: MOV R2, (R0)+
ADD #120, R2
TST (R0)+
CMP R0, #4664
BLE T10
T9: MOV (SP)+, R2
MOV (SP)+, R0
T5: JMP @#174612
.END 1000
[свернуть]
Код до RETERN - работает в ЦП, по большому счету он должен скопировать все что нудно в ПП, выдать сообщение, или о программе, ии о нехватке памяти ПП - в случае неудачной передачи, и завершить программу. Далее работает кусок в ПП, по идее. Программа завершается, и ее место занимает код файлового менеджера PC который я использую. Далее - работает походу нижний кусок кода, но как и главное куда он попадает в ПП - я понять не могу. Прокручивал всю программу несколько раз в отладчике, передается несколько байт в ПП,... Возможно конечно, это я думаю что несколько байт, а ПП - просто по каким то алгоритмам сам переносит весь код независимо от ЦП,.. Или что то еще. В общем, пока этот момент не понятен. Программа меняет "строчность" таблицы строк видеоадаптера,....
Может кто то уже разбирался с этим кодом, и подскажет как это работает..
- - - Добавлено - - -
В последней строчке нижней части кода ссыль на подпрограмму обработки прерываний от сетевого таймера в ПЗУ....
- - - Добавлено - - -
В обшем, вопросов пока три:
1.как нижняя часть кода попадает в ПП,.
2.По каким адресам она туда попадает, и кто ответственный за ее попадание по определенным адресам,.
3. Кто и как передает управление этому куску кода на стороне ПП...
- - - Добавлено - - -
Кстати, да будут благословленны создатели UKNCBTL !!! И да прибудет с ними сила !!! Низкие поклоны им и плюсы к карме !!!
Последний раз редактировалось electroscat; 14.07.2022 в 00:31.
Сейчас в коллекции:
Вектор 06Ц.01(Минск), Вектор 06Ц.01(Волжский), Вектор 06Ц.02(Кишенев), Агат 7, Агат 9, Электроника 0511 УКНЦ (СЭМЗ), Электроника 0511 УКНЦ (КВАНТ) Х2, Поиск-1.03 (VGA),Электроника БК-0011(10,11M) [3IN1], Корвет ПК8010, Партнер 01.01, Спектр-001, БАЙТ(БПО_СВТ), Волна 48, Ленинград 48, Веста 30, Компакт 256(новодел),
и ... Pentium 200 mmx, 386SX-16, AMD K6-300 ...
На сайте emuverse.ru в разделе УКНЦ есть ссылка на сайт с отсканированной документацией. Там есть документ Книга 2 Часть 2. Программное обеспечение комплекса вычислительного учебного Электроника МС 0202 (Электроника МС 0511 УКНЦ). И вот в этом документе есть раздел Работа с внешними устройствами. Там и описано как работать с каналом К2.
electroscat (12.07.2022)
Вроде начинаю понимать, кажется ЦП передает ПП массив параметров в программу обработки прерывания, и далее, ПП сам вычитывает по массиву параметров все что нужно, и запускаеит. Ну или типа того ))) Теперь нужно с параметрами разобраться )
Сейчас в коллекции:
Вектор 06Ц.01(Минск), Вектор 06Ц.01(Волжский), Вектор 06Ц.02(Кишенев), Агат 7, Агат 9, Электроника 0511 УКНЦ (СЭМЗ), Электроника 0511 УКНЦ (КВАНТ) Х2, Поиск-1.03 (VGA),Электроника БК-0011(10,11M) [3IN1], Корвет ПК8010, Партнер 01.01, Спектр-001, БАЙТ(БПО_СВТ), Волна 48, Ленинград 48, Веста 30, Компакт 256(новодел),
и ... Pentium 200 mmx, 386SX-16, AMD K6-300 ...
И ещё, чтобы программа работала - надо либо знать адреса, куда попадает , либо писать в позиционно-независимым кодом.
Нечто подобное происходит при программировании КЦГД. Только у УКНЦ каналов связи между процессорами несколько и они шире, а у КЦГД - один последовательный порт.
В ПП есть диспетчер в который можно встроить свою пп. Либо выполнить одноразово и освободить память. Адреса ты не знаешь поэтому код должен быть перемещаемый. В доках все написано вплоть до ячеек где, что лежит.. В ПП.. Если сам захочешь памятью рулить. Из ЦП по каналу передаешь блок в ПП и все.. Можешь зациклить в диспетчере выполнение соей пп.
- - - Добавлено - - -
Почитай журналы пк укнц.. ЕМНИП...В каком-то очень четко расписано как работать с диспетчером пп.
БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO
electroscat (13.07.2022)
Правильно понимаете. Массив параметров расположен в памяти ЦП, а через канал 2 передаётся адрес этого массива и два байта запуска. А для запуска своей подпрограммы в ПП сначала надо запросить память нужного объёма (устройство 32, код 1). Если запрос памяти прошёл успешно, то переписать подпрограмму из памяти ЦП в память ПП(устройство 32, код 20). Ну и потом её естественно запустить(устройство 32, код 30). Если после исполнения подпрограммы она больше не нужна, то надо освободить память в ПП (устройство 32, код 2).
electroscat (13.07.2022)
Да, благодарю, доки помогли. В вышеуказанном листинге есть область начиная с D1: и заканчивая .WORD 65 - вот это как раз и есть Массив Параметров. К нему три раза обращается код, первый раз для освобождения памяти - ПП передает сюда же начальный адресс и количество байт, если оно меньше запрошенного. Второй раз следующая часть массива работает, уже с запросом 20 - копирование, там же указывается адресс, который дает ПП на начальный адресс освобожденного места, начальный адресс места размещения переносимого фрагмента в памяти ЦП, и количество слов. Ну и последннее обращение происходит после того как код в ЦП правит массив, вписывая команду запуска вместо команды выделить память, и послеэтого программа в ЦП закрывается, а в ПП ... далее буду разбираться..
Скрытый текст
Вот в целом три МП адресс на которые передается в порт 2:
001136 000400 .WORD 400 ; команда 01 (byte: 01 byte: 00) - выделить память
001140 000032 .WORD 32 ; устройство 32 ПП
001142 000000 .WORD 00 ; сюда ПП вернет адресс начала освобожденной памяти
001144 000065 .WORD 65 ; Необходимое количество слов. Сюда пп вернет количество слов освобожденной памяти, если она меньшще заданной.
после первого запроса код ЦП переносит адресс который вернул ПП в 001152...
001146 010000 .WORD 10000 ; команда 20 (byte: 20 byte: 00) - запись
001150 000032 .WORD 32 ; устройство 32 ПП
001152 000000 .WORD 00 ; сюда после первой операции переносится 001142, то есть начальный адресс в ПП
001154 001252 .WORD 1252 ; Адресс начала в ЦП
001156 000065 .WORD 65 ; 65 слов перенести
перед тем как сделать третий запрос, код в ЦП меняет в 1136 старший байт 1 на байт 30
001136 014000 .WORD 14000 ; (byte: 30 byte: 00) команда - выполнить код
001140 000032 .WORD 32 ; устройство 32 ПП
001142 000000 .WORD 00 ; сюда ПП вернул адресс начала освобожденной памяти, то есть запустить с этого адреса
001144 000065 .WORD 65 ; ...
[свернуть]
Последний раз редактировалось electroscat; 31.07.2022 в 17:09.
Сейчас в коллекции:
Вектор 06Ц.01(Минск), Вектор 06Ц.01(Волжский), Вектор 06Ц.02(Кишенев), Агат 7, Агат 9, Электроника 0511 УКНЦ (СЭМЗ), Электроника 0511 УКНЦ (КВАНТ) Х2, Поиск-1.03 (VGA),Электроника БК-0011(10,11M) [3IN1], Корвет ПК8010, Партнер 01.01, Спектр-001, БАЙТ(БПО_СВТ), Волна 48, Ленинград 48, Веста 30, Компакт 256(новодел),
и ... Pentium 200 mmx, 386SX-16, AMD K6-300 ...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)