專利名稱:半導體存儲器和程序判別系統的制作方法
技術領域:
本發明涉及半導體存儲器和使用它的程序判別系統,特別涉及例如游戲機用的卡盒(cartridge)那樣的存儲程序的ROM等半導體存儲器和程序判別系統。
例如,游戲機用的卡盒預先將游戲機程序寫入到ROM那樣的半導體存儲器中,在使用時,再安裝在游戲機本體中。特別對于這種游戲機用的卡盒,到處可見非法復制其存儲內容即游戲程序的盜版物。
因此,本申請人如在以前的日本特開平2-31256號公報[G06F12/14]所公開的那樣,提出了一種能判別真假的系統,這種系統在不是正版卡盒的情況下,借助于禁止訪問程序存儲器,能夠防止游戲程序和其它程序的非法復制以及改變數據。
在這種以往的技術中,因用“地址解碼方式”,用從程序存儲器實際讀出的數據判別真假,所以有相當高的可靠性,能排除盜版物。
但是,在前述以往的技術中,因必須對多個地址進行解碼,所以不僅門電路數量增加,芯片尺寸增大,而且還有必須要解決的問題是,如果剖析了要解碼的地址,則失去防備非法利用的效果。
因此,本發明的主要目的是提供新穎的半導體存儲器和使用它的程序判別系統。
本發明的另一個目的是提供難于剖析并具有長期保護效果的半導體存儲器和使用它的程序判別系統。
本發明的半導體存儲器,固定地存儲由中央處理器執行的程序數據,并按照指定的地址輸出程序數據,包括固定地存儲程序數據的程序數據存儲器,發生數據運算碼的碼發生裝置,和接受按照地址數據從程序數據存儲器讀出的第1程序數據的輸出數據處理裝置,輸出數據處理裝置在有控制信號時,根據數據運算碼,對至少第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,在沒有控制信號時,輸出第1程序數據。
具體地說,輸出數據處理裝置包括用于對第1程序數據的至少一部分與數據運算碼進行運算、并輸出第2程序數據的運算裝置,和在提供控制信號時輸出第2程序數據、而在不提供控制信號時輸出第1程序數據的選擇器。
這種情況下也可以是,運算裝置包括多個運算器,它能分別執行不同種類的運算,并且各自接受第1程序數據及數據運算碼,能分別輸出不同的第2程序數據,碼發生裝置還發生選擇多個運算器中的任意一個的運算器選擇碼,選擇器選擇與根據運算器選擇碼選擇的運算器相關的第2程序數據或者第1程序數據。
本發明另一個方面的半導體存儲器包括固定存儲程序數據的程序數據存儲器,發生數據運算碼的碼發生裝置,和接受從程序數據存儲器輸出的第1程序數據的輸出數據處理裝置,輸出數據處理裝置在有控制信號時,根據數據運算碼,對至少第1程序數據的一部分進行第1運算,將第1運算后的新的第2程序數據輸出,在沒有控制信號時,根據數據運算碼,對至少第1程序數據的一部分進行與第1運算不同的第2運算,將第2運算后的新的第3程序數據輸出。
這時,輸出數據處理裝置的第1和第2運算的任何一種運算,將第1程序數據變換成應該在中央處理器中正規執行的程序數據。
本發明的程序判別系統,包括固定存儲程序數據的程序存儲器,和從程序存儲器讀出程序數據并執行程序、同時判別程序是否正規的中央處理器,程序存儲器包括固定存儲程序數據的程序數據存儲器,發生數據運算碼的碼發生裝置,和接受按照地址數據從程序數據存儲器讀出的第1程序數據的輸出數據處理裝置,輸出數據處理裝置在由中央處理器提供控制信號時,根據數據運算碼,輸出對至少第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,并將這種第2程序數據提供給中央處理器,在沒有提供控制信號時,將第1程序數據提供給中央處理器,中央處理器包括將控制信號提供給程序存儲器的輸出數據處理裝置的控制信號提供裝置,緊接著提供控制信號之后輸出地址數據并提供給程序數據存儲手段的地址輸出裝置,和判斷第2程序數據與預先設定的檢查數據是否為規定的關系,以判斷程序存儲器真假的判斷裝置。
中央處理器還包括在判斷裝置的判斷結果為假的程序存儲器時,強制地結束程序的程序強制結束裝置。
在半導體存儲器中,在對從程序數據存儲器讀出的特別程序數據進行應答、將從中央處理器輸出的控制信號提供給輸出數據處理裝置時,輸出數據處理裝置根據來自碼發生裝置的數據運算碼,輸出對第1程序數據的全部位或者一部分位進行運算的第2程序數據,并將這種第2程序數據提供給例如中央處理器。具體地說,輸出數據處理裝置的運算裝置對第1程序數據和數據運算碼進行運算,并輸出第2程序數據,選擇器對控制信號進行應答,輸出第2程序數據。因此,從輸出數據處理裝置對控制信號進行應答,輸出的不是按照從中央處理器輸出的地址數據讀出的第1程序數據,而是輸出修飾處理這種第1程序數據后的第2程序數據。
在中央處理器中,用判斷裝置判斷第2程序數據是否與預先設定的檢查數據一致。如果兩個數據一致,則判斷裝置判斷這時的半導體存儲器(程序ROM)是真的,如果兩個數據不一致,則判斷裝置判斷這時的半導體存儲器是假的,并強制地結束程序。
因此,即使復制存儲在程序數據存儲器中的全部程序數據,在沒有本發明的輸出數據處理裝置的情況下,也因為判斷為程序檢查的結果為假,所以不可能執行程序。
此外,在輸出數據處理裝置中分別設置能執行不同種類運算的多個運算器的情況下,選擇器選擇第2程序數據,這種第2程序數據是由根據碼發生裝置輸出的運算器選擇碼選擇的運算器輸出的。
此外也可以,當有控制信號時,輸出用第1運算處理第1程序數據后的第2程序數據,當沒有控制信號時,輸出用第2運算處理第1程序數據后的結果的第3程序數據。這種場合,輸出數據處理裝置的第1和第2運算的任何一種運算,將第1程序數據變換成應該用中央處理器正規執行的程序數據。即、第2程序數據或者第3程序數據是正規的程序數據。
采用本發明,則如果僅復制程序數據存儲器的全部的程序數據,不能剖析輸出數據處理裝置中的運算裝置和運算碼等全部要素,則因不能與正版產品相同執行這種程序數據,所以能有效地防止非法使用程序。
此外,如果對于每個機種或者版本,改變運算裝置中的運算種類、數據運算碼或者指定運算器的運算器選擇碼等要素,則即使能剖析某1個程序存儲器的全部要素,但也因不能使這種分析結果原封不動地適用于其它的程序存儲器,所以非法利用者必須對每次改變重新剖析,如果考慮到剖析需要很多的時間和設備,則采用本發明就能做到實質上不能非法使用程序。
下面,參照附圖對本發明的實施例詳細地進行說明,以便進一步明確本發明的前述目的、特征和優點。
圖1表示本發明一實施例的方框圖。
圖2表示圖1實施例的輸出數據處理單元一例的方框圖。
圖3表示圖1中的CPU的存儲器映射的圖。
圖4是表示圖1實施例的動作流程圖。
圖5是表示圖4流程圖中檢查程序的流程圖。
圖6表示輸出數據處理單元的變形例的方框圖。
圖7表示輸出數據處理單元的另一變形例的方框圖。
實施例,圖1所示的本發明一實施例的信息處理裝置10包含作為中央處理器的CPU12,作為輸出裝置的顯示器14和作為輸入裝置的操作輸入裝置16與該CPU12相連。信息處理裝置10構成程序判別系統,在這種信息處理裝置10為游戲機裝置時,操作輸入裝置16是游戲控制器,包括操縱桿和十字鍵或者各種操作按鈕,裝在游戲機裝置上的CPU12,對這種操作輸入裝置16的操作進行應答,通過處理存儲在程序ROM18中的游戲程序,將游戲圖像顯示在例如電視監視器或液晶顯示器等顯示器14上。此外,與CPU12連接的工作存儲器20用例如CPU12的內部RAM或外附RAM等構成,在前述的程序處理過程中,根據需要使用上述工作存儲器,同時將它用來暫時存儲用于后述的判別程序真假的檢查程序和檢查數據。若利用工作存儲器20和CPU12的內部RAM,則能使程序剖析更加困難。
起到半導體存儲器或者程序存儲器作用的程序ROM18是例如PROM、快擦寫ROM、EPROM、EEPROM等預先固定存儲程序數據的只讀半導體存儲器。這種程序ROM18,除了相當于以往稱為程序ROM的存儲器核心部分即程序數據存儲器22之外,還包括輸出數據處理單元24和碼存儲器26。在本實施例中,將程序數據存儲器22、輸出數據處理單元24和碼存儲器26設置在同一個半導體芯片上。此外,從CPU12輸出的地址數據通過地址總線提供給程序數據存儲器22。程序數據存儲器22按照該地址數據讀出程序數據并提供給輸出數據處理單元24。輸出數據處理單元24,處理從程序數據存儲單元22讀出的程序數據,并通過數據總線將其輸出給CPU12。
此外,如后所述,輸出數據處理單元24根據通過控制總線由CPU12供給的控制信號和由碼存儲器26供給的碼(數據),對輸出程序數據進行處理。
圖2示出了輸出數據處理單元24的具體的一例。如圖2所示,輸出數據處理單元24包括作為運算裝置的運算器28和選擇器30。運算器28在程序ROM18的芯片內形成,是例如乘法器、除法器、減法器、加法器、移位寄存器或者其它簡單的邏輯運算器(例如AND、NAND、OR、NOR、EX-OR等)。
從程序數據存儲單元22讀出的例如8位第1程序數據D0-D7的高4位D4-D7保持原樣與選擇器30的輸出數據合成,低4位D0-D3用作為運算器28的一部分輸入和選擇器30的一部分輸入(Y)。運算器28的另一部分輸入由作為碼發生裝置的碼存儲器26設定的4位數據運算碼d0-d3提供。運算器28對兩部分輸入執行前述種類的任何一種運算,并將其輸出供給選擇器30,作為另一部分輸入(X)。例如運算器28為AND時,運算器28輸出數據運算碼d0-d3與低4位D0-D3的邏輯積的結果D0’-D3’,并提供給選擇器30作為前述的另一部分輸入。
將前述的控制信號、例如寫入信號從CPU12提供給選擇器30。因此,選擇器30對這種控制信號、即寫入信號進行應答,選擇另一部分輸入(X),將第1程序數據D0-D7的低4位D0-D3置換成運算結果D0’-D3’并輸出。另一部分面,從程序數據存儲單元22讀出的第1程序數據D0-D7的高4位D4-D7,如前所述,原封不動直接作為選擇器30的輸出,所以其結果從選擇器30、即輸出數據處理單元24輸出D0’-D3’+D4-D7的共計8位的第2程序數據。
此外,當沒有從CPU12將寫入信號提供給選擇器30時,在選擇器30中因選擇的是前述一部分輸入(Y),所以原封不動地從選擇器30輸出程序數據的低4位D0-D3,其結果從輸出數據處理單元24原封不動地輸出D0-D3+D4-D7的共計8位的程序數據、即第1程序數據。
這樣,在后述圖5的步驟S12中,向CPU12不是輸出第1程序數據D0-D7,而是輸出第2程序數據D0’-D3’+D4-D7。另一部分面,在沒有輸出數據處理單元24的假程序ROM的情況下,向CPU12原封不動地輸出從程序數據存儲單元22讀出的第1程序數據D0-D7。因此,在前者的情況下,向CPU12輸入的第2程序數據與預先設定的檢查數據一致,但是后者的情況下,第1程序數據與檢查數據不一致。
此外,在圖2的實施例中,在運算器28中僅將程序數據的低4位與運算碼進行運算,高4位原封不動地輸出。但是,也可以用運算器28對第1程序數據的全部8位進行運算。這種情況下,如圖2中括號所示的的那樣,將從程序數據存儲單元22讀出的第1程序數據D0-D7的全部8位原封不動地提供給運算器28作為一部分輸入,將來自碼存儲器26的8位數據運算碼d0-d7提供作為另一部分輸入。因此,從運算器28輸出對全部的位進行修飾處理后的第2程序數據D0’-D7’,將這種第2程序數據D0’-D7’供給作為選擇器30的一部分輸入(X),將第1程序數據D0-D7供給作為選擇器30的輸入(Y)。因此,在有控制信號時,從選擇器30輸出第2程序數據D0’-D7’,在沒有控制信號時,輸出第1程序數據D0-D7。因此,在圖5的步驟S13中,判斷第2程序數據D0’-D7’是否正確。
圖1的CPU12具有圖3所示的存儲器映射圖,例如“0000h~DFFFh”的存儲器空間是分配給程序ROM18的程序區,“E000h~FFFFh”是分配給工作存儲器20的工作區。
程序ROM18的程序數據存儲器22是前述程序區的一部分,在程序區中還進一步設定程序常駐區、檢查程序區和檢查開始命令區。用后述的圖4和圖5的流程圖能實現存儲在檢查程序區中的檢查程序。
此外,在檢查程序中設定1個或者多個檢查數據。這種檢查數據要與執行檢查程序時的結果所示的數據進行比較,是用于判別程序真假的數據。例如,在本實施例中,因為僅對程序真假進行1次檢查的情況進行說明,所以如圖3所示,在檢查程序內設定1個檢查數據,但若在本體程序(例如游戲程序)的多個地方設定使利用單一檢查數據的檢查程序起動的檢查開始命令,或在多個地方設定分別使利用多個檢查數據的多個檢查程序起動的檢查開始命令,則能多次檢查程序的真假,并能增加程序剖析的困難性。
此外,在檢查程序比較小(例如幾到幾十字節)的情況下,最好在本體程序內的多個地方設定檢查程序來代替檢查開始命令,這樣能進一步增加檢查程序剖析的困難性。
參照圖4,一接通信息處理裝置10(圖1)的電源(未圖示),則CPU12首先執行步驟S1。在這種步驟S1中,CPU12讀入從程序ROM18(圖1)的輸出數據處理單元24輸出的程序數據。這時,因為CPU12沒有輸出控制信號,所以原封不動地輸出從程序數據存儲單元22輸出的第1程序數據。CPU12讀入這種第1程序數據。然后在步驟S2,判斷這種第1程序數據是否為表示執行程序的真假檢查的特別程序數據。
如果在步驟S2中為“否”,即這時的程序數據并不是命令執行真假檢查的數據時,在步驟S3按照這時的程序數據進行處理。在步驟S3的后面步驟S4中,CPU12判斷程序是否結束,如果是“是”,則就這樣結束程序,如果是“否”,則返回到前面的步驟S1。這樣,借助于重復步驟S1-S4,依次執行存儲在程序數據存儲器22中的程序。在這種狀態中,因為在輸出數據處理單元22的選擇器30中沒有賦予控制信號(例如寫入信號),所以在選擇器30中保持選擇輸入(Y)的狀態,因此,將由CPU12輸出的第1程序數據原封不動地提供給程序存儲器22。
借助于重復步驟S1-S4,在依次執行程序包含的各個命令過程中,一旦將用于執行檢查程序的命令輸入到CPU12,就在步驟S2對其進行判斷,并進入到步驟S5。這種命令、即特別程序數據,在設定為如圖3所示例如地址“030Eh”時,CPU12在到達地址“030Eh”時,進入到步驟S5。
在步驟S5,CPU12讀入設定在圖2所示的程序區中的檢查程序和檢查數據,并寫入到工作存儲器20中(進行復制)。因此,步驟S6按照復制在工作存儲器20中的檢查程序和檢查數據來執行。但是,復制在這種工作存儲器20中的檢查程序在檢查結束后將從工作存儲器20中消失。
圖5示出了步驟S6的子程序的細節。在圖5的步驟S11中,CPU12首先通過控制總線發生控制信號,使包含在圖1所示的程序ROM18中的輸出數據處理單元24開始工作。具體地說,CPU12通過控制總線將寫入信號(控制信號)提供給程序ROM18的選擇器30。因為通常在執行ROM內的程序時,不將寫入信號提供給ROM(只讀存儲器),所以借助于將這種信號輸出給程序ROM18,使輸出數據處理單元24的選擇器30選擇輸入(X)。這種步驟S11構成控制信號提供裝置。
但是,也可以不僅利用前述的寫入信號作為控制信號,而且在CPU12執行程序ROM18的程序數據存儲器22的特定地址時,將控制信號提供給選擇器30。這種情況雖然未圖示,但只要采用下述結構即可,即設置逐次比較從CPU12通過地址總線輸出的地址數據與這種特定地址的比較器,并且用這種地址比較器檢測出兩個地址一致時,將控制信號提供給選擇器30。
接著,在步驟S12中,CPU12輸出用于讀出程序ROM18的程序數據存儲器22的地址數據。也就是說,在緊接著步驟S11輸出控制信號后,在用作地址輸入裝置的步驟S12中,將任意的地址數據從CPU12通過地址總線輸入給程序數據存儲單元22。程序數據存儲單元22按照這種地址數據讀出程序數據,并將其提供給輸出數據處理單元24。因為預先將控制信號提供給輸出數據處理單元24,所以輸出數據處理單元24如前述圖2的實施例所述進行處理,并將這種處理結果的第2程序數據提供給CPU12。
接著,在步驟S13中,CPU12判斷在輸出數據處理單元24處理后的第2程序數據是否為正確的值。也就是說,步驟S13構成判斷裝置,比較工作存儲器20中讀出的檢查數據與這時的第2程序數據,并判斷兩者是否一致。從按照輸出數據處理單元24規定的規則處理的第2程序數據,應該與預先設定的檢查數據一致。因此,這種場合,為“是”。但是,在沒有設置輸出數據處理單元24的假的程序ROM的場合,或者即使存在與輸出數據處理單元24相當的部分,但是不按照輸出程序數據處理規定的規則進行的假的程序ROM的場合,則在這種步驟S13判斷為“否”。
接著,在步驟S13判斷為“是”的真的程序ROM的場合,返回到通常的程序處理。另一部分面,在判斷為“否”的假的程序ROM的場合,在接著的步驟S14中,CPU12在顯示器14(圖1)上顯示例如“該程序ROM(卡盒cartridge)是盜版的,不能在本機上使用”那樣的警告信息,同時在步驟S15強制地結束程序。因此,在假的場合,不能進行其后程序的繼續處理。也就是說,步驟S14和S15相當于程序強制結束裝置。
此外,如前所述,在作為判斷手段的步驟S13中,是對第2程序數據與預先設定的檢查數據是否一致進行比較,但是兩者不必要一定一致,也可以是兩者預先設定的規定的關系。例如,一部分比另一部分僅大一定的數或者小一定的數,或者對一部分(和/或者另一部分)進行一定的運算時兩者一致,或者兩者的絕對值相等等關系,能設定成任意規定的關系。
在圖2的實施例中,程序數據如果用適當的設備,也能以完整的形式從程序數據存儲器22讀出程序數據,并能對其進行復制。但是,在圖2的實施例中,從程序數據存儲器22僅能提取程序數據并對程序數據進行復原,而不能象正版產品那樣,執行這種程序數據。
也就是說,即使僅復原程序數據,但對非法利用這種程序ROM18的程序數據的人來說,其存儲器中沒有輸出數據處理單元24和碼存儲器26的情況下,即使讀出表示進行程序檢查的程序數據,也因不能執行前述的程序數據的修飾處理,所以未修飾的第1程序數據D0-D7原封不動地輸入給CPU12中。因此,即使有這種檢查命令,也將第1程序數據D0-D7原封不動地輸入給CPU12中。這種情況的第1程序數據與圖2實施例得到的第2程序數據D0’-D3’+D4-D7不同。因此,在步驟S13與預先設定的檢查數據比較中,成為不一致。因為一得到這種不一致的判別結果,就在步驟S13判斷為“否”,所以強制地結束程序。
為了避免這種程序的強制結束,必須剖析圖4的步驟S2中指令其檢查開始的特別程序數據及其程序步驟(地址),并且必須進一步剖析運算器28中的運算種類、數據運算碼以及檢查程序中設定的檢查數據(圖2)等全部要素。例如在用掩膜ROM等作為程序ROM18的情況下,這種剖析是很困難的,并且在剖析中需要相當的設備和很長的時間。另一部分面,如果例如每一個程序ROM機種、卡盒的每個游戲名稱,或者即使是相同機種(游戲名稱),但每個版本都改變運算器中的運算種類或數據運算碼,那么即使剖析了某個程序ROM的全部保密要素,但這種剖析結果也不能原封不動地適用于其它的程序ROM,所以對于非法利用者來說,必須每次重新分析全部要素。因此,采用這種實施例,如果考慮到剖析所要的大量時間和費用,則能實質上做到不能非法使用程序ROM。
圖6是圖2實施例的變形例,在圖6的實施例中,輸出數據處理單元24的運算裝置包括多個(n個)運算器281-28n。將從程序數據存儲單元22讀出的第1程序數據的低4位D0-D3提供給各個運算器281-28n的各自的一部分輸入,將從碼存儲器26輸出的4位數據運算碼d0-d3共同地提供給各自的另一部分輸入。此外,將設定在碼存儲器26中的運算器選擇碼c0-cX與控制信號一起提供給選擇器30。對應于運算器的個數n,設定運算器選擇碼c0-cX的位數,在有4個運算器28的情況下是2位,在8個的情況下用3位即可。此外,設定運算器選擇碼c0-cX,以便選擇多個運算器281-28n中的任何一個。
在圖6的實施例中,因為各個運算器281-28n與圖2實施例的運算器28相同,對程序進行運算和修飾,所以省略這種程序數據運算的具體說明,但在圖6的實施例中,設定成使運算器281-28n執行各自不同種類的運算。因此,如果對于例如每個程序ROM機種(游戲名稱),或者每個版本,根據運算器選擇碼c0-cX選擇不同的運算器,則進一步增加圖2說明的程序剖析的困難性。因此,使非法利用更困難。
在這種圖6的實施例中,還有其它的優點。即如圖2的實施例所示,在1個芯片上僅形成1個運算器,在根據機種和版本改變這種運算器時,當程序ROM是例如掩膜ROM時,則每次運算器的改變都必須改變燒制掩膜。而與上述不同的是,如圖6所示,如果預先內部裝有多個運算器281-28n,則能僅改變運算器選擇碼,就能選擇運算器,即選擇運算的種類。另一部分面,因運算器選擇碼能用與數據運算碼相同的燒制工序設定,所以在圖6的實施例中,在改變運算器的情況下,能廉價制成程序ROM。
在圖6的實施例中,也因選擇器30在供給控制信號時選擇輸入(X),在不供給控制信號時選擇輸入(Y),所以對應于控制信號的有無,輸出第1程序數據或者第2程序數據。此外,在圖6中,也用括號示出了修飾處理第1程序數據D0-D7的全部位的情況。這種動作因為根據前述圖2實施例的說明很容易理解,所以省略其說明。
此外,在前述的實施例中,在有控制信號時,由輸出數據處理單元24輸出用運算器28(281-28n)運算一部分或者全部后的程序數據(第2程序數據),在沒有控制信號時,選擇從程序數據存儲單元22讀出的程序數據(第1程序數據)并照原樣輸出。但是,在沒有控制信號時,也可以輸出對第1程序數據進行與第2程序數據不同的第2運算后的第3程序數據。
圖7示出了這種實施例。在圖7的實施例中,除設置與圖2的實施例相同的運算器28和選擇器30外,還在輸出數據處理單元24中設置第2運算器28’。此外,在運算器28和28’的各自的一部分輸入原封不動地提供從程序數據存儲單元22讀出的程序數據D0-D7(第1程序數據)的低4位D0-D3。在運算器28和運算器28’的各自的另一部分輸入共同提供在碼存儲器26中設定的4位數據運算碼d0-d3。運算器28和28’能執行相互不同的第1種類運算和第2種類運算。
運算器28輸出數據運算碼d0-d3與低4位D0-D3的第1運算結果D0’-D3’,并提供給選擇器30的輸入(X)。運算器28’輸出數據運算碼d0-d3與低4位D0-D3的第2運算結果D0”-D3”,并提供給選擇器30的另一部分輸入(Y)。由選擇器30選擇這種來自運算器28和28’的輸入D0’-D3’或者D0”-D3”。
由CPU12將控制信號、例如寫入信號提供給選擇器30,同時提供存儲在碼存儲器26中的運算器選擇碼c0-cX。因此,選擇器30在有這種控制信號時,選擇運算器28的輸出、即輸入X,并輸出由這種運算器28處理的低4位的程序數據D0’-D3’。此外,選擇器30在沒有這種控制信號時,選擇運算器28’的輸出、即輸入(Y),并輸出由這種運算器28’處理的低4位的程序數據D0”-D3”。
另一部分面,因為使第1程序數據D0-D7的高4位D4-D7原封不動地直接作為選擇器30的輸出,所以其結果在有控制信號時,從選擇器30、即輸出數據處理單元24輸出D0’-D3’+D4-D7的共計8位的程序數據(第2程序數據),在沒有控制信號時,從選擇器30、即輸出數據處理單元24輸出D0”-D3”+D4-D7的共計8位的程序數據(第3程序數據)。
另外,在這種圖7的實施例中也可以如圖7中的括號所示,利用運算器28和運算器28’,對程序數據D0-D7的全部位進行運算。
在圖7的實施例中,從程序數據存儲單元22讀出的第1程序數據D0-D7不是CPU12正規執行的程序數據。即,第1程序數據不過是假的程序數據。然后,第1運算器28和第2運算器28’的任何一個運算器改變乃至變換第1程序數據D0-D7,變成由CPU12正規執行的第2程序數據或者第3程序數據。即,第2程序數據或者第3程序數據中的某一個程序數據是正確的程序數據。
在圖7的實施例中,在想要非法使用程序時,不僅對第1運算器28,而且對第2運算器28’也必須要剖析,進一步增加了剖析的困難性。
前述的實施例是在程序ROM18中設置輸出數據處理單元24,加工乃至修飾從程序數據存儲單元22讀出的程序數據。但是,同樣的考慮方法也適用于提供給程序數據存儲器22的地址數據,也能加工乃至修飾程序數據和地址數據。
為此,在實施例中,在程序ROM18中除程序數據存儲器22外,包括圖1所示的輸出數據處理單元24和碼存儲器26,此外,還設置接受從CPU12通過地址總線輸出的地址數據并對這種地址數據進行規定處理的地址處理單元(未圖示)。具體地說,這種地址處理單元執行與前述說明了的輸出數據處理單元24相同的動作,處理乃至修飾從CPU12輸出并應該提供給程序數據存儲器22的地址數據。這種情況下,將來自CPU12的控制信號提供給輸出數據處理單元24和地址處理單元兩方面,在圖5的步驟S11中使輸出數據處理單元24和地址處理單元都開始工作。然后,在地址處理單元中,加工或者修飾從CPU12輸出的地址數據,并提供給程序數據存儲器22。因此,在圖5的步驟S13中輸入到CPU12中的是按照在地址處理單元處理過的地址數據從程序數據存儲器22讀出并且在輸出數據處理單元24處理過的程序數據。
此外,在前述任一個實施例中,都使用在程序ROM18同一芯片上形成的碼存儲器26作為碼發生手段。但是,這種碼發生手段只要是能將任意的碼(數據)提供給運算手段的就可,例如也可以置換成利用扳動開關等提供任意數據的結構或從外部能重寫存儲任意數據的外附的快擦寫ROM等。
此外,在前述的實施例中,在假程序的情況下,是直接強制結束程序的執行,但是也可以這樣,例如在一定時間后強制結束,或者在游戲時重寫主人公的參數,或者消去游戲的后備數據,或者返回到游戲開始的狀態等。
前面雖然詳細地對本發明進行了說明和圖示,但這僅僅用來作為圖解和例子,因此顯然不能理解為一種限定,本發明的精神和范圍僅由所附的權利要求來限定。
權利要求
1.一種半導體存儲器,固定存儲由中央處理器執行的程序數據,并按照指定的地址數據輸出程序數據,其特征在于,包括固定存儲所述程序數據的程序數據存儲器,發生數據運算碼的碼發生裝置,和接受按照所述地址數據從所述程序數據存儲器讀出的第1程序數據的輸出數據處理裝置,所述輸出數據處理裝置在有控制信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,在沒有所述控制信號時,輸出所述第1程序數據。
2.如權利要求1所述的半導體存儲器,其特征在于,所述輸出數據處理裝置包括用于對所述第1程序數據的至少一部分與所述數據運算碼進行運算、并輸出所述第2程序數據的運算裝置,和在提供所述控制信號時輸出所述第2程序數據、而在不提供所述控制信號時輸出所述第1程序數據的選擇器。
3.如權利要求2所述的半導體存儲器,其特征在于,所述運算裝置包括多個運算器,所述多個運算器能分別執行不同種類的運算,并且各自接受所述第1程序數據及所述數據運算碼,能分別輸出不同的所述第2程序數據,所述碼發生裝置還發生選擇所述多個運算器中的任意一個的運算器選擇碼,所述選擇器選擇與根據所述運算器選擇碼選擇的運算器相關的所述第2程序數據或者第1程序數據。
4.如權利要求1至3任一項所述的半導體存儲器,其特征在于,所述程序數據存儲器包含命令利用所述中央處理器在程序執行中輸出所述控制信號的特別程序數據。
5.如權利要求1至4任一項所述的半導體存儲器,其特征在于,將所述程序數據存儲器、所述碼發生裝置和所述輸出數據處理裝置裝在一個半導體芯片上。
6.如權利要求1至5任一項所述的半導體存儲器,其特征在于,用快擦寫存儲器構成所述程序數據存儲器和所述碼發生裝置。
7.一種半導體存儲器,固定存儲由中央處理器執行的程序數據,并按照指定的地址數據輸出程序數據,其特征在于,包括固定存儲所述程序數據的程序數據存儲器,發生數據運算碼的碼發生裝置,和接受按照所述地址數據從所述程序數據存儲器讀出的第1程序數據的輸出數據處理裝置,所述輸出數據處理裝置在有控制信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行第1運算,將第1運算后的新的第2程序數據輸出,在沒有控制信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行與所述第1運算不同的第2運算,將第2運算后的新的第3程序數據輸出。
8.如權利要求7所述的半導體存儲器,其特征在于,所述輸出數據處理裝置的第1和第2運算的任何一種運算,將所述第1程序數據變換成用所述中央處理器正規執行的程序數據。
9.一種程序判別系統,包括固定存儲程序數據的程序存儲器,和從所述程序存儲器讀出程序數據并執行程序、同時判別所述程序是否正規的中央處理器,其特征在于,所述程序存儲器包括固定存儲所述程序數據的程序數據存儲器,發生數據運算碼的碼發生裝置,和接受按照由所述中央處理器輸出的地址數據、從所述程序數據存儲器讀出的第1程序數據的輸出數據處理裝置,所述輸出數據處理裝置在有來自中央處理器的控制信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,并將這種第2程序數據提供給所述中央處理器,在沒有提供所述控制信號時,將所述第1程序數據提供給所述中央處理器所述中央處理器包括將所述控制信號提供給所述輸出數據處理裝置的控制信號提供裝置,緊接著提供所述控制信號之后輸出地址數據并提供給所述程序數據存儲器的地址輸出裝置,和判斷所述第2程序數據與預先設定的檢查數據是否為規定的關系,以判斷所述程序存儲器的真假的判斷裝置。
10.如權利要求9所述的程序判別系統,其特征在于,所述控制信號提供裝置包含在所述程序存儲器中預先設定的特別程序,并在讀出所述特別程序的時刻提供所述控制信號。
11.如權利要求9或10所述的程序判別系統,其特征在于,所述中央處理器還包括在所述判斷裝置的判斷結果為假的程序存儲器時,強制結束程序的程序強制結束裝置。
12.一種半導體存儲器的地址控制方法,所述半導體存儲器包含固定地存儲由中央處理器執行的程序數據的程序數據存儲器,其特征在于,所述方法包括下述步驟(a)發生數據運算碼,(b)在有控制信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,(c)在沒有所述控制信號時,輸出所述第1程序數據。
13.一種半導體存儲器的地址控制方法,所述半導體存儲器包含固定存儲由中央處理器執行的程序數據的程序數據存儲器,其特征在于,所述方法包括下述步驟(a)發生數據運算碼,(b)在有控制信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,(c)在沒有所述控制器信號時,根據所述數據運算碼,對至少所述第1程序數據的一部分進行與所述第1運算不同的第2運算,將運算后的新的第3程序數據輸出。
14.一種信息處理裝置的程序判別方法,所述信息處理裝置包括固定存儲程序數據的程序存儲器,和從所述程序存儲器讀出程序數據并執行程序的中央處理器,其特征在于,所述方法包括下述步驟(a)發生數據運算碼,(b)輸出控制信號,(c)借助于緊接著所述步驟(b)從所述中央處理器輸出地址數據,從所述程序數據存儲器得到第1程序數據,(d)在有控制信號時,根據所述數據運算碼,輸出對至少第1程序數據的一部分進行運算,將運算后的新的第2程序數據輸出,并將這種第2程序數據提供給所述中央處理器,(e)在沒有所述控制信號時,將所述第1程序數據提供給所述中央處理器,(f)由所述中央處理器判斷所述第2程序數據與預先設定的檢查數據是否為規定的關系。
全文摘要
本發明揭示一種半導體存儲器和使用它的程序判別系統。所述半導體存儲器包含程序ROM,該程序ROM中所含的輸出數據處理單元的運算器對從程序數據存儲器讀出的第1程序數據的低4位D0-D3與相同程序ROM中所含的碼存儲器設定的4位地址運算碼d0-d3進行運算,并輸出運算結果D0’-D3’。選擇器將D0-D3置換成D0’-D3’,因此從輸出數據處理單元輸出D0’-D3’+D4-D7的共計8位的第2程序數據。
文檔編號G06F21/22GK1309356SQ01104578
公開日2001年8月22日 申請日期2001年2月14日 優先權日2000年2月14日
發明者下村勝 申請人:任天堂株式會社