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

User Tag List

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

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

  1. #1
    Member
    Регистрация
    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
    Master Аватар для Бука
    Регистрация
    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
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 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
    ...

  6. #5
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    32 сообщений
    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 без извратов,а у топикстартера просто не рабочий код.

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

    По умолчанию

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

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

    По умолчанию

    Если предположить что разрабатывается устройство для zx edge connector-а, то в схему такого устройства обычно ставят ROM (называют shadow rom) и порты и\или регистры отраженные на память в диапазоне 0-3fff, данного железа хватает чтобы читать\писать данные куда угодно (fdd, ide, mmc, serial т.д.). DivIDE, TRDOS, Interface1 все сделанны таким образом. Если чтото и делать то надо делать совместимым с существующими програмными интерфейсами (для того чтобы опять не переделывать загрущики...).

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

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Если чтото и делать то надо делать совместимым с существующими програмными интерфейсами (для того чтобы опять не переделывать загрущики...).
    Уже давно изобретен "велосипед", см https://sites.google.com/site/interface1bis/home

    И на нашем форуме обсуждался не раз, ищите interface 1 bis

    Вот с полпинка нашел инфу на русском: http://microsin.net/adminstuff/other...rface1bis.html

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

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

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

  10. #9
    Member
    Регистрация
    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.

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

    По умолчанию

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

Страница 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

Ваши права

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