OpenCores
URL https://opencores.org/ocsvn/m32632/m32632/trunk

Subversion Repositories m32632

[/] [m32632/] [trunk/] [TRIPUTER/] [monitor.32K] - Blame information for rev 50

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ns32kum
; MONITOR for TRIPUTER V0.1
2
; 27 May 2017
3 50 ns32kum
; updated 25 January 2021
4 35 ns32kum
sramsize  .equ x'8000
5
 
6
        movd x'20000010,r0
7
        jump r0
8
 
9
        .align 16
10 50 ns32kum
        movd 100000,r0          ; wait some ms until reset stable (board dependent)
11
wloop:  acbd -1,r0,wloop
12 35 ns32kum
        movd x'20400000,r1      ; address of LEDs
13
        movqd 0,0(r1)           ; all went off
14
        movd x'FFFF,4(r1)               ; the seven segment went off
15
        lprd cfg,x'BF6
16
        lprd sp,x'300
17
        lprd intbase,x'300
18
        addr nmi,@x'304
19
        movd x'20200000,r7      ; UART - fix Register
20
        addr welcome,r0
21
        bsr string
22
; SRAM-Test : Bit Test
23
        movqw 1,r2
24
        movd x'20100000,r3
25
l01:    movw r2,0(r3)           ; write
26
        addqd 2,r3
27
        addw r2,r2
28
        cmpqw 0,r2
29
        bne l01
30
        movqw 1,r2
31
        movqw 0,r3
32
l02:  cmpw 0(r3),r2             ; read
33
        bne err
34
        addqd 2,r3
35
        addw r2,r2
36
        cmpqw 0,r2
37
        bne l02
38
        movl datfp,-15(r3)
39
        cmpl datfp,-15(r3)
40
        bne err
41
; Address steping
42
        movd x'20100000,r3
43
        movd x'20000,r2         ; Initialize on 0
44
l03:    movqd 0,0(r3)
45
        addqd 4,r3
46
        acbd -1,r2,l03
47
        movd x'20100000,r3      ; Test of 0 and 1 write
48
        movd x'40000,r2
49
l04:    cmpqw 0,0(r3)
50
        bne err
51
        movqw -1,0(r3)
52
        addqd 2,r3
53
        acbd -1,r2,l04
54
        movd x'20100000,r3      ; Test on 1 and 0 write
55
        movd x'40000,r2
56
l05:    cmpqw -1,0(r3)
57
        bne err
58
        movqw 0,0(r3)
59
        addqd 2,r3
60
        acbd -1,r2,l05
61
        movd x'20100000,r3      ; Test on 0
62
        movd x'40000,r2
63
l06:    cmpqw 0,0(r3)
64
        bne err
65
        addqd 2,r3
66
        acbd -1,r2,l06
67
        addr sram_ok,r0
68
        bsr string
69
; INT vector points to SRAM
70
        movd x'20100300,r3
71
        addr nmi,4(r3)
72
        addr int,0(r3)
73
        lprd intbase,r3
74
        lprd sp,x'20100300
75
        lprd sb,x'20100400      ; working area
76
        movqd 0,-4(sb)          ; counter in NMI
77
        sbitb 31,x'300004(r7)   ; NMI enable
78
; iDRAM-Test : Bit Test
79
        movqd 1,r2
80
        movqd 0,r3
81
l21:    movd r2,0(r3)           ; write
82
        addqd 4,r3
83
        addd r2,r2
84
        cmpqd 0,r2
85
        bne l21
86
        movqd 1,r2
87
        movqd 0,r3
88
l22:  cmpd 0(r3),r2             ; read
89
        bne err
90
        addqd 4,r3
91
        addd r2,r2
92
        cmpqd 0,r2
93
        bne l22
94
        movl datfp,-15(r3)
95
        cmpl datfp,-15(r3)
96
        bne err
97
; Address stepping
98
        movqd 0,r3
99
        movw sramsize,r2                ; Initialize to 0
100
l23:    movqd 0,0(r3)
101
        addqd 4,r3
102
        acbw -1,r2,l23
103
        movqd 0,r3                      ; Test on 0 and 1 write
104
        movw sramsize,r2
105
l24:    cmpqd 0,0(r3)
106
        bne err
107
        movqd -1,0(r3)
108
        addqd 4,r3
109
        acbw -1,r2,l24
110
        movqd 0,r3                      ; Test on 1 und 0 write
111
        movd sramsize,r2
