Search
lxdream.org :: lxdream/test/testregs.c
lxdream 0.9.1
released Jun 29
Download Now
filename test/testregs.c
changeset 196:3d3c761afbf4
prev190:f7653df5e832
next332:4c1b31e646ef
author nkeynes
date Sun Aug 06 06:13:51 2006 +0000 (17 years ago)
permissions -rw-r--r--
last change First pass at implementing the tile clip. Reasonably accurate wrt basic
understanding of how its supposed to work, not so accurate wrt actual
hardware behaviour
file annotate diff log raw
nkeynes@190
     1
/**
nkeynes@196
     2
 * $Id: testregs.c,v 1.2 2006-08-06 02:46:09 nkeynes Exp $
nkeynes@190
     3
 * 
nkeynes@190
     4
 * Register mask tests. These are simple "write value to register and check
nkeynes@190
     5
 * that we read back what we expect" tests.
nkeynes@190
     6
 *
nkeynes@190
     7
 * Copyright (c) 2006 Nathan Keynes.
nkeynes@190
     8
 *
nkeynes@190
     9
 * This program is free software; you can redistribute it and/or modify
nkeynes@190
    10
 * it under the terms of the GNU General Public License as published by
nkeynes@190
    11
 * the Free Software Foundation; either version 2 of the License, or
nkeynes@190
    12
 * (at your option) any later version.
nkeynes@190
    13
 *
nkeynes@190
    14
 * This program is distributed in the hope that it will be useful,
nkeynes@190
    15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nkeynes@190
    16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
nkeynes@190
    17
 * GNU General Public License for more details.
nkeynes@190
    18
 */
nkeynes@190
    19
nkeynes@190
    20
#include "lib.h"
nkeynes@190
    21
#include <stdio.h>
nkeynes@190
    22
nkeynes@190
    23
/**
nkeynes@190
    24
 * Constant to mean "same as previous value". Can't be used otherwise.
nkeynes@190
    25
 */
nkeynes@190
    26
#define UNCHANGED 0xDEADBEEF
nkeynes@190
    27
nkeynes@190
    28
struct test {
nkeynes@190
    29
    unsigned int reg;
nkeynes@190
    30
    unsigned int write;
nkeynes@190
    31
    unsigned int expect;
nkeynes@190
    32
};
nkeynes@190
    33
nkeynes@190
    34
nkeynes@190
    35
nkeynes@190
    36
