Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

SectorC: A C Compiler in 512 bytes

[es] :: Art of Programming :: SectorC: A C Compiler in 512 bytes

Strane: 1 2

[ Pregleda: 3561 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
2a02:a212:92bb:4780:e459:414..



+7192 Profil

icon SectorC: A C Compiler in 512 bytes25.05.2023. u 12:09 - pre 18 meseci
https://xorvoid.com/sectorc.html

Citat:

SectorC: A C Compiler in 512 bytes

SectorC (github) is a C compiler written in x86-16 assembly that fits within the 512 byte boot sector of an x86 machine. It supports a subset of C that is large enough to write real and interesting programs. It is quite likely the smallest C compiler ever written.

In a base64 encoding, it looks like this:
Code:

6gUAwAdoADAfaAAgBzH/6DABPfQYdQXoJQHr8+gjAVOJP+gSALDDqluB+9lQdeAG/zdoAEAfy+gI
AegFAYnYg/hNdFuE9nQNsOiqiwcp+IPoAqvr4j3/FXUG6OUAquvXPVgYdQXoJgDrGj0C2nUGV+gb
AOsF6CgA68Ow6apYKfiD6AKrifgp8CaJRP7rrOg4ALiFwKu4D4Srq1fonP9ewz2N/HUV6JoA6BkA
ieu4iQRQuIs26IAAWKvD6AcAieu4iQbrc4nd6HkA6HYA6DgAHg4fvq8Bra052HQGhcB19h/DrVCw
UKroWQDoGwC4WZGrW4D/wHUMuDnIq7i4AKu4AA+ridirH8M9jfx1COgzALiLBOucg/j4dQXorf/r
JIP49nUI6BwAuI0G6wyE0nQFsLiq6wa4iwarAduJ2KvrA+gAAOhLADwgfvkx2zHJPDkPnsI8IH4S
weEIiMFr2wqD6DABw+gqAOvqicg9Ly90Dj0qL3QSPSkoD5TGidjD6BAAPAp1+eu86Ln/g/jDdfjr
slIx9osEMQQ8O3QUuAACMdLNFIDkgHX0PDt1BIkEMcBaw/v/A8H9/yvB+v/34fb/I8FMAAvBLgAz
wYQA0+CaANP4jwCUwHf/lcAMAJzADgCfwIUAnsCZAJ3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAVao=



Kod: https://github.com/xorvoid/sectorc

Kompajliran, staje u old-school 512-bajtni boot sektor. Ili - manji je od 4 SMS ili 2 Twitter poruke :-)
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

MajorFatal
Milija Jakic
opravljam oluke, 1337LAB
Bg

Član broj: 36595
Poruke: 1457
*.dynamic.a1.rs.



+575 Profil

icon Re: SectorC: A C Compiler in 512 bytes26.05.2023. u 10:24 - pre 18 meseci
Skratiće to Nedeljko bar za 2 ili 3 znaka :)
Nemoj da pricas?
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes27.05.2023. u 03:45 - pre 18 meseci
Na šta se odnosi 512 bajtova?
Taj string ima 684 znaka što je više od 512.

Šta se dobije kad se dekodira?
Mašinski kod?

Ako je mašinski kod za koju je mašinu?

Ako je za Commodore 64, paaa tamo u 512 bajtova može stati što-šta samo će kompajliranje potrajati...

Ako je za 8086 i tamo može da se svede na 8-bitne registre i short jump/grananje/near call.

[1 / 115]
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
*.static.isp.telekom.rs.



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes27.05.2023. u 09:46 - pre 18 meseci
base64 - pise u poruci.

Pise u poruci i instrukcijski set.

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes27.05.2023. u 14:41 - pre 18 meseci
Kad dekodiram dobijem samo "čvarke".
Šta da radim s tim?
Prikačeni fajlovi
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12875



+4792 Profil

icon Re: SectorC: A C Compiler in 512 bytes27.05.2023. u 18:39 - pre 18 meseci
Ništa.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2791 Profil

icon Re: SectorC: A C Compiler in 512 bytes02.06.2023. u 08:54 - pre 18 meseci
Najjači je ovaj deo

$ ./build.sh
sectorc.s:157: error: invalid combination of opcode and operands

Tako sve može da stane u koliko hoćeš bajtova.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
2a02:a212:92bb:4780:e92d:fc7..



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes02.06.2023. u 09:57 - pre 18 meseci
Sta si tacno uradio?



Vazno:

Code:

The following grammar is accepted and compiled by sectorc:

program     = (var_decl | func_decl)+
var_decl    = "int" identifier ";"
func_decl   = "void" func_name "{" statement* "}"
func_name   = <identifier that ends in "()" with no space>
statement   = "if(" expr "){" statement* "}"
            | "while(" expr "){" statement* "}"
            | "asm" integer ";"
            | func_name ";"
            | assign_expr ";"
assign_expr = deref? identifier "=" expr
deref       = "*(int*)"
expr        = unary (op unary)?
unary       = deref identifier
            | "&" identifier
            | "(" expr ")"
            | indentifier
            | integer
