home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG059P.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-04-17  |  2.0 KB  |  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_seg    EQU    [BP+8]
  12. buffer_offset    EQU    [BP+6]
  13.  
  14.     PUBLIC    Read_Char_Gen
  15.  
  16. Read_Char_Gen    PROC FAR
  17.     PUSH    BP
  18.     MOV    BP,SP
  19.     PUSH    ES
  20.     PUSH    DS
  21.     PUSH    DI
  22.     PUSH    SI
  23.  
  24.     ;--- Enable for read
  25.  
  26.     MOV    DX,3C4H         ;Disable even/odd and text mode
  27.     MOV    AL,4
  28.     OUT    DX,AL
  29.     INC    DX
  30.     MOV    AL,6
  31.     OUT    DX,AL
  32.  
  33.     MOV    DX,3CEH         ;Select plane 2 for read
  34.     MOV    AL,4
  35.     OUT    DX,AL
  36.     MOV    AL,2
  37.     INC    DX
  38.     OUT    DX,AL
  39.     DEC    DX
  40.  
  41.     MOV    AL,5            ;Disable odd/even & color compare
  42.     OUT    DX,AL
  43.     INC    DX
  44.     MOV    AL,0
  45.     OUT    DX,AL
  46.  
  47.     DEC    DX            ;Map plane to start at A000
  48.     MOV    AL,6
  49.     OUT    DX,AL
  50.     INC    DX
  51.     MOV    AL,05H
  52.     OUT    DX,AL
  53.  
  54.     ;--- Copy character generator into buffer
  55.  
  56.     MOV    ES,buffer_seg        ;Point ES:DI to buffer
  57.     MOV    DI,buffer_offset
  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    4
  114. Read_Char_Gen    ENDP
  115.