Emulation de la carte twilighte V0.3

Attention, la carte est incompatible avec le telestrat. Au niveau matériel, c’est comme un telestrat, mais une carte twilighte avec le telestrat mettrait en conflit les cartouches, et le port série.

Pour commencer, il y a 2 registres disponibles sur la carte :

  • $342 : le controle de la carte et le numéro de version du firmware, nom : twilighte_register. Au boot, il est égal à 1 car c’est égal au niveau du firmware, tout le reste est à 0
  • $343 : controle du swap des banking : twilighte_banking_register. Au boot, il est à 0

Contenu de la carte

  • 1 SRAM 512KB
  • 1 EEPROM 29F040 (512KB) qui peut être écrite
  • un VIA65C22 pour lequel, il fonctionne comme sur telestrat. Ce qui n’est pas cablé :
    ca1,ca2cb1,cb2, pa3 (cablé sur le cpld pour gérer l’accès à 32 banques, mais cela sera dans une prochaine version du firmware), pa4 (idem pa3), pa6, pb5. le 2ème via est bien à la même adresse que le telestrat : $320
  • un ch376 avec un port sdcard, un port usb.

Twilighte register ($342)

Au boot, il est égal à 1

Version du firmware (b0 à b3)

(b0 à b3 : version du firmware). Il doit être égal à 1 actuellement avec la version V0.3. il ne peut pas être modifié logiciellement (read-only)

Test : il faut avoir la dernière rom du shell, et faire “twil -f” cela affichera 1.

Passage en eeprom ou ram pour le banking (b5)

Par défaut, il est à 0, ceci veut dire qu’on présente les roms de l’eeprom quand la banque 4, 3, 2 et 1 sont affichées avec pa0, pa1, pa2 qui sont manipulés

Test : “twil -r”, nous voyons les banques 4,3,2,1 issues de l’eeprom. “twil -w” : nous voyons les rams. Attention, actuellement, elles ne sont pas initialisées (les banques RAM au boot, à fixer coté shell), donc le bank après un twil -w fait n’importe quoi.)

Quand le bit 5 est à 0, on affiche les banques de la ROM, quand il affiche les banques de la SRAM

Aide pour l’emulation

il faudrait avoir un répertoire dans “plugin” : twilighte_board

Ce répertoire contiendrait le code comme le CH376 avec une conf associée à

la carte avec sans doute ces infos

twilighte_board_version = 0.3
twilighte_board_firmware= 1

twilighte_rom31=

twilighte_rom7=kernel.rom
twilighte_rom6=basic11.rom
twilighte_rom5=shell.rom
….
twilighte_rom0=

Je ne sais pas s’il faut avoir une conf pour définir ce que contient le firmware 1 et la carte twilighte (à mon avis oui). ex

twilighte_board_v0.3.cfg
====================
rs232=false
fdc=false
ch376=true
sram_banking_size=512KB
eeprom_banking_size=512KB
eeprom_id=29F040

Twilighte banking register ($343)

b0,b1,b2

Ces 3 bits définissent les 3 lignes d’addresse à changer soit en SRAM soit en ROM au niveau hard

par défaut, il est égal à 0, il affiche donc les banque ROM 1, 2, 3 et 4. Pour révenir à cet état, il faut faire un “twil -s0”

twil -s1 met ni plus ni moins que la valeur “1” dans le registre Twilighte banking register

A ce stade, le -s1, met la ligne d’addresse de A16 de l’eeprom et de la SRAM à 1

Un twil -s4 affiche la rom8, la rom7, la rom6 et la rom5. Cette configuration permet la programmation de l’eeprom pour le kernel notamment. Ce régistre peut être écrit sur 8 bits, mais dans le code vhdl, seuls les 3 bits sont utilisés. A terme, on pourrait rajouter plus de mémoire et le banking serait géré comme cela.

Programmation de l’eeprom

La détection du l’id et du manufacturer se fait avec par la manipulation du registre twilighte mais aussi celui du registre de twilighte_banking. En effet, il faut pouvoir accéder aux lignes d’adresse les plus basses des rom.

Pour passer en mode programmation l’eeprom (le process est universel pour les eeproms, néanmoins, il apparait que pour certaines, il faut plus de bits à setter. Pour l’AM29F040, pour que cela marche (process universel) :

Si on prend le fonctionnement seul de l’eeprom, il faut écrire (la broche write de l’eeprom basse bien à l’état bas dans ce cas) à l’adresse $5555 la data $AA, puis en $2AAA la data $55, puis pour avoir le manufacturer, on donne donc au 3 octet le numéro de séquence à l’adresse $5555. C’est la valeur $90 pour récupérer le numéro de séquence. Et donc,dès qu’on lit n’importe ou à l’adresse $XX00 et $XX01, cela va renvoyer l’id et le manufacturer dans le code kern-upd, on lit en $c000 et $c001, mais selon la datasheet, la lecture, tant qu’on lit $xx00 et $xx01, cela fonctionne. Ensuite, on sort du mode en envoyant reset à l’eeprom avec $F0 à l’adresse $C000, mais normalement, cela devrait reset aux autres adresse $XX00 (non testé).

Kern-upd ne fait que basculer de banque 16KB pour pouvoir accéder aux lignes d’adresse $5555 c’est pourquoi on écrit $D555 pour taper au bon endroit.

Quand on lance “kern-upd” qui est un binaire, quand on fait ‘i’ (identification), on doit voir AM29F040 et AMD affichés. Car cela renvoie $01 et $A4 quand on lit en $c000 et $c001 de l’eeprom : expliquer comment faire ou voir code : https://github.com/orix-software/kern-upd/blob/master/src/eeprom.s#L22 ( _read_eeprom_manufacturer ).

Cette eeprom ne peut être programmée que par bloc de 64KB.

Outils de tests

# twil -s0

Affiche les banques (le décalage d’id de ROMBANKX et “Bank X” dans la commande bank est lié au fait que les 16KB de rom sont séquentielles sur l’eeprom et donc on part de ‘0’ sur l’eeprom A0 à A13 variables mais A14,A15,A16, A17 à 0

  • ROMBANK0=Bank 1 (empty ROM V0.2)
  • ROMBANK1=Bank 2 (empty ROM V0.2)
  • ROMBANK2=Bank 3 (forth)
  • ROMBANK3=Bank 4 (monitor)

# twil -s1

#twil -s2

# twil -s4

La “Bank 4” affiche en réalité la banque au dessus du kernel

#twil -s5

# twil -s6

# twil -s7