PDA

Просмотр полной версии : Программирование графики MSX



CityAceE
22.10.2021, 22:33
Сходу не смог найти. Почитатели MSX помогайте! Дайте, пожалуйста, ссылку на документ, где описано как программировать графику MSX-1, то есть ту, которая ближе всего к графике Спектрума. Грубо говоря, вот я хочу написать простую программку, которая выведет на экран MSX картинку в стандартном спектрумовском формате, то есть файл длиной 6912 байт. Мне нужно описание того, что я должен делать на MSX, чтобы добиться этой цели.

P.S. У меня вообще любое знакомство с платформой или каким-то фреймворком начинается с того, что я пишу программу, которая выводит заставку Exolon'а, нарисованную Мацеем Ставицки.

reddie
22.10.2021, 23:10
Возможно, что-то найдется ниже по ссылке в разделе доков, да и вообще там много всячины

http://www.msxarchive.nl/pub/msx/

Dolphin101546015
22.10.2021, 23:57
На MSX ближе всего к спековскому режиму:
Screen2 (G1)(256x192, тайлмод 32х24 тайла, 2 цвета на тайл, 1 набор из 256 тайлов на весь экран, спрайтмод1 - 4 спрайта в строке, одноцвет, graphic1 (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D1%80%D0%B5%D0%B6%D0%B8%D0%BC_graphi c1_g1))
или Screen4 (G2,G3)(256х192, тайлмод 32х24, 2 цвета на строку тайла, 1 набор из 256 тайлов на каждую треть экрана, спрайтмод2 - 8 спрайтов в строке, многоцветные спрайты с операциями сложения цветов). graphic2 & graphic3 (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D1%8B_ graphic2_g2_%D0%B8_graphic3_g3))

