日文‎ > ‎

「日→中」大人的科學vol.24_GMC-4(4位元電腦)的操作手冊翻譯

大人的科學vol.24_GMC-4(4位元電腦)的操作手冊翻譯


事前聲明:

*此文件為上課時自行翻譯的教材,並未正式授權,故無法提供雜誌內容。個人也只翻譯部分段落。如有需要者請自行對照雜誌,純文字檔的編排順序並未完全依照雜誌的編排。

版權屬原出版社所有。


雜誌名/期:大人的科學vol.24 個人電腦的時代
範圍:p.44~76
(GMC-4的操作手冊翻譯)

翻譯日期:2011/10月

翻譯內容(p.44開始):


<內容物>

喇叭、迴路版、按鍵紙、雙面膠、有帽螺絲x2、螺絲x1、本體。

<事前準備>

一號十字螺絲起子,三號鹼性電池。
(鎳鎘電池等充電電池電壓過低,氫氧電池電壓過高,皆不適合使用)

步驟1:連上電池

將本體(電池箱)的連接線接到迴路版上。
(注意插入的方向)

步驟2:裝上喇叭

將喇叭裝進本體的孔中,以有帽螺絲固定。
(盡可能不要碰觸到喇叭透明的圓錐部分,如果不小心弄凹,輕輕貼上玻璃紙再拉出來)

步驟3:用螺絲將迴路板固定在本體上

不要把迴路板根本體的導線弄混。

步驟4:把按鍵紙貼上迴路板

  1.將雙面膠的一面撕下,並對準按鍵紙背面的四角之後貼上。

  (背面指的是沒有印出字的那面)

  2.再把雙面膠的另一面撕掉,把按鍵紙跟迴路板上的”L”字對準後貼上。

步驟5:裝上電池、打開開關

  1.將開關切成on之後,數字LED燈(之後省略為數字LED)會顯示F

  (務必使用新的三號電池,還有不要搞錯正負極)

  2.按下按鍵後,會發出嗶嗶聲,同時確認所按下的字是否顯示在數字LED燈上。

<Q&A>

Q:數字LED燈沒有顯示or沒發出聲音?

A:電池箱的迴路是否接上?方向正確?

A:請使用新電池、注意正負極

A:確認喇叭的導線,如果脫落請利用錫絲接上

A:有沒有貼好按鍵紙?


1、各部位名稱:


硬體重置按鍵:
回到電源為ON的時候的狀態。
記憶體的內容會回到default值。

A set:設定記憶體位置用

incr:輸入、讀取資料用

run:執行程式用。

reset:停止程式,並回到記憶體位置00的地方。


2、運作測試:


將本體的主開關切成ON,確認數字LED燈顯示F。

<按鍵輸入測試>
總共設有0~9、A~F共4*4的按鍵。每按下一個數字,結果會顯示在數字LED燈上。B跟D的情況會以小寫b跟d顯示。

<喇叭測試>
喇叭會對應所按下的鍵發出「嗶」的一聲,同時中間的2進位LED燈(右邊數來地四個)會閃爍一下。

<2進位LED燈的測試>
2進位LED燈是用2進位表示,從0~6標示6個燈,這裡稱作「bit編號」。亮燈的情況標示1,沒亮燈的情況表示0。

如果按下INCR鍵,2進位LED燈會依照下一個數字的順序亮燈(0000010→0000011,0000101→0000110)。

*Keyword

<所謂的2進位和16進位>

  2進位是指,當「1」的下一個數字就進位為「10」。而一般來說我們周遭所使用的數為10進位,所謂的10進位就是「9」的下一個數字進位為10。

  至於16進位就是指,15的下一個數字便進位。與10進位中10~15等同的數字分別為英文字母的A~F。由於16進位和2進位相容性高,在計算機的世界中也廣泛使用。

<2進位和16進位的讀法>

   2進位從左邊開始順著唸1或0。至於16進位則利用2進LED上的數字,將行數分成3個以及4個一組。以下圖為例,不唸作「十二」而唸作「一‧二」。

GMC-4的構造

  電腦的中心,也就是CPU,根據不同的任務劃分出許多領域。之後還會出現記憶體位置(Address)、暫存器(Register)之類的詞,先在這邊記起來吧。


p.47


3、GMC-4的構造:


   為電腦的中心,也就是CPU,根據不同的任務劃分出許多領域。之後還會出現記憶體位置(Address)、暫存器(Register)之類的詞,先在這邊記起來吧。

<記憶體>

   記憶資料用的這項區域或功能稱作記憶體。GMC-4的記憶體在電源關閉後內容就會消失。GMC-4中有下兩種的記憶體(依照位置和功能區分)。

00~4F:程式記憶體(裝載程式的記憶體)

