Originally Posted by
kur4o
If there is no space just use what is possible, In the end it will be much easier to add different reading format on the app side than mod the pcm side to cover the existing one.
Done. Here is my proposed code. Execute and it sends 447 $80 byte messages with the reply $06 $55 and the last one is marked $06 $A0
Code:
D_SEND_ALDL EQU $0008 ; SEND ALDL MESSAGE
D_RESET_COP EQU $000B ; RESET COP TIMERS
D_F_OE_ACTIVE EQU $000E ; MAKE FLASH OE ACTIVE
D_F_OE_INACTIVE EQU $0011 ; MAKE FLASH OE INACTIVE
D_N_X_1MS_DELAY EQU $0014 ; DELAY: 1MS * ACCA
D_D10MS_DELAY EQU $0017 ; 10MS DELAY
D_CHK_CLR_OC1 EQU $001A ; CHECK AND CLEAR OC1
D_INIT_OC1_20MS EQU $001D ; INITIALIZE OC1: 20MS
D_SUCCESS_MSG EQU $0020 ; SEND SUCCESS MESSAGE
D_SET_VPPH EQU $0023 ; SET VPP TO VPPH: 12V
D_SET_VPPL EQU $0026 ; SET VPP TO VPPL
D_FLASH_IDMC EQU $0029 ; READ FLASH ID, MANUFACTURE CODES
ORG $0000 ; SET ORIGIN
START DB $E4 ; TARGET DEVICE
DB $8A ; LENGTH
DB $06 ; UPLOAD AND EXECUTE PROGRAM SEGMENT
DB $18 ; ADDRESS H
DB $10 ; ADDRESS L
LDY #$2000 ; INITIAL LOCATION LESS $80
NEXT_BLOCK LDX #$1F7E ; BUFFER
LDD #$06AA ; MODE:MESSAGE SUCCESS
CPY #$FF80 ;
BEQ XFER_LAST ;
LDD #$0655 ; MODE:MESSAGE PENDING
XFER_LAST STD $00,X ; SET MESSAGE CONTENT
LDAB #$80 ; SET THE BYTE COUNT
CPY #$0000 ; TEST FOR COMPLETE
BEQ COMPLETE ;
XFER_LOOP LDAA $00,Y ; READ FLASH
STAA $02,X ; SAVE TO BUFFER
INY ; INCREMENT SOURCE
INX ; INCREMENT DESTINATION
DECB ; DECREMENT COUNT
BNE XFER_LOOP ; LOOP TILL ZERO
LDX #$1F7E ; BUFFER HEAD
LDAB #$82 ; MESSAGE CONTENT LENGTH
JSR $0008 ; D_SEND_ALDL
BRA NEXT_BLOCK ;
COMPLETE RTS ;
DB $69 ; CHECKSUM
END START
-Tom
Bookmarks