The privileged instructions to manipulate the IP register are listed below.

IPSET 0 ; shift IP left and set priority 00 in bits 1,0

IPSET 1

 

IPSET 2

 

IPSET 3

 

IPRES

; rotate IP right 2 bits, restoring previous priority

RETI

; pops IP from stack and then pops return address

POP IP

; pop IP register from stack

3.5.4 Critical Sections

Certain library routines may need to disable interrupts during a critical section of code. Generally these routines are only legal to call if the processor priority is either 0 or 1. A priority higher than this implies custom hand-coded assembly routines that do not call general-purpose libraries. The following code can be used to disable priority 1 interrupts.

IPSET 1 ; save previous priority and set priority to 1

....critical section...

IPRES ; restore previous priority

This code is safe if it is known that the code in the critical section does not have an embed- ded critical section. If this code is nested, there is the danger of overflowing the IP register. A different version that can be nested is the following.

PUSH IP

IPSET 1 ; save previous priority and set priority to 1

....critical section...

POP IP ; restore previous priority

The following instructions are also privileged.

LD A,xpc

LD xpc,a

BIT B,(HL)

3.5.5 Semaphores Using Bit B,(HL)

The bit B,(HL) instruction is privileged to allow the construction of a semaphore by the following code.

BIT

B,(HL)

;

test

a bit in

the byte at (HL)

SET

B,(HL)

;

make

sure bit

set, does not affect flag

;if zero flag set the semaphore belongs to us;

;otherwise someone else has it

A semaphore is used to gain control of a resource that can only belong to one task or pro- gram at a time. This is done by testing a bit to see if it is on, in which case someone else is using the resource, otherwise setting the bit to indicate ownership of the resource. No interrupt can be allowed between the test of the bit and the setting of the bit as this might allow two different program to both think they own the resource.

User’s Manual

47

Page 56
Image 56
Jameco Electronics 3000, 2000 manual Critical Sections, Semaphores Using Bit B,HL