Emulatore Compustar

Aggiornamento 6 Dicembre 2017: Nuova versione, 1.09!
Aggiornamento 27 Dicembre 2018: Nuova versione, 1.10!
Aggiornamento 12 Novembre 2019: Nuova versione, 1.11!

Non vi è mai capitato di voler fare un progetto… ma non abbastanza per inziare a farlo… e poi qualcosa vi fa venire in mente di nuovo quel progetto, ma siete pigri per cui non fate nulla. E alla fine capita qualcosa che vi fa capire che è giunto il momento.

Questo è quello che mi è capitato con l’emulatore del compustar.

Volevo scrive un emulatore software di qualcosa vintage ma allo stesso tempo non troppo complesso, perchè volevo divertirmi e non iniziare un progetto software troppo grosso.

Poi volevo imparare ad usare bene tutte le funzioni del Compustar che abbiamo al “Osservatorio Città di Legnano” (qui il link), ma il tempo che potevo passare in osservatorio era piuttosto limitato e la documentazione disponibile era incompleta.

E poi, nel 2009, sono arrivate le nuove EPROM di Tom Sorbel e io ho dovuto installarle (smanetto con i computer, quindi so fare tutto, no?).

Nel fare questo aggiornamento mi sono accorto che non avevamo nessuna documentazione tecnica del Compustar, non avevamo lo schema elettrico, una lista parti… niente. E se mai avessi dovuto aggiustare qualcosa, non avevo neanche idea di come avrebbe dovuto funzionare. E non riesci a capirlo quando, per l’appunto, non funziona.

Ho quindi iniziato un lungo (e a suo modo divertente) lavoro di reverse engineering del software e dell’hardware del Compustar, cercando di capire come le differenti parti del circuito lavoravano in base a come il software le pilotava. Approfondirò in un futuro articolo i dettagli di come il Compustar funzioni internamente. Per ora voglio solamente dire che sono rimasto impressionato do come è stato progettato. E’ veramente un capolavoro, viste le limitazioni che il progettista originale (che è, suppongo, Mike Simmons, visto che il suo nome si trova all’interno del programma) ha dovuto affrontare nel 1986. Una su tutte: la RAM era particolarmente costosa, al tempo, e l’intero programma del Compustar gira in 256 bytes di RAM!!

Questo lavoro mi ha fatto scoprire qualche bug (veramente pochi, in realtà, per un software che presumibilmente è stato scritto in assembler) e mi ha fatto allo stesso tempo pensare a miglioramenti che potrebbero venire fatti e a qualche altra idea. Di conseguenza era d’obbligo sviluppare un emulatore per capire fino in fondo i dettagli del funzionamento del software e provare eventuali modifiche che avrei voluto fare. Ma anche questo sarà oggetto di un futuro post.

La prima versione dell’emulatore era venuta pronta nel 2013, ma non era rifinita come mi sarebbe piaciuta, ed in più non la consideravo utile in senso generale per cui (sono pigro, non dimenticatevelo) non l’avevo pubblicata da nessuna parte.

La decisione, l’anno scorso, di creare, con Marco, questo nuovo sito per pubblicare un po’ delle cose che abbiamo realizzato mi ha fatto cambiare idea per cui, alla fine, eccolo qui.

Cos’è il Compustar (per chi non lo sapesse…)

Sfortunatamente in internet non ci sono molte informazioni su cosa sia il Compustar. E’ un computer dedicato realizzato dalla Celestron nel 1986 (credo) per automatizzare i telescopi da 11 e 14 pollici. Era molto avanzato per il 1986, ed è ancora perfettamente utilizzabile al giorno d’oggi. Gli mancano i calcoli per la Luna e per i pianeti, ma il catalogo oggetti è piuttosto completo. Ed è molto facile da usare.

