|
| 1 | +;========================================================== |
| 2 | +; ASM Testcase |
| 3 | +; flype, 2015-10-05, v1.0 |
| 4 | +;========================================================== |
| 5 | +; https://github.com/flype44/M68K/blob/master/DCache/dcache-test-3.asm |
| 6 | +;========================================================== |
| 7 | + |
| 8 | +assert_zero equ $00D0000C |
| 9 | + |
| 10 | +COUNT EQU 255 ; <<<< Modify it (bytes count in array) |
| 11 | +SPACER EQU $8000 ; <<<< Modify it (32K for ex) |
| 12 | + |
| 13 | +;========================================================== |
| 14 | + |
| 15 | +; DC.L 0 |
| 16 | +; DC.L Main |
| 17 | + section .fastram |
| 18 | + |
| 19 | +;========================================================== |
| 20 | +; MAIN |
| 21 | +;========================================================== |
| 22 | + |
| 23 | +Main: |
| 24 | + jsr ArrayLoad ; Load buffers |
| 25 | + jsr ArrayInit ; Init buffers |
| 26 | + jsr ArrayFill ; Fill buffers |
| 27 | + jsr SelfTest ; Check buffers |
| 28 | +MainExit: |
| 29 | + tst $0 ; Flush pipelines |
| 30 | + stop #-1 ; Stop sim |
| 31 | + |
| 32 | +;========================================================== |
| 33 | +; Routines |
| 34 | +;========================================================== |
| 35 | + |
| 36 | + section .chipram |
| 37 | + |
| 38 | +ArrayLoad: |
| 39 | + lea BUFFER0,a0 ; |
| 40 | + lea BUFFER1,a1 ; |
| 41 | + lea BUFFER2,a2 ; |
| 42 | + lea BUFFER3,a3 ; |
| 43 | + lea BUFFER4,a4 ; |
| 44 | + lea BUFFER5,a5 ; |
| 45 | + lea BUFFER6,a6 ; |
| 46 | + rts |
| 47 | + |
| 48 | +;========================================================== |
| 49 | + |
| 50 | +ArrayInit: |
| 51 | + move.b #0,(a0)+ ; 1rst value in a0 |
| 52 | + move.b #(COUNT-1),(a1)+ ; 1rst value in a1 |
| 53 | + move.w #0,(a2)+ ; 1rst value in a2 |
| 54 | + move.w #(COUNT-1),(a3)+ ; 1rst value in a3 |
| 55 | + move.l #0,(a4)+ ; 1rst value in a4 |
| 56 | + move.l #(COUNT-1),(a5)+ ; 1rst value in a5 |
| 57 | + move.l #(COUNT-1),(a6)+ ; 1rst value in a6 |
| 58 | + rts |
| 59 | + |
| 60 | +;========================================================== |
| 61 | + |
| 62 | + section .fastram |
| 63 | + |
| 64 | +ArrayFill: |
| 65 | + tst.b -1(a1) ; last value in a6 array ? |
| 66 | + beq ArrayFillExit ; then exit |
| 67 | + move.b -1(a0),(a0)+ ; 0,1,2,3...(COUNT-1) |
| 68 | + move.b -1(a1),(a1)+ ; (COUNT-1)..3,2,1,0 |
| 69 | + move.w -2(a2),(a2)+ ; 0,1,2,3...(COUNT-1) |
| 70 | + move.w -2(a3),(a3)+ ; (COUNT-1)..3,2,1,0 |
| 71 | + move.l -4(a4),(a4)+ ; 0,1,2,3...(COUNT-1) |
| 72 | + move.l -4(a5),(a5)+ ; (COUNT-1)..3,2,1,0 |
| 73 | + move.l -4(a6),(a6)+ ; (COUNT-1)..3,2,1,0 |
| 74 | + addi.b #1,-1(a0) ; increment value in a0 |
| 75 | + subi.b #1,-1(a1) ; decrement value in a1 |
| 76 | + addi.w #1,-2(a2) ; increment value in a2 |
| 77 | + subi.w #1,-2(a3) ; decrement value in a3 |
| 78 | + addi.l #1,-4(a4) ; increment value in a4 |
| 79 | + subi.l #1,-4(a5) ; decrement value in a5 |
| 80 | + subi.l #1,-4(a6) ; decrement value in a6 |
| 81 | + bra ArrayFill ; continue |
| 82 | +ArrayFillExit: |
| 83 | + rts |
| 84 | + |
| 85 | +;========================================================== |
| 86 | + |
| 87 | +SelfTest: |
| 88 | + jsr ArrayLoad ; Load buffers |
| 89 | + adda.l #(COUNT*1),a1 ; Mem block + Size |
| 90 | + adda.l #(COUNT*2),a3 ; Mem block + Size |
| 91 | + adda.l #(COUNT*4),a5 ; Mem block + Size |
| 92 | + adda.l #(COUNT*4),a6 ; Mem block + Size |
| 93 | + move.l #(COUNT-1),d0 ; Loop counter |
| 94 | +SelfTestLoop: |
| 95 | + move.l #$FF,d1 ; Assert register != 0 |
| 96 | + move.b -(a1),d1 ; store a1 in d1 and decrement a1 |
| 97 | + sub.b (a0)+,d1 ; d1 should be 0 |
| 98 | + move.l d1,assert_zero ; assert 0 |
| 99 | + move.l #$FFFF,d1 ; Assert register != 0 |
| 100 | + move.w -(a3),d1 ; store a3 in d1 and decrement a3 |
| 101 | + sub.w (a2)+,d1 ; d1 should be 0 |
| 102 | + move.l d1,assert_zero ; assert 0 |
| 103 | + move.l #$FFFFFFFF,d1 ; Assert register != 0 |
| 104 | + move.l -(a5),d1 ; store a5 in d1 and decrement a5 |
| 105 | + sub.l (a4)+,d1 ; d1 should be 0 |
| 106 | + move.l d1,assert_zero ; assert 0 |
| 107 | + dbra d0,SelfTestLoop ; continue |
| 108 | + rts |
| 109 | + |
| 110 | +;========================================================== |
| 111 | +; DATA SECTION |
| 112 | +;========================================================== |
| 113 | + |
| 114 | + section .chipram |
| 115 | + |
| 116 | +BUFFER0: |
| 117 | + ds.b COUNT |
| 118 | + ds.b SPACER |
| 119 | + even |
| 120 | + |
| 121 | +BUFFER1: |
| 122 | + ds.b COUNT |
| 123 | + ds.b SPACER |
| 124 | + even |
| 125 | + |
| 126 | + section .fastram |
| 127 | + |
| 128 | +BUFFER2: |
| 129 | + ds.w COUNT |
| 130 | + ds.b SPACER |
| 131 | + even |
| 132 | + |
| 133 | +BUFFER3: |
| 134 | + ds.w COUNT |
| 135 | + ds.b SPACER |
| 136 | + even |
| 137 | + |
| 138 | +BUFFER4: |
| 139 | + ds.l COUNT |
| 140 | + ds.b SPACER |
| 141 | + even |
| 142 | + |
| 143 | + section .chipram |
| 144 | + |
| 145 | +BUFFER5: |
| 146 | + ds.l COUNT |
| 147 | + ds.b SPACER |
| 148 | + even |
| 149 | + |
| 150 | + section .fastram |
| 151 | + |
| 152 | +BUFFER6: |
| 153 | + ds.l COUNT |
| 154 | + ds.b SPACER |
| 155 | + even |
| 156 | + |
| 157 | +;========================================================== |
| 158 | + |
| 159 | + END |
| 160 | + |
| 161 | +;========================================================== |
0 commit comments