home *** CD-ROM | disk | FTP | other *** search
- ; Program to illustrate operation of set/reset circuitry in conjunction
- ; with CPU data to perform two-color modification of memory that
- ; already contains data.
- ; Assembled with MASM 4.0, linked with LINK 3.51.
- ; By Michael Abrash, 4/26/87.
- ; Updated 6/25/89.
- ;
- stackseg segment para stack 'STACK'
- db 512 dup(?)
- stackseg ends
- ;
- EGA_VIDEO_SEGMENT equ 0a000h ;EGA display memory segment
- ;
- ; EGA register equates.
- ;
- SC_INDEX equ 3c4h ;SC index register
- SC_MAP_MASK equ 2 ;SC map mask register
- GC_INDEX equ 3ceh ;GC index register
- GC_SET_RESET equ 0 ;GC set/reset register
- GC_ENABLE_SET_RESET equ 1 ;GC enable set/reset register
- ;
- ; Macro to set indexed register INDEX of SC chip to SETTING.
- ;
- SETSC macro INDEX, SETTING
- mov dx,SC_INDEX
- mov al,INDEX
- out dx,al
- inc dx
- mov al,SETTING
- out dx,al
- dec dx
- endm
- ;
- ; Macro to set indexed register INDEX of GC chip to SETTING.
- ;
- SETGC macro INDEX, SETTING
- mov dx,GC_INDEX
- mov al,INDEX
- out dx,al
- inc dx
- mov al,SETTING
- out dx,al
- dec dx
- endm
- ;
- cseg segment para public 'CODE'
- assume cs:cseg
- start proc near
- ;
- ; Select 640x350 graphics mode.
- ;
- mov ax,010h
- int 10h
- ;
- mov ax,EGA_VIDEO_SEGMENT
- mov es,ax ;point to video memory
- ;
- ; Draw 18 10-scan-line high horizontal bars in green, 10 scan lines apart.
- ;
- SETSC SC_MAP_MASK,02h ;map mask setting enables only
- ; plane 1, the green plane
- sub di,di ;start at beginning of video memory
- mov al,0ffh
- mov bp,18 ;# bars to draw
- HorzBarLoop:
- mov cx,80*10 ;# bytes per horizontal bar
- rep stosb ;draw bar
- add di,80*10 ;point to start of next bar
- dec bp
- jnz HorzBarLoop
- ;
- ; Fill screen with alternating bars of red and brown, using CPU data
- ; to set plane 1 and set/reset to set planes 0, 2, & 3.
- ;
- SETSC SC_MAP_MASK,0fh ;must set map mask to enable all
- ; planes, so set/reset values can
- ; be written to planes 0, 2, & 3
- ; and CPU data can be written to
- ; plane 1 (the green plane)
- SETGC GC_ENABLE_SET_RESET,0dh ;CPU data to planes 0, 2, & 3
- ; will be replaced by set/reset
- ; value
- SETGC GC_SET_RESET,04h ;set/reset value is 0ffh for
- ; plane 2 (the red plane) and
- ; 0 for other planes
- sub di,di
- mov cx,80*350/2 ;# words per screen
- mov ax,07e0h ;CPU data controls only plane 1;
- ; set/reset controls other planes
- rep stosw ;perform fill (affects all planes)
- ;
- ; Turn off set/reset.
- ;
- SETGC GC_ENABLE_SET_RESET,0
- ;
- ; Exit to DOS. (Still in graphics mode; the MODE CO80 command
- ; can be used to restore the screen to text mode.)
- ;
- mov ah,4ch
- int 21h
- start endp
- cseg ends
- end start