Segment work

This commit is contained in:
Joshua Bell 2017-12-15 21:36:09 -08:00
parent 9d4656f7b9
commit 4ec1ff2e61
3 changed files with 97 additions and 84 deletions

View File

@ -9,7 +9,7 @@ TARGETS = calculator.F1 show_text_file.F1 date.F1 puzzle.F1 show_image_file.F1 c
.PHONY: clean all .PHONY: clean all
all: $(TARGETS) all: $(TARGETS)
HEADERS = $(wildcard ../*.inc) $(wildcard *.inc) HEADERS = $(wildcard ../*.inc) $(wildcard ../inc/*.inc) $(wildcard *.inc)
clean: clean:
rm -f *.o rm -f *.o

View File

@ -3,29 +3,16 @@
set -e set -e
CC65=~/dev/cc65/bin CC65=~/dev/cc65/bin
CAFLAGS="--target apple2enh --list-bytes 0"
LDFLAGS="--config apple2-asm.cfg"
function daseg { function daseg {
#../../desk.acc/res/make_info.pl $2 < "orig/DESKTOP2_$1" > "infos/$1.info" #../../desk.acc/res/make_info.pl $2 < "orig/DESKTOP2_$1" > "infos/$1.info"
echo ".org \$$2" > "$1.s" echo ".org \$$2" > "$1.s"
$CC65/da65 "orig/DESKTOP2_$1" --info "infos/$1.info" >> "$1.s" $CC65/da65 "orig/DESKTOP2_$1" --info "infos/$1.info" >> "$1.s"
} }
function asmseg {
$CC65/ca65 $CAFLAGS --listing "$1.list" -o "$1.o" "$1.s"
$CC65/ld65 $LDFLAGS -o "$1.built" "$1.o"
diff "orig/DESKTOP2_$1" "$1.built" && echo "$1 ok"
}
#daseg s0_loader 2000 #daseg s0_loader 2000
#asmseg s0_loader
asmseg s123_aux
#daseg s4_main1 4000 #daseg s4_main1 4000
#asmseg s4_main1
#daseg 12680_1BCDF #daseg 12680_1BCDF
#asmseg 12680_1BCDF
make
make check

View File

@ -26,6 +26,7 @@
;; $8A initialized same way as state (see $01 IMPL) ;; $8A initialized same way as state (see $01 IMPL)
;; $A8 - Menu count ;; $A8 - Menu count
;; $A9-$AA - Address of current window ;; $A9-$AA - Address of current window
@ -312,7 +313,7 @@ a2d_jump_table:
.addr MEASURE_TEXT_IMPL ; $18 MEASURE_TEXT .addr MEASURE_TEXT_IMPL ; $18 MEASURE_TEXT
.addr DRAW_TEXT_IMPL ; $19 DRAW_TEXT .addr DRAW_TEXT_IMPL ; $19 DRAW_TEXT
.addr CONFIGURE_ZP_IMPL ; $1A CONFIGURE_ZP_USE .addr CONFIGURE_ZP_IMPL ; $1A CONFIGURE_ZP_USE
.addr L5EDE ; $1B .addr LOW_ZP_STASH_IMPL ; $1B LOW_ZP_STASH
.addr L5F0A ; $1C .addr L5F0A ; $1C
.addr INIT_SCREEN_AND_MOUSE_IMPL ; $1D INIT_SCREEN_AND_MOUSE .addr INIT_SCREEN_AND_MOUSE_IMPL ; $1D INIT_SCREEN_AND_MOUSE
.addr DISABLE_MOUSE_IMPL ; $1E DISABLE_MOUSE .addr DISABLE_MOUSE_IMPL ; $1E DISABLE_MOUSE
@ -400,7 +401,7 @@ param_lengths:
PARAM_DEFN 3, $A1, 0 ; $18 MEASURE_TEXT PARAM_DEFN 3, $A1, 0 ; $18 MEASURE_TEXT
PARAM_DEFN 3, $A1, 1 ; $19 DRAW_TEXT PARAM_DEFN 3, $A1, 1 ; $19 DRAW_TEXT
PARAM_DEFN 1, $82, 0 ; $1A CONFIGURE_ZP_USE PARAM_DEFN 1, $82, 0 ; $1A CONFIGURE_ZP_USE
PARAM_DEFN 1, $82, 0 ; $1B PARAM_DEFN 1, $82, 0 ; $1B LOW_ZP_STASH
PARAM_DEFN 0, $00, 0 ; $1C PARAM_DEFN 0, $00, 0 ; $1C
PARAM_DEFN 12, $82, 0 ; $1D INIT_SCREEN_AND_MOUSE PARAM_DEFN 12, $82, 0 ; $1D INIT_SCREEN_AND_MOUSE
PARAM_DEFN 0, $00, 0 ; $1E DISABLE_MOUSE PARAM_DEFN 0, $00, 0 ; $1E DISABLE_MOUSE
@ -2052,7 +2053,7 @@ L53F8: ldx $AD
sta $05E8,x sta $05E8,x
sta $05E9,x sta $05E9,x
lda $07BC,y lda $07BC,y
sta L5E01,x sta low_zp_stash_buffer,x
sta L5E02,x sta L5E02,x
lda $0700,y lda $0700,y
sta L5E32,x sta L5E32,x
@ -2127,7 +2128,7 @@ L54B2: ldx $B1
lda $05E8,x lda $05E8,x
sta $A9 sta $A9
sta $94 sta $94
lda L5E01,x lda low_zp_stash_buffer,x
sta $AA sta $AA
sta $95 sta $95
L54C2: ldx $B1 L54C2: ldx $B1
@ -2135,7 +2136,7 @@ L54C2: ldx $B1
L54C6: lda $05E8,x L54C6: lda $05E8,x
cmp $A9 cmp $A9
bne L5532 bne L5532
lda L5E01,x lda low_zp_stash_buffer,x
cmp $AA cmp $AA
bne L5532 bne L5532
lda $0428,x lda $0428,x
@ -2192,7 +2193,7 @@ L553E: tax
cmp $05E8,x cmp $05E8,x
bne L5584 bne L5584
lda $AA lda $AA
cmp L5E01,x cmp low_zp_stash_buffer,x
bne L5584 bne L5584
ldy $0468,x ldy $0468,x
lda $0680,y lda $0680,y
@ -2282,7 +2283,7 @@ L5606: ldy $04A8,x
sbc $A9 sbc $A9
sta $A3 sta $A3
lda $07BC,y lda $07BC,y
sta L5E01,x sta low_zp_stash_buffer,x
sbc $AA sbc $AA
sta $A4 sta $A4
lda $0700,y lda $0700,y
@ -2813,7 +2814,7 @@ L5933: sta $94
;;; 3 bytes of params, copied to $A1 ;;; 3 bytes of params, copied to $A1
DRAW_TEXT_IMPL: DRAW_TEXT_IMPL:
jsr L5EFA jsr maybe_unstash_low_zp
jsr measure_text jsr measure_text
sta $A4 sta $A4
stx $A5 stx $A5
@ -2880,7 +2881,7 @@ L59A8: lda #0
sta LOWSCR,x sta LOWSCR,x
jsr L59C3 jsr L59C3
sta LOWSCR sta LOWSCR
L59B9: jsr L5EEA L59B9: jsr maybe_stash_low_zp
lda $A4 lda $A4
ldx $A4+1 ldx $A4+1
jmp adjust_xpos jmp adjust_xpos
@ -3372,6 +3373,7 @@ L5DA1: .addr L5AE2,L5ADD,L5AD8,L5AD3,L5ACE,L5AC9,L5AC4,L5ABF,L5ABA,L5AB5,L5AB
L5DC1: .addr L5C7E,L5C78,L5C72,L5C6C,L5C66,L5C60,L5C5A,L5C54,L5C4E,L5C48,L5C42,L5C3C,L5C36,L5C30,L5C2A,L5C24 L5DC1: .addr L5C7E,L5C78,L5C72,L5C6C,L5C66,L5C60,L5C5A,L5C54,L5C4E,L5C48,L5C42,L5C3C,L5C36,L5C30,L5C2A,L5C24
L5DE1: .addr L5D74,L5D68,L5D5C,L5D50,L5D44,L5D38,L5D2C,L5D20,L5D14,L5D08,L5CFC,L5CF0,L5CE4,L5CD8,L5CCC,L5CC0 L5DE1: .addr L5D74,L5D68,L5D5C,L5D50,L5D44,L5D38,L5D2C,L5D20,L5D14,L5D08,L5CFC,L5CF0,L5CE4,L5CD8,L5CCC,L5CC0
low_zp_stash_buffer:
L5E01: .byte $00 L5E01: .byte $00
L5E02: .byte $00,$00,$00,$00,$00,$00,$00,$00 L5E02: .byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00
@ -3403,12 +3405,12 @@ L5E42: .byte $00,$00,$00,$00,$00,$00,$00,$00
ldx #sizeof_state-1 ldx #sizeof_state-1
loop: lda screen_state,x loop: lda screen_state,x
sta $8A,x sta $8A,x
sta $D0,x sta state,x
dex dex
bpl loop bpl loop
lda L5E79 lda saved_state_addr
ldx L5E79+1 ldx saved_state_addr+1
jsr assign_and_prepare_state jsr assign_and_prepare_state
lda #$7F lda #$7F
@ -3418,7 +3420,8 @@ loop: lda screen_state,x
sta fill_eor_mask sta fill_eor_mask
rts rts
L5E79: .addr L5F42 saved_state_addr:
.addr saved_state
.endproc .endproc
;;; ================================================== ;;; ==================================================
@ -3530,34 +3533,49 @@ rts3: rts
;;; ================================================== ;;; ==================================================
;;; $1B IMPL ;;; LOW_ZP_STASH IMPL
;;; 1 byte of params, copied to $82 ;;; 1 byte of params, copied to $82
L5EDE: ;;; If high bit clear stash ZP $00-$43 to buffer if not already stashed.
;;; If high bit clear unstash ZP $00-$43 from buffer if not already unstashed.
.proc LOW_ZP_STASH_IMPL
lda $82 lda $82
cmp L5F1C cmp low_zp_stash_flag
beq rts3 beq rts3
sta L5F1C sta low_zp_stash_flag
bcc L5EFF bcc unstash
L5EEA: bit L5F1C
bpl L5EF9 maybe_stash:
bit low_zp_stash_flag
bpl end
;; Copy buffer to ZP $00-$43
stash:
ldx #$43 ldx #$43
L5EF1: lda L5E01,x : lda low_zp_stash_buffer,x
sta $00,x sta $00,x
dex dex
bpl L5EF1 bpl :-
L5EF9: rts
end: rts
L5EFA: bit L5F1C maybe_unstash:
bpl L5EF9 bit low_zp_stash_flag
L5EFF: ldx #$43 bpl end
L5F01: lda $00,x
sta L5E01,x ;; Copy ZP $00-$43 to buffer
unstash:
ldx #$43
: lda $00,x
sta low_zp_stash_buffer,x
dex dex
bpl L5F01 bpl :-
rts rts
.endproc
maybe_stash_low_zp := LOW_ZP_STASH_IMPL::maybe_stash
maybe_unstash_low_zp := LOW_ZP_STASH_IMPL::maybe_unstash
;;; ================================================== ;;; ==================================================
@ -3581,7 +3599,8 @@ table: .byte $01,$00,$00,$46,$01,$00
preserve_zp_flag: ; if high bit set, ZP saved during A2D calls preserve_zp_flag: ; if high bit set, ZP saved during A2D calls
.byte $80 .byte $80
L5F1C: .byte $80 low_zp_stash_flag:
.byte $80
stack_ptr_stash: stack_ptr_stash:
.byte 0 .byte 0
@ -3614,7 +3633,7 @@ font: .addr 0
;;; ================================================== ;;; ==================================================
.proc L5F42 .proc saved_state
left: .word 0 left: .word 0
top: .word 0 top: .word 0
addr: .addr A2D_SCREEN_ADDR addr: .addr A2D_SCREEN_ADDR
@ -3636,7 +3655,7 @@ font: .addr 0
.endproc .endproc
active_saved: ; saved copy of $F4...$FF when ZP swapped active_saved: ; saved copy of $F4...$FF when ZP swapped
.addr L5F42 .addr saved_state
.res 10, 0 .res 10, 0
zp_saved: ; top half of ZP for when preserve_zp_flag set zp_saved: ; top half of ZP for when preserve_zp_flag set
@ -4148,13 +4167,13 @@ L6348: lda $82,x
stx L6594 stx L6594
stx fill_rect_params_top stx fill_rect_params_top
dex dex
stx L6847 stx menu_item_y_table
clc clc
ldy #$00 ldy #$00
L63AC: txa L63AC: txa
adc L6847,y adc menu_item_y_table,y
iny iny
sta L6847,y sta menu_item_y_table,y
cpy #$0E cpy #$0E
bcc L63AC bcc L63AC
lda #$01 lda #$01
@ -4389,7 +4408,7 @@ L6567: sta $82
sta stack_ptr_stash sta stack_ptr_stash
ldy #sizeof_state-1 ldy #sizeof_state-1
L6573: lda ($82),y L6573: lda ($82),y
sta $D0,y sta state,y
dey dey
bpl L6573 bpl L6573
jmp prepare_state jmp prepare_state
@ -4840,9 +4859,10 @@ bottom: .word 0
.endproc .endproc
fill_rect_params4_top := fill_rect_params4::top fill_rect_params4_top := fill_rect_params4::top
L6847: .byte $0C menu_item_y_table:
L6848: .byte $18,$24,$30,$3C,$48,$54,$60,$6C .repeat 15, i
.byte $78,$84,$90,$9C,$A8,$B4 .byte 12 + 12 * i
.endrepeat
L6856: .byte $1E L6856: .byte $1E
L6857: .byte $1F L6857: .byte $1F
@ -5206,7 +5226,7 @@ L6ADE: jsr L68BE
cpx $C8 cpx $C8
bne L6B16 bne L6B16
beq L6B1C beq L6B1C
L6AF0: lda L6847,x L6AF0: lda menu_item_y_table,x
cmp set_pos_params::ycoord cmp set_pos_params::ycoord
bcs L6B1C bcs L6B1C
bcc L6B16 bcc L6B16
@ -5464,7 +5484,7 @@ L6C98: lda $BC
lda L6836 lda L6836
sta $8F sta $8F
ldy $AA ldy $AA
ldx L6847,y ldx menu_item_y_table,y ; ???
inx inx
stx $83 stx $83
stx fill_rect_params4::bottom stx fill_rect_params4::bottom
@ -5631,7 +5651,7 @@ L6E18: ldx $A9
L6E22: jmp SHOW_CURSOR_IMPL L6E22: jmp SHOW_CURSOR_IMPL
L6E25: ldx $A9 L6E25: ldx $A9
ldy L6848,x ldy menu_item_y_table+1,x ; ???
dey dey
ldx $BC ldx $BC
clc clc
@ -5641,10 +5661,10 @@ L6E25: ldx $A9
L6E33: jmp L68EA L6E33: jmp L68EA
L6E36: ldx $A9 L6E36: ldx $A9
lda L6847,x lda menu_item_y_table,x
sta fill_rect_params3_top sta fill_rect_params3_top
inc fill_rect_params3_top inc fill_rect_params3_top
lda L6848,x lda menu_item_y_table+1,x
sta fill_rect_params3_bottom sta fill_rect_params3_bottom
clc clc
lda $BB lda $BB
@ -5709,7 +5729,7 @@ L6EAA: ldx L6BDA
ldy fill_rect_params4::bottom+1,x ; ??? ldy fill_rect_params4::bottom+1,x ; ???
iny iny
sty fill_rect_params4::top sty fill_rect_params4::top
ldy L6847,x ldy menu_item_y_table,x
sty fill_rect_params4::bottom sty fill_rect_params4::bottom
jsr HIDE_CURSOR_IMPL jsr HIDE_CURSOR_IMPL
lda #$02 lda #$02
@ -6612,19 +6632,20 @@ L750C: .res 38,0
jsr window_by_id_or_exit jsr window_by_id_or_exit
lda $AB lda $AB
cmp L7010 cmp L7010
bne L753F bne :+
inc L7871 inc L7871
L753F: jsr L653C
: jsr L653C
jsr L6588 jsr L6588
lda L7871 lda L7871
bne L7550 bne :+
A2D_CALL A2D_SET_BOX, set_box_params A2D_CALL A2D_SET_BOX, set_box_params
L7550: jsr L718E : jsr L718E
jsr L6588 jsr L6588
lda L7871 lda L7871
bne L7561 bne :+
A2D_CALL A2D_SET_BOX, set_box_params A2D_CALL A2D_SET_BOX, set_box_params
L7561: jsr next_window::L703E : jsr next_window::L703E
lda active_state lda active_state
sta L750C sta L750C
lda active_state+1 lda active_state+1
@ -6632,15 +6653,16 @@ L7561: jsr next_window::L703E
jsr L75C6 jsr L75C6
php php
lda L758A lda L758A
ldx L758B ldx L758A+1
jsr assign_and_prepare_state jsr assign_and_prepare_state
asl preserve_zp_flag asl preserve_zp_flag
plp plp
bcc L7582 bcc :+
rts rts
: jsr L758C
;; fall through
.endproc .endproc
L7582: jsr L758C
L7585: lda #$A3 L7585: lda #$A3
jmp a2d_exit_with_a jmp a2d_exit_with_a
@ -6650,8 +6672,7 @@ L7585: lda #$A3
;;; 1 byte of params, copied to $82 ;;; 1 byte of params, copied to $82
L758A: .byte $0E L758A: .addr L750C + 2
L758B: .byte $75
L758C: jsr SHOW_CURSOR_IMPL L758C: jsr SHOW_CURSOR_IMPL
lda L750C lda L750C
@ -6679,7 +6700,7 @@ L75AC: lda fill_rect_params,x
jsr L75C6 jsr L75C6
bcc L7585 bcc L7585
ldy #sizeof_state-1 ldy #sizeof_state-1
L75BB: lda $D0,y L75BB: lda state,y
sta (params_addr),y sta (params_addr),y
dey dey
bpl L75BB bpl L75BB
@ -6831,7 +6852,10 @@ L769F: .byte $00
L76A0: .byte $00,$00,$00 L76A0: .byte $00,$00,$00
L76A3: .byte $00 L76A3: .byte $00
L76A4: .byte $00,$00,$00 L76A4: .byte $00,$00,$00
L76A7: .byte $00
;; High bit set if window is being resized, clear if moved.
drag_resize_flag:
.byte 0
;;; ================================================== ;;; ==================================================
@ -6848,7 +6872,7 @@ DRAG_RESIZE_IMPL:
DRAG_WINDOW_IMPL: DRAG_WINDOW_IMPL:
lda #$00 lda #$00
L76AE: sta L76A7 L76AE: sta drag_resize_flag
jsr L7ECD jsr L7ECD
ldx #$03 ldx #$03
L76B6: lda $83,x L76B6: lda $83,x
@ -6920,7 +6944,7 @@ L774B: lda ($A9),y
bne L774B bne L774B
ldx #$00 ldx #$00
stx set_input_params_unk stx set_input_params_unk
bit L76A7 bit drag_resize_flag
bmi L777D bmi L777D
L775F: lda $B7,x L775F: lda $B7,x
clc clc
@ -8077,7 +8101,7 @@ L800F: ldx L7D7A
adc #$00 adc #$00
sta L7D76 sta L7D76
ldy L7D7B ldy L7D7B
lda L6847,y lda menu_item_y_table,y
sta L7D77 sta L7D77
lda #$C0 lda #$C0
sta mouse_status sta mouse_status
@ -8252,7 +8276,7 @@ L817C: php
lda #$80 lda #$80
sta mouse_status sta mouse_status
jsr L70B7 jsr L70B7
bit L76A7 bit drag_resize_flag
bpl L81E4 bpl L81E4
lda $AC lda $AC
and #$04 and #$04
@ -8488,7 +8512,7 @@ L8352: lda L7D74
bne L8368 bne L8368
lda L7D76 lda L7D76
bne L8368 bne L8368
bit L76A7 bit drag_resize_flag
bpl L836A bpl L836A
L8368: sec L8368: sec
rts rts
@ -8522,7 +8546,7 @@ L8398: clc
L839A: lda L7D74 L839A: lda L7D74
cmp #$04 cmp #$04
beq L83B3 beq L83B3
bit L76A7 bit drag_resize_flag
.byte $30 .byte $30
L83A5: ora $75AD L83A5: ora $75AD
adc $2FE9,x adc $2FE9,x
@ -8755,8 +8779,9 @@ mouse_operand: ; e.g. if mouse is in slot 4, this is $40
;;; ================================================== ;;; ==================================================
.byte $03 .byte $03
sbc #$85 .addr $85E9
php
L8522: php
lda $E904,x lda $E904,x
sta $09 sta $09
ldy #$14 ldy #$14
@ -8822,6 +8847,7 @@ L8594: .byte $00
L8595: .byte $00 L8595: .byte $00
L8596: .byte $00 L8596: .byte $00
L8597: .byte $00 L8597: .byte $00
lda #$00 lda #$00
ldx #$00 ldx #$00
L859C: sta $D409,x L859C: sta $D409,x
@ -14442,7 +14468,7 @@ app_mask:
.byte px(%0000000),px(%0000000),px(%0011000),px(%0000000),px(%0000000) .byte px(%0000000),px(%0000000),px(%0011000),px(%0000000),px(%0000000)
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000),px(%0000000) .byte px(%0000000),px(%0000000),px(%0000000),px(%0000000),px(%0000000)
.res 70 .res 70, 0
.endproc .endproc
desktop_LD05E := desktop::LD05E desktop_LD05E := desktop::LD05E
desktop_A2D_RELAY := desktop::A2D_RELAY desktop_A2D_RELAY := desktop::A2D_RELAY