世嘉土星系统memory mapping システムの使用するメモリのマッピングについて

本文详细介绍了世嘉土星系统中内存的映射使用,包括工作内存区域、光源影响的数据、Z缓冲区、矩阵堆栈等。系统通过自定义的链接器实现内存管理,以优化性能并降低成本。文章还列出了关键的系统变量及其作用,为开发者提供基础指南。
摘要由CSDN通过智能技术生成

世嘉土星在设计的时候参考了linux,但由于导入工具链过程中发现,由于增加土星的MMU,内存地址管理器,会显著增加成本,且使用OS会导致技能performance的下降,所以自己通过链接器DLT方式,由bios为IPL,实现了MMU管理功能,此篇为开发土星游戏软件的基础文章,用户自定义全局变量,静态变量等,由DLT指定存放地址,随文附送 IDA PRO YSSLOADER,可以分析yabause的save state file
◎ システムの使用するメモリのマッピングについて

システムはスプライト、スクロールのコントロール用に WORK-HI領域の
0x40000バイトを使用しています。また、テクスチャに光源の影響を与え
る場合にグーローシェーディングを用いるため、このデータとしてVDP1の
VRAMの内264バイトを使用しています。それらの内分けと、デフォルト
の設定を以下に示します。

MAX_POLYGONS:    1786    使用できるポリゴン数
MAX_VERTICES:    2500    使用できる頂点数
MAX_TRANSFER:        20    ブランキング中の転送リクエスト数
MAX_NEST:            20    マトリクスのネスト数

slPutPolygon() は指定されたモデルで使用するポリゴン数、及び頂点数を加えた時
最大数を越える場合そのモデルは処理しません。

また、slPutSprite() , slDispSprite() , slSetSprite() は実行されるたびにポリゴン数
をひとつずつ加算し、最大数を越える場合にそのデータの処理を中止します。
(ただし、指定されたZ位置が表示範囲外の場合には加算されません)


ワークRAM:
    060C0000:    (SortList)
        スプライトコントロールデータのDMA転送用テーブルバッファ
        (MAX_POLYGONS+6)*3*4バイト = 0x5400
    060C5400:    (CLOfstBuf)
        光源の影響による発色データテーブル
        32*32 = 0x400
    060C5800:    (Zbuffer)
        ポリゴンソート用の1次バッファ(ウィンドウ0用)
        128*4 = 0x200
    060C5A00:    (Zbuffer2)
        ポリゴンソート用の1次バッファ2(ウィンドウ1用)
        128*4 = 0x200
    060C5C00:    (Zbuf_nest)
        ポリゴンソート用の2次バッファ
        256*4 = 0x400
    060C6000:    (Spritebuf)
        スプライトコントロールデータバッファ
        (MAX_POLYGONS+5)*36 = 0xFBDC
    060D5BDC:    (Spritebuf2)
        スプライトコントロールデータバッファ2
        (MAX_POLYGONS+5)*36 = 0xFBDC
    060E57B8:    (Pbuffer)
        ポリゴン演算用頂点位置バッファ
        MAX_VERTICES*16 = 0x9C40
    060EF3F8:    (CommandBuf)
        マスターからスレーブへのコマンド受渡しバッファ
        MAX_POLYGONS*32-0x1B38 = 0xC408
    060FB800:    (TransList)
        ブランキング中の転送リクエスト用のDMAコントロールテーブル
        MAX_TRANSFER*3*4バイト = 0xF0
    060FB8F0:
        スタック領域(0x4310)

    060FFC00:
        システム変数領域(GBRレジスタは常にここを指している)
        0x400バイト
