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

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 34

Тема: Fast PC-Loader

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Fast PC-Loader

    Fast PC-Loader

    Предлагаю вместе разработать устройство для БЫСТРОЙ загрузки данных с PC. Ожидаемое время загрузки 48К порядка нескольких секунд. Время зависит от скорости чтения данных из порта FE. Принцип я придумал. Теперь надо его реализовать. Времени и знаний на все у меня не хватит. Поэтому, кто знает/может вносите свой вклад в общую разработку.

    Назначение

    Для быстрой загрузки данных с PC во время отладки программ. Например, пишу я программу для новой видеокарты "Meteor Graphics". Эмулятора на PC для нее нет. Я могу через "Fast PC-Loader" загрузить очередную версию программы и посмотреть, как она работает на компьютере с видеокартой. Также можно отлаживать и программы для других устройств.

    Принцип работы
    После нажатия кнопки на устройстве "Fast PC-Loader" микроконтроллер передает сигнал, аналогичный файлу загрузки с магнитофона на стандартной скорости. Формат передачи сигналов по определенным временным интервалам для бита 0 и 1.
    При этом в Спектрум по команде LOAD "" ENTER загружается программа на BASIC-е с блоком данных.
    После этого микроконтроллер переходит к другому, более быстрому режиму работы. По сигналу чтения из порта FE микроконтроллер передает очередной бит данных на цифровой вход TAPE-IN порта FE. То есть Z80 начинает принимать данные на максимальной скорости с аппаратной синхронизацией битов. Принял один бит данных - микроконтроллер тут же подготовил следующий.
    Микроконтроллер AVR принимает данные с PC через UART. При необходимости приостанавливает прием, а потом продолжает.
    Z80 может при загрузке делать паузы, в это время микроконтроллер ждет. Ограничение - во время загрузки не надо читать из порта FE.

    HardWare
    Плата KEYB&SINC с микроконтроллером ATMEGA48.
    Плата USB-UART с микросxемой FT232 (для соединения PC и микроконтроллера через UART).

    Подключение к Спектруму
    В схему Спектрума добавляется тумблер на вход порта FE для выбора источника сигнала: с аналогового формирователя TAPE-IN или с устройства «FAST PC-Loader».
    На стенку корпуса Спектрума устанавливается разъем типа DB-9F, на который заводятся проводами сигналы: сигнал чтения из порта FE, сигнал данных с Loader-a на тумблер, +5V, GND.

    Что нужно найти/придумать/сделать
    + Выбрать железо для прототипа
    + Принцип работы устройства
    + Вычислить максимальную скорость загрузки данных из микроконтроллера в Z80 (4.26 секунды на 48 килобайт данных)
    + Выбрать скорость передачи данных через UART (115200)
    Написать текст программы загрузчика на BASICe
    + Написать подпрограмму загрузки 256 байтов (нужно замедлить раза в 4)
    Преобразовать программу на BASIC-е в текстовой файл с байтами для помещения в микроконтроллер
    Найти описание формата файла ZX Spectrum и временные диаграмы для передачи загрузчика из МК
    Найти формат файлов .SNA
    Программу на ассемблере Z80 для загрузки .SNA
    Программу на PC для отправки файла .SNA через последовательный порт
    Алгоритм работы программы для микроконтроллера
    Кодирование программы для микроконтроллера
    Пайка прототипа и тестирование
    +Разработка плат для конструктора
    +Приобретение деталей для конструкторов
    Распространение конструкторов

    Ссылки по теме:
    Определение скорости загрузки: 1 и 2
    Пример кода для загрузки данных по 4 бита
    Определение UART Baud Rate
    Последний раз редактировалось zx-kit; 20.09.2015 в 15:01.
    "L-256"

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

  3. #2
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    может Kempston использовать?
    4 бита за раз, щелкая оставшийся 1 бит как признак нового полубайта...

  4. #3
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    может Kempston использовать?
    4 бита за раз, щелкая оставшийся 1 бит как признак нового полубайта...
    Можно, но дальнейшая оптимизация по скорости не особо нужна, если требует усложнений. Ведь Кempston нужен для игры. Хотя для отладки можно и отключить.

    Но, на мой взгляд ускорение до 5 секунд - это уже хорошо.
    "L-256"

  5. #4
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    так пусть кемпстон висит как был, - передача с pc - просто типа "параллельные" основным кнопки джойстика нажимаются... )))

  6. #5
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Можно вывести 8 бит с порта клавиатуры или кемпстона через диоды. Тогда загружать можно будет байтами. Но для этого нужно хорошо знать схему компьютера и дружить с паяльником.
    "L-256"

  7. #6
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ну, одно дело - внешний "разветвитель" джойстика воткнуть, а другое - внутрь компа лезть

  8. #7
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    ну, одно дело - внешний "разветвитель" джойстика воткнуть, а другое - внутрь компа лезть
    Можно вход TAPE IN оставить без изменений аналоговый, а вывести наружу через диоды 4 бита данных с кемпстона и 1 сигнал чтения из порта кемпстона. Так даже лучше - опрос клавиатуры не будет мешать загрузке. Можно будет использовать Press Any Key для продолжения. И скорость загрузки увеличится в 4 раза.

    Можно разъем для подключения кемпстона DB-9M установить на корпусе устройства "Fast PC-Loader". А к Спектруму подключать через разъем, на котором будут все нужные сигналы.

    Может кто-нибудь вычислить скорость загрузки по 4 бита за раз ?
    Последний раз редактировалось zx-kit; 20.09.2015 в 12:12.
    "L-256"

  9. #8
    Master Аватар для elf/2
    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В исходниках unsnap'а что-то подобное было

  10. #9
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2 Посмотреть сообщение
    В исходниках unsnap'а что-то подобное было
    Спасибо, не помогло. Вот нашел на WOS описание формата SNA:

    SNA Format
    This format is one of the most well-supported of all snapshot formats, but has a drawback:

    As the program counter is pushed onto the stack so that a RETN instruction can restart the program, 2 bytes of memory are overwritten. This will usually not matter; the game (or whatever) will have stack space that can be used for this. However, if this space is all in use when the snap is made, memory below the stack space will be corrupted. According to Rui Ribeiro, the effects of this can sometimes be avoided by replacing the corrupted bytes with zeros; e.g. take the PC from the, stack pointer, replace that word with 0000 and then increment SP. This worked with snapshots of Batman, Bounder and others which had been saved at critical points. Theoretically, this problem could cause a complete crash on a real Spectrum if the stack pointer happened to be at address 16384; the push would try and write to the ROM.

    When the registers have been loaded, a RETN command is required to start the program. IFF2 is short for interrupt flip-flop 2, and for all practical purposes is the interrupt-enabled flag. Set means enabled.

    Offset Size Description
    ------------------------------------------------------------------------
    0 1 byte I
    1 8 word HL',DE',BC',AF'
    9 10 word HL,DE,BC,IY,IX
    19 1 byte Interrupt (bit 2 contains IFF2, 1=EI/0=DI)
    20 1 byte R
    21 4 words AF,SP
    25 1 byte IntMode (0=IM0/1=IM1/2=IM2)
    26 1 byte BorderColor (0..7, not used by Spectrum 1.7)
    27 49152 bytes RAM dump 16384..65535
    ------------------------------------------------------------------------
    Total: 49179 bytes

    The 128K version of the .sna format is the same as above, with extensions to include the extra memory banks of the 128K/+2 machines, and fixes the problem with the PC being pushed onto the stack - now it is located in an extra variable in the file (and is not pushed onto the stack at all). The first 49179 bytes of the snapshot are otherwise exactly as described above, so the full description is:

    Offset Size Description
    ------------------------------------------------------------------------
    0 27 bytes SNA header (see above)
    27 16Kb bytes RAM bank 5 \
    16411 16Kb bytes RAM bank 2 } - as standard 48Kb SNA file
    32795 16Kb bytes RAM bank n / (currently paged bank)
    49179 2 word PC
    49181 1 byte port 0x7ffd setting
    49182 1 byte TR-DOS rom paged (1) or not (0)
    49183 16Kb bytes remaining RAM banks in ascending order
    ...
    ------------------------------------------------------------------------
    Total: 131103 or 147487 bytes

    The third RAM bank saved is always the one currently paged, even if this is page 5 or 2 - in this case, the bank is actually included twice. The remaining RAM banks are saved in ascending order - e.g. if RAM bank 4 is paged in, the snapshot is made up of banks 5, 2 and 4 to start with, and banks 0, 1, 3, 6 and 7 afterwards. If RAM bank 5 is paged in, the snapshot is made up of banks 5, 2 and 5 again, followed by banks 0, 1, 3, 4, 6 and 7.

    Обычные регистра я загрузить смогу, а вот как правильно настроить прерывания, стек и запуск программы ?
    Описание не точное, вместо word надо читать byte !
    Последний раз редактировалось zx-kit; 09.11.2015 в 16:19.
    "L-256"

  11. #10
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,773
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,179
    Поблагодарили
    775 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Обычные регистра я загрузить смогу, а вот как правильно настроить прерывания, стек и запуск программы ?
    в случае sna48k есть одна проблема - адрес с которого должна продолжится программа (РС) хранится на стеке программы.
    (если в момент сброса игры стек находится в-данных, то они естественно портятся)
    и где после пересылки программы в-память 16384,49152 будут храниться данные которые необходимо переслать в регистры ?
    Последний раз редактировалось goodboy; 09.11.2015 в 21:54.

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

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

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

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

Похожие темы

  1. Fast Tracker
    от GibbS в разделе Музыка
    Ответов: 7
    Последнее: 31.03.2018, 23:05
  2. Fast test AY
    от jerri в разделе Программирование
    Ответов: 3
    Последнее: 07.11.2013, 19:09
  3. Basic Loader Creator
    от Faster в разделе Софт
    Ответов: 39
    Последнее: 10.07.2013, 16:09
  4. Mod Loader 4 GS
    от breeze в разделе Программирование
    Ответов: 19
    Последнее: 20.10.2008, 16:13
  5. Fast 48x48 MUL | DIV
    от Sinus в разделе Программирование
    Ответов: 6
    Последнее: 05.07.2005, 17:00

Ваши права

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