50~5F:資料記憶體(裝載計算結果用的記憶體)

位置(標示A'、B'的為備用暫存器)
6F:暫存器A
6C:暫存器B
6E:暫存器Y
6D:暫存器Z

<埠(port)>

   信號的收發處稱作「埠」。埠之中有輸入和輸出的地方,兩邊都可以單獨使用。

暫存器(register

   暫時性處理計算的區域,在電腦中被稱作暫存器(register)。GMC-4中共有8個可記憶4bit的暫存器。

<記憶體位置>

   所謂的記憶體位置(Address)便是表示「記憶資料的地方」的數字。可當作「門牌」來看待(門牌不等於內容物)。在GMC-4中每個記憶體能記錄16進位1位的數(4bit)。比這更大的數就必須傳遞到複數的記憶體中。


4、資料的輸入、修正、確認方法:


資料的輸入:

   能夠輸入資料的記憶體位置從00~5f為止。將16進位從位置00依序輸入下去。請跟著下圖的步驟,試著從00~01依序輸入「1」「A」看看。這些資料等於是一個一個的「命令」,電腦會依照記憶體位置的順序執行每個命令,有關命令的部份可參照56頁。

一開始,先按下硬體重置開關將資料全部清除,資料清除後全部會回到F的狀態。

步驟1:按下RESET

  按下RESET後,記憶體位置會回到00,2進LED燈表示的是當前的記憶體位置(門牌),數字LED燈則是表示其位置的內容。右圖的情況就是表示:「位置00的記憶體中存有FF這個資料」。

步驟2:按下按鍵「1」

  按下按鍵1之後,數字LED燈會表示「1」,將原先的資料覆蓋。不過此時原本的資料還未真正被覆蓋,因此必須按下「INCR」後才會真正決定。

步驟3:按下INCR

  按下之後,位置00的資料便會寫入「1」,然後記憶體會自動跳入下一個位置(目前為01),數字LED燈顯示的是01的內容,也就是預設值的F。

步驟4:按下A

參考步驟2。

步驟5:按下INCR

參考步驟3,輸入完後記憶體會位置會跳到02。

<資料的確認>

   如果不輸入任何資料,直接按下INCR的話,會依照記憶體位置的順序一個一個顯示下去。試著依序按下RESET、INCR看看,剛才輸入的「1」「A」會在LED數字上顯示,如此一來便能確定資料的內容。只要按下RESET的話便會回到記憶體位置00的地方。

<資料的修正>

  按下記憶體位置的號碼之後(門牌號碼)按下A SET,就會直接跳到那一個記憶體位置。例如,如果位置50的資料錯了,依照下面的方式修改吧:

首先按下RESET,回到00。
按下5,數字LED燈會顯示5,但注意這是暫定的狀態。
按下0,數字LED燈會顯示0,這時實際上是輸入了「50」這個兩位數(而不是只有0)。
按下A SET,數字LED燈會直接顯示50的資料。將新的資料輸入之後,按下INCR便能夠將資料修正完畢。

5、程式執行的種類:

程式的執行,大略分成RUN以及STEP兩種模式。再依據LED燈以及按鍵輸入音的有無,分成4種。

(1)RESET→1→RUNL:RUN模式,不表示位置,無按鍵的輸入音。

(2)RESET→2→RUN:RUN模式,會表示位置,無按鍵的輸入音。

(3)RESET→5→RUN:STEP模式,不表示位置,無按鍵的輸入音。

(4)RESET→6→RUN:STEP模式,會表示位置,有按鍵的輸入音。

RUN模式:連續執行程式的模式,一口氣執行00~最後。

STEP模式:將命令一個一個執行的模式,主要是用來確認程式的動作。每按下一次INCR,命令會一個步驟一個步驟執行。


6、利用範例程式來玩遊戲吧:


GMC-4中,共寫入了以下7種範例程式,即使不輸入任何程式,也能夠馬上遊玩。

1.電子管風琴
2.猜音階
3.打地鼠
4.網球
5.計時
6.自動演奏音樂
7.發送摩斯密碼


1.電子管風琴:


步驟1:開始程式

  打開主開關,依序按下RESET、9、RUN。

步驟2:演奏

  按下1~E便會發出聲音。每一個按鍵各自負責一個音(如下圖),只有在按住按鍵時會發出聲音。


2.猜音階:


  猜出GMC-4發出的音階的遊戲,挑戰音感以及記憶力的極限看看吧。

步驟1:遊戲開始

  打開主開關,依序按下RESET、B、RUN,遊戲便會開始。

步驟2:遊戲方式:

  從喇叭中會發出2個音,在音發出之後要按下依照1~E為順序的相同音階(LA~SO)。第1個音一定是DO(提示用),所以要先按下DO之後再按下第2個音。如果按對音階的話,會在一開始的2個音後追加新的1個音,這時便要從頭輸入3個音。如果按錯的話喇叭會發出錯誤聲,然後遊戲結束,在數字LED登上會顯示得分。

  最高總共會持續10個音,全部答對的話會在數字LED登上顯示A(10分)。
  遊戲結束後,再次按下RUN便能重新開始遊戲。


3.打地鼠:


利用2進LED的顯示來玩打地鼠,挑戰反射神經。

步驟1: 遊戲開始

   打開主開關,依序輸入RESET、C、RUN。接著,輸入按鍵選擇地鼠出現的速度,用來確認遊戲難度。
  0:慢
  4:有點快
  6:快
  C:非常快

步驟2:遊戲方式:

  2進LED會亮起一個燈,配合著那個燈按下0~6的數字,如下圖:

  如圖,按下4的話便打中地鼠。按下正確的音的話會發出「嗶」的聲音,同時增加1分。如果按錯,或是沒在一定時間內打中地鼠的話就會miss

步驟3:遊戲結束

  地鼠總共會出現10隻,遊戲便結束。數字LED會顯示得分,10分為「A」。
  按下RUN的話,能夠再次進行遊戲。


4.網球:


  網球雙打遊戲,需要2名玩家。

步驟1: 遊戲開始

  打開主開關,依序輸入RESET、D、RUN,遊戲開始。

步驟2:遊戲方式

  2進LED表示球(亮燈)、左球場(左三)、右球場(右三)。按下0(左)跟3(右)的話就能夠擊球,0為左邊的玩家使用,3為右邊玩家。依據擊球的時機,飛回去的球的速度會跟著變化。

步驟3:遊戲結束

  只要有一方先拿到7分遊戲就結束,由2進LED表示得分。如下圖:

  7比3,左側獲勝。
  按下RUN的話,能夠再次進行遊戲。


5.計時:


  最高能設定到7分59秒的計時器,剩餘時間為0時會發出聲音。

步驟1:設定計時器

  在00~02設定計時器的時間。
  00→分(0~7)
  01→秒的十位數(0~5)
  02→秒的個位數(0~9)

  舉例來說,想要設定3分25秒的話,就按照左圖的順序輸入。
  最後按下RESET、E、RUN後,便能開始計時。

步驟2:計時器的倒數

  計時器運作時,每1秒都會從喇叭發出「咚」的聲音。剩餘時間會由2進LED和數字LED表示。

  2進LED中間的燈每1秒會閃爍1次,左邊三顆顯示分,右邊三顆顯示秒的十位數。數字LED顯示秒的個位數。

  如下圖二是表示3分25秒的情況。(秒數跟實際上的有誤差。)

步驟3: 倒數結束

  計時器的剩餘時間為0時會發出音效,程式結束。


6、自動演奏音樂:


  自動演奏音樂的程式。輸入演奏的資料演奏自己喜歡的旋律。

步驟1:輸入演奏資料

  打開主開關,將演奏資料寫入記憶體中。演奏資料可從位置00設定到5F。00設定的是曲子的節奏。音階由1~E,0則是休止符。

  如果要演奏「櫻花 櫻花」這首曲子,可依照下圖的順序輸入。

步驟2資料的確認

  按下RESET、INCR、INCR....來確認輸入的資料是否正確。

步驟3:開始演奏

  依序按下RESET、A、RUN,演奏開始。

  長時間演奏的時候,基板以及電子零件會發熱,請注意。

步驟4:資料的修正

  弄錯輸入的資料時,可以從頭開始,只修正錯誤的資料。例如要修正位置03中的內容修改成「3」時,依照下面的順序按:

RESET:回到00位置
0、3 :輸入03代表要前往的位置(LED只會顯示後輸入的3)
A SET:跳躍到指定的位置
3:輸入要修改成的內容
INCR:覆蓋原本的資料

步驟5: 中斷演奏與再度演奏

  按下RESET便能中斷演奏。想要再度開始的話按下A、RUN。

步驟6:變更節奏

  曲子的節奏由位置00設定,0~F,值越大速度越慢。可依序按下RESET、0、INCR,以最快的速度演奏看看。

步驟7:演奏喜歡的旋律

  先將想演奏的音符跟休止符的資料輸入,依照下面的方式輸入:
  *位置00的地方輸入曲子的節奏(0~F、值越大越慢)
  *「奇數」位置輸入音符或休止符
  *「偶數」位置輸入音符或休止符的長度
  * 要結束演奏的話,再最後一個演奏資料後面輸入F(結束的意思),並再輸入一個F;如果想要重複演奏的話,則在第一個F之後輸入0。

7、命令code與程式的構造:

  要讓電腦運作必須要有命令。將這些命令組合就是程式。命令的種類依照cpu,一開始就預設好了。

<命令>

  GMC-4中共有30種命令。命令的種類有「計算用」「亮燈用」「jump用」數種。將這些命令複雜地組合的話就能製作程式。關於命令的詳細資料可在下一頁的命令一覽表中參照。

  命令用人類能理解的語言來說,就是「命令用的記號」。將「命令用的記號」以cpu能理解的語言來說的話,就是命令code。命令code以16進位的形式寶是,例如將「TIA 1」這樣的「命令記號」翻譯的話,可以得到「81」這個兩位數的「命令code」。命令code所需要的記憶體大小依據命令的種類有所不同。

<程式的構造>

  程式是由:依次處理、分歧處理、循環處理三種構造所組合而成。這三種構造由下列的流程圖表示。


*Program

  為了讓人明白「命令」的概念,以下是特別設計過的程式
  利用TIA命令與AO命令進行數字LED的點燈實驗:

   最基本的程式之一。要將數字LED燈表示「5」,就要使用到TIA和AO兩個命令。

  位置         命令記號(唸法)        命令code          命令的運作  
    00                        TIA                            8         
    01                          5                              5                 這兩個步驟表示將5輸入到暫存器A
    02                        AO                            1                 將暫存器A的內容輸出到埠,使數字LED亮起。

  按照RESET、8、INCR、5、INCR、1、INCR的順序輸入程式,並按下RESET、1、RUN使程式執行看看。數字LED燈便會顯示5。更改01的數字的話會亮出不同的內容。

<分歧處理>

  以菱形表示分歧命令,分歧會依據條件處理分枝。不過,不管如何分枝,無論如何都必須回到同一個地方。整個程式的處理流程因為各只有一個出入口,即使是複雜的程式也不容易出錯。分歧的命列結果會以「執行flag」這樣的標記表示。

<循環處理>

  依據條件回到先前的處理流程,條件符合的話則繼續往下執行。

*Keyword

執行flag:

  想執行分歧處理的程式的話要使用「JUMP」命令。所謂的jump,能夠變更程式目前執行的位置。特別要注意的是特點是,執行JUMP命令後,「一定會將執行flag變成1(不管是否jump)」。所謂的執行flag指的是,「表示命令執行的結果」的標記,會依據命令的不同而有不同的執行flag(不是0,就是1,可參照命令code一覽表)。假使想要將CIA命令與JUMP命令結合的話,便可做到「暫存器a的值如果不是x的話,則jump」這樣的分歧處理。

  執行後必定將執行flag變成1,所以如果勢將兩個JUMP命令結合的話,便能夠進行強制jump。

GMC-4 命令code一覽表:

以第一個命令code舉例:
0:便是命令code(16進位)
KA :命令記號(也就是唸法)
K→Ar :指的是運作的區域(k代表鍵盤紙、Ar就是暫存器A)
0,1:就是執行flag,如果有寫0跟1,代表某些情況是0,某些情況是1,否則都是1

每一項命令code的詳細說明:
0:將輸入的數字(0~F)代入到暫存器A,沒有按下按鍵的情況執行flag=1,按下按鍵的情況執行flag=0。

1:將暫存器A中的值(0~F)顯示到數字LED上。

2:將暫存器A跟暫存器B的值互換,同時暫存器Y跟Z的值互換。

3:暫存器A跟Y的值互換。

4:將暫存器A的值代入到「資料記憶體位置(50+暫存器Y的值)」。
ex:暫存器Y的值為1,則將暫存器A的值代到記憶體位置51中。

5:將暫存器A的值以「資料記憶體位置(50+暫存器Y的值)」的值代入。
ex:暫存器Y的值為1,則將資料記憶體位置51的值代到暫存器A中。

6:將暫存器A的值「加」上「資料記憶體位置(50+暫存器Y的值)」的值。需要進位的時候,執行flag=1,否則=0。
ex:暫存器Y的值為1,則暫存器A的值=暫存器A的值+資料記憶體位置51的值。

7:將「資料記憶體位置(50+暫存器Y的值)」的值減掉暫存器A的值,並將結果代入暫存器A中。值如果為負數,執行flag=1,否則=0。

8:指定一個值(0~F)代入到暫存器A中。

9:將暫存器A的值加上一個指定的值(0~F)。需要進位的時候,執行flag=1,否則=0。

A:指定一個值(0~F)代入到暫存器Y中。

B:將暫存器Y的值加上一個指定的值(0~F)。需要進位的時候,執行flag=1,否則=0。

C:暫存器A的值跟x相同時,執行flag=0,否則=1。

D:暫存器Y的值跟x相同時,執行flag=0,否則=1。

E:沒有E

F:當執行flag=1時,跳到指定的記憶體位置;否則,將不進行jump,而是程式往下繼續執行,同時執行flag也會變成1。

E0:熄滅數字LED。

E1:讓2進LED的一個燈亮起。暫存器Y的值=所發亮的2進LED的bit編號(0~6)。

E2:讓2進LED的一個燈熄滅。暫存器Y的值=所發亮的2進LED的bit編號(0~6)。

E3:沒有E3

E4:將暫存器A的值,0跟1相互反轉(稱作bit反轉)。

E5:將暫存器ABYZ的值和暫存器A'B'Y'Z'的值( 輔助暫存器)互換。

E6:將暫存器A的值右移一位bit(就是ROTATE)。如果原本的數為偶數,執行flag=1,否則=0。

E7:發出結束提示音。

E8:發出錯誤提示音。

E9:發出「嗶!」的短音

EA:發出「嗶──」的長音。

EB:用暫存器A的值指定發出的音階(1~E)。

EC:用暫存器A的值指定等待的時間(1~E)。等待的時間=「(暫存器A的值+1)*0.1」秒。

ED:利用資料記憶體中的值點亮2進LED。
位置5F控管前3個bit,位置5E控管後4位bit。

EE:將資料記憶體中的值減掉暫存器A的值。將計算結果轉換成10進位存入記憶體中。如果必須退位(進位的相反)的話,則在前一個資料記憶體位置中裝入1。執行後,暫存器Y的值減少一個。

EF:將資料記憶體中的值加上暫存器A的值。將計算結果轉換成10進位存入記憶體中。如果必須進位(進位的相反)的話,則將前一個資料記憶體位置的值加上1。執行後,暫存器Y的值減少一個。

<注意>

  CAL RSTO或CAL SUND之類的命令被稱作「子程式」。所謂的子程式是將複數的命令統合成起來的程式。總共有16種,全都以CAL作為開頭。子程式的執行必須在執行flag=1時才可以,請注意。


8、程式入門:


  從這裡開始實際寫程式,稍微學習一點寫作程式的策略。首先來看看程式是怎麼被寫出來的吧。

Program1

  1~15:  每秒增加數字LED的值1,第15秒時停止的程式。

思考所需的命令:

將這個程式的流程以下表顯示(或右圖):

步驟1.將值增加1
步驟2.等待1秒
步驟3.將值表示到數字LED
步驟4.發出短的提示音
步驟5.將值增加1
步驟6.值如果沒有滿,則回到步驟2
步驟7.發出結束的提示音

  利用計時器等待一秒之後,使數字LED亮起,然後再將值+1,依照這樣的順序循環處理。如果只是顯示數字有點空虛,所以才追加發出提示音的處理。接下來,請將處理內容一步一步的具體化下去。

  具體的處理內容(所需要用到的命令記號在右欄):

步驟1(值+1)1:將1的值放入暫存器Y

步驟2(等待1秒):1.將9的值放入暫存器A
                                       2.利用暫存器A的值執行等待。(A+1)X0.1秒=1秒。

步驟3(將值顯示到數字LED上):1.將暫存器A跟Y的值互換
                                                                  2.將暫存器A的值顯示到數字LED上
                                                                  3.將暫存器A跟Y的值再次互換。

步驟4:差出短音

步驟5:(值+1):Y=Y+1

步驟6:值未滿16則前往步驟2,執行flag=1時則前往7。

步驟7:發出結束音

步驟8:程式結束,利用JUMP命令循環執行步驟8,讓程式無法進行(結束的意思)。


  在這個工程中,要使用哪一個暫存器以及記憶體是很大的考驗。例如,暫存器A「負責處理」等待一秒以及亮燈的命令。也就是說「將別的處理以暫存器A來執行的話是很困難的(因為暫存器A只作前兩件事情)」。

  在程式裡,計數的次數交由暫存器Y解決。而想要將數字顯示到數字LED時,則必須將暫存器Y的值與A的值交換,結束之後再交換回來。

  至於「計數的次數滿16了嗎?」的這個分歧,利用AIY命令執行時執行flag的不同來進行判斷。如果數字達到16而必須進位,則執行flag=1,否則=0(也就是用來判斷jump與否的條件)。

<將命令記號翻譯成命令code>

  一邊看著命令code,並將完成的命令記號換成命令code。命令code要從位置00依序嵌入。依據命令的不同有些必須要使用複數的記憶體位置。

<執行code>

  將完成的命令code植入記憶體中,輸入方法請參照49頁。按下RESET、1、RUM後執行程式。
  執行後,數字LED的顯示會每秒增加1,開始時是1,最後是F(15秒),結束後會發出結束提示音。

改造建議

  將這個程式的一部分變更的話,能夠執行截然不同的處理(修正方法參照50頁)。

1.按按鍵報數

  不依秒數計數,而利用每按下一次數字鍵增加一次。按哪一個數都沒關係。依照下圖修改:

2.將計數的次數減半

  把暫存器Y的值每次增加2即可。

3.用最高速度計數


Program2


  電子骰子

    利用數字LED的點燈的骰子。雖然只是個21行的小程式,這裡面濃縮了「讀取數字鍵盤的方法」、「點亮數字LED的方法」等等的基本策略。

1.依照下圖輸入命令code。

2.按下RESET、1、RUN執行程式。

3.執行程式後,數字LED燈會從1~6的順序高速變換。如果任意按下0~F的鍵,只要在按住的期間,數字LED燈會在某個數停止,放開之後又會立刻開始高速變換。

<記憶體位置OE~OF之code的備註>

  利用KA命令進行輸入判斷。沒有輸入按鍵的話執行flag=1,有的話則=0。沒有輸入按鍵的情況,利用位置0F的JUMP命令跳躍至位置02。有輸入按鍵的情況,另用位置12的JUMP命令跳躍至位置0E。位置12的命令運作的時機是,當前一個JUMP的命令沒有執行而繼續往下執行時(此時執行flag=1)。

<程式解說>

  讀取按鍵的輸入必須使用KA命令。KA會依據數字見的輸入狀態有不同的行動。如果按鍵有被按下,則按下的內容(0~F)會儲存到暫存器A中,而且執行flag=0。相反的,如果沒有按下按鍵,暫存器A不會有變化,執行flag=1。因此,在KA命令之後直接放入JUMP命令,能夠藉此判斷「是否按下了鍵」以便進行jump。

  舉例來說,這個點子骰子的程式中,位置0E~14處理按鍵輸入的判斷。KA的命令後面連續接了2個JUMP命令,就能夠進行「沒輸入按鍵時跳到位置02,否則跳到位置0E」這樣的處理。


Program2


  16進位的加減法

  進行16進位1位的加法運算的程式。GMC-4中,一個暫存器可以記錄4bit=16進位1位的數。因此很適合製作用來計算4bit的程式。此外,將這個程式改造的話能夠進行減法運算。

1.輸入code
2.位置50~51輸入計算問題,如下表示:
50=被加數
51=被減數

如果想計算8+9的話,可依照右下圖的順序輸入。

3.按下RESET、1、RUN,執行程式。

  執行後,數字LED會顯示計算結果。如果發生需要進位的情況,2進LED的最右邊登(0號)會發光。
  8+9的情況會像下圖顯示。

  8+9在16進位是11,因為發生了進位,2進LED亮燈表示第二位,第一位由數字LED燈表示。

<資料記憶體的寫入>

  MA命令是將資料記憶體的內容寫入Ar中的命令。這個命令執行後「位置(50+Yr的值)」的值會被寫入。
  例如,00~01的TIY命令中,Yr被代入了1,這意味著「以位置51」的值進行處理。接著在02位置中執行MA,將只2定的記憶體中的值寫入Ar。另外,M+這個指令也是用同樣的位置(50+Yr)進行寫入。

<2進LED的亮燈>

  CAL SETR這個命令是讓2進LED其中一個燈發光的命令。讓想發光的bit編號的值放入Yr中。例如想讓最左邊的6號燈發光,就將6寫進Yr中。

<程式解說>

  利用M+命令,進行16進位1位加法。

  需要進位的情形,執行flag=1。由於JUMP命令只在執行flag=1時執行,可以作為是否進位的判斷依據。

<進行減法運算>

  將記憶體內容如右改變的話,就能將加法運算變成減法。

  如此依來,位置50的便是被減數,51則是減數(被減數-減數)。如果計算的結果是負數,則2進LED的0號燈會發亮,數字LED燈的值則是以2的補數的型式表示(參照下頁)。

  舉例來說,如果是計算1-2的情況,結果由於是負數亮起了2進LED,而且數字LED燈會將-1以補數的形式「F」表示。


Program4


  2進位的幻影閃爍

  利用CAL SIFT這個命令的程式。在程式中依據這個命令,能夠讓2進LED發出如水流般的流動的效果燈光。看起來很鮮豔,因此也能夠享受這個特效。

1.輸入code
2.按下RESET、1、RUN,執行程式
3.程式執行後,按下任何一個鍵。按下鍵後,2進LED的6號燈會發光。接著會自動從左到右一個一個發光並熄滅。

  按住按鍵的期間,會持續從最左邊的燈發出光。因此如果控制按下按鍵的時間點以及持續時間的話,能夠展現出不同的模樣。

*Keyword
bit shift:

  所謂的bit shift是將特定的bit進行移位的演算法之一。GMC-7中有CAL SIFT這個命令,能夠將Ar中的內容向右移一個bit。
  舉例來說,如果Ar中的數字為9:

                      (執行前)1001=9
                                      ↓
位移後,前方追加0→0100[1],溢出的1捨去
                                      ↓
                      (執行後)0100=4

  結果9變成了4。由此看來這命令具有將數字/2的功能(小數點捨去)。

<資料記憶體的寫入>

  所謂的AM命令,是為了將Ar的值裝入記憶體中的命令。裝入的位置和MA命令相同,由Yr指定。

程式解說

  CAL DSPR的命令是讓複數個2進LED發發光的命令。亮燈的資料是由資料記憶體位置5E~5F裝載。5F控制左邊3個bit燈,5E負責右邊4個bit燈。

  bit shift一次是移動4個bit,一開始先是進行5F的位移,接下來是5E的位移。為了讓亮燈有連續的流動感,5F這邊的燈亮完之後(6→5→4),將5E的值+上8(也就是2進位的1000),如此一來便能讓3號燈發光(4→3)。

   bit3號燈開始亮的時機點是由,5F這邊的值位移前是奇數還是偶數來判斷的。如果是奇數(XXX1),則bit4號燈必然發光,因此bit3號燈也必須跟著強制發光。

   如果有按下按鍵,為了讓bit6號燈開始發光,則必須將5F的內容+8(也就是1000)。雖然說放入4(0100)也能夠讓6號燈發光,但因為放入的是8,可以讓發光的時間稍微延遲一下(因為要進行移位1000→0100)。

  按下按鍵之後,強制將bit7的值套入1(利用+8)。

bit 反轉

  所謂的bit 反轉,是將bit的編碼倒轉(0→1;1→0)的一種演算法。GMC-4中有「CAL CMPL」這個命令,使用這個就能夠將Ar的內容進行bit反轉。
  以下是「CAL CMPL」的簡介。原本Ar的值是9,將9進行反轉之後就得到了6。

(執行前)            1001=9
                         ↓
(執行後)            0110=6


Program5


  數字LED燈的類比發光

  利用PMM技術,將數字LED的明亮階段性改變的程式。PMM指的是Pulse Width Modulation」,以中文來說就是「脈衝寬度調變」。在PMM控制系統中,波狀信號(脈衝)發出的時候,改變信號的ON及OF的時間上的比例。這樣一來,就能夠進行介於ON及OF兩者之間微妙的類比輸出。

1.輸入code
2.按下RESET、1、RUN,執行程式
3.執行程式後,數字LED會用8階段的明亮顯示「0」(因為處理速度的因素,可能會變得有點閃爍的樣子)

  亮燈逐漸變暗之後,又會開始逐漸變亮,會一直循環進行這個過程。按下RESET中斷。

  亮燈是利用減法的循環,熄燈則是利用加法的循環來控制時間。

<程式解說>

  在程式中依據LED的亮燈與熄燈進行高速切換,就能夠表現出中間的明亮。LED燈的亮燈與熄燈,為了讓殘像能夠順利出現,必須在一瞬間就切換完畢。因此,比起使用「CAL TIMR」命令,這裡較適合利用處理更加快速的「AIA」及「JUMP」命令所組成的循環,處理時間的等待。

  0A~11是為了處理熄燈用的循環處理。
16~1A則是為了處理亮燈用的循環處理。依據上圖的樣子分配熄燈與亮燈的比例,就能控制LED的明亮度。

  這個程式是從熄燈:亮燈=1:8的比率開始,最後變成8:1。然後再用相反的順序回到1:8。

  記憶體位置50的地方,存有LED燈明亮度的值。雖然存放的值是1~F,不過因為每次都是使用兩個數進行加減,所以總共只有8個階段。

<使切換速度變慢>

  位置33及3D為計數用的加值。將這個值設定成1的話,明亮的切換速度就會減半;設成4的話則變成兩倍速。


Program6


  計算最大值

  在處理資訊的領域中的固定班底,也就是「sort(分類)」。執行這個程式,就能夠將資料記憶體中的值由大到小排列,並求出當中的最大值。要進行分類的處理的話,比較用的命令是不可或缺的,不過GMC-4中並沒有。因此利用加法(或減法)的命令進行比較。另外,將這個程式改造的話也能作出求最小值的程式。

1.輸入code
2.從50~5E的輸入15個值,隨意寫進0~F喜歡的值就可以了。
  例如,如果想從50開始輸入0、1、2...(略)...D、E的話,依照下圖的順序輸入。

3.RESET、1、RUN輸入後執行程式。執行程式後,數字LED會顯示結果。

<程式解說>

  這個程式執行時,會將記憶體的內容由大到小排列。排列的方法是跟鄰近的值比較大小,較大的情況內容就會被置換(記憶體位置不移動,內容移動)。在這裡是由0D~12進行50+Yr跟51+Yr的內容的比較。位置12的M+命令執行後,如果需要進位的情況(也就是執行flag=1的情況),則能判斷(51+Yr)中的值較大。此時的比較,是利用bit反轉並求出補數後利用加法來進行的。

  排列的順序就是,50和51比較、51和52比較這樣,從50:51開始到5D:5E,一邊和附近位置的值進行加法一邊執行。這樣子置換完畢的時候就是第一個循環的結束,要將這個循環重複14次。如此一來就會自動地將最大值寫入位置50的地方。

  1A和1B中,使用了兩次「CH」命令。這兩個是為了將執行flag強制變成1的命令,沒有特別的意義。因為執行flag變成1之後,就能夠讓之後的CAL命令確實執行(所有的CAL命令在執行flag=0時會直接通過)。

  執行了這個程式也只能表示最大值。實際上有沒有確實分類,就到50~5E確認看看吧。
按下RESET、5、0、A SET之後,按INCR14次,確認每一個位置的值。


Program7


  亂數音樂播放

  利用亂數播放音樂的程式。所謂的亂數就是「不規則的數」。這個程式中,是根據資料記憶體的值的計算,製作出類似亂數的效果。根據計算結果就能夠產生不規則的旋律,不過偶爾聽起來很規律也不一定。

1.輸入code
2.RESET、1、RUN,執行程式。
3.程式執行後,依據亂數播放音樂。按下RESET可中斷。


Program8


  猜拳

  能夠跟CPU享受猜拳樂趣的遊戲。本來猜拳應該是要同時出拳,在這裡是玩家按下數字鍵的瞬間由亂數決定對手的出拳。這個程式是利用數學方式進行勝負的判定。

1.輸入code
2.RESET、1、RUN,執行程式。
3.程式執行後,數字LED會高速切換,這時處於待輸入按鍵的狀態。

  決定好想出的拳後,從0~2中按下任何一個鍵(0=石頭、1=剪刀、2=布)。
  輸入按鍵之後,數字LED會立刻表示0~2的數字,這是代表CPU的出權。如果玩家勝利的話會演奏結束音,輸的話演奏錯誤音,平手的話是短音。
  勝負將會不斷持續下去,想結束遊戲的話請按RESET。

<程式解說>

  這裡是將石頭、剪刀、布分別以0、1、2表示。將自己和CPU的出拳轉換成數字,再利用減法的話就能夠判斷勝負。如果減法的結果是負數,則再額外+3(使負變正)。

0=平手/1=輸/2=贏

附帶一提,如果按4以上的鍵則100%勝


Program9


  以一定的節奏持續演奏的程式。不只利用亂數發出音,還像是「每N回有1回發出X的音階」這樣,利用數學的方式決定演奏的音階的順序。

1.輸入code
2.按下RESET、1、RUN,執行程式。執行中,電腦會持續計數,當計數的值為3的倍數時,演奏高音;7的倍數時,低音。除此之外都演奏中間的音程,當3跟7的倍數同時成立時,3的倍數優先。要停止時按下RESET。

<flowchart>

  位置50的地方負責3的倍數的計數。計數的處理是每次增加1,當值=3時回到0。利用同樣的方法,位置51的地方負責的是7的倍數的計數。

<音程的改變方法>

  右邊的記憶體位置分別代表「3的倍數」「7的倍數」「除此之外」的三種情況的音程。值越大音程越高,F或0的情況則是靜音。


Program10


  槍戰

  兩人遊玩的比誰快得按的遊戲。互相競爭彼此反射神經的敏銳度。
  這由遊戲是活用電腦的正確性以及回應的快速性,規則便是能夠配合上信號並先一步按下按鍵的那方獲勝。這個程式是將KA、CAL TIMR、CAL SETR這類命令適當地組合起來使用的。

1.輸入code
2.RESET、1、RUN,執行程式。
3.程式執行後,約8秒之後會在2進位LED的bit3號燈發光。

  把這當作信號按下4或7,一位玩家負責一個鍵,先按下去的那方獲勝。如果比起亮燈的時間提前按下按鍵的話就因為偷跑而輸了,請注意。

  依據LED燈的顯示結果判定勝負,分別是:

4贏的情況
7贏的情況
4偷跑的情況
7偷跑的情況

  重新輸入1次,RESET、1、RUN,就能夠再次進行遊戲。

<程式解說>

  一開始等待1.6秒,之後進行0.4秒*15回=6秒的循環處理。這其間如果被輸入按鍵就強制中斷。在沒有人按鍵的情況下循環處理結束後,就進入到比誰先按的階段。判定是依據4、7的順序執行。因此4的那方比較有利。
Comments