aboutsummaryrefslogtreecommitdiff
path: root/include/print.s
blob: 7a0ac23a6137f1f162d2b9b25cbd8efdfb451f6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
.scope Print
    ;; Print a "Please wait..." message to the screen. This message will be centered
    ;; horizontally and slightly at the top of the screen. This function assumes
    ;; that alphanumerical tiles are located in a similar fashion as for the
    ;; `assets/alphanum.chr` file.
    .proc show_wait_message
        WRITE_PPU_DATA $2129, $2A
        WRITE_PPU_DATA $212A, $26
        WRITE_PPU_DATA $212B, $1F
        WRITE_PPU_DATA $212C, $1B
        WRITE_PPU_DATA $212D, $2D
        WRITE_PPU_DATA $212E, $1F

        WRITE_PPU_DATA $2130, $31
        WRITE_PPU_DATA $2131, $1B
        WRITE_PPU_DATA $2132, $23
        WRITE_PPU_DATA $2133, $2E
        WRITE_PPU_DATA $2134, $36
        WRITE_PPU_DATA $2135, $36
        WRITE_PPU_DATA $2136, $36

        rts
    .endproc

    ;; TODO
    .proc show_bcd_16_number
        ;; Clear tiles that were written by `show_wait_message` and that are not re-used
        ;; here.
        WRITE_PPU_DATA $2129, $00
        WRITE_PPU_DATA $212A, $00
        WRITE_PPU_DATA $212B, $00
        WRITE_PPU_DATA $212C, $00
        WRITE_PPU_DATA $212D, $00
        WRITE_PPU_DATA $2133, $00
        WRITE_PPU_DATA $2134, $00
        WRITE_PPU_DATA $2135, $00
        WRITE_PPU_DATA $2136, $00

        ;; And loop so PPU::ADDRESS $2E21-$2E32 has the data as stored on bcdResult,
        ;; which is the binary to decimal conversion result when the final
        ;; computation was done.
        ldx #4
        ldy #$2E
    @loop:
        ;; PPU address.
        bit PPU::STATUS
        lda #$21
        sta PPU::ADDRESS
        sty PPU::ADDRESS

        ;; PPU data.
        lda bcdResult, x
        clc
        adc #$10
        sta PPU::DATA
        dex
        iny
        cpy #$33
        bne @loop

        rts
    .endproc

    ;; Copies basic palettes into the proper PPU address.
    .proc load_basic_palettes
        PPU_ADDR $3F00

        ldx #0
        @load_palettes_loop:
        lda palettes, x
        sta PPU::DATA
        inx
        cpx #$20
        bne @load_palettes_loop
        rts
    palettes:
        ;; Background (only first one used)
        .byte $0F, $30, $10, $00
        .byte $0F, $00, $00, $00
        .byte $0F, $00, $00, $00
        .byte $0F, $00, $00, $00

        ;; Foreground (unused)
        .byte $0F, $00, $00, $00
        .byte $0F, $00, $00, $00
        .byte $0F, $00, $00, $00
        .byte $0F, $00, $00, $00
    .endproc
.endscope