User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 44

Тема: Очередной однобитный велосипед для спектрума

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

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

    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Очередной однобитный велосипед для спектрума

    Настоящим постом никого не хочу обидеть. Даже больше того, восхищаюсь тем кто делает что-то для спектрума. Так что прошу не обращать внимание на некоторую резкость. И за многобукаф тоже извините.

    Прочитал я несколько АКТУАЛЬНЫХ тем про устройства для спектрума и впал в уныние. Кто-то эмулирует магнитофон , кто-то - хочет сделать ROM-диск, кто-то флоппи-эмулятор и даже divIDE в продаже есть.
    С одной стороны приятно понастальгировать. Но с другой - блин, чуваки, ну почему у вас такие сложные и дорогие схемы? Сейчас кризис, надо быть проще... Да, безусловно, схемы крутые. Но все они ограничены по своим возможностям: на виртуальный дисковод больше 800 кило не запишешь, с магнитофона быстро не загрузишься. DivIDE чуток получше, но даже у него есть ограничения на объём раздела... плюсом к нему надо докупать дорогую флешку которую в маленьких городах и не найдёшь...

    В общем, предлагаю на обсуждение, следующую концепцию очередного велосипеда - внешнего устройства ввода вывода. Предупреждаю сразу что я её в железе реализовать не смогу по причине утери платы спектрума (корпус и клавиатура осталась, а плата потерялась при переезде). Но могу ответить на некоторые вопросы и оказать посильную консультацию по скайпу.

    Сама идея состоит в том, что Z80 - это довольно быстрая штука. И он может битиками ворочать ОЧЕНЬ быстро. Для примера возьмём магнитофонный порт. Какая может быть максимальная скорость ввода информации, при условии что за синхронизацию отвечает внешнее устройство? Проверяем на "секторе" из 256 байт:
    Код:
    		LD C,0		7
    sector:		LD b,8		7*256
    byte:		IN a,(254)	11*8*256
    		RLCA		4*8*256
    		RLCA		4*8*256
    		RRС d		8*8*256
    		DJNZ byte	(13*7+8)*256
    		LD (hl),d	7*256
    		INC hl		6*256
    		DEC c		4*256
    		JR nz,sector	12*255+7
    Итого у меня получилось - 102 402 такта на 256 байт, то есть 400 тактов на байт или 8.5 килобайт в секунду.
    Получается Z80 сам, без никакой помощи, без турбирования, по двум *****м проводкам, парой дюжин команд за 5 секунд скачает полностью свою память (без картинки).

    Но кто же даст нам такую скорость? Правильно - самый популярный ногодрыг - ардуина. Разумеется, втыкать её придётся не в разъём TapeIn / TapeOut, а припаивать на плату прямо на триггеры. Но припаять два сигнальных и два питательных проводка не проблема (TapeIn кстати нужно перерезать чтобы не спалить; или через переключатель подключить если планируется пользование магнитофона)
    Только в ардуине ПЗУ всего ничего, но зато на ней без проблем работают картридеры microSD. Заодно ардуина возьмёт на себя всю заботу о FAT (или даже о FAT32).

    Да, скорее всего заявленная скорость в 8.5 килобайт будет недостижима: Ардуине надо будет читать файл по секторам в свою небольшую память (Z80 в это время будет простаивать), дополнительно потребуется синхронизация в основном цикле. Проверку контрольной суммы тоже надо делать.
    Но в любом случае, гарантированно будет не менее 5 килобайт в секунду.

    Итак, как будет работать система с точки зрения пользователя?
    1. На спектруме набираем LOAD "" и нажимаем <ENTER>
    2. На ардуине нажимаем Reset - пошла загрузка драйвера (ардуинка отдаёт драйвер в магнитофонном режиме)
    3. После загрузки мелкого драйвера (пара сотен байт в буфере принтера или UDG или даже в бейсик-переменной) у нас становится доступна флешка и загрузчик грузится с неё - показывает список файлов: выбирай любой и грузись.

    Как под это дело адаптировать программы?
    В комплекте драйвера будут функции DEF FN которые обеспечат загрузку и выгрузку кодовых блоков.
    Адаптированию подлежат только программы в которых бейсик-загрузчики вида CLEAR 24000: LOAD "" CODE: RANDOMIZE USR xxx.
    Для простоты можно все кодовые файлы пожать архиватором, разместить со стандартного адреса (24000) и сделать им автозапуск. И обозвать с расширением zxexe

    Ну и самое вкусное - что это будет по цене?
    По сайту наших китайских братьев ардуинка 130 руб, картридер - 40 руб, флешка microSD (минимально) от 100 рублей, но флешка как правило уже есть от старого телефона. Провод для прошивки тоже подойдёт от телефона.


    P.S. На самом деле совсем уж правильно вместо ардуинки использовать esp8266. И все операции выполнять через wi-fi. Заодно и все образы программ выгрузить на спецсайт для спектрума - например http://zx.zx-pk.ru/ завести там каталоги для юзеров (с ограничением приватной части в мегабайт например). Тогда даже десяток пользователей с wi-fi за несколько дней наадаптируют сотню программ и разместят их в общий доступ.
    Но про esp8266 я ничего сказать не могу: в руках её не держал, да и пробовать на ардуинке проще.

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

  3. #2

    Регистрация
    29.08.2012
    Адрес
    Анапа
    Сообщений
    610
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mmxdmv Посмотреть сообщение
    или 8.5 килобайт в секунду.
    Что-то маловато.

    Синклеровский ZX Interface 1 работал под контролем проца без всяких DMA и мог грузить данные с микродрайва со скоростью около 15 килобайт в секунду.

    http://www.theregister.co.uk/Print/2...rodrive_story/

    Правда там не два проводка. На двух проводках там работала локальная сеть, со скоростью 100кбит

    Последний раз редактировалось Бука; 28.02.2017 в 21:37.
    «Земля - слишком маленькая и хрупкая корзина, для того чтобы человечество держало в ней все свои яйца…» - Роберт Энсон Хайнлайн.
    Электроника МК-61, Psion series 5mx.

    Всем умеющим читать советую http://www.skeptik.net/conspir/moonhoax.htm http://lurkmore.to/Лунный_заговор

  4. #3

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Бука, чтобы грузить 15 КБайт/c по одному проводу нужно написать(или попробовать сгенерить) код вида:
    Код:
    RECV_BYTE: IN F,(BC)
    JP NZ, X1
    X0: IN F,(BC)
    JP NZ, X01
    X00: IN F,(BC)
    JP NZ, X001
    X000: IN F,(BC)
    JP NZ, X0001
    ...
    X0000000: IN F,(BC)
    JP NZ, X00000001
    X00000000: LD A,00000000b
    JP SAVE_BYTE
    X00000001: LD A,00000001b
    JP SAVE_BYTE
    X0000001: IN F,(BC)
    JP NZ, X00000011
    X00000010: LD A,00000010b
    JP SAVE_BYTE
    X00000011: LD A,00000011b
    JP SAVE_BYTE
    ...

  5. #4

    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Бука, чтобы грузить 15 КБайт/c по одному проводу нужно написать(или попробовать сгенерить) код вида:
    Код:
    RECV_BYTE: IN F,(BC)
    JP NZ, X1
    ...
    Можно было бы грузить около 15 килобайт, если бы:
    1) команда IN F,(BC) устанавливала флаг не Z, но C
    2) нужный бит порта попадал именно на нужный флаг

    В своей программе можно использовать стек, можно полностью развернуть цикл... но смысла это не принесёт никакого.
    Я хотел донести мысль, что главное не скорость, а простота. Я привёл кусок программы лишь для того чтобы показать, что ЛЮБАЯ программа для 48 спектрума загрузится за единицы секунд. Нет особого смысла грузить программу за 1 секунду, если выбор её через менюшку будет минимум за 10 секунд.
    Последний раз редактировалось mmxdmv; 01.03.2017 в 22:19.

  6. #5

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мое мнение по этому поводу такое, а что нам мешает загрузить через tapeIn образ TRD в рам диск? И дальше работать с ним так же как и все другие интерфейсы типа z-контроллера или Nemo-IDE? Фактически нужно только драйвер написать для этого дела... Можно пойти еще дальше, через TapeOut выдавать команды этому внешнему устройству... Но, здесь конечно же нужно всё хорошо обдумать, прежде чем начинать реализовывать, может быть выработать какой-то стандарт для начала...

  7. #6

    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    810
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    77
    Поблагодарили
    59 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    .l0
    	dup	8
    	in	a,(#fe)
    	add	c
    	rl	e
    	edup
    	ld	(hl),e
    	inc	hl
    	djnz .l0
    Это 15кб/c без извратов,а у топикстартера просто не рабочий код.

  8. #7

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mmxdmv Посмотреть сообщение
    1) команда IN F,(BC) устанавливала флаг не Z, но C
    2) нужный бит порта попадал именно на нужный флаг
    Это 8-уровневое дерево ветвлений, в сумме на всех уровнях в нём 255 условных переходов, и 256 команд загрузки всевозможных значений байта на последнем уровне. Для него сойдёт любой флаг для которого есть условный переход. Но если 7й разряд не меняет своё значение, то код krt17 намного проще и короче. Также через TapeOut нужно передавать сигнал готовности к чтению байта, а в начале выдать синхросигнал для настройки скорости обмена, чтобы Z80 не подавился данными.

  9. #8

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

    По умолчанию

    через кемпстон делай

  10. #9

    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    через кемпстон делай
    Через кемпстон, к сожалению, нельзя:
    - во первых некоторые клоны не имеют кемпстона.
    - во вторых для синхронизации всё равно нужна обратка (в примере программы не показана)

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

    Цитата Сообщение от bigral Посмотреть сообщение
    Если предположить что разрабатывается устройство для zx edge connector-а, то в схему такого устройства обычно ставят ROM (называют shadow rom) и порты и\или регистры отраженные на память в диапазоне 0-3fff, данного железа хватает чтобы читать\писать данные куда угодно (fdd, ide, mmc, serial т.д.). DivIDE, TRDOS, Interface1 все сделанны таким образом. Если чтото и делать то надо делать совместимым с существующими програмными интерфейсами (для того чтобы опять не переделывать загрущики...).
    Я не гуру. Я - велосипедист. Это фигня в первую очередь размышление для отечественных клонов у которых нет zx edge. Эдакий плохонький суррогат дисковода.
    Это для того чтобы прочитал случайно чувачок, вспомнил детство, сходил в гараж, достал свой ленинград 1, припаял в него четыре проводка от ардуинки за 150 рублей и радовался жизни.
    Если же передо мной маньяк спектрума, у которого FDD + IDE + MMC, то ему эта тема противопоказана: тот же divIDE гораздо быстрее, совместимее и уже есть в наличии.
    Просто чувачок, вспомнивший детство, если увидит цену на divIDE и посчитает количество проводков которые надо ему припаять... и подумает что лучше купить пивка и не мучится ностальгией.

    P.S. тема родилась как возможное решение проблемы загрузки бета-бейсика , а также сохранением программ на флешку.
    Как бы если есть вариант проще и дешевле - рекомендуйте. И с чистой совестью похороним эту тему.

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

    Цитата Сообщение от Бука Посмотреть сообщение
    Уже давно изобретен "велосипед", см https://sites.google.com/site/interface1bis/home
    Правда дофига хотят - 44 евро...
    Дык вот именно, про то и речь. Ардуинка в 20 раз дешевле и если нет системного разъёма, то и паять в 20 раз легче.
    А скорость загрузки - ну в 2-3 раза дольше

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

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Это 8-уровневое дерево ветвлений, в сумме на всех уровнях в нём 255 условных переходов, и 256 команд загрузки всевозможных значений байта на последнем уровне. Для него сойдёт любой флаг для которого есть условный переход. Но если 7й разряд не меняет своё значение, то код krt17 намного проще и короче. Также через TapeOut нужно передавать сигнал готовности к чтению байта, а в начале выдать синхросигнал для настройки скорости обмена, чтобы Z80 не подавился данными.
    Спасибо что подсказали про дерево ветвлений. Я практиковался в кодах Z80 только в прошлом веке, поэтому могу не увидеть некоторые особенности.
    Просто в вашем случае получается очень приличный блок кода. Если этот код будет размещён во внешнем ПЗУ то размеры не критичны.
    А изначальная задумка была в том, чтобы минимизировать вмешательство в схему спектрума (типа те кто способен припаять ПЗУ, могут припаять и другую схемку, которая в 20 раз быстрее).
    Если же такой драйвер загружать в оперативу через LOAD "", то во первых это будет довольно чувствительно по времени, а во вторых - займёт драгоценную память, которой может не хватить при загрузке какой-то здоровой программы.

    Соглашусь что код krt17 попроще и наверное стоит его взять за основу.
    Ну или как компромисс: простой загрузчик загружает два варианта кода. Если есть возможность - пользуется быстрым но длинным, если нет возможности - пользуется медленным но коротким. В любом случае чтобы определить достаточность скорости надо сначала поэкспериментировать.

    Про TapeOut не написал для краткости. Возможно им придётся дёргать не раз на байт а даже раз на бит. Ну или припаять ещё один проводок ардуинки на IORQ.
    Пока ни устройства ни программы нет. Пока это просто задумка.

  11. #10

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mmxdmv Посмотреть сообщение
    Через кемпстон, к сожалению, нельзя:
    - во первых некоторые клоны не имеют кемпстона.
    - во вторых для синхронизации всё равно нужна обратка
    через кемпстон (с вариантом выбора через синклер) зато можно же грузить сразу по 4-5 бит! а обратку через tapeout пустить отдельно
    Прихожу без разрешения, сею смерть и разрушение...

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

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

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

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

Похожие темы

  1. однобитный WAV
    от ALKO в разделе Софт
    Ответов: 26
    Последнее: 28.07.2021, 05:03
  2. Наборы для сборки Орион-128/запчасти для Спектрума.
    от falanger в разделе Барахолка (архив)
    Ответов: 15
    Последнее: 05.09.2007, 19:51
  3. Ответов: 11
    Последнее: 04.08.2006, 15:08
  4. Ответов: 21
    Последнее: 23.02.2005, 20:56

Ваши права

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