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
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. –
Các ứng dụng chắc chắn bắt đầu ở 4080h. –
Có, putc bảo tồn bộ tích lũy. – c4757p