dos33fsprogs/demos/applebot_demo/credits.s

267 lines
3.4 KiB
ArmAsm

switch_to_credits:
; clear bottom of page2 and set split
bit TEXTGR
ldx #39
lda #' '|$80
clear_bottom_loop:
sta $A50,X
sta $AD0,X
sta $B50,X
sta $BD0,X
dex
bpl clear_bottom_loop
; set "done"
lda #DONE
sta command
; clear time
lda #0
sta seconds
sta ticks
rts
;======================================
;======================================
; display credits
;======================================
;======================================
display_credits:
; display music bars
; a bar
lda A_VOLUME
lsr
lsr
sta draw_a_bar_left_loop+1
lda #3
sec
sbc draw_a_bar_left_loop+1
sta draw_a_bar_right_loop+1
ldx #4
lda #' '|$80
draw_a_bar_left_loop:
cpx #$4
bne skip_al_bar
eor #$80
skip_al_bar:
sta $A50,X
dex
bpl draw_a_bar_left_loop
ldx #4
lda #' '
draw_a_bar_right_loop:
cpx #$4
bne skip_ar_bar
eor #$80
skip_ar_bar:
sta $A50+35,X
dex
bpl draw_a_bar_right_loop
; b bar
lda B_VOLUME
lsr
lsr
sta draw_b_bar_left_loop+1
lda #3
sec
sbc draw_b_bar_left_loop+1
sta draw_b_bar_right_loop+1
ldx #4
lda #' '|$80
draw_b_bar_left_loop:
cpx #$4
bne skip_bl_bar
eor #$80
skip_bl_bar:
sta $AD0,X
dex
bpl draw_b_bar_left_loop
ldx #4
lda #' '
draw_b_bar_right_loop:
cpx #$4
bne skip_br_bar
eor #$80
skip_br_bar:
sta $AD0+35,X
dex
bpl draw_b_bar_right_loop
; c
lda C_VOLUME
lsr
lsr
sta draw_c_bar_left_loop+1
lda #3
sec
sbc draw_c_bar_left_loop+1
sta draw_c_bar_right_loop+1
ldx #4
lda #' '|$80
draw_c_bar_left_loop:
cpx #$4
bne skip_cl_bar
eor #$80
skip_cl_bar:
sta $B50,X
dex
bpl draw_c_bar_left_loop
ldx #4
lda #' '
draw_c_bar_right_loop:
cpx #$4
bne skip_cr_bar
eor #$80
skip_cr_bar:
sta $B50+35,X
dex
bpl draw_c_bar_right_loop
; write credits
actual_credits:
lda ticks
cmp #25
bne done_credits
lda seconds
; increment on multiples of 4 seconds
and #$3
beq next_credit
bne done_credits
next_credit:
;========================
; write the credits
write_credits:
lda which_credit
cmp #7
beq done_credits
ldx #4
outer_credit_loop:
; X is proper line
; point to start of proper output line
lda credits_address,X
sta credits_address_smc+1
lda credits_address+1,X
sta credits_address_smc+2
; load proper input location
lda which_credit
asl
tay
txa
asl
asl
asl ; *16 (already *2)
clc
adc credits_table,Y
sta write_credit_1_loop+1
lda credits_table+1,Y
adc #0
sta write_credit_1_loop+2
ldy #0
write_credit_1_loop:
lda $dede,Y
ora #$80
credits_address_smc:
sta $dede,Y
iny
cpy #16
bne write_credit_1_loop
done_credit1_loop:
dex
dex
bpl outer_credit_loop
inc which_credit
done_credits:
rts
credits_address:
.word $a50+12
.word $ad0+12
.word $b50+12
credits_table:
.word credits1
.word credits2
.word credits3
.word credits4
.word credits5
.word credits6
.word credits7
credits1:
.byte " Code: "
.byte " "
.byte " Deater "
credits2:
.byte " Music: "
.byte " "
.byte " mAZE "
credits3:
.byte " Algorithms: "
.byte " F. Sanglard "
.byte " Hellmood "
credits4:
.byte " Apple II bot "
.byte " "
.byte " Kay Savetz "
credits5:
.byte " Magic: "
.byte " "
.byte " qkumba "
credits6:
.byte " Greets: "
.byte " 4am "
.byte " French Touch "
credits7:
.byte " _ "
.byte " _|(_ _ "
.byte " (_| _) | "
which_credit:
.byte $0