User Tag List

Страница 6 из 7 ПерваяПервая ... 234567 ПоследняяПоследняя
Показано с 51 по 60 из 62

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

  1. #51

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

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    т.е. переход возможен до 256 байт назад и 254 вперёд
    Для SOB - нет.

  2. #52

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    По идее, должен сократиться, сейчас сижу сочиняю процедуру))
    Я проверил, тот же размер получается.
    Код:
    ; R0 - screen address
    ; R1 - width in bytes
    ; R2 - height in rows
    ScrollRight:
    	MOV #64.,R3	; default offset
    	SUB R1,R3
    	MOV R1,Of1+2
    	NEG Of1+2
    R:	CLC
    	ADD R3,PC
    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
    - - - Добавлено - - -

    Цитата Сообщение от reddie Посмотреть сообщение
    Как понимаю, переход для SOB ограничен 128-ю байтами назад?
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Кстати, команда SOB не портит флаги?
    Не портит.
    Переход возможен на 255 слов назад
    manwe.pdp-11.ru

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

    Oleg N. Cher(28.12.2021)

  3. #53

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

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Переход возможен на 255 слов назад
    Согласно последним постановлениям ВЦСПС - нет

  4. #54

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

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    при этом всё равно выполняется команда, следующая за INC PC
    Мудрено =) Догадывался о такой механике, но стоило прояснить для себя. А на регистр SP это тоже распространяется или нет? Или он всегда изменяется на 2 командами INC/DEC?
    Если же нет, то что происходит при работе с нечетным стеком? Трап, как и в остальных подобных ситуациях?

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Если я конечно правильно понял логику проца PDP-11.
    Не, у SOB переходы только назад, но вот описание команды не сходится с этим:

    Цитата Сообщение от Manwe Посмотреть сообщение
    Переход возможен на 255 слов назад
    А теперь смотрим описание команд процессора:




    число nn - это 6 бит, 64 варианта. Значит, максимальное значение - минус 128. Поэтому максимум можно обработать 63 двухбайтовых команды (учитывая +2 байта к PC от SOB)

  5. #55

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Значит, максимальное значение - минус 128
    А учитывая, что PC у нас указывает на следующую ЗА SOB команду - реальный диапазон - -126 байт от текущей. Кроме того попытка сделать команду 077R00 (смещение 0) - даст ошибку как минимум при компиляции

  6. #56

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

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    реальный диапазон - -126 байт от текущей
    Да, это и имел в виду, говоря "63 двухбайтовых команды". А вот переход с нулевым смещением на Спектруме работает нормально =) Т.е. JR $+2 или DJNZ $+2 у Z80 это "бесполезные" команды, в общем.

  7. #57

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    А теперь смотрим описание команд процессора
    а, про Rn я забыл
    manwe.pdp-11.ru

  8. #58

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    А на регистр SP это тоже распространяется или нет? Или он всегда изменяется на 2 командами INC/DEC?
    Так же распространяется. INC/DEC меняет на единицу, а инкрементные/декрементные адресации - всегда на 2, независимо от того, словная или байтовая команда. Для PC это тоже так, см. например адресации 27, 37.
    Цитата Сообщение от reddie Посмотреть сообщение
    что происходит при работе с нечетным стеком?
    На 1801ВМ1 всё работает как ни в чём не бывало, так же как и с чётным стеком. (имеется в виду, что производятся стандартные операции помещения в стек/извлечения из стека). Байтовая операция доступа к памяти с относительной адресацией, где индексируемый регистр - стек и его значение нечётно, даёт доступ к нечётному байту, т.е. MOVB (SP),R0, если SP=0775 выдаст в R0 содержимое байта из ячейки 0775
    Цитата Сообщение от Hunta Посмотреть сообщение
    реальный диапазон - -126 байт от текущей
    если текущей считается сама команда SOB, то даже 124., т.к. 77R01 - это переход команды на саму себя.
    Цитата Сообщение от Hunta Посмотреть сообщение
    Кроме того попытка сделать команду 077R00 (смещение 0) - даст ошибку как минимум при компиляции
    Однако выполнение этой команды на 1801ВМ1 равнозначно команде DEC R при этом флаги-признаки вообще не меняются, т.к. выполняется уменьшение на 1 содержимого регистра и, если он не равен 0, то переход по смещению 0 - на адрес, следующий за командой SOB, если равен 0, то прекращение ветвления и переход на адрес, следующий за командой SOB.

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

    reddie(28.12.2021)

  9. #59

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

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    INC/DEC меняет на единицу, а инкрементные/декрементные адресации - всегда на 2
    Хорошо, а команды типа CALL (JSR) и RET (RTI) будут корректно работать с нечетным стеком?

    Цитата Сообщение от gid Посмотреть сообщение
    переход по смещению 0 - на адрес, следующий за командой SOB, если равен 0, то прекращение ветвления
    А если поставить команду SOB PC,nn? Тут вопрос даже не в нулевом смещении, а в изменении PC самой командой.


    Цитата Сообщение от Manwe Посмотреть сообщение
    Я проверил, тот же размер получается
    Неа, у меня сократилось аж на 16 байт =) Правда, тоже задействовал один дополнительный регистр, зато ощутимый выигрыш по объему.
    Заработало с первого раза без багов, хотя в асме БК я вообще нубас =) Настрочил в блокнотике, скомпилил - ура, работает.
    В плане быстродействия где-то одинаково за счет того, что внутри цикла (основного) нет адресаций через память.
    А если задействовать еще один регистр под хранение числа #100, то и перед SOB можно убрать выборку из памяти, а размер будет тот же.
    Кстати, команда CLC не нужна, т.к. ADD reg,PC в любом случае обнулит флаг переноса.

    scroller.zip

    Вложил оба варианта: первоначальный от Manwe и свой. Внутри исходники + готовый код. Ниже под спойлером текст исходника, если кому лень загружать файл.
    Скроллится кусочек вверху экрана, время около 18 сек, можно перезапустить командой S монитора. Удобно запускать прямо в эмуляторе.
    Развернул команды скролла, т.к. компилер BKTurbo8 не понимает этой конструкции с копиями. Как в нем задать повтор куска кода?

    Скрытый текст

    Код:
    	.LA	1000
    
    	MOV	#1000,R5
    
    SCRL:	MOV	#40000,R0
    	MOV	#30,R1
    	MOV	#100,R2
    	CALL	ScrollRight
    	SOB	R5,SCRL
    	HALT
    
    ; R0 - screen address
    ; R1 - width in words
    ; R2 - height in rows
    
    ScrollRight:
    	ASL	R1
    	NEG	R1
    	ADD	#100,R1	;R1=64-(width*2)
    ROLL:	MOV	R0,R3	;save scr addr
    ROLL1:	ADD	R1,PC
    
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+	; scroll row
    	ROL (R0)+
    	ROL (R0)+
    	ROL (R0)+
    
    	MOV	R3,R0	; restore scr addr
    	ADC	(R0)	; shift from last word to 1st
    	INC	PC
    	BR	ROLL1
    	ADD	#100,R0
    	SOB	R2,ROLL
    	RET
    	
    	.END
    [свернуть]

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

    Oleg N. Cher(29.12.2021)

  10. #60

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

    По умолчанию

    да, CLC осталась от прошлого варианта без ADD, можно смело убирать
    manwe.pdp-11.ru

Страница 6 из 7 ПерваяПервая ... 234567 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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