復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第356回]
●メタイベント(FF)の処理
前回からの続きです。
前回はMIDIイベントデータの第1コードを解読して、それぞれの処理に分岐するところまでを説明しました。
今回はそれぞれに分岐したあとの処理について説明をします。
MIDIイベントデータの第1バイトがFFはメタイベントです。
それに続く第2バイトのコードによって、テンポであるとか、曲名とか楽器名とかというようにMIDI音源には送らないでMIDIシーケンスプログラム内で処理される情報を示します。
8107 23 CODEFF:INC HL 8108 7E LD A,(HL) 8109 FE2F CP 2F 810B CA3381 JP Z,TRKEND 810E FE51 CP 51 8110 CA7081 JP Z,TMPSET ;pass text data or something 8113 23 INC HL 8114 CD1682 CALL VLREAD 8117 19 ADD HL,DE;pass to next data top(variable length top) |
8118 CD1682 NEXTDT:CALL VLREAD 811B DD7302 LD (IX+02),E 811E DD7203 LD (IX+03),D 8121 DD7004 LD (IX+04),B 8124 78 LD A,B 8125 B2 OR D 8126 B3 OR E 8127 DD7701 LD (IX+01),A 812A DD7505 LD (IX+05),L 812D DD7406 LD (IX+06),H 8130 C33781 JP NEXT |
8133 DD360000 TRKEND:LD (IX+00),00 8137 3ADC82 NEXT:LD A,(CNTR) 813A 3D DEC A 813B CA4981 JP Z,NEXT2 813E 32DC82 LD (CNTR),A 8141 110800 LD DE,$0008 8144 DD19 ADD IX,DE 8146 C3A180 JP ST1LP 8149 3ADD82 NEXT2:LD A,(ENDCK) 814C B7 OR A 814D CA6681 JP Z,MIDIEND 8150 C39380 JP START1 |
8170 23 TMPSET:INC HL 8171 23 INC HL;pass 'length' 8172 46 LD B,(HL) 8173 23 INC HL 8174 4E LD C,(HL);BC=TEMPO*256 cut off LSB(byte) 8175 23 INC HL 8176 23 INC HL 8177 E5 PUSH HL 8178 CD8281 CALL TMPSB ; ;timer set and int on 817B CDD381 CALL TMSB 817E E1 POP HL 817F C31881 JP NEXTDT |
8153 CD4B82 CODEF0:CALL MIDIOUT 8156 4E LD C,(HL) 8157 23 INC HL 8158 CD4B82 CODEF0_2:CALL MIDIOUT 815B 0D DEC C 815C C25881 JP NZ,CODEF0_2 815F C31881 JP NEXTDT |