ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Можно и без контроллера обойтись, тем более, что команду DI запретить не получится. Единственный шанс переключиться на другую задачу, это будет NMI. Вот на него и повесить таймер.
Единственная проблема, это то, что прерывание возникает в контексте пользовательской задачи, но это можно как раз таки решить аппаратно - при возникновении NMI одновременно подменить и область памяти в нижних адресах, на системную. Непонятно только, что делать, если пользовательская программа тоже работала в этих адресах, или стек там держала. Вообще, переход из режима ядра в пользовательский режим со своими 64Кб тоже требует аппаратной поддержки, поскольку перейти на произвольный адрес без модификации регистров можно только по RET, но желательно при этом не менять стек пользовательской задачи. Т.е. чтение адреса возврата лучше всего реализовать из аппаратных регистров, а не из памяти. Туда же его и сохранять по NMI. Ну или на момент переключения контекста для стековых команд реализовать доступ только к двум байтам по фиксированному адресу, т.е. использовать только младший бит адреса.
Последний раз редактировалось b2m; 08.03.2010 в 20:34.
Коллеги! Вот ниже сказано не в бровь, а в глаз! Добавить более нечего! Просто класс!!!!
Прекрасно! Но если по ходу реализации удастся скорость увеличить вдвое - будет совсем чудно. Но здесь есть одно маленькое говёнце: у Z80 достаточно примитивная система прерываний. USART без прерываний по получению и отправлению байта - ничего серьёзного. Что придумать, чтобы USART мог сесть на свой вектор прерывания? Какие будут предложения? Нужен какой-то контроллер прерываний, но не для многозадачности (это все баловство!), а для обслуживания девайса. Очень хорошо иметь еще пару векторов на внешних выводах Альтеры, как это сделано в контроллерах. Кроме того, нужен внутренний таймер, имеющий тоже свой вектор прерывания. Не обязательно ВИ53. Можно что-то свое. Регистры управления и загрузки таймера можно посадить на какие-то внутренние порты. Адреса портов придумает Error404! Он у нас главный по этой части! Можно высказывать любые идеи, даже бредовые! Наша задача придумать идею, а ewgeny7 ее проанализирует и сам решит кого послать нахрен! Но это не смертельно!
А может здесь и SPI найдется?
Последний раз редактировалось pvlad; 08.03.2010 в 21:59.
Если ты чего-то не знаешь, то это не значит, что этого не может быть.
А вы посмотрите http://www.fpga4fun.com/SPI.html
Сейчас я обычно использую режим IM2 Z80. Этот режим допускает иметь в памяти таблицу векторов прерываний, конкретный вектор выбирается считывая значение с шины данных в момент прерывания. В текущей реализации с "пустой" шины всегда читается 0FFh и переход осуществляется по последнему (и пока единственному, кстати) вектору таблицы. Достаточно в момент прерывания выдавать лог."0" на, к примеру, D0 (тогда прочитается 0FEh), и прерываться по предпоследнему вектору таблицы - попадать спецом в обработчик USART.
Этот способ не потребует никаких модификаций в железе текущей конфигурации ПК. Только в софте.
Последний раз редактировалось Error404; 08.03.2010 в 22:52.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Уже посылаю нахрен. После USART ног свободных нет. Сливайте воду.
---------- Post added at 23:22 ---------- Previous post was at 23:21 ----------
Да, поковырял код, можно хоть 115000 с чем-то там делать...
---------- Post added at 23:23 ---------- Previous post was at 23:22 ----------
СПИ там найдется. Сувать есть куда, высовывать вот некуда.
---------- Post added at 23:24 ---------- Previous post was at 23:23 ----------
Легко.
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Как насчет все сделать на одной МСХ ОЗУ? Скажем, одной ИМС емкостью 512к. Как я понимаю, проблема только в реализации видеогенератора? Читать в двух соседних временнЫх "полуфазах" из страниц "0" и "1", одну из "полуфаз" временно хранить в регистре. И в ВГ одновременно выводить точки из ОЗУ (страницы 0), а их цвет из временного регистра (ну, или наоборот).
Помимо уменьшения платы, упрощения разводки и увеличения объема ОЗУ, освободится чертова уйма ножек (порядка семи-восьми). Повторюсь, 256к - это мало. Мне 256к всегда было мало на старом Орионе.
Последний раз редактировалось Error404; 08.03.2010 в 23:52.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
С добрым утром!
А как будет аппаратно реализовано с точки зрения конечного пользователя? Программа должна будет записывать/считывать туда побитно или уже целым байтом?
Как я понимаю в реализации, должен быть порт делителя частоты тактирования USART и порт собственно записи/чтения данных. Адресное пространство F700..F7FF под порты в Орионе между девайсами делили обычно кусками по 16 байт (реже по 8 байт). Предлагаю для портов USART выбрать адреса из "уже испорченного" диапазона F760..F76F. Адреса F760 и F761 заняты 512ВИ1, F762 и F763 заняты SD-card. F764 и далее сколько там нужно можно использовать под USART. Что скажете?
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)