S1/30に取り付けている 512KBに改造したKR2-A基板を使用中にOS-9 Level2で
「System Abort」 エラーが出ることが判明しました(泣![]()
モジュールを大量にロードすると、何かのタイミングでSystem Abortエラーが出ます。
試しに同じ順番でモジュールをロードしテストしていますが、エラーが出ない場合や発生する
タイミングが違うなど特定のアドレスでのエラーではなさそうです。
改造後S1-BASICのRAMディスクで使用していましたが特に不具合はありませんでした。
OS-9L2使用時のみエラーが出るということは、私のOS-9カードが日立純正ではなく自作カード
なので、その辺の問題もあるかもしれません・・・
そこで、
S1-BASICで物理メモリの読み書き用テストプログラムを作ってみました (^^)
100 'KABEKIN PHYSICAL DRAM CHECK V.1.1
110 CLEAR,&HC000: CLS: WIDTH80: DEFMAP=0
120 '*** ADDRESS/MACHINE PROG SET
130 ENT1=&HC000: CHKPAGE=&HC002: CHKDAT=&HC003: EADD=&HC004: PRGLEN=&H2F
140 FOR I=0 TO PRGLEN
150 READ L$: POKE ENT1+I,VAL("&H"+L$)
160 NEXT
170 PRINT "*** KABEKIN PHYSICAL MEMORY CHECK V1.1 ***"
180 INPUT"START PHYSICAL PAGE No.=$";STP$: STPG=VAL("&H"+STP$)
190 INPUT"LAST PHYSICAL PAGE No.=$";LAP$: LTPG=VAL("&H"+LAP$)
200 FOR PAGE=STPG TO LTPG
210 FOR J=1 TO 2
220 IF J=1 THEN POKE CHKDAT,&HA5 ELSE POKE CHKDAT,&H5A
230 POKE CHKPAGE,PAGE
240 GOSUB 300: EXEC ENT1
250 IF (PEEK(EADD)<>0) OR (PEEK(EADD+1)<>0) THEN GOSUB 340 ELSE GOSUB 370
260 NEXT J
270 NEXT PAGE
280 END
290 '*** INFO DISP.
300 PRINT"CHECK PHYSICAL PAGE No.$";HEX$(PEEK(CHKPAGE));
310 PRINT" CHECK DATA PATTERN:$";HEX$(PEEK(CHKDAT));
320 RETURN
330 '*** ERR DISP.
340 EADD2$=HEX$(PEEK(EADD)*256+PEEK(EADD+1)-1)
350 COLOR2:PRINT " VERIFY ERROR ADDRESS=";EADD2$:COLOR7: BEEP: RETURN
360 '*** OK DISP.
370 COLOR5: PRINT " OK": COLOR7: RETURN
1000 '*** MACHINE LANG SUB.
1010 DATA 20,04,00,EE,00,00,7F,C0,04,7F,C0,05,B6,C0,02,C6
1020 DATA F0,10,3F,40,09,8E,00,00,B6,C0,03,A7,84,12,E6,80
1030 DATA F1,C0,03,26,06,8C,10,00,26,F1,39,BF,C0,04,39,00マシン語部分はこんな感じです
; メモリチェック サブルーチン V.1.1
ORG $C000
BRA ENTRY
CHKPAGE FCB $0 ;チェックする物理ページ番号($C002)
CHKDATA FCB $A5 ;チェックするデータパターン($C003)
ERRADDR FDB $0000 ;エラー発生論理アドレス($C004,5)
ENTRY EQU *
CLR ERRADDR ;エラーアドレスクリア
CLR ERRADDR+1
LDA CHKPAGE ;物理ページ番号指定
LDB #$F0 ;系列と論理ページ番号指定
SWI2 ;SYSTEM CALL MMSTPG
FCB $40,09 ;物理ページを指定しF系列$0000~割付
LDX #$0000 ;$0000をXにセット
LDA CHKDATA ;メモリに書込
LOOP1 STA ,X ;Xのアドレスにデータを書込
NOP
LDB ,X+ ;メモリから読込
CMPB CHKDATA ;データ照合
BNE ERROC1 ;データ不一致ありでERROC1へ
CMPX #$1000 ; +
BNE LOOP1 ;1ページ分(4KB)繰返し
FIN RTS ;1ページ 4KBエラー無しで終了(RTS)
ERROC1 EQU *
STX ERRADDR ;エラーアドレス+1セット
RTS ;エラーアドレスをセットで戻る(RTS)
S1のシステムコール MMSTPG を使った簡易的なテストプログラムです。
指定した物理メモリページにテストパターン $A5と$5Aを書いて比較するだけですが、
これでチェックできるのではと作ってみましたが、問題発生・・・
このプログラムでテストすると、アクセスしてはいけない領域があるのか、特定のエリアを書き込むとエラーにプログラムが中断されます(^^;;;
書けない物理ページは01,02,09で、
ページ01は SYNTAX ERROR でプログラムがクリアされて暴走
ページ02はAddress Errorでメモリチェック中断
ページ09は$901Cでベリファイエラー発生でメモリチェック中断
でした
(それ以外のエリアのチェックはOKっぽい)
ページ3~8と$10から$7Fまではチェックできるようなので一通りチェック実施
何度テストしても WRITE/READチェック では特に問題無いようです。
念のためS1モニターで各ページの先頭を確認してみると目的通り書かれています(^^)![]()
メモリーチェックでは問題なさそうですが、OS-9でエラーになるのは何故だろう・・・
OS-9カードが自作品なので、そちらとの相性などもあるんでしょうかね(^^;;;
アクセス禁止エリアの情報やメモリーチェック方法など、もっといい方法があれば助言下さい(^^)
そんな、KR2-A拡張ボードチェックの記録・・・
★★ アフェリエイトリンクでご協力をお願いします お買い物はこちらから(^^) ★★
アマゾンでS1情報を探す → Amazon.co.jp(アマゾン)
ヤフーでS1情報を探す → Yahoo!ショッピング
楽天市場でS1情報を探す → 楽天市場 ![]()