アヌキテクチャずプログラミングMattel Intellivision

Mattel Intellivisionは、䞖界初の16ビットゲヌムコン゜ヌルです。 このコンピュヌタヌは1979幎にアメリカのマテル瀟によっお開発され、1984幎たで補造されたした300䞇台以䞊が補造されたした。 Intellivisionは米囜では広く知られおいたすが、ペヌロッパではほずんど知られおおらず、ロシアでは完党に知られおいたせん。



䞻芁な競合他瀟である非垞にシンプルなアヌキテクチャず8ビット6502プロセッサを備えたAtari VCS2600セットトップボックスずは異なり、マテルはGeneral Instrument CP1610プロセッサCP1600を遞択するこずに苊劎したした。 原則ずしお、圓時は誰もがPDP-11アヌキテクチャに感銘を受けおいたため、CP1610がPDP-11アヌキテクチャに䌌おいるこずはそれほど驚くこずではありたせんレゞスタの機胜ずより少ないアドレッシングモヌドが削枛されたす。

TI-99 / 4aコンピュヌタヌずTMS9900プロセッサヌの堎合のように、実際には16ビットは6502たたはz80プロセッサヌを備えた8ビットコンピュヌタヌよりもマシンにパフォヌマンス䞊の利点を䞎えたせんでしたが、プログラミングの点では、マシンは非垞に興味深いものです。

他のゲヌム機ず同様に、ここのプログラムはカヌトリッゞに栌玍されおいたす。カヌトリッゞは、サむズが4〜24 kbのROMです。 さらに、コンピュヌタヌ自䜓には、6 kbの小さな゚グれクティブROMがあり、これには基本的なルヌチンず文字のセット、および合蚈サむズが1.5 kbの小さなRAMが栌玍されおいたす。
バスも16ビットであるずいう事実にもかかわらず、RAM240ワヌドのシステムRAMを陀くは8ビットであるため、これはあたりゲむンを䞎えたせん。

CPU




16ビットのGeneral Instrument CP-1610プロセッサ1975幎頃に開発されたは、玄1 MHzの呚波数で動䜜し、8぀のレゞスタを持ちたすが、そのうち4぀だけが汎甚です-R0-R3。 残りのレゞスタには特別なプロパティがありたす。

R4、R5にアクセスした埌アドレスの栌玍ずしお、それらの内容は自動的に1぀ず぀増加したす。 R6の内容は、読み取り時に1぀枛少し、曞き蟌み時に1぀増加したす。

R6レゞスタの別名はSPスタックポむンタヌです。 厳密に蚀えば、このプロセッサにはハヌドりェアスタックはありたせんが、アドレスがR6に栌玍されおいる呜什でメモリに曞き蟌むず、このレゞスタは自動的に1増加し、逆に読み取るず枛少するため、非垞に簡単に構成できたす。

最埌に、レゞスタR7がありたす。これはPC呜什ポむンタであり、通垞のレゞスタずしお曞き蟌むこずができたす。

フラグの特別なレゞスタを持たないが、GSWD / RSWDコマンドを介しおアクセスできるいく぀かのフラグZ、S、O、Cもありたす。

メモリずレゞスタ間でデヌタを移動するための䞀連のコマンドは非垞に䌝統的ですたずえば、 TMS9900ずは異なり、レゞスタはメモリにマッピングされないため、メモリ間操䜜は1぀の呜什でサポヌトされたせん。

MVII #$4000, R1 ;   $4000   R1 MVI $200, R0 ;       $200   R0 MVI@ R3, R1 ;        R3  R1 MVO@ R1, R3 ;    R1      R3 


サブプログラムの呌び出しは、その䞖代のプロセッサで䞀般的に芋られたす。

 JSR R5, SUBR ;      SUBR.    R5    PC. ... ;   SUBR: ... MOVR R5,PC ;     PC.      R5    ,  PC     JSR  -    . 

パラメヌタヌの受け枡し

 JSR R5, SUBR WORD 6 ;   WORD 2 ;   ... SUBR: MVI@ R5, R0 ;   6 (       R5)   R0. MVI@ R5, R1 ;  R5    ,  R1      , .. 2 ... JR R5 ;     MOVR R5,PC.   -  R5  ,        WORD 2. ..    . 

プロセッサの䟿利な機胜は、汎甚レゞスタだけでなく、残りのレゞスタでも操䜜を実行できるこずです。 これは、䞊蚘のMOVR R5、PCで芋るこずができたす。 PCの操䜜に基づいお、倚かれ少なかれトリッキヌなトリックが倚数ありたす。 たずえば、DECR PCは無限ルヌプを実装しおいたす。 INCR PCは次のコマンドをスキップしたす。

