復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第351回]
●MIDI演奏プログラムの環境設定
前回からの続きです。
MIDI演奏プログラムの詳細について説明をしております。
前回説明をしました続きのところです。
8010 D3FF OUT (FF),A;start message ; ;cpu wait settei 8012 0D DEC C 8013 3E00 LD A,00 8015 ED79 OUT (C),A;memory wait=0,i/o wait=1 ; ;16F886 settei 8017 3E88 LD A,88 8019 D3FB OUT (FB),A;82C55 A=out,B=out,C0-3=out,C4-7=in 801B 3EFB LD A,FB;16F886out enable 801D D3FA OUT (FA),A |
;cpu clock=10MHz ; ORG $8000 ; ZB3ENTRY=$1033 ; DATATOP=$8400 TRKNO=$840B BPQN=$840C |
; ; work space ; 82D6 0000 TIMEDT:DW $0000 82D8 0000 DEWK:DW $0000 82DA 0000 HLWK:DW $0000 82DC 00 CNTR:DB 00 82DD 00 ENDCK:DB 00 ; 82DE 00 TPRMTOP:NOP ;TRK1 endmk 1byte ;TRK1 time0mk 1byte ;TRK1 timedata 3bytes ;TRK1 dataaddress 2bytes ;TRK1 previous datacode ; ....... ; |
; 801F DD21DE82 LD IX,TPRMTOP 8023 210B84 LD HL,TRKNO 8026 7E LD A,(HL) 8027 32DC82 LD (CNTR),A 802A 23 INC HL 802B 111182 LD DE,MTRK 802E CDEB81 CALL SEARCH 8031 7D LD A,L 8032 FE12 CP 12 8034 C26281 JP NZ,ERROR 8037 7C LD A,H 8038 FE84 CP 84 803A C26281 JP NZ,ERROR ;set track parameter 803D 23 ST0LP:INC HL 803E 23 INC HL;pass upper 2bytes 803F 56 LD D,(HL) 8040 23 INC HL 8041 5E LD E,(HL);bytes of TRK 8042 23 INC HL 8043 ED53D882 LD (DEWK),DE 8047 22DA82 LD (HLWK),HL 804A CD1682 CALL VLREAD 804D DD3600FF LD (IX+00),FF 8051 78 LD A,B 8052 B2 OR D 8053 B3 OR E 8054 DD7701 LD (IX+01),A 8057 DD7302 LD (IX+02),E 805A DD7203 LD (IX+03),D 805D DD7004 LD (IX+04),B 8060 DD7505 LD (IX+05),L 8063 DD7406 LD (IX+06),H 8066 3ADC82 LD A,(CNTR) 8069 3D DEC A 806A CA8A80 JP Z,START10 806D 32DC82 LD (CNTR),A 8070 110800 LD DE,$0008 8073 DD19 ADD IX,DE 8075 ED5BD882 LD DE,(DEWK) 8079 2ADA82 LD HL,(HLWK) 807C 19 ADD HL,DE 807D 7E LD A,(HL) 807E FE4D CP 4D;'M' 8080 C26281 JP NZ,ERROR 8083 23 INC HL 8084 23 INC HL 8085 23 INC HL 8086 23 INC HL 8087 C33D80 JP ST0LP |
;MIDI end 8162 3E0E ERROR:LD A,0E 8164 D3FF OUT (FF),A 8166 F3 MIDIEND:DI 8167 011000 LD BC,$0010 816A AF XOR A 816B ED79 OUT (C),A;INT disenable,countdown stop 816D C33310 JP ZB3ENTRY |
; ;string search 81EB 7C SEARCH:LD A,H 81EC FEA0 CP A0 81EE CA0D82 JP Z,SEARCHE 81F1 D5 PUSH DE 81F2 1A LD A,(DE) 81F3 BE SEARCH1:CP (HL) 81F4 CAFB81 JP Z,SEARCH2 81F7 23 INC HL 81F8 C3F381 JP SEARCH1 81FB E5 SEARCH2:PUSH HL 81FC 23 SEARCH3:INC HL 81FD 13 INC DE 81FE 1A LD A,(DE) 81FF B7 OR A 8200 CA0E82 JP Z,SEARCH4 8203 BE CP (HL) 8204 CAFC81 JP Z,SEARCH3 8207 E1 POP HL 8208 23 INC HL 8209 D1 POP DE 820A C3EB81 JP SEARCH 820D B7 SEARCHE:OR A;reset Zflag 820E D1 SEARCH4:POP DE;dummy 820F D1 POP DE 8210 C9 RET ; 8211 4D MTRK:DB 4D;M 8212 54 DB 54;T 8213 72 DB 72;r 8214 6B DB 6B;k 8215 00 DB 00 ; |
; ;variable length data read 8216 0600 VLREAD:LD B,00 8218 7E LD A,(HL) 8219 B7 OR A 821A F24682 JP P,VLREAD2 821D E67F AND 7F 821F 57 LD D,A 8220 23 INC HL 8221 7E LD A,(HL) 8222 5F LD E,A 8223 B7 OR A 8224 F23E82 JP P,VLREAD1 8227 E67F AND 7F 8229 5F LD E,A 822A CB13 RL E 822C CB1A RR D 822E CB1B RR E 8230 42 LD B,D 8231 53 LD D,E 8232 23 INC HL 8233 5E LD E,(HL) 8234 CB13 RL E 8236 CB18 RR B 8238 CB1A RR D 823A CB1B RR E 823C 23 INC HL 823D C9 RET 823E CB13 VLREAD1:RL E 8240 CB1A RR D 8242 CB1B RR E 8244 23 INC HL 8245 C9 RET 8246 5F VLREAD2:LD E,A 8247 1600 LD D,00 8249 23 INC HL 824A C9 RET |