
Сообщение от
barsik
Т.о Z80 служит лишь для формирования инкрементируемого адреса, т.е заменяет собой группу счётчиков.
И благодаря этому у zx80/81 открываются такие возможности
как аппаратный скролл, произвольная смена разрешения экрана, смена расположения видео памяти, смена частоты кадров
спек тихо покуривает в сторонке...
...конечно же их никто толком не использовал...

Сообщение от
barsik
Кто-нибудь может это объяснить, почему мигает ZX80? И вообще, хоть кто-нибудь знает точный принцип его работы и может его изложить? Там что, визуализация без прерываний?
Ну он мигает тк програмисты не умели кодить "мультиколоры"
И тк под это нужно больше памяти
прерывание есть
оно вырабатывается когда 6 бит регистра R сбрасываеться в 0
так можно хоть криво но мерять интервалы времени(тк R инкрементится на каждой команде по разному)
у zx81 есть свои дополнительные строчные прерывания (щас я уже не могу написать тк не помню как точно работают)
как строиться изображение (могут быть не точности тк давно этим не занимался)
в отрисовке изображения активно участвуют реги IR процессора
R - как счетчик количества столбцов
I - служит для указания старшего байта адреса от куда будет читаться изображение шрифтов
(я не уверен можно ли просто так поставить свой обработчик прерываний и сделать im2)
изображение строиться так
out FFh IN FEh- выключает вывод на экран, тушаться строчные синхроимпульсы
это как бы начало кадрового синхроимпульса
так же при in FEh сбрасывается в 0 и перестает инкрементиться(вроде) LINECNTR
подождали нужное время(читаем ГОСТ)))) или исполнили свой код
делаем in FEh OUT FFh - кидаем все что угодно туда
у нас снова фигачат строчники (конец кадрового синхроимпульса(не уверен они начинают идти именно с этого момента или они как шли так и их фаза и не сбивалась и сними нужно синхронизироваться))
при этом сбрасывается LINECNTR в 0
(регистр LINECNTR инкриментится каждую строку независимо от нас(по моему) зациклено от 0 до 7)
(как ни странно кадровые и строчные синхроимпульсы в видео сигнале
это отсутствие какого либо сигнала(просто 0)
ПЗУ-ные процедуры работы с графикой как раз тупо ждут
и проц тупо висит на halt-е большую часть времени...)
опять ждем нужное время/или исполняем свой код
до начала самого экрана
а далее
берем наш произвольный адрес, где у нас будет видео память (в диапазоне 0000h-7FFFh)
устанавливаем бит 15 (1*** **** **** ****)
и делаем туда jp/call итд
все что по 8000h-FFFFh это зеркало адресов 0000h-7FFFh(не уверен зеркалится ли ПЗУ)
но есть одно но
все команды у которых 6 бит *1** ****
подменяются nop-ом!!!!
строка видео памяти выглядит обычно так
00,00,00,...(произвольное число данных у которых бит 6 = 1)...00,00,00,halt - служит для синхронизации строк (хотя думаю можно и без него)
с таким же успехом во время отрисовки можно выполнять все те команды у которых бит 6 = 0
только я уже не уверен что будет на экране (по идеи/возможно ничего)
все что подменилось nop-ом попадает на экран
байт данных видео памяти выглядит так
7 бит - инверсирование шрифта
6 бит - должно быть 1
5-0 бит - номер символа
то есть zx80 может иметь только 64 символа + 64 их инверсированных варианта (если не менять набор посреди кадра)
адрес по которому находиться нужное изображение шрифта из ПЗУ (только из пзу(озу не подключена к этому без доработок!!!!!))
находиться так
(содержимое регистра I*100h)+(номер символа (0...63)*8)+(LINECNTR)
напомню что регистр LINECNTR инкриментится каждую строку (0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1...)
(по моему нельзя никак прочитать его значение)
чтобы выводить простой текст нужно jp-ать на одну строку по 8 раз подряд
если мы хотим hires а не простой текстовый режим
то мы меняем I на тот адрес пзу где у нас больше всего подходящих комбинаций битов
и каждую строку сбрасываем LINECNTR
(по моему при помощи in FEh OUT FFh это делают)
и jp-аем теперь каждую строку на свою строку видео памяти
можно hires и без сброса LINECNTR
но тогда будет много головной боли тк у каждой строки выйдет свой набор комбинаций битов для каждого байта видео памяти
будут траблы с отрисовкой спрайтов при их попиксельном перемещение по оси Y
с таким же успехом zx80 позволяет отображать один и тот же участок видео памяти несколько раз подряд)))
и менять количество пикселей в строке каждую строку))))
звук/вывод на магнитофон на zx80 делаеться щелканием out FFh in FEh
по этому иметь и звук и изображение одновременно как бы сложновато (но думаю вполне возможно(я знаю что говорю(но экран возможно будет волночками и не очень стабильный)))
только не говорите мне что у zx80/81 нету звука...
чтение с клавиатуры/магнитофона
так же через FEh
на чтение
бит 7 - матафонный вход
бит 6 - частота кадров 0 - 60Hz 1 - 50Hz (нужно чтоб определить в каком мы регионе и подстроить свою программу под нужную частоту)
бит 5 - не используется
бит 4-0 состояние клавиатуры (0 - клавиша нажата)
Код:
бит 0 бит 1 бит 2 бит 3 бит 4
FEFEh SHIFT Z X C V
FDFEh A S D F G
FBFEh Q W E R T
F7FEh 1 2 3 4 5
EFFEh 0 9 8 7 6
DFFEh P O I U Y
BFFEh ENTER L K J H
7FFEh SPACE . M N B
можно читать клавиатуру как через in r,(c) так и через ld a,xx in a,($fe)
и явно это нужно делать не вовремя отрисовки экрана...
тк чтение из FEh сбрасывает LINECNTR
- - - Добавлено - - -
ах да времянки
207 тактов в строке из них последние 15 тактов горизонтальный синхроимпульс
то есть теоретическое максимальное возможное разрешение экрана по горизонтали 384 пикселя
(но будет ли ловить его телик?)
сколько строк во фрейме уже решать программисту
(и тут нужно учитывать тот факт что то что работает на одном телевизоре не работает на другом)
частота проца наверное ~3250000
рекомендуемые времянки кадра мне попадались такие
для 50Гц
6 строк кадровый синхроимпульс
56 строк бордюр
192 строки экран
56 строк бордюр
для 60Гц
6 строк кадровый синхроимпульс
32 строки бордюр
192 строки экран
32 строки бордюр
правильное строение строки не подскажу(с какой стороны сколько бордюра)
используем метод научного тыка
- - - Добавлено - - -

Сообщение от
weiv
Меня сам факт удивляет - компы ему неинтересны, но он ими занимался, и небезуспешно.
в фильме https://ru.wikipedia.org/wiki/Micro_Men
он такой
"почему же компьютеры такие дорогие? о_О
они не должны столько стоить" как то так
хотя может благодаря его дешевому хламу
другим зажравшимся производителям пришлось скидывать цены на свою продукцию
- - - Добавлено - - -
Здаеться мне что нужно вынести этот кусок в "zx80 программирование"
- - - Добавлено - - -
добавил все что еще нужно знать при кодинге