メモリマップを調査した
TX81Zには、64KBのROMと8KBのSRAMが搭載されている。CPUであるHD63B03XPのアドレス空間は64KBで、次のような割り当てになっている。
$0000-$001F: CPUの内部レジスタ $0040-$00FF: CPUの内部RAM $2000-$3FFF: YM2414Bのアドレス($2000)とデータ($2001) $4000-$5FFF: LCD -> あんまり調べてない $6000-$7FFF: SRAM (8KB) $8000-$FFFF: ROM (64KBのうち、前半32KBと後半32KBをバンク切替で割り当てる)
ROMの解析と並行してメモリの使われ方も解析した。YM2414の制御に関係のある部分を以下に書く。よく分からないものについては省略する。
SRAMのメモリマップ
from -to len: desc. $6000 1: ??? $6001-69C0 2496: I01~32のVMEMデータ 4E(78)*20(32)=2496 $69C1-6A0E 78: VCED(1)の退避領域 @D797, B0CE, B18C (jsr $AE9Eでコピーする) $6A19-6A66 78: VCED(1)の退避領域 @B77C, C2BC, C30D ( 〃 ) $6A67 13: VCED op4 (VCED) VCED領域の大きさは110 $6A74 13: VCED op3 $6A81 13: VCED op2 $6A8E 13: VCED op1 $6A9B 1: VCED Algorithm : $6AB4-64BD 10: VCED Voice name char 1~10 $6ABE-64C2 5: ACED(FIX, Fix Range, FIN(RATIO), OSW, SHFT) op4 $6AC3-64C7 5: ACED op3 $6AC8-6ACC 5: ACED op2 $6ACD-6AD1 5: ACED op1 $6AD2-6AD4 3: ACED Reverb Rate, FC Pitch, FC Amplitude $6AD5-6B42 110: VCED+ACED(2) $6B43-6BB0 110: VCED+ACED(3) $6BB1-6C1E 110: VCED+ACED(4) $6C1F-6C8C 110: VCED+ACED(5) $6C8D-6CFA 110: VCED+ACED(6) $6CFB-6D68 110: VCED+ACED(7) $6D69-6DD6 110: VCED+ACED(8) $6DD7-6E36 96: PCED INST1~8 12*8=96 $6E37 1: PCED Micro Tune Table(0-12) $6E38 1: PCED Assign Mode (0:normal, 1:alternate) $6E39 1: PCED Effect Select (1:delay,2:pan,3:chord) $6E3A 1: PCED Key (for Micro Tune)(0-11) $6E3B-6E44 10: PCED Name Character 1~10 $6E45-7564 1824: (76*24) PMEM(1)~(24) 6E45-, 6E91-, 6EDD-, 6F29-, … $756B 1: エフェクト(bit1=Pan, bit2=Chord, bit4=Delay) $7628-763F 24: Micro Tuning Table関連? $7751-7754 4: Delay関連? $775D-7764 8: Pan関連? Inst0~7がPanするなら011/101,しないなら0 $7765 1: Pan関連? EC17のみread/write $7766 1: Chord関連? $7772 1: 動作モード? bit2 0:シングル 1:パフォーマンス bit1,0 00:Util 01:Edit 10:Play 11:N/A 他のbit不明 $7773 1: 現在の音色番号(I01~32=00~1F, A01~32=20~3F, B01~32=40~5F, C01~32=60~7F, D01~32=80~9F) $7779 1: 現在のパフォーマンス番号(0~23) $77C6-77CD 8: ch0~7のPortamento time $780E-781D 16: ch0~7のLFD由来の値(0-99 -> 4864-64) 2byteデータ $781E-782D 16: ch0~7のLFO Speedを換算したテーブル($9B6D~9C34) 2byteデータ $782E-7835 8: ch0~7を支配しているLFOLFO Sync (0-1) $7846-784D 8: ch0~7が利用するLFO番号(0,1,2,3=vib, 1と2の場合bit432にINST番号 @940C) LFOが他のchのINSTに支配されている可能性があるのでbit432に保存しているらしい $784E 1: LFO1に使うINST番号 (or FF) $784F 1: LFO2 〃 $7850 1: LFO1を使う最小のch番号 784Eの下2桁が0or3の場合FF $7851 1: LFO2 〃 784F 〃 $7852 1: 0000 | LFW2 | LFW1 $7853-7872 32: EBSテーブル @9D7E $78D3-78F2 32: KVSのテーブル(@A00E) $78F3-7912 32: KVSのテーブル(@A010) $7913-791A 8: ch0~7について,レジスタ20-27に書き込んだ値 (R | FBL | ALG) $791B-7922 8: ch0~7のTranspose(-48~0~+48, VCED+PCED) $7923-792A 8: ch0~7のPitch Bend Range $792B-7932 8: ch0~7のBC Pitch Bias $7933-793A 8: ch0~7のOutput番号0,2,4,7 (INST0~7のoutput assign(0,1,2,3)に対応) $793B-7942 8: ch0~7のINST番号 ($FFで初期化@9382 シングルは#FFのまま?) $7943-7CE2 928: ch0~7のLS表(29*4*8ch) $7D13-7D14 2: AMD 1,2 $7D15-7D16 2: MW Amp 1,2 $7D17-7D18 2: BC Amp 1,2 $7D19-7D1A 2: FC Amp 1,2 $7D1B-7D22 8: ch0~7のFC Volume $7D33-7D3A 8: ch0~7のBCEG Bias $7D3B-7D42 8: ch0~7のMW Pitch $7D43-7D4A 8: ch0~7のBC Pitch $7D4B-7D52 8: ch0~7のFC Pitch $7D6B-7D72 8: INST0~7の音量(vol99~0 -> 0~255) $7D7B-7D82 8: ch0~7のPMD $7DCC-7E0B 64: MIDI送信バッファ $7F9A-B1 24: Micro Tuning関連?
ROMのメモリマップ
# 前半ROM: from -to len: desc. $8086-80D3 78: INIT VOICEのVMEM(0-83のうち,67-72は省略されていてROMにはない) $80D4-80FF 44: 80D4:"(TX)"+00, 80D9:"(DX)"+00, 80DE:"Memory Protected"+00, 80EF:""+00 $8202-821B 26: (2*13) 前半バンクのサブルーチン呼び出し(後半で$40にエントリ番号をセットしてJSR $8039で呼び出す 82 1C 89 22 95 39 86 C9 87 1E 84 6B 83 7E 85 09 85 94 85 D4 85 A3 9C E5 86 45 $85F1-861E 46: VCEDの各パラメータの最大値テーブル 1F 1F 1F | 0F 0F 63 03 07 01 07 63 | 3F 06 | 07 07 63 63 63 63 01 03 07 03 30 01 0C 01 63 63 01 01 01 63 63 63 63 64 63 | 01 07 0F 07 03 | 07 63 63 | $861F-862E 16: PCEDの各パラメータの最大値テーブル 08 00 9F 10 7F 7F 0E 30 63 03 03 01 | 0C 01 03 0B $870D-871D 17: "Transmitting!! "+00 $87A6-8921 380: PMEM SINGLE/DUAL/SPLIT/MONO8/POLY4 (76*5) $8F1E-903E 289: 文字列 8F1E!"ready? " 8F26!" Verify" 8F2E!" Save" 8F34!" INT " 8F3D!" ERR" 8F42!" Verify Tape" 8F4F!" Tape to INT" 8F5C!"Verify Completed" 8F6D!"Load all ready?" 8F7E!"Load ready? " 8F8F!"Tape ?? to BUFF?" 8FA0!" Search Tape " 8FAF!" Load Completed " 8FC0!"(PFM)" 8FC6!" Tape to PFM" 8FD3!" PFM " 8FDC!"to Tape" 8FE4!" Tape to " 8FEE!" PGMCNG " 8FF7!" SYSTEM " 9000!" EFFECT " 9009!" MICTUN " 9012!"ALL" 9016!"SYS" 901A!"PC " 901E!"EF " 9022!"MC " 9026!"(AL)" 902B!"(SY)" 9030!"(PC)" 9035!"(EF)" 903A!"(MC)" $9872-9882 17: "Check MIDI THRU "+00 $D1C0-F8BF 9984: A01~D32のVMEM 78byte * 32voice * 4bank $F8C0-FFDF 6*24: PMEM01~24 # 後半ROM: from -to len: desc. $8086-80D3 78: INIT VOICEのVMEM(0-83のうち,67-72は省略されていてROMにはない) $80D4-80FF 44: 80D4:"(TX)"+00, 80D9:"(DX)"+00, 80DE:"Memory Protected"+00, 80EF:" "+00 $8264-82A1 62: 後半バンクのサブルーチン呼び出し(前半で$40にエントリ番号をセットしてJSR $8039で呼び出す (2*31) 91 2C 90 D5 C3 48 96 0E E1 18 92 06 E1 16 E0 98 E0 79 C6 B7 E1 19 E1 05 E6 57 E1 17 E2 DA 93 38 E6 49 9A 37 D8 D1 B7 ED B1 4C E8 F4 E9 A1 AC 64 A1 2D C2 F2 C2 C2 C3 19 85 96 82 BA 80 00 $9703-9820 286: 2段テーブル @969Bで見てる 9703-9718: index: 9719 9731 9749 9761 9779 9791 97A9 97C1 97D9 97F1 9809 9719- 3C 00 3D 00 3E 00 3F 00 40 00 41 00 42 00 43 00 44 00 45 00 46 00 47 00 9731- 3C 0A 3C 37 3E 0D 3F 14 40 01 41 09 41 36 43 0B 43 38 45 00 46 15 47 03 9749- 3C 0A 3C 37 3D 3F 3F 14 40 01 41 09 41 36 43 0B 43 38 45 00 46 15 47 03 9761- 3C 07 3C 37 3E 02 3F 0D 3F 3E 41 09 41 39 43 04 43 35 45 00 46 0B 46 3C 9779- 3B 3C 3D 05 3D 3F 3E 38 40 01 40 3B 42 04 42 3D 44 06 45 00 45 3A 47 03 9791- 3C 08 3D 01 3E 03 3F 04 40 01 41 06 42 00 43 05 44 03 45 00 46 05 47 03 97A9- 3C 07 3D 00 3E 02 3F 03 3F 3E 41 05 42 00 43 04 44 02 45 00 46 04 46 3F 97C1- 3C 04 3D 00 3E 01 3F 03 3F 3F 41 05 41 3F 43 03 44 01 45 00 46 04 46 3D 97D9- 3C 20 3D 20 3E 20 3F 20 40 20 41 20 42 20 43 20 44 20 45 20 46 20 47 20 97F1- 42 00 42 20 43 00 43 20 44 00 44 20 45 00 45 20 46 00 46 20 47 00 47 20 9809-9820 3F 00 3F 10 3F 20 3F 30 40 00 40 10 40 20 40 30 41 00 41 10 41 20 41 30 $9821-9880 96: テーブル @96C0で見てる 00 00 00 48 00 75 00 CA 00 F7 01 3F 01 6C 01 B3 02 09 02 36 02 7D 02 AB 00 00 00 48 00 75 00 CA 00 F7 01 3F 01 6C 01 C1 02 09 02 36 02 7D 02 AB 00 00 00 4B 00 7C 00 C7 00 F7 01 42 01 73 01 BE 02 09 02 39 02 84 02 B5 00 00 00 3A 00 83 00 BC 01 05 01 3F 01 88 01 C1 01 FB 02 44 02 7D 02 C6 $9B6D-9C34 200: LFO Speed(2byte * 100個) $9D89-9D90 8: EBSテーブル 00 25 49 6E 92 B7 DB FF (00 37 73 110 146 183 219 255) $9E18-9E57 64: CRSテーブル(微妙に昇順ではない) 00 01 02 03 04 05 06 07 08 09 0C 0A 0B 10 0D 0E 6bitのうち 14 0F 11 18 12 13 1C 15 16 20 19 17 24 1A 1D 28 9ECCでは下位2bitしか見てない 1B 1E 2C 21 30 1F 22 25 34 23 38 29 26 3C 2D 27 9E09では上位4bit見る 2A 31 2E 2B 35 32 2F 39 36 33 3D 3A 37 3E 3B 3F $9FA8-9FBB 20: Operator Output Level 0~19のテーブル 7F 7A 76 72 6E 6B 68 66 64 62 60 5E 5C 5A 58 56 55 54 52 51 $9FBC-9FD8 29: Level Scalingでつかう減衰パラメータ 00 01 02 03 04 05 06 07 08 09 0B 0E 10 13 17 1C 21 27 2F 39 43 50 5F 71 86 A0 BE E0 FF $A06D-A0D0 100: Portamento time(0-99) FF FE F3 E8 D3 CA C1 B9 B2 AB A5 9F 99 93 8D 87 82 7D 78 73 6E 6A 66 62 5E 5B 58 55 52 4F 4C 4A 48 46 44 42 40 3E 3C 3A 38 36 35 33 31 2F 2E 2C 2A 29 27 26 25 24 22 21 1F 1E 1C 1B 1A 19 18 17 16 15 14 13 12 12 11 10 10 0F 0E 0E 0D 0D 0C 0C 0B 0B 0A 0A 09 09 08 08 07 07 06 06 05 05 04 04 03 03 02 01 $A0E4-A0F0 13: Pitch Bend Range(0-12) 00 10 21 31 41 51 61 71 81 91 A2 B2 C2 $A2F0-A34F 96: KCのテーブル(A2B1などで参照) 00 01 02 04 05 06 08 09 0A 0C 0D 0E 10 11 12 14 15 16 18 19 1A 1C 1D 1E 20 21 22 24 25 26 28 29 2A 2C 2D 2E 30 31 32 34 35 36 38 39 3A 3C 3D 3E 40 41 42 44 45 46 48 49 4A 4C 4D 4E 50 51 52 54 55 56 58 59 5A 5C 5D 5E 60 61 62 64 65 66 68 69 6A 6C 6D 6E 70 71 72 74 75 76 78 79 7A 7C 7D 7E $A350-A353 4: opの並び 03 01 02 00 $A485-A4B7 51: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0F 11 14 17 1A 1C 1F 23 27 2A 2E 32 36 3A 3E 43 48 4E 52 58 5D 62 69 6E 75 7B 81 88 8E 95 9C A4 AB B3 BB C2 C2 $A4B8-A537 128: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 40 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F $A82B-A92A 256: LFO Speed FF FF E0 CD C0 B5 AD A6 A0 9A 95 91 8D 89 86 82 80 7D 7A 78 75 73 71 6F 6D 6B 69 67 66 64 62 61 60 5E 5D 5B 5A 59 58 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 4A 49 48 47 46 46 45 44 43 42 42 41 40 40 3F 3E 3D 3D 3C 3B 3B 3A 39 39 38 38 37 36 36 35 35 34 33 33 32 32 31 31 30 30 2F 2F 2E 2E 2D 2D 2C 2C 2B 2B 2A 2A 2A 29 29 28 28 27 27 26 26 26 25 25 24 24 24 23 23 22 22 22 21 21 21 20 20 20 1F 1F 1E 1E 1E 1D 1D 1D 1C 1C 1C 1B 1B 1B 1A 1A 1A 19 19 19 18 18 18 18 17 17 17 16 16 16 15 15 15 15 14 14 14 13 13 13 13 12 12 12 12 11 11 11 11 10 10 10 10 0F 0F 0F 0F 0E 0E 0E 0E 0D 0D 0D 0D 0C 0C 0C 0C 0B 0B 0B 0B 0A 0A 0A 0A 09 09 09 09 08 08 08 08 08 07 07 07 07 06 06 06 06 06 05 05 05 05 05 04 04 04 04 04 03 03 03 03 03 02 02 02 02 02 02 01 01 01 01 01 00 00 00 00 00 00 $A92B-A94A 32: 30 30 30 20 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 09 09 09 09 08 08 08 08 06 04 02 $AF13-AF5E 76: PMEMデータ "SINGLE " AF0Fで参照される 68 00 20 00 7F 07 18 63 MAX Note=8 60 00 41 00 7F 07 18 63 60 00 62 00 7F 07 18 63 60 00 63 00 7F 07 18 63 60 00 64 00 7F 07 18 63 60 00 65 00 7F 07 18 63 60 00 66 00 7F 07 18 63 60 00 67 00 7F 07 18 63 00 00 53 49 4E 47 4C 45 20 20 20 20 "SINGLE " $B5E5-B61D 57: @B2C0で使うテーブル (3*19) 75 65 7F 75 70 01 75 6D 01 75 6E 01 75 66 10 75 67 0F 75 68 02 75 69 11 75 6F 01 75 6A 11 75 6B 02 75 6C 01 75 F1 7F 75 F2 30 75 F3 07 75 F4 63 75 F5 02 75 F6 01 75 F7 63 $B61E-B627 10: @B246で使うテーブル (2*5) 34 07 35 07 DA 07 8C 06 8A 63 $B628-B671 74: @B384で使うテーブル(2*37, 全て使うか未確認) 3B 03 36 63 37 63 38 63 39 63 3A 01 3C 07 3D 03 88 01 87 07 89 07 D8 07 8B 3F D7 01 80 1F 81 1F 84 0F 82 1F 83 0F DB 03 86 03 85 63 3F 01 40 0C 41 01 42 63 43 63 6C 63 6D 63 47 63 48 63 49 63 4A 63 4B 64 4C 63 3E 30 6B 07 $B672-B68F 30: @B2E3で使うテーブル(2*15, 全て使うか未確認) 61 01 80 08 82 9F 83 10 84 7F 85 7F 86 0E 87 30 88 63 89 03 8A 03 60 0C 62 03 8B 01 63 0B $BBE4-BBEF 12: @B981で使うテーブル 05 03 0B 05 01 0F 0C 0A 03 02 0B 03 $C6A6-C6B6 17: "* YAMAHA TX81Z *" + 00 $C7BB-C7BE 4: テーブル @C73F B=0,1,2,3のループで参照 7F 30 07 63 $C7BF-C7C1 3: テーブル @C757 B=0,1,2のループで参照 02 01 63 $D476-D47F 10: "LM 976CRT" @D3B9 $D508-D51F 24: @D4DFで使うテーブル(3*8) 00 22 84 02 0A 85 00 25 3A 02 0A 3B 00 41 3C 00 78 4C 13 0A 54 00 21 3D $D899-D8A9 17: " Midi Received "+00 $D8AA-D8BA 17: "Midi CSUM Error "+00 $DB7B-DB8E 20: テーブル @DAC5 07 00 07 01 07 03 07 04 07 02 09 01 09 00 03 02 03 01 03 03 $DB8F-DBBC 46: テーブル @DB2A 02 01 02 02 02 03 02 04 02 05 02 00 03 00 03 01 0A 0D 0A 00 0A 01 0A 02 0A 03 0A 04 00 00 00 00 00 00 0A 07 0A 08 0A 09 0A 0A 0A 0B 0A 0C $DC18-DC23 12: @DC09で使うテーブル 29 2A 2A 2B 2C 2D 2E 2F 30 31 32 33 $DCD8-DCE1 10: テーブル @DCC8 B=0-6,9 7と8は参照されない 00 01 02 03 05 06 07 00 00 04 $DD4A-DD57 14: テーブル 2*7 @DD31 19 00 19 01 19 02 19 03 1A 01 1A 00 1A 02 $DF87-DF92 12: テーブル @DF58 00 00 05 06 07 08 09 02 01 00 00 0C $DF94-E013 128: ベロシティ関連のテーブルぽい FE C0 B4 AE A8 A2 9E 98 94 90 8D 8A 86 82 80 7D 7A 77 74 72 70 6D 6B 69 67 65 63 61 5F 5D 5C 5A 58 56 55 53 52 51 4F 4E 4C 4B 4A 48 47 46 44 43 42 41 40 3F 3E 3C 3B 3A 39 38 37 36 35 34 32 31 30 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 1A 19 18 17 16 16 15 14 13 12 12 11 10 10 0F 0E 0E 0D 0C 0C 0B 0B 0A 09 09 08 07 07 06 06 05 05 04 04 03 03 02 02 01 01 00 $E15A-E16A 17: "Transmitting!! "+00 $E231-E235 5: F0 43 03 00 5D (VCED Bulk) $E236-E244 15: F0 43 7E 00 21 "LM 8976AE" (ACED+VCED) $E2B3-E2C1 15: F0 43 7E 13 0A "LM 8976PM" (PMEM) $E301-E305 5: F0 43 04 20 00 $E3DE-E3EA 13: 7E 00 78 "LM 8976PE" (PCED) $E449-E455 13: 7E 00 22 "LM MCRTE0" (Micro Tune Octave) $E4B4-E4C0 13: 7E 02 0A "LM MCRTE1" (Micro Tune Full Kbd) $E536-E542 13: 7E 00 25 "LM 8976S0" (System) $E5B1-E5BD 13: 7E 00 0A "LM 8976S1" (Program Change Table) $E61C-E628 13: 7E 00 41 "LM 8976S2" (Effect Data) $E69B-E6AB 17: "Midi Buffer Full"+00 $E6AC-E6BC 17: "Midi Data Error!"+00 $EBA9-EBB0 8: FF 76 3B 27 1D 17 13 0E $EF41-F040 256? LFO関連? 00 08 0C 13 18 1D 20 27 2B 30 33 38 3C 3F 43 47 4B 50 54 58 5B 5F 63 65 68 6C 6F 72 75 78 7B 7D 80 83 9A 9C 8B 8D 90 92 94 96 99 9B 9D 9F A1 A3 A5 A7 A9 AB AD AE B0 B2 B3 B5 B7 B8 BA BB BD BE BF C1 C2 C4 C5 C6 C7 C9 CA CB CC CD CE CF D1 D1 D2 D3 D4 D5 D6 D7 D8 D8 D9 DA DB DC DC DD DE DE DF E0 E1 E1 E2 E2 E3 E4 E4 E5 E5 E6 E6 E7 E7 E8 E8 E9 E9 EA EA EB EB EB EC EC ED ED ED EE EE EE EF EF F0 F0 F0 F0 F1 F1 F1 F2 F2 F2 F2 F3 F3 F3 F3 F4 F4 F4 F4 F5 F5 F5 F5 F5 F6 F6 F6 F6 F6 F6 F7 F7 F7 F7 F7 F7 F8 F8 F8 F8 F8 F8 F8 F9 F9 F9 F9 F9 F9 F9 F9 FA FA FA FA FA FA FA FA FA FA FA FB FB FB FB FB FB FB FB FB FB FB FB FB FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FE FE FF $F041-F051 17: "V1.6 03-Feb-88 "+00