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
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