Blame as10k1/examples/emu_constants.asm

Packit 427e91
;some hardware constants C_[n]<DecimalValue>, 'n' indicates negative value
Packit 427e91
;		
Packit 427e91
;these are in 2's complement representation
Packit 427e91
 
Packit 427e91
C_0	equ $040	;;00000000
Packit 427e91
C_1	equ $041	;;00000001
Packit 427e91
C_2	equ $042	;;00000002
Packit 427e91
C_3	equ $043	;;00000003
Packit 427e91
C_4	equ $044	;;00000004	
Packit 427e91
C_8	equ $045	;;00000008
Packit 427e91
C_16	equ $046	;;00000010
Packit 427e91
C_32	equ $047	;;00000020
Packit 427e91
C_256	equ $048	;;00000100
Packit 427e91
C_65536 equ $049	;;00010000
Packit 427e91
C_2^23 	equ $04A	;;00080000
Packit 427e91
C_2^28	equ $04b	;;10000000
Packit 427e91
C_2^29	equ $04c	;;20000000 (C_max /4) +1
Packit 427e91
C_2^30	equ $04d	;;40000000 ( C_max / 2 ) + 1 (almost half)	
Packit 427e91
C_nmax	equ $04e	;;80000000 most negative number
Packit 427e91
C_max	equ $04f	;;7fffffff most positive number	
Packit 427e91
C_n1	equ $050	;;ffffffff -1
Packit 427e91
C_n2	equ $051	;;fffffffe -2
Packit 427e91
C_n2^30	equ $052	;;c0000000 C_nmax /2
Packit 427e91
Packit 427e91
C_LSshift equ $55	;;to left shift an address by using macsints
Packit 427e91
			;;for fractional addresses
Packit 427e91
Packit 427e91
Packit 427e91
ZERO equ C_0;
Packit 427e91
ONE equ	C_1;
Packit 427e91
	
Packit 427e91
;;; Hardware Registers:	
Packit 427e91
		
Packit 427e91
ACCUM	equ $56
Packit 427e91
CCR	equ $57	
Packit 427e91
NOISE1	equ $58
Packit 427e91
NOISE2	equ $59	
Packit 427e91
IRQ	equ $5A	
Packit 427e91
DBAC	equ $5B	
Packit 427e91
	
Packit 427e91
and	macro	dest,srcA,srcB
Packit 427e91
	andxor	dest,srcA,srcB,C_0
Packit 427e91
	endm
Packit 427e91
	
Packit 427e91
xor	macro   dest,srcA,srcB
Packit 427e91
	andxor	dest,C_n1,srcA,srcB
Packit 427e91
	endm
Packit 427e91
	
Packit 427e91
not	macro	 dest,src
Packit 427e91
	andxor   dest,src,C_n1,C_n1		
Packit 427e91
	endm
Packit 427e91
Packit 427e91
nand	macro	dest,srcA,srcB	
Packit 427e91
	andxor	dest,srcA,srcB,C_n1
Packit 427e91
	endm
Packit 427e91
	
Packit 427e91
or	macro	 dest,srcA,srcB
Packit 427e91
	not	 C_0,srcA
Packit 427e91
	andxor	 dest,ACCUM,srcA,srcB	
Packit 427e91
	endm	
Packit 427e91
Packit 427e91
nor	macro	dest,srcA,scrB
Packit 427e91
	not	dest,srcA
Packit 427e91
	andxor	dest,srcB,dest,srcA	
Packit 427e91
	not	dest,dest
Packit 427e91
	endm
Packit 427e91
Packit 427e91
Packit 427e91
neg     macro   dest,src
Packit 427e91
	macs1   dest,C_0,C_1,C_nmax 	
Packit 427e91
	endm	
Packit 427e91
	
Packit 427e91
;;; branch on:
Packit 427e91
;;; ==0
Packit 427e91
beq	macro   count
Packit 427e91
	skip	CCR,CCR,C_8,count	
Packit 427e91
	endm
Packit 427e91
;;; !=0
Packit 427e91
bne	macro	count
Packit 427e91
	skip	CCR,CCR,C_256,count
Packit 427e91
	endm
Packit 427e91
;;; <0
Packit 427e91
blt	macro	count
Packit 427e91
	skip	CCR,CCR,C_4,count
Packit 427e91
	endm
Packit 427e91
;;; always branch
Packit 427e91
bra	macro	count
Packit 427e91
	skip	C_0,C_max,C_max,count
Packit 427e91
	endm
Packit 427e91
;;; on saturation
Packit 427e91
bsa     macro count
Packit 427e91
	skip CCR,CCR,C_16,count
Packit 427e91
	endm
Packit 427e91
bge	macro  count
Packit 427e91
C___80	con $80
Packit 427e91
	skip CCR,CCR,C___80,count	
Packit 427e91
	endm
Packit 427e91
		
Packit 427e91
bgt	macro	count
Packit 427e91
C___180	con $180
Packit 427e91
	skip CCR,CCR,C___180,count
Packit 427e91
	endm
Packit 427e91
	
Packit 427e91
move	macro dest,src
Packit 427e91
	macs  dest,src,C_0,C_0
Packit 427e91
	endm	 	
Packit 427e91
	
Packit 427e91
	end
Packit 427e91
Packit 427e91
;;; usefull for testing values before a skip
Packit 427e91
test	macro test
Packit 427e91
	macs C_0,test,C_0,C_0
Packit 427e91
	endm
Packit 427e91
Packit 427e91
cmp	macro src1.scr2
Packit 427e91
	macints C_0,src1,C_n1,src2
Packit 427e91
	endm