cursos:ensamblador:esqueleto_programa

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
cursos:ensamblador:esqueleto_programa [19-01-2024 11:20] sromerocursos:ensamblador:esqueleto_programa [19-01-2024 11:32] (actual) sromero
Línea 364: Línea 364:
     push de     push de
     push hl     push hl
-    call $2d2b               ; ROM_STACK_BC +    call $2d2b                    ; ROM_STACK_BC 
-    call $2de3               ; ROM_PRINT_FP+    call $2de3                    ; ROM_PRINT_FP
     pop hl     pop hl
     pop de     pop de
Línea 381: Línea 381:
 ; PrintNum4digits: Imprime el numero en BC (0-9999). ; PrintNum4digits: Imprime el numero en BC (0-9999).
 ;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
-CLS             EQU  $0daf               ; ROM_CLS +CLS             EQU  $0daf        ; ROM_CLS 
-CLS_COLOR       EQU  $5c8d               ; Variable del Sistema ATTR_P +CLS_COLOR       EQU  $5c8d        ; Variable del Sistema ATTR_P 
-BORDER          EQU  $229b               ; Rutina del borde +BORDER          EQU  $229b        ; Rutina del borde 
-PAUSE           EQU  $1f3d               ; PAUSAR BC/50 segundos (50 => 1s) +PAUSE           EQU  $1f3d        ; PAUSAR BC/50 segundos (50 => 1s) 
-MULT_HLDE       EQU  $30a9               ; Multiplica HL*DE => HL=HL*DE +MULT_HLDE       EQU  $30a9        ; Multiplica HL*DE => HL=HL*DE 
-PIXEL_ADDR2     EQU  $22b1               ; Devuelve direccion de pixel BC +PIXEL_ADDR2     EQU  $22b1        ; Devuelve direccion de pixel BC 
-PrintNum4digits EQU  $1a1b               ; Imprime valor de BC (0-9999)+PrintNum4digits EQU  $1a1b        ; Imprime valor de BC (0-9999)
  
 ;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
Línea 429: Línea 429:
     call CLS     call CLS
  
-    ld bc, 1234        ; Queremos imprimir un valor directo+    ld bc, 1234            ; Queremos imprimir un valor directo
     call PrintNum     call PrintNum
  
     ld a, 'd'     ld a, 'd'
-    call PrintChar     ; Imprimir sufijo 'd' despues del numero+    call PrintChar         ; Imprimir sufijo 'd' despues del numero
  
-    call PrintCR       ; Salto de linea+    call PrintCR           ; Salto de linea
  
-    ld bc, (variable)  ; Imprimir valor de variable (memoria)+    ld bc, (variable)      ; Imprimir valor de variable (memoria)
     call PrintNum     call PrintNum
  
Línea 502: Línea 502:
 CursorAt: CursorAt:
     push af     push af
-    ld a, _AT       ; Codigo control "AT Y,X"+    ld a, _AT                     ; Codigo control "AT Y,X"
     rst 16     rst 16
-    ld a, e         ; Y+    ld a, e                       ; Y
     rst 16     rst 16
-    ld a, d         ; X+    ld a, d                       ; X
     rst 16     rst 16
     pop af     pop af
Línea 522: Línea 522:
     push af     push af
 print_string_loop: print_string_loop:
-    ld a, (de)               ; Leemos el caracter apuntado por DE +    ld a, (de)                    ; Leemos el caracter apuntado por DE 
-    CP _EOS                  ; chequeamos si es $ff (fin de cadena) +    CP _EOS                       ; chequeamos si es $ff (fin de cadena) 
-    jr z, end_print_string   ; Si lo es, se activa el ZEROFLAG => SALIR +    jr z, end_print_string        ; Si lo es, se activa el ZEROFLAG => SALIR 
-    rst 16                   ; No lo es, no hemos saltado, imprimirlo +    rst 16                        ; No lo es, no hemos saltado, imprimirlo 
-    inc de                   ; Avanzar al siguiente caracter de la cadena +    inc de                        ; Avanzar al siguiente caracter de la cadena 
-    jr print_string_loop     ; Repetir hasta que alguno sea 0 y salgamos+    jr print_string_loop          ; Repetir hasta que alguno sea 0 y salgamos
 end_print_string: end_print_string:
     pop af     pop af
Línea 541: Línea 541:
 PrintBin: PrintBin:
     push af     push af
