User Tag List

Страница 5 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 41 по 50 из 62

Тема: Если бы у Медноногова был БК ?..

  1. #41

    Регистрация
    31.08.2008
    Адрес
    г. Ургенч, Узбекистан
    Сообщений
    246
    Спасибо Благодарностей отдано 
    127
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    31 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Oleg N. Cher, твори! !

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

    Oleg N. Cher(28.12.2021)

  2. #42

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    переименовать бы тему в "карточная игра" или как-то так
    manwe.pdp-11.ru

  3. #43

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Вот этот код означает несколько инструкций ROL (R0)+ подряд. Столько, сколько ширина окна в словах.
    Так что это не самый короткий код. Хотя, думаю, у него хорошее соотношение размер/скорость.
    Ну, я же всё равно сделаю этот ROL внутри цикла SOB, т.к. мне нужна возможность работать с произвольной шириной окна.

  4. #44

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Ну, я же всё равно сделаю этот ROL внутри цикла SOB, т.к. мне нужна возможность работать с произвольной шириной окна.
    Ну смотри, в скорости потеряешь вдвое.
    Для произвольной ширины я бы сделал иначе: перед последовательностью команд ROL поставить BR, чтобы он прыгал вперёд на нужное число слов, пропуская ненужные ROLы. Просто перед началом записываешь в младший байт по адресу команды BR число сколько ROLов надо пропустить. Самомодифицирующийся код.

    Исходник и бинарник: scroll2.zip
    Код:
    ; R0 - screen address
    ; R1 - width in words
    ; R2 - height in rows
    ScrollRight:
    	MOVB #32.,RB	; default offset
    	SUB R1,RB
    	ASL R1		; width in bytes
    	MOV R1,Of1+2
    	NEG Of1+2
    R:	CLC
    RB:	BR Of1
    2:	.Repeat 32.
    	{
    	ROL (R0)+	; scroll row
    	}
    Of1:	ADC -32.(R0)
    	SUB R1,R0
    	INC PC		; repeat twice
    	BR R
    	ADD #100,R0	; next row
    	SOB R2,R
    	RET
    
    ; R0 - screen address
    ; R1 - width in words
    ; R2 - height in rows
    ScrollLeft:
    	MOVB #32.,LB	; default offset
    	SUB R1,LB
    	ASL R1		; width in bytes
    	MOV R1,Of2-2
    	SUB #2,Of2-2
    L:	ADD R1,R0
    	CLC
    LB:	BR Of2:
    2:	.Repeat 32.
    	{
    	ROR -(R0)	; scroll row
    	}
    	BCC Of2
    	BIS #100000,-2(R0)
    Of2:	INC PC		; repeat twice
    	BR L
    	ADD #100,R0	; next row
    	SOB R2,L
    	RET
    Последний раз редактировалось Manwe; 28.12.2021 в 11:21.
    manwe.pdp-11.ru

  5. #45

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    записываешь в младший байт по адресу команды BR число сколько ROLов надо пропустить. Самомодифицирующийся код.
    По аналогии со Спектрумом предложу еще один вариант, для БК он даже больше подойдет, как как PC такой же регистр, как и остальные:

    ADD смещение,PC

    как оно точно записывается в ассемблере PDP, вам лучше знать =) Зато избавимся от команд BR и команды модификации кода,
    плюс при таком варианте длина прыжка не имеет ограничения, имеющегося для команды BR - можно хоть 500 команд перепрыгнуть.

  6. #46

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    По аналогии со Спектрумом предложу еще один вариант, для БК он даже больше подойдет, как как PC такой же регистр, как и остальные:
    ADD смещение,PC
    как оно точно записывается в ассемблере PDP, вам лучше знать =) Зато избавимся от команд BR и команды модификации кода,
    плюс при таком варианте длина прыжка не имеет ограничения, имеющегося для команды BR - можно хоть 500 команд перепрыгнуть.
    К сожалению, по аналогии со Спектрумом не получится, потому что у него инструкции 8-битные, а тут 16-битные. То есть не получится прибавлять нечётные числа – они в середину команды будут указывать.

    Хотя... Я же там потом ширину умножаю на 2. Надо попробовать!

    Update: попробовал. Пришлось задействовать ещё один регистр. Команда ADD работает чуть дольше, чем BRanch. Размер процедуры не сократился. Так что лучше оставить с BR. Всё-таки для PDP-11 самомодифицирующийся код – часто наилучшее решение.
    Последний раз редактировалось Manwe; 28.12.2021 в 11:31.
    manwe.pdp-11.ru

  7. #46
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #47

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Размер процедуры не сократился
    По идее, должен сократиться, сейчас сижу сочиняю процедуру)) хотя тут двоякая задача: максимальная скорость и размер не сильно раздувать.
    И еще пара вопросов, все же PDP не моя стихия. Как понимаю, переход для SOB ограничен 128-ю байтами назад?
    То бишь нас спасает только то, что работаем словами - 64 команды сдвига не влезли бы в переход. Не в конкретно данном примере, а вообще, где понадобятся 64 двухбайтовых команды.
    И второе: объясните фокус с однократным повтором кода через INC PC. Каким образом это первый раз срабатывает, а на втором проходе нет.

  9. #48

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,508
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    с однократным повтором кода через INC PC
    Скорей, CALL (PC)

  10. #49

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    611
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    175
    Поблагодарили
    135 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Скорей, CALL (PC)
    неа, именно inc PC и только на процах, которые допускают чтение слов по нечётным адресам. Это совсем другая фича и работает по-другому.
    Цитата Сообщение от reddie Посмотреть сообщение
    объясните фокус с однократным повтором кода через INC PC
    Когда выполняется первый раз команда INC PC, то счётчик команд становится нечётным, но при этом всё равно выполняется команда, следующая за INC PC, т.к. по нечётному адресу всё равно читаются слова, которые читались бы и по чётному. А вот при втором выполнении, нечётный PC становится чётным, при этом значение счётчика команд становится +2 к значению счётчика команд после выполнения INC PC и следующая команда за INC PC пропускается и выполнение программы идёт дальше. Немного сумбурно, но всё это легко пронаблюдать в любом отладчике даже на самой БКшке. У этого метода один минус - нельзя использовать относительную адресацию для байтового доступа к памяти внутри участка, который повторно выполняется с нечётным счётчиком команд.

    Эти 2 пользователя(ей) поблагодарили gid за это полезное сообщение:

    Oleg N. Cher(10.09.2022), reddie(28.12.2021)

  11. #50

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Как понимаю, переход для SOB ограничен 128-ю байтами назад?
    Не совсем так. Поскольку адреса команд могут быть только чётные, то в байте хранится смещение, которое потом удваивается процессором, т.е. переход возможен до 256 байт назад и 254 вперёд. Если я конечно правильно понял логику проца PDP-11.

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

    Кстати, команда SOB не портит флаги?

Страница 5 из 7 ПерваяПервая 1234567 ПоследняяПоследняя

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

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

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

Похожие темы

  1. А был ли Garic?..
    от newart в разделе Разный софт
    Ответов: 1
    Последнее: 15.10.2016, 11:14
  2. Ответов: 3
    Последнее: 18.02.2008, 20:16
  3. ДР Медноногова
    от Slider в разделе Поздравления
    Ответов: 11
    Последнее: 14.05.2007, 01:22
  4. а был ли сс05?
    от elfh в разделе Демо
    Ответов: 92
    Последнее: 27.10.2005, 14:42

Ваши права

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