• Hola chicos,

    Les paso una rutina de impresión de letras proporcionales, que salió del ART STUDIO.

    1) Cargamos estos bytes a partir de la dirección 60000:


    DATA 42,129,92,38,0,237,91,125,92,213,237,91,54,92,41,41,41,
    25,209,6,8,126,197,6,8,197,23,48,11,66,75,213,229,245,205,229,
    34,241,225,209,28,193,16,237,21,193,35,62,248,131,95,16,224,201

    Esta es la parte BASIC para poder usarla.

    2) Cargamos el carácter que vamos a imprimir:


    POKE 23681, <código del carácter>

    3) Posicionamos la impresión:


    PLOT INVERSE 1; X,Y: RANDOMIZE USR 60000

    Importante: X e Y son coordenadas de píxeles, no de caracteres, asi que tienen que convertirlas con:


    X=(21-fila)*8
    Y=columna*8

    PD: La idea de esta rutina me salió después de ver el programa ART STUDIO (de spectrum). Me voló la cabeza.

    EDIT: Omití por error código ASSEMBLER de la rutina. Aqui va:


        LD HL,(23681)
        LD H,0
        LD DE,(23677)
        PUSH DE
        LD DE,(23606)
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        ADD HL,DE
        POP DE
        LD B,8
    LP3 LD A,(HL)
        PUSH BC
        LD B,8
    LP2 PUSH BC
        RLA
        JR NC, LP1
        LD B,D
        LD C,E
        PUSH DE
        PUSH HL
        PUSH AF
        CALL 8933
        POP AF
        POP HL
        POP DE
    LP1 INC E
        POP BC
        DJNZ LP2
        DEC D
        POP BC
        INC HL
        LD A,248
        ADD A,E
        LD E,A
        DJNZ LP3
        RET

    Para vuestro mejor análisis les paso el desensamble de la rutina ROM que invoca el CALL (8933):


            LD (23677),BC
            CALL 8874
            LD B,A
            INC B
            LD A,254
    LOOP3   RRCA
            DJNZ LOOP3
            LD B,A
            LD A,(HL)
            LD C,(IY+57)
            BIT 0,C
            JR NZ, LOOP1
            AND B
    LOOP1   BIT 2,C
            JRNZ, LOOP2
            XOR B
            CPL
    LOOP2   LD (HL),A
            JP 3035

    Y la 3035 del jump (JP):


            LD A,H
            RRCA
            RRCA
            RRCA
            AND 3
            OR 88
            LD H,A
            LD DE,(23695)
            LD A,(HL)
            XOR E
            AND D
            XOR E
            BIT 6,(IY+57)
            JR Z,LOOP1
            AND 199
            BIT 2,A
            JR NZ, LOOP1
            XOR 56
    LOOP1   BIT 4,(IY+57)
            JR Z, LOOP3
            AND 248
            BIT 5,A
            JR NZ, LOOP3
            XOR 7
    LOOP3   LD (HL),A
            RET

    Saludos.
     

  • REGALITO de FIN de AÑO:

    Les paso una rutina en ASSEMBLER que hice. Cambia el color de borde cada segundo:

    Se invoca con RANDOMIZE USR 35000.


    ORG 35000
    ENT
    LD A,24: LD (65535),A
    LD A,195: LD (65524),A
    LD HL, START: LD (65525),A
    LD A,59: LD I,A: IM 2: RET
    CC DEFB 0
    START PUSH HL: PUSH AF
          PUSH BC: PUSH DE
          LD A,(CC): SUB 50
          JP M,OTRA
          ADD A,50: CP 100
          CALL Z, NUEVO
          LD A,6: OUT (254),A
          LD A,CC: INC A
          LD (CC),A
          JP FIN
    OTRA  LD A,7: OUT (254),A
          LD A,(CC): INC A
          LD (CC),A
          JP FIN
    NUEVO XOR A: LD (CC),A
          RET
    FIN   POP DE: POP BC
          POP AF: POP HL
          JP 56
    BASTA LD A,63: LD I,A
          IM 1:RET

    FELIZ AÑO 2010.

    Hasta el año que viene.
     

  • Hola a todos!!
    Antes que anda, perdon por la demora, les paso otra colaboración:

    Programa que emite el sonido de un grillo:
    Se finaliza presionando la barra espaciadora.

         JP INIC
    TECLA      CALL 703
         LD A,(23560)
         RET
    INIC      LD A,R
         SRL A
         SRL A
         OUT (254),A
         CALL TECLA
         CP " "
         RET Z
         SRL A
         SRL A
         OUT (254),A
         LD A,R
         SRL A
         SRL A
         OUT (254),A
         JP INIC

    Antes deben hacer
         CLEAR 23999
         RANDOMIZE USR 4654

    Saludos!!
     

  • Código de máquina para Z80, éste lugar se va para arriba !!! wink
     

  • Lo bueno de aquellas maquinolas es que te hacían pensar.Realmente tenías que saber computación.No es como ahora:aceptar,aplicar,cancelar y listo.

    el código me hace recordar uno de los programas  del Apollo Guindance Computer.No me imagino a ningún pendejito flogger haciéndole frente a eso.


    buenísimo.

     

  • Apollo Guindance Computer...

    Es el del módulo que baja? Yo lo tenía para TI-59...
     

  • Apollo Guindance Computer es la computadora que el MIT desarrolló para poner a bordo de los cohetes del  Proyecto Géminis.Después la mejoraron un poco y la usaron en el Proyecto Apollo.
    Esta maquinola no podía fallar porque casi todos los sensores estaban conectados a ella realizando cálculos  y mandando la información a la Tierra.
    En el Apollo 13 la apagaron y quedaron en tarlipes.Para reingresar tubieron que hacer milagros para prenderla porque sin ella no podían.
    Hay un par de simuladores de AGC y algunos  ADD ONs para el orbiter simulator  con los que podés hacer tu propia misión  Apollo 11 sentado en tu casa.


    DSKYS Interface
     

  • No me imagino a ningún pendejito flogger haciéndole frente a eso.

    Hace una semana me compré el libro "Assembly Language Step-by-Step: Programming with Linux, 3rd Edition" http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470497025.html

    Me gusta mucho, es muy didáctico, y lo mejor de esto es que me permite comparar el assembler/modelos de memoria del Z80 (lo que recuerdo) contra x86.

    Para el que quiera hacer sus primeros palotes en assembler de x86 bajo un Sistema Operativo multitarea, poderoso, seguro y gratuito, lo recomiendo. (Se nota que me gusta un poco Linux).  ;D

    Uno de las comparaciones es que el codigo ASSEMBLER del z80 en el 99,9% de la veces no es relocalizable, es decir, si se ensambló en la dirección 40000, no lo podes llevar a la 30000, u otra.

    Al ensamblarlo, el ensamblador (Zeus u otro), hardcodea las direcciones de memoria propias del código invocadas en éste; saltos relativos (JR), y saltos (JP).

    En cambio en x86 cuando se trabaja en modo protegido, es el S/O el que asigna la posición de memoria donde el código correrá. Entonces el ensamblador resuelva las etiquetas del código como "offset", permitiendo al S/O relocalizar el código donde mejor sea necesario.  wink
     

  • Hola a todos.

    Les paso una rutina interesante en LM.

    Les debo el código en Assembler por no estar transcripto en mi cuaderno de notas.
    Esta rutina, si bien recuerdo, utiliza interrupciones, e imprime en el recuadro superior derecho de la pantalla un número de 5 dígitos que informa la línea en BASIC que se está ejecutando en ese momento.
    Les paso los octetos para cargarlo.

    DATA 62,24,50,255,255,62,195,50,244,255,33,90,
    255,34,245,255,62,59,237,71,71,237,94,201,62,63,231,
    71,237,86,201,229,245,197,213,42,69,92,17,71,71,237,
    83,24,88,237,83,26,88,205,126,255,209,193,241,225,
    195,56,0,17,24,0,237,83,200,255,17,232,3,205,189,255,
    17,100,0,205,189,255,17,10,0,205,189,259,255,77,205,
    179,255,62,58,205,189,255,58,71,92,38,0,111,17,100,0,
    209,189,255,17,101,0,205,189,255,77,25,62,48,129,225,
    205,199,255,225,201,167,14,0,237,82,56,239,12,24,249,
    17,32,0,38,0,111,237,75,54,92,41,41,41,9,122,230,24,
    198,64,71,122,15,15,15,230,224,131,95,80,6,8,126,18
    ,20,35,16,250,33,200,255,52,201
    Unas observaciones:

    • Para activarlo invocar la dirección 65340.
    • Para desactivarlo invocar la dirección 65363.
    • Tener presente que no es reubicable, en caso de que lo necesiten reubicar, deben tipear los siguientes POKE's:
      POKE direccion+1, PEEK 23670
      POKE direccion+12, PEEK 23671


    Saludos,
     

  • 14 años atrás

    Che, está muy buena esa, para debugear un programa BASIC viene bárbaro!!
     

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