• Abro este post para ir tirando la data conseguible de assembler.
    En su momento (88-89-90) absolutamente todos (pero todos) mis intentos de internarme en este tema fracasaron.
    Cada vez que compraba un cassete de assembler y asociados, jamas lo pude cargar, cuando lo lograba no entendia ni jota, no habia manuales de como usar los programas, no habia nada.
    Ni hablar de conseguir documentacion/libros, ya no "assembler para zx81", ni siquiera "assembler para z80".
    Gracias a internet, a los escaneos varios y a que siempre se me quedo la espina del cm clavada en la garganta, volvi a insistir con el tema, y aca voy a ir poniendo mis avances/retrocesos/preguntas/respuestas, espero que les sirva si hay algun interesado.

    Les cuento mis avances con el compilador MCODER, en cuanto llegue a casa les posteo un par de .p con los ejemplos.

    Recordemos cual es la idea de usar un compilador:
    El basic es un lenguaje "interpretado", es decir que cuando hacemos un programa en basic, la computadora linea por linea lee el codigo que escribimos, lo "traduce" a Codigo de Maquina (En lo sucesivo CM) y recien ahi lo ejecuta. Esto implica que cuanto mas complejo el programa, por lo general es mas lento, al punto de estar dias programando por ejemplo, un juego,  para que al ejecutarlo apretas la tecla 5 y la navecita tarde 10 minutos en responder (por ahi es medio exagerado pero se hace relento de verdad)
    La otra opcion es hacerlo integramente en CM pero.... no tengo idea de cm! yo quiero hacer que la nave se mueva lo saber la posicion de los registros, que si ld, que puse hd, que me equivoque en un numerito y se colgo absolutamente todo, etc etc etc...
    El intermedio (segun mi amigo elecronico lo mejor es hacerlo integro en CM! ) es usar un compilador. Esto es: hacer el programa en basic, depurarlo, probarlo, y despues de eso con un compilador pasar toooodo ese basic a CM.
    Este fin de semana estuve jugando con eso y lo pude hacer (despues de... 20 años! ) con el MCODER.
    Se baja de internet, en casi cualquiera de los sitios que recopilan .p's. Yo use el MCODER II lo no quiere decir que otros no funcionen, pero consegui un txt con el manualcito, lo que fue fundamental.

    Caracteristicas:
    1) Se carga despues de la ramtop, lo que implica que por ejemplo si yo tengo un programa previamente grabado en BASIC, primero cargo el mcoder, se autoejecuta, se carga y chequea a si mismo luego de la ramtop, y se hace un "NEW", a no asustarse que es a proposito, luego de esto cargo mi programa en basic, y a traves del "rand usr 17300" uso el compilador.

    cuando termina de compilar, si no hay errores, me tira la direccion donde finaliza el programa, con lo cual (lo que yo hice) fue imprimir un listado con un
    FOR I=20500 TO N
    LPRINT PEEK
    NEXT I

    donde: 20500 es la direccion donde sabemos que esta nuestro programa compilado. N es la direccion donde termina el programa (la que me tiro el MCDER). Con esto me quedo con una "copia" del programa en assembler para luego poder copiarlo sin necesidad del mcoder y grabarlo como programa independiente.

    Mas alla de esto, puedo ejecutar el programa con un LET L=USR 20500 y apreciar la diferencia con el mismo programa pero en basic. Recordemos que nuestro listado original sigue ahi, con un RUN podremos usarlo en modo normal, salvo que pongamos un USR 20500 en una linea del mismo.

    Recordemos que para recuperar el control de la maquina, necesitamos poner en algun lado un "break", yo en mi ejemplo testeo que si se presione la tecla S de Salir, el programa llama a la rutina en CM de stop (cuando suba los .p corrijo el post para poner la direccion exacta del stop). Se llama a la rutina de CM porque el MCODER interpreta el STOP (shift A) como una parada del proceso de compilar, con lo cual no la tendriamos que tener en nuestro programa en BASIC salvo que querramos que el programa se detenga ahi.
    Si les sirve, despues hago una traduccion del manual y la subo.

    Proximamente voy a ir poniendo mis avances con el ZXAS (no consegui ningun manual todavia, si alguno tiene que avise) ya es un editor un tanto complejo por lo que vi, y no tengo idea de como usarlo todavia.

    Espero que les sirva. Saludos!
     

  • Gente: Les pego la dire de un libro en español de assembler para zx81, tiene hasta un pequeño pacman implementado y lo que es mejor: explicado.
    para los que no lo conocian (como yo)

    http://microhobby.speccy.cz/zx81/cm/capitulos.htm

    saludos!
     

  • Manual (en ingles) del MCODERII
    Parte I

    ZX81 MCODER II

    MCODER is the first true compiler for use with the ZX81

    It has been carefully written to occupy as litte space as possible
    (just under 4K) in order to leave maximum space for your programs.

    Although MCODER is a very sophisticated and versatile tool, do not
    expect miracles, you will have to become familar with its method of
    operation if you are to use it to its best advantage.

    How do I load MCODER?

    MCODER must always be present in the ZX81 before you try and enter any
    code. It is loaded from tape using LOAD" ".  MCODER contains its own
    self checking routine to ensure that it loads correctly, if for any
    reason the program corrupts, an error message will be displayed on
    screen and you should reload.

    Once loaded you must remember that MCODER uses line numbers 1-3
    inclusive and cannot be deleted.

    How do I use MCODER?

    Using MCODER is really a very simple operation. First of all, enter
    the BASIC program you wish to compile. It is essential to run and
    check the program thoroughly before it is compiled and there is no
    break facility in the compiled code. Before writing a program it is
    strongly advised that you carefully read through the list of commands
    which MCODER will compile and ensure that your BASIC program consists
    only of these commands.

    Once you are satisfied with the BASIC program you can compile by using
    the command LET L = USR 17300. The BASIC statements will then scroll up
    the screen as they are compiled.
    If MCODER finds a command or statement it cannot compile then it will
    return to BASIC with an inverse S at or near the offending command.

    Possible errors include:


    1. Using illegal variable names.

    2. GOTO 'variable' or GOSUB 'variable' which are not allowed

    3. Illegal statement such as SAVE or DIM A$(10)

    If an error is reported then you should correct it and recompile

    At the end of a successful compilation you will be shown 3 pieces of
    information -
    i) the location of the end MCODER code,
    ii) the command necessary to run your compiled code,
    iii) a query as to whether Yw wish to
    run the compiled code immediately (RUN? - reply Y or N to this prompt).

    Can I compile basic programs I already have on tape?

    YES- simply load MCODER first and then load the program you wish to
    compile. Using LET L = USR 32462 after loading your own program will
    automatically push MCODER into position. You can now continue as
    shown above.

    It is important to stress that you will probably have to make
    considerable changes in your BASIC program as it is unlikely to have
    been written to suit MCODER

    Which Commands will MCODER compile?

    Note the variable names may contain only A-Z and 0-9. Arithmetic is
    restricted to the four standard operations + - * /.

    AND            Boolean AND. Allowed only in an IF statement
    ABS            As BASIC
    CHR$            As BASIC
    CLS            As BASIC
    CLEAR            As BASIC
    CODE            As BASIC
    COPY            As BASIC
    DIM A(V)      Only one dimensional arrays are availabe in MCODER
               and there must be at least 2*V bytes spare space at
               run-time. No runtime array bound checking is done so
               make sure it works under normal BASIC. If you
               redefine an array a new version of it is made but the
               old one is not deleted. This means that repeated
               allocation can eventually fill the machine and give
               an error 4 (out of memory) either when allocating
               an array or a string. Array and string space stretches
               from STKEND to 256 bytes below RAMTOP. All arrays,
               strings and variables are erased when you reenter an
               MCODER program and all the space is available again.
               There are no string arrays.
    FAST            As BASIC except that MCOOER does not return to SLOW
    FOR X = V TO U      - X increments in steps of 1 from V to U. NEXT X Ends
               the loop. Note that (U-V) must be less than 32767.
    GOSUB N            Calls line N as a subroutine. If line N does not exist
               then it goes to the next line after N. Note that N
               must be a positive integer constant.
    GOTO N            Jumps unconditionally to line N. Otherwise as for GOSUB.
    IF V op U THEN- where op is any of AND, OR,, <>, =, =<, >= or >,<.
               Note that V and U must not differ by more tan 32767
               For string operations AND and OR are not applicable.
    INKEY$          As BASIC
    INPUT a or A$      As BASIC. For numbers a leading negative sign is
               allowed. For strings the maximum length is 31 characters.
               No graphics mode.
    INT            Included to facilitate test under BASIC.
    LEN A$            As BASIC exept that A$ cannot be sliced.
    LET            As BASIC
    LPRINT            As BASIC
    NEW            As BASIC
    NEXT            See FOR - NEXT
    OR            Boolean OR only available in IF statements
    PAUSE V            Causes the program to wait for V/50 secs if in SLOW
               mode. It does not go from FAST to SLOW mode as in
               Sinclair Basic. There is no flicker as PAUSE starts
               and finishes. V must be positive and less than 32768.
               Pressing SHIFT+EDIT returns to BASIC, any other key
               causes the next statement to be executed.
    PEEK            As BASIC
    PLOT            As BASIC
    POKE            As BASIC
    PRINT            As BASIC
    RAND            As BASIC

    Continua...      
     

  • REM            Ignored as usual except that "REM?" looks to see if the
               SHIFT+EDIT keys are pressed and if so returns to BASIC
               with an error D. This is usefull to escape from
               infinite loops.
    RETURN            Returns from a subroutine started by a GOSUB. Make sure
               that your GOSUBS and RETURNS match as no check is made.
    RND            Returns a random integer between 0 and 32767 (NOT the
               same as BASIC) To obtain the same effect under BASIC
               use USR      16550.
    SCROLL            As BASIC
    SGN            As BASIC
    SLOW            As BASIC
    SQR            Integer square root
    STOP            If MCODER finds a STOP statement compilation ceases
               there. If you wish there to be a STOP in the middle of
               your program then the command LET L=USR 3292 will give
               an error 9 and stop.
    Strings            By default strings have a maximum length of 32
               characters. If you exceed the maximum string length
               then you will write into whatever follows (either
               another string or an array) However see "Further
               Features". String slicing may not take the form
               A$( TO M) or A$(M TO ) There are no string arrays.
    UNPLOT            As BASIC
    USR            As BASIC

    Improved Scrolling of output

    Under Sinclair BASIC when the output reaches the bottom of the screen
    an error 5 is reported. Under MCODER when the output reaches this point
    an inverse ? is shown at the bottom left of the screen. Pressing CONT
    causes a CLS and the program continues (holding your finger on CONT
    causes this process to be repeated indefinitely) Pressing SHIFT+EDIT
    stops the program, key D (SLOW) causes the screen to scroll at a
    maximum of 1 line per second, pressing Z (COPY) causes a hard copy to
    be produced on the ZX printer. Any other key than these causes the
    screen to scroll upwards while the key is depressed and will stop if no
    key is pressed. The choice may be varied each time that ? is displayed.

    POINTS TO REMEMBER

    When running a compiled proyram MCODER must always be present as it
    contains the run time system and arithmetic routines.

    You must not use SINCLAIR'S scroll command if you intend to mix BASIC
    and compiled code as this destroys the regularity of the display file
    which MCODER needs.

    Further features of MCODER

    You may choose where to put the code generated by MCODER if you enter
    by RAND USR 17287 MCODER will prompt "CODE" to which you should reply
    with the positive integer number address to which the code should be
    compiled. To find out how long the code will be compile to 0.

    There are several other useful locations. In you program POKE 16417,N
    causes the screen to scroll without asking "?" N times. At the end of
    this time location 16417 will again contain sero.

    Locations (16507 and 1650B) contain the present default string length
    (usually 32) which may be POKEd in your program to change the default.
    This value is reset as your program starts

    Locations (16536 and 16537) are used to prevent lines at the top of the
    screen from scrolling. The value should be n*33 where n is the number
    of lines to be left alone.

    Location 16535 is the location which causes the compiler to auto scroll
    during compilation. If this is poked with zero then the compiler will
    wait as described in the section on scrolling above. Pressing D causes
    the generated code to be displayed.
    You may wish to have several sections of compilod code. This is
    achieved by the following procedure:-

    1.      Compile the first section. The entry point will be given (X )
         Now POKE X-6,1 to convert line 2 into line 1.
    2.      Compile section 2. A new entry point will be given (Y)
         RAND USR X still works to access the first section and
         RAND USR Y accesses the second. This may be repeated as often
         as space allows. (NOTE to users with machines greater than 16k.
         On no account must you allow any section of code generated by
         MCODER to crosss the 32k word boundary).
    3.      If you wish to have your own machine code put it in a REM at
         line 1. The first byte available will be at location 20498.
         Your compiled code will not now start at 20500 but you will be
         given the correct entry address.

    The BASIC code may be quickly deleted by using RAND USR 17281.

    As an example of MCODERS speed.

    Enter the following short program and compile it.

    100 FOR A= 1 TO 50
    200 FOR B =1 TO 30
    300 PLOT A,B
    400 NEXT B
    500 NEXT A
    600 STOP

    Once it has compiled compare the running speed of the compiled code
    with that of the BASIC and you will see the kind of improvement MCODER
    brings.

    MCODER II Copyright 1983 D.C. Threlfall



    MCODER II

    ZX81
    (c) P.S.S. 1983

    452, Stoney Stanton Road,
    Coventry
    CV6 5DG.
    Telephone (0203) 667556

    -------------------------------------------------------------------------------
    Disfrutenlo!
     

  • Juanchus!!!, que grande!! biglaugh, ayer justamente le preguntaba a gus sobre alguna documentación sobre zx81 que enseñe a acceder al teclado y al video en assembler, ya me bajo el libro. Y me bajé el mcoder también, muy interesando el soft, no lo conocía.
     

  • Yo lo tenia en un cassette pero sin manual, lo abre cargado 2 o 3 veces y despues no anduvo mas.
    Fijate que cuando termina de cargar y ejecutar,  te aparece una direccion de memoria, anotala que cuando haces load"" para el programa en basic a compilar, el mcoder lo ejecutas con esa direccion, rand usr .....
    Con eso fijate (tenes que tener cuidado que el basic que no tenga las lineas 1,2 y 3 con codigo) que te aparecen las lineas 1, 2 y 3 con rems, creo que en el tercero tenes las direcciones para compilar (17300) y para ejecutar (20500).
    si tengo un ratito en el laburo te subo un pequeño tutorial con 2 ejemplos, un programa simple en basic que con las flechitas te mueve una "A" en la pantalla, y compilado con el mcoder 2 para que aprecies la diferencia de velocidad.
    De todas maneras, por lo que estoy viendo, hacerlo directamente en assembler le daria todavia mas velocidad.
    Por supuesto la idea de meterme con esto es hacer un juego de navecitas biglaughbiglaughcheesey Algo onda el proteus que estaba buscando y subi la otra vuelta (las rutinas que tiene para mover las naves estan buenisimas) pero ademas de moverse a los 2 costados que se pueda mover atras y adelante.
    Si ademas de esto se puede lograr (con assembler, claro) que cuando se aprieten por ejemplo el 7 y el 8 (arriba y a la derecha) al mismo tiempo la nave se mueva en diagonal seria regrosso!.
    Pero vamos a ver, yo por mi parte recien estoy empezando en esto, mas que una aventura no hice, tengo un programita para dibujar tambien que lo recupere, mire el listado, y le empece a encontrar 10.000 defectos  asi que lo estoy tratando de optimizar,  ese lo compile con el mcoder y le tuve que poner una rutina para bajarle la velocidad porque se iba el cursor del plot a la mier....  pero bue... cuando este como a mi me gusta vas a ver la diferencia antes y despues biglaugh
    Saludos!
     

  • Bárbaro, juanchus. Ayer estuve estudiando el manual que posteaste, el acceso al teclado no es difícil desde assembler pero el de la pantalla se me hizo cuesta arriba, de todas formas después de algunas pruebas fallidas (e insultos varios) los caracteres me aparecieron donde debían y no saltando de un lado para el otro,  ;D.
           Lo que me pareció es que la ejecución no era muy rápida, hice una impresión de prueba de varios caracteres en serie usando la rutina PRINT como dice en el manual, la que está en la dirección 083Ah de la rom, y no la ví muy veloz, raro... Después hago otro intento a ver que pasa. Tengo que ver como funca el mcoder también. Gracias por la explicación...
               Si no hiciste "más" que una aventura ya hiciste mucho más que yo entonces, pruebo, pruebo y al final dejo todo por la mitad... >:( tongue
     

  • Cristian: Por ahora estoy haciendo una especie de manualcito del "zx assembler" (no confundir con el zxas) ya que la base que tengo (un manual escaneado de los cassettes en ingles) no esta demasiado bien explicado, las teclas no son las que dicen, etc., cuando tenga algo mas terminado lo subo junto con la version que estoy usando.
    yo tambien ando disperso, depende del tiempo que tenga me pongo a corregir el senku, tipear algo de la k64, jugar con mi programita de dibujo/mcoder,  armar el manualcito para el zx assembler, o estar con el circuito del teclado de la tk 85. para completarla, compre una cz spectrum hace un mes y hay que arreglarle el teclado, cambiarle un par de fichitas  y dejarla "linda". no me quiero meter con el libro todavia (ya me lo baje y le pegue una relojeada) hasta que no tenga el manualcito terminado como referencia por un lado, y por el otro hasta que haya terminado con la tk y el senku, pero si tenes ganas nos ponemos a aprender juntos como catzo se puede hacer un juego de accion biglaugh

    saludos!
     

  • Juanchus, Cristian !!!
    Parece un mal de todos los usuarios de Sinclair este de estar con tantos proyectos en paralelo ! estarìa bueno saber en que anda cada uno para poder avanzar mejor, tal vez un meeting de usuarios sinclair ??? que opinan ?
    Yo con el tema de ASM hice un montòn de cosas, de hecho creo que utilicè todos los asemblers existentes smile incluyendo la ROM AZMIC y el ZXAssembler
    Juanchus: Vas a retipear el manual que està escaneado ? o vas a armar un manual nuevo ? Uno de los ejemplos tiene un error (lo tengo corregido) wink

    Cristian el tema de la velocidad en asm es incomparable con BASIC, la mejor forma de "imprimir" es escribir directamente sobre la pantalla de video, creo que el capitulo del libro del gallego lo explica bien...

    Ahora estoy pensando en armar una "nota" para explicar el sistema de Diskettes Larken, que en mi època de solo saber que existìa me hubiera vuelto loco !!!

    Pero claro que tambien tengo un juego en desarrollo desde hace un par de años largos, se trata de un arcade, una conversiòn, totalmente en ASM y tiene una jugabilidad que a mi por lo menos me satisface totalmente, voy a ver si puedo armar un videito y subirlo a youtube...
    Eso sin contar mi port del The Quill de Spectrum a la ZX81, o el driver de discos IDE smile o los experimentos en Alta Resoluciòn  ;D pero claro que hace falta gente que siga tipeando programas de las viejas revistas  ;D ;D ;D

    Abrazo,,
    Gus
     

  • Retipearlo ni en pedo, tampoco va a ser traducirlo, sino mas bien un manual en castellano en base a lo que vaya haciendo como experiencia, ya que me parece que el manual da muchas cosas por entendidas, y para alguien con un nivel muy basico como el mio, que quiero usar el editor para tratar de aprender assembler, se hace un tanto incomprensible.
    Con respecto al error, a cual te referis? al mcoder ii ? al manual del zx assembler? en que parte? posteate la correccion para no enloquecerme/nos al divino boton.
    Los proyectos en los que ando ya los postee biglaugh
    saludos!
     

Moderador (s): homecomputer, Selandari, pastbytes, Palamar, phd, Durandal