27 января 2004 |
|
********************************
* О нашей кульной платформе *
********************************
(C) FRACTAL 27.01.2004
Речь пойдет об устройстве и ра-
боте NES. Эта информация, наде-
юсь, будет полезной тем, кто со-
бирается кодить на NES. Подчерк-
ну, что гораздо полезней почи-
тать более умных людей. Информа-
ции про NES достаточно в Интер-
нете. Поэтому я не претендую на
полноту представляемой информа-
ции.
Сначала о памяти NES:
$0000-$OOFF - нулевая страница,
RAM, к ней можно обращаться с
помощью специальной адресации
(указывается только младший байт
адреса). Также нулевая страница
используется для индексной адре-
сации (команда типа lda ($00),y
выполняется так:считывается зна-
чение из ячейки ($0000), двух-
байтный адрес, к нему добавляет-
ся смещение у, из полученного
байта берется значение и запи-
сывается в аккумулятор).
$0100-$01FF - область стека,
младший байт адреса указателя
стека содержится в регистре S.
$0200-$07FF - RAM.
$0800-$1FFF - копия RAM, не ис-
пользуется.
$2000-$ЧFFF - регистры внешних
устройств NES и их копии.
$5000-$SFFF -расширенное RAM для
специального mapper'а MMCS плюс
регистры этого маппера (маппер -
это устройство,управляющее в ос-
новном памятью NES).
$6000-$7FFF -RAM для сохранений.
$8000-$FFFF - действительная па-
мять ROM'ов. Т.е. две страницы
памяти, содержащие программу и
данные картриджа.
Это все адресное пространство
NES. Все прочие его расширения
используются с помощью мапперов.
Далее несколько слов про PPU.PPU
- это picture processing unit,
второй процессор, встроенный в
NES для работы с графикой.Основ-
ные регистры этого устройства
адресуются в основной памяти:
$2000 - PPU Control Register#1
$2001 - PPU Control Register#2
$2002 - PPU Status Register
$2005 - Background Scroll
$2006, $2003 - Adress Register
$2007, $2004 - I/O Register
(в этих парах вторые регистры
работают со спрайтами)
PPU имеет свою память. Ниже при-
водится ее описание:
$0000-$1FFF - Pattern Tables,
всего две штуки, содержат набор
данных по тайлам (квадратам 8*8
пикселов, из которых состоят
бэкграунд и спрайты). Действите-
льный формат тайла таков: снача-
ла идут восемь байт, а затем еще
восемь байт. Каждой точке приво-
дятся в соответствие один бит в
первой и один во второй последо-
вательности (т.е. точка в тайле
может иметь один из четырех цве-
тов).
$2000-$2FFF - четыре Name Table.
Одна из них (установленная через
специальный регистр) является
активной. Размер Name Table -
$03C0, и еще $40 байт отводится
под дополнительные данные об ат-
рибутах (цветах).
$3F00 - $3F1F - палитра, по 16
цветов на бэкграунд и спрайты.
А также есть SPR-RAM - $100 байт
данных о 64 спрайтах (по 4 бай-
та: x, номер тайла, атрибуты, у)
Адресация в ней осуществляется
регистр $2003 (начало - $0000).
Еще три полезныз регистра:
$4014 - Sprite DMA Register
(быстрый обмен с SPR-RAM)
$4016 - первый джойстик
$4017 - второй джойстик
А таперь небольшой пример - за-
пись палитры из памяти в видео-
память. Пример может откомпилир-
овать Nesasm v2.0, которым я
пользуюсь.
.inesprg 1
.ineschr 0
.inesmap 0
.inesmir 0
;размещаем метку в нулевой стра-
;нице
.zp
PALadr.LO = $00
PALadr.HI = $01
;программный код
.code
.bank 0
.org $8000
Start:
cld ;так
sei ;принято
jsr stopPPU
ldx #$FF;стек
txs
lda #LOW(Palette)
sta
;таблица векторов: вектор немас-
;кируемых прерываний, сброса,
;программных прерываний (по ин-
;струкции BRK)
.bank 1
.org $FFFA
.dw 0
.dw Start
.dw 0
________________________________
Other articles:
|
|
|
|
|
Similar articles:
В этот день... 21 November