Subversion Repositories pentevo

Rev

Rev 635 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
633 savelij 1
 
2
;        ORG     0X6000
3
 
4
        ; rom programming example for PENTEVO
5
        ; contains 2 parts: example and working procedures
6
 
7
 
8
        ; prepare hardware
9
 
10
;        DI 
11
 
12
;        LD      A,3
13
;        OUT     (0XBF),A ; enable shadow ports, enable ROM write
14
 
15
 
16
        ; write byte
17
;
18
 ;      LD      E,0X04
19
  ;     LD      HL,0X0001
20
   ;    LD      A,0X55
21
    ;   CALL    PGM_BYTE
22
 
23
     ;  LD      HL,0X0123
24
      ; LD      A,0XAA
25
       ;CALL    PGM_BYTE
26
 
27
 
28
        ; erase 64Kb block
29
 
30
;       LD      E,0X04
31
 ;      LD      HL,0X0000
32
  ;     CALL    ERASE_BLK
33
 
34
 
35
        ; program 16k of shit
36
 
37
;       LD      E,0X04
38
 ;      LD      HL,0X0000
39
  ;     LD      IX,0X8000
40
   ;    LD      BC,0X4000
41
 
42
;L2
43
    ;   LD      A,(IX)
44
     ;  CALL    PGM_BYTE
45
 
46
      ; INC     IX
47
       ;CALL    INC_EHL
48
;       DEC     BC
49
 ;      LD      A,B
50
  ;     OR      C
51
   ;    JR      NZ,L2
52
 
53
        ; read page
54
 
55
;        LD      E,0X04
56
;        LD      HL,0X0000
57
;        LD      IX,0X8000
58
;        LD      BC,0X4000
59
;L1
60
;        CALL    RDBYTE
61
;        LD      (IX),A
62
 
63
;        CALL    INC_EHL
64
;        INC     IX
65
;        DEC     BC
66
;        LD      A,B
67
;        OR      C
68
;        JR      NZ,L1
69
 
70
;        LD      BC,0XFFF7 ;return RAM to 0XC000..0XFFFF
71
;        LD      A,0XFF
72
;        OUT     (C),A
73
 
74
;        LD      A,0
75
;        OUT     (0XBF),A ; disable ports, disable ROM write
76
 
77
;        EI 
78
;        RET 
79
 
80
 
81
 
82
 
83
 
84
;INC_EHL
85
;        INC     L
86
;        RET     NZ
87
;        INC     H
88
;        RET     NZ
89
;        INC     E
90
;        RET 
91
 
92
 
93
 
94
PGM_BYTE
95
        ; programs byte to the given location
96
        ; address in EHL (512kB only)
97
        ; byte in A
98
 
99
        ; preserves BC,DE,HL
100
 
101
        ; returns carry=1 if error
102
 
103
        PUSH    DE
104
        PUSH    HL
105
        PUSH    AF
106
 
107
        LD      E,0X00
108
        LD      HL,0X0555
109
        LD      A,0XAA
110
        CALL    WRBYTE
111
 
112
        LD      HL,0X2AA
113
        LD      A,0X55
114
        CALL    WRBYTE
115
 
116
        LD      HL,0X555
117
        LD      A,0XA0
118
        CALL    WRBYTE
119
 
120
        POP     AF
121
        POP     HL
122
        POP     DE
123
        CALL    WRBYTE
124
 
125
        JR      ERR_END ; wait for end/error as always
126
 
127
 
128
ERASE_BLK
129
        ; erases 64kB block of ROM.
130
        ; block address is given in EHL (any addr in block)
131
 
132
        ; returns carry=1 if error
133
 
134
        ; BC,DE,HL are preserved
135
 
136
 
137
        PUSH    DE
138
        PUSH    HL
139
 
140
        LD      E,0X00
141
        LD      HL,0X0555
142
        LD      A,0XAA
