From ccde5b3f5e0cc00a541deb8c93690d22f0e058aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20J=C2=A0Cardoza?= Date: Thu, 13 Jun 2024 16:59:40 -0400 Subject: [PATCH] Work on IRQs --- include/vera.i | 14 --- src/irq.s | 293 +++++++++++++++++++++++++++++++++++++++++------- src/main.s | 10 -- src/memory.s | 4 + src/vera.s | 2 + src/vera_font.s | 261 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 519 insertions(+), 65 deletions(-) create mode 100644 src/vera_font.s diff --git a/include/vera.i b/include/vera.i index e641a55..6ced582 100644 --- a/include/vera.i +++ b/include/vera.i @@ -114,20 +114,6 @@ VERA_PSG_BASE = $1F9C0 VERA_PALETTE_BASE = $1FA00 VERA_SPRITE_ATTR_BASE = $1FC00 -; vpoke -; writes an immediate byte to a given register -vpoke .macro reg, value - .save_registers - - lda #\value - sta \reg - - rep #$20 - .al - pla - plp -.endmacro - ; vera_address_select - selects the active VERA address register ; Selecting 0 means that the address registers control the address ; accessed by VERA_DATA0, while selecting 1 means controlling the diff --git a/src/irq.s b/src/irq.s index 9880905..a46aebb 100644 --- a/src/irq.s +++ b/src/irq.s @@ -6,23 +6,118 @@ .section irq_handlers .logical $00FE00 +nmi_user_vector + .long irq_exit + +irq_user_vector + .long irq_exit + +virq_user_vector + .long irq_exit + +brk_user_vector + .long irq_exit + +cop_user_vector + .long irq_exit + +timer0_user_vector + .long irq_exit + +timer1_user_vector + .long irq_exit + +timer2_user_vector + .long irq_exit + +timer3_user_vector + .long irq_exit + +timer4_user_vector + .long irq_exit + +timer5_user_vector + .long irq_exit + +timer6_user_vector + .long irq_exit + +timer7_user_vector + .long irq_exit + empty_irq_handler .proc - rti + phb + phd + .long_a + .long_i + pha + phx + phy + + jml irq_exit +.endproc + +empty_irq_handler_emu .proc + phb + phd + .short_a + .short_i + pha + phx + phy + + jmp irq_exit_emu +.endproc + +irq_handler .proc + phb + phd + .short_a + .short_i + pha + phx + phy + + jmp [irq_user_vector] .endproc virq_handler .proc phb phd - .long_a - .long_i + .short_a + .short_i pha phx phy - jmp irq_exit + jmp [virq_user_vector] .endproc cop_handler .proc + phb + phd + .short_a + .short_i + pha + phx + phy + + jmp [cop_user_vector] +.endproc + +brk_handler .proc + phb + phd + .short_a + .short_i + pha + phx + phy + + jmp [brk_user_vector] +.endproc + +nmi_handler .proc phb phd .long_a @@ -31,11 +126,103 @@ cop_handler .proc phx phy - jmp irq_exit + jmp [nmi_user_vector] .endproc -nmi_handler .proc - rti +timer0_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer0_user_vector] +.endproc + +timer1_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer1_user_vector] +.endproc + +timer2_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer2_user_vector] +.endproc + +timer3_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer3_user_vector] +.endproc + +timer4_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer4_user_vector] +.endproc + +timer5_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer5_user_vector] +.endproc + +timer6_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer6_user_vector] +.endproc + +timer7_handler .proc + phb + phd + .long_a + .long_i + pha + phx + phy + + jmp [timer7_user_vector] .endproc irq_exit .proc @@ -49,45 +236,58 @@ irq_exit .proc rti .endproc +irq_exit_emu .proc + .short_a + .short_i + ply + plx + pla + pld + plb + rti +.endproc + .endlogical .endsection irq_handlers .section irq_vectors .logical $00FF80 -.addr <>empty_irq_handler ; Timer 0 (Native Mode) -.addr <>empty_irq_handler ; Timer 1 (Native Mode) -.addr <>empty_irq_handler ; Timer 2 (Native Mode) -.addr <>empty_irq_handler ; Timer 3 (Native Mode) -.addr <>empty_irq_handler ; Timer 4 (Native Mode) -.addr <>empty_irq_handler ; Timer 5 (Native Mode) -.addr <>empty_irq_handler ; Timer 6 (Native Mode) -.addr <>empty_irq_handler ; Timer 7 (Native Mode) -.addr <>empty_irq_handler ; PE56 (Native Mode) -.addr <>empty_irq_handler ; NE57 (Native Mode) -.addr <>empty_irq_handler ; PE60 (Native Mode) -.addr <>empty_irq_handler ; PE62 (Native Mode) -.addr <>virq_handler ; NE64/VERA IRQ (Native Mode) -.addr <>empty_irq_handler ; NE66 (Native Mode) -.addr <>empty_irq_handler ; PIB (Native Mode) -.addr <>empty_irq_handler ; IRQ (Native Mode) -.addr <>empty_irq_handler ; UART0 RX (Native Mode) -.addr <>empty_irq_handler ; UART0 TX (Native Mode) -.addr <>empty_irq_handler ; UART1 RX (Native Mode) -.addr <>empty_irq_handler ; UART1 TX (Native Mode) -.addr <>empty_irq_handler ; UART2 RX (Native Mode) -.addr <>empty_irq_handler ; UART2 TX (Native Mode) -.addr <>empty_irq_handler ; UART3 RX (Native Mode) -.addr <>empty_irq_handler ; UART3 TX (Native Mode) -.addr <>empty_irq_handler ; RESERVED -.addr <>empty_irq_handler ; RESERVED -.addr <>cop_handler ; COP (Native Mode) -.addr <>empty_irq_handler ; BRK (Native Mode) -.addr <>empty_irq_handler ; ABORT (Native Mode) -.addr <>nmi_handler ; NMI (Native Mode) -.addr <>empty_irq_handler ; RESERVED -.addr <>empty_irq_handler ; RESERVED -.fill 64, $EA + .addr <>timer0_handler ; Timer 0 (Native Mode) + .addr <>timer1_handler ; Timer 1 (Native Mode) + .addr <>timer2_handler ; Timer 2 (Native Mode) + .addr <>timer3_handler ; Timer 3 (Native Mode) + .addr <>timer4_handler ; Timer 4 (Native Mode) + .addr <>timer5_handler ; Timer 5 (Native Mode) + .addr <>timer6_handler ; Timer 6 (Native Mode) + .addr <>timer7_handler ; Timer 7 (Native Mode) + .addr <>empty_irq_handler ; PE56 (Native Mode) + .addr <>empty_irq_handler ; NE57 (Native Mode) + .addr <>empty_irq_handler ; PE60 (Native Mode) + .addr <>empty_irq_handler ; PE62 (Native Mode) + .addr <>virq_handler ; NE64/VERA IRQ (Native Mode) + .addr <>empty_irq_handler ; NE66 (Native Mode) + .addr <>empty_irq_handler ; PIB (Native Mode) + .addr <>irq_handler ; IRQ (Native Mode) + .addr <>empty_irq_handler ; UART0 RX (Native Mode) + .addr <>empty_irq_handler ; UART0 TX (Native Mode) + .addr <>empty_irq_handler ; UART1 RX (Native Mode) + .addr <>empty_irq_handler ; UART1 TX (Native Mode) + .addr <>empty_irq_handler ; UART2 RX (Native Mode) + .addr <>empty_irq_handler ; UART2 TX (Native Mode) + .addr <>empty_irq_handler ; UART3 RX (Native Mode) + .addr <>empty_irq_handler ; UART3 TX (Native Mode) + .addr <>empty_irq_handler ; RESERVED + .addr <>empty_irq_handler ; RESERVED + .addr <>cop_handler ; COP (Native Mode) + .addr <>brk_handler ; BRK (Native Mode) + .addr <>empty_irq_handler ; ABORT (Native Mode) + .addr <>nmi_handler ; NMI (Native Mode) + .addr <>empty_irq_handler ; RESERVED + .addr <>empty_irq_handler ; RESERVED + + ; Emtpy handlers for 65C02 emulation mode. + .fill 64, <>empty_irq_handler_emu .endlogical .endsection irq_vectors @@ -98,7 +298,18 @@ irq_exit .proc irq_init .proc .save_registers - .memcpy $00FE00, $00FE00, $200 + ; Disable /CS4; This frees the RAM from $008000-$00FDFF for + ; user code. + ; trampolines. + lda #1 << 4 + trb PCS7 + + ; Copy the vectors and handlers into RAM. + .memcpy $00FE00, $C0FE00, $200 + + ; Enable the /NMI input with BCR6 = 1 + lda #1 << 6 + tsb BCR .restore_registers rtl diff --git a/src/main.s b/src/main.s index 50bb366..7b6f3fc 100644 --- a/src/main.s +++ b/src/main.s @@ -9,16 +9,6 @@ main .proc jsl irq_init - ; Disable /CS4; This frees the RAM from $008000-$00FDFF for - ; user code. $00FE00-$00FFFF is for the IRQ vectors and - ; trampolines. - lda #1 << 4 - trb PCS7 - - ; Enable the /NMI input with BCR6 = 1 - lda #1 << 6 - tsb BCR - jsl led_init jsl vera_init diff --git a/src/memory.s b/src/memory.s index 8430b68..af0f13a 100644 --- a/src/memory.s +++ b/src/memory.s @@ -29,6 +29,10 @@ .dsection boot .cerror * > $C08100 +.fill $C08100 - *, $EA +.dsection data +.cerror * > $C0FE00 + .fill $C0FE00 - *, $EA * = $C0FE00 .dsection irq_handlers diff --git a/src/vera.s b/src/vera.s index 3364ca4..cb54d71 100644 --- a/src/vera.s +++ b/src/vera.s @@ -5,6 +5,8 @@ vera_init .proc jsl vera_reset + ; Load the VERA font. + .restore_registers rtl .endproc diff --git a/src/vera_font.s b/src/vera_font.s new file mode 100644 index 0000000..f686bf6 --- /dev/null +++ b/src/vera_font.s @@ -0,0 +1,261 @@ +.section data + +vera_font + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $7e, $81, $a5, $81, $81, $bd, $99, $81, $81, $7e, $00, $00, $00, $00 + .byte $00, $00, $7e, $ff, $db, $ff, $ff, $c3, $e7, $ff, $ff, $7e, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $6c, $fe, $fe, $fe, $fe, $7c, $38, $10, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $10, $38, $7c, $fe, $7c, $38, $10, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $18, $3c, $3c, $e7, $e7, $e7, $18, $18, $3c, $00, $00, $00, $00 + .byte $00, $00, $00, $18, $3c, $7e, $ff, $ff, $7e, $18, $18, $3c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $18, $3c, $3c, $18, $00, $00, $00, $00, $00, $00 + .byte $ff, $ff, $ff, $ff, $ff, $ff, $e7, $c3, $c3, $e7, $ff, $ff, $ff, $ff, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $66, $42, $42, $66, $3c, $00, $00, $00, $00, $00 + .byte $ff, $ff, $ff, $ff, $ff, $c3, $99, $bd, $bd, $99, $c3, $ff, $ff, $ff, $00, $00 + .byte $00, $00, $1e, $0e, $1a, $32, $78, $cc, $cc, $cc, $cc, $78, $00, $00, $00, $00 + .byte $00, $00, $3c, $66, $66, $66, $66, $3c, $18, $7e, $18, $18, $00, $00, $00, $00 + .byte $00, $00, $3f, $33, $3f, $30, $30, $30, $30, $70, $f0, $e0, $00, $00, $00, $00 + .byte $00, $00, $7f, $63, $7f, $63, $63, $63, $63, $67, $e7, $e6, $c0, $00, $00, $00 + .byte $00, $00, $00, $18, $18, $db, $3c, $e7, $3c, $db, $18, $18, $00, $00, $00, $00 + .byte $00, $80, $c0, $e0, $f0, $f8, $fe, $f8, $f0, $e0, $c0, $80, $00, $00, $00, $00 + .byte $00, $02, $06, $0e, $1e, $3e, $fe, $3e, $1e, $0e, $06, $02, $00, $00, $00, $00 + .byte $00, $00, $18, $3c, $7e, $18, $18, $18, $7e, $3c, $18, $00, $00, $00, $00, $00 + .byte $00, $00, $28, $28, $28, $28, $28, $28, $28, $00, $28, $28, $00, $00, $00, $00 + .byte $00, $00, $7e, $92, $92, $92, $92, $72, $12, $12, $12, $12, $00, $00, $00, $00 + .byte $00, $38, $44, $40, $30, $48, $44, $44, $24, $18, $04, $44, $38, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $fe, $fe, $fe, $fe, $00, $00, $00, $00 + .byte $00, $00, $18, $3c, $7e, $18, $18, $18, $7e, $3c, $18, $7e, $00, $00, $00, $00 + .byte $00, $00, $18, $3c, $7e, $18, $18, $18, $18, $18, $18, $18, $00, $00, $00, $00 + .byte $00, $00, $18, $18, $18, $18, $18, $18, $18, $7e, $3c, $18, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $18, $0c, $fe, $0c, $18, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $30, $60, $fe, $60, $30, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $c0, $c0, $c0, $fe, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $28, $6c, $fe, $6c, $28, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $10, $38, $38, $7c, $7c, $fe, $fe, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $fe, $fe, $7c, $7c, $38, $38, $10, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $10, $10, $10, $10, $10, $10, $10, $00, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $24, $24, $24, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $24, $24, $24, $7e, $24, $24, $7e, $24, $24, $24, $00, $00, $00, $00 + .byte $10, $10, $7c, $92, $90, $90, $7c, $12, $12, $92, $7c, $10, $10, $00, $00, $00 + .byte $00, $00, $64, $94, $68, $08, $10, $10, $20, $2c, $52, $4c, $00, $00, $00, $00 + .byte $00, $00, $18, $24, $24, $18, $30, $4a, $44, $44, $44, $3a, $00, $00, $00, $00 + .byte $00, $00, $10, $10, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $08, $10, $20, $20, $20, $20, $20, $20, $10, $08, $00, $00, $00, $00 + .byte $00, $00, $20, $10, $08, $08, $08, $08, $08, $08, $10, $20, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $24, $18, $7e, $18, $24, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $10, $10, $7c, $10, $10, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $10, $20, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $7e, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $04, $04, $08, $08, $10, $10, $20, $20, $40, $40, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $46, $4a, $52, $62, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $08, $18, $28, $08, $08, $08, $08, $08, $08, $3e, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $02, $04, $08, $10, $20, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $02, $1c, $02, $02, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $02, $06, $0a, $12, $22, $42, $7e, $02, $02, $02, $00, $00, $00, $00 + .byte $00, $00, $7e, $40, $40, $40, $7c, $02, $02, $02, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $1c, $20, $40, $40, $7c, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $7e, $42, $02, $04, $04, $08, $08, $10, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $42, $3c, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $42, $42, $3e, $02, $02, $04, $38, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $10, $10, $00, $00, $00, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $10, $10, $00, $00, $00, $10, $10, $20, $00, $00, $00 + .byte $00, $00, $00, $04, $08, $10, $20, $40, $20, $10, $08, $04, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $7e, $00, $00, $7e, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $20, $10, $08, $04, $02, $04, $08, $10, $20, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $02, $04, $08, $08, $00, $08, $08, $00, $00, $00, $00 + .byte $00, $00, $7c, $82, $9e, $a2, $a2, $a2, $a6, $9a, $80, $7e, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $42, $42, $7e, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $7c, $42, $42, $42, $7c, $42, $42, $42, $42, $7c, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $40, $40, $40, $40, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $78, $44, $42, $42, $42, $42, $42, $42, $44, $78, $00, $00, $00, $00 + .byte $00, $00, $7e, $40, $40, $40, $78, $40, $40, $40, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $7e, $40, $40, $40, $78, $40, $40, $40, $40, $40, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $40, $40, $40, $4e, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $42, $42, $42, $42, $7e, $42, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $38, $10, $10, $10, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $00, $0e, $04, $04, $04, $04, $04, $04, $44, $44, $38, $00, $00, $00, $00 + .byte $00, $00, $42, $44, $48, $50, $60, $60, $50, $48, $44, $42, $00, $00, $00, $00 + .byte $00, $00, $40, $40, $40, $40, $40, $40, $40, $40, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $82, $c6, $aa, $92, $92, $82, $82, $82, $82, $82, $00, $00, $00, $00 + .byte $00, $00, $42, $42, $42, $62, $52, $4a, $46, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $42, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $7c, $42, $42, $42, $42, $7c, $40, $40, $40, $40, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $42, $42, $42, $42, $42, $4a, $3c, $02, $00, $00, $00 + .byte $00, $00, $7c, $42, $42, $42, $42, $7c, $50, $48, $44, $42, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $40, $40, $3c, $02, $02, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $fe, $10, $10, $10, $10, $10, $10, $10, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $42, $42, $42, $42, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $42, $42, $42, $42, $42, $24, $24, $24, $18, $18, $00, $00, $00, $00 + .byte $00, $00, $82, $82, $82, $82, $82, $92, $92, $aa, $c6, $82, $00, $00, $00, $00 + .byte $00, $00, $42, $42, $24, $24, $18, $18, $24, $24, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $82, $82, $44, $44, $28, $10, $10, $10, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $7e, $02, $02, $04, $08, $10, $20, $40, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $38, $20, $20, $20, $20, $20, $20, $20, $20, $38, $00, $00, $00, $00 + .byte $00, $00, $40, $40, $20, $20, $10, $10, $08, $08, $04, $04, $00, $00, $00, $00 + .byte $00, $00, $38, $08, $08, $08, $08, $08, $08, $08, $08, $38, $00, $00, $00, $00 + .byte $00, $00, $10, $28, $44, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $7e, $00, $00, $00, $00 + .byte $00, $10, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $02, $3e, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $40, $40, $40, $7c, $42, $42, $42, $42, $42, $7c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $42, $40, $40, $40, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $02, $02, $02, $3e, $42, $42, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $42, $42, $7e, $40, $40, $3c, $00, $00, $00, $00 + .byte $00, $00, $0e, $10, $10, $7c, $10, $10, $10, $10, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3e, $42, $42, $42, $42, $42, $3e, $02, $02, $3c, $00 + .byte $00, $00, $40, $40, $40, $7c, $42, $42, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $10, $10, $00, $30, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $04, $04, $00, $0c, $04, $04, $04, $04, $04, $04, $44, $44, $38, $00, $00 + .byte $00, $00, $40, $40, $40, $42, $44, $48, $70, $48, $44, $42, $00, $00, $00, $00 + .byte $00, $00, $30, $10, $10, $10, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $fc, $92, $92, $92, $92, $92, $92, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $7c, $42, $42, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $7c, $42, $42, $42, $42, $7c, $40, $40, $40, $00, $00 + .byte $00, $00, $00, $00, $00, $3e, $42, $42, $42, $42, $3e, $02, $02, $02, $00, $00 + .byte $00, $00, $00, $00, $00, $5e, $60, $40, $40, $40, $40, $40, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3e, $40, $40, $3c, $02, $02, $7c, $00, $00, $00, $00 + .byte $00, $00, $10, $10, $10, $7c, $10, $10, $10, $10, $10, $0c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $42, $42, $42, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $42, $42, $42, $24, $24, $18, $18, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $82, $92, $92, $92, $92, $92, $7c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $42, $42, $24, $18, $24, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $42, $42, $42, $42, $42, $3e, $02, $02, $3c, $00, $00 + .byte $00, $00, $00, $00, $00, $7e, $04, $08, $10, $20, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $0c, $10, $10, $10, $10, $20, $10, $10, $10, $10, $0c, $00, $00, $00 + .byte $00, $00, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $00, $00, $00, $00 + .byte $00, $00, $30, $08, $08, $08, $08, $04, $08, $08, $08, $08, $30, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $62, $92, $8c, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $10, $28, $44, $82, $82, $82, $fe, $00, $00, $00, $00, $00 + .byte $00, $00, $3c, $42, $42, $40, $40, $40, $40, $42, $42, $3c, $10, $10, $20, $00 + .byte $00, $00, $24, $24, $00, $42, $42, $42, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $08, $10, $00, $3c, $42, $42, $7e, $40, $40, $3c, $00, $00, $00, $00 + .byte $00, $00, $18, $24, $00, $3c, $02, $3e, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $24, $24, $00, $3c, $02, $3e, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $10, $08, $00, $3c, $02, $3e, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $18, $24, $18, $00, $3c, $02, $3e, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $42, $40, $40, $40, $42, $3c, $10, $10, $20, $00 + .byte $00, $00, $18, $24, $00, $3c, $42, $42, $7e, $40, $40, $3c, $00, $00, $00, $00 + .byte $00, $00, $24, $24, $00, $3c, $42, $42, $7e, $40, $40, $3c, $00, $00, $00, $00 + .byte $00, $00, $10, $08, $00, $3c, $42, $42, $7e, $40, $40, $3c, $00, $00, $00, $00 + .byte $00, $00, $48, $48, $00, $30, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $00, $30, $48, $00, $30, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $00, $20, $10, $00, $30, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $24, $00, $3c, $42, $42, $42, $7e, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $18, $24, $18, $3c, $42, $42, $42, $7e, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $08, $10, $7e, $40, $40, $40, $78, $40, $40, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $6c, $12, $72, $9e, $90, $90, $6c, $00, $00, $00, $00 + .byte $00, $00, $7e, $90, $90, $90, $fc, $90, $90, $90, $90, $9e, $00, $00, $00, $00 + .byte $00, $00, $18, $24, $00, $3c, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $24, $24, $00, $3c, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $10, $08, $00, $3c, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $18, $24, $00, $42, $42, $42, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $10, $08, $00, $42, $42, $42, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $00, $24, $24, $00, $42, $42, $42, $42, $42, $3e, $02, $02, $3c, $00 + .byte $00, $24, $00, $3c, $42, $42, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $24, $24, $00, $42, $42, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $08, $08, $3e, $49, $48, $48, $48, $49, $3e, $08, $08, $00, $00, $00 + .byte $00, $00, $18, $24, $20, $20, $78, $20, $20, $20, $22, $7e, $00, $00, $00, $00 + .byte $00, $82, $82, $44, $44, $28, $10, $7c, $10, $7c, $10, $10, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $60, $50, $50, $64, $4e, $44, $44, $42, $00, $00, $00, $00 + .byte $00, $00, $08, $14, $10, $10, $38, $10, $10, $10, $10, $10, $50, $20, $00, $00 + .byte $00, $00, $08, $10, $00, $3c, $02, $3e, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $10, $20, $00, $30, $10, $10, $10, $10, $10, $38, $00, $00, $00, $00 + .byte $00, $00, $08, $10, $00, $3c, $42, $42, $42, $42, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $08, $10, $00, $42, $42, $42, $42, $42, $42, $3e, $00, $00, $00, $00 + .byte $00, $00, $32, $4c, $00, $7c, $42, $42, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $32, $4c, $00, $42, $42, $62, $52, $4a, $46, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $3c, $02, $3e, $42, $3e, $00, $7e, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $38, $44, $44, $38, $00, $7c, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $10, $10, $00, $10, $10, $20, $42, $42, $42, $3c, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $fe, $c0, $c0, $c0, $c0, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $fe, $06, $06, $06, $06, $00, $00, $00, $00, $00 + .byte $00, $20, $60, $20, $22, $24, $08, $10, $20, $4c, $92, $04, $08, $1e, $00, $00 + .byte $00, $20, $60, $20, $22, $24, $08, $10, $22, $46, $8a, $1e, $02, $02, $00, $00 + .byte $00, $00, $00, $10, $10, $00, $10, $10, $10, $10, $10, $10, $10, $00, $00, $00 + .byte $00, $00, $00, $00, $12, $24, $48, $90, $48, $24, $12, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $48, $24, $12, $09, $12, $24, $48, $00, $00, $00, $00, $00 + .byte $11, $44, $11, $44, $11, $44, $11, $44, $11, $44, $11, $44, $11, $44, $11, $44 + .byte $55, $aa, $55, $aa, $55, $aa, $55, $aa, $55, $aa, $55, $aa, $55, $aa, $55, $aa + .byte $dd, $77, $dd, $77, $dd, $77, $dd, $77, $dd, $77, $dd, $77, $dd, $77, $dd, $77 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $f0, $10, $10, $10, $10, $10, $10, $10 + .byte $10, $10, $10, $10, $10, $10, $f0, $10, $f0, $10, $10, $10, $10, $10, $10, $10 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $f4, $14, $14, $14, $14, $14, $14, $14 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $fc, $14, $14, $14, $14, $14, $14, $14 + .byte $00, $00, $00, $00, $00, $00, $f0, $10, $f0, $10, $10, $10, $10, $10, $10, $10 + .byte $14, $14, $14, $14, $14, $14, $f4, $04, $f4, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14 + .byte $00, $00, $00, $00, $00, $00, $fc, $04, $f4, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $f4, $04, $fc, $00, $00, $00, $00, $00, $00, $00 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $fc, $00, $00, $00, $00, $00, $00, $00 + .byte $10, $10, $10, $10, $10, $10, $f0, $10, $f0, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $f0, $10, $10, $10, $10, $10, $10, $10 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $1f, $00, $00, $00, $00, $00, $00, $00 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $ff, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $ff, $10, $10, $10, $10, $10, $10, $10 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $1f, $10, $10, $10, $10, $10, $10, $10 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $ff, $00, $00, $00, $00, $00, $00, $00 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $ff, $10, $10, $10, $10, $10, $10, $10 + .byte $10, $10, $10, $10, $10, $10, $1f, $10, $1f, $10, $10, $10, $10, $10, $10, $10 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $17, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $17, $10, $1f, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $1f, $10, $17, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $f7, $00, $ff, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $ff, $00, $f7, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $17, $10, $17, $14, $14, $14, $14, $14, $14, $14 + .byte $00, $00, $00, $00, $00, $00, $ff, $00, $ff, $00, $00, $00, $00, $00, $00, $00 + .byte $14, $14, $14, $14, $14, $14, $f7, $00, $f7, $14, $14, $14, $14, $14, $14, $14 + .byte $10, $10, $10, $10, $10, $10, $ff, $00, $ff, $00, $00, $00, $00, $00, $00, $00 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $ff, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $ff, $00, $ff, $10, $10, $10, $10, $10, $10, $10 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $ff, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $1f, $00, $00, $00, $00, $00, $00, $00 + .byte $10, $10, $10, $10, $10, $10, $1f, $10, $1f, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $1f, $10, $1f, $10, $10, $10, $10, $10, $10, $10 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $1f, $14, $14, $14, $14, $14, $14, $14 + .byte $14, $14, $14, $14, $14, $14, $14, $14, $ff, $14, $14, $14, $14, $14, $14, $14 + .byte $08, $08, $08, $08, $08, $08, $ff, $08, $ff, $08, $08, $08, $08, $08, $08, $08 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $f0, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $1f, $10, $10, $10, $10, $10, $10, $10 + .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff + .byte $00, $00, $00, $00, $00, $00, $00, $00, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff + .byte $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0 + .byte $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f + .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3a, $44, $44, $44, $44, $46, $3a, $00, $00, $00, $00 + .byte $00, $00, $38, $44, $44, $48, $7c, $42, $42, $42, $42, $7c, $40, $40, $00, $00 + .byte $00, $00, $7e, $40, $40, $40, $40, $40, $40, $40, $40, $40, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $7e, $42, $42, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $7e, $40, $20, $10, $08, $08, $10, $20, $40, $7e, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3e, $44, $44, $44, $44, $44, $38, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $42, $42, $42, $42, $42, $46, $7a, $40, $40, $40, $00 + .byte $00, $00, $00, $00, $00, $fe, $10, $10, $10, $10, $10, $0c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $26, $49, $49, $49, $49, $49, $3e, $08, $08, $08, $00 + .byte $00, $00, $00, $38, $44, $44, $44, $7c, $44, $44, $44, $44, $38, $00, $00, $00 + .byte $00, $00, $00, $3c, $42, $42, $42, $42, $42, $42, $24, $24, $66, $00, $00, $00 + .byte $00, $00, $00, $3e, $10, $08, $3c, $42, $42, $42, $42, $42, $3c, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $7c, $92, $92, $92, $7c, $00, $00, $00, $00 + .byte $00, $00, $00, $10, $7c, $92, $92, $92, $92, $92, $92, $7c, $10, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $3c, $42, $40, $38, $40, $42, $3c, $00, $00, $00, $00 + .byte $00, $00, $7e, $42, $42, $42, $42, $42, $42, $42, $42, $42, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $fe, $00, $00, $fe, $00, $00, $fe, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $10, $10, $7c, $10, $10, $00, $7c, $00, $00, $00, $00 + .byte $00, $00, $00, $20, $10, $08, $04, $08, $10, $20, $00, $7e, $00, $00, $00, $00 + .byte $00, $00, $00, $04, $08, $10, $20, $10, $08, $04, $00, $7e, $00, $00, $00, $00 + .byte $00, $00, $0c, $12, $12, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10 + .byte $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $10, $90, $90, $60, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $10, $00, $7c, $00, $10, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $76, $dc, $00, $76, $dc, $00, $00, $00, $00, $00 + .byte $00, $00, $38, $44, $44, $38, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $18, $18, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $18, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $06, $04, $04, $04, $04, $44, $44, $44, $24, $14, $0c, $00, $00, $00 + .byte $00, $00, $78, $44, $44, $44, $44, $44, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $70, $88, $10, $20, $40, $f8, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $7c, $7c, $7c, $7c, $7c, $7c, $7c, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + +.endsection data \ No newline at end of file