Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1186 savelij 1
                CPU     68HC12X
2
 
3
;###########################################
4
;# SYMBOLS #
5
;###########################################
6
 
7
SCI_REGS        EQU     $00C8           ;SCI register space
8
SCIBDH          EQU     SCI_REGS+$00    ;SCI Baud Rate Register
9
SCICR2          EQU     SCI_REGS+$03    ;SCI Control Register 2
10
SCISR1          EQU     SCI_REGS+$04    ;SCI Status Register 1
11
SCIDRL          EQU     SCI_REGS+$07    ;SCI Control Register 2
12
TIE             EQU     $80             ;TIE bit mask
13
TE              EQU     $08             ;TE bit mask
14
RE              EQU     $04             ;RE bit mask
15
SCI_VEC         EQU     $D6             ;SCI vector number
16
INT_REGS        EQU     $0120           ;S12X_INT register space
17
INT_CFADDR      EQU     INT_REGS+$07    ;Interrupt Configuration Address Register
18
INT_CFDATA      EQU     INT_REGS+$08    ;Interrupt Configuration Data Registers
19
RQST            EQU     $80             ;RQST bit mask
20
XGATE_REGS      EQU     $0380           ;XGATE register space
21
XGMCTL          EQU     XGATE_REGS+$00  ;XGATE Module Control Register
22
XGMCTL_CLEAR    EQU     $F902
23
XGEM            EQU     $8000
24
XGDBGM          EQU     $2000
25
XGE             EQU     $0080
26
XGDBG           EQU     $0020
27
XGSWEIF         EQU     $0002
28
XGCHID          EQU     XGATE_REGS+$02  ;XGATE Channel ID Register
29
XGVBR           EQU     XGATE_REGS+$06  ;XGATE Vector Base Register
30
XGIF            EQU     XGATE_REGS+$08  ;XGATE Interrupt Flag Vector
31
XGSWT           EQU     XGATE_REGS+$18  ;XGATE Software Trigger Register
32
XGSEM           EQU     XGATE_REGS+$1A  ;XGATE Semaphore Register
33
RPAGE           EQU     $0016
34
RAM_SIZE        EQU     20*$400         ;20k RAM
35
RAM_START_GLOBAL EQU    $100000-RAM_SIZE
36
RAM_START_XGATE EQU     $10000-RAM_SIZE
37
RAM_START_S12   EQU     $1000
38
RPAGE_VALUE     EQU     RAM_START_GLOBAL>>12
39
XGATE_VECTORS   EQU     RAM_START_S12
40
XGATE_DATA      EQU     RAM_START_S12+(4*128)
41
XGATE_OFFSET    EQU     (RAM_START_XGATE+(4*128))-XGATE_DATA_BEGIN
42
BUS_FREQ_HZ     EQU     40000000
43
 
44
;###########################################
45
;# RESET VECTOR #
46
;###########################################
47
 
48
                ORG     $FFFE
49
                ADR     START_OF_CODE
50
                ORG     $FF00
51
START_OF_CODE
52
 
53
;###########################################
54
;# INITIALIZE SCI #
55
;###########################################
56
 
57
INIT_SCI        MOVW    #(BUS_FREQ_HZ/(16*9600)), SCIBDH ;set baud rate
58
                MOVB    #(TIE|TE|RE), SCICR2 ;enable tx buffer empty interrupt
59
 
60
;###########################################
61
;# INITIALIZE S12X_INT #
62
;###########################################
63
 
64
INIT_INT        SEI                     ;disable interrupts
65
                MOVB    #(SCI_VEC&$F0), INT_CFADDR ;switch SCI interrupts to XGATE
66
                MOVB    #RQST|$01, INT_CFDATA+((SCI_VEC&$0F)>>1)
67
 
68
;###########################################
69
;# INITIALIZE XGATE #
70
;###########################################
71
 
72
INIT_XGATE      MOVW    #XGMCTL_CLEAR, XGMCTL ;clear all XGMCTL bits
73
                BRSET   XGCHID, $FF, INIT_XGATE ;wait until current thread is done
74
                MOVW    #$10000-RAM_SIZE, XGVBR ;set vector base register
75
                LDX     #XGIF           ;clear all channel interrupt flags
76
                LDD     #$FFFF
77
                STD     2,X+
78
                STD     2,X+
79
                STD     2,X+
80
                STD     2,X+
81
                STD     2,X+
82
                STD     2,X+
83
                STD     2,X+
84
                STD     2,X+
85
                MOVW    #$FF00, XGSWT   ;clear all software triggers
86
 
87
;###########################################
88
;# INITIALIZE XGATE VECTOR SPACE #
89
;###########################################
90
 
91
INIT_XGATE_VECTOR_SPACE
92
                MOVB    #(RAM_START_GLOBAL>>12), RPAGE ;set all vectors to dummy service routine
93
                LDX     #128
94
                LDY     #RAM_START_S12
95
                LDD     #XGATE_DUMMY+XGATE_OFFSET
96
INIT_XGATE_VECTOR_SPACE_LOOP
97
                STD     4,Y+
98
                DBNE    X,INIT_XGATE_VECTOR_SPACE_LOOP
99
;set SCI INTERRUPT VECTOR
100
                MOVW    #XGATE_CODE_BEGIN+XGATE_OFFSET, RAM_START_S12+(2*SCI_VEC)
101
                MOVW    #XGATE_DATA_BEGIN+XGATE_OFFSET, RAM_START_S12+(2*SCI_VEC)+2
102
 
103
;###########################################
104
;# COPY XGATE CODE #
105
;###########################################
106
 
107
COPY_XGATE_CODE
108
                LDX     #XGATE_DATA_BEGIN
109
COPY_XGATE_CODE_LOOP
110
                MOVW    2,X+, 2,Y+
111
                MOVW    2,X+, 2,Y+
112
                MOVW    2,X+, 2,Y+
113
                MOVW    2,X+, 2,Y+
114
                CPX     #XGATE_CODE_END
115
                BLS     COPY_XGATE_CODE_LOOP
116
 
117
;###########################################
118
;# START XGATE #
119
;###########################################
120
 
121
START_XGATE     MOVW    #(XGE|XGDBGM|XGSWEIF), XGMCTL ;enable XGATE
122
                BRA     *
123
 
124
                CPU XGATE
125
 
126
;###########################################
127
;# XGATE DATA #
128
;###########################################
129
 
130
                ALIGN 2
131
XGATE_DATA_BEGIN
132
XGATE_DATA_SCI_PTR ADR  SCI_REGS        ;pointer to SCI register space
133
XGATE_DATA_MSG_IDX BYT  XGATE_DATA_MSG-XGATE_DATA_BEGIN ;string pointer
134
XGATE_DATA_MSG  FCC "Hello World!"      ;ASCII string
135
XGATE_DATA_END  BYT $0D                 ;CR
136
 
137
;###########################################
138
;# XGATE CODE #
139
;###########################################
140
 
141
                ALIGN 2
142
XGATE_CODE_BEGIN
143
                LDW     R2,(R1,#(XGATE_DATA_SCI_PTR-XGATE_DATA_BEGIN)) ;SCI -> R2
144
                LDB     R3,(R1,#(XGATE_DATA_MSG_IDX-XGATE_DATA_BEGIN));msg -> R3
145
                LDB     R4,(R1,R3+)     ;curr. char -> R4
146
                STB     R3,(R1,#(XGATE_DATA_MSG_IDX-XGATE_DATA_BEGIN));R3 -> idx
147
                LDB     R0,(R2,#(SCISR1-SCI_REGS)) ;initiate SCI transmit
148
                STB     R4,(R2,#(SCIDRL-SCI_REGS)) ;initiate SCI transmit
149
                CMPL    R4,#$0D
150
                BEQ     XGATE_CODE_DONE
151
                RTS
152
XGATE_CODE_DONE LDL     R4,#$00         ;disable SCI interrupts
153
                STB     R4,(R2,#(SCICR2-SCI_REGS))
154
                LDL     R3,#(XGATE_DATA_MSG-XGATE_DATA_BEGIN);reset R3
155
                STB     R3,(R1,#(XGATE_DATA_MSG_IDX-XGATE_DATA_BEGIN))
156
XGATE_CODE_END  RTS
157
XGATE_DUMMY     EQU XGATE_CODE_END