Автор Тема: [?] асм процедура для вывода изображения на экран (sega genesis).  (Прочитано 3729 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Гламурная киса

  • Пользователь
  • Сообщений: 317
  • Пол: Мужской
  • иичко
    • Просмотр профиля
Как вывести изображение,хранящееся в определённой области памяти на экран?
Т.к. mc68000 не на прямую юзает видео-ОЗУ меня интересует какой процедуркой можно осуществить это.

Добавлено позже:
Ах да, и как сконвертить картинку под сеговский формат?

Оффлайн saniok

  • Пользователь
  • Сообщений: 75
    • Просмотр профиля
Помоему ничего сложно, просто прочитать изображения из области в которой оно хранится и потом уже выводить на экран. :)

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
ага, вот пример
трололо
http://narod.ru/disk/31316829001/TrollFace%20SMD.7z.html

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

привожу пример настройки
move.w #$8004,(VCTRL).l ; Enable palette select
move.w #$8144,(VCTRL).l ; Enable Display
                move.w #$8238,(VCTRL).l; set plane a to $E000;
move.w #$8407,(VCTRL).l; set plane b to $E000;
move.w #$8560,(VCTRL).l; sprite table begins at $c000
move.w #$8C81,(VCTRL).l; Screen is 40x28 cells
move.w #$8f02,(VCTRL).l;    set VDP increment register to increment one word after each write
move.w #$9001,(VCTRL).l; Plane A/B are 64x32 cells
у мну проги все юзают эту настрйку
VCTRL = $C00004

а вот так у мну карта тайлов грузится в адрес E000 видео памяти.
именно оттуда видюха отображает две плоскости
lea Map,a0
move.l #$60000003,(VCTRL).l; point to VRAM $E000
move.w  #($E00)/2-1,d1
-:
move.w (a0)+,(VDATA).l;
dbf d1,-
опиши подробнее свою ситуацию и я да тебе более подробный гайд

Оффлайн Гламурная киса

  • Пользователь
  • Сообщений: 317
  • Пол: Мужской
  • иичко
    • Просмотр профиля
во, это оно...
А по подробнее можно?
В частности нарезка изображения на тайлы и как их потом загнать в ROM.

Добавлено позже:
кстати,Segaman, какой компилятор асма используете?
У меня в эмуле Gens когда захожу в Debug - винда (седьмая) сообщает, об ошибке и приложение накрывается,хотя сам эмуль стабильно функционирует если гамать в игры.

Оффлайн Nemesis_c

  • Пользователь
  • Сообщений: 1342
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Сигамана слушай больше... ололо, тынц тынц, гы... а толку никакого.

Smoke на пальцах все намного понятнее и проще оьяснил . Думаю он простит мне сей копипаст..
Проверено опытным путем, инфа 100%...  :

Smoke (22:45)
 ; Установка палитры (стандартнаЯ радуга 16ти цветных полос в первой палитре)
           move.l     #$c0000000,$c00004
           move.l     #$0000,$c00000
           move.l     #$0000,$c00000
           move.l     #$0C00,$c00000
           move.l     #$000C,$c00000
           move.l     #$0C0C,$c00000
           move.l     #$00C0,$c00000
           move.l     #$0CC0,$c00000
           move.l     #$00CC,$c00000
           move.l     #$0CCC,$c00000
           move.l     #$0E44,$c00000
           move.l     #$044E,$c00000
           move.l     #$0E4E,$c00000
           move.l     #$04E4,$c00000
           move.l     #$0EE4,$c00000
           move.l     #$04EE,$c00000
           move.l     #$0EEE,$c00000

 Smoke (22:45)
 Это загрузка палитры поцветно

 Smoke (22:46)
 то есть одна команда, один цвет

 Smoke (22:47)
 смотри, пишем данные всегда в $c00000, а в $c00004 записываем управляющие команды

 Smoke (22:48)
 то есть нам нужно записать палитру, записываем адрес в $c00004: move.l     #$c0000000,$c00004 ВДП тоже имеет свое адресное пространство как и м68к. с "адреса" $c0000000 начинаются данные палитры

 Smoke (22:49)
 потом пишем данные в $c00000

 Smoke (22:49)
 далее

 Smoke (22:51)
 графика лежит с адреса $0 до $1FFFF (всего может быть $1000 тайлов в врам). Чтобы перейти на начало (0) нужно записать move.l     #$40000000,$c00004

 Smoke (22:51)
           move.w     #$8f02,$c00004          ;
           move.l     #$40000000,$c00004     ;
           lea     (font).l,a5          ;Адрес хранени  шрифта и картинки
           move     #$29FF,d5          ;Размер шрифта и картинки (8Кб)
 ; Пересылка символов
 VramFont:
           move.w     (a5)+,$c00000          ;Отправим слово
           dbra     d5,VramFont

 Smoke (22:52)
 дальше грузим в a5 адрес графики и записываем словами ее

 Smoke (22:56)
 есть регистры отвечающие за адреса тайловых карт. они хранятся в врам вместе с графикой! Я точно не помню номера, но это вроде 1 и 4 регистры

 Smoke (22:57)
 Так вот нужно записать туды адреса планов, толкьо там цена деления не байт и не тайл вроде, это надо экспериментирвать, записывать значение и смотреть куда записалось

 Smoke (22:58)
 потом выставить в порт $C00004 адрес куда пишем данные и также как графику записываем словами тайловую карту

 Smoke (22:59)
 вообще чтобы было наглядно, ты можешь в проге GSSV открыть сейв, посмотреть адреса планов А и Б и в сейве записать туда какие-нибудь значения и посмотреть в игре что изменилось. так будет проще понять, что в вдп происходит

 Smoke (22:59)
 gssv - genesis savestate viewer
« Последнее редактирование: 13 Ноябрь 2011, 00:55:02 от Nemesis_c »