-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathST2.SRC
1682 lines (1333 loc) · 39.7 KB
/
ST2.SRC
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
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;******************************************************************************
;* *
;* NOMBRE : ST.SRC *
;* DESCRIPCION : PLACA ST *
;* LENGUAJE : ENSAMBLADOR PARA MC68HC705/C8 *
;* EDITOR : NE.COM *
;* OBSERVACIONES: No ejecuitarlo en un C4 porque utiliza la ram extendida. *
;* *
;* *
;******************************************************************************
;Definici¢n del byte flag.
;
;
; bit 0 - Se ha recibido un mensaje del modem.
; bit 1 - Est recibiendo los slots (tambi‚n indica que el mensaje tiene SLOTS).
; bit 2 - Se ha recibido un mensaje serie.
; bit 3 - Time out del timer
; bit 4 - El indicativo recibido coincide con el que est esperando.
; bit 5 - Ha informado al CGC que el SQL se ha abierto.
; bit 6 -
; bit 7 - 0- Mira SQL, alarga tiempo de PTT / 1 - No mira SQL y PTT corto.
;
;
;Definici¢n del byte flag+1
;
; bit 0 -
; bit 1 - Est en modo test
; bit 2 -
; bit 3 -
; bit 4 -
; bit 5 -
; bit 6 -
; bit 7 -
;
;
;
;Definici¢n del byte PenTx
;
;
; bit 0 - Pendiente TX mensaje RQC
; bit 1 -
; bit 2 - Pendiente TX mensaje FI VEU
; bit 3 - Pendiente TX mensaje FLOTA
; bit 4 - Pendiente TX mensaje MOD
; bit 5 - Pendiente TX mensaje ANU
; bit 6 -
; bit 7 -
;
;Definici¢n del byte MsgRx
;
;
; bit 0 - Recibido mensaje RQC
; bit 1 - Recibido mensaje AHYC
; bit 2 - Recibido mensaje RQQ
; bit 3 - Recibido mensaje ACK
; bit 4 - Recibido mensaje NACK
; bit 5 - Recibido mensaje HEAD
; bit 6 -
; bit 7 -
;
;============================ CONSTANTES ====================================
TIME_OUT equ 02h ;Timeout 2 segundos
;Definicion mensajes ST -> CGC
DES equ 01h
OCU equ 02h
PAR equ 03h
FIN equ 04h
ERR equ 05h
EME equ 06h
VEU equ 07h
TAN equ 08h
MEC equ 09h
LLI equ 10h
SQL equ 11h
NOSQL equ 22h
ACK equ 08h
AHYC equ 02H
;Definicion mensajes CGC -> ST
cASI equ 15h
cVEU equ 0ah
cFIVEU equ 0bh
cFLOTA equ 0ch
cMOD equ 16h
cANU equ 09h
cTEST equ 10h
cPTT equ 20h
cNOPTT equ 21h
; Definici¢n de los ports
PORTA equ 00h
PORTB equ 01h
PORTC equ 02h
PORTD equ 03h
PCA equ 04h
PCB equ 05h
PCC equ 06h
MR equ 0ah ;miscellaneous register.
ACR equ 0eH ;CONTROL ENTRADAS ANALOG.
ARR equ 0fH ;REG. LECTURA ANALOGICA.
;============================= SEGMENTO DE RAM ============================
SCDAT equ 0011h ;Serial Comunications Data Register.
SCCR1 equ 000eh ;Serial Comunication Register 1.
SCCR2 equ 000fh ;Serial Comunication Register 2.
SCSR equ 0010h ;Serial comunication Status Register.
SPCR equ 000ah ;Serial peripheral control register.
SPSR equ 000bh ;Serial peripheral status register.
SPDR equ 000ch ;Serial peripheral data i/o register.
BAUD equ 000dh ;Baud Rate Register.
TCR equ 0012h ;Timer Control Register.
TSR equ 0013h ;Timer Status Register.
ENTRY equ 0100h ;DIRECCION COMIENZO ROM.
OPTREG equ 0fdfh ;OPTION REGISTER.
TCRH equ 0018h ;TIMER COUNT REGISTER (HIGH).
TCRL equ 0019h ;TIMER COUNT REGISTER (LOW).
COPRR equ 001dh ;COP reset Register.
COPCR equ 001eh ;COP Control Register.
;============================= PRIMER SEGMENTO DE RAM ======================
ORG 30H
sava res 1
temp res 1
BuffRx res 56 ; - 8 SLOTS con CRC cada uno.
BuffTx res 10 ;
slot1 res 6
slot2 res 6
slot3 res 6
slot4 res 6
slot5 res 6
slot6 res 6
slot7 res 6
slot8 res 6
MiPrefx res 1 ; - Prefijo repetidor (8 bits)
MiIndic res 2 ; - Indicativo central
RcIndic res 2 ; - Indicativo del £ltimo que he recibido.
RcPrefx res 1
IndicDest res 2
RxMsgL res 1
TxMsgL res 1
MdmStat res 1 ;Modem Status Register.
MdmCtrl res 1 ;Modem Control Register.
flag res 2
RxMsgLn res 1 ;Total largo mensaje (recepci¢n).
TxMsgLn res 1 ;Total largo mensaje (transmisi¢n)
EspRx res 1
PenTx res 1
MsgRx res 1
tiempo res 1
tiempo1 res 1
time res 1
time1 res 1
PuntSer res 1
intentos res 1
NumBlock res 1
TotBytes res 1
RxBytes res 1
CgcLeng res 1
TotBlk res 1
CmIndicH res 1
CmIndicL res 1
;=============================== ROM =========================================
PSCT
org ENTRY
lda #$82
sta $1fdf
;- - - - - - - - - - - - - - PROGRAMACION PORTS - - - - - - - - - - - - - - - -
lda #$ff
sta PCA
lda #$01
sta PCB
lda #$ff
sta pcc
;- - - - - - - - - - - - - - - - - resET - - - - - - - - - - - - - - - - - - -
bset 6,MR ;INT2 NO PERMITIDO
sei
bset 3,portc ;/STR
bset 6,portc ;RTS
clr RxMsgL ;Contador bytes Tx
clr TxMsgL ;Contador bytes Rx
clr flag
clr flag+1
clr MdmCtrl
clr MsgRx
clr EspRx
clr PenTx
clr PuntSer
lda #$5
sta RxBytes
lda #$1f
sta MiIndic
lda #$ff
sta MiIndic+1 ;El indicativo de la central es 1 1111 1111 1111 (13 bits)
lda #$01
sta MiPrefx
jsr INISPI ;INICIALIZA EL MODO SPI
jsr SCION ;Activa modo sci
;- - - - - - - - - - - - - - - resETEA EL MODEM - - - - - - - - - - - - - - -
lda #$04
sta MdmCtrl
jsr CtrlOut
clra
sta MdmCtrl
jsr CtrlOut ;resetea el modem
bset 5,TCR
jsr pretim ;Pone en marcha el timer
;=============================== MAIN =======================================
cli
jsr RxMsgFx ;Pone el modem en recepci¢n.
reint:
lda #$5
sta intentos ;total 5 intentos
main0:
bclr 3,flag
lda #TIME_OUT ;2 segundos para cada intento
sta tiempo
sta time
lda #$05
sta tiempo1
sta time1
main:
brset 0,flag,jDoRxMsg ;Ha recibido un mensaje.
brset 2,flag,RxSerie ;Espera un buffer s‚rie.
brset 3,flag,tpo ;Mira si ha pasado el tiempo
brset 1,portb,mSQL ;Se abre el SQL, informa al CGC
; brset 1,portb,main
brclr 5,flag,main
brclr 6,portc,main ;Si est comunicando no avisa del SQL
bclr 5,flag
clrx
stx CgcLeng
lda #NOSQL
jsr TxMsgCGC
bra main
tpo:
lda PenTx ;Mira si hay alg£n mensaje pendiente de ACK
beq reint
jsr DoTxMsg ;Transmite el mensaje pendiente
dec intentos
bne main0
lda #$5
sta RxBytes
clrx
stx CgcLeng
lda #ERR
jsr TxMsgCGC ;Avisa al CGC de que no ha habido comunicacion
bclr 0,flag+1
clr PenTx
clr EspRx
bset 6,portc ;Desactiva RTS para indicar que est libre.
jmp reint
jDoRxMsg:
jsr DoRxMsg
bra main0
mSQL:
brclr 6,portc,main ;Si est comunicando no avisa del SQL
brset 5,flag,main
bset 5,flag
clrx
stx CgcLeng
lda #SQL
jsr TxMsgCGC
bra main
;------------------ HA RECIBIDO UN MENSAJE DEL PC --------------------------
RxSerie:
lda slot1 ;Guarda el indicativo y el prefijo.
sta MiPrefx
sta RcPrefx
lda slot1+1
sta CmIndicH
sta RcIndic
lda slot1+2
sta CmIndicL
sta RcIndic+1
lda slot1+3
cmp #cPTT
beq mPTT ;Quieren poner PTT
cmp #cNOPTT
beq mNOPTT
cmp #cTEST
beq jtest
jsr DoTxMsg ;Transmite el mensaje
bclr 2,flag
jmp main0
mPTT:
bset 0,portb ;Activa PTT emisora.
bra FinSeri
mNOPTT:
bclr 0,portb
bra FinSeri
FinSeri:
bclr 2,flag
jmp main
jTest:
jmp test
;------------------ TRANSMITE UN MENSAJE AL MODEM --------------------------
;El tipo de mensaje ha de estar en a
;
DoTxMsg:
bclr 6,portc ;RTS - indica que est comunicando.
cmp #cASI
beq mASI
cmp #cVEU
beq mVeu
cmp #cFIVEU
beq MFiVeu
cmp #cFLOTA
beq mCamIndi
cmp #cMOD
beq mMod
cmp #cANU
beq mAnu
bset 6,portc ;El comando no ha sido reconocido, se libera.
RetOk:
rts
;- - - - - - - - - - - - - - EL MENSAJE ES VEU - - - - - - - - - - - - -
mVeu:
clr EspRx ;Para el mensaje VEU no espera ACK
clr PenTx ;S¢lo lo transmite una vez
jsr TxRQQ ;Transmite un RQQ con el comando que indica a
bset 6,portc ;RTS Off
bra RetOk
;- - - - - - - - - - - - - - EL MENSAJE ES FI VEU - - - - - - - - - - - -
mFiVeu:
jsr TxRQQ ;Transmite un RQQ con el comando que indica a.
clr EspRx ;No espera ACK.
clr PenTx ;No espera mas mensajes.
bset 6,portc ;RTS Off
bra RetOk
;- - - - - - - - - - - - - - MENSAJE ANU - - - - - - - - - - - - - - - - -
mAnu:
sta PenTx
jsr TxRQQ ;Transmite un RQQ con el comando que indica a.
lda #ACK
sta EspRx ;Espera ACK
bra RetOk
;- - - - - - - - - - - - - - MENSAJE ASI - - - - - - - - - - - - - - - - -
mASI:
sta PenTx
lda #AHYC ;El movil le ha de constestar con un AHYC
sta EspRx
lda slot1+4 ;Total n£mero de bloques a transmitir
sta TotBytes
lda #$8
sta TotBlk
lda #48
sta RxBytes ;Total a recibir 48 bytes (1 bloque).
jsr TxRqcAsi ;Indica al movil que va transmitir un ASI
bra RetOk
;- - - - - - - - - - - - - MENSAJE MOD - - - - - - - - - - - - - - - - - - -
mMod:
sta PenTx
lda #48
sta RxBytes ;Total a recibir 48 bytes (1 bloque).
lda slot1+4 ;Total n£mero de bloques a transmitir
sta TotBytes
lda #$8
sta TotBlk
jsr TxRqcMOD ;Indica al movil que va a transmitir un ASI
lda #AHYC ;El movil le ha de constestar con un AHYC
sta EspRx
bra RetOk
;- - - - - - - - - - - - MENSAJE CAM_INDI - - - - - - - - - - - - - - - - -
mCamIndi:
sta PenTx
jsr TxRQQ
lda #$6
sta RxBytes
lda #1
sta TotBytes
lda #1
sta TotBlk
lda #AHYC
sta EspRx
bra RetOk
;------------------------- RECIBE UN MENSAJE DEL MODEM ---------------------
;
;Si est comunicando, por ejemplo est haciendo RQC, no atender al que ha
;transmitido hasta que acabe con este.
;S¢lo atender al que acaba de transmitir si es el indicativo con el que est
;comunicando.
DoRxMsg:
bclr 0,flag
bclr 6,portc ;Est ocupado (RTS)
brset 4,flag,GesRx ;El indicativo recibido es el que estoy esperando.
nomi:
lda PenTx ;Mira si est comunicando.
beq GesRx ;El byte PenTx indica si tiene alg£n mensaje pendiente
jmp main ;de recibir un ACK, por lo tanto si no es 0 es que
;est comunicando o intentando comunicarse con alg£n movil.
GesRx:
lda EspRx
bne SiEspe ;Mira si est esperando un mensaje en especial.
lda RcIndic
sta CmIndicH
lda RcIndic+1
sta CmIndicL ;En CmIndic est el indicativo que con el que ha de
bra RxMsg ;comunicar
SiEspe:
lda MsgRx
cmp EspRx
beq RxMsg ;Si no es el mensaje que est esperando lo rechaza.
rts
RxMsg:
brset 0,MsgRx,jrRQC
brset 1,MsgRx,jrAHYC
brset 2,MsgRx,jrRQQ
brset 3,MsgRx,jrACK
brset 4,MsgRx,jrNACK
rts
jrRQC jmp rRQC
jrAHYC jmp rAHYC
jrRQQ jmp rRQQ
jrACK jmp rACK
jrNACK jmp rNACK
jrHEAD jmp rHEAD
;- - - - - - - - - - - - - RECIBE UN MENSAJE RQC - - - - - - - - - - - - - -
;
;Cuando recibe un mensaje RQC quiere decir que un movil va a transmitir el
;N£mero de mec nico.
;El ST ha de transmitir un AHYC para que el movil transmita el n£mero de
;mec nico.
;La ST se pone en modo OCUPADO para que el CGC no transmita nada hasta que
;se libere, si en un cierto tiempo el movil no ha constestado el n£mero de
;mec nico, se libera automaticamente.
rRQC:
bclr 6,portc ;RTS On (ocupado)
bclr 0,MsgRx ;Borra flag que indica RQC recibido
clr intentos
clr PenTx ;
clr EspRx ;
jsr TxAHYC ;Da permiso al movil para que transmita un HEAD
wHEAD:
bclr 3,flag
lda #TIME_OUT
sta tiempo
sta time
lda #$05
sta tiempo1
sta time1
wHED:
brset 5,MsgRx,rHEAD
brclr 3,flag,wHED
bra FinRQC
rHEAD:
bclr 5,MsgRx ;Borra flag que indica HEAD recibido
clr EspRx
lda #$5
sta CgcLeng
lda #$9
jsr TxMsgCGC
bclr 5,MsgRx
lda BuffRx+9
jsr sciOut
lda BuffRx+10
jsr sciOut
lda BuffRx+11
jsr sciOut
lda BuffRx+12
jsr sciOut
lda BuffRx+13
jsr sciOut
jsr TxACK ;Transmite OK
FinRQC:
bclr 0,flag+1
bclr 0,flag
bset 6,portc ;RTS Off
rts
;- - - - - - - - HA RECIBIDO UN MENSAJE RQQ - - - - - - - - - - - - - - - -
rRQQ:
bclr 2,MsgRx ;Borra flag que indica RQQ recibido.
lda BuffRx+5
clrx
stx CgcLeng
and #$1f
jsr TxMsgCGC ;Transmite al CGC el comando del mensaje RQQ
bset 6,portc ;RTS Off
lda BuffRx+5
and #$1f
cmp #VEU
beq FinRQQ ;Unicamente no devuelve ACK en el mensaje VEU
salt1:
jsr TxACK
FinRQQ:
bclr 7,flag
bclr 0,flag+1
bset 6,portc ;rts off
rts
;- - - - - - - - - - - - HA RECIBIDO UN ACK - - - - - - - - - - - - - - - -
rACK:
bclr 3,MsgRx ;Borra flag que indica ACK recibido.
clr PenTx ;No hay mensajes pendientes.
clr EspRx ;No espera ning£n mensaje.
bset 6,portc ;RTS Off
rts
;- - - - - - - - - - - - - HA RECIBIDO UN NACK - - - - - - - - - - - - - - -
rNACK:
bclr 4,MsgRx ;Borra flag que indica ACK recibido.
clr PenTx ;No hay mensajes pendientes.
clr EspRx ;No espera ning£n mensaje.
bset 6,portc ;RTS Off
rts
;- - - - - - - - HA RECIBIDO UN MENSAJE AHYC - - - - - - - - - - - - - - - -
;
;Cuando recibe un AHYC quiere decir que antes ha transmitido un RQC
;y el movil le ha constestado con un AHYC.
;Una vez recibido el AHYC se inicia el proceso para transmitir
;los bloques.
;
;Cada bloque consta de 8 slots de 6 bytes, el n£mero de bloques de cada
;head se especifica en TotBlk.;
;En TotBytes ha de estar el n£mero de bloques a transmitir.
;En RxBytes ha de estar el total de bytes de cada bloque.
;
rAHYC:
clr EspRx
clr PenTx
lda #$1
sta NumBlock ;N£mero de bloque a transmitir.
bclr 1,MsgRx ;Borra flag que indica AHYC recibido
block:
ldx #$2
bloc2:
bset 6,portc ;Pide al CGC un bloque.
bclr 3,flag
lda #1
sta tiempo
sta time
lda #$05
sta tiempo1
sta time1
blk:
bset 0,portb ;Activa PTT emisora.
brset 2,flag,RxBlk ;Espera un bloque.
brclr 3,flag,blk
decx
beq NoBlk
bclr 6,portc ;Vuelve a indicar al cgc que est libre por si
bra bloc2 ;ha perdido la interrupt del primero.
NoBlk:
bclr 0,portb ;Desactiva PTT emisora.
clrx
stx CgcLeng
lda #ERR
jsr TxMsgCGC ;Avisa al CGC de que no ha habido comunicaci¢n.
jmp FinAHYC ;Sale por time out
RxBlk:
bclr 2,flag
bclr 6,portc ;Indica al CGC que est ocupado.
jsr IniCab ;Prepara el encabezado del mensaje.
lda TotBlk
deca
rola
rola
rola
rola
sta BuffTx+7
lda #$20
sta BuffTx+8
lda MiIndic
ora BuffTx+8
sta BuffTx+8
lda MiIndic+1
sta BuffTx+9
lda NumBlock
clrx
rola
rolx
rola
rolx
rola
rolx
rola
rolx
rola
rolx
rola
rolx
rola
rolx
and #$80
ora BuffTx+7
sta BuffTx+7
txa
and #$03
ora BuffTx+6
sta BuffTx+6
lda RxBytes
add #$a
sta TxMsgLn ;Largo mensaje a transmitir para un HEAD y 8 SLOTS.
lda #$5
sta intentos
inc NumBlock
repeat:
jsr TxMsg ;Transmite
;Espera un ACK, si en 'TIME_OUT' segundos no lo ha recibido, repetir la transmisi¢n
;del bloque hasta un tope de 5 veces, si en ese tiempo el coche no ha recibido,
;indica al CGC que ha habido un error.
;El CGC tendr¡a que reiniciar la operaci¢n de ASI.
bclr 3,flag
bclr 0,flag
bclr 3,MsgRx
lda #TIME_OUT
sta tiempo
sta time
lda #$05
sta tiempo1
sta time1
EspOk:
brset 0,flag,EsACK
brclr 3,flag,EspOk ;No han pasado 'TIME_OUT' segundos.
dec intentos
bne repeat
clrx
stx CgcLeng
lda #ERR
jsr TxMsgCGC ;Indica al CGC que no ha habido comunicaci¢n
bra FinAHYC ;regresa a main.
EsACK:
brclr 4,flag,EspOk ;El mensaje recibido no es del movil esperado,
;ignora este mensaje.
brclr 3,MsgRx,EspOk ;El mensaje recibido no es un ACK. lo ignora.
dec TotBytes
beq FinAHYC
jmp block ;Gestiona siguiente bloque.
FinAHYC:
bset 6,portc ;Indica al CGC que est libre.
bclr 0,flag
bclr 3,flag
bclr 3,MsgRx
lda #$5
sta RxBytes
bclr 0,flag+1
rts
;========================== SUBRUTINAS =======================================
;---------------------- TRANSMITE AL CGC UN MENSAJE --------------------------
;
;El mensaje ha de estar en a
;
TxMsgCGC:
sei
sta sava
lda #$ec
jsr sciOUT
lda #$a1
jsr sciOUT
lda RcPrefx
jsr sciOUT
lda RcIndic
jsr sciOUT
lda RcIndic+1
jsr sciOUT
lda sava
jsr sciOUT
lda CgcLeng
jsr sciOUT
cli
rts
;----------------- ACTIVA EL PROCESO DE TRANSMISION -------------------------
TxMsg:
bclr 6,portc ;RTS On
brset 7,flag,_NoSql ;Si el bit 7 de flag es 1 no mira SQL
brset 0,portb,_NoSql ;Si el PTT ya est puesto, no mira SQL
brclr 1,portb,TxMsg ;Espera que el squelch est‚ cerrado
_NoSql:
bset 0,portb ;Activa PTT emisora.
bclr 3,flag
brset 7,flag,corto
lda #$5
sta tiempo
sta time
lda #$01
sta tiempo1
sta time1
bra esp
corto:
lda #$03
sta tiempo
sta time
lda #$01
sta tiempo1
sta time1
esp:
brclr 3,flag,esp ;Mira si ha pasado el tiempo
ya:
bclr 7,flag
sei
clr TxMsgL
bclr 1,flag
bset 0,MdmCtrl ;Tx enable.
bclr 1,MdmCtrl ;Tx Parity Disable.
jsr CtrlOut ;Pone el modem en transmisi¢n y transmite el BuffRx.
lda BuffTx
jsr DataOut
inc TxMsgL
cli
bclr 3,flag
lda #1
sta tiempo
sta time
lda #$05
sta tiempo1
sta time1
WaitEnd:
brclr 0,MdmCtrl,WaitEn3 ;Espera un determinado tiempo, y si en ese
brclr 3,flag,WaitEnd ;tiempo el modem no ha indicado que ha
;transmitido el mensaje, pone el equipo y el
;modem en recepci¢n.
bclr 0,portb ;Desactiva el PTT
bclr 0,MdmCtrl
jsr CtrlOut
clr TxMsgL
Waiten3:
rts
;----------------- ACTIVA EL PROCESO DE RECEPCION -------------------------
RxMsgFx:
clr RxMsgL
lda #$8
sta RxMsgLn
bset 2,MdmCtrl ;Rx enable.
bclr 3,MdmCtrl ;Rx format 0
jsr CtrlOut ;Pone el modem en recepci¢n.
rts
;------------------------- TANSMITE UN ACK ---------------------------------
TxACK:
jsr IniCab ;Prepara el encabezado del mensaje.
clr BuffTx+9
lda MiIndic
ldx MiIndic+1
clc
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
stx BuffTx+8
and #$03
ora #$20
sta BuffTx+7
lda #$0a
sta TxMsgLn ;Total largo del mensaje a transmitir.
jsr TxMsg ;Activa proceso transmisi¢n buffer.
bset 6,portc ;rts off
rts
;------------------------- TANSMITE UN RQQ ---------------------------------
TxRQQ:
sta sava
jsr IniCab
clr BuffTx+9
lda MiIndic
ldx MiIndic+1
clc
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
stx BuffTx+8
and #$03
ora #$58
sta BuffTx+7
lda sava
ora BuffTx+9
sta BuffTx+9
lda #$0a
sta TxMsgLn ;Total largo del mensaje a transmitir.
jsr TxMsg ;Activa proceso transmisi¢n buffer.
rts
;------------------------- TANSMITE UN AHYC ---------------------------------
TxAHYC:
sta sava
jsr IniCab
clr BuffTx+9
lda MiIndic
ldx MiIndic+1
clc
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
stx BuffTx+8
and #$03
ora #$54
sta BuffTx+7
lda #$0a
sta TxMsgLn ;Total largo del mensaje a transmitir.
jsr TxMsg ;Activa proceso transmisi¢n buffer.
rts
;-------------------- TANSMITE UN RQC PARA ASI ---------------------------------
TxRqcASI:
jsr IniCab
clr BuffTx+9
lda MiIndic
ldx MiIndic+1
clc
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9
rora
rorx
ror BuffTx+9