-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathO.STACK
More file actions
114 lines (114 loc) · 1.93 KB
/
O.STACK
File metadata and controls
114 lines (114 loc) · 1.93 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
10PROCheader("sp!")
20spstore%=P%
30[:OPT3
40LDX#stkbot%
50RTS
60]
70PROCheader("ap!")
80apstore%=P%
90[:OPT3
100LDA#astkbot%
110STAasp%
120RTS
130]
140PROCheader("rp!")
150rpstore%=P%
160[:OPT3
170PLA
180STAsc%
190PLA
200STAsc%+1
210STXsc%+2
220LDX#&FF
230TXS
240LDAsc%+1
250PHA
260LDAsc%
270PHA
280LDXsc%+2
290RTS
300]
310PROCheader("sp@")
320spfetch%=P%
330FORo%=0TO3STEP3
340P%=spfetch%
350[:OPTo%
360CPX#stktop%
370BEQoverflow
380TXA
390DEX:DEX
400STAstk%+1,X
410LDA#&00
420STAstk%+2,X
430RTS
440.overflow
450LDA#estko%
460JMP(svct%)
470]:NEXTo%
480PROCheader("ap@")
490apfetch%=P%
500FORo%=0TO3STEP3
510P%=apfetch%
520[:OPTo%
530CPX#stktop%
540BEQoverflow
550DEX:DEX
560LDAasp%
570STAstk%+1,X
580LDA#&00
590STAstk%+2,X
600RTS
610.overflow
620LDA#estko%
630JMP(svct%)
640]:NEXTo%
650PROCheader("rp@")
660rpfetch%=P%
670FORo%=0TO3STEP3
680P%=rpfetch%
690[:OPTo%
700CPX#stktop%
710BEQoverflow
720DEX:DEX
730STXsc%
740TSX:TXA
750LDXsc%
760STAstk%+1,X
770LDA#&00
780STAstk%+2,X
790RTS
800.overflow
810LDA#estko%
820JMP(svct%)
830]:NEXTo%
840OSCLI("EXEC E.STACK")
850END
860DEFPROCheader(name$)
870PRINT:PRINT
880PRINT" *** ";~P%;" nfa '";name$;"'"
890LETxhere%=P%
900LETspan%=LEN(name$)
910?P%=span%
920PROCsetbit(7,P%)
930LETP%=P%+1
940IFspan% > length%THENspan%=length%
950FORi%=1TOspan%
960?P%=ASC(MID$(name$,i%,1))
970LETP%=P%+1
980NEXTi%
990PRINT" *** ";~P%;" lfa (";~last%;")"
1000PROCsetbit(7,P%-1)
1010PROCpoke(last%,P%)
1020LETP%=P%+2
1030LETlast%=xhere%
1040LETlabel%=label%+1
1050PRINT:PRINT
1060ENDPROC
1070DEFPROCsetbit(bit%,addr%)
1080?addr%=?addr%OR(2^bit%)
1090ENDPROC
1100DEFPROCpoke(val%,addr%)
1110?addr%=val%MOD256
1120?(addr%+1)=val%DIV256
1130ENDPROC
1140DEFFNliteral(value%):[:OPTo%:JSRlit%:]:PROCpoke(value%,P%):P%=P%+2:=o%