?? boot_v2.a66
字號:
; Set FCONCS2 register
_FCS2 SET (_BTYP2<<4) OR (_RDYMOD2<<2) OR (_RDYEN2<<1) OR (_ENCS2)
MOV R0,#_FCS2
MOV FCONCS2,R0
$ENDIF
$IF (CONFIG_CS3)
; Set TCONCS3 register
_TCS3 SET (_PHD3<<5) OR (_PHC3<<3) OR (_PHB3<<2) OR (_PHA3)
_TCS3 SET _TCS3 OR (_WRPHF3<<13) OR (_RDPHF3<<11) OR (_PHE3<<6)
MOV R0,#_TCS3
MOV TCONCS3,R0
; Set ADDRSEL3 register
CALC_ADDRSEL _ADDRSEL3, _ADDR3, _SIZE3
MOV R0,#_ADDRSEL3
MOV ADDRSEL3,R0
; Set FCONCS3 register
_FCS3 SET (_BTYP3<<4) OR (_RDYMOD3<<2) OR (_RDYEN3<<1) OR (_ENCS3)
MOV R0,#_FCS3
MOV FCONCS3,R0
$ENDIF
$IF (CONFIG_CS4)
; Set TCONCS4 register
_TCS4 SET (_PHD4<<5) OR (_PHC4<<3) OR (_PHB4<<2) OR (_PHA4)
_TCS4 SET _TCS4 OR (_WRPHF4<<13) OR (_RDPHF4<<11) OR (_PHE4<<6)
MOV R0,#_TCS4
MOV TCONCS4,R0
; Set ADDRSEL4 register
CALC_ADDRSEL _ADDRSEL4, _ADDR4, _SIZE4
MOV R0,#_ADDRSEL4
MOV ADDRSEL4,R0
; Set FCONCS4 register
_FCS4 SET (_BTYP4<<4) OR (_RDYMOD4<<2) OR (_RDYEN4<<1) OR (_ENCS4)
MOV R0,#_FCS4
MOV FCONCS4,R0
$ENDIF
$IF (CONFIG_CS5)
; Set TCONCS5 register
_TCS5 SET (_PHD5<<5) OR (_PHC5<<3) OR (_PHB5<<2) OR (_PHA5)
_TCS5 SET _TCS5 OR (_WRPHF5<<13) OR (_RDPHF5<<11) OR (_PHE5<<6)
MOV R0,#_TCS5
MOV TCONCS5,R0
; Set ADDRSEL5 register
CALC_ADDRSEL _ADDRSEL5, _ADDR5, _SIZE5
MOV R0,#_ADDRSEL5
MOV ADDRSEL5,R0
; Set FCONCS5 register
_FCS5 SET (_BTYP5<<4) OR (_RDYMOD5<<2) OR (_RDYEN5<<1) OR (_ENCS5)
MOV R0,#_FCS5
MOV FCONCS5,R0
$ENDIF
$IF (CONFIG_CS6)
; Set TCONCS6 register
_TCS6 SET (_PHD6<<5) OR (_PHC6<<3) OR (_PHB6<<2) OR (_PHA6)
_TCS6 SET _TCS6 OR (_WRPHF6<<13) OR (_RDPHF6<<11) OR (_PHE6<<6)
MOV R0,#_TCS6
MOV TCONCS6,R0
; Set ADDRSEL6 register
CALC_ADDRSEL _ADDRSEL6, _ADDR6, _SIZE6
MOV R0,#_ADDRSEL6
MOV ADDRSEL6,R0
; Set FCONCS6 register
_FCS6 SET (_BTYP6<<4) OR (_RDYMOD6<<2) OR (_RDYEN6<<1) OR (_ENCS6)
MOV R0,#_FCS6
MOV FCONCS6,R0
$ENDIF
$IF (CONFIG_CS7)
; Set TCONCS7 register
_TCS7 SET (_PHD7<<5) OR (_PHC7<<3) OR (_PHB7<<2) OR (_PHA7)
_TCS7 SET _TCS7 OR (_WRPHF7<<13) OR (_RDPHF7<<11) OR (_PHE7<<6)
MOV R0,#_TCS7
MOV TCONCS7,R0
; Set ADDRSEL7 register
CALC_ADDRSEL _ADDRSEL7, _ADDR7, _SIZE7
MOV R0,#_ADDRSEL7
MOV ADDRSEL7,R0
; Set FCONCS7 register
_FCS7 SET (_BTYP7<<4) OR (_RDYMOD7<<2) OR (_RDYEN7<<1) OR (_ENCS7)
MOV R0,#_FCS7
MOV FCONCS7,R0
$ENDIF
$IF (INIT_RSTCON = 1) ; Set RSTCON register
_RSTCON SET (_ROCOFF<<5) OR (_RORMV<<4) OR (_RSTLEN)
_RSTCON SET _RSTCON OR (_RODIS<<7) OR (_ROCON<<6)
MOV R0,#_RSTCON
MOV RSTCON,R0
$ENDIF
$IF (INIT_PLLCON = 1) ; Set PLLCON register
_PLLCON SET (_PLLVB<<6) OR (_PLLIDIV<<4) OR (_PLLODIV)
_PLLCON SET _PLLCON OR (_PLLWRI<<15) OR (_PLLCTRL<<13) OR (_PLLMUL<<8)
EXTR #01H ; Extended SFR access
MOV PLLCON,#_PLLCON
$ENDIF
$IF (INIT_FOCON = 1) ; Set FOCON register
_FOCON SET (_CLKEN<<7) OR (_FORV<<8) OR (_FOSS<<14) OR (_FOEN<<15)
MOV FOCON,#_FOCON
$ENDIF
;
; Set VECSEG register
MOV VECSEG,#INT_ADR_SEG
EINIT
CMD_LOOP: CALL GETCHAR ; GETCHAR
CMPB RL4,#WR_MEM ; MEMORY WRITE
JMPR CC_EQ,WRITE_MEM
CMPB RL4,#GO_COMMAND ; START MONITOR
JMPR CC_EQ,START_MON
CMPB RL4,#GET_MON_SUM ; MONITOR LOADED?
JMPR CC_EQ,MON_CHECKSUM
MOV R4,#00ABH ; SEND A SYNC 0xAB to mark C166V2!
CALL PUTCHAR ; PUTCHAR
JMPR CC_UC,CMD_LOOP
START_MON: MOV R14,#GO_COMMAND ; START MONITOR
CALL GETCHAR
MOVBZ R5,RL4
CALL GETCHAR
MOV RH6,RL4
CALL GETCHAR
MOV RL6,RL4
CALL GETCHAR
CALL GETCHAR
CALL GETCHAR
CALL GETCHAR ; READ FOR CHECKSUM
MOV R15,#E_CHECKSUM
AND R14,#00FFH
JMP CC_NZ,STATUS_MSG
MOV R4,#ACK ; SEND STATUS OK
CALL PUTCHAR
PUSH R5 ; INDIRECT JUMP SEGMENTED
PUSH R6
; RETS
DB 0DBH, 000H ; CODE FOR RETS TO AVOID WARNING
MON_CHECKSUM: MOV R14,#GET_MON_SUM ; check if monitor already
CALL GETCHAR ; present
MOVBZ R5,RL4
CALL GETCHAR
MOV RH1,RL4
CALL GETCHAR
MOV RL1,RL4
CALL GETCHAR
MOV RH7,RL4
CALL GETCHAR
MOV RL7,RL4
CALL GETCHAR
MOV R15,#E_CHECKSUM
AND R14,#00FFH
JMP CC_NZ,STATUS_MSG
MOV R3,#0
MC_1: EXTS R5,#1
ADD R3,[R1+] ; no overflow possible
SUB R7,#2
JMP CC_UGT,MC_1
MOV R14,ZEROS
MOV R4,#STX
CALL PUTCHAR
MOV RL4,#02 ; length of error message
CALL PUTCHAR
MOV RL4,RH3
CALL PUTCHAR
MOV RL4,RL3
CALL PUTCHAR
MOV R4,ZEROS
SUB R4,R14 ; CALCULATE CHECKSUM
CALL PUTCHAR
JMP CC_UC,CMD_LOOP
WRITE_MEM: MOV R14,#WR_MEM ; DELETE CHECKSUM
CALL GETCHAR
MOVBZ R5,RL4
CALL GETCHAR
MOV RH6,RL4
CALL GETCHAR
MOV RL6,RL4
CALL GETCHAR
MOV RL7,RL4
MOV R15,#E_NORAM ; ERROR: NO MEMORY AT ADDRESS
WM_1: CALL GETCHAR
EXTS R5,#2
MOVB [R6],RL4
MOVB RL3,[R6]
CMP RL3,RL4
JMP CC_NE,STATUS_MSG
ADD R6,#1
ADDC RL5,#0
SUB RL7,#1
JMP CC_NZ,WM_1
CALL GETCHAR ; READ FOR CHECKSUM
AND R14,#00FFH
JMP CC_Z,STATUS_OK
MOV R15,#E_CHECKSUM
; JMP CC_UC,STATUS_MSG
STATUS_MSG: MOV R14,ZEROS
MOV R4,#NACK
CALL PUTCHAR
MOV RL4,#01 ; length of error message
CALL PUTCHAR
MOV R4,R15
CALL PUTCHAR
MOV R4,ZEROS
SUB R4,R14 ; CALCULATE CHECKSUM
CALL PUTCHAR
JMP CC_UC,CMD_LOOP
STATUS_OK: MOV R4,#ACK
CALL PUTCHAR
JMP CC_UC,CMD_LOOP
START2 ENDP
; RETURN VALUE IN RL4
GETCHAR PROC NEAR
JNB S0RIC.7,$
BCLR S0RIC.7
MOVB RL4,S0RBUF
ADD R14,R4 ; R14 = CHECKSUM
RET
GETCHAR ENDP
; VALUE IN RL4
PUTCHAR PROC NEAR
JNB S0TIR,$
BCLR S0TIR
MOVBZ R4,RL4
MOV S0TBUF,R4
ADD R14,R4 ; R14 = CHECKSUM
RET
ENDBOOT:
PUTCHAR ENDP
BOOTSTRAP ENDS
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -