Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1186 | savelij | 1 | H function X,(X>>8)&0FF |
2 | L function X,X&0FF |
||
3 | |||
4 | ; .TITLE TTYPGM, ´ SC/MP PROGRAMMER´ |
||
5 | |||
6 | ; "TTYPGM" IS A PROGRAM THAT ALLOWS THE SC/MP LCDS TO |
||
7 | ; PROGRAM MM5204 OR MM4204 PROMS. |
||
8 | |||
9 | ; THE COMMANDS AND THEIR FORMATS ARE: |
||
10 | |||
11 | ; CXXXX COPY PROM INTO MEMORY |
||
12 | |||
13 | ; VXXXX VERIFY PROM AGAINST MEMORY |
||
14 | |||
15 | ; PXXXX PROGRAM PROM FROM MEMORY |
||
16 | ; WITH CHECK FOR ERASED |
||
17 | |||
18 | ; YXXXX PROGRAM FROM MEMORY |
||
19 | ; WITHOUT CHECK FOR ERASED |
||
20 | |||
21 | ; WHERE XXXX IS THE HEX STARTING ADDRESS TO BE USED. |
||
22 | |||
23 | ; THE PROGRAM REQUIRES THAT THERE ARE 512 CONTINUOUS MEMORY |
||
24 | ; LOCATIONS UPWARDS FROM XXXX. |
||
25 | |||
26 | ; "TTYPGM" USES MEMORY ON THELCDS MOTHERBOARD FOR TEMPORARY |
||
27 | ; STRORAGE. THEREFORE, USER R/W MEMORY CAN BE ANYWHERE, |
||
28 | ; EXCEPT AS SHOWN BELOW. |
||
29 | |||
30 | ; "TTYPGM" CAN BE ASSEMBLED ANYWHERE THE USER HAS MEMORY |
||
31 | ; SPACE EXCEPT IN THE FOLLOWING LOCATIONS: |
||
32 | |||
33 | ; X'8000 -- X'83FF LOCATIONS OCCUPIED BY |
||
34 | ; PROGRAMMER HARDWARE |
||
35 | ; X'7000 -- X'7FFF LOCATIONS USED BY LCDS |
||
36 | |||
37 | ; A TELETYPE IS REQUIRED FOR EXECUTION |
||
38 | |||
39 | ;.PAGE 'POINTERS AND CONSTANTS' |
||
40 | |||
41 | $ = 0 |
||
42 | P1 = 1 |
||
43 | P2 = 2 |
||
44 | P3 = 3 |
||
45 | |||
46 | PPRGMR = 08000 ;PERIPHERAL ADDR. OF PROM |
||
47 | ; PROGRAMMER BOARD |
||
48 | VP = 014 ;ORDER CODE FOR PROG. VOLTAGE |
||
49 | RD = 0C ;ORDER CODE FOR READ |
||
50 | VSS = 04 ;ORDER CODE FOR VSS,VBB,VDD |
||
51 | CS = 01C ;ORDER CODE FOR CHIP SELECT |
||
52 | LOAD = 0 ;ORDER CODE TO LOAD DATA |
||
53 | CLK = 1 ;ORDER CODE TO CLOCK COUNTER |
||
54 | RDPRM = 2 ;ORDER CODE TO READ PROM |
||
55 | ; DATA |
||
56 | CLR = 3 ;ORDER CODE TO CLEAR COUNTER |
||
57 | ENBL = 4 ;ORDER CODE TO ENABLE CONTROL |
||
58 | ; LATCH |
||
59 | PUTC = 07AE2 ;PUT CHARACTER POINTER |
||
60 | GECHO = 07A91 ;GET CHARACTER W/ECHO POINTER |
||
61 | GHEX = 07B50 ;POINTER TO GET 4 HEX DIGITS |
||
62 | MESG = 07B17 ;POINTER TO MESSAGE ROUTINE |
||
63 | PHEX = 07BB3 ;POINTER TO PUT HEX ROUTINE |
||
64 | STACK = 077D0 ;STACK POINTER TO MOTHERBOARD |
||
65 | ; R/W MEMORY |
||
66 | HI = -17 ;TEMPORARY LOCATIONS OFFSET |
||
67 | LO = -18 ; FROM STACK POINTER |
||
68 | SAVLO = -19 |
||
69 | SAVHI = -20 |
||
70 | HCNT = -21 |
||
71 | DPLO = -22 |
||
72 | DPHI = -23 |
||
73 | |||
74 | ;.PAGE 'COMMAND INPUT PROCESSING' |
||
75 | |||
76 | ; *** COMMAND ENTRY ROUTINE *** |
||
77 | |||
78 | NOP |
||
79 | ENTRY: |
||
80 | LDI H(STACK) ; INITIALIZE STACK PTR |
||
81 | XPAH P2 |
||
82 | LDI L(STACK) |
||
83 | XPAL P2 |
||
84 | PROMPT: |
||
85 | JS P3,MESG ;PROMPT FOR COMMAND |
||
86 | .DBYTE PRMPT |
||
87 | JS P3,GECHO ;GO TO GET CHAR W/ECHO |
||
88 | ANI 07F ;MASK OUT PARITY, IF ANY |
||
89 | XAE ;SAVE CHAR IN E. REG. |
||
90 | LDI H(CMDTBL) ;SET PTR. TO COMMAND TABLE |
||
91 | XPAH P1 |
||
92 | LDI L(CMDTBL) |
||
93 | XPAL P1 |
||
94 | CCL |
||
95 | CLOOP: |
||
96 | LD @3(P1) ;GET COMMAND CHAR |
||
97 | JZ ERROR ;END OF TABLE, ERROR ON INPUT |
||
98 | XRE ;CHECK FOP CORRECT COMMAND |
||
99 | JNZ CLOOP ;NOT RIGHT, TRY NEXT |
||
100 | LD @-1(P1) ;FOUND, COMMAND, GET ADDR. |
||
101 | XAE ;SAVE TEMPORARILY IN E. REG |
||
102 | LD @-1(P1) |
||
103 | XPAH P1 |
||
104 | LDE |
||
105 | XPAL P1 |
||
106 | XPPC P1 ;EXECUTE COMMAND |
||
107 | JMP PROMPT |
||
108 | ERROR: |
||
109 | LDI L(PUTC)-1 |
||
110 | XPAL P3 |
||
111 | LDI '?' |
||
112 | XPPC P3 |
||
113 | JMP PROMPT |
||
114 | |||
115 | ;.PAGE 'PROM ACCESS AND PROGRAMMING ROUTINES' |
||
116 | |||
117 | ; *** ROUTINE TO CHECK PROM FOR ERASED CONDITION *** |
||
118 | |||
119 | ; THIS SUBROUTINE IS ALSO CALLED BY "PROG:" TO VERIFY THAT |
||
120 | ; THE PROM IS ERASED. |
||
121 | |||
122 | ERASED: |
||
123 | LDI H(PPRGMR) ;SET ADDR. OF PROGRAMMER |
||
124 | XPAH P3 |
||
125 | LDI L(PPRGMR) |
||
126 | XPAL P3 |
||
127 | LDI 1 ;SET UPPER COUNT |
||
128 | ST HI(P2) ;STACK IS EMPTY, USE AS PTR. |
||
129 | ST RD(P3) ;SET READ MODE |
||
130 | ST CS(P3) ;SELECT PROM SOCKET |
||
131 | LDI 0 ;SET LOWER COUNT |
||
132 | ST LO(P2) |
||
133 | ST CLR(P3) ;CLEAR PROM COUNTER |
||
134 | ST LOAD(P3) ;CLEAR DATA LATCHES FOR READ |
||
135 | ELOOP: |
||
136 | LD RDPRM(P3) ;READ DATA OUT OF PROM |
||
137 | JNZ NOT ;DATA NOT ZERO? NOT ERASED |
||
138 | ST CLK(P3) ;DATA OK, BUMP COUNTER |
||
139 | DLD LO(P2) ;DECREMENT LOWER COUNT |
||
140 | JNZ ELOOP ;NOT DONE YET |
||
141 | DLD HI(P2) ;DECREMENT UPPER COUNT |
||
142 | JP ELOOP ;NOT DONE YET |
||
143 | XPPC P1 ;PROM IS ERASED |
||
144 | NOT: |
||
145 | JS P3,MESG ;GO TO MESSAGE RTN |
||
146 | .DBYTE NOTMSG ;PTR TO MESSAGE |
||
147 | RETN2: |
||
148 | JMP PROMPT ;RETURN TO COMMAND PROCESSING |
||
149 | |||
150 | ; *** ENTRY POINT TO PROGRAM PROM W/O CHECK FOR ERASED *** |
||
151 | |||
152 | WOCHK: |
||
153 | JS P3,GHEX ;GET ADDR. TO PROG. FROM |
||
154 | LDI H(PPRGMR) |
||
155 | XPAH P3 |
||
156 | LDI L(PPRGMR) |
||
157 | XPAL P3 |
||
158 | LD @1(P2) ;GET UPPER BYTE OF ADDR. |
||
159 | ADI 2 ;ADD 512 OFFSET |
||
160 | XPAH P1 |
||
161 | LD @1(P2) ;GET LOWER BYTE |
||
162 | XPAL P1 |
||
163 | JMP SET |
||
164 | |||
165 | ; *** ENTRY POINT TO PROGRAM PROM W/CHECK FOR ERASED *** |
||
166 | |||
167 | ; PROM IS PROGRAMMED FROM MOST SIGNIFICANT ADDRESS TO |
||
168 | ; LEAST SIGNIFICANT ADDRESS DUE TO INVERSION OF COUNTER |
||
169 | |||
170 | PROG: |
||
171 | JS P3,GHEX ;GET ADDR. TO PROGRAM FROM |
||
172 | LD @1(P2) ;RETRIEVE ADDR. FROM STACK |
||
173 | XAE |
||
174 | LD @1(P2) |
||
175 | ST SAVLO(P2) ;SAVE IN R/W MEMORY |
||
176 | LDE |
||
177 | ST SAVHI(P2) |
||
178 | LDI L(ERASED)-1 ;CHECK PROM FOR ERASED |
||
179 | XPAL P1 |
||
180 | XPPC P1 |
||
181 | LD SAVLO(P2) |
||
182 | XPAL P1 |
||
183 | LD SAVHI(P2) |
||
184 | ADI 2 ;ADD 512 OFFSET |
||
185 | XPAH P1 |
||
186 | SET: LDI 1 |
||
187 | ST HI(P2) ;SET UPPER LOC COUNT |
||
188 | LDI 0 |
||
189 | ST LO(P2) ;SET LOWER LOC COUNT |
||
190 | ST CLR(P3) ;CLEAR PROM COUNTER |
||
191 | NXTLOC: |
||
192 | LD @-1(P1) ;GET DATA TO PROGRAM |
||
193 | XAE ;SAVE IN EXTENSION REG. |
||
194 | THSLOC: |
||
195 | LDI H(PPROM) ;SET ADDR OF PROGRAMMING RTN |
||
196 | XPAH P1 |
||
197 | ST SAVHI(P2) ;SAVE PTR ADDR. |
||
198 | LDI L(PPROM)-1 |
||
199 | XPAL P1 |
||
200 | ST SAVLO(P2) |
||
201 | LDI -2 ;SET COUNT |
||
202 | ST HCNT(P2) ;SAVE HIT COUNT IN RAM |
||
203 | GO: |
||
204 | XPPC P1 |
||
205 | XRE ;CHECK PROM DATA |
||
206 | JZ OK ;PROM DATA CORRECT, DO X+5X |
||
207 | DLD HCNT(P2) ;DECREMENT HIT COUNT |
||
208 | JNZ GO |
||
209 | NPROG: |
||
210 | JS P3,MESG ;HIT COUNT OVER MAK. BAD PROM |
||
211 | .DBYTE BADPRM |
||
212 | LOC: |
||
213 | LDI L(PHEX)-1 |
||
214 | XPAL P3 |
||
215 | LD HI(P2) |
||
216 | XPPC P3 |
||
217 | LD LO(P2) |
||
218 | CCL ;CLEAR CARRY/LINK FLAG |
||
219 | ADI -1 ;CORRECT COUNT |
||
220 | XPPC P3 |
||
221 | JMP RETN2 |
||
222 | OK: |
||
223 | CCL |
||
224 | LDI 0 |
||
225 | ST DPHI(P2) ;CLEAR UPPER D. P. COUNT |
||
226 | CAD HCNT(P2) ;COMPLEMENT HIT COUNT |
||
227 | ST HCNT(P2) |
||
228 | CCL ;CLEAR CARRY/LINK FLAG |
||
229 | ADD HCNT(P2) ;COMPUTE 5X |
||
230 | ST DPLO(P2) |
||
231 | LDI 0 |
||
232 | ADD DPHI(P2) |
||
233 | ST DPHI(P2) ;2X |
||
234 | CCL |
||
235 | LD DPLO(P2) |
||
236 | ADD DPLO(P2) |
||
237 | ST DPLO(P2) |
||
238 | LD DPHI(P2) |
||
239 | ADD DPHI(P2) |
||
240 | ST DPHI(P2) ;4X |
||
241 | CCL |
||
242 | LD HCNT(P2) |
||
243 | ADD DPLO(P2) |
||
244 | ST DPLO(P2) |
||
245 | LDI 0 |
||
246 | ADD DPHI(P2) |
||
247 | ST DPHI(P2) |
||
248 | PRLP: |
||
249 | XPPC P1 ;PROGRAM PROM |
||
250 | DLD DPLO(P2) ;DECREMENT LOWER COUNT |
||
251 | JNZ PRLP ;NOT DONE |
||
252 | DLD DPHI(P2) ;DECREMENT UPPER COUNT |
||
253 | JP PRLP ;NOT DONE |
||
254 | LD SAVLO(P2) ;RESTORE P1 |
||
255 | XPAL P1 |
||
256 | LD SAVHI(P2) |
||
257 | XPAH P1 |
||
258 | UPDATE: |
||
259 | ST CLK(P3) ;BUMP PROM COUNTER |
||
260 | DLD LO(P2) ;DECREMENT LOWER LOC COUNT |
||
261 | JNZ NXTLOC ;NOT DONE |
||
262 | DLD HI(P2) ;DECREMENT UPPER LOC COUNT |
||
263 | JP NXTLOC ;NOT DONE |
||
264 | JMP RETN1 ;PROGRAMMING DONE |
||
265 | PPROM: |
||
266 | LDI 0 |
||
267 | ST RD(P3) ;TURN OFF READ MODE AND |
||
268 | ST CS(P3) ; CHIP SELECT |
||
269 | LDE |
||
270 | ST LOAD(P3) ;SEND DATA TO PROGRAMMER |
||
271 | LDI 1 |
||
272 | ST VSS(P3) ;TURN ON VSS VOLTAGE |
||
273 | LDI 07F ;WAIT 500 MICROSECONDS |
||
274 | DLY 0 |
||
275 | ST VP(3) ;TURN ON PROGRAM PULSE |
||
276 | LDI 0FF |
||
277 | DLY 0 ;DELAY 1 MS |
||
278 | LDI 0 |
||
279 | ST VP(3) ;TURN OFF VP |
||
280 | LDI 20 ;WAIT 100 MICROSECONDS |
||
281 | DLY 0 |
||
282 | LDI 0 |
||
283 | ST VSS(P3) ;TURN OFF VSS VOLTAGE |
||
284 | LDI 20 ;WAIT 100 MICROSECONDS |
||
285 | DLY 0 |
||
286 | ST RD(P3) ;SET UP READ MODE |
||
287 | ST CS(P3) ;SELECT PROM SOCKET |
||
288 | LDI 0 |
||
289 | ST LOAD(P3) ;CLEAR DATA LATCHES |
||
290 | LD RDPRM(P3) ;READ DATA FROM PROM |
||
291 | XPPC P1 |
||
292 | JMP PPROM |
||
293 | |||
294 | ; *** COPY PROM TO RANGE IN MEMORY *** |
||
295 | |||
296 | COPY: |
||
297 | JS P1,SETRD ;SET READ MODE |
||
298 | LD @1(P2) ;RETRIEVE ADDR. FROM STACK |
||
299 | ADI 2 ;ADD 512 OFFSET |
||
300 | XPAH P1 |
||
301 | LD @1(P2) |
||
302 | XPAL P1 |
||
303 | CPLOOP: |
||
304 | LD RDPRM(P3) ;GET PROM DATA |
||
305 | ST @-1(P1) ;STORE INTO MEMORY |
||
306 | ST CLK(P3) ;BUMP PROM COUNTER |
||
307 | DLD LO(P2) ;DECREMENT LOC COUNTER LOW |
||
308 | JNZ CPLOOP |
||
309 | DLD HI(P2) ;DECREMENT LOC COUNTER HIGH |
||
310 | JP CPLOOP ;NOT DONE |
||
311 | RETN1: |
||
312 | LDI H(PROMPT) |
||
313 | XPAH P1 |
||
314 | LDI L(PROMPT)-1 |
||
315 | XPAL P1 |
||
316 | XPPC P1 |
||
317 | |||
318 | ; *** VERIFY PROM AGAINST RANGE IN MEMORY *** |
||
319 | |||
320 | VERIFY: |
||
321 | JS P1,SETRD ;SET READ MODE |
||
322 | LD @1(P2) |
||
323 | ADI 2 ;ADD 512 OFFSET |
||
324 | XPAH P1 |
||
325 | LD @1(P2) |
||
326 | XPAL P1 |
||
327 | VLOOP: |
||
328 | LD RDPRM(P3) ;GET DATA FROM PROM |
||
329 | XOR @-1(P1) ;COMPARE AGAINST MEMORY DATA |
||
330 | JNZ NOVFY ;DOES NOT VERIFY |
||
331 | ST CLK(P3) ;BUMP PROM COUIHER |
||
332 | DLD LO(P2) ;DECREMENT LOC COUNTER LOW |
||
333 | JNZ VLOOP ;NOT DONE |
||
334 | DLD HI(P2) ;DECREMENT LOC COUNTER HIGH |
||
335 | JP VLOOP ;NOT DONE |
||
336 | JMP RETN1 |
||
337 | NOVFY: |
||
338 | JS P3,MESG ;GO TO MESSAGE ROUTINE |
||
339 | .DBYTE NVRFY |
||
340 | JMP RETN1 |
||
341 | SETRD: |
||
342 | JS P3,GHEX ;GET ADDR. TO COPY TO |
||
343 | LDI H(PPRGMR) ;PUT ADDR OF PROGRAMMER |
||
344 | XPAH P3 ; IN P3 |
||
345 | LDI L(PPRGMR) |
||
346 | XPAL P3 |
||
347 | LDI 1 ;SET UPPER LOC COUNTER |
||
348 | ST HI+2(P2) |
||
349 | ST RD(P3) ;SET READ MODE |
||
350 | ST CS(P3) ;SELECT PROM SOCKET |
||
351 | LDI 0 |
||
352 | ST LO+2(P2) |
||
353 | ST CLR(P3) ;CLEAR PROM COUNTER |
||
354 | ST LOAD(P3) ;CLEAR PROM DATA LATCHES |
||
355 | XPPC P1 |
||
356 | |||
357 | ;.PAGE 'MESSAGES AND COMMAND TABLE' |
||
358 | |||
359 | ; *** MESSAGES *** |
||
360 | |||
361 | NOTMSG: |
||
362 | .DBYTE 0D0A |
||
363 | .ASCII 'NOT ERASED' |
||
364 | .BYTE 0 |
||
365 | NVRFY: |
||
366 | .DBYTE 0D0A |
||
367 | .ASCII 'NO VERIFY' |
||
368 | .BYTE 0 |
||
369 | BADPRM: |
||
370 | .DBYTE 0D0A |
||
371 | .ASCII 'BAD PROM AT ' |
||
372 | .BYTE 0 |
||
373 | PRMPT: |
||
374 | .DBYTE 0D0A |
||
375 | .BYTE '?',0 |
||
376 | |||
377 | ; *** COMMAND TABLE *** |
||
378 | |||
379 | CMDTBL: |
||
380 | .BYTE 'P' |
||
381 | .DBYTE PROG-1 |
||
382 | .BYTE 'Y' |
||
383 | .DBYTE WOCHK-1 |
||
384 | .BYTE 'E' |
||
385 | .DBYTE ERASED-1 |
||
386 | .BYTE 'V' |
||
387 | .DBYTE VERIFY-1 |
||
388 | .BYTE 'C' |
||
389 | .DBYTE COPY-1 |
||
390 | .BYTE 0 |
||
391 | |||
392 | END |