Bonjour
Dans le cadre du développement de "Scramble" sur TO8 (et à priori possiblement sur toutes les machines Thomson), j'ai 2 questions. La première est la plus importante (nécessaire pour positionner chaque vaisseau à la droite de l'écran au dessus du sol)
1/ Comment récupérer les paramètres du curseur courant dans les entrées du Moniteur en Assembleur, c'est à dire, avoir l'équivalent Assembleur des commandes Basic CSRLIN et POS ?
Dans les registres du moniteur ($6000-$60FF), je n'ai juste trouvé que le pointeur courant de l'écran (SCRPT en $605A-$605B) pour lequel je suis obligé de créer une routine pour retrouver les coordonées X et Y du curseur. A partir de ce pointeur je fais une différence (avec RAM écran), 3 fois un décalage à droite (/8) et une division entière par 40 (Via extramoniteur) et un modulo 40 (Via extramoniteur) pour retrouver ces coordonnées curseur! J'en déduis que le système ne sauvegarde pas ces 2 coordonnées là ? Et pourtant on les a en Basic... C'est sûr qu'avec un 6309 la division entière se ferait toute seule sans passer par l'Extramoniteur.
2/ J'ai vu qu'il y a un code ascii "répétition de dernier caractère"... malheureusement, c'est limité à 13 et je n'ai pas trouvé de moyen de changer cette valeur de répétition (ça m'aurait enlevé un petit bout de code assembleur)
A titre d'info, je vous livre le code assembleur que j'ai tapé pour retourner les coordonnées X et Y à partir de SCRPT
Code:
**********************************************
* Equates adresses RAM
* spécifiques aux TO
* a changer pour les MO
**********************************************
SCRPT EQU $605A Ptr adr. courant ecran
EXTRA EQU $ECOC 'Pt d'entrée Extra
RESETC EQU 0 'Pour un reset à froid
RESETW EQU 1 'Pour un reset à chaud
VALTYP EQU $6105 'Entrée Type Var
FACMO EQU $6150 'Mantisse A1 Octet1
FACLO EQU $6151 'Mantisse A1 Octet0
ARGMO EQU $615B 'Mantisse A2 Octet1
ARGLO EQU $615C 'Mantisse A2 Octet0
IMODO EQU 59 'Code Modulo Entiere
IDIVO EQU 60 'Code Div Entiere
MOVFM EQU 62 'Code FAC->X
MOVMF EQU 63 'Code X-FAC
**************************************
* Calcul curseur courant a partir du
* pointeur courant sur écran (SCRPT)
**************************************
CalCur *
PULS A,B
LDA #2
STA VALTYP 'Type entier
LDD SCRPT
SUBD #SCREEN 'Pour TO ou MO ?
*** Division D/8 car 8 lines/carac.***
LSRA 'Division de D par 8
ROLB
LSRA
ROLB
LSRA
ROLB 'Fin division/8
*** Division entière /40 ***
STD ARGMO 'Dividende (2 Octets)
LDD #40 '40 carac/ligne
STD FACMO 'Diviseur
LDB #IDIVO 'Code pour Div entier
JSR EXTRA
LDD FACMO 'Curseur Y Courant
ADDB #64 'Pour PUTC Curs Y
STB CurseY
LDD #40 '40 carac/ligne
STD FACMO 'Diviseur
LDB #IMODO 'Code pour Div entier
JSR EXTRA
LDD FACMO 'Curseur Y Courant
ADDB #65 'Pour PUTC Curs X
STB CurseX
PSHS A,B
RTS
CurseY FCB 0 'Position Curseur Y
CurseX FCB 0 'Position Curseur X
C'est sûr que la division entière par 40 prend quelques cycles d'horloges (plusieurs dizaines ?) et idem pour le modulo mais cette opération ne s'effecuera qu'à l'ajout d'un nouveau vaisseau à droite de la zone ce qui est moins gourmant que MAJ CurseY et CurseXv à chaque changement de colonne du relief (20 colonnes) toutes les 4 phases..