403 lines
5.8 KiB
NASM
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
|