Задача выглядит как инициализация видеопроцессора с загрузкой даты в нужные таблицы:
1. Установка видеорежима (запись указанных в таблице режима бит в регистры R0 и R1)
2. Установка адреса таблицы имен (регистр R2 (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82% D1%80%D1%8B_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D 0%B2%D0%BA%D0%B8_%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1 %8B%D1%85_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0% B2_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86))
3. Установка адреса таблицы цветогенератора (регистры R3 и R10 (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82% D1%80%D1%8B_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D 0%B2%D0%BA%D0%B8_%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1 %8B%D1%85_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0% B2_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86))
4. Установка адреса таблицы знакогенератора (регистр R4 (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82% D1%80%D1%8B_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D 0%B2%D0%BA%D0%B8_%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1 %8B%D1%85_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0% B2_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86))
5. Загрузка данных по адресам:
5.1 Установка старших бит адреса в R14 (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF_ %D0%BA_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BF%D0%B0% D0%BC%D1%8F%D1%82%D0%B8_vram)
5.2 Установка младших бит адреса, записью в порт #1 (0x99)
5.3 Установка оставшихся бит адреса и направления операции обмена данными, записью в порт #1 (0x99)
После установки адреса, запись производится отправкой данных в порт #0 (0x98), после записи байта, адрес инкрементируется автоматически.
Доступ к VRAM (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938#%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF_ %D0%BA_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BF%D0%B0% D0%BC%D1%8F%D1%82%D0%B8_vram)

Yamaha v9938 русская редакция с исправлениями и дополнениями (в разработке) (https://sysadminmosaic.ru/msx/yamaha_v9938/yamaha_v9938)
V9938-programmers-guide.pdf (http://rs.gr8bit.ru/Documentation/V9938-programmers-guide.pdf)

PS: все выше относится к MSX2. В MSX1 памяти меньше, установка адреса происходит проще, старшие регистры адреса не используются, режимы совпадают, кроме наличия спрайтмода2.
TMS9918A_TMS9928A_TMS9929A_Video_Display_Processor s_Data_Manual_Nov82.pdf (http://www.bitsavers.org/components/ti/TMS9900/TMS9918A_TMS9928A_TMS9929A_Video_Display_Processor s_Data_Manual_Nov82.pdf)

CityAceE
23.10.2021, 10:29
Dolphin101546015, спасибо за исчерпывающий ответ со ссылками. Сходу всё сложно и ничего не понятно :) Но буду разбираться!

Пока мест по сведениям из этого сообщение вообще непонятно как можно заполнить экран разнородной графикой (768 тайлов 8х8) имея ограничения только в 256 тайлов. Или это нужно делать за три захода? Но судя по всему, так тоже нельзя. Как же тогда получаются полноэкранные заставки? А как можно получить векторную графику, типа как в Elite?

ivagor
23.10.2021, 10:35
как можно заполнить экран разнородной графикой (768 тайлов 8х8) имея ограничения только в 256 тайлов
В scr2 3*256=768 тайлов, каждую точку можно задать индивидуально (и векторную графику нарисовать).
Возможно сразу с портов сложно начинать, в качестве первого шага можно попробовать из бейсика. Второй промежуточный шаг - воспользоваться процедурами msx bios.

goodboy
23.10.2021, 10:51
вот пример вывода ZXкартинки с #8000

PUSH HL
PUSH DE
PUSH BC
PUSH AF
EXX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
LD HL,#8000
LD C,#20
LD B,#18
CALL #A075
POP AF
POP BC
POP DE
POP HL
EXX
POP AF
POP BC
POP DE
POP HL
RET


#A075 PUSH HL
RES 7,H
LD A,L
SRL A
SRL A
SRL A
SRL A
SRL A
OR H
LD (#A12B),HL
POP HL
OR #40
LD D,A
LD A,L
AND #1F
SLA A
SLA A
SLA A
PUSH HL
PUSH BC
LD E,A
PUSH DE
LA098: DI
OUT (#99),A
LD A,D
OUT (#99),A
EI
PUSH BC
PUSH DE
PUSH HL
LA0A2: PUSH HL
LD E,#08
LA0A5: LD A,(HL)
OUT (#98),A
INC H
DEC E
JR NZ,LA0A5
POP HL
INC L
DEC C
JR NZ,LA0A2
POP HL
LD A,L
CP #E0
JR NC,LA0BD
LD DE,#0020
ADD HL,DE
JR LA0C5
LA0BD: LD A,H
ADD A,#08
LD H,A
LD A,L
AND #1F
LD L,A
LA0C5: POP DE
POP BC
INC D
LD A,E
DEC B
JR NZ,LA098
POP DE
POP BC
POP HL
LD A,D
OR #20
LD D,A
PUSH BC
PUSH DE
LD B,#00
LD A,(#A12B)
LD C,A
LD A,(#A12C)
LD L,A
LD H,#00
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,BC
LD A,H
OR #98
LD H,A
POP DE
POP BC
LA0ED: PUSH BC
PUSH HL
LD A,E
DI
OUT (#99),A
LD A,D
OUT (#99),A
EI
LA0F7: LD A,(HL)
PUSH AF
AND #07
EXX
LD L,A
LD H,#00
LD DE,#A12D
ADD HL,DE
LD C,(HL)
POP AF
RRCA
RRCA
RRCA
AND #07
LD L,A
LD H,#00
LD DE,#A135
ADD HL,DE
LD A,(HL)
OR C
LD B,#08
LA115: OUT (#98),A
NOP
NOP
DJNZ LA115
EXX
INC HL
DEC C
JR NZ,LA0F7
POP HL
LD BC,#0020
ADD HL,BC
POP BC
INC D
DEC B
JR NZ,LA0ED
RET

ivagor
23.10.2021, 11:17
Стоит отметить, что эта процедура предполагает, что scr 2 заранее включен и в видеопамяти все настроено. Ну и в конце не хватает двух таблиц преобразования атрибутов.

- - - Добавлено - - -

И яркость здесь не обрабатывается.

goodboy
23.10.2021, 11:22
это я на скорую руку дёрнул кусок из игры.
CityAceE, как вариант посмотри (что-то небольшое) из того что есть на ZX и проведи параллель.
например Eric & Floaters / BomberMan

GreyWolf
23.10.2021, 11:25
Работающие примеры для MSX с писанием будут опубликованы.

Dolphin101546015
23.10.2021, 15:14
Или это нужно делать за три захода? Но судя по всему, так тоже нельзя. Как же тогда получаются полноэкранные заставки? А как можно получить векторную графику, типа как в Elite?

В три захода делать не нужно, таблицы патернов идут подряд друг за другом (3 раза по 2048 байт), таблицы цветности так же идут подряд.
А таблица имен одна на экран, просто для каждой трети экрана выбираются свои тайлы из соответствующей трети таблиц.
Например если заполнишь три раза подряд таблицу имен от 0 до 255 (каждую треть по восемь строк), то коды тайлов повторяются, а тайлы на экране будут различаться. И все тайлы на экране будут выглядеть уникальными.
Чтобы нарисовать вектор, тебе нужно вычислить в каких тайлах его нужно рисовать, а потом у этих тайлов обновлять битовую маску для соответствующих точек вектора.
Чтобы было проще, начни с режима GR1, там всего 256 уникальных тайлов на экран, и проще понять будет с выводом. Потом перейдешь к G2.
Только ты должен понимать, что памяти он потребует больше 256*8*3, для патернов, 256*8*3 для таблицы цветности и 768 на экран.

ivagor
25.10.2021, 13:05
Если еще актуально, вечером могу набросать вариант. Рекордов скорости или размера не обещаю, но по крайней мере в эмуляторах работать будет.

goodboy
25.10.2021, 14:14
если я правильно понял то вот относительно понятный кусок кода для вывода картинки
http://map.grauw.nl/resources/msxbios.php

CALL #0041
DI
LD HL,#891C
LD DE,#0000
LD BC,#1800
CALL #005C
DI
LD HL,#A11C
LD DE,#2000
LD BC,#1800
CALL #005C
CALL #0044
EI
RET


вот кстати хорошее пособие по программированию
https://www.chibiakumas.com/z80/msx.php

CityAceE
25.10.2021, 14:52
Всем спасибо за ссылки и код! Это реально очень полезная информация для меня!

На выходных не до компьютера было, поэтому особо ничего не смотрел.
А вообще начал изучать исходники Yazzie для MSX Дениса Грачёва. Взял оттуда инициализацию компьютера и вывод на экран заставки. Собственно у меня сейчас есть готовый шаблон программы, который собирается, запускается и выводит картинку на экран. Вот это я сейчас и изучаю, подглядывая в документацию. Думаю, что скоро и заставку Exolon'a смогу вывести на экран MSX ;)

^m00h^
25.10.2021, 15:14
А потом думаешь взяться за порт PoP на MSX ?

CityAceE
25.10.2021, 15:27
А потом думаешь взяться за порт PoP на MSX ?
Пока мест просто присматриваюсь к платформе, а что будет дальше, там видно будет ;) Вполне вероятно, что и ничего...

CityAceE
25.10.2021, 17:11
вот относительно понятный кусок кода для вывода картинки
Примерно так же выводится картинка и в Yazzie.

Пояснения подпрограмм:


DISSCR=$0041 // Function: Disable Screen Display
// Input: NONE
// Output: NONE
// Registers: AF, BC
// Available: MSX

LDIRVM=$005C // Function: Block Transfer From Memory To VRAM
// Input: HL = Memory Source Address, DE = VRAM Destination Address, BC = Data Length
// All Bits Of VRAM Address Are Valid
// Output: NONE
// Registers: ALL
// Available: MSX =Do Not Call SUB-ROM While Screen Modes 4..8 Are Changed

ENASCR=$0044 // Function: Enable Screen Display
// Input: NONE
// Output: NONE
// Registers: ALL
// Available: MSX

Первым блоком переносятся пиксели (6144 байта), а вторым их цвета (6144 байта). В Yazzie заставка хранится запакованной методом RLE и эти два блока на лету распаковываются и записываются прямой записью в порт #98, а не функцией BIOS, как в примере. Но, перед этим ещё идёт включение нужного режима экрана.

goodboy
25.10.2021, 17:19
перед этим ещё идёт включение нужного режима экрана
CHGMOD

Address : #005F
Function : Switches to given screen mode
Input : A - Screen mode ; 2
Registers: All

CityAceE
25.10.2021, 17:53
М-да... Такой метод вывода графики получается крайне медленным. Слишком много накладных расходов. Годится разве что для отображения заставки.


И яркость здесь не обрабатывается.
Может быть потому что не хватает похожих цветов?

CityAceE
25.10.2021, 19:30
Пока не могу понять как задать свою палитру, чтобы сделать её похожей на Спектрум. Или это нельзя сделать?

https://pic.maxiol.com/images2/1635179322.1604655705.msx.png

goodboy
25.10.2021, 20:41
https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/i/b483dcc9-48b2-40ae-9960-fc2a1b046d6d/dd5r06l-69b0ff4b-c189-4fad-a303-f1341d3cbc9f.png

jerri
25.10.2021, 21:01
Пока не могу понять как задать свою палитру, чтобы сделать её похожей на Спектрум. Или это нельзя сделать?

https://pic.maxiol.com/images2/1635179322.1604655705.msx.png

а ты цвета задал? У ямахи же нет палитры, там прописанные цвета.

CityAceE
25.10.2021, 21:04
goodboy, вот именно эту палитру я и вижу. Сложно тут сопоставить цвета Спектрумовским. Тут три оттенка красного и три зелёного.


а ты цвета задал? У ямахи же нет палитры, там прописанные цвета.
Ничего на задавал, использую стандартные, такие как goodboy продемонстрировал.

Задействовал только хотя бы приблизительно похожие цвета:
https://pic.maxiol.com/images2/1635186617.1604655705.exolonmsx.png https://pic.maxiol.com/images2/1635186794.1604655705.exolonorig.png

CityAceE
25.10.2021, 22:57
Задал свою палитру. Но что-то сильно резкий переход между цветами:
Яркий белый - %111111111111
Тёмный белый - %011101110111

https://pic.maxiol.com/images2/1635191721.1604655705.msxexzx.png

CityAceE
26.10.2021, 10:08
Затупил с палитрой. Наверное это где-то из области профдеформации. Я вместо того, чтобы расценивать значение канала как двоичное число, манипулировал с единицами как в маске подсети, то есть тупо убирал единицы слева.

https://pic.maxiol.com/images2/1635231931.3280329131.exlolonmsx.png https://pic.maxiol.com/images2/1635186794.1604655705.exolonorig.png

Теперь картинка идентична Спектрумовской. Но скорость её вывода совсем не радует. Чтобы вывести полноэкранную картинку нужно перекинуть 6144*2 байт через out (x),a.

goodboy
26.10.2021, 10:20
скорость её вывода совсем не радует
ну это скорее пересылка в буфер. чуток развернуть её можно.
зато проявляется на экран практически мгновенно (пара записей в порты)

CityAceE
26.10.2021, 14:29
Во вложении исходный текст для компиляции с помощью ассемблера sjasmplus. Перед компиляцией рядом с исходником нужно положить файл стандартного экрана ZX Spectrum длиной 6912 с именем zx.scr (либо поменять его имя в исходном тексте в предпоследней строке). На выходе будет файл, готовый для запуска в эмуляторе MSX.

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

ivagor
26.10.2021, 19:01
Возможно кому-то пригодится аналогичная по назначению процедура для msx1 или альтернативный вариант для msx2 (яндекс.диск (https://disk.yandex.ru/d/x9oJIGm4wonEwg)). Компилировать в TASM 3.2 (https://www.ticalc.org/archives/files/fileinfo/250/25051.html)

- - - Добавлено - - -

В варианте для msx1 теоретически могла возникнуть проблема, сделал более корректно. Вариант для msx2 тоже заменил за компанию.

Upd 27.10.2021: Образы romов (https://disk.yandex.ru/d/KIk77m2e7QgrTw) по 8192 байта, например для запуска в fMSX.

goodboy
26.10.2021, 20:09
можно будет что-то написать для платформы MSX
портируй Exolon или Batty

CityAceE
26.10.2021, 23:18
портируй Exolon
Это к ivagor. Думаю, что он бы относительно легко с ним разделался ;)


или Batty
Как раз думаю по этому поводу. Но на графическую архитектуру MSX не очень ложится то, как написана эта игра. Слишком много всего придётся переделывать и переписывать.

CityAceE
26.10.2021, 23:38
Возможно кому-то пригодится
Иван, спасибо! Обязательно завтра поизучаю код и попробую скомпилировать! А сегодня сходу хотел запустить скомпилированные ROM'ы, но эмулятор fMSX 6.0, которым я пользуюсь, ругнулся и отказался запускать их.

ivagor
27.10.2021, 09:14
fMSX 6.0, которым я пользуюсь, ругнулся и отказался запускать их.
Добавил (https://zx-pk.ru/threads/33838-programmirovanie-grafiki-msx.html?p=1134500&viewfull=1#post1134500) romы для fMSX (он мне никогда не нравился и тут ответил взаимностью). Вчера проверял "некратные" ромы в BlueMSX, OpenMSX, Mesei - никаких проблем. Автор fMSX довольно своеобразный человек, и это касается не только (и не столько) fMSX.

CityAceE
27.10.2021, 09:36
ivagor, спасибо, опробую чуть позже!

И сразу походу вопрос: а каким эмулятором предпочтительнее пользоваться? Чтобы и совместимость нормальная была и, самое главное, удобный и функциональный отладчик.

goodboy
27.10.2021, 10:08
удобный и функциональный отладчик
я обычно ковыряюсь в BlueMSX, хотя отладчик там не идеальный.
и когда нужно например выдрать музыку делаю в нём SaveAllRAM и переношу блок на спек

ivagor
27.10.2021, 10:17
В Emu очень продвинутый отладчик, по моему мнению лучше, чем в BlueMSX (многообразие условных бряков), спасибо b2mу, что добавил msx в свой эмулятор. Но все же msxы не профильные для Emu, поэтому сама эмуляция там не очень точная (скорость, цвет, охват дополнительных устройств). Мне удобнее отлаживать в Emu и потом проверять (и при необходимости доотлаживать) в BlueMSX.

jerri
27.10.2021, 10:52
Это к ivagor. Думаю, что он бы относительно легко с ним разделался ;)


Как раз думаю по этому поводу. Но на графическую архитектуру MSX не очень ложится то, как написана эта игра. Слишком много всего придётся переделывать и переписывать.Напрасно ты так.
Кирпичики тайлами , монстры спрайтами. Пусть будут чернобелыми.

b2m
27.10.2021, 14:03
все же msxы не профильные для Emu
Да, есть такое. Я вроде даже эмуляцию видео-чипа недоделал. Просто не нашёл программы, где бы использовалось аппаратное рисование линий, так что этой фичи нет.

- - - Добавлено - - -

Червь сомнений всё-же глодал, заглянул в исходники, с линией вроде всё в порядке, а вот чтение пикселя и поиск пикселя не реализован. И ещё какая-то операция с кодовым названием LMCM (Logical move VRAM to CPU).

ivagor
27.10.2021, 14:23
b2m поправь хотя бы палитру msx2, в синем канале у тебя 4 градации вместо 8.

CityAceE
27.10.2021, 17:47
Возможно кому-то пригодится аналогичная по назначению процедура
Ознакомился с твоим вариантом. Конечный результат одинаковый с моим, но у тебя всё компактнее и быстрее!:v2_thumb:

Ну, и вопросы. Куда ж без них?

1. В вариантах для двух моделей обработка ч/к картинки идентична. Но для засылки байта в MSX2 используется просто out, а в MSX1 out c последующим nop'ом. Я так понимаю, что это задержка. В Yazzie она тоже используется. У себя я все nop'ы убрал, потому что под эмуляторов всё работает и без них. Так вот вопрос, почему ты в одном варианте nop поставил, а во втором нет?

2. ld de,(-7*256)+1 - что это за ячейка? Что из неё читается и почему такая странная запись?


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

ivagor
27.10.2021, 18:13
почему ты в одном варианте nop поставил, а во втором нет?
У видочипов msx1 и msx2 разные тайминги (http://map.grauw.nl/articles/vdp_tut.php#vramtiming) при доступе к VRAM.

ld de,(-7*256)+1
Это просто приращение для коррекции адреса при переходе между знакоместами.

Что касается батти выскажу субъективное мнение, что серьезные технические сложности при адаптации для msx там вряд ли возникли бы. Запас по быстродействию есть. Движущиеся спрайты, насколько помню, копируются на экран из буфера, их можно и во VRAM переслать. Ну а с неподвижными объектами типа кирпичей совсем проблем нет.

goodboy
27.10.2021, 18:33
во многих играх перенесённых со спека логика работы такая-же, изменён только вывод из буфера на экран.
я помнится одно интро к игре перенёс с msx на zx (версии с ним не-было) - изменил только печать из буфера.
позже эта игра `всплыла`, так вывод графики в моём варианте оказался даже быстрее.

CityAceE
27.10.2021, 19:37
то просто приращение для коррекции адреса при переходе между знакоместами.
Точно! Смотрю в книгу - вижу фигу :v2_dizzy_facepalm:


Движущиеся спрайты, насколько помню, копируются на экран из буфера, их можно и во VRAM переслать.
Да, всё верно. Тем более, что в процессе адаптации с Специалисту я перевёл всё хранение и вывод графики в столбцы, что более подходит для MSX.

jerri
27.10.2021, 19:44
Да, это если эту игру проектировать и писать с нуля. А если брать готовые исходники и пытаться их адаптировать к существующей архитектуре, то становится понятно, что это не будет просто. К тому же, даже с кирпичами будет проблема, так как они не вписываются в блоки 8*8, а снаружи еще и обведены линией толщиной в пиксель.

так там же кирпичики из блоков как раз 8*16. линия это часть тайла.

OrionExt
27.10.2021, 20:24
тут как бы два пути. или эмулировать на тайлах экран zx, который в свою очередь эмулирует тайлы. эмулятор в эмуляторе выйдет с потерей динамики :D или писать движок на тайлах с почти с нуля.

есть третий вариант сделать в битмап экране со всякими фичами блиттера.

и даже четвертый вариант есть, все толково смешать и подать в лучшем в аппетитном виде :) но это не каждому доступно в силу определенных разных причин.


https://youtu.be/fqxpjl3_bMw

jerri
27.10.2021, 20:44
тут как бы два пути. или эмулировать на тайлах экран zx, который в свою очередь эмулирует тайлы.

зачем? тайлы есть. спрайты есть. Их не надо эмулить, их надо использовать

Lethargeek
27.10.2021, 20:49
глюковат однако же на msx вышел киберноид, хоть бы спрайты вовремя выключали
ну, и самые мясные экраны, в которых не хватит спрайтов для скорости, в клип предусмотрительно не включили))

OrionExt
27.10.2021, 21:04
глюковат однако же на msx вышел киберноид, хоть бы спрайты вовремя выключали
ну, и самые мясные экраны, в которых не хватит спрайтов для скорости, в клип предусмотрительно не включили))

ой. ой. ой. спасибо поржал с поста.

- - - Добавлено - - -


зачем? тайлы есть. спрайты есть. Их не надо эмулить, их надо использовать

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

вот так просто не выйдет ;)

Lethargeek
27.10.2021, 21:11
ой. ой. ой. спасибо поржал с поста.
а теперь с 0:16 в клипе сходи поплачь :p

jerri
27.10.2021, 21:25
ну как тебе сказать. тайлы своеобразны (свои), спрайты не очень (тут надо понимать (быть в теме). от куда все пошло. и во что вылилось в силу ключевых лоббистов платформы).

вот так просто не выйдет ;)

Мы все еще о МСХ говорим?

OrionExt
27.10.2021, 21:41
а теперь с 0:16 в клипе сходи поплачь :p

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

- - - Добавлено - - -


Мы все еще о МСХ говорим?

а вы? или вы о zx, где можно эмулировать в ч/б чего угодно в силу маленького экрана в 6кб ;)

зы. спроси о CityAceE. я смотрю он в шоке. от возможностей MSX (в хорошем смысле) :)

goodboy
27.10.2021, 21:53
а зачем смешивать msx1 и 2.
начали с 1, но причём тут cybernoid на msx2 ???

OrionExt
27.10.2021, 22:08
оно все совместимо снизу вверх, всегда хочется лучшего :) и чего там такого революционного в msx2, просто поправил режим с тайлами, спрайтами (кривовато. читай выше).

- - - Добавлено - - -

ладненько. надо автора поста мотивировать, а то он ваших речей скиснет :D (бабульки на лавочке, я вот слышала ...)


https://youtu.be/_oe82vwxOnY

Lethargeek
27.10.2021, 23:03
мне вот интересно? ты чего то хоть чуть-чуть спродюсировал чего на этом форуме, что можно пощупать в реале, оценить, так сказать. я не находил. может ошибаюсь. капец.
:v2_dizzy_facepalm: мне вот интересно? если я еще "чего то хоть чуть-чуть спродюсирую на этом форуме, что можно пощупать в реале, оценить, так сказать" - глюков в msx-киберноиде меньше или больше станет? капец.

- - - Добавлено - - -


я не находил. может ошибаюсь.
а ты поищи получше хоть чуть-чуть

Reobne
28.10.2021, 16:14
глюков в msx-киберноиде меньше или больше станет?
Логического противоречия тут нет. Чисто гипотетически можно предположить такую картину:
В то время, как космические корабли будут бороздить просторы спродюсированных тобой игр, ты будешь расти над собой. И для тебя глюки уже не будут глюки, но мелкие незначительные глючёчки.
То есть твоя оценка изменится, чисто гипотетически. :)

Lethargeek
28.10.2021, 16:29
Логического противоречия тут нет.
тут логической связи нет


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

jerri
28.10.2021, 21:12
а вы? или вы о zx, где можно эмулировать в ч/б чего угодно в силу маленького экрана в 6кб ;)


Я про вот это.


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

вот так просто не выйдет

Нормальные тайлы, нормальные спрайты.я и пострашнее инструменты видел и результат.

OrionExt
05.11.2021, 17:16
Я про вот это.

Нормальные тайлы, нормальные спрайты.я и пострашнее инструменты видел и результат.

ааа. я вот не просто так в скобках маяковал. скажу по простому для 70 годов. спрайты и тайлы очень ничего так :v2_dizzy_roll:

жаль афтор темы слился. ну впрочем как обычно.

- - - Добавлено - - -

add. второй половины 70 годов.

- - - Добавлено - - -

ps1. в том видео, которое я запостил. ни спрайтов, ни тайлов нет. вот поворот :D

- - - Добавлено - - -

ps2. вот тут глубоко для тех кто в теме. а не "пукнуть" решил. как показали быстрые практические опыты человека глубоко из темы науки, Ниши на период его исследований середины 80г.

натягивание тмс с точностью до такта с режимом 2х (совы) на два два глобуса (одновременно :D).
глобусы: тайлы и спрайты (тмс из 70 г) не очень. блитер (тмс из 70) значительно круче.
имеем 38 и 58. в целом не плохо, но с таким подходом все печально закончилось с vdp от Ниши.

далее Ниши со студентами решил придумать новый проц на базе z280 (купил исходники). сидел в бункере 7 лет. придумал не плохой проц r800. вылез. проц r800 оказался не кому не нужен в 92 году.

в чем .....? не бейте ученых :), ну и связываться с ними людям практичным не стоит ;)

