ZX-Flash Cart [1] это изготавливаемая в домашних условиях карта памяти, совместимая с картой памяти Interface II (и совместимая с его клонами [2]). В неё можно записать 10 снимков памяти в формате SNA (так называемые снапшоты, snapshot), которые можно загрузить в память компьютера ZX Spectrum выбором в меню. Вы можете загрузить программу Windows "ZXFlash Creator", чтобы создать из 10 файлов SNA образ карты памяти, и затем с помощью программатора записать его в микросхему ZX-Flash Cart (29F040 на 512 килобайт).
Шаги по созданию ZXFlash, в которой будут Ваши любимые игры, очень просты. Сначала запустите программу "ZXFlash Creator" [1,3] выберите 10 файлов SNA и создайте файл образа микросхемы простым кликом на кнопке "Create Flash". Этот файл будет размером 512 килобайт, которым нужно запрограммировать микросхему 29F040 (подойдет любой программатор, например вот этот [4]). Некоторые магазины микросхем принимают такие файлы, чтобы записать их в приобретаемые в этом магазине микросхемы 29F040.
После этого можно установить карту в разъем расширения ZX Spectrum, и быстро загружать игры из карты.
[Как это работает?]
Со стороны железа все несложно, но программная начинка устроена несколько сложнее. Коннектор Interface II для карт памяти был разработан в расчете использования карт 16K, так что в нашем распоряжении нет сигналов управления, таких как IORQ, WR и т. д., чтобы помочь нам отобразить микросхемы памяти большого объема банками по 16K. Поэтому требуются некоторые трюки, чтобы отобразить 512K микросхемы FLASH-памяти в окно адресного пространства 16K.
Логика карты ZXFlash разработана для простого детектирования доступа к адресам 3FFE и 3FFF, так что этот доступ генерирует импульс для управления счетчиком. Этот счетчик переключает 5 старших сигналов адреса (2^5=32, получается 32 банка памяти) микросхемы 29F040, чтобы сделать доступными разные банки памяти по 16K (32 * 16K = 512K).
Чтобы избежать переключения с одного банка на следующий, когда идет простое чтение банка для передачи его содержимого в RAM, мы не использовали 1 и 2 выходы счетчика. Чтобы поменять банк на следующий, мы должны осуществить доступ по адресу 3FFE или 3FFF 4 раза вместо одного. Как только мы прочитали 3 банка, которые сохранены в SNA, и передали их содержимое в RAM, программа загрузки заполнит регистры Z80 данными из заголовка SNA, блокирует систему переключения страниц ROM, чтобы избежать переключений, и делает переход на начальный адрес программы. Подробнее см. исходный код, доступный для закачки [1,3].
Проблема, которую нужно было исправить, состоит в том, что циклы обновления динамической памяти SDRAM периодически генерируют то же условие на шине, что и наше чтение памяти, и эти сигналы сбивают счетчик карты ZXFlash. К счастью, эти импульсы очень коротки, так что их гасит конденсатор C2 1nF. Емкость C2 достаточна, чтобы заблокировать короткие импульсы обновления RAM, но слишком мала, чтобы не проходили импульсы реального обращения к памяти.
C1 и R1 генерируют импульс сброса при старте, чтобы перейти к банку 0.
[Конструкция ZX Flash Cart]
Понадобятся следующие компоненты:
RefDes
Компонент
#
Замена
IC1
29F040
1
-
IC2
74HC4040
1
IC3
74LS32
1
К555ЛЛ1
IC4
74S133
1
-
D1
1N4148
1
КД521, КД522
C1
33 мкф 15V
1
C2
1 nF
1
R1
330 ом
1
Сокет DIP14
1
Сокет DIP16
2
Сокет DIP32
1
Конструкция карты несложная, но нужно уделить внимание следующим моментам:
• Чтобы избежать проблемы пайки выводов сокетов на обоих сторонах (если Вы сами изготовили двухстороннюю плату без металлизации отверстий), то запаивайте микросхемы в следующем порядке: IC3, IC2, IC4 и IC1. • Не забудьте соединить дорожки на разных сторонах платы в тех местах, где это необходимо. Это некоторые выводы сокетов, C2, C1 и D1. • Не забудьте запаять перемычки в переходных отверстиях. Соединения между сторонами находятся под сокетом IC1.
[Где найти Interface II]
Если у Вас нет ни самого Interface II, ни его клона, то его можно получить либо на аукционе ebay.com, либо изготовить самостоятельно. Поверьте, последнее совсем несложно, нужно просто правильно соединить коннекторы проводами [2].
[Как создавать прошивки для ZX Flash Cart]
После того, как собрали свою карту ZX-Flash, Вам нужно запрограммировать её микросхему памяти FLASH (29F040) любимыми играми. Файл прошивки для 29F040 получается соединением друг с другом 10 файлов SNA и программы меню для их загрузки неким "специальным" способом. Для упрощения этой процедуры Miguel A. Garcia Prada написал программу для Windows. Просто выберите в ней 10 снапшотов, нажмите кнопку и получите конечный файл для записи в микросхему 29F040.
Это нормально, как только Вы выбрали игру, нужно выключить и включить питание Spectrum, чтобы выбрать новую. Причина в том, что в карте имеется система для блокировки переключения страниц после того, как игра выбрана, и для восстановления исходного состояния требуется выключить и снова включить питание.
Да. Процесс загрузки целого снапшота в RAM требует некоторого дополнительного пространства в памяти. Автор использовал часть памяти, предназначенную для экрана, чтобы выполнить процедуру загрузки. Это "мусор" не что иное, как маленькая программа для переключения последней страницы ROM и загрузки её в RAM. Совет: используйте те снапшоты, которые обновляют экран сразу при старте, чтобы этот мусор сразу пропал с экрана.
Когда снапшоты загружаются в память и запускаются, доступный ROM является оригинальным с небольшими отличиями. Эти отличия могут привести к тому, что загруженная программа не работает. Выполнение этой опции проверки запустит тест, очень близкий к условиям, которые получит программа в реальной среде выполнения ZX Spectrum, так что этим способом можно выявить проблемы несовместимости. До настоящего момента все протестированные программы работали, но конечно проверить все программы невозможно. ВНИМАНИЕ: если Вы обнаружите, что с этим тестом какие-то программы не работают, пожалуйста сообщите автору (zxspec@gmail.com).
Это может произойти в редких случаях, но все-таки возможно, если снапшот в начальные моменты запуска использует область памяти, которую автор задействовал для завершения загрузки RAM. Другими словами, если снапшот был получен при определенных обстоятельствах, то он может не заработать. Например: снапшот, полученный загрузкой с ленты, и сохраненный через интерфейс наподобие Transtape 3, Disciple etc., который использует для получения снапшота NMI. В этом случае Вы можете запустить программу в эмуляторе на несколько секунд, и затем сохранить снапшот снова, после чего он будет нормально работать.
Нет. Автор в курсе, что сжатие в форматах наподобие .Z80 позволит лучше использовать память карты, чем формат SNA. По мнению автора, 10 снапшотов вполне достаточно, но если Вы захотите написать свой загрузчик на ассемблере, который будет распаковывать файлы Z80, то можете рассчитывать на помощь и поддержку автора для реализации этой программы в карте ZXFlash.
На сайте www.worldofspectrum.org можно найти программы конвертации, чтобы преобразовать снапшоны из одного формата в другой. Также можно загрузить программу в эмулятор, и уже оттуда сохранить снапшот в формате SNA.
Когда карта вставляется в коннектор Interface II, D1 соединяет ROMCS и VCC с WR наподобие перемычки, но в будущем это даст нам возможность подключить карту ZXFlash к программатору напрямую, и перепрограммировать память без необходимости извлечения памяти из сокета.
Назначение файлов из архива [3]:
ZXFlash-Diagram.pdf
Принципиальная схема в формате PDF.
ZXFlash-Circuit.pdf
Фотомаска для изготовления платы в формате PDF.
ZXFlash-Eagle.zip
Печатная плата и схема в формате Eagle.
ZXFlash-Creator.zip
Программа для создания образов ROM из снимков SNA, v1.0 (автор Miguel A. Prada).
ZXFlash-Source.zip
Исходный код на ассемблере программы управления картой.
VBRun60-6.0 SP5.exe
Эта программа понадобится только для Win95/98. Она просто установит в Вашей системе VBRUN60.DLL.