143
        CALL    WRBYTE
144
 
145
        LD      HL,0X2AA
146
        LD      A,0X55
147
        CALL    WRBYTE
148
 
149
        LD      HL,0X555
150
        LD      A,0X80
151
        CALL    WRBYTE
152
 
153
        LD      A,0XAA
154
        CALL    WRBYTE
155
 
156
        LD      HL,0X2AA
157
        LD      A,0X55
158
        CALL    WRBYTE
159
 
160
        POP     HL
161
        POP     DE
162
        LD      A,0X30
163
        CALL    WRBYTE
164
 
165
        ;now wait 100uS @ 14MHz to start actual block erase
166
 
167
        LD      A,87
168
        DEC     A
169
        JR      NZ,$-1
170
 
171
        ; then wait for erase end
172
ERR_END
173
        CALL    WAIT_END
174
 
175
        RET     NC ; if no error - return
176
 
177
        ; send read/reset command to ROM
178
 
179
        LD      A,0XF0
180
        CALL    WRBYTE
181
 
182
        ;then wait 10uS @ 14MHz
183
 
184
        LD      A,9
185
        DEC     A
186
        JR      NZ,$-1
187
 
188
        SCF
189
        RET ; set error condition
190
 
191
WAIT_END;wait for ROM to end op or to indicate error
192
 
193
        PUSH    BC
194
 
195
WE_REPEAT
196
        CALL    RDBYTE
197
        LD      B,A
198
 
199
        CALL    RDBYTE
200
        XOR     B
201
 
202
        BIT     6,A
203
        JR      Z,WE_END ; no toggle - end! (carry is clear)
204
 
205
        BIT     5,A
206
        JR      NZ,WE_REPEAT ; if toggle and error bit toggles -
207
                             ; repeat reading
208
 
209
        BIT     5,B ; toggle, error bit is set - error!
210
        JR      Z,WE_REPEAT ; otherwise - just toggle, wait more
211
 
212
;WE_ERROR
213
        SCF
214
 
215
WE_END  POP     BC
216
        RET
217
 
218
WRBYTE  ; writes given in A byte to rom at address EHL
219
        ; in a range 0..512kB
220
 
221
        ; assumes shadow ports are on
222
        ; uses paging in 0XC000..0XFFFF window
223
 
224
        ; preserves A,BC,DE,HL
225
 
226
        PUSH    BC
227
        PUSH    AF
228
 
229
        LD      A,E
230
        AND     7 ; 512kB only
231
        LD      B,A
232
 
233
        LD      A,H
234
        AND     0XC0
235
        OR      B
236
 
237
        RLCA
238
        RLCA
239
 
240
        CPL
241
        AND     0X3F
242
;;;;;;;;OR      0X00
243
 
244
        LD      BC,WIN_A3;0XFFF7
245
        OUT     (C),A    ; page is done
246
 
247
        LD      A,H
248
        OR      0XC0
249
        LD      B,A
250
        LD      A,L
251
        LD      C,A
252
 
253
        POP     AF
254
        LD      (BC),A
255
 
256
        POP     BC
257
        RET
258
 
259
RDBYTE  ; read byte (same as WRBYTE), reads in A
260
 
261
        PUSH    BC
262
 
263
 
264
        LD      A,E
265
        AND     7 ; 512kB only
266
        LD      B,A
267
 
268
        LD      A,H
269
        AND     0XC0
270
        OR      B
271
 
272
        RLCA
273
        RLCA
274
 
275
        CPL
276
        AND     0X3F
277
;;;;;;;;OR      0X00
278
 
279
        LD      BC,WIN_A3;0XFFF7
280
        OUT     (C),A    ; page is done
281
 
282
        LD      A,H
283
        OR      0XC0
284
        LD      B,A
285
        LD      A,L
286
        LD      C,A
287
 
288
        LD      A,(BC)
289
 
290
        POP     BC
291
        RET