// include the definition of the Special Purpose Registers
#include "spr.h"

SPACE 0 PROPERTIES X INDEX 0;

// test of OPLxxxx
 movi.8 r30,3; // A
 movi.8 r31,5; // B

 AND  r32,r30,r31;
 OR   r33,r30,r31;
 XOR  r34,r30,r31;
 NAND r32,r30,r31;
 NOR  r33,r30,r31;
 NXOR r34,r30,r31;

 OPL0000.8 r32,r30,r31;
 OPL0001.8 r33,r30,r31;
 OPL0010.8 r34,r30,r31;
 OPL0011.8 r35,r30,r31;
 OPL0100.8 r36,r30,r31;
 OPL0101.8 r37,r30,r31;
 OPL0110.8 r38,r30,r31;
 OPL0111.8 r39,r30,r31;
 OPL1000.8 r40,r30,r31;
 OPL1001.8 r41,r30,r31;
 OPL1010.8 r42,r30,r31;
 OPL1011.8 r43,r30,r31;
 OPL1100.8 r44,r30,r31;
 OPL1101.8 r45,r30,r31;
 OPL1110.8 r46,r30,r31;
 OPL1111.8 r47,r30,r31;

// test of the RDSPR instruction, should
// return the size of this space
 rdspr.16 r0,PFQ0_LIMIT;

// modify Q1's limit
 movi.16 r0,end_label;
 wrspr.16 r0,PFQ1_LIMIT;

// test of CLR:
 movi.64 r0,-1;
 clr.64 r0;

// setup a pointer:
 movi.64 r0,label;
// set the memory type:
 movp r0[3],256; // type = 1<<8
// make Q1 point to label
 move.64 i1,r0;
// increment the byte at Q1:
 move.64 r1,d1;


// stuff to see if it works
 movi.64 r63,-1;
 movi.8  r62,-1;
 addi.64 r8, -1;
 movi.32 r1,256; 
 movp r2[1],-1;

// some forward labels :
label2:
 movi.16 r3,label1;
label1:
 addi.64 r3,label3; 
 addi.8 r0,label2;
label3:
 movp r5[2],1;

// trigger an error: movi.16 i0,0;

// test:
 nop;
 serialize;
 endstream;


SPACE 1 PROPERTIES RW; // for the data
 dword 25, 1, a, b;
label:
 dword 3;
 dword label;
 dword 1;
end_label:

a equ 5;
b equ end_label;
