From 0cfbcae376dce489195cff1dd740f445b9f4cb44 Mon Sep 17 00:00:00 2001 From: StewBC Date: Wed, 18 Aug 2021 18:38:06 -0700 Subject: [PATCH] Initial Revision This is Manic Miner for the Apple 2 but the source code is in Orca/M format. --- .gitignore | 6 + Makefile | 79 ++ README.md | 40 + _FileInformation.txt | 1 + apple2/template.dsk | Bin 0 -> 143360 bytes apple2/template.po | Bin 0 -> 143360 bytes src/Macros/macros.s | 70 + src/audio.asm | 125 ++ src/defs.s | 283 ++++ src/game.asm | 859 +++++++++++ src/input.asm | 228 +++ src/level.asm | 131 ++ src/logo.s | 527 +++++++ src/mminer.asm | 67 + src/roaudio.asm | 71 + src/rofont.asm | 974 +++++++++++++ src/rolevels.asm | 585 ++++++++ src/rosprites.asm | 3212 ++++++++++++++++++++++++++++++++++++++++++ src/rosystem.asm | 304 ++++ src/rotext.asm | 64 + src/rotiles.asm | 566 ++++++++ src/screen.asm | 3085 ++++++++++++++++++++++++++++++++++++++++ src/sprite.asm | 382 +++++ src/text.asm | 308 ++++ src/tiles.asm | 443 ++++++ src/ui.asm | 449 ++++++ src/variables.asm | 48 + src/willy.asm | 533 +++++++ 28 files changed, 13440 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 _FileInformation.txt create mode 100644 apple2/template.dsk create mode 100644 apple2/template.po create mode 100644 src/Macros/macros.s create mode 100644 src/audio.asm create mode 100644 src/defs.s create mode 100644 src/game.asm create mode 100644 src/input.asm create mode 100644 src/level.asm create mode 100644 src/logo.s create mode 100644 src/mminer.asm create mode 100644 src/roaudio.asm create mode 100644 src/rofont.asm create mode 100644 src/rolevels.asm create mode 100644 src/rosprites.asm create mode 100644 src/rosystem.asm create mode 100644 src/rotext.asm create mode 100644 src/rotiles.asm create mode 100644 src/screen.asm create mode 100644 src/sprite.asm create mode 100644 src/text.asm create mode 100644 src/tiles.asm create mode 100644 src/ui.asm create mode 100644 src/variables.asm create mode 100644 src/willy.asm diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8129639 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.vscode/* +/src/*.mac +/obj/ +/debug* +/mminer.po +/MMINER diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..be937d4 --- /dev/null +++ b/Makefile @@ -0,0 +1,79 @@ +# Settings +PROGRAM := MMINER +SRCDIR := src +TARGETOBJDIR := obj +TEMPLATE := apple2/template.po +DISK := mminer.po +VOLUME := MANIC +CADIUS := $(CADIUS) +ORCA := $(ORACInclude) +SED := $(SED) +AWK := $(AWK) +EMUDIR := $(APPLEWIN_HOME) +EMU := applewin.exe -d1 $(DISK) + + +all: $(PROGRAM) + +ifeq ($(shell echo),) + MKDIR = mkdir -p $1 + RMDIR = rmdir $1 + RMFILES = $(RM) $1 + CP = cp $1 +else + MKDIR = mkdir $(subst /,\,$1) + RMDIR = rmdir /S /Q $(subst /,\,$1) + RMFILES = $(if $1,del /f /q $(subst /,\,$1)) + CP = copy $(subst /,\,$1) +endif + +define NEWLINE + + +endef + +SOURCES += $(wildcard $(SRCDIR)/*.asm) +SOURCES := $(filter-out $(SRCDIR)/mminer.asm,$(SOURCES)) +SOURCES := $(SRCDIR)/mminer.asm $(SOURCES) +OBJECTS += $(subst .asm,.ROOT,$(subst $(SRCDIR),$(TARGETOBJDIR),$(SOURCES))) + +vpath %.asm $(SRCDIR) + +$(TARGETOBJDIR): + $(call MKDIR,$@) + +$(TARGETOBJDIR)/%.ROOT: %.asm $(wildcard $(SRCDIR)/*.s) $(wildcard $(SRCDIR)/*.mac) | $(TARGETOBJDIR) + iix assemble $< keep=$(subst /,:,$(basename $@)) + +$(PROGRAM): $(OBJECTS) + -$(call RMFILES,$(PROGRAM)) + iix link +S $(OBJECTS) keep=$@ > debug0.map + iix makebin $@ + +.PHONY: all dsk test macros + +all: $(PROGRAM) + +dsk: $(PROGRAM) + $(call CP,$(TEMPLATE) $(DISK)) + $(CADIUS) ADDFILE $(DISK) /$(VOLUME) ./$(PROGRAM) + +test: dsk + $(SED) '9{:a;N;$$!ba;s/\n/ /g; s/\(\w\+\) . .. .. \(\w\+\)\s*/0x\1 \2\n/g;}' debug0.map > temp.map + $(AWK) --non-decimal-data 'NR>8 {$$1 += 0x4000; printf "%x %s\n", $$1, $$2}' temp.map > debug.map + $(call RMFILES,temp.map) + $(call CP,debug.map $(EMUDIR)/A2_USER1.SYM) + $(EMUDIR)/$(EMU) + +macros: + $(foreach FILE, $(SOURCES), iix macgen $(FILE) $(subst .asm,.mac,$(FILE)) $(ORACInclude)/m16= src/Macros/macros.s ${NEWLINE}) + +clean: + -$(call RMFILES,$(OBJECTS)) + -$(call RMFILES,$(addsuffix .A,$(basename $(OBJECTS)))) + -$(call RMFILES,debug*.map) + -$(call RMFILES,$(PROGRAM)) + -$(call RMFILES,$(DISK)) + +zap: clean + -$(call RMDIR,$(TARGETOBJDIR)) diff --git a/README.md b/README.md new file mode 100644 index 0000000..974cc45 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Manic Miner - Orca/M version + +This is the exact same version as the mminer-apple2 version (https://github.com/StewBC/mminer-apple2), except this has been changed to compile with the Orca/M assembler. Orca/M is an assembler that runs on Apple II hardware (I am using the Apple IIgs version, even though I am targeting the Apple II). I am also using this software on Windows - see below. + +To learn more about Orca/M, see https://juiced.gs/store/opus-ii-software/ + +## Building + +The Makefile is for GNU Make and I am using it on a Windows PC. It needs a few environment variables to be set. These are: + +1. AWK and SED which turns the linker symbol output into a form usable with AppleWin. This can be commented out as it is not at all esential - it's only good for seeing the labels in the AppleWin debugger. If you use PowerShell on Windows, the below will set the AWK and SED environment variables: + +$env:AWK="`"C:/Program Files/Git/usr/bin/gawk.exe`"" +$env:SED="`"C:/Program Files/Git/usr/bin/sed.exe`"" + +(Notice the back-tick quoting of the inner quotes so PowerShell doesn't freak out) + +2. I use Cadius (https://www.brutaldeluxe.fr/products/crossdevtools/cadius/) to add the executable to a disk image. I also formatted the code using Cadius. The following is where I have cadius installed: + +$env:CADIUS="C:/Users/swessels/Apps/bin/Cadius.exe" + +Cadius uses a hidden file called _FileInformation.txt to store meta information about the files it manipulates in the image. The most important bits are MMINER=Type(06),AuxType(4000) which says the file MMINER should be given the Binary type and Auxiliary data of $4000. + +3. Lastly, I use Orca with GoldenGate to compile on a Windows PC. To learn more about GoldenGate, look at https://juiced.gs/store/golden-gate/ + +$env:ORACInclude="C:/ProgramData/GoldenGate/Libraries/ORCAInclude" + +Once all is set to go, the first step is: +make macros + +If this doesn't work, make sure the file src/Macros/macros.s has LF line endings. If it is CRLF then macgen is unhappy. + +Then make will build or make dsk will build and generate mminer.po or make test which will make the disk and run it in an emulator (Configured for AppleWin). + +make clean will delete intermediate files and make zap will delete intermediate files as well as remove the obj folder. + +I think that's about it! +Stefan Wessels +swessels@email.com +18 August 2021 diff --git a/_FileInformation.txt b/_FileInformation.txt new file mode 100644 index 0000000..38c5ab0 --- /dev/null +++ b/_FileInformation.txt @@ -0,0 +1 @@ +MMINER=Type(06),AuxType(4000),VersionCreate(00),MinVersion(80),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000) \ No newline at end of file diff --git a/apple2/template.dsk b/apple2/template.dsk new file mode 100644 index 0000000000000000000000000000000000000000..a6b5adbc0b919c3b15ae755a5c9823085d78c4a2 GIT binary patch literal 143360 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
5_da?TnDmSI#iX}ErM3; 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 literal 0 HcmV?d00001 diff --git a/src/Macros/macros.s b/src/Macros/macros.s new file mode 100644 index 0000000..735e6fb --- /dev/null +++ b/src/Macros/macros.s @@ -0,0 +1,70 @@ +;----------------------------------------------------------------------------- +; macro to take text address and split it into lo and hi (shorthand) +; macro +; printXY &xpos,&ypos,&text,&len,&colorMask,&inverse +; printXYlh &xpos,&ypos,#<&text,#>&text,&len,&colorMask,&inverse +; mend + +;----------------------------------------------------------------------------- +; Macro that takes a lo and hi for the text with optional color and invert wanted +; sets up what's needed to call textShow which does the printing + macro + printXYlh &xpos,&ypos,&textL,&textH,&len,&colorMask,&inverse + aif C:&colorMask>0,.cmgiven + lda #$ff ; no color (white) is a mask of $ff left and right + sta dstPtrL + sta dstPtrL+1 + ago .nocm +.cmgiven + ldx &colorMask ; this is an index into mask[Left|Right] + lda masksLeft,x + sta dstPtrL + lda masksRight,x + sta dstPtrL+1 +.nocm + aif C:&inverse>0,.invgiven + lda #0 ; eor o is not inverse + ago .noinv +.invgiven + lda #$7f ; eor $7f inverts the color (leave MSB) +.noinv + + sta eorMask+1 ; set the eor in the code + + lda &textL ; set the string pointer in the code + sta read0+1 + lda &textH + sta read0+2 + ldx &len ; 0 based + stx sizeL + lda &xpos ; and x/y coords in x and y registers + asl a + tax + ldy &ypos + jsr textShowText ; print that string + mend + +;----------------------------------------------------------------------------- +; Prep uiShowMMText internal variables with data relevant for the +; specific text the macro is called with + macro + uiShowMMTextXY &column,&row,&data,&widths,&colors + + lda #<&data ; MANIC or MINER bit-arrays + sta dataLoc+1 + lda #>&data + sta dataLoc+2 + lda #<&widths + sta widthLoc+1 ; array of letter-widths in MANIC or MINER + lda #>&widths + sta widthLoc+2 + lda #<&colors ; array of letter colors in the words + sta colorLoc+1 + lda #>&colors + sta colorLoc+2 + ldx &column ; screen location passed in x/y + ldy &row + jsr uiShowMMText ; show the word on-screen + + mend + diff --git a/src/audio.asm b/src/audio.asm new file mode 100644 index 0000000..a9ba719 --- /dev/null +++ b/src/audio.asm @@ -0,0 +1,125 @@ +;----------------------------------------------------------------------------- +; audio.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +AUDIO start + +;----------------------------------------------------------------------------- +audioPlayTitleNote entry + +fixedDuration equ srcPtrL +noteDuration equ srcPtrH +freqTimer1 equ dstPtrL +freqTimer2 equ dstPtrH + + + ldy #0 ; load the duration + lda (musicL),y + beq reset ; on 0, the song is done + sta noteDuration + + lda audioMask ; see if the note should be played or simply delayed + and #AUDIO_MUSIC + bne apt0 ; audio is on, go play + jsr uiDelay ; waste time as though a note was played + jmp leave ; and move the audio pointer along + +apt0 iny ; load the 1st timer + lda (musicL),y + sta freqTimer1 + iny ; load the second timer + lda (musicL),y + sta freqTimer2 + +preplay anop + lda #$8A ; repeat minimum this much + sta fixedDuration +tplay anop + lda SPEAKER ; toggle the speaker + dec freqTimer1 ; timer1 down + bne apt2 ; not zero, go to timer 2 + ldy #1 ; reset timer 1 + lda (musicL),y + sta freqTimer1 + ldx #11 ; delay about 20 clock cycles +apt1 dex + bne apt1 +apt2 dec freqTimer2 ; dec timer 2 + bne apt4 ; not zero? + ldy #2 ; at zero, reset timer 2 + lda (musicL),y + sta freqTimer2 + ldx #11 ; and waste 20 clock cycles +apt3 dex + bne apt3 +apt4 dec fixedDuration ; dec the fixed repeat count + bne tplay ; not zero, do another loop + dec noteDuration ; dec the note delay + bne preplay ; do more loops of at least fixedDuration + +leave anop + clc + lda musicL ; add 3 to the music pointer + adc #3 + sta musicL + bcc apt5 + inc musicH + clc ; leave with carry clear +apt5 rts + +reset anop + lda #titleMusic + sta musicH + + sec ; and leave with carry set + rts + + + +;----------------------------------------------------------------------------- +audioPlayNote entry + +delayTime equ tmpBot+0 + + lda audioMask ; see if the music is on + and #AUDIO_MUSIC + beq done + +nplay anop + ldx musicL ; get the index into the in-game music + inc musicL ; and advance that index + lda inGameMusic,x ; get the note at the index + bne apn0 ; if non-zero it's a valid note + sta musicL ; reset the index to the start of the song + beq nplay +apn0 ldy #$08 ; fixed number of iterations + +freq entry ; external entry point for custom fixed iterations/delay + sta delayTime ; store it in a delay counter + lda audioMask ; see if + and #AUDIO_SOUND ; audio is enabled + beq done ; and play or ignore audio accordingly + +loop anop + lda SPEAKER ; toggle the speaker + ldx delayTime ; and load the delay +apn1 dex ; count down + bne apn1 ; to zero + dey ; then repeat + bne loop ; for the fixed iterations + +done anop + rts ; and return + + end + diff --git a/src/defs.s b/src/defs.s new file mode 100644 index 0000000..96efdfe --- /dev/null +++ b/src/defs.s @@ -0,0 +1,283 @@ +;----------------------------------------------------------------------------- +; defs.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +; These from apple2.inc for use with ca65 + +;----------------------------------------------------------------------------- +; Zero page + +WNDLFT gequ $20 ; Text window left +WNDWDTH gequ $21 ; Text window width +WNDTOP gequ $22 ; Text window top +WNDBTM gequ $23 ; Text window bottom+1 +CH gequ $24 ; Cursor horizontal position +CV gequ $25 ; Cursor vertical position +BASL gequ $28 ; Text base address low +BASH gequ $29 ; Text base address high +INVFLG gequ $32 ; Normal/inverse(/flash) +PROMPT gequ $33 ; Used by GETLN +RNDL gequ $4E ; Random counter low +RNDH gequ $4F ; Random counter high +HIMEM gequ $73 ; Highest available memory address+1 + +;----------------------------------------------------------------------------- +; Vectors + +DOSWARM gequ $03D0 ; DOS warmstart vector +BRKVec gequ $03F0 ; Break vector +SOFTEV gequ $03F2 ; Vector for warm start +PWREDUP gequ $03F4 ; This must be = EOR #$A5 of SOFTEV+1 + +;----------------------------------------------------------------------------- +; Hardware + +; Keyboard input +KBD gequ $C000 ; Read keyboard +KBDSTRB gequ $C010 ; Clear keyboard strobe + +; 80 column video +CLR80COL gequ $C000 ; Disable 80 column store +SET80COL gequ $C001 ; Enable 80 column store +RD80COL gequ $C018 ; >127 if 80 column store enabled +RD80VID gequ $C01F ; >127 if 80 column video enabled + +; Character set +CLRALTCHAR gequ $C00E ; Normal Apple II char set +SETALTCHAR gequ $C00F ; Norm/inv LC, no flash +ALTCHARSET gequ $C01E ; >127 if alt charset switched in + +; Language card +RDLCBNK2 gequ $C011 ; >127 if LC bank 2 in use +RDLCRAM gequ $C012 ; >127 if LC is read enabled +ROMIN gequ $C081 ; Swap in D000-FFFF ROM +LCBANK2 gequ $C083 ; Swap in LC bank 2 +LCBANK1 gequ $C08B ; Swap in LC bank 1 + +; Vertical blanking +RDVBLBAR gequ $C019 ; >127 if not vertical blanking +RDVBLMSK gequ $C041 ; >127 if VBL interrupts enabled +DISVBL gequ $C05A ; Disable VBL interrupts +ENVBL gequ $C05B ; Enable VBL interrupts + +; Video mode +TXTCLR gequ $C050 ; Display graphics +TXTSET gequ $C051 ; Display text +MIXCLR gequ $C052 ; Disable 4 lines of text +MIXSET gequ $C053 ; Enable 4 lines of text +LOWSCR gequ $C054 ; Page 1 +HISCR gequ $C055 ; Page 2 +LORES gequ $C056 ; Lores graphics +HIRES gequ $C057 ; Hires graphics +DHIRESON gequ $C05E ; Enable double-width graphics +DHIRESOFF gequ $C05F ; Disable double-width graphics + +; Game controller +TAPEIN gequ $C060 ; Read casette input / Switch input 3 +BUTN0 gequ $C061 ; Switch input 0 / Open-Apple key +BUTN1 gequ $C062 ; Switch input 1 / Closed-Apple key +BUTN2 gequ $C063 ; Switch input 2 / Shift key +PADDL0 gequ $C064 ; Analog input 0 +PADDL1 gequ $C065 ; Analog input 1 +PADDL2 gequ $C066 ; Analog input 2 +PADDL3 gequ $C067 ; Analog input 3 +PTRIG gequ $C070 ; Analog input reset + +; Input/Output Unit +IOUDISON gequ $C07E ; Disable IOU +IOUDISOFF gequ $C07F ; Enable IOU + +; Control Your Apple +CYAREG gequ $C036 ; Bits 0-3=disk detect 4=shadow all banks 7=fast + +;----------------------------------------------------------------------------- +; These are for mminer-apple2 + +;----------------------------------------------------------------------------- +HGRPage1 gequ $2000 +HGRPage2 gequ $4000 +MLI gequ $BF00 +SPEAKER gequ $C030 +PLACEHOLDER gequ $FFFF + +;----------------------------------------------------------------------------- +; Cheat Key (binary 0-19 reverse) 12345 +LEVEL_Central_Cavern gequ 0 ; 00000 +LEVEL_The_Cold_Room gequ 1 ; 10000 +LEVEL_The_Menagerie gequ 2 ; 01000 +LEVEL_Abandoned_Uranium_Workings gequ 3 ; 11000 +LEVEL_Eugenes_Lair gequ 4 ; 00100 +LEVEL_Processing_Plant gequ 5 ; 10100 +LEVEL_The_Vat gequ 6 ; 01100 +LEVEL_Miner_Willy_meets_the_Kong gequ 7 ; 11100 +LEVEL_Wacky_Amoebatrons gequ 8 ; 00010 +LEVEL_The_Endorian_Forest gequ 9 ; 10010 +LEVEL_Attack_of_the_Mutant_Telephones gequ 10 ; 01010 +LEVEL_Return_of_the_Alien_Kong_Beast gequ 11 ; 11010 +LEVEL_Ore_Refinery gequ 12 ; 00110 +LEVEL_Skylab_Landing_Bay gequ 13 ; 10110 +LEVEL_The_Bank gequ 14 ; 01110 +LEVEL_The_Sixteenth_Cavern gequ 15 ; 11110 +LEVEL_The_Warehouse gequ 16 ; 00001 +LEVEL_Amoebatrons_Revenge gequ 17 ; 10001 +LEVEL_Solar_Power_Generator gequ 18 ; 01001 +LEVEL_The_Final_Barrier gequ 19 ; 11001 +LEVEL_Game_Over gequ 20 + +;----------------------------------------------------------------------------- +DATA_BLANK gequ $00 +DATA_FLOOR1 gequ $10 +DATA_FLOOR2 gequ $20 +DATA_CONVEYOR gequ $30 +DATA_WALL gequ $40 +DATA_BUSH gequ $50 +DATA_ROCK gequ $60 +DATA_COLLAPSE gequ $70 +DATA_KEY gequ $80 +DATA_SWITCH1 gequ $90 +DATA_SWITCH1_OPEN gequ $A0 +DATA_SWITCH2 gequ $B0 +DATA_SWITCH2_OPEN gequ $C0 +DATA_DOOR gequ $D0 + +;----------------------------------------------------------------------------- +START_LIVES gequ 2 +MAX_LIVES gequ 5 + +PLAY_ROWS gequ 16 +PLAY_COLS gequ 32 +VISIBLE_COLS gequ 20 + +TILES_PER_LEVEL gequ 8 +TILE_BYTES gequ 16 +CONVEYOR_FRAMES gequ 7 +KEYS_FRAMES gequ 4 + +MAX_SPRITES gequ 10 +SPRITE_BYTES gequ 64 +MAX_SPRITE_IFRAMES gequ 36 + +AIR_STR_LEN gequ 5 +AIR_SPEED gequ 14 + +DEMO_TIMER_DURATION gequ 2 +DEMO_TIMER_INITAL gequ 18 + +;----------------------------------------------------------------------------- +zero_base gequ $50 +currPageH gequ $50 ; $02 or $04 - Hi for screen buffer to draw t0 +backPage gequ $51 ; 0 or 1 - just used to toggle HISCR or LOSCR +monochrome gequ $52 ; 0 for color, 1 for black and white +leftEdge gequ $53 ; distance the screen has scrolled to the right +cameraMode gequ $54 +tilesRendered gequ $55 ; count the number of tiles shown in a screen. Used to time music delay +willyXPos gequ $56 ; column for willy +willyYPos gequ $57 ; pixel-row for willy +willyYRow gequ $58 ; row (YPos / 8) for willy +willyFrame gequ $59 ; willy animation frame +willyDir gequ $5A ; direction willy is facing +willyJumpCounter gequ $5B ; what phase of a jump willy is in +willyFallFromJump gequ $5C ; 0 or 1. 1 when willy starts jumping. Affects falling death +numSprites gequ $5D ; how many sprites (excl. willy) to draw in a level (door is last) +spriteXPos gequ $5E ; MAX_SPRITES col position of the sprite +spriteYPos gequ $68 ; MAX_SPRITES pixel row +spriteDir gequ $72 ; MAX_SPRITES facing direction +spriteMin gequ $7C ; MAX_SPRITES min (turn/hold) point for path +spriteMax gequ $86 ; MAX_SPRITES max point for path +spriteSpeed gequ $90 ; MAX_SPRITES speed (frames/pixels) to move the sprite +spriteTick gequ $9A ; MAX_SPRITES counter how often a sprite animates (spritespeed as init) +spriteFramesIdx gequ $A4 ; MAX_SPRITES Index into +spriteFrame gequ $AE ; MAX_SPRITES which frame the sprite is on +spriteClass gequ $B8 ; MAX_SPRITES see CLASS_* in defs.inc for masks +spriteColor gequ $C2 ; MAX_SPRITES index into masks in rosystem.inc +movementMask gequ $CC ; movement that happened in willyMove. See MASK_* in defs.inc +userKeyMask gequ $CD ; user desire to move based on keys pressed. See MASK_* in defs.inc +conveyorMask gequ $CE ; 0, willy not on conveyor, 2 for left, 1 for right +currLevel gequ $CF ; level that's active +lives gequ $D0 ; lives in reserve +airCols gequ $D1 ; screen columns that have an air bar in them +airTipGfx gequ $D2 ; the bit pattern for the tip of the air bar +airFlow gequ $D3 ; the "tick" till a unit of air is decreased +livesFrame gequ $D4 ; anim frame for the walking willy's at the bottom +keysFrameNum gequ $D5 ; animation frame for keys in the level (color) +conveyorFrameNum gequ $D6 ; animation frame for conveyor tile to be active +keysToCollect gequ $D7 ; number of keys that remain to be collected +eventState gequ $D8 ; see EVENT_* in defs.inc for bitmask values +updateUICount gequ $D9 ; updateUI is called when non-zero +uiComponent gequ $DA ; See UI_COMPONENT_* in defs.inc for mask values. What UI to update +fullScreenClearCount gequ $DB ; 0 - clear only top, non-zero all. Is counted down by gameAI +musicL gequ $DC ; pointer or index for playing music +musicH gequ $DD ; hi pointer for playing UI music +audioMask gequ $DE ; see AUDIO_* in defs.inc +demoMode gequ $DF ; 0 - not a demo, 1 when demo mode active +demoTimer gequ $E0 ; in demo mode, scroll when counter is 0 +demoDirection gequ $E1 ; direction the demo scroll will move the screen +cheatIndex gequ $E2 ; count cheat code entry or when active, if 6 is down +cheatActive gequ $E3 ; non-zero when the cheat was successfully entered +srcPtrL gequ $E4 ; often a pointer Lo +srcPtrH gequ $E5 ; often a pointer Hi +dstPtrL gequ $E6 ; often a pointer Lo +dstPtrH gequ $E7 ; often a pointer Hi +sizeL gequ $E8 ; sometimes a size used in ptr operations +sizeH gequ $E9 ; sometimes a size used in ptr operations +tmpBot gequ $EA ; start of block of 7 zp values used randomly +bitMasks gequ $F1 ; constant - used mostly for bit instruction (see below) +bit0Mask gequ $F1 ; 1 +bit1Mask gequ $F2 ; 2 +bit2Mask gequ $F3 ; 4 +bit3Mask gequ $F4 ; 8 +bit4Mask gequ $F5 ; 16 +bit5Mask gequ $F6 ; 32 +bit6Mask gequ $F7 ; 64 +bit7Mask gequ $F8 ; 128 + +CLASS_MOVE_Y gequ bit0Mask +CLASS_FOUR_FRAME gequ bit1Mask +CLASS_UNUSED gequ bit2Mask +CLASS_HOLDATEND gequ bit3Mask +CLASS_EUGENE gequ bit4Mask +CLASS_KONG gequ bit5Mask +CLASS_SKYLAB gequ bit6Mask +CLASS_DOOR gequ bit7Mask + +;----------------------------------------------------------------------------- +CAMERA_MODE_3_ZONE gequ 0 +CAMERA_MODE_SCROLL gequ 1 + +;----------------------------------------------------------------------------- +EVENT_OK gequ 0 +EVENT_DIED gequ 1 +EVENT_LEVEL_RESTART gequ 2 +EVENT_NEXT_LEVEL gequ 4 +EVENT_EXIT_GAME gequ 8 +EVENT_CHEAT_JUMP gequ 16 + +;----------------------------------------------------------------------------- +UI_COMPONENT_NAME gequ 1 +UI_COMPONENT_AIR_NAME gequ 2 +UI_COMPONENT_AIR gequ 4 +UI_COMPONENT_SCORE_NAME gequ 8 +UI_COMPONENT_SCORE gequ 16 +UI_COMPONENT_LIVES gequ 32 +UI_COMPONENT_HIGHSCORE gequ 64 + +;----------------------------------------------------------------------------- +MASK_RIGHT gequ 1 +MASK_LEFT gequ 2 +MASK_AIR gequ 4 + +;----------------------------------------------------------------------------- +AUDIO_MUSIC gequ $80 +AUDIO_SOUND gequ $40 + + + + + + + + diff --git a/src/game.asm b/src/game.asm new file mode 100644 index 0000000..c29dae9 --- /dev/null +++ b/src/game.asm @@ -0,0 +1,859 @@ +;----------------------------------------------------------------------------- +; game.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +GAME start + + using ROSYSTEM + using DATA + using ROLEVELS + using ROTEXT + +;----------------------------------------------------------------------------- +gameLoop entry + + jsr gameNewGame ; init things that need 1-time game init + +nextLevel anop + jsr tilesPrepForLevel ; move 8 tiles for this level to tilesInstances + +restart anop + jsr gameInitStage ; init the stage, incl unpacking the level, tile prep etc + +playLoop anop + jsr inputGet ; read the keyboard + + lda demoMode ; check for demo mode + beq gl01 ; if not demo, move willy + jsr gameDemoTick ; demo mode so run demo + jmp ai ; skip moving willy +gl01 jsr willyMove ; move the main character based on user input (or conveyor or gravity) +ai anop + jsr gameAI ; run all the monster AI + + ldx fullScreenClearCount ; get the flag for what level of screen clear is needed + jsr screenClear ; and clear the screen + + jsr tilesAnimateKeys ; copy the 16 bytes for the next "key" frame into place + jsr tilesAnimateConveyor ; update the conveyor tile + + jsr screenDrawSprites ; draw all the enemies + + lda demoMode ; get the event state + beq gl02 ; 0 - not demo, full flow + jsr screenDrawLevel ; show all the tiles in demo mode + jmp ui0 +gl02 lda #$ff ; Enable Collision detection + jsr screenDrawWilly ; not demo - draw willy with collision detection + bcc level ; carry set is a collision, clear is no problem + lda eventState ; on collision, set the die event + ora #EVENT_DIED + sta eventState +level anop + jsr screenDrawLevel ; show all the tiles + lda #0 ; No collision detection + jsr screenDrawWilly ; Now draw willy over self and level, no collision +ui0 anop + lda updateUICount ; see if the UI needs an update + beq gl03 + jsr uiUpdate ; if needed, update the appropriate UI components + +gl03 ldx numSprites ; The door's index + jsr screenDrawSprite ; render the door over everything else, no collision + + jsr screenSwap ; swap to the newly rendered screen + jsr audioPlayNote ; play in-game music if needed + jsr gameDelay ; waste time to get all screens to run at same rate + + lda eventState ; see if any events fired + beq playLoop ; keep looping while no events + + jsr gameEvent ; process the event, return value in a + bit bit1Mask ; EVENT_LEVEL_RESTART + bne restart + bit bit2Mask ; EVENT_NEXT_LEVEL + bne nextLevel + + + lda demoMode ; no Game Over when the demo ends + bne gl04 + jsr gameOver ; wasn't a demo, show Game Over +gl04 jsr textCheckHighScore ; game over - see if a new high score was set + rts + + + +;----------------------------------------------------------------------------- +gameDelay entry + +delayTime equ tmpBot+0 + + lda #$10 + sta delayTime + +delayCalc anop + sec + lda #$D0 + sbc tilesRendered + bcc gddone + tax +gd01 ldy delayTime +gd02 dey + bne gd02 + dex ; and do it for all tiles not rendered (<$80) + bne gd01 +gddone anop + rts + + + +;----------------------------------------------------------------------------- +gameNewGame entry + + lda #START_LIVES ; init player number of lives + sta lives + + lda #LEVEL_Central_Cavern ; Init these game vars to 0 + sta currLevel + + lda #0 ; audioPlayNote uses muiscL as well + sta musicL ; track progress through in-game song + + ldx #5 ; six, zero-based score digits + lda #'0' ; load a with '0' +gng0 sta score,x ; set all 6 score digits to '0' + dex + bpl gng0 + + rts + + + +;----------------------------------------------------------------------------- +gameInitStage entry + + using LOWMEM + +count equ tmpBot+0 +spriteIdx equ tmpBot+1 +instanceIdx equ tmpBot+2 + + ldy currLevel ; Skip some stuff for "Game Over" pseudo-level + cpy #20 + bcs notDemo + + jsr levelUnpack ; decompress a level to levelLayout + jsr levelPlaceKeys ; put the keys into the world + jsr textSetLevelText ; create the gfx cache for the name + + ldy currLevel ; tables are indexed by level + lda demoMode ; see if this is demo mode + beq notDemo ; branch if game + lda willyx ; use willy screen 0 for willyXPos in demo (force leftEdge to 0) + bne gis1 + +notDemo anop + lda willyx,y ; set willy X up +gis1 sta willyXPos + ldx cameraMode + lda #CAMERA_MODE_SCROLL + sta cameraMode + jsr positionScreen ; set the screen position based on willy's X + stx cameraMode + lda willyy,y ; set willy's Y + sta willyYPos + lda willyStartDir,y ; and see what facing direction + sta willyDir + beq gis2 ; if right (0) then set that as the animFrame + lda #4 ; if left (1) set the anim frame to 4 +gis2 sta willyFrame ; and save the anim frame + +postWilly anop + lda #3 ; AI will count down and runs before clearScreen + sta fullScreenClearCount ; so set to 3 to get full clear on both buffers + + lda #AIR_SPEED ; set counter for ticking down air + sta airFlow + + lda #32 ; set how many air cols there are + sta airCols + + lda #$7f ; the air "bar" tip is a character that draws less + sta airTipGfx ; bar over time, till it rolls to the prev column + + lda #$ff ; match all masks + jsr uiUpdateComponent ; so force all UI elements to draw + + lda level_sprites_count,y ; get how many enemy sprites the level has + sta count ; save for init + sta numSprites ; save for the game to use + dec numSprites ; make this count 0 based + lda level_sprites_offset,y ; see where in the sprite tables this sprite starts + tay ; move the offset into x - sprite tables indexed by this + + ldx #0 ; y will be an enemy instance index + stx eventState ; init he event state + stx livesFrame ; but use this 0 to init some variables + stx movementMask ; current movement for willy + stx conveyorMask ; direction conveyor under willy is moving (0=no conveyor under willy) + stx userKeyMask ; keys the user has pressed to move willy + stx willyJumpCounter ; 0 means no jump, 1-18 is in a jump, beyond is a fall height + stx spriteFramesIdx + + clc ; clear carry - will always enter below with carry clear +gisnext anop + sty spriteIdx ; save which sprite is being processed (x clobbered) + stx instanceIdx ; save y, also clobbered + + lda #0 + sta spriteFrame,x ; init the sprite specific frame counter to 0 + + lda sprites_x,y ; load the basic sprite variables and put into zero page + sta spriteXPos,x ; from 0 .. numSprites - 1 + lda sprites_y,y ; the addressing is unfortunate - sta,x is zero-page 2 byte + sta spriteYPos,x ; but it's not worth swapping x and y for this bit of code + lda sprites_dir,y + sta spriteDir,x + lda sprites_min,y + sta spriteMin,x + lda sprites_max,y + sta spriteMax,x + lda sprites_speed,y + sta spriteSpeed,x + sta spriteTick,x + lda sprites_class,y + sta spriteClass,x + lda sprites_colors,y ; get the color + sta spriteColor,x + + lda sprites_bitmaps,y ; get the index into the sprite data for this sprite's images + jsr spriteInstanceSpriteFrames + + ldx instanceIdx ; restore y + cpx numSprites + beq prep + + lda spriteClass,x + bit bit1Mask ; CLASS_FOUR_FRAME + beq gis3 + lda #4 + bne gis4 +gis3 lda #8 +gis4 adc spriteFramesIdx,x + sta spriteFramesIdx+1,x + + ldy spriteIdx + iny ; next sprite in sprite table + inx ; next instance + dec count + beq prep + jmp gisnext + +prep anop + ldx currLevel ; some levels need special handling + cpx #LEVEL_Eugenes_Lair ; eugene needs colored copies + bne gis5 + jsr spriteEugeneSetup + jmp fixDoor + +gis5 cpx #LEVEL_Miner_Willy_meets_the_Kong ; kong levels need switches + beq giskong + cpx #LEVEL_Return_of_the_Alien_Kong_Beast + bne gis6 +giskong anop + lda #DATA_SWITCH1 + sta levelLayout+6 + + lda #DATA_SWITCH2 + sta levelLayout+18 + jmp fixDoor + +gis6 cpx #LEVEL_Skylab_Landing_Bay ; skylab needs satellites to get X values + bne gis7 + ldx #2 ; init the falling satellites +skyLabPos anop + lda skylabXPos,x + sta spriteXPos,x + txa + sta spriteTick,x + dex + bpl skyLabPos + +gis7 cpx #LEVEL_The_Final_Barrier + bne fixDoor + dec numSprites ; hide the victory door sprite + +fixDoor anop + jmp spriteDoorSetup ; sprites are set up - door is special + + + +;----------------------------------------------------------------------------- +gameAI entry + + lda fullScreenClearCount ; get the state + beq ga01 ; if it's zero, move on + dec fullScreenClearCount ; count this down +ga01 dec airFlow ; deal with the air countdown. airFlow is "time" counter + bne airDone + jsr gameAirDecrease + +airDone anop + inc livesFrame ; move the lives anim frame along + lda livesFrame ; through the first 4 frames only + cmp #16 ; by dividing by 4 (in essence) to get a slower animation + bcc ga02 + lda #0 ; start at frame 0 when wrapping +ga02 sta livesFrame + and #3 ; only update every 4 frames (not & 3) + bne ga03 + lda #UI_COMPONENT_LIVES ; tell ui to update lives + jsr uiUpdateComponent + +ga03 ldx numSprites ; now set up all the sprites for this level +galoop anop + lda spriteClass,x ; start with the class + bit CLASS_DOOR ; and if it's a door, treat that separate + beq ga04 + jmp door +ga04 bit CLASS_MOVE_Y ; see if it moves vertically + beq horizontal ; no - then it moves horizontally + jmp vertical ; yes - them move it vertically + +horizontal anop + lda spriteSpeed,x ; get speed + bit bit0Mask ; Is the speed 1 + beq rtick ; if not, advance this sprite + dec spriteTick,x ; dec the ticker + bpl ganext ; if ge 0 then ignore sprite + sta spriteTick,x ; reset ticker to speed and fall through to run + +rtick anop + lda spriteDir,x ; get the direction + bne left ; 1 is left, 0 is right + +right anop + inc spriteFrame,x ; move the frame + lda spriteFrame,x ; load it + cmp #4 ; see if it's 4 + bcc ganext ; if 4+, done here + inc spriteXPos,x ; up the x position + lda spriteXPos,x ; load it + cmp spriteMax,x ; see if it's ge max + bcs rightEnd ; if yes, end of going right + lda #0 ; no, reset + sta spriteFrame,x ; frame to 0 + beq ganext ; BRA. done with this sprite +rightEnd anop + dec spriteXPos,x ; set back to last valid x + lda #1 ; load left + sta spriteDir,x ; and set direction left + lda #7 ; 7 is most right position of sprite + sta spriteFrame,x ; and set the frame to that + +fix4 anop + lda spriteClass,x ; get the class + bit CLASS_FOUR_FRAME ; see if it has the (only) 4 frames flag set + beq ganext ; if not, done with this sprite (frame 7 is good) + lda #3 ; drop the 7 to 3 + sta spriteFrame,x ; set the frame + jmp ganext + +left anop + dec spriteFrame,x ; move the frame + lda spriteFrame,x ; load it + cmp #$ff ; see if it is now lt 0 (3,2,1 -> 0 overflow) + beq stepLeft ; if it is, move the col left + cmp #3 ; if it's 3, (7,6,5,4 -> 3 overflow) + bne ganext ; if not, done with this sprite + +stepLeft anop + dec spriteXPos,x ; move the column left + lda spriteXPos,x ; load it + cmp spriteMin,x ; compare to minimum + bcc leftEnd ; if less than minimum, too far, past the left edge + lda #7 ; keep going, load 7 + sta spriteFrame,x ; set frame back to 7 + bne fix4 ; BRA, and check for a 4-frame sprite + +leftEnd anop + inc spriteXPos,x ; put the column back to in range + lda #0 ; load 0 + sta spriteDir,x ; set as direction (right) + sta spriteFrame,x ; and frame (most left frame) + beq ganext ; BRA, done with this sprite + +postVMove anop + lda spriteClass,x ; after a vertical update check these special cases + bit CLASS_EUGENE ; Eugene + bne eugene + bit CLASS_KONG ; Kong + beq ga05 + jmp kong +ga05 bit CLASS_SKYLAB ; skylab + beq ga06 + jmp skylab +ga06 inc spriteFrame,x ; otherwise go to next frame + lda spriteFrame,x + and #3 + sta spriteFrame,x + +ganext anop + dex ; get previous sprite + bpl goTop ; if ge 0 then still a sprite to process + rts ; all sprites done - exit + +goTop anop + jmp galoop + +vertical anop + lda spriteDir,x ; get direction 1 = UP, 0 equ DOWN + beq down + bmi postVMove ; if the spriteDir is lt $ff, stationary sprite + +up anop + lda spriteYPos,x ; get the Y position + sec + sbc spriteSpeed,x ; move up by the speed + cmp spriteMin,x ; see if at top + bcc upEnd ; overshot top + sta spriteYPos,x ; update Y position + bcs postVMove ; BRA + +upEnd anop + lda spriteClass,x ; get the class + bit CLASS_HOLDATEND ; should it stop or bounce + bne stop ; HOLDATEND means stop + lda #0 ; change direction + sta spriteDir,x ; to DOWN (0) + beq postVMove ; BRA + +down anop + lda spriteYPos,x ; get the Y + clc + adc spriteSpeed,x ; add the speed + cmp spriteMax,x ; see of at end + bcs downEnd ; at or past end + sta spriteYPos,x ; still good, update Y position + bcc postVMove ; BRA + +downEnd anop + lda spriteClass,x ; same as upEnd + bit CLASS_HOLDATEND + bne stop + lda #1 ; but mark for moving UP (1) + sta spriteDir,x + bne postVMove ; BRA maybe down? +stop anop + lda #$ff ; set the direction to -1 (lt 0) + sta spriteDir,x + bne postVMove ; BRA + +door anop + lda keysToCollect ; check if all keys have been collected + bne ganext ; no - nothing more to do +frameToggle anop + dec spriteTick,x ; count down for animation + bpl ganext ; gt 0, nothing more + lda spriteFrame,x ; get the frame + eor #1 ; toggle between 1 and 0 + sta spriteFrame,x ; update the frame + lda spriteSpeed,x ; get the anim speed + sta spriteTick,x ; save it to the tick + jmp ganext + +eugene anop + lda keysToCollect ; eugene changes behavior when all keys collected + bne eugeneNormal ; not all keys, carry on + lda #0 ; all keys - force eugene down + sta spriteDir,x + inc spriteFrame,x ; cycle through the 5 colors + lda spriteFrame,x + cmp #4 + bcc ga07 + lda #0 +ga07 sta spriteFrame,x ; save the new frame +eugeneNormal anop + jmp ganext + +kong anop + lda spriteMax,x ; if kong's max is 0 he's still up + beq frameToggle + lda spriteDir,x ; if he's not up see what his direction is + bpl kongFall ; gt 0, then he's still falling + cmp #$FE ; $fe he's been erased so done with him + beq kongDone ; $ff he's just reached the bottom + dec spriteDir,x ; turn $ff into $fe + txa ; put the sprite index into a + pha ; and save it + lda spriteFramesIdx,x ; get the index to the 1st kong frame + tax ; put that in x + inx ; and skip the 2 frames where + inx ; kong is standing + ldy #2 ; want to clear 2 frames + jsr spriteClearFrames ; and make the falling frames blank + pla ; get the sprite index + tax ; and put it back in x +kongDone anop + jmp ganext +kongFall anop + ldx #3 ; digit 3 (100's) + lda #1 ; add 1 + jsr textAddScore ; add to score + lda #UI_COMPONENT_SCORE ; show changes + jsr uiUpdateComponent + jmp frameToggle + +skylab anop + lda spriteDir,x ; get the direction of the falling satellite + cmp #$ff ; see if it's reached its end + beq ga08 ; yes it has + jmp ganext +ga08 inc spriteFrame,x ; advance the collapsing frame + lda spriteFrame,x ; load that frame + cmp #8 ; see if it's the last + bcs ga09 ; yes + jmp ganext +ga09 lda spriteTick,x ; get the tick (hich is an index in this case) + clc + adc #3 ; advance by 3 (3 satellites at a time) so next index for this satellite + cmp #12 ; (3*4 is 12) - there are 4 stating locations per satellite + bcc ga10 ; not rolled over + and #3 ; reset this satellite to 1st starting location (index) +ga10 sta spriteTick,x ; save the tick + tay ; put into Y + lda skylabXPos,y ; get the actual start position, based on y, for this satellite + sta spriteXPos,x ; put that into the satellite + lda #0 ; reset the frame, position and direction all to 0 + sta spriteFrame,x + sta spriteYPos,x + sta spriteDir,x + jmp ganext + + + + +;----------------------------------------------------------------------------- +gameDemoTick entry + + dec demoTimer ; timer counts down + bne gdt0 ; if not yet zero, nothing to do + lda #DEMO_TIMER_DURATION ; reset the timer + sta demoTimer + lda #UI_COMPONENT_NAME ; mark the level name as needing an update + jsr uiUpdateComponent + lda leftEdge ; scroll the screen + clc + adc demoDirection ; based on the scrolling direction + sta leftEdge + beq nextDemoLevel ; if the edge is 0 then done with level + cmp #12 ; at 12, the level flips scroll direction + bne gdt0 + lda #$ff ; at 12, the scroll direction becomes -1 + sta demoDirection +gdt0 rts + +nextDemoLevel anop + lda #DEMO_TIMER_INITAL ; set for a longer initial hold at a new level + sta demoTimer + lda #1 ; set the scroll direction to be right (1) + sta demoDirection + lda #0 ; set the edge to be the very left + sta leftEdge + lda #EVENT_NEXT_LEVEL ; fire a new level event + ora eventState + sta eventState + rts + + + +;----------------------------------------------------------------------------- +gameEvent entry + + bit bit0Mask ; EVENT_DIED + beq ge00 ; if not, must be end of level + dec lives ; died, so take a life + bmi died ; all lives lost ends the game + lda #0 + sta tmpBot + jsr screenInvertVisibleScreen + lda #EVENT_LEVEL_RESTART ; still alive so restart the level + rts + +ge00 bit bit4Mask ; EVENT_CHEAT_JUMP + bne gedone ; if jumping, just go + lda currLevel ; check the level + cmp #19 ; is this the last level + bcc ge01 ; if not, go to screen invert + lda cheatActive ; last level - got here by cheating? + bne ge01 ; yes - go screen invert + lda demoMode ; is this demo mode? + bne ge01 ; yes - go to screen invert + jsr gameVictory ; played properly through, get the victory +ge01 ldx #8 ; do an inverse screen effect +ge02 stx sizeL + txa + and #3 + clc + adc #1 + sta tmpBot + jsr screenInvertVisibleScreen + ldx sizeL + dex + bne ge02 + + lda demoMode ; is this demo mode + bne incLevel ; skip the air/score, just go to next level + + jsr valueSwap ; do the air countdown/add score routine now, on front screen + +airLoop entry + ldx #5 ; digit 5 (1's) + lda #7 ; add 7 + jsr textAddScore ; add to score + ldx #4 ; digit 4 (10's) + lda #1 ; add 1 (so add 17 per tick) + jsr textAddScore ; add to score + jsr gameAirDecrease ; run the decrease air + lda airCols ; get the remaining bar length + asl a ; mult * 4 + asl a + eor #$7f ; and reverse (ignore MSB which is 0) - this is the freq + ldy #6 ; duration for the freq + jsr freq ; make a sound of this freq and duration + jsr uiUpdate ; and show the updates + lda eventState ; get the event state + bit bit0Mask ; check for EVENT_DIED + beq airLoop ; not dead means more air left + + jsr valueSwap ; go back to the back screen + +incLevel anop + inc currLevel ; set the current level to the next + ldx currLevel + cpx #20 ; see if this is the last level+1 + bcc gedone ; if not, all is well + lda demoMode ; check again for demo + beq ge03 ; if not, roll over to level 1 and keep playing +died anop + lda #EVENT_DIED ; demo also ends with a death event + rts +ge03 ldx #0 ; not demo, past last level, start at 1st level again + stx currLevel + +gedone anop + lda #EVENT_NEXT_LEVEL ; return in a the action (next level) + rts + + + +;----------------------------------------------------------------------------- +gameAirDecrease entry + + lda #AIR_SPEED + sta airFlow + lda #UI_COMPONENT_AIR ; tick the air down, so update the UI + jsr uiUpdateComponent + ldx airCols ; see if it's an odd or even column + inx ; but the air draws from an odd column so the 1 bit is backwards + txa + and #1 + tax ; x 0 is even,x 1 is odd + lda airTipGfx ; see what the tip looks like + cmp maskGreen,x ; if it's all green, time to drop another column + beq colDec + lsr a ; not all green, so adjust the tip by dropping 2 bits (1 white pixel) + lsr a + ora maskGreenHi,x ; and replace that with a green pixel (appropriate for odd/even column) + bne airOk + +colDec anop + dec airCols ; one less bar + bpl gad0 + lda eventState ; out of air causes death + ora #EVENT_DIED + sta eventState + lda #0 + sta airCols ; lock airCols at 0 + lda maskGreen,x ; lock to all green for the tip + bne airOk +gad0 lda maskNewTip,x ; start a new (mostly white) tip, appropriate for odd/even + +airOk anop + sta airTipGfx + + rts + + + +;----------------------------------------------------------------------------- +gameOver entry + +iter equ currLevel ; how many times to loop + +bootPart anop + ldx #20 ; game over level is 20 (0 based) + stx currLevel + jsr gameInitStage + + ldx #0 ; clear the top part of the screen + jsr screenClear + + ldx #0 ; draw the boot + jsr screenDrawSprite + + ldx #$60 ; start of boot-drop freq + stx iter + + lda #1 ; pretend there's a key so Boot (EUGENE) doesn't animate + sta keysToCollect ; and the "door" doesn't switch to the second frame + + tax ; also draw the pedestal (door) + jsr screenDrawSprite ; draw the boot + + lda #2 ; set willy to frame 2 + sta willyFrame + + jsr screenDrawWilly ; show willy on the pedestal + jsr screenSwap ; make it all visible + jsr valueSwap ; fake the front as the back +bootLoop anop + jsr gameAI ; run the AI to move the boot down + + dec iter ; raise freq + dec iter + + lda audioMask ; see if the audio will play or skip + and #AUDIO_SOUND + beq otherDelay ; audio won't delay so "fake" an audio delay + + lda iter ; get the freq + ldy #$80 ; duration for the freq (also slows the boot down) + jsr freq ; make a sound of this freq and duration + jmp go00 + +otherDelay anop + lda iter + lsr a + lsr a + tay + jsr ySet +go00 ldx #0 ; go draw the boot + jsr screenDrawSprite + + lda spriteDir ; see if the boot has reached the pedestal + bpl bootLoop ; net yet, keep going + +gameOverPart anop +color equ tmpBot+1 ; index into color masks arrays +xPos equ tmpBot+2 ; x for string +yPos equ tmpBot+3 ; y for string +textL equ tmpBot+4 ; string pointer +textH equ tmpBot+5 +len equ tmpBot+6 ; how many characters (0 based) + + lda #$20 + sta iter ; how many times to loop + lda #(7*8) ; Y for string + sta yPos + lda #4 ; starting color + sta color +cycleLoop anop + lda #4 ; print GAME at x 4 + sta xPos + lda #roTextGame + sta textH + lda #4 ; 0-3 characters + sta len + jsr textColorCycle ; show the text in color + + lda #13 ; print OVER at x 13 + sta xPos + lda #roTextOver + sta textH + lda #4 ; also 0-3 characters in length + sta len + jsr textColorCycle ; and show over with color + + ldy #$30 ; delay the iteration of color + jsr ySet + dec iter ; one less iteration to do + bpl cycleLoop ; do all iterations + + rts + + + +;----------------------------------------------------------------------------- +gameVictory entry + + lda #19 ; put willy above the door + sta willyXPos ; outside the caverns + lda #0 + sta willyFrame + lda #2*8 + sta willyYPos + + ldx fullScreenClearCount ; get the flag for what level of screen clear is needed + jsr screenClear ; and clear the screen + + jsr screenDrawSprites ; draw all the enemies + jsr screenDrawWilly ; not demo - draw willy with collision detection + jsr screenDrawLevel ; show all the tiles + ldx numSprites ; The door's index + inx + jsr screenDrawSprite ; render the door over everything else, no collision + jsr screenSwap ; swap to the newly rendered screen + +audioPart anop +freqCntr equ tmpBot+0 ; freqCntr +duration equ tmpBot+1 ; duration +iteration equ tmpBot+2 ; iteration + + lda #50 ; 50 iterations + sta iteration + lda #0 ; init freqCntr and duration + sta freqCntr + sta duration + +gvloop anop + lda duration ; start with the duration + adc iteration ; add the iteration counter * 3 + adc iteration + adc iteration + sta freqCntr ; save as the freqCntr + ldy duration ; put duration in Y + + lda audioMask ; see if the audio will play or skip + and #AUDIO_SOUND + bne audioOn ; if on, use the freqCntr "API" +gv00 ldx freqCntr ; a bit ridiculous to redo playNote stuff here +gv01 dex ; but I want the audio code to all go through the + bne gv01 ; same "API" for consistency + dey + bne gv00 + beq postfreq + +audioOn anop + lda freqCntr + jsr freq ; make the sound if sound enabled + +postFreq anop + dec iteration ; dec the iterations + bne gvloop ; loop till all iterations done + rts + + end + diff --git a/src/input.asm b/src/input.asm new file mode 100644 index 0000000..32c0f87 --- /dev/null +++ b/src/input.asm @@ -0,0 +1,228 @@ +;----------------------------------------------------------------------------- +; input.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + mcopy src/input.mac + +INPUT start + + using ROSYSTEM + using ROTEXT + +;----------------------------------------------------------------------------- +inputGet entry + + lda KBD + bmi hasKey + + lda cheatActive ; is the cheat code active + beq ig00 ; no - normal play + lda cheatIndex ; is the 6 down + beq ig00 ; no - normal play + jmp setJmpEvent ; cheat active and 6 down - keep resetting to this level +ig00 rts + +hasKey anop + bit KBDSTRB + and #$5f ; strip MSB and upper/lower case (to upper) + + tax + lda demoMode + beq ig01 + jmp premusic +ig01 txa + bne right ; $5f clears space so a is 0 for jump + +jump anop + lda userKeyMask + eor #MASK_AIR ; AIR marks the start of a jump + sta userKeyMask + rts + +right anop + cmp #'W' ; go right with w (left handed) or P + beq ig02 + cmp #'P' + bne left +ig02 lda userKeyMask + and #$FD ; <~MASK_LEFT ; clear left + eor #MASK_RIGHT ; activate right + sta userKeyMask + rts + +left anop + cmp #'Q' ; go left with q (left handed) or o + beq ig03 + cmp #'O' + bne camera +ig03 lda userKeyMask + and #$FE ; <~MASK_RIGHT ; clear right + eor #MASK_LEFT ; activate left + sta userKeyMask + rts + +camera anop + cmp #'C' ; c toggles the scroll mode + bne cheat ; if not c maybe cheat? + lda #1 ; xor the camera mode with 1 + eor cameraMode + sta cameraMode + rts ; done, can't be any other key + +cheat anop + ora #%00100000 ; make "normal" characters + ldx cheatActive ; see if the cheat mode is on + bne checkJump ; if yes, see if a jump needs to happen + + ldx cheatIndex ; active, not on + cmp roTextCheatCode,x ; is this the next cheat code character + bne resetCheat ; no, reset the cheat + inx ; yes + stx cheatIndex ; inc the index + cpx #7 ; all 7 typed + beq ig04 ; yes + rts ; not yet, so done here +ig04 ldx #1 ; make the cheat active + stx cheatActive + +resetCheat anop + ldx #0 ; set the cheat index to 0 + stx cheatIndex +jumpNotActive anop + and #%11011111 ; restore the acc to uppercase + bne music ; BRA + +checkJump anop + cmp #'6' ; is this a 6 + beq jumpToggle ; if yes, toggle the jump mode on/off + bcs jumpNotActive ; gt 6, then nothing to do with cheat + ldx cheatIndex ; is 6 down + beq jumpNotActive ; no, process as non-cheat key + cmp #'1' + bcc jumpNotActive ; less than 1, not cheat code + sec + sbc #'1' ; make key 0 based + tax ; and index in x + lda bitMasks,x ; get the appropriate bit + eor currLevel ; and toggle in the current level + cmp #20 ; if the level ge 20 then set to 0 + bcc ig05 + lda #0 +ig05 sta currLevel +setJmpEvent anop + lda #EVENT_CHEAT_JUMP ; set the jump event active + ora eventState + sta eventState + rts + +jumpToggle anop + lda #1 ; prep to toggle the jump state + eor cheatIndex + sta cheatIndex ; save it + beq ig06 ; is it off, just leave + lda #0 ; just turned on, reset + sta currLevel ; the level to level 0 +ig06 rts + +premusic anop + txa ; restore the read-key +music anop + cmp #'M' ; m toggles music on/off + bne ig07 + LDA audioMask + eor #AUDIO_MUSIC + sta audioMask + rts + +ig07 cmp #'B' + bne ig08 + lda #1 + eor monochrome + sta monochrome + jmp tilesPrepForLevel + +ig08 cmp #'S' ; s toggles in-game sound on/off + bne ig09 + LDA audioMask + eor #AUDIO_SOUND + sta audioMask + rts + +ig09 cmp #$1B ; ESC + beq quit ; quit game or demo + + lda demoMode ; see if this is demo + beq done ; if not, ignore all other keys, demo quit on any key + +quit anop + lda #0 ; set lives to zero so this die event quits + sta lives + inc demoMode ; turn demo mode if not on, so there's no end-of-level stuff + lda eventState ; and make a death event + ora #EVENT_DIED + sta eventState + +done anop + rts + + + +;----------------------------------------------------------------------------- +inputUI entry + +loop equ currLevel + + lda KBD ; Get the keyboard + bpl okay ; and ignore no keys + bit KBDSTRB ; reset the keyboard + and #$5f ; strip MSB and case bit + cmp #'M' ; see if it's the music toggle + bne iu00 + lda audioMask + eor #AUDIO_MUSIC + sta audioMask +okay anop + lda #0 ; no key or M or m returns 0 + rts + +iu00 cmp #'B' ; b in the UI toggles color/mono + bne iu01 + lda #1 + sta currLevel ; in UI so abuse currLevel as a counter + eor monochrome ; toggle mono/color + sta monochrome + beq showColor +showMono anop + printXYlh #7,#(17*8),#roTextMono,#4 ; show Mono on screen CHECKCHECKCHECK + jsr valueSwap ; fake swap + dec currLevel ; and do twice so both buffers updated + bpl showMono + jmp doneB + +showColor anop + printXYlh #7,#(17*8),#roTextColor,#4 ; show Color on in both buffers + jsr valueSwap + dec currLevel + bpl showColor +doneB anop + lda #0 ; if all is well, return with 0 in a + rts + +iu01 cmp #$1b ; non-music/color toggle key see if it's esc + beq exit ; exit if it is +stop anop + lda #1 ; non-M, B or ESC (non toggle) returns 1 (start game) + rts +exit anop + lda #$ff ; -1 on ESC (quit application) + rts + + end + diff --git a/src/level.asm b/src/level.asm new file mode 100644 index 0000000..3ec0f9d --- /dev/null +++ b/src/level.asm @@ -0,0 +1,131 @@ +;----------------------------------------------------------------------------- +; level.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +LEVEL start + + using LOWMEM + using ROSYSTEM + using ROLEVELS + +;----------------------------------------------------------------------------- +; "decompress" the stored level into a usable level in levelLayout +levelUnpack entry + + +value equ sizeL +len equ sizeH + + ldx currLevel + + lda #levelLayout + sta store+2 + + lda levelsL,x ; get the start of the level data intp srcPtr + sta srcPtrL + lda levelsH,x + sta srcPtrH + + ldx #0 ; start at 0 in read and write area + ldy #0 + +loop anop + lda (srcPtrL),y ; read the first level byte (repeat counts) + beq done ; $00 ends level + pha ; save + iny ; point y at next byte + + lsr a ; get high repeat nibble into low nibble + lsr a + lsr a + lsr a + tax ; but result in X + + lda (srcPtrL),y ; read the next byte from level (values) + sta value ; save + iny ; advance y to next rep counts + + lsr a ; get high value nibble into low nibble + lsr a + lsr a + lsr a + jsr lu00 ; store value repeat times into level decode area + + pla ; restore the rep byte + and #$0f ; only the low nibble + tax ; put in x + lda value ; restore values + and #$0f ; only low nibble + jsr lu00 ; store value repeat times into level decode area + jmp loop ; repeat + +lu00 stx len ; save the repeat count + tax ; value into x (value is a tile index) + lda mult16,x ; mult value by 16 as that's how wide a tile is + ldx len ; restore the repeat count + dex ; store index is 0+ but count is 1+ so pre-dec + +store anop + sta PLACEHOLDER,x ; store the tile offset into the level decode area + dex ; from back to front and + bpl store ; repeat for all repetitions + + lda len ; get the repeat length + clc + adc store+1 ; advance the stor pointer by the length + sta store+1 + bcc done + inc store+2 + +done anop + rts ; return to self or caller + + + +;----------------------------------------------------------------------------- +levelPlaceKeys entry + + lda #0 + sta keysToCollect ; init to 0 keys to collect + + lda currLevel + asl a ; * 2 + asl a ; * 4 + adc currLevel ; * 5 - index into key table + tax ; keep index in x + + lda #4 ; Need to do 5 keys, 0-4 + sta sizeL ; save count in sizeL + ldy #0 ; keep offst from ptr at 0 +lpk0 lda keyyH,x ; get the key Y hi (y=row*32 in key table) + bmi next ; if $ff then skip + inc keysToCollect ; count the key + sta dstPtrH ; save the hi + lda keyyL,x ; get the y lo + adc keyx,x ; and add the x (no carry still) + sta dstPtrL ; save as dst pointer + lda #>levelLayout ; get the scratch hi (the lo is 0 as it's aligned) + adc dstPtrH ; and add to the Y hi (and any carry) + sta dstPtrH ; and save as the dst Pointer Hi + lda #8*16 ; key tile offset * width of a tile + sta (dstPtrL),y ; poke into the unpacked level + +next anop + inx ; next key + dec sizeL ; one less key to do + bpl lpk0 ; all keys done? + + rts + + end + diff --git a/src/logo.s b/src/logo.s new file mode 100644 index 0000000..609756c --- /dev/null +++ b/src/logo.s @@ -0,0 +1,527 @@ +;----------------------------------------------------------------------------- +; logo.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + +HGR data + + dc h'25552a552a552a35552a552a552a552a' + dc h'552a552a552a552a552a552ad5aad5aa' + dc h'552a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a552a552a35552a552a552a552a' + dc h'552a552a552a552a552a557a8f8080f8' + dc h'5f2a552a15552a2baad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'15552a1500552a2b552aa92d552a557a' + dc h'772f5f2a552a552a552a557a8f8080f8' + dc h'5f2a552a6552552caad5abd5abffafdd' + dc h'fad5ebd5aad5eaddabd7aefdead5badd' + dc h'aad5baf5feddeedfaff5eafdbbf5eadd' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'55541a15004d55d2da2aaab555d4562a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f55525a2aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aadfaad5' + dc h'c081c3e1b0988ce0808683e0b0f88386' + dc h'c3e1b0988c86c3e180988c8683e0c0e1' + dc h'b0e0c0e1b0988c800000000000000000' + dc h'552a550a402a25d5aa2da92d25d5aa2b' + dc h'552a552a2a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aaf5aff7' + dc h'aadfafddaed7bbf7eeddaadfeeddebf5' + dc h'aed5aefffed7aed5aad5aad5fedfaad5' + dc h'8080809880fef09fc3e1b0e0b080c0e1' + dc h'ff87fcffc0e1bff88ffe83e0bff88ffe' + dc h'c3e1bf808c8080800000000000000000' + dc h'552a550a402a552a55d2aad5562a552a' + dc h'2f552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'95552a0520502aadd5aaaaadd5aa9555' + dc h'ff5f2a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'25552a552a552a55552a552a552a552a' + dc h'552a552a552a552a552a552ad5aad5aa' + dc h'552a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a552a552a55552a552a552a552a' + dc h'7f2a552a552a552a552a557a8f8080f8' + dc h'5f2a552a152b152baad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'25552a1500552a2b554aaad5552a55ff' + dc h'576f572a552a552a552a557acf9ffcf9' + dc h'5f7b5d6f652c562caad5abd5abd7aedd' + dc h'fad5ebd5abd5ead5abd7aefdead5bbdd' + dc h'bed5fafdbafdeed5bbf5eaf5baf5eadd' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'55525614002d55d2ea2aaab515d5da2a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f45525a28aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5fadfaad5' + dc h'80fec0fff09f8ce0bffe83e0bfe080fe' + dc h'c3e1f39ffc87cfff80f88f868380bfe0' + dc h'f0e1c0e1bff88f800000000000000000' + dc h'552a550a402a55d4aa2da92da9d5ea2a' + dc h'552a55522a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aaf5baf7' + dc h'aaf7eedfaed7bbffeeddaaf5eeddebf5' + dc h'aed5aef5aed7bad5aad5aad5fedfaad5' + dc h'808080e08398b098c3e1f09fb080c0e1' + dc h'b0988c86c3e1b0988c868080b0988c86' + dc h'c3e1b0808c8080800000000000000000' + dc h'552a550a402a592a55d2aad5da2a55f4' + dc h'3f552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'a5552a4528512a35d5aaa9d5d5aaa555' + dc h'ffff2a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'15552a552a552a2d552a552a552a552a' + dc h'552a552a552a552a552a552ad5aad5aa' + dc h'552a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a552a552a35552a552a552a556a' + dc h'ff3f552a552a552a552a557acf9ffcf9' + dc h'5f2a552a154b162baaf5fff7aff5aadf' + dc h'faf7affdaad5ffd5efdfaffdfbfffedf' + dc h'aad5aad580c082858a94a0d4a88080c0' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'25552a1500555a2a554aaad5552a55ff' + dc h'ff2f7d2a5554aa55aa55aafdcf9ffcf9' + dc h'5f7b5d6f652c562ceaf5aad5abd7aedd' + dc h'ead5abf7abd5ead5abd7aef5eaf5baf5' + dc h'ead5baf7baddefd7aff5eef5baf5aad7' + dc h'80fe8080808080808080808080808080' + dc h'c0e180808c808380808080808080bfe0' + dc h'80e0c081809880800000000000000000' + dc h'55525614002b55d4ea2aaab515d5da2a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f45525a28aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5fed7aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'552a550a402a55d2aa2d552aa9d5da2a' + dc h'552a25552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aaf5baf7' + dc h'aaf7eeddaed7bbd7bedfaaf5eeddebf5' + dc h'aed5aeddaed7bad5aad5aad5bfffaad5' + dc h'808080808c98f09ff3e7b0e0b080c0e1' + dc h'b0988c86c3e1b0f88f8680e0bf988c86' + dc h'c3e1bf80838080800000000000000000' + dc h'552a550c402ca92b55d2aad5da2a25f5' + dc h'3f552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'a5552a552a552a35d5aaaab5d5aa2955' + dc h'7aff2a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'15552a552a552a35552a552a552a552a' + dc h'552a552a552a552a552a552ad5aad5aa' + dc h'552a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a552a552a35552a552a552a557a' + dc h'ff2b552a552a552a552a557acf9ffcf9' + dc h'5f2a552a152b152baaf5eaf7abddabfd' + dc h'ead5abf7abf5ead5abd7bef5eaf5bafd' + dc h'aad5aa95aad1a8c488d1a8d088d5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a1500555a2a554aaad5552a55ff' + dc h'ffff5d2e5f54aa55aa55aafdcf9ffcf9' + dc h'ffffffff29552a35eaddaaf5efdfbfff' + dc h'eaf7affdaad5fad5efdfbff5fbfffed5' + dc h'bbd5baf5baddeed5bbf5fbf5baf5aad7' + dc h'c0818380808080808080808080808080' + dc h'80e080808c8083808080808080e0c081' + dc h'b0e0c081809880800000000000000000' + dc h'552a550a002b55d4aa2baab515d5ea2a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f45525a28aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5bad7aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'552a550a402a554aaab5552aaad5552a' + dc h'552a2a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aaf5badd' + dc h'aaf7eeddaed7bbf7bad7eaf5eeddebf5' + dc h'aed5aeddaef7bad5aad5aad5fffdaad5' + dc h'80808080b098b080b3e6b0e0b080b0e0' + dc h'b0988c86c3e1b0988086fce1b0988c86' + dc h'c3e180e0808080800000000000000000' + dc h'552a55140035a9b555d4aad5da2aaaf5' + dc h'3f552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'a5552a552a552a55e5aaa9d5d5aa2a55' + dc h'2a7f2a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'25552a552a552a35552a552a552a552a' + dc h'552a552a552a552a552a552ad5aad5aa' + dc h'552a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'25552a012a502a55552a552a552a553e' + dc h'757a572a552a552a552a557acf9ffcf9' + dc h'5f2a552a152b152baaddbbffabddabfd' + dc h'ead5ebd5abf5ead7abd7bef5ead5bbf5' + dc h'aad5aad5a0d1a8848ad4a8c488c1aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a150055562a552aaab5552a553e' + dc h'7d3f5f6f7f54aa55aa55aafdcf9ffcf9' + dc h'ffffffff29552a35aad7aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'afd5baf5feddeedfbbf5eafdfbf7afd7' + dc h'c081c0ffb098fce7bffe83e0bf868cfe' + dc h'c3e1f09ffc87c3ff80f88ffe83e080e0' + dc h'fce1c0e1b0f88f800000000000000000' + dc h'552a550a002b55d4aa2ba92d15d5ea2a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f05500a28aad5aad5aaf5afd5' + dc h'aad7aed5aad5abd5aad5aadfaad5aaf5' + dc h'aad5affffed7bfd5aad5aad5fadfaad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'552a550a402a552aaab5252baab5552a' + dc h'554a2a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aaf5afdd' + dc h'aad7eedfbedfbbffbad7aadfeeddebf7' + dc h'aed5aed7fed7bfd5aad5aad5fad7aad5' + dc h'80808098b098b0988c98b0e0b0e0b0e0' + dc h'b0988c86c3e1b0988c8680e0b0988c86' + dc h'c3e1b098808080800000000000000000' + dc h'552a25150035aad556d4aad5dad2aaf5' + dc h'ff552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'29552a552a552a552aaba9add5522a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'25552a552a552a2d552a552a552a552a' + dc h'552a552a552a552a552a552ad5aad5aa' + dc h'552a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'15552a150a502a35552a552a552a553f' + dc h'572e572a552a552a552a557acf9ffcf9' + dc h'5f2a552a152b152baaddbbdfabd7aedd' + dc h'ebd5ebd5aaf5eaf7abd7eef5ead5baf5' + dc h'aad5aad58ad180c488d1a89488c5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'29552a150055552a592aaab5552c557a' + dc h'753f5f6f7f54aa55aa55aafdcf9ffcf9' + dc h'5f7b5d6f2a552a55bff5ffffffffffff' + dc h'ffffffffffffffffffffffffffffffdf' + dc h'eaffaad5aad5aad5aad5aad5aad5aad5' + dc h'809ec0e1b0988ce080868380b0868c80' + dc h'c3e180988c86c3e180988c8683e080e0' + dc h'b0e0ffe1b0988c800000000000000000' + dc h'552a550a402a15d5aa2ba92d25d5ea2a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f45525a28aad5aad5aaf5bad5' + dc h'aad7aed5aed7abd5aad5eaf5aad5ebf5' + dc h'aaf5eef5aef7bad5aad5aad5fad7aad5' + dc h'80808080808080808080808080808098' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'552a550a402a552aa92daab5a92d552a' + dc h'55522a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aadd' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5bedfaad5' + dc h'808080e08ff8f09f8c98f09fc09f8ce0' + dc h'b0988c86c3e1b0f88f8680e0bff88ffe' + dc h'c3e7bff88f8080800000000000000000' + dc h'552a29150035aad5dad4aad5dad4aad5' + dc h'ff572a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552aadaaad95552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'25552a552a552a35552a552a552a552a' + dc h'552a552a552a552a552a55aad5aad5aa' + dc h'd52a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'25552a0508502a55552a552a552a552f' + dc h'5f3f5f2a552a552a552a557acf9ffcf9' + dc h'5f2a552a152b152baaf5badfabd7aedd' + dc h'eed5ebd5aaf5eefdabd7aef7eadffadf' + dc h'aad58a80a0d1a8c48891a0d4a8d0aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'25552a150055552ada2aaab555b4556a' + dc h'773f7d3f7d54aa55aa55aafd8f8080f8' + dc h'5f7b5d6f2a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80e0c0e1b0988ce080fe83e0bf9883fe' + dc h'c3e1f09f8c86c3ff80988c8683e0f0e1' + dc h'b0e0c0e1b0988c800000000000000000' + dc h'552a550a402a15d5aa2ba92d25d5ea2a' + dc h'552a552a553269326932697affffffff' + dc h'5f7b5d6f454a5628aad5aad5aaf5bad5' + dc h'aad7aed5aed7abd5aad5ead5aad5eaf5' + dc h'aad5eef5aed7bad5aad5aad5ead5aad5' + dc h'808080e08f8080808080f09fc09f8086' + dc h'80808080c08180808080808080808080' + dc h'c08180f8838080800000000000000000' + dc h'552a550a402a552a25cdaad5a92b552a' + dc h'15552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad7' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5fedfaad5' + dc h'80808080808080808080808080808c80' + dc h'80808080808080808080808080988086' + dc h'80808080808080800000000000000000' + dc h'554a2a150035aad59ad5aad5ead4aad5' + dc h'ff572a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552aada9d595552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2ad52ad52ad52ad52ad52ad52ad52ad5' + dc h'2ad52ad52ad52ad52ad52ad52ad52ad5' + dc h'2ad52ad52ad52ad5bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'25552a552a552a55552a552a552a552a' + dc h'552a552a552a552a552a55aad5aad5aa' + dc h'd52a552a552a552aaad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'15552a1508552a35552a552a552a556b' + dc h'573f5f2a552a552a552a557a8f8080f8' + dc h'5f2a552a152b152baad5aed7abd7aedd' + dc h'eed5ebd5aad5ebddabd7aef7ead5bad7' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a550000000000000000' + dc h'25552a150055554ada2aaab555d4552a' + dc h'572f7dff5f54aa55aa55aafd8f8080f8' + dc h'5f7b5d6f2a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'8080c3e1b0988ce0808680e0b0988386' + dc h'c3e1b0988c86c38180988c8683e0c0e1' + dc h'b0e0c0e1b0988c800000000000000000' + dc h'552a550a402a25d5aa2da92d25d5aa2b' + dc h'552a552a2a3569326932697affffffff' + dc h'5f7b5d6f452a5528aad5aad5aaf5baf7' + dc h'aadfefdfffdfbfffeeddead5fedffbf7' + dc h'afd5eef5aed7bad5aad5aad5fad7aad5' + dc h'80808098b09880808080b0e0b0e08086' + dc h'80808080808080808080808080808080' + dc h'c08180988c8080800000000000000000' + dc h'552a550a402a552a154baad5652a552a' + dc h'29552a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5beffaad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080988086' + dc h'80808080808080800000000000000000' + dc h'55522a150055aad59ad5aad5ead4aad5' + dc h'ff5f2a552a552a552a552a552a552a55' + dc h'2a552a552a552a55aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'aad5aad5aad5aad5aad5aad5aad5aad5' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'2a552a552a552a552a35a9ada5552a55' + dc h'2a552a552a552a552a552a552a552a55' + dc h'2a552a552a552a558ff8c087bc9eb0e0' + dc h'f3818ff8c0e78386bcfec081cf87bce0' + dc h'839e8f98f0f9c087bce0f381839e8f98' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + dc h'aa55aa55aa55aa55aa55aa55aa55aa55' + dc h'aa55aa55aa55aa55aa55aa55aa55aa55' + dc h'aa55aa55aa55aa55bffef39fbffefcf9' + dc h'f3e7bffef3e7cf9fbffef3e7cf9ffff9' + dc h'cf9fbffefcf9f39ffff9f3e7cf9fbffe' + dc h'80808080808080808080808080808080' + dc h'80808080808080808080808080808080' + dc h'80808080808080800000000000000000' + + end + + diff --git a/src/mminer.asm b/src/mminer.asm new file mode 100644 index 0000000..72548c4 --- /dev/null +++ b/src/mminer.asm @@ -0,0 +1,67 @@ +;----------------------------------------------------------------------------- +; mminer.asm +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + align $100 + + ORG $4000 + + copy src/logo.s + copy src/defs.s ; globally used defines (Incl. MLI) + +MMINER start + + +;----------------------------------------------------------------------------- +main entry + + jsr mainInit ; do some one-time global init + jsr uiWaitForIntroEnter ; color cycle ENTER and wait for key + +loop anop + jsr uiTitleScreen ; go to the ui + and #EVENT_EXIT_GAME ; see if event to exit game is set + bne quit + jsr gameLoop ; not quit, so run the gameplay (or demo) + jmp loop ; go back to the ui + +quit anop + jsr MLI ; quit using the prodos mli + dc h'65' ; ProDOS Quit request + dc s2'*+2' + dc h'04000000000000' + +mainInit entry + + lda #0 ; init some one-time globals + sta backPage + sta leftEdge + sta cameraMode + sta uiComponent + sta cheatActive + sta cheatIndex + sta monochrome + + lda #AUDIO_MUSIC+AUDIO_SOUND ; turn the music and in-game sounds on + sta audioMask + + lda #>HGRPage1 ; set the current hidden (back) page to page 1 + sta currPageH ; (page 2 was made visible by the loader) + + lda #$80 ; make a zero-page bit mask area for checking bits + ldx #7 ; from 1 to 128, set each bit (backwards) +mi00 sta bitMasks,x ; set the bits in the area called bitMasks + lsr a + dex + bpl mi00 + + rts + + end + diff --git a/src/roaudio.asm b/src/roaudio.asm new file mode 100644 index 0000000..3efacc1 --- /dev/null +++ b/src/roaudio.asm @@ -0,0 +1,71 @@ +;----------------------------------------------------------------------------- +; roaudio.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +ROAUDIO start + +;----------------------------------------------------------------------------- +titleMusic entry + dc h'5080815066675056' + dc h'5732565732ABCB32' + dc h'2B33322B3332ABCB' + dc h'32334032334032AB' + dc h'CB32808132808132' + dc h'6667325657326056' + dc h'32ABC0322B30322B' + dc h'3032ABC032304432' + dc h'304432ABC0328889' + dc h'328889327273324C' + dc h'4D324C4D32ABC032' + dc h'263032263032ABC0' + dc h'32304432304432AB' + dc h'C032888932888932' + dc h'7273324C4D324C4D' + dc h'32ABCB3226333226' + dc h'3332ABCB32334032' + dc h'334032ABCB328081' + dc h'3280813266673256' + dc h'573240413280AB32' + dc h'202B32202B3280AB' + dc h'322B33322B333280' + dc h'AB32808132808132' + dc h'6667325657324041' + dc h'3280983220263220' + dc h'2632809832263032' + dc h'2630320000327273' + dc h'327273326061324C' + dc h'4D324C99324C4D32' + dc h'4C4D324C99325B5C' + dc h'3256573233CD3233' + dc h'343233343233CD32' + dc h'4041326667646667' + dc h'327273644C4D3256' + dc h'573280CB19800019' + dc h'80813280CB00' + +inGameMusic entry + dc h'E6CDB7AC9AB79A9A' + dc h'91AC91919AB79A9A' + dc h'E6CDB7AC9AB79A9A' + dc h'91AC91919A9A9A9A' + dc h'E6CDB7AC9AB79A9A' + dc h'91AC91919AB79A9A' + dc h'E6CDB7AC9AB79A73' + dc h'9AB7E6B79A9A9A9A' + dc h'00' + +jumpFreq entry + dc h'4040383830302828' + dc h'2020282830303838' + dc h'4040' + +fallFreq entry + dc h'F4FF4C5864707C88' + dc h'94A0ACB8C4D0DCE8' + + end + diff --git a/src/rofont.asm b/src/rofont.asm new file mode 100644 index 0000000..2fa56b5 --- /dev/null +++ b/src/rofont.asm @@ -0,0 +1,974 @@ +;----------------------------------------------------------------------------- +; rofont.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +ROFONT data + +;----------------------------------------------------------------------------- +font anop +font00 anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +;font01: +; dc h'8080' ; -------------- = -------------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'8080' ; -------------- = -------------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'8080' ; -------------- = -------------- +; +;font02: +; dc h'8080' ; -------------- = -------------- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; +;font03: +; dc h'8080' ; -------------- = -------------- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'8080' ; -------------- = -------------- +; +;font04: +; dc h'8080' ; -------------- = -------------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'CC81' ; X--XX--------X = --XX--XX------ +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'C099' ; X--------XX--X = ------XX--XX-- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'C081' ; X------------X = ------XX------ +; +;font05: +; dc h'8080' ; -------------- = -------------- +; dc h'8F98' ; ---XXXX--XX--- = XXXX------XX-- +; dc h'8F86' ; ---XXXX----XX- = XXXX----XX---- +; dc h'C081' ; X------------X = ------XX------ +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'8C9E' ; ---XX----XXXX- = --XX----XXXX-- +; dc h'839E' ; -----XX--XXXX- = XX------XXXX-- +; dc h'8080' ; -------------- = -------------- +; +font06 anop + dc h'8080' ; -------------- = -------------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'CC81' ; X--XX--------X = --XX--XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'FC99' ; XXXXX----XX--X = --XXXXXX--XX-- + dc h'8080' ; -------------- = -------------- + +font07 anop + dc h'8080' ; -------------- = -------------- + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +;font08: +; dc h'8080' ; -------------- = -------------- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8080' ; -------------- = -------------- +; +;font09: +; dc h'8080' ; -------------- = -------------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8080' ; -------------- = -------------- +; +;font0A: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'C081' ; X------------X = ------XX------ +; dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- +; dc h'C081' ; X------------X = ------XX------ +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'8080' ; -------------- = -------------- +; +;font0B: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'8080' ; -------------- = -------------- +; +font0C anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + +font0D anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +font0E anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'8080' ; -------------- = -------------- + +font0F anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8086' ; -----------XX- = --------XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8C80' ; ---XX--------- = --XX---------- + dc h'8080' ; -------------- = -------------- + +font10 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'839E' ; -----XX--XXXX- = XX------XXXX-- + dc h'C399' ; X----XX--XX--X = XX----XX--XX-- + dc h'B398' ; -XX--XX--XX--- = XX--XX----XX-- + dc h'8F98' ; ---XXXX--XX--- = XXXX------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font11 anop + dc h'8080' ; -------------- = -------------- + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'CC81' ; X--XX--------X = --XX--XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + +font12 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8380' ; -----XX------- = XX------------ + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + +font13 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'C087' ; X----------XXX = ------XXXX---- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font14 anop + dc h'8080' ; -------------- = -------------- + dc h'C081' ; X------------X = ------XX------ + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'CC81' ; X--XX--------X = --XX--XX------ + dc h'C381' ; X----XX------X = XX----XX------ + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'C081' ; X------------X = ------XX------ + dc h'8080' ; -------------- = -------------- + +font15 anop + dc h'8080' ; -------------- = -------------- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8380' ; -----XX------- = XX------------ + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font16 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8380' ; -----XX------- = XX------------ + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font17 anop + dc h'8080' ; -------------- = -------------- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8086' ; -----------XX- = --------XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8080' ; -------------- = -------------- + +font18 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font19 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font1A anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8080' ; -------------- = -------------- + +font1B anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8C80' ; ---XX--------- = --XX---------- + +font1C anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8086' ; -----------XX- = --------XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'C081' ; X------------X = ------XX------ + dc h'8086' ; -----------XX- = --------XX---- + dc h'8080' ; -------------- = -------------- + +font1D anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +font1E anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'B080' ; -XX----------- = ----XX-------- + dc h'C081' ; X------------X = ------XX------ + dc h'8086' ; -----------XX- = --------XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8080' ; -------------- = -------------- + +font1F anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8086' ; -----------XX- = --------XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'8080' ; -------------- = -------------- + dc h'C081' ; X------------X = ------XX------ + dc h'8080' ; -------------- = -------------- + +font20 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'C399' ; X----XX--XX--X = XX----XX--XX-- + dc h'B39E' ; -XX--XX--XXXX- = XX--XX--XXXX-- + dc h'F39F' ; XXX--XX--XXXXX = XX--XXXXXXXX-- + dc h'8380' ; -----XX------- = XX------------ + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font21 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font22 anop + dc h'8080' ; -------------- = -------------- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font23 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font24 anop + dc h'8080' ; -------------- = -------------- + dc h'FF81' ; XXXXXXX------X = XXXXXXXX------ + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'FF81' ; XXXXXXX------X = XXXXXXXX------ + dc h'8080' ; -------------- = -------------- + +font25 anop + dc h'8080' ; -------------- = -------------- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8380' ; -----XX------- = XX------------ + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + +font26 anop + dc h'8080' ; -------------- = -------------- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8380' ; -----XX------- = XX------------ + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8080' ; -------------- = -------------- + +font27 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8380' ; -----XX------- = XX------------ + dc h'C39F' ; X----XX--XXXXX = XX----XXXXXX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font28 anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font29 anop + dc h'8080' ; -------------- = -------------- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + +font2A anop + dc h'8080' ; -------------- = -------------- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font2B anop + dc h'8080' ; -------------- = -------------- + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'BF80' ; -XXXXXX------- = XXXXXX-------- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font2C anop + dc h'8080' ; -------------- = -------------- + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + +font2D anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8F9E' ; ---XXXX--XXXX- = XXXX----XXXX-- + dc h'F399' ; XXX--XX--XX--X = XX--XXXX--XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font2E anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8F98' ; ---XXXX--XX--- = XXXX------XX-- + dc h'B398' ; -XX--XX--XX--- = XX--XX----XX-- + dc h'C399' ; X----XX--XX--X = XX----XX--XX-- + dc h'839E' ; -----XX--XXXX- = XX------XXXX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font2F anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font30 anop + dc h'8080' ; -------------- = -------------- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8380' ; -----XX------- = XX------------ + dc h'8380' ; -----XX------- = XX------------ + dc h'8080' ; -------------- = -------------- + +font31 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'B398' ; -XX--XX--XX--- = XX--XX----XX-- + dc h'C399' ; X----XX--XX--X = XX----XX--XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font32 anop + dc h'8080' ; -------------- = -------------- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font33 anop + dc h'8080' ; -------------- = -------------- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8380' ; -----XX------- = XX------------ + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font34 anop + dc h'8080' ; -------------- = -------------- + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'8080' ; -------------- = -------------- + +font35 anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'8080' ; -------------- = -------------- + +font36 anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'8080' ; -------------- = -------------- + +font37 anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'F399' ; XXX--XX--XX--X = XX--XXXX--XX-- + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'8080' ; -------------- = -------------- + +font38 anop + dc h'8080' ; -------------- = -------------- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +font39 anop + dc h'8080' ; -------------- = -------------- + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'B086' ; -XX--------XX- = ----XX--XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'8080' ; -------------- = -------------- + +font3A anop + dc h'8080' ; -------------- = -------------- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8086' ; -----------XX- = --------XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8C80' ; ---XX--------- = --XX---------- + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8080' ; -------------- = -------------- + +; font3B: +; dc h'8080' ; -------------- = -------------- +; dc h'C09F' ; X--------XXXXX = ------XXXXXX-- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C09F' ; X--------XXXXX = ------XXXXXX-- +; dc h'8080' ; -------------- = -------------- + +; font3C: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8380' ; -----XX------- = XX------------ +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8080' ; -------------- = -------------- + +; font3D: +; dc h'8080' ; -------------- = -------------- +; dc h'BF80' ; -XXXXXX------- = XXXXXX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'BF80' ; -XXXXXX------- = XXXXXX-------- +; dc h'8080' ; -------------- = -------------- + +; font3E: +; dc h'8080' ; -------------- = -------------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'FC81' ; XXXXX--------X = --XXXXXX------ +; dc h'B386' ; -XX--XX----XX- = XX--XX--XX---- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'8080' ; -------------- = -------------- + +; font3F: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +; font40: +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'FF81' ; XXXXXXX------X = XXXXXXXX------ +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- +; dc h'8080' ; -------------- = -------------- + +; font41: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8098' ; ---------XX--- = ----------XX-- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8080' ; -------------- = -------------- + +; font42: +; dc h'8080' ; -------------- = -------------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font43: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font44: +; dc h'8080' ; -------------- = -------------- +; dc h'8098' ; ---------XX--- = ----------XX-- +; dc h'8098' ; ---------XX--- = ----------XX-- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8080' ; -------------- = -------------- + +; font45: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font46: +; dc h'8080' ; -------------- = -------------- +; dc h'C087' ; X----------XXX = ------XXXX---- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'F081' ; XXX----------X = ----XXXX------ +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'8080' ; -------------- = -------------- + +; font47: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8098' ; ---------XX--- = ----------XX-- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- + +; font48: +; dc h'8080' ; -------------- = -------------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8080' ; -------------- = -------------- + +; font49: +; dc h'8080' ; -------------- = -------------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'8080' ; -------------- = -------------- +; dc h'F081' ; XXX----------X = ----XXXX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font4A: +; dc h'8080' ; -------------- = -------------- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8080' ; -------------- = -------------- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'F081' ; XXX----------X = ----XXXX------ + +; font4B: +; dc h'8080' ; -------------- = -------------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'CC81' ; X--XX--------X = --XX--XX------ +; dc h'BC80' ; -XXXX--------- = --XXXX-------- +; dc h'BC80' ; -XXXX--------- = --XXXX-------- +; dc h'CC81' ; X--XX--------X = --XX--XX------ +; dc h'8C86' ; ---XX------XX- = --XX----XX---- +; dc h'8080' ; -------------- = -------------- + +; font4C: +; dc h'8080' ; -------------- = -------------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'C087' ; X----------XXX = ------XXXX---- +; dc h'8080' ; -------------- = -------------- + +; font4D: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'BC86' ; -XXXX------XX- = --XXXX--XX---- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'8080' ; -------------- = -------------- + +; font4E: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8080' ; -------------- = -------------- + +; font4F: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font50: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- + +; font51: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8386' ; -----XX----XX- = XX------XX---- +; dc h'8386' ; -----XX----XX- = XX------XX---- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'8098' ; ---------XX--- = ----------XX-- + +; font52: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'8080' ; -------------- = -------------- + +; font53: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8C80' ; ---XX--------- = --XX---------- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8098' ; ---------XX--- = ----------XX-- +; dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font54: +; dc h'8080' ; -------------- = -------------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'FC81' ; XXXXX--------X = --XXXXXX------ +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'C087' ; X----------XXX = ------XXXX---- +; dc h'8080' ; -------------- = -------------- + +; font55: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- +; dc h'8080' ; -------------- = -------------- + +; font56: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'C081' ; X------------X = ------XX------ +; dc h'8080' ; -------------- = -------------- + +; font57: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'8080' ; -------------- = -------------- + +; font58: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'C081' ; X------------X = ------XX------ +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8080' ; -------------- = -------------- + +; font59: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'8C98' ; ---XX----XX--- = --XX------XX-- +; dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- +; dc h'8098' ; ---------XX--- = ----------XX-- +; dc h'F087' ; XXX--------XXX = ----XXXXXX---- + +; font5A: +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- +; dc h'8086' ; -----------XX- = --------XX---- +; dc h'C081' ; X------------X = ------XX------ +; dc h'B080' ; -XX----------- = ----XX-------- +; dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- +; dc h'8080' ; -------------- = -------------- + +; font5B: +; dc h'8080' ; -------------- = -------------- +; dc h'809E' ; ---------XXXX- = --------XXXX-- +; dc h'C081' ; X------------X = ------XX------ +; dc h'BC80' ; -XXXX--------- = --XXXX-------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'809E' ; ---------XXXX- = --------XXXX-- +; dc h'8080' ; -------------- = -------------- + +; font5C: +; dc h'8080' ; -------------- = -------------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'8080' ; -------------- = -------------- + +; font5D: +; dc h'8080' ; -------------- = -------------- +; dc h'BC80' ; -XXXX--------- = --XXXX-------- +; dc h'C081' ; X------------X = ------XX------ +; dc h'809E' ; ---------XXXX- = --------XXXX-- +; dc h'C081' ; X------------X = ------XX------ +; dc h'C081' ; X------------X = ------XX------ +; dc h'BC80' ; -XXXX--------- = --XXXX-------- +; dc h'8080' ; -------------- = -------------- + +; font5E: +; dc h'8080' ; -------------- = -------------- +; dc h'B086' ; -XX--------XX- = ----XX--XX---- +; dc h'CC81' ; X--XX--------X = --XX--XX------ +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- +; dc h'8080' ; -------------- = -------------- + +font5F anop + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'B3E0' ; -XX--XXXX----- = XX--XX------XX + dc h'B3E0' ; -XX--XXXX----- = XX--XX------XX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + + end + diff --git a/src/rolevels.asm b/src/rolevels.asm new file mode 100644 index 0000000..3295d80 --- /dev/null +++ b/src/rolevels.asm @@ -0,0 +1,585 @@ +;----------------------------------------------------------------------------- +; rolevels.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +ROLEVELS data + + using LOWMEM + + +level_01 anop + dc h'1A4014601E602F40F204FF002F40F204' + dc h'F700135013502D41417148712F40F204' + dc h'3F10C204F1003140195024413F035330' + dc h'2F40D2012F40F204B105730453712440' + dc h'FB102F40F204FF110104' + dc h'00' + + +level_02 anop + dc h'1F403E04FE001264FF002F4053071610' + dc h'2F40F204F41181042204F50041142174' + dc h'22041517F300124012402F4091042174' + dc h'22048701910421742204F30042701247' + dc h'124022404F30310421742204D4017104' + dc h'217422047407F4002F40F204FF110104' + dc h'00' + + +level_03 anop + dc h'19401760182013602F402106C204FF00' + dc h'2F40F204FF002441FB772F40F2046F10' + dc h'54012142FE0021424603F4002142F800' + dc h'62141C605C1024406F105204F500A214' + dc h'FF002F41F114' + dc h'00' + + +level_04 anop + dc h'16401660F444FF002F40F204F3006610' + dc h'2F40B401214151019101D204B2017301' + dc h'72043F70C2046201F20032102F402301' + dc h'A2043F30B1012B403710361025402F10' + dc h'14603214F2002B102F40F204FF110104' + dc h'00' + + +level_05 anop + dc h'1F404106A204FF002F40F204FF002F40' + dc h'81056204D41046713204FD002214F500' + dc h'19502F402A0332043A01F2002F40F204' + dc h'2B714701510127401F40720425101540' + dc h'12401D40244012501540124072455204' + dc h'7F1417410104' + dc h'00' + + +level_06 anop + dc h'1F40F204FF002F40F204FF002F405106' + dc h'920473014201450152042201B104B301' + dc h'2F401E402F40750132042F10D2046901' + dc h'19415204F1041D6022401C501B403214' + dc h'2403F2017204FF002F41F114' + dc h'00' + + +level_07 anop + dc h'1D40F444FF002F40F204E2011C471204' + dc h'F1001D47264052303114A17622743D10' + dc h'12471A072F401104917032741F101547' + dc h'17672D403114D274B510114718071267' + dc h'2F401104C1702D404547176728403210' + dc h'1F401204D104F1002D41F344' + dc h'00' + + +level_08 anop + dc h'11401760166012401A402F4011042104' + dc h'A204E2011B402214F1001D402F401104' + dc h'D204351062101241B204F10013404510' + dc h'12141301C1049101320473016104D204' + dc h'F100154182041A103210194042148201' + dc h'6104D2043201B10445014204A3031240' + dc h'1241B204D104210451057204FF110104' + dc h'00' + + +level_09 anop + dc h'12401F40C204FF002F40F204FF002F40' + dc h'F204421032108210321022102F40F204' + dc h'FD002214220123012803B204F6003210' + dc h'22102241FD002F40F204220123012801' + dc h'230122012204FD002214FF002F41F114' + dc h'00' + + +level_10 anop + dc h'1A401160311411061106A214F1044106' + dc h'920469101A4042142106C104E204F104' + dc h'4A1027401717164082144B101E402F40' + dc h'174134702541A104E20417607114C201' + dc h'24412970174161062F40164013674204' + dc h'7A02D2043F1093012F40F104FF220202' + dc h'00' + + +level_11 anop + dc h'7C401B602F403105B204FF002441FB00' + dc h'2F40F2044601420172215204F8001460' + dc h'2214F800166022412203F20014602214' + dc h'A90141056204B1066106810122045307' + dc h'121016601B502B401F5032142F105301' + dc h'5204FF002F41F114' + dc h'00' + + +level_12 anop + dc h'114017601660134019402F40F204E207' + dc h'E204FF002F40F2043510517421046271' + dc h'5204D1042104C1012540261012401D40' + dc h'22401A10124017406214940112401D40' + dc h'25401A101341A204F100174024102641' + dc h'A104510541052204A30112401B432204' + dc h'D1042104D204D414D114' + dc h'00' + + +level_13 anop + dc h'FF4432401F20C2042102FC0022401320' + dc h'F311240122401F20C2042102FC002240' + dc h'1320221042105210421012142102FC00' + dc h'22401F20C20421023501230135012401' + dc h'22401F20C2042102FC00224013203210' + dc h'32104210421022142102FC0022401F20' + dc h'C2042F13B2310104' + dc h'00' + + +level_14 anop + dc h'1F40F204FF002F40F204FF002F40F204' + dc h'E1011E20224011126101162011126101' + dc h'122026401112E10116202F40F2044101' + dc h'162011126101162011122F40F2041112' + dc h'61011420643011124204FF0026401112' + dc h'F7002F40FF04F344' + dc h'00' + + +level_15 anop + dc h'1540FC44FD002224FD0022247F031531' + dc h'22247106F400126225412105F4001262' + dc h'2F4082012106222461074201E1062224' + dc h'2201D20181062224F900211012622241' + dc h'9201E1052224F200291022244301F201' + dc h'42022B402F102224FD002224FF110104' + dc h'00' + + +level_16 anop + dc h'1F40F204FF002F40F204FF002F40F204' + dc h'141014101240174036102A4012402F40' + dc h'23401610124038406214A1042404D204' + dc h'2F7394302F40F20492042C1014102941' + dc h'F6002F40410151014204F70035502F41' + dc h'F114' + dc h'00' + + +level_17 anop + dc h'1F40D404FF002F40F204FF0025401250' + dc h'13501250155011501650224172707270' + dc h'31702270221421766270727062702274' + dc h'92703170327051762207224725072207' + dc h'52306270227411072507270726072207' + dc h'22472507270712071467220722472407' + dc h'1260E370227422705270F2702274FF00' + dc h'2F40B4012F41F114' + dc h'00' + + +level_18 anop + dc h'1F40C1042204FF002F40F204FF002F40' + dc h'F204220123012801230124012F40F204' + dc h'2F10D204B80123012201220422012301' + dc h'F6002F40D2012F40F204220123012801' + dc h'2301220122042F10D204FF001F41F211' + dc h'00' + + +level_19 anop + dc h'3F40D204FF002F40F204FF002F40F204' + dc h'2201460197012F40F204F30039102241' + dc h'A30187012F40F204F3002A102441F400' + dc h'721464033501C204FF004F40D404F511' + dc h'17410104' + dc h'00' + + +level_20 anop + dc h'FF00FF00FF00FF00FB00EF4031042104' + dc h'9104F30012401940F54421049204FD00' + dc h'2214FF002F4373301470284012501450' + dc h'1350165012102241FD0024402F109204' + dc h'FF002F41F114' + dc h'00' + +;----------------------------------------------------------------------------- +levelsL anop + dc i1<'level_01',i1<'level_02',i1<'level_03',i1<'level_04',i1<'level_05',i1<'level_06' + dc i1<'level_07',i1<'level_08',i1<'level_09',i1<'level_10',i1<'level_11',i1<'level_12' + dc i1<'level_13',i1<'level_14',i1<'level_15',i1<'level_16',i1<'level_17',i1<'level_18' + dc i1<'level_19',i1<'level_20' + +levelsH anop + dc i1>'level_01',i1>'level_02',i1>'level_03',i1>'level_04',i1>'level_05',i1>'level_06' + dc i1>'level_07',i1>'level_08',i1>'level_09',i1>'level_10',i1>'level_11',i1>'level_12' + dc i1>'level_13',i1>'level_14',i1>'level_15',i1>'level_16',i1>'level_17',i1>'level_18' + dc i1>'level_19',i1>'level_20' + + +;----------------------------------------------------------------------------- +; This table maps tiles (1-8) to tile representations, per level. +; space is 00, floor1 is 1 and collapse is 7 & key is 8. Only 0 through 7 +; encoded in the level data. Key, door and switch added programatically to +; the level. The switch looks the same in both kong levels (only place it +; is present) so it doesn't need/get an entry. The door "tile" isn't seen, +; so isn't rendered. It's below the door sprite for collision purposes only. +; +; floor1, floor2, conveyor, wall, bush, rock, collapse, key - door & switch not here +levelTiles anop + dc h'31001C1F0D282709' ; Level 1 + dc h'31001C1F0D282710' ; Level 2 + dc h'2E031E150D052D09' ; Level 3 + dc h'31001C1F0D342709' ; Level 4 + dc h'3100071F0D132708' ; Level 5 + dc h'2F001C1F0D0B3109' ; Level 6 + dc h'3100161F0D172609' ; Level 7 + dc h'31351D1F0D132714' ; Level 8 + dc h'310007180D132709' ; Level 9 + dc h'12301C1B0D0F2001' ; Level 10 + dc h'3133211A0403270A' ; Level 11 + dc h'31351D1F0D132714' ; Level 12 + dc h'292307180D133106' ; Level 13 + dc h'2C2B072200003119' ; Level 14 + dc h'322A211A04032711' ; Level 15 + dc h'31311D1B0E132702' ; Level 16 + dc h'31001C250D0C2609' ; Level 17 + dc h'31001C240D132709' ; Level 18 + dc h'31001C1F0D132709' ; Level 19 + dc h'31001C1F04132709' ; Level 20 + +; This table says which color index to use, to color a +; tile (1-8), per level. The colors are: +; 00 White - 01 Green - 02 Orange - 03 Purple - 04 Blue +; The keys are done as a color animation so at inctance +; time they are left white. +; +; floor1, floor2, conveyor, wall, bush, rock, collapse, key - door & switch not here +levelMasks anop + dc h'0102030201020400' ; Level 1 + dc h'0302030201020400' ; Level 2 + dc h'0400030401030100' ; Level 3 + dc h'0200030401000400' ; Level 4 + dc h'0402020100020100' ; Level 5 + dc h'0100040201000400' ; Level 6 + dc h'0302010401000200' ; Level 7 + dc h'0200010001020400' ; Level 8 + dc h'0302010201020400' ; Level 9 + dc h'0100010201010200' ; Level 10 + dc h'0400030202000100' ; Level 11 + dc h'0300000201020400' ; Level 12 + dc h'0403010201020400' ; Level 13 + dc h'0403000401020400' ; Level 14 + dc h'0402000002000400' ; Level 15 + dc h'0203000301020400' ; Level 16 + dc h'0102010201000400' ; Level 17 + dc h'0202030301020400' ; Level 18 + dc h'0102000201020400' ; Level 19 + dc h'0202040100020400' ; Level 20 + +; The number of bytes to skip when calling a tileDrawP*R* routine for a collapsing platform +collapseHeight anop + dc i1'12*0, 12*1, 12*2, 12*3, 12*4, 12*5, 12*6, 12*7' + +conveyorDirections anop + dc h'0201020102020201010202010102' + dc h'020201020201' + +skylabXPos anop + dc h'01150B091D131105' + dc h'1B190D03' + +willyx anop + dc h'0202021D010F0202' + dc h'010103021D1D0202' + dc h'011D0E1B0F' + +willyy anop + dc h'6868686818186868' + dc h'6820086868686868' + dc h'1868506858' + +willyStartDir anop + dc h'0000000100010000000000000000' + dc h'00000101000100' + +doorL anop + dc i1<'levelLayout+$1BE' ; level 0 + dc i1<'levelLayout+$1DE' ; level 1 + dc i1<'levelLayout+$17E' ; level 2 + dc i1<'levelLayout+$03E' ; level 3 + dc i1<'levelLayout+$1CF' ; level 4 + dc i1<'levelLayout+$01E' ; level 5 + dc i1<'levelLayout+$1CF' ; level 6 + dc i1<'levelLayout+$1CF' ; level 7 + dc i1<'levelLayout+$001' ; level 8 + dc i1<'levelLayout+$1CC' ; level 9 + dc i1<'levelLayout+$021' ; level 10 + dc i1<'levelLayout+$1CF' ; level 11 + dc i1<'levelLayout+$1C1' ; level 12 + dc i1<'levelLayout+$010' ; level 13 + dc i1<'levelLayout+$061' ; level 14 + dc i1<'levelLayout+$0CC' ; level 15 + dc i1<'levelLayout+$03E' ; level 16 + dc i1<'levelLayout+$03E' ; level 17 + dc i1<'levelLayout+$041' ; level 18 + dc i1<'levelLayout+$0B3' ; level 19 + +doorH anop + dc i1>'levelLayout+$1BE' ; level 0 + dc i1>'levelLayout+$1DE' ; level 1 + dc i1>'levelLayout+$17E' ; level 2 + dc i1>'levelLayout+$03E' ; level 3 + dc i1>'levelLayout+$1CF' ; level 4 + dc i1>'levelLayout+$01E' ; level 5 + dc i1>'levelLayout+$1CF' ; level 6 + dc i1>'levelLayout+$1CF' ; level 7 + dc i1>'levelLayout+$001' ; level 8 + dc i1>'levelLayout+$1CC' ; level 9 + dc i1>'levelLayout+$021' ; level 10 + dc i1>'levelLayout+$1CF' ; level 11 + dc i1>'levelLayout+$1C1' ; level 12 + dc i1>'levelLayout+$010' ; level 13 + dc i1>'levelLayout+$061' ; level 14 + dc i1>'levelLayout+$0CC' ; level 15 + dc i1>'levelLayout+$03E' ; level 16 + dc i1>'levelLayout+$03E' ; level 17 + dc i1>'levelLayout+$041' ; level 18 + dc i1>'levelLayout+$0B3' ; level 19 + +door_color1 anop + dc h'0103010203040102' + dc h'0304000101010101' + dc h'0101010101' + +door_color2 anop + dc h'0204040302010102' + dc h'0304010202020202' + dc h'0202020202' + +keyx anop + dc h'091D10181E' + dc h'07181A0313' + dc h'060F171E15' + dc h'010C19101E' + dc h'1E0A1D0709' + dc h'0F111E010D' + dc h'1E141B131E' + dc h'0D0E021DFF' + dc h'10FFFFFFFF' + dc h'150E0C121E' + dc h'181E01131E' + dc h'0F10021D1A' + dc h'1A0A131A0B' + dc h'17031B10FF' + dc h'190C1AFFFF' + dc h'1E0D0111FF' + dc h'180F01131A' + dc h'10FFFFFFFF' + dc h'1E011EFFFF' + dc h'171E0A0E13' + +keyyL anop + dc h'00002080C0' + dc h'2020E02080' + dc h'000000C0C0' + dc h'002020C0C0' + dc h'20C0E08080' + dc h'C0C0E04060' + dc h'60C0E04060' + dc h'40C000A0E0' + dc h'20E0E0E0E0' + dc h'4020C00020' + dc h'002080C0A0' + dc h'60E0C0A0A0' + dc h'60C0202080' + dc h'4000E0E0E0' + dc h'40C0C0E0E0' + dc h'40E00040E0' + dc h'A0E0204060' + dc h'20E0E0E0E0' + dc h'20A080E0E0' + dc h'A0C0606060' + +keyyH anop + dc h'0000000000' + dc h'0000000101' + dc h'0000000000' + dc h'0000000000' + dc h'0000000101' + dc h'0000000101' + dc h'0000000101' + dc h'00000101FF' + dc h'00FFFFFFFF' + dc h'0000000100' + dc h'0000000001' + dc h'0000000100' + dc h'0000010101' + dc h'00010000FF' + dc h'000001FFFF' + dc h'00000001FF' + dc h'0000010101' + dc h'00FFFFFFFF' + dc h'000001FFFF' + dc h'0000010101' + +sprites_x anop + dc h'081D121D1D131012' + dc h'1D01071D0C040F0F' + dc h'060E08181D0F0A11' + dc h'0F090B120F0F0C10' + dc h'050A141901090C08' + dc h'120C0F0E0F0C0315' + dc h'1A01090B190F0F07' + dc h'1014120501000000' + dc h'0F11090F15010901' + dc h'121A0C050C030A13' + dc h'1B1D0C101010050A' + dc h'14191D181C1D1005' + dc h'0B1001071813130F' + dc h'0F' + +sprites_y anop + dc h'3868186868681818' + dc h'5868680818380168' + dc h'4040686800084068' + dc h'6868583800681850' + dc h'0808080800385068' + dc h'2868183868082030' + dc h'3008685830006808' + dc h'2038500868000000' + dc h'0068284050186850' + dc h'3828286868404030' + dc h'0008185030680808' + dc h'0808001830486840' + dc h'3850086830282800' + dc h'68' + +sprites_min anop + dc h'081D010C1D010112' + dc h'1D01061D0104010F' + dc h'060E08181D0F0211' + dc h'0F010B12000F0C0C' + dc h'0505050501090804' + dc h'110C0F0E05022030' + dc h'0401010B19000F07' + dc h'070A070801000000' + dc h'0F11242420010101' + dc h'12190C050C400301' + dc h'041D0C0C0C0C0505' + dc h'05051D1716170D02' + dc h'3004010728131300' + dc h'0F' + +sprites_max anop + dc h'101E131E1E14111E' + dc h'1E0B101E0D0D5810' + dc h'0E16151E1E1E0B1E' + dc h'100A101600101313' + dc h'65656565020F0F1B' + dc h'160D191314396565' + dc h'65020A101D00101E' + dc h'1E1B1E6502493921' + dc h'1014676769021308' + dc h'181E0D091A676141' + dc h'611E131212136969' + dc h'69691E1E1E1E1E67' + dc h'6751021768141459' + dc h'10' + +sprites_speed anop + dc h'0204020204020202' + dc h'0402020402020104' + dc h'0202020204020202' + dc h'0402010204040201' + dc h'0102010204020102' + dc h'0204020102020101' + dc h'0204020102040402' + dc h'0102010204030201' + dc h'0402020102040202' + dc h'0201040102020201' + dc h'0404010102020302' + dc h'0401040202010203' + dc h'0201040201040402' + dc h'04' + +sprites_dir anop + dc h'0000010100010100' + dc h'0000000001000000' + dc h'0001010100000100' + dc h'0001000000000000' + dc h'0000000000000000' + dc h'0000000001000000' + dc h'0100010000000000' + dc h'0001000000000000' + dc h'0000000001000000' + dc h'0000000000000100' + dc h'0000000000010000' + dc h'0000000000010000' + dc h'0100000000000000' + dc h'00' + +sprites_bitmaps anop + dc h'0093090994121212' + dc h'951A1A9623232297' + dc h'2B2B2B2B98333333' + dc h'993F3F3F3B9A4747' + dc h'434343439B4B4B4B' + dc h'4B9C575757535353' + dc h'539D3F3F3F3B9E5F' + dc h'5F5F5F5B9F636363' + dc h'A06F6B6B6BA17373' + dc h'7373A27F7F7B7B7B' + dc h'7BA3474747478383' + dc h'8383A48B8B8B8B87' + dc h'8787A58F5BA6A711' + dc h'08' + +sprites_colors anop + dc h'0200020400010302' + dc h'0002010002000000' + dc h'0203040200040302' + dc h'0001030401000104' + dc h'0301040200020003' + dc h'0400020100030102' + dc h'0400010204010003' + dc h'0102040000000204' + dc h'0004020001000102' + dc h'0304000004040200' + dc h'0300010403020301' + dc h'0400000004030000' + dc h'0204000200000400' + dc h'00' + +sprites_class anop + dc h'0082000082000000' + dc h'8200008200001382' + dc h'0000000082000000' + dc h'820206022B820202' + dc h'0303030382000000' + dc h'0082020202030303' + dc h'03820206022B8202' + dc h'0202020382494949' + dc h'8202030303820000' + dc h'0000820202030303' + dc h'0382020202020303' + dc h'0303820202020203' + dc h'0303820203820019' + dc h'82' + +level_sprites_offset anop + dc h'000205090C101519' + dc h'1E252A32373D4146' + dc h'4B525B6367' + +level_sprites_count anop + dc h'0203040304050405' + dc h'0705080506040505' + dc h'0709080402' + + end + diff --git a/src/rosprites.asm b/src/rosprites.asm new file mode 100644 index 0000000..9f04f33 --- /dev/null +++ b/src/rosprites.asm @@ -0,0 +1,3212 @@ +;----------------------------------------------------------------------------- +; rosprites.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +ROSPRITES data + +;----------------------------------------------------------------------------- +; The Willy sprites and the cheat-boot are stored in white, 2bpp since they are +; not re-instanced. They are drawn from where they reside when loaded. +; To save memory, the other sprites are stored as 1 bpp. The single bits +; get doubled in the instance, and the high bit is set in the bytes, before color +; is applied. The method for bit doubling is not quite a double, but a lookup +; table is used. The "bit" format the sprites are stored in works like this: Each +; byte is composed of 2 nibbles that will each become a 7 bit byte, and the msb +; will automatically be turned on. Assume the nibbles are: abcd efgh then the +; "decompression" will make 2 bytes that will have the format 1abbccdd 1eeffggh. +; a and h together form the "split" pixel, 1 is the msb that's turned on and +; bcdefg are doubled through the 16 byte lookup table named binDouble. +sprites anop +sprite00 anop + dc h'001E0000' ; ---------XXXX--------------- = --------XXXX---------------- + dc h'701F0000' ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- + dc h'7C070000' ; XXXXX------XXX-------------- = --XXXXXXXX------------------ + dc h'30060000' ; -XX--------XX--------------- = ----XX--XX------------------ + dc h'701F0000' ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- + dc h'70070000' ; XXX--------XXX-------------- = ----XXXXXX------------------ + dc h'40010000' ; X------------X-------------- = ------XX-------------------- + dc h'70070000' ; XXX--------XXX-------------- = ----XXXXXX------------------ + dc h'7C1F0000' ; XXXXX----XXXXX-------------- = --XXXXXXXXXX---------------- + dc h'7C1F0000' ; XXXXX----XXXXX-------------- = --XXXXXXXXXX---------------- + dc h'3F7E0000' ; -XXXXXXXXXXXX--------------- = XXXXXX--XXXXXX-------------- + dc h'7F790000' ; XXXXXXXXXXX--X-------------- = XXXXXXXX--XXXX-------------- + dc h'70070000' ; XXX--------XXX-------------- = ----XXXXXX------------------ + dc h'3C1E0000' ; -XXXX----XXXX--------------- = --XXXX--XXXX---------------- + dc h'7C1F0000' ; XXXXX----XXXXX-------------- = --XXXXXXXXXX---------------- + dc h'3C7E0000' ; -XXXX--XXXXXX--------------- = --XXXX--XXXXXX-------------- + +sprite01 anop + dc h'00600300' ; -------XX----------XX------- = ------------XXXX------------ + dc h'007E0300' ; -------XXXXXX------XX------- = --------XXXXXXXX------------ + dc h'407F0000' ; X------XXXXXXX-------------- = ------XXXXXXXX-------------- + dc h'00660000' ; -------XX--XX--------------- = --------XX--XX-------------- + dc h'007E0300' ; -------XXXXXX------XX------- = --------XXXXXXXX------------ + dc h'007E0000' ; -------XXXXXX--------------- = --------XXXXXX-------------- + dc h'00180000' ; ---------XX----------------- = ----------XX---------------- + dc h'007E0000' ; -------XXXXXX--------------- = --------XXXXXX-------------- + dc h'40670300' ; X------XX--XXX-----XX------- = ------XXXX--XXXX------------ + dc h'40670300' ; X------XX--XXX-----XX------- = ------XXXX--XXXX------------ + dc h'40670300' ; X------XX--XXX-----XX------- = ------XXXX--XXXX------------ + dc h'407F0300' ; X------XXXXXXX-----XX------- = ------XXXXXXXXXX------------ + dc h'007E0000' ; -------XXXXXX--------------- = --------XXXXXX-------------- + dc h'00180000' ; ---------XX----------------- = ----------XX---------------- + dc h'00180000' ; ---------XX----------------- = ----------XX---------------- + dc h'00780000' ; -------XXXX----------------- = ----------XXXX-------------- + + +sprite02 anop + dc h'00003C00' ; ---------------XXXX--------- = ----------------XXXX-------- + dc h'00603F00' ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- + dc h'00780F00' ; -------XXXX------XXXX------- = ----------XXXXXXXX---------- + dc h'00600C00' ; -------XX--------XX--------- = ------------XX--XX---------- + dc h'00603F00' ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- + dc h'00600F00' ; -------XX--------XXXX------- = ------------XXXXXX---------- + dc h'00000300' ; -------------------XX------- = --------------XX------------ + dc h'00600F00' ; -------XX--------XXXX------- = ------------XXXXXX---------- + dc h'00783F00' ; -------XXXX----XXXXXX------- = ----------XXXXXXXXXX-------- + dc h'00783F00' ; -------XXXX----XXXXXX------- = ----------XXXXXXXXXX-------- + dc h'007E7C01' ; -------XXXXXX-XXXXX--------X = --------XXXXXX--XXXXXX------ + dc h'007E7301' ; -------XXXXXX-XXX--XX------X = --------XXXXXXXX--XXXX------ + dc h'00600F00' ; -------XX--------XXXX------- = ------------XXXXXX---------- + dc h'00783C00' ; -------XXXX----XXXX--------- = ----------XXXX--XXXX-------- + dc h'00183F00' ; ---------XX----XXXXXX------- = ----------XX--XXXXXX-------- + dc h'00787C01' ; -------XXXX---XXXXX--------X = ----------XXXX--XXXXXX------ + +sprite03 anop + dc h'00004007' ; --------------X----------XXX = --------------------XXXX---- + dc h'00007C07' ; --------------XXXXX------XXX = ----------------XXXXXXXX---- + dc h'00007F01' ; --------------XXXXXXX------X = --------------XXXXXXXX------ + dc h'00004C01' ; --------------X--XX--------X = ----------------XX--XX------ + dc h'00007C07' ; --------------XXXXX------XXX = ----------------XXXXXXXX---- + dc h'00007C01' ; --------------XXXXX--------X = ----------------XXXXXX------ + dc h'00003000' ; ---------------XX----------- = ------------------XX-------- + dc h'00007C01' ; --------------XXXXX--------X = ----------------XXXXXX------ + dc h'00007F07' ; --------------XXXXXXX----XXX = --------------XXXXXXXXXX---- + dc h'00607F1F' ; -------XX-----XXXXXXX--XXXXX = ------------XXXXXXXXXXXXXX-- + dc h'00787F7F' ; -------XXXX---XXXXXXXXXXXXXX = ----------XXXXXXXXXXXXXXXXXX + dc h'00787C79' ; -------XXXX---XXXXX--XXXX--X = ----------XXXX--XXXXXX--XXXX + dc h'00007C07' ; --------------XXXXX------XXX = ----------------XXXXXXXX---- + dc h'00004F67' ; --------------X--XXXXXX--XXX = --------------XXXX--XXXX--XX + dc h'0060037E' ; -------XX----------XXXXXXXX- = ------------XXXX------XXXXXX + dc h'00600F18' ; -------XX--------XXXX--XX--- = ------------XXXXXX------XX-- + +sprite04 anop + dc h'70010000' ; XXX----------X-------------- = ----XXXX-------------------- + dc h'701F0000' ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- + dc h'407F0000' ; X------XXXXXXX-------------- = ------XXXXXXXX-------------- + dc h'40190000' ; X--------XX--X-------------- = ------XX--XX---------------- + dc h'701F0000' ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- + dc h'401F0000' ; X--------XXXXX-------------- = ------XXXXXX---------------- + dc h'00060000' ; -----------XX--------------- = --------XX------------------ + dc h'401F0000' ; X--------XXXXX-------------- = ------XXXXXX---------------- + dc h'707F0000' ; XXX----XXXXXXX-------------- = ----XXXXXXXXXX-------------- + dc h'7C7F0300' ; XXXXX--XXXXXXX-----XX------- = --XXXXXXXXXXXXXX------------ + dc h'7F7F0F00' ; XXXXXXXXXXXXXX---XXXX------- = XXXXXXXXXXXXXXXXXX---------- + dc h'4F1F0F00' ; X--XXXX--XXXXX---XXXX------- = XXXX--XXXXXX--XXXX---------- + dc h'701F0000' ; XXX------XXXXX-------------- = ----XXXXXXXX---------------- + dc h'73790000' ; XXX--XXXXXX--X-------------- = XX--XXXX--XXXX-------------- + dc h'3F600300' ; -XXXXXXXX----------XX------- = XXXXXX------XXXX------------ + dc h'0C780300' ; ---XX--XXXX--------XX------- = --XX------XXXXXX------------ + +sprite05 anop + dc h'001E0000' ; ---------XXXX--------------- = --------XXXX---------------- + dc h'007E0300' ; -------XXXXXX------XX------- = --------XXXXXXXX------------ + dc h'00780F00' ; -------XXXX------XXXX------- = ----------XXXXXXXX---------- + dc h'00180300' ; ---------XX--------XX------- = ----------XX--XX------------ + dc h'007E0300' ; -------XXXXXX------XX------- = --------XXXXXXXX------------ + dc h'00780300' ; -------XXXX--------XX------- = ----------XXXXXX------------ + dc h'00600000' ; -------XX------------------- = ------------XX-------------- + dc h'00780300' ; -------XXXX--------XX------- = ----------XXXXXX------------ + dc h'007E0F00' ; -------XXXXXX----XXXX------- = --------XXXXXXXXXX---------- + dc h'007E0F00' ; -------XXXXXX----XXXX------- = --------XXXXXXXXXX---------- + dc h'401F3F00' ; X--------XXXXX-XXXXXX------- = ------XXXXXX--XXXXXX-------- + dc h'40673F00' ; X------XX--XXX-XXXXXX------- = ------XXXX--XXXXXXXX-------- + dc h'00780300' ; -------XXXX--------XX------- = ----------XXXXXX------------ + dc h'001E0F00' ; ---------XXXX----XXXX------- = --------XXXX--XXXX---------- + dc h'007E0C00' ; -------XXXXXX----XX--------- = --------XXXXXX--XX---------- + dc h'401F0F00' ; X--------XXXXX---XXXX------- = ------XXXXXX--XXXX---------- + +sprite06 anop + dc h'00600300' ; -------XX----------XX------- = ------------XXXX------------ + dc h'00603F00' ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- + dc h'00007F01' ; --------------XXXXXXX------X = --------------XXXXXXXX------ + dc h'00003300' ; ---------------XX--XX------- = --------------XX--XX-------- + dc h'00603F00' ; -------XX------XXXXXX------- = ------------XXXXXXXX-------- + dc h'00003F00' ; ---------------XXXXXX------- = --------------XXXXXX-------- + dc h'00000C00' ; -----------------XX--------- = ----------------XX---------- + dc h'00003F00' ; ---------------XXXXXX------- = --------------XXXXXX-------- + dc h'00607F01' ; -------XX-----XXXXXXX------X = ------------XXXXXXXXXX------ + dc h'00607301' ; -------XX-----XXX--XX------X = ------------XXXX--XXXX------ + dc h'00607301' ; -------XX-----XXX--XX------X = ------------XXXX--XXXX------ + dc h'00607301' ; -------XX-----XXX--XX------X = ------------XXXX--XXXX------ + dc h'00003F00' ; ---------------XXXXXX------- = --------------XXXXXX-------- + dc h'00000C00' ; -----------------XX--------- = ----------------XX---------- + dc h'00000C00' ; -----------------XX--------- = ----------------XX---------- + dc h'00000F00' ; -----------------XXXX------- = --------------XXXX---------- + +sprite07 anop + dc h'00003C00' ; ---------------XXXX--------- = ----------------XXXX-------- + dc h'00007C07' ; --------------XXXXX------XXX = ----------------XXXXXXXX---- + dc h'0000701F' ; --------------XXX------XXXXX = ------------------XXXXXXXX-- + dc h'00003006' ; ---------------XX--------XX- = ------------------XX--XX---- + dc h'00007C07' ; --------------XXXXX------XXX = ----------------XXXXXXXX---- + dc h'00007007' ; --------------XXX--------XXX = ------------------XXXXXX---- + dc h'00004001' ; --------------X------------X = --------------------XX------ + dc h'00007007' ; --------------XXX--------XXX = ------------------XXXXXX---- + dc h'00007C1F' ; --------------XXXXX----XXXXX = ----------------XXXXXXXXXX-- + dc h'00007C1F' ; --------------XXXXX----XXXXX = ----------------XXXXXXXXXX-- + dc h'00003F7E' ; ---------------XXXXXXXXXXXX- = --------------XXXXXX--XXXXXX + dc h'00004F7F' ; --------------X--XXXXXXXXXXX = --------------XXXX--XXXXXXXX + dc h'00007007' ; --------------XXX--------XXX = ------------------XXXXXX---- + dc h'00003C1E' ; ---------------XXXX----XXXX- = ----------------XXXX--XXXX-- + dc h'00007C19' ; --------------XXXXX----XX--X = ----------------XXXXXX--XX-- + dc h'00003F1E' ; ---------------XXXXXX--XXXX- = --------------XXXXXX--XXXX-- + +sprite08 anop + dc h'8F91' ; X---XXXXX--X---X = ------XXXXXXXXXX----XX------ + dc h'C3F1' ; XX----XXXXXX---X = ----XXXXXX----XXXXXXXX------ + dc h'83F1' ; X-----XXXXXX---X = ------XXXX----XXXXXXXX------ + dc h'0E91' ; ----XXX-X--X---X = --------XXXXXXXX----XX------ + dc h'9F10' ; X--XXXXX---X---- = XX----XXXXXXXXXX------------ + dc h'AF30' ; X-X-XXXX--XX---- = --XX--XXXXXXXXXXXX---------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'AF00' ; X-X-XXXX-------- = --XX--XXXXXXXX-------------- + dc h'9F70' ; X--XXXXX-XXX---- = XX----XXXXXXXXXXXXXX-------- + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'DBB1' ; XX-XX-XXX-XX---X = XX--XXXXXX--XXXXXX--XX------ + dc h'E170' ; XXX----X-XXX---- = --XXXXXX------XXXXXX-------- + dc h'4020' ; -X--------X----- = ----XX----------XX---------- + dc h'8110' ; X------X---X---- = ------XX------XX------------ + +sprite09 anop + dc h'0E34' ; ----XXX---XX-X-- = --------XXXXXXXXXX------XX-- + dc h'87E7' ; X----XXXXXX--XXX = ------XXXXXX----XXXXXXXXXX-- + dc h'06E7' ; -----XX-XXX--XXX = --------XXXX----XXXXXXXXXX-- + dc h'2C34' ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- + dc h'4E30' ; -X--XXX---XX---- = ----XX--XXXXXXXXXX---------- + dc h'4E70' ; -X--XXX--XXX---- = ----XX--XXXXXXXXXXXX-------- + dc h'EFF1' ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ + dc h'4EF1' ; -X--XXX-XXXX---X = ----XX--XXXXXXXXXXXXXX------ + dc h'4EF1' ; -X--XXX-XXXX---X = ----XX--XXXXXXXXXXXXXX------ + dc h'2E70' ; --X-XXX--XXX---- = --XX----XXXXXXXXXXXX-------- + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0630' ; -----XX---XX---- = --------XXXX--XXXX---------- + dc h'0630' ; -----XX---XX---- = --------XXXX--XXXX---------- + dc h'C3E1' ; XX----XXXXX----X = ----XXXXXX------XXXXXX------ + dc h'0630' ; -----XX---XX---- = --------XXXX--XXXX---------- + +sprite0A anop + dc h'08F9' ; ----X---XXXXX--X = ------------XXXXXXXXXX----XX + dc h'0C9F' ; ----XX--X--XXXXX = ----------XXXXXX----XXXXXXXX + dc h'089F' ; ----X---X--XXXXX = ------------XXXX----XXXXXXXX + dc h'00F9' ; --------XXXXX--X = --------------XXXXXXXX----XX + dc h'89F1' ; X---X--XXXXX---X = ------XX----XXXXXXXXXX------ + dc h'0AF3' ; ----X-X-XXXX--XX = --------XX--XXXXXXXXXXXX---- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'0A70' ; ----X-X--XXX---- = --------XX--XXXXXXXX-------- + dc h'89F7' ; X---X--XXXXX-XXX = ------XX----XXXXXXXXXXXXXX-- + dc h'08F3' ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + +sprite0B anop + dc h'00FB' ; --------XXXXX-XX = --------------XXXXXXXXXX--XX + dc h'083E' ; ----X-----XXXXX- = ------------XXXXXX----XXXXXX + dc h'003E' ; ----------XXXXX- = --------------XXXX----XXXXXX + dc h'00EB' ; --------XXX-X-XX = ----------------XXXXXXXX--XX + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00FF' ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00FF' ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'00B3' ; --------X-XX--XX = --------------XXXX--XXXX---- + dc h'00B3' ; --------X-XX--XX = --------------XXXX--XXXX---- + dc h'0C1E' ; ----XX-----XXXX- = ----------XXXXXX------XXXXXX + dc h'00B3' ; --------X-XX--XX = --------------XXXX--XXXX---- + +sprite0C anop + dc h'DF00' ; XX-XXXXX-------- = XX--XXXXXXXXXX-------------- + dc h'7C10' ; -XXXXX-----X---- = XXXXXX----XXXXXX------------ + dc h'7C00' ; -XXXXX---------- = XXXXXX----XXXX-------------- + dc h'D700' ; XX-X-XXX-------- = XX--XXXXXXXX---------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'FF00' ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'FF00' ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'CD00' ; XX--XX-X-------- = ----XXXX--XXXX-------------- + dc h'CD00' ; XX--XX-X-------- = ----XXXX--XXXX-------------- + dc h'7830' ; -XXXX-----XX---- = XXXXXX------XXXXXX---------- + dc h'CD00' ; XX--XX-X-------- = ----XXXX--XXXX-------------- + +sprite0D anop + dc h'9F10' ; X--XXXXX---X---- = XX----XXXXXXXXXX------------ + dc h'F930' ; XXXXX--X--XX---- = XXXXXXXX----XXXXXX---------- + dc h'F910' ; XXXXX--X---X---- = XXXXXXXX----XXXX------------ + dc h'9F00' ; X--XXXXX-------- = XX----XXXXXXXX-------------- + dc h'8F91' ; X---XXXXX--X---X = ------XXXXXXXXXX----XX------ + dc h'CF50' ; XX--XXXX-X-X---- = ----XXXXXXXXXXXX--XX-------- + dc h'EFF1' ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ + dc h'0E50' ; ----XXX--X-X---- = --------XXXXXXXX--XX-------- + dc h'EF91' ; XXX-XXXXX--X---X = --XXXXXXXXXXXXXX----XX------ + dc h'CF10' ; XX--XXXX---X---- = ----XXXXXXXXXXXX------------ + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + +sprite0E anop + dc h'2C70' ; --X-XX---XXX---- = --XX------XXXXXXXXXX-------- + dc h'E7E1' ; XXX--XXXXXX----X = --XXXXXXXXXX----XXXXXX------ + dc h'E760' ; XXX--XXX-XX----- = --XXXXXXXXXX----XXXX-------- + dc h'2C34' ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- + dc h'0C72' ; ----XX---XXX--X- = ----------XXXXXXXXXX--XX---- + dc h'0E72' ; ----XXX--XXX--X- = --------XXXXXXXXXXXX--XX---- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'8F72' ; X---XXXX-XXX--X- = ------XXXXXXXXXXXXXX--XX---- + dc h'8F72' ; X---XXXX-XXX--X- = ------XXXXXXXXXXXXXX--XX---- + dc h'0E74' ; ----XXX--XXX-X-- = --------XXXXXXXXXXXX----XX-- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C60' ; ----XX---XX----- = ----------XXXX--XXXX-------- + dc h'0C60' ; ----XX---XX----- = ----------XXXX--XXXX-------- + dc h'87C3' ; X----XXXXX----XX = ------XXXXXX------XXXXXX---- + dc h'0C60' ; ----XX---XX----- = ----------XXXX--XXXX-------- + +sprite0F anop + dc h'89F1' ; X---X--XXXXX---X = ------XX----XXXXXXXXXX------ + dc h'8FC3' ; X---XXXXXX----XX = ------XXXXXXXX----XXXXXX---- + dc h'8FC1' ; X---XXXXXX-----X = ------XXXXXXXX----XXXX------ + dc h'8970' ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- + dc h'08F9' ; ----X---XXXXX--X = ------------XXXXXXXXXX----XX + dc h'0CF5' ; ----XX--XXXX-X-X = ----------XXXXXXXXXXXX--XX-- + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'00F5' ; --------XXXX-X-X = --------------XXXXXXXX--XX-- + dc h'0EF9' ; ----XXX-XXXXX--X = --------XXXXXXXXXXXXXX----XX + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'8DDB' ; X---XX-XXX-XX-XX = ------XX--XXXXXX--XXXXXX--XX + dc h'0E87' ; ----XXX-X----XXX = --------XXXXXX------XXXXXX-- + dc h'0402' ; -----X--------X- = ----------XX----------XX---- + dc h'0881' ; ----X---X------X = ------------XX------XX------ + +sprite10 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'E997' ; XX-X--X--X-XXX = --XXXXXX----XXXX----XXXXXX-- + dc h'1A58' ; --XX-X-X-XX--- = XX------XX--XXXX--XX------XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'2A54' ; -X-X-X-X-X-X-- = --XX----XX--XXXX--XX----XX-- + dc h'8991' ; ---X--X--X---X = ------XX----XXXX----XX------ + dc h'4812' ; X--X-----X--X- = ----XX------XXXX------XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + dc h'4A52' ; X--X-X-X-X--X- = ----XX--XX--XXXX--XX--XX---- + +sprite11 anop + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'8B10' ; X---X-XX---X---- = ------XXXX--XXXX------------ + dc h'8F60' ; X---XXXX-XX----- = ------XXXXXXXX--XXXX-------- + dc h'C310' ; XX----XX---X---- = ----XXXXXX----XX------------ + dc h'C900' ; XX--X--X-------- = ----XXXX----XX-------------- + dc h'CB00' ; XX--X-XX-------- = ----XXXXXX--XX-------------- + dc h'C710' ; XX---XXX---X---- = ----XXXXXXXX--XX------------ + dc h'6610' ; -XX--XX----X---- = --XXXX--XXXX--XX------------ + dc h'6210' ; -XX---X----X---- = --XXXX--XX----XX------------ + dc h'6210' ; -XX---X----X---- = --XXXX--XX----XX------------ + dc h'6010' ; -XX--------X---- = --XXXX--------XX------------ + dc h'E110' ; XXX----X---X---- = --XXXXXX------XX------------ + dc h'DF00' ; XX-XXXXX-------- = XX--XXXXXXXXXX-------------- + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + +sprite12 anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0C60' ; ----XX---XX----- = ----------XXXX--XXXX-------- + dc h'0CB3' ; ----XX--X-XX--XX = ----------XXXXXXXX--XXXX---- + dc h'0E40' ; ----XXX--X------ = --------XXXXXX----XX-------- + dc h'0620' ; -----XX---X----- = --------XXXX----XX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0670' ; -----XX--XXX---- = --------XXXX--XXXXXX-------- + dc h'8B50' ; X---X-XX-X-X---- = ------XXXX--XXXX--XX-------- + dc h'8B50' ; X---X-XX-X-X---- = ------XXXX--XXXX--XX-------- + dc h'8D40' ; X---XX-X-X------ = ------XX--XXXX----XX-------- + dc h'8340' ; X-----XX-X------ = ------XXXX--------XX-------- + dc h'8740' ; X----XXX-X------ = ------XXXXXX------XX-------- + dc h'4E30' ; -X--XXX---XX---- = ----XX--XXXXXXXXXX---------- + dc h'0450' ; -----X---X-X---- = ----------XX--XX--XX-------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + +sprite13 anop + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'08D1' ; ----X---XX-X---X = ------------XXXX--XXXX------ + dc h'0876' ; ----X----XXX-XX- = ------------XXXXXXXX--XXXX-- + dc h'0C91' ; ----XX--X--X---X = ----------XXXXXX----XX------ + dc h'0C40' ; ----XX---X------ = ----------XXXX----XX-------- + dc h'0C50' ; ----XX---X-X---- = ----------XXXXXX--XX-------- + dc h'0CB1' ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ + dc h'06B1' ; -----XX-X-XX---X = --------XXXX--XXXX--XX------ + dc h'0691' ; -----XX-X--X---X = --------XXXX--XX----XX------ + dc h'0691' ; -----XX-X--X---X = --------XXXX--XX----XX------ + dc h'0681' ; -----XX-X------X = --------XXXX--------XX------ + dc h'0E81' ; ----XXX-X------X = --------XXXXXX------XX------ + dc h'8D72' ; X---XX-X-XXX--X- = ------XX--XXXXXXXXXX--XX---- + dc h'04A1' ; -----X--X-X----X = ----------XX----XX--XX------ + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + +sprite14 anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'00B3' ; --------X-XX--XX = --------------XXXX--XXXX---- + dc h'00FD' ; --------XXXXXX-X = --------------XXXXXXXX--XXXX + dc h'0832' ; ----X-----XX--X- = ------------XXXXXX----XX---- + dc h'0891' ; ----X---X--X---X = ------------XXXX----XX------ + dc h'08B1' ; ----X---X-XX---X = ------------XXXXXX--XX------ + dc h'0872' ; ----X----XXX--X- = ------------XXXXXXXX--XX---- + dc h'0C62' ; ----XX---XX---X- = ----------XXXX--XXXX--XX---- + dc h'0C42' ; ----XX---X----X- = ----------XXXX----XX--XX---- + dc h'0C42' ; ----XX---X----X- = ----------XXXX----XX--XX---- + dc h'0C02' ; ----XX--------X- = ----------XXXX--------XX---- + dc h'0C12' ; ----XX-----X--X- = ----------XXXXXX------XX---- + dc h'0AF1' ; ----X-X-XXXX---X = --------XX--XXXXXXXXXX------ + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + +sprite15 anop + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'CD00' ; XX--XX-X-------- = ----XXXX--XXXX-------------- + dc h'BF00' ; X-XXXXXX-------- = XXXX--XXXXXXXX-------------- + dc h'4C10' ; -X--XX-----X---- = ----XX----XXXXXX------------ + dc h'8910' ; X---X--X---X---- = ------XX----XXXX------------ + dc h'8D10' ; X---XX-X---X---- = ------XX--XXXXXX------------ + dc h'4E10' ; -X--XXX----X---- = ----XX--XXXXXXXX------------ + dc h'4630' ; -X---XX---XX---- = ----XX--XXXX--XXXX---------- + dc h'4230' ; -X----X---XX---- = ----XX--XX----XXXX---------- + dc h'4230' ; -X----X---XX---- = ----XX--XX----XXXX---------- + dc h'4030' ; -X--------XX---- = ----XX--------XXXX---------- + dc h'4830' ; -X--X-----XX---- = ----XX------XXXXXX---------- + dc h'8F50' ; X---XXXX-X-X---- = ------XXXXXXXXXX--XX-------- + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + +sprite16 anop + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'8B10' ; X---X-XX---X---- = ------XXXX--XXXX------------ + dc h'6E10' ; -XX-XXX----X---- = --XXXX--XXXXXXXX------------ + dc h'8930' ; X---X--X--XX---- = ------XX----XXXXXX---------- + dc h'0230' ; ------X---XX---- = --------XX----XXXX---------- + dc h'0A30' ; ----X-X---XX---- = --------XX--XXXXXX---------- + dc h'8D30' ; X---XX-X--XX---- = ------XX--XXXXXXXX---------- + dc h'8D60' ; X---XX-X-XX----- = ------XX--XXXX--XXXX-------- + dc h'8960' ; X---X--X-XX----- = ------XX----XX--XXXX-------- + dc h'8960' ; X---X--X-XX----- = ------XX----XX--XXXX-------- + dc h'8160' ; X------X-XX----- = ------XX--------XXXX-------- + dc h'8170' ; X------X-XXX---- = ------XX------XXXXXX-------- + dc h'4EB1' ; -X--XXX-X-XX---X = ----XX--XXXXXXXXXX--XX------ + dc h'8520' ; X----X-X--X----- = ------XX--XX----XX---------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + +sprite17 anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0630' ; -----XX---XX---- = --------XXXX--XXXX---------- + dc h'CD30' ; XX--XX-X--XX---- = ----XXXX--XXXXXXXX---------- + dc h'0270' ; ------X--XXX---- = --------XX----XXXXXX-------- + dc h'0460' ; -----X---XX----- = ----------XX----XXXX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0E60' ; ----XXX--XX----- = --------XXXXXX--XXXX-------- + dc h'0AD1' ; ----X-X-XX-X---X = --------XX--XXXX--XXXX------ + dc h'0AD1' ; ----X-X-XX-X---X = --------XX--XXXX--XXXX------ + dc h'02B1' ; ------X-X-XX---X = --------XX----XXXX--XX------ + dc h'02C1' ; ------X-XX-----X = --------XX--------XXXX------ + dc h'02E1' ; ------X-XXX----X = --------XX------XXXXXX------ + dc h'0C72' ; ----XX---XXX--X- = ----------XXXXXXXXXX--XX---- + dc h'0A20' ; ----X-X---X----- = --------XX--XX--XX---------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + +sprite18 anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'08D1' ; ----X---XX-X---X = ------------XXXX--XXXX------ + dc h'06F1' ; -----XX-XXXX---X = --------XXXX--XXXXXXXX------ + dc h'08C3' ; ----X---XX----XX = ------------XX----XXXXXX---- + dc h'0093' ; --------X--X--XX = --------------XX----XXXX---- + dc h'00D3' ; --------XX-X--XX = --------------XX--XXXXXX---- + dc h'08E3' ; ----X---XXX---XX = ------------XX--XXXXXXXX---- + dc h'0866' ; ----X----XX--XX- = ------------XX--XXXX--XXXX-- + dc h'0846' ; ----X----X---XX- = ------------XX----XX--XXXX-- + dc h'0846' ; ----X----X---XX- = ------------XX----XX--XXXX-- + dc h'0806' ; ----X--------XX- = ------------XX--------XXXX-- + dc h'0887' ; ----X---X----XXX = ------------XX------XXXXXX-- + dc h'00FB' ; --------XXXXX-XX = --------------XXXXXXXXXX--XX + dc h'0040' ; ---------X------ = ------------------XX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + +sprite19 anop + dc h'4A60' ; -X--X-X--XX----- = ----XX--XX--XX--XXXX-------- + dc h'C550' ; XX---X-X-X-X---- = ----XXXX--XX--XX--XX-------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'4410' ; -X---X-----X---- = ----XX----XX--XX------------ + dc h'48E1' ; -X--X---XXX----X = ----XX------XX--XXXXXX------ + dc h'A322' ; X-X---XX--X---X- = --XX--XXXX------XX----XX---- + dc h'2414' ; --X--X-----X-X-- = --XX------XX--XX--------XX-- + dc h'2404' ; --X--X-------X-- = --XX------XX------------XX-- + dc h'2404' ; --X--X-------X-- = --XX------XX------------XX-- + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite1A anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C20' ; ----XX----X----- = ----------XXXX--XX---------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'DF60' ; XX-XXXXX-XX----- = XX--XXXXXXXXXX--XXXX-------- + dc h'7830' ; -XXXX-----XX---- = XXXXXX------XXXXXX---------- + dc h'2010' ; --X--------X---- = --XX----------XX------------ + dc h'5A10' ; -X-XX-X----X---- = XX--XX--XX--XXXX------------ + dc h'EF10' ; XXX-XXXX---X---- = --XXXXXXXXXXXXXX------------ + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'8500' ; X----X-X-------- = ------XX--XX---------------- + +sprite1B anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00B1' ; --------X-XX---X = --------------XXXX--XX------ + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00C1' ; --------XX-----X = ------------------XXXX------ + dc h'0083' ; --------X-----XX = --------------------XXXX---- + dc h'4EB3' ; -X--XXX-X-XX--XX = ----XX--XXXXXXXXXX--XXXX---- + dc h'C3E1' ; XX----XXXXX----X = ----XXXXXX------XXXXXX------ + dc h'8360' ; X-----XX-XX----- = ------XXXX------XXXX-------- + dc h'C160' ; XX-----X-XX----- = ----XXXX--------XXXX-------- + dc h'8570' ; X----X-X-XXX---- = ------XX--XX--XXXXXX-------- + dc h'0A20' ; ----X-X---X----- = --------XX--XX--XX---------- + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0410' ; -----X-----X---- = ----------XX--XX------------ + dc h'0000' ; ---------------- = ---------------------------- + +sprite1C anop + dc h'00C1' ; --------XX-----X = ------------------XXXX------ + dc h'0062' ; ---------XX---X- = ----------------XXXX--XX---- + dc h'00E7' ; --------XXX--XXX = ----------------XXXXXXXXXX-- + dc h'00C1' ; --------XX-----X = ------------------XXXX------ + dc h'0083' ; --------X-----XX = --------------------XXXX---- + dc h'0006' ; -------------XX- = ----------------------XXXX-- + dc h'8D76' ; X---XX-X-XXX-XX- = ------XX--XXXXXXXXXX--XXXX-- + dc h'87C3' ; X----XXXXX----XX = ------XXXXXX------XXXXXX---- + dc h'0281' ; ------X-X------X = --------XX----------XX------ + dc h'85D1' ; X----X-XXX-X---X = ------XX--XX--XX--XXXX------ + dc h'0EF1' ; ----XXX-XXXX---X = --------XXXXXXXXXXXXXX------ + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite1D anop + dc h'0083' ; --------X-----XX = --------------------XXXX---- + dc h'00C5' ; --------XX---X-X = ------------------XXXX--XX-- + dc h'00CF' ; --------XX--XXXX = ------------------XXXXXXXXXX + dc h'08A3' ; ----X---X-X---XX = ------------XX--XX--XXXX---- + dc h'0456' ; -----X---X-X-XX- = ----------XX--XX--XX--XXXX-- + dc h'08AD' ; ----X---X-X-XX-X = ------------XX--XX--XX--XXXX + dc h'06DD' ; -----XX-XX-XXX-X = --------XXXX--XX--XXXX--XXXX + dc h'0E06' ; ----XXX------XX- = --------XXXXXX--------XXXX-- + dc h'0483' ; -----X--X-----XX = ----------XX--------XXXX---- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0CF3' ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'0050' ; ---------X-X---- = --------------XX--XX-------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite1E anop + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'A300' ; X-X---XX-------- = --XX--XXXX------------------ + dc h'F300' ; XXXX--XX-------- = XXXXXXXXXX------------------ + dc h'C510' ; XX---X-X---X---- = ----XXXX--XX--XX------------ + dc h'6A20' ; -XX-X-X---X----- = --XXXX--XX--XX--XX---------- + dc h'B510' ; X-XX-X-X---X---- = XXXX--XX--XX--XX------------ + dc h'BB60' ; X-XXX-XX-XX----- = XXXX--XXXX--XX--XXXX-------- + dc h'6070' ; -XX------XXX---- = --XXXX--------XXXXXX-------- + dc h'C120' ; XX-----X--X----- = ----XXXX--------XX---------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'CF30' ; XX--XXXX--XX---- = ----XXXXXXXXXXXXXX---------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'0400' ; -----X---------- = ----------XX---------------- + dc h'0400' ; -----X---------- = ----------XX---------------- + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite1F anop + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'4600' ; -X---XX--------- = ----XX--XXXX---------------- + dc h'E700' ; XXX--XXX-------- = --XXXXXXXXXX---------------- + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'6000' ; -XX------------- = --XXXX---------------------- + dc h'6EB1' ; -XX-XXX-X-XX---X = --XXXX--XXXXXXXXXX--XX------ + dc h'C3E1' ; XX----XXXXX----X = ----XXXXXX------XXXXXX------ + dc h'8140' ; X------X-X------ = ------XX----------XX-------- + dc h'8BA1' ; X---X-XXX-X----X = ------XXXX--XX--XX--XX------ + dc h'8F70' ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0410' ; -----X-----X---- = ----------XX--XX------------ + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite20 anop + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8D00' ; X---XX-X-------- = ------XX--XXXX-------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'CD72' ; XX--XX-X-XXX--X- = ----XXXX--XXXXXXXXXX--XX---- + dc h'87C3' ; X----XXXXX----XX = ------XXXXXX------XXXXXX---- + dc h'06C1' ; -----XX-XX-----X = --------XXXX------XXXX------ + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'0EA1' ; ----XXX-X-X----X = --------XXXXXX--XX--XX------ + dc h'0450' ; -----X---X-X---- = ----------XX--XX--XX-------- + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite21 anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0430' ; -----X----XX---- = ----------XX--XXXX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'06FB' ; -----XX-XXXXX-XX = --------XXXX--XXXXXXXXXX--XX + dc h'0C1E' ; ----XX-----XXXX- = ----------XXXXXX------XXXXXX + dc h'0804' ; ----X--------X-- = ------------XX----------XX-- + dc h'085A' ; ----X----X-XX-X- = ------------XXXX--XX--XX--XX + dc h'08F7' ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0040' ; ---------X------ = ------------------XX-------- + dc h'0040' ; ---------X------ = ------------------XX-------- + dc h'0040' ; ---------X------ = ------------------XX-------- + dc h'00A1' ; --------X-X----X = ----------------XX--XX------ + +sprite22 anop + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0A30' ; ----X-X---XX---- = --------XX--XXXXXX---------- + dc h'8970' ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- + dc h'8970' ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- + dc h'8970' ; X---X--X-XXX---- = ------XX----XXXXXXXX-------- + dc h'0A30' ; ----X-X---XX---- = --------XX--XXXXXX---------- + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0410' ; -----X-----X---- = ----------XX--XX------------ + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'2E30' ; --X-XXX---XX---- = --XX----XXXXXXXXXX---------- + dc h'AF70' ; X-X-XXXX-XXX---- = --XX--XXXXXXXXXXXXXX-------- + dc h'FF60' ; XXXXXXXX-XX----- = XXXXXXXXXXXXXX--XXXX-------- + dc h'C740' ; XX---XXX-X------ = ----XXXXXXXX------XX-------- + +sprite23 anop + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'08E1' ; ----X---XXX----X = ------------XX--XXXXXX------ + dc h'0472' ; -----X---XXX--X- = ----------XX--XXXXXX--XX---- + dc h'0472' ; -----X---XXX--X- = ----------XX--XXXXXX--XX---- + dc h'0472' ; -----X---XXX--X- = ----------XX--XXXXXX--XX---- + dc h'08E1' ; ----X---XXX----X = ------------XX--XXXXXX------ + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0040' ; ---------X------ = ------------------XX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0050' ; ---------X-X---- = --------------XX--XX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'48F1' ; -X--X---XXXX---X = ----XX------XXXXXXXXXX------ + dc h'4EF3' ; -X--XXX-XXXX--XX = ----XX--XXXXXXXXXXXXXXXX---- + dc h'EFB3' ; XXX-XXXXX-XX--XX = --XXXXXXXXXXXXXXXX--XXXX---- + dc h'8F12' ; X---XXXX---X--X- = ------XXXXXXXXXX------XX---- + +sprite24 anop + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'0072' ; ---------XXX--X- = --------------XXXXXX--XX---- + dc h'0874' ; ----X----XXX-X-- = ------------XXXXXXXX----XX-- + dc h'0874' ; ----X----XXX-X-- = ------------XXXXXXXX----XX-- + dc h'0874' ; ----X----XXX-X-- = ------------XXXXXXXX----XX-- + dc h'0072' ; ---------XXX--X- = --------------XXXXXX--XX---- + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'0081' ; --------X------X = --------------------XX------ + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'00A1' ; --------X-X----X = ----------------XX--XX------ + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'28F3' ; --X-X---XXXX--XX = --XX--------XXXXXXXXXXXX---- + dc h'2EF7' ; --X-XXX-XXXX-XXX = --XX----XXXXXXXXXXXXXXXXXX-- + dc h'FF76' ; XXXXXXXX-XXX-XX- = XXXXXXXXXXXXXXXXXXXX--XXXX-- + dc h'8F34' ; X---XXXX--XX-X-- = ------XXXXXXXXXXXX------XX-- + +sprite25 anop + dc h'00C3' ; --------XX----XX = ------------------XXXXXX---- + dc h'0066' ; ---------XX--XX- = ----------------XXXX--XXXX-- + dc h'003C' ; ----------XXXX-- = --------------XXXX------XXXX + dc h'003C' ; ----------XXXX-- = --------------XXXX------XXXX + dc h'003C' ; ----------XXXX-- = --------------XXXX------XXXX + dc h'0066' ; ---------XX--XX- = ----------------XXXX--XXXX-- + dc h'00C3' ; --------XX----XX = ------------------XXXXXX---- + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'00C3' ; --------XX----XX = ------------------XXXXXX---- + dc h'0042' ; ---------X----X- = ------------------XX--XX---- + dc h'00C3' ; --------XX----XX = ------------------XXXXXX---- + dc h'00C7' ; --------XX---XXX = ------------------XXXXXXXX-- + dc h'81E7' ; X------XXXX--XXX = ------XX--------XXXXXXXXXX-- + dc h'89FF' ; X---X--XXXXXXXXX = ------XX----XXXXXXXXXXXXXXXX + dc h'CFFD' ; XX--XXXXXXXXXX-X = ----XXXXXXXXXXXXXXXXXX--XXXX + dc h'0E78' ; ----XXX--XXXX--- = --------XXXXXXXXXXXX------XX + +sprite26 anop + dc h'C300' ; XX----XX-------- = ----XXXXXX------------------ + dc h'6600' ; -XX--XX--------- = --XXXX--XXXX---------------- + dc h'3C00' ; --XXXX---------- = XXXX------XXXX-------------- + dc h'3C00' ; --XXXX---------- = XXXX------XXXX-------------- + dc h'3C00' ; --XXXX---------- = XXXX------XXXX-------------- + dc h'6600' ; -XX--XX--------- = --XXXX--XXXX---------------- + dc h'C300' ; XX----XX-------- = ----XXXXXX------------------ + dc h'4000' ; -X-------------- = ----XX---------------------- + dc h'C300' ; XX----XX-------- = ----XXXXXX------------------ + dc h'4200' ; -X----X--------- = ----XX--XX------------------ + dc h'C300' ; XX----XX-------- = ----XXXXXX------------------ + dc h'E300' ; XXX---XX-------- = --XXXXXXXX------------------ + dc h'E781' ; XXX--XXXX------X = --XXXXXXXXXX--------XX------ + dc h'FF91' ; XXXXXXXXX--X---X = XXXXXXXXXXXXXXXX----XX------ + dc h'BFF3' ; X-XXXXXXXXXX--XX = XXXX--XXXXXXXXXXXXXXXXXX---- + dc h'1E70' ; ---XXXX--XXX---- = XX------XXXXXXXXXXXX-------- + +sprite27 anop + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'4E00' ; -X--XXX--------- = ----XX--XXXXXX-------------- + dc h'2E10' ; --X-XXX----X---- = --XX----XXXXXXXX------------ + dc h'2E10' ; --X-XXX----X---- = --XX----XXXXXXXX------------ + dc h'2E10' ; --X-XXX----X---- = --XX----XXXXXXXX------------ + dc h'4E00' ; -X--XXX--------- = ----XX--XXXXXX-------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'8100' ; X------X-------- = ------XX-------------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'8500' ; X----X-X-------- = ------XX--XX---------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'CF14' ; XX--XXXX---X-X-- = ----XXXXXXXXXXXX--------XX-- + dc h'EF74' ; XXX-XXXX-XXX-X-- = --XXXXXXXXXXXXXXXXXX----XX-- + dc h'6EFF' ; -XX-XXX-XXXXXXXX = --XXXX--XXXXXXXXXXXXXXXXXXXX + dc h'2CF1' ; --X-XX--XXXX---X = --XX------XXXXXXXXXXXX------ + +sprite28 anop + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'8710' ; X----XXX---X---- = ------XXXXXX--XX------------ + dc h'4E20' ; -X--XXX---X----- = ----XX--XXXXXX--XX---------- + dc h'4E20' ; -X--XXX---X----- = ----XX--XXXXXX--XX---------- + dc h'4E20' ; -X--XXX---X----- = ----XX--XXXXXX--XX---------- + dc h'8710' ; X----XXX---X---- = ------XXXXXX--XX------------ + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'8F12' ; X---XXXX---X--X- = ------XXXXXXXXXX------XX---- + dc h'CF72' ; XX--XXXX-XXX--X- = ----XXXXXXXXXXXXXXXX--XX---- + dc h'CDF7' ; XX--XX-XXXXX-XXX = ----XXXX--XXXXXXXXXXXXXXXX-- + dc h'48F1' ; -X--X---XXXX---X = ----XX------XXXXXXXXXX------ + +sprite29 anop + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C50' ; ----XX---X-X---- = ----------XXXXXX--XX-------- + dc h'0E91' ; ----XXX-X--X---X = --------XXXXXXXX----XX------ + dc h'0E91' ; ----XXX-X--X---X = --------XXXXXXXX----XX------ + dc h'0E91' ; ----XXX-X--X---X = --------XXXXXXXX----XX------ + dc h'0C50' ; ----XX---X-X---- = ----------XXXXXX--XX-------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0C74' ; ----XX---XXX-X-- = ----------XXXXXXXXXX----XX-- + dc h'0EF5' ; ----XXX-XXXX-X-X = --------XXXXXXXXXXXXXX--XX-- + dc h'06FF' ; -----XX-XXXXXXXX = --------XXXX--XXXXXXXXXXXXXX + dc h'02E3' ; ------X-XXX---XX = --------XX------XXXXXXXX---- + +sprite2A anop + dc h'0C30' ; ---XX---XX---- = ----------XXXXXXXX---------- + dc h'0E70' ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- + dc h'8FF1' ; ---XXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8FF1' ; ---XXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'C993' ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- + dc h'0660' ; ----XX-XX----- = --------XXXX----XXXX-------- + dc h'6E76' ; XX-XXX-XXX-XX- = --XXXX--XXXXXXXXXXXX--XXXX-- + dc h'566A' ; X-X-XX-XX-X-X- = XX--XX--XXXX----XXXX--XX--XX + dc h'D99B' ; X-XX--X--XX-XX = XX--XXXX----XXXX----XXXX--XX + dc h'9FF9' ; --XXXXXXXXX--X = XX----XXXXXXXXXXXXXXXX----XX + dc h'9DB9' ; --XXX-X-XXX--X = XX----XX--XXXXXXXX--XX----XX + dc h'1248' ; --X--X-X--X--- = XX------XX--------XX------XX + dc h'2E74' ; -X-XXX-XXX-X-- = --XX----XXXXXXXXXXXX----XX-- + dc h'0420' ; ----X---X----- = ----------XX----XX---------- + dc h'0420' ; ----X---X----- = ----------XX----XX---------- + dc h'0660' ; ----XX-XX----- = --------XXXX----XXXX-------- + +sprite2B anop + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'3000' ; --XX------------ = XXXX------------------------ + dc h'BF70' ; X-XXXXXX-XXX---- = XXXX--XXXXXXXXXXXXXX-------- + dc h'BF70' ; X-XXXXXX-XXX---- = XXXX--XXXXXXXXXXXXXX-------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'8F70' ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'ED30' ; XXX-XX-X--XX---- = --XXXXXX--XXXXXXXX---------- + dc h'FF10' ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ + dc h'BF10' ; X-XXXXXX---X---- = XXXX--XXXXXXXXXX------------ + dc h'BF10' ; X-XXXXXX---X---- = XXXX--XXXXXXXXXX------------ + +sprite2C anop + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'C100' ; XX-----X-------- = ----XXXX-------------------- + dc h'C181' ; XX-----XX------X = ----XXXX------------XX------ + dc h'C160' ; XX-----X-XX----- = ----XXXX--------XXXX-------- + dc h'C910' ; XX--X--X---X---- = ----XXXX----XXXX------------ + dc h'C500' ; XX---X-X-------- = ----XXXX--XX---------------- + dc h'CDF3' ; XX--XX-XXXXX--XX = ----XXXX--XXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'0CF3' ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'87F1' ; X----XXXXXXX---X = ------XXXXXX--XXXXXXXX------ + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'CD70' ; XX--XX-X-XXX---- = ----XXXX--XXXXXXXXXX-------- + dc h'CD70' ; XX--XX-X-XXX---- = ----XXXX--XXXXXXXXXX-------- + +sprite2D anop + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'8340' ; X-----XX-X------ = ------XXXX--------XX-------- + dc h'8320' ; X-----XX--X----- = ------XXXX------XX---------- + dc h'8320' ; X-----XX--X----- = ------XXXX------XX---------- + dc h'8310' ; X-----XX---X---- = ------XXXX----XX------------ + dc h'8310' ; X-----XX---X---- = ------XXXX----XX------------ + dc h'8B00' ; X---X-XX-------- = ------XXXX--XX-------------- + dc h'8BF7' ; X---X-XXXXXX-XXX = ------XXXX--XXXXXXXXXXXXXX-- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'08F7' ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0EE3' ; ----XXX-XXX---XX = --------XXXXXX--XXXXXXXX---- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8BF1' ; X---X-XXXXXX---X = ------XXXX--XXXXXXXXXX------ + dc h'8BF1' ; X---X-XXXXXX---X = ------XXXX--XXXXXXXXXX------ + +sprite2E anop + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0604' ; -----XX------X-- = --------XXXX------------XX-- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0610' ; -----XX----X---- = --------XXXX--XX------------ + dc h'06FF' ; -----XX-XXXXXXXX = --------XXXX--XXXXXXXXXXXXXX + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'00FF' ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX + dc h'00E7' ; --------XXX--XXX = ----------------XXXXXXXXXX-- + dc h'0CD7' ; ----XX--XX-X-XXX = ----------XXXXXX--XXXXXXXX-- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'06F3' ; -----XX-XXXX--XX = --------XXXX--XXXXXXXXXX---- + dc h'06F3' ; -----XX-XXXX--XX = --------XXXX--XXXXXXXXXX---- + +sprite2F anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'2060' ; --X------XX----- = --XX------------XXXX-------- + dc h'C160' ; XX-----X-XX----- = ----XXXX--------XXXX-------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0860' ; ----X----XX----- = ------------XX--XXXX-------- + dc h'FF60' ; XXXXXXXX-XX----- = XXXXXXXXXXXXXX--XXXX-------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'FF00' ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- + dc h'E700' ; XXX--XXX-------- = --XXXXXXXXXX---------------- + dc h'EB30' ; XXX-X-XX--XX---- = --XXXXXXXX--XXXXXX---------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'CF60' ; XX--XXXX-XX----- = ----XXXXXXXXXX--XXXX-------- + dc h'CF60' ; XX--XXXX-XX----- = ----XXXXXXXXXX--XXXX-------- + +sprite30 anop + dc h'0083' ; --------X-----XX = --------------------XXXX---- + dc h'0083' ; --------X-----XX = --------------------XXXX---- + dc h'0483' ; -----X--X-----XX = ----------XX--------XXXX---- + dc h'0883' ; ----X---X-----XX = ------------XX------XXXX---- + dc h'0883' ; ----X---X-----XX = ------------XX------XXXX---- + dc h'0093' ; --------X--X--XX = --------------XX----XXXX---- + dc h'0093' ; --------X--X--XX = --------------XX----XXXX---- + dc h'00A3' ; --------X-X---XX = ----------------XX--XXXX---- + dc h'CFB3' ; XX--XXXXX-XX--XX = ----XXXXXXXXXXXXXX--XXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CF30' ; XX--XXXX--XX---- = ----XXXXXXXXXXXXXX---------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'8FE1' ; X---XXXXXXX----X = ------XXXXXXXX--XXXXXX------ + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0EB3' ; ----XXX-X-XX--XX = --------XXXXXXXXXX--XXXX---- + dc h'0EB3' ; ----XXX-X-XX--XX = --------XXXXXXXXXX--XXXX---- + +sprite31 anop + dc h'0006' ; -------------XX- = ----------------------XXXX-- + dc h'0006' ; -------------XX- = ----------------------XXXX-- + dc h'0006' ; -------------XX- = ----------------------XXXX-- + dc h'0006' ; -------------XX- = ----------------------XXXX-- + dc h'0206' ; ------X------XX- = --------XX------------XXXX-- + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + dc h'0036' ; ----------XX-XX- = --------------XXXX----XXXX-- + dc h'0046' ; ---------X---XX- = ------------------XX--XXXX-- + dc h'8F76' ; X---XXXX-XXX-XX- = ------XXXXXXXXXXXXXX--XXXX-- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'8F70' ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0ED3' ; ----XXX-XX-X--XX = --------XXXXXXXX--XXXXXX---- + dc h'0CF7' ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- + dc h'0C76' ; ----XX---XXX-XX- = ----------XXXXXXXXXX--XXXX-- + dc h'0C76' ; ----XX---XXX-XX- = ----------XXXXXXXXXX--XXXX-- + +sprite32 anop + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + dc h'0EFD' ; ----XXX-XXXXXX-X = --------XXXXXXXXXXXXXX--XXXX + dc h'0EFD' ; ----XXX-XXXXXX-X = --------XXXXXXXXXXXXXX--XXXX + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0EF1' ; ----XXX-XXXX---X = --------XXXXXXXXXXXXXX------ + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0CB7' ; ----XX--X-XX-XXX = ----------XXXXXXXX--XXXXXX-- + dc h'08FF' ; ----X---XXXXXXXX = ------------XXXXXXXXXXXXXXXX + dc h'08FD' ; ----X---XXXXXX-X = ------------XXXXXXXXXX--XXXX + dc h'08FD' ; ----X---XXXXXX-X = ------------XXXXXXXXXX--XXXX + +sprite33 anop + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'EF70' ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- + dc h'E9F1' ; XXX-X--XXXXX---X = --XXXXXX----XXXXXXXXXX------ + dc h'F930' ; XXXXX--X--XX---- = XXXXXXXX----XXXXXX---------- + dc h'FF00' ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- + dc h'F300' ; XXXX--XX-------- = XXXXXXXXXX------------------ + dc h'FF00' ; XXXXXXXX-------- = XXXXXXXXXXXXXX-------------- + dc h'FF30' ; XXXXXXXX--XX---- = XXXXXXXXXXXXXXXXXX---------- + dc h'EFF1' ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ + dc h'EF70' ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + +sprite34 anop + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'8FC3' ; X---XXXXXX----XX = ------XXXXXXXX----XXXXXX---- + dc h'CFC7' ; XX--XXXXXX---XXX = ----XXXXXXXXXX----XXXXXXXX-- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite35 anop + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0EF7' ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- + dc h'0ECF' ; ----XXX-XX--XXXX = --------XXXXXX----XXXXXXXXXX + dc h'8FC3' ; X---XXXXXX----XX = ------XXXXXXXX----XXXXXX---- + dc h'8F70' ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'8F70' ; X---XXXX-XXX---- = ------XXXXXXXXXXXXXX-------- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0EF7' ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite36 anop + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0C9F' ; ----XX--X--XXXXX = ----------XXXXXX----XXXXXXXX + dc h'0C97' ; ----XX--X--X-XXX = ----------XXXXXX----XXXXXX-- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0CF7' ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- + dc h'0CFF' ; ----XX--XXXXXXXX = ----------XXXXXXXXXXXXXXXXXX + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00A1' ; --------X-X----X = ----------------XX--XX------ + dc h'00A1' ; --------X-X----X = ----------------XX--XX------ + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite37 anop + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'F930' ; XXXXX--X--XX---- = XXXXXXXX----XXXXXX---------- + dc h'E930' ; XXX-X--X--XX---- = --XXXXXX----XXXXXX---------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'EF30' ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- + dc h'FF30' ; XXXXXXXX--XX---- = XXXXXXXXXXXXXXXXXX---------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'8500' ; X----X-X-------- = ------XX--XX---------------- + dc h'8500' ; X----X-X-------- = ------XX--XX---------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite38 anop + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'CFF1' ; XX--XXXXXXXX---X = ----XXXXXXXXXXXXXXXXXX------ + dc h'E7E1' ; XXX--XXXXXX----X = --XXXXXXXXXX----XXXXXX------ + dc h'87E3' ; X----XXXXXX---XX = ------XXXXXX----XXXXXXXX---- + dc h'0CF3' ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0CF3' ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'EFF1' ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ + dc h'CFF1' ; XX--XXXXXXXX---X = ----XXXXXXXXXXXXXXXXXX------ + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite39 anop + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'87E3' ; X----XXXXXX---XX = ------XXXXXX----XXXXXXXX---- + dc h'C7E7' ; XX---XXXXXX--XXX = ----XXXXXXXX----XXXXXXXXXX-- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'00E7' ; --------XXX--XXX = ----------------XXXXXXXXXX-- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0820' ; ----X-----X----- = ------------XX--XX---------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite3A anop + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0EF7' ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- + dc h'8F97' ; X---XXXXX--X-XXX = ------XXXXXXXXXX----XXXXXX-- + dc h'0C9F' ; ----XX--X--XXXXX = ----------XXXXXX----XXXXXXXX + dc h'00FF' ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX + dc h'00CF' ; --------XX--XXXX = ------------------XXXXXXXXXX + dc h'00FF' ; --------XXXXXXXX = --------------XXXXXXXXXXXXXX + dc h'0CFF' ; ----XX--XXXXXXXX = ----------XXXXXXXXXXXXXXXXXX + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'0EF7' ; ----XXX-XXXX-XXX = --------XXXXXXXXXXXXXXXXXX-- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0050' ; ---------X-X---- = --------------XX--XX-------- + dc h'0050' ; ---------X-X---- = --------------XX--XX-------- + dc h'0050' ; ---------X-X---- = --------------XX--XX-------- + dc h'0050' ; ---------X-X---- = --------------XX--XX-------- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + +sprite3B anop + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'0A20' ; ----X-X---X----- = --------XX--XX--XX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'8710' ; X----XXX---X---- = ------XXXXXX--XX------------ + dc h'C700' ; XX---XXX-------- = ----XXXXXXXX---------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'6E00' ; -XX-XXX--------- = --XXXX--XXXXXX-------------- + dc h'2400' ; --X--X---------- = --XX------XX---------------- + dc h'2800' ; --X-X----------- = --XX--------XX-------------- + dc h'1010' ; ---X-------X---- = XX------------XX------------ + dc h'0000' ; ---------------- = ---------------------------- + +sprite3C anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0C50' ; ----XX---X-X---- = ----------XXXXXX--XX-------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'8B30' ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- + dc h'C910' ; XX--X--X---X---- = ----XXXX----XXXX------------ + dc h'2060' ; --X------XX----- = --XX------------XXXX-------- + +sprite3D anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'08B1' ; ----X---X-XX---X = ------------XXXXXX--XX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'E7F3' ; XXX--XXXXXXX--XX = --XXXXXXXXXX--XXXXXXXXXX---- + +sprite3E anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'00A5' ; --------X-X--X-X = ----------------XX--XX--XX-- + dc h'00E7' ; --------XXX--XXX = ----------------XXXXXXXXXX-- + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'0072' ; ---------XXX--X- = --------------XXXXXX--XX---- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0C60' ; ----XX---XX----- = ----------XXXX--XXXX-------- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'8100' ; X------X-------- = ------XX-------------------- + +sprite3F anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'A500' ; X-X--X-X-------- = --XX--XX--XX---------------- + dc h'E700' ; XXX--XXX-------- = --XXXXXXXXXX---------------- + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'4E00' ; -X--XXX--------- = ----XX--XXXXXX-------------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'0630' ; -----XX---XX---- = --------XXXX--XXXX---------- + dc h'C160' ; XX-----X-XX----- = ----XXXX--------XXXX-------- + dc h'0081' ; --------X------X = --------------------XX------ + +sprite40 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0A30' ; ----X-X---XX---- = --------XX--XXXXXX---------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'8FDF' ; X---XXXXXX-XXXXX = ------XXXXXXXXXX--XXXXXXXXXX + +sprite41 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0A20' ; ----X-X---X----- = --------XX--XX--XX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0470' ; -----X---XXX---- = ----------XX--XXXXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'08B3' ; ----X---X-XX--XX = ------------XXXXXX--XXXX---- + dc h'0036' ; ----------XX-XX- = --------------XXXX----XXXX-- + dc h'0C08' ; ----XX------X--- = ----------XXXX------------XX + +sprite42 anop + dc h'00C1' ; --------XX-----X = ------------------XXXX------ + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'0450' ; -----X---X-X---- = ----------XX--XX--XX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'08E1' ; ----X---XXX----X = ------------XX--XXXXXX------ + dc h'00E3' ; --------XXX---XX = ----------------XXXXXXXX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'0076' ; ---------XXX-XX- = --------------XXXXXX--XXXX-- + dc h'0024' ; ----------X--X-- = ----------------XX------XX-- + dc h'0014' ; -----------X-X-- = --------------XX--------XX-- + dc h'0808' ; ----X-------X--- = ------------XX------------XX + dc h'0000' ; ---------------- = ---------------------------- + +sprite43 anop + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'CBD3' ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'CDB3' ; XX--XX-XX-XX--XX = ----XXXX--XXXXXXXX--XXXX---- + dc h'6C36' ; -XX-XX----XX-XX- = --XXXX----XXXXXXXX----XXXX-- + dc h'2424' ; --X--X----X--X-- = --XX------XX----XX------XX-- + dc h'4242' ; -X----X--X----X- = ----XX--XX--------XX--XX---- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + +sprite44 anop + dc h'8DB1' ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'EFF7' ; XXX-XXXXXXXX-XXX = --XXXXXXXXXXXXXXXXXXXXXXXX-- + dc h'7C3E' ; -XXXXX----XXXXX- = XXXXXX----XXXXXXXX----XXXXXX + dc h'1C38' ; ---XXX----XXX--- = XX--------XXXXXXXX--------XX + dc h'3C3C' ; --XXXX----XXXX-- = XXXX------XXXXXXXX------XXXX + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'C3C3' ; XX----XXXX----XX = ----XXXXXX--------XXXXXX---- + +sprite45 anop + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'6426' ; -XX--X----X--XX- = --XXXX----XX----XX----XXXX-- + dc h'4812' ; -X--X------X--X- = ----XX------XXXX------XX---- + dc h'6C36' ; -XX-XX----XX-XX- = --XXXX----XXXXXXXX----XXXX-- + dc h'CDB3' ; XX--XX-XX-XX--XX = ----XXXX--XXXXXXXX--XXXX---- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'8DB1' ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ + +sprite46 anop + dc h'E187' ; XXX----XX----XXX = --XXXXXX------------XXXXXX-- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'6C36' ; -XX-XX----XX-XX- = --XXXX----XXXXXXXX----XXXX-- + dc h'CDB3' ; XX--XX-XX-XX--XX = ----XXXX--XXXXXXXX--XXXX---- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'4662' ; -X---XX--XX---X- = ----XX--XXXX----XXXX--XX---- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite47 anop + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'0410' ; -----X-----X---- = ----------XX--XX------------ + dc h'0220' ; ------X---X----- = --------XX------XX---------- + dc h'4410' ; -X---X-----X---- = ----XX----XX--XX------------ + dc h'2220' ; --X---X---X----- = --XX----XX------XX---------- + dc h'4010' ; -X---------X---- = ----XX--------XX------------ + dc h'2600' ; --X--XX--------- = --XX----XXXX---------------- + dc h'C910' ; XX--X--X---X---- = ----XXXX----XXXX------------ + dc h'2420' ; --X--X----X----- = --XX------XX----XX---------- + dc h'2420' ; --X--X----X----- = --XX------XX----XX---------- + dc h'1240' ; ---X--X--X------ = XX------XX--------XX-------- + dc h'1440' ; ---X-X---X------ = XX--------XX------XX-------- + dc h'2220' ; --X---X---X----- = --XX----XX------XX---------- + dc h'2220' ; --X---X---X----- = --XX----XX------XX---------- + dc h'C910' ; XX--X--X---X---- = ----XXXX----XXXX------------ + dc h'0600' ; -----XX--------- = --------XXXX---------------- + +sprite48 anop + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'8191' ; X------XX--X---X = ------XX------XX----XX------ + dc h'0A40' ; ----X-X--X------ = --------XX--XX----XX-------- + dc h'8191' ; X------XX--X---X = ------XX------XX----XX------ + dc h'0A40' ; ----X-X--X------ = --------XX--XX----XX-------- + dc h'8181' ; X------XX------X = ------XX------------XX------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'8181' ; X------XX------X = ------XX------------XX------ + dc h'81C1' ; X------XXX-----X = ------XX----------XXXX------ + dc h'4822' ; -X--X-----X---X- = ----XX------XX--XX----XX---- + dc h'4412' ; -X---X-----X--X- = ----XX----XX--XX------XX---- + dc h'8381' ; X-----XXX------X = ------XXXX----------XX------ + dc h'8181' ; X------XX------X = ------XX------------XX------ + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + +sprite49 anop + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'0440' ; -----X---X------ = ----------XX------XX-------- + dc h'0222' ; ------X---X---X- = --------XX------XX----XX---- + dc h'0444' ; -----X---X---X-- = ----------XX------XX----XX-- + dc h'0222' ; ------X---X---X- = --------XX------XX----XX---- + dc h'0404' ; -----X-------X-- = ----------XX------------XX-- + dc h'0032' ; ----------XX--X- = --------------XXXX----XX---- + dc h'0CC1' ; ----XX--XX-----X = ----------XXXX----XXXX------ + dc h'0202' ; ------X-------X- = --------XX------------XX---- + dc h'0202' ; ------X-------X- = --------XX------------XX---- + dc h'8D24' ; X---XX-X--X--X-- = ------XX--XXXX--XX------XX-- + dc h'81D5' ; X------XXX-X-X-X = ------XX------XX--XXXX--XX-- + dc h'0202' ; ------X-------X- = --------XX------------XX---- + dc h'0202' ; ------X-------X- = --------XX------------XX---- + dc h'0CC1' ; ----XX--XX-----X = ----------XXXX----XXXX------ + dc h'0030' ; ----------XX---- = --------------XXXX---------- + +sprite4A anop + dc h'0012' ; -----------X--X- = --------------XX------XX---- + dc h'0424' ; -----X----X--X-- = ----------XX----XX------XX-- + dc h'0212' ; ------X----X--X- = --------XX----XX------XX---- + dc h'0424' ; -----X----X--X-- = ----------XX----XX------XX-- + dc h'0212' ; ------X----X--X- = --------XX----XX------XX---- + dc h'0404' ; -----X-------X-- = ----------XX------------XX-- + dc h'0260' ; ------X--XX----- = --------XX------XXXX-------- + dc h'0893' ; ----X---X--X--XX = ------------XXXX----XXXX---- + dc h'0414' ; -----X-----X-X-- = ----------XX--XX--------XX-- + dc h'0424' ; -----X----X--X-- = ----------XX----XX------XX-- + dc h'0248' ; ------X--X--X--- = --------XX--------XX------XX + dc h'0228' ; ------X---X-X--- = --------XX------XX--------XX + dc h'0444' ; -----X---X---X-- = ----------XX------XX----XX-- + dc h'0485' ; -----X--X----X-X = ----------XX--------XX--XX-- + dc h'0893' ; ----X---X--X--XX = ------------XXXX----XXXX---- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + +sprite4B anop + dc h'8540' ; X----X-X-X------ = ------XX--XX------XX-------- + dc h'4662' ; -X---XX--XX---X- = ----XX--XXXX----XXXX--XX---- + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'E968' ; XXX-X--X-XX-X--- = --XXXXXX----XX--XXXX------XX + dc h'3A3E' ; --XXX-X---XXXXX- = XXXX----XX--XXXXXX----XXXXXX + dc h'0CB1' ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ + dc h'FF7E' ; XXXXXXXX-XXXXXX- = XXXXXXXXXXXXXXXXXXXX--XXXXXX + dc h'0EF1' ; ----XXX-XXXX---X = --------XXXXXXXXXXXXXX------ + dc h'7E74' ; -XXXXXX--XXX-X-- = XXXXXX--XXXXXXXXXXXX----XX-- + dc h'1EFF' ; ---XXXX-XXXXXXXX = XX------XXXXXXXXXXXXXXXXXXXX + dc h'8DF1' ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ + dc h'6456' ; -XX--X---X-X-XX- = --XXXX----XX--XX--XX--XXXX-- + dc h'325C' ; --XX--X--X-XXX-- = XXXX----XX----XX--XX----XXXX + dc h'9958' ; X--XX--X-X-XX--- = XX----XX----XXXX--XX------XX + dc h'4491' ; -X---X--X--X---X = ----XX----XX--XX----XX------ + dc h'6693' ; -XX--XX-X--X--XX = --XXXX--XXXX--XX----XXXX---- + +sprite4C anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0A40' ; ----X-X--X------ = --------XX--XX----XX-------- + dc h'0C20' ; ----XX----X----- = ----------XXXX--XX---------- + dc h'68E5' ; -XX-X---XXX--X-X = --XXXX------XX--XXXXXX--XX-- + dc h'CB36' ; XX--X-XX--XX-XX- = ----XXXXXX--XXXXXX----XXXX-- + dc h'0CB1' ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ + dc h'EF76' ; XXX-XXXX-XXX-XX- = --XXXXXXXXXXXXXXXXXX--XXXX-- + dc h'0EF5' ; ----XXX-XXXX-X-X = --------XXXXXXXXXXXXXX--XX-- + dc h'EF70' ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- + dc h'3EF7' ; --XXXXX-XXXX-XXX = XXXX----XXXXXXXXXXXXXXXXXX-- + dc h'8DF1' ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ + dc h'6456' ; -XX--X---X-X-XX- = --XXXX----XX--XX--XX--XXXX-- + dc h'2254' ; --X---X--X-X-X-- = --XX----XX----XX--XX----XX-- + dc h'8D91' ; X---XX-XX--X---X = ------XX--XXXXXX----XX------ + dc h'C5B3' ; XX---X-XX-XX--XX = ----XXXX--XX--XXXX--XXXX---- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + +sprite4D anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0440' ; -----X---X------ = ----------XX------XX-------- + dc h'8960' ; X---X--X-XX----- = ------XX----XX--XXXX-------- + dc h'0A32' ; ----X-X---XX--X- = --------XX--XXXXXX----XX---- + dc h'0CB1' ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'4EF3' ; -X--XXX-XXXX--XX = ----XX--XXXXXXXXXXXXXXXX---- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'4452' ; -X---X---X-X--X- = ----XX----XX--XX--XX--XX---- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'85D1' ; X----X-XXX-X---X = ------XX--XX--XX--XXXX------ + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite4E anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0A40' ; ----X-X--X------ = --------XX--XX----XX-------- + dc h'0C20' ; ----XX----X----- = ----------XXXX--XX---------- + dc h'68E5' ; -XX-X---XXX--X-X = --XXXX------XX--XXXXXX--XX-- + dc h'CB36' ; XX--X-XX--XX-XX- = ----XXXXXX--XXXXXX----XXXX-- + dc h'0CB1' ; ----XX--X-XX---X = ----------XXXXXXXX--XX------ + dc h'EF76' ; XXX-XXXX-XXX-XX- = --XXXXXXXXXXXXXXXXXX--XXXX-- + dc h'0EF5' ; ----XXX-XXXX-X-X = --------XXXXXXXXXXXXXX--XX-- + dc h'EF70' ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- + dc h'3EF7' ; --XXXXX-XXXX-XXX = XXXX----XXXXXXXXXXXXXXXXXX-- + dc h'8DF1' ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ + dc h'6456' ; -XX--X---X-X-XX- = --XXXX----XX--XX--XX--XXXX-- + dc h'2254' ; --X---X--X-X-X-- = --XX----XX----XX--XX----XX-- + dc h'8D91' ; X---XX-XX--X---X = ------XX--XXXXXX----XX------ + dc h'C5B3' ; XX---X-XX-XX--XX = ----XXXX--XX--XXXX--XXXX---- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + +sprite4F anop + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'6030' ; -XX-------XX---- = --XXXX--------XXXX---------- + dc h'B960' ; X-XXX--X-XX----- = XXXX--XX----XX--XXXX-------- + dc h'D950' ; XX-XX--X-X-X---- = XX--XXXX----XXXX--XX-------- + dc h'6030' ; -XX-------XX---- = --XXXX--------XXXX---------- + +sprite50 anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'4462' ; -X---X---XX---X- = ----XX----XX----XXXX--XX---- + dc h'C762' ; XX---XXX-XX---X- = ----XXXXXXXX----XXXX--XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + +sprite51 anop + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'8DC5' ; X---XX-XXX---X-X = ------XX--XXXX----XXXX--XX-- + dc h'8B46' ; X---X-XX-X---XX- = ------XXXX--XX----XX--XXXX-- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + +sprite52 anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + dc h'029B' ; ------X-X--XX-XX = --------XX----XX----XXXX--XX + dc h'0E9B' ; ----XXX-X--XX-XX = --------XXXXXXXX----XXXX--XX + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + +sprite53 anop + dc h'E100' ; XXX----X-------- = --XXXXXX-------------------- + dc h'A100' ; X-X----X-------- = --XX--XX-------------------- + dc h'E700' ; XXX--XXX-------- = --XXXXXXXXXX---------------- + dc h'C500' ; XX---X-X-------- = ----XXXX--XX---------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'CF00' ; XX--XXXX-------- = ----XXXXXXXXXX-------------- + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'C700' ; XX---XXX-------- = ----XXXXXXXX---------------- + dc h'EF00' ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- + dc h'EF00' ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- + dc h'FD10' ; XXXXXX-X---X---- = XXXXXXXX--XXXXXX------------ + dc h'FB10' ; XXXXX-XX---X---- = XXXXXXXXXX--XXXX------------ + dc h'C700' ; XX---XXX-------- = ----XXXXXXXX---------------- + dc h'ED00' ; XXX-XX-X-------- = --XXXXXX--XXXX-------------- + dc h'6E00' ; -XX-XXX--------- = --XXXX--XXXXXX-------------- + dc h'ED10' ; XXX-XX-X---X---- = --XXXXXX--XXXXXX------------ + +sprite54 anop + dc h'8700' ; X----XXX-------- = ------XXXXXX---------------- + dc h'8500' ; X----X-X-------- = ------XX--XX---------------- + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'0610' ; -----XX----X---- = --------XXXX--XX------------ + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'8B30' ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- + dc h'8B30' ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- + dc h'8B30' ; X---X-XX--XX---- = ------XXXX--XXXXXX---------- + dc h'8730' ; X----XXX--XX---- = ------XXXXXX--XXXX---------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + +sprite55 anop + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'0A00' ; ----X-X--------- = --------XX--XX-------------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0C20' ; ----XX----X----- = ----------XXXX--XX---------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'8FE1' ; X---XXXXXXX----X = ------XXXXXXXX--XXXXXX------ + dc h'8FD1' ; X---XXXXXX-X---X = ------XXXXXXXXXX--XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0E60' ; ----XXX--XX----- = --------XXXXXX--XXXX-------- + dc h'0670' ; -----XX--XXX---- = --------XXXX--XXXXXX-------- + dc h'0EE1' ; ----XXX-XXX----X = --------XXXXXX--XXXXXX------ + +sprite56 anop + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0410' ; -----X-----X---- = ----------XX--XX------------ + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0850' ; ----X----X-X---- = ------------XXXX--XX-------- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'8B76' ; X---X-XX-XXX-XX- = ------XXXX--XXXXXXXX--XXXX-- + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0CD5' ; ----XX--XX-X-X-X = ----------XXXXXX--XXXX--XX-- + dc h'0687' ; -----XX-X----XXX = --------XXXX--------XXXXXX-- + dc h'0E02' ; ----XXX-------X- = --------XXXXXX--------XX---- + +sprite57 anop + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C20' ; ----XX----X----- = ----------XXXX--XX---------- + dc h'0E30' ; ----XXX---XX---- = --------XXXXXXXXXX---------- + dc h'0A10' ; ----X-X----X---- = --------XX--XXXX------------ + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'EFF1' ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ + dc h'6ED1' ; -XX-XXX-XX-X---X = --XXXX--XXXXXXXX--XXXX------ + dc h'8F10' ; X---XXXX---X---- = ------XXXXXXXXXX------------ + dc h'AB30' ; X-X-X-XX--XX---- = --XX--XXXX--XXXXXX---------- + dc h'E160' ; XXX----X-XX----- = --XXXXXX--------XXXX-------- + dc h'4070' ; -X-------XXX---- = ----XX--------XXXXXX-------- + +sprite58 anop + dc h'00E1' ; --------XXX----X = ----------------XXXXXX------ + dc h'00B1' ; --------X-XX---X = --------------XXXX--XX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0860' ; ----X----XX----- = ------------XX--XXXX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0C70' ; ----XX---XXX---- = ----------XXXXXXXXXX-------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0EE3' ; ----XXX-XXX---XX = --------XXXXXX--XXXXXXXX---- + dc h'06F3' ; -----XX-XXXX--XX = --------XXXX--XXXXXXXXXX---- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0CE1' ; ----XX--XXX----X = ----------XXXX--XXXXXX------ + dc h'0CD1' ; ----XX--XX-X---X = ----------XXXXXX--XXXX------ + dc h'0EE1' ; ----XXX-XXX----X = --------XXXXXX--XXXXXX------ + +sprite59 anop + dc h'00C3' ; --------XX----XX = ------------------XXXXXX---- + dc h'0062' ; ---------XX---X- = ----------------XXXX--XX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00D1' ; --------XX-X---X = --------------XX--XXXX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'08F1' ; ----X---XXXX---X = ------------XXXXXXXXXX------ + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'08F3' ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- + dc h'08B3' ; ----X---X-XX--XX = ------------XXXXXX--XXXX---- + dc h'08B3' ; ----X---X-XX--XX = ------------XXXXXX--XXXX---- + dc h'08D3' ; ----X---XX-X--XX = ------------XXXX--XXXXXX---- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0070' ; ---------XXX---- = --------------XXXXXX-------- + +sprite5A anop + dc h'0087' ; --------X----XXX = --------------------XXXXXX-- + dc h'00C5' ; --------XX---X-X = ------------------XXXX--XX-- + dc h'00E7' ; --------XXX--XXX = ----------------XXXXXXXXXX-- + dc h'00A3' ; --------X-X---XX = ----------------XX--XXXX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00F3' ; --------XXXX--XX = --------------XXXXXXXXXX---- + dc h'00C1' ; --------XX-----X = ------------------XXXX------ + dc h'00E3' ; --------XXX---XX = ----------------XXXXXXXX---- + dc h'00F7' ; --------XXXX-XXX = --------------XXXXXXXXXXXX-- + dc h'00F7' ; --------XXXX-XXX = --------------XXXXXXXXXXXX-- + dc h'08BF' ; ----X---X-XXXXXX = ------------XXXXXX--XXXXXXXX + dc h'08DF' ; ----X---XX-XXXXX = ------------XXXX--XXXXXXXXXX + dc h'00E3' ; --------XXX---XX = ----------------XXXXXXXX---- + dc h'00B7' ; --------X-XX-XXX = --------------XXXX--XXXXXX-- + dc h'0076' ; ---------XXX-XX- = --------------XXXXXX--XXXX-- + dc h'08B7' ; ----X---X-XX-XXX = ------------XXXXXX--XXXXXX-- + +sprite5B anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'7A5E' ; -XXXX-X--X-XXXX- = XXXXXX--XX--XXXX--XX--XXXXXX + dc h'724E' ; -XXX--X--X--XXX- = XXXXXX--XX--------XX--XXXXXX + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5C anop + dc h'C700' ; XX---XXX-------- = ----XXXXXXXX---------------- + dc h'EF10' ; XXX-XXXX---X---- = --XXXXXXXXXXXXXX------------ + dc h'EFF1' ; XXX-XXXXXXXX---X = --XXXXXXXXXXXXXXXXXXXX------ + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'025E' ; ------X--X-XXXX- = --------XX----XX--XX--XXXXXX + dc h'024E' ; ------X--X--XXX- = --------XX--------XX--XXXXXX + dc h'0E7E' ; ----XXX--XXXXXX- = --------XXXXXXXXXXXX--XXXXXX + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5D anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'7A5E' ; -XXXX-X--X-XXXX- = XXXXXX--XX--XXXX--XX--XXXXXX + dc h'724E' ; -XXX--X--X--XXX- = XXXXXX--XX--------XX--XXXXXX + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5E anop + dc h'00E3' ; --------XXX---XX = ----------------XXXXXXXX---- + dc h'08F7' ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'7A40' ; -XXXX-X--X------ = XXXXXX--XX--XX----XX-------- + dc h'7240' ; -XXX--X--X------ = XXXXXX--XX--------XX-------- + dc h'7E70' ; -XXXXXX--XXX---- = XXXXXX--XXXXXXXXXXXX-------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0660' ; -----XX--XX----- = --------XXXX----XXXX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + +sprite5F anop + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8D00' ; X---XX-X-------- = ------XX--XXXX-------------- + dc h'4610' ; -X---XX----X---- = ----XX--XXXX--XX------------ + dc h'2620' ; --X--XX---X----- = --XX----XXXX----XX---------- + dc h'1640' ; ---X-XX--X------ = XX------XXXX------XX-------- + dc h'1640' ; ---X-XX--X------ = XX------XXXX------XX-------- + dc h'2620' ; --X--XX---X----- = --XX----XXXX----XX---------- + dc h'4610' ; -X---XX----X---- = ----XX--XXXX--XX------------ + dc h'8D00' ; X---XX-X-------- = ------XX--XXXX-------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'CD10' ; XX--XX-X---X---- = ----XXXX--XXXXXX------------ + dc h'2600' ; --X--XX--------- = --XX----XXXX---------------- + dc h'EF70' ; XXX-XXXX-XXX---- = --XXXXXXXXXXXXXXXXXX-------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'2020' ; --X-------X----- = --XX------------XX---------- + dc h'4E00' ; -X--XXX--------- = ----XX--XXXXXX-------------- + +sprite60 anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0430' ; -----X----XX---- = ----------XX--XXXX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0430' ; -----X----XX---- = ----------XX--XXXX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0E60' ; ----XXX--XX----- = --------XXXXXX--XXXX-------- + dc h'0891' ; ----X---X--X---X = ------------XXXX----XX------ + dc h'CFF1' ; XX--XXXXXXXX---X = ----XXXXXXXXXXXXXXXXXX------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'8181' ; X------XX------X = ------XX------------XX------ + dc h'0C50' ; ----XX---X-X---- = ----------XXXXXX--XX-------- + +sprite61 anop + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'08B1' ; ----X---X-XX---X = ------------XXXXXX--XX------ + dc h'0232' ; ------X---XX--X- = --------XX----XXXX----XX---- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'8FF3' ; X---XXXXXXXX--XX = ------XXXXXXXXXXXXXXXXXX---- + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'0CD1' ; ----XX--XX-X---X = ----------XXXXXX--XXXX------ + +sprite62 anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00B1' ; --------X-XX---X = --------------XXXX--XX------ + dc h'0862' ; ----X----XX---X- = ------------XX--XXXX--XX---- + dc h'0862' ; ----X----XX---X- = ------------XX--XXXX--XX---- + dc h'0464' ; -----X---XX--X-- = ----------XX----XXXX----XX-- + dc h'0464' ; -----X---XX--X-- = ----------XX----XXXX----XX-- + dc h'0862' ; ----X----XX---X- = ------------XX--XXXX--XX---- + dc h'0862' ; ----X----XX---X- = ------------XX--XXXX--XX---- + dc h'00B1' ; --------X-XX---X = --------------XXXX--XX------ + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'08E1' ; ----X---XXX----X = ------------XX--XXXXXX------ + dc h'0464' ; -----X---XX--X-- = ----------XX----XXXX----XX-- + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0CFF' ; ----XX--XXXXXXXX = ----------XXXXXXXXXXXXXXXXXX + dc h'0400' ; -----X---------- = ----------XX---------------- + dc h'08D3' ; ----X---XX-X--XX = ------------XXXX--XXXXXX---- + +sprite63 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'2004' ; --X----------X-- = --XX--------------------XX-- + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'2004' ; --X----------X-- = --XX--------------------XX-- + dc h'500A' ; -X-X--------X-X- = XX--XX----------------XX--XX + dc h'A3C5' ; X-X---XXXX---X-X = --XX--XXXX--------XXXX--XX-- + dc h'9DB9' ; X--XXX-XX-XXX--X = XX----XX--XXXXXXXX--XX----XX + dc h'4422' ; -X---X----X---X- = ----XX----XX----XX----XX---- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + +sprite64 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'2004' ; --X----------X-- = --XX--------------------XX-- + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'F18F' ; XXXX---XX---XXXX = XXXXXXXX------------XXXXXXXX + dc h'5E7A' ; -X-XXXX--XXXX-X- = XX--XX--XXXXXXXXXXXX--XX--XX + dc h'ADB5' ; X-X-XX-XX-XX-X-X = --XX--XX--XXXXXXXX--XX--XX-- + dc h'4422' ; -X---X----X---X- = ----XX----XX----XX----XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite65 anop + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'4422' ; -X---X----X---X- = ----XX----XX----XX----XX---- + dc h'9DB9' ; X--XXX-XX-XXX--X = XX----XX--XXXXXXXX--XX----XX + dc h'A3C5' ; X-X---XXXX---X-X = --XX--XXXX--------XXXX--XX-- + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'2E74' ; --X-XXX--XXX-X-- = --XX----XXXXXXXXXXXX----XX-- + dc h'1668' ; ---X-XX--XX-X--- = XX------XXXX----XXXX------XX + dc h'1668' ; ---X-XX--XX-X--- = XX------XXXX----XXXX------XX + dc h'1E78' ; ---XXXX--XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'2C34' ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite66 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'4422' ; -X---X----X---X- = ----XX----XX----XX----XX---- + dc h'A5A5' ; X-X--X-XX-X--X-X = --XX--XX--XX----XX--XX--XX-- + dc h'DFFB' ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'76EF' ; -XXX-XX-XXX-XXXX = XXXXXX--XXXX----XXXXXXXXXXXX + dc h'1E78' ; ---XXXX--XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'2C34' ; --X-XX----XX-X-- = --XX------XXXXXXXX------XX-- + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite67 anop + dc h'6030' ; -XX-------XX---- = --XXXX--------XXXX---------- + dc h'D940' ; XX-XX--X-X------ = XX--XXXX----XX----XX-------- + dc h'D970' ; XX-XX--X-XXX---- = XX--XXXX----XXXXXXXX-------- + dc h'6030' ; -XX-------XX---- = --XXXX--------XXXX---------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'A920' ; X-X-X--X--X----- = --XX--XX----XX--XX---------- + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'CF10' ; XX--XXXX---X---- = ----XXXXXXXXXXXX------------ + +sprite68 anop + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'4462' ; -X---X---XX---X- = ----XX----XX----XXXX--XX---- + dc h'C762' ; XX---XXX-XX---X- = ----XXXXXXXX----XXXX--XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'85A1' ; X----X-XX-X----X = ------XX--XX----XX--XX------ + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite69 anop + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'8BC7' ; X---X-XXXX---XXX = ------XXXX--XX----XXXXXXXX-- + dc h'8B44' ; X---X-XX-X---X-- = ------XXXX--XX----XX----XX-- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'0A42' ; ----X-X--X----X- = --------XX--XX----XX--XX---- + dc h'0840' ; ----X----X------ = ------------XX----XX-------- + dc h'0840' ; ----X----X------ = ------------XX----XX-------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite6A anop + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + dc h'0E9D' ; ----XXX-X--XXX-X = --------XXXXXXXX----XX--XXXX + dc h'029D' ; ------X-X--XXX-X = --------XX----XX----XX--XXXX + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0495' ; -----X--X--X-X-X = ----------XX--XX----XX--XX-- + dc h'0091' ; --------X--X---X = --------------XX----XX------ + dc h'0091' ; --------X--X---X = --------------XX----XX------ + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'08F3' ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite6B anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'5A5A' ; -X-XX-X--X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'8991' ; X---X--XX--X---X = ------XX----XXXX----XX------ + dc h'4242' ; -X----X--X----X- = ----XX--XX--------XX--XX---- + dc h'85A1' ; X----X-XX-X----X = ------XX--XX----XX--XX------ + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'85A1' ; X----X-XX-X----X = ------XX--XX----XX--XX------ + dc h'4242' ; -X----X--X----X- = ----XX--XX--------XX--XX---- + dc h'8181' ; X------XX------X = ------XX------------XX------ + +sprite6C anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'5A5A' ; -X-XX-X--X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'8991' ; X---X--XX--X---X = ------XX----XXXX----XX------ + dc h'4242' ; -X----X--X----X- = ----XX--XX--------XX--XX---- + dc h'85A1' ; X----X-XX-X----X = ------XX--XX----XX--XX------ + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'0420' ; -----X----X----- = ----------XX----XX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'4420' ; -X---X----X----- = ----XX----XX----XX---------- + dc h'2A52' ; --X-X-X--X-X--X- = --XX----XX--XXXX--XX--XX---- + dc h'85A5' ; X----X-XX-X--X-X = ------XX--XX----XX--XX--XX-- + +sprite6D anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'000E' ; ------------XXX- = ----------------------XXXXXX + dc h'08FB' ; ----X---XXXXX-XX = ------------XXXXXXXXXXXX--XX + dc h'FF5E' ; XXXXXXXX-X-XXXX- = XXXXXXXXXXXXXXXX--XX--XXXXXX + dc h'5AF1' ; -X-XX-X-XXXX---X = XX--XX--XX--XXXXXXXXXX------ + dc h'FF10' ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0000' ; ---------------- = ---------------------------- + dc h'8522' ; X----X-X--X---X- = ------XX--XX----XX----XX---- + dc h'2A54' ; --X-X-X--X-X-X-- = --XX----XX--XXXX--XX----XX-- + dc h'0422' ; -----X----X---X- = ----------XX----XX----XX---- + dc h'4814' ; -X--X------X-X-- = ----XX------XXXX--------XX-- + dc h'0A50' ; ----X-X--X-X---- = --------XX--XXXX--XX-------- + dc h'44A1' ; -X---X--X-X----X = ----XX----XX----XX--XX------ + +sprite6E anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'0804' ; ----X--------X-- = ------------XX----------XX-- + dc h'004A' ; ---------X--X-X- = ------------------XX--XX--XX + dc h'0897' ; ----X---X--X-XXX = ------------XXXX----XXXXXX-- + dc h'0E52' ; ----XXX--X-X--X- = --------XXXXXXXX--XX--XX---- + dc h'3A91' ; --XXX-X-X--X---X = XXXX----XX--XXXX----XX------ + dc h'DD14' ; XX-XXX-X---X-X-- = XX--XXXX--XXXXXX--------XX-- + dc h'7891' ; -XXXX---X--X---X = XXXXXX------XXXX----XX------ + dc h'C108' ; XX-----X----X--- = ----XXXX------------------XX + dc h'0C32' ; ----XX----XX--X- = ----------XXXXXXXX----XX---- + dc h'3891' ; --XXX---X--X---X = XXXX--------XXXX----XX------ + dc h'8D14' ; X---XX-X---X-X-- = ------XX--XXXXXX--------XX-- + dc h'48F3' ; -X--X---XXXX--XX = ----XX------XXXXXXXXXXXX---- + +sprite6F anop + dc h'0000' ; ---------------- = -------------------------- + dc h'0000' ; ---------------- = -------------------------- + dc h'0000' ; ---------------- = -------------------------- + dc h'0210' ; ------X----X---- = --------XX----XX---------- + dc h'0000' ; ---------------- = -------------------------- + dc h'0000' ; ---------------- = -------------------------- + dc h'4002' ; -X------------X- = ----XX----------------XX-- + dc h'0024' ; ----------X--X-- = ----------------XX------XX + dc h'0842' ; ----X----X----X- = ------------XX----XX--XX-- + dc h'0E20' ; ----XXX---X----- = --------XXXXXX--XX-------- + dc h'2A00' ; --X-X-X--------- = --XX----XX--XX------------ + dc h'CD02' ; XX--XX-X------X- = ----XXXX--XXXX--------XX-- + dc h'6800' ; -XX-X----------- = --XXXX------XX------------ + dc h'C104' ; XX-----X-----X-- = ----XXXX----------------XX + dc h'0412' ; -----X-----X--X- = ----------XX--XX------XX-- + dc h'3881' ; --XXX---X------X = XXXX--------XX------XX---- + +sprite70 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'8181' ; X------XX------X = ------XX------------XX------ + dc h'0A02' ; ----X-X-------X- = --------XX--XX--------XX---- + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'6400' ; -XX--X---------- = --XXXX----XX---------------- + dc h'48B1' ; -X--X---X-XX---X = ----XX------XXXXXX--XX------ + dc h'0220' ; ------X---X----- = --------XX------XX---------- + dc h'0850' ; ----X----X-X---- = ------------XXXX--XX-------- + dc h'8D30' ; X---XX-X--XX---- = ------XX--XXXXXXXX---------- + +sprite71 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'8100' ; X------X-------- = ------XX-------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0440' ; -----X---X------ = ----------XX------XX-------- + dc h'00B1' ; --------X-XX---X = --------------XXXX--XX------ + dc h'4820' ; -X--X-----X----- = ----XX------XX--XX---------- + dc h'0650' ; -----XX--X-X---- = --------XXXX--XX--XX-------- + +sprite72 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0020' ; ----------X----- = ----------------XX---------- + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite73 anop + dc h'6006' ; -XX----------XX- = --XXXX----------------XXXX-- + dc h'9FF9' ; X--XXXXXXXXXX--X = XX----XXXXXXXXXXXXXXXX----XX + dc h'9FF9' ; X--XXXXXXXXXX--X = XX----XXXXXXXXXXXXXXXX----XX + dc h'6006' ; -XX----------XX- = --XXXX----------------XXXX-- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'5AA9' ; -X-XX-X-X-X-X--X = XX--XX--XX--XX--XX--XX----XX + dc h'9FFB' ; X--XXXXXXXXXX-XX = XX----XXXXXXXXXXXXXXXXXX--XX + dc h'D5D9' ; XX-X-X-XXX-XX--X = XX--XXXX--XX--XX--XXXX----XX + dc h'918B' ; X--X---XX---X-XX = XX----XX------------XXXX--XX + dc h'D5D9' ; XX-X-X-XXX-XX--X = XX--XXXX--XX--XX--XXXX----XX + dc h'9FFB' ; X--XXXXXXXXXX-XX = XX----XXXXXXXXXXXXXXXXXX--XX + dc h'5AA9' ; -X-XX-X-X-X-X--X = XX--XX--XX--XX--XX--XX----XX + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite74 anop + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'4872' ; -X--X----XXX--X- = ----XX------XXXXXXXX--XX---- + dc h'4872' ; -X--X----XXX--X- = ----XX------XXXXXXXX--XX---- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'B55A' ; X-XX-X-X-X-XX-X- = XXXX--XX--XX--XX--XX--XX--XX + dc h'DFFF' ; XX-XXXXXXXXXXXXX = XX--XXXXXXXXXXXXXXXXXXXXXXXX + dc h'7AAB' ; -XXXX-X-X-X-X-XX = XXXXXX--XX--XX--XX--XXXX--XX + dc h'D10E' ; XX-X---X----XXX- = XX--XXXX--------------XXXXXX + dc h'749B' ; -XXX-X--X--XX-XX = XXXXXX----XX--XX----XXXX--XX + dc h'D10E' ; XX-X---X----XXX- = XX--XXXX--------------XXXXXX + dc h'7AAB' ; -XXXX-X-X-X-X-XX = XXXXXX--XX--XX--XX--XXXX--XX + dc h'DFFF' ; XX-XXXXXXXXXXXXX = XX--XXXXXXXXXXXXXXXXXXXXXXXX + dc h'B55A' ; X-XX-X-X-X-XX-X- = XXXX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite75 anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'B55E' ; X-XX-X-X-X-XXXX- = XXXX--XX--XX--XX--XX--XXXXXX + dc h'700C' ; -XXX--------XX-- = XXXXXX------------------XXXX + dc h'3A2E' ; --XXX-X---X-XXX- = XXXX----XX--XX--XX----XXXXXX + dc h'7C7C' ; -XXXXX---XXXXX-- = XXXXXX----XXXXXXXXXX----XXXX + dc h'3A2E' ; --XXX-X---X-XXX- = XXXX----XX--XX--XX----XXXXXX + dc h'700C' ; -XXX--------XX-- = XXXXXX------------------XXXX + dc h'B55E' ; X-XX-X-X-X-XXXX- = XXXX--XX--XX--XX--XX--XXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite76 anop + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'4E12' ; -X--XXX----X--X- = ----XX--XXXXXXXX------XX---- + dc h'4E12' ; -X--XXX----X--X- = ----XX--XXXXXXXX------XX---- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'5AAD' ; -X-XX-X-X-X-XX-X = XX--XX--XX--XX--XX--XX--XXXX + dc h'3008' ; --XX--------X--- = XXXX----------------------XX + dc h'955C' ; X--X-X-X-X-XXX-- = XX----XX--XX--XX--XX----XXXX + dc h'3EF9' ; --XXXXX-XXXXX--X = XXXX----XXXXXXXXXXXXXX----XX + dc h'9B6C' ; X--XX-XX-XX-XX-- = XX----XXXX--XX--XXXX----XXXX + dc h'3EF9' ; --XXXXX-XXXXX--X = XXXX----XXXXXXXXXXXXXX----XX + dc h'955C' ; X--X-X-X-X-XXX-- = XX----XX--XX--XX--XX----XXXX + dc h'3008' ; --XX--------X--- = XXXX----------------------XX + dc h'5AAD' ; -X-XX-X-X-X-XX-X = XX--XX--XX--XX--XX--XX--XXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite77 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'1070' ; ---X-----XXX---- = XX------------XXXXXX-------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'1840' ; ---XX----X------ = XX----------XX----XX-------- + dc h'FF40' ; XXXXXXXX-X------ = XXXXXXXXXXXXXX----XX-------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + +sprite78 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'40C3' ; -X------XX----XX = ----XX------------XXXXXX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'4022' ; -X--------X---X- = ----XX----------XX----XX---- + dc h'CF32' ; XX--XXXX--XX--X- = ----XXXXXXXXXXXXXX----XX---- + dc h'CFF3' ; XX--XXXXXXXX--XX = ----XXXXXXXXXXXXXXXXXXXX---- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite79 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'8187' ; X------XX----XXX = ------XX------------XXXXXX-- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'8144' ; X------X-X---X-- = ------XX----------XX----XX-- + dc h'8F74' ; X---XXXX-XXX-X-- = ------XXXXXXXXXXXXXX----XX-- + dc h'8FF7' ; X---XXXXXXXX-XXX = ------XXXXXXXXXXXXXXXXXXXX-- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite7A anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'020E' ; ------X-----XXX- = --------XX------------XXXXXX + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0289' ; ------X-X---X--X = --------XX----------XX----XX + dc h'0EF9' ; ----XXX-XXXXX--X = --------XXXXXXXXXXXXXX----XX + dc h'0EFF' ; ----XXX-XXXXXXXX = --------XXXXXXXXXXXXXXXXXXXX + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite7B anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0200' ; ------X--------- = --------XX------------------ + dc h'8500' ; X----X-X-------- = ------XX--XX---------------- + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'A510' ; X-X--X-X---X---- = --XX--XX--XX--XX------------ + dc h'2A00' ; --X-X-X--------- = --XX----XX--XX-------------- + dc h'1400' ; ---X-X---------- = XX--------XX---------------- + dc h'1060' ; ---X-----XX----- = XX--------------XXXX-------- + dc h'1060' ; ---X-----XX----- = XX--------------XXXX-------- + dc h'2010' ; --X--------X---- = --XX----------XX------------ + dc h'EF30' ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'0A20' ; ----X-X---X----- = --------XX--XX--XX---------- + dc h'8940' ; X---X--X-X------ = ------XX----XX----XX-------- + +sprite7C anop + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'4000' ; -X-------------- = ----XX---------------------- + dc h'4000' ; -X-------------- = ----XX---------------------- + dc h'4000' ; -X-------------- = ----XX---------------------- + dc h'4083' ; -X------X-----XX = ----XX--------------XXXX---- + dc h'4083' ; -X------X-----XX = ----XX--------------XXXX---- + dc h'8140' ; X------X-X------ = ------XX----------XX-------- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'0422' ; -----X----X---X- = ----------XX----XX----XX---- + +sprite7D anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'4000' ; -X-------------- = ----XX---------------------- + dc h'A100' ; X-X----X-------- = --XX--XX-------------------- + dc h'5200' ; -X-X--X--------- = XX--XX--XX------------------ + dc h'A500' ; X-X--X-X-------- = --XX--XX--XX---------------- + dc h'5800' ; -X-XX----------- = XX--XX------XX-------------- + dc h'2800' ; --X-X----------- = --XX--------XX-------------- + dc h'0806' ; ----X--------XX- = ------------XX--------XXXX-- + dc h'0406' ; -----X-------XX- = ----------XX----------XXXX-- + dc h'0481' ; -----X--X------X = ----------XX--------XX------ + dc h'0CF3' ; ----XX--XXXX--XX = ----------XXXXXXXXXXXXXX---- + dc h'0CF7' ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- + dc h'08F3' ; ----X---XXXX--XX = ------------XXXXXXXXXXXX---- + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'0844' ; ----X----X---X-- = ------------XX----XX----XX-- + +sprite7E anop + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'0010' ; -----------X---- = --------------XX------------ + dc h'001C' ; -----------XXX-- = --------------XX--------XXXX + dc h'080C' ; ----X-------XX-- = ------------XX----------XXXX + dc h'0802' ; ----X---------X- = ------------XX--------XX---- + dc h'08F7' ; ----X---XXXX-XXX = ------------XXXXXXXXXXXXXX-- + dc h'08FF' ; ----X---XXXXXXXX = ------------XXXXXXXXXXXXXXXX + dc h'00F7' ; --------XXXX-XXX = --------------XXXXXXXXXXXX-- + dc h'00E3' ; --------XXX---XX = ----------------XXXXXXXX---- + dc h'00A5' ; --------X-X--X-X = ----------------XX--XX--XX-- + dc h'0099' ; --------X--XX--X = --------------XX----XX----XX + +sprite7F anop + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'3800' ; --XXX----------- = XXXX--------XX-------------- + dc h'3010' ; --XX-------X---- = XXXX----------XX------------ + dc h'4010' ; -X---------X---- = ----XX--------XX------------ + dc h'EF10' ; XXX-XXXX---X---- = --XXXXXXXXXXXXXX------------ + dc h'FF10' ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ + dc h'EF00' ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- + dc h'C700' ; XX---XXX-------- = ----XXXXXXXX---------------- + dc h'A500' ; X-X--X-X-------- = --XX--XX--XX---------------- + dc h'9900' ; X--XX--X-------- = XX----XX----XX-------------- + +sprite80 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'0085' ; --------X----X-X = --------------------XX--XX-- + dc h'004A' ; ---------X--X-X- = ------------------XX--XX--XX + dc h'00A5' ; --------X-X--X-X = ----------------XX--XX--XX-- + dc h'001A' ; -----------XX-X- = --------------XX------XX--XX + dc h'0014' ; -----------X-X-- = --------------XX--------XX-- + dc h'6010' ; -XX--------X---- = --XXXX--------XX------------ + dc h'6020' ; -XX-------X----- = --XXXX----------XX---------- + dc h'8120' ; X------X--X----- = ------XX--------XX---------- + dc h'CF30' ; XX--XXXX--XX---- = ----XXXXXXXXXXXXXX---------- + dc h'EF30' ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- + dc h'CF10' ; XX--XXXX---X---- = ----XXXXXXXXXXXX------------ + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'4A00' ; -X--X-X--------- = ----XX--XX--XX-------------- + dc h'2210' ; --X---X----X---- = --XX----XX----XX------------ + +sprite81 anop + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'08A1' ; ----X---X-X----X = ------------XX--XX--XX------ + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'C102' ; XX-----X------X- = ----XXXX--------------XX---- + dc h'C102' ; XX-----X------X- = ----XXXX--------------XX---- + dc h'0281' ; ------X-X------X = --------XX----------XX------ + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'0E10' ; ----XXX----X---- = --------XXXXXXXX------------ + dc h'8510' ; X----X-X---X---- = ------XX--XX--XX------------ + dc h'4420' ; -X---X----X----- = ----XX----XX----XX---------- + +sprite82 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0040' ; ---------X------ = ------------------XX-------- + dc h'00A1' ; --------X-X----X = ----------------XX--XX------ + dc h'0052' ; ---------X-X--X- = --------------XX--XX--XX---- + dc h'08A5' ; ----X---X-X--X-X = ------------XX--XX--XX--XX-- + dc h'0054' ; ---------X-X-X-- = --------------XX--XX----XX-- + dc h'0028' ; ----------X-X--- = ----------------XX--------XX + dc h'0608' ; -----XX-----X--- = --------XXXX--------------XX + dc h'0608' ; -----XX-----X--- = --------XXXX--------------XX + dc h'0804' ; ----X--------X-- = ------------XX----------XX-- + dc h'0CF7' ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0450' ; -----X---X-X---- = ----------XX--XX--XX-------- + dc h'0291' ; ------X-X--X---X = --------XX----XX----XX------ + +sprite83 anop + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'F3CF' ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'A34A' ; X-X---XX-X--X-X- = --XX--XXXX--------XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite84 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'F3CF' ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'C3C7' ; XX----XXXX---XXX = ----XXXXXX--------XXXXXXXX-- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'AF7A' ; X-X-XXXX-XXXX-X- = --XX--XXXXXXXXXXXXXX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0000' ; ---------------- = ---------------------------- + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0000' ; ---------------- = ---------------------------- + +sprite85 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'C3C7' ; XX----XXXX---XXX = ----XXXXXX--------XXXXXXXX-- + dc h'CFF7' ; XX--XXXXXXXX-XXX = ----XXXXXXXXXXXXXXXXXXXXXX-- + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'F3CF' ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'AF7A' ; X-X-XXXX-XXXX-X- = --XX--XXXXXXXXXXXXXX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + +sprite86 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'F3CF' ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'E3CB' ; XXX---XXXX--X-XX = --XXXXXXXX--------XXXXXX--XX + dc h'F3CF' ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'F3CF' ; XXXX--XXXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'0240' ; ------X--X------ = --------XX--------XX-------- + dc h'A55A' ; X-X--X-X-X-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'0000' ; ---------------- = ---------------------------- + +sprite87 anop + dc h'EF00' ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- + dc h'9310' ; X--X--XX---X---- = XX----XXXX----XX------------ + dc h'FF10' ; XXXXXXXX---X---- = XXXXXXXXXXXXXXXX------------ + dc h'BB10' ; X-XXX-XX---X---- = XXXX--XXXX--XXXX------------ + dc h'7C10' ; -XXXXX-----X---- = XXXXXX----XXXXXX------------ + dc h'EF00' ; XXX-XXXX-------- = --XXXXXXXXXXXX-------------- + dc h'4400' ; -X---X---------- = ----XX----XX---------------- + dc h'4400' ; -X---X---------- = ----XX----XX---------------- + dc h'4400' ; -X---X---------- = ----XX----XX---------------- + dc h'2800' ; --X-X----------- = --XX--------XX-------------- + dc h'2800' ; --X-X----------- = --XX--------XX-------------- + dc h'2800' ; --X-X----------- = --XX--------XX-------------- + dc h'1010' ; ---X-------X---- = XX------------XX------------ + dc h'1010' ; ---X-------X---- = XX------------XX------------ + dc h'3810' ; --XXX------X---- = XXXX--------XXXX------------ + dc h'3810' ; --XXX------X---- = XXXX--------XXXX------------ + +sprite88 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'4C40' ; -X--XX---X------ = ----XX----XXXX----XX-------- + dc h'CF70' ; XX--XXXX-XXX---- = ----XXXXXXXXXXXXXXXX-------- + dc h'CD60' ; XX--XX-X-XX----- = ----XXXX--XXXX--XXXX-------- + dc h'C370' ; XX----XX-XXX---- = ----XXXXXX----XXXXXX-------- + dc h'8F30' ; X---XXXX--XX---- = ------XXXXXXXXXXXX---------- + dc h'8120' ; X------X--X----- = ------XX--------XX---------- + dc h'4040' ; -X-------X------ = ----XX------------XX-------- + dc h'4040' ; -X-------X------ = ----XX------------XX-------- + dc h'2081' ; --X-----X------X = --XX----------------XX------ + dc h'2081' ; --X-----X------X = --XX----------------XX------ + dc h'1002' ; ---X----------X- = XX--------------------XX---- + dc h'1083' ; ---X----X-----XX = XX------------------XXXX---- + dc h'3083' ; --XX----X-----XX = XXXX----------------XXXX---- + dc h'3000' ; --XX------------ = XXXX------------------------ + +sprite89 anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0000' ; ---------------- = ---------------------------- + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'8991' ; X---X--XX--X---X = ------XX----XXXX----XX------ + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8BD1' ; X---X-XXXX-X---X = ------XXXX--XXXX--XXXX------ + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'0E70' ; ----XXX--XXX---- = --------XXXXXXXXXXXX-------- + dc h'8181' ; X------XX------X = ------XX------------XX------ + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'2004' ; --X----------X-- = --XX--------------------XX-- + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'1008' ; ---X--------X--- = XX------------------------XX + dc h'300C' ; --XX--------XX-- = XXXX--------------------XXXX + dc h'300C' ; --XX--------XX-- = XXXX--------------------XXXX + +sprite8A anop + dc h'0000' ; ---------------- = ---------------------------- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0232' ; ------X---XX--X- = --------XX----XXXX----XX---- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'06B3' ; -----XX-X-XX--XX = --------XXXX--XXXX--XXXX---- + dc h'0EC3' ; ----XXX-XX----XX = --------XXXXXX----XXXXXX---- + dc h'0CF1' ; ----XX--XXXX---X = ----------XXXXXXXXXXXX------ + dc h'0481' ; -----X--X------X = ----------XX--------XX------ + dc h'0202' ; ------X-------X- = --------XX------------XX---- + dc h'0202' ; ------X-------X- = --------XX------------XX---- + dc h'8104' ; X------X-----X-- = ------XX----------------XX-- + dc h'8104' ; X------X-----X-- = ------XX----------------XX-- + dc h'4008' ; -X----------X--- = ----XX--------------------XX + dc h'C108' ; XX-----X----X--- = ----XXXX------------------XX + dc h'C10C' ; XX-----X----XX-- = ----XXXX----------------XXXX + dc h'000C' ; ------------XX-- = ------------------------XXXX + +sprite8B anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'E997' ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- + dc h'DFFB' ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'9BD9' ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX + dc h'2254' ; --X---X--X-X-X-- = --XX----XX----XX--XX----XX-- + dc h'9944' ; X--XX--X-X---X-- = XX----XX----XX----XX----XX-- + dc h'A989' ; X-X-X--XX---X--X = --XX--XX----XX------XX----XX + dc h'2295' ; --X---X-X--X-X-X = --XX----XX----XX----XX--XX + dc h'142A' ; ---X-X----X-X-X- = XX--------XX----XX----XX--XX + dc h'24A9' ; --X--X--X-X-X--X = --XX------XX----XX--XX----XX + dc h'0291' ; ------X-X--X---X = --------XX----XX----XX------ + dc h'8112' ; X------X---X--X- = ------XX------XX------XX---- + dc h'0020' ; ----------X----- = ----------------XX---------- + +sprite8C anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'E997' ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- + dc h'DFFB' ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'9BD9' ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX + dc h'2A85' ; --X-X-X-X----X-X = --XX----XX--XX------XX--XX-- + dc h'1299' ; ---X--X-X--XX--X = XX------XX----XX----XX----XX + dc h'9154' ; X--X---X-X-X-X-- = XX----XX------XX--XX----XX-- + dc h'A944' ; X-X-X--X-X---X-- = --XX--XX----XX----XX----XX-- + dc h'A989' ; X-X-X--XX---X--X = --XX--XX----XX------XX----XX + dc h'1299' ; ---X--X-X--XX--X = XX------XX----XX----XX----XX + dc h'0422' ; -----X----X---X- = ----------XX----XX----XX---- + dc h'04A1' ; -----X--X-X----X = ----------XX----XX--XX------ + dc h'0200' ; ------X--------- = --------XX------------------ + +sprite8D anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'E997' ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- + dc h'DFFB' ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'9BD9' ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX + dc h'2295' ; --X---X-X--X-X-X = --XX----XX----XX----XX--XX-- + dc h'2422' ; --X--X----X---X- = --XX------XX----XX----XX---- + dc h'2422' ; --X--X----X---X- = --XX------XX----XX----XX---- + dc h'1295' ; ---X--X-X--X-X-X = XX------XX----XX----XX--XX-- + dc h'2A44' ; --X-X-X--X---X-- = --XX----XX--XX----XX----XX-- + dc h'A948' ; X-X-X--X-X--X--- = --XX--XX----XX----XX------XX + dc h'8191' ; X------XX--X---X = ------XX------XX----XX------ + dc h'0222' ; ------X---X---X- = --------XX------XX----XX---- + dc h'0020' ; ----------X----- = ----------------XX---------- + +sprite8E anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'4C32' ; -X--XX----XX--X- = ----XX----XXXXXXXX----XX---- + dc h'6816' ; -XX-X------X-XX- = --XXXX------XXXX------XXXX-- + dc h'E997' ; XXX-X--XX--X-XXX = --XXXXXX----XXXX----XXXXXX-- + dc h'DFFB' ; XX-XXXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'9BD9' ; X--XX-XXXX-XX--X = XX----XXXX--XXXX--XXXX----XX + dc h'A989' ; X-X-X--XX---X--X = --XX--XX----XX------XX----XX + dc h'2295' ; --X---X-X--X-X-X = --XX----XX----XX----XX--XX-- + dc h'142A' ; ---X-X----X-X-X- = XX--------XX----XX----XX--XX + dc h'242A' ; --X--X----X-X-X- = --XX------XX----XX----XX--XX + dc h'122A' ; ---X--X---X-X-X- = XX------XX------XX----XX--XX + dc h'9195' ; X--X---XX--X-X-X = XX----XX------XX----XX--XX-- + dc h'8940' ; X---X--X-X------ = ------XX----XX----XX-------- + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'0010' ; -----------X---- = --------------XX------------ + +sprite8F anop + dc h'0C20' ; ----XX----X----- = ----------XXXX--XX---------- + dc h'8FE1' ; X---XXXXXXX----X = ------XXXXXXXX--XXXXXX------ + dc h'CFC3' ; XX--XXXXXX----XX = ----XXXXXXXXXX----XXXXXX---- + dc h'CF22' ; XX--XXXX--X---X- = ----XXXXXXXXXX--XX----XX---- + dc h'EF64' ; XXX-XXXX-XX--X-- = --XXXXXXXXXXXX--XXXX----XX-- + dc h'EFE5' ; XXX-XXXXXXX--X-X = --XXXXXXXXXXXX--XXXXXX--XX-- + dc h'DFEF' ; XX-XXXXXXXX-XXXX = XX--XXXXXXXXXX--XXXXXXXXXXXX + dc h'00EF' ; --------XXX-XXXX = ----------------XXXXXXXXXXXX + dc h'9700' ; X--X-XXX-------- = XX----XXXXXX---------------- + dc h'97FF' ; X--X-XXXXXXXXXXX = XX----XXXXXX--XXXXXXXXXXXXXX + dc h'26F7' ; --X--XX-XXXX-XXX = --XX----XXXX--XXXXXXXXXXXX-- + dc h'20F5' ; --X-----XXXX-X-X = --XX----------XXXXXXXX--XX-- + dc h'0000' ; ---------------- = ---------------------------- + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0430' ; -----X----XX---- = ----------XX--XXXX---------- + +sprite90 anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'CF52' ; XX--XXXX-X-X--X- = ----XXXXXXXXXXXX--XX--XX---- + dc h'CF32' ; XX--XXXX--XX--X- = ----XXXXXXXXXXXXXX----XX---- + dc h'EF34' ; XXX-XXXX--XX-X-- = --XXXXXXXXXXXXXXXX------XX-- + dc h'2ED5' ; --X-XXX-XX-X-X-X = --XX----XXXXXXXX--XXXX--XX-- + dc h'D9DF' ; XX-XX--XXX-XXXXX = XX--XXXX----XXXX--XXXXXXXXXX + dc h'D7EF' ; XX-X-XXXXXX-XXXX = XX--XXXXXXXX----XXXXXXXXXXXX + dc h'97EF' ; X--X-XXXXXX-XXXX = XX----XXXXXX----XXXXXXXXXXXX + dc h'9B9F' ; X--XX-XXX--XXXXX = XX----XXXX--XXXX----XXXXXXXX + dc h'2A74' ; --X-X-X--XXX-X-- = --XX----XX--XXXXXXXX----XX-- + dc h'28F5' ; --X-X---XXXX-X-X = --XX--------XXXXXXXXXX--XX-- + dc h'0000' ; ---------------- = ---------------------------- + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite91 anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'CFD3' ; XX--XXXXXX-X--XX = ----XXXXXXXXXXXX--XXXXXX---- + dc h'4E32' ; -X--XXX---XX--X- = ----XX--XXXXXXXXXX----XX---- + dc h'AD74' ; X-X-XX-X-XXX-X-- = --XX--XX--XXXXXXXXXX----XX-- + dc h'AB74' ; X-X-X-XX-XXX-X-- = --XX--XXXX--XXXXXXXX----XX-- + dc h'97BF' ; X--X-XXXX-XXXXXX = XX----XXXXXX--XXXX--XXXXXXXX + dc h'97CF' ; X--X-XXXXX--XXXX = XX----XXXXXX------XXXXXXXXXX + dc h'93EF' ; X--X--XXXXX-XXXX = XX----XXXX------XXXXXXXXXXXX + dc h'9DEF' ; X--XXX-XXXX-XXXX = XX----XX--XXXX--XXXXXXXXXXXX + dc h'2ED7' ; --X-XXX-XX-X-XXX = --XX----XXXXXXXX--XXXXXXXX-- + dc h'2834' ; --X-X-----XX-X-- = --XX--------XXXXXX------XX-- + dc h'0002' ; --------------X- = ----------------------XX---- + dc h'4000' ; -X-------------- = ----XX---------------------- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite92 anop + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'8DF1' ; X---XX-XXXXX---X = ------XX--XXXXXXXXXXXX------ + dc h'CBD3' ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- + dc h'CB32' ; XX--X-XX--XX--X- = ----XXXXXX--XXXXXX----XX---- + dc h'EB74' ; XXX-X-XX-XXX-X-- = --XXXXXXXX--XXXXXXXX----XX-- + dc h'E7F5' ; XXX--XXXXXXX-X-X = --XXXXXXXXXX--XXXXXXXX--XX-- + dc h'D778' ; XX-X-XXX-XXXX--- = XX--XXXXXXXX--XXXXXX------XX + dc h'D78F' ; XX-X-XXXX---XXXX = XX--XXXXXXXX--------XXXXXXXX + dc h'91EF' ; X--X---XXXX-XXXX = XX----XX--------XXXXXXXXXXXX + dc h'1EEF' ; ---XXXX-XXX-XXXX = XX------XXXXXX--XXXXXXXXXXXX + dc h'0EE7' ; ----XXX-XXX--XXX = --------XXXXXX--XXXXXXXXXX-- + dc h'28D5' ; --X-X---XX-X-X-X = --XX--------XXXX--XXXX--XX-- + dc h'0000' ; ---------------- = ---------------------------- + dc h'4002' ; -X------------X- = ----XX----------------XX---- + dc h'8381' ; X-----XXX------X = ------XXXX----------XX------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + +sprite93 anop + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8300' ; X-----XX-------- = ------XXXX------------------ + dc h'C300' ; XX----XX-------- = ----XXXXXX------------------ + dc h'E500' ; XXX--X-X-------- = --XXXXXX--XX---------------- + dc h'3A20' ; --XXX-X---X----- = XXXX----XX--XX--XX---------- + dc h'1470' ; ---X-X---XXX---- = XX--------XX--XXXXXX-------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0C40' ; ----XX---X------ = ----------XXXX----XX-------- + dc h'3E60' ; --XXXXX--XX----- = XXXX----XXXXXX--XXXX-------- + dc h'B340' ; X-XX--XX-X------ = XXXX--XXXX--------XX-------- + dc h'FF70' ; XXXXXXXX-XXX---- = XXXXXXXXXXXXXXXXXXXX-------- + dc h'7800' ; -XXXX----------- = XXXXXX------XX-------------- + dc h'3220' ; --XX--X---X----- = XXXX----XX------XX---------- + dc h'B550' ; X-XX-X-X-X-X---- = XXXX--XX--XX--XX--XX-------- + dc h'0220' ; ------X---X----- = --------XX------XX---------- + +sprite94 anop + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C00' ; ----XX---------- = ----------XXXX-------------- + dc h'0E00' ; ----XXX--------- = --------XXXXXX-------------- + dc h'8710' ; X----XXX---X---- = ------XXXXXX--XX------------ + dc h'C9A1' ; XX--X--XX-X----X = ----XXXX----XX--XX--XX------ + dc h'40D3' ; -X------XX-X--XX = ----XX--------XX--XXXXXX---- + dc h'00E3' ; --------XXX---XX = ----------------XXXXXXXX---- + dc h'0032' ; ----------XX--X- = --------------XXXX----XX---- + dc h'68B3' ; -XX-X---X-XX--XX = --XXXX------XXXXXX--XXXX---- + dc h'6C02' ; -XX-XX--------X- = --XXXX----XXXX--------XX---- + dc h'EFF3' ; XXX-XXXXXXXX--XX = --XXXXXXXXXXXXXXXXXXXXXX---- + dc h'E320' ; XXX---XX--X----- = --XXXXXXXX------XX---------- + dc h'6881' ; -XX-X---X------X = --XXXX------XX------XX------ + dc h'6452' ; -XX--X---X-X--X- = --XXXX----XX--XX--XX--XX---- + dc h'0881' ; ----X---X------X = ------------XX------XX------ + +sprite95 anop + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C10' ; ----XX-----X---- = ----------XXXXXX------------ + dc h'0E20' ; ----XXX---X----- = --------XXXXXX--XX---------- + dc h'8352' ; X-----XX-X-X--X- = ------XXXX----XX--XX--XX---- + dc h'81A7' ; X------XX-X--XXX = ------XX--------XX--XXXXXX-- + dc h'00C7' ; --------XX---XXX = ------------------XXXXXXXX-- + dc h'0064' ; ---------XX--X-- = ----------------XXXX----XX-- + dc h'6076' ; -XX------XXX-XX- = --XXXX--------XXXXXX--XXXX-- + dc h'6814' ; -XX-X------X-X-- = --XXXX------XXXX--------XX-- + dc h'EFF7' ; XXX-XXXXXXXX-XXX = --XXXXXXXXXXXXXXXXXXXXXXXX-- + dc h'E740' ; XXX--XXX-X------ = --XXXXXXXXXX------XX-------- + dc h'6012' ; -XX--------X--X- = --XXXX--------XX------XX---- + dc h'68A5' ; -XX-X---X-X--X-X = --XXXX------XX--XX--XX--XX-- + dc h'0012' ; -----------X--X- = --------------XX------XX---- + +sprite96 anop + dc h'00C1' ; --------XX-----X = ------------------XXXX------ + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0830' ; ----X-----XX---- = ------------XXXXXX---------- + dc h'0C50' ; ----XX---X-X---- = ----------XXXXXX--XX-------- + dc h'06A5' ; -----XX-X-X--X-X = --------XXXX----XX--XX--XX-- + dc h'024E' ; ------X--X--XXX- = --------XX--------XX--XXXXXX + dc h'008F' ; --------X---XXXX = --------------------XXXXXXXX + dc h'00C9' ; --------XX--X--X = ------------------XXXX----XX + dc h'83ED' ; X-----XXXXX-XX-X = ------XXXX------XXXXXX--XXXX + dc h'8338' ; X-----XX--XXX--- = ------XXXX----XXXX--------XX + dc h'8FFF' ; X---XXXXXXXXXXXX = ------XXXXXXXXXXXXXXXXXXXXXX + dc h'8F81' ; X---XXXXX------X = ------XXXXXXXX------XX------ + dc h'8324' ; X-----XX--X--X-- = ------XXXX------XX------XX-- + dc h'835A' ; X-----XX-X-XX-X- = ------XXXX----XX--XX--XX--XX + dc h'0024' ; ----------X--X-- = ----------------XX------XX-- + +sprite97 anop + dc h'8900' ; X---X--X-------- = ------XX----XX-------------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'8F00' ; X---XXXX-------- = ------XXXXXXXX-------------- + dc h'DF50' ; XX-XXXXX-X-X---- = XX--XXXXXXXXXXXX--XX-------- + dc h'E930' ; XXX-X--X--XX---- = --XXXXXX----XXXXXX---------- + dc h'E930' ; XXX-X--X--XX---- = --XXXXXX----XXXXXX---------- + dc h'DF50' ; XX-XXXXX-X-X---- = XX--XXXXXXXXXXXX--XX-------- + dc h'AF20' ; X-X-XXXX--X----- = --XX--XXXXXXXX--XX---------- + dc h'2620' ; --X--XX---X----- = --XX----XXXX----XX---------- + dc h'A920' ; X-X-X--X--X----- = --XX--XX----XX--XX---------- + dc h'EF30' ; XXX-XXXX--XX---- = --XXXXXXXXXXXXXXXX---------- + dc h'0600' ; -----XX--------- = --------XXXX---------------- + dc h'6030' ; -XX-------XX---- = --XXXX--------XXXX---------- + dc h'9960' ; X--XX--X-XX----- = XX----XX----XX--XXXX-------- + dc h'D940' ; XX-XX--X-X------ = XX--XXXX----XX----XX-------- + dc h'6030' ; -XX-------XX---- = --XXXX--------XXXX---------- + +sprite98 anop + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'0C30' ; ----XX----XX---- = ----------XXXXXXXX---------- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'CBD3' ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- + dc h'CBD3' ; XX--X-XXXX-X--XX = ----XXXXXX--XXXX--XXXXXX---- + dc h'87E1' ; X----XXXXXX----X = ------XXXXXX----XXXXXX------ + dc h'8DB1' ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ + dc h'8DB1' ; X---XX-XX-XX---X = ------XX--XXXXXXXX--XX------ + dc h'8991' ; X---X--XX--X---X = ------XX----XXXX----XX------ + dc h'8FF1' ; X---XXXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'0810' ; ----X------X---- = ------------XXXX------------ + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + dc h'4422' ; -X---X----X---X- = ----XX----XX----XX----XX---- + dc h'C5A3' ; XX---X-XX-X---XX = ----XXXX--XX----XX--XXXX---- + dc h'83C1' ; X-----XXXX-----X = ------XXXX--------XXXX------ + +sprite99 anop + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0870' ; ----X----XXX---- = ------------XXXXXXXX-------- + dc h'0840' ; ----X----X------ = ------------XX----XX-------- + dc h'87B7' ; X----XXXX-XX-XXX = ------XXXXXX--XXXX--XXXXXX-- + dc h'8B76' ; X---X-XX-XXX-XX- = ------XXXX--XXXXXXXX--XXXX-- + dc h'8B76' ; X---X-XX-XXX-XX- = ------XXXX--XXXXXXXX--XXXX-- + dc h'87B7' ; X----XXXX-XX-XXX = ------XXXXXX--XXXX--XXXXXX-- + dc h'0A42' ; ----X-X--X----X- = --------XX--XX----XX--XX---- + dc h'0A72' ; ----X-X--XXX--X- = --------XX--XXXXXXXX--XX---- + dc h'0A72' ; ----X-X--XXX--X- = --------XX--XXXXXXXX--XX---- + dc h'0EF3' ; ----XXX-XXXX--XX = --------XXXXXXXXXXXXXXXX---- + dc h'0030' ; ----------XX---- = --------------XXXX---------- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + dc h'8B44' ; X---X-XX-X---X-- = ------XXXX--XX----XX----XX-- + dc h'89C5' ; X---X--XXX---X-X = ------XX----XX----XXXX--XX-- + dc h'0683' ; -----XX-X-----XX = --------XXXX--------XXXX---- + +sprite9A anop + dc h'00F1' ; --------XXXX---X = --------------XXXXXXXX------ + dc h'0091' ; --------X--X---X = --------------XX----XX------ + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'06FD' ; -----XX-XXXXXX-X = --------XXXX--XXXXXXXX--XXXX + dc h'0AFB' ; ----X-X-XXXXX-XX = --------XX--XXXXXXXXXXXX--XX + dc h'0AFB' ; ----X-X-XXXXX-XX = --------XX--XXXXXXXXXXXX--XX + dc h'06FD' ; -----XX-XXXXXX-X = --------XXXX--XXXXXXXX--XXXX + dc h'0464' ; -----X---XX--X-- = ----------XX----XXXX----XX-- + dc h'0495' ; -----X--X--X-X-X = ----------XX--XX----XX--XX-- + dc h'04F5' ; -----X--XXXX-X-X = ----------XX--XXXXXXXX--XX-- + dc h'0CF7' ; ----XX--XXXX-XXX = ----------XXXXXXXXXXXXXXXX-- + dc h'0060' ; ---------XX----- = ----------------XXXX-------- + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + dc h'0A9B' ; ----X-X-X--XX-XX = --------XX--XXXX----XXXX--XX + dc h'0299' ; ------X-X--XX--X = --------XX----XX----XX----XX + dc h'0C06' ; ----XX-------XX- = ----------XXXX--------XXXX-- + +sprite9B anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'76BF' ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'76BF' ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'76BF' ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'76BF' ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'76BF' ; XXX-XXX-XXXXXX = XXXXXX--XXXX--XXXX--XXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9C anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9D anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1224' ; --X--X--X--X-- = XX------XX------XX------XX-- + dc h'C993' ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- + dc h'2448' ; -X--X--X--X--- = --XX------XX------XX------XX + dc h'2448' ; -X--X--X--X--- = --XX------XX------XX------XX + dc h'C993' ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- + dc h'1224' ; --X--X--X--X-- = XX------XX------XX------XX-- + dc h'1224' ; --X--X--X--X-- = XX------XX------XX------XX-- + dc h'C993' ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- + dc h'2448' ; -X--X--X--X--- = --XX------XX------XX------XX + dc h'2448' ; -X--X--X--X--- = --XX------XX------XX------XX + dc h'C993' ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- + dc h'1224' ; --X--X--X--X-- = XX------XX------XX------XX-- + dc h'1224' ; --X--X--X--X-- = XX------XX------XX------XX-- + dc h'C993' ; X--X--X--X--XX = ----XXXX----XXXX----XXXX---- + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9E anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'5889' ; X-XX--X---X--X = XX--XX------XX------XX----XX + dc h'911A' ; --X---X--XX-X- = XX----XX------XX------XX--XX + dc h'122C' ; --X--X--X-XX-- = XX------XX------XX------XXXX + dc h'3448' ; -XX-X--X--X--- = XXXX------XX------XX------XX + dc h'5889' ; X-XX--X---X--X = XX--XX------XX------XX----XX + dc h'911A' ; --X---X--XX-X- = XX----XX------XX------XX--XX + dc h'122C' ; --X--X--X-XX-- = XX------XX------XX------XXXX + dc h'3448' ; -XX-X--X--X--- = XXXX------XX------XX------XX + dc h'5889' ; X-XX--X---X--X = XX--XX------XX------XX----XX + dc h'911A' ; --X---X--XX-X- = XX----XX------XX------XX--XX + dc h'122C' ; --X--X--X-XX-- = XX------XX------XX------XXXX + dc h'3448' ; -XX-X--X--X--- = XXXX------XX------XX------XX + dc h'5889' ; X-XX--X---X--X = XX--XX------XX------XX----XX + dc h'911A' ; --X---X--XX-X- = XX----XX------XX------XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +sprite9F anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'A55A' ; -X--X-XX-XX-X- = --XX--XX--XX--XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA0 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'F18F' ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX + dc h'F18F' ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA1 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA2 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'300C' ; -XX-------XX-- = XXXX--------------------XXXX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'324C' ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'9999' ; --XX--X--XX--X = XX----XX----XXXX----XX----XX + dc h'324C' ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'9999' ; --XX--X--XX--X = XX----XX----XXXX----XX----XX + dc h'324C' ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX + dc h'542A' ; X-X-X---X-X-X- = XX--XX----XX----XX----XX--XX + dc h'324C' ; -XX--X-X--XX-- = XXXX----XX--------XX----XXXX + dc h'9999' ; --XX--X--XX--X = XX----XX----XXXX----XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA3 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1428' ; --X-X---X-X--- = XX--------XX----XX--------XX + dc h'1248' ; --X--X-X--X--- = XX------XX--------XX------XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'381C' ; -XXX-----XXX-- = XXXX--------XXXX--------XXXX + dc h'381C' ; -XXX-----XXX-- = XXXX--------XXXX--------XXXX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'1248' ; --X--X-X--X--- = XX------XX--------XX------XX + dc h'1428' ; --X-X---X-X--- = XX--------XX----XX--------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA4 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'F11E' ; XXX---X--XXXX- = XXXXXXXX------XX------XXXXXX + dc h'9199' ; --X---X--XX--X = XX----XX------XX----XX----XX + dc h'B599' ; -XX-X-X--XX--X = XXXX--XX--XX--XX----XX----XX + dc h'B59D' ; -XX-X-X--XXX-X = XXXX--XX--XX--XX----XX--XXXX + dc h'951C' ; --X-X-X--XXX-- = XX----XX--XX--XX--------XXXX + dc h'5099' ; X-X---X--XX--X = XX--XX--------XX----XX----XX + dc h'5ADB' ; X-XX-XXX-XX-XX = XX--XX--XX--XXXX--XXXXXX--XX + dc h'5AAD' ; X-XX-XX-X-XX-X = XX--XX--XX--XX--XX--XX--XXXX + dc h'582C' ; X-XX----X-XX-- = XX--XX------XX--XX------XXXX + dc h'99CB' ; --XX--XX--X-XX = XX----XX----XX----XXXXXX--XX + dc h'9908' ; --XX--X---X--- = XX----XX----XX------------XX + dc h'B15A' ; -XX---XX-XX-X- = XXXX--XX------XX--XX--XX--XX + dc h'B55A' ; -XX-X-XX-XX-X- = XXXX--XX--XX--XX--XX--XX--XX + dc h'951A' ; --X-X-X--XX-X- = XX----XX--XX--XX------XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA5 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'BBAD' ; -XXX-XX-X-XX-X = XXXX--XXXX--XX--XX--XX--XXXX + dc h'7ABD' ; XXXX-XX-XXXX-X = XXXXXX--XX--XXXXXX--XX--XXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA6 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1668' ; --X-XX-XX-X--- = XX------XXXX----XXXX------XX + dc h'1668' ; --X-XX-XX-X--- = XX------XXXX----XXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1E78' ; --XXXX-XXXX--- = XX------XXXXXXXXXXXX------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA7 anop + dc h'0C30' ; ---XX---XX---- = ----------XXXXXXXX---------- + dc h'0E70' ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- + dc h'8FF1' ; ---XXXXXXX---X = ------XXXXXXXXXXXXXXXX------ + dc h'8991' ; ---X--X--X---X = ------XX----XXXX----XX------ + dc h'8991' ; ---X--X--X---X = ------XX----XXXX----XX------ + dc h'0E70' ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- + dc h'0A50' ; ---X-X-X-X---- = --------XX--XXXX--XX-------- + dc h'0420' ; ----X---X----- = ----------XX----XX---------- + dc h'2814' ; -X-X-----X-X-- = --XX--------XXXX--------XX-- + dc h'F18F' ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX + dc h'F7EF' ; XXX-XXXXX-XXXX = XXXXXXXXXXXX----XXXXXXXXXXXX + dc h'0A70' ; ---X-X-XXX---- = --------XX--XXXXXXXX-------- + dc h'0E50' ; ---XXX-X-X---- = --------XXXXXXXX--XX-------- + dc h'F7EF' ; XXX-XXXXX-XXXX = XXXXXXXXXXXX----XXXXXXXXXXXX + dc h'F18F' ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX + dc h'2004' ; -X---------X-- = --XX--------------------XX-- + +spriteA8 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'F3CF' ; XXX--XXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'F18F' ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX + dc h'700E' ; XXX-------XXX- = XXXXXX----------------XXXXXX + dc h'300C' ; -XX-------XX-- = XXXX--------------------XXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1428' ; --X-X---X-X--- = XX--------XX----XX--------XX + dc h'1428' ; --X-X---X-X--- = XX--------XX----XX--------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'300C' ; -XX-------XX-- = XXXX--------------------XXXX + dc h'700E' ; XXX-------XXX- = XXXXXX----------------XXXXXX + dc h'F18F' ; XXX---X---XXXX = XXXXXXXX------------XXXXXXXX + dc h'F3CF' ; XXX--XXX--XXXX = XXXXXXXXXX--------XXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteA9 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1208' ; --X--X----X--- = XX------XX----------------XX + dc h'5A08' ; X-XX-X----X--- = XX--XX--XX--XX------------XX + dc h'978B' ; --X-XXX---X-XX = XX----XXXXXX--------XXXX--XX + dc h'FF5E' ; XXXXXXXX-XXXX- = XXXXXXXXXXXXXXXX--XX--XXXXXX + dc h'9708' ; --X-XXX---X--- = XX----XXXXXX--------------XX + dc h'5A08' ; X-XX-X----X--- = XX--XX--XX--XX------------XX + dc h'1208' ; --X--X----X--- = XX------XX----------------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAA anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'1818' ; --XX-----XX--- = XX----------XXXX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAB anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAC anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'D18B' ; X-X---X---X-XX = XX--XXXX------------XXXX--XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAD anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'5E7A' ; X-XXXX-XXXX-X- = XX--XX--XXXXXXXXXXXX--XX--XX + dc h'524A' ; X-X--X-X--X-X- = XX--XX--XX--------XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'5A5A' ; X-XX-X-X-XX-X- = XX--XX--XX--XXXX--XX--XX--XX + dc h'524A' ; X-X--X-X--X-X- = XX--XX--XX--------XX--XX--XX + dc h'5E7A' ; X-XXXX-XXXX-X- = XX--XX--XXXXXXXXXXXX--XX--XX + dc h'500A' ; X-X-------X-X- = XX--XX----------------XX--XX + dc h'DFFB' ; X-XXXXXXXXX-XX = XX--XXXXXXXXXXXXXXXXXXXX--XX + dc h'1008' ; --X-------X--- = XX------------------------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + +spriteAE anop + dc h'0000' ; -------------- = ---------------------------- + dc h'0E70' ; ---XXX-XXX---- = --------XXXXXXXXXXXX-------- + dc h'C183' ; X-----X-----XX = ----XXXX------------XXXX---- + dc h'2C34' ; -X-XX---XX-X-- = --XX------XXXXXXXX------XX-- + dc h'1248' ; --X--X-X--X--- = XX------XX--------XX------XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'9189' ; --X---X---X--X = XX----XX------------XX----XX + dc h'1248' ; --X--X-X--X--- = XX------XX--------XX------XX + dc h'2424' ; -X--X---X--X-- = --XX------XX----XX------XX-- + dc h'C5A3' ; X---X-X-X---XX = ----XXXX--XX----XX--XXXX---- + dc h'95A9' ; --X-X-X-X-X--X = XX----XX--XX----XX--XX----XX + dc h'F5AF' ; XXX-X-X-X-XXXX = XXXXXXXX--XX----XX--XXXXXXXX + dc h'1428' ; --X-X---X-X--- = XX--------XX----XX--------XX + dc h'F7EF' ; XXX-XXXXX-XXXX = XXXXXXXXXXXX----XXXXXXXXXXXX + dc h'0000' ; -------------- = ---------------------------- + +spriteAF anop + dc h'0450' ; -----X---X-X---- = ----------XX--XX--XX-------- + dc h'0A2C' ; ----X-X---X-XX-- = --------XX--XX--XX------XXXX + dc h'CF32' ; XX--XXXX--XX--X- = ----XXXXXXXXXXXXXX----XX---- + dc h'6CFF' ; -XX-XX--XXXXXXXX = --XXXX----XXXXXXXXXXXXXXXXXX + dc h'74F1' ; -XXX-X--XXXX---X = XXXXXX----XX--XXXXXXXX------ + dc h'CFCF' ; XX--XXXXXX--XXXX = ----XXXXXXXXXX----XXXXXXXXXX + dc h'FF72' ; XXXXXXXX-XXX--X- = XXXXXXXXXXXXXXXXXXXX--XX---- + dc h'CF3C' ; XX--XXXX--XXXX-- = ----XXXXXXXXXXXXXX------XXXX + dc h'0000' ; ---------------- = ---------------------------- + dc h'0800' ; ----X----------- = ------------XX-------------- + dc h'E9F3' ; XXX-X--XXXXX--XX = --XXXXXX----XXXXXXXXXXXX---- + dc h'9F04' ; X--XXXXX-----X-- = XX----XXXXXXXX----------XX-- + dc h'1808' ; ---XX-------X--- = XX----------XX------------XX + dc h'9FF7' ; X--XXXXXXXXX-XXX = XX----XXXXXXXXXXXXXXXXXXXX-- + dc h'E9F3' ; XXX-X--XXXXX--XX = --XXXXXX----XXXXXXXXXXXX---- + dc h'0800' ; ----X----------- = ------------XX-------------- + +sprite19dw anop ; Double width for direct drawing when cheat-boot is active + dc h'30660300' ; -XX----XX--XX------XX------- = ----XX--XX--XXXX------------ + dc h'70190300' ; XXX------XX--X-----XX------- = ----XXXX--XX--XX------------ + dc h'707F0300' ; XXX----XXXXXXX-----XX------- = ----XXXXXXXXXXXX------------ + dc h'00060000' ; -----------XX--------------- = --------XX------------------ + dc h'00060000' ; -----------XX--------------- = --------XX------------------ + dc h'407F0000' ; X------XXXXXXX-------------- = ------XXXXXXXX-------------- + dc h'40610000' ; X------XX----X-------------- = ------XX----XX-------------- + dc h'40610000' ; X------XX----X-------------- = ------XX----XX-------------- + dc h'40610000' ; X------XX----X-------------- = ------XX----XX-------------- + dc h'30180300' ; -XX------XX--------XX------- = ----XX----XX--XX------------ + dc h'30607C01' ; -XX----XX-----XXXXX--------X = ----XX------XX--XXXXXX------ + dc h'4C070C06' ; X--XX------XXX---XX------XX- = --XX--XXXX------XX----XX---- + dc h'0C180318' ; ---XX----XX--------XX--XX--- = --XX------XX--XX--------XX-- + dc h'0C180018' ; ---XX----XX------------XX--- = --XX------XX------------XX-- + dc h'0C180018' ; ---XX----XX------------XX--- = --XX------XX------------XX-- + dc h'7F7F7F7F' ; XXXXXXXXXXXXXXXXXXXXXXXXXXXX = XXXXXXXXXXXXXXXXXXXXXXXXXXXX + + end + diff --git a/src/rosystem.asm b/src/rosystem.asm new file mode 100644 index 0000000..31bc884 --- /dev/null +++ b/src/rosystem.asm @@ -0,0 +1,304 @@ +;----------------------------------------------------------------------------- +; rosystem.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +ROSYSTEM data + +;----------------------------------------------------------------------------- +; the lo byte for the memory at the start of every screen row +rowL anop +; .repeat $C0, Row +; .byte Row & $08 << 4 | Row & $C0 >> 1 | Row & $C0 >> 3 +; .endrep + dc h'00000000' + dc h'00000000' + dc h'80808080' + dc h'80808080' + dc h'00000000' + dc h'00000000' + dc h'80808080' + dc h'80808080' + dc h'00000000' + dc h'00000000' + dc h'80808080' + dc h'80808080' + dc h'00000000' + dc h'00000000' + dc h'80808080' + dc h'80808080' + dc h'28282828' + dc h'28282828' + dc h'A8A8A8A8' + dc h'A8A8A8A8' + dc h'28282828' + dc h'28282828' + dc h'A8A8A8A8' + dc h'A8A8A8A8' + dc h'28282828' + dc h'28282828' + dc h'A8A8A8A8' + dc h'A8A8A8A8' + dc h'28282828' + dc h'28282828' + dc h'A8A8A8A8' + dc h'A8A8A8A8' + dc h'50505050' + dc h'50505050' + dc h'D0D0D0D0' + dc h'D0D0D0D0' + dc h'50505050' + dc h'50505050' + dc h'D0D0D0D0' + dc h'D0D0D0D0' + dc h'50505050' + dc h'50505050' + dc h'D0D0D0D0' + dc h'D0D0D0D0' + dc h'50505050' + dc h'50505050' + dc h'D0D0D0D0' + dc h'D0D0D0D0' +;----------------------------------------------------------------------------- +; the hi byte for the memory at the start of every screen row +rowH anop +; .repeat $C0, Row +; .byte >$0000 | Row & $07 << 2 | Row & $30 >> 4 +; .endrep + dc h'0004080C' + dc h'1014181C' + dc h'0004080C' + dc h'1014181C' + dc h'0105090D' + dc h'1115191D' + dc h'0105090D' + dc h'1115191D' + dc h'02060A0E' + dc h'12161A1E' + dc h'02060A0E' + dc h'12161A1E' + dc h'03070B0F' + dc h'13171B1F' + dc h'03070B0F' + dc h'13171B1F' + dc h'0004080C' + dc h'1014181C' + dc h'0004080C' + dc h'1014181C' + dc h'0105090D' + dc h'1115191D' + dc h'0105090D' + dc h'1115191D' + dc h'02060A0E' + dc h'12161A1E' + dc h'02060A0E' + dc h'12161A1E' + dc h'03070B0F' + dc h'13171B1F' + dc h'03070B0F' + dc h'13171B1F' + dc h'0004080C' + dc h'1014181C' + dc h'0004080C' + dc h'1014181C' + dc h'0105090D' + dc h'1115191D' + dc h'0105090D' + dc h'1115191D' + dc h'02060A0E' + dc h'12161A1E' + dc h'02060A0E' + dc h'12161A1E' + dc h'03070B0F' + dc h'13171B1F' + dc h'03070B0F' + dc h'13171B1F' + +;----------------------------------------------------------------------------- +; Jump table for screen tile rendering, per row - unrolled loops +rowDrawL anop + dc s1<'tileDrawP0R0' + dc s1<'tileDrawP0R1' + dc s1<'tileDrawP0R2' + dc s1<'tileDrawP0R3' + dc s1<'tileDrawP0R4' + dc s1<'tileDrawP0R5' + dc s1<'tileDrawP0R6' + dc s1<'tileDrawP0R7' + dc s1<'tileDrawP0R8' + dc s1<'tileDrawP0R9' + dc s1<'tileDrawP0RA' + dc s1<'tileDrawP0RB' + dc s1<'tileDrawP0RC' + dc s1<'tileDrawP0RD' + dc s1<'tileDrawP0RE' + dc s1<'tileDrawP0RF' + dc s1<'tileDrawP1R0' ; Page 1 + dc s1<'tileDrawP1R1' + dc s1<'tileDrawP1R2' + dc s1<'tileDrawP1R3' + dc s1<'tileDrawP1R4' + dc s1<'tileDrawP1R5' + dc s1<'tileDrawP1R6' + dc s1<'tileDrawP1R7' + dc s1<'tileDrawP1R8' + dc s1<'tileDrawP1R9' + dc s1<'tileDrawP1RA' + dc s1<'tileDrawP1RB' + dc s1<'tileDrawP1RC' + dc s1<'tileDrawP1RD' + dc s1<'tileDrawP1RE' + dc s1<'tileDrawP1RF' + +rowDrawH anop + dc s1>'tileDrawP0R0' + dc s1>'tileDrawP0R1' + dc s1>'tileDrawP0R2' + dc s1>'tileDrawP0R3' + dc s1>'tileDrawP0R4' + dc s1>'tileDrawP0R5' + dc s1>'tileDrawP0R6' + dc s1>'tileDrawP0R7' + dc s1>'tileDrawP0R8' + dc s1>'tileDrawP0R9' + dc s1>'tileDrawP0RA' + dc s1>'tileDrawP0RB' + dc s1>'tileDrawP0RC' + dc s1>'tileDrawP0RD' + dc s1>'tileDrawP0RE' + dc s1>'tileDrawP0RF' + dc s1>'tileDrawP1R0' ; Page 1 + dc s1>'tileDrawP1R1' + dc s1>'tileDrawP1R2' + dc s1>'tileDrawP1R3' + dc s1>'tileDrawP1R4' + dc s1>'tileDrawP1R5' + dc s1>'tileDrawP1R6' + dc s1>'tileDrawP1R7' + dc s1>'tileDrawP1R8' + dc s1>'tileDrawP1R9' + dc s1>'tileDrawP1RA' + dc s1>'tileDrawP1RB' + dc s1>'tileDrawP1RC' + dc s1>'tileDrawP1RD' + dc s1>'tileDrawP1RE' + dc s1>'tileDrawP1RF' + +;----------------------------------------------------------------------------- +mult64H anop +;.repeat MAX_SPRITE_IFRAMES, Row +; .byte >(Row * 64) +;.endrep + dc h'00000000' + dc h'01010101' + dc h'02020202' + dc h'03030303' + dc h'04040404' + dc h'05050505' + dc h'06060606' + dc h'07070707' + dc h'08080808' + +mult64L anop +;.repeat MAX_SPRITE_IFRAMES, Row +; dc s1<'(Row * 64) +;.endrep + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + dc h'004080C0' + +mult32H anop +;.repeat 15, Row +; .byte >(Row * 32) +;.endrep + dc h'00000000' + dc h'00000000' + dc h'01010101' + dc h'010101' + +mult32L anop +;.repeat 15, Row +; dc s1<'(Row * 32) +;.endrep + dc h'00204060' + dc h'80A0C0E0' + dc h'00204060' + dc h'80A0C0' + +mult16 anop +;.repeat 9, Row +; .byte Row * 16 +;.endrep + dc h'00102030' + dc h'40506070' + dc h'80' + +mult8 anop +;.repeat 24, Row +; .byte Row * 8 +;.endrep + dc h'00081018' + dc h'20283038' + dc h'40485058' + dc h'60687078' + dc h'80889098' + dc h'A0A8B0B8' + +;----------------------------------------------------------------------------- +; color masks +masksLeft anop + dc b'11111111' ; 00 MSB-BITS-11..1 White + dc b'00101010' ; 01 0-BITS-01..0 Green + dc b'10101010' ; 04 1-BITS-01..0 Orange + dc b'01010101' ; 01 0-BITS-10..1 Purple + dc b'11010101' ; 02 1-BITS-10..1 Blue + +masksRight anop + dc b'11111111' ; 00 MSB-BITS-11 White + dc b'01010101' ; 01 0-BITS-10..1 Green + dc b'11010101' ; 04 1-BITS-10..1 Orange + dc b'00101010' ; 01 0-BITS-01..0 Purple + dc b'10101010' ; 02 1-BITS-01..0 Blue + +maskGreen anop + dc b'00101010 01010101' ; Green + +maskOrange anop + dc b'10101010 11010101' ; Orange + +maskGreenHi anop + dc b'00100000 01000000' ; Green + +maskNewTip anop + dc b'01011111 00111111' ; White air graph tip (reversed order) +;----------------------------------------------------------------------------- +; sprite 32 to 64 byte bit-double helper table +binDouble anop + dc b'00000000' + dc b'00000011' + dc b'00001100' + dc b'00001111' + dc b'00110000' + dc b'00110011' + dc b'00111100' + dc b'00111111' + dc b'11000000' + dc b'11000011' + dc b'11001100' + dc b'11001111' + dc b'11110000' + dc b'11110011' + dc b'11111100' + dc b'11111111' + + end + diff --git a/src/rotext.asm b/src/rotext.asm new file mode 100644 index 0000000..69dc549 --- /dev/null +++ b/src/rotext.asm @@ -0,0 +1,64 @@ +;----------------------------------------------------------------------------- +; rotext.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +ROTEXT data + +roTextLevel anop + dc c' CENTRAL CAVERN ' + dc c' THE COLD ROOM ' + dc c' THE MENAGERIE ' + dc c' ABANDONED URANIUM WORKINGS ' + dc c' EUGENE+S LAIR ' + dc c' PROCESSING PLANT ' + dc c' THE VAT ' + dc c'MINER WILLY MEETS THE KONG BEAST' + dc c' WACKY AMOEBATRONS ' + dc c' THE ENDORIAN FOREST ' + dc c'ATTACK OF THE MUTANT TELEPHONES ' + dc c' RETURN OF THE ALIEN KONG BEAST ' + dc c' ORE REFINERY ' + dc c' SKYLAB LANDING BAY ' + dc c' THE BANK ' + dc c' THE SIXTEENTH CAVERN ' + dc c' THE WAREHOUSE ' + dc c' AMOEBATRONS+ REVENGE ' + dc c' SOLAR POWER GENERATOR ' + dc c' THE FINAL BARRIER ' +roTextAir anop + dc c'AIR ' +roTextScore anop + dc c'SCORE' +roTextHighScore anop + dc c'HIGH' +roTextGame anop + dc c'GAME' +roTextOver anop + dc c'OVER' +roTextPressEnter anop + dc c'PRESS ' +roTextEnter anop + dc c'ENTER TO START' +roTextAppleIIVersion anop + dc c' APPLE II V1.1A BY ' +roTextend anop + dc c'STEFAN WESSELS, 2020' +roTextIntro anop + dc c'. . . . . . . MANIC MINER . . [ BUG-BYTE LTD. 1983 . . BY ' + dc c'MATTHEW SMITH . . . Q, O * W, P = LEFT * RIGHT . . SPACE = JUMP . . M = MUSIC ' + dc c'ON/OFF . . S = IN GAME SOUND ON/OFF . . B = MONOCHROME/COLOR . . ' + dc c'C = LEVEL SCROLL MODE . . ESC = QUIT . . . GUIDE MINER WILLY THROUGH 20 LETHAL ' + dc c'CAVERNS . . . . . . ',h'00' +roTextMono anop + dc c' MONO' +roTextColor anop + dc c'COLOR' +roTextCheatCode anop + dc c'6031769' + + end + diff --git a/src/rotiles.asm b/src/rotiles.asm new file mode 100644 index 0000000..ed6a9c6 --- /dev/null +++ b/src/rotiles.asm @@ -0,0 +1,566 @@ +;----------------------------------------------------------------------------- +; rotiles.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + align $10 + +;----------------------------------------------------------------------------- +ROTILES data + +;tiledata anop +tile00 anop + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile01 anop + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'F3FF' ; XXX--XXXXXXXXX = XX--XXXXXXXXXX + dc h'F3FF' ; XXX--XXXXXXXXX = XX--XXXXXXXXXX + dc h'83FE' ; -----XXXXXXXX- = XX------XXXXXX + dc h'8FE0' ; ---XXXXXX----- = XXXX--------XX + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + +tile02 anop + dc h'C0FF' ; X------XXXXXXX = ------XXXXXXXX + dc h'C0E1' ; X------XX----X = ------XX----XX + dc h'FCE7' ; XXXXX--XX--XXX = --XXXXXXXX--XX + dc h'8CFE' ; ---XX--XXXXXX- = --XX----XXXXXX + dc h'BF86' ; -XXXXXX----XX- = XXXXXX--XX---- + dc h'F387' ; XXX--XX----XXX = XX--XXXXXX---- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'FF81' ; XXXXXXX------X = XXXXXXXX------ + +tile03 anop + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + +tile04 anop + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + +tile05 anop + dc h'C081' ; X------------X = ------XX------ + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'8FF8' ; ---XXXXXXXX--- = XXXX------XXXX + dc h'B086' ; -XX--------XX- = ----XX--XX---- + +tile06 anop + dc h'C081' ; X------------X = ------XX------ + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'8FE6' ; ---XXXXXX--XX- = XXXX----XX--XX + dc h'BC98' ; -XXXX----XX--- = --XXXX----XX-- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'C081' ; X------------X = ------XX------ + +tile07 anop + dc h'C0FF' ; X------XXXXXXX = ------XXXXXXXX + dc h'8F9E' ; ---XXXX--XXXX- = XXXX----XXXX-- + dc h'C0FF' ; X------XXXXXXX = ------XXXXXXXX + dc h'8F9E' ; ---XXXX--XXXX- = XXXX----XXXX-- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile08 anop + dc h'C0FF' ; X------XXXXXXX = ------XXXXXXXX + dc h'B0F8' ; -XX----XXXX--- = ----XX----XXXX + dc h'8CFE' ; ---XX--XXXXXX- = --XX----XXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C3FF' ; X----XXXXXXXXX = XX----XXXXXXXX + dc h'C39F' ; X----XX--XXXXX = XX----XXXXXX-- + dc h'C387' ; X----XX----XXX = XX----XXXX---- + dc h'FF81' ; XXXXXXX------X = XXXXXXXX------ + +tile09 anop + dc h'F081' ; XXX----------X = ----XXXX------ + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'8386' ; -----XX----XX- = XX------XX---- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'BC86' ; -XXXX------XX- = --XXXX--XX---- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'80E6' ; -------XX--XX- = --------XX--XX + dc h'8098' ; ---------XX--- = ----------XX-- + +tile0A anop + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'FC99' ; XXXXX----XX--X = --XXXXXX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'BFE6' ; -XXXXXXXX--XX- = XXXXXX--XX--XX + dc h'BFE6' ; -XXXXXXXX--XX- = XXXXXX--XX--XX + dc h'BFE6' ; -XXXXXXXX--XX- = XXXXXX--XX--XX + dc h'FC99' ; XXXXX----XX--X = --XXXXXX--XX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + +tile0B anop + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'C081' ; X------------X = ------XX------ + dc h'F3E7' ; XXX--XXXX--XXX = XX--XXXXXX--XX + dc h'BFFE' ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX + dc h'BFFE' ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX + dc h'F3E7' ; XXX--XXXX--XXX = XX--XXXXXX--XX + dc h'C081' ; X------------X = ------XX------ + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + +tile0C anop + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'8FFE' ; ---XXXXXXXXXX- = XXXX----XXXXXX + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'BCE6' ; -XXXX--XX--XX- = --XXXX--XX--XX + dc h'B39E' ; -XX--XX--XXXX- = XX--XX--XXXX-- + dc h'FCE7' ; XXXXX--XX--XXX = --XXXXXXXX--XX + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'8FFE' ; ---XXXXXXXXXX- = XXXX----XXXXXX + +tile0D anop + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'C081' ; X------------X = ------XX------ + dc h'B380' ; -XX--XX------- = XX--XX-------- + dc h'BCE0' ; -XXXX--XX----- = --XXXX------XX + dc h'B0E6' ; -XX----XX--XX- = ----XX--XX--XX + dc h'BF9E' ; -XXXXXX--XXXX- = XXXXXX--XXXX-- + dc h'FC81' ; XXXXX--------X = --XXXXXX------ + dc h'B080' ; -XX----------- = ----XX-------- + +tile0E anop + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'BCF8' ; -XXXX--XXXX--- = --XXXX----XXXX + dc h'BFFE' ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX + dc h'BFFE' ; -XXXXXXXXXXXX- = XXXXXX--XXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile0F anop + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'F399' ; XXX--XX--XX--X = XX--XXXX--XX-- + dc h'CCE7' ; X--XX--XX--XXX = --XX--XXXX--XX + dc h'C099' ; X--------XX--X = ------XX--XX-- + dc h'FC81' ; XXXXX--------X = --XXXXXX------ + dc h'B39E' ; -XX--XX--XXXX- = XX--XX--XXXX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'8CF8' ; ---XX--XXXX--- = --XX------XXXX + +tile10 anop + dc h'BC80' ; -XXXX--------- = --XXXX-------- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'BC86' ; -XXXX------XX- = --XXXX--XX---- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'BC86' ; -XXXX------XX- = --XXXX--XX---- + dc h'C087' ; X----------XXX = ------XXXX---- + dc h'8098' ; ---------XX--- = ----------XX-- + dc h'80E0' ; -------XX----- = ------------XX + +tile11 anop + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'BC98' ; -XXXX----XX--- = --XXXX----XX-- + dc h'CFFF' ; X--XXXXXXXXXXX = XXXX--XXXXXXXX + dc h'83FE' ; -----XXXXXXXX- = XX------XXXXXX + dc h'CFFF' ; X--XXXXXXXXXXX = XXXX--XXXXXXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + +tile12 anop + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'CFFF' ; X--XXXXXXXXXXX = XXXX--XXXXXXXX + dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- + dc h'C087' ; X----------XXX = ------XXXX---- + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + +tile13 anop + dc h'FCFF' ; XXXXX--XXXXXXX = --XXXXXXXXXXXX + dc h'F09F' ; XXX------XXXXX = ----XXXXXXXX-- + dc h'C09F' ; X--------XXXXX = ------XXXXXX-- + dc h'C087' ; X----------XXX = ------XXXX---- + dc h'C087' ; X----------XXX = ------XXXX---- + dc h'8086' ; -----------XX- = --------XX---- + dc h'8086' ; -----------XX- = --------XX---- + dc h'8086' ; -----------XX- = --------XX---- + +tile14 anop + dc h'8380' ; -----XX------- = XX------------ + dc h'8F80' ; ---XXXX------- = XXXX---------- + dc h'BF9E' ; -XXXXXX--XXXX- = XXXXXX--XXXX-- + dc h'FCE1' ; XXXXX--XX----X = --XXXXXX----XX + dc h'B086' ; -XX--------XX- = ----XX--XX---- + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'83E6' ; -----XXXX--XX- = XX------XX--XX + dc h'83F8' ; -----XXXXXX--- = XX--------XXXX + +tile15 anop + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'8FF8' ; ---XXXXXXXX--- = XXXX------XXXX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'8FF8' ; ---XXXXXXXX--- = XXXX------XXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + +tile16 anop + dc h'C3FF' ; X----XXXXXXXXX = XX----XXXXXXXX + dc h'8F9E' ; ---XXXX--XXXX- = XXXX----XXXX-- + dc h'C3FF' ; X----XXXXXXXXX = XX----XXXXXXXX + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile17 anop + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B086' ; -XX--------XX- = ----XX--XX---- + +tile18 anop + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + +tile19 anop + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + +tile1A anop + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + +tile1B anop + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'F3E7' ; XXX--XXXX--XXX = XX--XXXXXX--XX + dc h'F3F9' ; XXX--XXXXXX--X = XX--XXXX--XXXX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'8FE6' ; ---XXXXXX--XX- = XXXX----XX--XX + dc h'8FE6' ; ---XXXXXX--XX- = XXXX----XX--XX + +tile1C anop + dc h'8FF8' ; ---XXXXXXXX--- = XXXX------XXXX + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'8080' ; -------------- = -------------- + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'8080' ; -------------- = -------------- + +tile1D anop + dc h'8FF8' ; ---XXXXXXXX--- = XXXX------XXXX + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile1E anop + dc h'8FF8' ; ---XXXXXXXX--- = XXXX------XXXX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile1F anop + dc h'CFE7' ; X--XXXXXX--XXX = XXXX--XXXX--XX + dc h'8080' ; -------------- = -------------- + dc h'BCFE' ; -XXXX--XXXXXX- = --XXXX--XXXXXX + dc h'8080' ; -------------- = -------------- + dc h'CFE7' ; X--XXXXXX--XXX = XXXX--XXXX--XX + dc h'8080' ; -------------- = -------------- + dc h'BCFE' ; -XXXX--XXXXXX- = --XXXX--XXXXXX + dc h'8080' ; -------------- = -------------- + +tile20 anop + dc h'FF87' ; XXXXXXX----XXX = XXXXXXXXXX---- + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'83FE' ; -----XXXXXXXX- = XX------XXXXXX + dc h'C087' ; X----------XXX = ------XXXX---- + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + +tile21 anop + dc h'FFE7' ; XXXXXXXXX--XXX = XXXXXXXXXX--XX + dc h'BCF8' ; -XXXX--XXXX--- = --XXXX----XXXX + dc h'F3FF' ; XXX--XXXXXXXXX = XX--XXXXXXXXXX + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile22 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'F0E7' ; XXX----XX--XXX = ----XXXXXX--XX + dc h'C0F9' ; X------XXXX--X = ------XX--XXXX + dc h'C0FF' ; X------XXXXXXX = ------XXXXXXXX + dc h'B0FE' ; -XX----XXXXXX- = ----XX--XXXXXX + dc h'8CF8' ; ---XX--XXXX--- = --XX------XXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + +tile23 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + +tile24 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile25 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'F3F9' ; XXX--XXXXXX--X = XX--XXXX--XXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'F3F9' ; XXX--XXXXXX--X = XX--XXXX--XXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile26 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + +tile27 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'CFE7' ; X--XXXXXX--XXX = XXXX--XXXX--XX + dc h'B3F8' ; -XX--XXXXXX--- = XX--XX----XXXX + dc h'B098' ; -XX------XX--- = ----XX----XX-- + dc h'CCE1' ; X--XX--XX----X = --XX--XX----XX + dc h'B080' ; -XX----------- = ----XX-------- + dc h'8086' ; -----------XX- = --------XX---- + dc h'8080' ; -------------- = -------------- + +tile28 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FF9F' ; XXXXXXX--XXXXX = XXXXXXXXXXXX-- + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'FC87' ; XXXXX------XXX = --XXXXXXXX---- + dc h'CC87' ; X--XX------XXX = --XX--XXXX---- + dc h'CC87' ; X--XX------XXX = --XX--XXXX---- + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + +tile29 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C0E1' ; X------XX----X = ------XX----XX + dc h'B098' ; -XX------XX--- = ----XX----XX-- + dc h'8C86' ; ---XX------XX- = --XX----XX---- + dc h'C381' ; X----XX------X = XX----XX------ + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + +tile2A anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + +tile2B anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'8C9E' ; ---XX----XXXX- = --XX----XXXX-- + dc h'B09E' ; -XX------XXXX- = ----XX--XXXX-- + dc h'C09F' ; X--------XXXXX = ------XXXXXX-- + dc h'809E' ; ---------XXXX- = --------XXXX-- + dc h'809E' ; ---------XXXX- = --------XXXX-- + dc h'809E' ; ---------XXXX- = --------XXXX-- + +tile2C anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'BC98' ; -XXXX----XX--- = --XXXX----XX-- + dc h'BC86' ; -XXXX------XX- = --XXXX--XX---- + dc h'FC81' ; XXXXX--------X = --XXXXXX------ + dc h'BC80' ; -XXXX--------- = --XXXX-------- + dc h'BC80' ; -XXXX--------- = --XXXX-------- + dc h'BC80' ; -XXXX--------- = --XXXX-------- + +tile2D anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'C081' ; X------------X = ------XX------ + dc h'FF99' ; XXXXXXX--XX--X = XXXXXXXX--XX-- + dc h'8080' ; -------------- = -------------- + +tile2E anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'8080' ; -------------- = -------------- + +tile2F anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'C3E1' ; X----XXXX----X = XX----XX----XX + dc h'BC9E' ; -XXXX----XXXX- = --XXXX--XXXX-- + dc h'8080' ; -------------- = -------------- + +tile30 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'CF99' ; X--XXXX--XX--X = XXXX--XX--XX-- + dc h'8CE6' ; ---XX--XX--XX- = --XX----XX--XX + dc h'B398' ; -XX--XX--XX--- = XX--XX----XX-- + dc h'CC81' ; X--XX--------X = --XX--XX------ + dc h'8398' ; -----XX--XX--- = XX--------XX-- + dc h'8080' ; -------------- = -------------- + +tile31 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'FC9F' ; XXXXX----XXXXX = --XXXXXXXXXX-- + dc h'8FE6' ; ---XXXXXX--XX- = XXXX----XX--XX + dc h'8C80' ; ---XX--------- = --XX---------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile32 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'CFE7' ; X--XXXXXX--XXX = XXXX--XXXX--XX + dc h'FCFF' ; XXXXX--XXXXXXX = --XXXXXXXXXXXX + dc h'B39B' ; -XX--XX--XX-XX = XX--XX-XX-XX-- + dc h'CCE4' ; X--XX--XX--X-- = --XX--X--X--XX + dc h'B098' ; -XX------XX--- = ----XX----XX-- + dc h'8080' ; -------------- = -------------- + +tile33 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'B3E6' ; -XX--XXXX--XX- = XX--XX--XX--XX + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + dc h'8080' ; -------------- = -------------- + +tile34 anop + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'C081' ; X------------X = ------XX------ + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'CFF9' ; X--XXXXXXXX--X = XXXX--XX--XXXX + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'CC99' ; X--XX----XX--X = --XX--XX--XX-- + +tile35 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'C081' ; X------------X = ------XX------ + dc h'BC80' ; -XXXX--------- = --XXXX-------- + dc h'BC80' ; -XXXX--------- = --XXXX-------- + +tile36 anop + dc h'FFFF' ; XXXXXXXXXXXXXX = XXXXXXXXXXXXXX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'83E0' ; -----XXXX----- = XX----------XX + dc h'8C98' ; ---XX----XX--- = --XX------XX-- + dc h'F087' ; XXX--------XXX = ----XXXXXX---- + dc h'C081' ; X------------X = ------XX------ + dc h'809E' ; ---------XXXX- = --------XXXX-- + dc h'809E' ; ---------XXXX- = --------XXXX-- + + end + diff --git a/src/screen.asm b/src/screen.asm new file mode 100644 index 0000000..e950f41 --- /dev/null +++ b/src/screen.asm @@ -0,0 +1,3085 @@ +;----------------------------------------------------------------------------- +; screen.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +SCREEN start + + using LOWMEM + using ROSYSTEM + using ROTILES + using ROLEVELS + using ROSPRITES + +;----------------------------------------------------------------------------- +; Swap visible HGR pages and update currPageH to the back page hi byte +screenSwap entry + + lda backPage + beq ss00 + bit HISCR + jmp valueSwap +ss00 bit LOWSCR + +valueSwap entry + + lda backPage ; pretend flip the screen + eor #1 + sta backPage + lda #$60 ; pretend flip the screen Hi value so all drawing + eor currPageH ; happens on the front screen + sta currPageH + rts + + + +;----------------------------------------------------------------------------- +; x 0 clears top (play area minus 8 pixel row), x non-0 clears whole screen +screenClear entry + + lda #$00 + + ldy backPage + beq page1sc + jmp page2sc + +page1sc anop + cpx #0 + bne sc00 + jmp p1p2 +sc00 ldx #39 +p1l1 anop +; .repeat $48, Row +; sta $100 * (>HGRPage1+(Row+$78) & $07 << 2 | (Row+$78) & $30 >> 4) | (Row+$78) & $08 << 4 | (Row+$78) & $C0 >> 1 | (Row+$78) & $C0 >> 3,x +; .endrepeat + sta $23A8,x + sta $27A8,x + sta $2BA8,x + sta $2FA8,x + sta $33A8,x + sta $37A8,x + sta $3BA8,x + sta $3FA8,x + sta $2050,x + sta $2450,x + sta $2850,x + sta $2C50,x + sta $3050,x + sta $3450,x + sta $3850,x + sta $3C50,x + sta $20D0,x + sta $24D0,x + sta $28D0,x + sta $2CD0,x + sta $30D0,x + sta $34D0,x + sta $38D0,x + sta $3CD0,x + sta $2150,x + sta $2550,x + sta $2950,x + sta $2D50,x + sta $3150,x + sta $3550,x + sta $3950,x + sta $3D50,x + sta $21D0,x + sta $25D0,x + sta $29D0,x + sta $2DD0,x + sta $31D0,x + sta $35D0,x + sta $39D0,x + sta $3DD0,x + sta $2250,x + sta $2650,x + sta $2A50,x + sta $2E50,x + sta $3250,x + sta $3650,x + sta $3A50,x + sta $3E50,x + sta $22D0,x + sta $26D0,x + sta $2AD0,x + sta $2ED0,x + sta $32D0,x + sta $36D0,x + sta $3AD0,x + sta $3ED0,x + sta $2350,x + sta $2750,x + sta $2B50,x + sta $2F50,x + sta $3350,x + sta $3750,x + sta $3B50,x + sta $3F50,x + sta $23D0,x + sta $27D0,x + sta $2BD0,x + sta $2FD0,x + sta $33D0,x + sta $37D0,x + sta $3BD0,x + sta $3FD0,x + dex + bmi p1p2 + jmp p1l1 + +p1p2 anop + ldx #39 +p1l2 anop +; .repeat $78, Row +; sta $100 * (>HGRPage1+Row & $07 << 2 | Row & $30 >> 4) | Row & $08 << 4 | Row & $C0 >> 1 | Row & $C0 >> 3,x +; .endrepeat + sta $2000,x + sta $2400,x + sta $2800,x + sta $2C00,x + sta $3000,x + sta $3400,x + sta $3800,x + sta $3C00,x + sta $2080,x + sta $2480,x + sta $2880,x + sta $2C80,x + sta $3080,x + sta $3480,x + sta $3880,x + sta $3C80,x + sta $2100,x + sta $2500,x + sta $2900,x + sta $2D00,x + sta $3100,x + sta $3500,x + sta $3900,x + sta $3D00,x + sta $2180,x + sta $2580,x + sta $2980,x + sta $2D80,x + sta $3180,x + sta $3580,x + sta $3980,x + sta $3D80,x + sta $2200,x + sta $2600,x + sta $2A00,x + sta $2E00,x + sta $3200,x + sta $3600,x + sta $3A00,x + sta $3E00,x + sta $2280,x + sta $2680,x + sta $2A80,x + sta $2E80,x + sta $3280,x + sta $3680,x + sta $3A80,x + sta $3E80,x + sta $2300,x + sta $2700,x + sta $2B00,x + sta $2F00,x + sta $3300,x + sta $3700,x + sta $3B00,x + sta $3F00,x + sta $2380,x + sta $2780,x + sta $2B80,x + sta $2F80,x + sta $3380,x + sta $3780,x + sta $3B80,x + sta $3F80,x + sta $2028,x + sta $2428,x + sta $2828,x + sta $2C28,x + sta $3028,x + sta $3428,x + sta $3828,x + sta $3C28,x + sta $20A8,x + sta $24A8,x + sta $28A8,x + sta $2CA8,x + sta $30A8,x + sta $34A8,x + sta $38A8,x + sta $3CA8,x + sta $2128,x + sta $2528,x + sta $2928,x + sta $2D28,x + sta $3128,x + sta $3528,x + sta $3928,x + sta $3D28,x + sta $21A8,x + sta $25A8,x + sta $29A8,x + sta $2DA8,x + sta $31A8,x + sta $35A8,x + sta $39A8,x + sta $3DA8,x + sta $2228,x + sta $2628,x + sta $2A28,x + sta $2E28,x + sta $3228,x + sta $3628,x + sta $3A28,x + sta $3E28,x + sta $22A8,x + sta $26A8,x + sta $2AA8,x + sta $2EA8,x + sta $32A8,x + sta $36A8,x + sta $3AA8,x + sta $3EA8,x + sta $2328,x + sta $2728,x + sta $2B28,x + sta $2F28,x + sta $3328,x + sta $3728,x + sta $3B28,x + sta $3F28,x + dex + bmi done0 + jmp p1l2 + +done0 anop + rts + +page2sc anop + cpx #0 + bne sc01 + jmp p2p2 +sc01 ldx #39 + +p2l1 anop +; .repeat $48, Row +; sta $100 * (>HGRPage2+(Row+$78) & $07 << 2 | (Row+$78) & $30 >> 4) | (Row+$78) & $08 << 4 | (Row+$78) & $C0 >> 1 | (Row+$78) & $C0 >> 3,x +; .endrepeat + + sta $43A8,x + sta $47A8,x + sta $4BA8,x + sta $4FA8,x + sta $53A8,x + sta $57A8,x + sta $5BA8,x + sta $5FA8,x + sta $4050,x + sta $4450,x + sta $4850,x + sta $4C50,x + sta $5050,x + sta $5450,x + sta $5850,x + sta $5C50,x + sta $40D0,x + sta $44D0,x + sta $48D0,x + sta $4CD0,x + sta $50D0,x + sta $54D0,x + sta $58D0,x + sta $5CD0,x + sta $4150,x + sta $4550,x + sta $4950,x + sta $4D50,x + sta $5150,x + sta $5550,x + sta $5950,x + sta $5D50,x + sta $41D0,x + sta $45D0,x + sta $49D0,x + sta $4DD0,x + sta $51D0,x + sta $55D0,x + sta $59D0,x + sta $5DD0,x + sta $4250,x + sta $4650,x + sta $4A50,x + sta $4E50,x + sta $5250,x + sta $5650,x + sta $5A50,x + sta $5E50,x + sta $42D0,x + sta $46D0,x + sta $4AD0,x + sta $4ED0,x + sta $52D0,x + sta $56D0,x + sta $5AD0,x + sta $5ED0,x + sta $4350,x + sta $4750,x + sta $4B50,x + sta $4F50,x + sta $5350,x + sta $5750,x + sta $5B50,x + sta $5F50,x + sta $43D0,x + sta $47D0,x + sta $4BD0,x + sta $4FD0,x + sta $53D0,x + sta $57D0,x + sta $5BD0,x + sta $5FD0,x + dex + bmi p2p2 + jmp p2l1 + +p2p2 anop + ldx #39 +p2l2 anop +; .repeat $78, Row +; sta $100 * (>HGRPage2+Row & $07 << 2 | Row & $30 >> 4) | Row & $08 << 4 | Row & $C0 >> 1 | Row & $C0 >> 3,x +; .endrepeat + sta $4000,x + sta $4400,x + sta $4800,x + sta $4C00,x + sta $5000,x + sta $5400,x + sta $5800,x + sta $5C00,x + sta $4080,x + sta $4480,x + sta $4880,x + sta $4C80,x + sta $5080,x + sta $5480,x + sta $5880,x + sta $5C80,x + sta $4100,x + sta $4500,x + sta $4900,x + sta $4D00,x + sta $5100,x + sta $5500,x + sta $5900,x + sta $5D00,x + sta $4180,x + sta $4580,x + sta $4980,x + sta $4D80,x + sta $5180,x + sta $5580,x + sta $5980,x + sta $5D80,x + sta $4200,x + sta $4600,x + sta $4A00,x + sta $4E00,x + sta $5200,x + sta $5600,x + sta $5A00,x + sta $5E00,x + sta $4280,x + sta $4680,x + sta $4A80,x + sta $4E80,x + sta $5280,x + sta $5680,x + sta $5A80,x + sta $5E80,x + sta $4300,x + sta $4700,x + sta $4B00,x + sta $4F00,x + sta $5300,x + sta $5700,x + sta $5B00,x + sta $5F00,x + sta $4380,x + sta $4780,x + sta $4B80,x + sta $4F80,x + sta $5380,x + sta $5780,x + sta $5B80,x + sta $5F80,x + sta $4028,x + sta $4428,x + sta $4828,x + sta $4C28,x + sta $5028,x + sta $5428,x + sta $5828,x + sta $5C28,x + sta $40A8,x + sta $44A8,x + sta $48A8,x + sta $4CA8,x + sta $50A8,x + sta $54A8,x + sta $58A8,x + sta $5CA8,x + sta $4128,x + sta $4528,x + sta $4928,x + sta $4D28,x + sta $5128,x + sta $5528,x + sta $5928,x + sta $5D28,x + sta $41A8,x + sta $45A8,x + sta $49A8,x + sta $4DA8,x + sta $51A8,x + sta $55A8,x + sta $59A8,x + sta $5DA8,x + sta $4228,x + sta $4628,x + sta $4A28,x + sta $4E28,x + sta $5228,x + sta $5628,x + sta $5A28,x + sta $5E28,x + sta $42A8,x + sta $46A8,x + sta $4AA8,x + sta $4EA8,x + sta $52A8,x + sta $56A8,x + sta $5AA8,x + sta $5EA8,x + sta $4328,x + sta $4728,x + sta $4B28,x + sta $4F28,x + sta $5328,x + sta $5728,x + sta $5B28,x + sta $5F28,x + dex + bmi done1 + jmp p2l2 + +done1 anop + rts + + + +;----------------------------------------------------------------------------- +screenDrawLevelName entry + + clc + lda #20 ; screen is 20 "characters" wide + adc leftEdge ; but maybe is offset from the left + asl a ; mult by 2 for columns + tay ; put into y + dey ; but 0 based so 0-39 or whatever (not 1-40) + ldx #39 ; screen index is 0-39 + + lda currPageH + cmp #$20 + bne page2sdln + +sdl0 lda levelNameGfx0+$0000,y ; load the cache + sta $2050,x ; store to the screen (the hi byte is updated) + + lda levelNameGfx0+$0040,y ; but the lo byte ($50) is correct for row 16 (0 based) + sta $2450,x + + lda levelNameGfx0+$0080,y ; the cache is linear so each line is $40 from previous + sta $2850,x + + lda levelNameGfx0+$00C0,y + sta $2C50,x + + lda levelNameGfx0+$0100,y + sta $3050,x + + lda levelNameGfx0+$0140,y + sta $3450,x + + lda levelNameGfx0+$0180,y + sta $3850,x + + lda levelNameGfx0+$01C0,y + sta $3C50,x + + dey ; previous cache byte + dex ; previous screen byte + bpl sdl0 ; keep going till all 40 columns copied + + rts + +page2sdln anop + lda levelNameGfx0+$0000,y ; load the cache + sta $4050,x ; store to the screen (the hi byte is updated) + + lda levelNameGfx0+$0040,y ; but the lo byte ($50) is correct for row 16 (0 based) + sta $4450,x + + lda levelNameGfx0+$0080,y + sta $4850,x + + lda levelNameGfx0+$00C0,y + sta $4C50,x + + lda levelNameGfx0+$0100,y + sta $5050,x + + lda levelNameGfx0+$0140,y + sta $5450,x + + lda levelNameGfx0+$0180,y + sta $5850,x + + lda levelNameGfx0+$01C0,y + sta $5C50,x + + dey ; previous cache byte + dex ; previous screen byte + bpl page2sdln ; keep going till all 40 columns copied + + rts + + + +;----------------------------------------------------------------------------- +screenDrawAirFrame entry + + lda currPageH ; see if this is to page 1 or 2 + cmp #$20 + bne page2sdaf + + ldx #28 ; draw the long green lines that outline the bar +sda0 lda #%00101010 ; green left + sta $20DA,x + sta $24DA,x + sta $38DA,x + sta $3CDA,x + + lda #%01010101 ; green right + sta $20DB,x + sta $24DB,x + sta $38DB,x + sta $3CDB,x + + dex ; step back in 2's for left/right + dex + bpl sda0 + + ldx #31 ; draw the even longer white bar that counts down + lda #%01111111 ; white left & right +sda1 sta $28D7,x + sta $2CD7,x + sta $30D7,x + sta $34D7,x + + dex ; in 1's since left/right is the same $7f + bpl sda1 + + rts + +page2sdaf anop ; the same as page 1, just diff buffer + ldx #28 +sda2 lda #%0101010 + sta $40DA,x + sta $44DA,x + sta $58DA,x + sta $5CDA,x + + lda #%01010101 + sta $40DB,x + sta $44DB,x + sta $58DB,x + sta $5CDB,x + + dex + dex + bpl sda2 + + ldx #31 + lda #%01111111 ; white left & right +sda3 sta $48D7,x + sta $4CD7,x + sta $50D7,x + sta $54D7,x + + dex + bpl sda3 + + rts + + + +;----------------------------------------------------------------------------- +screenDrawAirRemaining entry + + lda airTipGfx ; the "graphic" to use + ldx airCols ; where to draw the tip of the graph + cpx #3 ; last few cols are against orange + bpl sdr0 + ora #$80 ; in the last few cols so make green orange +sdr0 ldy currPageH ; which page + cpy #$20 + bne page2sdar + + sta $28D7,x ; write the tip into page 1 + sta $2CD7,x + sta $30D7,x + sta $34D7,x + + rts + +page2sdar anop + sta $48D7,x ; write the tip into page 2 + sta $4CD7,x + sta $50D7,x + sta $54D7,x + + rts + + + +;----------------------------------------------------------------------------- +screenDrawLevel entry + + using LOWMEM + using ROSYSTEM + +levelReadL equ srcPtrL ; tile to draw in level +levelReadH equ srcPtrH +tileReadL equ dstPtrL ; data for tile to draw +tileReadH equ dstPtrH +rowsSdl equ sizeL ; rows to draw (15 -> 0) +colsSdl equ sizeH ; cols to draw (20+leftEdge -> leftEdge) + + lda #0 + sta tilesRendered + sta colsSdl + sta rowsSdl + tay + + lda leftEdge + adc #levelLayout + sta levelReadH + +nextRow anop + clc + lda backPage + beq sl00 + lda #PLAY_ROWS +sl00 adc rowsSdl + tax + lda rowDrawL,x + sta tileDraw+1 + lda rowDrawH,x + sta tileDraw+2 +readLevelCol anop + lda (levelReadL),y + beq nextColSdl + inc tilesRendered + sty colsSdl ; save the current col index + pha ; save the tile id + and #$F0 ; strip to bare tile (no extra info like collapse state) + adc #<(tilesInstances-TILE_BYTES) ; Index 1 has it's bytes at+0, so move start 1 tile back + sta tileReadL + lda #>tilesInstances + sta tileReadH ; points at the tile data + tya ; col to a + asl a ; *2 since each tile is 2 cols on screen + tax ; put the sceen col into x + pla ; restore the tileID + cmp #DATA_COLLAPSE+1 ; see if the tile is an active collapsing tile (>=$71) + bcc prepTileDraw ; could be $71->$77 for the collapsed state + cmp #DATA_KEY + bcc isCollapse ; if it's less than $80 it is a collapsing platform + beq prepTileDraw ; is it a key + cmp #DATA_DOOR ; if not a key, is it a door + beq nextColSdl ; door tile isn't a rendered tile, only a collision tile +setupSwitch anop + and #1 ; if < door then it's a switch is this an on switch? + beq sl01 ; no + lda #16 ; yes - the image is 16 bytes further (tile36) +sl01 adc #tile35 ; and set the hi byte too + adc #0 ; turns out tile36 is in a different block (if I remove these 2 bytes ;) + sta tileReadH ; points at the tile data + +prepTileDraw anop + ldy #0 ; set index for where to read tile data to the start +tileDraw anop + jsr PLACEHOLDER + ldy colsSdl +nextColSdl anop + iny + cpy #VISIBLE_COLS + bne readLevelCol + ldy #0 + inc rowsSdl + lda rowsSdl + cmp #PLAY_ROWS + beq allDrawn + lda levelReadL + adc #PLAY_COLS + sta levelReadL + bcc nextRow + inc levelReadH + bne nextRow ; bra +isCollapse entry + and #7 ; get the level of collapse + tay + lda collapseHeight,y ; see how many lines remain to draw and skip bytes + adc tileDraw+1 ; base address of draw routine + sta collapseDraw+1 + lda tileDraw+2 + adc #0 + sta collapseDraw+2 + ldy #0 +collapseDraw anop + jsr PLACEHOLDER + ldy colsSdl + jmp nextColSdl +allDrawn anop + lda currLevel + cmp #LEVEL_Solar_Power_Generator ; Is this the solar room + bne sl02 ; if not, move on + jmp screenSolarBeam ; solar room needs a solar beam +sl02 rts + + + +;----------------------------------------------------------------------------- +tileDrawP0R0 entry + + lda (tileReadL),y + sta $2000,x + iny + lda (tileReadL),y + sta $2001,x + iny + lda (tileReadL),y + sta $2400,x + iny + lda (tileReadL),y + sta $2401,x + iny + lda (tileReadL),y + sta $2800,x + iny + lda (tileReadL),y + sta $2801,x + iny + lda (tileReadL),y + sta $2C00,x + iny + lda (tileReadL),y + sta $2C01,x + iny + lda (tileReadL),y + sta $3000,x + iny + lda (tileReadL),y + sta $3001,x + iny + lda (tileReadL),y + sta $3400,x + iny + lda (tileReadL),y + sta $3401,x + iny + lda (tileReadL),y + sta $3800,x + iny + lda (tileReadL),y + sta $3801,x + iny + lda (tileReadL),y + sta $3C00,x + iny + lda (tileReadL),y + sta $3C01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R0 entry + + lda (tileReadL),y + sta $4000,x + iny + lda (tileReadL),y + sta $4001,x + iny + lda (tileReadL),y + sta $4400,x + iny + lda (tileReadL),y + sta $4401,x + iny + lda (tileReadL),y + sta $4800,x + iny + lda (tileReadL),y + sta $4801,x + iny + lda (tileReadL),y + sta $4C00,x + iny + lda (tileReadL),y + sta $4C01,x + iny + lda (tileReadL),y + sta $5000,x + iny + lda (tileReadL),y + sta $5001,x + iny + lda (tileReadL),y + sta $5400,x + iny + lda (tileReadL),y + sta $5401,x + iny + lda (tileReadL),y + sta $5800,x + iny + lda (tileReadL),y + sta $5801,x + iny + lda (tileReadL),y + sta $5C00,x + iny + lda (tileReadL),y + sta $5C01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R1 entry + + lda (tileReadL),y + sta $2080,x + iny + lda (tileReadL),y + sta $2081,x + iny + lda (tileReadL),y + sta $2480,x + iny + lda (tileReadL),y + sta $2481,x + iny + lda (tileReadL),y + sta $2880,x + iny + lda (tileReadL),y + sta $2881,x + iny + lda (tileReadL),y + sta $2C80,x + iny + lda (tileReadL),y + sta $2C81,x + iny + lda (tileReadL),y + sta $3080,x + iny + lda (tileReadL),y + sta $3081,x + iny + lda (tileReadL),y + sta $3480,x + iny + lda (tileReadL),y + sta $3481,x + iny + lda (tileReadL),y + sta $3880,x + iny + lda (tileReadL),y + sta $3881,x + iny + lda (tileReadL),y + sta $3C80,x + iny + lda (tileReadL),y + sta $3C81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R1 entry + + lda (tileReadL),y + sta $4080,x + iny + lda (tileReadL),y + sta $4081,x + iny + lda (tileReadL),y + sta $4480,x + iny + lda (tileReadL),y + sta $4481,x + iny + lda (tileReadL),y + sta $4880,x + iny + lda (tileReadL),y + sta $4881,x + iny + lda (tileReadL),y + sta $4C80,x + iny + lda (tileReadL),y + sta $4C81,x + iny + lda (tileReadL),y + sta $5080,x + iny + lda (tileReadL),y + sta $5081,x + iny + lda (tileReadL),y + sta $5480,x + iny + lda (tileReadL),y + sta $5481,x + iny + lda (tileReadL),y + sta $5880,x + iny + lda (tileReadL),y + sta $5881,x + iny + lda (tileReadL),y + sta $5C80,x + iny + lda (tileReadL),y + sta $5C81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R2 entry + + lda (tileReadL),y + sta $2100,x + iny + lda (tileReadL),y + sta $2101,x + iny + lda (tileReadL),y + sta $2500,x + iny + lda (tileReadL),y + sta $2501,x + iny + lda (tileReadL),y + sta $2900,x + iny + lda (tileReadL),y + sta $2901,x + iny + lda (tileReadL),y + sta $2D00,x + iny + lda (tileReadL),y + sta $2D01,x + iny + lda (tileReadL),y + sta $3100,x + iny + lda (tileReadL),y + sta $3101,x + iny + lda (tileReadL),y + sta $3500,x + iny + lda (tileReadL),y + sta $3501,x + iny + lda (tileReadL),y + sta $3900,x + iny + lda (tileReadL),y + sta $3901,x + iny + lda (tileReadL),y + sta $3D00,x + iny + lda (tileReadL),y + sta $3D01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R2 entry + + lda (tileReadL),y + sta $4100,x + iny + lda (tileReadL),y + sta $4101,x + iny + lda (tileReadL),y + sta $4500,x + iny + lda (tileReadL),y + sta $4501,x + iny + lda (tileReadL),y + sta $4900,x + iny + lda (tileReadL),y + sta $4901,x + iny + lda (tileReadL),y + sta $4D00,x + iny + lda (tileReadL),y + sta $4D01,x + iny + lda (tileReadL),y + sta $5100,x + iny + lda (tileReadL),y + sta $5101,x + iny + lda (tileReadL),y + sta $5500,x + iny + lda (tileReadL),y + sta $5501,x + iny + lda (tileReadL),y + sta $5900,x + iny + lda (tileReadL),y + sta $5901,x + iny + lda (tileReadL),y + sta $5D00,x + iny + lda (tileReadL),y + sta $5D01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R3 entry + + lda (tileReadL),y + sta $2180,x + iny + lda (tileReadL),y + sta $2181,x + iny + lda (tileReadL),y + sta $2580,x + iny + lda (tileReadL),y + sta $2581,x + iny + lda (tileReadL),y + sta $2980,x + iny + lda (tileReadL),y + sta $2981,x + iny + lda (tileReadL),y + sta $2D80,x + iny + lda (tileReadL),y + sta $2D81,x + iny + lda (tileReadL),y + sta $3180,x + iny + lda (tileReadL),y + sta $3181,x + iny + lda (tileReadL),y + sta $3580,x + iny + lda (tileReadL),y + sta $3581,x + iny + lda (tileReadL),y + sta $3980,x + iny + lda (tileReadL),y + sta $3981,x + iny + lda (tileReadL),y + sta $3D80,x + iny + lda (tileReadL),y + sta $3D81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R3 entry + + lda (tileReadL),y + sta $4180,x + iny + lda (tileReadL),y + sta $4181,x + iny + lda (tileReadL),y + sta $4580,x + iny + lda (tileReadL),y + sta $4581,x + iny + lda (tileReadL),y + sta $4980,x + iny + lda (tileReadL),y + sta $4981,x + iny + lda (tileReadL),y + sta $4D80,x + iny + lda (tileReadL),y + sta $4D81,x + iny + lda (tileReadL),y + sta $5180,x + iny + lda (tileReadL),y + sta $5181,x + iny + lda (tileReadL),y + sta $5580,x + iny + lda (tileReadL),y + sta $5581,x + iny + lda (tileReadL),y + sta $5980,x + iny + lda (tileReadL),y + sta $5981,x + iny + lda (tileReadL),y + sta $5D80,x + iny + lda (tileReadL),y + sta $5D81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R4 entry + + lda (tileReadL),y + sta $2200,x + iny + lda (tileReadL),y + sta $2201,x + iny + lda (tileReadL),y + sta $2600,x + iny + lda (tileReadL),y + sta $2601,x + iny + lda (tileReadL),y + sta $2A00,x + iny + lda (tileReadL),y + sta $2A01,x + iny + lda (tileReadL),y + sta $2E00,x + iny + lda (tileReadL),y + sta $2E01,x + iny + lda (tileReadL),y + sta $3200,x + iny + lda (tileReadL),y + sta $3201,x + iny + lda (tileReadL),y + sta $3600,x + iny + lda (tileReadL),y + sta $3601,x + iny + lda (tileReadL),y + sta $3A00,x + iny + lda (tileReadL),y + sta $3A01,x + iny + lda (tileReadL),y + sta $3E00,x + iny + lda (tileReadL),y + sta $3E01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R4 entry + + lda (tileReadL),y + sta $4200,x + iny + lda (tileReadL),y + sta $4201,x + iny + lda (tileReadL),y + sta $4600,x + iny + lda (tileReadL),y + sta $4601,x + iny + lda (tileReadL),y + sta $4A00,x + iny + lda (tileReadL),y + sta $4A01,x + iny + lda (tileReadL),y + sta $4E00,x + iny + lda (tileReadL),y + sta $4E01,x + iny + lda (tileReadL),y + sta $5200,x + iny + lda (tileReadL),y + sta $5201,x + iny + lda (tileReadL),y + sta $5600,x + iny + lda (tileReadL),y + sta $5601,x + iny + lda (tileReadL),y + sta $5A00,x + iny + lda (tileReadL),y + sta $5A01,x + iny + lda (tileReadL),y + sta $5E00,x + iny + lda (tileReadL),y + sta $5E01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R5 entry + + lda (tileReadL),y + sta $2280,x + iny + lda (tileReadL),y + sta $2281,x + iny + lda (tileReadL),y + sta $2680,x + iny + lda (tileReadL),y + sta $2681,x + iny + lda (tileReadL),y + sta $2A80,x + iny + lda (tileReadL),y + sta $2A81,x + iny + lda (tileReadL),y + sta $2E80,x + iny + lda (tileReadL),y + sta $2E81,x + iny + lda (tileReadL),y + sta $3280,x + iny + lda (tileReadL),y + sta $3281,x + iny + lda (tileReadL),y + sta $3680,x + iny + lda (tileReadL),y + sta $3681,x + iny + lda (tileReadL),y + sta $3A80,x + iny + lda (tileReadL),y + sta $3A81,x + iny + lda (tileReadL),y + sta $3E80,x + iny + lda (tileReadL),y + sta $3E81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R5 entry + + lda (tileReadL),y + sta $4280,x + iny + lda (tileReadL),y + sta $4281,x + iny + lda (tileReadL),y + sta $4680,x + iny + lda (tileReadL),y + sta $4681,x + iny + lda (tileReadL),y + sta $4A80,x + iny + lda (tileReadL),y + sta $4A81,x + iny + lda (tileReadL),y + sta $4E80,x + iny + lda (tileReadL),y + sta $4E81,x + iny + lda (tileReadL),y + sta $5280,x + iny + lda (tileReadL),y + sta $5281,x + iny + lda (tileReadL),y + sta $5680,x + iny + lda (tileReadL),y + sta $5681,x + iny + lda (tileReadL),y + sta $5A80,x + iny + lda (tileReadL),y + sta $5A81,x + iny + lda (tileReadL),y + sta $5E80,x + iny + lda (tileReadL),y + sta $5E81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R6 entry + + lda (tileReadL),y + sta $2300,x + iny + lda (tileReadL),y + sta $2301,x + iny + lda (tileReadL),y + sta $2700,x + iny + lda (tileReadL),y + sta $2701,x + iny + lda (tileReadL),y + sta $2B00,x + iny + lda (tileReadL),y + sta $2B01,x + iny + lda (tileReadL),y + sta $2F00,x + iny + lda (tileReadL),y + sta $2F01,x + iny + lda (tileReadL),y + sta $3300,x + iny + lda (tileReadL),y + sta $3301,x + iny + lda (tileReadL),y + sta $3700,x + iny + lda (tileReadL),y + sta $3701,x + iny + lda (tileReadL),y + sta $3B00,x + iny + lda (tileReadL),y + sta $3B01,x + iny + lda (tileReadL),y + sta $3F00,x + iny + lda (tileReadL),y + sta $3F01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R6 entry + + lda (tileReadL),y + sta $4300,x + iny + lda (tileReadL),y + sta $4301,x + iny + lda (tileReadL),y + sta $4700,x + iny + lda (tileReadL),y + sta $4701,x + iny + lda (tileReadL),y + sta $4B00,x + iny + lda (tileReadL),y + sta $4B01,x + iny + lda (tileReadL),y + sta $4F00,x + iny + lda (tileReadL),y + sta $4F01,x + iny + lda (tileReadL),y + sta $5300,x + iny + lda (tileReadL),y + sta $5301,x + iny + lda (tileReadL),y + sta $5700,x + iny + lda (tileReadL),y + sta $5701,x + iny + lda (tileReadL),y + sta $5B00,x + iny + lda (tileReadL),y + sta $5B01,x + iny + lda (tileReadL),y + sta $5F00,x + iny + lda (tileReadL),y + sta $5F01,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R7 entry + + lda (tileReadL),y + sta $2380,x + iny + lda (tileReadL),y + sta $2381,x + iny + lda (tileReadL),y + sta $2780,x + iny + lda (tileReadL),y + sta $2781,x + iny + lda (tileReadL),y + sta $2B80,x + iny + lda (tileReadL),y + sta $2B81,x + iny + lda (tileReadL),y + sta $2F80,x + iny + lda (tileReadL),y + sta $2F81,x + iny + lda (tileReadL),y + sta $3380,x + iny + lda (tileReadL),y + sta $3381,x + iny + lda (tileReadL),y + sta $3780,x + iny + lda (tileReadL),y + sta $3781,x + iny + lda (tileReadL),y + sta $3B80,x + iny + lda (tileReadL),y + sta $3B81,x + iny + lda (tileReadL),y + sta $3F80,x + iny + lda (tileReadL),y + sta $3F81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R7 entry + + lda (tileReadL),y + sta $4380,x + iny + lda (tileReadL),y + sta $4381,x + iny + lda (tileReadL),y + sta $4780,x + iny + lda (tileReadL),y + sta $4781,x + iny + lda (tileReadL),y + sta $4B80,x + iny + lda (tileReadL),y + sta $4B81,x + iny + lda (tileReadL),y + sta $4F80,x + iny + lda (tileReadL),y + sta $4F81,x + iny + lda (tileReadL),y + sta $5380,x + iny + lda (tileReadL),y + sta $5381,x + iny + lda (tileReadL),y + sta $5780,x + iny + lda (tileReadL),y + sta $5781,x + iny + lda (tileReadL),y + sta $5B80,x + iny + lda (tileReadL),y + sta $5B81,x + iny + lda (tileReadL),y + sta $5F80,x + iny + lda (tileReadL),y + sta $5F81,x + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R8 entry + + lda (tileReadL),y + sta $2028,X + iny + lda (tileReadL),y + sta $2029,X + iny + lda (tileReadL),y + sta $2428,X + iny + lda (tileReadL),y + sta $2429,X + iny + lda (tileReadL),y + sta $2828,X + iny + lda (tileReadL),y + sta $2829,X + iny + lda (tileReadL),y + sta $2C28,X + iny + lda (tileReadL),y + sta $2C29,X + iny + lda (tileReadL),y + sta $3028,X + iny + lda (tileReadL),y + sta $3029,X + iny + lda (tileReadL),y + sta $3428,X + iny + lda (tileReadL),y + sta $3429,X + iny + lda (tileReadL),y + sta $3828,X + iny + lda (tileReadL),y + sta $3829,X + iny + lda (tileReadL),y + sta $3C28,X + iny + lda (tileReadL),y + sta $3C29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R8 entry + + lda (tileReadL),y + sta $4028,X + iny + lda (tileReadL),y + sta $4029,X + iny + lda (tileReadL),y + sta $4428,X + iny + lda (tileReadL),y + sta $4429,X + iny + lda (tileReadL),y + sta $4828,X + iny + lda (tileReadL),y + sta $4829,X + iny + lda (tileReadL),y + sta $4C28,X + iny + lda (tileReadL),y + sta $4C29,X + iny + lda (tileReadL),y + sta $5028,X + iny + lda (tileReadL),y + sta $5029,X + iny + lda (tileReadL),y + sta $5428,X + iny + lda (tileReadL),y + sta $5429,X + iny + lda (tileReadL),y + sta $5828,X + iny + lda (tileReadL),y + sta $5829,X + iny + lda (tileReadL),y + sta $5C28,X + iny + lda (tileReadL),y + sta $5C29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0R9 entry + + lda (tileReadL),y + sta $20A8,X + iny + lda (tileReadL),y + sta $20A9,X + iny + lda (tileReadL),y + sta $24A8,X + iny + lda (tileReadL),y + sta $24A9,X + iny + lda (tileReadL),y + sta $28A8,X + iny + lda (tileReadL),y + sta $28A9,X + iny + lda (tileReadL),y + sta $2CA8,X + iny + lda (tileReadL),y + sta $2CA9,X + iny + lda (tileReadL),y + sta $30A8,X + iny + lda (tileReadL),y + sta $30A9,X + iny + lda (tileReadL),y + sta $34A8,X + iny + lda (tileReadL),y + sta $34A9,X + iny + lda (tileReadL),y + sta $38A8,X + iny + lda (tileReadL),y + sta $38A9,X + iny + lda (tileReadL),y + sta $3CA8,X + iny + lda (tileReadL),y + sta $3CA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1R9 entry + + lda (tileReadL),y + sta $40A8,X + iny + lda (tileReadL),y + sta $40A9,X + iny + lda (tileReadL),y + sta $44A8,X + iny + lda (tileReadL),y + sta $44A9,X + iny + lda (tileReadL),y + sta $48A8,X + iny + lda (tileReadL),y + sta $48A9,X + iny + lda (tileReadL),y + sta $4CA8,X + iny + lda (tileReadL),y + sta $4CA9,X + iny + lda (tileReadL),y + sta $50A8,X + iny + lda (tileReadL),y + sta $50A9,X + iny + lda (tileReadL),y + sta $54A8,X + iny + lda (tileReadL),y + sta $54A9,X + iny + lda (tileReadL),y + sta $58A8,X + iny + lda (tileReadL),y + sta $58A9,X + iny + lda (tileReadL),y + sta $5CA8,X + iny + lda (tileReadL),y + sta $5CA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0RA entry + + lda (tileReadL),y + sta $2128,X + iny + lda (tileReadL),y + sta $2129,X + iny + lda (tileReadL),y + sta $2528,X + iny + lda (tileReadL),y + sta $2529,X + iny + lda (tileReadL),y + sta $2928,X + iny + lda (tileReadL),y + sta $2929,X + iny + lda (tileReadL),y + sta $2D28,X + iny + lda (tileReadL),y + sta $2D29,X + iny + lda (tileReadL),y + sta $3128,X + iny + lda (tileReadL),y + sta $3129,X + iny + lda (tileReadL),y + sta $3528,X + iny + lda (tileReadL),y + sta $3529,X + iny + lda (tileReadL),y + sta $3928,X + iny + lda (tileReadL),y + sta $3929,X + iny + lda (tileReadL),y + sta $3D28,X + iny + lda (tileReadL),y + sta $3D29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1RA entry + + lda (tileReadL),y + sta $4128,X + iny + lda (tileReadL),y + sta $4129,X + iny + lda (tileReadL),y + sta $4528,X + iny + lda (tileReadL),y + sta $4529,X + iny + lda (tileReadL),y + sta $4928,X + iny + lda (tileReadL),y + sta $4929,X + iny + lda (tileReadL),y + sta $4D28,X + iny + lda (tileReadL),y + sta $4D29,X + iny + lda (tileReadL),y + sta $5128,X + iny + lda (tileReadL),y + sta $5129,X + iny + lda (tileReadL),y + sta $5528,X + iny + lda (tileReadL),y + sta $5529,X + iny + lda (tileReadL),y + sta $5928,X + iny + lda (tileReadL),y + sta $5929,X + iny + lda (tileReadL),y + sta $5D28,X + iny + lda (tileReadL),y + sta $5D29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0RB entry + + lda (tileReadL),y + sta $21A8,X + iny + lda (tileReadL),y + sta $21A9,X + iny + lda (tileReadL),y + sta $25A8,X + iny + lda (tileReadL),y + sta $25A9,X + iny + lda (tileReadL),y + sta $29A8,X + iny + lda (tileReadL),y + sta $29A9,X + iny + lda (tileReadL),y + sta $2DA8,X + iny + lda (tileReadL),y + sta $2DA9,X + iny + lda (tileReadL),y + sta $31A8,X + iny + lda (tileReadL),y + sta $31A9,X + iny + lda (tileReadL),y + sta $35A8,X + iny + lda (tileReadL),y + sta $35A9,X + iny + lda (tileReadL),y + sta $39A8,X + iny + lda (tileReadL),y + sta $39A9,X + iny + lda (tileReadL),y + sta $3DA8,X + iny + lda (tileReadL),y + sta $3DA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1RB entry + + lda (tileReadL),y + sta $41A8,X + iny + lda (tileReadL),y + sta $41A9,X + iny + lda (tileReadL),y + sta $45A8,X + iny + lda (tileReadL),y + sta $45A9,X + iny + lda (tileReadL),y + sta $49A8,X + iny + lda (tileReadL),y + sta $49A9,X + iny + lda (tileReadL),y + sta $4DA8,X + iny + lda (tileReadL),y + sta $4DA9,X + iny + lda (tileReadL),y + sta $51A8,X + iny + lda (tileReadL),y + sta $51A9,X + iny + lda (tileReadL),y + sta $55A8,X + iny + lda (tileReadL),y + sta $55A9,X + iny + lda (tileReadL),y + sta $59A8,X + iny + lda (tileReadL),y + sta $59A9,X + iny + lda (tileReadL),y + sta $5DA8,X + iny + lda (tileReadL),y + sta $5DA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0RC entry + + lda (tileReadL),y + sta $2228,X + iny + lda (tileReadL),y + sta $2229,X + iny + lda (tileReadL),y + sta $2628,X + iny + lda (tileReadL),y + sta $2629,X + iny + lda (tileReadL),y + sta $2A28,X + iny + lda (tileReadL),y + sta $2A29,X + iny + lda (tileReadL),y + sta $2E28,X + iny + lda (tileReadL),y + sta $2E29,X + iny + lda (tileReadL),y + sta $3228,X + iny + lda (tileReadL),y + sta $3229,X + iny + lda (tileReadL),y + sta $3628,X + iny + lda (tileReadL),y + sta $3629,X + iny + lda (tileReadL),y + sta $3A28,X + iny + lda (tileReadL),y + sta $3A29,X + iny + lda (tileReadL),y + sta $3E28,X + iny + lda (tileReadL),y + sta $3E29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1RC entry + + lda (tileReadL),y + sta $4228,X + iny + lda (tileReadL),y + sta $4229,X + iny + lda (tileReadL),y + sta $4628,X + iny + lda (tileReadL),y + sta $4629,X + iny + lda (tileReadL),y + sta $4A28,X + iny + lda (tileReadL),y + sta $4A29,X + iny + lda (tileReadL),y + sta $4E28,X + iny + lda (tileReadL),y + sta $4E29,X + iny + lda (tileReadL),y + sta $5228,X + iny + lda (tileReadL),y + sta $5229,X + iny + lda (tileReadL),y + sta $5628,X + iny + lda (tileReadL),y + sta $5629,X + iny + lda (tileReadL),y + sta $5A28,X + iny + lda (tileReadL),y + sta $5A29,X + iny + lda (tileReadL),y + sta $5E28,X + iny + lda (tileReadL),y + sta $5E29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0RD entry + + lda (tileReadL),y + sta $22A8,X + iny + lda (tileReadL),y + sta $22A9,X + iny + lda (tileReadL),y + sta $26A8,X + iny + lda (tileReadL),y + sta $26A9,X + iny + lda (tileReadL),y + sta $2AA8,X + iny + lda (tileReadL),y + sta $2AA9,X + iny + lda (tileReadL),y + sta $2EA8,X + iny + lda (tileReadL),y + sta $2EA9,X + iny + lda (tileReadL),y + sta $32A8,X + iny + lda (tileReadL),y + sta $32A9,X + iny + lda (tileReadL),y + sta $36A8,X + iny + lda (tileReadL),y + sta $36A9,X + iny + lda (tileReadL),y + sta $3AA8,X + iny + lda (tileReadL),y + sta $3AA9,X + iny + lda (tileReadL),y + sta $3EA8,X + iny + lda (tileReadL),y + sta $3EA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1RD entry + + lda (tileReadL),y + sta $42A8,X + iny + lda (tileReadL),y + sta $42A9,X + iny + lda (tileReadL),y + sta $46A8,X + iny + lda (tileReadL),y + sta $46A9,X + iny + lda (tileReadL),y + sta $4AA8,X + iny + lda (tileReadL),y + sta $4AA9,X + iny + lda (tileReadL),y + sta $4EA8,X + iny + lda (tileReadL),y + sta $4EA9,X + iny + lda (tileReadL),y + sta $52A8,X + iny + lda (tileReadL),y + sta $52A9,X + iny + lda (tileReadL),y + sta $56A8,X + iny + lda (tileReadL),y + sta $56A9,X + iny + lda (tileReadL),y + sta $5AA8,X + iny + lda (tileReadL),y + sta $5AA9,X + iny + lda (tileReadL),y + sta $5EA8,X + iny + lda (tileReadL),y + sta $5EA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0RE entry + + lda (tileReadL),y + sta $2328,X + iny + lda (tileReadL),y + sta $2329,X + iny + lda (tileReadL),y + sta $2728,X + iny + lda (tileReadL),y + sta $2729,X + iny + lda (tileReadL),y + sta $2B28,X + iny + lda (tileReadL),y + sta $2B29,X + iny + lda (tileReadL),y + sta $2F28,X + iny + lda (tileReadL),y + sta $2F29,X + iny + lda (tileReadL),y + sta $3328,X + iny + lda (tileReadL),y + sta $3329,X + iny + lda (tileReadL),y + sta $3728,X + iny + lda (tileReadL),y + sta $3729,X + iny + lda (tileReadL),y + sta $3B28,X + iny + lda (tileReadL),y + sta $3B29,X + iny + lda (tileReadL),y + sta $3F28,X + iny + lda (tileReadL),y + sta $3F29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1RE entry + + lda (tileReadL),y + sta $4328,X + iny + lda (tileReadL),y + sta $4329,X + iny + lda (tileReadL),y + sta $4728,X + iny + lda (tileReadL),y + sta $4729,X + iny + lda (tileReadL),y + sta $4B28,X + iny + lda (tileReadL),y + sta $4B29,X + iny + lda (tileReadL),y + sta $4F28,X + iny + lda (tileReadL),y + sta $4F29,X + iny + lda (tileReadL),y + sta $5328,X + iny + lda (tileReadL),y + sta $5329,X + iny + lda (tileReadL),y + sta $5728,X + iny + lda (tileReadL),y + sta $5729,X + iny + lda (tileReadL),y + sta $5B28,X + iny + lda (tileReadL),y + sta $5B29,X + iny + lda (tileReadL),y + sta $5F28,X + iny + lda (tileReadL),y + sta $5F29,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP0RF entry + + lda (tileReadL),y + sta $23A8,X + iny + lda (tileReadL),y + sta $23A9,X + iny + lda (tileReadL),y + sta $27A8,X + iny + lda (tileReadL),y + sta $27A9,X + iny + lda (tileReadL),y + sta $2BA8,X + iny + lda (tileReadL),y + sta $2BA9,X + iny + lda (tileReadL),y + sta $2FA8,X + iny + lda (tileReadL),y + sta $2FA9,X + iny + lda (tileReadL),y + sta $33A8,X + iny + lda (tileReadL),y + sta $33A9,X + iny + lda (tileReadL),y + sta $37A8,X + iny + lda (tileReadL),y + sta $37A9,X + iny + lda (tileReadL),y + sta $3BA8,X + iny + lda (tileReadL),y + sta $3BA9,X + iny + lda (tileReadL),y + sta $3FA8,X + iny + lda (tileReadL),y + sta $3FA9,X + rts + + +;----------------------------------------------------------------------------- +tileDrawP1RF entry + + lda (tileReadL),y + sta $43A8,X + iny + lda (tileReadL),y + sta $43A9,X + iny + lda (tileReadL),y + sta $47A8,X + iny + lda (tileReadL),y + sta $47A9,X + iny + lda (tileReadL),y + sta $4BA8,X + iny + lda (tileReadL),y + sta $4BA9,X + iny + lda (tileReadL),y + sta $4FA8,X + iny + lda (tileReadL),y + sta $4FA9,X + iny + lda (tileReadL),y + sta $53A8,X + iny + lda (tileReadL),y + sta $53A9,X + iny + lda (tileReadL),y + sta $57A8,X + iny + lda (tileReadL),y + sta $57A9,X + iny + lda (tileReadL),y + sta $5BA8,X + iny + lda (tileReadL),y + sta $5BA9,X + iny + lda (tileReadL),y + sta $5FA8,X + iny + lda (tileReadL),y + sta $5FA9,X + rts + + +;----------------------------------------------------------------------------- +screenDrawSprites entry + +count equ sizeL + + ldx numSprites ; render the AI + dex ; ignore the door + stx count +sdsa jsr screenDrawSprite + dec count + ldx count + bpl sdsa + + rts + + + +;----------------------------------------------------------------------------- +screenDrawSprite entry + +col equ sizeH +lines equ tmpBot+0 + + lda #0 + sta read+1 ; in case of left clipping, reset read + lda #3 + sta stripLen+1 ; in case of right clipping, reset length + + lda spriteXPos,x ; col in 0..31 range + sec + sbc leftEdge ; move by the left edge + bpl leftOK ; if ge 0 then no clipping left + cmp #$ff + beq lClip + +drawOffScreen anop + sta lines + lda spriteClass,x + bit CLASS_MOVE_Y + beq sdb0 ; if yes, ignore + jmp screenDrawOffscreenSprite ; an off-screen amoeba gets an indicator +sdb0 rts + +lClip anop + lda #2 + sta read+1 + lda #1 + sta stripLen+1 + lda #0 + bne rightOK ; BRA + +leftOK anop + cmp #19 ; clip on the right + bcc rightOK + beq rClip + bne drawOffScreen ; BRA + +rClip anop + lda #1 + sta stripLen+1 + lda #19 + +rightOK anop + asl a ; multiply times 2 + sta col ; screen column for where to start draw + + lda spriteFrame,x + adc spriteFramesIdx,x + tay + lda mult64H,y ; and add the 64 * frame hi + adc #>spriteInstances ; add the hi offset + sta read+2 + lda mult64L,y + adc #sprites + sta srcPtrH ; save as srcPtr + + txa ; how many lives (0 based) into a for column offset calc + +oloop anop + asl a ; mult * 4 to set them apart + asl a + sta sizeH ; store the column in sizeH + lda #16 ; draw 16 lines + sta dstPtrL ; store the lines in dstPrkL + + ldy #22*8 ; Draw the lives in row 19 (0 based) + + lda srcPtrL ; copy the srcPtr to where to read from + sta readSdl+1 + lda srcPtrH + sta readSdl+2 + +loopSdlv anop + lda sizeH ; start with the column + adc rowL,y ; add the row start + sta write+1 + lda rowH,y + adc currPageH ; and the page + sta write+2 ; "write" points at the line to copy 4 bytes to + + ldx #3 ; copy offsets 0..3 +readSdl anop + lda PLACEHOLDER,x ; get the willy bytes +write anop + sta PLACEHOLDER,x ; put them on screen + dex + bpl readSdl ; do all the bytes + dec dstPtrL ; one more line done + beq nextSdlv ; all lines done, see if more lives to draw + lda readSdl+1 ; not all done, advance read by 4 bytes + adc #4 + sta readSdl+1 + bcc sal1 + inc readSdl+2 + clc +sal1 iny ; and go to next line + bne loopSdlv ; BRA + +nextSdlv anop + dec sizeL ; dec the count of lives to draw + lda sizeL ; get it in a to calc the column + bpl oloop ; and go do that if ge 0 + + lda allDone ; sentinel to stop looping when cheat active + beq maybeCheat ; if not set then check if cheat is active + +doneSdlv anop + rts ; exit + +maybeCheat anop + lda cheatActive ; see if cheat mode is on + beq doneSdlv ; if not then done + sta allDone ; set sentinel + + ldx lives ; get the column to draw the boot + txa + asl a ; mult * 4 to set them apart + asl a + sta sizeH ; store the column in sizeH + lda #16 ; draw 16 lines + sta dstPtrL ; store the lines in dstPrkL + + ldy #22*8 ; Draw the lives in row 19 (0 based) + + lda #sprite19dw + sta readSdl+2 + jmp loopSdlv + + + +;----------------------------------------------------------------------------- +screenDrawWilly entry + +row equ sizeL +colSdw equ sizeH +linesSdw equ tmpBot+0 +willyByte equ tmpBot+1 +collisionSdw equ tmpBot+2 +detection equ tmpBot+3 + + sta detection + lda willyYPos ; get the y position of the sprite + sta row + lda willyXPos ; col in 0..31 range + sec + sbc leftEdge ; move by the left edge + asl a ; multiply times 2 + sta colSdw ; screen column for where to start draw + lda #16 ; sprites are 16 high + sta linesSdw + ldx #0 ; index into willy sprite data + stx collisionSdw ; clear collision counter + + ldy willyFrame ; get the frame + lda mult64L,y ; get the frame * 64 lo + adc #sprite00 ; add the hi offset + adc mult64H,y ; and add the 64 * frame hi + sta willyRead+2 ; willyRead now a pointer at the frame to show + +rowSetup anop + clc + ldy row ; current row to draw + lda colSdw ; start with the column + adc rowL,y ; add the row start + sta dstPtrL + lda rowH,y + adc currPageH ; and the page + sta dstPtrH ; write points at the line to copy 4 bytes to +preWillyRead anop + ldy #0 ; willy is 4 bytes wide +willyRead anop + lda PLACEHOLDER,x ; read a willy sprite byte + beq nextCol ; ignore the 0 bytes + bit detection + bne doDetect + ora (dstPtrL),y ; add the screen byte + sta (dstPtrL),y ; store it back + bne nextCol ; bra +doDetect anop + sta willyByte ; save the byte + eor (dstPtrL),y ; add the screen byte + sta (dstPtrL),y ; store it back + and willyByte ; see if willy overlaps + cmp willyByte + beq nextCol ; if not changed, no collision + inc collisionSdw ; there was a collision +nextCol anop + inx ; advance to next byte + iny ; next column + cpy #4 + bcc willyRead ; still in a row doing columns + dec linesSdw ; one less line to render + beq doneSdw ; if no lines left then done + inc row ; next row + lda row ; test to see if the row is at an address that needs lookup + and #7 + beq rowSetup + lda dstPtrH ; move down by $400 to next row + clc + adc #$04 + sta dstPtrH + bne preWillyRead ; bra +doneSdw anop + lda collisionSdw + cmp #1 + rts + +;----------------------------------------------------------------------------- +; Mask the front screen with the color index passed in at tmpBot+0 (colIdx) +screenInvertVisibleScreen entry + +colIdx equ tmpBot+0 +rows equ tmpBot+1 +hiresRows equ tmpBot+2 +colL equ tmpBot+3 +colR equ tmpBot+4 + + jsr valueSwap + + ldx colIdx ; load the color mask based on the index + lda masksLeft,x + sta colL + lda masksRight,x + sta colR + + lda #PLAY_ROWS ; init a counter for how many rows to do + sta rows + lda #0 ; init the index to the starting hires row for the same "text" row + sta hiresRows + clc + +rowLoop anop + ldy hiresRows ; init the pointer to the top line of the hires row + lda rowL,y + sta dstPtrL + lda currPageH + adc rowH,y + sta dstPtrH + + ldy #2*(VISIBLE_COLS-1) ; start at column 38 +colLoop anop + ldx #8 ; 8 hires rows per text row +siv0 lda (dstPtrL),y ; get the left col/byte on screen + and #%01111111 ; ignore the msb + eor colL ; eor with the color + sta (dstPtrL),y ; write it back + iny ; go to the right col + lda (dstPtrL),y + and #%01111111 + eor colR + sta (dstPtrL),y + dey ; back to left + dex ; one more hires row done + beq siv1 ; all done? + lda dstPtrH ; not yet + adc #4 ; move hires row down by 1 + sta dstPtrH + bne siv0 ; BRA to do all 8 hires rows +siv1 lda dstPtrH ; move the hires ptr back to the top row + sec ; for the text row being processed + sbc #7*4 + sta dstPtrH + clc ; clear carry from last set + +next anop + dey ; move to the prev col right + dey ; and move to the prev col left + bpl colLoop ; and repeat for all columns ge 0 + + dec rows ; done a row + beq doneSivs ; stop when all rows done + + lda hiresRows ; more to do so move the hires + clc ; starting row down by 8 to be at the + adc #8 ; start of the next "text" row + sta hiresRows + jmp rowLoop ; go back and do this row now + +doneSivs anop + jsr valueSwap ; put the screen buffer info back + rts ; all done + + + +;----------------------------------------------------------------------------- +screenSolarBeam entry + +worldPtrL equ srcPtrL +worldPtrH equ srcPtrH +screenPtrL equ dstPtrL +screenPtrH equ dstPtrH +column equ sizeL +rowSsb equ sizeH +screenCol equ tmpBot+0 +direction equ tmpBot+1 +collision equ tmpBot+2 +isWilly equ tmpBot+3 + + lda #0 ; init some local variables to 0 + sta rowSsb + sta direction + sta collision + sta isWilly + + lda #23 ; column where solar beam starts + sta column + sta worldPtrL ; also the column in levelLayout (aligned in mem) + lda #>levelLayout ; make worldPtr point at the start of the beam + sta worldPtrH + +while anop + lda column ; start with the column + sec + sbc leftEdge ; and see if it's on screen + bmi beamLeft ; if c - le <= 0 then c is left of screen and done + sta screenCol ; save this + cmp #20 ; if c - le >= 20 then c is to right of screen + bcc onScreen ; c - l1 >= 0 and < 20 so visible + +offScreen anop + ldy #0 ; beam is to the right so may become visible + lda (worldPtrL),y ; see if beam hits a world tile + beq ssb0 ; if not, process beam +beamLeft anop + jmp doneSsb +ssb0 ldx numSprites ; need to see if beam hits a sprite (not door) to bend +checkLoop anop + dex + bmi checkCollision ; checked all sprites + lda spriteXPos,x ; get the sprite x + cmp column ; compare to the beam x + beq matchX ; if it matches it's a hit + bcs checkLoop ; sprite is to the right of the beam + adc #1 ; right col of the sprite + cmp column ; is it in the beam? + bne checkLoop ; if not this sprite is out +matchX anop + lda spriteYPos,x ; see if y also matches + cmp rowSsb ; test against beam height + beq matchy + bcs checkLoop ; sprite top is lower than beam + adc #16 ; prep to test bottom of sprite + cmp rowSsb ; against the beam + bcc checkLoop ; sprite bottom is above beam +matchy anop + inc collision ; set the collision + bne checkCollision ; and exit the check since sprites don't overlap + +onScreen anop + lda willyYPos ; see if the beam intersects willy + adc #16 ; if willyY+16 >= row and willyY <= row+8 + cmp rowSsb ; then willy intersects in Y + bcc drawBlock + clc + lda rowSsb + adc #8 + cmp willyYPos + bcc drawBlock + lda column ; if col >= willyX and col < willyX+3 + cmp willyXPos ; then willy intersects in X also, so hitting willy + bcc drawBlock + lda willyXPos + clc + adc #2 + cmp column + bcc drawBlock + sta isWilly ; set isWIlly to true when hitting willy + clc + +drawBlock anop + ldy rowSsb ; set up to draw + lda screenCol ; on screen + asl a ; which is 2 bytes per column + adc rowL,y + sta screenPtrL + lda rowH,y + adc currPageH + sta screenPtrH + + ldx #8 ; beam block is 8 rows high + ldy #0 ; y 0 and 1 for left and right +blockLoop anop + lda (screenPtrL),y ; get what's on screen (sprite) + beq nocol ; if nothing just overwrite + inc collision ; hit a sprite +nocol anop + ora #%10101010 ; orange left + sta (screenPtrL),y ; write to screen + + iny ; go to right column + + lda (screenPtrL),y ; repeat for right col + beq ssb1 + inc collision +ssb1 ora #%11010101 + sta (screenPtrL),y + + dey ; set y back to 0 + dex ; done one more row + beq checkCollision ; if all rows done, then done with plot + + lda screenPtrH ; move down a row by adding $0400 + adc #$04 + sta screenPtrH + bne blockLoop ; BRA + +checkCollision anop + lda isWilly ; was willy hit + beq chkDirChng ; if not, normal collision checks + lda #2 ; don't set airflow to less than 2 so both + cmp airFlow ; buffers get to draw + bcs ssb2 + sta airFlow +ssb2 lda #0 ; willy was hit so reset locals + sta isWilly + beq setCollision ; go move the beam +chkDirChng anop + lda collision ; see if there was a collision + beq moveBeam ; if there wasn't move the beam + lda direction ; there was a sprite collision + eor #1 ; so change the direction of the beam + sta direction + lda #0 +setCollision anop + sta collision ; reset the collision counter +moveBeam anop + lda direction ; get the beam direction + beq down ; 0 is down and 1 is left +left anop + dec column ; move a world column left + lda worldPtrL ; and move the pointer as well + bne ssb3 + dec worldPtrH +ssb3 dec worldPtrL + jmp checkWorld ; see that the new location isn't a world tile + +down anop + clc + lda rowSsb ; move the row + adc #8 ; down by 8 (1 block height) + sta rowSsb + lda worldPtrL ; and move the world pointer as well + adc #32 + sta worldPtrL + bcc checkWorld + inc worldPtrH + +checkWorld anop + lda (worldPtrL),y ; load a world location + bne doneSsb ; if occupied, beam dies + jmp while ; keep going till beam dies +doneSsb anop + rts + + end + diff --git a/src/sprite.asm b/src/sprite.asm new file mode 100644 index 0000000..226575c --- /dev/null +++ b/src/sprite.asm @@ -0,0 +1,382 @@ +;----------------------------------------------------------------------------- +; sprite.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +SPRITE start + + using LOWMEM + using ROSYSTEM + using ROLEVELS + using ROSPRITES + +;----------------------------------------------------------------------------- +; Copy bytes from srcPtr to dstPtr +; IN: - srcPtr - start of copy +; dstPtr - start of non-overlapping destination +; size - number of bytes to copy +; Clobbers: a,y +spriteCopyMemSrcToDst entry + + ldy #0 +hiCopy anop + dec sizeH + bmi lowCopy +scm0 lda (srcPtrL),y + sta (dstPtrL),y + dey + bne scm0 + inc srcPtrH + inc dstPtrH + bne hiCopy + +lowCopy anop + ldy sizeL + dey + bmi doneScm +scm1 lda (srcPtrL),y + sta (dstPtrL),y + dey + bpl scm1 + +doneScm anop + rts + + + +;----------------------------------------------------------------------------- +; Look up the color, and apply those masks to the frames +; IN: x = start frame +; y = num frames +; a = color index +; Clobbers: a,y +spriteApplyMaskToFrames entry + +;instanceIdx0 equ tmpBot+0 +colMaskL0 equ tmpBot+1 +colMaskR0 equ tmpBot+2 +numFrames equ tmpBot+3 + + sty numFrames ; save y + tay ; put color index in y + + lda masksLeft,y ; look up the masks for the color + sta colMaskL0 + lda masksRight,y + sta colMaskR0 + + lda mult64L,x ; build a pointer to the frame + sta srcPtrL + lda mult64H,x + adc #>spriteInstances + sta srcPtrH + + ldy numFrames ; convert frames to bytes + lda mult64H,y + sta sizeH + lda mult64L,y + sta sizeL + + ldy #0 ; do blocks of 256 +hiPass anop + dec sizeH ; see if there's a hi block to do + bmi lowPass ; if none (remain) to do, move on +sam0 lda (srcPtrL),y ; do a left hand byte + and colMaskL0 + sta (srcPtrL),y + dey + lda (srcPtrL),y ; then a right hand byte + and colMaskR0 + sta (srcPtrL),y + dey + bne sam0 ; for 256 bytes + inc dstPtrH ; advance the dest ptr Hi + bne hiPass ; BRA + +lowPass anop + ldy sizeL ; do bytes remaining lt 256 + dey + bmi doneSam ; keep going till all done +sam1 lda (srcPtrL),y + and colMaskL0 + sta (srcPtrL),y + dey + lda (srcPtrL),y + and colMaskR0 + sta (srcPtrL),y + dey + bpl sam1 + +doneSam anop + rts + + + +;----------------------------------------------------------------------------- +; Copy one frame to another +; IN: +; originalFrame = tmpBot+4 +; newFrame = tmpBot+5 +; Clobbers: a,x,y +spriteCopyFrameToFrame entry + +originalFrame0 equ tmpBot+4 +newFrame0 equ tmpBot+5 + + clc + + ldx originalFrame0 ; point srcPtr at the original frame + lda mult64L,x + sta srcPtrL + lda mult64H,x + adc #>spriteInstances + sta srcPtrH + + ldx newFrame0 ; point dstPtr at the target frame + lda mult64L,x + sta dstPtrL + lda mult64H,x + adc #>spriteInstances + sta dstPtrH + + lda #0 ; 256 or less bytes (no Hi) + sta sizeH + lda #64 ; just 64 bytes to copy + sta sizeL + jsr spriteCopyMemSrcToDst ; use copymem to copy a 64 byte frame + + rts + + + +;----------------------------------------------------------------------------- +; Invert the pixels of a frame +; IN: +; x = frame number +spriteInvertFrame entry + + clc + lda mult64L,x ; make srcPtr point at the frame + sta srcPtrL + lda mult64H,x + adc #>spriteInstances + sta srcPtrH + + ldy #SPRITE_BYTES-1 ; do for a whole frame (0 based) +sif0 lda (srcPtrL),y ; get the frame byte + eor #%01111111 ; invert except for the MSB + sta (srcPtrL),y ; and save the byte + dey ; one less byte to do + bpl sif0 ; do for all bytes + + rts + + + +;----------------------------------------------------------------------------- +; Clear all the pixels of a frame +; IN: +; x = frame number +; y = number of frames to clear +spriteClearFrames entry + +count0 equ sizeL + + lda mult64L,y ; turn the number of frames into num bytes + sta count0 ; save as a count + + clc ; and clear carry + lda mult64L,x ; make srcPtr point at the + sta srcPtrL + lda mult64H,x + adc #>spriteInstances + sta srcPtrH + + ldy count0 ; how many bytes to clear + dey ; make zero based + lda #0 ; value to write +scf0 sta (srcPtrL),y ; write 0 to frame + dey ; previous byte in frame + bpl scf0 ; do for all, incl. zero'th byte + + rts + + + +;----------------------------------------------------------------------------- +; Make an instance of the bitmap (index in a) into the spriteInstance buffer +; while expanding the bitmap from 32 byte 1bpp into 64 byte 2bpp and masking +; the instance for the required color. +; IN: +; a - bitmapIdx +; x - instanceIdx +spriteInstanceSpriteFrames entry + +; count = tmpBot+0 +; spriteIdx = tmpBot+1 +instanceIdx1 equ tmpBot+2 +srcIdx equ tmpBot+3 +dstIdx equ tmpBot+4 +colMaskL1 equ tmpBot+5 +colMaskR1 equ tmpBot+6 + + ldy #0 + sty srcPtrH + sty dstPtrH + + ldy #5 ; mult * 32 (shl 5 times) since each src frame is 32 bytes +sis0 asl a ; shift the low + rol srcPtrH ; and the hi, and move carry into hi if needed + dey ; do for all 6 iterations + bne sis0 + + adc #sprite08 + adc srcPtrH + sta srcPtrH ; src ptr now points at the 1st frame + + lda spriteFramesIdx,x ; get the sprite dest frame + ldy #6 ; mult * 64 (shl 6 times) since each frame is 64 bytes +sis1 asl a ; shift the lo + rol dstPtrH ; and the hi, and move carry into hi if needed + dey ; do for all 6 iterations + bne sis1 + sta dstPtrL ; save the lo + lda dstPtrH ; get the hi + adc #>spriteInstances ; and make relative to the buffer + sta dstPtrH ; and save the hi + + lda #1 ; assume 4 frames equ 256 bytes + sta sizeH + lda spriteClass,x ; get the class + bit bit1Mask ; CLASS_FOUR_FRAME is it 4 frames + bne sis2 ; yes, all set + inc sizeH ; 8 frames = 512 bytes equ 2 Hi + +sis2 ldy instanceIdx1 ; get the instance + lda spriteColor,y ; and get the color for the instance + tay ; put the color index in y + lda masksLeft,y ; get the color mask + sta colMaskL1 + lda masksRight,y ; do the same for the right + sta colMaskR1 ; SQW - look at comments but save for second (inverse) buffer + + ldy #0 + sty dstIdx ; set the src and dst indices to start at 0 + sty srcIdx ; srcIndex moves at 1/2 of dstIndex + +copyFrames anop + ldy srcIdx ; get the source index + lda (srcPtrL),y ; get a (left) src byte at the source index + pha ; save so the right nibble can be expanded later + lsr a ; make the left nibble the low nibble + lsr a + lsr a + lsr a + tax ; put the value in x + lda binDouble,x ; look up the "pixel doubled" value + ora #$80 ; and set the color msb "on" + and colMaskL1 ; mask it with appropriate color + ldy dstIdx ; get the destination offset + sta (dstPtrL),y ; and save to instance destination + iny ; move the destination along one + pla ; get the source byte + and #$0f ; mask so only right nibble + tax ; put it in x + lda binDouble,x ; and look up the "doubled" pixel values + sec ; set carry so a rotate will be equiv to or #$80 + ror a ; and rotate, making it a "right" byte + and colMaskR1 ; mask it with appropriate color + sta (dstPtrL),y ; and save to instance destination + iny ; move the dest index along again + sty dstIdx ; and save the index + bne sis3 ; if the index rolled over + inc dstPtrH ; move the hi byte along + dec sizeH ; check if moved all required 4 * 32 src byte blocks + beq doneSis +sis3 inc srcIdx ; move the src index along + bne copyFrames ; do max 256 bytes equ 8 * 32 byte src frames + +doneSis anop + rts + + + +;----------------------------------------------------------------------------- +; Copy the door frame, invert the copy, mask both and combine +spriteDoorSetup entry + +originalFrame1 equ tmpBot+4 +newFrame1 equ tmpBot+5 + + ldx numSprites ; numSprites is the door sprite index + lda spriteFramesIdx,x + tax + stx originalFrame1 + inx + stx newFrame1 + jsr spriteCopyFrameToFrame ; make a copy y = instanceIdx, a = srcFrame,x equ dstFrame + + ldx newFrame1 + jsr spriteInvertFrame ; invert the instance frame bits (leave msb alone) + + ldx currLevel + lda door_color1,x + beq sds0 + ldx originalFrame1 + ldy #1 + jsr spriteApplyMaskToFrames + + ldx currLevel + lda door_color2,x + beq sds0 + ldx newFrame1 + ldy #1 + jmp spriteApplyMaskToFrames + +sds0 rts + + + +;----------------------------------------------------------------------------- +; Make 4 copies of Eugene frame 0 into frames 1-4 and apply a different +; color mask to the additional frames +spriteEugeneSetup entry + +originalFrame2 equ tmpBot+4 +newFrame2 equ tmpBot+5 +count1 equ tmpBot+6 + + ldx numSprites + dex ; eugene is sprite before the door + + lda spriteFramesIdx,x ; get the frame where eugene is + tax ; put in x + stx originalFrame2 ; and call it the original + inx ; and go to the next frame + stx newFrame2 ; and call it the new frame + ldx #3 ; and set the loop count to 3 + stx count1 +ses0 jsr spriteCopyFrameToFrame ; make a copy of eugene,x = ori,y equ new + + lda count1 ; get the count in a (as a color mask index) + ldx newFrame2 ; the frame in x + ldy #1 ; and the number of frames to process in Y + jsr spriteApplyMaskToFrames ; mask the new eugene to the "count" color + + inc newFrame2 ; go up a frame + dec count1 ; and dec the loop counter + bne ses0 ; and do for the number of loops (3) + + rts ; there are now 4 eugenes, White, Green, Orange & Purple + + end + diff --git a/src/text.asm b/src/text.asm new file mode 100644 index 0000000..1b7d514 --- /dev/null +++ b/src/text.asm @@ -0,0 +1,308 @@ +;----------------------------------------------------------------------------- +; text.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +TEXT start + + using LOWMEM + using ROSYSTEM + using ROFONT + using ROTEXT + using DATA + +;----------------------------------------------------------------------------- +textShowText entry + +xpos0 equ srcPtrL +ypos0 equ srcPtrH +rows equ sizeH +strIndex equ sizeL +color0 equ dstPtrL ; and H +fontL equ charGfx+1 +fontH equ charGfx+2 + + stx xpos0 + sty ypos0 + +loop0 anop + lda #0 + sta fontH ; init the pointer hi to 0 for later mult rol's + ldx strIndex ; get the index into the string + +read0 entry + lda PLACEHOLDER,x ; get the character in the string + sec + sbc #32 ; the font only starts at space (char 32 or $20) + beq tst0 + sbc #9 ; gap after space + asl a ; mult by 16 as that's how wide a char is in bytes + asl a + rol fontH + asl a + rol fontH + asl a + rol fontH ; srcPtr now points at the char but $0000 based +tst0 adc #font + sta fontH ; srcPtr now point at the actual character memory + + lda #8 ; font is 8 rows high + sta rows + ldy ypos0 ; start each character on the same line + +iLoop anop + lda strIndex ; strIndex is also col offset from xpos + asl a ; but font is 2 cols wide + adc xpos0 ; add the xpos to get screen col + adc rowL,y ; and add the row + sta write0+1 ; lo byte of where to write to screen buffer + lda currPageH ; get the hi page + adc rowH,y ; add the row + sta write0+2 ; and complete the screen buffer write address + + ldx #1 ; set up for copying 2 font bytes (1 char) +charGfx anop + lda PLACEHOLDER,x ; get the font +eorMask entry + eor #$00 ; eor to invert if necessary + and color0,x ; and to get the color needed +write0 anop + sta PLACEHOLDER,x ; and write to screen memory + dex ; go left a byte + bpl charGfx ; and repeat to do 2 bytes + dec rows ; done one of the 8 rows needed + beq nextChar ; repeat for all 8 rows, then done + iny ; more rows - next row in y + lda fontL ; move along 2 in the font + adc #2 + sta fontL + bcc iLoop + inc fontH + bcs iLoop ; BRA + +nextChar anop + dec strIndex ; string done from the back, so move left in string + bpl loop0 ; if not all of string done, loop + +;done0 anop + rts + +;----------------------------------------------------------------------------- +; Build a memory cache of the level name since this is re-drawn much more - +; every time the level scrolls left or right and copying from a cache is +; much faster than doing a text print +textSetLevelText entry + + lda #0 + sta sizeL ; index into string + sta read1+2 ; hi byte of string address + + lda currLevel ; start with the level + asl a ; multiply by 32 + asl a + asl a + asl a + rol read1+2 + asl a + rol read1+2 + adc #roTextLevel + adc read1+2 + sta read1+2 ; read+1 as a ptr now points at the string for this level + + lda #levelNameGfx0 + sta write1+2 + + lda #32 ; These strings are 32 characters wide + sta dstPtrL + +loop1 anop + lda #0 + sta srcPtrH ; init the pointer hi to 0 for later mult rol's + ldx sizeL ; get the index into the string +read1 anop + lda PLACEHOLDER,x ; get the character in the string + sec + sbc #32 ; the font only starts at space (char 32 or $20) + beq tsl0 ; gap after space + sbc #9 + asl a ; mult by 16 as that's how wide a char is in bytes + asl a + rol srcPtrH + asl a + rol srcPtrH + asl a + rol srcPtrH ; srcPtr now points at the char but $0000 based +tsl0 adc #font + sta srcPtrH ; srcPtr now point at the actual character memory + + lda #8 ; copy 8 rows / character + sta sizeH + ldy #1 ; start at the right hand side character +lrLoop anop + ldx #1 ; load x for the right hand side as well +copyLoop anop + lda (srcPtrL),y ; get the line pixel + eor #$7f ; invert +maskName anop + and maskGreen,x ; mask for color (always green but left vs right hand side) +write1 anop + sta PLACEHOLDER,x ; store to the cache + dey ; back up a byte + dex + bpl copyLoop ; do 2 bytes, right and left hand + lda write1+1 ; get the cache ptr low + clc +step anop + adc #64 ; step to the next line - 64 bytes along + sta write1+1 ; update the pointer + bcc tsl1 + inc write1+2 ; if it wrapped, update the hi byte +tsl1 iny ; y is now at minus 1 the last byte written + iny ; so advance it by 4 to get to the next right hand side byte + iny + iny + dec sizeH ; done one line + bne lrLoop ; if any lines left, keep going + + sec + lda write1+1 + sbc #<((64*8)-2) + sta write1+1 + lda write1+2 + sbc #>((64*8)-2) + sta write1+2 + clc + + inc sizeL ; move to the next character in the string + dec dstPtrL ; see if 32 characters were done + bne loop1 ; if not, keep going + +;done anop + rts + + + +;----------------------------------------------------------------------------- +; x has digit (5 means 1's, 4 means 10's, etc) +; a is the number to add 0..9 +textAddScore entry + + clc + adc score,x ; get the current digit + cmp #'9'+1 ; has it rolled over + bcc okay ; then simply increment + sec + sbc #10 + sta score,x ; and save over the 9 + lda #1 + dex ; previous digit + bmi over ; if it rolls over 999999 + cpx #1 ; if the digit is now the 010000 (1) + bne textAddScore ; no, then work with this digit + ldy lives + cpy #9 ; max out at 9 lives (keeps cheat boot on-screen) + bcs textAddScore + inc lives ; yes, then add a life + bne textAddScore ; and then work with this digit +okay anop + sta score,x ; and store it +over anop + lda #UI_COMPONENT_SCORE ; mark the score texts as needing an update + jmp uiUpdateComponent + +;done anop + rts + + + +;----------------------------------------------------------------------------- +textCheckHighScore entry + + ldx #0 ; start at the most significant digit +tch0 lda score,x ; get the score + cmp highScore,x ; compare to the high score + bcc done0 ; if smaller then highscore gt score + bne newHigh ; if ne then highscore gt score + inx ; digits equal so check next digit + cpx #6 ; compare x to max digits (+ 1) + bcc tch0 ; x is 5 or less, keep checking digits + +done0 anop + rts + +newHigh anop + ldx #5 ; copy the 6 score digits over the highscore digits +tch1 lda score,x + sta highScore,x + dex + bpl tch1 + lda #UI_COMPONENT_HIGHSCORE + jmp uiUpdateComponent + + + +;----------------------------------------------------------------------------- +textColorCycle entry + +color1 equ tmpBot+1 +xPos equ tmpBot+2 +yPos equ tmpBot+3 +textL equ tmpBot+4 +textH equ tmpBot+5 +len equ tmpBot+6 + +prntLoop anop +; printXYlh xPos,yPos,textL,textH,#0,color macro included here + ldx color1 ; this is an index into mask[Left|Right] + lda masksLeft,x + sta dstPtrL + lda masksRight,x + sta dstPtrL+1 + lda #0 ; eor o is not inverse + sta eorMask+1 ; set the eor in the code + lda textL ; set the string pointer in the code + sta read0+1 + lda textH + sta read0+2 + ldx #0 ; 0 based + stx sizeL + lda xPos ; and x/y coords in x and y registers + asl a + tax + ldy yPos + jsr textShowText ; print that string + + dec len ; one less character to color + beq done1 ; all characters done? + inc xPos ; move to the next character on screen + inc textL ; and move to the next character in the sting + bne tcc0 ; did the string wrap a buffer + inc textH ; yes, up the Hi +tcc0 dec color1 ; prev color + bpl tcc1 ; still ge 0 + lda #4 ; no, wrap to index 4 + sta color1 ; and save that as the color +tcc1 jmp prntLoop ;and print this character + +done1 anop + rts + + end + diff --git a/src/tiles.asm b/src/tiles.asm new file mode 100644 index 0000000..041f5d8 --- /dev/null +++ b/src/tiles.asm @@ -0,0 +1,443 @@ +;----------------------------------------------------------------------------- +; tiles.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +TILES start + + using LOWMEM + using ROSYSTEM + using ROLEVELS + +;----------------------------------------------------------------------------- +tilesPrepForLevel entry + + jsr tilesMakeInstances ; copy tile data to instance area + + lda monochrome ; see if the game should render for monochrome + beq color ; no, apply all masks +mono anop + ldy #(DATA_COLLAPSE/$10)-1 ; apply color mask only to the conveyor tile + ldx #((DATA_COLLAPSE/$10)-1) * + lda #1 + bne mask +color anop + ldy #0 + ldx #0 + lda #TILES_PER_LEVEL + +mask anop + jsr tilesColorInstances ; color instance tiles by applying appropriate color masks + jsr tilesPrepKeysTiles ; make animated keys from the key tile + jmp tilesPrepConveyorTiles ; Make rotated conveyor tiles into conveyorAnimTiles + + + +;----------------------------------------------------------------------------- +tilesMakeInstances entry + +numTiles equ sizeL +iLevelTile equ sizeH +iWrite equ dstPtrL +tileMemL equ srcPtrL +tileMemH equ srcPtrH + + lda #TILES_PER_LEVEL ; for all tiles used in a level + sta numTiles + + lda #TILE_BYTES-1 ; start at the end of tile memory + sta iWrite + + ldx currLevel ; find index into tile table + lda mult8,x ; 8 tiles per level + sta iLevelTile ; gives entry for the 1st tile + +loop0 anop + lda #0 ; set the hi for reading tile memory to 0 + sta tileMemH + + ldx iLevelTile ; get the index into the table + lda levelTiles,x ; and get the id for the tile from the table + + asl a ; mult tile offset * 16 (width of a tile) + asl a + asl a + rol tileMemH + asl a + rol tileMemH ; offset of tile start (from background) now in tileMem ptr + adc #ROTILES + adc tileMemH + sta tileMemH ; tileMem pointer now points at memory for the tile + + ldy #TILE_BYTES-1 ; 0 based, copy all the bytes of the tile + ldx iWrite + +tmi0 lda (tileMemL),y ; get the tile byte + sta tilesInstances,x ; and save it to instance 0 + dex ; back up the tile write pointer + dey ; and completed one byte + bpl tmi0 ; do for all bytes of a tile + + dec numTiles ; done a tile + beq copyDone ; see if all tiles done + + lda iWrite ; more tiles to do, adjust the tile write ptr + clc + adc #TILE_BYTES ; by moving it to the end of the next tile + sta iWrite + inc iLevelTile ; and advance the index into the table to the next tile + bne loop0 ; BRA to do the next tile + +copyDone anop + rts + + + +;----------------------------------------------------------------------------- +; Color tile instances +; IN: a-number of tiles to color +; y-index of first tile to color +; x-write address of first tile data (16 * y) +tilesColorInstances entry + +;numTiles equ sizeL +;iLevelTile equ sizeH +colMaskL equ dstPtrL+0 +colMaskR equ dstPtrL+1 +;tileMemL equ srcPtrL +;tileMemH equ srcPtrH + + sta numTiles ; save the register parameters + sty iLevelTile + + ldy currLevel ; get the offset of the tiles in the level tile table + lda mult8,y + clc + adc iLevelTile ; and add the parameter offset (0 for color and 3 for mono) + sta iLevelTile + +loop1 anop + ldy iLevelTile ; get the index + lda levelMasks,y ; and extract the masks for this tile + tay + lda masksLeft,y + sta colMaskL + lda masksRight,y + sta colMaskR + + ldy #(TILE_BYTES/2) ; 2 masks at one time, so bytes/2 +tci0 lda colMaskL ; instance 0 mask the left side with a left mask + and tilesInstances,x + sta tilesInstances,x + + inx ; next byte + + lda colMaskR ; instance 0 mask the right side with a right mask + and tilesInstances,x + sta tilesInstances,x + + inx ; next byte + + dey ; one more column done + bne tci0 ; keep going till all columns done + + inc iLevelTile ; go to the next table entry + dec numTiles ; done one more tile + bne loop1 ; keep going till all tiles done + + rts + + + + +;----------------------------------------------------------------------------- +tilesPrepKeysTiles entry + +keyByte equ tmpBot+0 + + lda #4 ; init the key animation to frame 4 + sta keysFrameNum + + ldy #0 ; start at the 1st key byte + +maskLoop anop + lda tilesInstances+DATA_KEY-TILE_BYTES,y + sta keyByte ; get a byte and save it + + clc + ldx #4 ; make 4 color variations +colorLoopLeft anop + lda keyByte ; start with the white key byte + and masksLeft,x ; mask it for left + sta keyAnimTiles,y ; and save it to the first key frame instance 0 + + tya ; move y along to the next key instance + adc #TILE_BYTES + tay + dex ; and do the next color for that instance + bne colorLoopLeft ; repeat for all 4 color frames + tya ; move Y back 63 bytes, to the next white key byte + sec + sbc #63 + tay + + lda tilesInstances+DATA_KEY-TILE_BYTES,y + sta keyByte ; get the second (right hand byte) + + clc + ldx #4 ; repeat the above but swap color masks +colorLoopRight anop + lda keyByte + and masksRight,x + sta keyAnimTiles,y + + tya + adc #TILE_BYTES + tay + dex + bne colorLoopRight + + tya + sec + sbc #63 + tay ; y is now pointing at the next left byte + cpy #TILE_BYTES ; see if the whole key has been processes + bne maskLoop + + rts + + + +;----------------------------------------------------------------------------- +; Makes animated copies of the conveyor tile. Instead of making full tile +; copies, this should really just do the two lines affected (so use 1 tile +; of memory, not 7 * TILE_BYTES) +tilesPrepConveyorTiles entry + +frame equ sizeL +count equ sizeH +dir equ tmpBot+0 +carry equ tmpBot+1 + + lda #6 ; init the conveyor frame counter + sta conveyorFrameNum + + ldx currLevel + lda conveyorDirections,x ; get a local copy of the conveyor direction + sta dir + + clc ; point srcPtr at the conveyor tile + lda #DATA_CONVEYOR-TILE_BYTES + sta srcPtrL + lda #>tilesInstances + sta srcPtrH + + lda #conveyorAnimTiles + sta dstPtrH + + ldy #TILE_BYTES-1 ; copy the tile to the animated tiles +tpc0 lda (srcPtrL),y + and #$7F ; clear the MSB, will be fixed later + sta (dstPtrL),y + dey + bpl tpc0 + + ldy #CONVEYOR_FRAMES-1 ; set a counter for how many frames to process + +processTile anop + sty frame + + clc ; move srcPtr to dstPtr (the new src) + lda dstPtrL ; and move dstPtr to the next frame to animate + sta srcPtrL + adc #TILE_BYTES + sta dstPtrL + lda dstPtrH + sta srcPtrH + bcc tpc1 + inc dstPtrH +tpc1 ldy #TILE_BYTES-1 ; process a tile's bytes (0 based) +tpc2 lda (srcPtrL),y ; copy the source + sta (dstPtrL),y ; save to the dest + dey ; copy the whole tile + bpl tpc2 + + lda dir ; different algorithm for each direction + cmp #2 + beq left + +right anop + ldy #0 ; top row + jsr shiftLeft ; move "left" which is "wrong", the processing is going 0..CONVEYOR_FRAMES + ldy #4 ; 3rd row down, 0 based (2) * 2 byes/row is 4 + jsr shiftRight ; but the animation plays back CONVEYOR_FRAMES..0 + jmp nextFrame ; so this is all reversed + +left anop + ldy #0 + jsr shiftRight + ldy #4 + jsr shiftLeft + +nextFrame anop + ldy frame + dey ; another frame processed + bne processTile ; have all tiles been animated (0 is original the rest shifted) + + jmp finalFix ; fix the MSB + +shiftRight anop + lda (dstPtrL),y ; left byte scroll right (apple pixels are reversed, so asl a) + asl a ; shift msb away, bit 0 clear + asl a ; shift 1/2 a pixel, bit 1 and 0 clear + sta (dstPtrL),y ; save left shifted. carry has a pixel bit that needs to move + + iny + lda (dstPtrL),y + rol a ; shift right byte once, carry goes in, MSB bit out in carry + asl a ; shift second time, bit 0 is now a zero, carry bit needs moving left + sta (dstPtrL),y + + dey + lda #0 ; start fresh + rol a ; move carry into bit 0 + asl a ; carry into bit 1, carry clear, bit 0 now 0 + ora (dstPtrL),y ; add bit 1 to the left byte + sta (dstPtrL),y ; save the left byte + and #$80 ; extract bit 8 left that should be in right bit0 + asl a ; put bit 8 in carry and acc now clear + rol a ; put bit 8 in bit 0 + iny + ora (dstPtrL),y ; add it to the right byte + sta (dstPtrL),y ; store the right byte + and #$80 ; extract bit 8 right which should be bit 0 left + asl a ; move into carry + rol a ; move carry into bit 0, carry now clear + dey + ora (dstPtrL),y ; add to bit0 of left byte + sta (dstPtrL),y ; and save + + rts + +shiftLeft anop + ldx #1 + lda (dstPtrL),y ; get left byte +tpc3 lsr a ; move bit out + sta (dstPtrL),y ; save byte + + lda #0 ; move bit in for next byte to bit 6 + ror a + lsr a + sta carry + iny + lda (dstPtrL),y + ror a ; move right byte one over (carry needs to go left now) + ora carry ; add bit from left + sta (dstPtrL),y ; save + lda #0 ; start fresh + ror a ; move carry to bit 6 + lsr a + dey + ora (dstPtrL),y ; add to left byte + dex + bpl tpc3 + sta (dstPtrL),y ; save + + rts + +finalFix anop + ldy #(CONVEYOR_FRAMES*TILE_BYTES)-1 + lda tilesInstances+(DATA_CONVEYOR-TILE_BYTES) + and #$80 ; load a byte from original + beq clear ; and see if color bit is set +tpc4 lda #$80 ; if set, set color on for all frames + ora conveyorAnimTiles,y + sta conveyorAnimTiles,y + dey + bpl tpc4 + bmi done + +clear anop + lda #$7f ; if not set, make sure color isn't on for all + and conveyorAnimTiles,y + sta conveyorAnimTiles,y + dey + bpl clear + +done anop + rts + + + +;----------------------------------------------------------------------------- +; Copy a pre-animated key tile into the tilesInstances so it looks as +; though the key is animating +tilesAnimateKeys entry + + ldx keysFrameNum ; get the frame + dex ; step + bpl tak0 ; underflow + ldx #3 ; reset-frames are 0 to 6, but go to render+1 +tak0 stx keysFrameNum ; save the new frame + inx ; go one frame past + lda mult16,x ; get the byte offset to the frame + tax ; put it in x + dex ; and go to the last byte of the frame needed + + ldy #TILE_BYTES-1 ; set y to copy a whole tile + +tak1 lda keyAnimTiles,x ; read the frame and write to key tile + sta tilesInstances+DATA_KEY-TILE_BYTES,y + dex + dey + bpl tak1 + + rts + + + +;----------------------------------------------------------------------------- +; Copy a pre-animated conveyor lines over the lines in the conveyor frame tile, +; in the tilesInstances area +tilesAnimateConveyor entry + + ldx conveyorFrameNum ; get the frame + dex ; step + bpl tac0 ; underflow + ldx #6 ; reset-frames are 0 to 6, but go to render+1 +tac0 stx conveyorFrameNum ; save the new frame + lda mult16,x ; get the byte offset to the frame + tax ; put it in x + + lda conveyorAnimTiles,x ; copy the 4 animated bytes for + sta tilesInstances+DATA_CONVEYOR-TILE_BYTES + + inx + lda conveyorAnimTiles,x ; instance 0 over + sta tilesInstances+DATA_CONVEYOR-TILE_BYTES+1 + + inx ; to the tile area 0 + inx + inx + lda conveyorAnimTiles,x + sta tilesInstances+DATA_CONVEYOR-TILE_BYTES+4 + + inx + lda conveyorAnimTiles,x + sta tilesInstances+DATA_CONVEYOR-TILE_BYTES+5 + + rts + + end + diff --git a/src/ui.asm b/src/ui.asm new file mode 100644 index 0000000..2daad4f --- /dev/null +++ b/src/ui.asm @@ -0,0 +1,449 @@ +;----------------------------------------------------------------------------- +; ui.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + mcopy src/ui.mac + +UI start + + using ROSYSTEM + using RODATA + using ROTEXT + using DATA + +;----------------------------------------------------------------------------- +uiUpdateComponent entry + + ora uiComponent + sta uiComponent + lda #2 + sta updateUICount + + rts + + + +;----------------------------------------------------------------------------- +uiUpdate entry + + lda uiComponent + + bit bit0Mask ; UI_COMPONENT_NAME + beq ud00 + jsr screenDrawLevelName + lda uiComponent +ud00 bit bit1Mask ; UI_COMPONENT_AIR_NAME + beq ud01 + printXYlh #0,#(17*8),#roTextAir,#4,#2,1 + jsr screenDrawAirFrame + lda uiComponent +ud01 bit bit2Mask ; UI_COMPONENT_AIR + beq ud02 + jsr screenDrawAirRemaining + lda uiComponent +ud02 bit bit3Mask ; UI_COMPONENT_SCORE_NAME + beq ud03 + printXYlh #4,#(19*8),#roTextHighScore,#3 + printXYlh #11,#(19*8),#roTextScore,#4 + lda uiComponent +ud03 bit bit4Mask ; UI_COMPONENT_SCORE + beq ud04 + printXYlh #11,#(20*8),#score,#5 + lda uiComponent +ud04 bit bit5Mask ; UI_COMPONENT_LIVES + beq ud05 + jsr screenDrawLives + lda uiComponent +ud05 bit bit6Mask ; UI_COMPONENT_HIGHSCORE + beq ud06 + printXYlh #3,#(20*8),#highScore,#5 +ud06 dec updateUICount + bne ud07 + lda #0 + sta uiComponent +ud07 rts + + + +;----------------------------------------------------------------------------- +; 28209 cycle delay from start till after rts +uiDelay entry + + ldy #$80 +ySet entry + ldx #0 +udl0 dex + bne udl0 + dey + bne udl0 + + rts + + + +;----------------------------------------------------------------------------- +; This routine shows the MANIC and MINER text on screen. +; the macro uiShowMMTextXY puts specific values appropriate for each right +; into the routine (such as the address of the character width array) +; The Manic & Miner words are stored in a "compressed" form, this also decodes +; that. Each letter "pixel" is stored as a bit. +uiShowMMText entry + +row equ srcPtrL +col equ srcPtrH +offset equ dstPtrL +index equ dstPtrH +colMaskL equ sizeL +colMaskR equ sizeH +width equ tmpBot+0 +height equ tmpBot+1 +dataByte equ tmpBot+2 +dr equ tmpBot+3 +dc equ tmpBot+4 +dw equ tmpBot+5 +pr equ tmpBot+6 + + sty row + stx col + lda #0 + sta offset + sta index + +strLoop anop + ldx index +colorLoc entry + lda PLACEHOLDER,x ; unpack the color masks + tay + lda masksLeft,y + sta colMaskL + lda masksRight,y + sta colMaskR + lda #6 ; the text is 6 rows high + sta height + lda row + sta dr ; set the working counter to the row + +charLoop anop + lda col + sta dc ; set the working counter to the column + ldx index ; get the index to the character in the string +widthLoc entry + lda PLACEHOLDER,x ; get the width of the character + sta width ; save + sta dw ; and init the working width + ldx offset ; the offset is into the encoded data +dataLoc entry + lda PLACEHOLDER,x ; get the next encoded character + inc offset ; and move the index + sta dataByte ; save the character +colLoop anop + lda dataByte ; load the character + asl a ; shift out the MSB to get the bit + sta dataByte ; save the new shifted encoded character + bcc skipPlot ; if bit was 0, blank, nothing to do + lda #8 ; 1-bit to be drawn. "pixel" is 8 pixel-rows high + sta pr ; save row draw counter + lda dr ; load the screen draw row where drawing should happen + asl a ; * 8 + asl a + asl a + tay ; store the row in Y + lda dc ; get the column + and #1 ; and see if the column is odd or even (for color mask) + tax +usm0 lda dc ; start with the column + adc rowL,y ; and calculate the hi-res row/col address + sta write+1 + lda rowH,y + adc currPageH ; add the page to draw to + sta write+2 + lda #$ff ; assume all bits on + and colMaskL,x ; but then mask to get appropriate color +write anop + sta PLACEHOLDER ; write to the screen + iny ; next hi-res pixel-row + dec pr ; and one less row to draw + bne usm0 ; do all 8 rows + +skipPlot anop + inc dc ; go to the next column + dec dw ; one less to do in the width of the character + bpl colLoop ; if not done the whole character, keep going + inc dr ; move down to the next row of the character + dec height ; one less row to do + bpl charLoop ; keep going till the whole character height done + lda width ; move the draw col by the width of the character just drawn + clc + adc col + sta col + inc index ; and move the string index to the next character + lda index + cmp #6 + bcc strLoop ; if not all 5 characters (MANIC or MINER) done, keep going + + rts + + + +;----------------------------------------------------------------------------- +uiTitleScreen entry + +scrollPtrL equ 0 ;tmpBot+0 +scrollPtrH equ 1 ;tmpBot+1 +scrollLen equ 2 ;tmpBot+2 +scrollIdx equ 3 ;tmpBot+3 +titleState equ 4 ;currLevel + + + lda #0 + sta leftEdge ; reset the left edge + + lda #11*8 ; position willy for the UI + sta willyYPos + lda #0 + sta willyFrame + lda #18 + sta willyXPos + + lda #titleMusic + sta musicH + + ldx #1 ; do a full screen clear of both buffers + jsr screenClear + jsr screenSwap + ldx #1 + jsr screenClear + + lda #0 + sta titleState ; set to bounce manic miner / audio + sta uiComponent ; and init the ui update to nothing + lda #UI_COMPONENT_SCORE_NAME+UI_COMPONENT_SCORE+UI_COMPONENT_HIGHSCORE + jsr uiUpdateComponent ; add an update for bottom part of screen + + jsr screenDrawWilly ; show willy on this screen + uiShowMMTextXY #6,#6,manicText,manicCharWidth,manicColors + printXYlh #0,#22*8,#roTextAppleIIVersion,#19 + printXYlh #0,#23*8,#roTextend,#19 + jsr uiUpdate ; show the UI on the Manic screen + jsr screenSwap + + jsr screenDrawWilly ; show willy on the other screen + uiShowMMTextXY #6,#6,minerText,minerCharWidth,minerColors + printXYlh #0,#22*8,#roTextAppleIIVersion,#19 + printXYlh #0,#23*8,#roTextend,#19 + jsr uiUpdate ; show the UI on the Miner screen + + lda KBDSTRB + +mainLoop anop + jsr screenSwap ; swap screens (manic/miner) or scroll text + jsr inputUI ; read keys -1 - quit, 0 - no key, 1 - go to game + beq stayInUI ; no key + bpl playGame ; go to game + lda #EVENT_EXIT_GAME ; quit + bne exit +playGame anop + lda #EVENT_OK +exit anop + jmp done + +stayInUI anop + lda titleState ; get the state (bounce vs scroll) + beq bounce + jmp introScroll ; 0 - bounce, 1 - scroll + +bounce anop + jsr audioPlayTitleNote ; play the tune + bcc mainLoop ; tune done when carry is set, else bounce + + lda #2 + sta titleState ; use this as a temporary counter +uts0 ldx #0 ; clear the upper portion of the screen + jsr screenClear ; show both manic & miner + uiShowMMTextXY #6,#0,manicText,manicCharWidth,manicColors + uiShowMMTextXY #6,#8,minerText,minerCharWidth,minerColors + jsr screenDrawWilly ; show willy as well + + jsr screenSwap + dec titleState ; do for both buffers + lda titleState + bne uts0 + + lda #1 ; set the state to the scrolling screen + sta titleState + + lda #roTextIntro + sta scrollPtrH + lda #0 + sta scrollLen + lda #19 + sta scrollIdx + +introScroll anop ; show the scrolling message + ldy willyYPos ; start by erasing willy so the eor draw works + lda #16 ; 16 rows from his Y + sta sizeL ; track rows in sizeL +uts1 clc + lda willyXPos ; start with his X + asl a ; * 2 for screen coordinates + adc rowL,y ; get the hires coordinates + sta writeZero+1 + lda rowH,y + adc currPageH + sta writeZero+2 + lda #0 ; write 4 zero-bytes to each row + ldx #3 +writeZero anop + sta PLACEHOLDER,x + dex + bpl writeZero + iny ; next hi-res row + dec sizeL ; one more row done + bne uts1 + + lda willyFrame ; get the current frame + clc + adc #2 ; advance by 2 + and #7 ; and keep in the frame range + sta willyFrame ; update the frame + jsr screenDrawWilly ; and draw willy in the new pose + +;sqw printXYlh scrollIdx, #16*8, scrollPtrL, scrollPtrH, scrollLen + + lda #$ff ; no color (white) is a mask of $ff left and right + sta dstPtrL + sta dstPtrL+1 + lda #0 ; eor o is not inverse + sta eorMask+1 ; set the eor in the code + + lda scrollPtrL ; set the string pointer in the code + sta read0+1 + lda scrollPtrH + sta read0+2 + ldx scrollLen ; 0 based + stx sizeL + lda scrollIdx ; and x/y coords in x and y registers + asl a + tax + ldy #16*8 + jsr textShowText ; print that string + + lda scrollIdx ; see if scrolled all the way into the screen + beq uts2 ; if printing at 0, then scrolled all the way in + dec scrollIdx ; not scrolled in all the way, so move the start left + inc scrollLen ; and increase the length to print by 1 + bne uts3 ; and skip moving the start of the message +uts2 inc scrollPtrL ; move the scroller so the left disappears off + bne uts3 ; the left end of the screen + inc scrollPtrH +uts3 jsr uiDelay ; wait a bit so the message can be read + + ldy scrollLen ; see if this is the end of the message + lda (scrollPtrL),y + bne uts4 ; if not a zero, still in message + dec scrollLen ; start printing less of the message so the tail scrolls across + bmi demoTime ; when completely done, go to demo mode +uts4 jmp mainLoop ; repeat till fully scrolled + +demoTime anop + lda #DEMO_TIMER_INITAL ; set up the demo variables + sta demoTimer + lda #1 + sta demoDirection + +done anop + sta demoMode + rts + + + +;----------------------------------------------------------------------------- +uiWaitForIntroEnter entry + +iter equ tmpBot+0 ; how many times to loop +color equ tmpBot+1 ; the starting color for the string +xPos equ tmpBot+2 ; x for string +yPos equ tmpBot+3 ; y for string +textL equ tmpBot+4 ; string pointer +textH equ tmpBot+5 +len equ tmpBot+6 ; how many characters (0 based) + + lda KBDSTRB ; clear the keyboard + + jsr valueSwap + printXYlh #0,#22*8,#roTextPressEnter,#19 + lda #$28 ; intentionally outside the range + sta color ; it gives an interesting "materialize" effect + lda #22*8 + sta yPos + +cycleLoop anop + lda #6 ; print ENTER at x 4 + sta xPos + lda #roTextEnter + sta textH + lda #5 + sta len + jsr textColorCycle ; show the text in color + ldy #$40 + jsr ySet + + lda KBD ; hold the load screen graphic till a key is pressed + bpl cycleLoop + + lda KBDSTRB ; clear the keyboard + jsr valueSwap + + ldx #1 ; for clear-screen,x = 1 is all clear,x equ 0 is partial + jsr screenClear + jsr screenSwap ; swap to see page 1 + ldx #1 + jmp screenClear ; all clear page 2 + + end + +;----------------------------------------------------------------------------- +RODATA data + +manicText anop + dc h'88D8A888880000' + dc h'00708888F88800' + dc h'88C8A898880000' + dc h'0000E0404040E0' + dc h'00708880887000' + +manicCharWidth anop + dc h'0606060405' + +manicColors anop + dc h'0201000304' + +;----------------------------------------------------------------------------- +minerText anop + dc h'000088D8A88888' + dc h'E0404040E00000' + dc h'0088C8A8988800' + dc h'F880F880F80000' + dc h'0000F088F0A098' + +minerCharWidth anop + dc h'0604060605' + +minerColors anop + dc h'0304020100' + + end + diff --git a/src/variables.asm b/src/variables.asm new file mode 100644 index 0000000..6df6932 --- /dev/null +++ b/src/variables.asm @@ -0,0 +1,48 @@ +;----------------------------------------------------------------------------- +; variables.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- +;.segment "LOWMEM" + + copy src/defs.s + +; These are instance buffers for sprites / tiles. They are copied into this +; area and then masked for color from where they are rendered +LOWMEM data + +levelLayout gequ $0800 +levelLayoutEnd gequ levelLayout+PLAY_COLS*PLAY_ROWS ; Unpacked level (tile) info - keep 1st for alignment + +; Instances for display +spriteInstances gequ levelLayoutEnd ; Instances of sprite data in a level +spriteInstancesEnd gequ spriteInstances+MAX_SPRITE_IFRAMES*SPRITE_BYTES + +tilesInstances gequ spriteInstancesEnd ; instances of tiles in use bitmaps +tilesInstancesEnd gequ tilesInstances+TILES_PER_LEVEL*TILE_BYTES + +keyAnimTiles gequ tilesInstancesEnd ; color instances of key tile +keyAnimTilesEnd gequ keyAnimTiles+KEYS_FRAMES*TILE_BYTES + +conveyorAnimTiles gequ keyAnimTilesEnd ; instances of conveyor animated tiles +conveyorAnimTilesEnd gequ conveyorAnimTiles+CONVEYOR_FRAMES*TILE_BYTES + +; cache of 8 pixel-rows for 32 double-byte characters. The level name is centered in here, and drawn from here +levelNameGfx0 gequ conveyorAnimTilesEnd +levelNameGfx0End gequ levelNameGfx0+PLAY_COLS*2*8 + + end + +;----------------------------------------------------------------------------- +;.segment "DATA" + +DATA data +; The scores are updated in these text strings directly +highScore dc c'000000' +score dc c'000000' + + end + diff --git a/src/willy.asm b/src/willy.asm new file mode 100644 index 0000000..ec02590 --- /dev/null +++ b/src/willy.asm @@ -0,0 +1,533 @@ +;----------------------------------------------------------------------------- +; willy.inc +; Part of manic miner, the zx spectrum game, made for Apple II +; +; Stefan Wessels, 2020 +; This is free and unencumbered software released into the public domain. + +;----------------------------------------------------------------------------- + 65816 OFF + + copy src/defs.s + +WILLY start + + using LOWMEM + using ROSYSTEM + using ROLEVELS + +;----------------------------------------------------------------------------- +; Moves willy. Incorporates user desire (userKeyMask) and conveyor direction +; in movement and does movement and collision resolution. This code was juggled a +; whole lot to make the outcome match that of the original game. It's quite +; possibly sub-optimal, but it does what it is meant to do. +willyMove entry + +willyYPosBackup equ tmpBot+1 +willyXPosBackup equ tmpBot+2 +willyFrameBackup equ tmpBot+3 +willyFloor equ tmpBot+4 + + lda movementMask + bit bit2Mask ; MASK_AIR + beq checkHorzKeys ; on ground - check horizontal keys + jmp selectDirection ; in air - check horizontal motion + +checkHorzKeys anop + lda userKeyMask ; get the user Key + ldx conveyorMask ; and get the conveyor direction + beq notOnConveyor ; ignore conveyor code if not on a conveyor + + and conveyorMask ; and user desire with conveyor + bne onConveyor ; if same, user conveyor direction for actual + lda userKeyMask ; get the user mask and + and #$FB ; <~MASK_AIR ; if it's got no horizontal component + beq onConveyor ; willy is following the conveyor + + lda movementMask ; user key horiz and not same as conveyor + jmp selectDirection ; so simply keep the current movement going + +onConveyor anop + lda movementMask ; actual is now conveyor direction + and #$FC ;<~(MASK_LEFT | MASK_RIGHT) ; clear current + ora conveyorMask ; add conveyor direction + sta movementMask ; store as actual + jmp selectDirection ; use the conveyor for sideways + +notOnConveyor anop + and #$FB ; <~MASK_AIR ; clear the jump desire + sta movementMask ; make actual user desire + +selectDirection anop + and #3 ;(MASK_LEFT | MASK_RIGHT) ; see if willy is moving horizontally + bne wm00 ; yes - handle horizontal movement + jmp vertical +wm00 and #MASK_RIGHT ; check MASK_RIGHT + bne right ; if set, move to the right + +left anop + lda willyDir ; see if already heading left + bne moveLeft ; if so, keep moving left + lda #0 ; when turning, no direction + sta movementMask + lda #1 ; was facing right, so turn around + sta willyDir + lda willyFrame ; flip the facing frame to left + ora #4 + sta willyFrame + bne vertical + +moveLeft anop + ldx willyFrame ; get the frame + stx willyFrameBackup ; back it up + dex ; move one left + cpx #4 ; wrapped? + bcc wm01 ; yes, move to previous column + stx willyFrame ; not wrapped, save the frame + bcc wm01 + jmp vertical +wm01 ldx #7 ; keep going, load right most frame + stx willyFrame ; set frame + ldx willyXPos ; get the column + stx willyXPosBackup ; save it + dex ; previous column + stx willyXPos ; make that current + ldy #0 ; check side (left) collisions column + beq hCollision ; BRA + +right anop + lda willyDir ; see if willy's already facing right + beq moveRight ; if so, move + lda #0 ; turn willy to the right + sta willyDir + sta movementMask ; and clear the movement mask + lda willyFrame + and #3 ; set right facing frame + sta willyFrame + jmp vertical + +moveRight anop + ldx willyFrame ; back up the animation frame + stx willyFrameBackup + inx ; next frame (to the right) + cpx #4 ; wrapped? + bcs wm02 ; yes, move to next (right) column + stx willyFrame ; save the frame + bcc vertical +wm02 ldx #0 + stx willyFrame ; set frame 0 + ldx willyXPos ; back up the column + stx willyXPosBackup + inx ; move right + stx willyXPos ; save this column + ldy #1 ; check the right-hand column for collisions + +hCollision anop + jsr willySetWorldPtr ; set up the world pointer to check collisions + ldx #2 ; assume checking 2 rows + lda willyYPos ; get the height in pixels + and #7 ; see if willy is aligned + beq colLoop ; yes, go with 2 rows + inx ; if not aligned, willy crosses 3 rows +colLoop anop + lda (srcPtrL),y ; load the world byte + beq wm03 ; if air then no collision + jsr willyWorldCollision ; resolve the collision if needed + bcc wm03 ; if carry clear, can move (didn't hit a wall) + lda willyXPosBackup ; hit a wall, so restore position (column) + sta willyXPos + lda willyFrameBackup ; and also restore the frame + sta willyFrame + jmp vertical +wm03 tya ; Y is 0 or 1 (left or right), put in a + adc #32 ; move down a row + tay ; and put back in y + dex ; x has the number of rows remaining to check + bne colLoop ; do till all rows checked + +vertical anop + lda movementMask + bit bit2Mask ; MASK_AIR + bne vertMove ; in the air already then move vertically + + lda userKeyMask ; get the user desire + bit bit2Mask ; MASK_AIR see if user wants to jump + beq willyCollisionFeet ; if not then check feet + + and #$FB ; <~MASK_AIR ; clear jump from desire + sta userKeyMask ; and save + + lda movementMask ; update actual + ora #MASK_AIR ; by adding a jump + sta movementMask + + lda #1 ; mark this as a fall starting + sta willyFallFromJump ; from a jump - willy dies easier + +vertMove anop + lda willyYPos ; save the current Y position + sta willyYPosBackup + + lda willyJumpCounter ; get the current jump counter for height calculation + cmp #18 ; see sbc #4 below for why 18 (up/down curve length) + bcs falling ; if jump counter gt 17 then falling (0-17 is jump) + + lsr a ; / 2 + sec + sbc #4 ; -4, so -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 + clc + adc willyYPos ; adjust willy height + sta willyYPos + + ldx willyJumpCounter ; get the current jump counter for height calculation + lda jumpFreq,x + ldy #$08 ; duration for the freq + jsr freq ; make a sound of this freq and duration + inc willyJumpCounter + + lda willyJumpCounter + cmp #9 + bcs willyCollisionFeet ; and move the jump counter along + +willyCollisionTop anop + lda willyYPosBackup ; see where willy was + and #7 ; if aligned with a row, now entering a new row so check collision + bne willyCollisionFeet ; not aligned, no collision, go to feet check + jsr willySetWorldPtr ; set the srcPtr to point into the world + ldy #0 ; start with the head left + lda (srcPtrL),y ; read the world byte + beq wm04 ; if air then do nothing + jsr willyWorldCollision ; not air so handle the potential collision + bcs hitHead ; carry set means wall collision, so fall +wm04 ldy #1 ; check the right as well + lda (srcPtrL),y + beq willyCollisionFeet ; if air, ignore + jsr willyWorldCollision + bcc willyCollisionFeet ; carry clear means no collision + +hitHead anop + lda willyYPosBackup + sta willyYPos + lda #18 + sta willyJumpCounter + jmp willyCollisionFeet ; and check for landing immediately + +falling anop + lda willyJumpCounter ; get the current jump counter for height calculation + and #$0f + tax + lda fallFreq,x + ldy #$08 ; duration for the freq + jsr freq ; make a sound of this freq and duration + inc willyJumpCounter ; and move the jump counter along + + lda movementMask ; strip horizontal from actual + and #$FC ; <~(MASK_LEFT | MASK_RIGHT) + sta movementMask + lda willyYPos ; get willy's height + clc + adc #4 ; move him 4 down (fall speed) + sta willyYPos + +willyCollisionFeet anop + lda #0 ; assume not on a conveyor + sta conveyorMask + + lda willyYPos ; see if willy is level with a floor + and #7 + bne positionScreen ; if not, don't check the feet + + lda willyJumpCounter ; see if still going up in jump + beq wm05 ; if 0 then not jumping + cmp #10 ; if still going up in the jump, don't check the feet + bcc positionScreen + +wm05 jsr willySetWorldPtr ; set up the world pointer + ldy #64 ; check the ground below willy, left + lda (srcPtrL),y + sta willyFloor ; store the byte + beq wm06 ; if air, don't resolve + jsr willyFloorCollision ; resolve the collision +wm06 ldy #65 ; check the floor right + lda (srcPtrL),y + beq checkFloor ; if air, done with feet + tax ; save the byte + ora willyFloor ; and update the floor + sta willyFloor + txa ; restore the world byte + jsr willyFloorCollision ; and resolve it + +checkFloor anop + lda willyFloor ; was there something under willy's feet + bne positionScreen ; if yes, then position willy + + lda willyJumpCounter ; see if willy is in a jump or fall + bne positionScreen ; yes, position screen + + lda #18 ; willy was walking, so set him to fall + sta willyJumpCounter + lda movementMask ; strip horizontal from actual + and #$FC ; <~(MASK_LEFT | MASK_RIGHT) ; clear left and right + ora #MASK_AIR ; set the mask that he's now in the air (fall) + sta movementMask + + +positionScreen entry ; this is also called from gameInitStage + lda cameraMode ; see which "camera mode" is active + bne cameraScroll ; non zero is scroll mode + +camera3Zone anop ; zone 1: 0-19, 2: 6-25, 3: 12-31 + lda willyXPos ; see where Willy is + cmp #10 ; 10 divides zones 1 and 2 + bcs zone2or3 ; ge 10 means zone 2 or 3 + lda leftEdge ; zone 1 - see where the edge is + cmp #0 ; if it's at 0 all is well + beq done0 +cameraLess anop + dec leftEdge ; edge is gt 0, so move it left + bpl moveName ; BRA +zone2or3 anop + cmp #20 ; 20 divides zones 2 and 3 + bcs cameraRight ; ge 20 means zone 3 + lda leftEdge ; see where the edge is (in zone 2) + cmp #6 ; zone 2 edge wants to be at 6 + beq done0 ; if it's there, all is well + bcs cameraLess ; if it's gt 6, then move it left + inc leftEdge ; move the edge right + bne moveName ; BRA +cameraRight anop + lda leftEdge ; zone 3, see where the edge is + cmp #$0c ; if it's at 12 + beq done0 ; then it's all good + inc leftEdge ; otherwise move it right towards 12 + +moveName anop ; if the edge moves the text needs to move as well + lda #UI_COMPONENT_NAME ; and mark the name as needing to scroll too + jsr uiUpdateComponent + + rts + +cameraScroll anop + lda willyXPos + sec ; col is in accumulator + sbc #$0a ; see if willy is past column 10 + bcs wm07 + lda #0 ; not, so set the left edge to the left + bne wm08 ; BRA +wm07 cmp #$0d ; see if the col is less than 13 + bcc wm08 + lda #$0c ; col is 13 or greater, so clamp to 12 +wm08 cmp leftEdge ; see if the edge needs to move + beq done0 ; don't move + sta leftEdge ; set the new left edge + lda #UI_COMPONENT_NAME ; and mark the name as needing to scroll too + jsr uiUpdateComponent +done0 anop + rts ; done with willy's movement + + + +;----------------------------------------------------------------------------- +; resolves collisions for willy. Used by feet but foot collision entry is +; from willyFloorCollision. on exit, carry set means wall collision +willyWorldCollision entry + + clc + cmp #DATA_BUSH ; bushes kill willy + beq willyDies + cmp #DATA_ROCK ; rocks kill willy + bne wwc0 + +willyDies entry + lda #EVENT_DIED ; simply set the die event + ora eventState + sta eventState + rts + +wwc0 cmp #DATA_WALL ; walls block willy + bne wwc1 + rts ; carry was set by the cmp and equality. set means wall collision + +wwc1 cmp #DATA_KEY ; key's need to be counted + bne wwc2 + jmp willyHitKey ; clears carry + +wwc2 cmp #DATA_DOOR ; added dynamically when last key found + bne wwc3 + lda #EVENT_NEXT_LEVEL ; set event to move to next cavern/level + ora eventState + sta eventState + rts + +wwc3 cmp #DATA_SWITCH1 ; added at level init for kong screens + bne wwc4 + jmp willyHitSwitch1 + +wwc4 cmp #DATA_SWITCH2 ; added at level init for kong screens + bne done1 + jmp willyHitSwitch2 + +done1 anop + clc ; for unhandled (floor tiles), just clear carry + rts + + + +;----------------------------------------------------------------------------- +willyFloorCollision entry + + cmp #DATA_FLOOR1 ; floors are landed on + beq landed + + cmp #DATA_WALL ; walls can be walked on + beq landed + + cmp #DATA_FLOOR2 ; special can be walked on + bne wfc0 + +landed anop + lda movementMask ; see landing from a jump/fall + and #MASK_AIR + beq notFromAir ; just a foot-fall from walking, no action + clc + lda willyFallFromJump ; see if a jump + adc willyJumpCounter ; and how far + cmp #18+9 ; compare to death height + bcc fellNotTooFar ; not too far + jmp willyDies ; fell to far, kill willy +fellNotTooFar anop + lda #0 ; reset the fall from jump + sta willyFallFromJump + sta willyJumpCounter ; and reset the willy jump counter + lda #$FB ; <~MASK_AIR ; clear the air bit + and movementMask + sta movementMask +notFromAir anop + rts + +wfc0 cmp #DATA_CONVEYOR ; landed on a conveyor + bne wfc1 + ldx currLevel ; get the level + lda conveyorDirections,x ; get the direction of the conveyor + sta conveyorMask ; set it as the conveyor mask (which is reset each frame) + bne landed ; and do landing code + +wfc1 cmp #DATA_COLLAPSE ; check for collapsing tiles + bcc willyWorldCollision ; less than, not collapsing + cmp #DATA_COLLAPSE+9 ; in the collapse range + bcs willyWorldCollision ; no, check non-walk/floor tiles + jsr willyCollapse ; collapse a platform tile, returns with carry clear + bcc landed ; BRA to land code + + + +;----------------------------------------------------------------------------- +willyHitSwitch1 entry + + clc + adc #1 ; DATA_SWITCH1 becomes DATA_SWITCH1_OPEN + sta (srcPtrL),y ; make this switch draw open + + lda #0 + sta levelLayout+11*32+17 ; make a hole in the wall + sta levelLayout+12*32+17 + + ldx #1 ; sprite 1 barrel needs to go further + lda #19 ; this is the new max for return-kong +extend anop + sta spriteMax,x ; make the new max active + clc ; must leave with carry clear - not a wall collision + rts + + + +;----------------------------------------------------------------------------- +willyHitSwitch2 entry + + clc + adc #1 ; DATA_SWITCH2 becomes DATA_SWITCH2_OPEN + sta (srcPtrL),y ; make this switch draw open + + lda #0 + sta levelLayout+2*32+15 ; remove kong's platform + sta levelLayout+2*32+16 + + ldx #3 ; kong is at index 3 + lda #14*8-5 ; put the fallen-down destination for kong in place + sta spriteMax,x + + lda #2 ; turn kong upside down + sta spriteFrame,x + + lda #0 ; set kong's direction to down + sta spriteDir,x + + rts + + + +;----------------------------------------------------------------------------- +willyCollapse entry + + clc + adc #1 ; move the tile-top one down + cmp #DATA_COLLAPSE+7 ; is it all the way down + bcc wc00 ; not yet + lda #0 ; yes, so erase the tile + clc +wc00 sta (srcPtrL),y ; make the change in the level + rts + + + +;----------------------------------------------------------------------------- +willyHitKey entry + +tempX equ tmpBot+5 + + stx tempX ; save x - it may be an index in left/right col + lda #0 ; erase the key tile in the level + sta (srcPtrL),y + ldx #3 ; add 100 (digit 3 of 6, zero based 000100) + lda #1 + jsr textAddScore + dec keysToCollect ; 1 less key to collect + bne done2 ; all keys collected? + + ldx currLevel ; get the level + lda doorL,x ; get the door location in the level (lo) + sta putDoor+1 + lda doorH,x ; and hi + sta putDoor+2 + lda #DATA_DOOR ; get the door tile +putDoor anop + sta PLACEHOLDER ; and add the door tile to the level + +done2 anop + ldx tempX ; restore the saved x + clc ; make sure carry is clear + rts + + + +;----------------------------------------------------------------------------- +willySetWorldPtr entry + + lda willyYPos ; get the height + lsr a ; divide by 8 + lsr a + lsr a + sta willyYRow ; save the row willy's in + tax ; put the row in Y + clc + lda mult32L,x ; row * 32 + adc willyXPos ; and add the X position (levelLayout is aligned so no need to add lo) + sta srcPtrL ; the low byte of the pos in the level + lda mult32H,x ; get the high byte + adc #>levelLayout ; and offset into the level + sta srcPtrH ; and now srcPtr points at willy in the level + + rts + + end +