creando rom

Programando el Amstrad en Ensamblador.
Reglas del Foro
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.

De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
Avatar de Usuario
Fran123
Me voy lanzando
Me voy lanzando
Mensajes: 74
Registrado: Lun 24 Feb , 2020 2:44 pm

creando rom

Mensajepor Fran123 » Jue 08 Jul , 2021 8:16 pm

Hola

Estoy tratando de hacer una rom, el código inicial es este:

Código: Seleccionar todo

save "D:\hello.rom",#c000,#ffff-#c000

org #c000

os_reset equ #0000
os_txt_output equ #bb5a
kl_curr_selection equ #b912

header:
defb 1
defb 1,2,9
defw rsx_commands

rsx_table:
jp init
jp hello
jp reset_

rsx_commands:
defb "HELLO RO","M"+#80
defb "HELL","O"+#80
defb 'RESE',"T"+#80
defb 0

init:
push bc
push de
push hl

ld hl, str_init
call print_str

pop hl
pop de
pop bc

;; HL = last available address for next ROM
;dec hl

ret

;; |HELLO
hello:
push hl
ld hl, str_hello
call print_str
pop hl
ret

;; |RESET
reset_:
jp os_reset


print_str:
ld a, (hl)
or a
ret z
call os_txt_output
inc hl
jr print_str


str_init: db " My ROM 1.1",10,13,10,13,0
str_hello: db "Hello world!",10,13,10,13,0
Tanto Winape como RetroVirtualMachine la arrancan, muestran el mensaje inicial, pero luego al escribir los comandos (|hello y |reset) devuelven "Unknown command"

He mirado otras roms de ejemplo, y no veo dónde puede estar el fallo.

¿alguna ayuda?

gracias.

Avatar de Usuario
NotFound
Me voy lanzando
Me voy lanzando
Mensajes: 36
Registrado: Mié 17 Ene , 2007 4:31 pm

Re: creando rom

Mensajepor NotFound » Jue 08 Jul , 2021 10:18 pm

Hola.

Te falta el SCF al terminar la inicialización.
Salu2

Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Re: creando rom

Mensajepor MoteroV4 » Jue 08 Jul , 2021 10:51 pm

Tanto Winape como RetroVirtualMachine la arrancan, muestran el mensaje inicial, pero luego al escribir los comandos (|hello y |reset) devuelven "Unknown command"

He mirado otras roms de ejemplo, y no veo dónde puede estar el fallo.

¿alguna ayuda?

gracias.
Creo que por ej. no incluyes en la creación de los RSX los 4 bytes del Espacio de Trabajo para el Firm o no lo veo claro. Tampoco veo la llamada a &BCD1 KL LOG EXT para dar los RSX de alta en el Firm.

Te paso la 1ª rutina simple de ej. de RSXs que me hice y me funciona, por si te sirve de ayuda:

Código: Seleccionar todo

_RSX::

;; *********************** Configuración RSX ****************************
ld bc,#_TablaRSX
ld hl,#_EspacioTrabajo
jp 0xbcd1 ;KL LOG EXT = Inicia sesion de un (o varios) nuevo comando RSX en el firmware.
;BC contiene la dirección de la Tabla de Comandos RSX
;HL contiene la dir de los 4 bytes uso exclusivos del firm

_TablaRSX:: ;Tabla de saltos a las rutinas de los comandos RSX
.dw _TablaNombres ;Puntero de 2 bytes a la lista de nombres

jp GRASETPEN ;comando |GRSETPEN, para asignar color de pluma gráfica

jp FLUSH ;comando |FLUSH, para vaciado de buferes de teclado o sonido

_TablaNombres:: ;Nombres de los comandos RSX
.ascii "GRSETPE"
.db "N"+#0x80

.ascii "FLUS"
.db "H"+#0x80
.db 0

_EspacioTrabajo::
.ds 4 ;Reservar Espacio de Trabajo de 4 bytes para el firm


;;************** RUTINA Sets the graphics PEN. **********************************
GRASETPEN::
ld a,(ix+#0x00) ;Obtener parámetro y cargarlo en A
call 0xBBDE
ret

;;************** RUTINA FLUSH DE VACIADO DE BUFERES TECLADO Y SONIDO ************
FLUSH::
dec a ;Reg A almacena el nº de parámetros del comando
jp nz,_GestionError ;Saltar a error si hay más de 1 parámetro
ld a,(ix+#0x00) ;Obtener parámetro y cargarlo en A
and a ;comprobar si el parámetro es 0 o 1 activando el flag Z
jp nz,0xbca7 ;SOUND RESET si param vale 1
_BorraBufer:
call 0xbb09 ;Si param=0 KM READ CHAR: comprueba Bufer si un carácter está disponible (y se borra) y lo guarda en A. Flag C=1
jr c,_BorraBufer ;Si flag C=1, volver a comprobar bufer, hasta borrar todos los caracteres que hubiera.
ret

_GestionError:
ld hl,#_TxtError
_Imprimir:
ld a,(hl)
call 0xbb5a ;TXT OUTPUT: muestra ascii (00-1F) en pantalla
inc hl
and a
jr nz,_Imprimir
ret
_TxtError:
.asciz "RSX Error"

ret

Avatar de Usuario
Fran123
Me voy lanzando
Me voy lanzando
Mensajes: 74
Registrado: Lun 24 Feb , 2020 2:44 pm

Re: creando rom

Mensajepor Fran123 » Vie 09 Jul , 2021 9:21 am

El caso es que añadiendo el SCF funciona

Avatar de Usuario
NotFound
Me voy lanzando
Me voy lanzando
Mensajes: 36
Registrado: Mié 17 Ene , 2007 4:31 pm

Re: creando rom

Mensajepor NotFound » Sab 10 Jul , 2021 8:27 pm

La rutina de inicialización usa el carry flag para informar del resultado, si no está activo indica fallo, y entonces el firmware ignora sus resultados.

Lo de la llamada para registrar RSX y demás es para RSX creadas en RAM, para las ROM se encarga el firmware de hacerlo automáticamente.
Salu2


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic