Advertisement
heavenriver

ExEsame17.asm

Jun 15th, 2012
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;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:
  2. ;a. T1: (misura1 + misura2 + misura3) / 2;
  3. ;b. T2: (misura1 * 4) + (misura3 * 8);
  4. ;c. T3: (misura1 / 2) - (misura2 * 4);
  5. ;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.
  6. ;Progettare:
  7. ;- Il SCA dell’interfaccia CHECKVETRO e DECORA;
  8. ;- Il software di attivazione per CHECKVETRO ed i driver di CHECKVETRO e DECORA.
  9.  
  10. org 400h
  11. checkglass equ 0h        ;Checks the glass position on binaries, when arrived saves values to measures
  12. meas1 equ 1h             ;Glass width (WORD)
  13. meas2 equ 2h             ;Glass length (WORD)
  14. meas3 equ 3h             ;Glass height (WORD)
  15. decor equ 4h             ;Glass decorator, deactivates checkglass until routine is over
  16. dec1 equ 5h              ;T1 = (m1 + m2 + m3) / 2 LONGWORD
  17. dec2 equ 6h              ;T2 = (m1 * 4) + (m3 * 8) LONGWORD
  18. dec3 equ 7h              ;T3 = (m1 / 2) - (m2 * 4) LONGWORD
  19. code
  20. jsr init
  21. seti
  22. main: jmp main           ;Loops until interrupt
  23. halt
  24. init: start checkglass   ;Imports glass measurements to related memory locations
  25. inw checkglass, #meas1
  26. inw checkglass, #meas2
  27. inw checkglass, #meas3
  28. setim checkglass
  29. ret
  30. driver 0, 700h           ;Checkglass driver
  31. push R0
  32. push R1
  33. xorl R0, R0              ;Resets dolly register
  34. addl #meas1, R0
  35. addl #meas2, R0
  36. addl #meas3, R0
  37. asrl #1, R0
  38. movl R0, #dec1           ;Transfers first operation result to dec1
  39. xorl R0, R0              ;Resets dolly register
  40. xorl R1, R1              ;Resets second dolly register
  41. movl #meas1, R0
  42. asll #2, R0
  43. movl #meas3, R1
  44. asll #3, R1
  45. addl R0, R1
  46. movl R1, #dec2           ;Transfers second operation result to dec2
  47. xorl R0, R0              ;Resets dolly register
  48. xorl R1, R1              ;Resets second dolly register
  49. movl #meas1, R0
  50. asrl #1, R0
  51. movl #meas2, R1
  52. asll #2, R1
  53. movl R1, #dec3           ;Transfers third operation result to dec2
  54. start decor
  55. setim decor              ;Enables decor interrupt
  56. clear checkglass         ;Disables checkglass interrupt
  57. pop R1
  58. pop R0
  59. rti
  60. driver 4, 1100h          ;Decor driver
  61. start checkglass
  62. setim checkglass         ;Enables checkglass interrupt
  63. clear decor              ;Disables decor interrupt
  64. rti
  65. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement