📄 main.asm
字号:
CMP #$11
BLO NOTHEX
SUB #$07
CMP #$0F
BLS ISHEX
NOTHEX:SEC ;****
RTS
ISHEX: CLC ;****
RTS
IN4H: ;****Input 4 Codes To A:X,And Display
JSR IN2H
BCS IN2HX
TAX
IN2H: ;****Input 2 Codes To A-Reg,And Display
JSR INHEX
BCS IN2HX
ASLA
ASLA
ASLA
ASLA
STA TEMP
JSR INHEX
BCS IN2HX
ADD TEMP
IN2HX: RTS ;****
INHEXUSER: ;****Input a Code To A-Reg,Not Display
JSR INCH ;While Input To '0~F','0~F',C=0
CMP #$30
BLO NOTHEXUSER
SUB #$30
CMP #$09
BLS ISHEXUSER
CMP #$11
BLO NOTHEXUSER
SUB #$07
CMP #$0F
BLS ISHEXUSER
NOTHEXUSER: ;****
SEC
RTS
ISHEXUSER: ;****
CLC
RTS
IN2HNE: ;Input 2 Codes To A-Reg,Not Display
JSR INHEXUSER
BCS IN2HEO
ASLA
ASLA
ASLA
ASLA
STA TEMP
JSR INHEXUSER
BCS IN2HEO
ADD TEMP
IN2HEO: ;****
RTS
OUT4H: ;****Output 4 Codes In A:X
STA TEMP
TXA
LDX TEMP
BSR OUT2H
TXA
OUT2H: ;Output 2 Codes In A-Reg
STA TEMP
LSRA
LSRA
LSRA
LSRA
JSR OUT1H
LDA TEMP
AND #$0F
OUT1H: ;****Output a Code In A-Reg
ADD #$30
CMP #$39
BLS OUTIT
ADD #$07
OUTIT: JMP OUTCH ;****
;*
INCH: ;****Input a Code To A-Reg,Not Display
BRCLR B_RDRF,SCSR,INCH ;Test RDRF (b_5) Bit Until It's Set
LDA SCDR
RTS
INCHE: ;****Input a Code To A-Reg,And Display
BSR INCH
BSR OUTCH
RTS
OUTCH: ;Output The Data In A-Reg
BRCLR B_TDRF,SCSR,OUTCH
STA SCDR
RTS
CRLF: EQU* ;****Output CR And LF
PSHA
LDA #CR
BSR OUTCH
LDA #LF
BSR OUTCH
PULA
RTS
OUT4SP:JSR OUT2SP ;****Output 4 Spaces
OUT2SP:JSR OUT1SP ;****Output 2 Spaces
OUT1SP:LDA #'' ;****Output a Spaces
JSR OUTCH
RTS
OUTDOT:LDA #'.' ;****
JSR OUTCH
RTS
;*=============================================================
;* Interrupt Service Routine for SWI
;*=============================================================
SWI2: STHX MIRR_H ;****
PSHH ;SP=SP0-1
JSR FINDSP ;SP=SP0-1-2=SP0-3
LDHX TEMP ;TEMP=SP0-1
AIX #1 ;H;X=SP0
STHX MIRR_SP ;H:X=SP0
;*
LDA 0,X ;Store Register's Meanings In Stack
STA MIRR_CC ;To MIRROR In RAM
LDA 1,X
STA MIRR_A
LDA 2,X
STA MIRR_X
LDA 4,X
STA MIRR_PC+1
LDA 3,X
STA MIRR_PC
LDA #{CMDLOOP/$100} ;Change PC In Stack With CMDLOOP's PC
STA 3,X ;To Return To Main Loop
LDA #{CMDLOOP%$100}
STA 4,X
;*
LDHX #$00
BK1: LDA BKPMSG,X ;****Output String BKPMSG
CMP #$04
BEQ BK2
JSR OUTCH
AIX #1
BRA BK1
BK2: JSR REGDSP ;****'R' Interrupt Service Routine
SWIX: LDA #$00 ;****
STA BRKSCR ;Disable BREAK Interrupt
PULH
RTI
BKPMSG: ;****
FCB CR,LF
FCB "BreakPoint Encountered,Register Values:"
FCB #04
DUMMY:
RTI
;*
ISR_TIMB: ;****
LDX V_TIMB
LDA V_TIMB+1
CMP #$FF
BNE ISR_TIMB_X ;If There Is aVectorStart
CPX #$FF
BNE ISR_TIMB_X
LDX MON_DUMMY_VEC ;No VectorStart
LDA MON_DUMMY_VEC+1
ISR_TIMB_X: ;****
JMP ISRCOMM
ISR_ADC: ;****
LDX V_ADC
LDA V_ADC+1
CMP #$FF
BNE ISR_ADC_X
CPX #$FF
BNE ISR_ADC_X
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
ISR_ADC_X: ;****
JMP ISRCOMM
ISR_KEY: ;****
LDX V_KEY
LDA V_KEY+1
CMP #$FF
BNE ISR_KEY_X
CPX #$FF
BNE ISR_KEY_X
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
ISR_KEY_X: ;****
JMP ISRCOMM
ISR_SCI_TR: ;****
LDX V_SCI_TR
LDA V_SCI_TR+1
CMP #$FF
BNE ISR_SCI_TR_X
CPX #$FF
BNE ISR_SCI_TR_X
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
ISR_SCI_TR_X: ;****
JMP ISRCOMM
ISR_SCI_RX: ;****
LDX V_SCI_RX
LDA V_SCI_RX+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_SCI_ER: ;****
LDX V_SCI_ER
LDA V_SCI_ER+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_SCI_TR: ;****
LDX V_SPI_TR
LDA V_SPI_TR+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_SPI_RX: ;****
LDX V_SPI_RX
LDA V_SPI_RX+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_TIM2_OV: ;****
LDX V_TIM2_OV
LDA V_TIM2_OV+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_TIM2_CH1: ;****
LDX V_TIM2_OV
LDA V_TIM2_OV+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISRCOMM: ;****
STX INTJMP+1
STA INTJMP+2
JMP INTJMP
ISR_TIM2_CH0: ;****
LDX V_TIM2_CH0
LDA V_TIM2_CH0+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_TIM1_OV: ;****
LDA FLAG
CMP #$11
BNE ITO_NORMAL
LDA T1SC
BCLR 7_T1SC ;Reset Interrupt FLAG
DEC TEMP
LDA TEMP
BNE ITO_DISP
JMP WAIT_FAIL
ITO_DISP: ;****Used To Delay
DEC TEMP+1
BNE ITO_X
LDA #$14
STA TEMP+1
LDA #$2E
JSR OUTCH ;Output '.'
ITO_X: RTI ;****
ITO_NORMAL: ;****
LDX V_TIM1_OV
LDA V_TIM1_OV+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_TIM1_CH1: ;****
LDX V_TIM1_CH1
LDA V_TIM1_CH1+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISRC_TIM1_CH0: ;****
LDX V_TIM1_CH0
LDA V_TIM1_CH0+1
CMP #$FF
BNE ISRCOMM
CPX #$FF
BNE ISRCOMM
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
BRA ISRCOMM
ISR_PLL: ;****
LDX V_PLL
LDA V_PLL+1
CMP #$FF
BNE ISR_PLL_X
CPX #$FF
BNE ISR_PLL_X
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
ISR_IRQ: ;****
LDX V_IRQ
LDA V_IRQ+1
CMP #$FF
BNE ISR_IRQ_X
CPX #$FF
BNE ISR_IRQ_X
LDX MON_DUMMY_VEC
LDA MON_DUMMY_VEC+1
ISR_IRQ_X: ;****
JMP ISRCOMM
ISR_SWI: ;****
LDA BRKSCR
AND #%01000000 ;Check Interrupt's Reason:BRKP Or SWI?
BEQ NO_BREAK ;The Reason Is SWI
JMP SWI2 ;The Reason Is BRKP
NO_BREAK: ;****
LDA GO_FLAG
CMP #$FF
BNE NO_GO_BREAK
JMP GO1 ;GO_FLAG=$FF,GO1
NO_GO_BREACK: ;****
LDX V_SWI
LDA V_SWI+1
JMP ISRCOMM
;*
MON_DUMMY_VEC: DW DUMMY ;****
ORG $EF80
JMP INCHE
JMP INCH
JMP IN2H
JMP IN2HNE
JMP OUTCH
JMP OUT2H
JMP CRLF
JMP USER_PROGRAM
JMP USER_MEMCHG
JMP CMDLOOP
JMP INIT
;*========================Include Files=====================*
ORG FLBPR
DB $C0
ORG VECTORSTART
DW ISR_TIMB ;Time Base Vector
DW ISR_ADC ;ADC Conversion Complete
DW ISR_KEY ;Keyboard Vector
DW ISR_SCI_TR ;SCI Transmit Vector
DW ISR_SCI_RX ;SCI Receive Vector
DW ISR_SCI_ER ;SCI Error Vector
DW ISR_SPI_TR ;SPI Transmit Vector
DW ISR_SPI_RX ;SPI Receive Vector
DW ISR_TIM2_OV ;TIM2 Overflow Vector
DW ISR_TIM2_CH1 ;TIM2 Channel 1 Vector
DW ISR_TIM2_CH0 ;TIM2 Channel 0 Vector
DW ISR_TIM1_OV ;TIM1 Overflow Vector
DW ISR_TIM1_CH1 ;TIM1 Channel 1 Vector
DW ISR_TIM1_CH0 ;TIM1 Channel 0 Vector
DW ISR_PLL ;PLL Vector
DW ISR_IRQ ;IRQ1 Vector
DW ISR_SWI ;SWI Vector
DW RESET_INIT ;Reset Vector
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -