;
;                7 DEC 82
;
;THIS TESTS A DUAL PROCESSOR BY SWAPPING REPEATEDLY FROM 85
;TO 88 AND BACK AGAIN.  THIS TEST IS IN 85 CODE;
;THE 86 PORTION OF THE TEST IS ENTERED USING THE ASSEMBLER
;DIRECTIVE "DB" OR "DEFINE BIT".
;THIS VERSION OF THE TEST INCLUDES AN OUTPUT OF FFH TO MEM ADRS
;F000 TO INFORM THE MAIN TEST PROGRAM THAT AN ERROR HAS OCCURRED.
;THEREFORE, THIS VERSION ("SWAP85") SHOULD NOT BE USED FOR LAB
;TESTING THAT DOES NOT USE A MAIN SUBMIT PROGRAM;  INSTEAD, THE 
;"SWAP5" TEST SHOULD BE USED IN THE LAB.       
;
;
BDOS 	EQU 	0005H	;SYSTEM UTILITY
PSTRING EQU	09
REBOOT	EQU	0000H	;SYSTEM REBOOT
CR 	EQU	0DH	;CARRIAGE RETURN
LF 	EQU 	0AH	;LINE FEED
CONOUT	EQU	2
SWPORT	EQU	00FDH	;SWAP PORT
;
	ORG	100H
	LXI	D,STRTMSG	;LOAD START MESSAGE
	CALL	PRINT		;PRINT IT
SWAPSLEFT:	DB	0	;RESERVE MEM FOR SWAPCOUNTER VAR
;
;FOLLOWING LOADS 88 JUMP TO 400H AT FFF0H
;
	MVI	A,0EAH		;88 JUMP INSTRUCTION
	STA	0FFF0H		;STORE JUMP FOR 8088
	MVI	A,00H		;BEGINNING OF 8088 JMP ADRS
	STA	0FFF1H
	MVI	A,04H
	STA 	0FFF2H
	MVI	A,00H
	STA	0FFF3H
	MVI	A,00H
	STA	0FFF4H		;END OF 88 JMP ADRS
;
	MVI	A,0FFH		;LOADS ACC TO
	STA	SWAPSLEFT	;INITIALIZE SWAPSLEFT COUNTER
;
	STA	600H		;INIT 88CTR
;
;FOLLOWING PRINTS 85-ON-LINE MSG AND DECREMENTS SWAP COUNTER
;
FIVE:	LDA	SWAPSLEFT	;LOADS SWAPSLEFT TO
	DCR	A		;DECREMENT IT
	JZ	OKMSG		;OK IF 255 OK SWAPS
	STA	SWAPSLEFT	;RESTORES SWAPS COUNTER
	IN 	SWPORT		;SWAP PROCESSORS
	LDA 	600H		;LOAD ACC FROM 88 CTR
	MOV	B,A		;MOVE IT TO B
	LDA 	SWAPSLEFT	;LOAD ACC WITH SWAPSLEFT CTR
	CMP	B		;COMPARE SWAPSLEFT WITH 88 CTR
	JNZ	ERRMSG		;ERROR IF NOT EQUAL 
	JMP 	FIVE		;JUMP TO 8085 ROUTINE
;
OKMSG:	CALL	CRLF
	CALL	CRLF
	LXI	D,OKTXT		;OKMSG TEXT
	CALL	PRINT		;PRINT IT
	JMP	REBOOT		;RETURN TO CPM
;
ERRMSG:	MVI 	A,0FFH		;FOR INPUT TO MAIN TEST PROGRAM
	STA	0F000H		;MAIN TEST FAILURE CHECK BYTE
	CALL 	CRLF
	CALL 	CRLF
	LXI	D,ERRTXT	;LOAD ERROR MESSAGE
	CALL 	PRINT		;PRINT IT
	JMP	REBOOT		;RETURN TO CPM
;
;	8088 CODE BEGINS HERE
;
	ORG	400H	;BEGINNING OF 8088 CODE:
	DB	0BBH	;LOAD B REG WITH
	DB	000H	;00
	DB	000H	;00.
	DB	08EH	;LOAD DS REG FROM
	DB	0DBH	;BX REG.
	DB	0FEH	;DEC MEMORY FROM
	DB	00EH	;BYTE ADRS
	DB	000H	;0600H.
	DB	006H	;
	DB	0E4h	;IN FROM
	DB	0FDh	;PORT FD.
	DB	0EAh	;JUMP BACK TO
	DB	005h	;400 HEX
	DB	004h
	DB	000h
	DB	000h
;
;*******************************************
;*
;*     STRING DATA FOR CONSOLE MSGS
;*
;*******************************************
;
STRTMSG:	DB	'HERE BEGINS THE 85/88 SWAP TEST$'
OKTXT:		DB	'THIS 85/88 SWAPS OK$'
ERRTXT:		DB	'THIS 85/88 FAILS THE SWAP TEST$'
;
;********************************************************************
;*
;*    CONSOLE I/O SUBROUTINES
;*
;********************************************************************
;
PRINT:
 	PUSH 	D
	CALL	CRLF
	POP	D
	MVI 	C,PSTRING
	CALL	BDOS
	RET
;
CRLF:
 	MVI	A,CR
       	CALL    PUTCHR
 	MVI	A,LF
	CALL	PUTCHR
	RET
;
PUTCHR:
	MVI	C,CONOUT
	MOV	E,A	
	CALL	BDOS
	RET
;
        END