CPU | D780C-1(Z80A) 3.579MHz |
VDP | TMS9918 |
PSG | SN76489 |
ROM | 16KB |
RAM | 4KB |
V-RAM | 16KB |
Z80を使った基本的な低価格パソコンで可も無く不可も無くといったパソコンで
SC−3000等とほぼ同じ構成となっている、Z80版ぴゅう太といった所
I/O周りは富士通製64ピンのカスタムチップ(MB−62155)が担当
ワークエリアはSRAM2KB×2の4KB
整数型BASIC内蔵のROM16KBを持つ
カートリッジ端子図
/CS1 MREQとアドレスA15のNANDなので08000Hの/CS
/CS2 MB-62155の30ピンにつながっており、0C000Hの/CS
B16端子がプルアップ出来るようになっておりPV−1000かRAMカートリッジに関連しているようである
CON 拡張RAMコネクタのB16と繋がっています。
ROMカートリッジ(128KBit)回路図
2764(UV−EPROM)を2つ載せ、NANDを使ってアドレスデコードをしています
本体のアドレスは0C000H−0FFFFHの16KBなので128KBitのROMなら1個ですみます
0C000Hに0C3H、実行アドレス下位、実行アドレス上位があると、そのアドレスにオートスタートします
256KBitのROMも載せられるみたいなのですがこの場合拡張RAMと競合しない様にしなければいけません
例 パチンコUFO(128KBit) CRC:1261e766
0C000:C3 22 C0 42 59 20 20 48 2E 53 41 54 4F 48 20 26 :
0C010:20 48 2E 4B 55 42 4F 54 41 20 02 82 0E FF 03 38 :
0C020:03 00 31 00 80 CD 99 C0 21 00 01 22 26 74 CD DB :
先頭アドレス3バイトが0C3H、022H、0C0Hなので
0C022Hがこのソフトのスタートアドレスになります
BASIC ROM(HN613128P) CRC:8f31f297
マスクROMを使用しています
割り込み(不明な部分があります)
/INT(キーボード)
割り込みモード0を使用しており
何かキーが押されたらRST 7(RST 038H)に飛ぶようです
まず最初に0749BHにジャンプ(フック)してから、
STOPキーチェック、キースキャン、キークリック等をして
ポート020Hを00FHを出力(キー割込み開始)、EI(割りこみ許可)をしてからRETしています
またRST 7のみ使用しているようです
/NMI(VDP)
まず最初にワークRAMの07498Hにジャンプ
VSYNC割りこみに使用しており、TMS9918側で設定する事で禁止可
キー入力
キーボードおよびジョィスティックはポート020HのBit3−0にKey No.n(00−09)を出力
ポート010H、ポート020Hでキースキャンが出来ます
ポート040H でSHIFT、FUNC、COLORキーが単独でスキャン
カーソルキー、ATTACK0、ATTACK1はジョイスティック1と共用
Key No.04 ポート020H Bit2はJ1 START(未確認)
I/Oポート(かなり不明な部分があります)
000H:CMTコントロール
Bit3=READ 1=オン、0=オフ
Bit2=1200bps 1=オン、0=オフ
Bit1=WRITE 1=オン、0=オフ
Bit0=MOTOR?1=オン、0=オフ
*1200bpsをオフにすると300bps
010H:キーボード上位データ
Bit3=キーボードデータのBit7
Bit2=キーボードデータのBit6
Bit1=キーボードデータのBit5
Bit0=キーボードデータのBit4
020H:キーボード下位データ(リード)/KEY No.nn nn=00−09、0FHでRST7割り込み(キー)を発生(ライト)
Bit3=キーボードデータのd3(リード)/KEY No.d3(ライト)
Bit2=キーボードデータのd2(リード)/KEY No.d2(ライト)
Bit1=キーボードデータのd1(リード)/KEY No.d1(ライト)
Bit0=キーボードデータのd0(リード)/KEY No.d0(ライト)
040H:Bit3−0 特殊キーの内容の状態(リード)/PSG(ライト)
060H:CMTデータ
Bit2=CMT リード完了の検出 1=あり、0=なし(リード)
Bit1=CMT エラーの検出 1=あり、0=なし(リード)
Bit0=CMT データ (リード/ライト)
080H:PRT データ(ライト)
090H:PRT コントロール(リード)
Bit7=BUSY 1=BUSY、0=No BUSY
0A0H:PRT コントロール?(ライト)
0B0H:PRT コントロール?(ライト)
*0A0Hと0B0HはSTROBE信号のようで
アクセスするだけで値は何でもよい
メモリマップ・ド・I/O部分
04000H−04001H:TMS9918
V−RAM メモリ・マップ
TMS9918なのでアドレスは変更出来るのですがBASICのシステムで初期化している時のアドレスです
グラフイックモード2(MSXでいうとSCREEN2)を使用しています
00000H-007FFH:パターンジェネレータトップ
00800H-00FFFH:パターンジェネレータミドル
01000H-017FFH:パターンジェネレータロウ
01800H-01BFFH:スプライトパターンジェネレータ
01C00H-01F7FH:パターンネームテーブル
01F00H-01FFFH:スプライトアトリビュート
02000H-03FFFH:カラーテーブル
ワーク
07000H−0707FH:VDPバッファ
07100H−071FFH:汎用バッファ
07200H−0721FH:VDP、CMTバッファ
07200H :???CMTファイルタイプ
07201H−07208H:CMTファイルネーム
07218H−07219H:CMTプログラムデータの長さ
0721AH−0721BH:CMT
07221H−07222H:CMTリードデータ ストアアドレス
07223H−07224H:CMT
07225H−07226H:CMT
07228H :CMT
07229H :CMT汎用ワーク(用途によって異なる)
ロード時、チェックサム 000Hでロード成功
0722BH−0732AH:VDP、CMTバッファ
0732BH−0742AH:???CMTバッファ
07497H:スタックポインタ上限
07498H−0749AH:NMIフック(VDP)JP 00069H
0749BH−0749DH:INTフック(KEY)RET
0749EH−074A0H:BASフック RET
074A1H−074A3H:BAS コマンドド実行用フック RET
074A4H−074A6H:BASフック RET
074A7H−074A9H:BASフック 中間言語 RET
074AAH−074ACH:BASフック RET
074ADH−074AFH:BAS 中間言語変換用フック RET
074B0H−074B2H:BASフック RET
074B3H−074B5H:MENU用フック RET
074B6H :X座標の最大値
074B7H−074B8H:RAMエンドアドレス
074B9H :キー入力フラグ
000H=ノーマル
001H=カナ
074BBH :TIME(NMI256回でINC)
074BDH :1/60秒カウンタ
074BEH :VDPステータスレジスタの内容
074BFH :???TIME(0)関係
074C0H :BAS CALL文 Aレジスタパラメータ
074C1H−074C2H:BAS CALL文 HLレジスタパラメータ
074C3H−074C4H:BAS CALL文 BCレジスタパラメータ
074C5H−074C6H:BAS CALL文 DEレジスタパラメータ
074C7H :???NMI毎で74B9Hが000Hなら+020H、それ以外だと+040H
074C8H :NMI内でのVDPステータス参照使用許可フラグ
0FFH−001H=参照しない
000H =参照する
074C9H :???INKEY用のフラグ
074CAH :バックカラー(VDP R#07)
074CBH :PICUTURカーソルカラー
074CCH :
074CDH :BAS COLOR第1パラメータ、PICUTURドットカラー
074CEH :LOCATE X(0から29)
074CFH :LOCATE Y(0から23)
074D0H−074D1H:
074D4H :BAS RUN用フラグ
0FFH=プログラム実行停止
000H=プログラム実行中
074D5H :画面デバイス
001H=PRT
000H=CRT
074D6H :STOPキー フラグ
0FFH=オン
000H=オフ
074D7H−074D8H:???RESTORE
074D9H :
074DAH−074DBH:
074DCH :???カーソル点滅(NMIでDEC)
074DDH :スプライトMAG 00〜03
074DEH−074F0H:ANIMATION用
074F1H−074F2H:バッファポインタ先頭アドレス
074F3H−074F4H:バッファポインタ
074F5H :カーソルのX座標
074F7H−07514H:???スプライト用変数
07515H :NMI実行フラグ (VSYNCが行われたら000Hになる)
07518H :
07519H :
0751DH :
07524H−07525H:
07526H−07527H:
0752CH−0752DH:BAS プログラム行番号
07536H−07537H:???RND用
07538H :BASライン カウンタ
07539H :入力タイプ 051H=PICTURE、031H=4LINE BASIC
031H=BASIC
Bit7:
Bit6:1=EDIT ON、EDIT OFF
Bit5:
Bit4:
Bit3:−
Bit2:−
Bit1:−
Bit0:1=PRG MODE)、0=CMD MODE
0753AH−0753BH:
0753EH−07541H:1C 20 44 07 PLAY文用CH Aデータ コマンド?,カウンタ0,カウンタ1,???
07542H−07545H:1C 20 44 07 PLAY文用CH Bデータ
07546H−07549H:1C 20 44 07 PLAY文用CH Cデータ
0754AH− :FUNC用バッファ(中間言語からアスキーコード変換)
07554H−0755BH:VDP スプライトバッファ
0775CH :
0755DH−07561H:VDP キャラクタデータ転送バッファ (グラフィック画面に文字を書く)
07562H :CMTポート000H用
004H=1200bps
000H= 300bps
07564H−07565H:キーインプットバッファポインタ先頭
07566H−07567H:キーインプットバッファポインタ
07568H−07569H:??? 変数領域先頭 07596H
0756AH−0756BH:??? 07596H
0756CH−0756DH:??? ストリングス先頭 07596H
0756CH :??? BASICパラメータ
0756EH−0756FH:??? 変数領域アドレス
07578H−07579H:BAS プログラム先頭アドレス
0757AH−0757BH:BAS プログラム終了アドレス
0757EH−0757FH:???EDIT用
07580H−07593H:キーインプットバッファ
07594H :KEY入力モード(ポート040Hの内容)
Bit3=SHIFT
Bit2=FUNC
Bit1=COLOR
Bit0=
−07FFFH:本体内RAM最終アドレス
08000H−0BFFFH 拡張RAMもしくはROM
0C000H−0FFFFH ROMカセット領域
キャラクター表示
BASICはキャラクターデータを別々に持っていてキャラクターコードによってデータを展開して表示しています。
020H−07EHのキャラクタデータは01437H−01616Hにあり
1キャラあたり5バイトの構成で左からの縦ライン(Bit0が上、Bit7が下)になります。
キー入力
ポート020HにキーマトリクスNo.nnを書き込んだ後
ポート010Hとポート020Hの下位4ビットを読むことでキースキャンができます。
読み終わった後ポート020Hに00FHを書き込みます(キーNo.00FH)
キーポートのクローズというより、キー割込みが発生
ポート040Hは読むことによってキーモードの状態が分ります
CMT(タイプによって違う)
1バイト分データの内容
’0’ 、Bit0〜Bit7、パリティ(偶数=0、奇数=1)、’1’、’1’
ヘッダー部分
スタートビット’1’*60'
’H’
FCB(32バイト分)
チェックサム
チェックサム(前のと同じ)
データ部分
’D’
ファイルタイプ
0FFH or 000H
長さ下位
長さ上位
データ本体
:
0FFH
チェックサム
BASICの構造
起動時、先頭エリア07596Hから格納されフォーマットは
プログラムバイト数、行番号下位、行番号上位、020H、プログラム、000H(Endマーク)
となっており、プログラムバイト数は行番号下位からEndマークまでの長さになります(1バイト)
空間言語の前には004Hが書かれており、2バイト構成になります
001H=省略形で使用(変換される)、”:”マルチステートメント
002H=省略形で使用(変換される)
003H=行番号(アスキーコード)
004H=中間言語
10 REM 12345 TEST 67890
なら
7596:17 0A
7598:00 20 04 4C 20 31 32 33
75A0:34 35 20 54 45 53 54 20
75A8:36 37 38 39 30 00
となり0759AHが004Hなので次の04CHはREMの中間言語になります。(004H、04CHでREM)
そして、次のプログラムバイト数が000Hだったらプログラムはそこまでという事になります
中間言語、エントリーアドレス
ABS ,05BH,0353AH
ALL ,051H,03497H
AMOVE ,030H,03E12H
AND ,057H,03525H
ANIM ,031H,03D2EH
ATTACK ,062H,035E2H
ASC ,05CH,03585H
CALL ,032H,03CB2H
CHR$ ,065H,036E0H
CLEAR ,033H,03B76H
CLS ,034H,01F28H
COLOR ,035H,03DC8H
COORD ,036H,03E2AH
DATA ,037H,02E22H 省略形 D.
DIM ,038H,037F5H
EDIT ,028H,03C59H 省略形 ED.
END ,039H,019D8H
FOR ,03AH,038EBH 省略形 F.
FRE ,05DH,0355FH
GOTO ,02AH,03886H 省略形 G.
GLOAD ,03BH,012E7H
GOSUB ,029H,0389EH
GSAVE ,03CH,01110H
INPUT ,03EH,03A6DH 省略形 I.
IF ,03DH,03870H
INKEY$ ,066H,036EDH
LIST ,02BH,03C13H 省略形 L.
LEN ,05EH,0357FH
LET ,03FH,03A0BH
LLIST ,02CH,03C10H 省略形 LL.
LOAD ,040H,012ECH
LOCATE ,041H,03B5AH
LPRINT ,042H,03AC3H 省略形 LP.
MAG ,043H,03E00H
MID$ ,067H,03695H
MOD ,056H,03520H
NEXT ,045H,03952H 省略形 N.
NEW ,044H,03C88H
NOT ,05AH
OFF ,052H,034B6H
ON ,047H,03CDCH
OR ,058H,0352CH
PRINT ,04AH,03AC6H 省略形 P.
PEEK ,05FH,03558H
PLAY ,048H,03ECEH
POKE ,049H,03CCDH
READ ,04BH,03A37H
REM ,04CH,02E22H
RESTORE,02DH,03C8FH
RETURN ,02EH,038AAH 省略形 RET.
RND ,060H,035A6H
RUN ,02FH,03785H
STEP ,053H,034B4H 省略形 S.
SAVE ,04DH,01138H
SGN ,061H,03549H
SOUND ,04EH,03E85H
STICK ,04FH,02769H(SN Error)、実際には035FCH
STOP ,050H,03409H
STR$ ,068H,036BFH
THEN ,027H 省略形 T.
TAB ,054H,03489H
TIME ,063H,03D19H
TO ,055H,0347EH
VAL ,064H,03590H
VERIFY ,046H,01217H
XOR ,059H,03533H
Home へ戻る