summaryrefslogtreecommitdiff
path: root/programs/queue.pal
blob: 7d4cce740db333e176dcc099219f43cde258777d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/ vim: set sw=8 noexpandtab :

*000

INTRET,	0
	JMP GOTINT

*010

IHEAD,	7777		/ because preincrement
ITAIL,	7777

OHEAD,	7777		/ because preincrement
OTAIL,	7777

*100

OBUSY,	0

*200

	CLA IAC
	KIE
	ION
LOOP,	CLA
	TAD ITAIL
	CMA IAC
	TAD IHEAD
	SNA
	JMP LOOP
	CLA
	CDF 0010
	TAD I ITAIL
	CDF 0020
	DCA I OHEAD
	CDF 0000
	IOF		/ critical section
	TAD OBUSY
	SNA
	TFL
	ION
	JMP LOOP	/ end critical section

*400

GOTINT,	DCA SAVEA
	GTF
	AND (7577)
	DCA SAVEF
	TSF
	JMP KBIN
	TCF
	CLA
	DCA OBUSY
	TAD OTAIL
	CMA IAC
	TAD OHEAD
	SNA
	JMP KBIN
	CLA
	CDF 0020
	TAD I OTAIL
	CDF 0000
	TPC
	CLA IAC
	DCA OBUSY
KBIN,	KSF
	JMP RETINT
	KRB
	CDF 0010
	DCA I IHEAD
	CDF 0000
RETINT,	CLA
	TAD SAVEF
	RTF
	CLA
	TAD SAVEA
	ION
	JMP I INTRET

SAVEA,	0
SAVEF,	0