;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; DRAGONFIRE ; AKA ; CHEESE ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; MAY 21, 1982 ; COPYRIGHT 1982 BY IMAGIC ; ROBERT GRAVES SMITH III ; processor 6502 RELEASE EQU 1 PAL EQU 0 ;(PAL COLORS NOT IN THIS LISTING, OTHER PAL SHOULD WORK) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; STELLA EQUATES ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; VSYNC EQU $00 ; VERT SYNC VBLNK EQU $01 ; HSYNC EQU $02 ; STROBE MCRES EQU $03 ; MASTER COUNTER RESET P0SIZE EQU $04 ; SIZE, NUMBER OF COPIES P1SIZE EQU $05 ; P0CLR EQU $06 ; COLOR P1CLR EQU $07 ; PFCLR EQU $08 ; BKCLR EQU $09 PFCTRL EQU $0A ; PLAYFIELD CONTROL P0REF EQU $0B ; REFLECT P1REF EQU $0C ; PF0 EQU $0D ; PLAYFIELD REGISTERS PF1 EQU $0E ; PF2 EQU $0F ; P0RES EQU $10 ; RESETS P1RES EQU $11 ; M0RES EQU $12 ; M1RES EQU $13 ; BRES EQU $14 ; SNDC0 EQU $15 ; SOUND CONTROL SNDC1 EQU $16 ; SNDF0 EQU $17 ; FREQUENCY SNDF1 EQU $18 ; SNDV0 EQU $19 ; VOLUME SNDV1 EQU $1A ; P0GR EQU $1B ; GRAPHICS REGISTERS P1GR EQU $1C ; M0GR EQU $1D ; M1GR EQU $1E ; BGR EQU $1F ; P0HM EQU $20 ; HMOVES P1HM EQU $21 M0HM EQU $22 M1HM EQU $23 BHM EQU $24 ; P0VDEL EQU $25 ; VERTICAL DELAYS P1VDEL EQU $26 ; BVDEL EQU $27 ; MP0RES EQU $28 ; MISSILE TRACKING MP1RES EQU $29 ; HMOV EQU $2A ; HORIZ MOVEMENT STROBE CLRHM EQU $2B ; CLEAR HMOVE STROBE CCLR EQU $2C ; CX REGISTER RESET STROBE ;READ ADDRESSES M0PPCX EQU $00 ; M0 PLAYER CX M1PPCX EQU $01 ; M1 PLAYER P0BPCX EQU $02 ; P0 BALL/PLAYFIELD CX P1BPCX EQU $03 ; M0BPCX EQU $04 ; M0 BALL/PLAYFIELD CX M1BPCX EQU $05 ; BPCX EQU $06 ; BALL PLAYFIELD CX PPMMCX EQU $07 ; P0/P1 MISSILE CX POT0A EQU $08 ; POT IN, LEFT POT0B EQU $09 ; POT IN, LEFT POT1A EQU $0A ; POT IN, RIGHT POT1B EQU $0B ; POT IN, RIGHT TRIG0 EQU $0C ; SCHMIDT TRIGGER LEFT TRIG1 EQU $0D ; RIGHT ; PIA ADDRESSES PLRCTL EQU $280 ; PORT A (CONTROLLERS) DDRA EQU $281 ; DATA DIRECTION A FPCTL EQU $282 ; FRONT PANEL SWITCHES DDRB EQU $283 ; DATA DRIECTION B TIMER EQU $284 ; PIA TIMER TIMOUT EQU $285 ; PIA TIMER FLAG TIMD1 EQU $294 ; CLOCK / 1 TIMD8 EQU $295 ; CLOCK / 8 TIMD64 EQU $296 ; CLOCK / 64 TIMD1K EQU $297 ; CLOCK / 1024 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; GAME EQUATES ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TOP EQU $A0 IF PAL NUP1S EQU 10 ; NUMBER OF PLAYER 1'S ELSE NUP1S EQU 9 ENDIF NUP0S EQU 5 ; NUMBER OF PLAYER 0'S DEAD EQU $D0 SUPRESS EQU $FF FBSPEED EQU 2 ;FIREBALL SPEED WINDOW EQU 20 CAVECLR EQU $0A ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SOUND EQUATES ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FIRES EQU 0 ;FIRE FIREBALL BONSND EQU 1 ;BONUS JUMPS EQU 2 ;JUMP SOUND EXSND EQU 3 ;EXPLOSION DEATHS EQU 4 ;DEATH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; RAM ALOCATION ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CODE SEG.U RAM ORG $80 RAND DS 1 ; RANDH DS 1 FLAGS DS 1 ; D7=0=LOGO, D6=1, SHOW VERSION NUM ; D0 = RESET SWITCH EYETOP DS 1 ; UPPER LIMIT OF EYE EYEBOT DS 1 ; LOWER LIMIT OF EYE NEWCNT DS 1 ; COUNTER FOR NEW BOARD SETUP ATTRACT DS 1 ; GAMESTAT DS 1 ; D7 RESET=CASTLE SCREEN, D6 RESET=ATTR PLYRSTAT DS 1 ; D7 SET=PLAYER INIT DRAGSTAT DS 1 ; D6 SET=FLAMING REFSHAD DS 1 ; REFLECT FOR PLAYER GSEL DS 1 ; SELECT TIMER GAMNUM DS 1 ; GAME NUMBER T0 DS 1 ; T1 DS 1 ; T2 DS 1 ; T3 DS 1 ; CX DS 1 ; COLLISION POINTER LIVES DS 2 ; LIFE COUNTERS P1POINT DS 1 ; P0POINT DS 1 ; COUNT DS 1 ; ZSTART XSTART P0XS DS NUP0S DRAGONX DS 1 ; EYEX DS 1 ; EYE XPOS PLAYERX DS 1 ; XEND PLAYERY DS 1 ; PLAYNO DS 1 ; PLAYER UP WAVENO DS 1 ; WAVE NUM FRAME DS 2 ; 16 BIT FRAME COUNTER DEATH DS 1 ; DEATH FLAG ; PLAYERLX DS 1 ; PLAYERLY DS 1 ; PLAYERDX DS 1 ; PLAYERDY DS 1 ; ; DRAGONDX DS 1 ;DRAGON DELTA ; SCOREL0 DS 2 ; LO SCORE SCOREM0 DS 2 ; SCOREH0 DS 2 ; ZEND ; HMOVE VALUES P1HMS DS NUP1S ;LIST OF HMOVES FOR P1'S P0HMS DS NUP0S ; DRAGONHM DS 1 ; EYEHM DS 1 ; PLAYERHM DS 1 ; P0YS DS NUP0S ; P0Y DS 1 ; P1ID DS NUP1S ; P0ID DS NUP0S ; ;MAP THE RAT & ARROW RAM OVER THE P0 ID LIST RATTIME EQU *-4 ; RAT TIMER ARROWTIM EQU *-3 ; ARROW TIMER RATHM EQU *-2 ; RAT HMOVE ARROWHM EQU *-1 ; ARROW HMOVE PLAYERID DS 1 ; P1INDCLR DS 2 ; P0INDCLR DS 2 ; P1IND DS 2 ; P0IND DS 2 ; DRAGTIME DS 1 ; DRAGON FLAMING TIMER DRAGONAN DS 1 ; ; DRAGON AND SIXCHAR INDIRECTION ARRWIND ; ARROW INDIRECTION SIXIND0 DRAGH0 DS 2 ; ARRWINDC ; ARROW COLOR INDIRECTION SIXIND1 DRAGH1 DS 2 ; SIXIND2 DRAGH2 DS 2 ; ; SIXIND3 DRAGH3 DS 2 ; SIXIND4 DELAY DS 2 ; INDIRECT JUMP INTO KERNEL SIXIND5 DS 2 ; CAVESHAD DS 1 ; SHADOW CAVE COLOR SND1 DS 1 ; SOUND ID SND1TIME DS 1 ; SOUND TIMER JUMPTIME DS 1 ; SELTIME DS 1 ; SELECT SWITCH TIMER SEA DS 1 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; MAIN PROGRAM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEG CODE ORG $1000,0 START SEI CLD ; NO DECIMAL LDX #$00 TXA CLP STA $0,X ; CLEAR STELLA & RAM TXS INX BNE CLP ; ; INITS ; DEC ATTRACT LDA #$11 STA PFCTRL STA RANDH JSR SETUPCA ; SET UP CASTELE SCREEN LDA #150 STA PLAYERX STA PLAYERY STA RAND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SYNC FOR NEW FRAME ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SCRNTOP LDA #2 ; VBLANK ON STA VBLNK STA HSYNC ; VSYNC FOR 3 SCAN LINES STA VSYNC ; SET UP HIGH BYTES FOR INDIRECTION LDA #(ATREAS >>8 ) STA P1IND+1 LDA #MAN0 >>8 STA P0IND+1 LDA #TREASCLR >>8 STA P1INDCLR+1 LDA #MAN0C >> 8 STA P0INDCLR+1 ; SET UP DRAGONS EYE OR FLAME ; 30 MC ; LDA DRAGSTAT ASL ASL LDA DRAGONDX ROL ROL AND #$3 TAX LDA DRAGONX CLC ADC OFFSETS,X STA EYEX ; RANDOM NUMBER GENERATOR RANDOM LDA RAND ROR ROR ROR EOR RANDH ASL ASL ROL RAND ROL RANDH LDA RAND ; STA HSYNC LDA CAVESHAD ; SETUP PLAYFIELD COLOR EOR #$C ; DROP 2 LUMES AND ATTRACT STA PFCLR LDA #$0 STA HSYNC STA VSYNC ; OFF GOES VSYNC IF PAL LDA #$42 ELSE LDA #$2C ENDIF STA TIMD64 ; ; SOMEONE DIE THIS FRAME? ; LDX PLAYNO LDA LIVES,X BPL OUT23 ; START DEATH, SOMEONE DEAD! IF PAL LDA #150+15 STA PLAYERY LDA #150 STA PLAYERX ELSE LDA #150 STA PLAYERY STA PLAYERX ENDIF LDY SND1TIME DEY BEQ SKIP39 LDX #DEATHS CPX SND1 BEQ OUT23 JSR STARTSND JMP OUT23 SKIP39 ; LDA GAMNUM LSR BCS PLAY2 ; TWO PLAYER ; END GAME ENDGAME JSR SETUPCA STA LIVES ;(A = 0) STA LIVES+1 STA GAMESTAT LDA #150 STA PLAYERY STA PLAYERX BNE OUT23 ; 2 PLAYER VERSION PLAY2 LDA LIVES BPL ALIVE0 LDA LIVES+1 BMI ENDGAME ; BOTH DEAD ; O DEAD, 1 ALIVE ALIVE1 LDA PLAYNO EOR #$1 STA PLAYNO JSR SETUPCA BEQ OUT23 ALIVE0 LDY WAVENO INY CPY #9 BCS ALIVE1 STY WAVENO BCC ALIVE1 ; START NEW WAVE OUT23 ; ; ANIMATE MAN ; LDA FRAME AND #$7 TAY AND #$1 BNE OUT16 ; SPECIAL CASE, EXPLODING MAN LDA PLAYERID CMP #(SUPINE & $FF) BCC SKIP40 ;EXPLODING MAN CPY #0 BNE OUT16 ADC #$F CMP #(SUPINE2+1) & $FF BCC WRID ;EXPLOSION OVER LDA #$8C STA PLAYERX LDA #0 STA PLAYERY STA PLAYERDY LDA #$80 STA PLYRSTAT LDX PLAYNO DEC LIVES,X LDA #MAN0 & $FF WRID STA PLAYERID JMP OUT16 SKIP40 ; FORCE KNEELING MAN IF CASTLE AND DOWN STICK BIT GAMESTAT BMI SKIP07 ; DOING DRAGON SCREEN LDA PLRCTL ; LOAD STICK LDX PLAYNO BEQ SKIP09 ASL ASL ASL ASL SKIP09 AND #$20 BNE SKIP23 STA PLAYERDX ;KNEELING MAN CAN'T MOVE LDA #MAN4 & $FF BNE SKIP75 SKIP23 SKIP07 LDA PLAYERDX ORA PLAYERDY BNE SKIP76 DOMAN0 LDA #(MAN0 & $FF) ;FORCE STILL PICTURE BEQ SKIP75 SKIP76 LDA PLAYERID CMP #(MAN2 & $FF) BCS DOMAN0 ADC #$10 SKIP75 STA PLAYERID OUT16 ; SET UP SCORE FOR VERSION NUMBER BIT FLAGS ; SET UP VERSION NUMBER NOLOGO BVC OUT03 LDA GAMNUM AND #$1 LSR STA SCOREM0 ADC #1 STA SCOREL0 LDA GAMNUM LSR TAX INX STX SCOREH0 OUT03 ; ; REMOVE ONE EMPTY SLOT IN LIST OF P0'S ; LDX #0 STX T0 ; LOOP2 LDY P0YS,X CPY #DEAD BNE SKIP08 INC T0 LOOP3 INX ; BUMP LOOP COUNT CPX #NUP0S BNE LOOP2 BEQ OUT06 SKIP08 LDA T0 BEQ LOOP3 ;READING VLID ENTRY LOOP4 LDA P0ID,X ; GET ID PHA LDA P0XS,X DEX STA P0XS,X PLA STA P0ID,X STY P0YS,X INX ; POINT TO OLD ENTRY INX ; POINT OVER LDY P0YS,X CPX #NUP0S ; CHECK FOR MAX BNE LOOP4 OUT06 ; ; ROOM CLEAR? ; LDX #NUP1S-1 LDA #(SPACE10 & $FF) ENDLOOP CMP P1ID,X BNE OUT11 DEX BNE ENDLOOP ; LDA #(ODOOR & $FF) STA P1ID+NUP1S-1 STX P1HMS+NUP1S-1 ; X = 0 OUT11 ; ; FIREBALL BIRTH ; BIT GAMESTAT ;DON'T DO IF CASTLE SCREEN BPL OUT10 LDX #$FF LDA PLAYERY ; IF PLAYER HIDDEN, QUIT BEQ OUT10 ;SCAN LIST TO FIND AVAILABLE SLOT SERCHLP INX CPX #NUP0S-1 BCS OUT10 LDA P0YS,X CMP #DEAD BNE SERCHLP ;FOUND A SLOT GOTONE CPX #0 ;ALREADY TOP OF LIST? BEQ SKIP17 DEX ;SEE IF ROOM LDA P0YS,X CMP #42 ;MIN SEPARATION BCC OUT10 INX ;ROOM TO SPARE SKIP17 LDA DRAGONX ADC #$14 ;OFFSET TO DRAGON HEAD BIT DRAGONDX ;TRAVEL LEFT OR RIGHT BPL SKIP16 ;RIGHT SBC #$12 SKIP16 STA T0 ;CHECK FOR PRESENSE IN FLAME WINDOW CMP PLAYERX BCC SUBT0 SBC PLAYERX BCS SKIP29 ;ALWAYS TAKEN ; SUBT0 LDA PLAYERX SEC SBC T0 SKIP29 CMP #WINDOW BCS OUT10 LDA T0 STA P0XS,X LDA #$10 ;START FLAME TIMER STA DRAGTIME LDA #$40 STA DRAGSTAT ;ENABLE GRAPHICS STX T1 LDX #FIRES ;START SOUND JSR STARTSND LDX T1 LDA #17 ;SET UP FLAME STA EYETOP LDA #10 STA EYEBOT LDA #0 STA P0YS,X LDA #(FB0 & $FF) STA P0ID,X OUT10 INC FRAME BNE NOINC ; CHANGE PLAYER NUMBER IF 2 PLAYER AND GAME OVER BIT FLAGS BVS OUT21 BIT GAMESTAT BVS OUT21 LDA GAMNUM LSR BCC OUT21 LDA PLAYNO EOR #1 STA PLAYNO OUT21 ; INC FRAME+1 BNE NOINC LDA #$F3 STA ATTRACT LDA #$0 STA GAMESTAT NOINC ; ; PLAYER/ FIRE BALL COLLISIONS ; LDA #0 STA T0 BIT GAMESTAT BPL OUT04 LDA PLAYERID ;DONT CX WITH EXPLODING MAN CMP #(SUPINE & $FF) BCS OUT04 LDA PLAYERY ;CHECK FOR Y CX FIRST BEQ OUT04 SEC SBC #16 BCC NEGNUM STA T0 NEGNUM CLC ADC #32 STA T1 ;CHECK IN Y LDX #NUP0S-1 PCXLOOP LDA P0YS,X CMP #DEAD BEQ NEXT07 CMP T0 BCC NEXT07 CMP T1 BCC MAYBE NEXT07 DEX BPL PCXLOOP BMI OUT04 ;CHECK IN X MAYBE LDA PLAYERX SBC #6 BCC NEGNUM1 CMP P0XS,X BCS NEXT07 ;NO CX NEGNUM1 ADC #12 CMP P0XS,X BCC NEXT07 ;COLLISION!! LDA #(DOOR & $FF) STA P1ID LDA #DEAD ;EXPLODE FIREBALL STA P0YS,X LDA #SUPINE & $FF STA PLAYERID LDX #EXSND ;SOUND JSR STARTSND OUT04 ; ; DERIVE HMOVE AND DELAY VALUES FOR OBJECTS ; DOHMS LDX #XEND-XSTART-1 ;LOAD NUMBER OF OBJECTS DOHMOVES LDA P0XS,X ;LOAD XPOS LSR ;/16 LSR LSR LSR SEC ADC P0XS,X LSR LSR LSR LSR STA T0 ;DELAY VALUE CLC ADC P0XS,X AND #$F ;GET HMOVE VALUE 0-E SEC SBC #$7 ;MAKE 0-E FORMAT INTO SIGNED FOR HMOV EOR #$FF ASL ASL ASL ASL ;60 = CLOCK 0 ORA T0 STA P0HMS,X DEX BPL DOHMOVES ; RESET EYE OR FLAME STA HSYNC LDA EYEHM STA BHM AND #$F TAY NOP NOP NOP EYELOOP DEY BPL EYELOOP STA BRES ; SET UP INDIRECT JUMP FOR MOVING FOUR CHAR LDA DRAGONHM LSR LSR LSR LSR TAY LDA DELAYS,Y STA DELAY ;SET UP INDIRECT JUMP LDA #(W11 >> 8) STA DELAY+1 ; ; RESET TOP OF LIST P0 LDA FRAME LSR BCS DOPLYR1 LDA P0HMS LDX #1 STX P0POINT LDX P0ID LDY P0YS CPY #DEAD BNE SKIP11 DOPLYR1 LDA PLAYERHM LDX #NUP0S STX P0POINT LDX PLAYERID LDY PLAYERY SKIP11 STA HSYNC STX P0IND STX P0INDCLR STY P0Y STA P0HM AND #$F ;GET DELAY TAY RLOOPP0 DEY BPL RLOOPP0 STA P0RES STA HSYNC STA HMOV STY CX ;PUT FF INTO CX INY STY P1SIZE STY P0SIZE ; ; LAST LINES BEFORE KERNEL ; LDY #NUP1S ;NUMBER OF BANDS STY P1POINT IF PAL LDX #$A5 ELSE LDX #$A5-15 ;SETUP LINE COUNT ENDIF LDY #0 STY COUNT LDA REFSHAD ;REFLECT PLAYER 1 STA P0REF STA CLRHM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; END OF VERTICAL BLANK ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; VBOUT BIT TIMOUT ;WAIT FOR VERTICAL BLANK OVER BPL VBOUT STA HSYNC STY VBLNK ;ENABLE ELECTRON BEAM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; KERNELS BGINS HERE ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; STY BKCLR BIT GAMESTAT BMI DOCAVE STY PF0 STY PF1 STY PF2 IF PAL LDA #$DA ELSE LDA #$C8 ENDIF STA TIMD64 BNE DOCASTLE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;CAVE TOP KERNEL ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DOCAVE LDY #$03 CAVELOOP STA HSYNC STA HSYNC STA HSYNC LDA CAVE0,Y STA PF0 LDA CAVE1,Y STA PF1 LDA CAVE2,Y DC $8D ; STA PF2 (ABSOLUTE) DC.W PF2 DEY BPL CAVELOOP NOP NOP JMP KENTRY ;MC 33 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; CASTLE KERNALS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DOCASTLE LDA #$15 STA PFCTRL ; LDA #(HFB0 >>8) STA ARRWIND+1 LDX #(HFB0 & $FF) ;HORIZONTAL FIREBALL LDA FRAME AND #4 BNE SKIP41 LDX #(HFB1 & $FF) SKIP41 STX ARRWIND LDX #14 STX T0 ;COUNT FOR ARROW ; LDY #$0A CASLOOP LDX #7 CASLOOP0 STA HSYNC LDA CASTLE0,Y STA PF0 LDA CASTLE1,Y STA PF1 DEX BPL CASLOOP0 DEY BPL CASLOOP INY STA T1 ; LDA RATHM STA T2 ;SAVE HMOVE VALUE AND #$F STA T3 ;HOLD RAT DELAY STA HSYNC NOP NOP LDa ARROWHM LDX #25 ;LINE COUNT STA P1HM AND #$F TAY RESLOOP0 DEY BPL RESLOOP0 STA P1RES STA HSYNC STA HMOV ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;ARROW/RAT/MAN KERNAL ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WALKLOOP STA HSYNC STA P0CLR ;MC 3 LDA T1 ;MC 6 STA P0GR ;MC 9 LDY T0 ;MC 12 LDA (ARRWIND),Y ;MC 17 STA P1GR ;MC 20 LDA #$44 ;MC 22 LOAD RED COLOR STA P1CLR ;MC 25 ; LDA T2 STA P1HM ;MC 31 MKERNEL TXA SEC SBC P0Y TAY AND #$F0 BNE SKIP95 LDA (P0IND),Y STA T1 LDA (P0INDCLR),Y SKIP95 DEX BMI SHIELDK DEC T0 BPL WALKLOOP ; RESET STA HSYNC STA P0CLR LDA T1 STA P0GR LDY T3 ; TXA SEC ; RATLOOP DEY BPL RATLOOP STA P1RES STA HSYNC STA HMOV SBC P0Y TAY LDA (P0IND),Y STA P0GR LDA (P0INDCLR),Y STA P0CLR SKIP04 DEX LDY #$9 STY T0 JMP MKERNEL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SHIELD KERNAL ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SHIELDK LDA P0BPCX ;PLAYER/WALL CX STA HSYNC STA CX LDA #0 STA P1GR STA P0GR STX P0REF STX PF0 STX PF1 STX PF2 LDY #$11 NOP STA P1RES ;MC 30 STY PFCTRL LDA #3 STA P1SIZE STA P0SIZE LDX WAVENO LDA DRAGCLR,X STA P0RES ;MC 51 AND ATTRACT STA P1CLR STA P0CLR LDX #9 STA HSYNC LDA CAVESHAD EOR #$2 AND ATTRACT STA PFCLR STA HSYNC SHIELDLP STA HSYNC LDA SHIELD,X STA P1GR STA P0GR DEX BPL SHIELDLP ; ; STA HSYNC LDY #$80 STY PF1 STY PF2 IF PAL LDY #30 ELSE LDY #20 ENDIF MOATLOOP STA HSYNC DEY BPL MOATLOOP LDA SEA STA BKCLR STA HSYNC IF PAL LDA #$B4 ELSE LDA #$84 ENDIF AND ATTRACT STA BKCLR ; ; RETURN TO MAIN SCREEN ; JMP TIMLOOP1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; CASTLE SCREEN ROUTINES ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOVERAT LDA PLAYERID CMP #(SUPINE & $FF) BCS SKIP06 LDA PLAYERX CMP #12 BCS SKIP06 JMP SETUPDR SKIP06 ; ; MOVE RATS AND ARROWS ; LDX #1 MRATLOOP LDY RATTIME,X BEQ MOVE DEC RATTIME,X BNE NEXT08 STX T1 LDX #FIRES JSR STARTSND LDX T1 MOVE TXA TAY LDA RATHM,X MOVELOOP SEC SBC #$10 BVC NOWRAP SEC SBC #$F NOWRAP CMP #$CA BNE SKIP02 LDA #$60 SKIP02 CMP #$40 BNE SKIP03 LDA RAND AND #$1F ADC WAVENO EOR #$3F ASL STA RATTIME,X LDA #$40 BNE NEXT09 SKIP03 DEY BPL MOVELOOP NEXT09 STA RATHM,X NEXT08 DEX BPL MRATLOOP ; ; JUMP ; J BIT GAMESTAT BVC OUT18 LDA PLAYERDY BNE SKIP24 LDY PLAYERID CPY #(SUPINE & $FF) BCS OUT18 LDX PLAYNO LDY TRIG0,X BMI SKIP24 LDX #JUMPS JSR STARTSND LDA #12 STA JUMPTIME LDA #1 STA PLAYERDY ; SKIP24 CLC ADC PLAYERY STA PLAYERY BNE SKIP27 STA PLAYERDY SKIP27 CMP #$9 BCC OUT18 ; AT TOP OF JUMP DEC PLAYERY DEC JUMPTIME BNE OUT18 LDY #$FF STY PLAYERDY OUT18 ; ; CX ; LDA PLAYERID ;DONT CX WITH EXPLODING MAN CMP #(SUPINE & $FF) BCS OUT19 BIT PPMMCX BPL OUT19 BIT CX BMI OUT19 ;LEAVE IF TOUCHING WALL LDA #(SUPINE & $FF) STA PLAYERID LDX #EXSND ;TURN ON EXPLOSION JSR STARTSND LDA #$4A STA ARROWHM ;START FIREBALLS AGAIN STA RATHM LDA #0 STA RATTIME STA ARROWTIM OUT19 STA CCLR RTS ; ; MORE SUBROUTINES ; SETUPCA ROL GAMESTAT CLC ROR GAMESTAT LDA #$60 STA ARROWHM STA RATHM LDA #$8C STA PLAYERX LDA #NUP1S-1 STA NEWCNT ; ; CLEAR P0 LISR ; LDX #NUP0S-1 LDA #DEAD KILLLOOP STA P0YS,X DEX BPL KILLLOOP LDA #0 STA ARROWTIM STA RATTIME STA PLAYERDX STA PLAYERDY STA PLAYERY STA DRAGSTAT RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; MAIN KERNEL ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG $1500 LDZERO0 NOP ;MC 49 NOP ;MC 51 LDA #0 ;MC 53 STA T1 ;MC 56 BEQ SKIP10 ;MC 59 TOENDK JMP ENDK LOOP1 STA P0CLR ;MC 73 LDA T1 ;MC 76 ; KERNEL STA P0GR ;MC 3 LDA (P1IND),Y ;MC 8 STA P1GR ;MC 11 LDA (P1INDCLR),Y ;MC 16 STA P1CLR ;MC 19 ; JSR WASTE12 DEX KENTRY TXA ;MC 35 SEC ;MC 37 SBC P0Y ;MC 40 TAY ;MC 42 AND #$F0 ;MC 44 BNE LDZERO0 ;MC 46/47 LDA (P0IND),Y ;MC 51 STA T1 ;MC 54 LDA (P0INDCLR),Y ;MC 59 SKIP10 DEC COUNT ;MC 64 LDY COUNT ;MC 67 BPL LOOP1 ;MC 69/70 ; ; LINE 11 SETUP P1 ; DEC P1POINT ;MC 74 BMI TOENDK ;END KERNEL STA P0CLR ;MC 3 LDA T1 ;MC 6 STA P0GR ;MC 9 ;SETUP P1 LDY P1POINT ;MC 12 LDA PPMMCX ;MC 15 P1/P0 CX BPL EQUTIME ;MC 17/18 STY CX ;MC 20 SAVE LINE NUM OF CX EQUTIME STY CCLR ;MC 23 CLEAR CX LDA P1ID,Y ;MC 27 STA P1IND ;MC 30 STA P1INDCLR ;MC 33 LDA P1HMS,Y ;MC 37 STA P1HM ;MC 40 SET UP HMOVE DEX ;MC 42 AND #$F ;MC 44 GET DELAY VALUE STA T0 ;MC 47 JMP SKIP05 ;MC 50 ; ; ; LDZERO2 LDA #0 TAY BEQ SKIP12 LDZERO4 LDA #0 BEQ SKIP13 ; ; SKIP05 TXA ;MC 52 SEC ;MC 54 SBC P0Y ;MC 57 TAY ;MC 59 AND #$F0 ;MC 61 BNE LDZERO2 ;MC 63/64 LDA (P0IND),Y ;MC 68 STA P0GR ;MC 71 SKIP12 ; ; LINE 12 RESET P1 KERNEL ; STA HSYNC LDA (P0INDCLR),Y ;MC 5 STA P0CLR ;MC 8 DEX ;MC 10 SEC ;MC 12 ;PREPARE FOR P0 TXA ;MC 14 LDY T0 ;MC 17 RESETLP DEY ;MC 19 BPL RESETLP ;MC 21/22 STA P1RES ;MC 24 ; SBC P0Y ;MC 73 STA HSYNC ;MC 76 ; ; LINE 13 CHECK FOR P0 RESET ; TAY ;MC 2 AND #$F0 ;MC 4 BNE LDZERO4 ;MC 6/7 LDA (P0INDCLR),Y ;MC 11 STA P0CLR ;MC 14 LDA (P0IND),Y ;MC 19 STA P0GR ;MC 22 SKIP13 STA T1 ;MC 25 (15 IF NO P0) TXA ;MC 27 ; LDY P0POINT ;MC 42 DEX ;MC 44 CMP P0Y ;MC 48 BCS NORESET ;MC 50/51 ; IF THIS PATH IS TAKEN, NO P0, SO MAX COUNT IS 39 CPY #NUP0S ;MC BEQ DOPLYR ;MC LDA P0YS,Y ;MC 43 ; CMP #DEAD ;MC BNE SKIP99 ;MC ;PUT PLAYER ON SCREEN DOPLYR LDA PLAYERHM ;MC STA P0HM ;MC AND #$F ;MC STA T2 ;MC LDA PLAYERY ;MC STA P0Y ;MC LDA PLAYERID ;MC JMP CONT0 ;MC SKIP99 STA P0Y ;MC 56 LDA P0HMS,Y ;MC STA P0HM ;MC 46 AND #$F ;MC STA T2 ;MC 49 LDA P0ID,Y ;MC 66 INY ;MC CONT0 STA HSYNC ;MC 74 ; ; LINE 14 RESET P0 ; STA P0IND ;MC STA P0INDCLR ;MC STY P0POINT ;WASTE 3 LDY T2 ;MC NOP ;MC DEX ;MC 17 RP0LP DEY ;MC 19 BPL RP0LP ;MC 21/22 STA P0RES ;MC 24/? ; ; LINE 15 SETUP TO RETURN TO MAIN KERNEL ; STA HSYNC ;MC STA HMOV ;MC 3 NOP ;MC 5 NOP ;MC 7 NOP ;MC 9 JMP AENTRY ;MC 12 ; TOENDK1 JMP ENDK ; ; LINE 13 NO P0 RESET, RUN INSTEAD OF P0 RESET ; NORESET TXA ;MC 53 SEC ;MC 55 SBC P0Y ;MC 58 TAY ;MC 60 AND #$F0 ;MC 62 BNE SKIP14 ;MC 64/65 LDA (P0IND),Y ;MC 69 STA T1 ;MC 72 SKIP14 ; ; LINE 14 MAPS TO P0 RESET LINE ; STA HSYNC ;MC 75 MAX LDA T1 ;MC 3 STA P0GR ;MC 6 LDA (P0INDCLR),Y ;MC 11 STA P0CLR ;MC 14 DEX ;MC 16 TXA ;MC 18 SEC ;MC 20 SBC P0Y ;MC 23 TAY ;MC 25 AND #$F0 ;MC 27 BNE LDZERO3 ;MC 29/30 LDA (P0IND),Y ;MC 44 STA T1 ;MC 47 SKIP15 LDA (P0INDCLR),Y ;MC 52 STA HSYNC ;MC 55 ; ; LINE 15 MAPS TO P1 SETUP LINE ; STA HMOV ;MC 3 STA P0CLR ;MC 6 LDA T1 ;MC 9 STA P0GR ;MC 12 AENTRY DEX ;MC 14 NOP ;MC 16 NOP ;MC 18 NOP ;MC 20 NOP ;MC 22 LDA #10 ;MC 24 SET UP LINE COUNT FOR KERNEL STA COUNT ;MC 27 STA CLRHM ;MC 30 JMP KENTRY ;MC 33 ; LDZERO3 LDY #0 BEQ SKIP15 ENDK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; DRAGON KERNEL ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LDA DRAGSTAT ; TURN ON FLAME? ROL ROL ROL ROL STA BGR ; LDX WAVENO LDA #$4C ; FLAME COLOR STA PFCLR ; LDY #0 STY P0GR IF PAL LDA #$C0 ELSE LDA #$C0 ENDIF STA TIMD8 ; RESET PLAYERS FOR DRAGON INY STY P1SIZE STY P0SIZE LDA DRAGONHM STA HSYNC STA P1HM CLC ADC #$10 STA P0HM NOP AND #$0F TAY DRLOOP DEY BPL DRLOOP STA P1RES ; POSITION PLAYERS STA P0RES ;LAST LINE BEFORE KERNEL STA HSYNC STA HMOV TAY DELLOOP DEY BPL DELLOOP JMP (DELAY) ;MC 14 JUMP TO PROPER TIME WASTER ; ; KERNEL ENTRY POINTS ; WASTE 5-11 CYCLES (INCLUDING INDIRECT JUMP) ; W11 DC $A9 ; LDA IMMED (LDA #A9,LDA #A9,LDA $EAA5 = 8) W10 DC $A9 ; (LDA #A9, LDA #AD, LDA $EA = 7) W9 DC $A9 ; (LDA #A9, LDA $EAA5 = 6) W8 DC $A9 ; (LDA #AD, LDA $EA = 5) W7 DC $AD ; LDA ABS (LDA $EAA5 = 4) W6 DC $A5 ; LDA ZP (LDA $EA = 3) W5 DC $EA ; NOP (NOP= 2) DKERNEL LDA DRAGCLR,X AND ATTRACT STA P1CLR STA P0CLR NOP LDY #15 KERLOOP CPY EYETOP BCS OFF CPY EYEBOT ROL ROL NOP SKIP25 STA BGR JMP SKIP26 OFF LDA ATTRACT ;WASTE 3 MC LDA #0 BEQ SKIP25 SKIP26 LDA DRAGONDX STA P1REF STA P0REF NOP NOP NOP NOP ; ; LDA (DRAGH3),Y ;MC 42 STA P1GR ;MC 45 LDA (DRAGH2),Y ;MC 50 STA P0GR ;MC 53 LDA (DRAGH1),Y ;MC 58 TAX ;MC 60 LDA (DRAGH0),Y ;MC 65 STX P1GR ;MC 68 STA P0GR ;MC 71 ; DEY ;MC 73 BPL KERLOOP ;MC 75/76 INY STY P1GR STY P0GR ; TIMLOOP1 LDA TIMER BNE TIMLOOP1 STA HSYNC LDA CAVESHAD ; HOLD COLOR STA PFCLR LDX #$FF STX PF1 STX PF0 STX PF2 LDA #4 ; WHICH SCORE? CLC ADC PLAYNO TAY LDA #(SPACE & $FF) STA T2 ; STORE SPACE FOR ZERO SUPRESSION LDA #(NUMBERS >>8 ) STA SIXIND0+1 STA SIXIND0+3 STA SIXIND0+5 STA SIXIND0+7 STA SIXIND0+9 STA SIXIND0+11 STA CLRHM ; ; WRITE SCORE INDIRECTION ; LDX #11 SIXILOOP DEX LDA SCOREL0,Y STY T0 ; HOLD INDEX PHA ; SAVE SCORE BYTE AND #$F0 LSR ADC #(N0 & $FF) CMP #(N0 & $FF) BNE SKIP89 ; NON ZERO ; LDA T2 BNE SKIP88 SKIP89 LDY #(N0 & $FF) STY T2 ; MAKE T2 "ZERO" SKIP88 STA SIXIND0,X DEX PLA ; GET SCORE BYTE DEX AND #$F ASL ASL ASL ADC #(N0 & $FF) ; CARRY WAS ALWAYS CLEAR CMP #(N0 & $FF) BNE SKIP86 ; LDA T2 BNE SKIP85 SKIP86 BIT FLAGS BVS SKIP85 LDY #(N0 & $FF) STY T2 SKIP85 STA SIXIND0,X DEX CPX #4 ; ALWAYS STOP ZPRESS BCS SKIP84 BIT FLAGS ; DONT SSTOP ZPRESS IF VERSION SHOWN BVS SKIP84 LDY #(N0 & $FF) STY T2 SKIP84 LDY T0 DEY DEY BPL SIXILOOP ; STA HSYNC LDY #1 LDX PLAYNO ; POINT TO PLAYER UP LDA SCORECLR,X AND ATTRACT STA P0CLR STA P1CLR LDA #0 STA P1REF STA P0REF LDA #3 ; DO SCORE RESET STA P1SIZE ; TRIPLE COPIES CLOSE STA P0SIZE LDA #$F0 STA P1RES STA P0RES STA P1HM STA HSYNC STA HMOV STY P1VDEL STY P0VDEL ; ; DO SIX CHAR TWICE ; LDY #$07 JSR SIXCHAR ; LDX PLAYNO LDY LIVES,X LDX #10 ; POINT INTO INDIRECTION LDA #(MAN & $FF) LIFELOOP DEY BPL WSPACE LDA #(SPACE & $FF) WSPACE STA SIXIND0,X NEXT04 DEX DEX BPL LIFELOOP LDY #4 JSR SIXCHAR STY P1VDEL STY P0VDEL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; OVERSCAN ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OVSCAN IF PAL LDA #$37 ELSE LDA #$23 ENDIF STA TIMD64 LDA #2 STA VBLNK ; ; WRITE CASTLE COLR ; LDY WAVENO LDA COLORS,Y AND ATTRACT STA CAVESHAD ; ; COUNT DOWN SELECT TIMER ; LDA SELTIME BEQ SKIP44 DEC SELTIME SKIP44 ; ; SKIP CX IF CASTLE SCREEN ; BIT GAMESTAT BMI DRAGCX JSR MOVERAT JMP NOCX ; ; P0/P1 CX DETECT ; DRAGCX LDA FRAME LSR BCC NOCX LDX #$FF BIT PPMMCX BMI SKIP20 LDX CX BMI NOCX SKIP20 INX STX CX ; CX POINTS TO HIT P1 LDA CX BNE SKIP21 ; NOT BOTTOM DOOR ; COLLISION WITH BOTTOM DOOR LDA PLAYERDX ; PLAYER MOVING RIGHT? BMI NOCX ; NO BEQ NOCX ;NO HIDE LDA #0 STA PLAYERY ; HIDE PLAYER STA PLAYERDY LDA #$80 STA PLYRSTAT LDA #(DOOR & $FF) ; CLOSE DOOR STA P1ID BNE NOCX ; LEAVE ; TOP DOOR CX SKIP21 LDA P1ID,X CMP #(ODOOR & $FF) ; OPEN DOOR? BNE SKIP22 ;NO LDA #1 JSR SCORE LDX #7 ;START SCORE SOUND JSR STARTSND ; END WAVE HERE LDA GAMNUM LSR BCC NEWWAVE ; ONE PLAYER VERSION ; 2 PLAYER LDA PLAYNO EOR #1 TAX LDY LIVES,X ;OTHER PLAYER DEAD? BMI SKIP36 TAX ; PLAYER NUM STA PLAYNO BNE OUT22 NEWWAVE SKIP36 LDY WAVENO INY CPY #9 BCS SKIP37 STY WAVENO SKIP37 OUT22 JSR SETUPCA BEQ NOCX SKIP22 ; ; SCORING VALUES ; LDY #$FF LDA P1ID,X SCLOOP INY CMP BRKS,Y BCS SCLOOP SCONE LDA #(SPACE & $FF) STA P1ID,X LDX SCORESND,Y ; START SCORING SOUND JSR STARTSND LDA SCORES,Y ASL JSR SCORE NOCX OUT05 STA CCLR ; ; TURN OFF FLAMING IF TIMED OUT ; LDY DRAGTIME BEQ STOPFL DEC DRAGTIME BNE OUT17 ; TURN OFF FALAMING BIT OF DRAGSTAT STOPFL LDA #0 STA DRAGSTAT LDY #6 STY EYETOP DEY STY EYEBOT OUT17 ; ; DELTA FIREBALLS ; LDA FPCTL ; DO FIREBALL SPEED WITH WAVENO E DIFF ASL ; SHIFT DIFFICULTY TO CARRY LDX PLAYNO BNE SKIP34 ASL SKIP34 LDY WAVENO LDA #0 ADC FBSPEEDS,Y STA T0 LDX #NUP0S-1 DEFBLOOP LDA P0YS,X CMP #DEAD BEQ NEXT05 ADC T0 ; FIREBALL SPEED IF PAL CMP #$95+15 ELSE CMP #$95 ENDIF BCC OKXX LDA #DEAD OKXX SKIP18 STA P0YS,X NEXT05 DEX BPL DEFBLOOP ; ; GAME RESET AND GAME SELECT ; BIT GAMESTAT ; RESET GAME ON TRIGGER IF GAME OVER BVS SKIP46 BIT TRIG0 BPL NWGAME SKIP46 LDA FPCTL LSR BCC NWGAME LSR BCS CONTVB ;SELECT SWITCH PRESSED LDA SELTIME BNE GMCONT LDA #$1F STA SELTIME LDA #0 STA PLAYNO STA GAMESTAT LDA #150 STA PLAYERX STA PLAYERY LDA #$C0 ; SET D6-D7 OF FLAGS STA FLAGS INC GAMNUM LDA GAMNUM AND #7 ; VERSIONS 0-7 ONLY STA GAMNUM BPL GMCONT NWGAME LDA #$81 ; GAME RESET BRINGS YOU HERE STA FLAGS ; TURN OFF LOGO (SET D7) ; ; START NEW GAME ; LDX #ZEND-ZSTART-1 LDA #0 ZEROLOOP STA ZSTART,X DEX BPL ZEROLOOP LDA #6 STA LIVES STA LIVES+1 JSR SETUPCA ; SET UP CASTLE SCREEN LDA #$40 ; YOU HERE STA GAMESTAT ; TURN OFF SOFT ATTRACT LDA GAMNUM AND #$FE STA WAVENO ; SKIP WAVES ACCORDING TO GAME NUMBER GMCONT LDA #$FF ; SELECT SWITCH BRINGS YOU HERE STA ATTRACT CONTVB ; NO SWITCHES BRINGS YOU HERE ; ; DRAGON INTELLIGENCE ; ; WRITE MAX DRAGON SPEED LDA WAVENO LSR TAX INX INX STX T2 ; MAX SPEED LDA FRAME AND #$3 BNE OUT12 LDX PLAYERX LDA PLAYERY BNE SKIP35 LDX #80 ; IF PLAYER HIDDEN, USE CENTER SKIP35 STX T1 LDA DRAGONX LDX DRAGONDX BMI GOLEFT ADC #$19 GOLEFT ; ; DRAGON IGNORANVE WINDOW ; LDY WAVENO CMP T1 BCS NORIGHT ; DRGON < PLAYERX STA T0 ; STORE DRAGON POSITION LDA T1 SEC SBC T0 ; GET DIFFERENCE CMP MINDMAX,Y ; TABLE OF IGNORANCE WIDTHS BCC OUT12 ; IN WINDOW, DO NOTHING GORIGHT INX BEQ GORIGHT BNE WRITEDX ; DRAGON > PlAYERX NORIGHT SEC SBC T1 CMP MINDMAX,Y BCC OUT12 NOZERO0 DEX BEQ NOZERO0 WRITEDX TXA BPL WRMAX ; CHECK ABS VALUE AGAINST DRAGMAX EOR #$FF ADC #0 ; CARRY ALWAYS SET WRMAX CMP T2 BCS NOWRITE STX DRAGONDX NOWRITE OUT12 ; ; DELTA DRAGON ; LDA DRAGONDX CLC ADC DRAGONX CMP #129 BCS WRAP ;IF 0>A>130 THEN IT WRAPPED STA DRAGONX BCC OUT01 ;COMPLEMENT DELTA WRAP LDX #1 BIT DRAGONDX BMI STOP LDX #$FF STOP ; TURN ON HOMING ONLY IF D1 SET OUT13 STX DRAGONDX OUT01 ; ; WRITE LO INDIRECTION FOR DRAGON LDA DRAGONAN ;DRAGON ANIMATION COUNTER ROR ROR ROR AND #$C0 ;PUT ANIM NUMBER INTO D6-D7 LDX #$10 BIT DRAGSTAT BVC SKIP31 LDA #$C0 ;FLAMING GRX LDY DRAGONDX BVS SKIP92 SKIP31 LDY DRAGONDX BNE SKIP92 LDA #$80 ;STILL GRX BMI SKIP93 SKIP92 BPL SKIP93 CLC ADC #$30 LDX #$F0 SKIP93 STX T0 LDX #7 ;POINT TO INDIRECTION LDY #(DRAGON0 >> 8) INDLOOP STY DRAGH0,X DEX STA DRAGH0,X CLC ADC T0 DEX BPL INDLOOP ; ; ANIMATE DRAGON ; LDA FRAME AND #3 BNE OUT02 DEC DRAGONAN BPL SKIP91 LDA #2 STA DRAGONAN SKIP91 OUT02 ; ; ALTER SIGNED DELTAS ACCORDING TO STICK ; LDA PLRCTL ;GET STICK LDX PLAYNO ;TWO PLAYER? BEQ SKIP90 ASL ASL ASL ASL SKIP90 LDX #0 LDY #0 BIT GAMESTAT ;SOFT ATTRACT ON? BVC OUT07 ; GO IF SO PHA LDA SND1 CMP #EXSND PLA BCS OUT07 PHA LDA PLAYERID ;EXPLODING MAN CMP #(SUPINE & $FF) PLA BCS OUT07 ; ; SEE IF PLAYER WAITING OUTSIDE ; LEFT STICK STARTS GAME ; BIT GAMESTAT BPL OUT08 BIT PLYRSTAT BPL OUT08 ; ; WAITING FOR INPUT ; AND #$F0 ;GET TOP NIBBLE CMP #$B0 ;LEFT STICK? BNE OUT07 ;NO STICK ; ;LEFT STICK LDA #(ODOOR & $FF) STA P1ID LDA #16 STA PLAYERY LDA #$88 STA PLAYERX LDA #0 ;RESET D7 OF PLYRSTAT STA PLYRSTAT ; OUT08 ASL ;GET RIGHT BCS NR INX ;MARK RIGHT NR ASL BCS NL DEX ;MARK LEFT NL ASL BCS ND DEY ;MARK DOWN ND ASL BCS NU INY ;MARK UP NU OUT07 ; ; ALTER DELTAS ACCORDING TO X AND Y ; BIT GAMESTAT BMI SKIP32 LDA P0IND CMP #(MAN4 & $FF) ;KNEELING MAN? BEQ OUT20 LDA PLAYERY BNE OUT20 ;DONT CHANGE DELTA IF IN AIR SKIP32 TXA PHP BEQ SKIP28 LSR FRAME+1 SKIP28 TYA PHP LDX #1 BIT GAMESTAT BMI SKIP96 PLP ;DONT DO Y'S IF CASTLE DEX SKIP96 ALTLOOP LDA PLAYERDX,X PLP ;GET SIGN OF DELTADELTA BNE SKIP94 ;GO IF STICK PRESSED ;DECAY DELTA ORA #0 ;DELTA ZERO ? BEQ ABORT0 ;DONT CHANGE IF SO BPL NEGDELT ;POS, DECREASE BMI POSDELT ;NEG, INCREASE SKIP94 PHP CPX #0 ;DOING X? BNE SKIP77 STA REFSHAD SKIP77 PLP BMI NEGDELT ; POS DELTA, ADD POSDELT CLC ADC #$7F/4 BCS OK00 ;GO TO POSITIVE IS OK BVS ABORT0 ;DONT OVERFLOW TO NEGATIVE BVC OK00 ;NEGATIVE DELTA NEGDELT SEC SBC #$7F/4 BCC OK00 ;WRAP TO NEGATIVE OK BVS ABORT0 OK00 STA PLAYERDX,X ABORT0 DEX BPL ALTLOOP OUT20 ; ; APPLY DELTAS TO 16 BIT POSITION ; X=0 DELTA X, X=1 DELTAY ; LDX #1 DELTLOOP LDY #0 ;SPEED FOR CASTLE BIT GAMESTAT ;WHICH SCREEEN? BPL SKIP33 INY LDA WAVENO CMP #4 BCC SKIP33 INY SKIP33 LDA PLAYERDX,X ;LOAD DELTA ASL BCS SUBDELTA ;ADD DELTA ADDDELT CLC PHA ADC PLAYERLX,X STA PLAYERLX,X BCC NOCARRY0 LDA PLAYERX,X ADC #0 CMP MAXLIMS,X ;CHECK AGAINST MAX VALUE BCS NOCARRY0 STA PLAYERX,X NOCARRY0 PLA DEY BPL ADDDELT BMI CONT01 ;SUBTRACT DELTA SUBDELTA ROR ;RESTORE SIGN CMP #$80 ;FUCKING SPECIAL CASE BNE SKIP97 LDA #$81 SKIP97 EOR #$FF ;COMPLEMENT CLC ADC #1 ASL ;*2 STA T0 SUBLOOP LDA PLAYERLX,X SEC SBC T0 STA PLAYERLX,X BCS CARRY0 LDA PLAYERX,X SBC #0 BCC CARRY0 ;BOTTOM LIMIT CMP MINLIMS,X BCC CARRY0 STA PLAYERX,X CARRY0 DEY BPL SUBLOOP CONT01 DEX BPL DELTLOOP ; ; SET UP PLAYER 0 ; NEWBOARD LDX NEWCNT BEQ OUT09 LDA RAND AND #$7 CLC ADC WAVENO TAY LDA TREATABL,Y STA P1ID,X ;DRIVE XPOS LDA RANDH AND #$F TAY LDA RANDH CPY #$A ;RIGHT MAX BCC INRANGE AND #$F7 ;ZERO D3 ADC #1 INRANGE AND #$EF ;DISALLOW ODD HMOVE VALUES STA P1HMS,X DEC NEWCNT ;SET UP LOWER DOOR DODOORS LDA #(DOOR & $FF) STA P1ID LDA #$88 STA P1HMS ; OUT09 ; JSR SOUND ; ; SET UP SEA COLOR ; LDA FRAME AND #$7 BNE OUT100 LDA RAND AND #$7 IF PAL ORA #$B0 ELSE ORA #$80 ENDIF STA SEA OUT100 ; ; ANIMATE FIREBALLS ; BIT GAMESTAT BPL OUT15 LDA FRAME AND #$3 ;FASTEST RATE BNE OUT15 LDX #NUP0S-1 ALOOP1 LDA P0YS,X CMP #DEAD BEQ NEXT01 LDA P0ID,X ;MOVING FIREBALL EOR #$10 SKIP00 STA P0ID,X NEXT01 DEX BPL ALOOP1 OUT14 ; ; ANIMATE TREASURES ; LDX #NUP1S-1 ALOOP0 LDA P1ID,X CMP #(TREAS & $FF) BCS NEXT02 ;ANIMATED TREASURES ATR LDY #6 ALOOP2 DEY CMP ATABLE,Y BNE ALOOP2 TYA EOR #1 TAY LDA ATABLE,Y STA P1ID,X NEXT02 DEX BPL ALOOP0 OUT15 ; OVOUT BIT TIMOUT ;WAIT FOR OVERSCAN TIMEOUT BPL OVOUT JMP SCRNTOP ; NEW FRAME ! ; ; ; SUBROUTINES ; ; SETUP DRAGON SCREEN ; SETUPDR LDA #$C0 STA GAMESTAT LDA #0 STA BKCLR STA PLAYERDY STA PLAYERY STA DRAGONX LDA #1 STA DRAGONDX LDA #$80 STA PLYRSTAT RTS ; ; START SOUND, HIGHTEST NUBER GET PRIOITIY ; X HAS SOUND NUMBER ; Z FLAG RESET ON RETURN STARTSND LDA SNDNOS,X CMP SND1 BCC OUT25 STA SND1 LDA SNDTIMS,X STA SND1TIME OUT25 RTS ; ; SCORING VALUES ; SCORES DC $82 DC $81 DC $30 DC $08 ; TOP OF DRAGONS CAVE GRAPHICS CAVE0 DC $00,$60,$FF,$FF CAVE1 DC $00,$DB,$FF,$FF CAVE2 DC $00,$B6,$FF,$FF ; ; CASTLE COLORS ; IF PAL COLORS DC $0A,$7A,$2A,$3A,$7A,$BA,$5A,$AA,$8A ELSE COLORS DC $0A,$BA,$1A,$DA,$BA,$7A,$CA,$6A,$5A ENDIF ;FIREBALL SPEEDS FBSPEEDS DC 2,2,2,2,2,3,3,3,4 ;SKIP TO PAGE BOUNDRY ORG $1B00 ; DRAGON 3 DRAGON8 DC $2E, $6C, $F9, $FF, $BF, $3F, $7F, $FF DC $F7, $E0, $E0, $60, $30, $19, $1F, $0E DRAGON9 DC $00, $F0, $FC, $FF, $FF, $FF, $FF, $8F DC $07, $03, $81, $4F, $C3, $9E, $02, $3E DRAGON10 DC $70, $61, $F9, $F1, $FF, $FF, $FC, $F8 DC $F1, $E0, $80, $00, $00, $02, $00, $10 DRAGON11 DC $00, $20, $90, $F8, $FF, $EF, $F8, $70 DC $E0, $00, $00, $00, $40, $00, $00, $00 ; DRAGON 2 DRAGON4 DC $38, $70, $F8, $7F, $3F, $3F, $FF, $FF DC $F3, $E0, $60, $30, $11, $1F, $0E, $00 DRAGON5 DC $00, $78, $FE, $FF, $FF, $FF, $FF, $CF DC $87, $C3, $47, $C1, $8F, $02, $1E, $00 DRAGON6 DC $EC, $D9, $F9, $F1, $FF, $FF, $FC, $F8 DC $F1, $E0, $80, $00, $00, $00, $00, $00 DRAGON7 DC $00, $20, $90, $F8, $FF, $EF, $F9, $70 DC $E0, $00, $04, $08, $10, $40, $00, $00 ; DRAGON 1 DRAGON0 DC $7E, $30, $71, $7B, $7F, $3F, $7F, $FF DC $F7, $E0, $E0, $60, $30, $19, $1F, $0E DRAGON1 DC $00, $F0, $FC, $FF, $FF, $FF, $FF, $8F DC $07, $03, $87, $41, $CF, $82, $1E, $21 DRAGON2 DC $38, $61, $E1, $F1, $FF, $FF, $F8, $F0 DC $E1, $C0, $80, $00, $00, $00, $00, $00 DRAGON3 DC $00, $20, $90, $F8, $FF, $EF, $F9, $70 DC $E1, $02, $04, $04, $08, $00, $00, $00 ;FLAMING DRAGON DRAGON12 DC $7E, $30, $71, $7B, $7F, $3F, $7F, $FF DC $F7, $E0, $E0, $60, $30, $19, $1F, $0E DRAGON13 DC $00, $F0, $FC, $FF, $FF, $FF, $FF, $8F DC $07, $03, $87, $41, $CF, $82, $1E, $21 DRAGON14 DC $70, $6E, $F8, $FC, $FF, $FF, $FB, $F1 DC $EB, $CB, $8F, $06, $03, $03, $07, $0E DRAGON15 DC $00, $00, $00, $00, $00, $80, $C0, $C0 DC $F0, $E0, $E8, $F0, $E0, $30, $10, $18 MAN0 DC $00, $C2, $42, $4E, $58, $50, $70, $30 DC $30, $70, $78, $3C, $38, $60, $60, $60 MAN1 DC $00, $60, $20, $24, $3C, $38, $30, $30 DC $30, $30, $70, $38, $30, $60, $60, $60 MAN2 DC $00, $18, $28, $18, $38, $70, $70, $30 DC $30, $30, $F4, $B4, $38, $60, $60, $60 MAN4 DC $00, $7C, $60, $3C, $0E, $0E, $7E, $04 DC $0C, $0C, $00, $00, $00, $00, $00, $00 FB0 DC $00, $10, $5A, $1A, $48, $42, $1A, $3C DC $6E, $FE, $3F, $6E, $3A, $3C, $18, $00 FB1 DC $52, $08, $40, $12, $02, $48, $00, $98 DC $3D, $7A, $5E, $FE, $74, $19, $24, $08 SUPINE DC $00, $00, $00, $00, $C2, $4E, $48, $7C DC $3E, $06, $06, $07, $3F, $03, $06, $06 SUPINE1 DC $00, $00, $00, $30, $31, $99, $FF, $38 DC $38, $78, $4C, $4F, $61, $20, $00, $00 SUPINE2 DC $00, $00, $20, $3B, $0A, $0A, $0E, $9C DC $B8, $F0, $FC, $E4, $C4, $C0, $00, $00 HFB0 DC $00, $00, $04, $AA, $1F, $4A, $14, $00 DC $00, $00, $00, $00, $00, $00, $00 HFB1 DC $00 DC $00, $08, $5E, $07, $2F, $8A, $00, $00 DC $00, $00, $00, $00, $00, $00 ; ; SIX CHAR ROUTINE ; SIXCHAR SCKRNL STY T1 ;MC 64 LDA (SIXIND5),Y ;MC 69 STA P1GR ;MC 72 STA HSYNC ;MC 75 (76) LDA (SIXIND4),Y ;MC 5 STA P0GR ;MC 8 LDA (SIXIND3),Y ;MC 13 STA P1GR ;MC 16 LDA (SIXIND2),Y ;MC 21 STA T2 ;MC 24 LDA (SIXIND1),Y ;MC 29 TAX ;MC 31 LDA (SIXIND0),Y ;MC 36 TAY ;MC 38 LDA T2 ;MC 41 STA P0GR ;MC 44 STX P1GR ;MC 47 STY P0GR ;MC 50 STY P1GR ;MC 53 LDY T1 ;MC 56 DEY ;MC 58 BPL SCKRNL ;MC 60/61 INY ; MAKE Y=0 STY P1GR STY P0GR STY P1GR STY P0GR WASTE12 RTS ; ;SCORE ; A HAS BYTE CARRY CLEAR=ADD TO LO, CARRY SET=ADD TO MID SCORE ; SCORE SED LDX PLAYNO ;PLAYER UP BCC SKIP78 ;ADD TO LO BYTE INX ;POINT TO MID BYTE INX SKIP78 CLC SCORLOOP ADC SCOREL0,X STA SCOREL0,X BCC OK01 INX INX LDA #1 CPX #6 BCC SCORLOOP OK01 CLD RTS ; ; TREASURE SCORING DIVISIONS BRKS DC (BRK1 & $FF),(BRK2 & $FF),(BRK3 & $FF),$FF ;PAD TO NEXT PAGE BOUNDRY DC $00, $00, $00 ATREAS DIAMD0 DC $00, $10, $28, $28, $54, $54, $BA, $54 DC $28, $10 DIAMD1 DC $00, $10, $28, $28, $54, $54 DC $BA, $54, $28, $10 CROWN0 DC $00, $7E, $7E, $5A DC $5A, $00, $81, $00, $24, $00 CROWN1 DC $00, $7E DC $7E, $5A, $5A, $00, $00, $42, $18, $00 BRK1 HARPL0 DC $00, $7E, $95, $95, $95, $95, $56, $56 DC $42, $81 HARPL1 DC $00, $7E, $A9, $A9, $A9, $A9 DC $6A, $6A, $42, $81 TREAS CHEST DC $00, $7E, $7E, $7E DC $66, $FF, $54, $28, $00, $00 BRK2 HELMET DC $00, $42 DC $66, $66, $42, $E7, $BD, $BD, $99, $42 CHEST1 DC $00, $7C, $38, $10, $38, $10, $38, $6C DC $AA, $AA BRK3 LAMP DC $00, $3C, $18, $FE, $BF, $AD DC $E1, $00, $00, $00 URN DC $00, $7C, $38, $10 DC $38, $10, $38, $7C, $FE, $FE JUG DC $00, $3C DC $7E, $FF, $BF, $DF, $7E, $3C, $3C, $7E DOOR DC $00, $FF, $FE, $FF, $DF, $FF, $FE, $FF DC $FF, $7E ODOOR DC $00, $8F, $8E, $8F, $8B, $8F DC $8E, $8F, $C7, $7E SPACE SPACE10 DC $00, $00, $00, $00 DC $00, $00, $00, $00, $00, $00 NUMBERS N0 DC $38, $6C DC $C6, $86, $86, $C6, $6C, $38 N1 DC $08, $1C DC $18, $18, $18, $18, $38, $10 N2 DC $FC, $FE DC $62, $30, $18, $8C, $CC, $78 N3 DC $3C, $6E DC $66, $C6, $1C, $0E, $66, $3C N4 DC $08, $1C DC $0C, $FE, $CC, $6C, $3C, $1C N5 DC $FC, $8E DC $0E, $EE, $BC, $80, $FC, $FC N6 DC $7C, $C6 DC $C6, $FC, $C0, $C0, $FC, $78 N7 DC $E0, $E0 DC $70, $30, $18, $8C, $FE, $7E N8 DC $3C, $66 DC $CE, $7C, $64, $C6, $7C, $38 N9 DC $78, $CC DC $0E, $7E, $CE, $CE, $CC, $78 MAN DC $00, $A0 DC $40, $E0, $40 DELAYS DC W8 & $FF DC W8 & $FF DC W8 & $FF DC W7 & $FF DC W7 & $FF DC W7 & $FF DC W6 & $FF DC W6 & $FF DC W11 & $FF DC W11 & $FF DC W10 & $FF DC W10 & $FF DC W10 & $FF DC W9 & $FF DC W9 & $FF DC W9 & $FF ;PAD TO NEXT PAGE BOUNDRY DC $00, $00, $00, $00, $00 ; ; COLORS FOR 16 LINE GRAPHICS MAN0C DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00 DC $44, $44, $44, $44, $44, $18, $18, $12 MAN1C DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00 DC $44, $44, $44, $44, $44, $18, $18, $12 MAN2C DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00 DC $44, $44, $44, $44, $44, $18, $18, $12 MAN4C DC $00, $C8, $C8, $C8, $44, $44, $44, $44 DC $18, $18, $00, $00 SCORESND DC $05, $06, $07, $08 FB0C DC $00, $44, $44, $F6, $44, $44, $44, $44 DC $44, $44, $44, $44, $44, $44, $44, $42 FB1C DC $00, $44, $44, $F6, $44, $44, $44, $44 DC $44, $44, $44, $44, $44, $44, $44, $42 SUPINEC DC $00, $C8, $C8, $C8, $C8, $C8, $C8, $C8 DC $44, $00, $44, $44, $44, $44, $18, $12 SUPINE1C DC $00, $12, $18, $18, $18, $44, $44, $44 DC $44, $C8, $C8, $C8, $C8, $18, $18, $12 SUPINE2C DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00 DC $44, $44, $44, $44, $18, $18, $18, $12 SHIELD DC $00, $38, $44, $6C, $D6, $FE, $C6, $82 DC $82, $00 ; ; RUNTIME SOUND ; SOUND LDA GAMESTAT BEQ TURNOFF ; DISALLOW SOUND DURING ATTRACT LDA SND1TIME BNE SKIP43 STA SND1 ; TUN OFF SOUND ID BEQ TURNOFF SKIP43 DEC SND1TIME ; A HAS SOUND COUNTDOWN TIMER LDX SND1 LDY CTLS,X STY SNDC1 LDY FREQS,X DEX BPL NOT0 ;FIRE SOUND ; TIMER/8 INTO VOLUME LSR LSR LSR JMP TURNOFF NOT0 DEX ;BONUS SOUND BMI TURNOFF NOT1 DEX ;JUMP SOUND BMI TURNOFF NOT2 DEX BPL NOT3 ;EXPLOSION ; RANDOM D4 INTO FREQ, 8 INTO VOL LDA RAND ORA #$10 TAY LDA #$8 BNE TURNOFF NOT3 ;DEATH SOUND ; 32-TIMER/2 INTO FREQ, TIMER/4 INTO VOL LSR EOR #$1F TAY EOR #$1F LSR STA CAVESHAD TURNOFF STY SNDF1 STA SNDV1 OUT24 ; ; RUNNING SOUND ; LDY #0 LDA PLAYERDX ORA PLAYERDY BEQ OUT42 LDA FRAME AND #7 BNE OUT42 ;HERE IF MOVING & EVERY EIGHTH FRAME BIT GAMESTAT BVC OUT42 ;SOFT ATTRACT ON BMI SKIP42 LDA PLAYERY BNE OUT43 SKIP42 ;SET FREQ & VOLUME OF STEP LDA #$1C STA SNDF0 LDY #$A OUT42 STY SNDV0 STY SNDC0 OUT43 RTS ;PAD TO PAGE BOUNDRY DC $00, $00, $00 ; ; TREASURE COLORS ; TREASCLR DIAMD0C DC $00, $FF, $FF, $FF, $FF, $88, $88, $88 DC $FF, $FF DIAMD1C DC $00, $FA, $FA, $FA, $FA, $88 DC $FF, $88, $FA, $FA CROWN0C DC $00, $28, $44, $28 DC $28, $28, $28, $00, $78, $00 CROWN1C DC $00, $28 DC $44, $28, $28, $28, $28, $00, $78, $00 HARPL0C DC $00, $D8, $88, $88, $88, $88, $88, $88 DC $88, $FF HARPL1C DC $00, $D8, $88, $88, $88, $88 DC $88, $88, $88, $FF CHESTC DC $00, $14, $14, $14 DC $14, $12, $FC, $FC, $00, $00 HELMETC DC $00, $88 DC $88, $88, $18, $18, $18, $18, $18, $18 CHEST1C DC $00, $16, $44, $16, $44, $16, $16, $16 DC $FF, $FF LAMPC DC $00, $88, $14, $14, $14, $14 DC $14, $00, $00, $00 URNC DC $44, $44, $14, $44 DC $14, $44, $44, $44, $44, $14 JUGC DC $00, $18 DC $88, $18, $18, $18, $18, $88, $88, $18 DOORC DC $00, $12, $12, $16, $12, $12, $12, $16 DC $12, $12 ODOORC DC $00, $12, $12, $16, $12, $12 DC $12, $16, $12, $12 MAXLIMS DC $94, $87 MINLIMS DC $01, $10 SCORECLR DC $00, $44 LINES DC $00, $10, $1F, $2E, $3D, $4C DC $5B, $6A, $79, $88 OFFSETS DC $1C, $05, $19, $07 DRAGCLR DC $D6, $18, $86, $64, $46, $18, $F6, $02 DC $0F MINDMAX DC $50, $40, $30, $28, $20, $18, $18 DC $18, $18, $20 ATABLE DC $28, $32, $14, $1E, $00 DC $0A CASTLE0 DC $70, $70, $F0, $D0, $D0, $D0, $F0 DC $F0, $50, $00, $00 CASTLE1 DC $00, $00, $00, $00 DC $00, $00, $80, $80, $80, $00, $00 CTLS DC $08 DC $05, $01, $04, $0C FREQS DC $1A, $0A, $15, $0A DC $10 ; ; SOUND TO USE ; SNDNOS DC FIRES, BONSND, JUMPS, EXSND, DEATHS, BONSND, BONSND, BONSND, BONSND ; ; DURATION OF SOUNDS SNDTIMS DC $1F, $1F, $0F, $0F, $3F, $3F, $2F, $1F, $0F ; TREASURES TABLE ; USED FOR WEIGHTED RAMDOM SELECTION TREATABL DC URN & $FF DC LAMP & $FF DC JUG & $FF DC CHEST1 & $FF DC JUG & $FF DC HELMET & $FF DC CHEST1 & $FF DC URN & $FF DC LAMP & $FF DC CHEST & $FF DC HELMET & $FF DC HARPL0 & $FF DC LAMP & $FF DC DIAMD1 & $FF DC CROWN0 & $FF DC JUG & $FF DC $F7 ; TO MATCH RELEASE EPROM VECTORS DC.W START DC.W START END