Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ZX Spectrum: аппаратная реализация на восьми микросхемах (http://zx-pk.ru/showthread.php?t=13747)

Lisitsin 15th May 2011 13:24

Elite доходит до этого места и больше не реагирует на клавиатуру. Zexall запускаю.

Higgins 15th May 2011 13:35

Quote:

Originally Posted by Lisitsin (Post 385085)
Elite доходит до этого места и больше не реагирует на клавиатуру.

1) Разряды 7, 6 и 5 портов клавиатуры (те, что не соответствуют никаким клавишам) у вас возвращаются взведенными или сброшенными?

2) Все ли инструкции ввода поддержаны? IN A, (n), IN r, (C)/IN (C) -- все они должны уметь опрашивать клавиатуру.

Lisitsin 15th May 2011 14:15

Quote:

Originally Posted by Higgins (Post 385090)
1) Разряды 7, 6 и 5 портов клавиатуры (те, что не соответствуют никаким клавишам) у вас возвращаются взведенными или сброшенными?

2) Все ли инструкции ввода поддержаны? IN A, (n), IN r, (C)/IN (C) -- все они должны уметь опрашивать клавиатуру.

Разряды 7 и 5 взведены постоянно, а шестой соответствует сигналу магнитофона, но за полярность я не отвечаю. Так что может читаться и как ноль. Я в него копирую старший разряд десятиразрядного аналого - цифрового преобразователя микропроцессора, который подключен к шестому порту. Так что если сигнал на этой ноге ниже 2,5 В - там ноль, в противном случае единица.

Все команды IN опрашивают клавиатуру в том случае, если младший разряд адреса порта равен нулю. Иначе возвращается #FF.

Black_Cat 15th May 2011 14:22

Quote:

Originally Posted by Lisitsin (Post 385112)
Разряды 7 и 5 взведены постоянно

а должен быть D5 в нуле. Кроме того D6 на ZX48 и ZX128 (не +2, +3) - это функция того, что записано в порт бордюра #FE. На ZX48 начиная с Issue3, если в D4=1 #FE, то из D6 читается единица всегда, вместо сигнала магнитофона. На этом построена защита некоторых программ, которые вешаются, если не так.

Lisitsin 15th May 2011 14:27

Quote:

Originally Posted by БК-0010 (Post 385119)
Кроме того D6 на ZX48 и ZX128 (не +2, +3) - это функция того, что записано в порт бордюра #FE.

А что именно за функция? Какой-то разряд цвета бордюра? А что тогда отведено магнитофону, если шестой разряд отражает состояние бордюра?

Black_Cat 15th May 2011 14:40

Quote:

Originally Posted by Lisitsin (Post 385112)
Так что если сигнал на этой ноге ниже 2,5 В - там ноль, в противном случае единица.

не так, для TTL логики единица - это от 2V и выше, а 0 - от 0,8V и ниже.

---------- Post added at 13:29 ---------- Previous post was at 13:28 ----------

Quote:

Originally Posted by Lisitsin (Post 385120)
А что именно за функция? Какой-то разряд цвета бордюра?

я ж написал:

Quote:

Originally Posted by БК-0010 (Post 385119)
если записано в D4=1 #FE, то из D6 читается единица всегда, вместо сигнала магнитофона. На этом построена защита некоторых программ, которые вешаются, если не так.



---------- Post added at 13:40 ---------- Previous post was at 13:29 ----------

Кроме того, D3 #FE управляет чувствительностью читалки магнитофона:
D3=0 - низкая чувствительность
D3=1 - высокая чувствительность
Кроме того оба эти разряда образуют нелинейный 2х битный ЦАП, и сигнал на спикере насамделе имеет 3 уровня амплитуды, но цена разряда D3 очень маленькая, поэтому это на слух без нелинейного усилителя не различить. Но на отечественных клонах это уже более заметно, а в Фениксе цена разряда D3=0,5 D4. Советую сделать так же если есть возможность. На совместимости это не скажется.
Кроме того, если есть возможность - желательно вывести эти разряды на отдельные ноги, как в большинстве рассыпушных отечественных клонов, чтоб можно было получать биперное стерео.

Lisitsin 15th May 2011 14:45

Quote:

Originally Posted by БК-0010 (Post 385121)
не так, для TTL логики единица - это от 2V и выше, а 0 - от 0,8V и ниже.[COLOR="Silver"]

Спасибо за консультацию !

Про ТТЛ я пока ещё не забыл. Просто у меня сделано так:
На ножке микросхемы, которая отведена магнитофону, у меня пол питания (2,5 В). К этой ножке подводится через разделителбную ёмкость сигнал магнитофона (уровень линейного выхода). внутри AVR к этому выводу подключен 10-разрядный АЦП таким образом, что 5 В соответствует цифра 1023. Таким образом, копируя старший разряд АЦП в шестой разряд порта, я получаю ноль для низкого уровня сигнала магнитофона (отрицательная полуволна), а единицу для высокого (положительная полуволна).

Higgins 15th May 2011 14:51

Quote:

Originally Posted by Lisitsin (Post 385112)
Разряды 7 и 5 взведены постоянно, а шестой соответствует сигналу магнитофона, но за полярность я не отвечаю. Так что может читаться и как ноль. Я в него копирую старший разряд десятиразрядного аналого - цифрового преобразователя микропроцессора, который подключен к шестому порту. Так что если сигнал на этой ноге ниже 2,5 В - там ноль, в противном случае единица.

Все команды IN опрашивают клавиатуру в том случае, если младший разряд адреса порта равен нулю. Иначе возвращается #FF.

Пусть будет так.

Еще вопрос: случаи, когда сразу несколько разрядов в старшей половине адреса клавиатурного порта сброшены обрабатываются правильно?

Black_Cat 15th May 2011 14:53

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

Lisitsin 15th May 2011 15:05

Quote:

Originally Posted by Higgins (Post 385132)
Еще вопрос: случаи, когда сразу несколько разрядов в старшей половине адреса клавиатурного порта сброшены обрабатываются правильно?

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


All times are GMT +4. The time now is 16:58.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.