What's new

Closed explaining emulators

Status
Not open for further replies.

fireclouu

Honorary Poster
Joined
Jun 1, 2014
Posts
438
Solutions
1
Reaction
152
Points
196
ill explain it on analogy first bago technical details

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:
hi! nope, general siya, papasok lang tayo sa assembly 'pag instruction set ng cpu ang concern.
ohhh di ksi ako familiar sa super low languages c++ pa lang lowest lang na nalaman ko lol, meron ba parang compiler or IDE na para sa ganung language?
 
ohhh di ksi ako familiar sa super low languages c++ pa lang lowest lang na nalaman ko lol, meron ba parang compiler or IDE na para sa ganung language?
sa pagkakaalam ko may wrapper ang C para makapag-execute ng ASM, kailangan mo idefine sa makefile kung anong mode gagamitin mo, also note na kailangan alam mo yung instruction set ng arch mo (not sure ako rito) pero sa panahon ngayon parang sayang effort kung direct susulat ka ng program sa asm (except kung need mo full control) kasi medyo reasonable naman na speed ng c vs asm :) , opinion ko lang ah.
 
Status
Not open for further replies.

Similar threads

Back
Top