; Program to demonstrate screen blanking via bit 5 of the
; Attribute Controller Index register.
;
AC_INDEX	equ	3c0h	;Attribute Controller Index register
INPUT_STATUS_1	equ	3dah	;color-mode address of the Input
				; Status 1 register
;
; Macro to wait for and clear the next keypress.
;
WAIT_KEY macro
	mov	ah,8		;DOS input without echo function
	int	21h
	endm
;
stack	segment para stack 'STACK'
	db	512 dup (?)
stack	ends
;
Data	segment word 'DATA'
SampleText db	'This is bit-mapped text, drawn in hi-res '
	db	'EGA graphics mode 10h.', 0dh, 0ah, 0ah
	db	'Press any key to blank the screen, then '
	db	'any key to unblank it,', 0dh, 0ah
	db	'then any key to end.$'
Data	ends
;
Code	segment
	assume	cs:Code, ds:Data
Start	proc	near
	mov	ax,Data
	mov	ds,ax
;
; Go to hi-res graphics mode.
;
	mov	ax,10h		;AH = 0 means mode set, AL = 10h selects
				; hi-res graphics mode
	int	10h		;BIOS video interrupt
;
; Put up some text, so the screen isn't empty.
;
	mov	ah,9		;DOS print string function
	mov	dx,offset SampleText
	int	21h
;
	WAIT_KEY
;
; Blank the screen.
;
	mov	dx,INPUT_STATUS_1
	in	al,dx		;reset port 3c0h to index (rather than data)
				; mode
	mov	dx,AC_INDEX
	sub	al,al		;make bit 5 zero...
	out	dx,al		;...which blanks the screen
;
	WAIT_KEY
;
; Unblank the screen.
;
	mov	dx,INPUT_STATUS_1
	in	al,dx		;reset port 3c0h to Index (rather than data)
				; mode
	mov	dx,AC_INDEX
	mov	al,20h		;make bit 5 one...
	out	dx,al		;...which unblanks the screen
;
	WAIT_KEY
;
; Restore text mode.
;
	mov	ax,2
	int	10h
;
; Done.
;
Done:
	mov	ah,4ch		;DOS terminate function
	int	21h
Start	endp
Code	ends
	end	Start