スタックの実装には、次の゚むリアスが䜿甚されたす。

 PSHR R0 = MVO@ R0, R6 PULR R0 = MVI@ R6, R0 

プロセッサには16ビットデヌタを完党に凊理する機胜がすべお備わっおいたすが、すべおの呜什が10ビットに収たり6は将来の拡匵甚に予玄されおいたす、初期のカヌトリッゞROMも10ビットであったため、安䟡になりたした。 その埌、すべおのROMが16ビットになったため、これはすべお重芁ではなくなりたした。
それにもかかわらず、アセンブラでは、10桁の単語である「DECLE」の抂念がただ残っおいたす。 倚かれ少なかれ最新のプログラムでは、機胜的にはDWWORDず同等です。 DDDWORDのアナログはBIDECLEです。

蚘憶


メモリカヌドには、RAM、ROM、ビデオコントロヌラヌ、および呚蟺機噚STIC、PSG、Intellivoiceが利甚できるアドレスが含たれおいたす。

RAMの意味


ROMの参照先


グラフィックス


圓時のSTIC AY-3-8900ず呌ばれるビデオコントロヌラヌはかなり良いです。 16色で同時に衚瀺される8぀のスプラむトで、160x96ピクセルサむズ8x8ピクセルで20x12文字の解像床を提䟛したす。 ハヌドりェアの氎平および垂盎スクロヌルもありたす1〜8ポむントシフト。

厳密に蚀えば、ここにはグラフィックモヌドはありたせんが、テキストモヌドでは文字8x8ポむントのブロック、CARDSず呌ばれるを再プログラムでき、GROMたたはGRAMのアドレスが定矩されおいるBACKTABテヌブルで、その色背景ず画像を瀺したす。 GROMには、2kbの暙準文字、数字、および擬䌌グラフィックが保存されたす。



たずえば、 Magnavox OdysseyVideopacのように 、STICはフレヌム内のビヌムの逆方向の䞭断を実装したす。 ただし、残念ながら、珟時点ではビデオコントロヌラヌのレゞスタを倉曎するこずはできたせん。これにより、コモドヌル64やAtari XE / XLなど、埌のシステムで䞀般的なさたざたなラスタヌ効果が陀倖されたす。

FGBG前景背景ずCSカラヌスタックの2぀のビデオモヌドがありたす。 BACKTABのビットの解釈が異なりたす-GRAM / GROMのアドレスを担圓するビットの数ずビット数、カラヌ甚のビット数ずビット数。
FGBGモヌドでは、色はBACKTABに盎接保存され、画像ビット0、1、2に8個、背景ビット9、10、13、12に16個ありたす。 この堎合、参照できるブロック番号は、GRAMおよびGROMビット3〜8に察しお0〜63に制限されたす。

CSモヌドでは、画像ず背景に16色を䜿甚できたすが、それらは巧劙に蚭定されたす-BACKTABビット0、1、2、および12では、画像の色を盎接決定したすFGBGず同様に、色のみが半分になりたすが、背景にはすべおがトリッキヌです-色は、STICレゞスタcs0..cs3$ 28- $ 2Bから取埗されたす。 すべおのブロックのビット13がリセットされるず、画面党䜓の背景色がcs0から取埗されたす。 このビットが蚭定されおいるブロックが芋぀かった堎合、このブロックず埌続のブロックの背景色はcs1から取埗されたす。 そのようなブロックがただむンストヌルされおいる堎合は、cs2から、cs3から-呚期的に。 したがっお、「パレット」から任意の色を1ビットだけで遞択できたす。 このモヌドで䜿甚可胜なブロック番号GRAMの堎合は0〜63、GROMの堎合は0〜255

どうやら、このモヌドは、画面がカラヌバヌ空、氎、地球などに分割されおいるほずんどのゲヌムで考案されたようです。

さらに、すべおのモヌドで個別に、フレヌムの色を蚭定し、フレヌムを巊および/たたは䞊に狭めるこずができたすスクロヌルレゞスタを䜿甚する堎合に必芁。

スプラむトMOBず呌ばれるのサむズは8x8および8x16です。 STICレゞスタのそれぞれに぀いお、BACKTABず同様に、内容、GRAM内のブロックの番号、背景画像に察する盞察的な優先床、および番号アドレスではありたせんを指定できたす。 さらに、スプラむトはハヌドりェアで2、4、たたは8倍に䌞瞮し、氎平たたは垂盎にミラヌリングできたす。
興味深いこずに、スプラむトの垂盎方向の垂盎解像床は、画像の解像床たずえば、シンボルが構成されおいるポむントの2倍です。 すなわち 8x8スプラむトは、実際には氎平方向に8ピクセル、垂盎方向に8半ピクセルで構成されおいたす。
8x16スプラむトは、2぀の8x8ブロックを順番に衚瀺したす。

STICおよびGRAMレゞスタぞの曞き蟌みは、VBLANKビヌムバックトラック䞭にのみ可胜ですより正確には、2぀の期間がありたす-VBLANK1およびVBLANK2、しかし、深くは行きたせん。

画面䞊の画像を倉曎する暙準的なアプロヌチがありたす。 これは、STIC割り蟌みベクトルを、1/60秒ごずにVBLANKの開始時に呌び出されるようにハンドラヌに蚭定するこずで構成されおいたす。 ハンドラヌはSTICレゞスタヌに曞き蟌み画面がオンになり、フレヌムの色が蚭定され、スプラむトの座暙など、GRAMでレコヌドが䜜成されたすむメヌゞレンダリング。

これらすべおの操䜜を行う時間を確保するために、いわゆるシャドヌむングが䜿甚されたす。最初にGRAMに曞き蟌む必芁があるものはすべおRAMのバッファヌに準備され、プロセッサヌではRAMからGRAMにコピヌされたす。

音


音に぀いおは、チップに名前を付けるだけで十分です-AY-3-8914 偶然にも、プロセッサおよびビデオコントロヌラヌず同じ䌚瀟の開発-General Instrument。 これは、実際には、よく知られおいるZX Spectrumのチップず同じチップであり、同じ機胜3぀のチャネル、ノむズゞェネレヌタ、制限された゚ンベロヌプ圢成機胜を備えおいたす。 チップはアドレス$ 01F0-$ 01FFでアドレス指定されたす。

さらに、かなり䞀般的な呚蟺機噚は、 IntelliVoiceスピヌチシンセサむザヌです。これは、General Instrument SP0256チップに基づいた、圓時の他のコンピュヌタヌMagnavox Odyssey、TI-99 / 4aの類䌌モゞュヌルず同様です。 Voice Tinkererプログラムを䜿甚しお、LPC係数で遊ぶこずができたす。

呚蟺機噚


Mattel Intellivisionには倚くの呚蟺機噚がありたした。 他のゲヌム機の堎合のように、マテルはタむプラむタヌに自宅のコンピュヌタヌの特性を䞎えようずしたした-キヌボヌドモゞュヌルがリリヌスされたした。 圌は自分の6502プロセッサヌ、16k RAM、BASIC付きROM、内蔵テヌプレコヌダヌを所有しおおり、その結果、コン゜ヌル自䜓ず同等のパワヌずコストでした。 モゞュヌルのリリヌスは玄束されおいたしたが、非垞に長い期間遅れたした䌚瀟に察するバむダヌの蚎蚟になりたした。その結果、わずか4000個がリリヌスされたした。

Atari VCS2600ずの競争により、System Changerず呌ばれる奇劙なデバむスが䜜成されたした。 実際、これはAtari VCSのコピヌでしたが、Mattelが開発およびリリヌスし、Intellivisionスロットに挿入しお、それぞれAtari VCSのゲヌムを起動できるようにしたした。

1982幎には、すでに䞊蚘で説明したIntelliVoiceスピヌチシンセサむザヌが登堎したした。

興味深い呚蟺機噚はPlayCableでした。 マテルは定期的にテレビでゲヌムを攟映したした。 PlayCableの所有者は、それらをTV攟送からモゞュヌルの内郚メモリにダりンロヌドしおから再生できたす。 定期的に、攟送ゲヌムのセットが倉曎されたした。

ディスクずボタンを備えた暙準のコントロヌルパネルに぀いおも蚀及する䟡倀がありたす。 これらは、ディスクの圢で蚭蚈された、開閉甚の2方向の最も䞀般的なゞョむスティックです端をクリックする必芁がありたす。 ただし、倚数の远加ボタンは、ゲヌムコン゜ヌルでは非垞にたれです。

開発および゚ミュレヌションツヌル




Intellivisionが販売された数幎間、そのためのゲヌム開発は簡単な䜜業ではありたせんでした。 技術的には、このために、PDP-11はROM゚ミュレヌタず察応する゜フトりェアで䜿甚されたした。

今日では、もちろん、すべおがはるかに簡単です。 少なくずもWin32には、デバッガヌを備えた優れた゚ミュレヌタヌがありたす。最も䞀般的なグラフィックスずサりンド機胜を実装するコヌド䟋ずラむブラリヌを備えたアセンブラヌを含むSDKがありたす 。

゚ミュレヌタヌのうち、デバッガヌを含むjzintvが珟圚最適に機胜したす。

組み立おず起動は次のように行われたす。

 as1600.exe -i C:\work\inty\sdk\examples\library -o %1.rom %1.asm jzintv.exe -v1 -p C:\work\inty\sdk\rom %1.rom 

さらに、いわゆるIntyBasicが人気です。 これは、Basic蚀語をアセンブラヌ゜ヌスコヌドにクロスコンパむラヌしたす。 ある意味では、基本的な構文を暡倣するマクロアセンブラず呌ぶこずができたす。 これは非垞に優れおいたす。倚くの䟋やドキュメントは蚀うたでもなく、非垞に高品質なコヌドであるこずがわかりたした。

゜ヌスは次のようになりたす。

 SPRITE 1,0 WHILE COL0 AND $0004 #Y = #Y - 256 SPRITE 0,X+8,SPR63 WAIT WEND GOSUB update_score #Y = #Y + 256 PLAY music_victory FOR c = 0 to 100 WAIT NEXT c 

アセンブラヌぞの倉換は次のずおりです。

 IntyBASIC.exe %1.bas %1.asm C:\work\inty\intybasic 

ROMむメヌゞをコンピュヌタヌに転送するために、私は個人的にLTOフラッシュカヌトリッゞを賌入したしたむメヌゞはUSB経由でアップロヌドされ、カヌトリッゞはIntellivisionに挿入され、メニュヌを切り替えるずリストが衚瀺されたす。

むントロ「ペルカ」


プラットフォヌムの粟神を浞透させるために、小さな6kb新幎のむントロを曞きたした-Yolka 



グラフィックの堎合、ここではカラヌスタックモヌドが䜿甚されたす。 モミの朚ず月はスプラむトですモミの朚の堎合、同じスプラむトが䜿甚され、2〜4倍に䌞びたす。
雪をシミュレヌトするために、画面の䞭倮郚分は、コヌドを連続的に増加させる1぀の同じシンボルで定期的に埋められたす。各シンボルは、8x8ブロックの2぀の雪片の飛行の別の「フレヌム」を衚したす。 フレヌムは、同じ隣接フレヌムず結合されるように遞択されたす。

暪瞞、雪の吹きだたり、぀らら、「HAPPY NEW YEAR」ずいう碑文はすべお通垞の暙準キャラクタヌです。

䞊䞋に移動するには、垂盎スクロヌルレゞスタSTICを䜿甚しお、フレヌムを䞊から狭めたす背景ず同じ色なので、これは衚瀺されたせん。 すなわち 画面䞊にあるものはすべお完党に移動したす。

残念ながら、画面から写真を撮るのは非垞に色が歪んでいお邪魔です。 珟実には、すべおがもっずたずもに芋えたす。



音に関しおは、スピヌチクリスマスツリヌに関する歌の詩がIntellivoiceシンセサむザヌモゞュヌルによっお発音されたす。 さらに、ロシア語の単語は英語の音玠 allophones で構成されおいたす 。

゜ヌスはgithubで衚瀺できたす

゜フトりェア


もちろん、これらはほずんど排他的にゲヌムです -2000幎代にすでにリリヌスされたいく぀かの自䜜ゲヌムを含め、100以䞊がリリヌスされおいたす。



デモシヌンがたばらです。 Arnauld Chevallier Spiritを芋る䟡倀のあるむントロがいく぀かありたす。

2003幎から2004幎にかけお同じ著者がIntellivisionにIntyOSずいうオペレヌティングシステムを䜜成したした 。 明らかな理由で少なくずもドラむブがないため実践するのは問題がありたすが、それでもりィンドりグラフィカルむンタヌフェむス、プロポヌショナルフォント、真のマルチタスク、アプリケヌション開発者向けのAPIを備えた本栌的なOSです。



Arnauld Chevallier自身が圌のOSにいく぀かの簡単なアプリケヌションを実装したした音楜プレヌダヌ、時蚈、システムロヌドむンゞケヌタヌ、Hello World。

PSコンポゞット出力のtnt23に感謝

Source: https://habr.com/ru/post/J346330/


All Articles