40 likes | 204 Views
MEM. Pd32. DMAC. DISCO. TIMER. TIMER PRESETTATO. CLEAR. IACK. START. IRQ. IVN. R Q S. IACK OUT. SCO. pd32. IACK. CLEAR. INC. MBR. START. IRQ. CAR. IVN. SEL CAR. R Q S. INC. IACK OUT. MBR. MRD. SCO DMAC. TRA. MWR. MBG. SEL TRA. SET. SEL SET.
E N D
MEM Pd32 DMAC DISCO TIMER
TIMER PRESETTATO CLEAR IACK START IRQ IVN R Q S IACK OUT SCO
pd32 IACK CLEAR INC MBR START IRQ CAR IVN SEL CAR R Q S INC IACK OUT MBR MRD SCO DMAC TRA MWR MBG SEL TRA SET SEL SET DEC REG WC TC SEL WC DISCO DATO SCO DISCO TRACCIA SETTORE MEM
ORG 400H TIMER EQU 0H DMAC EQU 1H TRACCIA EQU 2H SETTORE EQU 3H WC EQU 4H CAR EQU 5H RISULTATO EQU 6H CODE JSR INIT MAIN: JMP MAIN INIT: SETI START TIMER RET DRIVER 0,1600H; DRIVER TIMER OUTL #10 , TRACCIA; IMPOSTO IL VALORE DELLA TRACCIA INIZIALE OUTL #0, SETTORE; IMPOSTO IL VALORE DEL SETTORE INIZIALE OUTL #1024,WC; IMPOSTO NUMERO DI DATI DA STPOSTARE OUTL #ABCDH,CAR; IMPOSTO INDIRIZZO INIZIALE SU CUI SPOSTARE I DATI START DMAC CLEAR TIMER; ELIMINO LA CAUSA DELL’INTERRUZIONE RTI DRIVER 1,3200H; DRIVER DMAC PUSH.. MOVL #ABCDH,RO; METTO L’INDIRIZZO INIZIALE DEI DATI IN MEMORIA IN R0 MOVL #2048,R1; METTO LO SPIAZZAMENTO DEL DATO FINALE IN R1 ADDL R0,R1; CALCOLO INDIRIZZO DATO FINALE XORL R2,R2; AZZERO IL REGISTRO CHE MANTERRà LA SOMMA LOOP: XORL R3,R3; AZZERO R3 PER POI FAR LA SOMMA SU LONGWORD E RISOLVERE EVENTUALI OVERFLOW MOVW (RO)+,R3; SPOSTO IL DATO CORRENTE IN R3 ADDL R3,R2; CMPL RO,R1; CONTROLLO SE SONO ARRIVATO ALLA FINE JNZ LOOP; SE NON è ZERO (QUINDI SONO DIVERSI) PASSO ALLA PROSSIMA ITERAZIONE DEL CICLO ASRL #10, R2; DIVIDO PER 1024 LA SOMMA MOVL R2, RISULTATO; METTO IL RISULTATO IN MEMORIA CLEAR DMAC; ELIMINO LA CAUSA DELL’INTERRUZIONE START TIMER; FACCIO RIPARTIRE IL TIMER POP… RTI