2 * strange macros - do not use directly, usually
5 NMRA(speed28, Aint(addr,0) Aint(speed,1) Aint(reverse,2), {
6 /* 0<=speed<=28 or <=126; reverse: 0 forwards, non-0 backwards */
10 nmra_errchk(cn, speed, speed>=0 && speed<=28);
11 cmd= 0x40 | (reverse ? 0 : 0x20);
14 cmd |= adj & 1 ? 0x10 : 0;
19 NMRA(estop1, Aint(addr,0), {
20 /* Baseline Speed and direction Forwards E-Stop(I) S9.2 B table l.56 */
24 NMRA(speed126, Aint(addr,0) Aint(speed,1) Aint(reverse,2), {
25 /* Advanced Operations 128 Speed Step Control
26 * (actually speeds 0..126) RP9.2.1 C l.200- */
28 nmra_errchk(cn, speed, speed>=0 && speed<=126);
30 *c++= (speed ? speed + 1 : 0) | (reverse ? 0 : 0x80);
34 /* Baseline Broadcast stop Forwards(I) Emergency S9.2 B l.98- */
38 /* Baseline Broadcast stop Forwards(I) non-Emergency S9.2 B l.98- */
42 /* Baseline Decoder Reset S9.2 B l.77- */
46 /* Baseline Idle S9.2 B l.87- */
51 * bit 0 is FL aka F0; bits 1-12 are F1-F12; do not call with bits
52 * outside 0-12 set; bits in 0-12 but not relevant for the relevant
53 * command are ignored. */
54 NMRA(funcs0to4, Aint(addr,0) Abitmap(bitmap,1), {
55 /* Function Group One RP9.2.1 C l.234- */
56 FUNCS(0x80 | ((bitmap >> 1) & 0x0f) | ((bitmap << 4 & 0x10)));
58 NMRA(funcs5to8, Aint(addr,0) Abitmap(bitmap,1), {
59 /* Function Group Two RP9.2.1 C l.246- */
60 FUNCS(0xb0 | ((bitmap >> 5) & 0x0f));
62 NMRA(funcs9to12, Aint(addr,0) Abitmap(bitmap,1), {
63 /* Function Group Two RP9.2.1 C l.246- */
64 FUNCS(0xa0 | ((bitmap >> 9) & 0x0f));
66 NMRA(cvwrite, Aint(addr,0) Aint(cv,1) Abyte(value,2), {
67 /* Configuration Variable Access Long Form RP9.2.1 C l.286- */
70 nmra_errchk(cn, cv, cv>=1 && cv<=1024);
72 *c++= 0xec | (adj >> 8);
80 NMRA(svc_cvwrite, Aint(cv,0) Abyte(value,1), {
81 /* Service Mode Instruction for Direct Mode, Write Byte
85 nmra_errchk(cn, cv, cv>=1 && cv<=1024);
87 *c++= 0x7c | (adj >> 8);
91 NMRA(svc_factoryreset, Anone, {
92 /* Service Mode Instruction for Decoder Factory Reset
94 * (See also Packet Sequence for Physical Register Addressing
99 NMRA(svc_pagepreset, Anone, {
100 /* Service Mode Page Preset Instruction
102 * used in various packet sequences.