Subversion Repositories pentevo

Rev

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