Assembler for MIMD-TRAP2/3 (c) V.Angelov, v3.6, Dec 2007 SVN Revision 0, SVN Date 2007-12-27 Please send any comments to: angelov@kip.uni-heidelberg.de 17:58:30 / 21 Apr 2008 Source code file: src/DBKtst.asm Memory initialisation file: Log file: wrk/cpu0.log Program memory size in words: 4096 Default constants, read from /cad/tools/bin/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 = 0 1: ; Test program for D-bank memory 2: ; CPU0 performs full test of the all D-bank locati 3: ; The number of the errors is stored in CONST8 - a 4: 5: ; DEFINITIONS, USED IN THE PROGRAM CODE: 6: 7: #def work=PRF[1] ; register for current opera 8: #def rdata=PRF[2] ; data red by test_programs 9: #def tdata=PRF[3] ; test_vector to be writen 10: #def errnum=PRF[4] ; contains the number of err 11: #def return1=PRF[5] ; return address (at first l 12: #def return2=PRF[6] ; return address (at second 13: #def return3=PRF[7] ; return address (at third l 14: #def tdgen=PRF[8] ; test data generator code l 15: #def itdgen=PRF[9] ; init tdgen code label 16: #def psrmask=PRF[10] ; mask for test_vector 17: #def bitnum=PRF[12] ; =32 minus the number of bi 18: ; prf11 and prf13 are used inside the testing rout 19: 20: #def ioaddr=PRF[14] ; contains the autoincrement 21: #def errstore=PRF[15] ; autoincrement address for 22: 23: #def firstaddress=grf[1] ; first address of the t 24: #def lastaddress=grf[2] ; last address of the te 25: 26: #def MEMRW=0xD000 ; the address of the registe 27: #def IAFIRST=0xE000 ; first address of IMEM 28: #def IADEND =0xEFFF ; last address of IMEM 29: #def DAFRSTG=0xE000 ; first address of DMEM via 30: #def DADENDG=0xE3FF ; last address of DMEM via G 31: #def DAFIRST=0x0000 ; first address of DMEM as R 32: #def DADEND =0x0FFC ; last address of DMEM as RA 33: #def DBFST=0xF000 ; first address of DBANK (tr 34: #def DBEND=0xF0FF ; last address of DBANK (tra 35: 36: ; masks of certain length 37: #def BITMASK24=0x0FFFFFF 38: #def BITMASK32=0xFFFFFFFF 39: #def BITMASK12=0x00000FFF 40: #def BITMASK13=0x00001FFF 41: 42: start: nop 0000 : 0000_0000_0000_0000_0000_0000 43: #ifdef cpu0 44: mov c0 errnum ; clear t 0001 : 1100_0010_0000_0110_0000_0100 45: 46: ;#ifdef trap3 47: ; DBANK test here 48: iext DBFST 0002 : 0101_0000_0000_0000_0000_1111 49: mov DBFST firstaddress 0003 : 1100_0110_0000_0000_0001_0001 50: iext DBEND 0004 : 0101_0000_0000_0000_0000_1111 51: mov DBEND lastaddress 0005 : 1100_0110_0001_1111_1111_0010 52: mov c0 bitnum 0006 : 1100_0010_0000_0110_0000_1100 53: iext BITMASK32 0007 : 0101_0001_1111_1111_1111_1111 54: mov BITMASK32 psrmask 0008 : 1100_0111_1111_1111_1110_1010 55: mvpcr +2, return1 0009 : 1100_0110_0000_0001_0110_0101 56: jmp cc_uncond cltst 000A : 0000_0100_0000_0000_0000_1111 57: 58: ;#endif 59: 60: jmpr cc_busy 0 000B : 0000_0100_0000_0001_0111_0111 61: sgio errnum 0xC00 ; store the 000C : 0010_1000_0100_1100_0000_0000 62: 63: lp: jmpr cc_busy, 0 ; ... tra 000D : 0000_0100_0000_0001_1011_0111 64: iext 0x0A20 000E : 0101_0000_0000_0000_0000_0000 65: mov 0x0A20, work 000F : 1100_0111_0100_0100_0000_0001 66: shl +1, c5, rdata 0010 : 1011_0010_0001_0110_1010_0010 67: add work, rdata, work 0011 : 1000_0010_0001_0000_0100_0001 68: mov b0_0111, rdata 0012 : 1100_0110_0000_0000_1110_0010 69: sgio rdata, work 0013 : 0010_0100_0010_0000_0010_0000 70: jmpr cc_busy, 0 0014 : 0000_0100_0000_0010_1001_0111 71: sgio rdata 0xA20 0015 : 0010_1000_0010_1010_0010_0000 72: mov 0x012, work 0016 : 1100_0110_0000_0010_0100_0001 73: sgio work, 0xA04 ; ... low p 0017 : 0010_1000_0001_1010_0000_0100 74: end: jmp cc_uncond, end ; END OF TH 0018 : 0000_0100_0000_0000_0000_1111 75: *** Include file "TST.asm" 1: 2: 3: 4: 5: 6: 7: cltst: mov 1, prf[11] 0019 : 1100_0110_0000_0000_0010_1011 8: mov 1, prf[13] 001A : 1100_0110_0000_0000_0010_1101 9: 10: nt: mov wlk0, tdgen ; call walkin 001B : 1100_0110_0000_0000_0000_1000 11: mov iwlk0, itdgen 001C : 1100_0110_0000_0000_0000_1001 12: mvpcr +2, return2 001D : 1100_0110_0000_0011_1110_0110 13: jmp cc_uncond, tstgio 001E : 0000_0100_0000_0000_0000_1111 14: 15: mov wlk1, tdgen ; call walkin 001F : 1100_0110_0000_0000_0000_1000 16: mov iwlk1, itdgen ; 0020 : 1100_0110_0000_0000_0000_1001 17: mvpcr +2, return2 0021 : 1100_0110_0000_0100_0110_0110 18: jmp cc_uncond, tstgio 0022 : 0000_0100_0000_0000_0000_1111 19: 20: mov psr, tdgen ; call pseudo 0023 : 1100_0110_0000_0000_0000_1000 21: mov ipsr, itdgen 0024 : 1100_0110_0000_0000_0000_1001 22: mvpcr +2, return2 0025 : 1100_0110_0000_0100_1110_0110 23: jmp cc_uncond, tstgio 0026 : 0000_0100_0000_0000_0000_1111 24: 25: add prf[13], c3, prf[13] ; next init 0027 : 1000_0010_1101_0110_0110_1101 26: shl 1, prf[11], prf[11] ; testing r 0028 : 1011_0010_0001_0001_0110_1011 27: jmp cc_carry, return1 0029 : 0000_1000_0101_0000_0001_0000 28: mov bitnum work 002A : 1100_0010_0000_0001_1000_0001 29: mov 15 rdata 002B : 1100_0110_0000_0001_1110_0010 30: mov prf[11] prf[0] 002C : 1100_0010_0000_0001_0110_0000 31: cmp rdata bitnum 002D : 1000_1000_0010_0001_1000_0000 32: jmpr cc_ncarry 3 002E : 0000_0100_0000_0110_0010_0000 33: shl 15 prf[0] prf[0] 002F : 1011_0010_1111_0000_0000_0000 34: sub work rdata work 0030 : 1000_1010_0001_0000_0100_0001 35: shlt work, prf[0] ; if MSB of th 0031 : 0111_0000_0001_0000_0000_0000 36: jmp cc_ncarry, nt 0032 : 0000_0100_0000_0000_0000_0000 37: jmp cc_uncond return1 0033 : 0000_1000_0101_0000_0000_1111 38: ; END OF THE TESTING ROUTINE 39: 40: 41: 42: ; BEGIN OF THE SUBROUTINE (used by testin 43: ; rolls all addresses and tests by w/r th 44: tstgio: mvpcr +2, return3 0034 : 1100_0110_0000_0110_1100_0111 45: jmp cc_uncond, itdgen ; go to ini 0035 : 0000_1000_1001_0000_0000_1111 46: ; BEGIN WRI 47: mov firstaddress, ioaddr 0036 : 1100_0010_0000_0010_0010_1110 48: wd: jmpr cc_busy, 0 0037 : 0000_0100_0000_0110_1111_0111 49: sgio+ tdata ; writing t 0038 : 0011_1100_0011_0000_0000_0000 50: mvpcr +2, return3 ; runs the 0039 : 1100_0110_0000_0111_0110_0111 51: jmp cc_uncond, tdgen 003A : 0000_1000_1000_0000_0000_1111 52: cmp ioaddr, lastaddress ;IADEND 003B : 1000_1000_1110_0010_0100_0000 53: jmp cc_carry, wd ; if yes: 003C : 0000_0100_0000_0000_0001_0000 54: 55: ; BEGIN COM 56: mov firstaddress, ioaddr 003D : 1100_0010_0000_0010_0010_1110 57: 58: mvpcr +2, return3 003E : 1100_0110_0000_1000_0000_0111 59: jmp cc_uncond, itdgen ; and go to 003F : 0000_1000_1001_0000_0000_1111 60: 61: wc: jmpr cc_busy, 0 ; here is t 0040 : 0000_0100_0000_1000_0001_0111 62: lgio+ 0; ; reading e 0041 : 1111_0100_0000_0000_0000_0000 63: jmpr cc_busy, 0 ; comparing 0042 : 0000_0100_0000_1000_0101_0111 64: lpio 0x300, rdata ; data stor 0043 : 1110_0110_0110_0000_0000_0010 65: cmp rdata, tdata ; 0044 : 1000_1000_0010_0000_0110_0000 66: jmp cc_zero, noerr ; if err_or 0045 : 0000_0100_0000_0000_0001_0001 67: add errnum, c1, errnum ; errnum is 0046 : 1000_0010_0100_0110_0010_0100 68: 69: noerr: mvpcr +2, return3 0047 : 1100_0110_0000_1001_0010_0111 70: jmp cc_uncond, tdgen ; get nex 0048 : 0000_1000_1000_0000_0000_1111 71: 72: cmp ioaddr, lastaddress ; is tne 0049 : 1000_1000_1110_0010_0100_0000 73: jmp cc_carry, wc ; if not 004A : 0000_0100_0000_0000_0001_0000 74: 75: jmp cc_uncond, return2 004B : 0000_1000_0110_0000_0000_1111 76: 77: ; prepares the next data - walking 1 78: wlk1: shl 1, tdata, tdata 004C : 1011_0010_0001_0000_0110_0011 79: and tdata, psrmask, tdata 004D : 1010_0110_0011_0001_0100_0011 80: jmp cc_nzero, return3 004E : 0000_1000_0111_0000_0000_0001 81: mov 1, tdata 004F : 1100_0110_0000_0000_0010_0011 82: jmp cc_uncond, return3 0050 : 0000_1000_0111_0000_0000_1111 83: ; end of walking 1 84: 85: ; prepares the next data - walking 0 86: wlk0: com tdata, tdata 0051 : 1011_1110_0000_0000_0110_0011 87: shl 1, tdata, tdata 0052 : 1011_0010_0001_0000_0110_0011 88: and tdata, psrmask, tdata 0053 : 1010_0110_0011_0001_0100_0011 89: jmpr cc_nzero, +2 0054 : 0000_0100_0000_1010_1100_0001 90: mov 1, tdata 0055 : 1100_0110_0000_0000_0010_0011 91: com tdata, tdata 0056 : 1011_1110_0000_0000_0110_0011 92: and tdata, psrmask, tdata 0057 : 1010_0110_0011_0001_0100_0011 93: jmp cc_uncond, return3 0058 : 0000_1000_0111_0000_0000_1111 94: ; end of walking 0 95: 96: ; prepares the next data by pseudo random generato 97: psr: lpio 0x202, tdata 0059 : 1110_0110_0100_0000_0100_0011 98: and tdata, psrmask, tdata 005A : 1010_0110_0011_0001_0100_0011 99: jmp cc_uncond, return3 005B : 0000_1000_0111_0000_0000_1111 100: ; end random generator 101: 102: ; init walking 1 103: iwlk1: mov prf[11], tdata 005C : 1100_0010_0000_0001_0110_0011 104: jmp cc_uncond, return3 005D : 0000_1000_0111_0000_0000_1111 105: 106: ; init walking 0 107: iwlk0: com prf[11], tdata 005E : 1011_1110_0000_0001_0110_0011 108: and tdata, psrmask, tdata 005F : 1010_0110_0011_0001_0100_0011 109: jmp cc_uncond, return3 0060 : 0000_1000_0111_0000_0000_1111 110: 111: ; init psr 112: ;#ifdef trap3 113: ipsr: mov b1_0_0_00_01_11111, tdata 0061 : 1100_0111_0000_0111_1110_0011 114: ;#else 115: ;ipsr: mov b1_0_0_00_01_1111, tdata 116: ;#endif 117: mov 31 prf[0] 0062 : 1100_0110_0000_0011_1110_0000 118: sub prf[0] bitnum prf[0] 0063 : 1000_1010_0000_0001_1000_0000 119: ;#ifdef trap3 120: ;#else 121: ; cmp prf[0] 16 122: ; jmpr cc_carry 2 123: ; mov 15 prf[0] 124: ;#endif 125: or tdata prf[0] tdata 0064 : 1010_1010_0011_0000_0000_0011 126: spio tdata, 0x201 0065 : 0010_0000_0011_0010_0000_0001 127: mov prf[13], tdata 0066 : 1100_0010_0000_0001_1010_0011 128: spio tdata, 0x200 0067 : 0010_0000_0011_0010_0000_0000 129: nop 0068 : 0000_0000_0000_0000_0000_0000 130: nop 0069 : 0000_0000_0000_0000_0000_0000 131: lpio 0x202, tdata 006A : 1110_0110_0100_0000_0100_0011 132: jmp cc_uncond, return3 006B : 0000_1000_0111_0000_0000_1111 *** End of include file src/TST.asm 77: 78: 79: #endif Source file read, 0 error(s), 0 warning(s).