Cháy từng bước (Debug).

Một phần của tài liệu Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU. Giao tiếp với máy tính qua ngõ máy in. (Trang 51 - 54)

b. Mođ tạ leơnh Z80:

2.4.3. Cháy từng bước (Debug).

Đeơ có theơ đaịt Z80 CPU vào chê đoơ cháy từng bước với sự can thieơp trực tiêp từ máy tính sau khi đã đưa chương trình ra RAM chung ta laăn lượt thực hieơn các bước sau:

Bước 1: Câm tât cạ các CS cụa các IC 8255, RAM chung, 74LS244 (U1), 74LS374 thođng qua

các tín hieơu đieău khieơn thích hợp.

Bước 2: Tích cực pin G1 & G2 cụa 74LS244 (U4 & U5) đeơ thođng tuyên địa chư từ Z80 CPU

đên RAM chung.

Bước 3: Đưa EWT (pin 13 cụa IC 74LS74 leđn mức logic cao).

Bước 4: Đưa chađn RESET & WAIT cụa Z80 CPU leđn mức logic '1'. Lúc này KIT sẽ ở tráng

thái baĩt đaău hốt đoơng theo chương trình đã được ghi vào RAM chung (ở chê đoơ Debug). Trình tự hốt đoơng cụa KIT Z80 và quá trình xử lý như sau:

Khi Z80 truy xuât Rom chương trình (ở đađy là RAM chung) tín hieơu CSROM sẽ ở mức tích cực thâp, tín hieơu này qua coơng đạo sẽ được đưa đên chađn 11 (ngõ vào CLK cụa IC 74LS74_U8B), chađn 9 (ngõ ra Q) cụa 74LS74 sẽ leđn mức logic cao, chađn 8 (ngõ ra /Q) sẽ ở mức logic thâp, mức logic này được đưa vào chađn 4 cụa 74LS74 làm ngõ ra Q (chađn 11 U8A) ở mức logic cao, ngõ ra /Q ở mức logic thâp, ngõ ra /Q được đưa vào chađn WAIT cụa Z80 CPU, 51

do đó Z80 CPU sẽ được đưa vào tráng thái chờ cho đên khi chađn WAIT được đưa leđn mức logic cao.

Rom chương trình sẽ được Z80 truy xuât trong 2 trường hợp: 1. Lây mã leơnh (chu kỳ M1).

2. Đĩc dữ lieơu.

Ở chu kỳ lây mã leơnh sẽ có tín hieơu M1 đi kèm (mức tích cực thâp). Tín hieơu này sẽ được PC nhaơn biêt qua đường Busy.

Như vaơy, thođng qua các tín hieơu CSROM và M1, có theơ can thieơp vào từng leơnh cụa Z80. Cú theơ:

Đeơ đĩc tráng thái cụa các thanh ghi Z80 CPU theo từng leơnh ta thực hieơn các bước cơ bạn sau:

Giạ sử raỉng breakpoint được đaịt ở dòng thứ n trong file có phaăn mở roơng là.asm. Khi thực hieơn cháy ở chê đoơ Debug, chương trình dịch sẽ dịch file này đeơ có moơt file tương ứng có phaăn mở roơng là.bin và moơt file thứ hai có phaăn mở roơng là.lst (file này dùng khi người sử dúng muôn in hoaịc xem mã máy cụa từng leơnh trong toàn boơ chương trình).

Ví dú: Ta có moơt chương trình viêt baỉng ngođn ngữ assembly Z80 như sau: org 0000h ld sp,0FFFEh loop: ld a,11h out (00h),a jp loop

Giạ sử file này được cât dưới teđn example.asm Giá trị trong file example.bin sẽ là:

31 FE FF 3E 11 D3 00 C3 03 00 Giá trị trong file example.lst sẽ là:

org 0000h 0000 31FEFF ld sp,0FFFEh lodp: 0003 3E11 ld a,11h 0005 D300 out (00h),a 0007 C30300 jp loop

