Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ================================================================
- ; AT THE STATION - Commodore 64 One File Demo
- ; ================================================================
- ; FlashParty 2025 - 3rd Place in "Mixed Demo" Category
- ; https://flashparty.rebelion.digital/
- ;
- ; Credits:
- ; Code & Graphics: Kimono (Felice Nardella)
- ; Music: Manganoid (Zack Maxis) - SID: "Beli_Jablane"
- ; Group: Hokuto Force
- ;
- ; Assembly: 64tass (https://sourceforge.net/projects/tass64/)
- ; Compile: 64tass -a atthestation.asm -o atthestation.prg
- ; Download: https://csdb.dk/release/?id=256787
- ;
- ; Description:
- ; A demo featuring a spiral intro animation, text messages,
- ; animated escalator effect with sprites, and horizontal
- ; scrolling synchronized with raster interrupts.
- ;
- ; Note:
- ; The horizontal text scrolling routine is based on
- ; Attilio Capuozzo's original code and ideas.
- ; ================================================================
- * = $c000
- ; ================================================================
- ; CONSTANTS
- ; ================================================================
- VIC_BASE = $d000 ; VIC-II Base Address (53248)
- SPR_PTR = $07f8 ; Sprite 0 pointer address (2040)
- SPR_PTR1 = $07f9 ; Sprite 1 pointer address (2041)
- SPR_PTR2 = $07fa ; Sprite 2 pointer address (2042)
- SPR_PTR3 = $07fb ; Sprite 3 pointer address (2043)
- SPR_PTR4 = $07fc ; Sprite 4 pointer address (2044)
- SPR_PTR5 = $07fd ; Sprite 5 pointer address (2045)
- SPR_PTR6 = $07fe ; Sprite 6 pointer address (2046)
- NMIRoutine = $fec1 ; Address of default NMI Handler last instruction (RTI)
- ; Raster line variables
- rast_1 = $80 ; First raster interrupt line
- rast_2 = $bc ; Second raster interrupt line (188)
- ; Pointer variables
- src_ptr = $02 ; Pointer to source table
- dest_ptr = $2a ; Pointer to screen destination
- ; ================================================================
- ; SPIRAL INTRO ANIMATION
- ; ================================================================
- ; Initialize b, w, z variables
- lda #39
- sta $50 ; b = 39 (right boundary)
- lda #0
- sta $51 ; w = 0 (top boundary)
- lda #24
- sta $52 ; z = 24 (bottom boundary)
- ; Set border color to black
- lda #0
- sta $d020
- ; Initialize loop counter a = 0
- lda #0
- sta $53
- ; --------------------------------------------------------
- ; Main loop: for a = 0 to 12
- ; --------------------------------------------------------
- loop_a:
- lda $53
- cmp #13
- bcs done_a
- ; --- Loop 1: r = w; for c = a to b
- ; Draw horizontal line across top
- lda $51
- sta $54 ; r = w
- lda $53
- sta $55 ; c = a
- loop_c1:
- jsr poke_char
- jsr delay_frame
- lda $55
- cmp $50 ; Compare c with b
- beq after_c1
- inc $55
- jmp loop_c1
- after_c1:
- ; --- Loop 2: c = b; for r = w to z
- ; Draw vertical line down right side
- lda $50
- sta $55 ; c = b
- lda $51
- sta $54 ; r = w
- loop_r2:
- jsr poke_char
- jsr delay_frame
- lda $54
- cmp $52 ; Compare r with z
- beq after_r2
- inc $54
- jmp loop_r2
- after_r2:
- ; --- Loop 3: r = z; for c = b down to a
- ; Draw horizontal line across bottom (right to left)
- lda $52
- sta $54 ; r = z
- lda $50
- sta $55 ; c = b
- loop_c3:
- jsr poke_char
- jsr delay_frame
- lda $55
- cmp $53 ; Compare c with a
- beq after_c3
- dec $55
- jmp loop_c3
- after_c3:
- ; --- Loop 4: c = a; for r = z down to w
- ; Draw vertical line up left side
- lda $53
- sta $55 ; c = a
- lda $52
- sta $54 ; r = z
- loop_r4:
- jsr poke_char
- jsr delay_frame
- lda $54
- cmp $51 ; Compare r with w
- beq after_r4
- dec $54
- jmp loop_r4
- after_r4:
- ; Update boundaries for next spiral iteration
- dec $50 ; b--
- inc $51 ; w++
- dec $52 ; z--
- inc $53 ; a++
- jmp loop_a
- done_a:
- ; Set final color effects
- lda #0
- sta $d021 ; Background color = black
- ; Set character color to light green
- lda #13
- sta $0286
- ; ========================
- ; CLEAR SCREEN
- ; ========================
- jsr clearscreen
- ; ========================
- ; WRITE "trapped between nowhere and forever..."
- ; ========================
- ; Initialize cursor position
- lda #12
- sta $54 ; row = 12
- lda #1
- sta $55 ; column = 1
- ldx #0
- nextchar1:
- lda text1,x
- beq wait1_label ; If zero terminator, exit loop
- jsr writechar
- jsr beep ; Sound effect
- inx
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- bne nextchar1
- wait1_label:
- ; Wait for effect
- ldy #$ff
- waitloop1:
- jsr delay_frame
- dey
- bne waitloop1
- waitloop2:
- jsr delay_frame
- dey
- bne waitloop2
- ; ========================
- ; CLEAR SCREEN
- ; ========================
- jsr clearscreen
- ; ========================
- ; WRITE "with no escape."
- ; ========================
- ; Initialize position for second text
- lda #12
- sta $54 ; row = 12
- lda #13
- sta $55 ; column = 13
- ldx #0
- nextchar2:
- lda text2,x
- beq wait2_label
- jsr writechar
- jsr beep ; Sound effect
- inx
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- bne nextchar2
- wait2_label:
- ; Wait for effect
- ldy #$ff
- waitloop3:
- jsr delay_frame
- dey
- bne waitloop3
- ; Final color flash effects
- lda #1
- sta $d020 ; Border = white
- sta $d021 ; Background = white
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- lda #7
- sta $d020 ; Border = yellow
- sta $d021 ; Background = yellow
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- jsr delay_frame
- lda #0
- sta $d020 ; Border = black
- sta $d021 ; Background = black
- done:
- jmp start
- ; ================================================================
- ; SUBROUTINE: delay_frame
- ; Simple delay routine (preserves all registers)
- ; ================================================================
- delay_frame:
- pha
- txa
- pha
- tya
- pha
- ldx #$15
- delay_outer:
- ldy #$30
- delay_inner:
- dey
- bne delay_inner
- dex
- bne delay_outer
- pla
- tay
- pla
- tax
- pla
- rts
- ; ================================================================
- ; SUBROUTINE: poke_char
- ; Writes a character to screen at position (r,c) stored in $54,$55
- ; Also sets color to black at that position
- ; ================================================================
- poke_char:
- pha
- txa
- pha
- tya
- pha
- ; Initialize multiplication result
- lda #0
- sta $57 ; Low byte of result
- sta $58 ; High byte of result
- lda $54
- sta $59 ; Copy row to counter
- ; Multiply row by 40 (screen width)
- pc_mul_loop:
- lda $59
- beq pc_mul_done
- lda $57
- clc
- adc #40
- sta $57
- lda $58
- adc #0
- sta $58
- dec $59
- jmp pc_mul_loop
- pc_mul_done:
- ; Add column offset
- lda $57
- clc
- adc $55
- sta $57
- lda $58
- adc #0
- sta $58
- ; Calculate screen memory address ($0400 + offset)
- lda #$00
- clc
- adc $57
- sta $5a ; Low byte of pointer
- lda #$04
- adc $58
- sta $5b ; High byte of pointer
- ; Write space character ($a0) to screen
- lda #$a0
- ldy #0
- sta ($5a),y
- ; Calculate color RAM address ($d800 + offset)
- lda #$00
- clc
- adc $57
- sta $5a
- lda #$d8
- adc $58
- sta $5b
- ; Write black color (0)
- lda #0
- ldy #0
- sta ($5a),y
- pla
- tay
- pla
- tax
- pla
- rts
- ; ================================================================
- ; SUBROUTINE: writechar
- ; Writes character in A to screen at position ($54,$55)
- ; Sets color to white and increments column
- ; ================================================================
- writechar:
- pha
- txa
- pha
- tya
- pha
- ; Calculate address = $0400 + row*40 + column
- lda #0
- sta $57
- sta $58
- lda $54
- beq write_calc_done
- lda #0
- sta $59
- ; Multiply row by 40
- write_mul_loop:
- lda $57
- clc
- adc #40
- sta $57
- lda $58
- adc #0
- sta $58
- inc $59
- lda $59
- cmp $54
- bcc write_mul_loop
- write_calc_done:
- ; Add column
- lda $57
- clc
- adc $55
- sta $57
- lda $58
- adc #0
- sta $58
- ; Build screen memory pointer
- lda #$00
- clc
- adc $57
- sta $5a
- lda #$04
- adc $58
- sta $5b
- ; Write character to screen
- pla
- tay
- pla
- tax
- pla
- ; Save A in temporary location
- sta $5e
- ldy #0
- lda $5e
- sta ($5a), y
- ; Write white color to color RAM
- lda $57
- sta $5a
- lda #$d8
- sta $5b
- ldy #0
- lda #1 ; White color
- sta ($5a), y
- ; Increment column
- inc $55
- rts
- ; ================================================================
- ; SUBROUTINE: clearscreen
- ; Clears the screen using KERNAL routine
- ; ================================================================
- clearscreen:
- lda #$93 ; Clear screen code
- jsr $ffd2 ; KERNAL CHROUT
- rts
- ; ================================================================
- ; SUBROUTINE: beep
- ; Produces a short beep sound using SID chip
- ; ================================================================
- beep:
- lda #$0f ; Maximum volume
- sta $d418 ; SID volume register
- lda #$00 ; Frequency low byte
- sta $d400
- lda #$a0 ; Frequency high byte
- sta $d401
- lda #$00 ; Pulse width low
- sta $d402
- lda #$08 ; Pulse width high
- sta $d403
- lda #$09 ; Attack=0, Decay=9
- sta $d405
- lda #$F0 ; Sustain=15, Release=0
- sta $d406
- lda #$11 ; Gate on + pulse waveform
- sta $d404 ; Voice 1 control
- ldy #$ff ; Delay to hear the sound
- beepl1:
- dey
- bne beepl1
- lda #$10 ; Gate off, pulse on (stop sound)
- sta $d404
- rts
- ; ================================================================
- ; MAIN PROGRAM START
- ; ================================================================
- start:
- ; Border and background colors are set later in sprite setup
- ; Copy sprite data to memory
- jsr LoadSprites
- ; Sprite settings
- ; MSB Sprite (for X coordinates > 255)
- lda #1
- sta VIC_BASE+16 ; Enable MSB for sprite 0 (flag)
- ; Position sprite 0 (flag)
- lda #47 ; x0 = 255 + 47 = 302
- sta VIC_BASE
- lda #121 ; y0 = 121
- sta VIC_BASE+1
- ; Position sprites 1-3 (standing person)
- lda #105 ; x1 = 105
- sta VIC_BASE+2
- lda #145 ; y1 = 145
- sta VIC_BASE+3
- lda #105 ; x2 = 105
- sta VIC_BASE+4
- lda #145 ; y2 = 145
- sta VIC_BASE+5
- lda #105 ; x3 = 105
- sta VIC_BASE+6
- lda #145 ; y3 = 145
- sta VIC_BASE+7
- ; Position sprites 4-6 (sitting person)
- lda #217 ; x4 = 217
- sta VIC_BASE+8
- lda #164 ; y4 = 164
- sta VIC_BASE+9
- lda #217 ; x5 = 217
- sta VIC_BASE+10
- lda #164 ; y5 = 164
- sta VIC_BASE+11
- lda #217 ; x6 = 217
- sta VIC_BASE+12
- lda #164 ; y6 = 164
- sta VIC_BASE+13
- ; Enable sprites 0-6
- lda #$7f
- sta VIC_BASE+21 ; Enable 7 sprites
- ; Sprite 0 colors (flag - multicolor)
- lda #1
- sta VIC_BASE+28 ; Multicolor mode for sprite 0
- lda #9
- sta VIC_BASE+37 ; Multicolor 0 = orange (53285)
- lda #3
- sta VIC_BASE+38 ; Multicolor 1 = cyan (53286)
- lda #5
- sta VIC_BASE+39 ; Sprite 0 color = green
- ; Sprites 1-3 colors (standing person)
- lda #8
- sta VIC_BASE+40 ; Sprite 1 color = orange
- lda #10
- sta VIC_BASE+41 ; Sprite 2 color = light red
- lda #5
- sta VIC_BASE+42 ; Sprite 3 color = green
- ; Sprites 4-6 colors (sitting person)
- lda #7
- sta VIC_BASE+43 ; Sprite 4 color = yellow
- lda #10
- sta VIC_BASE+44 ; Sprite 5 color = light red
- lda #6
- sta VIC_BASE+45 ; Sprite 6 color = blue
- ; Sprite pointers
- lda #226
- sta SPR_PTR1 ; Write to $07F9 (sprite 1 pointer)
- lda #227
- sta SPR_PTR2 ; Write to $07FA (sprite 2 pointer)
- lda #228
- sta SPR_PTR3 ; Write to $07FB (sprite 3 pointer)
- lda #229
- sta SPR_PTR4 ; Write to $07FC (sprite 4 pointer)
- lda #230
- sta SPR_PTR5 ; Write to $07FD (sprite 5 pointer)
- lda #231
- sta SPR_PTR6 ; Write to $07FE (sprite 6 pointer)
- ; Draw and color background screen
- ldx #$0
- loop1:
- lda chars,x
- sta $0400,x
- lda colors,x
- sta $d800,x
- lda chars+200,x
- sta $0400+200,x
- lda colors+200,x
- sta $d800+200,x
- lda chars+400,x
- sta $0400+400,x
- lda colors+400,x
- sta $d800+400,x
- lda chars+600,x
- sta $0400+600,x
- lda colors+600,x
- sta $d800+600,x
- lda chars+800,x
- sta $0400+800,x
- lda colors+800,x
- sta $d800+800,x
- inx
- cpx #200
- bne loop1
- ; ================================================================
- ; SETUP IRQ INTERRUPT SYSTEM
- ; ================================================================
- sei ; Set Interrupt Disable Flag (disable IRQ)
- ; Set custom IRQ vector
- lda #<IRQRoutine
- sta $0314
- lda #>IRQRoutine
- sta $0315
- lda #$7f ; 127 = %01111111 (binary mask to clear MSB)
- sta $dc0d ; Disable CIA 1 IRQ interrupts (timer A system interrupt)
- sta $dd0d ; Disable CIA 2 NMI interrupts
- lda $dc0d ; Clear any pending IRQ from CIA 1 (reading clears)
- lda $dd0d ; Clear any pending NMI from CIA 2 (reading clears)
- lda #$00 ; First raster interrupt at line 0
- sta $d012 ; Load value into raster register
- sta $fb ; Horizontal scroll counter variable (page 0)
- lda #$1b ; 27 decimal = %00011011
- sta $d011 ; Clear MSB of raster (bit 8 of $d012-$d011)
- lda #$01
- sta $d01a ; Enable raster interrupt
- ; ================================================================
- ; INITIALIZE SID MUSIC
- ; ================================================================
- lda #$00 ; Clear A register
- jsr $1000 ; Initialize music at $1000
- cli ; Clear Interrupt Disable Flag (enable IRQ)
- ; Setup NMI vector to disable RESTORE key
- ldx #<NMIRoutine ; Load address $fec1 into NMINV vector ($0318-$0319)
- ldy #>NMIRoutine ; This points to RTI instruction of default NMI handler
- stx $0318 ; This trick effectively disables RUN STOP + RESTORE
- sty $0319 ; preventing user from exiting the program
- ; ================================================================
- ; MAIN ANIMATION LOOP
- ; ================================================================
- MainLoop:
- ldx #0
- animation_loop:
- ; Copy table 1 (escalator_1)
- lda #<escalator_1 ; Load address of first table
- sta src_ptr
- lda #>escalator_1
- sta src_ptr+1
- lda s_table,x ; Get sprite pointer from table
- sta SPR_PTR ; Write to $07F8 (sprite 0 pointer)
- inx
- jsr copy_table ; Copy the table
- jsr wait ; Wait for timing
- ; Copy table 2 (escalator_2)
- lda #<escalator_2
- sta src_ptr
- lda #>escalator_2
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 3 (escalator_3)
- lda #<escalator_3
- sta src_ptr
- lda #>escalator_3
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 4 (escalator_4)
- lda #<escalator_4
- sta src_ptr
- lda #>escalator_4
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 5 (escalator_5)
- lda #<escalator_5
- sta src_ptr
- lda #>escalator_5
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 6 (escalator_6)
- lda #<escalator_6
- sta src_ptr
- lda #>escalator_6
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 7 (escalator_7)
- lda #<escalator_7
- sta src_ptr
- lda #>escalator_7
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 8 (escalator_8)
- lda #<escalator_8
- sta src_ptr
- lda #>escalator_8
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 9 (escalator_9)
- lda #<escalator_9
- sta src_ptr
- lda #>escalator_9
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- ; Copy table 10 (escalator_10)
- lda #<escalator_10
- sta src_ptr
- lda #>escalator_10
- sta src_ptr+1
- lda s_table,x
- sta SPR_PTR
- inx
- jsr copy_table
- jsr wait
- jmp MainLoop ; Loop forever
- ; ================================================================
- ; SUBROUTINE: copy_table
- ; Copies a 13x13 table to the escalator area on screen
- ; (color RAM at row 12, column 1)
- ; ================================================================
- copy_table:
- txa ; Save X
- pha
- tya ; Save Y
- pha
- ; Calculate screen address for row 13, column 1
- lda #<($d800+12*40) ; Low byte of color RAM address
- sta dest_ptr
- lda #>($d800+12*40) ; High byte of color RAM address
- sta dest_ptr+1
- ldx #0 ; Row counter (0-12)
- row_loop:
- ldy #0 ; Column counter (0-12)
- col_loop:
- ; Copy one byte from table to color RAM
- lda (src_ptr),y ; Read from table
- sta (dest_ptr),y ; Write to color RAM
- iny ; Next column
- cpy #13 ; Check if we've reached 13 columns
- bne col_loop
- ; Advance to next row in table
- clc
- lda src_ptr ; Add 13 to source pointer
- adc #13
- sta src_ptr
- lda src_ptr+1
- adc #0
- sta src_ptr+1
- ; Advance to next row on screen
- clc
- lda dest_ptr ; Add 40 to destination pointer
- adc #40 ; (screen row width)
- sta dest_ptr
- lda dest_ptr+1
- adc #0
- sta dest_ptr+1
- inx ; Next row
- cpx #13 ; Check if we've reached 13 rows
- bne row_loop
- pla ; Restore Y
- tay
- pla ; Restore X
- tax
- rts
- ; ================================================================
- ; SUBROUTINE: wait
- ; Delay routine for animation timing
- ; ================================================================
- wait:
- txa ; Save X
- pha
- tya ; Save Y
- pha
- ldy #50
- Delay1: ldx #0
- Delay2: dex
- bne Delay2
- dey
- bne Delay1
- pla ; Restore Y
- tay
- pla ; Restore X
- tax
- rts
- ; ================================================================
- ; SUBROUTINE: LoadSprites
- ; Copies sprite data from ROM to sprite memory locations
- ; ================================================================
- LoadSprites:
- ldx #0
- LoadLoop:
- ; Flag sprites (0-9)
- lda sprite0_data,x
- sta $02C0,x ; $02C0 = 704 (sprite pointer 11)
- lda sprite1_data,x
- sta $0340,x ; $0340 = 832 (sprite pointer 13)
- lda sprite2_data,x
- sta $0380,x ; $0380 = 896 (sprite pointer 14)
- lda sprite3_data,x
- sta $03C0,x ; $03C0 = 960 (sprite pointer 15)
- lda sprite4_data,x
- sta $3700,x ; $3700 = 14080 (sprite pointer 220)
- lda sprite5_data,x
- sta $3740,x ; $3740 = 14144 (sprite pointer 221)
- lda sprite6_data,x
- sta $3780,x ; $3780 = 14208 (sprite pointer 222)
- lda sprite7_data,x
- sta $37c0,x ; $37c0 = 14272 (sprite pointer 223)
- lda sprite8_data,x
- sta $3800,x ; $3800 = 14336 (sprite pointer 224)
- lda sprite9_data,x
- sta $3840,x ; $3840 = 14400 (sprite pointer 225)
- ; Standing person sprites (10-12)
- lda sprite10_data,x
- sta $3880,x ; $3880 = 14464 (sprite pointer 226)
- lda sprite11_data,x
- sta $38c0,x ; $38c0 = 14528 (sprite pointer 227)
- lda sprite12_data,x
- sta $3900,x ; $3900 = 14592 (sprite pointer 228)
- ; Sitting person sprites (13-15)
- lda sprite13_data,x
- sta $3940,x ; $3940 = 14656 (sprite pointer 229)
- lda sprite14_data,x
- sta $3980,x ; $3980 = 14720 (sprite pointer 230)
- lda sprite15_data,x
- sta $39c0,x ; $39c0 = 14784 (sprite pointer 231)
- inx
- cpx #63
- bne LoadLoop
- rts
- ; ================================================================
- ; IRQ ROUTINE - Main raster interrupt handler
- ; ================================================================
- IRQRoutine:
- asl $d019 ; Acknowledge raster IRQ
- ; Modified with 3 separate IRQ handlers:
- ; IRQ1: Handles horizontal scroll (changes only $D016)
- ; IRQ2: Resets scroll at bottom of scroll area
- ; IRQ3: Called during vertical blank to move characters
- lda $d012 ; Current raster line
- cmp #$00
- beq RasterTop ; Top raster - scroll area
- cmp #rast_1
- beq RasterBottom ; Bottom raster - reset scroll
- cmp #rast_2
- beq DoMoveChars ; Move characters raster
- jmp testTimerAInterrupt
- ; Top of screen - apply horizontal scroll
- RasterTop:
- ldx $fb ; Load scroll counter
- inx ; Increment counter
- cpx #$08 ; Reached 8? (8 pixels = full character)
- bne scrolling ; If not at end, continue scrolling
- ldx #$00 ; Reset counter if at end
- scrolling:
- lda scrollValue,x ; Read scroll value from table
- sta $d016 ; Set horizontal scroll (bits 0-2 of $d016)
- stx $fb ; Save counter
- lda #rast_1 ; Next IRQ at line rast_1
- sta $d012
- jmp testTimerAInterrupt
- ; Bottom of scroll area - reset to no scroll
- RasterBottom:
- lda #$00 ; %00000000 (38 column mode)
- sta $d016 ; Reset to default (no horizontal scroll)
- lda #rast_2 ; Next IRQ at line rast_2
- sta $d012
- jmp testTimerAInterrupt
- ; Move characters horizontally
- DoMoveChars:
- jsr moveCharacters ; Shift characters
- lda #$00 ; Next IRQ at line 0
- sta $d012
- jmp testTimerAInterrupt
- ; Check for system timer interrupt and call music player
- testTimerAInterrupt:
- lda $dc0d ; Check if CIA 1 Timer A interrupt occurred
- and #$01 ; Check if bit 0 (LSB) is set
- beq exitPullStack ; If no Timer A interrupt, exit normally
- ; Call SID music player
- jsr $1003 ; Call music playback routine at $1003
- jmp $ea31 ; Jump to system IRQ handler for keyboard scan, etc.
- exitPullStack:
- pla ; These 6 instructions are equivalent to
- tay ; JMP $ea81 or JMP $febc
- pla ; Pull registers Y, X, A from stack + RTI
- tax ; Push of the 3 data registers is done by
- pla ; the IRQ main routine at ROM $ff48
- rti ; Return from interrupt
- ; ================================================================
- ; SUBROUTINE: moveCharacters
- ; Shifts characters one position to the right (circular shift)
- ; Only moves the first 10 rows of the screen
- ; ================================================================
- moveCharacters:
- ; Save A and X
- pha
- txa
- pha
- ; Move only first 10 rows
- ldx #$00 ; Row 0
- moveRow:
- ; Get base address of row from precomputed table
- lda screenAddrLo,x
- sta $fd
- lda screenAddrHi,x
- sta $fe
- ; Save character at last position (column 39)
- ldy #39
- lda ($fd),y
- pha
- ; Shift characters from right to left
- shiftLoop:
- dey
- lda ($fd),y
- iny
- sta ($fd),y
- dey
- bpl shiftLoop
- ; Put saved character in first position
- pla
- ldy #$00
- sta ($fd),y
- ; Process color RAM the same way
- lda colorAddrLo,x
- sta $fd
- lda colorAddrHi,x
- sta $fe
- ldy #39
- lda ($fd),y
- pha
- shiftLoopCol:
- dey
- lda ($fd),y
- iny
- sta ($fd),y
- dey
- bpl shiftLoopCol
- pla
- ldy #0
- sta ($fd),y
- ; Next row
- inx
- cpx #10 ; Only first 10 rows
- bne moveRow
- ; Restore registers
- pla
- tax
- pla
- rts
- ; ================================================================
- ; DATA SECTION
- ; ================================================================
- ; Precomputed addresses for screen memory rows
- screenAddrLo:
- .byte <($0400+0*40), <($0400+1*40), <($0400+2*40), <($0400+3*40)
- .byte <($0400+4*40), <($0400+5*40), <($0400+6*40), <($0400+7*40)
- .byte <($0400+8*40), <($0400+9*40)
- screenAddrHi:
- .byte >($0400+0*40), >($0400+1*40), >($0400+2*40), >($0400+3*40)
- .byte >($0400+4*40), >($0400+5*40), >($0400+6*40), >($0400+7*40)
- .byte >($0400+8*40), >($0400+9*40)
- ; Precomputed addresses for color RAM rows
- colorAddrLo:
- .byte <($d800+0*40), <($d800+1*40), <($d800+2*40), <($d800+3*40)
- .byte <($d800+4*40), <($d800+5*40), <($d800+6*40), <($d800+7*40)
- .byte <($d800+8*40), <($d800+9*40)
- colorAddrHi:
- .byte >($d800+0*40), >($d800+1*40), >($d800+2*40), >($d800+3*40)
- .byte >($d800+4*40), >($d800+5*40), >($d800+6*40), >($d800+7*40)
- .byte >($d800+8*40), >($d800+9*40)
- ; Table of scroll values for pixel scrolling (0 to 7, rightward movement)
- scrollValue:
- .byte 0,1,2,3,4,5,6,7
- ; Sprite pointer table (values for escalator animation frames)
- s_table:
- .byte 11,13,14,15,220,221,222,223,224,225
- ; Text strings in PETSCII format
- Text1:
- ; "trapped between nowhere and forever..."
- .byte $14 ; t
- .byte $12 ; r
- .byte $01 ; a
- .byte $10 ; p
- .byte $10 ; p
- .byte $05 ; e
- .byte $04 ; d
- .byte 32 ; space
- .byte $02 ; b
- .byte $05 ; e
- .byte $14 ; t
- .byte $17 ; w
- .byte $05 ; e
- .byte $05 ; e
- .byte $0E ; n
- .byte 32 ; space
- .byte $0E ; n
- .byte $0F ; o
- .byte $17 ; w
- .byte $08 ; h
- .byte $05 ; e
- .byte $12 ; r
- .byte $05 ; e
- .byte 32 ; space
- .byte $01 ; a
- .byte $0E ; n
- .byte $04 ; d
- .byte 32 ; space
- .byte $06 ; f
- .byte $0F ; o
- .byte $12 ; r
- .byte $05 ; e
- .byte $16 ; v
- .byte $05 ; e
- .byte $12 ; r
- .byte 46 ; .
- .byte 46 ; .
- .byte 46 ; .
- .byte 0 ; String terminator
- Text2:
- ; "with no escape."
- .byte $17 ; w
- .byte $09 ; i
- .byte $14 ; t
- .byte $08 ; h
- .byte 32 ; space
- .byte $0E ; n
- .byte $0F ; o
- .byte 32 ; space
- .byte $05 ; e
- .byte $13 ; s
- .byte $03 ; c
- .byte $01 ; a
- .byte $10 ; p
- .byte $05 ; e
- .byte 46 ; .
- .byte 0 ; String terminator
- ; ================================================================
- ; DATA LOADED FROM $1000 ONWARDS
- ; ================================================================
- * = $1000
- ; SID music data (binary SID file with header stripped)
- .binary "Beli_jablane_FINAL.sid", $7e ; Load music data at $1000, skip $7e byte header
- ; Background screen character data (1000 bytes)
- chars:
- .byte $6f,$6f,$6f,$6f,$6f,$e3,$f7,$f8,$62,$79,$6f,$6f,$6f,$6f,$6f,$6f
- .byte $6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f,$6f
- .byte $6f,$6f,$6f,$6f,$6f,$6f,$20,$6f,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4
- .byte $e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4
- .byte $e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$20,$a0
- .byte $e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4
- .byte $e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4,$e4
- .byte $e4,$e4,$e4,$e4,$e4,$e4,$20,$e4,$a0,$dd,$a0,$dd,$a0,$dd,$dd,$e3
- .byte $dd,$dd,$a0,$dd,$dd,$a0,$dd,$dd,$a0,$dd,$c2,$a0,$dd,$dd,$a0,$dd
- .byte $dd,$a0,$c2,$dd,$a0,$dd,$dd,$62,$dd,$a0,$a0,$dd,$a0,$dd,$bd,$dd
- .byte $af,$dd,$a0,$ca,$c3,$cb,$ca,$c3,$cb,$ca,$c3,$cb,$ca,$c3,$cb,$ca
- .byte $c3,$cb,$ca,$c3,$cb,$ca,$c3,$cb,$ca,$c3,$cb,$ca,$c3,$cb,$ca,$c3
- .byte $cb,$a0,$a0,$dd,$af,$dd,$bd,$dd,$e3,$dd,$a0,$a0,$a0,$a0,$a0,$a0
- .byte $a0,$a0,$a0,$a0,$a0,$88,$8f,$8b,$95,$94,$8f,$a0,$86,$8f,$92,$83
- .byte $85,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$dd,$e3,$dd,$bd,$dd
- .byte $af,$dd,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0
- .byte $a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0
- .byte $a0,$a0,$a0,$dd,$af,$dd,$bd,$dd,$c3,$cb,$a0,$a0,$a0,$a0,$a0,$a0
- .byte $a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0
- .byte $a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0,$ca,$c3,$cb,$62,$ca
- .byte $e2,$e2,$e2,$57,$e2,$e2,$57,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2
- .byte $e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$e2,$57,$e2
- .byte $e2,$57,$e2,$e2,$e2,$e2,$20,$e2,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4
- .byte $c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4
- .byte $c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4,$c4
- .byte $df,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce
- .byte $ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce
- .byte $ce,$ce,$ce,$ce,$ce,$ce,$ce,$ce,$cd,$df,$20,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$62,$62,$62,$62,$62,$62,$62,$20
- .byte $62,$cd,$df,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$f0,$c0,$ee,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $94,$89,$83,$8b,$85,$94,$93,$20,$62,$62,$cd,$df,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$dd,$bd,$dd,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$f5,$f4,$a0,$a0,$a0,$ea,$f6,$20
- .byte $62,$62,$62,$cd,$df,$20,$20,$20,$20,$20,$20,$20,$20,$20,$f8,$f8
- .byte $f8,$f8,$f8,$20,$dd,$bd,$dd,$20,$f8,$f8,$f8,$f8,$f8,$20,$20,$20
- .byte $f5,$f4,$20,$79,$20,$ea,$f6,$20,$62,$62,$62,$62,$cd,$df,$20,$20
- .byte $20,$20,$20,$20,$20,$6c,$c6,$c6,$c6,$c6,$c6,$7b,$ed,$c0,$fd,$6c
- .byte $c6,$c6,$c6,$c6,$c6,$7b,$20,$20,$f5,$f4,$20,$a2,$20,$ea,$f6,$20
- .byte $62,$62,$62,$62,$62,$cd,$df,$20,$20,$20,$20,$20,$20,$76,$63,$63
- .byte $63,$63,$63,$75,$20,$42,$20,$76,$63,$63,$63,$63,$63,$75,$20,$20
- .byte $f5,$f4,$cf,$e3,$d0,$ea,$f6,$20,$a0,$62,$62,$62,$62,$62,$cd,$df
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$71,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$f5,$f4,$f4,$a0,$e7,$ea,$f6,$20
- .byte $cd,$a0,$62,$62,$62,$62,$62,$cd,$df,$20,$20,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $f5,$f4,$f4,$a0,$e7,$e7,$f6,$20,$a0,$cd,$a0,$62,$62,$62,$62,$62
- .byte $cd,$df,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $a0,$a0,$cd,$a0,$62,$62,$62,$62,$62,$cd,$df,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
- .byte $20,$20,$20,$20,$20,$20,$20,$20,$5f,$a0,$a0,$cd,$a0,$62,$62,$62
- .byte $62,$62,$cd,$df,$20,$20,$e9,$20,$e9,$20,$e9,$20,$e9,$20,$e9,$20
- .byte $e9,$20,$e9,$20,$e9,$20,$20,$20,$20,$20,$20,$79,$79,$20,$20,$20
- .byte $20,$5f,$a0,$a0,$cd,$a0,$62,$62,$62,$62,$62,$cd,$df,$20,$a0,$dd
- .byte $fb,$dd,$a0,$dd,$fb,$dd,$a0,$dd,$fb,$dd,$a0,$dd,$fb,$20,$20,$20
- .byte $20,$20,$20,$a0,$d1,$20,$20,$20,$20,$20,$5f,$a0,$a0,$cd,$a0,$62
- .byte $62,$62,$62,$62,$cd,$df,$a0,$dd,$a0,$dd,$a0,$dd,$a0,$dd,$a0,$dd
- .byte $a0,$dd,$a0,$dd,$a0,$20,$20,$20,$20,$20,$20,$a0,$a0,$20,$20,$20
- .byte $20,$20,$20,$5f,$a0,$a0,$cd,$a0,$62,$62,$62,$62,$62,$cd,$a0,$20
- .byte $a0,$20,$a0,$20,$a0,$20,$a0,$20,$a0,$20,$a0,$20,$a0,$20,$20,$20
- .byte $20,$20,$20,$e1,$61,$20,$20,$20
- ; Background screen color data (1000 bytes)
- colors:
- .byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$0c,$02,$02,$02,$07,$02,$02,$0c
- .byte $02,$02,$07,$02,$02,$07,$02,$02,$0c,$02,$02,$07,$02,$02,$07,$02
- .byte $02,$07,$02,$02,$07,$02,$02,$0c,$02,$02,$02,$02,$0c,$02,$0b,$02
- .byte $0c,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$0c,$02,$0b,$02,$0c,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$0c,$02,$0b,$02
- .byte $0c,$02,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$02,$02,$02,$02
- .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$0b,$0b,$0b,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$02,$0c,$02,$0b,$02,$02,$02,$06,$06,$06,$06,$06,$06
- .byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06
- .byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$02,$02,$02,$0c,$02
- .byte $06,$06,$0b,$0b,$0b,$0b,$0b,$0b,$06,$06,$06,$06,$06,$06,$06,$06
- .byte $06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$06,$06,$06,$02,$06,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
- .byte $06,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07
- .byte $07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07
- .byte $07,$07,$07,$07,$07,$07,$07,$07,$06,$06,$0d,$0d,$0d,$0d,$0d,$0d
- .byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d
- .byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$0f
- .byte $03,$06,$06,$0d,$0b,$0b,$0b,$0b,$04,$04,$04,$04,$04,$0b,$0b,$0b
- .byte $0b,$0b,$0b,$0b,$0b,$0c,$0f,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d
- .byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0f,$07,$07,$06,$06,$0d,$0b,$0b,$0b
- .byte $04,$04,$04,$04,$04,$0b,$0b,$0b,$0b,$0b,$0b,$0d,$0b,$01,$0f,$0d
- .byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$03,$03,$03,$03,$03,$03,$03,$0f
- .byte $05,$05,$05,$06,$06,$0d,$0b,$0b,$0b,$04,$04,$04,$0b,$0b,$08,$08
- .byte $08,$08,$08,$0d,$0b,$01,$0f,$0d,$08,$08,$08,$08,$08,$0d,$0d,$0d
- .byte $03,$03,$0d,$06,$0d,$03,$03,$0f,$04,$04,$04,$04,$06,$06,$0d,$0b
- .byte $0b,$04,$04,$04,$0b,$08,$08,$08,$08,$08,$08,$08,$0b,$0c,$0f,$08
- .byte $08,$08,$08,$08,$08,$08,$0d,$0d,$03,$03,$0d,$0a,$0d,$03,$03,$0f
- .byte $02,$02,$02,$02,$02,$06,$06,$0d,$0b,$04,$04,$0b,$0b,$09,$09,$09
- .byte $09,$09,$09,$09,$0b,$0b,$0b,$09,$09,$09,$09,$09,$09,$09,$0d,$0d
- .byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0f,$06,$01,$01,$01,$01,$01,$06,$06
- .byte $0d,$0b,$04,$0b,$0b,$08,$08,$08,$08,$08,$08,$0b,$0b,$0b,$0b,$08
- .byte $08,$08,$08,$08,$08,$08,$0d,$0d,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$0f
- .byte $06,$06,$08,$08,$08,$08,$08,$06,$06,$0d,$0b,$0b,$0b,$08,$08,$08
- .byte $08,$08,$08,$0b,$0b,$0c,$0c,$08,$08,$08,$08,$08,$08,$08,$08,$0f
- .byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0f,$06,$06,$06,$09,$09,$09,$09,$09
- .byte $06,$06,$0d,$0b,$0b,$08,$08,$08,$08,$08,$08,$0d,$0b,$0c,$0c,$08
- .byte $08,$08,$08,$08,$08,$08,$0f,$0f,$0f,$0f,$0f,$09,$09,$09,$0d,$0d
- .byte $06,$06,$06,$06,$0a,$0a,$0a,$0a,$0a,$06,$06,$0d,$0b,$0f,$0f,$0f
- .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$08,$0f
- .byte $0f,$0f,$0d,$09,$09,$09,$0d,$0d,$06,$06,$06,$06,$06,$0d,$0d,$0d
- .byte $0d,$0d,$06,$06,$0b,$09,$0c,$03,$0f,$0f,$0c,$0f,$0f,$0f,$0c,$0f
- .byte $0f,$0f,$0c,$0f,$0f,$0f,$08,$08,$08,$08,$0f,$09,$08,$06,$0d,$0d
- .byte $04,$06,$06,$06,$06,$06,$0e,$0e,$0e,$0e,$0e,$06,$06,$09,$0f,$03
- .byte $0f,$03,$0f,$03,$0f,$03,$0f,$03,$0f,$03,$0f,$03,$0f,$0f,$08,$08
- .byte $08,$08,$0d,$0b,$0c,$06,$0d,$0d,$04,$04,$06,$06,$06,$06,$06,$0f
- .byte $0f,$0f,$0f,$0f,$06,$06,$0f,$03,$0f,$03,$0f,$03,$0f,$03,$0f,$03
- .byte $0f,$03,$0f,$03,$0f,$0f,$08,$08,$08,$08,$0d,$0b,$0c,$06,$0d,$0d
- .byte $04,$04,$04,$06,$06,$06,$06,$06,$0c,$0c,$0c,$0c,$0c,$06,$0f,$0f
- .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$08,$08
- .byte $08,$08,$0d,$0b,$0f,$06,$0d,$0d
- escalator_1:
- .byte $03,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $07,$07,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $05,$05,$05,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $04,$04,$04,$04,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $02,$02,$02,$02,$02,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$01,$01,$01,$01,$01,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$08,$08,$08,$08,$08,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$09,$09,$09,$09,$09,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$0a,$0a,$0a,$0a,$0a,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$0d,$0d,$0d,$0d,$0d,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$0e,$0e,$0e,$0e,$0e,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$0f,$0f,$0f,$0f,$0f,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$0c,$0c,$0c,$0c,$0c
- escalator_2:
- .byte $0c,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $03,$03,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $07,$07,$07,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $05,$05,$05,$05,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $04,$04,$04,$04,$04,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$02,$02,$02,$02,$02,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$01,$01,$01,$01,$01,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$08,$08,$08,$08,$08,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$09,$09,$09,$09,$09,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$0a,$0a,$0a,$0a,$0a,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$0d,$0d,$0d,$0d,$0d,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$0e,$0e,$0e,$0e,$0e,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$0f,$0f,$0f,$0f,$0f
- escalator_3:
- .byte $0f,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0c,$0c,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $03,$03,$03,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $07,$07,$07,$07,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $05,$05,$05,$05,$05,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$04,$04,$04,$04,$04,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$02,$02,$02,$02,$02,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$01,$01,$01,$01,$01,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$08,$08,$08,$08,$08,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$09,$09,$09,$09,$09,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$0a,$0a,$0a,$0a,$0a,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$0d,$0d,$0d,$0d,$0d,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$0e,$0e,$0e,$0e,$0e
- escalator_4:
- .byte $0e,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0f,$0f,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0c,$0c,$0c,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $03,$03,$03,$03,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $07,$07,$07,$07,$07,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$05,$05,$05,$05,$05,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$04,$04,$04,$04,$04,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$02,$02,$02,$02,$02,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$01,$01,$01,$01,$01,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$08,$08,$08,$08,$08,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$09,$09,$09,$09,$09,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$0a,$0a,$0a,$0a,$0a,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$0d,$0d,$0d,$0d,$0d
- escalator_5:
- .byte $0d,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0e,$0e,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0f,$0f,$0f,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0c,$0c,$0c,$0c,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $03,$03,$03,$03,$03,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$07,$07,$07,$07,$07,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$05,$05,$05,$05,$05,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$04,$04,$04,$04,$04,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$02,$02,$02,$02,$02,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$01,$01,$01,$01,$01,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$08,$08,$08,$08,$08,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$09,$09,$09,$09,$09,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$0a,$0a,$0a,$0a,$0a
- escalator_6:
- .byte $0a,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0d,$0d,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0e,$0e,$0e,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0f,$0f,$0f,$0f,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $0c,$0c,$0c,$0c,$0c,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$03,$03,$03,$03,$03,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$07,$07,$07,$07,$07,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$05,$05,$05,$05,$05,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$04,$04,$04,$04,$04,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$02,$02,$02,$02,$02,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$01,$01,$01,$01,$01,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$08,$08,$08,$08,$08,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$09,$09,$09,$09,$09
- escalator_7:
- .byte $09,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0a,$0a,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0d,$0d,$0d,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0e,$0e,$0e,$0e,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $0f,$0f,$0f,$0f,$0f,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$0c,$0c,$0c,$0c,$0c,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$03,$03,$03,$03,$03,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$07,$07,$07,$07,$07,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$05,$05,$05,$05,$05,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$04,$04,$04,$04,$04,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$02,$02,$02,$02,$02,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$01,$01,$01,$01,$01,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$08,$08,$08,$08,$08
- escalator_8:
- .byte $08,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $09,$09,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0a,$0a,$0a,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0d,$0d,$0d,$0d,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $0e,$0e,$0e,$0e,$0e,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$0f,$0f,$0f,$0f,$0f,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$0c,$0c,$0c,$0c,$0c,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$03,$03,$03,$03,$03,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$07,$07,$07,$07,$07,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$05,$05,$05,$05,$05,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$04,$04,$04,$04,$04,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$02,$02,$02,$02,$02,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$01,$01,$01,$01,$01
- escalator_9:
- .byte $01,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $08,$08,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $09,$09,$09,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $0a,$0a,$0a,$0a,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $0d,$0d,$0d,$0d,$0d,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$0e,$0e,$0e,$0e,$0e,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$0f,$0f,$0f,$0f,$0f,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$0c,$0c,$0c,$0c,$0c,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$03,$03,$03,$03,$03,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$07,$07,$07,$07,$07,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$05,$05,$05,$05,$05,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$04,$04,$04,$04,$04,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$02,$02,$02,$02,$02
- escalator_10:
- .byte $02,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $01,$01,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $08,$08,$08,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00
- .byte $09,$09,$09,$09,$06,$06,$00,$00,$00,$00,$00,$00,$00
- .byte $0a,$0a,$0a,$0a,$0a,$06,$06,$00,$00,$00,$00,$00,$00
- .byte $06,$0d,$0d,$0d,$0d,$0d,$06,$06,$00,$00,$00,$00,$00
- .byte $06,$06,$0e,$0e,$0e,$0e,$0e,$06,$06,$00,$00,$00,$00
- .byte $06,$06,$06,$0f,$0f,$0f,$0f,$0f,$06,$06,$00,$00,$00
- .byte $06,$06,$06,$06,$0c,$0c,$0c,$0c,$0c,$06,$06,$00,$00
- .byte $06,$06,$06,$06,$06,$03,$03,$03,$03,$03,$06,$06,$00
- .byte $00,$06,$06,$06,$06,$06,$07,$07,$07,$07,$07,$06,$06
- .byte $00,$00,$06,$06,$06,$06,$06,$05,$05,$05,$05,$05,$06
- .byte $00,$00,$00,$06,$06,$06,$06,$06,$04,$04,$04,$04,$04
- ; Sprite data (63 bytes)
- ; flag
- sprite0_data:
- .byte 0,0,0,0,0,0,0,0,0,8,0,0,10,0,32,11
- .byte 128,160,11,170,160,11,170,160,10,170,160,10,170,160,10,170
- .byte 160,10,170,160,6,170,160,4,170,128,4,42,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite1_data:
- .byte 0,0,0,0,0,0,0,0,0,10,0,0,10,128,0,10
- .byte 224,32,10,234,160,10,234,160,10,234,160,10,170,160,10,170
- .byte 160,10,170,160,4,170,160,4,42,160,4,10,128,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite2_data:
- .byte 0,0,0,0,0,0,0,0,0,10,128,0,10,176,0,10
- .byte 248,0,10,250,160,10,250,160,10,186,160,10,170,160,10,170
- .byte 160,10,170,160,4,42,160,4,10,160,4,2,160,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite3_data:
- .byte 0,0,0,0,0,0,2,160,0,10,188,0,10,190,0,10
- .byte 190,160,10,190,160,10,186,160,10,170,160,10,170,160,10,170
- .byte 160,8,10,160,4,2,160,4,0,160,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite4_data:
- .byte 0,0,0,0,168,0,2,174,0,10,190,128,10,190,160,10
- .byte 190,160,10,190,160,10,174,160,10,170,160,10,170,160,10,2
- .byte 160,8,0,160,4,0,32,4,0,0,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite5_data:
- .byte 0,42,0,0,175,128,2,175,160,10,175,160,10,175,160,10
- .byte 175,160,10,175,160,10,171,160,10,170,160,10,128,160,10,0
- .byte 32,8,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite6_data:
- .byte 0,10,128,0,42,224,0,170,224,10,170,224,10,170,224,10
- .byte 170,224,10,170,160,10,170,160,10,170,160,10,160,32,10,128
- .byte 0,10,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite7_data:
- .byte 0,2,160,0,10,160,0,42,160,10,170,160,10,170,160,10
- .byte 170,160,10,170,160,10,170,160,10,170,160,10,168,0,10,160
- .byte 0,10,128,0,4,0,0,4,0,0,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite8_data:
- .byte 0,0,0,0,0,160,0,2,160,8,10,160,10,170,160,10
- .byte 170,160,10,170,160,10,170,160,10,170,160,10,170,160,10,170
- .byte 0,10,168,0,6,160,0,4,0,0,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- sprite9_data:
- .byte 0,0,0,0,0,0,0,0,32,8,0,160,10,2,160,10
- .byte 170,160,10,170,160,10,170,160,10,170,160,10,170,160,10,170
- .byte 160,10,170,128,6,170,0,4,168,0,4,0,0,4,0,0
- .byte 4,0,0,4,0,0,4,0,0,4,0,0,4,0,0
- ; standing person
- sprite10_data:
- .byte 0,60,0,0,126,0,0,126,0,0,126,0,0,60,0,0
- .byte 0,0,0,255,0,1,255,128,1,255,128,1,255,128,0,126
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,231,0,0,0,0,0,0,0,0,0,0,0,0,0
- sprite11_data:
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0
- .byte 60,0,0,0,0,0,0,0,0,0,0,0,0,0,1,129
- .byte 128,1,129,128,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- sprite12_data:
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,0,126,0,0,126,0,0,102,0,0,102,0,0,102,0
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ; sitting person
- sprite13_data:
- .byte 0,60,0,0,126,0,0,66,0,0,66,0,0,0,0,0
- .byte 0,0,0,255,0,1,255,128,1,255,128,1,189,128,1,189
- .byte 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 1,195,128,0,0,0,0,0,0,0,0,0,0,0,0
- sprite14_data:
- .byte 0,0,0,0,0,0,0,24,0,0,60,0,0,126,0,0
- .byte 60,0,0,0,0,0,0,0,0,0,0,0,66,0,0,66
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- sprite15_data:
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- .byte 0,0,255,0,0,255,0,0,195,0,0,195,0,0,195,0
- .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Advertisement
Add Comment
Please, Sign In to add comment