PDA

Просмотр полной версии : Апогей-БК01 и Апогей-БК01Ц: Внешний ROM диск



Страницы : [1] 2

vinxru
16.11.2011, 17:03
Вся информация и ссылки тут!

http://zx-pk.ru/wiki/ROM-%D0%B4%D0%B8%D1%81%D0%BA_%D0%B4%D0%BB%D1%8F_%D0%BA %D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D 0%B0_%D0%90%D0%BF%D0%BE%D0%B3%D0%B5%D0%B9-%D0%91%D0%9A01

---

Кто нибудь делал внешнее ПЗУ для Апогея БК01?

Вчера мне omaxlab подогнал несколько ПЗУ на 512 Кбайт, за что ему большое спасибо. Я давно хочу сделать картридж со всеми выпущенными для Апогея программами.

Апогей умеет работать только с ПЗУ объемом 64 Кб. Для подключения картриджа объемом 1 Мб потребуется меппер. Меппер я придумал простой, один регистр. При обращении к адресам 8000h, 8001h, 8002h, 8003h..., будет выбираться страница. Размер страницы 32 Кб.

Из монитора Апогея загрузка будет выглядеть так

R8002 (Выбор банка 2)
R3200,45F4,100 (Загрузить область ПЗУ 3200-45F4 в ОЗУ 100-14F4)

Что бы не помнить для всех программ этих цифр, я написал загрузчик. Он загружается простой и запоминающейся командой: "R0,1000". Далее пользователь выбирает стрелками нужную программу и нажимает Enter.

Как идея?

Во вложении наброски загрузчика.

DATAsoft
16.11.2011, 17:17
Я делал РОМ-диск для Радио-86рк. Посмотри в разделе есть тема. Готов поучаствовать и в этом проекте

Mick
16.11.2011, 19:16
Как идея?

Во вложении наброски загрузчика.

А смысл юзать ОЗУ, чтобы переключать ПЗУшки. Ведь в Апогее ОЗУ 56кб. Зачем ограничивать компьютер? Я считаю проще сделать внешний маппер через порт, благо порт для внешний извратов есть.

vinxru
16.11.2011, 19:25
ПЗУ подключается к порту, а не к адресному пространству.

b2m
16.11.2011, 19:42
Как идея?
Неплохо. Только, то количество программ, которое влезет в 512Кб наверняка не поместится на экране :) Надо бы в загрузчике листание страниц сделать.
Хотя, можно сделать подобие подкаталогов, когда загружаемая программа будет ещё одним загрузчиком (первым пунктом которого будет возврат назад).

vinxru
16.11.2011, 20:06
Корпус ПЗУ PLCC32.

У меня программ на 750 Кб, поэтому будет использоваться две микросхемы ПЗУ по 512 Кб. И еще две микросхемы мэппера 555ТМ9 и 555ЛН1.

Плата для одной ПЗУ получается в 4 раза меньше, чем для двух ПЗУ. Но одна ПЗУ это полумера.

Несколько колонок или скролл сделаем без проблем.

vinxru
16.11.2011, 20:46
Такое вот будет

sergey2b
16.11.2011, 21:15
У меня программ на 750 Кб
mojlebe ve eh velojet polaysta
vrdoe be na pableke seaycha premerno 140k

vinxru
16.11.2011, 21:29
Программы тут
http://emu80.org/files/ga_1.zip
http://emu80.org/files/ga_2.zip

sergey2b
16.11.2011, 22:21
exvenays chto sprahevay v etoy vetke
A voobhe est dla Apogea programme kotoree espolyut chveta ?

b2m
16.11.2011, 23:05
будет использоваться две микросхемы ПЗУ по 512 Кб. И еще две микросхемы мэппера 555ТМ9 и 555ЛН1
Зачем две ТМ9? Хватит и одной. Там же 6 флип-флопов. А тебе нужно только 5 (1Мб -> 20 линий адреса минус 15, которые берутся напрямую с ВВ55). И один инвертор, чтобы OE разрулить старшим битом адреса.

vinxru
17.11.2011, 01:25
Да, именно так. Две микросхемы - это всего.

Я бы уже сделал картридж, но хлорное железо внезапно испортилось и плата травилась аж 7 часов.

vinxru
17.11.2011, 09:38
Тут еще не игровые программы для Апогея.
http://emu80.org/files/s_3.zip

vinxru
17.11.2011, 10:35
3 версия загрузчика.

Принимаются предложения по доработке и расширению загрузчика

vinxru
17.11.2011, 11:54
Написал программу, которая разместила программы по страницам так, что бы меньше было неиспользуемого пространства. Я решил не размещать программу на двух страницах сразу. Т.е. на пересечении страниц. Весь перечисленный выше софт объемом 670 Кб поместился в 672 Кб ПЗУ. То есть используется 21 страница из 24-х при использовании двух ПЗУ на 512 Кб и 256 Кб . Дома посмотрю, откуда я взял еще 80 Кб программ.

Основной загрузчик находится в начале нулевой страницы. В остальных страницах находится простенький загрузчик (29 байт) загрузчика из нулевой страницы.

ld a, 90h
ld hl, 0EE03h
ld (hl), a

; Выбор нулевого банка ПЗУ
dec hl
dec hl ; hl = 0EE01h
xor a
ld (hl), a
inc hl ; hl = 0EE02h
ld (hl), a
ld a, 80h
ld (hl), a
xor a
ld (hl), a

; Загрузка из ПЗУ
ld hl, 0 ; Старт ПЗУ = 0
ld de, 0FFFh ; Стоп ПЗУ
ld bc, hl ; Старт ОЗУ = 0
push bc ; Адрес возврата 0. Запуск загруженной программы.
jp 0FA68h ; Функция загрузки из ПЗУ

Я знаю, что тут есть авторы эмуляторов РК86 компьютеров и вопрос к ним. Как прикрутить к эмулятору мою прошивку ПЗУ, что бы проверить загрузчик? Там алгоритм простой. Порты 0EE00h = это шина данных ПЗУ, порты 0EE01h, 0EE02h = это 15 бит шины адреса ПЗУ. При записи 1 в старший бит порта 0EE02h, из порта 0EE01h в регистр верхних адресов копируется 5 бит, которые используются для адресов ПЗУ A15-A19.

b2m
17.11.2011, 12:49
Написал программу, которая разместила программы по страницам так, что бы меньше было неиспользуемого пространства.
Полным перебором делал или соптимизировал как? Мы в институте тоже делали на лабах разные проги оптимальной упаковки :)



Основной загрузчик находится в начале нулевой страницы. В остальных страницах находится простенький загрузчик (35 байт) загрузчика из нулевой страницы.
У меня была мысль, что неплохо бы перед таблицами программ сделать JMP на начало загрузчика, тогда догружать можно будет только таблицы, и делать это будет сам загрузчик. Т.е. дополнительного не потребуется.


Я знаю, что тут есть авторы эмуляторов РК86 компьютеров и вопрос к ним. Как прикрутить к эмулятору мою прошивку ПЗУ, что бы проверить загрузчик?
Это ты про меня, что-ли? :)
Я подумаю, можно ли сделать простым изменением конфига.
Для аналогичного rom-диска Специалист-МХ2 потребовалось вводить дополнительные фичи.

vinxru
17.11.2011, 13:37
У меня была мысль, что неплохо бы перед таблицами программ сделать JMP на начало загрузчика, тогда догружать можно будет только таблицы, и делать это будет сам загрузчик. Т.е. дополнительного не потребуется.

Не понял. У меня ничего не догружается. Единственный загрузчик предлагает список всех программ и загружает выбранную программу из любой страницы.

Этот загрузчик находится в банке/странице 0. Может быть ситуация, когда пользователь хочет запустить загрузчик командами (R0,1000 G), а выбрана не нулевая страница. Тогда загрузится микро-загрузчик, который и переключит страницу и загрузит основной загрузчик. Но это маловероятно, так как нулевая страница устанавливается при перезагрузке компьютера.

---------- Post added at 12:37 ---------- Previous post was at 12:30 ----------


Полным перебором делал или соптимизировал как?

Каждую программу мы сначала пытаемся записать в банк 0, потом в банк 1 и т.д. Такого алгоритма оказалось достаточно.

b2m
17.11.2011, 14:19
Не понял. У меня ничего не догружается.
А я думал, ты подкаталоги будешь делать.

С подключением твоей версии rom-диска не получилось. Надо новую фичу делать. Будет в следующей версии эмулятора (возможно даже сегодня).

vinxru
17.11.2011, 15:03
А почему в твоем эмуляторе кнопка вверх совсем не кнопка вверх? Это которая в центральной части клавиатуры. Я понимаю, что на цифровой клавиатуре это имеет смысл, но на стрелках это как то не удобно.

Добавил в свою программу, что код 0 - это тоже стрелка вверх.

vinxru
17.11.2011, 15:53
И теперь в цвете.

b2m
17.11.2011, 16:30
А почему в твоем эмуляторе кнопка вверх совсем не кнопка вверх?
Раскладку клавиатуры я взял наверное от РК, надо будет исправить. Таблицу кодов клавиш в биосе я уже нашёл (FEE0). Странно, что не совпадает.


Я понимаю, что на цифровой клавиатуре это имеет смысл
Интересно, какой?


Добавил в свою программу, что код 0 - это тоже стрелка вверх.
Зря. Я исправлю раскладку :)

vinxru
17.11.2011, 16:38
Интересно, какой?

Кнопки правой клавиатуры будут расположены так же, как и правые кнопки клавиатуры Апогея.

b2m
17.11.2011, 16:51
Кнопки правой клавиатуры будут расположены так же, как и правые кнопки клавиатуры Апогея.
Не совсем :)
Стрелка вниз и F3 сейчас переставлены, но исключительно для удобства, чтобы стрелка вниз была стрелкой вниз в эмуляторе.

В связи с этим вопрос: стоит ли вернуть F3 на законное место (соответствующее стрелке вниз на доп. клавиатуре), или оставить всё как есть? Если клавиши-стрелки (которые обычные, а не на доп. клавиатуре) сделать стрелками в эмуляторе Апогея, то доп. клавиатуру можно сделать полностью соответствующей Апогею.

И извечный вопрос: куда вешать клавишу ПС? :)

vinxru
17.11.2011, 16:59
х.з.

b2m
17.11.2011, 17:01
х.з.
Короче, я поправил раскладку. Как ты и просил :)
Первые две строки layout.kbd теперь выглядят так:

home pgup del|esc up end down pgdn ?
tab x-del enter bksp left|x-left center|x-up right|x-right ins|x-down

vinxru
17.11.2011, 22:17
После того, как я все спаял, оказалось, что я неправильно развел разъем. 16-ый контакт к 1-ому, а 1-ый к 16-ому.

:(((((

Стал отпаивать разъем, расплавил разъем. :( В общем всё переделывать.

vinxru
18.11.2011, 02:23
Я написал архиватор/разархиватор для 8080 уменьшающий (в сумме все программы) до 61% и использующий меньше 1 Кб памяти. Типа LZW со словарем в 256 слов (+256 фиксированных).

Теперь одной ПЗУ на 512 Кб хватит и не нужна ЛН1. Картридж будет содержать всего два корпуса.

Error404
18.11.2011, 10:08
Не совсем :)

И извечный вопрос: куда вешать клавишу ПС? :)

Короче, я поправил раскладку. Как ты и просил :)
Первые две строки layout.kbd теперь выглядят так:

home pgup del|esc up end down pgdn ?
tab x-del enter bksp left|x-left center|x-up right|x-right ins|x-down

Я всегда делаю так:


Соответствие некоторых спецкнопок в эмуляторе (RK=PC):
УСТ = Home
ПС = End
СТР = Ins
ЗБ = BackSpace
AP2 = Esc
F1..F5 = F1..F5
Ctrl+G = Del
Ctrl+R = PgUp
Ctrl+C = PgDown
РусLat = F8=F9=Scroll (т.е. пофиг - смотря как настроено в настройках эмулятора)


Это связано с тем, что псевдосистемах (Мониторах, Ордосах и прочих фактически не имеющих соглашений об интерфейсах вообще и кнопках в частности) - там пофиг что и где (все равно в каждой программе надо подбирать). А вот в CP/M таким образом размещенные кнопки более удобно попадают на соответствующие коды управления редактированием (генерируемые этими кнопками коды более-менее совпадают с комбинациями ctrl+key постраничного перемещения курсора и подобных)

---------- Post added at 10:08 ---------- Previous post was at 10:05 ----------


Я написал архиватор/разархиватор для 8080 уменьшающий программы до 61% и использующий 1-2 Кб памяти. Типа LZW со словарем в 256 байт.

Теперь одной ПЗУ на 512 Кб хватит и не нужна ЛН1. Картридж будет содержать всего два корпуса.

Исходники опубликуешь? А сможешь допилить - сделать с настраиваемым размером словаря?

vinxru
18.11.2011, 11:34
Я писал этот распаковщик в 2:00, поэтому к оптимизации и стилю не придирайтесь. Жутко не выспался, но было жутко интересно.

Распаковщик написан так, что он обрабатывает данные блоками по 9 байт. Я буду загружать по 9 байт из внешней ПЗУ.

Кратко принцип работы можно описать так. В первом байте из 9 описывается, что значат следующие 8 байт. По биту на байт. Если бит = 0, значит надо просто записать этот символ в память. Если бит=1, значит надо взять слово из словаря (словарь 256 слов). А в словарь помещается каждый записанный в память символ или слово + следующий символ. То есть, если мы запишем в память последовательно "ABCDEF" то в словарь попадет "AB,BC,CD,EF". Если мы потом выведем первое слово из словаря AB и букву G, то в словарь попадет ABG.

Сейчас результаты такие:

Размер распаковщика 155 байт.
Память под переменные распаковщика 771 байт (из которых 768 словарь).
Игра "Гонки" упаковалась на 50%.
Архиватор RAR упаковал её на 38% (лучше).
Распаковка 32 Кб занимает меньше 4-х секунд.

Я вложил файл gonki_packed.rka (17 Кб). Там объединен разархиватор и архив игры. Оригинальный файл занимает 29 Кб. И это работает!

Загрузить, запустить G8004 (если эмулятор это не сделает за вас) и запустить игру G0.

vinxru
18.11.2011, 11:43
"каждый записанный в память символ или слово + следующий символ"

Можно объяснить проще. В словарь помещается указатель на последний распакованный байт/слово. А то, что туда попадает следующий символ, это следствие. За распакованным байтом идет следующий распакованный байт.

Буду не против, если кто то оптимизирует код разархиватора 8080 за меня. :)

b2m
18.11.2011, 12:05
А зачем буфер для словаря в запакованный архив добавлять? Его даже инициализировать не надо, т.к. неиспользованные статьи словаря во входных данных не должны появляться. На сотне файлов можно 78Кб сэкономить!

vinxru
18.11.2011, 12:10
На ROM-диске будут хранится одни архивы, без буфера для словаря и кода распаковщика. Распаковщик (и буфер для словаря) будет в единственном экземпляре присутствовать в загрузчике.

Atari1974
18.11.2011, 12:37
Программы тут
http://emu80.org/files/ga_1.zip
http://emu80.org/files/ga_2.zip
Вижу и игры такие же как на моей Микроше. Надо бы купить Апогей а то микроша совсем плоха на подключение к телеку.
Куплю Апогей обязательно закажу этот ROM диск. Делайте, тестируйте, будем следить за продвижением идеи

vinxru
18.11.2011, 12:46
сможешь допилить - сделать с настраиваемым размером словаря?

Лень. Для словаря в 768 слов (+256 фиксированных) потребуется 10 бит и так далее. А двигать биты на 8080 я очень не хочу.

P.S. Реально сейчас словарь 512 слов (из них 256 фиксированных) и соответственно 9 бит-ная кодировка

Error404
18.11.2011, 13:02
Я писал этот распаковщик в 2:00, поэтому к оптимизации и стилю не придирайтесь.


Придираться не будем. :)
Вижу, код написан в мнемониках Z80. А sjasm умеет контролировать "совместимость"? Ну, типа я пишу в мнемониках Z80, но компилирую для 8080 и хочу чтобы оно контролировало и предупреждало (при компиляции) что, мол, вот эта мнемоника - "чисто Z80", для 8080 не проходит.

Очень хочется такой компилятор, но все компиляторы если и понимают мнемоники Z80, то транслируют на выход их все, не проверяя на совместимость с 8080.

vinxru
18.11.2011, 13:07
А sjasm умеет контролировать "совместимость"?

Я не знаю, есть ли такая возможность.

vinxru
18.11.2011, 13:45
Хотелось бы еще на Апогей БК01Ц перенести c Партнера 01.01 игру Stop The Express.

Error404
18.11.2011, 13:55
"Москва-Сухуми" это пять! :)
Кстати, картинка очень симпатично выглядит.

