Одна тонкость, в production-strength коде всё-таки наверное не стоит использовать недокументированные команды, хотя нам - самое оно.
Одна тонкость, в production-strength коде всё-таки наверное не стоит использовать недокументированные команды, хотя нам - самое оно.
Недокументированные команды - моя слабость, пусть их использование и не очень хорошая вещь.
Кстати, версия 1.0 возвращала уникальные значения аккумулятора для каждого типа процессора, только не по порядку:
00 - 1821ВМ85
02 - 580ВМ80
0A - 580ВМ1
FF - Z80
Ну в 8085 их использование почти нормально. Когда у Intel его лицензировали чтобы сделать low power 80с85, то вообще в даташите описали, хотя Intel потом протестовал несильно, потому в последующих версиях камня разработчикам ядра приходится эти команды тащить/эмулировать.
По порядку, само собой лучше по понятным причинам: сдвиг влево, и вот уже готов ключ адреса перехода в таблице.
Оффтоп про 8085.
В прошлом году нагуглил название древней статьи про флаг x5. К сожалению в открытом доступе я ее не нашел. Может там ничего нового и нет, но все же интересно.
Пораскинул мозгами, есть вариант ещё на байт короче, чем самый короткий выше, весь на документированных командах и не требует инициализации <HL> в первые буквы сообщения.
Скорее всего и это ещё не предел.
Код:;_CPUTxt Detects CPU type, returns 0-terminated CPU type string ;_INPUT: NONE ;_OUTPUT: <A>-CPU type:0-i8085, 1-KP580BM1, 2 - i8080, 3-Zilog z80 CPUTXT: lxi b,0908h mvi a,2 inr a lxi h,_z80 rpo push b pop psw push psw pop b lxi h,_580VM1 mov a,c sub b rp add b lxi h,_i8080 rnz lxi h,_i8085 ret _i8080: DB "i8080",0 _580VM1: DB "KP580BM1",0 _z80: DB "z80",0 _i8085: DB "i8085",0
Круто, но вариант с недокументированными снова короче
Инициализировать HL буквами действительно не стоит, т.к. надпись 580ВМ80 испортится только на ВМ1 и ВМ85, соответственно ее никто не увидит.
Код:cpudetect: lxi d, msg_z80 xra a dcr a mvi a, 3 rpo lxi d, msg_8080 xra a shlx inr a mov h, d mov l, e dsub d lxi d, msg_vm1 rz lxi d, msg_8085 inr a ret
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ну тогда можно ещё короче
Код:cpudetect: lxi d, msg_z80 mvi a,2 inr a rpo lxi d, msg_8080 xra a shlx inr a mov h, d mov l, e dsub d lxi d, msg_vm1 rz lxi d, msg_8085 inr a ret
И еще короче:
Код:cpudetect: mvi a,2 inr a lxi d,_z80 rpo push psw pop b dcr a lxi d,_i8080 shlx ana c lxi d,_i8085 rz lxi d,_580VM1 dcr a ret
Интересно, какова нижняя граница? Волшебная однобайтовая операция + 4 разных reta (ну и lxi для сообщений)?
---------- Post added at 22:43 ---------- Previous post was at 22:41 ----------
Почему же, верю Вариантов то не так уж много (хотя сначала я думал, что вариантов почти нет).
18h
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)