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

  1.  
  2. ;************************************************************************
  3. ; Load a new character generator into plane 2                *
  4. ; Entry:    Ptr_CG    - Pointer to new character generator        *
  5. ;        Start    - First ASCII code to use            *
  6. ;        Count    - Number of characters to load            *
  7. ;************************************************************************
  8.  
  9. cg_seg        EQU    [BP+12]
  10. cg_offset    EQU    [BP+10]
  11. Start        EQU    [BP+8]
  12. Count        EQU    [BP+6]
  13.  
  14.     PUBLIC    Write_Char_Gen
  15.  
  16. Write_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 memory for write into plane 2
  25.  
  26.     MOV    DX,03C4h        ; sequencer enable map 2 for write
  27.     MOV    AL,2
  28.     OUT    DX,AL
  29.     INC    DX
  30.     MOV    AL,4
  31.     OUT    DX,AL
  32.  
  33.     DEC    DX            ; sequencer no chaining
  34.     MOV    AL,4
  35.     OUT    DX,AL
  36.     INC    DX
  37.     MOV    AL,6
  38.     OUT    DX,AL
  39.  
  40.     MOV    DX,03CEh        ; graphics use data from processor
  41.     MOV    AL,1
  42.     OUT    DX,AL
  43.     INC    DX
  44.     MOV    AL,0
  45.     OUT    DX,AL
  46.  
  47.     DEC    DX            ; graphics read and write modes
  48.     MOV    AL,5
  49.     OUT    DX,AL
  50.     INC    DX
  51.     MOV    AL,0
  52.     OUT    DX,AL
  53.  
  54.     DEC    DX            ; graphics address mapped to A000
  55.     MOV    AL,6
  56.     OUT    DX,AL
  57.     INC    DX
  58.     MOV    AL,05h
  59.     OUT    DX,AL
  60.  
  61.     DEC    DX            ; graphics enable 8 bits per write
  62.     MOV    AL,8
  63.     OUT    DX,AL
  64.     INC    DX
  65.     MOV    AL,0FFh
  66.     OUT    DX,AL
  67.  
  68.     ;--- load the character generator into plane 2
  69.  
  70.     MOV    AX,0A000h        ;Point to segment A000
  71.     MOV    ES,AX
  72.     MOV    AX,Start        ;Compute offset into char gen plane
  73.     MOV    CL,5            ;as index * bytes_per_char
  74.     SHL    AX,CL            ;which is index * 32
  75.     MOV    DI,AX            ;Copy offset in char gen plane into DI
  76.     MOV    DS,cg_seg
  77.     MOV    SI,cg_offset        ;Fetch pointer to new characters
  78.     MOV    AX,Count        ;Fetch number of characters to copy
  79.     SHL    AX,CL            ;Compute how many bytes to copy
  80.     SHR    AX,1            ;Divide by two so we can use MOV WORD
  81.     MOV    CX,AX            ;Copy count into CX
  82.  
  83.     REP    MOVSW            ;Copy the data
  84.  
  85.     ;--- Restore Sequencer and Graphics Controller
  86.  
  87.     MOV    DX,03C4h        ; Enable plane 0 & 1 for write
  88.     MOV    AL,2
  89.     OUT    DX,AL
  90.     INC    DX
  91.     MOV    AL,03H
  92.     OUT    DX,AL
  93.  
  94.     DEC    DX            ; sequencer even/odd & text
  95.     MOV    AL,4
  96.     OUT    DX,AL
  97.     INC    DX
  98.     MOV    AL,3
  99.     OUT    DX,AL
  100.  
  101.     MOV    DX,3CEH         ; graphics read and write modes
  102.     MOV    AL,5
  103.     OUT    DX,AL
  104.     INC    DX
  105.     MOV    AL,10H
  106.     OUT    DX,AL
  107.     DEC    DX
  108.  
  109.     XOR    AX,AX
  110.     MOV    ES,AX
  111.     TEST    BYTE PTR ES:[BIOS_Equipment],2
  112.     JNZ    WCG_Set_B000
  113.  
  114.     MOV    DX,3CEH         ;Map display buffer to B800
  115.     MOV    AL,6
  116.     OUT    DX,AL
  117.     INC    DX
  118.     MOV    AL,0EH
  119.     OUT    DX,AL
  120.     JMP    WCG_Done
  121. WCG_Set_B000:
  122.     MOV    DX,3CEH         ;Map display buffer to B000
  123.     MOV    AL,6
  124.     OUT    DX,AL
  125.     INC    DX
  126.     MOV    AL,0AH
  127.     OUT    DX,AL
  128.  
  129.     ;--- Clean up and exit
  130. WCG_Done:
  131.     POP    SI
  132.     POP    DI
  133.     POP    DS
  134.     POP    ES
  135.     MOV    SP,BP
  136.     POP    BP
  137.     RET    8
  138. Write_Char_Gen ENDP
  139.