A2ConfigProgrammer.Mos 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. MODULE A2ConfigProgrammer;
  2. (**
  3. AUTHOR Timothée Martiel, 02/2016
  4. PURPOSE A2 Configuration programmer for OEB
  5. *)
  6. IMPORT
  7. SYSTEM,
  8. Caches, StreamReaders, Trace,
  9. Programmer;
  10. CONST
  11. ConfigAddress = ADDRESS(1FFFF000H);
  12. MaxConfigSize = 4096;
  13. TYPE
  14. Config = POINTER TO ConfigDesc;
  15. ConfigDesc = RECORD (Programmer.DestinationDesc)
  16. END;
  17. VAR
  18. config: Config; (** The only allowed config instance *)
  19. PROCEDURE Factory (VAR args: StreamReaders.Reader): Programmer.Destination;
  20. BEGIN
  21. IF config = NIL THEN
  22. NEW(config);
  23. END;
  24. RETURN config
  25. END Factory;
  26. PROCEDURE Accept (destination: Programmer.Destination): BOOLEAN;
  27. BEGIN
  28. RETURN destination IS Config
  29. END Accept;
  30. PROCEDURE Program (CONST resource: Programmer.Resource; destination: Programmer.Destination);
  31. BEGIN
  32. SYSTEM.MOVE(resource.start, 1FFFF000H, resource.size);
  33. Caches.CleanDCacheRange(1FFFF000H, resource.size);
  34. Programmer.arguments[0] := 1FFFF000H(*resource.start*);
  35. Programmer.arguments[1] := resource.size;
  36. Programmer.done := TRUE;
  37. Programmer.error := FALSE
  38. END Program;
  39. BEGIN
  40. Programmer.RegisterProgrammer("A2Config", Program, Accept, Factory);
  41. config := NIL
  42. END A2ConfigProgrammer.