復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第305回]
●プログラムをロード中の写真
前回説明しました普通のPloglam Loaderを使ってプログラムをロードするところを写真に撮りました。
やっぱり言葉だけで説明するよりも写真や図などを使ったほうが分かりやすいと思います。
ですけれど、準備するのに手間がかかります。
電源を入れた直後の写真です。

パワーオンリセット回路が働いて、電源ONと同時にCPUがリセットされて0000Hから実行が開始されます。
RAMの0000Hには[第300回]で説明しましたサンプルプログラムが入っています。
電ONと同時にそのサンプルプログラムが実行されます。
左下のPROGRAMMED INPUTスイッチから入力された値が左上のPROGRAMMED OUTPUTに表示されています。
STOPスイッチを押しました。

ちょうどアドレス0000Hで停止しました。
Program Loaderを実行するために、パネルスイッチに7F80Hを設定して、READスイッチを押しました。

アドレス7F80HがアドレスLEDに表示されて、データバスLEDには7F80Hのメモリ内容が表示されました。
RUNスイッチを押しました。

Program Loaderが実行され、USB経由でWindowsパソコンから送られてくるプログラムデータをPIC18F14K50から受け取る態勢でループしています。
プログラムは7F85Hから7F9FHの間でループしていますから、アドレスLEDには7F9FHが明るく表示され、A5、A6のビットも薄く点灯しています。
ここで前回説明しましたように、パソコン側からHIDWRを実行します。
HIDWRは瞬時に実行を終了します。
送信されたプログラムはメモリにロードされたはずですから、それを確かめてみます。
STOPスイッチを押しました。

アドレス7F9EHで停止しました。
アドレススイッチに8000Hを設定してREADを押しました。

