跳轉至內容

Signetics 2650 & 2636 程式設計/入門

75% developed
來自華夏公益教科書,開放的書籍,開放的世界

教程 - 入門

[編輯 | 編輯原始碼]

本教程的目標是使用 WinArcadia 逐步介紹組裝、執行和除錯簡單程式碼的機制。我們將使用偵錯程式逐條指令地逐步執行程式,既是為了學習如何使用偵錯程式,也是為了更好地理解處理器的工作原理。

如果您尚未完成,可以在 WinArcadia 中找到下載和安裝 WinArcadia 的說明。

教程程式

[編輯 | 編輯原始碼]

本教程的程式碼可以在 教程程式碼 - 入門 中找到。將此程式碼複製並貼上到文字檔案中,並將標準標籤定義檔案 教程程式碼 附加到文字檔案中。將檔案儲存為 intro.asm,儲存在 Projects 資料夾中。

開啟 WinArcadia。如果模擬器螢幕未顯示 INTERTON VC 4000,請使用選單項:選項 > 機器 > Interton

在模擬器的命令列中,輸入 bp 0。這將設定一個斷點,以便程式一啟動就停止執行。

再次在命令列中,輸入 asm intro。這將組裝我們剛剛建立的程式,並開啟一個 WinArcadia 輸出 視窗,如果組裝成功,應該包括 資訊 0 警告,0 錯誤。它還會在 Projects 資料夾中建立一個彙編清單檔案和一個二進位制檔案。開啟清單檔案 intro.lst。第一列顯示了程式行的儲存地址,第二列顯示了一、二或三位元組的機器程式碼。行的其餘部分是我們編寫的程式。

WinArcadia 將會自動開始執行程式,但在它遇到我們輸入的 $0000 斷點時立即停止。在命令列中輸入 s。這將逐步執行下一條指令,並在輸出視窗中顯示處理器的狀態。第一條指令 - bcta,un reset - 將會做的唯一事情是將指令地址暫存器 IAR 設定為 $0004,即標籤 reset 的地址等效值。

再次執行一步(在命令列中輸入 s)。lodi,r0 $20 指令已執行,我們可以看到 r0 現在包含 $20。

再次執行兩步。這兩條指令設定了 程式狀態字。這裡我們的目標是停用中斷,將返回地址堆疊指標設定為零。參見 重置

下一條指令 eorz r0 是一條單位元組指令,其作用是將 r0 設定為 $00,然後將其儲存在 “效果” 暫存器中。這將關閉音訊並清除 反轉位

然後我們跳轉到子程式 InitPVI。請注意,堆疊指標 SP 已遞增到 1,並且返回地址堆疊中的第一個位置是 $000F。

子程式中的前兩條指令將 r0 設定為 0,將 r3 設定為 $CA,為將所有 PVI 暫存器設定為 0 做準備。R3 將用作 索引暫存器

逐步執行程式,以便檢視指令 stra,r0 object1,r3-。請注意,偵錯程式向我們顯示,索引暫存器 r3 已自動遞減到 $C9,並且 r0 將儲存在 SCORE34 中,這是我們可以寫入的 PVI 中的最後一個地址。開啟 工具 選單並開啟 UVI/PVI(s) 監視器。您應該看到 SCORERT 為 00。再執行兩步,SCORELT 也將被設定為 OO。

如果我們需要除錯某些內容,可以繼續逐條指令地執行迴圈,但在我們的例子中,我們將使用 r l 命令跳到我們所在的迴圈的末尾。這將執行到下一條不進行分支的 BDRR/BDRA/BIRR/BIRA/BRNR/BRNA 指令之後。請注意,這對於 BCTR/BCTA/BCFR/BCFR 不起作用。

下一行將 R3 設定為索引,準備從資料表 one 中載入物件 1 的形狀和位置資料。在逐步執行此迴圈時,您可以在 PVI 監視器中看到物件 1 的 X 和 Y 座標被設定。現在沒有太多可以看的了,因此單擊模擬器視窗頂部的 暫停 按鈕,程式將執行到結束。模擬器螢幕應該顯示一個黑屏、四個白色得分數字和一個小的洋紅色框。

偵錯程式的一個特性是 引導光線,它顯示了在執行每條指令時電視光束的位置。它可以透過命令列指令 gr 開啟和關閉。此圖顯示了我們的程式覆蓋 Interton 預設顯示時的引導光線。如果您在逐條指令地執行程式時觀察光束,您可以看到每條掃描線上的指令數量非常少。

要再次執行程式,請選中 檔案 > 重置到遊戲,程式應該會再次遇到 $0000 的斷點。但是請注意,模擬器仍然顯示我們的黑屏和洋紅色框。更公平的做法可能是從選擇 檔案 > 重新初始化機器 開始。請注意,模擬器必須不處於暫停狀態,這兩個操作才能起作用。

回到綠色的 Interton 屏幕後,在命令列中鍵入 bl。這將在輸出視窗中列出所有斷點,它應該顯示 ,因為它們在機器重新初始化時被清除了。因此,需要再次設定斷點並組裝程式。現在您可以重複上述所有操作,或者在命令列中鍵入 h 以檢視偵錯程式中可以使用的所有命令,並嘗試一些命令。

偵錯程式的一項最終也是強大的功能是條件斷點。這些斷點允許在滿足特定條件時設定斷點。例如,在命令列中輸入 bp 001e r3 eq 1 並讓程式執行。它應該在索引暫存器 r3 達到 1 時在 loopIS 中停止。還有許多其他條件選項,包括測試記憶體資料或任何暫存器,包括 PSU、PSL、SP、CC、RASn。有關詳細資訊,請參見 幫助 > 手冊

另請參閱

[編輯 | 編輯原始碼]

WinArcadia 的其他功能在本書其他地方的各種教程中進行了介紹


華夏公益教科書