b2m
18.11.2011, 13:55
Сейчас результаты такие:

Размер распаковщика 155 байт.
...
Распаковка 32 Кб занимает меньше 4-х секунд.

Я улучшил твой результат :)
Размер распаковщика 96 байт.
Распаковка гонок - 2,89 сек.

b2m
18.11.2011, 14:45
При желании, можно распаковку и загрузку с rom-диска объеденить, тогда можно будет грузить программы размером аж до 56Кб.

---------- Post added at 15:20 ---------- Previous post was at 14:58 ----------

Кстати, если допускать распаковку лишних максимум 7 байт, то можно ещё ускорить (будет 2,626 сек) и пару байт сэкономится (будет 93 байта).

---------- Post added at 15:45 ---------- Previous post was at 15:20 ----------


Для словаря в 768 слов (+256 фиксированных) потребуется 10 бит и так далее. А двигать биты на 8080 я очень не хочу.
А двигать биты всё равно надо. Просто сейчас ты двигаешь только девятый бит, а можно двигать 9-тый и 10-тый вместе. Получится, что блоки будут из 5 байт: 1 байт с 4-мя парами старших бит, и 4 байта младших 8 бит.

esl
18.11.2011, 15:13
господа, позволю себе напомнить
есть пакеры под 8080
http://sensi.org/~svo/scalar@home/
DeMLZ
DeEXO

BYTEMAN их даже использовал когда делал загрузку игр с кассеты
megalz (http://zx.pk.ru/showpost.php?p=361205&postcount=32)


---------- Post added at 13:13 ---------- Previous post was at 13:01 ----------

MegaLZ
92 RKA files
in: 600175
out: 287048

gonki: 29355-> 12991

vinxru
18.11.2011, 15:27
При желании, можно распаковку и загрузку с rom-диска объеденить, тогда можно будет грузить программы размером аж до 56Кб.

Так и будет. Загружаем 9 байт в inputBuf и запускаем распаковщик в цикле.

vinxru
18.11.2011, 16:02
Заменил мненоники в demlz.asm, добавил упакованный файл и оно не распаковалось. Видимо я где то накосячил.

Сейчас времени нет, бежать надо.

Этот архиватор дал 48%, мой 61%. Если по времени распаковки нормально будет, то можно его использовать. Если в нём можно сделать распаковку с последовательной загрузкой с флешки, так что бы лишь 1 Кб ОЗУ занималось, то вообще отлично будет.

b2m
18.11.2011, 17:32
У меня нормально распаковалось, но я не переделывал мнемоники :)
Результат: 6,6 сек.
Зато дополнительного ОЗУ не требуется.
Наверняка, если написать с нуля, можно ускорить. Как минимум, от процедуры ExAfAf нужно избавиться.

---------- Post added at 18:10 ---------- Previous post was at 17:37 ----------

Похоже, флаги в процедуре ExAfAf запоминать не надо. Замена на более короткий вариант:

ExAfAf: push h
mvi h,0
sta ExAfAf+2
mov a,h
pop h
ret
дала небольшой выигрыш (5,46 сек.)

---------- Post added at 18:32 ---------- Previous post was at 18:10 ----------

Избавился от процедуры ExAfAf, результат 4,16 сек.

vinxru
18.11.2011, 18:47
Зато дополнительного ОЗУ не требуется.

Мне кажется, что этому архиватору требуется наличие архива в памяти целиком.

b2m
18.11.2011, 21:06
Мне кажется, что этому архиватору требуется наличие архива в памяти целиком.
Если разобраться, то байты там считываются из архива лишь в нескольких местах, можно заменить на вызов п/п. Сам архив читается последовательно.

Я решил выжать из этого алгоритма максимум скорости при распаковке (на ВМ80). Короче - переписал с нуля. И поскольку цель была - скорость, то распаковщик немного великоват - 222 байта. Но скорость поразила даже меня: распаковка гонок - 1,98 сек!!!

Понятно, что если чтение байта заменить на п/п чтения из rom-диска, будет медленнее, но всё равно, мне кажется - это неплохой результат.

b2m
18.11.2011, 21:13
Например заменить LDAX D (во всех местах) на:

XCHG
SHLD 0EE01h
LDA 0EE00h
XCHG

vinxru
18.11.2011, 21:58
Как ты измеряешь скорость?

b2m
18.11.2011, 22:03
Ставлю точки останова на начало и конец, после того как сработает первая точка, запускаю ещё раз (F5), когда сработает вторая, в нижней строке отладчика число T указывает количество тактов от предыдущего запуска. Делишь на тактовую частоту, получаешь в секундах.

vinxru
18.11.2011, 22:23
Понятно.

ОЗУ и объема ПЗУ нам для обоих разархиваторов хватит (для всего существующего софта) и для конечного пользователя разницы никакой не будет. Разница для него только в скорости.

У меня тоже появились идеи по ускорению первого алгоритма, думал сейчас доработать его, но раз MLZ работает так же быстро, то берем его.

В субботу или воскресенье куплю хлорного железа и сделаю картридж. И буду экспериментировать на реальном железе.

esl
18.11.2011, 22:25
а зачем читать из rom?
как обычные selfextract не подойдет ?
загружаем так чтоб хвост и главное распаковщик был выше последнего байта
и расспаковываем, в процессе затираем начало архива но это уже не страшно
в крайнес случае можно использовать видеоram

или так не пойдет ??

vinxru
18.11.2011, 22:36
Если к каждой программе прицепить распаковщик, то мы будем хранить в ПЗУ 150 распаковщиков. Зачем?

Читать из ROM-а быстрее, чем переписывать из ROM-а в память, а потом читать из памяти. Нет промежуточного этапа.

esl
19.11.2011, 00:08
Зачем 150 копий
У вас декодер прям в коде лаунчера
Его все равно в память грузить
Может пару версий
Одна если влазим в память без затиранив
И одна допустим в видеопамять если не хватает

и как я понял вам надо 768 байт на "словарь" ??

vinxru
19.11.2011, 00:39
768 байт - это временный буфер первой версии распаковщика. Но я отказался от первого алгоритма в пользу второго. После доработки b2m, он стал работать в 3 раза быстрее. К тому же он не требует дополнительной памяти и сжимает на 10% лучше.

Я не понял точно, что вы хотите сказать. Но я планирую сделать так. Сначала пользователь запускает загрузчик командой "R0,1000 G". Этот загрузчик содержит меню, скрытый список адресов для всех программ и распаковщик (размером 210 байт). Когда пользователь нажимает Enter, распаковщик копирует данные из ПЗУ в ОЗУ, параллельно их распаковывая.

esl
19.11.2011, 02:11
а, так вы остановились на MegaLZ?
а то я понял что вы свой оригинальный решили брать и уговариваю взять MegaLZ ;)

а про "загрузчик" который "R0,1000 G"
его то все равно надо в памяти хранить, и следить чтоб не затерло его кодом.

а как "работает" romdisk ?
сбросили адрес ROM в 0 а при чтении из портаданных автоинкремент адреса?

vinxru
19.11.2011, 02:30
а то я понял что вы свой оригинальный решили брать и уговариваю взять MegaLZ

Оригинальный - это разновидность LZW. Он не обладает шикарным сжатием, но он работает и понятен. Мне его ни сколько не жалко. Главное результат. :)


а про "загрузчик" который "R0,1000 G"
его то все равно надо в памяти хранить, и следить чтоб не затерло его кодом.

Конечно.


а как "работает" romdisk ?
сбросили адрес ROM в 0 а при чтении из портаданных автоинкремент адреса?

Нет. Перед каждым чтением надо записывать адрес в порты EE01:EE02, а потом из порта EE00 читаем результат.

---------- Post added at 01:30 ---------- Previous post was at 01:18 ----------

Сейчас скачал эмулятор на домашний комп и решил проверить производительность. И внезапно нашел кнопку выбора ПЗУ. И она вроде работает. Чего же молчали?

Я измерил время необходимое на распаковку из ПЗУ в различных вариантах:

Распаковка из памяти = 3 518 299 тактов.

Распаковка из ПЗУ = 3 907 879 тактов.

Замена LD A, (DE) на

EX HL, DE
LD (0EE01h), HL
LD A, (0EE00h)
EX HL, DE

Копирование из ПЗУ и распаковка из памяти = 4 479 293 тактов

l: ld (0EE01h), hl
ld a, (0EE00h)
ld (de), a
inc de
inc hl
dec bc
ld a, b
or a, c
jp nz, l

То же, но в цикле 16 операций копирования подряд = 4 138 697 тактов

Пробовал изменять только нижнюю половину адреса ПЗУ - фигня. Как я и предполагал, выгоднее всего распаковывать прямо из ПЗУ

esl
19.11.2011, 02:38
Нет. Перед каждым чтением надо записывать адрес в порты EE01:EE02, а потом из порта EE00 читаем результат.

ну тогда ИМХО если вычитывать из ПЗУ побайтно в цикле распаковщика - будет только СИЛЬНО хуже
чем вычитать все в память и расспаковать

ибо тогда в теле расспаковщика на каждое чтение из ПЗУ надо будет делать кучу save/restore что по идее скорость убьет.

но, опять же, это мое имхо

кстати, родилась еще идея, может не все паковать в пзу ?
например системные чтоб пускались без расспаковки, места они мало занимают, а может быть полезно что память не затирают,
может их в "отдельную" странику вынести.

---------- Post added at 00:38 ---------- Previous post was at 00:36 ----------

был неправ, ухожу грустить :(
я не обратил внимания что в расспаковщике HL указывает куда надо
думал что будет еще отдельный счетчик в памяти для адреса в пзу

vinxru
19.11.2011, 02:40
ну тогда ИМХО если вычитывать из ПЗУ побайтно в цикле распаковщика - будет только СИЛЬНО хуже
чем вычитать все в память и расспаковать

Проверил. Сначала копировать из ПЗУ в ОЗУ, а потом распаковывать медленнее в 2 раза. И это логично.


кстати, родилась еще идея, может не все паковать в пзу ?
например системные чтоб пускались без расспаковки, места они мало занимают, а может быть полезно что память не затирают,
может их в "отдельную" странику вынести.

Хорошая идея. Сделаю.

b2m
19.11.2011, 12:58
В рубрику "Это интересно" :)

В гонках, перед запуском, данные также распаковываются. Вместо 29Кб игра становится размером 56Кб. В последующих запусках, естесственно, распаковка пропускается. Я попробовал сжать прогой MegaLZ эти 56Кб, получилось на полкилобайта меньше :) И место экономится, и время перед запуском! Правда, распаковщик нужно размещать немного выше этих 56Кб. Но если он и так там будет (в случае загрузки с rom-диска), то можно это использовать.

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

esl
19.11.2011, 13:33
та да, легендарная прога
по ней в свое время мы с Виктором Пыхониным (Автором emu80)
частично восстановили знакогенератор апогея

я свой писал, он свой, общими усилиями восстановили :)

vinxru
20.11.2011, 00:21
Картридж работает, только прошивка старая, еще без сжатия. Теперь прошивку новую буду делать.

Titus
20.11.2011, 00:33
Даешь конструкторы для самостоятельной сборки! )

vinxru
20.11.2011, 01:21
Даешь конструкторы для самостоятельной сборки! )

Ага, только под DIP версии микросхем. Вряд ли многие смогут запять такую панельку.

Titus
20.11.2011, 01:29
Ага, только под DIP версии микросхем. Вряд ли многие смогут запять такую панельку.
И еще желательно дооптимизировать депаковщик до 1сек, иначе замучаются грузить.

vinxru
20.11.2011, 03:49
Ой, да ладно. 2 секунды на самую большую существующую игру - это нормально. :)

Titus
20.11.2011, 06:30
Ой, да ладно. 2 секунды на самую большую существующую игру - это нормально. :)
Что, уже 2? Ну да, норм)

AIS
20.11.2011, 11:18
А что если такой вариант - в качестве памяти поставить м\сх SRAM + батарейка, тода с Апогея и сохранять можно будет...
И ненужны будут дисководы и винчестеры.

Mick
20.11.2011, 13:56
А что если такой вариант - в качестве памяти поставить м\сх SRAM + батарейка, тода с Апогея и сохранять можно будет...
И ненужны будут дисководы и винчестеры.

Проще добавить цепи записи во FLASH микруху и можно будет записывать, и не нужна будет батарейка.

CodeMaster
20.11.2011, 14:57
Ага, только под DIP версии микросхем. Вряд ли многие смогут запять такую панельку.

PLCC-панелька есть и в DIP-версии. Если будет использоваться запись, то лучше PLCC, т.к. DIP-флеш найти сложнее, если нет то лучше DIP-панельку, т.к. УФ-ПЗУ что грязи. А ещё лучше и то и другое.

vinxru
20.11.2011, 15:14
Я внезапно обнаружил, что микросхемы ПЗУ с префиксом 49LF несовместимы со стандартными ПЗУ (49F, 29F). Надо еще сделать картридж для них, потому что 49F у меня оказалась только одна, остальные все 49LF

У 49LF шина адреса мультиплексирована. 11 линий адреса и вход ROW/COLUMN. Сначала на входе OE и R/C высокие уровни. На шину адреса подается старшая часть адреса и спад R/C. Затем подается младшая часть адреса и подъем R/C. А потом спад OE и данные появляются на выходе. Термины "Старшая/младшая" возможно надо поменять местами, я не уверен. А так же я не знаю сколько бит надо отдавать в обоих случаях. Можно отдавать 9, 10 или 11 бит.

Мультиплексирование, с одной стороны, это очень удобно! Такую микросхему можно подключить к Апогею без дополнительной микросхемы 555ТМ9.

С другой стороны, размер страницы получается 4 Кбайт (или может быть 512 байт). Это очень маленький размер и нам придется переключать страницы при распаковке. И на каждую страницу программу-переключатель-на-нулевую-страницу засовывать (что бы загружаться можно было с любой страницы).

