2017-09-11 03:40:32 +00:00
|
|
|
.org $800
|
|
|
|
.setcpu "65C02"
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 03:40:32 +00:00
|
|
|
.include "apple2.inc"
|
|
|
|
.include "../inc/prodos.inc"
|
|
|
|
.include "../inc/auxmem.inc"
|
|
|
|
|
|
|
|
.include "a2d.inc"
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
SPKR := $C030
|
2017-09-11 03:18:29 +00:00
|
|
|
L0020 := $0020
|
|
|
|
L4015 := $4015
|
2017-09-11 03:40:32 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
jmp copy2aux
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0
|
2017-09-11 03:40:32 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
;;; Copy the DA to AUX and invoke it
|
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
stash_stack: .byte 0
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc copy2aux
|
|
|
|
tsx
|
2017-09-11 03:40:32 +00:00
|
|
|
stx stash_stack
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
start := enter_da
|
|
|
|
end := last
|
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
sta ALTZPOFF
|
|
|
|
lda $C082
|
2017-09-11 15:36:31 +00:00
|
|
|
lda #<start
|
2017-09-11 03:40:32 +00:00
|
|
|
sta STARTLO
|
2017-09-11 15:36:31 +00:00
|
|
|
lda #>start
|
2017-09-11 03:40:32 +00:00
|
|
|
sta STARTHI
|
2017-09-11 15:36:31 +00:00
|
|
|
lda #<end
|
2017-09-11 03:40:32 +00:00
|
|
|
sta ENDLO
|
2017-09-11 15:36:31 +00:00
|
|
|
lda #>end
|
2017-09-11 03:40:32 +00:00
|
|
|
sta ENDHI
|
2017-09-11 15:36:31 +00:00
|
|
|
lda #<start
|
2017-09-11 03:40:32 +00:00
|
|
|
sta DESTINATIONLO
|
2017-09-11 15:36:31 +00:00
|
|
|
lda #>start
|
2017-09-11 03:40:32 +00:00
|
|
|
sta DESTINATIONHI
|
2017-09-11 15:36:31 +00:00
|
|
|
sec ; main>aux
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr AUXMOVE
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
lda #<enter_da
|
|
|
|
sta XFERSTARTLO
|
|
|
|
lda #>enter_da
|
|
|
|
sta XFERSTARTHI
|
2017-09-11 03:18:29 +00:00
|
|
|
php
|
|
|
|
pla
|
2017-09-11 15:36:31 +00:00
|
|
|
ora #$40 ; set overflow: use aux zp/stack
|
2017-09-11 03:18:29 +00:00
|
|
|
pha
|
|
|
|
plp
|
2017-09-11 15:36:31 +00:00
|
|
|
sec ; control main>aux
|
2017-09-11 03:18:29 +00:00
|
|
|
jmp XFER
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
|
|
|
|
|
|
|
;;; ==================================================
|
|
|
|
;;; Set up / tear down
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc exit_da
|
|
|
|
sta ALTZPON
|
2017-09-11 03:18:29 +00:00
|
|
|
lda LCBANK1
|
|
|
|
lda LCBANK1
|
2017-09-11 03:40:32 +00:00
|
|
|
ldx stash_stack
|
2017-09-11 03:18:29 +00:00
|
|
|
txs
|
|
|
|
rts
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc enter_da
|
|
|
|
sta ALTZPON
|
2017-09-11 03:18:29 +00:00
|
|
|
lda LCBANK1
|
|
|
|
lda LCBANK1
|
2017-09-11 06:09:33 +00:00
|
|
|
lda #0
|
2017-09-11 03:18:29 +00:00
|
|
|
sta $08
|
|
|
|
jmp L0E53
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
window_id = $33
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
|
|
|
|
.proc call_4015_main
|
|
|
|
|
|
|
|
dest := $20
|
|
|
|
|
|
|
|
;; copy following routine to $20 and call it
|
|
|
|
ldx #(routine_end - routine)
|
|
|
|
loop: lda routine,x
|
|
|
|
sta dest,x
|
2017-09-11 03:18:29 +00:00
|
|
|
dex
|
2017-09-11 15:36:31 +00:00
|
|
|
bpl loop
|
|
|
|
jsr dest
|
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
lda #window_id
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr L08B4
|
|
|
|
bit L08B3
|
|
|
|
bmi L089D
|
2017-09-11 06:38:20 +00:00
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr UNKNOWN_CALL
|
|
|
|
.byte $0C
|
2017-09-11 06:38:20 +00:00
|
|
|
.addr 0
|
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
L089D: lda #0
|
2017-09-11 03:18:29 +00:00
|
|
|
sta L08B3
|
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc routine
|
|
|
|
sta RAMRDOFF
|
2017-09-11 03:18:29 +00:00
|
|
|
sta RAMWRTOFF
|
|
|
|
jsr L4015
|
|
|
|
sta RAMRDON
|
|
|
|
sta RAMWRTON
|
|
|
|
rts
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
|
|
|
routine_end := *
|
|
|
|
.endproc
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
|
|
|
|
L08B3: .byte 0 ; ???
|
|
|
|
L08B4: sta query_box_params_id
|
2017-09-11 03:18:29 +00:00
|
|
|
lda L0E02
|
|
|
|
cmp #$BF
|
|
|
|
bcc L08C4
|
|
|
|
lda #$80
|
|
|
|
sta L08B3
|
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
|
|
|
|
L08C4: A2D_CALL A2D_QUERY_BOX, query_box_params
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_SET_BOX1, L0DB3
|
2017-09-11 15:36:31 +00:00
|
|
|
lda query_box_params_id
|
2017-09-11 06:09:33 +00:00
|
|
|
cmp #window_id
|
2017-09-11 03:18:29 +00:00
|
|
|
bne L08DA
|
|
|
|
jmp L1072
|
|
|
|
|
|
|
|
L08DA: rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
;;; ==================================================
|
|
|
|
;;; Param Blocks
|
|
|
|
|
|
|
|
;; following memory space is re-used
|
|
|
|
.proc drag_window_params
|
|
|
|
id := * + 0
|
|
|
|
.endproc
|
|
|
|
|
|
|
|
.proc map_coords_params
|
|
|
|
id := * + 0
|
|
|
|
screenx := * + 1
|
|
|
|
screeny := * + 3
|
|
|
|
clientx := * + 5
|
|
|
|
clienty := * + 7
|
|
|
|
.endproc
|
|
|
|
|
|
|
|
query_target_params := *+1
|
|
|
|
query_target_params_queryx := *+1
|
|
|
|
query_target_params_queryy := *+3
|
|
|
|
query_target_params_element := *+5
|
|
|
|
query_target_params_id := *+6
|
|
|
|
|
|
|
|
.proc get_input_params
|
|
|
|
state: .byte 0
|
|
|
|
key := *
|
|
|
|
modifiers := *+1
|
|
|
|
|
|
|
|
xcoord := *
|
|
|
|
ycoord := *+2
|
|
|
|
.byte 0,0,0,0 ; storage for above
|
|
|
|
.endproc
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
L08E0: .byte 0
|
|
|
|
L08E1: .byte 0
|
|
|
|
L08E2: .byte 0
|
|
|
|
L08E3: .byte 0,0,0
|
|
|
|
L08E6: .byte 0
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
.proc query_box_params
|
|
|
|
id: .byte 0
|
|
|
|
addr: .addr $0DB3
|
|
|
|
.endproc
|
|
|
|
query_box_params_id := query_box_params::id
|
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
L08EA: .byte $05
|
2017-09-11 06:09:33 +00:00
|
|
|
L08EB: .byte 0
|
2017-09-11 03:18:29 +00:00
|
|
|
L08EC: .byte $03
|
|
|
|
L08ED: .byte $00,$21,$00,$03,$00,$3D,$00,$03
|
|
|
|
.byte $00,$59,$00,$03,$00,$05,$00,$13
|
|
|
|
.byte $00,$21,$00,$13,$00,$3D,$00,$13
|
|
|
|
.byte $00,$59,$00,$13,$00,$05,$00,$23
|
|
|
|
.byte $00,$21,$00,$23,$00,$3D,$00,$23
|
|
|
|
.byte $00,$59,$00,$23,$00,$05,$00,$33
|
|
|
|
.byte $00,$21,$00,$33,$00,$3D,$00,$33
|
|
|
|
.byte $00,$59,$00,$33,$00
|
2017-09-11 05:58:30 +00:00
|
|
|
|
|
|
|
.proc pattern_table
|
|
|
|
.addr piece1, piece2, piece3, piece4, piece5, piece6, piece7
|
|
|
|
.addr piece8, piece9, piece10, piece11, piece12, piece13, piece14
|
|
|
|
p15: .addr piece15
|
|
|
|
p16: .addr piece16
|
|
|
|
.endproc
|
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
;; Current position table
|
|
|
|
position_table := *
|
|
|
|
.byte 0,0,0,0
|
|
|
|
.byte 0,0,0,0
|
|
|
|
.byte 0,0,0,0
|
|
|
|
.byte 0,0,0,0
|
2017-09-11 05:58:30 +00:00
|
|
|
|
|
|
|
.proc draw_pattern_params
|
|
|
|
left: .word 0
|
|
|
|
top: .word 0
|
|
|
|
addr: .addr 0
|
|
|
|
stride: .byte 4
|
|
|
|
.byte 0,0,0,0,0
|
|
|
|
width: .word 27
|
|
|
|
height: .word 15
|
|
|
|
.endproc
|
|
|
|
|
|
|
|
piece1:
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece2:
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%0000000),px(%0011111),px(%1111110)
|
|
|
|
.byte px(%0111000),px(%1010101),px(%0100001),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece3:
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110001),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%0010101),px(%0111110)
|
|
|
|
.byte px(%0111111),px(%1111101),px(%0101010),px(%1011110)
|
|
|
|
.byte px(%0111111),px(%1110010),px(%1010101),px(%0111110)
|
|
|
|
.byte px(%0111111),px(%1100101),px(%0101010),px(%0111110)
|
|
|
|
.byte px(%0111111),px(%0001010),px(%1010100),px(%1111110)
|
|
|
|
.byte px(%0111110),px(%1010101),px(%0101001),px(%1111110)
|
|
|
|
.byte px(%0111101),px(%0101010),px(%1000111),px(%1111110)
|
|
|
|
.byte px(%0111010),px(%1010101),px(%0011111),px(%1111110)
|
|
|
|
.byte px(%0110101),px(%0101000),px(%0111111),px(%1111110)
|
|
|
|
.byte px(%0110010),px(%1010011),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0110101),px(%0001111),px(%1111100),px(%0000000)
|
|
|
|
.byte px(%0110000),px(%1111111),px(%1000010),px(%1010100)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece4:
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101000),px(%0111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece5:
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1110100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1101010)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1011110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%0111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111110),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111101),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111101),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111011),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110110),px(%1101100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1101011),px(%0110110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece6:
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0010101),px(%0101010),px(%1010101),px(%0101010)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0010101),px(%0101010),px(%1010101),px(%0101010)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0110110),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0101101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece7:
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0010101),px(%0101010),px(%1010101),px(%0101010)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0010101),px(%0101010),px(%1010101),px(%0101010)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0110110),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0101101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece8:
|
|
|
|
.byte px(%0101010),px(%1010001),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0010101),px(%0101010),px(%0111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0001111),px(%1111110)
|
|
|
|
.byte px(%0010101),px(%0101010),px(%1000111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%0011111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111110),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111101),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111011),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1110111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1110111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1101111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1101111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101101),px(%1001111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0011011),px(%0011111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0110110),px(%1011111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece9:
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110011),px(%0110110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110110),px(%1101100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110101),px(%1011010)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1110011),px(%0110110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111010),px(%1010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111010),px(%1010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111100),px(%1010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111110),px(%1010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111110),px(%1010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111110),px(%1010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%0010100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1001100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1100110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1110100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111010)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece10:
|
|
|
|
.byte px(%0101101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0110110),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0101101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0011001),px(%1001100)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001100),px(%1100110)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0011001),px(%1001100)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001100),px(%1100110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece11:
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0110110),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0101101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0101010),px(%1010100)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0011001),px(%1001100)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001100),px(%1100110)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0011001),px(%1001100)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001100),px(%1100110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece12:
|
|
|
|
.byte px(%0110110),px(%1011111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101101),px(%1011111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0011011),px(%0101111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0110110),px(%1101111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010011),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010011),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010100),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0011111),px(%1111110)
|
|
|
|
.byte px(%0101010),px(%1010101),px(%0100111),px(%1111110)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0010111),px(%1111110)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001111),px(%1111110)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0001111),px(%1111110)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1011111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece13: ; the gap
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111011),px(%1011101),px(%1101110),px(%1110110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101110),px(%1110111),px(%0111011),px(%1011100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111011),px(%1011101),px(%1101110),px(%1110110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101110),px(%1110111),px(%0111011),px(%1011100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111011),px(%1011101),px(%1101110),px(%1110110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101110),px(%1110111),px(%0111011),px(%1011100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111011),px(%1011101),px(%1101110),px(%1110110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece14:
|
|
|
|
.byte px(%0001100),px(%1100110),px(%0110011),px(%0011000)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0011001),px(%1001100)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001100),px(%1100110)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0100101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0110010),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0111001),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0111110),px(%0111011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0111111),px(%1000101),px(%1011000),px(%0000000)
|
|
|
|
.byte px(%0111111),px(%1111000),px(%0000001),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece15:
|
|
|
|
.byte px(%0001100),px(%1100110),px(%0110011),px(%0011000)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0011001),px(%1001100)
|
|
|
|
.byte px(%0110011),px(%0011001),px(%1001100),px(%1100110)
|
|
|
|
.byte px(%0110110),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0101101),px(%1011011),px(%0110110),px(%1101100)
|
|
|
|
.byte px(%0110110),px(%1101101),px(%1011011),px(%0110110)
|
|
|
|
.byte px(%0011011),px(%0110110),px(%1101101),px(%1011010)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000110),px(%1101100)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1100000),px(%0000010)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
piece16:
|
|
|
|
.byte px(%0001100),px(%1100110),px(%0011111),px(%1111110)
|
|
|
|
.byte px(%0100110),px(%0110011),px(%0111111),px(%1111110)
|
|
|
|
.byte px(%0110011),px(%0011000),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101101),px(%1011001),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0110110),px(%1100111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0011011),px(%0011111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0101110),px(%0111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0100111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
|
|
|
|
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
|
|
|
|
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc fill_rect_params
|
|
|
|
.word 1, 0, $79, $44
|
|
|
|
.endproc
|
|
|
|
|
|
|
|
.proc pattern_speckles
|
|
|
|
.byte $77,$DD,$77,$DD,$77,$DD,$77,$DD
|
|
|
|
.endproc
|
|
|
|
|
|
|
|
.byte $00 ; ???
|
|
|
|
|
|
|
|
.proc pattern_black
|
|
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
|
|
.endproc
|
2017-09-11 05:58:30 +00:00
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
.byte $00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
|
|
|
.byte $FF,$00
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
.proc set_pos_params ; for what ???
|
|
|
|
.word 5, 2
|
|
|
|
.endproc
|
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
L0D91: .byte $70,$00,$00,$00
|
|
|
|
L0D95: .byte $00
|
|
|
|
L0D96: .byte $00
|
|
|
|
L0D97: .byte $00
|
|
|
|
L0D98: .byte $00
|
|
|
|
L0D99: .byte $00
|
|
|
|
L0D9A: .byte $00
|
|
|
|
L0D9B: .byte $00
|
|
|
|
L0D9C: .byte $33,$73,$00,$F7,$FF,$AD,$0D,$01
|
|
|
|
.byte $00,$00,$00,$00,$00,$06,$00,$05
|
|
|
|
.byte $00,$41,$35,$47,$37,$36,$49
|
2017-09-11 15:36:31 +00:00
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
L0DB3: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$0D
|
|
|
|
.byte $00,$00,$20,$80,$00,$00,$00,$00
|
|
|
|
.byte $00,$2F,$02,$B1,$00,$00,$01,$02
|
|
|
|
.byte $06
|
|
|
|
L0DEC: .byte $33,$02,$4C,$0E,$00,$00,$00,$00
|
|
|
|
.byte $00,$00,$00,$00,$79,$00,$44,$00
|
|
|
|
.byte $79,$00,$44,$00,$DC,$00
|
|
|
|
L0E02: .byte $50,$00,$00,$20,$80,$00,$00,$00
|
|
|
|
.byte $00,$00,$79,$00,$44,$00,$FF,$FF
|
|
|
|
.byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$00
|
|
|
|
.byte $00,$00,$00,$00,$01,$01,$00,$7F
|
|
|
|
.byte $00,$88,$00,$00,$DC,$00,$50,$00
|
|
|
|
.byte $00,$20,$80,$00,$00,$00,$00,$00
|
|
|
|
.byte $79,$00,$44,$00,$FF,$FF,$FF,$FF
|
|
|
|
.byte $FF,$FF,$FF,$FF,$FF,$00,$00,$00
|
|
|
|
.byte $00,$00,$01,$01,$00,$7F,$00,$88
|
|
|
|
.byte $00,$00,$06,$50,$75,$7A,$7A,$6C
|
|
|
|
.byte $65
|
2017-09-11 06:09:33 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
;;; Create the window
|
|
|
|
|
2017-09-11 06:38:20 +00:00
|
|
|
L0E53: jsr save_zp
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_CREATE_WINDOW, L0DEC
|
2017-09-11 03:18:29 +00:00
|
|
|
ldy #$0F
|
|
|
|
L0E5E: tya
|
2017-09-11 06:09:33 +00:00
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
dey
|
|
|
|
bpl L0E5E
|
2017-09-11 06:09:33 +00:00
|
|
|
lda #window_id
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr L08B4
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL $2B
|
2017-09-11 03:18:29 +00:00
|
|
|
L0E70: ldy #$03
|
|
|
|
L0E72: tya
|
|
|
|
pha
|
2017-09-11 06:09:33 +00:00
|
|
|
ldx position_table
|
2017-09-11 03:18:29 +00:00
|
|
|
ldy #$00
|
2017-09-11 06:09:33 +00:00
|
|
|
L0E79: lda position_table+1,y
|
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
iny
|
|
|
|
cpy #$0F
|
|
|
|
bcc L0E79
|
2017-09-11 06:09:33 +00:00
|
|
|
stx position_table+15
|
2017-09-11 03:18:29 +00:00
|
|
|
pla
|
|
|
|
tay
|
|
|
|
dey
|
|
|
|
bne L0E72
|
2017-09-11 06:09:33 +00:00
|
|
|
ldx position_table
|
|
|
|
lda position_table+1
|
|
|
|
sta position_table
|
|
|
|
stx position_table+1
|
2017-09-11 15:36:31 +00:00
|
|
|
A2D_CALL A2D_GET_INPUT, get_input_params
|
|
|
|
lda get_input_params::state
|
2017-09-11 03:18:29 +00:00
|
|
|
beq L0E70
|
2017-09-11 06:38:20 +00:00
|
|
|
jsr check_victory
|
2017-09-11 03:18:29 +00:00
|
|
|
bcs L0E70
|
|
|
|
jsr L11BB
|
|
|
|
jsr L12D2
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
;;; ==================================================
|
|
|
|
;;; Input loop and processing
|
|
|
|
|
|
|
|
input_loop:
|
|
|
|
A2D_CALL A2D_GET_INPUT, get_input_params
|
|
|
|
lda get_input_params::state
|
|
|
|
cmp #A2D_INPUT_DOWN
|
|
|
|
bne :+
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr L0ECB
|
2017-09-11 15:36:31 +00:00
|
|
|
jmp input_loop
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;; key?
|
|
|
|
: cmp #A2D_INPUT_KEY
|
|
|
|
bne input_loop
|
|
|
|
jsr check_key
|
|
|
|
jmp input_loop
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;; click - where?
|
|
|
|
L0ECB: A2D_CALL A2D_QUERY_TARGET, query_target_params
|
|
|
|
lda query_target_params_id
|
2017-09-11 06:09:33 +00:00
|
|
|
cmp #window_id
|
2017-09-11 15:36:31 +00:00
|
|
|
bne bail
|
|
|
|
lda query_target_params_element
|
|
|
|
bne :+
|
|
|
|
bail: rts
|
|
|
|
|
|
|
|
;; client area?
|
|
|
|
: cmp #A2D_ELEM_CLIENT
|
|
|
|
bne :+
|
|
|
|
jsr find_click_piece
|
|
|
|
bcc bail
|
2017-09-11 03:18:29 +00:00
|
|
|
jmp L0FBC
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;; close box?
|
|
|
|
: cmp #A2D_ELEM_CLOSE
|
|
|
|
bne check_title
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_CLOSE_CLICK, L08E6
|
2017-09-11 03:18:29 +00:00
|
|
|
lda L08E6
|
2017-09-11 15:36:31 +00:00
|
|
|
beq bail
|
2017-09-11 03:40:32 +00:00
|
|
|
L0EF9: A2D_CALL A2D_DESTROY_WINDOW, L0D9C
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
jsr UNKNOWN_CALL ; ???
|
2017-09-11 03:18:29 +00:00
|
|
|
.byte $0C
|
2017-09-11 06:38:20 +00:00
|
|
|
.addr 0
|
2017-09-11 03:40:32 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
ldx #$09 ; copy following to ZP and run it
|
2017-09-11 03:18:29 +00:00
|
|
|
L0F07: lda L0F12,x
|
|
|
|
sta L0020,x
|
|
|
|
dex
|
|
|
|
bpl L0F07
|
|
|
|
jmp L0020
|
|
|
|
|
|
|
|
L0F12: sta RAMRDOFF
|
|
|
|
sta RAMWRTOFF
|
2017-09-11 15:36:31 +00:00
|
|
|
jmp exit_da
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;; title bar?
|
|
|
|
check_title:
|
|
|
|
cmp #A2D_ELEM_TITLE
|
|
|
|
bne bail
|
2017-09-11 06:09:33 +00:00
|
|
|
lda #window_id
|
2017-09-11 15:36:31 +00:00
|
|
|
sta drag_window_params::id
|
|
|
|
A2D_CALL A2D_DRAG_WINDOW, drag_window_params
|
2017-09-11 03:18:29 +00:00
|
|
|
ldx #$23
|
2017-09-11 15:36:31 +00:00
|
|
|
jsr call_4015_main
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;; on key press - exit if Escape
|
|
|
|
check_key:
|
|
|
|
lda get_input_params::modifiers
|
|
|
|
bne :+
|
|
|
|
lda get_input_params::key
|
|
|
|
cmp #$1B ; Escape
|
2017-09-11 03:18:29 +00:00
|
|
|
beq L0EF9
|
2017-09-11 15:36:31 +00:00
|
|
|
: rts
|
|
|
|
|
|
|
|
;;; ==================================================
|
|
|
|
;;; Map click to piece x/y
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc find_click_piece
|
2017-09-11 06:09:33 +00:00
|
|
|
L0F3D: lda #window_id
|
2017-09-11 15:36:31 +00:00
|
|
|
sta map_coords_params::id
|
|
|
|
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
|
|
|
lda map_coords_params::clientx+1
|
|
|
|
ora map_coords_params::clienty+1
|
|
|
|
bne nope ; ensure high bytes are 0
|
|
|
|
|
|
|
|
lda map_coords_params::clienty
|
|
|
|
ldx map_coords_params::clientx
|
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
cmp #$03
|
2017-09-11 15:36:31 +00:00
|
|
|
bcc nope
|
2017-09-11 03:18:29 +00:00
|
|
|
cmp #$14
|
2017-09-11 15:36:31 +00:00
|
|
|
bcs :+
|
|
|
|
jsr find_click_y
|
|
|
|
bcc nope
|
|
|
|
lda #0
|
|
|
|
beq yep
|
|
|
|
: cmp #$24
|
|
|
|
bcs :+
|
|
|
|
jsr find_click_y
|
|
|
|
bcc nope
|
|
|
|
lda #1
|
|
|
|
bne yep
|
|
|
|
: cmp #$34
|
|
|
|
bcs :+
|
|
|
|
jsr find_click_y
|
|
|
|
bcc nope
|
|
|
|
lda #2
|
|
|
|
bne yep
|
|
|
|
: cmp #$44
|
|
|
|
bcs nope
|
|
|
|
jsr find_click_y
|
|
|
|
bcc nope
|
|
|
|
lda #3
|
|
|
|
|
|
|
|
yep: sta L0D98
|
2017-09-11 03:18:29 +00:00
|
|
|
sec
|
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
nope: clc
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
.proc find_click_y
|
|
|
|
cpx #$05
|
|
|
|
bcc nope
|
2017-09-11 03:18:29 +00:00
|
|
|
cpx #$21
|
2017-09-11 15:36:31 +00:00
|
|
|
bcs :+
|
|
|
|
lda #0
|
|
|
|
beq yep
|
|
|
|
: cpx #$3E
|
|
|
|
bcs :+
|
|
|
|
lda #1
|
|
|
|
bne yep
|
|
|
|
: cpx #$5A
|
|
|
|
bcs :+
|
|
|
|
lda #2
|
|
|
|
bne yep
|
|
|
|
: cpx #$75
|
|
|
|
bcs nope
|
|
|
|
lda #3
|
|
|
|
|
|
|
|
yep: sta L0D97
|
2017-09-11 03:18:29 +00:00
|
|
|
sec
|
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
nope: clc
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
|
|
|
|
|
|
|
;;; ==================================================
|
|
|
|
;;; Process piece click
|
2017-09-11 03:18:29 +00:00
|
|
|
|
|
|
|
L0FBC: lda #$00
|
|
|
|
ldy L0D96
|
|
|
|
beq L0FC9
|
|
|
|
L0FC3: clc
|
|
|
|
adc #$04
|
|
|
|
dey
|
|
|
|
bne L0FC3
|
|
|
|
L0FC9: sta L0D99
|
|
|
|
clc
|
|
|
|
adc L0D95
|
|
|
|
tay
|
|
|
|
lda L0D97
|
|
|
|
cmp L0D95
|
|
|
|
beq L1014
|
|
|
|
lda L0D98
|
|
|
|
cmp L0D96
|
|
|
|
beq L0FE2
|
|
|
|
L0FE1: rts
|
|
|
|
|
|
|
|
L0FE2: lda L0D97
|
|
|
|
cmp L0D95
|
|
|
|
beq L0FE1
|
|
|
|
bcs L1000
|
|
|
|
lda L0D95
|
|
|
|
sec
|
|
|
|
sbc L0D97
|
|
|
|
tax
|
2017-09-11 06:09:33 +00:00
|
|
|
L0FF4: lda position_table-1,y
|
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
dey
|
|
|
|
dex
|
|
|
|
bne L0FF4
|
|
|
|
beq L1055
|
|
|
|
L1000: lda L0D97
|
|
|
|
sec
|
|
|
|
sbc L0D95
|
|
|
|
tax
|
2017-09-11 06:09:33 +00:00
|
|
|
L1008: lda position_table+1,y
|
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
iny
|
|
|
|
dex
|
|
|
|
bne L1008
|
|
|
|
beq L1055
|
|
|
|
L1014: lda L0D98
|
|
|
|
cmp L0D96
|
|
|
|
beq L0FE1
|
|
|
|
bcs L1035
|
|
|
|
lda L0D96
|
|
|
|
sec
|
|
|
|
sbc L0D98
|
|
|
|
tax
|
2017-09-11 06:09:33 +00:00
|
|
|
L1026: lda position_table-4,y
|
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
dey
|
|
|
|
dey
|
|
|
|
dey
|
|
|
|
dey
|
|
|
|
dex
|
|
|
|
bne L1026
|
|
|
|
beq L104A
|
|
|
|
L1035: lda L0D98
|
|
|
|
sec
|
|
|
|
sbc L0D96
|
|
|
|
tax
|
2017-09-11 06:09:33 +00:00
|
|
|
L103D: lda position_table+4,y
|
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
dex
|
|
|
|
bne L103D
|
|
|
|
L104A: lda #$0C
|
2017-09-11 06:09:33 +00:00
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr L11D9
|
|
|
|
jmp L105D
|
|
|
|
|
|
|
|
L1055: lda #$0C
|
2017-09-11 06:09:33 +00:00
|
|
|
sta position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr L11C8
|
2017-09-11 06:38:20 +00:00
|
|
|
L105D: jsr check_victory
|
2017-09-11 03:18:29 +00:00
|
|
|
bcc L106E
|
|
|
|
ldx #$04
|
|
|
|
L1064: txa
|
|
|
|
pha
|
2017-09-11 15:36:31 +00:00
|
|
|
jsr play_sound
|
2017-09-11 03:18:29 +00:00
|
|
|
pla
|
|
|
|
tax
|
|
|
|
dex
|
|
|
|
bne L1064
|
|
|
|
L106E: jmp L12D2
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
;;; Clear the background
|
|
|
|
|
|
|
|
L1072: A2D_CALL A2D_SET_PATTERN, pattern_speckles
|
|
|
|
A2D_CALL A2D_FILL_RECT, fill_rect_params
|
|
|
|
A2D_CALL A2D_SET_PATTERN, pattern_black
|
|
|
|
A2D_CALL A2D_SET_POS, set_pos_params
|
|
|
|
A2D_CALL $0F, L0D91 ; ???
|
2017-09-11 03:18:29 +00:00
|
|
|
jsr L11BB
|
2017-09-11 15:36:31 +00:00
|
|
|
|
2017-09-11 06:09:33 +00:00
|
|
|
lda #window_id
|
2017-09-11 15:36:31 +00:00
|
|
|
sta query_box_params::id
|
|
|
|
A2D_CALL A2D_QUERY_BOX, query_box_params
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_SET_BOX1, L0DB3
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
|
2017-09-11 06:38:20 +00:00
|
|
|
.proc save_zp
|
|
|
|
ldx #$00
|
|
|
|
loop: lda $00,x
|
|
|
|
sta saved_zp,x
|
2017-09-11 03:18:29 +00:00
|
|
|
dex
|
2017-09-11 06:38:20 +00:00
|
|
|
bne loop
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
2017-09-11 06:38:20 +00:00
|
|
|
.endproc
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 06:38:20 +00:00
|
|
|
.proc restore_zp
|
2017-09-11 03:18:29 +00:00
|
|
|
ldx #$00
|
2017-09-11 06:38:20 +00:00
|
|
|
loop: lda saved_zp,x
|
|
|
|
sta $00,x
|
2017-09-11 03:18:29 +00:00
|
|
|
dex
|
2017-09-11 06:38:20 +00:00
|
|
|
bne loop
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
2017-09-11 06:38:20 +00:00
|
|
|
.endproc
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 06:38:20 +00:00
|
|
|
saved_zp:
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
2017-09-11 06:09:33 +00:00
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
|
|
|
.byte 0,0,0,0,0,0,0,0
|
2017-09-11 03:40:32 +00:00
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
;;; Draw pieces
|
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
L11BB: ldy #$01
|
|
|
|
sty L0D9B
|
|
|
|
dey
|
|
|
|
lda #$10
|
|
|
|
sta L0D9A
|
|
|
|
bne L11E6
|
|
|
|
L11C8: lda #$01
|
|
|
|
sta L0D9B
|
|
|
|
lda L0D99
|
|
|
|
tay
|
|
|
|
clc
|
|
|
|
adc #$04
|
|
|
|
sta L0D9A
|
|
|
|
bne L11E6
|
|
|
|
L11D9: lda #$04
|
|
|
|
sta L0D9B
|
|
|
|
ldy L0D95
|
|
|
|
lda #$10
|
|
|
|
sta L0D9A
|
|
|
|
L11E6: tya
|
|
|
|
pha
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_HIDE_CURSOR
|
2017-09-11 06:09:33 +00:00
|
|
|
lda #window_id
|
2017-09-11 15:36:31 +00:00
|
|
|
sta query_box_params::id
|
|
|
|
A2D_CALL A2D_QUERY_BOX, query_box_params
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_SET_BOX1, L0DB3
|
2017-09-11 03:18:29 +00:00
|
|
|
pla
|
|
|
|
tay
|
|
|
|
L1201: tya
|
|
|
|
pha
|
|
|
|
asl a
|
|
|
|
asl a
|
|
|
|
tax
|
|
|
|
lda L08EA,x
|
2017-09-11 05:58:30 +00:00
|
|
|
sta draw_pattern_params::left
|
2017-09-11 03:18:29 +00:00
|
|
|
lda L08EB,x
|
2017-09-11 05:58:30 +00:00
|
|
|
sta draw_pattern_params::left+1
|
2017-09-11 03:18:29 +00:00
|
|
|
lda L08EC,x
|
2017-09-11 05:58:30 +00:00
|
|
|
sta draw_pattern_params::top
|
2017-09-11 03:18:29 +00:00
|
|
|
lda L08ED,x
|
2017-09-11 05:58:30 +00:00
|
|
|
sta draw_pattern_params::top+1
|
2017-09-11 06:09:33 +00:00
|
|
|
lda position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
asl a
|
|
|
|
tax
|
2017-09-11 05:58:30 +00:00
|
|
|
lda pattern_table,x
|
|
|
|
sta draw_pattern_params::addr
|
|
|
|
lda pattern_table+1,x
|
|
|
|
sta draw_pattern_params::addr+1
|
|
|
|
A2D_CALL A2D_DRAW_PATTERN, draw_pattern_params
|
2017-09-11 03:18:29 +00:00
|
|
|
pla
|
|
|
|
clc
|
|
|
|
adc L0D9B
|
|
|
|
tay
|
|
|
|
cpy L0D9A
|
|
|
|
bcc L1201
|
2017-09-11 03:40:32 +00:00
|
|
|
A2D_CALL A2D_SHOW_CURSOR
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
|
|
|
|
2017-09-11 15:36:31 +00:00
|
|
|
;;; ==================================================
|
|
|
|
;;; Play sound
|
|
|
|
|
|
|
|
.proc play_sound
|
|
|
|
ldx #$80
|
2017-09-11 03:18:29 +00:00
|
|
|
L1249: lda #$58
|
|
|
|
L124B: ldy #$1B
|
|
|
|
L124D: dey
|
|
|
|
bne L124D
|
2017-09-11 15:36:31 +00:00
|
|
|
bit SPKR
|
2017-09-11 03:18:29 +00:00
|
|
|
tay
|
2017-09-11 15:36:31 +00:00
|
|
|
delay: dey
|
|
|
|
bne delay
|
2017-09-11 03:18:29 +00:00
|
|
|
sbc #$01
|
|
|
|
beq L1249
|
2017-09-11 15:36:31 +00:00
|
|
|
bit SPKR
|
2017-09-11 03:18:29 +00:00
|
|
|
dex
|
|
|
|
bne L124B
|
|
|
|
rts
|
2017-09-11 15:36:31 +00:00
|
|
|
.endproc
|
|
|
|
|
|
|
|
;;; ==================================================
|
|
|
|
;;; Puzzle complete?
|
2017-09-11 03:18:29 +00:00
|
|
|
|
2017-09-11 06:38:20 +00:00
|
|
|
;; Returns with carry set if puzzle complete
|
|
|
|
.proc check_victory ; Allows for swapped indistinct pieces, etc.
|
|
|
|
;; 0/12 can be swapped
|
|
|
|
lda position_table
|
|
|
|
beq :+
|
|
|
|
cmp #12
|
|
|
|
bne nope
|
|
|
|
|
|
|
|
: ldy #1
|
|
|
|
c1234: tya
|
2017-09-11 06:09:33 +00:00
|
|
|
cmp position_table,y
|
2017-09-11 06:38:20 +00:00
|
|
|
bne nope
|
2017-09-11 03:18:29 +00:00
|
|
|
iny
|
2017-09-11 06:38:20 +00:00
|
|
|
cpy #5
|
|
|
|
bcc c1234
|
|
|
|
|
|
|
|
;; 5/6 are identical
|
2017-09-11 06:09:33 +00:00
|
|
|
lda position_table+5
|
2017-09-11 06:38:20 +00:00
|
|
|
cmp #5
|
|
|
|
beq :+
|
|
|
|
cmp #6
|
|
|
|
bne nope
|
|
|
|
: lda position_table+6
|
|
|
|
cmp #5
|
|
|
|
beq :+
|
|
|
|
cmp #6
|
|
|
|
bne nope
|
|
|
|
: lda position_table+7
|
|
|
|
cmp #7
|
|
|
|
bne nope
|
2017-09-11 06:09:33 +00:00
|
|
|
lda position_table+8
|
2017-09-11 06:38:20 +00:00
|
|
|
cmp #8
|
|
|
|
bne nope
|
|
|
|
|
|
|
|
;; 9/10 are identical
|
2017-09-11 06:09:33 +00:00
|
|
|
lda position_table+9
|
2017-09-11 06:38:20 +00:00
|
|
|
cmp #9
|
|
|
|
beq :+
|
|
|
|
cmp #10
|
|
|
|
bne nope
|
|
|
|
: lda position_table+10
|
|
|
|
cmp #9
|
|
|
|
beq :+
|
|
|
|
cmp #10
|
|
|
|
bne nope
|
|
|
|
|
|
|
|
: lda position_table+11
|
|
|
|
cmp #11
|
|
|
|
bne nope
|
|
|
|
|
|
|
|
;; 0/12 can be swapped
|
2017-09-11 06:09:33 +00:00
|
|
|
lda position_table+12
|
2017-09-11 06:38:20 +00:00
|
|
|
beq :+
|
|
|
|
cmp #12
|
|
|
|
bne nope
|
|
|
|
|
|
|
|
: ldy #13
|
|
|
|
c131415:tya
|
2017-09-11 06:09:33 +00:00
|
|
|
cmp position_table,y
|
2017-09-11 06:38:20 +00:00
|
|
|
bne nope
|
2017-09-11 03:18:29 +00:00
|
|
|
iny
|
2017-09-11 06:38:20 +00:00
|
|
|
cpy #16
|
|
|
|
bcc c131415
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
|
|
|
|
2017-09-11 06:38:20 +00:00
|
|
|
nope: clc
|
2017-09-11 03:18:29 +00:00
|
|
|
rts
|
2017-09-11 06:38:20 +00:00
|
|
|
.endproc
|
|
|
|
|
2017-09-11 03:18:29 +00:00
|
|
|
|
|
|
|
L12D2: ldy #$0F
|
2017-09-11 06:09:33 +00:00
|
|
|
L12D4: lda position_table,y
|
2017-09-11 03:18:29 +00:00
|
|
|
cmp #$0C
|
|
|
|
beq L12DE
|
|
|
|
dey
|
|
|
|
bpl L12D4
|
2017-09-11 06:09:33 +00:00
|
|
|
L12DE: lda #0
|
2017-09-11 03:18:29 +00:00
|
|
|
sta L0D95
|
|
|
|
sta L0D96
|
|
|
|
tya
|
2017-09-11 06:09:33 +00:00
|
|
|
L12E7: cmp #4
|
2017-09-11 03:18:29 +00:00
|
|
|
bcc L12F2
|
2017-09-11 06:09:33 +00:00
|
|
|
sbc #4
|
2017-09-11 03:18:29 +00:00
|
|
|
inc L0D96
|
|
|
|
bne L12E7
|
|
|
|
L12F2: sta L0D95
|
|
|
|
rts
|
2017-09-11 15:36:31 +00:00
|
|
|
|
|
|
|
last := *
|