貌似808与Tc1000写nor的代码很相似的。 NO,TC1000与TC808,还有TC1000S全都不一样,TC808在$OA=?0时的$C505,而TC1000则在$C4F1左右,而TC1000S则在$C4F4! 楼上请注意我的用语:“将写checksum的程序载入并执行的代码”。
不一样的只有checksum校验代码的起止位置。当然那个“写”应该是“算”。
算checksum的代码在TC808,TC1000,TC1000S,NC2600,NC3000中的长度都是一样的。不一样的只有需要验校的页数。由于是从本机载入,不一样也变成一样了,只要把载入地址一改即可。
我本来想说貌似808与Tc1000写nor的代码是一样的。不过当时少打了几个字。 引用第1楼dragon_于2007-01-24 20:45发表的“”:
楼主不是移植了backnor吗?那里面就有把算checksum的程序载入并执行的代码。从代码入口就能找到了……
貌似808与Tc1000写nor的代码很相似的。
这个我知道,但我不知道怎样计算checksun,808的代码1000用不成! 貌似Q某以前写过一篇计算checksun的文章,LS可以找一下的! 直接反系统内核checksun的程序段 其实Tc808与Tc1000的代码只有一点不同,那就是nor校验的起止页数。直接反系统内核checksun的程序段肯定能找出这个不同之处的。不过我当时找代码找得也很辛苦。 编程要有耐力啊 LEE说的在理,呵呵 记得NC2600的NOR备份.bin 的源码里有这段代码 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;系统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:LDA $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 "/|\-" 立天的代码好整齐啊.... 有源代码啊
谢谢Loading 以前的2600还在 不过用了1000S后感觉它太慢 就搁在家里了 估计现在电池已经出水了 呵呵 出水?那种电池……不太可能!
[求助]怎样写checksun校正程序?
如果这个问题解决了,tc1000的wqxhex就可以发布了!
页:
[1]