西湖绿雨 发表于 2007-3-9 20:22:41

我来坐沙发,顶你一个

DenZh-TP 发表于 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

就这样了

POTO 发表于 2007-4-9 14:34:59

对!cb01,我记错了,谢谢ls更正!

ooooo 发表于 2007-4-14 16:02:19

我也顶一下吧!!!

POTO 发表于 2007-7-24 23:28:57

修正了一些错误!

西湖绿雨 发表于 2007-8-12 12:33:39

这个要顶

POTO 发表于 2007-3-8 12:38:16

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

###特别说明###
   本文是“原创”+“借签”,“原创”是指本文的部分内容为本人自己研究出来的,“借签”就是指我在写本文时参考了其它文章,并校正了一些错误,因为我在读一些讲系统中断的文章时发现其中有一些错误,照着写程序会导致运行出错,再加上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

HenryHu 发表于 2007-11-24 20:49:31

顶! 好久没来,来了就有这么有用的东西……
这两天研究6502,调用中断总是出问题…… 谢谢资料……

CZJ1906 发表于 2007-12-22 18:06:45

顶啊~~~~~~~~~~~~~~

:lol
页: [1]
查看完整版本: [原创+借签]TC1000(s)系统函数总结+部分详解(07/07/24更新)