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

  1.  
  2. ;************************************************************************
  3. ; Read first character generator from plane 2                           *
  4. ; Entry:        DS:Buffer       - Pointer to buffer where to store      *
  5. ;                                 32x256 bytes of data                  *
  6. ; Exit:         It is assumed that the adapter is in one of the text    *
  7. ;               modes 0,1,2,3 or 7 otherwise state is unpredictable     *
  8. ;               and will have to be reset by the calling procedure      *
  9. ;************************************************************************
  10.  
  11. Buffer  EQU     [BP+4]
  12.  
  13.         PUBLIC  _Read_Char_Gen
  14.  
  15. _Read_Char_Gen  PROC NEAR
  16.         PUSH    BP
  17.         MOV     BP,SP
  18.         PUSH    ES
  19.         PUSH    DS
  20.         PUSH    DI
  21.         PUSH    SI
  22.  
  23.         ;--- Enable for read
  24.  
  25.         MOV     DX,3C4H                 ;Disable even/odd and text mode
  26.         MOV     AL,4
  27.         OUT     DX,AL
  28.         INC     DX
  29.         MOV     AL,6
  30.         OUT     DX,AL
  31.  
  32.         MOV     DX,3CEH                 ;Select plane 2 for read
  33.         MOV     AL,4
  34.         OUT     DX,AL
  35.         MOV     AL,2
  36.         INC     DX
  37.         OUT     DX,AL
  38.         DEC     DX
  39.  
  40.         MOV     AL,5                    ;Disable odd/even & color compare
  41.         OUT     DX,AL
  42.         INC     DX
  43.         MOV     AL,0
  44.         OUT     DX,AL
  45.  
  46.         DEC     DX                      ;Map plane to start at A000
  47.         MOV     AL,6
  48.         OUT     DX,AL
  49.         INC     DX
  50.         MOV     AL,05H
  51.         OUT     DX,AL
  52.  
  53.         ;--- Copy character generator into buffer
  54.  
  55.         MOV     AX,DS                   ;Point ES:DI to buffer
  56.         MOV     ES,AX
  57.         MOV     DI,Buffer
  58.         MOV     AX,0A000H               ;Point DS:SI to char generator
  59.         MOV     DS,AX
  60.         XOR     SI,SI
  61.         MOV     CX,32*256               ;Number of bytes to move
  62.         REP     MOVSB                   ;Copy the data
  63.  
  64.         ;--- Restore mode
  65.  
  66.         MOV     DX,3C4H                 ;Enable even/odd and text mode
  67.         MOV     AL,4
  68.         OUT     DX,AL
  69.         INC     DX
  70.         MOV     AL,3
  71.         OUT     DX,AL
  72.  
  73.         MOV     DX,3CEH                 ;Restore plane 0 for read
  74.         MOV     AL,4
  75.         OUT     DX,AL
  76.         MOV     AL,0
  77.         INC     DX
  78.         OUT     DX,AL
  79.         DEC     DX
  80.  
  81.         MOV     AL,5                    ;Restore odd/even
  82.         OUT     DX,AL
  83.         INC     DX
  84.         MOV     AL,10H
  85.         OUT     DX,AL
  86.  
  87.         XOR     AX,AX
  88.         MOV     ES,AX
  89.         TEST    BYTE PTR ES:[BIOS_Equipment],2
  90.         JNZ     Set_B000
  91.  
  92.         MOV     DX,3CEH                 ;Map display buffer to B800
  93.         MOV     AL,6
  94.         OUT     DX,AL
  95.         INC     DX
  96.         MOV     AL,0EH
  97.         OUT     DX,AL
  98.         JMP     RCG_Done
  99. Set_B000:
  100.         MOV     DX,3CEH                 ;Map display buffer to B000
  101.         MOV     AL,6
  102.         OUT     DX,AL
  103.         INC     DX
  104.         MOV     AL,0AH
  105.         OUT     DX,AL
  106. RCG_Done:
  107.         POP     SI
  108.         POP     DI
  109.         POP     DS
  110.         POP     ES
  111.         MOV     SP,BP
  112.         POP     BP
  113.         RET
  114. _Read_Char_Gen  ENDP
  115.