Пойду вытравлю плату-переходник PLCC32-DIP32, что бы поэкспериментировать с микросхемой. И справку почитаю. Надо выяснить, сколько бит передавать в каждом случае (R/C). Можно ли на постоянную замкнуть OE на землю. Будет ли ПЗУ правильно работать, если менять адреса при постоянных R/C и OE?

vinxru
20.11.2011, 15:49
На картридж 256 Кбайт (49F020) влезли все игры! (За исключением 3-х несущественных) Не влезли музыкальные демки и не игровые программы (типа бейсика)

esl
20.11.2011, 16:42
Не влезли музыкальные демки
p.s.а есть где список с описанием ?
чтоб не пересматривать все.
собственно что из них демки?

vinxru
20.11.2011, 19:21
Музыкальные демки это:
MUS1, MUS2, MUS3, MUS4, MUS5, MUS6, MUS7, MUSICBOX

Не игровые программы:
BASGRAPH, BASMICR, BASMSX, BASRK, REDASM, REDDSSM
RECORDER, POISK, DUMPRED, GRAPHRED, PROVERKA

vinxru
21.11.2011, 01:46
Прошивка на 256 Кбайт.

BADROAD, BATTLESH, BDASHALL, BDASHFRM, BDASHSMR, BLDRDASH, BOMBARD, BOX, BUCK_ROG,
CHUDOV, CIRK, CROCET, CROSSFIR, DESCENT, DIGGER, ENGL, FOOTBALL, FOXHUNT, FROGGI15,
GONKI, GORODKI, KLAD, KOLOBOK, KOMMUTAT, LANDMINE, LESTN, LESTNICA, LIFE, LIFE1,
LIQSKY, LODERUN, LRUNNER, MARAFON, MARS, MARS2, MARSH2, MESH, MIRAGE, NESUSHKA
NIM, PACMAN, PANIKA, PENTIS, PIF, PINGPONG, PLANETA, POGONIA, PVO87, RALLI, RALSLAL,
REDFLWR, REIN, RIKOSHET, RISE, SABOTEUR, SAD, SHAHTY, SHASHKI, SHMEL, SHTURM, SKACHKI
SKALOED, SLAMS, SNAKE, SOS, SPBATTLE, SPYSDEM, STAKAN, STELBI, STENA, STONEFLD,
TARELKI, TENNIS, TETRIS, TORPATT, TRASINA, TULPAN, UTKA, WOOD, XONIXZM, XTRO, MUS5

Это все игры с сайта emu80.org, кроме CHESS (Шахматы), UDAV (примитивнейшая змейка), SPINSECT (хрень какая то).

Проверить можно в эмуляторе b2m. Запуск командами "R0,10" и "G".

UPD: Эта прошивка устарела, ищи новую дальше по форуму.

Mick
21.11.2011, 07:11
Прошивка на 256 Кбайт.
.

Посморти соседнюю ветку http://zx.pk.ru/showthread.php?t=9368 там есть образы с моих кассет, там есть и другие программы. Кстати демку запусти на реале

vinxru
21.11.2011, 09:52
Посморти соседнюю ветку http://zx.pk.ru/showthread.php?t=9368 там есть образы с моих кассет, там есть и другие программы

Ага, уже среди сотни файлов нашел новые программы:

vulkan (не запускается), barmen, goroskop, landing, meshanin, muravein, otello, rally2, spy_s, tvtune_i, voice, kartoteka

Остальное попозже разгребу.

Mick
21.11.2011, 19:39
vulkan (не запускается)


А это ты читал? http://zx.pk.ru/showpost.php?p=349964&postcount=81

vinxru
21.11.2011, 21:02
Видимо нет.

---------- Post added at 20:02 ---------- Previous post was at 19:08 ----------

Разобрался с микросхемами 49LF.

Единственный способ прочитать из неё данные:
1) Установка на шину адреса 11 младших бит.
2) Спад R/C
3) Установка на шину адреса 8 старших бит.
4) Подъем R/C.

И только в этот момент (после подъема R/C) на выходе появляются данные.

Если на входе R/C высокий уровень, то вход OE работает как положено. Если там низкий уровень, то при подъеме OE, выходы переходят в Z состояние (как положено), а вот при спаде OE микросхемы выходы микросхемы не выходят из Z-состояния. На выходах появляются данные только при подъеме R/C, но эти данные некорректны.

Если вход OE замкнуть с R/C, то на выходе ПЗУ всегда Z.

----

Я только что придумал простой способ загрузиться с помощью Монитора с такой микросхемы. На микросхеме 155ЛА3 будет собран генератор, подающий импульсы с очень большой частотой на R/C. Генератор будет управляться адресными линиями A12,A13. Генератор будет работать, если на линиях A12,A13 будут присутствовать нули. Другими комбинациями A12,A13 можно будет переводить выход генератора в 1 или 0.

То есть при чтении адресов 0-7FFh будет производится чтение ячеек ПЗУ 0,801h,1002h,1803h..., при чтении адресов 800-FFFh будет производится установка младших битов адреса, при чтении адресов 1000h-10FFh будет производится установка старших битов адреса.

vinxru
21.11.2011, 22:37
Собрал схему на макетке, вроде работает. Теперь прошивку буду писать.

Во вложении схема ROM-диска на 49LF040 + 155ЛА3. На схеме опечатка. Конденсатор C3 должен быть подключен между VCC и GND.

UPD: Эта схема устарела, ищи новую дальше по форуму.

Titus
21.11.2011, 22:44
Примерно так. Теперь прошивку писать.
Просьба постить схемы в нормально-читаемом разрешении. Например, через radikal.ru или любую другую картинкохранилку.

vinxru
21.11.2011, 22:51
Просьба постить схемы в нормально-читаемом разрешении. Например, через radikal.ru или любую другую картинкохранилку.

Так устроит?

Titus
21.11.2011, 22:58
Так устроит?
Вот так устроит, если вы хотите удобства для читателей:
http://s017.radikal.ru/i417/1111/b3/8f6df96b4323.png

b2m
21.11.2011, 23:03
То есть при чтении адресов 0-7FFh будет производится чтение ячеек ПЗУ 0,801h,1002h,1803h..., при чтении адресов 800-FFFh будет производится установка младших битов адреса, при чтении адресов 1000h-10FFh будет производится установка старших битов адреса.
Вот про то, как будет читаться по адресам, отличным от 0,801h,1002h,1803h... поподробнее. Или для старших адресов всё-таки регистр с мультиплексором будет?

---------- Post added at 00:02 ---------- Previous post was at 00:00 ----------

Не, лучше два регистра с трёхстабильным выходом, а то много мультиплексоров надо будет.

---------- Post added at 00:03 ---------- Previous post was at 00:02 ----------

Или регистр и шинный формирователь.

vinxru
21.11.2011, 23:27
Вот так устроит, если вы хотите удобства для читателей:

Я боюсь, что любой внешний сайт через 10 лет пропадет. А статьи на этом сайте живут гораздо дольше. Я очень не хочу, что бы тема осталась, а схемы исчезли.


Вот про то, как будет читаться по адресам, отличным от 0,801h,1002h,1803h... поподробнее. Или для старших адресов всё-таки регистр с мультиплексором будет?

Я сейчас размышляю, как устроить чтение. Для управления входом R/С я уже передумал использовать линии A11,A12. Я буду использовать A14, A15, так легче писать программу. И микросхему 155ЛА3 заменю на 155ЛЕ1 (ИЛИ НЕ).

; A0-A10, 14 бит - это спад R/C, 15 бит - это блокирование генератора
ld hl, 0F800H
ld (0EE01h), hl

; A11-A19, 14 бит - это подъем R/C, 15 бит - это блокирование генератора
push hl
ld hl, 0B800H
ld (0EE01h), hl
pop hl

ld a, (0EE00h)

---------- Post added at 22:22 ---------- Previous post was at 22:19 ----------

Или с переменными:

readByte:
ld (0EE01h), hl ; A0-A10, 15 бит - это спад R/C, 14 бит - это блокирование генератора
push hl ; A11-A19, 15 бит - это подъем R/C, 14 бит - это блокирование генератора
ld hl, (bank)
ld (0EE01h), hl
pop hl
inc l
call z, incBank
ld a, (0EE00h)
ret

bank dw 0B800H

incBank:
inc h
ret nz
ld hl, 0F800h
inc (bank)
ret

---------- Post added at 22:27 ---------- Previous post was at 22:22 ----------


Не, лучше два регистра с трёхстабильным выходом, а то много мультиплексоров надо будет. Или регистр и шинный формирователь.

Хочется как можно проще. 155ЛЕ1 + ПЗУ

UPD: Эта схема устарела, ищи новую дальше по форуму.

http://s017.radikal.ru/i418/1111/63/33686d7dc0cb.png

Titus
22.11.2011, 00:04
А почему не завести R/C на сободную адресную линию типа A15, и таким образом не управлять процессом? Безо всяких генераторов?

vinxru
22.11.2011, 00:18
А почему не завести R/C на сободную адресную линию типа A15, и таким образом не управлять процессом? Безо всяких генераторов?

Тогда нельзя будет из Монитора запуститься. Монитор ведь должен будет постоянно дергать A15, а он этого не умеет.

На последней схеме я завел R/C на свободную адресную линию A14. А на линию A15 подключено отключение генератора.

b2m
22.11.2011, 00:26
То есть монитор будет читать загрузчик по адресам 0,801h,1002h,1803h... а уж этот загрузчик будет читать остальное? Не слишком ли сложно будет потом пропускать эти байты при нормальном чтении?

vinxru
22.11.2011, 00:54
То есть монитор будет читать загрузчик по адресам 0,801h,1002h,1803h... а уж этот загрузчик будет читать остальное?

Да.


Не слишком ли сложно будет потом пропускать эти байты при нормальном чтении?

Архиватор работает последовательно, поэтому сложности пропускать 1 байт не составит. Условие типа:

if(bank==offset) offset++;

Сложность, сделать это без заметных тормозов. Я сейчас как раз над этим думаю.

Можно еще начинать чтение каждой страницы со смещения 1. А потом этот адрес чтения XOR-ить на номер банка. Таким образом мы никогда не обратимся к адресам: 0,801h,1002h,1803h

---------- Post added at 23:54 ---------- Previous post was at 23:42 ----------

Начальный загрузчик будет размером всего 35 байт, следовательно для программ размещенных после адреса 35 * 2048 + 35 = 71715 не требуется пропускать байт. И можно применить упрощенный и более быстрый загрузчик.

Titus
22.11.2011, 01:33
А что читается на шине данных, при R/C = 0? Там предыдущие данные, или же Z-состояние?

vinxru
22.11.2011, 01:52
предыдущие данные

Titus
22.11.2011, 02:06
предыдущие данные
В таком случае, вешаем R/C на А0, и читаем в память короткую программу начальной загрузки, у которой все байты будут повторяться по два раза. Только надо извратиться и написать такую программу)

vinxru
22.11.2011, 02:30
Я об этом уже думал :) Только я хотел соединить OE и R/C, что бы каждый второй байт был нулевым. Написать такую программу проще. Но ПЗУ ведет себя неадекватно, если дергать OE во время ввода адреса. Если же подключить OE через инвертор, то все работает нормально. Каждый второй байт читается нулевым.
То есть один дополнительный корпус, как у меня.

Только это не решает проблему "диагональной" записи загрузчика.

Можно было бы поставить ATMega8 на плату. Она бы и с монитором была бы совместима и адрес сама бы увеличивала. И возможно разархивацией бы занималась. К этой же ATMega вместо ПЗУ можно было бы прикрутить SD-карту.

А начиналось все просто с припаивания ПЗУ к разъему Апогея. Я не нашел маленьких переключателей для линий A16-A19 и впаял регистр. Потом меню нарисовал. Потом архивацию добавил. Сейчас уже мысли об SD-карте. :)

Нет, надо просто ПЗУ прикрутить.

Ниже первые наброски загрузчика. Надо будет не забыть посмотреть, где у Апогея стек расположен. Есть подозрение.

Titus
22.11.2011, 02:37
Я об этом уже думал :) Только я хотел соединить OE и R/C, что бы каждый второй байт был нулевым. Написать такую программу проще. Но ПЗУ ведет себя неадекватно, если OE дергать OE во время ввода адреса. Если же подключить OE через инвертор, то все работает нормально. Каждый второй байт читается нулевым.
То есть один дополнительный корпус, как у меня.

Только это не решает проблему "диагональной" записи загрузчика.
Ничего страшного, можно записать и диагонально. А при распаковке и копировании будут пропускаться адреса, у которых номер столбца и строки равны.
Дополнительный корпус - это не айс, если программно можно обойтись без него, хоть и с извратами.

---------- Post added at 01:37 ---------- Previous post was at 01:35 ----------

Точно ли проверено, что если подсоединить A0 на R/C, а все остальные адреса A1 -> A0, A2 -> A1 и т.д., со смещением, то при чтении массива данных с адреса 0000 по, скажем 00FF, прочтутся парные байты?

vinxru
22.11.2011, 02:56
Точно ли проверено, что если подсоединить A0 на R/C, а все остальные адреса A1 -> A0, A2 -> A1 и т.д., со смещением, то при чтении массива данных с адреса 0000 по, скажем 00FF, прочтутся парные байты?

100%
Причем самый первый байт будет будет случайным. Или Z, что так же может породить случайный байт.

Titus
22.11.2011, 03:23
100%
Причем самый первый байт будет будет случайным. Или Z, что так же может породить случайный байт.
Тогда предлагаю такой вот загрузчик.
Загружается в память с адреса 0000 по 00FF, например. Стартует с адреса 0001, т.к. по адресу 0000 мусор.


0000 xx

0001 06 B2 LD B,0xB2 ; B = 0xB2 (Lenght)
0003 B2 OR D
0004 11 11 00 LD DE,0x0011 ; DE = 0x0011 (Source)
0007 00 NOP
0008 62 LD H,D
0009 62 LD H,D
000A 6A LD L,D
000B 6A LD L,D ; HL = 0x0000 (Destination)
000C Е5 PUSH HL
000D Е5 PUSH HL ; 0x0000 -> (SP)
000E C3 C3 00 JP 0x00C3 ; --> 0x00C3

0011 00 NOP
0012 DATA
.. ..
00C1 DATA

00C2 1A LD A,(DE)
00C3 1A LD A,(DE) ; A = (DE)
00C4 13 INC DE
00C5 13 INC DE ; DE = DE + 2
00C6 77 LD (HL),A
00C7 77 LD (HL),A ; (HL) = A
00C8 3A 3A 23 LD A,(0x233A)
00CB 23 INC HL ; HL = HL + 1
00CC 06 DEC B
00CD 06 DEC B ; B = B - 2
00CE C2 C2 00 JP NZ,0x00C2 ; if (B <> 0) goto 0x00C2 -->
00D1 00 NOP
00D2 C9 RET ; goto 0x0000 -->
00D3 C9 RET

Таким образом, все байты продублированы. Записан по диагонали во флешке. После запуска, он распаковывает с адреса 0x0011 на адрес 0x0000 уже нормальный вторичный загрузчик, в котором все байты индивидуальные, длина которого может достигать (0x00C2 - 0x0012) / 2 = 88 байт, чего вполне хватит, чтобы загрузить меню с распаковщиком.

Mick
22.11.2011, 07:11
Надо будет не забыть посмотреть, где у Апогея стек расположен. Есть подозрение.

