-
Notifications
You must be signed in to change notification settings - Fork 82
/
numsyms
185 lines (159 loc) · 2.34 KB
/
numsyms
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
.PAGE 'NUMSYMS'
; CONVERT BASE 8,10,16 TO BINARY
; CARRY SET IF SUCCESSFUL CONVERSION, CARRY CLEAR IF ERROR.
; X MUST POINT TO CHARACTER
NUMBER LDA #0
STA KNVAL ;VALUE OF NUMBER IS 0
STA KNVAL+1
STA KLEN
E10 JSR NUMRC ;SEE IF NUMERIC
BCC E20 ;NOT NUMERIC
SBC #48 ;REMOVE ZONE
JMP E30 ;CHECK FOR VALID BASE
E20 JSR NALPH ;CHAR ALPHABETIC
BCC LD94A ;NO...MEANS ERROR
SBC #55 ;ALPHA--REMOVE ZONE
E30 CMP KBASE ;BASE VALID
BCS LD94A
INC KLEN
PHA
LDY KBASE+1
BPL LD91D
LDY #3
LDA KNVAL+1
ASL A
STA TEMP+1
LDA KNVAL
ROL A
STA TEMP
LD91D ASL KNVAL+1
ROL KNVAL
JSR LD94F
DEY
BNE LD91D
BIT KBASE+1
BPL LD93B
E115 LDA KNVAL+1 ;ADD TO FINISH
CLC
ADC TEMP+1
STA KNVAL+1
LDA KNVAL
ADC TEMP
STA KNVAL
JSR LD94F
LD93B PLA
CLC
ADC KNVAL+1
STA KNVAL+1
BCC E130
INC KNVAL
E130 INX
CPX IMAXCL
BCC E10
LD94A LDA KLEN
CMP #1
LD94E RTS
LD94F BCC LD94E
LDA #$08
JMP LD87B
LD956 .BYTE $02,$01,$08,$03,$0A,$FF,$10,$04
NFIND LDA STSAVE
STA SYMTBL
LDA STSAVE+1
STA SYMTBL+1
LDA #0
STA TOPPNT+1
STA TOPPNT
LD96C INC TOPPNT+1
BNE LD972
INC TOPPNT
LD972 LDA NOSYM+1
CMP TOPPNT+1
LDA NOSYM
SBC TOPPNT
BCC G101
XXXD2 LDY #5 ;PUT SYM INTO TABLE
G100 LDA ISYM,Y ;SOURCE
CMP (SYMTBL),Y ;DESTINATION
BNE LD994
DEY
BPL G100 ;NOT DONE
;
; SYMBOL IS IN TABLE- DEFINE
;
LDY #6
LDA (SYMTBL),Y
STA KNVAL
INY
LDA (SYMTBL),Y
STA KNVAL+1
G101 RTS
LD994 LDA SYMTBL
CLC
ADC #8
STA SYMTBL
BCC LD96C
INC SYMTBL+1
JMP LD96C
NSERT STA KNVAL
STY KNVAL+1
LDA SYMTBL
CMP ISYEND
LDA SYMTBL+1
SBC ISYEND+1
BCS LD9CC
LDY #5
LD9B2 LDA ISYM,Y
STA (SYMTBL),Y
DEY
BPL LD9B2
LDY #$06
LDA KNVAL
STA (SYMTBL),Y
INY
LDA KNVAL+1
STA (SYMTBL),Y
INC NOSYM+1
BNE LD9CB
INC NOSYM
LD9CB RTS
LD9CC LDX #MSG2-MSGS
JSR LDFE1
JMP LD000
; SEARCH OPCODE TAB FOR OPCODE
; CARRY SET IF OPCODE FOUND, CARRY CLEAR IF OPCODE NOT FOUND.
NOPFND
LDA #<OPRNDS
LDY #>OPRNDS
LDX #NUMASM-1
JSR LD9EA
BCC LD9E9
LDA KTMPL,X ;TEMPLATE
STA JOPTEM
LDA KCODE,X ;BASE OPCODE
STA JOPBAS
LD9E9 RTS
LD9EA STA TBLPTR
STY TBLPTR+1
LD9EE LDY #2
LD9F0 LDA ISYM,Y
CMP (TBLPTR),Y
BNE LD9FC
DEY
BPL LD9F0
SEC
RTS
;
; NO MATCH
;
LD9FC LDA TBLPTR
SEC
SBC #3
STA TBLPTR
BCS LDA07
DEC TBLPTR+1
LDA07 DEX
BPL LD9EE
CLC ;OPCODE NOT FOUND
LDA0B RTS
.END