| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- (*
- BSD 2-Clause License
- Copyright (c) 2019-2021, Anton Krotov
- All rights reserved.
- *)
- MODULE MSP430;
- IMPORT SYSTEM;
- CONST
- iv = 0FFC0H;
- bsl = iv - 2;
- sp = bsl - 2;
- empty_proc = sp - 2;
- bits = empty_proc - 272;
- bits_offs = bits - 32;
- types = bits_offs - 2;
- int_offs = 0;
- trap_offs = 2;
- GIE* = {3};
- CPUOFF* = {4};
- OSCOFF* = {5};
- SCG0* = {6};
- SCG1* = {7};
- TYPE
- TInterrupt* = RECORD priority*: INTEGER; sr*: SET; pc*: INTEGER END;
- TTrapProc* = PROCEDURE (modNum, modName, err, line: INTEGER);
- TIntProc* = PROCEDURE (priority: INTEGER; interrupt: TInterrupt);
- PROCEDURE SetTrapProc* (TrapProc: TTrapProc);
- VAR
- ptr: INTEGER;
- BEGIN
- SYSTEM.GET(sp, ptr);
- IF TrapProc = NIL THEN
- SYSTEM.PUT(ptr + trap_offs, empty_proc)
- ELSE
- SYSTEM.PUT(ptr + trap_offs, TrapProc)
- END
- END SetTrapProc;
- PROCEDURE SetIntProc* (IntProc: TIntProc);
- VAR
- ptr: INTEGER;
- BEGIN
- SYSTEM.GET(sp, ptr);
- IF IntProc = NIL THEN
- SYSTEM.PUT(ptr + int_offs, empty_proc)
- ELSE
- SYSTEM.PUT(ptr + int_offs, IntProc)
- END
- END SetIntProc;
- PROCEDURE SetIntPC* (interrupt: TInterrupt; NewPC: INTEGER);
- BEGIN
- SYSTEM.PUT(SYSTEM.ADR(interrupt.pc), NewPC)
- END SetIntPC;
- PROCEDURE SetIntSR* (interrupt: TInterrupt; NewSR: SET);
- BEGIN
- SYSTEM.PUT(SYSTEM.ADR(interrupt.sr), NewSR)
- END SetIntSR;
- PROCEDURE [code] DInt*
- 0C232H; (* BIC #8, SR *)
- PROCEDURE [code] EInt*
- 0D232H; (* BIS #8, SR *)
- PROCEDURE [code] CpuOff*
- 0D032H, 16; (* BIS #16, SR *)
- PROCEDURE [code] Halt*
- 4032H, 0F0H; (* MOV CPUOFF+OSCOFF+SCG0+SCG1, SR *)
- PROCEDURE [code] Restart*
- 4302H, (* MOV #0, SR *)
- 4210H, 0FFFEH; (* MOV 0FFFEH(SR), PC *)
- PROCEDURE [code] SetSR* (bits: SET)
- 0D112H, 2; (* BIS 2(SP), SR *)
- PROCEDURE [code] ClrSR* (bits: SET)
- 0C112H, 2; (* BIC 2(SP), SR *)
- PROCEDURE [code] Delay* (n: INTEGER)
- 4035H, 124, (* MOV #124, R5 *)
- (* L2: *)
- 4114H, 2, (* MOV 2(SP), R4 *)
- 8324H, (* SUB #2, R4 *)
- (* L1: *)
- 4303H, (* NOP *)
- 4303H, (* NOP *)
- 4303H, (* NOP *)
- 4303H, (* NOP *)
- 4303H, (* NOP *)
- 8314H, (* SUB #1, R4 *)
- 3800H - 7, (* JGE L1 *)
- 4303H, (* NOP *)
- 8315H, (* SUB #1, R5 *)
- 3800H - 13; (* JGE L2 *)
- END MSP430.
|