Files
ZiFi/includes.asm

403 lines
5.8 KiB
NASM

IFUSED Galois16
Galois16 ld hl, #FFFF ; 10
SeedValue EQU $-2
add hl, hl ; 11
sbc a ; 4
and #EB ; 7 instead of #EB one can use #AF
ld c, a ; 4
xor l ; 4
ld l, a ; 4
ld a,c ; 4
xor h ; 4
ld h,a ; 4
ld (SeedValue), hl ; 16
and %10101010
add l ; +7+4 => +11t
ret
ENDIF
IFUSED rnd
rnd ld de,0x2b3b ; xz -> yw
ld hl,0x9c18 ; yw -> zt; 0xC0DE
ld (rnd+1),hl ; x = y, z = w
ld a,l ; w = w ^ ( w << 3 )
add a,a
add a,a
add a,a
xor l
ld l,a
ld a,d ; t = x ^ (x << 1)
add a,a
xor d
ld h,a
rra ; t = t ^ (t >> 1) ^ w
xor h
xor l
ld h,e ; y = z
ld l,a ; w = t
ld (rnd+4),hl
ret
ENDIF
IFUSED spr_off
spr_off ld bc, FMADDR
ld a, FM_EN+#c
out (c), a ; open FPGA arrays at #0000
; clean SFILE
FM_SFILE equ #0200+#c000
ld hl,FM_SFILE
xor a
spr_off_l1 ld (hl), a
inc l
jr nz,spr_off_l1
inc h
spr_off_l2 ld (hl), a
inc l
jr nz,spr_off_l2
out (c), a ; close FPGA arrays at #0000
ret
ENDIF
IFUSED clear_tileset
clear_tileset ld bc,PAGE3
ld a,Tile_page
out (c),a
ld (#c000),hl
ld hl,tileset_clr
jp set_ports
tileset_clr
defb #1a,0 ;
defb #1b,0 ;
defb #1c,Tile_page ;
defb #1d,0 ;
defb #1e,0 ;
defb #1f,Tile_page ;
defb #28,#ff ;
defb #26,#1f ;
defb #27,%00000100
db #ff
ENDIF
IFUSED clear_tileset0
clear_tileset0 ld bc,PAGE0
ld a,Tile_page
out (c),a
ld (#0000),hl
ld hl,tileset0_clr
jp set_ports
tileset0_clr
defb #1a,0 ;
defb #1b,0 ;
defb #1c,Tile_page ;
defb #1d,0 ;
defb #1e,0 ;
defb #1f,Tile_page ;
defb #28,#3f ;
defb #26,#3f ;
defb #27,DMA_FILL+DMA_DALGN
db #ff
ENDIF
IFUSED fadeOUT
/*
ld b,8
c_pal1 push bc
c_pal ld hl,viol_pal-32
ld de,32
add hl,de
ld (c_pal+1),hl
call fadeOUT
ld hl,(c_pal+1)
ld de,32*4
add hl,de
ex de,hl
ld hl,temp_pal
ld bc,32
ldir
pop bc
djnz c_pal1
*/
fadeOUT
ld hl,temp_pal
ld b,#10
fadeout2 push bc
xor a
ld (greenH+1),a ; Green High
ld (greenL+1),a ; Green Low
ld (red+1),a
ld (blue+1),a
call fdout
greenL ld a,0
blue or 0
ld (hl),a
inc hl
red ld a,0
greenH or 0
ld (hl),a
inc hl
pop bc
djnz fadeout2
ret
fdout inc hl
ld a,(hl) ; 0RRrrrGG gggBBbbb
dec hl
push af
and %01111100
srl a
srl a
dec a
cp #ff
jr z,fd21
sla a
sla a
ld (red+1),a; R
fd21
pop af
and %00000011 ; GG
ld c,a
ld a,(hl)
push af
and %11100000 ; ggg 0RRrrrGG gggBBbbb
sla a
rl c
sla a
rl c
sla a
rl c
ld a,c
dec a
cp #ff
jr z,fd22
ld c,0
srl a
rr c
srl a
rr c
srl a
rr c
ld (greenH+1),a ; Green High
ld a,c
ld (greenL+1),a ; Green Low
fd22
pop af
and %00011111
dec a
cp #ff
ret z
ld (blue+1),a
ret
align 2
temp_pal ds 32
ENDIF
IFUSED tile_filler
/*
ld hl,#c996
ld de,#0000
ld bc,#1008 ; 128x160
ld a,Tile_page
call tile_filler
*/
tile_filler exx
ld bc,PAGE3
out (c),a
exx
tile_filler_st ld a,l
ld (rfil3+1),a
ld a,#40
sub b
ld (rfil4+1),a
rfil1 push bc
rfil2 ld (hl),e
inc l
ld (hl),d
inc l
inc de
djnz rfil2
inc h
rfil3 ld l,0
ex de,hl
rfil4 ld bc,0
add hl,bc
ex de,hl
pop bc
dec c
jr nz,rfil1
ret
ENDIF
IFUSED tile_filler_page0
/*
ld hl,#0996
ld de,#0000
ld bc,#1008 ; 128x160
ld a,Tile_page
call tile_filler
*/
tile_filler_page0
exx
ld bc,PAGE0
out (c),a
exx
ld a,l
ld (rfilp3+1),a
ld a,#40
sub b
ld (rfilp4+1),a
2 push bc
1 ld (hl),e
inc l
ld (hl),d
inc l
inc de
djnz 1b
inc h
rfilp3 ld l,0
ex de,hl
rfilp4 ld bc,0
add hl,bc
ex de,hl
pop bc
dec c
jr nz,2b
ret
ENDIF
IFUSED set_ports
set_ports ld a,1
ld (dma_busy),a
ld c,#AF
.m1 ld b,(hl)
inc hl
inc b
jr z,.wait
outi
jr .m1
.wait call dma_stats
xor a
ld (dma_busy),a
ret
ENDIF
IFUSED set_ports_nowait
set_ports_nowait
ld c,#AF
.m2 ld b,(hl)
inc hl
inc b
ret z
outi
jr .m2
ENDIF
IFUSED dma_stats
dma_stats ld b,high DMASTATUS
in a,(c)
AND #80
jr nz,$-4
ret
ENDIF
IFUSED inch
inch
INC H
LD A,H
AND 7
ret NZ
LD A,L
ADD A,32
LD L,A
ret C
LD A,H
SUB 8
LD H,A
ret
ENDIF
IFUSED incd
incd INC d
LD A,d
AND 7
ret NZ
LD A,e
ADD A,32
LD e,A
ret C
LD A,d
SUB 8
LD d,A
ret
ENDIF
;in: de-adr of tab
; b-dx
; c-amplitude
IFUSED SINMAKE
SINMAKE
INC C
LD HL,SIN_DAT
PUSH BC
LD B,E
LP_SMK1 PUSH HL
LD H,(HL)
LD L,B
LD A,#08
LP_SMK2 ADD HL,HL
JR NC,$+3
ADD HL,BC
DEC A
JR NZ,LP_SMK2
LD A,H
LD (DE),A
POP HL
INC HL
INC E
BIT 6,E
JR Z,LP_SMK1
LD H,D
LD L,E
DEC L
LD A,(HL)
LD (DE),A
INC E
LP_SMK3 LD A,(HL)
LD (DE),A
INC E
DEC L
JR NZ,LP_SMK3
LP_SMK4 LD A,(HL)
NEG
LD (DE),A
INC L
INC E
JR NZ,LP_SMK4
POP BC
LP_SMK5 LD A,(DE)
ADD A,B
LD (DE),A
INC E
JR NZ,LP_SMK5
RET
SIN_DAT
DB #00,#06,#0D,#13,#19,#1F,#25,#2C
DB #32,#38,#3E,#44,#4A,#50,#56,#5C
DB #62,#67,#6D,#73,#78,#7E,#83,#88
DB #8E,#93,#98,#9D,#A2,#A7,#AB,#B0
DB #B4,#B9,#BD,#C1,#C5,#C9,#CD,#D0
DB #D4,#D7,#DB,#DE,#E1,#E4,#E7,#E9
DB #EC,#EE,#F0,#F2,#F4,#F6,#F7,#F9
DB #FA,#FB,#FC,#FD,#FE,#FE,#FF,#FF
ENDIF