насколько помню стек у Апогея устанавливается с E1CFh

vinxru
22.11.2011, 11:17
Тогда предлагаю такой вот загрузчик.

Готов. Он загружает программу любого размера из ПЗУ в память и запускает. При загрузке пропускает адреса 0, 801h, 1002h, 1803h.

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

UPD: Запуск по командам G3 или G1

AIS
22.11.2011, 11:55
Не пинайте сильно, может не до конца разобрался - если R\C просто соединить с А0 - разве не будет читаться?

---------- Post added at 11:53 ---------- Previous post was at 11:46 ----------

Только R\C надо легка задержать, чтобы стабильный адрес записался в ПЗУ.

---------- Post added at 11:55 ---------- Previous post was at 11:53 ----------

И R\С подтянуть резитором к питанию, чтобы после включения сразу на нём была "1"

vinxru
22.11.2011, 12:14
Не пинайте сильно, может не до конца разобрался - если R\C просто соединить с А0 - разве не будет читаться?

В последней схеме, которую предложил Titus и под которую я уже переписал все программы, A0 соединен с R/C. Новые данные на выходе ПЗУ появляются только при изменении 0=>1 на входе R/C. То есть только при чтении нечетных адресов. В таком включении программа читается так, что каждый второй байт дублируется. Изначально я почему то подумал, что такую программу написать будет не просто и даже думать не стал, а Titus не поленился и написал загрузчик. Получилось 108 продублированных байт:

06 06 06 06 B2 B2 11 11 00 00 62 62 6A 6A C3 C3
00 00 01 01 FF FF 00 00 21 21 03 03 EE EE 36 36
90 90 2B 2B 2B 2B 70 70 11 11 00 00 F0 F0 3A 3A
1F 1F 00 00 3D 3D BB BB CA CA 25 25 00 00 23 23
...

---------- Post added at 11:14 ---------- Previous post was at 11:06 ----------


И R\С подтянуть резитором к питанию, чтобы после включения сразу на нём была "1"

А это ведь косяк. При теплой перезагрузке компьютера, на A0 может и не быть 1. Следовательно, не только нулевой байт, но и первый байт может содержать мусор. Надо запускаться с 3-ого адреса. Исправил.

AIS
22.11.2011, 12:23
Спешил предложить - недочитал тему...

b2m
22.11.2011, 12:26
При теплой перезагрузке компьютера, на A0 может и не быьть 1.
Если притянуть к +5В, то будет. При сбросе выводы ВВ55 переключаются на ввод.

vinxru
22.11.2011, 12:37
Если притянуть к +5В, то будет. При сбросе выводы ВВ55 переключаются на ввод.

Я на всякий случай оставлю такую возможность. Бережёного бог бережёт (с). С этой поправкой можно и с 1-ого адреса запускаться.

0001 06 06 LD B, 6
0003 06 B2 LD B, 0B2h
0005 B2 OR D

esl
22.11.2011, 14:21
vinxru,
слушай, а чего к тебя гонки не цветные !?!
тут http://zx.pk.ru/showthread.php?t=9368&page=19 есть цветные
круто ...

http://dl.dropbox.com/u/490774/gonki_color_small.png

заберите к себе полную картинку, а то не аттачится :(
gonki_color.png (http://dl.dropbox.com/u/490774/gonki_color.png)
gonki_color_small.png (http://dl.dropbox.com/u/490774/gonki_color_small.png)

vinxru
22.11.2011, 16:03
А чего это вода красная, а деревья и футбольное поле желтые?

esl
22.11.2011, 16:29
А чего это вода красная, а деревья и футбольное поле желтые?

а на реале как ?
эт скришноты из emu b2m

vinxru
22.11.2011, 16:56
Я в цвете Апогей еще не подключал.

b2m
22.11.2011, 17:49
Я запускал какой-то тест для цветного Апогея, там цвета соответствовали названию.

vinxru
22.11.2011, 22:08
Я подпаял микросхему и попробовал с помощью монитора загрузить из неё данные. Неожиданный эффект, вроде как по адресам 0,1,2 читается первый байт. То есть можно запускать программу и с нулевого адреса, то есть командой G без параметров.

Косяк. Новый байт появляется по нечетному адресу! А загрузчик мы написали для случая, когда новый байт появлятся по четному адресу...

b2m
22.11.2011, 22:34
То есть можно запускать программу и с нулевого адреса, то есть командой G без параметров.
Тогда лучше первым байтом NOP сделать, а то если в начале будут двухбайтовые команды, то совсем не безразлично, с нулевого или первого байта запускать.

---------- Post added at 23:34 ---------- Previous post was at 23:19 ----------


Новый байт появляется по нечетному адресу!
Логично. Когда R/C падает в ноль, запоминается старшая половина адреса (row), а когда устанавливается в еденицу, происходит выборка по полному адресу (запомненный row и текущий col), а результат защёлкивается в выходном регистре.

vinxru
22.11.2011, 23:35
Логично. Когда R/C падает в ноль, запоминается старшая половина адреса (row), а когда устанавливается в еденицу, происходит выборка по полному адресу (запомненный row и текущий col), а результат защёлкивается в выходном регистре.

Логично то логично. но у всех перед глазами была программа и дампы и никто не обратил внимания.

Теперь будет так:



org 0h
NOP ; 00 Первые три байта идентичны, но они могут не прочитаться.
NOP ; 00
NOP ; 00
LD DE, 11h ; 11 11 00
NOP ; 00
LD H, D ; 62
LD H, D ; 62
LD L, D ; 6A
LD L, D ; 6A
LD BC, 0AE01h ; 01 01 AE (AE - это размер блока данных 0C1h - 13h)
XOR (HL) ; AE
JP 0x00C3 ; C3 C3 00
NOP ; 00
org 013h
DATA-DATA-DATA-DATA-DATA
org 0C1h
DEC HL ; 2B
C2: DEC HL ; 2B
C3: INC DE ; 13
INC DE ; 13
LD A,(DE) ; 1A
LD A,(DE) ; 1A
LD (HL),A ; 77
LD (HL),A ; 77
INC HL ; 23
INC HL ; 23
DEC B ; 05
DEC B ; 05
JP NZ,0x00C2 ; C2 C2 00
NOP ; 00
LD DE, 0xC311 ; 11 11 C3
JP 0 ; C3 00 00

b2m
23.11.2011, 12:23
Теперь будет так:
Единственный недостаток этого загрузчика (как, впрочем, и предыдущей его версии) - слишком длинный :)
При 11-битной адресации размер одного ряда будет 2Кб, а загрузчик потребует 107 байт по диагонали, т.е. эта диагональ растянется на 214Кб.

Нужно как можно меньше записать по диагонали, например так:


org 1h
LXI H, 21h ; 21 21 00
NOP ; 00
SPHL ; F9
SPHL ; F9
DCX H ; 2B
L0008: DCX H ; 2B
POP PSW ; F1
POP PSW ; F1
MOV M,A ; 77
MOV M,A ; 77
RST 1 ; CF
RST 1 ; CF
DS 14h ; 20 любых байт
L0023: DATA-DATA-DATA


Данный загрузчик преобразует DATA в нормальный код с адреса 000Dh и запустит его. Правда, размер его может быть всего 19 байт, и располагать его в DATA нужно задом наперёд. Но эти 19 байт могут грузить уже нормально, а не по диагонали.

Вот пример:


org 0Dh
LXI H, 0EE01h ; 21 01 EE
POP B ; C1 берём из DATA адрес, куда загружать, например 8080h
POP D ; D1 инициализируем регистр E из DATA, должно быть 0000h
L0012: MOV M,E ; 73 row = E/2
MVI M,1 ; 36 01 col = 0
LDA 0EE00h ; 3A 00 EE читаем байт
STAX B ; 02 сохраняем
INX B ; 03
INR E ; 1C E=E+2
INR E ; 1C
RZ ; C8 если ноль (загрузили 128 байт), то переходим по адресу из DATA, должно совпадать с началом вторичного загрузчика, например 8080h
JMP L0012 ; C3 12 00 на начало цикла
L0020:


Итого, по диагонали будет записано всего 39 байт, т.е. в пределах 80Кб

Недостатки:
- нужно запускать по адресу 0001
- грузит только 128 байт, т.е. нужно догружать остаток

Titus
23.11.2011, 15:07
Единственный недостаток этого загрузчика (как, впрочем, и предыдущей его версии) - слишком длинный :)
При 11-битной адресации размер одного ряда будет 2Кб, а загрузчик потребует 107 байт по диагонали, т.е. эта диагональ растянется на 214Кб.

Не будет. Загрузчик займет именно столько байт, сколько для него требуется. А при загрузки самих игр данные байты с адресом строки равным адресу колонки, будут пропускаться. Таким образом, теряем только 2кб.

---------- Post added at 14:07 ---------- Previous post was at 13:58 ----------


Нужно как можно меньше записать по диагонали, например так:


org 1h
LXI H, 21h ; 21 21 00
NOP ; 00
SPHL ; F9
SPHL ; F9
DCX H ; 2B
L0008: DCX H ; 2B
POP PSW ; F1
POP PSW ; F1
MOV M,A ; 77
MOV M,A ; 77
RST 1 ; CF
RST 1 ; CF
DS 14h ; 20 любых байт
L0023: DATA-DATA-DATA

Хороший загрузчик, хитрый)

vinxru
23.11.2011, 15:15
Программа последовательно читает ПЗУ, пропускает 128 байтный загрузчик расположенный по диагонали. Пропускается 1 байт из 2048. В ПЗУ 256 Кб теряется 128 байт, в ПЗУ 512 Кб теряется 256 байт.

Инициализация:

V_BANKL1 = банк * 2
V_BANKL2 = банк * 2 + 1
V_BANKH1 = (банк * 2) >> 8
DE = (смещение * 2) | 0xF000



; Чтение байта из ПЗУ
; Вызывающая программа хранит и не изменяет DE.
; DE - это смещение от F000 до FFFF c шагом 2.

READBYTE: LD A, D
LD (0EE02h), A
LD A, E
V_BANKL1: CP 0 ; тут находятся 7 бит банка (*2)
JP Z, IGNOREBYTE ; Пропускаем диагональные байты
NOIGNOREBYTE: LD (0EE01h), A
V_BANKH1: LD A, 0 ; тут находится старший бит банка
LD (0EE02h), A
V_BANKL2: LD A, 1 ; тут находится 7 бит банка (*2+1)
LD (0EE01h), A
LD A, (0EE00h)
INC E
INC E
RET NZ

;----------------------------------------------------------------------------
; Пересекли границу 128 байт

INCBANK: INC D
RET NZ

; Пересекли границу 2048 байт

; Выводим прогресс
PUSH DE
PUSH BC
ld c, '.'
call 0F809h
POP BC
POP DE

; Увеличиваем счетчики банков
PUSH AF
LD A, (V_BANKL2+1)
INC A
JP Z, INCBANK1
INCBANK2: LD (V_BANKL1+1), A
INC A
LD (V_BANKL2+1), A
POP AF

; Адрес чтения
LD DE, 0F000h

RET

;----------------------------------------------------------------------------
; Пересекли границу 256 Кб

INCBANK1: PUSH HL
LD HL, V_BANKH1+1
INC (HL)
POP HL
JP INCBANK2

;----------------------------------------------------------------------------
; Пропускаем диагональные байты

IGNOREBYTE: LD A, D ; Пропускаем только адреса 0-128
AND 0Fh
LD A, E
JP NZ, NOIGNOREBYTE
INC E
INC E
CALL Z, INCBANK
JP READBYTE

Titus
23.11.2011, 16:55
Киньте кто-нить пару-тройку ромов от апогея, и скажите, сколько они занимают ужатые. Хочу со своим пакером сравнить.

b2m
23.11.2011, 17:12
Скачай MegaLZ (http://lvd.nm.ru/MegaLZ/), да возьми любые файлы, хоть от РК, хоть от Апогея. Запакуй и сравни.

Titus
23.11.2011, 17:17
Скачай MegaLZ (http://lvd.nm.ru/MegaLZ/), да возьми любые файлы, хоть от РК, хоть от Апогея. Запакуй и сравни.
Вы MegaLZ хотите тут использовать?

vinxru
23.11.2011, 17:21
Вы MegaLZ хотите тут использовать?

Используем. Нет у меня на работе ROM-ов.

Titus
23.11.2011, 17:24
Используем. Нет у меня на работе ROM-ов.
Судя по депакеру, он должен быть не очень быстрый.

vinxru
23.11.2011, 17:28
Судя по депакеру, он должен быть не очень быстрый.

Распаковка игры гонки, которая занимает 29 Кб, длится 3 518 299 тактов или ~2 секунды.

b2m
23.11.2011, 17:34
Судя по депакеру, он должен быть не очень быстрый.
Я оптимизировал депакер для ВМ80.

Вот, сбацал конфиг, для демонстрации вышеизложенного "хитрого" загрузчика. Незнаю, насколько точно эмулируется 49LF004, но загрузчик работает. Единственное, что не нравится, при загрузке из монитора конечный адрес должен быть нечётный, т.е. типа так:
R0,4F
G1

Titus
23.11.2011, 18:01
Распаковка игры гонки, которая занимает 29 Кб, длится 3 518 299 тактов или ~2 секунды.
Сравнил своим пакером.
У меня гороскоп упаковался до 9251, а MegaLZ упаковал до 7692. Выигрыш заметный. Единственное, что скорость распаковки у меня сравнима с линейным копированием памяти.

b2m
23.11.2011, 18:10
Ну дык и у MegaLZ тоже:
распаковка - 3 518 299 тактов
копирование командой монитора T - 3 151 860

Хотя в мониторе команда Т немного не оптимальна, на каждый байт дважды делает CALL.

Titus
23.11.2011, 18:17
Ну дык и у MegaLZ тоже:
распаковка - 3 518 299 тактов
копирование командой монитора T - 3 151 860

Хотя в мониторе команда Т немного не оптимальна, на каждый байт дважды делает CALL.
Я имею ввиду линейное копирование методом типа LDI )

---------- Post added at 17:17 ---------- Previous post was at 17:12 ----------


Сравнил своим пакером.
У меня гороскоп упаковался до 9251, а MegaLZ упаковал до 7692. Выигрыш заметный. Единственное, что скорость распаковки у меня сравнима с линейным копированием памяти.
На других программах, разница не так заметна, байт 400-500. Но все равно ощутима. Так что если места во флешке под завязку, то лучше выбрать тот пакер, который архивирует лучше. А если не под завязку, то тот, что быстрее распаковывает)

b2m
23.11.2011, 18:19
У меня гороскоп упаковался до 9251, а MegaLZ упаковал до 7692. Выигрыш заметный.
MegaLZ вообще неплохо пакует. Я сравнил, для прикола, с архиватором RAR - на гонках MegaLZ сделал файл всего лишь на 14% больше.

Titus
23.11.2011, 19:34
Вот, сбацал конфиг, для демонстрации вышеизложенного "хитрого" загрузчика. Незнаю, насколько точно эмулируется 49LF004, но загрузчик работает. Единственное, что не нравится, при загрузке из монитора конечный адрес должен быть нечётный, т.е. типа так:
R0,4F
G1
Загрузчик, конечно, прикольный, но преимуществ перед тем, что был предложен ранее нет. Наоборот, лишние некрасивости в параметрах запуска.
Если загрузчик располагается по диагонали, как и было предложено, то, что там диагональ была занята, что здесь - один фиг. А диагональ эта всего лишь 256 байт, т.к. у нас не квадрат, а прямоугольник со стороной 8 бит. Если же располагать его по диагонали эксклюзивно, не поверх массива программ, то это уменьшит емкость флешки уже не на 256 байт, а на несколько килобайт, что тоже в минус, нежели в плюс.

