
	.LIST
	.ASECT
	.=001000
	;-------------------------------------------------------------------------------
START:
	;jmp TstLp	;Loop Test
	jmp TstSfl 	;Flags Test
	;jmp TstZNZ		;= !=
	;jmp TstGLT		;> < >= <= Signed and Unsigned
	;jmp TstOvf		;Overflow
	;jmp TstSgn		;Sign test
	;jmp TstCar		;Carry
	;jmp TstBit		;Bit Test


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
TstLp:			;Loop Test
	mov #3,r1	;Loop Counter
	mov #0,r0	;Test Value
CountDown:
	call MonR01
	add #2,r0
	sob	r1,CountDown ;(Subtract One and Branch)
	jmp infloop			;Loop until zero
	
	;-------------------------------------------------------------------------------	

	
TstSfl:
;ALL
	SCC			;Set all ConditionCodes
	call MonFlg
	CCC			;Clear all ConditionCodes
	call MonFlg
	call NewLine
;Negative
	SEN			;Set Negative Flag
	call MonFlg
	CLN			;Clear Negative Flag
	call MonFlg
	call NewLine			
;Zero
	SEZ			;Set Zero Flag
	call MonFlg
	CLZ			;Clear Zero Flag
	call MonFlg
	call NewLine
;Overflow
	SEV			;Set oVerflow Flag
	call MonFlg
	CLV			;Clear oVerflow Flag
	call MonFlg	
	call NewLine		
;Carry
	SEC			;Set Carry Flag
	call MonFlg
	CLC			;Clear Carry Flag
	call MonFlg
	call NewLine	
	
	call NewLine	
	
	clr r0			;Clear R0
	
	SCC				;Set all ConditionCodes
	call MonFR0		;Show Status
	
	mfps r0			;Backup Flags to R0
	
		CCC				;Clear all ConditionCodes
		call MonFR0		;Show Status
	
	mtps r0			;Restore R0 to Flags
	
	call MonFR0		;Show Status
	
	JMP infloop
	
MonFR0:
	call MonFlg
	mfps r5
	mov r5,-(sp)
	mov r0,-(sp)
		call MonR0
		call NewLine
	mov (sp)+,r0
	mov (sp)+,r5
	mtps r5
	return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
		
	
TstZNZ:
	mov #0,r1		;Z flag set with move
	mov #100,r1		;Z flag cleared with move
	
	;mov #100,r2	;R1=R2
	;mov #70,r2		;R1!=R2
	
	;cmp r1,r2 		;Compare R1 to R2
	
	;sub #100,r1		;Zero
	;sub #70,r1		;NotZero
	tst r1			;Set flags according to R1
	
	beq Equal		;Zero flag set R1=R2
	bne NotEqual	;Zero flag not set R1!=R2
	
	br NoJump ;BRanch (Always - less memory than JMP)
	
NotEqual:
	mov #'!,r0
	call PrintChar
Equal:
	mov #'=,r0
	call PrintChar
	JMP infloop

	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
		
	
TstGLT:
	mov #100,r1
	;mov #-200,r2	;R1>R2 (17760 oct = 65408 dec unsigned)
	mov #50,r2		;R1>R2 unsigned
 	;mov #200,r2	;R1<R2
	;mov #100,r2	;R1=R2
	
	cmp r1,r2 		;Compare R1 to R2
	;cmpb r1,r2 	;Compare R1 to R2 (Byte)
	call MonFlg
	
	;blt Less		;is R1<R2 (Signed) N xor V = 1
	;bgt Greater	;is R1>R2 (Signed) N xor V = 0
	;ble Less		;is R1<=R2 (Signed) Z=1 or (N xor V)=1
	;bge Greater	;is R1>=R2 (Signed) Z=1 or (N xor V)=0
	
	blo Less		;is R1<R2 (UnSigned) C=1
	bhi greater		;is R1>R2 (UnSigned) ;C=0 or Z=0
	blos Less		;is R1<=R2 (UnSigned) ;C=1 or Z=1
	bhis greater	;is R1>=R2 (UnSigned) ;C=0
	
	br NoJump
