Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Отладка монитора на FPGA (Орион-ПРО)

  1. #1
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Отладка монитора на FPGA (Орион-ПРО)

    День добрый.
    Сегодня дело дошло до запуска основного ROM для Орион-ПРО, но что-то пошло не так и работает некорректно.
    К железу: процессор Z80 "железный", как и память основная. Остальное всё "спрятано" в FPGA.
    Проблема: при старте есть операции CALL, и там я вижу 2 записи - по адресам 0x0000 и 0xFFFF.
    Вопрос: Откуда взялся SP=0???
    ROM брал из архива OrionZEmu, файл ROM1-321.BIN, находится по адресу 0x0000.
    Вот дизасм того места, вместе с кодом до него:
    Код:
    ROM:0000 ; Segment type: Pure code
    ROM:0000                 segment ROM
    ROM:0000
    ROM:0000 loc_0:                                  ; CODE XREF: ROM:0E59p
    ROM:0000                                         ; ROM:0E5Ap ...
    ROM:0000                 jp      loc_15B
    
    ROM:015B ; ---------------------------------------------------------------------------
    ROM:015B
    ROM:015B loc_15B:                                ; CODE XREF: ROM:loc_0j
    ROM:015B                 ld      hl, 0A000h
    ROM:015E
    ROM:015E loc_15E:                                ; CODE XREF: ROM:0161j
    ROM:015E                 dec     hl
    ROM:015F                 ld      a, h
    ROM:0160                 or      l
    ROM:0161                 jr      nz, loc_15E
    ROM:0163                 ld      a, 98h ; 'Ш'
    ROM:0165                 out     (3), a
    ROM:0167                 ld      a, 92h ; 'Т'
    ROM:0169                 out     (1Dh), a
    ROM:016B                 ld      a, 16h
    ROM:016D                 out     (3Bh), a
    ROM:016F                 ld      a, 56h ; 'V'
    ROM:0171                 out     (3Bh), a
    ROM:0173                 ld      a, 96h ; 'Ц'
    ROM:0175                 out     (3Bh), a
    ROM:0177                 ld      a, 80h ; 'А'
    ROM:0179                 out     (7), a
    ROM:017B                 out     (0Bh), a
    ROM:017D                 ld      a, 50h ; 'P'
    ROM:017F                 out     (0Ah), a
    ROM:0181                 call    sub_19A2
    Вот то, что я вижу на анализаторе в это время:

    Сигналы, начиная с ZCLK, - сигналы на "ногах" самого Z80 (после преобразователя уровней, потому что анализатор внутри FPGA). Собственно, начало записи в память находится после пунктирной вертикальной линии.

    PS: Из памяти потом читается в обратном порядке (0xFFFF, 0x0000), первое чтение вернуло ранее записанный результат (0x84). Так что преобразователи уровней тут точно не при чём - их работа стабильна "как часы", в частности переключение направления шины данных.
    Тестовая прошивка не использовала CALL, а только различные переходы, потому таких проблем не было.

    PPS: Тест на работу системы в целом проверен ещё и на самом "базовом" тесте, который есть и в брошурке к ПРОшке. Запуск успешен, прямоугольники по экрану бегают без помех.
    Сброс процессора - стабильный, без дёрганий. Кнопку держал секунд 10 точно. Её выход ещё дебаунсером "устаканивается", что бы не было дребезга.

    PPPS: Ещё однин запуск - и стартовое содержимое SP уже другое - 0x2c5e. Может процессор палёный?
    Последний раз редактировалось andreil; 13.04.2021 в 23:26.
    "Байт-48"

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,508
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    634
    Поблагодарили
    473 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andreil Посмотреть сообщение
    Проблема: при старте есть операции CALL, и там я вижу 2 записи - по адресам 0x0000 и 0xFFFF.
    Вопрос: Откуда взялся SP=0???
    1. Твой код начинается с 0000, стало быть это вектор сброса?
    2. Вытекает из первого: так как в коде нет LD SP,#### то в SP там может быть каким угодно (хотя не в курсе конкретно за Z80, может там и очищается).
    Так пишут программы только чудаки. Ну или есть ошибка в данных.

  4. #3
    Guru
    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть такой документ z80-documented.pdf.

    Reset (input, active low). Initializes the CPU as follows: it resets the
    interrupt ip-ops, clears the PC and IR registes, and set the interrupt mode to 0. During reset time, the address bus and data bus go to a highempedance state, and all control output signals go to the inactive state. Note that RESET must be active for a minimum of three full clock cycles before the reset operation is complete. Note that Matt found that SP and AF are set to FFFFh.
    Перевод касательно SP: Обратите внимание, что Мэтт обнаружил, что SP и AF установлены на FFFFh.

    Что там Мэтт обнаружил, Или не обнаружил науке это не известно. Соглашусь с предыдущем оратором. Перед использованием стека, код пишется как то так.
    Код:
                    ld      hl,$F300
                    ld      sp,hl           ; set $F300 to stack pointer
    
                    call    init_ram
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  5. #4
    Activist
    Регистрация
    05.06.2020
    Адрес
    г. Балашиха
    Сообщений
    329
    Спасибо Благодарностей отдано 
    137
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    74 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если в FPGA классический вариант ОрионПРО, то лучше и ПЗУ брать v3.20. В v3.21, Error404 что-то допиливал под свои доработки схемы. Хотя, конечно, в данном случае, до этого дело ещё не доходит.

  6. #5
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    1. Твой код начинается с 0000, стало быть это вектор сброса?
    2. Вытекает из первого: так как в коде нет LD SP,#### то в SP там может быть каким угодно (хотя не в курсе конкретно за Z80, может там и очищается).
    Так пишут программы только чудаки. Ну или есть ошибка в данных.
    1. Да, по стандарту Орион-ПРО.
    2. ROM не мой, модифицировать его не возьмусь так вот сразу -_-

    - - - Добавлено - - -

    Цитата Сообщение от Romych Посмотреть сообщение
    Если в FPGA классический вариант ОрионПРО, то лучше и ПЗУ брать v3.20. В v3.21, Error404 что-то допиливал под свои доработки схемы. Хотя, конечно, в данном случае, до этого дело ещё не доходит.
    Именно, классический, где ROM1+ROM2.
    "Байт-48"

  7. #6
    Activist
    Регистрация
    05.06.2020
    Адрес
    г. Балашиха
    Сообщений
    329
    Спасибо Благодарностей отдано 
    137
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    74 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию ROM1.BIN

    Ткнул в первый попавшийся ROM1.BIN в папке с ROM-ами Ориона ПРО.

    Код:
            org     00000h
    
    l0000h:
            jp 0018bh               ;0000
    l0003h:
            jp l0100h               ;0003
    l0006h:
            jp l0ef4h               ;0006
            jp l10c8h               ;0009
            jp l103ah               ;000c
            jp l126ah               ;000f
            jp l166bh               ;0012
            jp l0657h               ;0015
            jp l17a1h               ;0018
    - - - - - - - 
    l019fh:
            out (00bh),a            ;019f
            ld a,050h               ;01a1
            out (00ah),a            ;01a3
            xor a                   ;01a5
            out (0fbh),a            ;01a6
            out (008h),a            ;01a8
            out (0fah),a            ;01aa
            ld (0ffbbh),a           ;01ac
            ld a,01fh               ;01af
            out (0fch),a            ;01b1
            ld a,00fh               ;01b3
            out (0f8h),a            ;01b5
            ld hl,0ffffh            ;01b7
            ld a,(hl)                       ;01ba
            cp 05ah         ;01bb
            jr z,l01c7h             ;01bd
            ld (hl),05ah            ;01bf
            dec hl                  ;01c1
            ld (hl),000h            ;01c2
            dec hl                  ;01c4
            ld (hl),000h            ;01c5
    l01c7h:
            ld sp,0f7c0h            ;01c7
            call sub_00e5h          ;01ca
            call sub_0148h          ;01cd
    Вот еще ROM1-320.BIN
    Код:
    ; z80dasm 1.1.5
    ; command line: z80dasm --origin=0x0000 -al ROM1-320.BIN
    
            org     00000h
    
    l0000h:
            jp 0015bh               ;0000
    l0003h:
    ....
            ld a,098h               ;0163
            out (003h),a            ;0165
            ld a,092h               ;0167
            out (01dh),a            ;0169
            ld a,016h               ;016b
            out (03bh),a            ;016d
    l016fh:
            ld a,056h               ;016f
            out (03bh),a            ;0171
            ld a,096h               ;0173
            out (03bh),a            ;0175
            ld a,080h               ;0177
            out (007h),a            ;0179
            out (00bh),a            ;017b
            ld a,050h               ;017d
    l017fh:
            out (00ah),a            ;017f
            call sub_1ff9h          ;0181
            out (008h),a            ;0184
            out (0f9h),a            ;0186
            out (0fah),a            ;0188
            ld (0ffbbh),a           ;018a
            ld a,01fh               ;018d
            out (0fch),a            ;018f
            ld a,00fh               ;0191
            out (0f8h),a            ;0193
            ld hl,0ffffh            ;0195
            ld a,(hl)                       ;0198
            cp 05ah         ;0199
            jr z,l01a5h             ;019b
            ld (hl),05ah            ;019d
            dec hl                  ;019f
            ld (hl),000h            ;01a0
            dec hl                  ;01a2
            ld (hl),000h            ;01a3
    l01a5h:
            ld sp,0f7c0h            ;01a5
            call sub_00b5h          ;01a8
            call sub_0118h          ;01ab
    А вот в ROM v3.21, дейстрительно, нет инициализации SP! Код, как у Вас.
    Последний раз редактировалось Romych; 14.04.2021 в 10:01.

  8. Этот пользователь поблагодарил Romych за это полезное сообщение:

    andreil (14.04.2021)

  9. #7
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Romych Посмотреть сообщение
    А вот в ROM v3.21, дейстрительно, нет инициализации SP! Код, как у Вас.
    В коде ROM1-320 так же нет инициализации до вызова первого - смотри адрес 0x0181. Там идёт вызов уже, а инит SP - по адресу 0x01a5.
    В общем, я у себя эту инициализацию просто поменял местами - сперва инит SP по адресу 0x015b, потом весь остальной код.
    "Байт-48"

  10. #8
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,508
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    634
    Поблагодарили
    473 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чудесный Орион-ПРО чудаками создан.

    А что у вас там по адресу вызова до инициализации SP? Может там RET и не требуется?

    - - - Добавлено - - -

    Цитата Сообщение от OrionExt Посмотреть сообщение
    Что там Мэтт обнаружил, Или не обнаружил науке это не известно.
    Кто-то же разбирал, вроде, Z80 как мы ВМ80? Призовите его сюда, он прояснит. А в ВМ80 обнуляется только PC, всё остальное не тронуто, как и триггер обмена HL и DE.
    Последний раз редактировалось HardWareMan; 14.04.2021 в 10:29.

  11. #9
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Чудесный Орион-ПРО чудаками создан.

    А что у вас там по адресу вызова до инициализации SP? Может там RET и не требуется?
    Требуется - там проверка бита в одном из портов.
    Пока дальше отлаживаю, сравнивая пошагово с эмулятором - пока что тяжело, потому что ROM2 никак не уместить в ячейки кристалла
    "Байт-48"

  12. #10
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,508
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    634
    Поблагодарили
    473 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Быстрый гуглёж выдаёт только такие наблюдения:
    Well, a real Z80 resets SP to 0x0000. I'm guessing on power-on the SMS Z80 SP is also 0x0000. However, on the SMS the Reset button is software controlled, so on reset the SP could be anywhere, depending on the game that's running.
    Т.е., при включении питания там вполне может быть 0000, а при сбросе - то, что было в последний раз. Т.е., даже 0000 нелогично для стэка, т.к. там ПЗУ.

  13. Этот пользователь поблагодарил HardWareMan за это полезное сообщение:

    andreil (14.04.2021)

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Орион-ПРО. Софтверные дела
    от Vasil в разделе Орион
    Ответов: 470
    Последнее: 09.06.2024, 00:27
  2. Орион-ПРО. Сборка и наладка.
    от АлександрПП в разделе Орион
    Ответов: 703
    Последнее: 14.12.2020, 11:46
  3. Орион-Про. Эмуляция
    от b2m в разделе Орион
    Ответов: 15
    Последнее: 08.09.2016, 23:20
  4. Орион-про: Вопросы по сборке
    от Prusak в разделе Орион
    Ответов: 48
    Последнее: 12.10.2010, 00:18
  5. Орион-ПРО. Архивы
    от pvlad в разделе Орион
    Ответов: 15
    Последнее: 23.09.2010, 13:17

Ваши права

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