User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 16 из 16

Тема: Чтение/запись ОЗУ спектрума с помощью интерфейса внешней памяти ОМЭВМ

  1. #11

    Регистрация
    01.09.2019
    Адрес
    г. Ижевск
    Сообщений
    105
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andrews Посмотреть сообщение
    Начал с Borland C++
    Кажется, инструментарий для работы с C++ не очень подходит для МК, но если бы я сидел на винде, а не на Linux, то поставил бы AVR Studio, так тоже делают.
    Про концепцию - эта задумка (сабж) в моей голове похожа скорее на периферию с Прямым Доступом к Памяти, хочется внедриться в уже имеющуюся систему - Компаньон 2 (на панельке только ПЗУ), но retro shield - тоже весело, хоть и требует целую Мегу - я бы вместо неё применил контроллер в DIP-40 на макетке.

    Кстати об осциллографах, посчастливилось мне пощупать свой Компаньон 2 с Т34ВГ1 (через удобную плату для системного разъёма, кстати). Одна из картинок:

    1 - /WR; 2 - /WAIT.
    Видно, что, как и упоминалось в https://faqwiki.zxnet.co.uk/wiki/T34VG1 (но я недопонял при первопрочтении), в Т34ВГ1 /WAIT не вычисляется мудрёной логикой, а подаётся статично миллион раз в секунду таким образом, что процессору доступно только 1/4 общей полосы пропускания. Хе-хе) Это уже облегчает задачу корректной работы с памятью.

  2. #12

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,870
    Спасибо Благодарностей отдано 
    521
    Спасибо Благодарностей получено 
    251
    Поблагодарили
    225 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dvarkin Посмотреть сообщение
    Кажется, инструментарий для работы с C++ не очень подходит для МК
    я имел в виду инструментарий для работы с МК или ЦП на ПК. Стал копать про Arduino и нагуглил Processing Language. За 15 минут с нуля набросал такой вот скетч:
    import processing.serial.*;

    Serial serial; // создаем объект последовательного порта
    String received; // данные, получаемые с последовательного порта
    int flag=1, s=10; // второй параметр отступ по вертикали от верхнего левого угла окна

    void setup()
    {
    size(480, 320); // общий размер окна граф. консоли в пикселях
    serial = new Serial(this, "COM33", 115200); // у меня на компе адаптер usb2.0 DEXP поэтому USB-COM порт цепляется
    // двузначным номером, скорость подобрал в Arduino по выводу читаемых символов
    }

    void draw() {

    if (flag == 1) {
    clear();
    flag =0; }

    if ( serial.available() > 0) { // если есть данные,
    // считываем их и записываем в переменную received
    received = serial.readStringUntil('\n');
    }

    // Настройки для текста
    textSize(10); // размер шрифта в пикселях
    if (received != null) {
    text(received, 50, s);
    s=s+10; // след. строка 10 пикселями ниже
    }
    }
    выводит с моего Retro Shild почти ту же инфу, что и монитор порта Arduino в Win7 32 bit
    Последний раз редактировалось andrews; 13.12.2019 в 21:42.

  3. #13

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я задумал подобную штуку токо для моего zanac-ex автомата на основе msx2, вот тема на другом форуме http://www.nedopc.org/forum/viewtopic.php?f=68&t=19660

    Со спектрумом сложнее все это дело, потому что есть разные клоны, разные методы торможения процессора и refresh памяти.

    Если брать стандартный спекки то у него проц тормозится по CLK процессора и та память что от 0x8000 refresh-ится процессором, т.е. чтобы лазить по ULA памяти нужно это делать синхронизированно с CLK эмулируя поведение z80... ну и надолго шину не отбирать ато refresh обломается

    По структуре device-a есть такое соображение, это должен быть MCU типа stm8 или atmega328 с библиотекой V-USB, а с другой стороны у него должен висеть i8255 который бы мог читать шину Z80 и также программировать регистры защелки (ир82?) для компаратора сигналов на шине (чтобы ловить любой pattern на шине и выставлять ~wait_n. Почему i8255 + регистры... потому что потом это дело можно будет и на arduino подрубить и на другой спекки или c64 или LPT или еще куда нибудь. Т.е. нет желания потсаживаться на конкретный MCU, нужно бы создать стандартный код работы с i8255 и железной частью, а вот управлять сценариями работы конечно легче имея условный serial terminal с командами типа как в gdb.
    Последний раз редактировалось bigral; 23.12.2019 в 20:57.

  4. #14

    Регистрация
    01.09.2019
    Адрес
    г. Ижевск
    Сообщений
    105
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчёт выбора МК: я придерживаюсь ОМЭВМ с интерфейсом внешней памяти, поясняю: такие контроллеры как 8031 (кр1816ве31) даже не имеют встроенной ПЗУ и общаются, например, с 27c128 почти как Z80 (см. графики таймингов выше) - через шины адреса и данных (с использованием защёлки для половины адреса, это отнимает у МК 19 контактов). Это происходит аппаратно — прошивка находится во внешней ПЗУ. Таким же образом 8051 семейство может общаться с ОЗУ, и вот это я хочу использовать. Atmega8515 стырила распиновку 8051 и сохранила интерфейс внешней памяти для ОЗУ, при этом выполнение инструкции уже занимает 1 такт (8051 — 12 тактов). Поэтому сейчас я надумал следующий алгоритм: при приёме байта по UART Atmega поднимает BUSRQ, ждёт BUSACK, ждёт, когда т34вг1 (что есть, с тем и работаю) попытается приостановить проц через WAIT, после с помощью nop выбирает момент перед возвратом WAIT (см. осциллограмму) и использует интерфейс внешней памяти для записи/чтения байта, возвращает шину процессору, тот рефрешит память пока atmega ждёт следующий байт. Всё на ассемблере. В принципе, можно сделать прерывание атмеги по iorq Z80, тогда это будет как бы как периферия. В моих мыслях сабж виднеется как программа-монитор спектрума через UART, через который можно помимо прочего удобно загрузить программу напрямую в ОЗУ спектрума.

  5. #15

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,870
    Спасибо Благодарностей отдано 
    521
    Спасибо Благодарностей получено 
    251
    Поблагодарили
    225 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Я задумал подобную штуку токо для моего zanac-ex автомата на основе msx2, вот тема на другом форуме http://www.nedopc.org/forum/viewtopic.php?f=68&t=19660

    Со спектрумом сложнее все это дело, потому что есть разные клоны, разные методы торможения процессора и refresh памяти.

    Если брать стандартный спекки то у него проц тормозится по CLK процессора и та память что от 0x8000 refresh-ится процессором, т.е. чтобы лазить по ULA памяти нужно это делать синхронизированно с CLK эмулируя поведение z80... ну и надолго шину не отбирать ато refresh обломается

    По структуре device-a есть такое соображение, это должен быть MCU типа stm8 или atmega328 с библиотекой V-USB, а с другой стороны у него должен висеть i8255 который бы мог читать шину Z80 и также программировать регистры защелки (ир82?) для компаратора сигналов на шине (чтобы ловить любой pattern на шине и выставлять ~wait_n. Почему i8255 + регистры... потому что потом это дело можно будет и на arduino подрубить и на другой спекки или c64 или LPT или еще куда нибудь. Т.е. нет желания потсаживаться на конкретный MCU, нужно бы создать стандартный код работы с i8255 и железной частью, а вот управлять сценариями работы конечно легче имея условный serial terminal с командами типа как в gdb.
    там по сылкам разработки ИНЭУМ для СМ1800 а были еще ВНИИЭМ для 8080 и 8031(ПС01 И ПС04) Здесь же надо их усовершенствовать если возможно. Для чего необходимо переводить в z состояние выводы z80 в любой схеме включения и тормозить его, не останавливая циклов refresh для дин. памяти а внешним процессором(или его адаптером) полностью контролировать эти шины! Насчет "просто приостановить"...а что там с шинами и refresh циклами? И еще ...а если CPU не full static design?Тогда не очень то с CLK поиграешься
    Последний раз редактировалось andrews; 24.12.2019 в 06:14.

  6. #16

    Регистрация
    01.09.2019
    Адрес
    г. Ижевск
    Сообщений
    105
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Преимущество связи по UART в этом случае в том, что за один раз можно класть в спектрум только один байт, а между приёмом байтов отдавать шины обратно процессору, то есть можно не думать про refresh. Atmega8515 на 3,6864Мгц сможет положить байт в память быстро, тактов за 20.
    Про клоны, думаю, время торможения через clk можно как-то отслеживать с помощью счётчика МК.

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

Страница 2 из 2 ПерваяПервая 12

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

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

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

Похожие темы

  1. TR-DOS: Чтение каталога вызывает запись?
    от Saar в разделе Эмуляторы
    Ответов: 19
    Последнее: 24.06.2017, 22:24
  2. Ответов: 18
    Последнее: 16.10.2015, 18:27
  3. Ответов: 34
    Последнее: 06.12.2012, 18:04
  4. Z80 - чтение из памяти
    от icebear в разделе Память
    Ответов: 15
    Последнее: 06.03.2006, 12:03
  5. Unreal. Breakpoint на чтение памяти.
    от valker в разделе Эмуляторы
    Ответов: 1
    Последнее: 12.02.2005, 12:58

Ваши права

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