MSX.M-80 2.00 24-Dec-20 PAGE 1 ;-------------------------------------- ;PSGのコントロール・テストプログラム ;-------------------------------------- 7800 MEMOSW EQU 7800H ;BYTE PSGスイッチ・レジスタのためのメモリ 7801 WAITLN EQU 7801H ;MEMOSW+1 ;WORD 音符長のための基本ウェイ トのメモリ 7803 WLNM EQU 7803H ;WAITLN+2 ;WAITLN*WLNM ウェイト倍数(音符長一時記憶) 7804 ENBSYC EQU 7804H ;WLNM+1 ;WORD 7806 ENBTYP EQU 7806H ;ENBSYC+2 ;WORD 7808 Madr EQU 7808H ;ENBTYP+2 ;WORD 780A TMS EQU 780AH ;Madr+2 ;BYTE ; ORG 100H ;0100H番地からスタート ;-------------------------------------- 0100' CD 0115' START: CALL PSGINI 0103' CD 0188' CALL SELBYA 0106' C9 RET ; 0107' F5 WAIT: PUSH AF ;(WAITLN) の値に応じたウェイト 0108' D5 PUSH DE 0109' ED 5B 7801 LD DE,(WAITLN) 010D' 1B WAIFLG: DEC DE 010E' 7B LD A,E 010F' B2 OR D 0110' 20 FB JR NZ,WAIFLG 0112' D1 POP DE 0113' F1 POP AF 0114' C9 RET ; 0115' 21 0135' PSGINI: LD HL,PSREG ;PSGの初期設定 0118' 06 10 LD B,10H 011A' 0E 00 LD C,0 011C' 79 FLG0: LD A,C 011D' D3 24 OUT (24H),A 011F' 7E LD A,(HL) 0120' D3 25 OUT (25H),A 0122' 23 INC HL 0123' 0C INC C 0124' 10 F6 DJNZ FLG0 0126' 3E 60 LD A,60H ;エンベロープ周期上位の値設定 0128' 32 7804 LD (ENBSYC),A 012B' 3E 03 LD A,03H ;エンベロープのタイプ設定 012D' 32 7806 LD (ENBTYP),A 0130' AF XOR A 0131' 32 780A LD (TMS),A 0134' C9 RET 0135' 00 01 00 01 PSREG: DB 00H,01H,00H,01H,00H,02H,00H,0F8H 0139' 00 02 00 F8 013D' 10 10 10 08 DB 10H,10H,10H,08H,00H,60H,01H,00H ;レジスタ初期値 0141' 00 60 01 00 ; 0145' D5 WRDE: PUSH DE ;PSGレジスタ番号(D)を指定して 0146' F5 PUSH AF ;そのレジスタにEの値を 0147' 7A LD A,D ;書き込むサブルーチン 0148' D3 24 OUT (24H),A 014A' 7B LD A,E 014B' D3 25 OUT (25H),A MSX.M-80 2.00 24-Dec-20 PAGE 1-1 014D' F1 POP AF 014E' D1 POP DE 014F' C9 RET 0150' DD 7E 01 SEL0SB: LD A,(IX+1) ;GAKUFU DATA ex. [DE 0FEH,0BH,2AH] 0153' 57 LD D,A ;受けるとPSGレジスタのOBH番地に 0154' DD 7E 02 LD A,(IX+2) ;2AHを書き込む 0157' 5F LD E,A 0158' CD 0145' CALL WRDE 015B' DD 23 INC IX 015D' DD 23 INC IX 015F' DD 23 INC IX 0161' C9 RET ; 0162' 87 CVOPLN: ADD A,A ;Areg音符から音波長変換(HL),(HL+1) 0163' 4F LD C,A 0164' 06 00 LD B,0 0166' 21 02C4' LD HL,ONKSUT 0169' 09 ADD HL,BC 016A' C9 RET ; 016B' 3A 7800 SWSET: LD A,(MEMOSW) ;R07(スイッチ・レジスタ)の書き込み 016E' 5F LD E,A 016F' 16 07 LD D,7 0171' CD 0145' CALL WRDE 0174' 16 0C LD D,0CH 0176' 3A 7804 LD A,(ENBSYC) 0179' 5F LD E,A 017A' CD 0145' CALL WRDE 017D' 16 0D LD D,0DH 017F' 3A 7806 LD A,(ENBTYP) 0182' 5F LD E,A 0183' CD 0145' CALL WRDE 0186' C9 RET 0187' C9 SEL1SB: RET ; ;------------------------------------------ ;楽譜データを読んで,演奏するサブルーチン ;------------------------------------------ 0188' DD 21 03C4' SELBYA: LD IX,GAKUFU 018C' 21 0A00 LD HL,0A00H ;基本ウェイト長を0A00Hとする 018F' 22 7801 LD (WAITLN),HL ;これを変えると演奏のテンポが変わる 0192' 3E 18 LD A,24 0194' 32 7803 LD (WLNM),A ;START時の音符長24(4分音符)にセッ ト ; 0197' 3E F8 SELBY0: LD A,0F8H 0199' 32 7800 LD (MEMOSW),A 019C' DD 7E 00 LD A,(IX+0) 019F' CD 023B' CALL PSIGN 01A2' FE FF CP 0FFH ;0FFHならば終了 01A4' CA 023A' JP Z,SELAE 01A7' FE FE CP 0FEH ;0FEHならばPSG臨時書き込み 01A9' C2 01B2' JP NZ,SELSB 01AC' CD 0150' CALL SEL0SB 01AF' C3 0197' JP SELBY0 01B2' FE 8E SELSB: CP 8EH ;Channel Aへ音の書き込み 01B4' CA 01D6' JP Z,SELBY5 MSX.M-80 2.00 24-Dec-20 PAGE 1-2 01B7' FE 8F CP 8FH 01B9' C2 01C6' JP NZ,SELBY4 01BC' 3A 7800 LD A,(MEMOSW) 01BF' F6 01 OR 1 01C1' 32 7800 LD (MEMOSW),A 01C4' 18 10 JR SELBY5 ; 01C6' CD 0162' SELBY4: CALL CVOPLN 01C9' 16 00 LD D,0 01CB' 5E LD E,(HL) 01CC' CD 0145' CALL WRDE 01CF' 23 INC HL 01D0' 16 01 LD D,1 01D2' 5E LD E,(HL) 01D3' CD 0145' CALL WRDE 01D6' DD 7E 01 SELBY5: LD A,(IX+1) ;Channel Bへ音の書き込み 01D9' FE 8E CP 8EH 01DB' CA 01FD' JP Z,SELBY7 01DE' FE 8F CP 8FH 01E0' 20 0B JR NZ,SELBY6 01E2' 3A 7800 LD A,(MEMOSW) 01E5' F6 02 OR 2 01E7' 32 7800 LD (MEMOSW),A 01EA' C3 01FD' JP SELBY7 01ED' CD 0162' SELBY6: CALL CVOPLN 01F0' 16 02 LD D,2 ;PUTBL 01F2' 5E LD E,(HL) 01F3' CD 0145' CALL WRDE 01F6' 23 INC HL 01F7' 16 03 LD D,3 ;PUTBH 01F9' 5E LD E,(HL) 01FA' CD 0145' CALL WRDE 01FD' DD 7E 02 SELBY7: LD A,(IX+2) ;Channel Cへ音の書き込み 0200' FE 8E CP 8EH 0202' CA 0223' JP Z,SELBY9 0205' FE 8F CP 8FH 0207' 20 0A JR NZ,SELBY8 0209' 3A 7800 LD A,(MEMOSW) 020C' F6 04 OR 4 020E' 32 7800 LD (MEMOSW),A 0211' 18 10 JR SELBY9 0213' CD 0162' SELBY8: CALL CVOPLN 0216' 16 04 LD D,4 ;PUTCL 0218' 5E LD E,(HL) 0219' CD 0145' CALL WRDE 021C' 23 INC HL 021D' 16 05 LD D,5 ;PUTCH 021F' 5E LD E,(HL) 0220' CD 0145' CALL WRDE 0223' CD 016B' SELBY9: CALL SWSET 0226' DD 7E 03 LD A,(IX+3) ;音符長のWAIT設定 0229' 47 LD B,A 022A' CD 0107' SELBY2: CALL WAIT 022D' 10 FB DJNZ SELBY2 022F' DD 23 INC IX 0231' DD 23 INC IX MSX.M-80 2.00 24-Dec-20 PAGE 1-3 0233' DD 23 INC IX 0235' DD 23 INC IX 0237' C3 0197' JP SELBY0 023A' C9 SELAE: RET ; 023B' DD 7E 00 PSIGN: LD A,(IX+0) 023E' FE 8B CP 8BH ;repeat開始記号? 0240' 20 0B JR NZ,PSIGN1 0242' DD 23 INC IX 0244' DD E5 PUSH IX 0246' E1 POP HL 0247' 22 7808 LD (Madr),HL 024A' C3 023B' JP PSIGN 024D' FE 8C PSIGN1: CP 8CH ;repeat終了記号? 024F' 20 28 JR NZ,PSIGN2 0251' 3A 780A LD A,(TMS) 0254' FE 00 CP 0 0256' 20 09 JR NZ,PSIGN10 0258' DD 7E 01 LD A,(IX+1) 025B' 3D DEC A 025C' 32 780A LD (TMS),A 025F' 18 0F JR PSIGN11 0261' DD 23 PSIGN10:INC IX 0263' DD 23 INC IX 0265' 3A 780A LD A,(TMS) 0268' 3D DEC A 0269' 32 780A LD (TMS),A 026C' FE 00 CP 0 026E' 28 06 JR Z,PSIGN3 0270' 2A 7808 PSIGN11:LD HL,(Madr) 0273' E5 PUSH HL 0274' DD E1 POP IX 0276' C3 023B' PSIGN3: JP PSIGN 0279' FE 8D PSIGN2: CP 8DH ;楽譜の中に8DH,12とあったら 027B' 20 0D JR NZ,PSIGN4 ;音符長を12に変更 027D' DD 7E 01 LD A,(IX+1) 0280' 32 7803 LD (WLNM),A 0283' DD 23 INC IX 0285' DD 23 INC IX 0287' C3 023B' JP PSIGN 028A' FE 8A PSIGN4: CP 8AH ;termpoの変更 028C' 20 10 JR NZ,PSIGN5 028E' DD 7E 01 LD A,(IX+1) 0291' 67 LD H,A 0292' 2E 00 LD L,0 0294' 22 7801 LD (WAITLN),HL 0297' DD 23 INC IX 0299' DD 23 INC IX 029B' C3 023B' JP PSIGN 029E' FE 9C PSIGN5: CP 9CH ;エンベロープの周期変更 02A0' 20 0D JR NZ,PSIGN6 02A2' DD 7E 01 LD A,(IX+1) 02A5' 32 7804 LD (ENBSYC),A 02A8' DD 23 INC IX 02AA' DD 23 INC IX 02AC' C3 023B' JP PSIGN MSX.M-80 2.00 24-Dec-20 PAGE 1-4 02AF' FE 9D PSIGN6: CP 9DH ;エンベロープ・パターンの変更 02B1' 20 0D JR NZ,PSIGN7 02B3' DD 7E 01 LD A,(IX+1) 02B6' 32 7806 LD (ENBTYP),A 02B9' DD 23 INC IX 02BB' DD 23 INC IX 02BD' C3 023B' JP PSIGN 02C0' DD 7E 00 PSIGN7: LD A,(IX+0) 02C3' C9 RET ; ;-----------音階波長テーブル------------------------------------ 02C4' 0F76 0E98 ONKSUT: DW 0F76H,0E98H,0DC6H,0D00H,0C45H,0B95H,0AEFH,0A51H 02C8' 0DC6 0D00 02CC' 0C45 0B95 02D0' 0AEF 0A51 02D4' 09BD 0931 DW 09BDH,0931H,08ADH,0831H,07BBH,074CH,06E3H,0680H 02D8' 08AD 0831 02DC' 07BB 074C 02E0' 06E3 0680 02E4' 07BB 074C DW 07BBH,074CH,06E3H,0680H,0623H,05CAH,0577H,0529H 02E8' 06E3 0680 02EC' 0623 05CA 02F0' 0577 0529 02F4' 04DF 0499 DW 04DFH,0499H,0457H,0418H,03DDH,03A6H,0371H,0340H 02F8' 0457 0418 02FC' 03DD 03A6 0300' 0371 0340 0304' 03DD 03A6 DW 03DDH,03A6H,0371H,0340H,0311H,02E5H,02BCH,0294H 0308' 0371 0340 030C' 0311 02E5 0310' 02BC 0294 0314' 026F 024C DW 026FH,024CH,022BH,020CH,01EFH,01D3H,01B9H,01A0H 0318' 022B 020C 031C' 01EF 01D3 0320' 01B9 01A0 0324' 01EF 01D3 DW 01EFH,01D3H,01B9H,01A0H,0189H,0173H,015EH,014AH 0328' 01B9 01A0 032C' 0189 0173 0330' 015E 014A 0334' 0138 0126 DW 0138H,0126H,0116H,0106H,00F7H,00E9H,00DCH,00D0H 0338' 0116 0106 033C' 00F7 00E9 0340' 00DC 00D0 0344' 00F7 00E9 DW 00F7H,00E9H,00DCH,00D0H,00C4H,00B9H,00AFH,00A5H 0348' 00DC 00D0 034C' 00C4 00B9 0350' 00AF 00A5 0354' 009C 0093 DW 009CH,0093H,008BH,0083H,007CH,0075H,006EH,0068H 0358' 008B 0083 035C' 007C 0075 0360' 006E 0068 0364' 007C 0075 DW 007CH,0075H,006EH,0068H,0062H,005DH,0057H,0053H 0368' 006E 0068 036C' 0062 005D 0370' 0057 0053 0374' 004E 004A DW 004EH,004AH,0045H,0042H,0030H,003AH,0037H,0034H MSX.M-80 2.00 24-Dec-20 PAGE 1-5 0378' 0045 0042 037C' 0030 003A 0380' 0037 0034 0384' 003E 003A DW 003EH,003AH,0037H,0034H,0031H,002EH,002CH,0029H 0388' 0037 0034 038C' 0031 002E 0390' 002C 0029 0394' 0027 0025 DW 0027H,0025H,0023H,0021H,001FH,001DH,001CH,001AH 0398' 0023 0021 039C' 001F 001D 03A0' 001C 001A 03A4' 001F 001D DW 001FH,001DH,001CH,001AH,0019H,0017H,0016H,0015H 03A8' 001C 001A 03AC' 0019 0017 03B0' 0016 0015 03B4' 0013 0012 DW 0013H,0012H,0011H,0010H,000FH,000EH,000DH,000CH 03B8' 0011 0010 03BC' 000F 000E 03C0' 000D 000C ; ;---------------------------------------------------------------- ;** Minuet G Dur ** * Beethoven * ;---------------------------------------------------------------- 03C4' 8B GAKUFU: DB 8BH ;REPEAT開始記号 03C5' 8A 0A DB 8AH,0AH ;基本テンポを0AHに設定 03C7' 9C 60 DB 9CH,60H ;エンベロープ周期上位8ビットを60Hに 03C9' 8F 37 3B 12 DB 8FH,37H,3BH,18 ;8FHは休止符 37Hはソ 3BHはシ 03CD' 8E 39 40 06 DB 8EH,39H,40H,6 ;18は符点8分音符 03D1' 17 3B 42 12 DB 17H,3BH,42H,18 03D5' 8E 3A 41 06 DB 8EH,3AH,41H,6 03D9' 1B 3B 42 12 DB 1BH,3BH,42H,18 03DD' 8E 3A 41 06 DB 8EH,3AH,41H,6 03E1' 22 3B 42 12 DB 22H,3BH,42H,18 03E5' 8E 3A 41 06 DB 8EH,3AH,41H,6 03E9' 27 3B 42 18 DB 27H,3BH,42H,24 03ED' 17 8F 8F 18 DB 17H,8FH,8FH,24 03F1' 8E 40 44 12 DB 8EH,40H,44H,18 03F5' 8E 38 3B 06 DB 8EH,38H,3BH,6 03F9' 22 39 40 18 DB 22H,39H,40H,24 03FD' 12 8F 8F 18 DB 12H,8FH,8FH,24 0401' 8F 3B 42 12 DB 8FH,3BH,42H,18 0405' 8F 36 39 06 DB 8FH,36H,39H,6 0409' 17 37 3B 18 DB 17H,37H,3BH,24 040D' 07 8F 8F 18 DB 07H,8FH,8FH,24 0411' 8F 2B 37 12 DB 8FH,2BH,37H,18 0415' 8F 32 39 06 DB 8FH,32H,39H,6 0419' 17 37 3B 12 DB 17H,37H,3BH,18 041D' 8F 36 3A 06 DB 8FH,36H,3AH,6 0421' 1B 37 3B 12 DB 1BH,37H,3BH,18 0425' 8F 36 3A 06 DB 8FH,36H,3AH,6 0429' 23 37 3B 12 DB 23H,37H,3BH,18 042D' 8F 36 3A 06 DB 8FH,36H,3AH,6 0431' 24 37 3B 18 DB 24H,37H,3BH,24 0435' 26 8F 8F 18 DB 26H,8FH,8FH,24 0439' 27 36 39 0C DB 27H,36H,39H,12 043D' 8F 34 37 0C DB 8FH,34H,37H,12 MSX.M-80 2.00 24-Dec-20 PAGE 1-6 0441' 29 34 37 0C DB 29H,34H,37H,12 0445' 8F 32 36 0C DB 8FH,32H,36H,12 0449' 8F 32 36 0C DB 8FH,32H,36H,12 044D' 8F 36 39 0C DB 8FH,36H,39H,12 0451' 19 34 37 0C DB 19H,34H,37H,12 0455' 8F 31 34 0C DB 8FH,31H,34H,12 0459' 22 32 32 18 DB 22H,32H,32H,24 045D' 32 32 8F 18 DB 32H,32H,8FH,24 0461' 8C 02 DB 8CH,2 ;REPEAT終了記号 2は繰り返し2回 ; ;-------------------------------------- 0463' 8B DB 8BH 0464' 8A 0A DB 8AH,0AH 0466' 9C 60 DB 9CH,60H 0468' 8F 8F 42 0C DB 8FH,8FH,42H,12 046C' 8F 8F 47 0C DB 8FH,8FH,47H,12 0470' 32 42 47 18 DB 32H,42H,47H,24 0474' 32 40 46 18 DB 32H,40H,46H,24 0478' 32 3B 47 18 DB 32H,3BH,47H,24 047C' 26 39 49 18 DB 26H,39H,49H,24 0480' 22 8F 8F 18 DB 22H,8FH,8FH,24 0484' 26 8F 47 06 DB 26H,8FH,47H,6 0488' 8E 8F 46 06 DB 8EH,8FH,46H,6 048C' 8E 8F 44 06 DB 8EH,8FH,44H,6 0490' 8E 8F 42 06 DB 8EH,8FH,42H,6 0494' 27 39 40 18 DB 27H,39H,40H,24 0498' 8E 37 3B 18 DB 8EH,37H,3BH,24 049C' 20 40 44 12 DB 20H,40H,44H,18 04A0' 8E 39 40 06 DB 8EH,39H,40H,6 04A4' 22 37 3B 18 DB 22H,37H,3BH,24 04A8' 8F 36 39 0C DB 8FH,36H,39H,12 04AC' 8F 8F 8F 0C DB 8FH,8FH,8FH,12 04B0' 2B 2B 37 12 DB 2BH,2BH,37H,18 04B4' 8F 39 39 06 DB 8FH,39H,39H,6 04B8' 17 32 3B 12 DB 17H,32H,3BH,18 04BC' 89 31 3A 06 DB 89H,31H,3AH,6 04C0' 1B 32 3B 12 DB 1BH,32H,3BH,18 04C4' 8F 31 3A 06 DB 8FH,31H,3AH,6 04C8' 22 32 3B 12 DB 22H,32H,3BH,18 04CC' 8F 31 3A 06 DB 8FH,31H,3AH,6 04D0' 27 32 3B 18 DB 27H,32H,3BH,24 04D4' 25 8F 8F 18 DB 25H,8FH,8FH,24 04D8' 24 34 40 12 DB 24H,34H,40H,18 04DC' 89 2B 38 06 DB 89H,2BH,38H,6 04E0' 24 30 39 18 DB 24H,30H,39H,24 04E4' 21 21 8F 18 DB 21H,21H,8FH,24 04E8' 22 32 3B 12 DB 22H,32H,3BH,18 04EC' 8F 29 36 06 DB 8FH,29H,36H,6 04F0' 17 2B 37 18 DB 17H,2BH,37H,24 04F4' 27 27 8F 1A DB 27H,27H,8FH,26 04F8' 8C 02 DB 8CH,2 04FA' FF DB 0FFH ;終止符 04FB' MSX.M-80 2.00 24-Dec-20 PAGE S Macros: Symbols: 0162' CVOPLN 7804 ENBSYC 7806 ENBTYP 011C' FLG0 03C4' GAKUFU 7808 MADR 7800 MEMOSW 02C4' ONKSUT 0115' PSGINI 023B' PSIGN 024D' PSIGN1 0261' PSIGN10 0270' PSIGN11 0279' PSIGN2 0276' PSIGN3 028A' PSIGN4 029E' PSIGN5 02AF' PSIGN6 02C0' PSIGN7 0135' PSREG 0150' SEL0SB 0187' SEL1SB 023A' SELAE 0197' SELBY0 022A' SELBY2 01C6' SELBY4 01D6' SELBY5 01ED' SELBY6 01FD' SELBY7 0213' SELBY8 0223' SELBY9 0188' SELBYA 01B2' SELSB 0100' START 016B' SWSET 780A TMS 010D' WAIFLG 0107' WAIT 7801 WAITLN 7803 WLNM 0145' WRDE No Fatal error(s)