logo

Cette page a au moins 14 ans !
This page is at least 14 years old !

Présentation
Utilisation
A faire / Fait
Technique: Fonctionnement général
Technique: Le mélangeur vidéo
Technique: Les interfaces
Technique: Le logiciel


1) Présentation

Attention, cette page est ultra bordélique. Comme bien d'autres, elle sert de brouillon et n'est pas spécialement structurée pour être encore facile à lire !

Ojectifs:

  • Créer un générateur d'effets vidéo controlable en live, basé sur plusieurs consoles Sega Master System 2
  • Permettre à ceux qui ont du talent et des doigts rapides de latter le cul du public, oldschool style
  • Matériel modifiable et reproductible, fabrication détaillée
  • Utilisation de surfaces tactiles et de joypads "réarrangés" comme entrées
  • Controle par d'autres appareils (MIDI, RS232...)
  • Synchro musicale, et enregistrement de boucles d'actions ou de paramètres possible
  • Programme de taille inferieure à 32Ko

Le tout sera présenté sous forme d'un cube en polystyrène transparent, les contrôles sur la face supérieure et la connectique sur la face arrière.

Pourquoi ce nom, "Raster Bender" ?
Parce que le système repose avant tout sur la modification de matériel déjà existant, et pas que sur de la création pure et dure.
Si on place ça dans un contexte artistique avec des hippies armés de fers à souder, on se rapproche alors beaucoup du Circuit Bending.
"Bend", c'est plier en Anglais. "Raster", c'est l'autre nom pour "Bitmap". Tordeur d'images. Voilà tout.

On m'informe à l'instant qu'Adobe ont un truc qui s'appelle "Pixel Bender". Désolé, j'ai pas fait exprès !

Pourquoi ce symbole bizarre ?
Parce qu'il ressemble un peu à une pince, à un "8" et au symbole infini. C'est "4" en Dévanagari, une écriture indienne.

 

Le programme générant les effets en fonctions des commandes qui tournera sur chaque Master System sera dans une EEPROM, remplaçant le BIOS d'origine.
Chaque Master System est un "Layer" (ceux qui sont habitués à Photoshop et aux logiciels de montage vidéo sauront pourquoi).

Tous les Layers fonctionnent grâce à un même programme et sont donc égaux en termes de capacités.

 

2) Utilisation

Exemples:

A: Armer l'enregistrement d'une boucle (nombre d'appuis: longueur de la boucle, de 1 à 8 beats). Toucher le pavé tactile démarre l'enregistrement.
B: Arrête/reprend la boucle en gardant le décalage initial.
B+A: Relance la boucle et enregistre le nouveau décalage.

Les deux caracteristiques d'une boucle sont sa longueur, et son décalage par rapport au beat.
La longueur est toujours en rapport avec le BPM.

Bas: trainer le fond sans inertie (le fond ne bouge plus)
Haut: trainer le fond avec intertie (le fond garde sa vitesse)
Gauche: tirage de lignes
Droite: Kaosspad raster shift (position verticale, amplitude horizontale)

B+Bas:

En 50Hz, on a une précision de 20ms. Si on veut une précision au moins au BPM près, il faut dépasser les 16ms.
Un circuit métronome externe s'occupe du tap-tempo et de genèrer des NMI (interruptions) sur tous les Layers pour s'assurer qu'aucun ne rate l'impulsion.

 

3) A faire / Fait

 

 

4) Fonctionnement

Un mélangeur vidéo permet de mélanger les sorties RVB de chaque Layer en les additionnant, puis en divisant ou limitant le signal de sortie (moyenne ou somme des 4 images).
Les signaux mixés pourront ensuite être convertis en VGA ou composite.

Afin de pouvoir mélanger les couleurs sans avoir à prendre en compte les signaux de synchronisation, toutes les Master System partagent le même signal d'horloge et de reset, afin d'avoir une sorte de synchro "free running". Seul le signal du Layer 1 est gardé.

Les sorties audio des Master System peuvent être utilisées pour fournir un retour visuel en les adaptant pour piloter des LEDs (beat). Mais avec 0.5V p-p, on va pas aller loin...

Sur chaque Master System, un port sera dédié à un joypad normal et deux LEDs, et l'autre à la communication avec un microcontroleur qui lui sera propre, qui sera chargé de gérer la communication avec les autres (Pointillés) et la surface tactile (ADC, série).

Une alimentation à découpage sera utilisée pour fournir les 5V (3A) sans avoir à passer par les régulateurs 7805 d'origine.

Schéma de la disposition des Layers, qui correspond aussi à l'emplacement des Master System.

L'ordre n'est finalement pas important puisque la sortie vidéo est une moyenne des 4.

Un mode de sortie pourrait être ajouté pour que le noir soit considéré comme transparent (color key), mais ça nécessiterait un mélangeur RGB plus complexe. Et ça me fait assez chier aussi.

Au démarrage, les Layers affichent leur mire de haut en bas et un test des RAMs de travail est effectué.
Chaque mire peut être déplacée verticalement avec les flèches haut/bas correspondantes, pour tester le mélangeur.

 

5) Le mélangeur vidéo

Premiers essais de partage des signaux. Le reset est sur un bête bouton poussoir.

Ajout d'un oscillateur à porte logique (recyclage du quartz).
Les 30cm de fil de distribution du signal n'ont pas l'air d'être gênants.

Premiers essais d'AOPs pour le mélangeur vidéo aussi. Ici un LM741 qui tente de mélanger le rouge et le bleu. Ce fut bien évidemment désastreux.

Le câble Sega est surtout là pour donner le 12V sur la prise péritel, et pour adapter les niveaux du signal de synchro.

 

Schéma pour le mélangeur d'une couleur, avec diode de limitation à tester.

Le gain est fixé à 1 (moyenne des entrées).

 

Essais de suiveurs sur la composante bleue, Alex Kidd in Miracle World.

Voici une capture d'écran d'émulateur, comme réference.

Cahier des charges pour les AOP: bande passante mini 4MHz, slew rate mini de 5V/µs, output swing jusqu'à la masse, rail-to-rail en alim simple 5V.

Fréquence signal: 256*224*60 fps max = 2949120 pixels/s = 2.95MHz
Le CXA1145 dans les Master System Américaines est limité à 5MHz et prend 1Vp-p en entrée à travers 100nF.

 

LMC6062: Quasiment rail-to-tail (à 10mV près), très précis mais super lent. Slew rate de 10V/ms (soit 0.01V/µs).

Le slew rate négatif à l'air beaucoup plus élevé (retombe vite au noir).

 

LM358: Comprend la masse et fonctionne en alim simple 5V, bande passante de 1.1Mhz et slew rate de 0.6V/µs (toujours trop lent).

Latch-up quand l'entrée est proche de 0V parfois (lignes horizontales noires).

 

LM318, fonctionne normalement en +/-5V, pas vraiment utilisable en alim simple. Bande passante de 15MHz et slew rate de 50V/µs (devrait être assez rapide)

Beaucoup d'overshoot, qui dépasse les 1V nominaux qu'attend l'adaptateur RVB Sega (bleu clair sur les contours).

 

Après quelques heures de recherche, je n'ai pas trouvé mieux et plus facile à avoir que l'OPA350 (Texas Instruments).

Il est rail-to-rail en entrée et en sortie à 10mV près, marche en alim simple à partir de 2.5V.
Il dépasse aussi largement tous les autres besoins: slew rate à 22V/µs, 38MHz de BP et peut même supporter une sortie 75Ohms (même plus besoin du câble Sega).

L'AD810 était sympa aussi: 30Mhz et 350V/µs. Spécialement conçu pour la vidéo. Sauf qu'il n'est pas disponible en DIP (je n'ai pas réussi à utiliser les échantillons).

 

AOP de luxe. Merci pour les échantillons, TI !

C'est bizarre comme on vérifie les alims et l'orientation plus d'une fois sur un composant qu'on a pas en réserve...

Notez qu'ils sont toujours marqués avec le logo Burr Brown, mais qu'ils viennent bien de chez TI.

 

Le mélangeur RGB avec deux Layers en entrée, fait de 3 AOPs en additionneurs non-inverseurs.

La synchro part directement dans le câble sur le fil bleu à droite.

 

Essai d'empilage des deux premiers layers, pour voir si les longueurs sont bonnes et que les lignes communes peuvent être jointes par des pattes de composants récupérées.

CLK et RESET sont partagés, la synchro vidéo est prise sur le Layer 1 et les composantes sont mélangées derrière.

