易码技术论坛

 找回密码
 加入易码
搜索
查看: 118786|回复: 0

[转帖]cc800/pc1000/pc1000a系统函数

[复制链接]
发表于 2004-8-29 20:01:59 | 显示全部楼层 |阅读模式
转自原wqxnet

E006:功能把二进制转换为十进制(入口参数:A, 输出参数:Y,A)
如:LDA#$20,JSR$E006,STY$02C0,STA$02C1,JSR$E129.

E009:可以RESET文曲星

E00C:关闭文曲星。无参数。

E00F:可以play ROM中的音乐和自己编的音乐(入口参数:$B0,$B1,$B4,$B5)
我们主要用它PLAY自己编的音乐,PLAY游戏音乐可以用BRK$FFXX,或JSR$E06F
如:LDA#$80,STA$B0,LDA#$01,STA$B1,LDA#$7D,STA$B4,LDA#$84,STA$B5,JSR$E00F.
以上程序实现的功能就是BRK$FF01.

E012:结束play

E01B:嘀鸣一声

E01E:按键提示音

E021:功能是得到英文字符8*16的点阵数据。(入口参数:A, 输出参数:$0280~$028F)
如:如让"a"显示在屏幕的2,2处,则
LDA#$61,JSR$E021,LDA#$02,STA$83,STA$85,JSR$E0F3.

E024:功能是得到8*8字符的点阵数据。(入口参数:A, 输出参数:$0280~$0287)
如:如让"a"显示在屏幕的2,2处,则
LDA#$61,JSR$E024,LDA#$02,STA$83,STA$85,JSR$E0ED.

E027:机器码执行速度为慢速

E02A:机器码执行速度为快速

E02D:机器码执行速度为中速

E030:不推荐大家使用

E033:等待时间(参数:X)如:LDX#$50,JSR$E033

E036:等待一秒钟

E039:等待160毫秒

E03C:判断A累加器中的是否为数字
如为数字则标志位C=1, 如不为数字则标志位C=0
如:LDA$2000,JSR$E03C,BCS$3100,RTS

E042:内置DEBUG,E213也是内置DEBUG

E05D和E060:功能基本相似,建议大家用E060
如果用E05D判断按键的话,当按键是1B(跳出)时,不是接着运行E05D后面的程序,而是回到前面一个JSR后继续运行
如:JSR$E09C,TAX,LDY#$05,LDA#$00,STA$80,LDA#$30,STA#$81,JSR$E060,RTS
3000:616263646500310032003300340035
则当按键是"a"时,跳转到$3100
则当按键是"b"时,跳转到$3200
则当按键是"c"时,跳转到$3300
则当按键是"d"时,跳转到$3400
则当按键是"e"时,跳转到$3500

E06F:play游戏音乐
如:LDA#$01,STA$C0,JSR$E06F

E07E:显示菜单。入口参数:X,Y
如:LDX#$00,LDY#$30,JSR$E07E
3000:090300300033003100330032003364FF65FF66FFFF
3300:61620063640000
则选择第一个菜单时跳到$3000,
则选择第一个菜单时跳到$3100,
则选择第一个菜单时跳到$3200,

E08A:INPUT字符(入口参数:$0454,$04e8,$04e9,X,Y)
如:LDA#$02,STA$04E9,LDA#$15,STA$04E8,LDA#$00,STA$0454,LDX#$00,LDY#$30,JSR$E08A
3000:0006200031
3100:616263640000

E08D:INPUT字符(入口参数:$0454,$04e8,$04e9,$058E,$058F,$0590,$8A)
功能和E08A基本相同
如:LDA#$02,STA$04E9,LDA#$15,STA$04E8,LDA#$00,STA$0454,LDX#$00,STX$058E,STX$0589,LDY#$00,STY$8A,LDA#$21,STA$0590,JSR$E08D

E093:显示文本(入口参数:X,Y)
如:LDX#$00,LDY#$31,JSR$E093
3100:003200326162636465666768696A6B6C6D6E6F0000000000
3200:61006200630000
文本用00换行0000结束

E096:热线帮助(入口参数:$A6,$A7)
如:LDA#$00,STA$A6,LDA#$30,STA$A7,JSR$E096
3000:61006200630000

E09C和E09F:等待按键

E0A2:把A中的值+#$80再送到$C7
如:LDA#$00,JSR$E0A2,JSR$E09C

E0A5:把ROM中的一段程序送到$570~$588

E0A8:防止程序循环中自动关机。

E0B4:功能和E07E相似

E0CC和E0CF:得到一个字符的ASCII码

E0ED,E0F0,E0F3,E0F6,E0F9,E10E,E111,E114:功能相似,用法大同小异。都是把一个字符写到屏幕。
如:LDA#$31,JSR$E024,LDX#$01,STX$83,LDY#$01,STY$85,JSR$E0ED,RTS

E0FF,E102,E126,E129,E12C,E12F,E16B,E16E,E171:功能相似,都是显示文字。参数:$450,$451,$452,$453
文字缓存:$02C0~$0387,6*6模式为$0748~$0899
反显缓存:$0437~$0443,6*6模式为$089A~$08C4

E10B:刷新一行屏幕,参数:$84
如:LDA#$01,STA$84,JSR$E10B

