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

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 38

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

  1. #1
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    2,869
    Благодарностей: 772
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Определение типа процессора на клонах Вектора

    Выкладываю фрагмент своей программки с subjем, определяются Z80, 580ВМ1, 580ВМ80, 1821ВМ85:

    ;Определение типа процессора
    xra a
    dcr a
    jpe cpuNotZ80
    ;Z80
    lxi h,Z80txt
    shld cputype+1
    jmp PrintResult

    cpuNotZ80:
    push psw
    pop h
    mov e,l
    mvi a,00001010b
    xra l
    mov l,a
    push h
    pop psw
    push psw
    pop h
    mov a,l
    xra e
    cpi 00001000b
    jz ItsVM1 ;переход, если 580ВМ1
    cpi 00000010b
    jnz PrintResult ;переход, если 580ВМ80
    ;1821ВМ85
    lxi h,i8085txt

    Несомненно можно сделать короче, но мне не кажется это важным для данного применения.

  2. Эти 5 пользователя(ей) поблагодарили ivagor за это полезное сообщение:
    dk_spb (07.09.2012), PPC (07.09.2012), svofski (07.09.2012), Titus (07.09.2012)

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

  4. #2
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    261
    Благодарностей: 131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, ivagor
    Вот мой вариант, но не определяет i8085

    ;OUTPUT
    ; <A> - CPU type: 0-i8080, 1-KP580BM1, 2-Zilog z80
    ; <HL>- 0-terminated string with corresponding CPU type
    ;REMARKS: <BC> and <FLAGS> are not saved

    CPUTXT: lxi h,_z80
    lxi b,0220h
    mov a,b
    inr b
    rpo ; 2 is returned when z80
    lxi h,_580VM1
    push b
    pop psw
    push psw
    pop b
    mov a,c
    sui 21h
    rp ; 1 is returned when KP580BM1
    lxi h,_i8080
    xra a
    ret

    DSeg

    _i8080: DB "i8080",0
    _580VM1B "KP580BM1",0
    _z80: DB "z80",0

  5. #3
    Tim0xA
    Гость

    По умолчанию

    У меня в архиве нашелся еще один вариант
    Код:
    		cpu 8080
    		org 100h
    	
    		lxi 	d, hellojpg
    		mvi 	c, 9
    		call 	5
    		call 	cpudetect
    		mvi	c, 9
    		call 	5
    		ret
    hellojpg	db	"DETECTING CPU TYPE",0dh,0ah,"THE CPU IS: $"
    msg_z80		db	"Z80$"
    msg_8080	db	"KP580BM80A$"
    msg_vm1		db	"KP580BM1$"
    cpudetect:	lxi	d, msg_z80
    		xra	a
    		dcr	a
    		rpo
    		lxi	h, 0020h
    		push	h
    		pop	psw
    		push	psw
    		pop	h
    		mvi	a, 20h
    		ana	l
    		jz	kr580
    		lxi	d, msg_vm1
    		ret
    kr580:		lxi	d, msg_8080
    		ret
    		end

  6. #4
    Veteran Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    1,693
    Благодарностей: 556
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Узнаю свой код? Кто бы еще назвал метку hellojpg :D
    Больше игр нет

  7. #5
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    2,869
    Благодарностей: 772
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну вы даете!
    Мне стало стыдно за страшный первоначальный вариант, поэтому пришлось улучшать. Решил сделать под дос, поэтому в качестве прототипа взял вариант svofski.
    Код:
    		.org 100h
    
    		lxi 	d, msg_cpu
    		mvi 	c, 9
    		call 	5
    		call 	cpudetect
    		mvi	c, 9
    		call 	5
    		ret
    msg_cpu		.db	"CPU $"
    msg_z80		.db	"Z80$"
    msg_8080	.db	"580BM80$"
    msg_8085	.db	"1821BM85$"
    msg_vm1		.db	"580BM1$"
    cpudetect:	lxi	d, msg_z80
    		xra	a
    		dcr	a
    		rpo
    		mvi	l, 00001000b
    		push	h
    		pop	psw
    		push	psw
    		pop	h
    		xra	a
    		ora	l
    		lxi	d, msg_8085
    		rz
    		lxi	d, msg_8080
    		rpo
    		lxi	d, msg_vm1
    		ret
    
    		.end
    Вложения Вложения

  8. #6
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    2,869
    Благодарностей: 772
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще один вариант, он на два байта короче и, если заменить возвраты на переходы, может обойтись без стека (сама детектилка, без обращений к дос). Используются недокументированные команды 8080 и 8085.
    Код:
    		.org 100h
    
    		lxi 	d, msg_cpu
    		mvi 	c, 9
    		call 	5
    		call 	cpudetect
    		mvi	c, 9
    		call 	5
    		ret
    msg_cpu		.db	"CPU $"
    msg_z80		.db	"Z80$"
    msg_8085	.db	"1821BM85$"
    msg_8080	.db	"580BM80$"
    msg_vm1		.db	"580BM1$"
    cpudetect:	lxi	d, msg_z80
    		xra	a
    		dcr	a
    		rpo
    		lxi	d, msg_8080
    		lxi	h, 3835h
    		shlx
    		mov	d, h
    		mov	e, l
    		dsub	d
    		lxi	d, msg_vm1
    		rz
    		lxi	d, msg_8085
    		ret
    
    		.end

    P.S.
    Добавил в архив "автономный" вариант, работающий без доса на клонах вектора.
    Вложения Вложения
    Последний раз редактировалось ivagor; 08.09.2012 в 11:13.

  9. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    PPC (08.09.2012)

  10. #7
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    261
    Благодарностей: 131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ещё бы очень хотелось, чтобы в аккумуляторе возвращались различные значения, ну, скажем, 0,1,2,3 или, если слишком код распухнет какие-нибудь 1,2,4,8. Первое предпочтительнее, потому что легче потом использовать в самомодифицирующемся коде для вычисления адреса перехода.

  11. #8
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    2,869
    Благодарностей: 772
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    Ещё бы очень хотелось, чтобы в аккумуляторе возвращались различные значения, ну, скажем, 0,1,2,3
    Например так? :
    <A> - CPU type: 0-i8080, 1-KP580BM1, 2-Zilog z80, 3-1821BM85
    Код:
    cpudetect:	lxi	d, msg_z80
    		xra	a
    		dcr	a
    		mvi	a, 2
    		rpo
    		lxi	d, msg_8080
    		lxi	h, первые две буквы msg_8080
    		xra	a
    		shlx
    		mov	d, h
    		mov	e, l
    		dsub	d
    		lxi	d, msg_vm1
    		mvi	a, 1
    		rz
    		lxi	d, msg_8085
    		mvi	a, 3
    		ret
    А лучше (на 2 байта короче) так:
    <A> - CPU type: 0-i8080, 1-KP580BM1, 2-1821BM85, 3-Zilog z80
    Код:
    cpudetect:	lxi	d, msg_z80
    		xra	a
    		dcr	a
    		mvi	a, 3
    		rpo
    		lxi	d, msg_8080
    		lxi	h, первые две буквы msg_8080
    		xra	a
    		shlx
    		inr	a
    		mov	d, h
    		mov	e, l
    		dsub	d
    		lxi	d, msg_vm1
    		rz
    		lxi	d, msg_8085
    		inr	a
    		ret
    Последний раз редактировалось ivagor; 08.09.2012 в 12:07.

  12. #9
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    261
    Благодарностей: 131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Smile

    Вот, прямо из печки

    Код:
    ;OUTPUT
    ; <A> - CPU type: 0-i8080, 1-KP580BM1, 2-Zilog z80, 3-i8085
    ; <HL>- 0-terminated string with corresponding CPU type
    ;REMARKS: <BC> and <FLAGS> are not saved
    
    CPUTXT:	lxi	h,_z80
    	lxi	b,0208h
    	mov	a,b
    	inr	b
    	rpo	; 2 is returned when z80
    	push	b
    	pop	psw
    	push	psw
    	pop	b
    	xra	a
    	ora	c
    	lxi	h,_i8085
    	mov	a,b
    	rz
    	lxi	h,_580VM1
    	mov	a,c
    	sui	9h
    	rp	; 1 is returned when KP580BM1
    	lxi	h,_i8080
    	xra	a
    	ret
    
    
    _i8080:	DB	"i8080",0
    _580VM1:   DB	"KP580BM1",0
    _z80:         DB	"z80",0
    _i8085:      DB	"i8085",0
    


    ---------- Post added at 06:30 ---------- Previous post was at 06:28 ----------

    Цитата Сообщение от ivagor Посмотреть сообщение
    Например так? :
    А лучше (на 2 байта короче) так:
    <A> - CPU type: 0-i8080, 1-KP580BM1, 2-1821BM85, 3-Zilog z80
    Код:
    cpudetect:	lxi	d, msg_z80
    		xra	a
    		dcr	a
    		mvi	a, 3
    		rpo
    		lxi	d, msg_8080
    		lxi	h, первые две буквы msg_8080
    		xra	a
    		shlx
    		inr	a
    		mov	d, h
    		mov	e, l
    		dsub	d
    		lxi	d, msg_vm1
    		rz
    		lxi	d, msg_8085
    		inr	a
    		ret
    Вот этот! Это-запредел. Мой уже смотрится уродливо :-)
    Последний раз редактировалось PPC; 08.09.2012 в 12:36.

  13. #10
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    2,869
    Благодарностей: 772
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В принципе можно еще пару байт сбросить заменой lxi d на mvi e, если адреса всех текстовых сообщений (вернее попарно msg_z80 и msg_8080; msg_vm1 и msg_8085) имеют одинаковый старший байт.

    Все варианты хорошие, только некоторые более спортивные

Страница 1 из 4 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Определение текущего адреса
    от Alex Rider в разделе Программирование
    Ответов: 52
    Последнее: 26.07.2012, 11: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, 18:29
  5. Определение номера дисковода
    от goodboy в разделе Программирование
    Ответов: 2
    Последнее: 21.06.2005, 23:54

Ваши права

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