レトロパソコンMSXに関する何かしらを個人的にまとめています。

×

技術資料

MSX関連の基礎的な技術資料をジワジワ追加していきます
(多分テクハンやDatapackを見た方が早い)

全機種共通

機種判別方法
Main ROMの002dhの値で判別する。
機種
0MSX
1MSX2
2MSX2+
3MSX turbo R

MSX1関連

RAM
pageAdressRAM 8K16K32K64K
00000h------------裏RAM(BASIC時)
14000h------------裏RAM(BASIC時)
28000h--------RAMRAM
3C000h----RAMRAMRAM
E000hRAMRAMRAMRAM
  • F380h以降はシステム領域のため、BIOSを使用する場合は使用不可
  • BASIC時はpage0と1はBASIC ROMが表に出ている
RAM容量のチェック方法 (MSXテクニカルガイドブック? / MSXマガジン 1987年9月号 p166-169)
  • ディスクが繋がっている場合
Address内容
F341hpage0のRAMスロット番号
F342hpage1のRAMスロット番号
F343hpage2のRAMスロット番号
F344hpage3のRAMスロット番号
  • ディスクが繋がっていない場合
    • 特定のスロットの0010h→0001hまで、値を読み込んで反転させて書き込み、もう一度読み込んで正常に書き込めたかチェック。書き込めていたら元に戻す
      • 書き込み前に割り込みを禁止すること
    • 次に0410h→0401hまで同じ処理を行い、以下400h番地毎に繰り返して、最後3C10h→3C01hまで正常に書き込めたらそのスロットのページ0はRAM
    • スロット1は4010hから、スロット2は8010hから、スロット3はC010hから同処理を行う
    • MSXでは各ページのRAMは全て別スロットにある場合も有りうる
  • 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
BASICのベンチマークテスト (テクノポリス 1984年4月号 p25-27)
  • リスト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の実行結果
    • FM-7とPC-8801は参考値。動作するようプログラムを微修正
    • 各値は大きいほど動作が早い事を示し、XB#>XA#>B#の順に優先度がある
    • MB-H1の動作が速いのは電源ユニットを分離しているためではないかと誌上では分析している
    • 逆にHC-6YIS-503が遅れたのはサイドスロットなどの追加インターフェースが原因かもしれないと分析している
機種XB#XA#B#
FM-X2357236917
CF-20002357236917
HB-552357236915
V-102357236917
HX-10S2357236917
ML-80002357236917
MB-H1235723813
HC-6235723595
YIS-503235723595
MPC-102357236917
PCT-502357236919
FM-79239924137
PC-8801280128035
  • リスト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
  • リスト3・4の実行結果
    • HC-6YIS-503が遅れたのはリスト1と同じ理由と推測している
    • V-10PCT-50がループ、HX-10SがREAD DATAで速い理由は不明
機種FOR〜NEXTREAD DATA
M5 Jr.(BASIC-G)16s52s
PV-200014.18s1m13.12s
SC-3000H
(BASIC-LEVELIIIB)
2m19s5m50s
FM-X59.00s*12m46.90s
CF-200059.00s2m46.90s
HB-5559.00s2m46.92s
V-1058.98s2m46.88s
HX-10S59.00s2m45.8s
ML-800059.00s2m46.88s
MB-H159.00s2m46.03s
HC-659.13s2m47.27s
YIS-50359.13s2m47.27s
MPC-1059.00s2m46.88s
PCT-5057.98s2m46.86s
FM-727s2m04s
PC-88011m15s6m13s

MSX2関連

MSX2+関連

パナソニック機の『実行』『取消』キーの使用法 (バックアップ活用テクニック Vol.38 p111)
パナソニックの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『取消』キーが押されている

MSX turbo R関連

BASICから内蔵ソフトを起動する方法 (バックアップ活用テクニック Vol.38 p111)
機種コマンド
FS-A1STCALL HIRO
FS-A1GTCALL MWP
  • GTのMSX VIEWからはSOFT.COMを実行すると起動できる

コメントをかく


利用規約をご確認のうえご記入下さい

どなたでも編集できます

広告募集中