2010-01-27 26 views
5

Mỗi khi tôi lắp ráp một ứng dụng cho máy tính TI-83 + (bộ xử lý Z80), nó dừng hoạt động tại CALL. Đây là một ví dụ ("Hello") - nó bắt đầu chạy tốt, nhưng máy tính bị đóng băng tại lệnh CALL. Bất cứ điều gì tôi đặt trước khi CALL hoạt động tốt, và bất cứ điều gì tôi đặt sau khi không chạy. Đây là việc tháo gỡ mã, để hiển thị địa chỉ thay vì nhãn. Tôi đã "chạm vào nó" để hiển thị dòng DB nơi những người rơi vào, để làm cho nó dễ dàng hơn để đọc.Z80 (TI-83 +) ngừng hoạt động trên CALL

Tôi chưa bao giờ gặp vấn đề này khi viết assembly "programs" (được nạp vào RAM). Vấn đề duy nhất mà tôi biết khi chạy "ứng dụng" (được lưu trong Flash ROM) là chúng không thể tự sửa đổi và vì phân trang là cần thiết, việc truy cập dữ liệu trên một trang riêng biệt là không thể. Đây không phải là tự sửa đổi và chỉ có một trang ... Tôi đã làm gì sai?

0080 218900  LD HL, 0089h 
0083 cd9900  CALL 0099h  ;      --- App stops here 
0086 c38f00  JP 008fh 
0089 48656c6c6f00 DB "Hello", 0 
008f fd360500  LD (IY+05h), 0 
0093 ef   RST 28h   ; B_CALL (
0094 364c   DB 4C36h  ; _ReloadAppEntryVecs) 
0096 ef   RST 28h   ; B_CALL (
0097 2740   DB 4027h  ; _JForceCmdNoChar) --- App should end here 
0099 7e   LD A, (HL)  ;      --- Call goes to here 
009a ef   RST 28h   ; B_CALL (
009b 0445   DB 4504h  ; _PutC) 
009d fe00   CP 0 
009f c8   RET Z 
00a0 23   INC HL 
00a1 18f6   JR 0099h 
+0

Cuộc gọi putc có đảm bảo rằng nó sẽ bảo toàn nội dung của thanh ghi A không? Rắc rối lớn nếu không. Để tìm hiểu xem đó có phải là vấn đề hay không, hãy bao quanh cuộc gọi putc bằng một cú đẩy và một cửa sổ bật lên để bảo quản A. –

+0

Các ứng dụng chắc chắn bắt đầu ở 4080h. –

+0

Có, putc bảo tồn bộ tích lũy. – c4757p

Trả lời

9

Dường như, bạn đang lắp ráp để giải quyết 0080h. Điều này không thể chính xác vì dải địa chỉ 0000h - 3FFFh bị khóa vào trang ROM 0. Thật vậy, theo số this example, bạn lắp ráp đến 4000h. Vì vậy, vấn đề của bạn là CALL của bạn là nhảy vào phần vững, không phải là một phần của ứng dụng của bạn.

+2

Vâng, đó là một khoảnh khắc ngớ ngẩn. Tôi đã ném 'ORG 4000h' và bây giờ nó hoạt động. Tôi đã có một vấn đề khác bây giờ mặc dù ... Không có gì tôi 'PutC' sẽ vào màn hình - có lẽ là một sai lầm đạo đức. Jeez - ngôn ngữ lập dị đầu tiên mà tôi từng lập trình trong bộ sưu tập là 8080, và bây giờ mã của tôi đã được viết rất lâu, nó giống như được viết bởi một con tinh tinh. – c4757p

+0

Ok. Đã giải quyết được sự cố. Yep, vấn đề của PutC là một sai lầm đạo đức. Cảm ơn bạn. – c4757p

+3

+1 khi vẫn nhớ Z80 asm – hirschhornsalz

2

Đây là số memory map Tôi đã tìm thấy Ti-83 +. Bạn không thể tải chương trình này tại địa chỉ $ 0080, đó là nơi ROM sống. Nó được tải ở nơi khác. Điều đó làm việc trong một thời gian cho đến khi bạn thực hiện một JP hoặc CALL. CALL $ 0099 không nhảy đến địa chỉ nhảy dự kiến ​​của bạn, nó nhảy vào ROM. Đó là một kết thúc nhanh chóng.

Bạn cần chọn một chỉ thị ORG thích hợp trong .asm để nó được tải vào RAM tại địa chỉ dự kiến. Bất cứ nơi nào có thể.

Các vấn đề liên quan