b2m
23.11.2011, 19:42
Если загрузчик располагается по диагонали, как и было предложено, то, что там диагональ была занята, что здесь - один фиг.
Чем меньше байт по диагонали занято, тем больше будет вторая часть ПЗУ, где нет необходимости пропускать байты при загрузке. Если посмотреть на п/п, предложенную vinxru выше, то даже невооружённым глазом видно, что замедление при загрузке с пропусками будет офигительное.

Titus
23.11.2011, 19:46
Чем меньше байт по диагонали занято, тем больше будет вторая часть ПЗУ, где нет необходимости пропускать байты при загрузке. Если посмотреть на п/п, предложенную vinxru выше, то даже невооружённым глазом видно, что замедление при загрузке с пропусками будет офигительное.
И так соотношение медленной и быстрой части 1 к 8 )

vinxru
24.11.2011, 00:15
Чем меньше байт по диагонали занято, тем больше будет вторая часть ПЗУ, где нет необходимости пропускать байты при загрузке. Если посмотреть на п/п, предложенную vinxru выше, то даже невооружённым глазом видно, что замедление при загрузке с пропусками будет офигительное.

Я выделил жирным часть, отвечающую за пропуск. Две команды из 14. Переход происходит с вероятностью 1/128, поэтому его можно и не считать. Даже не 14, а еще расходы на CALL. Да и LD (N), A выполняется в 3 раза дольше CP 0. Итого замедление не более 10%.

LD A, D
LD (0EE02h), A
LD A, E
CP 0
JP Z, IGNOREBYTE
LD (0EE01h), A
LD A, 0
LD (0EE02h), A
LD A, 1
LD (0EE01h), A
LD A, (0EE00h)
INC E
INC E
RET

---------- Post added at 23:15 ---------- Previous post was at 22:00 ----------


Вот, сбацал конфиг, для демонстрации вышеизложенного "хитрого" загрузчика. Незнаю, насколько точно эмулируется 49LF004, но загрузчик работает. Единственное, что не нравится, при загрузке из монитора конечный адрес должен быть нечётный, т.е. типа так:
R0,4F
G1

Строки столбцы перепутаны. Или строки и столбцы защелкиваются одновременно. Пытаюсь из твоего конфига убрать символ ~. Пока только хуже стало.

vinxru
24.11.2011, 00:35
Исправил конфигурацию эмулятора. Вроде бы работает.

b2m
24.11.2011, 00:42
А разве row это младшие биты адреса?

vinxru
24.11.2011, 01:01
Я конечно мог ошибиться, но я 10 раз с помощью Ардуино проверил, что: младшие биты - спад - старшие биты - подъем.

Если перед спадом изменять выводы микросхемы A7-A10, то изменяются данные а входе. Если изменять перед подъемом A7-A10, то данные стабильны.

b2m
24.11.2011, 12:21
я 10 раз с помощью Ардуино проверил, что: младшие биты - спад - старшие биты - подъем
Тады ой. :)

---------- Post added at 13:21 ---------- Previous post was at 13:17 ----------

А для младших битов адреса все 11 линий используются?

vinxru
24.11.2011, 13:01
А для младших битов адреса все 11 линий используются?

Да. Сегодня прошью микросхему и все точно станет известно.

vinxru
24.11.2011, 13:12
Вот эта программа роняет эмулятор.

b2m
24.11.2011, 13:22
Запускал несколько раз - всё нормально.
Странненько.

vinxru
24.11.2011, 13:32
Запускаем эмулятор, Файл, Открыть, Выбираем файл и все падает.

Если запускать до этой программы что либо еще, или загружать её через команду монитора I, то все работает.

b2m
24.11.2011, 13:55
Всё равно не получилось. Может ты чего менял в конфигах?
Распакуй эмулятор в отдельный каталог и попробуй. Вроде не роняется.

vinxru
24.11.2011, 14:06
Ничего не менял. Фиг с ним.

vinxru
24.11.2011, 23:11
Прошивка для 49lf040 только что заработала. В эмуляторе.
Запустить можно в эмуляторе b2m, с конфигурацией Apogey R2.
Команды запуска R0,100 G1.

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

UPD: Эта прошивка устарела, ищи новую дальше по форуму.

Titus
24.11.2011, 23:54
Прошивка для 49lf040 только что заработала. В эмуляторе.
Запустить можно в эмуляторе b2m, с конфигурацией Apogey R2.
Команды запуска R0,100 G1.
Предлагаю такую идею - меню сделать не на весь экран, а, скажем, на верхнюю треть или пол-экрана. А в оставшейся части экрана будет представлен фрагмент игрового экрана выбранной игры. Чтобы перемещаясь по меню можно было ориентироваться, что за игра.

b2m
24.11.2011, 23:56
Ай маладес! :)

vinxru
25.11.2011, 01:25
http://s02.radikal.ru/i175/1111/3b/ac1fb0d649f2.jpg

Красота же :) Почти ANSI графика.

---------- Post added at 00:25 ---------- Previous post was at 00:05 ----------


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

Графические игры так не отобразить. И инструмент надо писать извлекающий текстовые изображения из дампов.

Titus
25.11.2011, 03:08
Графические игры так не отобразить. И инструмент надо писать извлекающий текстовые изображения из дампов.
Отобразить. Они же все равно в псевдографике. Как-нить исхитриться.
А инструмент - это эмулятор. Зато как удобно и приятно видеть фрагмент из игры.

vinxru
25.11.2011, 08:47
Они же все равно в псевдографике.

У Апогея два знакогенератора, три стандартных видеорежима 64x24 (шрифт 10 пикселей), 64x24 (шрифт 8 пикселей) и 64x64 (шрифт 4 пикселя), два режима отображения цвета, видеопамять может быть расположена в любом месте. И еще масса нестандартных настроек видеоконтроллера.

Одновременно со своим текстом, графику из игры отобразить будет сложно.

У Апогея цветовое разрешение выше, чем у ZX Spectrum. Два цвета на 3x2 пикселя (один из цветов черный и ограничено кол-во изменений цветов на строку до 16). А при удачном стечении обстоятельств и граф. разрешение выше: 384*256. Еще есть аппаратный скролл. Будет масса свободного времени, обязательно напишу красивую игрушку.

vinxru
25.11.2011, 10:54
Попробовал порисовать в граф. режиме.

http://s017.radikal.ru/i412/1111/82/c77dcf7fc709.png

Судя по эмулятору, видимое разрешение 234x118.

b2m
25.11.2011, 12:09
Красиво. Но на реале может выглядеть не так. Эмулятор не совсем корректно отображает атрибуты. Если сможешь, сделай пожалуйста фотку с реального цветного Апогея.

---------- Post added at 13:09 ---------- Previous post was at 13:04 ----------


Судя по эмулятору, видимое разрешение 234x118.
Если выбрать в меню "Size to ..." то увидишь цифры 468х256 - это размер окна на данный момент. С учётом того, что псевдопикселы 2х2 получается разрешение 234х128.

vinxru
25.11.2011, 12:20
Не хватает видеопамяти для рисования фона до края экрана.

Я так понял суть графики Апогея. Нам дается 69 байт видеопамяти для рисования строки из 64 символов. Каждая смена цвета съедает 1 байт, когда мы израсходуем 5 запасных байт, то приходится жертвовать видимыми символами справа.

Правда есть еще 8 символов с левой, невидимой на ТВ части экрана. Но толку от них нет.

http://s48.radikal.ru/i122/1111/fb/b01e10cc8b90.png

---------- Post added at 11:20 ---------- Previous post was at 11:14 ----------


Если сможешь, сделай пожалуйста фотку с реального цветного Апогея.

Подпаять RGB надо. И для монитора нужен PAL-кодер, который я еще не приоберл

b2m
25.11.2011, 13:28
Я так понял суть графики Апогея. Нам дается 69 байт видеопамяти для рисования строки из 64 символов. Каждая смена цвета съедает 1 байт, когда мы израсходуем 5 запасных байт, то приходится жертвовать видимыми символами справа.
Максимальная ширина строки, которую поддерживает ВГ75, 80 символов. Максимальное количество атрибутов в режиме, когда атрибут не занимает места, 16 штук. В силу особенностей развёртки ТВ, приходится ограничиваться только 78 символами. И даже в этом случае слева и справа символы скрываются за краем экрана (хотя в эмуляторе показано полностью). Но атрибутов можно использовать все 16.

Вот только, если их нет на экране, то ширина строки будет 78+16=94 символа, и телевизор откажется такое отображать. Поэтому можно сделать так: инициализировать экран так, чтобы присутствовали все 16 атрибутов (но не подряд, а минимум через 1 символ), настроить ПДП на новый размер экрана 94*64=6016 символа, и когда нужно будет в определённом месте изменить цвет, то просто подвинуть атрибуты в соответствии с нужными цветами.

Управляющий код 0F1h в этом случае можно не использовать.

Если графика состоит из блоков, то можно разместить атрибуты каждые 4 символа, тогда ширина блока будет 12 точек. Получим блоки одного цвета 12х2 точек.

b2m
25.11.2011, 15:44
Есть подозрение, что нужно убрать в конфиге строчку mode=3, тогда, судя по схеме, будет более соответствовать реалу.

vinxru
25.11.2011, 17:09
Прошил 74LF004 и подключил к реальному железу. Работает. Только первые 3 байта часто принимают случайные значения.

Черно-белый Апогей (тот который без Ц), на голубой цвет реагирует установкой серого фона. На желтый цвет никак не реагирует.

http://s45.radikal.ru/i108/1111/ec/ed981558d69a.jpg

http://s017.radikal.ru/i405/1111/ee/1d0cca1bcf28.jpg

Причем, в эмуляторе цветовые атрибуты действуют на следующий или после следующий символ. Здесь же видно, что цветовые атрибуты начинают работать в предыдущем знакоместе.

http://s52.radikal.ru/i137/1111/fe/16a682a6e52b.jpg

А невидимые атрибуты не работают. Найду программу использующую скрытие атрибутов (не свою), проверю на ней.

http://s46.radikal.ru/i112/1111/44/1a357a706115.jpg

И еще есть вот такие полоски шириной в один пиксель цвета C0C0C0h, там где стоит атрибут инвертирующий символ.

http://s003.radikal.ru/i204/1111/b4/da518a3c9cb4.jpg

b2m
25.11.2011, 17:54
Причем, в эмуляторе цветовые атрибуты действуют на следующий или после следующий символ. Здесь же видно, что цветовые атрибуты начинают работать в предыдущем знакоместе.
Это из-за mode=3, если его убрать, то в режиме, когда атрибуты занимают знакоместо, должно быть правильно. А режим, когда атрибуты не занимают знакоместо даже в этом случае работает неправильно, вроде бы.


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

omaxlab
25.11.2011, 18:05
vinxru, у меня есть пал кодер недописи , могу дать поиграться...

vinxru
25.11.2011, 18:06
Написал тест отображающий все атрибуты. Тут всего 4 градации цвета, 80=000000, 81=606060, 90=C0C0C0, 91=FFFFFF. То есть первый бит - это повышенная яркость. Остальные атрибуты повторяются, а на фото глюк фотоаппарата и монитора.

Замечу, что повышенная яркость включается для предыдущего знакоместа, а инверсия включается для текущего. Возможно это настраивается программно, не знаю.

http://s017.radikal.ru/i424/1111/7b/e33c3c288cee.jpg

И в том числе для режима скрытых атрибутов. Опа, он в этом примере работает :-/

http://i041.radikal.ru/1111/8e/f7d5858469fa.jpg

b2m
25.11.2011, 18:13
Тест-то дай, для сравнения в эмуляторе! :)

vinxru
25.11.2011, 18:19
Да, точно. Меня тут отвлекают.



y11:
call initScreen

; Графика
ld hl, txt1
ld bc, 0
call print

call 0F803h

call 0FACEh

; Графика
ld hl, txt1
ld bc, 0
call print

call 0F803h

jp y11

txt1: db "123",0x80, "45.80.12",0x80,"123 123",0x90, "45.90.12",0x80,"345",255
db "123",0x81, "45.81.12",0x80,"123 123",0x91, "45.91.12",0x80,"345",255
db "123",0x82, "45.82.12",0x80,"123 123",0x92, "45.92.12",0x80,"345",255
db "123",0x83, "45.83.12",0x80,"123 123",0x93, "45.93.12",0x80,"345",255
db "123",0x84, "45.84.12",0x80,"123 123",0x94, "45.94.12",0x80,"345",255
db "123",0x85, "45.85.12",0x80,"123 123",0x95, "45.95.12",0x80,"345",255
db "123",0x86, "45.86.12",0x80,"123 123",0x96, "45.96.12",0x80,"345",255
db "123",0x87, "45.87.12",0x80,"123 123",0x97, "45.97.12",0x80,"345",255
db "123",0x88, "45.88.12",0x80,"123 123",0x98, "45.98.12",0x80,"345",255
db "123",0x89, "45.89.12",0x80,"123 123",0x99, "45.99.12",0x80,"345",255
db "123",0x8A, "45.8A.12",0x80,"123 123",0x9A, "45.9A.12",0x80,"345",255
db "123",0x8B, "45.8B.12",0x80,"123 123",0x9B, "45.9B.12",0x80,"345",255
db "123",0x8C, "45.8C.12",0x80,"123 123",0x9C, "45.9C.12",0x80,"345",255
db "123",0x8D, "45.8D.12",0x80,"123 123",0x9D, "45.9D.12",0x80,"345",255
db "123",0x8E, "45.8E.12",0x80,"123 123",0x9E, "45.9E.12",0x80,"345",255
db "123",0x8F, "45.8F.12",0x80,"123 123",0x9F, "45.9F.12",0x80,"345",0


;----------------------------------------------------------------------------

initScreen:
ld c, 1Fh
call 0F809h
ld hl, 0EF01h
ld (hl), 0
dec hl
ld (hl), 04Dh
ld (hl), 01Dh
ld (hl), 088h
ld (hl), 64 ^ 0D3h
call initS2
ld b, 30
ld hl, 0E1D0h+77
xxd: ld (hl), 0F1h
ld de, 78
add hl, de
dec b
jp nz, xxd
ret

initS2: push hl
jp 0FADDh


;----------------------------------------------------------------------------

print: push de
print5: push bc

push hl
ld hl, 0E2C3h - 78
ld de, 78
inc c
print1: add hl, de
dec c
jp nz, print1
ld e, b
add hl, de
ex hl, de
pop hl

print2: ld a, (hl)
inc hl
or a
jp z, print3
cp 255
jp z, print4
ld (de), a
inc de
jp print2
print3: pop bc
pop de
ret

print4: pop bc
inc c
jp print5

b2m
25.11.2011, 18:25
Я думал, раз там атрибуты защёлкиваются в регистре, то они тоже будут задержаны до следующего знакоместа, вместе с точками символа, а судя по картинкам, это не так.

vinxru
25.11.2011, 18:26
Атрибуты 81,83, 86,87... в общем которых на фото не видно - мигающие.

