mirror of
https://github.com/a2-4am/million-perfect-letters.git
synced 2024-06-02 07:41:30 +00:00
166 lines
3.7 KiB
Plaintext
166 lines
3.7 KiB
Plaintext
|
;license:MIT
|
||
|
;(c) 2020 by 4am
|
||
|
;
|
||
|
; common graphics functions
|
||
|
;
|
||
|
|
||
|
GlobalLeftMargin
|
||
|
; TODO other values for smaller puzzles
|
||
|
; $0A for 7-letter puzzles
|
||
|
!byte $0A
|
||
|
|
||
|
Home
|
||
|
; in: none, but assumes text screen 1 is clear (this is done at program startup)
|
||
|
; out: hi-res page 1 cleared but text screen 1 still displayed
|
||
|
bit PAGE1
|
||
|
bit FULLGFX
|
||
|
bit HIRES
|
||
|
bit TEXTMODE
|
||
|
ldx #$20
|
||
|
stx @erase+2
|
||
|
ldy #$00
|
||
|
tya
|
||
|
@erase sta $2000,y
|
||
|
iny
|
||
|
bne @erase
|
||
|
inc @erase+2
|
||
|
dex
|
||
|
bne @erase
|
||
|
rts
|
||
|
|
||
|
DrawThinLines
|
||
|
ldx #$55
|
||
|
jsr DrawThinLine
|
||
|
ldx #$6B
|
||
|
; /!\ execution falls through here
|
||
|
DrawThinLine
|
||
|
; in: X = HGR row (0x00..0xBF)
|
||
|
lda #$AA
|
||
|
ldy HGRLO, x
|
||
|
sty $FE
|
||
|
ldy HGRHI, x
|
||
|
sty $FF
|
||
|
ldy GlobalLeftMargin
|
||
|
dey
|
||
|
- sta ($FE), y
|
||
|
eor #$7F
|
||
|
iny
|
||
|
cpy #$1F ; TODO
|
||
|
bcc -
|
||
|
rts
|
||
|
|
||
|
ScrollDown
|
||
|
; in: Y = logical column to scroll
|
||
|
; out: X/Y preserved
|
||
|
stx @x+1
|
||
|
sty @y+1
|
||
|
ldx #$16
|
||
|
jsr LogicalColumnToPhysicalColumn
|
||
|
jsr InitScrollStorage
|
||
|
jsr WaitForVBL
|
||
|
jsr GENSCROLLDOWN
|
||
|
jsr UnwaitForVBL
|
||
|
@x ldx #$FD ; SMC
|
||
|
@y ldy #$FD ; SMC
|
||
|
rts
|
||
|
|
||
|
ScrollUp
|
||
|
; in: Y = logical column to scroll
|
||
|
; out: X/Y preserved
|
||
|
stx @x+1
|
||
|
sty @y+1
|
||
|
ldx #$16
|
||
|
jsr LogicalColumnToPhysicalColumn
|
||
|
jsr InitScrollStorage
|
||
|
jsr WaitForVBL
|
||
|
jsr GENSCROLLUP
|
||
|
jsr UnwaitForVBL
|
||
|
@x ldx #$FD ; SMC
|
||
|
@y ldy #$FD ; SMC
|
||
|
rts
|
||
|
|
||
|
InitScrollStorage
|
||
|
lda #$00
|
||
|
sta $FC
|
||
|
sta $FD
|
||
|
sta $FE
|
||
|
sta $FF
|
||
|
rts
|
||
|
|
||
|
LogicalColumnToPhysicalColumn
|
||
|
; in: Y contains logical column number
|
||
|
; out: Y contains physical byte offset to use against an HGR base address
|
||
|
; A clobbered
|
||
|
; X preserved
|
||
|
lda GlobalLeftMargin
|
||
|
clc
|
||
|
bcc +
|
||
|
- adc #$03
|
||
|
+ dey
|
||
|
bpl -
|
||
|
tay
|
||
|
rts
|
||
|
|
||
|
EraseColumnSelectionIndicator
|
||
|
; out: preserves X/Y
|
||
|
stx @x+1
|
||
|
sty @y+1
|
||
|
jsr DrawThinLines
|
||
|
@x ldx #$FD ; SMC
|
||
|
@y ldy #$FD ; SMC
|
||
|
rts
|
||
|
|
||
|
DrawColumnSelectionIndicator
|
||
|
; out: preserves X/Y
|
||
|
stx @x+1
|
||
|
sty @y+1
|
||
|
ldx #$55
|
||
|
jsr DrawOneSelectionIndicator
|
||
|
ldx #$6B
|
||
|
jsr DrawOneSelectionIndicator
|
||
|
@x ldx #$FD ; SMC
|
||
|
@y ldy #$FD ; SMC
|
||
|
rts
|
||
|
|
||
|
DrawOneSelectionIndicator
|
||
|
lda HGRLO, x
|
||
|
sta $FE
|
||
|
lda HGRHI, x
|
||
|
sta $FF
|
||
|
ldy GlobalLeftMargin
|
||
|
dey
|
||
|
lda #$D5
|
||
|
ldx selected_logical_column
|
||
|
beq +
|
||
|
- iny
|
||
|
iny
|
||
|
iny
|
||
|
eor #$7F
|
||
|
dex
|
||
|
bne -
|
||
|
+ ldx #4
|
||
|
- sta ($FE), y
|
||
|
eor #$7F
|
||
|
iny
|
||
|
dex
|
||
|
bne -
|
||
|
rts
|
||
|
|
||
|
;------------------------------------------------------------------------------
|
||
|
; SoftBell
|
||
|
;
|
||
|
; in: none
|
||
|
; out: all registers and flags clobbered
|
||
|
;------------------------------------------------------------------------------
|
||
|
SoftBell
|
||
|
ldx #32
|
||
|
- lda #2
|
||
|
jsr ROM_WAIT
|
||
|
bit SPEAKER
|
||
|
lda #33
|
||
|
jsr ROM_WAIT
|
||
|
bit SPEAKER
|
||
|
dex
|
||
|
bne -
|
||
|
rts
|