- 注册时间
- 2004-12-27
- 最后登录
- 1970-1-1
|
发表于 2006-8-28 20:30:56
|
显示全部楼层
[分享][原创]文件列表 bas版 for nc3000
玩汇编之后很久没来bas版了,今天发一个bas版的文件列表程序.
0 :
20 REM 文件列表for nc3000
30 REM 按键常数
40 KU =20:KD =21:KL =23:KR =22:KPD =14:KPU =19:KMR =13:KAC =27:KHELP =25
50 FNAMEADD =2189: REM 文件名地址
60 NRNL =2184:NRNH =2185: REM 读NAND块号
70 NRLL =2514:NRLH =2515: REM 读NAND长度
80 NRDL =240:NRDH =241: REM 读NAND目标地址
90 NROL =2186:NROH =2187: REM 读NAND偏移
100 ERRORCODE =2252: REM 文件操作出错码$8cc
110 OPENDIR =1293: REM $050D
111 NANDREAD =1285: REM $0505
112 SHOWCUR =50973: REM $C71D,反显某行
113 UPLCD =50969: REM $C719,刷屏
114 CLLCD =50986: REM $C72A,清文字缓存
115 I050A =1290: REM $050A,根据INODE读文件夹
120 BLK1L =2278:BLK1H =2279: REM 文件占用的第一块
130 CURK =947:CURX =948:CURY =949: REM 光标参数
500 F$ ="/我的图片": GOSUB 1500: REM 打开文件夹
510 IF PEEK(ERRORCODE) =2 THEN PRINT "打开文件夹";F$;"失败!": END
520 GOSUB 1700: IF FILENUM =0 THEN PRINT "没有文件!": END
530 FF =0:MPOS =0: POKE CURK,255
540 INTNUM =CLLCD: GOSUB 1600 : GOSUB 1200: GOSUB 1300: REM 将文件名写到文字缓存
550 GOSUB 1400:INTNUM =UPLCD: GOSUB 1600:K =ASC( INKEY$): REM 显示光标,文字,并按键
560 G =(K =KAC) +(K =KMR) *2 +(K =KU) *3 +(K =KD) *4 +(K =KR) *4 +(K =KL) *3 +(K =KPD) *5 +(K =KPU) *6 +(K =KHELP) *7
570 ON G GOSUB 590,600,700,800,900,1000,595
580 GOTO 550
590 POP : POKE 199,255: END
595 CLS : PRINT " "," 文件列表BAS版 BY 立天";
596 K =ASC( INKEY$): POP : GOTO 540
600 CLS : PRINT "你选择了:"
610 FOR C =0 TO 13 =PEEK(C +6144 +MPOS *16 +2): IF D =0 THEN 630: ELSE POKE C +724,D
620 NEXT
630 INTNUM =UPLCD: GOSUB 1600:K =ASC( INKEY$)
640 POP : GOTO 540
700 REM 上
705 IF MPOS >0 THEN MPOS =MPOS -1: GOTO 730
710 IF FF >0 THEN FF =FF -1
720 POP : GOTO 540
730 RETURN
800 REM 下
805 IF FF +MPOS +1 =FILENUM THEN 830
810 IF MPOS <4 THEN MPOS =MPOS +1: GOTO 830
820 FF =FF +1: POP : GOTO 540
830 RETURN
900 REM 下翻
910 IF FF +5 >=FILENUM THEN 940
920 FF =FF +5: IF FF +MPOS +1 >=FILENUM THEN MPOS =FILENUM -FF -1
930 POP : GOTO 540
940 RETURN
1000 REM 上翻
1010 IF FF =0 THEN 1040
1020 IF FF >4 THEN FF =FF -5 ELSE FF =0
1030 POP : GOTO 540
1040 RETURN
1200 REM 下面将五个文件名读出
1205 FO =(FF +1) *16
1210 POKE NRNL,DIRBLKL: POKE NRNH,DIRBLKH
1220 H =INT(FO /256) =FO -H *256: POKE NROL,L: POKE NROH,H
1230 POKE NRLL,80: POKE NRLH,0: REM 读80字节
1240 POKE NRDL,0: POKE NRDH,24: REM 读到$1800,6144
1250 INTNUM =NANDREAD: GOSUB 1600: RETURN
1300 REM 显示文件名
1310 N =FILENUM -FF: IF N >5 THEN N =5
1320 FOR I =1 TO N
1330 A =(I -1) *20 +704:B =(I -1) *16 +6144
1340 FOR C =0 TO 13
1350 D =PEEK(B +2 +C): IF D =0 THEN 1370 ELSE POKE A +C,D
1360 NEXT C
1370 NEXT I
1380 RETURN
1400 REM 显示光标
1410 POKE 640,160: POKE 641,MPOS: POKE 642,162: POKE 643,0: POKE 644,0
1420 H =INT(SHOWCUR /256) =SHOWCUR -H *256: POKE 645,L: POKE 646,H: POKE 647,96
1430 CALL 640: RETURN
1500 REM 打开文件夹,文件夹名F$
1510 C =0: FOR A =1 TO LEN(F$):B =ASC( MID$(F$,A,1)): IF B =31 THEN 1530
1520 POKE FNAMEADD +C,B:C =C +1
1530 NEXT : POKE FNAMEADD +C,0
1540 POKE ERRORCODE,0:INTNUM =OPENDIR: GOSUB 1600
1545 IF PEEK(FNAMEADD) =ASC("/") AND PEEK(FNAMEADD +1) =0 THEN INTNUM =I050A: GOSUB 1600
1550 DIRBLKL =PEEK(BLK1L) IRBLKH =PEEK(BLK1H)
1560 RETURN
1600 REM 运行某中断,入参中断号INTNUM
1610 A =INT(INTNUM /256):B =INTNUM -A *256: POKE 4096,0: POKE 4097,B: POKE 4098,A: POKE 4099,96
1620 CALL 4096: RETURN
1700 REM 统计文件个数
1710 FILENUM =0:FO =16
1715 POKE NRNL,DIRBLKL: POKE NRNH,DIRBLKH
1720 FOR N =1 TO 16
1730 H =INT(FO /256) =FO -H *256: POKE NROL,L: POKE NROH,H
1740 POKE NRLL,0: POKE NRLH,1: REM 读256字节
1750 POKE NRDL,0: POKE NRDH,24: REM 读到$1800,6144
1760 INTNUM =NANDREAD: GOSUB 1600:FO =FO +256
1770 FOR I =1 TO 16
1775 A =(I -1) *16 +6144
1780 IF PEEK(A) =255 AND PEEK(A +1) =255 THEN 1810
1790 FILENUM =FILENUM +1
1800 NEXT
1805 NEXT
1810 RETURN |
|