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