mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-11-15 07:06:05 +00:00
91d33b586d
The main changes made to most tests are: *Declarations always include explicit types, not relying on implicit int. The declaration of main in most test programs is changed to be "int main (void) {...}", adding an explicit return type and a prototype. (There are still some non-prototyped functions, though.) *Functions are always declared before use, either by including a header or by providing a declaration for the specific function. The latter approach is usually used for printf, to avoid requiring ORCA/C to process stdio.h when compiling every test case (which might make test runs noticeably slower). *Make all return statements in non-void functions (e.g. main) return a value. *Avoid some instances of undefined behavior and type errors in printf and scanf calls. Several miscellaneous bugs are also fixed. There are still a couple test cases that intentionally rely on the C89 behavior, to ensure it still works.
179 lines
4.8 KiB
C++
179 lines
4.8 KiB
C++
/* 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");
|
|
}
|