Advertisement
heavenriver

ExEsame15.asm

Jun 15th, 2012
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Un DMAC è interfacciato al PD32 e supporta operazioni di trasferimento dati da una periferica DISCO verso la memoria. La periferica DISCO può essere indirizzata utilizzando la coppia di longword TRACCIA e SETTORE. Il trasferimento dei dati avviene una word per volta. Un TIMER è interfacciato al PD32 e lancia interruzioni ogni N secondi. Il servizio associato all’interruzione è il seguente: il PD32 programma il DMAC per trasferire tutto il contenuto di un file dal disco ad un buffer di memoria all’indirizzo ABCDh. Il file è di taglia fissa e composto da 1024 word a partire dall’indirizzo <TRACCIA,SETTORE> = <10,0>. Alla fine del trasferimento il pd32 deve calcolare la media dei valori letti dal file e scriverla all’indirizzo di memoria DDDDh. Solo dopo il calcolo della media il TIMER può essere reinizializzato per un nuovo ciclo di trasferimenti. Si ipotizzi che il file nel disco sia memorizzato sequenzialmente e che lo SCO del DMAC si occupa dell'incremento di TRACCIA,SETTORE; non è necessario esplicitare i circuiti dello SCO che si occupano di tale incremento. Tutti i driver sono non interrompibili.
  2. ;Progettare:
  3. ;Il SCA dell’interfaccia tra DMAC, TIMER e PD32;
  4. ;Il software di attivazione per TIMER ed i driver del TIMER e del DMAC.
  5.  
  6. org 400h
  7. dmac equ 0h               ;DMAC, transfers 1024W of data from disk to buffer
  8.                           ;When transfer ends, calculates average and writes in avg, then restarts timer
  9. disk equ 1h               ;Disk
  10. track equ 2h              ;Disk track
  11. sector equ 3h             ;Disk sector
  12. timer equ 4h              ;Sends interrupts every N seconds
  13. wc equ 5h                 ;DMAC's word counter
  14. car equ 6h                ;DMAC's current address register
  15. buffer equ 0ABCDh         ;Memory buffer
  16. avg equ 0DDDDh            ;Saves average value
  17. code
  18. jsr init
  19. seti
  20. main: jmp main            ;Loops until interrupt
  21. halt
  22. init: push R0
  23. start timer
  24. movl #N, R0
  25. outl timer, R0            ;Initializes timer default interrupt delay
  26. setim timer
  27. pop R0
  28. ret
  29. driver 0, 700h            ;DMAC driver
  30. push R0
  31. push R1
  32. push R2
  33. push R3
  34. movl #1024, R0            ;Sets counter
  35. xorl R1, R1               ;Resets dolly register
  36. movl #buffer, R2          ;Sets starting buffer to memory buffer
  37. average: addl (R2)+, R1   ;Adds data from buffer to dolly register
  38. subl #1, R0
  39. jz finish                 ;When counter hits 0, averages measured values
  40. jmp average
  41. finish: asrl #10, R1
  42. movl R1, avg              ;Saves average
  43. start timer
  44. setim timer
  45. clear dmac                ;Disables DMAC interrupts
  46. pop R2
  47. pop R1
  48. pop R0
  49. rti
  50. driver 4, 900h            ;Timer driver
  51. push R0
  52. movl #10, R0
  53. outl track, R0            ;Sets starting track to 10
  54. movl #0, R0
  55. outl sector, R0           ;Sets starting sector to 0
  56. movl #1024, R0
  57. outl wc, R0               ;Sets word counter to 1024
  58. movl #buffer, R0
  59. outl car, R0              ;Sets current address to buffer address
  60. start dmac
  61. clear timer               ;Disables timer interrupts
  62. pop R0
  63. rti
  64. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement