{{htmlmetatags>metatag-robots=() metatag-title=(Hello world | Multithreading on retrocomputers) metatag-keywords=(Multithreading,Commodore 64,Commodore VIC20,Atari,Commodore128,MIDRES Library,6502,6510) metatag-description=(Come implementare il multithreading veloce ed efficiente su computer con risorse limitate.) metatag-media-og:image=(:mt6502.png) metatag-og:title=(Hello world | Multithreading on retrocomputers) metatag-og:description=(Come implementare il multithreading veloce ed efficiente su computer con risorse limitate.) }} ====== Multithreading sui retrocomputer ====== ===== "HELLO WORLD" CON DUE PROTOTHREAD ===== Il codice su [[https://github.com/spotlessmind1975/midres/blob/master/src/tutorial_protothread1.c|tutorial_protothread1.c]] mostra come realizzare due thread che, in concorrenza, accederanno alla CPU per stampare la scritta "Hello world". Per distinguerli, aggiungeremo il numero del protothread in fondo. Qui commentiamo il codice: mr_protothread firstThread; mr_protothread secondThread; Il tipo ''mr_protothread'' è specifico della libreria MIDRES, e permette di riservare i famosi due byte necessari a memorizzare lo stato (continuazione locale) del protothread. In questo caso, definiamo due variabili perché andremo a far partire due protothread simultanei. MR_PT_THREAD(first) { Questa è la definizione standard, per indicare che una funzione è in realtà un protothread. ''first'' è il nome della funzione, che dovrà essere poi richiamata dando l'indirizzo della variabile ''firstThread''. MR_PTI_BEGIN(); Il protothread inizia effettivamente da qui. while (1) { printf("Hello world 1\n"); Introduciamo qui un loop infinito, che faccia eseguire la logica di questa funzione, che si limiterà a stampare la scritta "Hello world 1". MR_PTI_YIELD(); Qui il programma indica che è possibile rilasciare il controllo ad altri thread. Quando gli altri faranno lo stesso, il controllo tornerà sull'istruzione successiva a questa. } MR_PTI_END(); } Qui termina il loop del primo thread e, inoltre, si segnala che da questa riga che termina anche la definizione del protothread. MR_PT_THREAD(second) { MR_PTI_BEGIN(); while (1) { printf("Hello world 2\n"); MR_PTI_YIELD(); } MR_PTI_END(); } La seconda funzione è identica alla prima, con la differenza che stamperà "Hello world 2". void tutorial_protothread1() { while (1) { first(&firstThread); second(&secondThread); } } This is the main loop of the program, which continuously calls the first function and the second function. ===== COME COMPILARLO ===== E' possibile compilare il tutorial con questa linea di comando: make tutorial=PROTOTHREAD1 target=... all Le piattaforme supportate sono: * Commodore VIC-20 espanso (''vic2024''); * Commodore 64 (''c64''); * Commodore 128 (''c128''); * Commodore PLUS/4 (''plus4''); * Atari (8 bit) (''atari''). ===== RISULTATO ===== {{ youtube>C5_Ogje7wxg?medium }} Vai a [[:it:mt6502:walking|ANIMAZIONI CON I PROTOTHREAD]].