| 
 
注册时间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
 | 
 |