home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG004P.ASM < prev    next >
Assembly Source File  |  1988-05-01  |  4KB  |  149 lines

  1. ;************************************************************************ 
  2. ;                                    * 
  3. ; Select mode on EGA adapter by loading all control            * 
  4. ; registers.  Register are read from a table pointed to by        * 
  5. ; Entry: [BP+6]-offset of the parameter table                * 
  6. ;        [BP+8]-segment of the parameter table                * 
  7. ;        Parameter table should have the following format    * 
  8. ;        1 byte    - 3BA for mono modes, 3DA for color modes    * 
  9. ;        4 bytes - Sequencer values for register 1 - 4        * 
  10. ;        25 bytes- CRT controller values             * 
  11. ;        9 bytes - Graphics controller values            * 
  12. ;        20 bytes- Attribute register values            * 
  13. ;                                    * 
  14. ;************************************************************************ 
  15.                  
  16. PUBLIC    Write_Register_Set 
  17. Write_Register_Set     PROC     FAR 
  18.     PUSH    BP 
  19.     MOV    BP,SP 
  20.     PUSH    DS 
  21.     PUSH    SI 
  22.     PUSH    DI 
  23.  
  24. ;--- Select both graphics controllers 
  25.                  
  26.     MOV    DX,3CCH         ;Load address 
  27.     MOV    AL,0            ;Select controller 0 
  28.     OUT    DX,AL 
  29.     MOV    DX,3CAH         ;Load address of second controller 
  30.     MOV    AL,1            ;Select controller 1 
  31.     OUT    DX,AL 
  32.  
  33. ;--- Get address of CRT controller from the parameter table 
  34. ;    and turn the video off 
  35.  
  36.     MOV    DS,[BP+8] 
  37.     MOV    SI,[BP+6]        ;Fetch pointer to param table 
  38.     MOV    DI,SI            ;Keep pointer to first parameter 
  39.     LODSB                ;Fetch the crt controller address 
  40.     MOV    DL,AL 
  41.     MOV    DH,3 
  42.     ADD    DX,6            ;Turn video off 
  43.     IN    AL,DX            ;First reset data/index flip flop 
  44.     MOV    DX,3C0H         ;Address of attribute controller 
  45.     XOR    AL,AL 
  46. ;    OUT    DX,AL            ;Write 0 to turn video off 
  47.  
  48. ;--- Load the Miscellaneous regiser 
  49.  
  50.     MOV    DX,3C2H         ;Fetch Misc register address 
  51.     LODSB                ;Fetch value from parameter table 
  52.     OUT    DX,AL            ;Load the Misc register 
  53.  
  54. ;--- Load the Sequencer registers 
  55.  
  56.     MOV    DX,3C4H         ;Halt the sequencer 
  57.     XOR    AL,AL 
  58.     OUT    DX,AL 
  59.     INC    DX 
  60.     MOV    AL,1 
  61.     OUT    DX,AL 
  62.     DEC    DX 
  63.  
  64.     MOV    CX,4            ;Number of registers to load 
  65.     MOV    AH,1            ;First register to load 
  66.  
  67. LoopSeq:MOV    AL,AH            ;Fetch index 
  68.     OUT    DX,AL            ;Select index 
  69.     INC    DX            ;Address of data register 
  70.     LODSB                ;Fetch value from paramter table 
  71.     OUT    DX,AL            ;Load data register 
  72.     INC    AH            ;Update register index 
  73.     DEC    DX 
  74.     LOOP    LoopSeq         ;Check if more to do 
  75.                  
  76.     MOV    AL,0            ;Restart the sequencer 
  77.     OUT    DX,AL 
  78.     INC    DX 
  79.  
  80.     MOV    AL,3 
  81.     OUT    DX,AL 
  82.  
  83. ;--- Load the CRT controller registers 
  84.  
  85.     MOV    DL,[DI]         ;Fetch address of CRT controller 
  86.     MOV    CX,25            ;Number of registers to load 
  87.     XOR    AH,AH            ;Index of first register to load 
  88.                  
  89. LoopCRT:MOV    AL,AH            ;Fetch index 
  90.     OUT    DX,AL            ;Select register 
  91.     INC    DX            ;Address of data register 
  92.     LODSB                ;Fetch data 
  93.     OUT    DX,AL            ;Load data register 
  94.     DEC    DX            ;Address of index 
  95.     INC    AH            ;Update index 
  96.     LOOP    LoopCRT 
  97.  
  98. ;--- Load the Graphics controller registers 
  99.  
  100.     MOV    DX,3CEH 
  101.     MOV    CX,9 
  102.     XOR    AH,AH 
  103.  
  104. LoopGrf:MOV    AL,AH            ;Fetch index 
  105.     OUT    DX,AL            ;Select index 
  106.     INC    DX 
  107.     LODSB                ;Fetch value from parameter table 
  108.     OUT    DX,AL            ;Load value into data register 
  109.     INC    AH 
  110.     DEC    DX 
  111.     LOOP    LoopGrf 
  112.  
  113. ;--- Load the palette registers in the Attribute controller 
  114.  
  115.     MOV    DL,[DI]         ;Reset data/index flip-flop 
  116.     ADD    DL,6 
  117.     IN    AL,DX 
  118.  
  119.     MOV    DX,3C0H         ;Address of index register 
  120.     MOV    CX,16            ;Number of registers to load 
  121.     XOR    AH,AH            ;First index 
  122.  
  123. LoopVLT:MOV    AL,AH            ;Fetch index 
  124.     OUT    DX,AL            ;Select next index 
  125.     LODSB                ;Fetch value from parameter table 
  126.     OUT    DX,AL            ;Load the next data register 
  127.     INC    AH            ;Update index 
  128.     LOOP    LoopVLT 
  129.  
  130. ;--- Load Attribute registers beyond palette 
  131.  
  132.     MOV    CX,4            ;Number of register to load 
  133.     MOV    AH,30H            ;Starting index is 10H and 20h is 
  134.                     ;used to turn Attr. Ctrl on 
  135. LoopAtt:MOV    AL,AH            ;Fetch next index 
  136.     OUT    DX,AL            ;Select the index 
  137.     LODSB                ;Fetch value from parameter table 
  138.     OUT    DX,AL            ;Load register with the value 
  139.     INC    AH            ;Update index 
  140. LOOP    LoopAtt 
  141.  
  142.     POP    DI            ;Standard return to C 
  143.      POP    SI 
  144.      POP    DS 
  145.      MOV    SP,BP 
  146.      POP    BP 
  147.      RET    4 
  148.  Write_Register_Set  ENDP 
  149.