易码技术论坛

 找回密码
 加入易码
搜索
查看: 73009|回复: 2

[转帖]NC1020全部系统中断的响应[原创:SAILOR-HB ]

[复制链接]
发表于 2005-1-31 17:55:00 | 显示全部楼层
其原理对其他机型也是适用的
 楼主| 发表于 2005-1-31 18:14:00 | 显示全部楼层
以前NET似乎有人发过,好象没这么系统.
7187_4664_2892.bmp
 楼主| 发表于 2005-1-31 17:54:42 | 显示全部楼层 |阅读模式
今天感觉无聊,反汇编了一下NC1020的系统中断服务程序,得出以下结论:

(1) INT $0xyy型中断的响应

调用第x页码中 ($4000 + 2*yy) 所指向的程序

比如 INT $0302
   在 03 页码中,4000开始的数据为 60 EA 40 40 6F 40.......
   4000+2*02=4004, ($4004)=$6F,($4003)=$40
   所以 INT $0302 就是调用03页码的 $406F处的子程序.

i(2) INT $1xyy ~ INT $3xyy

此类中断,会先从 $05C4 中读出一个值,作为页码的 "基准0页",然后转移到偏移x页中执行 ($4000 + 2*yy) 所指向的程序.

此类中断一般用于应用程序中,系统在运行一个应用程序时(一般是大于8K的程序),会先将该程序的起始页码值置入 $045C,然后在程序中通过调用 INT $3xyy 来实现调用不同页码中的子程序.

例如英雄坛说,假定我的英雄坛说在第05页~08页码分布,在某处用到了INT $3008 (这个是我修改的英雄坛,尚未发表,所以大家的可能不会有 INT $3008 这个调用,这里只是为了说明问题).下面讲一下INT $3008的响应过程:
  A.在系统运行英雄坛说时,会自动将其所在的第一页码值(即05)放入$05C4中.
  B.如上面所说,INT $3008 就是执行"偏移0页"的某段程序,"偏移0页"这里就是相对于($05C4)页相对于即05页的偏移0页,(还是第05页),然后 $4000 + 2*$08=$4010,在英雄坛说的初页$4010处我写入了数据 A0 62,那么这个INT $3008就会调用第05页的 $62A0 处的程序.


(3) INT $4xyy ~ INT $7xyy

实际上根本就不存在此类中断,但如果你强行调用,系统也是会响应的。由于中断服务程序中有BUG,此类中断一般只会引起死机。强行调用时系统的响应过程如下:
  A.先从 $05C4 中读出一个值,作为页码的 "基准0页",将页码翻至偏移x页处.即 ($05C4) + x → ($00)
  B.调用 ($C000 + 2*yy) 处所指向的程序.这就是BUG所在.应该是调用 ( $4000 + 2*yy )处所指向的程序才对,与第 (2)种中断归为一类才对。
  
由于无此类中断,这里就不举例了。


(4) INT $8xyy ~ INT $Bxyy

此类中断在徐哥的6502编程大奥秘中已经作了说明,这里再简单说一下:

A. INT $XXYY中的XX为页码。翻到XX页。即 XX → ($00)
B. 调用 ($4000 + 2*yy) 处所指向的程序


(5) INT $Cxyy ~ INT $FEyy

此类中断,均等同于 INT $Cxyy
响应过程如下:
A. 将($0A)中置入x,即 x → ($0A)
B. 调用 ($C000 + 2*yy) 处所指向的程序

(6) INT $FFxx

此类中断是系统的内置音乐播放程序。音乐在后台播放。响应过程如下:

A. 检测电池电量,若低电,则返回主程序
B. 检测游戏音乐开关,若关,则返回主程序
C. 检测 xx 的值,若大于或等于 #$7D 则返回主程序
D. 从第 84 页 $B300 + 2*xx 中找出值,置入 ($AA), $B301 + 2*xx 中找出值,置入 ($AB).   即 84页:  ($B300 + 2*xx ) → ($AA) , ($B301 + 2*xx ) → ($AB)
E. 分别将 01 和 80 置入 ($04B5) 和 ($04B6)
F. JMP $E452

E452处的程序是控制几个不常用的内存(比如 $05,$20,$19,$5Bx等等)来实现发音的.具体程序还有待研究.我的估计是这些内存是系统中音乐电路几个控制端口的映射,就像任天堂的6527处理器内置了可编程音乐控制器一样可以很方便地演奏后台音乐,如此看来.............不言而喻了吧?!

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 01:13 , Processed in 0.010215 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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