commit 0cfbcae376dce489195cff1dd740f445b9f4cb44 Author: StewBC Date: Wed Aug 18 18:38:06 2021 -0700 Initial Revision This is Manic Miner for the Apple 2 but the source code is in Orca/M format. 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 0000000..a6b5adb Binary files /dev/null and b/apple2/template.dsk differ diff --git a/apple2/template.po b/apple2/template.po new file mode 100644 index 0000000..f630d54 Binary files /dev/null and b/apple2/template.po differ 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 +