summaryrefslogtreecommitdiff
path: root/programs/echo_optimal.pal
blob: 12813096c41cf8d2cd9b59f82c4c46b239d358d6 (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
/ vim: set sw=8 noexpandtab :

*000

INTRET,	0
	JMP GOTINT

*010

HEAD,	7777		/ because preincrement
TAIL,	7777

*100

TTBUSY,	0		/ FIXME: sometimes we get wedged with TTBUSY=1, but TT flag is clear (no TT interrupt occurs)

*200

	CLA IAC
	KIE
	ION
	CLA
LOOP,	TAD TTBUSY
	SZA
	JMP LOOP
	TAD TAIL
	CMA IAC
	TAD HEAD
	SNA
	JMP LOOP
	CLA
	CDF 0010
	TAD I TAIL
	CDF 0000
	IOF		/ critical section
	TPC
	CLA IAC
	ION
	DCA TTBUSY	/ end critical section
	JMP LOOP

*400

SAVEA,	0
SAVEF,	0

GOTINT,	DCA SAVEA
	GTF
	AND (7577)
	DCA SAVEF
	TSF
	JMP KBIN
	DCA TTBUSY
	TCF
KBIN,	KSF
	JMP RETINT
	KRB
	CDF 0010
	DCA I HEAD
	CDF 0000
RETINT,	CLA
	TAD SAVEF
	RTF
	CLA
	TAD SAVEA
	ION
	JMP I INTRET