Важная информация

User Tag List

Страница 9 из 9 ПерваяПервая ... 56789
Показано с 81 по 88 из 88

Тема: Ассемблер PDP-11, попытки что то сделать по статье "Рессурсы УКНЦ/Глава1" Помогите !

  1. #81
    Veteran
    Регистрация
    22.11.2009
    Адрес
    Москва
    Сообщений
    1,588
    Спасибо Благодарностей отдано 
    68
    Спасибо Благодарностей получено 
    157
    Поблагодарили
    103 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от electroscat Посмотреть сообщение
    пытаюсь понять, как через порт 176674-176676 передаются байты. В целом процесс передачи понятен, а вот процесс приема не очень, куда кладет ПП получнные байты я пока не понял, от куда берется адресс их расположения
    данные оказываются в регистрах ВП1-120 на стороне ПП (177060-77), и в память ПП их нужно перекладывать вручную

  2. #82
    Master Аватар для electroscat
    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    986
    Спасибо Благодарностей отдано 
    435
    Спасибо Благодарностей получено 
    182
    Поблагодарили
    114 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    По поводу многозадачности... Многозадачность вполне реализуется и на одном ядре процессора.
    Я скорее не правильно выразился, имел в виду именно задействование двух процессов под обсчет задач, наверное многопоточность, или скорее многоядерность. )

    - - - Добавлено - - -

    Цитата Сообщение от shattered Посмотреть сообщение
    данные оказываются в регистрах ВП1-120 на стороне ПП (177060-77), и в память ПП их нужно перекладывать вручную
    Я предполагал что их таки куда то закидывает подпрограмма, на которую указывает вектор в ячейке 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 ...

  3. #83
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от electroscat Посмотреть сообщение
    У меня тут еще серия вопросов готовится по взаимодействию между ПП и ЦП, пытаюсь понять, как через порт 176674-176676 передаются байты. В целом процесс передачи понятен, а вот процесс приема не очень, куда кладет ПП получнные байты я пока не понял, от куда берется адресс их расположения, ну и там еще вопросы есть. Пока формиркю...
    На сайте emuverse.ru в разделе УКНЦ есть ссылка на сайт с отсканированной документацией. Там есть документ Книга 2 Часть 2. Программное обеспечение комплекса вычислительного учебного Электроника МС 0202 (Электроника МС 0511 УКНЦ). И вот в этом документе есть раздел Работа с внешними устройствами. Там и описано как работать с каналом К2.

  4. Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    electroscat (12.07.2022)

  5. #84
    Master Аватар для electroscat
    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    986
    Спасибо Благодарностей отдано 
    435
    Спасибо Благодарностей получено 
    182
    Поблагодарили
    114 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вроде начинаю понимать, кажется ЦП передает ПП массив параметров в программу обработки прерывания, и далее, ПП сам вычитывает по массиву параметров все что нужно, и запускаеит. Ну или типа того ))) Теперь нужно с параметрами разобраться )
    Сейчас в коллекции:
    Вектор 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 ...

  6. #85
    Master
    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    691
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    44
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    И ещё, чтобы программа работала - надо либо знать адреса, куда попадает , либо писать в позиционно-независимым кодом.
    Нечто подобное происходит при программировании КЦГД. Только у УКНЦ каналов связи между процессорами несколько и они шире, а у КЦГД - один последовательный порт.

  7. #86
    Veteran
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,396
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    И ещё, чтобы программа работала - надо либо знать адреса, куда попадает , либо писать в позиционно-независимым кодом.
    Нечто подобное происходит при программировании КЦГД. Только у УКНЦ каналов связи между процессорами несколько и они шире, а у КЦГД - один последовательный порт.
    В ПП есть диспетчер в который можно встроить свою пп. Либо выполнить одноразово и освободить память. Адреса ты не знаешь поэтому код должен быть перемещаемый. В доках все написано вплоть до ячеек где, что лежит.. В ПП.. Если сам захочешь памятью рулить. Из ЦП по каналу передаешь блок в ПП и все.. Можешь зациклить в диспетчере выполнение соей пп.

    - - - Добавлено - - -

    Почитай журналы пк укнц.. ЕМНИП...В каком-то очень четко расписано как работать с диспетчером пп.
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  8. Этот пользователь поблагодарил S_V_B за это полезное сообщение:

    electroscat (13.07.2022)

  9. #87
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от electroscat Посмотреть сообщение
    Вроде начинаю понимать, кажется ЦП передает ПП массив параметров в программу обработки прерывания, и далее, ПП сам вычитывает по массиву параметров все что нужно, и запускаеит. Ну или типа того ))) Теперь нужно с параметрами разобраться )
    Правильно понимаете. Массив параметров расположен в памяти ЦП, а через канал 2 передаётся адрес этого массива и два байта запуска. А для запуска своей подпрограммы в ПП сначала надо запросить память нужного объёма (устройство 32, код 1). Если запрос памяти прошёл успешно, то переписать подпрограмму из памяти ЦП в память ПП(устройство 32, код 20). Ну и потом её естественно запустить(устройство 32, код 30). Если после исполнения подпрограммы она больше не нужна, то надо освободить память в ПП (устройство 32, код 2).

  10. Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    electroscat (13.07.2022)

  11. #88
    Master Аватар для electroscat
    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    986
    Спасибо Благодарностей отдано 
    435
    Спасибо Благодарностей получено 
    182
    Поблагодарили
    114 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, благодарю, доки помогли. В вышеуказанном листинге есть область начиная с 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 ...

Страница 9 из 9 ПерваяПервая ... 56789

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 206
    Последнее: 19.08.2020, 10:36
  2. Ответов: 15
    Последнее: 24.07.2014, 12:19
  3. Ответов: 1
    Последнее: 21.07.2014, 10:50
  4. Ответов: 5
    Последнее: 20.06.2005, 00:10

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •