GERLA.CC

← Diario

· Mega Drive

Mega Drive: assembly dove serve, C dove conta

La versione Mega Drive è senza SGDK né librerie, ma non è tutta assembly, ed è una scelta precisa. Lo startup e i vettori sono assembly 68k (crt0.s), la schermata del titolo è asm pura; la logica di gioco e il render sono in C (game_logic.c, main.c), compilati da gcc in codice macchina 68000 che finisce nella ROM. Perché il C? Primo: è la prassi dell'epoca 16-bit. Il 68000 è nato pensando ai compilatori, e una valanga di giochi commerciali per Mega Drive era in C con l'assembly solo nei punti caldi. Non è un ripiego moderno. Secondo: è il trucco che rende il porting verificabile. Non ho un emulatore 68000 per collaudare la logica, ma la stessa identica sorgente C compila anche nativa sul Mac, dove la faccio giocare frame per frame contro il modello di riferimento: è così che arriva la garanzia bit-exact sui 1583 frame. In assembly 68k puro potrei solo scrivere codice e sperare. Il pavimento finto che crolla l'ho visto funzionare contando i pixel viola che sparivano: 4756, 4592, 4428. La soddisfazione era tutta lì. Il metodo del doppio bersaglio, e gli altri bug del Mega Drive, sono nel dietro le quinte.

Tutto il diario