b2m
25.11.2011, 18:29
Замечу, что повышенная яркость включается для предыдущего знакоместа, а инверсия включается для текущего. Возможно это настраивается программно, не знаю.
Инверсия тоже включается для предыдущего (посмотри на момент выключения), но пока отображается атрибут, действует сигнал VSP, который гасит изображение, если атрибут занимает знакоместо. Видимо из за несогласованности изменения сигналов VSP и RVV возникает полоска перед включением инверсии.

vinxru
25.11.2011, 18:35
У меня есть подозрение, что, отключить атрибут повышенной яркости можно отпаяв один резистор.

b2m
25.11.2011, 18:42
Вобщем ясно, первая картинка в эмуляторе выглядит аналогично (если убрать mode=3), а вот режим скрытых атрибутов надо доделывать.

---------- Post added at 19:42 ---------- Previous post was at 19:40 ----------

А инверсия, похоже, действительно включается для текущего, а выключается для предыдущего символа.

vinxru
25.11.2011, 18:51
А инверсия, похоже, действительно включается для текущего, а выключается для предыдущего символа.

Да. А для режима невидимых атрибутов:
1) Инверсия включается для предыдущего символа и выключается для предыдущего.
2) Повышенная яркость включается для предыдущего символа и выключается для предыдущего.
3) А вот мерцание включается для следующего и выключается для следующего.

Цветной чуть чуть попозже включу.

b2m
25.11.2011, 18:53
Слушай, а у тебя нет схемы нецветного Апогея (тот, который без Ц)? А то вдруг выяснится, что атрибуты у них по разному обрабатываются? Всё-таки я думаю, что неспроста там регистры для атрибутов стоят (в том, который с Ц).

vinxru
25.11.2011, 19:10
Только цветного, но могу попозже поискать в интернете.

---------- Post added at 18:10 ---------- Previous post was at 18:03 ----------

49LF нельзя вставлять повернутой на 180" в панельку программатора, они от этого умирают. :(

b2m
26.11.2011, 23:23
Переделал так, чтобы картинка совпадала с тестом атрибутов (если не принимать во внимание цвет). Запустил тест цветного Апогея, явно видно, что цвета смещены на одно знакоместо влево. Кажется, моё предположение, что атрибуты у цветного и нецветного Апогея работают по-разному, окажется верным. В принципе, если вернуть mode=3 на место, то всё выглядит ОК.

---------- Post added at 00:23 ---------- Previous post was at 00:19 ----------

А ещё, возможно, что биосы у них немного разные. То, что у меня в эмуляторе, наверное от нецветного. vinxru, сможешь снять дамп ПЗУ цветного и сравнить?

vinxru
26.11.2011, 23:25
Кстати вот плата цветного Апогея. (Сегодня весь день микросхемы перепаивал , дорожки прозванивал и что только не делал с ним. Пока не запустился.)

http://s006.radikal.ru/i214/1111/16/f996d523ed9f.jpg

Вот плата черно-белого Апогея. Он пока послужил донором двух микросхем.

http://s017.radikal.ru/i421/1111/88/aef6e09b8f3b.jpg

Цветной отличается наличием двух микросхем 155ЛЕ6 или 155ИР1. (и еще одной 140УД6 на загрузку с магнитофона).

vinxru
26.11.2011, 23:32
Это ПЗУ от цветного. Точно такие же как на emuverse.ru. И такой же в эмуляторе.

b2m
27.11.2011, 19:49
Обновил эмулятор, сделал разные конфигурации для цветного и нецветного Апогея. Тест атрибутов теперь полностью совпадает.

vinxru
29.11.2011, 11:55
Последний набор программ для Апогея. Я рассортировал всё, что нашел в этом форуме. Цветных гонок кстати не нашел.



asmrk86.rka
autozapusk.rka
BADROAD.RKA
barmen-2.rka
barmen.rka
BASGRAPH.RKA
BASMICR.RKA
BASMSX-2.RKA
BASMSX-3.RKA
BASMSX.RKA
BASRK.RKA
BASRK2.RKA
BASRKALT.RKA
BATTLESH.RKA
BDASHALL.RKA
BDASHFRM.RKA
BDASHSMR.RKA
BEST-2.rka
BEST.rka
BLDRDASH.RKA
BOMBARD-2.RKA
BOMBARD-3.RKA
BOMBARD.RKA
BOX.RKA
BUCK_ROG.RKA
CHESS.RKA
CHUDOV.RKA
CIRK.RKA
codilca.rka
CROCET.RKA
CROSSFIR.RKA
demo.rka
DEMO2-2.RKA
DEMO2.RKA
DESCENT.RKA
DIGGER.RKA
disasm1.rka
disasm2.rka
disasm3.rka
disasmse.rka
DONT_RUN
DUMPRED-2.rka
DUMPRED.RKA
ENGL.RKA
FOOTBALL.RKA
FOXHUNT.RKA
FROGGI15.RKA
GONKI.RKA
GONKI_BW.RKA
GORODKI.RKA
goroskop.rka
grafik.rka
GRAPHRED-2.RKA
GRAPHRED.RKA
kartoteka.rka
KLAD.RKA
KOLOBOK.RKA
KOMMUTAT.RKA
landing-2.rka
landing.rka
LANDMINE.RKA
LESTN.RKA
LESTNICA.RKA
LIFE.RKA
LIFE1.RKA
LIQSKY.RKA
list.txt
LODERUN.RKA
LRUNNER.RKA
MARAFON.RKA
mars-2.rka
mars-3.rka
MARS.RKA
MARSH2.RKA
marsiane.rka
MESH-2.RKA
MESH.RKA
meshanin.rka
mikron.rka
mikron2.rka
MIRAGE.RKA
muravein-2.rka
muravein.rka
MUS1.RKA
MUS2.RKA
MUS3-2.RKA
MUS3.RKA
MUS4-2.RKA
MUS4.RKA
MUS5.RKA
MUS6.RKA
MUS7.RKA
mus8.rka
MUSICBOX.RKA
NESUSHKA.RKA
NEW
NIM.RKA
NOT_RKA
otello.rka
PACMAN.RKA
PACMAN2.RKA
PANIKA.RKA
pascal_mfti.rka
PENTIS.RKA
PIF.RKA
PINGPONG.RKA
PLANETA.RKA
POGONIA.RKA
POISK.RKA
PROVERKA-2.RKA
PROVERKA.RKA
PVO87.RKA
RALLI.RKA
rally2.rka
RALSLAL-2.RKA
RALSLAL-3.RKA
RALSLAL.RKA
RECORDER.RKA
REDASM.RKA
REDDSSM.RKA
REDFLWR.RKA
REIN.RKA
RIKOSH2.RKA
RIKOSHET.RKA
RISE.RKA
saboteur-2.rka
SABOTEUR.RKA
SAD.RKA
SHAHTY.RKA
SHASHKI.RKA
SHMEL.RKA
SHTURM.RKA
sid.rka
SKACHKI.RKA
SKALOED.RKA
SLAMS.RKA
snake-2.rka
snake-3.rka
SNAKE.RKA
sos-2.rka
sos-3.rka
SOS.RKA
SPBATTLE.RKA
SPINSECT-2.RKA
SPINSECT-3.RKA
SPINSECT.RKA
SPYSDEM.RKA
spy_s.rka
STAKAN.RKA
STELBI.RKA
STENA.RKA
STONEFLD.RKA
tadr.rka
TARELKI.RKA
TENNIS.RKA
TETRIS.RKA
TORPATT.RKA
TRASINA.RKA
TULPAN.RKA
tvtune_i.rka
txtedcol.rka
txtedit.rka
UDAV.RKA
UDAV2.RKA
UTKA.RKA
voice.rka
VULKAN.RKA
WOOD.RKA
XONIXZM-2.RKA
XONIXZM.RKA
XTRO.RKA

DONT_RUN\22.rka
DONT_RUN\24.rka
DONT_RUN\26.rka
DONT_RUN\28_debug_mirwad.rka
DONT_RUN\31.rka
DONT_RUN\45.rka
DONT_RUN\46_kramis02.rka
DONT_RUN\m01.rka
DONT_RUN\m19.rka

NEW\new.rka
NEW\new1.rka
NEW\new11.rka
NEW\new12.rka
NEW\new13.rka
NEW\new2.rka
NEW\new3.rka
NEW\new4.rka
NEW\new5.rka
NEW\new6.rka
NEW\new7.rka
NEW\new8.rka
NEW\new9.rka

NOT_RKA\corpo16.bss
NOT_RKA\corpo17.bss
NOT_RKA\mick01.BSS
NOT_RKA\mick01.edm
NOT_RKA\mick02.bss
NOT_RKA\mick03.bss
NOT_RKA\mick03.edm
NOT_RKA\mick04.bss
NOT_RKA\mick04.edm
NOT_RKA\mick05.bss
NOT_RKA\mick05.edm
NOT_RKA\mick06.bss
NOT_RKA\mick07.bss
NOT_RKA\mick08.bss
NOT_RKA\mick09.bss
NOT_RKA\mick10.bss
NOT_RKA\mick11.bss
NOT_RKA\mick12.bss
NOT_RKA\mick13.bss
NOT_RKA\mick14.bss
NOT_RKA\mirwad00.edm
NOT_RKA\mirwad01.edm
NOT_RKA\mirwad02.edm
NOT_RKA\mirwad02_reklama_spektr001.bsm
NOT_RKA\mirwad03.edm
NOT_RKA\mirwad03_monitor_tune.bsm
NOT_RKA\mirwad04.edm
NOT_RKA\mirwad04_gadalka.bsm
NOT_RKA\mirwad05.edm
NOT_RKA\mirwad05_test.bsm
NOT_RKA\mirwad06.edm
NOT_RKA\mirwad06_game_kniga.bsm
NOT_RKA\mirwad07.edm
NOT_RKA\mirwad07_nominal_rezistora.bsm
NOT_RKA\mirwad08.edm
NOT_RKA\mirwad08_silovoy_transf.bsm
NOT_RKA\mirwad09.edm
NOT_RKA\mirwad09_test.bsm
NOT_RKA\mirwad10.edm
NOT_RKA\mirwad101.edm
NOT_RKA\mirwad102.edm
NOT_RKA\mirwad103.edm
NOT_RKA\mirwad104.edm
NOT_RKA\mirwad105.edm
NOT_RKA\mirwad106.edm
NOT_RKA\mirwad107.edm
NOT_RKA\mirwad108.edm
NOT_RKA\mirwad109.edm
NOT_RKA\mirwad10_vobuloskop.bsm
NOT_RKA\mirwad11.edm
NOT_RKA\mirwad110.edm
NOT_RKA\mirwad111.edm
NOT_RKA\mirwad112.edm
NOT_RKA\mirwad113.edm
NOT_RKA\mirwad114.edm
NOT_RKA\mirwad115.edm
NOT_RKA\mirwad116.edm
NOT_RKA\mirwad117.edm
NOT_RKA\mirwad118.edm
NOT_RKA\mirwad119.edm
NOT_RKA\mirwad120.edm
NOT_RKA\mirwad121.edm
NOT_RKA\mirwad122.edm
NOT_RKA\mirwad123.edm
NOT_RKA\mirwad124.edm
NOT_RKA\mirwad125.edm
NOT_RKA\mirwad126.edm
NOT_RKA\mirwad127.edm
NOT_RKA\mirwad128.edm
NOT_RKA\mirwad129.edm
NOT_RKA\mirwad13.edm
NOT_RKA\mirwad130.edm
NOT_RKA\mirwad131.edm
NOT_RKA\mirwad132.edm
NOT_RKA\mirwad133.edm
NOT_RKA\mirwad134.edm
NOT_RKA\mirwad135.edm
NOT_RKA\mirwad136.edm
NOT_RKA\mirwad137.edm
NOT_RKA\mirwad138.edm
NOT_RKA\mirwad140.edm
NOT_RKA\mirwad16.edm
NOT_RKA\mirwad17.edm
NOT_RKA\mirwad18.edm
NOT_RKA\mirwad19.edm


В папке DONT_RUN файлы не запускаются. Явно не запускаемые файлы, типа ПЗУ Спектрума, я удалил. В папке NEW программы при запуске спрашивают NEW? (вроде как редактор) и я так же не понял, как их запускать. В папке NOT_RKA программы на ассемблере или бейсике. Вроде бы идентичные программы, но файлы которых отличаются по размеру или содержанию, я назвал одинаково, добавив постфикс "-2", "-3".

Еще я пропатчил игру VULKAN. Теперь она запускается с адреса загрузки (т.е. нулевого).



org 0h
jp 1001h ; Тут было 20, 7B, 76

org 1001h
ld hl, 0
ld (hl), 20h
inc hl
ld (hl), 7Bh
inc hl
ld (hl), 76h
jp 100h

b2m
29.11.2011, 13:55
В папке DONT_RUN файлы не запускаются.
Решил посмотреть, что это за файлы. На мой взгляд:
22.rka программа SPCHAN$ для Ордос (видимо обмен с дисководом)
24.rka сам Ордос
26.rka видимо тоже от Ордос (коммандер?)
28_debug_mirwad.rka какой-то отладчик (трассировщик)
31.rka и m19.rka две версии одной программы (видимо анализатор магнитофонных записей)
45.rka ещё один отладчик, явно не для Апогея, в начале идёт обмен с портами 00,01,03,08
46_kramis02.rka что-то для Спектрума (есть команда Z80 LDIR, вывод в порт FE)
m01.rka кусок ПЗУ Апогея F700-FFFF, записанный на магнитофон

---------- Post added at 14:55 ---------- Previous post was at 14:35 ----------

Про SPCHAN$ есть информация тут (http://retro.h1.ru/Orion/SpDOS/SpDOS.php). А 46_kramis02.rka это для Профи.

Titus
29.11.2011, 15:14
Последний набор программ для Апогея. Я рассортировал всё, что нашел в этом форуме. Цветных гонок кстати не нашел.
Лежат на каждом углу.

Вроде бы взято с emuverse (не открывается сейчас) из пака gam__3.rka.zip

vinxru
29.11.2011, 15:29
Лежат на каждом углу.

Вроде бы взято с emuverse (не открывается сейчас) из пака gam__3.rka.zip

Это черно-белые лежат.

Titus
29.11.2011, 15:59
Это черно-белые лежат.
Я выложил цветную. А черно-белую даже не видел.

vinxru
29.11.2011, 16:04
Я выложил цветную. А черно-белую даже не видел.

Блин. У меня два файла в папке лежит gonki.emu и gonki.rka. Я не тот открывал. :)

vinxru
05.12.2011, 02:01
Очередная версия прошивки микросхемы 49LF.

Добавил папки, скролл, условную расцветку файлов, индикатор загрузки (в виде точек после имени). Возможно стоит добавить команду "загрузки и выхода в монитор". И еще не придумал куда засунуть наши (c).

Выложил все исходники. Но они не прибраны и не оптимизированы. Только что из под пера.

Прошивка на 512 Кб (49LF040)
http://s017.radikal.ru/i443/1112/3d/55450f649e4e.gif

Прошивка на 256 Кб (49LF020)
http://s008.radikal.ru/i303/1112/56/926115c35308.gif

Схема
http://s49.radikal.ru/i125/1112/23/b5ae2e472bec.png

UPD 5-12-11:
Поправил глюк с пропадающим курсором. И при нажатии на A в верхней строе экрана отображается дата прошивки и авторы.

