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:
Education - the solution of competitive challenges.
Opinion - the owner DesireIRE BBS ie, Sir Denis, wrote in response to an article in Scratcher'a CWEEK # 2, about demo'macking.

В этот день...   21 November