📄 main.asm
字号:
;*******************************************************************
;* This stationery serves as the framework for a user application. *
;* For a more comprehensive program that demonstrates the more *
;* advanced functionality of this processor, please see the *
;* demonstration applications, located in the examples *
;* subdirectory of the "Freescale CodeWarrior for HC08" program *
;* directory. *
;*******************************************************************
;*Include derivative-specific definitions
;* INCLUDE 'derivative.inc'
; export symbols
;* XDEF _Startup, main
; we export both '_Startup' and 'main' as symbols. Either can
; be referenced in the linker .prm file or from C/C++ later on
;* XREF __SEG_END_SSTACK ; symbol defined by the linker for the end of the stack
; variable/data section
;*MY_ZEROPAGE: SECTION SHORT ; Insert here your data definition
; code section
;*MyCode: SECTION
;*main:
;*_Startup:
;* LDHX #__SEG_END_SSTACK ; initialize the stack pointer
;* TXS
;* CLI ; enable interrupts
;*mainLoop:
;* ; Insert your code here
;* NOP
;* feed_watchdog
;* BRA mainLoop
;****************************************************************
;*
;* Tsinghua Motorola MCU/DSP Application Center
;* Monitor Program for MC68HC90GP32
;* V.1.1
;* All right Reserved
;* The debug originally for MC6805E2 made by Shao Beibei in 1982
;* Chen yong ported it to MCHC908MP16
;* Wang Yunfei & Xue Tao ported it to 68HC908Gp32
;* Gong Hui simplified it(remove the asm/dasm
;* Hou Lie made comments and some more modiffcation
;*
;****************************************************************
;*
;**=====================Registers=====================
;*
PRRTA EQU $0000
PRRTB EQU $0001
PRRTC EQU $0002
PRRTD EQU $0003
DDRA EQU $0004
DDRB EQU $0005
DDRC EQU $0006
DDRD EQU $0007
PORTE EQU $0008
;*
;**=======================SPI==========================
;*
SPCR EQU $0010
SPSCR EQU $0011
B_SPTE EQU 3
SPDR EQU $0012
;*
;**=======================SCI==========================
;*
SCCR1 EQU $0013
B_LOOPS EQU 7
B_ENSCI EQU 6
B_TXINV EQU 5
B_M EQU 4
B_WAKE EQU 3
B_ILTY EQU 2
B_PEN EQU 1
B_PTY EQU 0
;*
SCCR2 EQU $0014
B_SCTIE EQU 7
B_TCIE EQU 6
B_SCRIE EQU 5
B_ILIE EQU 4
B_TE EQU 3
B_RE EQU 2
B_RWU EQU 1
B_SBK EQU 0
;*
SCSR EQU $0016
B_TDRF EQU 7
B_TC EQU 6
B_RDRF EQU 5
;*
SCDR EQU $0018
BAUD EQU $0019
;*
CONFIG1 EQU $001E
CONFIG1 EQU $001F
;*
T1SC EQU $0020
T1MODH EQU $0023
T1MODL EQU $0024
;*
PCTL EQU $0036
B_PLLON EQU 5
B_BCS EQU 4
PBWC EQU $0037
B_AUTO EQU 7
B_LOCK EQU 6
PMSH EQU $0038
PMSL EQU $0039
PMRS EQU $003A
PMDS EQU $003B
;*
RAM_BEGIN EQU $0040
RAM_END EQU $0240
ROM_BEGIN EQU $8000
ROM_END EQU $E000
MON_BEGIN EQU $E000
;*
SBSR EQU $FE00
B_BW EQU 1
SBFCR EQU $FE03
B_BCFE EQU 7
BRKH EQU $FE09
BRKL EQU $FE0A
BRKSCR EQU $FE0B
B_BRKE EQU $7
B_BRKA EQU 6
;*
FLCR EQU $FE08
FLBPR EQU $FF7E
VectorStart EQU $FFDC
;*
PROG_BEGIN EQU $0100
PROG_BEGIN2 EQU $010D
PAGE_BEGIN EQU $0180
;*
;*=================Equivalents For ASCII Keycodes==============*
;*
CTRLA EQU $01
CTRLC EQU $03
CTRLP EQU $10
CTRLX EQU $18
QUIT EQU $2E
BKSP EQU $08
CR EQU $0D
LF EQU $0A
;*=====================Ram Variables====================*
ORG RAM_BEGIN
BUFF RMB 6
MIRR_A RMB 1 ;The Mirror of A Register
MIRR_H RMB 1 ;The Mirror of H Register
MIRR_X RMB 1 ;The Mirror of X Register
MIRR_PC RMB 2 ;The Mirror of PC Register
MIRR_CC RMB 1 ;The Mirror of CC Register
MIRR_SP RMB 2 ;The Mirror of SP Register
FLAG RMB 1
GO_FLAG RMB 1
TEMP RMB 2
INTJMP RMB 3
ERASEBEGIN RMB 2
;*
FLASHFLAG RMB 1
B_ERROR EQU 0
;*
C5USH RMB 1
C5USL RMB 1
C10USH RMB 1
C10USL RMB 1
C30USH RMB 1
C30USL RMB 1
C50USH RMB 1
C50USL RMB 1
C1MSH RMB 1
C1MSL RMB 1
;*
TEMPH RMB 2 ;Temp Buffer for Copy Flash Program To Ram
TEMP2 RMB 2
RAM50 RMB 1
BUFFCOU RMB 2
;*
COUNTE1 RMB 1
COUNTE2 RMB 1
PRADDR RMB 2
;*
PROG_BUF EQU *
;*
;*=======================virtual Vectors====================*
ORG $DFDA
V_MONITOR DW INIT
V_TIMB DW $FFFF
V_ADC DW $FFFF
V_KEY DW $FFFF
V_SCI_TR DW $FFFF
V_SCI_RX DW $FFFF
V_SPI_ER DW $FFFF
V_SPI_TR DW $FFFF
V_SPI_RX DW $FFFF
V_TIM2_OV DW $FFFF
V_TIM2_CH1 DW $FFFF
V_TIM2_CH0 DW $FFFF
V_TIM1_OV DW $FFFF
V_TIM1_CH1 DW $FFFF
V_TIM1_CH0 DW $FFFF
V_PLL DW $FFFF
V_IRQ DW $FFFF
V_SWI DW $FFFF
V_RESET DW $8000
;*
;**========================Main Program======================**
;*
ORG MON_BEGIN
RESET_INIT:
SEI
LDHX #$023F ;Ste the SP Register
TXS
LDA #$01 ;Init CONFIG Regisiter
STA CONFIG1
LDA #$3D
STA CONFIG2
;*========================Initial CGMC=======================**
;Set Fbus=2.4576MHz
CLR PCTL
MOV #$01,PCTL ;SET P=0 E=1,Close PLL,Use CGMXCLK
LDA #$01 ;SET N300
STA PMSH
LDA #$2c
STA PMSL
LDA #$80 ;SET L=128
STA PMRS
LDA #$01 ;SET R=1
STA PMDS
BSET B_PLLON,PCTL ;Open PLL
BSET B_AUTO,PBWC ;Set AUTO
BRCLR B_LOCK,PBWC ;Wait Until PLL Stable
BSET B_BCS,PCTL ;Use PLL
;*=================Initialize For Main Program===============*
INIT:
LDA #$00
STA GO_FLAG
;*======================Initial SCI==========================*
LDA #$02
STA BAUD
BSET B_ENSCI,SCCR1 ;Enable sci
BSET B_TE,SCCR2
BSET B_RE,SCCR2 ;Enable Transmitter and receiver
;*====================Breakpoint Init========================*
LDA #%00000000
STA BRKSCR
LDA #%00010000
STA SBSR
LDA #%10000000
STA SBFCR
;*=======================PORT Init===========================*
LDA V_RESET
CMP #$FF
BNE ENTER_CHOICE
LDX V_RESET+1
CPX #$FF
BEQ ENTER_MON
ENTER_CHOICE:
LDHX #$00
DIS_WAIT:
LDA WAITPROMPT,X
AIX #1
CMP #$04
BEQ WAIT_KEY
JSR OUTCH
BRA DIS_WAIT
WAITPROMPT:
FCB $0D,$0A,$0D,$0A ;CR,LF,CR,LF
FCB "Waiting for key press"
FCB $04
WAIT_KEY:
LDA #$11
STA FLAG
LDHX #$C814 ;25*200=5S
STHX TEMP
LDA #%01010000 ;Enable Reset Prescaler,Divided by 1
STA T1SC
LDHX #$F000 ;25ms Timer Interrupt
STHX T1MODH
CLI
JSR INCH ;Try To Receive
WAIT_SUCCESS: ;Receive Code,Start User's Program
CLR FLAG
LDA #%00100000 ;Disable
STA T1SC
LDHX #$FFFF ;Change T1MODH To $FFFF
STHX T1MODH
BRA ENTER_MON
WAIT_FAIL: ;No Code Receive,Start Mon-Program
CLR FLAG
LDA #%00100000
STA T1SC
LDHX #$FFFF
STHX T1MODH
LDA V_RESET
LDX V_RESET+1
STA INTJMP+1
STX INTJMP+2
LDA #$CC ;Opcode For<JMP addr16>
STA INTJMP
JMP INTJMP
ENTER_MON:
LDHX #$00 ;Display Prompt message
DISPMT: ;****
LDA PROMPT,X
AIX #1
CMP #$04
BEQ INIRAM
JSR OUTCH
BRA DISPMT
PROMPT: ;****
FCB $0D,$0A,$0D,$0A ;CR,LF,CR,LF
FCB "Tsingghua Motorola MCU center IDK debug V.1.1."
FCB "All right reserved"
FCB "Type"
FCB "."
FCB "H"
FCB "."
FCB "for help......what ecer you like"
FCB $04
;*
INIRAM:
STA MIRR_A
STHX MIRR_H
LDA #$00
STA MIRR_PC
STA MIRR_PC+1
TSX
STHX MIRR_SP
CLR FLAG
LDA #$E8
STA MIRR_CC
LDA #$CC ;Opcode for<JMP addr16>
STA INTJMP
;*
;**=======================Main Loop=======================**
;*
CMDLOOP:
JSR CRLF ;Outpur Cr(Enter)And LF
LDA #'>'
JSR OUTCH ;Display Prompt
IGNORE_0A:
JSR INCH
CMP #$0D ;If Input Is 'ENTER', Loop Again
BEQ CMDLOOP
CMP #$0A ;If Input 'LF',Receive Again
BEQ IGNORE_0A
TAX
CMP #$20 ;Other Code Lower Than $20 Are 'CTRL+*'
BHS PCMD
LDA #'^'
JSR OUTCH ;'CTRL+*'='CTRL'-$40
TXA ;Restore A From X
ADD #$40
PCMD: ;****
JSR OUTCH ;Output '*'
LDA #''
JSR OUTCH
TXA
LDHX #$00 ;****
NEXTCH: ;Judge What Order It Is
CMP JMPTAB,X
BEQ JCMD
AIX #4
CPHX #(TABEND-JMPTAB)
BLO NEXTCH
LDHX #$00
WHAT: LDA MSG1,X ;****Output 'what?',If Not The Order Defined
AIX #1
CMP #$04
BEQ CMDLOOP
JSR OUTCH
BRA WHAT
MSG1: FCB "What?"
FCB $04
JCMD: ;****
AIX #1 ;To The According Routine
JSR JMPTAB,X
JMP CMDLOOP
JMPTAB: FCB CTRLA ;****
JMP CHG_A
FCB CTRLX
JMP CHG_X
FCB CTRLP
JMP CHG_PC
FCB CTRLC
JMP CHG_CC
FCB 'H'
JMP HELP
FCB 'G'
JMP CMD_GO
FCB 'D'
JMP MDUMP
FCB 'M'
JMP MEMCHG
FCB 'R'
JMP REGDSP
FCB 'B'
JMP IN_BKPT
FCB 'E'
JMP ERASE
FCB 'L'
JMP DOWNLDFLASH
;*
TABEND EQU *
;*
CHG_A:
JSR PRT_A ;Output 'A=*'
JSR OUTDOT ;Output '.'
JSR IN2H ;Input The New Code For Register A
BCS CA1 ;If The Code Is Not Proper,Not Store
STA MIRR_A ;If The Code Is Proper,Store
CA1: RTS
;*
CHG_X: JSR PRT_X
JSR OUTDOT
JSR IN4H
BCS CX1
STX MIRR_H
STA MIRR_X
CX1: RTS
;*
CHG_PC: JSR PRT_PC
JSR OUTDOT
JSR IN4H
BCS CP1
STX MIRR_PC
STA MIRR_PC+1
CP1: RTS
;*
CHG_CC: JSR PRT_CC
JSR OUTDOT
JSR IN2H
BCS CC1
STA MIEE_CC
CC1: RTS
;*===============================================================
;* TMIE TABLE FOR FLASH ROUTINES
;* ( Constants For Fbus=9.8304M)
;*===============================================================
STE_TIME_TABLE:
MOV #$FF,C5USH ;Set For 5uS Delay
MOV #$F9,C5USL
MOV #$FF,C10USH ;Set For 10uS Delay
MOV #$F4,C10USL
MOV #$FF,C30USH ;Set For 30uS Delay
MOV #$DB,C30USL
MOV #$FF,C50USH ;Set For 50uS Delay
MOV #$C3,C50USL
MOV #$FB,C1MSH ;Set For 5mS Delay
MOV #$33,C1MSL
RTS
USER_MEMCHG:
LDA #$FF ;FLAG=$FF
STA FLAG
JMP USERMEM2
;***************************************************************
;* COMMAND 'M' :Examine and Change Memory Byte by Byte
;*
;***************************************************************
MEMCHG: JSR IN4H ;Input Address****
BCS MCX
STX BUFF+1
STA BUFF+2
CLR FLAG ;FLAG=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -