ill explain it on analogy first bago technical details
suppose mayroon 4 tao at may 8 box, ang task nila:
para mas madali, pangalanan natin 'yung mga tao base sa trabaho nila:
bigyan natin sila ng isang rule:
- 'pag dumating sa point na walang laman ang box 0-3 at may laman ang 4-7, tapos na ang trabaho nila, no exceptions!
tignan natin 'yung box. siyempre sa una walang laman lahat, magsisimula tayo "from left to right" at ang box number ay from "box 0 to box 7"
Bigyan natin ng sequence si Person 4:
...
or i-condense natin 'yung sequence para mas madali:
after ng last work ni Person 1 or SET, tapos na ang trabaho nila dahil na-meet na yung rule natin na from box 0-3 na walang laman at 4-7 na may laman.
Technical:
'yung kabuuan ng analogy, dinedefine niya kung paano 'yung work ng cpu, well in a very basic way.
Yung ginamit nating names na SET, GET, MOV/MOVE, LEAD, mnemonics ang tawag meaning once ma mabasa mo 'yung abbrev. kuha mo na 'yung function nila. Kung marunong ka ng assembly, familiar ka na rito. Please note na gawa, gawa lang yung ibang mmemonics na example rito, correction sa MOVE/MOV na mas preferred na LD (or Load Direct from register).
Yung mga boxes, dinedefine naman ang registers (or RAM) , sila 'yung magho-hold ng temporary values. Why? Performing r/w (read/write) within RAM is much much faster (dedicated bus, etc.) than performing it on non-volatile memory gaya ng sdcard or dedicated user phone storage.
Kaya naman natin kailangan i-emphasize ang "from left to right" dahil kailangan natin malaman ang "endianness" ng cpu na gusto natin i-emulate. Magkakaiba kasi ang endianness ng cpu architectures kaya kailangan "itama yung read ng bits" base sa target arch:
example:
sa array naman, ang simula ng index ay laging 0, kaya bumibilang tayo from 0-7 at hindi 1-8.
Yung "sequence" naman directly refers to "ROM" o 'yung ginagamit na file para sa emulators. Basically, para siyang script, bali para kang bumibili ng script kapag bumibili ka ng video games / OS / etc.
kung napansin niyo rin anong purpose ni Person 4 or LEAD at wala sa "sequence", siya 'yung pinaka-crucial and important part of execution, dahil kung wala siya, walang magsasabi kung ano ang next sequence (or instruction). "Program Counter" (PC) ang definition nito sa emulation. Ito 'yung nagsasabi kung anong sequence ang "kasalukuyang" ini-execute ng machine.
Programmatically, ganito ang siste ng cpu execution:
Marami pang kulang gaya ng display, mabilisang paliwanag , halimbawa, lets add "lightbulb", once na may value sa box 0 at box 7, turn on, else, turn off , make your cpu more complicated and add 720x1080 lightbulbs = PIXEL!!! Same thing about audio output.
Sa input handling naman (buttons/touchscreen/etc.), it requires port listeners. May sarili ring set of instruction to pero hindi mo na kailangang maghalimbawa ng person, dahil ikaw mismo ang gagawa ng "interrupt" para magkaroon ng interaction sa execution.
I recommend, for starters, yung CHIP-8, 35 opcodes / instructions lang 'to, yung example natin sa itaas may 3 opcode / instruction lang siya , kung nakuha mo kung paano gumagana 'yung example natin, pwedeng pwede kang sumulat ng CHIP-8. Ang first emulator ko eh intel 8080, napaka-mangmang ko ng mga time na 'yun akala ko similar sila ng chip8 kaya mas nayari ako sa opcode dahil almost 255 opcodes (minus undocumented op) pala 'yun haha.
Ishe-share ko lang sa inyo 'yung mga ideas na tingin ko eh makakatulong sa inyo, kung sakaling magustuhan niyo rin sumulat ng interpreter. I'm planning to write gameboy emulator, kung sakali wala masyadong load sa trabaho this week
Happy Coding
clarification lang , may ilan (pero hindi lahat) sa mga terms na ginamit ko baka may mali, so kung sakaling may makapansin, please no hate.
suppose mayroon 4 tao at may 8 box, ang task nila:
- Person 1: maglagay ng item sa box
- Person 2: tanggalin ang item sa box
- Person 3: ilipat ang laman ng box alinman sa 8 box
- Person 4: siya 'yung leader, pipiliin niya sa 3 tao kung sino ang kikilos
para mas madali, pangalanan natin 'yung mga tao base sa trabaho nila:
- Person 1: SET
- Person 2: GET
- Person 3: MOVE
- Person 4: LEAD
bigyan natin sila ng isang rule:
- 'pag dumating sa point na walang laman ang box 0-3 at may laman ang 4-7, tapos na ang trabaho nila, no exceptions!
tignan natin 'yung box. siyempre sa una walang laman lahat, magsisimula tayo "from left to right" at ang box number ay from "box 0 to box 7"
Bigyan natin ng sequence si Person 4:
Person 1, maglagay ng item sa box 1
Person 1, maglagay ng item sa box 0
Person 1, maglagay ng item sa box 6
Person 3, ilipat ang item sa box 6, 4
...
or i-condense natin 'yung sequence para mas madali:
Code:
SET 1
SET 0
SET 6
MOVE 6, 4
GET 0
SET 3
MOVE 3, 6
SET 5
SET 1
MOVE 5, 7
SET 5
MOVE 3, 4
SET 2
GET 2
MOVE 2, 4
SET 6
SET 1
MOVE 2, 7
SET 4
MOVE 4, 1
SET 0
MOVE 3, 2
MOVE 2, 7
SET 4
GET 4
GET 3
SET 2
SET 4
SET 1
GET 4
GET 3
GET 3
SET 2
SET 4
GET 3
SET 0
SET 1
after ng last work ni Person 1 or SET, tapos na ang trabaho nila dahil na-meet na yung rule natin na from box 0-3 na walang laman at 4-7 na may laman.
Technical:
'yung kabuuan ng analogy, dinedefine niya kung paano 'yung work ng cpu, well in a very basic way.
Yung ginamit nating names na SET, GET, MOV/MOVE, LEAD, mnemonics ang tawag meaning once ma mabasa mo 'yung abbrev. kuha mo na 'yung function nila. Kung marunong ka ng assembly, familiar ka na rito. Please note na gawa, gawa lang yung ibang mmemonics na example rito, correction sa MOVE/MOV na mas preferred na LD (or Load Direct from register).
Yung mga boxes, dinedefine naman ang registers (or RAM) , sila 'yung magho-hold ng temporary values. Why? Performing r/w (read/write) within RAM is much much faster (dedicated bus, etc.) than performing it on non-volatile memory gaya ng sdcard or dedicated user phone storage.
Kaya naman natin kailangan i-emphasize ang "from left to right" dahil kailangan natin malaman ang "endianness" ng cpu na gusto natin i-emulate. Magkakaiba kasi ang endianness ng cpu architectures kaya kailangan "itama yung read ng bits" base sa target arch:
example:
Code:
number 15 in bits
little endian:
0000 1111
big endian:
1111 0000
sa array naman, ang simula ng index ay laging 0, kaya bumibilang tayo from 0-7 at hindi 1-8.
Yung "sequence" naman directly refers to "ROM" o 'yung ginagamit na file para sa emulators. Basically, para siyang script, bali para kang bumibili ng script kapag bumibili ka ng video games / OS / etc.
kung napansin niyo rin anong purpose ni Person 4 or LEAD at wala sa "sequence", siya 'yung pinaka-crucial and important part of execution, dahil kung wala siya, walang magsasabi kung ano ang next sequence (or instruction). "Program Counter" (PC) ang definition nito sa emulation. Ito 'yung nagsasabi kung anong sequence ang "kasalukuyang" ini-execute ng machine.
Programmatically, ganito ang siste ng cpu execution:
Code:
while (!halt) {
switch(PC) {
case SET:
...
}
PC++;
}
Marami pang kulang gaya ng display, mabilisang paliwanag , halimbawa, lets add "lightbulb", once na may value sa box 0 at box 7, turn on, else, turn off , make your cpu more complicated and add 720x1080 lightbulbs = PIXEL!!! Same thing about audio output.
Sa input handling naman (buttons/touchscreen/etc.), it requires port listeners. May sarili ring set of instruction to pero hindi mo na kailangang maghalimbawa ng person, dahil ikaw mismo ang gagawa ng "interrupt" para magkaroon ng interaction sa execution.
I recommend, for starters, yung CHIP-8, 35 opcodes / instructions lang 'to, yung example natin sa itaas may 3 opcode / instruction lang siya , kung nakuha mo kung paano gumagana 'yung example natin, pwedeng pwede kang sumulat ng CHIP-8. Ang first emulator ko eh intel 8080, napaka-mangmang ko ng mga time na 'yun akala ko similar sila ng chip8 kaya mas nayari ako sa opcode dahil almost 255 opcodes (minus undocumented op) pala 'yun haha.
Ishe-share ko lang sa inyo 'yung mga ideas na tingin ko eh makakatulong sa inyo, kung sakaling magustuhan niyo rin sumulat ng interpreter. I'm planning to write gameboy emulator, kung sakali wala masyadong load sa trabaho this week
Happy Coding
clarification lang , may ilan (pero hindi lahat) sa mga terms na ginamit ko baka may mali, so kung sakaling may makapansin, please no hate.
Last edited: