Bottom                                                                                     Last Revision: 09/25/2002


PMAC PROM Updates: Corrections


From: V1.07                  To: V1.07A                   Date: October 1990


1. Corrected functions of expressions in motion programs


From: V1.08                  To: V1.08A                   Date: December 1990


1. Motion program function fix

2. Motion program restart fix


From: V1.08A               To: V1.08B                   Date: January 1991


1. Prevented noise on VMEbus interrupt line from hanging up the firmware


From: V1.09                  To: V1.09A                   Date: March 1991


1. Fixed operation of PSET, {axis}=, and Z commands


From: V1.09A               To: V1.09B                   Date: March 1991


1. Fixed TRACE problem


From: V1.09B               To: V1.09C                   Date: April 1991


1. Fixed TRACE problem

2. Fixed full circle move at off-angles


From: V1.09C               To: V1.09D                   Date: May 1991


1. Fixed watchdog timer problem on VME board


From: V1.09D               To: V1.09E                   Date: May 1991


1. Fixed direction logic of handwheel function when in position limit


From: V1.09E               To: V1.09F                   Date: May 1991


1. Fixed problem with SAVE function


From: V1.09F                To: V1.09G                   Date: June 1991


1. Fixed STDbus communications problem


From V1.09G                To: V1.09H                   Date: ?


1. Updated bootstrap routine to work with new CPU hardware


From: V1.11                  To: V1.11A                   Date: September 1991


1. Corrected Q-variable decode in on-line commands


From: V1.11A               To: V1.11B                   Date: September 1991


1. Corrected Q-variable read routine and block-write routine


From: V1.11B               To: V1.11C                   Date: January 1992


1. Corrected subroutine parameter passing for variable values

2. Fixed STD watchdog timer problem

3. Added VME table initialization

4. Fixed problem with PMATCH command


From: V1.11C               To: V1.11D                   Date: May 1992


1. Fixed intermittent problem with Abort command when already at zero velocity


From: V1.11D               To: V1.11E                   Date: January 1993


1. Change in bootstrapping routine to permit operation with new CPU circuits.


From: V1.12                  To: V1.12A                   Date: April 1992


1. Corrected transition from blended move to RAPID move with cutter radius compensation active

2. PROM checksum no longer cleared when $$$*** command received


From: V1.12A               To: V1.12B                   Date: May 1992


1. Fixed intermittent problem with Abort command when already at zero velocity


From: V1.12B               To: V1.12C                   Date: May 1992


1. Fixed STD watchdog timer problem

2. Corrected LN function


From: V1.12C               To: V1.12D                   Date: June 1992


1. Fixed cutter radius compensation problem in transition to RAPID move.

2. Corrected communication checksum for input data

3. Corrected phase finding routine

4. Corrected modulo (%) command by negative operators (X % -N)


From: V1.12D               To: V1.12E                   Date: July 1992


1. Fixed STD ROM code

2. Fixed in-position and following-error calculations to include leadscrew compensation values


From: V1.12E               To: V1.12F                   Date: January 1993


1. Change in bootstrapping routine to permit operation with new CPU circuits.


From: V1.13                  To: V1.13A                   Date: November 1992


1. Fixed $$$*** command for PMAC-VME


From: V1.13A               To: V1.13B                   Date: November 1992


1. Fixed synchronous M-variable assignment when TS=0 and I13=0

2. Fixed synchronous M-variable assignment to double-width memory locations

3. Improved calculation speed of moves with I13>0.

4. Fixed jog stop when % value is 0 so jog is aborted if J/ command is issued.


From V1.13B                To: V1.13C                   Date: January 1993


1. Fixed synchronous M-variable assignment bug


From: V1.13C               To: V1.13D                   Date: January 1993


1. Fixed J/ command so it will stop a pending motion before it starts

2. Fixed jog command in backlash modes (Ix85>0)

3. Fixed home command to remove a possible 1/32 count position error


From V1.14                  To: V1.14A                   Date: July 1993


1. Changed state of a flag used for data gathering so it would be compatible with PMAC Executive program tuning and autotuning routines.

2. Corrected error in tool radius compensation that created a wrong offset vector on linear-to-circular transitions with radius less than 2 user units.


From V1.14A                To: V1.14B                   Date: August 1993


1. Corrected error in A/D encoder conversion table routines introduced in V1.14


From V1.14B                To: V1.14C                   Date: September 1993

(Note: V1.14C released for PMAC-STD only)

