Hi,
Started looking at the FLASH code. It is just what would be expected (for once). I am slowly working through some of the routines. I began with the '95 code because it is based on ALDL. For those with bricked modules who would like to revive them using bootstrap, these are the routines you will need.
A quick update on some of what I am looking at: I have found a number of sent messages and a sequence for receive. Do we know all the messages for modes 5 & 6 of aldl?
I have gone through the checksum section and found a message: 06 AA <checksum> . I believe length is inserted and the message becomes a mode 6 with content of AA <checksum> . Sound right??
Here is that section of code:
Code:
*************************************************
* CHECKSUM
*************************************************
1C2E FE 1C 7A LDX $1C7A ; CHECKSUM RANGE END ADDRESS
1C31 FF 1C 7C STX $1C7C ; COPY END ADDRESS
1C34 FE 1C 78 LDX $1C78 ; CHECKSUM RANGE START ADDRESS
1C37 CC 00 00 LDD #$0000 ; INITIAL VALUE OF SUM IS ZERO
1C3A 18 CE 05 DC LDY #$05DC ; WATCHDOG REFRESH COUNT:1500
1C3E 09 DEX ; START -1
1C3F 08 INX ; NEXT BYTE
1C40 EB 00 ADDB $00,X ; KEEP SUM IN ACCD
1C42 89 00 ADCA #$00 ; ADJUST FOR CARRY OUT OF LS
1C44 18 09 DEY ; DECREMENT WATCHDOG REFRESH COUNTER
1C46 26 06 BNE $1C4E ; COUNTER NOT EXPIRED
1C48 9D 17 JSR @$17 ; RESET WATCHDOG TIMERS
1C4A 18 CE 05 DC LDY #$05DC ; WATCHDOG REFRESH COUNT:1500
1C4E BC 1C 7C CPX $1C7C ; LAST BYTE OF CHECKSUM
1C51 26 EC BNE $1C3F ; LOOP THROUGH BLOCK
1C53 3C PSHX ; DECREMENT STACK 4 PLACES
1C54 3C PSHX ;
1C55 30 TSX ; INDEX TO STACK
1C56 ED 02 STD $02,X ; OVERWRITE WITH MESSAGE MODE
1C58 CC 06 AA LDD #$06AA ; MODE 6 MESSAGE: UPLOAD,EXECUTE PROGRAM
1C5B ED 00 STD $00,X ;
1C5D C6 04 LDAB #$04 ; MESSAGE CONTENT, 4 BYTES: CHECKSUM
1C5F 9D 14 JSR @$14 ; SEND CHECKSUM MESSAGE
1C61 38 PULX ; RESTORE STACK POSITION
1C62 38 PULX ;
1C63 39 RTS ; DONE
1C64 00 00 ;
*************************************************
* DO NOT REFERENCE $1C75: LIKELY CRASH SITE
*************************************************
1C75 BD 1C 2E JSR $1C2E ; NOT REFERENCED
1C78 0000 ; CHECKSUM RANGE START
1C7A 0000 ; CHECKSUM RANGE END
1C7C 0000 ; WORKING CHECKSUM RANGE END
* NEXT BYTE IS INTERESTING IN THAT IT IS NOT
* REFERENCED BY CODE. I BELIEVE THAT THIS IS
* A MISPLACED INSTRUCTION "RTS" THAT IS INTENDED
* TO BE PAIRED WITH THE CODE AT $1C75. IN ANY
* CASE IT IS UNUSED AND AS LONG AS $1C75 IS
* NEVER REFERENCED, IT WILL NOT CAUSE HARM.
* IF $1C75 IS REFERENCED, THE CPU WILL INTERPRET
* THE RANGE START/END AS CODE AND CRASH.
1C7E 39 ; NOT REFERENCED
-Tom
Bookmarks