daily pastebin goal
7%
SHARE
TWEET

Contador

kramos966 Jan 11th, 2019 (edited) 61 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; +-------------------------------------------------------------------+
  2. ; | PROGRAMA QUE COMPTA NÚMEROS AMB INTERRUPTS DE LA ULA              |
  3. ; +-------------------------------------------------------------------+
  4. ORG 32000
  5.  
  6. ; Instal·lem la rutina ISR
  7. LD HL, timer_ISR        ; HL = direcció de la rutina
  8. DI                      ; Deshabilitem interrupts per la càrrega
  9. LD ($FEFF), HL          ; Guardem en FEFFh la direcció de la rutina
  10. LD A, $FE
  11. LD I, A                 ; Guardem en I la direcció de la rutina
  12. IM 2                    ; Canviem al segon mode d'interrupció
  13. EI                      ; Habilitem interrupcions
  14.  
  15. bucle:
  16. ; +-------------------------------------------------------------------+
  17. ; | COUNTDOWN                                                         |
  18. ; |   Detectem quan volem que comenci el comptador.                   |
  19. ; +-------------------------------------------------------------------+
  20.         LD A, (timer)   ; carreguem el comptador
  21.         AND A           ; Comprovem si el comptador és nul
  22.         JR NZ, bucle    ; Si el timer no és nul, saltem
  23.         ; A partir d'aquí, el timer = 0
  24.         LD A, 50        ; Reset del comptador
  25.         LD (timer), A
  26.         CALL $0DAF      ; Netegem la pantalla
  27.         LD A, (segons)  ; Nombre de segons
  28.         CALL dib_num
  29.         INC A           ; incrementem un segon
  30.         LD (segons), A
  31.         JR bucle        ; Tornem al bucle
  32.         RET
  33.  
  34. timer DB 50
  35. segons DB 0
  36. timer_ISR:
  37. ; +-------------------------------------------------------------------+
  38. ; | COMPTADOR ISR                                                     |
  39. ; |   Decreix timer una unitat per interrupt.                         |
  40. ; +-------------------------------------------------------------------+
  41.         PUSH AF
  42.         LD A, (timer)
  43.         DEC A
  44.         LD (timer), A
  45.         POP AF
  46.         EI
  47.         RETI
  48. dib_num:
  49. ; +-------------------------------------------------------------------+
  50. ; | DIBUIXA NÚMERO                                                    |
  51. ; |   Rutina per dibuixar un número en la pantalla aprofitant la      |
  52. ; | rutina pròpia de la ROM.                                          |
  53. ; |     ENTRADA:                                                      |
  54. ; |     A - byte a transformar                                        |
  55. ; +-------------------------------------------------------------------+
  56.         PUSH DE
  57.         LD D, A         ; Guardem el valor de A
  58.         LD A, "$"
  59.         RST 16          ; Imprimim $
  60.  
  61.         LD A, D
  62.         CALL byte2ASCII_hex
  63.         LD HL, byte_conv
  64.         LD A, (HL)
  65.         RST 16
  66.  
  67.         INC HL          ; Saltem a la següent posició de memòria
  68.         LD A, (HL)
  69.         RST 16
  70.  
  71.         LD A, D         ; Retornem el valor de A
  72.         POP DE
  73.         RET
  74.  
  75. byte_conv DB 0, 0
  76. byte2ASCII_hex:
  77. ; +-------------------------------------------------------------------+
  78. ; | Converteix un número binari en la seva representació hexadecimal  |
  79. ; |  ENTRADA:                                                         |
  80. ; |     A - byte a transformar                                        |
  81. ; |  SORTIDA:                                                         |
  82. ; |      (byte_conv):  direcció de memòria del byte.                  |
  83. ; +-------------------------------------------------------------------+
  84.         PUSH HL
  85.         PUSH DE
  86.         LD H, A         ; Guardem el valor de A
  87.         ; Valor baix
  88.         AND %00001111   ; Semibit inferior
  89.         ; Transformem a l'ASCII de Spectrum
  90.         CALL test9
  91.         LD D, A
  92.  
  93.         ; Valor alt
  94.         LD A, H
  95.         RRA
  96.         RRA
  97.         RRA
  98.         RRA             ; Semibit superior
  99.         AND %00001111   ; Eliminem el semibit "baix"
  100.         ; Transformem a l'ASCII de Spectrum
  101.         CALL test9
  102.         LD E, A
  103.  
  104.         LD (byte_conv), DE ; Guardem el resultat en memo
  105.  
  106.         POP DE
  107.         POP HL
  108.         RET
  109.  
  110. test9:
  111.         ADD A, $F6
  112.         JR NC, nocor    ; Si no hi ha carry, no fem res
  113.         ADD A, 7
  114.         nocor
  115.         SUB $F6
  116.         ADD A, "0"
  117.         RET
  118.  
  119. END 32000
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top