Autore Topic: cc65 e custom hardware platform  (Letto 9939 volte)

Offline ecalogiuri

  • Tech Guru
  • *****
  • Post: 235
  • Karma: +2/-0
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #30 il: 10 Gennaio 2014, 09:13:55 »
p.s.
per il fw AVR8 dell'emulatore 6502 parti ex novo o da un progetto pre-esistente ? E nel caso quale ?

Ciao,
sono partito dal sorgente allegato. So che è stato usato su diverse piattaforme e diversi emulatori (anche NES) quindi di sicura accuratezza. Poi ho modificato il codice secondo le mie necessità.

Ciao  :D

Offline ecalogiuri

  • Tech Guru
  • *****
  • Post: 235
  • Karma: +2/-0
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #31 il: 10 Gennaio 2014, 09:15:20 »
Userò un ATMega32, penso a 20 Mhz ed emulatore svincolato dalla simulazione dei wait state per istruzione. La zero page la mapperò direttamente nella memoria del microcontrollore, spero così di guadagnare un pò di velocità...
Se il 6502 viene emulato alla massima velocità (senza, quindi, rispettare la sua pipeline per l'esecuzione delle istruzioni), allora se migliori l'accesso alla pagina zero migliori sicuramente la velocità d'esecuzione, visto che è LA zona di memoria per eccellenza e usatissima da questo processore. Se ti avanzano altri 256 byte, infilaci anche lo stack, visto che anche quest'area di memoria è molto usata.

Infatti, ho mappato anche lo stack e i 6 byte per le operazioni id I/O direttamente nella memoria del microcontrollore...

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:cc65 e custom hardware platform
« Risposta #32 il: 10 Gennaio 2014, 09:42:48 »
Esatto, aveva dei limiti dettati dal prezzo finale, che doveva stracciare la concorrenza. Il rapporto qualità / prezzo era talmente devastante che diventò la cpu più diffusa in assoluto tra quelle economiche, insieme allo Z80 che puntava però alla fascia più alta e vantava la compatibilità con Intel.

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #33 il: 10 Gennaio 2014, 17:25:10 »
@TheKaneB

ah, ecco perché l'hanno usato, costa 1:10, altrimenti non si spiega

il dubbio primario era: quanto e' oneroso modificare (la machine layer e as di) c65 per compilare per 6811, ovvero quanto sono correlati e simili 6502 e 6811 ?
e mi sono l'idea che sono correlati ma non simili, ovvero quella faccenda qui sopra dei registri indice e degli offset, oltre alla faccenda dello stack, concorre a differenziarli sensibilmente, in altre parole prevedo un grosso onere di lavoro nel modificare c65 per supportare 6811.
Esattamente. Lascia perdere.

Anche se non so a livello prestazionale come sia messo il 6800/09/11; il 6502 è un mostro di velocità.
Citazione
-> meglio puntare a small-C, cercando un adeguato branch
Yup.

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #34 il: 10 Gennaio 2014, 22:50:02 »
Ne realizzai uno per 65C02 una ventina d'anni fa, in Turbo Pascal + assembly (o inline di codice machina; Non ricordo bene adesso). :P

Comunque il 6502 è facile da decodificare, perché ha dei pattern precisi per quanto riguarda le istruzioni dotate di modalità d'indirizzamento verso la memoria, che si ripetono con precise cadenze (offset).

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #35 il: 11 Gennaio 2014, 17:08:58 »
E' all'incirca regolare per tutte le istruzioni che hanno il campo EA. Ma ci sono alcune istruzioni che hanno altre forme d'indirizzamento; si tratta, però, di opcode completamente diversi, anche se lo mnemonico è lo stesso. Ti faccio un esempio pratico: la CMP; è disponibile in versione (An)+,(Am)+ ; ma ha un opcode diverso dalla normale CMP, che ha il campo EA che funziona come al solito.

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #36 il: 11 Gennaio 2014, 18:17:32 »
(An)+ vs (Am)+, che differenze ci sono,
Nessuna: è per dire che An è un registro indirizzi (per la destinazione) e Am è un altro registro indirizzi (per la sorgente).

Esempio: CMP.B (A0)+,(A1)+ ; Confronta il byte referenziato da A1 con quello referenziato da A0, e incrementa di uno entrambi i registri.

Normalmente con la CMP potevi fare soltanto: CMP.size <EA>,Dn ; Confronta Dn col dato (immediato, registro, o preso da un indirizzo di memoria, a seconda della modalità d'indirizzamento EA).
Citazione
e sopratutto sono novita' introdotte nel 68020 ? Io sto sul capostipite 68000
No, è tutta roba 68K pura. Il 68020 introdusse tante altre novità: nuove modalità d'indirizzamento (anche MOLTO complesse) e nuove istruzioni (anche molto complesse).
Citazione
ho ripreso in mano un emulatore che ho scritto e mai concluso nel 2004, non ho completato tutte le istruzioni, pero' ai tempi avevo separato EA costruendo un apposito modulo software che se ne preoccupa, oggi mi chiedevo se quel modulo va bene as-is o se ci sono istruzioni (tra quelle che non ho implementato) che dovrebbero escluderlo per fare come vogliono loro
Come ti dicevo, ci sono istruzioni che hanno delle eccezioni, ma si tratta di istruzioni sostanzialmente diverse perché hanno opcode diversi.

Per essere chiari: se devi realizzare un emulatore o sintetizzare un 68K, non è assolutamente un problema, perché gli opcode che usano il campo (o i campi, nel caso della MOVE, che ne prevede due) EA sono molto regolari. Al più ci sono opcode diversi che eseguono sostanzialmente la stessa operazione a livello di ALU, ma magari con particolari formati per gli argomenti; come la CMP, appunto.

Se invece devi realizzare un compilatore, allora è un po' rognoso, perché essendo lo mnemonico identico devi riconoscere le varie eccezioni, ed emettere l'opportuno opcode.

EDIT: ci sono due eccezioni che mi vengono in mentre. Non puoi utilizzare una modalità d'indirizzamento che utilizza il PC, se l'indirizzo dev'essere scritto (si tratta della destinazione dell'operazione). Altra cosa, ma questa è ovvia, non puoi usare la modalità immediata come destinazione.

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #37 il: 12 Gennaio 2014, 07:23:30 »
Allora dovrebbe essere sufficiente tenere conto soltanto delle due eccezioni di cui ho parlato prima.

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re:cc65 e custom hardware platform
« Risposta #38 il: 12 Gennaio 2014, 13:38:44 »
Si, esattamente, ma gli assemblatori dovrebbero riconoscere automaticamente quella particolare CMP e generare l'apposito, diverso (rispetto alla normale CMP), opcode. Similmente ad altre istruzioni, come la ADDA, ad esempio (nessuno usava ADDA: tutti usavano ADD).
Comunque guarda che ci sono istruzioni, come la ADD ad esempio, che usano anche la forma Dn,<EA>.

Tags: