Assembler for MIMD-TRAP2/3 (c) V.Angelov, v3.7, Jul 2008 SVN Revision 2158, SVN Date 2008-07-17 Please send any comments to: angelov@kip.uni-heidelberg.de 12:51:20 / 12 Feb 2009 Source code file: src/CSTtst.asm Memory initialisation file: Log file: wrk/cpu3.log Program memory size in words: 4096 Default constants, read from /usr/share/trap/asm_mimd.inc 1 CPU3 = 2 CC_SIGNED = 0X14 3 CC_NSIGNED = 0X04 4 CC_ZERO = 0X11 5 CC_NZERO = 0X01 6 CC_OVERFL = 0X13 7 CC_NOVERFL = 0X03 8 CC_NEG = 0X12 9 CC_NNEG = 0X02 10 CC_CARRY = 0X10 11 CC_NCARRY = 0X00 12 CC_BUSY = 0X17 13 CC_NBUSY = 0X07 14 CC_DIVB = 0X15 15 CC_NDIVB = 0X05 16 CC_ERRDIV = 0X16 17 CC_NERRDIV = 0X06 18 CC_UNCOND = 0X0F 19 CC_EQ = 0X11 20 CC_NEQ = 0X01 21 CC_NEG = 0X12 22 CC_POS0 = 0X02 23 CC_LTS = 0X14 24 CC_GES = 0X04 25 CC_LTU = 0X10 26 CC_GEU = 0X00 27 CC_LES = 0X19 28 CC_GTS = 0X09 29 CC_LEU = 0X18 30 CC_GTU = 0X08 31 RR_BYTE = 3 32 RR_WORD = 1 33 RR_DWORD = 0 34 LRA1 = LRA 3, 35 LRA2 = LRA 1, 36 LRA4 = LRA 0, 37 LRA4+ = LRA+ 0, 38 XOR = EOR 39 NOT = COM 40 SHLT = SHL 41 ANDT = AND 42 R0 = PRF[0] 43 R1 = PRF[1] 44 R2 = PRF[2] 45 R3 = PRF[3] 46 R4 = PRF[4] 47 R5 = PRF[5] 48 R6 = PRF[6] 49 R7 = PRF[7] 50 R8 = PRF[8] 51 R9 = PRF[9] 52 R10 = PRF[10] 53 R11 = PRF[11] 54 R12 = PRF[12] 55 R13 = PRF[13] 56 R14 = PRF[14] 57 R15 = PRF[15] 58 G0 = GRF[0] 59 G1 = GRF[1] 60 G2 = GRF[2] 61 G3 = GRF[3] 62 G4 = GRF[4] 63 G5 = GRF[5] 64 G6 = GRF[6] 65 G7 = GRF[7] 66 G8 = GRF[8] 67 G9 = GRF[9] 68 G10 = GRF[10] 69 G11 = GRF[11] 70 G12 = GRF[12] 71 G13 = GRF[13] 72 G14 = GRF[14] 73 G15 = GRF[15] 74 F0 = FIT[0] 75 F1 = FIT[1] 76 F2 = FIT[2] 77 F3 = FIT[3] 78 F4 = FIT[4] 79 F5 = FIT[5] 80 F6 = FIT[6] 81 F7 = FIT[7] 82 F8 = FIT[8] 83 F9 = FIT[9] 84 F10 = FIT[10] 85 F11 = FIT[11] 86 F12 = FIT[12] 87 F13 = FIT[13] 88 F14 = FIT[14] 89 F15 = FIT[15] 90 C0 = CON[0] 91 C1 = CON[1] 92 C2 = CON[2] 93 C3 = CON[3] 94 C4 = CON[4] 95 C5 = CON[5] 96 C6 = CON[6] 97 C7 = CON[7] 98 C8 = CON[8] 99 C9 = CON[9] 100 C10 = CON[10] 101 C11 = CON[11] 102 C12 = CON[12] 103 C13 = CON[13] 104 C14 = CON[14] 105 C15 = CON[15] 106 ASM_SVN_REV = 2158 1: ; Full test of the global and privat constants via global bu 2: 3: ; DEFINITIONS, USED IN THE PROGRAM CODE: 4: 5: #def work=PRF[1] ; register for current operations (CO) 6: #def rdata=PRF[2] ; data red by test_programs and CO 7: #def tdata=PRF[3] ; test_vector to be writen 8: #def errnum=PRF[4] ; contains the number of err_ors 9: #def return1=PRF[5] ; return address (at first level) 10: #def return2=PRF[6] ; return address (at second level) 11: #def return3=PRF[7] ; return address (at third level) 12: #def tdgen=PRF[8] ; test data generator code label 13: #def itdgen=PRF[9] ; init tdgen code label 14: #def psrmask=PRF[10] ; mask for test_vector 15: #def bitnum=PRF[12] ; =32 minus the number of bits of the 16: ; prf11 and prf13 are used inside the testing routine 17: 18: #def ioaddr=PRF[14] ; contains the autoincrementing addres 19: #def errstore=PRF[15] ; autoincrement address for RAM-access 20: 21: #def firstaddress=grf[1] ; first address of the tested area 22: #def lastaddress=grf[2] ; last address of the tested area 23: 24: #def MEMRW=0xD000 ; the address of the register, control 25: #def IAFIRST=0xE000 ; first address of IMEM 26: #def IADEND =0xEFFF ; last address of IMEM 27: #def DAFRSTG=0xE000 ; first address of DMEM via GIO 28: #def DADENDG=0xE3FF ; last address of DMEM via GIO 29: #def DAFIRST=0x0000 ; first address of DMEM as RAM 30: #def DADEND =0x0FFC ; last address of DMEM as RAM 31: #def DBFST=0xF000 ; first address of DBANK (trap3) 32: #def DBEND=0xF0FF ; last address of DBANK (trap3) 33: 34: ; masks of certain length 35: #def BITMASK24=0x0FFFFFF 36: #def BITMASK32=0xFFFFFFFF 37: #def BITMASK12=0x00000FFF 38: #def BITMASK13=0x00001FFF 39: 40: #ifdef cpu0 41: #def CAFIRST=0xC00 42: #def CAEND=0xC08 43: #def NXT=0xA22 44: #def ITS=0xA20 45: #def AC_8=0xF000 46: #def AC_9=0xF001 47: #def AC_10=0xF002 48: #def AC_11=0xF003 49: #def AC_12=0xF004 50: #def AC_13=0xF005 51: #def AC_14=0xF006 52: #def AC_15=0xF007 53: #endif 54: #ifdef cpu1 55: #def CAFIRST=0xC08 56: #def CAEND=0xC0C 57: #def NXT=0xA24 58: #def ITS=0xA22 59: #def AC_8=0xF008 60: #def AC_9=0xF009 61: #def AC_10=0xF00A 62: #def AC_11=0xF00B 63: #def AC_12=0xF00C 64: #def AC_13=0xF00D 65: #def AC_14=0xF00E 66: #def AC_15=0xF00F 67: #endif 68: #ifdef cpu2 69: #def CAFIRST=0xC10 70: #def CAEND=0xC14 71: #def NXT=0xA26 72: #def ITS=0xA24 73: #def AC_8=0xF010 74: #def AC_9=0xF011 75: #def AC_10=0xF012 76: #def AC_11=0xF013 77: #def AC_12=0xF014 78: #def AC_13=0xF015 79: #def AC_14=0xF016 80: #def AC_15=0xF017 81: #endif 82: #ifdef cpu3 83: #def CAFIRST=0xC18 84: #def CAEND=0xC1C 85: #def NXT=0xA20 86: #def ITS=0xA26 87: #def AC_8=0xF018 88: #def AC_9=0xF019 89: #def AC_10=0xF01A 90: #def AC_11=0xF01B 91: #def AC_12=0xF01C 92: #def AC_13=0xF01D 93: #def AC_14=0xF01E 94: #def AC_15=0xF01F 95: #endif 96: 97: start: nop 0000 : 0000_0000_0000_0000_0000_0000 98: mov c0 errnum ; clear the err_or_ 0001 : 1100_0010_0000_0110_0000_0100 99: mov 0xC00 g0 0002 : 1100_0111_1000_0000_0001_0000 100: 101: #ifdef cpu0 102: mov c0 work ; initial clear the 103: iext 0xF000 ; representing the 104: mov 0xF000 r14 105: iext 0xF020 106: mov 0xF020 g14 107: sgio+ work 108: jmpr cc_busy 0 109: cmp r14 g14 110: jmpr cc_leu -3 111: 112: #endif 113: 114: mov CAFIRST firstaddress 0003 : 1100_0111_1000_0011_0001_0001 115: mov CAEND lastaddress ; +1 0004 : 1100_0111_1000_0011_1001_0010 116: mov 0 bitnum 0005 : 1100_0110_0000_0000_0000_1100 117: iext BITMASK32 0006 : 0101_0001_1111_1111_1111_1111 118: mov BITMASK32 psrmask 0007 : 1100_0111_1111_1111_1110_1010 119: mvpcr +2 return1 ; call constant bloc 0008 : 1100_0110_0000_0001_0100_0101 120: jmp cc_uncond cltst ; via GIO 0009 : 0000_0100_0000_0000_0000_1111 121: 122: 123: #ifdef cpu0 124: mov c0 work ; cpu0 writes test 125: mov 0xC04 ioaddr 126: jmpr cc_busy 0 127: sgio+ work 128: com work work 129: jmpr cc_busy 0 130: sgio+ work 131: iext 0x55555555 132: mov 0x55555555 work 133: jmpr cc_busy 0 134: sgio+ work 135: com work work 136: jmpr cc_busy 0 137: sgio+ work 138: jmpr cc_busy 0 139: #endif 140: 141: mov CAFIRST ioaddr 000A : 1100_0111_1000_0011_0000_1110 142: mvpcr +2, return1 ; call constant blo 000B : 1100_0110_0000_0001_1010_0101 143: jmp cc_uncond cdirect ; direct test 000C : 0000_0100_0000_0000_0000_1111 144: 145: #ifdef cpu3 146: jmpr cc_busy 0 000D : 0000_0100_0000_0001_1011_0111 147: mov b0_0111 r0 000E : 1100_0110_0000_0000_1110_0000 148: sgio r0 ITS 000F : 0010_1000_0000_1010_0010_0110 149: jmpr cc_busy 0 0010 : 0000_0100_0000_0010_0001_0111 150: mov 0x12 r0 0011 : 1100_0110_0000_0010_0100_0000 151: sgio r0 0xA04 0012 : 0010_1000_0000_1010_0000_0100 152: #else 153: jmpr cc_busy 0 154: mov c1 r0 155: sgio r0 NXT 156: jmpr cc_busy 0 157: mov c0 r0 158: sgio r0 ITS 159: #endif 160: jmpr cc_uncond 0 0013 : 0000_0100_0000_0010_0110_1111 161: 162: 163: 164: ; ROUTINE TESTING PRIVAT AND COMMON CONSTANTS DIRECTLY 165: cdirect: mov c0, work 0014 : 1100_0010_0000_0110_0000_0001 166: jmpr cc_busy, 0 0015 : 0000_0100_0000_0010_1011_0111 167: sgio+ work 0016 : 0011_1100_0001_0000_0000_0000 168: com work, work 0017 : 1011_1110_0000_0000_0010_0001 169: jmpr cc_busy, 0 0018 : 0000_0100_0000_0011_0001_0111 170: sgio+ work 0019 : 0011_1100_0001_0000_0000_0000 171: iext 0x55555555 001A : 0101_0001_0101_0101_0101_0101 172: mov 0x55555555, work 001B : 1100_0110_1010_1010_1010_0001 173: jmpr cc_busy, 0 001C : 0000_0100_0000_0011_1001_0111 174: sgio+ work 001D : 0011_1100_0001_0000_0000_0000 175: com work, work 001E : 1011_1110_0000_0000_0010_0001 176: jmpr cc_busy, 0 001F : 0000_0100_0000_0011_1111_0111 177: sgio+ work 0020 : 0011_1100_0001_0000_0000_0000 178: jmpr cc_busy, 0 0021 : 0000_0100_0000_0100_0011_0111 179: 180: cmp work, c11 0022 : 1000_1000_0001_0111_0110_0000 181: jmpr cc_zero, 11 0023 : 0000_0100_0000_0101_1101_0001 182: 183: iext AC_11 0024 : 0101_0000_0000_0000_0000_1111 184: mov AC_11 r11 0025 : 1100_0110_0000_0011_0110_1011 185: jmpr cc_busy 0 0026 : 0000_0100_0000_0100_1101_0111 186: lgio 0 r11 0027 : 1110_1000_0000_0001_0110_0000 187: jmpr cc_busy 0 0028 : 0000_0100_0000_0101_0001_0111 188: lpio 0x300 errnum 0029 : 1110_0110_0110_0000_0000_0100 189: nop 002A : 0000_0000_0000_0000_0000_0000 190: add errnum, c1, errnum ; 002B : 1000_0010_0100_0110_0010_0100 191: jmpr cc_busy 0 002C : 0000_0100_0000_0101_1001_0111 192: sgio errnum r11 002D : 0010_0100_0100_0001_0110_0000 193: 194: cmp work, c15 002E : 1000_1000_0001_0111_1110_0000 195: jmpr cc_zero, 11 002F : 0000_0100_0000_0111_0101_0001 196: 197: iext AC_15 0030 : 0101_0000_0000_0000_0000_1111 198: mov AC_15 r11 0031 : 1100_0110_0000_0011_1110_1011 199: jmpr cc_busy 0 0032 : 0000_0100_0000_0110_0101_0111 200: lgio 0 r11 0033 : 1110_1000_0000_0001_0110_0000 201: jmpr cc_busy 0 0034 : 0000_0100_0000_0110_1001_0111 202: lpio 0x300 errnum 0035 : 1110_0110_0110_0000_0000_0100 203: nop 0036 : 0000_0000_0000_0000_0000_0000 204: add errnum, c1, errnum ; 0037 : 1000_0010_0100_0110_0010_0100 205: jmpr cc_busy 0 0038 : 0000_0100_0000_0111_0001_0111 206: sgio errnum r11 0039 : 0010_0100_0100_0001_0110_0000 207: 208: com work, work 003A : 1011_1110_0000_0000_0010_0001 209: cmp work, c10 003B : 1000_1000_0001_0111_0100_0000 210: jmpr cc_zero, 11 003C : 0000_0100_0000_1000_1111_0001 211: 212: iext AC_10 003D : 0101_0000_0000_0000_0000_1111 213: mov AC_10 r11 003E : 1100_0110_0000_0011_0100_1011 214: jmpr cc_busy 0 003F : 0000_0100_0000_0111_1111_0111 215: lgio 0 r11 0040 : 1110_1000_0000_0001_0110_0000 216: jmpr cc_busy 0 0041 : 0000_0100_0000_1000_0011_0111 217: lpio 0x300 errnum 0042 : 1110_0110_0110_0000_0000_0100 218: nop 0043 : 0000_0000_0000_0000_0000_0000 219: add errnum, c1, errnum ; 0044 : 1000_0010_0100_0110_0010_0100 220: jmpr cc_busy 0 0045 : 0000_0100_0000_1000_1011_0111 221: sgio errnum r11 0046 : 0010_0100_0100_0001_0110_0000 222: 223: cmp work, c14 0047 : 1000_1000_0001_0111_1100_0000 224: jmpr cc_zero, 11 0048 : 0000_0100_0000_1010_0111_0001 225: 226: iext AC_14 0049 : 0101_0000_0000_0000_0000_1111 227: mov AC_14 r11 004A : 1100_0110_0000_0011_1100_1011 228: jmpr cc_busy 0 004B : 0000_0100_0000_1001_0111_0111 229: lgio 0 r11 004C : 1110_1000_0000_0001_0110_0000 230: jmpr cc_busy 0 004D : 0000_0100_0000_1001_1011_0111 231: lpio 0x300 errnum 004E : 1110_0110_0110_0000_0000_0100 232: nop 004F : 0000_0000_0000_0000_0000_0000 233: add errnum, c1, errnum ; 0050 : 1000_0010_0100_0110_0010_0100 234: jmpr cc_busy 0 0051 : 0000_0100_0000_1010_0011_0111 235: sgio errnum r11 0052 : 0010_0100_0100_0001_0110_0000 236: 237: mov c0, work 0053 : 1100_0010_0000_0110_0000_0001 238: cmp work, c8 0054 : 1000_1000_0001_0111_0000_0000 239: jmpr cc_zero, 11 0055 : 0000_0100_0000_1100_0001_0001 240: 241: iext AC_8 0056 : 0101_0000_0000_0000_0000_1111 242: mov AC_8 r11 0057 : 1100_0110_0000_0011_0000_1011 243: jmpr cc_busy 0 0058 : 0000_0100_0000_1011_0001_0111 244: lgio 0 r11 0059 : 1110_1000_0000_0001_0110_0000 245: jmpr cc_busy 0 005A : 0000_0100_0000_1011_0101_0111 246: lpio 0x300 errnum 005B : 1110_0110_0110_0000_0000_0100 247: nop 005C : 0000_0000_0000_0000_0000_0000 248: add errnum, c1, errnum ; 005D : 1000_0010_0100_0110_0010_0100 249: jmpr cc_busy 0 005E : 0000_0100_0000_1011_1101_0111 250: sgio errnum r11 005F : 0010_0100_0100_0001_0110_0000 251: 252: cmp work, c12 0060 : 1000_1000_0001_0111_1000_0000 253: jmpr cc_zero, 11 0061 : 0000_0100_0000_1101_1001_0001 254: 255: iext AC_12 0062 : 0101_0000_0000_0000_0000_1111 256: mov AC_12 r11 0063 : 1100_0110_0000_0011_1000_1011 257: jmpr cc_busy 0 0064 : 0000_0100_0000_1100_1001_0111 258: lgio 0 r11 0065 : 1110_1000_0000_0001_0110_0000 259: jmpr cc_busy 0 0066 : 0000_0100_0000_1100_1101_0111 260: lpio 0x300 errnum 0067 : 1110_0110_0110_0000_0000_0100 261: nop 0068 : 0000_0000_0000_0000_0000_0000 262: add errnum, c1, errnum ; 0069 : 1000_0010_0100_0110_0010_0100 263: jmpr cc_busy 0 006A : 0000_0100_0000_1101_0101_0111 264: sgio errnum r11 006B : 0010_0100_0100_0001_0110_0000 265: 266: com work, work 006C : 1011_1110_0000_0000_0010_0001 267: cmp work, c9 006D : 1000_1000_0001_0111_0010_0000 268: jmpr cc_zero, 11 006E : 0000_0100_0000_1111_0011_0001 269: 270: iext AC_9 006F : 0101_0000_0000_0000_0000_1111 271: mov AC_9 r11 0070 : 1100_0110_0000_0011_0010_1011 272: jmpr cc_busy 0 0071 : 0000_0100_0000_1110_0011_0111 273: lgio 0 r11 0072 : 1110_1000_0000_0001_0110_0000 274: jmpr cc_busy 0 0073 : 0000_0100_0000_1110_0111_0111 275: lpio 0x300 errnum 0074 : 1110_0110_0110_0000_0000_0100 276: nop 0075 : 0000_0000_0000_0000_0000_0000 277: add errnum, c1, errnum ; 0076 : 1000_0010_0100_0110_0010_0100 278: jmpr cc_busy 0 0077 : 0000_0100_0000_1110_1111_0111 279: sgio errnum r11 0078 : 0010_0100_0100_0001_0110_0000 280: 281: cmp work, c13 0079 : 1000_1000_0001_0111_1010_0000 282: jmpr cc_zero, 8 ;11 007A : 0000_0100_0001_0000_0101_0001 283: 284: iext AC_13 007B : 0101_0000_0000_0000_0000_1111 285: mov AC_13 r11 007C : 1100_0110_0000_0011_1010_1011 286: jmpr cc_busy 0 007D : 0000_0100_0000_1111_1011_0111 287: lgio 0 r11 007E : 1110_1000_0000_0001_0110_0000 288: jmpr cc_busy 0 007F : 0000_0100_0000_1111_1111_0111 289: lpio 0x300 errnum 0080 : 1110_0110_0110_0000_0000_0100 290: nop 0081 : 0000_0000_0000_0000_0000_0000 291: add errnum, c1, errnum ; 0082 : 1000_0010_0100_0110_0010_0100 292: jmpr cc_busy 0 0083 : 0000_0100_0001_0000_0111_0111 293: sgio errnum r11 0084 : 0010_0100_0100_0001_0110_0000 294: 295: jmp cc_uncond, return1 0085 : 0000_1000_0101_0000_0000_1111 296: ; END DIRECT CONSTANT TESTING 297: 298: 299: ; BEGIN THE TESTING ROUTINE (uses testing subrouti 300: cltst: mov 1, prf[11] 0086 : 1100_0110_0000_0000_0010_1011 301: mov 1, prf[13] 0087 : 1100_0110_0000_0000_0010_1101 302: 303: nt: mov wlk0, tdgen ; call walking 0 test_r 0088 : 1100_0110_0000_0000_0000_1000 304: mov iwlk0, itdgen 0089 : 1100_0110_0000_0000_0000_1001 305: mvpcr +2, return2 008A : 1100_0110_0001_0001_1000_0110 306: jmp cc_uncond, tstgio 008B : 0000_0100_0000_0000_0000_1111 307: 308: mov wlk1, tdgen ; call walking 1 test_r 008C : 1100_0110_0000_0000_0000_1000 309: mov iwlk1, itdgen ; 008D : 1100_0110_0000_0000_0000_1001 310: mvpcr +2, return2 008E : 1100_0110_0001_0010_0000_0110 311: jmp cc_uncond, tstgio 008F : 0000_0100_0000_0000_0000_1111 312: 313: mov psr, tdgen ; call pseudo random ve 0090 : 1100_0110_0000_0000_0000_1000 314: mov ipsr, itdgen 0091 : 1100_0110_0000_0000_0000_1001 315: mvpcr +2, return2 0092 : 1100_0110_0001_0010_1000_0110 316: jmp cc_uncond, tstgio 0093 : 0000_0100_0000_0000_0000_1111 317: 318: add prf[13], c3, prf[13] ; next initial vector 0094 : 1000_0010_1101_0110_0110_1101 319: shl 1, prf[11], prf[11] ; testing routines 0095 : 1011_0010_0001_0001_0110_1011 320: jmp cc_carry, return1 0096 : 0000_1000_0101_0000_0001_0000 321: mov bitnum work 0097 : 1100_0010_0000_0001_1000_0001 322: mov 15 rdata 0098 : 1100_0110_0000_0001_1110_0010 323: mov prf[11] prf[0] 0099 : 1100_0010_0000_0001_0110_0000 324: cmp rdata bitnum 009A : 1000_1000_0010_0001_1000_0000 325: jmpr cc_ncarry 3 009B : 0000_0100_0001_0011_1100_0000 326: shl 15 prf[0] prf[0] 009C : 1011_0010_1111_0000_0000_0000 327: sub work rdata work 009D : 1000_1010_0001_0000_0100_0001 328: shlt work, prf[0] ; if MSB of the current 009E : 0111_0000_0001_0000_0000_0000 329: jmp cc_ncarry, nt 009F : 0000_0100_0000_0000_0000_0000 330: jmp cc_uncond return1 00A0 : 0000_1000_0101_0000_0000_1111 331: ; END OF THE TESTING ROUTINE 332: 333: 334: 335: ; BEGIN OF THE SUBROUTINE (used by testing routine 336: ; rolls all addresses and tests by w/r through GIO 337: tstgio: mvpcr +2, return3 00A1 : 1100_0110_0001_0100_0110_0111 338: jmp cc_uncond, itdgen ; go to init the test 00A2 : 0000_1000_1001_0000_0000_1111 339: ; BEGIN WRITING THE T 340: mov firstaddress, ioaddr 00A3 : 1100_0010_0000_0010_0010_1110 341: wd: jmpr cc_busy, 0 00A4 : 0000_0100_0001_0100_1001_0111 342: sgio+ tdata ; writing the test da 00A5 : 0011_1100_0011_0000_0000_0000 343: mvpcr +2, return3 ; runs the generator 00A6 : 1100_0110_0001_0101_0000_0111 344: jmp cc_uncond, tdgen 00A7 : 0000_1000_1000_0000_0000_1111 345: cmp ioaddr, lastaddress ;IADEND ; is 00A8 : 1000_1000_1110_0010_0100_0000 346: jmp cc_carry, wd ; if yes: 00A9 : 0000_0100_0000_0000_0001_0000 347: 348: ; BEGIN COMPARING PAR 349: mov firstaddress, ioaddr 00AA : 1100_0010_0000_0010_0010_1110 350: 351: mvpcr +2, return3 00AB : 1100_0110_0001_0101_1010_0111 352: jmp cc_uncond, itdgen ; and go to init for 00AC : 0000_1000_1001_0000_0000_1111 353: 354: wc: jmpr cc_busy, 0 ; here is the body of 00AD : 0000_0100_0001_0101_1011_0111 355: lgio+ 0; ; reading each addres 00AE : 1111_0100_0000_0000_0000_0000 356: jmpr cc_busy, 0 ; comparing the resul 00AF : 0000_0100_0001_0101_1111_0111 357: lpio 0x300, rdata ; data stored before 00B0 : 1110_0110_0110_0000_0000_0010 358: cmp rdata, tdata ; 00B1 : 1000_1000_0010_0000_0110_0000 359: jmp cc_zero, noerr ; if err_or detected 00B2 : 0000_0100_0000_0000_0001_0001 360: 361: iext 0xF000 00B3 : 0101_0000_0000_0000_0000_1111 362: mov 0xF000 work 00B4 : 1100_0110_0000_0000_0000_0001 363: add work ioaddr work 00B5 : 1000_0010_0001_0001_1100_0001 364: sub work g0 work 00B6 : 1000_1010_0001_0010_0000_0001 365: sub work c1 work 00B7 : 1000_1010_0001_0110_0010_0001 366: jmpr cc_busy 0 00B8 : 0000_0100_0001_0111_0001_0111 367: lgio 0 work 00B9 : 1110_1000_0000_0000_0010_0000 368: jmpr cc_busy 0 00BA : 0000_0100_0001_0111_0101_0111 369: lpio 0x300 errnum 00BB : 1110_0110_0110_0000_0000_0100 370: nop 00BC : 0000_0000_0000_0000_0000_0000 371: add errnum, c1, errnum ; 00BD : 1000_0010_0100_0110_0010_0100 372: jmpr cc_busy 0 00BE : 0000_0100_0001_0111_1101_0111 373: sgio errnum work 00BF : 0010_0100_0100_0000_0010_0000 374: 375: noerr: mvpcr +2, return3 00C0 : 1100_0110_0001_1000_0100_0111 376: jmp cc_uncond, tdgen ; get next test_dat 00C1 : 0000_1000_1000_0000_0000_1111 377: 378: cmp ioaddr, lastaddress ; is tne last addre 00C2 : 1000_1000_1110_0010_0100_0000 379: jmp cc_carry, wc ; if not go to wc 00C3 : 0000_0100_0000_0000_0001_0000 380: 381: jmp cc_uncond, return2 00C4 : 0000_1000_0110_0000_0000_1111 382: 383: ; prepares the next data - walking 1 384: wlk1: shl 1, tdata, tdata 00C5 : 1011_0010_0001_0000_0110_0011 385: and tdata, psrmask, tdata 00C6 : 1010_0110_0011_0001_0100_0011 386: jmp cc_nzero, return3 00C7 : 0000_1000_0111_0000_0000_0001 387: mov 1, tdata 00C8 : 1100_0110_0000_0000_0010_0011 388: jmp cc_uncond, return3 00C9 : 0000_1000_0111_0000_0000_1111 389: ; end of walking 1 390: 391: ; prepares the next data - walking 0 392: wlk0: com tdata, tdata 00CA : 1011_1110_0000_0000_0110_0011 393: shl 1, tdata, tdata 00CB : 1011_0010_0001_0000_0110_0011 394: and tdata, psrmask, tdata 00CC : 1010_0110_0011_0001_0100_0011 395: jmpr cc_nzero, +2 00CD : 0000_0100_0001_1001_1110_0001 396: mov 1, tdata 00CE : 1100_0110_0000_0000_0010_0011 397: com tdata, tdata 00CF : 1011_1110_0000_0000_0110_0011 398: and tdata, psrmask, tdata 00D0 : 1010_0110_0011_0001_0100_0011 399: jmp cc_uncond, return3 00D1 : 0000_1000_0111_0000_0000_1111 400: ; end of walking 0 401: 402: ; prepares the next data by pseudo random generator 403: psr: lpio 0x202, tdata 00D2 : 1110_0110_0100_0000_0100_0011 404: and tdata, psrmask, tdata 00D3 : 1010_0110_0011_0001_0100_0011 405: jmp cc_uncond, return3 00D4 : 0000_1000_0111_0000_0000_1111 406: ; end random generator 407: 408: ; init walking 1 409: iwlk1: mov prf[11], tdata 00D5 : 1100_0010_0000_0001_0110_0011 410: jmp cc_uncond, return3 00D6 : 0000_1000_0111_0000_0000_1111 411: 412: ; init walking 0 413: iwlk0: com prf[11], tdata 00D7 : 1011_1110_0000_0001_0110_0011 414: and tdata, psrmask, tdata 00D8 : 1010_0110_0011_0001_0100_0011 415: jmp cc_uncond, return3 00D9 : 0000_1000_0111_0000_0000_1111 416: 417: ; init psr 418: ;#ifdef trap3 419: ipsr: mov b1_0_0_00_01_11111, tdata 00DA : 1100_0111_0000_0111_1110_0011 420: ;#else 421: ;ipsr: mov b1_0_0_00_01_1111, tdata 422: ;#endif 423: mov 31 prf[0] 00DB : 1100_0110_0000_0011_1110_0000 424: sub prf[0] bitnum prf[0] 00DC : 1000_1010_0000_0001_1000_0000 425: ;#ifdef trap3 426: ;#else 427: ; cmp prf[0] 16 428: ; jmpr cc_carry 2 429: ; mov 15 prf[0] 430: ;#endif 431: or tdata prf[0] tdata 00DD : 1010_1010_0011_0000_0000_0011 432: spio tdata, 0x201 00DE : 0010_0000_0011_0010_0000_0001 433: mov prf[13], tdata 00DF : 1100_0010_0000_0001_1010_0011 434: spio tdata, 0x200 00E0 : 0010_0000_0011_0010_0000_0000 435: nop 00E1 : 0000_0000_0000_0000_0000_0000 436: nop 00E2 : 0000_0000_0000_0000_0000_0000 437: lpio 0x202, tdata 00E3 : 1110_0110_0100_0000_0100_0011 438: jmp cc_uncond, return3 00E4 : 0000_1000_0111_0000_0000_1111 439: Source file read, 0 error(s), 0 warning(s).