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 GHOSTS N GOBLINS
;
; 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 #5000 ;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,#1800 ; Dirección de memoria de carga de datos
ld de,#8E00 ; Tamaño del bloque de datos (36.352 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
;Paleta db &19,&12,&09,&0a,&0b,&03,&01,&0e,&02,&11,&06,&18,&0f,&0d,&1a,&14,&14,&14 ;inverso
Paleta db &1a,&0d,&00,&0f,&18,&06,&10,&02,&0e,&01,&03,&0b,&0a,&09,&12,&19; derecho