| page | Adress | RAM 8K | 16K | 32K | 64K |
|---|---|---|---|---|---|
| 0 | 0000h | ---- | ---- | ---- | 裏RAM(BASIC時) |
| 1 | 4000h | ---- | ---- | ---- | 裏RAM(BASIC時) |
| 2 | 8000h | ---- | ---- | RAM | RAM |
| 3 | C000h | ---- | RAM | RAM | RAM |
| E000h | RAM | RAM | RAM | RAM |
- F380h以降はシステム領域のため、BIOSを使用する場合は使用不可
- BASIC時はpage0と1はBASIC ROMが表に出ている
- ディスクが繋がっている場合
| Address | 内容 |
|---|---|
| F341h | page0のRAMスロット番号 |
| F342h | page1のRAMスロット番号 |
| F343h | page2のRAMスロット番号 |
| F344h | page3のRAMスロット番号 |
- ディスクが繋がっていない場合
- 特定のスロットの0010h→0001hまで、値を読み込んで反転させて書き込み、もう一度読み込んで正常に書き込めたかチェック。書き込めていたら元に戻す
- 書き込み前に割り込みを禁止すること
- 次に0410h→0401hまで同じ処理を行い、以下400h番地毎に繰り返して、最後3C10h→3C01hまで正常に書き込めたらそのスロットのページ0はRAM
- スロット1は4010hから、スロット2は8010hから、スロット3はC010hから同処理を行う
- MSXでは各ページのRAMは全て別スロットにある場合も有りうる
- 特定のスロットの0010h→0001hまで、値を読み込んで反転させて書き込み、もう一度読み込んで正常に書き込めたかチェック。書き込めていたら元に戻す
- CHKRAM.MAC (C)ASCII このサンプルでは裏RAMのみ検索している
.z80
rdslt equ 000ch
wrslt equ 0014h
exptbl equ 0fcc1h
start equ 9000h ;ここにプログラムを置くアドレスをセット(+2が実行アドレス)
aseg
org 0100h
.phase start-7
db 0feh
dw ad_load
dw ad_next-1
dw ad_start
ad_load:
sav0: db 0
sav1: db 0
ad_start:
ld c,0
call chk64k
jr c,chk1p
ld (sav0),a
chk1p:
ld c,40h
call chk64k
ret c
ld (sav1),a
ret
chk64k:
ld hl,exptbl
ld b,4
xor a
c64k05:
and 11b
ld e,a
ld a,(hl)
and 80h
or e
c64k07:
push bc
push hl
ld h,c
c64k10:
ld l,10h
c64k20:
push af
di
call rdslt
cpl
ld e,a
pop af
push de
push af
call wrslt
pop af
pop de
push af
push de
call rdslt
pop bc
ld b,a
add a,c
cpl
ld e,a
pop af
push af
push bc
call wrslt
ei
pop bc
ld a,c
cp b
jr nz,c64k30
pop af
dec l
jr nz,c64k20
inc h
inc h
inc h
inc h
ld c,a
ld a,h
jr z,c64end
cp 80h
ld a,c
jr nz,c64k10
c64end:
ld a,c
pop hl
pop hl
ret
c64k30:
pop af
pop hl
pop bc
and a
jp p,c64k40
add a,00000100b
cp 10010000b
jr c,c64k07
c64k40:
inc hl
inc a
djnz c64k05
scf
ret
ad_next equ $
.dephase
end
- CHKRAM.BAS
100 CLEAR 200,&H8FFF
110 DEFINT A-Z
120 BLOAD "CHKRAM.BIN"
130 DEFUSR=&h9002
140 JK=USR(0)
150 R0=PEEK(&H9000)
160 R1=PEEK(&H9001)
170 PRINT HEX$(R0),HEX$(R1)
180 END
- リスト1 素数計算プログラム1
10 K=0:ON INTERVAL=3600 GOSUB 70:INTERVAL ON
20 XA#=1:B#=3
30 IF (XA#/B#-INT(XA#/B#))*B#=0 THEN XA#=XA#+2:B#=3:GOTO 30
40 IF B#>XA#^.5 THEN GOTO 60
50 B#=B#+2:GOTO 30
60 XB#=XA#:XA#=XA#+2:B#=3:GOTO 30
70 K=K+1:IF K=30 THEN PRINT XB#:BEEP:END ELSE RETURN
- リスト1の実行結果
| 機種 | XB# | XA# | B# |
|---|---|---|---|
| FM-X | 2357 | 2369 | 17 |
| CF-2000 | 2357 | 2369 | 17 |
| HB-55 | 2357 | 2369 | 15 |
| V-10 | 2357 | 2369 | 17 |
| HX-10S | 2357 | 2369 | 17 |
| ML-8000 | 2357 | 2369 | 17 |
| MB-H1 | 2357 | 2381 | 3 |
| HC-6 | 2357 | 2359 | 5 |
| YIS-503 | 2357 | 2359 | 5 |
| MPC-10 | 2357 | 2369 | 17 |
| PCT-50 | 2357 | 2369 | 19 |
| FM-7 | 9239 | 9241 | 37 |
| PC-8801 | 2801 | 2803 | 5 |
- リスト2 素数計算プログラム2は他機種との比較のため、省略する
- リスト3 ループテストプログラム
10 TIME=0
20 FOR I=0 TO 30000
30 NEXT I
40 PRINT TIME
- リスト4 READ DATA テストプログラム
50 TIME=0
60 FOR J=0 TO 30000
70 READ A
80 RESTORE 200
90 NEXT J
100 PRINT TIME
110 END
200 DATA 3
| 機種 | FOR〜NEXT | READ DATA |
|---|---|---|
| M5 Jr.(BASIC-G) | 16s | 52s |
| PV-2000 | 14.18s | 1m13.12s |
| SC-3000H (BASIC-LEVELIIIB) | 2m19s | 5m50s |
| FM-X | 59.00s*1 | 2m46.90s |
| CF-2000 | 59.00s | 2m46.90s |
| HB-55 | 59.00s | 2m46.92s |
| V-10 | 58.98s | 2m46.88s |
| HX-10S | 59.00s | 2m45.8s |
| ML-8000 | 59.00s | 2m46.88s |
| MB-H1 | 59.00s | 2m46.03s |
| HC-6 | 59.13s | 2m47.27s |
| YIS-503 | 59.13s | 2m47.27s |
| MPC-10 | 59.00s | 2m46.88s |
| PCT-50 | 57.98s | 2m46.86s |
| FM-7 | 27s | 2m04s |
| PC-8801 | 1m15s | 6m13s |
パナソニックのMSX2+/tRに搭載されている『実行』『取消』キーの入力はキーボードスキャン信号11を読めば判別できる。
サンプルプログラム
サンプルプログラム
10 CLS
20 OUT &HAA,16*&B0101+11
30 A=INP(&HA9)
40 PRINT RIGHT$("00000000"+BIN$(A),8)
50 GOTO 20
| 結果 | 内容 |
|---|---|
| 11111101 | 『実行』キーが押されている |
| 11110111 | 『取消』キーが押されている |

コメントをかく