Table des matières

#AC [Monogams] Affichage date.

Il faut:

  • Bruler la date en &dfea (idéalement via un petit fichier DATE.O): chaine ASCII 13 char + 0.
  • Afficher cela dans le message d'accueil.

Cela offre plus de choix dans la date et facilite la mise à jour.

#AB [Monogams] Enlever affichage debug SP.

En première ligne, SP réel est affiché (e.g. !bfdc) pour des besoins de debugging qui ne sont plus d'actualité.
Il faut enlever ça pour la release !

#AA [Editeur/Fred] Commande pour fermer un fichier.

Quand plusieurs fichier seront ouverts, on veut être capable de fermer l'un d'entre eux sans toucher les autres (afin de faire du ménage dans l'UI et libérer de la mémoire).
NB: Peut-être CONTROL-N peut remplir ce rôle.
Prérequis: #A9

#A9 [Orgams/Internal] Close a source.

Right now, Orgams can only be reinitialized (vir CONTROL-N or ùOrgams RSX). We want to be able to close one particular source and recover associated memory.

#A8 [Assemble] RESTORE should save registers

RESTORE should behave like a breakpoint, that is preserve all registers.

#A7 [Assembler] BREAKPOINT directive for inline breakpoint

Add a BREAKPOINT directive acting like BRK, but adding inline code like RESTORE.
This would allow to break even if &BE00-&BE1F is destroyed or not accessible (e.g. &C2 bank configuration)

Related: TODO #05

#A6 [Editor/Fred] Remove error if corresponding line is deleted

  • French

Version deluxe du TODO #18.
S'il y a une erreur d'assembler en ligne 4 par exemple, puis que cette ligne se voit effacée, on ne devrait plus l'atteindre en cyclant parmi les erreurs (CTRL-F4).
Le mieux est de flaguer l'entrée comme vide (e.g. avec 0 ou &FFFF), et de s'assurer que CTRL-F4 saute une telle entrée. Cela permet:

  • de conserver la correspondance ligne <-> message d'erreur.
  • de ne pas rester sur place quand on presse CTRL-F4

Idem pour l'historique des modifications et de CTRL-ENTER.

  • English

Deluxe version of TODO #18.

If there is an assembler error on line 4 for instance, and that line is deleted, we shouldn't be able to cycle to it (CTRL-F4).
It means, either:

  • remove the entry from the table (i.e. shift next entries)
  • replace the entry by 0000, and make sure CTRL-F4 skip it

Similar things for modification history and CTRL-ENTER history.

#A5 [Editor/Fred] Refresh screen when label's case has changed

Case change (cf todo #A2) impacts all existing occurrences of a label.
When such change happens, it must be reflected on the editor screen. The easiest way would be to refresh the whole screen.
It would be triggered by a particular status flag (cf todo #A4).

Prerequisite: #A2, #A4

#A4 [Parser] Give more information about entered line.

We should get some info/flags about the entered line, either at SET_LINE's return or via a call to GET_STATUS.
For instance:

  • Flag when label case has been changed (required for todo #A5)


#A3 [Parser] Optimize label lookup


That's the main cause of slowness in parsing.
An easy improvement would be to use the index table to check size before comparing strings themselves.
A hard and huge (CMB) improvement would be to switch to a TRIE data structure, would could be very convenient for auto-completion as well.

#A2 [Parser] Change label's case when defining it

The behaviour would be (updated, see below) :

  • if label entered in lowercase (or outside edition context): use existing case
  • if label entered with one or more uppercase letter: change existing case (for all occurrences of this label)

This allows to change the case of a label, and consolidate labels when importing maxam sources.

NB1: No two isotopic labels with different cases could co-exist, which is a good thing.
NB2: Label's case could be changed inadvertently, but this isn't considered as a big issue (from a survey involving 1 person).

That behavior would prevent to switch back to all lower_case. Instead, we must:

  • Set/update case when label is defined.
  • When label is used (whatever the case), pick existing case.

Prerequisite: #A1
Required for proper maxam import

#A1 [Parser] Case insensitivity for labels

Search is already case insensitive, but not edition or monogams commands.

Orgams would have best of all worlds:

  • don't have to bother to enter the correct case when using a label.
  • the chosen case would be respected (uniformity)
  • no ugly ALL CAPS labels in error message - suivez mon regard :)

Prerequesite for #A2

XXX #A0 [Orgams] Update embedded help.

Done 25/11/2018 in txtB.

New commands should be documented. E.g., in monogams:

hh start,size    Dump data into source as BYTE
dnn              Disassemble at position nn (>)
$nn              Set $ for trace
tnn              Set both $ and > and go to trace

#9F [Monogams] Use 'size' for hh command.

See #5F.
hh,start,size would be handier.

XXX #9E [Assembler] Proper error messages.

Done 27 Nov 2018 in ASS1Q.

Some error messages were reused for testing purpose. Precise diagnostic is important.

E.g. Undefined label -> Undefined macro

#9D [Editeur/Fred] Shift clr/del to erase before/after cursor.

  • SHIFT CLR Erase under cursor and all after cursor
  • SHIFT DEL Erase all before cursor but not cursor.

The erased segment, if not consisting of spaces only, should be put in the buffer used by CONTROL-DEL / CONTROL-P

#9C [Editeur/Fred] Shift gauche-droite pour passage rapide d'un mot à l'autre.

!! Specification to be completed and validated. TODO? Reproduce exactly Protext Behavior?

Use cases:

  • Quickly navigate through comma-separated sequences (BYTE or WORD)
  • Quickly navigate through MACRO parameters (also comma-separated)

Separators (define word) : ,;:

  • Version basique
Position in word -> between words start middle end
After shift-left start of previous start of previous start of previous end of previous
After shift-right start of next start of next start of next end of next
  • Version deluxe

Respecter le pro-rata du mot sur lequel on est. Si le curseur est au tiers du mot, on passe au tiers du mot précédent (resp. suivant).

TO SEE : behavior with space.

  • space might not be seen as a separator, so we jump from one whole expression to another in this case BYTE ana + nas, cac + ao /2)
  • space might not be seen as part of a word neither, so we always jump to an alphanum character, the real start of the expression.

#9B [Editeur/Fred] Shift haut-bas pour scrolling à la protext.

Souvent on aimerait scroller pour avoir plus de contexte, tout en retenant la position courante du curseur.
Les raccourcis suivants devraient permettre cela :

  • shift haut scrolle d'une ligne vers le bas.
  • shift bas scrolle d'une vers le haut.

Que faire quand on atteint une limite, par exemple si le curseur est déjà sur la première ligne, scroller vers le bas ferait perdre la ligne en cours de focus !

  • version 1 : l'interdire.
  • version alternative : dans ce cas, le curseur change de ligne.
  • version de luxe : le permettre, mais revenir souplement à un état valide quand on lâche SHIFT (effet élastique).

#9A [Orgams] Add ROM checksum.

Since hardware isn't always reliable, it would be better to report a checksum error than to crash.

XXX #99 [File/Madram] Add CRC in saved source files.

Edit1: Done 26 Apr 2018 in OrgAE. Very simple checksum actually, but for each chunk, making it possible to grossly locate the error.
Edit2: Fixed 07 Jul 2018 in OrgAG. Fix when checksums overlapping buffer boundary.

Due to new hardware+DOS which are less battle-tested than floppy+AMSDOS, it would be wise to add additional checks in '.o' files.
Then, a corrupt file would be detected rather than silently accepted.

#98 [Trace/UI] Remove '>' when fast-tracing

When using 'N', 'R', 'SPACE', we enter fast-trace mode. Fast, but not immediate.
So we should remove '>' and redisplay it only at return point, as a visual clue.

XXX #97 [Monogams/Trace] Quick way to trace at given address.

Edit: Done 2018/3/3 in parseaa + mono6

Since todo#89, Dnn only disassemble at nn, without touching $.
This is less handy if we actually wanted to step-trace from nn.
For this purpose, we propose to introduce T (like in Dams).

In summary, we would have:

* Dnn: disassemble from nn (change >)
* $nn: change pc and go to trace (change $)
* Tnn: change pc and go to trace at nn (change both. Equivalent to Dnn + CONTROL-G or $NN + CLR)

XXX #96 [Editor/Madram] Make CTRL-ENTER work for Macro as well.

Doublon bug #AC.

To be able to jump easily from invocation to definition.

XXX #95 [Orgams] Raise the 64k source limit

Edit: Done 11 Mar 2018 in orgAC and previous. New limit ~111kb (on purpose).


  • Without #includes yet, 64k can be too tight.
  • There is plenty of RAM left on the X-MEM
  • [Regression Fix]. Since now the 64k are shared with labels and values (cf #81 and #94), some sources can't be loaded anymore.

XXX #94 [Orgams] Store labels values in chunks (allow more than &300 labels)

(16/12/2017) Fixed in aapl, ass1l, ch1p

Bug #81 was concerned with symbols text representation. We must also dispatch labels' values in banks:

  • max number of labels would go from &300 to &600
  • needed for todo #82

#93 [Editeur/Fred] [internal] Use field editor for line edition

Factoriser en utilisant la routine 'field editor' pour la saisie du code lui-même.
Aucune fonctionnalité ne se verrait ajoutée, mais cela permettrait d'allèger grandement le code.

#92 [Assembler] Report line of MACRO invocation in case of error

If a macro expansion leads to an error, the erroneous line inside the macro definition is reported.
The line of invocation should also be shown.

XXX #91 [Orgams] MACRO directives.

Done (modulo bug #AB) 26 Aug 2017. ass1h, disa10, parsey

Allow macros. E.g.

; Macro definitions

      inc b:outi

    IF measure_tm
         add n:ret m:exx:jp iy
         ret      ; n not used: that's ok

    MACRO COMPUTE_WHATEVER x,y,z ; 3 parameters
    IF z
       COMPUTE_WHATEVER x*x-y,10,z-1 ; recursive calls are possible

; Macro invocations

    COMPUTE_WHATEVER toto,5,2*toto

Nb: without local labels, macro use is quite limited, but still.

XXX #90 [Editor/Parse] Eat heading and trailing ":"

Done 14/08 parsev

For now they are considered as syntax error, although they do no harm.


  • When we split a multi-opcode line (ld (hl),a:inc l), superfluous ":" should be eaten.
  • Allow "label:" syntax from foreign sources.
  • Allow to discriminate:
   init  ; seen as label even prefixed with space (current behavior)
:init    ; seen as macro invocation (with 0 parameters) even without space

#8F [BRK/Lazare] Rom detection.

Currently, when a breakpoint occurs, the ROM selection is left to the last user setting. This is confusing and can lead to crash when resuming execution (since the correct ROM isn't connected).
We should detect which ROM was selected at BRK time, as for bank.

#8E [Trace] Firmware-aware shortcut.

When RST such as &18 is used, we should propose to go directly to the pointed routine. Actually a workaround is to enter dnnnn in monogams, without changing rom number, and press space.
Which shortcut ?

  • 'S' cannot be used, in case we really want to trace step by step the far_call routine itself
  • 'N' is already reserved for fast-trace until routine's return.
  • Maybe 'Shift+S'.

When the routine at &18 isn't firmware's far_call, this option should be disabled.

#8D [Trace] Show stacktrace.

Show call stack, either in 'visu' window (cycle with source/dump via CTRL-V), or next to the stack (might be difficult, since labels name can be quit long).

#8C [Monogams] Graphical memory dump.

A la 'mem' from LeHackeur.

  • Three thumbnails should be displayed by default when entering Monogams (Current connexion, C0/RAM, C2/RAM).
  • Since it takes sometimes to display, it should be done as a background task.

#8B [Trace] Show modified memory.

Bug #A3 states that shaded opcodes represent execution history. But if it doesn't match the current memory anymore, it can be confusing.
In this latter case, we should display a "!" marker together with the new memory dump.

#8A [Editeur Internal/Fred] Routine insert_at_current_pos

Il faudrait rajouter la routine suivante, destinée à être appelée de l'extérieur (implique de rajouter l'entrée dans le JumpBlock).

; IN: HL pointe sur texte à insérer
      ; A=0   Doesn't change block markers
      ; A=1   Block = inserted line (so start == end)
      ; A=2   Block end = inserted line   (*)
; OUT: If OK, Carry et position courante incrémentée (**)

(*) Le paramètre A permet de sélectionner les lignes insérées.
   * permet de visualiser ce que a été ajouté.
   * en cas de remords, un COPY-DEL suffit
(**) de sorte qu'un appel répété à la routine insert les lignes dans l'ordre.

XXX #89 [Monogams/Madram] T command for $, D command for >

Done 27/7/2017 monMZ

The debug/trace screen already discriminates execution pointer ($) from disassembling cursor (>).
It would make a lot of sense to be able to set them separately:

  • dnn : set > to nn
  • tnn : set $ to nn

NB, to set both at the same address, either use:

  • dnn:tnn (NOT AVAILABLE YET)
  • dnn then CONTROL-G
  • tnn then CLR

It facilitates breakpoint at arbitrary address (even in ROM). Let's say you want to execute `it` and break at `onkey`, just enter:

tit:donkey    then press T or space  ; fast trace until cursor position
NB: maybe the command should be named $ instead:
* we just change PC ($) pointer, we do not enter the trace
* it would free T for another use

Related: todo #70

#88 [Monogams/Madram] BR command to set breakpoint

Context: Sometimes you want to set a breakpoint without using the BRK directive in source, either because you don't want to re-assemble, or because the location is out of source (e.g. &bc77) (*)

So, BRnn would just do that. Same syntax as Maxam, except you don't need separator.
NB: it wouldn't work in ROM. Cf TODO #89 instead.

Requires TODO #55

(*) Bad reason, since you can do:

    ORG &1000
  ;your code

    ORG &bc77

#87 [Monogams/Madram] RESET & FILL commands

Edit 25/7: everything done except RESET & FILL. parseP and monMW

Actually, the following set of commands should be available. Names can be changed if you have better suggestions, or to protect the innocents.
Value parameter is optional.

  • CLR [value=0] (shortcut for CLEAR)
  • CLEAR [value=0]: Fill the first 128kb with value
  • CLP [value=0] (shortcut for CLEARPAGE)
  • CLEARPAGE [value=0]: Fill whole 64k current page connexion (e.g. if &C4, reset first 64kb except 4000-7FFF, and reset 'bank &C4').
  • RESET [value=0]: CLEAR, then reinstall firmware with RSX work-zones.
  • FILL start,size[,value=0]: Fill from start in current page connexion

Note: none of these exactly reproduce Hacker's CLEAR behavior, which would be CLEARPAGE:BANK &c2:CLEARPAGE:'BANK as before'.

#86 [Editeur/Madram] Make CTRL-ENTER and CTRL-* works for labels in comments as well.

Either in a commented valid line or in free text extravaganza.

#85 [Orgams] INCLUDE directive

Requires #82

V2: allow to pass parameters.

INCLUDE "tools" (dev = 1, all = 1)

And later V3: namespace mecanism to avoid labels clash. E.g.

INCLUDE "tools" as tools
INCLUDE "player4" as player

    call tools.init
    call player.init

Cf: v2boiteaidees

#84 [Editeur/Madram] Allow import of orgams source

Replace #5D.
Thanks to #82, we could open the imported file externally, and then transparently perform a textual copy/paste.
NB: it would be as slow as other import, but:

  • requires next to no-code
  • perfectly robust

#83 [Editeur/Fred] Multi-files edition.

Requires #82
See: MultiFiles

#82 [Orgams] [internal] Multi-files handling.

Requires #81 and #94
Needed for @include@ and #83.

#81 [Orgams] [internal] Gestoin mémoire pour labels. Todo: checksum

Almost done (4 Aug 2017): org1q, aapi. Only checksum is missing.

Actuellement, les labels sont stockés en zone fixe dans la bank de travail principale.
Il faudrait utiliser un système de chunks comme pour le source. Avantages :

  • Autorise #include et/ou ouverture de plusieurs fichiers
  • Rend le "labels table full" improbable
  • Libère de la place en mémoire centrale pour tampons communs (historiques, index, etc…)
  • Etend les vérifications checksum aux labels.

#80 [Monogams] Limit range for dump.

E.g. m&4000,&80 would print &80 bytes (without having to press any key).
Combined with #7f #64 and #63, it would become even easier to check some buffers and variables.

#7F [Monogams] Allow several commands by line

E.g. ?flag:b&c7:x&4000,&7F00
Would be handy now that we can replay previous commands.

#7E [Editeur/Fred] Fonction 'Remplacer'

Raccourci et options (e.g. confirmer chaque remplacement) à définir.
Il pourrait y avoir 2 fonctions :

  • Renommer Label ("refactoring"). Très rapide, mais n'irait pas chercher dans les commentaires. Autre avantage, seul le label incriminé serait modifié. Par exemple, renommer 'Play' n'affecterait pas 'Player' ou 'Replay'.
  • Remplacement textuel. Plus lent mais plus complet. La fonctionnalité précédente (chercher les mots complets) serait accessible selon les mêmes modalité que pour CTRL-F (espace avant et après).

Prérequis: todo #72

#7D [Debuggueur/Pirlouit] Multiface II detection.

Needed for TODOs #7B and #5B.
IIRC, Multiface won't be detected anymore after first use (until further reset).
So we should actually set a persistent flag which we would rely on afterward.

More precisely, flag possible values :

  • <>&ff: unknown (reset during first orgams invocation)
    • in this case, run Multiface II detection.
  • &ff: true (multiface II detected)
    • in this case, the flag should not be changed.

#7C [Assembler/Madram] RESTORE: as #7B

Program state should be saved at RESTORE point (like BRK).

#7B [Debuggueur/Pirlouit] BRK: Proper bank/ROM connection (using Multiface II)

When a breakpoint occurs, current bank detection is done by a heuristic, hence possibly worng. ROM detection isn't done at all. The breakpoint routine consist in two parts:

  • 1/ In-RAM code (at BE00), responsible for connecting Orgams ROM and jumping to part 2, while preserving registers.
  • 2/ In-ROM code, setting registers and guessed MMR in Z80 emulation workzone.

The alternative version would be:

  • 2b/ In-ROM code, save MMR RRM and ROM# based on Multiface II.

By the way, RRM and ROM# should be picked up before we actually connect Orgams, requiring to rewrite part 1/:

  • 1b/ In-RAM code, get RRM and ROM# from multiface, connect Orgams ROM and jump to 2b, while preserving registers.

#7A [Editeur/Madram] Version non tabulée pour accélerer CONTROL-F

Pour l'instant la recherche textuelle passe par l'unique routine de décodage, qui pour la tabulation ajoute des espaces qu'on filtre ensuite. Nonsense !
Action : décliner une version du décodage avec un unique espace (voire aucun en début de ligne) comme séparateur.

#79 [Editeur/Fred] COPY-haut/bas pour définir/étendre bloc.

Alternative pour délimiter un bloc. Plus pratique pour fonctionnalité à vernir comptage temps-machine.

  • Quand on est sur la ligne = marqueur start :
    • COPY-haut : décrémente ce marqueur
    • COPY-bas : incéremente ce marqueur
  • Quand on est sur la ligne *suivant* le marqueur end :
    • Idem pour marqueur end.
  • Dans tous les autres cas, quand on est sur une ligne N
    • COPY-haut : START=END=N-1
    • COPY-bas : START=END=N

Dans tous les cas, COPY-Haut et COPY-BAS passeront à la ligne précédente et suivante, respectivement.

Ces règles sont amendables en faveur d'une solution plus ergonomiques.

#78 [Editeur/Fred] Griser à partir de la position envoyée par getline.

Cf todo #77.
Cela permet de griser:

  • les commentaires
  • dans un second temps, les parties de code inactives (assemblage conditionnel).

#77 [Decodeur/Madram] (GetLine) Renvoyer position à partir de laquelle griser.

Nécessaire pour todo #78. On renvoie :

  • "-1" (255) si pas de grisage.
  • x si estompage à partir de pos x.
  • cas particulier: 0 si toute la ligne grisée.

XXX #76 [Editeur/Fred] Griser numéros lignes.

Pour alléger l'écran et gagner en lisibiliité.

XXX #75 [Editeur/Fred] COPY-G pour aller en début de bloc.

Ca me manque souvent !
Motivation sur le choix de COPY-G : G comme GOTO, COPY pour bloc.
La confusion potentielle avec CTRL-G n'est pas gênante :

  • si on presse CRTL-G alors qu'on souhaitait COPY-G, il suffit d'appuyer sur ESC
  • si on presse COPY-G alors qu'on souhaitait CTRL-G, il suffit d'appuyer sur CTRL-G

#74 [Internationalisation/Fred] Récolter caractères spéciaux.

A mettre dans un coin du wiki, la liste des caractères variants selon la langue du CPC (français, allemand, espagnol, danois, …).
Le mieux serait de faire un tableau. Par ligne numéro "ASCII", par colonne le pays.

XXX #73 [Editeur/Fred] Positionner le curseur en début de label (CTRL-ENTER)

Pour être cohérent avec le #72 et CTRL-L, si label trouvé, le curseur doit être placé en 1ère colonne.

#72 [Editeur/Fred] Affiner recherche CTRL-*

Deux améliorations :

  • le curseur doit être positionné au début du label trouvé. C'est plus logique et cela permet d'enchaîner les CTRL-*.
  • si un label est présent plusieurs fois sur une même ligne (e.g. WORD a1,a2,a2,a1,a1,a3), CTRL-* doit passer de l'un au suivant.

Ceci implique de dissocier deux type de recherches :

  • recherche textuelle à l'intérieur de la ligne.
  • recherche label dans le source encodé (beaucoup plus rapide).

Ainsi le CTRL-* se décomposerait ainsi:

  • Récupérer ID label à chercher (cf ED-AZN)
  • Récupérer la version texte (cf TODO)
  • Chercher la version texte dans la ligne courante (à partir de position X+1 pour passer à l'évenutelle occurence suivante). Routine à faire (Fred).
  • Si non trouvé:
    • Chercher label à partir de ligne suivante (routine Madram)
    • Quand ligne trouvée, lancer la recherche textuelle pour avoir la position curseur.

Todo Madram: exposer la routine qui donne le label en ASCII d'après l'ID.
Todo Drill: le reste

XXX #71 [Decoder Internal] Étendre les tabulations à la volée.

Cela permet de connaître la vraie position X lors du décodage, condition nécessaire à la résolution finale du bug #20.

XXX #70 [Trace/Hicks] Respect des positions $ et >

Done 27/7/2017 monMZ. Cf #89

En entrant dans la trace avec 'd' sans paramètre, conserver les deux adresses $ et >.
Justification :

  • Après avoir basculé vers Monogams (typiquement pour un dump mémoire) ou vers l'éditeur, on souhaite souvent reprendre la trace/désassemblage exactement où on en était.
  • Le comportement actuel (utiliser la même adresse que précédemment) sera facilement reproduit grâce au TODO 63.

Question: faut-il appliquer la même logique pour 'm' ?

XXX #6F [Orgams Internal] Special swap pour trace. Only swap before/after source visu.

Done 17 Aug 2017 in mono5. For graph, cf MemoryMap

Lors de la trace, les routines externes (désassemblage, code visu) utilisent les tables évoquées en #6C.
L'espace correspondant devra donc être sauvegardé, puis restauré avant une commande de trace avec exécution (S,N,R,T).

Sous-todo :

  • Pour chaque routines, établir tables utilisées et graph d'appel (en vérifiant si main bank reconnectée à chaque RET: permettrait de conserver pile en bank dans ce cadre).

XXX #6E [Orgams Internal] Reorganisation orgext.rom

Done, early 2017. ass10, org1e.

  • JumpTable en haut de ROM
  • Décallage 'ASS' pour faire place à 'PARSE'.

XXX #6D [Orgams Internal] Nettoyage connexions bank, flush etc..

Done 19 Aug 2017 ass1b

Nécessite todo #6C

XXX #6C [Orgams Internal] Utiliser page &8000 pour tables temporaires parsing/assembleur.

Done 18 Aug 2017 ass1a, org1p,

Nécessite todo #61 & #6F

#6B [Trace Visu/Hicks] Ne pas afficher les lignes vides du source

Dans la visualisation du source code, sauter les lignes vides. Cela permet d'avoir plus de contexte. Avantage collatéral : scrolling moins violent.
Cela implique de traiter les lignes précédant la ligne courante à reculons.

#6A [Editeur Internal/Fred] Isoler les mises à jour ligne status

Toutes les écritures en ligne 25 (numéro de ligne, questions…) doivent passer par des routines dédiées. E.g. :

  • status_set_column
  • status_wr_char
  • status_wr_text

On peut en créer autant que nécessaire, mais :

  • ces routines ne doivent pas utiliser les variables exitantes (typiquement CURSOR_POS ou quelque soit son nom).
  • le code appelant ne doit pas modifier les nouvelles variables lui-même, tous les paramètres doivent être passées par registres (comme avec les routines système).

Par exemple status_set_column prend en entrée "A=num column". La routine met à jour une variable privée "status_cur_column" utilisée ultérieurement par status_wr_text.

Avantage collatéral, il n'y aura plus besoin de la gymnatisque consistant à sauvegarde CURSOR_POS puis forcer POS_Y à 25 pour chaque modification de status.

Ce TODO est indispensable pour l'étape suivante : déporter graphiquement la ligne de status.

#69 [Assembleur] Meilleur message d'erreur quand argument négatif.

Actuellement, une valeur négative pour FILL, ORG ou ** génère "overflow 16 bits".
Un message plus précis serait appréciable.

XXX #68 [Editeur Internals/Fred] Ménage mustDraw vs VALID_LN_1

Vu en certains endroits, appel conjoint de mustDraw et VALID_LN_1.
Or mustDraw appel lui-même VALID_LN_1.
Redondances à éliminer!

#67 [Trace/Madram] Support écriture en page #C000 miroir.

Actuellement, une écriture en page #C000 se fait "à l'écran". Il faut la rediriger vers la page sauvegardée (cf todo #62).

  • En cas de connexion bank &c0, il suffit d'utiliser une connexion &11xxx001 (&f9).
  • Sinon, il faut tester l'adresse et agir en conséquence.

Problème: actuellement les instructions d'écriture (ld (nn),a…) ne font aucune vérification, ce qui oeuvre pour la rapidité de la trace (e.g. PUSH peut être exécuter tel quel).
On peut prévoir deux routines pour chaque (la version rapide avec page &c000 restaurée, et un mode "supervisé"). Sous-problème: cela demande plus de code, et multiplie les risques de bug.

XXX #66 [Trace Internals/Hicks] Factoriser les commande 'N', 'S', 'J', 'R'

Fait dans MONmx 26/7/2017. 38 bytes saved, that's not bad.

Mettre en commun pour ne faire apparaître que les différences (le nom de la commande et son action).

   ld a,"S"
   call trace_advance ; A renommer advance_check ou un truc dans le genre ?
   jp z,wa
   call mtr_step
   jr tr_com

XXX #65 [Trace/Hicks] Mécanisme protection pour 'J'

Fait dans MONmx 26/7/2017.

Faire la même vérification que pour S et N (i.e. cohérence curseurs '$' et '>'), le Jump étant une action assez sensible.
NB: Peut-être résolu directement via todo #66

#64 [Monogams/Hicks] Dump mémoire intelligent

Edit 8/6/17 First version in MONmp: skip zeros.

Plus fin encore que xxd, il faudrait sauter les répétitions de motifs. Dans une première version, on ne sauterait que les motifs de 8 octets.
E.g. plutôt que

&0203 00 01 02 03 04 05 06 07  ........
&020B 00 01 02 03 04 05 06 07  ........
&0213 00 01 02 03 04 05 06 07  ........
&021B 00 01 02 03 04 05 06 07  ........
&0223 00 01 02 03 04 05 06 07  ........
&022B 00 01 02 03 04 05 06 07  ........
&0233 00 01 02 03 04 30 31 32  .....012

On aurait:
&0203 00 01 02 03 04 05 06 07  ........
&020B 00 01 02 03 04 05 06 07  ........
&0233 00 01 02 03 04 30 31 32  .....012

NB: le fait de montrer 2 lignes identiques permet d'alléger l'ambiguité sur le […]

Le plus gros bénéfice sera de sauter les zones à zéro, pour afficher directement la première ligne non entièrement nulle.

XXX #63 [Monogams/Hicks] Historique commandes moniteur.

Done in MONms 16/6/2017 Use Up & Down

Retenir dans un tampon cyclique de &100 les N dernières commandes saisies.
On navigue dans l'historique par les fléches haut et bas.
NB: nécessite le todo #61 pour libération d'un buffer en bank.

#62 [Orgams/Madram] Backup page #C000

Sauvegarder la page #C000 du programme en cours d'exécution, de sorte que moniteur/débuggeur deviennent aussi peu intrusif qu'une multiface.
NB: choisir une bank 11xxx111 (e.g. &FF), pour que la connexion &C0 puisse être simulée par 11xxx001 (e.g. &F9).

XXX #61 [Internal/Madram] Elargir swap page #8000

Fait depuis 10/6/2017: irror5,6,7, monMN, org1E, trP

L'objectif : élargir la sauvegarde #9800-#BFFF à toute la page, de sorte que #8000-HIMEM soit utilisable comme zone de travail.

  • Permet RAM vidéo supplémentaire.
  • Evite les accrobaties nécessaires avec zones de travail en bank.


  1. Déporter la sauvegarde des RST (0-3F) en bank principale
  2. Sauvegarder toute la page &8000 lors de l'init
  3. Corriger routine de swap Monagams <-> Trace
  4. Corriger routine de swap CTRL-F2
  5. Corriger lecture Monagams (commande m)
  6. Corriger la restauration (retour BASIC)

#60 [Monogams/Hicks] Désassemblage code.

Une version simple sans re-labélisation à la DAMS serait triviale à coder.
Via commande, ou mieux, sous désassembleur :

  • autoriser COPY-S COPY-E pour sélectionner le bloc à injecter.

#5F [Monogams/Hicks] "Désassemblage" BYTE et WORD

Edit 11/6/2017: Première version dans MONmq. Commande hh,start,end.

  • Crée des lignes de 8 octets (sauf éventuellement la dernière) BYTE &xx,&xx,&xx …
  • 'h' comme ????; 'h' comme 'hexa'
  • 'end' se révèle une mauvaise idée :
    • il faut recopier le label : hh,ma_table_compliquee,ma_table_compliquee+&100
    • c'est généralement plus long : hh,&4000,&407f à la place de hh,&4000,&80
  • il manque la sélection des lignes crées (cf #5E)
  • pas de gestion d'erreur en cas de source full
  • pas de progress bar, alors que la commande est assez lente.

Pouvoir injecter des datas dans le source.
Il a déjà été évoqué que ce genre de fonctionnalité ne sert pas souvent, mais manque cruellement quand on en a besoin.
Très facile à coder.

Prends en paramètre :

  • start
  • last (inclu). Ou size ?
  • optionnel : nb de data par ligne (par défaut 8)
  • optionnel : format bin/dec/hex (par défaut hexa)

L'injection se ferait à partir de la ligne courante (cf todo #5E).
Les lignes injectées devront être automatiquement sélectionnées pour l'éditeur. Motivation:

  • permet de visualiser ce qui a été ajouté
  • en cas d'insatisfaction, facile à annuler (on efface le bloc) ou à déplacer.

Je ne sais pas encore comment nommer ces commandes. Comme Maxam ?

#5E [Editeur/Drill] Exposer get_current_line et set_bloc_markers.

Edit 11/6/2017: il manque set_bloc_markers.

NB: le get_current_line est déjà introduit dans ED-AWM.

(Nécessaire pour TODO #5F)
La première renverrait POS_LINE dans DE. L'autre prendrait :

  • DE=bloc start
  • HL=bloc end

C'est trivial, l'idée est d'y accéder aisément via la table de saut, plutôt que d'avoir à connaitre l'adresse des variables.

XXX #5D [Orgams Internal/Hicks] Merge source / consolidation table de labels

Edit 10/7/2017 Unneeded. Cf #84

Cette routine servirait pour importer un source Orgams, comme on le fait avec les sources ASCII ou DAMS.
C'est également un prérequis pour la gestion d'include. Non pour include les deux tables de symbols restent isolées grâce au todo #81

Dans un fichier ".O", il y a une table de labels où apparaît le nom ASCII des labels. Dans le source lui-même, seuls les ids sont encodés.
Ainsi, le label 64 peut correspondre à "crunch" dans un source et "display_4d" dans un autre.
Concaténer deux sources sans précaution ne peut aboutir qu'à un désastre.

Il faudrait donc :
- merger les deux tables de labels.
- corriger les ids du fichier importé selon cette nouvelle table.

#5C [Assembler/Monogams] Command LOAD pour fichiers binaires.

A définir ! Cf!/msg129357/#msg129357

#5B [Debuggeur/Grim] Accès Multiface II -> Orgams.

Permettre de sauter dans le debuggeur Orgams via la commande Jump.
Avantages (par rapport à BRK) :

  • Breakpoint manuel à tout moment.
  • Les connections bank et ROM sont plus fiables.

Inconvénient (par rapport à Multiface) :

  • Cela détruit la page en &c000.

C'est pour cette dernière raison qu'on évitera de sauter inconditionnellement à Orgams lors d'un STOP Multiface.

#5A [Assembleur] Ajouter pseudo-instruction LIMIT


  • compatibilité MAXAM.



est plus lisible qu'un contournement tel que
    IF $ AND &C000:ELSE
       Too Much Code

#59 [Assembleur] Ajouter pseudo-instruction ASSERT


    ASSERT predicat

est plus lisible que
    IF predicat:ELSE
       Error Mon message d'erreur

XXX #58 [Main/Madram] RSX |o,"fichier" pour chargement automatique.

Fait le 29/7/2016 (CH1G & ED-AZM).

Requiert le todo précédent.

XXX #57 [Editeur/Fred] Point d'entrée pour chargement fichier automatique.

On veut rajouter une RSX |o,"player" qui charge "PLAYER.O" directement si le source en mémoire n'est pas modifié.

Le comportement de control-o est le suivant :

  • Vérification de l'état du source courant.
    • si modifié, demande de validation.
      • si ok, on saisit le nom (pré-rempli) puis on charge.
      • si non, annulation.
    • si non modifié, on saisit le nom (pré-rempli) puis on charge.

On doit ajouter une routine qui prend en entrée HL = nom de fichier avec le comportement :

  • Vérification de l'état du source courant.
    • si modifié, demande de validation.
      • si ok, on copie le nom et on charge.
      • si non, annulation (le nom reste inchangé)
    • si non modifié, on copie le nom et on charge.

Le seul point sensible est de ne *pas* copier le nom passé via HL trop tôt. En cas d'annulation on doit retrouver le bon nom du source.

#56 [Editeur/Madram] Accélerer CONTROL-F

Plutôt que de tester les séparateurs à chaque itération, découper en amont (via table d'index).

#55 [Orgams/Madram + Trace/Hicks] Breakpoints moins intrusifs (à la Maxam).

Plutôt que d'insérer RST &30, écraser l'opcode (qui sera restauré lors de l'activation du breakpoint).

Par exemple :

cnt3 ld a,0

génère actuellement &F7, &3E, &00
L'assembleur devrait générer &F7, &00
  • Avantages :
    • Il devient facile de placer un breakpoint sans réassembler.
    • Mais surtout : la présence du breakpoint ne perturbe pas les adresses d'assemblage. C'est beaucoup plus transparent.
    • Optionnel : possibilité de désactiver temporairement un breakpoint au cours d'une session de trace.
  • Inconvénients :
    • Un ld a,(cnt3) (on lit l'opcode pour une raison X ou Y) sera faussé.
    • Si on auto-modifie l'opcode (plutôt que l'opérande), le breakpoint est détruit.
; Inconvénients plus gênants

         push bc    ; rst &30 injecté ici, le BRK se produit pendant la boucle !

         djnz $   ; BRK à chaque itération du DJNZ $  (impacte seulement la commande J)

Il n'y a pas grand chose à faire contre ces inconvénients. On se remet à l'utilisateur pour placer le BRK à un endroit plus judicieux, ou à utiliser RST &30 qui reproduit le comportement précédent.

Enfin, puisque que le RST &30 n'apparaîtra plus dans le code désassemblé, il faudra trouver un subterfuge visuel.

XXX #54 [Editeur/Fred] Ergonomie CONTROL-DEL : ne pas stocker ligne vide.

Quand on supprime une ligne vide, il ne faut pas écraser le buffer de sauvegarde (pour CONTROL-P)
Motivation : souvent, on enlève des lignes vides pour des raisons cosmétiques. Il n'y a aucune raison pour que cela vide le backup de la dernière "vraie ligne".

XXX #53 [Editeur/Fred] Ergonomie COPY-DEL

Quand aucun bloc n'est défini (ou que le début est supérieur à la fin), COPY-DEL ne doit rien faire, sans même poser la question "Are You Sure".
Ou mieux, juste afficher un message "No bloc defined".

XXX #52 [Editeur/Fred] Accélération COPY-DEL

La suppression de larges blocs est beaucoup trop lente (alors que c'est immédiat sous DAMS) ! Cela vient du fait que les lignes sont éliminées par ordre croissant (cela revient à débarrasser une pile d'assiette en commençant par celle du bas).
*NRT impératif* <— Et je le fais comment ? c'est merdique.

XXX #51 [Trace+Ed] Accès direct trace vers éditeur.

L'idée est de permettre de sauter dans l'éditeur à la ligne pointée dans la trace.
Combinaison : CONTROL-ESC (on s'échappe, mais on garde le contrôle), sauf si meilleure suggestion.

  • Ed (Fred) : Ajouter un point d'entrée prenant dans DE la ligne vers laquelle basculer (0 : ne change rien) :
    • Au label code, ajouter jp restart_at_line après jp sysconfig
    • restart_at_line doit modifier POS_LINE si DE != 0
    • Puis on passe à restart dans tous les cas
  • Trace (Hicks) : Bien intercepter les touches, remplir DE selon l'état actuel (cf todo #50), et sauter à la routine de Fred en #D20F de la ROM "romEd" (cf modèle retour Editeur existant).

XXX #50 [Trace/Hicks] Bascule "Source Visu" / "Dump View"

Introduire (CONTROL) V pour basculer entre l'affichage du source (mode actuel) et l'affichage d'un dump (à partir de la dernière adresse sélectionnée via la commande 'M' du moniteur, par paquets de 8 octets par souci de cohérence).

Motivation : malgré les améliorations du 1er août, la recherche de la ligne de source se révèle ponctuellement trop lente (ah!), surtout quand elle échoue.
Ainsi, l'ajout de la fonctionnalité "visualition source" a un impact négatif non négligeable pour la trace et le désassemblage, quand bien même aucun avantage ne se présente (le source n'étant pas trouvé). Cela est inacceptable, une nouvelle version n'est pas censé dégrader les performances.
Trois pistes s'offrent à nous :

  • Résoudre le bug #6D (Hicks)
  • Résoudre le bug #7F (Madram)
  • Permettre la désactivation de la fonctionnalité.

Ce dernier point est le sujet du TODO actuel : plutôt que de bêtement désactivater, on remplace par une fonctionnalité rapide et pratique.

#4F [Editeur/Fred] Factorisation édition champ/ligne.


XXX #4E [Trace/Hicks] Refonte visualisation.

En priorité : enlever le découpage grisé / non grisé. Pour ligne n, afficher simplement de n-2 à n+2 (attention aux bords !)

XXX #4D [Trace/Hicks] Dump mémoire anté-registres.

Si validé par comité. Cf

#4C [Monogams/Madram] Sauvegarde page #C000-#FFFF.

Afin que Monogams puisse se substituer au moniteur de la Multiface II, on sauvegardera la page #C000-#FFFF dans une bank dédiée.
Toute lecture/écriture dans cette page se fera via le backup.
Cela sera utile même sans multiface II, pour les cas où data/code se trouvent dans cette page.

Nd Hicks : sera-ce utilisable pour fignoler le todo #2d ? C'est-à-dire : sera-t-il possible d'utiliser cette backup en retour de CTRL+H (on peinait à trouver 2ko de libre pour stocker une table de caractères, laborieux, ici ce serait facilité).

Madram : nope ! Ce backup sera celui du programme interrompu. Actuellement le débuggueur utilise ce qui est affiché à l'écran. Avec ce backup, il lira la mémoire telle que photographiée lors du breakpoint (comme pour la page #8000-#BFFF et le reste de la mémoire).
Ce n'est donc pas un backup de ce qu'on affiche nous !
En revanche, après la réorganisation mémoire (prochaine version, TODOs à rédiger), il y aura des buffers 2k supplémentaires.

#4B [Monogams] Affichage valeurs CRTC.

Commande CTRC pour afficher les valeurs des registres CRTC.
Attention, sans multiface II, ils ne peuvent être mis à jour que lors d'une trace pas à pas.
Afficher le cas échéant un truc du genre :
"Warning! Without MF2, showing last known values." quand valeurs modifiées sous Trace.
"Warning! Without MF2, showing default values." sinon.

NB : Faire la même chose pour les autres ports, afin que Monogams puisse remplacer le moniteur de la multiface.

#4A [Orgams] Catalogue en cache.

A la manière d'OCP, il serait sympa de garder le catalogue en mémoire, et de le rafraîchir sur demande explicite.
Ça règle la question de savoir comment passer du lecteur A au lecteur B :

  • A: |A + cat
  • B: |B + cat
  • C: |C + cat …
  • ESC ou CONTROL-C: exit catalog screen.

Premier pas vers une version "graphique" ou l'on pourrait sélectionner le fichier (à la OCP, mais en gardant tous les fichiers à l'écran).

XXX #49 [Monogams/Hicks] Utiliser '&' pour affichage hexa.

(Fait dans MONJ)

Dans trace, avec commandes 'm', '?', … Par souci de cohérence.
TODO auxilliaire madram: redessiner un plus beau '&'

XXX #48 [Orgams] Rétablir CRTC avec RESTORE

06/05/2015 : Fait dans monhq

#47 [Assembleur] Prévenir tentative ENT en bank.

Le code suivant s'assemble sans problème, alors qu'il est trompeur :

  org #100
  ent start
  bank #c4
  org #4000
  ld a,2:jp #bc0e

En effet, le code sera bel et bien assemblé en bank #C4, mais le jump d'entrée se fait en connexion #C0.

Solutions possibles :

  • Lever une erreur d'assemblage dans ce cas
  • Connecter la bank adéquate pour le jump

XXX #46 [Editeur/Fred] CTRL + C

Affiche le catalogue

XXX #45 [Trace/Hicks] CTRL-haut et CTRL-bas dans la Trace pour naviguer plus vite

Reproduit dans la Trace les facilités de l'Editeur !

XXX #44 [Editeur/Fred] CTRL + SPACE - breakpoint

CTRL+SPACE ajoute un breakpoint à l'endroit où se trouve le curseur.
Si breakpoint déjà existant, le supprime.
Attention si breakpoint ajouté à la main (BKR ; on s’arrête car j'ai envie) ne le supprime pas!

XXX #43 [Editeur/Frédéric] Plus de mémoire pour CONTROL-M

Retenir les 8 dernière lignes modifiées.

  • Attention à l'emplacement du tableau dans la table 'META'.

Mini spécification :

Dans le tableau, la 1ère entrée correspond à la modification la plus récente.

  • Dès lors qu'une ligne est modifiée :
    • Si égale à dernière ligne modifiée : ne rien faire.
    • Si égale à dernière ligne modifiée + 1 : met à jour la première entrée du tableau, sans empiler.
    • Dans tous les autres cas : empiler (i.e. décaler 7 entrées du tableau avec *LDDR*, en placer le nouveau numéro en tête).
  • Lors d'un CONTROL-M
    • Cycler le tableau de manière intelligente (de sorte que s'il y a moins de 8 emplacements modifiés, on reboucle directement) :
      • N = entrée 0
      • décaler entrées 1 à 7 avec *LDIR*
      • placer N dans le premier emplacement non-nul à partir de 7.
      • Goto line 0
    • Cas spécial : si N est égal à ligne courante, cycler une 2ème fois (pour ne pas rester bloqué sur la ligne qu'on vient de modifier !).

#42 [Editeur/Frédéric] Permettre affichage adresse plutôt que numéro ligne.

Une routine de mon cru renverrait l'adresse d'assemblage d'une ligne donnée. On pourra afficher cela plutôt que le numéro de ligne (option).

#41 [Editeur/Frederic] Refactoring affichage ligne.

Il faudrait 2 routines :

  • gen_line_header : génère (i.e., place dans un buffer sans afficher) numéro de ligne et marqueur (bloc)
  • gen_line : génère ligne complète (en gros, appelle routine précédent, puis concatène le résultat

Cela faciliterait le TODO #42.
La première routine permet de conserver le refresh optimisé en cas d'insertion/suppression de ligne (on fait un scroll fenêtré pour les lignes de code, mais pas pour l'entête).

XXX #40 [Editeur/Frederic] Touche TAB pour poursuivre recherche

La touche TAB répéterait automatiquement la dernière action de recherche itérative, i.e. :


Pour les deux première, on remplace 3 touches par 1 !
Pour la dernière, le gain est encore meilleur : cela permet de poursuivre la recherche des occurrences du label sans avoir à se replacer dessus. Cela implique de stocker l'ID du label en question, et d'appeler une routine dédiée.

XXX #3F [Orgams] Restore/BRK : couper aussi le PSG !

06/05/2015 : Fait dans monhq

XXX #3E [Codec/Madram] Ajouter GET, DEFS, DEFB, DEFW, DS, DB, DW.

24/04/2018: DEFB, DEFW, DB, DW gérés dans parseAC (alias vers BYTE et WORD)
25/04/2018: DEFS/DS + SKIP gérés. ass1O, disa12, parseAD


  ds 4,2  -> FILL 4,2
  ds 4     -> SKIP 4

Prérequis : TODO #3D !

XXX #3D [Parser/Madram] Compacter la grammaire.

07/07/2017: Fait dans parseM

Afin de gagner de la place en ROM, sans perdre en temps d'exécution.

XXX #3C [Editeur/Frederic] Isoler les MAJ ligne statut.

Toutes les modifications de la ligne status (saisie nom de fichier, flag modifié, numéro de ligne, …) doivent se faire au travers de CALL(s), sans avoir à changer manuellement des variables (à l'instar des vecteurs système).

E.g. (au choix !)

; HL = texte
; A = position X

XXX #3B [Orgams] Isoler le texte de bienvenue.

23/02/2015 Fait dans monHO.o

Le but est de pouvoir mettre à jour la date et le nickname sans modifier mon*.o, qui n'est pas forcément concerné.

XXX #3A [Trace/Hicks] Ne pas faire 'CLR' automatiquement.

Quand PC et Cursor diffèrent, une action (S, N…) renvoie le curseur sur PC (comme CLR).
Il serait mieux de ne rien faire (et d'afficher ! en Last) : si on souhaitait faire le contraire (CONTROL-G), le curseur est perdu : frustrant.

#39 [Moniteur] Afficher mémoire prise par source.

Au moins le nombre de banks consommées.
Et pourquoi pas, d'autres infos (nb labels).

#38 [Moniteur] Affichage décimal pour ?exp (bigInt et valeur négative)

28/08/2015 Fait partiellement dans monjo. Manque gestion de valeurs négatives et de plus de 16 bits.

Afficher la valeur décimale à côté de la valeur hexa (évite d'avoir 2 modes).
Attention valeurs possibles sur 1024 bits (pas seulements 16 !).

XXX #37 [Trans-Module] Factoriser routines d'affichage.

[Fait depuis longtemps !]

Regrouper dans une même ROM :

  • les fontes
  • les routines d'affichage texte
  • les textes

Pour l'instant, les routines sont écrites en double (celle de l'éditeur étant plus rapide).
La fonte non grisée elle même est dupliquée. Quel gâchis !
Regrouper les textes facilitera leur compression.
Tout le monde pourra profiter de routines très sophistiquées (affichage 'delta', génération de texte avec paramètres, …).
Le coût de commutation ROMs sera négligeable devant l'affichage de chaînes complètes.

#36 [Trans-Module/Madram] Passage rapide moniteur vers editeur.

Pour l'instant, il y a une petite latence, due à la vérification checksum.
Il ne faudrait lancer cette dernière que s'il y a eu dans le moniteur des commandes susceptibles de corrompre le source (trace, édition dans banks réservées).

XXX #35 [Orgams] Ne pas polluer bank lors de l'init.

Résolu 17/02/2015 TRL.

Pour l'instant, l'init des ROMS poke une valeur dans la bank de travail (DF avec X-MEM, C7 sans).

XXX #34 [Trace/Madram] 'Q' pour quitter trace rapide.

Résolu 17/02/2015 TRL.

Pour l'instant seul ESC est testé.

XXX #33 [Editeur] Empêcher TAB de déclencher un import.

Résolu 18/02/2015 EDYM. On attribut un nouveau code à TAB.

TAB sera utile dans la prochaine version, il est troublant de l'associer à l'IMPORT.
Il faut attribuer un nouveau code soit à TAB, soit à CONTROL-I.

#32 [Orgams] Remonter registres au retour.

Après l'exécution d'un programme, l'état final des registres n'est pas visible dans le moniteur, contrairement à DAMS. C'est un peu dommage. (Workaround : terminer par BRK plutôt que RET ou RESTORE !).

Question : On peut se demander si la sélection ROM et RAM ("registres" RMR et MMR) doivent aussi refléter l'état en sortie de programme. Pour ma part, je pense qu'il vaut mieux ne pas y toucher, car fréquemment on souhaite étudier la même zone mémoire d'une exécution à l'autre.

XXX #31 [Monogams] Filtrer dump ASCII.

A cause du TODO #30, et pour plus de clarté de toute façon, il serait bon de ne pas afficher les caractères 00-1F dans les dumps ASCII.
On peut remplacer 00 par espace, et les autres par un point.

#30 [Orgams] Harmonisation ASCII.

En vue de la prochaine internationalisation d'Orgams (en cas de demande étrangère), je compte passer en ASCII standard (UK) pour l'encodage du source et le dump ASCII.
Graphiquement, les caractères accentués se retrouveront dans la zone 01-1F inutilisée.
Cela s'approche de ce que fait Toto pour le firmware (pouvoir utiliser et distinguer "|" et "ù "), en plus propre : nul risque qu'un caractère soit mal interprété ailleurs, car c'est Orgams qui encode/décode.
Seulement, l'export ASCII pourra ne pas être entièrement fidèle (concerne uniquement texte en commentaire ou en BYTE "tt").

XXX #2F [Monogams] Message d'accueil.

Proposition ici :
Rappel :

  • La banque de travail est dans I.

XXX #2E [Editeur/Parser] Autoriser apostrophe dans nom de label.

08/2/2015 Ajouté dans parseC

#2D [Moniteur] CONTROL-H pour HELP

Dans un soucis sans cesse renouvelé de cohérence, reprendre le même comportement que dans la trace et l'éditeur : aide affichée tant que CONTROL-H est appuyé.
Version deluxe : retrouver l'écran intact. Rappel : zone A100-A8FF libre, du moins n'est utilisée que pour chargement et d'autres bricoles, de sorte que les autres modules ne s'attendent par à la retrouver intacte. Bref, c'est une zone temporaire. Attendre version DD pour zone mémoire persistente.

XXX #2C [Editeur/Madram] Configuration palette.

16/2/2015 Fait dans EDXM. La palette est placée également en rom Editeur (en plus de la rom Moniteur) : cela prend moins de place de la copier que de faire une lecture trans-ROM.

La lire en rom moniteur (cf ci-dessus).

XXX #2B [Moniteur] Configuration palette.

La lire en #DFFA-#DFFF inclus (càd juste en dessous de monogams) : versions system/VGA pour éviter les conversions.

XXX #2A [RSX] Revoir RSX

Fait 18/02/2015 CH14.

A faire : |ORGAMS, |ORG, |MM (synonymes)

  • Amène sur Monogams
    • Ce sera le point d'entrée visiteur (Affiche logo + message de présentation/aide). A la DAMS.
  • N'efface pas source si présent (contrairement à l'actuel |ORG)
    • C'est pénible
    • Si source corrompu, on aura le choix de l'écraser depuis le moniteur (commande NEW) ou d'aller jeter un oeil (pour Export) -avec risque de crash.

#29 [Moniteur/Madram] Ajouter checksum pour restore firmware

XXX #28 [Moniteur/Madram] Distinguer "unknown label" de "unassembled label"

10/02/2015. Résolué dans parseD+org16. Label inconnu au parsing = "Unknown label.". Valeur inconnue lors de l'évaluation = "Undefined label."

Si on ajoute un label "plop" mais qu'on oublie d'assembler, un "mplop" dans le moniteur renvoie "undefined label", ce qui peut être troublant. Idem pour les labels pris un bloc "IF 0 … END".

XXX #27 [Moniteur-Trace/Madram] Dans 'monf.o', variables débordent du buffer alloué.

Il y en a 3, qui sont en #8400… Conflit probable avec la pile… Je (Hicks) n'ai rien décalé de peur de tout casser.

XXX #26 [Editeur/Frédéric] Possibilité de copier/coller ou de fusion entre deux sources différents.

Actuellement, si j'ai un morceau de code dans source1.o que je souhaite coller dans source2.o, comment faire ? Deux solutions pourraient être envisagées:
Fred: "Comment faire ?"
C'est très simple. Tu sélectionnes le bloque que tu souhaites exporter (COPY+S & COPY+E) ensuite tu exportes: CTRL+E puis tu choisis 'B'. après tu charges ton source dans lequel tu souhaites importer ton bout de code puis tu l'importes CTRL+I. Et voilà.

(1) Par simple copier/coller : implique de copier la zone définie par CTRL-S/E dans un tampon, car si entre temps on charge le nouveau source, la zone définie sera écrasée.
(2) Permettre de la fusion des sources lors du chargement : DAMS le fait par défaut (le nouveau source chargé se concatène au précédent, il ne le remplace jamais).
On a décidé (avec Madram) de aire la fusion dans l'import et pas dans le chargement..oui je sais ça peut en perturber quelques uns.

Sachant que les deux idées me paraissent utiles et complémentaires !

XXX #25 [Trace/Hicks] Utiliser $ pour PC. L'indiquer dans l'aide.

Plutôt que *, utiliser $. C'est moins joli en temps que pointeur, mais c'est cohérent par rapport à l'éditeur.
Par exemple : djnz $
Dans la trace donnera : 9000 >$ DJNZ 9000

Dans l'aide, remplacer "Set * to >" par "Set PC ($) to cursor (>)" . Et pour l'autre sens "Move cursor (>) to PC ($)"

XXX #24 [Madram] Retour BASIC smooth

Fait 20/02/2015 CH15 + MonHM. |m:?"coucou" fonctionne ! Mais dans certains cas le retour plante.

Avec le todo #0B, il devient plus facile de revenir au BASIC sans effacer ce qu'il y avait en mémoire.

#23 [Madram] Nettoyage labels.

Lors de la saisie/import, des labels potentiels sont créés, mais ne sont pas nettoyés après.
Aussi, la table des labels se retrouve engorgée de labels fantomes.

Dans un premier temps, je prévois de faire la phase de nettoyage après chaque assemblage. Cette phase est de toute façon nécessaire pour libérer les labels qui ont existé avant d'être effacés ou renommés.
Dans un second temps, il faudrait revoir le parser afin qu'il ne crée pas de labels inutiles en premier lieu.

#22 [Madram] Rétablir définition touches au retour basic.

On doit replacer les raccourcis clavier CTRL-Fn et autres, par courtoisie.

#21 [Monogams: Madram] Accepter RSX.

Seul problème, la plupart des RSXs ne conviendront pas au format écran R1=32.

XXX #20 [Editeur: Madram] Raccourcis après assemblage.

Fait (CH10) sauf sauvegarde du source.

Après assemblage par CTRL-1, permettre les accès suivant :

  • ESC: goto monogams.
  • [CTRL-]S : sauvegarde du source.
  • [CTRL-]B : sauvegarde du binaire. (cf #1F)
  • Autre touche : retour à l'éditeur.

XXX #1F [Editeur: Madram] Sauvegarde du binaire.

Permettre sauvegarde du binaire assemblé ! (cf #20)

XXX #1E [Editeur: Frédéric] Pouvoir supprimer retour chariot.

Dans Orgams, 'RETURN' insère un retour chariot, ce qui peut splitter la ligne en deux.
C'est le comportement voulu, naturel dans un éditeur texte, mais cela peut surprendre venant de Dams ou Turboass.
Aussi, pour éviter toute frustration, il serait bon de pouvoir annuler par DEL ce retour chariot.
Le comportement serait donc, si DEL en colonne 0 :
- récupérer le texte du buffer (attention, pas par oGetLine, car après 'RETURN' la ligne n'est pas validée, à dessein).
- le concaténer à la ligne précédente
- supprimer la ligne courante (à faire en dernier en cas d'échec de l'opération précédente, pour cause de memory full).

Note pour v2 [madram] : prévoir un split intelligent. Par exemple, 'RETURN' dans une série de BYTE devrait insère un BYTE sur la ligne créée en nettoyant les virgules :

BYTE 1,2,3,4,5,6,7
BYTE 1,2,3,4
BYTE 5,6,7

si RETURN entre 4 et 5.
Le 'join' (suppression du retour chariot) ferait l'opération inverse.

XXX #1D [Editeur: Frédéric] Status 'modifié'.

Il serait pratique de notifier dans la barre de status que le source est modifié. Ce flag serait remis à zero après sauvegarde (et chargement, bien sûr).
Dans l'idéal, CTRL-O avertirait le cas échéant que le source courant n'a pas été sauvegardé.

En pratique, le flag serait positionné dès lors qu'il y a édition/suppression/insertion/import. On peut placer ça dans la routine nécessaire pour le todo #12.

XXX #1C [Editeur: Frédéric] Brancher COPY-DEL pour effaçage bloc.

C'est simple, il suffit de boucler et d'appeler oDelLine, puis de corriger les numéros de lignes (cf todo #18).

#1B [Editeur: Madram] Brancher COPY-M pour move Block.

XXX #1A [MADRAM] Passage Editeur vers Monogams par ESC.

Trop laborieux sinon, il faut passer par trace !!!
NB : retour basic se fait par moniteur, du coup, ou plus simplement par CTRL-SHIFT-ESC.
Prévoir CTRL-ESC pour retour BASIC sans écraser la RAM ?

#19 [MADRAM] ESC lors d'un CTRL+L ou un CTRL+F

Résolu 11 Jan 2016 (Ed-ATM) pour CTRL+F

Possibilité de pouvoir interrompre la recherche lors de l'appui sur la touche ESC.

XXX #18 [Editeur: Frédéric] Corriger les numéros de lignes mémorisées après insertion/délétion.

Ca peut être vu comme un bug cosmétique !
Quand on insère ou supprime une ligne, les numéros de lignes suivant sont invalidés :

  1. historique pour CTRL-RETURN
  2. lignes d'erreurs.
  3. dernière ligne éditée (cf todo #12)

Il faudrait donc appliquer la même correction que pour les marqueurs de bloc (on peut faire ça dans une boucle, en regroupant les variables adéquates).
Pour (2), cela implique de stocker les numéros de lignes (au plus 8) juste après assemblage, via org_get_error_line.

XXX #17 [Editeur: Frédéric] Déplacement curseur libre.

Mettons que la position X du curseur soit 30, et qu'on descende sur une ligne de longeur 15. Deux solutions exclusives :

  • Rester en colonne 30. C'est le "positionnement libre". Offset avait indiqué préférer ce comportement. L'avantage est qu'on a pas besoin de connaitre la longueur de la ligne courante (recalculée via org_get_line présentement).
  • Passer en colonne 15, *mais retenir que la position pointée est 30*.

L'idée est que l'enchainement "flèche bas" + "flèche haut" devrait ramener exactement au même endroit, ce qui n'est pas le cas actuellement.

XXX #16 [MONITEUR: Madram] Simplification commandes.

(disponible dans orgams-1126 —parse9)

Eg : 't' pour trace. 'tr' 'tra' … 'trace' ne sont plus valides.
Motivations :

  • Permet de saisir @tt@ sans ambiguité : trace à partir du label 't'.
  • Les commandes les plus fréquentes doivent être simple à saisir.
  • Une aide (commande 'help') permettra de s'y retrouver.

XXX #15 [MONITEUR: Madram] Activer DUMP

(disponible dans orgams-1122 —edlm.o + parse8)

Avec argument !

XXX #14 [EDITEUR] Export patiel

Lors de l'export d'un source, proposer un export total ou bien un export du bloque sélectionné.

XXX #13 [EDITEUR: Frédéric] Goto Line

CRTL-J comme Jump to Line (raccourci similaire dans. TurboAss)

Ou si le coeur t'en dit, un enchaînement (CTRL G puis L, CTRL G puis G).
Tu auras besoin d'une routine de conversion texte vers nombre, que je te fournirai.

XXX #12 [EDITEUR: Frédéric] Goto Last Modified (gi sous VIM).

Faute de meilleure idée (c'est mon petit doigt qui me l'a soufflée) : prendre CTRL-M (dernière 'M'odif, last 'M'odified).
Il faut le redéfinir la combinaison dans sysconf, par défaut équivalente à RETURN.

Bonus si mémorisation des 4 derniers endroits modifiés non-contigus. (eg si ligne 100, puis 202,203,205 modifiées, ne retenir que 100 et 205).

XXX #11 [EDITEUR] Ajouter la gestion des erreurs en début de ligne

XXX #10 [EDITEUR] Impression totale ou partielle

Proposer d'imprimer tout le source ou uniquement la sélection

XXX #0F [EDITEUR] Multi-niveaux pour CTRL-ENTER / CTRL-RETURN.

10/02/2015 Fait dans EDWM. Si trop de CTRL-RETURN, on boucle.

Retenir les 8 derniers lignes.

XXX #0E [Madram] TODO CODEC Checksum source.

Corrigé le 17/11/2014 (post-RESET#18 !)

Vérifier la validité du source au retour dans l'éditeur (après exécution ou reset).

XXX #0D [Madram] TODO Moniteur (parseur) Rajouter commandes sélection bank/rom

(disponible dans orgams-1127. parse9+mondm)

  • Bnn ou BANKnn (équivalent à out &7f00,nn, même syntaxe que dans source)
  • Enn : sélection upper ROM nn

XXX #0C [MADRAM] TODO Permette de tester l'éditeur sans écraser son source.

10/02/2015 Fait dans EDWM. On peut même customiser le nombre de chunks pour tests "memory full".

Quand on travaille sur l'éditeur, à chaque test le source est écrasé (car l'exécution de l'éditeur initialise Orgams, ce qui permet de mener les tests sur un source vierge).
Il faut donc discriminer la bank de travail Dev versus ROM.

XXX #0B [MADRAM] TODO Miroir A000

Dispo MONFN + CH10. Attention pas de checksum.

Le moniteur réinitialise le système, et cela n'est pas susceptible de changer dans l'immédiat (cf + discussions mail).
Aussi, il faut sauvegarder la zone #A000-#BFFF (voire plus !) en bank.
Prérequis : bug #2E et moniteur plus fonctionnel (possibilité de changer les banks, navigation mémoire pleine page avec recherche).

En fait, plutôt que de réinitialiser le système, mieux vaut le restaurer à partir d'une sauvegarde :

  • Plus rapide.
  • Moins intrusif (eg : pas d'affichage messages ROMs).
  • Retiens les modifications apportées (memory, état BASIC, …).
  • Seul inconvénient : risque de corruption (modéré par checksum).

#0A [MADRAM] TODO Choix BANK travail

NEW : maintenant détection mémoire. Utilise DF si présent.

Permettre de changer bank de base

  • Par défault, dernière bank disponible
  • Puis (v2), sélectionnable (eg |orgams,#df)

NB : En revanche, on conserve le principe d'utilisation descendante (si bank de base #DF, le source sera en #DE, #DD, #DC, #D7 …)

XXX #09 [MADRAM] TODO Reorganisation RAM travail

Dispo 06/02/2015 ASSK, AAP8, ORG15, CH10, EDVN, MONFN

Faire de la place pour variable moniteurs et buffer #800 pour delta display.

XXX #08 [MADRAM] TODO Reorganisation ROM

(disponible à partir de orgams-1122 : zone #E000-#FC00 réservée pour Moniteur).

Faire de la place dans ROM Moniteur, pour multiple fontes et code grandissant.

XXX #07 [MADRAM] TODO Commande BANK n

12/03/2018 (oups) : Completed in ass1m.

20/02/2015 : en fait, encore buggé.

03/02/2015 (assr, ch1a, org1a) : ok !

Permet l'assemblage en banks, contiguës ou non (eg C4 vs C2)


Commande RESTORE dans source : reinit système + retour à l'éditeur.
(Plus commode que BRK + 2 fois ESC)

#05 [MADRAM] TODO Commandes BRK et BRK = nn

(ok pour BRK)

  • Commande BRK plus explicite que "RST 6"
  • BRK = nn pour installer routine breakpoint ailleurs qu'en BE00 (nécessaire quand page #8000-#BFFF intégralement utilisée).

XXX #04 Trace [Hicks] - Requête Aide contextuelle

Afficher liste des commandes clavier actives quand appui prolongé (0.7) sur Control.
Eg :

Navigation (without execution)

 Cursor UP : move up in disassembled listing.
 Cursor DOWN : move down in disassembled listing.

Debugging (execution)

 S (Step) : Execute single instruction (do enter sub-routines)
 N (Next) : Fast execute until next line (doesn't trace sub-routines)


 CONTROL R : upper (R)om  ON/OFF

Cf liste des commandes

BONUS : Pour plus de réactivité, si CONTROL+touche, il faudrait interrompre l'affichage de l'aide.

XXX #03 Trace [Hicks] - Requête Navigation désassemblage

Pouvoir se déplacer dans le code sans exécution.
Nécessite pointeur visuel, pour commandes CONTROL-G, CONTROL-ENTER, CONTROL-RETURN.

Cf partie navigation

XXX #02 EDITEUR - FEATURE 2ème ligne status

Libérer ligne 24. (pour status Assembleur).

XXX #01 EDITEUR - FEATURE Affichage opération dans ligne status

Afficher le nom de l'opération. Eg :
* Import:
* Export:
* Open (load):
* Save:
Et non pas "Filename:" dans tous les cas

Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License