User Tag List

Страница 33 из 81 ПерваяПервая ... 293031323334353637 ... ПоследняяПоследняя
Показано с 321 по 330 из 810

Тема: ZX Spectrum: аппаратная реализация на восьми микросхемах

  1. #321

    Регистрация
    05.09.2010
    Адрес
    г. Рязань
    Сообщений
    716
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    То есть флаг H в конечном итоге это флаг от суммы HL и операнда (послее шага суммирования их старших байтов) без учёта изначального С?
    А про MEMPTR у Янга я читал, что он равен (HL+1), где HL берётся до операции.

  2. #322

    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lisitsin Посмотреть сообщение
    То есть флаг H в конечном итоге это флаг от суммы HL и операнда (послее шага суммирования их старших байтов) без учёта изначального С?
    С учетом. В Higgins Emulator есть такой простой макрос:

    Код:
    #define HF_ARI(r, a, b) (((r) ^ (a) ^ (b)) & Z80_HF)
    Так вот для ADC16 вычислить HF можно с помощью HF_ARI(r, a, b), приняв r=(HL+OP+CF)/#100, a=HL/#100 и b=OP/#100. Во всех случаях HL, OP и CF -- значения до исполнения.

    Цитата Сообщение от Lisitsin Посмотреть сообщение
    А про MEMPTR у Янга я читал, что он равен (HL+1), где HL берётся до операции.
    Правильно. Я ошибся, действительно берется значение (HL + 1).
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  3. #323

    Регистрация
    05.09.2010
    Адрес
    г. Рязань
    Сообщений
    716
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    #define HF_ARI(r, a, b) (((r) ^ (a) ^ (b)) & Z80_HF)
    Ничего не понимаю. С H в последнем моём вопросе я немного ошибся. Исправляю:
    1. Прибавить к операнду изначалое значение С.
    2. Запомнить флаги P1, C1, H1 - после первой операции.
    2. Прибавить к HL текущее значение операнда используя компнда ADD, ADC.
    3. Запомнить флаги P2, C2, H2 после второго действия.
    4. Вычислить флаги P, C, H результата как P=(P1ORP2)XORC1, C=C1ORC2, H=H1ORH2, Z вычислить проверкой HL на ноль.
    То есть H взводится если он взводился хотя бы один раз - после первой операции сложения (старших байт) или же после второй операции сложения (старших байт).
    (надо мне как нибудь на досуге С++ выучить ... :-) )
    Последний раз редактировалось Lisitsin; 09.03.2011 в 20:53.

  4. #324

    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lisitsin Посмотреть сообщение
    То есть H взводится если он взводился хотя бы один раз - после первой операции сложения (старших байт) или же после второй операции сложения (старших байт).
    Да, можно считать HF = HF1 OR HF2.

    Но PF нужно считать как PF = PF1 XOR PF2.
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  5. #325

    Регистрация
    05.09.2010
    Адрес
    г. Рязань
    Сообщений
    716
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ADC16 PASSED !!!
    А вот SBC16 по этому алгоритму не хочет ...
    Вложения Вложения
    Последний раз редактировалось Lisitsin; 09.03.2011 в 23:02.

  6. #326

    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lisitsin Посмотреть сообщение
    А вот SBC16 по этому алгоритму не хочет ...
    Должен работать. Покажите свой код для ADC16 и SBC16, и, может быть, обойдемся без трейсингов в этот раз.
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  7. #327

    Регистрация
    05.09.2010
    Адрес
    г. Рязань
    Сообщений
    716
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Шлю в приложении:
    Вложения Вложения

  8. #328

    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lisitsin Посмотреть сообщение
    Эмуляция команд ADC16, SBC16.zip
    Вот здесь:

    Код:
    BST		F,CC			; копируем бит С
    BLD		BUF,0			; в младший разряд BUF
    SUB		ZL,BUF			; вычитаем флаг С, хранящийся в BUF
    SBC		ZH,ZERO		;  к операнду (регистр ZERO==0 – всегда)
    В ADC16 вы суммируете HL и CF и запоминаете флаги, а затем прибавляете получившееся к операнду и снова получаете нужные флаги, и это правильно. Это работает потому, что сложение коммутативно, и не имеет значения прибавлять ли CF к правому операнду и получить первую порцию флагов или прибавлять CF к левому и получить порцию флагов -- в любом случае последующее вычисление флагов даст правильный результат.

    Когда речь идет о SBC16 (то есть, о вычитании), то отнимая CF из HL вы получаете не те флаги, которые нужны. Здесь важна последовательность вычислений: сначала нужно добавить CF к правому операнду (а не к HL) и получить порцию флагов, а уже затем из HL вычесть получившееся и вычислить результирующие флаги.
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  9. #329

    Регистрация
    05.09.2010
    Адрес
    г. Рязань
    Сообщений
    716
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделел как во вложении, но всё равно failed:
    Вложения Вложения

  10. #330

    Регистрация
    05.09.2010
    Адрес
    г. Рязань
    Сообщений
    716
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    45
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ой !!! не взвожу N !!!
    Исправляюсь ...

Страница 33 из 81 ПерваяПервая ... 293031323334353637 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. реализация JavaScript-a на ZX-Spectrum-48k
    от bigral в разделе Программирование
    Ответов: 4
    Последнее: 10.01.2010, 12:02
  2. Аппаратная эмуляция GS/TFM/AY
    от Black_Cat в разделе Эмуляторы
    Ответов: 34
    Последнее: 03.05.2008, 23:34

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •