PDA

Просмотр полной версии : Программирование модуля МЦПГ для Партнёр 01.01



Kakos_nonos
17.01.2015, 22:02
Заинтерисовался этим модулем, который добавляет к Партнёру большие графические возможности. К сожалению, информации по нему в интернете очень мало, однако его поддерживает эмулятор b2m.
Использую существующую информацию и эмуляцию, стал методом тыка изучать как что работает. В итоге вышло вот что.

Партнёр 01.01 это клон Радио 86рк, с некоторыми доработками. Одна из самых главных - маппирование памяти. При записи байта в определённый адрес меняются адреса устройств и блоков памяти.
Для использования модуля нам нужна 8-ая или 9-ая карта памяти, в ней есть по адресу $C800 - $D800 распологается окно для доступа к внешним устройствам.
Делаем так


MVI A,$80 ;номер - в старших 4 битах
STA $DA00 ;адрес порта для переключения карт


Однако это не всё. Ведь к партнёру может быть подключено несколько устройств, а нам нужен только модуль МЦПГ. Для этого у каждого устройства есть номер. Его тоже надо прописать в порт. У модуля этот номер - 3.


MVI A,3
STA $DE00


Всё. Теперь по адресам $C800 - $D800 распологается знакогенератор, который можно изменять прямо во время работы программы.

Также нужно Настроить ВГ75 чтоб не было расстояний между символами.
Вот подпрограмма.


#DEFINE VG75=$D800
SETV:
CALL WAITIN
LXI H,VG75+1
MVI M,0
DCX H
MVI M,77
MVI M,29
MVI M,7
MVI M,53H
INR L
MVI M,23h
RET

WAITIN:
LXI H, VG75+1
MOV A,M
WAIT1:
MOV A,M
ANI $20
JZ WAIT1
RET


Рассмотрим структуру памяти знакогенератора. Каждый символ имеет размер 4*8 пикселей, 8 цветов на точку.
Биты расположены так:

PZNNNNNNNRRR

N - номер символа.
R - ряд в символе
P - половинка символа. Каждый байт кодирует 2 пикселя. Поэтому чтоб закодировать ряд пикселей надо записать данный в два места.
Z - поддерживаются 2 знакогенератора. Переключаться можно между ними программно, на экране они могут присутствовать оба и сразу (об этом позже)

Каждый байт имеет структуру:
xxBGRbgr
по R,G и B компоненте на пиксель. Биты инвертированные, поэтому 111 - чёрный, 000 - белый.
Знакогенераторы переключаются такими символами - $80 - МЦПГ1, $90 - МЦПГ2, $8C - стандартный знакогенератор РК.
Вот внизу подробно на картинке
http://savepic.net/6301447.png
Написал небольшую программу, которая берёт изображение 100*80, и обрабатывает его, генерирует знакогенератор для него и выводит эти символы. В изображении 100*80 используется 2 набора по 125 символов - почти всё.
Получается так - поле 100*80 и цвет на точку. Даже в спектруме и такого нет. (Диззи грустит :|)
http://savepic.net/6351622.png

Для конвертации запустите Project1.exe, выберите картинку, подберите настройки и нажмите конвертировать. Сгерерируется Pic.asm в той же папке. Запустите compile.bat (не запустится на x64), всё скомпилируется и запустится эмулятор. Нажмите кнопку для переключения в цветной режим и появится картинка.
Если хотите посмотреьт не компилируя, то запустите runonly.bat

https://yadi.sk/d/im9j-VKddzntg

Данный компьютер имеет неплохой потанциал для игр и демок, надо его раскрыть.