User Tag List

Страница 2 из 9 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 88

Тема: SD-ROM Картридж

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    esl, я почитал Вашу разработку и документацию к ней. Читать только A0 это интересная идея, но просматривая листинг загрузчика я там увидел что проверка наличия ПЗУ в векторе это вычитывание с какогото адреса подряд 55 АА, так что в первый момент все равно нужно будет анализировать больше чем одну линию, еще и сброс системы туда не выведен и отдельного сигнала как в корвете нет (запрос наличия картриджа в разъеме), поэтому понять что в системе произошёл сброс и идет проверка наличия картриджа можно видимо анализируя еще и старший адрес. Соберу железо попробую разные варианты.

    ---------- Post added at 06:32 ---------- Previous post was at 05:43 ----------

    Дизассемблированный код загрузчика

    Код:
    ; проверка наличия модуля ППЗУ
    M0107H: MVI     A,82H           ; код управления порта
            OUT     04              ; записать в РУС
            MVI     B,0FFH          ;
    M010DH: MOV     A,B             ;
            OUT     05              ;
            MVI     A,0FEH          ;
            OUT     07              ;
            IN      06              ;
            CPI     55H             ; проверка ключевого кода 55
            JNZ     M012EH          ; код не совпал
            MVI     A,0FFH          ;
            OUT     07              ;
            IN      06              ;
            CPI     0AAH            ; проверка ключевого кода AA
            JNZ     M012EH          ;
            MOV     A,B             ;
            ANI     7FH             ;
            INR     A               ;
            MOV     D,A             ;
            JMP     M0136H          ; МППЗУ подключен - на выход
    M012EH: MOV     A,B             ;
            SUI     20H             ;
            MOV     B,A             ;
            JM      M010DH          ;
            XRA     A               ; обнулить А - МППЗУ не подключен
    M0136H: ORA     A               ;
            RET
    из него видно что по адресу 0xFFFE в ПЗУ должно быть 55, а по 0xFFFF должно быть AA. А если по адресу 0xFFFE нет 55 то начинает вычитать 0x20 и опять проверять, это видимо на случай если ПЗУ меньшего объема.
    Последний раз редактировалось artyr_n; 23.12.2014 в 05:40.

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

  3. #2

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    esl, приношу свои извинения, глючу...
    По не понятной причине, не воспринял используемую в Ваших текстах "А0" - как младший бит шины адреса. Поэтому ошибочно предположил о необходимости дополнительного тактового выхода.

    Цитата Сообщение от artyr_n Посмотреть сообщение
    ...
    Дизассемблированный код загрузчика
    Код:
    ; проверка наличия модуля ППЗУ
    ...
    из него видно что по адресу 0xFFFE в ПЗУ должно быть 55, а по 0xFFFF должно быть AA. А если по адресу 0xFFFE нет 55 то начинает вычитать 0x20 и опять проверять, это видимо на случай если ПЗУ меньшего объема.
    Вот и получается, что если загружать как ПЗУ, то минимальный размер 8Кб, можно конечно отдать только 2Кб, потом выставить на шине 00 и ждать когда Вектор считает остальные "пустые" данные.
    Кстати, признаком начала чтения модуля "ПЗУ" со стороны Вектора соответственно является перебор адресов, соответственно на выходе "ПУ" будут перебираться старшие байты адреса:
    FF DF BF 9F 7F 5F 3F, ну а при появлении там 1F уже нужно "идентификатор ПЗУ" подсовывать (Если я правильно понял и опять не глючу)...
    Последний раз редактировалось KTSerg; 23.12.2014 в 10:36.

  4. #3

    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от artyr_n Посмотреть сообщение
    Читать только A0 это интересная идея, но просматривая листинг загрузчика я там увидел что проверка наличия ПЗУ в векторе это вычитывание с какогото адреса подряд 55 АА, так что в первый момент все равно нужно будет анализировать больше чем одну линию
    тут похоже более глубокая проблемма
    и надо дизассемблировать ВСЕ вырианты ПЗУ
    т.к. тот код что я приводил выше из одного из них, и в нём нет такой проверки!
    и похоже есть несколько вариантов !!

    Однакое если считать что у вас всегда стоит тот код что проверяет 0x55aa
    то просто сделать чтобы первые два байта что выдаёт эмулятор были именно 0x55 0xAA
    Т.о. вообще игнорируем шину адреса (кроме A0)
    и выдаём именно те байты которые ожидает загрузчик.

    Если вариантов всегда 2 то можно просто добавить кнопку "выбора типа ПЗУ".

    Врядли у реального пользователя больше 1го пзу на реальной машине и просто можно выбрать нужный.

    По поводу детекта ресета - это возможно проблемма
    как вариант забить на это дело (ввести кнопку ресета эмулятора)
    или посмотреть нет ли там на разъеме чего-то что таки зависит от ресета.

    По поводу главного заргузчика:

    как вариант написать более сложный код загрузчика
    который детектирует загрузились ли два "лишних байта" и обрабатывает это.

    речь вот о чём,
    если загрузчик проверяет наличие 0x55aa то загрзится код без этих байт
    если же загрузчик не проверяет то получим в памяти да лишних байта
    (и код как бы сдвинут на два байта)
    55AA ->
    mov d,l
    xra d
    т.е. ничего опасного если на них попадёт управление.

    а дальше определить есть ли эти байты и выполнить две ветки начального загрузчика.
    каждая для своего типа.

    немного усложняем код, зато меньше завивимости.
    даже набрасал что то (правда в мнемоники z80)
    он пересылает "основной загрузчик" на постоянное место
    хотя как вижу можно и в 0й адресс его грузить.

    Код:
            nop
            nop
            nop
            nop
            nop
            nop
            nop
    
            ld      de,0
            ld      hl,0
            ld      a,(hl)
            cp      0x55
            jp      nz,no55AA
            inc     hl
            ld      a,(hl)
            cp      0x55
            jp      nz,no55AA
    
            nop             ;если код сдвинут попадем сюда
            nop
    
    code55AA:
            ld      de,2
    
            nop             ;если код сдвинут попадем сюда
            nop
    no55AA:
            ld      hl,code
            add     hl,de   ;сдвинуть на 2 байта
    
            ld      de,newCODE
            ld      bc,LEN
    
            nop             ;если код сдвинут попадем сюда
            nop
    
    .a1:
            ld      a,(hl)
            ld      (de),a
            inc     hl
            inc     de
            dec     bc
            ld      a,c
            or      b
            jp      nz,.a1
    
            jp      newCODE
    Последний раз редактировалось esl; 23.12.2014 в 14:00.

  5. #4

    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от esl Посмотреть сообщение
    т.к. тот код что я приводил выше из одного из них, и в нём нет такой проверки!
    Это похоже код который рассчитывался загружаться с магнитной ленты и грузить программу из ПЗУ модуля, поэтому в нем нет никаких проверок. В загрузчиках которые стоят на плате проверки должны быть так как в основном они мультизагрузочные КВАЗИДИСК, ДИСКОВОД, МППЗУ, МАГНИТОФОН, СЕТЬ, с пумощью F1 F2 F3 и их комбинаций можно принудительно заставить грузится с определенного устройства, но если устройство не обнаружено то загрузчик автоматически переходит на загрузку со следующего найденного устройства.
    Это видно если посмотреть весь код загрузчика который я привел выше.

  6. #5

    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тем проще : )
    Тогда перед кодом пзу всегда выдаем два байта
    И все работает

    ---------- Post added at 13:35 ---------- Previous post was at 13:33 ----------

    Но проверить все загрузчики для надёжности надо бы

  7. #6

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проблема отсутствия ресета и необходимости синхронизировать передачу данных снимается если применить протокол "ЛВС"
    "Контроллер ЛВС" постоянно ждет от Вектора определенных "манипуляций" на шине.
    После чего они договариваются и переливают данные.
    Для АтМеги8 я исходник "контроллера ЛВС" вроде выкладывал...
    В них изменений-то совсем ничего, кидать в буфер данные не принятые из СОМ-порта, а из массива прошивки (или где код загрузчика будет храниться).

  8. #7

    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    главное вгрузить загрузчик любым стандартным способом!

    а это ЛВС есть во всех загрузчиках ?

  9. #8

    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Для АтМеги8 я исходник "контроллера ЛВС" вроде выкладывал...
    Помню что читал про такую разработку, но найти не смог. Можете пальцем ткнуть куда она спряталась?

  10. #9

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от artyr_n Посмотреть сообщение
    Помню что читал про такую разработку, но найти не смог. Можете пальцем ткнуть куда она спряталась?
    Вот, среди "Железа"
    http://zx-pk.ru/showthread.php?t=8669&page=15
    Сначала выкладывал только готовый проект, потом прошивку вместе с вариантом для 51-го проца.

    А на счет того, во всех ли загрузчиках есть ЛВС, это конечно вопрос, не могу утверждать, в "заводском" на сколько могу судить - есть...

  11. #10

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от artyr_n Посмотреть сообщение
    Помню что читал про такую разработку, но найти не смог. Можете пальцем ткнуть куда она спряталась?
    Сидел я, чесал репу, вспоминал тот проект...
    Для передачи инфы Вектору по ЛВС, она (эта инфа) должна быть "завернута" в конверт из служебных байт. Но в прошивке АтМеги этот конверт не готовится, он уже готовый принимается по СОМ-у и передается без изменений. Поэтому мой исходник придется допиливать.
    Значения/назначение этих служебных байт я описывал, но думаю там всё равно "без полтарашки не разобраться"...

    То, что я тут написал, оно верно. Но я нашел у себя первый вариант тестилки протокола ЛВС. Там автономный вариант, который загружал в Вектор программки "Тест ОЗУ", код которых был массивом внесен в сам "контроллер". Это ведь то-что нужно.
    Загрузка вынесена в отдельную процедуру, код на Си. Даже краткие пояснения есть (что на меня не похоже)...
    artyr_n, может в личку кинуть, для посмотреть?
    Последний раз редактировалось KTSerg; 24.12.2014 в 04:54.

Страница 2 из 9 ПерваяПервая 123456 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. 16КБ C64 картридж
    от greenpill в разделе Commodore 16/64/128
    Ответов: 37
    Последнее: 13.05.2015, 01:43
  2. Ответов: 2
    Последнее: 15.12.2010, 17:04
  3. Картридж NES и денди
    от REMR в разделе Nintendo
    Ответов: 3
    Последнее: 18.10.2010, 19:29
  4. Что за картридж?
    от murgatroid_79 в разделе Зарубежные компьютеры
    Ответов: 1
    Последнее: 20.05.2010, 10:01
  5. Flash-картридж...
    от Elya в разделе Память
    Ответов: 1
    Последнее: 20.08.2009, 14:49

Ваши права

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