PDA

Просмотр полной версии : Проясните по поводу регистра флагов Z80



Shiru
05.05.2005, 13:23
Память моя дырявая, и мозги уже не те. Посмотрите, правильно я понимаю действие флагов, и поясните насчёт Half Carry, Parity/Overflow

bit 7 - Sign - знак, копия bit 7 аккамулятора
bit 6 - Zero - устанавливается, если A=0
bit 5 - undoc - копия пятого бита аккамулятора
bit 4 - Half Carry - полуперенос (?)
bit 3 - undoc - копия третьего бита аккамулятора
bit 2 - Parity/Overflow - устанавливается, если установлено чётное кол-во бит в аккамуляторе (?)
bit 1 - Negative (Substract) - устанавливается, если последняя операция была вычитанием
bit 0 - Carry - устанавливается, если результат операции превысил разрядность аккамулятора (если в результате операции изменился bit 7 аккамулятора)

Half Carry - правильно-ли я понимаю, что он устанавливается, если в процессе операции изменился bit 3 аккамулятора? Зачем вообще используется этот флаг?

Насчёт P/O что-то я совсем запутался, зачем и как он работает.

dwt
05.05.2005, 16:00
Не совсем верно... ;)
Бит 0 - флаг переноса C (устанавливается или сбрасывается в зависимости от результатов сравнения (означает больше/меньше);
Бит 1 - флаг сложения/вычитания N (он редко используется);
Бит 2 - флаг переполнения
Бит 3 - не используется;
Бит 4 - флаг полупереноса H (тоже редко используется);
Бит 5 - не используется;
Бит 6 - флаг "нуля" Z (установлен, если в результате сравнения - "совпадение"; или в результате какой-либо логической операции в аккумуляторе (р-р А) - 0);
Бит 7 - флаг знака S (честно говоря, не помню для чего он).

Shiru
05.05.2005, 16:24
Ну, 'редко используется' - это, конечно, хорошо (именно поэтому я и не знаю в деталях действие этих флагов, собственно), но в эмуляторе-же не напишешь - 'Извините, эта программа не пойдёт, потому-что флаг редко используется' :) Хотелось-бы более точной информации. Мне не очень понятна логика установки всех этих флагов после различных операций (особенно Half-Carry).

dwt
05.05.2005, 16:28
Ну извини, написал что знал... Попробуй поискать мануалы по Z80... Я сегодня еще дома в книжках посмотрю, может найду по-подробнее.

Shiru
05.05.2005, 16:32
Ну извини, написал что знал...
Да это я понимаю, за это спасибо:)

Попробуй поискать мануалы по Z80...
Их есть у меня. Но они довольно мутные, в некоторых на эту тему противоречия. Поэтому и спрашиваю - думаю, те, кто писал на ZX плотно, лучше знают, что и как. Я хоть и писал, но кроме C,Z флагов никогда другими не интересовался/пользовался, хватало как-то...

Lion17
05.05.2005, 16:39
Насчет Carry и HalfCarry
они устанавливаются при изменении 8(а не 7-го, те бита за пределами 8 битного регистра) и 4 битов (то есть когда происходит перенос или заем байта или полубайта)
Для примера:
0100'0100+0100'0100=1000'1000 => CF=0,HC=0, но P/O=1
1000'0000+1000'0000=1'0000'0000 => CF=1,HC=0, P/O=1
0000'0000-0000'0001=1'1111'1111 => CF=1, HC=1,P/O=1
HC используется для коррекции после сложения и вычитания двоично-десятичных чисел

dwt
05.05.2005, 16:40
Я хоть и писал, но кроме C,Z флагов никогда другими не интересовался/пользовался, хватало как-то...
Да я сам тоже использую в основном C, Z и как-то раз использовал PO/PE (переполнение). Но специфику использования последнего уже не помню (справочник память освежит ;) ).

Shiru
05.05.2005, 16:51
Насчет Carry и HalfCarry
Спасибо! Меня сбила с толку такая фраза из книжки (ZXASMDOC.ZIP, лежит на VT в books):

Флаг переполнения: этот флаг будет установлен (=1), если содержимое бита 7 8-битового числа изменяется во время операции
А насчёт bit 5 и bit 3, P/O - моя информация верна?

captain cobalt
05.05.2005, 18:52
Несколько дополнительных замечаний.

bit 6 - Zero - устанавливается, если A=0 Установка может быть связана не только с аккумулятором. INC\DEC любого регистра также устанавливает этот флаг. Однако, INC\DEC регистровой пары не работает с этим флагом (поэтому в стародавние времена регистры пары OR для этого).

bit 4 - Half Carry - полуперенос (?)
bit 2 - Parity/Overflow - устанавливается, если установлено чётное кол-во бит в аккамуляторе (?)
bit 0 - Carry - устанавливается, если результат операции превысил разрядность аккамулятора (если в результате операции изменился bit 7 аккамулятора)
Машинная арифметика - выполняется по модулю в кольце целых чисел. Диапазон беззнакового байта [0..255], знакового байта [-128..127]. Когда результат выходит за эти границы, это называется wraparound. И тогда
bit 0 - Carry - Беззнаковый wraparound
bit 2 - Parity/Overflow - знаковый wraparound
bit 4 - Half Carry - wraparound младших 4 бит.

Самое разнообразное применение имеет флаг Parity/Overflow
-- в арифметических операциях (ADD\ADC\SUB\SBC\CP) - это знаковый wraparound
-- в логических операциях (AND\OR\XOR..) - это чётность количества бит результата
-- в блочных операциях без автоматического повторения (LDI и т. п.) - признак того, что BC обнулился (блок закончился)
-- команды LD c аккумулятором и регистром I\R - копируют триггер прерываний во флаг P\O.

jtn
05.05.2005, 19:17
где то была инфа что неиспользуемые биты копируются из регистра адреса (вроде PC). поэтому sts глючил так как выполняет команды из резидента, не оттуда где они находятся. короче авторы эмуляторов лучше всех должны это знать или Иван Рощин =)

Shiru
05.05.2005, 19:20
где то была инфа что неиспользуемые биты копируются из регистра адреса (вроде PC).
Я вот вычитал, что из регистра A. Либо из регистра операнда (опять расхождение).

Ronin
05.05.2005, 19:52
А насчёт bit 5 и bit 3, P/O - моя информация верна
ну да насколько я в курсе. но андок он и в африке андок...


Их есть у меня.

из книжки (ZXASMDOC.ZIP
вообще-то под мануалом понимается обычно дока от Zilog.com :)

итак, S,Z,C - самые популярные и пояснять не надо.
N - последнее сложение(0)/вычитание(1), используется для DAA (BCD коррекция)
H - заем/перенос в 4 бит, все верно, только к BCD прямого отношения не имеет. разве что для 4-битной арифметики коей BCD тоже является (перенос между разрядами)
P/V (у Zilog именно так пишется) - это в принципе как бы два флага. ну т.е. один флаг который занимается двумя разными вещами (смотря какая операция), точнее даже четырьмя :), сохраняя еще и статус триггера прерываний IFF при обращении к R, и в блочных операциях (ldi/ldir...) его напрягают.
P - ну да, когда он P - то =1 при четном количестве едениц в аккумуляторе.
V - арифметическое переполнение - это насколько я понимаю такая хрень которую придумали для работы в дополнительном двоичном коде (о, воспоем оду троичной симметричной системе ;) ), ну т.е. когда ты к 0111111 (+127) прибавишь 1 получится 1000000 (-1) что есть переполнение (ну и с вычитанием таже фигня) - вот для его отслеживание и есть флаг V.

Ronin
05.05.2005, 19:55
Я вот вычитал, что из регистра A. Либо из регистра операнда (опять расхождение).
так и есть. загрузи STS и убедись лично.

Shiru
05.05.2005, 19:56
вообще-то под мануалом понимается обычно дока от Zilog.com
Есть и такое, конечно:)

Shiru
05.05.2005, 19:58
так и есть. загрузи STS и убедись лично
У меня реала нет, а насчёт эмулей я не могу быть 100% уверен (автором эмулей просьба не обижаться, просто я параноик). Так - это как, только из A или из операнда?

Ronin
05.05.2005, 20:07
блин, вот емуляторшики нах. (смайлик)
загрузил STS6.2 на реале (z84c0010)
и дабы не подозревать Сталкера в халтуре сделал так
ld a,#28
or a
push af
pop af
ret
и вызвал это дело командой call.
результат - пошаговый трейс, выход после call и содержимое стека - все одназначно указывает на то что биты 3,5 копируются из аккумулятора.

Ronin
05.05.2005, 20:09
блин, вот емуляторшики нах

У меня реала нет
сорри, это я не тебе ;) а так, вообще ;) да и вообще пошутил.

Ronin
05.05.2005, 20:15
только из A или из операнда?
сделал еще так
ld a,#08
add a,#20
push af
pop af
ret

в результате - оба флага (3,5) установлены.

Shiru
05.05.2005, 20:18
сорри, это я не тебе а так, вообще да и вообще пошутил
У меня Спринтер пылится перед телевизором;) Но кто его знает, какие там расхождения у Z84C15 с обычным Z80.. И вообще я очень подозрителен в последнее время;)

все одназначно указывает на то что биты 3,5 копируются из аккумулятора.
Но это не доказывает, что биты 3,5 не копируются из операнда - в данном тесте операндом является сам аккамулятор. Или я туплю?

Shiru
05.05.2005, 20:20
в результате - оба флага (3,5) установлены.
А, ну тогда из аккамулятора. Спасибо за тест:)

Ronin
05.05.2005, 20:27
У меня Спринтер пылится перед телевизором Но кто его знает, какие там расхождения у Z84C15 с обычным Z80
зря пылится ;)
а у меня нет никаких оснований полагать что он отличается от CMOS ядра Z84C00xx, которое конечно отличается от NMOS ядра, но не так же сильно :)

jtn
05.05.2005, 21:42
Я вот вычитал, что из регистра A. Либо из регистра операнда (опять расхождение).
да, извините.
это я с защитой от отладки стсом попутал.


У меня Спринтер пылится перед телевизором Но кто его знает, какие там расхождения у Z84C15 с обычным Z80.. И вообще я очень подозрителен в последнее время
имхо отличается, там внутренние порты есть. надо шиты читать...

Shiru
05.05.2005, 22:01
имхо отличается, там внутренние порты есть
Про его порты я знаю, а вот 100%-ли там совместимость в плане команд и прочего - нет.

Vitamin
05.05.2005, 22:07
насчет битов 5 и 3 не совсем верно. туда копируются не биты аккумулятора, а биты того регистра, над которым совершается операция. логическая или арифметическая. чаще всего (и по умолчанию, если регистр не определен) это именно аккумулятор.

Vitamin
05.05.2005, 22:11
вот что мне подсказали по этому поводу в конференции фидо.

2) Undocumented flag affection & operation [5][3]
-------------------------------------------------

2.1) Flag register bits [5][3]

The F (flag) register has the following bits:

F 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
-----------+-----+------+-----+-----+-----+-----+-----
flag S | Z | 5 | H | 3 | P/V | N | C

S flag:
set if the 2-complement value is negative. It's simply a copy of the most
significant bit.

Z flag:
Set if the value is zero.

5 flag:
A copy of bit 5 of the result.

H flag:
The half-carry of an addition/subtraction (from bit 3 to 4). Needed for
DAA correction.

3 flag:
A copy of bit 3 of the result.

P/V flag:
This flag can either be the parity of the result, or the 2-compliment
signed overflow (2-compliment value doesn't fit in the register).

N flag:
Shows whether the last operation was an addition (0) or an subtraction
(1).
This information is needed for DAA.

C flag:
The carry flag, set if there was a carry after the most significant bit.

In this part, the following notation is used for flag affection:

* indicates the effect is non-standard (see the notes).
0 indicates the flag is reset.
1 indicates the flag is set.
- indicates the flag is not affected.
S,Z,5,H,3,P,V,N,C indicate the flag is set as above.

Notice there's no ``unknown'' or ``undefined'' here. :)


2.2) All instructions that affect the flags [1][2][3]

This section lists all the instructions that affect the flags, and how they
do that.


2.2.1) 8 Bit arithmetic and logical

The 8 bit arithmetic group is straightforward:

ADD/ADC/SUB/SBC SZ5H3VNC

All standard flags ..

CP r SZ*H*VNC

A CP is simply a SUB with the result thrown away. Flag 5 and 3 are copied
from the operand, not the result (which is thrown away anyways).

INC/DEC r SZ5H3VN-

AND r SZ513P00
OR/XOR r SZ503P00

RLCA/RLA/RRCA/RRA --503-0C
RLC/RL/RRC/RR r SZ503P0C
SLA/SLL/SRA/SRL r SZ503P0C SLL is like SLA except bit 0 gets set
RRD/RLD SZ503P0- Flags set on result in A


