From 8efa00bd48127b0dc238178510ea1378c178e090 Mon Sep 17 00:00:00 2001 From: Sijmen Schoon Date: Fri, 18 Dec 2020 20:04:14 +0100 Subject: [PATCH] c64(day02): Implement --- c64/btree.asm | 70 +++++++ c64/day01.asm | 2 +- c64/day02.asm | 500 ++++++++++++++++++++++++++++++++++++++++++++++++++ c64/main.asm | 190 +++++++++++-------- c64/menu.asm | 18 +- 5 files changed, 697 insertions(+), 83 deletions(-) create mode 100644 c64/day02.asm diff --git a/c64/btree.asm b/c64/btree.asm index 1325ee3..cccd139 100644 --- a/c64/btree.asm +++ b/c64/btree.asm @@ -106,3 +106,73 @@ tree_contains: rts brk + +test_tree: + move_16_imm($03, !str_test+) + jsr write_string + + move_16_imm($03, $10) + jsr tree_insert + move_16_imm($03, $08) + jsr tree_insert + move_16_imm($03, $04) + jsr tree_insert + move_16_imm($03, $12) + jsr tree_insert + move_16_imm($03, $1337) + jsr tree_insert + + move_16_imm($03, $08) + jsr tree_contains + bne !fail+ + + move_16_imm($03, $13) + jsr tree_contains + beq !fail+ + + move_16_imm($03, $12) + jsr tree_contains + bne !fail+ + + move_16_imm($03, $1337) + jsr tree_contains + bne !fail+ + + move_16_imm($03, $0420) + jsr tree_contains + beq !fail+ + + move_16_imm($03, !str_success+) + jsr write_string + + rts + +!fail: + u16_u16_move($10, $03) + + move_16_imm($03, !str_fail+) + jsr write_string + + lda $11 + jsr print_hex_0x + lda $10 + jsr print_hex + jsr print_newline + + rts + +!str_test: + .text "[ ] test-tree" + .byte '\r', 0 + +!str_fail: + .text "[!!]" + .byte '\n' + .text "Failed: " + .byte 0 + +!str_success: + .text "[OK]" + .byte '\n', 0 + + diff --git a/c64/day01.asm b/c64/day01.asm index 837305a..5829d37 100644 --- a/c64/day01.asm +++ b/c64/day01.asm @@ -2,7 +2,7 @@ * = * "Day 01 Input" day01_input: - .import text "../rust/inputs/day01" + //.import text "../rust/inputs/day01" .byte 0 * = * "Day 01 Code" diff --git a/c64/day02.asm b/c64/day02.asm new file mode 100644 index 0000000..869c8af --- /dev/null +++ b/c64/day02.asm @@ -0,0 +1,500 @@ +// vim: filetype=kickass + +* = * "Day 02 Input" +!input: + .import binary "../inputs/02" + .byte 0 + +!str_title: + .text "# Day 02" + .byte '\n', '\n' + .text "Part 1: " + .byte 0 + +* = * "Day 02 Code" +day02: +{ +.const input_pointer = $40 +.const range_low = $42 +.const range_high = $43 +.const letter = $44 +.const is_valid = $45 +.const valid_count = $46 + +{ + move_16_imm($03, !str_title-) + jsr write_string + +.break + move_16_imm(input_pointer, !input-) + + ldy #0 + sty valid_count + 0 + sty valid_count + 1 + +part1_loop: + jsr parse_rule + beq part1_done + + // Increment range_high so we can beq. + inc range_high + // Decrement range_low so it overflows on invalid passwords + dec range_low + +password: + lda (input_pointer), y + y_buf_inc(input_pointer) + cmp #$0a + beq newline + cmp letter + bne password + + dec range_low + dec range_high + bne password + + // range_high went to 0, so it contains the letter too many times + // Skip to newline, then loop back around. + !: + lda (input_pointer), y + y_buf_inc(input_pointer) + cmp #$0a + bne !- + jmp part1_loop + +newline: + // If range_low is positive, we didn't meet the minimum + lda range_low + bpl part1_loop + + inc valid_count + 0 + bne part1_loop + inc valid_count + 1 + jmp part1_loop + +part1_done: +.break + lda valid_count + 0; sta udivmod32_dividend + 0 + lda valid_count + 1; sta udivmod32_dividend + 1 + lda #0 + sta udivmod32_dividend + 2 + sta udivmod32_dividend + 3 + jsr print_decimal_u32 +} + +{ + move_16_imm($03, str_part2) + jsr write_string + +.break + move_16_imm(input_pointer, !input-) + + ldy #0 + sty valid_count + 0 + sty valid_count + 1 + +part2_loop: + jsr parse_rule + beq part2_done + + lda #0 + sta is_valid + +password: + lda (input_pointer), y + tax + y_buf_inc(input_pointer) + cmp #$0a + beq newline + + dec range_low + bne !+ + cmp letter + bne !+ + lda #1 + eor is_valid + sta is_valid + !: + + dec range_high + bne !+++ + txa + cmp letter + bne !+ + lda #1 + eor is_valid + sta is_valid + !: + + // If we checked both numbers, we can skip the rest of the password. + !: + lda (input_pointer), y + y_buf_inc(input_pointer) + cmp #$0a + bne !- + jmp newline + !: + + jmp password + +newline: + lda is_valid + beq part2_loop + + inc valid_count + 0 + bne part2_loop + inc valid_count + 1 + jmp part2_loop + +part2_done: +.break + lda valid_count + 0; sta udivmod32_dividend + 0 + lda valid_count + 1; sta udivmod32_dividend + 1 + lda #0 + sta udivmod32_dividend + 2 + sta udivmod32_dividend + 3 + jsr print_decimal_u32 +} + + move_16_imm($03, str_done) + jsr write_string + + ldy #0 + !: + ldx #0 + !: inx; bne !- + !: inx; bne !- + !: inx; bne !- + !: inx; bne !- + iny + bne !----- + + lda #1 + sta $d020 + + ldy #0 + !: + ldx #0 + !: inx; bne !- + !: inx; bne !- + iny + bne !--- + + sta $d021 + + ldy #0 + !: + ldx #0 + !: inx; bne !- + !: inx; bne !- + !: inx; bne !- + iny + bne !---- +{ + .const timer = $40 + .const xvel = $41 + + + lda #(sprite1 / 64) + sta $07f8 + lda #(sprite2 / 64) + sta $07f9 + lda #(sprite3 / 64) + sta $07fa + lda #(sprite4 / 64) + sta $07fb + + lda #0 + sta $d001 // TL y + sta $d003 // TR y + + lda #0 + sta $d005 // BL y + sta $d007 // BR y + + lda #0 + sta $d000 // TL x + sta $d004 // BL x + + lda #48 + sta $d002 // TR x + sta $d006 // BR x + + lda #0 + sta $d010 + + lda #$0f + sta $d015 // sprite enable + sta $d01c // enable multicolor + sta $d01d // double width + sta $d017 // double height + + lda #$09 + sta $d025 + lda #$08 + sta $d026 + + lda #$00 + sta $d027 + sta $d028 + sta $d029 + sta $d02a + + lda #0 + sta timer + lda #127 + sta xvel + + SetRasterInterrupt(raster_irq) + cli + + jmp * + +raster_irq: + pha + txa + pha + tya + pha + + dec timer + beq !+ + jmp done + !: + lda #200 + sta timer + + // 0-214: Move bottom sprites + inc $d005 + inc $d007 + bne !+ + // If they wrap around, disable them + lda $d015 + and #%0011 + sta $d015 + !: + + // 42-256: Move top sprites + // if top_sprite.disabled || top_sprite.y >= 42 + lda $d015 + and #$08 + beq !+ + lda $d007 + cmp #42 + bcc !++ + !: + inc $d001 + inc $d003 + bne !+ + // If they wrap around, disable them + lda $d015 + and #%1100 + sta $d015 + !: + + + lda xvel + beq !+ + jmp no_flip + !: + // If velocity is negative, flip the sprites + ldy #63 + flip_loop: + // + // Sprite 1 + // + lda sprite1 - 3, y + sta zp_temp + + ldx sprite1 - 1, y + lda flip_map, x + sta sprite1 - 3, y + + ldx zp_temp + lda flip_map, x + sta sprite1 - 1, y + + ldx sprite1 - 2, y + lda flip_map, x + sta sprite1 - 2, y + + // + // Sprite 2 + // + lda sprite2 - 3, y + sta zp_temp + + ldx sprite2 - 1, y + lda flip_map, x + sta sprite2 - 3, y + + ldx zp_temp + lda flip_map, x + sta sprite2 - 1, y + + ldx sprite2 - 2, y + lda flip_map, x + sta sprite2 - 2, y + + // + // Sprite 3 + // + lda sprite3 - 3, y + sta zp_temp + + ldx sprite3 - 1, y + lda flip_map, x + sta sprite3 - 3, y + + ldx zp_temp + lda flip_map, x + sta sprite3 - 1, y + + ldx sprite3 - 2, y + lda flip_map, x + sta sprite3 - 2, y + + // + // Sprite 4 + // + lda sprite4 - 3, y + sta zp_temp + + ldx sprite4 - 1, y + lda flip_map, x + sta sprite4 - 3, y + + ldx zp_temp + lda flip_map, x + sta sprite4 - 1, y + + ldx sprite4 - 2, y + lda flip_map, x + sta sprite4 - 2, y + + dey; dey; dey + beq !+ + jmp flip_loop + !: + + lda $d000; clc; adc #48; sta $d000; sta $d004 + lda $d002; sec; sbc #48; sta $d002; sta $d006 + no_flip: + + lda xvel + cmp #$80; ror + cmp #$80; ror + cmp #$80; ror + cmp #$80; ror + cmp #$80; ror + tax + + // Move left sprites + txa; clc; adc $d000; sta $d000; sta $d004 + bne !+ + // If they wrap around, disable them + lda $d015 + and #%1010 + sta $d015 + !: + + // Move right sprites + txa; clc; adc $d002; sta $d002; sta $d006 + bne !+ + // If they wrap around, disable them + lda $d015 + and #%0101 + sta $d015 + !: + + dec xvel + +done: + pla + tay + pla + tax + pla + rti +} + +mul10: + asl + sta zp_temp + asl + asl + adc zp_temp + rts + +parse_rule: +low_number: + // 13-16 k: kkkkkgmkbvkkrskhd + // ^^^ + lda (input_pointer), y + bne !+ + // Check for null terminator + rts + !: + y_buf_inc(input_pointer) + sec; sbc #'0' + sta range_low + + lda (input_pointer), y + y_buf_inc(input_pointer) + cmp #$2d + beq !+ + tax + lda range_low + jsr mul10 + sta range_low + txa + + sec; sbc #'0' + clc; adc range_low + sta range_low + + y_buf_inc(input_pointer) + !: + +high_number: + // 13-16 k: kkkkkgmkbvkkrskhd + // ^^^ + lda (input_pointer), y + y_buf_inc(input_pointer) + sec; sbc #'0' + sta range_high + + lda (input_pointer), y + y_buf_inc(input_pointer) + cmp #$20 + beq !+ + tax + lda range_high + jsr mul10 + sta range_high + txa + + sec; sbc #'0' + clc; adc range_high + sta range_high + + y_buf_inc(input_pointer) + !: + + // + // 13-16 k: kkkkkgmkbvkkrskhd + // ^^^ + // + lda (input_pointer), y + sta letter + + // TODO adc #3 instead? + y_buf_inc(input_pointer) + y_buf_inc(input_pointer) + y_buf_inc(input_pointer) + + lda #1 + rts + + +} diff --git a/c64/main.asm b/c64/main.asm index 0abd267..629f143 100644 --- a/c64/main.asm +++ b/c64/main.asm @@ -40,75 +40,6 @@ } } -test_tree: - move_16_imm($03, !str_test+) - jsr write_string - - move_16_imm($03, $10) - jsr tree_insert - move_16_imm($03, $08) - jsr tree_insert - move_16_imm($03, $04) - jsr tree_insert - move_16_imm($03, $12) - jsr tree_insert - move_16_imm($03, $1337) - jsr tree_insert - - move_16_imm($03, $08) - jsr tree_contains - bne !fail+ - - move_16_imm($03, $13) - jsr tree_contains - beq !fail+ - - move_16_imm($03, $12) - jsr tree_contains - bne !fail+ - - move_16_imm($03, $1337) - jsr tree_contains - bne !fail+ - - move_16_imm($03, $0420) - jsr tree_contains - beq !fail+ - - move_16_imm($03, !str_success+) - jsr write_string - - rts - -!fail: - u16_u16_move($10, $03) - - move_16_imm($03, !str_fail+) - jsr write_string - - lda $11 - jsr print_hex_0x - lda $10 - jsr print_hex - jsr print_newline - - rts - -!str_test: - .text "[ ] test-tree" - .byte '\r', 0 - -!str_fail: - .text "[!!]" - .byte '\n' - .text "Failed: " - .byte 0 - -!str_success: - .text "[OK]" - .byte '\n', 0 - - // // main // @@ -131,10 +62,123 @@ main: jmp !- -#import "day01.asm" -#import "day05.asm" -#import "day09.asm" #import "screen.asm" #import "math.asm" -#import "btree.asm" #import "menu.asm" + +*=$2000 "Sprite" +.align 64 +sprite1: + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $A0 + .byte $00, $0A, $B8 + .byte $00, $AB, $F8 + .byte $0A, $BF, $FE + .byte $AB, $FF, $FE + .byte $BF, $FF, $FF + .byte $BF, $FF, $FD + .byte $BF, $FF, $D5 + .byte $BF, $FD, $57 + .byte $2F, $D5, $7F + .byte $2D, $57, $FF + + +.align 64 +sprite2: + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $80, $00, $00 + .byte $80, $00, $00 + .byte $A0, $00, $00 + .byte $E0, $00, $00 + .byte $E8, $02, $80 + +.align 64 +sprite3: + .byte $09, $7F, $FF + .byte $0B, $FF, $FF + .byte $0B, $FF, $F5 + .byte $02, $FF, $5A + .byte $02, $F5, $5B + .byte $00, $95, $FA + .byte $00, $9F, $FE + .byte $00, $BF, $FE + .byte $00, $2F, $FF + .byte $00, $2F, $FF + .byte $00, $0B, $F5 + .byte $00, $0B, $55 + .byte $00, $09, $5F + .byte $00, $02, $FF + .byte $00, $02, $BF + .byte $00, $00, $BF + .byte $00, $00, $AE + .byte $00, $00, $2A + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + +.align 64 +sprite4: + .byte $F8, $2B, $80 + .byte $FA, $BF, $E0 + .byte $EB, $FF, $E0 + .byte $BF, $FF, $E0 + .byte $FF, $FF, $E0 + .byte $FF, $FF, $F8 + .byte $FF, $FF, $D8 + .byte $FF, $FD, $58 + .byte $BF, $D5, $78 + .byte $BD, $57, $F8 + .byte $95, $7F, $E0 + .byte $97, $FF, $E0 + .byte $BF, $FF, $A0 + .byte $BF, $FE, $80 + .byte $BF, $FA, $00 + .byte $BF, $A8, $00 + .byte $FA, $80, $00 + .byte $A8, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + .byte $00, $00, $00 + + +.align 256 +flip_map: + .for (var i = 0; i < 256; i++) { + // 11001001 >> 6 = 11 & $03 == 11 + // 11001001 >> 2 = 110010 & $0c == 00 + // 11001001 << 2 = 001001 & $30 == 10 + // 11001001 << 6 = 01 & $c0 == 01 + // -------- | + // 01100011 + .byte ((i >> 6) & $03) | ((i >> 2) & $0c) | ((i << 2) & $30) | ((i << 6) & $c0) + } + +#import "day01.asm" +#import "day02.asm" +#import "day05.asm" +#import "day09.asm" +#import "btree.asm" diff --git a/c64/menu.asm b/c64/menu.asm index 1a485a9..1e0174d 100644 --- a/c64/menu.asm +++ b/c64/menu.asm @@ -109,17 +109,17 @@ menu_update: !days: .word day01 // 1 - .word 0 // 2 + .word day02 // 2 .word 0 // 3 .word 0 // 4 .word day05 // 5 .word 0 // 6 .word 0 // 7 .word 0 // 8 - .word 0 + .word 0 // 17 .word day09 // 9 - .word 0 - .word 0 + .word 0 // 16 + .word 0 // 18 .word 0 // 15 .word 0 .word 0 // 10 @@ -241,7 +241,7 @@ stabilized_irq: * = * "Menu Data" menu_characters: .byte ' ',' ',' ',' ',$6f,$6f,$6f,$52,$52,$52,$46,$46,$46,$46,$42,$46,$46,$46,$46,$52,$52,$52,$6f,$6f,$6f,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','1','*','*' - .byte $45,$45,$77,$77,' ',$2e,$27,' ',' ',$2d,' ',' ',$2d,' ',' ',$4d,$2d,' ',$2e,$27,$27,$68,' ',$68,' ',$77,$77,$45,$45,$44,$43,$40,$46,$52,$6f,' ',' ','2',' ',' ' + .byte $45,$45,$77,$77,' ',$2e,$27,' ',' ',$2d,' ',' ',$2d,' ',' ',$4d,$2d,' ',$2e,$27,$27,$68,' ',$68,' ',$77,$77,$45,$45,$44,$43,$40,$46,$52,$6f,' ',' ','2','*','*' .byte $68,' ',' ',$68,' ',$27,$2e,$27,$2e,' ',$2d,' ',' ',' ',$2d,' ',$4d,' ',$2d,$27,$27,$3a,' ',' ',$68,' ',$68,' ',' ',' ',$68,' ',' ',$68,' ',' ',' ','3',' ',' ' .byte ' ',' ',$68,' ',$68,' ',' ',$68,' ',$27,$27,$2e,$2e,$27,$27,$27,$64,$1b,$1d,$2e,$27,' ',' ',$68,' ',' ',' ',' ',$68,' ',' ',' ',$68,' ',$68,' ',' ','4',' ',' ' .byte $27,$2e,' ',$68,' ',' ',$68,' ',' ',$68,' ',' ',$64,$64,$6f,$4e,$63,$27,$27,' ',' ',$68,' ',' ',$68,' ',' ',$68,' ',' ',' ',' ',' ',$68,' ',' ',' ','5','*','*' @@ -251,7 +251,7 @@ menu_characters: .byte ' ',' ',$68,' ',' ',' ',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ','1','7',' ',' ' .byte ' ',' ',' ',' ',' ',$68,' ',$4d,' ',' ',' ',' ',' ',' ',' ',' ',' ',$27,$27,'.','.',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',' ','9','*','*' .byte ' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',$68,' ',' ',' ',' ',' ',$27,' ','[',']','.',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$68,' ',' ',$2e,' ','1','6',' ',' ' - .byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',' ',' ',' ',' ',$27,' ',',',' ',':',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$3a,$27,$27,' ',' ',' ',' ',' ',' ' + .byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',' ',' ',' ',' ',$27,' ',',',' ',':',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$3a,$27,$27,' ',' ','1','8',' ',' ' .byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,$4d,' ',' ',' ',' ',$27,'.','.',$27,' ',' ',$4d,$6f,$6f,$64,$64,$64,' ',' ',$68,' ',$27,$2e,' ',$2c,' ','1','5',' ',' ' .byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',$68,' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$63,$63,$63,$77,$77,$4d,' ',' ',$3a,' ',' ',' ',' ',' ',' ',' ' .byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$4d,' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$2e,$4d,$27,' ',$2c,' ',' ','1','0',' ',' ' @@ -270,15 +270,15 @@ menu_colors: .byte $6f, $0e, $6e, $0e, $0e, $0e, $0e, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $02, $0e, $0e, $0e, $0e, $0e // 0;00 - 0;20 | 6;10 - 6;30 .byte $0e, $0e, $0e, $0e, $0e, $00, $00, $f0, $00, $00, $00, $00, $00, $50, $50, $10, $e0, $6f, $07, $07 // 0;20 - 1;00 | 6;30 - 7;10 .byte $0e, $0e, $0e, $0e, $0e, $01, $61, $0e, $0e, $61, $00, $00, $01, $00, $01, $01, $61, $0e, $01, $01 // 1;00 - 1;20 | 7;10 - 7;30 - .byte $01, $06, $00, $66, $0e, $0e, $0e, $fe, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $00, $10, $0f, $00, $60 // 1;20 - 2;00 | 7;30 - 8;10 + .byte $01, $06, $00, $66, $0e, $0e, $0e, $fe, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $00, $10, $0f, $07, $67 // 1;20 - 2;00 | 7;30 - 8;10 .byte $06, $0e, $0e, $06, $0e, $01, $01, $01, $01, $0e, $01, $00, $b0, $00, $01, $0e, $01, $0e, $01, $61 // 2;00 - 2;20 | 8;10 - 8;30 - .byte $01, $01, $00, $00, $06, $00, $b6, $b0, $00, $00, $06, $03, $03, $06, $03, $60, $00, $1f, $00, $00 // 2;20 - 3;00 | 8;30 - 9;10 + .byte $01, $01, $00, $00, $06, $00, $f6, $f0, $00, $00, $06, $03, $03, $06, $03, $60, $00, $1f, $00, $00 // 2;20 - 3;00 | 8;30 - 9;10 .byte $0e, $0e, $06, $0e, $06, $0e, $0e, $c6, $ce, $c1, $c1, $01, $01, $01, $01, $61, $01, $01, $01, $01 // 3;00 - 3;20 | 9;10 - 9;30 .byte $01, $00, $00, $66, $00, $00, $00, $f0, $76, $70, $00, $00, $06, $0e, $06, $00, $00, $0f, $10, $00 // 3;20 - 4;00 | 9;30 - 10;10 .byte $65, $05, $00, $06, $0e, $0e, $b6, $0e, $1e, $16, $51, $01, $01, $01, $01, $01, $01, $01, $61, $00 // 4;00 - 4;20 | 10;10 - 10;30 .byte $00, $66, $00, $00, $56, $00, $f0, $f6, $00, $00, $00, $00, $00, $06, $00, $00, $00, $0f, $07, $17 // 4;20 - 5;00 | 10;30 - 11;10 .byte $05, $00, $00, $05, $05, $b1, $01, $b1, $01, $b1, $11, $01, $01, $61, $01, $00, $06, $00, $00, $06 // 5;00 - 5;20 | 11;10 - 11;30 - .byte $00, $50, $56, $50, $00, $00, $00, $00, $00, $06, $00, $00, $00, $00, $00, $00, $00, $0f, $00, $60 // 5;20 - 6;00 | 11;30 - 12;10 + .byte $00, $50, $56, $50, $00, $00, $f0, $f0, $00, $06, $00, $00, $00, $00, $00, $00, $00, $0f, $00, $60 // 5;20 - 6;00 | 11;30 - 12;10 .byte $16, $00, $05, $01, $01, $c5, $55, $c5, $50, $00 // 6;00 - 6;10 | 12;10 - 12;20 .byte $00, $01, $01, $01, $01, $01, $f1, $f1, $01, $06, $00, $05, $05, $0e, $05, $00, $0f, $0f, $00, $00 // 12;20 - 13;00 | 18;30 - 19;10