プレフィックスp2の゚ミュレヌタヌ、たたはCHIP16に぀いお少し蚘述したす。

前回の短い蚘事で、 70幎代からの叀いCHIP-8ゲヌムプラットフォヌムの゚ミュレヌタヌを構築する原理に぀いお説明したした。 ここでは、盞続人の䞀皮であるCHIP16に぀いお説明したす。 CHIP16ずは正確には䜕ですか

CHIP16-「架空の」ゲヌムコン゜ヌル。「鉄」には存圚したせんでした。 その仕様党䜓は、 英語を話す1぀のフォヌラムから愛奜家によっお開発されたした。 重芁な点は、゚ミュレヌタヌの蚘述を可胜な限り単玔化しお、適切な文曞ずコミュニティヌのサポヌトを埗るこずにありたす。 したがっお、プログラミングの初心者でも、ほがすべおのプログラミング蚀語で完党に機胜する゚ミュレヌタヌをれロから䜜成できたす。 すぐにここで゚ミュレヌタコヌドの䟋を提䟛しないこずを予玄しおください。目暙は単にこのプラットフォヌムに぀いお話すこずです。 そしお、もちろん、すべおが楜しみのためだけです


背景


そしお、仕様はバヌゞョン1.1を取埗し、䞻な欠陥が修正され、このプラットフォヌム甚のゲヌムやその他のプログラムアセンブラヌ、デバッガヌ、むメヌゞコンバヌタヌなどを䜜成するための䞻芁なツヌルが䜜成されたため、2010幎のどこかですべおが始たりたした。 同じCHIP-8ずの䞻な違いは、より倧きな画面解像床、より倚くの色、より倚くの挔算およびその他の呜什の存圚、改善されたサりンドサポヌト、および文曞化されおいない機胜の欠劂です。

プレフィックスには、16ビットプロセッサ、メモリ、2぀の入力デバむスDendyなどのゞョむスティック、サりンドおよびビデオサブシステムがありたす。 この束党䜓をより詳现に怜蚎しおください。

CPU

プロセッサには以䞋が含たれたす。

各オペコヌドプロセッサコマンドの実行には正確に1サむクルかかり、プロセッサは1 Mhzの呚波数で実行されたす。 ここでは、実際に、呚波数が最埌たで明確になるたで予玄を行い、それぞれが1 Mhzよりも高速で゚ミュレヌタでコマンドを実行したす。 ゚ミュレヌション速床が最倧になる堎合がありたす。 䞀般的に、これに぀いお気にするこずはできたせんが。

蚘憶

64Kb65536バむトのみ。 メモリは次のように割り圓おられたす。
0x0000-バむナリデヌタの開始
0xFDF0-スタックの先頭512バむト。
0xFFF0-I / Oポヌトゞョむスティックの状態を远跡するためのI / O。

映像

画面の解像床は320x240ピクセルです。 同時に衚瀺される色の数は、暙準パレットから16です。
パレットのむンデックス16。 䟡倀色
0x00x000000背景レむダヌで透明な黒
0x10x000000黒
0x20x888888灰色
0x30xBF3932èµ€
0x40xDE7AAEピンク
0x50x4C3D21ダヌクブラりン
0x60x905F25ブラりン
0x70xE49452オレンゞ色
0x80xEAD979黄色
0x90x537A3B緑色
0xA0xABD54A薄緑
0xB0x252E38玺
0xC0x00467F青
0xD0x68ABCC氎色
0xE0xBCDEE4スカむブルヌ
0xF0xFFFFFF癜

独自のカラヌパレットを蚭定するこずができたす。 画面のリフレッシュレヌトは60フレヌム/秒で、各フレヌムはVblank内郚フラグを蚭定したす玄16ミリ秒ごず。 プロセッサには、 VBLNK呜什を䜿甚しおフレヌムレンダリングの完了を埅぀機胜がありたす。 画像はスプラむトから圢成され、ビデオメモリぞの盎接アクセスはありたせん。 スプラむトが描画されるメむンレむダヌに加えお、画面党䜓を16色のいずれかで塗り぀ぶす背景レむダヌがありたす。

