Table des matières

XXX #113 [assembler/ LOAD directive] Don't cache 0-sized files.

For now, Orgams doesn't handle headerless files.
But it is caching them anyway.
At glup meeting, Eliot did:

  • Transfer some files
  • Assemble -> "Empty file" error
  • Re-transfer them with proper amsdos header (plug and play)
  • Assemble -> Same error!

The workaround is to use CTRL-5 and CTRL-6 to force re-loading.

#112 [editor] Scroll before reaching top/bottom line.

Pour l'instant on ne scroll que lorsqu'on atteind la derniere ligne (ou la premiere) a l'ecran.
Il serait plus judicieux de commencer a scroller a la ligne 22 (ou 4 respectivement) pour garder un peu de contexte (les 3 lignes suivantes ou precedentes).
Merci Mage pour la suggestion !

#111 [Generic Data Structure] Make a TRIE or compressed automata.

- Needed for fast label lookup (hence accelerating assemblage with IMPORTs)
- Allows immediate alphabetical sort (for e.g. CONTROL-L)

Parti pris: no need for cross bank pointers (as it would fit in one bank even for 1536 labels).
Prerequisite: memory allocation of contiguous block.

XXX #110 [monogams] Remove superfluous newlines.

Done 6/6 2023. FF beta K (monui-ay, trui, mon).

A blank line is inserted for dump command (m), print (?) and then some.
We don't want that, in order to keep as much information as possible on one screen.

We'll take the opportunity to review our printing logic:

  • Before: Pre-NL (newline, ie INC Y and X = 0, before printing)
        • Con: Unnatural:
                • Different from Basic and every other languages with PRINT / PRINTNL
                • Special case to print in first line (e.g. after CLS).
        • Pro: By construction, no spurious blank line when reaching bottom.
  • After: Post-NL
        • Con: To avoid spurious blank line at bottom, we must lazily scroll, either via:
                • Checking cursor position at every print call (overkill when client is looping through chars) (*)
                • Cluncky API (e.g. distinguish print on new line vs continue printing). Well, not more than with Pre-NL, so that's not really a con.

(*) On one hand, "safe" print should do that anyway to automatically scroll when reachind end of screen.
Yet most of the times, we are refreshing a line or a field that fits on one line ;
hence we know we don't have to test, for maximum speed.

#10f [Editor/Status] Display info about line under cursor.

Like, corresponding PC ($), memory as this address (handy to quickly inspect table or auto-modified code).
Could be also stats about label under cursor, like number of references.

#10e [Monagams] Plug auto-completion

TAB should work in monagams as well for label completion.

#10d [Introduce SAVE directive] Allow to cherry-pick what to saved.

The post assembly binary command (CONTROL-1 then 'B') isn't flexible enough, and plain wrong when BANK is used (bug #DA + how to concatenate anyway !?!).
A dedicated "SAVE" directive would allow much finer control, and also solve potential problem of #10c-a.

TO-CHECK: introduce rasm's WRITE directive instead? Con: not symmetric with LOAD. Also, it would be nice to have the same syntax than in BASIC.
-> mitigation: allow both? Since SAVE would be limited anyway.

For the exemple of #10c-c, we want to allow several strategy.

  • 1/ Write all (current behaviour): from &1000 to &110f (&110-long)
  • 2/ Concatenate (would be a &20-long file starting at &1000).
  • 3/ Bonus: like 2, but with automatic installation in the right areas (e.g. LDIRs + OUT &ffxx,&cy if needed).

Note: This TODO is not very crucial, if instead of saving the binary we can feed it directly to the cruncher.

#10c-c [Assembler/ Memory Map]. Distinguish all areas used.

For now we just have one big area, with first/last byte used (with some gray area with SKIP directive, see #10c-b below).
The following exemple:

  org &1000
     fill 16,&aa
  org &1100
     fill 16,&55

NOTE: In real life you would rather write something like that:

; ---- Parameters and constants -----
width = 16
trame0 = &aa
trame1 = &55

 if width and 1
 !!! width must be even

; ---- Tables ----
background0 = &1000  ; Salut Emile !
background1 = &1100

   org brackground
    fill width,trame0
   org brackground
    fill width,trame1

#10c-b [Assembler/ Memory Map] Final SKIP shouldn't been counted for first-last addresses.

Well that's bug #127!

#10c-a [Assembler/ Memory Map] LOAD"bin" shouldn't been counted for first-last addresses. Or should it?

Rationale: Have a better view of the occupation memory of the source, without things that are external anyway.
/!\ Potential problem: sometimes we wants to include data for the final binary.
E.g. Orgams would allow to create a ~64k sequential binary to be crunched.

Related. Bug #E1.

#10b [General] Better information when memory is corrupted.

Note: The offending behaviour is more likely to happen when memory if full and Orgams starts using the same banks than your program (e.g. &7c).

In the following scenario:
- 1. The execution of the program corrupts its own source (e.g. connect bank &fc and overwrite).
- 2. The execution continues normally and then hit one of your own breakpoint.
- 3. When the debugger tries to fetch the corresponding line source, since it's corrupted, it might trigger an assertion.
- 4. It means we re-enter the debugger at some Orgams breakpoint location in ROM, rather than pointing inside your own program.

In this case we should:
- Check whether the assertion failures comes from memory inconsistency.
- Display "memory corrupt" in this case (as Orgams does when switching to editor).
- Stay on the user's breakpoint (displaying Orgams's assertion failure in a separate dedicated way).

