練習 - 使用 CP/M 來設計 Altair

已完成

在此練習中,您將瞭解如何開始設計 Altair 模擬器。

連線至 Web 終端機

  1. 在網頁瀏覽器中切換回 Web 終端機。
  2. 如有需要,請驗證網路終端機。
  3. 在連線到網路終端機之前,Altair 模擬器可能已開始執行。 如果是這樣,請按 Azure Sphere 上的 RESET 按鈕來重新啟動 Altair 模擬器。 當 Azure Sphere 重新啟動時,CP/M > 提示會出現在網路終端機中。

開始使用 CP/M

如需 CP/M 的詳細資訊,請參閱 CP/M 參考手冊

以下是一些您開始使用時所需的 CP/M 命令:

  • 取得目錄清單:

    dir
    
  • 清除檔案:

    era *.txt
    
  • 將 Microsoft BASIC mbasic.com 從磁碟機 A 複製到磁碟機 B:

    pip b:=a:mbasic.com
    
  • 列出檔案的內容:

    type hw.c
    
  • 重新命名檔案:

    ren hello.c=hw.c
    

開始使用 Microsoft BASIC-80

如需 Microsoft BASIC 的詳細資訊,請參閱 Microsoft BASIC-80 參考手冊

磁碟機 A 包含 Microsoft BASIC-80。

  1. 若要啟動 Microsoft BASIC,請從 CP/M 命令提示字元輸入:

    mbasic B:TEST.BAS
    

    在 Microsoft BASIC 啟動之後,其會在磁碟機 B 上開啟或建立名為 TEST.BAS 的檔案。

  2. 輸入第一個程式:

    10 for i = 1 to 1000
    20 print i
    30 next i
    
  3. 將程式儲存到磁碟:

    save "B:TEST.BAS"
    
  4. 從磁碟載入程式:

    load "B:TEST.BAS"
    
  5. 選取 Ctrl+C 使程式停止執行。

  6. 結束 BASIC:

    system
    

您可以從 Altair 模擬器隨附的下列 BASIC 應用程式深入瞭解 BASIC:

  • DISKRW.BAS
  • STARTREK.BAS
  • TICTACTOE.BAS
  • SIMPLE.BAS
  • LOOPY.BAS
  • WEATHER.BAS
  • IOT.BAS

使用連接埠讀取溫度和空氣壓力

BASIC 語言具有稱為連接埠的擴充性機制。 Altair 模擬器包含對 IOT.BAS 應用程式使用的連接埠的支援。 IOT.BAS 應用程式會在連接埠 43 呼叫,以讀取溫度和連接埠 44 以讀取空氣壓力。 這些呼叫會路由傳送至 Altair 模擬器 main.c 中的 C sphere_port_in 值。

如果您有 Avnet Azure Sphere 入門套件,則會從上線感應器讀取溫度和壓力資料。 如果您有來自 Seeed Studio 的 Azure Sphere 裝置,則會使用隨機溫度和壓力資料。

下列 BASIC 程式是 IOT.BAS 的清單:

10 PRINT
20 PRINT "Avnet onboard temperature and pressure sensor App"
30 PRINT
70 A$=""
80 C=INP(43)
90 IF C = 0 THEN GOTO 120
100 A$=A$+CHR$(C)
110 GOTO 80
120 PRINT "Temperature is ";A$;" degrees Celsius."
130 A$=""
140 C=INP(44)
150 IF C = 0 THEN GOTO 180
160 A$=A$+CHR$(C)
170 GOTO 140
180 PRINT "Air pressure is ";A$;" hPa."
210 PRINT

這是在 Altair 模擬器應用程式的 main.c 中找到的 C sphere_port_in 函數:

/// <summary>
/// Support for BASIC Port In for IOT.BAS temperature and pressure example
/// Example shows environment temperature and pressure example
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
static uint8_t sphere_port_in(uint8_t port) {
  static bool reading_data = false;
  static char data[10];
  static int readPtr = 0;
  uint8_t retVal = 0;
  if (port == 43) {
    if (!reading_data) {
      readPtr = 0;
      snprintf(data, 10, "%d", onboard_telemetry.latest.temperature);
      publish_telemetry(onboard_telemetry.latest.temperature, onboard_telemetry.latest.pressure);
      reading_data = true;
    }
    retVal = data[readPtr++];
    if (retVal == 0x00) {
      reading_data = false;
    }
  }
  if (port == 44) {
    if (!reading_data) {
      readPtr = 0;
      snprintf(data, 10, "%d", onboard_telemetry.latest.pressure);
      reading_data = true;
    }
    retVal = data[readPtr++];
    if (retVal == 0x00) {
      reading_data = false;
    }
  }
  return retVal;
}

執行 IOT.BAS 應用程式

  1. 若要啟動 Microsoft BASIC,請從 CP/M 命令提示字元輸入:

    mbasic A:IOT.BAS
    

    在 Microsoft BASIC 啟動之後,其會開啟 IOT.BAS 應用程式。

  2. 執行應用程式:

    run
    

當您執行此應用程式時,溫度和壓力資料會發佈至 Azure IoT Central。 您可以在 Azure IoT Central 入口網站中裝置的 [環境] 索引標籤底下檢視資料。

Screenshot that shows an I o T Central chart.

擴充 IOT.BAS 應用程式

IOT.BAS 應用程式設為每隔五秒讀取溫度和壓力。 讀取溫度和壓力時,資料會傳送至 Azure IoT Central,並繪製在環境圖表上。

  1. 若要將應用程式暫停大約 5 秒,請新增迴圈:

    250 FOR J = 0 TO 30000: NEXT J
    
  2. 使用 BASIC save 命令儲存變更:

    save "B:IOT.BAS"
    

開始使用 Word-Master 文字編輯器

CP/M 磁碟映像包含 Word-Master 文字編輯器。 若要使用 Word-Master,您必須將網路終端機切換為字元輸入模式。 在字元輸入模式中,網路終端機會將您輸入的每個字元當做 MQTT 訊息傳送至 Altair 模擬器。

若要在行輸入模式和字元輸入模式之間切換,請選取 Ctrl+L。 當您完成 Word-Master 的使用時,請切換回行輸入模式。 在行輸入模式中透過 MQTT 進行網路終端機通訊的效率更高。

Screenshot of Altair running the Word-Master text editor.

如需詳細資訊,請檢視 Word-Master 使用者指南

下表列出 Word-Master 使用的 Ctrl 字元。 此清單來自 Altair 8800 部落格的體驗。

VIDEO MODE SUMMARY

^O   INSERTION ON/OFF           RUB  DELETE CHR LEFT
^S   CURSOR LEFT CHAR           ^G   DELETE CHR RIGHT
^D   CURSOR RIGHT CHAR          ^\   DELETE WORD LEFT
^A   CURSOR LEFT WORD           ^T   DELETE WORD RIGHT
^F   CURSOR RIGHT WORD          ^U   DELETE LINE LEFT
^Q   CURSOR RIGHT TAB           ^K   DELETE LINE RIGHT
^E   CURSOR UP LINE             ^Y   DELETE WHOLE LINE
^X   CURSOR DOWN LINE           ^I   PUT TAB IN FILE
^^   CURSOR TOP/BOT SCREEN      ^N   PUT CRLF IN FILE
^B   CURSOR RIGHT/LEFT LINE     ^@   DO NEXT CHR 4X
^W   FILE DOWN 1 LINE           ^P   NEXT CHR IN FILE
^Z   FILE UP 1 LINE             ^V   NEXT CHR(S) TO VIDEO
^R   FILE DOWN SCREEN           ESC  EXIT VIDEO MODE
^C   FILE UP SCREEN             ^J   DISPLAY THIS

在字元輸入模式中,下列鍵盤對應將改善您的編輯體驗:

Keyboard key            Word-Master Ctrl Sequence
----------------------------------------------
Insert                  ^O   INSERTION ON/OFF
Delete                  ^G   DELETE CHR RIGHT
Cursor Left             ^S   CURSOR LEFT CHAR
Cursor Right            ^D   CURSOR RIGHT CHAR
Cursor Up               ^E   CURSOR UP LINE
Cursor Down             ^X   CURSOR DOWN LINE

編譯組譯工具應用程式

CP/M 磁碟映像包含示範組譯工具應用程式。 請遵循下列步驟來編輯、組合及載入示範檔案:

  1. 使用 pip 命令,將示範應用程式 (demo.asm) 複製到磁碟機 B:

    pip b:=a:demo.asm
    
  2. 使用 Word-Master 編輯 demo.asm 檔案。 從 CP/M 命令提示字元,輸入:

    a:wm b:demo.asm
    
  3. 選取 Ctrl+L,將網路終端機切換為字元輸入模式。

  4. demo.asm 檔案進行變更。

  5. 將更新儲存至 demo.asm 檔案:

    1. 選取 Esc 鍵。
    2. 選取 E 以結束。 您的檔案變更會儲存至磁碟。
  6. 選取 Ctrl+L,將網路終端機切換為行輸入模式。

  7. 組合 demo.asm 檔案:

    a:asm b:demo
    
  8. 載入並連結已組合的程式碼:

    a:load b:demo
    
  9. 執行示範應用程式:

    b:demo
    

編譯 C 應用程式

CP/M 磁碟映像包含簡單 C 應用程式。 請遵循下列步驟來編輯、編譯及連結 hw.c (helloworld) 檔案:

  1. 使用 pip 命令,將 hw.c 原始程式碼複製到讀取/寫入磁碟機 B:

    pip b:=a:hw.c
    
  2. 使用 Word-Master 編輯 hw.c 檔案:

    a:wm b:hw.c
    
  3. 選取 Ctrl+L,將網路終端機切換為字元輸入模式。

  4. hw.c 檔案進行變更。

  5. 將更新儲存至 hw.c 檔案:

    1. 選取 Esc 鍵。
    2. 選取 E 以結束。 您的檔案變更會儲存至磁碟。
  6. 選取 Ctrl+L,將網路終端機切換為行輸入模式。

  7. 編譯 hw.c 檔案:

    a:cc hw
    
  8. 連結 hw 應用程式:

    a:clink hw
    
  9. 執行 hw 應用程式:

    b:hw
    
  10. 選取 Ctrl+C,使 hw 應用程式停止執行。