home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 03 / praxis / contr2.asm < prev    next >
Encoding:
Assembly Source File  |  1989-12-29  |  2.1 KB  |  99 lines

  1. ;* ------------------------------------------------------- *
  2. ;Beispiel zur DMA-Programmierung
  3.  
  4. DMA equ 0
  5.  
  6. ;Programmierung von Kanal 0
  7.  
  8. ;Adresse umwandeln (1. Möglichkeit)
  9.  
  10.      MOV BX, 16
  11.      MOV AX, DS     ;Segmentadresse nach AX
  12.      MUL BX         ;mit 16 multiplizieren
  13.  
  14. ;Ergebnis steht als 32-Bit Wert in DX:AX
  15.  
  16.      ADD AX, SI     ;Offset addieren
  17.      ADC DX, 0      ;evtl. Carry-Übertrag addieren
  18.  
  19. ;Low-Byte der Quell-Adresse zum 8237 schreiben
  20.  
  21.      OUT DMA, AL
  22.  
  23. ;High-Byte der Quell-Adresse zum 8237 schreiben
  24.  
  25.      MOV AL, AH
  26.      OUT DMA, AL
  27.  
  28. ;Pageregister 0 schreiben
  29.  
  30.      OUT DMA, DL
  31.  
  32. ;Low-Byte der Blocklänge zum Blocklängenregister 0 schreiben
  33.  
  34.      MOV AL, CL
  35.      OUT DMA+1, AL
  36.  
  37. ;Hi-Byte der Blocklänge zum Blocklängenregister 0 schreiben
  38.  
  39.      MOV AL, CH
  40.      OUT DMA+1, AL
  41.  
  42. ;Betriebsartenregister für Kanal 0 schreiben
  43.  
  44.      MOV AL, 10001000b
  45.  
  46. ;Blockbetrieb, Speicheradresse erhöhen,
  47. ; kein autom. wiederholen
  48. ;Speicher lesen, Kanal 0
  49.  
  50.      OUT 1011b, AL
  51.  
  52. ;Programmierung von Kanal 1
  53. ;Adresse umwandeln (ist schneller als 1. Möglichkkeit)
  54.  
  55.      MOV AX, ES     ;Segmentanteil nach AX
  56.      MOV CL, 4
  57.      ROL AX, CL     ;AX um 4 Bits nach links rotieren
  58.  
  59. ;dadurch stehen die 4 höchstwertigen Bits ganz rechts
  60.  
  61.      MOV CH, AL     ;4 Bits retten und maskieren
  62.      AND CH, 00001111b
  63.      AND AL, 11110000b
  64.      ADD AX, DI     ;Offset addieren
  65.      ADD CH,0       ;evtl. Carry-Übertrag addieren
  66.  
  67. ;Low-Byte der Zieladresse zum 8237 schreiben
  68.  
  69.      OUT DMA, AL
  70.  
  71. ;Hi-Byte der Zieladresse zum 8237 schreiben
  72.  
  73.      MOV AL, AH
  74.      OUT DMA, AL
  75.  
  76. ;Pageregister 1 schreiben
  77.  
  78.      OUT DMA+1, CH
  79.  
  80. ;Low-Byte der Blocklänge zum Blocklängenregister 1 schreiben
  81.  
  82.      MOV AL, CL
  83.      OUT DMA+1, AL
  84.  
  85. ;Hi-Byte der Blocklänge zum Blocklängenregister 1 schreiben
  86.  
  87.      MOV AL, CH
  88.      OUT DMA+1, AL
  89.  
  90. ;Betriebsartenregister für Kanal 1 schreiben
  91.  
  92.      MOV AL, 10000101b
  93.  
  94. ;Blockbetrieb, Speicheradresse erhöhen, kein automatisches
  95. ;wiederholen, Speicher schreiben, Kanal 1
  96.  
  97.      OUT 1011b, AL
  98. ;* ------------------------------------------------------- *
  99.