dos33fsprogs/games/tfv/tfv_opener.s

165 lines
2.1 KiB
ArmAsm

;=============================
; show VMW splash screen
;=============================
opening:
jsr normal_text
lda #100
sta MATCH
jsr draw_logo
jsr page_flip
;clc
;infinity:
;bcc infinity
; Draw the shining band
lda #0
sta MATCH
shine_loop:
jsr draw_logo
jsr page_flip
inc MATCH
lda MATCH
cmp #30
bne shine_loop
; Done, print string
lda #<(vmwsw_string)
sta OUTL
lda #>(vmwsw_string)
sta OUTH
jsr move_and_print ; print("A VMW SOFTWARE PRODUCTION");
jsr page_flip
jsr wait_until_keypressed
rts
;=====================
; display part of logo
;=====================
;
draw_segment:
lda #0
sta LOGO_LOOP
segment_loop:
lda YADD
clc
adc YY
sta YY ; yy=yy+yadd
lda COLOR1
sta COLOR ; color=COLOR1
lda MATCH ; if (ram[XX]==ram[MATCH])
cmp XX
bne nocolmatch1
lda COLOR ; color_equals(ram[COLOR1]*3);
clc
adc COLOR1
adc COLOR1
sta COLOR
nocolmatch1:
lda YY
sta V2
lda XX
clc
adc #9
tay
lda #10
tax
jsr vlin ; X,V2 at Y vlin(10,ram[YY],9+ram[XX]);
lda COLOR2
sta COLOR ; color=COLOR2
lda MATCH ; if (ram[XX]==ram[MATCH])
cmp XX
bne nocolmatch2
lda COLOR ; color_equals(ram[COLOR2]*3);
clc
adc COLOR2
adc COLOR2
sta COLOR
nocolmatch2:
lda #34
sta V2
lda XX
clc
adc #9
tay
lda YY
cmp #34
beq skip_bottom ; if (ram[YY]==34) skip
tax
jsr vlin ; X,V2 at Y vlin(ram[YY],34,9+ram[XX]);
skip_bottom:
inc XX ; ram[XX]++;
inc LOGO_LOOP
lda LOGO_LOOP
cmp #4
bne segment_loop
lda YADD ; ram[YADD]=-ram[YADD];
eor #$ff
clc
adc #1
sta YADD
rts
;=================
; display VMW logo
;=================
;
draw_logo:
lda #0
sta XX ; start of logo
lda #10
sta YY ; draw at Y=10
lda #6
sta YADD ; step of 6
lda #$00
sta COLOR2
lda #$11
sta COLOR1 ; first colors are red/black
jsr draw_segment
lda #$44
sta COLOR2 ; now red/green
jsr draw_segment
lda #$22
sta COLOR1 ; now green/blue
jsr draw_segment
jsr draw_segment
jsr draw_segment
lda #$00
sta COLOR2 ; now blue/black
jsr draw_segment
rts
vmwsw_string:
.byte 8,20,"A VMW SOFTWARE PRODUCTION",0