Yes, I find it really surprising and strange how scrolling is so slow on the Oric. I also notice the fast bitwise scrolling on the ZX Spectrum — how the game runs smoothly, and on top of that, there's still time for the game logic. I think the screen scrolling on the Oric is even slower than on the Apple II.
Here’s one of the attempts at scrolling. It’s implemented using a partially unrolled procedure, with a loop only along the X-axis. It’s obviously a bit faster, as seen from the length of the clip — one is 1:47, and the other is 1:17 (in both examples, the maskable interrupt is disabled). There’s a noticeable wavy vertical misalignment due to the way the screen is copied and refreshed.
Code: Select all
_scrollPage
ldx #39
loop
lda $a000 + 40 + 0 * 40,x
sta $a000 + 0 * 40,x
lda $a000 + 40 + 1 * 40,x
sta $a000 + 1 * 40,x
lda $a000 + 40 + 2 * 40,x
sta $a000 + 2 * 40,x
lda $a000 + 40 + 3 * 40,x
sta $a000 + 3 * 40,x
lda $a000 + 40 + 4 * 40,x
sta $a000 + 4 * 40,x
lda $a000 + 40 + 5 * 40,x
sta $a000 + 5 * 40,x
lda $a000 + 40 + 6 * 40,x
sta $a000 + 6 * 40,x
lda $a000 + 40 + 7 * 40,x
sta $a000 + 7 * 40,x
lda $a000 + 40 + 8 * 40,x
sta $a000 + 8 * 40,x
lda $a000 + 40 + 9 * 40,x
sta $a000 + 9 * 40,x
lda $a000 + 40 + 10 * 40,x
sta $a000 + 10 * 40,x
lda $a000 + 40 + 11 * 40,x
sta $a000 + 11 * 40,x
lda $a000 + 40 + 12 * 40,x
sta $a000 + 12 * 40,x
lda $a000 + 40 + 13 * 40,x
sta $a000 + 13 * 40,x
lda $a000 + 40 + 14 * 40,x
sta $a000 + 14 * 40,x
lda $a000 + 40 + 15 * 40,x
sta $a000 + 15 * 40,x
lda $a000 + 40 + 16 * 40,x
sta $a000 + 16 * 40,x
lda $a000 + 40 + 17 * 40,x
sta $a000 + 17 * 40,x
lda $a000 + 40 + 18 * 40,x
sta $a000 + 18 * 40,x
lda $a000 + 40 + 19 * 40,x
sta $a000 + 19 * 40,x
lda $a000 + 40 + 20 * 40,x
sta $a000 + 20 * 40,x
lda $a000 + 40 + 21 * 40,x
sta $a000 + 21 * 40,x
lda $a000 + 40 + 22 * 40,x
sta $a000 + 22 * 40,x
lda $a000 + 40 + 23 * 40,x
sta $a000 + 23 * 40,x
lda $a000 + 40 + 24 * 40,x
sta $a000 + 24 * 40,x
lda $a000 + 40 + 25 * 40,x
sta $a000 + 25 * 40,x
lda $a000 + 40 + 26 * 40,x
sta $a000 + 26 * 40,x
lda $a000 + 40 + 27 * 40,x
sta $a000 + 27 * 40,x
lda $a000 + 40 + 28 * 40,x
sta $a000 + 28 * 40,x
lda $a000 + 40 + 29 * 40,x
sta $a000 + 29 * 40,x
lda $a000 + 40 + 30 * 40,x
sta $a000 + 30 * 40,x
lda $a000 + 40 + 31 * 40,x
sta $a000 + 31 * 40,x
lda $a000 + 40 + 32 * 40,x
sta $a000 + 32 * 40,x
lda $a000 + 40 + 33 * 40,x
sta $a000 + 33 * 40,x
lda $a000 + 40 + 34 * 40,x
sta $a000 + 34 * 40,x
lda $a000 + 40 + 35 * 40,x
sta $a000 + 35 * 40,x
lda $a000 + 40 + 36 * 40,x
sta $a000 + 36 * 40,x
lda $a000 + 40 + 37 * 40,x
sta $a000 + 37 * 40,x
lda $a000 + 40 + 38 * 40,x
sta $a000 + 38 * 40,x
lda $a000 + 40 + 39 * 40,x
sta $a000 + 39 * 40,x
lda $a000 + 40 + 40 * 40,x
sta $a000 + 40 * 40,x
lda $a000 + 40 + 41 * 40,x
sta $a000 + 41 * 40,x
lda $a000 + 40 + 42 * 40,x
sta $a000 + 42 * 40,x
lda $a000 + 40 + 43 * 40,x
sta $a000 + 43 * 40,x
lda $a000 + 40 + 44 * 40,x
sta $a000 + 44 * 40,x
lda $a000 + 40 + 45 * 40,x
sta $a000 + 45 * 40,x
lda $a000 + 40 + 46 * 40,x
sta $a000 + 46 * 40,x
lda $a000 + 40 + 47 * 40,x
sta $a000 + 47 * 40,x
lda $a000 + 40 + 48 * 40,x
sta $a000 + 48 * 40,x
lda $a000 + 40 + 49 * 40,x
sta $a000 + 49 * 40,x
lda $a000 + 40 + 50 * 40,x
sta $a000 + 50 * 40,x
lda $a000 + 40 + 51 * 40,x
sta $a000 + 51 * 40,x
lda $a000 + 40 + 52 * 40,x
sta $a000 + 52 * 40,x
lda $a000 + 40 + 53 * 40,x
sta $a000 + 53 * 40,x
lda $a000 + 40 + 54 * 40,x
sta $a000 + 54 * 40,x
lda $a000 + 40 + 55 * 40,x
sta $a000 + 55 * 40,x
lda $a000 + 40 + 56 * 40,x
sta $a000 + 56 * 40,x
lda $a000 + 40 + 57 * 40,x
sta $a000 + 57 * 40,x
lda $a000 + 40 + 58 * 40,x
sta $a000 + 58 * 40,x
lda $a000 + 40 + 59 * 40,x
sta $a000 + 59 * 40,x
lda $a000 + 40 + 60 * 40,x
sta $a000 + 60 * 40,x
lda $a000 + 40 + 61 * 40,x
sta $a000 + 61 * 40,x
lda $a000 + 40 + 62 * 40,x
sta $a000 + 62 * 40,x
lda $a000 + 40 + 63 * 40,x
sta $a000 + 63 * 40,x
lda $a000 + 40 + 64 * 40,x
sta $a000 + 64 * 40,x
lda $a000 + 40 + 65 * 40,x
sta $a000 + 65 * 40,x
lda $a000 + 40 + 66 * 40,x
sta $a000 + 66 * 40,x
lda $a000 + 40 + 67 * 40,x
sta $a000 + 67 * 40,x
lda $a000 + 40 + 68 * 40,x
sta $a000 + 68 * 40,x
lda $a000 + 40 + 69 * 40,x
sta $a000 + 69 * 40,x
lda $a000 + 40 + 70 * 40,x
sta $a000 + 70 * 40,x
lda $a000 + 40 + 71 * 40,x
sta $a000 + 71 * 40,x
lda $a000 + 40 + 72 * 40,x
sta $a000 + 72 * 40,x
lda $a000 + 40 + 73 * 40,x
sta $a000 + 73 * 40,x
lda $a000 + 40 + 74 * 40,x
sta $a000 + 74 * 40,x
lda $a000 + 40 + 75 * 40,x
sta $a000 + 75 * 40,x
lda $a000 + 40 + 76 * 40,x
sta $a000 + 76 * 40,x
lda $a000 + 40 + 77 * 40,x
sta $a000 + 77 * 40,x
lda $a000 + 40 + 78 * 40,x
sta $a000 + 78 * 40,x
lda $a000 + 40 + 79 * 40,x
sta $a000 + 79 * 40,x
lda $a000 + 40 + 80 * 40,x
sta $a000 + 80 * 40,x
lda $a000 + 40 + 81 * 40,x
sta $a000 + 81 * 40,x
lda $a000 + 40 + 82 * 40,x
sta $a000 + 82 * 40,x
lda $a000 + 40 + 83 * 40,x
sta $a000 + 83 * 40,x
lda $a000 + 40 + 84 * 40,x
sta $a000 + 84 * 40,x
lda $a000 + 40 + 85 * 40,x
sta $a000 + 85 * 40,x
lda $a000 + 40 + 86 * 40,x
sta $a000 + 86 * 40,x
lda $a000 + 40 + 87 * 40,x
sta $a000 + 87 * 40,x
lda $a000 + 40 + 88 * 40,x
sta $a000 + 88 * 40,x
lda $a000 + 40 + 89 * 40,x
sta $a000 + 89 * 40,x
lda $a000 + 40 + 90 * 40,x
sta $a000 + 90 * 40,x
lda $a000 + 40 + 91 * 40,x
sta $a000 + 91 * 40,x
lda $a000 + 40 + 92 * 40,x
sta $a000 + 92 * 40,x
lda $a000 + 40 + 93 * 40,x
sta $a000 + 93 * 40,x
lda $a000 + 40 + 94 * 40,x
sta $a000 + 94 * 40,x
lda $a000 + 40 + 95 * 40,x
sta $a000 + 95 * 40,x
lda $a000 + 40 + 96 * 40,x
sta $a000 + 96 * 40,x
lda $a000 + 40 + 97 * 40,x
sta $a000 + 97 * 40,x
lda $a000 + 40 + 98 * 40,x
sta $a000 + 98 * 40,x
lda $a000 + 40 + 99 * 40,x
sta $a000 + 99 * 40,x
lda $a000 + 40 + 100 * 40,x
sta $a000 + 100 * 40,x
lda $a000 + 40 + 101 * 40,x
sta $a000 + 101 * 40,x
lda $a000 + 40 + 102 * 40,x
sta $a000 + 102 * 40,x
lda $a000 + 40 + 103 * 40,x
sta $a000 + 103 * 40,x
lda $a000 + 40 + 104 * 40,x
sta $a000 + 104 * 40,x
lda $a000 + 40 + 105 * 40,x
sta $a000 + 105 * 40,x
lda $a000 + 40 + 106 * 40,x
sta $a000 + 106 * 40,x
lda $a000 + 40 + 107 * 40,x
sta $a000 + 107 * 40,x
lda $a000 + 40 + 108 * 40,x
sta $a000 + 108 * 40,x
lda $a000 + 40 + 109 * 40,x
sta $a000 + 109 * 40,x
lda $a000 + 40 + 110 * 40,x
sta $a000 + 110 * 40,x
lda $a000 + 40 + 111 * 40,x
sta $a000 + 111 * 40,x
lda $a000 + 40 + 112 * 40,x
sta $a000 + 112 * 40,x
lda $a000 + 40 + 113 * 40,x
sta $a000 + 113 * 40,x
lda $a000 + 40 + 114 * 40,x
sta $a000 + 114 * 40,x
lda $a000 + 40 + 115 * 40,x
sta $a000 + 115 * 40,x
lda $a000 + 40 + 116 * 40,x
sta $a000 + 116 * 40,x
lda $a000 + 40 + 117 * 40,x
sta $a000 + 117 * 40,x
lda $a000 + 40 + 118 * 40,x
sta $a000 + 118 * 40,x
lda $a000 + 40 + 119 * 40,x
sta $a000 + 119 * 40,x
lda $a000 + 40 + 120 * 40,x
sta $a000 + 120 * 40,x
lda $a000 + 40 + 121 * 40,x
sta $a000 + 121 * 40,x
lda $a000 + 40 + 122 * 40,x
sta $a000 + 122 * 40,x
lda $a000 + 40 + 123 * 40,x
sta $a000 + 123 * 40,x
lda $a000 + 40 + 124 * 40,x
sta $a000 + 124 * 40,x
lda $a000 + 40 + 125 * 40,x
sta $a000 + 125 * 40,x
lda $a000 + 40 + 126 * 40,x
sta $a000 + 126 * 40,x
lda $a000 + 40 + 127 * 40,x
sta $a000 + 127 * 40,x
lda $a000 + 40 + 128 * 40,x
sta $a000 + 128 * 40,x
lda $a000 + 40 + 129 * 40,x
sta $a000 + 129 * 40,x
lda $a000 + 40 + 130 * 40,x
sta $a000 + 130 * 40,x
lda $a000 + 40 + 131 * 40,x
sta $a000 + 131 * 40,x
lda $a000 + 40 + 132 * 40,x
sta $a000 + 132 * 40,x
lda $a000 + 40 + 133 * 40,x
sta $a000 + 133 * 40,x
lda $a000 + 40 + 134 * 40,x
sta $a000 + 134 * 40,x
lda $a000 + 40 + 135 * 40,x
sta $a000 + 135 * 40,x
lda $a000 + 40 + 136 * 40,x
sta $a000 + 136 * 40,x
lda $a000 + 40 + 137 * 40,x
sta $a000 + 137 * 40,x
lda $a000 + 40 + 138 * 40,x
sta $a000 + 138 * 40,x
lda $a000 + 40 + 139 * 40,x
sta $a000 + 139 * 40,x
lda $a000 + 40 + 140 * 40,x
sta $a000 + 140 * 40,x
lda $a000 + 40 + 141 * 40,x
sta $a000 + 141 * 40,x
lda $a000 + 40 + 142 * 40,x
sta $a000 + 142 * 40,x
lda $a000 + 40 + 143 * 40,x
sta $a000 + 143 * 40,x
lda $a000 + 40 + 144 * 40,x
sta $a000 + 144 * 40,x
lda $a000 + 40 + 145 * 40,x
sta $a000 + 145 * 40,x
lda $a000 + 40 + 146 * 40,x
sta $a000 + 146 * 40,x
lda $a000 + 40 + 147 * 40,x
sta $a000 + 147 * 40,x
lda $a000 + 40 + 148 * 40,x
sta $a000 + 148 * 40,x
lda $a000 + 40 + 149 * 40,x
sta $a000 + 149 * 40,x
lda $a000 + 40 + 150 * 40,x
sta $a000 + 150 * 40,x
lda $a000 + 40 + 151 * 40,x
sta $a000 + 151 * 40,x
lda $a000 + 40 + 152 * 40,x
sta $a000 + 152 * 40,x
lda $a000 + 40 + 153 * 40,x
sta $a000 + 153 * 40,x
lda $a000 + 40 + 154 * 40,x
sta $a000 + 154 * 40,x
lda $a000 + 40 + 155 * 40,x
sta $a000 + 155 * 40,x
lda $a000 + 40 + 156 * 40,x
sta $a000 + 156 * 40,x
lda $a000 + 40 + 157 * 40,x
sta $a000 + 157 * 40,x
lda $a000 + 40 + 158 * 40,x
sta $a000 + 158 * 40,x
lda $a000 + 40 + 159 * 40,x
sta $a000 + 159 * 40,x
lda $a000 + 40 + 160 * 40,x
sta $a000 + 160 * 40,x
lda $a000 + 40 + 161 * 40,x
sta $a000 + 161 * 40,x
lda $a000 + 40 + 162 * 40,x
sta $a000 + 162 * 40,x
lda $a000 + 40 + 163 * 40,x
sta $a000 + 163 * 40,x
lda $a000 + 40 + 164 * 40,x
sta $a000 + 164 * 40,x
lda $a000 + 40 + 165 * 40,x
sta $a000 + 165 * 40,x
lda $a000 + 40 + 166 * 40,x
sta $a000 + 166 * 40,x
lda $a000 + 40 + 167 * 40,x
sta $a000 + 167 * 40,x
lda $a000 + 40 + 168 * 40,x
sta $a000 + 168 * 40,x
lda $a000 + 40 + 169 * 40,x
sta $a000 + 169 * 40,x
lda $a000 + 40 + 170 * 40,x
sta $a000 + 170 * 40,x
lda $a000 + 40 + 171 * 40,x
sta $a000 + 171 * 40,x
lda $a000 + 40 + 172 * 40,x
sta $a000 + 172 * 40,x
lda $a000 + 40 + 173 * 40,x
sta $a000 + 173 * 40,x
lda $a000 + 40 + 174 * 40,x
sta $a000 + 174 * 40,x
lda $a000 + 40 + 175 * 40,x
sta $a000 + 175 * 40,x
lda $a000 + 40 + 176 * 40,x
sta $a000 + 176 * 40,x
lda $a000 + 40 + 177 * 40,x
sta $a000 + 177 * 40,x
lda $a000 + 40 + 178 * 40,x
sta $a000 + 178 * 40,x
lda $a000 + 40 + 179 * 40,x
sta $a000 + 179 * 40,x
lda $a000 + 40 + 180 * 40,x
sta $a000 + 180 * 40,x
lda $a000 + 40 + 181 * 40,x
sta $a000 + 181 * 40,x
lda $a000 + 40 + 182 * 40,x
sta $a000 + 182 * 40,x
lda $a000 + 40 + 183 * 40,x
sta $a000 + 183 * 40,x
lda $a000 + 40 + 184 * 40,x
sta $a000 + 184 * 40,x
lda $a000 + 40 + 185 * 40,x
sta $a000 + 185 * 40,x
lda $a000 + 40 + 186 * 40,x
sta $a000 + 186 * 40,x
lda $a000 + 40 + 187 * 40,x
sta $a000 + 187 * 40,x
lda $a000 + 40 + 188 * 40,x
sta $a000 + 188 * 40,x
lda $a000 + 40 + 189 * 40,x
sta $a000 + 189 * 40,x
lda $a000 + 40 + 190 * 40,x
sta $a000 + 190 * 40,x
lda $a000 + 40 + 191 * 40,x
sta $a000 + 191 * 40,x
lda $a000 + 40 + 192 * 40,x
sta $a000 + 192 * 40,x
lda $a000 + 40 + 193 * 40,x
sta $a000 + 193 * 40,x
lda $a000 + 40 + 194 * 40,x
sta $a000 + 194 * 40,x
lda $a000 + 40 + 195 * 40,x
sta $a000 + 195 * 40,x
lda $a000 + 40 + 196 * 40,x
sta $a000 + 196 * 40,x
lda $a000 + 40 + 197 * 40,x
sta $a000 + 197 * 40,x
lda $a000 + 40 + 198 * 40,x
sta $a000 + 198 * 40,x
dex
beq exit
jmp loop
exit
rts