User Tools

Site Tools


base:fli_floffy

Table of Contents

FLI Floffy

Concept

A FLI logo is sine-waved first on the Y axis (DYPP) and then on the X axis (tech-tech.) The most tricky part of this is that in FLI, the colors and bitmap are interconnected in every 8×1 byte, as well as in every char. So it's hard to shift single rows of pixels up'n'down independently, without getting color clashed. And even if the graphics was designed to avoid this, the process would be rather cumbersome rastertime exhaustive.

To get around these problems, the precision of the DYPP has been lowered to every 2nd multicolor pixel, and the maximum difference for the Y-position of each of these segments has been set to 1 pixel. So for each char, there is only 3 cases - up, straight or down. The graphics has then been designed to be able to handle these cases without color clashes. Storing the DYPP'ed gfx into FLI is done with some routines that have been specialized for each byte in the gfx, and for each DYPP case, so it can load it directly in immediate mode, without having to look it up in a table.

Sourcecode

;------------------------------------------------------------
; FLI Fluffy
;------------------------------------------------------------
; Coded by Cruzer/Camelot 2003-2004
; Asm'ed with mxass
;------------------------------------------------------------

;zeropage...

.la gfxadrs   = $02 ;
.la coladrs   = $72 ;
.la segment   = $e0 ;1
.la cnt       = $e1 ;1
.la techpoint = $e2 ;2
.la dypppoint = $e4 ;2
.la generate  = $e6 ;1
.la char      = $e7 ;1

;memory...

;0340-07ff ysiner
;0801-08ff basic
;0900-0aff tech-tech sine
;0b00-0fff shower
;1000-15ff noise
;1600-28ff main
;29c0-c4ff dypper
;c500-cc7f fli-bitmap
;ce00-d3ff dypper pointers
;d400-dfff logo source
;e000-ffff fli colors + other stuff like...
; e000-e6ff tech-techer
; e700-eaff zpmover
; eb00-ebff temp
; ee00-eeff lut
; ef00-efff zp-initer
; f000-f7ff font
; f800-fbff text-screen
; fe00-ffff dypp sine

.la ysiner       = $0340
;la basic        = $0801
.la loadersrc1   = $0840
.la techsine     = $0900
.la shower       = $0b00 ;0f3f
.la loadersrc2   = $0f40
;la music        = $1000
.la main         = $1600
.la loadersrc3   = $2900
.la dypper       = $29c0 ;c63f
.la bitmap       = $c000 ;(c640-cdff)
.la dypppnt      = $ce00 ;ceff
.la logosrc      = $d400
;la screens      = $e000 ;efff
.la techtecher   = $e000
.la zpmover      = $e700
.la temp         = $eb00
.la dypppp       = $ee00
.la zpiniter     = $ef00
;la font         = $f000
;la textscreen   = $f800 ;fbff
.la dyppsine     = $fe00

.ba main
.la border=$d020

;------------------------------------------------------------
	jmp start


d011	.by $78,$79,$7a,$7b,$7c,$7d,$7e,$7f
	.by $78,$79,$7a,$7b,$7c,$7d,$7e,$7f
d018	.by $a0,$b0,$c0,$d0,$e0,$f0,$80,$90

fadein	.by 0
fadeout	.by 0
fadepnt	.by 0

fxs	.wo fx1,fx2,fx3,fx4,fx5,fx6,fx7,fx8,fx9,fx10,fx11,fx12,fx13,fx14
fx	.by $ff
numfx	.by 14

thisfx
techspread .by $00,$00
techspeed  .by $00,$00
techoffset .by $00,$00
dyppspread .by $00,$00
dyppspeed  .by $00,$00
dyppoffset .by $00,$00
updatetype .by 0	; 0=each frame  1=jumps
fxtimer    .wo $00

fx1
	.by $00,$00 ;techspread
	.by $00,$00 ;techspeed
	.by $00,$00 ;techoffset
	.by $00,$00 ;dyppspread
	.by $00,$00 ;dyppspeed
	.by $00,$00 ;dyppoffset
	.by 0       ;updatetype
	.wo $300    ;fxtimer

fx2
	.by $03,$04  ;+techspread
	.by $02,$03  ;+techspeed
	.by $00,$00  ;+techoffset
	.by $04,$04  ;+dyppspread
	.by $02,$02  ;+dyppspeed
	.by $00,$00  ;+dyppoffset
	.by 0        ;+updatetype
	.wo $1aa     ;+fxtimer


fx3
+techspread .by $06,$06
+techspeed  .by $04,$04
+techoffset .by $00,$00
+dyppspread .by $05,$05
+dyppspeed  .by $05,$05
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $122

fx4
+techspread .by $03,$05
+techspeed  .by $04,$03
+techoffset .by $00,$00
+dyppspread .by $04,$04
+dyppspeed  .by $fd,$fd
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $1aa

fx5
+techspread .by $08,$08
+techspeed  .by $06,$05
+techoffset .by $00,$00
+dyppspread .by $04,$04
+dyppspeed  .by $fd,$fd
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $1aa

fx6
+techspread .by $04,$04
+techspeed  .by $03,$fd
+techoffset .by $00,$00
+dyppspread .by $00,$00
+dyppspeed  .by $00,$00
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $144

fx7
+techspread .by $06,$09
+techspeed  .by $03,$fc
+techoffset .by $00,$00
+dyppspread .by $08,$07
+dyppspeed  .by $fc,$03
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $1aa

fx8
+techspread .by $06,$06
+techspeed  .by $03,$fd
+techoffset .by $00,$00
+dyppspread .by $05,$05
+dyppspeed  .by $fd,$03
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $144

fx9
+techspread .by $84,$05
+techspeed  .by $05,$04
+techoffset .by $00,$00
+dyppspread .by $04,$04
+dyppspeed  .by $03,$03
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $1aa

