Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
RiscOS
Sources
Kernel
Commits
87114d6d
Commit
87114d6d
authored
25 years ago
by
Kevin Bracey
Browse files
Options
Download
Email Patches
Plain Diff
Parallel port flash upgrade facility added.
Version 4.72. Tagged as 'Kernel-4_72'
parent
29428883
master
Bethany
Cortex
Customer_M_Demo
HAL
RISC_OS-5_26
RISC_OS-5_28
RISC_OS-5_30
RPi
SMP
alees_Kernel_dev
nbingham_Kernel_FastNC_dev
sbrodie_sedwards_16Mar2000
nbingham_Kernel_FastNC_dev_bp
dellis_autobuild_BaseSW
dcotton_autobuild_BaseSW
alees_Kernel_dev_bp
SMP_bp
RPi_merge
RPi_bp
RO_5_07
Kernel-6_70
Kernel-6_70-2
Kernel-6_70-1
Kernel-6_69
Kernel-6_68
Kernel-6_67
Kernel-6_67-1
Kernel-6_65
Kernel-6_64
Kernel-6_63
Kernel-6_62
Kernel-6_61
Kernel-6_60
Kernel-6_59
Kernel-6_58
Kernel-6_57
Kernel-6_56
Kernel-6_55
Kernel-6_54
Kernel-6_53
Kernel-6_52
Kernel-6_51
Kernel-6_50
Kernel-6_49
Kernel-6_48
Kernel-6_47
Kernel-6_46
Kernel-6_45
Kernel-6_44
Kernel-6_43
Kernel-6_43-3
Kernel-6_43-2
Kernel-6_43-1
Kernel-6_42
Kernel-6_41
Kernel-6_40
Kernel-6_39
Kernel-6_38
Kernel-6_37
Kernel-6_36
Kernel-6_35
Kernel-6_34
Kernel-6_33
Kernel-6_32
Kernel-6_31
Kernel-6_30
Kernel-6_29
Kernel-6_28
Kernel-6_27
Kernel-6_26
Kernel-6_25
Kernel-6_24
Kernel-6_23
Kernel-6_22
Kernel-6_21
Kernel-6_20
Kernel-6_19
Kernel-6_18
Kernel-6_17
Kernel-6_16
Kernel-6_15
Kernel-6_14
Kernel-6_13
Kernel-6_12
Kernel-6_11
Kernel-6_10
Kernel-6_09
Kernel-6_08
Kernel-6_08-4_129_2_10
Kernel-6_08-4_129_2_9
Kernel-6_07
Kernel-6_06
Kernel-6_05
Kernel-6_05-4_129_2_8
Kernel-6_04
Kernel-6_03
Kernel-6_02
Kernel-6_01
Kernel-6_01-3
Kernel-6_01-2
Kernel-6_01-1
Kernel-6_00
Kernel-5_99
Kernel-5_98
Kernel-5_97
Kernel-5_97-4_129_2_7
Kernel-5_96
Kernel-5_95
Kernel-5_94
Kernel-5_93
Kernel-5_92
Kernel-5_91
Kernel-5_90
Kernel-5_89
Kernel-5_89-4_129_2_6
Kernel-5_88
Kernel-5_88-4_129_2_5
Kernel-5_88-4_129_2_4
Kernel-5_87
Kernel-5_86
Kernel-5_86-4_129_2_3
Kernel-5_86-4_129_2_2
Kernel-5_86-4_129_2_1
Kernel-5_85
Kernel-5_84
Kernel-5_83
Kernel-5_82
Kernel-5_81
Kernel-5_80
Kernel-5_79
Kernel-5_78
Kernel-5_77
Kernel-5_76
Kernel-5_75
Kernel-5_74
Kernel-5_73
Kernel-5_72
Kernel-5_71
Kernel-5_70
Kernel-5_69
Kernel-5_68
Kernel-5_67
Kernel-5_66
Kernel-5_65
Kernel-5_64
Kernel-5_63
Kernel-5_62
Kernel-5_61
Kernel-5_60
Kernel-5_59
Kernel-5_58
Kernel-5_57
Kernel-5_56
Kernel-5_55
Kernel-5_54
Kernel-5_54-1
Kernel-5_53
Kernel-5_52
Kernel-5_51
Kernel-5_50
Kernel-5_49
Kernel-5_48
Kernel-5_47
Kernel-5_46
Kernel-5_46-4_90_2_1
Kernel-5_45
Kernel-5_44
Kernel-5_43
Kernel-5_42
Kernel-5_41
Kernel-5_40
Kernel-5_39
Kernel-5_38
Kernel-5_37
Kernel-5_36
Kernel-5_35
Kernel-5_35-4_79_2_327
Kernel-5_35-4_79_2_326
Kernel-5_35-4_79_2_325
Kernel-5_35-4_79_2_324
Kernel-5_35-4_79_2_323
Kernel-5_35-4_79_2_322
Kernel-5_35-4_79_2_321
Kernel-5_35-4_79_2_320
Kernel-5_35-4_79_2_319
Kernel-5_35-4_79_2_318
Kernel-5_35-4_79_2_317
Kernel-5_35-4_79_2_316
Kernel-5_35-4_79_2_315
Kernel-5_35-4_79_2_314
Kernel-5_35-4_79_2_313
Kernel-5_35-4_79_2_312
Kernel-5_35-4_79_2_311
Kernel-5_35-4_79_2_310
Kernel-5_35-4_79_2_309
Kernel-5_35-4_79_2_308
Kernel-5_35-4_79_2_307
Kernel-5_35-4_79_2_306
Kernel-5_35-4_79_2_305
Kernel-5_35-4_79_2_304
Kernel-5_35-4_79_2_303
Kernel-5_35-4_79_2_302
Kernel-5_35-4_79_2_301
Kernel-5_35-4_79_2_300
Kernel-5_35-4_79_2_299
Kernel-5_35-4_79_2_298
Kernel-5_35-4_79_2_297
Kernel-5_35-4_79_2_296
Kernel-5_35-4_79_2_295
Kernel-5_35-4_79_2_294
Kernel-5_35-4_79_2_293
Kernel-5_35-4_79_2_292
Kernel-5_35-4_79_2_291
Kernel-5_35-4_79_2_290
Kernel-5_35-4_79_2_289
Kernel-5_35-4_79_2_288
Kernel-5_35-4_79_2_287
Kernel-5_35-4_79_2_286
Kernel-5_35-4_79_2_285
Kernel-5_35-4_79_2_284
Kernel-5_35-4_79_2_283
Kernel-5_35-4_79_2_282
Kernel-5_35-4_79_2_281
Kernel-5_35-4_79_2_280
Kernel-5_35-4_79_2_279
Kernel-5_35-4_79_2_278
Kernel-5_35-4_79_2_277
Kernel-5_35-4_79_2_276
Kernel-5_35-4_79_2_275
Kernel-5_35-4_79_2_274
Kernel-5_35-4_79_2_273
Kernel-5_35-4_79_2_272
Kernel-5_35-4_79_2_271
Kernel-5_35-4_79_2_270
Kernel-5_35-4_79_2_269
Kernel-5_35-4_79_2_268
Kernel-5_35-4_79_2_267
Kernel-5_35-4_79_2_266
Kernel-5_35-4_79_2_265
Kernel-5_35-4_79_2_264
Kernel-5_35-4_79_2_263
Kernel-5_35-4_79_2_262
Kernel-5_35-4_79_2_261
Kernel-5_35-4_79_2_260
Kernel-5_35-4_79_2_259
Kernel-5_35-4_79_2_258
Kernel-5_35-4_79_2_257
Kernel-5_35-4_79_2_256
Kernel-5_35-4_79_2_255
Kernel-5_35-4_79_2_254
Kernel-5_35-4_79_2_253
Kernel-5_35-4_79_2_252
Kernel-5_35-4_79_2_251
Kernel-5_35-4_79_2_250
Kernel-5_35-4_79_2_249
Kernel-5_35-4_79_2_248
Kernel-5_35-4_79_2_247
Kernel-5_35-4_79_2_246
Kernel-5_35-4_79_2_245
Kernel-5_35-4_79_2_244
Kernel-5_35-4_79_2_243
Kernel-5_35-4_79_2_242
Kernel-5_35-4_79_2_241
Kernel-5_35-4_79_2_240
Kernel-5_35-4_79_2_239
Kernel-5_35-4_79_2_238
Kernel-5_35-4_79_2_237
Kernel-5_35-4_79_2_236
Kernel-5_35-4_79_2_235
Kernel-5_35-4_79_2_234
Kernel-5_35-4_79_2_233
Kernel-5_35-4_79_2_232
Kernel-5_35-4_79_2_231
Kernel-5_35-4_79_2_230
Kernel-5_35-4_79_2_229
Kernel-5_35-4_79_2_228
Kernel-5_35-4_79_2_227
Kernel-5_35-4_79_2_226
Kernel-5_35-4_79_2_225
Kernel-5_35-4_79_2_224
Kernel-5_35-4_79_2_223
Kernel-5_35-4_79_2_222
Kernel-5_35-4_79_2_221
Kernel-5_35-4_79_2_220
Kernel-5_35-4_79_2_219
Kernel-5_35-4_79_2_218
Kernel-5_35-4_79_2_217
Kernel-5_35-4_79_2_216
Kernel-5_35-4_79_2_215
Kernel-5_35-4_79_2_214
Kernel-5_35-4_79_2_213
Kernel-5_35-4_79_2_212
Kernel-5_35-4_79_2_211
Kernel-5_35-4_79_2_210
Kernel-5_35-4_79_2_209
Kernel-5_35-4_79_2_208
Kernel-5_35-4_79_2_207
Kernel-5_35-4_79_2_206
Kernel-5_35-4_79_2_205
Kernel-5_35-4_79_2_204
Kernel-5_35-4_79_2_203
Kernel-5_35-4_79_2_202
Kernel-5_35-4_79_2_201
Kernel-5_35-4_79_2_200
Kernel-5_35-4_79_2_199
Kernel-5_35-4_79_2_198
Kernel-5_35-4_79_2_197
Kernel-5_35-4_79_2_196
Kernel-5_35-4_79_2_195
Kernel-5_35-4_79_2_194
Kernel-5_35-4_79_2_193
Kernel-5_35-4_79_2_192
Kernel-5_35-4_79_2_191
Kernel-5_35-4_79_2_190
Kernel-5_35-4_79_2_189
Kernel-5_35-4_79_2_188
Kernel-5_35-4_79_2_187
Kernel-5_35-4_79_2_186
Kernel-5_35-4_79_2_185
Kernel-5_35-4_79_2_184
Kernel-5_35-4_79_2_183
Kernel-5_35-4_79_2_182
Kernel-5_35-4_79_2_181
Kernel-5_35-4_79_2_180
Kernel-5_35-4_79_2_179
Kernel-5_35-4_79_2_178
Kernel-5_35-4_79_2_177
Kernel-5_35-4_79_2_176
Kernel-5_35-4_79_2_175
Kernel-5_35-4_79_2_174
Kernel-5_35-4_79_2_173
Kernel-5_35-4_79_2_172
Kernel-5_35-4_79_2_171
Kernel-5_35-4_79_2_170
Kernel-5_35-4_79_2_169
Kernel-5_35-4_79_2_168
Kernel-5_35-4_79_2_167
Kernel-5_35-4_79_2_166
Kernel-5_35-4_79_2_165
Kernel-5_35-4_79_2_164
Kernel-5_35-4_79_2_163
Kernel-5_35-4_79_2_162
Kernel-5_35-4_79_2_161
Kernel-5_35-4_79_2_160
Kernel-5_35-4_79_2_159
Kernel-5_35-4_79_2_158
Kernel-5_35-4_79_2_157
Kernel-5_35-4_79_2_156
Kernel-5_35-4_79_2_155
Kernel-5_35-4_79_2_154
Kernel-5_35-4_79_2_153
Kernel-5_35-4_79_2_152
Kernel-5_35-4_79_2_151
Kernel-5_35-4_79_2_150
Kernel-5_35-4_79_2_149
Kernel-5_35-4_79_2_148
Kernel-5_35-4_79_2_147_2_23
Kernel-5_35-4_79_2_147_2_22
Kernel-5_35-4_79_2_147_2_21
Kernel-5_35-4_79_2_147_2_20
Kernel-5_35-4_79_2_147_2_19
Kernel-5_35-4_79_2_147_2_18
Kernel-5_35-4_79_2_147_2_17
Kernel-5_35-4_79_2_147_2_16
Kernel-5_35-4_79_2_147_2_15
Kernel-5_35-4_79_2_147_2_14
Kernel-5_35-4_79_2_147_2_13
Kernel-5_35-4_79_2_147_2_12
Kernel-5_35-4_79_2_147_2_11
Kernel-5_35-4_79_2_147_2_10
Kernel-5_35-4_79_2_147_2_9
Kernel-5_35-4_79_2_147_2_8
Kernel-5_35-4_79_2_147_2_7
Kernel-5_35-4_79_2_147_2_6
Kernel-5_35-4_79_2_147_2_5
Kernel-5_35-4_79_2_147_2_4
Kernel-5_35-4_79_2_147_2_3
Kernel-5_35-4_79_2_147_2_2
Kernel-5_35-4_79_2_147_2_1
Kernel-5_35-4_79_2_147
Kernel-5_35-4_79_2_146
Kernel-5_35-4_79_2_145
Kernel-5_35-4_79_2_144
Kernel-5_35-4_79_2_143
Kernel-5_35-4_79_2_142
Kernel-5_35-4_79_2_141
Kernel-5_35-4_79_2_140
Kernel-5_35-4_79_2_139
Kernel-5_35-4_79_2_138
Kernel-5_35-4_79_2_137
Kernel-5_35-4_79_2_136
Kernel-5_35-4_79_2_135
Kernel-5_35-4_79_2_134
Kernel-5_35-4_79_2_133
Kernel-5_35-4_79_2_132
Kernel-5_35-4_79_2_131
Kernel-5_35-4_79_2_130
Kernel-5_35-4_79_2_129
Kernel-5_35-4_79_2_128
Kernel-5_35-4_79_2_127
Kernel-5_35-4_79_2_126
Kernel-5_35-4_79_2_125
Kernel-5_35-4_79_2_124
Kernel-5_35-4_79_2_123
Kernel-5_35-4_79_2_122
Kernel-5_35-4_79_2_121
Kernel-5_35-4_79_2_120
Kernel-5_35-4_79_2_119
Kernel-5_35-4_79_2_118
Kernel-5_35-4_79_2_117
Kernel-5_35-4_79_2_116
Kernel-5_35-4_79_2_115
Kernel-5_35-4_79_2_114
Kernel-5_35-4_79_2_113
Kernel-5_35-4_79_2_112
Kernel-5_35-4_79_2_111
Kernel-5_35-4_79_2_110
Kernel-5_35-4_79_2_109
Kernel-5_35-4_79_2_108
Kernel-5_35-4_79_2_107
Kernel-5_35-4_79_2_106
Kernel-5_35-4_79_2_105
Kernel-5_35-4_79_2_104
Kernel-5_35-4_79_2_103
Kernel-5_35-4_79_2_102
Kernel-5_35-4_79_2_101
Kernel-5_35-4_79_2_100
Kernel-5_35-4_79_2_99
Kernel-5_35-4_79_2_98_2_54
Kernel-5_35-4_79_2_98_2_53
Kernel-5_35-4_79_2_98_2_52_2_1
Kernel-5_35-4_79_2_98_2_52
Kernel-5_35-4_79_2_98_2_51
Kernel-5_35-4_79_2_98_2_50
Kernel-5_35-4_79_2_98_2_49
Kernel-5_35-4_79_2_98_2_48
Kernel-5_35-4_79_2_98_2_47
Kernel-5_35-4_79_2_98_2_46
Kernel-5_35-4_79_2_98_2_45
Kernel-5_35-4_79_2_98_2_44
Kernel-5_35-4_79_2_98_2_43
Kernel-5_35-4_79_2_98_2_42
Kernel-5_35-4_79_2_98_2_41
Kernel-5_35-4_79_2_98_2_40
Kernel-5_35-4_79_2_98_2_39
Kernel-5_35-4_79_2_98_2_38
Kernel-5_35-4_79_2_98_2_37
Kernel-5_35-4_79_2_98_2_36
Kernel-5_35-4_79_2_98_2_35
Kernel-5_35-4_79_2_98_2_34
Kernel-5_35-4_79_2_98_2_33
Kernel-5_35-4_79_2_98_2_32
Kernel-5_35-4_79_2_98_2_31
Kernel-5_35-4_79_2_98_2_30
Kernel-5_35-4_79_2_98_2_29
Kernel-5_35-4_79_2_98_2_28
Kernel-5_35-4_79_2_98_2_27
Kernel-5_35-4_79_2_98_2_26
Kernel-5_35-4_79_2_98_2_25
Kernel-5_35-4_79_2_98_2_24
Kernel-5_35-4_79_2_98_2_23
Kernel-5_35-4_79_2_98_2_22
Kernel-5_35-4_79_2_98_2_21
Kernel-5_35-4_79_2_98_2_20
Kernel-5_35-4_79_2_98_2_19
Kernel-5_35-4_79_2_98_2_18
Kernel-5_35-4_79_2_98_2_17
Kernel-5_35-4_79_2_98_2_16
Kernel-5_35-4_79_2_98_2_15
Kernel-5_35-4_79_2_98_2_14
Kernel-5_35-4_79_2_98_2_13
Kernel-5_35-4_79_2_98_2_12
Kernel-5_35-4_79_2_98_2_11
Kernel-5_35-4_79_2_98_2_10
Kernel-5_35-4_79_2_98_2_9
Kernel-5_35-4_79_2_98_2_8
Kernel-5_35-4_79_2_98_2_7
Kernel-5_35-4_79_2_98_2_6
Kernel-5_35-4_79_2_98_2_5
Kernel-5_35-4_79_2_98_2_4
Kernel-5_35-4_79_2_98_2_3
Kernel-5_35-4_79_2_98_2_2
Kernel-5_35-4_79_2_98_2_1
Kernel-5_35-4_79_2_98
Kernel-5_35-4_79_2_97
Kernel-5_35-4_79_2_96
Kernel-5_35-4_79_2_95
Kernel-5_35-4_79_2_94
Kernel-5_35-4_79_2_93
Kernel-5_35-4_79_2_92
Kernel-5_35-4_79_2_91
Kernel-5_35-4_79_2_90
Kernel-5_35-4_79_2_89
Kernel-5_35-4_79_2_88
Kernel-5_35-4_79_2_87
Kernel-5_35-4_79_2_86
Kernel-5_35-4_79_2_85
Kernel-5_35-4_79_2_84
Kernel-5_35-4_79_2_83
Kernel-5_35-4_79_2_82
Kernel-5_35-4_79_2_81
Kernel-5_35-4_79_2_80
Kernel-5_35-4_79_2_79
Kernel-5_35-4_79_2_78
Kernel-5_35-4_79_2_77
Kernel-5_35-4_79_2_76
Kernel-5_35-4_79_2_75
Kernel-5_35-4_79_2_74
Kernel-5_35-4_79_2_73
Kernel-5_35-4_79_2_72
Kernel-5_35-4_79_2_71
Kernel-5_35-4_79_2_70
Kernel-5_35-4_79_2_69
Kernel-5_35-4_79_2_68
Kernel-5_35-4_79_2_67
Kernel-5_35-4_79_2_66
Kernel-5_35-4_79_2_65
Kernel-5_35-4_79_2_64
Kernel-5_35-4_79_2_63
Kernel-5_35-4_79_2_62
Kernel-5_35-4_79_2_61
Kernel-5_35-4_79_2_60
Kernel-5_35-4_79_2_59
Kernel-5_35-4_79_2_58
Kernel-5_35-4_79_2_57
Kernel-5_35-4_79_2_56
Kernel-5_35-4_79_2_55
Kernel-5_35-4_79_2_54
Kernel-5_35-4_79_2_53
Kernel-5_35-4_79_2_52
Kernel-5_35-4_79_2_51
Kernel-5_35-4_79_2_50
Kernel-5_35-4_79_2_49
Kernel-5_35-4_79_2_48
Kernel-5_35-4_79_2_47
Kernel-5_35-4_79_2_46
Kernel-5_35-4_79_2_45
Kernel-5_35-4_79_2_44
Kernel-5_35-4_79_2_43
Kernel-5_35-4_79_2_42
Kernel-5_35-4_79_2_41
Kernel-5_35-4_79_2_40
Kernel-5_35-4_79_2_39
Kernel-5_35-4_79_2_38
Kernel-5_35-4_79_2_37
Kernel-5_35-4_79_2_36
Kernel-5_35-4_79_2_35
Kernel-5_35-4_79_2_34
Kernel-5_35-4_79_2_33
Kernel-5_35-4_79_2_32
Kernel-5_35-4_79_2_31
Kernel-5_35-4_79_2_30
Kernel-5_35-4_79_2_29
Kernel-5_35-4_79_2_28
Kernel-5_35-4_79_2_27
Kernel-5_35-4_79_2_26
Kernel-5_35-4_79_2_25_2_2
Kernel-5_35-4_79_2_25_2_1
Kernel-5_35-4_79_2_25
Kernel-5_35-4_79_2_24
Kernel-5_35-4_79_2_23
Kernel-5_35-4_79_2_22
Kernel-5_35-4_79_2_21
Kernel-5_35-4_79_2_20
Kernel-5_35-4_79_2_19
Kernel-5_35-4_79_2_18
Kernel-5_35-4_79_2_17
Kernel-5_35-4_79_2_16
Kernel-5_35-4_79_2_15
Kernel-5_35-4_79_2_14
Kernel-5_35-4_79_2_13
Kernel-5_35-4_79_2_12
Kernel-5_35-4_79_2_11
Kernel-5_35-4_79_2_10
Kernel-5_35-4_79_2_9
Kernel-5_35-4_79_2_8
Kernel-5_35-4_79_2_7
Kernel-5_35-4_79_2_6
Kernel-5_35-4_79_2_5
Kernel-5_35-4_79_2_4
Kernel-5_35-4_79_2_3
Kernel-5_35-4_79_2_2
Kernel-5_35-4_79_2_1
Kernel-5_34
Kernel-5_33
Kernel-5_32
Kernel-5_31
Kernel-5_30
Kernel-5_29
Kernel-5_28
Kernel-5_27
Kernel-5_26
Kernel-5_25
Kernel-5_24
Kernel-5_23
Kernel-5_22
Kernel-5_21
Kernel-5_20
Kernel-5_19
Kernel-5_18
Kernel-5_17
Kernel-5_16
Kernel-5_15
Kernel-5_14
Kernel-5_13
Kernel-5_13-4_52_2_1
Kernel-5_12
Kernel-5_11
Kernel-5_10
Kernel-5_09
Kernel-5_08
Kernel-5_07
Kernel-5_06
Kernel-5_05
Kernel-5_04
Kernel-5_03
Kernel-5_02
Kernel-5_01
Kernel-5_00
Kernel-4_99
Kernel-4_98
Kernel-4_97
Kernel-4_96
Kernel-4_95
Kernel-4_94
Kernel-4_93
Kernel-4_92
Kernel-4_91
Kernel-4_90
Kernel-4_89
Kernel-4_88
Kernel-4_87
Kernel-4_86
Kernel-4_85
Kernel-4_84
Kernel-4_83
Kernel-4_82
Kernel-4_81
Kernel-4_80
Kernel-4_79
Kernel-4_78
Kernel-4_77
HAL_merge
Cortex_merge
Cortex_bp
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
706 additions
and
45 deletions
+706
-45
VersionASM
VersionASM
+6
-4
VersionNum
VersionNum
+7
-6
s/FlashROM
s/FlashROM
+672
-0
s/GetAll
s/GetAll
+10
-0
s/Morris
s/Morris
+11
-35
No files found.
VersionASM
View file @
87114d6d
...
@@ -5,8 +5,10 @@
...
@@ -5,8 +5,10 @@
GBLA Module_Version
GBLA Module_Version
GBLS Module_MinorVersion
GBLS Module_MinorVersion
GBLS Module_Date
GBLS Module_Date
Module_MajorVersion SETS "4.71"
GBLS Module_FullVersion
Module_Version SETA 471
Module_MajorVersion SETS "4.72"
Module_Version SETA 472
Module_MinorVersion SETS ""
Module_MinorVersion SETS ""
Module_Date SETS "25 Feb 1999"
Module_Date SETS "08 Apr 1999"
END
Module_FullVersion SETS "4.72"
END
This diff is collapsed.
Click to expand it.
VersionNum
View file @
87114d6d
/* (4.7
1
)
/* (4.7
2
)
*
*
* This file is automatically maintained by srccommit, do not edit manually.
* This file is automatically maintained by srccommit, do not edit manually.
*
*
*/
*/
#define Module_MajorVersion_CMHG 4.7
1
#define Module_MajorVersion_CMHG 4.7
2
#define Module_MinorVersion_CMHG
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG
25 Feb
1999
#define Module_Date_CMHG
08 Apr
1999
#define Module_MajorVersion "4.7
1
"
#define Module_MajorVersion "4.7
2
"
#define Module_Version 47
1
#define Module_Version 47
2
#define Module_MinorVersion ""
#define Module_MinorVersion ""
#define Module_Date "
25 Feb
1999"
#define Module_Date "
08 Apr
1999"
#define Module_FullVersion "4.72"
This diff is collapsed.
Click to expand it.
s/FlashROM
0 → 100644
View file @
87114d6d
; Copyright 1999 Element 14 Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
; http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; This file handles the programming of flash devices in ROM bank 0 with
; a ROM image transferred via the parallel port. This is for development
; purposes only, and is only likely to work on the system for which it was
; designed.
; Flash Memory Settings
FR_FlashBase
*
&00000000
FR_DeviceBufferSize
*
32
; 28F640J5 has 32 byte buffer
FR_DeviceBlockSizeBits
*
17
; 28F640J5 has 128KB blocks
FR_DeviceBlocks
*
64
; 64 blocks in a 28F640J5
FR_BufferSize
*
FR_DeviceBufferSize
*
2
; 2 devices
FR_BlockSizeBits
*
FR_DeviceBlockSizeBits
+
1
; 2 devices
FR_BlockSize
*
1
:SHL:
FR_BlockSizeBits
; 256KB
FR_FlashSize
*
FR_BlockSize
*
FR_DeviceBlocks
; 16MB
; Sizes of things in memory
FR_StackSize
*
1024
FR_RAMCodeSize
*
4096
FR_ScreenSize
*
472
*
1024
; Addresses of where we put things in memory
FR_PageTableBaseAddr
*
DRAM0PhysRam
FR_StackBase
*
FR_PageTableBaseAddr
+
16
*
1024
+
FR_StackSize
FR_RAMCodeAddr
*
FR_StackBase
FR_ScreenBase
*
(
FR_RAMCodeAddr
+
FR_RAMCodeSize
+
15
):AND::NOT:
&F
FR_TransferBuffAddr
*
FR_ScreenBase
; Combo chip addresses
FR_ComboCfgBase
*
&03010000
+
&3F0
*
4
FR_PPortBase
*
&03010000
+
&278
*
4
FR_ECRPortBase
*
FR_PPortBase
+
&402
*
4
; On entry, R11->IOMD
; Will either reprogram the flash, or branch back to 0.
; We're in SVC32 mode with the MMU off, by the way.
ASSERT
IOMD_C_FrontPanelButton
<>
0
ConsiderFlashROM
LDRB
R0
,[
R11
,#
IOMD_CLINES
]
TST
R0
,#
IOMD_C_FrontPanelButton
MOVNE
PC
,#
0
FlashROM
; Switch CPU to 32-bit mode
MOV
R0
,#
MMUC_L
:OR:
MMUC_D
:OR:
MMUC_P
; Set PROG32 and DATA32
ARM_write_control
R0
MOV
R0
,#
I32_bit
:OR:
F32_bit
:OR:
SVC32_mode
msr
AL
,
CPSR_all
,
R0
; Initialise various CPU control registers
MOV
R0
,#
IOMD_ROMCR_NSTicks_5
:OR:
IOMD_ROMCR_HalfSpeed
:OR:
IOMD_ROMCR_32bit
STRB
R0
,[
R11
,#
IOMD_ROMCR0
]
MOV
R0
,#
IOMD_CLKCTL_CpuclkHalf
:OR:
IOMD_CLKCTL_MemclkNormal
:OR:
IOMD_CLKCTL_IOclkNormal
STRB
R0
,[
R11
,#
IOMD_CLKCTL
]
MOV
R0
,#
IOMD_DRAMWID_RASPre_3
:OR:
IOMD_DRAMWID_RASCAS_3
:OR:
IOMD_DRAMWID_EDO_Enable
:OR:
IOMD_DRAMWID_DRAM_32bit
STRB
R0
,[
R11
,#
IOMD_DRAMWID
]
MOV
R0
,#
IOMD_IOTCR_Combo_TypeB
:OR:
IOMD_IOTCR_Network_TypeC
STRB
R0
,[
R11
,#
IOMD_IOTCR
]
MOV
R0
,#
1
; Card 0 type C, the rest type A
STRB
R0
,[
R11
,#
IOMD_ECTCR
]
MOV
R0
,#
IOMD_ASTCR_WaitStates
STRB
R0
,[
R11
,#
IOMD_ASTCR
]
MOV
R0
,#
IOMD_C_ReadMask
:OR:
IOMD_C_ROMCardVpp
; Green LED on
STRB
R0
,[
R11
,#
IOMD_CLINES
]
; Main setup
MOV
R10
,#
VIDC
; Keep R10 pointing to video registers from here on
BL
FR_InitVideo
BL
FR_FillScreen
BL
FR_SetPageTable
BL
FR_SetMMU
BL
FR_InitParallel
; Sets R9 to parallel base address - keep it this way
; Copy the rest of code to RAM and jump to it
ADR
R0
,
FR_CopyBlockStart
LDR
R1
,=
FR_RAMCodeAddr
MOV
LR
,
R1
LDR
R2
,=
FR_RAMCodeEnd
-
FR_CopyBlockStart
01
LDR
R3
,[
R0
],#
4
STR
R3
,[
R1
],#
4
SUBS
R2
,
R2
,#
4
BNE
%BT01
MOV
PC
,
LR
FR_InitVideo
ROUT
; Set DMA registers
LDR
R1
,=
FR_ScreenBase
ADD
R2
,
R1
,#
FR_ScreenSize
SUB
R2
,
R2
,#
16
STR
R1
,[
R11
,#
IOMD_VIDSTART
]
STR
R2
,[
R11
,#
IOMD_VIDEND
]
STR
R1
,[
R11
,#
IOMD_VIDINIT
]
STR
R1
,[
R11
,#
IOMD_VIDCUR
]
STR
R1
,[
R11
,#
IOMD_CURSINIT
]
STR
R1
,[
R11
,#
IOMD_CURSCUR
]
MOV
R1
,#
0
STR
R1
,[
R11
,#
IOMD_VIDINITB
]
MOV
R1
,#
IOMD_VIDCR_DRAMMode
:OR:
IOMD_VIDCR_Enable
STRB
R1
,[
R11
,#
IOMD_VIDCR
]
; Set video registers
ADR
R1
,
FR_InitVidRegs
MOV
R2
,#(
FR_InitVidRegsEnd
-
FR_InitVidRegs
)
02
LDR
R3
,[
R1
],#
4
STR
R3
,[
R10
]
SUBS
R2
,
R2
,#
4
BNE
%BT02
; Set grey palette
MOV
R1
,#
&10000000
STR
R1
,[
R10
]
MOV
R1
,#
0
MOV
R2
,#
&000001
ORR
R2
,
R2
,#
&000100
ORR
R2
,
R2
,#
&010000
MOV
R3
,#
255
03
STR
R1
,[
R10
]
ADD
R1
,
R1
,
R2
SUBS
R3
,
R3
,#
1
BNE
%BT03
MOV
PC
,
LR
; Frequency synthesizer register settings
FR_ModR
*
8
FR_ModV
*
9
; 36 MHz
; Video control register settings
FR_FIFO
*
3
; 12 loads
FR_BPP
*
3
; 8bpp
FR_PixelRate
*
0
; CK/1
FR_ClockSource
*
0
; VCLK
; Horizontal timings
FR_HSync
*
72
FR_HBPch
*
86
FR_HLBdr
*
24
FR_HDisp
*
800
FR_HRBdr
*
24
FR_HFPch
*
18
FR_HDWR
*
FR_HDisp
/
4
; Vertical timings
FR_VSync
*
2
FR_VBPch
*
22
FR_VTBdr
*
0
FR_VDisp
*
600
FR_VBBdr
*
0
FR_VFPch
*
1
FR_InitVidRegs
ROUT
DCD
&E0000000
+(
FR_FIFO
:SHL:
8
)+(
FR_BPP
:SHL:
5
)+(
FR_PixelRate
:SHL:
2
)+
FR_ClockSource
DCD
&D0000000
+
&C288
DCD
&80000000
+
FR_HSync
+
FR_HLBdr
+
FR_HDisp
+
FR_HRBdr
+
FR_HFPch
-
8
DCD
&81000000
+
FR_HSync
-
8
DCD
&82000000
+
FR_HSync
+
FR_HBPch
-
12
DCD
&83000000
+
FR_HSync
+
FR_HBPch
+
FR_HLBdr
-
18
DCD
&84000000
+
FR_HSync
+
FR_HBPch
+
FR_HLBdr
+
FR_HDisp
-
18
DCD
&85000000
+
FR_HSync
+
FR_HBPch
+
FR_HLBdr
+
FR_HDisp
+
FR_HRBdr
-
12
DCD
&90000000
+
FR_VSync
+
FR_VBPch
+
FR_VTBdr
+
FR_VDisp
+
FR_VBBdr
+
FR_VFPch
-
2
DCD
&91000000
+
FR_VSync
-
2
DCD
&92000000
+
FR_VSync
+
FR_VBPch
-
1
DCD
&93000000
+
FR_VSync
+
FR_VBPch
+
FR_VTBdr
-
1
DCD
&94000000
+
FR_VSync
+
FR_VBPch
+
FR_VTBdr
+
FR_VDisp
-
1
DCD
&90000000
+
FR_VSync
+
FR_VBPch
+
FR_VTBdr
+
FR_VDisp
+
FR_VBBdr
-
1
DCD
&40008000
DCD
&C0000000
+(
1
:SHL:
12
)+
3
DCD
&D0000000
+
&C080
+((
FR_ModV
-
1
):SHL:
8
)+(
FR_ModR
-
1
)
DCD
&D0000000
+((
FR_ModV
-
1
):SHL:
8
)+(
FR_ModR
-
1
)
DCD
&F0000000
+(
1
:SHL:
16
)+(
1
:SHL:
12
)+
FR_HDWR
DCD
&B1000000
FR_InitVidRegsEnd
FR_FillScreen
ROUT
LDR
R1
,=
FR_ScreenBase
MOV
R2
,#((
256
:SHL:
16
)/
600
):AND:
&00FF
ORR
R2
,
R2
,#((
256
:SHL:
16
)/
600
):AND:
&FF00
MOV
R3
,
R3
MOV
R4
,#
FR_VDisp
01
MOV
R5
,#
FR_HDisp
MOV
R0
,
R3
,
LSR
#
16
ORR
R0
,
R0
,
R0
,
LSL
#
8
ORR
R0
,
R0
,
R0
,
LSL
#
16
02
STR
R0
,[
R1
],#
4
SUBS
R5
,
R5
,#
4
BNE
%BT02
ADD
R3
,
R3
,
R2
SUBS
R4
,
R4
,#
1
BNE
%BT01
MOV
PC
,
LR
;Make a page table that basically gives flat addressing with the C and B bits
;set approriately for the RAM areas. The RAM areas are set with both the C and B
;bits on, and all other areas have both C and B off. The flash area must not
;be made cacheable, or programming won't work.
;On exit
; r0-r4 corrupted
FR_SetPageTable
ROUT
MOV
R1
,#
FR_PageTableBaseAddr
MOV
R2
,#
0
; Address
MOV
R4
,#
L1_U
+
L1_Section
ORR
R4
,
R4
,#
AP_Full
*
L1_APMult
01
BICS
R3
,
R2
,#
&E0000000
; Repeats at &00000000, &20000000, &4000000, etc.
BICEQ
R4
,
R4
,#
L1_C
+
L1_B
; Clear B and C bits from start of ROM area
CMP
R3
,#
&10000000
ORREQ
R4
,
R4
,#
L1_C
+
L1_B
; Set B and C bits (RAM area cacheable and bufferable)
ORR
R0
,
R3
,
R4
STR
R0
,[
R1
],#
4
ADDS
R2
,
R2
,#
1024
*
1024
BCC
%BT01
MOV
PC
,
LR
FR_SetMMU
ROUT
MOV
R0
,#
FR_PageTableBaseAddr
ARM_MMU_transbase
R0
MVN
R0
,#
0
; Full access to all domains
ARM_MMU_domain
R0
MOV
R0
,#
MMUC_L
+
MMUC_D
+
MMUC_P
+
MMUC_W
+
MMUC_C
+
MMUC_M
ARM_write_control
R0
; Enable write buffer, cache and MMU
MOV
PC
,
LR
FR_InitParallel
ROUT
LDR
R1
,=
FR_ComboCfgBase
; Enter config mode
MOV
R0
,#
&55
STRB
R0
,[
R1
]
STRB
R0
,[
R1
]
; Write CR0
MOV
R0
,#
0
STRB
R0
,[
R1
]
MOV
R0
,#
&22
STRB
R0
,[
R1
,#
4
]
; CR0=&22 (FDC, IDE off)
; Write CR1
MOV
R0
,#
1
STRB
R0
,[
R1
]
MOV
R0
,#
&97
STRB
R0
,[
R1
,#
4
]
; CR1=&97 (Parallel port on, extended)
; Write CR4
MOV
R0
,#
4
STRB
R0
,[
R1
]
MOV
R0
,#
&04
; CR4=&03 (ECP & EPP mode)
STRB
R0
,[
R1
,#
4
]
; Write ECR
MOV
R0
,#
&34
; PS/2 Parallel Port mode, DMA off, interrupts off
LDR
R9
,=
FR_ECRPortBase
STRB
R0
,[
R9
]
; Exit config mode
MOV
R0
,#
&AA
STRB
R0
,[
R1
]
; Initialise parallel port
LDR
R9
,=
FR_PPortBase
; Clear nSTROBE bit (puts nACK high) and clear nSLCTIN bit (puts BUSY high) to
; indicate we are busy and not accepting data.
MOV
R0
,#
&20
; Input, IRQ off, nSLCTIN clear, nSTROBE clear
STRB
R0
,[
R9
,#
8
]
; Keep parallel port base address in R9 from here on
MOV
PC
,
LR
LTORG
FR_CopyBlockStart
; Dont use literals from here on in - the assembler's liable to pull them
; the non-RAM stuff above.
FR_StackBaseVal
&
FR_StackBase
FR_TransferBuffVal
&
FR_TransferBuffAddr
; Code from here on gets copied to RAM (at FR_RAMCodeAddr) and run from there.
FR_RAMCodeStart
MOV
R0
,#
IOMD_C_ReadMask
:OR:
IOMD_C_FrontPanelLED
:OR:
IOMD_C_ROMCardVpp
STRB
R0
,[
R11
,#
IOMD_CLINES
]
; Red LED on
LDR
R13
,
FR_StackBaseVal
FR_LoopForever
MOV
R0
,#
FR_WaitCmdState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
; Wait for a command header
BL
FR_ParallelRead
CMP
R0
,#
'M'
BNE
FR_LoopForever
BL
FR_ParallelRead
CMP
R0
,#
'P'
BNE
FR_LoopForever
BL
FR_ParallelRead
CMP
R0
,#
'T'
BNE
FR_LoopForever
BL
FR_ParallelRead
CMP
R0
,#
'!'
BNE
FR_LoopForever
BL
FR_ParallelRead
CMP
R0
,#
'P'
BEQ
FR_BeginProgram
CMP
R0
,#
'V'
BEQ
FR_BeginVerify
B
FR_LoopForever
FR_BeginProgram
ROUT
MOV
R0
,#
FR_BeginProgramState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
; Read in parameters
BL
FR_ReadOffsetAndCount
; Ready to go - first make the ROM area writable
BL
FR_MakeROM0Writable
01
; Begin erasing the block
MOV
R0
,
R7
BL
FR_StartErase
; Read the block data into the buffer
BL
FR_ReadBlockIntoBuffer
; Data read in OK - wait for erase to finish
BL
FR_CheckErase
; Now write block
MOV
R0
,#
FR_WriteBlockState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
MOV
R0
,
R7
LDR
R1
,
FR_TransferBuffVal
BL
FR_DoWriteBlock
; Verify the block
BL
FR_ResetToReadArray
MOV
R0
,#
FR_VerifyBlockState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
MOV
R0
,
R7
LDR
R1
,
FR_TransferBuffVal
BL
FR_VerifyBlock
; Block done, on to the next
ADD
R7
,
R7
,#
FR_BlockSize
SUBS
R8
,
R8
,#
1
BNE
%BT01
; All finished - make ROM area read-only
BL
FR_MakeROM0ReadOnly
B
FR_LoopForever
FR_BeginVerify
ROUT
MOV
R0
,#
FR_BeginVerifyState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
; Read in parameters
BL
FR_ReadOffsetAndCount
01
; Read the block data into the buffer
BL
FR_ReadBlockIntoBuffer
; Data read in OK - now verify
MOV
R0
,#
FR_VerifyBlockState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
MOV
R0
,
R7
LDR
R1
,
FR_TransferBuffVal
BL
FR_VerifyBlock
; Block done, on to the next
ADD
R7
,
R7
,#
FR_BlockSize
SUBS
R8
,
R8
,#
1
BNE
%BT01
; All done
B
FR_LoopForever
FR_ReadOffsetAndCount
ROUT
;Called by the program and verify commands to read their parameters (offset
;and count) from the parallel port.
;On exit
; r7 = Initial offset in Flash ROM area
; r8 = Block count
; r0-r3 corrupted
STMFD
R13
!,{
LR
}
; Next incoming word is the block offset to start from
BL
FR_ParallelReadWord
MOV
R7
,
R0
; Check the offset is valid
CMP
R7
,#
FR_FlashSize
BHS
FR_OffsetError
MOVS
R0
,
R7
,
LSL
#(
32
-
FR_BlockSizeBits
)
; The offset within the block should be 0
BNE
FR_OffsetError
; Next incoming byte is the number of blocks
BL
FR_ParallelRead
MOVS
R8
,
R0
BEQ
FR_BlockCountError
ADD
R0
,
R7
,
R8
,
LSL
#
FR_BlockSizeBits
CMP
R0
,#
FR_FlashSize
BHI
FR_BlockCountError
; Turn the offset into a real address
ADD
R7
,
R7
,#
FR_FlashBase
LDMFD
R13
!,
{PC}
FR_ReadBlockIntoBuffer
ROUT
;Read a block of data from the parallel port into the transfer buffer
;Corrupts r0-r6
STMFD
R13
!,{
LR
}
MOV
R0
,#
FR_ReadBlockState
-
FR_BorderStateTable
BL
FR_ShowStateBorder
MOV
R6
,#
FR_BlockSize
LDR
R5
,
FR_TransferBuffVal
MOV
R4
,#
0
; Checksum
01
BL
FR_ParallelReadWord
STR
R0
,[
R5
],#
4
ADD
R4
,
R4
,
R0
SUBS
R6
,
R6
,#
4
BNE
%BT01
; Next word is the checksum
BL
FR_ParallelReadWord
CMP
R0
,
R4
BNE
FR_ChecksumError
LDMFD
R13
!,
{PC}
FR_ChecksumError
ROUT
MOV
R0
,#
FR_ChecksumErrorState
-
FR_BorderStateTable
B
FR_Error
FR_OffsetError
MOV
R0
,#
FR_OffsetErrorState
-
FR_BorderStateTable
B
FR_Error
FR_BlockCountError
MOV
R0
,#
FR_BlockCountErrorState
-
FR_BorderStateTable
FR_Error
BL
FR_ShowStateBorder
; Wait for front panel button to be pressed
01
LDRB
R0
,[
R11
,#
IOMD_CLINES
]
TST
R0
,#
IOMD_C_FrontPanelButton
BNE
%BT01
; Start again (note this also resets the stack pointer)
B
FR_RAMCodeStart
FR_ShowStateBorder
STMFD
R13
!,{
R1
}
ADR
R1
,
FR_BorderStateTable
LDR
R0
,[
R1
,
R0
]
STR
R0
,[
R10
]
LDMFD
R13
!,{
R1
}
MOV
PC
,
LR
FR_BorderStateTable
FR_WaitCmdState
DCD
&40FF0000
;Waiting for command - Blue
FR_BeginProgramState
DCD
&40808080
;Begin Program command - Grey
FR_BeginVerifyState
DCD
&40404040
;Begin Verify command - Dark grey
FR_ReadBlockState
DCD
&40FFFF00
;Reading block - Cyan
FR_WriteBlockState
DCD
&4000FF00
;Writing block - Green
FR_VerifyBlockState
DCD
&40FFFFFF
;Verifying block - White
FR_OffsetErrorState
DCD
&400000FF
;Offset error - Red
FR_BlockCountErrorState
DCD
&4000FFFF
;Block count error - Yellow
FR_ChecksumErrorState
DCD
&40FF00FF
;Checksum error - Magenta
FR_EraseErrorState
DCD
&40808000
;Erase error - Dark Cyan
FR_VoltageRangeErrorState
DCD
&40000080
;Voltage range error - Dark Red
FR_DeviceProtectErrorState
DCD
&40800000
;Device protect error - Dark Blue
FR_ProgramErrorState
DCD
&40008080
;Program error - Dark Yellow
FR_VerifyErrorState
DCD
&4000BBFF
;Verify error - Orange
FR_ParallelRead
ROUT
;Read a byte of data from the parallel port
;On entry
; r9 = Parallel port base address
;On exit
; r0 = byte read
; r1 corrupted
;Set nSLCTIN bit (puts BUSY low) and clear nSTROBE bit (puts nACK high),
;to indicate that we are ready to receive data
MOV
R0
,#
&28
; Input, IRQ off, BUSY low, nACK high
STRB
R0
,[
R9
,#
8
]
;Now wait until nACK bit (nSTROBE) goes low, meaning a byte is ready to be read
01
LDRB
R0
,[
R9
,#
4
]
TST
R0
,#
&40
BNE
%BT01
;Read the byte
LDRB
R0
,[
R9
]
;Set nSTROBE bit (puts nACK low) to indicate we read the byte, and
;clear nSLCTIN bit (puts BUSY high) to indicate we are busy and won't accept
;any more data
MOV
R1
,#
&21
; Input, IRQ off, BUSY high, nACK low
STRB
R1
,[
R9
,#
8
]
;Make sure nACK bit (nSTROBE) has returned high
02
LDRB
R0
,[
R9
,#
4
]
TST
R1
,#
&40
BEQ
%BT02
;Finish nAck pulse by clearing nSTROBE bit (puts nACK high). Keep BUSY high
MOV
R1
,#
&20
; Input, IRQ off, BUSY high, nACK high
STRB
R1
,[
R9
,#
8
]
MOV
pc
,
lr
FR_ParallelReadWord
ROUT
;Read a word of data from the parallel port
;On entry
; r9 = Parallel port base address
;On exit
; r0 = word read
; r1-r3 corrupted
MOV
R3
,
LR
BL
FR_ParallelRead
MOV
R2
,
R0
BL
FR_ParallelRead
ORR
R2
,
R2
,
R0
,
LSL
#
8
BL
FR_ParallelRead
ORR
R2
,
R2
,
R0
,
LSL
#
16
BL
FR_ParallelRead
ORR
R0
,
R2
,
R0
,
LSL
#
24
MOV
PC
,
R3
FR_MakeROM0Writable
STMFD
R13
!,{
R0
}
LDRB
R0
,[
R11
,#
IOMD_ROMCR0
]
ORR
R0
,
R0
,#
&80
STRB
R0
,[
R11
,#
IOMD_ROMCR0
]
LDMFD
R13
!,{
R0
}
MOV
PC
,
LR
FR_MakeROM0ReadOnly
STMFD
R13
!,{
R0
}
LDRB
R0
,[
R11
,#
IOMD_ROMCR0
]
BIC
R0
,
R0
,#
&80
STRB
R0
,[
R11
,#
IOMD_ROMCR0
]
LDMFD
R13
!,{
R0
}
MOV
PC
,
LR
FR_ResetToReadArray
ROUT
;Reset the flash devices to Read Array mode
STMFD
R13
!,{
R0
,
R1
}
MOV
R0
,#
FR_FlashBase
MOV
R1
,#
&FF
ORR
R1
,
R1
,
R1
,
LSL
#
8
STR
R1
,[
R0
]
; Write the Read Array command (&FF) to both devices
LDMFD
R13
,{
R0
,
R1
}
MOV
PC
,
LR
FR_StartErase
ROUT
;Start to erase a block (256KB) of flash memory
;On entry
; r0=Block Address (real memory address)
STMFD
R13
!,{
R1
}
MOV
R1
,#
&20
ORR
R1
,
R1
,
R1
,
LSL
#
8
STR
R1
,[
R0
]
; Write the Block Erase command (&20) to both devices
MOV
R1
,#
&D0
ORR
R1
,
R1
,
R1
,
LSL
#
8
STR
R1
,[
R0
]
; Write the Confirm command (&D0) to both devices
LDMFD
R13
!,{
R1
}
MOV
PC
,
LR
FR_CheckErase
ROUT
;Wait for erase to finish
STMFD
R13
!,{
R0
,
R1
}
MOV
R0
,#
FR_FlashBase
01
LDR
R1
,[
R0
]
; Read the status register
TST
R1
,#
&0080
; Check even SR.7
TSTNE
R1
,#
&8000
; Check odd SR.7
BEQ
%BT01
; Repeat until both set
TST
R1
,#
&0020
; Check even SR.5
TSTEQ
R1
,#
&2000
; Check odd SR.5
BNE
FR_ceEraseError
LDMFD
R13
!,{
R0
,
R1
}
MOV
PC
,
LR
FR_ceEraseError
MOV
R1
,#
&50
ORR
R1
,
R1
,
R1
,
LSL
#
8
STR
R1
,[
R0
]
; Write Clear Status Register command (&50) to beth devices
BL
FR_ResetToReadArray
BL
FR_MakeROM0ReadOnly
LDMFD
R13
!,{
R0
,
R1
}
MOV
R0
,#
FR_EraseErrorState
-
FR_BorderStateTable
B
FR_Error
FR_DoWriteBlock
ROUT
;Writes a block (256KB) of data to flash memory
;On entry
; r0=Block Address (real memory address)
; r1=Pointer to data to write
;On exit
; r0,r1 have advanced by the block size (256KB)
STMFD
R13
!,{
R2
,
R3
,
LR
}
MOV
R2
,
R1
MOV
R1
,
R0
MOV
R3
,#
FR_BlockSize
01
BL
FR_DoWriteBuffer
SUBS
R3
,
R3
,#
FR_BufferSize
BNE
%BT01
MOV
R0
,
R1
MOV
R1
,
R2
LDMFD
R13
!,{
R2
,
R3
,
PC
}
FR_DoWriteBuffer
ROUT
;Write a buffer full of data (64 bytes) to flash memory
;On entry
; r0=Block Address
; r1=Start Address
; r2=Pointer to data to write
;On exit
; r0 preserved
; r1,r2 have increased by 64 bytes
STMFD
R13
!,{
R3
,
R4
,
LR
}
MOV
R3
,#
&E8
ORR
R3
,
R3
,
R3
,
LSL
#
8
01
STR
R3
,[
R0
]
; Write the Write to Buffer command (&E8) to both devices
LDR
R4
,[
R0
]
; Read the XSR
TST
R4
,#
&0080
; Check even XSR.7
TSTNE
R4
,#
&8000
; Check odd XSR.7
BEQ
%BT01
; Repeat until both set
MOV
R3
,#(
FR_DeviceBufferSize
:SHR:
1
)-
1
; No. of (16-bit) words to write - 1
ORR
R3
,
R3
,
R3
,
LSL
#
8
STR
R3
,[
R0
]
; Write the (16-bit) word count to both devices
MOV
R3
,#
FR_BufferSize
02
LDR
R4
,[
R2
],#
4
STR
R4
,[
R1
],#
4
; Write a (16-bit) word of data to each device
SUBS
R3
,
R3
,#
4
BNE
%BT02
MOV
R3
,#
&D0
ORR
R3
,
R3
,
R3
,
LSL
#
8
STR
R3
,[
R0
]
; Write the Confirm command (&D0) to both devices
03
LDR
R4
,[
R0
]
; Read the status register
TST
R4
,#
&0080
; Check even SR.7
TSTNE
R4
,#
&8000
; Check odd SR.7
BEQ
%BT03
; Repeat until both set
TST
R4
,#
&0008
; Check even SR.3
TSTEQ
R4
,#
&0800
; Check odd SR.3
BNE
FR_dwbfVoltageRangeError
TST
R4
,#
&0002
; Check even SR.1
TSTEQ
R4
,#
&0200
; Check odd SR.1
BNE
FR_dwbfDeviceProtectError
TST
R4
,#
&0010
; Check even SR.4
TSTEQ
R4
,#
&1000
; Check odd SR.4
BNE
FR_dwbfProgramError
; Programming completed successfully
LDMFD
R13
!,{
R3
,
R4
,
PC
}
FR_dwbfVoltageRangeError
MOV
R0
,#
FR_VoltageRangeErrorState
-
FR_BorderStateTable
B
FR_dwbfErrorExit
FR_dwbfDeviceProtectError
MOV
R0
,#
FR_DeviceProtectErrorState
-
FR_BorderStateTable
B
FR_dwbfErrorExit
FR_dwbfProgramError
MOV
R0
,#
FR_ProgramErrorState
-
FR_BorderStateTable
FR_dwbfErrorExit
MOV
R3
,#
&50
ORR
R3
,
R3
,
R3
,
LSL
#
8
MOV
R4
,#
FR_FlashBase
STR
R1
,[
R4
]
; Write Clear Status Register command (&50) to beth devices
BL
FR_ResetToReadArray
BL
FR_MakeROM0ReadOnly
LDMFD
R13
!,{
R3
,
R4
,
LR
}
B
FR_Error
FR_VerifyBlock
ROUT
;Compare a block (256KB) of data to flash memory
;On entry
; r0=Block Address (real memory address)
; r1=Pointer to block to compare
;On exit
; r0,r1 have advanced by the block size (256KB)
STMFD
R13
!,{
R2
-
R4
}
MOV
R2
,#
FR_BlockSize
01
LDR
R3
,[
R0
],#
4
LDR
R4
,[
R1
],#
4
CMP
R3
,
R4
BNE
FR_VerifyError
SUBS
R2
,
R2
,#
4
BNE
%BT01
LDMFD
R13
!,{
R2
-
R4
}
MOV
PC
,
LR
FR_VerifyError
MOV
R0
,#
FR_VerifyErrorState
-
FR_BorderStateTable
B
FR_Error
FR_RAMCodeEnd
END
This diff is collapsed.
Click to expand it.
s/GetAll
View file @
87114d6d
...
@@ -217,6 +217,9 @@ IncludeTestSrc SETL {FALSE} :LAND: :LNOT: STB
...
@@ -217,6 +217,9 @@ IncludeTestSrc SETL {FALSE} :LAND: :LNOT: STB
GBLL
RO371Timings
GBLL
RO371Timings
RO371Timings
SETL
:LNOT:
STB
RO371Timings
SETL
:LNOT:
STB
; For development on Customer M hardware only
GBLL
ParallelFlashUpgrade
ParallelFlashUpgrade
SETL
{FALSE}
[
:LNOT:
RO371Timings
[
:LNOT:
RO371Timings
...
@@ -484,6 +487,12 @@ ProcessorVectors SETL {TRUE} ; Processor vectors indirected t
...
@@ -484,6 +487,12 @@ ProcessorVectors SETL {TRUE} ; Processor vectors indirected t
GetUnsqueeze
SETS
"GET s.Unsqueeze"
GetUnsqueeze
SETS
"GET s.Unsqueeze"
|
|
GetUnsqueeze
SETS
""
GetUnsqueeze
SETS
""
]
GBLS
GetFlashROM
[
ParallelFlashUpgrade
GetFlashROM
SETS
"GET s.FlashROM"
|
GetFlashROM
SETS
""
]
]
GBLS
GetPublicWS
GBLS
GetPublicWS
GBLS
GetWorkspace
GBLS
GetWorkspace
...
@@ -630,6 +639,7 @@ largest_rma_size * (128*1024) ; and the ceiling for rma use
...
@@ -630,6 +639,7 @@ largest_rma_size * (128*1024) ; and the ceiling for rma use
GET
s.Copro15ops ; some macros
GET
s.Copro15ops ; some macros
GET
s.Kernel
GET
s.Kernel
$GetFlashROM
GET
s.NewIRQs
GET
s.NewIRQs
GET
s.Oscli
GET
s.Oscli
GET
s.SysComms
GET
s.SysComms
...
...
This diff is collapsed.
Click to expand it.
s/Morris
View file @
87114d6d
...
@@ -20,7 +20,6 @@
...
@@ -20,7 +20,6 @@
MorrisHeaderCodeSize
*
(
24
*
4
)
;Code occupies less than this, we pad to this boundary so POST code
MorrisHeaderCodeSize
*
(
24
*
4
)
;Code occupies less than this, we pad to this boundary so POST code
;has a nicely defined place for its romsize and code entry points
;has a nicely defined place for its romsize and code entry points
[
1
=
1
; VECTOR AREA:
; VECTOR AREA:
LDR
pc
,
.
+
ResetIndirection
LDR
pc
,
.
+
ResetIndirection
...
@@ -44,43 +43,20 @@ MorrisHeaderCodeSize * (24*4) ;Code occupies less than this, we pad to this bo
...
@@ -44,43 +43,20 @@ MorrisHeaderCodeSize * (24*4) ;Code occupies less than this, we pad to this bo
; produced in 16-in-32 form by extracting hex values from a listing...
; produced in 16-in-32 form by extracting hex values from a listing...
DCD
&0000B632
,
&0000E3A0
; 20: MOV R11, #IO+IOMDREGS - point at IOMD
DCD
&0000B632
,
&0000E3A0
; 20: MOV R11, #IO+IOMDREGS - point at IOMD
DCD
&00000000
,
&0000E3A0
; 24: MOV R0, #&0 - ROMCR:32b,slow,218.75us,no burst
DCD
&00000000
,
&0000E3A0
; 28: MOV R0, #&0 - ROMCR:32b,slow,218.75us,no burst
DCD
&00000080
,
&0000E5CB
; 28: STRB R0,[R11,#ROMCR0] - switch mode
DCD
&00000080
,
&0000E5CB
; 30: STRB R0,[R11,#ROMCR0] - switch mode
DCD
&0000F000
,
&0000E3A0
; 2C: MOV PC, #0 - jump to 0 (this instr pre-fetched)
[
:LNOT:
ParallelFlashUpgrade
DCD
&0000F000
,
&0000E3A0
; 38: MOV PC, #0 - jump to 0 (this instr pre-fetched)
|
|
;
; At this point, we know that we're in an ARM 7500-based box with 32-bit ROMs that's
; Kludged to cope with Morris Bugs
; just been powered up. These are the conditions under which we may wish to reprogram
;
; ourselves.
CFR_Offset
*
(
ConsiderFlashROM
-
ROM
-
((
.
-
ROM
)/
2
)
-
8
)/
4
!
0
,
"<><><><><><><> This kernel version will not softload on a Risc PC <><><><><><><>"
DCD
CFR_Offset
:AND:
&FFFF
; 38: B ConsiderFlashROM (this instr pre-fetched)
DCD
&0000EA00
+
(
CFR_Offset
:SHR:
16
)
DCD
&E3A0F010
DCD
&FFFFE3A0
DCD
&E59FF034
DCD
&E59FF034
DCD
&E59FF034
DCD
&E59FF034
DCD
&E59FF034
DCD
&E59FF034
DCD
&E3A0B632
DCD
&E3A0E3A0
; 20: MOV R11, #IO+IOMDREGS - point at IOMD
DCD
&E3A00000
DCD
&E3A0E3A0
; 24: MOV R0, #&0 - ROMCR:32b,slow,218.75us,no burst
DCD
&E5CB0080
DCD
&E3A0E5CB
; 28: STRB R0,[R11,#ROMCR0] - switch mode
DCD
&E59FF0F4
DCD
&E5CBE59F
; 2C: MOV PC, #0 - jump to 0 (this instr pre-fetched)
]
]
; vector absolute targets for use from physical vector instructions
; vector absolute targets for use from physical vector instructions
UNDEF_VEC
DCD
UndInstInReset
-
ROM
UNDEF_VEC
DCD
UndInstInReset
-
ROM
SWI_VEC
DCD
SWIInReset
-
ROM
SWI_VEC
DCD
SWIInReset
-
ROM
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment