awlsim - STEP 7 compatibility
=============================

The execution of AWL/STL programs by awlsim is supposed to be fully
compatible with the execution of compiled AWL/STL programs on the real
Siemens S7 CPU.
However, there currently are some known differences. These are listed below.
Any undocumented difference between awlsim and STEP 7 is considered to be a
bug that should be reported.

- awlsim does not implement all features of STEP 7, yet.
  See TODO.txt for a list of missing features.

- Semicolons: AWL/STL requires semicolons (;) after each declaration,
  initialization and statement. As an awlsim convenience service, terminating
  semicolons can be omitted in AWL/STL statements.
  Data declarations and initializations (in DBs and FB/FC interfaces), however,
  must end with a semicolon.

- awlsim does not compile AWL/STL to MC7 code and it cannot execute MC7 code.
  On startup awlsim translates the AWL/STL code to an awlsim specific in-memory
  representation of the code. There is no byte-code representation of this
  code.

- Some key concepts, such as CALL or memory indirect adressing are implemented
  natively on awlsim. That means CALL is not a macro in awlsim. This improves
  runtime performance. From a user's perspective there should not be any
  functional difference visible. Any such difference is a bug.

- Undefined behavior is not emulated.
  For example: If reading uninitialized L-stack space on STEP 7 always yields
  a certain reproducible result, that does not mean that this AWL/STL code does
  the same thing on awlsim.
  Reading uninitialized memory is undefined.
