This page is at least 14 years old !
Présentation |
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:
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" ? 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 ?
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. 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). 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é. |
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). 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 |
![]() |
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. 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. 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