Less:
	mov #'<,r0
	call PrintChar
	JMP infloop
Greater:
	mov #'>,r0
	call PrintChar
	JMP infloop

NoJump:
	mov #'.,r0
	call PrintChar
	JMP infloop
	
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;		
		
TstOvf:				;Overflow
	mov #^d32760,r1 ;32760 in decimal (+32767 is limit of signed number)
	
	add #100,r1	;Overflow (sign changed)
	;add #4,r1		;No Overflow (Sign intact)
	
	bvs Overflow	
	bvc NotOverflow	
	
	br NoJump	
	
NotOverflow:
	mov #'N,r0
	call PrintChar
Overflow:
	mov #'O,r0
	call PrintChar
	JMP infloop	



	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
		
	
TstSgn:				;Sign test
	mov #32,r1		;Sign Positive
	mov #-32,r1		;Sign Negative
	
	add #100,r1		;Add 100 (Octal)
	;add #4,r1		;Add 4
	
	call MonFlg
	
	bmi Negative	;Minus -Top bit 1
	bpl Positive	;Plus - Top bit 0
	br NoJump	
	
Negative:
	mov #'-,r0
	call PrintChar
	JMP infloop	
Positive:
	mov #'+,r0
	call PrintChar
	JMP infloop	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
		
	
	
TstCar:				;Sign test
	;mov #32,r1
	mov #^d65500,r1
	
	add #100,r1		;Carry (limit of word exceeded)
	;add #10,r1		;No Carry
	
	bcs Carry		;Carry Set
	bcc NoCarry		;No Carry
	
	br NoJump	
	
NoCarry:
	mov #'-,r0
	call PrintChar
	JMP infloop	
Carry:
	mov #'C,r0
	call PrintChar
	JMP infloop	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
		
	
TstBit:	
	mov #173,r1
	BIT #3,r1		;NZ	-Bit test (AND that only sets flags)
	;BIT #4,r1		;Z	-Bit test (AND that only sets flags)
	
	beq Zero		;Z flag set
	bne NotZero		;Z flag clear
	
	br NoJump
NotZero:
	mov #'N,r0
	call PrintChar
Zero:
	mov #'Z,r0
	call PrintChar
	JMP infloop
	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
		

	
		
	
;-------------------------------------------------------------------------------
MonFlg:
	mfps r5
	mov r0,-(sp)	
		mtps r5
		mov #'N,r0
		bitb #^b00001000,r5
		bne FlagN
		mov #'-,r0
FlagN:
		call PrintChar
		mov #'Z,r0
		bitb #^b00000100,r5
		bne FlagZ
		mov #'-,r0
FlagZ:
		call PrintChar
		mov #'V,r0
		bitb #^b00000010,r5
		bne FlagV
		mov #'-,r0
FlagV:
		call PrintChar
		
		mov #'C,r0
		bitb #^b00000001,r5
		bne FlagC
		mov #'-,r0
FlagC:
		call PrintChar
		mov #' ,r0
		call PrintChar
	mov (sp)+,r0
	mtps r5
	return


infloop:
	JMP infloop

MonR0:
	mov r0,-(sp)
	mov r2,-(sp)
	mov r1,-(sp)	
		mov #'0,r1
		mov r0,r2
		jsr PC,MONREG		
	mov (sp)+,r1
	mov (sp)+,r2
	mov (sp)+,r0
	RTS PC

MonR01:
	mov r0,-(sp)
	mov r2,-(sp)
	mov r1,-(sp)	
		mov r1,-(sp)
			mov #'0,r1
			mov r0,r2
			jsr PC,MONREG		
		mov (sp)+,r1
		mov r1,r2
		mov #'1,r1
		jsr PC,MONREG
		call NewLine
	mov (sp)+,r1
	mov (sp)+,r2
	mov (sp)+,r0
	RTS PC

	.INCLUDE /Funct.mac/
	.INCLUDE /Monito.mac/
	

	.EVEN			
;Space for Stack - Stack starts at end of program
	.BLKB 128.	

	.END    START
