dragon_ 发表于 2007-1-24 20:45:12

楼主不是移植了backnor吗?那里面就有把算checksum的程序载入并执行的代码。从代码入口就能找到了……
貌似808与Tc1000写nor的代码很相似的。

markliteng 发表于 2007-1-24 21:31:13

NO,TC1000与TC808,还有TC1000S全都不一样,TC808在$OA=?0时的$C505,而TC1000则在$C4F1左右,而TC1000S则在$C4F4!

dragon_ 发表于 2007-1-24 23:07:14

楼上请注意我的用语:“将写checksum的程序载入并执行的代码”。
不一样的只有checksum校验代码的起止位置。当然那个“写”应该是“算”。
算checksum的代码在TC808,TC1000,TC1000S,NC2600,NC3000中的长度都是一样的。不一样的只有需要验校的页数。由于是从本机载入,不一样也变成一样了,只要把载入地址一改即可。
我本来想说貌似808与Tc1000写nor的代码是一样的。不过当时少打了几个字。

POTO 发表于 2007-1-25 14:52:03

引用第1楼dragon_于2007-01-24 20:45发表的“”:
楼主不是移植了backnor吗?那里面就有把算checksum的程序载入并执行的代码。从代码入口就能找到了……
貌似808与Tc1000写nor的代码很相似的。
这个我知道,但我不知道怎样计算checksun,808的代码1000用不成!

Isword 发表于 2007-1-25 15:10:13

貌似Q某以前写过一篇计算checksun的文章,LS可以找一下的!

yoyohenry 发表于 2007-1-25 20:43:12

直接反系统内核checksun的程序段

dragon_ 发表于 2007-1-25 21:33:42

其实Tc808与Tc1000的代码只有一点不同,那就是nor校验的起止页数。直接反系统内核checksun的程序段肯定能找出这个不同之处的。不过我当时找代码找得也很辛苦。

leesoft 发表于 2007-1-25 21:43:31

编程要有耐力啊

shenji 发表于 2007-1-27 13:23:27

LEE说的在理,呵呵

Loading 发表于 2007-2-22 13:25:48

记得NC2600的NOR备份.bin 的源码里有这段代码

Loading 发表于 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: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 "/|\-"

markliteng 发表于 2007-5-3 20:08:15

立天的代码好整齐啊....

POTO 发表于 2007-5-3 20:39:59

有源代码啊
谢谢Loading

Loading 发表于 2007-7-7 21:51:41

以前的2600还在 不过用了1000S后感觉它太慢 就搁在家里了 估计现在电池已经出水了 呵呵

POTO 发表于 2007-7-8 18:40:02

出水?那种电池……不太可能!

POTO 发表于 2007-1-24 18:13:59

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

如果这个问题解决了,tc1000的wqxhex就可以发布了!
页: [1]
查看完整版本: [求助]怎样写checksun校正程序?