- Do |orgams to clean-up everthing.
- Press CONTROL-V in debugger so it display memory dump rather than source.
- Reload and rerun your program.
- PC should now points at your own breakpoint.

#10a [editor -> org] Move "Loading" display into org_load.


  • We want to display "Loading" as well when importing source.
  • We want to display the filename after "Loading", not under (looks clumsy).
  • Since org load is already display filename and tags (ORG, LBL, …), it makes more sense to have all display responsability.

#109 [editor] Demande confirmation apres |o,"name" si tab n'est pas vide.

Pour l'instant, on demande confirmation quand le source est modifié.
Il faudrait le faire dès lors qu'il y a un source, modifié ou non.

Version deluxe: Proposer de charger dans un tab libre. E.g.
"Source present, do you wish to load (Y/N). Press T to load in new tab."

#108 [assnrt] Write file-based checks.

Right now it's done by injecting sources via "BYTE".
We want instead to have one "XXX.o" per case in a dedicated directory.

  • Expected "XXX.bin" for successful source.
  • Expected "XXX.err" for sources with errors (to check error reporting mecanism itself).


  • Easier to write test cases
  • Faster to load (on IDE drives) than to parse!

Requires: be able to glob all files from one dir, à la |dir,"ok/*.o" but programmatically (arglll, depends on which DOS is used. Favorise Unidos approach!).
Edit: No, it's better to have en explicit table BYTE "filename",0:WORD testkind.

  • Pro: can trigger ad-hoc tests for particular sources.
  • Pro: can filter which sources to test (for manual debugging).
  • Con: musn't forget to add new files in this table.

#107 [parser] [Later] Indicate the completion mode.

In the first version, we'll only suggest labels, and we'll do it all the time!
That makes no sense in some cases. For instance, when starting a new line, only Macro and opcodes are useful, not existing labels (well, except if we want to create a similarly named label).

