步步高多媒体学生...吧 关注:110贴子:389
  • 9回复贴,共1
转载自软驱一号群的消息,


IP属地:河南来自Android客户端1楼2021-03-12 08:29回复
    Private Type gamheader '步步高GAM文件头长度=26字节
    filetype As String * 2 ' 必须="MY"
    filesize As Long 'gam文件的总字节长度=文件头+模块数*4+所有模块字节数(含模块头)
    blockcount As Integer '模块数量=prg模块数+1(chr模块)+1(点阵模块)+1(专用切BANK模块)
    headersize As Integer 'gam文件头的总字节,一般=$001A+4*模块数
    programflag As Integer '=00
    resetpaGe As Byte '初始内存页号,一般=$FE
    programtype As Byte '程序类型 0=GAM,1=EXC
    nesreset As Integer 'NES原程序reset入口
    memorypage As Byte '最少需要的内存页数=$FF-NES的PRG数+1,1PRG=$ff,2PRG=$fe ......
    displaymemorypage As Byte '最少需要的显存页数 软驱一号=4=32KB 98型=$20=256KB
    formore As Integer '待扩充功能,=0
    gamstart As Integer 'GAM程序入号,根据NES程序切页情况自行设定
    firstbank As Integer '第一个模块,仅用于动态加载模块程序 默认=0
    banksaddres As Integer '模块集中指针区地址,一般=$1A
    End Type


    IP属地:河南来自Android客户端2楼2021-03-12 08:30
    回复
      GAM文件头总长度=26+4*模块数


      IP属地:河南来自Android客户端3楼2021-03-12 08:30
      回复
        4字节模块指针=3字节的模块文件内存储地址+1字节的模块类型标识。所有模块都要在文件头中先声明指针。


        IP属地:河南来自Android客户端4楼2021-03-12 08:35
        回复
          之后是按模块存储的数据,每个模块数据前几个字节是模块头,比如prg模块头=0B FF 00 80 00 40.其中ff是指定内存页号,各prg段需指定不同的页号,范围是00-ff


          IP属地:河南来自Android客户端5楼2021-03-12 08:42
          回复
            NES转GAM的难点在于切BANK的处理,不同mapper的NES游戏需要采取不同的02模块程序,而且NES内的写端口指令需要寻找出来并准确地替换成跳转到02模块程序的指令


            IP属地:河南来自Android客户端6楼2021-03-12 08:44
            回复
              10是chr模块,没模块头。0A是游戏中文名点阵模块,7字节模块头,无此模块也能运行,仅供gamshell列表选择用。


              IP属地:河南来自Android客户端7楼2021-03-12 08:49
              回复
                02是不分页模块,5字节块头=02 00 59 00 01,其中0059代表地址$5900要求低于8000,0100代表大小=256字节。功能是按mapper类型切换显存和内存。


                IP属地:河南来自Android客户端8楼2021-03-12 08:56
                回复
                  V5


                  9楼2021-04-20 10:06
                  回复
                    步步高gam文件的mapper0游戏,一般使用了压缩chr模块。模块号为06.压缩方法是:1、重复字节用2字节表示,长度不大于128.例如09 00表示9个00.
                    2、不重复字节前加一个标志字节N,字节为$80至$FE,表示后面N-$80个字节直接使用不压缩。
                    3、尾部加$FF字节表示结尾。


                    IP属地:河南来自Android客户端10楼2022-12-03 13:20
                    回复