PV-2000



PV―2000 ROMルチーンへ
  PV-2000のスペック
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=BPS   1=1200bps、0=300bps  Bit1=WRITE 1=オン     、0=オフ  Bit0=MOTOR?1=オン     、0=オフ   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 データ(ライト)   メモリマップ・ド・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: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:ワンキー入力、コマンド変換フック RET 074B0H−074B2H:BASフック  RET 074B3H−074B5H:MENUフック   RET 074B6H       :BASワード パラメータデータ 074B7H−074B8H:フリーエリアのエンドアドレス 074B9H       :PICTURキー入力フラグ 074BBH       :TIME(NMI256回でINC) 074BDH       :1/60秒カウンタ 074BEH       :VDPステータスレジスタの内容 074BFH       :VBLANKのタイミング 074C0H       :BAS CALL文 Aレジスタパラメータ 074C1H−074C2H:BAS CALL文 HLレジスタパラメータ 074C3H−074C4H:BAS CALL文 BCレジスタパラメータ 074C5H−074C6H:BAS CALL文 DEレジスタパラメータ 074C7H       :???PICTUR用 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       :???スプライト 074DEH−074F0H:ANIMATION用 074F1H−074F2H: 074F5H       :カーソルのX座標 074F7H−07514H:???スプライト用変数 07515H       :NMI(VSYNC)が行われたら000H 07518H       : 07519H       : 0751DH       : 07524H−07525H: 07526H−07527H: 0752CH−0752DH:エラーが起きた行番号 07536H−07537H:???RND用 07538H       :BASライン カウンタ 07539H       :入力タイプ 021H=BASIC(4LINE)、010H=BASIC                Bit7:                Bit6:                Bit5:                Bit4:                Bit3:−                Bit2:−                Bit1:−                Bit0:1=BASIC(4LINE)、0=BASIC 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−      :中間言語からアスキーコード変換バッファ   07554H−0755BH:VDP スプライトバッファ 0775CH       : 0755DH−07561H:VDP キャラクタデータ転送バッファ (グラフィック画面に文字を書く)   07562H       :CMTポート000H用                004H=1200bps                000H= 300bps 07564H−07565H:キーインプットバッファ開始アドレス 07566H−07567H:キーインプットバッファ終了アドレス 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  チェックサム  チェックサム(前のと同じ)  
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 へ戻る