8000Hのメモリの値がデータバスLEDに表示されました。
31Hと表示されています。
●Program Loaderでロードしたプログラム
アドレス8000H番地にロードしたプログラムのリストです。
2013/1/27 21:21 music4b2.txt
END=80EC
;;; music 09/10/9 10/10 10/12 10/15
;;;
;;;MUSIC from MYCPU80 MUSIC
;10/6/4 6/5 6/15 for ND80Z3 CLK=6MHz
;7/20 9/24
;12/11/27 for E-80 clock?
;13/1/27
;
ORG $8000
;
SPEED=$EFFF
REPEAT=$EFFE
MAE=$EFFD
DATA=$8100
;
8000 310000 START:LD SP,$0000
8003 3E88 LD A,88;A=out,B=out,CH=in,CL=out
8005 D3FB OUT (FB),A
8007 3E03 LD A,03
8009 32FFEF LD (SPEED),A
800C 210081 LD HL,DATA
800F 3AFDEF SND1:LD A,(MAE)
8012 4F LD C,A
8013 7E SND11:LD A,(HL)
8014 FEFF CP FF
8016 CA0080 JP Z,START
8019 B7 OR A
801A CA7680 JP Z,YASUMI
801D FE1E CP 1E
801F DA2780 JP C,SND12
8022 23 INC HL
8023 23 INC HL
8024 C31380 JP SND11
8027 F5 SND12:PUSH AF
8028 B9 CP C
8029 CC9480 CALL Z,T5MS
802C 23 INC HL
802D 46 LD B,(HL) ;NAGASA
802E 23 INC HL
802F F1 POP AF
8030 E5 PUSH HL
8031 21B180 LD HL,SNDTBL
8034 87 ADD A,A
8035 5F LD E,A
8036 1600 LD D,00
8038 19 ADD HL,DE
8039 56 LD D,(HL)
803A 23 INC HL
803B 5E LD E,(HL);KURIKAESI KAISU
803C 3AFFEF LD A,(SPEED)
803F 6F LD L,A
8040 60 LD H,B
8041 7B LD A,E
8042 32FEEF LD (REPEAT),A
;
8045 4A SNDS1:LD C,D
8046 3E03 LD A,03 ;sp out=H (pc1=H)
8048 D3FB OUT (FB),A
804A E5 SNDS2:PUSH HL ;DUMMY CLK=11
804B E5 PUSH HL ;DUMMY CLK=11
804C E1 POP HL ;DUMMY CLK=10
804D E1 POP HL ;CLK=10
804E 00 NOP ;CLK=4
804F 0D DEC C ;CLK=4
8050 C24A80 JP NZ,SNDS2 ;CLK=10
8053 4A LD C,D
8054 3E02 LD A,02 ;sp out=L (pc1=L)
8056 D3FB OUT (FB),A
8058 E5 SNDS3:PUSH HL ;DUMMY CLK=11
8059 E5 PUSH HL ;DUMMY CLK=11
805A E1 POP HL ;DUMMY CLK=10
805B E1 POP HL ;CLK=10
805C 00 NOP ;CLK=4
805D 0D DEC C ;CLK=4
805E C25880 JP NZ,SNDS3 ;CLK=10
8061 1D DEC E
8062 C24580 JP NZ,SNDS1
8065 3AFEEF LD A,(REPEAT)
8068 5F LD E,A
8069 05 DEC B
806A C24580 JP NZ,SNDS1
806D 44 LD B,H
806E 2D DEC L
806F C24580 JP NZ,SNDS1
8072 E1 POP HL
8073 C30F80 JP SND1
;;;
8076 23 YASUMI:INC HL
8077 46 LD B,(HL) ;NAGASA
8078 23 INC HL
8079 E5 PUSH HL
807A 3AFFEF LD A,(SPEED)
807D 6F LD L,A
807E 60 LD H,B
807F CD9980 YASUMI2:CALL T40MS
8082 05 DEC B
8083 C27F80 JP NZ,YASUMI2
8086 44 LD B,H
8087 2D DEC L
8088 C27F80 JP NZ,YASUMI2
808B E1 POP HL
808C C30F80 JP SND1
;;;
808F 23 ERROR:INC HL
8090 23 INC HL
8091 C30F80 JP SND1
;
8094 0E05 T5MS:LD C,05
8096 C39B80 JP T40MS2
;
8099 0E28 T40MS:LD C,28 ;=40
809B CDA380 T40MS2:CALL T1MS
809E 0D DEC C
809F C29B80 JP NZ,T40MS2
80A2 C9 RET
;
80A3 F5 T1MS:PUSH AF ;CK=11....11+7+10+10+10=48/6(8microsec)
80A4 3E5F LD A,5F ;=99 CK=7
80A6 E5 T1MS2:PUSH HL;DUMMY CLK=11-----------------
80A7 E5 PUSH HL;DUMMY CLK=11 |
80A8 E1 POP HL;DUMMY CLK=10 |CK=60/6(10microsec)
80A9 E1 POP HL;DUMMY CLK=10 |
80AA 00 NOP ;CLK=4 |
80AB 3D DEC A ;CK=4 |10x99=990microsec
80AC C2A680 JP NZ,T1MS2 ;CK=10---
80AF F1 POP AF ;CK=10
80B0 C9 RET ;CK=10 + CALL CK=10
;
; SOUND TABLE
80B1 00 SNDTBL:DB 00;DUMMY
80B2 00 DB 00;DUMMY
80B3 7F DB 7F;so4
80B4 10 DB 10
80B5 77 DB 77;so#4
80B6 11 DB 11
80B7 71 DB 71;ra4
80B8 12 DB 12
80B9 6A DB 6A;ra#4
80BA 13 DB 13
80BB 64 DB 64;si4
80BC 14 DB 14
80BD 5F DB 5F;do5
80BE 15 DB 15
80BF 59 DB 59;do#5
80C0 16 DB 16
80C1 54 DB 54;re5
80C2 18 DB 18
80C3 4F DB 4F;re#5
80C4 19 DB 19
80C5 4B DB 4B;mi5
80C6 1A DB 1A
80C7 47 DB 47;fa5
80C8 1C DB 1C
80C9 43 DB 43;fa#5
80CA 1E DB 1E
80CB 3F DB 3F;so5
80CC 1F DB 1F
80CD 3B DB 3B;so#5
80CE 21 DB 21
80CF 38 DB 38;ra5
80D0 23 DB 23
80D1 35 DB 35;ra#5
80D2 25 DB 25
80D3 32 DB 32;si5
80D4 27 DB 27
80D5 2F DB 2F;do6
80D6 2A DB 2A
80D7 2C DB 2C;do#6
80D8 2C DB 2C
80D9 2A DB 2A;re6
80DA 2F DB 2F
80DB 27 DB 27;re#6
80DC 32 DB 32
80DD 25 DB 25;mi6
80DE 35 DB 35
80DF 23 DB 23;fa6
80E0 38 DB 38
80E1 21 DB 21;fa#6
80E2 3B DB 3B
80E3 1F DB 1F;so6
80E4 3F DB 3F;
80E5 1D DB 1D;so#6
80E6 43 DB 43;
80E7 1B DB 1B;ra6
80E8 47 DB 47;
80E9 1A DB 1A;ra#6
80EA 4A DB 4A;
80EB 18 DB 18;si6
80EC 50 DB 50;
;END
DATA =8100 ERROR =808F MAE =EFFD
REPEAT =EFFE SND1 =800F SND11 =8013
SND12 =8027 SNDS1 =8045 SNDS2 =804A
SNDS3 =8058 SNDTBL =80B1 SPEED =EFFF
START =8000 T1MS =80A3 T1MS2 =80A6
T40MS =8099 T40MS2 =809B T5MS =8094
YASUMI =8076 YASUMI2 =807F
|