Như vaơy dòng thứ n trong file *.asm sẽ tương ứng với dòng thứ m trong file *.lst theo cođng thức sau: m=n+(n div 60)*2 (sở dĩ có cođng thức này là vì cứ 60 dòng trong file *.asm thì tương ứng sẽ có 2 dòng được theđm vào trong file *.lst). Tái dòng thứ m trong file *.lst ta sẽ đĩc được địa chư tương ứng cụa moơt leơnh. Do đó breakpoint sẽ tương ứng với moơt địa chư cú theơ: breakpoint <=> xxxxh.

Chương trìbh Debug sẽ baĩt đaău tái địa chư xxxxh đã được xác định trong bước tređn. Khi Z80 truy xuât Rom chương trình, ta laăn lượt xét moơt trong hai trường hợp:

a. Trường hợp truy xuât boơ nhớ: Có tín hieơu chĩn CSROM nhưng khođng có tín hieơu M1. b. Trường hợp CPU lây mã leơnh: Chia làm 2 lối:

- Lối thứ nhât: Leơnh chư có 1 chu kỳ M1.

- Lối thứ hai: Leơnh có 2 chu kỳ M1. Chu kỳ M1 thứ nhât luođn baĩt đaău baỉng moơt trong 4 giá trị sau: DDH, CBH, FDH, EDH.

Như vaơy ta sẽ phađn bieơt được đađu là nơi baĩt đaău cụa moơt leơnh. Trong trường hợp CPU lây mã leơnh, tín hieơu CSROM xuât hieơn đoăng thời với tín hieơu M1.

Khi Z80 truy xuât Rom chương trình chađn WAIT sẽ tự đoơng xuông mức logic '0' nhờ phaăn cứng như đã giới thieơu ở tređn. Trong trường hợp CPU truy xuât (đĩc) boơ nhớ, ta khođng xử lý gì cạ mà chư caăn set chađn WAIT leđn mức logic '1' đeơ CPU tiêp túc cháy bình thường cho đên khi có tín hieơu truy xuât boơ nhớ tiêp theo CPU sẽ tự đoơng bị đaịt lái vào tráng thái chờ. Trong trường hợp CPU caăn lây mã leơnh, đaău tieđn phại xác định mã leơnh có bao nhieđu byte nhờ đĩc giá trị đaău cụa mã leơnh. Nêu mã leơnh có 2 bytes thì vieơc xử lý mã leơnh thứ hai sẽ giông như trong trường hợp truy xuât boơ nhớ. Vieơc xử lý leơnh được tiên hành như sau:

Khi có tín hieơu M1, đaău tieđn ta sẽ đĩc địa chư đang được đưa vào Rom chương trình, so sánh địa chư này với địa chư xxxxh (tương ứng với đieơm breakpoint), nêu chưa baỉng thì set chađn WAIT cho Z80 CPU tiêp túc cháy cho đên khi địa chư đĩc veă đúng baỉng địa chư xxxxh, lúc này ta sẽ tiên hành đĩc tráng thái cụa các thanh ghi, trình tự đĩc như sau:

Bước 1: Câm CS RAM chung baỉng cách đưa /OER (pin 15 cụa 74LS374_U3) xuông mức

logic '0' và đưa /CER (pin 6 cụa 74LS374_U3) leđn mức logic '1'.

Bước 2: Đưa giá trị C3 (mã leơnh cụa leơnh nhạy JP HiAddrLoAddr) leđn data bus, sau đó set

chađn WAIT leđn mức logic '1', Z80 CPU sẽ tiêp túc cháy và hốt đoơng tiêp theo sẽ là đĩc byte thâp và byte cao cụa địa chư đi theo sau mã leơnh Jump (C3LLHH), laăn lượt đưa byte thâp và byte cao cụa địa chư leđn data bus thay cho dữ lieơu từ Rom chương trình. Địa chư này chính là địa chư đaău tieđn cụa đốn chương trình đĩc thanh ghi mà ta đã đưa vào RAM chung ở bước tređn. Mã leơnh tiêp theo mà Z80 CPU caăn lây chính là byte đaău tieđn cụa đốn chương trình này, cho phép CS RAM chung baỉng cách đưa /OER leđn mức logic '1', /CER xuông mức logic '0', sau đó set chađn WAIT leđn mức logic '1' đeơ CPU tiêp túc cháy. Noơi dung cụa đốn chương trình đĩc thanh ghi bao goăm:

