JR−200

 密かにFIND氏の協力に感謝します
  JR-200のスペック
CPU MN1800A クロック CRTCの動作によって変化
SOUND MN1271のカウンタによる3声+クリック音
ROM 16K(拡張可)
RAM 32KB(拡張可)
値段のわりにかなりコンパクトにまとまったマシン JR−100にあった不満が解消されユーザーインタフェイスも向上されている 背面にある音量ボリュームも使い勝手が良い ただし本体下にあるディップスイッチが少しだけ使い辛いが あまり使用しないので気にはならない ただリセットスイッチは欲しかった   ROMバージョン5.00(シリアル20100743)の解析となります  
メインCPU MN1800A 1.5MHzタイプでMN6802のクロック周りを変更したものになり 外部クロックと同期を取れる様になっています MN6802とソフトウェア・フルコンパチとなっています 内蔵RAMは$0000−$007Fの128バイト(32バイトはバックアップ可) ただしJR−200ではジャンパでNM1800の選択時にLに固定されているので 内臓RAMは使用されていません クロックはCRTCからTCLKを元に供給されていますが 分周されているわけではありません(CRTCの動作によって変化する    サブCPU MN1544CJR 主にキー入力、アスキーコード変換+JOY端子入力を行いデータをメインCPUに転送します ただし起動時のみCGデータ、本体下にあるボレートSWのリードを行います   通常キー入力があれば対応するアスキーコード送信、/KONが発生 /KONはMN1271のPI0からIRQとなります メインCPUはIRQ内の処理でバッファに転送されていきます 転送終了(受信完了)をMN1544へ知らせるには PB0の/KACK(キーアクノリッジ)を1→0→1   パワーオン時  1.メインCPUから/KTESTを送信  2.サブCPUがROMデータからCGデータをPAへ1バイト送信    /KONを送信  3.メインCPUが/KON割り込みを受け取ったら、データ取得    /KACKを送信  4.これをCGデータ2KB分+ボーレトSW(1バイト)読み込む   通常  1.キーが押されるとサブCPUがそのキーに対応するアスキーコードをPAへ送信    /KONを送信  2.メインCPUが/KON割り込みを受け取ったら、データ取得    /KACKを送信       /KSTAT 1=ニュトラルモード、0=BASICモード     リピートは1から繰り返される     BREAKキーが押された場合は/NMIが発生   JOY端子入力  1./KSTAT=0にしてメインCPUから/KTESTを送信    2.キーが押されるとサブCPUがそのキーに対応するアスキーコードをPAへ送信    /KONを送信  3.メインCPUが/KON割り込みを受け取ったら、データ取得    /KACKを送信 STICK(0)    4.サブCPUがJOY1の内容をPAへ送信、/KONを送信  5.メインCPUが/KON割り込みを受け取ったら、データ取得    /KACKを送信 STICK(1)    6.サブCPUがJOY2の内容をPAへ送信、/KONを送信  7.メインCPUが/KON割り込みを受け取ったら、データ取得    /KACKを送信 STICK(2)  8.通常入力へ     ジョイスティック端子 ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・ |ピン|JOY 1|JOY 2|               | |−−+−−−−−+−−−−−+−−−−−−−−−−−−−−−| | 1|KIN0 |KIN0 |入力 1=オフ  、0=オン | | 2|KIN1 |KIN1 |入力 1=オフ  、0=オン | | 3|KIN2 |KIN2 |入力 1=オフ  、0=オン | | 4|KIN3 |KIN3 |入力 1=オフ  、0=オン | | 5|+5V  |+5V  |               | |  |−−−−−+−−−−−+−−−−−−−−−−−−−−−| | 6|KIN4 |KIN4 |入力 1=オフ  、0=オン | | 7|KIN5 |KIN5 |入力 1=オフ  、0=オン | | 8|KST8 |KST9 |出力 1=入力不可、0=入力可| | 9|GND  |GND  |               | ・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・ 注意するのは8番ピンのKSTn MN1544のキー読み込みの延長上にあり KSTnが’0’になるとKINnのオン・オフが判るようになっています   よくある連射パッドを繋げるとパッドのGNDが8ピンの場合 他のキー(KST0−7)が選択されるときに’1’になり電源のショートとなります GNDが9ピンの場合 他のキー(KST0−7)が選択されるときにKIN0〜5は 他のキーストローブのオン・オフをしている事になり キーボードを押した事と同じになりMN1544は文字を出力する誤動作となります    
外部バス端子    DB0〜DB7   入出力 データバス  A0〜A15     出力 アドレスバス  /DRAMSEL   入力 外部DRAMセレクト  /Eφ2       出力 CPUクロックφ2  /DRAMnIN   出力 CRTCから外部DRAMへデータ出力  /DRAMnOUT  入力 外部DRAMからCRTCへデータ入力  ADSEL      出力 メモリアドレスセレクト  TCAS       出力 外部DRAM CASタイミング  /RAS       出力 外部DRAM RASタイミング  /KILL      入力 ROM0禁止信号 ($A000〜$BFFF)  ER//W      出力 CPU リード/ライト  BA         出力 CPU BA  /HALT      入力 CPU HALT  /VMA       出力 CPU VMA反転  /SYSINT    入力 PIA システム割り込み  /USRINT    入力 PIA ユーザー割り込み  /Eφ2S      出力 周辺デバイスクロック  /ERESET    出力 周辺リセット     プリンタ端子  PDATA7〜PDATA0 出力 データバス  /STROBE       出力 ストローブ信号  /INITIAL      出力 H−>Lでプリンタの初期化  BUSY          入力 1=BUSY 、0=READY(N.Cの場合0)  PSEL          入力 1=エプソン製、0=松下製  (N.Cの場合0)    *GNDを除く全ての端子はインバータで反転される(片方向通信)   ソフト側でデータ、コントロールは反転し入出力する   そのままPIAからDATA出力すると反転データとして出力される   ただしROMルーチンコールでは反転してアクセスされるので   パラメータは通常のデータとして出力する     RGB/コンポジット出力端子  1:N.C  2:GND  3:VIDEO  出力  4:/HSYNC 出力  5:/VSYNC 出力  6: R     出力  7: G     出力  8: B     出力     テープレコーダ端子  1:GND  2:GND  3:GND  4:REC    出力  5:MON    入力  6:REM1  7:REM2  8:GND    
割り込み NMI($E790)BREAKキー(MN1544) IRQ($E7E2)MN1271 TCB TEMPO   (タイマ)                  TCE 0.1秒カウンタ(タイマ)                  PI0 /KON    (MN1544からデータ受信)                  PI1 /SYSINI (外部バス)                  PD  シリアル    (RS−232C、CMT)                  PI2 /USERINT(外部バス) SWI($E7DC)システムでは使用していない(ユーザー用?)    
拡張ROM $D800−$DFFFの2KBが拡張エリア $D800が$7Eがあれば$D800にジャンプするようになっており $7EはJMP命令なので$D801−$D802のアドレスを実行します 拡張ROMチェックの後、同様にBASICのROMチェックが行なわれ $A000が$7Eがあれば$A000にジャンプするようになっており ねければモニタが起動されるようになっています   拡張RAM $8000−$9FFFが拡張可能   外部バスのKILL信号によって $A000−$BFFFのROMを使用禁止可 そこをRAMにすると最大48KB($0000−$BFFF)なります $A000−$BFFFをRAMまたは使用禁止で起動すると モニタのみが起動します     VRAM CRTCのクロック14.31818MHz(TCLK)を基準に CLK1(CPU)、CLK2S(NM1271)のクロックを出力します 分周されず状況(DRAM W/R、CRTCアクセス)によってクロックは変化します     ディスプレイコード アスキーコードの場合  $00=NULL   、$03=BREAK   、$08=RUB OUT  $0B=HOME   、$0C=CLS     、$0D=RETURN  $13=INS    、$14=英数      、$16=HCOPY  $18=CANSEL 、$1A=LINS    、  $1C=カーソル 右 、$1D=カーソル 左  $1E=カーソル 上 、$1F=カーソル 下  $7F=DEL    、$80=GRAPH   、$A0=カナ     $C000−$C0FF $20−$3FのPCG定義領域  ディスプレイコード$20−$3Fのキャラクタ定義場所  1キャラクタ8バイト*32キャラクタ 計256バイト   $C100−$C3FF ディスプレイコードエリア  ディスプレイコードを書き込むことによって文字を表示します   $C400−$C4FF $40−$5FのPCG定義領域  ディスプレイコード$40−$5Fのキャラクタ定義場所  1キャラクタ8バイト*32キャラクタ 計256バイト   $C500−$C7FF アトリビュートエリア  ディスプレコードエリアの文字のセミグラフィックまたは  ノーマル・PCG、カラーの設定を行ないます    ノーマル・PCGの場合ディスプレイコードと1対1になり   Bit7:M1 0   Bit6:M0 1=ノーマルモード、0=ユーザー定義モード   Bit5:BG   Bit4:BR   Bit3:BB   Bit2:FG   Bit1:FR   Bit0:FB    セミグラフィクの場合  ディスプレイコードエリアがグラフィック画面偶数行  アトリビュート  エリアがグラフィック画面奇数行とみなし  通常1キャラクタは8×8ドットの文字を  2×2ドットのグラフィックとして表示します     ディスプレイコードエリア(画面偶数行)    Bit7:−    Bit6:−    Bit5:右上ドット カラーG    Bit4:右上ドット カラーR    Bit3:右上ドット カラーB    Bit2:左上ドット カラーG    Bit1:左上ドット カラーR    Bit0:左上ドット カラーB     アトリビュートエリア(画面奇数行)    Bit7:M1 1    Bit6:M0 0    Bit5:右下ドット カラーG    Bit4:右下ドット カラーR    Bit3:右下ドット カラーB    Bit2:左下ドット カラーG    Bit1:左下ドット カラーR    Bit0:左下ドット カラーB     CRAM(キャラクタRAM) CGROM(フォント)を持っておらずCRAMがCGROMの代わりとなります CGデータはMN1544内蔵ROMにありシステム初期設定でCGが定義されます  1.KTESTを1→0→1  2.MN1544からデータが1バイト送られMN1544から/KON出力(IRQ)  3.データを読み込んだら/KACKを1→0→1(MN1544にデータ受信完了を知らせる)  4.2と3を計2KB分繰り返す  5.更に1バイト同様に読む(ボーレートスイッチの読み込み)    *電源を入れたとき(MN1544リセット)のみしか転送できない?     リアルタイムカウンタ MN1271のカウンタE プリスケーラ1/8で使用 IRQで100ms毎に割り込みが掛かる    MN1271 CLK2S(Basicタイミング)  TCLK=14.31818MHz    (1/TCLK/*10+(1/TCLK*11*2))/3  =(0.069841*10+0.069841*11*2)/3  =(0.69841+1.536502)/3  =0.74497(約0.745ms)    タイマ値=(カウンタE値+1)×プリスケーラ分×CLK2S 0.000745    <例>   100ms=(カウンタE値+1)×8×0.000745ms   100ms=(カウンタE値+1)×0.00596   カウンタE値+1=100÷0.00596   カウンタE値  =約16778 ($418A)     シリアル インタフェース テープレコーダ(CMT) MN1271のパラレル、シリアル、タイマA(シリアルのクロック)を利用して制御します またボーレートスイッチを見てワークの設定を行なっているだけなので ソフトウェアで切り替えが可能   PD5+SDO(WRITE) PD7    (READ) PD6    (リモート)   FSK方式 600/2400ボー    1:GND  2:GND  3:GND  4:REC  5:MON  6:REM1  7:REM2  8:GND       RS−232C(オプション) 回路図は参考程度にして下さい   調歩同期方式、半2重通信 転送速度    75/110/150/300/600/1200/2400/4800/9600(スイッチで選択) データ長    7Bit/8Bit(ソフトウェアで選択) ストップビット 1Bit/2Bit(ソフトウェアで選択) パリティ    無し/奇数/偶数 (ソフトウェアで選択)    JR−200 CN10    1:TXD  (SDO)    2:RXD  (SDI)    3:/CS  (PD0)    4:/DR  (PD1)    5:/CD  (PD2)    6:/RS  (PD3)    7:/ER  (PD4)    8:RS232(PD5)    9:BCLK1(入力 MN1271 STへ)   10:TCF  (TCF)   11:+5V   12:GND    BCLK1はTCF(110ボー)または外部のクロック回路(8640C)のクロック     サウンド MN1271(CLK2S=0.745MHz)のカウンタTCC、TCD、TCFを使用します またカウンタ端子の出力の際、内蔵F・Fで1/2に分周される キークリック音はMN1544で常に発生され MN1271のPB6で合成のオン・オフを指定します     <BASICのPLAY文用> ・−−−−−−−−−−−−−−−−−++−−−−−−−−−−−−−−−−−・ |コード|音階1| 周波数|カウンタ||コード|音階4| 周波数|カウンタ| |−−−+−−−+−−−−+−−−−||−−−+−−−+−−−−+−−−−| |$01| C |  66|*$9F||$25| C | 523| $9F| |$02| C#|  70|*$96||$26| C#| 552| $96| |$03| D |  73|*$8E||$27| D | 584| $8E| |$04| D#|  78|*$86||$28| D#| 620| $86| |$05| E |  83|*$7E||$29| E | 660| $7E| |$06| F |  87|*$77||$2A| F | 700| $77| |$07| F#|  93|*$70||$2B| F#| 736| $70| |$08| G |  96|*$6A||$2C| G | 792| $6A| |$09| G#| 104|*$64||$2D| G#| 832| $64| |$0A| A | 110|*$5E||$2E| A | 880| $5E| |$0B| A#| 117|*$59||$2F| A#| 932| $59| |$0C| B | 123|*$54||$30| B | 988| $54| |===+===+====|====||===+===+====+====| |コード|音階2| 周波数|カウンタ||コード|音階5| 周波数|カウンタ| |−−−+−−−+−−−−|====||−−−+−−−+−−−−|−−−−| |$0D| C | 130|*$4F||$31| C |1046| $4F| |$0E| C#| 138|*$4B||$32| C#|1104| $4B| |$0F| D | 146|*$47||$33| D |1168| $47| |$10| D#| 155|*$43||$34| D#|1240| $43| |$11| E | 165|*$3E||$35| E |1320| $3E| |$12| F | 175|*$3B||$36| F |1400| $3B| |$13| F#| 184|*$38||$37| F#|1472| $38| |$14| G | 196|*$34||$38| G |1584| $34| |$15| G#| 208|*$31||$39| G#|1664| $31| |$16| A | 220|*$2E||$3A| A |1760| $2E| |$17| A#| 233|*$2C||$3B| A#|1864| $2C| |$18| B | 247|*$29||$3C| B |1976| $29| |===+===+====|====|・−−−−−−−−−−−−−−−−−・ |コード|音階3| 周波数|カウンタ| *カウンタ値 プリスケーラ1/64 |−−−+−−−+−−−−|====|        それ以外は 1/8 |$19| C | 261|*$27| ・−−−−−−−−−−−・ |$1A| C#| 276|*$25| |  音 符  |データ| |$1B| D | 292|*$23| |−−−−−−−+−−−| |$1C| D#| 310|*$21| |  16分音符|$06| |$1D| E | 330|*$FD| |付点16分音符|$09| |$1E| F | 350| $EF| |   8分音符|$0C| |$1F| F#| 368| $E3| |付点 8分音符|$12| |$20| G | 396| $D5| |   4分音符|$18| |$21| G#| 416| $C9| |付点 4分音符|$24| |$22| A | 440| $BD| |   2分音符|$30| |$23| A#| 466| $B3| |付点 2分音符|$48| |$24| B | 494| $A9| |    全音符|$60| ・−−−−−−−−−−−−−−−−−・ ・−−−−−−−−−−−・   PLAY文に使用するデータフォーマット 音符データ、コード、[音符データ、コード]、...$00(エンドマーク)    
I/Oポート $C800:MN1271 PADDR PAデータ方向 MN1544キーデータ    Bit7:d7 1=出力、0=入力    Bit6:d6 1=出力、0=入力    Bit5:d5 1=出力、0=入力    Bit4:d4 1=出力、0=入力    Bit3:d3 1=出力、0=入力    Bit2:d2 1=出力、0=入力    Bit1:d1 1=出力、0=入力    Bit0:d0 1=出力、0=入力   $C801:MN1271 PAIOR PAデータ   MN1544キーデータ    Bit7:d7 (入力)    Bit6:d6 (入力)    Bit5:d5 (入力)    Bit4:d4 (入力)    Bit3:d3 (入力)    Bit2:d2 (入力)    Bit1:d1 (入力)    Bit0:d0 (入力)     $C802:MN1271 PBDDR PBデータ方向 周辺コントロール    Bit7:d7 1=出力、0=入力    Bit6:d6 1=出力、0=入力    Bit5:d5 1=出力、0=入力    Bit4:d4 1=出力、0=入力    Bit3:d3 1=出力、0=入力    Bit2:d2 1=出力、0=入力    Bit1:d1 1=出力、0=入力    Bit0:d0 1=出力、0=入力   $C803:MN1271 PBIOR PBデータ   周辺コントロール    Bit7:d7 (出力)MN1544 /KSTAT    Bit6:d6 (出力)MN1544 クリックのゲート 1=オン、0=オフ    Bit5:d5 (入力)プリンタ   /PSEL*    Bit4:d4 (入力)プリンタ   /BUSY*    Bit3:d3 (出力)プリンタ   /INIT*    Bit2:d2 (出力)プリンタ    STROBE*    Bit1:d1 (出力)MN1544 /KTEST    Bit0:d0 (出力)MN1544 /KACK    *LS04で入出力は反転される     /KSTAT  1=ニュートラルモード (例)^Aが押された場合$01             0=BASIC モード (例)^Aが押された場合AUTOのアスキーコード     /PSEL   プリンタ選択    1=エプソン製、0=松下製     /BUSY   1=READY、0=BUSYまたは接続していない     /KTEST  CGROMデータ、ボーレートSWの読み出し開始     /KACK   受信した事をMN1544に知らせる 1→0→1     $C804:MN1271 PCDDR PCデータ方向 プリンタデータ    Bit7:d7 1=出力、0=入力    Bit6:d6 1=出力、0=入力    Bit5:d5 1=出力、0=入力    Bit4:d4 1=出力、0=入力    Bit3:d3 1=出力、0=入力    Bit2:d2 1=出力、0=入力    Bit1:d1 1=出力、0=入力    Bit0:d0 1=出力、0=入力   $C805:MN1271 PCIOR PCデータ   プリンタデータ    Bit7:/PDATA7(出力)*LS04を通して反転して出力される    Bit6:/PDATA6(出力)    Bit5:/PDATA5(出力)    Bit4:/PDATA4(出力)    Bit3:/PDATA3(出力)    Bit2:/PDATA2(出力)    Bit1:/PDATA1(出力)    Bit0:/PDATA0(出力)     $C806:MN1271 PDDDR PDデータ方向 シリアルデバイス コントロール    Bit7:d7 1=出力、0=入力    Bit6:d6 1=出力、0=入力    Bit5:d5 1=出力、0=入力    Bit4:d4 1=出力、0=入力    Bit3:d3 1=出力、0=入力    Bit2:d2 1=出力、0=入力    Bit1:d1 1=出力、0=入力    Bit0:d0 1=出力、0=入力   $C807:MN1271 PDIOR PDデータ   シリアルデバイス コントロール    Bit7:d7 (入力)CMT READ    Bit6:d6 (出力)CMT REM  1=オフ、0=オン    Bit5:d5 (出力)SDO選択    1=RS−232C SD、0=CMT WRITE(CTXD)    Bit4:d4 (出力)RS−232C /ER    Bit3:d3 (出力)RS−232C /RS    Bit2:d2 (入力)RS−232C /CD    Bit1:d1 (入力)RS−232C /DR    Bit0:d0 (入力)RS−232C /CS       $C808:MN1271 PIMDR    Bit7:0    Bit6:PI2データ方向 1=出力、0=入力    Bit5:PI1データ方向 1=出力、0=入力    Bit4:PI0データ方向 1=出力、0=入力    Bit3:0    Bit2:PI2モード    Bit1:PI1モード    Bit0:PI0モード       +−−−−−−−−−−−−−−−−−−−−−−−−+     |方 向|モード|      機 能       |     |−−−+−−−+−−−−−−−−−−−−−−−−|     | 1 | 1 |パルス出力モード        |     | 1 | 0 |レベル出力モード        |     | 0 | 1 |入力信号立上がりエッジ検出モード|     | 0 | 0 |入力信号立下がりエッジ検出モード|     +−−−−−−−−−−−−−−−−−−−−−−−−+   $C809:MN1271 PIIOR PIデータ    Bit7:0    Bit6:PI2の値(入力)/USERINT    Bit5:PI1の値(入力)/SYSINT    Bit4:PI0の値(入力)/KON    Bit3:0    Bit2:PI2データ(出力)    Bit1:PI1データ(出力)    Bit0:PI0データ(出力)   $C80A:MN1271 PIEDR    Bit7:リセットビット    Bit6:0    Bit5:0    Bit4:0    Bit3:0    Bit2:PI2エッジ検出フラグ    Bit1:PI1エッジ検出フラグ    Bit0:PI0エッジ検出フラグ       $C80B:MN1271 SCS1R シリアルI/Oコントロール ステータス1    Bit7:d7 (出力)モード      1=UART、0=CART*    Bit6:d6 (出力)0    Bit5:d5 (出力)0    Bit4:d4 (出力)UART分周比  1=1/16、0=1    Bit3:d3 (出力)データビット長  1=8ビット、7ビット    Bit2:d2 (出力)パリティ選択   1=あり  、0=なし    Bit1:d1 (出力)パリティ     1=奇数  、0=偶数    Bit0:d0 (出力)ストップビット長 1=2ビット、0=1ビット  *CARTの場合 d6−d0は使用しない   $C80C:MN1271 SCS2R  シリアルI/Oコントロール ステータス2    Bit7:d7 (出力)シリアルIF    1=許可、0=禁止    Bit6:d6 (出力)割り込み      1=許可、0=禁止    Bit5:d5 (出力)送信データ     1=フル、0=エンプティ    Bit4:d4 (出力)送受モード設定   1=送信、0=受信    Bit3:d3 (出力)クロック      1=内部、0=外部*    Bit2:d2 (出力)データビット量d2  111=7、110=6、101=5、100=4    Bit1:d1 (出力)データビット量d1  011=3、010=2、001=1、000=8    Bit0:d0 (出力)データビット量d0/付加したパリティ値*  *内部=カウンタAを使用、外部=ST端子を使用  *CARTの場合データビット量、UARTの場合パリティ      Bit7:d7    Bit6:d6    Bit5:d5 (入力)受信データ     1=フル  、0=エンプティ    Bit4:d4    Bit3:d3 (入力)BUSY      1=BUSY、0=READY    Bit2:d2 (入力)オーバーランエラー 1=あり  、0=なし    Bit1:d1 (入力)フレーミングエラー 1=あり  、0=なし    Bit0:d0 (入力)パリティエラー   1=あり  、0=なし     $C80D:MN1271 STBR(出力)    Bit7:SDO /d7 *反転して出力される    Bit6:SDO /d6   600ボーの波形データ (1バイトで1ビットの波形)    Bit5:SDO /d5    ’1’=$AA LHLHLHLH    Bit4:SDO /d4    ’0’=$CC LLHHLLHH    Bit3:SDO /d3   2400ボーの波形データ(2ビットで1ビットの波形)    Bit2:SDO /d2    ’1’=    LH または HL    Bit1:SDO /d1    ’0’=    LL または HH    Bit0:SDO /d0        MN1271 SRBR(入力)    Bit7:SDI d7    Bit6:SDI d6    Bit5:SDI d5    Bit4:SDI d4    Bit3:SDI d3    Bit2:SDI d2    Bit1:SDI d1    Bit0:SDI d0       $C80E:MN1271 TACSR(出力) タイマカウンタA CMT、RS−232C    Bit7:0    Bit6:割り込み   1=許可、0=禁止    Bit5:ボロー    1=あり、0=なし    Bit4:プリスケーラ  11=1/256、10=1/64    Bit3:プリスケーラ  01=1/8  、00=1    Bit2:0    Bit1:0    Bit0:カウント   1=許可、0=禁止 $C80F:MN1271 TAWSR(出力) タイマカウンタA データ       MN1271 TACTR(入力) タイマカウンタA データ     $C810:MN1271 TBCSR(出力) タイマカウンタB TEMPO用    Bit7:0    Bit6:割り込み   1=許可、0=禁止    Bit5:ボロー    1=あり、0=なし    Bit4:プリスケーラ  11=1/256、10=1/64    Bit3:プリスケーラ  01=1/8  、00=1    Bit2:0    Bit1:0    Bit0:カウント   1=許可、0=禁止 $C811:MN1271 TBWSR(出力) タイマカウンタB データ       MN1271 TBCTR(入力) タイマカウンタB データ     $C812:MN1271 TCCSR(出力) タイマカウンタC サウンド用    Bit7:0    Bit6:割り込み   1=許可、0=禁止    Bit5:ボロー    1=あり、0=なし    Bit4:プリスケーラ  11=1/256、10=1/64    Bit3:プリスケーラ  01=1/8  、00=1    Bit2:d2     111=???、110=矩形波出力オン、101=???、100=???    Bit1:d1     011=???、010=矩形波出力オフ、001=???、000=何もしない    Bit0:d0 $C813:MN1271 TCESR(出力) タイマカウンタC データ       MN1271 TCCTR(入力) タイマカウンタC データ     $C814:MN1271 TDCSR(出力) タイマカウンタD サウンド用    Bit7:0    Bit6:割り込み   1=許可、0=禁止    Bit5:ボロー    1=あり、0=なし    Bit4:プリスケーラ  11=1/256、10=1/64    Bit3:プリスケーラ  01=1/8  、00=1    Bit2:d2     111=???、110=矩形波出力オン、101=???、100=???    Bit1:d1     011=???、010=矩形波出力オフ、001=???、000=何もしない    Bit0:d0 $C815:MN1271 TDWSR(出力) タイマカウンタD データ       MN1271 TDCTR(入力) タイマカウンタD データ     $C816:MN1271 TECSR(出力) タイマカウンタE カウンタ0.1秒用    Bit7:0    Bit6:割り込み   1=許可 、0=禁止    Bit5:ボロー    1=あり 、0=なし    Bit4:パルス転送  1=あり 、0=なし    Bit3:プリスケーラ 1=1/8、0=1    Bit2:d2      111=???、110=矩形波出力オン、101=???、100=???    Bit1:d1      011=???、010=矩形波出力オフ、001=???、000=何もしない    Bit0:d0 $C817:MN1271 TEHBR(出力) タイマカウンタE データ H       MN1271 TEHCR(入力) タイマカウンタE データ H $C818:MN1271 TELBR(出力) タイマカウンタE データ L       MN1271 TELCR(入力) タイマカウンタE データ L     $C819:MN1271 TFCSR(出力) タイマカウンタF サウンド、RS−232C用    Bit7:0    Bit6:割り込み   1=許可  、0=禁止    Bit5:ボロー    1=あり  、0=なし    Bit4:パルス転送  1=なし  、0=あり    Bit3:プリスケーラ 1=1/8 、0=1    Bit2:d2     111=???、110=矩形波出力オン、101=???、100=???    Bit1:d1     011=???、010=矩形波出力オフ、001=???、000=何もしない    Bit0:d0 $C81A:MN1271 TFHBR(出力) タイマカウンタF データ H       MN1271 TFHCR(入力) タイマカウンタF データ H $C81B:MN1271 TFLBR(出力) タイマカウンタF データ L       MN1271 TFLCR(入力) タイマカウンタF データ L       $C81C:MN1271 IRQ1R(入力) 割り込みステータス1    Bit7:IRQ1RまたはIRQ2Rの割り込み要求    Bit6:シリアルIF割り込み 1=あり、0=なし    Bit5:0    Bit4:0    Bit3:0    Bit2:PI2割り込み    1=あり、0=なし /USERINT    Bit1:PI1割り込み    1=あり、0=なし /SYSINT    Bit0:PI0割り込み    1=あり、0=なし /KON   $C81D:MN1271 IRQ2R(入力) 割り込みステータス2    Bit7:IRQ1RまたはIRQ2Rの割り込み要求    Bit6:0    Bit5:TCF割り込み  1=あり、0=なし サウンド、RS−232C用    Bit4:TCE割り込み  1=あり、0=なし カウンタ0.1秒用    Bit3:TCD割り込み  1=あり、0=なし サウンド用    Bit2:TCC割り込み  1=あり、0=なし サウンド用    Bit1:TCB割り込み  1=あり、0=なし TEMPO用    Bit0:TCA割り込み  1=あり、0=なし CMT.RS−232C用   $C81E:MN1271 IE1R(出力) 割り込みマスク1    Bit7:0    Bit6:シリアルIF割り込みマスク 1=しない、0=する    Bit5:0    Bit4:0    Bit3:0    Bit2:PI2割り込みマスク    1=しない、0=する /USERINT    Bit1:PI1割り込みマスク    1=しない、0=する /SYSINT (DISK)    Bit0:PI0割り込みマスク    1=しない、0=する /KON   $C81F:MN1271 IE2R(出力) 割り込みマスク2    Bit7:0    Bit6:0    Bit5:TCF割り込みマスク 1=しない、0=する    Bit4:TCE割り込みマスク 1=しない、0=する    Bit3:TCD割り込みマスク 1=しない、0=する    Bit2:TCC割り込みマスク 1=しない、0=する    Bit1:TCB割り込みマスク 1=しない、0=する    Bit0:TCA割り込みマスク 1=しない、0=する       $CA00:CRTC ボーダーカラー    Bit7:    Bit6:    Bit5:    Bit4:    Bit3:    Bit2:G    Bit1:R    Bit0:B      
メモリマップ $0000−$7FFF 本体RAM $8000−$9FFF 拡張メモリ $A000−$BFFF ROM0 BASIC(外部バスから使用禁止可) $C000−$C0FF PCGパターンエリア1 (CHR $20−$3F) $C100−$C3FF ディスプレイコードエリア $C400−$C4FF PCGパターンエリア2 (CHR $40−$5F) $C500−$C7FF アトリビュートエリア   $C800−$C9FF MN1271 I/Oポート $CA00−$CBFF CRTC   I/Oポート $CC00−$CFFF 拡張用    I/Oポート $D000−$D7FF キャラクタRAM(ノーマルモードのCG) $D800−$DFFF 拡張ROM $E000−$FFFF ROM1 カーネル(モニタ、I/Oルーチン)         $0000      :PBデータ Bit7 /STAT2 1=ニュートラル、0=BASIC                   Bit6 クリック   1=オン    、0=オフ                   Bit4  −                   Bit3  −                   Bit2  −                   Bit1  −                   Bit0  − $0001      :STICK(0)の内容(アスキーコード) $0002      :STICK(1)の内容(JOY1) $0003      :STICK(2)の内容(JOY2) $0004−$0005:DECカウンタ 0.1秒単位(カウンタ 1秒用) $0006−$0007:DECカウンタ   1秒単位 $0008      :プリンタフラグ $FF=オン、$00=オフ $0009      :カーソルX $000A      :カーソルY $000B      :BREAKキーフラグ              $00    =オフ NMI処理を実行しない              $01〜$FF=オン NMI処理を実行する $000C      :キーデータ ^C=$03、それ以=$00 $000D      :MN1544 キーバッファの長さ$00−$20($00=データ無し) $000E      :カラーアトリビュトデータ $000F      :カーソルのキャラクタ $0010      :カーソルのキャラクタ・アトリビュート $0011      :カーソル点滅消去カウンタ $0012      :カーソル点滅消去カウンタ設定値 $0013      :AUTOフラグ $00=オフ、$01=オン $0014−$0015:AUTO 次に発生する行番号 $0016−$0017:AUTO 増加する値 $0018−$0019:汎用 $001A−$001B:汎用 $001C−$001D:汎用 $001E−$001F:MON用アドレス 16進数データ $0020      :カーソル位置のキャラクタ $0021      :カーソル位置のキャラクタ・アトリビュート $0022−$0023:カーソル位置のディスプレコードアドレス(VRAM) $0024−$0025:カーソル位置から最終文字アドレス(VRAM) $0026      :カーソル位置から最終文字までの行数−1 $0027      :INSモード $00=オフ、$FF=オン $0028      : $0029      : $002A      : $002B      :CMTボーレートスイッチ $64=600ボー、$00=2400ボー $002C      :TEMPO (TCBデータ) $002D      :PLAY Ch−A長さ $002E      :PLAY Ch−B長さ $002F      :PLAY Ch−C長さ $0030−$0031:PLAY Ch−Aデータ ポインタ($0000で演奏しない) $0032−$0033:PLAY Ch−Bデータ ポインタ($0000で演奏しない) $0034−$0035:PLAY Ch−Cデータ ポインタ($0000で演奏しない) $0036      :BEEP用 $0037−$0038:BEEP用周波数データ(TCF) $0039      :TEMPO用 $003A−$003B:PLAY周波数設定用 $003C      :PLAY音符 $003D−$003E: $003F      : $0042      :プリンタヘッド位置 $0043−$0044:汎用ポインタ(BASIC PC等) $0045−$0046:実行中のBASIC PC $0047−$0048:行番号 $0049−$004A: $004B−$004C: $004D−$004E:プログラム1行の長さ $004F−$0050: $0051−$0052: $0053−$0054: $0055−$0056: $0057−$0058:キーバッファ 最終ポインタ $005D−$005E: $005F−$0060: $0061−$0062: $0063−$0064: $0065−$0066: $0067      : $0068      :プログラム1行の長さ $0069−$006A:BASICプログラム先頭ポインタ $006B−$006C:フリーエリア最終 $006D−$006E: $006F−$0070: $0071−$0072:変数領域先頭ポインタ $0073−$0074:RANDOMIZE用(TCEのデータを加工) $0075−$0076:16進数データ $0077      :テキスト最下位ラインフラグ $00=オフ、$FF=オン $007D−$007E: $0085−$0087: $008E−$0090: $00A1−$00A2: $00AD−$00AE: $00B1−$00B2:   $00B7−$00C1:汎用ワーク $00C6−$00C7:サウンド周波数データ設定用 $00C8      :ファイルタイプ $00C9      :CMTヘッダ +0 $02 $00CA      :CMTヘッダ +1 $0A $00CB      :CMTヘッダ +2 ブロックNo.nn $00CC      :CMTヘッダ +3 データサイズ ただし$00は256バイトになる $00CD      :CMTヘッダ +4 $FF $00CE      :CMTヘッダ +5 $FF $00CF      :CMTボーレート $64=600ボー、$00=2400ボー $00D0      :CMT用 $00D1      :CMT用 $00D2      :CMT用 $00D3      :$00=LOAD、$FF=VERIFY $00D4      :CMT用 $00D5      :CMT用 $00D6−$00D7:CMTパラメータ ポインタ (ファイルネーム16文字、先頭アドレス、最終アドレス) $00D9−$00DA: $00DB      :CMT/RS−232C用 PD比較 $00DC−$00DD: $00DE      :CMTウェイト、CMTチェックサム $00DF      :$00=プリントモード、$80=HCOPYモード $00E4−$00E5:RS−232C ライトバッファ ポインタ $00E6−$00E7:     $0100−$0101:NMI      フックポインタ$0000($0000でフックを行なわない) $0102−$0103:SWI      フックポインタ$0000($0000でフックを行なわない) $0104−$0105:IRQ      フックポインタ$0000($0000でフックを行なわない) $0106−$0107:IRQサブPI1 フックポインタ$0000($0000でフックを行なわない) $0108−$0109:IRQサブシリアルフックポインタ$0000($0000でフックを行なわない) $010A−$010B:IRQサブPI2 フック$ポインタ0000($0000でフックを行なわない) $010C−$010D:DECカウンタ 0.1秒前のフックポインタ $010E−$010F:DECカウンタ   1秒後のフックポインタ $0110−$0111:モニタコマンドリストフックポインタ$FFE6 $0112−$0113:PRINT用 $0114−$0115:現在のMN1544バッファ リードポインタ(キュー方式) $0116−$0117:現在のMN1544バッファ ライトポインタ(キュー方式) $0118−$0119:中間言語変換出来ないときのフックポインタ$0000($0000で実行しない)   $012A−$012C:拡張用エラーメッセージ      フック $012D−$012F:CMT/RS−232C アクセス用フック (JMP $E000) $0130−$0131:BREAK(NMI復帰)ポインタ              BASIC ROM起動   =$AF1B              BASIC ROM禁止で起動=$EA99 MON $0134−$0135:BASICラインインプット フックポインタ $EDC2 $0136−$0137:ファイルデバイスネーム ポインタ              $B080=’CAS1:’              $B085=’COM1:’ $0138−$0139:BASICプログラム1行入力フックポインタ $BD10 $0150−$016F:汎用バッファ $0150      :STICK(0)の内容 $0151      :STICK(1)の内容 $0152      :STICK(2)の内容       $018E−$01DE:1LINEプログラム アスキーバッファ $01DF−     :1LINEプログラム 中間言語バッファ $019E−$019F:CMT先頭アドレス $01A0−$01A1:CMT最終アドレス     $0302−$0321:データバッファ $0322      :CMT用右上キャラクタ保存用      −$07FF:スタック   $0800-$7FFF:BASICプログラム領域  $00、次の行のアドレス上位、次の行のアドレス下位、行番号2バイト、プログラム、  ENDマーク$00、$00、$00     変数最大2バイト アスキーコード    $C0  =文字列     $F1  =16進数    $F1以降=10進数 $C000−$C0FF:PCGパターンエリア1 $C100−$C3FF:ディスプレイコードエリア             Bit7:ディスプレイコードd7             Bit6:ディスプレイコードd6             Bit5:ディスプレイコードd5またはG ドットカラー0             Bit4:ディスプレイコードd4またはR             Bit3:ディスプレイコードd3またはB             Bit2:ディスプレイコードd2またはG ドットカラー1             Bit1:ディスプレイコードd1またはR             Bit0:ディスプレイコードd0またはB $C400−$C4FF:PCGパターンエリア2 $C500−$C7FF:アトリビュートエリア             Bit7:M1 モード   11=   −    、10=セミグラフィック モード             Bit6:M0       01=ユーザ定義モード、00=ノーマルモード             Bit5:BG 背景カラー   またはドットカラー2             Bit4:BR             Bit3:BB             Bit2:FG キャラクタカラーまたはドットカラー3             Bit1:FR             Bit0:FB $C800−$C9FF:MN1271 I/Oポート $CA00−$CBFF:CRTC   I/Oポート $CC00−$CFFF:拡張用    I/Oポート $D000−$D7FF:キャラクタRAM $D800−$DFFF:拡張ROM     $E000:シリアルI/O    入力:A=タスクnn $00−$0A       X=パラメータのポインタ    出力:状況による    使用:A、B、X      CMTまたはRS−232Cのアクセスを行います     タスクnn      $00 LOAD      $01 SAVE      $02 VERIFY      $03 MLOAD      $04 MSAVE      $05 OPEN ”O”      $06 PRINT#      $07 CLOSE ”O”      $08 OPEN ”I”      $09 INPUT#      $0A CLOSE ”I”     $E49D:PBIORの設定    入力:B=設定データ(d5−d0)    出力:X=VRAMアドレス       $0022=VRAMアドレス上位       $0023=VRAMアドレス下位    使用:なし      PB(周辺コントロール)のd7、d6とBレジスタのd5−d0の値を    合成してPBに出力します    d4−d5はプリンタの入力なので実際に合成するのは    下位4ビットになります     $E86A:MN1544コマンド送信    入力:A=$02 /KEYTEST         $01 /KSTS2       $0000=PB d7、d6データ    出力:$0000=PB d7、d6データ(d5−d0はクリアされる)    使用:A      MN1544のクリック音のゲート、/KSTAT2と    Aレジスタで指定の制御信号をMN1544へ送信    信号は’1’−>’0’−>’1’     $E8C1:JSR (X)    入力:X=コールするアドレスポインタ($0000でコールしない)    使用:X      Xをポインタとしてサブルーチンコールします    またAレジスタは保持されます     $EA74−$EA98:TC、TDデータ(8ビットカウンタ サウンド用)     $EB79:カーソル位置のVRAMアドレス変換    入力:$0009=カーソルX       $000A=カーソルY    出力:X=カーソル位置のVRAMアドレス       $0022=VRAMアドレス上位       $0023=VRAMアドレス下位    使用:X     $EB93:指定したVRAMのATBアドレス取得    入力:X=ディスプレイコードアドレス    出力:X=ATBアドレス    使用:X、B       $0018=ATBアドレス上位       $0019=ATBアドレス下位      指定したVRAMに対応するATBアドレスを取得します    実際にはX=X+$0400を実行     $EBE7:アスキーコード 1バイトPRINT    入力:A=アスキーコード       $0008=出力デバイス             $00     CRTのみ             $01−$7F PRTのみ             $80−$FF=CRT+PRT       $000E=カラーアトリビュートデータ    使用:状況による(X、A、Bは保持される)      1文字表示または印字します    コントロールコードの場合は各コードの実行     $EC7F:画面クリア+アトリビュート初期化    入力:$000E=カラーアトリビュトデータ    出力:$0009=$00 カーソルX       $000A=$00 カーソルY    使用:X、A、B       $0018=汎用   VRAMアドレス上位       $0019=汎用   VRAMアドレス下位       $001A=汎用 次のVRAMアドレス上位、ATBアドレス上位       $001B=汎用 次のVRAMアドレス下位、ATBアドレス下位      1画面をクリアして、アトリビュートを$000Eの内容で埋め    カーソル位置を左上にセットします     $ECE2:データクリア    入力:X=クリアするアドレス       B=長さ    使用:X、B      指定したアドレスからBレジスタ分だけ$00を書き込みます     $ECE6:32バイトデータを埋める    入力:X=埋めるアドレス       A=埋めるデータ    使用:X、B      指定したアドレスから任意のデータを32回書き込みます    主に画面1ライン描画に使用     $ECE9:データを埋める    入力:X=埋めるアドレス       A=埋めるデータ       B=長さ    使用:X、B      指定したアドレスから任意のデータを書き込みます    注意するのは最後にPULAが実行されるので    単独でコールする前にPSHA等で調節する必要があります     $EEE7:16進数1バイト→アスキーコード2バイト変換    入力:X=16進数データポインタ    出力:X=16進数データポインタ+1       A=16進数Bit7−4のアスキーコード       B=16進数Bit3−0のアスキーコード    使用:X、A、B     $EF0F:16ビット、8ビット加算 X=X+B    入力:X=加算されるデータ       B=加算するデータ    出力:X=演算結果       $0018=演算結果上位       $0019=演算結果下位    使用:X     $EF15:16ビット、8ビット減算 X=X−B    入力:X=減算されるデータ       B=減算するデータ    出力:X=演算結果       $0018=演算結果上位       $0019=演算結果下位    使用:X       $005B=演算用上位       $005C=演算用下位     $EF1B:16ビット加算 X=X+AB    入力:X=加算されるデータ       A=加算するデータ上位       B=加算するデータ上位    出力:X=演算結果       $0018=演算結果上位       $0019=演算結果下位    使用:X     $EF2C:16ビット減算 X=X−AB    入力:X=減算されるデータ       A=減算するデータ上位       B=減算するデータ下位    出力:X=演算結果       $0018=演算結果上位       $0019=演算結果下位    使用:X       $005B=演算用上位       $005C=演算用下位     $EF80:ABと(X)の比較    入力:A=データ上位       B=データ下位       X=比較データポインタ    出力:Zf=1 データ=比較データ          0 データ≠比較データ       Cf=1 データ<比較データ          0 データ>比較データ    使用:なし     $FB19:文字列→16進数変換    入力:$00A1=10進数文字列ポインタ上位       $00A2=10進数文字列ポインタ下位    出力:$0075=16進数データ上位       $0076=16進数データ下位           B=$00 変換完了             $0D 変換不可(文字列に16進数のアスキー文字が無かった)    使用:A、B、X      文字列を16進数データに変換します    変換データは大文字変換されBit3−0のデータとして左シフトされ    以降のデータも同様に左シフトされていきます      <例> ’0123’、$00 −> $0123、B=$00        ’ZZZZ’、$00 −> $0000、B=$0D     $FE86:16進数→10進数文字列出力    入力:X=16進数データポインタ    出力:X=16進数データポインタ+2       $00B7=$01 変換した文字列ポインタ上位       $00B8=$70 変換した文字列ポインタ下位       B=変換した文字列の長さ       $0170以降 変換した10進数(アスキーコード)    使用:A、B、X       $00B7=演算用       文字列ポインタ上位       $00B8=演算用       文字列ポインタ下位       $00B9=演算用 変換する文字列出力ポインタ上位       $00BA=演算用 変換する文字列出力ポインタ下位       $00BB=演算用 減算カウントデータ       $00BC=演算用 文字列の長さ       $00BE=演算用 16進数データポインタ上位       $00BF=演算用 16進数データポインタ下位       $00C0=演算用 10進変換データポインタ上位、X退避上位       $00C1=演算用 10進変換データポインタ下位、X退避下位      Xレジスタをデータポインタとして2バイトのデータを16進数として取得    その16進数データを$00B7のデータポインタ($0170)として    変換した10進数データを書き込みます    データを変換するだけで表示はされません     $FEE0−$FF95:エラーメッセージ $FF96−$FFA3:Break in lineデータ $FFA4−$FFE5:BASICメッセージデータ $FFE6−$FFFE:モニタコマンドデータ $FFF5−$FFF7:ロムバージョン   $FFF8:IRQ       $E7E2   $FFFA:SWI       $E7DC   $FFFC:NMI       $E790   $FFFE:RESET       $E6E4  
Home へ戻る