User Tag List

Страница 231 из 273 ПерваяПервая ... 227228229230231232233234235 ... ПоследняяПоследняя
Показано с 2,301 по 2,310 из 2727

Тема: Цифровая археология: 1801 и все-все-все

  1. #2301

    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    328
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Опять прошу помощи у специалистов. Тут в свое время обсуждался глюк процессора при использовании режимов адресации @PC. Я нарвался на похожую проблему, и хотел уточнить, это проявление данного глюка, или же нет.
    Я занимаюсь сейчас подготовкой к публикации моего FPGA-варианта платы МС1201.02, поскольку здесь нашлись интересующиеся данной разработкой. Я доделал контроллер RX11/RX01, и в процессе тестов оказалось, что RT-11 ни в какую не хочет грузиться с дисковода по команде монитора B DX. Из-под системы командой BOOT грузится, а из-под монитора никак не хочет. Трассировка процесса загрузки из-под SignalTap показала, что процессор ведет себя неадекватно. Вот тестовый фрагмент, являющийся составной частью первичного загрузчика DX:
    Код:
          3 000000                          START:
          4 000000  011706                          MOV     @PC,SP
          5 000002  012702  000200                  MOV     #200,R2
          6 000006  005000                          CLR     R0
          7 000010  000000                          HALT
          8         000000                          .END    START
    Здесь в первой инструкции используется код следующей команды в качестве нового указателя стека. Конечно, так писать могут только больные на голову люди, но тем не менее это кусок официального дековского драйвера. Очевидно, что после выполнения данного кода должно получиться R2=200, R0=0. Попробуем запустить этот код из монитора:
    Код:
    @0/000000 11706
    000002/000000 12702
    000004/000000 200
    000006/000000 5000
    000010/000000 0
    @R0/140001 
    @R2/000000                                                                                                                                                    
    @R6/000776
    @                                                                                                                                                    
    @0G 000012                                                                                                                                                     
    @R0/140001                                                                                                                                                    
    @R2/005000                                                                                                                                                    
    @R6/012702                                                                                                                                                    
    @
    Как видим, первая команда отработала правильно, в SP записалось 12702. А дальше начались проблемы. Следующая команда свой аргумент взяла на слово дальше - не 200, а 5000. А команда CLR вообще не отработала, регистр R0 не изменился. Естественно, что в этой ситуации загрузка с дискеты невозможна:
    Код:
    @B                                                                                                                                                            
    $DX  000204                                                                                                                                                   
    @
    Поскольку выше в качестве адреса буфера установилось не 200, а 5000, то по адресу 200 остались нули, и при передаче туда управления получаем вылет в монитор.
    Что странно, загрузка по команде BOOT/FOREIGN работает правильно:
    Код:
    RT-11SJ (S) V05.04 D                                                                                                                                          
                                                                                                                                                                  
    .SET TT QUIET                                                                                                                                                 
                                                                                                                                                                  
    .BOO/FOR DX:                                                                                                                                                  
                                                                                                                                                                  
    DW Handler V6.5, (c) D.S.C., 1992-2016                                                                                                                        
                                                                                                                                                                  
                                                                                                                                                                  
    RT-11SJ (S) V05.04 D                                                                                                                                          
                                                                                                                                                                  
    .SET TT QUIET                                                                                                                                                 
                                                                                                                                                                  
    .
    Хотя, по идее, при этом происходит то же самое - с дискеты считывается сектор 1 дорожки 1 по адресу 0 и туда передается управление.

    Странно, но мне помнится, что в начале 90-х годов у нас еще стояли ДВК с дисководами ГМД-70 и все прекрасно с них грузилось. Хотя, почти 30 лет прошло, возможно я что-то уже и забыл. Возможно, это были ДВК-1 на 1801ВМ1, или мы использовали не RT-11, а какой-нибудь советский суррогат вроде рафоса.

  2. #2302

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Опять прошу помощи у специалистов
    Читать отсюда.

  3. #2303

    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    328
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Читать отсюда.
    Спасибо, конечно. Но в мои планы пока не входило с нуля разбираться во внутреннем устройстве процессора. А без этого трудно понять смысл всех этих внутренних регистров - BRD, PC1, PC2, RA итд. И, соответственно, полный смысл вышеуказанной статьи тоже понятен только примерно. Но из того, что я примерно понял, мне показалось, что после начала сбоя процессор должен отстать на одну инструкцию, то есть выполнить одну и ту же команду дважды. У меня же, наоборот, процессор пропустил одно слово (200) и в качестве аргумента инструкции по адресу 2 взял слово по адресу 6, а не 4. Но, повторяю, я в потрохах процессора не разбираюсь, отсюда и попросил тех, кто в них разбирается, прокомментировать ситуацию - это тот самый сбой, или что-то другое.
    Кроме того, VSLAV говорил, что он исправил в своей модели эту ошибку, для чего добавил параметр VM2_CORE_FIX_PREFETCH = 1. У меня он указан, но ошибка все равно проявляется.

  4. #2304

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Кроме того, VSLAV говорил, что он исправил в своей модели эту ошибку, для чего добавил параметр VM2_CORE_FIX_PREFETCH = 1. У меня он указан, но ошибка все равно проявляется.
    В той же теме Vslav пояснял:
    Цитата Сообщение от Vslav Посмотреть сообщение
    По ходу мой фикс с PC2 не работает как надо. Придется таки разбираться и патчить микрокод.
    - - - Добавлено - - -

    В принципе, я имею представление, как сделать фикс, чтобы ошибку кеша исправить, но фикс должен делать @Vslav, т.к. я не Verilog'щик.

  5. #2305

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Код:
          3 000000                          START:
          4 000000  011706                          MOV     @PC,SP
          5 000002  012702  000200                  MOV     #200,R2
          6 000006  005000                          CLR     R0
          7 000010  000000                          HALT
          8         000000                          .END    START
    Это дековский драйвер? Не фрагмент реального кода из 1801РЕ2-055 ? То есть, на реальном процессоре ВМ2 такое никто еще не пытался запустить?
    Попробуйте запретить мой фикс, установите в ноль: VM2_CORE_FIX_PREFETCH = 0.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    В принципе, я имею представление, как сделать фикс, чтобы ошибку кеша исправить, но фикс должен делать @Vslav, т.к. я не Verilog'щик.
    Насколько я понимаю, надо пропатчить RI2, чтобы адресации (R7), -(R7), @-(Rn) принудительно уходили на 0x21.

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

    forth32(07.01.2021)

  6. #2306

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Насколько я понимаю, надо пропатчить RI2, чтобы адресации (R7), -(R7), @-(Rn) принудительно уходили на 0x21.
    Я думаю, можно по простому можно попробовать вот как сделать:

    Если IA = 0x13 (завершающая микрокоманда для адресаций вида ALU ss,Rn), и при этом RI2 = 1 (ss использует R7), то для адреса NA принудительно устанавливать бит 5 (чтобы из адреса 0x01 всегда получалось 0x21).

    В оригинале этот фрагмент выглядит так:
    Код:
    //----------------------------------------------------------------------   Приемник - регистр
    0x13:
    	if (RI2=0)				WAIT_BRD		// Если ss не использует R7, то oжидание готовности чтения BRD
    			ALU BRD,Rd					// Операции ALU из шага 0x3B, в качестве приемника Rd, в качестве источника BRD
    	else								// Иначе ss использует R7
    			ALU RS,Rd					// Операции ALU из шага 0x3B, в качестве приемника Rd, в качестве источника RS
    	endif 
    						PLI_REQ			// Запросить проверку запросов на прерывание
    	if (Rd=R7)							// Если Rd=R7, то
    			GOTO 0x21					// Перейти на команду выборки следующей некэшированной инструкции
    	else								// Иначе
    			GOTO 0x01					// Перейти на команду выборки следующей инстру

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

    Vslav(07.01.2021)

  7. #2307

    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    328
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Это дековский драйвер? Не фрагмент реального кода из 1801РЕ2-055 ?
    Да, это именно кусок из дековского DX.MAC. В оригинале это выглядит так:
    Код:
    	.SBTTL	BOOTSTRAP DRIVER
    
    	.DRBOT	DX,BOOT1,READ
    
    	. = DXBOOT+14
    	.WORD	READS-DXBOOT
    	.WORD	340
    	.WORD	WAIT-DXBOOT
    	.WORD	340
    
    	. = DXBOOT+34		;34-52 USEABLE
    BOOT1:	MOVB	UNITRD-DXBOOT(R0),RDCMD ;SET READ FUNCTION FOR CORRECT UNIT
    REETRY:	MOV	@PC,SP		;INIT SP WITH NEXT INSTRUCTION
    	MOV	#200,R2		;AREA TO READ IN NEXT PART OF BOOT
    	CLR	R0		;SET TRACK NUMBER
    	BR	B2$		;OUT OF ROOM HERE, GO TO CONTINUATION
    Код, конечно, дурацкий, но я уже не первый раз обращаю внимание, что дековцы очень любят всякие программные извращения - самомодифицирующийся код, использование инструкций в качестве данных итд. Даже там, где от них никакой пользы, вот как здесь.
    Загрузка у нас идет в несколько этапов. Вначале монитор 055 (у меня 279) читает с диска сектор 1 дорожки 1 по адресу 0 и передает туда управление. И этот код как раз работает правильно - сектор читается без ошибок.
    Сектор у этих дисков маленький, 128 байт всего, много кода туда не запихаешь. Поэтому имеющийся там код дочитывает еще 2 сектора и размещает их по адресам 200 и 400, и передает туда управление. И вот в этом месте и возникает сбой.

    Цитата Сообщение от Vslav Посмотреть сообщение
    То есть, на реальном процессоре ВМ2 такое никто еще не пытался запустить?
    Попробуйте запретить мой фикс, установите в ноль: VM2_CORE_FIX_PREFETCH = 0.
    Попробовал. И все заработало!!!!!! Команды отрабатываются правильно, загрузка из монитора командой B DX идет нормально. Получается, патч нарушал работу процессора.
    Значит, на железном процессоре, где нет патча, все и раньше работало правильно. И я правильно помню, как грузил систему с ГМД-70.

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

    Vslav(07.01.2021)

  8. #2308

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Значит, на железном процессоре, где нет патча, все и раньше работало правильно. И я правильно помню, как грузил систему с ГМД-70.
    Если память достаточно быстрая, то этот глюк проявляться и не должен.

  9. #2309

    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    328
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Если память достаточно быстрая, то этот глюк проявляться и не должен.
    У меня динамическая память DRAM, она не может быть быстрой, глюк обязательно проявится. На оригинальной МС1201 тоже ведь стоят 565РУ6 в качестве памяти.
    В данном случае глюк оказался искусственно привнесенным. Реальный глюк поймать очень трудно - мало кто использует адресацию @PC, смысла в этом нет никакого.

  10. #2310

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    У меня динамическая память DRAM, она не может быть быстрой, глюк обязательно проявится.
    Быстрота - вещь относительная.
    Если глюк не проявляется, значит память быстрее, чем тот порог, после которого глюк проявляется.

Страница 231 из 273 ПерваяПервая ... 227228229230231232233234235 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

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