Advertisement
heavenriver

ExEsame12.asm

Jun 15th, 2012
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Exercise on slide 12
  2. ;Sia DEV una periferica di output del processore PD32 che acquisisce dati a 32 bit tramite la tecnica delle interruzioni, e sia DMAC un DMA controller interfacciato con il PD32. Il processore programma DMAC per effettuare il trasferimento di 1024 long-word da un disco rigido non visibile al PD32 (ovvero non direttamente interfacciato al PD32) ad un buffer A ad indirizzo di memoria DDBBh. DMAC avverte il processore dell’avvenuto trasferimento tramite interruzione. All’atto dell’accettazione dell’interruzione di DMAC, il processore attiva DEV per effettuare su di essa  l’output di tutto il contenuto del buffer A. Al termine della fase di output, DMAC viene riattivato per una nuova acquisizione di dati dal disco rigido.
  3. ;Progettare il software per attivare DMAC e DEV, e per gestirne le relative interruzioni. Nella soluzione si supponga che il servizio d’interruzione associato alla periferica DEV sia interrompibile. Inoltre, si ipotizzi di avere a disposizione un buffer di 6 byte ad indirizzo 00B0h e che nessun altro buffer di memoria sia disponibile per la gestione del sistema di periferiche.
  4.  
  5. org 400h
  6. dev equ 0h              ;Acquires 32-bit data via interrupt, is activated after DMAC transfer
  7. dmac equ 1h             ;DMAC, transfers data from a device invisible to CPU to bufferA
  8. WC equ 2h               ;DMAC's WC
  9. CAR equ 3h              ;DMAC's CAR
  10. bufferA equ 0DDBBh      ;Memory buffer
  11. workbuffer equ 00B0h    ;Working buffer
  12. code
  13. jsr init
  14. seti
  15. main: jmp main          ;Loops until interrupt
  16. halt
  17. init: push R0           ;Initializes data transfer
  18. movl #1024, R0
  19. outl WC, R0             ;Sets word counter to 1024
  20. movl #bufferA, R0
  21. outl CAR, R0            ;Sets current address to memory buffer
  22. start dmac
  23. pop R0
  24. ret
  25. driver 0, 700h          ;Device driver
  26. push R0
  27. push R1
  28. movl #1024, R0          ;Sets counter to 1024
  29. movl #bufferA, R1       ;Sets memory buffer as first data location
  30. copy: outl dev, (R1)+   ;Copies data to device
  31. subl #1, R0
  32. jnz copy                ;If counter strikes 0, proceeds
  33. jsr init
  34. pop R1
  35. pop R0
  36. rti
  37. driver 1, 900h          ;DMAC driver
  38. start dev
  39. setim dev
  40. clear dmac
  41. rti
  42. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement