Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ZX Spectrum: аппаратная реализация на восьми микросхемах (http://zx-pk.ru/showthread.php?t=13747)

Higgins 27th February 2011 19:48

Quote:

Originally Posted by Lisitsin (Post 362366)
Должно работать:

"CP #80" по #0B26 не взводит SF при A=#53.

(#53 - #80) mod #100 = #100 - #2D = #D3 = %11010011 -- старший разряд взведен.

Lisitsin 27th February 2011 19:54

Quote:

Originally Posted by Higgins (Post 362376)
"CP #80" по #0B26 не взводит SF при A=#53.

(#53 - #80) mod #100 = #100 - #2D = #D3 = %11010011 -- старший разряд взведен.

Работаю ...

Lisitsin 27th February 2011 21:51

Гениально !!!
пропал реальный глюк в бейсике.
10 PRINT 6
20 GOTO 10

RUN

раньше цикле так в десятом выдавал какой-нибудь глюк типа NONSENCE IN BASIC.
Теперь как часы - сколько не крути !!!

Но загрузчик автоматически пока не стартует - только со второго раза.

Higgins 27th February 2011 23:26

Quote:

Originally Posted by Lisitsin (Post 362403)
TRACE8_0.zip

Отлично. Теперь "ADD HL, HL" по #0B79 ошибочно взводит 5-й разряд регистра F. Инструкции "ADD HL/IX/IY, rr" должны копировать биты 3 и 5 старшей половины результата сложения в F.

Lisitsin 27th February 2011 23:43

В работе. А все 16-битные ADD, ADC, SBC так себя ведут, и что при этом происходит с флагом S ?
Спасибо ...

Higgins 28th February 2011 00:09

Quote:

Originally Posted by Lisitsin (Post 362431)
В работе. А все 16-битные ADD, ADC, SBC так себя ведут, и что при этом происходит с флагом S ?

Да, 16-разрядные ADD, ADC и SBC копируют биты 3 и 5 из старшей половины результата в F. При этом 16-разрядный ADD флаг S не меняет, а 16-разрядные ADC и SBC копируют старший (знаковый) разряд результата во флаг S.

Lisitsin 28th February 2011 18:48

1 Attachment(s)
Quote:

Originally Posted by Higgins (Post 362443)
Да, 16-разрядные ADD, ADC и SBC копируют биты 3 и 5 из старшей половины результата в F. При этом 16-разрядный ADD флаг S не меняет, а 16-разрядные ADC и SBC копируют старший (знаковый) разряд результата во флаг S.

Приветствую.
А ADD HL,rr копируют биты 3, 4 из старшего байта результата после операции сложения или из H до операции сложения? И ещё: я читал, что BIT 7,r влияет на S, копируя в него седьмой бит тестируемого байта. Правда ли сие? А остальные BIT n,r на него не влияют? Это я начитался "Z80 Undocumented Features (in software behaviour)" By Sean Young (sean@msxnet.org) (приложение)

Higgins 28th February 2011 19:45

Quote:

Originally Posted by Lisitsin (Post 362614)
А ADD HL,rr копируют биты 3, 4 из старшего байта результата после операции сложения или из H до операции сложения?

А что такое результат до операции сложения?

ADD копирует биты 3 и 5 из старшей половины результата сложения. Разумеется, после самого сложения.

Quote:

Originally Posted by Lisitsin (Post 362614)
И ещё: я читал, что BIT 7,r влияет на S, копируя в него седьмой бит тестируемого байта. Правда ли сие? А остальные BIT n,r на него не влияют?

Да, "BIT 7, ..." копирует старший бит в S и остальные не влияют. То есть инструкции "BIT" ведут себя так, как если бы сначала формировалась битовая маска с взведенным разрядом в указанной позиции, которая затем применялась бы к операнду инструкции. Тогда в случае сброшенного тестируемого разряда получаем взведенные ZF (в результате применения маски получаем ноль) и PF (количество взведенных разрядов равно нулю, то есть их количество условно четно). А если тестируемый разряд взведен и это старший (знаковый) разряд, тогда взводится SF.

Quote:

Originally Posted by Lisitsin (Post 362614)
By Sean Young

Хороший документ.

Lisitsin 28th February 2011 20:03

А у Sean Young по поводу битов 5 и 3 при ADD HL,rr я читаю:ADD HL,xx (use high byte of HL, i.e. H, before the addition) - типа до сложения. Или у меня ещё и с английским туговато?

Higgins 28th February 2011 20:39

Quote:

Originally Posted by Lisitsin (Post 362644)
А у Sean Young по поводу битов 5 и 3 при ADD HL,rr я читаю:ADD HL,xx (use high byte of HL, i.e. H, before the addition) - типа до сложения. Или у меня ещё и с английским туговато?

Полностью это выглядит так:

Quote:

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)
То есть "BIT n, (HL)" устанавливает P, Z и S как прочие инструкции "BIT", но флаги 3 и 5 устанавливает по-другому. И это правильно.

Однако то, что говорится о самом внутреннем регистре не верно. Во-первых, читая эти слова можно подумать, что внутренний регистр 8-разрядный. Это не так, и "BIT n, (HL)" копирует биты 3 и 5 из старшей половины 16-разрядного внутреннего регистра, MEMPTR.

Во-вторых, "ADD HL, ..." присваивает внутреннему регистру не старшую половину H до сложения, а увеличенное на единицу значение HL. Это происходит действительно до сложения (то есть до копирования результата сложения в HL), но здесь речь идет не о выставлении флагов 3 и 5, а о значении MEMPTR после исполнения "ADD HL, ...". Сама эта инструкция -- "ADD HL, ..." -- копирует во флаги 3 и 5 соответствующие разряды старшей половины результата сложения.

К слову, это относится только к "BIT n, (HL)", но не к "BIT n, (i+d)", которые копируют 3 и 5 биты адреса (i+d) в F.


All times are GMT +4. The time now is 16:58.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.