-    push bc                  ; Preservamos los registros que se usaran+    push bc                       ; Preservamos los registros que se usaran
  
-    ld c, a                  ; Guardamos en C copia de A +    ld c, a                       ; Guardamos en C copia de A 
-    ld b, 8                  ; Imprimiremos el estado de los 8 bits+    ld b, 8                       ; Imprimiremos el estado de los 8 bits
  
     ld a, '%'     ld a, '%'
-    rst 16                   ; Imprimir prefijo+    rst 16                        ; Imprimir prefijo
  
 printbin_loop: printbin_loop:
-    ld a, '1'                ; Para bit = 1, imprimiremos '1' +    ld a, '1'                     ; Para bit = 1, imprimiremos '1' 
-    bit 7, c                 ; Chequeamos el estado del bit 7 +    bit 7, c                      ; Chequeamos el estado del bit 7 
-    jr nz, printbin_es_uno   ; Dejamos A = 255 +    jr nz, printbin_es_uno        ; Dejamos A = 255 
-    ld a, '0'                ; A = '0'+    ld a, '0'                     ; A = '0'
  
 printbin_es_uno: printbin_es_uno:
-    rst 16                   ; Imprimimos (A): contiene '0' o '1' +    rst 16                        ; Imprimimos (A): contiene '0' o '1' 
-    rlc c                    ; Rotamos C a la izq para que podamos +    rlc c                         ; Rotamos C a la izq para que podamos 
-                             ; usar de nuevo el BIT 7 en el bucle +                                  ; usar de nuevo el BIT 7 en el bucle 
-    djnz printbin_loop       ; Repetimos 8 veces+    djnz printbin_loop            ; Repetimos 8 veces
  
     pop bc     pop bc
Línea 578: Línea 578:
     push hl     push hl
  
-    ld h, a                  ; Guardamos A+    ld h, a                       ; Guardamos A
     ld a, '$'     ld a, '$'
-    rst 16                   ; Imprimimos un "$" +    rst 16                        ; Imprimimos un "$" 
-    ld a, h                  ; Recuperamos A+    ld a, h                       ; Recuperamos A
  
     push af     push af
     push de     push de
  
-    call Byte2ASCII_Hex      ; Convertimos A en Cadena HEX +    call Byte2ASCII_Hex           ; Convertimos A en Cadena HEX 
-    ld hl, Byte2ASCII_output ; HL apunta a la cadena+    ld hl, Byte2ASCII_output      ; HL apunta a la cadena
  
     ld a, (hl)     ld a, (hl)
-    rst 16                   ; Imprimimos primer valor HEX +    rst 16                        ; Imprimimos primer valor HEX 
-    inc hl                   ; Avanzar en la cadena+    inc hl                        ; Avanzar en la cadena
     ld a, (hl)     ld a, (hl)
-    rst 16                   ; Imprimimos segundo valor HEX+    rst 16                        ; Imprimimos segundo valor HEX
  
     pop de     pop de
Línea 611: Línea 611:
  
     ld a, '$'     ld a, '$'
-    rst 16                   ; Imprimimos un "$"+    rst 16                        ; Imprimimos un "$"
  
     ld h, b     ld h, b
-    call Byte2ASCII_Hex      ; Convertimos A en Cadena HEX +    call Byte2ASCII_Hex           ; Convertimos A en Cadena HEX 
-    ld hl, Byte2ASCII_output ; HL apunta a la cadena+    ld hl, Byte2ASCII_output      ; HL apunta a la cadena
     ld a, (hl)     ld a, (hl)
-    rst 16                   ; Imprimimos primer valor HEX +    rst 16                        ; Imprimimos primer valor HEX 
-    inc hl                   ; Avanzar en la cadena+    inc hl                        ; Avanzar en la cadena
     ld a, (hl)     ld a, (hl)
-    rst 16                   ; Imprimimos segundo valor HEX+    rst 16                        ; Imprimimos segundo valor HEX
  
     ld h, c     ld h, c
-    call Byte2ASCII_Hex      ; Convertimos A en Cadena HEX +    call Byte2ASCII_Hex           ; Convertimos A en Cadena HEX 
-    ld hl, Byte2ASCII_output ; HL apunta a la cadena+    ld hl, Byte2ASCII_output      ; HL apunta a la cadena
     ld a, (hl)     ld a, (hl)
-    rst 16                   ; Imprimimos primer valor HEX +    rst 16                        ; Imprimimos primer valor HEX 
-    inc hl                   ; Avanzar en la cadena+    inc hl                        ; Avanzar en la cadena
     ld a, (hl)     ld a, (hl)
-    rst 16                   ; Imprimimos segundo valor HEX+    rst 16                        ; Imprimimos segundo valor HEX
  
     pop hl     pop hl
Línea 692: Línea 692:
     push af     push af
     push de     push de
-    call Byte2ASCII_Dec2Digits     ; Convertimos A en Cadena Dec 0-99+    call Byte2ASCII_Dec2Digits    ; Convertimos A en Cadena Dec 0-99
     ld a, d     ld a, d
-    rst 16                         ; Imprimimos primer valor HEX+    rst 16                        ; Imprimimos primer valor HEX
     ld a, e     ld a, e
-    rst 16                         ; Imprimimos segundo valor HEX+    rst 16                        ; Imprimimos segundo valor HEX
  
     pop de     pop de
Línea 714: Línea 714:
 ;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
 Byte2ASCII_Dec2Digits: Byte2ASCII_Dec2Digits:
-    ld d, '0'                      ; Starting from ASCII '0' +    ld d, '0'                     ; Starting from ASCII '0' 
-    dec d                          ; Because we are inc'ing in the loop +    dec d                         ; Because we are inc'ing in the loop 
-    ld e, 10                       ; Want base 10 please +    ld e, 10                      ; Want base 10 please 
-    and a                          ; Clear carry flag+    and a                         ; Clear carry flag
  
 dtoa2dloop: dtoa2dloop:
-    inc d                          ; Increase the number of tens +    inc d                         ; Increase the number of tens 
-    sub e                          ; Take away one unit of ten from A +    sub e                         ; Take away one unit of ten from A 
-    jr nc, dtoa2dloop              ; If A still hasn't gone negative, do another +    jr nc, dtoa2dloop             ; If A still hasn't gone negative, do another 
-    add a, e                       ; Decreased it too much, put it back +    add a, e                      ; Decreased it too much, put it back 
-    add a, '0'                     ; Convert to ASCII +    add a, '0'                    ; Convert to ASCII 
-    ld e, a                        ; Stick remainder in E+    ld e, a                       ; Stick remainder in E
     ret     ret
  
Línea 738: Línea 738:
     push bc     push bc
  
-    push af            ; Metemos AF en al pila pero sacamos BC +    push af                       ; Metemos AF en al pila pero sacamos BC 
-    pop bc             ; Ahora C contiene el valor de F+    pop bc                        ; Ahora C contiene el valor de F
     ld a, c     ld a, c
     call PrintBin     call PrintBin
Línea 757: Línea 757:
     push bc     push bc
  
-    push af              ; Metemos AF en al pila pero sacamos BC +    push af                       ; Metemos AF en al pila pero sacamos BC 
-    pop bc               ; Ahora C contiene el valor de F +    pop bc                        ; Ahora C contiene el valor de F 
-                         ; y B contiene el antiguo valor A+                                  ; y B contiene el antiguo valor A
     ld a, c     ld a, c
 loopPrintFlag: loopPrintFlag:
-    rlc a                ; rotamos A veces el bit+    rlc a                         ; rotamos A veces el bit
     djnz loopPrintFlag     djnz loopPrintFlag
  
-    and %00000001        ; Borramos todos los bits menos bit 0 +    and %00000001                 ; Borramos todos los bits menos bit 0 
-    add a, '0'           ; Sumamos '0' para obtener ASCII+    add a, '0'                    ; Sumamos '0' para obtener ASCII
  
     rst 16     rst 16
Línea 784: Línea 784:
     push af     push af
 wait_for_key_loop: wait_for_key_loop:
-    xor a                        ; A = 0 +    xor a                         ; A = 0 
-    in a, ($fe)+    in a, ($FE)
     or %11100000     or %11100000
     inc a     inc a
     jr z, wait_for_key_loop     jr z, wait_for_key_loop
     pop af     pop af
-    ld a, ($5c08)                ; Devolver Variable LAST-K en A+    ld a, ($5c08)                 ; Devolver Variable LAST-K en A
     ret     ret
  
  • cursos/ensamblador/esqueleto_programa.1705663223.txt.gz
  • Última modificación: 19-01-2024 11:20
  • por sromero