Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     BSD 2-Clause License
  3.  
  4.     Copyright (c) 2019-2020, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE MSP430;
  9.  
  10. IMPORT SYSTEM;
  11.  
  12.  
  13. CONST
  14.  
  15.     iv  = 0FFC0H;
  16.  
  17.     bsl        = iv - 2;
  18.     sp         = bsl - 2;
  19.     empty_proc = sp - 2;
  20.     free_size  = empty_proc - 2;
  21.     free_adr   = free_size - 2;
  22.     bits       = free_adr - 272;
  23.     bits_offs  = bits - 32;
  24.     types      = bits_offs - 2;
  25.  
  26.     ram = 200H;
  27.  
  28.     trap = ram;
  29.     int  = trap + 2;
  30.  
  31.  
  32.     GIE*     = {3};
  33.     CPUOFF*  = {4};
  34.     OSCOFF*  = {5};
  35.     SCG0*    = {6};
  36.     SCG1*    = {7};
  37.  
  38.  
  39. TYPE
  40.  
  41.     TInterrupt* = RECORD priority*: INTEGER; sr*: SET; pc*: INTEGER END;
  42.  
  43.     TTrapProc* = PROCEDURE (modNum, modName, err, line: INTEGER);
  44.  
  45.     TIntProc*  = PROCEDURE (priority: INTEGER; interrupt: TInterrupt);
  46.  
  47.  
  48. PROCEDURE SetTrapProc* (TrapProc: TTrapProc);
  49. BEGIN
  50.     SYSTEM.PUT(trap, TrapProc)
  51. END SetTrapProc;
  52.  
  53.  
  54. PROCEDURE SetIntProc* (IntProc: TIntProc);
  55. BEGIN
  56.     SYSTEM.PUT(int, IntProc)
  57. END SetIntProc;
  58.  
  59.  
  60. PROCEDURE SetIntPC* (interrupt: TInterrupt; NewPC: INTEGER);
  61. BEGIN
  62.     SYSTEM.PUT(SYSTEM.ADR(interrupt.pc), NewPC)
  63. END SetIntPC;
  64.  
  65.  
  66. PROCEDURE SetIntSR* (interrupt: TInterrupt; NewSR: SET);
  67. BEGIN
  68.     SYSTEM.PUT(SYSTEM.ADR(interrupt.sr), NewSR)
  69. END SetIntSR;
  70.  
  71.  
  72. PROCEDURE [code] DInt*
  73.     0C232H; (*  BIC #8, SR  *)
  74.  
  75.  
  76. PROCEDURE [code] EInt*
  77.     0D232H; (*  BIS #8, SR  *)
  78.  
  79.  
  80. PROCEDURE [code] CpuOff*
  81.     0D032H, 16; (*  BIS #16, SR  *)
  82.  
  83.  
  84. PROCEDURE [code] Halt*
  85.     4032H, 0F0H;  (*  MOV CPUOFF+OSCOFF+SCG0+SCG1, SR  *)
  86.  
  87.  
  88. PROCEDURE [code] Restart*
  89.     4302H,          (*  MOV #0, SR          *)
  90.     4210H, 0FFFEH;  (*  MOV 0FFFEH(SR), PC  *)
  91.  
  92.  
  93. PROCEDURE [code] SetSR* (bits: SET)
  94.     0D112H, 2; (*  BIS 2(SP), SR  *)
  95.  
  96.  
  97. PROCEDURE [code] ClrSR* (bits: SET)
  98.     0C112H, 2; (*  BIC 2(SP), SR  *)
  99.  
  100.  
  101. PROCEDURE GetFreeFlash* (VAR address, size: INTEGER);
  102. BEGIN
  103.     SYSTEM.GET(free_adr, address);
  104.     SYSTEM.GET(free_size, size)
  105. END GetFreeFlash;
  106.  
  107.  
  108. PROCEDURE [code] Delay* (n: INTEGER)
  109.     4035H, 124,  (*  MOV  #124, R5   *)
  110.                  (*  L2:             *)
  111.     4114H, 2,    (*  MOV  2(SP), R4  *)
  112.     8324H,       (*  SUB  #2, R4     *)
  113.                  (*  L1:             *)
  114.     4303H,       (*  NOP             *)
  115.     4303H,       (*  NOP             *)
  116.     4303H,       (*  NOP             *)
  117.     4303H,       (*  NOP             *)
  118.     4303H,       (*  NOP             *)
  119.     8314H,       (*  SUB  #1, R4     *)
  120.     3800H - 7,   (*  JGE  L1         *)
  121.     8315H,       (*  SUB  #1, R5     *)
  122.     3800H - 12;  (*  JGE  L2         *)
  123.  
  124.  
  125. END MSP430.