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