Z80CPUを用いてステッピングモータを動かすアセンブラプログラムに解説をお願いします(長いです)
スイッチ12でスタート、スイッチ11でストップするようにステッピングモータを回転させるプログラムです。
1つ1つの命令は命令表を見れば何とか分るのですが、プログラムのしくみというか、何をしているかがよく分りません。
(うまく言えなくてごめんなさい)
読みにくくて申し訳ないのですが、自分で理解するには難しいのでわかる方にできるだけ丁寧な解説をつけてほしいです。
よろしくお願いします。
(初期設定)
BEGIN:
DI
LD SP,STACK
MAIN:
LD A,0FH
OUT (PIOAC),A
LD A,0CFH
OUT (PIOBC),A
LD A,0F0H
OUT (PIOBC),A
XOR A
LD (SCALE1),A
LD (STEP_C),A
LD (STBCNT),A
LD (TOTAL_P),A
LD (STROBE),A
OUT (PIOBD),A
LD A,83H
OUT (CMDPT),A
CALL CTCSET
EI
READIN:
LD HL,INBUF
LD A,2
LD B,0
LD C,A
ADD HL,BC
MAINLP:
LD A,(HL)
BIT 5,A
JP NZ,STOP
LD A,01H
LD (TOTAL_P),A
STOP:
LD A,(HL)
BIT 4,A
JP NZ,MAINLP
XOR A
LD (TOTAL_P),A
JP MAINLP
VINT0:
EI
RET
VINTI:
JP INT1
VINT2:
EI
RETI
VINT3:
EI
RETI
ENABLE:
EI
RETI
INT1:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
CALL ENABLE
LD A,(SCALE1)
INC A
LD (SCALE1),A
CP COUNT
JP NZ,INT50
XOR A
LD (SCALE1),A
INT16M:
CALL STEP_M
INT50:
CALL IN_SW
LD A,(STBCNT)
INC A
LD (STBCNT),A
CP 6
JP NZ,SKIP
XOR A
SKIP:
LD (STBCNT),A
OUT (PIOBD),A
RTINT1:
POP AF
POP BC
POP DE
POP HL
RET
IN_SW:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
LD HL,INBUF
LD A,(STBCNT)
LD C,A
LD B,0
ADD HL,BC
IN A,(PIOBD)
LD (HL),A
POP AF
POP BC
POP DE
POP HL
RET
CTCSET:
IM 2
LD HL,VECT0
LD A,H
LD I,A
LD A,L
OUT (CTCADR),A
LD HL,CTCTBL
LD B,4
LD C,CTCADR
CTCST1:
LD A,(HL)
INC HL
OUT (C),A
LD A,(HL)
INC HL
OUT (C),A
INC C
DJNZ CTCST1
RET
STEP_M:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
LD A,(TOTAL_P)
BIT 0,A
JP Z,JPPOP
LD A,(STEP_C)
INC A
AND MASK
LD (STEP_C),A
LD E,A
LD D,0
LD HL,PHASE
ADD HL,DE
LD A,(HL)
OUT (PORTC),A
JPPOP:
POP AF
POP BC
POP DE
POP HL
RET
ORG 8100H
(以下データ)
END
何か質問等があれば補足します。
お礼
ごめんなさい。お礼が大変遅くなってしまいました。 以前、PX-7のオーナーだったのですが、知人に譲ってしまい、今になって欲しくなってしまいました。 MSX2テクニカルハンドブック、アスキー発行のPX-7関連の本も持っているのですが、実家の物置なので・・・盆に帰って発掘しようと思います。似非プロジェクトを見ていたら、自分でも無性に何か作りたくなりました(^O^)。ありがとうございました。