易码技术论坛

 找回密码
 加入易码
搜索
查看: 730212|回复: 15

[源码] [求助]怎样写checksun校正程序?

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

本版积分规则

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

GMT+8, 2024-4-19 03:00 , Processed in 0.014232 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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