S1 512Kバイトに改造したKR2-A基板でエラー発生かも?

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情報を探す → 楽天市場

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください