LOADER DINAMIC adaptado por DaDMaN

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
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

LOADER DINAMIC adaptado por DaDMaN

Mensajepor DaDMaN » Jue 16 Nov , 2006 8:00 pm

Pues eso, he desensamblado el LOADER del ASPAR GP Master de CINTA y lo he retocado.

He conseguido rehubicarlo a partir de la direccion &FF (muy por abajo, con lo que no nos molesta para la practica mayoria de juegos).

Además es auto ejecutable y no necesita PRELOADER en BASIC.
Se puede definir la paleta de colores de la pantalla de carga.
La pantalla la carga en un buffer en &4000 y al terminar la carga hace el volcado a &c000

La rutina tan solo CARGA (no graba). Los bloques teneis que generarlos con la rutina estandar que anda por ahi. Me la pasó Arta.

Recordad que al grabar los bloques, hay que hacerlo con el identificador que tenemos tambien en la rutina de carga, sino, no cargarán los bloques. FLAG=&FF (255)

Para pasar el cargador a una cinta:
* compilar en WINAPE
guardar desde basic con save a un disquete... (si la memoria es muy baja, haced un openout y luego un memory)

* pasar a cinta desde el CPCE de Cesar empleando un "COPION" disco/cinta y listos :P

Salu2!

Código: Seleccionar todo


;
; DESENSAMBLADO CARGADOR ASPAR GP - MODIFICADO POR DADMAN 2006
;
; CARGADOR REUBICABLE A PARTIR DE &FF AUTOEJECUTABLE
; SALVAR CON ' SAVE"LOADER.",B,&FF,(tamaño del loader),&FF '
; EJECUTAR CON ' RUN"LOADER"
;
; COMPILABLE CON MAXAM Y WINAPE ASSEMBLER
;
; ADAPTADO CONCRETAMENTE PARA CARGA TURBO DEL IKARI WARRIORS
;

; Variables
GATE_ARRAY equ #7f
SCR equ #c000
BUFFERSCR equ #2710
FLAG equ #ff
TINTA equ %01000000
; Final Variables


ORG &FF ; Dirección de compilación y ejecución

Inicio:
;xor a ; xor a = 0 (mode 0)
ld a,0 ; a = 0, 1, 2 (mode 0, 1, 2)
call #bc0e ; Pone la pantalla en mode 'a'

; --------------------------------------------
; Programa principal
; --------------------------------------------

ld hl,Paleta
call Colores
call RutinaCarga
call #ffd0 ;call #701c ; LLamada y ejecución del Bloque de datos
ei
ret

; --------------------------------------------
; Fin del programa principal
; --------------------------------------------


Colores:
ld c,16 ; Número de colores a cambiar + 1
ld b,GATE_ARRAY

Bucle:
ld a,(hL)
add a,TINTA
inc hl
dec c
out (c),c ; Pluma
out (c),a
jr nz,Bucle ; Siguiente Pluma
ld a,17
out (c),a ; Color Borde de Pantalla
ld a,(hl)
adc a,TINTA
out (c),a
ret


RutinaCarga:

jr l0012 ; (+#10)

lda02: nop
dec bc
inc bc
ld a,(bc)
ld b,#01
inc d
jr l0018 ; (+#0d)
add hl,de
ld (bc),a
djnz l001e ; (+#0f)
ld (de),a
add hl,bc
ld a,(de)

l0012: ld hl,#1388

l0018: dec hl
ld a,h
or l
jr nz,l0018 ; (-#05)
di
l001e: ld bc,#f792
out (c),c
dec b
ld c,#10
out (c),c
ex af,af'
push af
exx
push bc
ld bc,#f500
exx

; Orden de carga

call Pantalla ; Carga Pantalla de Carga
call Datos ; Carga Bloque de datos

; Final

ld bc,#f782
out (c),c
exx
pop bc
out (c),c
exx
pop af
ex af,af'
ret


Loader: inc d
ex af,af'
dec d
ld bc,#7f10
out (c),c
ld c,#4b
out (c),c
exx
in a,(c)
exx
rra
and #40
or #02
ld c,a
cp a
l0097: ret nz

l0098: call lda04
jr nc,l0097 ; (-#06)
ld hl,#0415
l00a0: djnz l00a0 ; (-#02)
dec hl
ld a,h
or l
jr nz,l00a0 ; (-#07)
call lda05
jr nc,l0097 ; (-#15)
l00ac: ld b,#9c
call lda05
jr nc,l0097 ; (-#1c)
ld a,#c6
cp b
jr nc,l0098 ; (-#20)
inc h
jr nz,l00ac ; (-#0f)
l00bb: ld b,#c9
call lda04
jr nc,l0097 ; (-#2b)
ld a,b
cp #d4
jr nc,l00bb ; (-#0c)
call lda04
ret nc

ld a,c
xor #03
ld c,a
ld h,#00
ld b,#cd
jr l00f4 ; (+#1f)
l00d5: ex af,af'
jr nz,l00df ; (+#07)
jr nc,l00e9 ; (+#0f)
ld (ix+#00),l
jr l00ee ; (+#0f)
l00df: rl c
xor l
ret nz

ld a,c
rra
ld c,a
inc de
jr l00f0 ; (+#07)
l00e9: ld a,(ix+#00)
xor l
ret nz

l00ee: inc ix
l00f0: dec de
ex af,af'
ld b,#ce
l00f4: ld l,#01
l00f6: call lda05
ret nc

ld a,#dc
cp b
rl l
ld b,#cd
jr nc,l00f6 ; (-#0d)
ld a,h
xor l
ld h,a
ld a,d
or e
jr nz,l00d5 ; (-#35)
ld bc,#7f00
ld a,#54
out (c),a
ret

lda05: call lda04
ret nc

lda04: ld a,#18
l0118: dec a
jr nz,l0118 ; (-#03)
and a
l011c: inc b
ret z

exx
in a,(c)
exx
rra
xor c
and #40
jr z,l011c ; (-#0c)
ld a,c
xor #40
and #5f
inc a
ld c,a
and #3f
or #40
exx
ld b,GATE_ARRAY
out (c),a
ld b,#f5
exx
scf
ret

Pantalla:
ld ix,BUFFERSCR ; Dirección de memoria Buffer de pantalla
ld de,#4000 ; Tamaño del bloque de datos (16384 bytes)
ld a,FLAG ; FlagByte (255)
scf
call Loader ; Llamada a la rutina de Carga
ld hl,BUFFERSCR
ld de,SCR ; Dirección de memoria de pantalla
ld bc,#4000 ; Tamaño del bloque de datos (16384 bytes)
ldir ; Transferencia Buffer a memoria de pantalla
ret

Datos:
ld ix,#12c0 ; Dirección de memoria de carga de datos
ld de,#8E00 ; Tamaño del bloque de datos (32768 bytes)
ld a,FLAG ; FlagByte (255)
scf
call Loader ; Llamada a la rutina de Carga
ret

; Paleta de colores ; Desde la pluma 15 a la 0 - Omitir 3 últimos valores
Paleta db &02,&19,&1a,&1e,&16,&0a,&0b,&1f,&15,&04,&14,&07,&0e,&1c,&0c,&00,&14,&14,&14
Última edición por DaDMaN el Vie 29 Ene , 2016 1:27 pm, editado 5 veces en total.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

RE: LOADER DINAMIC adaptado por DaDMaN

Mensajepor Artaburu » Jue 16 Nov , 2006 8:46 pm

Genial Dad, cada día te superas (Tanto como artista que como programador)
Salu2,
Arta

Avatar de Usuario
litos.net
Loading, Please Wait...
Loading, Please Wait...
Mensajes: 5961
Registrado: Mié 05 Oct , 2005 7:57 pm
Ubicación: Madrid
Contactar:

RE: LOADER DINAMIC adaptado por DaDMaN

Mensajepor litos.net » Jue 16 Nov , 2006 10:37 pm

Que guay! Enhorabuena. ;-D
Si es CPC es en Color

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Mensajepor DaDMaN » Vie 17 Nov , 2006 1:43 pm

El nuevo foro me esta dando petadas gordas... No puedo enviar mensajes privados. Me da errores del servidor PHP tanto con el firefox como con el explorer.

Otra cosa, se me ha restringido el acceso a zonas "VIP"? No es para quejarme, es para saberlo nada mas... Es que me he quedado un poco :shock:

Salu2
Última edición por DaDMaN el Vie 29 Ene , 2016 1:26 pm, editado 2 veces en total.

Avatar de Usuario
litos.net
Loading, Please Wait...
Loading, Please Wait...
Mensajes: 5961
Registrado: Mié 05 Oct , 2005 7:57 pm
Ubicación: Madrid
Contactar:

Mensajepor litos.net » Vie 17 Nov , 2006 1:50 pm

Hola DaD.
Las mudanzas son duras... :-(. Teóricamente los permisos siguen siendo exactamente los mismos, ya que se ha mudado la Base de datos. Revisaremos eso a ver que pasa.
EN las pruebas que estamos haciendo no nos ha petado nada hasta ahora...
Si es CPC es en Color

Avatar de Usuario
litos.net
Loading, Please Wait...
Loading, Please Wait...
Mensajes: 5961
Registrado: Mié 05 Oct , 2005 7:57 pm
Ubicación: Madrid
Contactar:

Mensajepor litos.net » Vie 17 Nov , 2006 1:55 pm

Dad, pues tienes razón, parece que hay problemas con los permisos. A ver si es posible solucionarlo... :oops: . Parece que se produce un error al intentar cambiar los permisos de los foros.
Si es CPC es en Color

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor trocoloco » Sab 15 Feb , 2020 8:37 pm

Bueno pues después de los lustros refloto el hilo jejeje :-({|= .
El caso es que he estado bicheando en con los cargadores a ver si me creaba mis propios CDTs con cargadores de colores y claro como indicaba DaDman "Los bloques teneis que generarlos con la rutina estandar que anda por ahi. Me la pasó Arta." .
Pués bueno, a ver si algún alma caritativa me indica dónde está tal rutina para generar estos archivos porfa <rX

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor Artaburu » Sab 15 Feb , 2020 9:11 pm

Como premio para el reflote, te la puedo hasta colgar aquí y todo.
Adjuntos
turbo_loader.zip
(2.05 KiB) Descargado 59 veces
Salu2,
Arta

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor Artaburu » Sab 15 Feb , 2020 9:12 pm

Carga el TLOAD.bin en &a000 y para grabar un trozo de memoria:

Código: Seleccionar todo

call &a002,1,origen,tamaño
Salu2,
Arta

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor trocoloco » Dom 16 Feb , 2020 7:38 am

Muchas gracias Artaburu!! \:D/ Ya que mi niño ha decidido levantarnos a todos en domingo de buena mañana pues me voy a poner ya a ello a ver si doy con la tecla y doy un pasito más con el ensamblador :book:

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor trocoloco » Lun 17 Feb , 2020 11:19 pm

Buenas, he conseguido crear un CDT del Ghost N Goblins y que cargue el juego, pero no sé que pasa al cargar la pantalla los colores me salen psicodélicos.

https://pasteboard.co/IV9W9YA.png

El orden de los colores según aparecen en el .BAS es:

Código: Seleccionar todo

DATA 26,13,0,15,24,6,16,2,14,1,3,11,10,9,18,25

A la hora de compilar ya he probado en poner el orden tal como está y el inverso pero nada, no consigo entenderlo. Así que nada, a ver si alguien me puede echar una mano y ver en qué me equivoco.

Código: Seleccionar todo

Paleta db &1a,&0d,&00,&0f,&18,&06,&10,&02,&0e,&01,&03,&0b,&0a,&09,&12,&19

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor Artaburu » Lun 17 Feb , 2020 11:24 pm

Si los colores los has definido bien, prueba a poner unos halt después de hacer el cambio de tintas que si empiezas rápido la carga no le da tiempo a reflejar el cambio.
Salu2,
Arta

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor trocoloco » Lun 17 Feb , 2020 11:28 pm

Perfecto Artaburu, haré eso a ver que tal sale la jugada, gracias de nuevo :D

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor trocoloco » Mar 18 Feb , 2020 4:08 pm

Bueno pues probé poniendo los halt y la pantalla siempre se me queda así aunque ponga toda la paleta a &00

Imagen

Y sin los halt pues básicamente con la paleta entera a &00 en teoría en vez de salir de color negro, se queda gris #-o . Es decir es como si el programa añadiera un &0d a la pluma en cuestión, pero ésto último es suposición mía. En fin, un galimatías

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: LOADER DINAMIC adaptado por DaDMaN

Mensajepor Artaburu » Mar 18 Feb , 2020 4:31 pm

Puedes aquí el código para ver qué puede ser?
Salu2,
Arta


¿Quién está conectado?

Usuarios navegando por este Foro: Ahrefs [Bot]


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