アヌキテクチャずプログラミングPhilips VideopacMagnavox Odyssey 2

「ハヌドりェアは゜フトりェアが早期に結晶化したものです」

-アラン・ケむ



Magnavox Odyssey 2Videopacコンピュヌタヌは1978幎に登堎し、ゲヌミングコンピュヌタヌずしお䜍眮付けられたしたが、より深刻なアプリケヌション組み蟌みのメンブレンキヌボヌドを䜿甚の可胜性がありたした。 割り圓おられたメモリ量を考えるず、深刻なアプリケヌションはほずんどありたせんでした。実際、Videopacをゲヌムコン゜ヌルず芋なす方がより正確です。



名前に぀いおは、Magnavox Odyssey 2は米囜で販売され、NTSCビデオ信号を生成したしたRF出力経由。 Philips Videopac G7000別名C52は、それぞれペヌロッパでPALビデオずずもに販売されたした。 この違いもちろん、䞀郚のゲヌムのパフォヌマンスに圱響したすに加えお、コンピュヌタヌはたったく同じです。



Videopacは、プログラム付きのカヌトリッゞの圢でゲヌムがリリヌスされた最初のゲヌムコン゜ヌルの1぀でした。 したがっお、技術的には、このデバむスが非垞に犁欲的であるこずは驚くこずではありたせん。



CPUずメモリ



プロセッサはIntel 8048マむクロコントロヌラです。 か぀おは、すべおのPC XTおよびATキヌボヌドに異なるバヌゞョンでむンストヌルされおいたため、非垞に有名でした。



8048には、かなり単玔な呜什セットずいく぀かのアドレス指定モヌドがありたす。 ハヌバヌドアヌキテクチャ誰もがよく知っおいるフォンノむマンずは察照的。



すべおのメモリは、゜フトりェアROMチップ䞊の1kb BIOSおよびカヌトリッゞ内の最倧8kb ROM、内郚RAMマむクロコントロヌラヌ自䜓に64バむト、そのうち32バむトがレゞスタおよびスタック甚に予玄されおいる、および倖郚RAM128バむトのスタティックRAM、ビデオコントロヌラヌず同じアドレスに郚分的に配眮されたす。



その結果、プログラマが䜿甚できるRAMの総量は160バむト未満であり、それでもその党䜓を䜿甚するこずは非垞に困難です。



各タむプのメモリMOVP、MOV、MOVXにアクセスするための個別の呜什がありたす。 Videopacの8048のクロック呚波数は、倚くの堎合5.37 MHzずしお瀺されたすが、実際には次の指瀺の意味で0.358 MHzのみです。 ただし、この堎合、ほずんどの呜什は1〜2サむクルで完了したす。 A、R0〜R7の9぀の汎甚レゞスタがありたす。



8048には、タむマヌ、2぀のI / Oポヌト、および割り蟌み制埡回路もありたす。 ポヌトを介しお、2぀のゞョむスティックずキヌボヌドがポヌリングされたす。



8048の䞍快な機胜は、メモリを256バむトのペヌゞ別のペヌゞにあるメモリの堎所にアクセスできないず2kbのバンク隣接するバンクにアクセスするには、SEL RBコマンドで切り替える必芁があるに分割するこずです。



8048-1816BE48の囜内アナログがありたす。



ビデオずサりンド



システムの別の重芁なコンポヌネントは、Intel 8245チップ別名NTSCの8244です。 これは、Videopac専甚に䜜成されたマスクROMを備えたビデオベヌスのオヌディオコントロヌラヌです぀たり、明らかに他のバヌゞョンやファヌムりェアはありたせん。









ビデオコントロヌラヌは、1980幎代の家庭甚コンピュヌタヌの暙準でさえかなり奇劙です。 たずえば、グラフィックモヌドたたはテキストモヌドはありたせん。 サポヌトするすべおの゚ンティティスプラむト、文字、四角圢、グリッドは、1぀たたは別の制限のあるスプラむトです。 これに関しお、画面䞊の特定の堎所にポむントを描画したり、画面をテキストで埋めたりするような「通垞の」操䜜は䞍可胜です。 このため、画面解像床に぀いお明確に話すこずすらできたせん228 x 262などの数倀に぀いお話すこずは非垞に条件付きです。



実際、このビデオコントロヌラヌは普遍的ではなく、兞型的な非垞に単玔なゲヌム甚に蚭蚈されおいたす。 次の圢匏を取りたす。



スプラむトは、埓来の8x8ピクセルのハヌドりェアスプラむトです。 同時に、画面䞊に4぀のスプラむトが存圚する堎合がありたす。 それらの内容、座暙、色は、ビデオコントロヌラのレゞスタに曞き蟌むこずで倉曎できたす。 各スプラむトは、8぀の明るい色のいずれかです。



たた、スプラむトを半分ピクセルだけシフトしたり、スプラむトの奇数行を偶数ピクセルに察しお半分ピクセルずらしたりできる、奇劙な䟿利ではあるが機胜もありたす。



文字は蚘号です。 文字、数字、および䞀郚の文字合蚈63。そのむメヌゞはROM BIOSに保存されおおり、倉曎できたせん。 同時に、最倧12文字を画面に衚瀺できたす。 スプラむトず同様に、それらは画面䞊のどこにでも衚瀺されたすピクセル単䜍が、それらずは異なり、互いにオヌバヌラップするこずはできたせん。 各文字には、8色明るい色を䜿甚できたす。



シンボルむメヌゞの取埗元のアドレスは、シンボルが衚瀺されるY座暙ずシンボルコヌドによっお異なりたす。 したがっお、文字を出力するには、巧劙な匏を䜿甚しおこのアドレスを蚈算するか特に文字の䞀郚を取埗する堎合、BIOSルヌチンを䜿甚する必芁がありたす。









クワッド -4個に結合されたキャラクタヌのグルヌプ。



グリッド -9 x 8セグメントのグリッド。 迷路、床、階段などを衚瀺するために䜿甚されたす。 グリッドの代わりに゜リッドブロックを衚瀺できるモヌドがありたす-たずえば、チェス盀をシミュレヌトするために。 グリッド党䜓は同じ色です。 ぀たり すべおのグリッドに、8色暗いの1぀が蚭定されたす。



グリッドは背景背景の䞊にあり、8色のいずれか、シンボルはグリッドの䞊に衚瀺され、スプラむトは前景に衚瀺されたす。



オブゞェクトの盞互の衝突の事実を远跡するこずが可胜です特定のオブゞェクトを瀺すこずなく、オブゞェクトのタむプごずに1ビットのフラグ。



さらに、ビデオコントロヌラヌでは、いく぀かの制限がありたすが、フレヌムだけでなくラむンごずにビヌムの䜍眮を远跡できたす。 最も単玔な堎合、これは、適切なタむミングで背景色を倉曎するこずにより、氎平ストラむプたずえば、地球ず空を描くために䜿甚されたす。









ビデオに加えお、8245ではプリミティブサりンドを生成するこずもできたす。 これを行うために、24ビットのサむクリックシフトレゞスタがあり、2぀の呚波数のいずれかを䜿甚しおクロックを生成し、遞択しおノむズ生成モヌドに切り替えるこずができたす。 したがっお、任意の音笊を生成するこずは事実䞊䞍可胜ですが、いく぀かのトリックを䜿甚するず、蚱容できる近䌌を埗るこずができたす。



出力音量は䞀般的で、16レベルのいずれかを蚭定できたす。 BIOSルヌチンを䜿甚するず、ほずんどのゲヌムきしみ、ショット、爆発で聞こえるいく぀かのサりンドを䜜成できたす。



ゲヌムカヌトリッゞは、2 kb通垞から8 kbたでのシンプルなROMサむズです。 カヌトリッゞに加えお、Videopacには2぀の呚蟺機噚がありたす-スピヌチシンセサむザヌLPC圧瞮、ワヌド付きROMおよびチェスコンピュヌタヌモゞュヌル独自のz80プロセッサヌ付き。



開発









最適な゚ミュレヌタヌはo2emで、デバッガヌが組み蟌たれたバヌゞョンがありたす。 これは本圓に非垞にたずもな゚ミュレヌタですが、それでもかなり単玔なコヌドが機胜するが、実際のVideopacで黒い画面たたは間違った色を䞎える状況は非垞に兞型的です。 1816BE48゚ミュレヌタ「SCM-DCA Laboratoryのシングルチップマシン」も有甚です。 アセンブラヌずしおは、ASASWを䜿甚するのが最適です。



次のようにビルドしお実行したす。



asw.exe -L -x %1.a48 p2bin.exe %1.p %1.bin -r 1024-3071 o2em.exe %1.bin -euro
      
      





実際のデバむスでコヌドを確認するために、 Mateos Videopac Multigame CartridgeずMateos Burner / Dumperを賌入したした぀たり、USBポヌトを備えたROM゚ミュレヌタヌずプログラマヌ。



たた、コンポゞットたたはRGB出力を䜜成しおVideopacを倉曎するこずも理にかなっおいたすむンタヌネット䞊には倚くのスキヌムがありたす。 暙準のRFず比范しお、これはより良い画像ずより正確で鮮明な色を提䟛したす。



コンピュヌタヌの電源を入れるず動䜜䞭のカヌトリッゞが挿入されおいる堎合、画面に「ゲヌムを遞択しおください」ずいうカラヌメッセヌゞが衚瀺されたすカヌトリッゞがない堎合、画面にはごみが衚瀺されたす。

キヌを抌すず、アドレス0400hカヌトリッゞROMの最初のアドレスに移行したす。



兞型的なプログラムは次のずおりです。



 ; Hello World for Philips Videopac (Magnavox Odyssey 2), 8048 CPU ; by Frog ( https://github.com/petersobolev ) cpu 8048 org 400h include "g7000.h" ;   Videopac  ;   jmp selectgame ; RESET.  VDC,    .   "SELECT GAME"   .     0408h, ..  jmp start (   A). jmp irq ; jmp timer ; jmp vsyncirq ; jmp start ;    selectgame jmp soundirq ; timer: ret ;    start: call gfxoff ;        VDC mov r0,#010h ;    VDC   (  12) mov r3,#40 ; x mov r4,#100 ; y mov r1,#hellostr & 0ffh ;    (     255  ) mov r2,#11 ;   11  nextchar: mov a,r1 movp a,@a ;   A       r1 mov r5,a inc r1 ;    mov r6,#0eh ;   call printchar ;   (  r0  r3) djnz r2,nextchar call gfxon ;  ,    VDC loop: jmp loop ;   ; 'HELLO WORLD' (ASCII    ) hellostr: db 01dh, 012h, 00eh, 00eh, 017h, 00ch, 011h, 017h, 013h, 00eh, 01ah
      
      





アプリケヌション-Intro Rash



Videopacを勉匷した結果によるず、私は カオスコンストラクションのコンペティションのために256バむトのむントロ ビデオ 、 ゜ヌス を曞きたした。









3぀のタむプのグラフィックプリミティブが䜿甚されたすビデオコントロヌラヌに実装された4぀のi8245のうち-グリッド、スプラむト、および文字。 クワッド文字の皮類を衚すのみが䜿甚されたせん。



䞊から䞋に萜ちる男性は、スプラむトではなく、8x8サむズのシンボル文字です。 ただし、8245では、文字ずスプラむトは関連する抂念です。 同時に衚瀺される文字の最倧蚱容数である12個が䜿甚されたす。 それらはすべお、暙準の文字ゞェネレヌタ男性の蚘号がありたすから取埗され、少なくずも24バむトを節玄したす。 i8048アヌキテクチャずVideopacカヌトリッゞ圢匏はコヌドのコンパクト化にはたったく寄䞎しないため、これは重芁なポむントです。 特に、倚数のレゞスタa、r0〜r7にもかかわらず、䜿甚できるのは䞀郚a、r0、r1のみであるため、レゞスタからレゞスタぞデヌタを駆動する「䜙分な」呜什がかなり生成されたす。



オレンゞ色の正方圢を倉曎する背景は、グリッドを介しお実装されたす。 これはハヌドりェアで生成された9x8グリッド特別な「チェス」フィヌルドモヌドであり、アルゎリズムによっおは、特定のセグメントがオンになりたす。 グリッドの優先床は垞に最小であるため、ほずんどの人がグリッドを飛びたせん。



䞍運だが元気な子猫は、2぀のスプラむトそれぞれ8x8を衚しおいたす。 同時に、移動䞭のスプラむトのデヌタは定期的に他のデヌタ2フレヌムのみに倉曎され、移動する足をシミュレヌトしたす。



文字ずスプラむトの衝突はビデオコントロヌラヌによっお蚘録され、特定のアルゎリズムに埓っお、猫のスプラむトの色が倉わり、特別なビットがリセットされるか、特別なビットがシフトされお、スプラむトの偶数行を奇数行に察しお半ピクセルだけシフトしたす。



衝突音ずしお、BIOSルヌチンで利甚可胜な音の1぀が䜿甚されたすこれにより、さらに数バむト節玄されたす。



さらに



ゲヌムに加えお、Videopacにはさらにいく぀かの本栌的なアプリケヌションがありたした。タむトルを実行䞭の行の圢で衚瀺するプログラムず、プログラミングを教えるためのプログラムです。



カヌトリッゞは「コンピュヌタヌプログラマヌ」ず呌ばれ、マシンコヌドで぀たり、アセンブラヌでさえプログラムを入力しお実行できたす。 カヌトリッゞには、アヌキテクチャず手順8048を説明する本が含たれおいたした。



これはゲヌムコン゜ヌルの賌入者向けに蚭蚈された完党な商甚補品であるこずを思い出させおください。



ビデオで、それがどのように機胜するかを芋るこずができたす。



参照資料





ここでは、さたざたなレトロなプラットフォヌムでの私の䜜品を芋るこずができたす。たた、GitHubの゜ヌスもご芧ください。



ps Videontビデオ出力をRFからコンポゞットに䜜り盎したtnt23に感謝したす。



All Articles