ps3 и последний. там на заре создания msx еще один товарищ (серый кардинал) мелькал билл гейтс, который и отправил Ниши учиться и тырить у америкосов технологии.

но это уже другая история взрослые дядьки :)

Jordon/SDM
26.11.2021, 21:47
.msxdos
SCT EQU #1E00-#0200
SAT EQU #1E00 ; начало таблицы атрибутов спрайтов
SGT EQU #3800 ; начало таблицы шаблонов спрайтов
PGT EQU 0 ; начало таблицы шаблонов
PNT EQU #1800 ; начало таблицы имен шаблонов
CT EQU #2000 ; начало таблицы цветов

SCREEN_DATA EQU #4000
SCREEN_ATRIBUTE_DATA EQU #5800


ORG #100
;stp: jr stp
di
ld sp,newsp
call SET_SCREEN


ld hl,screen
ld de,SCREEN_DATA
ld bc,6912
ldir
call zx2msx_data
call zx2msx_atribute
ld hl,reg_data_SCREEN_2+1
ld a,(hl) ; data for r1
xor #40 ; bit6=0 SCREEN OFF
out (#99),a
ld a,#81 ; reg 1 write
nop
out (#99),a ; SCREEN On

mmm: jr mmm


zx2msx_atribute:
ld hl,CT
ld a,l
out (#99),a
ld a,h
or 64
out (#99),a
ld bc,768
ld hl,SCREEN_ATRIBUTE_DATA
setclrl2:
ld a,(hl)
inc hl
exx
ld de,color_table+8
bit 6,a
jr nz,bright_color ;bit6 установлен(bright)
ld de,color_table
bright_color:
push af
and #07
ld h,0
ld l,a
add hl,de
ld b,(hl) ; цвет INK
rl b
rl b
rl b
rl b
pop af
rrca
rrca
rrca
and #07
ld h,0
ld l,a
add hl,de
ld a,(hl) ; цвет PAPER
or b
ld b,8
setclrl1:
out (#98),a
nop
djnz setclrl1
exx
dec bc
ld a,c
or b
jr nz,setclrl2
ret
;---------------------------------------------------------------------------
zx2msx_data:
ld hl,PGT
ld a,l
out (#99),a
ld a,h
or 64
out (#99),a

ld hl,SCREEN_DATA
ld d,24
tscrdtl3:
push hl
ld c,32
tscrdtl2:
push hl
ld b,8
tscrdtl1:
ld a,(hl)
out (#98),a
call DOWN_HL
djnz tscrdtl1
pop hl
inc hl
dec c
jr nz,tscrdtl2
pop hl
call DOWN_HL8
dec d
jr nz,tscrdtl3
ret
;----------------------------------------------
DOWN_HL8:
ld b,8
dhl8l:
call DOWN_HL
djnz dhl8l
ret
DOWN_HL: ;------------ HL= адрес экрана
inc h
ld a,h
and 7
ret nz
ld a,l
add a,32
ld l,a
ret c
ld a,h
sub 8
ld h,a
ret

screen: incbin "cyber"
ds 2*10
newsp:
dw 0
dw 0
;------------------------------------------------------------------
color_table:
db 0,1,2,3,4,5,6,7 ; номера цветов без bright
db 8,9,10,11,12,13,14,15 ; номера цветов с bright
;-------------------------------------------------------------------
set_screen_register:
ld a,#00 ; старт с рег0 бит7=0 атвтоинкримент регеиста
out (#99),a
ld a,#91 ; запись в рег 17
nop
out (#99),a
ld c,#9B ; порт#3
ld a,12 ; сколько регистров
reg_load_loopm:
outi
dec a
jr nz,reg_load_loopm
ret

set_palette_registre:
ld hl,ZXpaletteData
xor a
out (#99),a ; номер регистра цвета
ld a,#90 ; reg 16(#10) +7бит=1(запись)
nop
out (#99),a
ld a,16 ; сколько регистров
ld c,#9A ; Color Palette Register
set_palette_loop:
outi ; SET RED BLUE
outi ; SET GREEN
dec a
jr nz, set_palette_loop
ret
;----------------------------------------------------------------
reg_data_SCREEN_2:
db 00000100b ;REG#0 MODE REGISTER #0

db 01100010b ;REG#1 MODE REGISTER #1

db 00000110b ;REG#2 PNT ADDRES #1800

db 11111111b ;REG#3 CT ADDRES LOW #2000

db 00000011b ;REG#4 PGT ADRESS #0000

db 00111111b ;REG#5 SAT ADRESS LOW #1E00

db 00000111b ;REG#6 SGT ADRESS #3800

db 00000000b ;REG#7 COLOUR REG (BIT 0-3 -BORDER COLOUR)

db 00101000b ;REG#8 MODE REGISTER #2 (BIT 5-Transparent from palette(0=Normal,1=Color 0 is solid); BIT 2-3 VRAM size and speed (0=1*16KB,1=4*16KB,2=1*64KB,3=64KB/HighSpeed)

db 00000010b ;REG#9 MODE REGISTER #3 (BIT 1=1 IF PAL MODE)

db 00000000b ;REG#10 CT ADDRES HIGH #0000

db 00000000b ;REG#11 SAT ADRESS HIGH #0000
;-----------------------------------------------------------
ZXpaletteData:
; RB G
db #00,0 ; Color 0 black
db #05,0 ; Color 1 dark blue
db #50,0 ; Color 2 dark red
db #55,0 ; Color 3 dark magenta
db #00,5 ; Color 4 dark green
db #05,5 ; Color 5 dark cyan
db #50,5 ; Color 6 dark yellow
db #55,5 ; Color 7 dark white (gray)

db #00,0 ; Color 8 black
db #07,0 ; Color 9 light blue
db #70,0 ; Color 10 light red
db #77,0 ; Color 11 light magenta
db #00,7 ; Color 12 light green
db #07,7 ; Color 13 light cyan
db #70,7 ; Color 14 light yellow
db #77,7 ; Color 15 light white
;----------------------------------------------------------------
SET_SCREEN:
ld hl,reg_data_SCREEN_2
inc hl
ld a,(hl) ; data for r1
xor #40 ; bit6=0 SCREEN OFF
ld (hl),a
dec hl
out (#99),a
ld a,#81 ; reg 1 write
nop
out (#99),a ; SCREEN OFF
;----------------------------------------------------------------
; УСТАНАВЛИВАЕМ РЕГИСТРЫ SCREEN2
call set_screen_register
;----------------------------------------------------------------
;УСТАНАВЛИВАЕМ ПАЛИТРУ
call set_palette_registre
;Устанавливаем PNT--------------
ld hl,PNT
call SET_VRAM_HL
xor a
ld b,0
ld c,3
fpl1:
out (#98),a
inc a
djnz fpl1
dec c
jr nz,fpl1
ret
;-------------------------------------------------------------
; HL=VRAM адрес; BC=сколько байт; A=чем заполнять
FILL_VRAM:
ex af,af'
ld a,l
out (#99),a
ld a,h
or 64
out (#99),a
fill_vram_loop:
ex af,af'
out (#98),a
dec bc
ex af,af'
ld a,c
or b
jr nz,fill_vram_loop
ret
;--------------------------------------------------------------
SET_VRAM_HL:
push af
ld a,l
out (#99),a
ld a,h
or 64
out (#99),a
pop af
ret
;--------------------------------------------------------------

- - - Добавлено - - -

Вот с палитрой как на спеке... Палитру можно менять только на MSX2 и старше

yevrowl
23.10.2025, 08:53
Вот ещё образец от И. Р. Маска — http://old-dos.ru/index.php?page=files&mode=games&do=show&id=105725