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/cpu0.log Program memory size in words: 4096 Default constants, read from /usr/share/trap/asm_mimd.inc 1 CPU0 = 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 0003 : 1100_0010_0000_0110_0000_0001 103: iext 0xF000 ; representing the 0004 : 0101_0000_0000_0000_0000_1111 104: mov 0xF000 r14 0005 : 1100_0110_0000_0000_0000_1110 105: iext 0xF020 0006 : 0101_0000_0000_0000_0000_1111 106: mov 0xF020 g14 0007 : 1100_0110_0000_0100_0001_1110 107: sgio+ work 0008 : 0011_1100_0001_0000_0000_0000 108: jmpr cc_busy 0 0009 : 0000_0100_0000_0001_0011_0111 109: cmp r14 g14 000A : 1000_1000_1110_0011_1100_0000 110: jmpr cc_leu -3 000B : 0000_0100_0000_0001_0001_1000 111: 112: #endif 113: 114: mov CAFIRST firstaddress 000C : 1100_0111_1000_0000_0001_0001 115: mov CAEND lastaddress ; +1 000D : 1100_0111_1000_0001_0001_0010 116: mov 0 bitnum 000E : 1100_0110_0000_0000_0000_1100 117: iext BITMASK32 000F : 0101_0001_1111_1111_1111_1111 118: mov BITMASK32 psrmask 0010 : 1100_0111_1111_1111_1110_1010 119: mvpcr +2 return1 ; call constant bloc 0011 : 1100_0110_0000_0010_0110_0101 120: jmp cc_uncond cltst ; via GIO 0012 : 0000_0100_0000_0000_0000_1111 121: 122: 123: #ifdef cpu0 124: mov c0 work ; cpu0 writes test 0013 : 1100_0010_0000_0110_0000_0001 125: mov 0xC04 ioaddr 0014 : 1100_0111_1000_0000_1000_1110 126: jmpr cc_busy 0 0015 : 0000_0100_0000_0010_1011_0111 127: sgio+ work 0016 : 0011_1100_0001_0000_0000_0000 128: com work work 0017 : 1011_1110_0000_0000_0010_0001 129: jmpr cc_busy 0 0018 : 0000_0100_0000_0011_0001_0111 130: sgio+ work 0019 : 0011_1100_0001_0000_0000_0000 131: iext 0x55555555 001A : 0101_0001_0101_0101_0101_0101 132: mov 0x55555555 work 001B : 1100_0110_1010_1010_1010_0001 133: jmpr cc_busy 0 001C : 0000_0100_0000_0011_1001_0111 134: sgio+ work 001D : 0011_1100_0001_0000_0000_0000 135: com work work 001E : 1011_1110_0000_0000_0010_0001 136: jmpr cc_busy 0 001F : 0000_0100_0000_0011_1111_0111 137: sgio+ work 0020 : 0011_1100_0001_0000_0000_0000 138: jmpr cc_busy 0 0021 : 0000_0100_0000_0100_0011_0111 139: #endif 140: 141: mov CAFIRST ioaddr 0022 : 1100_0111_1000_0000_0000_1110 142: mvpcr +2, return1 ; call constant blo 0023 : 1100_0110_0000_0100_1010_0101 143: jmp cc_uncond cdirect ; direct test 0024 : 0000_0100_0000_0000_0000_1111 144: 145: #ifdef cpu3 146: jmpr cc_busy 0 147: mov b0_0111 r0 148: sgio r0 ITS 149: jmpr cc_busy 0 150: mov 0x12 r0 151: sgio r0 0xA04 152: #else 153: jmpr cc_busy 0 0025 : 0000_0100_0000_0100_1011_0111 154: mov c1 r0 0026 : 1100_0010_0000_0110_0010_0000 155: sgio r0 NXT 0027 : 0010_1000_0000_1010_0010_0010 156: jmpr cc_busy 0 0028 : 0000_0100_0000_0101_0001_0111 157: mov c0 r0 0029 : 1100_0010_0000_0110_0000_0000 158: sgio r0 ITS 002A : 0010_1000_0000_1010_0010_0000 159: #endif 160: jmpr cc_uncond 0 002B : 0000_0100_0000_0101_0110_1111 161: 162: 163: 164: ; ROUTINE TESTING PRIVAT AND COMMON CONSTANTS DIRECTLY 165: cdirect: mov c0, work 002C : 1100_0010_0000_0110_0000_0001 166: jmpr cc_busy, 0 002D : 0000_0100_0000_0101_1011_0111 167: sgio+ work 002E : 0011_1100_0001_0000_0000_0000 168: com work, work 002F : 1011_1110_0000_0000_0010_0001 169: jmpr cc_busy, 0 0030 : 0000_0100_0000_0110_0001_0111 170: sgio+ work 0031 : 0011_1100_0001_0000_0000_0000 171: iext 0x55555555 0032 : 0101_0001_0101_0101_0101_0101 172: mov 0x55555555, work 0033 : 1100_0110_1010_1010_1010_0001 173: jmpr cc_busy, 0 0034 : 0000_0100_0000_0110_1001_0111 174: sgio+ work 0035 : 0011_1100_0001_0000_0000_0000 175: com work, work 0036 : 1011_1110_0000_0000_0010_0001 176: jmpr cc_busy, 0 0037 : 0000_0100_0000_0110_1111_0111 177: sgio+ work 0038 : 0011_1100_0001_0000_0000_0000 178: jmpr cc_busy, 0 0039 : 0000_0100_0000_0111_0011_0111 179: 180: cmp work, c11 003A : 1000_1000_0001_0111_0110_0000 181: jmpr cc_zero, 11 003B : 0000_0100_0000_1000_1101_0001 182: 183: iext AC_11 003C : 0101_0000_0000_0000_0000_1111 184: mov AC_11 r11 003D : 1100_0110_0000_0000_0110_1011 185: jmpr cc_busy 0 003E : 0000_0100_0000_0111_1101_0111 186: lgio 0 r11 003F : 1110_1000_0000_0001_0110_0000 187: jmpr cc_busy 0 0040 : 0000_0100_0000_1000_0001_0111 188: lpio 0x300 errnum 0041 : 1110_0110_0110_0000_0000_0100 189: nop 0042 : 0000_0000_0000_0000_0000_0000 190: add errnum, c1, errnum ; 0043 : 1000_0010_0100_0110_0010_0100 191: jmpr cc_busy 0 0044 : 0000_0100_0000_1000_1001_0111 192: sgio errnum r11 0045 : 0010_0100_0100_0001_0110_0000 193: 194: cmp work, c15 0046 : 1000_1000_0001_0111_1110_0000 195: jmpr cc_zero, 11 0047 : 0000_0100_0000_1010_0101_0001 196: 197: iext AC_15 0048 : 0101_0000_0000_0000_0000_1111 198: mov AC_15 r11 0049 : 1100_0110_0000_0000_1110_1011 199: jmpr cc_busy 0 004A : 0000_0100_0000_1001_0101_0111 200: lgio 0 r11 004B : 1110_1000_0000_0001_0110_0000 201: jmpr cc_busy 0 004C : 0000_0100_0000_1001_1001_0111 202: lpio 0x300 errnum 004D : 1110_0110_0110_0000_0000_0100 203: nop 004E : 0000_0000_0000_0000_0000_0000 204: add errnum, c1, errnum ; 004F : 1000_0010_0100_0110_0010_0100 205: jmpr cc_busy 0 0050 : 0000_0100_0000_1010_0001_0111 206: sgio errnum r11 0051 : 0010_0100_0100_0001_0110_0000 207: 208: com work, work 0052 : 1011_1110_0000_0000_0010_0001 209: cmp work, c10 0053 : 1000_1000_0001_0111_0100_0000 210: jmpr cc_zero, 11 0054 : 0000_0100_0000_1011_1111_0001 211: 212: iext AC_10 0055 : 0101_0000_0000_0000_0000_1111 213: mov AC_10 r11 0056 : 1100_0110_0000_0000_0100_1011 214: jmpr cc_busy 0 0057 : 0000_0100_0000_1010_1111_0111 215: lgio 0 r11 0058 : 1110_1000_0000_0001_0110_0000 216: jmpr cc_busy 0 0059 : 0000_0100_0000_1011_0011_0111 217: lpio 0x300 errnum 005A : 1110_0110_0110_0000_0000_0100 218: nop 005B : 0000_0000_0000_0000_0000_0000 219: add errnum, c1, errnum ; 005C : 1000_0010_0100_0110_0010_0100 220: jmpr cc_busy 0 005D : 0000_0100_0000_1011_1011_0111 221: sgio errnum r11 005E : 0010_0100_0100_0001_0110_0000 222: 223: cmp work, c14 005F : 1000_1000_0001_0111_1100_0000 224: jmpr cc_zero, 11 0060 : 0000_0100_0000_1101_0111_0001 225: 226: iext AC_14 0061 : 0101_0000_0000_0000_0000_1111 227: mov AC_14 r11 0062 : 1100_0110_0000_0000_1100_1011 228: jmpr cc_busy 0 0063 : 0000_0100_0000_1100_0111_0111 229: lgio 0 r11 0064 : 1110_1000_0000_0001_0110_0000 230: jmpr cc_busy 0 0065 : 0000_0100_0000_1100_1011_0111 231: lpio 0x300 errnum 0066 : 1110_0110_0110_0000_0000_0100 232: nop 0067 : 0000_0000_0000_0000_0000_0000 233: add errnum, c1, errnum ; 0068 : 1000_0010_0100_0110_0010_0100 234: jmpr cc_busy 0 0069 : 0000_0100_0000_1101_0011_0111 235: sgio errnum r11 006A : 0010_0100_0100_0001_0110_0000 236: 237: mov c0, work 006B : 1100_0010_0000_0110_0000_0001 238: cmp work, c8 006C : 1000_1000_0001_0111_0000_0000 239: jmpr cc_zero, 11 006D : 0000_0100_0000_1111_0001_0001 240: 241: iext AC_8 006E : 0101_0000_0000_0000_0000_1111 242: mov AC_8 r11 006F : 1100_0110_0000_0000_0000_1011 243: jmpr cc_busy 0 0070 : 0000_0100_0000_1110_0001_0111 244: lgio 0 r11 0071 : 1110_1000_0000_0001_0110_0000 245: jmpr cc_busy 0 0072 : 0000_0100_0000_1110_0101_0111 246: lpio 0x300 errnum 0073 : 1110_0110_0110_0000_0000_0100 247: nop 0074 : 0000_0000_0000_0000_0000_0000 248: add errnum, c1, errnum ; 0075 : 1000_0010_0100_0110_0010_0100 249: jmpr cc_busy 0 0076 : 0000_0100_0000_1110_1101_0111 250: sgio errnum r11 0077 : 0010_0100_0100_0001_0110_0000 251: 252: cmp work, c12 0078 : 1000_1000_0001_0111_1000_0000 253: jmpr cc_zero, 11 0079 : 0000_0100_0001_0000_1001_0001 254: 255: iext AC_12 007A : 0101_0000_0000_0000_0000_1111 256: mov AC_12 r11 007B : 1100_0110_0000_0000_1000_1011 257: jmpr cc_busy 0 007C : 0000_0100_0000_1111_1001_0111 258: lgio 0 r11 007D : 1110_1000_0000_0001_0110_0000 259: jmpr cc_busy 0 007E : 0000_0100_0000_1111_1101_0111 260: lpio 0x300 errnum 007F : 1110_0110_0110_0000_0000_0100 261: nop 0080 : 0000_0000_0000_0000_0000_0000 262: add errnum, c1, errnum ; 0081 : 1000_0010_0100_0110_0010_0100 263: jmpr cc_busy 0 0082 : 0000_0100_0001_0000_0101_0111 264: sgio errnum r11 0083 : 0010_0100_0100_0001_0110_0000 265: 266: com work, work 0084 : 1011_1110_0000_0000_0010_0001 267: cmp work, c9 0085 : 1000_1000_0001_0111_0010_0000 268: jmpr cc_zero, 11 0086 : 0000_0100_0001_0010_0011_0001 269: 270: iext AC_9 0087 : 0101_0000_0000_0000_0000_1111 271: mov AC_9 r11 0088 : 1100_0110_0000_0000_0010_1011 272: jmpr cc_busy 0 0089 : 0000_0100_0001_0001_0011_0111 273: lgio 0 r11 008A : 1110_1000_0000_0001_0110_0000 274: jmpr cc_busy 0 008B : 0000_0100_0001_0001_0111_0111 275: lpio 0x300 errnum 008C : 1110_0110_0110_0000_0000_0100 276: nop 008D : 0000_0000_0000_0000_0000_0000 277: add errnum, c1, errnum ; 008E : 1000_0010_0100_0110_0010_0100 278: jmpr cc_busy 0 008F : 0000_0100_0001_0001_1111_0111 279: sgio errnum r11 0090 : 0010_0100_0100_0001_0110_0000 280: 281: cmp work, c13 0091 : 1000_1000_0001_0111_1010_0000 282: jmpr cc_zero, 8 ;11 0092 : 0000_0100_0001_0011_0101_0001 283: 284: iext AC_13 0093 : 0101_0000_0000_0000_0000_1111 285: mov AC_13 r11 0094 : 1100_0110_0000_0000_1010_1011 286: jmpr cc_busy 0 0095 : 0000_0100_0001_0010_1011_0111 287: lgio 0 r11 0096 : 1110_1000_0000_0001_0110_0000 288: jmpr cc_busy 0 0097 : 0000_0100_0001_0010_1111_0111 289: lpio 0x300 errnum 0098 : 1110_0110_0110_0000_0000_0100 290: nop 0099 : 0000_0000_0000_0000_0000_0000 291: add errnum, c1, errnum ; 009A : 1000_0010_0100_0110_0010_0100 292: jmpr cc_busy 0 009B : 0000_0100_0001_0011_0111_0111 293: sgio errnum r11 009C : 0010_0100_0100_0001_0110_0000 294: 295: jmp cc_uncond, return1 009D : 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] 009E : 1100_0110_0000_0000_0010_1011 301: mov 1, prf[13] 009F : 1100_0110_0000_0000_0010_1101 302: 303: nt: mov wlk0, tdgen ; call walking 0 test_r 00A0 : 1100_0110_0000_0000_0000_1000 304: mov iwlk0, itdgen 00A1 : 1100_0110_0000_0000_0000_1001 305: mvpcr +2, return2 00A2 : 1100_0110_0001_0100_1000_0110 306: jmp cc_uncond, tstgio 00A3 : 0000_0100_0000_0000_0000_1111 307: 308: mov wlk1, tdgen ; call walking 1 test_r 00A4 : 1100_0110_0000_0000_0000_1000 309: mov iwlk1, itdgen ; 00A5 : 1100_0110_0000_0000_0000_1001 310: mvpcr +2, return2 00A6 : 1100_0110_0001_0101_0000_0110 311: jmp cc_uncond, tstgio 00A7 : 0000_0100_0000_0000_0000_1111 312: 313: mov psr, tdgen ; call pseudo random ve 00A8 : 1100_0110_0000_0000_0000_1000 314: mov ipsr, itdgen 00A9 : 1100_0110_0000_0000_0000_1001 315: mvpcr +2, return2 00AA : 1100_0110_0001_0101_1000_0110 316: jmp cc_uncond, tstgio 00AB : 0000_0100_0000_0000_0000_1111 317: 318: add prf[13], c3, prf[13] ; next initial vector 00AC : 1000_0010_1101_0110_0110_1101 319: shl 1, prf[11], prf[11] ; testing routines 00AD : 1011_0010_0001_0001_0110_1011 320: jmp cc_carry, return1 00AE : 0000_1000_0101_0000_0001_0000 321: mov bitnum work 00AF : 1100_0010_0000_0001_1000_0001 322: mov 15 rdata 00B0 : 1100_0110_0000_0001_1110_0010 323: mov prf[11] prf[0] 00B1 : 1100_0010_0000_0001_0110_0000 324: cmp rdata bitnum 00B2 : 1000_1000_0010_0001_1000_0000 325: jmpr cc_ncarry 3 00B3 : 0000_0100_0001_0110_1100_0000 326: shl 15 prf[0] prf[0] 00B4 : 1011_0010_1111_0000_0000_0000 327: sub work rdata work 00B5 : 1000_1010_0001_0000_0100_0001 328: shlt work, prf[0] ; if MSB of the current 00B6 : 0111_0000_0001_0000_0000_0000 329: jmp cc_ncarry, nt 00B7 : 0000_0100_0000_0000_0000_0000 330: jmp cc_uncond return1 00B8 : 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 00B9 : 1100_0110_0001_0111_0110_0111 338: jmp cc_uncond, itdgen ; go to init the test 00BA : 0000_1000_1001_0000_0000_1111 339: ; BEGIN WRITING THE T 340: mov firstaddress, ioaddr 00BB : 1100_0010_0000_0010_0010_1110 341: wd: jmpr cc_busy, 0 00BC : 0000_0100_0001_0111_1001_0111 342: sgio+ tdata ; writing the test da 00BD : 0011_1100_0011_0000_0000_0000 343: mvpcr +2, return3 ; runs the generator 00BE : 1100_0110_0001_1000_0000_0111 344: jmp cc_uncond, tdgen 00BF : 0000_1000_1000_0000_0000_1111 345: cmp ioaddr, lastaddress ;IADEND ; is 00C0 : 1000_1000_1110_0010_0100_0000 346: jmp cc_carry, wd ; if yes: 00C1 : 0000_0100_0000_0000_0001_0000 347: 348: ; BEGIN COMPARING PAR 349: mov firstaddress, ioaddr 00C2 : 1100_0010_0000_0010_0010_1110 350: 351: mvpcr +2, return3 00C3 : 1100_0110_0001_1000_1010_0111 352: jmp cc_uncond, itdgen ; and go to init for 00C4 : 0000_1000_1001_0000_0000_1111 353: 354: wc: jmpr cc_busy, 0 ; here is the body of 00C5 : 0000_0100_0001_1000_1011_0111 355: lgio+ 0; ; reading each addres 00C6 : 1111_0100_0000_0000_0000_0000 356: jmpr cc_busy, 0 ; comparing the resul 00C7 : 0000_0100_0001_1000_1111_0111 357: lpio 0x300, rdata ; data stored before 00C8 : 1110_0110_0110_0000_0000_0010 358: cmp rdata, tdata ; 00C9 : 1000_1000_0010_0000_0110_0000 359: jmp cc_zero, noerr ; if err_or detected 00CA : 0000_0100_0000_0000_0001_0001 360: 361: iext 0xF000 00CB : 0101_0000_0000_0000_0000_1111 362: mov 0xF000 work 00CC : 1100_0110_0000_0000_0000_0001 363: add work ioaddr work 00CD : 1000_0010_0001_0001_1100_0001 364: sub work g0 work 00CE : 1000_1010_0001_0010_0000_0001 365: sub work c1 work 00CF : 1000_1010_0001_0110_0010_0001 366: jmpr cc_busy 0 00D0 : 0000_0100_0001_1010_0001_0111 367: lgio 0 work 00D1 : 1110_1000_0000_0000_0010_0000 368: jmpr cc_busy 0 00D2 : 0000_0100_0001_1010_0101_0111 369: lpio 0x300 errnum 00D3 : 1110_0110_0110_0000_0000_0100 370: nop 00D4 : 0000_0000_0000_0000_0000_0000 371: add errnum, c1, errnum ; 00D5 : 1000_0010_0100_0110_0010_0100 372: jmpr cc_busy 0 00D6 : 0000_0100_0001_1010_1101_0111 373: sgio errnum work 00D7 : 0010_0100_0100_0000_0010_0000 374: 375: noerr: mvpcr +2, return3 00D8 : 1100_0110_0001_1011_0100_0111 376: jmp cc_uncond, tdgen ; get next test_dat 00D9 : 0000_1000_1000_0000_0000_1111 377: 378: cmp ioaddr, lastaddress ; is tne last addre 00DA : 1000_1000_1110_0010_0100_0000 379: jmp cc_carry, wc ; if not go to wc 00DB : 0000_0100_0000_0000_0001_0000 380: 381: jmp cc_uncond, return2 00DC : 0000_1000_0110_0000_0000_1111 382: 383: ; prepares the next data - walking 1 384: wlk1: shl 1, tdata, tdata 00DD : 1011_0010_0001_0000_0110_0011 385: and tdata, psrmask, tdata 00DE : 1010_0110_0011_0001_0100_0011 386: jmp cc_nzero, return3 00DF : 0000_1000_0111_0000_0000_0001 387: mov 1, tdata 00E0 : 1100_0110_0000_0000_0010_0011 388: jmp cc_uncond, return3 00E1 : 0000_1000_0111_0000_0000_1111 389: ; end of walking 1 390: 391: ; prepares the next data - walking 0 392: wlk0: com tdata, tdata 00E2 : 1011_1110_0000_0000_0110_0011 393: shl 1, tdata, tdata 00E3 : 1011_0010_0001_0000_0110_0011 394: and tdata, psrmask, tdata 00E4 : 1010_0110_0011_0001_0100_0011 395: jmpr cc_nzero, +2 00E5 : 0000_0100_0001_1100_1110_0001 396: mov 1, tdata 00E6 : 1100_0110_0000_0000_0010_0011 397: com tdata, tdata 00E7 : 1011_1110_0000_0000_0110_0011 398: and tdata, psrmask, tdata 00E8 : 1010_0110_0011_0001_0100_0011 399: jmp cc_uncond, return3 00E9 : 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 00EA : 1110_0110_0100_0000_0100_0011 404: and tdata, psrmask, tdata 00EB : 1010_0110_0011_0001_0100_0011 405: jmp cc_uncond, return3 00EC : 0000_1000_0111_0000_0000_1111 406: ; end random generator 407: 408: ; init walking 1 409: iwlk1: mov prf[11], tdata 00ED : 1100_0010_0000_0001_0110_0011 410: jmp cc_uncond, return3 00EE : 0000_1000_0111_0000_0000_1111 411: 412: ; init walking 0 413: iwlk0: com prf[11], tdata 00EF : 1011_1110_0000_0001_0110_0011 414: and tdata, psrmask, tdata 00F0 : 1010_0110_0011_0001_0100_0011 415: jmp cc_uncond, return3 00F1 : 0000_1000_0111_0000_0000_1111 416: 417: ; init psr 418: ;#ifdef trap3 419: ipsr: mov b1_0_0_00_01_11111, tdata 00F2 : 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] 00F3 : 1100_0110_0000_0011_1110_0000 424: sub prf[0] bitnum prf[0] 00F4 : 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 00F5 : 1010_1010_0011_0000_0000_0011 432: spio tdata, 0x201 00F6 : 0010_0000_0011_0010_0000_0001 433: mov prf[13], tdata 00F7 : 1100_0010_0000_0001_1010_0011 434: spio tdata, 0x200 00F8 : 0010_0000_0011_0010_0000_0000 435: nop 00F9 : 0000_0000_0000_0000_0000_0000 436: nop 00FA : 0000_0000_0000_0000_0000_0000 437: lpio 0x202, tdata 00FB : 1110_0110_0100_0000_0100_0011 438: jmp cc_uncond, return3 00FC : 0000_1000_0111_0000_0000_1111 439: Source file read, 0 error(s), 0 warning(s).