yasep/changes.txt The latest changes are at the bottom of the file. __________________________________________________________________________________ 2006-09-02 ... 2007-04-07 ... Probable future instructions : * min and max instructions are ... quite easy to make. route the 2 operands to ASU, perform substraction, XOR the Carry bit with the instructions's MIN/MAX field. the result (1/0) will enable/disable the write of the src2 into src1/dest ---> The value of src2 must be routed through another data path than ASU. 2007-04-26 ? conditional instructions for semaphores ? ? serial boot : shift register in the instruction register ? 2007-11-05 : "tonton edition" 2009-03-24 I just read http://www.gnu.org/philosophy/javascript-trap.html from /. and I'll apply the principles on the YASEP code, once FSF disambiguifies the recommendations. In the source files : /* @Copyright (C) 200x Yann Guidon @licensetype AGPLv3 @licenseURL http://yasep.org/license/agpl.txt */ In the compacted files : //@source: URL ===> what is the formatting for the last draft ? 2009-08-10 * TODO : opcode fuzzer ? * TODO : signed multiply 2009-08-24 * TODO : ABS alias ABS R1 => SUB 0 R1 R1 MSB1 R1 ABS R1 R2 => SUB 0 R1 R2 MSB1 R1 ==> signed multiply : - need another tmp reg (stack ?) xor R1,R2,t abs R1 abs R2 (mul16) return si MSB0 t neg Res return soucis : comment ajuster la sortie sans faire de ABS en entrée ? comment faire le NEG d'une paire de registres ? comment faire cela pour toutes les tailles et combinaisons avec immédiats ? neg 32 bits avec op 16 bits : neg Rlow and 1 PC Rt sub rt, Rh, rh 2009-08-29 Multiply : available in 2 versions (when available) * When the LUT method is used, 3 instructions are provided : MUL8L, MUL8H, MULI * When a HW multiplier is available, these instructions are implemented : UM16H, UM16L, SM16H, SM16L These methods exclude each other, so they share the same 4 opcode values. The sharing is managed with aliases. A JS flag in the CPU object will determine which opcode to use. The 4 following opcodes are reserved for division. 2009-08-30 TODO * instructions that read and write to another register bank/thread ? 2009-09-20 : - TODO : s/SULV/SLV/ in VHDL and generator code 2010-01-17 * TODO : create 2 VHDL packages so wires types can be SUL or bit, buses can be SULV or bit_vector => speedup of GHDL simulation ==> define YASEP_BIT, YASEP_VECTOR and conversion functions 2010-03-11 * TODO : add a new pseudo-instruction "assert" (reg/mem/sr) = (reg/mem/imm/sr) * TODO : changer SLV en ... ? YV : YASEP Vector ? 2010-03-17 * TODO : code for bitcount with the MUL instructions and LUT ? problem : the adds are shifted ===> LUT8 (20120920) 2010-04-19 * TODO (???) : bridge from SR to Wishbone and other I/O buses 2010-06-26 * invalid instructions or reserved opcodes : used for internal autotest ? (useless for FPGA) 2010-10-10 : * TODO : pipeline latches : 3 versions : no latch, D-reg, or "hold" latch (quadrature clock : low power) * optional LFSR for testing the core 2011-05-12 * TODO : add new instructions in the opcode map : CALL, ITC, ITE, ITR, POPC ?, ADDC, SUBB, * TODO : CALL : force auto-pre-increment if dest register is a data reg one can only use auto-update or immediate address CALL R, R CALL R+Imm16, R ? attribute : WrIP (unconditionally Write the contents of NIP) attribute : Updt (update) * DONE : still no return, but how to avoid explicit Updt and save a byte ? * TODO : (U/S)(MIN/MAX) TRAP when writing to NIP AND Carry is set ! (forces long forms ?) Attribute : TNIPC * DONE : add "reserved", "optional" and/or "future" attributes to opcodes so they appear with a different color on the opcode map and are not tested/used/assembled etc. * TODO : TRAP list and vectors * TODO : eventually : LSB of NIP as additional address bit * TODO : LSB of NIP : trap if set * TODO : conditions : Cond 0 : cleared : Z / NZ NIP : 0 (never) 1 (always) Cond 1 : MSB/sign : P / N NIP : Carry Cond 2 : LSB/parity : reserved (copy of LSB, 0) Cond 3 : RSV / read the Nth bit of a register or I/O port, 0 by default. register number or I/O port selection must be configured somewhere in a thread-specific register (along with the Carry bit, thread number, call stack pointer, call stack limits ?) une fonctionnalité peut lister toutes les fenêtres d'un certain type et leur demander une action, comme sauver ou charger ou mettre à jour ou... ==> à voir plus tard TODO * création de fenêtre : passer un objet, pour racourcir la taille de la liste d'arguments (en cours) 2011-09-17 Changes/updates to the architecture # NPC = 0 ==> NOP = MOV NPC NPC ==> "ALWAYS" = NZ NPC = 0000000b ==> "BORROW", "CARRY" ==> not testing the NPC value itself ==> unused codes : ZERO NPC , ==> MSBx NPC ? => OVERFLOW !!! * NO LONG NOP => 0000h everywhere * R0 disappears, R5 appears => the hex code matches the register names (R0=NPC) * 4th condition code : "BIT0" "BIT1" ! R1 and/or I/O port is shadowed to a 16-bit auxiliary register, the register field goes to a bit MUX so individual bits can be tested. # added IMM20 for YASEP32 : use SND field to add 4 bits in MOV, GET => 1 MB of immediate jump range 2011-09-18 : doc pages and site now a bit more search-engine-friendly, back to .html file names 2011-09-19 : PROBLEM : imm4 is sign-extended even for shifts so the iR form can shift from 0 to 7 and 24 to 31 bits in YASEP32, which is no coherent with YASEP16 (0 to 15) The alias NEG has no way to handle properly the negation of 8000h or 80000000h ==> can it be detected with the Overflow bit ? (use CMPU after it ?) Overflow bit : another solution to spare an opcode (CMPS) 2011-09-20 : TODO : ajouter un flag/condition indiquant si on est en section critique (utile ?) TODO : VHDL: YASEP32 : mettre à 0 le bit de poids fort du shift amount si imm4 est utilisé (à cause de l'extension du signe !!!) 2011-09-22 : changed NOP into a real opcode, in the CTL group changed the group order so CTL = 0 => NOP = 00h moved HALT to the SMT group TODO : search engine ? 20111027 TODO : nouvelle API pour les fenêtres 20111102 : TODO : modify variables named "target" "title" "undefined" "charCodeAt" "HTML/html" "close" onClick/onclick ?? "width" "height" 20111107 - changed register_window to register_key - SAVE function works ! 20111124 : - the main page can now set the default language, pre-cookies changer ygwm-colors.js pour faire une table à la place d'arguments changer '' en "" changer getTime en +new Date() ajouter window.onbeforeunload = function() { ... }; (IE?) chercher les closures avec "=function" MUL LUT : CRC16 ? CRC32 ? 20120121 : à voir ? : event.preventDefault(); event.stopPropagation(); 20120411 : * creating the "Examples" menu and directory ==> TODO : put all the source code examples in a single page/window ? * TODO: load-file service ? 20120501 * TODO : load/save/loopback services * TODO : understand why the Actel version doesn't work well * TODO : parking (à finir dans le simulateur) 20120509 * TODO : chaque module de ygwm peut avoir un config() qui crée du html/DOM pour configurer ledit module, ensuite intégré dans settings 20120510 * idée: GNL : register allocator that solves the memory access issue (address&data treated as on linked pair ?) * idée : generate GNL from asm or binary code ? * TODO: boutons de DEFORA : créer des clés, supporter les profils 20120518: passage en doctype HTML5 * TODO http://validator.w3.org/check?uri=http%3A%2F%2Fyasep.org%2F&charset=%28detect+automatically%29&doctype=Inline&group=1 20120723 : **************************************************************************** * TODO : finir pour septembre - E/S fichiers **************************************************************************** * à finir: traductions doc registres * TODO : carry-in (+1) avec ADD pour pouvoir ajouter +8 avec les instructions courtes (si SI4) si la valeur est positive : -8 -7 -6 -5 -4 -3 -2 -1 1 2 3 4 5 6 7 8 ==> 20130719 JCH found a better solution 20120727 : * TODO : add a configuration flag COND_R1, COND_LSB, COND_MSB, COND_CARRY, COND_ZERO : if the source code doesn't use some conditions, don't create the condition circuitry ? * TODO : make a N-bit bus width slider ? 20120810 : * "bug" found in the VHDL, with the bit Zero being enabled when it shouldn't. => TODO : rewrite and retest the benchmarks 20120811 : * TODO : anatomie du YASEP * BUG : substitutions in YASMED should start with the longest words first to prevent sub-word substitutions => parser * TODO : disassembler/analyser ? 20120822 : * TODO : in YASMed.js, serial:0, // must be set by a cookie !!! 20120825 : * TODO : parseur pour les substitutions mot à mot !!!!!! (et non pas des expressions régulières) 20120902 : new version online ! * TODO : unit tests... 20120904 * TODO : check spellcheck:false in all the textareas 20120911 : * TODO : a bugtracker ? 20120917 * TODO : on core freeze, the invalid opcode should be read somewhere (so can be sent to the debugger along with the address) 20120923 TODO : use the more efficient compaction BUG : on F5, some windows are restored in "hidden" state 20120924 TODO : one page for each execution unit, with examples and application code (like #!doc/multiply) 20121002 * TODO : timeout sur le chargement des pages ! (en cas de connexion coupée) * TODO : verify "read after write" timing ==> WMODEA and WMODEB HIGH 20121008 * TODO : a generic number text input * TODO : example : fibonaci series * TODO : détecter 2 NOPs consécutifs pour sauter plus vite l'alignement - version A : ne pas passer en phase 2 si NOP - version B : détecter 2è NOP en phase 2 ? 20121018 * TODO : change the menu system / CSS so the titles are better handled => they appear in unwanted ways under webkit 20121020 * TODO : .org auto, .org reloc ? 20121023 * TODO générer la carte automatiquement si on veut simuler un yasmed ==> Done (more or less) 20121028 * TODO: data (r+w) window/editor 20121105 * TODO: data editor, 20121108 * TODO: for ygwm2 : separate the "common routines" (toolkit) from the window generation => buttons, h3, resize etc. 20121111 * gros charabia avec la taille des registres : le vieux code utilise YASEP_TYPE, le nouveau passe par asmctx.core En plus c'est pas cohérent avec le configurateur de profils ! 20121117 * TODO: distinguer entre FAULT et TRAP => garder le curseur ... 20121118 * TODO: new french tutorial : tuto/tuto_fb (gotta translate it later) ==> Done by Jeff Davies 20121120 * TODO : swap MSB0/MSB1 and LSB0/LSB1 ? * TODO : YGWM2 : "link" (binding) framework between windows * TODO : généralisation des