112
l25:    cmpqd -1,0(r3)
113
        bne err
114
        movqd 0,0(r3)
115
        addqd 4,r3
116
        acbw -1,r2,l25
117
        movqd 0,r3                      ; Test on 0
118
        movw sramsize,r2
119
l26:    cmpqd 0,0(r3)
120
        bne err
121
        addqd 4,r3
122
        acbw -1,r2,l26
123
; Now all Data right initialize
124
        movd x'300,r0
125
        lprd sp,r0
126
        lprd sb,x'400           ; working area
127
        addr int,0(r0)
128
        addr nmi,4(r0)
129
        lprd intbase,r0
130
        movqd 0,-8(sb)          ; readpointer of RX buffer
131
        movqd 0,-12(sb)         ; writepointer of RX buffer
132
        movqb 0,-4(sb)          ; count byte for NMI
133
        movqd 0,-20(sb)         ; pointer for Dump
134
        addr idram_ok,r0
135
        bsr string
136
        bispsrw x'800           ; Int enable
137
        sbitb 9,0(r7)           ; UART RX Int on
138
        addr string,-24(sb)     ; save address of string service routine
139
; ***************************************************************
140
; Endless loop : wait on Input from UART
141
; ***************************************************************
142
new:    movd x'20240002,-2(sb)
143
        sprd sb,r0
144
        bsr string
145
        movqd 0,-16(sb)         ; Number of characters in buffer
146
loop:   wait
147
        cmpd -8(sb),-12(sb)     ; has the UART something received?
148
        beq loop                        ; No
149
; Auswertung
150
        movd -8(sb),r1
151
        movb x'100(sb)[r1:b],r0
152
        addqb 1,-8(sb)
153
        checkb r1,cvalid,r0     ; special character ?
154
        bfs sys1                        ; Yes
155
        movd -16(sb),r1
156
        cmpqd 0,r1
157
        bne sys2
158
        cmpb '+',r0
159
        beq sys3
160
        cmpb '-',r0
161
        beq sys4
162
sys2:   movb r0,0(sb)[r1:b]
163
        addr 1(r1),-16(sb)
164
sys0:   bsr out
165
        br loop
166
sys1:   cmpb 8,r0                       ; Delete
167
        bne sys5
168
        cmpqd 0,-16(sb)
169
        beq loop
170
        addqd -1,-16(sb)
171
        bsr out
172
        movb ' ',r0
173
        bsr out
174
        movb 8,r0
175
        br sys0
176 50 ns32kum
; Here is some confusion about CR and LF operation with a terminal
177
sys5:   cmpb 13,r0              ; CR only output
178
        bne sys_x               ; was earlier sys0
179
        bsr out
180
        movb 10,r0
181
sys_x:
182
        cmpb 10,r0              ; LF now analyzing input
183 35 ns32kum
        bne new
184
; Analyzing input:
185
        bsr out
186
        sprd sb,r2
187
        movd -16(sb),r1         ; Number of characters in buffer
188
sys7:   cmpqd 0,r1
189
        beq new
190
        movb 0(r2),r0
191
        addqd 1,r2
192
        addqd -1,r1
193
        cmpb ' ',r0
194
        beq sys7                        ; next character
195
        bicb x'20,r0            ; only capital letters
196
        movqd 0,r6
197
        cmpb 'L',r0                     ; "Load"
198
        beq sys6
199
        movqd 1,r6
200
        cmpb 'R',r0                     ; "Run"
201
        beq sys6
202
        movqd 2,r6
203
        cmpb 'D',r0                     ; "Dump"
204
        beq sys6
205
        br erin                 ; Error in input
206
; now look for ' ' and address input
207
sys6: cmpqd 0,r1
208
        beq erin                        ; no input any more
209
        cmpb ' ',0(r2)
210
        addqd 1,r2
211
        addqd -1,r1
212
        bne sys6
213
; now look for characters
214
sys8:   cmpqd 0,r1
215
        beq erin
216
        cmpb ' ',0(r2)
217
        addqd 1,r2
218
        addqd -1,r1
219
        beq sys8
220
; Addresse build
221
        movqd 0,r4
222
sy10:   movb -1(r2),r3
223
        checkb r5,cziff,r3
224
        bfc sy11
225
        bicb x'20,r3
226
        checkb r5,cabc,r3
227
        bfs erin                        ; illegal character -> Abort
228
        addb 10,r5
229
sy11:   ashd 4,r4
230
        orb r5,r4