画面はミラヌリングされおいないため、物理座暙に収たらないものはすべお画面の背埌に残り、衚瀺されたせん。 スプラむトは負の座暙たたは320x200を超えるを持぀こずができたす。 4x4ピクセルのスプラむトを取埗し、たずえば座暙-2、-2に描画するコマンドを䞎えるず、画面の巊䞊隅に2x2ピクセルのスプラむトの䞀郚が衚瀺されたす。

したがっお、パレットには16の可胜な色があるため、画面䞊の1ポむントを゚ンコヌドするには4ビットが必芁です。 1バむトは2ポむントのブロックです。 最小のスプラむトは1バむトで構成されたす-これは2x1スプラむト2ポむントです。 暙準パレットの癜色はむンデックス0xFhの色であり、黒色はむンデックス0x1hの色であるこずを考慮しお、8x5ピクセルのスプラむトを゚ンコヌドする方法の䟋を芋おみたしょう

合蚈20バむト。 ぀たり8 x 5/ 2 = 20

新しいスプラむトが画面䞊の既存のピクセルず重耇する堎合色がれロのピクセルを陀く-透明、キャリヌフラグが蚭定されたす。 したがっお、ゲヌム内の画面䞊の衝突やオブゞェクトの衝突を远跡できたす。
暙準ではなく独自のカラヌパレットを割り圓おるために、特別なPALプロセッサコマンドがありたす。 パレットの各色は、RGB圢匏の3バむトで構成されおいたす。 16色のみが䜿甚されるため、PALコマンドはメモリから48バむトの配列を読み取り、RGBコンポヌネントをむンデックス0x0、0x1、..、0xFの色に割り圓おたす。 プロセッサがVBLNKコマンドを受信するず 、パレットが倉曎されたす。

音

初期バヌゞョンでは、䞀定のミリ秒数の間、3぀の固定トヌン500Hz、1000Hz、1500Hzのみを再生する機胜がありたしたが、その埌、 ADSRタむプのサりンドゞェネレヌタヌを䜿甚する機胜が远加されたした

入力デバむスゞョむスティック

ゞョむスティックからの情報ぞのアクセスは、メモリI / Oポヌトを介しお行われたす。 最初のゞョむスティックは0xFFF0、2番目は0xFFF2です。
ビット[0]-アップ
ビット[1]-ダりン
ビット[2]-å·Š
ビット[3]-右
ビット[4]-遞択
ビット[5]-開始
ビット[6]-A
ビット[7]-B
ビット[8-15]-未䜿甚、垞にれロ。

したがっお、0xFFF0のメモリからレゞスタに倀を読み取り、察応する蚭定ビットをチェックするこずにより、最初のゞョむスティックでどのボタンが珟圚抌されおいるかを远跡できたす。

画像ファむル圢匏ROMファむル

ROMファむル暙準拡匵子.c16には、ヘッダヌずヘッダヌの盎埌のバむナリデヌタが含たれおいたす。 ヘッダヌからの情報を䜿甚しお、仕様のバヌゞョンなどを刀断できたす。ヘッダヌのサむズは16バむトの䞀定です。 そのフォヌマット
オフセット予定
0x00マゞックナンバヌ「CH16」
0x04予玄枈み
0x05仕様バヌゞョン最初の4ビット=メゞャヌバヌゞョン、2番目の4ビット=サブバヌゞョン、぀たり0.7 = 0x07および1.0 = 0x10
0x06ROMファむルサむズヘッダヌを含たず、バむト単䜍
0x0A開始アドレスPCコマンドカりンタヌ倀
0x0CCRC32チェックサムヘッダヌを含たず、倚項匏= 0x04c11db7

すぐ埌にバむナリデヌタが続きたす。バむナリデヌタは垞にアドレス0x0000から始たるメモリに読み蟌たれる必芁がありたす。 コマンドカりンタヌは、ヘッダヌの倀に埓っお蚭定する必芁がありたす。 通垞、これは0x0000です。

ROMファむルは比范的最近仕様に導入されたため、ヘッダヌがたったくない堎合がありたす。

フラグレゞスタ

ビット[0]予玄枈み
ビット[1]c-キャリヌフラグ笊号なしオヌバヌフロヌ
ビット[2]z-れロフラグ
ビット[3]予玄枈み
ビット[4]予玄枈み
ビット[5]予玄枈み
ビット[6]o-オヌバヌフロヌ笊号付き数倀のオヌバヌフロヌ
ビット[7]n-負負笊号フラグ


条件付きゞャンプコマンドの条件タむプ

条件は、条件付きゞャンプゞャンプ呜什たたは条件付き呌び出しサブルヌチン呜什に䜿甚されたす。 たずえば、「jle label」たたは「cno some_label2」。 角括匧は、条件がトリガヌされたずきのフラグの状態を瀺したす。
Z0x0[z == 1]等しいれロ
Nz0x1[z == 0]等しくない非れロ
N0x2[n == 1]è² 
Nn0x3[n == 0]非負正たたはれロ
P0x4[n == 0 && z == 0]ポゞティブ
O0x5[o == 1]オヌバヌフロヌ
いや0x6[o == 0]オヌバヌフロヌなし
A0x7[c == 0 && z == 0]䞊蚘笊号なしより倧きい
ええ0x8[c == 0]等しい笊号なし以䞊
B0x9[c == 1]以䞋眲名なし
BE0xA[c == 1 || z == 1]等しい笊号なし、以䞋
G0xB[o == n && z == 0]より倧きい眲名
GE0xC[o == n]より倧きいたたは等しい眲名
L0xD[o= n]未満眲名
LE0xE[o= n || z == 1]未満たたは等しい眲名


代替ニヌモニックも䜿甚できたす。
NC0x8[c == 0]キャリヌなしAEず同じ
C0x9[c == 1]キャリヌBず同じ


CPUコマンド

CHIP16オペコヌドは、正確に4バむト32ビットかかりたす。
HHは最䞊䜍バむトです。
LLはマむナヌな戊いです。
N-ニブル4ビット倀。
X、Y、Z-4ビットのレゞスタ識別子。

オペコヌドニヌモニック䜿甚する
00 00 00 00いや操䜜なし、1プロセッササむクルのみ
01 00 00 00CLSスクリヌンクリヌニングメむンレむダヌはクリアされ、背景色はむンデックス0の色に蚭定されたす
02 00 00 00Vblnk垂盎同期を期埅しおください。 フレヌムが描画されなかった堎合、PC- = 4
03 00 0N 00BGC NむンデックスNで背景色を蚭定したす。むンデックスが0の堎合、背景色は黒です
04 00 LL HHSPR HHLLスプラむトサむズの蚭定幅LLおよび高さHH
05 YX LL HHDRW RX、RY、HHLLXおよびYレゞスタで指定された座暙でHHLLメモリのアドレスからスプラむトを描画したす。結果はキャリヌフラグに圱響したす
06 YX 0Z 00DRW RX、RY、RZレゞスタXおよびYで指定された座暙で、レゞスタZが指すメモリのアドレスからスプラむトを描画したす。結果はキャリヌフラグに圱響したす
07 0X LL HHRND RX、HHLLレゞスタXに乱数を入れたす。最倧倀はHHLLによっお蚭定されたす
08 00 00 00フリップ0、0スプラむト衚瀺の方向を蚭定したす。 氎平フリップ= NO、垂盎フリップ= NO
08 00 00 01フリップ0、1スプラむト衚瀺の方向を蚭定したす。 氎平反転= NO、垂盎反転= YES
08 00 00 02フリップ1、0スプラむト衚瀺の方向を蚭定したす。 氎平フリップ= YES、垂盎フリップ= NO
08 00 00 03フリップ1、1スプラむト衚瀺の方向を蚭定したす。 氎平フリップ= YES、垂盎フリップ= YES
09 00 00 00SND0停止音
0A 00 LL HHSND1 HHLL500HzトヌンHHLLミリ秒で再生
0B 00 LL HHSND2 HHLL1000HzトヌンHHLLミリ秒で再生
0C 00 LL HHSND3 HHLL1500Hz HHLLトヌンミリ秒を再生
0D 0X LL HHSNP RX、HHLLHHLLで指定された珟圚のサりンドゞェネレヌタヌに埓っお、HHLLミリ秒のサりンドトヌンを再生したす。
0E AD SR VTSNG AD、VTSRサりンドゞェネレヌタヌADSR
A =攻撃0..15
D =枛衰0..15
S =持続0..15、ボリュヌム
R =リリヌス0..15
V =ボリュヌム0..15
T =音の皮類
  • 00 =䞉角波
  • 01 =のこぎり波
  • 02 =脈波今のずころは正方圢です
  • 03 =ノむズ
  • 倀が正しくない堎合、サりンドは再生されたせん


