2018.10.15
前へ
次へ
ホームページトップへ戻る


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第98回]



●電子オルガンプログラム

このところAM188版の説明書の作成作業に取り組んでいます。
86モニタプログラム(TK80的モニタプログラム)の取扱説明書がもうじき出来上がります。
本日はその中に記載する予定のサンプルプログラム、電子オルガンプログラムを作成しました。
電子オルガンプログラムはND80Z3.5のTK80モニタプログラム操作説明書に記載しています。
それは8080ニーモニックで書いて8080アセンブラでマシン語プログラムを作成したものです。
TK80モニタモードで動作します。
今回作成した8086版は8080版と同じ動作をします。
ニーモニックや命令コードはもちろん8080とは異なりますが、プログラムのつくりは8080版と同じですので、8080版のプログラムリストと比べてみていただくことで、8086のマシン語プログラムを理解する上での助けになると思います。
TK80モニタと同じシステムサブルーチン(KEY=0247)をCALLしていますが、前回説明しましたアドレスを直接指定してのCALLになっているところにも注目してください。
ただし8080と違ってマシン語コードでは相対アドレスになっています(相対アドレスについては前回を参照してください)。

2018/10/15  11:51  86sound.LST
[00001]                     ;;; sound for am188 clock=20MHz
[00002]                     ;from sound6
[00003]                     ;;; 18/10/15
[00004]                     ;;;
[00005]                         ORG=8000
[00006]                     ;
[00007]                         KEY=0247
[00008]                     ;
[00009] 8000  E84482        SND:CALL KEY <0247>
[00010] 8003  FEC0              INC AL
[00011] 8005  74F9              JZ SND <8000>
[00012] 8007  FEC8              DEC AL
[00013] 8009  E80300            CALL SNDSB <800F>
[00014] 800C  EBF290            JMP SND <8000>
[00015]                     ;
[00016] 800F  50            SNDSB:PUSH AX
[00017] 8010  BB3F80            MOV BX,SNDTBL
[00018] 8013  02D8              ADD BL,AL
[00019] 8015  8A2F              MOV CH,[BX]
[00020] 8017  B21A              MOV DL,1A
[00021] 8019  8AF5          SNDS1:MOV DH,CH
[00022] 801B  B0EF              MOV AL,EF;sp out=H,DMAoff
[00023] 801D  E698              OUT 98,AL
[00024] 801F  B108          SNDS2:MOV CL,08
[00025] 8021  FEC9          SNDS22:DEC CL
[00026] 8023  75FC              JNZ SNDS22 <8021>
[00027] 8025  FECE              DEC DH
[00028] 8027  75F6              JNZ SNDS2 <801F>
[00029] 8029  8AF5              MOV DH,CH
[00030] 802B  B0CF              MOV AL,CF;sp out=L,DMAoff
[00031] 802D  E698              OUT 98,AL
[00032] 802F  B108          SNDS3:MOV CL,08
[00033] 8031  FEC9          SNDS32:DEC CL
[00034] 8033  75FC              JNZ SNDS32 <8031>
[00035] 8035  FECE              DEC DH
[00036] 8037  75F6              JNZ SNDS3 <802F>
[00037] 8039  FECA              DEC DL
[00038] 803B  75DC              JNZ SNDS1 <8019>
[00039] 803D  58                POP AX
[00040] 803E  C3                RET
[00041]                     ;
[00042]                     ; SOUND TABLE
[00043] 803F  7F            SNDTBL:DB 7F;so4
[00044] 8040  77                DB 77;so#4
[00045] 8041  71                DB 71;ra4
[00046] 8042  6A                DB 6A;ra#4
[00047] 8043  5F                DB 5F;do5
[00048] 8044  59                DB 59;do#5
[00049] 8045  54                DB 54;re5
[00050] 8046  4F                DB 4F;re#5
[00051] 8047  47                DB 47;fa5
[00052] 8048  43                DB 43;fa#5
[00053] 8049  3F                DB 3F;so5
[00054] 804A  3B                DB 3B;so#5
[00055] 804B  35                DB 35;ra#5
[00056] 804C  32                DB 32;si5
[00057] 804D  2F                DB 2F;do6
[00058] 804E  2C                DB 2C;do#6
[00059] 804F  25                DB 25;mi6
[00060] 8050  27                DB 27;re#6
[00061] 8051  2A                DB 2A;re6
[00062] 8052  4B                DB 4B;mi5
[00063] 8053  38                DB 38;ra5
[00064] 8054  64                DB 64;si4
[00065] 8055  23                DB 23;fa6
[00066] 8056  21                DB 21;fa#6
[00067]                     ;END
KEY          =0247  SND          =8000  SNDS1        =8019  SNDS2        =801F  
SNDS22       =8021  SNDS3        =802F  SNDS32       =8031  SNDSB        =800F  
SNDTBL       =803F  

SNDS2とSNDS3のところで10μsec幅のH、Lパルスを出力しているのですが(1周期は20μsec)、ここは計算ではうまく求まりません。
そのことについては[第57回]を参照願います。
ここは結局出力される音の高さを確認しながらカットアンドトライで繰り返しの回数を求めました。
アバウトですから正確な音の高さからは多少ずれていると思います。
妻に言わせると「微妙にずれているみたい」なのだそうですが、私はそんな耳は持っていませんので、ちゃんとド、レ、ミに聞こえます。

16ビットマイコンボードの製作[第98回]
2018.10.15upload

前へ
次へ
ホームページトップへ戻る