2015-02-19 15 views
5

Tôi có một mã như dưới đây và nó hoạt động tốt. Nó xóa màn hình, đặt một số màu trong bộ nhớ màu của 12 ký tự đầu tiên trên màn hình và in một văn bản trên màn hình.Thay đổi màu của văn bản không có bộ nhớ màu trong C64/Assembly

  jsr $e544 
     ldx #$00 
     lda #3 
loopclr: sta $d800,x 
     inx 
     cpx #$0c 
     bne loopclr 
     ldx #$00 
     lda #0 
loop: lda message,x 
     sta $0400,x 
     inx 
     cpx #$0c 
     bne loop 
     rts 
message: .byte "Hello " 
     .byte "World!" 

Điều gì tôi tự hỏi, nếu có cách dễ dàng hơn để thay đổi màu văn bản trong hội C64, như POKE 646,color trong BASIC?

Edit: Tôi nghĩ tôi cần phải rõ ràng hơn, tôi có thể sử dụng

lda #color 
sta 646 

Nhưng nó không ảnh hưởng đến văn bản đặt trên màn hình bằng cách mã lắp ráp trong 1024+.

Có địa chỉ nào ảnh hưởng đến tất cả các ký tự được đặt trên màn hình không?

Chỉnh sửa: Tôi nghĩ tôi biết câu trả lời, không.

Trả lời

8

Bây giờ có một câu hỏi tôi chưa bao giờ nghĩ mình được hỏi! sta $ 0286 (646 thập phân) đặt màu nền được sử dụng khi sử dụng thường trình in hệ thống ($ FFD2) mà tôi khuyên bạn nên truy cập trực tiếp vào ram video vì tính đến vị trí con trỏ. Vì vậy:

 lda #$00  ; Black letters 
     sta $0286 ; Set color 
     ldx #$00 
msgloop: 
     lda message,x 
     beq msgdone ; Zero byte sets z flag - end of string - shorter than checking x value 
     jsr $ffd2 ; print a to current device at current position (default: screen) 
     inx 
     bne msgloop ; pretty much always unless you have a string > 255 
msgdone: 
     rts 

message: .byte "Hello " 
     .byte "World!" 
     .byte 0 

Vâng, có sự tín nhiệm của tôi với tư cách là một người lắp ráp hiện đại! ;-)

+0

Tại sao độ tin cậy của bạn sẽ thành công? Tôi nghĩ câu trả lời của bạn rất tuyệt. Tôi không biết về thủ thuật '$ ffd2'. Cảm ơn. –

+2

Đó là một trong đó là bị mắc kẹt trong đầu của tôi thậm chí 30 năm sau khi tôi sử dụng nó lần cuối. Bạn có thể muốn làm quen với hệ điều hành. Có một sự tháo gỡ hoàn toàn tại http://www.ffd2.com/fridge/docs/c64-diss.html, các vectơ hạt nhân bắt đầu từ $ FF81 với một mô tả ngắn gọn về những gì mỗi người làm. – Mike

+0

Chà, 30 năm! Tôi đã cố gắng lập trình C64 30 năm trước, nhưng khi đó tôi không thể tiếp cận bất kỳ nguồn tài nguyên lập trình nào ở đất nước tôi. Sau 30 năm, tôi quyết định học C64. Với những người như bạn, có vẻ như có thể. –

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