Indice

BENCHMARKS SUI RETROCOMPUTER

Lo scopo di questo articolo è mostrare, relativamente alle piattaforme supportate dalla libreria MIDRES, quale sia la velocità media di trasferimento dati laddove si legga un file sequenzialmente da una memoria di massa ad accesso casuale (disk drive) utilizzando la libreria standard del C1). Per ogni piattaforma viene quindi testato un modello tra quelli forniti dall'emulatore, con il medesimo processo e le medesime dimensioni.

PREMESSA

Questo articolo prende le mosse dalla necessità di espandere la memoria accessibile al software per riprodurre filmati isomorfi (IAV), di modo che fosse possibile vederla e sfruttarla tanto dalla macchina hardware che con un emulatore.

La versione attuale del software, che gira già su tutte le piattaforme, utilizza (se disponibile) una espansione di memoria. Attualmente l'unica disponibile e documentata è la REU per il Commodore 64/128. Questa fornisce una memoria RAM aggiuntiva con accesso paginato e (sugli emulatori) viene data la possibilità di “precaricare” una immagine della memoria dall'esterno dell'emulatore, che sarà quindi accessibile da qualsiasi programma (BASIC, C oppure ASM) che andrà in esecuzione successivamente.

Avendo svolto, sui vari gruppi Facebook, una ricerca per dei modelli di espansione di memoria della linea Commodore 264, ho mio malgrado scoperto che tale concetto non è molto diffuso sui computer a 8 bit della Commodore. Ragion per cui ho deciso di verificare se l'accesso ad una periferica disco fosse sufficientemente veloce da essere vista come una “espansione” di memoria.

METODOLOGIA

Come prima cosa si è prodotto un semplice file dati vuoto, di dimensioni sufficienti a poterne leggere dei blocchi in sequenza. Per produrre tale file è stato sufficiente utilizzare l'utilità dd del sistema operativo Linux, eseguito con queste opzioni:

 dd if=/dev/zero bs=1024 count=25 of=zdata.dat

Le opzioni sono:

  1. if=/dev/zero : nome del file origine dei dati da produrre (/dev/zero è un file speciale che genera una illimitata serie di zeri);
  2. bs=1024 : dimensione del blocco da generare (1024 bytes);
  3. count=25 : numero di blocchi da generare (25);
  4. ofs=zdata.dat : nome del file destinazione dei dati prodotti.

Con tale comando è stato generato un file di 25 KB.

In seguito è stato scritto un breve programma in C che si occupa di effettuare tre letture sequenziali di questo file, utilizzando di volta in volta una dimensione del blocco doppia rispetto alla precedente.

In particolare sono state utilizzate le seguenti dimensioni:

  1. 256 bytes
  2. 512 bytes
  3. 1024 bytes
  4. 2048 bytes

Il tempo viene misurato utilizzando il clock interno chiamato jiffy clock. Questo timer viene incrementato con una frequenza propria del sistema e, contando il numero di incrementi, è possibile misurare con una certa approssimazione il tempo trascorso.

Poiché il numero di “tick” del jiffy clock è un multiplo della frequenza di aggiornamento dello schermo, è possibile che le misure del tempo possano non essere “intere”. Cioè, la durata di 1 secondo potrebbe essere approssimata, ad esempio, a 960 millisecondi oppure a 1025 millisecondi.

Per ovviare a tale approssimazione è stata eseguita una misura di riferimento per 1 secondo tramite il comando mr_wait, per garantire la taratura iniziale: questo ha comportato l'estrazione di uno specifico fattore moltiplicativo, che è stato applicato a tutti i risultati della misura.

Infine è stato adeguato il makefile della libreria MIDRES affinché fosse generato una immagine disco per ogni piattaforma che dispone di una periferica di questo tipo e per ogni tipo di periferica che l'emulatore permette di simulare.

COMBINAZIONI HARDWARE TESTATE

Below is a list of all the combinations generated:

  1. Commodore 64 (c64);
    1. Disk Drive C=1541 (*.d64); immagine disco
    2. Disk Drive C=1571 (*.d71); immagine disco
    3. Disk Drive C=1581 (*.d81); immagine disco
  2. Commodore 128 (c128);
    1. Disk Drive C=1541 (*.d64); immagine disco
    2. Disk Drive C=1571 (*.d71); immagine disco
    3. Disk Drive C=1581 (*.d81); immagine disco
  3. Commodore 16 (c16);
    1. Disk Drive C=1541 (*.d64); immagine disco
    2. Disk Drive C=1571 (*.d71); immagine disco
    3. Disk Drive C=1581 (*.d81); immagine disco
  4. Commodore PLUS/4 (plus4);
    1. Disk Drive C=1541 (*.d64); immagine disco
    2. Disk Drive C=1571 (*.d71); immagine disco
    3. Disk Drive C=1581 (*.d81); immagine disco
  5. Commodore VIC-20 espanso (vic-2024);
    1. Disk Drive C=1541 C=1540 (*.d64); immagine disco
    2. Disk Drive C=1571 (*.d71); immagine disco
    3. Disk Drive C=1581 (*.d81); immagine disco
  6. ATARI 8 bit (atari);
    1. Disk Drive con disco a singola densità (90 KB); immagine disco
    2. Disk Drive con disco a densità estesa (130 kb). immagine disco

Ognuna di queste immagini è stata quindi caricata sul relativo emulatore, lasciando quindi che lo stesso individuasse automaticamente il formato e la dimensione del supporto, e ne è stato lanciato il benchmark relativo.

RISULTATI

Questo diagramma sintetizza, in breve, il risultato dei test:

Come si può notare, tra la configurazione più lenta (VIC-20 espanso con C=1571) e quella più veloce (C=128 con C=1581) vi è un rapporto di 1:4, con la velocità massima di circa 1653 bytes al secondo. Il C=128 è comunque il computer che presenta la performance migliore dal confronto diretto.

Il Commodore 1541 si dimostra uno dei migliori tra quelli prodotti dalla Commodore, mentre il più veloce in assoluto rimane il drive dell'ATARI.

Il Commodore 128 è il modello di home computer con le performance migliori in assoluto, seguito dal computer ATARI. Il peggiore rimane, invece, il VIC-20.

SORGENTE E DATI

POWERED BY

1)
Il codice sorgente di test è stato compilato con il compilatore cc65.exe versione 2.18 (git 0981c02). I risultati di questo test potrebbero cambiare se si utilizzano altre versioni e/o altri compilatori. Allo scopo della misurazione, i sorgenti della libreria MIDRES sono del tutto portabili su altri compilatori, essendo scritti in C puro.