Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;CHECKVETRO è un’interfaccia di input collegata ad un processore PD32. Un sensore è collegato a CHECKVETRO ed ha lo scopo di controllare la posizione di una lastra di vetro che si muove su un binario. Al raggiungimento della posizione prefissata, il sensore calcola le dimensioni della lastra e le salva su tre registri posizionati nella propria interfaccia. Contestualmente al caricamento dei registri, CHECKVETRO interrompe il processore. Le dimensioni sono espresse con tre word nella forma misura1 X misura2 X misura3 (esempio: larghezza X lunghezza X altezza). Ogni registro nell’interfaccia deve contenere una misura. Il servizio associato all’interruzione è il seguente: il PD32 preleva le tre misure dall’interfaccia di CHECKVETRO e calcola:
- ;a. T1: (misura1 + misura2 + misura3) / 2;
- ;b. T2: (misura1 * 4) + (misura3 * 8);
- ;c. T3: (misura1 / 2) - (misura2 * 4);
- ;E scrive le tre longword calcolate su un’interfaccia di output DECORA collegata al PD32. DECORA, dopo essere stata programmata e avviata, provvederà a comandare un meccanismo per decorare il vetro tenendo conto dei valori passati. CHECKVETRO non deve essere riattivata fino a che DECORA non segnala al PD32 il completamento delle operazioni di decoro del vetro. Si tenga presente che le operazioni sulle misure (a. b. c.) possono restituire risultati non esprimibili utilizzando 16 bits e che non ci possono essere perdite di precisione durante i calcoli. Tutti i driver sono non interrompibili.
- ;Progettare:
- ;- Il SCA dell’interfaccia CHECKVETRO e DECORA;
- ;- Il software di attivazione per CHECKVETRO ed i driver di CHECKVETRO e DECORA.
- org 400h
- checkglass equ 0h ;Checks the glass position on binaries, when arrived saves values to measures
- meas1 equ 1h ;Glass width (WORD)
- meas2 equ 2h ;Glass length (WORD)
- meas3 equ 3h ;Glass height (WORD)
- decor equ 4h ;Glass decorator, deactivates checkglass until routine is over
- dec1 equ 5h ;T1 = (m1 + m2 + m3) / 2 LONGWORD
- dec2 equ 6h ;T2 = (m1 * 4) + (m3 * 8) LONGWORD
- dec3 equ 7h ;T3 = (m1 / 2) - (m2 * 4) LONGWORD
- code
- jsr init
- seti
- main: jmp main ;Loops until interrupt
- halt
- init: start checkglass ;Imports glass measurements to related memory locations
- inw checkglass, #meas1
- inw checkglass, #meas2
- inw checkglass, #meas3
- setim checkglass
- ret
- driver 0, 700h ;Checkglass driver
- push R0
- push R1
- xorl R0, R0 ;Resets dolly register
- addl #meas1, R0
- addl #meas2, R0
- addl #meas3, R0
- asrl #1, R0
- movl R0, #dec1 ;Transfers first operation result to dec1
- xorl R0, R0 ;Resets dolly register
- xorl R1, R1 ;Resets second dolly register
- movl #meas1, R0
- asll #2, R0
- movl #meas3, R1
- asll #3, R1
- addl R0, R1
- movl R1, #dec2 ;Transfers second operation result to dec2
- xorl R0, R0 ;Resets dolly register
- xorl R1, R1 ;Resets second dolly register
- movl #meas1, R0
- asrl #1, R0
- movl #meas2, R1
- asll #2, R1
- movl R1, #dec3 ;Transfers third operation result to dec2
- start decor
- setim decor ;Enables decor interrupt
- clear checkglass ;Disables checkglass interrupt
- pop R1
- pop R0
- rti
- driver 4, 1100h ;Decor driver
- start checkglass
- setim checkglass ;Enables checkglass interrupt
- clear decor ;Disables decor interrupt
- rti
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement