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

  1.  
  2. ;************************************************************************
  3. ; Use BIOS to set up the EGA to display 512 different characters        *
  4. ; Entry:        CG_One  - Pointer to the first character generator      *
  5. ;               CG_Two  - Pointer to the second character generator     *
  6. ;************************************************************************
  7.  
  8. CG_One  EQU     [BP+4]
  9. CG_Two  EQU     [BP+6]
  10.  
  11.         PUBLIC  _BIOS_512_Set
  12.  
  13. _BIOS_512_Set    PROC NEAR
  14.         PUSH    BP
  15.         MOV     BP,SP
  16.         PUSH    ES
  17.  
  18.         ;Download the two character generators
  19.  
  20.         MOV     AX,DS                   ;Assume both bitmaps are in DS seg
  21.         MOV     ES,AX
  22.         MOV     CX,256                  ;Download 256 characters
  23.         MOV     DX,0                    ;Start with character 0
  24.         MOV     BL,0                    ;Download as bitmaps 0 - 255
  25.         MOV     BH,32                   ;Each bitmap is in 8x32 box
  26.         PUSH    BP
  27.         MOV     BP,CG_One               ;Pointer to first char gen
  28.         MOV     AH,11H                  ;Function = CHARACTER GENERATOR
  29.         MOV     AL,0                    ;Subfunction = LOAD CUSTOM SET
  30.         INT     10H                     ;Ask BIOS to download first set
  31.         POP     BP
  32.  
  33.         MOV     BL,1                    ;Download as bitmaps 256 - 511
  34.         MOV     BP,CG_Two               ;Pointer to second char gen
  35.         INT     10H                     ;Ask BIOS to download second set
  36.         JMP     Set_Colors
  37.  
  38.         ;--- Since the INTENSIFY BIT will be used as generator select
  39.         ;    we must load palette table to keep two halves the same
  40.  
  41. Default_Colors  DB      0,1,2,3,4,5,6,7, 0,1,2,3,4,5,6,7, 0
  42. Default_Monos   DB      0,8,8,8,8,8,8,8, 0,8,8,8,8,8,8,8, 0
  43. Set_Colors:
  44.         LEA     DX,Default_Colors       ;Load offset of color palette
  45.         XOR     AX,AX                   ;Look if mono display is attached
  46.         MOV     ES,AX                   ;to see if mono palette is needed
  47.         TEST    BYTE PTR ES:[BIOS_Equipment],2
  48.         JZ      Default_In              ;... no, mono is not attached
  49.         LEA     DX,Default_Monos        ;... yes, must use mono palette
  50. Default_In:
  51.         MOV     AX,CS                   ;Load segment of palette
  52.         MOV     ES,AX
  53.         MOV     AH,10H                  ;Function = LOAD PALETTE
  54.         MOV     AL,2                    ;Subfunction = ALL REGS
  55.         INT     10H                     ;Ask BIOS to load palette
  56.  
  57.         ;--- Enable two character generators
  58.  
  59. Enable_Two_CGs:
  60.         MOV     BL,0100B                ;Register value for CHAR GEN SELECT
  61.                                         ;This selects 0 for A and 1 for B
  62.         MOV     AH,11H                  ;Function = CHARACTER GENERATOR
  63.         MOV     AL,3                    ;Subfunction = SELECT ACTIVE SET
  64.         INT     10H                     ;Ask BIOS to enable two sets
  65.         JMP     Demo_Text
  66.  
  67.         ;--- Display few characters from each 256 character set
  68.  
  69. TestStr DB      'A', 7,'B', 7,'C', 7    ;Characters in   0 - 255
  70.         DB      'A',15,'B',15,'C',15    ;Characters in 256 - 511
  71.  
  72. Demo_Text:
  73.         MOV     AX,CS                   ;Segment of text
  74.         MOV     ES,AX
  75.         LEA     BP,TestStr              ;Offset of text
  76.         MOV     BH,0                    ;Use page 0
  77.         MOV     CX,6                    ;Display 6 characters
  78.         MOV     DH,0                    ;Start at row 0
  79.         MOV     DL,0                    ;and column 0
  80.         MOV     AH,13H                  ;Function = WRITE TEXT STRING
  81.         MOV     AL,03H                  ;Subfunction = CHAR+ATTRIB, UPDATE
  82.         INT     10H                     ;Ask BIOS to write the string
  83.  
  84.         POP     ES
  85.         POP     BP
  86.         RET
  87. _BIOS_512_Set   ENDP
  88.