2.2.2) 16 Bit arithmetic

The 16 bit additions are a bit more complicated. 16 bit additions are done
in
two stages: first the lower bytes are added, then the two higher bytes. The
S,5,H,3 flags are affected as by the second 8 bit addition. Z is set if the
whole 16 bit result is 0.

ADD s --***-0C
ADC/SBC s SZ***VNC


2.2.3) BIT instruction [5] [6]

BIT n,r *Z513*0- r is one of the 8 bit registers.

BIT behaves much AND r,2^n with the result throw away and the C flag is
unaffected. So in effect:
Z = set if the tested bit is reset.
S = set if n=7 and tested bit is set.
5 = set if n=5 and tested bit is set.
3 = set if n=3 and tested bit is set.
P/V = set like Z.

BIT n,(IX/IY+d) *Z*1**0-

Again, P/V is set like Z and S is if set n=7 and the tested bit is set. But
the 5 and 3 flags are different: they are a copy of bit 5 and 3 of the high
byte of IX/IY+d (the value after the addition of d to IX or IY).

BIT n,(HL) *Z*1**0-

P/V, Z, S set as the other BIT instructions, but the 5 and 3 flags are
different. Okay, brace yourself. They are a copy of an internal register of
the Z80, which is set as follows:

ADD HL,xx (use high byte of HL, i.e. H, before the addition)
LD r,(IX/IY+d) (use high byte of the resulting address IX/IY+d)
JR d (use high byte target address of the jump)
LD r,r' (not affected)
others not tested -- any additions welcome!


2.2.4) Other non-block instructions [2] [5]

CCF --***-0*

C=1-C, H as old C. 5, 3 from A register

SCF --*0*-01
CPL --*1*-1-

5, 3 from A register.

NEG SZ5H3V1C

DAA SZ5*3P-*

See below (2.3) for more information.

LD A,R/LD A,I SZ503*0-

P/V contains a copy of IFF2.

IN r,(C) SZ503P0-

Also true for IN F,(C) / IN (C).


2.2.5) Memory block instructions [2] [5]

LDI/LDIR/LDD/LDDR --*0**0- P/V set if BC not 0
5 is bit 1 of (transferred byte + A)
3 is bit 3 of (transferred byte + A)

So add A to the (last) transferred byte (from (HL)), and bit 1 of that
8 bit value is flag 5, and bit 3 is flag 3.

CPI/CPIR/CPD/CPDR SZ*H**1- P/V set if BC not 0
S,Z,H from (A - (HL) ) as in CP (HL)
3 is bit 3 of (A - (HL) - H)
5 is bit 1 of (A - (HL) - H)

CPI instructions are weird too. The test is simply like a CP (HL). Flag 3
and
5 are set like this: Take A, subtract the last (HL), and then decrease it
with 1 if the H flag was set (/after/ the CP). Bit 1 of this value is flag
5, bit 3 is flag 3.


2.2.6) I/O Block instructions [5] [6]

INI/INIR/IND/INDR SZ5*3*** Flags affected as in DEC B
OUTI/OTIR/OUTD/OTDR SZ5*3*** Flags affected as in DEC B

Another weird one. S,Z,5,3 are affected by the decrease of B, like in DEC B.
The N flag is a copy of bit 7 of the last value read from/written too the
I/O port. The C and H flag is set as follows: Take register C, add one to it
if the instruction increases HL otherwise decrease it by one. Now, add the
the value of the I/O port (read or written) to it, and the carry of this
last addition is copied to the C and H flag (so C and H flag are the same).
Beats me, but tests show it to be true.

Pedro Gimeno ({[email protected]}) has figured out how the P/V flag is
affected. The result depends on the B register, the lower 3 bits of the C
register and the lower 3 bits of the value from the I/O port. This next part
is written by him. Whatever he says about INI/INIR is true for OUTI/OTIR,
and what he says about IND/INDR is true for OUTD/OTDR.

I use the notation C.2 to mean bit 2 of C. "inp" is the byte being
input.

First, look at bits 1 and 0 of both C and inp and look up this table to
obtain a temporary result:

C.1 C.0 inp.1 inp.0 Temp1
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 0
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 1
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 0 1 1 1
1 1 0 0 0
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0

You'll need also an additional temporary result which depends on B (all
of its bits), according to the following pseudocode:

If B.3 = B.2 = B.1 = B.0 = 0 then [i.e. if B and 0Fh = 0 then]
let Temp2 = Parity(B) xor (B.4 or (B.6 and not B.5))
else
let Temp2 = Parity(B) xor (B.0 or (B.2 and not B.1))

where Parity(B) is defined as not (B.0 xor B.1 xor B.2 xor B.3 xor B.4
xor B.5 xor B.6 xor B.7), i.e. 1 if B has an even number of bits = 1,
and 0 otherwise (the usual parity function).

Note that I obtained the operation (B.0 or (B.2 and not B.1)) from the
next table using Karnaugh maps:

B.2 through B.0 000 001 010 011 100 101 110 111
Value 0 1 0 1 1 1 0 1

For completeness here's the full table of values of Temp2 according to
B:

0123456789ABCDEF <- (low nibble)
00 0011010011001011
10 0100101100110100
20 1100101100110100
30 1011010011001011
40 0100101100110100
50 1011010011001011
60 0011010011001011
70 0100101100110100
80 1100101100110100
90 1011010011001011
A0 0011010011001011
B0 0100101100110100
C0 1011010011001011
D0 0100101100110100
E0 1100101100110100
F0 1011010011001011
^
(high nibble)

And finally, the value of the P/V flag is:

P/V = Temp1 xor Temp2 xor C.2 xor inp.2
IND / INDR:

The operations to obtain the P/V flag are the same as for INI/INIR but
the table used to lookup Temp1 is different:

C.1 C.0 inp.1 inp.0 Temp1
0 0 0 0 0
0 0 0 1 1
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 1

Vitamin
05.05.2005, 22:12
2.3) Undocumented operation [1][5]


2.3.1) DAA [4] [5]

This instruction is useful when you're using BCD values. After an addition
or subtraction, DAA makes the correction so the value is the correct BCD
value again.

The correction done is as in the following table [4]:

N | C | high | H | low | # added | C after
| | nibble | | nibble | to A | execution
--+---+--------+---+--------+---------+-----------
add, adc, inc operands:
0 0 0-9 0 0-9 00 0
0 0-8 0 a-f 06 0
0 0-9 1 0-3 06 0
0 a-f 0 0-9 60 1
0 9-f 0 a-f 66 1
0 a-f 1 0-3 66 1
1 0-2 0 0-9 60 1
1 0-2 0 a-f 66 1
1 0-3 1 0-3 66 1
-------------------------------------------------
sub, sbc, dec, neg operands:
1 0 0-9 0 0-9 00 0
0 0-8 1 6-f fa 0
1 7-f 0 0-9 a0 1
1 6-f 1 6-f 9a 1

This table is all I know about DAA operation.

Emulator builders: this instruction is hard to emulate. The Intel 80x86
equivalents are more or less the same, but differ for some input values
(not in the table?). If you're not using assembly, the best way IMHO is
to put all possible output values (for A and F registers) in a table. The
output depends on the following inputs: A register and H,N,C flags. That's
11 bits in total, so the table will have size: 2^11*2 = 4096 bytes, which
isn't too bad.

Ronin
05.05.2005, 23:27
имхо отличается, там внутренние порты есть. надо шиты читать...
ну порты и ядро - большая разница. да и в шитах такие весчи (недокументированные) не пишут.


туда копируются не биты аккумулятора, а биты того регистра, над которым совершается операция
ну да, результата. а то ту все про аккумулятор, а флаги-то в соответствии с результатом выставляются. даже проверил, ld h,#07:inc h - 3 бит устанавливается.

Shiru
06.05.2005, 00:11
Ого, сколько всего. Всем спасибо за подробную информацию:)

Robus
06.05.2005, 01:39
Ну, 'редко используется' - это, конечно, хорошо (именно поэтому я и не знаю в деталях действие этих флагов, собственно), но в эмуляторе-же не напишешь - 'Извините, эта программа не пойдёт, потому-что флаг редко используется' :) Хотелось-бы более точной информации. Мне не очень понятна логика установки всех этих флагов после различных операций (особенно Half-Carry).

Всё зависит от того, на сколько ты хочешь сделать эмулятор точной копией Z80 !!! Вообще-то у половины команд на Z80 нет точной логики в установке флагов ... Я, конечно, не имею в виду команды простых логических операций, хотя и там есть приколы ...

У каждой комманды чуть-ли не трёхэтажная логика работы с битами ... Я предполагаю это сделано в качестве защиты от копирования процессоров, поскольку я не один раз убеждался что в аналогах Zilog'а просто по-другому работают многие биты не говоря уже о советских монстрах типа ВМ80 ...

Я делал свой эмулятор и у меня есть ооооочень точное описание каждого бита флага на каждую команду ... Хотя мой эмулятор не доделан и там где-то есть глючёк, но за-то флаги он эмулирует очень точно ... Самая мощная команда это была INI, я пока выявил зависимость флагов от значений регистров чуть не умер, кроме всего на флаги влияют значение на входе порта ... А с помощью комманды LDI можно, например, XOR'ить ...

Вообщем, если нужно могу помочь с отдельными командами ... Многие мои записи в бумажном виде, ну или в виде АСМА на ПиЦи, могу поделиться любой ...

Shiru
06.05.2005, 12:10
Самая мощная команда это была INI, я пока выявил зависимость флагов от значений регистров чуть не умер, кроме всего на флаги влияют значение на входе порта ...
Ты что, значения undefined бит выявлял что-ли? 8)

Ronin
06.05.2005, 23:31
Вообще-то у половины команд на Z80 нет точной логики в установке флагов
нееее, логика она всегда есть, на то он и процессор ;) и потом там всего 8500 транзисторов, где там защиту от копирования процессора прятать. Фаджин хитрый мужик, он _просто_ _хорошо_ сделал z80, так что на протяжении четверти века его не изменяли, только в ЦМОС переложили, да всякие рюшечки привешивали.

А полезная информация она завсегда полезна, особенно когда ей делятся ;)

Shiru
07.05.2005, 00:01
Ronin, в квотинге ошибся:)

lvd
07.05.2005, 00:39
нееее, логика она всегда есть, на то он и процессор ;) и потом там всего 8500 транзисторов, где там защиту от копирования процессора прятать. Фаджин хитрый мужик, он _просто_ _хорошо_ сделал z80, так что на протяжении четверти века его не изменяли, только в ЦМОС переложили, да всякие рюшечки привешивали.

По поводу отсутствия точной логики: в нмос 6502 есть куча недокументированных команд. Большая их часть - когда производятся странные действия со странными операндами (например операнд = заANDенные регистры X и A, по сути оба выдаются на внутреннюю шину одновременно), меньшая часть - где выполняется СЛУЧАЙНАЯ операция - разная от проца к процу и от одного выполнения к другому, и есть вообще 1 штука, когда проц дохнет (не в смысле сгорает, а в смысле повисает намертво, только ресет спасает =). В Z80 конечно всё более корректно (покрмере убийственных команд нету, а все недокументированные более-менее осмысленные, и более того, есть ОЧЕНЬ полезные команды - те же половинки ix/iy), но от наличия полностью неопределённых (==случайных) результатов флагов в особо клинических случаях никто же не может застраховаться?...

Ronin
07.05.2005, 01:14
(например операнд = заANDенные регистры X и A, по сути оба выдаются на внутреннюю шину одновременно), меньшая часть - где выполняется СЛУЧАЙНАЯ операция - разная от проца к процу и от одного выполнения к другому, и есть вообще 1 штука, когда проц дохнет

ну это вообще клиника... громко ругался бы матом, если б только благодаря этой халтуре этот проц не стал тем первым кем он стал... а он стал ;)

Robus
07.05.2005, 01:38
Ты что, значения undefined бит выявлял что-ли? 8)

Так точно, именно их !!! Я вообще всегда интересовался тем, о чём нигде не написано ... Я, конечно, не могу утверждать что у меня супер точно всё выявлено, возможно, кто-то и найдёт недочёт, но вроде методом "тыка", я таки выявил оочень много ...

lvd
07.05.2005, 10:00
ну это вообще клиника... громко ругался бы матом, если б только благодаря этой халтуре этот проц не стал тем первым кем он стал... а он стал ;)

Почему собственно халтура? Никто эти опкоды не документировал и не обещал, что при их выполнении будет все ОК! Так что всё нормально. А стал он таким прежде всего из-за низкой цены - 25$ что ли баксов при цене всяких Z80 и 6800 в те времена под 100$, а то и больше.

А вот в 65c02 добавили несколько новых (документированных) содержательных команд, а остальные сделали нопами - опять скажешь халтура?...

lvd
07.05.2005, 10:01
Так точно, именно их !!! Я вообще всегда интересовался тем, о чём нигде не написано ... Я, конечно, не могу утверждать что у меня супер точно всё выявлено, возможно, кто-то и найдёт недочёт, но вроде методом "тыка", я таки выявил оочень много ...

Гм, а какая от этого практическая польза? =)

Ronin
08.05.2005, 21:20
А стал он таким прежде всего из-за низкой цены - 25$ что ли баксов
вот именно это я и имел ввиду :)


Почему собственно халтура
ну ты сам сказал - два операнда выдаются одновременно на внутреннюю шину - это по-твоему - нормально ? это по-моему опасно.
а насчет недокументированности у меня вполне определенная позиция - не документировано, НЕ ЕШЬ!

Ronin
08.05.2005, 21:43
кроме разве что половинок IX/IY - они кстати позже документированы например в z380.

Alex/AT
10.05.2005, 09:03
На самом деле логика везде есть... я сейчас готовлю электронную брошюрку, в которой описано все, что мне известно. Скоро выложу. Буду очень рад, если community дополнит ее ;)

SMT
10.05.2005, 16:56
я сейчас готовлю электронную брошюрку, в которой описано все, что мне известновыпускай бету-версию. кто найдёт ошибки, дополнит

lvd
12.05.2005, 19:17
ну ты сам сказал - два операнда выдаются одновременно на внутреннюю шину - это по-твоему - нормально ? это по-моему опасно.

Дык вполне безопасно - это ж НМОП, и 'лог. И' там именно так и делается. Основа НМОП - это относительно слабые пуллапы из 'обогащённых' (приокрытых всегда) НМОП-полевиков и относительно мощные НМОП-ключи, которые на землю тягают.



а насчет недокументированности у меня вполне определенная позиция - не документировано, НЕ ЕШЬ!

Ну почему ж, индексные половинки очень вкусные, а их недостаток отрицательно влияет на самочувствие =)))

Ronin
12.05.2005, 23:51
Ну почему ж, индексные половинки очень вкусные, а их недостаток отрицательно влияет на самочувствие =)))

эээ, я про половинки вроде написал что они "документированы в более поздних процессорах", это следует читать как "половинки я вообще-то ем" ;)

зы// кстати в eZ80 операции на половинках документированы.

lvd
13.05.2005, 00:34
эээ, я про половинки вроде написал что они "документированы в более поздних процессорах", это следует читать как "половинки я вообще-то ем" ;)

Я тоже ем, а ещё иногда закусываю sli, но вот зачем нужно юзать все остальные недок. команды - искренне недоумеваю! =) А вообще раз не документировано конкретно в z80 старых - нефиг и юзать, в соответствии с твоей ортодоксальной позицией, ведь более ранние не связаны с более поздними?... Так? :) =) :) =) :) =) :)



зы// кстати в eZ80 операции на половинках документированы.
Не знаю, мне как-то монстры от зелога не прикалывают. Даёшь обычный 40пиновый Z84C0100! =)))

Ronin
13.05.2005, 08:02
ортодоксальной позицией
никакая она не ортодоксальная, а вполне нормальная.
поди например пц-шника спроси, часто он юзает недок-е команды, скорее всего ответ будет "какие-какие?"


Не знаю, мне как-то монстры от зелога не прикалывают. Даёшь обычный 40пиновый Z84C0100! =)))

чего его давать, иди и бери :) тут в начале топика реальщиков не могли найти чтоб проверить, меж прочим ;)

lvd
14.05.2005, 12:06
никакая она не ортодоксальная, а вполне нормальная.

Да шутю я, шутю =)



поди например пц-шника спроси, часто он юзает недок-е команды, скорее всего ответ будет "какие-какие?"

Правильно, потому что там по любой левой команде проц трапается как по недопустимой, и не только там - например в 68к с самого начала по всем кривым командам тоже трапалось. Кстати, помню, на первых пнях был-таки глюк - команда #f0 #0f #c7 #c8 вешала их намертво =))



чего его давать, иди и бери :) тут в начале топика реальщиков не могли найти чтоб проверить, меж прочим ;)

Гы, подколол! =) z84c0100 по обозначениям зилога был бы на 100мгц =)))