/* Conformance Test 25.0.25:  Verification of code generation for upper and */
/*                            lower limits of all addressing modes          */

#define    DP      0x02                    /* define 1, 2, & 3 byte addresses */
#define    ABS     0x800
#define    LONG    0x123456

#include   <stdio.h>

int main (void)
  {
   int i = 0;

   asm
     {
               brl     Test
       Code:   ADC     0x0
               ADC     0xFF
               LDA     0x0,X
               LDA     0xFF,X
               LDX     0x0,Y
               LDX     0xFF,Y
               ROR     |0x0000
               ROR     0xFFFF
               ROL     |0x0000,X
               ROL     0xFFFF,X
               STA     |0x0000,Y
               STA     0xFFFF,Y
               JMP     (|0x0000)
               JMP     (0xFFFF)
               ORA     (0x0),Y
               ORA     (0xFF),Y
               CMP     (0x0,X)
               CMP     (0xFF,X)
               BEQ     LBL4
       LBL4:   BEQ     LBL4
               AND     (0x0)
               AND     (0xFF)
               JMP     (|0x0000,X)
               JMP     (0xFFFF,X)
               SBC     0x0,S
               SBC     0xFF,S
               ADC     (0x0,S),Y
               ADC     (0xFF,S),Y
               AND     >0x000000
               AND     0xFFFFFF
               CMP     >0x000000,X
               CMP     0xFFFFFF,X
               EOR     [0x0]
               EOR     [0xFF]
               LDA     [0x0],Y
               LDA     [0xFF],Y
               JMP     [|0x0]
               JMP     [0xFFFF]
               BRL     LBL5
       LBL5:   BRL     LBL5
       Data:   dcb     0x65
               dcb     0x00
               dcb     0x65
               dcb     0xFF
               dcb     0xB5
               dcb     0x00
               dcb     0xB5
               dcb     0xFF
               dcb     0xB6
               dcb     0x00
               dcb     0xB6
               dcb     0xFF
               dcb     0x6E
               dcb     0x00
               dcb     0x00
               dcb     0x6E
               dcb     0xFF
               dcb     0xFF
               dcb     0x3E
               dcb     0x00
               dcb     0x00
               dcb     0x3E
               dcb     0xFF
               dcb     0xFF
               dcb     0x99
               dcb     0x00
               dcb     0x00
               dcb     0x99
               dcb     0xFF
               dcb     0xFF
               dcb     0x6C
               dcb     0x00
               dcb     0x00
               dcb     0x6C
               dcb     0xFF
               dcb     0xFF
               dcb     0x11
               dcb     0x00
               dcb     0x11
               dcb     0xFF
               dcb     0xC1
               dcb     0x00
               dcb     0xC1
               dcb     0xFF
               dcb     0xF0
               dcb     0x00
               dcb     0xF0
               dcb     0xFE
               dcb     0x32
               dcb     0x00
               dcb     0x32
               dcb     0xFF
               dcb     0x7C
               dcb     0x00
               dcb     0x00
               dcb     0x7C
               dcb     0xFF
               dcb     0xFF
               dcb     0xE3
               dcb     0x00
               dcb     0xE3
               dcb     0xFF
               dcb     0x73
               dcb     0x00
               dcb     0x73
               dcb     0xFF
               dcb     0x2F
               dcb     0x00
               dcb     0x00
               dcb     0x00
               dcb     0x2F
               dcb     0xFF
               dcb     0xFF
               dcb     0xFF
               dcb     0xDF
               dcb     0x00
               dcb     0x00
               dcb     0x00
               dcb     0xDF
               dcb     0xFF
               dcb     0xFF
               dcb     0xFF
               dcb     0x47
               dcb     0x00
               dcb     0x47
               dcb     0xFF
               dcb     0xB7
               dcb     0x00
               dcb     0xB7
               dcb     0xFF
               dcb     0xDC
               dcb     0x00
               dcb     0x00
               dcb     0xDC
               dcb     0xFF
               dcb     0xFF
               dcb     0x82
               dcb     0x00
               dcb     0x00
               dcb     0x82
               dcb     0xFD
               dcb     0xFF
       Test:   ldx     #100
       Lbl1:   lda     Code,X
               cmp     Data,X
               bne     Err1
               dex
               dex
               bpl     Lbl1
               bra     Out
       Err1:   inc     i
       Out:    nop
     }

   if (i)
       goto Fail;
   printf ("Passed Conformance Test 25.0.25\n");
   return 0;

Fail:
   printf ("Failed Conformance Test 25.0.25\n");
  }
