2020-06-14 02:55:33 +00:00
|
|
|
|
|
|
|
; zero page locations
|
|
|
|
HGR_SHAPE = $1A
|
|
|
|
SEEDL = $4E
|
|
|
|
FRAME = $A4
|
|
|
|
RND_EXP = $C9
|
|
|
|
HGR_PAGE = $E6
|
|
|
|
HGR_SCALE = $E7
|
|
|
|
HGR_ROTATION = $F9
|
|
|
|
SCALE = $FC
|
|
|
|
XPOS = $FD
|
|
|
|
XPOSH = $FE
|
|
|
|
YPOS = $FF
|
|
|
|
|
|
|
|
; soft switches
|
|
|
|
; Soft Switches
|
|
|
|
KEYPRESS = $C000
|
|
|
|
KEYRESET = $C010
|
|
|
|
SPEAKER = $C030
|
|
|
|
PAGE0 = $C054
|
|
|
|
PAGE1 = $C055
|
|
|
|
|
|
|
|
; ROM calls
|
|
|
|
RND = $EFAE
|
|
|
|
HGR2 = $F3D8
|
|
|
|
HCLR = $F3F2
|
|
|
|
HCLR_COLOR = $F3F4
|
|
|
|
HPOSN = $F411
|
|
|
|
XDRAW0 = $F65D
|
|
|
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
dsr_demo:
|
|
|
|
|
|
|
|
;=========================================
|
|
|
|
; SETUP
|
|
|
|
;=========================================
|
|
|
|
|
2020-06-14 02:55:33 +00:00
|
|
|
|
|
|
|
lda #$20 ; clear HGR page0 to white
|
|
|
|
sta HGR_PAGE
|
|
|
|
|
|
|
|
lda #$ff
|
|
|
|
jsr HCLR_COLOR
|
|
|
|
|
|
|
|
jsr HGR2 ; clear HGR page1 to black
|
|
|
|
; Hi-res graphics, no text at bottom
|
|
|
|
; Y=0, A=$60 after this call
|
|
|
|
|
|
|
|
ldx #1
|
|
|
|
stx HGR_SCALE
|
|
|
|
|
|
|
|
ldx #30
|
|
|
|
stx XPOS
|
|
|
|
lda #0
|
|
|
|
sta XPOSH
|
|
|
|
sta FRAME
|
|
|
|
lda #180
|
|
|
|
sta YPOS
|
|
|
|
|
|
|
|
crowd_loop:
|
|
|
|
|
|
|
|
jsr xdraw ; draw
|
|
|
|
|
|
|
|
lsr HGR_PAGE ; $40 -> $20
|
|
|
|
|
|
|
|
jsr xdraw ; draw
|
|
|
|
|
|
|
|
asl HGR_PAGE ; $20 -> $40
|
|
|
|
|
|
|
|
clc
|
|
|
|
lda XPOS
|
|
|
|
adc #20
|
|
|
|
sta XPOS
|
|
|
|
cmp #250
|
|
|
|
bne crowd_loop
|
|
|
|
|
|
|
|
; get ready for DSR loop
|
|
|
|
|
|
|
|
ldx #<shape_dsr ; point to our shape
|
|
|
|
stx shape_smc+1
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
|
|
|
|
;=========================================
|
|
|
|
; OFFSCREEN RESET
|
|
|
|
;=========================================
|
|
|
|
|
|
|
|
|
2020-06-14 02:55:33 +00:00
|
|
|
reset_loop:
|
|
|
|
lda #10
|
|
|
|
sta XPOS
|
|
|
|
sta YPOS
|
|
|
|
|
|
|
|
lda #2
|
|
|
|
sta HGR_SCALE
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
;=========================================
|
|
|
|
; MAIN LOOP
|
|
|
|
;=========================================
|
|
|
|
|
2020-06-14 02:55:33 +00:00
|
|
|
main_loop:
|
|
|
|
|
|
|
|
; increment FRAME
|
|
|
|
|
|
|
|
inc FRAME
|
|
|
|
lda FRAME
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
and #$f
|
2020-06-14 02:55:33 +00:00
|
|
|
beq long_frame
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
jsr draw_beep
|
2020-06-14 02:55:33 +00:00
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
done_frame:
|
2020-06-14 02:55:33 +00:00
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
inc rot_smc+1
|
2020-06-14 02:55:33 +00:00
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
;========================
|
|
|
|
; move dSr
|
|
|
|
;========================
|
2020-06-14 02:55:33 +00:00
|
|
|
|
|
|
|
lda YPOS
|
|
|
|
adc #2
|
|
|
|
sta YPOS
|
|
|
|
|
|
|
|
lda XPOS
|
|
|
|
adc #5
|
|
|
|
sta XPOS
|
|
|
|
cmp #250
|
|
|
|
bcs reset_loop
|
|
|
|
bcc main_loop
|
|
|
|
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
;===========================
|
|
|
|
; long frame
|
|
|
|
;===========================
|
2020-06-14 02:55:33 +00:00
|
|
|
|
|
|
|
long_frame:
|
|
|
|
|
|
|
|
bit PAGE0
|
|
|
|
lsr HGR_PAGE
|
|
|
|
|
|
|
|
asl HGR_SCALE
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
ldy #235
|
|
|
|
sty tone_smc+1
|
2020-06-14 02:55:33 +00:00
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
jsr draw_beep
|
2020-06-14 02:55:33 +00:00
|
|
|
|
|
|
|
asl HGR_PAGE
|
|
|
|
lsr HGR_SCALE
|
|
|
|
|
|
|
|
bit PAGE1
|
|
|
|
|
|
|
|
jmp done_frame
|
|
|
|
|
|
|
|
|
|
|
|
xdraw:
|
|
|
|
ldy XPOSH ; setup X and Y co-ords
|
|
|
|
ldx XPOS
|
|
|
|
lda YPOS
|
|
|
|
jsr HPOSN ; X= (y,x) Y=(a)
|
|
|
|
|
|
|
|
shape_smc:
|
|
|
|
ldx #<shape_person ; point to our shape
|
|
|
|
ldy #>shape_person
|
|
|
|
|
|
|
|
rot_smc:
|
|
|
|
lda #0 ; ROT=0
|
|
|
|
|
|
|
|
|
|
|
|
jmp XDRAW0 ; XDRAW 1 AT X,Y
|
|
|
|
; Both A and X are 0 at exit
|
|
|
|
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
;==========================
|
|
|
|
; draw/beep/undraw
|
|
|
|
;==========================
|
|
|
|
draw_beep:
|
|
|
|
jsr xdraw ; draw
|
|
|
|
jsr beep ; make noise/delay
|
|
|
|
|
|
|
|
ldy #24
|
|
|
|
sty tone_smc+1
|
|
|
|
|
|
|
|
jmp xdraw ; draw
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-06-14 02:55:33 +00:00
|
|
|
scale_lookup:
|
|
|
|
;.byte 1,2,3,4,5,4,3,2
|
|
|
|
|
|
|
|
shape_person:
|
|
|
|
; Person, shoulders up
|
|
|
|
|
|
|
|
;.byte $01,$00,$04,$00,
|
|
|
|
.byte $2d,$25,$3c,$24
|
|
|
|
.byte $2c,$2c,$35,$37,$6f,$25,$16,$3f
|
|
|
|
.byte $77,$2d,$1e,$37,$2d,$2d,$15,$3f
|
|
|
|
.byte $3f,$3f,$3f,$3f,$07,$00
|
|
|
|
|
|
|
|
shape_arm:
|
|
|
|
;.byte $49,$49,$49,$24
|
|
|
|
;.byte $24,$24,$ac,$36,$36,$36,$00
|
|
|
|
|
|
|
|
shape_dsr:
|
|
|
|
.byte $2d,$36,$ff,$3f
|
|
|
|
.byte $24,$ad,$22,$24,$94,$21,$2c,$4d
|
|
|
|
.byte $91,$3f,$36,$00
|
|
|
|
|
|
|
|
|
|
|
|
;===========================
|
|
|
|
; BEEP
|
|
|
|
;===========================
|
|
|
|
beep:
|
2020-06-14 02:55:58 +00:00
|
|
|
lda FRAME
|
|
|
|
and #$3
|
|
|
|
beq actual_beep
|
|
|
|
|
|
|
|
lda #100
|
|
|
|
jmp WAIT
|
|
|
|
|
|
|
|
actual_beep:
|
2020-06-14 02:55:33 +00:00
|
|
|
; BEEP
|
|
|
|
; repeat 34 times
|
2020-06-14 02:55:58 +00:00
|
|
|
lda #30 ; 2
|
2020-06-14 02:55:33 +00:00
|
|
|
tone1_loop:
|
|
|
|
ldy #21 ; 2
|
|
|
|
jsr delay_tone ; 3
|
|
|
|
|
|
|
|
ldy #24 ; 2
|
|
|
|
jsr delay_tone ; 3
|
|
|
|
|
2020-06-14 02:55:58 +00:00
|
|
|
tone_smc:
|
|
|
|
ldy #21 ; 2
|
2020-06-14 02:55:33 +00:00
|
|
|
jsr delay_tone ; 3
|
|
|
|
|
|
|
|
sec ; 1
|
|
|
|
sbc #1 ; 2
|
|
|
|
bne tone1_loop ; 2
|
|
|
|
|
|
|
|
rts ; 1
|
|
|
|
|
|
|
|
|
|
|
|
; Try X=6 Y=21 cycles=757
|
|
|
|
; Try X=6 Y=24 cycles=865
|
|
|
|
; Try X=7 Y=235 cycles=9636
|
|
|
|
|
|
|
|
delay_tone:
|
|
|
|
loopC: ldx #6 ; 2
|
|
|
|
loopD: dex ; 1
|
|
|
|
bne loopD ; 2
|
|
|
|
dey ; 1
|
|
|
|
bne loopC ; 2
|
|
|
|
|
|
|
|
bit SPEAKER ; 3 ; click speaker
|
|
|
|
|
|
|
|
rts ; 1
|
|
|
|
|