From f6a009fedaddbfe030248d12d54e5fccaba06320 Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Fri, 6 Oct 2017 09:09:43 -0700 Subject: [PATCH] DeskTop Seg 1: A2D dispatch and params --- desk.acc/a2d.inc | 1 - desktop/s1_aux1.s | 244 ++++++++++++++++++++++++++-------------------- 2 files changed, 136 insertions(+), 109 deletions(-) diff --git a/desk.acc/a2d.inc b/desk.acc/a2d.inc index 85105da..782bcb1 100644 --- a/desk.acc/a2d.inc +++ b/desk.acc/a2d.inc @@ -124,7 +124,6 @@ A2D_SET_POS := $0E ; Start of subsequent DRAW_TEXT, DRAW_LINE ;; .word ycoord A2D_DRAW_LINE := $0F ; Draw line (from SET_POS) - ;; $0F used in puzzle ;; (input length 4 bytes) ;; .word xdelta signed, delta in pixels ;; .word ydelta diff --git a/desktop/s1_aux1.s b/desktop/s1_aux1.s index d177e02..413301e 100644 --- a/desktop/s1_aux1.s +++ b/desktop/s1_aux1.s @@ -23,6 +23,7 @@ LD2D0 := $D2D0 ;;; ================================================== ;;; A2D +.proc a2d_dispatch .assert * = $4000, error, "A2D entry point must be at $4000" lda LOWSCR @@ -77,32 +78,39 @@ adjust_stack: ; Adjust stack to account for params sta $81 pla sta $80 - ldy param_lengths+1,x ; Check param length... - bpl L4076 - txa - pha - tya + ;; Param length format is a byte pair; + ;; * first byte is ZP address to copy bytes to + ;; * second byte's high bit is "hide cursor" flag + ;; * rest of second byte is # bytes to copy + + ldy param_lengths+1,x ; Check param length... + bpl done_hiding + + txa ; if high bit was set, stash + pha ; registers and $80 and then + tya ; optionally hide cursor pha lda $80 pha lda $81 pha - bit L633F - bpl L406A + bit hide_cursor_flag + bpl :+ jsr hide_cursor -L406A: pla +: pla sta $81 pla sta $80 pla - and #$7F + and #$7F ; clear high bit in length count tay pla tax -L4076: lda param_lengths,x - beq jump +done_hiding: + lda param_lengths,x ; ZP offset for params + beq jump ; nothing to copy sta store+1 dey : lda ($80),y @@ -112,11 +120,13 @@ store: sta $FF,y ; self modified jump: jsr $FFFF ; the actual call -L408A: bit L633F - bpl L4092 + ;; Exposed for routines to call directly +cleanup: + bit hide_cursor_flag + bpl :+ jsr show_cursor -L4092: bit preserve_zp_flag +: bit preserve_zp_flag bpl exit_with_0 jsr copy_params_from_zp ldx #$0B @@ -134,14 +144,15 @@ L4092: bit preserve_zp_flag exit_with_0: lda #0 -jt_rts: rts +rts1: rts +.endproc ;;; ================================================== ;;; Routines can jmp here to exit with A set a2d_exit_with_a: pha - jsr L408A + jsr a2d_dispatch::cleanup pla ldx stack_ptr_stash txs @@ -191,6 +202,8 @@ hide_cursor_count: ;;; ================================================== ;;; Jump table for A2D entry point calls + jt_rts := a2d_dispatch::rts1 + a2d_jump_table: .addr jt_rts ; $00 .addr L5E51 ; $01 @@ -273,88 +286,96 @@ a2d_jump_table: .addr L7D69 ; $4E ;; Entry point param lengths - ;; Byte pairs; first is length ??, second is offset ?? + ;; (length, ZP destination, hide cursor flag) param_lengths: - .byte $00,$00 - .byte $00,$00 - .byte $82,$01 - .byte $00,$00 - .byte $D0,$24 - .byte $00,$00 - .byte $D0,$10 - .byte $F0,$01 - .byte $E0,$08 - .byte $E8,$02 - .byte $EE,$02 - .byte $00,$00 - .byte $F1,$01 - .byte $A1,$04 - .byte $EA,$04 - .byte $A1,$84 - .byte $92,$84 - .byte $92,$88 - .byte $9F,$88 - .byte $92,$08 - .byte $8A,$10 - .byte $00,$80 - .byte $00,$80 - .byte $00,$00 - .byte $A1,$03 - .byte $A1,$83 - .byte $82,$01 - .byte $82,$01 - .byte $00,$00 - .byte $82,$0C - .byte $00,$00 - .byte $82,$03 - .byte $82,$02 - .byte $82,$02 - .byte $82,$01 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $00,$00 - .byte $82,$05 - .byte $82,$01 - .byte $82,$04 - .byte $00,$00 - .byte $00,$00 - .byte $C7,$04 - .byte $C7,$01 - .byte $C7,$02 - .byte $C7,$03 - .byte $C7,$03 - .byte $C7,$04 - .byte $00,$00 - .byte $82,$01 - .byte $00,$00 - .byte $82,$01 - .byte $82,$03 - .byte $82,$02 - .byte $82,$01 - .byte $82,$01 - .byte $EA,$04 - .byte $00,$00 - .byte $82,$01 - .byte $00,$00 - .byte $82,$05 - .byte $82,$05 - .byte $82,$05 - .byte $82,$05 - .byte $EA,$04 - .byte $82,$03 - .byte $82,$05 - .byte $8C,$03 - .byte $8C,$02 - .byte $8A,$10 - .byte $82,$02 +.macro PARAM_DEFN length, zp, cursor + .byte zp, (length | (cursor << 7)) +.endmacro + + PARAM_DEFN 0, $00, 0 ; call $00 + PARAM_DEFN 0, $00, 0 ; call $01 + PARAM_DEFN 1, $82, 0 ; call $02 + PARAM_DEFN 0, $00, 0 ; call $03 + PARAM_DEFN 36, $D0, 0 ; call $04 + PARAM_DEFN 0, $00, 0 ; call $05 + PARAM_DEFN 16, $D0, 0 ; call $06 + PARAM_DEFN 1, $F0, 0 ; call $07 + PARAM_DEFN 8, $E0, 0 ; call $08 + PARAM_DEFN 2, $E8, 0 ; call $09 + PARAM_DEFN 2, $EE, 0 ; call $0A + PARAM_DEFN 0, $00, 0 ; call $0B + PARAM_DEFN 1, $F1, 0 ; call $0C + PARAM_DEFN 4, $A1, 0 ; call $0D + PARAM_DEFN 4, $EA, 0 ; call $0E + PARAM_DEFN 4, $A1, 1 ; call $0F + PARAM_DEFN 4, $92, 1 ; call $10 + PARAM_DEFN 8, $92, 1 ; call $11 + PARAM_DEFN 8, $9F, 1 ; call $12 + PARAM_DEFN 8, $92, 0 ; call $13 + PARAM_DEFN 16, $8A, 0 ; call $14 + PARAM_DEFN 0, $00, 1 ; call $15 + PARAM_DEFN 0, $00, 1 ; call $16 + PARAM_DEFN 0, $00, 0 ; call $17 + PARAM_DEFN 3, $A1, 0 ; call $18 + PARAM_DEFN 3, $A1, 1 ; call $19 + PARAM_DEFN 1, $82, 0 ; call $1A + PARAM_DEFN 1, $82, 0 ; call $1B + PARAM_DEFN 0, $00, 0 ; call $1C + PARAM_DEFN 12, $82, 0 ; call $1D + PARAM_DEFN 0, $00, 0 ; call $1E + PARAM_DEFN 3, $82, 0 ; call $1F + PARAM_DEFN 2, $82, 0 ; call $20 + PARAM_DEFN 2, $82, 0 ; call $21 + PARAM_DEFN 1, $82, 0 ; call $22 + PARAM_DEFN 0, $00, 0 ; call $23 + PARAM_DEFN 0, $00, 0 ; call $24 + PARAM_DEFN 0, $00, 0 ; call $25 + PARAM_DEFN 0, $00, 0 ; call $26 + PARAM_DEFN 0, $00, 0 ; call $27 + PARAM_DEFN 0, $00, 0 ; call $28 + PARAM_DEFN 0, $00, 0 ; call $29 + PARAM_DEFN 0, $00, 0 ; call $2A + PARAM_DEFN 0, $00, 0 ; call $2B + PARAM_DEFN 0, $00, 0 ; call $2C + PARAM_DEFN 5, $82, 0 ; call $2D + PARAM_DEFN 1, $82, 0 ; call $2E + PARAM_DEFN 4, $82, 0 ; call $2F + PARAM_DEFN 0, $00, 0 ; call $30 + PARAM_DEFN 0, $00, 0 ; call $31 + PARAM_DEFN 4, $C7, 0 ; call $32 + PARAM_DEFN 1, $C7, 0 ; call $33 + PARAM_DEFN 2, $C7, 0 ; call $34 + PARAM_DEFN 3, $C7, 0 ; call $35 + PARAM_DEFN 3, $C7, 0 ; call $36 + PARAM_DEFN 4, $C7, 0 ; call $37 + PARAM_DEFN 0, $00, 0 ; call $38 + PARAM_DEFN 1, $82, 0 ; call $39 + PARAM_DEFN 0, $00, 0 ; call $3A + PARAM_DEFN 1, $82, 0 ; call $3B + PARAM_DEFN 3, $82, 0 ; call $3C + PARAM_DEFN 2, $82, 0 ; call $3D + PARAM_DEFN 1, $82, 0 ; call $3E + PARAM_DEFN 1, $82, 0 ; call $3F + PARAM_DEFN 4, $EA, 0 ; call $40 + PARAM_DEFN 0, $00, 0 ; call $41 + PARAM_DEFN 1, $82, 0 ; call $42 + PARAM_DEFN 0, $00, 0 ; call $43 + PARAM_DEFN 5, $82, 0 ; call $44 + PARAM_DEFN 5, $82, 0 ; call $45 + PARAM_DEFN 5, $82, 0 ; call $46 + PARAM_DEFN 5, $82, 0 ; call $47 + PARAM_DEFN 4, $EA, 0 ; call $48 + PARAM_DEFN 3, $82, 0 ; call $49 + PARAM_DEFN 5, $82, 0 ; call $4A + PARAM_DEFN 3, $8C, 0 ; call $4B + PARAM_DEFN 2, $8C, 0 ; call $4C + PARAM_DEFN 16, $8A, 0 ; call $4D + PARAM_DEFN 2, $82, 0 ; call $4E + +;;; ================================================== + + ;; ??? L4221: .byte $00,$02,$04,$06,$08,$0A,$0C,$0E .byte $10,$12,$14,$16,$18,$1A,$1C,$1E .byte $20,$22,$24,$26,$28,$2A,$2C,$2E @@ -615,6 +636,8 @@ L499D: .byte $05,$06,$00,$01,$02,$03,$04,$05 .byte $06,$00,$01,$02,$03,$04,$05,$06 .byte $00,$01,$02,$03 +;;; ================================================== + hires_table_lo: .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $80,$80,$80,$80,$80,$80,$80,$80 @@ -667,6 +690,8 @@ hires_table_hi: .byte $03,$07,$0B,$0F,$13,$17,$1B,$1F .byte $03,$07,$0B,$0F,$13,$17,$1B,$1F +;;; ================================================== + L4BA1: lda ($84),y eor ($8E),y eor $F6 @@ -2467,7 +2492,7 @@ L58CC: .byte $00,$00,$00,$00,$00,$00,$00,$00 MEASURE_TEXT_IMPL: jsr L58E8 - ldy #$03 + ldy #3 ; Store result (X,A) at params+3 sta ($80),y txa iny @@ -3183,7 +3208,7 @@ L5EB4: jsr copy_params_from_zp lda $F4 ldx $F5 -L5EBB: ldy #$00 +L5EBB: ldy #0 ; Store result (X,A) at params L5EBD: sta ($80),y txa iny @@ -3193,7 +3218,7 @@ L5EBD: sta ($80),y ;;; ================================================== QUERY_SCREEN_IMPL: - ldy #$23 + ldy #35 ; Store 35 bytes at params L5EC6: lda L5F1E,y sta ($80),y dey @@ -3208,7 +3233,7 @@ CONFIGURE_ZP_IMPL: beq L5ECE sta preserve_zp_flag bcc L5ECE - jmp L408A + jmp a2d_dispatch::cleanup ;;; ================================================== @@ -3240,7 +3265,7 @@ L5F01: lda L0000,x ;;; ================================================== L5F0A: - ldy #$05 + ldy #5 ; Store 5 bytes at params L5F0C: lda L5F15,y sta ($80),y dey @@ -3690,7 +3715,10 @@ L633B: .byte $00 L633C: .byte $00 L633D: .byte $00 L633E: .byte $00 -L633F: .byte $00 + +hide_cursor_flag: + .byte 0 + L6340: .byte $00 ;;; ================================================== @@ -3779,7 +3807,7 @@ L63E5: lda L6338 L63F6: stx L6338 lda #$80 - sta L633F + sta hide_cursor_flag lda L6338 bne L640D bit L6339 @@ -3881,7 +3909,7 @@ L64C7: lda L6340 pha plp lda #$00 - sta L633F + sta hide_cursor_flag rts ;;; ================================================== @@ -4054,12 +4082,12 @@ L65E7: bcs L6604 bcc L65F0 sta L6752 L65F0: tax - ldy #$00 + ldy #0 ; Store 5 bytes at params L65F3: lda L6754,x sta ($80),y inx iny - cpy #$04 + cpy #4 bne L65F3 lda #$00 sta ($80),y @@ -4109,8 +4137,8 @@ L6645: lda #$00 bit L5FFC bpl L664E lda #$04 -L664E: ldy #$00 - sta ($80),y +L664E: ldy #0 + sta ($80),y ; Store 2 bytes at params iny L6653: lda L5FF3,y sta ($80),y