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 déplaçables (à la yasmed) 20121122 * mov -42 R1 : YASEP32: FFD61F09 YASEP16: FFD61009 Should they assemble the same ? * TODO : microYASEP VHDL in integer mode ? ****************************************************************************************** 20130719 * removed a lot of history in this file (look at older versions such as there http://archives.yasep.org/yasep2011/changes.txt ) but keeping the relevant TODOs * moving the raw tracker data to https://bitbucket.org/dahozer/yasep/issues --> it may be the last version of this file with the whole history, I'll cut it soon. * firefox22 seems to have broken some code in the ISM windows that displays the label over ASM code ==> fixed (no idea how) by streamlining the page generation code (less DOM operations) * the imm4 field can extend its range when in extended form and when writing to PC (thanks JC Haessig for some precious tricks !) * #!doc/mul and #!doc/multiply ... ??? => solved * TODO : HALT with IMM16 argument => better regression tests ==> FORM_I must be rebuilt again ==> add the HALT parameter in the JS and VHDL sims ==> update the YAS source codes ==> automate regression tests 20130722 * created the regression directory 20130725 * slowly updating the examples and regression tests with the new HALT * FORM_I looks useless for HALT, keeping only FORM_i * TODO : ".expect" keyword for assertion of values ? ==> encoder un maximum les assertions avec du code asm ? * moved test_opcodes from ASM/ to regression/ (and renamed test_asm) TODO : - ISM : 2 instructions missing : IB (fr) IH (fr) - simulateur JS : ongoing - VHDL - stamp - colibri - web server websockets flasheur série HTTP loopback -> load/save des fichiers - GNL : 2013 (plus frontends) - auto-updates 20130726 : - JCH submitted his fractal source code... mind=blown 20130728 : Adding MUL16x TODO : keywords that open windows and connect to the map, RAM, framebuffer, yasims... .framebuffer name xres yres bpp start_address .memory name start address length rwx .map name .console name SR... .yasim name YASEP32/YASEP16 .yasim name run ==> add the feature to close a memmap and all the open/attached windows ==> add the feature to change the base address, dimensions of a framebuffer TODO : memories : 16-bit bus and 32-bit bus (faster access) Merge the opcode map and the core configurator ? 20130729: forced to rebuild yasep/VHDL/config.js, it's really too buggy. 20130730: TODO : the number input methods are too varied and not coherent across pages, it's a UI (and development) nightmare, they should be homogenized with edit_text... TODO : create a generic file / platform for the simulator and the memory map (set base address etc.) [maybe a good opportunity to redesign the 16/32 bits access ports] TODO : create the SR map and its "clients" windows similar to the memory windows TODO : tuto assembly memory map TODO : yasim=> instructions/second DONE : menu for YASIM 20130731 : Jeff Davies started to play with the YASEP :-) he did a little checksum that I enhanced... TODO : enable register parking only when the address is given explicitly by a short immediate. this should allow other adressing methods to scan the scratch area between addresses -1 and -5. TODO : create a "turbo" button that hides everything to speed up simulations TODO : create a gadget that indicates the simulation speed => IPS in the title ? => timer that reads the instruction counter every second, if difference with last count is positive, display the difference... (compensate with the actual elapsed time in ms) 20130801 idea : Alias HALT to IPC ? 20130803 first translations with Triny ! JD submitted a translation of the fb tutorial ! TODO : YGWM: changement du titre de fenêtre dans "Option" qui marche plus ?? TODO : "not found" is redundant in i8n.js Done : change the "title" of the menus into separators in the submenus => removed change_title and setTitle Done : added the Sim menu, reorganised a bit moved doc/multiply to tuto/multiply 20130805 tuto_framebuffer.en ready changing VHDL and JS code for handling Imm4 for shl (not sign extension in YASEP32) and PC (range extension) => it's going to break everywhere... TODO : - update the doc, add a drawing or two - JS simulator - asm - disasm - source codes & examples TODO : number prefixed by "~" get adjusted with current address (in YASMed) TOOD : drawing in tuto/multiply.en.html TODO : bug dans l'export VHDL des profils lorsque la table d'instruction est remplie en mode "auto" => il faut recliquer sur chaque instruction pour qu'elle apparaisse dans le fichier :-( TODO : retest the Framebuffer VHDL example DONE : patchInnerLinks => a href with a link without leading "#" must be tagged "target=_blank" => cleanup many html files (makes them a bit shorter) TODO : doc/SR is still missing ! 20130806 Laura submitted the picture that I turned into img/theYASEP.png Thanks the GIMP and pngcrush too :-) Removing the target="_blank" from the .html saves about 2KB of source files ! TODO : videos on youtube ? 20130809 TODO : change the register parking system ! Ax = -1 => keep D in its own register. (it made no sense because the addresses were not aligned and would not be saved correctly in memory) - sim (ok) - doc - VHDL - examples ? Bug in VHDL/config.js with PC_length TODO : s/.innerHTML/.textContent in select places to speed up rendering ? TODO split yasep/sim/yasim.js into frontend and backend Done : during reinit, YASim reads the profile from the YASMed and adapts the sizes automaticly. TODO : deprecate "YASEP16" and "YASEP32" keywords ! TODO : YASim : display interface changes only during rendering intervals + button "turbo"