1. Corrected enabling of RS-422 port for PMAC-STD


From V1.14B/C                        To: V1.14D                   Date: November 1993


1. Extended Ix10 for proper power-on reading of absolute analog sensor.

2. Extended TWS M-variable definition to permit write-only and read-only versions

3. Extended SEND^{character} syntax to permit SEND^@, which transmits the NULL character.


From V1.14 D               To: V1.14E                   Date: February 1994


1. Corrected function of "Stopped on Limit" motor status bit

2. When Abort command issued during DWELL execution, "Dwell in Progress" status bit cleared so next Run or Jog command will always work.

3. Buffer pointers for single-line {variable}={expression} command execution are cleared on power-up/reset.  This is only important for battery-less operation.







From V1.15                  To: V1.15A                   Date: May 1994


1. Corrected storage of vacuum fluorescent display setup registers to flash memory.

2. Corrected clearing of DPRAM on power-on/reset

3. Corrected rotary buffer status reporting (PR command and register, BREQ interrupt) when program execution is in subprogram


From V1.15A                To: V1.15B                   Date: May 1994


1. Corrected DPRAM registers holding filtered velocity values for motors #2-#8.


From V1.15B                To: V1.15C                   Date: May 1994


1. Corrected listing of ENABLE PLC(C) and DISABLE PLC(C).  Problem was introduced in V1.15 and did not affect operation of programs


From V1.15C                To: V1.15D                   Date: May 1994


1. Corrected operation of constant-speed portion of linear move after I13 changed to zero.


From V1.15D                To: V1.15E                   Date: June 1994


1. Implemented J=*, J:*, and J^* commands, where * indicates that the command is to use the "variable jog position/distance" register (L:$082B, L:$08EB, etc.) for its end position, incremental distance from present commanded position, or incremental distance from present actual position, respectively.  This is a floating-point register with units of counts.


From V1.15E                To: V1.15F                   Date: Sept. 1994


1. Corrected the J^{constant} command, which would not execute in V1.15E

2. Made sure home-in-progress and dwell-in-progress status bits are cleared on abort in some cases where they were not cleared in earlier versions

3. Corrected vacuum fluorescent display reset on PMAC-STD.

4. Corrected INT(x) function for -1 < x < 0.

5. Added I99 Backlash Deadband Control parameter to let the user set how much commanded position must turn around before backlash is added in.  Units are 1/16 count.  Previously this amount was always 4 counts.


From: V1.15F                To: V1.15G                   Date: Dec. 1994


1. Corrected following error reporting calculation when Ix60>0.

2. Corrected axis offset calculations for rotary axes (A, B, & C).

3. Corrected branching operation on false "single-line" IF statement in rotary buffer.

4. Partial-word I-variable and M-variable write operations are made non-interruptible.

5. 'R' command accepted to restart from 'H' or '\' feedhold command, even if no motion program is currently addressed (e.g. when jogging).

6. Corrected operation of '%0' or 'H' command during motion program homing move (HOMEx) so that move is not aborted by the command.

7. Corrected position bias register contents when Ix10 absolute position sensor is used.

8. Extended DPRAM background variable binary read buffer handshaking to support multi-task access by the host computer

9. Added DPRAM background variable binary write buffer whose function mirrors that of the DPRAM background variable binary read buffer.  I55 now controls both background variable read and write buffers (1=enable; 0=disable).


From: V1.16                  To: V1.16A                   Date: Sept. 1996


1. Corrected problems with PRELUDE subroutine calls

2. Serial port forces CTS true on power-up/reset except for cards numbered greater than 0 on serial daisychain (I1 = 2 or 3)

3. Cutter compensation outside corner lead-in and lead-out moves always add an arc, regardless of the setting of I89.

4. When Ix83 bit 19 is set to 1 to read Y-register as commutation feedback, register is read just as an X-register would be (all 24 bits).  This function is now enabled for PMAC(1).

5. For MACRO interface, if I1000=0, firmware no longer automatically reads I995 register, an action which clears the MACRO error flags.


From: V1.16A               To: V1.16B                   Date: Oct. 1996             PMAC-STD ONLY!


1. Corrected STDbus interface problem


From: V1.16A/B           To: V1.16C                   Date: Apr. 1997


1. Corrected problem with interrupt function for PMAC2 DPRAM ASCII buffer.

2. Corrected memory clear problem on $$$ software reset that could affect program and firmware checksum verification, table-based math function operation.

3. Corrected cutter compensation lead-in/lead-out problem that occurred when lead-in move was collinear with first compensated move, or lead-out move was collinear with last compensated move.

4. Corrected operation of buffered motion command HOMEZn for rotary axes.

5. Completed implementation of “Auto-Abort on Run-Time Error” function.  Ix97 (existing but undocumented variable) default set to 1 for automatic abort on run-time error (error usually from lack of calculation time).  Coordinate system “run-time-error” status bit left set after auto-abort.

6. Implemented 6 new DPRAM binary rotary buffers (8 total).  This moves start of DPRAM data gathering buffer from $D200 to $D240; pointers from $D1FF to $D23F.

7. Implemented MACRO “Type 1” protocol.

8. Corrected suspension of position loop integrator operation on DAC saturation when Ix34=0

9. Corrected timer reset of I2T function on $$$ reset.

10. Corrected rotary program buffer operation so that rollover of buffer does not count as “jump back” for purposes of “double jump back” blending stop.

11. Corrected intermittent background MACRO Type 1 data read problem.

12. Improved efficiency of background MACRO Type 0 data read/write.

13. Corrected intermittent problem in resolver absolute read.

14. Corrected intermittent problem in MACRO Yaskawa absolute encoder read.

15. Corrected power-on loop closing (Ix80=1) problem on MACRO systems.

16. Corrected PRELUDE operation when full program line is subroutine call.

17. Changed default I-variables on Ultralite PMAC2s so default setup is for MACRO system.

18. PMAC2 I9n6 default value set to 0 so PWM outputs are the default -- for protection of direct PWM amplifiers.

19. Corrected I2T operation for PMAC(1) and non-commutated PMAC2 systems.


From: V1.16C   To: V1.16D                   Date: Nov. 1997


1.     Added geared resolver power-up position thru MACRO in Ix10 (=$73xxxx).

2.     Fixed timing of VME DPRAM ASCII interrupt; held off until last interrupt acknowledged

3.     Fixed binary rotary buffer transfer for high-speed host computers

4.     Added run-time error codes in X:$0799: 1=insufficient calculation time; 2=program counter before start of program; 3=program counter past end of program; 4=unlinked conditional; 5=subroutine stack overflow; 6=label not found

5.     Added parallel power-up position thru MACRO in Ix10 (=$74xxxx).

6.     Added Yaskawa abs. enc. power-up phase position thru MACRO in Ix81 (=$72xxxx)

7.     Added resolver power-up phase position thru MACRO in Ix81 (=$73xxxx)

8.     Added parallel data power-up phase position thru MACRO in Ix81 (=$74xxxx).

9.     Repeated clearing on software reset of general-purpose outputs on PMAC(1)

10. Fixed sign extension of Ix10 read 24-bit parallel feedback when negative

11. Added Sanyo absolute encoder power-up position in Ix10 (=$32xxxx).

12. Delayed testing for amp fault after enable thru MACRO (flags transferred every 2 cycles).

13. Computed post-trigger axis target positions on move-until trigger.

14. Permitted MACRO Station I-variables to be called “MIx”, MACRO Station commands to be called “MCx” to better distinguish from PMAC variables.

15. Standardized Mini-PMAC(1) firmware

16. Added ‘$’ to hex data returned from MACRO Station if I9=2 or 3, in reporting to host

17. Added more time to get power-up phase position from MACRO Station

18. Fixed direct microstepping operation on PMAC2.

19. Cleared MACRO output registers on reset to support new DSPGATE2B IC.

20. Fixed SIZE command response with buffer open

21. DELETE GATHER does not clear DPRAM gather pointers unless DPRAM gathering set

22. GATHER clears DPRAM gather index if DPRAM gathering set.

23. Made only Card 0 addressed at power-up/reset in daisychain mode (problem from V1.16A).

24. I51=1 does not automatically clear motor torque offsets each servo cycle.




From: V1.16D   To: V1.16F                   Date: June 1999


{Note: V1.16E was never released; only sampled in test versions}


1.       Fixed listing of GOSUB{expression} – had listed as GOTO {expression}

2.       Permitted more flexibility in detecting MACRO communications errors in I1001 servo cycles by use of new variables I1004 and I1005.

3.       Made MACRO communications error checking more predictable by moving check from background to real-time interrupt

4.       Permitted Ix10 absolute power-on read outside of full board reset, using new $* command.

5.       Ix80 bit 2 set to 1 disables Ix10 absolute power-on read during full board reset.

6.       Motor “home complete” status bit cleared at beginning of Ix10 absolute power-on read, set to 1 on completion of successful read.

7.       On Mini-PMAC, permitted software-read jumpers to be changed and read properly on next reset, without cycling power.

8.       On Mini-PMAC, always bypass routine to read (non-existent) control panel port, regardless of value of I2.

9.       Permitted leadscrew compensation table to operate as function of net commanded position instead of actual position if ‘D’ character declared after source motor in DEFINE COMP command (e.g. DEFINE COMP 100, #1D, #1, 500000).

10.   Fixed PMAC operation when accessing absolute position through MACRO nodes 8 and higher.

11.   Refined interaction of overtravel limits with phasing search moves:
– Limits are checked at power-up/reset before phasing search algorithm, preventing immediate phasing search if in limits.
– Limit status is monitored even when amplifier is disabled, permitting motor to be manually moved off limits, then phased.
– If phasing search move ends up in limit, motor is killed and phasing search error bit is set.

12.   Implemented DPRAM ASCII interrupt with CTRL0 line on PMAC2-PC Ultralite (requires ECO #1282 to be seen by PC).

13.   Corrected 2D leadscrew compensation table so could be non-square dimension in counts and number of entries.

14.   Implemented encoder conversion table entry for high-resolution analog encoder.  Format $F0.  Two-line entry.  First line is $F0xxxx, where xxxx is the address of the encoder registers (e.g.$C020 on ACC-51).  Second line is $00yyyy, where yyyy is the first (lower) address of the A/D input pair (e.g. $C022 on ACC-51)

15.   Modified $50 encoder conversion table entry for integrated A/D conversions to mask out lower 8 bits before integrating.  Important for proper interface of CAN-drive system.

16.   Motion program can now progress through non-motion and DWELL commands when % value is 0.  Permits viewing of calculated move end position even when %0 prevents interpolation from starting.

17.   Added PAUSE PLC n and RESUME PLC n commands (on-line, motion program, and PLC program) to allow suspension of PLC operation without having to restart at the top.

18.   Enhanced LIST PLC n command to permit listing from point of pending execution.

19.   Added I63 variable; when set to 1, PMAC echoes <CTRL-X> character back to host, so host knows when communications buffers are clear.

20.    Ix26 home offset parameter now also used on Ix10 absolute position read, subtracted from sensor position to get motor position.

21.   Permitted Type 1 MACRO auxiliary command to multiple MACRO Stations with MS15, MIix={data}, for “anynode” MI-variables on the MACRO Stations.

22.   Corrected location of buffer pointers in memory map (wrong in V1.16C and D)

23.   Corrected operation of PRELUDE function for code and program numbers less than 8

24.   Values of I53 and I62 are now stored in a SAVE command.

25.   If vector distance of feedrate axes in a feedrate-specified move is 0, the programmed feedrate is used to control the speed of the non-feedrate axes in the move.  The axis with the longest distance is moved at the programmed feedrate; other axes move with the same move time.

26.   When in feed hold mode and no program running (also no motor jogging), a Run or Step command now starts program in addition to clearing from feed hold mode.

27.   Implemented Ix98 maximum feedrate value; F commands in program compared to this value; if greater than Ix98, Ix98 is used instead.

28.   Fixed operation of synchronous M-variable assignments when move times or acceleration times smaller than I13 time.

29.   Added I64 variable; when set to 1, PMAC leads unsolicited responses (from program SEND or CMD statements) with <CTRL-B>.  To support this feature from compiled PLCs, PCOMM32 version 2.21 or newer (March 1999 or later) is required.

30.   When I58 is set to 1 to enable DPRAM ASCII communications, PMAC no longer forces values for I3, I4, and I6.  DPRAM formatting unchanged, except that if I6=2 when I58=1, PMAC no longer reports errors into DPRAM for illegal internal commands.

31.   Run-time error always triggers abort, regardless of setting of Ix97.

32.   Implemented variable full-circle threshold value with I90 to permit user to define minimum arc length.

33.   Cutter compensation refinements:
- If cutter compensation is active and PMAC cannot find the next move in the compensation plane, PMAC no longer removes the compensation at the end of the move; instead it ends the move at the proper point to start an outside corner.
– If cutter compensation direction is changed with compensation active, offset to new direction occurs at move boundary, not over the course of the next move (unless there is no intersection of compensated paths, in which case the change still occurs over the next move).
– 180o reversal with arc(s) now treated as inside corner, not outside corner
– DELAY move timing while in compensation corrected.

34.   PRELUDE operation refined so that <CR> always starts new subroutine call.

35.   READ operation now stops on repeated character.


From: V1.16F    To: V1.16G                   Date: September 1999


1.       Fixed operation of NORMAL commands for non-default settings

2.       Fixed operation of DEFINE GATHER when gathering set up for dual-ported RAM (I45=2 or 3) so that it reserves entire open space in DPRAM.

3.       (Option 6L only) Fixed intermittent problem when re-starting operation in lookahead after feedhold.

4.       (Option 6L only) Permitted jogging away from feedhold position in segmented LINEAR or CIRCLE mode move, or SPLINE move.

5.       MSDATE command to MACRO Station now returns 4-digit year value.

6.       Added EAVERSION command to combine aspects of VERSION and TYPE command.


From: V1.16G   To: V1.16H                   Date: September 2000


1.      Fixed problem when issuing a CMD”PMATCH” from within a motion program.

2.      Fixed floating-point underflow problem that could produce very large values.

3.      Fixed operation of homing-search move if previous homing-search move was interrupted by a K (kill) command.

4.      Improved accuracy of high-resolution encoder interpolation calculations in conversion table.

5.      Responses to CMD “{on-line command}” are no longer terminated with an <ACK> even when I3=2.

6.      Fixed scaling of parallel absolute position received through MACRO ring in response to $* command.

7.      Fixed rare intermittent problem in response to MACROSLVREAD command.

8.      Fixed intermittent problem in action of the CLOSE command.

9.      Fixed operation of resolver-to-digital converter read through MACRO ring with $ command.

10.  Fixed small issues with cutter radius compensation.

11.  Fixed operation of leadscrew compensation tables in center one-eight-millionth section.

12.  On PMAC2 boards jumpered for “external clock” with E1, gate array ICs are automatically set up to input clocks.

13.  If I2T feature is disabled by setting Ix57 to 0, I2T fault bit is automatically cleared.

14.  J! command always forces command position to nearest full count, regardless of following error.

15.  Fixed operation of single-line IF and WHILE statements in rotary buffer when there are no subsequent lines in the buffer.

16.  PMAC2 Ultralite no longer needs to enable motor with “O0” command before issuing “$” command to phase motor.

17.  Auto-detects flash IC type (AMD or SST) so common firmware can save to either type of IC.

18.  Implemented alternate rollover mode for rotary axes A, B, and C.  If Ix27 is set to a negative value, the sign of the axis command destination value represents the direction to travel to the destination.

19.  Implemented SETPHASE command (on-line, motion, PLC), which forces Ix75 value into phase position register.

20.  Implemented OPEN BINARY ROTARY command to permit simultaneous entry of binary buffered commands and ASCII on-line commands.





1.         Added support for Option 5xF “Flex” CPUs with DSP56300-family CPUs.

2.         Variable I0 now specifies serial addressing card number (@n) for PMAC(1) boards with Flex CPU (as well as for all PMAC2 boards).

3.         New variable I46 sets CPU operational frequency for boards with Flex CPU.  If I46=0, jumpers are used for this

4.         Variable I54 now specifies serial baud rate for PMAC(1) boards with Flex CPU and I46 > 0 (as well as for all PMAC2 boards).

5.         Fixed response to LIST COMP DEF command.

6.         Firmware reference checksum value now included as part of firmware itself.  It is no longer required to re-initialize the card to compute the reference checksum.

7.         New CHECKSUM on-line command causes PMAC to report the firmware reference checksum.





1.         New variable I66 permits disabling of autocopy of servo-channel ADC registers to RAM each phase cycle.  This autocopying is no longer necessary for robust background reads of these registers, so disabling saves time and permits proper interface of ACC-51P interpolator ADCs.

2.         Permitted PMAC to accept comments after M-variable definition statements without returning an error.





1.         Corrected interrupt-blocking for Flex CPUs, fixing problem in transition betweeen LINEAR and SPLINE modes

2.         Refined timing on JTHW multiplexer port for use of ACC-34 boards with fastest Flex CPUs.

3.         Added purge of host port during power-up/reset to ensure serial port comes up as the default response port.

4.         On Ultralite boards with Flex CPUs, force any additional (unused) MACRO CPUs to input clock signals to prevent possible contention if these are installed.

5.         Improved power-on dual-ported RAM detection test for new interface buses.