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

User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 45

Тема: Определение типа процессора на клонах Вектора

  1. #21
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Интересно, какова нижняя граница? Волшебная однобайтовая операция + 4 разных reta (ну и lxi для сообщений)?
    Мне кажется, операции 3-4 плюс retы и lxi для сообщений
    Причём пока непонятно, либо "стековый" метод, либо - сложения/сдвиги
    Кстати, сложения/сдвиги мы ещё не пробовали
    Цитата Сообщение от ivagor Посмотреть сообщение
    18h
    Пасиб, а то мой m80 до недокументированных команд не дорос :-)

  2. #22
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    Кстати, сложения/сдвиги мы ещё не пробовали
    Хотел последний dcr a заменить на сдвиг, для убыстрения на 4 такта, но поленился перекомпилировать и снова проверять. Хотя наверно такую мелочь можно было и без проверки.

    А если так каждую процедуру оптимизировать?
    На векторе в "классических" программах много рыхлого кода. Например в бейсике это бросается в глаза - "альтаировская" часть очень плотная в отличие от векторовской.

    ---------- Post added at 23:06 ---------- Previous post was at 23:02 ----------

    Забыл в последнем варианте указать
    0-i8085, 1 - KP580BM1, 2 - i8080, 3-Zilog z80

  3. #23
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На Векторе только так и надо, я ж писал как-то недавно, шаманство, чистое шаманство :-)

    ---------- Post added at 13:08 ---------- Previous post was at 13:06 ----------

    Цитата Сообщение от ivagor Посмотреть сообщение
    Забыл в последнем варианте указать
    0-i8085, 1 - KP580BM1, 2 - i8080, 3-Zilog z80
    Ну да, я в такой режим свалился постов 10 назад.
    Думаю, ничего, что i8080 стал двойкой а не нулём

    Теперь 8080 стал единицей :-)


    ---------- Post added at 15:00 ---------- Previous post was at 13:08 ----------

    Код:
    ; CPUTxt  Detects CPU type, returns 0-terminated CPU type string
    ; INPUT:   NONE
    ; OUTPUT: <A>  - CPU type: 0-z80, 1-i8080, 2-i8085, 3-KP580BM1
    ;         <DE> - 0-terminated CPU type string 
    
    CPUTXT:	sub	a
    	lxi	d,_z80
    	rpo
    	inr	a
    	push	psw
    	pop	b
    	lxi	d,_i8080
    	DB	0D9h	; shlx
    	ora	c
    	lxi	d,_580VM1
    	rpe
    	inr	a
    	lxi	d,_i8085
    	ret
    
    _i8080:	     DB	"i8080",0
    _580VM1:     DB	"KP580BM1",0
    _z80:        DB	"z80",0
    _i8085:      DB	"i8085",0


    ---------- Post added at 16:31 ---------- Previous post was at 15:00 ----------

    Можно ещё чуть ускорить

    Код:
    ; CPUTxt  Detects CPU type, returns 0-terminated CPU type string
    ; INPUT:   NONE
    ; OUTPUT:  <A>-CPU type: 0-z80, 1-i8080, 2-i8085, 3-KP580BM1
    ;         <DE> - 0-terminated CPU type string 
    
    CPUTXT:	sub	a
    	lxi	d,_z80
    	rpo
    	inr	a
    	push	psw
    	pop	b
    	lxi	d,_i8080
    	DB	0D9h	; shlx
    	ora	c
    	lxi	d,_580VM1
    	rpe
    	ral
    	lxi	d,_i8085
    	ret
    
    
    _i8080:	   DB	"i8080",0
    _580VM1:   DB	"KP580BM1",0
    _z80:   DB	"z80",0
    _i8085:	 DB	"i8085",0
    Последний раз редактировалось PPC; 09.09.2012 в 00:50.

  4. #24
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хорошая придумка с sub a.

  5. #25
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У самого короткого варианта есть незначительное ограничение - на ВМ1 д.б. активен банк памяти 0.
    Можно чуть ускорить наиболее вероятную ветку 8080 перенеся push pop после shlx. При этом можно избавится от порчи BC, заменив pop b на pop d и ora с на ora e.
    Сделал независимый от банка вариант, и без push pop (можно переделать в "бесстековый", заменив retы на переходы). Но в универсальном виде он на 2 байта длиннее. Если старший или младший байты адреса _i8080 принадлежат диапазону [2,127], то можно еще байт сократить. Выкладывать неохота, вдруг его еще можно сократить

    ---------- Post added at 13:58 ---------- Previous post was at 13:41 ----------

    В VV интересный момент. Если изменять банк памяти ВМ1 через smf, то все предсказуемо. А если изменить банк в отладчике, то он на следующей команде "вернется". В emu без сюрпризов.

  6. #26
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне тоже не очень нравится, что регистровая пара <BC> так бесславно теряет своё значение ради ora c. Наверное, стоит по-крайней мере, подумать об ora e. Единственно, категорически не нравятся варианты с ограничением по размещению в памяти. Я вижу, откуда появится [2,127], но экономия на регистре таким образом, по-моему перебор. Многие (и я) используют перемещаемый ассемблер и библиотеки, и хоть компоновщик засовывает combined сегмент данных до сегмента кода, это не гарантия, что _i8080 попадёт в начало. Делать absolute addressing mode для этих данных не хочется ещё больше по туче причин. Похоже, будем жить с последним вариантом. Было прикольно её оптимизить вдвоём. Спасибо, ivagor, надеюсь когда нибудь ещё поработать вместе. Только, наверное, offline если не против, а то вон мы тут сколько постов нагенерили. Одно оправдание, что весь процесс оптимизации на виду.

  7. #27
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,105
    Спасибо Благодарностей отдано 
    772
    Спасибо Благодарностей получено 
    643
    Поблагодарили
    398 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По-моему то, что вы делаете, это замечательно. Можно отдельную тему завести: "ivagor & PPC работают вместе"
    Больше игр нет

  8. #28
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    Единственно, категорически не нравятся варианты с ограничением по размещению в памяти.
    Для задачи определения типа процессора это, конечно, перебор. Если бы что-то действительно критичное (графика, супер-расчеты, интерпрератор чего-то), тогда бы наверно имело смысл.

    Цитата Сообщение от PPC Посмотреть сообщение
    Похоже, будем жить с последним вариантом.
    Тогда наверно стоит зафиксировать (с учетом вышеупомянутых правок):
    Код:
    cpudetect:
    	sub	a
    	lxi	d,_z80
    	rpo
    	inr	a
    	lxi	d,_i8080
    	shlx
    	push	psw
    	pop	d
    	ora	e
    	ani	00000011b ;чтобы не зависеть от банка памяти ВМ1
    	lxi	d,_580VM1
    	rpe
    	ral
    	lxi	d,_i8085
    	ret
    И альтернативный, "почти бесстековый" вариант.
    Код:
    cpudetect:
    	sub	a
    	lxi	d,_z80
    	rpo
    	inr	a
    	lxi	d,_i8080
    	shlx
    	inr	a
    	cpi	3
    	lxi	d,_i8085
    	jof	SkipVM1
    	inr	a
    	lxi	d,_580VM1
    SkipVM1:
    	ret
    Цитата Сообщение от PPC Посмотреть сообщение
    Было прикольно её оптимизить вдвоём. Спасибо, ivagor, надеюсь когда нибудь ещё поработать вместе. Только, наверное, offline если не против, а то вон мы тут сколько постов нагенерили. Одно оправдание, что весь процесс оптимизации на виду.
    Да, было прикольно, в свою очередь хочу сказать спасибо за такое интересное и полезное взаимодействие. Когда есть взгляд со стороны, свежие идеи - меньше риск что-то просмотреть или зациклиться на неудачных решениях. Ни и дух соревновательности подталкивает
    Насчет поработать вместе - кто знает, у меня много пятниц на неделе, лучше я ничего определенного говорить не буду, но не исключно

  9. #29
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сейчас немного занят, подробно ответить не смогу.
    У меня немножко другой взгляд на вещи типа активного банка, и я бы написал в NOTES секции о том, что нужен банк 0, а код бы релизнул с conditional compilation следующего вида:
    Код:
    ANYBNK EQU 0
    
    cpudetect:
    	sub	a
    	lxi	d,_z80
    	rpo
    	inr	a
    	lxi	d,_i8080
    	shlx
    	push	psw
    	pop	d
    	ora	e
            IF ANYBNK
     	     ani	00000011b ;чтобы не зависеть от банка памяти ВМ1
            EndIF
    	lxi	d,_580VM1
    	rpe
    	ral
    	lxi	d,_i8085
    	ret
    Но это уже детали, а с остальным согласен.

  10. #30
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для коллекции еще один "потенциально бесстековый" вариант. Особенность в том, что используются только "старые" флаги, но учтена установка AC командами ana/ani на 8085. Заодно выяснилось, что в VV это сейчас не реализовано.
    Код:
    cpudetect:
    ; CPUTxt  Detects CPU type, returns 0-terminated CPU type string
    ; INPUT:   NONE
    ; OUTPUT:  <A>-CPU type: 0-z80, 1-i8080, 2-KP580BM1, 3-i8085, 
    ;         <DE> - 0-terminated CPU type string 
    	sub	a
    	lxi	d,_z80
    	rpo
    	inr	a
    	lxi	d,_i8080
    	shlx
    	ani	0
    	daa
    	mvi	a,2
    	lxi	d,_580VM1
    	rz
    	lxi	d,_i8085
    	inr	a
    	ret
    Последний раз редактировалось ivagor; 12.09.2012 в 20:19.

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

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

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

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

Похожие темы

  1. Определение текущего адреса
    от Alex Rider в разделе Программирование
    Ответов: 52
    Последнее: 26.07.2012, 13:38
  2. Ответов: 14
    Последнее: 29.01.2009, 13:56
  3. Определение Pentagon 1024/512
    от CPLx в разделе Программирование
    Ответов: 5
    Последнее: 02.03.2008, 22:47
  4. Определение Turbo-FM
    от Максагор в разделе Программирование
    Ответов: 21
    Последнее: 28.09.2007, 20:29
  5. Определение номера дисковода
    от goodboy в разделе Программирование
    Ответов: 2
    Последнее: 22.06.2005, 01:54

Ваши права

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