易码技术论坛

 找回密码
 加入易码
搜索
查看: 248123|回复: 5

求NC1020的部分系统中断的资料

[复制链接]
发表于 2006-6-23 17:21:00 | 显示全部楼层
NC1020全部系统中断的响应
  SAILOR-HB 
今天感觉无聊,反汇编了一下NC1020的系统中断服务程序,得出以下结论:

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

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

比如 INT $0302
   在 03 页码中,4000开始的数据为 60 EA 40 40 6F 40.......
   4000+2*01=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处理器内置了可编程音乐控制器一样可以很方便地演奏后台音乐,如此看来.............不言而喻了吧?!


注:本人用的文曲星是第二个版本的,其它版本的也只是地址不同而已,原理是相同的。

From:http://wqx.4irc.com/bbs/viewthread.php?fpage=1&tid=101
 楼主| 发表于 2006-6-25 09:33:00 | 显示全部楼层
谢谢,但是我没有nc1020,我是在2600上看的,所以还是请说一下INT 920x这几个的作用。
发表于 2006-7-14 02:16:00 | 显示全部楼层
NC3000系统中断又是如何响应的呢?
发表于 2006-7-14 22:00:00 | 显示全部楼层
可以类比的,基本上是一样啊!!


[em01][em01]
发表于 2006-11-15 19:11:47 | 显示全部楼层
(转)1020的函数:

<1>:INT$890A
获取系统序列号并读到$1000-$1003

<2>:INT$8902
显示系统序列号及厂商
<3>:INT$021A
检测系统电力,返回:寄存器A=0充足 <>0不足

<4>:JSR$CC23仅用于NC1020第一版内核)CRC校验子程序,范围设定1,D2,80,81

<4>INT$8910
将文本画面读入$1000开始的地址

<5>INT$C008
获得按键停顿,所按键值读入寄存器A中

<6>INT$8A3B
调用系统密码,若执行后Carry位=1说明无密码或输入的密码已通过验证

<7>:INT$C001
重新启动或RESET系统
参数:0460=A5:重开机
0460<>A5:RESET
<8>:INT$8A15
将文字缓存中的文字显示到屏幕
参数:
$0402/$0403/$042D/$042E:切换4种字体
$0430:刷新的行(可实现大小字同时显示)

<9>:INT$8A2E
清空屏幕和文字缓冲区
<10>:INT$C312
系统信息框
参数:X,Y:参数表地址
A:类型

<11>:INT$C205
系统菜单1

<12>:INT$C20F
系统菜单2

<13>:INT$C314
等级棒

<14>:INT$C30E
画圆
参数043F,$0440:圆心
$0442:半径

<15>:INT$C30F
画椭圆

<16>:INT$C30A
画方块

<17>:INT$C310
画填充圆

<18>INT$C311
画填充椭圆

<19>:INT$C30B
画线条

<20>:INT$C30C
画填充方块

<21>:INT$C40D
调用系统DEBUG

<22>:INT$C209
输入法

<23>:JSR$E917
读取闪存
参数:C8,C9:地址
05B4:页
Y=#$00

<23>:INT$8903
显示文本开机画面

<24>:INT$932C
显示闪存剩余容量

<25>:INT$8904
系统硬件检测

<26>:INT$E917
GMUD动画

<27>:INT$8807
正在查找

<28>:INT$8808
没有找到

<29>:JSR$E012
发出"哔"的一声

<30>:INT$8901
大量文本输入
参数80,$81,$82,$83编辑范围

<31>:INT$9E1F
乘法
参数:A,X相乘,结果放A

<32>:INT$9E22
除法
参数:X,A相除.A为得数,X为余数

<33>:INT$FFXX
播放系统音乐

<34>:INT$8A26
设光标位置
参数:X,Y:位置

<35>:INT$8A30
设右边滚动条
参数80,$81:总长
$82,$83:当前长

<36>:INT$8A31
显示右上液晶数字
参数:$80,$81:数字

<37>:INT$8E08
进度条
参数:$88,$89:总长
$86,$87:有它用 $83=0:百分比显示
=1数字显示

<39>:INT$8A35
数字转ASCII码
参数:$80,$81

<40>:INT$9331
文件错误显示
参数:$1215

<41>:INT$9301
创建文件或目录
参数:
$121C-122C:文件名,不足补20
$121A:文件为F8或F9,目录为F0
$121B:=FB:隐藏目录或文件 =F7:只读目录或文件 =FF或=DF:正常
$1219:目录=02,文件=61
$122F-1231:=FF
返回:Carry=0:创建失败
<42>:INT$9302
打开文件
参数:$1214=01:For Write
=00:For Read
返回:Carry=1:文件不存在

<43>:INT$9305
写入文件
参数:$120D,$120E:欲写入数据开始地址
$120F,$1210:文件大小
<44>:INT$9307:关闭文件

<45>:INT$9303:追加数据
参数:$1211,$1212:追加开始位置

<46>:INT$9304
读取文件
参数:$120D,$120E:数据读入开始地址
$120F,$1210:每次读出长度

<47>INT$9308
查看目录是否存在,存在则进入
参数:$121C-$122C:目录名,不足补20
返回:Carry=0:存在

<48>:INT$932D
进入根目录

<49>:INT$940F
打开红外通讯口

<50>:INT$C20D
显示帮助
参数:$C8,$C9:帮助文字地址

<51>:INT$C023
格式化闪存

<52>:INT$890D
写入密码
参数:$1000-$103C:密文

<53>:INT$0201
返回上级中断系统

<54>:INT$0307
(仅用于QI -QI版内核)
系统工具集

<55>:INT$8A01
科学计算器

<56>:INT$8B10
内核升级
参数:$1700-$1704:通讯方式(红外或串口)

<57>:INT$9901
英文单词发音(详见汇编版)

<58>:JSR$E02A
延时
参数:X:时间

<59>INT$C309:发送图片到屏幕
参数:$92,$93:图片数据开始地址

<60>:INT$C303
乘法,同INT$931F

<61>:INT$C007
按键停顿,同INT$C008

<62>:JSR$E02D
延时
参数:Y:时间

<63>:JSR$E05A
按键->执行地址
参数:$80,$81:参数表地址
格式:key1,key2....keyn,run1,run2..runn
 楼主| 发表于 2006-6-23 13:13:46 | 显示全部楼层 |阅读模式
我在GGV上找到个BIN软件说可以在PC2300上创建8K以内的文本文件(确实在PC2300的下载区里!),但试过了,不能用。倒看起来比较像NC1020N用的,于是我跟踪了下,卡住了。

INT 930X系列是什么?

这个BIN在这里:http://www.ggv.com.cn/newdown/detail.php?id=36034&wqxtype=pc2300
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-20 05:11 , Processed in 0.014186 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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