図8-25 ASCIIスクロールイメージ
ASCIIスクロールはシステム初期化状態で、128セル・256色で構成され、ノーマルスクロール画面“NBG0”を使用するように設定されています。 また、ASCIIスクロールデータは、それぞれ次のRAM領域中に格納されています。
キャラクタデータ:0x25e60000番地から2000H マップデータ :0x25e76000番地から1000H パレットデータ :0x25f00000番地から20H
何らかの事情により上記領域中に他のスクロールデータを書き込んでしまった場合は、ASCIIスクロールはそれらのデータに置き換えられるため、デフォルトとは異なった(正しくない)状態で描画されます。 | |
リスト8-7 sample_8_10_1:ASCIIスクロール
/*----------------------------------------------------------------------*/ /* Ascii Scroll */ /*----------------------------------------------------------------------*/ #include "sgl.h" #include "ss_scrol.h" #define NBG1_CEL_ADR VDP2_VRAM_B1 #define NBG1_MAP_ADR ( VDP2_VRAM_B1 + 0x18000 ) #define NBG1_COL_ADR VDP2_COLRAM #define BACK_COL_ADR ( VDP2_VRAM_A1 + 0x1fffe ) void ss_main(void) { FIXED ascii_posx = SIPOSX , ascii_posy = SIPOSY; slInitSystem(TV_320x224,NULL,1); slTVOff(); slPrint("Sample program 8.10.1" , slLocate(9,2)); slColRAMMode(CRM16_1024); slBack1ColSet((void *)BACK_COL_ADR , 0); slCharNbg1(COL_TYPE_256 , CHAR_SIZE_1x1); slPageNbg1((void *)NBG1_CEL_ADR , 0 , PNB_1WORD|CN_10BIT); slPlaneNbg1(PL_SIZE_1x1); slMapNbg1((void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR); Map2VRAM(ascii_map ,(void *)NBG1_MAP_ADR , 32 , 4 , 0 , 0); slScrAutoDisp(NBG0ON | NBG1ON); slTVOn(); while(1) { slScrPosNbg1(ascii_posx , ascii_posy); ascii_posx += POSX_UP; slSynch(); } }
<図8-26 透明設定イメージモデル>
透明処理を実行するスクロール面 | |||||
---|---|---|---|---|---|
NBG0 | NBG1 | NBG2 | NBG3 | RBG0 | |
代 入 値 | NBG0ON | NBG1ON | NBG2ON | NBG3ON | RBG0ON |
次のサンプルプログラム(リスト8-8)は、SGLライブラリ関数“slScrTransparent”を実際に使用してスクロールの透明カラー処理を実現したものです。
リスト8-8 sample_8_10_2:透明コードの制御
#include "sgl.h" #include "ss_scrol.h" #define NBG1_CEL_ADR VDP2_VRAM_B0 #define NBG1_MAP_ADR ( VDP2_VRAM_B0 + 0x10000 ) #define NBG1_COL_ADR ( VDP2_COLRAM + 0x00200 ) #define NBG2_CEL_ADR ( VDP2_VRAM_B1 + 0x02000 ) #define NBG2_MAP_ADR ( VDP2_VRAM_B1 + 0x12000 ) #define NBG2_COL_ADR ( VDP2_COLRAM + 0x00400 ) #define BACK_COL_ADR ( VDP2_VRAM_A1 + 0x1fffe ) void ss_main(void) { Uint16 trns_flg = NBG1ON ; FIXED yama_posx = SIPOSX , yama_posy = SIPOSY ; FIXED am2_posx = SIPOSX , am2_posy = SIPOSY ; slInitSystem(TV_320x224,NULL,1); slTVOff(); slPrint("Sample program 8.10.2" , slLocate(9,2)) ; slColRAMMode(CRM16_1024) ; slBack1ColSet((void *)BACK_COL_ADR , 0) ; slCharNbg1(COL_TYPE_256 , CHAR_SIZE_1x1); slPageNbg1((void *)NBG1_CEL_ADR , 0 , PNB_1WORD|CN_10BIT); slPlaneNbg1(PL_SIZE_1x1); slMapNbg1((void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR); Cel2VRAM(am2_cel , (void *)NBG1_CEL_ADR , 16000) ; Map2VRAM(am2_map , (void *)NBG1_MAP_ADR , 32 , 32 , 1 , 0) ; Pal2CRAM(am2_pal , (void *)NBG1_COL_ADR , 256) ; slCharNbg2(COL_TYPE_256 , CHAR_SIZE_1x1) ; slPageNbg2((void *)NBG2_CEL_ADR , 0 , PNB_1WORD|CN_12BIT); slPlaneNbg2(PL_SIZE_1x1); slMapNbg2((void *)NBG2_MAP_ADR , (void *)NBG2_MAP_ADR , (void *)NBG2_MAP_ADR , (void *)NBG2_MAP_ADR); Cel2VRAM(yama_cel , (void *)NBG2_CEL_ADR , 31808) ; Map2VRAM(yama_map , (void *)NBG2_MAP_ADR , 32 , 16 , 2 , 256) ; Pal2CRAM(yama_pal , (void *)NBG2_COL_ADR , 256) ; slScrPosNbg2(yama_posx , yama_posy) ; slScrPosNbg1(am2_posx , am2_posy) ; slScrTransparent(trns_flg) ; slScrAutoDisp(NBG0ON | NBG1ON | NBG2ON) ; slTVOn(); while(1) { if(yama_posx >= (SX + SIPOSX)) { if(trns_flg == NBG1ON) trns_flg = 0 ; else trns_flg = NBG1ON ; yama_posx = SIPOSX ; slScrTransparent(trns_flg) ; } slScrPosNbg2(yama_posx , yama_posy) ; yama_posx += POSX_UP ; slScrPosNbg1(am2_posx , am2_posy) ; am2_posy += POSY_UP ; slSynch(); } }
カラー演算処理を行うには次の手順を踏む必要があります。
パラメータには、使用するカラー演算処理制御に対応した下図の値を代入します。
パラメータの詳細は、“HARDWARE MANUAL vol.2 : VDP2 ユーザーズマニュアル第12章カラー演算”を参照してください。
図8-27 “slColorCalc”のパラメータ代入値(flag)
● ColorCalc代入値 ● 演算方法 :[CC_RATE | CC_ADD] | 演算指定画像 :[CC_TOP | CC_2ND] | 拡張カラー演算 :[CC_EXT ] | 登録面 :[NBG0ON | NBG1ON | NBG2ON | NBG3ON | RBG0ON | LNCLON | SPRON ] |
割合で加算 :TOP画像と2ND画像の演算比率を指定してカラー演算(CC_RATE) そのまま加算:TOP画像と2ND画像の単純な加算値でカラー演算(CC_ADD)
カラー演算を実行するスクロール面 | |||||||
---|---|---|---|---|---|---|---|
NBG0 | NBG1 | NBG2 | NBG3 | RGB0 | LNCL | SPRITE | |
代 入 値 | NBG0ON | NBG1ON | NBG2ON | NBG3ON | RBG0ON | LNCLON | SPRITEON |
ただし、カラー演算に加算方式を採択している場合は、比率指定は意味を持ちません。
ラインカラー画面の使用には、次の手順を踏む必要があります。
ラインカラー画面を単色使用したい場合は、関数“slLine1ColSet”を使用してください。
登録するスクロール面 | |||||
---|---|---|---|---|---|
NBG0 | NBG1 | NBG2 | NBG3 | RBG0 | |
代 入 値 | NBG0ON | NBG1ON | NBG2ON | NBG3ON | RBG0ON |
登録するスクロール面 | |||||||
---|---|---|---|---|---|---|---|
NBG0 | NBG1 | NBG2 | NBG3 | RBG0 | BACK | SPRITE | |
代 入 値 | NBG0ON | NBG1ON | NBG2ON | NBG3ON | RBG0ON | BACKON | SPRON |