MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第32回]
●MYCPU80命令回路テストプログラム
前回説明しましたように修理依頼品のMYCPU80がやっと修理完了したと思い、念のためにと思って移植作業途中のZB3BASICをロードして実行しましたところ、関数演算の平方根や三角関数でまさかのエラーが発生してしまいました。
並みの処理プログラムではありません。
なんたって浮動小数点演算の、しかも平方根や三角関数(!)なのですから、これは弱りました。
どう攻めていったらよいものやら。
しばし考え込んでしまいました。
ええ。
平方根だって三角関数だって全部自分で書いたプログラムですから、そりゃあ解析できないわけはありませんです。
ちゃんと覚えておれば、ですけれど。
そんなもの覚えているわけはないです。
ND80Z3.5(ND80ZV)用のZB3BASICシステムはまだ4年ほど前に書いたものですけれど、そのもとになったプログラムはもう30年近くも前に書いたプログラムなんですから。
もう露ほども記憶に残っておりませぬ。
何かよい方法はないものかとMYCPU80の書類の山をひっかきまわしていましたら、表に「MYCPU80テストプログラム」と書いた紙袋が見つかりました。
なんじゃこりゃ。
中を見てみましたら、MYCPU80の命令回路ごとにテストをするテストプログラムのリストが出てきました。
おお。
こんなものいいものを書いておったのだ。
完全に忘れておりました。
過去記事を調べてみましたら。
「CPUをつくろう」[第256回]以降でTEST1からTEST12までのプログラムを作って解説しておりました。
これですよ、これ。
これを使えば、どの命令回路でエラーになっているのかがたちどころにわかってしまうではないか。
そうそう。
修理が完全に完了しているかどうかを確認するためにもこれは全部実行しておくにこしたことはありません。
さっそくTEST1から順に全部テストをしてみることにしました。
ただ、「CPUをつくろう」[第256回]以降で説明しておりますテストプログラムはTK−80モニタ上で実行するように書いたものですが、せっかく不完全ながらもZB3BASICがMYCPU80上で動くところまで出来ているのですから、ZB3BASICシステム上で動作するプログラムにしたほうがなにかと便利です。
ちゃんとログだってとれますから、そのほうがはるかに便利です。
そこでTEST1からTEST12までをそのようにするためにそれぞれ一部ですけれど書き換えました。
下はそのように書き換えたTEST1のリストです。
2014/8/30 11:34 test1b.txt END=80F1 ;;; MYCPU80 TEST1 ;;; MVI r,MOV r,r' ;;; 09/06/09 6/11 6/12 ;14/8/30 ; ORG $8000 ; STCK=$A000 ERBF=$B000 REENT=$1033 PA=$F440 ; 8000 3100A0 LXI SP,STCK 8003 0E00 MVI C,00 8005 C5 PUSH B 8006 F1 POP PSW;CLEAR FLAG REGISTER ; ; MVI 8007 CDAB80 CALL MVI 800A C5 PUSH B 800B D5 PUSH D 800C E5 PUSH H 800D F5 PUSH PSW ;MOV r,r 800E 40 MOV B,B 800F 49 MOV C,C 8010 52 MOV D,D 8011 5B MOV E,E 8012 64 MOV H,H 8013 6D MOV L,L 8014 7F MOV A,A 8015 C5 PUSH B 8016 D5 PUSH D 8017 E5 PUSH H 8018 F5 PUSH PSW ;MOV1 8019 41 MOV B,C 801A 4A MOV C,D 801B 53 MOV D,E 801C 5C MOV E,H 801D 65 MOV H,L 801E 6F MOV L,A 801F 78 MOV A,B;=C 8020 C5 PUSH B 8021 D5 PUSH D 8022 E5 PUSH H 8023 F5 PUSH PSW ;MOV2 8024 CDAB80 CALL MVI 8027 7D MOV A,L 8028 6C MOV L,H 8029 63 MOV H,E 802A 5A MOV E,D 802B 51 MOV D,C 802C 48 MOV C,B 802D 47 MOV B,A;=L 802E C5 PUSH B 802F D5 PUSH D 8030 E5 PUSH H 8031 F5 PUSH PSW ;MOV3 8032 CDAB80 CALL MVI 8035 68 MOV L,B 8036 42 MOV B,D 8037 54 MOV D,H 8038 67 MOV H,A 8039 79 MOV A,C 803A 4B MOV C,E 803B 5D MOV E,L;=B 803C C5 PUSH B 803D D5 PUSH D 803E E5 PUSH H 803F F5 PUSH PSW ;MOV4 8040 CDAB80 CALL MVI 8043 5F MOV E,A 8044 7A MOV A,D 8045 55 MOV D,L 8046 69 MOV L,C 8047 4C MOV C,H 8048 60 MOV H,B 8049 43 MOV B,E;=A 804A C5 PUSH B 804B D5 PUSH D 804C E5 PUSH H 804D F5 PUSH PSW ;MOV5 804E CDAB80 CALL MVI 8051 61 MOV H,C 8052 4D MOV C,L 8053 6A MOV L,D 8054 57 MOV D,A 8055 7B MOV A,E 8056 58 MOV E,B 8057 44 MOV B,H;=C 8058 C5 PUSH B 8059 D5 PUSH D 805A E5 PUSH H 805B F5 PUSH PSW ;MOV6 805C CDAB80 CALL MVI 805F 50 MOV D,B 8060 45 MOV B,L 8061 6B MOV L,E 8062 59 MOV E,C 8063 4F MOV C,A 8064 7C MOV A,H 8065 62 MOV H,D;=B 8066 C5 PUSH B 8067 D5 PUSH D 8068 E5 PUSH H 8069 F5 PUSH PSW ;;; ; CHECK MVI 806A 3100B0 LXI SP,ERBF 806D 2100A0 LXI H,STCK 8070 2B DCX H 8071 11C180 LXI D,TBL1END 8074 D5 PUSH D 8075 0608 MVI B,08 8077 1A LOOP0:LDAX D 8078 BE CMP M 8079 CA7D80 JZ LOOP0_2 807C E5 PUSH H;ERR 807D 2B LOOP0_2:DCX H 807E 1B DCX D 807F 05 DCR B 8080 C27780 JNZ LOOP0 8083 D1 POP D ;CHECK MOV 8084 0E07 MVI C,07 8086 0608 LOOP1:MVI B,08 8088 1A LOOP2:LDAX D 8089 BE CMP M 808A CA8E80 JZ LOOP2_2 808D E5 PUSH H;ERR 808E 2B LOOP2_2:DCX H 808F 1B DCX D 8090 05 DCR B 8091 C28880 JNZ LOOP2 8094 E5 PUSH H 8095 211000 LXI H,$0010 8098 19 DAD D 8099 EB XCHG 809A E1 POP H 809B 0D DCR C 809C C28680 JNZ LOOP1 809F E5 PUSH H 80A0 210000 LXI H,$0000 80A3 E5 PUSH H 80A4 39 DAD SP 80A5 2240F4 SHLD PA 80A8 C33310 JMP REENT ; ;SUBROUTINE 80AB 0612 MVI:MVI B,12 80AD 0E34 MVI C,34 80AF 1656 MVI D,56 80B1 1E78 MVI E,78 80B3 269A MVI H,9A 80B5 2EBC MVI L,BC 80B7 3EDE MVI A,DE 80B9 C9 RET ; ;COMPARE DATA TABLE ;MVI 80BA 00 TBL1:DB 00;F 80BB DE DB DE;A 80BC BC DB BC;L 80BD 9A DB 9A;H 80BE 78 DB 78;E 80BF 56 DB 56;D 80C0 34 DB 34;C 80C1 12 TBL1END:DB 12;B ;MOV1 80C2 00 DB 00;F 80C3 34 DB 34;A 80C4 DE DB DE;L 80C5 BC DB BC;H 80C6 9A DB 9A;E 80C7 78 DB 78;D 80C8 56 DB 56;C 80C9 34 DB 34;B ;MOV2 80CA 00 DB 00;F 80CB BC DB BC;A 80CC 9A DB 9A;L 80CD 78 DB 78;H 80CE 56 DB 56;E 80CF 34 DB 34;D 80D0 12 DB 12;C 80D1 BC DB BC;B; ;MOV3 80D2 00 DB 00;F 80D3 34 DB 34;A 80D4 12 DB 12;L 80D5 DE DB DE;H 80D6 12 DB 12;E 80D7 9A DB 9A;D 80D8 78 DB 78;C 80D9 56 DB 56;B ;MOV4 80DA 00 DB 00;F 80DB 56 DB 56;A 80DC 34 DB 34;L 80DD 12 DB 12;H 80DE DE DB DE;E 80DF BC DB BC;D 80E0 9A DB 9A;C 80E1 DE DB DE;B; ;MOV5 80E2 00 DB 00;F 80E3 78 DB 78;A 80E4 56 DB 56;L 80E5 34 DB 34;H 80E6 12 DB 12;E 80E7 DE DB DE;D 80E8 BC DB BC;C 80E9 34 DB 34;B ;MOV6 80EA 00 DB 00;F 80EB 9A DB 9A;A 80EC 78 DB 78;L 80ED 12 DB 12;H 80EE 34 DB 34;E 80EF 12 DB 12;D 80F0 DE DB DE;C 80F1 BC DB BC;B; ; ERBF =B000 LOOP0 =8077 LOOP0_2 =807D LOOP1 =8086 LOOP2 =8088 LOOP2_2 =808E MVI =80AB PA =F440 REENT =1033 STCK =A000 TBL1 =80BA TBL1END =80C1 |
logfile nd80zlog\08301128.txt open zb3dos3m 2014.3.31 by Chunichidenko MYCPU80に接続しました *** nd80z3 basic **** >/ld test1b.bin,8000 loading TEST1B.BIN ...00f2(242)bytes loaded,from 8000 to 80F1 >jp 8000 >p.hex$(a%) AFFC >dm aff0,afff AFF0 00 0B 08 28 FF FF FF FF-00 00 00 00 00 00 BF 9F ...(..........ソ. >/ld test2b.bin,8000 loading TEST2B.BIN ...0089(137)bytes loaded,from 8000 to 8088 >jp 8000 >p.hex$(a%) AFFA >dm aff0,afff AFF0 00 0B 08 28 FF FF FF FF-00 00 00 00 EF 9F FB 9F ...(............ >dm 9ff0,9fff 9FF0 00 12 DE BC 9A 78 56 34-00 DE FA 9F 78 56 34 12 ..゙シ.xV4.゙..xV4. >dm 8070,808f 8070 1E 78 26 9A 2E BC 3E DE-C9 00 DE FA 4F 78 56 34 .x&..シ>゙ノ.゙.OxV4 8080 12 00 12 DE BC 9A 78 56-34 BE CA 8E 80 E5 2B 1B ...゙シ.xV4セハ...+. >/ld test3b.bin,8000 loading TEST3B.BIN ...00ec(236)bytes loaded,from 8000 to 80EB >jp 8000 >p.hex$(a%) AFFC >/ld test4b.bin,8000 loading TEST4B.BIN ...00d9(217)bytes loaded,from 8000 to 80D8 >jp 8000 >p.hex$(a%) AFFC >/ld test5b.bin,8000 loading TEST5B.BIN ...00dc(220)bytes loaded,from 8000 to 80DB >jp 8000 >p.hex$(a%) AFFC >/ld test6b.bin,8000 loading TEST6B.BIN ...0128(296)bytes loaded,from 8000 to 8127 >jp 8000 >p.hex$(a%) AFFC >/ld test7b.bin,8000 loading TEST7B.BIN ...012d(301)bytes loaded,from 8000 to 812C >jp 8000 >p.hex$(a%) AFFC >/ld test8b.bin,8000 loading TEST8B.BIN ...0093(147)bytes loaded,from 8000 to 8092 >jp 8000 >p.hex$(a%) AFFC >/ld test9b.bin,8000 loading TEST9B.BIN ...01fd(509)bytes loaded,from 8000 to 81FC >jp 8000 >p.hex$(a%) AF9C >dm af90,afff AF90 D6 93 20 61 FF FF FF 7F-00 02 00 08 00 00 7F 9F ヨ. a.......... AFA0 91 9F 93 9F 95 9F 97 9F-99 9F 9B 9F 9D 9F 9F 9F ................ AFB0 A1 9F A3 9F A5 9F A7 9F-A9 9F AB 9F AD 9F AF 9F 。.」.・.ァ.ゥ.ォ.ュ.ッ. AFC0 B1 9F B3 9F B5 9F B7 9F-B9 9F BB 9F BD 9F BF 9F ア.ウ.オ.キ.ケ.サ.ス.ソ. AFD0 D1 9F D3 9F D5 9F D7 9F-D9 9F DB 9F DD 9F DF 9F ム.モ.ユ.ラ.ル.ロ.ン.゚. AFE0 E1 9F E3 9F E5 9F E7 9F-E9 9F EB 9F ED 9F EF 9F ................ AFF0 F1 9F F3 9F F5 9F F7 9F-F9 9F FB 9F FD 9F FF 9F ................ >dm 8170,81ff 8170 13 D5 E9 E1 13 D5 E5 E0-E1 D1 13 D5 E9 0C 00 0A .ユ...ユ...ム.ユ.... 8180 00 09 00 08 00 06 00 04-00 03 00 01 00 E3 41 E0 ..............A. 8190 41 DD 41 DA 41 D7 41 D1-41 CB 41 C8 41 C5 41 BF AンAレAラAムAヒAネAナAソ 81A0 41 BC 41 B9 41 B3 41 B0-41 AD 41 AA 41 A7 41 A1 AシAケAウAーAュAェAァA。 81B0 41 9B 41 98 41 95 41 8F-41 8C 41 89 41 0C 00 0B A.A.A.A.A.A.A... 81C0 00 09 00 07 00 06 00 05-00 03 00 02 00 67 41 64 .............gAd 81D0 41 5E 41 58 41 55 41 52-41 4F 41 4C 41 46 41 43 A^AXAUARAOALAFAC 81E0 41 40 41 3A 41 37 41 34-41 2E 41 28 41 25 41 22 A@A:A7A4A.A(A%A" 81F0 41 1F 41 1C 41 16 41 13-41 10 41 0A 41 00 00 00 A.A.A.A.A.A.A... >dm 9f70,9fff 9F70 AD F9 EE 6A FF FF FF FF-FF FF FF FF EA CF 01 81 ュ..j.........マ.. 9F80 0C 00 0A 00 09 00 08 00-06 00 04 00 03 00 01 00 ................ 9F90 E3 80 E0 80 DD 80 DA 80-D7 80 D1 80 CB 80 C8 80 ....ン.レ.ラ.ム.ヒ.ネ. 9FA0 C5 80 BF 80 BC 80 B9 80-B3 80 B0 80 AD 80 AA 80 ナ.ソ.シ.ケ.ウ.ー.ュ.ェ. 9FB0 A7 80 A1 80 9B 80 98 80-95 80 8F 80 8C 80 89 80 ァ.。............. 9FC0 0C 00 0B 00 09 00 07 00-06 00 05 00 03 00 02 00 ................ 9FD0 67 80 64 80 5E 80 58 80-55 80 52 80 4F 80 4C 80 g.d.^.X.U.R.O.L. 9FE0 46 80 43 80 40 80 3A 80-37 80 34 80 2E 80 28 80 F.C.@.:.7.4...(. 9FF0 25 80 22 80 1F 80 1C 80-16 80 13 80 10 80 0A 80 %."............. >/ld test9b.bin,8000 loading TEST9B.BIN ...01fd(509)bytes loaded,from 8000 to 81FC >jp 8000 >p.hex$(a%) AFFC >/ld test10b.bin,8000 loading TEST10B.BIN ...008e(142)bytes loaded,from 8000 to 808D >jp 8000 >p.hex$(a%) AFF4 >dm aff0,afff AFF0 F1 9F F3 9F 00 00 D7 9F-DD 9F E3 9F E9 9F F1 9F ......ラ.ン....... >dm 9fd0,9fff 9FD0 67 80 64 80 5E 80 58 80-44 55 44 00 F3 9F 00 EF g.d.^.X.DUD..... 9FE0 78 56 F3 9F 00 EF 79 56-F4 9F 01 EF 78 56 00 EF xV....yV....xV.. 9FF0 F3 9F 00 EF 68 C0 01 EF-34 E0 10 EF BC 89 11 EF ....hタ..4...シ... >dm 8060,808f 8060 22 40 F4 C3 33 10 44 55-44 00 F3 4F 00 EF 78 56 "@.テ3.DUD..O..xV 8070 F3 4F 00 EF 79 56 F4 4F-01 EF 78 56 00 EF F3 4F .O..yV.O..xV...O 8080 00 EF 68 C0 01 EF 34 E0-10 EF BC 89 11 EF 6F FF ..hタ..4...シ...o. >/ld test11b.bin,8000 loading TEST11B.BIN ...006a(106)bytes loaded,from 8000 to 8069 >jp 8000 >p.hex$(a%) AFFC >/ld test12b.bin,8000 loading TEST12B.BIN ...0091(145)bytes loaded,from 8000 to 8090 >jp 8000 >p.hex$(a%) 9FFE >dm 9ff0,9fff 9FF0 34 12 01 34 00 34 01 34-94 00 95 00 44 00 00 00 4..4.4.4....D... >dm 9ff0,a00f 9FF0 34 12 01 34 00 34 01 34-94 00 95 00 44 00 00 00 4..4.4.4....D... A000 12 00 BA 13 78 56 22 04-C2 E5 90 CC 00 01 00 00 ..コ.xV".ツ..フ.... >/ld test122b.bin,8000 loading TEST122B.BIN ...0098(152)bytes loaded,from 8000 to 8097 >jp 8000 >p.hex$(a%) 9FFE >dm 9ff0,a00f 9FF0 34 12 01 34 00 34 01 34-94 00 95 00 44 00 00 00 4..4.4.4....D... A000 12 00 BA 13 78 56 22 04-C2 E5 90 CC 00 01 00 00 ..コ.xV".ツ..フ.... >/exit リモート接続を終了しました logfile closed at Sat Aug 30 20:44:43 2014 |
logfile nd80zlog\08310842.txt open zb3dos3m 2014.3.31 by Chunichidenko MYCPU80に接続しました *** nd80z3 basic **** >/ld test2b.bin,8000 loading TEST2B.BIN ...0089(137)bytes loaded,from 8000 to 8088 >jp 8000 >p.hex$(a%) AFFC >/ld test10b.bin,8000 loading TEST10B.BIN ...008e(142)bytes loaded,from 8000 to 808D >jp 8000 >p.hex$(a%) AFFC >/load sqrtest.txt 10 FOR A=0 TO 10 20 PRINT "a=";A,"sqr(a)=";SQR(A) 30 NEXT A 40 PRINT "end" data end >r. a= 0 sqr(a)= 0 a= 1 sqr(a)= 1 a= 2 sqr(a)= 1 a= 3 sqr(a)= 2 a= 4 sqr(a)= 2 a= 5 sqr(a)= 2 a= 6 sqr(a)= 2 a= 7 sqr(a)= 2 a= 8 sqr(a)= 2 a= 9 sqr(a)= 2 a= 10 sqr(a)= 4 end >/exit リモート接続を終了しました logfile closed at Sun Aug 31 09:15:13 2014 |