-
Notifications
You must be signed in to change notification settings - Fork 0
/
TDII_TP3.asm
610 lines (556 loc) · 13.5 KB
/
TDII_TP3.asm
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
;*****************************************************************
; Técnicas Digitales II - Trabajo Práctico N3
; Actividad: SimulaciOn del 8085 - Cronometro con segundos
; FERRER, Ezequiel
;*****************************************************************
; Requiere (simulacion):
; - Teclado en puerto 20h
; - Display 7seg desde puerto 35h
; - Display 15seg desde puerto 55h
; - Opciones//Ejecucion//Velocidad: 100%
; - Opciones//Interrupciones: RST 6.5 por teclado
;*****************************************************************
; Definición de Etiquetas
;*****************************************************************
.define
BootAddr 0000h
StackAddr FFFFh
DataROM 8000h
DataRAM C000h
AddrIntRST1 0008h
AddrIntRST2 0010h
AddrIntRST3 0018h
AddrIntRST4 0020h
AddrIntTRAP 0024h
AddrIntRST5 0028h
AddrIntRST55 002Ch
AddrIntRST6 0030h
AddrIntRST65 0034h
AddrIntRST7 0038h
AddrIntRST75 003Ch
MSE 08h
M75 04h
M65 02h
M55 01h
AdrrTecl 20h
AddrD7seg 35h ; ----a----
D7Sa 02h ; | |
D7Sb 04h ; f b
D7Sc 40h ; | |
D7Sd 20h ; ----g----
D7Se 10h ; | |
D7Sf 01h ; e c
D7Sg 08h ; | |
D7Sdot 80h ; ----d---- dot
D7sgd 7
D7dsgd 6
D7min 5
D7dmin 4
D7hra 3
D7dhra 2
D7nada1 1
D7nada2 0
AddrD15seg 55h
D15p 0
D15Nro 2
D15dH 4
D15uH 6
D15dM 8
D15uM 10
D15dS 12
D15uS 14
TiempoDecH 0
TiempoUniH 1
TiempoDecM 2
TiempoUniM 3
TiempoDecS 4
TiempoUniS 5
MaxCantTiempos 10
FCrnCorriendo 01h
FCrnActivo 02h
.data C042h ; ubica en simulador & solo p/ visualizar
;*****************************************************************
; Datos en ROM
;*****************************************************************
.data DataROM
D7seg0: dB D7Sa|D7Sb|D7Sc|D7Sd|D7Se|D7Sf
D7seg1: dB D7Sb|D7Sc
D7seg2: dB D7Sa|D7Sb|D7Sd|D7Se|D7Sg
D7seg3: dB D7Sa|D7Sb|D7Sc|D7Sd|D7Sg
D7seg4: dB D7Sb|D7Sc|D7Sf|D7Sg
D7seg5: dB D7Sa|D7Sc|D7Sd|D7Sf|D7Sg
D7seg6: dB D7Sa|D7Sc|D7Sd|D7Se|D7Sf|D7Sg
D7seg7: dB D7Sa|D7Sb|D7Sc
D7seg8: dB D7Sa|D7Sb|D7Sc|D7Sd|D7Se|D7Sf|D7Sg
D7seg9: dB D7Sa|D7Sb|D7Sc|D7Sf|D7Sg
;*****************************************************************
; Datos en RAM
;*****************************************************************
.data DataRAM
Cronometro: dB 0, 0, 0, 0, 0, 0
TiempoN0: dB 0, 0, 0, 0, 0, 0
TiempoN1: dB 0, 0, 0, 0, 0, 0
TiempoN2: dB 0, 0, 0, 0, 0, 0
TiempoN3: dB 0, 0, 0, 0, 0, 0
TiempoN4: dB 0, 0, 0, 0, 0, 0
TiempoN5: dB 0, 0, 0, 0, 0, 0
TiempoN6: dB 0, 0, 0, 0, 0, 0
TiempoN7: dB 0, 0, 0, 0, 0, 0
TiempoN8: dB 0, 0, 0, 0, 0, 0
TiempoN9: dB 0, 0, 0, 0, 0, 0
NroWrTime: dB 0
PtrWrTime: dW 0
NroRdTime: dB 0
PtrRdTime: dW 0
DataTecla: dB 0
FlagCrn: dB 0
;*****************************************************************
; Arranque del 8085
;*****************************************************************
.org BootAddr
JMP Boot
;*****************************************************************
; Vector de INTR
;*****************************************************************
.org AddrIntRST1
JMP IntRST1
.org AddrIntRST2
JMP IntRST2
.org AddrIntRST3
JMP IntRST3
.org AddrIntRST4
JMP IntRST4
.org AddrIntTRAP
JMP IntTRAP
.org AddrIntRST5
JMP IntRST5
.org AddrIntRST55
JMP IntRST55
.org AddrIntRST6
JMP IntRST6
.org AddrIntRST65
JMP IntRST65
.org AddrIntRST7
JMP IntRST7
.org AddrIntRST75
JMP IntRST75
;*****************************************************************
; Definiciones de INTR
;*****************************************************************
IntRST1:
RET
IntRST2:
RET
IntRST3:
RET
IntRST4:
RET
IntTRAP:
RET
IntRST5:
RET
IntRST55:
RET
IntRST6:
RET
IntRST65:
PUSH PSW
PUSH H
IN AdrrTecl
STA DataTecla
CPI 'P'
JNZ NoPause
LDA FlagCrn
ANI FCrnActivo
JZ NoPause
LDA FlagCrn
XRI FCrnCorriendo
STA FlagCrn
LXI H, TiempoN0
SHLD PtrRdTime
MVI A, 00h
STA NroRdTime
CALL ShowTitle
NoPause:
POP H
POP PSW
EI
RET
IntRST7:
RET
IntRST75:
RET
;*****************************************************************
; PROGRAMA PRINCIPAL
;*****************************************************************
Boot:
LXI SP, StackAddr
MVI A, MSE|M75|M55
SIM
EI
;---------------------------
ResetCrn:
LXI H, FlagCrn
MVI A, 00h
CleanRAM:
MOV M, A
DCX H
CMP L
JNZ CleanRAM
LXI H, TiempoN0
SHLD PtrWrTime
SHLD PtrRdTime
CALL PrintChron
CALL ShowTitle
;---------------------------
Main:
LDA DataTecla
CPI 'A'
JNZ Main
MVI A, FCrnActivo|FCrnCorriendo
STA FlagCrn
;---------------------------
Running:
LDA FlagCrn
ANI FCrnCorriendo
JZ Stoped
LDA 10
ASecond:
CALL BaseTime
DCR A
JNZ ASecond
CALL UpChron
CALL PrintChron
LDA DataTecla
CPI 'T'
CZ SaveTime
JMP Running
;---------------------------
Stoped:
LDA DataTecla
CPI 'P'
JZ Running
CPI 'S'
CZ ShowTimes
CPI 'R'
JZ ResetCrn
JMP Stoped
;---------------------------
HLT
;*****************************************************************
; FUNCION SaveTime
;*****************************************************************
SaveTime:
LDA NroWrTime
CPI MaxCantTiempos
RZ
INR A
STA NroWrTime
LHLD PtrWrTime
LDA Cronometro+TiempoDecH
MOV M, A
INX H
LDA Cronometro+TiempoUniH
MOV M, A
INX H
LDA Cronometro+TiempoDecM
MOV M, A
INX H
LDA Cronometro+TiempoUniM
MOV M, A
INX H
LDA Cronometro+TiempoDecS
MOV M, A
INX H
LDA Cronometro+TiempoUniS
MOV M, A
INX H
SHLD PtrWrTime
MVI A, 'P'
STA DataTecla
RET
;*****************************************************************
; FUNCION ShowTimes
;*****************************************************************
ShowTimes:
LXI H, NroWrTime
LDA NroRdTime
CMP M
RZ
CALL CodifTo7s
ORI D7Sdot
OUT AddrD15seg+D15Nro+1
MVI A, D7Sa|D7Sb|D7Se|D7Sf|D7Sg
OUT AddrD15seg+D15p+1
LHLD PtrRdTime
MVI A, 00h
OUT AddrD15seg+D15dH
MOV A, M
CALL CodifTo7s
OUT AddrD15seg+D15dH+1
INX H
MVI A, 00h
OUT AddrD15seg+D15uH
MOV A, M
CALL CodifTo7s
ORI D7Sdot
OUT AddrD15seg+D15uH+1
INX H
MVI A, 00h
OUT AddrD15seg+D15dM
MOV A, M
CALL CodifTo7s
OUT AddrD15seg+D15dM+1
INX H
MVI A, 00h
OUT AddrD15seg+D15uM
MOV A, M
CALL CodifTo7s
ORI D7Sdot
OUT AddrD15seg+D15uM+1
INX H
MVI A, 00h
OUT AddrD15seg+D15dS
MOV A, M
CALL CodifTo7s
OUT AddrD15seg+D15dS+1
INX H
MVI A, 00h
OUT AddrD15seg+D15uS
MOV A, M
CALL CodifTo7s
ORI D7Sdot
OUT AddrD15seg+D15uS+1
INX H
LDA NroRdTime
INR A
STA NroRdTime
SHLD PtrRdTime
MVI A, 'P'
STA DataTecla
RET
;---------------------------
HLT
;*****************************************************************
; FUNCION BaseTime
;*****************************************************************
BaseTime:
PUSH H
PUSH PSW
LXI B, 0066h
DelayLoop:
CALL LoseTime
DCX B
MOV A, B
ORA C
JNZ DelayLoop
POP PSW
POP H
RET
LoseTime:
ANI FFh
ANI FFh
ANI FFh
ANI FFh
ANI FFh
ANI FFh
RET
;---------------------------
HLT
;*****************************************************************
; FUNCION UpChron
;*****************************************************************
UpChron:
LDA Cronometro+TiempoUniS
CPI 09h
JZ UpChronDseg
INR A
STA Cronometro+TiempoUniS
RET
UpChronDseg:
MVI A, 00h
STA Cronometro+TiempoUniS
LDA Cronometro+TiempoDecS
CPI 05h
JZ UpChronUmin
INR A
STA Cronometro+TiempoDecS
RET
;---------------------------
UpChronUmin:
MVI A, 00h
STA Cronometro+TiempoDecS
LDA Cronometro+TiempoUniM
CPI 09h
JZ UpChronDmin
INR A
STA Cronometro+TiempoUniM
RET
UpChronDmin:
MVI A, 00h
STA Cronometro+TiempoUniM
LDA Cronometro+TiempoDecM
CPI 05h
JZ UpChronUhra
INR A
STA Cronometro+TiempoDecM
RET
;---------------------------
UpChronUhra:
MVI A, 00h
STA Cronometro+TiempoDecM
LDA Cronometro+TiempoUniH
CPI 09h
JZ UpChronDhra
INR A
STA Cronometro+TiempoUniH
CPI 04h
JZ OutRankChron
RET
UpChronDhra:
MVI A, 00h
STA Cronometro+TiempoUniH
LDA Cronometro+TiempoDecH
INR A
STA Cronometro+TiempoDecH
RET
;---------------------------
OutRankChron:
LDA Cronometro+TiempoDecH
CPI 02h
JZ UCountADay
RET
UCountADay:
MVI A, 00h
STA Cronometro+TiempoUniH
STA Cronometro+TiempoDecH
RET
;---------------------------
HLT
;*****************************************************************
; FUNCION PrintChron
;*****************************************************************
PrintChron:
LDA Cronometro+TiempoDecH
CALL CodifTo7s
OUT AddrD7seg+D7dhra
LDA Cronometro+TiempoUniH
CALL CodifTo7s
ORI D7Sdot
OUT AddrD7seg+D7hra
LDA Cronometro+TiempoDecM
CALL CodifTo7s
OUT AddrD7seg+D7dmin
LDA Cronometro+TiempoUniM
CALL CodifTo7s
ORI D7Sdot
OUT AddrD7seg+D7min
LDA Cronometro+TiempoDecS
CALL CodifTo7s
OUT AddrD7seg+D7dsgd
LDA Cronometro+TiempoUniS
CALL CodifTo7s
OUT AddrD7seg+D7sgd
MVI A, D7Sg
OUT AddrD7seg+D7nada1
OUT AddrD7seg+D7nada2
RET
;---------------------------
HLT
;*****************************************************************
; FUNCION CodifTo7s
;*****************************************************************
CodifTo7s:
CPI 00h
JNZ Cod7sUno
LDA D7seg0
RET
Cod7sUno:
CPI 01h
JNZ Cod7sDos
LDA D7seg1
RET
Cod7sDos:
CPI 02h
JNZ Cod7sTres
LDA D7seg2
RET
Cod7sTres:
CPI 03h
JNZ Cod7sCuatro
LDA D7seg3
RET
Cod7sCuatro:
CPI 04h
JNZ Cod7sCinco
LDA D7seg4
RET
Cod7sCinco:
CPI 05h
JNZ Cod7sSeis
LDA D7seg5
RET
Cod7sSeis:
CPI 06h
JNZ Cod7sSiete
LDA D7seg6
RET
Cod7sSiete:
CPI 07h
JNZ Cod7sOcho
LDA D7seg7
RET
Cod7sOcho:
CPI 08h
JNZ Cod7sNueve
LDA D7seg8
RET
Cod7sNueve:
CPI 09h
JNZ Cod7sError
LDA D7seg9
RET
Cod7sError:
LDA D7Sg
RET
;---------------------------
HLT
;*****************************************************************
; FUNCION ShowTitle
;*****************************************************************
ShowTitle:
MVI A, 00h
OUT AddrD15seg+D15p
MVI A, D7Sg
OUT AddrD15seg+D15p+1
MVI A, 00h
OUT AddrD15seg+D15Nro
MVI A, D7Sa|D7Sd|D7Se|D7Sf
OUT AddrD15seg+D15Nro+1
MVI A, D7Sdot
OUT AddrD15seg+D15dH
MVI A, D7Sa|D7Sb|D7Se|D7Sf|D7Sg
OUT AddrD15seg+D15dH+1
MVI A, 00h
OUT AddrD15seg+D15uH
MVI A, D7Sa|D7Sb|D7Sc|D7Sd|D7Se|D7Sf
OUT AddrD15seg+D15uH+1
MVI A, D7Sf|D7Sdot
OUT AddrD15seg+D15dM
MVI A, D7Sb|D7Sc|D7Se|D7Sf
OUT AddrD15seg+D15dM+1
MVI A, 00h
OUT AddrD15seg+D15uM
MVI A, D7Sa|D7Sb|D7Sc|D7Sd|D7Se|D7Sf
OUT AddrD15seg+D15uM+1
MVI A, D7Sb|D7Sf
OUT AddrD15seg+D15dS
MVI A, D7Sb|D7Sc|D7Se|D7Sf
OUT AddrD15seg+D15dS+1
MVI A, 00h
OUT AddrD15seg+D15uS
MVI A, D7Sg
OUT AddrD15seg+D15uS+1
RET
;---------------------------
HLT