vuoi
o PayPal
tutte le volte che vuoi
Configurazione "communic asincrona" con due sistemi simmetrici
Il programma serve a provare la configurazione "communic asincrona" costituita da due sistemi simmetrici ciascuno con un processore M68000, una ROM di 8K (addr $0-$1FFF), una RAM di 10K (addr $8000-$A7FF), un device parallelo PIA mappato a $2004, un device seriale di tipo TERMINAL mappato a $2000. I due PIA sono interconnessi e mediante un protocollo di handshaking consentono ai due sistemi di scambiarsi i caratteri digitati sul dispositivo TERMINAL. I device interagiscono con i rispettivi processori mediante le linee di interruzione. In particolare il dato immesso da tastiera è acquisito mediante interruzione (liv.1, autovettore 25 mappato in area ROM alla locazione $64 che punta alla ISR posta all'indirizzo $8500 in area RAM) e inviato alla sezione A del dispositivo parallelo PIA per la trasmissione verso il dispositivo PIA connesso all'altro sistema. Il carattere ricevuto dal PIA è gestito mediante interruzione. All'arrivo dell'interrupt.la ISR lo acquisisce e lo invia al terminal per la visualizzazione. L'interruzione è associata all'interrupt di liv. 3, #vect 27 mappato a $6C della ROM con ISR a $8700.
*********************************************************************************
PIA1 PIA2
______ _______
CA1 |<---------| CB2
CA2 |--------->| CB1
______|<==== |_______
CB1 |<---------| CA2
CB2 |--------->| CA1
______| ====>|_______
**********************************************************************************
NAME communic ;tale direttiva non è allo stato supportata dall'assemblatore
BEGIN ORG $8200
PIADA EQU $2004 ;indirizzo di PIA-A dato, usato in input
PIACA EQU $2005 ;indirizzo di PIA-A stato/controllo
PIADB EQU $2006 ;indirizzo di PIA-B dato, usato in output
PIACB EQU $2007 ;indirizzo di PIA-B controllo
TERD EQU $2000 ;indirizzo di TERMINAL registro dato
TERC EQU $2001 ;indirizzo di TERMINAL registro Stato-Controllo
JSR DVAIN ;inizializza PIA porto A
JSR DVBOUT
;inizializza PIA porto BJSR DVTER ;inizializza terminal
<code>MOVE.W SR,D0</code> ;legge il registro di stato
<code>ANDI.W #$D8FF,D0</code> ;maschera per reg stato (stato utente, int abilitati)
<code>MOVE.W D0,SR</code> ;pone liv int a 000
<code>LOOP JMP LOOP</code> ;ciclo caldo dove il processore attende interrupt
*********************************************************************************
INIZIALIZZAZIONE DELLA PIA: PORTO A
<code>CRA |0 |0 |1 0 0 |1 |0 1|* | | |__Controllo CA1: interruzioni abilitate su IRQA, CA1 sensibile al
fronte 1->0
<code>| | |* | |______Accesso a DRA: il prossimo accesso ad indirizzo pari è per PRA
<code>|_________Contollo CA2: linea di uscita, diviene alta su fronte attivo di CA1 e
si riabbassa a seguito ad una lettura da PRA
** DRA=0 => PORTO A PORTO DI INGRESSO
*********************************************************************************
DVAIN MOVE.B #0,PIACA ;seleziona il registro direzione del porto A,
;prossimo accesso ad indirizzo pari =>DRA
MOVE.B #$00,PIADA ;DRA=0 : pone le linee di A a linee di
MOVE.B #%11100101,PIACA ;configurazione porto A nel controlloRTS
*********************************************************************************
INIZIALIZZAZIONE DELLA PIA: PORTO B
CRB |1 |0 |1 0 0 |1 |0 0|
| | | |__Controllo CB1: interruzioni disabilitate su IRQB, CB1 sensibile a
| | fronte 1->0
| |______Accesso a DRB: il prossimo accesso ad indirizzo pari è per PRB
|_________Contollo CB2: linea di uscita, diviene alta su fronte attivo di CB1 e
si riabbassa a seguito a scrittura su PRB
** DRB=1 => PORTO B PORTO DI USCITA
*********************************************************************************
DVBOUT MOVE.B #0,PIACB ;seleziona il registro direzione di PIA porto B
MOVE.B #$FF,PIADB ;pone le linee di PIA B a linee di output
MOVE.B #%11100100,PIACBRTS
*********************************************************************************
INIZIALIZZAZIONE DEL TERMINALE:
CNTRL |0 |0 |1 |1 |1 |1 |1 |1 |
| | | | | | | |__Abilita interruzioni su Buffer full
Abilita interruzioni su Enter* | |||||
Pulisci schermo* | |||||
Pulisci buffer tastiera* | |||||
Abilita tastiera* | |||||
Abilita echo* | |||||
Stato di buffer full* | |||||
Stato di Enter inviato********************************************************************************DVTER MOVE.B #$3f,TERC ;seleziona indirizzo stato/controlloRTS*********************************************************************************ISR per la gestione dato proveniente dalla tastiera di TERMINAL e spedito, per tramite del*PIA porto B, all'altro sistema.*ISR associata all'interrupt di liv. 1, #vect 25 mappato a $64 della ROM con ISR a $8500********************************************************************************ORG $8500 ;ricevi da tastieraINT1 MOVE.L A0,-(A7) ;push di A0,A1,A2,D0,D1 in stack supervisorMOVE.L A1,-(A7)MOVE.L A2,-(A7)MOVE.L D0,-(A7)MOVE.L D1,-(A7)MOVEA.L #TERD,A0MOVEA.L #PIADB,A1MOVEA.L #PIACB,A2INPUT MOVE.B |
(A0),D0 ;acquisisci dato da terminal*trasferisci il carattere letto alla PIA-A con handshaking tra PIA-A e PIA-B
MOVE.B D0,(A1) ;Dato su bus di PIA porto B, generazione interrupt;DATA READY
ciclo2 MOVE.B (A2),D1 ;In attesa di DATA ACKNOWLEDGE
ANDI.B #$80,D1 ;aspetta che CRB7 divenga 0
BEQ ciclo2*fine trasferimento e handshaking
CMP.B #13,D0 ;Se il carattere ricevuto è ENTER
BNE INPUT ;termina altrimenti prossimo carattere
ORI.B #$1C,TERC ;riabilita tastiera ,pulisce buffer e video
MOVE.L (A7)+,D1 ;ripristino di D0,D1,A2,A1,A0
MOVE.L (A7)+,D0
MOVE.L (A7)+,A2