Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa | |||
cursos:ensamblador:esqueleto_programa [19-01-2024 11:20] – sromero | cursos: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 | + | call $2d2b ; ROM_STACK_BC |
- | call $2de3 | + | call $2de3 ; ROM_PRINT_FP |
pop hl | pop hl | ||
pop de | pop de | ||
Línea 381: | Línea 381: | ||
; PrintNum4digits: | ; PrintNum4digits: | ||
; | ; | ||
- | CLS | + | CLS |
- | CLS_COLOR | + | CLS_COLOR |
- | BORDER | + | BORDER |
- | PAUSE | + | PAUSE |
- | MULT_HLDE | + | MULT_HLDE |
- | PIXEL_ADDR2 | + | PIXEL_ADDR2 |
- | PrintNum4digits EQU $1a1b | + | 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, ' | ld a, ' | ||
- | call PrintChar | + | call PrintChar |
- | call PrintCR | + | call PrintCR |
- | ld bc, (variable) | + | ld bc, (variable) |
call PrintNum | call PrintNum | ||
Línea 502: | Línea 502: | ||
CursorAt: | CursorAt: | ||
push af | push af | ||
- | ld a, _AT | + | ld a, _AT |
rst 16 | rst 16 | ||
- | ld a, e | + | ld a, e |
rst 16 | rst 16 | ||
- | ld a, d | + | ld a, d |
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) | + | ld a, (de) ; Leemos el caracter apuntado por DE |
- | CP _EOS ; chequeamos si es $ff (fin de cadena) | + | CP _EOS |
- | jr z, end_print_string | + | jr z, end_print_string |
- | rst 16 | + | rst 16 ; No lo es, no hemos saltado, imprimirlo |
- | inc de | + | inc de ; Avanzar al siguiente caracter de la cadena |
- | jr print_string_loop | + | jr print_string_loop |
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 |
- | ld c, a ; Guardamos en C copia de A | + | ld c, a |
- | ld b, 8 ; Imprimiremos el estado de los 8 bits | + | ld b, 8 |
ld a, ' | ld a, ' | ||
- | rst 16 | + | rst 16 ; Imprimir prefijo |
printbin_loop: | printbin_loop: | ||
- | ld a, ' | + | ld a, ' |
- | bit 7, c | + | bit 7, c ; Chequeamos el estado del bit 7 |
- | jr nz, printbin_es_uno | + | jr nz, printbin_es_uno |
- | ld a, ' | + | ld a, ' |
printbin_es_uno: | printbin_es_uno: | ||
- | rst 16 | + | rst 16 ; Imprimimos (A): contiene ' |
- | rlc c ; Rotamos C a la izq para que podamos | + | rlc c |
- | | + | ; usar de nuevo el BIT 7 en el bucle |
- | djnz printbin_loop | + | djnz printbin_loop |
pop bc | pop bc | ||
Línea 578: | Línea 578: | ||
push hl | push hl | ||
- | ld h, a ; Guardamos A | + | ld h, a |
ld a, ' | ld a, ' | ||
- | rst 16 | + | rst 16 ; Imprimimos un " |
- | ld a, h ; Recuperamos A | + | ld a, h |
push af | push af | ||
push de | push de | ||
- | call Byte2ASCII_Hex | + | call Byte2ASCII_Hex |
- | ld hl, Byte2ASCII_output ; HL apunta a la cadena | + | ld hl, Byte2ASCII_output |
ld a, (hl) | ld a, (hl) | ||
- | rst 16 | + | rst 16 ; Imprimimos primer valor HEX |
- | inc hl | + | inc hl ; Avanzar en la cadena |
ld a, (hl) | ld a, (hl) | ||
- | rst 16 | + | rst 16 ; Imprimimos segundo valor HEX |
pop de | pop de | ||
Línea 611: | Línea 611: | ||
ld a, ' | ld a, ' | ||
- | rst 16 | + | rst 16 ; Imprimimos un " |
ld h, b | ld h, b | ||
- | call Byte2ASCII_Hex | + | call Byte2ASCII_Hex |
- | ld hl, Byte2ASCII_output ; HL apunta a la cadena | + | ld hl, Byte2ASCII_output |
ld a, (hl) | ld a, (hl) | ||
- | rst 16 | + | rst 16 ; Imprimimos primer valor HEX |
- | inc hl | + | inc hl ; Avanzar en la cadena |
ld a, (hl) | ld a, (hl) | ||
- | rst 16 | + | rst 16 ; Imprimimos segundo valor HEX |
ld h, c | ld h, c | ||
- | call Byte2ASCII_Hex | + | call Byte2ASCII_Hex |
- | ld hl, Byte2ASCII_output ; HL apunta a la cadena | + | ld hl, Byte2ASCII_output |
ld a, (hl) | ld a, (hl) | ||
- | rst 16 | + | rst 16 ; Imprimimos primer valor HEX |
- | inc hl | + | inc hl ; Avanzar en la cadena |
ld a, (hl) | ld a, (hl) | ||
- | rst 16 | + | 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 | + | call Byte2ASCII_Dec2Digits |
ld a, d | ld a, d | ||
- | rst 16 | + | rst 16 ; Imprimimos primer valor HEX |
ld a, e | ld a, e | ||
- | rst 16 | + | rst 16 ; Imprimimos segundo valor HEX |
pop de | pop de | ||
Línea 714: | Línea 714: | ||
; | ; | ||
Byte2ASCII_Dec2Digits: | Byte2ASCII_Dec2Digits: | ||
- | ld d, ' | + | ld d, ' |
- | dec d ; Because we are inc' | + | dec d |
- | ld e, 10 | + | ld e, 10 ; Want base 10 please |
- | and a ; Clear carry flag | + | and a |
dtoa2dloop: | dtoa2dloop: | ||
- | inc d ; Increase the number of tens | + | inc d |
- | sub e ; Take away one unit of ten from A | + | sub e |
- | jr nc, dtoa2dloop | + | jr nc, dtoa2dloop |
- | add a, e | + | add a, e ; Decreased it too much, put it back |
- | add a, ' | + | add a, ' |
- | ld e, a ; Stick remainder in E | + | ld e, a |
ret | ret | ||
Línea 738: | Línea 738: | ||
push bc | push bc | ||
- | push af ; Metemos AF en al pila pero sacamos BC | + | push af |
- | pop bc | + | 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 |
- | pop bc | + | pop bc ; Ahora C contiene el valor de F |
- | | + | ; y B contiene el antiguo valor A |
ld a, c | ld a, c | ||
loopPrintFlag: | loopPrintFlag: | ||
- | rlc a ; rotamos A veces el bit | + | rlc a |
djnz loopPrintFlag | djnz loopPrintFlag | ||
- | and %00000001 | + | and %00000001 |
- | add a, ' | + | add a, ' |
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 |
- | 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) | + | ld a, ($5c08) |
ret | ret | ||