Se volete giocare con l’emulatore, inziate premendo il tasto BEGIN e seguite le istruzioni inserendo un’ora (suggerisco notturna!), una data (scegliendo un anno prima del 2000: il Compustar non funziona nel 21esimo secolo!) e le vostre coordinate geografiche (che potete anche inventare). Il telescopio inizierà un movimento verso la stella di riferimento (REF) 11 (la Polare). Premete di nuovo ENTER e il telescopio si muoverà ancora verso una stella di allineamento scelta in base alle coordinate e alla data inserita. Premente ENTER un ultima volta e la procedura di allineamento verrà completata. Ora, per prova, potrete far andare il telescopio su qualche altro oggetto, M81, per esempio: premete SLEW, poi M (per Messier), poi 81 e infine ENTER. Udirete un beep e il telescopio inizierà a muoversi verso le coordinate di M81 dopo aver visualizzato alcune informazioni sull’oggetto stesso.

Il programma

La finestra principale del software è molto simile al Compustar stesso. I bottoni si possono premere cliccandoci sopra con il mouse o utilizzando la tastiera (se vi fermate con il mouse sopra uno dei quadrati bianchi un tooltip vi dirà quale è il tasto corrispondente).

Il menù View vi permetterà di cambiare le condizioni di “Low battery” e “Daylight” (condizioni che sono semplicemente indicate da una etichetta sul display del Compustar) e di abilitare e visualizzare entrambe i joystick (cliccate e trascinate la grossa palla gialla per spostare il joystick, mentre i due triangoli bianchi sono i due bottoni del joystick stesso).

Questo menù vi visualizzerà anche tutte le funzioni di “debugging” presenti nell’emulatore, funzioni che, se c’è abbastanza richiesta, descriverò in un futuro post. Tenete presente che sono piuttosto complesse e richiedono una conoscenza approfondita del processore 8051 utilizzato nel Compustar.

Il menù Options vi permette di selezionare (ed esegire) un firmware custom e di cambiare alcuni dettagli dell’emulazione (per esempio, come emulare la porta seriale del Compustar).

I menù File e About sono semplicemente quello che dicono di essere.

 

Potete scaricare il programma di installazione dell’emulatore qui, sono qualcosa meno di 2 Megabytes.

Versioni

v 1.01, 27 Ottobre 2013

  • Corretto: La finestra di “Add Breakpoints” a cui mancavano alcuni valori di default
  • Corretto: cambio di bit nella schermata di “Memory/SFR” che non funzionava
  • Aggiunto: Breakpoints sulla lettura della memoria programma
  • Portato il numero di breakpoint a 8 per tipo (erano 4 per tipo)
  • Aggiuto supporto tastiera per l’utilizzo del Compustar (i tasti 0-9, più ‘.’, ‘-‘, ‘s’, ESC, BACKSPACE e ENTER)
  • I file delle Eprom vengono ricaricati al reset del Compustar.

v 1.02, 28 Ottobre 2013

  • Aggiunta la possibilità di ricaricare i file delle Eprom al reset del Compustar SOLO se questi sono cambiati

v 1.03, 9 Dicembre 2013

  • Corretto: la posizione della finestra principale viene salvata quando l’emulatore termina
  • Corretto un Run time error se il file list non era valido
  • Eliminato il bordo bianco attorno ai bottoni (che non doveva esserci) su Windows 7
  • Aggiunta una finestra (sperimentale) per vedere le fasi dei motori. Essendo sperimentale non viene visualizzata dal menù di “Show All”

v 1.04, 12 Aprile 2014

  • Le descrizioni della configurazione dell’emulazione della porta seriale nel menù “Settings” è stata modificata per renderla più leggibile.
  • La finestra del Terminale per l’emulazione seriale è ora ridimensionabile e il testo di output può essere selezionato e copiato
  • Fixato un Run time error quando si eliminava un breakpoint senza aver caricato un file di list
  • Fixato: l’ESC non chiudeva la finestra di “Aggiungi Breakpoint”
  • Aggiunta la possibilità di caricare un file di descrizione per colorare e descrivere le celle di RAM
  • L’emulazione della tensione di batteria non è più fatta con un valore fisso, ma con un valore casuale all’interno dell’intervallo di funzionamento normale o di “batteria scarica”

v 1.05, 18 Maggio 2014

  • Aggiunta l’emulazione di una RAM non volatile o di un DS1643 nello zoccolo “D” (indirizzi 0x2000-0x3FFF)
  • Corretto: I file delle Eprom non venivano ricaricati se il reset veniva fatto usando il bottone della toolbar nella finestra del codice.

v 1.06, 13 Agosto 2014

  • Il contatore del tempo di funzionamento è ora a 64 bit, per cui non ricomincia da zero dopo poco più di 4200 secondi
  • Corretta anche l’emulazione del DS1643 che ora emula anche il suo tempo di avvio, iniziando a funzionare dopo 35ms.

v 1.07, 28 Ottobre 2014

  • Cambiato il modo di generare la tensione emulata della batteria. Dovrebbe ora essere meno “ballerina”

v 1.08, 27 Gennaio 2017

  • Aggiunto il menù di “About”
  • Le impostazioni vengono ora salvate in HKCU\SOFTWARE\A&M\CompustarEmulator
  • Aggiunto il supporto per il list file dell’assemblatore ASEM-51.

v 1.09, 6 Dicembre 2017

  • Aggiunta emulazione nel terminale per l’ingresso che assumo sia connesso all’input di “Carrier Detect” (visto che il Compustar ha un connettore DB-9 pre-standard)
  • Migliorata l’emulazione dei pin di I/O
  • Corretto un errore che non permetteva di mettere breakpoint ad indirizzi >= 0x8000
  • Corretta una “race condition” nella routine di tramissione sulla porta seriale
  • Migliorata l’emulazione dell’hardware quando il jumper A15 e la dimensione della EPROM codice non sono corrispondenti
  • Corretta la dimensione di un buffer che poteva portare alla corruzione della memoria cache della EPROM codice

v 1.10, 27 Dicembre 2018

  • Aggiunta una finestra per poter vedere l’utilizzo di CPU da parte dei vari interrupt del processore (ISR profiler)
  • Corretto un errore nello stato interno del core quando si verificava un errore caricando i file contenente l’immagine delle EPROM
  • Aggiunta l’emulazione della seriale per l’uscita dati per la cupola. I dati vengono trasmessi alla velocità reale di 1709 bps, con la possibilità di utilizzare la velocità standard di 2400bps nel caso l’hardware della seriale non funzioni correttamente.
  • Data e ora vengono per l’emulazione DS1643 vengono ora salvati in UT. Questo potrebbe causare un’errata ora nel caso fossero stati salvati con una versione precedente dell’emulatore, ma da ora in poi non cambieranno al cambio di ora legale/solare.
  • Aggiunta la possibilità di lasciar intravedere i led e i display che non sono accesi (“Ghosted Display”).
  • Le opzioni “spuntabili” ( “Ghosted display”, “Mute audio” e “Sticky Buttoms”) rimangono memorizzate quando si chiude il programma.

v 1.11, 12 Novembre 2019

  • Aggiunta la visualizzazione della durata “totale” di una ISR (che tiene conto anche del tempo in cui la ISR viene interrotta da ISR a priorità più alte)
  • Aggiunto bottone di azzeramento statistiche ISR
  • Corretta l’emulazione delle istruzioni MOVX @Rx,A and MOVX A,@Rx che non era corretta al 100%
  • Aggiunta l’emulazione del tempo di conversione dell’ADC (208µS)
  • Aggiunta la possibilità di generare un breakpoint software, tramite l’opcode 0xA5 (che non è definito nell’8032). Può venire disabilitato ponendo HKCU\Software\A&M\CompustarEmulator\HWOptions\SWI (DWORD) a 0
  • Aggiunto il supporto per la porta per la cupola, che è cambiata nei firmware 1.81+
  • Aggiunta la possibilità di definire come riconoscere la fine di una ISR, nella finestra di “ISR profiling”
  • Le etichette definite nel sorgente assembler per il programma (CODE) possono essere usate nella finestra di “Add Breakpoint” (solo per l’assembler ASEM51)
  • Aggiunto il supporto per emulare la luminosità del display
  • Corretta una “race condition” che poteva capitare quando si chiudeva la porta seriale del terminale o della cupola.
  • Corretta la generazione dei suoni, che presentavano un click periodico.

 

Leave a Reply

Your email address will not be published.