processor 6502 ;Default 2600 Constants set up by dissasembler.. VSYNC = $00 VBLANK = $01 WSYNC = $02 RSYNC = $03 NUSIZ0 = $04 NUSIZ1 = $05 COLUP0 = $06 COLUP1 = $07 COLUPF = $08 COLUBK = $09 CTRLPF = $0A PF0 = $0D PF1 = $0E PF2 = $0F RESP0 = $10 AUDC0 = $15 AUDC1 = $16 AUDF0 = $17 AUDF1 = $18 AUDV0 = $19 AUDV1 = $1A GRP0 = $1B GRP1 = $1C ENAM0 = $1D ENAM1 = $1E ENABL = $1F HMP0 = $20 VDELP1 = $26 HMOVE = $2A HMCLR = $2B CXCLR = $2C CXP0FB = $32 CXP1FB = $33 CXM0FB = $34 CXM1FB = $35 CXBLPF = $36 CXPPMM = $37 INPT4 = $3C SWCHA = $0280 SWCHB = $0282 INTIM = $0284 TIM64T = $0296 ;variables... RoomLo = $80 RoomHi = $81 Obj1Lo = $82 Obj1Hi = $83 Obj2Lo = $84 Obj2Hi = $85 Obj1X = $86 Obj1Y = $87 Obj2X = $88 Obj2Y = $89 PlayerRoom = $8A PlayerX = $8B PlayerY = $8C PlayerYadj = $8D ScanLineCnt = $8E RoomDefIndex = $8F Player0Def = $90 Player1Def = $91 Debounce = $92 CurrentObject = $93 ;(5 bytes) Jstick = $98 CurrentStick = $99 ObjAddress = $9A ObjDir = $9B LastObj = $9C CarriedObj = $9D CarriedX = $9E CarriedY = $9F HiCnt = $A0 ObjLst = $A1 ;(2 bytes) Delta2 = $A3 Delta1 = $A4 ObjCr = $A5 State = $A6 Level = $A7 Control = $A8 NoteCnt = $A9 Sound = $AA Index = $AB PrevRoom = $AC PrevX = $AD PrevY = $AE LoCnt = $AF ObjectNumber = $B0 TimerLo = $F7 TimerHi = $F8 ;object variables... SurroundR = $B1 ;(3 bytes) DotR = $B4 ;(3 bytes) ;all dragons must be consecutive RDragonR = $B7 ;(5 bytes) YDragonR = $BC ;(5 bytes) GDragonR = $C1 ;(5 bytes) MagnetR = $C6 ;(3 bytes) SwordR = $C9 ;(3 bytes) ChaliseR = $CC ;(3 bytes) BridgeR = $CF ;(3 bytes) ;all keys must be consecutive YKeyR = $D2 ;(3 bytes) WKeyR = $D5 ;(3 bytes) BKeyR = $D8 ;(3 bytes) ;all gates must be consecutive YGateR = $DB WGateR = $DC BGateR = $DD BatR = $DE ;(7 bytes) ;------------------------------------------------------------------------------------ ;Ram locations E5-FA free (F9/FA -might- be used by the stack if JSR's nested further) ;------------------------------------------------------------------------------------ Temp = Player0Def ;(shared) NullR = BridgeR ;(all shared) ;constants... ;Object numbers: ;these are used to calculate the offsets of the object table SurroundNumber = SurroundData - Objects ;($00) YGateNumber = YGateData - Objects ;($08) WGateNumber = WGateData - Objects ;($10) BGateNumber = BGateData - Objects ;($18) AuthorNumber = AuthorData - Objects ;($20) NumberNumber = NumberData - Objects ;($28) RDragonNumber = RDragonData - Objects ;($30) YDragonNumber = YDragonData - Objects ;($38) GDragonNumber = GDragonData - Objects ;($40) SwordNumber = SwordData - Objects ;($48) BridgeNumber = BridgeData - Objects ;($50) YKeyNumber = YKeyData - Objects ;($58) WKeyNumber = WKeyData - Objects ;($60) BKeyNumber = BKeyData - Objects ;($68) BatNumber = BatData - Objects ;($70) DotNumber = DotData - Objects ;($78) ChaliseNumber = ChaliseData - Objects ;($80) MagnetNumber = MagnetData - Objects ;($88) NullNumber = NullData - Objects ;($90) ;RD0 used to calculate map direction value when including differences RD0 = RoomDiffs - $80 WinRoom = $20 ;(Yellow Castle's room number) ByteNum = Game2Objects - (Game1Objects+1) ;number of bytes in each "fill" table RndNum = Loc_4 - (Loc_1 + 3) ; offset value for the room bounds table RndMax = $1F ;Mask for the upper bounds of the random seed Gates = $02 ;# of castle gates - 1 ;----------------------------------START OF BANK 1---------------------------------- ORG $1000 RORG $D000 ;deal with unknown flipflop status Start1: LDA $1FF9 ;switch banks to boot bank 2 (started in 1 by mistake) ;4 ;3 unused bytes as filler...can be replaced with a data table of 3 bytes (if one is present) NOP ; ;2 NOP ; ;2 NOP ; ;2 ;Print Display PrintDisplayX: LDA $1FF9 ;switch banks to go back to the game code ;4 STA HMCLR ;Clear horzontal motion. ;3 LDA Obj1X ;Position Player00 Sprite To ;3 LDX #$00 ; the X Coordinate of Object1. ;2 JSR PosSpriteX ;6 LDA Obj2X ;Position Player01 Sprite to ;3 ; the subroutine PosSpriteX doesn't change X, so an increment will do as well INX ;2 JSR PosSpriteX ;6 LDA PlayerX ;Position Ball Strite to ;3 LDX #$04 ; the X Coordinate of the Man. ;2 JSR PosSpriteX ; ;6 STA WSYNC ;Wait for horizontal Blank. ;3 STA HMOVE ;Apply Horizontal Motion. ;3 STA CXCLR ;Clear Collision Latches. ;3 LDA PlayerY ;Get the Y Coordinate of the Man. ;3 SEC ; ;2 SBC #$04 ;And Adjust it (By Four Scan Lines) ;2 STA PlayerYadj ; for printing (so Y Coordinate Specifies Middle) ;3 PrintDisplay_1: ; a. after the loop A is 0, so reloading is superflous ; b. replaced A with X so we can increment ; c. bugfix: the register is called VDEL*P*1 LDX INTIM ;Wait for end of the ;4 BNE PrintDisplay_1 ; current fame. ;2 STX Player0Def ;Set Player00 definition index. ;3 STX Player1Def ;Set Player01 definition index. ;3 STX RoomDefIndex ;Set room definition index. ;3 STX GRP1 ;Clear any graphics for Player01. ;3 INX ; ;2 STX VDELP1 ;vertically delay Player 01 ;3 LDA #$68 ; ;2 STA ScanLineCnt ;Set Scan Line Count. ;3 ;Print top line of Room. LDY RoomDefIndex ;Get room definition index. ;3 LDA (RoomLo),Y ;Get first room definition byte. ;5 STA PF0 ; and display. ;3 INY ; ;2 LDA (RoomLo),Y ;Get Next room definition byte. ;5 STA PF1 ; and display. ;3 INY ; ;2 LDA (RoomLo),Y ;Get Last room defintion byte. ;5 STA PF2 ; and display. ;3 INY ; ;2 STY RoomDefIndex ;Save for Next Time. ;3 STA WSYNC ;Wait for Horizontal Blank. ;3 ; a. X still contains 1, so the important bit 1 for VBLANK is zero. ; (this trick is also very common) ; b. a very usual trick: we know the state of a flag, so we replace JMP with a branch ; (here Y always != 0 -> Z-flag = 0) STX VBLANK ;Clear any Vertical Blank. ;Starting new code for the timer LDX PlayerRoom ;Check the player's room number ;3 CPX #$20 ;Is it inside the yellow castle? ;2 BEQ TimerDisplayInit ;Branch if so ;2 JMP PrintPlayer00 ;Otherwise, skip ahead ;3 TimerDisplayInit: LDY #$20 ;Set the value for "Mirrored" GFX ;2 STY CTRLPF ;And put in the playfield control register. ;3 LDY #$07 ;Get ready to count down 8 lines ;2 STY RoomDefIndex ;Save to a temp ;3 TimerDisplay: LDA TimerHi ;Grab the high byte of the new timer ;3 AND #$0F ;Keep only the lower nybble ;2 ASL ;ASL 3 times to multiply it by 8 ;2 ASL ; ;2 ASL ; ;2 CLC ; ;2 ADC RoomDefIndex ;Then add in the current line ;3 TAY ;Set the new index to the Y register ;2 LDA TimerDigits,Y ;Load in the GFX for that digit ;4 AND #$0F ;Keep only the low nybble ;2 STA ScanLineCnt ;...and save temporarily ;3 LDA TimerHi ;Now do the same for the high nybble of TimerHi... ;3 AND #$F0 ;Keep only the high nybble ;2 LSR ;Divide by 2 (so index is x8) ;2 CLC ; ;2 ADC RoomDefIndex ;Add in the current line ;3 TAY ;And set to the Y index ;2 LDA TimerDigits,Y ;Load in the GFX for that digit ;4 AND #$F0 ;Keep only the high nybble ;2 ORA ScanLineCnt ;...and throw in the low nybble we saved above ;3 TAX ;Give to X for the time being ;2 ;do the same thing for the low timer...this time using mirrored GFX... LDA TimerLo ; ;3 AND #$0F ; ;2 ASL ; ;2 ASL ; ;2 ASL ; ;2 CLC ; ;2 ADC RoomDefIndex ; ;3 TAY ; ;2 LDA TimerDigits2,Y ; ;4 AND #$F0 ; ;2 STA ScanLineCnt ; ;3 LDA TimerLo ; ;3 AND #$F0 ; ;2 LSR ; ;2 CLC ; ;2 ADC RoomDefIndex ; ;3 TAY ; ;2 LDA TimerDigits2,Y ; ;4 AND #$0F ; ;2 ORA ScanLineCnt ; ;3 ;digit GFX ready to print STA WSYNC ;Wait for Horizontal Blank. ;3 STX PF1 ;Save the X register to the 2nd playfield register ;2 STA PF2 ;Save the A register to the 3rd playfield register ;2 DEC RoomDefIndex ;Decrease the line counter ;5 BPL TimerDisplay ;Branch if still zero or above (and do the next line) ;2 LDY #$21 ;Otherwise, reset everything...done drawing the timer ;2 STY CTRLPF ;Reset the playfield control to reversed GFX ;3 LDY #$06 ; ;2 STY RoomDefIndex ;Reset the GFX index to begin on the 6th byte ;3 LDY #$5F ;Reset the scan line counter... ;2 STY ScanLineCnt ;...to 9 lines less than normal ;3 STA WSYNC ;Send a blank scanline ;3 STA WSYNC ;Send a blank scanline ;3 BNE PrintPlayer00 ; ;2 ;Print Player01 (Object 02) PrintPlayer01: LDA ScanLineCnt ;Get Current Scan Line. ;3 SEC ;Have we reached Object2's ;2 SBC Obj2Y ; Y Coordinate? ;3 STA WSYNC ; Wait for Horzonal Blank. ;3 BPL PrintPlayer00 ;If Not, Branch. ;2 LDY Player1Def ;Get the Player01 definition index. ;3 LDA (Obj2Lo),Y ;Get the Next Player01 Definition byte ;5 STA GRP1 ; and display. ;3 BEQ PrintPlayer00 ;If Zero then Definition finished. ;2 INC Player1Def ;Goto next Player01 definition byte. ;5 ;Print Player00 (Object01), Ball (Man) and Room. PrintPlayer00: LDX #$00 ; ;2 LDA ScanLineCnt ;Get the Current Scan Line. ;3 SEC ;Have we reached the Object1's ;2 SBC Obj1Y ; Y coordinate? ;3 BPL PrintPlayer00_1 ;If not then Branch. ;2 LDY Player0Def ;Get Player00 definition index. ;3 LDA (Obj1Lo),Y ;Get the Next Player00 definition byte. ;5 TAX ; ;2 BEQ PrintPlayer00_1 ;If Zero then Definition finished. ;2 INC Player0Def ;Go to Next Player00 definition byte. ;5 PrintPlayer00_1: LDY #$00 ;Disable Ball Graphic. ;2 LDA ScanLineCnt ;Get Scan line count. ;3 SEC ;Have we reached the Man's ;2 SBC PlayerYadj ; Y Coordinate? ;3 AND #$FC ;Mask value to four either side (getting depth of 8) ;2 BNE PrintPlayer00_2 ;If Not, Branch. ;2 LDY #$02 ;Enable Ball Graphic. ;2 PrintPlayer00_2: LDA ScanLineCnt ;Get Scan Line Count. ;3 AND #$03 ;Have we reached a sixteenth scan line? ;2 ;NOTE! The above line could be changed to 7 (checking every 8th scanline instead). This will ;effectively DOUBLE the resolution for each screen. (you'll need to update the room GFX tables ;to have 42 bytes instead of 21). The upper and lower lines of the higher res. bitmaps will ;just *barely* be visible...so by clever placement of the tags, this could be reduced to 36 ;bytes per screen :) Format of the updated line would be this: ;; AND #$07 ;Have we reached a eighth scan line? ;2 ;...that will replace the above line and the program will grab new GFX values on every 8th line BNE PrintPlayer00_4 ;If not, Branch. ;2 STA WSYNC ;Wait for Horzontal Blank. ;3 STY ENABL ;Enable Ball (If Wanted) ;3 STX GRP0 ;Display Player 00 definition byte (if wanted) ;3 LDY RoomDefIndex ;Get room definition index. ;3 LDA (RoomLo),Y ;Get first room definition byte, ;5 STA PF0 ; and display. ;3 INY ; ;2 LDA (RoomLo),Y ;Get next room definition byte, ;5 STA PF1 ; and display. ;3 INY ; ;2 LDA (RoomLo),Y ;Get next room definition byte, ;5 STA PF2 ; and display. ;3 INY ; ;2 STY RoomDefIndex ;Save for Next Time. ;3 PrintPlayer00_3: DEC ScanLineCnt ;Goto next scan line. ;5 LDA ScanLineCnt ;Get the scan line. ;3 CMP #$08 ;Have we reached to within 8 scanlines of the bottom? ;2 BPL PrintPlayer01 ;If not, Branch. ;2 STA VBLANK ;Turn on VBLANK ;3 ;Tidy Up TidyUp: LDA #$00 ; ;2 STA GRP1 ;Clear any graphics for Player01 ;3 STA GRP0 ;Clear any graphics for Player00 ;3 LDA #$20 ; ;2 STA TIM64T ;Stat Timing this frame using ;4 JMP PrintDisplayX ; ;3 ; a. by reordering the code, we avoid the jump to TidyUp ; b. again used the branch trick PrintPlayer00_4: STA WSYNC ;Wait for Horzontal blank. ;3 STY ENABL ;Enable Ball (If Wanted.) ;3 STX GRP0 ;Display Player00 definition byte (if Wanted). ;3 BNE PrintPlayer00_3 ; ;2 ;Position Sprite X horizontally. PosSpriteX: LDY #$02 ;Start with 10 clock cycles (to avoid HBLANK) ;2 SEC ;Divide the Coordinate. ;2 PosSpriteX_1: INY ; Wanted by Fifteen I.E. ;2 SBC #$0F ; Get Course Horizontal ;2 BCS PosSpriteX_1 ; Value (In Multiples of 5 Clock Cycles ;2 ; (Therefore giving 15 Color Cycles) EOR #$FF ;Flip remanter to positive value (inverted). ;2 SBC #$06 ;Convert to left or right of current position. ;2 ASL ; ;2 ASL ;Move to high nybble for TIA ;2 ASL ; horizontal motion. ;2 ASL ; ;2 STY WSYNC ;Wait for horozontal blank. ;3 PosSpriteX_2: DEY ;Count down the color ;2 BPL PosSpriteX_2 ; cycles (these are 5 machine/15 color cycles). ;2 STA RESP0,X ;Reset the sprite, thus positioning it coursely. ;4 STA HMP0,X ;Set horizontal (fine) motion of sprite. ;4 RTS ;6 ORG $1154 RORG $D154 ;8 spare bytes .byte $00 ; .byte $00 ; .byte $00 ; .byte $00 ; .byte $00 ; .byte $00 ; .byte $00 ; .byte $00 ; ;Object #0E : State 03 : Graphic GfxBat1: .byte $00 ;X X ;Object #0E : State FF : Graphic GfxBat2: .byte $00 ; X ORG $1170 RORG $D170 ;----------------------end of subroutine...rest of bank can be devoted to GFX :)------------ ;memory addresses $D100 to $D8FF are completely free ;if desired, graphics tables can be transferred here to make custom objects, ;larger objects, many more rooms, etc. ;Don't forget to use ORG with RORG (ORG begins with $1, and RORG begins with $D) TimerDigits: .byte $FF .byte $00 .byte $77; | XXX XXX| $F100 .byte $55; | X X X X| $F101 .byte $55; | X X X X| $F102 .byte $55; | X X X X| $F103 .byte $77; | XXX XXX| $F104 .byte $00 .byte $FF .byte $00 .byte $22; | X X | $F105 .byte $22; | X X | $F106 .byte $22; | X X | $F107 .byte $22; | X X | $F108 .byte $22; | X X | $F109 .byte $00 .byte $FF .byte $00 .byte $77; | XXX XXX| $F10A .byte $44; | X X | $F10B .byte $77; | XXX XXX| $F10C .byte $11; | X X| $F10D .byte $77; | XXX XXX| $F10E .byte $00 .byte $FF .byte $00 .byte $77; | XXX XXX| $F10F .byte $11; | X X| $F110 .byte $33; | XX XX| $F111 .byte $11; | X X| $F112 .byte $77; | XXX XXX| $F113 .byte $00 .byte $FF .byte $00 .byte $11; | X X| $F114 .byte $11; | X X| $F115 .byte $77; | XXX XXX| $F116 .byte $55; | X X X X| $F117 .byte $55; | X X X X| $F118 .byte $00 .byte $FF .byte $00 .byte $77; | XXX XXX| $F119 .byte $11; | X X| $F11A .byte $77; | XXX XXX| $F11B .byte $44; | X X | $F11C .byte $77; | XXX XXX| $F11D .byte $00 .byte $FF .byte $00 .byte $77; | XXX XXX| $F11E .byte $55; | X X X X| $F11F .byte $77; | XXX XXX| $F120 .byte $44; | X X | $F121 .byte $44; | X X | $F122 .byte $00 .byte $FF .byte $00 .byte $11; | X X| $F123 .byte $11; | X X| $F124 .byte $11; | X X| $F125 .byte $11; | X X| $F126 .byte $77; | XXX XXX| $F127 .byte $00 .byte $FF .byte $00 .byte $77; | XXX XXX| $F128 .byte $55; | X X X X| $F129 .byte $77; | XXX XXX| $F12A .byte $55; | X X X X| $F12B .byte $77; | XXX XXX| $F12C .byte $00 .byte $FF .byte $00 .byte $11; | X X| $F12D .byte $11; | X X| $F12E .byte $77; | XXX XXX| $F12F .byte $55; | X X X X| $F130 .byte $77; | XXX XXX| $F131 .byte $00 TimerDigits2: .byte $FF .byte $00 .byte $EE; |XXX XXX | $F100 .byte $AA; |X X X X | $F101 .byte $AA; |X X X X | $F102 .byte $AA; |X X X X | $F103 .byte $EE; |XXX XXX | $F104 .byte $00 .byte $FF .byte $00 .byte $44; | X X | $F105 .byte $44; | X X | $F106 .byte $44; | X X | $F107 .byte $44; | X X | $F108 .byte $44; | X X | $F109 .byte $00 .byte $FF .byte $00 .byte $EE; |XXX XXX | $F10A .byte $22; | X X | $F10B .byte $EE; |XXX XXX | $F10C .byte $88; |X X | $F10D .byte $EE; |XXX XXX | $F10E .byte $00 .byte $FF .byte $00 .byte $EE; |XXX XXX | $F10F .byte $88; |X X | $F110 .byte $CC; |XX XX | $F111 .byte $88; |X X | $F112 .byte $EE; |XXX XXX | $F113 .byte $00 .byte $FF .byte $00 .byte $88; |X X | $F114 .byte $88; |X X | $F115 .byte $EE; |XXX XXX | $F116 .byte $AA; |X X X X | $F117 .byte $AA; |X X X X | $F118 .byte $00 .byte $FF .byte $00 .byte $EE; |XXX XXX | $F119 .byte $88; |X X | $F11A .byte $EE; |XXX XXX | $F11B .byte $22; | X X | $F11C .byte $EE; |XXX XXX | $F11D .byte $00 .byte $FF .byte $00 .byte $EE; |XXX XXX | $F11E .byte $AA; |X X X X | $F11F .byte $EE; |XXX XXX | $F120 .byte $22; | X X | $F121 .byte $22; | X X | $F122 .byte $00 .byte $FF .byte $00 .byte $88; |X X | $F123 .byte $88; |X X | $F124 .byte $88; |X X | $F125 .byte $88; |X X | $F126 .byte $EE; |XXX XXX | $F127 .byte $00 .byte $FF .byte $00 .byte $EE; |XXX XXX | $F128 .byte $AA; |X X X X | $F129 .byte $EE; |XXX XXX | $F12A .byte $AA; |X X X X | $F12B .byte $EE; |XXX XXX | $F12C .byte $00 .byte $FF .byte $00 .byte $88; |X X | $F12D .byte $88; |X X | $F12E .byte $EE; |XXX XXX | $F12F .byte $AA; |X X X X | $F130 .byte $EE; |XXX XXX | $F131 .byte $00 ORG $1300 RORG $D300 Room10: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX Room11: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX Room12: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ORG $1400 RORG $D400 Room13: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX Room14: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ORG $1900 RORG $D900 ;4 spare bytes .byte $00 ; .byte $00 ; .byte $00 ; .byte $00 ; ;Number Room Definition ;Below blue maze Room01: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX RR ;Below Yellow Castle Room02: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX RR ;Above the catacombs Room03: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX RR ORG $1A00 RORG $DA00 ;Blue Maze, below black castle Room04: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Blue Maze,above entry Room05: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Bottom of Blue Maze Room06: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ORG $1B00 RORG $DB00 ;Center of Blue Maze Room07: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Blue Maze Entry Room08: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Catacombs Middle Room09: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ORG $1C00 RORG $DC00 ;Catacombs Entry Room0A: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Catacombs Side Room0B: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Right corridor, right of catacombs Room0C: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ORG $1D00 RORG $DD00 ;Left corridor, below white castle Room0D: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;Below left corridor (2 screens below white castle) Room0E: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ;White Castle (outside) Room0F: .byte %11110000,%11111111,%00011111 ;XX RR .byte %11110000,%11111111,%00011111 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XX RR .byte %00010000,%10001000,%00010001 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XX RR .byte %11110000,%11111111,%11111111 ;XXXXXXXXXXXXXXXX RRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XXXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRRRRRRRRR .byte %00000000,%00000000,%00000000 ;XX ORG $1E00 RORG $DE00 ;Black Castle (outside) ;Black Maze, right from entry ;Object #0A : State FF : Graphic GfxBridge: .byte $00 ;XX XX ;Custom Room2: ;Object #1 States 940FF (Graphic) GfxPort01: .byte $00 ;XXXXXXX .byte $AA ;X X X X GfxPort02: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort03: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort04: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort05: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort06: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort07: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort08: .byte $FE ;XXXXXXX .byte $AA ;X X X X GfxPort09: GfxNull: .byte $00 ;bitmap end ;Object #9 : State FF : Graphics GfxSword: .byte $00 ; X ;2 spare bytes .byte $00 ; .byte $00 ; ;Object #1 : Graphic GfxSurround: .byte $00 ;XXXXXXXX ;Object #11 : State FF : Graphic GfxMagnet: .byte $00 ; XXXX ;Object #0B : State FF : Graphic GfxKey: .byte $00 ; XXX ;Object #6 : State #00 : Graphic GfxDrag0: .byte $00 ; XX ;Object 6 : State FF : Graphic GfxDrag1: .byte $00 ;X ;Object 6 : State 02 : Graphic GfxDrag2: .byte $00 ; XX ;Object #10 : State FF : Graphic GfxChallise: .byte $00 ;X X ;Object #5 State #1 Graphic :'1' GfxNum1: .byte $00 ; X ;Object #5 State #2 Grphic : '2' GfxNum2: .byte $00 ; XXX ;Object #5 State #3 Graphic :'3' GfxNum3: .byte $00 ; XXX ;Object #0F : State FF : Graphic GfxDot: .byte $00 ;X .byte $00 ;bitmap end ORG $1F00 RORG $DF00 ;Object #4 : State FF : Graphic GfxAuthor: .byte $00 ;XXXX ORG $1FF8 RORG $DFF8 ;6502 Vectors...leave unchanged for this bank .byte $FF .byte $FF .byte $FF .byte $FF .word Start1 .byte $FF .byte $FF ;-----------------------------------END OF BANK 1---------------------------------- ;----------------------------------START OF BANK 2---------------------------------- ORG $2000 RORG $F000 ;deal with unknown flipflop status...first use up the 3 bytes taken by the LDA in bank 1... ;Joystick Merge Values ReadStick_3: .byte $00,$C0,$30 ;No change, No horizontal, No vertical. ;...and now jump to the starting address and initialize :) JMP StartGame ;3 PrintDisplay: LDA $1FF8 ;4 call bank 1 RTS ;6 return ;Position Sprite X horizontally. PoXsSprite: LDY #$02 ;Start with 10 clock cycles (to avoid HBLANK) ;2 SEC ;Divide the Coordinate. ;2 PoXsSprite_1: INY ; Wanted by Fifteen I.E. ;2 SBC #$0F ; Get Course Horizontal ;2 BCS PoXsSprite_1 ; Value (In Multiples of 5 Clock Cycles ;2 ; (Therefore giving 15 Color Cycles) EOR #$FF ;Flip remanter to positive value (inverted). ;2 SBC #$06 ;Convert to left or right of current position. ;2 ASL ; ;2 ASL ;Move to high nybble for TIA ;2 ASL ; horizontal motion. ;2 ASL ; ;2 STY WSYNC ;Wait for horozontal blank. ;3 PoXsSprite_2: DEY ;Count down the color ;2 BPL PoXsSprite_2 ;cycles (these are 5 machine/15 color cycles). ;2 STA RESP0,X ;Reset the sprite, thus positioning it coursely;4 STA HMP0,X ;Set horizontal (fine) motion of sprite. ;4 RTS ; ;6 ;Preform VSYNC DoVSYNC: LDX INTIM ;Get Timer Output ;4 BNE DoVSYNC ;Wait for Time-Out ;2 LDA #$02 ; ;2 STA WSYNC ;Wait for horizonal blank. ;3 STA VBLANK ;Start Vertical Blanking. ;3 STA WSYNC ;Wait for horizonal blank. ;3 ; STA WSYNC ;Wait for horizonal blank. ;3 ; STA WSYNC ;Wait for horizonal blank. ;3 STA VSYNC ;Start verticle sync. ;3 STA WSYNC ;Wait for horizonal blank. ;3 STA WSYNC ;Wait for horizonal blank. ;3 STA WSYNC ;Wait for horizonal blank. ;3 STX VSYNC ;End Vertical sync. ;3 ; LDA #$2A ;Set clock interval to ;2 LDA #$2C ;Set clock interval to ;2 STA TIM64T ;Countdown next frame. ;4 RTS ; ;6 ;Setup a room for print. SetupRoomPrint: LDA PlayerRoom ;Get current room number. ;3 JSR RoomNumToAddress ;Convert it to an address. ;6 LDY #$00 ; ;2 LDA (CurrentObject),Y ;Get low pointer to room ;5 STA RoomLo ; Graphics ;3 INY ; ;2 LDA (CurrentObject),Y ;Get high pointer to room ;5 STA RoomHi ; Graphics ;3 ;Use Color INY ; ;2 LDA (CurrentObject),Y ;Get room color ;5 JSR ChangeColor ;Change if necessary ;6 STA COLUPF ;Put in Playfiled color register. ;3 ;Color Background. UseColor: LDA #$08 ;Get light grey background ;2 JSR ChangeColor ;Change if necessary ;6 STA COLUBK ;Put it in the Background color register. ;3 ;Playfield Control. LDY #$03 ; ;2 LDA (CurrentObject),Y ;Get the playfield control value. ;5 STA CTRLPF ;And put in the playfield control register. ;3 LSR ; ;2 LSR ; ;2 LSR ;Get the first bit into position. ;2 LSR ; ;2 LSR ; ;2 STA ENAM1 ;Enable right hand wall (if wanted-missile01) ;3 LSR ; ;2 STA ENAM0 ;Enable left hand wall(if wanted-missle00) ;3 ;Get objects to display. JSR CacheObjects ;Get next two objects to display. ;6 ;Sort out their order. LDA CurrentObject+2 ;If the object1 is the ;3 BEQ SwapPrintObjects ;Then branch to swap (we want it as player01) ;2 CMP #BridgeNumber ;If the first object is the bridge then ;2 BNE SetupObjectPrint ;Swap the objects (we want it as player01) ;2 LDA CurrentObject+3 ;If the object2 is the ;3 BEQ SetupObjectPrint ;it (we want it as player01) ;2 SwapPrintObjects: ; using an unused register for swapping makes the code much shorter LDA CurrentObject+2 ; ;3 LDX CurrentObject+3 ; ;3 STA CurrentObject+3 ;Swap the objects to print. ;3 STX CurrentObject+2 ; ;3 ;Setup Object1 to print. SetupObjectPrint: LDX CurrentObject+2 ;Get Object1 ;3 LDA Store1,X ;Get low pointer to it's dynamic information. ;4 STA CurrentObject ; ;3 LDA Store2,X ;Get high pointer to it's dynamic informtion. ;4 STA CurrentObject+1 ; ;3 LDY #$01 ; ;2 LDA (CurrentObject),Y ;Get Object1's X coordinate ;5 STA Obj1X ;and Store for print. ;3 INY ; ;2 LDA (CurrentObject),Y ;Get Object1's Y coordinate ;5 STA Obj1Y ;and Store for print. ;3 LDA Store3,X ;Get low pointer to state value. ;4 STA CurrentObject ; ;3 LDA Store4,X ;Get high pointer to state value. ;4 STA CurrentObject+1 ; ;3 LDY #$00 ; ;2 LDA (CurrentObject),Y ;Retrieve Object1's current state. ;5 STA State ; ;3 LDA Store5,X ;Get low pointer to state information. ;4 STA CurrentObject ; ;3 LDA Store6,X ;Get high pointer to state information. ;4 STA CurrentObject+1 ; ;3 JSR GetObjectState ;Find current state in the state information. ;6 INY ;Index to the state's corresponding graphic pointer;2 LDA (CurrentObject),Y ;Get Object1's low graphic address ;5 STA Obj1Lo ;and store for print. ;3 INY ; ;2 LDA (CurrentObject),Y ;Get Object1's high graphic address ;5 STA Obj1Hi ;and store for print. ;3 ;Colour LDA Store7,X ;Get Object1's Color. ;4 JSR ChangeColor ;Change if necessary. ;6 STA COLUP0 ;And set color luminance00. ;3 ;Object1 Size ResizeObject: LDA Store8,X ;Get Object1's Size ;4 ORA #$10 ;And set to larger size if necessary. ;2 STA NUSIZ0 ;(Used by bridge and invisible surround) ;3 ;Setup Object 2 to Print. LDX CurrentObject+3 ;Get Object 2 ;3 LDA Store1,X ; ;4 STA CurrentObject ;Get low pointer to it's dynamic information. ;3 LDA Store2,X ; ;4 STA CurrentObject+1 ;Get high pointer to it's dynamic information. ;3 LDY #$01 ; ;2 LDA (CurrentObject),Y ;Get Object2's X coordinate ;5 STA Obj2X ;and store for print. ;3 INY ; ;2 LDA (CurrentObject),Y ;Get Object2's Y coordinate ;5 STA Obj2Y ;and store for print. ;3 LDA Store3,X ;Get low pointer to state value. ;4 STA CurrentObject ; ;3 LDA Store4,X ;Get high pointer to state value. ;4 STA CurrentObject+1 ; ;3 LDY #$00 ; ;2 LDA (CurrentObject),Y ;Retrieve Object2's current state. ;5 STA State ; ;3 LDA Store5,X ;Get low pointer to state information. ;4 STA CurrentObject ; ;3 LDA Store6,X ;Get high pointer to state information. ;4 STA CurrentObject+1 ; ;3 JSR GetObjectState ;Find the current state in the state information;6 INY ;Index to state's corresponding graphic pointer ;2 LDA (CurrentObject),Y ; ;5 STA Obj2Lo ;Get Object2's low graphic address. ;3 INY ; ;2 LDA (CurrentObject),Y ;Get Object2's high graphic address. ;5 STA Obj2Hi ; ;3 ;Color LDA Store7,X ;Get Object2's Color ;4 JSR ChangeColor ;Change if Necessary. ;6 STA COLUP1 ;and set color luminance01. ;3 ;Object2 Size ResizeObject2: LDA Store8,X ;Get Object2's Size ;4 ORA #$10 ;And set to larger size if necessary. ;2 STA NUSIZ1 ;(Used by bridge and invisible surround) ;3 RTS ; ;6 ;Fill cache with two objects in this room. CacheObjects: LDY LastObj ;Get Last Object ;3 LDA #NullNumber ;Set cache to (Num Is (8 * NumOfObj) - 8) ;2 STA CurrentObject+2 ; no-ojects. ;3 STA CurrentObject+3 ; ;3 MoveNextObject: TYA ; ;2 CLC ;Goto the next object to ;2 ADC #$08 ;check (add nine). ;2 CMP #NullNumber ;Check if over maximum.(Num Is (8*NumOfObj)-8) ;2 BCC GetObjectsInfo ; ;2 LDA #SurroundNumber ;If so, wrap to zero. ;2 GetObjectsInfo: TAY ; ;2 LDA Store1,Y ;Get low byte of object info. ;4 STA CurrentObject ; ;3 LDA Store2,Y ;Get high byte of object info. ;4 STA CurrentObject+1 ; ;3 LDX #$00 ; ;2 LDA (CurrentObject,X) ;Get objects current room. ;6 CMP PlayerRoom ;Is it in this room? ;3 BNE CheckForMoreObjects ;If not lets try next object (branch) ;2 LDA CurrentObject+2 ;Check first slot. ;3 CMP #NullNumber ;If not default(no-object)(Num Is (8*NumOfObj)-8);2 BNE StoreObjectToPrint ;then branch. ;2 STY CurrentObject+2 ;Store this object's number to print ;3 JMP CheckForMoreObjects ; and try for more. ;3 StoreObjectToPrint: STY CurrentObject+3 ;Store this object's number to print. ;3 JMP StoreCount ; and then give up - no slots free. ;3 CheckForMoreObjects: CPY LastObj ;Have we done all the objets? ;3 BNE MoveNextObject ;If not, continue. ;2 StoreCount: STY LastObj ;If so, store current count ;3 RTS ; for next time. ;6 ;Convert room number to address...edited to allow up to 128 rooms RoomNumToAddress: STX Temp ;save X ;3 LDX #>RoomDataTable ;initialize the high pointer (this saves one addition) ;2 ASL ;ROLing carry to $94 not necessary if RoomNumber always <128 ;2 ASL ;ROLing carry to $94 not necessary if RoomNumber always < 64 ;2 BCC skipX ;but you are planning more rooms, so we add the code here ;2 INX ; ;2 INX ; ;2 CLC ; ;2 skipX: ASL ;ROLing carry to $94 not necessary if RoomNumber always < 32 ;2 BCC skip0 ;but you are planning more rooms, so we add the code here ;2 INX ; ;2 CLC ; ;2 skip0: ADC #