易码技术论坛

 找回密码
 加入易码
搜索
查看: 324064|回复: 8

[原创+借签]TC1000(s)系统函数总结+部分详解(07/07/24更新)

[复制链接]
发表于 2007-3-9 20:22:41 | 显示全部楼层
我来坐沙发,顶你一个
发表于 2007-4-9 12:24:21 | 显示全部楼层
㈡系统菜单/多功能信息框
  这类程序都需要读取参数表,先说一下参数表吧,参数表就是由一定序列的十六进制数组成,用X、Y寄存器来指定其所在地址,有些程序还要使用到寄存器A。
系统菜单:int $cb03
X Y中放参数表所在地址的低八位和高八位。
参数表:
偏移  代表含意
00  类型,共两种.$01为横向菜单(systools的那种),$02为纵向菜单(产品信息的那种)
01  菜单项个数
02  第一项执行代码所在地址的低八位
03  ……高八位
04  第一个菜单项的帮助内容所在地址的低八位
05  ……高八位
06  第二项执行地址低八位
07  ……高八位
08  第二项帮助地址低八位
09  (依次类推)
紧接着是:
  第一项的名称
  ff
  第二项的名称
……


红色的那个中断是错的
是查询画面的中断
  正确的是int $cb01

就这样了
 楼主| 发表于 2007-4-9 14:34:59 | 显示全部楼层
对!cb01,我记错了,谢谢ls更正!
发表于 2007-4-14 16:02:19 | 显示全部楼层
我也顶一下吧!!!
 楼主| 发表于 2007-7-24 23:28:57 | 显示全部楼层
修正了一些错误!
发表于 2007-8-12 12:33:39 | 显示全部楼层
这个要顶
 楼主| 发表于 2007-3-8 12:38:16 | 显示全部楼层 |阅读模式
###特别说明###
   本文是“原创”+“借签”,“原创”是指本文的部分内容为本人自己研究出来的,“借签”就是指我在写本文时参考了其它文章,并校正了一些错误,因为我在读一些讲系统中断的文章时发现其中有一些错误,照着写程序会导致运行出错,再加上1000的汇编资料不集中,就决定把资料整理一下,写一篇比较详细的文章,供大家参考。

###阅读导航###
-----㈠文字显示-----(详解)
-----㈡系统菜单/多功能信息框-----(详解)
-----㈢图形中断-----(详解)
-----㈣文件操作-----
-----㈤常用系统地址/中断-----


###正文###
㈠文字显示

将字符显示到屏幕:int $c719
字符缓存地址: $02C0 (具体大小跟字体的大小有关)
字体设定:
$0392=0  $0393=1  $03af=$03b0=ff - 显示8*16的大字体.
$0392=1  $0393=0  $03af=$03b0=ff - 显示6*12的小字体.
$0392=0  $0393=1  $03af=$03b0=0 - 显示8*8的字体.
$0392=1 $0393=0  $03af=$03b0=0 - 显示6*6字体
注意:在8*8和6*6字体下将无法显示中文.
另外,设定$03b1和03b2可以只刷新行或列.

清除全部显存:int $c729 (包括两边图标)
清除部分显存:int $c737
清除文字缓存:int $c72a (保留显存内容)

;//示例//
PRINT: .DB "你好" ;这是要显示的内容
MAIN:
    INT $C72A ;清屏
    LDX #$04 ;显示的文字共4字节
SEND: LDA PRINT - 1,X
    STA $02BF,X ;发送到文字缓存
    DEX
    BNE SEND
    INT $C719 ;显示
    INT $C006 ;按键停顿(=BASIC的INKEY$)
    RTS

㈡系统菜单/多功能信息框
  这类程序都需要读取参数表,先说一下参数表吧,参数表就是由一定序列的十六进制数组成,用X、Y寄存器来指定其所在地址,有些程序还要使用到寄存器A。
系统菜单:int $cb01
X Y中放参数表所在地址的低八位和高八位。
参数表:
偏移   代表含意
00    类型,共两种.$01为横向菜单(systools的那种),$02为纵向菜单(产品信息的那种)
01    菜单项个数
02    第一项执行代码所在地址的低八位
03    ……高八位
04    第一个菜单项的帮助内容所在地址的低八位
05    ……高八位
06    第二项执行地址低八位
07    ……高八位
08    第二项帮助地址低八位
09   (依次类推)
紧接着是:
    第一项的名称
    ff
    第二项的名称
……
注意:菜单项名称结尾要加FF,帮助文字结尾要加两字节的00,单字节00可以起换行作用,而且每行文字要一样长,不足的用空格补齐。

举例:
一个纵向菜单,显示两项
mgr: .DB "演示1",$FFmgr2: .DB "演示2",$FF
mgr: .DB "演示1",$FF
mgr2: .DB "演示2",$FF,$FF
canshubiao:
   .DB $01,$02 ;纵向,两项
   .DW run,help,run,help
   .DW mgr1,mgr2
MAIN: LDX #<canshubiao
LDY #>canshubiao
INT $CB03
RTS
run: RTS
help: .DB "这是帮助",$00,$00

多功能信息框:int $ca12
寄存器a中放信息框类型。
A=00  显示文字信息框,不会自动产生按键停顿
A=01  弹出式对话框,图标?
A=02  弹出式对话框,图标!
A=03  菜单选择框(有两种样式)
注意:#$03和#$00-#$02的参数表略有不同,下文有说明,当A=01或02时,int$ca12后用户的选择在a中,比如:如果A=#$79,则说明选择了“是”,不等于则说明选择了“否”。
参数表:
当寄存器A中值为#$00-#$02时
偏移  含意
00   固定标志$80(如果A=3,这里就不是固定标志了。$81:无线按扭,五笔练习中的那种  $82:光棒菜单,游戏华容道进入时的那种选择框
01   所要显示文字信息地址的低八位
02   ……高八位(文字要以00结尾或换行)
03   信息框所在屏幕的X轴坐标
04   ……Y轴坐标
05   文字的长度
06   信息框的宽度
07   文字状态
08、09 文字状态所在地址的低八位和高八位
当寄存器A中值为03时
前六项和前面所说的参数表相同。
偏移   含意
07、08  文字状态所在地址的低八位和高八位
09、10  参单项执行所在地址的低八位和高八位
11    文字状态
12、13  菜单第一项执行代码所在地址的低八位和高八位
14、15  第二项的执行代码所在地址的低八位和高八位
……依次类推
示例:
在屏幕上显示一个文字信息框"Hello World"
mgr: .DB "Hello World",$00,$00
canshubiao: .DB $80
.DW mgr
.DB $0A,$0A,$0B,$04
.DW font
font: .DB $02
MAIN: LDX #<canshubiao
LDY #>canshubiao
LDA #$00
INT $CA12
INT $C006 ;INKEY$
RTS

等级棒:INT $CA14
参数表:(在一些教程里把这个表列错了,大家注意一下)
* 级别个数
* 第一级文字信息所在地
* 第n 级文字信息所在地址
* 第一级的执行地址
* 第一级帮助信息地址
* 第二级执行地址
* 第二级帮助信息地址
…………
举例:
一个有三级的等级帮
mgr1: .DB "    第一级      "
mgr2: .DB "    第二级      "
mgr3: .DB "    第三级      "
help: .DB "这是帮助",$00,$00
run: RTS
canshubiao:
    .DB $03
    .DW mgr1,mgr2,mgr3
    .DW run,help,run,help,run,help
MAIN: LDX #<canshubiao
    LDY #>canshubiao
    INT $CA14
    RTS

输入法:int $cb05
中文提示类型:$044a
光标类型:$03b3
参数表:
00  光标位置
01  最大输入字数
02  类型
03、04  帮助地址

系统输入法:int $cb03 (和上面说的有所不同)


㈢图形中断

显示图片
有两种方法:
⒈直接把图片数据发送到图形缓存。
⒉使用系统中断,以下就来详细讲解一下这种方法。

填充作图:int $ca0d
使用这个中断可以把指定的图片数据显示到屏幕,$92和$93中放图片数据所在地址的低八位和高八位,寄存器X、Y用来设定图片所要显示在LCD上的X、Y坐标。
注意:图片必须是DAT格式,而且图片的前两个字节为图片的尺寸,比如一张160*80的图片,前两个字节应为A0 50

示例:
在屏幕上显示一张160*80的图片,图片数据放在$5000处
MAIN: LDA #$00
STA $92
LDA #$50
STA $93
LDX #$00
LDY #$00 ;从屏幕的0,0处开始做图
INT $CA0D
INT $C006
RTS

㈣文件操柞
⒈目录操作

建立目录:int $050b
切换工作目录:int $050d (目录名要放在$0822)
删除目录:int $050f
⒉文件操作

打开文件:int $0515
文件名:$0822
打开方式:$085e
当$085e的值为:
$70  新建
$80  读取
$81  追加
属性:$085F $0860
当值为EFEF时,文件属性为RWX
文件操作失败标记:$0861  
当$0861<>02说明文件打开失败!

向已打开的文件中写数据:int $0518
数据大小:085b 085c
数据地址:$e0 $e1

读文件:int $0516
必需先用int $0515打开文件

删除文件:$050e (文件名:$0822)

关闭文件:int $0517

*文件信息*

目录的inode:$0867 $0868
文件的inode:$0869 $086a
文件属性:$086b $086c
文件创建日期:$086e
文件修改日期:$0871
文件占用nand块数:$0877
当文件小于16k时有效
文件占用的第一块:$087b
……第二块:$087d
……第三块:$087f
……最后一块:$0881

㈤NOR、NAND操作

测试超级块:$0501
更新物理区/逻辑区映射表:$0502
读取一页nand(物理,不做ecc):$0503
读取一页nand(物理,做ecc):$0504

读取nand(逻辑):$0505
nand块:$081d $081e
nand偏移:$081f $0820
大小:$0967 $0968
开始地址:$f0 $f1

读取一页nand(逻辑):$0506
快速逻缉读NAND:0529(操作地址同逻辑读NAND)
获取NAND的厂商和设备号:$052a
读取1字节nor:$0507
读取多字节nor:$0508

㈥其它常用中断

_WriteIndexA =$0519 ;更改文件读写指针位置
_ReadInodeA =$051a ;读inode
_ReadInodeB =$051b ;读一个inode
_ClearUpA =$051c ;空间整理_释放已删除空间
_ClearUpB =$051d ;空间整理_删除无用的分配表信息
_StartUpA =$051e ;重启时空间整理A
_StartUpB =$051f ;重启时空间整理B

$0524 ;格式化闪存用户区并重置文件系统(慎用格式化)
_WriteIndexB =$0527 ;更改文件读写指针
_ExplorerA =$0528 ;资源管理器1
_MappedA =$052b ;处理物理区/逻辑区映射表
_MappedB =$052c ;同上
_MappedC =$052d ;同上
_ReadMax64k =$052e ;若指定文件>64kb,则读出其所占的块到$c000
_ReadExtent =$052f ;获取文件长度

_Inkey =$c006 ;程序暂停,等待按键响应,取键值

_Int2Asc =$c733 ;把数字转化成ASC II码
_Chufa =$ca02 ;除法
_MultiPly =$ca03 ;乘法
_Draw =$ca04 ;画点
_JudgePoint =$ca05 ;判断点
_BoxA =$ca0a ;非填充矩形
_BoxB =$ca0c ;填充矩形
_BoxC =$ca06 ;从屏幕0,0开始作矩形,不填充
_BoxD =$ca07 ;从屏幕0,0开始作填充矩形
_Line =$ca0b ;画直线
_LineC =$ca08 ;从屏幕左端往屏幕上端作线
_CircleA =$ca0e ;画圆,非填充
_CircleB =$ca10 ;画圆,填充
_EllipseA =$ca0f ;画椭圆,非填充
_EllipseB =$ca11 ;画椭圆,填充
_FillGraphA =$ca09 ;填充作图
_FillGraphB =$ca0d ;填充作图

_NowFind =$ca16 ;显示正在查找
_NotFind =$ca17 ;显示没有找到

                               by POTO
发表于 2007-11-24 20:49:31 | 显示全部楼层
顶! 好久没来,来了就有这么有用的东西……
这两天研究6502,调用中断总是出问题…… 谢谢资料……
发表于 2007-12-22 18:06:45 | 显示全部楼层
顶啊~~~~~~~~~~~~~~

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

本版积分规则

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

GMT+8, 2024-3-28 16:42 , Processed in 0.009449 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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