******************************** * О нашей кульной платформе * ******************************** (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 ________________________________