├── PATCH.S ├── SCOLON.S ├── SDEF.S ├── SGAME.S ├── SGNDOBJ.S ├── SGRAPH8.S ├── SGRAPHA.S ├── SGRAPHC.S ├── SHSC.S ├── SINIT.S ├── SKERNEL.S ├── SMAGIC.S ├── SMCP.S ├── SNILE.S ├── SOBJ.S ├── SPHINX.S ├── SSCROBJ.S ├── SSCROLL.S ├── SSUBRS.S ├── STUNES.S └── ZERODEF.S /PATCH.S: -------------------------------------------------------------------------------- 1 | ; 2 | ; This is code that was added to finish up this game. Instead 3 | ; of inserting code in other places, which could overflow banks, 4 | ; I JSR here. 5 | ; 6 | ; 7 | ;=================================================== 8 | ; Extra initialization when switching 9 | ; from title page to auto play screen. 10 | ;=================================================== 11 | ; 12 | EXTRAINIT: 13 | JSR MCPINIT ;Initialize master control. 14 | RTS 15 | ; 16 | ; 17 | ;============================================================ 18 | ; Decrement power timer and change power color. 19 | ;============================================================ 20 | 21 | 22 | decTimer: 23 | lda #$38 ;Change color of power text to red. 24 | sta P1C2SHDB 25 | 26 | dec PTIMER 27 | beq .endPower 28 | 29 | ldx PLAYER 30 | lda PGPOWER,x 31 | cmp #9 ;Is the power warp? 32 | beq .flash ;Always flash when warping. 33 | ; 34 | lda PTIMER 35 | cmp #5 ;Time almost up? 36 | bcs .exit 37 | .flash: lda #$1F 38 | sta ROTATE ;Start power text blinking. 39 | .exit: rts 40 | ; 41 | .endPower: 42 | JSR CLRPFLGS ;CLEAR TIMED POWER FLAGS 43 | jsr powerOff ;Clear power text. 44 | rts 45 | ; 46 | ; 47 | ;======================================================= 48 | ; Make some powers automatic, user doesn't 49 | ; have to press the right button to invoke. 50 | ;======================================================= 51 | ; 52 | ; Called from SGAME.S just before the right button is read. 53 | ; 54 | ; IN: PLAYER = player number. 55 | ; PGPOWER = current power waiting to be selected. 56 | ; ptCount = number of times left to increment score. 57 | ; 58 | ; OUT: Carry clear to continue (check fire button). 59 | ; Carry set to act like right button was selected. 60 | ; 61 | autoPower: 62 | 63 | ldx PLAYER ;Get player number. 64 | lda PGPOWER,x ;Is there a power waiting? 65 | beq exit 66 | cmp #2 ;Is the power POINTS? 67 | bne next1 68 | 69 | 70 | ; --- Auto POINTS ------------------------------------------------------- 71 | 72 | lda ptCount ;Have I already started adding score? 73 | bne cont1 74 | 75 | lda #50 ;Add ten points 50 times. 76 | sta ptCount 77 | 78 | cont1: lda #10 ;Add ten points to score. 79 | sta TENS 80 | jsr ADDSCORE 81 | jmp doAuto2 82 | 83 | 84 | ; --- Other Auto powers ----------------------------------------------- 85 | 86 | next1: cmp #7 ;Extra bonus power? 87 | beq doAuto 88 | 89 | cmp #18 ;Slowdown power? 90 | beq doAuto 91 | 92 | cmp #1 ;Extra life power? 93 | beq doAuto 94 | 95 | cmp #19 ;Random power? 96 | beq doAuto 97 | 98 | cmp #12 ;Can't hop power? 99 | beq doAuto 100 | 101 | cmp #13 ;Can't swim power? 102 | beq doAuto 103 | 104 | cmp #14 ;Can't fly power? 105 | bne exit 106 | 107 | doAuto: 108 | lda ptCount 109 | bne doAuto2 110 | lda #40 111 | sta ptCount 112 | doAuto2: 113 | dec ptCount 114 | bne exit 115 | sec ;Act like right button was pressed 116 | rts 117 | 118 | exit: clc ;else, continue as normal. 119 | rts 120 | 121 | 122 | ;=================================================================== 123 | ; Allow only certain power in certain rounds and levels. 124 | ;=================================================================== 125 | ; 126 | ; IN: a = desired power index. 127 | ; DIFCULTY = 0 for novice, 1 for standard, 2 for advanced, 3 for expert. 128 | ; RACK = round number (0 is the first round). 129 | ; 130 | ; OUT: a = allowed power. 131 | ; x = same as in (saved). 132 | ; y = same as in (saved). 133 | ; 134 | maskPower: 135 | stx saveX 136 | sty saveY 137 | pha 138 | 139 | ldx PLAYER 140 | lda #0 ;Turn off any current power. 141 | sta PTIMER 142 | sta PGPOWER,x 143 | 144 | lda RACK,x 145 | tax 146 | pla 147 | cpx #4 ;Allow everything in rounds 4 and above. 148 | bcs .exit 149 | 150 | asl ;Given power times 4 to access tables, 151 | asl 152 | ora DIFCULTY ;plus diffculty. 153 | tay 154 | 155 | txa ;Which table to access? 156 | bne .next1 157 | 158 | ; --- Round 1 -------------- 159 | 160 | lda #0 ;Reset help timer while here. 161 | sta helpTime 162 | 163 | lda Table1,y 164 | jmp .exit 165 | 166 | ; --- Round 2 -------------- 167 | 168 | .next1: cmp #1 169 | bne .next2 170 | 171 | lda Table2,y 172 | jmp .exit 173 | 174 | ; --- Round 3 -------------- 175 | 176 | .next2: lda Table3,y 177 | 178 | 179 | .exit: ldx saveX 180 | ldy saveY 181 | rts 182 | 183 | ; Mask powers for round one: 184 | ; 185 | ; Form of table: 186 | ; novice,standard,advanced,expert 187 | Table1: 188 | .dc.b 0,0,0,0 ;Never happens. 189 | .dc.b 21,21,21,21 ;Extra life. 190 | .dc.b 2,2,2,2 ;Points. 191 | .dc.b 8,8,3,3 ;Air bombs. 192 | .dc.b 15,15,15,15 ;Kill Minis. 193 | .dc.b 22,22,22,22 ;Kill pots. 194 | .dc.b 6,6,6,6 ;Kill sphinx. 195 | .dc.b 7,7,7,7 ;Extra bonus time. 196 | .dc.b 8,8,8,8 ;Kill uwes. 197 | .dc.b 20,20,9,9 ;Warp. 198 | .dc.b 22,22,22,10 ;Air freeze. 199 | .dc.b 11,11,11,11 ;Decoy. 200 | .dc.b 2,2,12,12 ;Can't hop. 201 | .dc.b 2,2,13,13 ;Can't swim. 202 | .dc.b 2,2,14,14 ;Can't fly. 203 | .dc.b 15,15,15,15 ;Paralize sphinx. 204 | .dc.b 21,21,21,16 ;Hover. 205 | .dc.b 8,8,17,17 ;Afterburner. 206 | .dc.b 18,18,18,18 ;Slowdown. 207 | .dc.b 19,19,19,19 ;Random hieros. 208 | .dc.b 20,20,20,20 ;Kill everything. 209 | .dc.b 21,21,21,21 ;Supersonic shots. 210 | .dc.b 22,22,22,22 ;Invincibility. 211 | 212 | 213 | 214 | ; Mask powers for round two: 215 | ; 216 | ; Form of table: 217 | ; novice,standard,advanced,expert 218 | Table2: 219 | .dc.b 0,0,0,0 ;Never happens. 220 | .dc.b 21,21,21,21 ;Extra life. 221 | .dc.b 2,2,2,2 ;Points. 222 | .dc.b 3,3,3,3 ;Air bombs. 223 | .dc.b 15,15,15,15 ;Kill Minis. 224 | .dc.b 5,5,5,5 ;Kill pots. 225 | .dc.b 6,6,6,6 ;Kill sphinx. 226 | .dc.b 7,7,7,7 ;Extra bonus time. 227 | .dc.b 8,8,8,8 ;Kill uwes. 228 | .dc.b 9,9,9,9 ;Warp. 229 | .dc.b 22,22,10,10 ;Air freeze. 230 | .dc.b 11,11,11,11 ;Decoy. 231 | .dc.b 2,2,12,12 ;Can't hop. 232 | .dc.b 2,2,13,13 ;Can't swim. 233 | .dc.b 2,2,14,14 ;Can't fly. 234 | .dc.b 15,15,15,15 ;Paralize sphinx. 235 | .dc.b 21,21,16,16 ;Hover. 236 | .dc.b 17,17,17,17 ;Afterburner. 237 | .dc.b 18,18,18,18 ;Slowdown. 238 | .dc.b 19,19,19,19 ;Random hieros. 239 | .dc.b 20,20,20,20 ;Kill everything. 240 | .dc.b 21,21,21,21 ;Supersonic shots. 241 | .dc.b 22,22,22,22 ;Invincibility. 242 | 243 | 244 | 245 | ; Mask powers for round three: 246 | ; 247 | ; Form of table: 248 | ; novice,standard,advanced,expert 249 | Table3: 250 | .dc.b 0,0,0,0 ;Never happens. 251 | .dc.b 1,1,1,1 ;Extra life. 252 | .dc.b 2,2,2,2 ;Points. 253 | .dc.b 3,3,3,3 ;Air bombs. 254 | .dc.b 4,4,4,4 ;Kill Minis. 255 | .dc.b 5,5,5,5 ;Kill pots. 256 | .dc.b 6,6,6,6 ;Kill sphinx. 257 | .dc.b 7,7,7,7 ;Extra bonus time. 258 | .dc.b 8,8,8,8 ;Kill uwes. 259 | .dc.b 9,9,9,9 ;Warp. 260 | .dc.b 21,10,10,10 ;Air freeze. 261 | .dc.b 11,11,11,11 ;Decoy. 262 | .dc.b 2,12,12,12 ;Can't hop. 263 | .dc.b 2,13,13,13 ;Can't swim. 264 | .dc.b 2,14,14,14 ;Can't fly. 265 | .dc.b 15,15,15,15 ;Paralize sphinx. 266 | .dc.b 21,16,16,16 ;Hover. 267 | .dc.b 17,17,17,17 ;Afterburner. 268 | .dc.b 18,18,18,18 ;Slowdown. 269 | .dc.b 19,19,19,19 ;Random hieros. 270 | .dc.b 20,20,20,20 ;Kill everything. 271 | .dc.b 21,21,21,21 ;Supersonic shots. 272 | .dc.b 22,22,22,22 ;Invincibility. 273 | 274 | ; 275 | ;====================================== 276 | ; Check if an auto power. 277 | ;====================================== 278 | ; 279 | ; IN: y = power number. 280 | ; 281 | ; OUT: Equal flag TRUE if auto power. 282 | ; 283 | checkAuto: 284 | ; 285 | lda autoTable-1,y 286 | rts 287 | ; 288 | autoTable: 289 | .dc.b 0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1 290 | ; 291 | -------------------------------------------------------------------------------- /SCOLON.S: -------------------------------------------------------------------------------- 1 | ******** SCOLON.S COLLISION SHIT 2 | 3 | org $D000 4 | 5 | * IGNORE THE FOLLOWING DOCUMENTATION ITS ALL BEEN CHANGED 6 | * 7 | * SUBROUTINE TO DETECT COLLISIONS 8 | * 9 | * THIS ROUTINE TAKES A POINT AS INPUT (COLPX,COLPY,COLPZ) AND COMPARES IT TO 10 | * ALL OF THE BOXES STORED IN THE COLLISIN TABLES. IF IT FINDS AN ACTIVE BOX 11 | * THAT CONTAINS THE PASSED POINT, THEN THE COLSTAT OF THE OBJECT IS RETURNED. 12 | * THIS IS THE OBJECT TABLE INDEX OF THE BOXES CORRESPONDING OBJECT ON THE SCREEN 13 | * CARE MUST BE TAKEN HERE ON BOUNDARIES OF THE COLLISION RANGES. 14 | * CURRENTLY, THE BIRD ITS SHOTS ARE NOT IN THE TABLES TO AVOID REDUNDANT CHECKS. 15 | * 16 | 17 | BUFZONE EQU 15 ; CUTOFF FOR PUNTING 18 | 19 | COLDET: BIT GCOARSE ;NO COLLIISION DETECT ON COARSE SCROLL 20 | BPL COLDTNC 21 | JMP PUNTCOL 22 | 23 | COLDTNC: STX TEMPX ;SAVE INDEX OF OBJECT BEING TESTED 24 | LDA DXTBL,X ;GET DC OF OBJECT BEING TESTED 25 | SEC 26 | SBC #BUFZONE ; BUFFER ZONE 27 | STA JTEMP 28 | 29 | COLOOP1: LDA RLTBL,X ;GET RIGHT LINK 30 | BMI NEXLOOP ;END OF LIST SO GO OTHER DIRECTION 31 | TAX 32 | LDA DFTBL,X ;GET DF OF POTENTIALLY COLLIDING OBJECT 33 | CMP JTEMP 34 | BCC NEXLOOP ;WE'RE DONE GOING RIGHT 35 | 36 | CPX #ZREF0 ;DON'T ATTEMPT TO DO COLLISION ON REF. 37 | BCS COLOOP1 ;POINT 38 | 39 | ;DBG1: 40 | LDA COLSTAT,X 41 | BEQ COLOOP1 42 | 43 | LDA COLPZ ;CHECK EXTENTS 44 | CMP COLZ1,X 45 | BCC COLOOP1 46 | CMP COLZ2,X 47 | BCS COLOOP1 48 | 49 | LDA COLPX 50 | CMP COLX1,X 51 | BCC COLOOP1 52 | CMP COLX2,X 53 | BCS COLOOP1 54 | 55 | LDA COLPY 56 | CMP COLY1,X 57 | BCC COLOOP1 58 | CMP COLY2,X 59 | BCS COLOOP1 60 | 61 | LDA COLSTAT,X ;YES A COLLISION SO RETURN WITH 62 | RTS ;INDEX IN X AND ID IN ACCUMULATOR 63 | 64 | 65 | 66 | NEXLOOP: LDX TEMPX ;RETRIEVE INDEX OF OBJECT TO BE TESTED 67 | LDA DFTBL,X ;GET DF OF OBJECT BEING TESTED 68 | CLC 69 | ADC #BUFZONE ; BUFFER ZONE 70 | BCC ZADDOK 71 | LDA #$FF ; DON'T LET IT WRAP AROUND 72 | ZADDOK: STA JTEMP 73 | COLOOP2: LDA LLTBL,X ;NOW GO DOWN THE LEFT LINKS 74 | TAX 75 | CMP #ZREF0 ;ON REFERENCE POINT GO TO NEXT ITEM 76 | BCS COLOOP2 77 | CMP #LASTPNT ;END POINT TO THE LEFT 78 | BCS PUNTCOL ; 79 | LDA JTEMP ; DF OF OBJECT BEING TESTED + 10 80 | CMP DXTBL,X 81 | BCC PUNTCOL 82 | 83 | DBG2: 84 | LDA COLSTAT,X 85 | BEQ COLOOP2 86 | 87 | LDA COLPZ ;CHECK EXTENTS 88 | CMP COLZ1,X 89 | BCC COLOOP2 90 | CMP COLZ2,X 91 | BCS COLOOP2 92 | 93 | LDA COLPX 94 | CMP COLX1,X 95 | BCC COLOOP2 96 | CMP COLX2,X 97 | BCS COLOOP2 98 | 99 | LDA COLPY 100 | CMP COLY1,X 101 | BCC COLOOP2 102 | CMP COLY2,X 103 | BCS COLOOP2 104 | 105 | LDA COLSTAT,X ;PUT ID OF COLLIDED OBJECT IN ACC. 106 | RTS 107 | 108 | PUNTCOL: LDA #0 109 | RTS 110 | 111 | ; THIS ROUTINE CHECKS TO SEE IF THE BIRD IS OVER A HIEROGLYPH 112 | 113 | HIERODET: LDX #ZREF0 ; START FROM REF PNT WITH DX = FC 114 | HIEROLP: LDA LLTBL,X ; AND SEARCH LEFT 115 | BMI PUNTCOL ; PUNT IF AT END 116 | 117 | TAX 118 | LDA DXTBL,X 119 | CMP #$FF 120 | BNE HIEROLP ; ONLY CHECK HIERO'S 121 | 122 | LDA #ZBIRDZ+3 ;CHECK EXTENTS 123 | CMP COLZ1,X 124 | BCC HIEROLP 125 | CMP COLZ2,X 126 | BCS HIEROLP 127 | 128 | LDA XTBL+ZBIRD 129 | CMP COLX1,X 130 | BCC HIEROLP 131 | CMP COLX2,X 132 | BCS HIEROLP 133 | 134 | LDA COLSTAT,X ;PUT ID OF COLLIDED OBJECT IN ACC. 135 | RTS 136 | 137 | * 138 | * SUBROUTINE TO FIND THE CHARACTER NUMBER CORRESPONDING TO X AND Z 139 | * X = OBJECT INDEX 140 | * A = Z OFFSET FROM REFERENCE POINT 141 | * THE RESULT IS RETURNED IN A 142 | * 143 | 144 | GRNDTYPE: 145 | STA TEMP4 146 | STX TEMP3 147 | LDA VPTBL,X 148 | GRNDFLO: CMP #SCRENBOT+1 149 | BCS GRACEFUL 150 | STY TEMP5 ;PRESERVE Y 151 | 152 | SEC 153 | SBC TEMP4 154 | SEC ;THIS CALCULATES ZONE NUMBER FROM VP 155 | SBC ZONEOFF ;WHICH IS CORRECTED BY ZOFFSET 156 | CLC 157 | ADC #18 ;14 FROM LOADER PLUS 4 TO GET TO 158 | CLC ;BOTTOM OF STAMP 159 | ADC YTBL,X 160 | 161 | 162 | LSR 163 | LSR 164 | LSR 165 | LSR ;ZONE NUMBER 166 | TAX ;PUT ZONE NUMBER INTO X 167 | 168 | LDA HIBYE,X ;USE ZONE NUMBER TO FIND DISPLAY LIST 169 | STA PTR0+1 ;HIGH BYTE OF DLIST 170 | LDX #0 ;CHARACTER MAP IS AT BEGINNING, SO 171 | STX PTR0 ;LOW BYTE OF DLIST IS 0 172 | 173 | LDA (PTR0,X) ;READ CHAR MAP POINTER FROM DLIST 174 | STA PTR1 ;LOW BYTE OF CHAR MAP 175 | LDY #2 176 | LDA (PTR0),Y 177 | STA PTR1+1 ;HIGH BYTE OF CHAR MAP 178 | 179 | LDX TEMP3 180 | ; LDA XTBL,X ;THIS IS X+Z 181 | ; CLC 182 | ; ADC ZTBL,X 183 | ; CLC 184 | ; ADC #-NUMBER 185 | 186 | LDA HPTBL,X 187 | CLC 188 | ADC TEMP4 ;ZOFFSET 189 | CLC 190 | ADC #$9 191 | 192 | CLC 193 | ADC JERKOFF ;HPOS CORRECTED BY SCROLL 194 | 195 | LSR ;DIVIDE BY EIGHT TO GET CHAR NUMBER 196 | LSR 197 | LSR 198 | TAY ;CHAR NUMBER 199 | 200 | LDA (PTR1),Y ;CHAR VALUE 201 | LDY TEMP5 202 | RTS 203 | 204 | GRACEFUL: 205 | LDA #0 ;GUARANTEED LAND CHAR EXIT 206 | RTS 207 | 208 | ; END 209 | -------------------------------------------------------------------------------- /SDEF.S: -------------------------------------------------------------------------------- 1 | ; Desert Falcon - SDEF.S 2 | 3 | .subttl "RAM allocation." 4 | 5 | 6 | ORG $1800 7 | 8 | DL0: .ds.b 80 ;80 ;DISPLAY LIST ZERO 9 | 10 | PL1MAP: .ds.b 10 ;PLAYER 1 SCORE 11 | TOPMSMAP: .ds.b 20 ;TOP OF MESSAGE MAP 12 | PL2MAP: .ds.b 10 ;40 ;PLAYER 2 SCORE 13 | 14 | SWIMMING: .ds.b 1 ;BIT 7 HIGH IF SWIMMING 15 | SPNCNT: .ds.b 1 ;DELAY BETWEEN SPAWNINGS 16 | RESERVD: .ds.b 1 ;3 ;OBJ SLOTS RESERVED 17 | 18 | SHOTSTAT: .ds.b 4 ;STATUS OF SHOTS 19 | SCRLLCNT: .ds.b 1 ;SCROLL COUNTER 20 | OSCRLCNT: .ds.b 1 ;6 ;OLD SCROLL COUNTER 21 | 22 | LEFTBUT: .ds.b 2 ;LEFT BUTTON SOFTWARE REGISTER 23 | RIGHTBUT: .ds.b 2 ;RIGHT BUTTON SOFTWARE REGISTER 24 | ONEBUT: .ds.b 1 ;BITS 2-4? SET IFF ONE-BUTTON JOYSTICK 25 | ETIMER: .ds.b 1 ;EAST JOYSTICK MOVEMENT TIMER 26 | WTIMER: .ds.b 1 ;WEST JOYSTICK MOVEMENT TIMER 27 | TITCNT: .ds.b 1 ;TITLE PAGE COUNTER FOR FRAMES SORTA 28 | STIMER: .ds.b 1 ;SELECT TIMER 29 | OTIMER: .ds.b 1 ;10 ;OVERALL SELECT TIMER 30 | 31 | P5C2SHAD: .ds.b 1 ;SHADOWS FOR PALETTES OF BOTTOM OF 32 | P1C2SHAD: .ds.b 1 ;SCREEN DISPLAY 33 | P2C2SHAD: .ds.b 1 34 | P0C2SHAD: .ds.b 1 35 | P1C2SHDB: .ds.b 1 36 | GRMCPCNT: .ds.b 1 37 | 38 | TAKEOVER: .ds.b 1 ;ARE THESE NEEDED ANYMORE GUYS 39 | ROLLER: .ds.b 1 40 | WHTUWANT: .ds.b 1 41 | SCRFLAG: .ds.b 1 ;FLAG FROM MAINLOOP TO TALK TO INTERR. 42 | MINITBL: .ds.b 6 ;MINI SPHINX INDEX TABLE 43 | MINIOVER: .ds.b 6 ;16 ;MINI SPHINX OVERLAY SLOT TABLE 44 | 45 | PTRTBLLO: .ds.b 4 ;LOOKAHEAD CHAR MAP POINTERS 46 | PTRTBLHI: .ds.b 4 ; " " 47 | STUFFDEX: .ds.b 1 ;INDEX IN POINTER TABLE USED TO STUFF 48 | LOADFDEX: .ds.b 1 ;INDEX IN PTR TABLE USED TO LOAD FROM 49 | LEFTMASK: .ds.b 4 ;LEFT SIDE OF CHAR MAP MASK 50 | MIDMASK: .ds.b 4 ;MIDDLE OF CHAR MAP MASK 51 | RIGTMASK: .ds.b 4 ;22 ;RIGHT SIDE OF CHAR MAP MASK 52 | 53 | HSLSTEXP: .ds.b 4 ;HSC DIF LEVEL FLAGS 0 MEANS PRESENT 54 | HSCIN: .ds.b 1 ;HSC IN FLAG 0 = NOT PRESENT 55 | DIFNAM: .ds.b 26 ;31 ;TEMPORARY HSC RAM: DIF NAME 26 BYTES 56 | 57 | STATIMER: .ds.b 1 ;STATE TIMER 58 | JOYCNT: .ds.b 1 ;DELAY ON READING JOYSTICK 59 | DEATH: .ds.b 1 ;FLAG FOR DEAD BIRD 60 | IOSIM: .ds.b 1 ;JOYSTICK SIMULATION BYTE FOR AUTOPLAY 61 | PERIOD: .ds.b 1 ;USED BY FREEZE FRAMER 62 | HOWMANY: .ds.b 1 ;USED BY FREEZE FRAMER 63 | NEXFRAME: .ds.b 1 ;WHAT THE FUCK??? 64 | FREE: .ds.b 1 ;COUNT OF FREE SLOTS 65 | GSCRFLAG: .ds.b 1 ;FLAG FOR MAINLOOP, SAYING WE SCROLLED 66 | GCOARSE: .ds.b 1 ;MORE SCROLLING FLAGS FOR THE MASSES 67 | FUCKFLAG: .ds.b 1 ;11 ;WHO THE FUCK KNOWS! 68 | 69 | TRDSPFLG: .ds.b 1 ;1 ;0 = DON'T DISPLAY, <> 0 = DISPLAY 70 | 71 | ROTATE: .ds.b 1 ;ROTATE HIERO DISPLAY COUNTER 72 | 73 | .ds.b 1 ;UNUSED 74 | BNSTIMER: .ds.b 1 ;CURRENT TIMER VALUE FOR B RACK 75 | BNSTIME: .ds.b 2 ;PLAYER'S TIME FOR UPCOMING B RACK 76 | BNSHTHS: .ds.b 1 ;SCORE FOR BONUS RACK 77 | BNSHUNDS: .ds.b 1 78 | BNSTENS: .ds.b 1 ;7 79 | SECOND: .ds.b 1 ;COUNTER 80 | TUNREPT0: .ds.b 1 ;TUNE REPEAT COUNTER 81 | TUNREPT1: .ds.b 1 ;TUNE REPEAT COUNTER 82 | SPHNXNSX: .ds.b 1 ;SPHINX NOSE X POSITION 83 | SEXP1: .ds.b 1 ;SPHINX EXPLOSION INDEX 84 | SEXP2: .ds.b 1 ;SPHINX EXPLOSION INDEX 85 | SEXP3: .ds.b 1 ;SPHINX EXPLOSION INDEX 86 | WARP: .ds.b 1 ;WARP POWER FLAG 87 | ptCount: .ds.b 1 ;Point counter for decrementing. 88 | saveX: .ds.b 1 ;Save x register. 89 | saveY: .ds.b 1 ;Save y register. 90 | helpTime: .ds.b 1 ;Timer for switching in "R BUTTON" message. 91 | 92 | ENDRAM18: ;253 used, 5 left free. 93 | 94 | MININUMB EQU 6 95 | 96 | ORG $1900 97 | DL1: .ds.b 80 ;DISPLAY LIST 1 98 | COLSTAT: .ds.b 63 ;COLLISION STATUSES 99 | COLX1: .ds.b 63 ;COLLISION X'S 100 | 101 | SWCHBIO: .ds.b 1 ;CURRENT SWCHB IO STATE 102 | OLDSWCHB: .ds.b 1 ;OLD SWCHB 103 | 104 | WAITCNT: .ds.b 1 ;WAIT COUNTER 105 | WAVECNT: .ds.b 1 ;WAVE PROGRAM COUNTER 106 | WAITING: .ds.b 1 ;WAIT COUNTER 107 | 108 | PARAM: .ds.b 1 ;PARAMETER VALUE FOR MICROROUTINES 109 | SPNCLASS: .ds.b 1 ;CLASS OF FLEA 110 | 111 | SPNX: .ds.b 1 ;SPAWN X COORD 112 | SPNY: .ds.b 1 113 | SPNZ: .ds.b 1 ;UPDATE THIS GUYS??? 114 | 115 | VRUN: .ds.b 2 ;VOLUME RUN LENGTH 116 | 117 | DBK0: .ds.b 2 ;THESE ARE FOR RUNNING THE BACKGROUND 118 | TBINDX0: .ds.b 2 ;TUNE IN THE BACKGROUND 119 | CBINDX0: .ds.b 2 120 | VBINDX0: .ds.b 2 121 | VBRUN: .ds.b 2 122 | 123 | ENDCOUNT: .ds.b 1 ;Counter that waits for end of game tune. 124 | ; 125 | ENDRAM19: ;219,39 TTL,LEFT 126 | 127 | 128 | ORG $1A00 129 | DL2: .ds.b 80 ;DISPLAY LIST 2 130 | 131 | COLY1: .ds.b 63 ;COLLISION Y'S 132 | COLY2: .ds.b 63 ;COLLISON Y EXTENTS 133 | UWESTATE: .ds.b 3 ;UWESTATES (SEE UWE DRIVER FOR SPECS.) 134 | UWEOK: .ds.b 1 ;CAN WE BRING OUT A UWE? 135 | WANIMCNT: .ds.b 3 136 | UWETYPE: .ds.b 3 ;DESIGNATES DIFFICULTY OF UWE 137 | FLEATYPE: .ds.b 8 ;FLEA TYPE AND SUBTYPE 138 | FXRUN: .ds.b 8 ;X VELOCITY 139 | FYRUN: .ds.b 8 ;Y " 140 | FZRUN: .ds.b 8 ;Z " 141 | FLEACNT: .ds.b 8 ;TIMERS 142 | ENDRAM1A: ;256,0 TTL,LEFT 143 | 144 | 145 | ORG $1B00 146 | DL3: .ds.b 80 ;DISPLAY LIST 3 147 | 148 | COLZ1: .ds.b 63 ;COLLISION Z'S 149 | COLZ2: .ds.b 63 ;COLLISON Z EXTENTS 150 | PL1LVMAP: .ds.b 10 ;PLAYER 1 LIVES MAP 151 | BOTMSMAP: .ds.b 20 ;BOTTOM OF MESSAGE MAP 152 | PL2LVMAP: .ds.b 10 ;PLAYER 2 LIVES MAP 153 | SPHXSHTD: .ds.b 1 ;SPHINX SHOT DELAY 154 | SXSHTSTT: .ds.b 4 ;SPHINX SHOT TABLE 155 | SHOTDEL: .ds.b 4 ;SPHINX SHOT TABLE AGAIN 156 | HIEROSLT: .ds.b 1 ;SLOT NUMBER OF HIERO BEING ANIMATED 157 | 158 | ENDRAM1B: ;256,0 TTL,LEFT 159 | 160 | 161 | ORG $1C00 162 | DL4: .ds.b 80 ;DISPLAY LIST 4 163 | 164 | SHTBL: .ds.b 84 ;HI BYTE OF GRAPHICS. MIGHT BE ROMMED 165 | DXTBL: .ds.b 84 ;Z-X+100'S FOR LOADER 166 | LOWFACE: .ds.b 1 ;INDEX OF BOTTOM OF SPHINX FACE 167 | HIFACE: .ds.b 1 ;INDEX OF TOP OF SPHINX FACE 168 | FACER: .ds.b 1 ;SPHINX FACE ANIMATION 169 | PHASE: .ds.b 1 ;0=NORMAL,+=BATTLE,-=BONUS 170 | ENDRAM1C: ;252,4 TTL,LEFT 171 | 172 | 173 | ORG $1D00 174 | DL5: .ds.b 80 ;DISPLAY LIST 5 175 | 176 | SMTBL: .ds.b 84 ;MAX HIGH BYTE OF GRAPHICS FOR LOADER 177 | ;REF PTS. MIGHT NOT HAVE VALUES HERE 178 | 179 | STAMPID: .ds.b 10 ;SCROLLING OBJECT BUFFERS 180 | HPOS: .ds.b 10 181 | ZONESBK: .ds.b 10 182 | FRBUFSTK: .ds.b 10 ;STACK OF FREE BUFFER LOCATIONS 183 | FRBUFPTR: .ds.b 1 ;STACK POINTER 184 | 185 | FIRENUMB EQU 6 ;NUMBER OF FIREPOT SLOTS 186 | FIRETIP: .ds.b FIRENUMB 187 | FIRECOL1: .ds.b FIRENUMB 188 | FIRECOL2: .ds.b FIRENUMB 189 | FIREANIM: .ds.b FIRENUMB 190 | FIREHGHT: .ds.b FIRENUMB 191 | FIREGOAL: .ds.b FIRENUMB 192 | FIREMODE: .ds.b FIRENUMB 193 | ENDRAM1D: ;247,9 TTL,LEFT 194 | 195 | 196 | ORG $1E00 197 | DL6: .ds.b 80 ;DISPLAY LIST 6 198 | 199 | XTBL: .ds.b 84 ;X POS FOR OBJECTS REF PTS MITE BE NULL 200 | YTBL: .ds.b 84 ;Y POS FOR OBJECTS REF PTS AND SHADOWS 201 | ENDRAM1E: ;248,8 TTL,LEFT MITE BE NULL 202 | 203 | 204 | ORG $1F00 205 | DL7: .ds.b 80 ;DISPLAY LIST 7 206 | ZTBL: .ds.b 84 ;Z POS FOR OBJECTS 207 | VPTBL: .ds.b 84 ;VPOS FOR LOADER 208 | ENDRAM1F: ;248,8 TTL,LEFT 209 | 210 | 211 | ORG $2000 ;ONLY 64 UNSHADOWED BYTES HERE 212 | COLX2: .ds.b 63 ;COLLISION X EXTENTS 213 | ENDRAM20: ;63,1 TTOUT OF 64 214 | 215 | 216 | ORG $2100 ;ONLY 64 UNSHADOWED BYTES HERE 217 | SVDIST: .ds.b 4 218 | SVHDIST: .ds.b 4 219 | PSRANDA1: .ds.b 4 220 | PSRANDA2: .ds.b 4 221 | PSRANDB1: .ds.b 4 222 | PSRANDB2: .ds.b 4 223 | SVGRNDPC: .ds.b 4 224 | SVOBJTYP: .ds.b 4 225 | SVNEWBLK: .ds.b 4 226 | SVBLOCK: .ds.b 4 227 | SVBAND: .ds.b 4 228 | VAR1: .ds.b 1 229 | VAR2: .ds.b 1 230 | VAR3: .ds.b 1 231 | VAR4: .ds.b 1 232 | CRISVARS: 233 | VAR5: .ds.b 1 234 | 235 | JEWCNT: .ds.b 2 ;JEWEL COUNTER 236 | EGGCNT: .ds.b 2 ;SILVER BAR COUNTER 237 | BARCNT: .ds.b 2 ;GOLDEN EGG COUNTER 238 | 239 | ENDRAM21: ;49,15 TTOUT OF 64 240 | 241 | 242 | ORG $2200 243 | DL10: .ds.b 80 ;DISPLAY LIST 10 244 | LLTBL: .ds.b 84 ;LEFT LINKS IN LIST 245 | SLTBL: .ds.b 84 ;LOW BYTE OF GRAPHICS FOR LOADER 246 | 247 | HSGAMDAT EQU DL10 ;HSC DATA FIELDS: MAX LENGTH 2 PAGES 248 | 249 | ENDRAM22: ;248,8 TTL,LEFT 250 | 251 | 252 | ORG $2300 253 | DL11: .ds.b 80 ;DISPLAY LIST 11 254 | 255 | DLY: .ds.b 20 ;DISPLAY LIST FOR SCORE 256 | DLZ: .ds.b 20 ;DISPLAY LIST FOR EXTRA BIRDS 257 | PWTBL: .ds.b 84 ;PALLETTE/WIDTH FOR LOADER 258 | SLOTQ: .ds.b 43 ;SHOULD EQUAL PYRSTOP-PYRSTART+1 259 | SLOTGPTR: .ds.b 1 ;POINTER TO FIRST AVAILABLE SLOT 260 | SLOTRPTR: .ds.b 1 ;POINTER TO FIRST EMPTY POSITION 261 | ENDRAM23: ;249,7 TTL,LEFT 262 | 263 | 264 | ORG $2400 265 | ZBUFF0: .ds.b 33 ;CHARACTER BUFFERS 266 | ZBUFF1: .ds.b 33 ;ALSO USED FOR TITLE PAGE SHIT 267 | ZBUFF2: .ds.b 33 268 | ZBUFF3: .ds.b 33 269 | ZBUFF4: .ds.b 33 270 | ZBUFF5: .ds.b 33 271 | ZBUFF6: .ds.b 33 272 | 273 | WINGMAP0 EQU ZBUFF0 ;TITLE PAGE MAPS USE SAME RAM AS GAME 274 | WINGMAP1 EQU ZBUFF1 ;PLAY MAPS 275 | WINGMAP2 EQU ZBUFF2 276 | WINGMAP3 EQU ZBUFF3 277 | WINGMAP4 EQU ZBUFF4 278 | WINGMAP5 EQU ZBUFF5 279 | CRSTMAP1 EQU ZBUFF6 280 | CRSTMAP2 EQU CRSTMAP1+12 ;MOST OF THESE LABELS CAN GO AWAY 281 | CRSTMAP3 EQU CRSTMAP2+10 ;BECAUSE THE CREST IS PRETTY MUCH 282 | CRSTMAP4 EQU CRSTMAP3+4 ;HARDWIRED IN SINIT 283 | CRSTMAP5 EQU CRSTMAP4+2 284 | 285 | PTIMER: .ds.b 1 ;POWER TIMER 286 | 287 | TPSTART: ;BEGINNING OF TIMED POWER FLAGS 288 | NOHOMING: .ds.b 1 289 | CANTHOP: .ds.b 1 290 | CANTSWIM: .ds.b 1 291 | CANTFLY: .ds.b 1 292 | HOVER: .ds.b 1 293 | SPEEDUP: .ds.b 1 294 | SLOWDOWN: .ds.b 1 295 | QUIKSHOT: .ds.b 1 296 | INVINCBL: .ds.b 1 297 | TPSTOP: 298 | PARASPHX: .ds.b 1 299 | 300 | TPNUMB EQU TPSTOP-TPSTART ;NUMBER OF TIMED POWER FLAGS 301 | 302 | ENDRAM24: ;242,14 TTL,LEFT 303 | 304 | 305 | ORG $2500 306 | ZBUFF7: .ds.b 33 ;MORE CHARACTER MAP BUFFERS 307 | ZBUFF8: .ds.b 33 308 | ZBUFF9: .ds.b 33 309 | ZBUFFA: .ds.b 33 310 | ZBUFFB: .ds.b 33 311 | CRMAP EQU ZBUFF8 ;CRIGHT MESSAGE MAP 312 | NOVMAP EQU ZBUFF9 ;NOVICE MAP 313 | STDMAP EQU NOVMAP+6 ;STANDARD MAP 314 | ADVMAP EQU STDMAP+8 ;ADVANCED MAP 315 | EXPMAP EQU ADVMAP+8 ;EXPERTMAP 316 | 317 | HPTBL: .ds.b 84 ;HPOS FOR LOADER 318 | 319 | ENDRAM25: ;251,5 TTL,LEFT 320 | 321 | 322 | ORG $2600 323 | 324 | DL8: .ds.b 80 ;DISPLAY LIST 8 325 | 326 | RLTBL: .ds.b 84 ;RIGHT LINKS IN LIST 327 | DFTBL: .ds.b 84 ;FAR DX TABLE 328 | ENDRAM26: ;248,8 TTL,LEFT 329 | 330 | 331 | ORG $2700 332 | DL9: .ds.b 80 ;DISPLAY LIST 9 333 | DLLIST: .ds.b 84 ;DISPLAY LIST LIST. DEFINED TO ACCOM. 334 | ;PAL DLLIST + 3 EXTRA FOR YUCKS 335 | NULHDR: .ds.b 2 ;HEADER OF TWO ZEROS 336 | 337 | ENDRAM27: ;166,90 TTL,LEFT 338 | 339 | ORG $7000 ;FOR RAM CARD ONLY!!!!!!!!!!!!!! 340 | TESTLIST: .ds.b 84 ;FOR LINKED LIST DIAGNOSTICS 341 | ORDTEST: .ds.b 84 ;FOR LINKED LIST DIAGNOSTICS 342 | 343 | ; END 344 | 345 | -------------------------------------------------------------------------------- /SHSC.S: -------------------------------------------------------------------------------- 1 | ; SHSC.S 2 | ; HIGH SCORE CARD INTERFACE FOR THE DESERT FALCON GAME 3 | ; 4 | org $5000 5 | ; 6 | ; 7 | MAXLEVEL EQU 4 ;MAX NO. OF DIFF LEVELS 8 | ; 9 | ; DETERMINE IF THE HSC IS PRESENT 10 | HSPOWNIT: 11 | LDA #0 ; SET HSCIN FLAG TO ZERO, 12 | STA HSCIN ; INDICATING HSC IS NOT IN 13 | RTS ; END PROC 14 | ; 15 | ; 16 | ; THIS ROUTINE SETS UP HSC ARGUMENTS THAT DONT CHANGE 17 | ; OR ARE SIMPLY DEFAULT SETTINGS 18 | ; 19 | SETUPARG: 20 | rts 21 | SETHSLST: 22 | rts 23 | HSGAMOVR: 24 | rts 25 | HSDISP: 26 | rts 27 | SETDFNAM: 28 | rts 29 | -------------------------------------------------------------------------------- /SINIT.S: -------------------------------------------------------------------------------- 1 | .subttl "CONSOLIDATE NUMBER INITIALIZATIONS" 2 | 3 | org $9000 4 | 5 | 6 | 7 | **********PREINIT*************************************************************** 8 | PREINIT: ;SET UP POWER UP DEFAULTS 9 | 10 | LDX #1 ;SETS DEFAULT MODES FOR STARTUP 11 | STX NUMPLYRS 12 | STX DIFCULTY ;STANDARD DIFFICULTY LEVEL 13 | DEX ;PLAYER ONE ONLY 14 | STX PLAYER 15 | LDX #5 ;FIVE LIVES ONLY 16 | STX PL1LIVES 17 | STX PL2LIVES 18 | 19 | JSR INITGAME 20 | JSR MCPINIT 21 | RTS 22 | 23 | 24 | **********INITIT**************************************************************** 25 | 26 | INITIT: ;INITIALIZE STATE TO TITLE PAGE + MENU 27 | 28 | JSR ABSZERO ;ZERO OUT ABSOLUTE MEMORY 29 | JSR BLANKMAP ;BLANK OUT CHARACTER MAP 30 | JSR SCRAPALL ;KILL ALL TUNES 31 | JSR IOINIT ;SET UP SOFTWARE IO REGISTERS 32 | JSR DLYZFILL ;FILL UP DLY AND DLZ 33 | 34 | LDA #$80 ;RESET EAST AND WEST JOYSTICK TIMERS 35 | STA ETIMER 36 | STA WTIMER 37 | STA STIMER ;SELECT TIMER 38 | 39 | LDA #35 ;DISABLE SELECTION FOR FIRST 35 FRAMES 40 | STA OTIMER ;OF SELECT MODE 41 | 42 | NODELAY: 43 | LDX #74 ;COPY TITLE PAGE DISPLAY LIST LIST 44 | DTITLOOP: LDA TITBL,X 45 | STA DLLIST,X 46 | DEX 47 | BPL DTITLOOP 48 | 49 | LDA #TITSTATE&$FF ;SET UP STATE POINTER FOR INDIRECT JMP 50 | STA STATEPTR ;TO TITSTATE 51 | LDA #TITSTATE/256 52 | STA STATEPTR+1 53 | 54 | LDA #$4C 55 | STA HANDLER 56 | LDA #DLITIT&$FF ;SET UP DLI POINTER FOR THE DLI 57 | STA DLIPTR ;OF TITLEPAGE 58 | LDA #DLITIT/256 59 | STA DLIPTR+1 60 | 61 | TITLOGO: 62 | LDA #TITCHR1/256 ;LOAD HIGH BYTE OF TITLE PAGE CHARS 63 | STA CHARBASE ;INTO CHARBASE 64 | 65 | LDA #DLLIST&$FF ;SET UP DPPL AND DPPH FOR TITLE PAGE 66 | STA DPPL 67 | LDA #DLLIST/256 68 | STA DPPH 69 | 70 | LDX #79 71 | LDA #0 72 | ZERODL: STA DL0,X 73 | STA DL1,X 74 | STA DL2,X 75 | STA DL3,X 76 | STA DL4,X 77 | STA DL5,X 78 | DEX 79 | BPL ZERODL 80 | 81 | 82 | LDX #4 ;FILL DLISTS 83 | TITZNLP: LDA TITZN0TB,X ;WING HEADER FOR DL0 84 | STA DL0,X 85 | LDA TITZN1TB,X 86 | STA DL1,X 87 | LDA TITZN2TB,X ;WING HEADER FOR LEFT SIDE OF DL2 88 | STA DL2,X 89 | LDA TTZN2TB2,X ;WING HEADER FOR RIGHT SIDE OF DL2 90 | STA DL2+5,X 91 | LDA TITZN3TB,X 92 | STA DL3,X 93 | LDA TITZN4TB,X 94 | STA DL4,X 95 | LDA TITZN5TB,X 96 | STA DL5,X 97 | 98 | LDA CRTB1,X ;CREST HEADERS 99 | STA DL1+5,X 100 | LDA CRTB2,X 101 | STA DL2+10,X 102 | LDA CRTB3,X 103 | STA DL3+5,X 104 | LDA CRTB4,X 105 | STA DL4+5,X 106 | LDA CRTB5,X 107 | STA DL5+5,X 108 | 109 | LDA NOVHDTBL,X ;NOVICE HEADER MAP 110 | STA DL6,X 111 | LDA STDHDTBL,X ;STANDARD HEADER MAP 112 | STA DL6+5,X 113 | LDA ADVHDTBL,X ;ADVANCED HEADER MAP 114 | STA DL6+10,X 115 | LDA EXPHDTBL,X ;EXPERT HEADER MAP 116 | STA DL6+15,X 117 | LDA CRHDTBL,X ;CRIGHT MESSAGE MAP HEADER 118 | STA DL7,X 119 | 120 | DEX 121 | BPL TITZNLP 122 | 123 | LDX #3 124 | PAULOOP: LDA DSTOPSTP,X ;'DESERT FALCON' TEXT IS DONE IN DIRECT 125 | STA DL1+10,X ;MODE 126 | LDA FCTOPSTP,X 127 | STA DL1+14,X 128 | LDA DSSTPSTP,X 129 | STA DL2+15,X 130 | LDA FCSTPSTP,X 131 | STA DL2+19,X 132 | LDA DSBOTSTP,X 133 | STA DL2+23,X 134 | LDA FCBOTSTP,X 135 | STA DL2+27,X 136 | LDA DSSBTSTP,X 137 | STA DL3+10,X 138 | LDA FCSBTSTP,X 139 | STA DL3+14,X 140 | 141 | DEX 142 | BPL PAULOOP 143 | 144 | JSR PLAYTWID ;TURN ON CORRECT PLAYER 145 | JSR DIFFTWID ;TURN ON CORRECT DIFFICULTY 146 | 147 | LDX #10 ;FILLS TOPMSMAP WITH 'PLAYER TEXT' 148 | MOON: LDA PLUTOTBL,X ;TWO PLAYER ON TOP 149 | STA TOPMSMAP+2,X 150 | LDA MOONTBL,X ;ONE PLAYER ON BOTTOM 151 | STA BOTMSMAP+2,X 152 | DEX 153 | BPL MOON 154 | LDA #50 ;TWO PLAYER ON TOP 155 | STA DLY+9 156 | LDA #48 ;ONE PLAYER ON BOTTOM 157 | STA DLZ+9 158 | 159 | LDX #19 ;FILL CHAR MAPS WITH CHARS FOR WINGS 160 | WINGSLP: LDA WNGMPTB0,X ;FOR WING MAPS 0 THRU 2 161 | STA WINGMAP0,X 162 | LDA #WINGS1&$FF 163 | STA WINGMAP1,X 164 | STA WINGMAP2,X 165 | DEX 166 | BPL WINGSLP 167 | LDA #WINGS0&$FF ;HACK FIRST AND LAST CHAR OF WINGMAP2 168 | STA WINGMAP2 ;THIS IS TO SAVE BYTES YOU REALIZE 169 | LDA #WINGS2&$FF 170 | STA WINGMAP2+19 171 | 172 | LDX #17 ;FILL CHAR MAPS 3 AND 4 173 | LDA #WINGS1&$FF 174 | WNGSLP34: STA WINGMAP3,X 175 | STA WINGMAP4,X 176 | DEX 177 | BPL WNGSLP34 178 | LDA #WINGS6&$FF ;HACK IN END CHARACTERS AS USUAL 179 | STA WINGMAP3 180 | LDA #WINGS0&$FF 181 | STA WINGMAP4 182 | LDA #WINGS9&$FF 183 | STA WINGMAP3+17 184 | LDA #WINGS2&$FF 185 | STA WINGMAP4+17 186 | 187 | LDX #9 ;FILL WINGMAP5 188 | LDA #WINGS1&$FF 189 | WNGSLP5: STA WINGMAP5,X 190 | DEX 191 | BPL WNGSLP5 192 | LDA #WINGS7&$FF ;HACK ENDS OF CHARACTER MAP 193 | STA WINGMAP5 194 | LDA #WINGS8&$FF 195 | STA WINGMAP5+9 196 | 197 | LDX #29 ;FILL CREST MAP 198 | LDA #WINGS1&$FF 199 | CRSTLP: STA CRSTMAP1,X 200 | DEX 201 | BPL CRSTLP 202 | LDA #WINGS0&$FF 203 | STA CRSTMAP1 204 | STA CRSTMAP1+12 205 | STA CRSTMAP1+22 206 | STA CRSTMAP1+28 207 | LDA #WINGS2&$FF 208 | STA CRSTMAP1+11 209 | STA CRSTMAP1+21 210 | STA CRSTMAP1+25 211 | STA CRSTMAP1+29 212 | 213 | LDX #11 ;STUFF MESSAGE MAP WITH COPYRIGHT MSG 214 | SLEEP: LDA CRIGHTBL,X 215 | STA CRMAP,X 216 | DEX 217 | BPL SLEEP 218 | 219 | LDX #27 ;STUFF DIFFICULTY MAPS 220 | DIFMAPLP: LDA DIFTBL,X ;ALL DIFF MAPS ARE CONTIGUOUS IN MEM. 221 | STA NOVMAP,X 222 | DEX 223 | BPL DIFMAPLP 224 | 225 | LDX #2 ;STUFF PALETTES FOR TITLE PAGE 226 | PALSTFLP: LDA #$0F ;CONSTANT 227 | STA P0C1,X 228 | LDA PALWD1,X 229 | STA P1C1,X 230 | LDA PALWD2,X 231 | STA P2C1,X 232 | LDA PALWD3,X 233 | STA P3C1,X 234 | LDA PALWD4,X 235 | STA P4C1,X 236 | LDA #$04 ;CONSTANT 237 | STA P5C1,X 238 | DEX 239 | BPL PALSTFLP 240 | LDA #$00 ;LAST BUT NOT LEAST: BACKGRND 241 | STA BACKGRND 242 | 243 | RTS 244 | 245 | INITLOGO: 246 | LDX #23 247 | FILLLOGO: LDA LOGOTBL,X 248 | STA DLLIST,X 249 | DEX 250 | BPL FILLLOGO 251 | 252 | 253 | LDA #$4C 254 | STA HANDLER 255 | LDA #DLIHSC0&$FF ;SET UP DLI POINTER FOR THE DLI 256 | STA DLIPTR ;OF TITLEPAGE 257 | LDA #DLIHSC0/256 258 | STA DLIPTR+1 259 | 260 | JMP TITLOGO ;COMMON TITLE PAGE AND LOGO INITS. 261 | 262 | TITBL: ;22 HEADERS = 66 BYTES LONG 263 | ; FIRST THE 25 BLANK LINES 264 | .dc.b $4F,NULHDR/256,NULHDR&$FF 265 | .dc.b $48,NULHDR/256,NULHDR&$FF 266 | 267 | ; VISIBLE SCREEN HAS 192 LINES 268 | ; FIRST WE HAVE 24 BLANK LINES 269 | .dc.b $47,NULHDR/256,NULHDR&$FF 270 | .dc.b $4F,NULHDR/256,NULHDR&$FF 271 | 272 | ; THEN WE HAVE 6 ZONES OF EIGHT HIGH FOR TITLE AND LOGO 273 | .dc.b $C7,DL0/256,DL0&$FF ;1ST ZONE TIT PG. WITH INTER. 274 | .dc.b $47,DL1/256,DL1&$FF ;2ND ZONE OF TIT PG 275 | .dc.b $47,DL2/256,DL2&$FF ;3RD ZONE OF TIT PG 276 | .dc.b $47,DL3/256,DL3&$FF ;4TH ZONE OF TIT PG 277 | .dc.b $47,DL4/256,DL4&$FF ;5TH ZONE OF TIT PG 278 | .dc.b $47,DL5/256,DL5&$FF ;6TH ZONE OF TIT PG 279 | 280 | ; THEN THERE ARE 64 MORE BLANK LINES 281 | .dc.b $4F,NULHDR/256,NULHDR&$FF 282 | .dc.b $4F,NULHDR/256,NULHDR&$FF 283 | .dc.b $4F,NULHDR/256,NULHDR&$FF 284 | .dc.b $4F,NULHDR/256,NULHDR&$FF 285 | 286 | ; NOW WE HAVE ONE PLAYER MAP: 8 LINES 287 | .dc.b $C7,DLY/256,DLY&$FF 288 | 289 | ; THEN TWO BLANK LINES 290 | .dc.b $41,NULHDR/256,NULHDR&$FF 291 | 292 | ; DIFFICULTY LEVEL: 8 LINES 293 | .dc.b $47,DL6/256,DL6&$FF 294 | 295 | ; TWO BLANK LINES 296 | .dc.b $41,NULHDR/256,NULHDR&$FF 297 | 298 | ; TWO PLAYER MAP: 8 LINES 299 | .dc.b $47,DLZ/256,DLZ&$FF 300 | 301 | ; 8 BLANK LINES 302 | .dc.b $47,NULHDR/256,NULHDR&$FF 303 | ; COPYRIGHT MESSAGE: 8 LINES 304 | .dc.b $47,DL7/256,DL7&$FF 305 | ; 16 BLANK LINES 306 | .dc.b $43,NULHDR/256,NULHDR&$FF 307 | ; 16 MORE: 8 OF WHICH ARE ON THE SCREEN AND 8 WHICH ARE NOT 308 | .dc.b $4F,NULHDR/256,NULHDR&$FF 309 | ; THE REMAING 32 ARE OFF THE SCREEN 310 | .dc.b $4F,NULHDR/256,NULHDR&$FF 311 | .dc.b $CF,NULHDR/256,NULHDR&$FF ;25 NEEDED, EXTRA FOR SAFETY 312 | 313 | CRIGHTBL: .dc.b CRIGHT&$FF,BLANKCHR&$FF,AA&$FF,T&$FF,AA&$FF 314 | .dc.b R&$FF,I&$FF,BLANKCHR&$FF 315 | .dc.b 1,9,8,7 ;12 LONG EGGHEAD 316 | 317 | LOGOTBL: ;DLL FOR LOGO ON HSC 318 | ;8 HEADERS 24 BYTES LONG 319 | ; FIRST THE 24 BLANK LINES ---TRUST ME, MGF 320 | .dc.b $CF,NULHDR/256,NULHDR&$FF ;DLI HERE TO SET COLORS. 321 | .dc.b $47,NULHDR/256,NULHDR&$FF 322 | 323 | ; THEN WE HAVE 6 ZONES OF EIGHT HIGH FOR TITLE AND LOGO 324 | .dc.b $47,DL0/256,DL0&$FF ;1ST ZONE TIT PG. 325 | .dc.b $47,DL1/256,DL1&$FF ;2ND ZONE OF TIT PG 326 | .dc.b $47,DL2/256,DL2&$FF ;3RD ZONE OF TIT PG 327 | .dc.b $47,DL3/256,DL3&$FF ;4TH ZONE OF TIT PG 328 | .dc.b $47,DL4/256,DL4&$FF ;5TH ZONE OF TIT PG 329 | .dc.b $47,DL5/256,DL5&$FF ;6TH ZONE OF TIT PG WITH INTER 330 | 331 | 332 | * HEADERS FOR WINGS 333 | 334 | TITZN0TB: .dc.b WINGMAP0&$FF,$60,WINGMAP0/256,$2C,0 335 | TITZN1TB: .dc.b WINGMAP1&$FF,$60,WINGMAP1/256,$2C,0 336 | 337 | TITZN2TB: .dc.b WINGMAP2&$FF,$60,WINGMAP2/256,$3A,0 338 | TTZN2TB2: .dc.b (WINGMAP2+14)&$FF,$60,(WINGMAP2+14)/256,$3A,112 339 | 340 | TITZN3TB: .dc.b WINGMAP3&$FF,$60,WINGMAP3/256,$2E,8 341 | TITZN4TB: .dc.b WINGMAP4&$FF,$60,WINGMAP4/256,$2E,8 342 | TITZN5TB: .dc.b WINGMAP5&$FF,$60,WINGMAP5/256,$36,40 343 | 344 | * HEADERS FOR CREST 345 | CRTB1: .dc.b CRSTMAP1&$FF,$60,CRSTMAP1/256,$54,32 346 | CRTB2: .dc.b CRSTMAP2&$FF,$60,CRSTMAP2/256,$56,40 347 | CRTB3: .dc.b CRSTMAP3&$FF,$60,CRSTMAP3/256,$5C,64 348 | CRTB4: .dc.b CRSTMAP4&$FF,$60,CRSTMAP4/256,$5E,72 349 | CRTB5: .dc.b CRSTMAP5&$FF,$60,CRSTMAP5/256,$5E,72 350 | 351 | * HEADERS FOR ALL PARTS OF 'DESERT FALCON' TEXT 352 | DSTOPSTP: .dc.b TITCHR1&$FF,$94,TITCHR1/256,28 353 | FCTOPSTP: .dc.b TITCHR13&$FF,$94,TITCHR13/256,84 354 | DSBOTSTP: .dc.b TITCHR7&$FF,$94,TITCHR7/256,28 355 | FCBOTSTP: .dc.b TITCHR19&$FF,$94,TITCHR19/256,84 356 | DSSTPSTP: .dc.b TITCHR1&$FF,$74,TITCHR1/256,32 357 | FCSTPSTP: .dc.b TITCHR13&$FF,$74,TITCHR13/256,88 358 | DSSBTSTP: .dc.b TITCHR7&$FF,$74,TITCHR7/256,32 359 | FCSBTSTP: .dc.b TITCHR19&$FF,$74,TITCHR19/256,88 360 | 361 | * HEADERS FOR DIFFICULTY MAPS 362 | NOVHDTBL: .dc.b NOVMAP&$FF,$60,NOVMAP/256,$BA,12 363 | STDHDTBL: .dc.b STDMAP&$FF,$60,STDMAP/256,$B8,44 364 | ADVHDTBL: .dc.b ADVMAP&$FF,$60,ADVMAP/256,$B8,84 365 | EXPHDTBL: .dc.b EXPMAP&$FF,$60,EXPMAP/256,$BA,124 366 | 367 | * HEADER FOR CRIGHT MESSAGE 368 | CRHDTBL: .dc.b CRMAP&$FF,$60,CRMAP/256,$14,56 369 | 370 | * CHAR MAP TABLE FOR WINGS 371 | WNGMPTB0: .dc.b WINGS3&$FF,WINGS4&$FF,WINGS4&$FF 372 | .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF 373 | .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF 374 | .dc.b WINGS5&$FF,WINGS3&$FF,WINGS4&$FF 375 | .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF 376 | .dc.b WINGS4&$FF,WINGS4&$FF,WINGS4&$FF 377 | .dc.b WINGS4&$FF,WINGS5&$FF,WINGS3&$FF 378 | 379 | * CHAR MAP TABLE FOR DIFFICULTY MAP 380 | DIFTBL: .dc.b N&$FF,O&$FF,V&$FF,I&$FF,C&$FF,E&$FF 381 | .dc.b S&$FF,T&$FF,AA&$FF,N&$FF,D&$FF,AA&$FF 382 | .dc.b R&$FF,D&$FF,AA&$FF,D&$FF,V&$FF,AA&$FF 383 | .dc.b N&$FF,C&$FF,E&$FF,D&$FF 384 | .dc.b E&$FF,X&$FF,P&$FF,E&$FF,R&$FF,T&$FF 385 | 386 | * PALETTES FOR TITLE PAGE 387 | PALWD1: .dc.b $31,$3A,$16 ;PALETTE 1 USED FOR WINGS 388 | PALWD2: .dc.b $00,$00,$31 ;CREST (NOT THE TOOTHPASTE!) 389 | PALWD3: .dc.b $11,$10,$10 ;SHADOWS 390 | PALWD4: .dc.b $1B,$37,$44 ;TITLE 391 | 392 | * CHAR MAPS FOR ONE AND TWO PLAYER SHIT 393 | 394 | MOONTBL: .dc.b BLANKCHR&$FF,O&$FF,N&$FF,E&$FF,BLANKCHR&$FF 395 | .dc.b P&$FF,L&$FF,AA&$FF,Y&$FF 396 | .dc.b E&$FF,R&$FF 397 | PLUTOTBL: .dc.b T&$FF,W&$FF,O&$FF,BLANKCHR&$FF,P&$FF,L&$FF 398 | .dc.b AA&$FF,Y&$FF,E&$FF,R&$FF,S&$FF 399 | 400 | * THIS TURNS ON THE BRIGHTNESS OF THE CURRENT DIFFICULTY LEVEL 401 | DIFFTWID: 402 | LDX #3 403 | DULLOUT: LDY DLDEXTBL,X ;FIRST DULL THEM ALL OUT 404 | LDA DFPWDLL,X 405 | STA DL6,Y 406 | DEX 407 | BPL DULLOUT 408 | 409 | LDX DIFCULTY ;THEN BRIGHTEN THE CORRECT ONE 410 | LDY DLDEXTBL,X 411 | LDA DFPWBRT,X 412 | STA DL6,Y 413 | RTS 414 | 415 | * WRITES DIFF LEVEL AND NUM. PLAYERS INTO TIT PAGE DISPLAY 416 | DLDEXTBL: .dc.b 3,8,13,18 417 | DFPWBRT: .dc.b $1A,$18,$18,$1A ;BRIGHT 418 | DFPWDLL: .dc.b $BA,$B8,$B8,$BA ;DULL 419 | 420 | PLAYTWID: ;TURN ON CORRECT PLAYER 421 | LDA #$10 ;TURN ON: PALETTE 0, WIDTH 12 422 | LDY #$B0 ;TURN OFF: PALETTE 3, WIDTH 12 423 | 424 | LDX NUMPLYRS 425 | DEX 426 | BNE TWOTWO 427 | 428 | STY DLY+8 ;TURN OFF TWO PLAYERS 429 | STA DLZ+8 ;TURN ON ONE PLAYER 430 | RTS 431 | 432 | TWOTWO: STA DLY+8 ;TURN ON TWO PLAYERS 433 | STY DLZ+8 ;TURN OFF ONE PLAYER 434 | RTS 435 | 436 | **********RANDOM INITS********************************************************** 437 | * ABSZERO: ZEROES OUT 7800 RAM 438 | ABSZERO: LDA #$18 ;zero out absolute memory 439 | STA PTR0+1 ;this does pages 18 - 20 440 | LDA #0 441 | STA NULHDR 442 | STA NULHDR+1 443 | STA PTR0 444 | TAY 445 | ABSZERLP: STA (PTR0),Y 446 | DEY 447 | BNE ABSZERLP 448 | INC PTR0+1 449 | LDX PTR0+1 450 | CPX #$20 451 | BNE ABSZERLP 452 | 453 | LDX #$22 ;THIS DOES PAGES 22 THRU 27 454 | STX PTR0+1 ;A BETTER BE ZERO HERE OR ELSE 455 | REST0LP: STA (PTR0),Y 456 | DEY 457 | BNE REST0LP 458 | INC PTR0+1 459 | LDX PTR0+1 460 | CPX #$28 461 | BNE REST0LP 462 | 463 | RTS 464 | 465 | * DLYZFILL: FILLS CHAR MAP AT BOTTOM OF SCREEN 466 | DLYZFILL: 467 | LDX #$E 468 | YZFILL: LDA YFILL,X 469 | STA DLY,X 470 | LDA ZFILL,X 471 | STA DLZ,X 472 | DEX 473 | BPL YZFILL 474 | RTS 475 | 476 | 477 | * BLANKMAP: BLANKS OUT CHARACTER MAP ON BOTTOM OF SCREEN 478 | BLANKMAP: 479 | LDX #39 ;BLANK OUT CHARACTER MAP ON BOTTOM 480 | LDA #BLANKCHR&$FF 481 | LULUPE: STA PL1MAP,X 482 | STA PL1LVMAP,X 483 | DEX 484 | BPL LULUPE 485 | RTS 486 | 487 | * IOINIT: INITIALIZE SOFTWARE IO REGISTERS 488 | IOINIT: 489 | LDA #$0B 490 | STA SWCHBIO 491 | STA OLDSWCHB 492 | LDA #$FF 493 | STA LEFTBUT+1 494 | STA LEFTBUT 495 | STA RIGHTBUT 496 | STA RIGHTBUT+1 497 | RTS 498 | 499 | **********TOTINIT*************************************************************** 500 | TOTINIT: 501 | JSR ABSZERO ;ZERO OUT ABSOLUTE MEMORY 502 | JSR BLANKMAP ;BLANK OUT CHARACTER MAP 503 | JSR DLYZFILL ;FILL DLISTS FOR BOT OF SCREEN DISPLAY 504 | JSR IOINIT ;INITIALIZE SOFTWARE IO REGISTERS 505 | JSR SCRAPALL ;KILLS ALL TUNES 506 | JSR COLINIT ;INITIALIZE PALETTES 507 | 508 | LDX #59 ;COPY DISPLAY LIST LIST 509 | DLLLOOP: LDA DLTBL,X 510 | STA DLLIST,X 511 | DEX 512 | BPL DLLLOOP 513 | 514 | LDX #3 515 | STFLIST: 516 | LDY ZREFTBL,X ;INIT LIST REF PNTS 517 | LDA IDXTBL,X 518 | STA DXTBL,Y 519 | STA DFTBL,Y 520 | LDA IRLTBL,X 521 | STA RLTBL,Y 522 | LDA ILLTBL,X 523 | STA LLTBL,Y 524 | DEX 525 | BPL STFLIST 526 | 527 | ;THIS LOOP SETS UP SCROLLING OBJECT AREA TO BE EMPTY 528 | 529 | LDA #SCRENBOT+1 530 | LDX #79 ;FILL VPTBL WITH SCRENBOT+1'S 531 | 532 | FILLVPLP: STA VPTBL,X 533 | DEX 534 | BPL FILLVPLP 535 | 536 | ; THIS LOOP INITIALIZES THE SCROLLING OBJECT QUEUE 537 | LDX #PYRSTOP-PYRSTART 538 | LDY #PYRSTART 539 | KILLJACK: TYA 540 | STA SLOTQ,X 541 | INY 542 | DEX 543 | BPL KILLJACK 544 | 545 | LDA #0 546 | STA SLOTGPTR 547 | STA SLOTRPTR 548 | 549 | ; THIS LOOP INITIALIZES THE SCROLLING OBJECT BUFFER 550 | LDX #9 551 | STX FRBUFPTR ;INIT STACK POINTER 552 | ISOBLOOP: LDA #$FF 553 | STA STAMPID,X 554 | TXA 555 | STA FRBUFSTK,X ;PUT ALL BUFFER LOCATIONS IN FREE STACK 556 | DEX 557 | BPL ISOBLOOP 558 | 559 | ; THIS LOOP INITIALIZES THE MINI SPHINX TABLE 560 | LDX #MININUMB-1 561 | LDA #$FF 562 | MINITLP: STA MINITBL,X 563 | DEX 564 | BPL MINITLP 565 | 566 | ; THIS LOOP INITIALIZES THE FIRE POT TABLE 567 | LDX #FIRENUMB-1 568 | LDA #$FF 569 | FIRETLP: STA FIRETIP,X 570 | DEX 571 | BPL FIRETLP 572 | 573 | ; OF COURSE, X IS NOW FF 574 | STX HIEROSLT ;SLOT NUMBER FOR HIERO ANIMATION 575 | STX IOSIM ;SIMULATED JOYSTICK INPUT OF FF 576 | STX ZONEOFF 577 | STX UWEOK ;OK TO START UWE 578 | STX WAITCNT ;REST WAIT COUNTER 579 | STX OSCRLCNT 580 | DEX ;AND AN FE 581 | STX JERKOFF 582 | 583 | LDA #80 ;THIS IS DEFINED IN GAME AS ZBIRDZ 584 | STA ZTBL+ZBIRD 585 | 586 | LDA #CHARS/256 ;CHARBASES 587 | STA CHARBASE 588 | STA D11CBASE 589 | 590 | ; 591 | ; INITIALIZE DISPLAY LISTS 592 | ; 593 | LDX #11 594 | LDA #DL11&$FF 595 | STA PTR0 596 | UPTOP: LDA HIBYE,X 597 | STA PTR0+1 598 | LDY #6 ;Y=6 599 | LDA #00 600 | STA (PTR0),Y ;TO END DMA 601 | DEY ;Y=5 602 | STA (PTR0),Y ;TO END DMA 603 | DEY ;Y=4 604 | STA (PTR0),Y ;HPOS 605 | DEY ;Y=3 606 | LDA #ZPALWID 607 | STA (PTR0),Y 608 | DEY ;Y=2 609 | LDA #ZBUFFB/256 610 | STA (PTR0),Y 611 | DEY ;Y=1 612 | LDA #$60 ;160X2 INDIRECT MODE 613 | STA (PTR0),Y 614 | DEY ;Y=0 615 | LDA #ZBUFFB&$FF 616 | STA (PTR0),Y 617 | DEX 618 | BPL UPTOP 619 | 620 | ;MORE RANDOM INITIALIZATIONS 621 | LDA #1 ;1 622 | STA NEXFRAME 623 | LDA #8 ;NUMBER OF FLEAS AVAILABLE 624 | STA NUMFLEAS ;THE SCREEN 625 | LDA #11 626 | STA BUFDEX 627 | 628 | LDA #2 ;2 629 | STA FIRECNT 630 | 631 | ; 632 | ; CODE TO SET UP FOR LOADER 633 | ; 634 | LDX #23 635 | LDY #DL11/256 636 | INITLP9: STY ZNDLPOS,X 637 | DEY 638 | DEX 639 | DEX 640 | BPL INITLP9 641 | 642 | LDA #DL8/256 ;MULTIMEGAHACK 643 | STA ZNDLPOS+17 644 | LDA #DL9/256 645 | STA ZNDLPOS+19 646 | ;INITIALIZE LISTS WITH REFERENCE 647 | LDA #ZREF0 ;POINTS 648 | STA LOWEST 649 | LDA #ZREF3 650 | STA HIGHEST 651 | 652 | LDX #ZSHAD ;INSERT SHADOW AND BIRD INTO LIST 653 | LDA #$FE 654 | STA TEMP6 655 | STA TEMP10 656 | JSR OBJINS 657 | LDX #ZBIRD 658 | LDA #50 659 | STA TEMP6 660 | LDA #60 661 | STA TEMP10 662 | JSR OBJINS 663 | 664 | ;SET UP PW'S FOR THINGS THAT ARE CONSTANT 665 | ;PUT SHTBL IN ROM 666 | TESTHERE: LDA #$1C 667 | STA PWTBL+ZBIRD 668 | LDA #$3C 669 | STA PWTBL+ZSHAD 670 | 671 | ;AND SOME HIGH BYTES 672 | 673 | LDA #BIRDFMS/256 ;STORE SH'S AND SM'S 674 | STA SHTBL+ZBIRD 675 | STA SHTBL+ZSHAD 676 | CLC 677 | ADC #1 678 | STA SMTBL+ZBIRD 679 | STA SMTBL+ZSHAD 680 | 681 | LDX #3 682 | STFLP: 683 | LDA #$3E 684 | STA PWTBL+SHOTSHAD,X 685 | STA PWTBL+SPXSHTSH,X 686 | 687 | LDA #$1E ; PALETTE 0, 8 WIDE 688 | STA PWTBL+ZSHOT1,X 689 | LDA #$9E 690 | STA PWTBL+SPHXSHOT,X 691 | 692 | LDA #SHOTAN0/256 693 | STA SHTBL+ZSHOT1,X 694 | STA SHTBL+SHOTSHAD,X 695 | CLC 696 | ADC #1 697 | STA SMTBL+ZSHOT1,X 698 | STA SMTBL+SHOTSHAD,X 699 | 700 | LDA #SPSHOTST/256 ;SPHINX SHOT 701 | STA SHTBL+SPHXSHOT,X 702 | STA SHTBL+SPXSHTSH,X 703 | CLC 704 | ADC #17-5 705 | STA SMTBL+SPHXSHOT,X 706 | STA SMTBL+SPXSHTSH,X 707 | 708 | LDA #SPSHOTST&$FF ;SPHINX SHOT 709 | STA SLTBL+SPHXSHOT,X 710 | STA SLTBL+SPXSHTSH,X 711 | 712 | LDA IPTBLLO,X ;INIT CIRCULAR BUFFER FOR LOOKAHEAD 713 | STA PTRTBLLO,X ;CHAR MAP POINTER TABLE TO DIRT ONLY 714 | 715 | LDA IPTBLHI,X 716 | STA PTRTBLHI,X 717 | 718 | DEX 719 | BPL STFLP 720 | 721 | ;THOSE TRICKY SM'S 722 | 723 | LDA #2 724 | STA SCRATE 725 | 726 | LDA MASK9L+2 ;STUFF MASKS AS WELL 727 | STA LEFTMASK 728 | LDA MASK9L+1 729 | STA LEFTMASK+1 730 | LDA MASK9L 731 | STA LEFTMASK+2 732 | LDA MASK9L+3 733 | STA LEFTMASK+3 734 | 735 | LDA MASK9R+2 ;STUFF MASKS AS WELL 736 | STA RIGTMASK 737 | LDA MASK9R+1 738 | STA RIGTMASK+1 739 | LDA MASK9R 740 | STA RIGTMASK+2 741 | LDA MASK9R+3 742 | STA RIGTMASK+3 743 | 744 | LDX #2 745 | STX STUFFDEX 746 | INX 747 | STX LOADFDEX 748 | RTS 749 | 750 | IDXTBL: .dc.b 2*NUMBER,200,140,80 751 | ILLTBL: .dc.b $FF 752 | ZREFTBL: .dc.b ZREF0&$FF 753 | IRLTBL: .dc.b ZREF1&$FF,ZREF2&$FF,ZREF3&$FF,$FF 754 | 755 | IPTBLLO: .dc.b (BLOCK9+66)&$FF,(BLOCK9+33)&$FF,BLOCK9&$FF,(BLOCK9+99)&$FF 756 | IPTBLHI: .dc.b (BLOCK9+66)/256,(BLOCK9+33)/256,BLOCK9/256,(BLOCK9+99)/256 757 | 758 | TOTINIT2: 759 | JSR MCPINIT2 760 | 761 | LDA #$F1 ;DO SCROLLS TO FILL SCREEN 762 | JSRAGAIN: 763 | PHA 764 | JSR VSCRP 765 | JSR RANDOM 766 | JSR GRNDMCP 767 | JSR SCRLOAD 768 | JSR NEWBLOCK 769 | LDA #0 770 | STA GSCRFLAG 771 | STA GCOARSE 772 | JSR SCROLL 773 | PLA 774 | TAY 775 | DEY 776 | TYA 777 | BNE JSRAGAIN 778 | 779 | LDA #0 780 | STA SCRATE ;TO STOP SCROLLING 781 | STA SCROLLS ;TO KEEP FROM SCROLLING AGAIN 782 | 783 | JSR CLRPFLGS 784 | JSR PLACEMNT ;PUT THAT BIRD DOWN 785 | ; THIS DOES PROJECTION 786 | LDA SHADANAD,Y 787 | STA SLTBL+ZSHAD 788 | 789 | LDA #DLLIST&$FF ;SET UP DLIST LIST POINTER 790 | STA DPPL 791 | LDA #DLLIST/256 792 | STA DPPH 793 | 794 | LDA #DLITOP&$FF ;INTERRUPT SHIT 795 | STA DLIPTR 796 | LDA #DLITOP/256 ;ONLY TIME DLIPTR+1 IS STORED!!!! 797 | STA DLIPTR+1 798 | 799 | LDA #$80 800 | STA RUNLOAD ;FLAG TO ENABLE LOADER 801 | JSR LOADER ;once for good luck 802 | 803 | RTS 804 | 805 | INITGAME: LDA #GAMSTATE&$FF 806 | STA STATEPTR 807 | LDA #GAMSTATE/256 808 | STA STATEPTR+1 809 | 810 | JSR INITNPLR 811 | 812 | LDA #5 813 | STA PL1LIVES 814 | STA PL2LIVES 815 | 816 | LDA #40 ;UNDO AUTO PLAY HACK 817 | STA DLZ+9 818 | 819 | LDA #$50 ;SET UP TREASURE BASE VALUE 820 | STA TRVAL1+1 821 | STA TRVAL2+1 822 | 823 | LDA #1 ;INITIALIZE TREASURE MULTIPLIERS 824 | STA JEWCNT 825 | STA JEWCNT+1 826 | STA BARCNT 827 | STA BARCNT+1 828 | STA EGGCNT 829 | STA EGGCNT+1 830 | 831 | BCKSTART: ;STARTUP BACKGROUND TUNE 832 | LDX #1 833 | BCKINTLP: LDA #$0 834 | STA VBRUN,X 835 | LDA #$1 836 | STA DBK0,X 837 | LDA #$FF 838 | STA TBINDX0,X 839 | STA CBINDX0,X 840 | STA VBINDX0,X 841 | DEX 842 | BPL BCKINTLP 843 | 844 | RTS 845 | 846 | PLYONTBL: .dc.b BLANKCHR&$FF,BLANKCHR&$FF 847 | .dc.b P&$FF,L&$FF,AA&$FF,Y&$FF,E&$FF 848 | .dc.b R&$FF,BLANKCHR&$FF,O&$FF,N&$FF,E&$FF 849 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 850 | PLYTWTBL: .dc.b BLANKCHR&$FF,BLANKCHR&$FF 851 | .dc.b P&$FF,L&$FF,AA&$FF,Y&$FF,E&$FF,R&$FF 852 | .dc.b BLANKCHR&$FF,T&$FF,W&$FF,O&$FF 853 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 854 | 855 | INITNPLR: LDX #13 ;THERE ARE BETTER WAYS BUT THIS IS MOST 856 | GETCHA: LDA PLAYER ;BYTE EFFICIENT I THINK AND WE'RE NOT 857 | BEQ BLAH1 ;CONCERNED ABOUT TIME HERE 858 | LDA PLYTWTBL,X 859 | BNE BLAH2 ;THE ONLY ZERO CHARACTER IS ZERO 860 | BLAH1: LDA PLYONTBL,X 861 | BLAH2: STA BOTMSMAP+3,X 862 | DEX 863 | BPL GETCHA 864 | 865 | JSR BCKSTART ;START BACKGROUND TUNE 866 | 867 | LDA #$16 ;TURN ON PALETTE 868 | LDY #$B6 ;TURN OFF PALETTE 869 | LDX PLAYER 870 | BNE TWOISUP 871 | 872 | STA DLY+3 ;PLAYER ONE IS UP: TURN ON HIS SCORE 873 | STA DLZ+3 ;AND LIVES 874 | STY DLY+13 ;TURN OFF PLAYER TWO'S LIVES AND SCORE 875 | STY DLZ+13 876 | RTS 877 | 878 | TWOISUP: STA DLY+13 ;PLAYER TWO IS UP: TURN ON HIS SCORE 879 | STA DLZ+13 ;AND LIVES 880 | STY DLY+3 ;TURN OFF PLAYER ONE'S LIVES AND SCORE 881 | STY DLZ+3 882 | RTS 883 | 884 | 885 | INITAUTO: LDA #ATOSTATE&$FF 886 | STA STATEPTR 887 | LDA #ATOSTATE/256 888 | STA STATEPTR+1 889 | 890 | LDA #38 ;CENTER 'DESERT FALCON' IN BOTMSMAP 891 | STA DLZ+9 892 | 893 | LDX #12 894 | GGJJ2: LDA SPHTBL,X 895 | STA BOTMSMAP+4,X 896 | DEX 897 | BPL GGJJ2 898 | RTS 899 | 900 | 901 | YFILL: .dc.b PL1MAP&$FF,$60,PL1MAP/256,$16,0 902 | .dc.b TOPMSMAP&$FF,$60,TOPMSMAP/256,$2C,40 903 | .dc.b PL2MAP&$FF,$60,PL2MAP/256,$16,120 904 | 905 | ZFILL: .dc.b PL1LVMAP&$FF,$60,PL1LVMAP/256,$16,0 906 | .dc.b BOTMSMAP&$FF,$60,BOTMSMAP/256,$4C,40 907 | .dc.b PL2LVMAP&$FF,$60,PL2LVMAP/256,$16,120 908 | 909 | DLTBL: .dc.b $4F,NULHDR/256,NULHDR&$FF,$C8,NULHDR/256,NULHDR&$FF 910 | .dc.b $4F,DL0/256,DL0&$FF,$4F,DL1/256,DL1&$FF 911 | .dc.b $4F,DL2/256,DL2&$FF,$4F,DL3/256,DL3&$FF,$4F,DL4/256,DL4&$FF 912 | .dc.b $4F,DL5/256,DL5&$FF,$4F,DL6/256,DL6&$FF,$4F,DL7/256,DL7&$FF 913 | .dc.b $4F,DL8/256,DL8&$FF,$4F,DL9/256,DL9&$FF,$4F 914 | .dc.b DL10/256,DL10&$FF 915 | .dc.b $CF,DL11/256,DL11&$FF,$C0,NULHDR/256,NULHDR&$FF 916 | ;one blank line to clean up dma mess 917 | .dc.b $47,DLY/256,DLY&$FF,$47,DLZ/256,DLZ&$FF 918 | .dc.b $CF,NULHDR/256,NULHDR&$FF,$46,NULHDR/256,NULHDR&$FF 919 | 920 | * FOR PAL HACKING 921 | * .dc.b $4F,NULHDR/256,NULHDR&$FF,$4F,NULHDR/256,NULHDR&$FF 922 | * .dc.b $4F,NULHDR/256,NULHDR&$FF,$4B,NULHDR/256,NULHDR&$FF 923 | 924 | .dc.b $CF,NULHDR/256,NULHDR&$FF 925 | 926 | 927 | SPHTBL: .dc.b D&$FF,E&$FF,S&$FF,E&$FF,R&$FF,T&$FF 928 | .dc.b BLANKCHR&$FF,F&$FF,AA&$FF,L&$FF,C&$FF 929 | .dc.b O&$FF,N&$FF 930 | 931 | -------------------------------------------------------------------------------- /SKERNEL.S: -------------------------------------------------------------------------------- 1 | * SPHINX--SKERNEL.S 2 | 3 | ; ZERODEF 4 | 5 | ; RSEG CODE9 6 | 7 | *************** ALL DLI'S MUST START ON SAME PAGE!!!!!! *********** 8 | 9 | 10 | * DLITOP ;FIRST DLI TAKES PLACE AT TOP OF SCREEN 11 | DLITOP: ;SAVE REGISTERS 12 | PHA ;A,X,Y USED 13 | TXA 14 | PHA 15 | TYA 16 | PHA 17 | 18 | LDA #$50 ;RESTORE CTRL TO ITS OWN STATE 19 | STA CTRL 20 | 21 | LDA P0C2SHAD ;RESTUFF PALETTES FOR GAME SCREEN 22 | STA P0C2 ;SHOULD PROBABLY BE DONE WITH SHADOWS 23 | LDA P1C2SHAD 24 | STA P1C2 ;5/25/84 25 | LDA P2C2SHAD 26 | STA P2C2 27 | LDA P5C2SHAD ;TO UNDO OTHER HACK JEM: 5/14/84 28 | STA P5C2 29 | 30 | CLD ;RANDOM IS CALLED HERE, SO CLD 31 | ; BIT FUCKFLAG ;PUT THESE BACK TO SEE IF LOADER IS 32 | ; BPL FINE ;INTERRUPTED BY THIS DLI 33 | ; GOTCHA NOP 34 | ;REMEMBER THIS DLI HAPPENS EARLIER NOW! 35 | FINE: LDA DLZDEST ;CHANGE DLIPTR 36 | STA DLIPTR 37 | JSR RANDOM ;RANDOM NUMBER GENERATOR 38 | STA WSYNC 39 | LDA BACKCOL ;TURN ON BACKGROUND COLOR 40 | STA BACKGRND 41 | 42 | BIT FUCKFLAG 43 | BPL DONTFUCK 44 | 45 | JSR DOZEROS ;PUT ZEROS AT END OF DISPLAY LISTS 46 | 47 | DONTFUCK: PLA ;RESTORE REGISTERS 48 | TAY 49 | PLA 50 | TAX 51 | PLA 52 | RTI 53 | 54 | 55 | * DLIZ11 ;THIS MUST BE DONE AT END OF ZONE10 TO 56 | * SET CHARBASE FOR ZONE11. POTENTIALLY A SHORT ZONE AND MAY BE FOLLOWED BY ONE 57 | DLIZ11: 58 | PHA 59 | LDA D11CBASE 60 | STA WSYNC ;WAIT UNTIL END OF ZONE 10 61 | STA CHARBASE 62 | LDA #DLIBOT&$FF 63 | ;DMA SHOULD KICK IN HERE 64 | STA DLIPTR ;NEED TO HAVE TIME TO DO THIS STORE 65 | PLA 66 | RTI 67 | 68 | 69 | * DLISNCTT SYNCING DLI FOR TITLE PAGE 70 | DLISNCTT: 71 | PHA 72 | LDA #DLITIT&$FF 73 | JMP SYNCSAME 74 | 75 | * DLISYNC SYNCING DLI FOR REGULAR SCREEN 76 | DLISYNC: ;THIS IS THE SYNCIN' DLI 77 | PHA ;ARE WE SURE THIS IS CORRECT?? 78 | LDA #DLITOP&$00FF 79 | SYNCSAME: STA WSYNC 80 | STA WSYNC ;THIS SHOULD BE END OF KERNEL 81 | 82 | BIT MSTAT 83 | BPL UNSYNC ;PUNT IF IN KERNEL 84 | BIT MSTAT 85 | BPL UNSYNC 86 | 87 | STA DLIPTR 88 | 89 | UNSYNC: 90 | PLA 91 | RTI 92 | 93 | 94 | * DLZ11A ;ALTRNTE. DLI HANDLER FOR 1 LINE ZONE11 95 | DLZ11A: 96 | PHA 97 | 98 | LDA D11CBASE 99 | STA WSYNC ;WSYNC TO FINISH ZONE 10 100 | STA CHARBASE ;NEW CHARBASE FOR ZONE 11 101 | 102 | 103 | * THIS IS FUNCTIONALITY OF DLIBOT WHICH IS SKIPPED WHEN ZONE11 IS 1 HIGH 104 | LDA #DLISYNC&$00FF 105 | STA DLIPTR 106 | STA WSYNC ;THIS SHOULD FINISH ZONE 11 107 | 108 | LDA #CHARS/256 109 | STA CHARBASE ;THIS IS CHARBASE FOR SCORE 110 | 111 | LDA #$43 112 | STA WSYNC 113 | 114 | STA CTRL ;CTROL VALUE FOR 320 MODE 115 | 116 | LDA #0 ;BLACK BACKGROUND 117 | STA BACKGRND 118 | 119 | JMP NOWLOAD 120 | 121 | * DLITIT TITLE PAGE DLI 122 | DLITIT: ;ALL THESE REGISTERS MAY NOT HAVE TO 123 | PHA ;BE SAVED 124 | TXA 125 | PHA 126 | TYA 127 | PHA 128 | 129 | LDA #TITCHR1/256 130 | STA CHARBASE 131 | 132 | LDA #$50 ;COMMENT 133 | STA CTRL 134 | 135 | JSR DOALLIO 136 | INC FRMCNT 137 | BNE SHITT 138 | INC STATIMER 139 | 140 | SHITT: 141 | LDA #DLITIT2&$FF 142 | STA DLIPTR 143 | LDA #DLITIT2/256 144 | STA DLIPTR+1 145 | 146 | PLA 147 | TAY 148 | PLA 149 | TAX 150 | PLA 151 | RTI 152 | 153 | * DLITIT2 ;SETS CHARBASE FOR CHAR FONT AT BOTTOM 154 | DLITIT2: ;SECOND TITLE PAGE DLI 155 | PHA 156 | 157 | LDA #CHARS/256 158 | STA CHARBASE 159 | 160 | LDA #$43 161 | STA CTRL 162 | 163 | LDA #DLISNCTT&$00FF 164 | STA DLIPTR 165 | LDA #DLISNCTT/256 166 | STA DLIPTR+1 167 | 168 | PLA 169 | RTI 170 | 171 | * DLIBOT ;THIS MUST BE DONE IN DLI AT END OF 172 | DLIBOT: ;REGULAR ZONES 173 | PHA 174 | ;DLI TO CHANGE BACKGROUND COLOR 175 | 176 | LDA #CHARS/256 177 | STA CHARBASE 178 | STA WSYNC ;THIS SHOULD FINISH ZONE 11 179 | 180 | LDA #DLISYNC&$00FF 181 | STA DLIPTR 182 | 183 | LDA #$43 ;CTRL FOR 320 MODE 184 | STA WSYNC 185 | 186 | STA CTRL 187 | 188 | LDA #0 ;BLACKGROUND 189 | STA BACKGRND 190 | 191 | NOWLOAD: 192 | * COLOR CHANGES FOR BOTTOM OF SCREEN DISPLAY 193 | LDA #$06 ;THESE ARE HARDWIRED NOT THE ONES AT 194 | STA P5C2 ;TOP OF SCREEN 195 | LDA P1C2SHDB ;SHADOW NEEDED HERE 196 | STA P1C2 ;FOR TOPMSMAP 197 | LDA #$3E 198 | STA P2C2 ;FOR BOTMSMAP 199 | LDA #$EF 200 | STA P0C2 ;FOR SCORE AND XTRA LIVES 201 | 202 | TXA 203 | PHA 204 | TYA 205 | PHA 206 | 207 | CLD ;ONLY NEEDED FOR DLI'S WHICH ADD OR SUB 208 | 209 | * FREEZE FRAMER 210 | FRZFRMR: BIT FREEZEP 211 | BPL DOTODO 212 | 213 | LDA PERIOD 214 | beq .toNothing 215 | 216 | DEC NEXFRAME 217 | beq .ok1 218 | .toNothing: jmp NOTHING 219 | .ok1: 220 | 221 | STA NEXFRAME 222 | 223 | LDX HOWMANY 224 | BEQ DOTODO 225 | DEX 226 | STX HOWMANY 227 | BNE DOTODO 228 | 229 | LDX #0 230 | STX PERIOD 231 | INX 232 | STX NEXFRAME 233 | 234 | DOTODO: INC FRMCNT ;GO FOR FRMCNT 235 | BNE BLAH 236 | INC STATIMER ;IT IS TWO BYTES 237 | 238 | BLAH: lda ENDCOUNT 239 | beq .skip 240 | dec ENDCOUNT 241 | .skip: 242 | DEC SECOND ;SECOND COUNTER 243 | BPL NOTSECND 244 | 245 | LDA #59 ;START NEXT SECOND 246 | STA SECOND 247 | 248 | LDA PHASE ;TIME THE BONUS RACK 249 | CMP #$FE 250 | BNE NOTBONUS ;NOT IN BONUS RACK 251 | 252 | SED 253 | LDA BNSTIMER 254 | SEC 255 | SBC #1 256 | STA BNSTIMER 257 | CLD 258 | BNE NOTBONUS ;NOT DONE WITH BONUS 259 | 260 | JSR LDTREAS ;DISPLAY ZERO SECONDS 261 | 262 | DEC PHASE ;GOTO FLASH PHASE 263 | LDA #FLASHT0 264 | JSR TUNIN 265 | LDA #FLASHT1 266 | JSR TUNIN 267 | 268 | NOTBONUS: 269 | LDA PTIMER ;POWER TIMER 270 | BEQ .ok1 271 | 272 | jsr decTimer ;Decrement power timer and flash power. 273 | jmp NOTSECND 274 | 275 | .ok1: ldx PLAYER 276 | lda RACK,x ;Round one? 277 | bne NOTSECND ;Only give help message in round 1. 278 | 279 | lda DIFCULTY ;Novice or Standard game? 280 | cmp #2 281 | bcs NOTSECND ;Only give help in Novice and Standard. 282 | 283 | lda PGPOWER,x ;Does player currently have a power? 284 | bne .ok2 285 | 286 | lda #$1F ;Flash "GET 3 HIERO" message. 287 | sta ROTATE 288 | .ok2: 289 | 290 | NOTSECND: LDA FRMCNT ;DISPATCH ON ODD OR EVEN 291 | LSR 292 | BCC DOTUNE 293 | 294 | DOLOAD: BIT RUNLOAD 295 | BPL DOTUNE 296 | JSR SCROLL ;ON ODD, SCROL CMAPS AND RUN LOADER 297 | JSR LOADER 298 | LDA #0 299 | STA RUNLOAD 300 | 301 | DOTUNE: JSR TUNER ;TUNE DRIVER 302 | JSR RUNBACK ;UPDATE BACKGROUND TUNE 303 | JSR BACKON ;CHECK TO PUT ON BACKGOUND TUNE. IF 304 | ;SO, SWAP IT IN 305 | 306 | NOTHING: 307 | JSR DOALLIO 308 | 309 | INTEROUT: 310 | PLA ;RESTORE REGISTERS 311 | TAY 312 | PLA 313 | TAX 314 | PLA 315 | RTI 316 | 317 | ZERO = 0 318 | 319 | DLIHSC0: 320 | PHA 321 | TXA 322 | PHA 323 | TYA 324 | PHA 325 | ;DO COLORS, CHARBASE, AND CONTROL 326 | LDA #TITCHR1/256 327 | STA CHARBASE 328 | 329 | LDA #$50 330 | STA CTRL 331 | 332 | LDA #DLIHSC1&$FF ;SAME PAGE I HOPE 333 | STA DLIPTR 334 | 335 | LDA #$0F 336 | STA P0C2 337 | 338 | LDA #$3A 339 | STA P1C2 340 | 341 | LDA #$00 342 | STA P2C2 343 | 344 | LDA #$10 345 | STA P3C2 346 | 347 | LDA #$37 348 | STA P4C2 349 | 350 | JSR TUNER ;RUN THE TUNES 351 | 352 | PLA 353 | TAY 354 | PLA 355 | TAX 356 | PLA 357 | RTI 358 | 359 | DLIHSC1: 360 | PHA 361 | TXA 362 | PHA 363 | TYA 364 | PHA 365 | 366 | LDA #DLIHSC0&$00FF 367 | STA DLIPTR 368 | 369 | JSR HSCSETRS ;RESETS WAT'S REG'S 370 | 371 | JMP INTEROUT 372 | 373 | ******************************************************************************** 374 | * * 375 | * STARTUP * 376 | * * 377 | ******************************************************************************** 378 | 379 | STARTUP: SEI ;HARDWARE DEPENDENT INITS 380 | CLD 381 | ; LDA #$07 ;LOCK ME IN MARIA MODE 382 | LDA #$87 ;PUT THIS IN WHEN WE HAVE 2BUT HARDWARE 383 | STA $1 384 | LDA #0 ;FOR FUTURE EXPANSION AND IMPERIALISM 385 | STA OFFSET 386 | LDX #$FF ;STACK POINTER AT $1FF 387 | 388 | TXS 389 | 390 | LDX #$7F ;KEEP COLOR BURST ON 391 | STX CTRL ;TURN OFF DMA 392 | 393 | LDY #$FF ;zero out zero page 394 | ZERLOOP: 395 | CPY #CTRL ;DON'T STORE TO CTRL AGAIN 396 | BEQ NOSTOR ;TO AVOID TURNING ON DMA 397 | STA ZERO,Y 398 | NOSTOR: DEY 399 | BNE ZERLOOP 400 | 401 | LDA #0 ;ENOUGH TIME HAS ELAPSED TO ALLOW CAPS 402 | STA $1 ;TO DISCHARGE SO CONTINUE FUCKING WITH 403 | LDA #$14 ;IO HARDWARE 404 | STA CTLSWB 405 | LDA #0 ;SELECT TWO BUTTON MODE 406 | STA SWCHB 407 | 408 | LDX #$40 ;POWER UP GETS THIS ONE 409 | LDA #0 410 | LEVEL1LP: STA ZERO,X 411 | INX 412 | BNE LEVEL1LP 413 | JSR PREINIT ;THIS SETS UP THE POWER UP DEFAULT 414 | JSR INITIT 415 | ;MODES FOR THE GAME 416 | JMP VBLNK 417 | 418 | GAMEDO: ;RESETS GO TO HERE 419 | LDX #FUTEXP1 420 | LDA #0 421 | LEVEL2LP: STA ZERO,X 422 | INX 423 | BNE LEVEL2LP 424 | ; 425 | JSR TOTINIT 426 | JSR MCPINIT ;TAKEN OUT OF TOTINIT 427 | JSR TOTINIT2 428 | ; 429 | BIT GAMEU 430 | BPL SHINIT 431 | ; 432 | JSR INITGAME 433 | JMP SHINIT 434 | 435 | NEWPLYDO: ;AUTOPLAY GOES HERE 436 | LDX #FUTEXP3 ;!!!!!!!!! 437 | LDA #0 438 | LEVEL3LP: STA ZERO,X 439 | INX 440 | BNE LEVEL3LP 441 | JSR TOTINIT 442 | JSR TOTINIT2 443 | ; 444 | BIT TITLMENU ;TITLMENU? 445 | BMI CKPLR 446 | JSR INITIT ;YES, JSR INITIT AND CONTINUE 447 | JMP VBLNK 448 | 449 | CKPLR: BIT NEWPLYR 450 | BPL ATOCK 451 | JSR INITNPLR 452 | JMP SHINIT 453 | ATOCK: BIT AUTOPLAY 454 | BPL SHINIT 455 | JSR INITAUTO 456 | JMP SHINIT 457 | 458 | SHINIT: 459 | VBLNK: BIT MSTAT ;WAIT FOR V BLANK 460 | BPL VBLNK 461 | BIT MSTAT ;DO WE STILL NEED TWO OF THESE??? 462 | BPL VBLNK ;NO 463 | 464 | LDA #$50 ;FINALLY TURN ON DMA 465 | STA CTRL 466 | 467 | BIT NEWPLYR 468 | BMI JFK 469 | 470 | LDA #ALADIN1 ;START TUNE THIS IS BULLSHIT 471 | JSR TUNIN ;COMMENTED OUT CAUSE I CANT STAND IT 472 | LDA #ALADIN0 473 | JSR TUNIN 474 | 475 | JFK: LDA #0 ;FLAGS JOB IS DONE SO RESET 476 | STA NEWPLYR 477 | 478 | 479 | MAINLOOP: 480 | LDA SWCHBIO ;GET CURRENT STATE OF IO 481 | TAY ;TUCK SWCHBIO AWAY FOR NOW 482 | EOR OLDSWCHB 483 | BEQ CONTGAME ;NO CHANGE IN IO SO BRANCH 484 | 485 | * CHANGE! IS IT A RESET? 486 | LSR ;CHECK FOR CHANGE IN RESET 487 | BCC PCHKSLCT ;NO CHANGE SO CHECK SELECT 488 | LSR OLDSWCHB ;CHECK OLD RESET BIT IF ZERO 489 | ;THEN WE'VE GOT A RESET 490 | BCS CHEKSLCT ;OTHERWISE CHECK FOR SELECT 491 | ;CARRY CLEAR SO CHANGE IN RESET BIT 492 | ;& OLD VALUE OF ZERO INDICATES A RESET 493 | GOTOGAME: LDX #$7F ;DONT'T TURN OFF COLOR BURST 494 | STX CTRL ;BUT DONT TURN OFF DMA 495 | LDX #$FF 496 | STX TITLMENU ;TURN OFF TITLMENU FLAG 497 | STX GAMEU ;TURN ON GAME FLAG 498 | INX 499 | STX NEWPLYR ;MAKE SURE NEWPLYR IS OFF 500 | STX PAUSE ;TURN OFF ALL OTHER STATE FLAGS 501 | STX HSC ;FOR SECURITY 502 | STX AUTOPLAY 503 | STX DMA 504 | STX GAMEOVR 505 | STX PLAYER ;PLAYER 1 IS FIRST 506 | JMP GAMEDO 507 | 508 | * IS IT A SELECT? 509 | PCHKSLCT: LSR OLDSWCHB ;ACCUM. HAS EOR OF SWCHB AND OLDSWCHB 510 | CHEKSLCT: LSR ;CHECK FOR SELECT BIT 511 | BCC PPAWS ;NO SELECT CHECK FOR PAUSE NEXT 512 | 513 | LSR OLDSWCHB ;POSSIBLE SELECT CHECK FOR 0 TO 1 TRANS 514 | BCC MENOPAWS ;1 TO 0 TRANSITION SO IGNORE 515 | ;LOOKS LIKE A SELECT TO ME 516 | BIT TITLMENU ;BUT ARE WE ALREADY IN TIT PGE. IF SO 517 | BPL MENOPAWS ;PUNT 518 | 519 | GOTOTIT: LDX #0 520 | STX STATIMER ;RESET STATIMER 521 | STX GAMEU ;TURN OFF GAME IF ON 522 | STX NEWPLYR ;TURN OFF NEWPLYR 523 | STX TITLMENU ;TURN ON TITLMENU 524 | STX AUTOPLAY ;TURN OFF AUTOPLAY 525 | STX DMA ;TURN OFF DMA FLAG 526 | STX GAMEOVR ;TURN OFF GAME OVER FLAG IF SET 527 | 528 | NEWPLR: LDX #$7F ;SWITCH PLAYERS BUT 529 | STX CTRL 530 | LDX #$FF 531 | TXS ;THIS IS PROBABLY NOT NECESSARY 532 | JMP NEWPLYDO ;GO TO TITLE PAGE 533 | 534 | PPAWS: LSR OLDSWCHB 535 | MENOPAWS: LSR ;THIS JUST SETS A FLAG WHICH GAME LOOKS 536 | LSR ;AT. SHIFT TO CHECK PAUSE BIT 537 | BCC CONTGAME 538 | 539 | LSR OLDSWCHB ;CHECK TO SEE IF OLD VALUE IS LOW 540 | LSR OLDSWCHB 541 | BCS CONTGAME ;NOT LOW SO PUNT 542 | 543 | LDA #$FF ;PAUSE BUTTON HAS BEEN PRESSED 544 | STA PAWSTWID 545 | 546 | CONTGAME: STY OLDSWCHB 547 | JMP (STATEPTR) ;JUMP TO APPROPRIATE STATE 548 | 549 | 550 | * GAME STATE 551 | GAMSTATE: BIT GAMEOVR ;IF OVER BOOGIE ON TO TITLE PAGE 552 | BPL NOGOTIT 553 | 554 | LDX #$7F ;WHO THE FUCK KNOWS ANYWAY 555 | STX CTRL 556 | JSR HSPOWNIT 557 | JSR HSGAMOVR 558 | JMP GOTOTIT 559 | 560 | NOGOTIT: BIT NEWPLYR ;IF NOT OVER BUT NEW PLAYER RESET 561 | BMI NEWPLR 562 | 563 | BIT PAWSTWID 564 | BPL JPDOGAME 565 | ;SET UP PAUSE STATE 566 | LDX #$FF 567 | STX FREEZEP ;TURN ON FREEZE FRAME 568 | LDA #PSESTATE&$FF ;INITIALIZE POINTER TO PAUSE 569 | STA STATEPTR 570 | LDA #PSESTATE/256 571 | STA STATEPTR+1 572 | INX 573 | STX GAMEU ;TURN OFF GAME FLAG 574 | STX PAWSTWID ;TURN OFF PAUSE TWIDDLE 575 | STX AUDV0 ;KILL SOUNDS 576 | STX AUDV1 ;TUNER NEVER CALLED WHEN IN FREEZE MODE 577 | JMP MAINLOOP 578 | 579 | JPDOGAME: JMP DOGAME 580 | 581 | 582 | * PAUSE STATE 583 | PSESTATE: 584 | BIT PAWSTWID 585 | BPL JMNLP ;PAUSE TWIDDLE NOT SET SO JMP MAINLOOP 586 | 587 | LDX #$FF ;GO BACK TO GAME STATE 588 | STX GAMEU 589 | 590 | INX 591 | STX PAWSTWID 592 | STX FREEZEP ;TURN OFF FREEZE FRAMER 593 | STX PAUSE ;TURN OFF PAUSE 594 | LDA #GAMSTATE&$00FF ;INITIALIZE POINTER FOR GAME STATE 595 | STA STATEPTR 596 | LDA #GAMSTATE/256 597 | STA STATEPTR+1 598 | JMNLP: JMP MAINLOOP 599 | 600 | 601 | * TIT STATE 602 | TITSTATE: ;ONLY DO IT ONCE A FRAME??? 603 | LDA FRMCNT 604 | CMP TITCNT 605 | BEQ JMNLP 606 | 607 | LDA FRMCNT 608 | STA TITCNT 609 | 610 | DEC OTIMER ;HAVE WE WAITED AFTER INITIAL START 611 | BNE JMNLP ;OF TITLE PAGE 612 | 613 | LDA #1 ;HACK TO DEACTIVATE OTIMER 614 | STA OTIMER 615 | 616 | BIT LEFTBUT ;CHECK FOR TRIGGER RESET 617 | BMI SLDKFJ 618 | 619 | JMP GOTOGAME ;BUTTON PRESSED, SO RESET TO GAME MODE 620 | 621 | SLDKFJ: LDA SWCHA ;ANY PLAYER ONE JOYSTICK INPUT RESET 622 | AND #$F0 ;TIMER 623 | CMP #$F0 624 | BEQ NOTIMRST 625 | LDA #0 626 | STA STATIMER 627 | 628 | NOTIMRST: LDA SWCHB ;IS SELECT DEPRESSED? 629 | AND #$02 630 | BEQ CHKSTIM ;YES, BRANCH 631 | 632 | LDA #$80 ;NO MAKE SURE TIMER ISN'T STARTED 633 | STA STIMER 634 | BMI DIFFCHK ;AND CONTINUE TO OTHER CODE 635 | 636 | CHKSTIM: LDA #0 ;IO HAS OCCURRED SO RESET TIT. PGE TIMR 637 | STA STATIMER 638 | 639 | LDA #$80 ;BLOW OTHER TIMERS OUT OF THE WATER 640 | STA ETIMER ;SELECT SWITCH HAS PRIORITY OVER 641 | STA WTIMER ;JOYSTICK 642 | 643 | BIT STIMER ;HAS TIMER BEEN SET? 644 | BMI CHGSETNG ;NO SO GO AHEAD AND CHANGE SETTING 645 | 646 | DEC STIMER ;TIMER IS SET SO DECREMENT IT 647 | BNE JMNLP ;PUNT IF NOT AT ZERO 648 | 649 | CHGSETNG: INC DIFCULTY ;CYCLE THROUGH DIFFICULTIES 650 | LDA DIFCULTY 651 | AND #$03 652 | STA DIFCULTY ;Range 0-3 653 | BNE TWIDIL 654 | LDA NUMPLYRS 655 | EOR #$03 656 | STA NUMPLYRS 657 | JSR PLAYTWID 658 | TWIDIL: JSR DIFFTWID 659 | LDA #35 660 | STA STIMER 661 | JMP MAINLOOP 662 | 663 | DIFFCHK: LDA SWCHA 664 | AND #$80 ;CHECK EAST BIT 665 | BEQ CHKETIM ;YES 666 | 667 | LDA #$80 ;NO, SO ENABLE EAST MOVEMENT 668 | STA ETIMER 669 | BMI CHKWEST 670 | 671 | CHKETIM: BIT ETIMER ;IS EAST MOVEMENT ENABLED? 672 | BMI INCDIFF ;YES SO INC DIFFICULTY 673 | 674 | DEC ETIMER ;NOT ENABLED SO WE MUST COUNT DOWN 675 | BNE CHKWEST ;AND THEN GO AWAY 676 | 677 | INCDIFF: INC DIFCULTY ;INCREMENT DIFFICULTY LEVEL 678 | LDA DIFCULTY 679 | AND #$03 680 | STA DIFCULTY ;Range 0-3 681 | JSR DIFFTWID 682 | LDA #35 683 | STA ETIMER ;DISABLE EAST MOVEMENT AND SET TIMRE 684 | 685 | CHKWEST: LDA SWCHA 686 | AND #$40 687 | BEQ CHKWTIM 688 | 689 | LDA #$80 690 | STA WTIMER 691 | BMI SELCHK 692 | 693 | CHKWTIM: BIT WTIMER 694 | BMI DECDIFF 695 | 696 | DEC WTIMER 697 | BNE SELCHK 698 | 699 | DECDIFF: DEC DIFCULTY 700 | LDA DIFCULTY 701 | AND #$03 702 | STA DIFCULTY ;Range 0-3 703 | JSR DIFFTWID 704 | LDA #35 705 | STA WTIMER 706 | 707 | SELCHK: LDA SWCHA ;CHECK NORTH BIT FOR NUMBER OF PLAYERS 708 | AND #$F0 709 | CMP #$E0 ;SELECT 710 | BNE CHKSOUTH 711 | 712 | LDX #2 713 | STX NUMPLYRS ;TWO PLAYERS 714 | JSR PLAYTWID 715 | 716 | JMP TIMCHK 717 | 718 | CHKSOUTH: ;A STILL HAD SWCHA AND F0 719 | CMP #$D0 ;CHECK SOUTH BIT 720 | BNE TIMCHK ;ACCUMULATOR STILL SET FROM LDA ABOVE 721 | 722 | LDX #1 723 | STX NUMPLYRS ;SET NUMBER OF PLAYERS TO ONE 724 | JSR PLAYTWID 725 | 726 | TIMCHK: LDA STATIMER ;CHECK FOR TIMEOUT 727 | CMP #4 728 | BNE .MJMP 729 | 730 | LDX #$7F ;DONT' TURN OFF COLOR BURST 731 | STX CTRL ;BUT TURN OFF DMA 732 | 733 | JSR HSPOWNIT 734 | JSR HSDISP ;DO HIGH SCORE CART DISPLAY 735 | 736 | LDX #$7F ;WHEN IN DOUBT TURN OFF CTRL 737 | STX CTRL 738 | 739 | LDX #$FF 740 | TXS 741 | STX TITLMENU ;TURN OFF TITLEMENU 742 | STX AUTOPLAY ;TURN ON AUTOPLAY 743 | INX 744 | STX STATIMER ;CLEAR TIMING FLAG 745 | JSR EXTRAINIT ;!!!!!!!!! 746 | JMP NEWPLYDO 747 | 748 | .MJMP: JMP MAINLOOP 749 | 750 | 751 | * AUTOPLAY STATE 752 | ATOSTATE: BIT LEFTBUT ;CHECK FOR TRIGGER RESTART 753 | BMI TIMCHKA 754 | 755 | JMP GOTOGAME ;GO TO GAME STATE TRIGGER PRESSED 756 | 757 | TIMCHKA: LDA STATIMER ;MORE TIMEOUT CHECKS 758 | CMP #5 759 | BNE CHKSTK 760 | 761 | GOTOSEL: JMP GOTOTIT ;DON'T TURN OFF COLOR 762 | 763 | CHKSTK: LDA SWCHA ;CHECK FOR SELECT 764 | AND #$F0 765 | CMP #$F0 766 | BNE GOTOSEL 767 | 768 | 769 | 770 | 771 | DOGAME: LDA FRMCNT ;MAIN LOOP 772 | SEC 773 | SBC OLDFRM 774 | CMP #2 ;ONLY EXECUTE EVERY OTHER FRAME 775 | BCS DOALL 776 | JSR RANDOM ;DO RANDOM IF NOTHING LEFT TO DO 777 | JMP MAINLOOP 778 | DOALL: LDA FRMCNT ;THIS IS THE MAMA LOOP 779 | STA OLDFRM 780 | 781 | INC MAINCNT 782 | BNE DOALL1 783 | LDX PLAYER 784 | ; INC GAMETIME,X 785 | DOALL1: 786 | BIT RUNLOAD 787 | BMI DOALL1 788 | 789 | LDA PHASE 790 | BPL .NOFLASH 791 | CMP #$FE 792 | BCC FLASH ;FLASH STARTS AT -3 793 | 794 | .NOFLASH: JSR VSCRP 795 | LDA #$80 796 | STA RUNLOAD 797 | JSR ENEMYMCP ;MCP FOR NON-SCROLL RELATED ENEMIES 798 | JSR GRNDMCP ;CALL MCP FOR SCROLLING COUPLED ENEMIES 799 | JSR GAME ;BIRD AND SHOT DRIVER AND OTHER THINGS 800 | JSR ANIMFLEA ;FLEA DRIVER 801 | JSR UWEANIM ;UWE DRIVER 802 | JSR SCRLOAD 803 | JSR DOMINIS 804 | JSR DOSPHINX 805 | JSR DOSXSHTS 806 | JSR DOFIRE 807 | JSR DOHIEROS 808 | JSR NEWBLOCK 809 | JSR LDSCORE ;LOAD SCORE DISPLAY 810 | JSR LDLIVES ;LOAD LIVES DISPLAY 811 | JSR LDTREAS ;LOADS TREASURE DISPLAY 812 | 813 | JSR LDHIEROS ;LOAD HEIROGLYPH DISPLAY 814 | * JSR LDPOWER ;LOAD POWER DISPLAY 815 | ***** 816 | LDA #0 817 | STA GSCRFLAG 818 | STA GCOARSE 819 | JMP MAINLOOP ;AND AGAIN AND AGAIN 820 | 821 | ** FLASH COLORS ON THE SCREEN ** 822 | FLASH: DEC PHASE 823 | LDA PHASE 824 | CMP #$C4 ;TIME THE FLASH, -60. 825 | BNE CCFL0 826 | 827 | LDX PLAYER 828 | INC RACK,X 829 | 830 | LDA #0 831 | STA SVDIST,X 832 | STA SVDIST+2,X 833 | STA SVHDIST,X 834 | STA SVHDIST+2,X 835 | 836 | LDA #$FF 837 | STA NEWPLYR 838 | 839 | JSR ENDBONUS 840 | 841 | LDA #0 842 | STA PHASE 843 | 844 | JMP MAINLOOP 845 | 846 | * SET RANDOM COLORS INTO ALL PALLETTES * 847 | CCFL0: LDX #$1F 848 | CCFL1: 849 | JSR RANDOM 850 | STA BACKGRND,X 851 | CCFL2: DEX 852 | BMI FNOMORE 853 | TXA 854 | AND #3 855 | BNE CCFL1 856 | BEQ CCFL2 857 | FNOMORE: 858 | JSR RANDOM 859 | STA BACKCOL 860 | 861 | JMP MAINLOOP 862 | 863 | 864 | RANDOM: ADC FRMCNT ;RANDOM NUMBER GENERATOR 865 | ADC RNDOM 866 | ADC RNDOM1 867 | PHA 868 | LDA RNDOM 869 | STA RNDOM1 870 | PLA 871 | STA RNDOM 872 | clc 873 | RTS 874 | 875 | * DOALLIO MAPS HARDWARE FIREBUTTON INTO SOFTWARE REGS. SAME FOR 876 | * SWCHB. COMPLEMENTS OF ETHAN 877 | DOALLIO: 878 | LDA SWCHA ;FOR TRIGGERING BREAKPOINTS. WILL BE 879 | ;MADE INTO MECHANISM TO STUFF SOFTWARE 880 | ;REGISTERS 881 | LDA SWCHB ;GET SWCHB FOR RESETS AND SUCH 882 | AND #$0B 883 | STA SWCHBIO 884 | 885 | CKJOY: LDX #1 ;DO PLAYERS 1 AND 0 886 | ZNXTRJ: JSR READJOY ;READ HIS JOYSTICK 887 | DEX 888 | BPL ZNXTRJ 889 | RTS 890 | 891 | * READJOY: READ JOYSTICK/BUTTONS. ON ENTRY X = PLAYER. Y GETS TRASHED 892 | READJOY: LDY INPT4,X 893 | BPL GOTONE ;IF BIT 7 IS LO, OLD-STYLE BUTTON HIT 894 | 895 | LDA ONEBUT ;ARE WE ALREADY IN OLD-STYLE MODE? 896 | AND RJBITS,X 897 | BNE GOTONE2 ;YES. GO RIGHT TO ONE-BUTTON HANDLER. 898 | 899 | TXA ;OTHERWISE, COMPUTE INDEX INTO 900 | ASL ; PADDLE PORTS, FOR PLAYER X, 901 | TAY ; IN Y (X * 2) 902 | 903 | LDA INPT4L,Y ;READ LEFT BUTTON 904 | EOR #$FF ;INVERT SENSE 905 | STA LEFTBUT,X 906 | LDA INPT4R,Y ; RIGHT BUTTON 907 | EOR #$FF ;INVERT SENSE 908 | RJSTORE: STA RIGHTBUT,X 909 | 910 | RJRTS: RTS 911 | 912 | ;HERE ON OLD-STYLE SINGLE BUTTON JOYSTICK PRESS. 913 | GOTONE: LDA ONEBUT ;SET ONE-BUTTON MODE IMMEDIATELY 914 | ORA RJBITS,X ; TO AVOID DESTROYING HARDWARE! 915 | STA SWCHB 916 | STA ONEBUT ;UPDATE ONE BUTTON FLAG BYTE 917 | 918 | ;HERE ON ANY OLD-STYLE JOYSTICK, WHETHER PRESSED OR NOT 919 | GOTONE2: TYA 920 | STA LEFTBUT,X ; (Y CONTAINS CURRENT VALUE OF INPT4) 921 | STA RIGHTBUT,X ;CLEAR RIGHT BUTTON COPY 922 | 923 | RTS 924 | 925 | RJBITS: .dc.b $04,$10 ;MASK OF "ONE-BUTTON" BITS PER PLAYER 926 | RTS 927 | 928 | 929 | * PUT ZEROS AT THE END OF EACH DISPLAY LIST 930 | 931 | DOZEROS: TXA 932 | PHA 933 | TYA 934 | PHA 935 | 936 | LDA #0 ;STORE ZEROES AT END OF DLISTS 937 | TAX ;TRADE ROM FOR TIME 938 | LDY #1 ;TWO ZEROS EACH 939 | STA (ZNDLPOS,X) 940 | STA (ZNDLPOS),Y 941 | STA (ZNDLPOS+2,X) 942 | STA (ZNDLPOS+2),Y 943 | STA (ZNDLPOS+4,X) 944 | STA (ZNDLPOS+4),Y 945 | STA (ZNDLPOS+6,X) 946 | STA (ZNDLPOS+6),Y 947 | STA (ZNDLPOS+8,X) 948 | STA (ZNDLPOS+8),Y 949 | STA (ZNDLPOS+10,X) 950 | STA (ZNDLPOS+10),Y 951 | STA (ZNDLPOS+12,X) 952 | STA (ZNDLPOS+12),Y 953 | STA (ZNDLPOS+14,X) 954 | STA (ZNDLPOS+14),Y 955 | STA (ZNDLPOS+16,X) 956 | STA (ZNDLPOS+16),Y 957 | STA (ZNDLPOS+18,X) 958 | STA (ZNDLPOS+18),Y 959 | STA (ZNDLPOS+20,X) 960 | STA (ZNDLPOS+20),Y 961 | STA (ZNDLPOS+22,X) 962 | STA (ZNDLPOS+22),Y 963 | 964 | PLA 965 | TAY 966 | PLA 967 | TAX 968 | RTS 969 | 970 | 971 | -------------------------------------------------------------------------------- /SMAGIC.S: -------------------------------------------------------------------------------- 1 | ********SMAGIC.S PROCESS POWERS AND TREASURES 2 | 3 | ; ZERODEF 4 | 5 | ; RSEG CODE6 6 | 7 | * GOTTREAS - CALLED WHEN BIRD PICKS UP A TREASURE 8 | 9 | GOTTREAS: STA TEMP4 ;COLSTAT OF TREASURE 10 | 11 | JSR DELTREAS ;COUNTS ON INDEX BEING IN X 12 | 13 | LDA #JWTUNE ;CALL TREASURE SOUND 14 | JSR TUNIN 15 | 16 | LDX PLAYER ;PUT TRVAL INDEX IN X 17 | BEQ IHAT3 18 | INX 19 | 20 | IHAT3: LDA PHASE 21 | BMI BNSTREAS ;ITS THE BONUS RACK 22 | 23 | LDA TRVAL1+1,X ;ADD DIRECTLY TO SCORE 24 | STA TENS 25 | LDA TRVAL1,X 26 | STA HUNDS 27 | 28 | JSR ADDSCORE 29 | 30 | BIT TRDSPFLG ;THIS FLAG SHIT INSURES THAT INITRSMP 31 | BMI NOINITT ;IS CALLED ONLY THE FIRST TIME THAT 32 | ;WE LAND ON A TREASURE 33 | 34 | JSR INITRSMP 35 | 36 | NOINITT: LDA TEMP4 ;GET OBJECT ID 37 | SEC 38 | SBC #TREASCOL 39 | ASL 40 | CLC 41 | ADC PLAYER 42 | TAY 43 | 44 | LDA JEWCNT,Y 45 | SED 46 | CMP #$9 47 | BEQ NOSTOCN ;IF NINE THEN PUNT 48 | CLC 49 | ADC #1 50 | 51 | NOSTOCN: CLD 52 | STA JEWCNT,Y 53 | 54 | NOTNOW: RTS 55 | 56 | BNSTREAS: LDA TRVAL1+1,X 57 | STA TEMP10 ;TENS 58 | LDA TRVAL1,X 59 | STA TEMP6 ;HUNDS 60 | 61 | LDA TEMP4 ;COLSTAT OF TREASURE 62 | SEC ;GET INDEX INTO TREASURE COUNTERS 63 | SBC #TREASCOL 64 | ASL 65 | CLC 66 | ADC PLAYER 67 | TAY 68 | 69 | LDX JEWCNT,Y 70 | SED 71 | 72 | TVMULT: LDA BNSTENS ;ADD TREASURE VALUE TO BONUS POINTS 73 | CLC 74 | ADC TEMP10 75 | STA BNSTENS 76 | 77 | LDA BNSHUNDS 78 | ADC TEMP6 79 | STA BNSHUNDS 80 | 81 | LDA BNSHTHS 82 | ADC #0 83 | STA BNSHTHS 84 | 85 | NOCARRY: DEX 86 | BNE TVMULT ;DO FOR EACH MULTIPLE 87 | 88 | CLD 89 | 90 | RTS 91 | 92 | * THIS CODE IS CALLED WHEN THE BIRD SHOOTS A TREASURE 93 | 94 | HITTREAS: ;COLSTAT OF TREASURE 95 | BIT PHASE 96 | BMI SAVEME ;IGNORE IF IN BONUS 97 | 98 | SEC ;ACCUMULATOR HAS COLSTAT OF TREASURE 99 | SBC #TREASCOL ;GET INDEX INTO TREASURE COUNTERS 100 | ASL 101 | CLC 102 | ADC PLAYER 103 | TAY 104 | 105 | LDA #1 106 | STA JEWCNT,Y ;RESET MULTIPLIER 107 | 108 | ; WE NEED A SOUND FOR THIS 109 | 110 | SAVEME: JMP DELTREAS ;THIS WILL RTS 111 | 112 | * INITIALIZE THE TREASURE DISPLAY 113 | 114 | INITRSMP: LDX #19 115 | 116 | TRMPLP: LDA TREASTBL,X 117 | STA BOTMSMAP,X 118 | DEX 119 | BPL TRMPLP 120 | 121 | LDA #$FF 122 | STA TRDSPFLG ; SET FLAG 123 | 124 | RTS 125 | 126 | TREASTBL: .dc.b BLANKCHR&$FF,V&$FF,AA&$FF,L&$FF,U&$FF,E&$FF 127 | .dc.b EQUALS&$FF,0,0,0 128 | .dc.b BLANKCHR&$FF,0,JEWCON&$FF,BLANKCHR&$FF,0 129 | .dc.b EGGCON&$FF,BLANKCHR&$FF 130 | .dc.b 0,BARCON&$FF,BLANKCHR&$FF 131 | 132 | * LDTREAS 133 | ZJEWLOC EQU 11 134 | ZEGGLOC EQU 14 135 | ZBARLOC EQU 17 136 | LDTREAS: 137 | BIT PHASE ;IF IN BONUS PHASE UNCONDITIONALLY LOAD 138 | BPL JUSTREAS ;BONUS STATE 139 | 140 | ;DO BONUS RACK DISPLAY 141 | LDA BNSTIMER ;LOAD STATE NOW 142 | STA PTR0 ;TEMP 143 | LSR ;FIRST THE TIMER 144 | LSR 145 | LSR 146 | LSR 147 | STA TOPMSMAP+6 148 | LDA PTR0 149 | AND #$0F 150 | STA TOPMSMAP+7 151 | * LDSCOREB ;LOADS DISPLAY FOR BONUS RACK SCORE 152 | LDSCOREB: LDX #5 ;SIX DIGITS 153 | LDY #2 ;THREE BYTES 154 | PEPSIB: LDA BNSHTHS,Y ;GET LOW TWO DIGITS OF BONUS SCORE 155 | PHA ;SAVE AWAY 156 | AND #$0F ;GET BOTTOM NIBBLE 157 | ; CLC ;NUMBERS START AT ZERO 158 | ; ADC #NUMBERS ;MAY BE UNNECESSARY 159 | STA TEMP0,X ;STORE AWAY FOR LATER 160 | DEX 161 | PLA ;GET BACK LOW BYTE AND GET NEXT DIGIT 162 | AND #$F0 163 | LSR 164 | LSR 165 | LSR 166 | LSR 167 | ; CLC 168 | ; ADC #NUMBERS 169 | STA TEMP0,X 170 | DEX 171 | DEY 172 | BPL PEPSIB ;DO UNTIL ALL 6 DIGITS (3 BYTES) ARE 173 | ;LOADED 174 | LDA #$69 ;SET OVERFLOW 175 | ADC #$69 176 | LDX #0 ;THIS ELIMINATES LEADING ZEROES 177 | LDA #BLANKCHR&$FF 178 | SPRITEB: LDY TEMP0,X 179 | BVC NOMORE0B 180 | BNE NOMORE0B ;NOT ZERO SO PUNT ON BLANKS 181 | STA TOPMSMAP+14,X 182 | BEQ NEXEXB 183 | 184 | NOMORE0B: TYA 185 | STA TOPMSMAP+14,X 186 | CLV 187 | 188 | NEXEXB: INX 189 | CPX #6 190 | BNE SPRITEB 191 | 192 | TYA 193 | BNE NOSTUF0B 194 | 195 | LDA #0 ;IF ZERO IS LEAST SIGNIFICANT DIGIT 196 | STA TOPMSMAP+19 ;THEN DISPLAY IT 197 | NOSTUF0B: 198 | 199 | JUSTREAS: BIT TRDSPFLG ;IF THIS IS STILL ZERO THEN WE DON'T 200 | BPL RTTS ;HAVE TO LOAD VALUES YET 201 | 202 | LDX PLAYER 203 | LDA JEWCNT,X ;LOAD MULTIPLIERS 204 | STA BOTMSMAP+ZJEWLOC 205 | 206 | LDA BARCNT,X 207 | STA BOTMSMAP+ZBARLOC 208 | 209 | LDA EGGCNT,X 210 | STA BOTMSMAP+ZEGGLOC 211 | 212 | TXA ;LOAD TREASURE VALUE 213 | BEQ IHATHIS 214 | INX 215 | 216 | IHATHIS: LDA TRVAL1+1,X 217 | STA TEMP0 218 | AND #$0F 219 | STA BOTMSMAP+9 220 | LDA TEMP0 221 | LSR 222 | LSR 223 | LSR 224 | LSR 225 | STA BOTMSMAP+8 226 | 227 | LDA TRVAL1,X 228 | AND #$0F 229 | STA BOTMSMAP+7 230 | 231 | LDA BOTMSMAP+7 ;DO LEADING ZERO SUPPRESSION 232 | BNE RTTS 233 | LDX #BLANKCHR&$FF 234 | STX BOTMSMAP+7 235 | 236 | RTTS: RTS 237 | 238 | 239 | INITBNS:: LDA #(-1)&$FF ;INIT OODLES OF BONUS THINGS 240 | STA PHASE 241 | 242 | LDX PLAYER 243 | SED 244 | LDA XTRBNSTM,X ;EXTRA BONUS TIME 245 | CLC 246 | ADC #$20 ;MINIMUM BONUS 247 | STA BNSTIMER 248 | CLD 249 | LDA #0 250 | STA XTRBNSTM,X 251 | 252 | LDA #0 253 | STA BNSTENS 254 | STA BNSHUNDS 255 | STA BNSHTHS 256 | 257 | BIT TRDSPFLG 258 | BMI LABEL42 259 | 260 | JSR INITRSMP ;INCASE IT ISN'T THERE INIT BOTTOM 261 | ;TREASURE MAP 262 | LABEL42: 263 | lda #$6F ;Force light blue for text in bonus 264 | sta P1C2SHDB ;round. 265 | 266 | LDY #19 ;DISPLAY 267 | BNLP: LDA BNINTBL,Y 268 | STA TOPMSMAP,Y 269 | DEY 270 | BPL BNLP 271 | 272 | LDA #38 ;CENTER TOP TREASURE MAP 273 | STA DLY+9 274 | RTS 275 | 276 | BNINTBL: .dc.b BLANKCHR&$FF,T&$FF,I&$FF,M&$FF,E&$FF 277 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 278 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,S&$FF,C&$FF 279 | .dc.b O&$FF,R&$FF,E&$FF,BLANKCHR&$FF 280 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 281 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 282 | 283 | ENDBONUS: LDA BNSTENS 284 | STA TENS 285 | 286 | LDA BNSHUNDS 287 | STA HUNDS 288 | 289 | LDA BNSHTHS 290 | STA HUNTHOUS 291 | 292 | JSR ADDSCORE 293 | 294 | LDX PLAYER 295 | 296 | LDA #1 ;RESET MULTIPLIER FOR PLAYER 297 | STA JEWCNT,X 298 | STA BARCNT,X 299 | STA EGGCNT,X 300 | 301 | TXA ;SET FLAG BY DOING TXA 302 | 303 | BEQ IHAT4 304 | INX 305 | 306 | IHAT4: LDA #$50 307 | STA TRVAL1+1,X 308 | 309 | LDA #0 310 | STA TRVAL1,X 311 | 312 | RTS 313 | 314 | * EXTRA BONUS TIME POWER 315 | 316 | EXTRABNS: LDX PLAYER 317 | 318 | LDA XTRBNSTM,X 319 | CMP #$70 ;LIMIT TOTAL BONUS TO 90 SECONDS 320 | BEQ GOAWAY 321 | 322 | SED 323 | CLC 324 | ADC #$10 ;TEN SECONDS OF EXTRA BONUS 325 | STA XTRBNSTM,X 326 | CLD 327 | 328 | GOAWAY: RTS 329 | 330 | * ADDTRVAL UPDATES TREASURE VALUE 331 | ADDTRVAL: ;ASSUMES VALUE IN A 332 | SED 333 | LDX PLAYER 334 | BEQ IHAT2 335 | INX 336 | IHAT2: CLC 337 | ADC TRVAL1+1,X 338 | STA TRVAL1+1,X 339 | LDA #0 340 | ADC TRVAL1,X 341 | STA TRVAL1,X 342 | CLD 343 | 344 | RTS 345 | 346 | ******************************************************************************** 347 | * * 348 | * * 349 | * HIEROS FOR THE MASSES * 350 | * * 351 | ******************************************************************************** 352 | 353 | * GOTHIERO ;CALLED WHEN BIRD LANDS ON HIERO 354 | GOTHIERO: 355 | JSR GLOHIERO 356 | JMP PLAHIERO 357 | 358 | 359 | ;============================================== 360 | ; Game play for Hieros. 361 | ;============================================== 362 | ; 363 | ; IN: TEMP1 = Object ID. 364 | ; 365 | PLAHIERO: 366 | LDA TEMP0 ;FIRST WE STORE AWAY TYPE OF HIERO 367 | 368 | LDX PLAYER 369 | BNE DOPL2 ;CAREFUL! TEMP0 IS STORED IN GLOHIERO 370 | 371 | ; --- Player 1 ------------------------------------------ 372 | 373 | LDY PGNUM,X 374 | CPY #3 375 | BNE NOTCLR 376 | 377 | LDY #0 ;ZERO OUT PGS AS WELL AS RESETING PGNUM 378 | STY PGS1+1 379 | STY PGS1+2 380 | 381 | NOTCLR: STA PGS1,Y ;PUT HIERO TYPE IN ARRAY 382 | 383 | JMP NEWNOP 384 | 385 | ; --- Player 2 --------------------------- 386 | 387 | DOPL2: LDY PGNUM,X 388 | CPY #3 389 | BNE NOTCLR2 390 | 391 | LDY #0 ;ZERO OUT PGS AS WELL AS PGNUM 392 | STY PGS2+1 393 | STY PGS2+2 394 | 395 | NOTCLR2: STA PGS2,Y 396 | 397 | ; --- For both players -------------------- 398 | 399 | NEWNOP: 400 | LDA HIROSNDS,Y ;CALL SOUND FOR HIERO 401 | JSR TUNIN 402 | 403 | INY ;NOW DO A CHECK TO SEE IF ITS POWERTIME 404 | STY PGNUM,X ;CAN DO THIS AS PGNUM IS IN ZERO PAGE 405 | CPY #3 ;TIME FOR A POWER 406 | BNE RTSFHIRO 407 | 408 | JSR DETPOWER ;DETERMINE WHAT POWER IF ANY IT IS 409 | 410 | RTSFHIRO: RTS 411 | 412 | HIROSNDS: .dc.b NHIERO1,NHIERO2,NHIERO3 413 | 414 | 415 | ;============================ 416 | ; Hiero gotten. 417 | ;============================ 418 | ; 419 | DETPOWER: 420 | jsr CLRPFLGS ;Turn power flags off. 421 | lda #0 422 | ldx PLAYER ;ZERO OUT POWER 423 | sta PGPOWER,X 424 | sta ptCount ;Zero auto counter in case user hit button. 425 | sta PTIMER 426 | 427 | LDY PGSOFF,x 428 | LDX PGS1,Y ;FIRST HIERO 429 | LDA PGHASH1,X 430 | 431 | LDX PGS1+1,Y ;SECOND HIERO 432 | EOR PGHASH2,X 433 | 434 | LDX PGS1+2,Y ;THIRTD HIERO 435 | EOR PGHASH3,X 436 | 437 | LDX #0 438 | PGCMPLP: CMP PGDIV,X 439 | BCS GOTIT 440 | INX 441 | BPL PGCMPLP 442 | 443 | GOTIT: TXA 444 | LDA PGIDENT,X ;GET REAL POWER NUMBER 445 | 446 | jsr maskPower ;Limit powers to level and round. 447 | ; x and y saved, a = power allowed. 448 | LDX PLAYER 449 | STA PGPOWER,X 450 | 451 | LDA #$1F 452 | STA ROTATE ;START COLOR ROTATION 453 | 454 | RTS 455 | 456 | PGSOFF: .dc.b 0,3 457 | 458 | PGHASH1: .dc.b 0,$E9,$23,$A8,$53,$FD,$CE,$9F,$69 459 | 460 | PGHASH2: .dc.b 0,$8D,$9A,$C6,$08,$4B,$B3,$1C,$AA 461 | 462 | PGHASH3: .dc.b 0,$38,$EC,$A1,$7B,$55,$B9,$98,$43 463 | 464 | PGDIV: .dc.b 249 ;SLOWDOWN 465 | .dc.b 235 ;POINTS 466 | .dc.b 229 ;KILL EVERYTHING 467 | .dc.b 225 ;INVINCIBILITY 468 | .dc.b 220 ;POINTS 469 | .dc.b 212 ;KILL UWES 470 | .dc.b 204 ;AFTERBURNER 471 | .dc.b 197 ;POINTS 472 | .dc.b 195 ;EXTRA LIFE 473 | .dc.b 185 ;AIR FREEZE 474 | .dc.b 173 ;POINTS 475 | .dc.b 160 ;SUPERSONIC SHOTS 476 | .dc.b 154 ;HOVER 477 | .dc.b 133 ;POINTS 478 | .dc.b 126 ;EXTRA BONUS 479 | .dc.b 119 ;RANDOM HIEROS 480 | .dc.b 98 ;POINTS 481 | .dc.b 96 ;KILL SPHINX 482 | .dc.b 91 ;CAN'T HOP 483 | .dc.b 87 ;POINTS 484 | .dc.b 84 ;CAN'T FLY 485 | .dc.b 76 ;KILL MINIS 486 | .dc.b 71 ;POINTS 487 | .dc.b 58 ;KILL POTS 488 | .dc.b 50 ;POINTS 489 | .dc.b 46 ;CAN'T SWIM 490 | .dc.b 40 ;PARALIZE SPHINX 491 | .dc.b 35 ;POINTS 492 | .dc.b 31 ;DECOY 493 | .dc.b 23 ;AIR BOMB 494 | .dc.b 8 ;POINTS 495 | .dc.b 0 ;WARP 496 | 497 | PGIDENT: .dc.b 18 ;SLOWDOWN 498 | .dc.b 2 ;POINTS 499 | .dc.b 20 ;KILL EVERYTHING 500 | .dc.b 22 ;INVINCIBILITY 501 | .dc.b 2 ;POINTS 502 | .dc.b 8 ;KILL UWES 503 | .dc.b 17 ;AFTERBURNER 504 | .dc.b 2 ;POINTS 505 | .dc.b 1 ;EXTRA LIFE 506 | .dc.b 10 ;AIR FREEZE 507 | .dc.b 2 ;POINTS 508 | .dc.b 21 ;SUPERSONIC SHOTS 509 | .dc.b 16 ;HOVER 510 | .dc.b 2 ;POINTS 511 | .dc.b 7 ;EXTRA BONUS 512 | .dc.b 19 ;RANDOM HIEROS 513 | .dc.b 2 ;POINTS 514 | .dc.b 6 ;KILL SPHINX 515 | .dc.b 12 ;CAN'T HOP 516 | .dc.b 2 ;POINTS 517 | .dc.b 14 ;CAN'T FLY 518 | .dc.b 4 ;KILL MINIS 519 | .dc.b 2 ;POINTS 520 | .dc.b 5 ;KILL POTS 521 | .dc.b 2 ;POINTS 522 | .dc.b 13 ;CAN'T SWIM 523 | .dc.b 15 ;PARALIZE SPHINX 524 | .dc.b 2 ;POINTS 525 | .dc.b 11 ;DECOY 526 | .dc.b 3 ;AIR BOMB 527 | .dc.b 2 ;POINTS 528 | .dc.b 9 ;WARP 529 | 530 | 531 | * GIVPOWER ;CALLED WHEN RIGHT BUTTON IS PUSHED 532 | GIVPOWER: 533 | lda PTIMER ;Already got something cookn'? 534 | bne GIVEXIT 535 | 536 | LDX PLAYER 537 | LDA PGPOWER,X ;IF NO POWER THEN PUNT 538 | BEQ GIVEXIT 539 | 540 | TAY ;SET UP POWER ROUTINE THROUGH INDIRECT 541 | LDA #POWRUSE ;PLAY TUNE FOR POWER RELEASE 542 | JSR TUNIN 543 | LDA PWRROUTL,Y ;JUMP 544 | STA PTR0 545 | LDA PWRROUTH,Y 546 | STA PTR0+1 547 | JSR JMPIND ;GO TO APPROPRIATE POWER ROUTINE 548 | 549 | lda PTIMER 550 | bne GIVEXIT 551 | 552 | powerOff: 553 | 554 | LDA #0 555 | LDX PLAYER ;ZERO OUT POWER 556 | STA PGPOWER,X 557 | sta ptCount ;Zero auto counter in case user hit button. 558 | sta PTIMER 559 | 560 | LDA PGNUM,X ;IF THREE HIEROS THEN ZERO OUT NUMBER 561 | CMP #3 ;OF HIEROS 562 | BNE GIVEXIT 563 | 564 | LDA #0 565 | STA PGNUM,X 566 | 567 | LDX PLAYER ;ZERO OUT PGS AS WELL 568 | BEQ PPONE 569 | 570 | LDX #3 571 | PPONE: STA PGS1,X 572 | STA PGS1+1,X 573 | STA PGS1+2,X 574 | 575 | GIVEXIT: RTS 576 | 577 | 578 | * JMPIND 579 | JMPIND: 580 | JMP (PTR0) ;GO TO APPROPRIATE POWER ROUTINE 581 | JMPRTS: RTS 582 | 583 | PWRROUTL: .dc.b JMPRTS&$FF,XLIFE&$FF,JMPRTS&$FF,KAFLEAS&$FF 584 | .dc.b KAMINIS&$FF,KAFIRES&$FF 585 | .dc.b KILLSPHX&$FF,EXTRABNS&$FF,KAUWES&$FF 586 | .dc.b DOWARP&$FF,FRFLEAS&$FF 587 | .dc.b DODECOY&$FF 588 | .dc.b NOHOP&$FF,NOSWIM&$FF,NOFLY&$FF,DOPARA&$FF 589 | .dc.b DOHOVER&$FF,DOSPEED&$FF 590 | .dc.b DOSLOW&$FF,DOROUL&$FF,KAOMNI&$FF,DOQUIK&$FF,DOINVINC&$FF 591 | 592 | PWRROUTH: .dc.b JMPRTS/256,XLIFE/256,JMPRTS/256,KAFLEAS/256 593 | .dc.b KAMINIS/256,KAFIRES/256 594 | .dc.b KILLSPHX/256,EXTRABNS/256,KAUWES/256 595 | .dc.b DOWARP/256,FRFLEAS/256 596 | .dc.b DODECOY/256 597 | .dc.b NOHOP/256,NOSWIM/256,NOFLY/256,DOPARA/256 598 | .dc.b DOHOVER/256,DOSPEED/256 599 | .dc.b DOSLOW/256,DOROUL/256,KAOMNI/256,DOQUIK/256,DOINVINC/256 600 | 601 | NOTIMP: RTS 602 | 603 | * WARP POWER 604 | DOWARP: LDA #$FF 605 | STA WARP ;SET WARP FLAG 606 | sta PTIMER 607 | RTS 608 | 609 | * XLIFE ;JUST ADDS LIVES 610 | XLIFE: 611 | INC PL1LIVES,X ;X STILL HAS PLAYER NUMBER 612 | RTS 613 | 614 | 615 | * DECOY 616 | DODECOY: JSR CLRPFLGS 617 | LDA #30 618 | STA PTIMER 619 | JSR RANDOM 620 | AND #$7F 621 | CLC 622 | ADC #1 623 | STA NOHOMING 624 | RTS 625 | 626 | * PARALYSE 627 | DOPARA: LDA #(-1)&$FF 628 | STA PARASPHX 629 | RTS 630 | 631 | * SHACKLES/CANT HOP 632 | NOHOP: JSR CLRPFLGS 633 | LDA #20 634 | STA PTIMER 635 | LDA #(-1)&$FF 636 | STA CANTHOP 637 | RTS 638 | 639 | * POLYWATER/CANT SWIM 640 | NOSWIM: JSR CLRPFLGS 641 | LDA #20 642 | STA PTIMER 643 | LDA #(-1)&$FF 644 | STA CANTSWIM 645 | RTS 646 | 647 | * BROKEN WING/CANT FLY 648 | NOFLY: JSR CLRPFLGS 649 | LDA #20 650 | STA PTIMER 651 | LDA #(-1)&$FF 652 | STA CANTFLY 653 | RTS 654 | 655 | * HOVER 656 | DOHOVER: JSR CLRPFLGS 657 | LDA #20 658 | STA PTIMER 659 | LDA #(-1)&$FF 660 | STA HOVER 661 | RTS 662 | 663 | * SPEEDUP 664 | DOSPEED: JSR CLRPFLGS 665 | LDA #20 666 | STA PTIMER 667 | LDA #(-1)&$FF 668 | STA SPEEDUP 669 | RTS 670 | 671 | * SLOWDOWN 672 | DOSLOW: JSR CLRPFLGS 673 | LDA #20 674 | STA PTIMER 675 | LDA #(-1)&$FF 676 | STA SLOWDOWN 677 | RTS 678 | 679 | * ROULETTE 680 | DOROUL: LDX PLAYER 681 | LDA #2 682 | STA PGNUM,X 683 | LDY PGSOFF,X 684 | JSR RANDOM 685 | AND #7 686 | CLC 687 | ADC #1 688 | STA PGS1,Y 689 | JSR RANDOM 690 | AND #7 691 | CLC 692 | ADC #1 693 | STA PGS1+1,Y 694 | LDA #0 695 | STA PGS1+2,Y 696 | RTS 697 | 698 | * OMNICIDE - KILL ALL ENEMIES 699 | KAOMNI: JSR KAFLEAS 700 | JSR KAUWES 701 | JSR KAMINIS 702 | JSR KAFIRES 703 | JMP KILLSPHX 704 | 705 | * QUICK SHOTS 706 | DOQUIK: JSR CLRPFLGS 707 | LDA #6 708 | STA QUIKSHOT 709 | LDA #20 710 | STA PTIMER 711 | RTS 712 | 713 | * INVINCIBILITY 714 | DOINVINC: JSR CLRPFLGS 715 | LDA #20 716 | STA PTIMER 717 | LDA #(-1)&$FF 718 | STA INVINCBL 719 | LDHEXIT2: RTS 720 | 721 | 722 | * LDHIEROS 723 | * LOADS DISPLAY WITH CURRENT HEIROGLYPH STATUS 724 | LDHIEROS: 725 | BIT PHASE 726 | BMI LDHEXIT2 ;GO AWAY IF IN BONUS RACK 727 | 728 | LDA DEATH ;DO NOT LOAD HIERO STATE WHEN IN 729 | BEQ NOEXIT ;GAME OVER MODE 730 | LDA #$6F 731 | STA P1C2SHDB ;ON DEATH MAKE SURE DISPLAY IS STATIC 732 | RTS ;BYE BYE. TIME TO BLOW THIS CLAMBAKE 733 | 734 | NOEXIT: 735 | lda #$6F ;Default light blue color for hieros. 736 | sta P1C2SHDB 737 | 738 | LDX PLAYER 739 | LDY PGPOWER,X 740 | beq .ckHelp ;Is there a power? 741 | 742 | lda PTIMER ;Is power invoked? 743 | bne .powerOn 744 | 745 | lda ptCount ;Is auot power in effect? 746 | beq .ckAuto 747 | 748 | .powerOn: 749 | lda #$38 ;Make auto power red when in effect. 750 | sta P1C2SHDB 751 | jmp .noHelp 752 | 753 | .ckAuto: 754 | jsr checkAuto ;Is this an auto power? 755 | beq .noHelp ;Don't put up help if auto power. 756 | 757 | dec helpTime ;Time to switch power for help? 758 | lda helpTime 759 | and #$10 760 | bne .noHelp 761 | 762 | lda #$CA ;Light green. 763 | sta P1C2SHDB 764 | ldy #24 ;Force "HIT R BUTTN" message. 765 | bne .noHelp 766 | 767 | .ckHelp: 768 | lda RACK,x ;Put up help message only in 769 | bne .noHelp ;round 1. 770 | 771 | lda DIFCULTY ;Put up help message only in 772 | cmp #2 ;round 1 in Novice and Standard games. 773 | bcs .noHelp 774 | 775 | ldy #23 ;Force "GET 3 HIEROS" message. 776 | 777 | .noHelp: 778 | 779 | LDA LOPOWTXT,Y 780 | STA PTR0 781 | LDA HIPOWTXT,Y 782 | STA PTR0+1 783 | LDY #10 784 | POWLDLP: LDA (PTR0),Y 785 | STA TOPMSMAP+8,Y 786 | DEY 787 | BPL POWLDLP 788 | 789 | NOWHI: LDX PLAYER ;THIS SHIT YOU SEE HERE AND MANY PLACES 790 | BEQ ONER ;GETS THE APPROPRIATE PLAYER INDEX INTO 791 | LDX #3 ;X 792 | 793 | ONER: 794 | LDA PGS1,X 795 | ASL 796 | TAY 797 | LDA PGTABLE,Y 798 | STA TOPMSMAP+1 799 | LDA PGTABLE+1,Y 800 | STA TOPMSMAP+2 801 | 802 | LDA PGS1+1,X 803 | ASL 804 | TAY 805 | LDA PGTABLE,Y 806 | STA TOPMSMAP+3 807 | LDA PGTABLE+1,Y 808 | STA TOPMSMAP+4 809 | 810 | LDA PGS1+2,X 811 | ASL 812 | TAY 813 | LDA PGTABLE,Y 814 | STA TOPMSMAP+5 815 | LDA PGTABLE+1,Y 816 | STA TOPMSMAP+6 817 | 818 | LDA ROTATE ;ROTATE PALETTE FOR TOPMSMAP 819 | BEQ LDHEXIT ;UNLESS ZERO THEN PUNT 820 | 821 | CLC 822 | ADC #$0E ;SOMEWHAT CONFUSING BUT ROTATE FINISHES 823 | AND #$0F ;AT ZERO BUT WE WANT COLOR TO BE SET TO 824 | STA PTR0 ;$XF WHEN IT IS FINISHED 825 | LDA #$60 ;THE LAST TIME THIS GOES THROUGH ROTATE 826 | ;IS $01 THEREFORE WE ADD $0E TO GET $0F 827 | ORA PTR0 ;IT DOESN'T MATTER WHAT ROTATE STARTS 828 | STA P1C2SHDB ;AT 829 | 830 | DEC ROTATE ;DECREMENT ROTATE COUNTER 831 | 832 | LDHEXIT: 833 | RTS 834 | 835 | * TABLES FOR HIERO DISPLAY 836 | PGTABLE: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,LCANE&$FF,(LCANE+1)&$FF 837 | .dc.b LMWS&$FF,(LMWS+1)&$FF 838 | .dc.b LFEATH&$FF,(LFEATH+1)&$FF 839 | .dc.b LEYE&$FF,(LEYE+1)&$FF,LAHNK&$FF,(LAHNK+1)&$FF 840 | .dc.b LBIRD&$FF,(LBIRD+1)&$FF 841 | .dc.b LSUN&$FF,(LSUN+1)&$FF,LBOWL&$FF,(LBOWL+1)&$FF 842 | 843 | * TABLES FOR POWER TEXT DISPLAY 844 | LOPOWTXT: 845 | .dc.b BLNK&$FF,POWER1&$FF,POWER2&$FF,POWER3&$FF,POWER4&$FF 846 | .dc.b POWER5&$FF,POWER6&$FF,POWER7&$FF,POWER8&$FF,POWER9&$FF 847 | .dc.b POWER10&$FF,POWER11&$FF,POWER12&$FF,POWER13&$FF 848 | .dc.b POWER14&$FF,POWER15&$FF,POWER16&$FF,POWER17&$FF 849 | .dc.b POWER18&$FF,POWER19&$FF,POWER20&$FF,POWER21&$FF 850 | .dc.b POWER22&$FF,power23&$FF,power24&$FF 851 | 852 | HIPOWTXT: .dc.b BLNK/256,POWER1/256,POWER2/256,POWER3/256 853 | .dc.b POWER4/256,POWER5/256 854 | .dc.b POWER6/256,POWER7/256,POWER8/256 855 | .dc.b POWER9/256,POWER10/256,POWER11/256 856 | .dc.b POWER12/256,POWER13/256,POWER14/256 857 | .dc.b POWER15/256,POWER16/256 858 | .dc.b POWER17/256,POWER18/256,POWER19/256 859 | .dc.b POWER20/256,POWER21/256 860 | .dc.b POWER22/256,power23/256,power24/256 861 | 862 | BLNK: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 863 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 864 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 865 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 866 | .dc.b BLANKCHR&$FF 867 | POWER1: .dc.b E&$FF,X&$FF,T&$FF,R&$FF,AA&$FF,BLANKCHR&$FF 868 | .dc.b L&$FF,I&$FF,F&$FF,E&$FF 869 | .dc.b BLANKCHR&$FF 870 | POWER2: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,P&$FF,O&$FF 871 | .dc.b I&$FF,N&$FF,T&$FF,S&$FF 872 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 873 | POWER3: .dc.b BLANKCHR&$FF,AA&$FF,I&$FF,R&$FF,BLANKCHR&$FF 874 | .dc.b B&$FF,O&$FF,M&$FF,B&$FF 875 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 876 | POWER4: .dc.b BLANKCHR&$FF,K&$FF,I&$FF,L&$FF,L&$FF,BLANKCHR&$FF 877 | .dc.b M&$FF,I&$FF,N&$FF 878 | .dc.b I&$FF,S&$FF 879 | POWER5: .dc.b BLANKCHR&$FF&$FF,K&$FF,I&$FF,L&$FF,L&$FF 880 | .dc.b BLANKCHR&$FF,(P)&$FF,O&$FF,T&$FF,S&$FF 881 | .dc.b BLANKCHR&$FF 882 | POWER6: .dc.b K&$FF,I&$FF,L&$FF,L&$FF,BLANKCHR&$FF,S&$FF 883 | .dc.b P&$FF,H&$FF,I&$FF,N&$FF,X&$FF 884 | POWER7: .dc.b E&$FF,X&$FF,T&$FF,R&$FF,AA&$FF,BLANKCHR&$FF 885 | .dc.b B&$FF,O&$FF,N&$FF,U&$FF,S&$FF 886 | POWER8: .dc.b BLANKCHR&$FF,K&$FF,I&$FF,L&$FF,L&$FF,BLANKCHR&$FF 887 | .dc.b U&$FF,W&$FF,E&$FF 888 | .dc.b S&$FF,BLANKCHR&$FF 889 | POWER9: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,W&$FF 890 | .dc.b AA&$FF,R&$FF,P&$FF 891 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 892 | POWER10: .dc.b AA&$FF,I&$FF,R&$FF,BLANKCHR&$FF,F&$FF,R&$FF,E&$FF 893 | .dc.b E&$FF,Z&$FF,E&$FF 894 | .dc.b BLANKCHR&$FF 895 | POWER11: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,D&$FF 896 | .dc.b E&$FF,C&$FF,O&$FF,Y&$FF 897 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 898 | POWER12: .dc.b BLANKCHR&$FF,S&$FF,H&$FF,AA&$FF,C&$FF,K&$FF 899 | .dc.b L&$FF,E&$FF,S&$FF 900 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 901 | POWER13: .dc.b BLANKCHR&$FF,P&$FF,O&$FF,L&$FF,Y&$FF,W&$FF,AA&$FF 902 | .dc.b T&$FF,E&$FF,R&$FF 903 | .dc.b BLANKCHR&$FF 904 | POWER14: .dc.b B&$FF,R&$FF,O&$FF,K&$FF,E&$FF,N&$FF,BLANKCHR&$FF 905 | .dc.b W&$FF,I&$FF,N&$FF,G&$FF 906 | POWER15: .dc.b H&$FF,O&$FF,L&$FF,D&$FF,BLANKCHR&$FF,S&$FF,P&$FF 907 | .dc.b H&$FF,I&$FF,N&$FF,X&$FF 908 | POWER16: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,H&$FF,O&$FF 909 | .dc.b V&$FF,E&$FF,R&$FF 910 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF 911 | POWER17: .dc.b BLANKCHR&$FF,S&$FF,P&$FF,E&$FF,E&$FF,D&$FF 912 | .dc.b BLANKCHR&$FF,U&$FF,P&$FF 913 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 914 | POWER18: .dc.b BLANKCHR&$FF,S&$FF,L&$FF,O&$FF,W&$FF,BLANKCHR&$FF 915 | .dc.b D&$FF,O&$FF,W&$FF 916 | .dc.b N&$FF,BLANKCHR&$FF 917 | POWER19: .dc.b BLANKCHR&$FF,R&$FF,O&$FF,U&$FF,L&$FF,E&$FF 918 | .dc.b T&$FF,T&$FF,E&$FF 919 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 920 | POWER20: .dc.b BLANKCHR&$FF,O&$FF,M&$FF,N&$FF,I&$FF,C&$FF 921 | .dc.b I&$FF,D&$FF,E&$FF 922 | .dc.b BLANKCHR&$FF,BLANKCHR&$FF 923 | POWER21: .dc.b Q&$FF,U&$FF,I&$FF,C&$FF,K&$FF,BLANKCHR&$FF 924 | .dc.b S&$FF,H&$FF,O&$FF,T&$FF,S&$FF 925 | POWER22: .dc.b I&$FF,N&$FF,V&$FF,I&$FF,N&$FF,C&$FF,I&$FF 926 | .dc.b B&$FF,L&$FF,E&$FF,BLANKCHR&$FF 927 | power23: 928 | .dc.b G&$FF,E&$FF,T&$FF,BLANKCHR&$FF,THREE3&$FF,BLANKCHR&$FF,H&$FF 929 | .dc.b I&$FF,E&$FF,R&$FF,O&$FF 930 | power24: 931 | .dc.b H&$FF,I&$FF,T&$FF,BLANKCHR&$FF,R&$FF,BLANKCHR&$FF,B&$FF 932 | .dc.b U&$FF,T&$FF,T&$FF,N&$FF 933 | 934 | CLRPFLGS: LDA #0 ;CLEAR TIMED POWER FLAGS 935 | LDX #TPNUMB-1 936 | CLRTPLP: STA TPSTART,X 937 | DEX 938 | BPL CLRTPLP 939 | LDA #3 940 | STA QUIKSHOT 941 | RTS 942 | 943 | ; END 944 | -------------------------------------------------------------------------------- /SMCP.S: -------------------------------------------------------------------------------- 1 | * SPHINX--SMCP.S 2 | 3 | 4 | ; ZERODEF 5 | 6 | ; RSEG CODEE 7 | 8 | * INITIALIZE MASTER CONTROL PROGRAMS * 9 | MCPINIT: 10 | * CLEAR SOME RAM * 11 | LDX #CRISVARS&$FF ;SORRY CRIS! HAD TO DO IT 12 | LDA #0 13 | MCPICLR: STA SVDIST,X 14 | DEX 15 | BPL MCPICLR 16 | 17 | * DIFFICULTY AND MAP ADVANCE * 18 | 19 | LDX DIFCULTY ;Range 0-3 20 | LDA DFINIT,X 21 | STA DIFIND 22 | 23 | * PROGRESSION STUFF * 24 | LDA #2 25 | STA DUMPAREA 26 | LDA #3 27 | STA DUMPAREA+1 28 | 29 | LDA DFRANDA,X 30 | STA PSRANDA1 31 | STA PSRANDA1+1 32 | STA PSRANDA1+2 33 | STA PSRANDA1+3 34 | LDA DFRANDB,X 35 | STA PSRANDB2 36 | STA PSRANDB2+1 37 | STA PSRANDB2+2 38 | STA PSRANDB2+3 39 | LDA #$3 40 | STA PSRANDA2 41 | STA PSRANDA2+1 42 | STA PSRANDA2+2 43 | STA PSRANDA2+3 44 | LDA #$62 45 | STA PSRANDB1 46 | STA PSRANDB1+1 47 | STA PSRANDB1+2 48 | STA PSRANDB1+3 49 | 50 | ** SCROLLING OBJECTS INIT ** 51 | LDA #$9 52 | STA SVNEWBLK 53 | STA SVNEWBLK+1 54 | STA SVNEWBLK+2 55 | STA SVNEWBLK+3 56 | 57 | RTS 58 | 59 | ** DIFICULTY LEVELS ** 60 | DFINIT: .dc.b 0 ;NOVICE 61 | .dc.b $20 ;STANDARD 62 | .dc.b $40 ;ADVANCED 63 | .dc.b $80 ;EXPERT 64 | 65 | DFRANDA: .dc.b $41,$56,$F5,$B1 66 | DFRANDB: .dc.b $72,$11,$60,$AA 67 | 68 | DFSINIT: .dc.b 0 69 | .dc.b $10 70 | .dc.b $15 71 | .dc.b $20 72 | 73 | ** LEVEL 3 MCP INITIALIZATION ** 74 | MCPINIT2: 75 | * ENEMY INITS * 76 | LDA CDELAY0 ;DELAY BETWEEN FLIGHTS IS DIFIND DRIVEN 77 | STA WAITING 78 | 79 | LDX PLAYER 80 | LDA DUMPAREA,X 81 | EOR #2 82 | STA DUMPAREA,X 83 | TAX 84 | 85 | LDA SVDIST,X 86 | STA DISTANCE 87 | LDA SVHDIST,X 88 | STA HDIST 89 | 90 | LDA PSRANDA1,X ;PROGRESSION SEEDS 91 | STA PSRA1 92 | LDA PSRANDA2,X 93 | STA PSRA2 94 | LDA PSRANDB1,X 95 | STA PSRB1 96 | LDA PSRANDB2,X 97 | STA PSRB2 98 | 99 | LDA SVGRNDPC,X ;GROUND STATE 100 | STA GRNDPC 101 | LDA SVOBJTYP,X 102 | STA OBJTYP 103 | LDA SVNEWBLK,X 104 | STA NEWBLK 105 | LDA SVBAND,X 106 | STA BAND 107 | LDA SVBLOCK,X 108 | STA BLOCK 109 | 110 | ; DEC DISTANCE ;TO INSURE PROPER SPHINX PLACEMENT 111 | 112 | LDA #$FF 113 | STA NBFLAG 114 | RTS 115 | 116 | ** ENEMY MASTER CONTROL PROGRAM - LABELS STARTING WITH C ** 117 | ENEMYMCP: 118 | LDA PHASE 119 | BMI CWAITRTS 120 | 121 | LDA PARAM 122 | BEQ CWAIT 123 | LDA SPNCLASS 124 | CMP #16 125 | BCS UWEROUT 126 | JMP FLEAOUT 127 | CWAIT: 128 | LDA WAITING ;CURRENTLY WAITING? 129 | ; jmp CWVCTRL ;!!!!!!!!Put fleas and uwes up fast!!!! 130 | BEQ CWVCTRL ;NO - EXERCISE SOME CONTROL 131 | LDA MAINCNT 132 | AND #$F ;SCALE WAITING VARIABLE 133 | BNE CWAITRTS 134 | DEC WAITING ;YES - CONTINUE TO DO SO. 135 | CWAITRTS: RTS 136 | 137 | * WAVE CONTROL * 138 | CWVCTRL: 139 | JSR RANDOM ;NUMBER OF ENEMIES IS RANDOM 140 | AND #$3 141 | ADC #1 142 | STA PARAM 143 | 144 | LDA WAVECNT 145 | AND #$F ;IF WAVE IS ACTIVE, CONTINUE WAVE 146 | BNE CWVCONT ;!!!!!!Comment out for uwes only 147 | 148 | * FETCH A NEW WAVE OF ENEMIES * 149 | LDA DIFIND ;LOAD DIFFICULTY INDEX 150 | CLC 151 | ADC #3 ;BUMP IT UP SOME 152 | BCC CSTORDIF 153 | LDA #$C0 154 | 155 | CSTORDIF: STA DIFIND 156 | LSR 157 | LSR ;ONE IN 32 158 | LSR 159 | TAY 160 | JSR RANDOM 161 | AND #$3 162 | ADC #$2 163 | ORA WAVE,Y ;LOAD IN A WAVE 164 | STA WAVECNT 165 | 166 | TYA 167 | LSR 168 | LSR ;ONE IN 8 169 | TAY 170 | LDA CDELAY1,Y ;DELAY BEFORE NEXT WAVE 171 | STA WAITING 172 | 173 | UWEROUT: ;PARAM = 1 TO 3 UWES 174 | BIT UWEOK 175 | BPL CLRPARAM 176 | LDA #16 177 | STA SPNCLASS 178 | JSR DOUWE ;!!!!!!!!!!!!!!!!!!!!!!! 179 | DEC PARAM 180 | BNE UWEROUT ;!!!WAS COMMENTED OUT!!!! 181 | RTS 182 | 183 | CLRPARAM: LDA #0 184 | STA PARAM 185 | RTS 186 | 187 | ** CONTINUE THE ATTACK OF A WAVE OF ENEMIES ** 188 | CWVCONT: 189 | DEC WAVECNT 190 | LDA DIFIND 191 | LSR 192 | LSR 193 | LSR 194 | LSR 195 | LSR 196 | TAY 197 | LDA CDELAY0,Y ;DELAY BETWEEN FLIGHTS IS DIFIND DRIVEN 198 | STA WAITING 199 | 200 | LDA WAVECNT ;HIGH NIBBLE DETERMINES ENEMY TYPE 201 | LSR 202 | LSR 203 | LSR 204 | LSR 205 | STA SPNCLASS 206 | 207 | FLEAOUT: LDA NUMFLEAS ;CHECK TO SEE IF WE CAN CALL FLEAS 208 | BEQ CLRPARAM ;ZERO MEANS NO AVAIL FLEAS 209 | JSR FLEAINIT ;INITIALIZE A FLEA 210 | DEC PARAM 211 | BNE FLEAOUT ;!!!!!!!Was commented out!!!!!! 212 | RTS 213 | 214 | 215 | * DELAYS * 216 | CDELAY0: .dc.b 16,7,6,5,5,4,4,3 217 | CDELAY1: .dc.b 32,12,11,10,9,8,7,6 218 | 219 | * MASTER GAME PROGRAMS 220 | WAVE: 221 | .dc.b $00,$10,$40,$50 222 | .dc.b $80,$90,$C0,$D0 223 | .dc.b $A0,$60,$D0,$20 224 | .dc.b $00,$40,$80,$C0 225 | .dc.b $A0,$B0,$E0,$F0 226 | .dc.b $20,$30,$60,$70 227 | .dc.b $80,$90,$C0,$D0 228 | .dc.b $40,$50,$E0,$F0 229 | 230 | **** GROUND MASTER CONTROL PROGRAM **** 231 | 232 | * BONUS WAVE DRIVER * 233 | GRBONUS: 234 | DEC DISTANCE 235 | LDA DISTANCE 236 | BEQ GRBON1 237 | LDA #0 238 | STA DISTANCE 239 | STA HDIST 240 | STA TAKEOVER 241 | LDA #$5B 242 | STA PSRA1 243 | GRBON1: 244 | JSR RANDOM 245 | ; BMI GRBJEWEL 246 | AND #$3 247 | BEQ GRBEND 248 | CLC 249 | ADC #$7 250 | ; BPL GRBHPOS 251 | ;GRBJEWEL 252 | ; AND #$7 253 | GRBHPOS: TAX 254 | 255 | JSR RANDOM ;RANDOM HPOS. FIRST WE WILL CHECK 256 | AND #$7F 257 | CLC ;BIRD RANGE IS 112 TO 239 (70 TO EF) 258 | ADC #106 ;BUT SCROBJ RANGE IS 106 TO 233 (6A TO E9) 259 | ; ORA #$80 ;FOOTPRINT FOR 1X1 STAMP 260 | ; SEC ;PRIOR TO CALLING SCRBUF 261 | ; SBC #$10 262 | 263 | JSR PRINTOK 264 | BCS GRBRTS ;CARRY MEANS PUNT WITH PREJUDICE 265 | JSR SCRBUF 266 | GRBEND: JMP GRNDFOO 267 | GRBRTS: RTS 268 | 269 | ***/< GROUND MASTER CONTROL >\*** 270 | 271 | GRNDMCP: 272 | BIT GCOARSE ;PUNT FOR NON COARSE SCROLLS 273 | BPL GRBRTS 274 | 275 | *** DO PROGRESSION EVERY COARSE SCROLL *** 276 | JSR LANDPROG 277 | 278 | LDA PHASE 279 | BMI GRBONUS 280 | BNE GRBRTS 281 | 282 | *** CHECK FOR SPHINX *** 283 | LDX PLAYER 284 | LDA RACK,X 285 | CLC 286 | ADC DIFCULTY ;Range 0-3 287 | CMP #8 288 | BCC SPHXD1 289 | LDA #7 290 | SPHXD1: ASL 291 | TAX 292 | LDA HDIST 293 | CMP SPHXDIST,X 294 | BCC GRNDFOO 295 | LDA DISTANCE 296 | CMP SPHXDIST+1,X 297 | BCC GRNDFOO 298 | LDA PHASE 299 | BMI GRNDFOO 300 | 301 | * BRING OUT SPHINX * 302 | LDA TAKEOVER 303 | CMP #$85 304 | BCS PLSPHNX 305 | CMP #80 306 | BCS PLSPWAIT 307 | LDA #$80 308 | STA TAKEOVER 309 | RTS 310 | PLSPWAIT: INC TAKEOVER 311 | RTS 312 | PLSPHNX: LDX #$C ;SPHINX 313 | LDA #$B0 314 | JSR PRINTOK 315 | BCS GRBRTS ;CARRY MEANS PUNT WITH PREJUDICE 316 | LDX #$10 317 | JSR SCRBUF 318 | RTS 319 | 320 | SPHXDIST: .dc.b $00,$60,$00,$C0,$01,$20,$01,$80 321 | .dc.b $01,$E0,$02,$40,$03,$A0,$04,$00 322 | 323 | GRNDFOO: 324 | LDY GRNDPC ;Y GETS PC OF PLAYER 325 | LDA GRO,Y ;A GETS OPCODE FROM GRNDPROG 326 | CMP #$FF 327 | BNE GNOJMP ;FF MEANS LOOP 328 | 329 | LDA PSRA1 ;SELECT AN OBJECT 330 | AND #$7 331 | STA TEMP0 332 | LDX PLAYER 333 | LDA RACK,X ;GRADED WITH RACK 334 | CMP #8 335 | BCC GRRACK 336 | LDA #7 337 | GRRACK: CLC 338 | ADC TEMP0 339 | TAY 340 | LDA PHASE 341 | BPL GRBHACK 342 | LDY TEMP0 343 | GRBHACK: LDA GROBJ,Y 344 | STA OBJTYP ;CURRENT OBJECT FOR A PATTERN 345 | 346 | LDA PSRA2 347 | AND #$F 348 | TAY 349 | LDA GRSTARTS,Y ;START AGAIN 350 | TAY 351 | STY GRNDPC ;SET PC TO ZERO. YA THIS IS ZERO PAGE 352 | ; LDA GRO,Y 353 | JMP GNDSPACE 354 | GNOJMP: ;NEW WAVE OF GROUND OBJECTS 355 | INC GRNDPC 356 | STA TEMP9 357 | AND #$FE 358 | BEQ GRNDRTS 359 | LDX OBJTYP 360 | 361 | JSR PRINTOK 362 | BCS GRNDBAR ;CARRY MEANS PUNT WITH PREJUDICE 363 | JSR SCRBUF 364 | GRNDBAR: LDA TEMP9 365 | AND #1 366 | BNE GRNDFOO 367 | 368 | GNDSPACE: LDA PHASE 369 | BMI GRNDRTS 370 | 371 | * DO JEWELS & HIEROS * 372 | JSR RANDOM 373 | AND #$1F 374 | CMP #11 375 | BCS GRNDRTS 376 | TAX 377 | 378 | JSR RANDOM ;RANDOM HPOS. FIRST WE WILL CHECK 379 | AND #$7F 380 | CLC ;BIRD RANGE IS 112 TO 239 (70 TO EF) 381 | ADC #106 ;BUT SCROBJ RANGE IS 106 TO 233 (6A TO E9) 382 | JSR PRINTOK 383 | BCS GRNDRTS ;CARRY MEANS PUNT WITH PREJUDICE 384 | JSR SCRBUF 385 | GRNDRTS: RTS 386 | 387 | GROBJ: .dc.b 11,11,12,13,11,12,13,11 388 | .dc.b 15,14,13,15,14,12,14 389 | 390 | GRSTARTS: .dc.b GRO0-GRO,GRO1-GRO,GRO2-GRO,GRO3-GRO 391 | .dc.b GRO4-GRO,GRO5-GRO,GRO6-GRO,GRO7-GRO 392 | .dc.b GRO4-GRO,GRO7-GRO,GRO2-GRO,GRO6-GRO 393 | .dc.b GRO8-GRO,GRO9-GRO,GROA-GRO,GROB-GRO 394 | 395 | GRO: .dc.b $00,$00,$00,$00,$00,$00,$00,$FF 396 | GRO0: .dc.b $A0,$81,$A1,$C0,$A0,$FF ;\/\ 397 | GRO1: .dc.b $C2,$A0,$A0,$A0,$7F,$FF ;Z 398 | GRO2: .dc.b $C0,$C0,$80,$80,$00,$FF ;// 399 | GRO3: .dc.b $81,$A1,$C0,$00,$00,$FF ;--- 400 | GRO4: .dc.b $C0,$A0,$80,$FF ;\ 401 | GRO5: .dc.b $C2,$00,$A0,$00,$7E,$00,$FF ;! 402 | GRO6: .dc.b $C2,$00,$81,$A1,$C0,$00,$7E,$00,$FF ;X 403 | GRO7: .dc.b $A0,$A0,$A0,$A0,$FF ;/ 404 | GRO8: .dc.b $EE,$EE,$EE,$EE,$6E,$6E,$6E,$6E,$FF ;/ / 405 | GRO9: .dc.b $EE,$CE,$00,$8E,$6E,$FF 406 | GROA: .dc.b $EE,$00,$CC,$00,$AA,$00,$FF 407 | GROB: .dc.b $6F,$8E,$00,$8F,$AE,$00,$FF 408 | 409 | *** CHARACTER MAP GENERATION *** 410 | NEWBLOCK: 411 | ; THIS ROUTINE FIGURES OUT WHICH BLOCK OF CHARACTER MAP TO BRING ONTO THE 412 | ; SCREEN AT THE NEXT COARSE SCROLL 413 | 414 | BIT NBFLAG ;CHECK IF NEW BLOCK IS READY 415 | BMI NONEWS ;IF NEW BLOCK HAS BEEN PICKED, PUNT OUT 416 | 417 | BIT TAKEOVER ;IF NOT TAKING OVER, DO IT RANDOMLY 418 | BPL CHOOSEBL 419 | 420 | ** FORCE BLOCK TO PURE DIRT (9) ** 421 | LDY NEWBLK 422 | LDA RIVERP,Y ;IF RIVERP(7) = LO, NEWBLK = 9. 423 | BPL STUFFIT 424 | JSR RANDOM 425 | AND #1 426 | CLC 427 | ADC #6 ;ELSE NEWBLK = 6 OR 7 428 | BNE STUFF ;JMP 429 | 430 | STUFFIT: 431 | LDA #9 ;FORCE IT TO (9) 432 | STUFF: STA NEWBLK 433 | DEC NBFLAG ;NBFLAG(7) = HI 434 | NONEWS: RTS 435 | 436 | ** CHOOSE A NEW BLOCK BASED ON THE PROGRESSION ** 437 | CHOOSEBL: 438 | CLC 439 | LDA PSRA1 440 | ADC PSRA2 441 | AND #$7 442 | TAX 443 | 444 | LDY NEWBLK 445 | LDA RIVERP,Y 446 | BPL CHLAND 447 | LDA RIVERTBL,X ;RIVER BLOCKS 448 | CMP NEWBLK 449 | BNE CHOOSE1 450 | LDA RIVERALT,X 451 | BNE CHOOSE1 452 | 453 | CHLAND: LDA LANDTBL,X ;LAND BLOCKS 454 | CMP NEWBLK 455 | BNE CHOOSE1 456 | LDA LANDALT,X 457 | CHOOSE1: 458 | STA NEWBLK 459 | DEC NBFLAG 460 | RTS 461 | 462 | RIVERTBL: .dc.b $1,$2,$3,$3,$4,$5,$6,$7 463 | RIVERALT: .dc.b $7,$6,$4,$5,$5,$3,$2,$1 464 | LANDTBL: .dc.b $0,$8,$9,$9,$A,$B,$C,$D 465 | LANDALT: .dc.b $9,$9,$C,$D,$9,$8,$A,$B 466 | 467 | RIVERP: .dc.b $80,$80,$80,$80,$80,$80 ;0 - 5 -> RIVER 468 | .dc.b 0,0,0,0,0,0,0,0 ;6 - 13 -> LAND 469 | 470 | LANDPROG: 471 | LDA DISTANCE 472 | AND #$F 473 | BNE LANDFOO 474 | 475 | ** COPY STATE INTO DUMP AREAS ** 476 | LDX PLAYER 477 | LDA DUMPAREA,X 478 | EOR #$2 479 | STA DUMPAREA,X 480 | TAX 481 | 482 | LDA DISTANCE 483 | STA SVDIST,X 484 | LDA HDIST 485 | STA SVHDIST,X 486 | LDA PSRA1 487 | STA PSRANDA1,X 488 | LDA PSRA2 489 | STA PSRANDA2,X 490 | LDA PSRB1 491 | STA PSRANDB1,X 492 | LDA PSRB2 493 | STA PSRANDB2,X 494 | LDA GRNDPC 495 | STA SVGRNDPC,X 496 | LDA OBJTYP 497 | STA SVOBJTYP,X 498 | LDA NEWBLK 499 | STA SVNEWBLK,X 500 | LDA BLOCK 501 | STA SVBLOCK,X 502 | LDA BAND 503 | STA SVBAND,X 504 | 505 | *** CALCULATE THE NEXT STEP IN THE PROGRESSION *** 506 | LANDFOO: INC DISTANCE 507 | BNE LPROG1 508 | INC HDIST 509 | LPROG1: LDA PSRA1 510 | CLC 511 | ADC PSRB1 512 | PHA 513 | LDA PSRA2 514 | ADC PSRB2 515 | PHA 516 | LDA PSRA1 517 | STA PSRB1 518 | LDA PSRA2 519 | STA PSRB2 520 | PLA 521 | STA PSRA2 522 | PLA 523 | STA PSRA1 524 | RTS 525 | 526 | ;LANDPREV 527 | ; LDA PSRA1 528 | ; SEC 529 | ; SBC PSRB1 530 | ; PHA 531 | ; LDA PSRA2 532 | ; SBC PSRB2 533 | ; PHA 534 | ; LDA PSRB1 535 | ; STA PSRA1 536 | ; LDA PSRB2 537 | ; STA PSRA2 538 | ; PLA 539 | ; STA PSRB2 540 | ; PLA 541 | ; STA PSRB1 542 | ; RTS 543 | 544 | 545 | * PRINTOK PASSED OBJECTID IN X AND HPOS IN ACCUMULATOR 546 | *DETERMINES WHETHER AN OBJECT CAN BE PLACED AT THAT LOCATION 547 | *SAVES X AND A USES TEMPS 0 THROUGH 5 548 | 549 | CURDEX EQU TEMP0 550 | VCOUNT EQU TEMP1 551 | HCOUNT EQU TEMP2 552 | 553 | PRINTOK: 554 | STX TEMPX ;SAVE A AND X 555 | STA TEMP3 556 | 557 | SEC ;CALCULATE INDEX INTO MASK 558 | SBC #ZSTHPOS ;NORMALIZE HPOS TO ZSTHPOS 559 | STA TEMP5 ;TO SEE IF WE NEED VCOUNT ADJUST LATER 560 | LSR ;DIVIDE BY 8 561 | LSR 562 | LSR 563 | STA CURDEX ;SAVE AWAY 564 | 565 | LDA VPRNTBL,X ;GET VERTICAL HEIGHT OF OBJECT 566 | STA VCOUNT ;AND STORE TO VERTICAL COUNTER 567 | 568 | LDY LOADFDEX ;GET POINTER TO CURRENT CHAR MAP MASK 569 | 570 | VCHKLP: LDX TEMPX 571 | CLC ;IF OBJ IS BETWEEN 2-7 TO RIGHT OF CHAR 572 | LDA TEMP5 ;THEN WE WANT TO ADD 1 TO HCOUNT 573 | AND #$06 574 | BEQ NOADD1 ;WE MIGHT BE ABLE TO MOVE THIS OUT VLUP 575 | SEC ;BETWEEN 2-7 SO ADD ONE 576 | NOADD1: LDA HPRNTBL,X ;ALSO MAKE IT INTO A TABLE 577 | ADC #0 578 | STA HCOUNT ;AND STORE TO HORIZONTAL COUNTER 579 | 580 | LDA CURDEX ;GET CURRENT INDEX 581 | BMI OUTAHERE ;IF MINUS THEN WE'RE GONE 582 | 583 | HCHKLP: CMP #8 ;CHECK TO USE EITHER LEFT, MID, OR RIGT 584 | BCS DICKLESS ;USE MID OR RIGT 585 | 586 | TAX ;USE LEFT 587 | LDA LEFTMASK,Y 588 | AND BKONEMSK,X 589 | BEQ OUTAHERE ;GO AWAY 590 | 591 | EOR #$FF ;THIS GIVES US ZERO MASK TO AND WITH 592 | AND LEFTMASK,Y ;MASK AND THEREFORE ZERO OUT WHERE OBJ 593 | STA LEFTMASK,Y ;IS GOING 594 | 595 | INXS: INX 596 | TXA ;PUNT INDEX BACK INTO A 597 | DEC HCOUNT ;ARE WE DONE WITH HORIZ 598 | BNE HCHKLP ;NO, CONTINUE 599 | 600 | BEQ NEXTV ;YES, GO TO NEXT V 601 | 602 | DICKLESS: CMP #16 ;IF >= 16 THEN WE MUST GO TO RIGTMASK 603 | BCS DIKLESS2 604 | 605 | SEC 606 | STA TEMP4 607 | SBC #8 ;USE MIDMASK 608 | TAX ;CLEVER HACKERY. DON'T ASK 609 | LDA BKONEMSK,X 610 | LDX TEMP4 611 | AND MIDMASK,Y 612 | BEQ OUTAHERE ;NO, SO PUNT WITH PREJUDICE 613 | 614 | EOR #$FF ;ZERO OUT MASK BIT WHERE OBJECT IS 615 | AND MIDMASK,Y ;BEING PLACED 616 | STA MIDMASK,Y 617 | JMP INXS ;CAN BE A BCS BUT WHOSE COUNTING? 618 | 619 | DIKLESS2: ;WE MUST USE RIGTMASK 620 | ;SEC ;CARRY SET FROM BRANCH 621 | STA TEMP4 622 | SBC #16 ;USE MIDMASK 623 | TAX ;CLEVER HACKERY. DON'T ASK 624 | LDA BKONEMSK,X 625 | LDX TEMP4 626 | AND RIGTMASK,Y 627 | BEQ OUTAHERE ;NO, SO PUNT WITH PREJUDICE 628 | 629 | EOR #$FF ;ZERO OUT MASK BIT WHERE OBJECT IS 630 | AND RIGTMASK,Y ;BEING PLACED 631 | STA RIGTMASK,Y 632 | JMP INXS ;CAN BE A BCS BUT WHOSE COUNTING? 633 | 634 | NEXTV: DEC CURDEX ;DECREMENT H START INDEX BY TWO 635 | DEC CURDEX 636 | 637 | INY ;UPDATE MASK TABLE INDEX 638 | TYA 639 | AND #$03 640 | TAY 641 | 642 | DEC VCOUNT 643 | BNE VCHKLP ;NOT DONE YET 644 | 645 | OKDOKIE: LDA TEMP3 646 | LDX TEMPX 647 | CLC ;INDICATES ALL IS WELL 648 | RTS ;CLC INDICATES PRINT OK 649 | 650 | OUTAHERE: LDA TEMP3 651 | LDX TEMPX 652 | SEC ;SEC INDICATES WE SHOULD PUNT OK 653 | RTS 654 | 655 | HPRNTBL: .dc.b 1,2,1,2,2,1,2,2,1,1,2,2,5,1,5,1 656 | VPRNTBL: .dc.b 1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1 657 | 658 | BKZRMASK: .dc.b $7F,$BF,$DF,$EF,$F7,$FB,$FD,$FE 659 | BKONEMSK: .dc.b $80,$40,$20,$10,$08,$04,$02,$01 660 | 661 | 662 | ** COLOR INITIALIZATION ** 663 | COLINIT: 664 | LDX #$1B 665 | LDY #20 666 | CLRIN1: 667 | LDA INCOLOR,Y 668 | STA BACKGRND+4,X 669 | DEY 670 | CLRIN2: DEX 671 | BMI NOMORE 672 | TXA 673 | AND #3 674 | BNE CLRIN1 675 | BEQ CLRIN2 676 | NOMORE: 677 | 678 | CCSPHINX: 679 | LDX PLAYER ;PALETTE ZERO 680 | LDA BRDCOLOR,X 681 | STA BACKGRND+1 682 | LDA BRDCOLOR+1,X ;COLOR 2 MUST BE SHADOWED FOR TOP 683 | STA P0C2SHAD ;OF SCREEN 684 | LDA BRDCOLOR+2,X 685 | STA BACKGRND+3 686 | 687 | LDA RACK,X 688 | AND #$7 689 | ASL 690 | ASL 691 | TAY 692 | LDA SPHCOLOR,Y 693 | STA BACKGRND+$1D 694 | LDA SPHCOLOR+1,Y 695 | STA BACKGRND+$1E 696 | LDA SPHCOLOR+2,Y 697 | STA BACKGRND+$1F 698 | 699 | ** CHANGE BACKGROUND, CHARACTER MAP ** 700 | CCBAKGR: 701 | ; JSR RANDOM 702 | ; AND #$1C 703 | ; TAY 704 | LDA BAKCOLOR,Y ;PALETTE 2 705 | STA BACKCOL 706 | LDA BAKCOLOR+1,Y 707 | STA BACKGRND+9 708 | LDA BAKCOLOR+2,Y 709 | STA P2C2SHAD ;COLOR TWO HAS TO BE PUT IN SHADOW REG 710 | LDA BAKCOLOR+3,Y 711 | STA BACKGRND+$B 712 | 713 | CCSCRBS: LDA SCBCOLOR,Y ;CHANGE SCROLLING OBJECT COLOR 714 | STA P3C1 ;ADDED 7/26 JEM 715 | LDA SCBCOLOR+1,Y 716 | STA P3C2 717 | LDA SCBCOLOR+2,Y 718 | STA P3C3 719 | 720 | LDA RACK ;ONLY EIGHT ENTRIES IN TABLE 721 | AND #$07 722 | TAY 723 | LDA SHCOLTBL,Y ;SOME MORE JEM HACKS 7/26 724 | STA P1C1 725 | STA P1C2SHAD ;COLOR TWO IS SHADOWED 726 | STA P1C3 727 | 728 | LDA #$58 ;BE CAREFUL MORE JEM HACKS EVEN 729 | STA P5C2SHAD ;COLOR 2 OF PAL 5 MUST BE SHADOWED 730 | LDA #$6F ;SOME MORE HACKS FOR THE MASSES 731 | STA P1C2SHDB 732 | RTS 733 | 734 | ** INITIAL SET OF COLORS ** 735 | ;NCOLOR .dc.b $13 ;BACKGRND 736 | ; .dc.b $C7,$CC,$CF ;PALLETTE ZERO (BIRD) 737 | INCOLOR: .dc.b $02,$02,$02 ;PALLETTE ONE (SHADOW) 738 | .dc.b $16,$76,$72 ;PALLETTE TWO (SCROLLING PLAYFIELD) 739 | .dc.b $0C,$04,$08 ;PALLETTE THREE (PYRAMIDS) 740 | .dc.b $3D,$38,$32 ;PALLETTE FOUR (GLIDERS 1) 741 | .dc.b $5D,$58,$52 ;PALLETTE FIVE (GLIDERS 2) 742 | .dc.b $3C,$34,$F1 ;PALLETTE SIX (GLIDERS 3) 743 | .dc.b $2C,$26,$F0 ;PALLETTE SEVEN (SPHINX) 744 | 745 | BRDCOLOR: .dc.b $E7,$07 746 | .dc.b $EC,$0C 747 | .dc.b $CF,$0F 748 | 749 | SPHCOLOR: 750 | .dc.b $2C,$26,$F0,0 751 | .dc.b $0A,$06,$01,0 752 | .dc.b $7C,$76,$B0,0 753 | .dc.b $C9,$C5,$E0,0 754 | .dc.b $0C,$08,$01,0 755 | .dc.b $BC,$98,$B0,0 756 | .dc.b $0C,$08,$03,0 757 | .dc.b $CA,$C6,$E0,0 758 | 759 | BAKCOLOR: 760 | .dc.b $15,$16,$76,$72 761 | .dc.b $C2,$C4,$85,$61 762 | .dc.b $08,$0A,$B6,$B3 763 | .dc.b $00,$73,$38,$52 764 | .dc.b $12,$14,$96,$90 765 | .dc.b $A0,$C3,$69,$63 766 | .dc.b $40,$43,$29,$26 767 | .dc.b $03,$05,$08,$05 768 | 769 | SCBCOLOR: .dc.b $0C,$04,$08,0 770 | .dc.b $AA,$A2,$A6,0 771 | .dc.b $1F,$C3,$C7,0 772 | .dc.b $7C,$01,$67,0 773 | .dc.b $2C,$12,$06,0 774 | .dc.b $CA,$E0,$C6,0 775 | .dc.b $7B,$77,$B0,0 776 | .dc.b $0C,$03,$08,0 777 | 778 | SHCOLTBL: .dc.b $02,$02,$02,$A0,$02,$02,$02,$02 779 | ; END 780 | -------------------------------------------------------------------------------- /SOBJ.S: -------------------------------------------------------------------------------- 1 | *******SOBJ.S LINKED LIST MANIPULATION SHIT 2 | 3 | ; OTEMP1 THRU OTEMP4 ARE FOR THESE ROUTINES ONLY RIGHT NOW 4 | ;DOES ANYONE USE OTEMP4????? YES, NOSTUB DOES TO SAVE Y 5 | ; OTEMP1 IS ALWAYS USED TO PRESERVE Y 6 | ; ALL OF THESE ROUTINES SHOULD BE INTERUPTABLE 7 | 8 | ; ZERODEF 9 | 10 | ; RSEG CODE9 11 | ; 12 | ; SUBROUTINE TO INSERT NEW OBJECT IN LIST 13 | ; INDEX IN X 14 | ; DC IN TEMP6, DF IN TEMP10 15 | ; TRASHES A, Y AND TEMP5 16 | ; 17 | OBJINS: 18 | STY OTEMP1 19 | 20 | ; JSR LISTEST ;FILL TESTLIST WITH ONE'S 21 | ; LDA TESTLIST,X ;LOOK FOR A ONE. IF SO, IT IS ALREADY 22 | ; BNE BNE ;IN 23 | 24 | LDA TEMP6 25 | STA DXTBL,X 26 | LDA TEMP10 27 | STA DFTBL,X 28 | 29 | LDY #ZREF3 ;FIND REFERENCE POINT TO INSERT AT 30 | ; LDA TEMP10 ; NEW DF 31 | ;TEMP10 IS ALREADY IN A 32 | FOLLLP: CMP DXTBL,Y ; DC OF REFERENCE POINT 33 | BCC FOLLOW 34 | DEY 35 | CPY #ZREF0 36 | BCS FOLLLP 37 | LDA LOWEST ;LOWEST IS USED AS DEFAULT 38 | 39 | OBJINSLP: TAY ;FIND FIRST OBJECT WITH HIGHER PRIORITY 40 | LDA DFTBL,Y ; OLD DF 41 | CMP TEMP6 ; NEW DC 42 | BCC OBJINSFN ; NEW DC > OLD DF - FOUND IT 43 | LDA TEMP10 ; NEW DF 44 | CMP DXTBL,Y ; OLD DC 45 | BCC FOLLOW ; NEW DF < OLD DC - TRY NEXT ONE 46 | LDA YTBL,Y ; OLD Y 47 | CMP YTBL,X ; NEW Y 48 | BCS OBJINSFN ; NEW Y <= OLD Y - FOUND IT 49 | FOLLOW: LDA RLTBL,Y ; OTHERWISE, TRY NEXT ONE 50 | BPL OBJINSLP ; NOT AT END OF LIST 51 | STA RLTBL,X ;PUT OBJECT AT END OF LIST 52 | STX HIGHEST 53 | TXA 54 | STA RLTBL,Y 55 | TYA 56 | STA LLTBL,X 57 | ; JSR LISTEST 58 | LDY OTEMP1 59 | RTS 60 | OBJINSFN: TYA ;OTHERWISE INSERT OBJECT 61 | STA RLTBL,X 62 | LDA LLTBL,Y 63 | STA LLTBL,X 64 | STA OTEMP3 65 | TXA 66 | STA LLTBL,Y 67 | LDY OTEMP3 68 | BMI OBJINSBG 69 | STA RLTBL,Y 70 | ; JSR LISTEST 71 | LDY OTEMP1 72 | RTS 73 | OBJINSBG: STX LOWEST ;CHANGE LOWEST IF IT NEEDS IT 74 | ; JSR LISTEST 75 | LDY OTEMP1 76 | RTS 77 | 78 | ; BNE BNE BNE 79 | ; BEQ BEQ BEQ 80 | 81 | ; 82 | ; SUBROUTINE TO DELETE OBJECT FROM LIST 83 | ; INDEX IN X 84 | ; 85 | OBJDEL: 86 | ; CPX #PYRSTART 87 | ; BCC NOSTUB 88 | ; CPX #PYRSTOP 89 | ; BCS NOSTUB 90 | 91 | ; LDA VPTBL,X ;THIS LOOKS FOR DELETING SCROLLING 92 | ; CMP #SCRENBOT+1 ;OBJECT WHICH IS NOT IN LIST 93 | ; BNE BNE 94 | NOSTUB: 95 | STX OTEMP2 96 | STY OTEMP4 ;ONLY NOSTUB STORES Y IN OTEMP4 97 | 98 | ; JSR LISTEST ;CHECKS TO SEE OF OBJECT IS NOT IN 99 | ; LDA TESTLIST,X ;LIST BEFORE DELETING 100 | ; BEQ BEQ 101 | 102 | LDY LLTBL,X ;THIS IS CALLED BY OTHER SCROLLING 103 | ;ROUTINES SO IT CAN'T USE OTEMP1 104 | ;FOR Y 105 | BMI OBJDELBG ; DELETING FIRST OBJECT IN LIST 106 | LDA RLTBL,X 107 | STA RLTBL,Y 108 | BMI OBJDELEN ; DELETING LAST OBJECT IN LIST 109 | TAX ;OTHERWISE, JUST DELETE 110 | TYA 111 | STA LLTBL,X 112 | LDX OTEMP2 113 | ; JSR LISTEST 114 | LDY OTEMP4 115 | RTS 116 | OBJDELBG: LDA RLTBL,X ;RIGHT LINK IS LOWEST NOW 117 | STA LOWEST 118 | TAY 119 | LDA #$FF ;IT'S LEFT LINK IS FF 120 | STA LLTBL,Y 121 | ; JSR LISTEST 122 | LDY OTEMP4 123 | RTS ;NOTHING LEFT TO DELETE END 124 | OBJDELEN: STY HIGHEST 125 | LDY OTEMP4 126 | RTS 127 | ; 128 | ; SUBROUTINE TO MOVE AN OBJECT ALREADY IN THE LIST 129 | ; INDEX IN X 130 | ; NEW DC IN TEMP6, DF IN TEMP10 131 | ; TRASHES Y, A AND TEMP5 132 | ; 133 | OBJMOV: 134 | STY OTEMP1 135 | LDA TEMP10 136 | STA DFTBL,X 137 | LDA TEMP6 138 | CMP DXTBL,X 139 | STA DXTBL,X 140 | BEQ CANTGO 141 | BCS LEFTY ;IF GOING TO THE RIGHT, THIS ISN'T BAD 142 | 143 | LDY RLTBL,X 144 | LDA DFTBL,Y 145 | CMP TEMP6 146 | BCC CANTGO ; PUNT IF NOT CROSSING NEXT OBJECT 147 | 148 | LDY LLTBL,X ; STARTING POINT TO RE-INSERT 149 | BPL RIGHTOK 150 | LDY RLTBL,X 151 | RIGHTOK: JSR NOSTUB ; DELETE OBJECT (PRESERVES Y) 152 | ;TRASHES OTEMP1 HOWEVER!!!! 153 | TYA ; GET STARTING POINT 154 | JMP OBJINSLP ; INSERT NEAR STARTING POINT 155 | 156 | ;OTHERWISE, CHECK TO THE LEFT 157 | LEFTY: 158 | ; THIS FOLLOWS LIST TO THE LEFT UNTIL 159 | ; EITHER THE BEGINNING OR AN OBJECT 160 | ; THAT DOESN'T OVERLAP AND HAS LOWER 161 | ; PRIORITY IS FOUND. THEN IT CALLS 162 | ; OBJINSLP. 163 | LDY LLTBL,X 164 | LDA TEMP10 165 | CMP DXTBL,Y 166 | BCC CANTGO 167 | 168 | MOVLLP: LDA LLTBL,Y 169 | BMI MOVLFN 170 | TAY ; THIS WAS ABOVE THE BMI 171 | LDA TEMP10 172 | CMP DXTBL,Y 173 | BCS MOVLLP ; MIGHT WANT TO USE Y TO RIGHT 174 | MOVLFN: JSR NOSTUB ;Y IS NOT PRESERVED WHEN WE CALL NOSTUB 175 | TYA ;SINCE WE STORED Y IN OTEMP1 WHEN WE 176 | JMP OBJINSLP ;ENTERED OBJMOV!!!!!!!! 177 | 178 | 179 | 180 | CANTGO: 181 | ; JSR LISTEST 182 | LDY OTEMP1 183 | RTS 184 | 185 | 186 | 187 | ;LIST TEST LOOKS FOR LOOPS IN LINKED LIST 188 | 189 | ; ROUTINE TO VERIFY LIST 190 | 191 | ; LISTEST STX OTEMP2 ; ROUTINE TO TEST FOR LOOPS IN LIST 192 | ;WE CAN TRASH Y HERE 193 | ; LDX #83 194 | ; LDA #0 195 | ; TESTZERO STA TESTLIST,X ;CLEAR OUT TEST LIST 196 | ; DEX 197 | ; BPL TESTZERO 198 | ; LDY #0 199 | 200 | ; LDA LOWEST 201 | ; BMI PASSED ;ITS OVER 202 | ; INCTEST TAX 203 | ; LDA TESTLIST,X 204 | ; BNE THEBNE 205 | ; INC TESTLIST,X ;MARK ENTRY AS USED 206 | ; TXA 207 | ; STA ORDTEST,Y 208 | ; INY 209 | ; LDA RLTBL,X 210 | ; BPL INCTEST 211 | ; STA ORDTEST,Y ;TO STORE FF AT END OF ORDTEST 212 | 213 | ; DEY ;TO LOOK AT LAST ORDTEST 214 | ; LDX HIGHEST 215 | ; BMI PASSED 216 | ; TXA 217 | ; ORDERING CMP ORDTEST,Y 218 | ; BNE LLFUCK 219 | ; DEY 220 | ; LDA LLTBL,X 221 | ; TAX 222 | ; BPL ORDERING 223 | 224 | ; PASSED 225 | ; LDX OTEMP2 226 | ; RTS 227 | 228 | ; THEBNE BNE THEBNE 229 | ; LLFUCK BNE LLFUCK 230 | 231 | 232 | ; 233 | ; SUBROUTINE TO UPDATE THE LIST WHEN AN OBJECT IS SCROLLED 234 | ; INDEX IN X 235 | ; TRASHES Y, A, TEMP5 AND TEMP6 236 | ; 237 | OBJSCR: ;DECREMENT DC AND DF AUTOMATICALLY 238 | ; LDA VPTBL,X ;THIS LOOKS FOR MOVING UNINSERTED OBJ 239 | ; CMP #SCRENBOT+1 240 | ; BEQ BEQ 241 | ; CMP #SCRENBOT+2 242 | ; BEQ BEQ 243 | 244 | LDY RLTBL,X ; STARTING POINT TO RE-INSERT 245 | BMI FUCKEDUP 246 | JSR NOSTUB ; DELETE OBJECT (PRESERVES Y) 247 | ;TRASHES OTEMP1 248 | 249 | LDA DXTBL,X 250 | STA TEMP6 ; NEW DC 251 | LDA DFTBL,X 252 | STA TEMP10 ; NEW DF 253 | 254 | TYA ; GET STARTING POINT 255 | ; BMI FUCKEDUP ; NEED TO INSERT AT END OF LIST 256 | JMP OBJINSLP ; INSERT NEAR STARTING POINT 257 | 258 | FUCKEDUP: RTS 259 | ; LDY HIGHEST 260 | ; LDA #$FF 261 | ; STA RLTBL,X 262 | ; TYA 263 | ; STA LLTBL,X 264 | ; TXA 265 | ; STA RLTBL,Y 266 | ; RTS 267 | 268 | VRTS0: LDA #0 269 | STA GSCRFLAG 270 | RTS 271 | 272 | *** SCROLLING PROCEDURE CALLED FROM SKERNEL, SINIT *** 273 | VSCRP: 274 | LDA #0 275 | STA GCOARSE 276 | 277 | LDA SCRATE 278 | LSR 279 | STA SCROLLS 280 | BCC VSKIP 281 | 282 | LDA MAINCNT 283 | LSR 284 | BCC VSKIP 285 | INC SCROLLS 286 | VSKIP: 287 | LDA SCROLLS 288 | BEQ VRTS0 289 | LDY #$80 ;THIS TELLS SCROLL ON NEXT FRAME TO 290 | STY GSCRFLAG ;THIS TELLS MAINLOOP TO SCROLL 291 | 292 | CLC 293 | ADC ZONEOFF 294 | SBC #14 295 | STA SCRDELTA 296 | 297 | BCC SCRSHIT 298 | STY GCOARSE 299 | 300 | SCRSHIT: LDX HIGHEST 301 | SCRLOOP: 302 | LDA LLTBL,X ; NEED TO GET LINK BEFORE SCROLLING 303 | STA TEMP9 304 | CPX #PYRSTART 305 | BCC SCRNEXT 306 | CPX #PYRSTOP+1 307 | BCS SCRNEXT 308 | 309 | LDA VPTBL,X 310 | CLC 311 | ADC SCROLLS 312 | STA VPTBL,X 313 | CMP #$E0 314 | BCS SCRNODEL 315 | CMP #SCRENBOT 316 | BCS SCRDEL 317 | SCRNODEL: 318 | LDA HPTBL,X 319 | SEC 320 | SBC SCROLLS 321 | STA HPTBL,X 322 | 323 | LDA ZTBL,X 324 | SEC 325 | SBC SCROLLS 326 | STA ZTBL,X 327 | 328 | LDA COLZ1,X 329 | SEC 330 | SBC SCROLLS 331 | STA COLZ1,X 332 | 333 | LDA COLZ2,X 334 | SEC 335 | SBC SCROLLS 336 | STA COLZ2,X 337 | 338 | LDA DXTBL,X 339 | CMP #$FD 340 | BCS SCRNEXT ; DON'T SCROLL DX OF HIERO'S 341 | SEC 342 | SBC SCROLLS 343 | BNE DCOKAY 344 | LDA #1 345 | DCOKAY: STA DXTBL,X 346 | 347 | LDA DFTBL,X 348 | SEC 349 | SBC SCROLLS 350 | BNE DFOKAY 351 | LDA #1 352 | DFOKAY: STA DFTBL,X 353 | 354 | LDA RLTBL,X 355 | CMP #PYRSTART 356 | BCC SCRNSCR 357 | CMP #PYRSTOP+1 358 | BCC SCRNEXT 359 | SCRNSCR: JSR OBJSCR 360 | SCRNEXT: LDX TEMP9 361 | BPL SCRLOOP 362 | RTS 363 | 364 | SCRDEL: LDA #0 365 | STA COLSTAT,X 366 | LDA #SCRENBOT+1 367 | STA VPTBL,X 368 | JSR OBJDEL ; ASSUME THIS PRESERVES X 369 | JSR RETASLOT 370 | 371 | JMP SCRNEXT 372 | 373 | ; GETASLOT - ALLOCATES LOADER TABLE SLOTS FOR ANYTHING THAT NEEDS ONE 374 | ; AND RETURNS IT IN X. AN FF MEANS NONE WERE AVAILABLE 375 | 376 | GETASLOT: LDX SLOTGPTR 377 | LDA SLOTQ,X 378 | 379 | INX 380 | CPX #PYRSTOP-PYRSTART+1 381 | BNE GOTASLOT 382 | LDX #0 383 | 384 | GOTASLOT: CPX SLOTRPTR 385 | BEQ NOTASLOT ; NO SLOTS ARE LEFT 386 | 387 | STX SLOTGPTR 388 | TAX 389 | RTS 390 | 391 | NOTASLOT: LDA #$FF 392 | TAX 393 | RTS 394 | 395 | RETASLOT: TXA 396 | LDX SLOTRPTR 397 | CPX #0 398 | BEQ SLOTPUNT 399 | CPX #1 400 | BEQ SLOTPNT1 401 | CPX #2 402 | BEQ SLOTPNT2 403 | CMP SLOTQ-3,X 404 | BEQ SLOTTRAP 405 | SLOTPNT2: CMP SLOTQ-2,X 406 | BEQ SLOTTRAP 407 | SLOTPNT1: CMP SLOTQ-1,X 408 | BEQ SLOTTRAP 409 | SLOTPUNT: STA SLOTQ,X 410 | INX 411 | CPX #PYRSTOP-PYRSTART+1 412 | BNE RTDASLOT 413 | LDX #0 414 | RTDASLOT: STX SLOTRPTR 415 | SLOTTRAP: RTS 416 | 417 | ;SLOTTRAP JMP SLOTTRAP 418 | 419 | ; END 420 | -------------------------------------------------------------------------------- /SPHINX.S: -------------------------------------------------------------------------------- 1 | * SPHINX.S--SVEX.S 2 | 3 | ; ZERODEF 4 | 5 | * ALIEN STUFF 6 | ORG $FF80 ; $FF80 - $FFF7 RESERVED FOR ALIEN 7 | 8 | .dc.b $FF,$FF,$FF,$FF,$FF 9 | .dc.b $FF,$FF,$FF,$FF,$FF 10 | .dc.b $FF,$FF,$FF,$FF,$FF 11 | .dc.b $FF,$FF,$FF,$FF,$FF 12 | .dc.b $FF,$FF,$FF,$FF,$FF 13 | .dc.b $FF,$FF,$FF,$FF,$FF 14 | .dc.b $FF,$FF,$FF,$FF,$FF 15 | .dc.b $FF,$FF,$FF,$FF,$FF 16 | .dc.b $FF,$FF,$FF,$FF,$FF 17 | .dc.b $FF,$FF,$FF,$FF,$FF 18 | .dc.b $FF,$FF,$FF,$FF,$FF 19 | .dc.b $FF,$FF,$FF,$FF,$FF 20 | .dc.b $FF,$FF,$FF,$FF,$FF 21 | .dc.b $FF,$FF,$FF,$FF,$FF 22 | .dc.b $FF,$FF,$FF,$FF,$FF 23 | .dc.b $FF,$FF,$FF,$FF,$FF 24 | .dc.b $FF,$FF,$FF,$FF,$FF 25 | .dc.b $FF,$FF,$FF,$FF,$FF 26 | .dc.b $FF,$FF,$FF,$FF,$FF 27 | .dc.b $FF,$FF,$FF,$FF,$FF 28 | .dc.b $FF,$FF,$FF,$FF,$FF 29 | .dc.b $FF,$FF,$FF,$FF,$FF 30 | .dc.b $FF,$FF,$FF,$FF,$FF 31 | .dc.b $FF,$FF,$FF,$FF,$FF 32 | ; ;120 FOR ALIEN 33 | 34 | * VECTORS FOR STARTUP 35 | ORG $FFF8 36 | .dc.b $FF,$47 37 | .dc.b HANDLER,HANDLER/256 ;DLI HANDLER NMI 38 | .dc.b STARTUP&$FF,STARTUP/256 ; STARTUP VECTOR 39 | .dc.b 0,0 ;IRQ VECTOR NOT USED 40 | 41 | ; END 42 | -------------------------------------------------------------------------------- /SSCROLL.S: -------------------------------------------------------------------------------- 1 | * SPHINX--SSCROLL.S 2 | 3 | *COARSE VERTICAL PRECEDES COARSE HORIZONTAL. CHAR MAP GENERATION IS STILL DONE 4 | *ON THE SAME FRAME AS COARSE VERTICAL 5 | 6 | 7 | ; ZERODEF 8 | 9 | ; RSEG CODED 10 | 11 | ZSTHPOS EQU $5A ;STARTING X POS OF CHAR MAP 12 | ZPALWID EQU $4B ;CHARACTER MAP LENGTH 21 BYTES 13 | 14 | * SUPER DUPER SCROLLING ROUTINE 15 | 16 | SCROLL: 17 | LDA SCROLLS 18 | BEQ SCREND 19 | STA TEMP8 20 | DEC TEMP8 21 | SCROLLP: 22 | JSR VSCROLL ;DO IT 23 | JSR HSCROLL ;DOIT 24 | NOSCROLL: 25 | INC SCRLLCNT 26 | SCRNXT: DEC TEMP8 27 | BPL SCROLLP 28 | SCREND: RTS 29 | 30 | 31 | * VSCROLL 32 | 33 | 34 | VSCROLL: 35 | 36 | INC ZONEOFF ;INC ZONEOFF AND CHECK 37 | BNE NOT0 38 | LDA #$4F ;RESTORE TOP DUMMY ZONES 39 | STA DLLIST ;HIGH AND LOW BYTES SHOULD BE SAME 40 | LDA #$48 41 | STA DLLIST+3 42 | 43 | LDA #$C0 ;ONE LINE OF ZONE 0 44 | STA DLLIST+6 ;STORE IT 45 | LDA #DL0/256 46 | STA DLLIST+7 47 | LDA #DL0&$FF 48 | STA DLLIST+8 49 | 50 | LDA #$4F ;FULL ZONE 1 WITH NO DLI 51 | STA DLLIST+9 52 | 53 | NOT0: 54 | LDA ZONEOFF ;CHECK FOR COARSE SCROLL 55 | CMP #15 56 | BEQ COARSEV 57 | 58 | ORA #$C0 ;ZONEOFF IS HEIGHT OF ZONE0 59 | STA DLLIST+6 ;OFFSET 60 | 61 | LDA ZONEOFF ;CALCULATE ZONE 11 STUFF FROM ZONEOFF 62 | CLC 63 | ADC #(CHARS+$100)/256 64 | STA D11CBASE ;CHARBASE OF ZONE 11 65 | LDA #14 66 | SEC 67 | SBC ZONEOFF 68 | ORA #$C0 69 | STA DLLIST+39 70 | CMP #$C0 71 | BNE MORETH1 72 | ;HERE FOR ZONE HEIGHT OF 1 73 | LDA #DLZ11A&$FF ;SPECIAL DLI FOR ZONE HEIGHT OF 1 74 | STA DLZDEST 75 | LDA #DLZ11A/256 76 | STA DLZDEST+1 77 | LDA DLLIST+42 78 | AND #$7F 79 | STA DLLIST+42 80 | RTS 81 | 82 | MORETH1: 83 | LDA #DLIZ11&$FF ;REGULAR DLI FOR ZONE 11 84 | STA DLZDEST 85 | LDA #DLIZ11/256 86 | STA DLZDEST+1 87 | 88 | LDA DLLIST+42 89 | ORA #$80 90 | STA DLLIST+42 91 | 92 | RTS 93 | 94 | COARSEV: LDY #$FF ;COARSE V SCROLL 95 | STY ZONEOFF 96 | 97 | 98 | INY 99 | STY KPTR0 100 | STY KPTR1 101 | 102 | LDA #$47 ;CHANGE TOP ZONE TO EIGHT OF BLANK 103 | STA DLLIST 104 | LDA #$48 ;ANOTHER ZONE OF 9 BLANK LINES 105 | STA DLLIST+3 106 | 107 | LDA #$47 ;DLI TO SET UP PROPER COLOR 108 | STA DLLIST+6 ;MAKE THIRD ZONE 8 OF BLANK 109 | LDA #NULHDR/256 ;SET UP ITS BLANK HEADER 110 | STA DLLIST+7 111 | LDA #NULHDR&$FF 112 | STA DLLIST+8 113 | 114 | LDA #$CF ;ZONE 1 GETS 16 LINES THIS TIME 115 | STA DLLIST+9 116 | 117 | LDX #11 ;SHUFFLE CHAR MAPS 118 | VSCRLP: LDA HIBYE,X 119 | STA KPTR1+1 120 | LDA HIBYE-1,X 121 | STA KPTR0+1 122 | 123 | LDY #4 124 | LDA (KPTR0),Y ;HPOS 125 | STA (KPTR1),Y 126 | DEY 127 | DEY ;SKIP PALWIDTH 128 | LDA (KPTR0),Y ;HIGH BYTE CHAR MAP 129 | STA (KPTR1),Y 130 | DEY 131 | DEY ;SKIP W1 132 | LDA (KPTR0),Y ;LOW BYTE CHAR MAP 133 | STA (KPTR1),Y 134 | DEX 135 | BPL VSCRLP 136 | 137 | LDX BAND ;GET NEXT BAND 138 | DEX 139 | BPL NEXBAND 140 | LDY NEWBLK ;GET NEW BLOCK IF NEEDED 141 | STY BLOCK 142 | INC NBFLAG 143 | LDX BANDTBL,Y ;6 IS MAXIMUM BAND NUMBER 144 | NEXBAND: STX BAND 145 | 146 | LDY BLOCK ;GET NEW BLOCK NUMBER 147 | 148 | LDA MSKLFTLO,Y ;STUFF POINTERS TO LOAD NEW MASK 149 | STA KTEMP0 150 | LDA MSKLFTHI,Y 151 | STA KTEMP1 ;(KTEMP0) POINTS TO MASKL TABLE FOR BLK 152 | LDA MSKMIDLO,Y 153 | STA KPTR0 ;(KPTR0) POINTS TO MASKM TABLE FOR BLK 154 | LDA MSKMIDHI,Y 155 | STA KPTR0+1 156 | LDA MSKRITLO,Y 157 | STA KTEMP2 ;(KTEMP2) POINTS TO MASKR TABLE FOR BLK 158 | LDA MSKRITHI,Y 159 | STA KTEMP3 160 | 161 | LDA BLKTBLLO,Y ;USE BLOCK TABLE AND TIMES33 TABLE TO 162 | LDX STUFFDEX ;GET POINTER TO CURRENT BAND AND MOVE 163 | STA PTRTBLLO,X ;POINTER TABLES USED FOR LOOKAHEAD 164 | LDA BLKTBLHI,Y 165 | STA PTRTBLHI,X 166 | 167 | LDY BAND 168 | 169 | LDA TIMES33,Y 170 | CLC 171 | ADC PTRTBLLO,X ;add to lo byte 172 | STA PTRTBLLO,X 173 | 174 | LDA PTRTBLHI,X 175 | ADC #0 176 | STA PTRTBLHI,X 177 | 178 | LDA (KTEMP0),Y ;USE POINTERS TO STUFF MASK TABLE VALUE 179 | STA LEFTMASK,X ;INTO LOCATIONS CORRESPONDING TO CHAR 180 | LDA (KPTR0),Y 181 | STA MIDMASK,X 182 | LDA (KTEMP2),Y ;MAPS 183 | STA RIGTMASK,X 184 | 185 | INX 186 | TXA 187 | AND #$03 188 | STA STUFFDEX 189 | ;THIS IS ADDRESS OF CHAR MAP IN ROM 190 | ;NOW WE HAVE TO COPY INTO RAM 191 | 192 | LDX BUFDEX 193 | LDA BUFFERLO,X 194 | STA KTEMP2 195 | 196 | LDA BUFFERHI,X 197 | STA KTEMP3 198 | 199 | DEX 200 | BPL OLDBUF 201 | LDX #11 202 | 203 | OLDBUF: STX BUFDEX 204 | 205 | LDY LOADFDEX ;COPY POINTER OF CHAR MAP FROM POINTER 206 | LDA PTRTBLLO,Y ;BUFFER TABLE INTO FROM POINTER 207 | STA KTEMP0 208 | LDA PTRTBLHI,Y 209 | STA KTEMP1 210 | INY 211 | TYA 212 | AND #$03 213 | STA LOADFDEX 214 | 215 | LDY #32 216 | COPYLOP: LDA (KTEMP0),Y ;THIS COPIES CHAR MAP INTO RAM 217 | STA (KTEMP2),Y 218 | DEY 219 | BPL COPYLOP 220 | 221 | LDA #ZSTHPOS ;HEADER FOR NEW CHAR MAP 222 | STA DL0+4 223 | LDA #ZPALWID ;PALLETTE WIDTH 224 | STA DL0+3 225 | LDA KTEMP3 ;HIGH BYTE OF CHAR MAP 226 | STA DL0+2 227 | LDA #$60 ;W1 228 | STA DL0+1 229 | LDA KTEMP2 ;LOW BYTE OF CHAR MAP 230 | STA DL0 231 | 232 | LDA #CHARS/256 233 | STA D11CBASE ;CBASE OF ZONE 11 234 | LDA #$CF 235 | STA DLLIST+39 236 | 237 | CMP #$C0 238 | BNE MORETH1A 239 | ;HERE FOR ZONE HEIGHT OF 1 240 | LDA #DLZ11A&$FF ;ISN'T THIS THE SAME AS ABOVE 241 | STA DLZDEST 242 | LDA #DLZ11A/256 243 | STA DLZDEST+1 244 | LDA DLLIST+42 245 | AND #$7F 246 | STA DLLIST+42 247 | RTS 248 | 249 | MORETH1A: 250 | LDA #DLIZ11&$FF ;AND ISN'T THIS SIMILAR TO ABOVE 251 | STA DLZDEST 252 | LDA #DLIZ11/256 253 | STA DLZDEST+1 254 | 255 | LDA DLLIST+42 256 | ORA #$80 257 | STA DLLIST+42 258 | 259 | RTS 260 | 261 | TIMES33: .dc.b 0*33,1*33,2*33,3*33,4*33,5*33,6*33 262 | 263 | BUFFERLO: .dc.b ZBUFF0&$FF,ZBUFF1&$FF,ZBUFF2&$FF 264 | .dc.b ZBUFF3&$FF,ZBUFF4&$FF,ZBUFF5&$FF 265 | .dc.b ZBUFF6&$FF,ZBUFF7&$FF,ZBUFF8&$FF 266 | .dc.b ZBUFF9&$FF,ZBUFFA&$FF,ZBUFFB&$FF 267 | 268 | BUFFERHI: .dc.b ZBUFF0/256,ZBUFF1/256,ZBUFF2/256 269 | .dc.b ZBUFF3/256,ZBUFF4/256,ZBUFF5/256 270 | .dc.b ZBUFF6/256,ZBUFF7/256,ZBUFF8/256 271 | .dc.b ZBUFF9/256,ZBUFFA/256,ZBUFFB/256 272 | 273 | HIBYE: .dc.b DL0/256,DL1/256,DL2/256,DL3/256 274 | .dc.b DL4/256,DL5/256,DL6/256,DL7/256 275 | .dc.b DL8/256,DL9/256,DL10/256,DL11/256 276 | 277 | BANDTBL: .dc.b 6,6,3,2,3,2,3,2,6,3,2,3,2,6 278 | 279 | * HSCROLL 280 | HSCROLL: 281 | 282 | DEC DL0+4 ;DECREMENT HORIZONTAL POSITIONS 283 | DEC DL1+4 284 | DEC DL2+4 285 | DEC DL3+4 286 | DEC DL4+4 287 | DEC DL5+4 288 | 289 | INC JERKOFF ;INCREMENT HOR SCROLL COUNTER 290 | LDA JERKOFF 291 | CMP #7 292 | BEQ COARSEH 293 | 294 | DEC DL6+4 ;IF APPROPRIATE, DEC REST OF X POS'S 295 | DEC DL7+4 296 | DEC DL8+4 297 | DEC DL9+4 298 | DEC DL10+4 299 | DEC DL11+4 300 | 301 | RTS 302 | 303 | COARSEH: LDA #$FF ;COARSE H SCROLL 304 | STA JERKOFF 305 | LDA #0 ;ZERO OUT H POS'S 306 | STA DL6+4 307 | STA DL7+4 308 | STA DL8+4 309 | STA DL9+4 310 | STA DL10+4 311 | STA DL11+4 312 | 313 | INC DL6 ;INC START OF CHAR MAP 314 | INC DL7 315 | INC DL8 316 | INC DL9 317 | INC DL10 318 | INC DL11 319 | 320 | RTS 321 | 322 | 323 | BLKTBLLO: .dc.b BLOCK0&$FF,BLOCK1&$FF,BLOCK2&$FF 324 | .dc.b BLOCK3&$FF,BLOCK4&$FF,BLOCK5&$FF 325 | .dc.b BLOCK6&$FF,BLOCK7&$FF,BLOCK8&$FF 326 | .dc.b BLOCK9&$FF,BLOCKA&$FF,BLOCKB&$FF 327 | .dc.b BLOCKC&$FF,BLOCKD&$FF 328 | 329 | BLKTBLHI: .dc.b BLOCK0/256,BLOCK1/256,BLOCK2/256 330 | .dc.b BLOCK3/256,BLOCK4/256,BLOCK5/256 331 | .dc.b BLOCK6/256,BLOCK7/256,BLOCK8/256 332 | .dc.b BLOCK9/256,BLOCKA/256,BLOCKB/256 333 | .dc.b BLOCKC/256,BLOCKD/256 334 | 335 | MSKLFTLO: .dc.b MASK0L&$FF,MASK1L&$FF,MASK2L&$FF 336 | .dc.b MASK3L&$FF,MASK4L&$FF,MASK5L&$FF 337 | .dc.b MASK6L&$FF,MASK7L&$FF,MASK8L&$FF 338 | .dc.b MASK9L&$FF,MASKAL&$FF,MASKBL&$FF 339 | .dc.b MASKCL&$FF,MASKDL&$FF 340 | 341 | MSKLFTHI: .dc.b MASK0L/256,MASK1L/256,MASK2L/256 342 | .dc.b MASK3L/256,MASK4L/256,MASK5L/256 343 | .dc.b MASK6L/256,MASK7L/256,MASK8L/256 344 | .dc.b MASK9L/256,MASKAL/256,MASKBL/256 345 | .dc.b MASKCL/256,MASKDL/256 346 | 347 | MSKMIDLO: .dc.b MASK0M&$FF,MASK1M&$FF,MASK2M&$FF,MASK3M&$FF 348 | .dc.b MASK4M&$FF,MASK5M&$FF 349 | .dc.b MASK6M&$FF,MASK7M&$FF,MASK8M&$FF,MASK9M&$FF 350 | .dc.b MASKAM&$FF,MASKBM&$FF 351 | .dc.b MASKCM&$FF,MASKDM&$FF 352 | 353 | MSKMIDHI: .dc.b MASK0M/256,MASK1M/256,MASK2M/256 354 | .dc.b MASK3M/256,MASK4M/256,MASK5M/256 355 | .dc.b MASK6M/256,MASK7M/256,MASK8M/256 356 | .dc.b MASK9M/256,MASKAM/256,MASKBM/256 357 | .dc.b MASKCM/256,MASKDM/256 358 | 359 | MSKRITLO: .dc.b MASK0R&$FF,MASK1R&$FF,MASK2R&$FF 360 | .dc.b MASK3R&$FF,MASK4R&$FF,MASK5R&$FF 361 | .dc.b MASK6R&$FF,MASK7R&$FF,MASK8R&$FF 362 | .dc.b MASK9R&$FF,MASKAR&$FF,MASKBR&$FF 363 | .dc.b MASKCR&$FF,MASKDR&$FF 364 | 365 | MSKRITHI: .dc.b MASK0R/256,MASK1R/256,MASK2R/256 366 | .dc.b MASK3R/256,MASK4R/256,MASK5R/256 367 | .dc.b MASK6R/256,MASK7R/256,MASK8R/256 368 | .dc.b MASK9R/256,MASKAR/256,MASKBR/256 369 | .dc.b MASKCR/256,MASKDR/256 370 | 371 | 372 | BLOCK0: 373 | Z0BAND0: .dc.b 54,56,58,24,26,24,24,24,28,24,36,24,24,24,112,212,184 374 | .dc.b 184,184,184,184,184,184,184,194,150,82,24,40,42,24,24,28 375 | Z0BAND1: .dc.b 54,56,58,24,24,24,24,24,40,42,40,38,38,24,84,136,212,184 376 | .dc.b 184,184,184,184,184,184,184,184,196,24,24,24,26,38,24 377 | Z0BAND2: .dc.b 54,56,58,24,24,26,24,24,40,24,24,24,24,28,24,24,208,184,184 378 | .dc.b 184,184,184,184,184,184,184,184,184,110,24,40,24,24 379 | Z0BAND3: .dc.b 54,56,58,24,40,24,24,84,136,190,76,24,24,24,24,24,24,24,74,114 380 | .dc.b 176,188,184,184,184,184,184,184,184,184,110,24,24 381 | Z0BAND4: .dc.b 54,56,58,24,24,24,24,28,96,198,150,82,24,24,26,60,62,64,24,24 382 | .dc.b 24,24,24,74,114,176,188,184,184,184,184,184,110 383 | Z0BAND5: .dc.b 54,56,58,24,24,40,42,38,24,24,24,40,24,24,30,24,24,24,66,66 384 | .dc.b 62,64,24,26,24,24,24,24,208,184,184,184,184 385 | Z0BAND6: .dc.b 54,56,58,24,24,24,24,24,40,42,24,24,24,24,36,24,24,24,24,24 386 | .dc.b 24,24,66,70,24,24,24,42,40,112,212,184,184 387 | 388 | MASK0L: .dc.b $FF 389 | .dc.b $FF 390 | .dc.b $FF 391 | .dc.b $FE 392 | .dc.b $FF 393 | .dc.b $FF 394 | .dc.b $FF 395 | 396 | MASK0M: .dc.b $FC 397 | .dc.b $FC 398 | .dc.b $FF 399 | .dc.b $1F 400 | .dc.b $0F 401 | .dc.b $FF 402 | .dc.b $FF 403 | 404 | MASK0R: .dc.b $00,$00,$00,$C0,$FF,$FF,$FF 405 | 406 | 407 | BLOCK1: 408 | Z1BAND0: .dc.b 54,56,58,30,24,28,24,26,24,24,42,90,92,142,144,212,184 409 | .dc.b 184,184,184,184,184,184,194,146,148,82,28,24,42,40,38,24 410 | Z1BAND1: .dc.b 54,56,58,24,38,90,92,80,80,142,144,186,186,210,204,188 411 | .dc.b 184,184,184,184,184,184,184,194,150,82,24,36,24,40,40,42,38 412 | Z1BAND2: .dc.b 54,56,58,24,28,42,130,212,184,184,184,184,184,194,150,82 413 | .dc.b 24,118,188,184,184,194,150,128,188,196,24,26,38,40,24,28,24 414 | Z1BAND3: .dc.b 54,56,58,24,28,24,24,112,212,184,184,184,194,150,86,88 415 | .dc.b 24,26,42,112,212,194,150,82,42,24,208,110,28,24,24,26,30 416 | Z1BAND4: .dc.b 54,56,58,24,24,42,24,26,38,208,184,184,194,150,82,24 417 | .dc.b 26,42,90,92,136,210,150,82,30,24,26,24,208,110,34,24,24 418 | Z1BAND5: .dc.b 54,56,58,24,24,30,24,24,24,26,24,208,184,184,116,24 419 | .dc.b 42,90,92,136,212,184,184,196,30,24,24,24,24,26,118,110,42 420 | Z1BAND6: .dc.b 54,56,58,24,26,42,24,28,42,40,24,24,28,208,184,184 421 | .dc.b 206,186,186,212,184,184,184,184,194,120,24,26,24,26,24,28,42 422 | 423 | MASK1L: .dc.b $FF 424 | .dc.b $F8 425 | .dc.b $FC 426 | .dc.b $FE 427 | .dc.b $FF 428 | .dc.b $FF 429 | .dc.b $FF 430 | 431 | MASK1M: .dc.b $E0 432 | .dc.b $00 433 | .dc.b $00 434 | .dc.b $00 435 | .dc.b $81 436 | .dc.b $E1 437 | .dc.b $F8 438 | 439 | MASK1R: .dc.b $00 440 | .dc.b $00 441 | .dc.b $80 442 | .dc.b $E0 443 | .dc.b $C0 444 | .dc.b $80 445 | .dc.b $00 446 | 447 | 448 | BLOCK2: 449 | Z2BAND0: .dc.b 54,56,58,24,26,24,24,24,24,90,92,80,80,142,144,184,184 450 | .dc.b 184,184,184,184,184,184,184,184,150,82,28,24,42,28,26,24 451 | Z2BAND1: .dc.b 54,56,58,24,90,92,80,80,142,144,212,184,184,184,184,184,184 452 | .dc.b 184,184,184,184,184,184,184,194,150,82,24,36,24,26,24,40 453 | Z2BAND2: .dc.b 54,56,58,28,102,104,160,114,176,204,146,148,138,174,184,184 454 | .dc.b 184,184,184,184,184,184,184,184,194,150,82,24,40,42,26,24,34 455 | Z2BAND3: .dc.b 54,56,58,24,98,100,88,24,40,42,24,34,24,84,136,212,184 456 | .dc.b 184,184,184,184,184,184,184,194,150,82,24,28,42,40,42,24 457 | 458 | MASK2L: .dc.b $FF 459 | .dc.b $F0 460 | .dc.b $F0 461 | .dc.b $F1 462 | 463 | MASK2M: .dc.b $80 464 | .dc.b $00 465 | .dc.b $00 466 | .dc.b $F8 467 | 468 | MASK2R: .dc.b $00,$00,$00,$00 469 | 470 | 471 | BLOCK3: 472 | Z3BAND0: .dc.b 54,56,58,24,26,24,66,68,62,64,24,24,84,80,140,184 473 | .dc.b 184,184,184,184,184,184,194,204,150,138,82,24,26,24,24,24,26 474 | Z3BAND1: .dc.b 54,56,58,24,26,24,28,24,40,24,66,70,24,112,212,184 475 | .dc.b 184,184,184,184,184,184,184,194,122,24,34,24,24,24,24,28,24 476 | Z3BAND2: .dc.b 54,56,58,24,28,24,24,24,24,42,38,40,24,84,136,212 477 | .dc.b 184,184,184,184,184,184,184,184,194,122,24,24,24,26,24,24,24 478 | 479 | MASK3L: .dc.b $FF 480 | .dc.b $FF 481 | .dc.b $FF 482 | 483 | MASK3M: .dc.b $F0 484 | .dc.b $F8 485 | .dc.b $F8 486 | 487 | MASK3R: .dc.b $00,$00,$00 488 | 489 | 490 | BLOCK4: 491 | Z4BAND0: .dc.b 54,56,58,24,24,24,40,24,24,90,92,80,80,142,144,184 492 | .dc.b 184,184,184,194,150,174,184,184,184,150,82,24,26,42,40,42,24 493 | Z4BAND1: .dc.b 54,56,58,24,24,24,24,24,24,112,186,212,184,184,184,184 494 | .dc.b 184,184,194,150,86,88,112,212,184,194,122,24,26,24,24,24,40 495 | Z4BAND2: .dc.b 54,56,58,24,24,24,26,24,24,24,24,208,184,184,184,184 496 | .dc.b 184,184,184,184,116,42,36,112,212,184,194,122,24,60,62,64,24 497 | Z4BAND3: .dc.b 54,56,58,60,62,64,26,30,24,26,28,24,24,208,184,184 498 | .dc.b 184,184,184,184,184,184,206,186,190,198,146,148,82,24,24,24,66 499 | 500 | MASK4L: .dc.b $FF 501 | .dc.b $FF 502 | .dc.b $FF 503 | .dc.b $FF 504 | 505 | MASK4M: .dc.b $80 506 | .dc.b $80 507 | .dc.b $E0 508 | .dc.b $F8 509 | 510 | MASK4R: .dc.b $00,$00,$06,$00 511 | 512 | 513 | BLOCK5: 514 | Z5BAND0: .dc.b 54,56,58,24,26,40,42,24,24,26,24,28,84,80,140,212 515 | .dc.b 184,184,184,184,184,184,184,184,184,194,122,24,26,24,30,24,24 516 | Z5BAND1: .dc.b 54,56,58,24,24,24,24,24,38,30,24,24,26,84,202,184 517 | .dc.b 184,184,184,184,184,184,184,194,146,148,86,88,30,24,24,24,24 518 | Z5BAND2: .dc.b 54,56,58,24,26,24,34,24,24,24,40,24,24,84,140,212 519 | .dc.b 184,184,184,184,184,184,184,184,194,122,24,26,24,38,40,42,40 520 | 521 | MASK5L: .dc.b $FF 522 | .dc.b $FF 523 | .dc.b $FF 524 | 525 | MASK5M: .dc.b $F0 526 | .dc.b $F8 527 | .dc.b $F8 528 | 529 | MASK5R: .dc.b $00,$00,$00 530 | 531 | 532 | BLOCK6: 533 | Z6BAND0: .dc.b 54,56,58,24,28,40,38,24,24,30,24,26,30,36,24,24 534 | .dc.b 26,24,24,24,32,28,24,40,24,24,24,24,90,92,136,212,184 535 | Z6BAND1: .dc.b 54,56,24,60,62,64,24,26,24,40,38,28,24,24,24,90 536 | .dc.b 92,80,80,80,80,80,80,142,144,186,186,186,186,186,212,184,184 537 | Z6BAND2: .dc.b 54,56,58,24,42,26,66,68,68,62,64,24,40,90,92,142 538 | .dc.b 144,212,184,184,184,184,184,184,184,184,184,184,184,184,194 539 | .dc.b 146,148 540 | Z6BAND3: .dc.b 54,56,58,24,42,40,24,26,28,66,72,72,70,84,136,212 541 | .dc.b 184,184,184,184,184,184,184,184,194,146,148,138,138,138,138,86 542 | .dc.b 88 543 | 544 | MASK6L: .dc.b $FF 545 | .dc.b $FF 546 | .dc.b $FF 547 | .dc.b $FF 548 | 549 | MASK6M: .dc.b $FF 550 | .dc.b $FE 551 | .dc.b $F8 552 | .dc.b $F8 553 | 554 | MASK6R: .dc.b $FF,$00,$00,$00 555 | 556 | 557 | BLOCK7: 558 | Z7BAND0: .dc.b 54,56,58,24,26,40,24,26,24,28,84,80,80,124,126,24 559 | .dc.b 26,24,24,36,24,26,24,40,42,24,90,92,80,142,144,212,184 560 | Z7BAND1: .dc.b 54,56,24,44,46,40,24,24,38,24,26,40,208,184,184,184 561 | .dc.b 206,180,182,124,126,24,24,90,92,80,142,144,212,194,146,148 562 | .dc.b 138 563 | Z7BAND2: .dc.b 54,56,58,24,24,48,50,52,24,24,24,40,24,112,212,184 564 | .dc.b 184,184,184,184,184,184,206,186,190,198,146,148,138,138,86,88 565 | .dc.b 24 566 | 567 | MASK7L: .dc.b $FF 568 | .dc.b $FF 569 | .dc.b $FF 570 | 571 | MASK7M: .dc.b $C1 572 | .dc.b $F0 573 | .dc.b $F8 574 | 575 | MASK7R: .dc.b $FF,$06,$00 576 | 577 | 578 | BLOCK8: 579 | Z8BAND0: .dc.b 54,56,58,24,24,26,24,28,24,30,24,24,30,24,26,24 580 | .dc.b 24,24,26,24,40,24,24,26,24,24,28,24,84,142,144,212,184 581 | Z8BAND1: .dc.b 54,56,58,84,136,186,186,190,76,24,24,24,26,24,24,28,24 582 | .dc.b 24,24,24,24,28,24,26,24,84,142,144,186,186,212,184,184 583 | Z8BAND2: .dc.b 54,56,84,142,144,212,194,150,86,88,24,26,24,30,24,24,24 584 | .dc.b 24,24,24,24,42,24,24,24,24,130,212,184,184,184,184,184 585 | Z8BAND3: .dc.b 54,56,58,96,198,204,146,148,82,24,42,24,24,24,24,24,60 586 | .dc.b 62,64,24,24,32,24,24,24,38,24,26,208,184,184,184,184 587 | Z8BAND4: .dc.b 54,56,58,24,24,24,34,24,24,38,24,24,24,40,24,24,40 588 | .dc.b 24,24,66,68,62,64,24,24,24,26,24,24,84,202,184,184 589 | Z8BAND5: .dc.b 54,56,58,24,24,26,24,24,26,40,24,24,32,24,24,24,38 590 | .dc.b 24,24,34,24,24,24,66,68,62,64,24,24,24,130,212,184 591 | Z8BAND6: .dc.b 54,56,58,24,24,36,24,24,40,24,24,30,24,24,24,24,24 592 | .dc.b 24,24,26,24,24,24,26,24,24,24,66,70,24,24,84,202 593 | 594 | MASK8L: .dc.b $FF 595 | .dc.b $E0 596 | .dc.b $C0 597 | .dc.b $E0 598 | .dc.b $FF 599 | .dc.b $FF 600 | .dc.b $FF 601 | 602 | MASK8M: .dc.b $FF 603 | .dc.b $7F 604 | .dc.b $3F 605 | .dc.b $7F 606 | .dc.b $FF 607 | .dc.b $FF 608 | .dc.b $FF 609 | 610 | MASK8R: .dc.b $FF,$FF,$FF,$FF,$FF,$FF,$FF 611 | 612 | 613 | BLOCK9: 614 | Z9BAND0: .dc.b 54,56,58,40,24,24,24,26,24,24,24,26,24,24,40,24 615 | .dc.b 24,24,26,24,24,26,24,24,24,24,24,30,24,84,136,212,184 616 | Z9BAND1: .dc.b 54,56,58,26,24,24,24,36,24,24,24,28,24,24,36,24,24,24,42 617 | .dc.b 24,24,24,24,24,28,24,26,24,28,84,136,212,184 618 | Z9BAND2: .dc.b 54,56,58,24,24,24,24,24,42,24,24,24,24,26,24,24,24,24,36,24 619 | .dc.b 24,26,24,24,24,24,24,24,24,84,136,212,184 620 | Z9BAND3: .dc.b 54,56,58,24,26,24,24,28,24,24,24,40,24,24,24,24,26,24,24,24 621 | .dc.b 24,24,26,28,24,24,24,24,30,94,152,212,184 622 | 623 | MASK9L: .dc.b $FF 624 | .dc.b $FF 625 | .dc.b $FF 626 | .dc.b $FF 627 | 628 | MASK9M: .dc.b $FF,$FF,$FF,$FF 629 | 630 | MASK9R: .dc.b $FF,$FF,$FF,$FF 631 | 632 | 633 | BLOCKA: 634 | ZABAND0: .dc.b 54,56,58,24,24,24,26,84,142,144,186,134,60,62,64,24,40,84 635 | .dc.b 136,190,76,24,26,24,24,26,24,24,24,24,130,212,184 636 | ZABAND1: .dc.b 54,56,58,24,44,46,24,24,130,212,194,204,150,82,24,66,68,62 637 | .dc.b 64,74,138,82,24,26,24,24,24,24,24,84,142,144,212 638 | ZABAND2: .dc.b 54,56,58,24,24,24,48,50,52,24,74,86,88,24,24,26,24,28 639 | .dc.b 30,66,70,24,24,26,24,24,24,28,24,84,136,212,184 640 | 641 | MASKAL: .dc.b $FE 642 | .dc.b $FF 643 | .dc.b $FF 644 | 645 | MASKAM: .dc.b $0F,$03,$C7 646 | 647 | MASKAR: .dc.b $87,$E3,$FF 648 | 649 | 650 | BLOCKB: 651 | ZBBAND0: .dc.b 54,56,58,26,24,24,28,24,24,38,24,24,24,26,40,30,24,24,24,24 652 | .dc.b 24,24,24,36,24,30,24,24,90,92,136,212,184 653 | ZBBAND1: .dc.b 54,56,58,24,26,24,24,24,38,24,24,90,92,162,200,200,168,78,24 654 | .dc.b 24,30,24,24,30,90,92,142,144,186,186,212,184,184 655 | ZBBAND2: .dc.b 54,56,58,24,24,26,24,24,24,26,24,102,104,160,86,88,24,24,74 656 | .dc.b 170,166,24,24,84,142,144,198,204,146,148,174,184,184 657 | ZBBAND3: .dc.b 54,56,58,40,24,24,38,24,24,24,24,98,100,88,24,24,28,24,36 658 | .dc.b 24,24,24,164,172,106,108,86,88,24,84,142,144,212 659 | 660 | MASKBL: .dc.b $FF 661 | .dc.b $FF 662 | .dc.b $FF 663 | .dc.b $FF 664 | 665 | MASKBM: .dc.b $FF,$E0,$E0,$E3 666 | 667 | MASKBR: .dc.b $FF,$3F,$C6,$FC 668 | 669 | 670 | BLOCKC: 671 | ZCBAND0: .dc.b 54,56,58,24,24,24,24,26,24,40,24,28,24,34,24,24,24,24,24 672 | .dc.b 30,26,24,130,132,78,24,40,42,24,84,136,212,184 673 | ZCBAND1: .dc.b 54,56,58,24,24,28,24,26,24,24,40,24,24,24,24,24,40,24,24 674 | .dc.b 40,26,24,80,154,198,204,158,24,26,94,152,212,184 675 | ZCBAND2: .dc.b 54,56,58,24,24,26,24,24,24,24,30,24,24,24,24,26,24,42,24 676 | .dc.b 42,24,24,24,24,74,82,24,42,38,84,136,212,184 677 | 678 | MASKCL: .dc.b $FF 679 | .dc.b $FF 680 | .dc.b $FF 681 | 682 | MASKCM: .dc.b $FF,$FF,$FF 683 | 684 | MASKCR: .dc.b $FC,$FC,$FF 685 | 686 | 687 | BLOCKD: 688 | ZDBAND0: .dc.b 54,56,58,24,24,24,40,24,24,26,24,28,24,24,28,24,26,24,24 689 | .dc.b 24,24,90,92,78,24,26,24,46,92,142,144,212,184 690 | ZDBAND1: .dc.b 54,56,58,24,26,24,24,24,24,42,42,24,24,30,24,26,24,24,24 691 | .dc.b 90,92,142,144,212,184,206,186,186,190,146,148,114,112 692 | ZDBAND2: .dc.b 54,56,58,90,92,142,144,186,186,190,76,24,40,38,84,80,80,80 693 | .dc.b 80,142,144,212,184,184,184,194,146,148,138,138,82,26,24 694 | ZDBAND3: .dc.b 54,56,58,24,130,212,184,194,146,148,86,88,24,26,24,130,212 695 | .dc.b 184,184,184,184,184,184,184,184,194,150,82,24,26,24,28,24 696 | ZDBAND4: .dc.b 54,56,58,24,24,26,156,204,150,82,24,24,28,24,24,84,136,212 697 | .dc.b 184,184,184,184,184,184,184,194,150,82,24,28,24,24,30 698 | ZDBAND5: .dc.b 54,56,58,24,26,24,36,30,24,24,30,24,24,24,24,24,96,198,188 699 | .dc.b 184,184,194,204,204,204,146,148,82,24,24,40,42,34 700 | ZDBAND6: .dc.b 54,56,58,24,40,24,24,24,28,38,24,24,42,40,26,32,24,24,26 701 | .dc.b 24,74,138,138,82,24,26,24,36,24,84,142,144,186 702 | 703 | MASKDL: .dc.b $FF 704 | .dc.b $FF 705 | .dc.b $E0 706 | .dc.b $F0 707 | .dc.b $FC 708 | .dc.b $FF 709 | .dc.b $FF 710 | 711 | MASKDM: .dc.b $FF,$FF,$1C,$0E,$3E,$FF,$FF 712 | 713 | MASKDR: .dc.b $F9,$E0,$00,$00,$00,$00,$F0 714 | 715 | ; END 716 | -------------------------------------------------------------------------------- /SSUBRS.S: -------------------------------------------------------------------------------- 1 | * SPHINX--SSUBRS.S 2 | * IF YOU DON'T KNOW WHERE TO PUT SOMETHING, PUT IT IN THIS MODULE 3 | 4 | ; ZERODEF 5 | 6 | ; RSEG CODEF 7 | 8 | *PROGRAMMERS BEWARE: THIS CODE IS OLD AND VERY UGLY! TAMPER AT YOUR OWN RISK 9 | * 10 | * ADDSCORE 11 | *ASSUMES LOW DIGIT IN TENS, MIDDLE DIGIT IN HUNDS AND HIGH DIGIT IN HUNTHOUS 12 | *ASSUMES PLAYER HAS 0 FOR PLAYER 0 AND A 1 FOR PLAYER 1. RESETS ALL VALUES TO 0 13 | *PRESERVES A,X & Y REGISTERS 14 | 15 | ADDSCORE: BIT AUTOPLAY ;IF AUTOPLAY THEN PUNT 16 | BMI ZPUNTSCR 17 | SED 18 | PHA ;ISN'T IT A WASTE FOR THIS TO SAVE A 19 | TXA ;AND THE REST OF THEM 20 | PHA 21 | TYA 22 | PHA 23 | LDX PLAYER 24 | LDY PLAYER ;VERY NON-OPTIMAL 25 | BEQ PLAYER1 26 | LDX #1 27 | LDY #PL2SCORE-PL1SCORE 28 | PLAYER1: 29 | lda PL1LIVES,X ;Add extra lives. 30 | clc 31 | ADC HUNTHOUS 32 | sta PL1LIVES,X 33 | ; 34 | LDA PL1SCORE+3,Y 35 | CLC 36 | ADC TENS 37 | STA PL1SCORE+3,Y 38 | LDA PL1SCORE+2,Y 39 | ADC HUNDS 40 | STA PL1SCORE+2,Y 41 | BCC NOINCLIV 42 | 43 | INC PL1LIVES,X 44 | 45 | PHP ;SAVE CARRY AND DECIMAL 46 | CLD ;CLEAR DECIMAL FOR TUNIN 47 | LDA #XLPOWER 48 | JSR TUNIN 49 | PLP ;RESTORE CARRY AND DECIMAL 50 | 51 | NOINCLIV: 52 | LDA PL1SCORE+1,Y 53 | ADC HUNTHOUS 54 | STA PL1SCORE+1,Y 55 | ; 56 | CLD 57 | LDA #0 58 | STA TENS 59 | STA HUNDS 60 | STA HUNTHOUS 61 | PLA 62 | TAY 63 | PLA 64 | TAX 65 | PLA 66 | ZPUNTSCR: RTS 67 | 68 | 69 | ; LDLIVES LOADS UP THE EXTRA LIVES DISPLAY 70 | 71 | LDLIVES: ;GOOD CANDIDATE FOR CRUNCHING 72 | LDX #9 ;MORE ROM INTENSIVE THAN NEED BE 73 | LDY PL1LIVES 74 | LDA PLAYER 75 | BEQ USELESS 76 | INY 77 | USELESS: DEY 78 | BEQ DIETCOKE 79 | BMI DIETCOKE 80 | LDA #XTRA&$FF 81 | CPY #7 ;6 IS MAXIMUM 82 | BCC PEPPER 83 | LDY #6 ;SEVEN LIVES MAX TO BE ON SCREEN 84 | PEPPER: STA PL1LVMAP,X 85 | DEX 86 | DEY 87 | BNE PEPPER 88 | CPX #$FF 89 | BEQ DEW 90 | DIETCOKE: LDA #BLANKCHR&$FF ;FILLS IN BLANKS 91 | STA PL1LVMAP,X 92 | DEX 93 | BPL DIETCOKE 94 | 95 | DEW: 96 | LDY #0 97 | LDX PL2LIVES ;Y IS ZERO 98 | LDA PLAYER 99 | BNE USELESS2 100 | INX 101 | USELESS2: DEX 102 | BEQ BARLHEAD 103 | BMI BARLHEAD 104 | LDA #XTRA&$FF 105 | CPX #7 106 | BCC MELOYELO 107 | LDX #6 108 | MELOYELO: STA PL2LVMAP,Y 109 | INY 110 | DEX 111 | BNE MELOYELO 112 | CPY #6 113 | BEQ WITEROCK 114 | BARLHEAD: LDA #BLANKCHR&$FF 115 | STA PL2LVMAP,Y 116 | INY 117 | CPY #6 118 | BNE BARLHEAD 119 | 120 | WITEROCK: RTS 121 | 122 | 123 | ; 124 | ; LDSCORE LOADS UP SCORE DISPLAY FOR SCORE BYTES 125 | 126 | LDSCORE: LDX #5 ;SIX DIGITS 127 | LDY #3 ;FOUR BYTES 128 | PEPSI: LDA PL1SCORE,Y ;GET LOW TWO DIGITS OF PL0'S SCORE 129 | PHA ;SAVE AWAY 130 | AND #$0F ;GET BOTTOM NIBBLE 131 | ; CLC ;MULTIPLY BY TWO TO GET NUM IN CHAR MAP 132 | ; ADC #NUMBERS ;MAY BE UNNECESSARY 133 | STA TEMP0,X ;STORE AWAY FOR LATER 134 | DEX 135 | PLA ;GET BACK LOW BYTE AND GET NEXT DIGIT 136 | AND #$F0 137 | LSR 138 | LSR 139 | LSR 140 | LSR 141 | ; CLC 142 | ; ADC #NUMBERS 143 | STA TEMP0,X 144 | DEX 145 | DEY 146 | BPL PEPSI ;DO UNTIL ALL 6 DIGITS (3 BYTES) ARE 147 | ;LOADED 148 | LDA #$69 ;SET OVERFLOW 149 | ADC #$69 150 | LDX #0 ;THIS ELIMINATES LEADING ZEROES 151 | LDA #BLANKCHR&$FF 152 | SPRITE: LDY TEMP0,X 153 | BVC NOMORE0 154 | CPY #NUMBERS&$FF 155 | BNE NOMORE0 156 | STA PL1MAP+4,X 157 | JMP NEXEX 158 | 159 | NOMORE0: TYA 160 | STA PL1MAP+4,X 161 | CLV 162 | 163 | NEXEX: INX 164 | CPX #6 165 | BNE SPRITE 166 | 167 | TYA 168 | BNE NOSTUF0 169 | 170 | LDA #0 ;IF ZERO IS LEAST SIGNIFICANT DIGIT 171 | STA PL1MAP+9 ;THEN DISPLAY IT 172 | 173 | NOSTUF0: LDX #0 ;PLAYER 1 NOW 174 | LDY #1 ;LEFT JUSTIFY AND BLANK LEADING ZEROES 175 | ZJM3: LDA PL2SCORE,Y 176 | PHA 177 | AND #$F0 178 | BNE REAL 179 | PLA 180 | AND #$0F 181 | BNE REAL2 182 | INY 183 | CPY #4 184 | BNE ZJM3 185 | LDA #NUMBERS&$FF ;ALL MUST BE ZERO 186 | STA PL2MAP 187 | RTS 188 | 189 | COKE: LDA PL2SCORE,Y ;MUST BE NONZERO NUMBER BY NOW 190 | PHA ;IN HIGH DIGIT OF BYTE 191 | AND #$F0 192 | REAL: LSR 193 | LSR 194 | LSR 195 | LSR 196 | ; CLC ;YEA ITS CLEAR 197 | ; ADC #NUMBERS 198 | STA PL2MAP,X 199 | INX 200 | PLA 201 | REAL2: AND #$0F ;MUST BE NONZERO NUMBER BY NOW IN 202 | ; ASL ;LOW DIGIT 203 | ; CLC 204 | ; ADC #NUMBERS 205 | STA PL2MAP,X 206 | INX 207 | CRUSH: INY 208 | CPY #4 209 | BNE COKE 210 | TAB: CPX #10 211 | BEQ ARECEE 212 | LDA #BLANKCHR&$FF 213 | STA PL2MAP,X 214 | INX 215 | BPL TAB ;ALWAYS POSITIVE 216 | 217 | ARECEE: RTS 218 | 219 | 220 | ****************************************** 221 | * SPHINX--SLOADER.S * 222 | ****************************************** 223 | LDDONE: LDA #0 ;STORE ZEROES AT END OF DLISTS 224 | TAX ;TRADE ROM FOR TIME 225 | LDY #1 ;TWO ZEROS EACH 226 | STA (ZNDLPOS,X) 227 | STA (ZNDLPOS),Y 228 | STA (ZNDLPOS+2,X) 229 | STA (ZNDLPOS+2),Y 230 | STA (ZNDLPOS+4,X) 231 | STA (ZNDLPOS+4),Y 232 | STA (ZNDLPOS+6,X) 233 | STA (ZNDLPOS+6),Y 234 | STA (ZNDLPOS+8,X) 235 | STA (ZNDLPOS+8),Y 236 | STA (ZNDLPOS+10,X) 237 | STA (ZNDLPOS+10),Y 238 | STA (ZNDLPOS+12,X) 239 | STA (ZNDLPOS+12),Y 240 | STA (ZNDLPOS+14,X) 241 | STA (ZNDLPOS+14),Y 242 | STA (ZNDLPOS+16,X) 243 | STA (ZNDLPOS+16),Y 244 | STA (ZNDLPOS+18,X) 245 | STA (ZNDLPOS+18),Y 246 | STA (ZNDLPOS+20,X) 247 | STA (ZNDLPOS+20),Y 248 | STA (ZNDLPOS+22,X) 249 | STA (ZNDLPOS+22),Y 250 | 251 | LDA #5 ;THIS SHOULD ADJUST HIGH BYTES OF 252 | STA ZNDLPOS+22 ;HEADERS IN LAST ZONE TO MAKE UP FOR 253 | LDA ZONEOFF ;SCROLLING 254 | ;THE 5 IN ZNDLPOS IS FOR CHAR MAP 255 | CLC 256 | ADC #1 257 | STA KTEMP10 ;THIS NUMBER REFLECTS ZONEOFF'S EFFECT 258 | LDY #2 ;Y IS 2 SO THAT IT FALLS INTO LOOP 259 | ;CORRECTLY 260 | HACKKKK: DEY ;Y = 1 FOR PALWIDTH 261 | LDA (ZNDLPOS+22),Y ;IF PW IS ZERO, END OF DISPLAY LIST 262 | BEQ THATSALL 263 | INY ;LOOK AT HIGH BYTE 264 | LDA (ZNDLPOS+22),Y 265 | CLC 266 | ADC KTEMP10 ;ADD THE MAGIC CONSTANT 267 | STA (ZNDLPOS+22),Y 268 | LDA ZNDLPOS+22 ;ADD FOUR TO ZNDLPOS TO GET NEXT HEADER 269 | CLC 270 | ADC #4 271 | STA ZNDLPOS+22 272 | BNE HACKKKK ;JMP 273 | 274 | THATSALL: 275 | LDA #0 ;THIS MEANS WE MADE IT THROUGH LOADER 276 | STA FUCKFLAG 277 | NOLODE: RTS 278 | 279 | LOADER: 280 | LDA #$80 ;THIS MEANS WE STARTED LOADER 281 | STA FUCKFLAG 282 | 283 | LDA #5 ;SET LOW BYTE OF DL POINTERS TO 5 284 | STA ZNDLPOS ;THIS ALLOCATES SPACE USED FOR CHAR MAP 285 | STA ZNDLPOS+2 286 | STA ZNDLPOS+4 287 | STA ZNDLPOS+6 288 | STA ZNDLPOS+8 289 | STA ZNDLPOS+10 290 | STA ZNDLPOS+12 291 | STA ZNDLPOS+14 292 | STA ZNDLPOS+16 293 | STA ZNDLPOS+18 294 | STA ZNDLPOS+20 295 | STA ZNDLPOS+22 296 | 297 | LDA ZONEOFF ;MAKE KTEMP10 RANGE FROM F1 TO 00 298 | SEC 299 | SBC #14 300 | STA KTEMP10 ;THIS IS LIKE NEGATIVE ZONEOFF 301 | LDY LOWEST ;FOLLOW LINKED LIST TO LOAD 302 | LDLOOP: BPL CYCLES 303 | JMP LDDONE 304 | 305 | CYCLES: CPY #ZREF0&$FF 306 | BCS LDNEXT ;PUNT OUT ON REF. POINTS 307 | 308 | LDA HPTBL,Y 309 | CMP #160 310 | BCC FINEHORZ 311 | CMP #$DC 312 | BCC LDNEXT 313 | 314 | FINEHORZ: 315 | LDA VPTBL,Y ;VERT POS, RANGING FROM F1 TO #SCRENBOT 316 | CMP #$F1 ;TALK TO JEM ABOUT THIS ONE GRRRR! 317 | BCS LOADY 318 | CMP #SCRENBOT 319 | BCS LDNEXT 320 | LOADY: SEC 321 | SBC KTEMP10 ;THIS IS LIKE ADDING 16 FOR ZONEOFF UV 322 | ;FF OR ADDING 1 FOR ZONEOFF OF E 323 | ;OR ANYTHING IN BETWEEN. 324 | STA KTEMP1 ;THE RESULT GOES INTO KTEMP1 325 | 326 | CMP #$F1 ;SEE IF TOP ZONE WOULD BE NEGATIVE 327 | BCS PUNTTOP ;IT TAKES THIS ON F1 THROUGH FF 328 | AND #$F0 ;CARRY SHOULD BE CLEAR 329 | 330 | ;IF SOMEHOW WE FALL THROUGH HERE THEN... 331 | 332 | LSR ;THIS PICKS OUT ZONE NUMBER X2 FOR 333 | LSR ;INDIRECT INDEXING BY X 334 | LSR 335 | TAX 336 | 337 | LDA ZNDLPOS,X 338 | CMP #75 ;IF 75 OR BIGGER, WE CAN'T FIT A 4 339 | BCS LDNEXT ;BYTE HEADER AND TWO ZEROS, SO PUNT 340 | 341 | LDA SLTBL,Y ;LOAD AND STORE LOWBYTE 342 | STA (ZNDLPOS,X) 343 | INC ZNDLPOS,X 344 | LDA PWTBL,Y ;LOAD AND STORE PALWIDTH 345 | STA (ZNDLPOS,X) 346 | INC ZNDLPOS,X 347 | LDA KTEMP1 ;THIS IS POSITIVE AND NONZERO 348 | ;SOOOO, WE ARE ALWAYS ADDING AT LEAST 1 TO THE HIGH BYTES 349 | AND #$F 350 | CLC ;CARRY SHOULD BE CLEAR FROM SHIFTS 351 | ADC SHTBL,Y ;ADD TO HIGH BYTE 352 | CMP SMTBL,Y ;COMPARE TO THE MAGIC NUMBER 353 | STA KTEMP1 ;REPLACE OLD KTEMP1 (THIS IS WHY WE 354 | ;AND WITH F ABOVE) I DON'T SEE WHY THIS 355 | ;WOULD EVER WORK 356 | STA (ZNDLPOS,X) ;STORE INTO HIGH BYTE 357 | INC ZNDLPOS,X 358 | LDA HPTBL,Y ;LOAD AND STORE HPOS 359 | STA (ZNDLPOS,X) 360 | INC ZNDLPOS,X 361 | 362 | DOBOTTOM: BCC LDNEXT ;IF HIGH BYTE IS LESS THAN MAGIC NUMBER 363 | INX ;THEN DON'T DO NEXT ZONE 364 | INX 365 | CPX #24 ;ALSO PUNT IF OFF BOTTOM OF SCREEN 366 | BCS LDNEXT ;FALLS IN NEXT ZONE ALSO? 367 | 368 | HEREOJ: 369 | LDA ZNDLPOS,X ;DON'T WANT TO FILL ZONE 370 | CMP #75 371 | BCS LDNEXT 372 | 373 | LDA SLTBL,Y ;CARRY IS CLEAR 374 | STA (ZNDLPOS,X) ;LOAD AND STORE LOW BYTE 375 | INC ZNDLPOS,X 376 | LDA PWTBL,Y ;LOAD AND STORE PALWIDTH 377 | STA (ZNDLPOS,X) 378 | INC ZNDLPOS,X 379 | LDA KTEMP1 ;LOAD IN LAST ZONES HIGH BYTE 380 | ; SEC ;CARRY IS CLEAR AND THEREFORE 381 | SBC #15 ;SUBTRACT 16-1 = 15 382 | STA (ZNDLPOS,X) ;SUBTRACT 16 FOR THIS ZONE'S HI BYTE 383 | INC ZNDLPOS,X 384 | LDA HPTBL,Y ;LOAD AND STORE H POS 385 | STA (ZNDLPOS,X) 386 | INC ZNDLPOS,X 387 | 388 | LDNEXT: LDA RLTBL,Y ;FOLLOW RIGHT LINK 389 | TAY 390 | JMP LDLOOP 391 | 392 | PUNTTOP: 393 | ;HERE THE OBJECT STARTS OFF SCREEN AND FALLS OVER INTO ZONE 0 394 | 395 | 396 | ;KTEMP1 IS IN A ALREADY 397 | ; LDA KTEMP1 ;GET NEW HIGH BYTE FROM KTEMP1 398 | AND #$F 399 | CLC 400 | ADC SHTBL,Y ;CHECK FOR OVERLAP INTO NEXT ZONE 401 | CMP SMTBL,Y ;COMPARE TO MAGIC NUMBER 402 | STA KTEMP1 ;STORE BACK TO KTEMP1 FOR NEXT ZONE 403 | BCC LDNEXT 404 | LDX0: LDX #0 ;ZONE FF WRAPS TO ZONE 0 405 | BEQ HEREOJ ;JMP 406 | 407 | ; END 408 | -------------------------------------------------------------------------------- /ZERODEF.S: -------------------------------------------------------------------------------- 1 | .title "Desert Falcon" 2 | .6502 3 | .list 4 | 5 | **** ZERODEF.S ZERO PAGE RAM MACRO ***** 6 | ******************************************************************************** 7 | * ZERO PAGE RAM 40-7F * 8 | ******************************************************************************** 9 | 10 | * GAME STATE AND ASSOCIATED RAM 11 | 12 | * LEVEL 1 RAM 13 | 14 | org $40 15 | ; 16 | HANDLER: .ds.b 1 ;HAS A 40 (JMP OPCODE) TO JMP TO DLIPT 17 | DLIPTR: .ds.b 2 ;AND E4 18 | TITLMENU: .ds.b 1 ;FLAGS FOR STATES ACTIVE LOW 19 | AUTOPLAY: .ds.b 1 ;ACTIVE HIGH 20 | USEME: .ds.b 1 ;FREE BYTE 21 | DMA: .ds.b 1 ;ACTIVE HIGH 22 | HSC: .ds.b 1 ;ACTIVE HIGH 23 | GAMEU: .ds.b 1 ;ACTIVE HIGH 24 | STATEPTR: .ds.b 2 ;STATEPTR FOR GAME STATE (i.e. PAUSE.. 25 | DIFCULTY: .ds.b 1 ;DIFFICULTY LEVEL 26 | PAUSE: .ds.b 1 ;PAUSE STATE FLAG 27 | NUMPLYRS: .ds.b 1 ;NUMBER OF PLAYERS 28 | RNDOM: .ds.b 1 ;RANDOM NUMBER 29 | RNDOM1: .ds.b 1 ;RANDOM NUMBER 30 | FUTEXP1: .ds.b 2 ;NO ROOM FOR FUTURE EXPANSION 31 | 32 | * LEVEL 2 RAM 33 | 34 | RACK: .ds.b 2 ;SPHINX LEVEL 35 | FREEZEP: .ds.b 1 ;FREEZE FRAMER VARIABLE ACTIVE HIGH 36 | PAWSTWID: .ds.b 1 ;PAUSE TWIDDLE FLAG 37 | GAMEOVR: .ds.b 1 ;ACTIVE HIGH 38 | NEWPLYR: .ds.b 1 ;SWITCHING BETWEEN PLAYERS FLAG 39 | PLAYER: .ds.b 1 ;WHICH PLAYER IS UP 0 >> 1, 1>> 2 40 | PL1SCORE: .ds.b 4 ;PLAYER 0'S SCORE 41 | PL2SCORE: .ds.b 4 ;PLAYER 1'S SCORE 42 | PL1LIVES: .ds.b 1 ;PLAYER 0'S LIVES 43 | PL2LIVES: .ds.b 1 ;PLAYER 1'S LIVES 44 | GRNDPC: .ds.b 1 ;GROUND OBJECTS PROGRAM COUNTER 45 | OBJTYP: .ds.b 1 ;OBJECT TYPE OF PATTERN 46 | DISTANCE: .ds.b 1 ;NUMBER OF COARSE SCROLLS 47 | HDIST: .ds.b 1 ;HIGH BYTE OF DISTANCE 48 | PGNUM: .ds.b 2 ;PLAYERS' NUMBER OF GLYPHS 49 | PGPOWER: .ds.b 2 ;PLAYERS' CURRENT POWER 50 | PGS1: .ds.b 3 ;PLAYER ONE'S HEIROS 51 | PGS2: .ds.b 3 ;PLAYER TWO'S HEIROS 52 | PSRA1: .ds.b 1 ;LAND PROGRAM RANDOMS 53 | PSRA2: .ds.b 1 54 | PSRB1: .ds.b 1 55 | PSRB2: .ds.b 1 56 | DUMPAREA: .ds.b 2 ;QUEUE VAR FOR MCP 57 | DIFIND: .ds.b 1 ;DIFICULTY LEVEL 58 | EATME: .ds.b 1 ;AVAILABLE BYTE 59 | TRVAL1: .ds.b 2 60 | TRVAL2: .ds.b 2 61 | XTRBNSTM: .ds.b 2 ;EXTRA BONUS TIME 62 | FUTEXP3: 63 | FUTEXP2: .ds.b 1 ;NO MORE ROOM FOR EXPANSION 64 | 65 | 66 | * LEVEL 3 RAM 67 | * TEMPS AND POINTERS 68 | 69 | org $80 70 | 71 | PTR0: .ds.b 2 72 | PTR1: .ds.b 2 73 | TEMP0: .ds.b 1 74 | COLPX: ;X PASSED TO COLLISION DETECTION 75 | TEMP1: .ds.b 1 76 | COLPY: ;Y PASSED TO COLLISION DETECTION 77 | TEMP2: .ds.b 1 78 | COLPZ: ;Z PASSED TO COLLISION DETECTION 79 | TEMP3: .ds.b 1 80 | TEMP4: .ds.b 1 81 | TEMP5: .ds.b 1 82 | TEMP6: .ds.b 1 83 | TEMP7: .ds.b 1 84 | TEMP8: .ds.b 1 85 | TEMP9: .ds.b 1 86 | TEMP10: .ds.b 1 ;JUST FOR PASSING DF 87 | TEMPX: .ds.b 1 88 | TEMPY: .ds.b 1 89 | 90 | 91 | org $91 92 | 93 | KTEMPX: .ds.b 1 ;TEMPX AND Y FOR INTERRUPT CODE 94 | KTEMPY: .ds.b 1 95 | KTEMP2: .ds.b 1 96 | KTEMP3: .ds.b 1 97 | KTEMP10: .ds.b 1 ;KERNEL TEMPORARY 98 | KPTR0: .ds.b 2 ;POINTERS FOR INTERRUPT CODE 99 | KPTR1: .ds.b 2 100 | KPTR: .ds.b 2 101 | 102 | JTEMP: .ds.b 1 ;WHAT THE FUCK 103 | 104 | * RANDOM BOB K. TEMPS WHAT CAN WE DO WITH THEM 105 | 106 | OTEMP1: .ds.b 1 ;BOBS TEMPS 107 | OTEMP2: .ds.b 1 108 | OTEMP3: .ds.b 1 109 | OTEMP4: .ds.b 1 110 | 111 | * RANDOM,BOGUS AND OTHERS 112 | 113 | ZONEOFF: .ds.b 1 ;OFFSET INTO 16 HIGH ZONE (FF-F) 114 | FRMCNT: .ds.b 1 ;FRAME COUNTER MOD 256 115 | OLDFRM: .ds.b 1 ;LAST FRAME'S FRAME COUNT 116 | SCRDELTA: .ds.b 1 ;DELTA VS NORMAL SCROLL 117 | JERKOFF: .ds.b 1 ;COUNTER FOR COARSE H SCROLL 118 | SCRATE: .ds.b 1 ;SCROLL RATE 119 | LASTSCRL: .ds.b 1 ;COUNTER FROM 0 TO SCRATE 120 | BIRDACNT: .ds.b 1 ;BIRD'S ANIMATION DELAY 121 | BIRDXCNT: .ds.b 1 ;BIRD'S X MOTION DELAY 122 | BIRDSTAT: .ds.b 1 ;BIRD'S STATUS (ANIMATION?) 123 | BLOCK: .ds.b 1 ;CURRENT BLOCK BEING SCROLLED ON SCREE 124 | BAND: .ds.b 1 ;CURRENT BAND IN BLOCK TO BE SCROLLED 125 | FIRECNT: .ds.b 1 ;FIRE BUTTON DELAY 126 | SHOTCNT: .ds.b 1 ;NUMBER OF SHOTS ON SCREEN (MAX IS 4) 127 | BLKCNT: .ds.b 1 ;BLOCK COUNT 128 | 129 | NBFLAG: .ds.b 1 ;FLAG THAT SAYS NEW BLOCK IS READY 130 | NEWBLK: .ds.b 1 ;NEW BLOCK NUMBER 131 | 132 | TENS: .ds.b 1 ;VALUES PASSED TO SCORE ROUTINE 133 | HUNDS: .ds.b 1 ;COULD BE TEMPS ALSO I BELIEVE 134 | HUNTHOUS: .ds.b 1 135 | 136 | ZNDLPOS: .ds.b 24 ;FIRST EMPTY BYTE IN EACH DISP. LIST 137 | LOWEST: .ds.b 1 ;START OF RLTBL 138 | 139 | MPTRL: ;ZERO PAGE TEMP(NOT GAMEPLAY) 140 | KTEMP0: .ds.b 1 ;TEMPS FOR INTERRUPT CODE 141 | MPTRH: ;ZERO PAGE TEMP(NOT GAMEPLAY) 142 | KTEMP1: .ds.b 1 ;KTEMP0 AND 1 MUST BE PAST $C0 143 | 144 | HIGHEST: .ds.b 1 ;OPPOSITE OF LOWEST.. END OF RLTBL 145 | SCROLLS: .ds.b 1 ;NUMBER OF SCROLLS THIS FRAME 146 | 147 | MAINCNT: .ds.b 1 ;MAIN LOOP COUNTER 148 | 149 | *FLEA STATE 150 | FLEASTAT: .ds.b 16 ;16 FLEA STATUS PRE/ON/OFF SCREEN 151 | FLEANIM: .ds.b 8 ;8 FLEA ANIMATION STATE 152 | NUMFLEAS: .ds.b 1 ;NUMBER OF FLEAS CURRENTLY AROUND 153 | FLSYSCLK: .ds.b 1 ;FLEA SYSTEM CLOCK 154 | 155 | BUFDEX: .ds.b 1 ;INDEX OF BUFFER WITH CHAR MAPS (0-11) 156 | 157 | BACKCOL: .ds.b 1 ;BACKGROUND FOR PLAY AREA 158 | D11CBASE: .ds.b 1 ;CHARBASE FOR BOTTOM ZONE OF SCREEN 159 | 160 | DLZDEST: .ds.b 2 ;POINTER TO DESTINATION OF DLI AT 161 | 162 | 163 | ; BEGINNING OF ZONE 11 164 | 165 | DCH0: .ds.b 1 ;ONE BYTE--DURATION CNTR CHAN. 0 166 | DCH1: .ds.b 1 ;ONE BYTE--DURATION CNTR CHAN. 1 167 | TUNNUM: .ds.b 1 ;ONE BYTE--TUNE NUM FOR CHAN. 0 168 | TUNNUM1: .ds.b 1 ;ONE BYTE--TUNE NUM FOR CHAN. 1 169 | TINDEX0: .ds.b 1 ;ONE BYTE--NOTE POINTER 0 170 | TINDEX1: .ds.b 1 ;ONE BYTE--NOTE POINTER 1 171 | CINDEX0: .ds.b 1 ;CONTROL INDEX0 172 | CINDEX1: .ds.b 1 ;CONTROL INDEX1 173 | VINDEX0: .ds.b 1 ;VOLUME INDEX0 174 | VINDEX1: .ds.b 1 ;VOLUME INDEX1 175 | TUNTEMP: .ds.b 1 ;COULD BE A TEMP 176 | 177 | RUNLOAD: ;TELLS LOADER TO RUN, SET BY MAINLOOP 178 | ENDRAM0: .ds.b 1 ;MOVE ME AS NEEDED YES SIR 179 | 180 | 181 | * OBJECT INDEX EQUATES 182 | 183 | ZBIRD EQU 0 ;0 BIRD 184 | ZSHOT1 EQU 1 ;1,2,3,4 SHOTS 185 | FLEADEX EQU 5 ;5,6,7,8,9,10,11,12 FLEAS 186 | UWEDEX EQU 13 ;13,14,15 UWES 187 | PYRSTART EQU 16 ;16-58 SCROLLING OBJS 188 | PYRSTOP EQU 58 189 | SPHXSHOT EQU 59 ;59,60,61,62 SPHINX SHOTS 190 | LASTPNT EQU 63 ;COMPARE VALUE FOR LAST COLLISIONS 191 | FLSHDEX EQU 63 ;63 - 70 FLEA SHADOWS 192 | ZSHAD EQU 71 ;71 BIRD SHADOW 193 | SHOTSHAD EQU 72 ;72,73,74,75 SHOT SHADOWS 194 | SPXSHTSH EQU 76 ;76,77,78,79 SPHNX SHT SHDS 195 | ZREF0 EQU 80 ;80 REFERENCE POINT 196 | ZREF1 EQU 81 ;81 REFERENCE POINT 197 | ZREF2 EQU 82 ;82 REFERENCE POINT 198 | ZREF3 EQU 83 ;83 REFERENCE POINT 199 | 200 | 201 | * RANDOM EQUATES 202 | SHOTDIFF EQU SHOTSHAD-ZSHOT1 ;DIFFERENCE BETWEEN SHOTS AND THEIR 203 | ;SHADOWS 204 | NUMBER EQU 126 ;96 + Z OF LOWER LEFT CORNER OF SCREEN 205 | DXADJ EQU -16 ;ADJUST THE RANGE OF DX'S 206 | LOWATER EQU 72 ;LOWEST WATER CHARACTER NUMBER 207 | SCRENBOT EQU 176 208 | 209 | * COLISION BOX ID'S 210 | HIEROCOL EQU 1 ; 1 THRU 8 - HIEROGLYPHS 211 | TREASCOL EQU 9 ; 9 THRU 11 - TREASURES 212 | PASSVCOL EQU 12 ; ALL PASSIVE OBJECTS 213 | MINICOL EQU 13 ; MINI SPHINX TARGET 214 | SPHNXCOL EQU 14 ; BIG SPHINX TARGET 215 | FLEACOL EQU 15 ; FLEAS 216 | UWECOL EQU 16 ; UWES 217 | SXSHTCOL EQU 17 ; SPHINX SHOTS 218 | FIRECOL EQU 18 ; FIRE 219 | 220 | ;CAN BE ANYTHING ELSE BUT 0 221 | 222 | *** SPHINX--SPROLOG.S 223 | 224 | 225 | * TIA REGISTERS 226 | INPT4R EQU $08 ;PLAYER 0, RIGHT BUTTON (PADDLE INPUT) 227 | INPT4L EQU $09 ;PLAYER 0, LEFT BUTTON (PADDLE INPUT) 228 | INPT5R EQU $0A ;PLAYER 1, RIGHT BUTTON (PADDLE INPUT) 229 | INPT5L EQU $0B ;PLAYER 1, LEFT BUTTON (PADDLE INPUT) 230 | 231 | INPT4 EQU $0C ;PLAYER 0 FIRE BUTTON 232 | INPT5 EQU $0D ;PLAYER 1 FIRE BUTTON 233 | AUDC0 EQU $15 ;BITS 3210 AUDIO CONTROL 0 234 | AUDC1 EQU $16 ;BITS 3210 AUDIO CONTROL 1 235 | AUDF0 EQU $17 ;BITS 3210 AUDIO FREQUENCY 0 236 | AUDF1 EQU $18 ;BITS 3210 AUDIO FREQUENCY 1 237 | AUDV0 EQU $19 ;BITS 3210 AUDIO VOLUME 0 238 | AUDV1 EQU $1A ;BITS 3210 AUDIO VOLUME 1 239 | 240 | 241 | * MARIA REGISTERS 242 | BACKGRND EQU $20 ;BACKGROUND COLOR RW 243 | P0C1 EQU $21 ;PALETTE ZERO COLOR ONE RW 244 | P0C2 EQU $22 ;PALETTE ZERO COLOR TWO RW 245 | P0C3 EQU $23 ;PALETTE ZERO COLOR THREE RW 246 | WSYNC EQU $24 ;FAST MARIA WSYNC STROBE 247 | P1C1 EQU $25 ;PALETTE ONE COLOR ONE RW 248 | P1C2 EQU $26 ;PALETTE ONE COLOR TWO RW 249 | P1C3 EQU $27 ;PALETTE ONE COLOR THREE RW 250 | MSTAT EQU $28 ;BIT 6 IN VBLANK, BIT ? IN DISPLAY RO 251 | P2C1 EQU $29 ;PALETTE TWO COLOR ONE RW 252 | P2C2 EQU $2A ;PALETTE TWO COLOR TWO RW 253 | P2C3 EQU $2B ;PALETTE TWO COLOR THREE RW 254 | DPPH EQU $2C ;DISPLAY LIST POINTER HIGH WO 255 | P3C1 EQU $2D ;PALETTE THREE COLOR ONE RW 256 | P3C2 EQU $2E ;PALETTE THREE COLOR TWO RW 257 | P3C3 EQU $2F ;PALETTE THREE COLOR THREE RW 258 | DPPL EQU $30 ;DISPLAY LIST POINTER LOW WO 259 | P4C1 EQU $31 ;PALETTE FOUR COLOR ONE RW 260 | P4C2 EQU $32 ;PALETTE FOUR COLOR TWO RW 261 | P4C3 EQU $33 ;PALETTE FOUR COLOR THREE RW 262 | 263 | CHARBASE EQU $34 264 | 265 | P5C1 EQU $35 ;PALETTE FIVE COLOR ONE RW 266 | P5C2 EQU $36 ;PALETTE FIVE COLOR TWO RW 267 | P5C3 EQU $37 ;PALETTE FIVE COLOR THREE RW 268 | OFFSET EQU $38 ;GRAPHICS HIGH POINTER OFFSET RW 269 | P6C1 EQU $39 ;PALETTE SIX COLOR ONE RW 270 | P6C2 EQU $3A ;PALETTE SIX COLOR TWO RW 271 | P6C3 EQU $3B ;PALETTE SIX COLOR THREE RW 272 | CTRL EQU $3C ;MAGIC WO 273 | P7C1 EQU $3D ;PALETTE SEVEN COLOR ONE RW 274 | P7C2 EQU $3E ;PALETTE SEVEN COLOR TWO RW 275 | P7C3 EQU $3F ;PALETTE SEVEN COLOR THREE RW 276 | 277 | 278 | * 6532 TIMERS AND PORTS 279 | SWCHA EQU $280 ;PO, P1 JOYSTICKS 280 | ; BIT 7 PLAYER 0 EAST IF CLEAR 281 | ; BIT 6 WEST 282 | ; BIT 5 SOUTH 283 | ; BIT 4 NORTH 284 | ; BIT 3 PLAYER 1 EAST IF CLEAR 285 | ; BIT 2 WEST 286 | ; BIT 1 SOUTH 287 | ; BIT 0 NORTH 288 | 289 | SWCHB EQU $282 ;CONSOLE SWITCHES 290 | ; BIT 7 PLAYER 1 DIFFICULTY A IF SET B IF CLEAR 291 | ; BIT 6 PLAYER 0 DIFFICULTY A IF SET B IF CLEAR 292 | ; BIT 3 BLACK + WHITE/COLOR COLOR WHEN SET 293 | ; BIT 1 GAME SELECT CLEAR WHEN PRESSED 294 | ; BIT 0 GAME RESET CLEAR WHEN PRESSED 295 | 296 | CTLSWA EQU $281 297 | CTLSWB EQU $283 298 | INTIM EQU $284 ;INTERVAL TIMER IN 299 | INTIMI EQU $28C ;INTERRUPT INTERVAL TIMER IN 300 | TIM8T EQU $295 ;TIMER 8T WRITE OUT 301 | TIM64T EQU $296 ;TIMER 64T WRITE OUT 302 | TIM64TI EQU $29E ;INTERUPT TIMER 64T 303 | 304 | * HIGH SCORE EQUATES 305 | HSCSTAT EQU $3FF7 306 | HSCATRCT EQU $3FFA 307 | HSCENTER EQU $3FFD 308 | HSCSETRS EQU $3FEB 309 | DFNMADAD EQU PTR0 310 | 311 | 312 | 313 | ; RAM equates: 314 | 315 | include "SDEF.S" 316 | 317 | 318 | ; Code from $5000-$7FFF: 319 | 320 | include "SHSC.S" 321 | include "SMAGIC.S" 322 | include "STUNES.S" 323 | include "SMCP.S" 324 | include "PATCH.S" 325 | 326 | ; Code from $8000-$8FFF: 327 | 328 | include "SGRAPH8.S" 329 | 330 | 331 | ; Code from $9000-$9FFF: 332 | 333 | include "SINIT.S" 334 | include "SKERNEL.S" 335 | include "SOBJ.S" 336 | 337 | 338 | ; Code from $A000-$AFFF: 339 | 340 | include "SGRAPHA.S" 341 | 342 | 343 | ; Code from $B000-$BFFF: 344 | 345 | include "SGNDOBJ.S" 346 | 347 | 348 | ; Code from $C000-$CFFF: 349 | 350 | include "SGRAPHC.S" 351 | 352 | 353 | ; Code from $D000-$DFFF: 354 | 355 | include "SCOLON.S" 356 | include "SSCROLL.S" 357 | 358 | 359 | ; Code from $E000-$EFFF: 360 | 361 | include "SGAME.S" 362 | 363 | 364 | ; Code from $F000-$FFFF: 365 | 366 | include "SNILE.S" 367 | include "SSUBRS.S" 368 | include "SSCROBJ.S" 369 | include "SPHINX.S" 370 | 371 | 372 | --------------------------------------------------------------------------------