mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-26 11:30:12 +00:00
81b44559b4
less sarcastic, but maybe less of a spoiler now someone on twitter suggested this
528 lines
9.6 KiB
ArmAsm
528 lines
9.6 KiB
ArmAsm
display_viewer:
|
|
|
|
lda ANIMATE_FRAME
|
|
bne we_should_animate
|
|
rts
|
|
|
|
we_should_animate:
|
|
|
|
lda ANIMATE_FRAME
|
|
asl
|
|
tay
|
|
|
|
lda VIEWER_LATCHED
|
|
cmp #$08
|
|
beq display_atrus
|
|
cmp #$40
|
|
beq display_mountains
|
|
cmp #$67
|
|
beq display_water
|
|
cmp #$47
|
|
beq display_marker
|
|
|
|
display_nothing:
|
|
|
|
lda nothing_animation,Y
|
|
sta INL
|
|
lda nothing_animation+1,Y
|
|
sta INH
|
|
|
|
lda #12
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
lda FRAMEL
|
|
and #$1f
|
|
bne done_animation
|
|
|
|
inc ANIMATE_FRAME
|
|
lda ANIMATE_FRAME
|
|
cmp #6
|
|
bne done_animation
|
|
done_nothing:
|
|
lda #0
|
|
sta ANIMATE_FRAME
|
|
|
|
done_animation:
|
|
rts
|
|
|
|
; display atrus
|
|
display_atrus:
|
|
jmp really_display_atrus
|
|
|
|
; display marker
|
|
display_marker:
|
|
jmp really_display_marker
|
|
|
|
; display water
|
|
display_water:
|
|
|
|
lda water_animation,Y
|
|
sta INL
|
|
lda water_animation+1,Y
|
|
sta INH
|
|
|
|
lda #12
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
lda FRAMEL
|
|
and #$1f
|
|
bne done_water
|
|
|
|
inc ANIMATE_FRAME
|
|
lda ANIMATE_FRAME
|
|
cmp #5
|
|
bne done_water
|
|
|
|
lda #3
|
|
sta ANIMATE_FRAME
|
|
|
|
done_water:
|
|
rts
|
|
|
|
; display_mountains
|
|
display_mountains:
|
|
|
|
lda mountain_animation,Y
|
|
sta INL
|
|
lda mountain_animation+1,Y
|
|
sta INH
|
|
|
|
cpy #4
|
|
bne fancy_put
|
|
|
|
normal_put:
|
|
lda #12
|
|
sta XPOS
|
|
lda #20
|
|
bne done_put
|
|
|
|
fancy_put:
|
|
|
|
lda #14
|
|
sta XPOS
|
|
lda #16
|
|
done_put:
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
lda FRAMEL
|
|
and #$1f
|
|
bne done_mountains
|
|
|
|
inc ANIMATE_FRAME
|
|
lda ANIMATE_FRAME
|
|
cmp #6
|
|
bne done_mountains
|
|
|
|
lda #5
|
|
sta ANIMATE_FRAME
|
|
|
|
done_mountains:
|
|
rts
|
|
|
|
|
|
really_display_marker:
|
|
lda marker_animation,Y
|
|
sta INL
|
|
lda marker_animation+1,Y
|
|
sta INH
|
|
|
|
lda #12
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
lda FRAMEL
|
|
and #$1f
|
|
bne done_marker
|
|
|
|
inc ANIMATE_FRAME
|
|
lda ANIMATE_FRAME
|
|
cmp #4
|
|
bne done_marker
|
|
|
|
lda #3
|
|
sta ANIMATE_FRAME
|
|
|
|
done_marker:
|
|
rts
|
|
|
|
|
|
|
|
|
|
really_display_atrus:
|
|
|
|
; Y coming in is animate frame << 2
|
|
|
|
bit TEXTGR ; split screen
|
|
|
|
; less than 6, as typical
|
|
; otherwise special
|
|
|
|
cpy #6
|
|
bcc atrus_load_anim ; blt
|
|
|
|
tya ; xxxx xx00 / xxxx xx10
|
|
and #$03
|
|
clc
|
|
adc #$6
|
|
tay
|
|
|
|
atrus_load_anim:
|
|
|
|
lda atrus_animation,Y ; load animation
|
|
sta INL
|
|
lda atrus_animation+1,Y
|
|
sta INH
|
|
|
|
lda #12 ; x, y pos
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop ; put sprite
|
|
|
|
lda FRAMEL ; only slowly increment
|
|
and #$1f
|
|
bne done_atrus
|
|
|
|
inc ANIMATE_FRAME ; animate, but loop
|
|
lda ANIMATE_FRAME ; the talking part
|
|
cmp #255
|
|
bne done_atrus
|
|
; so we want 0,1,2,3,4,3,4,3,4
|
|
|
|
lda #3
|
|
sta ANIMATE_FRAME
|
|
|
|
done_atrus:
|
|
lda ANIMATE_FRAME
|
|
and #$10 ; cycle every 32 animation steps
|
|
beq do_atrus_message_1
|
|
|
|
lda #<atrus_message2
|
|
sta OUTL
|
|
lda #>atrus_message2
|
|
jmp do_atrus_message
|
|
|
|
do_atrus_message_1:
|
|
lda #<atrus_message1
|
|
sta OUTL
|
|
lda #>atrus_message1
|
|
|
|
do_atrus_message:
|
|
sta OUTH
|
|
|
|
jsr move_and_print
|
|
jsr move_and_print
|
|
jsr move_and_print
|
|
jsr move_and_print
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
enter_viewer:
|
|
|
|
bit FULLGR
|
|
|
|
lda #0
|
|
sta CURSOR_VISIBLE
|
|
|
|
lda ANIMATE_FRAME
|
|
beq start_animation
|
|
|
|
stop_animation:
|
|
lda #0
|
|
sta ANIMATE_FRAME
|
|
rts
|
|
|
|
start_animation:
|
|
lda #1
|
|
sta ANIMATE_FRAME
|
|
|
|
rts
|
|
|
|
enter_control_panel:
|
|
|
|
lda #VIEWER_CONTROL_PANEL
|
|
sta LOCATION
|
|
|
|
lda #(DIRECTION_E|DIRECTION_ONLY_POINT|DIRECTION_SPLIT)
|
|
sta DIRECTION
|
|
|
|
jsr change_location
|
|
|
|
rts
|
|
|
|
|
|
control_panel_pressed:
|
|
|
|
lda CURSOR_Y
|
|
cmp #26 ; blt
|
|
bcc panel_inc
|
|
cmp #30 ; blt
|
|
bcc panel_dec
|
|
|
|
panel_latch:
|
|
|
|
lda VIEWER_CHANNEL
|
|
sta VIEWER_LATCHED ; latch value into pool state
|
|
|
|
lda #VIEWER_POOL
|
|
sta LOCATION
|
|
|
|
lda #DIRECTION_W
|
|
sta DIRECTION
|
|
jmp change_location
|
|
|
|
panel_inc:
|
|
lda CURSOR_X
|
|
cmp #18
|
|
bcs right_arrow_pressed
|
|
|
|
; 19-23 left arrow
|
|
|
|
lda VIEWER_CHANNEL
|
|
and #$f0
|
|
cmp #$90
|
|
bcs done_panel_press ; bge
|
|
lda VIEWER_CHANNEL
|
|
clc
|
|
adc #$10
|
|
sta VIEWER_CHANNEL
|
|
rts
|
|
|
|
right_arrow_pressed:
|
|
; 13-17 right arrow
|
|
|
|
lda VIEWER_CHANNEL
|
|
and #$f
|
|
cmp #9
|
|
bcs done_panel_press ; bge
|
|
inc VIEWER_CHANNEL
|
|
rts
|
|
|
|
panel_dec:
|
|
lda CURSOR_X
|
|
cmp #18
|
|
bcs right_arrow_pressed_dec
|
|
|
|
; 19-23 left arrow
|
|
|
|
lda VIEWER_CHANNEL
|
|
and #$f0
|
|
beq done_panel_press
|
|
lda VIEWER_CHANNEL
|
|
sec
|
|
sbc #$10
|
|
sta VIEWER_CHANNEL
|
|
rts
|
|
|
|
right_arrow_pressed_dec:
|
|
; 13-17 right arrow
|
|
|
|
lda VIEWER_CHANNEL
|
|
and #$f
|
|
beq done_panel_press
|
|
dec VIEWER_CHANNEL
|
|
|
|
done_panel_press:
|
|
rts
|
|
|
|
|
|
display_panel_code:
|
|
|
|
; ones digit
|
|
|
|
lda VIEWER_CHANNEL
|
|
and #$f
|
|
asl
|
|
tay
|
|
|
|
lda number_sprites,Y
|
|
sta INL
|
|
lda number_sprites+1,Y
|
|
sta INH
|
|
|
|
lda #21
|
|
sta XPOS
|
|
lda #8
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
; tens digit
|
|
|
|
lda VIEWER_CHANNEL
|
|
and #$f0
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tay
|
|
|
|
lda number_sprites,Y
|
|
sta INL
|
|
lda number_sprites+1,Y
|
|
sta INH
|
|
|
|
lda #15
|
|
sta XPOS
|
|
lda #8
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
rts
|
|
|
|
|
|
|
|
nothing_animation:
|
|
.word empty,empty,na_frame0,na_frame1,na_frame0,empty
|
|
|
|
atrus_animation:
|
|
.word empty,empty,na_frame0,atrus_frame1,atrus_frame2
|
|
|
|
marker_animation:
|
|
.word empty,empty,na_frame0,marker_frame1,marker_frame1
|
|
|
|
water_animation:
|
|
.word empty,empty,na_frame0,water_frame1,water_frame2
|
|
|
|
mountain_animation:
|
|
.word empty,empty,na_frame0,mountain_frame1,mountain_frame2,mountain_frame3
|
|
|
|
|
|
empty:
|
|
.byte 16,4
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
|
|
|
|
na_frame0:
|
|
.byte 16,4
|
|
.byte $FA,$7f,$5f,$57,$57,$57,$57,$57,$57,$57,$57,$57,$57,$7f,$7f,$fA
|
|
.byte $57,$55,$55,$55,$77,$55,$55,$55,$55,$55,$55,$77,$55,$55,$55,$57
|
|
.byte $55,$55,$55,$55,$77,$55,$5d,$57,$57,$5d,$55,$77,$55,$55,$55,$55
|
|
.byte $7f,$f5,$fd,$55,$77,$55,$5d,$57,$57,$5d,$55,$77,$55,$5d,$f5,$7f
|
|
|
|
na_frame1:
|
|
.byte 16,4
|
|
.byte $fA,$7f,$ff,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$7f,$7f,$fa
|
|
.byte $f7,$ff,$ff,$ff,$77,$ff,$ff,$ff,$ff,$ff,$ff,$77,$ff,$ff,$ff,$f7
|
|
.byte $ff,$ff,$ff,$ff,$77,$ff,$fd,$f7,$f7,$fd,$ff,$77,$ff,$ff,$ff,$ff
|
|
.byte $7f,$ff,$fd,$ff,$77,$ff,$fd,$f7,$f7,$fd,$ff,$77,$ff,$fd,$ff,$7f
|
|
|
|
atrus_frame1:
|
|
.byte 16,4
|
|
.byte $AA,$AA,$AA,$AA,$05,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$AA,$AA,$AA
|
|
.byte $AA,$AA,$AA,$AA,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$88,$b0,$AA
|
|
.byte $AA,$AA,$AA,$AA,$22,$20,$2f,$bb,$b2,$20,$2f,$22,$bb,$88,$bb,$AA
|
|
.byte $AA,$AA,$AA,$AA,$bb,$8b,$38,$38,$38,$8b,$bb,$bb,$8b,$08,$70,$AA
|
|
|
|
atrus_frame2:
|
|
.byte 16,4
|
|
.byte $AA,$AA,$AA,$AA,$05,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$AA,$AA,$AA
|
|
.byte $AA,$AA,$AA,$AA,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$88,$b0,$AA
|
|
.byte $AA,$AA,$AA,$AA,$22,$20,$2f,$bb,$b2,$20,$2f,$22,$bb,$88,$bb,$AA
|
|
.byte $AA,$AA,$AA,$AA,$bb,$8b,$b8,$b8,$b8,$8b,$bb,$bb,$8b,$08,$70,$AA
|
|
|
|
water_frame1:
|
|
.byte 16,4
|
|
.byte $AA,$AA,$27,$25,$25,$65,$25,$25,$25,$25,$65,$25,$25,$AA,$AA,$AA
|
|
.byte $25,$22,$26,$62,$22,$62,$26,$26,$26,$26,$62,$22,$62,$26,$22,$2A
|
|
.byte $22,$22,$22,$62,$26,$62,$22,$26,$26,$22,$62,$26,$62,$22,$22,$22
|
|
.byte $AA,$A2,$76,$22,$22,$62,$26,$26,$26,$26,$62,$22,$22,$26,$72,$AA
|
|
|
|
water_frame2:
|
|
.byte 16,4
|
|
.byte $AA,$AA,$27,$25,$25,$65,$65,$65,$65,$65,$65,$25,$25,$AA,$AA,$AA
|
|
.byte $25,$22,$26,$22,$62,$26,$62,$62,$62,$62,$26,$62,$62,$26,$22,$2A
|
|
.byte $22,$22,$22,$66,$62,$26,$66,$62,$62,$66,$26,$62,$66,$22,$22,$22
|
|
.byte $AA,$A2,$76,$22,$22,$66,$62,$62,$62,$62,$66,$22,$22,$26,$72,$AA
|
|
|
|
marker_frame1:
|
|
.byte 16,4
|
|
.byte $AA,$AA,$07,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$57,$57,$70
|
|
.byte $AA,$AA,$00,$55,$77,$dd,$8d,$8d,$8d,$dd,$88,$90,$66,$00,$00,$05
|
|
.byte $AA,$AA,$00,$55,$77,$dd,$88,$88,$88,$dd,$88,$98,$66,$00,$00,$00
|
|
.byte $AA,$AA,$70,$05,$07,$0d,$0d,$0d,$0d,$0d,$08,$00,$06,$00,$70,$57
|
|
|
|
mountain_frame1:
|
|
.byte 13,6
|
|
.byte $AA,$AA,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$AA
|
|
.byte $AA,$AA,$aa,$fa,$af,$aa,$aa,$aa,$aa,$aa,$af,$aa,$aa
|
|
.byte $AA,$AA,$af,$fa,$af,$fa,$aa,$fa,$af,$fa,$af,$aa,$aa
|
|
.byte $AA,$f0,$7f,$fa,$af,$fa,$af,$fa,$af,$fa,$af,$aa,$aa
|
|
.byte $AA,$f0,$7f,$fa,$af,$f7,$af,$fd,$af,$f7,$af,$fa,$af
|
|
.byte $AD,$f0,$7f,$fa,$af,$f7,$af,$fd,$af,$f7,$af,$fa,$7f
|
|
|
|
mountain_frame2:
|
|
.byte 13,6
|
|
.byte $AA,$AA,$aa,$af,$fa,$aa,$aa,$aa,$aa,$aa,$fa,$aa,$AA
|
|
.byte $AA,$AA,$fa,$af,$fa,$af,$fa,$aa,$fa,$af,$fa,$aa,$aa
|
|
.byte $AA,$05,$fa,$af,$fa,$af,$fa,$af,$fa,$af,$fa,$aa,$aa
|
|
.byte $AA,$00,$f7,$af,$fa,$af,$fa,$af,$fa,$7f,$fa,$aa,$aa
|
|
.byte $AA,$0f,$f7,$af,$fd,$af,$f7,$af,$fa,$7f,$fa,$af,$fa
|
|
.byte $AD,$0f,$f7,$af,$fd,$af,$f7,$af,$fa,$7f,$fa,$af,$70
|
|
|
|
mountain_frame3:
|
|
.byte 13,6
|
|
.byte $AA,$AA,$aa,$f5,$5a,$aa,$aa,$aa,$aa,$7a,$77,$AA,$AA
|
|
.byte $AA,$AA,$f5,$55,$75,$55,$5a,$7a,$57,$55,$55,$aa,$aa
|
|
.byte $AA,$05,$55,$ff,$ff,$75,$55,$f7,$55,$55,$77,$57,$57
|
|
.byte $AA,$50,$55,$7f,$07,$00,$75,$75,$77,$77,$77,$00,$05
|
|
.byte $AA,$55,$75,$00,$00,$00,$00,$07,$f5,$f5,$ff,$ff,$70
|
|
.byte $FA,$ff,$07,$00,$00,$00,$00,$00,$ff,$ff,$ff,$75,$77
|
|
|
|
|
|
atrus_message1:
|
|
; 0123456789012345678901234567890123456789
|
|
.byte 0,20," CATHERINE, I MUST LEAVE QUICKLY. ",0
|
|
.byte 0,21," MY BOOKS HAVE BEEN DESTROYED. ",0
|
|
.byte 0,22,"IT'S ONE OF OUR SONS. I SUSPECT ACHENAR",0
|
|
.byte 0,23," BUT I SHOULDN'T LEAP TO CONCLUSIONS. ",0
|
|
|
|
atrus_message2:
|
|
.byte 0,20," I'VE REMOVED THE REMAINING BOOKS AND ",0
|
|
.byte 0,21,"PLACED THEM IN THE PLACES OF PROTECTION.",0
|
|
.byte 0,22," IF YOU'VE FORGOTTEN THE KEYS, ",0
|
|
.byte 0,23," ** REMEMBER THE TOWER ROTATION ** ",0
|
|
|
|
|
|
;.byte 0,20,"CATHERINE, SOMETHING IS UP WITH OUR SONS",0
|
|
;.byte 0,21,"THEY'VE BEEN MESSING WITH THE AGES. ",0
|
|
;.byte 0,22,"I'VE HIDDEN THE REMAINING LINKING BOOKS.",0
|
|
;.byte 0,23,"** HINT: REMEMBER THE TOWER ROTATION **",0
|
|
|
|
|
|
|
|
wall_text:
|
|
; 0AAA035449E73 DD 49D5E39FE1C 9D1752 0AAA
|
|
; AAAAADCDDCCCD AA CCCCCDCCCCC CCCCCD AAAA
|
|
;.byte " *** SETTINGS -- DIMENSIONAL IMAGER ***",0
|
|
; 4F0F72108931C 5842539FE 4534 DD 40
|
|
; DCDCCDCDCCCCC CDDDDDCCC DCDD AA BB
|
|
;.byte "TOPOGRAPHICAL EXTRUSION TEST -- 40",0
|
|
; 71452 45225C5E4 0FFC DD 67
|
|
; DCDCD DDDCDCCCD DCCC AA BB
|
|
;.byte "WATER TURBULENT POOL -- 67",0
|
|
; D12B52 379438 491721D DD 47
|
|
; CCDCCD DDCDCC CCCCDCC AA BB
|
|
;.byte "MARKER SWITCH DIAGRAM -- 47",0
|
|
|