E117,:从X行Y列开始反显,遇到文字缓存的值为#$00则结束反显,参数:X,Y
如:LDX#$01,LDY#$01,JSR$E117

E120:反显某一行,参数:X
如:LDX#$01,JSR$E120

E123:反显部分,参数:$8E,$90
如:LDA#$02,STA$8E,LDA#$05,STA$90,JSR$E123

E138:清屏

E13B:清除文字缓存

E13E:清除第X行下面的Y行文字缓存
如:LDX#$01,LDY#$02,JSR$E13E


e210 :参数为02c0~$0323
直接使用:
jsr$e210


1.画线
程序入口地址 E1A4
用法x1,y1) (x2,y2)
x1:03a6 y1:03a7
x2:03a8 y2:03a9
03ac:00 清除 01 画线
例如 :a 2000
2000:jsr $e13b
2003:lda #$01
2005:sta $03a6
2008:sta $03a7
200b:lda #$50
200d:sta $03a8
2010:lda #$20
2012:sta $03a9
2015:lda #$01
2017:sta $03ac
201a:jsr $e1a4
201d:jsr $e09c
2020:rts
2.画圆
程序入口地址 E1AD
用法:圆心(x1,y1)
半径(r)
x1:03a6 y1:03a7
r: 03b9
03ac: 00 清圆 01 画圆
3.画方块
程序入口地址 E1A7
用法:(x1,y1) (x2,y2)
x1,y1:03a6,03a7
x2,y2:03a8,03a9
03ac: 00 清圆 01 画圆
4.画椭圆
程序入口地址 E1B0
用法:圆心(x,y) 03a6,03a7
03be:越大越宽
03BF:越大越高
03AC:00 清圆 01 画圆
5.填充画方块
程序入口地址 E1A1
用法和3一样
6.填充画圆
程序入口地址 E1B3
用法和2一样
7.填充画椭圆
程序入口地址 E1B6
用法和4一样


e18f:功能:画点
参数03aa,$03ab,$03ac=1则画点,$03ac=0则清点

e192:判断是否有点
参数同上
如果有点则标志位z=0

e195:功能同e1a7
参数03a6,A累加器,X,Y寄存器,$03ac

e198:功能同e1a1
参数:同上

e19b: 功能同e1a4
参数:同上

e19b: 功能同e1a4
参数:同上

e19e:功能:在矩形区域内画图像
参数:$03a6,03a7,03a8,03a9
$92,$93为指向图像数据的地址

e1aa:功能同上
参数:X,Y寄存器
$92,$93为指向图像数据的地址

如果使用e1aa画图像则图像数据的开始两个字节分别是图像的宽和高.


我来补充一些图形子程序用法:
e18f:功能:画点
参数:$03aa,$03ab,$03ac=1则画点,$03ac=0则清点

e192:判断是否有点
参数同上
如果有点则标志位z=0

e195:功能同e1a7
参数:$03a6,A累加器,X,Y寄存器,$03ac

e198:功能同e1a1
参数:同上

e19b: 功能同e1a4
参数:同上

e19b: 功能同e1a4
参数:同上

e19e:功能:在矩形区域内画图像
参数:$03a6,03a7,03a8,03a9
$92,$93为指向图像数据的地址

e1aa:功能同上
参数:X,Y寄存器
$92,$93为指向图像数据的地址

如果使用e1aa画图像则图像数据的开始两个字节分别是图像的宽和高.


系统函数5
关于汉字内码转换的系统函数:
e14a:繁体内码-->繁体码
e14d:繁体码-->繁体内码
$92,$93中存放繁体码,$94,$95中存放内码
如:把12*12点阵的繁体"我"输出到屏幕(0,0)处
lda word1
sta $92
lda word1+1
sta $93
jsr $e14d
lda #$00
sta $80
lda #$40
sta $81
lda #$2f
sta $82
jsr $e177
lda #$80
sta $92
lda #$02
sta $93
ldx #$00
stx $03a6
ldy #$00
sty $03a7
ldx #$05
stx $03a8
ldy #$0b
sty $03a9
jsr $e19e
lda #$8d
sta $92
lda #$02
sta $93
ldx #$05
stx $03a6
ldy #$00
sty $03a7
ldx #$0b
stx $03a8
ldy #$0b
sty $03a9
jsr $e19e
jsr $e09c
rts
word1:db "我"

e162:简体码-->内码
e17d:内码-->简体码
用法同上

e165:繁体内码-->简体码
入口参数:$94,$95
输出参数:$92,$93

e1e9:简体码-->繁体码
入口参数:$92,$93
输出参数:$92,$93

系统函数演示-e1cb,e1b9
系统函数e1cb的功能和e07e差不多,但使用起来比较麻烦,参数比较多,特别是当菜单选项>5时,需要编写子程序控制.
这里我编写了一个演示程序以下是源代码:
org $2000
db "CO",$01,$80,"╰参ㄧ计簍ボ" ;"系统函数演示"的big码
lda#sub1,sub2,sub3,sub4
data2:db $80,word7
data3:db $80,word5,$10,$10,$0b,$02,flag1
data4:db $80,word5,$10,$10,$0b,$02,flag1
data5:db $80,word6,$10,$10,$0b,$01,flag1
data6:db $80,word6,$10,$10,$0b,$01,flag1

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

本版积分规则

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

GMT+8, 2024-4-19 05:30 , Processed in 0.010475 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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