- Cât noơi dung các thanh ghi vào stack.

- Laăn lượt đưa noơi dung các thanh ghi A, B, C, D, E, H, L, IX, IY, SP ra địa chư 0000h (địa chư này chính là địa chư đaău tieđn cụa RAM chung), khi CPU truy xuât đên địa chư này chính là lúc đĩc noơi dung các thanh ghi veă PC. Dùng các leơnh EX, EXX đeơ hoán chuyeơn noơi dung các thanh ghi AF', BC', DE', HL' sau đó đưa noơi dung các thanh ghi này ra RAM chung đeơ đĩc veă PC như đã trình bày. Hoán vị lái các thanh ghi AF', BC', DE', HL'.

- Khođi phúc noơi dung các thanh ghi.

Bước 3: Sau khi đã đĩc noơi dung các thanh ghi và in ra màn hình, đưa giá trị C3 (mã leơnh cụa

leơnh nhạy JP HiAddrLoAddr) leđn data bus, sau đó set chađn WAIT leđn mức logic '1', Z80 CPU sẽ tiêp túc cháy và hốt đoơng tiêp theo sẽ là đĩc byte thâp và byte cao cụa địa chư đi theo sau mã leơnh Jump, laăn lượt đưa byte thâp và byte cao cụa địa chư trở veă (chính là địa chư cụa leơnh mà CPU đã bị chaịn lái trước đó) leđn data bus thay cho dữ lieơu từ Rom chương trình.

Bước 4: Thực hieơn leơnh, chaịn CPU ở leơnh tiêp theo và tiêp túc đĩc noơi dung các thanh ghi

theo từng leơnh.

Như vaơy vieơc đĩc noơi dung các thanh ghi sẽ được tiên hành trước khi CPU lây mã leơnh thứ nhât.

Đeơ thực hieơn leơnh CALL như moơt leơnh đơn cụa Z80 trong chê đoơ Debug ta tiên hành như sau:

Đĩc mã leơnh, nêu mã leơnh chưa phại là C9 (mã leơnh RET) thì tiêp túc set chađn WAIT leđn mức logic '1' đeơ CPU tiêp túc cháy bình thường, nêu mã leơnh đúng baỉng C9 thì thực hieơn đĩc tráng thái các thanh ghi tương tự như khi thực hieơn moơt leơnh đơn.

Mođ tạ quá trình Debug.

Đaău tieđn chương trình sẽ tự đoơng tìm dòng tương ứng trong file *.lst (có noơi dung giông với dòng hieơn tái trong cửa soơ màn hình sốn thạo). Trong file *.lst có lưu giữ địa chư cụa leơnh, do vaơy deê dàng tìm được địa chư tương ứng cụa dòng leơnh hieơn tái. Z80 CPU sẽ được cho cháy từ đaău chương trình đên địa chư này, nhờ vào vieơc thường xuyeđn đĩc veă PC giá trị cụa địa chư được đưa đên RAM chung trong moêi laăn có sự truy xuât cụa CPU. Baĩt đaău từ đađy, sau moêi leơnh noơi dung cụa các thanh ghi sẽ được đĩc veă PC. CPU sẽ lây mã leơnh kê tiêp sau khi đã thực hieơn xong moơt leơnh, trong thời gian chờ lây mã leơnh kê địa chư cụa leơnh sẽ được đĩc veă PC, dựa vào địa chư này, dò tìm trong file *.lst ta sẽ tìm được sô hàng tương ứng cụa dòng leơnh. Khi cho Z80 CPU tiêp túc thực hieơn leơnh cũng chính là lúc phại đạo màu cụa dòng leơnh hieơn tái tương ứng tređn màn hình. Quá trình Debug sẽ kêt thúc khi người sử dúng nhân phím ESC tređn bàn phím.

Một phần của tài liệu Thiết kế, thi công và viết chương trình điều khiển mạch thực hành cho Z80 CPU. Giao tiếp với máy tính qua ngõ máy in. (Trang 51 - 54)

Tải bản đầy đủ (DOC)

(148 trang)
w