struct test test_cases[] = {
nkeynes@190
    37
    { 0xA05F8000, 0xFFFFFFFF, 0x17FD11DB }, /* PVRID read-only */
nkeynes@190
    38
    { 0xA05F8004, 0xFFFFFFFF, 0x00000011 }, /* PVRVER read-only */
nkeynes@196
    39
    { 0xA05F8008, 0xFFFFFFFF, 0x00000007 }, /* Reset */
nkeynes@196
    40
    { 0xA05F8010, 0xFFFFFFFF, 0 },
nkeynes@190
    41
    //    { 0xA05F8014, 0xFFFFFFFF, 0x00000000 }, /* Render start */
nkeynes@190
    42
    { 0xA05F8018, 0xFFFFFFFF, 0x000007FF }, /* ??? */   
nkeynes@190
    43
    { 0xA05F801C, 0xFFFFFFFF, 0x00000000 }, /* ??? */   
nkeynes@190
    44
    { 0xA05F8020, 0xFFFFFFFF, 0x00F00000 }, /* Render poly buffer address ??? */
nkeynes@190
    45
    { 0xA05F8024, 0xFFFFFFFF, 0x00000000 }, /* ??? */
nkeynes@190
    46
    { 0xA05F8028, 0xFFFFFFFF, 0x00000000 }, /* ??? */   
nkeynes@190
    47
    { 0xA05F802C, 0xFFFFFFFF, 0x00FFFFFC }, /* Render Tile buffer address */
nkeynes@190
    48
    { 0xA05F8030, 0xFFFFFFFF, 0x00010101 }, /* Render TSP cache? */   
nkeynes@196
    49
    { 0xA05F8034, 0xFFFFFFFF, 0 },
nkeynes@196
    50
    { 0xA05F8038, 0xFFFFFFFF, 0 },
nkeynes@196
    51
    { 0xA05F803C, 0xFFFFFFFF, 0 },
nkeynes@190
    52
    { 0xA05F8040, 0xFFFFFFFF, 0x01FFFFFF }, /* Display border colour */   
nkeynes@190
    53
    { 0xA05F8044, 0xFFFFFFFF, 0x00FFFF7F }, /* Display config */   
nkeynes@190
    54
    { 0xA05F8048, 0xFFFFFFFF, 0x00FFFF0F }, /* Render config */
nkeynes@190
    55
    { 0xA05F804C, 0xFFFFFFFF, 0x000001FF }, /* Render size */
nkeynes@190
    56
    { 0xA05F8050, 0xFFFFFFFF, 0x00FFFFFC }, /* Display address 1 */ 
nkeynes@190
    57
    { 0xA05F8054, 0xFFFFFFFF, 0x00FFFFFC }, /* Display address 2 */
nkeynes@190
    58
    { 0xA05F8058, 0xFFFFFFFF, 0x00000000 }, /* ??? */
nkeynes@190
    59
    { 0xA05F805C, 0xFFFFFFFF, 0x3FFFFFFF }, /* Display size */
nkeynes@190
    60
    { 0xA05F8060, 0xFFFFFFFF, 0x01FFFFFC }, /* Render address 1 */
nkeynes@190
    61
    { 0xA05F8064, 0xFFFFFFFF, 0x01FFFFFC }, /* Render address 2 */
nkeynes@190
    62
    { 0xA05F8068, 0xFFFFFFFF, 0x07FF07FF }, /* Render horizontal clip */
nkeynes@190
    63
    { 0xA05F806C, 0xFFFFFFFF, 0x03FF03FF }, /* Render vertical clip */
nkeynes@196
    64
    { 0xA05F8070, 0xFFFFFFFF, 0 },
nkeynes@190
    65
    { 0xA05F8074, 0xFFFFFFFF, 0x000001FF }, /* Render shadow mode */
nkeynes@196
    66
    { 0xA05F8078, 0xFFFFFFFF, 0x7FFFFFFF }, /* Near z clip */
nkeynes@190
    67
    { 0xA05F807C, 0xFFFFFFFF, 0x003FFFFF }, /* Render object config */
nkeynes@196
    68
    { 0xA05F8080, 0xFFFFFFFF, 0x00000007 }, /* ??? */
nkeynes@190
    69
    { 0xA05F8084, 0xFFFFFFFF, 0x7FFFFFFF }, /* Render tsp clip */
nkeynes@196
    70
    { 0xA05F8088, 0xFFFFFFFF, 0xFFFFFFF0 }, /* Far z clip */
nkeynes@190
    71
    { 0xA05F808C, 0xFFFFFFFF, 0x1FFFFFFF }, /* Render background plane config */
nkeynes@196
    72
    { 0xA05F8090, 0xFFFFFFFF, 0 },
nkeynes@196
    73
    { 0xA05F8094, 0xFFFFFFFF, 0 },
nkeynes@190
    74
    { 0xA05F8098, 0xFFFFFFFF, 0x00FFFFF9 }, /* ISP config? */
nkeynes@196
    75
    { 0xA05F809C, 0xFFFFFFFF, 0 },
nkeynes@196
    76
    { 0xA05F80A0, 0xFFFFFFFF, 0x000000FF }, /* Vram cfg1? */
nkeynes@196
    77
    { 0xA05F80A4, 0xFFFFFFFF, 0x003FFFFF },
nkeynes@196
    78
    { 0xA05F80A8, 0xFFFFFFFF, 0x1FFFFFFF },
nkeynes@196
    79
    { 0xA05F80AC, 0xFFFFFFFF, 0 },
nkeynes@196
    80
    { 0xA05F80B0, 0xFFFFFFFF, 0x00FFFFFF },
nkeynes@196
    81
    { 0xA05F80B4, 0xFFFFFFFF, 0x00FFFFFF },
nkeynes@196
    82
    { 0xA05F80B8, 0xFFFFFFFF, 0x0000FFFF },
nkeynes@196
    83
    { 0xA05F80BC, 0xFFFFFFFF, 0xFFFFFFFF },
nkeynes@196
    84
    { 0xA05F80C0, 0xFFFFFFFF, 0xFFFFFFFF },
nkeynes@190
    85
    { 0xA05F80C4, 0xFFFFFFFF, UNCHANGED },  /* Gun pos */
nkeynes@190
    86
    { 0xA05F80C8, 0xFFFFFFFF, 0x03FF33FF }, /* Horizontal scanline irq */
nkeynes@190
    87
    { 0xA05F80CC, 0xFFFFFFFF, 0x03FF03FF }, /* Vertical scanline irq */
nkeynes@196
    88
    { 0xA05F80D0, 0xFFFFFFFF, 0x000003FF },
nkeynes@196
    89
    { 0xA05F80D4, 0xFFFFFFFF, 0x03FF03FF },
nkeynes@196
    90
    { 0xA05F80D8, 0xFFFFFFFF, 0x03FF03FF },
nkeynes@196
    91
    { 0xA05F80DC, 0xFFFFFFFF, 0x03FF03FF },
nkeynes@196
    92
    { 0xA05F80E0, 0xFFFFFFFF, 0xFFFFFF7F },
nkeynes@196
    93
    { 0xA05F80E4, 0xFFFFFFFF, 0x00031F1F },
nkeynes@196
    94
    { 0xA05F80E8, 0xFFFFFFFF, 0x003F01FF },
nkeynes@196
    95
    { 0xA05F80EC, 0xFFFFFFFF, 0x000003FF },
nkeynes@196
    96
    { 0xA05F80F0, 0xFFFFFFFF, 0x03FF03FF },
nkeynes@196
    97
    { 0xA05F80F4, 0xFFFFFFFF, 0x0007FFFF },
nkeynes@196
    98
    { 0xA05F80F8, 0xFFFFFFFF, 0 },
nkeynes@196
    99
    { 0xA05F80FC, 0xFFFFFFFF, 0 },
nkeynes@196
   100
    { 0xA05F8100, 0xFFFFFFFF, 0 },
nkeynes@196
   101
    { 0xA05F8104, 0xFFFFFFFF, 0 },
nkeynes@196
   102
    { 0xA05F8108, 0xFFFFFFFF, 0x00000003 },
nkeynes@196
   103
    { 0xA05F810C, 0xFFFFFFFF, UNCHANGED },
nkeynes@196
   104
    { 0xA05F8110, 0xFFFFFFFF, 0x000FFF3F },
nkeynes@196
   105
    { 0xA05F8114, 0xFFFFFFFF, UNCHANGED },
nkeynes@196
   106
    { 0xA05F8118, 0xFFFFFFFF, 0x0000FFFF },
nkeynes@196
   107
    { 0xA05F811C, 0xFFFFFFFF, 0x000000FF },
nkeynes@196
   108
    { 0xA05F8120, 0xFFFFFFFF, 0 },
nkeynes@190
   109
    { 0xA05F8124, 0xFFFFFFFF, 0x00FFFFE0 }, /* TA Tile matrix base */
nkeynes@190
   110
    { 0xA05F8128, 0xFFFFFFFF, 0x00FFFFFC }, /* TA Polygon base */
nkeynes@190
   111
    { 0xA05F812C, 0xFFFFFFFF, 0x00FFFFE0 }, /* TA Tile matrix end */
nkeynes@190
   112
    { 0xA05F8130, 0xFFFFFFFF, 0x00FFFFFC }, /* TA Polygon end */
nkeynes@190
   113
    { 0xA05F8134, 0xFFFFFFFF, UNCHANGED  }, /* TA Tilelist posn */
nkeynes@190
   114
    { 0xA05F8138, 0xFFFFFFFF, UNCHANGED  }, /* TA polygon posn */
nkeynes@190
   115
    { 0xA05F813C, 0xFFFFFFFF, 0x000F003F }, /* TA tile matrix size */
nkeynes@190
   116
    { 0xA05F8140, 0xFFFFFFFF, 0x00133333 }, /* TA object config */
nkeynes@190
   117
    { 0xA05F8144, 0xFFFFFFFF, 0x00000000 }, /* TA initialize */
nkeynes@196
   118
    { 0xA05F8148, 0xFFFFFFFF, 0x00FFFFF8 },
nkeynes@196
   119
    { 0xA05F814C, 0xFFFFFFFF, 0x01013F3F },
nkeynes@196
   120
    { 0xA05F8150, 0xFFFFFFFF, 0 },
nkeynes@196
   121
    { 0xA05F8154, 0xFFFFFFFF, 0 },
nkeynes@196
   122
    { 0xA05F8158, 0xFFFFFFFF, 0 },
nkeynes@196
   123
    { 0xA05F815C, 0xFFFFFFFF, 0 },
nkeynes@196
   124
    { 0xA05F8160, 0xFFFFFFFF, 0 },
nkeynes@190
   125
    { 0xA05F8164, 0xFFFFFFFF, 0x00FFFFE0 }, /* TA Tile list start */
nkeynes@196
   126
    { 0xA05F8168, 0xFFFFFFFF, 0 },
nkeynes@196
   127
    { 0xA05F816C, 0xFFFFFFFF, 0 },
nkeynes@196
   128
    { 0xA05F8170, 0xFFFFFFFF, 0 },
nkeynes@196
   129
    { 0xA05F8174, 0xFFFFFFFF, 0 },
nkeynes@196
   130
    { 0xA05F8178, 0xFFFFFFFF, 0 },
nkeynes@196
   131
    { 0xA05F817C, 0xFFFFFFFF, 0 },
nkeynes@196
   132
    { 0xA05F8180, 0xFFFFFFFF, 0 },
nkeynes@196
   133
    { 0xA05F8184, 0xFFFFFFFF, 0 },
nkeynes@196
   134
    { 0xA05F8188, 0xFFFFFFFF, 0 },
nkeynes@196
   135
    { 0xA05F818C, 0xFFFFFFFF, 0 },
nkeynes@196
   136
    { 0xA05F8190, 0xFFFFFFFF, 0 },
nkeynes@196
   137
    { 0xA05F8194, 0xFFFFFFFF, 0 },
nkeynes@196
   138
    { 0xA05F8198, 0xFFFFFFFF, 0 },
nkeynes@196
   139
    { 0xA05F819C, 0xFFFFFFFF, 0 },
nkeynes@196
   140
    { 0xA05F81A0, 0xFFFFFFFF, 0 },
nkeynes@196
   141
    { 0xA05F81A4, 0xFFFFFFFF, 0 },
nkeynes@196
   142
    { 0xA05F81A8, 0xFFFFFFFF, 0x00000001 },
nkeynes@196
   143
    { 0xA05F81A8, 0x00000000, 0x00000000 },    	
nkeynes@196
   144
    { 0xA05F81AC, 0xFFFFFFFF, 0 },
nkeynes@196
   145
    { 0xA05F81B0, 0xFFFFFFFF, 0 },
nkeynes@196
   146
    { 0xA05F81B4, 0xFFFFFFFF, 0 },
nkeynes@196
   147
    { 0xA05F81B8, 0xFFFFFFFF, 0 },
nkeynes@196
   148
    { 0xA05F81BC, 0xFFFFFFFF, 0 },
nkeynes@196
   149
    { 0xA05F81C0, 0xFFFFFFFF, 0 },
nkeynes@196
   150
    { 0xA05F81C4, 0xFFFFFFFF, 0 },
nkeynes@196
   151
    { 0xA05F81C8, 0xFFFFFFFF, 0 },
nkeynes@196
   152
    { 0xA05F81CC, 0xFFFFFFFF, 0 },
nkeynes@196
   153
    { 0xA05F81D0, 0xFFFFFFFF, 0 },
nkeynes@196
   154
    { 0xA05F81D4, 0xFFFFFFFF, 0 },
nkeynes@196
   155
    { 0xA05F81D8, 0xFFFFFFFF, 0 },
nkeynes@196
   156
    { 0xA05F81DC, 0xFFFFFFFF, 0 },
nkeynes@196
   157
    { 0xA05F81E0, 0xFFFFFFFF, 0 },
nkeynes@196
   158
    { 0xA05F81E4, 0xFFFFFFFF, 0 },
nkeynes@196
   159
    { 0xA05F81E8, 0xFFFFFFFF, 0 },
nkeynes@196
   160
    { 0xA05F81EC, 0xFFFFFFFF, 0 },
nkeynes@196
   161
    { 0xA05F81F0, 0xFFFFFFFF, 0 },
nkeynes@196
   162
    { 0xA05F81F4, 0xFFFFFFFF, 0 },
nkeynes@196
   163
    { 0xA05F81F8, 0xFFFFFFFF, 0 },
nkeynes@196
   164
    { 0xA05F81FC, 0xFFFFFFFF, 0 },
nkeynes@190
   165
    { 0, 0, 0 } };
nkeynes@190
   166
    
nkeynes@190
   167
int main( int argc, char *argv[] )
nkeynes@190
   168
{
nkeynes@190
   169
    int i;
nkeynes@190
   170
    int failures = 0;
nkeynes@190
   171
    int tests = 0;
nkeynes@190
   172
    
nkeynes@190
   173
    for( i=0; test_cases[i].reg != 0; i++ ) {
nkeynes@190
   174
    	unsigned int oldval = long_read( test_cases[i].reg );
nkeynes@190
   175
    	unsigned int newval;
nkeynes@190
   176
	long_write( test_cases[i].reg, test_cases[i].write );
nkeynes@190
   177
	newval = long_read( test_cases[i].reg );
nkeynes@190
   178
	if( test_cases[i].expect == UNCHANGED ) {
nkeynes@190
   179
	    if( newval != oldval ) {
nkeynes@190
   180
		fprintf( stderr, "Test %d (%08X) failed. Expected %08X but was %08X\n",
nkeynes@190
   181
		  	 i+1, test_cases[i].reg, oldval, newval );
nkeynes@190
   182
		failures++;
nkeynes@190
   183
	    }
nkeynes@190
   184
	} else {
nkeynes@190
   185
	    if( newval != test_cases[i].expect ) {
nkeynes@190
   186
		fprintf( stderr, "Test %d (%08X) failed. Expected %08X but was %08X\n",
nkeynes@190
   187
		  	 i+1, test_cases[i].reg, test_cases[i].expect, newval );
nkeynes@190
   188
		failures++;
nkeynes@190
   189
	    }
nkeynes@190
   190
	}
nkeynes@190
   191
	long_write( test_cases[i].reg, oldval );
nkeynes@190
   192
	tests++;
nkeynes@190
   193
    }
nkeynes@190
   194
nkeynes@190
   195
    fprintf( stdout, "%d/%d test cases passed successfully\n", (tests-failures), tests );
nkeynes@190
   196
    return failures;
nkeynes@190
   197
}
.