fx10
+techspread .by $04,$fb
+techspeed  .by $02,$03
+techoffset .by $00,$00
+dyppspread .by $03,$03
+dyppspeed  .by $fa,$fa
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $144

fx11
+techspread .by $06,$06
+techspeed  .by $04,$04
+techoffset .by $00,$00
+dyppspread .by $05,$05
+dyppspeed  .by $05,$05
+dyppoffset .by $00,$00
+updatetype .by 1
+fxtimer    .wo $122

fx12
+techspread .by $01,$01
+techspeed  .by $04,$fd
+techoffset .by $00,$00
+dyppspread .by $02,$02
+dyppspeed  .by $fc,$03
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $1aa

fx13
+techspread .by $12,$06
+techspeed  .by $0c,$06
+techoffset .by $00,$00
+dyppspread .by $06,$06
+dyppspeed  .by $02,$02
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $1aa

fx14
+techspread .by $06,$06
+techspeed  .by $02,$fe
+techoffset .by $00,$00
+dyppspread .by $05,$05
+dyppspeed  .by $03,$fd
+dyppoffset .by $00,$00
+updatetype .by 0
+fxtimer    .wo $144

;fx15
;+techspread .by $02,$02
;+techspeed  .by $fc,$03
;+techoffset .by $00,$00
;+dyppspread .by $03,$03
;+dyppspeed  .by $fe,$03
;+dyppoffset .by $00,$00
;+updatetype .by 0
;+fxtimer    .wo $7777

;------------------------------------------------------------
start

	sei
	lda #<startirq
	sta $0314
	lda #>startirq
	sta $0315
	asl $d019
	lda #$7b
	sta $dc0d
	lda #$81
	sta $d01a
	lda #$1b
	sta $d011
	lda #$58
	sta $d012

	lda #$00
	sta $d020
	sta $d021

	jsr init

	lda #$00
	jsr $1000

;------------------------------------------------------------
	cli	

-	lda generate
	beq -
	
	jsr clear
	jsr maketechtecher
	jsr makeysiner
	
	lda #0
	sta generate
	sta fadepnt
	lda #1
	sta fadein
	
	jmp -	
	
;------------------------------------------------------------

startirq

	inc border
	
	ldx #$77
-
	dex
	bne -
	
	dec border

	lda #<mainirq
	sta $0314
	lda #>mainirq
	sta $0315

	jmp ri

mainirq

	inc border

	lda #$94
	sta $dd00

	ldx #4
-	dex
	bne -

	jsr shower

	ldx #$33
-	dex
	bne -
	
	lda #$1f
	sta $d011
	lda #$c8
	sta $d016
	lda #$ec
	sta $d018
	

	inc border
	jsr $1003

	lda generate
	bne +skip
	
	inc border
	jsr techtech

	inc border
	jsr fluffy

	inc border
	jsr fade
	jsr update
	jsr textcontrol

	jmp +skip2
+skip

	lda #$e0
-	cmp $d012
	bne -
	lda #$ee
	sta $d018
	
+skip2
	
	jsr spacecontrol
		
	lda #$05
	sta border

ri
	asl $d019
	pla
	tay
	pla
	tax
	pla
	rti



fadeoutirq

	ldx cnt
	lda fadecolz,x
	sta $d020
	lda cnt
	cmp #9
	beq +loadnext
	inc cnt
	jmp ri

fadecolz .by $0,$b,$c,$f,$1,$1,$f,$c,$b,$0


+loadnext
	
	sei
	lda #$00
	sta $d01a
	lda #$08
	sta $2e
	lda #$03
	sta $2f
	
	ldx #$00
-	
	lda loadersrc1,x
	sta $c000,x
	lda loadersrc2,x
	sta $c0c0,x
	lda loadersrc3,x
	sta $c180,x
	inx
	cpx #$c0
	bne -
		
	jmp $c1f0

	
;------------------------------------------------------------
spacecontrol

	lda $dc01
	cmp #$ef
	bne +r

+space

	lda #<fadeoutirq
	sta $0314
	lda #>fadeoutirq
	sta $0315
	lda #$00
	sta $d012
	sta cnt
		
	sta $d418
	lda #$60
	sta $d011

+r	rts


;------------------------------------------------------------
textcontrol

	lda msgtimer
	beq +
	dec msgtimer
	rts
+
	lda msg
	asl
	tax
	lda mul20,x
	sta +l+1
	lda mul20+1,x
	sta +l+2
	
	ldx charx
+l	lda messages,x
	sta char
	jsr writechar
	inc charx
	lda charx
	cmp #20
	bne +b
	lda #0
	sta charx
	lda msg
	clc
	adc #$01
	cmp #40
	bne +
	lda #$00
+	sta msg
	lda #$55
	sta msgtimer
+b	
		
	rts

	
writechar


	lda charx
	asl
	clc
	adc #$30
	sta $f8
	lda #$fa
	sta $f9	
		
	lda char
	sec
	sbc #$60
	bcs +
	lda char
+	tax
	lda chars,x
	asl
	asl
	ldy #$00
	sta ($f8),y
	ldy #$28
	clc
	adc #1
	sta ($f8),y
	ldy #$01
	adc #1
	sta ($f8),y
	ldy #$29
	adc #1
	sta ($f8),y
		
	rts


charx	.by 0


chars
	.by 0,1,2,3, 4,5,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,26, 27,28,29,30, 31,32,33,0
	.by 0,0,0,0, 0,51,52,0,   0,0,0,55,     0,0,0,0,     54,0,53,0,     34,35,36,37, 45,46,47,48,49,50
	.by 0,0, 0,56,0,57
	
msg	.by 0
msgtimer .by 0

	;.text "***** abcdefghijklmnopqrstuvwxyz0123456789!".,'=?"

messages
	
msg01	.text "                    "
msg02	.text "     hmmmmm.....    "
msg03	.text "     a fli logo     "
msg04	.text " that says "fluffy" "
msg05	.text "guess that only can "
msg06	.text "  mean one thing... "
;msg07	.text "                    "
msg08	.text "    fli fluffy!!!   "

msg09	.text "        yeah!       "
msg10	.text " an oldskool dream  "
msg11	.text " finally cums true  "
msg12	.text "    thanx 2 the     "
msg13	.text "    utter rulage    "
msg14	.text "     and ownage     "
msg15	.text "of cruzer slash cml!"
;msg16	.text "                    "

msg17	.text "  mmmmm... yummie!  "
msg18	.text "      mcfluffy      "
msg19	.text "  with fli flavour  "
msg20	.text "      full of...    "
msg21	.text " quality ingredients"
msg22	.text " like fli each line "
msg23	.text " double sine dyppin'"
msg24	.text "  and tech=techin'  "

msg25	.text " all upd8in' with..."
msg26	.text " 50 frames per 2nd! "
;msg27	.text "                    "
msg28	.text "     camelot...     "
msg29	.text "  keepin' it real!  "
;msg30	.text "                    "
msg31	.text "  faster...         "
msg32	.text "      harder...     "
msg33	.text "          kroozer!  "
;msg34	.text "                    "
msg35	.text "  b=boys, fli=girls "
msg36	.text "  throw ya hands... "
msg37	.text "     in the air     "
msg38	.text " aah yeah, like ya  "
msg39	.text "  just don't care!  "
;msg40	.text "                    "
	
	;.text "little fluffy clouds"
	;.text "        bah!        "
	

mul20
	.wo msg01,msg02,msg03,msg04,msg05,msg06,msg01,msg08,msg09,msg10
	.wo msg11,msg12,msg13,msg14,msg15,msg01,msg17,msg18,msg19,msg20
	.wo msg21,msg22,msg23,msg24,msg25,msg26,msg01,msg28,msg29,msg01
	.wo msg31,msg32,msg33,msg01,msg35,msg36,msg37,msg38,msg39,msg01

mul80	.wo 0,80,160,240,320,400

;------------------------------------------------------------
fade
	lda fadein
	bne +in
	lda fadeout
	bne +out
	rts
+in
	ldx fadepnt
	lda d011,x
	and #$3f
	sta d011,x
	inx
	stx fadepnt
	cpx #8
	bne +
	lda #0
	sta fadein
+	
	rts
+out
	ldx fadepnt
	lda d011,x
	ora #$70
	sta d011,x
	inx
	stx fadepnt
	cpx #8
	bne +
	lda #0
	sta fadeout
	jmp newfx
+
	rts

;------------------------------------------------------------
update

	inc cnt

	lda updatetype
	beq +
	lda cnt
	and #$04
	bne +skip
+
	lda techpoint+0
	clc
tadd1	adc #$00 ;techspeed+0
	sta techpoint+0
	lda techpoint+1
	clc
tadd2	adc #$00 ;techspeed+1
	sta techpoint+1
	
	lda dypppoint+0
	clc
dadd1	adc #$00 ;dyppspeed+0
	sta dypppoint+0
	lda dypppoint+1
	clc
dadd2	adc #$00 ;dyppspeed+1
	sta dypppoint+1
	

+skip
	lda fadeout
	beq +
	rts
+	
	lda fxtimer
	sec
	sbc #1
	sta fxtimer
	lda fxtimer+1
	sbc #0
	sta fxtimer+1
	bmi +
	rts
+
	lda #1
	sta fadeout
	lda #0
	sta fadepnt
	rts
	

;------------------------------------------------------------
newfx

	lda #1
	sta generate
	
	ldx fx
	inx
	cpx numfx
	bne +
	ldx #1
+	stx fx
	
	txa
	asl
	tax
	lda fxs,x
	sta +l+1
	lda fxs+1,x
	sta +l+2

	ldx #0
-
+l	lda fx1,x
	sta thisfx,x
	inx
	cpx #15
	bne -
	
	lda techoffset+0
	sta techpoint+0
	lda techoffset+1
	sta techpoint+1
	lda dyppoffset+0
	sta dypppoint+0
	lda dyppoffset+1
	sta dypppoint+1
	
	lda techspeed+0
	sta tadd1+1
	lda techspeed+1
	sta tadd2+1
	lda dyppspeed+0
	sta dadd1+1
	lda dyppspeed+1
	sta dadd2+1

	rts

;------------------------------------------------------------

fluffy

	lda #$34
	sta $01
	
	clc
	jsr zpiniter

	lda #$37
	sta $01
	inc border
	lda #$34
	sta $01


	ldx dypppoint+0
	ldy dypppoint+1
	jsr ysiner

	
	lda #$37
	sta $01
	inc border
	lda #$ee
	sta $d018
	lda #$34
	sta $01

	lda #0
	sta segment	
-loop

	jsr dyppcontrol2

	inc segment
	lda segment
	cmp #3
	beq +

	;jmp +

	lda #$37
	sta $01
	inc border
	lda #$34
	sta $01
	
	;move zp-adrs 1 char up...
	jsr zpmover

	lda #$37
	sta $01
	dec border
	lda #$34
	sta $01
	
	jmp -loop
+

	lda #$37
	sta $01
	
	rts	
	



	
;------------------------------------------------------------
dyppcontrol2

;uses pointer-tables instead of dypperjumpvec



;recycle.by 0,1,2,3,4,5,6,7,8,5,10,11,12,1,2,3,4,1,2,3,4,21,22,23,24,0
;orig	.by 1,1,1,1,1,1,1,1,1,0,1, 1, 1, 0,0,0,0,0,0,0,0, 1, 1, 1, 1,0


;-16

	ldx segment
	
cpydisp	cpx #$00 ;ydisp+0
	bne +
ldys	lda #$00 ;ys+0
	and #$07
	tax
ldp1	lda dypppnt+$00,x
	sta +j+1
ldp2	lda dypppnt+$08,x
	sta +j+2
	ldy #$00+24
	ldx #$00+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+2
	bne +
	lda #$00 ;ys+2
	and #$07
	tax
	lda dypppnt+$10,x
	sta +j+1
	lda dypppnt+$18,x
	sta +j+2
	ldy #$08+24
	ldx #$01+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+2
	bne +
	lda #$00 ;ys+2
	and #$07
	tax
	lda dypppnt+$20,x
	sta +j+1
	lda dypppnt+$28,x
	sta +j+2
	ldy #$10+24
	ldx #$02+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+6
	bne +
	lda #$00 ;ys+6
	and #$07
	tax
	lda dypppnt+$30,x
	sta +j+1
	lda dypppnt+$38,x
	sta +j+2
	ldy #$18+24
	ldx #$03+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+8
	bne +
	lda #$00 ;ys+8
	and #$07
	tax
	lda dypppnt+$40,x
	sta +j+1
	lda dypppnt+$48,x
	sta +j+2
	ldy #$20+24
	ldx #$04+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+10
	bne +
	lda #$00 ;ys+10
	and #$07
	tax
	lda dypppnt+$50,x
	sta +j+1
	lda dypppnt+$58,x
	sta +j+2
	ldy #$28+24
	ldx #$05+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+12
	bne +
	lda #$00 ;ys+12
	and #$07
	tax
	lda dypppnt+$60,x
	sta +j+1
	lda dypppnt+$68,x
	sta +j+2
	ldy #$30+24
	ldx #$06+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+14
	bne +
	lda #$00 ;ys+14
	and #$07
	tax
	lda dypppnt+$70,x
	sta +j+1
	lda dypppnt+$78,x
	sta +j+2
	ldy #$38+24
	ldx #$07+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+16
	bne +
	lda #$00 ;ys+16
	and #$07
	tax
	lda dypppnt+$80,x
	sta +j+1
	lda dypppnt+$88,x
	sta +j+2
	ldy #$40+24
	ldx #$08+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+18
	bne +
	lda #$00 ;ys+18
	and #$07
	tax
	lda dypppnt+$50,x
	sta +j+1
	lda dypppnt+$58,x
	sta +j+2
	ldy #$48+24
	ldx #$09+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+20
	bne +
	lda #$00 ;ys+20
	and #$07
	tax
	lda dypppnt+$a0,x
	sta +j+1
	lda dypppnt+$a8,x
	sta +j+2
	ldy #$50+24
	ldx #$0a+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+22
	bne +
	lda #$00 ;ys+22
	and #$07
	tax
	lda dypppnt+$b0,x
	sta +j+1
	lda dypppnt+$b8,x
	sta +j+2
	ldy #$58+24
	ldx #$0b+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+24
	bne +
	lda #$00 ;ys+24
	and #$07
	tax
	lda dypppnt+$c0,x
	sta +j+1
	lda dypppnt+$c8,x
	sta +j+2
	ldy #$60+24
	ldx #$0c+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+26
	bne +
	lda #$00 ;ys+26
	and #$07
	tax
	lda dypppnt+$10,x
	sta +j+1
	lda dypppnt+$18,x
	sta +j+2
	ldy #$68+24
	ldx #$0d+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+28
	bne +
	lda #$00 ;ys+28
	and #$07
	tax
	lda dypppnt+$20,x
	sta +j+1
	lda dypppnt+$28,x
	sta +j+2
	ldy #$70+24
	ldx #$0e+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+30
	bne +
	lda #$00 ;ys+30
	and #$07
	tax
	lda dypppnt+$30,x
	sta +j+1
	lda dypppnt+$38,x
	sta +j+2
	ldy #$78+24
	ldx #$0f+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+16
	bne +
	lda #$00 ;ys+16
	and #$07
	tax
	lda dypppnt+$40,x
	sta +j+1
	lda dypppnt+$48,x
	sta +j+2
	ldy #$80+24
	ldx #$10+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+34
	bne +
	lda #$00 ;ys+34
	and #$07
	tax
	lda dypppnt+$10,x
	sta +j+1
	lda dypppnt+$18,x
	sta +j+2
	ldy #$88+24
	ldx #$11+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+36
	bne +
	lda #$00 ;ys+36
	and #$07
	tax
	lda dypppnt+$20,x
	sta +j+1
	lda dypppnt+$28,x
	sta +j+2
	ldy #$90+24
	ldx #$12+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+38
	bne +
	lda #$00 ;ys+38
	and #$07
	tax
	lda dypppnt+$30,x
	sta +j+1
	lda dypppnt+$38,x
	sta +j+2
	ldy #$98+24
	ldx #$13+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+40
	bne +
	lda #$00 ;ys+40
	and #$07
	tax
	lda dypppnt+$40,x
	sta +j+1
	lda dypppnt+$48,x
	sta +j+2
	ldy #$a0+24
	ldx #$14+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+42
	bne +
	lda #$00 ;ys+42
	and #$07
	tax
	lda dypppnt+$0150,x
	sta +j+1
	lda dypppnt+$0158,x
	sta +j+2
	ldy #$a8+24
	ldx #$15+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+44
	bne +
	lda #$00 ;ys+44
	and #$07
	tax
	lda dypppnt+$0160,x
	sta +j+1
	lda dypppnt+$0168,x
	sta +j+2
	ldy #$b0+24
	ldx #$16+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+46
	bne +
	lda #$00 ;ys+46
	and #$07
	tax
	lda dypppnt+$0170,x
	sta +j+1
	lda dypppnt+$0178,x
	sta +j+2
	ldy #$b8+24
	ldx #$17+3
+j	jsr dypper
	ldx segment
+
	cpx #$00 ;ydisp+48
	bne +
	lda #$00 ;ys+48
	and #$07
	tax
	lda dypppnt+$0180,x
	sta +j+1
	lda dypppnt+$0188,x
	sta +j+2
	lda dypppnt+$00,x
	sta +j2+1
	lda dypppnt+$08,x
	sta +j2+2
	ldy #$c0+24
	ldx #$18+3
+j	jsr dypper

	ldy #$c8+24
	ldx #$19+3
+j2	jsr dypper

+
	rts
	

	
;------------------------------------------------------------
techtech

	lda #$34
	sta $01
	
	ldx techpoint+0
	ldy techpoint+1
	
	clc	
	jsr techtecher
	
	lda #$37
	sta $01
	
	rts
	
;------------------------------------------------------------

init

	lda #$36
	sta $01

	jsr vicinit
	jsr clear
	jsr newfx
	jsr makeluts
	jsr makedypper
	jsr makeshower	
	jsr makezpiniter
	jsr makezpmover
	jsr maketechtecher
	jsr makeysiner
	
	lda #0
	sta generate
	lda #1
	sta fadein

	lda #$0b
	sta $d011
	jsr colorinit2
	
	
	rts

;------------------------------------------------------------
vicinit

	lda #$94
	sta $dd00
	lda #$ee
	sta $d018
	lda #$c8
	sta $d016
	lda #$1b
	sta $d011
	lda #$00
	sta $d015


	ldx #0
	txa
-	
	sta $d800,x
	sta $d900,x
	sta $da00,x
	sta $db00,x
	inx
	bne -
-	
	lda #$05
	sta $d800,x
	lda #$01
	sta $d9c0,x
	inx
	cpx #$c0
	bne -


	ldx #0
	lda #$00
-	
	sta $fa30,x
	inx
	cpx #$50
	bne -

	rts


;------------------------------------------------------------
colorinit2


	lda #$00
	ldx #$80
-	
	sta $d800,x
	dex
	bne -

	ldx #0
	lda #$04
-	
	sta $d8c8,x
	inx
	cpx #$f0
	bne -

	rts
	
;------------------------------------------------------------
clear

	
	lda #0
	tax
-	
	sta bitmap+$0640,x
	sta bitmap+$0700,x
	sta bitmap+$0800,x
	sta bitmap+$0900,x
	sta bitmap+$0a00,x
	sta bitmap+$0b00,x
	sta bitmap+$0c00,x
	sta bitmap+$0d00,x
	inx
	bne -
	
	rts
	
;------------------------------------------------------------
makeluts


	lda #$34
	sta $01
	
	
	
	;make dypppp (used to determine which of the 3 dypp "anims" (up/straight/down) to use)
	 
	lda #>dypppnt+$02
	sta dypppp
	
	ldx #1
-
	txa
	bmi +
	lda #>dypppnt+$00
	jmp +j
+	lda #>dypppnt+$04
+j	sta dypppp,x
	inx
	bne -


	jmp +notest
	;test...
	lda #>dypppnt+$02
	ldx #0
-
	sta dypppp,x
	inx
	bne -

+notest

	
	
	lda #$37
	sta $01
	
	rts
		
;------------------------------------------------------------
makedypper


.la height=26

	sei
	lda #$34
	sta $01


	lda #<dypper
	sta $fe
	lda #>dypper
	sta $ff


	lda #0
	sta +version

-loop4

	lda #0
	sta +x

	

-loop3


	;if not original, skip it...
	 
	ldx +x
	lda orig,x
	bne +
	jmp +skipit
+

	;fetch gfx/cols...

	ldx +x
	lda recycle,x
	beq +black
	sec
	sbc #1
	pha
	sta $f8
	lda #0
	sta $f9
	;*18...
	asl $f8
	rol $f9
	asl $f8
	rol $f9
	asl $f8
	rol $f9
	asl $f8
	rol $f9
	pla
	asl
	clc
	adc $f8
	sta $f8
	lda #0
	adc $f9
	sta $f9

	lda $f8
	sta $fa
	
	lda +version
	asl
	asl
	clc
	adc $f9
	adc #>logosrc
	sta $f9
	adc #$02
	sta $fb
	
	ldy #0
-
	lda ($f8),y
	sta dyppergfx+4,y
	lda ($fa),y
	sta dyppercols+4,y
	iny
	cpy #18
	bne -
	
	jmp +

+black

	ldy #0
	tya
-
	sta dyppergfx+3,y
	sta dyppercols+3,y
	iny
	cpy #18
	bne -

+	

	
	lda #0
	sta +ydisp
	


	

-loop2



	ldy #0
	tya
-
	sta gfxused,y
	sta colused,y
	iny
	cpy #height
	bne -


	;skip upper/lower bytes, depending which way it points...
	lda +version
	cmp #0
	bne +
	;version==0 (up)
	lda #1
	;sta gfxused+0
	;sta colused+0
	jmp +j
+
	cmp #1
	bne +
	;version==1 (straight)
	lda #1
	sta gfxused+0
	sta colused+0
	sta gfxused+height-1
	sta colused+height-1
	jmp +j
+
	;version==2 (down)
	lda #1
	;sta gfxused+height-1
	;sta colused+height-1
+j
	
	
	
	
	;store dypper-pointers (replaces jumpers)...
	lda +x
	sta $f0
	lda #$00
	sta $f1
	asl $f0
	rol $f1
	asl $f0
	rol $f1
	asl $f0
	rol $f1
	asl $f0
	rol $f1
	lda +version
	asl
	clc
	adc $f1
	adc #>dypppnt
	sta $f1
	ldy +ydisp
	lda $fe
	sta ($f0),y
	tya
	ora #$08
	tay
	lda $ff
	sta ($f0),y
	
	
	
;make gfx-dypper...

	
	lda +ydisp
	asl
	clc
	adc #$02
	sta +s1+1
		
	lda #0
	sta +y

-loop

	ldy +y
	lda gfxused,y
	bne +skip
	lda dyppergfx,y
	sta +l1+1
	

	ldy #0
-
	lda dyppersrc,y
	sta ($fe),y
	iny
	cpy #4
	bne -
	
	jsr yaddfe
	
	
	ldx +y
	lda #1
	sta gfxused,x
	
	;check for other similar bytes...
	
	ldy +s1+1
	iny
	iny
	sty +s2+1
	
	inx
	cpx #height
	beq +skip
-check	
	lda +l1+1
	cmp dyppergfx,x
	beq +found
-cont	
	inc +s2+1
	inc +s2+1
	inx
	cpx #height
	bne -check
	jmp +skip
+found	
	lda gfxused,x
	bne -cont
	lda #1
	sta gfxused,x
	ldy #0
	lda dyppersrc2+0
	sta ($fe),y
	iny
	lda dyppersrc2+1
	sta ($fe),y
	iny
	jsr yaddfe
	jmp -cont
	
	
+skip
	

	inc +s1+1
	inc +s1+1
	
	inc +y
	lda +y
	cmp #height
	bne -loop
	

+end




;make color-dypper...
		

	lda +ydisp
	asl
	clc
	adc #$72
	sta +s1+1

	lda #0
	sta +y
	sta +txycop
-loop

	ldy +y
	lda colused,y
	beq +
	jmp +skip   ;if color is allready drawn, skip it
+
	lda dyppercols,y
	sta +l1+1
	bne +
	jmp +skip   ;if byte=black, skip color
+

	;copy txa,tay for 1st byte...
	lda +txycop
	bne +
	ldy #0
	lda +txysrc
	sta ($fe),y
	iny
	lda +txysrc+1
	sta ($fe),y
	iny
	jsr yaddfe
	lda #1
	sta +txycop
+

	jsr singlecolorcheck
	
	ldy #0
-
	lda dyppersrc,y
	sta ($fe),y
	iny
	cpy #4
	bne -

	jsr yaddfe



	ldx +y
	lda #1
	sta colused,x
	
	;check for other similar bytes...
	
	ldy +s1+1
	iny
	iny
	sty +s2+1
	
	inx
	cpx #height
	beq +skip
-check	
	;check for same color...
	lda +l1+1
	cmp dyppercols,x
	beq +found

	;check for singlecolors with same color in left nybble...
	lda +l1+1
	and #$f0
	cmp dyppercols,x
	beq +found

	;if(singlecolor) singlecolorcheck has allready checked for non-singlecolors that matches...

-cont	
	inc +s2+1
	inc +s2+1
	inx
	cpx #height
	bne -check
	jmp +skip
+found	
	lda colused,x
	bne -cont
	lda #1
	sta colused,x
	ldy #0
	lda dyppersrc2+0
	sta ($fe),y
	iny
	lda dyppersrc2+1
	sta ($fe),y
	iny
	jsr yaddfe
	jmp -cont
	

+skip


	inc +s1+1
	inc +s1+1
	
	inc +y
	lda +y
	cmp #height
	beq +end
	jmp -loop
	

+end

	ldy #0
	lda #$60
	sta ($fe),y
	iny
	jsr yaddfe
	
+skippy
	
	inc +ydisp
	lda +ydisp
	cmp #8
	beq +
	jmp -loop2
	
+


+skipit

	
	inc +x
	lda +x
	cmp #26
	beq +
	
	jmp -loop3

+
	
	inc +version
	lda +version
	cmp #3
	beq +
	jmp -loop4
+


	lda #$36
	sta $01

	rts






singlecolorcheck

	;if(singlecolor) check for non-singlecolors that matches...
	;if(match found) color is corrected from singlecolor to the matching "multicolor",
	;and it will be found later, hopefully
	
	lda +l1+1
	and #$0f
	beq +
	rts
+
	ldx +y
	inx
	cpx #height
	beq +end
-loop	
	lda dyppercols,x
	and #$f0
	cmp +l1+1
	bne +

	;match found!
	lda dyppercols,x
	sta +l1+1
	rts
+
	inx
	cpx #height
	bne -loop
	
+end
	rts






+x	.by 0
+y	.by 0
+ydisp	.by 0
+version .by 0

+txycop	.by 0
+txysrc
	txa
	tay
	
dyppersrc
	
+l1	lda #%00000000
+s1	sta ($02),y

dyppersrc2
	
+s2	sta ($02),y


+last	.by 0

dyppergfx

	.by 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

	
dyppercols

	.by 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

	

gfxused	.text "                          "
colused	.text "                          "
	
recycle	.by 0,1,2,3,4,5,6,7,8,5,10,11,12,1,2,3,4,1,2,3,4,21,22,23,24,0
orig	.by 1,1,1,1,1,1,1,1,1,0,1, 1, 1, 0,0,0,0,0,0,0,0, 1, 1, 1, 1,0



		
;------------------------------------------------------------
makeshower

	lda #<shower
	sta $fe
	lda #>shower
	sta $ff
	
	lda #0
	sta +y
	
-loop
	lda +y
	and #$07
	tay
	clc
	adc #<d011
	sta +l1+1

	lda +y
	sec
	sbc #7
	bcs +
	lda +l1+1
	clc
	adc #$08
	sta +l1+1
