OSDN Git Service

la der de der
[fast-forth/master.git] / MSP430-FORTH / CHNGBAUD.f
1 \ -*- coding: utf-8 -*-
2 \
3 \ TARGET SELECTION ( = the name of \INC\target.pat file without the extension)
4 \ MSP_EXP430FR5739  MSP_EXP430FR5969    MSP_EXP430FR5994    MSP_EXP430FR6989
5 \ MSP_EXP430FR4133  MSP_EXP430FR2433    CHIPSTICK_FR2433    MSP_EXP430FR2355
6 \ LP_MSP430FR2476
7 \
8 \ from scite editor : copy your target selection in (shift+F8) parameter 1:
9 \
10 \ OR
11 \
12 \ drag and drop this file onto SendSourceFileToTarget.bat
13 \ then select your TARGET when asked.
14 \
15 \ COLD            \ uncomment for this TEST which must not disrupt the downloading process
16
17 ; ------------
18 ; CHNGBAUD.f
19 ; ------------
20
21 \ first, we do some tests allowing the download
22     CODE I2CTERM_ABORT
23     SUB #4,PSP
24     MOV TOS,2(PSP)
25     MOV &KERNEL_ADDON,TOS
26     BIT #$3C00,TOS          \ BIT13|BIT12|BIT11|BIT10 test (UART TERMINAL test)
27     0<> IF MOV #0,TOS THEN  \ if TOS <> 0 (UART TERMINAL), set TOS = 0
28     MOV TOS,0(PSP)
29     MOV &VERSION,TOS
30     SUB #401,TOS            \ FastForth V4.1
31     COLON
32     $0D EMIT                \ return to column 1 without CR
33     ABORT" FastForth V4.1 please!"
34     ABORT" <-- Ouch! unexpected I2C_FastForth target!"
35     RST_RET             \ remove ABORT_UARTI2CS definition before resuming
36     ;
37
38 I2CTERM_ABORT
39
40 ; ------------------------------------------------------------------
41 ; first we download the set of definitions we need (from CORE_ANS.f)
42 ; ------------------------------------------------------------------
43
44     [UNDEFINED] DUP [IF]    \ define DUP and DUP?
45 \ https://forth-standard.org/standard/core/DUP
46 \ DUP      x -- x x      duplicate top of stack
47     CODE DUP
48 BW1 SUB #2,PSP      \ 2  push old TOS..
49     MOV TOS,0(PSP)  \ 3  ..onto stack
50     MOV @IP+,PC     \ 4
51     ENDCODE
52
53 \ https://forth-standard.org/standard/core/qDUP
54 \ ?DUP     x -- 0 | x x    DUP if nonzero
55     CODE ?DUP
56     CMP #0,TOS      \ 2  test for TOS nonzero
57     0<> ?GOTO BW1   \ 2
58     MOV @IP+,PC     \ 4
59     ENDCODE
60     [THEN]
61
62     [UNDEFINED] DROP [IF]
63 \ https://forth-standard.org/standard/core/DROP
64 \ DROP     x --          drop top of stack
65     CODE DROP
66     MOV @PSP+,TOS   \ 2
67     MOV @IP+,PC     \ 4
68     ENDCODE
69     [THEN]
70
71     [UNDEFINED] OVER [IF]
72 \ https://forth-standard.org/standard/core/OVER
73 \ OVER    x1 x2 -- x1 x2 x1
74     CODE OVER
75     MOV TOS,-2(PSP)     \ 3 -- x1 (x2) x2
76     MOV @PSP,TOS        \ 2 -- x1 (x2) x1
77     SUB #2,PSP          \ 1 -- x1 x2 x1
78     MOV @IP+,PC
79     ENDCODE
80     [THEN]
81
82     [UNDEFINED] CR [IF]
83 \ https://forth-standard.org/standard/core/CR
84 \ CR      --               send CR+LF to the output device
85
86 \    DEFER CR    \ DEFERed definition, by default executes that of :NONAME
87     CODE CR
88     MOV #NEXT_ADR,PC    \ compile same as DEFER
89     ENDCODE
90
91     :NONAME
92     'CR' EMIT 'LF' EMIT
93     ; IS CR
94     [THEN]
95
96     [UNDEFINED] 1+ [IF]
97 \ https://forth-standard.org/standard/core/OnePlus
98 \ 1+      n1/u1 -- n2/u2       add 1 to TOS
99     CODE 1+
100     ADD #1,TOS
101     MOV @IP+,PC
102     ENDCODE
103     [THEN]
104
105     [UNDEFINED] U/ [IF]
106 \ U/   u1 u2 -- q   unsigned 16/16->q16
107     CODE U/
108     SUB #2,PSP
109     MOV #0,0(PSP)   \ -- u1lo u1hi u2
110     CALL #MUSMOD    \ -- r qlo qhi
111     MOV @PSP,TOS    \ -- r qlo qlo
112     ADD #4,PSP      \ -- qlo
113     MOV @IP+,PC
114     ENDCODE
115     [THEN]
116
117     [UNDEFINED] >R [IF]
118 \ https://forth-standard.org/standard/core/toR
119 \ >R    x --   R: -- x   push to return stack
120     CODE >R
121     PUSH TOS
122     MOV @PSP+,TOS
123     MOV @IP+,PC
124     ENDCODE
125     [THEN]
126
127     [UNDEFINED] R> [IF]
128 \ https://forth-standard.org/standard/core/Rfrom
129 \ R>    -- x    R: x --   pop from return stack ; CALL #RFROM performs DOVAR
130     CODE R>
131     SUB #2,PSP      \ 1
132     MOV TOS,0(PSP)  \ 3
133     MOV @RSP+,TOS   \ 2
134     MOV @IP+,PC     \ 4
135     ENDCODE
136     [THEN]
137
138     [UNDEFINED] = [IF]
139 \ https://forth-standard.org/standard/core/Equal
140 \ =      x1 x2 -- flag         test x1=x2
141     CODE =
142     SUB @PSP+,TOS   \ 2
143     0<> IF          \ 2
144         AND #0,TOS  \ 1 flag Z = 1
145     ELSE            \ 2
146         XOR #-1,TOS \ 1
147     THEN
148     MOV @IP+,PC     \ 4
149     ENDCODE
150     [THEN]
151
152     [UNDEFINED] < [IF]  \ define < and >
153 \ https://forth-standard.org/standard/core/less
154 \ <      n1 n2 -- flag        test n1<n2, signed
155     CODE <
156     SUB @PSP+,TOS   \ 1 TOS=n2-n1
157     S< ?GOTO FW1    \ 2 signed
158     0<> IF          \ 2
159 BW1 MOV #-1,TOS \ 1 flag Z = 0
160     THEN
161     MOV @IP+,PC
162     ENDCODE
163
164 \ https://forth-standard.org/standard/core/more
165 \ >     n1 n2 -- flag         test n1>n2, signed
166     CODE >
167     SUB @PSP+,TOS   \ 2 TOS=n2-n1
168     S< ?GOTO BW1    \ 2 --> +5
169 FW1 AND #0,TOS      \ 1 flag Z = 1
170     MOV @IP+,PC
171     ENDCODE
172     [THEN]
173
174     [UNDEFINED] IF [IF] \ define IF THEN
175 \ https://forth-standard.org/standard/core/IF
176 \ IF       -- IFadr    initialize conditional forward branch
177     CODE IF
178     SUB #2,PSP          \
179     MOV TOS,0(PSP)      \
180     MOV &DP,TOS         \ -- HERE
181     ADD #4,&DP          \           compile one word, reserve one word
182     MOV #QFBRAN,0(TOS)  \ -- HERE   compile QFBRAN
183     ADD #2,TOS          \ -- HERE+2=IFadr
184     MOV @IP+,PC
185     ENDCODE IMMEDIATE
186
187 \ https://forth-standard.org/standard/core/THEN
188 \ THEN     IFadr --                resolve forward branch
189     CODE THEN
190     MOV &DP,0(TOS)          \ -- IFadr
191     MOV @PSP+,TOS           \ --
192     MOV @IP+,PC
193     ENDCODE IMMEDIATE
194     [THEN]
195
196     [UNDEFINED] ELSE [IF]
197 \ https://forth-standard.org/standard/core/ELSE
198 \ ELSE     IFadr -- ELSEadr        resolve forward IF branch, leave ELSEadr on stack
199     CODE ELSE
200     ADD #4,&DP              \ make room to compile two words
201     MOV &DP,W               \ W=HERE+4
202     MOV #BRAN,-4(W)
203     MOV W,0(TOS)            \ HERE+4 ==> [IFadr]
204     SUB #2,W                \ HERE+2
205     MOV W,TOS               \ -- ELSEadr
206     MOV @IP+,PC
207     ENDCODE IMMEDIATE
208     [THEN]
209
210     [UNDEFINED] DO [IF] \ define DO LOOP +LOOP
211 \ https://forth-standard.org/standard/core/DO
212 \ DO       -- DOadr   L: -- 0
213     HDNCODE XDO         \ DO run time
214     MOV #$8000,X        \ 2 compute 8000h-limit = "fudge factor"
215     SUB @PSP+,X         \ 2
216     MOV TOS,Y           \ 1 loop ctr = index+fudge
217     ADD X,Y             \ 1 Y = INDEX
218     PUSHM #2,X          \ 4 PUSHM X,Y, i.e. PUSHM LIMIT, INDEX
219     MOV @PSP+,TOS       \ 2
220     MOV @IP+,PC         \ 4
221     ENDCODE
222
223     CODE DO
224     SUB #2,PSP              \
225     MOV TOS,0(PSP)          \
226     ADD #2,&DP              \   make room to compile xdo
227     MOV &DP,TOS             \ -- HERE+2
228     MOV #XDO,-2(TOS)        \   compile xdo
229     ADD #2,&LEAVEPTR        \ -- HERE+2     LEAVEPTR+2
230     MOV &LEAVEPTR,W         \
231     MOV #0,0(W)             \ -- HERE+2     L-- 0
232     MOV @IP+,PC
233     ENDCODE IMMEDIATE
234
235 \ https://forth-standard.org/standard/core/LOOP
236 \ LOOP    DOadr --         L-- an an-1 .. a1 0
237     HDNCODE XLOOP       \   LOOP run time
238     ADD #1,0(RSP)       \ 4 increment INDEX
239 BW1 BIT #$100,SR        \ 2 is overflow bit set?
240     0= IF               \   branch if no overflow
241         MOV @IP,IP
242         MOV @IP+,PC
243     THEN
244     ADD #4,RSP          \ 1 empties RSP
245     ADD #2,IP           \ 1 overflow = loop done, skip branch ofs
246     MOV @IP+,PC         \ 4 14~ taken or not taken xloop/loop
247     ENDCODE             \
248
249     CODE LOOP
250     MOV #XLOOP,X
251 BW2 ADD #4,&DP              \ make room to compile two words
252     MOV &DP,W
253     MOV X,-4(W)             \ xloop --> HERE
254     MOV TOS,-2(W)           \ DOadr --> HERE+2
255     BEGIN                   \ resolve all "leave" adr
256         MOV &LEAVEPTR,TOS   \ -- Adr of top LeaveStack cell
257         SUB #2,&LEAVEPTR    \ --
258         MOV @TOS,TOS        \ -- first LeaveStack value
259         CMP #0,TOS          \ -- = value left by DO ?
260     0<> WHILE
261         MOV W,0(TOS)        \ move adr after loop as UNLOOP adr
262     REPEAT
263     MOV @PSP+,TOS
264     MOV @IP+,PC
265     ENDCODE IMMEDIATE
266
267 \ https://forth-standard.org/standard/core/PlusLOOP
268 \ +LOOP   adrs --   L-- an an-1 .. a1 0
269     HDNCODE XPLOO   \   +LOOP run time
270     ADD TOS,0(RSP)  \ 4 increment INDEX by TOS value
271     MOV @PSP+,TOS   \ 2 get new TOS, doesn't change flags
272     GOTO BW1        \ 2
273     ENDCODE         \
274
275     CODE +LOOP
276     MOV #XPLOO,X
277     GOTO BW2        \ goto BW1 LOOP
278     ENDCODE IMMEDIATE
279     [THEN]
280
281     [UNDEFINED] CASE [IF]   \ define CASE OF ENDOF ENDCASE
282 \ https://forth-standard.org/standard/core/CASE
283     : CASE 0 ; IMMEDIATE \ -- #of-1
284
285 \ https://forth-standard.org/standard/core/OF
286     : OF \ #of-1 -- orgOF #of
287     1+                      \ count OFs
288     >R                      \ move off the stack in case the control-flow stack is the data stack.
289     POSTPONE OVER POSTPONE = \ copy and test case value
290     POSTPONE IF             \ add orig to control flow stack
291     POSTPONE DROP               \ discards case value if =
292     R>                      \ we can bring count back now
293     ; IMMEDIATE
294
295 \ https://forth-standard.org/standard/core/ENDOF
296     : ENDOF \ orgOF #of -- orgENDOF #of
297     >R                      \ move off the stack in case the control-flow stack is the data stack.
298     POSTPONE ELSE
299     R>                      \ we can bring count back now
300     ; IMMEDIATE
301
302 \ https://forth-standard.org/standard/core/ENDCASE
303     : ENDCASE \ orgENDOF1..orgENDOFn #of --
304     POSTPONE DROP
305     0 DO
306         POSTPONE THEN
307     LOOP
308     ; IMMEDIATE
309     [THEN]
310
311 ; --------------------------
312 ; end of definitions we need
313 ; --------------------------
314
315     [UNDEFINED] S_ [IF]
316     CODE S_             \           Squote alias with blank instead quote separator
317     SUB #2,PSP
318     MOV TOS,0(PSP)
319     MOV #'SP',TOS
320     MOV #S"+10,PC       \           addr S" + 10 --> PC
321     ENDCODE IMMEDIATE
322     [THEN]
323
324     [UNDEFINED] ESC [IF]
325     CODE ESC
326     CMP #0,&STATEADR
327     0= IF MOV @IP+,PC   \ interpret time use is disallowed
328     THEN
329     COLON
330     $1B                 \ -- char escape
331     POSTPONE LITERAL    \ compile-time code : lit $1B
332     POSTPONE EMIT       \ compile-time code : EMIT
333     POSTPONE S_         \ compile-time code : S_ <escape_sequence>
334     POSTPONE TYPE       \ compile-time code : TYPE
335     ; IMMEDIATE
336     [THEN]
337
338     : BAD_MHz
339     $20 DUP EMIT
340             ABORT" only for 1, 2, 4, 8, 12, 16, 20, 24 MHz MCLK!"
341     ;
342
343     : OVER_BDS
344     $20 DUP EMIT ESC [7m    \ set reverse video
345                 ." with MCLK = " FREQ_KHZ @ 1000 U/ .
346             ABORT" MHz ? don't dream!"
347     ;
348
349     : CHNGBAUD                  \ only for 1, 4, 8, 12, 16, 20, 24 MHz
350     RST_RET                     \ removes this created word (garbage collector)
351     ECHO
352     ESC [8;42;80t      \ set 42L * 80C terminal display
353     41 0 DO CR LOOP     \ to avoid erasing any line of source, create 42-1 empty lines
354     ESC [H              \ cursor home
355
356     FREQ_KHZ @ DUP >R               \ r-- target MCLCK frequency in MHz
357     ." target MCLK = " 1000 U/ . ." MHz" CR
358     ." choose your baudrate:" CR
359     ."   0 --> 6 MBds" CR        \ >= 20 MHz
360     ."   1 --> 5 MBds" CR        \ >= 16 MHz
361     ."   2 --> 4 MBds" CR        \ >= 16 MHz
362     ."   3 --> 3 MBds" CR        \ >= 12 MHz
363     ."   4 --> 1843200 Bds" CR   \ >= 8 MHz
364     ."   5 --> 921600 Bds" CR    \ >= 4 MHz
365     ."   6 --> 460800 Bds" CR    \ >= 2 MHz
366     ."   7 --> 230400 Bds" CR    \ >= 1 MHz
367     ."   8 --> 115200 Bds" CR    \ >= 500 kHz
368     ."   9 --> 57600 Bds" CR
369     ."   A --> 38400 Bds" CR
370     ."   B --> 19200 Bds" CR
371     ."   C --> 9600 Bds" CR
372     ."   D --> DMX interface (250000 Bds)" CR
373     ."   M --> MIDI interface (31250 Bds)" CR
374     ." other --> quit" CR
375     ." your choice: "
376     KEY
377     CASE
378     #'0' OF  ." 6 MBds"          \ add this to the current line
379             R> CASE
380                 #24000  OF $4  $0       ENDOF \ -- TERM_BRW  TERM_MCTLW
381                 #20000  OF $3  $4900    ENDOF
382                 20000 <
383                 IF OVER_BDS    \ < 20 MHz --> abort
384                 THEN BAD_MHz    \ other MHz --> abort
385             ENDCASE
386         ENDOF
387     #'1' OF  ." 5 MBds"
388             R> CASE
389                 #24000  OF $4  $EE00    ENDOF
390                 #20000  OF $4  $0       ENDOF
391                 20000 <
392                 IF OVER_BDS    \ < 16 MHz --> abort
393                 THEN BAD_MHz    \ other MHz --> abort
394             ENDCASE
395         ENDOF
396     #'2' OF  ." 4 MBds"
397             R> CASE
398                 #24000  OF $6  $0       ENDOF
399                 #20000  OF $5  $0       ENDOF
400                 #16000  OF $4  $0       ENDOF
401                 16000 <
402                 IF OVER_BDS    \ < 16 MHz --> abort
403                 THEN BAD_MHz    \ other MHz --> abort
404             ENDCASE
405         ENDOF
406     #'3' OF  ." 3 MBds"
407             R> CASE
408                 #24000  OF $8  $0       ENDOF
409                 #20000  OF $6  $D600    ENDOF
410                 #16000  OF $5  $4900    ENDOF
411                 #12000  OF $4  $0       ENDOF
412                 12000 <
413                 IF OVER_BDS    \ < 12 MHz --> abort
414                 THEN BAD_MHz    \ other MHz --> abort
415             ENDCASE
416         ENDOF
417     #'4' OF  ." 1843200 Bds"
418             R> CASE
419                 #24000  OF $0D $0200    ENDOF
420                 #20000  OF $0A $DF00    ENDOF
421                 #16000  OF $8  $D600    ENDOF
422                 #12000  OF $6  $AA00    ENDOF
423                 #8000   OF $5  $9200    ENDOF
424                 8000 <
425                 IF OVER_BDS    \ < 8 MHz --> abort
426                 THEN BAD_MHz    \ other MHz --> abort
427             ENDCASE
428         ENDOF
429     #'5' OF  ." 921600 Bds"
430             R> CASE
431                 #24000  OF $1  $00A1    ENDOF
432                 #20000  OF $1  $B751    ENDOF
433                 #16000  OF $11 $4A00    ENDOF
434                 #12000  OF $0D $0200    ENDOF
435                 #8000   OF $8  $D600    ENDOF
436                 #4000   OF $4  $4900    ENDOF
437                 4000 <
438                 IF OVER_BDS    \ < 4 MHz --> abort
439                 THEN BAD_MHz    \ other MHz --> abort
440             ENDCASE
441         ENDOF
442     #'6' OF  ." 460800 Bds"
443             R> CASE
444                 #24000  OF $3  $0241    ENDOF
445                 #20000  OF $2  $92B1    ENDOF
446                 #16000  OF $2  $BB21    ENDOF
447                 #12000  OF $1  $00A1    ENDOF
448                 #8000   OF $11 $4A00    ENDOF
449                 #4000   OF $8  $D600    ENDOF
450                 #2000   OF $4  $4900    ENDOF
451                 2000 <
452                 IF OVER_BDS    \ < 2 MHz --> abort
453                 THEN BAD_MHz    \ other MHz --> abort
454             ENDCASE
455         ENDOF
456     #'7' OF  ." 230400 Bds"
457             R> CASE
458                 #24000  OF $6  $2081    ENDOF
459                 #20000  OF $5  $EE61    ENDOF
460                 #16000  OF $4  $5551    ENDOF
461                 #12000  OF $3  $0241    ENDOF
462                 #8000   OF $2  $BB21    ENDOF
463                 #4000   OF $11 $4A00    ENDOF
464                 #2000   OF $8  $D600    ENDOF
465                 #1000   OF $4  $4900    ENDOF
466                 BAD_MHz    \ other MHz --> abort
467             ENDCASE
468         ENDOF
469     #'8' OF  ." 115200 Bds"
470             R> CASE
471                 #24000  OF $0D $4901    ENDOF
472                 #20000  OF $0A $AD01    ENDOF
473                 #16000  OF $8  $F7A1    ENDOF
474                 #12000  OF $6  $2081    ENDOF
475                 #8000   OF $4  $5551    ENDOF
476                 #4000   OF $2  $BB21    ENDOF
477                 #2000   OF $11 $4A00    ENDOF
478                 #1000   OF $8  $D600    ENDOF
479                 BAD_MHz    \ other MHz --> abort
480             ENDCASE
481         ENDOF
482     #'9' OF  ." 57600 Bds"
483             R> CASE
484                 #24000  OF $1A $D601    ENDOF
485                 #20000  OF $15 $00A1    ENDOF
486                 #16000  OF $11 $DD51    ENDOF
487                 #12000  OF $0D $4901    ENDOF
488                 #8000   OF $8  $F7A1    ENDOF
489                 #4000   OF $4  $5551    ENDOF
490                 #2000   OF $2  $BB21    ENDOF
491                 #1000   OF $11 $4A00    ENDOF
492                 BAD_MHz    \ other MHz --> abort
493             ENDCASE
494         ENDOF
495     #'A' OF  ." 38400 Bds"
496             R> CASE
497                 #24000  OF $27 $0011    ENDOF
498                 #20000  OF $20 $BF01    ENDOF
499                 #16000  OF $1A $D601    ENDOF
500                 #12000  OF $13 $5581    ENDOF
501                 #8000   OF $0D $4901    ENDOF
502                 #4000   OF $6  $2081    ENDOF
503                 #2000   OF $3  $0241    ENDOF
504                 #1000   OF $1  $00A1    ENDOF
505                 BAD_MHz    \ other MHz --> abort
506             ENDCASE
507         ENDOF
508     #'B' OF  ." 19200 Bds"
509             R> CASE
510                 #24000  OF $4E $0021    ENDOF
511                 #20000  OF $41 $D611    ENDOF
512                 #16000  OF $34 $4911    ENDOF
513                 #12000  OF $27 $0011    ENDOF
514                 #8000   OF $1A $D601    ENDOF
515                 #4000   OF $0D $4901    ENDOF
516                 #2000   OF $6  $2081    ENDOF
517                 #1000   OF $3  $0241    ENDOF
518                 BAD_MHz    \ other MHz --> abort
519             ENDCASE
520         ENDOF
521     #'C' OF  ." 9600 Bds"
522             R> CASE
523                 #24000  OF $9C $0041    ENDOF
524                 #20000  OF $82 $2531    ENDOF
525                 #16000  OF $68 $D621    ENDOF
526                 #12000  OF $4E $0021    ENDOF
527                 #8000   OF $34 $4911    ENDOF
528                 #4000   OF $1A $D601    ENDOF
529                 #2000   OF $13 $4901    ENDOF
530                 #1000   OF $6  $2081    ENDOF
531                 BAD_MHz    \ other MHz --> abort
532             ENDCASE
533         ENDOF
534     #'D' OF  ." DMX interface (250000 Bds)"
535             R> CASE
536                 #24000  OF $6  $1       ENDOF
537                 #20000  OF $5  $1       ENDOF
538                 #16000  OF $4  $1       ENDOF
539                 #12000  OF $3  $1       ENDOF
540                 #8000   OF $2  $1       ENDOF
541                 #4000   OF $10 $0       ENDOF
542                 #2000   OF $8  $0       ENDOF
543                 #1000   OF $4  $0       ENDOF
544                 BAD_MHz    \ other MHz --> abort
545             ENDCASE
546         ENDOF
547     #'M' OF  ." MIDI interface (31250 Bds)"
548             R> CASE
549                 #24000  OF $30 $1       ENDOF
550                 #20000  OF $28 $1       ENDOF
551                 #16000  OF $20 $1       ENDOF
552                 #12000  OF $18 $1       ENDOF
553                 #8000   OF $10 $1       ENDOF
554                 #4000   OF $8  $1       ENDOF
555                 #2000   OF $4  $1       ENDOF
556                 #1000   OF $2  $1       ENDOF
557                 BAD_MHz    \ other MHz --> abort
558             ENDCASE
559         ENDOF
560         ABORT" "    \ ABORT" " displays nothing
561     ENDCASE
562     TERMMCTLW_RST !             \ set UCAxMCTLW value in FRAM
563     TERMBRW_RST !               \ set UCAxBRW value in FRAM
564     CR ESC [7m                  \ escape sequence to set reverse video
565     ." Change baudrate in Teraterm, save its setup, then hit a key."
566     ESC [0m
567     CR
568     KEY
569     0 SYS
570     ;
571
572     CHNGBAUD