易码技术论坛

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

[分享]TC1000 菜单项/信息框类“中断函数”详解

[复制链接]
发表于 2005-6-25 21:08:00 | 显示全部楼层
跟以前机型都一样的,只是,中断地址或参数地址有偏移~~呵呵
顶,好贴!分享万岁!
 楼主| 发表于 2005-7-14 19:38:00 | 显示全部楼层
先前太匆忙,有一些错误,是手误!!真的!
* (行数,值=$2^$行数,最大4行也就是$2^$4=$10)

应该是$2*$行数。
[文字类型]:分两种字形,有反显模式。
8x16字体:
$01(@00000001)
反显:
$81(@10000001)
8x08字体:
$10(@00010000)
反显:
$90(@10010000)

应该是,
[文字类型]:分两种字形,有反显模式。
8x16字体:
$02(@00000010)
反显:
$82(@10000010)
8x08字体:
$04(@00000100)
反显:
$84(@10000100)

 楼主| 发表于 2005-6-23 16:07:25 | 显示全部楼层 |阅读模式
[格式为星端阅读做了调整]
*******《 序言 》*******
  本人以前从来没有系统的整理过TC1000的内置的子程序,最近由于要做一些程序,应用系统自带的函数,会减轻许多工作量,也会和文曲星自带的程序的界面保持风格的一致。其实,文曲星的系统函数还是挺强的。
[我力求做到简单,全面。]
************************
一、菜单项/信息框类
  这类函数需要“参数表”,参数表是由一些程序需要的参数构成的一定的序列。一般是由寄存器X和Y(X-低位,Y-高位)来指定参数表的具体位置,再由程序依次去取,所以格式不能出错!有一些需要寄存器A的值,来控制模式。

【重要的符号定义】
1.*代表一个2位的16进制数
  (也就是单字节)
  例如:$FF。
2.[]中是一个16位的地址。
3.{}表明可以循环的部分。
4.<>中的是文字。
------------------------
1.系统菜单-INT $CB01

[参数表格式]
**{[地址][帮助]}{<菜单>*}

简介:
* (横向菜单:$02;纵向菜单:$01,有些资料是$09,其实一样)
* (菜单项个数)
[地址] (相应菜单的子程序跳转地址)
[帮助] (相应菜单的帮助文字地址—只是文字,不用写第一行的标题,结尾必须以2字节的$00结尾,单字节$00可起到换行的作用,每行文字必须一样长,不足用空格补齐)
<菜单> (菜单的文字) * (必须以$FF结尾)

实例:
+++++++++++++++++++++++++
main:
        ldx #<chanshubiao
        ldy #>chanshubiao
        int $cb01
exit:
        rts
chanshubia
        .DB $09,$04
        .DW exit,help,exit,help,exit,help,exit,help
        .DB "1.测试",$ff,"2.测试",$ff,"3.测试",$ff,"4.测试",$ff
help:
        .db "帮助信息!",$00,"换行演示!",$00,$00
+++++++++++++++++++++++++
  写到这里,我要提醒星迷们,你会发现这个程序,明明按了确认键,却不退出。是不是程序错了呢?其实,不是。聪明的朋友,第一个会想到。当程序遇到RTS结束时,没有退出,却返回了。这时按退出键就可返回到使用中断的地址的下一个指令地址,也就是RTS。这就是为什么叫做子程序的原因了!
------------------------
2.多功能信息框—INT $CA12
  寄存器A指明类型:$00时为信息框(不会停留);$01或$02时为带图标的是/否选择框,只是图标不一样,值会以ASC码的形式保存在寄存器A中;$03时为带边框的选择菜单,有两种样式。

[参数表格式]
*[信息]****[类型][地址]

简介:
* (偏移量:一般为$80,但是当寄存器A得值为$03时有$80或$82两种样式)
[信息] (文字所在的地址,结尾必须以2字节的$00结尾,单字节$00可起到换行的作用,每行文字必须一样长,不足用空格补齐。注:如果不美观,可以在文字前面加两个空格)
** (信息框左上角的坐标位置X,Y)
* (单行文字长度,只是到$00的地方的长度,最大$11个半角)
* (行数,值=$2^$行数,最大4行也就是$2^$4=$10)
[类型] (文字类型所在地址,看下面关于文字类型的简介)
[地址] (只在寄存器A为$03时才有用,子程序执行地址序列所在地址,看下面有关的简介)

=========================
[文字类型]:分两种字形,有反显模式。
8x16字体:
$01(@00000001)
反显:
$81(@10000001)
8x08字体:
$10(@00010000)
反显:
$90(@10010000)
=========================
[执行地址序列]:太简单了
$xxxx(第一项执行地址)
$xxxx(第二项……)
$xxxx……
  注意:同样这里是子程序,只不过当按下确认键时,返回的是调用中断时的下一指令地址,这也就是为什么叫做信息框的原因了。
=========================

实例:只演示一个,实现代边框的反显选择框。
+++++++++++++++++++++++++
main:
        LDA #$03
        LDX #<chanshubiao
        LDY #>chanshubiao
        INT $ca12
exit:
        RTS
chanshubia
        .db $82
        .dw l3
        .db $13 $10 $07 $02
        .dw l1,l2
l1:
        .db $01
l2:
        .dw exit,exit
l3:
        .db " 第一项",$00," 第二项",$00,$00
+++++++++++++++++++++++++
------------------------
3.横向等级条-INT $CA14

[参数表格式]
*{<简介>[地址]}

简介:
* (级别个数)
<简介> (级别简介文字,长度为$10,不够用$20补齐)
[地址] (相应级别的程序入口地址)

实例:
+++++++++++++++++++++++++
main:
        LDX #<chanshubiao
        LDY #>chanshubiao
        INT $ca14
exit:
        RTS
chanshubia
        .db $03
        .db "    第一等级    "
        .dw exit
        .db "    第二等级    "
        .dw exit
        .db "    第三等级    "
        .dw exit
+++++++++++++++++++++++++
************************
二、显存/文字缓冲区操作类

1.字符缓冲区刷到显存(屏幕)-INT $C719

[入参]
$0392 $0393 $03AF $03B0
$03B1 $03B2

前四个参数可以切换出4种不同的字体,分别是:
1>当$0392=$00,$0393=$01,$03AF=$FF,$03B0=FF时,显示8*16字体
2>当$0392=$01,$0393=$00,$03AF=$FF,$03B0=FF时,显示6*12小字体
3>当$0392=$00,$0393=$01,$03AF=$00,$03B0=00时,显示8*8小字,不支持中文
4>当$0392=$01,$0393=$00,$03AF=$00,$03B0=00时,显示6*6小字,不支持中文

注:$03B1和$03B2,是设定只刷新行或列用的。
------------------------
2.清除部分显存,不包括左右两边的图标-INT $C737
------------------------
3.清除全部显存,包括左右两边的图标-INT $C729
------------------------
4.清除文字缓冲区,但是保留显存内容-INT $C72A

※※※※继续中…※※※※
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-19 23:22 , Processed in 0.009573 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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