+
	lda d018,y
	sta +l2+1
	;lda +l3+1
	;clc
	;adc #1
	;sta +l3+1
	;lda +l3+2
	;adc #0
	;sta +l3+2
	
	ldy #0
-
	lda showersrc,y
	sta ($fe),y
	iny
	cpy #20
	bne -
	jsr yaddfe
	
	inc +y
	lda +y
	cmp #$34
	bne -loop
	
	lda #$60
	ldy #0
	sta ($fe),y
	
	rts
	
+y	.by 0
	
showersrc

+l1	lda d011
	sta $d011
+l2	lda #$00
	sta $d018
	lda #$00
	and #$07
	ora #$d8
	sta $d016
	nop
	;nop
		
	
;------------------------------------------------------------
makezpmover

	lda #<zpmover
	sta $fe
	lda #>zpmover
	sta $ff
	
	lda #0
	sta +y
	
-loop

	;check adr for splitting...
	
	lda $fe
	sec
	sbc #$c0
	bcc +
	lda $ff
	and #$03
	bne +
	
	ldy #$00
	lda #$4c
	sta ($fe),y
	iny
	lda #$e0
	sta ($fe),y
	iny
	lda $ff
	clc
	adc #$01
	sta ($fe),y
	
	sta $ff
	lda #$e0
	sta $fe
+

	
	ldy #0
-
	lda zpmoversrc,y
	sta ($fe),y
	iny
	cpy #8
	bne -
	jsr yaddfe

	inc +l1+1
	inc +s1+1
	inc +l2+1
	inc +s2+1

	inc +y
	lda +y
	cmp #$50
	bne -loop
	
	lda #$60
	ldy #0
	sta ($fe),y
	
	rts
	
+y	.by 0
	
zpmoversrc

+l1	lda $12
+s1	sta $02
+l2	lda $82
+s2	sta $72
		
	
;------------------------------------------------------------
makezpiniter



	lda #$34
	sta $01

	;calc gfx-adrs...
	
	lda #$40
	sta +adr
	lda #$c6
	sta +adr+1

	ldy #$00
	ldx #$00
-	
	lda +adr
	sta temp+$02,y
	lda +adr+1
	sta temp+$03,y
	
	inc +adr

	inx	
	iny
	iny
	tya
	and #$0f
	bne +
	
	lda +adr
	clc
	adc #$38
	sta +adr
	lda +adr+1
	adc #$01
	sta +adr+1
+	
	cpy #$60
	bne -



	;calc color-adrs...
	
	lda #$c8
	sta +adr
	lda #$e0
	sta +adr+1

	ldy #$00
	ldx #$00
-	
	lda +adr
	sta temp+$72,y
	lda +adr+1
	sta temp+$73,y
	
	lda +adr+1
	clc
	adc #$04
	sta +adr+1
	
	inx
	iny
	iny
	tya
	and #$0f
	bne +
	
	lda +adr+1
	and #$03
	ora #$e0
	sta +adr+1
	
	lda +adr
	clc
	adc #$28
	sta +adr
	lda +adr+1
	adc #$00
	sta +adr+1
+	
	cpy #$60
	bne -





	lda #<zpiniter
	sta $fe
	lda #>zpiniter
	sta $ff
	
	
	
	;gfx-adrs...
	
	ldx #0
-loop1

	lda temp+$03,x
	sta +l2+1

	txa
	and #$0f
	beq +ldasta
	
	ldy #0
-
	lda zpinitersrc+2,y
	sta ($fe),y
	iny
	cpy #2
	bne -
	jsr yaddfe
	jmp +
	
+ldasta
	
	ldy #0
-
	lda zpinitersrc,y
	sta ($fe),y
	iny
	cpy #4
	bne -
	jsr yaddfe

+
	inc +s2+1
	inc +s2+1
	
	inx
	inx
	cpx #$60
	bne -loop1
	


	

	;color-adrs...
	
	
	ldx #0
-loop2
	
	lda temp+$73,x
	beq +skip
	sta +l2+1
	
	txa
	clc
	adc #$73
	sta +s2+1
	
	ldy #0
-
	lda zpinitersrc,y
	sta ($fe),y
	iny
	cpy #4
	bne -
	jsr yaddfe

	
	;search for similar bytes...

	cpx #$60-2
	beq +end

	txa
	pha

-search
	inx
	inx
	cpx #$60
	beq +done

	lda temp+$73,x
	cmp +l2+1
	bne -search

	txa
	clc
	adc #$73
	sta +s2+1

	ldy #0
-	
	lda zpinitersrc+2,y
	sta ($fe),y
	iny
	cpy #2
	bne -
	jsr yaddfe
	lda #0
	sta temp+$73,x
	jmp -search
+done
	pla
	tax
+skip
	inx
	inx
	cpx #$60
	bne -loop2
+end
	
	lda #$60
	ldy #0
	sta ($fe),y


	lda #$37
	sta $01
	
	rts
	
	
zpinitersrc

+l2	lda #$00
+s2	sta $03
		

+adr	.wo $c640


;------------------------------------------------------------
maketechtecher


	lda #<techtecher
	sta $fe
	lda #>techtecher
	sta $ff
	
	lda #0
	sta +y

	ldy #0
-
	lda techtechersrc_,y
	sta techtechersrc,y
	iny
	cpy #25
	bne -
	
-loop
	
	
	ldy #0
-
	lda techtechersrc,y
	sta ($fe),y
	iny
	cpy #25
	bne -
	jsr yaddfe


	;check adr for splitting...
	
	lda $fe
	sec
	sbc #$c0
	bcc +
	lda $ff
	and #$03
	bne +
	
	ldy #$00
	lda #$4c
	sta ($fe),y
	iny
	lda #$e0
	sta ($fe),y
	iny
	lda $ff
	clc
	adc #$01
	sta ($fe),y
	
	sta $ff
	lda #$e0
	sta $fe