So the parser should indicate in which context the cursor sits:

  • At opcode position -> only suggest macros (and later, opcode)
  • After load/import -> filenames
  • At expression position -> labels
  • Otherwise -> nothing (e.g. "add hl," shouldn't propose anything).

The parser might be too slow and overkill for such a task.
So maybe a simple text analysis would be performed.

; HL = buffer current line.  (xx00).
;   C = cursor position in buffer.
; Out
;  A = context
;  0 = unknown/other (in case of syntax error, after directive not supported yet)
;  1 = empty (nothing or cursor is in 1st word)
;  2 = post_label (after a label + space/":", or in 1st word after label)
;  3 = in expression
;  4 = after a quote (")  LOAD or IMPORT (file related)
;  5 = after a quote {") (other case)
;  6 = inside comment

XXX #106 [status] Code display_selection routine

Done in status.o Nov 2021, FF alpha8

; Must display label from buffer[D:E] in bold, all others in shaded.
; In: D: Start position in buffer (LSB), included.
     ; E: End position in buffer (LSB) not included.

On veut afficher le label sélectionné dans le buffer en plein, et tous les autres en grisé.
Il est plus simple et suffisamment rapide de tout reafficher (plutot que de regriser le precedent label et degriser le nouveau).

E.g. si 4 suggestions, la 3eme etant selectionnee:
Start Stop Sexy Solefald
(bon sur CPC la difference sera plus marquée).

Au choix:

  • Solution 0 (preferred):
    • Appeler display_suggestions, et afficher le label en plein.
  • Solution 1:
    • Afficher buffer suggestions grisé de 0 à D (non inclus) -> sous-chaine peut etre vide.
    • Afficher buffer suggestions plein de D à E (non inclus)
    • Afficher buffer suggestions grisé de E à MAX_WIDTH (non inclus) -> sous-chaine peut etre vide.
suggestions = &9200   ; Addresse fixe.

XXX #105 [Status] display_suggestions

Done in status.o Nov 2021, FF alpha8

Trivial! Il suffit juste d'afficher le buffer suggestions (adresse fixe 9200):

  • En ligne 3 (4eme ligne).
  • De facon grisee.

NotaBene: Parfois le buffer suggestions n'est pas entierement rempli. Il faut donc veiller à:

  • N'afficher que jusqu'au 0 de fin (NT String)
  • Effacer ce qu'il y avait à droite.

Ou, plus simple:

  • Effacer la ligne complete avant de reafficher. Il y a une routine dans DISP qui fait ça tres rapidement.
suggestions = &9200   ; Addresse fixe.

XXX #104 [Editor] Brancher l'auto-completion.

Done in status.o Nov 2021, FF alpha8

Les différentes options sont décrites ici: AutoCompletion.

La solution choisie: TAB intelligent.
(TAB reprend la recherche apres une recherche, bascule la completion quand saisie quelque chose).

  • If faut donc introduire un flag (e.g. must_suggest).
      • Mis quand on commence a taper une lettre.
      • Nettoyé quand on fait une recherche.


  • Avant l'appel au field_editor, à chaque lettre/chiffre tapee apres un separateur (e.g. ","):
    • Si get_selection renvoie NC: aucun selection faite, la lettre precise le motif:
      • appeler refresh_suggestions avec HL pointant sur le debut du motif, et se terminant par 0. (il faut copier le motif ailleurs, au cas ou il se trouve en milieu de line)
      • appeler display_suggestions (TODO #105) (pas d'entree, le buffer de suggestion est connu de la routine)
    • Si get_selection renvoie Carry: il y a deja eu selection, la lettre valide cette selection et se voit rajoutee a la suite.

*Appeler get_label_from_id, injecter le label a la place du motif dans la ligne editee, puis la lettre saisie (cette derniere etape peut etre accompli par le field editor).

  • Apres TAB, quand on est en mode suggestion:
    • appeler next_selection (renvoie positions in D E)
        • Si Carry: appeler display_selection (TODO #106)
        • Sinon:
            • Appeler reset_selection (de-selectionne, puis permet de cycler).
            • Appel display_suggestions
  • Apres ESC, si on est en mode suggestion ET get_selection renvoie carry:
            • Idem: reset_selection puis display_suggestions

Cette specification est assez informelle, peut-etre incomplete ou erronee !
A dessein, pour garder du plaisir a la programmation !

#103 [Editor/Parser] Accept simple quotes for strings


  • Ease import of sources from other assemblers.
  • More "natural" for single chars (e.g. LD A,'X')
  • Allow to represent double quotes in strings

#102 [Generic] 'Memory intervals' data-structure.

This structure shall keep track of the union of reserved/taken memory areas. Utility for:
• Detecting overlapping areas (for bug #a9)
• Memory management
• Snapshot description (for memory diffs)
• A forth stuff.

Memory area

Shall be described by start and end addresses, inclusive.
E.g. screen page would be 00:c000 - 00:ffff

The alternative would be to exclude end point, but then it seems a bit trickier to describe past xx:ffff).

Address encoding

24 bits virtual address (rather than using bank prefix such as 7fc4)
• Use less space and registers.
• Cover more addresses.
• More generic. E.g. pointeur in >64 file, also structure could be used for other things than addresses.


; Prepare structure with 0 intervals.
; In: HL = id of the structure. For now: address of XX00 buffer.
; Out: HL preserved.

; Add or merge interval.

; In: HL = id of the structure. For now: address of XX00 buffer.
    ; A = MSB (aka 'page'. Common for start and end: not a big limitation)
    ; BC = start (inclusive)
    ; DE = end (inclusive)
;Out: CF, Z: Ok (struct updated. consecutive intervals have been merged)
       ; CF, NZ: Overlap with existing interval (struct unchanged)
       ; NC: Error, A = error code (e.g. memory full)
    HL preserved in any case.

101 [Orgams internal] Meta codec dispatching to other codecs.

We want to introduce edition of plain text files or non-asm sources.
For each case, the CODEC routines (load, save, get_line, set_line, …) would differ.
We need to introduce a filetype (e.g. 0 = text, 1 = orgams source, 2 = basic, …), and a high level CODEC that would call the right routine according to this type.

100 [Doc] Compress 'z80.o' for inline help

The goal is to have z80.o informations ( available:

  • As a text file (maybe, minus the big block comment).
  • Per instruction (the status bar would display automatically the info regarding the opcode under cursor).

Hence the following routine would be needed:

unpack (madram)
; Unpack doc as plain text (requires 101)
; or unpack doc as orgams source (the advantage is that comments are estompede)
; TBD !!!
; One early version could simply loop over the following routine for all opcodes.

; Give info (in text form) about the passed instruction: e.g.

ld a,i      | ED 57         | SZ503!0. | 3 ; P/V:= IFF2

; hl: buffer for text output
;      D: opcode 1 byte
;or: DE: opcode 2 bytes (e.g D=ED, E=57 for ED 57).

NB: There is already the disassembly routine for the name (*), and an existing internal routine for timing.
Each flag can take 5 values:

  • Reset (forced to 0)
  • Set (forced to 1)
  • Unchanged
  • Changed (as expected)
  • Changed in a special way.

Maybe we can merge the latter , so that it only consumes 2 bits per flag.
In that case, if we want to keep the emphasis for special behaviour ('!' in the doc, could be inverse video here),
we can use some additional escape code (optional in version 1).

We need freeform comment in any case.

(*) It would make sense to share some routines, since ‘disa.o` already separte the opcode itself from the operands:
allow to factorise (e.g. flags and timing for `inc` 8 bits doesn’t depend on the register —well, the +1 NOP for ixl can also be treated generically).

FF [Doc] Update inline doc for FF release:

  • Command se in monogams help.
  • Roudoudou in credits.

FE [Editor/Parser] Accept MAMA_CRO value[,values*]

For now MAMA_CRO invocation requires parenthesis.
Remove this limitation when it's not ambiguous.

XXX FD [Editor/Parser] Accept xl, lx, as alias for ixl

Done 14 July 2021 in parse-bu. Available in FF alpha 7.

Same thing for h/iy of course.
Goal: ease import from rasm.

FC [Hex editor/Madram] Plug gedeihen for navigation / editing.

Gedeihen offers the following features:
- Builtin widgets.
- Builtin cancel mechanism (e.g. start to type first quartet of an hexa byte, then ESC -> value not change)
- Easy to plug triggers and filters (e.g. show VGA color, limit range of values when editing…).
- More.

FB [Hex editor] Blazing fast display routine for hexa dump.

E.g. 16 dedicated routines display a whole byte:

  • Each one hard-code the first quartet, while taking the second as a parameter.
  • Allows to draw in (gray ordered) zig-zag to save line changes.


'00' and leading '0' ('0x') should be grayed.

Makes the other bytes stand out, eases pattern detection.

Don't display 'space'.

* Fast CLS before scroll.
* Layout doesn't change with page up/down and when scrolling (well, double check that).

Must first pick the size of the font.

I would choose 5 lines height + 1 space line (lowercase so it's not too bloated).
It allows 31 textlines on a default 16 k page.
But it might be too small for some people!
6+1 would be a compromise, but would either:
* drastically slow the display routine (28 * 7 lines).
* limit the number of lines to 25 (with r9=6).

FA [Monogams] Memory/snapshot/file/sector editor.

More context here:

The generic approach is achieved by:

  • Using an intermediate buffer (needed anyway
  • Decoupling logical address from physical address (which would be the buffer's one, hence non-sensical).

Other features:

  • Decoupling displayed length from offset shift. Allow for instance to display the start of each &100 buffer:
c2:0000 12
  • Online search (with highlighting).
  • Skip blank areas (00-filled). Like ‘m` command, but shouldn’t be blocking.
  • TBD

Subtasks: #FB, #FC

XXX #F9 [Editor/Parsing] Support DEFM as alias for BYTE.

Done 13 June 2021 in parse-br.o (FF alpha 6).

All other MaXaM directives are recognised (DEFB, DEFW, DEFS, DB, DW, DS). + #F9 [Editor/Parsing] Support DEFM as alias for BYTE.

#F8 [Assembleur] Allow local EQU.

For now we can do:

   xor a
.raz   ld (hl),a:inc l:jr nz,.raz

But cannot use:

.dots# = 4096
    ld bc,.dots#

We should fix that, for CPC (Consistency, Productivity, Convenience).

#F7 [Assembleur] Allow string parameter for macro.

For instance:

     BYTE x+&80

  • Expected: assemble without error.
  • Got instead: Line 5: Args mistmatch.

#F6 [Trace] Add Tstart,stop command.

Would do fast trace from start, then stop (breakpoint) when PC (aka $) reaches stop.
For now this can be simulated by doing the following sequence:

  • $start (set $ to start). tstart would also work.
  • esc
  • dstop (set > to stop)
  • Space or T (fast trace until we reach >)

#F5 [Code cleanup] Factorise sane default setup.

Both cold init and assembling re-init SP, RMR and MMR to sane/firmware default (incoming: same thing for A' and BC', see previous TODO).
The code is duplicated, we should have one dedicated routine that:
- Reset SP at the value snapshotted at Orgams invocation.
- Disable ROM low and high (from user point of view, ie emulated RMR).
- Set (emulated) A' and BC' concordingly.
- Set current bank to &c0 (ie emulated MMR).

On the other hand, we have 3 reset points, with slightly differents requirements:
- assembling: sane default, idea is to be in the same context (with proper firmware setup) each time we assemble. So that CALL &BC0E at top of source works every time even if we trash the memory afterward.
- cold init: sane default for direct tracing (e.g. |orgams t&bb5a).
- brk point: must leave everything as is, but if RMR cannot be read (MF Two) or infered, use sane default.

XXX #F4 [Trace/Init] Sane default values for A' and BC'

Done 14 May (init-s.o: set default in .cold). Available in FF alpha3.

Right now (e.g. release EE), after |orgams all registers are set to 0.
That makes it inconvenient to trace a firmware routine directly via monogams.

XXX #F3 [Editeur/Fred] Ne refraichir le chemin qu'a l'entree de l'editeur.

Done 10th April 2023 in ED vBRAN.

Le panel de status contient maintenant de nombreuses informations (memoire libre, chemin courant, et plus a venir).
Il est donc inefficace de tout re-afficher quand on change simplement de ligne par exemple.
Pour le chemin courant, c'est pire, car avec certains DOS ca provoque un access lecture a chaque fois. Perturbant et non pro(pre) !

Les differents champs a rafraichir sont normalement decoupes dans le source status.o
(status_display_modified, status_display_line_number ou dans le genre),
Mais pour l'instant, le chemin se voit re-affiche des qu'on change de ligne.
Pour mettre cela en evidence, plutot que d'afficher le chemin, j'affiche temporairement un compteur (qui du coup incremente trop souvent).

Votre mission est de faire en sorte que ce compteur soit incremente quand on bascule vers l'editeur (venant du basic ou du moniteur),
mais jamais a d'autre moment.

#F2 [Orgams] Free bkbase-2

Since not used for now, do:
* Version FF: Use it for source (so strictly better than DD)
* Version GG: Use it for mirror &c000

#F1 [Editeur/Fred] Nettoyage code DEL_CHAR

Le nom du source est rafraichi (display_filename) en plein milieu du l'operation. Ce n'est pas genant en soi, mais pose deux problèmes:

  • L'operation en question utilise BUF_TMP. Comme son nom l'indique, c'est un buffer de travail temporaire. Je ne suis fait mordre en l'utilisant dans status.o: comment etais-je cense savoir que ce buffer n'etait pas libre ?
  • Si on affiche des choses en double (notamment le nombre total de lignes), ca ralentit.
  • Le flux du code n'est pas tres clair.

#F0 [Assembler/Macro] Better error message when macro is defined after use.

ASIS: Undefined label.
TOBE: Macro unknown at usage point. Please define it above.

#DF [Assembler] Warn if label vs param ambiguity

Since FF alpha 1, the following (useless) code assembles successfully, despite the name ambiguity (parameter vs label)

   MACRO Marcel n
        byte n and &ff


We should warn about the ambiguity, to prevent mistakes.
Workaround: take the habit of explicitly prefixing by "." when referring local labels. I.e.:

   MACRO Marcel n
        byte .n and &ff.  ; <- clearly the local label


#DE [Assembler] Add new error messages.

New errors possible with FF:

  • 28 "Ambiguous label (local *and* global). Please prefix by "." or rename." Done in FF alpha 2
        inc l:jr nc,hu:inc h  ; incorrect since global "hu" also exists
        inc l:jr nc,.hu:inc h  ; correct: explicitly local
        inc l:jr nc,ho:inc h. ; correct: no global "ho"
  • 29 Too many (nested) scopes. Done in FF alpha 2

Can happen with recursive macros, or unlikely if more than 65535 distinct scopes.

Could be more explicit:

  • bit 8,a (now "overflow index" —since reusing message from ld a,(ix+128)
  • undefined macro (now "undefined label")

#DD [Orgams] Speed up transition to editor.

When switching from monogams or trace to editor, the number of lines is recomputed,
even when the source wasn't touched.
It should be avoided.
Yet, that's not the role of the editor to make this optimisations. It should be cached in org.o.

Careful: when lines are inserted from monogams (command hh), make sure lines # is updated,

#DC [Editeur] Affichage des tabs (# de tab, status modifié et nom du source).

Something like:

..1 orgch     2*crtc     3*cpct     4*         5*         6 nrt    7 player  8 bulgur  9 leprous  ..

#DB [Editeur/Madram] Check source when switching.

Verify that newly selected source wasn't corrupted by external programs, like when we |O.

#DA [Editeur/Fred] Placer curseur sur "." quand on édite un nom de fichier.

Par exemple pour CTRL-O, ajoute automatiquement le ".o", c'est pratique et c'est le genre de petits détails qui fait toute la grandeur d'Orgams.
Il serait bon que le curseur pointe sur le "." plutôt qu'en fin de champ, car il est plus probable de vouloir modifier le nom que l'extension.
Même combat pour import/export et save binary.

Il y a une autre raison à cette demande, gardée secrète.

#D9 [Editeur/Madram] Display pre-selected field in inverse video.

As it is done in every UI.

#D8 [Clipboard] Add insert_from_clip_board

; Copy clipboard into source.
; In: A: Clip #  (0 from now) 
     ; B: Bank line destination
     ;  HL: Address line destination

This routines needs to call:
* insert_new_chunk

And what you deem necessary.

This routine is source-encoding agnostic, but must setup chunk headers as described in OrgamsInternals.

#D7 [Clipboard] Add copy_to_clip_board

/!\ **See real routine needed here:

; Copy section of source to clip_board.
; In: A: Clip # (0 from now)
; B: Bank line start
; HL: Address line start
; C: Bank line end
; DE: Address post line end (that is, everything must be copied up to DE-1 included)

This routines needs to call:

  • reset_clipboard (in: A= clipboard #. 0 For now. Out: HL = chunk ID for start of clipboard)
  • insert_new_chunk

And what you deem necessary.


This routine is source-encoding agnostic, but must setup chunk headers as described in OrgamsInternals.

#D6 [Editeur/Fred] Mode split pour diff visuel.

Introduire une commande qui permet de suivre 2 sources en split horizontal.

XXX #D5 [Editor/Internal/Fred] Extraire le code relatif aux mises à jour status.

Exporter dans un source vierge (status.o) le code relatif au tableau de status.
E.g. toutes les routines qui appellent ds_set_cursor, ds_char, ds_…

Exemple: ClearQuestion, field_refresh…

#D4 [editor] Ne pas effacer pour réafficher quand on sélectionne le source courant.

Pour reproduire: CONTROL-f2 deux fois. La deuxième fois ne devrait rien faire.
Pour connaître l'ID courant, appeler oGetCurrentSelection.

Cancelled for now:

#D3 [monogams+editor] Editor shortcuts should be accessible from Monogams (like CTRL-1 and CTRL-2).

Routines nécessaires (à coder et exporter !)
On veut

; In: A = code shortcut  (as returned by km_wait_key)
; Out: Si ED connait le shortcut **et** doit prendre la main, returns Carry 
        ; SI ED connait le shortcut **et** rend la main, apply shortcut and returns NC,
        ; Otherwise, NC.
        ; A preserved in any case

; If CTRL-f1 to CTRL-f2: change selection, et return NC. 
; Otherwise, the routine just checks the code is in the table (KEY_TABLE?), and returns Carry if yes.

; In: A = code shortcut  (as returned by km_wait_key)
; Out: Pas de sortie:
1/ Rafraîchit tout ce qu'il faut (s'inspirer de hotstart) (nb: facultatif pour assemblage, puisqu'on va effacer l'écran de toute manière)
2/ on exécute la routine correspondante au shortcut 
3/ on rentre dans la boucle principale de l'éditeur.
NB: 2 & 3 peuvent être assurée d'un coup en sautant au bon endroit (fe_unhandled?)


Si shortcut inconnu: 
  appeler is_ed_shortcut.
  Si Carry: JP goto_shortcut
  Si NC: rien de spécial.

NB: On opère en deux temps car dans un cas on reste dans Monogams (CALL nécessaire),
et d'autre l'autre on saute à l'éditeur (JP nécessaire).

XXX #D2 [Editeur/Refactor/Fred] Extraire scr_upd

Done in EE beta H.

Ce module (à renommer screen_update, screen,refresh ou pangolin_junior) s'occupe du rafraîchissement optimal quand on change de ligne.
Pour rappel :

  • Si la ligne est accessible dans la page, on change juste la position du curseur (mais on pourrait aussi imaginer un mode vim:scrolloff de sorte qu'il y ait toujours 3 ou 5 lignes autour du curseur).
  • Si la ligne est proche, on scrolle.
  • Sinon on ré-affiche la page.

Il faudrait isoler toute cette gestion pour alléger l'éditeur et permettre un comportement encore plus classe et lisse.
En passant, la routine devra prendre la ligne destination en paramètre dans DE plutôt que lire directement POS_LINE (qui ne doit être connu que de l'éditeur).

XXX #D1 [Editeur/Refactor/Fred] Extraire gestion curseur.

Done in EE beta H (moved in upd_scr.o).

La gestion curseur (position, on/off), précédemment via firmware (BB75 TXT_SET_CURSOR, BB8A TXT_PLACE_CURSOR) a été remplacée par une gestion manuelle (pour plus de contrôle et de rapidité).
Il serait bon d'isoler cette gestion afin d'alléger l'éditeur. En outre cela simplifierait le todo #D2.

XXX #D0 [Editeur] Ne pas effacer la ligne stockée par CTRL-DEL lorsqu'on ferme le source.

L'idée est de pouvoir:

  • Stocker une ligne (CTRL-DEL)
  • Ouvrir un nouveau source (CTRL-N ou CTRL-O)
  • Coller la ligne (CTRL-DEL)

Cela demande de distinguer init à froid et init à chaud.
La première serait appelée uniquement lors de la première invocation de l'éditeur et doit tout nettoyer.
La seconde doit juste nettoyer le strict nécessaire.

XXX #CF [Orgams/internal] Use free_chunk and new_chunk.

org_init is called à chaud for new source (e.g. CONTROL-N or opening another source).
It should use org_close instead, which would in turn call free_chunk.
Should change anything, but that a pre-requesite for multi-files and import.

XXX #CE [Orgams EE] Update online help/documentation.

  • Editor: CTRL 5/6 to reload (LOAD directive).
  • Editor: CTRL f1-f9 to change "tab".
  • Trace: U/D to navigate call stack.

XXX #CD [Editeur] Etendre la taille réservée au nom de fichier

Done 16 Apr 2023 (FF Beta I). Limit went from 20 to 79 chars.

Afin de pouvoir entrer "C:sources/ovl/2019/rom/dos.o" et plus .

XXX #CC [Editeur] Invoke rsx from editor

Done 19 Apr 2023 (FF Beta I), with the participation of ed.o, mon.o and histrion.o

Introduce CTRL-| to invoke rsx (E.g |cd,"/lib"). Rationale:

  • More convenient than going to monogams
  • No ambiguity (c.f. D vs |D in monogams).

How to implement that:

  • First we check the pipe | is at the same position on all keyboards:
  • That is the case (hardware key-code 26).
  • The "ascii" code associated with CONTROL | depends on the keyboard layout. For instance in french it's &1e = asc("^") - &40 (can be verified with call &bb06:brk)
  • We want to enforce that, so it works on all keyboards
  • Open "ed.o" module, since it's editor related.
  • There are already some definitions (e.g. kcf0 = 150 for "key CONTROL f0"), so we add kcpipe = &1e here.
  • We need to set the shortcut. Since it is country-agnostic, it lives in keymap_ctrl table: Just add BYTE 26,kcpipe
  • We associate the shortcut to an new routine in SHORT_KB table: BYTE kcpipe:WORD C_RSX

The interesting part begins. The C_RSX routine.
There is a generic routine (called QUESTION, which is a questionable name) to enter stuff in status bar.
We are making it a bit more challenging by mananing an history of entered RSXs.
… see ED.o

XXX #CB [Editeur/Madram] New status bar.

Done in EE beta F.


  • More information to display
  • Isolated for source, so faster scrolling and 25 lines of source.


  • Install rupture (prerequesites: bug #F0)
  • Dedicated print routine.

#CA [Monogams] Support parameters for RSX

Right now only no-parameters RSX are handled (|a, |d, |i …).

#C9 [internal/sid] Coder routine org_close


#C8 [internal/sid] Coder routine org_select_or_open_file

Partially done in asseto.


XXX #C7 [internal/Sid] — Coder routine org_select —

Done in EE Beta F.


XXX #C6 [internal/Sid] —Coder routine sourcename_to_idx —

Done 30 Mar 2020 in asset2.o


#C5 [Editor] Stocker idx source avec numéro lignes (pour certaines tables).


 import "crunch"

 call crunch.iter ; <---

Un control-enter devrait sauter dans "crunch".
Il faut donc se souvenir du source appelant.

On doit donc préfixer les numéros de lignes par un octet avec l'index du source courant.
NB: cette modification peut-être réalisée avant la gestion multi-fichier, en introduisant une variable source_idx initialisé à 0 et qui pour l'instant ne bouge pas.

Tables concernées:

  • modification history
  • ctrl-enter history
  • ???? A voir.

#C4 [OrgamS/Internal] Replace all firm far calls by hand made ones.


  • We already have the no_firm versions (for trace), so it would save space.
  • Faster.


  • We'll change the ROM selection without notifying the hardware. So we cannot mix the two (otherwise rst &18 would return to the wrong rom).
    • As a first approach, do that only for 'leaves' routines which doesn't cross-rom anymore (NB: how do we ensure that?).
    • Workaround: manual sync curr_selection?
  • We must ensure firmware doesn't switch ROM in interruption.
    • Workaround: wrap b941 and reselect 'our' ROM?

Requires #C3

#C3 [OrgamS/Internal] Improve far_call_no_firm.

Edit: Partially done for bricbrac in monhelp3.

  • Prerequisite: merge far_call, its installer and its clients in ROM ed.
  • Must preserve all regs but IY.
  • Change way to use it: call far_call_bric:word dispHex
  • Add sanity checks.
  • Move from bank to central RAM.

XXX #C2 [orgams] Update inline help.

Done 13/07 in txtg.

  • Ed: CTRL-%
  • Mon: Remove first blank line.

XXX #C1 [Editor/Fred] — CONTROL-G for end of bloc as well. —

Done in EE beta E.

Si le curseur est *déjà* sur le début d'un bloc, un nouveau CONTROL-G devrait l'amener à la fin du bloc.

#C0 [Monogams] Load/Save binary or ascii.

Ability to load any file (binary or ascii, like Utopia's |load or Hacker's ld).

XXX #BF [Editeur/Fred] Utiliser field_editor pour CTRL-G.

Moins de code, et plus de fonctionnalité (left/right, clr, …)

#BE [Editeur/Fred] Déplacer gestion SHIFT-DEL / SHIFT-CLR dans field_editor

Cf ED-BPAH.o et field3.o
Raisons :

  • Plus logique
  • Active automatiquement ces raccourcis dans monogams.

#BD [Orgams] Display error message if wrong bk in |org,bk

Followup of #0A.
For now it just returns to basic silently.

#BC [Editeur] CONTROL-ESC to go to trace at current line.

Requires #BB

#BB [Orgams/codec] Return the address reached by an arbitrary source line.

Needed for #42 and #bc


   ;In: DE = line number
   ;Out: HL = PC ($) at this line

#BA [Trace] Macro: show both source and invocation.

When debugging, we should see the source of the macro along with the line of invocation.
Copain du todo #92.

XXX #B9 [Orgams/Internal] Loading: reorganize chunks.

Done 15 Jun 2019 in orgAP (for version EE).

Prerequisite: #B8
Prerequisite for bug #C0.

We need to extend header to settle bug #C0.
So, chunk might not fit anymore. We need to be able to re-dispatch sub-parts.

XXX #B8 [Orgams/Internal] Loading: store checksums.

Done 15 Jun 2019 in orgAN (for version EE).

Prerequisite for #B9.
Once the chunks are reorganized, checksums won't match.
So we need to store them beforehand.

#B7 [Monogams] Factorization: use field editor.

XXX #B6 [Orgams] Adjust on-line help.

  • Add "gr", (CTRL-1, CTRL-2) in monogams.
  • Remove "COPY-M" not plugged in this version.

#B5 [Editor] Nettoyage code: utiliser field editor pour rafraichissement.

Pré-requis: #BE

Apres SHIFT-CLR ou SHIFT-DEL, on ne devrait pas avoir a mettre a jour l'ecran manuellement.
Idem pour toutes les routines (chercher par exemple les occurrences de CALL &bc44).
Le field editor est la pour ca. Plus precisement, fe_refresh.
Comme cette derniere routine demande des parametres, on introduira une routine auxillaire (e.g. refresh_line) chargee de passer ces parametres.
Idealement, il suffira d'appeler une routine commune, sans parametres d'entree, qui effectue ce rafraichissement et appelle aussi line_modified.

XXX #B4 [Monogams] CTRL-1 / CTRL-2 active from monitor.

Done in monoj, ch1t.

XXX #B3 [Monogams] CTRL-R / CTRL-e should be active in graphical dump.

Done 28 May 2019 in monov.

#B2 [Monogams] Faster graphical dump.

For now most of the time is taken by copying memory across banks!

#B1 [Monogams] Graphical dump in start screen.

  • Three thumbnails should be displayed by default when entering Monogams (Current connexion, C0/RAM, C2/RAM).

XXX #B0 [Editeur] Eliminer la variable TOT_LINE

Done 20 Jun 2019 in ED-BPAD.

A faire pour la prochaine version.
Le nombre total de lignes doit être demandé via oNbLines. Cela enlève du code et assure la cohérence.
NB: Pour un nouveau source, le nombre de lignes retourné est 0.

  • On peut considéré ça comme normal : tant qu'aucune ligne n'est validée, le source est effectivement vide.
  • Si on trouve ça inélégant, on peut toujours insérer une ligne vide à l'init.

#AF [Editeur] Gestion des lignes de plus de 72 caractères.

CF: A moitié corrigé dans la concaténation de lignes (DEL_CHAR) mais pas dans dispStrAt.

On peut obtenir de telles lignes en concaténant 2 lignes ou en important un fichier texte.
Deux options:
1/ Wrapping automatique.
2/ Clipping et scrolling
Dans ce cas, il faut clipper et afficher un symbol (…) à ajouter dans la fonte !
Pour le scrolling gauche droite, trois solutions possibles.
2a/ Ne scroller que la ligne sous le curseur.
2b/ Scroller toutes les lignes qui débordent.
2c/ Scroller tout l'écran.

Le 1/ a ma préférence, suivi du 2b !

IMPORTANT: tout ceci doit être fait dans le field_editor. Donc le todo #93 doit être accompli au préalable.

XXX #AE MACRO definition should use parenthesis.

Edit: Parsing done 08 Mar 2019 parseAI. Display part dropped.

For consistency which invocation, we should display:
MACRO PUT_PSG(reg,val)
rather than:

Parsing should be adapted accordingly (accept both with/without parenthesis).
That's actually the most important part.

XXX #AD MACRO invocation should require parenthesis.

Done in EE beta E.

Request from Candy!
Some typos lead to macro interpretation, which is a bit annoying.

    inc bd 
    inc (bd)

If we make the parenthesises (at least the opening one) mandatory, no such behavior would occur.

And/Or: INC shouldn't be permitted as macro name anyway.

XXX #AC [Monogams] Affichage date.

Done: 4/3/2019 in mono7,mono8.

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.

XXX #AB [Monogams] Enlever affichage debug SP.

Done: 4/3/2019 in mono8.

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: Actuellement 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

XXX #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. Continued in #B6.

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

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

Fixed 10 Mar 2019 in monod

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

XXX #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

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

Edit 25 Sept 2019: done a long time ago.

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).

XXX #8C [Monogams] Graphical memory dump.

18/03/2019: First version as 'gr' command in monof. Cf B1 and B2 for remaining tasks.

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

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

Edit 23 Jan 2021. It was done in brk4.o (beta J). Nb: If MF invisible, we cannot program it anyway.

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).

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

Edit 23 Jan 2021. Reported in bug #105a (fixed) for Bank. MfTwo doesn't know ROM# (bug #106).

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

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

Done 22 Jun 2019 monoz

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.

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

Done in EE beta F.

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

; in: DE= cursor in status
    ; HL= NT string

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

  • ces routines ne doivent pas utiliser les variables existantes (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).

Nb: La zone status va prochainement s'étendre sur 5 lignes. Pour assurer la transition, les routines appelantes doivent passer E=0 (e.g. LD DE,COLUMN_FILENAME*&100 + 0), puisque pour l'instant il n'y a qu'une ligne !

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 (todo #BB) 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.

XXX #21 [Monogams: Madram] Accepter RSX.

Done in EroticEnlightment.

Seul problème, la plupart des RSXs ne conviendront pas au format écran R1=32. (We switch to R1=40)

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).

XXX #0A [MADRAM] Choix BANK travail

Done 20 Jun 2019 CHac + Monoy |org,bk

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