Layer 1 fait tourner Wonder Boy et Layer 2 le BIOS d'origine (Alex Kidd).

 

Le résultat sur ma télé pourrie.
Une addition bien nette, heureusement que mon poste n'est pas gêné par les 1.4V du blanc sur blanc.

Il faudra limiter les sorties à 0.7V plus tard.

 

Essai de communication avec le pavé tactile sur Layer 1. Un ATMega8 se charge de la convertion A/N et de la transmission sur le port joypad.

La Master System demande une convertion tous les VBlanks et 4 quartets sur haut/bas/gauche/droite à l'aide de la sortie TH. Le signal est temporisé de façon à laisser l'ATMega8 faire son travail. (Need oscillogramme).

La transmission des coordonnées nécessite en tout environ 2ms, sans optimisations.

 

Ce genre d'embûche débile permet de perdre efficacement une bonne heure à biper des connections au multimètre.

Une pastille et un morceau de piste arrachés sur une broche de la SRAM après déssoudage d'un BIOS. Sur une photo macro, ça se voit bien, mais à l'oeil nu c'est beaucoup moins évident.

Je n'ai pas compris pourquoi ça empêchait mon test vidéo de booter, il n'utilisait pas la SRAM...

 

Oscillateur à porte logique, tout ce qu'il y a de plus banal. Pas de condensateurs sur le quartz parce qu'il a l'air heureux comme ça (je penserais à en ajouter sur la version finale).

L'entrée sur le VDP se fait sur la broche 35. La broche 34 peut être laissée flottante.

 

Trois Alex Kidd in Miracle World mélangés.

Challenge à la con: finir les 3 jeux en jouant sur le même écran, en même temps. Gerbe et frustration assurée.

 

Il en manque plus qu'une...

Les tiges filetées sont là, et les ports joypad vont dégager d'ici peu.

Les boutons pause sont virés et toutes les lignes NMI sont mises en commun.

 

Ports DE-9:
Power: 2
Inputs: 5 (Haut, bas, gauche, droite, TL (Trig lightgun)
I/O: 2 (TR, TH)
Port $DD, bit4 "Reset button", toujours à 1 sur SMS2 (dispo sur le controleur d'I/O ?)

Port 1: joypad
Port 2: comm 4bits (tactile)

A chaque VBL, descendre TR (besoin d'un pull-up ?) pour demander les 4 LSB du touchpad.
Remonter TR, attendre, lire HBGD.
Attendre et le redescendre pour demander les 4 MSB du touchpad.
Remonter TR, attendre, lire HBGD.

Si le touchpad lit 0xFF, pas d'appui (ou données coincées).

Timeout d'un peu moins de 1/50 (PAL) entre les detections de TR du côté µC, pour qu'après un long moment sans demande de données (entre frames), les LSB soient prêts à nouveau.
Interruption sur changement d'état. Etat bas: préparation des données. Etat haut: mise des données sur HBGD, index des données suivantes incrémenté.

Prévoir un +12V pour la sortie péritel et le VPP des EEPROMS (transistor pour commuter le 12V selon /WR dangereux ?).

Mise à jour du programme:
Possible puisque le signal /WR est routé jusqu'au BIOS (qui est certainement NC à l'interieur), mais impossible de trouver 32Ko de flash en DIP28.
Des EEPROMs 27C256 montés sur supports feront l'affaire en attendant. Il sera peut être possible de commuter du 12V sur leur VPP à la place de /WR, pour pouvoir les effacer et reprogrammer depuis un bootloader copié en RAM. Compliqué et risqué mais faisable.

Pour chaque SMS2, retirer:
Prise DIN
Régulateur 7805
C2, R3, D1 (Reset)
Power.Sw
Pause.Sw
MPR-12808 (BIOS 32Ko)
Quartz, C3, C4 (10.7386MHz)

Entrées:
Alim +5V à découpage si possible (prévoir 500mA)
Reset
Clk
Joypad (reste une entrée), µC touchpad (reste une I/O)
Pause
HBGD

Sorties:
Rouge, vert, bleu, synchro
Audio
TR

La multiplication 8x8 bits sur Z80:
<@Fenax> mais ta multiplication tu la fais comment pour le moment ?
<@ftk> A*B: (resultat += A) B fois
<@Fenax> XD

footer
symbol symbol symbol symbol symbol