home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG009P.ASM < prev    next >
Assembly Source File  |  1988-04-16  |  1KB  |  53 lines

  1.  
  2. ;************************************************************************
  3. ; Write palette registers from a table                    *
  4. ;           Set the palette registers to the values in 'table'.      *
  5. ;           The palette registers are contained in the        *
  6. ;           first 16 registers of the attribute controller.        *
  7. ;           Here the 16 registers are loaded using the values from    *
  8. ;           the parameter array.                    *
  9. ;                                    *
  10. ; Entry:    [BP+6] - offset of register table (16 palette regs)    *
  11. ;        [BP+8] - segment of register table            *
  12. ;                                    *
  13. ;************************************************************************
  14.  
  15.     PUBLIC    Write_Palette
  16.  
  17. Write_Palette    PROC FAR
  18.     PUSH    BP
  19.     MOV    BP,SP
  20.     PUSH    DS
  21.     PUSH    SI
  22.     PUSH    ES
  23.  
  24.     XOR    AX,AX            ;Get address of CRT controller
  25.     MOV    ES,AX            ;From segment 0
  26.     MOV    DX,ES:[BIOS_CRT_Addr]
  27.     ADD    DX,6            ;Compute address of Attrib Read reg
  28.     IN    AL,DX            ;Reset Attribute flip-flop
  29.  
  30.     MOV    DS,[BP+8]
  31.     MOV    SI,[BP+6]        ;Get pointer to the parameter table
  32.     MOV    DX,03C0H        ;Address of Attribute controller
  33.     MOV    CX,16            ;Number of values to load
  34.     XOR    AH,AH            ;First index to load
  35.  
  36. PalLoop:MOV    AL,AH            ;Fetch next index
  37.     OUT    DX,AL            ;Select next index
  38.     LODSB                ;Fetch next value from the table
  39.     OUT    DX,AL            ;Load register with value
  40.     INC    AH            ;Update index
  41.     LOOP    PalLoop
  42.  
  43.     MOV    AL,20H            ;Must turn controller back ON
  44.     OUT    DX,AL
  45.  
  46.     POP    ES
  47.     POP    SI
  48.     POP    DS
  49.     MOV    SP,BP
  50.     POP    BP
  51.     RET    4
  52. Write_Palette    ENDP
  53.