ROM:0000 ;
ROM:0000 ; +-------------------------------------------------------------------------+
ROM:0000 ; |     This file is generated by The Interactive Disassembler (IDA)        |
ROM:0000 ; |     Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com>        |
ROM:0000 ; | Licensed to: Chris Lomont                                               |
ROM:0000 ; +-------------------------------------------------------------------------+
ROM:0000 ;
ROM:0000 ; Input MD5   : FADD0697D0D7969106505B5AB0CFF312
ROM:0000
ROM:0000 ;============================================================================
ROM:0000 ; Pac-Man Commented Disassembly, Chris Lomont, 2008, www.lomont.org
ROM:0000 ;============================================================================
ROM:0000 ; File Name   : pacman.rom
ROM:0000 ; Format      : Binary file
ROM:0000 ; Base Address: 0000h Range: 0000h - 5100h Loaded length: 5100h
ROM:0000 ; Pac-Man Commented Disassembly Version 0.1
ROM:0000 ; Chris Lomont, Nov 2008
ROM:0000 ; TODO - sources
ROM:0000 ;
ROM:0000 ;============================================================================
ROM:0000 ;
ROM:0000 ;Program starts here, at address 0000
ROM:0000
ROM:0000 ; Processor       : z80 []
ROM:0000 ; Target assembler: Zilog Macro Assembler
ROM:0000
ROM:0000 ; ===========================================================================
ROM:0000
ROM:0000 ; Segment type: Pure code
ROM:0000                 segment ROM
ROM:0000
ROM:0000 ; =============== S U B R O U T I N E =======================================
ROM:0000
ROM:0000
ROM:0000 ProgramStart:
ROM:0000
ROM:0000 ; FUNCTION CHUNK AT ROM:230B SIZE 0000009D BYTES
ROM:0000
ROM:0000                 di                      ; Disable interrupts
ROM:0001                 ld      a, 3Fh ; '?'    ; Set page 3F00h for interrupt mode 2 vector
ROM:0003                 ld      i, a            ; Interrupt register prefix is 3Fh
ROM:0005                 jp      StartupTests    ; Jump to start location
ROM:0005 ; End of function ProgramStart
ROM:0005
ROM:0008 ; ===========================================================================
ROM:0008 ; memset
ROM:0008 ; rst 8 = memset
ROM:0008 ; Fill (HL) to (HL+B) with value in A
ROM:0008 ; Modifies B,HL
ROM:0008 ; ===========================================================================
ROM:0008
ROM:0008 ; =============== S U B R O U T I N E =======================================
ROM:0008
ROM:0008
ROM:0008 memset:
ROM:0008                 ld      (hl), a         ; write A to (HL)
ROM:0009                 inc     hl              ; next HL
ROM:000A                 djnz    memset          ; Decrement B, jump if B != 0
ROM:000C
ROM:000C RetOpcode:                              ; This return called from many places
ROM:000C                 ret
ROM:000C ; End of function memset
ROM:000C
ROM:000D ; ---------------------------------------------------------------------------
ROM:000D                 jp      PrepareDifficulty ; TODO - This is called in MAME runs, - who calls it?
ROM:0010 ; ===========================================================================
ROM:0010 ;rst 10 (dereference pointer to bytes)
ROM:0010 ;HL points to table base
ROM:0010 ;a contains index
ROM:0010 ;HL += A; A = (HL);
ROM:0010 ;Modifies: HL, A
ROM:0010 ; ===========================================================================
ROM:0010
ROM:0010 ; =============== S U B R O U T I N E =======================================
ROM:0010
ROM:0010
ROM:0010 LookupByteA:
ROM:0010                 add     a, l            ; Add A to HL (one byte, then carry)
ROM:0011                 ld      l, a            ; store back into L
ROM:0012                 ld      a, 0            ; prepare to propogate carry
ROM:0014                 adc     a, h            ; and do it
ROM:0015                 ld      h, a            ; HL = HL+A
ROM:0016                 ld      a, (hl)         ; Lookup A=(HL)
ROM:0017                 ret
ROM:0017 ; End of function LookupByteA
ROM:0017
ROM:0018 ;=======================
ROM:0018 ; Lookup Word (HL)
ROM:0018 ;rst 18
ROM:0018 ;Dereference pointer to word
ROM:0018 ;HL = base address of table
ROM:0018 ;b contains index
ROM:0018 ;HL = (HL+2B)
ROM:0018 ;=======================
ROM:0018
ROM:0018 ; =============== S U B R O U T I N E =======================================
ROM:0018
ROM:0018
ROM:0018 LookupWordHL:
ROM:0018                 ld      a, b
ROM:0019                 add     a, a            ; A=2B
ROM:001A                 rst     10h             ; get HL=HL+A
ROM:001B                 ld      e, a            ; Low byte of word to lookup
ROM:001C                 inc     hl              ; Next byte
ROM:001D                 ld      d, (hl)         ; high byte
ROM:001E                 ex      de, hl          ; store in HL
ROM:001F                 ret
ROM:001F ; End of function LookupWordHL
ROM:001F
ROM:0020 ;======================
ROM:0020 ;Call with rst 20h
ROM:0020 ;Jump Table
ROM:0020 ;Calls function pointed to by (stack) + 2A,
ROM:0020 ;return returns to address on stack
ROM:0020 ;Called with rst 20 followed by
ROM:0020 ;table of function address
ROM:0020 ; TODO - make sure all rst 20 followed with table
ROM:0020 ;======================
ROM:0020
ROM:0020
ROM:0020 ; =============== S U B R O U T I N E =======================================
ROM:0020
ROM:0020
ROM:0020 CallFunction:
ROM:0020                 pop     hl              ; get table address
ROM:0021                 add     a, a            ; a = 2*a - spacing out values for jumping to a function
ROM:0022                 rst     10h             ; dereference byte A = (HL+A)
ROM:0023                 ld      e, a            ; E=low byte of address to jump to
ROM:0024                 inc     hl
ROM:0025                 ld      d, (hl)         ; D = high address of address to jump to
ROM:0026                 ex      de, hl          ; Prepare to jump
ROM:0027                 jp      (hl)            ; jump away! return address on stack
ROM:0027 ; End of function CallFunction
ROM:0027
ROM:0028 ;=======================
ROM:0028 ; rst 28, data
ROM:0028 ; Write the task into the TaskList
ROM:0028 ; The task routine is the byte following the
ROM:0028 ; instruction, and the parameter is the
ROM:0028 ; byte after that
ROM:0028 ; TODO - get list of tasks
ROM:0028 ;=======================
ROM:0028
ROM:0028 ; =============== S U B R O U T I N E =======================================
ROM:0028
ROM:0028
ROM:0028 InsertTask:
ROM:0028
ROM:0028 ; FUNCTION CHUNK AT ROM:0051 SIZE 00000014 BYTES
ROM:0028
ROM:0028                 pop     hl              ; get value on stack (address to return to, example holds : 11h, see location 8A5)
ROM:0029                 ld      b, (hl)         ; get routine number (todo - or is thie parameter?)
ROM:002A                 inc     hl
ROM:002B                 ld      c, (hl)         ; get parameter (or is this routine #?)
ROM:002C                 inc     hl
ROM:002D                 push    hl              ; save address pass command
ROM:002E                 jr      ContinueTask    ; skip the other rst instruction spaces
ROM:0030 ; ---------------------------------------------------------------------------
ROM:0030 ;===========================================================================
ROM:0030 ; InsertIRQTask
ROM:0030 ; inserts a task into the IRQ task list if possible
ROM:0030 ; call with rst 30, data
ROM:0030 ; where data is the three bytes to store in task list
ROM:0030 ; Tasks list 4C90-4CBF (runs in IRQ)
ROM:0030 ; 16 entries, 3 bytes each
ROM:0030 ; byte 0 - scheduled time
ROM:0030 ; byte 1 - index for jump table
ROM:0030 ; byte 2 - parameter passed in B
ROM:0030 ;===========================================================================
ROM:0030
ROM:0030
ROM:0030 InsertIRQTask:                          ; first IRQ task address
ROM:0030                 ld      de, 4C90h
ROM:0033                 ld      b, 10h          ; look at 16 tasks in IRQ list
ROM:0035                 jp      IRQTaskLoop     ; skip space for other rst handlers
ROM:0038 ; ---------------------------------------------------------------------------
ROM:0038 ;============================
ROM:0038 ;Bogus Interrupt mode 2 handler
ROM:0038 ; infinite loops, until watchdog timer
ROM:0038 ; restarts machine
ROM:0038 ; happens if IM2 interrupt vector
ROM:0038 ; is not set before machine hangs
ROM:0038 ;============================
ROM:0038
ROM:0038 BogusIM2Handler:                        ; zero A
ROM:0038                 xor     a
ROM:0039                 ld      (InterruptEnable), a ; disable interrupts
ROM:003C                 ld      (CoinCounter), a ; clear coins
ROM:003F                 jp      BogusIM2Handler ; infinite loop
ROM:0042 ; ---------------------------------------------------------------------------
ROM:0042
ROM:0042 ContinueTask:                           ; get next space to place task
ROM:0042                 ld      hl, (TaskListEndPtr)
ROM:0045                 ld      (hl), b         ; save routine
ROM:0046                 inc     l
ROM:0047                 ld      (hl), c         ; save parameter
ROM:0048                 inc     l               ; next task location
ROM:0049                 jr      nz, noOverflow  ; did task pointer overflow?
ROM:004B                 ld      l, 0C0h ; '+'   ; yes, start at the table top
ROM:004D
ROM:004D noOverflow:                             ; save location to put next task
ROM:004D                 ld      (TaskListEndPtr), hl
ROM:0050                 ret                     ; and jump back to instruction following the rst 28, dw that called this
ROM:0050 ; End of function InsertTask
ROM:0050
ROM:0051 ; ---------------------------------------------------------------------------
ROM:0051 ; START OF FUNCTION CHUNK FOR InsertTask
ROM:0051
ROM:0051 IRQTaskLoop:                            ; Get task launch time
ROM:0051                 ld      a, (de)
ROM:0052                 and     a               ; is there a task in this slot?
ROM:0053                 jr      z, InsertIRQTask2 ; no, jump to add task
ROM:0055                 inc     e               ; increment 3 bytes to next task
ROM:0056                 inc     e
ROM:0057                 inc     e
ROM:0058                 djnz    IRQTaskLoop     ; if not done, continue with next task
ROM:005A                 ret                     ; no more tasks
ROM:005B ; ---------------------------------------------------------------------------
ROM:005B
ROM:005B InsertIRQTask2:                         ; Get the return address where the task to insert is
ROM:005B                 pop     hl
ROM:005C                 ld      b, 3            ; copy 3 bytes into the IRQ task list
ROM:005E
ROM:005E IRQTaskRunLoop:                         ; get a byte
ROM:005E                 ld      a, (hl)
ROM:005F                 ld      (de), a         ; store in task list
ROM:0060                 inc     hl              ; next source byte
ROM:0061                 inc     e               ; next dest byte
ROM:0062                 djnz    IRQTaskRunLoop  ; continue for all 3 bytes
ROM:0064                 jp      (hl)            ; jump to address following the data after the rst 30
ROM:0064 ; END OF FUNCTION CHUNK FOR InsertTask
ROM:0065
ROM:0065 ; =============== S U B R O U T I N E =======================================
ROM:0065
ROM:0065 ; Attributes: thunk
ROM:0065
ROM:0065 sub_65:
ROM:0065                 jp      sub_202D
ROM:0065 ; End of function sub_65
ROM:0065
ROM:0065 ; ---------------------------------------------------------------------------
ROM:0068 ;===============================
ROM:0068 ; Difficulty tables, value per level
ROM:0068 ; until top value
ROM:0068 ;===============================
ROM:0068 NormalDiff:     db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 10h
ROM:0068                 db 11h, 12h, 13h, 14h
ROM:007D HardDiff:       db 1, 3, 4, 6, 7, 8, 9, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 10h, 11h
ROM:007D                 db 14h
ROM:008D ;============================
ROM:008D ; Interrupt handler -
ROM:008D ; Called every time VBLANK fires during the game
ROM:008D ; which is 60.61 times per second
ROM:008D ;============================
ROM:008D
ROM:008D ; =============== S U B R O U T I N E =======================================
ROM:008D
ROM:008D ; Interrupt vector
ROM:008D
ROM:008D Interrupt2:
ROM:008D                 push    af              ; save these
ROM:008E                 ld      (WatchdogReset), a ; kick the dog
ROM:0091                 xor     a               ; clear a
ROM:0092                 ld      (InterruptEnable), a ; disable hardware interrupts
ROM:0095                 di                      ; disable CPU interupts
ROM:0096                 push    bc              ; save all registers
ROM:0097                 push    de
ROM:0098                 push    hl
ROM:0099                 push    ix
ROM:009B                 push    iy
ROM:009D ;================================
ROM:009D ;VBLANK  (SOUND)
ROM:009D ;
ROM:009D ;Load the sound into the hardware
ROM:009D ;================================
ROM:009D                 ld      hl, 4E8Ch       ; pointer to frequencies and volumes of the 3 voices
ROM:00A0                 ld      de, 5050h       ; sound hardware addresses
ROM:00A3                 ld      bc, 10h         ; 16 bytes
ROM:00A6                 ldir                    ; copy
ROM:00A8 ;Voice 1 wave select
ROM:00A8                 ld      a, (CH1_W_NUM)  ; if we play a wave
ROM:00AB                 and     a
ROM:00AC                 ld      a, (CH1_W_SEL)  ; then WaveSelect = CH1_W_SEL
ROM:00AF                 jr      nz, loc_B4      ; write WaveSelect to hardware
ROM:00B1                 ld      a, (CH1_E_TABLE0) ; else then WaveSelect = CH1_E_TABLE0
ROM:00B4
ROM:00B4 loc_B4:                                 ; write WaveSelect to hardware
ROM:00B4                 ld      (Voice1Waveform), a
ROM:00B7                 ld      a, (CH2_W_NUM)
ROM:00BA                 and     a
ROM:00BB                 ld      a, (byte_4EDF)
ROM:00BE                 jr      nz, loc_C3
ROM:00C0                 ld      a, (byte_4EAF)
ROM:00C3
ROM:00C3 loc_C3:
ROM:00C3                 ld      (Voice2Waveform), a
ROM:00C6 ;Voice 3 wave select
ROM:00C6                 ld      a, (CH3_W_NUM)
ROM:00C9                 and     a
ROM:00CA                 ld      a, (byte_4EEF)
ROM:00CD                 jr      nz, loc_D2
ROM:00CF                 ld      a, (byte_4EBF)
ROM:00D2
ROM:00D2 loc_D2:
ROM:00D2                 ld      (Voice3Waveform), a
ROM:00D5 ; copy last frame sprite data into sprite buffer
ROM:00D5                 ld      hl, 4C02h       ; source data
ROM:00D8                 ld      de, 4C22h       ; dest data
ROM:00DB                 ld      bc, 1Ch         ; 28 bytes to copy
ROM:00DE                 ldir                    ; copy it
ROM:00E0 ; copy sprite data to hardware
ROM:00E0                 ld      ix, 4C20h
ROM:00E4                 ld      a, (ix+2)       ; move up for flip hardware
ROM:00E7                 rlca
ROM:00E8                 rlca
ROM:00E9                 ld      (ix+2), a
ROM:00EC                 ld      a, (ix+4)       ; move sprite number 2 bits up
ROM:00EF                 rlca
ROM:00F0                 rlca
ROM:00F1                 ld      (ix+4), a
ROM:00F4                 ld      a, (ix+6)
ROM:00F7                 rlca
ROM:00F8                 rlca
ROM:00F9                 ld      (ix+6), a
ROM:00FC                 ld      a, (ix+8)
ROM:00FF                 rlca
ROM:0100                 rlca
ROM:0101                 ld      (ix+8), a
ROM:0104                 ld      a, (ix+0Ah)
ROM:0107                 rlca
ROM:0108                 rlca
ROM:0109                 ld      (ix+0Ah), a
ROM:010C                 ld      a, (ix+0Ch)
ROM:010F                 rlca
ROM:0110                 rlca
ROM:0111                 ld      (ix+0Ch), a
ROM:0114                 ld      a, (byte_4DD1)  ; ghost being killed?
ROM:0117                 cp      1
ROM:0119                 jr      nz, loc_153
ROM:011B                 ld      ix, 4C20h
ROM:011F                 ld      a, (DeadGhostIndex)
ROM:0122                 add     a, a
ROM:0123                 ld      e, a
ROM:0124                 ld      d, 0
ROM:0126                 add     ix, de
ROM:0128                 ld      hl, (word_4C24)
ROM:012B                 ld      de, (word_4C34)
ROM:012F                 ld      a, (ix+0)
ROM:0132                 ld      (word_4C24), a
ROM:0135                 ld      a, (ix+1)
ROM:0138                 ld      (word_4C24+1), a
ROM:013B                 ld      a, (ix+10h)
ROM:013E
ROM:013E loc_13E:
ROM:013E                 ld      (word_4C34), a
ROM:0141                 ld      a, (ix+11h)
ROM:0144                 ld      (word_4C34+1), a
ROM:0147                 ld      (ix+0), l
ROM:014A                 ld      (ix+1), h
ROM:014D                 ld      (ix+10h), e
ROM:0150                 ld      (ix+11h), d
ROM:0153
ROM:0153 loc_153:
ROM:0153                 ld      a, (PillEffect)
ROM:0156                 and     a
ROM:0157                 jp      z, loc_176
ROM:015A                 ld      bc, (SpriteBuffer)
ROM:015E                 ld      de, (word_4C32)
ROM:0162                 ld      hl, (word_4C2A)
ROM:0165                 ld      (SpriteBuffer), hl
ROM:0168                 ld      hl, (word_4C3A)
ROM:016B                 ld      (word_4C32), hl
ROM:016E                 ld      (word_4C2A), bc
ROM:0172                 ld      (word_4C3A), de
ROM:0176
ROM:0176 loc_176:                                ; copy data to sprite hardware
ROM:0176                 ld      hl, 4C22h
ROM:0179                 ld      de, 4FF2h       ; sprite hardware location
ROM:017C                 ld      bc, 0Ch         ; 12 bytes
ROM:017F                 ldir                    ; copy
ROM:0181                 ld      hl, 4C32h       ; more data to copy
ROM:0184                 ld      de, 5062h       ; more sprite hardware
ROM:0187                 ld      bc, 0Ch         ; 12 more bytes
ROM:018A                 ldir                    ; copy
ROM:018C                 call    UpdateTimers    ; update all timers and some related items
ROM:018F                 call    MoveCutSceneSprites
ROM:0192                 call    sub_3C8
ROM:0195                 ld      a, (MainMode)
ROM:0198                 and     a
ROM:0199                 jr      z, loc_1AD
ROM:019B                 call    DrawBigPacMan
ROM:019E                 call    DrawSprites
ROM:01A1                 call    sub_141F
ROM:01A4                 call    sub_267
ROM:01A7                 call    sub_2AD
ROM:01AA                 call    sub_2FD
ROM:01AD
ROM:01AD loc_1AD:
ROM:01AD                 ld      a, (MainMode)
ROM:01B0                 dec     a
ROM:01B1                 jr      nz, loc_1B9
ROM:01B3                 ld      (CH2_DATA), a
ROM:01B6                 ld      (CH3_DATA), a
ROM:01B9
ROM:01B9 loc_1B9:
ROM:01B9                 call    ProcessEffect
ROM:01BC                 call    ProcessWave
ROM:01BF                 pop     iy              ; restore registers
ROM:01C1                 pop     ix
ROM:01C3                 pop     hl
ROM:01C4                 pop     de
ROM:01C5                 pop     bc
ROM:01C6                 ld      a, (MainMode)   ; get main mode (TODO - or is this number of players?)
ROM:01C9                 and     a               ; see if it is 0 = init
ROM:01CA                 jr      z, NoInit       ; if not init, continue
ROM:01CC                 ld      a, (Voice1Acc)  ; get the sound register
ROM:01CF                 and     10h             ; check low nibble
ROM:01D1                 jp      z, ProgramStart ; if no sound yet, restart machine?
ROM:01D4
ROM:01D4 NoInit:                                 ; prepare to enable hardware interrupts
ROM:01D4                 ld      a, 1
ROM:01D6                 ld      (InterruptEnable), a ; enable hardware interrupts
ROM:01D9                 ei                      ; enable CPU interrupts
ROM:01DA                 pop     af              ; restore final registers
ROM:01DB                 ret                     ; return from interrupt routine
ROM:01DB ; End of function Interrupt2
ROM:01DB
ROM:01DC ;=========================
ROM:01DC ;UpdateTimers
ROM:01DC ;TODO - document
ROM:01DC ; Count8BitsUp:   db 0 ; 8 bit counter (00 to FF) used by sound
ROM:01DC ;ROM:4C85 Count8BitsDown: db    0                 ; 8 but unused counter - TODO? FF to 00
ROM:01DC ;ROM:4C86 Timer60:        db    0                 ; 60ths of a second
ROM:01DC ;ROM:4C87 TimerSec:       db    0                 ; seconds timer
ROM:01DC ;ROM:4C88 TimerMin:       db    0                 ; minute timer
ROM:01DC ;ROM:4C89 TimerHours:     db    0                 ; hour timer
ROM:01DC ;=========================
ROM:01DC
ROM:01DC
ROM:01DC ; =============== S U B R O U T I N E =======================================
ROM:01DC
ROM:01DC
ROM:01DC UpdateTimers:
ROM:01DC                 ld      hl, 4C84h       ; upwards counter address
ROM:01DF                 inc     (hl)            ; increment it
ROM:01E0                 inc     hl              ; point to down counter
ROM:01E1                 dec     (hl)            ; decrement it
ROM:01E2                 inc     hl              ; point to 60ths of a second counter
ROM:01E3                 ld      de, 219h        ; address of TimerTable
ROM:01E6                 ld      bc, 401h        ; B=check up to 4 bytes, count bytes read in C
ROM:01E9
ROM:01E9 TimerLoop:                              ; increment timer byte
ROM:01E9                 inc     (hl)
ROM:01EA                 ld      a, (hl)         ; read byte
ROM:01EB                 and     0Fh             ; get lower 4 bits
ROM:01ED                 ex      de, hl          ; swap timer table and timer address
ROM:01EE                 cp      (hl)            ; compare lower nibble to table entry
ROM:01EF                 jr      nz, TimerCorrect ; if not there yet, jump
ROM:01F1                 inc     c               ; another nibble overflow
ROM:01F2                 ld      a, (de)         ; Get next timer entry
ROM:01F3                 add     a, 10h          ; add 1 to high nibble
ROM:01F5                 and     0F0h ; '='      ; clear low nibble
ROM:01F7                 ld      (de), a         ; write back
ROM:01F8                 inc     hl              ; next timer table entry
ROM:01F9                 cp      (hl)            ; is the high nibble maxed out?
ROM:01FA                 jr      nz, TimerCorrect ; if not, jump out
ROM:01FC                 inc     c               ; another nibble overflow
ROM:01FD                 ex      de, hl          ; swap timers and table addresses
ROM:01FE                 ld      (hl), 0         ; clear timer byte, we'll go to the next one
ROM:0200                 inc     hl              ; next timer byte
ROM:0201                 inc     de              ; next table byte
ROM:0202                 djnz    TimerLoop       ; loop again
ROM:0204
ROM:0204 TimerCorrect:                           ; address for timer limits
ROM:0204                 ld      hl, 4C8Ah
ROM:0207                 ld      (hl), c         ; save the overflow count
ROM:0208                 inc     l               ; Point to unused random seed
ROM:0209                 ld      a, (hl)         ; read seed
ROM:020A                 add     a, a            ; A=2A
ROM:020B                 add     a, a            ; A=2A
ROM:020C                 add     a, (hl)         ; A=A+seed
ROM:020D                 inc     a               ; A=5*A+1
ROM:020E                 ld      (hl), a         ; save back - result is (HL)=5*(HL)+1, a random number generator
ROM:020F                 inc     l               ; Next seed
ROM:0210                 ld      a, (hl)         ; A=seed
ROM:0211                 add     a, a            ; A=2A     ; A=2*seed
ROM:0212                 add     a, (hl)         ; A=A+seed ; A=3*seed
ROM:0213                 add     a, a            ; A=2A     ; A=6*seed
ROM:0214                 add     a, a            ; A=2A     ; A=12*seed
ROM:0215                 add     a, (hl)         ; A=A+seed ; A=13*seed
ROM:0216                 inc     a               ; A=A+1    ; A=13*seed+1
ROM:0217                 ld      (hl), a         ; save back
ROM:0218                 ret                     ; and return from timer update
ROM:0218 ; End of function UpdateTimers
ROM:0218
ROM:0218 ; ---------------------------------------------------------------------------
ROM:0219 ;=========================
ROM:0219 ; TimerTable used in UpdateTimer routine
ROM:0219 ; each value tells when a nibble
ROM:0219 ; overflows to the next value
ROM:0219 ;=========================
ROM:0219 TimerTable:     db 6                    ; when we count six 60ths of a second, roll over next nibble
ROM:021A                 db 0A0h                 ; when we count 10 in the high nibble, increment a second counter
ROM:021B                 db 0Ah
ROM:021C                 db 60h
ROM:021D                 db 0Ah
ROM:021E                 db 60h
ROM:021F                 db 0Ah
ROM:0220                 db 0A0h
ROM:0221 ; TODO - is this right?
ROM:0221
ROM:0221 ; =============== S U B R O U T I N E =======================================
ROM:0221
ROM:0221
ROM:0221 MoveCutSceneSprites:
ROM:0221                 ld      hl, 4C90h       ; IRQ Task List
ROM:0224                 ld      a, (TimerLimits) ; Number of nibble overflows last tick, 0-9
ROM:0227                 ld      c, a
ROM:0228                 ld      b, 10h          ; check 16 tasks
ROM:022A
ROM:022A loc_22A:                                ; get task
ROM:022A                 ld      a, (hl)
ROM:022B                 and     a               ; test if there is a task in this slot
ROM:022C                 jr      z, loc_25D      ; if not, jump to next task
ROM:022E                 and     0C0h ; '+'
ROM:0230                 rlca
ROM:0231                 rlca
ROM:0232                 cp      c
ROM:0233                 jr      nc, loc_25D
ROM:0235                 dec     (hl)            ; decrease task timer
ROM:0236                 ld      a, (hl)
ROM:0237                 and     3Fh ; '?'
ROM:0239                 jr      nz, loc_25D
ROM:023B                 ld      (hl), a
ROM:023C                 push    bc              ; save these through subroutine
ROM:023D                 push    hl
ROM:023E                 inc     l
ROM:023F                 ld      a, (hl)
ROM:0240                 inc     l
ROM:0241                 ld      b, (hl)
ROM:0242                 ld      hl, 25Bh        ; return to this address (past table)
ROM:0245                 push    hl
ROM:0246                 rst     20h
ROM:0246 ; ---------------------------------------------------------------------------
ROM:0247                 dw 894h                 ; A=0, increment LevelComplete
ROM:0249                 dw 6A3h                 ; Increment MainSub2
ROM:024B                 dw 58Eh                 ; Increment MainSub1
ROM:024D                 dw 1272h
ROM:024F                 dw 1000h                ; Clear fruit pointer and position
ROM:0251                 dw 100Bh
ROM:0253                 dw 263h                 ; draw message
ROM:0255                 dw 212Bh                ; Increment cut scene1 state
ROM:0257                 dw 21F0h                ; Increment cut scene 2 state
ROM:0259                 dw 22B9h                ; A=9 Increment cutscene 3 state
ROM:025B ; ---------------------------------------------------------------------------
ROM:025B                 pop     hl              ; restore
ROM:025C                 pop     bc
ROM:025D
ROM:025D loc_25D:                                ; go to next task
ROM:025D                 inc     l
ROM:025E                 inc     l
ROM:025F                 inc     l
ROM:0260                 djnz    loc_22A         ; repeat till all 16 tasks have been scanned
ROM:0262                 ret
ROM:0262 ; End of function MoveCutSceneSprites
ROM:0262
ROM:0263
ROM:0263 ; =============== S U B R O U T I N E =======================================
ROM:0263
ROM:0263
ROM:0263 sub_263:
ROM:0263                 rst     28h
ROM:0263 ; ---------------------------------------------------------------------------
ROM:0264                 db 1Ch                  ; DrawMessage
ROM:0265                 db 86h
ROM:0266 ; ---------------------------------------------------------------------------
ROM:0266                 ret
ROM:0266 ; End of function sub_263
ROM:0266
ROM:0267
ROM:0267 ; =============== S U B R O U T I N E =======================================
ROM:0267
ROM:0267
ROM:0267 sub_267:
ROM:0267                 ld      a, (Credits)
ROM:026A                 cp      99h ; 'Ö'
ROM:026C                 rla
ROM:026D                 ld      (CoinLockout), a
ROM:0270                 rra
ROM:0271                 ret     nc
ROM:0272
ROM:0272 CoinDebounce:
ROM:0272                 ld      a, (InterruptEnable)
ROM:0275                 ld      b, a
ROM:0276                 rlc     b
ROM:0278                 ld      a, (CoinState)  ; Coin state shifted left 1
ROM:027B                 rla
ROM:027C                 and     0Fh
ROM:027E                 ld      (CoinState), a  ; Coin state shifted left 1
ROM:0281                 sub     0Ch
ROM:0283                 call    z, CoinsToCredits
ROM:0286                 rlc     b
ROM:0288                 ld      a, (byte_4E67)
ROM:028B                 rla
ROM:028C                 and     0Fh
ROM:028E                 ld      (byte_4E67), a
ROM:0291                 sub     0Ch
ROM:0293                 jp      nz, loc_29A
ROM:0296                 ld      hl, 4E69h
ROM:0299                 inc     (hl)
ROM:029A
ROM:029A loc_29A:
ROM:029A                 rlc     b
ROM:029C                 ld      a, (byte_4E68)
ROM:029F                 rla
ROM:02A0                 and     0Fh
ROM:02A2                 ld      (byte_4E68), a
ROM:02A5                 sub     0Ch
ROM:02A7                 ret     nz
ROM:02A8                 ld      hl, 4E69h
ROM:02AB                 inc     (hl)
ROM:02AC                 ret
ROM:02AC ; End of function sub_267
ROM:02AC
ROM:02AD
ROM:02AD ; =============== S U B R O U T I N E =======================================
ROM:02AD
ROM:02AD
ROM:02AD sub_2AD:
ROM:02AD                 ld      a, (byte_4E69)
ROM:02B0                 and     a
ROM:02B1                 ret     z
ROM:02B2                 ld      b, a
ROM:02B3                 ld      a, (byte_4E6A)
ROM:02B6                 ld      e, a
ROM:02B7                 cp      0
ROM:02B9                 jp      nz, loc_2C4
ROM:02BC                 ld      a, 1
ROM:02BE                 ld      (CoinCounter), a
ROM:02C1                 call    CoinsToCredits
ROM:02C4
ROM:02C4 loc_2C4:
ROM:02C4                 ld      a, e
ROM:02C5                 cp      8
ROM:02C7                 jp      nz, loc_2CE
ROM:02CA                 xor     a
ROM:02CB                 ld      (CoinCounter), a
ROM:02CE
ROM:02CE loc_2CE:
ROM:02CE                 inc     e
ROM:02CF                 ld      a, e
ROM:02D0                 ld      (byte_4E6A), a
ROM:02D3                 sub     10h
ROM:02D5                 ret     nz
ROM:02D6                 ld      (byte_4E6A), a
ROM:02D9                 dec     b
ROM:02DA                 ld      a, b
ROM:02DB                 ld      (byte_4E69), a
ROM:02DE                 ret
ROM:02DE ; End of function sub_2AD
ROM:02DE
ROM:02DF
ROM:02DF ; =============== S U B R O U T I N E =======================================
ROM:02DF
ROM:02DF
ROM:02DF CoinsToCredits:
ROM:02DF                 ld      a, (CoinPerCredit) ; coins needed per credit
ROM:02E2                 ld      hl, 4E6Ch       ; partial credits
ROM:02E5                 inc     (hl)            ; add a coin
ROM:02E6                 sub     (hl)            ; see if it is enough
ROM:02E7                 ret     nz              ; if not enough, return
ROM:02E8                 ld      (hl), a         ; clear partial credits
ROM:02E9                 ld      a, (CreditsPerCoin)
ROM:02EC                 ld      hl, 4E6Eh       ; credits
ROM:02EF                 add     a, (hl)         ; one more credit
ROM:02F0                 daa                     ; convert to binary coded decimal (BCD)
ROM:02F1                 jp      nc, loc_2F6     ; no overflow, no need to cap
ROM:02F4                 ld      a, 99h ; 'Ö'    ; capped 99 DECIMAL credits
ROM:02F6
ROM:02F6 loc_2F6:                                ; store back into credits
ROM:02F6                 ld      (hl), a
ROM:02F7                 ld      hl, 4E9Ch       ; channel 1 sound
ROM:02FA                 set     1, (hl)         ; play an effect
ROM:02FC                 ret
ROM:02FC ; End of function CoinsToCredits
ROM:02FC
ROM:02FD
ROM:02FD ; =============== S U B R O U T I N E =======================================
ROM:02FD
ROM:02FD
ROM:02FD sub_2FD:
ROM:02FD                 ld      hl, 4DCEh
ROM:0300                 inc     (hl)
ROM:0301                 ld      a, (hl)
ROM:0302                 and     0Fh
ROM:0304                 jr      nz, loc_325
ROM:0306                 ld      a, (hl)
ROM:0307                 rrca
ROM:0308                 rrca
ROM:0309                 rrca
ROM:030A                 rrca
ROM:030B                 ld      b, a
ROM:030C                 ld      a, (LEDState)
ROM:030F                 cpl
ROM:0310                 or      b
ROM:0311                 ld      c, a
ROM:0312                 ld      a, (Credits)
ROM:0315                 sub     1
ROM:0317                 jr      nc, loc_31B
ROM:0319                 xor     a
ROM:031A                 ld      c, a
ROM:031B
ROM:031B loc_31B:
ROM:031B                 jr      z, loc_31E
ROM:031D                 ld      a, c
ROM:031E
ROM:031E loc_31E:
ROM:031E                 ld      (Player2Lamp), a
ROM:0321                 ld      a, c
ROM:0322                 ld      (Player1Lamp), a
ROM:0325
ROM:0325 loc_325:
ROM:0325                 ld      ix, 43D8h
ROM:0329                 ld      iy, 43C5h
ROM:032D                 ld      a, (MainMode)
ROM:0330                 cp      3
ROM:0332                 jp      z, loc_344
ROM:0335                 ld      a, (MainSub2)
ROM:0338                 cp      2
ROM:033A                 jp      nc, loc_344
ROM:033D                 call    sub_369
ROM:0340                 call    sub_376
ROM:0343                 ret
ROM:0344 ; ---------------------------------------------------------------------------
ROM:0344
ROM:0344 loc_344:
ROM:0344                 ld      a, (PlayerNumber)
ROM:0347                 and     a
ROM:0348                 ld      a, (byte_4DCE)
ROM:034B                 jp      nz, loc_359
ROM:034E                 bit     4, a
ROM:0350                 call    z, sub_369
ROM:0353                 call    nz, sub_383
ROM:0356                 jp      loc_361
ROM:0359 ; ---------------------------------------------------------------------------
ROM:0359
ROM:0359 loc_359:
ROM:0359                 bit     4, a
ROM:035B                 call    z, sub_376
ROM:035E                 call    nz, sub_390
ROM:0361
ROM:0361 loc_361:
ROM:0361                 ld      a, (byte_4E70)
ROM:0364                 and     a
ROM:0365                 call    z, sub_390
ROM:0368                 ret
ROM:0368 ; End of function sub_2FD
ROM:0368
ROM:0369
ROM:0369 ; =============== S U B R O U T I N E =======================================
ROM:0369
ROM:0369
ROM:0369 sub_369:
ROM:0369                 ld      (ix+0), 50h ; 'P'
ROM:036D                 ld      (ix+1), 55h ; 'U'
ROM:0371                 ld      (ix+2), 31h ; '1'
ROM:0375                 ret
ROM:0375 ; End of function sub_369
ROM:0375
ROM:0376
ROM:0376 ; =============== S U B R O U T I N E =======================================
ROM:0376
ROM:0376
ROM:0376 sub_376:
ROM:0376                 ld      (iy+0), 50h ; 'P'
ROM:037A                 ld      (iy+1), 55h ; 'U'
ROM:037E                 ld      (iy+2), 32h ; '2'
ROM:0382                 ret
ROM:0382 ; End of function sub_376
ROM:0382
ROM:0383
ROM:0383 ; =============== S U B R O U T I N E =======================================
ROM:0383
ROM:0383
ROM:0383 sub_383:
ROM:0383                 ld      (ix+0), 40h ; '@'
ROM:0387                 ld      (ix+1), 40h ; '@'
ROM:038B                 ld      (ix+2), 40h ; '@'
ROM:038F                 ret
ROM:038F ; End of function sub_383
ROM:038F
ROM:0390
ROM:0390 ; =============== S U B R O U T I N E =======================================
ROM:0390
ROM:0390
ROM:0390 sub_390:
ROM:0390                 ld      (iy+0), 40h ; '@'
ROM:0394                 ld      (iy+1), 40h ; '@'
ROM:0398                 ld      (iy+2), 40h ; '@'
ROM:039C                 ret
ROM:039C ; End of function sub_390
ROM:039C
ROM:039D
ROM:039D ; =============== S U B R O U T I N E =======================================
ROM:039D
ROM:039D
ROM:039D DrawBigPacMan:
ROM:039D                 ld      a, (CutSceneState1) ; if less than 5, normal PacMan
ROM:03A0                 sub     5
ROM:03A2                 ret     c
ROM:03A3                 ld      hl, (PacManYPos)
ROM:03A6                 ld      b, 8
ROM:03A8                 ld      c, 10h
ROM:03AA                 ld      a, l
ROM:03AB                 ld      (OrangeYPos), a
ROM:03AE                 ld      (FruitPosition), a
ROM:03B1                 sub     c
ROM:03B2                 ld      (PinkYPos), a
ROM:03B5                 ld      (BlueYPos), a
ROM:03B8                 ld      a, h
ROM:03B9                 add     a, b
ROM:03BA                 ld      (PinkXPos), a
ROM:03BD                 ld      (OrangeXPos), a
ROM:03C0                 sub     c
ROM:03C1                 ld      (BlueXPos), a
ROM:03C4                 ld      (FruitPosition+1), a
ROM:03C7                 ret
ROM:03C7 ; End of function DrawBigPacMan
ROM:03C7
ROM:03C8
ROM:03C8 ; =============== S U B R O U T I N E =======================================
ROM:03C8
ROM:03C8
ROM:03C8 sub_3C8:
ROM:03C8                 ld      a, (MainMode)   ; game mode
ROM:03CB                 rst     20h             ; jump to table for Mode
ROM:03CB ; End of function sub_3C8
ROM:03CB
ROM:03CB ; ---------------------------------------------------------------------------
ROM:03CC                 dw 3D4h                 ; 4E00 <- 0
ROM:03CE                 dw 3FEh                 ; 4E00 <- 1 ALL ATTRACT MODES
ROM:03D0                 dw 5E5h                 ; 4E00 <- 2 PLAYER 1 OR 2 SCREEN
ROM:03D2                 dw 6BEh                 ; 4E00 <- 3 Player 1 or 2 playing
ROM:03D4 ; ---------------------------------------------------------------------------
ROM:03D4 This gets called on MainMode = 0
ROM:03D4
ROM:03D4 Mode0:
ROM:03D4                 ld      a, (MainSub0)
ROM:03D7                 rst     20h
ROM:03D7 ; ---------------------------------------------------------------------------
ROM:03D8                 dw 3DCh                 ; TODO - decode this table, some of it is code
ROM:03DA                 dw 0Ch                  ; return
ROM:03DC ; ---------------------------------------------------------------------------
ROM:03DC                 rst     28h
ROM:03DC ; ---------------------------------------------------------------------------
ROM:03DD                 db 0
ROM:03DE                 db 0
ROM:03DF ; ---------------------------------------------------------------------------
ROM:03DF                 rst     28h
ROM:03DF ; ---------------------------------------------------------------------------
ROM:03E0                 db 6
ROM:03E1                 db 0
ROM:03E2 ; ---------------------------------------------------------------------------
ROM:03E2                 rst     28h
ROM:03E2 ; ---------------------------------------------------------------------------
ROM:03E3                 db 1                    ; ColorMaze, 0
ROM:03E4                 db 0
ROM:03E5 ; ---------------------------------------------------------------------------
ROM:03E5                 rst     28h
ROM:03E5 ; ---------------------------------------------------------------------------
ROM:03E6                 db 14h
ROM:03E7                 db 0
ROM:03E8 ; ---------------------------------------------------------------------------
ROM:03E8                 rst     28h
ROM:03E8 ; ---------------------------------------------------------------------------
ROM:03E9                 db 18h
ROM:03EA                 db 0
ROM:03EB ; ---------------------------------------------------------------------------
ROM:03EB                 rst     28h
ROM:03EB ; ---------------------------------------------------------------------------
ROM:03EC                 db 4
ROM:03ED                 db 0
ROM:03EE ; ---------------------------------------------------------------------------
ROM:03EE                 rst     28h
ROM:03EE ; ---------------------------------------------------------------------------
ROM:03EF                 db 1Eh                  ; ClearPositions
ROM:03F0                 db 0
ROM:03F1 ; ---------------------------------------------------------------------------
ROM:03F1                 rst     28h
ROM:03F1 ; ---------------------------------------------------------------------------
ROM:03F2                 db 7                    ; StartDemo
ROM:03F3                 db 0
ROM:03F4 ; ---------------------------------------------------------------------------
ROM:03F4                 ld      hl, 4E01h
ROM:03F7                 inc     (hl)
ROM:03F8                 ld      hl, 5001h       ; enable sound
ROM:03FB                 ld      (hl), 1
ROM:03FD                 ret
ROM:03FE ; ---------------------------------------------------------------------------
ROM:03FE ;=============
ROM:03FE ;MainMode 1 -
ROM:03FE ; check for credits, if found,
ROM:03FE ; end level in demo, and set to main mode 2,
ROM:03FE ; sub function 0
ROM:03FE ;=============
ROM:03FE
ROM:03FE Mode1:                                  ; write credits on screen
ROM:03FE                 call    DrawCredits
ROM:0401                 ld      a, (Credits)    ; get credits
ROM:0404                 and     a               ; test zero
ROM:0405                 jr      z, NoCredits    ; no credits->0x413
ROM:0407                 xor     a               ; zero value to mark end of level
ROM:0408                 ld      (LevelComplete), a ; level complete
ROM:040B                 ld      (MainSub1), a   ; store function 0 in MainSub1
ROM:040E                 ld      hl, 4E00h       ; start game mode
ROM:0411                 inc     (hl)            ; Set MainMode to 2
ROM:0412                 ret                     ; and return
ROM:0413 ; ---------------------------------------------------------------------------
ROM:0413
ROM:0413 NoCredits:
ROM:0413                 ld      a, (MainSub1)
ROM:0416                 rst     20h
ROM:0416 ; ---------------------------------------------------------------------------
ROM:0417 ;===================
ROM:0417 ; address table based off 4E02
ROM:0417 ; draw the attract screen
ROM:0417 ;===================
ROM:0417                 dw 45Fh                 ; (4e02)=0
ROM:0419                 dw 0Ch                  ; (4e02)=1 return
ROM:041B                 dw 471h                 ; ...
ROM:041D                 dw 0Ch                  ; TODO - this table needs vetted
ROM:041F                 dw 47Fh
ROM:0421                 dw 0Ch
ROM:0423                 dw 485h
ROM:0425                 dw 0Ch
ROM:0427                 dw 48Bh
ROM:0429                 dw 0Ch
ROM:042B                 dw 499h
ROM:042D                 dw 0Ch
ROM:042F                 dw 49Fh
ROM:0431                 dw 0Ch
ROM:0433                 dw 4A5h
ROM:0435                 dw 0Ch                  ; return
ROM:0437                 dw 4B3h
ROM:0439                 dw 0Ch
ROM:043B                 dw 4B9h
ROM:043D                 dw 0Ch
ROM:043F                 dw 4BFh
ROM:0441                 dw 0Ch
ROM:0443                 dw 4CDh
ROM:0445                 dw 0Ch
ROM:0447                 dw 4D3h
ROM:0449                 dw 0Ch
ROM:044B                 dw 4D8h
ROM:044D                 dw 0Ch
ROM:044F                 dw 4E0h
ROM:0451                 dw 0Ch
ROM:0453                 dw 51Ch
ROM:0455                 dw 54Bh
ROM:0457                 dw 556h
ROM:0459                 dw 561h
ROM:045B                 dw 56Ch
ROM:045D                 dw 57Ch
ROM:045F ; ---------------------------------------------------------------------------
ROM:045F                 rst     28h
ROM:045F ; ---------------------------------------------------------------------------
ROM:0460                 db 0                    ; ClearVideo
ROM:0461                 db 1
ROM:0462 ; ---------------------------------------------------------------------------
ROM:0462                 rst     28h
ROM:0462 ; ---------------------------------------------------------------------------
ROM:0463                 db 1                    ; ColorMaze
ROM:0464                 db 0
ROM:0465 ; ---------------------------------------------------------------------------
ROM:0465                 rst     28h
ROM:0465 ; ---------------------------------------------------------------------------
ROM:0466                 db 4
ROM:0467                 db 0
ROM:0468 ; ---------------------------------------------------------------------------
ROM:0468                 rst     28h
ROM:0468 ; ---------------------------------------------------------------------------
ROM:0469                 db 1Eh                  ; ClearPositions
ROM:046A                 db 0
ROM:046B ; ---------------------------------------------------------------------------
ROM:046B                 ld      c, 0Ch
ROM:046D                 call    sub_585
ROM:0470                 ret
ROM:0471
ROM:0471 ; =============== S U B R O U T I N E =======================================
ROM:0471
ROM:0471
ROM:0471 sub_471:
ROM:0471                 ld      hl, 4304h
ROM:0474                 ld      a, 1
ROM:0476                 call    sub_5BF
ROM:0479                 ld      c, 0Ch
ROM:047B                 call    sub_585
ROM:047E                 ret
ROM:047E ; End of function sub_471
ROM:047E
ROM:047F
ROM:047F ; =============== S U B R O U T I N E =======================================
ROM:047F
ROM:047F
ROM:047F sub_47F:
ROM:047F                 ld      c, 14h
ROM:0481                 call    sub_593
ROM:0484                 ret
ROM:0484 ; End of function sub_47F
ROM:0484
ROM:0485
ROM:0485 ; =============== S U B R O U T I N E =======================================
ROM:0485
ROM:0485
ROM:0485 sub_485:
ROM:0485                 ld      c, 0Dh
ROM:0487                 call    sub_593
ROM:048A                 ret
ROM:048A ; End of function sub_485
ROM:048A
ROM:048B
ROM:048B ; =============== S U B R O U T I N E =======================================
ROM:048B
ROM:048B
ROM:048B sub_48B:
ROM:048B                 ld      hl, 4307h
ROM:048E                 ld      a, 3
ROM:0490                 call    sub_5BF
ROM:0493                 ld      c, 0Ch
ROM:0495                 call    sub_585
ROM:0498                 ret
ROM:0498 ; End of function sub_48B
ROM:0498
ROM:0499
ROM:0499 ; =============== S U B R O U T I N E =======================================
ROM:0499
ROM:0499
ROM:0499 sub_499:
ROM:0499                 ld      c, 16h
ROM:049B                 call    sub_593
ROM:049E                 ret
ROM:049E ; End of function sub_499
ROM:049E
ROM:049F
ROM:049F ; =============== S U B R O U T I N E =======================================
ROM:049F
ROM:049F
ROM:049F sub_49F:
ROM:049F                 ld      c, 0Fh
ROM:04A1                 call    sub_593
ROM:04A4                 ret
ROM:04A4 ; End of function sub_49F
ROM:04A4
ROM:04A5
ROM:04A5 ; =============== S U B R O U T I N E =======================================
ROM:04A5
ROM:04A5
ROM:04A5 sub_4A5:
ROM:04A5                 ld      hl, 430Ah
ROM:04A8                 ld      a, 5
ROM:04AA                 call    sub_5BF
ROM:04AD                 ld      c, 0Ch
ROM:04AF                 call    sub_585
ROM:04B2                 ret
ROM:04B2 ; End of function sub_4A5
ROM:04B2
ROM:04B3
ROM:04B3 ; =============== S U B R O U T I N E =======================================
ROM:04B3
ROM:04B3
ROM:04B3 sub_4B3:
ROM:04B3                 ld      c, 33h ; '3'
ROM:04B5                 call    sub_593
ROM:04B8                 ret
ROM:04B8 ; End of function sub_4B3
ROM:04B8
ROM:04B9
ROM:04B9 ; =============== S U B R O U T I N E =======================================
ROM:04B9
ROM:04B9
ROM:04B9 sub_4B9:
ROM:04B9                 ld      c, 2Fh ; '/'
ROM:04BB                 call    sub_593
ROM:04BE                 ret
ROM:04BE ; End of function sub_4B9
ROM:04BE
ROM:04BF
ROM:04BF ; =============== S U B R O U T I N E =======================================
ROM:04BF
ROM:04BF
ROM:04BF sub_4BF:
ROM:04BF                 ld      hl, 430Dh
ROM:04C2                 ld      a, 7
ROM:04C4                 call    sub_5BF
ROM:04C7                 ld      c, 0Ch
ROM:04C9                 call    sub_585
ROM:04CC                 ret
ROM:04CC ; End of function sub_4BF
ROM:04CC
ROM:04CD
ROM:04CD ; =============== S U B R O U T I N E =======================================
ROM:04CD
ROM:04CD
ROM:04CD sub_4CD:
ROM:04CD                 ld      c, 35h ; '5'
ROM:04CF                 call    sub_593
ROM:04D2                 ret
ROM:04D2 ; End of function sub_4CD
ROM:04D2
ROM:04D3
ROM:04D3 ; =============== S U B R O U T I N E =======================================
ROM:04D3
ROM:04D3
ROM:04D3 sub_4D3:
ROM:04D3
ROM:04D3 ; FUNCTION CHUNK AT ROM:0580 SIZE 00000005 BYTES
ROM:04D3
ROM:04D3                 ld      c, 31h ; '1'
ROM:04D5                 jp      loc_580
ROM:04D5 ; End of function sub_4D3
ROM:04D5
ROM:04D8 ; ---------------------------------------------------------------------------
ROM:04D8                 rst     28h
ROM:04D8 ; ---------------------------------------------------------------------------
ROM:04D9                 db 1Ch                  ; DrawMessage
ROM:04DA                 db 11h
ROM:04DB ; ---------------------------------------------------------------------------
ROM:04DB                 ld      c, 12h
ROM:04DD                 jp      sub_585
ROM:04E0 ; ---------------------------------------------------------------------------
ROM:04E0                 ld      c, 13h
ROM:04E2                 call    sub_585
ROM:04E5                 call    sub_879
ROM:04E8                 dec     (hl)
ROM:04E9                 rst     28h
ROM:04E9 ; ---------------------------------------------------------------------------
ROM:04EA                 db 11h                  ; ZeroGameState
ROM:04EB                 db 0
ROM:04EC ; ---------------------------------------------------------------------------
ROM:04EC                 rst     28h
ROM:04EC ; ---------------------------------------------------------------------------
ROM:04ED                 db 5
ROM:04EE                 db 1
ROM:04EF ; ---------------------------------------------------------------------------
ROM:04EF                 rst     28h
ROM:04EF ; ---------------------------------------------------------------------------
ROM:04F0                 db 10h
ROM:04F1                 db 14h
ROM:04F2 ; ---------------------------------------------------------------------------
ROM:04F2                 rst     28h
ROM:04F2 ; ---------------------------------------------------------------------------
ROM:04F3                 db 4
ROM:04F4                 db 1
ROM:04F5 ; ---------------------------------------------------------------------------
ROM:04F5                 ld      a, 1
ROM:04F7                 ld      (LivesNumber), a
ROM:04FA                 xor     a
ROM:04FB                 ld      (byte_4E70), a
ROM:04FE                 ld      (LivesDisplay), a
ROM:0501                 ld      hl, 4332h
ROM:0504                 ld      (hl), 14h
ROM:0506
ROM:0506 ; =============== S U B R O U T I N E =======================================
ROM:0506
ROM:0506
ROM:0506 sub_506:
ROM:0506                 ld      a, 0FCh ; 'n'
ROM:0508                 ld      de, 20h ; ' '
ROM:050B                 ld      b, 1Ch
ROM:050D                 ld      ix, 4040h
ROM:0511
ROM:0511 loc_511:
ROM:0511                 ld      (ix+11h), a
ROM:0514                 ld      (ix+13h), a
ROM:0517                 add     ix, de
ROM:0519                 djnz    loc_511
ROM:051B                 ret
ROM:051B ; End of function sub_506
ROM:051B
ROM:051C check for moving through a tunnel
ROM:051C
ROM:051C ; =============== S U B R O U T I N E =======================================
ROM:051C
ROM:051C
ROM:051C sub_51C:
ROM:051C                 ld      hl, 4DA0h
ROM:051F                 ld      b, 21h ; '!'
ROM:0521                 ld      a, (PacPosition+1)
ROM:0524
ROM:0524 loc_524:
ROM:0524                 sub     b
ROM:0525                 jr      nz, loc_52C
ROM:0527                 ld      (hl), 1
ROM:0529                 jp      loc_58E
ROM:052C ; ---------------------------------------------------------------------------
ROM:052C
ROM:052C loc_52C:
ROM:052C                 call    sub_1017
ROM:052F                 call    sub_1017
ROM:0532                 call    IncAnimFrame
ROM:0535                 call    sub_C0D
ROM:0538                 call    sub_BD6
ROM:053B                 call    sub_5A5
ROM:053E                 call    sub_1EFE
ROM:0541                 call    sub_1F25
ROM:0544                 call    sub_1F4C
ROM:0547                 call    sub_1F73
ROM:054A                 ret
ROM:054A ; End of function sub_51C
ROM:054A
ROM:054B
ROM:054B ; =============== S U B R O U T I N E =======================================
ROM:054B
ROM:054B
ROM:054B sub_54B:
ROM:054B                 ld      hl, 4DA1h
ROM:054E                 ld      b, 20h ; ' '
ROM:0550                 ld      a, (word_4D31+1)
ROM:0553                 jp      loc_524
ROM:0553 ; End of function sub_54B
ROM:0553
ROM:0556
ROM:0556 ; =============== S U B R O U T I N E =======================================
ROM:0556
ROM:0556
ROM:0556 sub_556:
ROM:0556                 ld      hl, 4DA2h
ROM:0559                 ld      b, 22h ; '"'
ROM:055B                 ld      a, (word_4D31+1)
ROM:055E                 jp      loc_524
ROM:055E ; End of function sub_556
ROM:055E
ROM:0561
ROM:0561 ; =============== S U B R O U T I N E =======================================
ROM:0561
ROM:0561
ROM:0561 sub_561:
ROM:0561                 ld      hl, 4DA3h
ROM:0564                 ld      b, 24h ; '$'
ROM:0566                 ld      a, (word_4D31+1)
ROM:0569                 jp      loc_524
ROM:0569 ; End of function sub_561
ROM:0569
ROM:056C
ROM:056C ; =============== S U B R O U T I N E =======================================
ROM:056C
ROM:056C
ROM:056C sub_56C:
ROM:056C                 ld      a, (byte_4DD0)
ROM:056F                 ld      b, a
ROM:0570                 ld      a, (byte_4DD1)
ROM:0573                 add     a, b
ROM:0574                 cp      6
ROM:0576                 jp      z, loc_58E
ROM:0579                 jp      loc_52C
ROM:0579 ; End of function sub_56C
ROM:0579
ROM:057C
ROM:057C ; =============== S U B R O U T I N E =======================================
ROM:057C
ROM:057C
ROM:057C sub_57C:
ROM:057C                 call    Mode3
ROM:057F                 ret
ROM:057F ; End of function sub_57C
ROM:057F
ROM:0580 ; ---------------------------------------------------------------------------
ROM:0580 ; START OF FUNCTION CHUNK FOR sub_4D3
ROM:0580
ROM:0580 loc_580:
ROM:0580                 ld      a, (GhostNames)
ROM:0583                 add     a, c
ROM:0584                 ld      c, a
ROM:0584 ; END OF FUNCTION CHUNK FOR sub_4D3
ROM:0585
ROM:0585 ; =============== S U B R O U T I N E =======================================
ROM:0585
ROM:0585
ROM:0585 sub_585:
ROM:0585                 ld      b, 1Ch
ROM:0587                 call    ContinueTask
ROM:058A                 rst     30h             ; store IRQ task
ROM:058A ; ---------------------------------------------------------------------------
ROM:058B                 db 4Ah
ROM:058C                 db 2
ROM:058D                 db 0
ROM:058E ; ---------------------------------------------------------------------------
ROM:058E
ROM:058E loc_58E:
ROM:058E                 ld      hl, 4E02h
ROM:0591                 inc     (hl)
ROM:0592                 ret
ROM:0592 ; End of function sub_585
ROM:0592
ROM:0593
ROM:0593 ; =============== S U B R O U T I N E =======================================
ROM:0593
ROM:0593
ROM:0593 sub_593:
ROM:0593                 ld      a, (GhostNames)
ROM:0596                 add     a, c
ROM:0597                 ld      c, a
ROM:0598                 ld      b, 1Ch
ROM:059A                 call    ContinueTask
ROM:059D                 rst     30h             ; store IRQ task
ROM:059D ; End of function sub_593
ROM:059D
ROM:059D ; ---------------------------------------------------------------------------
ROM:059E                 db 45h
ROM:059F                 db 2
ROM:05A0                 db 0
ROM:05A1 ; ---------------------------------------------------------------------------
ROM:05A1                 call    loc_58E
ROM:05A4                 ret
ROM:05A5
ROM:05A5 ; =============== S U B R O U T I N E =======================================
ROM:05A5
ROM:05A5
ROM:05A5 sub_5A5:
ROM:05A5                 ld      a, (byte_4DB5)
ROM:05A8                 and     a
ROM:05A9                 ret     z
ROM:05AA                 xor     a
ROM:05AB                 ld      (byte_4DB5), a
ROM:05AE                 ld      a, (byte_4D30)
ROM:05B1                 xor     2
ROM:05B3                 ld      (byte_4D3C), a
ROM:05B6                 ld      b, a
ROM:05B7                 ld      hl, 32FFh
ROM:05BA                 rst     18h
ROM:05BB                 ld      (word_4D26), hl
ROM:05BE                 ret
ROM:05BE ; End of function sub_5A5
ROM:05BE
ROM:05BF
ROM:05BF ; =============== S U B R O U T I N E =======================================
ROM:05BF
ROM:05BF
ROM:05BF sub_5BF:
ROM:05BF                 ld      (hl), 0B1h ; '¦'
ROM:05C1                 inc     l
ROM:05C2                 ld      (hl), 0B3h ; '¦'
ROM:05C4                 inc     l
ROM:05C5                 ld      (hl), 0B5h ; '¦'
ROM:05C7                 ld      bc, 1Eh
ROM:05CA                 add     hl, bc
ROM:05CB                 ld      (hl), 0B0h ; '¦'
ROM:05CD                 inc     l
ROM:05CE                 ld      (hl), 0B2h ; '¦'
ROM:05D0                 inc     l
ROM:05D1                 ld      (hl), 0B4h ; '¦'
ROM:05D3                 ld      de, 400h
ROM:05D6                 add     hl, de
ROM:05D7                 ld      (hl), a
ROM:05D8                 dec     l
ROM:05D9                 ld      (hl), a
ROM:05DA                 dec     l
ROM:05DB                 ld      (hl), a
ROM:05DC                 and     a
ROM:05DD                 sbc     hl, bc
ROM:05DF                 ld      (hl), a
ROM:05E0                 dec     l
ROM:05E1                 ld      (hl), a
ROM:05E2                 dec     l
ROM:05E3                 ld      (hl), a
ROM:05E4                 ret
ROM:05E4 ; End of function sub_5BF
ROM:05E4
ROM:05E5 ; ---------------------------------------------------------------------------
ROM:05E5 ;=============
ROM:05E5 ;MainMode 2 -
ROM:05E5 ;TODO
ROM:05E5 ;Player 1 or 2 screen
ROM:05E5 ;=============
ROM:05E5
ROM:05E5 Mode2:                                  ; get subroutine number
ROM:05E5                 ld      a, (MainSub2)
ROM:05E8                 rst     20h             ; and run it
ROM:05E8 ; ---------------------------------------------------------------------------
ROM:05E9                 dw 5F3h                 ; TODO - is this right?
ROM:05EB                 dw 61Bh
ROM:05ED                 dw 674h
ROM:05EF                 dw 0Ch                  ; return
ROM:05F1                 dw 6A8h                 ; DrawLives
ROM:05F3 ; ---------------------------------------------------------------------------
ROM:05F3                 call    DrawCredits
ROM:05F6                 rst     28h
ROM:05F6 ; ---------------------------------------------------------------------------
ROM:05F7                 db 0                    ; ClearVideo
ROM:05F8                 db 1
ROM:05F9 ; ---------------------------------------------------------------------------
ROM:05F9                 rst     28h
ROM:05F9 ; ---------------------------------------------------------------------------
ROM:05FA                 db 1                    ; ColorMaze
ROM:05FB                 db 0
ROM:05FC ; ---------------------------------------------------------------------------
ROM:05FC                 rst     28h
ROM:05FC ; ---------------------------------------------------------------------------
ROM:05FD                 db 1Ch                  ; DrawMessage
ROM:05FE                 db 7
ROM:05FF ; ---------------------------------------------------------------------------
ROM:05FF                 rst     28h
ROM:05FF ; ---------------------------------------------------------------------------
ROM:0600                 db 1Ch                  ; DrawMessage
ROM:0601                 db 0Bh
ROM:0602 ; ---------------------------------------------------------------------------
ROM:0602                 rst     28h
ROM:0602 ; ---------------------------------------------------------------------------
ROM:0603                 db 1Eh                  ; ClearPositions
ROM:0604                 db 0
ROM:0605 ; ---------------------------------------------------------------------------
ROM:0605                 ld      hl, 4E03h
ROM:0608                 inc     (hl)
ROM:0609                 ld      a, 1
ROM:060B                 ld      (LEDState), a
ROM:060E                 ld      a, (BonusLifeVal)
ROM:0611                 cp      0FFh
ROM:0613                 ret     z
ROM:0614                 rst     28h
ROM:0614 ; ---------------------------------------------------------------------------
ROM:0615                 db 1Ch                  ; DrawMessage
ROM:0616                 db 0Ah
ROM:0617 ; ---------------------------------------------------------------------------
ROM:0617                 rst     28h
ROM:0617 ; ---------------------------------------------------------------------------
ROM:0618                 db 1Fh                  ; ShowBonusScore
ROM:0619                 db 0
ROM:061A ; ---------------------------------------------------------------------------
ROM:061A                 ret
ROM:061B
ROM:061B ; =============== S U B R O U T I N E =======================================
ROM:061B
ROM:061B
ROM:061B sub_61B:
ROM:061B                 call    DrawCredits
ROM:061E                 ld      a, (Credits)
ROM:0621                 cp      1
ROM:0623                 ld      b, 9
ROM:0625                 jr      nz, loc_629
ROM:0627                 ld      b, 8            ; "1 PLAYER ONLY" message
ROM:0629
ROM:0629 loc_629:
ROM:0629                 call    DrawMessage
ROM:062C                 ld      a, (Credits)
ROM:062F                 cp      1
ROM:0631                 ld      a, (Voice1Acc)
ROM:0634                 jr      z, loc_642
ROM:0636                 bit     6, a
ROM:0638                 jr      nz, loc_642
ROM:063A                 ld      a, 1
ROM:063C                 ld      (byte_4E70), a
ROM:063F                 jp      loc_649
ROM:0642 ; ---------------------------------------------------------------------------
ROM:0642
ROM:0642 loc_642:
ROM:0642                 bit     5, a
ROM:0644                 ret     nz
ROM:0645                 xor     a
ROM:0646                 ld      (byte_4E70), a
ROM:0649
ROM:0649 loc_649:
ROM:0649                 ld      a, (CoinPerCredit)
ROM:064C                 and     a
ROM:064D                 jr      z, loc_664
ROM:064F                 ld      a, (byte_4E70)
ROM:0652                 and     a
ROM:0653                 ld      a, (Credits)
ROM:0656                 jr      z, loc_65B
ROM:0658                 add     a, 99h ; 'Ö'
ROM:065A                 daa
ROM:065B
ROM:065B loc_65B:
ROM:065B                 add     a, 99h ; 'Ö'
ROM:065D                 daa
ROM:065E                 ld      (Credits), a
ROM:0661                 call    DrawCredits
ROM:0664
ROM:0664 loc_664:
ROM:0664                 ld      hl, 4E03h
ROM:0667                 inc     (hl)
ROM:0668                 xor     a
ROM:0669                 ld      (LEDState), a
ROM:066C                 inc     a
ROM:066D                 ld      (CH1_W_NUM), a
ROM:0670                 ld      (CH2_W_NUM), a
ROM:0673                 ret
ROM:0673 ; End of function sub_61B
ROM:0673
ROM:0674 ; ---------------------------------------------------------------------------
ROM:0674                 rst     28h
ROM:0674 ; ---------------------------------------------------------------------------
ROM:0675                 db 0                    ; ClearVideo
ROM:0676                 db 1
ROM:0677 ; ---------------------------------------------------------------------------
ROM:0677                 rst     28h
ROM:0677 ; ---------------------------------------------------------------------------
ROM:0678                 db 1
ROM:0679                 db 1
ROM:067A ; ---------------------------------------------------------------------------
ROM:067A                 rst     28h
ROM:067A ; ---------------------------------------------------------------------------
ROM:067B                 db 2
ROM:067C                 db 0
ROM:067D ; ---------------------------------------------------------------------------
ROM:067D                 rst     28h
ROM:067D ; ---------------------------------------------------------------------------
ROM:067E                 db 12h
ROM:067F                 db 0
ROM:0680 ; ---------------------------------------------------------------------------
ROM:0680                 rst     28h
ROM:0680 ; ---------------------------------------------------------------------------
ROM:0681                 db 3
ROM:0682                 db 0
ROM:0683 ; ---------------------------------------------------------------------------
ROM:0683                 rst     28h
ROM:0683 ; ---------------------------------------------------------------------------
ROM:0684                 db 1Ch
ROM:0685                 db 3
ROM:0686 ; ---------------------------------------------------------------------------
ROM:0686                 rst     28h
ROM:0686 ; ---------------------------------------------------------------------------
ROM:0687                 db 1Ch
ROM:0688                 db 6
ROM:0689 ; ---------------------------------------------------------------------------
ROM:0689                 rst     28h
ROM:0689 ; ---------------------------------------------------------------------------
ROM:068A                 db 18h
ROM:068B                 db 0
ROM:068C ; ---------------------------------------------------------------------------
ROM:068C                 rst     28h
ROM:068C ; ---------------------------------------------------------------------------
ROM:068D                 db 1Bh
ROM:068E                 db 0
ROM:068F ; ---------------------------------------------------------------------------
ROM:068F                 xor     a
ROM:0690                 ld      (LevelNumber), a
ROM:0693                 ld      a, (LivesPerGame)
ROM:0696                 ld      (LivesNumber), a
ROM:0699                 ld      (LivesDisplay), a
ROM:069C                 rst     28h
ROM:069C ; ---------------------------------------------------------------------------
ROM:069D                 db 1Ah
ROM:069E                 db 0
ROM:069F ; ---------------------------------------------------------------------------
ROM:069F                 rst     30h             ; store IRQ task
ROM:069F ; ---------------------------------------------------------------------------
ROM:06A0                 db 57h
ROM:06A1                 db 1
ROM:06A2                 db 0
ROM:06A3 ; ---------------------------------------------------------------------------
ROM:06A3                 ld      hl, 4E03h
ROM:06A6                 inc     (hl)
ROM:06A7                 ret
ROM:06A8 ;Draw lives on screen
ROM:06A8
ROM:06A8 ; =============== S U B R O U T I N E =======================================
ROM:06A8
ROM:06A8
ROM:06A8 DrawLives:
ROM:06A8                 ld      hl, 4E15h       ; Get number of lives to display
ROM:06AB                 dec     (hl)            ; remove one
ROM:06AC                 call    sub_2B6A
ROM:06AF                 xor     a               ; zero a
ROM:06B0                 ld      (MainSub2), a   ; store as subroutine number for Modes 1 and 2
ROM:06B3                 ld      (MainSub1), a
ROM:06B6                 ld      (LevelComplete), a
ROM:06B9                 ld      hl, 4E00h       ; increment game mode
ROM:06BC                 inc     (hl)
ROM:06BD                 ret
ROM:06BD ; End of function DrawLives
ROM:06BD
ROM:06BE ;=============
ROM:06BE ;MainMode 3 -
ROM:06BE ;TODO
ROM:06BE ;
ROM:06BE ;=============
ROM:06BE
ROM:06BE ; =============== S U B R O U T I N E =======================================
ROM:06BE
ROM:06BE
ROM:06BE Mode3:
ROM:06BE                 ld      a, (LevelComplete)
ROM:06C1                 rst     20h
ROM:06C1 ; ---------------------------------------------------------------------------
ROM:06C2                 dw 879h
ROM:06C4                 dw 899h
ROM:06C6                 dw 0Ch                  ; return
ROM:06C8                 dw 8CDh
ROM:06CA                 dw 90Dh
ROM:06CC                 dw 0Ch
ROM:06CE                 dw 940h
ROM:06D0                 dw 0Ch
ROM:06D2                 dw 972h
ROM:06D4                 dw 988h
ROM:06D6                 dw 0Ch
ROM:06D8                 dw 9D2h
ROM:06DA                 dw 9D8h
ROM:06DC                 dw 0Ch
ROM:06DE                 dw 9E8h
ROM:06E0                 dw 0Ch
ROM:06E2                 dw 9FEh
ROM:06E4                 dw 0Ch
ROM:06E6                 dw 0A02h
ROM:06E8                 dw 0Ch
ROM:06EA                 dw 0A04h
ROM:06EC                 dw 0Ch
ROM:06EE                 dw 0A06h
ROM:06F0                 dw 0Ch
ROM:06F2                 dw 0A08h
ROM:06F4                 dw 0Ch
ROM:06F6                 dw 0A0Ah
ROM:06F8                 dw 0Ch
ROM:06FA                 dw 0A0Ch
ROM:06FC                 dw 0Ch
ROM:06FE                 dw 0A0Eh
ROM:0700                 dw 0Ch
ROM:0702                 dw 0A2Ch
ROM:0704                 dw 0Ch
ROM:0706                 dw 0A7Ch
ROM:0708                 dw 0AA0h
ROM:070A                 dw 0Ch
ROM:070C                 dw 0AA3h
ROM:070E ; ---------------------------------------------------------------------------
ROM:070E
ROM:070E PrepareDifficulty:
ROM:070E                 ld      a, b
ROM:070F                 and     a
ROM:0710                 jr      nz, loc_716
ROM:0712                 ld      hl, (DifficultyPtr)
ROM:0715                 ld      a, (hl)
ROM:0716
ROM:0716 loc_716:
ROM:0716                 ld      ix, 796h
ROM:071A                 ld      b, a
ROM:071B                 add     a, a
ROM:071C                 add     a, a
ROM:071D                 add     a, b
ROM:071E                 add     a, b
ROM:071F                 ld      e, a
ROM:0720                 ld      d, 0
ROM:0722                 add     ix, de
ROM:0724                 ld      a, (ix+0)
ROM:0727                 add     a, a
ROM:0728                 ld      b, a
ROM:0729                 add     a, a
ROM:072A                 add     a, a
ROM:072B                 ld      c, a
ROM:072C                 add     a, a
ROM:072D                 add     a, a
ROM:072E                 add     a, c
ROM:072F                 add     a, b
ROM:0730                 ld      e, a
ROM:0731                 ld      d, 0
ROM:0733                 ld      hl, 330Fh
ROM:0736                 add     hl, de
ROM:0737                 call    sub_814
ROM:073A                 ld      a, (ix+1)
ROM:073D                 ld      (byte_4DB0), a
ROM:0740                 ld      a, (ix+2)
ROM:0743                 ld      b, a
ROM:0744                 add     a, a
ROM:0745                 add     a, b
ROM:0746                 ld      e, a
ROM:0747                 ld      d, 0
ROM:0749                 ld      hl, 843h        ; Hard/Easy data check
ROM:074C                 add     hl, de
ROM:074D                 call    sub_83A
ROM:0750                 ld      a, (ix+3)
ROM:0753                 add     a, a
ROM:0754                 ld      e, a
ROM:0755                 ld      d, 0
ROM:0757                 ld      iy, 84Fh
ROM:075B                 add     iy, de
ROM:075D                 ld      l, (iy+0)
ROM:0760                 ld      h, (iy+1)
ROM:0763                 ld      (PillLimit1), hl
ROM:0766                 ld      a, (ix+4)
ROM:0769                 add     a, a
ROM:076A                 ld      e, a
ROM:076B                 ld      d, 0
ROM:076D                 ld      iy, 861h
ROM:0771                 add     iy, de
ROM:0773                 ld      l, (iy+0)
ROM:0776                 ld      h, (iy+1)
ROM:0779                 ld      (GhostTime2), hl
ROM:077C                 ld      a, (ix+5)
ROM:077F                 add     a, a
ROM:0780                 ld      e, a
ROM:0781                 ld      d, 0
ROM:0783                 ld      iy, 873h
ROM:0787                 add     iy, de
ROM:0789                 ld      l, (iy+0)
ROM:078C                 ld      h, (iy+1)
ROM:078F                 ld      (word_4D95), hl
ROM:0792                 call    UpdateFruit
ROM:0795                 ret
ROM:0795 ; End of function Mode3
ROM:0795
ROM:0795 ; ---------------------------------------------------------------------------
ROM:0796 ;       -- difficulty related table
ROM:0796 ;    each entry is 6 bytes
ROM:0796 ;       byte 0: (0..6) movement bit patterns and orientation changes (table at 330F)
ROM:0796 ;       byte 1: (00, 01, 02) stored at 4DB0 - seems to be unused
ROM:0796 ;       byte 2: (0..3) ghost counter table to exit home (table at 0843)
ROM:0796 ;       byte 3: (0..7) remaining number of pills to set difficulty flags (table at 084F)
ROM:0796 ;       byte 4: (0..8) ghost time to stay blue when pacman eats the big pill (table at 0861)
ROM:0796 ;       byte 5: (0..2) number of units before a ghost goes out of home (table at 0873)
ROM:0796 DifficultyTable:db 3, 1, 1, 0, 2, 0     ; Referenced from 716
ROM:0796                 db 4, 1, 2, 1, 3, 0
ROM:0796                 db 4, 1, 3, 2, 4, 1
ROM:0796                 db 4, 2, 3, 2, 5, 1
ROM:0796                 db 5, 0, 3, 2, 6, 2
ROM:0796                 db 5, 1, 3, 3, 3, 2
ROM:0796                 db 5, 2, 3, 3, 6, 2
ROM:0796                 db 5, 2, 3, 3, 6, 2
ROM:0796                 db 5, 0, 3, 4, 7, 2
ROM:0796                 db 5, 1, 3, 4, 3, 2
ROM:0796                 db 5, 2, 3, 4, 6, 2
ROM:0796                 db 5, 2, 3, 5, 7, 2
ROM:0796                 db 5, 0, 3, 5, 7, 2
ROM:0796                 db 5, 2, 3, 5, 5, 2
ROM:0796                 db 5, 1, 3, 6, 7, 2
ROM:0796                 db 5, 2, 3, 6, 7, 2
ROM:0796                 db 5, 2, 3, 6, 8, 2
ROM:0796                 db 5, 2, 3, 6, 7, 2
ROM:0796                 db 5, 2, 3, 7, 8, 2
ROM:0796                 db 5, 2, 3, 7, 8, 2
ROM:0796                 db 6, 2, 3, 7, 8, 2
ROM:0814
ROM:0814 ; =============== S U B R O U T I N E =======================================
ROM:0814
ROM:0814
ROM:0814 sub_814:
ROM:0814                 ld      de, 4D46h
ROM:0817                 ld      bc, 1Ch
ROM:081A                 ldir
ROM:081C                 ld      bc, 0Ch
ROM:081F                 and     a
ROM:0820                 sbc     hl, bc
ROM:0822                 ldir
ROM:0824                 ld      bc, 0Ch
ROM:0827                 and     a
ROM:0828                 sbc     hl, bc
ROM:082A                 ldir
ROM:082C                 ld      bc, 0Ch
ROM:082F                 and     a
ROM:0830                 sbc     hl, bc
ROM:0832                 ldir
ROM:0834                 ld      bc, 0Eh
ROM:0837                 ldir
ROM:0839                 ret
ROM:0839 ; End of function sub_814
ROM:0839
ROM:083A
ROM:083A ; =============== S U B R O U T I N E =======================================
ROM:083A
ROM:083A
ROM:083A sub_83A:
ROM:083A                 ld      de, 4DB8h
ROM:083D                 ld      bc, 3
ROM:0840                 ldir
ROM:0842                 ret
ROM:0842 ; End of function sub_83A
ROM:0842
ROM:0842 ; ---------------------------------------------------------------------------
ROM:0843 ;-- table related to difficulty - each entry is 3 bytes
ROM:0843 ; b0: when counter at 4E0F reaches this value, pink ghost goes out of home
ROM:0843 ; b1: when counter at 4E10 reaches this value, blue ghost goes out of home
ROM:0843 ; b2: when counter at 4E11 reaches this value, orange ghost goes out of home
ROM:0843 DifficultyTable2:db 14h, 1Eh, 46h
ROM:0843                 db 0, 1Eh, 3Ch
ROM:0843                 db 0, 0, 32h
ROM:0843                 db 0, 0, 0
ROM:0843                 db 14h, 0Ah, 1Eh
ROM:0843                 db 0Fh, 28h, 14h
ROM:0843                 db 32h, 19h, 3Ch
ROM:0843                 db 1Eh, 50h, 28h
ROM:0843                 db 64h, 32h, 78h
ROM:0843                 db 3Ch, 8Ch, 46h
ROM:0861 ; time ghosts stay blue when energizer eaten
ROM:0861 GhostTime:      dw 3C0h                 ; 960
ROM:0863                 dw 348h                 ; 840
ROM:0865                 dw 2D0h                 ; 720
ROM:0867                 dw 258h                 ; 600
ROM:0869                 dw 1E0h                 ; 480
ROM:086B                 dw 168h                 ; 360
ROM:086D                 dw 0F0h                 ; 240
ROM:086F                 dw 78h                  ; 120
ROM:0871                 dw 1                    ; 1
ROM:0873 ; number of units before ghosts leave home
ROM:0873 HomeDiffTable:  dw 0F0h                 ; 240
ROM:0875                 dw 0F0h                 ; 240
ROM:0877                 dw 0B4h                 ; 180
ROM:0879
ROM:0879 ; =============== S U B R O U T I N E =======================================
ROM:0879
ROM:0879
ROM:0879 sub_879:
ROM:0879                 ld      hl, 4E09h
ROM:087C                 xor     a
ROM:087D                 ld      b, 0Bh
ROM:087F                 rst     8
ROM:0880                 call    ResetPills
ROM:0883                 ld      hl, (word_4E73)
ROM:0886                 ld      (DifficultyPtr), hl
ROM:0889                 ld      hl, 4E0Ah
ROM:088C                 ld      de, 4E38h
ROM:088F                 ld      bc, 2Eh ; '.'
ROM:0892                 ldir
ROM:0894
ROM:0894 loc_894:
ROM:0894                 ld      hl, 4E04h
ROM:0897                 inc     (hl)
ROM:0898                 ret
ROM:0898 ; End of function sub_879
ROM:0898
ROM:0899 ; ---------------------------------------------------------------------------
ROM:0899                 ld      a, (MainMode)
ROM:089C                 dec     a
ROM:089D                 jr      nz, loc_8A5
ROM:089F                 ld      a, 9
ROM:08A1                 ld      (LevelComplete), a
ROM:08A4                 ret
ROM:08A5 ; ---------------------------------------------------------------------------
ROM:08A5
ROM:08A5 loc_8A5:
ROM:08A5                 rst     28h
ROM:08A5 ; ---------------------------------------------------------------------------
ROM:08A6                 db 11h
ROM:08A7                 db 0
ROM:08A8 ; ---------------------------------------------------------------------------
ROM:08A8                 rst     28h
ROM:08A8 ; ---------------------------------------------------------------------------
ROM:08A9                 db 1Ch
ROM:08AA                 db 83h
ROM:08AB ; ---------------------------------------------------------------------------
ROM:08AB                 rst     28h
ROM:08AB ; ---------------------------------------------------------------------------
ROM:08AC                 db 4
ROM:08AD                 db 0
ROM:08AE ; ---------------------------------------------------------------------------
ROM:08AE                 rst     28h
ROM:08AE ; ---------------------------------------------------------------------------
ROM:08AF                 db 5
ROM:08B0                 db 0
ROM:08B1 ; ---------------------------------------------------------------------------
ROM:08B1                 rst     28h
ROM:08B1 ; ---------------------------------------------------------------------------
ROM:08B2                 db 10h
ROM:08B3                 db 0
ROM:08B4 ; ---------------------------------------------------------------------------
ROM:08B4                 rst     28h
ROM:08B4 ; ---------------------------------------------------------------------------
ROM:08B5                 db 1Ah
ROM:08B6                 db 0
ROM:08B7 ; ---------------------------------------------------------------------------
ROM:08B7                 rst     30h             ; store IRQ task
ROM:08B7 ; ---------------------------------------------------------------------------
ROM:08B8                 db 54h
ROM:08B9                 db 0
ROM:08BA                 db 0
ROM:08BB ; ---------------------------------------------------------------------------
ROM:08BB                 rst     30h             ; store IRQ task
ROM:08BB ; ---------------------------------------------------------------------------
ROM:08BC                 db 54h
ROM:08BD                 db 6
ROM:08BE                 db 0
ROM:08BF ; ---------------------------------------------------------------------------
ROM:08BF                 ld      a, (CocktailMode)
ROM:08C2                 ld      b, a
ROM:08C3                 ld      a, (PlayerNumber)
ROM:08C6                 and     b
ROM:08C7                 ld      (FlipScreen), a
ROM:08CA                 jp      loc_894
ROM:08CD
ROM:08CD ; =============== S U B R O U T I N E =======================================
ROM:08CD
ROM:08CD
ROM:08CD sub_8CD:
ROM:08CD                 ld      a, (InterruptEnable)
ROM:08D0                 bit     4, a            ; rack test
ROM:08D2                 jp      nz, PelletCount
ROM:08D5                 ld      hl, 4E04h
ROM:08D8                 ld      (hl), 0Eh
ROM:08DA                 rst     28h
ROM:08DA ; ---------------------------------------------------------------------------
ROM:08DB                 db 13h
ROM:08DC                 db 0
ROM:08DD ; ---------------------------------------------------------------------------
ROM:08DD                 ret
ROM:08DE ; ---------------------------------------------------------------------------
ROM:08DE Routine to determine number of pellets to eat
ROM:08DE
ROM:08DE PelletCount:                            ; number eaten
ROM:08DE                 ld      a, (PelletsEaten)
ROM:08E1                 cp      0F4h ; '('      ; compare to 244
ROM:08E3                 jr      nz, loc_8EB     ; jump if not done
ROM:08E5                 ld      hl, 4E04h       ; set level complete
ROM:08E8                 ld      (hl), 0Ch
ROM:08EA                 ret
ROM:08EB ; ---------------------------------------------------------------------------
ROM:08EB
ROM:08EB loc_8EB:
ROM:08EB                 call    sub_1017
ROM:08EE                 call    sub_1017
ROM:08F1                 call    sub_13DD
ROM:08F4                 call    sub_C42
ROM:08F7                 call    IncAnimFrame
ROM:08FA                 call    sub_E36
ROM:08FD                 call    sub_AC3
ROM:0900                 call    sub_BD6
ROM:0903                 call    sub_C0D
ROM:0906                 call    sub_E6C
ROM:0909                 call    sub_EAD
ROM:090C                 ret
ROM:090C ; End of function sub_8CD
ROM:090C
ROM:090D
ROM:090D ; =============== S U B R O U T I N E =======================================
ROM:090D
ROM:090D
ROM:090D sub_90D:
ROM:090D                 ld      a, 1
ROM:090F                 ld      (byte_4E12), a
ROM:0912                 call    ScreenPillsToRAM
ROM:0915                 ld      hl, 4E04h
ROM:0918                 inc     (hl)
ROM:0919                 ld      a, (LivesNumber)
ROM:091C                 and     a
ROM:091D                 jr      nz, loc_93E
ROM:091F                 ld      a, (byte_4E70)
ROM:0922                 and     a
ROM:0923                 jr      z, loc_93E
ROM:0925                 ld      a, (byte_4E42)
ROM:0928                 and     a
ROM:0929                 jr      z, loc_93E
ROM:092B                 ld      a, (PlayerNumber)
ROM:092E                 add     a, 3
ROM:0930                 ld      c, a
ROM:0931                 ld      b, 1Ch
ROM:0933                 call    ContinueTask
ROM:0936                 rst     28h
ROM:0936 ; ---------------------------------------------------------------------------
ROM:0937                 db 1Ch
ROM:0938                 db 5
ROM:0939 ; ---------------------------------------------------------------------------
ROM:0939                 rst     30h
ROM:0939 ; ---------------------------------------------------------------------------
ROM:093A                 db 54h
ROM:093B                 db 0
ROM:093C                 db 0
ROM:093D ; ---------------------------------------------------------------------------
ROM:093D                 ret
ROM:093E ; ---------------------------------------------------------------------------
ROM:093E
ROM:093E loc_93E:
ROM:093E                 inc     (hl)
ROM:093F                 ret
ROM:093F ; End of function sub_90D
ROM:093F
ROM:0940
ROM:0940 ; =============== S U B R O U T I N E =======================================
ROM:0940
ROM:0940
ROM:0940 sub_940:
ROM:0940                 ld      a, (byte_4E70)
ROM:0943                 and     a
ROM:0944                 jr      z, loc_94C
ROM:0946                 ld      a, (byte_4E42)
ROM:0949                 and     a
ROM:094A                 jr      nz, loc_961
ROM:094C
ROM:094C loc_94C:
ROM:094C                 ld      a, (LivesNumber)
ROM:094F                 and     a
ROM:0950                 jr      nz, loc_96C
ROM:0952                 call    DrawCredits
ROM:0955                 rst     28h
ROM:0955 ; ---------------------------------------------------------------------------
ROM:0956                 db 1Ch
ROM:0957                 db 5
ROM:0958 ; ---------------------------------------------------------------------------
ROM:0958                 rst     30h
ROM:0958 ; ---------------------------------------------------------------------------
ROM:0959                 db 54h
ROM:095A                 db 0
ROM:095B                 db 0
ROM:095C ; ---------------------------------------------------------------------------
ROM:095C                 ld      hl, 4E04h
ROM:095F                 inc     (hl)
ROM:0960                 ret
ROM:0961 ; ---------------------------------------------------------------------------
ROM:0961
ROM:0961 loc_961:
ROM:0961                 call    sub_AA6
ROM:0964                 ld      a, (PlayerNumber)
ROM:0967                 xor     1
ROM:0969                 ld      (PlayerNumber), a
ROM:096C
ROM:096C loc_96C:
ROM:096C                 ld      a, 9
ROM:096E                 ld      (LevelComplete), a
ROM:0971                 ret
ROM:0971 ; End of function sub_940
ROM:0971
ROM:0972
ROM:0972 ; =============== S U B R O U T I N E =======================================
ROM:0972
ROM:0972
ROM:0972 sub_972:
ROM:0972                 xor     a
ROM:0973                 ld      (MainSub1), a
ROM:0976                 ld      (LevelComplete), a
ROM:0979                 ld      (byte_4E70), a
ROM:097C                 ld      (PlayerNumber), a
ROM:097F                 ld      (FlipScreen), a
ROM:0982                 ld      a, 1
ROM:0984                 ld      (MainMode), a
ROM:0987                 ret
ROM:0987 ; End of function sub_972
ROM:0987
ROM:0988 ; ---------------------------------------------------------------------------
ROM:0988
ROM:0988 loc_988:
ROM:0988                 rst     28h
ROM:0988 ; ---------------------------------------------------------------------------
ROM:0989                 db 0
ROM:098A                 db 1
ROM:098B ; ---------------------------------------------------------------------------
ROM:098B                 rst     28h
ROM:098B ; ---------------------------------------------------------------------------
ROM:098C                 db 1
ROM:098D                 db 1
ROM:098E ; ---------------------------------------------------------------------------
ROM:098E                 rst     28h
ROM:098E ; ---------------------------------------------------------------------------
ROM:098F                 db 2
ROM:0990                 db 0
ROM:0991 ; ---------------------------------------------------------------------------
ROM:0991                 rst     28h
ROM:0991 ; ---------------------------------------------------------------------------
ROM:0992                 db 11h
ROM:0993                 db 0
ROM:0994 ; ---------------------------------------------------------------------------
ROM:0994                 rst     28h
ROM:0994 ; ---------------------------------------------------------------------------
ROM:0995                 db 13h
ROM:0996                 db 0
ROM:0997 ; ---------------------------------------------------------------------------
ROM:0997                 rst     28h
ROM:0997 ; ---------------------------------------------------------------------------
ROM:0998                 db 3
ROM:0999                 db 0
ROM:099A ; ---------------------------------------------------------------------------
ROM:099A                 rst     28h
ROM:099A ; ---------------------------------------------------------------------------
ROM:099B                 db 4
ROM:099C                 db 0
ROM:099D ; ---------------------------------------------------------------------------
ROM:099D                 rst     28h
ROM:099D ; ---------------------------------------------------------------------------
ROM:099E                 db 5
ROM:099F                 db 0
ROM:09A0 ; ---------------------------------------------------------------------------
ROM:09A0                 rst     28h
ROM:09A0 ; ---------------------------------------------------------------------------
ROM:09A1                 db 10h
ROM:09A2                 db 0
ROM:09A3 ; ---------------------------------------------------------------------------
ROM:09A3                 rst     28h
ROM:09A3 ; ---------------------------------------------------------------------------
ROM:09A4                 db 1Ah
ROM:09A5                 db 0
ROM:09A6 ; ---------------------------------------------------------------------------
ROM:09A6                 rst     28h
ROM:09A6 ; ---------------------------------------------------------------------------
ROM:09A7                 db 1Ch
ROM:09A8                 db 6
ROM:09A9 ; ---------------------------------------------------------------------------
ROM:09A9                 ld      a, (MainMode)
ROM:09AC                 cp      3
ROM:09AE                 jr      z, loc_9B6
ROM:09B0                 rst     28h
ROM:09B0 ; ---------------------------------------------------------------------------
ROM:09B1                 db 1Ch
ROM:09B2                 db 5
ROM:09B3 ; ---------------------------------------------------------------------------
ROM:09B3                 rst     28h
ROM:09B3 ; ---------------------------------------------------------------------------
ROM:09B4                 db 1Dh
ROM:09B5                 db 0
ROM:09B6 ; ---------------------------------------------------------------------------
ROM:09B6
ROM:09B6 loc_9B6:                                ; store IRQ task
ROM:09B6                 rst     30h
ROM:09B6 ; ---------------------------------------------------------------------------
ROM:09B7                 db 54h
ROM:09B8                 db 0
ROM:09B9                 db 0
ROM:09BA ; ---------------------------------------------------------------------------
ROM:09BA                 ld      a, (MainMode)
ROM:09BD                 dec     a
ROM:09BE                 jr      z, loc_9C4
ROM:09C0                 rst     30h             ; store IRQ task
ROM:09C0 ; ---------------------------------------------------------------------------
ROM:09C1                 db 54h
ROM:09C2                 db 6
ROM:09C3                 db 0
ROM:09C4 ; ---------------------------------------------------------------------------
ROM:09C4
ROM:09C4 loc_9C4:
ROM:09C4                 ld      a, (CocktailMode)
ROM:09C7                 ld      b, a
ROM:09C8                 ld      a, (PlayerNumber)
ROM:09CB                 and     b
ROM:09CC                 ld      (FlipScreen), a
ROM:09CF                 jp      loc_894
ROM:09D2
ROM:09D2 ; =============== S U B R O U T I N E =======================================
ROM:09D2
ROM:09D2
ROM:09D2 sub_9D2:
ROM:09D2                 ld      a, 3
ROM:09D4                 ld      (LevelComplete), a
ROM:09D7                 ret
ROM:09D7 ; End of function sub_9D2
ROM:09D7
ROM:09D8 ; ---------------------------------------------------------------------------
ROM:09D8                 rst     30h             ; store IRQ task
ROM:09D8 ; ---------------------------------------------------------------------------
ROM:09D9                 db 54h
ROM:09DA                 db 0
ROM:09DB                 db 0
ROM:09DC ; ---------------------------------------------------------------------------
ROM:09DC                 ld      hl, 4E04h
ROM:09DF                 inc     (hl)
ROM:09E0                 xor     a
ROM:09E1                 ld      (CH2_DATA), a
ROM:09E4                 ld      (CH3_DATA), a
ROM:09E7                 ret
ROM:09E8
ROM:09E8 ; =============== S U B R O U T I N E =======================================
ROM:09E8
ROM:09E8
ROM:09E8 sub_9E8:
ROM:09E8                 ld      c, 2
ROM:09EA
ROM:09EA loc_9EA:
ROM:09EA                 ld      b, 1
ROM:09EC                 call    ContinueTask
ROM:09EF                 rst     30h             ; store IRQ task
ROM:09EF ; End of function sub_9E8
ROM:09EF
ROM:09EF ; ---------------------------------------------------------------------------
ROM:09F0                 db 42h
ROM:09F1                 db 0
ROM:09F2                 db 0
ROM:09F3 ; ---------------------------------------------------------------------------
ROM:09F3                 ld      hl, 0
ROM:09F6                 call    sub_267E
ROM:09F9                 ld      hl, 4E04h
ROM:09FC                 inc     (hl)
ROM:09FD                 ret
ROM:09FE
ROM:09FE ; =============== S U B R O U T I N E =======================================
ROM:09FE
ROM:09FE
ROM:09FE sub_9FE:
ROM:09FE                 ld      c, 0
ROM:0A00                 jr      loc_9EA
ROM:0A00 ; End of function sub_9FE
ROM:0A00
ROM:0A02
ROM:0A02 ; =============== S U B R O U T I N E =======================================
ROM:0A02
ROM:0A02 ; Attributes: thunk
ROM:0A02
ROM:0A02 sub_A02:
ROM:0A02                 jr      sub_9E8
ROM:0A02 ; End of function sub_A02
ROM:0A02
ROM:0A04
ROM:0A04 ; =============== S U B R O U T I N E =======================================
ROM:0A04
ROM:0A04 ; Attributes: thunk
ROM:0A04
ROM:0A04 sub_A04:
ROM:0A04                 jr      sub_9FE
ROM:0A04 ; End of function sub_A04
ROM:0A04
ROM:0A06
ROM:0A06 ; =============== S U B R O U T I N E =======================================
ROM:0A06
ROM:0A06 ; Attributes: thunk
ROM:0A06
ROM:0A06 sub_A06:
ROM:0A06                 jr      sub_9E8
ROM:0A06 ; End of function sub_A06
ROM:0A06
ROM:0A08
ROM:0A08 ; =============== S U B R O U T I N E =======================================
ROM:0A08
ROM:0A08 ; Attributes: thunk
ROM:0A08
ROM:0A08 sub_A08:
ROM:0A08                 jr      sub_9FE
ROM:0A08 ; End of function sub_A08
ROM:0A08
ROM:0A0A
ROM:0A0A ; =============== S U B R O U T I N E =======================================
ROM:0A0A
ROM:0A0A ; Attributes: thunk
ROM:0A0A
ROM:0A0A sub_A0A:
ROM:0A0A                 jr      sub_9E8
ROM:0A0A ; End of function sub_A0A
ROM:0A0A
ROM:0A0C
ROM:0A0C ; =============== S U B R O U T I N E =======================================
ROM:0A0C
ROM:0A0C ; Attributes: thunk
ROM:0A0C
ROM:0A0C sub_A0C:
ROM:0A0C                 jr      sub_9FE
ROM:0A0C ; End of function sub_A0C
ROM:0A0C
ROM:0A0E ; ---------------------------------------------------------------------------
ROM:0A0E                 rst     28h
ROM:0A0E ; ---------------------------------------------------------------------------
ROM:0A0F                 db 0
ROM:0A10                 db 1
ROM:0A11 ; ---------------------------------------------------------------------------
ROM:0A11                 rst     28h
ROM:0A11 ; ---------------------------------------------------------------------------
ROM:0A12                 db 6
ROM:0A13                 db 0
ROM:0A14 ; ---------------------------------------------------------------------------
ROM:0A14                 rst     28h
ROM:0A14 ; ---------------------------------------------------------------------------
ROM:0A15                 db 11h
ROM:0A16                 db 0
ROM:0A17 ; ---------------------------------------------------------------------------
ROM:0A17                 rst     28h
ROM:0A17 ; ---------------------------------------------------------------------------
ROM:0A18                 db 13h
ROM:0A19                 db 0
ROM:0A1A ; ---------------------------------------------------------------------------
ROM:0A1A                 rst     28h
ROM:0A1A ; ---------------------------------------------------------------------------
ROM:0A1B                 db 4
ROM:0A1C                 db 1
ROM:0A1D ; ---------------------------------------------------------------------------
ROM:0A1D                 rst     28h
ROM:0A1D ; ---------------------------------------------------------------------------
ROM:0A1E                 db 5
ROM:0A1F                 db 1
ROM:0A20 ; ---------------------------------------------------------------------------
ROM:0A20                 rst     28h
ROM:0A20 ; ---------------------------------------------------------------------------
ROM:0A21                 db 10h
ROM:0A22                 db 13h
ROM:0A23 ; ---------------------------------------------------------------------------
ROM:0A23                 rst     30h             ; store IRQ task
ROM:0A23 ; ---------------------------------------------------------------------------
ROM:0A24                 db 43h
ROM:0A25                 db 0
ROM:0A26                 db 0
ROM:0A27 ; ---------------------------------------------------------------------------
ROM:0A27                 ld      hl, 4E04h
ROM:0A2A                 inc     (hl)
ROM:0A2B                 ret
ROM:0A2C ; ---------------------------------------------------------------------------
ROM:0A2C                 xor     a
ROM:0A2D                 ld      (CH2_DATA), a   ; silence channels 2 and 3?
ROM:0A30                 ld      (CH3_DATA), a
ROM:0A33                 ld      a, 2
ROM:0A35                 ld      (CH1_W_NUM), a
ROM:0A38                 ld      (CH2_W_NUM), a
ROM:0A3B                 ld      a, (LevelNumber) ; see what level just finished
ROM:0A3E                 cp      14h             ; is it over 20?
ROM:0A40                 jr      c, loc_A44      ; if not, jump to routine
ROM:0A42                 ld      a, 14h          ; else cap level number at 20, and do that level end routine
ROM:0A44
ROM:0A44 loc_A44:
ROM:0A44                 rst     20h
ROM:0A44 ; ---------------------------------------------------------------------------
ROM:0A45 EndLvlJumpTable:dw 0A6Fh                ; increment level state and stop sound
ROM:0A47                 dw 2108h                ; cut scene 1
ROM:0A49                 dw 0A6Fh                ; increment level state and stop sound
ROM:0A4B                 dw 0A6Fh                ; ...
ROM:0A4D                 dw 219Eh                ; cut scene 2
ROM:0A4F                 dw 0A6Fh
ROM:0A51                 dw 0A6Fh
ROM:0A53                 dw 0A6Fh
ROM:0A55                 dw 2297h                ; cut scene 3
ROM:0A57                 dw 0A6Fh
ROM:0A59                 dw 0A6Fh
ROM:0A5B                 dw 0A6Fh
ROM:0A5D                 dw 2297h                ; cut scene 4
ROM:0A5F                 dw 0A6Fh
ROM:0A61                 dw 0A6Fh
ROM:0A63                 dw 0A6Fh
ROM:0A65                 dw 2297h                ; cut scene 5
ROM:0A67                 dw 0A6Fh
ROM:0A69                 dw 0A6Fh
ROM:0A6B                 dw 0A6Fh
ROM:0A6D                 dw 0A6Fh
ROM:0A6F ;=====================
ROM:0A6F ; Increment level state by 2 and stop sound
ROM:0A6F ;=====================
ROM:0A6F
ROM:0A6F ; =============== S U B R O U T I N E =======================================
ROM:0A6F
ROM:0A6F
ROM:0A6F NextLevel:
ROM:0A6F                 ld      hl, 4E04h
ROM:0A72                 inc     (hl)
ROM:0A73                 inc     (hl)
ROM:0A74                 xor     a
ROM:0A75                 ld      (CH1_W_NUM), a  ; stop sound
ROM:0A78                 ld      (CH2_W_NUM), a
ROM:0A7B                 ret
ROM:0A7B ; End of function NextLevel
ROM:0A7B
ROM:0A7C
ROM:0A7C ; =============== S U B R O U T I N E =======================================
ROM:0A7C
ROM:0A7C
ROM:0A7C sub_A7C:
ROM:0A7C                 xor     a
ROM:0A7D                 ld      (CH1_W_NUM), a
ROM:0A80                 ld      (CH2_W_NUM), a
ROM:0A83                 ld      b, 7
ROM:0A85                 ld      hl, 4E0Ch
ROM:0A88                 rst     8               ; memset
ROM:0A89                 call    ResetPills
ROM:0A8C                 ld      hl, 4E04h
ROM:0A8F                 inc     (hl)
ROM:0A90                 ld      hl, 4E13h       ; level number
ROM:0A93                 inc     (hl)
ROM:0A94                 ld      hl, (DifficultyPtr)
ROM:0A97                 ld      a, (hl)
ROM:0A98                 cp      14h             ; is difficulty table at end?
ROM:0A9A                 ret     z               ; return if so
ROM:0A9B                 inc     hl              ; else increment pointer to difficulty
ROM:0A9C                 ld      (DifficultyPtr), hl
ROM:0A9F                 ret
ROM:0A9F ; End of function sub_A7C
ROM:0A9F
ROM:0AA0
ROM:0AA0 ; =============== S U B R O U T I N E =======================================
ROM:0AA0
ROM:0AA0 ; Attributes: thunk
ROM:0AA0
ROM:0AA0 sub_AA0:
ROM:0AA0                 jp      loc_988
ROM:0AA0 ; End of function sub_AA0
ROM:0AA0
ROM:0AA3
ROM:0AA3 ; =============== S U B R O U T I N E =======================================
ROM:0AA3
ROM:0AA3 ; Attributes: thunk
ROM:0AA3
ROM:0AA3 sub_AA3:
ROM:0AA3                 jp      sub_9D2
ROM:0AA3 ; End of function sub_AA3
ROM:0AA3
ROM:0AA6
ROM:0AA6 ; =============== S U B R O U T I N E =======================================
ROM:0AA6
ROM:0AA6
ROM:0AA6 sub_AA6:
ROM:0AA6                 ld      b, 2Eh ; '.'
ROM:0AA8                 ld      ix, 4E0Ah
ROM:0AAC                 ld      iy, 4E38h
ROM:0AB0
ROM:0AB0 loc_AB0:
ROM:0AB0                 ld      d, (ix+0)
ROM:0AB3                 ld      e, (iy+0)
ROM:0AB6                 ld      (iy+0), d
ROM:0AB9                 ld      (ix+0), e
ROM:0ABC                 inc     ix
ROM:0ABE                 inc     iy
ROM:0AC0                 djnz    loc_AB0
ROM:0AC2                 ret
ROM:0AC2 ; End of function sub_AA6
ROM:0AC2
ROM:0AC3
ROM:0AC3 ; =============== S U B R O U T I N E =======================================
ROM:0AC3
ROM:0AC3
ROM:0AC3 sub_AC3:
ROM:0AC3                 ld      a, (DeadGhostIndex)
ROM:0AC6                 and     a
ROM:0AC7                 ret     nz
ROM:0AC8                 ld      ix, 4C00h
ROM:0ACC                 ld      iy, 4DC8h
ROM:0AD0                 ld      de, 100h
ROM:0AD3                 cp      (iy+0)
ROM:0AD6                 jp      nz, loc_BD2
ROM:0AD9                 ld      (iy+0), 0Eh
ROM:0ADD                 ld      a, (PillEffect)
ROM:0AE0                 and     a
ROM:0AE1                 jr      z, loc_AFE
ROM:0AE3                 ld      hl, (word_4DCB)
ROM:0AE6                 and     a
ROM:0AE7                 sbc     hl, de
ROM:0AE9                 jr      nc, loc_AFE
ROM:0AEB                 ld      hl, 4EACh
ROM:0AEE                 set     7, (hl)
ROM:0AF0                 ld      a, 9
ROM:0AF2                 cp      (ix+0Bh)
ROM:0AF5                 jr      nz, loc_AFB
ROM:0AF7                 res     7, (hl)
ROM:0AF9                 ld      a, 9
ROM:0AFB
ROM:0AFB loc_AFB:
ROM:0AFB                 ld      (PacmanSpriteColor), a
ROM:0AFE
ROM:0AFE loc_AFE:
ROM:0AFE                 ld      a, (RedGhostFlag)
ROM:0B01                 and     a
ROM:0B02                 jr      z, loc_B21
ROM:0B04                 ld      hl, (word_4DCB)
ROM:0B07                 and     a
ROM:0B08                 sbc     hl, de
ROM:0B0A                 jr      nc, loc_B33
ROM:0B0C                 ld      a, 11h
ROM:0B0E                 cp      (ix+3)
ROM:0B11                 jr      z, loc_B1A
ROM:0B13                 ld      (ix+3), 11h
ROM:0B17                 jp      loc_B33
ROM:0B1A ; ---------------------------------------------------------------------------
ROM:0B1A
ROM:0B1A loc_B1A:
ROM:0B1A                 ld      (ix+3), 12h
ROM:0B1E                 jp      loc_B33
ROM:0B21 ; ---------------------------------------------------------------------------
ROM:0B21
ROM:0B21 loc_B21:
ROM:0B21                 ld      a, 1
ROM:0B23                 cp      (ix+3)
ROM:0B26                 jr      z, loc_B2F
ROM:0B28                 ld      (ix+3), 1
ROM:0B2C                 jp      loc_B33
ROM:0B2F ; ---------------------------------------------------------------------------
ROM:0B2F
ROM:0B2F loc_B2F:
ROM:0B2F                 ld      (ix+3), 1
ROM:0B33
ROM:0B33 loc_B33:
ROM:0B33                 ld      a, (PinkGhostFlag)
ROM:0B36                 and     a
ROM:0B37                 jr      z, loc_B56
ROM:0B39                 ld      hl, (word_4DCB)
ROM:0B3C                 and     a
ROM:0B3D                 sbc     hl, de
ROM:0B3F                 jr      nc, loc_B68
ROM:0B41                 ld      a, 11h
ROM:0B43                 cp      (ix+5)
ROM:0B46                 jr      z, loc_B4F
ROM:0B48                 ld      (ix+5), 11h
ROM:0B4C                 jp      loc_B68
ROM:0B4F ; ---------------------------------------------------------------------------
ROM:0B4F
ROM:0B4F loc_B4F:
ROM:0B4F                 ld      (ix+5), 12h
ROM:0B53                 jp      loc_B68
ROM:0B56 ; ---------------------------------------------------------------------------
ROM:0B56
ROM:0B56 loc_B56:
ROM:0B56                 ld      a, 3
ROM:0B58                 cp      (ix+5)
ROM:0B5B                 jr      z, loc_B64
ROM:0B5D                 ld      (ix+5), 3
ROM:0B61                 jp      loc_B68
ROM:0B64 ; ---------------------------------------------------------------------------
ROM:0B64
ROM:0B64 loc_B64:
ROM:0B64                 ld      (ix+5), 3
ROM:0B68
ROM:0B68 loc_B68:
ROM:0B68                 ld      a, (BlueGhostFlag)
ROM:0B6B                 and     a
ROM:0B6C                 jr      z, loc_B8B
ROM:0B6E                 ld      hl, (word_4DCB)
ROM:0B71                 and     a
ROM:0B72                 sbc     hl, de
ROM:0B74                 jr      nc, loc_B9D
ROM:0B76                 ld      a, 11h
ROM:0B78                 cp      (ix+7)
ROM:0B7B                 jr      z, loc_B84
ROM:0B7D                 ld      (ix+7), 11h
ROM:0B81                 jp      loc_B9D
ROM:0B84 ; ---------------------------------------------------------------------------
ROM:0B84
ROM:0B84 loc_B84:
ROM:0B84                 ld      (ix+7), 12h
ROM:0B88                 jp      loc_B9D
ROM:0B8B ; ---------------------------------------------------------------------------
ROM:0B8B
ROM:0B8B loc_B8B:
ROM:0B8B                 ld      a, 5
ROM:0B8D                 cp      (ix+7)
ROM:0B90                 jr      z, loc_B99
ROM:0B92                 ld      (ix+7), 5
ROM:0B96                 jp      loc_B9D
ROM:0B99 ; ---------------------------------------------------------------------------
ROM:0B99
ROM:0B99 loc_B99:
ROM:0B99                 ld      (ix+7), 5
ROM:0B9D
ROM:0B9D loc_B9D:
ROM:0B9D                 ld      a, (OrangeGhostFlag)
ROM:0BA0                 and     a
ROM:0BA1                 jr      z, loc_BC0
ROM:0BA3                 ld      hl, (word_4DCB)
ROM:0BA6                 and     a
ROM:0BA7                 sbc     hl, de
ROM:0BA9                 jr      nc, loc_BD2
ROM:0BAB                 ld      a, 11h
ROM:0BAD                 cp      (ix+9)
ROM:0BB0                 jr      z, loc_BB9
ROM:0BB2                 ld      (ix+9), 11h
ROM:0BB6                 jp      loc_BD2
ROM:0BB9 ; ---------------------------------------------------------------------------
ROM:0BB9
ROM:0BB9 loc_BB9:
ROM:0BB9                 ld      (ix+9), 12h
ROM:0BBD                 jp      loc_BD2
ROM:0BC0 ; ---------------------------------------------------------------------------
ROM:0BC0
ROM:0BC0 loc_BC0:
ROM:0BC0                 ld      a, 7
ROM:0BC2                 cp      (ix+9)
ROM:0BC5                 jr      z, loc_BCE
ROM:0BC7                 ld      (ix+9), 7
ROM:0BCB                 jp      loc_BD2
ROM:0BCE ; ---------------------------------------------------------------------------
ROM:0BCE
ROM:0BCE loc_BCE:
ROM:0BCE                 ld      (ix+9), 7
ROM:0BD2
ROM:0BD2 loc_BD2:
ROM:0BD2                 dec     (iy+0)
ROM:0BD5                 ret
ROM:0BD5 ; End of function sub_AC3
ROM:0BD5
ROM:0BD6
ROM:0BD6 ; =============== S U B R O U T I N E =======================================
ROM:0BD6
ROM:0BD6
ROM:0BD6 sub_BD6:
ROM:0BD6                 ld      b, 19h
ROM:0BD8                 ld      a, (MainSub1)
ROM:0BDB                 cp      22h ; '"'
ROM:0BDD                 jp      nz, loc_BE2
ROM:0BE0                 ld      b, 0
ROM:0BE2
ROM:0BE2 loc_BE2:
ROM:0BE2                 ld      ix, 4C00h
ROM:0BE6                 ld      a, (RedState)
ROM:0BE9                 and     a
ROM:0BEA                 jp      z, loc_BF0
ROM:0BED                 ld      (ix+3), b
ROM:0BF0
ROM:0BF0 loc_BF0:
ROM:0BF0                 ld      a, (PinkState)
ROM:0BF3                 and     a
ROM:0BF4                 jp      z, loc_BFA
ROM:0BF7                 ld      (ix+5), b
ROM:0BFA
ROM:0BFA loc_BFA:
ROM:0BFA                 ld      a, (BlueState)
ROM:0BFD                 and     a
ROM:0BFE                 jp      z, sub_C04
ROM:0C01
ROM:0C01 loc_C01:
ROM:0C01                 ld      (ix+7), b
ROM:0C01 ; End of function sub_BD6
ROM:0C01
ROM:0C04
ROM:0C04 ; =============== S U B R O U T I N E =======================================
ROM:0C04
ROM:0C04
ROM:0C04 sub_C04:
ROM:0C04                 ld      a, (OrangeState)
ROM:0C07                 and     a
ROM:0C08                 ret     z
ROM:0C09                 ld      (ix+9), b
ROM:0C0C                 ret
ROM:0C0C ; End of function sub_C04
ROM:0C0C
ROM:0C0D
ROM:0C0D ; =============== S U B R O U T I N E =======================================
ROM:0C0D
ROM:0C0D
ROM:0C0D sub_C0D:
ROM:0C0D                 ld      hl, 4DCFh
ROM:0C10                 inc     (hl)
ROM:0C11                 ld      a, 0Ah
ROM:0C13                 cp      (hl)
ROM:0C14                 ret     nz
ROM:0C15                 ld      (hl), 0
ROM:0C17                 ld      a, (LevelComplete)
ROM:0C1A                 cp      3
ROM:0C1C                 jr      nz, loc_C33
ROM:0C1E                 ld      hl, 4464h
ROM:0C21
ROM:0C21 loc_C21:
ROM:0C21                 ld      a, 10h
ROM:0C23                 cp      (hl)
ROM:0C24                 jr      nz, loc_C28
ROM:0C26                 ld      a, 0
ROM:0C28
ROM:0C28 loc_C28:
ROM:0C28                 ld      (hl), a
ROM:0C29                 ld      (PaletteRAM+78h), a
ROM:0C2C                 ld      (PaletteRAM+384h), a
ROM:0C2F                 ld      (PaletteRAM+398h), a
ROM:0C32                 ret
ROM:0C33 ; ---------------------------------------------------------------------------
ROM:0C33
ROM:0C33 loc_C33:
ROM:0C33                 ld      hl, 4732h
ROM:0C36                 ld      a, 10h
ROM:0C38                 cp      (hl)
ROM:0C39                 jr      nz, loc_C3D
ROM:0C3B                 ld      a, 0
ROM:0C3D
ROM:0C3D loc_C3D:
ROM:0C3D                 ld      (hl), a
ROM:0C3E                 ld      (PaletteRAM+278h), a
ROM:0C41                 ret
ROM:0C41 ; End of function sub_C0D
ROM:0C41
ROM:0C42
ROM:0C42 ; =============== S U B R O U T I N E =======================================
ROM:0C42
ROM:0C42
ROM:0C42 sub_C42:
ROM:0C42                 ld      a, (DeadGhostIndex)
ROM:0C45                 and     a
ROM:0C46                 ret     nz
ROM:0C47                 ld      a, (byte_4D94)
ROM:0C4A                 rlca
ROM:0C4B                 ld      (byte_4D94), a
ROM:0C4E                 ret     nc
ROM:0C4F                 ld      a, (RedSubstate)
ROM:0C52                 and     a
ROM:0C53                 jp      nz, loc_C90
ROM:0C56                 ld      ix, 3305h
ROM:0C5A                 ld      iy, 4D00h
ROM:0C5E                 call    DoubleAdd
ROM:0C61                 ld      (RedYPos), hl   ; Red ghost Y position (decreases bottom to top)
ROM:0C64                 ld      a, 3
ROM:0C66                 ld      (word_4D28), a
ROM:0C69                 ld      (word_4D2C), a
ROM:0C6C                 ld      a, (RedYPos)    ; Red ghost Y position (decreases bottom to top)
ROM:0C6F                 cp      64h ; 'd'
ROM:0C71                 jp      nz, loc_C90
ROM:0C74                 ld      hl, 2E2Ch
ROM:0C77                 ld      (RedTileY), hl
ROM:0C7A                 ld      hl, 100h
ROM:0C7D                 ld      (word_4D14), hl
ROM:0C80                 ld      (word_4D1E), hl
ROM:0C83                 ld      a, 2
ROM:0C85                 ld      (word_4D28), a
ROM:0C88                 ld      (word_4D2C), a
ROM:0C8B                 ld      a, 1
ROM:0C8D                 ld      (RedSubstate), a
ROM:0C90
ROM:0C90 loc_C90:
ROM:0C90                 ld      a, (PinkSubstate)
ROM:0C93                 cp      1
ROM:0C95                 jp      z, loc_CFB
ROM:0C98                 cp      0
ROM:0C9A                 jp      nz, loc_CC1
ROM:0C9D                 ld      a, (PinkYPos)
ROM:0CA0                 cp      78h ; 'x'
ROM:0CA2                 call    z, loc_1F2E
ROM:0CA5                 cp      80h ; 'Ç'
ROM:0CA7                 call    z, loc_1F2E
ROM:0CAA                 ld      a, (word_4D2C+1)
ROM:0CAD                 ld      (word_4D28+1), a
ROM:0CB0                 ld      ix, 4D20h
ROM:0CB4                 ld      iy, 4D02h
ROM:0CB8                 call    DoubleAdd
ROM:0CBB                 ld      (PinkYPos), hl
ROM:0CBE                 jp      loc_CFB
ROM:0CC1 ; ---------------------------------------------------------------------------
ROM:0CC1
ROM:0CC1 loc_CC1:
ROM:0CC1                 ld      ix, 3305h
ROM:0CC5                 ld      iy, 4D02h
ROM:0CC9                 call    DoubleAdd
ROM:0CCC                 ld      (PinkYPos), hl
ROM:0CCF                 ld      a, 3
ROM:0CD1                 ld      (word_4D2C+1), a
ROM:0CD4                 ld      (word_4D28+1), a
ROM:0CD7                 ld      a, (PinkYPos)
ROM:0CDA                 cp      64h ; 'd'
ROM:0CDC                 jp      nz, loc_CFB
ROM:0CDF                 ld      hl, 2E2Ch
ROM:0CE2                 ld      (PinkTileY), hl
ROM:0CE5                 ld      hl, 100h
ROM:0CE8                 ld      (word_4D16), hl
ROM:0CEB                 ld      (word_4D20), hl
ROM:0CEE                 ld      a, 2
ROM:0CF0                 ld      (word_4D28+1), a
ROM:0CF3                 ld      (word_4D2C+1), a
ROM:0CF6                 ld      a, 1
ROM:0CF8                 ld      (PinkSubstate), a
ROM:0CFB
ROM:0CFB loc_CFB:
ROM:0CFB                 ld      a, (BlueSubstate)
ROM:0CFE                 cp      1
ROM:0D00                 jp      z, loc_D93
ROM:0D03                 cp      0
ROM:0D05                 jp      nz, loc_D2C
ROM:0D05 ; End of function sub_C42
ROM:0D05
ROM:0D08
ROM:0D08 ; =============== S U B R O U T I N E =======================================
ROM:0D08
ROM:0D08
ROM:0D08 sub_D08:
ROM:0D08                 ld      a, (BlueYPos)
ROM:0D0B                 cp      78h ; 'x'
ROM:0D0D                 call    z, loc_1F55
ROM:0D10                 cp      80h ; 'Ç'
ROM:0D12                 call    z, loc_1F55
ROM:0D15                 ld      a, (BlueDirection)
ROM:0D18                 ld      (word_4D2A), a
ROM:0D1B                 ld      ix, 4D22h
ROM:0D1F                 ld      iy, 4D04h
ROM:0D23                 call    DoubleAdd
ROM:0D26                 ld      (BlueYPos), hl
ROM:0D29                 jp      loc_D93
ROM:0D2C ; ---------------------------------------------------------------------------
ROM:0D2C
ROM:0D2C loc_D2C:
ROM:0D2C                 ld      a, (BlueSubstate)
ROM:0D2F                 cp      3
ROM:0D31                 jp      nz, loc_D59
ROM:0D34                 ld      ix, 32FFh
ROM:0D38                 ld      iy, 4D04h
ROM:0D3C                 call    DoubleAdd
ROM:0D3F                 ld      (BlueYPos), hl
ROM:0D42                 xor     a
ROM:0D43                 ld      (word_4D2A), a
ROM:0D46                 ld      (BlueDirection), a
ROM:0D49                 ld      a, (BlueXPos)
ROM:0D4C                 cp      80h ; 'Ç'
ROM:0D4E                 jp      nz, loc_D93
ROM:0D51                 ld      a, 2
ROM:0D53                 ld      (BlueSubstate), a
ROM:0D56                 jp      loc_D93
ROM:0D59 ; ---------------------------------------------------------------------------
ROM:0D59
ROM:0D59 loc_D59:
ROM:0D59                 ld      ix, 3305h
ROM:0D5D                 ld      iy, 4D04h
ROM:0D61                 call    DoubleAdd
ROM:0D64                 ld      (BlueYPos), hl
ROM:0D67                 ld      a, 3
ROM:0D69                 ld      (word_4D2A), a
ROM:0D6C                 ld      (BlueDirection), a
ROM:0D6F                 ld      a, (BlueYPos)
ROM:0D72                 cp      64h ; 'd'
ROM:0D74                 jp      nz, loc_D93
ROM:0D77                 ld      hl, 2E2Ch
ROM:0D7A                 ld      (BlueTileY), hl
ROM:0D7D                 ld      hl, 100h
ROM:0D80                 ld      (word_4D18), hl
ROM:0D83                 ld      (BlueOffset), hl
ROM:0D86                 ld      a, 2
ROM:0D88                 ld      (word_4D2A), a
ROM:0D8B                 ld      (BlueDirection), a
ROM:0D8E                 ld      a, 1
ROM:0D90                 ld      (BlueSubstate), a
ROM:0D93
ROM:0D93 loc_D93:
ROM:0D93                 ld      a, (OrangeSubstate)
ROM:0D96                 cp      1
ROM:0D98                 ret     z
ROM:0D99                 cp      0
ROM:0D9B                 jp      nz, loc_DC0
ROM:0D9E                 ld      a, (OrangeYPos)
ROM:0DA1                 cp      78h ; 'x'
ROM:0DA3                 call    z, loc_1F7C
ROM:0DA6                 cp      80h ; 'Ç'
ROM:0DA8                 call    z, loc_1F7C
ROM:0DAB                 ld      a, (BlueDirection+1)
ROM:0DAE                 ld      (word_4D2A+1), a
ROM:0DB1                 ld      ix, 4D24h
ROM:0DB5                 ld      iy, 4D06h
ROM:0DB9                 call    DoubleAdd
ROM:0DBC                 ld      (OrangeYPos), hl
ROM:0DBF                 ret
ROM:0DC0 ; ---------------------------------------------------------------------------
ROM:0DC0
ROM:0DC0 loc_DC0:
ROM:0DC0                 ld      a, (OrangeSubstate)
ROM:0DC3                 cp      3
ROM:0DC5                 jp      nz, loc_DEA
ROM:0DC8                 ld      ix, 3303h
ROM:0DCC                 ld      iy, 4D06h
ROM:0DD0                 call    DoubleAdd
ROM:0DD3                 ld      (OrangeYPos), hl
ROM:0DD6                 ld      a, 2
ROM:0DD8                 ld      (word_4D2A+1), a
ROM:0DDB                 ld      (BlueDirection+1), a
ROM:0DDE                 ld      a, (OrangeXPos)
ROM:0DE1                 cp      80h ; 'Ç'
ROM:0DE3                 ret     nz
ROM:0DE4                 ld      a, 2
ROM:0DE6                 ld      (OrangeSubstate), a
ROM:0DE9                 ret
ROM:0DEA ; ---------------------------------------------------------------------------
ROM:0DEA
ROM:0DEA loc_DEA:
ROM:0DEA                 ld      ix, 3305h
ROM:0DEE                 ld      iy, 4D06h
ROM:0DF2                 call    DoubleAdd
ROM:0DF5                 ld      (OrangeYPos), hl
ROM:0DF8                 ld      a, 3
ROM:0DFA                 ld      (word_4D2A+1), a
ROM:0DFD                 ld      (BlueDirection+1), a
ROM:0E00                 ld      a, (OrangeYPos)
ROM:0E03                 cp      64h ; 'd'
ROM:0E05                 ret     nz
ROM:0E06                 ld      hl, 2E2Ch
ROM:0E09                 ld      (OrangeTileY), hl
ROM:0E0C                 ld      hl, 100h
ROM:0E0F                 ld      (word_4D1A), hl
ROM:0E12                 ld      (word_4D24), hl
ROM:0E15                 ld      a, 2
ROM:0E17                 ld      (word_4D2A+1), a
ROM:0E1A                 ld      (BlueDirection+1), a
ROM:0E1D                 ld      a, 1
ROM:0E1F                 ld      (OrangeSubstate), a
ROM:0E22                 ret
ROM:0E22 ; End of function sub_D08
ROM:0E22
ROM:0E23
ROM:0E23 ; =============== S U B R O U T I N E =======================================
ROM:0E23
ROM:0E23
ROM:0E23 IncAnimFrame:
ROM:0E23                 ld      hl, 4DC4h       ; counter that updates anim frame every 8 ticks
ROM:0E26                 inc     (hl)            ; increment the counter
ROM:0E27                 ld      a, 8            ; is it 8?
ROM:0E29                 cp      (hl)
ROM:0E2A                 ret     nz              ; if not, return
ROM:0E2B                 ld      (hl), 0         ; clear 8 counter
ROM:0E2D                 ld      a, (AnimFrame)  ; next animation frame
ROM:0E30                 xor     1               ; toggle low bit
ROM:0E32                 ld      (AnimFrame), a  ; and save back
ROM:0E35                 ret                     ; return
ROM:0E35 ; End of function IncAnimFrame
ROM:0E35
ROM:0E36
ROM:0E36 ; =============== S U B R O U T I N E =======================================
ROM:0E36
ROM:0E36
ROM:0E36 sub_E36:
ROM:0E36                 ld      a, (PillEffect)
ROM:0E39                 and     a
ROM:0E3A                 ret     nz
ROM:0E3B                 ld      a, (byte_4DC1)
ROM:0E3E                 cp      7
ROM:0E40                 ret     z
ROM:0E41                 add     a, a
ROM:0E42                 ld      hl, (word_4DC2)
ROM:0E45                 inc     hl
ROM:0E46                 ld      (word_4DC2), hl
ROM:0E49                 ld      e, a
ROM:0E4A                 ld      d, 0
ROM:0E4C                 ld      ix, 4D86h
ROM:0E50                 add     ix, de
ROM:0E52                 ld      e, (ix+0)
ROM:0E55                 ld      d, (ix+1)
ROM:0E58                 and     a
ROM:0E59                 sbc     hl, de
ROM:0E5B                 ret     nz
ROM:0E5C                 srl     a
ROM:0E5E                 inc     a
ROM:0E5F                 ld      (byte_4DC1), a
ROM:0E62                 ld      hl, 101h
ROM:0E65                 ld      (word_4DB1), hl
ROM:0E68                 ld      (word_4DB3), hl
ROM:0E6B                 ret
ROM:0E6B ; End of function sub_E36
ROM:0E6B
ROM:0E6C Seems to vary items on sound channel 2
ROM:0E6C when death anim, bawsed on number of pellets eaten?
ROM:0E6C
ROM:0E6C ; =============== S U B R O U T I N E =======================================
ROM:0E6C
ROM:0E6C
ROM:0E6C sub_E6C:
ROM:0E6C                 ld      a, (PacManDeathAnim)
ROM:0E6F                 and     a
ROM:0E70                 jr      z, loc_E77
ROM:0E72                 xor     a
ROM:0E73                 ld      (CH2_DATA), a   ; channel 2 off
ROM:0E76                 ret
ROM:0E77 ; ---------------------------------------------------------------------------
ROM:0E77
ROM:0E77 loc_E77:
ROM:0E77                 ld      hl, 4EACh
ROM:0E7A                 ld      b, 0E0h ; 'a'
ROM:0E7C                 ld      a, (PelletsEaten)
ROM:0E7F                 cp      0E4h ; 'S'
ROM:0E81                 jr      c, loc_E89
ROM:0E83                 ld      a, b
ROM:0E84                 and     (hl)
ROM:0E85                 set     4, a
ROM:0E87                 ld      (hl), a
ROM:0E88                 ret
ROM:0E89 ; ---------------------------------------------------------------------------
ROM:0E89
ROM:0E89 loc_E89:
ROM:0E89                 cp      0D4h ; '+'
ROM:0E8B                 jr      c, loc_E93
ROM:0E8D                 ld      a, b
ROM:0E8E                 and     (hl)
ROM:0E8F                 set     3, a
ROM:0E91                 ld      (hl), a
ROM:0E92                 ret
ROM:0E93 ; ---------------------------------------------------------------------------
ROM:0E93
ROM:0E93 loc_E93:
ROM:0E93                 cp      0B4h ; '¦'
ROM:0E95                 jr      c, loc_E9D
ROM:0E97                 ld      a, b
ROM:0E98                 and     (hl)
ROM:0E99                 set     2, a
ROM:0E9B                 ld      (hl), a
ROM:0E9C                 ret
ROM:0E9D ; ---------------------------------------------------------------------------
ROM:0E9D
ROM:0E9D loc_E9D:
ROM:0E9D                 cp      74h ; 't'
ROM:0E9F                 jr      c, loc_EA7
ROM:0EA1                 ld      a, b
ROM:0EA2                 and     (hl)
ROM:0EA3                 set     1, a
ROM:0EA5                 ld      (hl), a
ROM:0EA6                 ret
ROM:0EA7 ; ---------------------------------------------------------------------------
ROM:0EA7
ROM:0EA7 loc_EA7:
ROM:0EA7                 ld      a, b
ROM:0EA8                 and     (hl)
ROM:0EA9                 set     0, a
ROM:0EAB                 ld      (hl), a
ROM:0EAC                 ret
ROM:0EAC ; End of function sub_E6C
ROM:0EAC
ROM:0EAD
ROM:0EAD ; =============== S U B R O U T I N E =======================================
ROM:0EAD
ROM:0EAD
ROM:0EAD sub_EAD:
ROM:0EAD                 ld      a, (PacManDeathAnim)
ROM:0EB0                 and     a
ROM:0EB1                 ret     nz
ROM:0EB2                 ld      a, (FruitPointer)
ROM:0EB5                 and     a
ROM:0EB6                 ret     nz
ROM:0EB7                 ld      a, (PelletsEaten)
ROM:0EBA                 cp      46h ; 'F'
ROM:0EBC                 jr      z, loc_ECC
ROM:0EBE                 cp      0AAh ; '¬'
ROM:0EC0                 ret     nz
ROM:0EC1                 ld      a, (FruitFlag2)
ROM:0EC4                 and     a
ROM:0EC5                 ret     nz
ROM:0EC6                 ld      hl, 4E0Dh
ROM:0EC9                 inc     (hl)
ROM:0ECA                 jr      loc_ED5
ROM:0ECC ; ---------------------------------------------------------------------------
ROM:0ECC
ROM:0ECC loc_ECC:
ROM:0ECC                 ld      a, (FruitFlag1)
ROM:0ECF                 and     a
ROM:0ED0                 ret     nz
ROM:0ED1                 ld      hl, 4E0Ch
ROM:0ED4                 inc     (hl)
ROM:0ED5
ROM:0ED5 loc_ED5:
ROM:0ED5                 ld      hl, 8094h
ROM:0ED8                 ld      (FruitPosition), hl
ROM:0EDB                 ld      hl, 0EFDh
ROM:0EDE                 ld      a, (LevelNumber)
ROM:0EE1                 cp      14h
ROM:0EE3                 jr      c, loc_EE7
ROM:0EE5                 ld      a, 14h
ROM:0EE7
ROM:0EE7 loc_EE7:
ROM:0EE7                 ld      b, a
ROM:0EE8                 add     a, a
ROM:0EE9                 add     a, b
ROM:0EEA                 rst     10h
ROM:0EEB                 ld      (FruitSpriteNum), a
ROM:0EEE                 inc     hl
ROM:0EEF                 ld      a, (hl)
ROM:0EF0                 ld      (FruitSpriteColor), a
ROM:0EF3                 inc     hl
ROM:0EF4                 ld      a, (hl)
ROM:0EF5                 ld      (FruitPointer), a
ROM:0EF8                 rst     30h             ; store IRQ task
ROM:0EF8 ; ---------------------------------------------------------------------------
ROM:0EF9                 db 8Ah
ROM:0EFA                 db 4
ROM:0EFB                 db 0
ROM:0EFC ; ---------------------------------------------------------------------------
ROM:0EFC                 ret
ROM:0EFC ; End of function sub_EAD
ROM:0EFC
ROM:0EFC ; ---------------------------------------------------------------------------
ROM:0EFD ; ==============================
ROM:0EFD ; efd-f3b : table for fruit shapes, colors, point value
ROM:0EFD ; bytes in that order
ROM:0EFD ; ==============================
ROM:0EFD
ROM:0EFD LevelDataTbl:   db 0, 14h, 6            ; shape, ref from EDB
ROM:0EFD                 db 1, 0Fh, 7
ROM:0EFD                 db 2, 15h, 8
ROM:0EFD                 db 2, 15h, 8
ROM:0EFD                 db 4, 14h, 9
ROM:0EFD                 db 4, 14h, 9
ROM:0EFD                 db 5, 17h, 0Ah
ROM:0EFD                 db 5, 17h, 0Ah
ROM:0EFD                 db 6, 9, 0Bh
ROM:0EFD                 db 6, 9, 0Bh
ROM:0EFD                 db 3, 16h, 0Ch
ROM:0EFD                 db 3, 16h, 0Ch
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0EFD                 db 7, 16h, 0Dh
ROM:0F3C BlankSpace1:    db [ 0C2h ], 0          ; unused bytes in ROM, useful for hacks
ROM:0FFE Checksum1:      db 48h                  ; bytes to make odd and even checksums work
ROM:0FFF                 db 36h
ROM:1000 ;==================
ROM:1000 ;Clear fruit pointer and position
ROM:1000 ;==================
ROM:1000
ROM:1000 ; =============== S U B R O U T I N E =======================================
ROM:1000
ROM:1000
ROM:1000 ClearFruitPtrPos:
ROM:1000                 xor     a               ; zero 0
ROM:1001                 ld      (FruitPointer), a ; clear fruit
ROM:1004
ROM:1004 loc_1004:
ROM:1004                 ld      hl, 0
ROM:1007                 ld      (FruitPosition), hl
ROM:100A                 ret
ROM:100A ; End of function ClearFruitPtrPos
ROM:100A
ROM:100B ; ---------------------------------------------------------------------------
ROM:100B                 rst     28h
ROM:100B ; ---------------------------------------------------------------------------
ROM:100C                 db 1Ch
ROM:100D                 db 9Bh
ROM:100E ; ---------------------------------------------------------------------------
ROM:100E                 ld      a, (MainMode)
ROM:1011                 dec     a
ROM:1012                 ret     z
ROM:1013                 rst     28h
ROM:1013 ; ---------------------------------------------------------------------------
ROM:1014                 db 1Ch
ROM:1015                 db 0A2h
ROM:1016 ; ---------------------------------------------------------------------------
ROM:1016                 ret
ROM:1017
ROM:1017 ; =============== S U B R O U T I N E =======================================
ROM:1017
ROM:1017
ROM:1017 sub_1017:
ROM:1017                 call    sub_1291
ROM:101A                 ld      a, (PacManDeathAnim)
ROM:101D                 and     a
ROM:101E                 ret     nz
ROM:101F                 call    sub_1066
ROM:1022                 call    sub_1094
ROM:1025                 call    loc_109E
ROM:1028                 call    sub_10A8
ROM:102B                 call    loc_10B3+1
ROM:102E                 ld      a, (DeadGhostIndex)
ROM:1031                 and     a
ROM:1032                 jp      z, loc_1039
ROM:1035                 call    sub_1235
ROM:1038                 ret
ROM:1039 ; ---------------------------------------------------------------------------
ROM:1039
ROM:1039 loc_1039:
ROM:1039                 call    GhostCollision
ROM:103C                 call    CollideWithBlue ; check for collision with blue ghost
ROM:103F                 ld      a, (DeadGhostIndex)
ROM:1042                 and     a
ROM:1043                 ret     nz
ROM:1044                 call    sub_1806
ROM:1047                 call    sub_1B36
ROM:104A                 call    sub_1C4B
ROM:104D                 call    sub_1D22
ROM:1050                 call    sub_1DF9
ROM:1053                 ld      a, (LevelComplete)
ROM:1056                 cp      3
ROM:1058                 ret     nz
ROM:1059                 call    ControlBlueTime ; control blue time
ROM:105C                 call    CheckPinkLeave
ROM:105F                 call    CheckBlueLeave
ROM:1062                 call    CheckOrangeLeave
ROM:1065                 ret
ROM:1065 ; End of function sub_1017
ROM:1065
ROM:1066
ROM:1066 ; =============== S U B R O U T I N E =======================================
ROM:1066
ROM:1066
ROM:1066 sub_1066:
ROM:1066                 ld      a, (KillingGhostState)
ROM:1069                 and     a
ROM:106A                 ret     z
ROM:106B                 dec     a
ROM:106C                 jr      nz, loc_1076
ROM:106E
ROM:106E loc_106E:
ROM:106E                 ld      (KillingGhostState), a
ROM:1071                 inc     a
ROM:1072                 ld      (RedState), a
ROM:1075                 ret
ROM:1076 ; ---------------------------------------------------------------------------
ROM:1076
ROM:1076 loc_1076:
ROM:1076                 dec     a
ROM:1077                 jr      nz, loc_1081
ROM:1079                 ld      (KillingGhostState), a
ROM:107C                 inc     a
ROM:107D                 ld      (PinkState), a
ROM:1080                 ret
ROM:1081 ; ---------------------------------------------------------------------------
ROM:1081
ROM:1081 loc_1081:
ROM:1081                 dec     a
ROM:1082                 jr      nz, loc_108C
ROM:1084                 ld      (KillingGhostState), a
ROM:1087                 inc     a
ROM:1088                 ld      (BlueState), a
ROM:108B                 ret
ROM:108C ; ---------------------------------------------------------------------------
ROM:108C
ROM:108C loc_108C:
ROM:108C                 ld      (OrangeState), a
ROM:108F                 dec     a
ROM:1090                 ld      (KillingGhostState), a
ROM:1093                 ret
ROM:1093 ; End of function sub_1066
ROM:1093
ROM:1094
ROM:1094 ; =============== S U B R O U T I N E =======================================
ROM:1094
ROM:1094
ROM:1094 sub_1094:
ROM:1094                 ld      a, (RedState)
ROM:1097                 rst     20h
ROM:1097 ; End of function sub_1094
ROM:1097
ROM:1097 ; ---------------------------------------------------------------------------
ROM:1098                 dw 0Ch                  ; return
ROM:109A                 dw 10C0h
ROM:109C                 dw 10D2h
ROM:109E ; ---------------------------------------------------------------------------
ROM:109E
ROM:109E loc_109E:
ROM:109E                 ld      a, (PinkState)
ROM:10A1                 rst     20h
ROM:10A1 ; ---------------------------------------------------------------------------
ROM:10A2                 dw 0Ch                  ; return
ROM:10A4                 dw 1118h
ROM:10A6                 dw 112Ah
ROM:10A8
ROM:10A8 ; =============== S U B R O U T I N E =======================================
ROM:10A8
ROM:10A8
ROM:10A8 sub_10A8:
ROM:10A8                 ld      a, (BlueState)
ROM:10AB                 rst     20h
ROM:10AB ; End of function sub_10A8
ROM:10AB
ROM:10AB ; ---------------------------------------------------------------------------
ROM:10AC                 dw 0Ch                  ; return
ROM:10AE                 dw 115Ch
ROM:10B0                 dw 116Eh
ROM:10B2 ; ---------------------------------------------------------------------------
ROM:10B2                 adc     a, a
ROM:10B3
ROM:10B3 loc_10B3:
ROM:10B3                 ld      de, 0AF3Ah
ROM:10B6                 ld      c, l
ROM:10B7                 rst     20h
ROM:10B7 ; ---------------------------------------------------------------------------
ROM:10B8                 dw 0Ch                  ; return
ROM:10BA                 dw 11C9h
ROM:10BC                 dw 11DBh
ROM:10BE                 dw 11FCh
ROM:10C0
ROM:10C0 ; =============== S U B R O U T I N E =======================================
ROM:10C0
ROM:10C0
ROM:10C0 sub_10C0:
ROM:10C0                 call    loc_1BD8
ROM:10C3                 ld      hl, (RedYPos)   ; Red ghost Y position (decreases bottom to top)
ROM:10C6                 ld      de, 8064h
ROM:10C9                 and     a
ROM:10CA                 sbc     hl, de
ROM:10CC                 ret     nz
ROM:10CD                 ld      hl, 4DACh
ROM:10D0                 inc     (hl)
ROM:10D1                 ret
ROM:10D1 ; End of function sub_10C0
ROM:10D1
ROM:10D2
ROM:10D2 ; =============== S U B R O U T I N E =======================================
ROM:10D2
ROM:10D2
ROM:10D2 sub_10D2:
ROM:10D2                 ld      ix, 3301h
ROM:10D6
ROM:10D6 loc_10D6:
ROM:10D6                 ld      iy, 4D00h
ROM:10DA                 call    DoubleAdd
ROM:10DD                 ld      (RedYPos), hl   ; Red ghost Y position (decreases bottom to top)
ROM:10E0                 ld      a, 1
ROM:10E2                 ld      (word_4D28), a
ROM:10E5                 ld      (word_4D2C), a
ROM:10E8                 ld      a, (RedYPos)    ; Red ghost Y position (decreases bottom to top)
ROM:10EB                 cp      80h ; 'Ç'
ROM:10ED                 ret     nz
ROM:10EE                 ld      hl, 2E2Fh
ROM:10F1                 ld      (RedTileY), hl
ROM:10F4                 ld      (word_4D31), hl
ROM:10F7                 xor     a
ROM:10F8                 ld      (RedSubstate), a
ROM:10FB                 ld      (RedState), a
ROM:10FE                 ld      (RedGhostFlag), a
ROM:1101
ROM:1101 loc_1101:
ROM:1101                 ld      ix, 4DACh
ROM:1105                 or      (ix+0)
ROM:1108                 or      (ix+1)
ROM:110B                 or      (ix+2)
ROM:110E                 or      (ix+3)
ROM:1111                 ret     nz
ROM:1112                 ld      hl, 4EACh
ROM:1115                 res     6, (hl)
ROM:1117                 ret
ROM:1117 ; End of function sub_10D2
ROM:1117
ROM:1118
ROM:1118 ; =============== S U B R O U T I N E =======================================
ROM:1118
ROM:1118
ROM:1118 sub_1118:
ROM:1118                 call    loc_1CAF
ROM:111B                 ld      hl, (PinkYPos)
ROM:111E                 ld      de, 8064h
ROM:1121                 and     a
ROM:1122                 sbc     hl, de
ROM:1124                 ret     nz
ROM:1125                 ld      hl, 4DADh
ROM:1128                 inc     (hl)
ROM:1129                 ret
ROM:1129 ; End of function sub_1118
ROM:1129
ROM:112A
ROM:112A ; =============== S U B R O U T I N E =======================================
ROM:112A
ROM:112A
ROM:112A sub_112A:
ROM:112A                 ld      ix, 3301h
ROM:112E                 ld      iy, 4D02h
ROM:1132                 call    DoubleAdd
ROM:1135                 ld      (PinkYPos), hl
ROM:1138                 ld      a, 1
ROM:113A                 ld      (word_4D28+1), a
ROM:113D                 ld      (word_4D2C+1), a
ROM:1140                 ld      a, (PinkYPos)
ROM:1143                 cp      80h ; 'Ç'
ROM:1145                 ret     nz
ROM:1146                 ld      hl, 2E2Fh
ROM:1149                 ld      (PinkTileY), hl
ROM:114C                 ld      (word_4D33), hl
ROM:114F                 xor     a
ROM:1150                 ld      (PinkSubstate), a
ROM:1153                 ld      (PinkState), a
ROM:1156                 ld      (PinkGhostFlag), a
ROM:1159                 jp      loc_1101
ROM:1159 ; End of function sub_112A
ROM:1159
ROM:115C
ROM:115C ; =============== S U B R O U T I N E =======================================
ROM:115C
ROM:115C
ROM:115C sub_115C:
ROM:115C                 call    loc_1D86
ROM:115F                 ld      hl, (BlueYPos)
ROM:1162                 ld      de, 8064h
ROM:1165                 and     a
ROM:1166                 sbc     hl, de
ROM:1168                 ret     nz
ROM:1169                 ld      hl, 4DAEh
ROM:116C                 inc     (hl)
ROM:116D                 ret
ROM:116D ; End of function sub_115C
ROM:116D
ROM:116E
ROM:116E ; =============== S U B R O U T I N E =======================================
ROM:116E
ROM:116E
ROM:116E sub_116E:
ROM:116E                 ld      ix, 3301h
ROM:1172                 ld      iy, 4D04h
ROM:1176                 call    DoubleAdd
ROM:1179                 ld      (BlueYPos), hl
ROM:117C                 ld      a, 1
ROM:117E                 ld      (word_4D2A), a
ROM:1181                 ld      (BlueDirection), a
ROM:1184                 ld      a, (BlueYPos)
ROM:1187                 cp      80h ; 'Ç'
ROM:1189                 ret     nz
ROM:118A                 ld      hl, 4DAEh
ROM:118D                 inc     (hl)
ROM:118E                 ret
ROM:118E ; End of function sub_116E
ROM:118E
ROM:118F ; ---------------------------------------------------------------------------
ROM:118F                 ld      ix, 3303h
ROM:1193                 ld      iy, 4D04h
ROM:1197                 call    DoubleAdd
ROM:119A                 ld      (BlueYPos), hl
ROM:119D                 ld      a, 2
ROM:119F                 ld      (word_4D2A), a
ROM:11A2                 ld      (BlueDirection), a
ROM:11A5                 ld      a, (BlueXPos)
ROM:11A8                 cp      90h ; 'É'
ROM:11AA                 ret     nz
ROM:11AB                 ld      hl, 302Fh
ROM:11AE                 ld      (BlueTileY), hl
ROM:11B1                 ld      (word_4D35), hl
ROM:11B4                 ld      a, 1
ROM:11B6                 ld      (word_4D2A), a
ROM:11B9                 ld      (BlueDirection), a
ROM:11BC                 xor     a
ROM:11BD                 ld      (BlueSubstate), a
ROM:11C0                 ld      (BlueState), a
ROM:11C3                 ld      (BlueGhostFlag), a
ROM:11C6                 jp      loc_1101
ROM:11C9 ; ---------------------------------------------------------------------------
ROM:11C9                 call    loc_1E5D
ROM:11CC                 ld      hl, (OrangeYPos)
ROM:11CF                 ld      de, 8064h
ROM:11D2                 and     a
ROM:11D3                 sbc     hl, de
ROM:11D5                 ret     nz
ROM:11D6                 ld      hl, 4DAFh
ROM:11D9                 inc     (hl)
ROM:11DA                 ret
ROM:11DB ; ---------------------------------------------------------------------------
ROM:11DB                 ld      ix, 3301h
ROM:11DF                 ld      iy, 4D06h
ROM:11E3                 call    DoubleAdd
ROM:11E6                 ld      (OrangeYPos), hl
ROM:11E9                 ld      a, 1
ROM:11EB                 ld      (word_4D2A+1), a
ROM:11EE                 ld      (BlueDirection+1), a
ROM:11F1                 ld      a, (OrangeYPos)
ROM:11F4                 cp      80h ; 'Ç'
ROM:11F6                 ret     nz
ROM:11F7                 ld      hl, 4DAFh
ROM:11FA                 inc     (hl)
ROM:11FB                 ret
ROM:11FC ; ---------------------------------------------------------------------------
ROM:11FC                 ld      ix, 32FFh
ROM:1200                 ld      iy, 4D06h
ROM:1204                 call    DoubleAdd
ROM:1207                 ld      (OrangeYPos), hl
ROM:120A                 xor     a
ROM:120B                 ld      (word_4D2A+1), a
ROM:120E                 ld      (BlueDirection+1), a
ROM:1211                 ld      a, (OrangeXPos)
ROM:1214                 cp      70h ; 'p'
ROM:1216                 ret     nz
ROM:1217                 ld      hl, 2C2Fh
ROM:121A                 ld      (OrangeTileY), hl
ROM:121D                 ld      (word_4D37), hl
ROM:1220                 ld      a, 1
ROM:1222                 ld      (word_4D2A+1), a
ROM:1225                 ld      (BlueDirection+1), a
ROM:1228                 xor     a
ROM:1229                 ld      (OrangeSubstate), a
ROM:122C                 ld      (OrangeState), a
ROM:122F                 ld      (OrangeGhostFlag), a
ROM:1232                 jp      loc_1101
ROM:1235
ROM:1235 ; =============== S U B R O U T I N E =======================================
ROM:1235
ROM:1235
ROM:1235 sub_1235:
ROM:1235                 ld      a, (byte_4DD1)
ROM:1238                 rst     20h
ROM:1239                 ccf
ROM:123A                 ld      (de), a
ROM:123B                 inc     c
ROM:123C                 nop
ROM:123D                 ccf
ROM:123E                 ld      (de), a
ROM:123F                 ld      hl, 4C00h
ROM:1242                 ld      a, (DeadGhostIndex)
ROM:1245                 add     a, a
ROM:1246                 ld      e, a
ROM:1247                 ld      d, 0
ROM:1249                 add     hl, de
ROM:124A                 ld      a, (byte_4DD1)
ROM:124D                 and     a
ROM:124E                 jr      nz, loc_1277
ROM:1250                 ld      a, (byte_4DD0)
ROM:1253                 ld      b, 27h ; '''
ROM:1255                 add     a, b
ROM:1256                 ld      b, a
ROM:1257                 ld      a, (CocktailMode)
ROM:125A                 ld      c, a
ROM:125B                 ld      a, (PlayerNumber)
ROM:125E                 and     c
ROM:125F                 jr      z, loc_1265
ROM:1261                 set     6, b
ROM:1263                 set     7, b
ROM:1265
ROM:1265 loc_1265:
ROM:1265                 ld      (hl), b
ROM:1266                 inc     hl
ROM:1267                 ld      (hl), 18h
ROM:1269                 ld      a, 0
ROM:126B                 ld      (PacmanSpriteColor), a
ROM:126E                 rst     30h             ; store IRQ task
ROM:126E ; ---------------------------------------------------------------------------
ROM:126F                 db 4Ah
ROM:1270                 db 3
ROM:1271                 db 0
ROM:1272 ; ---------------------------------------------------------------------------
ROM:1272                 ld      hl, 4DD1h
ROM:1275                 inc     (hl)
ROM:1276                 ret
ROM:1277 ; ---------------------------------------------------------------------------
ROM:1277
ROM:1277 loc_1277:
ROM:1277                 ld      (hl), 20h ; ' '
ROM:1279                 ld      a, 9
ROM:127B                 ld      (PacmanSpriteColor), a
ROM:127E                 ld      a, (DeadGhostIndex)
ROM:1281                 ld      (KillingGhostState), a
ROM:1284                 xor     a
ROM:1285                 ld      (DeadGhostIndex), a
ROM:1288                 ld      (byte_4DD1), a
ROM:128B                 ld      hl, 4EACh
ROM:128E                 set     6, (hl)
ROM:1290                 ret
ROM:1290 ; End of function sub_1235
ROM:1290
ROM:1291
ROM:1291 ; =============== S U B R O U T I N E =======================================
ROM:1291
ROM:1291
ROM:1291 sub_1291:
ROM:1291                 ld      a, (PacManDeathAnim)
ROM:1294                 rst     20h
ROM:1294 ; End of function sub_1291
ROM:1294
ROM:1294 ; ---------------------------------------------------------------------------
ROM:1295 Table:          dw 0Ch
ROM:1297                 dw 12B7h
ROM:1299                 dw 12B7h
ROM:129B                 dw 12B7h
ROM:129D                 dw 12B7h
ROM:129F                 dw 12CBh
ROM:12A1                 dw 12F9h
ROM:12A3                 dw 1306h
ROM:12A5                 dw 130Eh
ROM:12A7                 dw 1316h
ROM:12A9                 dw 131Eh
ROM:12AB                 dw 1326h
ROM:12AD                 dw 132Eh
ROM:12AF                 dw 1336h
ROM:12B1                 dw 133Eh
ROM:12B3                 dw 1346h
ROM:12B5                 dw 1353h
ROM:12B7 ; ---------------------------------------------------------------------------
ROM:12B7                 ld      hl, (word_4DC5)
ROM:12BA                 inc     hl
ROM:12BB                 ld      (word_4DC5), hl
ROM:12BE                 ld      de, 78h ; 'x'
ROM:12C1                 and     a
ROM:12C2                 sbc     hl, de
ROM:12C4                 ret     nz
ROM:12C5                 ld      a, 5
ROM:12C7                 ld      (PacManDeathAnim), a
ROM:12CA                 ret
ROM:12CB
ROM:12CB ; =============== S U B R O U T I N E =======================================
ROM:12CB
ROM:12CB
ROM:12CB sub_12CB:
ROM:12CB                 ld      hl, 0
ROM:12CE                 call    sub_267E
ROM:12D1                 ld      a, 34h ; '4'
ROM:12D3                 ld      de, 0B4h ; '¦'
ROM:12D6
ROM:12D6 loc_12D6:
ROM:12D6                 ld      c, a
ROM:12D7                 ld      a, (CocktailMode)
ROM:12DA                 ld      b, a
ROM:12DB                 ld      a, (PlayerNumber)
ROM:12DE                 and     b
ROM:12DF                 jr      z, loc_12E5
ROM:12E1                 ld      a, 0C0h ; '+'
ROM:12E3                 or      c
ROM:12E4                 ld      c, a
ROM:12E5
ROM:12E5 loc_12E5:
ROM:12E5                 ld      a, c
ROM:12E6                 ld      (PacmanSpriteNum), a
ROM:12E9                 ld      hl, (word_4DC5)
ROM:12EC                 inc     hl
ROM:12ED                 ld      (word_4DC5), hl
ROM:12F0                 and     a
ROM:12F1                 sbc     hl, de
ROM:12F3                 ret     nz
ROM:12F4                 ld      hl, 4DA5h
ROM:12F7                 inc     (hl)
ROM:12F8                 ret
ROM:12F8 ; End of function sub_12CB
ROM:12F8
ROM:12F9
ROM:12F9 ; =============== S U B R O U T I N E =======================================
ROM:12F9
ROM:12F9
ROM:12F9 sub_12F9:
ROM:12F9                 ld      hl, 4EBCh
ROM:12FC                 set     4, (hl)
ROM:12FE                 ld      a, 35h ; '5'
ROM:1300                 ld      de, 0C3h ; '+'
ROM:1303                 jp      loc_12D6
ROM:1303 ; End of function sub_12F9
ROM:1303
ROM:1306
ROM:1306 ; =============== S U B R O U T I N E =======================================
ROM:1306
ROM:1306
ROM:1306 sub_1306:
ROM:1306                 ld      a, 36h ; '6'
ROM:1308                 ld      de, 0D2h ; '-'
ROM:130B                 jp      loc_12D6
ROM:130B ; End of function sub_1306
ROM:130B
ROM:130E
ROM:130E ; =============== S U B R O U T I N E =======================================
ROM:130E
ROM:130E
ROM:130E sub_130E:
ROM:130E                 ld      a, 37h ; '7'
ROM:1310                 ld      de, 0E1h ; 'ß'
ROM:1313                 jp      loc_12D6
ROM:1313 ; End of function sub_130E
ROM:1313
ROM:1316
ROM:1316 ; =============== S U B R O U T I N E =======================================
ROM:1316
ROM:1316
ROM:1316 sub_1316:
ROM:1316                 ld      a, 38h ; '8'
ROM:1318                 ld      de, 0F0h ; '='
ROM:131B                 jp      loc_12D6
ROM:131B ; End of function sub_1316
ROM:131B
ROM:131E
ROM:131E ; =============== S U B R O U T I N E =======================================
ROM:131E
ROM:131E
ROM:131E sub_131E:
ROM:131E                 ld      a, 39h ; '9'
ROM:1320                 ld      de, 0FFh
ROM:1323                 jp      loc_12D6
ROM:1323 ; End of function sub_131E
ROM:1323
ROM:1326
ROM:1326 ; =============== S U B R O U T I N E =======================================
ROM:1326
ROM:1326
ROM:1326 sub_1326:
ROM:1326                 ld      a, 3Ah ; ':'
ROM:1328                 ld      de, 10Eh
ROM:132B                 jp      loc_12D6
ROM:132B ; End of function sub_1326
ROM:132B
ROM:132E
ROM:132E ; =============== S U B R O U T I N E =======================================
ROM:132E
ROM:132E
ROM:132E sub_132E:
ROM:132E                 ld      a, 3Bh ; ';'
ROM:1330                 ld      de, 11Dh
ROM:1333                 jp      loc_12D6
ROM:1333 ; End of function sub_132E
ROM:1333
ROM:1336
ROM:1336 ; =============== S U B R O U T I N E =======================================
ROM:1336
ROM:1336
ROM:1336 sub_1336:
ROM:1336                 ld      a, 3Ch ; '<'
ROM:1338                 ld      de, 12Ch
ROM:133B                 jp      loc_12D6
ROM:133B ; End of function sub_1336
ROM:133B
ROM:133E
ROM:133E ; =============== S U B R O U T I N E =======================================
ROM:133E
ROM:133E
ROM:133E sub_133E:
ROM:133E                 ld      a, 3Dh ; '='
ROM:1340                 ld      de, 13Bh
ROM:1343                 jp      loc_12D6
ROM:1343 ; End of function sub_133E
ROM:1343
ROM:1346
ROM:1346 ; =============== S U B R O U T I N E =======================================
ROM:1346
ROM:1346
ROM:1346 sub_1346:
ROM:1346                 ld      hl, 4EBCh
ROM:1349                 ld      (hl), 20h ; ' '
ROM:134B                 ld      a, 3Eh ; '>'
ROM:134D                 ld      de, 159h
ROM:1350                 jp      loc_12D6
ROM:1350 ; End of function sub_1346
ROM:1350
ROM:1353 ;Game end testing
ROM:1353
ROM:1353 ; =============== S U B R O U T I N E =======================================
ROM:1353
ROM:1353
ROM:1353 sub_1353:
ROM:1353                 ld      a, 3Fh ; '?'
ROM:1355                 ld      (PacmanSpriteNum), a
ROM:1358                 ld      hl, (word_4DC5)
ROM:135B                 inc     hl
ROM:135C                 ld      (word_4DC5), hl
ROM:135F                 ld      de, 1B8h
ROM:1362                 and     a
ROM:1363                 sbc     hl, de
ROM:1365                 ret     nz
ROM:1366 ;decrement lives
ROM:1366 ; called after death animation,
ROM:1366 ; but before screen redrawn
ROM:1366 ; good hook for "Insert Coin To Continue"
ROM:1366                 ld      hl, 4E14h       ; hl - lives left
ROM:1369                 dec     (hl)            ; one less
ROM:136A                 ld      hl, 4E15h       ; lives on screen
ROM:136D                 dec     (hl)            ; one less
ROM:136E                 call    ClearPositions  ; todo?
ROM:1371                 ld      hl, 4E04h       ; 3=ghost move, 2 = ghost wait
ROM:1374                 inc     (hl)
ROM:1375                 ret
ROM:1375 ; End of function sub_1353
ROM:1375
ROM:1376
ROM:1376 ; =============== S U B R O U T I N E =======================================
ROM:1376
ROM:1376
ROM:1376 ControlBlueTime:
ROM:1376                 ld      a, (PillEffect)
ROM:1379                 and     a
ROM:137A                 ret     z
ROM:137B                 ld      ix, 4DA7h
ROM:137F                 ld      a, (ix+0)
ROM:1382                 or      (ix+1)
ROM:1385                 or      (ix+2)
ROM:1388                 or      (ix+3)
ROM:138B                 jp      z, loc_1398
ROM:138E                 ld      hl, (word_4DCB)
ROM:1391                 dec     hl
ROM:1392                 ld      (word_4DCB), hl
ROM:1395                 ld      a, h
ROM:1396                 or      l
ROM:1397                 ret     nz
ROM:1398
ROM:1398 loc_1398:
ROM:1398                 ld      hl, 4C0Bh
ROM:139B                 ld      (hl), 9
ROM:139D                 ld      a, (RedState)
ROM:13A0                 and     a
ROM:13A1                 jp      nz, loc_13A7
ROM:13A4                 ld      (RedGhostFlag), a
ROM:13A7
ROM:13A7 loc_13A7:
ROM:13A7                 ld      a, (PinkState)
ROM:13AA                 and     a
ROM:13AB                 jp      nz, loc_13B1
ROM:13AE                 ld      (PinkGhostFlag), a
ROM:13B1
ROM:13B1 loc_13B1:
ROM:13B1                 ld      a, (BlueState)
ROM:13B4                 and     a
ROM:13B5                 jp      nz, loc_13BB
ROM:13B8                 ld      (BlueGhostFlag), a
ROM:13BB
ROM:13BB loc_13BB:
ROM:13BB                 ld      a, (OrangeState)
ROM:13BE                 and     a
ROM:13BF                 jp      nz, loc_13C5
ROM:13C2                 ld      (OrangeGhostFlag), a
ROM:13C5
ROM:13C5 loc_13C5:
ROM:13C5                 xor     a
ROM:13C6                 ld      (word_4DCB), a
ROM:13C9                 ld      (word_4DCB+1), a
ROM:13CC                 ld      (PillEffect), a
ROM:13CF                 ld      (byte_4DC8), a
ROM:13D2                 ld      (byte_4DD0), a
ROM:13D5                 ld      hl, 4EACh
ROM:13D8                 res     5, (hl)
ROM:13DA                 res     7, (hl)
ROM:13DC                 ret
ROM:13DC ; End of function ControlBlueTime
ROM:13DC
ROM:13DD
ROM:13DD ; =============== S U B R O U T I N E =======================================
ROM:13DD
ROM:13DD
ROM:13DD sub_13DD:
ROM:13DD                 ld      hl, 4D9Eh
ROM:13E0                 ld      a, (PelletsEaten)
ROM:13E3                 cp      (hl)
ROM:13E4                 jp      z, loc_13EE
ROM:13E7                 ld      hl, 0
ROM:13EA                 ld      (word_4D97), hl
ROM:13ED                 ret
ROM:13EE ; ---------------------------------------------------------------------------
ROM:13EE
ROM:13EE loc_13EE:
ROM:13EE                 ld      hl, (word_4D97)
ROM:13F1                 inc     hl
ROM:13F2                 ld      (word_4D97), hl
ROM:13F5                 ld      de, (word_4D95)
ROM:13F9                 and     a
ROM:13FA                 sbc     hl, de
ROM:13FC                 ret     nz
ROM:13FD                 ld      hl, 0
ROM:1400                 ld      (word_4D97), hl
ROM:1403                 ld      a, (PinkSubstate)
ROM:1406                 and     a
ROM:1407                 push    af
ROM:1408                 call    z, loc_2086
ROM:140B                 pop     af
ROM:140C                 ret     z
ROM:140D                 ld      a, (BlueSubstate)
ROM:1410                 and     a
ROM:1411                 push    af
ROM:1412                 call    z, loc_20A9
ROM:1415                 pop     af
ROM:1416                 ret     z
ROM:1417                 ld      a, (OrangeSubstate)
ROM:141A                 and     a
ROM:141B                 call    z, loc_20D1
ROM:141E                 ret
ROM:141E ; End of function sub_13DD
ROM:141E
ROM:141F
ROM:141F ; =============== S U B R O U T I N E =======================================
ROM:141F
ROM:141F
ROM:141F sub_141F:
ROM:141F                 ld      a, (CocktailMode)
ROM:1422                 ld      b, a
ROM:1423                 ld      a, (PlayerNumber)
ROM:1426                 and     b
ROM:1427                 ret     z
ROM:1428                 ld      b, a
ROM:1429                 ld      ix, 4C00h
ROM:142D                 ld      e, 8
ROM:142F                 ld      c, 8
ROM:1431                 ld      d, 7
ROM:1433                 ld      a, (RedYPos)    ; Red ghost Y position (decreases bottom to top)
ROM:1436                 add     a, e
ROM:1437                 ld      (ix+13h), a
ROM:143A                 ld      a, (RedXPos)    ; Red ghost X position, decreases left to right
ROM:143D                 cpl
ROM:143E                 add     a, d
ROM:143F                 ld      (ix+12h), a
ROM:1442                 ld      a, (PinkYPos)
ROM:1445                 add     a, e
ROM:1446                 ld      (ix+15h), a
ROM:1449                 ld      a, (PinkXPos)
ROM:144C                 cpl
ROM:144D                 add     a, d
ROM:144E                 ld      (ix+14h), a
ROM:1451                 ld      a, (BlueYPos)
ROM:1454                 add     a, e
ROM:1455                 ld      (ix+17h), a
ROM:1458                 ld      a, (BlueXPos)
ROM:145B                 cpl
ROM:145C                 add     a, c
ROM:145D                 ld      (ix+16h), a
ROM:1460                 ld      a, (OrangeYPos)
ROM:1463                 add     a, e
ROM:1464                 ld      (ix+19h), a
ROM:1467                 ld      a, (OrangeXPos)
ROM:146A                 cpl
ROM:146B                 add     a, c
ROM:146C                 ld      (ix+18h), a
ROM:146F                 ld      a, (PacManYPos)
ROM:1472                 add     a, e
ROM:1473                 ld      (ix+1Bh), a
ROM:1476                 ld      a, (PacManXPos)
ROM:1479                 cpl
ROM:147A                 add     a, c
ROM:147B                 ld      (ix+1Ah), a
ROM:147E                 ld      a, (FruitPosition)
ROM:1481                 add     a, e
ROM:1482                 ld      (ix+1Dh), a
ROM:1485                 ld      a, (FruitPosition+1)
ROM:1488                 cpl
ROM:1489                 add     a, c
ROM:148A                 ld      (ix+1Ch), a
ROM:148D                 jp      loc_14FE
ROM:148D ; End of function sub_141F
ROM:148D
ROM:1490
ROM:1490 ; =============== S U B R O U T I N E =======================================
ROM:1490
ROM:1490
ROM:1490 DrawSprites:
ROM:1490                 ld      a, (CocktailMode)
ROM:1493                 ld      b, a
ROM:1494                 ld      a, (PlayerNumber)
ROM:1497                 and     b
ROM:1498                 ret     nz
ROM:1499                 ld      b, a
ROM:149A                 ld      e, 9
ROM:149C                 ld      c, 7
ROM:149E                 ld      d, 6
ROM:14A0                 ld      ix, 4C00h
ROM:14A4                 ld      a, (RedYPos)    ; Red ghost Y position (decreases bottom to top)
ROM:14A7                 cpl
ROM:14A8                 add     a, e
ROM:14A9                 ld      (ix+13h), a
ROM:14AC                 ld      a, (RedXPos)    ; Red ghost X position, decreases left to right
ROM:14AF                 add     a, d
ROM:14B0                 ld      (ix+12h), a
ROM:14B3                 ld      a, (PinkYPos)
ROM:14B6                 cpl
ROM:14B7                 add     a, e
ROM:14B8                 ld      (ix+15h), a
ROM:14BB                 ld      a, (PinkXPos)
ROM:14BE                 add     a, d
ROM:14BF                 ld      (ix+14h), a
ROM:14C2                 ld      a, (BlueYPos)
ROM:14C5                 cpl
ROM:14C6                 add     a, e
ROM:14C7                 ld      (ix+17h), a
ROM:14CA                 ld      a, (BlueXPos)
ROM:14CD                 add     a, c
ROM:14CE                 ld      (ix+16h), a
ROM:14D1                 ld      a, (OrangeYPos)
ROM:14D4                 cpl
ROM:14D5                 add     a, e
ROM:14D6                 ld      (ix+19h), a
ROM:14D9                 ld      a, (OrangeXPos)
ROM:14DC                 add     a, c
ROM:14DD                 ld      (ix+18h), a
ROM:14E0                 ld      a, (PacManYPos)
ROM:14E3                 cpl
ROM:14E4                 add     a, e
ROM:14E5                 ld      (ix+1Bh), a
ROM:14E8                 ld      a, (PacManXPos)
ROM:14EB                 add     a, c
ROM:14EC                 ld      (ix+1Ah), a
ROM:14EF                 ld      a, (FruitPosition)
ROM:14F2                 cpl
ROM:14F3                 add     a, e
ROM:14F4                 ld      (ix+1Dh), a
ROM:14F7                 ld      a, (FruitPosition+1)
ROM:14FA                 add     a, c
ROM:14FB                 ld      (ix+1Ch), a
ROM:14FE
ROM:14FE loc_14FE:
ROM:14FE                 ld      a, (PacManDeathAnim)
ROM:1501                 and     a
ROM:1502                 jp      nz, loc_154B
ROM:1505                 ld      a, (DeadGhostIndex)
ROM:1508                 and     a
ROM:1509                 jp      nz, loc_15B4
ROM:150C                 ld      hl, 151Ch
ROM:150F                 push    hl
ROM:1510                 ld      a, (byte_4D30)
ROM:1513                 rst     20h
ROM:1514                 adc     a, h
ROM:1515                 ld      d, 0B1h ; '¦'
ROM:1517                 ld      d, 0D6h ; '+'
ROM:1519                 ld      d, 0F7h ; '˜'
ROM:151B                 ld      d, 78h ; 'x'
ROM:151D                 and     a
ROM:151E                 jr      z, loc_154B
ROM:1520                 ld      c, 0C0h ; '+'
ROM:1522                 ld      a, (PacmanSpriteNum)
ROM:1525                 ld      d, a
ROM:1526                 and     c
ROM:1527                 jr      nz, loc_152E
ROM:1529                 ld      a, d
ROM:152A                 or      c
ROM:152B                 jp      loc_1548
ROM:152E ; ---------------------------------------------------------------------------
ROM:152E
ROM:152E loc_152E:
ROM:152E                 ld      a, (byte_4D30)
ROM:1531                 cp      2
ROM:1533                 jr      nz, loc_153E
ROM:1535                 bit     7, d
ROM:1537                 jr      z, loc_154B
ROM:1539                 ld      a, d
ROM:153A                 xor     c
ROM:153B                 jp      loc_1548
ROM:153E ; ---------------------------------------------------------------------------
ROM:153E
ROM:153E loc_153E:
ROM:153E                 cp      3
ROM:1540                 jr      nz, loc_154B
ROM:1542                 bit     6, d
ROM:1544                 jr      z, loc_154B
ROM:1546                 ld      a, d
ROM:1547                 xor     c
ROM:1548
ROM:1548 loc_1548:
ROM:1548                 ld      (PacmanSpriteNum), a
ROM:154B
ROM:154B loc_154B:
ROM:154B                 ld      hl, 4DC0h
ROM:154E                 ld      d, (hl)
ROM:154F                 ld      a, 1Ch
ROM:1551                 add     a, d
ROM:1552                 ld      (ix+2), a
ROM:1555                 ld      (ix+4), a
ROM:1558                 ld      (ix+6), a
ROM:155B                 ld      (ix+8), a
ROM:155E                 ld      c, 20h ; ' '
ROM:1560                 ld      a, (RedState)
ROM:1563                 and     a
ROM:1564                 jr      nz, loc_156C
ROM:1566                 ld      a, (RedGhostFlag)
ROM:1569                 and     a
ROM:156A                 jr      nz, loc_1575
ROM:156C
ROM:156C loc_156C:
ROM:156C                 ld      a, (word_4D2C)
ROM:156F                 add     a, a
ROM:1570                 add     a, d
ROM:1571                 add     a, c
ROM:1572                 ld      (ix+2), a
ROM:1575
ROM:1575 loc_1575:
ROM:1575                 ld      a, (PinkState)
ROM:1578                 and     a
ROM:1579                 jr      nz, loc_1581
ROM:157B                 ld      a, (PinkGhostFlag)
ROM:157E                 and     a
ROM:157F                 jr      nz, loc_158A
ROM:1581
ROM:1581 loc_1581:
ROM:1581                 ld      a, (word_4D2C+1)
ROM:1584                 add     a, a
ROM:1585                 add     a, d
ROM:1586                 add     a, c
ROM:1587                 ld      (ix+4), a
ROM:158A
ROM:158A loc_158A:
ROM:158A                 ld      a, (BlueState)
ROM:158D                 and     a
ROM:158E                 jr      nz, loc_1596
ROM:1590                 ld      a, (BlueGhostFlag)
ROM:1593                 and     a
ROM:1594                 jr      nz, loc_159F
ROM:1596
ROM:1596 loc_1596:
ROM:1596                 ld      a, (BlueDirection)
ROM:1599                 add     a, a
ROM:159A                 add     a, d
ROM:159B                 add     a, c
ROM:159C                 ld      (ix+6), a
ROM:159F
ROM:159F loc_159F:
ROM:159F                 ld      a, (OrangeState)
ROM:15A2                 and     a
ROM:15A3                 jr      nz, loc_15AB
ROM:15A5                 ld      a, (OrangeGhostFlag)
ROM:15A8                 and     a
ROM:15A9                 jr      nz, loc_15B4
ROM:15AB
ROM:15AB loc_15AB:
ROM:15AB                 ld      a, (BlueDirection+1)
ROM:15AE                 add     a, a
ROM:15AF                 add     a, d
ROM:15B0                 add     a, c
ROM:15B1                 ld      (ix+8), a
ROM:15B4
ROM:15B4 loc_15B4:
ROM:15B4                 call    sub_15E6
ROM:15B7                 call    sub_162D
ROM:15BA                 call    sub_1652
ROM:15BD                 ld      a, b
ROM:15BE                 and     a
ROM:15BF                 ret     z