ROMDISK (C) 4-12-2011 VINXRU, B2M, TITUS, ESL

BYTEMAN
05.12.2011, 02:05
Друзья, вопрос: РК до Апогея расширяется тупо заменой ПЗУ и добавлением цвета?

vinxru
05.12.2011, 02:10
Друзья, вопрос: РК до Апогея расширяется тупо заменой ПЗУ и добавлением цвета?

У РК86 адресное пространство по другому организовано и памяти 16/32 Кб. И еще у Апогея есть ВИ53.

Titus
05.12.2011, 02:13
Очередная версия прошивки микросхемы 49LF.

Добавил папки, скролл, условную расцветку файлов, индикатор загрузки (в виде точек после имени). Возможно стоит добавить команду "загрузки и выхода в монитор". И еще не придумал куда засунуть наши (c).

Выложил все исходники. Но они не прибраны и не оптимизированы. Только что из под пера.
Подумай все же над моим предложением сделать меню в котором в нижней 2/3 экрана отображается фрагмент из игры.

BYTEMAN
05.12.2011, 02:13
У РК86 адресное пространство по другому организовано и памяти 32 Кб. И еще ВИ53.
Ну, у меня в РК, напрмер, установлены РУ5... ВИ53 тоже прикрутим... Но вообще разница там очень сильная? Или путём пары проводком можно привести РК к функционалу Апогея? Просто лежит плата РК (оригинал), собранная, и есть полностью исправный РК. Вот эту плату хотелось бы как-нить замоддить... Или сделать на ней РК-Макси, или привести её к какому-либо навороченному клону... Апогею, или Партнёру...

vinxru
05.12.2011, 02:28
Или путём пары проводком можно привести РК к функционалу Апогея?

Кроме замены ПЗУ надо добавить дешифратор адреса на одной микросхеме. Еще одна любая современная ПЗУ. И все вроде.

На ПЗУ приходит адрес A8-A15, а выходят сигналы выбора (CS) всех микросхем компьютера (ROM, RAM, ВГ75, ВВ55 клавиатуры, ВВ55 внешнего порта, ВТ57, ВИ53).

---------- Post added at 01:28 ---------- Previous post was at 01:23 ----------


Подумай все же над моим предложением сделать меню в котором в нижней 2/3 экрана отображается фрагмент из игры.

Знаешь как лень мне скриншоты снимать? Вот если кто то за меня скриншоты и виде текстовых файлов (или дампов видеопамяти) сделает, то я сразу вставлю их.

Titus
05.12.2011, 02:31
Знаешь как лень мне скриншоты снимать? Вот если кто то за меня скриншоты и виде текстовых файлов (или дампов видеопамяти) сделает, то я сразу вставлю их.
Надо еще учесть, что разрешение в играх бывает разное. В графических режимах межстрочные промежутки убраны, например. Да и размер знакоместа разный. Интересно, нельзя ли в произвольном месте экрана сменить разрешение?

vinxru
05.12.2011, 02:42
Надо еще учесть, что разрешение в играх бывает разное. В графических режимах межстрочные промежутки убраны, например. Да и размер знакоместа разный. Интересно, нельзя ли в произвольном месте экрана сменить разрешение?

Возможно. Но мне не сложно в любом видеорежиме отобразить название игры. Допустим в псевдографическом режиме 192x128, высота символа просто будет не 10 пикселей, а 16 пикселей.

---------- Post added at 01:42 ---------- Previous post was at 01:37 ----------


Цитата:
Сообщение от BYTEMAN Посмотреть сообщение
Или путём пары проводком можно привести РК к функционалу Апогея?
Кроме замены ПЗУ надо добавить дешифратор адреса на одной микросхеме. Еще одна любая современная ПЗУ. И все вроде.

На ПЗУ приходит адрес A8-A15, а выходят сигналы выбора (CS) всех микросхем компьютера (ROM, RAM, ВГ75, ВВ55 клавиатуры, ВВ55 внешнего порта, ВТ57, ВИ53).


А подключив к одному из свободных разрядов ПЗУ дешифратора переключатель, можно будет менять модель компьютера: Апогей / РК86.

13joe
05.12.2011, 08:09
Вот бы еще схемку доработки РК86 до Цветного Апогея !

vinxru
05.12.2011, 10:03
Вот бы еще схемку доработки РК86 до Цветного Апогея !

http://zx.pk.ru/showthread.php?t=6505&page=16

ZEman
05.12.2011, 10:03
Очередная версия прошивки микросхемы 49LF.

Добавил папки, скролл, условную расцветку файлов, индикатор загрузки (в виде точек после имени). Возможно стоит добавить команду "загрузки и выхода в монитор". И еще не придумал куда засунуть наши (c).

Выложил все исходники. Но они не прибраны и не оптимизированы. Только что из под пера.

Прошивка на 512 Кб (49LF040)
http://s017.radikal.ru/i443/1112/3d/55450f649e4e.gif

Прошивка на 256 Кб (49LF020)
http://s008.radikal.ru/i303/1112/56/926115c35308.gif

Схема
http://s49.radikal.ru/i125/1112/23/b5ae2e472bec.png

как запустить этот ромдиск на emu ?
выбираю конфиг Apogee R2, открываю через кнопку с микросхемой файл rom512.rom, набираю R0,100 G1 и всё, ничего не происходит.
где инструкция !?

vinxru
05.12.2011, 10:10
Кроме замены ПЗУ надо добавить дешифратор адреса на одной микросхеме. Еще одна любая современная ПЗУ. И все вроде.

На ПЗУ приходит адрес A8-A15, а выходят сигналы выбора (CS) всех микросхем компьютера (ROM, RAM, ВГ75, ВВ55 клавиатуры, ВВ55 внешнего порта, ВТ57, ВИ53).


И еще ПЗУ знакогенератора более емкую поставить. НА старший разряд знакогенератора надо подать выход INTE процессора.

---------- Post added at 09:10 ---------- Previous post was at 09:06 ----------


как запустить этот ромдиск на emu ?
выбираю конфиг Apogee R2, открываю через кнопку с микросхемой файл rom512.rom, набираю R0,100 G1 и всё, ничего не происходит.
где инструкция !?

Надо сначала написать "R0,100" и нажать Enter. Затем "G1" и нажать Enter.

Только что скачал последнюю версию эмулятора http://bashkiria-2m.narod.ru/files/emu.rar . Запустил его, выбрал Apogey R2, нажал на микросхему, выбрал файл rom512.rom, написал "R0,100", нажал Enter, написал "G1", нажал Enter и всё запустилось.

ZEman
05.12.2011, 10:13
спасибо за подсказку :)

vinxru
05.12.2011, 10:44
Поправил глюк с пропадающим курсором. И при нажатии на A в верхней строке экрана отображается дата прошивки и авторы.

ROMDISK (C) 4-12-2011 VINXRU, B2M, TITUS, ESL

(Заменил файлы во вложении в прошлом сообщении http://zx.pk.ru/showpost.php?p=442856&postcount=174)

---------- Post added at 09:44 ---------- Previous post was at 09:40 ----------

Как убрать курсор с экрана?

b2m
05.12.2011, 11:44
Как убрать курсор с экрана?
Задать координаты ниже самой нижней строки.

13joe
05.12.2011, 19:11
Цитата: Сообщение от 13joe
Вот бы еще схемку доработки РК86 до Цветного Апогея !

http://zx.pk.ru/showthread.php?t=6505&page=16

Я имел в виду не только цвет, но и графический режим 192х128.

vinxru
05.12.2011, 19:41
Я имел в виду не только цвет, но и графический режим 192х128.

Для этого режима нужно только знакогенератор от Апогея прошить. У Апогея два знакогенератора, то есть ПЗУ в два раза большего размера. Знакогенераторы переключаются выводом процессора INTE.

vinxru
06.12.2011, 02:53
Прошивки для стандартных ПЗУ (например 27С или 49F) на 256 Кб и 512 Кб. А так же все исходники с помощью которых можно собрать прошивки содержащие любые файлы для ПЗУ любого размера.

http://s008.radikal.ru/i306/1112/d5/399e4af862bc.jpg

Всё, теперь можно платку протравить для 49LF040 и успокоиться.

BYTEMAN
06.12.2011, 15:29
Для этого режима нужно только знакогенератор от Апогея прошить. У Апогея два знакогенератора, то есть ПЗУ в два раза большего размера. Знакогенераторы переключаются выводом процессора INTE.
У меня в РК как раз РФ5 уже стоит... Отлично :)

vinxru
10.12.2011, 17:43
Печатные платы для ROM-диска на одной микросхеме 49LF004.
ЛУТ и бумага Lomand 140 г/м2 глянцевая для струйников.

http://s017.radikal.ru/i412/1112/44/764c8b19dfbe.jpg

http://s017.radikal.ru/i444/1112/52/49baac04d246.jpg

Шаг 2

http://i031.radikal.ru/1112/ae/4f3a6861f7a0.jpg http://s017.radikal.ru/i417/1112/b8/3071424b51c4.jpg

После 2-х часов пайки и 10 попыток, панельку припаять не удалось. Отвалились дорожки.

Увеличил ширину контактных площадок. На них налипло больше припоя, и панелька припаялась на раз.

http://s014.radikal.ru/i329/1112/76/9d3a090797d0.jpg

После обжарки, плата принимает свой естественный цвет и аромат. :)

vinxru
11.12.2011, 17:57
С запаянным разъемом.
http://s40.radikal.ru/i089/1112/5f/7f9539c5e0d6.jpg

Обнаружилось, что без конденсатора на входе R/C картридж работает нестабильно. Не увидительно. Я не поставил конденсатор, так как микросхема подпаянная проводами работала стабильно.

Добавлю на печатную плату этот конденсатор и проект можно считать закрытым.

Кстати, микросхему можно подпаять проводами к разъему компьютера и разместить внутри компьютера.

Mick
11.12.2011, 21:33
Кстати, микросхему можно подпаять проводами к разъему компьютера и разместить внутри компьютера.

А можно оставить внешней и будет как сменный картридж.

HardWareMan
12.12.2011, 15:37
Есть вопрос:
1. Апогей умеет работать с FWH в параллельном режиме (мультиплексированные адреса)?
2. Данный чип 49LF004 является LTTL 3.3V, как согласовывали? Или у Апогея все на 3.3В?

b2m
12.12.2011, 16:05
1. Апогей умеет работать с FWH в параллельном режиме (мультиплексированные адреса)?
Нет. Именно поэтому младший бит адреса A0 выбран в качестве селектора row/col. При этом стандартный загрузчик загружает байты, считанные по адресу с одинаковыми row и col. Кроме того, каждый второй байт повторяется. Как сделать работающую программу, в которой байты повторяются, мы обсуждали в этой теме, начиная с 10-той страницы.

vinxru
12.12.2011, 16:28
1. Апогей умеет работать с FWH в параллельном режиме (мультиплексированные адреса)?

Очень криво, но умеет. Используется только параллельный режим (29 ножка на питание), поэтому должны без проблем работать как FWH, так и LPC. То есть 49LF004 и 49LF040.


2. Данный чип 49LF004 является LTTL 3.3V, как согласовывали? Или у Апогея все на 3.3В?

Никак не согласовывал. Все чипы, которые у меня были, отлично работают на 5 Вольт. Потребляют меньше 10 мА и не греются вообще.

---------- Post added at 15:28 ---------- Previous post was at 15:05 ----------

Разводы на плате из за паленого этилового спирта (C2H5OH). Я обычно отмываю платы в ацетоне, хоть некоторые надписи с элементов смываются, это меня не сильно беспокоит. А вот этот прозрачный разъем растворяется в ацетоном на раз.

HardWareMan
12.12.2011, 17:53
Понятно. Почитал ветку, есть некоторые вопросы и думки, но мой интерес здесь не связан с Апогеем, так что они останутся со мной.

GrifonLeo
13.12.2011, 04:24
Печатные платы для ROM-диска на одной микросхеме 49LF004.


А можешь развести плату под обыкновенный DIP корпус
Чтобы можно было что-то вроде AT49F002NT поставить
Ее и зашить проще
Пожалуйста если не трудно

vinxru
13.12.2011, 16:19
А можешь развести плату под обыкновенный DIP корпус
Чтобы можно было что-то вроде AT49F002NT поставить
Ее и зашить проще
Пожалуйста если не трудно

Сделаю. Но паять не буду, поэтому это будет не проверенная схема.

---------- Post added at 15:19 ---------- Previous post was at 15:18 ----------


Понятно. Почитал ветку, есть некоторые вопросы и думки, но мой интерес здесь не связан с Апогеем, так что они останутся со мной.

Заинтриговал и убежал.

dk_spb
13.12.2011, 17:01
vinxru, А как пару платок приобрести?
Я уже и ПЗУшки приготовил..... ;-)

vinxru
15.12.2011, 20:59
http://s017.radikal.ru/i420/1112/89/b604f5d3cf65.jpg

P.S. Средняя плата с трудноисправимым дефектом.

dk_spb
15.12.2011, 21:09
vinxru, Может 10-ток промышленно заказать?
В чем файлик нарисован?

vinxru
15.12.2011, 21:15
vinxru, Может 10-ток промышленно заказать?
В чем файлик нарисован?

Proteus

dk_spb
17.12.2011, 23:37
vinxru, А он выход в гербер умеет?

Vladimir_S
18.12.2011, 00:33
А почему только на чтение? Есть такие Далласовские озушки с встроенной батарейкой
у которой записанная информация без подключения питания хранится не менее 10 лет
(фирма гарантирует).
Например DS1270 - 2 мегабайта с прямой выборкой по адресам, а это для рк подобных
целый винчестер!
Никто не пробовал?

dk_spb
18.12.2011, 00:40
Vladimir_S, Это не модно ;-)
FerroRAM лучше - батарейки не надо.
Я пробовал - прикольно.

Vladimir_S
18.12.2011, 00:43
Так батарейка внутри чипа.

dk_spb
18.12.2011, 00:49
Vladimir_S, Без батарейки-то всё-равно лучше. Хотя бы размерами

Vladimir_S
18.12.2011, 01:18
Вот какраз размер для 2 мб невелик, а батарея встроена в корпус микросхемы и ее оттуда никак не вытащишь.

---------- Post added at 00:18 ---------- Previous post was at 00:10 ----------

Да забыл сказать, количество циклов запись-чтение неограничено!

vinxru
18.12.2011, 01:32
Тогда проще ATMega + SDCard. Но кто будет в наше время что то сохранять с Апогея?

dk_spb
18.12.2011, 01:41
Вот какраз размер для 2 мб невелик, а батарея встроена в корпус микросхемы и ее оттуда никак не вытащишь.
Микросхема с батареей толще чем без.

Vladimir_S
18.12.2011, 03:03
Ага и тяжелее.

