[ บทความ : เรียนรู้ z80 ] ตอนที่ 13 เรื่อง คำสั่งติดต่อกับ I/O (เพิ่มเติม) |
เรียนรู้ Z80 ตอนที่ 13
คำสั่งติดต่อกับ I/O (เพิ่มเติม)
จากบทความก่อนหน้านี้ [GO] ผมมีตัวอย่างสำหรับบอร์ด ET-BOARD V4 และ ET-BOARD V6 ไปแล้ว ... แต่เจ้า ET-BOARD V3.5 ดันเสีย แต่ตอนนี้ผมซ่อมแซมมันเรียบร้อยแล้ว ผมเลยนำตัวอย่างสำหรับ ET-BOARD V3.5 มาแสดงเป็นตัวอย่างพร้อมทั้ง Flowchart ... เอาล่ะ มาดู source code กันก่อนครับ
; ; Filename : IO1v3.asz ; Author : Supachai Budsaratij (raek@se-ed.net) ; Date : 04/10/2001 ; Hardware : ET-Board V3.5 ; INCL "etv35.inz" ; Include header for ET-V3.5 P_SEGM EQU S8255_PB P_DIGIT EQU S8255_PC P_LEDFLAG EQU 06h ORG UMEM_ORG ; Start at UMEM_ORG main LD SP,XMEM_END ; Set Stack Pointer ;---- Program start here LD D,0 LD BC,1 ; --- Move light loop LD A,P_LEDFLAG ; Select LED FLAG device OUT (P_DIGIT),A ; LD A,D ; Send the data to LED OUT (P_SEGM),A ; ;--- Delay LD HL,8000h delay SBC HL,BC JP NZ,delay ;--- Swap the pattern of the LED. LD A,0FFh SUB D LD D,A ;--- Do again JP loop ENDผลของการทำงานเป็นดังนี้ครับ (ถ่ายด้วย USB Camera ของ Intel ภาพก็ OK มากกว่าเจ้า CCD Color ที่ผมใช้ในบทความก่อนๆ เพราะมันสามารถปรับ Focus พร้อมทั้ง ปรับค่าความสว่างได้ด้วย ... แต่ราคาแพงกว่าตั้ง 2 เท่าแน่ะ ... )
,จากโปรแกรมด้านบน ผมเพิ่มบรรทัด พิเศษจากตัวอย่างก่อนหน้านี้อีก 1 บรรทัด นั่นคือ
LD SP, XMEM_ENDจำได้ไหมครับว่า ใช้ทำอะไร ... คำตอบคือ เอาไว้กำหนดค่าเริ่มต้นของ Stack ที่ผมกำหนดค่าของ SP ใหม่ ก็เพื่อ ให้มีพื้นที่สำหรับ stack เพิ่มขึ้น (ถ้าไม่กำหนด มันจะใช้ค่าตามที่กำหนดโดย monitor program) ส่วนการทำงานก็เหมือนเดิม ... มาดู Flowchart กันดีกว่าครับ ...
ตอนนี้คำสั่งเกี่ยวกับ I/O ก็จบสมบูรณ์แล้วครับ ... ต่อไปก็จะเป็นเรื่องของ คำสั่งเกี่ยวกับบิต , คำสั่งทางด้าน Logic (ตรรกศาสตร์), และพวกตกค้าง (อีกเยอะเหมือนกันครับ :D) ... ตอนนี้เท่านี้ก่อนครับ