2012-05-26 44 views
1

因此,我的目標是編寫一個子程序,當被調用時掛起,直到用戶輸入一個由<return>終止的字符串,然後它返回(可能通過將其寫入地址由用戶指定)。如何從DCPU16上的鍵盤獲得最好的字符

我的問題在於我如何最好地從鍵盤上獲得單個字符。正如我所看到的,有3種方法:

  1. 偵聽來自鍵盤的中斷並獲取響應這些字符的字符。這意味着由getline執行的邏輯將在中斷處理程序中,這似乎會導致一些問題。即如何回覆getline以迴應按下<return>鍵?在中斷處理程序中,您沒有方便的返回地址。同樣,在中斷處理程序中放置太多特定邏輯的模式似乎是......錯誤......即使我在低級編碼方面經驗不足。

  2. 只需按住鍵盤上的按鍵即可。

  3. 通過加載所有壓入循環緩衝區(可能長度爲1)的字符,用中斷處理程序實現舊的1.1行爲。

對這些選項的更多觀點會很好。

回答

1

當你打電話給你getline應該設置中斷處理程序,因此增加了輸入鍵來緩衝並更新索引

然後開始忙碌的循環,直到緩衝區的末尾有一個新的生產線,並禁止中斷從鍵盤

​​

和中斷處理程序將所打的關鍵緩衝,直到填滿,並增加了1到櫃檯,這可以在中斷處理程序放在本身,而是你需要重新激活而中斷在繁忙的循環中

+0

我真的很感謝你的回答,但我恐怕我不完全理解它。我已經寫下了一些在閱讀時突然出現在我腦海中的問題,但是在這裏太久了。我已在此發佈:http://pastebin.com/Nwq5qRSU 如果您喜歡,歡迎您詳細闡述一些要點。 –

+0

@andvin如果這個答案的作品,你應該真的接受答案,並研究它爲什麼有效。這對我來說很清楚它的功能,也許你應該開始一個更基本的dcpu-16彙編0x10c論壇和0x010c wiki有assemby教程。 – booyaa

+1

@booyaa我確實瞭解裝配的基本知識,以及說明的用途。我也有能力編寫一個工作中的getline函數。我遇到麻煩的是如何最好地做到這一點。從棘輪怪胎的實施工作的非平凡方式來看,我想有一些考慮因素進入了設計階段。我真的很感謝這些考慮的一些解釋。 我的問題是,我不知道如何最好地利用中斷。中斷處理程序應該做什麼以及爲什麼?像這樣的事情是AFAIK沒有在典型的DCPU教程中解釋。 –