找回密码
 注册
搜索
查看: 2693|回复: 3

[L2] MD版 梦幻模拟战2 解压入口程序解析

[复制链接]
发表于 2010-8-2 20:53 | 显示全部楼层 |阅读模式
原文:http://www.snowemu.cn/bbs/viewthread.php?tid=3169


目前L2的压缩方法有几种,各种源程序如下:

ROM:000099B2                 movem.l d0-d2/a0-a1,-(sp)
ROM:000099B6                 move.w  d0,d2        ;比如说,艾尔文头像,压缩指针编码80E7
ROM:000099B8                 bpl.s   loc_99C2
ROM:000099BA                 move.l  a1,d1           ; 解压地址,比如头像DMA显存地址是VDP D300
ROM:000099BC                 lea     ($FF1000).l,a1
ROM:000099C2
ROM:000099C2 loc_99C2:                               ; CODE XREF: sub_99B2+6j
ROM:000099C2                 andi.w  #$7FFF,d0
ROM:000099C6                 bsr.s   sub_9A0E        ; 根据编码换算出压缩数据地址
ROM:000099C8                 bsr.s   sub_99FA        ; 解压程序入口
ROM:000099CA                 tst.w   d2
ROM:000099CC                 bpl.s   loc_99EA
ROM:000099CE                 movea.l ($FFFF81C4).w,a1
ROM:000099D2                 move.w  #$FFF9,(a1)+
ROM:000099D6                 move.w  d1,(a1)+
ROM:000099D8                 move.l  #$FF1000,(a1)+
ROM:000099DE                 lsr.w   #1,d0
ROM:000099E0                 move.w  d0,(a1)+
ROM:000099E2                 move.l  a1,($FFFF81C4).w
ROM:000099E6                 bsr.w   sub_8A6C
ROM:000099EA loc_99EA:
ROM:000099EA                 movem.l (sp)+,d0-d2/a0-a1
ROM:000099EE                 rts


ROM:00009A0E                 move.w  d0,-(sp)     ;比如说,艾尔文头像,压缩指针编码E7,凯恩F7
ROM:00009A10                 movea.l #off_B0000,a0   压缩数据地址指针表
ROM:00009A16                 lsl.w   #2,d0
ROM:00009A18                 movea.l (a0,d0.w),a0
ROM:00009A1C                 move.w  (sp)+,d0
ROM:00009A1E                 rts

解压总程序入口:
ROM:000099FA                 move.l  a0,-(sp)      ;a0为压缩数据地址
ROM:000099FC                 moveq   #0,d0
ROM:000099FE                 move.b  (a0)+,d0        ; 读第一个数据,判断解压类型,3为战斗动画解压类型
ROM:000099FE                                         ; 2为头像等其他
ROM:00009A00                 add.w   d0,d0
ROM:00009A02                 move.w  word_99F0(pc,d0.w),d0
ROM:00009A06                 jsr     word_99F0(pc,d0.w)
ROM:00009A0A                 movea.l (sp)+,a0
ROM:00009A0C                 rts

头像解压入口地址类型是2,也就是9C10

希望对那些想制作L2加强/修改版的朋友有帮助


BY ken_tse
发表于 2010-8-2 23:49 | 显示全部楼层
除了Ken和机关这里还有谁会M68k汇编
发表于 2010-8-3 08:20 | 显示全部楼层
另外的一段3屬程序是:

ROM:00009DFE ; ---------------------------------------------------------------------------
ROM:00009DFE                 movem.l d1-a2,-(sp)
ROM:00009E02                 movea.l a1,a2
ROM:00009E04                 move.b  (a0)+,d7
ROM:00009E06                 lsl.w   #8,d7
ROM:00009E08                 move.b  (a0)+,d7
ROM:00009E0A                 move.w  d7,-(sp)
ROM:00009E0C                 lea     ($FF0000).l,a2
ROM:00009E12                 move.w  #$FF,d6 ; <suspicious>
ROM:00009E16                 move.l  #$20202020,d3
ROM:00009E16
ROM:00009E1C
ROM:00009E1C loc_9E1C:                               ; CODE XREF: ROM:00009E24↓j
ROM:00009E1C                 move.l  d3,(a2)+
ROM:00009E1E                 move.l  d3,(a2)+
ROM:00009E20                 move.l  d3,(a2)+
ROM:00009E22                 move.l  d3,(a2)+
ROM:00009E24                 dbf     d6,loc_9E1C
ROM:00009E24
ROM:00009E28                 movea.l a1,a2
ROM:00009E2A                 lea     ($FF0000).l,a1
ROM:00009E30                 move.w  #$FEE,d6 ; <suspicious>
ROM:00009E34                 moveq   #0,d3
ROM:00009E34
ROM:00009E36
ROM:00009E36 loc_9E36:                               ; CODE XREF: ROM:00009E68↓j
ROM:00009E36                                         ; ROM:00009EB8↓j
ROM:00009E36                 move.b  (a0)+,d5
ROM:00009E38                 moveq   #7,d4
ROM:00009E38
ROM:00009E3A
ROM:00009E3A loc_9E3A:                               ; CODE XREF: ROM:00009E64↓j
ROM:00009E3A                                         ; ROM:00009EB4↓j
ROM:00009E3A                 lsr.b   #1,d5
ROM:00009E3C                 bcc.s   loc_9E6A
ROM:00009E3C
ROM:00009E3E                 moveq   #0,d0
ROM:00009E40                 move.b  (a0)+,d0
ROM:00009E42                 move.b  d0,(a1,d6.w)
ROM:00009E46                 addq.w  #1,d3
ROM:00009E48                 swap    d3
ROM:00009E4A                 btst    #$10,d3
ROM:00009E4E                 bne.s   loc_9E56
ROM:00009E4E
ROM:00009E50                 lsl.w   #8,d3
ROM:00009E52                 or.w    d3,d0
ROM:00009E54                 move.w  d0,(a2)+
ROM:00009E54
ROM:00009E56
ROM:00009E56 loc_9E56:                               ; CODE XREF: ROM:00009E4E↑j
ROM:00009E56                 move.b  d0,d3
ROM:00009E58                 swap    d3
ROM:00009E5A                 addq.w  #1,d6
ROM:00009E5C                 andi.w  #$FFF,d6 ; <suspicious>
ROM:00009E60                 subq.w  #1,d7
ROM:00009E62                 beq.s   loc_9EBC
ROM:00009E62
ROM:00009E64                 dbf     d4,loc_9E3A
ROM:00009E64
ROM:00009E68                 bra.s   loc_9E36
ROM:00009E68
ROM:00009E6A ; ---------------------------------------------------------------------------
发表于 2010-8-3 08:29 | 显示全部楼层
天文数值,艾
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|虎纹猫家园

GMT+8, 2024-5-10 11:37 , Processed in 0.017384 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表