; Doug's Programming Language  -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;--------------------------------
; _DPLINIT  -  INITIALIZATION ROUTINE FOR MAIN DPL PROGRAMS
;
; Entry conditions:
;	NONE
; Exit conditions:
;	NONE
;
SUBPGM	_DPLINIT
;
@@@DPLCOD	EQU	0FFH	; THIS EQUATE INDICATES THAT THIS ROUTINE
;				; IS PART OF THE DPL NUCLEOUS
@@@DPLDAT	EQU	0FFH	; THIS EQUATE INDICATES THAT THIS ROUTINE
;				; CONTAINS THE EXTERNAL DATA FOR OTHER MODULES
;
	PUBLIC	STATUS,  ZERO,   @CR_LF, @@@DPLREC
	PUBLIC	NULL,    EJECT,  BEEP
	PUBLIC	CRTFLAG, VIDPAGE,@DPLVER
;
; DPL SUPPLIED VARIABLES & CONSTANTS
;
VERSION		EQU	0220H
;
@DPLVER DW	VERSION
CRTFLAG	DW	00
VIDPAGE DW	00
;
STATUS	DW	00
;
@CR_LF	DB	13,10		; ASCII CR,LF - ^M,^J
;
ZERO	LABEL	BYTE
NULL	DB	00,00
;
EJECT	DB	0CH,00		; ASCII FORM FEED - ^L
;
BEEP	DB	07,00		; ASCII BELL - ^G
;
REC	@@@DPLREC,132
;
BEGIN	_DPLINIT
	PUSH	ES		; DO NOT DISTURB THE PSP SEGMENT
;
; TRIM OFF THE EXTRA MEMORY AT THE TOP OF THE PROGRAM...
;
	MOV	BX,SEG ZSEG	; GET LAST SEGMENT PARAGRAPH
	MOV	AX,ES		; GET THE PSP SEGMENT
	SUB	BX,AX
	INC	BX		; MOVE TO THE NEXT PARAGRAPH
	MOV	AH,4AH
	INT	21H
	JNC	INIT_05		; CONTINUE IF NO ERROR...
	MOV	[STATUS],AX	; SAVE THE ERROR
;
INIT_05:
;
; FETCH THE CURRENT VIDEO MODE FROM THE BIOS
;
	MOV	AH,0FH
	INT	10H			; GET THE CURRENT VIDEO MODE
	MOV	BYTE PTR [VIDPAGE],BH	; SAVE THE PAGE NUMBER
;
; FETCH THE VIDEO TYPE FROM THE SYSTEM SWITCHES
;
	MOV	AX,0040H		; GET THE BIOS SEGMENT (AH = 00)
	MOV	ES,AX
	MOV	AL,ES:[87H]		; CHECK THE BIOS FOR EGA FIRST
	OR	AL,AL			; IS AN EGA INSTALLED?
	JNZ	INIT_15			; YES, SO GO SET THE FLAG
;
; CHECK FOR MONOCHROME OR CGA CARDS
;
INIT_07:
	MOV	AL,ES:[10H]		; GET THE VIDEO STATUS BYTE
	AND	AL,00110000B		; ISOLATE THE VIDEO SWITCHES
	CMP	AL,110000B		; IS IT A MONO CARD?
	JZ	INIT_10			; YES...
;
; MAKE AH = 1, WHICH INDICATES A CGA CARD IS INSTALLED
;
INIT_09:
	INC	AH			; NO, SETUP FOR A CGA
;
; SAVE THE NEW FLAG & RETURN FROM INITIALIZATION
;
INIT_10:
	MOV	BYTE PTR [CRTFLAG],AH	; SAVE THE VIDEO FLAG
	POP	ES
	RETURN
;
; AN EGA CARD IS INSTALLED, FIND OUT IF IT EMULATES A MONO OR CGA CARD
;
INIT_15:
	TEST	AL,08H			; IS THE EGA INACTIVE?
	JNZ	INIT_07			; YES, GO CHECK FOR CGA, MONO
	MOV	AH,02H			; SETUP THE EGA VALUE
	TEST	AL,01H			; IS A MONO CARD INSTALLED?
	JZ	INIT_09			; NO, GO SETUP FOR CGA
	JMP	SHORT INIT_10		; YES, SAVE THE FLAG & EXIT

ENDPGM	_DPLINIT
;
