- 注册时间
- 2004-12-21
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2005-7-14 20:10:00
|
显示全部楼层
※※※※※ 继续中………… ※※※※※※
我的使用的英文大多是用的QIQI的2600的定义,使用方法请见她的详解。
过段时间我会出一个更全的,并且我会考虑从新写6502编译器,专门为
文曲星写的,包括调试,直接用文曲星的模拟器。
我记得以前有过一款,不过这次不一样,定义地址内置,像.INI的文件
增加,代码管理器。
;****************************************
;TC1000 的常用系统地址定义单
;****************************************
TextBuffer =$02c0 ;文字缓存
MenuText =$03e7 ;菜单文字:$01 简体中文;$00 繁体中文
Character =$03e8 ;中文编码:$20 BIG5码;$40 GB码
Lighteness =$03e9 ;屏幕亮度:减1后等于系统级别
FontType1 =$0392 ;字体定义一
FontType2 =$0393 ;字体定义二
FontType3 =$03af ;字体定义三
FontType4 =$03b0 ;字体定义四
PrintRow =$03b1 ;设置刷新行
PrintCol =$03b2 ;设置刷新列
CursorType =$03b3 ;光标类型:$00 宽高;$08 宽低;$10 窄高;$18 窄低
CursorX =$03b4 ;光标X位置
CursorY =$03b5 ;光标Y位置
ScreenChar =$03be ;当前屏幕的最大字节数
ScreenRow =$03c0 ;当前屏幕每行的最大字节数
ScreenCol =$03c1 ;当前屏幕每列的最大字节数
PromptType =$044a ;输入法提示类型
;$0C [中文];$15 空
PromptIdeas =$045f ;输入联想:$00 开启;$01 关闭
Epigraph =$040f ;开机题词:$0c个字符
PasswordCue =$0b0e ;密码提示问题
PasswordReply =$0b22 ;密码提示答案
PasswordKey =$0b00 ;密码的密文
PasswordCodon =$0b0c ;密码关键字
InkeySound =$03f1 ;按键声音:$ff 有声音,否则无按键音
SoundVolume =$03ea ;音量大小:最大为$0b,大于$0b时则无声音
AutoPowerOffA =$03f7 ;死循环自动关机时间
SysTimeHour =$03f8 ;小时:二十四小时制
SysTimeMin =$03f9 ;分
SysTimeSecA =$03fa ;秒数的两倍
SysTimeYear =$03fb ;年:$00 是1881年,但最小只能是$33
SysTimeMonth =$03fc ;月
SysTimeDate =$03fd ;日
SysTimeWeek =$03fe ;星期
SysTimeSecB =$03ff ;1/2秒自动加1
AutoPowerOffB =$0401 ;用户设定的关机时间:n分钟*$0f
AutoPowerOffC =$0402 ;自动关机时间计数器:等于用户设定就关机
GraphBuffer =$19c0 ;图形缓存(显存)
Graph_x1 =$03c3 ;作图用:x1
Graph_y1 =$03c4 ;作图用:y1
Graph_x2 =$03c5 ;作图用:x2
Graph_y2 =$03c6 ;作图用:y2
Graph_x =$03c7 ;画和判断点的x轴
Graph_y =$03c8 ;画和判断点的y轴
GraphType =$03c9 ;作图模式:$00 擦除;$01 作图;$02 反显
Graph_r =$03d6 ;半径:r
Graph_a =$03db ;椭圆的长半轴
Graph_b =$03dc ;椭圆的短半轴
;----------------------------------------
;nc3000的值减去$6b
FileNameA =$0822 ;文件名A
FileNameB =$089e ;文件名B
FileError =$0861 ;文件操作失败标记
RWFileLenth =$085b ;读/写文件时操作的长度:两个字节
FileHandle =$085d ;
FileMode =$085e ;文件的打开方式:$10 正常属性(可有可无);$20 创立文件;$40为写文件
;$70 建立文件并设置文件属性为可写;$80 读取;$c0 修改
WriteFileAttr =$085f ;新建文件的属性:三个字节
;$ef $ef 正常,可显示,可读写;$ab $80 隐藏+只读
RWFileDest =$e0 ;读/写文件时操作的目标地址:两个字节
NandLenth =$0967 ;
NandReadDest =$f0 ;
NandNum =$081d ;读取nand块
NandOffset =$081f ;读取nand偏移
;----------------------------------------
;以下内容是打开文件的文件信息
INODE =$0867 ;目录名对应的INODE
FileNum =$0869 ;文件号,共有两字节
FileAttr =$086b ;文件属性,一共有三字节,最后一字节一般为$c0
FileCreatDate =$086e ;文件创建时间
FileChangeDate=$0871 ;文件修改时间
FileBlockNum =$0877 ;文件占用块的数目
FileLength =$0879 ;当文件长度小于16K时有效
FileBlock1st =$087b ;文件占用的第一个块
FileBlock2nd =$087d ;文件占用的第二个块
FileBlock3rd =$087f ;文件占用的第三个块
FileBlockLast =$0881 ;文件占用的最后一个块
;****************************************
;TC1000 的常用系统中断定义单
;****************************************
_Exit =$0310 ;返回上一级热键
_TestSuper =$0501 ;测试超级块
_Updata =$0502 ;更新物理区/逻辑区映射表
_ReadNandA =$0503 ;读取一页nand(物理,不做ecc)
_ReadNandB =$0504 ;读取一页nand(物理,做ecc)
_ReadNandC =$0505 ;读取nand(逻辑)
_ReadNandD =$0506 ;读取一页nand(逻辑)
_ReadNor =$0507 ;读取1字节nor
_ReadNors =$0508 ;读取多字节nor
_InodeDir =$0509 ;根据指定的inode号找出对应的目录名
;(INODE:$0867-$0968;文件名:$0822)
_TestDir =$050a ;测试目录是否可列出
_CreatDir =$050b ;创建目录
_ReadDir =$050c ;读取目录
_EnterDir =$050d ;切换工作目录(文件名:$0822)
_DelFiles =$050e ;删除文件(文件名:$0822)
_Deltrees =$050f ;删除目录(文件名:$0822)
_OpenFiles =$0515 ;打开或创建文件
_ReadFiles =$0516 ;读文件
_CloseFiles =$0517 ;关闭文件
_WriteFiles =$0518 ;写文件
_WriteIndexA =$0519 ;更改文件读写指针位置
_ReadInodeA =$051a ;读inode
_ReadInodeB =$051b ;读一个inode
_ClearUpA =$051c ;空间整理_释放已删除空间
_ClearUpB =$051d ;空间整理_删除无用的分配表信息
_StartUpA =$051e ;重启时空间整理A
_StartUpB =$051f ;重启时空间整理B
_CloseAll =$0523 ;关闭所有文件
_InitPro =$0524 ;格式化闪存用户区并重置文件系统(慎用格式化)
_OpenFile =$0525 ;打开文件
_ReadFile =$0526 ;读取文件
_WriteIndexB =$0527 ;更改文件读写指针
_ExplorerA =$0528 ;资源管理器1
_ReadNandE =$0529 ;快速逻辑读NAND,最多只能读255b:$081d-$081e:块;$081f-$0820:偏移
_NandSN =$052a ;获得及检测NAND厂商和设备号
_MappedA =$052b ;处理物理区/逻辑区映射表
_MappedB =$052c ;同上
_MappedC =$052d ;同上
_ReadMax64k =$052e ;若指定文件>64kb,则读出其所占的块到$c000
_ReadExtent =$052f ;获取文件长度
_Inkey =$c006 ;程序暂停,等待按键响应,取键值
_ClearGraphA =$c729 ;清除全部显存,包括左右两边的图标
_ClearText =$c72a ;清除文字缓冲区,但是保留显存内容
_UpdateLCD =$c719 ;字符缓冲区刷到显存(屏幕)
_Int2Asc =$c733 ;把数字转化成ASC II码
_ClearGraphB =$c737 ;清除部分显存,不包括左右两边的图标
_Division =$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 ;填充作图
_MessageBox =$ca12 ;信息框
;a=0为弹出框
;a=1 or 2时为是否对话框
;a=3时为选择框(此时参数有所不同)
_NowFind =$ca16 ;显示正在查找
_NotFind =$ca17 ;显示没有找到
_SystemMenu =$cb01 ;系统菜单
_PromptA =$cb03 ;系统输入法
_PromptB =$cb05 ;输入法
_HelpSystem =$cb08 ;帮助系统
;///////////////////////////////////////////////////////////////////////
;****************************************
;宏汇编资料
;****************************************
;文件头1
;[入参]文件大小(以4k为基本的单位)
;[出参]
_SIZE_1:.MACRO SIZE_1_1
.DB $AE,$EE,$EA ;固定格式
.DW SIZE_1_1 ;文件大小
.DB $00,$20 ;固定格式
JMP MAIN ;开始地址
.DB $70,$03,$10,$03,$FF,$FF ;固定格式
.ENDM
;----------------------------------------
;文件头2
;[入参]文件大小(以4k为基本的单位)
;[出参]
_SIZE_2:.MACRO SIZE_2_1
.DB $AA,$A5,$5A ;固定格式
.DW SIZE_2_1 ;文件大小
.DB $00,$20 ;固定格式
JMP MAIN ;开始地址
.DB $E8,$03,$30,$03,$FF,$FF ;固定格式
.ENDM
;----------------------------------------
;按键等待
;[入参]
;[出参]A(所按键的ASC码)
_WAIT_1: .MACRO
LDA #$00
STA $C7
_WAIT_1_L1: LDA #$00
STA $03F7
LDA $C7
BPL _WAIT_1_L1
AND #$7F
STA $C7
RTS
.ENDM
;----------------------------------------
;按键检测
;[入参]A(所按键的ASC码)
;[出参]是:c=1 , 否:c=0
_WAIT_2: .MACRO WAIT_2_1
LDA #WAIT_2_1
LDX #$3f
_WAIT_2_L1: CMP _WAIT_2_D1,x
BEQ _WAIT_2_L3
DEX
BPL _WAIT_2_L1
_WAIT_2_L2: CLC
RTS
_WAIT_2_L3: TXA
LSR
LSR
LSR
TAY
TXA
AND #$07
TAX
LDA _WAIT_2_D2,x
AND $bf,y
BNE _WAIT_2_L2
SEC
RTS
_WAIT_2_D1: .DB $0a,$00,$10,$16,$69,$6b,$13,$17
.DB $08,$00,$00,$0e,$75,$6a,$6d,$20
.DB $06,$00,$0f,$0d,$79,$68,$6e,$2e
.DB $18,$00,$00,$70,$74,$67,$62,$30
.DB $00,$00,$1f,$15,$72,$66,$76,$1b
.DB $02,$00,$1e,$14,$65,$64,$63,$12
.DB $04,$00,$1d,$6c,$77,$73,$78,$1a
.DB $0c,$00,$1c,$6f,$71,$61,$7a,$19
_WAIT_2_D2: .DB $01,$02,$04,$08,$10,$20,$40,$80
.ENDM
;----------------------------------------
;****************************************
;堆栈操作函数
;****************************************
;
;[入参]
;[出参]
_XY_1: .MACRO
TXA
PHA
TYA
PHA
.ENDM
;----------------------------------------
;
;[入参]
;[出参]
_XY_2: .MACRO
PLA
TAY
PLA
TAX
.ENDM
;----------------------------------------
;
;[入参]
;[出参]
_PAGE_1: .MACRO
LDA $00
PHA
LDA $0A
PHA
LDA $0D
PHA
.ENDM
;----------------------------------------
;
;[入参]
;[出参]
_PAGE_2: .MACRO
PLA
STA $0D
PLA
STA $0A
PLA
STA $00
.ENDM
;****************************************
;字符缓存操作函数
;****************************************
;字符发送到任意位置
;[入参]文字地址(必须用.STR定义),横坐标,纵坐标,文字类型
;[出参]
_PRINT: .MACRO PRINT_1,PRINT_2,PRINT_3,PRINT_4
LDX PRINT_1
_PRINT_L1: LDA PRINT_1,X
.IF PRINT_4
STA PRINT_3*20+PRINT_2+TextBuffer-1,X
.ELSE
STA PRINT_3*26+PRINT_2+TextBuffer-1,X
.ENDIF
DEX
BNE _PRINT_L1
.ENDM
;----------------------------------------
;字符发送到全屏
;[入参]文字地址,文字类型
;[出参]
_PRINT_1: .MACRO PRINT_1_1,PRINT_1_2
.IF PRINT_1_2
LDX #$64
.ELSE
LDX #$9C
.ENDIF
_PRINT_1_L1: LDA PRINT_1_1-1,X
STA TextBuffer-1,X
DEX
BNE _PRINT_1_L1
.ENDM
;----------------------------------------
;字体设定
;[入参]类型1,类型2
;[出参]
_FONT: .MACRO FONT_1,FONT_2
PHA
.IF FONT_1
LDA #$00
STA FontType1
LDA #$01
.ELSE
LDA #$01
STA FontType1
LDA #$00
.ENDIF
STA FontType2
.IF FONT_2
LDA #$FF
.ELSE
LDA #$00
.ENDIF
STA FontType3
STA FontType4
PLA
RTS
.ENDM
;----------------------------------------
|
|