avrsim.pp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. {******************************************************************************
  2. Startup code for an avr simulator
  3. ******************************************************************************}
  4. unit avrsim;
  5. {$goto on}
  6. {$macro on}
  7. interface
  8. var
  9. OUTPUTREG : byte absolute $20;
  10. EXITCODEREG : byte absolute $21;
  11. HALTREQUEST : byte absolute $22;
  12. {$define DOCALL:=call}
  13. {$define DOJMP:=jmp}
  14. implementation
  15. uses
  16. consoleio,heapmgr;
  17. procedure PASCALMAIN; external name 'PASCALMAIN';
  18. procedure _FPC_haltproc(exitcode : longint); public name '_haltproc'; noreturn;
  19. begin
  20. EXITCODEREG:=exitcode;
  21. HALTREQUEST:=1;
  22. { really stop }
  23. while true do
  24. ;
  25. end;
  26. var
  27. _data: record end; external name '__data_start';
  28. _edata: record end; external name '__data_end';
  29. _etext: record end; external name '_etext';
  30. _bss_start: record end; external name '__bss_start';
  31. _bss_end: record end; external name '__bss_end';
  32. _stack_top: record end; external name '_stack_top';
  33. procedure _FPC_start; assembler; nostackframe;
  34. label
  35. _start;
  36. asm
  37. .init
  38. .globl _start
  39. jmp _start
  40. {
  41. all ATMEL MCUs use the same startup code, the details are
  42. governed by defines
  43. }
  44. {$i start.inc}
  45. end;
  46. function WriteChar(ACh: char; AUserData: pointer): boolean;
  47. begin
  48. WriteChar:=true;
  49. OUTPUTREG:=ord(ACh);
  50. end;
  51. function ReadChar(var ACh: char; AUserData: pointer): boolean;
  52. begin
  53. ReadChar:=true;
  54. ACh:=#0;
  55. end;
  56. begin
  57. OpenIO(Input, @WriteChar, @ReadChar, fmInput, nil);
  58. OpenIO(Output, @WriteChar, @ReadChar, fmOutput, nil);
  59. OpenIO(ErrOutput, @WriteChar, @ReadChar, fmOutput, nil);
  60. OpenIO(StdOut, @WriteChar, @ReadChar, fmOutput, nil);
  61. OpenIO(StdErr, @WriteChar, @ReadChar, fmOutput, nil);
  62. end.