Лапоть
18.12.2011, 07:40
А почему только на чтение? Есть такие Далласовские озушки с встроенной батарейкой
у которой записанная информация без подключения питания хранится не менее 10 лет.
Классная мысль - уже не ROM-диск, а Ram-диск.
Кстати, подобные микросхемы есть и в Soic`е . Не такие уж и большие размеры, вместятся все даже в кожух разъема.
http://zx.pk.ru/attachment.php?attachmentid=31646&stc=1&d=1324179515

Лапоть
18.12.2011, 09:13
Вот как раз размер для 2 мб невелик, а батарея встроена в корпус микросхемы и ее оттуда никак не вытащишь.
У меня весь архив, что когда либо выходило, не больше 1 мега.
У некоторых микрух батарея меняется.
http://zx.pk.ru/attachment.php?attachmentid=31647&stc=1&d=1324185136

Vladimir_S
18.12.2011, 09:17
У некоторых микрух батарея меняется.
Да это не важно. Я ведь не рекомендации даю. А так...направление.

dk_spb
18.12.2011, 15:44
http://ramtron.com/products/nonvolatile-memory/
И не надо никаких батареек
http://ramtron.com/files/tech_papers/Ferro_Tech_Brief.pdf
Принцип тот же - втыкается вместо обычной ОЗУшки, но не стирается при выключении питания. И батарейки не надо.

Vladimir_S
18.12.2011, 23:30
Принцип тот же - втыкается вместо обычной ОЗУшки, но не стирается при выключении питания. И батарейки не надо.
Обрати внимание на питание.

dk_spb
19.12.2011, 00:16
Vladimir_S, И что там с питанием не так?

Vladimir_S
19.12.2011, 00:41
У микрух с большой емкостью питание 3.3В.

dk_spb
19.12.2011, 06:16
Vladimir_S, Угу, а у пятивольтовых с батарейкой с доступностью швах....
Да и цена....

Vladimir_S
19.12.2011, 06:24
Да и цена....
Уж это да.

HardWareMan
19.12.2011, 11:08
Ферромагнитные используют тоггл CS как префетч. Так что многие обычные для ОЗУ режимы (например, CS=0, а OE/WR делаем строб) на них не работают. Учтите это в своих поделках. ;)

dk_spb
19.12.2011, 11:32
Q: Does /CE need to toggle for every access?
A: No, the new FM28V100 and FM28V020 devices as well as the FM21L16, FM22L16/22LD16, and FM23MLD16 have on-chip ATD circuits which allow the memory to access any location by simply changing the address. This feature is called Address Transition Detection and allows /CE to remain low. It is true that the FM1608 and FM1808 devices require /CE to toggle.
А в старых - да, нужно CE дергать

Vladimir_S
19.12.2011, 17:45
В ChipDipе есть ds1245.

Vladimir_S
20.12.2011, 02:30
Кстати подскажите пожалуйста, если кто знает. Есть такая хрень у NVSram, при включении у них иногда происхдит несанкционированная запись в ячейку по выставленному (при включении тоже случайному) адресу.
Я у себя подтянул ноги WR и CS, а включаю на них питание(через твердотельную релюшку) предварительно выставив на ША 1FFFF только при входе в DOS, при
выходе отключаю. Последняя ячейка(1FFFF) как правило всегда оказывается испорченой. А как с этим справляются теже супостаты и вообще может есть какой алгоритм безопасного включения?

vinxru
26.12.2011, 02:02
У меня очередной раз отвалились дорожки при попытке припаять панельку PLCC32. Плату приходится нагревать с другой стороны, что бы не расплавить панельку. И обязательно одна из ножек не припаяется. И приходится перепаивать.

Поэтому я упростил задачу. Я выгнул ножки панельки наружу. Теперь панелька припаивается обычным паяльником за 10 секунд.

Это картридж для 49LF. Во вложении печатная плата. Прошивка для 49LF где то выше по форуму.

http://i057.radikal.ru/1112/bf/d111c130e224.jpg

P.S. Эта плата в трех экземплярах ушла к dkspb в Питер.

Titus
26.12.2011, 02:22
А когда будет конструктор для самостоятельной сборки?
Желательно под дип корпус? Чтобы плата и прошитая микруха.

vinxru
26.12.2011, 02:34
А когда будет конструктор для самостоятельной сборки?
Желательно под дип корпус? Чтобы плата и прошитая микруха.

Печатную плату для DIP-а сделаю в ближайшее время. У меня просто DIP микросхем нет пока, а не проверяя сделанное делать не интересно.

А что из себя будет представлять конструктор для самостоятельной сборки? Комплект из платы, разъема и панельки?

Уже сейчас можно делать вручную. Рисунок печатаной платы есть. Надо найти разъем для Апогея, флешку с панелькой (или без) и два конденсатора. Потом надо прошить флешку. Потом надо протравить плату и впаять эти 4 детали туда. Всё.

Titus
26.12.2011, 02:49
А что из себя будет представлять конструктор для самостоятельной сборки? Комплект из платы, разъема и панельки?

Уже сейчас можно делать вручную. Рисунок печатаной платы есть. Надо найти разъем для апогея, флешку с панелькой (или без) и два конденсатора. Потом надо прошить флешку. Потом надо протравить плату и впаять эти 4 детали туда. Всё.
Готовая плата, прошитая дипка, и два кондера. А разьем у всех, кто купил Апогей, обычно в комплекте есть.

Вручную можно, если ты каждый день травишь платы. Вот я не травлю. Хотя, неплохо бы научиться.

vinxru
26.12.2011, 02:56
Флешки прощи из старых мамок выдирать, чем новые покупать. Научиться запаивать PLCC микросхемы с помощью фена - это один раз попробовать. Залудил плату и микросхему, положил микросхему на плату, нагрел феном, подождал пока остынет. Панельки оказывается еще проще запаивать, не сложнее, чем DIP.

А платок можно заказать десяток на заводе.

---

Вот нашел, где можно достать микросхемы:

AM29F040B-90PF DIP32 130 руб
(Нужно еще К555ТМ9)
http://www.chipdip.ru/product/am29f040b-90pf.aspx

29F040B-90JD PLCC32 73 руб.
(Нужно еще К555ТМ9)
http://platan.ru/cgi-bin/qwery_i.pl?code=29F040

49LF040 PLCC32 363.00руб
(Работает в одиночку)
http://www.micro-chip.ru/catalog/index.php?cPath=1_2&products_id=9246&page=1&sort=3a&osCsid=ebde0c4c74d437721d4b9ff24dd04f3d


Еще панельки PLCC32 и разъемы для Апогея найти

Titus
26.12.2011, 04:02
Проще их из старых мамок выдирать. Научиться запаивать PLCC микросхемы с помощью фена - это один раз попробовать. Залудил, положил микросхему, нагрел феном, подождал пока остынет. Панельки оказывается еще проще запаивать, не сложнее, чем DIP.

А платок можно заказать десяток на заводе.

Я сейчас не говорю о радиолюбителях, а о простых пользователях компьютера Апогей. Если кто-нить сделает конструктор для сборки, я думаю, многие будут рады, и с удовольствием себе прикупят.

HardWareMan
26.12.2011, 07:11
У меня очередной раз отвалились дорожки при попытке припаять панельку PLCC32. Плату приходится нагревать с другой стороны, что бы не расплавить панельку. И обязательно одна из ножек не припаяется. И приходится перепаивать.
А что за фен пользуете? Нужен нормальный фен с регулировкой температуры. Выставляем 200-250 градусов и спокойно и терпеливо прогреваем на малом потоке. Температура плавления пластика выше.

Я когда расчленял мамки то постоянно плавил всю пластмассу. Потому что выставлял 300-400 градусов, думал будет быстрее. А теперь понял - не надо торопиться. Выставляешь 250 и нормально прогреваешь (плату лучше держать сверху, феном греть снизу - физика, знаете ли). А потом просто вытаскиваешь пинцетом, будь то PLCC сокет или IDE разъем. ;) Так что советую один раз приобрести нормальный инструмент и научиться его пользовать - себе выгоднее будет. А сам я мечтаю уже об ИК паялке, трафаретах для BGA и пасты для шариков. Нагреватель уже есть, осталось замутить штатив, подогрев столика и... Эээх...

Titus
26.12.2011, 07:35
Так что советую один раз приобрести нормальный инструмент и научиться его пользовать - себе выгоднее будет.
Приемлимую модель фена, плиз.

vinxru
26.12.2011, 09:38
Так что советую один раз приобрести нормальный инструмент и научиться его пользовать - себе выгоднее будет.

Стоит оно дорого, денег жалко.


Приемлимую модель фена, плиз.

800 рублей.
http://zx.pk.ru/showpost.php?p=441125&postcount=85

За такие деньги, нормально :)

HardWareMan
26.12.2011, 10:39
800 рублей.
http://zx.pk.ru/showpost.php?p=441125&postcount=85

За такие деньги, нормально :)
О, да. Лет 7 назад нечто подобным мы "разбирали" платки с SMD компонентами. Подставляешь мелкую сетку-ловушку и пару раз проходишься феном по платке. За 40 секунд "разбирается" плата 20смх30см. :3 Правда, возможны потери особо мелких деталей, но это все зависит от конструкции ловушки. :v2_rolley

Titus
26.12.2011, 13:29
800 рублей.
http://zx.pk.ru/showpost.php?p=441125&postcount=85

За такие деньги, нормально :)
То, что на картинках, я приемлимым не считаю) Китайская паяльная станция с феном в комплекте, или строительмый мегафен - это не из разряда точных приборов)

vinxru
26.12.2011, 16:56
То, что на картинках, я приемлимым не считаю) Китайская паяльная станция с феном в комплекте, или строительмый мегафен - это не из разряда точных приборов)

Я понимаю ваше желание, хороший инструмент вместо китайской подделки - это всегда приятно.

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

Mifody
26.01.2012, 23:29
скажите, 49lf002 и 49lf020 (49lf004 и 49lf040) это одно и то же? И чем конкретно отличаются прошивки для 020 и 040? Просто по папкам не разложено или не все программы влезли?

Mifody
06.03.2012, 00:25
Скажите пожалуйста, микросхема Pm49FL002T-33JC подойдёт? А то я собрал девайс, запрограммил эту микруху, включил-не работает. Монтаж проверял, всё верно. Вот даже не знаю, может микруха не подходит.. Хотя по даташиту должна подходить.. Что скажут гуру? Программил прошивой из папки lf/flash256/rom256.rom

vinxru
06.03.2012, 15:18
Не было доступа к сайту.

1) Конденсатор поставил на A0?
2) Что напишет компьютер, если ввести команды

R0,100
D0,100

Rokl
06.03.2012, 18:30
Скажите пожалуйста, микросхема Pm49FL002T-33JC подойдёт? А то я собрал девайс, запрограммил эту микруху, включил-не работает...
А это не Low Power? Вроде она на 3,3в питания. У вас именно такое питание ROM диска?

Mifody
06.03.2012, 21:48
А это не Low Power?
Ну да. 3.3В. Но у vinxru SST49LF002A по даташиту тоже 3,3В. И работает. Кондёр ставил на 100пф. Я печатку делал по вашему проекту.
Если ввести
R0,100
D0,100

Mifody
06.03.2012, 22:09
Ещё сейчас только заметил, что каждый раз при вводе
R0,100
D0,100
считываемые значения немного разные. Особенно вначале.

vinxru
06.03.2012, 22:16
Отлично, данные из флешки прочитались в память. Только вот не те. Я попробовал поискать в файле эти значения и не нашел... Вы точно прошили микросхему? нужным файлом?

Прочитаться должно было

000: ?? ?? ?? 11 11 00 00 62 │ 62 6A 6A 01 01 AE AE C3
010: C3 00 00 01 01 FF FF 00 │ 00 21 21 03 03 EE EE 36
020: 36 90 90 2B 2B 2B 2B 36 │ 36 01 01 11 11 00 00 F0
030: F0 3E 3E 00 00 BB BB CA │ CA 46 46 00 00 23 23 72
040: 72 2B 2B 73 73 23 23 36 │ 36 00 00 2B 2B 36 36 01
050: 01 3A 3A 00 00 EE EE 02 │ 02 03 03 13 13 13 13 7A
060: 7A B3 B3 C2 C2 0F 0F 00 │ 00 C5 C5 3A 3A FF FF 00
070: 00 47 47 3A 3A 1E 1E 00 │ 00 B8 B8 CA CA 00 00 01
080: 01 C1 C1 3A 3A 1E 1E 00 │ 00 3C 3C 32 32 10 10 00
090: 00 3C 3C 32 32 1E 1E 00 │ 00 C3 C3 0C 0C 00 00 3E
0A0: 3E F0 F0 BA BA CA CA 24 │ 24 00 00 C3 C3 15 15 00
0B0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0C0: 00 2B 2B 13 13 1A 1A 77 │ 77 23 23 05 05 C2 C2 00
0D0: 00 11 11 C3 C3 00 00

А прошивка начинается с

000: 00 03 AF 32 37 03 32 3A │ 03 0E 1F CD 09 F8 21 19
010: 03 01 00 00 CD 0D 03 2A │ 38 03 7E 32 69 02 32 33
020: 02 23 7E 32 D0 01 32 DB │ 01 32 ED 01 32 41 01 3A

---------- Post added at 21:16 ---------- Previous post was at 21:13 ----------



Ещё сейчас только заметил, что каждый раз при вводе
R0,100
D0,100
считываемые значения немного разные. Особенно вначале.

Первые три байта могут быть разными. А остальные должны быть стабильны! Стабильность подбирается подстановкой конденсатора между R/C и землей.

Запускается картридж командой G3

(Сигнал R/C должен приходить чуть позже, чем сигналы на шину адреса.)

Mifody
06.03.2012, 22:20
Ну да, точно прошил.. Файлом rom256.rom. Похоже мусор какой то читается. Так как каждый раз разные значения читаются. Особенно вначале..((( Может быть такое, что микруха не подходит? Хотя по даташиту она поддерживает A-A/MUX. А другой как назло нету проверить..(((

vinxru
06.03.2012, 22:44
Прошивка у вас правильная!

Считанные данные соответствуют адресам
0 800 1000 1802 2000 2804 3005 3806 4000

А должно быть
0 801 1002 1803 2004 2805 3006 3807 4008

Подбирайте конденсатор, проблема в нём. Номинал конденсатора зависит от монтажа и в моем случае работоспособный диапазон был 100+-30 пф. Так что тут нужна точность.

А в навесном монтаже все работало без конденсатора.

P.S. Конденсатор требует только загрузчик монитора (директива R). Программа зашитая на флешке по человечески (с задержками) работает с ПЗУ.

---------- Post added at 21:29 ---------- Previous post was at 21:21 ----------

Всмысле подбирать надо с шагом в 10 пф.

---------- Post added at 21:44 ---------- Previous post was at 21:29 ----------

Опаньки, в файле Plata2.rar была принципиальная схема от другого картриджа (с микросхемой ТМ9). Печатная плата была правильной. Я заменил схему на правильную:

http://s42.radikal.ru/i096/1203/32/a53ae989d464.png

Вам надо подбирать С2

Mifody
07.03.2012, 18:16
Подкинул ещё 120пФ и всё заработало!
Спасибо за разработанное устройство! Пользоваться одно удовольствие!
Не могли бы вы выложить проект proteus с платой на 2 микрухи. А то есть 29F040. Надо будет её использовать, так как 49LF040 нету..(((

---------- Post added at 18:16 ---------- Previous post was at 18:15 ----------


Запускается картридж командой G3
А у меня и просто по G запускается.. Или это нормально?

vinxru
07.03.2012, 19:52
Это нормально. Но не всегда работает.

---------- Post added at 18:52 ---------- Previous post was at 18:12 ----------


Не могли бы вы выложить проект proteus с платой на 2 микрухи. А то есть 29F040. Надо будет её использовать, так как 49LF040 нету..(((


Потерялся файл со схемой и печатной платой. Сейчас заново нарисую. И заодно для DIP версии.