op          = "+" | "-" | "&" | "|" | "^" | "<<" | ">>"
            | "==" | "!=" | "<" | ">" | "<=" | ">="


DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
Prikačeni fajlovi
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2791 Profil

icon Re: SectorC: A C Compiler in 512 bytes03.06.2023. u 09:50 - pre 18 meseci
Uradio sam isto što i ti, ali mi na jednoj instalaciji ne prolazi, a na druge dve prolazi.

Možda starija verzija nasm-a.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes04.06.2023. u 07:42 - pre 18 meseci
Koga zanima taj base64 treba dekodirati u hex pa dobiješ to isto.
Ne znam koja fora je da se to uopšte kodira?

Bez rada sa datotekama nije daleko odmakao od digitrona.

Citat:
EA05 00C0 0768 0030 1F68 0020 0731 FFE8
3001 3DF4 1875 05E8 2501 EBF3 E823 0153
893F E812 00B0 C3AA 5B81 FBD9 5075 E006
FF37 6800 401F CBE8 0801 E805 0189 D883
F84D 745B 84F6 740D B0E8 AA8B 0729 F883
E802 ABEB E23D FF15 7506 E8E5 00AA EBD7
3D58 1875 05E8 2600 EB1A 3D02 DA75 0657
E81B 00EB 05E8 2800 EBC3 B0E9 AA58 29F8
83E8 02AB 89F8 29F0 2689 44FE EBAC E838
00B8 85C0 ABB8 0F84 ABAB 57E8 9CFF 5EC3
3D8D FC75 15E8 9A00 E819 0089 EBB8 8904
50B8 8B36 E880 0058 ABC3 E807 0089 EBB8
8906 EB73 89DD E879 00E8 7600 E838 001E
0E1F BEAF 01AD AD39 D874 0685 C075 F61F
C3AD 50B0 50AA E859 00E8 1B00 B859 91AB
5B80 FFC0 750C B839 C8AB B8B8 00AB B800
0FAB 89D8 AB1F C33D 8DFC 7508 E833 00B8
8B04 EB9C 83F8 F875 05E8 ADFF EB24 83F8
F675 08E8 1C00 B88D 06EB 0C84 D274 05B0
B8AA EB06 B88B 06AB 01DB 89D8 ABEB 03E8
0000 E84B 003C 207E F931 DB31 C93C 390F
9EC2 3C20 7E12 C1E1 0888 C16B DB0A 83E8
3001 C3E8 2A00 EBEA 89C8 3D2F 2F74 0E3D
2A2F 7412 3D29 280F 94C6 89D8 C3E8 1000
3C0A 75F9 EBBC E8B9 FF83 F8C3 75F8 EBB2
5231 F68B 0431 043C 3B74 14B8 0002 31D2
CD14 80E4 8075 F43C 3B75 0489 0431 C05A
C3FB FF03 C1FD FF2B C1FA FFF7 E1F6 FF23
C14C 000B C12E 0033 C184 00D3 E09A 00D3
F88F 0094 C077 FF95 C00C 009C C00E 009F
C085 009E C099 009D C000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 55AA


[8 / 433]
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
2a02:a212:92bb:4780:e89d:3ba..



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes04.06.2023. u 15:47 - pre 18 meseci
Mozda covek voli base64, nebitno - to je irelevantan kozmeticki detalj. Sustina je C(-like) procesiranje koje staje u 512 bajta x86 masinskog koda.
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 09:13 - pre 18 meseci
Jel neko ispeo da kompajlira neki C-program sa tih 512 bajta?
Ako jeste može li da priloži listing tog C-programa?

Kako radi taj kompajler i šta daje?
Na kojoj mašini i koji operativni sistem?

Šta je potrebno da imate instalirano da bi taj 512 bajta kompajler funkcionisao?

Kako prepoznaje "grammar", kako prepoznaje "statement"?

Ima čak i "asm" naredbu, ako to radi koje asemblerske instruklcije prihvata? Gde je to u tih 512 bajta?

 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
2a02:a212:92bb:4780:f559:683..



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 11:44 - pre 18 meseci
@BrutalCoin,

- U pitanju je "C-like" 'kompajler' koji staje u 512 bajta, sto je bila velicina nekadasnjeg (MBR) boot sektora.
- Izvorni kod samog kompajlera ti je u /sectorc.s fajlu, format je: x86 asembler, tu ces moci da vidis kako prepoznaje 'gramatiku'
- Generisani kod je, takodje, x86, ne treba mu nikakav operativni sistem - koristi BIOS (pogledaj /rt/lib.c ako te zanima koje servise BIOS-a koristi).
- Podskup C jezika koji je podrzan imas na github strani i README.md fajlu
- Runtime "biblioteka" je u /rt direktorijumu - nije mnogo bogata, ali omogucava najosnovnije stvari
- Primeri su ti u /examples direktorijumu

/run.sh skripta ce ti pomoci za testiranje - za demonstraciju koristi QEMU virtuelnu masinu (pogedaj /run_raw.sh)

Na primer:

Code:

./run.sh ./examples/sinwave.c


QEMU ti je potreban ako hoces da koristis run skripte - ako ne, umesto QEMU-a poteraj to na masini sa BIOS-em (ako je UEFI masina, bice ti potreban CSM modul i boot mora biti preko CSM-a). .bin fajl ces, naravno, iskopirati direkt u boot sektor fizickog drajva (koji, naravno, mora biti MBR formatiran, ne GPT).

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

ademare

Član broj: 151475
Poruke: 8290



+1796 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 11:52 - pre 18 meseci
Imaju sada emulatori hardwera starih PC-a . Od prvog do negde P3 . Pa kome sta treba od te starezi .

Komplet sve sa BIOS-ima i grafickim karticama .


http://pcem-emulator.co.uk/

Ima jos jedan koji je Fork ovog , al sad ne mogu da nadjem link .

Evo i drugog : http://86box.net/

Evo i 3. : https://pcbox-emu.xyz/

Ovaj prvi link je najlosiji . Malo zastero . Najbolji je link 2. pa 3.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
2a02:a212:92bb:4780:f559:683..



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 12:06 - pre 18 meseci
Pa da.

run_raw.sh skripta koristi QEMU bas u tu svrhu. Mada ko hoce i ko ima neku matoru masinu, moze i na njoj da potera sve to.

A evo i celog OS-a u 512 bajta, u duhu ove teme: https://github.com/nanochess/bootOS :-)
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 16:35 - pre 18 meseci
Sad sam pročitao...
Taj koristi nasm.

Što reče @Nedeljko može stati u koliko hoćeš bajtova.

[15 / 629]
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
..2bb:4780:e4fb:9da9:ab2d:def0



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 17:19 - pre 18 meseci
To sto je Nedeljko rekao je u sasvim drugom kontekstu, zato sto mu u pocetku nije uspelo da napravi doticni.

NASM se koristi samo za sklapanje samog kompajlera, nigde nije pisano da sam sebe bootstrapuje. Sam kod kompajlera (napisanog u asembleru) je u .S fajlu, naravno da ti treba asembler da ga napravis. Rezultat staje u 512 bajtova, sto je i receno i sto se tvrdi.

Sa tim kompajlerom koji staje u boot sektor moze da se kompajlira prilicno bogat C kod, kao sto se vidi, sto je zapravo poenta celog projekta i sto je samo po sebi prilicno impresivno.

Mozes slobodno ignorisati .S kod i uzeti izlazni masinski kod kompajlera kao pocetak. Asemblerski kod je samo tu radi jasnoce, recimo kad pitas kako sta radi. Onda ti nece trebati nikakav NASM.
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 20:47 - pre 18 meseci
Ti pišeš o "build".
Ja pišem o
Citat:
Running

Dependencies:

nasm for assembling (I used v2.16.01)

Da li to znači da kompajler SectorC u run-time zavisi od nasm?

Ako SectorC u run-time ne zavisi od nasm kako kompajlira asm direktivu?

[16 / 669]
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16749
..2bb:4780:e4fb:9da9:ab2d:def0



+7192 Profil

icon Re: SectorC: A C Compiler in 512 bytes08.06.2023. u 22:14 - pre 18 meseci
Ne.

Skini lepo, poteraj, pogledaj. Mislim da je vec sve receno sto moze da se kaze.

Pogledaj runtime biblioteku:

https://github.com/xorvoid/sectorc/blob/main/rt/lib.c

Code:

 // Enable power management for all devices
  // | mov ah,0x53; mov al,0x08; mov bx,0x0001; mov cx,0x0001
  // | int 0x15; jc error
  asm 180; asm  83; asm 176; asm   8;
  asm 187; asm   1; asm   0; asm 185; asm   1; asm   0;
  asm 205; asm  21; asm 114; asm  14;


asm direktiva samo emituje instrukcije, za to ti ne treba nikakav asembler eksterni.

Pritom, ni jedan od primera nema asm direktive u sebi, vec cisti C.
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

BrutalCoin

Član broj: 337807
Poruke: 126



+103 Profil

icon Re: SectorC: A C Compiler in 512 bytes09.06.2023. u 07:05 - pre 18 meseci
Što bih "skinuo i poterao"? Čemu služi forum nego da neko uradi nešto umesto tebe?


Dakle, ta asm direktiva je u stvari nešto kao poke na spektrumu.

A kako dolaziš do vrednosti koje treba "poke-tovati"?

Pa tako što asembliraš neki program a zatim disasembliraš i vidiš šta ti treba.
Što znači da ipak za kompajliranje sa SectorC koristiš nasm/ndisasm što na onih 512 bajtova dodaje još 2.5 megabajta.

[18 / 725]
 
Odgovor na temu

[es] :: Art of Programming :: SectorC: A C Compiler in 512 bytes

Strane: 1 2

[ Pregleda: 3561 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.