システム変数は以下に示すもので、Cプログラムからも同じ名称で読み出すことができる

    システム変数
    000:    (EventTop)    (EVENT *)    ; 先頭に登録されているイベント
    004:    (EventLast)    (EVENT *)    ; 末尾に登録されているイベント
    008:    (EventNow)    (EVENT *)    ; 実行中のイベント
    00C:    (EventCount)    (Uint16)    ; イベントの残数
    00E:    (WorkCount)    (Uint16)    ; ワークの残数
    010:    (MainMode)    (Uint8)        ; メインシーケンスモード
    011:    (SubMode)    (Uint8)        ; サブシーケンスモード
    012:    (SynchConst)    (Sint8)        ; ビデオ同期カウント
    013:    (SynchCount)    (Sint8)        ; ビデオ同期カウント
    014:    (UserFunction)    (void (*)())    ; ブランキング中に実行するユーザー関数
    018:    (TransCount)    (Uint16)    ; ブランキング中の転送エントリー数
    01A:    (TransRequest)    (Uint8)        ; ブランキング中の転送のリクエスト
    01B: (PauseFlag)    (Uint8)        ; スプライト、スクロールのポーズ用フラグ

     01C:    (mtptr)        (MATRIX *)    ; カレントマトリクスポインタ
    020:    (MatrixCount)    (Uint8)        ; マトリクスのネストカウント
    021:    (PrintColor)    (Uint8)        ; テキスト表示用カラーパレット
    022:    (IntCount)    (Uint16)    ; 割り込みカウント
    024:    (MsPbufPtr)    (Uint32 *)    ; 頂点座標演算バッファポインタ(Master)
    028:    (SlPbufPtr)    (Uint32 *)    ; 頂点座標演算バッファポインタ(Slave)
    02C:    (SpritePtr)    (Uint16 *)    ; スプライトデータ転送ポインタ
    030:    (MsSdataPtr)    (Uint16 *)    ; スプライトデータセットポインタ(Master)
    034:    (SlSdataPtr)    (Uint16 *)    ; スプライトデータセットポインタ(Master)
    038:    (ZbufPtr)    (void **)    ; Zバッファポインタ
    03C:    (FormTbl)    (TEXTURE *)    ; テクスチャデータテーブル
    040:    (SprbufBias)    (Uint32)    ; スプライトデータバッファ切り替え
    044:    (ComRdPtr)    (Uint32 *)    ; コマンドリードポインタ
    048:    (ComWrPtr)    (Uint32 *)    ; コマンドセットポインタ
    04C:    (MsLightVector)    (VECTOR)    ; 光源ベクトル(Master)
    058:    (SlLightVector)    (VECTOR)    ; 光源ベクトル(Master)
    064:    (ColorOffset)    (Uint8 *)    ; カラーオフセットテーブルポインタ
    068:    (MsScreenDist)    (FIXED)        ; スクリーン位置(Master)
    06C:    (SlScreenDist)    (FIXED)        ; スクリーン位置(Slave)
    070:    (MsZlimit)    (Sint16)    ; 表示リミットZ位置(Master)
    072:    (WindowNumber)    (Uint8)        ; ウィンドウ使用数
    073:    (WinUseFlag)    (Uint8)        ; ウィンドウ使用フラグ
    074:    (TotalPolygons)    (Uint16)    ; 演算ポリゴン数
    076:    (TotalVertices)    (Uint16)    ; 演算頂点数
    078:    (MsScreenLeft)    (Sint16)    ; スクリーン左位置
    07A:    (MsScreenTop)    (Sint16)    ; スクリーン上位置
    07C:    (MsScreenRight)    (Sint16)    ; スクリーン右位置
    07E:    (MsScreenBottom) (Sint16)    ; スクリーン下位置
    080:    (MsScreenSizeX)    (Uint16)    ; スクリーン横サイズ(Master)
    082:    (MsScreenSizeY)    (Uint16)    ; スクリーン縦サイズ(Master)
    084:    (MsWindowSizeX)    (Uint16)    ; ウィンドウサイズ(Master)
    086:    (MsWindowSizeY)    (Uint16)    ; ウィンドウサイズ(Master)
    088:    (MXPolygons)    (Uint16)    ; 最大ポリゴン数
    08A:    (MXVertices)    (Uint16)    ; 最大頂点数
    08C:    (FrameSizeX)    (Uint16)    ; フレームバッファサイズ
    08E:    (FrameSizeY)    (Uint16)    ; フレームバッファサイズ
    090:    (MsWinXAdder)    (Sint16)    ; ウィンドウチェック用加算データ(Master)
    092:    (MsWinYAdder)    (Sint16)    ; ウィンドウチェック用加算データ(Master)
    094:    (SlWinXAdder)    (Uint16)    ; ウィンドウチェック用加算デ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值