+


	lda +l1+1
	clc
	adc techspread+0 ;#$04
	sta +l1+1

	lda +l2+1
	clc
	adc techspread+1 ;#$07
	sta +l2+1

	lda +s1+1
	clc
	adc #20
	sta +s1+1
	lda +s1+2
	adc #$00
	sta +s1+2

	lda +s2+1
	clc
	adc #$02
	sta +s2+1

	lda +o1+1
	clc
	adc #$01
	sta +o1+1
	and #$07
	bne +
	lda +o1+1
	and #$c0
	clc
	adc #$40
	sta +o1+1
	lda +o2+1
	clc
	adc #$28
	sta +o2+1
+
	lda +s3+1
	clc
	adc #$02
	sta +s3+1
	
	inc +y
	lda +y
	cmp #$30
	beq +
	jmp -loop
+
	
	lda #$60
	ldy #0
	sta ($fe),y
	
	rts
	
+y	.by 0
	
techtechersrc

;********* COPIED FROM BELOW!!! ***********

+l1	lda techsine,x
+l2	adc techsine,y
	lsr
+s1	sta shower+132 ;(20*6+12)
	and #$38
+o1	ora #$40
+s2	sta $02
	and #$38
	lsr
	lsr
	lsr
+o2	ora #$c8
+s3	sta $72

;********* COPIED FROM BELOW!!! ***********


techtechersrc_

+l1	lda techsine,x
+l2	adc techsine,y
	lsr
+s1	sta shower+132 ;(20*6+12)
	and #$38
+o1	ora #$40
+s2	sta $02
	and #$38
	lsr
	lsr
	lsr
+o2	ora #$c8
+s3	sta $72


;------------------------------------------------------------

.la cpydisp_=cpydisp+1
.la ldys_=ldys+1
.la subys_=0; subys+1


makeysiner

	lda #<ysiner
	sta $fe
	lda #>ysiner
	sta $ff
	
	lda #0
	sta +x
	
	lda #$00
	sta +l1+1
	sta +a1+1
	lda dyppspread+0
	sta +l2+1
	lda dyppspread+1
	sta +a2+1


	ldy #0
-
	lda ysinersrc_,y
	sta ysinersrc,y
	iny
	cpy #43
	bne -


	
-loop

	ldx +x
	lda +os,x
	sta +o+1
		
	ldy #0
-
	lda ysinersrc,y
	sta ($fe),y
	iny
	cpy #35
	bne -
	jsr yaddfe

	;skip copying "ora" if it's "ora #0"...
	
	;ldx #0
	lda +o+1
	eor #1
	asl
	tax
	ldy #0
-
	lda +o,x ;ysinersrc+35,y
	sta ($fe),y
	iny
	inx
	cpx #8
	bne -
	jsr yaddfe

	lda +l1+1
	clc
	adc dyppspread+0
	clc
	adc dyppspread+0
	sta +l1+1
	clc
	adc dyppspread+0
	sta +l2+1

	lda +a1+1
	clc
	adc dyppspread+1
	clc
	adc dyppspread+1
	sta +a1+1
	clc
	adc dyppspread+1
	sta +a2+1
	
	
	lda +s1+1
	clc
	adc #30
	sta +s1+1
	sta +sub1+1
	lda +s1+2
	adc #0
	sta +s1+2
	sta +sub1+2

	lda +s2+1
	clc
	adc #30
	sta +s2+1
	lda +s2+2
	adc #0
	sta +s2+2
	
	;lda #43
	lda +o+1
	asl
	clc
	adc #41
	clc
	adc +s3+1
	sta +s3+1
	lda +s3+2
	adc #0
	sta +s3+2

	lda +s4+1
	clc
	adc #30
	sta +s4+1
	lda +s4+2
	adc #0
	sta +s4+2

	lda +s5+1
	clc
	adc #30
	sta +s5+1
	lda +s5+2
	adc #0
	sta +s5+2
	
	
	inc +x
	lda +x
	cmp #26-1
	beq +
	jmp -loop
+	
	lda #$60
	ldy #0
	sta ($fe),y
	
	rts
	
+x	.by 0


+os	.by 0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,1,1, 0

ysinersrc

; ****** copied from ysinersrc_! *******

+l1	lda dyppsine,x
	clc
+a1	adc dyppsine,y
	lsr
+s1	sta ldys_ ;ys
	lsr
	lsr
	lsr
+s2	sta cpydisp_ ;ydisp
+l2	lda dyppsine+4,x
	clc
+a2	adc dyppsine+4,y
	lsr
	sec
+sub1	sbc ldys_
+s3	sta ysiner+33; +smc+1
+smc	lda dypppp
+o	ora #$00
+s4	sta ldp1+2
+s5	sta ldp2+2

; ****** copied from ysinersrc_! *******


ysinersrc_


+l1	lda dyppsine,x
	clc
+a1	adc dyppsine,y
	lsr
+s1	sta ldys_ ;ys
	lsr
	lsr
	lsr
+s2	sta cpydisp_ ;ydisp
+l2	lda dyppsine+4,x
	clc
+a2	adc dyppsine+4,y
	lsr
	sec
+sub1	sbc ldys_
+s3	sta ysiner+33; +smc+1
+smc	lda dypppp
+o	ora #$00
+s4	sta ldp1+2
+s5	sta ldp2+2

	;43 bytes


	
;------------------------------------------------------------

yaddfe
	tya
	clc
	adc $fe
	sta $fe
	lda #0
	adc $ff
	sta $ff
	rts
;------------------------------------------------------------
base/fli_floffy.txt · Last modified: 2015-04-17 04:31 (external edit)