- 注册时间
- 2006-5-15
- 最后登录
- 1970-1-1
|
;请用ZHAOFEIXXX的编译器编译,只能用于TC808,我做了详细的注解.........
.include "head.txt"
num_ber=$cf00
rootdir:
.db "/.."
.db $00
;进入根目录
root:
ldx #$05
enterroot:
lda rootdir-1,x
sta $0823,x
dex
bne enterroot
int $050d
;初使化目录层数
lda #$00
sta dirnum+48
addrp:
;保存当前目录信息以便在信息发生改变时读取
lda dirnum+48
asl
tax
;保存目录所占的块
lda $087d
sta dirnum,x
lda $087e
sta dirnum+1,x
;保存目录号
lda $0869
sta dirnum+16,x
lda $086a
sta dirnum+17,x
;初使化反显框
lda #$00
sta $0d00
sta $0d01
setblock:
;读取目录信息
lda dirnum+48
asl
tax
;读取目录块
lda dirnum,x
sta $087d
lda dirnum+1,x
sta $087e
;读取目录号
lda dirnum+16,x
sta $0869
lda dirnum+17,x
sta $086a
;转到文件列表程序
jsr getblock
;判断用户操作或判断异常,当carry被置时,说明程序发生异常或用户按了跳出
bcs outpro
;没有发生异常或没有按退出键
;判断用户是选择了出口,还是选定了目录或文件
beq outpro
;用户选择了目录或文件
;判断用户选定的是否为目录
int $050d
;carry位被置,说明用户选定的是个文件,否则是个目录
bcs filename
;是目录,保存当前选择框位置
lda dirnum+48
asl
tax
lda $0d01
sta dirnum+33,x
lda $0d00
sta dirnum+32,x
;目录层数+1
inc dirnum+48
;转到读取目录文件
jmp addrp
outpro:
;发生异常或用户按了退出键
;判断目录层数是否为0
lda dirnum+48
bne notout
;为0,退出,不为0,返回上级目录
rts
notout:
;返回上级目录,目录层数减一
dec dirnum+48
lda dirnum+48
asl
tax
lda dirnum+32,x
sta $0d00
lda dirnum+33,x
sta $0d01
;读取文件列表
jmp setblock
;这里就是使用者可以自己写的地方了
filename:
int $c72a
ldx #$00
filemade:
lda $0824,x
sta $02c0,x
beq fileprint
inx
jmp filemade
fileprint:
int $c719
jsr getchar
jmp setblock
main:
lda $0869
pha
lda $086a
pha
lda $085f
pha
jsr root
pla
sta $085f
pla
sta $086a
pla
sta $0869
rts
getblock:
lda $0a
pha
lda $0a
and #$f0
ora #$01
sta $0a
;读取文件夹所占块
lda $087d
sta $081d
lda $087e
sta $081e
lda #$00
sta $081f
sta $0820
sta $ed
sta $0969
lda #$10
sta $096a
lda #$d0
sta $ee
int $0505
lda #$2e
sta $d002
sta $d003
lda #$00
sta $d004
;统计文件个数
lda #$00
sta $40
sta $41
sta $80
lda #$d0
sta $81
filenum:
ldy #$00
lda ($80),y
iny
and ($80),y
eor #$ff
beq sure_num
ldx $41
lda $40
sta num_ber,x
inc $41
clc
lda $80
adc #$10
sta $80
lda #$00
adc $81
sta $81
inc $40
bne filenum
pla
sta $0a
lda #$ff
sec
rts
sure_num:
lda $41
sta $0d02
;将文件名显示到屏幕
mark:
lda #$ff
sta $03b4
int $c72a
clc
lda $0d00
sta $40
adc $0d01
tax
.db $d0,$01
bit $40a9
sta $41
inx
cpx $0d02
.db $d0,$03
lda #$00
bit $80a9
ora $41
sta $0390
lda #$c0
sta $84
lda #$02
sta $85
ldx #$05
stx $41
setmode:
ldy #$00
ldx $40
lda num_ber,x
ldx #$10
int $ca03
clc
lda $80
adc #$02
sta $80
lda $81
adc #$d0
sta $81
getname:
lda ($80),y
beq filelong
sta ($84),y
iny
cpy #$0e
bne getname
filelong:
lda #$20
sta ($84),y
clc
lda $84
adc #$14
sta $84
lda #$00
adc $85
sta $85
inc $40
lda $40
cmp $0d02
bcs print
dec $41
bne setmode
print:
ldx #$00
ldy $0d01
int $C71d
int $c719
;按键跳转判断
getkey:
jsr getchar
ldx #$07
condition:
cmp key,x
beq branch
dex
bpl condition
jmp getkey
branch:
txa
asl
tax
lda side,x
sta $80
lda side+1,x
sta $81
jmp ($0080)
key:
.db $14,$15,$17,$16,$13,$0e,$0d,$1b
side:
.dw up,down,up,down,pageup,pagedown,ensure,exit
;读取按键
getchar:
lda #$00
sta $03f7
lda $c7
bpl getchar
and #$7f
pha
lda #$00
sta $c7
pla
rts
;----------------------
up:
lda $0390
and #$40
beq blow
lda $0d01
beq pageblow
dec $0d01
jmp mark
pageblow:
dec $0d00
blow:
jmp mark
;------------------------
down:
lda $0390
and #$80
beq over
lda $0d01
cmp #$04
beq pageover
inc $0d01
jmp mark
pageover:
inc $0d00
over:
jmp mark
;----------------------
pageup:
lda $0390
and #$40
beq addup
sec
lda $0d00
beq notup
sbc #$05
bcc fill
.db $2c
fill:
lda #$00
sta $0d00
addup:
jmp mark
notup:
sta $0d01
jmp mark
;--------------------
pagedown:
lda $0390
and #$80
beq addown
clc
lda $0d00
adc #$05
cmp $0d02
bcs notdown
sta $0d00
lda $0d00
adc $0d01
cmp $0d02
bcs notdown
addown:
jmp mark
notdown:
lda $0d02
sbc $0d00
tax
dex
stx $0d01
jmp mark
;------------------
exit:
pla
sta $0a
lda #$00
sec
rts
;------------------
ensure:
clc
lda $0d00
adc $0d01
bne without
pla
sta $0a
lda #$00
clc
rts
;将文件名发送到系统文件名处
without:
tax
lda num_ber,x
ldx #$10
int $ca03
clc
lda $80
adc #$02
sta $80
lda $81
adc #$d0
sta $81
seek:
lda ($80),y
beq seekover
sta $0824,y
iny
cpy #$0e
bne seek
seekover:
lda #$00
sta $0824,y
pla
sta $0a
clc
rts
dirnum:
.dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 |
|