ChangeLog is now automatically generated from git log output
authorHugo Villeneuve <hugo@hugovil.com>
Wed, 15 Jan 2014 03:53:08 +0000 (22:53 -0500)
committerHugo Villeneuve <hugo@hugovil.com>
Sat, 22 Mar 2014 18:06:13 +0000 (14:06 -0400)
ChangeLog [deleted file]
Makefile.am
autogen.sh
build-aux/gitlog-to-changelog [new file with mode: 0755]

diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index 0528782..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,496 +0,0 @@
-2013-11-05 Anthony <antliu at gmail.com>
-       * Fix error with JMP @A,DPTR instruction
-       * Fix error with RETI instruction
-         Error report and patch submission by Anthony
-         (antliu at gmail.com).
-
-2013-09-07  Hugo Villeneuve  <hugo@hugovil.com>
-       * Fix compiler warnings
-        * Fix error with CJNE instruction.
-         Error report and patch submission by Tobias Diedrich
-         (ranma at tdiedrich.de).
-
-2011-12-11  Hugo Villeneuve  <hugo@hugovil.com>
-        * Added optional size parameter when dumping memory.
-        * Created two separate executables, emu8051-cli (default)
-          and optional emu8051-gtk if Gtk+ is detected.
-
-2011-10-29  Hugo Villeneuve  <hugo@hugovil.com>
-        * Fixed SJMP error and improved columns and rows sizing.
-         Error reported and patch submitted by Pierre Ferrari
-         (piferr4ri at gmail.com).
-
-2010-03-19  Hugo Villeneuve  <hugo@hugovil.com>
-        * Reintroduced the console mode if no GTK+ librairies are
-          detected. The default is to build the GUI if GTK+ is detected,
-         but the console mode can always be forced by using
-         "--enable-gui=no" as a configure option.
-
-2009-02-09  Hugo Villeneuve  <hugo@hugovil.com>
-        * Updated Free Software Foundation address.
-
-2008-11-05  Hugo Villeneuve  <hugo@hugovil.com>
-        * Added licencing informations for each source file.
-        * Removed some debugging messages.
-
-2008-04-28  Hugo Villeneuve  <hugo@hugovil.com>
-        * Removed gtk+-1.0 support, now requires gtk+-2
-
-2004-05-07  Hugo Villeneuve  <hugo@hugovil.com>
-       * Corrected a bug with the CJNE instruction.
-       * Modified the directory layout and autoconf files.
-       * Added support for GTK2.
-       * Added project to subversion.
-
-2002-11-12  Hugo Villeneuve  <hugo@hugovil.com>
-       * Removed some warnings for GCC 3.2: replaced <fstream.h> by <fstream>
-         and <iostream.h> by <iostream>.
-       * Added "using namespace std;" in EmuGtk.hpp (for GCC 3.2)
-       * Removed all unused variables
-       * Corrected error in CPU8051.cpp, in function:
-               'void CPU8051::IntMemBitInfo( unsigned int BitAddress, char *Text )'
-         Modified this:
-               'sprintf( &Text[ TextLength ], ".%X", BitAddress );'
-         instead of:
-               'sprintf( &Text[ TextLength ], ".%X" );'
-       * In Opcode2cpp.pl (line 767), modified for GCC 3.2:
-               'print INST_IMP " funcptr[$i]=&CPU8051::$ifunc;\n";'
-         instead of:
-               'print INST_IMP " funcptr[$i]=&$ifunc;\n";'
-       * EmuGtk.cpp, added '#include <iostream>'
-       * Modified the return type of some functions to void to remove warnings.
-       * In function 'void RegWin::Show( CPU8051 *CPU )' (RegWin.cpp), removed all
-         the '\n' in 'gtk_clist_set_text' calls (to fix a display problem)
-
-1999-04-27  Hugo Villeneuve  <hugo@hugovil.com>
-       * Ajoute les fonctions DumpInt dans EmuConsole.hpp ainsi que ReadInt
-         dans CPU8051.hpp. Corrige des bugs dans WriteInt et WriteExt.
-
-       * Corrige l'implementation des timers. Les 4 modes ont ete testes et
-         semblent bien fonctionner maintenant. LEs flags sont mis correctement
-         et les timers augmentent maintenant (au lieu d'etre decrementes).
-       * Ajoute un fichier timer.hex pour tester les timers.
-
-1999-04-22  Hugo Villeneuve  <hugo@hugovil.com>
-       * Ajoute les fonctions ME, MI et MP (voir definitions dans
-         EmuConsole.cpp). Ajoute les fonctions membres WriteExt et WriteInt
-         dans la classe CPU8051 afin de suivre la logique de l'espace
-         memoire du 8051. WriteExt permet de modifier la memoire externe
-         qui va de $00 a $FFFF (et non de $100 a $FFFF comme c'etait le cas
-         avant). De meme, WriteInt permet de modifier la memoire interne qui
-         va de $00 a $FF (incluant les SFR). Meme si la memoire externe
-         contient les adresses $00 a $FF, il n'y a pas de conflit avec la
-         memoire interne de $00 a $FF car la memoire externe est accedee avec
-         l'instruction MOVX alors que la memoire interne l'est avec les
-         instructions MOV (direct ou indirect).
-
-       * Renomme l'option DD du menu pour DE (dump External data memory).
-         Change la description de l'option DI du menu pour Dump External
-         Data Memory.
-
-       * Ajoute la fonction ReadExt dans la classe CPU8051, toujours pour
-         la logique de la memoire du 8051. Ajoute la fonction DumpExt dans la
-         classe EmuConsole pour dumper la memoire externe.
-       * Ces nouvelles fonctions ont ete testees et semblent bien fonctionner.
-
-1999-04-09  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Refait marche le RunningState avec les classes.
-       * Reconnecte les signaux aux boutons Trace, Run, Reset et Quit.
-       * Ajoute bouton Step qui ajoute un breakpoint a la ligne suivante
-       et passe en RunningState. Pratique lorsqu'arrive un CALL et qu'on ne
-       veut pas y entrer contrairement a Trace.
-
-1999-04-06  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Creation de EmuConsole.hpp et EmuConsole.cpp
-       * Cette nouvelle archive est presque rendue au meme niveau que
-       l'ancienne. Vous allez pouvoir commencer a laisser faire l'ancienne
-       et vous concentrer sur celle-ci.
-
-(Les modifs annoncee se rapportent a l'ancienne archive mais elles ont ete
-ramenee dans celle-ci par Jonathan St-Andre)
-1999-04-05  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Corrige qq malfonctions dans exec de mainconsole.cpp (nb d'inst.
-       peut etre l'infini, caractere est attendu au clavier seulement
-       si l'execution est arretee par une touche.
-       * Corrige probleme d'instructions sans operandes mal desassemblees
-       (il ne faut pas ecrire le caractere ' ' dans la chaine, il faut
-       utiliser sprintf avec " " a la place car sprintf termine la chaine
-       avec un 0 a la fin. La chaine n'etait pas terminee par un 0 et elle
-       affichait du garbage de la memoire)
-       * Corrige probleme dans disasm.cpp en rapport avec addr11 qui ne
-       prenait pas opcode mais memoire[opcode] (je devais etre chaud quand
-       j'ai ecrit ca).
-       * Bouton Run se change en Stop dans l'interface Gtk+ lorsque l'on
-       clique dessus et le cpu se met en mode execution. Les fonctions de
-       l'interface restent disponibles. N'importe quelle action dans
-       l'interface(excepte le fait de cliquer dans les fenetre memoire
-       et programme) cause l'arret de l'execution et la mise a jour
-       de l'affichage.
-       * Il est possible de placer des breakpoints pendant qu'il est
-       dans le "RunningState".
-       * Enleve les pixmaps sur les boutons dans l'interface Gtk+
-       * Ajoute verification de breakpoint deja existant dans
-       setbreakpoint.
-
-               Hugo Villeneuve  <hugo@hugovil.com>
-
-       * Modifie l'affichage de disasm pour que les operandes soient alignees.
-       * Modifie la fonction DP pour qu'elle prenne l'adresse du PC par
-         defaut si aucune adresse n'est specifiee.
-
-       * Erreur avec l'instruction ACALL qui ne calculait pas l'adresse
-         correctement et qui ne poussait pas l'adresse de retour sur la pile.
-         Il est important que le PC soit incremente de 2 avant de calculer
-         addr11 et de pousser le PC sur la pile...
-         Il faut aussi modifier le dessassemblage de cette instruction qui
-         n'affiche que la deuxieme operande (adresse de 8 bits), alors que
-         l'adresse est sur 11 bits...
-       * Erreur avec l'instruction RET( fichier siae1.asm adresse 03A4) ,
-         affiche RET   @%K
-       * Ajoute la possibilite d'arreter l'execution du programme en pesant
-         sur n'importe quelle touche grace a la fonction kbhit().
-       * Ajoute les fonctions SB, RB et DB pour les breakpoints dans le
-         mode console. L'execution se fait jusqu'au breakpoint. Une fois
-         arrive au breakpoint, si on fait de nouveau EM, on peut continuer
-         l'execution du programme passe ce breakpoint. Autrement dit, EM
-         ne verifie pas si la premiere instruction qu'il execute est un
-         break point, ce qui est pratique pour continuer l'execution du prog
-         apres un breakpoint.
-
-1999-03-31  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Reecriture de TOUT les sources en imbriquant au maximum
-       dans des classes pour que ce soit plus lisible et reutilisable.
-       * Les classes sont CPU8051, Memory, EmuGtk, MemWin, RegWin, PgmWin
-       et les exceptions.
-       * Tout est en anglais pour rendre le programme disponible sur
-       internet.
-       * Je n'ai pas encore refais l'interface Console en classes donc
-       elle n'est pas incluse dans cette archive. Il faudrait vraiment
-       la refaire en tant que classe.
-       * Ajout fichiers TODO, CREDITS et COPYING (license GPL)
-
-1999-03-30  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Corrige bug lors du desassemblage dans l'interpretation des
-       adresses directes dans 0-7F. disasm.cpp
-       * Corrige bug dans l'opcode 0x85, ajoute conditions particulieres
-       pour cette instruction dans script Perl et dans desassemblage.
-       Les operandes de cette instruction sont inversees dans la memoire
-       programme. Ex.: MOV 50H,51H est ecrit 85 51 50 dans la memoire
-       programme.
-
-               Hugo Villeneuve  <hugo@hugovil.com>
-
-       * Bug dans les instructions ayant un mode d'adressage direct qui
-       utilisent des adresses dans 0-7F. Le desassembleur interprete les
-       adresses comme etant des adresses de bit.
-       * Bug dans l'opcode 0x85 MOV direct,direct. La source et la
-       destination sont inverses dans le desassemblage et dans l'execution.
-
-1999-03-29  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Remplace string::erase pour string::replace partout, g++ a
-       l'universite ne connait pas encore string::erase, c'est trop recent.
-       * Ajoute "-w" pour disabler les warnings et "-fhandle-exceptions"
-       pour activer les exceptions a l'universite.
-
-               Pascal Fecteau          <fectea00@gel.ulaval.ca>
-
-       * Ajoute .h comme extension aux fichiers inclus, sinon ca ne
-       fonctionne pas a l'universite.
-
-               Pascal Fecteau          <fectea00@gel.ulaval.ca>
-               Hugo Villeneuve  <hugo@hugovil.com>
-
-       * Corrige une erreur dans les instructions AJMP addr11
-
-1999-03-28  Hugo Villeneuve  <hugo@hugovil.com>
-       * Modification de la presentation de "Dump Register" sur la console.
-       Beaucoup plus facile a lire maintenant.
-       * Correction d'un bug dans l'instruction DA (opcode 0xD4).
-
-1999-03-27  Hugo Villeneuve  <hugo@hugovil.com>
-       * Correction d'un probleme avec l'instruction CJNE.
-       * Correction de bugs dans LoadHexFile (voir 1999-03-22)
-
-               Jonathan St-Andre       <standr00@gel.ulaval.ca>
-
-       * Augmente la hauteur de la fenetre Internal RAM.
-       * Correction de probleme avec tous les XCH et XCHD, l'operande source
-       n'etait pas modifiee (Trouve par Hugo et suggestion de correction par
-       Hugo).
-       * Ajout de P0, P1, P2 et P3 dans la fenetre des registres.
-       (Suggestion d'Hugo).
-       * View -> Data Memory Dump et View -> Program Memory Dump sont
-       fonctionnels. On ne peut visionner que les 16384 premiers octets.
-       Il ne veut pas prendre 65536 lignes dans une scrolled window.
-       Probablement parce que 18colonnes x 65536lignes = 1179648 cellules
-       est beaucoup trop.
-       * J'ai remarque qu'avec Gtk, on peut facilement changer les raccoucis
-       dans les menus. Pour associer "View -> Program Memory Dump" au
-       raccourci "Alt-2" par exemple, il suffit d'aller dans le menu "View",
-       se placer au dessus de "Program Memory Dump" et appuyer "Alt-2".
-       Le menu se modifiera automatiquement pour afficher "Alt-2" au bout
-       de la ligne et desormais, lorsque vous appuierez "Alt-2", l'action
-       sera executee. Ca dure seulement durant la session presente.
-       * Reduit la taille de la fenetre principale en largeur de 120 pixels
-       et en hauteur de 20 pixels.
-
-1999-03-25  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Fenetre dump connais la position ou on clique dedans.
-       * Generalise dans une classe la fenetre memorydump, il sera plus
-       facile d'ajouter plusieurs fenetres memory dump a partir du menu
-       plus tard.
-       * Implemente Run jusqu'a un breakpoint (si aucun breakpoint,
-       loop sans fin -> il faut killer).
-       * Suffit de cliquer sur une ligne de programme dans Gtk pour placer
-       ou retirer un breakpoint. Les breakpoints apparaissent comme une
-       asterisque (*) a droite de l'adresse dans la fenetre program.
-       * Ajoute bouton Run dans interface Gtk
-       * Implemente quelques fonctions necessaires au breakpoints.
-       * Change un peu le layout
-       * Enleve image de fond (cause leger delai au chargement)
-       * Fait un peu de menage dans fichiers relatifs au Gtk
-
-1999-03-23  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Changement des champs GTK_TEXT des fenetres Registre, Program et
-       Internal RAM pour des champs GTK_CLIST. Plus beau, moins de
-       flickering quand on trace et plus pratique pour ce qui s'en vient.
-       * Integration des fichiers xpm dans l'executable. Mais c'est encore
-       trop long a charger lors de l'execution, va probablement falloir les
-       compresser ou laisser faire l'image de fond.
-       * Ajout de pixmaps sur les boutons Trace, Reset et Quit (Gtk)
-       * Ajout de pixmap comme fond (Gtk)
-
-1999-03-22  Hugo Villeneuve <villen01@gel.ulaval.ca>
-       * Corrige un bug dans la fonction LoadHexFile : Le checksum n'etait
-         pas calcule correctement, ce qui entrainait des erreurs a l'ouverture
-         de certains fichiers HEX. L'erreur venait du fait que le checksum se
-         calculait avec la valeur absolue du LoadOffset, au lieu d'utiliser
-         les caracteres composant le LoadOffset. Exemple : si LoadOffset =
-         0103, il faut additionner 01h+03h=4h au Checksum et non pas 0103h = 
-         259 en decimal.
-       * Deplace la fonction enleve_espaces de main_console vers mainemu
-         car elle est commune aux deux interfaces graphiques.
-       * Modifie la fonction majuscules pour qu'elle puisse convertir les
-         lettres de minuscule a majuscule meme si la chaine contient des
-         chiffres ou autres signes de ponctuation.
-       * Modifie la declaration des fonctions dans tous les fichiers .hpp:
-         enleve le nom des parametres car c'etait inutile.
-       * Stocke le nom des registres dans un fichier registres8051.hpp.
-         Ainsi, si on veut emuler un autre type de processeur, il suffira
-         de se creer un autre fichier registres8052xxx.hpp par exemple.
-       * Implemente l'affichage en francais ou en anglais dependant de
-         l'option passee sur la ligne de commande. L'interface est beaucoup
-         plus lisible de cette facon. Par defaut, l'affichage est en anglais.
-
-1999-03-21  Hugo Villeneuve <villen01@gel.ulaval.ca>
-       * Ajoute deux parametres qu'on peut passer par la ligne de commande:
-           /?  affiche les options disponibles sur la ligne de commande.
-           -f  force l'affichage en francais (pas encore implemente!!!)
-       * Ajoute le controle d'erreur pour le chargement d'un fichier HEX.
-         Les differentes erreurs sont controlees ( checksum, rectype,
-         fin de fichier, etc.).
-       * Modifie la fonction unasm pour qu'elle accepte 0,1 ou 2 parametres.
-         U (adresse) (nombre d'instructions)
-         Si adresse et nombre d'instructions non-specifies:
-           Adresse = PC et Nombre d'Instructions = 16
-         Si adresse specifie et nombre d'instructions non-specifie:
-           Adresse = adresse specifiee et Nombre d'Instructions = 16
-         Si adresse specifie et nombre d'instructions specifie:
-           Adresse = adresse specifiee et Nombre d'Instructions = nb specifie
-         A noter: on peut specifier une adresse comme etant un nombre
-         hexadecimal, ou tout simplement en entrant "PC" ou "pc".
-
-               Jonathan St-Andre       <standr00@gel.ulaval.ca
-
-       * Fait le menage dans la fonction main
-       * Modifie Makefile.console et Makefile.gtk
-       * Rearrangement des fichiers pour limiter les impacts sur
-       tout le projet lors de modifications dans une partie et
-       pour accelerer la compilation (en modules).
-       * Creation de mainconsole.hpp + mainconsole.cpp
-       * Creation de maingtk.cpp + maingtk.hpp
-       * Creation de mainemu.cpp + mainemu.hpp
-       * Elimine fonctions.cpp.
-       * Elimination du 2e parametre a unasm. Desassemble
-       de nouveau 16 instructions.
-       * Ajustement du menu pour qu'il rentre dans la largeur
-       d'un terminal 80x25.
-       
-               Jimmy Ringuette <ringue00@gel.ulaval.ca>
-
-       * Ajout des interruptions du port serie.
-       * Ajout du timer 2 (8052).
-
-1999-03-20  Hugo Villeneuve <villen01@gel.ulaval.ca>
-       * Separe le fichier main.cpp en deux: main.cpp et fonctions.cpp.
-         fonctions.cpp contient les fonctions necessaires a main.cpp.
-       * Ajoute un fichier exceptions.hpp qui permet de gerer les erreurs.
-       * Modifie le Makefile en consequence.
-       * On peut maintenant entrer les adresses < a quatre caracteres :
-         ex: adresse 0000h = 0 ou 00 ou 000 ou 0000.
-       * Enleve le include <stdlib.h>
-       * Remplace toutes les commandes printf du main par cout.
-       * Modifie l'apparence du menu.
-       * Le programme est maintenant plus robuste en ce qui concerne les
-         erreurs de syntaxe, les adresses invalides, etc (a tester...).
-       * Modifier l'operation et la syntaxe de certaines commandes
-         S (set register) devient MR (modify register) car set veut
-         plutot dire "mettre a 1", et on pourra aussi implementer
-         MM (modify Memory).
-         R devient DR (display Register), pour suivre la logique de
-         DP, DM et DI.
-       * Ajoute une commande Execute Memory: EM addr n
-       * La gestion des chaines de caracteres se fait maintenant
-         uniquement avec des variables de type STRING, selon le C++.
-       * Enleve variables i,j,k et inputcars dans le main.
-       * Modifie la fonction RESET pour quelle n'affiche pas les
-         registres au demarrage... ca faisait pas beau! Ajoute
-         cependant un message pour dire que le up est resette.
-       * Pour changer un registre, on doit entrer PC (et non p) ainsi
-         que SP (et non seulement s).
-       * Ajoute une fonction qui convertit une chaine de caracteres
-         en majuscules.
-
-1999-03-19  Jonathan St-Andre  <standr00@gel.ulaval.ca>
-       * Fonction reset51() ajoutee dans cpu8051.cpp, reset() ajoutee
-       dans main.cpp.
-       * Commande "Z" fait un reset du processeur sur la console et le
-       bouton Reset fonctionne dans le GUI.
-
-               Jimmy Ringuette <ringue00@gel.ulaval.ca>
-
-       * Les interruptions sont maintenant implementees. check_hardware() a
-       ete supprimee et Do_timers() est appelee directement de exec8051().
-
-1999-03-18  Hugo Villeneuve <villen01@gel.ulaval.ca>
-       * Modifie l'entree des commandes pour gerer un peu plus les erreurs
-         de syntaxe (je n'ai pas fini, il y a encore de la job a faire pour
-         mettre ca error proof).
-       * Simplifie l'entree des parametres pour chacune des fonctions.
-       * Re-modifie l'instruction trace pour avoir seulement deux modes:
-         trace a adresse et trace 1 instruction. Cela simplifie l'entree de
-         la commande (on n'a pas a faire TA, qui n'est pas une commande
-         standard dans les emulateurs). Si on veut faire tracer pour plusieurs
-         instructions, alors il suffira d'implementer la commande
-         EXECUTE Nombre_instructions, ce qui est beaucoup plus logique et 
-         c'est ce qu'on retrouve dans la plupart des emulateurs.
-       * Ajoute la description des commandes en francais (loi 101).
-
-1999-03-18  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Le bouton Trace dans la version Gtk+ fonctionne. On peut tracer
-       et les 3 fenetres(registres, memoire, programme) se mettent a jour.
-       * Ajout de 2 nouvelles fonctions trace : "tracenb()" et "traceat()"
-       Qui, respectivement, prenent un nombre d'instruction a executer ou
-       une adresse ou commencer l'execution. La fonction trace() a ete
-       resimplifiee.
-       * Dans les instructions RET, RETI, LCALL, PUSH et POP la pile prend
-       la iram seulement pour les adresses sous 0x80, la data RAM est
-       utilisee autrement. Avant, les SFR se faisaient ecraser!
-       * Modes d'addressage addr16, reladdr, #data16 modifies!
-       En tenant compte de ce que Hugo avait fait remarquer ce matin :
-       ex.: si PC++ apparait 2 fois sur une ligne, les 2 fois il repartira
-       de la meme valeur de PC et suite a cette ligne, on se trouve avec
-       un PC incremente 1 fois au lieu de 2.
-       * Menu accepte maj/minuscules
-       * Corrige bug dans "setreg", les registres peuvent vraiment
-       etre donnes en maj/minuscules maintenant.
-
-1999-03-17  Hugo Villeneuve    <villen01@gel.ulaval.ca
-        * Corrige les instructions LJMP et LCALL qui ne calculaient pas la
-          bonne adresse pour le PC. Toutes les autres instructions de
-          branchement sont probablement a revoir pour le meme probleme. Le
-          probleme etait cause par la syntaxe dans le fichier instructions.hpp
-          (lignes ou on retrouve addr16 = (pgm_mem[PC++] << 8)+pgm_mem[PC++] a
-          remplacer par addr16 = (pgm_mem[PC+1] << 8) + pgm_mem[PC+2] )
-       * Modifie la commande TRACE pour qu'on puisse lui passer une adresse
-          de depart comme parametre (main.cpp lignes 406-409) et modifie
-          en consequence ascii2hex pour qu'il ignore les espaces avant
-          l'adresse. (main.cpp ligne 133).
-
-1999-03-14  Pascal Fecteau <fectea00@gel.ulaval.ca>
-       * Correction de bugs relatifs a la compilation sur VC5.
-       Dont ajout de #include <string.h>.
-
-1999-03-13  Jimmy Ringuette <ringue00@gel.ulaval.ca>
-       * Ajout des timers dans cpu8051.cpp. Il faudrait tester a fond.
-
-1999-03-12  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Je crois qu'il sera plus interessant si on garde le memory
-       dump normal dans une fenetre exterieur et dont on pourra en ouvrir
-       plusieurs pour monitorer differents endroits de la memoire, c'est
-       pourquoi je n'ai place que "Internal RAM" comme memory dump dans
-       la fenetre principale.
-       * Au demarrage, effectue un premier memory dump dans la fenetre
-       "Internal RAM", un unasm dans "Program" et un show register dans
-       "Registers".
-       * Bouton Quit, menus "File -> Quit" et "Help -> About" reagissent.
-       * Comporte maintenant 2 Makefile : Makefile.console(fonctionne sur
-       toutes les plateformes) et Makefile.gtk(teste seulement sous Linux).
-       * DEBUT d'interface graphique Gtk+ (ne fait qu'afficher une fenetre
-       avec un layout tres simple), presentement je cours apres des sources
-       de documentations.(le manuel n'est pas encore complet)
-
-1999-03-09  Jimmy Ringuette <ringue00@gel.ulaval.ca>
-        * Regle le bug avec mul (probleme avec les bits 15-8 du resultat
-       ne se ramenaient pas dans les bits 7-0 du registre B)
-        * La conversion chaine->hexadecimal accepte les minuscules
-        * Il n'est plus obligatoire d'ecrire les 4 caracteres lorsqu'il faut
-       entrer une valeur hexadecimale.
-
-1999-03-05  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Corrige un warning de compilation sous Solaris.
-
-1999-03-04  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Ca execute! (presque) 
-       * Phase de corrections des bugs dans les instructions, une premiere
-       implementation est faite pour toutes les instructions. 
-       * Ajout fonction "trace" et "dump internal memory" 
-       * Les modes d'adressage sont pratiquement termines dans
-       les instructions. 
-       * Certaines instructions ont un debut d'implementation. 
-       * Desassembleur, bit addressable segment 00-7F -> 20.0-2F.7 
-
-1999-03-03  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Ajout automatique de certaines lignes de codes concernant
-       l'adressage dans les fonctions d'instructions tres brouillon 
-       * Ajout de stub pour write_mem et read_mem, modifs dans exec8051 
-       * Ajout de la fonction showregister() et de la commande 'r'. 
-       * Correction d'une erreur iram_mem doit etre unsigned char et non int
-       * Note : Il y a des references a certaines parties du 8052 mais
-       elles ne seront pas implementees. Ce n'est qu'a titre d'informations.
-       * Ajout de #define pour faire correspondre les registres SFR avec
-       leur adresse dans la iram. 
-       * Renomme instructions.cpp a instructions.hpp et ajout du tableau
-       de pointeurs sur les fonctions 
-       * Ajout de la ram interne 00-FF et valeurs initiale au reset
-       dans cpu8051.cpp avec le registre : unsigned int PC. 
-       * Ajout de cpu8051.cpp contenant exec8051() 
-
-1999-03-02  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Ajout de remarques dans le source 
-       * Il faudrait maintenant tester avec plusieurs programmes pour
-       reperer les bugs. 
-       * Le desassembleur reconnait maintenant les registres du SFR
-       (ex.: 88H est remplace par TCON, F0 par B, etc...) 
-       * Changement au desassembleur (instructions peuvent avoir jusqu'a 3
-       arguments ex.: CJNE R0,#data,reladdr) 
-       * La vrai instruction CJNE comporte 3 arguments il faut changer 
-       radicalement le desassembleur 
-
-1999-03-01  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Probleme dans opcodes.lst au niveau de l'instruction CJNE (mauvaise
-        definition) 
-       * Tous les types d'adressages semblent fonctionner 
-       * Le desassembleur peut lire les arguments et les afficher 
-       (ex.: MOV A,#data peut devenir plus concret MOV A,#20) 
-       * Desassembleur (instructions ont 2 arguments : instleftarg et 
-       instrightarg) 
-
-1999-02-28  Jonathan St-Andre <standr00@gel.ulaval.ca>
-       * Charge un fichier .hex donne en parametre (format Intel Hexadecimal 
-       produit par ASM51) 
-       * Effectue le dump program memory et dump data memory 
-       * On peut quitter (YEAH!) 
-       * Affiche le menu 
-       * Creation de opcodes.lst et script Perl pour l'interpreter 
-       * Debut
index c8cfbc0..850b3e5 100644 (file)
@@ -1,5 +1,7 @@
 ## Makefile.am -- Process this file with automake to produce Makefile.in
 
+.PHONY: changelog
+
 AUTOMAKE_OPTIONS = gnu
 
 SUBDIRS = src doc
@@ -17,8 +19,18 @@ CLEANFILES = *~
 DISTCLEANFILES = .deps/*.P
 
 MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config-h.in \
-                       stamp-h.in $(ac_aux_dir)/depcomp \
+                       stamp-h.in ChangeLog $(ac_aux_dir)/depcomp \
                        $(ac_aux_dir)/install-sh $(ac_aux_dir)/missing \
                        $(ac_aux_dir)/mkinstalldirs $(ac_aux_dir)/config.guess \
                        $(ac_aux_dir)/config.sub $(ac_aux_dir)/ltmain.sh \
                        $(ac_aux_dir)/compile
+
+changelog:
+       @if test -d $(srcdir)/.git; then          \
+         $(srcdir)/build-aux/gitlog-to-changelog \
+           --format='%s%n%n%b%n'                 \
+           --no-cluster                          \
+           --strip-tab                           \
+           --strip-cherry-pick                   \
+           >ChangeLog;                           \
+       fi
index cd7a53c..92ea960 100755 (executable)
@@ -8,6 +8,9 @@ TEST_FILE=src/cpu8051.c
 
 ACLOCAL_FLAGS="${ACLOCAL_FLAGS} -I config"
 
+# ChangeLog is generated from git log output using "make changelog"
+touch ChangeLog
+
 srcdir=`dirname $0`
 test -z "$srcdir" && srcdir=.
 
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
new file mode 100755 (executable)
index 0000000..7bab70d
--- /dev/null
@@ -0,0 +1,432 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2014-01-15 03:30'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try '$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format.  If present, any ARGS
+are passed to "git log".  To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+   --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+                  makes a change to SHA1's commit log text or metadata.
+   --append-dot append a dot to the first line of each commit message if
+                  there is no other punctuation or blank at the end.
+   --no-cluster never cluster commit messages under the same date/author
+                  header; the default is to cluster adjacent commit messages
+                  if their headers are the same and neither commit message
+                  contains multiple paragraphs.
+   --srcdir=DIR the root of the source tree, from which the .git/
+                  directory can be derived.
+   --since=DATE convert only the logs since DATE;
+                  the default is to convert all log entries.
+   --format=FMT set format string for commit subject and body;
+                  see 'man git-log' for the list of format metacharacters;
+                  the default is '%s%n%b%n'
+   --strip-tab  remove one additional leading TAB from commit message lines.
+   --strip-cherry-pick  remove data inserted by "git cherry-pick";
+                  this includes the "cherry picked from commit ..." line,
+                  and the possible final "Conflicts:" paragraph.
+   --help       display this help and exit
+   --version    output version information and exit
+
+EXAMPLE:
+
+  $ME --since=2008-01-01 > ChangeLog
+  $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+SPECIAL SYNTAX:
+
+The following types of strings are interpreted specially when they appear
+at the beginning of a log message line.  They are not copied to the output.
+
+  Copyright-paperwork-exempt: Yes
+    Append the "(tiny change)" notation to the usual "date name email"
+    ChangeLog header to mark a change that does not require a copyright
+    assignment.
+  Co-authored-by: Joe User <user\@example.com>
+    List the specified name and email address on a second
+    ChangeLog header, denoting a co-author.
+  Signed-off-by: Joe User <user\@example.com>
+    These lines are simply elided.
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code.  Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul.  Note the escaped "@":
+s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+  my ($s) = @_;
+  if ($s =~ m![^\w+/.,-]!)
+    {
+      # Convert each single quote to '\''
+      $s =~ s/\'/\'\\\'\'/g;
+      # Then single quote the string.
+      $s = "'$s'";
+    }
+  return $s;
+}
+
+sub quoted_cmd(@)
+{
+  return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+  my ($f) = @_;
+
+  open F, '<', $f
+    or die "$ME: $f: failed to open for reading: $!\n";
+
+  my $fail;
+  my $h = {};
+  my $in_code = 0;
+  my $sha;
+  while (defined (my $line = <F>))
+    {
+      $line =~ /^\#/
+        and next;
+      chomp $line;
+      $line eq ''
+        and $in_code = 0, next;
+
+      if (!$in_code)
+        {
+          $line =~ /^([0-9a-fA-F]{40})$/
+            or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+              $fail = 1, next;
+          $sha = lc $1;
+          $in_code = 1;
+          exists $h->{$sha}
+            and (warn "$ME: $f:$.: duplicate SHA1\n"),
+              $fail = 1, next;
+        }
+      else
+        {
+          $h->{$sha} ||= '';
+          $h->{$sha} .= "$line\n";
+        }
+    }
+  close F;
+
+  $fail
+    and exit 1;
+
+  return $h;
+}
+
+# git_dir_option $SRCDIR
+#
+# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
+# is undef).  Return as a list (0 or 1 element).
+sub git_dir_option($)
+{
+  my ($srcdir) = @_;
+  my @res = ();
+  if (defined $srcdir)
+    {
+      my $qdir = shell_quote $srcdir;
+      my $cmd = "cd $qdir && git rev-parse --show-toplevel";
+      my $qcmd = shell_quote $cmd;
+      my $git_dir = qx($cmd);
+      defined $git_dir
+        or die "$ME: cannot run $qcmd: $!\n";
+      $? == 0
+        or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
+      chomp $git_dir;
+      push @res, "--git-dir=$git_dir/.git";
+    }
+  @res;
+}
+
+{
+  my $since_date;
+  my $format_string = '%s%n%b%n';
+  my $amend_file;
+  my $append_dot = 0;
+  my $cluster = 1;
+  my $strip_tab = 0;
+  my $strip_cherry_pick = 0;
+  my $srcdir;
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     'since=s' => \$since_date,
+     'format=s' => \$format_string,
+     'amend=s' => \$amend_file,
+     'append-dot' => \$append_dot,
+     'cluster!' => \$cluster,
+     'strip-tab' => \$strip_tab,
+     'strip-cherry-pick' => \$strip_cherry_pick,
+     'srcdir=s' => \$srcdir,
+    ) or usage 1;
+
+  defined $since_date
+    and unshift @ARGV, "--since=$since_date";
+
+  # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+  # that makes a correction in the log or attribution of that commit.
+  my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+  my @cmd = ('git',
+             git_dir_option $srcdir,
+             qw(log --log-size),
+             '--pretty=format:%H:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
+  open PIPE, '-|', @cmd
+    or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
+            . "(Is your Git too old?  Version 1.5.1 or later is required.)\n");
+
+  my $prev_multi_paragraph;
+  my $prev_date_line = '';
+  my @prev_coauthors = ();
+  while (1)
+    {
+      defined (my $in = <PIPE>)
+        or last;
+      $in =~ /^log size (\d+)$/
+        or die "$ME:$.: Invalid line (expected log size):\n$in";
+      my $log_nbytes = $1;
+
+      my $log;
+      my $n_read = read PIPE, $log, $log_nbytes;
+      $n_read == $log_nbytes
+        or die "$ME:$.: unexpected EOF\n";
+
+      # Extract leading hash.
+      my ($sha, $rest) = split ':', $log, 2;
+      defined $sha
+        or die "$ME:$.: malformed log entry\n";
+      $sha =~ /^[0-9a-fA-F]{40}$/
+        or die "$ME:$.: invalid SHA1: $sha\n";
+
+      # If this commit's log requires any transformation, do it now.
+      my $code = $amend_code->{$sha};
+      if (defined $code)
+        {
+          eval 'use Safe';
+          my $s = new Safe;
+          # Put the unpreprocessed entry into "$_".
+          $_ = $rest;
+
+          # Let $code operate on it, safely.
+          my $r = $s->reval("$code")
+            or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
+
+          # Note that we've used this entry.
+          delete $amend_code->{$sha};
+
+          # Update $rest upon success.
+          $rest = $_;
+        }
+
+      # Remove lines inserted by "git cherry-pick".
+      if ($strip_cherry_pick)
+        {
+          $rest =~ s/^\s*Conflicts:\n.*//sm;
+          $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
+        }
+
+      my @line = split "\n", $rest;
+      my $author_line = shift @line;
+      defined $author_line
+        or die "$ME:$.: unexpected EOF\n";
+      $author_line =~ /^(\d+)  (.*>)$/
+        or die "$ME:$.: Invalid line "
+          . "(expected date/author/email):\n$author_line\n";
+
+      # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
+      # `(tiny change)' annotation.
+      my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
+                  ? '  (tiny change)' : '');
+
+      my $date_line = sprintf "%s  %s$tiny\n",
+        strftime ("%F", localtime ($1)), $2;
+
+      my @coauthors = grep /^Co-authored-by:.*$/, @line;
+      # Omit meta-data lines we've already interpreted.
+      @line = grep !/^(?:Signed-off-by:[ ].*>$
+                       |Co-authored-by:[ ]
+                       |Copyright-paperwork-exempt:[ ]
+                       )/x, @line;
+
+      # Remove leading and trailing blank lines.
+      if (@line)
+        {
+          while ($line[0] =~ /^\s*$/) { shift @line; }
+          while ($line[$#line] =~ /^\s*$/) { pop @line; }
+        }
+
+      # Record whether there are two or more paragraphs.
+      my $multi_paragraph = grep /^\s*$/, @line;
+
+      # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
+      # standard multi-author ChangeLog format.
+      for (@coauthors)
+        {
+          s/^Co-authored-by:\s*/\t    /;
+          s/\s*</  </;
+
+          /<.*?@.*\..*>/
+            or warn "$ME: warning: missing email address for "
+              . substr ($_, 5) . "\n";
+        }
+
+      # If clustering of commit messages has been disabled, if this header
+      # would be different from the previous date/name/email/coauthors header,
+      # or if this or the previous entry consists of two or more paragraphs,
+      # then print the header.
+      if ( ! $cluster
+          || $date_line ne $prev_date_line
+          || "@coauthors" ne "@prev_coauthors"
+          || $multi_paragraph
+          || $prev_multi_paragraph)
+        {
+          $prev_date_line eq ''
+            or print "\n";
+          print $date_line;
+          @coauthors
+            and print join ("\n", @coauthors), "\n";
+        }
+      $prev_date_line = $date_line;
+      @prev_coauthors = @coauthors;
+      $prev_multi_paragraph = $multi_paragraph;
+
+      # If there were any lines
+      if (@line == 0)
+        {
+          warn "$ME: warning: empty commit message:\n  $date_line\n";
+        }
+      else
+        {
+          if ($append_dot)
+            {
+              # If the first line of the message has enough room, then
+              if (length $line[0] < 72)
+                {
+                  # append a dot if there is no other punctuation or blank
+                  # at the end.
+                  $line[0] =~ /[[:punct:]\s]$/
+                    or $line[0] .= '.';
+                }
+            }
+
+          # Remove one additional leading TAB from each line.
+          $strip_tab
+            and map { s/^\t// } @line;
+
+          # Prefix each non-empty line with a TAB.
+          @line = map { length $_ ? "\t$_" : '' } @line;
+
+          print "\n", join ("\n", @line), "\n";
+        }
+
+      defined ($in = <PIPE>)
+        or last;
+      $in ne "\n"
+        and die "$ME:$.: unexpected line:\n$in";
+    }
+
+  close PIPE
+    or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+  # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+  # Complain about any unused entry in the --amend=F specified file.
+  my $fail = 0;
+  foreach my $sha (keys %$amend_code)
+    {
+      warn "$ME:$amend_file: unused entry: $sha\n";
+      $fail = 1;
+    }
+
+  exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End: