TITLE	Convert to Color Display
	PAGE	,132
NODISP_FLAG  EQU     11001111B			;Turn OFF Monochrom
COLOR_FLAG   EQU     00100000B			;Turn ON Color
MONO_FLAG    EQU     00110000B			;Turn ON Monochrom
DATA	SEGMENT AT 40H
	ORG	10H
EQUIPFLAG	DW	?
DATA	ENDS
STACK	SEGMENT STACK
	DW	64 DUP(?)
STACK	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA
COLOR	PROC	FAR
	PUSH	DS				;Establish return vector
	SUB	AX,AX
	PUSH	AX
;
	MOV	BX,80H				;Offset into PSP
	ADD	BL,ES:[BX]			;+80H is length of modifier
	MOV	AL,ES:[BX]			;Get opperand
	CMP	AL,'0'                          ;if less that ascii 0
	JL	BAD				;goto error
	CMP	AL,'6'                          ;if greater that ascii 6
	JG	BAD				;goto error
	SUB	AL,30H				;Make binary
	PUSH	AX				;SAVE ON STACK
;
	MOV	AX,DATA
	MOV	DS,AX				;Set up segment register
	MOV	AX,EQUIPFLAG
	AND	AL,NODISP_FLAG			;Turn OFF Monochrom
	OR	AL,COLOR_FLAG			;Turn on color
	MOV	EQUIPFLAG,AX			;Restore equipment flag
	POP	AX				;Do a mode set
	PUSH	AX
	INT	10H				;To the video interrupt
;
	OR	EQUIPFLAG,MONO_FLAG		;Reset EQUIPFLAG to Monochrom
	MOV	AX,3				;Do a 80x25 mode set
	INT	10H
	MOV	AX,CS				;Set up segment for print
	MOV	DS,AX
	MOV	DX,OFFSET MODE_TXT
	MOV	AH,9
	INT	21H				;Print first part of message
	POP	AX				;Get mode set
	SAL	AX,1				;*2 for table lookup
	MOV	SI,AX				;Put into DX for printing
	MOV	DX,CS:[SI+OFFSET MODE]
	MOV	AH,9
	INT	21H				;PRINT and return
	RET
BAD:
	MOV	AX,CS				;Set up segment register
	MOV	DS,AX				;and address text
	MOV	DX,OFFSET ERM
	MOV	AH,9H				;PRINT STRING
	INT	21H
	RET					;END
MODE	LABEL	WORD				;TABLE FOR PRINTING CURRECT SET
	DW	OFFSET	MODE0
	DW	OFFSET	MODE1
	DW	OFFSET	MODE2
	DW	OFFSET	MODE3
	DW	OFFSET	MODE4
	DW	OFFSET	MODE5
	DW	OFFSET	MODE6
MODE_TXT DB	'Graphics card initialized as $'
MODE0	DB	'40x80 BW (power on default).',13,10,36
MODE1	DB	'40x25 Color.',13,10,36
MODE2	DB	'80x25 BW.',13,10,36
MODE3	DB	'80x25 Color.',13,10,36
MODE4	DB	'320x200 Color.',13,10,36
MODE5	DB	'320x200 BW.',13,10,36
MODE6	DB	'640x200 BW.',13,10,36
ERM	DB	7,'Invalid format.',10,13
	DB	'Correct format is: SCREEN n',10,13
	DB	'...where "n" is 0 - 6...  0 = 40x25 BW',10,13
	DB	'                          1 = 40x25 Color',10,13
	DB	'                          2 = 80x25 BW',10,13
	DB	'                          3 = 80x25 Color',13,13,10
	DB	'                          -GRAPHICS MODES-',10,13
	DB	'                          4 = 320x200 Color',10,13
	DB	'                          5 = 320x200 BW',10,13
	DB	'                          6 = 640x200 BW',10,13,'$'
COLOR	ENDP
CODE	ENDS
	END	COLOR

