- 注册时间
- 2006-1-24
- 最后登录
- 1970-1-1
|
发表于 2007-2-24 02:56:30
|
显示全部楼层
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;系统nor备份还原for nc2600
INT: .MACRO BRK_PARAM
.DB $00
.DW BRK_PARAM
.ENDM
.ORG $2010
LDX #<MenuData
LDY #>MenuData
INT $CB03
RTS
MenuData: .DB $09,$02
.DW _NorSave
.DW _MenuHelp
.DW _NorBack
.DW _MenuHelp
.DB "1.备份系统Nor"
.DB $FF
.DB "2.还原系统Nor"
.DB $FF,$FF
_MenuHelp: .DB "备份系统Nor: 备份系统Nor的$01页--$09页(共09页,故需 要288K+16K=304K的空 间,备份前请确认空间足够)到文件“/BASIC文件/N26.sys”中。 "
.DB "还原系统Nor: 将文件“/BASIC文件/N26.sys”的内容覆盖系统Nor的$01页--$09页 (共09页),程序会自 动校正CheckSum值.另 "
.DB "外,为减少对Nor 的擦写次数,内容不变的块(以2048个字节为单位)将不进行覆盖。 注意: "
.DB "1.运行本程序前请确定您的机器电量充足。 2.还原系统Nor前请确 定没有错误,误改系统Nor的后果可以很严重 的,特别是$01页,那 是通信部分的程序。 "
.DB "***** 免责声明 *****如果因为程序错误,或误操作,稳定性等等原因造成的数据丢失或系统错误甚至硬件损坏,作者概不负责!请慎重!"
.DB $00,$00
_NorSave: JSR _OpenDir
BCC _NSL1
INT $0312-2
_NSL1: JSR _WriteFileName
JSR _READOPEN
BCS _NSL2
JSR _CoverOrNot
CMP #$79
BNE _NSL4
INT $0517-1
JMP _NSL2
_NSL4: INT $0517-1
RTS
_NSL2: LDA $0A
PHA
LDA $00
PHA
JSR _MesSaving
JSR _CREATEOPEN
BCC _NSL3
INT $0312-2
_NSL3: LDA #$01
STA $92
_NSL6: LDA $92
STA $90
LDA #$40
STA $91
_NSL5: LDA #$00
STA $03F6
JSR _SendNorToRam3000
LDA #$00
STA $E0-3
LDA #$30
STA $E1-3
LDA #$00
STA $08C6+$49
LDA #$10
STA $08C7+$49
INT $0518-1
BCC _WriteSuccess
JMP _ErrorOut
_WriteSuccess:
jsr ShowWorking
CLC
LDA $91
ADC #$10
STA $91
CMP #$C0
BNE _NSL5
INC $92
LDA $92
CMP #$0a ;结束页
BNE _NSL6
INT $0517-1
LDA #$00
JSR _TISHI
PLA
STA $00
PLA
STA $0A
RTS
_NorBack: JSR _OpenDir
BCC _NBL1
JMP _ErrorFile
_NBL1: JSR _WriteFileName
JSR _READOPEN
BCC _NBL2
JMP _ErrorFile
_NBL2: JSR _BackOrNot
CMP #$79
BEQ _NBL3
INT $0517-1
RTS
_NBL3: JSR _MesBacking
LDA $0A
PHA
LDA $00
PHA
LDA #$01
STA $92
_NBL6: LDA $92
STA $90
LDA #$40
STA $91
_NBL5: LDA #$00
STA $03F6
LDA #$00
STA $E0-3
LDA #$30
STA $E1-3
LDA #$00
STA $08C6+$49
LDA #$08
STA $08C7+$49
INT $0516-1
JSR _CMPNorWith3000
BCC _NBL4
JSR WriteNor
_NBL4:
jsr ShowWorking
CLC
LDA $91
ADC #$08
STA $91
CMP #$C0
BNE _NBL5
INC $92
LDA $92
CMP #$0a
BNE _NBL6
INT $0517-1
JSR _CheckSum
LDA #$01
JSR _TISHI
PLA
STA $00
PLA
STA $0A
RTS
_ErrorFile: LDA #$02
JMP _TISHI
;将$3000-$37FF的内容与第$90页,第$91块的NOR内容进行比较,全部相同结果C=0,ELSE C=1
_CMPNorWith3000 DA $90
STA $00
LDA #$10
STA $0A
LDA $91
STA $81
LDA #$00
STA $80
STA $82
LDA #$30
STA $83
_CMPL1 : LDY #$00
_CMPL2 : LDA ($80),Y
CMP ($82),Y
BNE _NotSame
INY
BNE _CMPL2
INC $81
INC $83
LDA $81
AND #$07
BNE _CMPL1
CLC
RTS
_NotSame : SEC
RTS
; _ _ _ _读打开文件
_READOPEN: LDA #$80
STA $08C9+$49
INT $0515-1
RTS
; _ _ _ _新建打开文件
_CREATEOPEN: LDA #$70
STA $08C9+$49
LDA #$EF
STA $08CA+$49
STA $08CB+$49
INT $0515-1
RTS
; _ _ _ _写打开文件
_WRITEOPEN: LDA #$C0
STA $08C9+$49
INT $0515-1
RTS
_OpenDir: LDX #$10
LDA _Dir-1,X
STA $088C+$49,X
.DB $CA,$D0,$F7
JSR _OPENFOLDER
RTS
; _打开文件夹,不存在则创建
_OPENFOLDER:
INT $050D
BCC _OFOEND
LDA $08CC+$49
CMP #$02
BNE _OFOL1
INT $050B
BCC _OPENFOLDER
_OFOL1 : SEC
_OFOEND : RTS
_WriteFileName: LDX #$10
LDA _File-1,X
STA $088C+$49,X
.DB $CA,$D0,$F7
RTS
_MesBacking: INT $C72A
LDX#$14
LDA _BackMes-1,X
STA $02E7,X
.DB $CA,$D0,$F7
INT $C719
RTS
_BackMes : .DB " 正在还原... "
_MesSaving : INT $C72A
LDX #$14
LDA _SavMes-1,X
STA $02E7,X
.DB $CA,$D0,$F7
INT $C719
RTS
_SavMes: .DB " 正在备份... "
_ErrorOut: INT $C72A
LDX #$14
LDA _ErrMes-1,X
STA $02E7,X
.DB $CA,$D0,$F7
INT $C719
INT $0517-1
INT $050E
INT $C00A
INT $0312-2
_ErrMes:
.DB " 写文件时出错 "
; **********8JSR _TISHI提示信息A提示序号
_TTS: .DB "备份成功还原成功文件错误"
_TST: .DB " "
.DB $00,$00
_TSDB : .DB $80
.DW _TST
.DB $20,$19,$08,$02
.DW _TSDB +6
_DTST : .DW _TSDB
_TISHI: ASL
ASL
ASL
TAX
LDY #$00
_GTS : LDA _TTS ,X
STA _TST,Y
INX
INY
CPY#$08
BNE _GTS
LDX _DTST
LDY _DTST+1
LDA #$00
STA $0A32
INT $CA12
INT $C00A
RTS
_CoverOrNot: LDX _QC
LDY _QC+1
LDA #$02
INT $CA12
RTS
_QC : .DW _QuestCover
_QuestCover: .DB $80
.DW _TXTQC
.DB $10,$09,$0E,$04
.DW _ADD02
_ADD02 : .DB $02
_TXTQC : .DB " 文件已存在,"
.DB $00
.DB " 确定覆盖?"
.DB $00,$00
_BackOrNot: LDX _QB
LDY _QB+1
LDA #$02
INT $CA12
RTS
_QB: .DW _QuestBack
_QuestBack: .DB $80
.DW _TXTQB
.DB $10,$10,$0E,$02
.DW _ADD02
_TXTQB: .DB " 确认要还原?"
.DB $00,$00
_Dir: .DB "/BASIC文件"
.DB $00
_File: .DB "N26.sys"
.DB $00
;************CheckSum*******************
_CheckSum :
LDA $0A
AND #$70
STA $0A
LDX #$6F
_GETSUB1 : LDA $C398,X
STA $0280,X
DEX
BPL _GETSUB1
LDA #$60
STA $02ED
JSR $0280
CLI
LDA $0F0A
EOR #$FF
STA $0F0A
LDA $0F0B
EOR #$FF
STA $0F0B
LDA #$03
STA $00
LDA $BFF0
STA $0F10
LDA $BFF1
STA $0F11
LDA $0F0A
CMP $0F10
BNE _ChangeCS
LDA $0F0B
CMP $0F11
BNE _ChangeCS
_MainEnd : RTS
_ChangeCS : LDA #$03
STA $90
LDA #$B8
STA $91
JSR _SendNorToRam3000
LDA $0F0A
STA $37F0
LDA $0F0B
STA $37F1
LDA #$03
STA $90
LDA #$B8
STA $91
JSR WriteNor
JMP _MainEnd
;将$90页的$91块(如$91=#$A0,则为$A000-$AFFF)Nor Flash发送到$3000-$3FFF
_SendNorToRam3000:
LDA $90
STA $00
LDA #$10
STA $0A
LDA $91
STA $81
LDA #$00
STA $80
STA $82
LDA #$30
STA $83
_SNTRL1 : LDY#$00
_SNTRL2 : LDA ($80),Y
STA ($82),Y
INY
BNE _SNTRL2
INC $81
INC $83
LDA $81
AND #$0F
BNE _SNTRL1
RTS
;将$3000-$37FF这$800 字节写入$90页的$91块(如$91=#$A0,则为$A000-$A7FF)Nor Flash
WriteNor:
SEI
lda $0435
and #$fb
sta $18
LDA #$10
STA $0A
LDA $90
STA $00
LDA #$00
STA $80
LDA $91
STA $81
LDA #$AA
STA $5555
LDA #$55
STA $AAAA
LDA #$80
STA $5555
LDA #$AA
STA $5555
LDA #$55
STA $AAAA
LDY #$00
LDA #$30
STA ($80),Y
WNORL1:
NOP
LDA $8000
BPL WNORL1
NOP
AND #$08
BEQ WNORL1
LDA #$F0
STA $8000
;上为擦
LDA #$00
STA $60
LDA #$30
STA $61
LDY #$00
WNORL6: LDA ($60),Y
cmp ($80),y
beq WNORL4
LDX #$AA
STX $5555
LDX #$55
STX $AAAA
LDX #$A0
STX $5555
STA ($80),Y
WNORL5
LDA $8000
NOP
BPL WNORL5
AND #$08
BEQ WNORL5
LDA #$F0
STA $8000
LDA ($80),Y
CMP ($60),Y
BNE WNORL2
WNORL4
INY
BNE WNORL6
inc $61
inc $81
lda $61
cmp #$38
BNE WNORL6
WNORL2:
CLI
RTS
ShowWorking
LDA $91
PHA
LDA $92
pha
LDA $40
AND #$03
TAX
LDA ShowWorkingTxt,x
STA $02f7
INT $c719
INC $40
PLA
STA $92
PLA
sta $91
rts
ShowWorkingTxt
.db "/|\-" |
|