SDC C-Project CF Review 프로그램
LYW
2022-05-31 f1a543772246f59b8b52a8857270b38ee38f3588
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
/*
        File: cmplc56k.h
 
        PMAC Compiled PLC Motorola DSP 56000 defines
 
        Author(s):      Ed Lay
 
        08/03/93      EBL     Created
 
        Change log:
 
          Date       Rev     Who         Description
        ---------    -----   -----   -----------------------------------------
        01/11/4              EBL     Changes for windows DLL
        02/09/4              EBL     Changes for integer math & size of 56k used
        03/08/5              EBL     ADD LADDER FUNCTION BLOCK CODE
        03/04/99             EBL     CHNG STRING CMD USE OF R2 TO R4 FOR TURBO
        06/01/99             EBL     CHNG PLCN & 0 BUFFER ADDRESSES
        10/12/99             EBL     CHNG ENDWCODE LENGTH
 
*/
//
 
//***************************************************************
//**  Instruction Defines **
//***************************************************************
 
#define JSR             0x0D0000
#define JSRL            0x0BF080
#define MOVItoN4        0x3C0000 // MOV IMMEDIATE SHORT TO REG 'N4'
#define MOVILtoN4       0x74F400 // MOV IMMEDIATE LONG  TO REG 'N4'
#define MOVA1toN4       0x219C00 // "MOVE A1,N4"
#define MOVA1toN5       0x219D00 // "MOVE A1,N5"
#define MOVItoR1        0x61F400 // MOV IMMEDIATE LONG  TO REG 'R1'
#define MOVItoR2        0x62F400 // MOVE #LONG_ADDR,R2
#define MOVEAtoXR4      0x565C00 // MOVE A,X:(R4)+
#define MOVER4toXSM     0x640000 // MOVE R4,X:ADDR short + ADDR << 8
#define MOVER4toYSM     0x6C0000 // MOVE R4,Y:ADDR short + ADDR << 8
#define MOVEYLMtoR4     0x6CF000 // MOVE Y:$2000,R4
#define MOVItoR4        0x64F400 // MOV IMMEDIATE LONG  TO REG 'R4'
#define MOVIStoR4       0x340000 // MOV IMMEDIATE SHORT TO REG 'R4'
#define MOVItoB0        0x51F400 // MOV IMMEDIATE LONG  TO REG 'B0'
#define MOVItoB1        0x55F400 // MOV IMMEDIATE LONG  TO REG 'B1'
#define MOVIStoB0       0x290000 // MOV IMMEDIATE SHORT TO REG 'B0'#=MID 8 bit
#define MOVIStoB1       0x2D0000 // MOV IMMEDIATE SHORT TO REG 'B1'
#define MOVIStoB        0x2F0000 // MOV IMMEDIATE SHORT TO REG 'B' #=MID 8 bit
#define MOVILtoB        0x57F400 // MOV IMMEDIATE LONG TO REG 'B'
#define MOVItoR5        0x65F400 // MOV IMMEDIATE LONG  TO REG 'R5'
#define MOVEMR4toP      0x077094 // MOVEM R4,P:$ADDR
#define MOVEMPtoR4      0x07F094 // MOVEM P:$ADDR,R4
                                 //
                                 //      56K code for ADDRESS command
                                 //
#define MOVEMPtoX0      0x07F084 // MOVEM P:$ADDR,X0
#define MOVEMPtoX1      0x07F085 // MOVEM P:$ADDR,X1
#define MOVEMPtoA       0x07F08E // MOVEM P:$ADDR,A
#define CLRA            0x200013 // CLR  A
#define CLRB            0x20001B // CLR  B
#define MOVIStoA        0x2E0000 // MOV IMMEDIATE SHORT TO REG 'A'
#define MOVILtoA        0x56F400 // MOV IMMEDIATE LONG TO REG 'A'
#define MOVIStoA1       0x2C0000 // MOVE IMMEDIATE SHORT TO REG 'A1'
#define MOVIStoA0       0x280000 // MOVE IMMEDIATE SHORT TO REG 'A0'
#define MOVILtoA0       0x50F400 // MOV IMMEDIATE LONG TO REG 'A0'
#define NOTAISX1        0x250017 // NOT A #SDATA,X1
#define NOTAXADRtoY1    0x47F017 // NOT A X:#ADDR,Y1
#define ANDX0A          0x200046 // AND X0,A
#define ORX1A           0x200062 // OR  X1,A
#define MOVEMA1toP      0x07708C // MOVEM A1,P:#$ADDR
#define ANDILA          0x0140C6 // AND #$LONG,A
#define ANDISA          0x014086 // AND #$SHORT,A // data << 8
#define ORILA           0x0140C2 // OR #$LONG,A
#define MOVECSRtoY0     0x0446B9 // MOVEC   SR,Y0
#define MOVECY0toSR     0x04C6B9 // MOVEC   Y0,SR
#define ORIintrBLK      0x0003F8 // ORI #%00000011,MR
                                 //
                                 //      56K code for CMD ^ command
                                 //
#define MOVA1XR3        0x545B00 // MOVE  A1,X:(R3)+
                                 //
                                 //      56K code for String commands SEND, SENDP, SENDS, CMD
                                 //
#define MOVEMR4toP      0x077094 // MOVEM R4,P:$ADDR
#define MOVEYMtoA       0x5EF000 // MOVE Y:$ADDR,A ADDR = CMD_STACK
#define MOVEYSMtoA      0x5E8000 // MOVE Y:$SADDR,A + $SADDR << 8
#define TSTAItoX1       0x45F403 // TST A        #ADDRofSTRING,X1
#define TSTAItoR1       0x61F403 // TST A        #ADDRofSTRING,R1
#define MOVEMR1toA      0x07D98E // MOVEM   P:(R1)+,A
#define ADDX1AItoX0     0x24FF60 // ADD X1,A     #$FF,X0
#define ANDX0toB        0x20004E // AND X0,B
#define ADDY1toAB0toB   0x212F70 // ADD Y1,A     B0,B
#define MOVEA1toYM      0x5C7000 // MOVE A1,Y:$CMD_STACK
#define CLRB_R5toR4     0x22B41B // CLR B        R5,R4
#define MOVER4toR5      0x229500 // MOVE         R4,R5
#define MOVEMPtoB1      0x07F08D // MOVEM P:$C.S ADDR,B1
#define MOVEMPtoB       0x07F08F // MOVEM P:$C.S ADDR,B
#define MOVEYR5toR5     0x6DE500 // MOVE Y:(R5),R5
#define MOVEYR5toR1     0x69E500 // MOVE Y:(R5),R1
#define MOVXP_BASEtoR5  0x65A400 // MOVE X:P_BASE,R5
#define MOVXP_BASEtoR4  0x64A400 // MOVE X:P_BASE,R4
                                 //
                                 //      56K code for Q Write
                                 //
#define MOVEMPRtoR5     0x07ED95 // MOVEM P:(R5+N5),R5
#define MOVItoN5        0x3D0000 // MOVE #QNUM,N5 ; where QNUM < 256
#define MOVILtoN5       0x75F400 // MOVE #QNUM,N5 ; LONG MOVE
#define MOVEILtoN5      0x75F400 // MOVE #QNUM,N5 ; LONG MOVE
#define MOVEILtoM5      0x05F425 // MOVE #$3FF,M5
#define MOVEAtoR5N5     0x486D00 // MOVE A,L:(R5+N5)
#define MOVEAtoR4N4     0x486C00 // MOVE A,L:(R4+N4)
#define MOVEAtoR4       0x486400 // MOVE A,L:(R4)
#define MOVEA1toXR4N4   0x546C00 // MOVE A1,X:(R4+N4)
#define MOVEA1toXR4     0x546400 // MOVE A1,X:(R4)
#define MOVEM4toM5      0x0465A4 // MOVE M4,M5
                                 //
                                 //      56K code for Q Read
                                 //
#define MOVELR5N5toA    0x48ED00 // MOVE L:(R5+N5),A
#define MOVELR5N5toX    0x42ED00 // MOVE L:(R5+N5),X
#define MOVELR4N4toA    0x48EC00 // MOVE L:(R4+N4),A
#define MOVELR4N4toX    0x42EC00 // MOVE L:(R4+N4),X
#define MOVELR4toA      0x48E400 // MOVE L:(R4),A
#define MOVELR4toX      0x42E400 // MOVE L:(R4),X
#define MOVELR5toX      0x42E500 // MOVE L:(R5),X
#define MOVEXR4N4toA    0x56EC00 // MOVE X:(R4+N4),A
#define MOVEXR4N4toX1   0x45EC00 // MOVE X:(R4+N4),X1
#define MOVEXR4toA      0x56E400 // MOVE X:(R4),A
#define MOVEXR4toX1     0x45E400 // MOVE X:(R4),X1
                                 //
                                 //      Lnn L-Variable code
                                 //
#define NOTA            0x200017 // NOT  A ; for "=" compare need the NOT
#define NOTA_AtoB       0x21CF17 // NOT  A  A,B
#define NOTB            0x20001F // NOT  B
#define MOV0toA0        0x280000 // MOVE    #0,A0   ; CLR LSB OF A REG
#define NEGA            0x200036 // NEG  A
#define ABSA            0x200026 // ABS  A
#define NORMR5A         0x01DD15 // NORM R5,A
#define ANDX1A          0x200066 // AND  X1,A
#define ADDX1A          0x200060 // ADD  X1,A
#define EORX1A          0x200063 // EOR  X1,A also used on compare
#define SUBX1A          0x200064 // SUB  X1,A
#define ANDY1A          0x200076 // AND  Y1,A
#define ANDY1AY1toB     0x20EF76 // AND  Y1,A   Y1,B
#define ANDY1B          0x20007E // AND  Y1,B
#define EORY1B          0x20007B // EOR  Y1,B
#define EORY1A          0x200073 // EOR  Y1,A
#define ORY1B           0x20007A // OR   Y1,B
#define ORY1AB0toB      0x212F72 // OR   Y1,A   B0,B
#define ADDBtoA         0x200010 // ADD  B,A
#define MOVXADRtoX0     0x44F000 // MOVE X:$ADDR,X0
#define MOVXADRtoX1     0x45F000 // MOVE X:$ADDR,X1
#define MOVXADRtoY1     0x47F000 // MOVE X:$ADDR,Y1
#define MOVXADRtoA      0x56F000 // MOVE X:$ADDR,A
#define MOVXADRtoB      0x57F000 // MOVE X:$ADDR,B
#define MOVYADRtoR1     0x69F000 // MOVE Y:$ADDR,R1
#define MOVXSADRtoA     0x568000 // MOVE X:$SADDR,A  + SADDR << 8
#define MOVILtoY1       0x47F400 // MOV IMMEDIATE LONG TO REG 'Y1'
#define MOVItoY1        0x270000 // MOV IMMEDIATE SHORT TO REG 'Y1'
#define MOVEB0toX0      0x212400 // MOVE    B0,X0
#define TFRX1AB0toX0    0x212461 // TFR X1,A    B0,X0
#define MOVEA1toX0      0x218400 // MOVE    A1,X0
#define MOVEX0toA       0x208E00 // MOVE    X0,A
#define TFRX0toAtoX1    0x218541 // TFR     X0,A  A1,X1  
#define MOVEB1toA       0x21AE00 // MOVE    B1,A
#define MOVEB1toX1      0x21A500 // MOVE    B1,X1
#define MPYX0Y1AtoX1    0x2185C0 // MPY     X0,Y1,A   A1,X1
#define MPYX0Y1BIStoY1  0x2700C8 // MPY     X0,Y1,B   #<,Y1
#define MPYX0Y1BILtoY1  0x47F4C8 // MPY     X0,Y1,B   #>,Y1
#define MPYX0Y1A        0x2000C0 // MPY     X0,Y1,A
#define MPYX0Y1B        0x2000C8 // MPY     X0,Y1,B
#define MOVEA1toY1      0x218700 // MOVE    A1,Y1
#define MPYX1Y1A        0x2000F0 // MPY     X1,Y1,A
#define ASRA            0x200022 // ASR     A
#define ASLInA          0x0C1D00 // ASL     #n,A,A  + n << 1
#define ASRInA          0x0C1C00 // ASR     #n,A,A  + n << 1
#define ASRInBtoB       0x0C1C81 // ASR     #n,B,B + (n << 1)
#define MOVEA0toA       0x210E00 // MOVE    A0,A  SIGN EXTEND
#define MOVEA1toA       0x218E00 // MOVE    A1,A  SIGN EXTEND
#define MOVEB1toX1      0x21A500 // MOVE    B1,X1
#define MOVEA1toB       0x218F00 // MOVE    A1,B
#define LRSA            0x200023 // LSR     A
#define LSRInA          0x0C1EC0 // LSR     #n,A  + n << 1
#define LSRInB          0x0C1EC1 // LSR     #n,B  + n << 1
#define CLRAA1toX1      0x218513 // CLR     A  A1,X1
#define CLRAA1toX0      0x218413 // CLR     A  A1,X0
#define MOVA1toX1       0x218500 // MOVE    A1,X1 ; MOVE CURRENT A1 to X1
#define MOV1toA1        0x2C0100 // MOVE    #1,A1     ; LOAD CONSTANT 1
#define MOVEA1toXM      0x547000 // MOVE    A1,X:$MEM_ADDR
#define MOVEA1toSXM     0x540000 // MOVE    A1,X:$MEM_ADDR + SHORT MEM << 8
#define MOVEA1toSYM     0x5C0000 // MOVE    A1,Y:$MEM_ADDR + SHORT MEM << 8
#define BCLRXMEM        0x0A7000 // BCLR    #0,X:$D000
                                 // 0x0A7017          BCLR    #23,X:$D000
                                 // 0x0A7057          BCLR    #23,Y:$D000
#define BSETXMEM        0x0A7020 // BSET    #0,X:$D000
                                 //
                                 //      UNPACK Inline Code - Uses 3 vs 2 for JSR
                                 //
#define UNPACK0         0x0C1881 //   EXTRACTU #$00C000,A,B ; EXTRACT EXPONENT
#define UNPACK1         0x00C000
#define UNPACK2         0x213514 //   SUB   B,A   B0,R5     ; REMOVE EXPONENT FROM MANTISA
                                 //
                                 //      Other 56K code
                                 //
#define MOVEMPRtoR1     0x07ED91 // MOVEM P:(R5+N5),R1
#define MOVILtoX1       0x45F400 // MOV IMMEDIATE LONG TO REG 'X1'
#define MOVItoX1        0x250000 // MOVE #<n,X1 + (n << 8)
#define MOVILtoX0       0x44F400 // MOV IMMEDIATE LONG TO REG 'X0'
#define MOVM5toX1       0x254000 // MOV IMMED .5 mantisa to X1
#define MOVPQtoA        0x48F000 // MOV P or Q TO A ( MOVE L:P000 ,A )
#define MOVPQtoX        0x42F000 // MOV P or Q TO X ( MOVE L:P000 ,X )
#define MOVAtoPQ        0x487000 // MOV A to P     ( MOVE A,L:P000 )
#define MOVAtoSTK       0x487F00 // MOV A to STACK ( MOVE A,L:-(R7) )
#define MOVBtoSTK       0x497F00 // MOV B to STACK ( MOVE B,L:-(R7) )
#define MOVXtoSTK       0x427F00 // MOV X to STACK ( MOVE X,L:-(R7) )
#define MOVSTKtoX       0x42DF00 // MOV STACK to X ( MOVE L:(R7)+,X )
#define MOVSTKNtoX      0x42E700 // MOV STACK to X ( MOVE L:(R7),X )
#define MOVSTKtoA       0x48DF00 // MOV STACK to A ( MOVE L:(R7)+,A )
#define TFRABSTKtoA     0x48DF09 // TFR A,B STACK to A ( TFR A,B L:(R7)+,A )
#define TFRABSTKNtoA    0x48E709 // TFR A,B STACK to A ( TFR A,B L:(R7),A )
#define MOVR1toXSTK     0x617F00 // MOVE R1,X:-(R7)
#define MOVXSTKtoR1     0x61DF00 // MOVE X:(R7)+,R1
#define MOVI79toM1      0x054FA1 // MOVE #79,M1
#define MOVM0toM1       0x0461A0 // MOVE M0,M1
#define SUBX0A          0x200044 // SUB  X0,A
#define CMPBtoA         0x200000 // CMP  B,A
#define TGTBtoA         0x200000 // TGT  B,A
#define JCC             0x0AF0A0 // JCC Carry Clr
#define JGE             0x0AF0A1 // JMP >=
#define JNE             0x0AF0A2 // JMP !=
#define JGT             0x0AF0A7 // JMP >
#define JCS             0x0AF0A8 // JCS Carry Set
#define JLT             0x0AF0A9 // JMP <
#define JEQ             0x0AF0AA // JMP =
#define JLE             0x0AF0AF // JMP <=
#define JMP             0x0AF080 // JMP LONG
#define RTS             0x00000C // RET from S/R
#define NOP             0        // NOP
#define BEQ             0x05A400 // BEQ + ( offset )
#define BRA             0x050C00 // BRA + ( offset ) B0-9, B5 is always Zero
#define BRAL            0x0D10C0 // BRA + Next address is 255 < displacement  < -256
 
//***************************************************************
//**  Conditional JMP Flag Defines **
//***************************************************************
 
#define JMP_TRUE        0x1000000 // Conditional JMP True flag
#define JMP_FALSE       0x2000000
#define IFWHL_START     0x4000000 // If - While Start Flag
#define ANDOR_START     0x8000000 // AND - OR CMD Start Flag
#define ENDWCODE        13        // End While code 56k locations
 
//****************************************************************************
//
//**    Defines for strings types for 56k code
//
//****************************************************************************
 
#define CMD             0 // Code for 1st word of string
#define SENDP           0x10
#define SENDS           0x20
#define SEND            0x30
                          //
                          //**    Defines for strings types for 56k Turbo code
                          //
#define TSENDP          0x14
#define TSENDR          0x24
#define TSENDS          0x34
#define TSENDA          0x44
#define TSENDM          0x54
#define TCMD            0x84
 
//***************************************************************
//**  Function Addresses **
//***************************************************************
#define I_SUB           0x0040CE
#define M_SUB           0x0040D6
#define P_SUB           0x0040DE
#define Q_SUB           0x0040E3
#define FSIN            0x000A2E
#define FCOS            0x000AC5
#define FTAN            0x000AF2
#define FABS            0x0008D9
#define FASIN           0x000BC3
#define FACOS           0x000BD0
#define FATAN           0x000BE9
#define FSQRT           0x000A01
#define FEXP            0x000D4A
#define FLN             0x000CDD
#define FINT            0x000DCD
#define FATAN2          0x000BDA
 
//***************************************************************
//**  Operator Addresses **
//***************************************************************
 
#define FADD_XA         0x0008E2
#define FSUB_XA         0x000918
#define FMPY_XA         0x00093E
#define FDIV_XA         0x000975
#define FOR_XA          0x0009D5
#define FEOR_XA         0x0009DB
#define FAND_XA         0x0009CF
#define FMOD_XA         0x0009A0
#define FSUB_AX         0x0008E1
#define FDIV_AX         0x000967
#define FMOD_AX         0x000993
 
//***************************************************************
//**  Other Addresses **
//***************************************************************
 
#define I_READ 0x001B23
#define M_READ 0x0015F7
#define I_WRITE 0x001B5F
#define M_WRITE 0x001768
 
#define FNEG            0x0008DD
#define FCMP_XA         0x000922
#define PACK            0x000DF4
#define UNPACK          0x000DE5
#define PLCENADIS       0x001C1C
#define PLCQ_BASE       0x005B29
#define MOVPDISP        0x00222F
#define FTOAF           0x000EF8
 
//***************************************************************
//**  OPEN SERVO STARTUP CODE **
//***************************************************************
 
#define SRV_RTN       0x04000B    // JMP     SRV_RTN
#define SERVO_BUFFER  0x040000    
#define SMTR_NUM      0x040015
#define SERVO_SIZE    0x014
#define FLIMIT        0x04001D
 
//***************************************************************
//**  OPEN MACPLCC STARTUP buffer && FIXED LINK VECTOR TABLE **
//***************************************************************
 
#define MACPLCC_BUF   0x04004
#define MACPLCC_SIZE  0x04000
#define MDIVX1A       0x4
#define MDIVAX1       0x5
#define MMODX1A       0x6
#define MMODAX1       0x7
#define MI_READ       0x8
#define MM_READ       0x9
#define MI_WRITE      0x0A
#define MM_WRITE      0x0B
#define CHN_WRITE     0x0C
#define ENDWMCODE     5        // End While MACRO code 56k locations
#define MP_TBL        0x400    // Macro Pnn Table start
//***************************************************************
//** Addresses that do not change **
//***************************************************************
 
#define PBUFFER         0x1000
#define TQ_BASE         0x2000            // Turbo C.S. 1 Q Base Address
 
#define TPBUFFER        0x6000
#define TQBUFFER        0x8000
#define PLCBUFFER       0x8000
#define PLCJMPOFF       0x20
#define PLCRETOFF       PLCJMPOFF + 2 * 32 // number of PLCC's * 2
                                           // #define PLCJMP          PLCBUFFER + PLCJMPOFF
                                           // #define PLCRET          PLCBUFFER + PLCRETOFF
                                           // #define PLCSTART        PLCRET + 2         // allow room for size of mem used
                                           // #define PLCCSIZE        PLCRET + 1         // PLCC size stored by compiler
#define PLCCEXSIZE      98                 // PLCC Executive size
#define PLCEND          16
#define DISPLAY         0x000780           // Display Buffer Addr
#define FPTEN           0x0007DE           // FPTEN Address Table
#define CMD_STACK       0x00075A           // PMAC PLC CMD Stack
#define PLCREQ          0x031              // TURB0 PLC CMD Stack(X: PLCn, Y: PLC0 )
#define PLC_IN_PTR      0x032              // TURB0 PLC INP END PTR(X: PLCn, Y: PLC0 )
#define PLCN_BUFFER     0x1A00             // TURBO PLCn1..31 BUFFER
#define PLC0_BUFFER     0x1900             // TURBO PLC 0 BUFFER
#define TDISPLAY        0x001080           // TURBO Display Buffer Addr
#define TFPTEN          0x0010DE           // TURBO FPTEN Address Table
#define TPLC0_EXT       0x0035C2           // TURBO PLC0_EXT RAM Address