易码技术论坛

 找回密码
 加入易码
搜索
查看: 121312|回复: 6

[讨论]关于高速内核4.1

[复制链接]
发表于 2005-3-27 17:41:00 | 显示全部楼层
我是在6C68将中断引到brk $060d的,不过我没考虑拓展问题,但我发现06页有许多空白中断可用,例如060E,064C,065E等等,我打算用060E做以后拓展。
 楼主| 发表于 2005-3-28 14:53:00 | 显示全部楼层
064c可以吧?把6D7D改改就行了。
 楼主| 发表于 2005-3-29 10:18:00 | 显示全部楼层
EEC?
 楼主| 发表于 2005-3-29 10:39:00 | 显示全部楼层
带参数的中断?什么参数?(昨天没时间问了,在上电脑课,我只是刚学飞的菜鸟,呵呵!)
发表于 2005-3-31 21:43:00 | 显示全部楼层
我希望QIQI把3.3版给提提速.
发表于 2005-3-31 21:52:00 | 显示全部楼层

这里是3.3版,希望QIQI给提提速.
 楼主| 发表于 2005-3-24 18:25:55 | 显示全部楼层 |阅读模式
极速内核提速原理
改写了brk $0519(find_inode)中断函数
这个函数用于在整个分配表(大小为34K)中搜索指定文件号的分配表信息
在打开文件、修改文件、列出文件等方面被大量使用,可是原函数效率极为低下
原函数:
brk $0519
长度:292B
搜索整个分配表用时:约80ms
占用ram:
除出参和入参外
使用6个零页变量
2048B的缓冲($C000-$C800)和数个在$cc00-$cd00间的临时变量

QIQI重写:
将函数移到brk $060d
现函数:
brk $060d
长度:
127B
搜索整个分配表时间:约2ms
占用ram:除出参和入参外
4个零页变量
无缓冲

改写后的函数:
ldx #0
lp1:lda find_loc,x
sta NGFFS_BUFFER,x
inx
cpx #7e
bne lp1 ;将跨bank搜索代码复制到bus flash跨页读写的公用buffer
jmp NGFFS_BUFFER ;$0972
find_loc:
lda io_switch_bank ;$00
pha
lda #0
sta nor_block_ptr ;$db
next_block:ldx nor_block_ptr
lda inodebank,x ;$088b
sta io_switch_bank
txa
asl
tax
lda inodeaddr,x ;$089c
sta norbufptr ;$e1
lda inodeaddr+1,x
sta norbufptr+1
lda #0
sta inode_ptr ;$dc
if_not_finish:ldy #$1e
lda (norbufptr),y
cmp #$aa
bne not_empty
iny
lda (norbufptr),y
cmp #$aa
bne not_empty
go_next_block:inc nor_block_ptr ;如果该inode偏移1eH为AAAA说明该块以下为空,继续下一块
lda nor_block_ptr
cmp #17  ;若块数大于17,搜索结束
bcs end_fail
jmp next_block
not_empty:ldy #0
lda (norbufptr),y
cmp inodenum ;$093f
bne next_inode
iny
lda (norbufptr),y
cmp inodenum+1
bne next_inode ;比较是否是要搜索的inode序号
ldy #04
lda (norbufptr),y
and #$e0
cmp filestate ;$0949检查是否为要搜索的状态
bne next_inode
lda nor_block_ptr
sta inodeslot ;$093d
lda inode_ptr
sta inodeslot+1 ;全部符合则把所在block和inode位置保存到出参
clc
pla
sta io_switch_bank
rts
next_inode:
lda norbufptr
clc
adc #$20 ;inode每个长度#$20
sta norbufptr
bcc pj1
inc norbufptr+1
pj1:inc inode_ptr
lda inode_ptr
cmp #$40 ;每个block有40h个inode
bne if_not_finish
jmp go_next_block ;40h个inode比较完后转到下个block
end_fail:
sec
pla
sta io_switch
rts

改中断BRK $0519为         BRK $060D
A960: LDX #$00
A962: LDA $A970,X
A965: STA $0972,X
A968: INX
A969: CPX #$7F
A96B: BNE $A962
A96D: JMP $0972

0972: LDA $00
0974: PHA
0975: LDA #$00
0977: STA $DB
0979: LDX $DB
097B: LDA $088B,X
097E: STA $00
0980: TXA
0981: ASL
0982: TAX
0983: LDA $089C,X
0986: STA $E1
0988: LDA $089D,X
098B: STA $E2
098D: LDA #$00
098F: STA $DC
0991: LDY #$1E
0993: LDA ($E1),Y
0995: CMP #$AA
0997: BNE $09AB
0999: INY
099A: LDA ($E1),Y
099C: CMP #$AA
099E: BNE $09AB
09A0: INC $DB
09A2: LDA $DB
09A4: CMP #$11
09A6: BCS $09EC
09A8: JMP $0979
09AB: LDY #$00
09AD: LDA ($E1),Y
09AF: CMP $093F
09B2: BNE $09D6
09B4: INY
09B5: LDA ($E1),Y
09B7: CMP $0940
09BA: BNE $09D6
09BC: LDY #$04
09BE: LDA ($E1),Y
09C0: AND #$E0
09C2: CMP $0949
09C5: BNE $09D6
09C7: LDA $DB
09C9: STA $093D
09CC: LDA $DC
09CE: STA $093E
09D1: CLC
09D2: PLA
09D3: STA $00
09D5: RTS
09D6: LDA $E1
09D8: CLC
09D9: ADC #$20
09DB: STA $E1
09DD: BCC $09E1
09DF: INC $E2
09E1: INC $DC
09E3: LDA $DC
09E5: CMP #$40
09E7: BNE $0991
09E9: JMP $09A0
09EC: SEC
09ED: PLA
09EE: STA $00
09F0: RTS

06页:
A960-A200 BD70 A99D 7209
A968-E8E0 7FD0 F54C 7209
A970-A500 48A9 0085 DBA6
A978-DBBD 8B08 8500 8A0A
A980-AABD 9C08 85E1 BD9D
A988-0885 E2A9 0085 DCA0
A990-1EB1 E1C9 AAD0 12C8
A998-B1E1 C9AA D00B E6DB
A9A0-A5DB C911 B044 4C79
A9A8-09A0 00B1 E1CD 3F09
A9B0-D022 C8B1 E1CD 4009
A9B8-D01A A004 B1E1 29E0
A9C0-CD49 09D0 0FA5 DB8D
A9C8-3D09 A5DC 8D3E 0918
A9D0-6885 0060 A5E1 1869
A9D8-2085 E190 02E6 E2E6
A9E0-DCA5 DCC9 40D0 A84C
A9E8-A009 3868 8500 60FF


以上就是QIQI的高速内核了,好像只要改05页$6c68就可加速了,但我发现BRK $0520 和05页的一个子程序(入口$6b37)也有类似原brk $0519的代码,请各位高手确任一下它们是干什么用的,须不须要修改.(这两天要考试,没时间玩星星)
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-16 22:20 , Processed in 0.017156 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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