//输入法
实现输入汉字,字符,符号等
中断调用:INT $C209
入口参数:
①寄存器X放参数表地址低8位
寄存器Y放参数表地址高8位
②设置光标类型
设置地址 $0431
(0431) = 00 闪烁粗光标
其他自己试试就知道了
③设置最右下角显示的两个汉字
设置地址 $053A
(053A) = 00 显示"姓名"
(053A) = 01 显示"备注"
(053A) = 02 显示"课程"
(053A) = 03 显示"便笺"
(053A) = 04 显示"纪念"
(053A) = 05 显示"行程"
(053A) = 06 显示"定时"
(053A) = 07 显示"帐本"
(053A) = 08 显示"储蓄"
(053A) = 09 显示"个人"
(053A) = 0A 显示"邮编"
(053A) = 0B 显示"生字"
(053A) = 0C 显示"中文"
(053A) = 0D 显示"要事"
(053A) = 0E 显示"笔记"
(053A) = 0F 显示"查询"
(053A) = 10 显示"开机"
(053A) = 11 显示"汉英"
.....
其他自己试试
参数表定义:
偏移 00: 光标位置 (00-$63)
01: 允许输入最大字节数
02: 20
03: 帮助内容开始地址低8位
04: 帮助内容开始地址高8位
这里有个问题,用户输入后,如何获得用户输入的信息呢?由于输入的信息会在屏幕上显示
那么我们只要把对应屏幕RAM地址内容保存到另外一段地址就可以了
我举个例子
光标位置 00
最大允许输入20个字符,即10个汉字
输入的信息保存在地址3000后
输入的字节数保存在地址3100
1.我们 先做帮助
从地址2000开始
输入法输入 "输入法帮助",后面用 E C命令紧接输入0000
2.然后我们做参数表
从地址2010开始
E C 2010,输入 00 14 20 00 20
3.实现主程序,从地址2018开始
A 2018
2018: LDA #$00 ;设置光标类型为正常
201A: STA $0431
201D: LDA #$0C ;最右下角显示"中文"
201F: STA $053A
2022: INT $8A2E ;清屏
2025: LDX #$10 ;设置参数表地址
2027: LDY #$20
2029: INT $C209 ;调用输入法中断
202C: CMP #$1B ;判断用户是否按 跳出 键
202E: BEQ $2041 ;如果按了,说明用户取消了输入,那么程序结束
2030: LDX #$00 ;开始读输入的数据,这里X的内容初始化为00
2032: LDA $02C0,X ;因为光标位置是00,所以从地址02C0开始读,这是屏幕RAM首地址
2035: BEQ $203E ;判断读取的内容是不是 00,如果是说明信息已经读完了
2037: STA $3000,X ;读取信息送地址 3000+(X)
203A: INX ;寄存器X内容加1,读取信息下一字节
203B: JMP $2032
203E: STX $3100 ;用户输入的字节数送地址3100
2041: RTS