; This test checks the effect of SET15 on multiplications.
incdir  "tests"
include "dsp_base.inc"

; Results are in capitals like this: UNSIGNED

test_main:
CLR15

; Test MULXMVZ - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULXMVZ	$AX0.L, $AX1.H, $ACC0     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULXMVZ	$AX0.L, $AX1.H, $ACC0     ; UNSIGNED
MOVP    $ACC0
call send_back
CLR15

; Test MULXMV - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULXMV	$AX0.L, $AX1.H, $ACC0     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULXMV	$AX0.L, $AX1.H, $ACC0     ; UNSIGNED
MOVP    $ACC0
call send_back
CLR15

; Test MULXAC - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULXAC	$AX0.L, $AX1.H, $ACC0     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULXAC	$AX0.L, $AX1.H, $ACC0     ; UNSIGNED
MOVP    $ACC0
call send_back
CLR15

; Test MULX - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULX	$AX0.L, $AX1.H     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX1.H, #0x100
MULX	$AX0.L, $AX1.H     ; UNSIGNED
MOVP    $ACC0
call send_back
CLR15


; Test MADDX - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX1.L, #0x100
MADDX	$AX0.L, $AX1.L     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX1.L, #0x100
MADDX	$AX0.L, $AX1.L     ; SIGNED (!)
MOVP    $ACC0
call send_back
CLR15


; Test MULC - SET15
CLR     $ACC0
CLRP
LRI     $AC0.M, #0xFFFF
LRI		$AX0.H, #0x100
MULC	$AC0.M, $AX0.H     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AC0.M, #0xFFFF
LRI		$AX0.H, #0x100
MULC	$AC0.M, $AX0.H     ; SIGNED (!)
MOVP    $ACC0
call send_back
CLR15


; Test MULCAC - SET15
CLR     $ACC0
CLRP
LRI     $AC0.M, #0xFFFF
LRI		$AX0.H, #0x100
MULCAC	$AC0.M, $AX0.H, $ACC0     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
CLRP
SET15	
LRI     $AC0.M, #0xFFFF
LRI		$AX0.H, #0x100
MULCAC	$AC0.M, $AX0.H, $ACC0     ; SIGNED (!)
MOVP    $ACC0
call send_back
CLR15


; Test MUL - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX0.H, #0x100
MUL		$AX0.L, $AX0.H	; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX0.H, #0x100
MUL		$AX0.L, $AX0.H	; SIGNED (!)
MOVP    $ACC0
call send_back
CLR15


; Test MULAC - SET15
CLR     $ACC0
CLRP
LRI     $AX0.L, #0xFFFF
LRI		$AX0.H, #0x100
MULAC	$AX0.L, $AX0.H, $ACC0     ; SIGNED
MOVP    $ACC0
call send_back

CLR     $ACC0
SET15	
LRI     $AX0.L, #0xFFFF
LRI		$AX0.H, #0x100
MULAC	$AX0.L, $AX0.H, $ACC0     ; SIGNED (!)
MOVP    $ACC0
call send_back
CLR15





; We're done, DO NOT DELETE THIS LINE
jmp end_of_test

; test accelerator

; TODO: DSPSpy puts a 16-bit ramp at 0x10000000
LRIS $AC1.M, #0x0a    ; 16-bit PCM audio
;SRS	@SampleFormat, $AC1.M
; Start accelerator position
LRI $AC1.M, #0x0100
SRS @ACCAH, $AC1.M
LRI $AC1.M, #0x1000
SRS @ACCAH, $AC1.M
; Current accelerator position
LRI $AC1.M, #0x0100
SRS @ACCAH, $AC1.M
LRI $AC1.M, #0x1000
SRS @ACCAH, $AC1.M
; End accelerator position
LRI $AC1.M, #0x0100
SRS @ACCAH, $AC1.M
LRI $AC1.M, #0x2000
SRS @ACCAH, $AC1.M

; Now to the interesting parameter - gain.
LRI $AC1.M, #0xFFFF
SRS @GAIN, $AC1.M

; Let's now load a sample through the accelerator.
LRS $AC1.M, @ARAM
call send_back

jmp end_of_test

; test addpaxz
call send_back

clrp
lri $AX0.L, #0x1111
lri $AX0.H, #0x2222
call send_back

clrp
addpaxz $ACC0, $AX0.H

call send_back

clrp
set40
addpaxz $ACC0, $AX0.H
set16

call send_back

clrp
set15
addpaxz $ACC0, $AX0.H
clr15

call send_back


jmp end_of_test