231
        cmpqd 0,r1
232
        beq sys9
233
        addqd 1,r2
234
        addqd -1,r1
235
        br sy10
236
; Now execute ...
237
        .align 4
238
sys9: casew sy12[r6:w]
239
sy12:   .word syld-sys9
240
        .word sygo-sys9
241
        .word sydu-sys9
242
; Program Call
243
sygo:   jsr r4
244
        movd x'20200000,r7
245
        br new
246
; make Dump , R4 is pointer
247
sys4:   subd 512,-20(sb)
248
sys3:   movd -20(sb),r4
249
        movb 13,r0                      ; make CR before
250
        bsr out
251
sydu:   movb 16,r5                      ; Number of Lines
252
sy18:   sprd sb,r0                      ; Pointer to String
253
        movzbd 28,r1
254
sy13:   extd r1,r4,r2,4
255
        movb datah[r2:b],0(r0)
256
        addqd 1,r0
257
        addqb -4,r1
258
        cmpqb -4,r1
259
        bne sy13
260
        movb 16,r6
261
sy15:   movb ' ',0(r0)
262
        addqd 1,r0
263
        addr -1(r6),r2
264
        andb 3,r2
265
        cmpqb 3,r2
266
        bne sy14
267
        movb ' ',0(r0)
268
        addqd 1,r0
269
sy14: extsd 0(r4),r2,4,4
270
        movb datah[r2:b],0(r0)
271
        extsd 0(r4),r2,0,4
272
        movb datah[r2:b],1(r0)
273
        addqd 2,r0
274
        addqd 1,r4
275
        acbb -1,r6,sy15
276
        movw x'2720,0(r0)
277
        addqd 2,r0
278
        addr -16(r4),r4
279
        movb 16,r6
280
sy16:   movb 0(r4),r2
281
        checkb r1,cvalid,r2
282
        bfc sy17
283
        movb '.',r2
284
sy17:   movb r2,0(r0)
285
        addqd 1,r0
286
        addqd 1,r4
287
        acbb -1,r6,sy16
288
        movd x'0A0D27,0(r0)
289
        addqd 3,r0
290
        movzbw r0,-2(sb)
291
        sprd sb,r0
292
        bsr string
293
        acbb -1,r5,sy18
294
        movd r4,-20(sb)
295
        br new
296
; Example:
297
; ":200000006DA60BF757A000000C80CF0F00D7A1FFFFFE00D4A315165C7810D4A30D185C7800"
298
; ":007FE001A0"
299
; R4 pointer to memory
300
; R5 "0" counter
301
syld:   movqd 0,r5
302
sy23:   bsr getchar
303
        cmpb ':',r0
304
        bne abort                       ; Abort if not ':' - what happens after this don't care
305
        movqd 0,r6                      ; Checksum=0
306
        bsr getbyte
307
        cmpqb 0,r0
308
        beq sy19                        ; End
309
        movb r0,r1
310
        bsr getbyte
311
        movzbd r0,r2
312
        lshd 8,r2
313
        bsr getbyte
314
        movb r0,r2
315
        bsr getbyte
316
        cmpqb 0,r0
317
        bne abort                       ; if not 0 - Abort. Limited to 64K
318
sy20:   bsr getbyte
319
        movb r0,r4[r2:b]
320
        addqd 1,r2
321
        addqd 1,r5
322
        acbb -1,r1,sy20
323
        bsr getbyte
324
        cmpqd 0,r6
325
        bne abort
326
sy21:   bsr getchar                     ; CR and LF read
327
        cmpb 10,r0                      ; there are Files without CR !
328
        bne sy21
329
; show how many load up to now R2 -> decimal
330
        movd 10000,r0
331
        addr 1(sb),r3
332
        movd x'D0006,-2(sb)
333
        movd r5,r2
334
sy22:   movd r2,r1
335
        divd r0,r1
336
        orb x'30,r1
337
        movb r1,0(r3)
338
        addqd 1,r3
339
        modd r0,r2
340
        divd 10,r0
341
        cmpqd 0,r0
342
        bne sy22
343
        sprd sb,r0
344
        bsr string
345
        br sy23
346
; ******* Load finished *******
347
sy19: movqb 4,r1
348
sy24:   bsr getbyte
349
        acbb -1,r1,sy24
350
        cmpqd 0,r6
351
        bne abort
352
sy25:   bsr getchar                     ; CR and LF read
353
        cmpb 10,r0
354
        bne sy25
355
        addr crlf,r0
356
sy26:   bsr string
357
        br new
358
 
359
erin:   addr erinfo,r0
360
        br sy26
361
 
362
getchar:
363
        save [r1]
364
gec1:   cmpd -8(sb),-12(sb)
365
        beq gec1
366
        movd -8(sb),r1
367
        movb x'100(sb)[r1:b],r0
368
        addqb 1,-8(sb)
369
        restore [r1]
370
        ret 0
371
 
372
getbyte:
373
        save [r1,r2]
374
        bsr getchar
375
        checkb r1,cziff,r0
376
        bfc geb1
377
        bicb x'20,r0
378
        checkb r1,cabc,r0
379
        bfc geb2
380
        orw x'A00,r6
381
geb2:   addb 10,r1
382
geb1:   ashd 4,r1
383
        bsr getchar
384
        checkb r2,cziff,r0
385
        bfc geb3
386
        bicb x'20,r0
387
        checkb r2,cabc,r0
388
        bfc geb4
389
        orw x'A00,r6
390
geb4:   addb 10,r2
391
geb3:   orb r2,r1
392
        addb r1,r6                      ; add to Checksum
393
        movb r1,r0
394
        restore [r1,r2]
395
        ret 0
396
 
397
abort:
398
        addr lderr,r0
399
        bsr string
400
        br new
401
 
402
out:    tbitb 11,0(r7)
403
        bfs out
404
        movb r0,0(r7)
405
        ret 0
406
 
407
string:
408
        save [r1,r7]
409
        movd x'20200000,r7
410
        movw -2(r0),r1
411
st3:    cmpqw 0,r1
412
        beq st1
413
st2:    tbitb 11,0(r7)
414
        bfs st2
415
        movb 0(r0),0(r7)
416
        addqd 1,r0
417
        acbw -1,r1,st2
418
st1:    restore [r1,r7]
419
        ret 0
420
 
421
datal:  ; 0     1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
422
 .byte x'3F,6,x'5B,x'4F,x'66,x'6D,x'7D,x'07,x'7F,x'6F,x'77,x'7C,x'39,x'5E,x'79,x'71
423
 
424
datah: .byte '0123456789ABCDEF'
425
 
426
        .align 4
427
datfp:  .double x'87654321,x'0FEDCBA9
428
cvalid: .byte x'7E,x'20
429
cziff:  .byte '90'
430
cabc:           .byte 'FA'
431
 
432
                .word txt_1-sram_ok
433
sram_ok:        .byte '512K SRAM ok.',13,10
434
txt_1:  .word txt_2-welcome
435
welcome:        .byte 13,10,'Hardware: TRIPUTER V0.1 , 27 May 2017'
436
                .byte 13,10,'Software: MONITOR  V0.1 , 27 May 2017',13,10
437
txt_2:  .word txt_3-idram_ok
438
idram_ok:       .byte '128K iDRAM ok.',13,10
439
txt_3:  .word txt_4-error
440
error:  .byte 'Memory Fault !!!',13,10
441
txt_4:  .word txt_6-lderr
442
lderr:  .byte 13,10,'Error in Load!',13,10
443
txt_6:  .word txt_7-crlf
444
crlf:           .byte 13,10
445
txt_7:  .word txt_8-erinfo
446
erinfo: .byte 'Error in input!',13,10
447
txt_8:
448
 
449
        .align 4
450
nmi:    save [r0,r1]
451
        movb -4(sb),r0
452
        extsd r0,r1,0,4
453
        comb datal[r1:b],x'200004(r7)
454
        extsd r0,r1,4,4
455
        comb datal[r1:b],x'200005(r7)
456
        bispsrb 1
457
        addpb 0,r0
458
        cmpb x'60,r0
459
        beq nmi1
460
nmi2:   movb r0,-4(sb)
461
        restore [r0,r1]
462
        rett 0
463
nmi1:   movqb 0,r0
464
        br nmi2
465
 
466
        .align 4
467
int:    save [r0]               ; RX UART
468
        movd -12(sb),r0
469
        movb 0(r7),x'100(sb)[r0:b]
470
        addqb 1,-12(sb)
471
        movb x'100(sb)[r0:b],x'200000(r7)
472
        movb r0,x'200002(r7)
473
        restore [r0]
474
        reti
475
 
476
err:    addr error,r0
477
        bsr string
478
err1:   comw x'4040,4(r1)       ; 0 = leuchten
479
        br err1
480
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.