Lo de ensamblador generico es porque no programo 6502, sino microcontroladores PIC, entonces me acostumbre a pensar en generico ya que todos los procesadores de 8 bits tienen mas o menos las mismas instrucciones basicas. Por ejemplo las comparaciones las pienso como si fueran IF, teniendo en cuenta que en asm todo se reduce a comparar igualdad, mayor o menor, o cero, entonces pienso la comparacion que tengo que hacer y luego veo como implementarlo en ese procesador. Se podria decir que lo compilo mentalmente, aunque no me sale de memoria el reemplazo de cada comparacion, siempre tengo que consultar el manual o copiar alguna otra similar que haya hecho antes, por eso aunque con este metodo puedo programar en lo que sea, me lleva mas tiempo hacer un programa. Sin embargo, lo bueno es que la documentacion queda muy bien porque lo que documento es lo que quise hacer en mas alto nivel, no el resultado en asm, es decir que suelo documentar cada bloque de 2 o 3 instrucciones. Pero cada cual tendra su metodo para programar, yo empece con 6502 en los 80s, y a principios de los 90s empece a programar PICs en asm, cosa que sigo haciendo, hace poco porte mi sintetizador de voz por soft para C64 a ordenadores con Z80 gracias a pensar en bloques logicos en lugar de en instrucciones, asi cada bloque seguia teniendo el mismo comentario en 6502 que en Z80, pero con distintas instrucciones y registros usados.
Un ejemplo de esto lo puse en el codigo que aparece en este mensaje:
http://retroinvaders.com/commodoremania/foro/index.php/topic,1080.msg12921.html#msg12921En los comentarios se puede ver que comento todo, no dejo bloques muy largos sin comentar, pero que tampoco me pongo a detallar tanto, porque a veces el detalle aunque explica la razon de cada linea, oscurece lo que se pretende hacer. Hay veces en que se necesario el detalle linea por linea, por ejemplo en una rutina donde se hacen cosas con tiempos muy criticos y es necesario entender los tiempos de ejecucion, y otras donde basta con explicar de forma general lo que hace ese bloque, por ejemplo "copia tal bloque de memoria a tal direccion", "borra la pantalla", "inicializa y borra la pantalla de alta resolucion", etc.
En ese codigo de ejemplo use codigo automodificable para simplificar las cosas y ahorrar tiempo y memoria, como tenia muchos bucles donde se repetia mas o menos lo mismo y queria que tuviera un tiempo de ejecucion lo mas parejo posible, cargaba los valores directamente en el codigo, por ejemplo el numero de repeticiones de un bucle. A veces tambien "pokeaba" desde el codigo una instruccion de desplazamiento a la derecha o a la izquierda segun lo que necesitaba en ese momento, antes de ejecutar ese codigo modificado, y asi evitaba comparaciones y saltos que me hacian perder ciclos valiosos. Por supuesto que si no se hace bien puede ser desastroso, pero es una herramienta a tener en cuenta.