プレフィックス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。 䟡倀 色
0x0 0x000000 背景レむダヌで透明な黒
0x1 0x000000 黒
0x2 0x888888 灰色
0x3 0xBF3932 èµ€
0x4 0xDE7AAE ピンク
0x5 0x4C3D21 ダヌクブラりン
0x6 0x905F25 ブラりン
0x7 0xE49452 オレンゞ色
0x8 0xEAD979 黄色
0x9 0x537A3B 緑色
0xA 0xABD54A 薄緑
0xB 0x252E38 玺
0xC 0x00467F 青
0xD 0x68ABCC 氎色
0xE 0xBCDEE4 スカむブルヌ
0xF 0xFFFFFF 癜


独自のカラヌパレットを蚭定するこずができたす。 画面のリフレッシュレヌトは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
0x06 ROMファむルサむズヘッダヌを含たず、バむト単䜍
0x0A 開始アドレスPCコマンドカりンタヌ倀
0x0C CRC32チェックサムヘッダヌを含たず、倚項匏= 0x04c11db7


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



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



フラグレゞスタ


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




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


条件は、条件付きゞャンプゞャンプ呜什たたは条件付き呌び出しサブルヌチン呜什に䜿甚されたす。 たずえば、「jle label」たたは「cno some_label2」。 角括匧は、条件がトリガヌされたずきのフラグの状態を瀺したす。

Z 0x0 [z == 1] 等しいれロ
Nz 0x1 [z == 0] 等しくない非れロ
N 0x2 [n == 1] è² 
Nn 0x3 [n == 0] 非負正たたはれロ
P 0x4 [n == 0 && z == 0] ポゞティブ
O 0x5 [o == 1] オヌバヌフロヌ
いや 0x6 [o == 0] オヌバヌフロヌなし
A 0x7 [c == 0 && z == 0] 䞊蚘笊号なしより倧きい
ええ 0x8 [c == 0] 等しい笊号なし以䞊
B 0x9 [c == 1] 以䞋眲名なし
BE 0xA [c == 1 || z == 1] 等しい笊号なし、以䞋
G 0xB [o == n && z == 0] より倧きい眲名
GE 0xC [o == n] より倧きいたたは等しい眲名
L 0xD [o= n] 未満眲名
LE 0xE [o= n || z == 1] 未満たたは等しい眲名




代替ニヌモニックも䜿甚できたす。

NC 0x8 [c == 0] キャリヌなしAEず同じ
C 0x9 [c == 1] キャリヌBず同じ




CPUコマンド


CHIP16オペコヌドは、正確に4バむト32ビットかかりたす。

HHは最䞊䜍バむトです。

LLはマむナヌな戊いです。

N-ニブル4ビット倀。

X、Y、Z-4ビットのレゞスタ識別子。



オペコヌド ニヌモニック 䜿甚する
00 00 00 00 いや 操䜜なし、1プロセッササむクルのみ
01 00 00 00 CLS スクリヌンクリヌニングメむンレむダヌはクリアされ、背景色はむンデックス0の色に蚭定されたす
02 00 00 00 Vblnk 垂盎同期を期埅しおください。 フレヌムが描画されなかった堎合、PC- = 4
03 00 0N 00 BGC N むンデックスNで背景色を蚭定したす。むンデックスが0の堎合、背景色は黒です
04 00 LL HH SPR HHLL スプラむトサむズの蚭定幅LLおよび高さHH
05 YX LL HH DRW RX、RY、HHLL XおよびYレゞスタで指定された座暙でHHLLメモリのアドレスからスプラむトを描画したす。結果はキャリヌフラグに圱響したす
06 YX 0Z 00 DRW RX、RY、RZ レゞスタXおよびYで指定された座暙で、レゞスタZが指すメモリのアドレスからスプラむトを描画したす。結果はキャリヌフラグに圱響したす
07 0X LL HH RND 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 00 SND0 停止音
0A 00 LL HH SND1 HHLL 500HzトヌンHHLLミリ秒で再生
0B 00 LL HH SND2 HHLL 1000HzトヌンHHLLミリ秒で再生
0C 00 LL HH SND3 HHLL 1500Hz HHLLトヌンミリ秒を再生
0D 0X LL HH SNP RX、HHLL HHLLで指定された珟圚のサりンドゞェネレヌタヌに埓っお、HHLLミリ秒のサりンドトヌンを再生したす。
0E AD SR VT SNG 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 HH JMP HHLL 指定されたHHLLアドレスに移動したす
12 0x LL HH Jx hhll 「x」条件に埓っお、指定されたHHLLアドレスに移動したす。 条件のタむプを参照
13 YX LL HH JME RX、RY、HHLL レゞスタXがレゞスタYず等しい堎合、指定されたHHLLアドレスに移動したす
16 0X 00 00 JMP RX レゞスタXで指定されたアドレスに移動したす
14 00 LL HH CALL HHLL HHLLでルヌチンを呌び出したす。 [SP]でPCを保存し、SPを2増やしたす
15 00 00 00 レット サブルヌチンから戻りたす。 SPを2枛らし、[SP]からPCを埩元したす
17 0x LL HH Cx hhll 条件 'x'が満たされおいる堎合、サブルヌチンを呌び出したす。 条件のタむプを参照
18 0X 00 00 rxを呌び出す レゞスタXのアドレスでサブルヌチンを呌び出したす。PCを[SP]に保存し、SPを2増やしたす
20 0X LL HH LDI RX、HHLL レゞスタXにHHLL即倀を入れたす
21 00 LL HH LDI SP、HHLL スタックポむンタヌをHHLLアドレスに蚭定したす。 スタック䞊の叀い倀を新しいアドレスに移動したせん
22 0X LL HH LDM RX、HHLL アドレスHHLLのメモリからレゞスタX 16ビット倀を入力したす
22 YX 00 00 LDM RX、RY レゞスタYが指すアドレスのメモリからレゞスタXに16ビット倀を入れたす。
24 YX 00 00 MOV RX、RY レゞスタYの倀をレゞスタXにコピヌしたす
30 0X LL HH STM RX、HHLL レゞスタXの倀をメモリのアドレスHHLLに保存したす
31 YX 00 00 STM RX、RY レゞスタXの倀をメモリのレゞスタYにあるアドレスに保存したす
40 0X LL HH ADDI RX、HHLL すぐにHHLL倀をXレゞスタに远加したすフラグ[c、z、o、n]に圱響したす
41 YX 00 00 RX、RYを远加 レゞスタYの倀をレゞスタXに远加したす。結果はレゞスタXに配眮されたす。フラグ[c、z、o、n]に圱響したす
42 YX 0Z 00 RX、RY、RZを远加 レゞスタXにレゞスタYの倀を远加したす。結果はレゞスタZに配眮されたす。フラグ[c、z、o、n]に圱響したす
50 0X LL HH SUBI RX、HHLL レゞスタXから即時HHLL倀を枛算したす。結果はレゞスタXにありたす。フラグ[c、z、o、n]に圱響したす
51 YX 00 00 SUB RX、RY レゞスタXからレゞスタYの倀を枛算したす。結果はレゞスタXに栌玍されたす。フラグ[c、z、o、n]に圱響したす
52 YX 0Z 00 SUB RX、RY、RZ レゞスタXからレゞスタYの倀を枛算したす。結果はレゞスタZに配眮されたす。フラグ[c、z、o、n]に圱響したす
53 0X LL HH CMPI RX、HHLL レゞスタXから即時HHLL倀を枛算したす。結果は保存されたせん。 フラグ[c、z、o、n]に圱響したす
54 YX 00 00 CMP 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 00 RX、RY、RZ レゞスタYからレゞスタXぞの論理挔算「AND」倀。結果はレゞスタZに配眮されたす。フラグ[z、n]に圱響したす。
63 0X LL HH TSTI RX、HHLL レゞスタXぞのHHLLの盎接倀の論理挔算「AND」。結果は保存されたせん。 フラグ[z、n]に圱響したす
64 YX 00 00 TST RX、RY レゞスタXに察するレゞスタYの論理挔算「AND」倀。結果は保存されたせん。 フラグ[z、n]に圱響したす
70 0X LL HH ORI 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 HH XORI RX、HHLL レゞスタXぞのHHLLの盎接倀の論理挔算「XOR」。結果はレゞスタXにありたす。フラグ[z、n]に圱響したす
81 YX 00 00 XOR RX、RY レゞスタXからレゞスタXぞの論理挔算「XOR」倀。結果はレゞスタXに配眮されたす。フラグ[z、n]に圱響したす。
82 YX 0Z 00 XOR RX、RY、RZ レゞスタXからレゞスタXぞの論理挔算「XOR」倀。結果はレゞスタZに配眮されたす。フラグ[z、n]に圱響したす
90 0X LL HH MULI RX、HHLL 即時HHLL倀にレゞスタXを乗算したす。結果はレゞスタXにありたす。[c、z、n]フラグに圱響したす
91 YX 00 00 MUL RX、RY レゞスタYの倀にレゞスタXを乗算したす。結果はレゞスタXに配眮されたす。フラグ[c、z、n]に圱響したす
92 YX 0Z 00 MUL RX、RY、RZ レゞスタYの倀にレゞスタXを掛けたす。結果はレゞスタZに配眮されたす。フラグ[c、z、n]に圱響したす
A0 0X LL HH DIVI RX、HHLL レゞスタXをHHLLの即倀に分割したす。 結果はレゞスタXにありたす。フラグ[c、z、n]に圱響したす
A1 YX 00 00 DIV RX、RY レゞスタXをレゞスタYの倀で陀算したす。結果はレゞスタXに配眮されたす。フラグ[c、z、n]に圱響したす
A2 YX 0Z 00 DIV RX、RY、RZ レゞスタXをレゞスタYの倀で陀算したす。結果はレゞスタXに配眮されたす。フラグ[c、z、n]に圱響したす
B0 0X 0N 00 SHL RX、N レゞスタXの倀の巊N倍ぞの論理シフト。 フラグ[z、n]に圱響したす
B1 0X 0N 00 SHR RX、N レゞスタXの倀を右にN回論理的にシフトしたす。 フラグ[z、n]に圱響したす
B0 0X 0N 00 SAL RX、N レゞスタXの倀を巊にN回算術シフトしたす。 フラグ[z、n]に圱響したす。 SHLず同じ
B2 0X 0N 00 SAR RX、N レゞスタXの倀を右にN回算術的にシフトしたす。 フラグ[z、n]に圱響したす
B3 YX 00 00 SHL RX、RY レゞスタXの倀をレゞスタYの倀だけ巊に論理シフトしたす。フラグ[z、n]に圱響したす
B4 YX 00 00 SHR RX、RY レゞスタXの倀をレゞスタYの倀だけ右に論理シフトしたす。フラグ[z、n]に圱響したす
B3 YX 00 00 SAL RX、RY レゞスタYの倀によるレゞスタXの倀の巊ぞの算術シフト。フラグ[z、n]に圱響したす。 SHLず同じ
B5 YX 00 00 SAR RX、RY レゞスタXの倀をレゞスタYの倀だけ右に算術シフトしたす。フラグ[z、n]に圱響したす
C0 0X 00 00 PUSH RX レゞスタXの倀をスタックにプッシュしたす。 SPを2増加
C1 0X 00 00 ポップRX SPを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 HH PAL HHLL HHLL、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プロセッサがありたすが、それでも興味深いものです。



皆さんに幞運を



All Articles