游戏机之家论坛•国内人气最旺的游戏机社区,国人的游戏机家园
设为首页收藏本站
五龙争霸

游戏机之家论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3591|回复: 5

转贴 浅谈游戏程序的分析与修改——玛莉机程序分析

  [复制链接]
发表于 2002-9-19 12:43:57 | 显示全部楼层 |阅读模式
浅谈游戏程序的分析与修改——玛莉机程序分析
* N# y' d8 g8 m6 @                                        常德8 k6 `+ Q0 f$ S& W! Q8 ~
    玛莉机台在国内游戏市场占有较大比重,其营业收入占整个游戏厅收入的50%-80%,近来开发其程序的厂商也愈来愈多,新品种层出不穷。目前在玛莉底板上所开发出的流行程序有玛莉II代、雪豹、三六豹、熊猫等,其功能调节难以适应各地用户的个别要求,对其进行再开发也是许多业界人士所关心的问题,为方便初学者自行修改,本文以玛莉一代为例简要介绍一下玛莉机的硬件及程序。4 y, K# W  }. ]: f! a

2 E' k( v1 C4 @. [' m# m一、硬件电路:玛莉板通常由1片8031CPU(中央处理器)、1片6116SRAM(随机存取器)、1片EPROM(程序存贮器)、1片8279(键盘输入及数码显示)、2片YM2149(伴音合成及LED显示)及一些74系列IC组成。
& Q, l0 a4 T( M! I+ v& V9 p    EPROM(V10)程序空间为0000-7FFFH;SRAM(V8),寻址空间为8000-87FFH;备用SRAM(V9)寻址空间为A000-A7FFH,V23(8279)的端口地址为B000及B001H,V16(YM2149)端口地址为9000及9001H,V14(YM2149)的端口地址为9002及9003H。
! B, x: b+ \. S: p5 Y
1 f" o- L) G2 E2 S二、程序分析0 \/ ], l( V. t5 }4 Z6 M
    0000H为主程序入口地址,000BH为T0中断入口地址,001BH为T1中断入口地址,由于它们的程序不大可以分别详细打印出来,见附表。- Y* F! j- d1 ~1 a
1、8031内部及RAM单元功能分配。; \% W# K* V, z$ g5 ^  A1 Q
    通过对程序的分析不难发现8031内部RAM中的20单元用于存放启动至退币键值,而22单元用于存放DIP调节开关状态值,30-3F用于单独处理稳中有降键,40-47则用于存贮各键押分值,48-4B用于存放LED输出状态值,56-59用于产生一组随机数据,60-65用于产生中断递减数据,7F存放投币比例。8 ]2 C$ z) r* F% o6 P) Z: O- C* ~5 p
2、SRAM重要单元功能分配' U; N; b* |! D- c
总押入:8220-8221) v( }7 I+ ~* \5 f/ J
总押中:8224-82253 D& Y) l0 ^  h! `! s3 S! ~* D
总比入:8228-82299 A! X$ F  r& q. A+ U9 z
总比中:822C-822D* B" Q0 `8 o/ r; ~' Y
积分:8240-8241
# f5 V7 R& o* V" M奖分:8243-8244- c/ r7 {# G& @9 N/ U- Y7 f) T
彩金:8249-824A
: u( S; p5 ^) w% F/ `0 f/ }( ]6 Y上次押分:8100-8107, f% p7 Z9 |. C9 X
本次押分:8000-80077 X, M- \) c1 d, ?. H$ Z6 Z
前8次比倍出牌:8090-8097
" O" Q$ Y  \/ a7 |7 _9 Y故障警报信息:82FE7 H% ?7 z2 y( l! |# n; B6 g' R5 ?
: C2 u+ q3 v0 a" u
3、重要子程序
& s/ ]( n- t& p: M; V$ YACALL D9:外部RAM数据传送到内部RAM
2 V3 h1 G  Z6 d. {ACALL D1:内部RAM数据清零' T7 x1 N! T1 M% x0 B
ACALL F2:内部数据相加
. f$ d8 x/ c4 @2 Q( L$ L' v6 dACALL E4:外部数据加到内部RAM中
. I% I4 L6 L/ E# r7 _$ RACALL FD:内部数据相减
* U; n9 O0 {( c  I0 K9 Y8 }0 VACALL 610:外部数据减1
$ S: D0 i+ S; b% g2 VACALL 630:外部数据加1
& A7 X) Q( b5 {# e% p* hLCALL 5C7:LED亮灭控制
' \6 f! ]3 K' e. K0 D/ M5 kLCALL C0E:发声) d3 O; n$ R& t' I% N- R
ACALL 181:显示CREDIT数值
" e. L" O0 W$ z& r' N# {) r5 XACALL 1E0:显示BONVS数值
2 F# d  C8 K5 M% mACALL 973:产生随机数据1 p5 J& o& p1 m/ ~7 i
LCALL 252:显示押分
/ _7 I5 ^0 {: Z8 `) ELCALL 26B:十六进制转换成十进制
) Q* p8 ]- l" u4 y# aLCALL 604:外部数据判零- v' I3 `& Y2 |( d0 q5 e
4、K0-K3状态检测7 {! B* J1 j2 n- i0 a/ `+ ?
    00A5-00AD段程序用于检测K0-K3按钮状态,先将扫描码#53数据送8279的B001寄存器,再将扫描到的按键信号从B000寄存器读出到ACC寄存器中,其D0-D3位状态则代表K0-K3状态,判断该值可控制程序转移到各功能段进行。
9 V/ U: c9 y/ |1 {5、数据显示方法
% V. }% Q5 u3 [2 p  M/ A- @    先将显示位置数据送B001端口(#90-9C分别表示苹果-比倍数码管的位置),再将要显示的数据由ACC送B000端口即可。例:清单5中的CD0-D0C程序段将故障信息显示到下排数码管上。
0 i$ J% c0 P4 G% {6、LED亮灭控制
0 r; ?$ D8 F+ |2 g! T; p3 @4 A    LED0-LED15控制:先送片选数据到9000端口(#0E选中LED0-LED7,#0F选中LED8-LED15),再将8个LED灯亮灭状态数据送9001端口。
# M3 u6 Y+ S1 J7 k    LED16-LED30的控制:先送片选数据到9002端口(#E选中LED16-LED23,#OF选中LED24-LED30),再将LED亮灭8位码数据送9003端口。0 s0 K5 t) ]6 j( J. e
7、程序中发声
) W$ J1 w% |2 NMOV A,#N
' y7 A* Z+ v$ V. O6 a5 a7 G$ OLCALL COE$ l. |: O, e, w2 `
合成编号为N的音乐段(由9000/9001完成)5 t  _% f. {, L& y
MOV A,#N
- I+ K7 v9 [$ O' d1 RLCALL BC4; ^+ _, Q, p! B1 S) U
合成编号为N的单音(由9002/9003完成)
7 s- ~# Y/ Q1 J( F% [) V#00-#08表示哆来咪法嗦啦西------[em24][em24][em24]
发表于 2009-8-17 22:01:35 | 显示全部楼层
好东西,顶
发表于 2009-8-18 23:42:36 | 显示全部楼层
大家看看,帮分析一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2011-8-15 07:49:41 | 显示全部楼层
顶楼主……
发表于 2015-7-21 07:33:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|游戏机之家论坛 ( 粤ICP备13040417号 )  点击这里和我联系

GMT+8, 2018-5-20 21:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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