Shaos wrote:Shaos wrote:...теперь я рассматриваю привязку к маку сетевой карточки, которая также должна будет работать на IBM PC совместимых машинах с шиной ISA8 или ISA16...
Вот чего подумалось - я тут от Z80 (недавно
почившего в бозе) начал потихоньку отходить, больше концентрируясь на 8080/8085 - можно попробовать написать прошивку платки таким образом, чтобы она работала и там, и сям (а ещё у меня есть PC XT-совместимый комп с процом V20, который умеет работать и как 8088, и как 8080) - в перспективе у меня может появиться свой собственный
компик на 8085 с ISA-шиной, где эта сетевушка замечательно пригодилась бы...
P.S. Вот как в бложеке
https://www.bramm.dk/blog/?page_id=554 предлагается различать Z80 и 8080:
Code: Select all
mvi a,2
ora a ; Clear the N flag
push psw
pop d
ana e ; If a=0, this is a Z80, else a=2
Но похоже 8085 тоже как и Z80 имел флаг N (бит 1), который был недокументированный у 8085 и в народе назывался V, т.е. код выше задетектит 8085 как Z80 - надо ещё что-то найти, чтобы отличать 8085 от Z80, например второй недокументированный флаг у 8085 в народе называется K (бит 5), одна из функций которого сохранять факт 16-битного переполнения при выполнении инструкций INX/DCX и ещё кое-что (см.
https://www.righto.com/2013/02/looking-at-silicon-to-understanding.html) - этот флаг в 8080 всегда равен 0, а Z80 сохраняет туда копию бита 5 результата (или аргумента, если это сравнение)...
P.P.S. Подробнее про флаг 5 у 8085 от Кена Ширриффа (righto.com):
One mystery was the purpose of the K flag: "It does not resemble any normal flag bit."[1] Its use for increment and decrement is clear, but for arithmetic operations why would you want the exclusive-or of the overflow and sign? It turns out the the K flag is useful for signed comparisons. If you're comparing two signed values, the first is smaller if the exclusive-or of the sign and overflow is 1.[6] This is exactly what the K flag computes.
т.е. бит 5 будет содержать 1 если при сравнении со знаком первый аргумент был меньше второго - например после того как мы поняли, что это 8085 или Z80 регистр A будет содержать #00 (0) и если его сравнить скажем с #FF (-1), то в случае 8085 бит 5 флагов станет равным 0, а в случае Z80 - 1:
Code: Select all
mvi a,2
ora a ; Clear the N flag
push psw
pop d
ana e ; If a=0, this is a Z80 or 8085, else it's 8080
jnz its_8080
cpi #FF
push psw
pop d
mvi a,#20
ana e ; If a=0, this is a 8085, else it's z80
jz its_8085
its_z80:
...
its_8085:
...
its_8080: