J’ai découvert que le firmware contient déjà une routine pour désactiver les changements automatiques de couleur. Cependant, elle ne fait pas partie de la table de saut, donc une petite routine en assembleur est nécessaire pour l’appeler. Elle désactivera la gestion des couleurs par le firmware et réglera tous les stylo-couleurs sur bleu foncé. Ensuite, vous devrez modifier directement les couleurs via le GateArray ou l’ASIC. Il faut utiliser les codes couleur matériels impairs au lieu des jolies valeurs ternaires utilisées par le BASIC et le firmware. Voici un petit programme qui réalise cela. Pour vérifier que cela fonctionne, définissez par exemple BORDER 1,0 au préalable. Lorsque le programme se termine, le clignotement s’arrête.
MODE 2 : BORDER 0,1
10 MEMORY &9FFF ' Protéger la mémoire pour la petite routine assembleur.
20 POKE &A000,&CF ' RST &10 ;; LO JUMP
30 POKE &A001,&55 ' DEFB &55 ;; octet de poids faible de l'adresse
40 POKE &A002,&0D+&80 ' DEFB &8D ;; octet de poids fort de l'adresse + activer le ROM BASIC
50 CALL &A000 ' Appeler la routine assembleur préparée.
60 OUT &7F00,1 ' GateArray: SELECT PEN 1
70 OUT &7F00,&4A ' GateArray: SET INK brightYellow
Vous devez modifier la ligne 30 en fonction de votre système. Les valeurs sont les suivantes :
- 464 - &4F
- 664 - &51
- 6128 et Plus - &55
Il est peut-être possible d’obtenir le même résultat avec une autre approche, par exemple en désactivant simplement la routine d’événement au lieu de la supprimer.
Le découpage des réponses est limité à trois réponses consécutives. Je dois donc fusionner ce qui précède avec ma quatrième réponse ci-dessous.
Je voulais comprendre comment fonctionnait le petit programme de l’AA114. Après l’avoir désassemblé et analysé, je ne suis pas vraiment convaincu : il fonctionne, mais il installe une autre routine d’interruption qui entre en conflit avec la routine du firmware (en réinitialisant constamment un compteur). Je pense que désactiver la routine du firmware reste la meilleure solution.
NOLIST
ORG #8000
KL_NEW_FRAME_FLY EQU #BCD7
KL_DELETE_FRAME_FLY EQU #BCDD
PRIORITY EQU #81
ROM_CONFIGURATION EQU #FF
BLINK_COUNTER EQU #B7F8
enable_color_change_suppression: ;; ;;
LD HL,event_block ;; 21 17 80 ;; Définir le pointeur vers les données d'événement.
LD BC,PRIORITY*256 + ROM_CONFIGURATION ;; 01 FF 81 ;;
LD DE,RESET_BLINK_COUNTER ;; 11 12 80 ;; Définir le pointeur vers la routine d'événement.
JP KL_NEW_FRAME_FLY ;; C3 D7 BC ;; Installer la nouvelle routine d'événement.
disable_color_change_suppression: ;; ;;
LD HL,event_block ;; 21 17 80 ;; Définir le pointeur vers les données d'événement.
JP KL_DELETE_FRAME_FLY ;; C3 DD BC ;; Désinstaller la routine d'événement.
reset_blink_counter: ;; ;;
XOR A ;; AF ;;
LD (BLINK_COUNTER),A ;; 32 F8 B7 ;; Réinitialiser le compteur de clignotement.
RET ;; C9 ;;
event_block: ;; ;; Stocker les données d'événement ici.
;; DEFW next_event_block ;; ;;
;; DEFB counter ;; ;;
;; DEFB priority ;; ;;
;; DEFW event_routine ;; ;;
;; DEFB rom_configuration ;; ;;