![]() |
Определение типа процессора на клонах Вектора
Выкладываю фрагмент своей программки с 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 Несомненно можно сделать короче, но мне не кажется это важным для данного применения. |
Спасибо, 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 _580VM1:DB "KP580BM1",0 _z80: DB "z80",0 |
У меня в архиве нашелся еще один вариант
Code:
cpu 8080 |
Узнаю свой код? Кто бы еще назвал метку hellojpg :D
|
1 Attachment(s)
Ну вы даете!
Мне стало стыдно за страшный первоначальный вариант, поэтому пришлось улучшать. Решил сделать под дос, поэтому в качестве прототипа взял вариант svofski. Code:
.org 100h |
1 Attachment(s)
Еще один вариант, он на два байта короче и, если заменить возвраты на переходы, может обойтись без стека (сама детектилка, без обращений к дос). Используются недокументированные команды 8080 и 8085.
Code:
.org 100hP.S. Добавил в архив "автономный" вариант, работающий без доса на клонах вектора. |
Ещё бы очень хотелось, чтобы в аккумуляторе возвращались различные значения, ну, скажем, 0,1,2,3 или, если слишком код распухнет какие-нибудь 1,2,4,8. Первое предпочтительнее, потому что легче потом использовать в самомодифицирующемся коде для вычисления адреса перехода.
|
Quote:
<A> - CPU type: 0-i8080, 1-KP580BM1, 2-Zilog z80, 3-1821BM85 Code:
cpudetect: lxi d, msg_z80<A> - CPU type: 0-i8080, 1-KP580BM1, 2-1821BM85, 3-Zilog z80 Code:
cpudetect: lxi d, msg_z80 |
Вот, прямо из печки
Code:
;OUTPUT---------- Post added at 06:30 ---------- Previous post was at 06:28 ---------- Quote:
|
В принципе можно еще пару байт сбросить заменой lxi d на mvi e, если адреса всех текстовых сообщений (вернее попарно msg_z80 и msg_8080; msg_vm1 и msg_8085) имеют одинаковый старший байт.
Все варианты хорошие, только некоторые более спортивные :) |
| All times are GMT +4. The time now is 23:40. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.