- 注册时间
- 2004-12-11
- 最后登录
- 1970-1-1
|
发表于 2006-10-14 11:34:06
|
显示全部楼层
不一定非要要那个工具写!
---------------------------------------------------
[转贴] 写0BANK技术
写0BANK技术
可写的地址是 00 bank页的 $8000-$ffff,其中包括BIOS和中断源地址,RESET/IRQ/NMI中断例程,双机修复/系统检测程式等等等等
注意:
1.写之前必须保证电力充足,否则后果严重
2.请勿使用此程序编写任何破坏性程序,否则一切后果自负!!!!!
3.因为使用此程序造成的一切后果,笔者概不负责(压缩包中的程序已经通过测试)!!
4.程序适用于 nc2600/nc2000,不保证适用于nc3000
总之大家请小心用!因为0BANK里保存的是非常重要的资料,改他们很有用,同时也很危险!!
如果你还是个菜鸟,建议谨慎使用,因为可能导致连双机修复都无法恢复的严重错误!!!
源代码 :
nc2600/2000写0bank
将bank0的$9097的"NandCheck"改为"闪存检测 ",完成后自动重开机
程序必须在sdram
比如从$1000开始
msg:"闪存检测 "
lda #$00
sta $0a
sta $00
lda #$00
sta $80
lda #$90 ;待写地址
sta $81
lda #$00
sta $82
lda #$20
sta $83
ldx #$10
x2:ldy #$00
x1:lda ($80),y
sta ($82),y
iny
bne x1
inc $81
inc $83
dex
bne x2
ldx #$00
x3:lda msg,x
sta $9097,x
inx
cpx #$09
bne x3
sei
lda #$90 ;io操作关键在于要将$18设为初始状态,一般状态下写nor时$18=50h,但写0bank时要令$18=40h
sta $01 ;int_enable
sta $0430
lda #$04
sta $18 ;port4
sta $0435
lda #$00
sta $0a
lda $0430
ora #$f0
sta $01 ;int_enable
sta $0430
lda $0435
and #$04
ora #$40
sta $18 ;port4
sta $0435
lda #$50
sta $0d ;lcd_segnment
lda $01
lda #$00
sta $80 ;bank
lda #$00
sta $81
lda #$90
sta $82 ;待写地址
lda #$00
sta $84
lda #$20
sta $85
lda $0430
ora #$80
sta $01 ;int_enable
lda $0435
and #$fb
sta $18 ;port4
lda #$00
sta $00 ;enable nor
lda #$f0
sta $8000
lda #$aa
sta $d555
lda #$55
sta $aaaa
lda #$90
sta $d555
lda $8000
cmp #$c7
bne l1
bcs l2
l1:clc
l2:lda #$f0
sta $8000
bcs l3
cli
JMP RESET;error1
l3:lda $81
pha
lda $82
pha
lda #$00
sta $83 ;erase flag
l6:lda #$aa ;erase 2k
sta $d555
lda #$55
sta $aaaa
lda #$80
sta $d555
lda #$aa
sta $d555
lda #$55
sta $aaaa
ldy #$00
lda #$30
sta ($81),y
l4:nop
lda $8000
bpl l4
nop
and #$08
beq l4
lda #$f0
sta $8000
lda $83
bne l5
inc $83
lda $82
clc
adc #$08
sta $82
jmp l6
l5:pla
sta $82
pla
sta $81
ldx #$10 ;write 4k
l10:ldy #$00
l9:lda #$aa
sta $d555
lda #$55
sta $aaaa
lda #$a0
sta $d555
lda ($84),y
sta ($81),y
l7:lda $8000
nop
bpl l7
and #$08
beq l7
lda #$f0
sta $8000
lda ($81),y
cmp ($84),y
bne l8
iny
bne l9
inc $82
inc $85
dex
bne l10
cli
JMP RESET ;write ok
l8:
cli ;write error2
RESET DA #$ff
STA $02
STA $03
brk $c001
rts |
|