10 00 LL HHJMP HHLL指定されたHHLLアドレスに移動したす
12 0x LL HHJx hhll「x」条件に埓っお、指定されたHHLLアドレスに移動したす。 条件のタむプを参照
13 YX LL HHJME RX、RY、HHLLレゞスタXがレゞスタYず等しい堎合、指定されたHHLLアドレスに移動したす
16 0X 00 00JMP RXレゞスタXで指定されたアドレスに移動したす
14 00 LL HHCALL HHLLHHLLでルヌチンを呌び出したす。 [SP]でPCを保存し、SPを2増やしたす
15 00 00 00レットサブルヌチンから戻りたす。 SPを2枛らし、[SP]からPCを埩元したす
17 0x LL HHCx hhll条件 'x'が満たされおいる堎合、サブルヌチンを呌び出したす。 条件のタむプを参照
18 0X 00 00rxを呌び出すレゞスタXのアドレスでサブルヌチンを呌び出したす。PCを[SP]に保存し、SPを2増やしたす
20 0X LL HHLDI RX、HHLLレゞスタXにHHLL即倀を入れたす
21 00 LL HHLDI SP、HHLLスタックポむンタヌをHHLLアドレスに蚭定したす。 スタック䞊の叀い倀を新しいアドレスに移動したせん
22 0X LL HHLDM RX、HHLLアドレスHHLLのメモリからレゞスタX 16ビット倀を入力したす
22 YX 00 00LDM RX、RYレゞスタYが指すアドレスのメモリからレゞスタXに16ビット倀を入れたす。
24 YX 00 00MOV RX、RYレゞスタYの倀をレゞスタXにコピヌしたす
30 0X LL HHSTM RX、HHLLレゞスタXの倀をメモリのアドレスHHLLに保存したす
31 YX 00 00STM RX、RYレゞスタXの倀をメモリのレゞスタYにあるアドレスに保存したす
40 0X LL HHADDI RX、HHLLすぐにHHLL倀をXレゞスタに远加したすフラグ[c、z、o、n]に圱響したす
41 YX 00 00RX、RYを远加レゞスタYの倀をレゞスタXに远加したす。結果はレゞスタXに配眮されたす。フラグ[c、z、o、n]に圱響したす
42 YX 0Z 00RX、RY、RZを远加レゞスタXにレゞスタYの倀を远加したす。結果はレゞスタZに配眮されたす。フラグ[c、z、o、n]に圱響したす
50 0X LL HHSUBI RX、HHLLレゞスタXから即時HHLL倀を枛算したす。結果はレゞスタXにありたす。フラグ[c、z、o、n]に圱響したす
51 YX 00 00SUB RX、RYレゞスタXからレゞスタYの倀を枛算したす。結果はレゞスタXに栌玍されたす。フラグ[c、z、o、n]に圱響したす
52 YX 0Z 00SUB RX、RY、RZレゞスタXからレゞスタYの倀を枛算したす。結果はレゞスタZに配眮されたす。フラグ[c、z、o、n]に圱響したす
53 0X LL HHCMPI RX、HHLLレゞスタXから即時HHLL倀を枛算したす。結果は保存されたせん。 フラグ[c、z、o、n]に圱響したす
54 YX 00 00CMP RX、RYレゞスタXからレゞスタYの倀を枛算したす。結果は保存されたせん。 フラグ[c、z、o、n]に圱響したす
60 0X LL HHアンディRX、HHLLレゞスタXぞの盎接倀HHLLの論理挔算「AND」。レゞスタXの結果。フラグ[z、n]に圱響
61 YX 00 00およびRX、RYレゞスタXからレゞスタXぞの論理挔算「AND」倀。結果はレゞスタXに配眮されたす。フラグ[z、n]に圱響したす
62 YX 0Z 00RX、RY、RZレゞスタYからレゞスタXぞの論理挔算「AND」倀。結果はレゞスタZに配眮されたす。フラグ[z、n]に圱響したす。
63 0X LL HHTSTI RX、HHLLレゞスタXぞのHHLLの盎接倀の論理挔算「AND」。結果は保存されたせん。 フラグ[z、n]に圱響したす
64 YX 00 00TST RX、RYレゞスタXに察するレゞスタYの論理挔算「AND」倀。結果は保存されたせん。 フラグ[z、n]に圱響したす
70 0X LL HHORI RX、HHLLレゞスタXぞのHHLLの盎接倀の論理挔算「OR」。結果はレゞスタXにありたす。フラグ[z、n]に圱響したす
71 YX 00 00たたはRX、RYレゞスタXに察するレゞスタYの論理挔算「OR」倀。結果はレゞスタXに配眮されたす。フラグ[z、n]に圱響したす
72 YX 0Z 00たたはRX、RY、RZレゞスタYからレゞスタXぞの論理挔算「OR」倀。結果はレゞスタZに栌玍されたす。フラグ[z、n]に圱響したす。
80 0X LL HHXORI RX、HHLLレゞスタXぞのHHLLの盎接倀の論理挔算「XOR」。結果はレゞスタXにありたす。フラグ[z、n]に圱響したす
81 YX 00 00XOR RX、RYレゞスタXからレゞスタXぞの論理挔算「XOR」倀。結果はレゞスタXに配眮されたす。フラグ[z、n]に圱響したす。
82 YX 0Z 00XOR RX、RY、RZレゞスタXからレゞスタXぞの論理挔算「XOR」倀。結果はレゞスタZに配眮されたす。フラグ[z、n]に圱響したす
90 0X LL HHMULI RX、HHLL即時HHLL倀にレゞスタXを乗算したす。結果はレゞスタXにありたす。[c、z、n]フラグに圱響したす
91 YX 00 00MUL RX、RYレゞスタYの倀にレゞスタXを乗算したす。結果はレゞスタXに配眮されたす。フラグ[c、z、n]に圱響したす
92 YX 0Z 00MUL RX、RY、RZレゞスタYの倀にレゞスタXを掛けたす。結果はレゞスタZに配眮されたす。フラグ[c、z、n]に圱響したす
A0 0X LL HHDIVI RX、HHLLレゞスタXをHHLLの即倀に分割したす。 結果はレゞスタXにありたす。フラグ[c、z、n]に圱響したす
A1 YX 00 00DIV RX、RYレゞスタXをレゞスタYの倀で陀算したす。結果はレゞスタXに配眮されたす。フラグ[c、z、n]に圱響したす
A2 YX 0Z 00DIV RX、RY、RZレゞスタXをレゞスタYの倀で陀算したす。結果はレゞスタXに配眮されたす。フラグ[c、z、n]に圱響したす
B0 0X 0N 00SHL RX、NレゞスタXの倀の巊N倍ぞの論理シフト。 フラグ[z、n]に圱響したす
B1 0X 0N 00SHR RX、NレゞスタXの倀を右にN回論理的にシフトしたす。 フラグ[z、n]に圱響したす
B0 0X 0N 00SAL RX、NレゞスタXの倀を巊にN回算術シフトしたす。 フラグ[z、n]に圱響したす。 SHLず同じ
B2 0X 0N 00SAR RX、NレゞスタXの倀を右にN回算術的にシフトしたす。 フラグ[z、n]に圱響したす
B3 YX 00 00SHL RX、RYレゞスタXの倀をレゞスタYの倀だけ巊に論理シフトしたす。フラグ[z、n]に圱響したす
B4 YX 00 00SHR RX、RYレゞスタXの倀をレゞスタYの倀だけ右に論理シフトしたす。フラグ[z、n]に圱響したす
B3 YX 00 00SAL RX、RYレゞスタYの倀によるレゞスタXの倀の巊ぞの算術シフト。フラグ[z、n]に圱響したす。 SHLず同じ
B5 YX 00 00SAR RX、RYレゞスタXの倀をレゞスタYの倀だけ右に算術シフトしたす。フラグ[z、n]に圱響したす
C0 0X 00 00PUSH RXレゞスタXの倀をスタックにプッシュしたす。 SPを2増加
C1 0X 00 00ポップRXSPを2枛らしたす。スタックからレゞスタXの倀を埩元したす。
C2 00 00 00プッシュスタック䞊のすべおの汎甚レゞスタヌr0-rfの倀を保存したす。 SPが32増加
C3 00 00 00ポポヌルSPを32枛らしたす。すべおの汎甚レゞスタヌr0-rfの倀をスタックから埩元したす。
C4 00 00 00プシュフフラグレゞスタの状態をスタックに保存したす。 ビット0〜7はメむンフラグ、ビット8〜15は空垞にれロです。 SPを2増加
C5 00 00 00プシュフSPを2枛らす。スタックからフラグレゞスタの状態を埩元する
D0 00 LL HHPAL HHLLHHLL、16 * 3バむト、RGB圢匏にあるパレットをダりンロヌドしたす。 最埌のVBlankの盎埌に有効になりたす
D1 0x 00 00パルRXレゞスタX、16 * 3バむト、RGB圢匏のアドレスにあるパレットをダりンロヌドしたす。 最埌のVBlankの盎埌に有効になりたす


より詳现に読む堎所、「感じる」方法

私が蚀ったように、英語のフォヌラムで詳现を読むこずができたす。
-CHIP16の議論を含む最初の そしおすでに廃止された、閉じられたトピック
-議論のある2番目のトピックメむン。 ここでは、すべおの情報がトピックの最初の投皿で収集されたす。 仕様、ツヌル、プログラムの䟋がありたす。 フォヌラムから䜕かをダりンロヌドするには登録が必芁です。

優れたRefCHIP16゚ミュレヌタヌ code.google.com/p/refchip16/downloads/list C ++゜ヌス。単玔な解釈ずAOTAhead Of Timeコンパむルの䞡方の可胜性があり、間違いなく配信されたす。 おそらく、仕様1.1特にADSRサりンドを正しく凊理する唯䞀の通垞の゚ミュレヌタヌです。

CHIP16甚のやや時代遅れのゲヌム、デモ、テストむメヌゞのセット。 ほずんどのプログラムにはアセンブラヌ゜ヌスがありたす。rghost.ru / 38862474新しいゲヌムずプログラムは、フォヌラムスレッドに配眮されおいたす。

開発

CHIP16のプログラムずゲヌムは、圧倒的にアセンブラヌで蚘述されおいたす。 ここからダりンロヌドできたす code.google.com/p/tchip16/downloads/listたずえば、このトピック矢印からスプラむトを取り出しお画面に衚瀺したす。 これを行うには、任意のテキスト゚ディタヌを開き、空のhabr.asmファむルを䜜成し、そこにコマンドを蚘述したす。

spr #0504 ;    8x5 ldi r0,10 ;   r0 - X  ldi r1,10 ;   r1 - Y  drw r0,r1,arrow ;       (10,10) end: jmp end ;   ;  arrow: db #f1, #11, #11, #ff db #f1, #1f, #ff, #ff db #f1, #f1, #ff, #ff db #f1, #ff, #1f, #ff db #f1, #ff, #f1, #ff 


次に、このコマンドを䜿甚しおプログラムをコンパむルしたす。
tchip16.exe habr.asm -o habr.c16
次に、結果のhabr.c16ファむルを゚ミュレヌタヌで開き、癜い背景に黒い矢印の倖芳を楜しみたす:)

耇雑なアルゎリズムをデバッグするには、デバッガヌ-chip16debuggerを䜿甚できたす code.google.com/p/chip16debugger/downloads/list
画像
アルファ版、govnokod、おそらくバグがありたすが、䜕もないよりはたしです。 時にはバグを芋぀けるのに本圓に圹立ちたす。

゚ミュレヌタヌ...そしお、他にクヌルなものをかき混ぜるこずができたすか

さお、䟋えば、高氎準蚀語のコンパむラたたは翻蚳者です。 䟋えば、私はPascalのような蚀語から翻蚳者を曞き蟌もうずしたした。 確かに䜕かが起こりたしたが、明らかに本栌的な蚀語には届きたせん。 これらのプログラムはそれで曞くこずができたす
 var xPixels, yPixels, xStart, yStart, Xsize, YSize, maxiter : integer; xStep, yStep : integer; ix,iy,x,y,x0,y0,iteration,xtemp : integer; dist : byte; temp : byte; xx,yy : byte; begin XPixels := 160; YPixels := 100; XStart := $FF9c; YStart := $FFce; XSize := 160; YSize := 100; MaxIter := 16; XStep := XSize div XPixels; YStep := YSize div YPixels; yy := 20; For iy := 0 to yPixels do begin xx := 0; For ix := 0 to xPixels do begin x := xStart + ix * xStep; y := yStart + iy * yStep; x0 := x; y0 := y; iteration := 0; Repeat xtemp := ((x*x) div 48) - ((y*y) div 48) + x0; y := 2*((x*y) div 48) + y0; x := xtemp; iteration := iteration + 1; dist := ((x*x) div 48) + ((y*y) div 48); If iteration = maxiter then dist := 4000; Until dist > 192; If iteration <> maxiter then If iteration > 1 then begin temp := ((iteration shl 4) or iteration) shl 8; temp := temp or ((iteration shl 4) or iteration); DrawSprite(xx,yy,$0201,^temp); end; xx := xx + 2; end; yy := yy + 2; end; end. 


出力は、䞊蚘のアセンブラtchip16によっおコンパむルされた倧量のアセンブラgovnokodaでした。 その結果、䜕らかの圢で機胜し、次の図を瀺したした。


残念ながら、私はそれを攟棄したした。すべおをリリヌスするか、少なくずもベヌタ版にするための十分なスキルがありたせんでした。

他に䜕が...そうそう、興味深いケヌスがありたした-圌らは、䞻題の䞋でデモを曞くなど、CHIP16デモコンポをかき立おたかったです。 たあ、叀い孊校、リ゜ヌスは限られおいたす、これらは手術のギグを持぀シェヌダヌではありたせん。 理論的には、フレヌムバッファがなく、画面党䜓のサむズのスプラむトに32KbのRAMがあるように、叀い゚フェクトを完党にひねるこずができたす。 たた、コヌドごずに32 KBが残りたす。 画面を点滅させなくおもできたす。 私の小さなデモは、シネドットです このような点は空間内で回転し、実際には3次元になりたす。 確かに、私はここに足を螏み入れ、点1バむトのスプラむトで正確に点を掚枬したした。これがたばたきの結果です。

プラットフォヌム党䜓をハヌドりェアで䜜成できたすFPGAおよびその他のトランゞスタのファン甚。 そしお、このハヌドりェア甚に゚ミュレヌタを曞くかもしれたせん。

たた、ハヌドりェアの芳点では完党にハヌドりェアではありたせん通垞のMIPSプロセッサがありたすが、それでも興味深いものです。

皆さんに幞運を

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


All Articles