------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm LEVEL 1 PASS 3 1 10000 ???? ; MACRO.H 2 10000 ???? 3 10000 ???? ; Based on the 2600 macro.h file. 4 10000 ???? ; Macros irrelevant to the 7800 have been removed, and the sleep macro 5 10000 ???? ; has been adapted to give accurate results on the 7800. 6 10000 ???? 7 10000 ???? ; Version 1.0 2019/12/11 (based on the 2600 Version 1.05, 13/NOVEMBER/2003) 8 10000 ???? 9 10000 ???? ; Available macros... 10 10000 ???? ; SLEEP n - sleep for n cycles 11 10000 ???? ; SET_POINTER - load a 16-bit absolute to a 16-bit variable 12 10000 ???? 13 10000 ???? ;------------------------------------------------------------------------------- 14 10000 ???? ; SLEEP duration 15 10000 ???? ; Original author: Thomas Jentzsch 16 10000 ???? ; Inserts code which takes the specified number of cycles to execute. This is 17 10000 ???? ; useful for code where precise timing is required. 18 10000 ???? ; ILLEGAL-OPCODE VERSION DOES NOT AFFECT FLAGS OR REGISTERS. 19 10000 ???? ; LEGAL OPCODE VERSION MAY AFFECT FLAGS 20 10000 ???? ; Uses illegal opcode (DASM 2.20.01 onwards). 21 10000 ???? 22 10000 ???? MAC sleep 23 10000 ???? .CYCLES SET {1} 24 10000 ???? 25 10000 ???? IF .CYCLES < 2 26 10000 ???? ECHO "MACRO ERROR: 'SLEEP': Duration must be > 1" 27 10000 ???? ERR 28 10000 ???? ENDIF 29 10000 ???? 30 10000 ???? IF .CYCLES & 1 31 10000 ???? IFNCONST NO_ILLEGAL_OPCODES 32 10000 ???? nop $80 33 10000 ???? ELSE 34 10000 ???? bit $80 35 10000 ???? ENDIF 36 10000 ???? .CYCLES SET .CYCLES - 3 37 10000 ???? ENDIF 38 10000 ???? 39 10000 ???? REPEAT .CYCLES / 2 40 10000 ???? nop 41 10000 ???? REPEND 42 10000 ???? ENDM ;usage: SLEEP n (n>1) 43 10000 ???? 44 10000 ???? ;------------------------------------------------------- 45 10000 ???? ; SET_POINTER 46 10000 ???? ; Original author: Manuel Rotschkar 47 10000 ???? ; 48 10000 ???? ; Sets a 2 byte RAM pointer to an absolute address. 49 10000 ???? ; 50 10000 ???? ; Usage: SET_POINTER pointer, address 51 10000 ???? ; Example: SET_POINTER SpritePTR, SpriteData 52 10000 ???? ; 53 10000 ???? ; Note: Alters the accumulator, NZ flags 54 10000 ???? ; IN 1: 2 byte RAM location reserved for pointer 55 10000 ???? ; IN 2: absolute address 56 10000 ???? 57 10000 ???? MAC set_pointer 58 10000 ???? .POINTER SET {1} 59 10000 ???? .ADDRESS SET {2} 60 10000 ???? 61 10000 ???? LDA #<.ADDRESS ; Get Lowbyte of Address 62 10000 ???? STA .POINTER ; Store in pointer 63 10000 ???? LDA #>.ADDRESS ; Get Hibyte of Address 64 10000 ???? STA .POINTER+1 ; Store in pointer+1 65 10000 ???? 66 10000 ???? ENDM 67 10000 ???? 68 10000 ???? ; EOF 69 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 70 10000 ???? 71 10000 ???? ; 7800MACRO.H 72 10000 ???? 73 10000 ???? ;------------------------------------------------------- 74 10000 ???? ; BOXCOLLISIONCHECK 75 10000 ???? ; author: Mike Saarna 76 10000 ???? ; 77 10000 ???? ; A general bounding box collision check. compares 2 rectangles of differing size 78 10000 ???? ; and shape for overlap. Carry is set for collision detected, clear for none. 79 10000 ???? ; 80 10000 ???? ; Usage: BOXCOLLISIONCHECK x1var,y1var,w1var,h1var,x2var,y2var,w2var,h2var 81 10000 ???? ; 82 10000 ???? 83 10000 ???? MAC boxcollisioncheck 84 10000 ???? .boxx1 SET {1} 85 10000 ???? .boxy1 SET {2} 86 10000 ???? .boxw1 SET {3} 87 10000 ???? .boxh1 SET {4} 88 10000 ???? .boxx2 SET {5} 89 10000 ???? .boxy2 SET {6} 90 10000 ???? .boxw2 SET {7} 91 10000 ???? .boxh2 SET {8} 92 10000 ???? 93 10000 ???? .DoXCollisionCheck 94 10000 ???? lda .boxx1 ;3 95 10000 ???? cmp .boxx2 ;2 96 10000 ???? bcs .X1isbiggerthanX2 ;2/3 97 10000 ???? .X2isbiggerthanX1 98 10000 ???? adc #.boxw1 ;2 99 10000 ???? cmp .boxx2 ;3 100 10000 ???? bcs .DoYCollisionCheck ;3/2 101 10000 ???? bcc .noboxcollision ;3 102 10000 ???? .X1isbiggerthanX2 103 10000 ???? clc ;2 104 10000 ???? sbc #.boxw2 ;2 105 10000 ???? cmp .boxx2 ;3 106 10000 ???? bcs .noboxcollision ;3/2 107 10000 ???? .DoYCollisionCheck 108 10000 ???? lda .boxy1 ;3 109 10000 ???? cmp .boxy2 ;3 110 10000 ???? bcs .Y1isbiggerthanY2 ;3/2 111 10000 ???? .Y2isbiggerthanY1 112 10000 ???? adc #.boxh1 ;2 113 10000 ???? cmp .boxy2 ;3 114 10000 ???? jmp .checkdone ;6 115 10000 ???? .Y1isbiggerthanY2 116 10000 ???? clc ;2 117 10000 ???? sbc #.boxh2 ;2 118 10000 ???? cmp .boxy2 ;3 119 10000 ???? bcs .noboxcollision ;3/2 120 10000 ???? .boxcollision 121 10000 ???? sec ;2 122 10000 ???? .byte $24 ; hardcoded "BIT [clc opcode]", used to skip over the following clc 123 10000 ???? .noboxcollision 124 10000 ???? clc ;2 125 10000 ???? .checkdone 126 10000 ???? 127 10000 ???? ENDM 128 10000 ???? 129 10000 ???? MAC median3 130 10000 ???? 131 10000 ???? ; A median filter (for smoothing paddle jitter) 132 10000 ???? ; this macro takes the current paddle value, compares it to historic 133 10000 ???? ; values, and replaces the current paddle value with the median. 134 10000 ???? ; 135 10000 ???? ; called as: MEDIAN3 STORAGE CURRENT 136 10000 ???? ; where STORAGE points to 3 consecutive bytes of memory. The first 2 137 10000 ???? ; must be dedicated to this MEDIAN filter. The last 1 is a temp. 138 10000 ???? ; where CURRENT is memory holding the new value you wish to compare to 139 10000 ???? ; the previous values, and update with the median value. 140 10000 ???? ; 141 10000 ???? ; returns: CURRENT (modified to contain median value) 142 10000 ???? ; 143 10000 ???? ; author: Mike Saarna (aka RevEng) 144 10000 ???? 145 10000 ???? .MedianBytes SET {1} 146 10000 ???? .NewValue SET {2} 147 10000 ???? 148 10000 ???? lda #0 149 10000 ???? ldy .NewValue 150 10000 ???? sty .MedianBytes+2 ; put the new value in the most "recent" slot 151 10000 ???? 152 10000 ???? ; build an index from relative size comparisons between our 3 values. 153 10000 ???? cpy .MedianBytes 154 10000 ???? rol 155 10000 ???? cpy .MedianBytes+1 156 10000 ???? rol 157 10000 ???? ldy .MedianBytes 158 10000 ???? cpy .MedianBytes+1 159 10000 ???? rol 160 10000 ???? tay 161 10000 ???? 162 10000 ???? ldx MedianOrderLUT,y ; convert the size-comparison index to an index to the median value 163 10000 ???? lda .MedianBytes,x 164 10000 ???? sta .NewValue ; we replace the new value memory with the median value 165 10000 ???? 166 10000 ???? ; then shift values from "newer" bytes to "older" bytes, leaving the 167 10000 ???? ; newest byte (.MedianBytes+2) empty for next time. 168 10000 ???? lda .MedianBytes+1 169 10000 ???? sta .MedianBytes 170 10000 ???? lda .MedianBytes+2 171 10000 ???? sta .MedianBytes+1 172 10000 ???? ifnconst MedianOrderLUT 173 10000 ???? jmp MedianOrderLUTend 174 10000 ???? MedianOrderLUT ; converts our "comparison index" to an index to the median value 175 10000 ???? .byte 0 ; 0 B2 < B0 < B1 176 10000 ???? .byte 1 ; 1 B2 < B1 < B0 177 10000 ???? .byte 2 ; 2 impossible 178 10000 ???? .byte 2 ; 3 B1 < B2 < B0 179 10000 ???? .byte 2 ; 4 B0 < B2 < B1 180 10000 ???? .byte 2 ; 5 impossible 181 10000 ???? .byte 1 ; 6 B0 < B1 < B2 182 10000 ???? .byte 0 ; 7 B1 < B0 < B2 183 10000 ???? MedianOrderLUTend 184 10000 ???? endif 185 10000 ???? ENDM 186 10000 ???? 187 10000 ???? MAC plotsprite 188 10000 ???? 189 10000 ???? ; A macro version of the plotsprite command. 190 10000 ???? ; This trades off rom space for speed. 191 10000 ???? ; It also doesn't check if the visible screen is displayed or not. 192 10000 ???? ; It has no training wheels. It is all rusty sharp edges. 193 10000 ???? 194 10000 ???? .GFXLabel SET {1} 195 10000 ???? .Palette SET {2} ; constant 196 10000 ???? .SpriteX SET {3} ; variable 197 10000 ???? .SpriteY SET {4} ; variable 198 10000 ???? .ByteOffset SET {5} ; variable 199 10000 ???? 200 10000 ???? lda .SpriteY 201 10000 ???? lsr 202 10000 ???? lsr 203 10000 ???? asr #%11111110 ; ensure carry is clear 204 10000 ???? if WZONEHEIGHT = 16 205 10000 ???? asr #%11111110 ; ensure carry is clear 206 10000 ???? endif 207 10000 ???? 208 10000 ???? tax 209 10000 ???? 210 10000 ???? lda DLPOINTL,x ; setup DL pointer for this zone 211 10000 ???? sta dlpnt 212 10000 ???? lda DLPOINTH,x ; setup DL pointer for this zone 213 10000 ???? sta dlpnt+1 214 10000 ???? 215 10000 ???? ldy dlend,x ; find the next new object position in this zone 216 10000 ???? 217 10000 ???? lda .ByteOffset 218 10000 ???? if {1}_width = 2 219 10000 ???? asl 220 10000 ???? endif 221 10000 ???? if {1}_width = 3 222 10000 ???? asl 223 10000 ???? adc .ByteOffset 224 10000 ???? endif 225 10000 ???? if {1}_width = 4 226 10000 ???? asl 227 10000 ???? asl 228 10000 ???? endif 229 10000 ???? if {1}_width = 5 230 10000 ???? asl 231 10000 ???? asl 232 10000 ???? adc .ByteOffset 233 10000 ???? endif 234 10000 ???? if {1}_width = 6 235 10000 ???? asl 236 10000 ???? adc .ByteOffset 237 10000 ???? asl 238 10000 ???? endif 239 10000 ???? if {1}_width = 7 240 10000 ???? asl 241 10000 ???? adc .ByteOffset 242 10000 ???? asl 243 10000 ???? adc .ByteOffset 244 10000 ???? endif 245 10000 ???? if {1}_width = 8 246 10000 ???? asl 247 10000 ???? asl 248 10000 ???? asl 249 10000 ???? endif 250 10000 ???? if {1}_width = 9 251 10000 ???? asl 252 10000 ???? asl 253 10000 ???? asl 254 10000 ???? adc .ByteOffset 255 10000 ???? endif 256 10000 ???? if {1}_width = 10 257 10000 ???? asl 258 10000 ???? asl 259 10000 ???? adc .ByteOffset 260 10000 ???? asl 261 10000 ???? endif 262 10000 ???? if {1}_width = 11 263 10000 ???? asl 264 10000 ???? asl 265 10000 ???? adc .ByteOffset 266 10000 ???? asl 267 10000 ???? adc .ByteOffset 268 10000 ???? endif 269 10000 ???? if {1}_width = 12 270 10000 ???? asl 271 10000 ???? adc .ByteOffset 272 10000 ???? asl 273 10000 ???? asl 274 10000 ???? endif 275 10000 ???? if {1}_width = 13 276 10000 ???? asl 277 10000 ???? adc .ByteOffset 278 10000 ???? asl 279 10000 ???? asl 280 10000 ???? adc .ByteOffset 281 10000 ???? endif 282 10000 ???? if {1}_width = 14 283 10000 ???? asl 284 10000 ???? adc .ByteOffset 285 10000 ???? asl 286 10000 ???? adc .ByteOffset 287 10000 ???? asl 288 10000 ???? endif 289 10000 ???? 290 10000 ???? adc #<.GFXLabel ; carry is clear via previous asl or asr 291 10000 ???? sta (dlpnt),y ; #1 - low byte object address 292 10000 ???? 293 10000 ???? iny 294 10000 ???? 295 10000 ???? lda #({1}_mode | %01000000) 296 10000 ???? sta (dlpnt),y ; #2 - graphics mode , indirect 297 10000 ???? 298 10000 ???? iny 299 10000 ???? 300 10000 ???? lda .SpriteY 301 10000 ???? and #(WZONEHEIGHT - 1) 302 10000 ???? cmp #1 ; clear carry if our sprite is just in this zone 303 10000 ???? ora #>.GFXLabel 304 10000 ???? sta (dlpnt),y ; #3 - hi byte object address 305 10000 ???? 306 10000 ???? iny 307 10000 ???? 308 10000 ???? lda #({1}_width_twoscompliment | (.Palette * 32)) 309 10000 ???? sta (dlpnt),y ; #4 - palette|width 310 10000 ???? 311 10000 ???? iny 312 10000 ???? 313 10000 ???? lda .SpriteX 314 10000 ???? sta (dlpnt),y ; #5 - x object position 315 10000 ???? 316 10000 ???? iny 317 10000 ???? sty dlend,x 318 10000 ???? 319 10000 ???? ifconst ALWAYSTERMINATE 320 10000 ???? iny 321 10000 ???? lda #0 322 10000 ???? sta (dlpnt),y 323 10000 ???? endif 324 10000 ???? 325 10000 ???? bcc .PLOTSPRITEend 326 10000 ???? 327 10000 ???? inx ; next zone 328 10000 ???? 329 10000 ???? lda DLPOINTL,x ; setup DL pointer for this zone 330 10000 ???? sta dlpnt 331 10000 ???? lda DLPOINTH,x ; setup DL pointer for this zone 332 10000 ???? sta dlpnt+1 333 10000 ???? 334 10000 ???? ldy dlend,x ; find the next new object position in this zone 335 10000 ???? 336 10000 ???? lda .ByteOffset 337 10000 ???? if {1}_width = 1 338 10000 ???? clc 339 10000 ???? endif 340 10000 ???? if {1}_width = 2 341 10000 ???? asl ; carry clear 342 10000 ???? endif 343 10000 ???? if {1}_width = 3 344 10000 ???? asl ; carry clear 345 10000 ???? adc .ByteOffset 346 10000 ???? endif 347 10000 ???? if {1}_width = 4 348 10000 ???? asl ; carry clear 349 10000 ???? asl 350 10000 ???? endif 351 10000 ???? if {1}_width = 5 352 10000 ???? asl ; carry clear 353 10000 ???? asl 354 10000 ???? adc .ByteOffset 355 10000 ???? endif 356 10000 ???? if {1}_width = 6 357 10000 ???? asl ; carry clear 358 10000 ???? adc .ByteOffset 359 10000 ???? asl 360 10000 ???? endif 361 10000 ???? if {1}_width = 7 362 10000 ???? asl ; carry clear 363 10000 ???? adc .ByteOffset 364 10000 ???? asl 365 10000 ???? endif 366 10000 ???? if {1}_width = 8 367 10000 ???? asl ; carry clear 368 10000 ???? asl 369 10000 ???? asl 370 10000 ???? endif 371 10000 ???? if {1}_width = 9 372 10000 ???? asl ; carry clear 373 10000 ???? asl 374 10000 ???? asl 375 10000 ???? adc .ByteOffset 376 10000 ???? endif 377 10000 ???? if {1}_width = 10 378 10000 ???? asl ; carry clear 379 10000 ???? asl 380 10000 ???? adc .ByteOffset 381 10000 ???? asl 382 10000 ???? endif 383 10000 ???? if {1}_width = 11 384 10000 ???? asl ; carry clear 385 10000 ???? asl 386 10000 ???? adc .ByteOffset 387 10000 ???? asl 388 10000 ???? adc .ByteOffset 389 10000 ???? endif 390 10000 ???? if {1}_width = 12 391 10000 ???? asl ; carry clear 392 10000 ???? adc .ByteOffset 393 10000 ???? asl 394 10000 ???? asl 395 10000 ???? endif 396 10000 ???? if {1}_width = 13 397 10000 ???? asl ; carry clear 398 10000 ???? adc .ByteOffset 399 10000 ???? asl 400 10000 ???? asl 401 10000 ???? adc .ByteOffset 402 10000 ???? endif 403 10000 ???? if {1}_width = 14 404 10000 ???? asl ; carry clear 405 10000 ???? adc .ByteOffset 406 10000 ???? asl 407 10000 ???? adc .ByteOffset 408 10000 ???? asl 409 10000 ???? endif 410 10000 ???? 411 10000 ???? adc #<.GFXLabel 412 10000 ???? sta (dlpnt),y ; #1 - low byte object address 413 10000 ???? 414 10000 ???? iny 415 10000 ???? 416 10000 ???? lda #({1}_mode | %01000000) 417 10000 ???? sta (dlpnt),y ; #2 - graphics mode , indirect 418 10000 ???? 419 10000 ???? iny 420 10000 ???? 421 10000 ???? lda .SpriteY 422 10000 ???? and #(WZONEHEIGHT - 1) 423 10000 ???? ora #>(.GFXLabel - (WZONEHEIGHT * 256)) ; start in the dma hole 424 10000 ???? sta (dlpnt),y ; #3 - hi byte object address 425 10000 ???? 426 10000 ???? iny 427 10000 ???? 428 10000 ???? lda #({1}_width_twoscompliment | (.Palette * 32)) 429 10000 ???? sta (dlpnt),y ; #4 - palette|width 430 10000 ???? 431 10000 ???? iny 432 10000 ???? 433 10000 ???? lda .SpriteX 434 10000 ???? sta (dlpnt),y ; #5 - x object position 435 10000 ???? 436 10000 ???? iny 437 10000 ???? sty dlend,x 438 10000 ???? 439 10000 ???? ifconst ALWAYSTERMINATE 440 10000 ???? iny 441 10000 ???? lda #0 442 10000 ???? sta (dlpnt),y 443 10000 ???? endif 444 10000 ???? 445 10000 ???? .PLOTSPRITEend 446 10000 ???? ENDM 447 10000 ???? 448 10000 ???? ; 449 10000 ???? ; speakjet.inc 450 10000 ???? ; 451 10000 ???? ; 452 10000 ???? ; AtariVox Speech Synth Driver 453 10000 ???? ; 454 10000 ???? ; By Alex Herbert, 2004 455 10000 ???? ; 456 10000 ???? 457 10000 ???? 458 10000 ???? 459 10000 ???? 460 10000 ???? ; Constants 461 10000 ???? 462 10000 ???? 463 10000 ???? 00 01 SERIAL_OUTMASK equ $01 464 10000 ???? 00 02 SERIAL_RDYMASK equ $02 465 10000 ???? 466 10000 ???? 467 10000 ???? 468 10000 ???? ; Macros 469 10000 ???? 470 10000 ???? mac spkout 471 10000 ???? 472 10000 ???? ; check buffer-full status 473 10000 ???? lda SWCHA 474 10000 ???? and #SERIAL_RDYMASK 475 10000 ???? beq .speech_done 476 10000 ???? 477 10000 ???? ; get next speech byte 478 10000 ???? ldy #$00 479 10000 ???? lda (speech_addr),y 480 10000 ???? 481 10000 ???? ; invert data and check for end of string 482 10000 ???? eor #$ff 483 10000 ???? ;sta BACKGRND ; debug - uncomment to flash the background color with vox data 484 10000 ???? beq .speech_done 485 10000 ???? sta {1} 486 10000 ???? 487 10000 ???? ; increment speech pointer 488 10000 ???? inc speech_addr 489 10000 ???? bne .incaddr_skip 490 10000 ???? inc speech_addr+1 491 10000 ???? .incaddr_skip 492 10000 ???? 493 10000 ???? ; output byte as serial data 494 10000 ???? 495 10000 ???? sec ; start bit 496 10000 ???? .byteout_loop 497 10000 ???? ; put carry flag into bit 0 of SWACNT, perserving other bits 498 10000 ???? lda SWACNT ; 4 499 10000 ???? and #$fe ; 2 6 500 10000 ???? adc #$00 ; 2 8 501 10000 ???? sta SWACNT ; 4 12 502 10000 ???? 503 10000 ???? ; 10 bits sent? (1 start bit, 8 data bits, 1 stop bit) 504 10000 ???? cpy #$09 ; 2 14 505 10000 ???? beq .speech_done ; 2 16 506 10000 ???? iny ; 2 18 507 10000 ???? 508 10000 ???? ; the 7800 is 1.5x faster than the 2600. Waste more cycles here 509 10000 ???? ; to match the original baud rate... 510 10000 ???? ;ldx #$07 ; 2600 511 10000 ???? ldx #$0D 512 10000 ???? 513 10000 ???? .delay_loop 514 10000 ???? dex ; 515 10000 ???? bne .delay_loop ; 36 54 516 10000 ???? 517 10000 ???? ; shift next data bit into carry 518 10000 ???? lsr {1} ; 5 59 519 10000 ???? 520 10000 ???? ; and loop (branch always taken) 521 10000 ???? bpl .byteout_loop ; 3 62 cycles for loop 522 10000 ???? 523 10000 ???? .speech_done 524 10000 ???? 525 10000 ???? endm 526 10000 ???? 527 10000 ???? 528 10000 ???? mac speak 529 10000 ???? 530 10000 ???? lda #<{1} 531 10000 ???? sta speech_addr 532 10000 ???? lda #>{1} 533 10000 ???? sta speech_addr+1 534 10000 ???? 535 10000 ???? endm 536 10000 ???? 537 10000 ???? 538 10000 ???? 539 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 540 10000 ???? 541 10000 ???? processor 6502 542 10000 ???? ------- FILE 7800basic.h LEVEL 2 PASS 3 0 10000 ???? include "7800basic.h" 1 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 10000 ???? 3 10000 ???? processor 6502 ------- FILE 7800.h LEVEL 3 PASS 3 0 10000 ???? include "7800.h" 1 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 10000 ???? 3 10000 ???? ; 7800.h 4 10000 ???? ; Version 1.0, 2019/12/13 5 10000 ???? 6 10000 ???? ; This file defines hardware registers and memory mapping for the 7 10000 ???? ; Atari 7800. It is distributed as a companion machine-specific support package 8 10000 ???? ; for the DASM compiler. Updates to this file, DASM, and associated tools are 9 10000 ???? ; available at https://github.com/dasm-assembler/dasm 10 10000 ???? 11 10000 ???? 12 10000 ???? ; ******************** 7800 Hardware Adresses *************************** 13 10000 ???? ; 14 10000 ???? ; MEMORY MAP USAGE OF THE 7800 15 10000 ???? ; 16 10000 ???? ; 00 - 1F TIA REGISTERS 17 10000 ???? ; 20 - 3F MARIA REGISTERS 18 10000 ???? ; 40 - FF RAM block 0 (zero page) 19 10000 ???? ; 100 - 11F TIA (mirror of 0000-001f) 20 10000 ???? ; 120 - 13F MARIA (mirror of 0020-003f) 21 10000 ???? ; 140 - 1FF RAM block 1 (stack) 22 10000 ???? ; 200 - 21F TIA (mirror of 0000-001f) 23 10000 ???? ; 220 - 23F MARIA (mirror of 0020-003f) 24 10000 ???? ; 240 - 27F ??? 25 10000 ???? ; 280 - 2FF RIOT I/O ports and timers 26 10000 ???? ; 300 - 31F TIA (mirror of 0000-001f) 27 10000 ???? ; 320 - 33F MARIA (mirror of 0020-003f) 28 10000 ???? ; 340 - 3FF ??? 29 10000 ???? ; 400 - 47F unused address space 30 10000 ???? ; 480 - 4FF RIOT RAM 31 10000 ???? ; 500 - 57F unused address space 32 10000 ???? ; 580 - 5FF RIOT RAM (mirror of 0480-04ff) 33 10000 ???? ; 600 - 17FF unused address space 34 10000 ???? ; 1800 - 203F RAM 35 10000 ???? ; 2040 - 20FF RAM block 0 (mirror of 0000-001f) 36 10000 ???? ; 2100 - 213F RAM 37 10000 ???? ; 2140 - 21FF RAM block 1 (mirror of 0140-01ff) 38 10000 ???? ; 2200 - 27FF RAM 39 10000 ???? ; 2800 - 2FFF mirror of 1800-27ff 40 10000 ???? ; 3000 - 3FFF unused address space 41 10000 ???? ; 4000 - FF7F potential cartridge address space 42 10000 ???? ; FF80 - FFF9 RESERVED FOR ENCRYPTION 43 10000 ???? ; FFFA - FFFF 6502 VECTORS 44 10000 ???? 45 10000 ???? 46 10000 ???? ;****** 00-1F ********* TIA REGISTERS ****************** 47 10000 ???? 48 10000 ???? 00 01 INPTCTRL = $01 ;Input control. In same address space as TIA. write-only 49 10000 ???? 00 01 VBLANK = $01 ;VBLANK. D7=1:dump paddle caps to ground. write-only 50 10000 ???? 00 08 INPT0 = $08 ;Paddle Control Input 0 read-only 51 10000 ???? 00 09 INPT1 = $09 ;Paddle Control Input 1 read-only 52 10000 ???? 00 0a INPT2 = $0A ;Paddle Control Input 2 read-only 53 10000 ???? 00 0b INPT3 = $0B ;Paddle Control Input 3 read-only 54 10000 ???? 55 10000 ???? ; ** some common alternate names for INPT0/1/2/3 56 10000 ???? 00 08 INPT4B = $08 ;Joystick 0 Fire 1 read-only 57 10000 ???? 00 09 INPT4A = $09 ;Joystick 0 Fire 1 read-only 58 10000 ???? 00 0a INPT5B = $0A ;Joystick 1 Fire 0 read-only 59 10000 ???? 00 0b INPT5A = $0B ;Joystick 1 Fire 1 read-only 60 10000 ???? 00 08 INPT4R = $08 ;Joystick 0 Fire 1 read-only 61 10000 ???? 00 09 INPT4L = $09 ;Joystick 0 Fire 1 read-only 62 10000 ???? 00 0a INPT5R = $0A ;Joystick 1 Fire 0 read-only 63 10000 ???? 00 0b INPT5L = $0B ;Joystick 1 Fire 1 read-only 64 10000 ???? 65 10000 ???? 00 0c INPT4 = $0C ;Player 0 Fire Button Input read-only 66 10000 ???? 00 0d INPT5 = $0D ;Player 1 Fire Button Input read-only 67 10000 ???? 68 10000 ???? 00 15 AUDC0 = $15 ;Audio Control Channel 0 write-only 69 10000 ???? 00 16 AUDC1 = $16 ;Audio Control Channel 1 write-only 70 10000 ???? 00 17 AUDF0 = $17 ;Audio Frequency Channel 0 write-only 71 10000 ???? 00 18 AUDF1 = $18 ;Audio Frequency Channel 1 write-only 72 10000 ???? 00 19 AUDV0 = $19 ;Audio Volume Channel 0 write-only 73 10000 ???? 00 1a AUDV1 = $1A ;Audio Volume Channel 1 write-only 74 10000 ???? 75 10000 ???? ;****** 20-3F ********* MARIA REGISTERS *************** 76 10000 ???? 77 10000 ???? 00 20 BACKGRND = $20 ;Background Color write-only 78 10000 ???? 00 21 P0C1 = $21 ;Palette 0 - Color 1 write-only 79 10000 ???? 00 22 P0C2 = $22 ;Palette 0 - Color 2 write-only 80 10000 ???? 00 23 P0C3 = $23 ;Palette 0 - Color 3 write-only 81 10000 ???? 00 24 WSYNC = $24 ;Wait For Sync write-only 82 10000 ???? 00 25 P1C1 = $25 ;Palette 1 - Color 1 write-only 83 10000 ???? 00 26 P1C2 = $26 ;Palette 1 - Color 2 write-only 84 10000 ???? 00 27 P1C3 = $27 ;Palette 1 - Color 3 write-only 85 10000 ???? 00 28 MSTAT = $28 ;Maria Status read-only 86 10000 ???? 00 29 P2C1 = $29 ;Palette 2 - Color 1 write-only 87 10000 ???? 00 2a P2C2 = $2A ;Palette 2 - Color 2 write-only 88 10000 ???? 00 2b P2C3 = $2B ;Palette 2 - Color 3 write-only 89 10000 ???? 00 2c DPPH = $2C ;Display List List Pointer High write-only 90 10000 ???? 00 2d P3C1 = $2D ;Palette 3 - Color 1 write-only 91 10000 ???? 00 2e P3C2 = $2E ;Palette 3 - Color 2 write-only 92 10000 ???? 00 2f P3C3 = $2F ;Palette 3 - Color 3 write-only 93 10000 ???? 00 30 DPPL = $30 ;Display List List Pointer Low write-only 94 10000 ???? 00 31 P4C1 = $31 ;Palette 4 - Color 1 write-only 95 10000 ???? 00 32 P4C2 = $32 ;Palette 4 - Color 2 write-only 96 10000 ???? 00 33 P4C3 = $33 ;Palette 4 - Color 3 write-only 97 10000 ???? 00 34 CHARBASE = $34 ;Character Base Address write-only 98 10000 ???? 00 34 CHBASE = $34 ;Character Base Address write-only 99 10000 ???? 00 35 P5C1 = $35 ;Palette 5 - Color 1 write-only 100 10000 ???? 00 36 P5C2 = $36 ;Palette 5 - Color 2 write-only 101 10000 ???? 00 37 P5C3 = $37 ;Palette 5 - Color 3 write-only 102 10000 ???? 00 38 OFFSET = $38 ;Unused - Store zero here write-only 103 10000 ???? 00 39 P6C1 = $39 ;Palette 6 - Color 1 write-only 104 10000 ???? 00 3a P6C2 = $3A ;Palette 6 - Color 2 write-only 105 10000 ???? 00 3b P6C3 = $3B ;Palette 6 - Color 3 write-only 106 10000 ???? 00 3c CTRL = $3C ;Maria Control Register write-only 107 10000 ???? 00 3d P7C1 = $3D ;Palette 7 - Color 1 write-only 108 10000 ???? 00 3e P7C2 = $3E ;Palette 7 - Color 2 write-only 109 10000 ???? 00 3f P7C3 = $3F ;Palette 7 - Color 3 write-only 110 10000 ???? 111 10000 ???? 112 10000 ???? ;****** 280-2FF ******* PIA PORTS AND TIMERS ************ 113 10000 ???? 114 10000 ???? 02 80 SWCHA = $280 ;P0+P1 Joystick Directional Input read-write 115 10000 ???? 02 81 CTLSWA = $281 ;I/O Control for SCHWA read-write 116 10000 ???? 02 81 SWACNT = $281 ;VCS name for above read-write 117 10000 ???? 02 82 SWCHB = $282 ;Console Switches read-write 118 10000 ???? 02 83 CTLSWB = $283 ;I/O Control for SCHWB read-write 119 10000 ???? 02 83 SWBCNT = $283 ;VCS name for above read-write 120 10000 ???? 121 10000 ???? 02 84 INTIM = $284 ;Interval Timer Read read-only 122 10000 ???? 02 94 TIM1T = $294 ;Set 1 CLK Interval (838 nsec/interval) write-only 123 10000 ???? 02 95 TIMINT = $295 ;Interval Timer Interrupt read-only 124 10000 ???? 02 95 TIM8T = $295 ;Set 8 CLK Interval (6.7 usec/interval) write-only 125 10000 ???? 02 96 TIM64T = $296 ;Set 64 CLK Interval (63.6 usec/interval) write-only 126 10000 ???? 02 97 T1024T = $297 ;Set 1024 CLK Interval (858.2 usec/interval) write-only 127 10000 ???? 02 9e TIM64TI = $29E ;Interrupt timer 64T write-only 128 10000 ???? 129 10000 ???? ;XM 130 10000 ???? 04 70 XCTRL = $470 ; 7=YM2151 6=RAM@6k 5=RAM@4k 4=pokey@450 3=hsc 2=cart 1=RoF_bank1 0=RoF_bank2 131 10000 ???? 04 70 XCTRL1 = $470 132 10000 ???? 04 78 XCTRL2 = $478 133 10000 ???? 04 7c XCTRL3 = $47c 134 10000 ???? 04 71 XCTRL4 = $471 135 10000 ???? 04 72 XCTRL5 = $472 136 10000 ???? 137 10000 ???? ; Pokey register relative locations, since its base may be different 138 10000 ???? ; depending on the hardware. 139 10000 ???? 00 00 PAUDF0 = $0 ; extra audio channels and frequencies 140 10000 ???? 00 01 PAUDC0 = $1 141 10000 ???? 00 02 PAUDF1 = $2 142 10000 ???? 00 03 PAUDC1 = $3 143 10000 ???? 00 04 PAUDF2 = $4 144 10000 ???? 00 05 PAUDC2 = $5 145 10000 ???? 00 06 PAUDF3 = $6 146 10000 ???? 00 07 PAUDC3 = $7 147 10000 ???? 00 08 PAUDCTL = $8 ; Audio Control 148 10000 ???? 00 09 PSTIMER = $9 149 10000 ???? 00 0a PRANDOM = $A ; 17 bit polycounter pseudo random 150 10000 ???? 00 0f PSKCTL = $F ; Serial Port control ------- FILE 7800basic.h ------- FILE 7800basic_variable_redefs.h LEVEL 3 PASS 3 0 10000 ???? include "7800basic_variable_redefs.h" 1 10000 ???? ; This file contains variable mapping and other information for the current project. 2 10000 ???? 3 10000 ???? 00 00 vertical_shooting_laser_tallsprite_01_mode = $00 4 10000 ???? 00 00 vertical_shooting_laser_tallsprite_01_width_twoscompliment = $00 5 10000 ???? 00 00 vertical_shooting_laser_tallsprite_01_width = $00 6 10000 ???? 00 00 vertical_shooting_laser_tallsprite_00_mode = $00 7 10000 ???? 00 1f vertical_shooting_laser_tallsprite_00_width_twoscompliment = $1f 8 10000 ???? 00 01 vertical_shooting_laser_tallsprite_00_width = $01 9 10000 ???? 00 00 vertical_shooting_laser_mode = $00 10 10000 ???? 00 1f vertical_shooting_laser_width_twoscompliment = $1f 11 10000 ???? 00 01 vertical_shooting_laser_width = $01 12 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_mode = $00 13 10000 ???? 00 0c vertical_shooting_explosion_10_tallsprite_00_width_twoscompliment = $0c 14 10000 ???? 00 14 vertical_shooting_explosion_10_tallsprite_00_width = $14 15 10000 ???? 00 00 vertical_shooting_explosion_10_mode = $00 16 10000 ???? 00 0c vertical_shooting_explosion_10_width_twoscompliment = $0c 17 10000 ???? 00 14 vertical_shooting_explosion_10_width = $14 18 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_mode = $00 19 10000 ???? 00 0c vertical_shooting_explosion_09_tallsprite_00_width_twoscompliment = $0c 20 10000 ???? 00 14 vertical_shooting_explosion_09_tallsprite_00_width = $14 21 10000 ???? 00 00 vertical_shooting_explosion_09_mode = $00 22 10000 ???? 00 0c vertical_shooting_explosion_09_width_twoscompliment = $0c 23 10000 ???? 00 14 vertical_shooting_explosion_09_width = $14 24 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_mode = $00 25 10000 ???? 00 0c vertical_shooting_explosion_08_tallsprite_00_width_twoscompliment = $0c 26 10000 ???? 00 14 vertical_shooting_explosion_08_tallsprite_00_width = $14 27 10000 ???? 00 00 vertical_shooting_explosion_08_mode = $00 28 10000 ???? 00 0c vertical_shooting_explosion_08_width_twoscompliment = $0c 29 10000 ???? 00 14 vertical_shooting_explosion_08_width = $14 30 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_mode = $00 31 10000 ???? 00 0c vertical_shooting_explosion_07_tallsprite_00_width_twoscompliment = $0c 32 10000 ???? 00 14 vertical_shooting_explosion_07_tallsprite_00_width = $14 33 10000 ???? 00 00 vertical_shooting_explosion_07_mode = $00 34 10000 ???? 00 0c vertical_shooting_explosion_07_width_twoscompliment = $0c 35 10000 ???? 00 14 vertical_shooting_explosion_07_width = $14 36 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_mode = $00 37 10000 ???? 00 1e vertical_shooting_explosion_06_tallsprite_00_width_twoscompliment = $1e 38 10000 ???? 00 02 vertical_shooting_explosion_06_tallsprite_00_width = $02 39 10000 ???? 00 00 vertical_shooting_explosion_06_mode = $00 40 10000 ???? 00 1e vertical_shooting_explosion_06_width_twoscompliment = $1e 41 10000 ???? 00 02 vertical_shooting_explosion_06_width = $02 42 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_mode = $00 43 10000 ???? 00 1e vertical_shooting_explosion_05_tallsprite_00_width_twoscompliment = $1e 44 10000 ???? 00 02 vertical_shooting_explosion_05_tallsprite_00_width = $02 45 10000 ???? 00 00 vertical_shooting_explosion_05_mode = $00 46 10000 ???? 00 1e vertical_shooting_explosion_05_width_twoscompliment = $1e 47 10000 ???? 00 02 vertical_shooting_explosion_05_width = $02 48 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_mode = $00 49 10000 ???? 00 1e vertical_shooting_explosion_04_tallsprite_00_width_twoscompliment = $1e 50 10000 ???? 00 02 vertical_shooting_explosion_04_tallsprite_00_width = $02 51 10000 ???? 00 00 vertical_shooting_explosion_04_mode = $00 52 10000 ???? 00 1e vertical_shooting_explosion_04_width_twoscompliment = $1e 53 10000 ???? 00 02 vertical_shooting_explosion_04_width = $02 54 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_mode = $00 55 10000 ???? 00 1e vertical_shooting_explosion_03_tallsprite_00_width_twoscompliment = $1e 56 10000 ???? 00 02 vertical_shooting_explosion_03_tallsprite_00_width = $02 57 10000 ???? 00 00 vertical_shooting_explosion_03_mode = $00 58 10000 ???? 00 1e vertical_shooting_explosion_03_width_twoscompliment = $1e 59 10000 ???? 00 02 vertical_shooting_explosion_03_width = $02 60 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_mode = $00 61 10000 ???? 00 1e vertical_shooting_explosion_02_tallsprite_00_width_twoscompliment = $1e 62 10000 ???? 00 02 vertical_shooting_explosion_02_tallsprite_00_width = $02 63 10000 ???? 00 00 vertical_shooting_explosion_02_mode = $00 64 10000 ???? 00 1e vertical_shooting_explosion_02_width_twoscompliment = $1e 65 10000 ???? 00 02 vertical_shooting_explosion_02_width = $02 66 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_mode = $00 67 10000 ???? 00 1e vertical_shooting_explosion_01_tallsprite_00_width_twoscompliment = $1e 68 10000 ???? 00 02 vertical_shooting_explosion_01_tallsprite_00_width = $02 69 10000 ???? 00 00 vertical_shooting_explosion_01_mode = $00 70 10000 ???? 00 1e vertical_shooting_explosion_01_width_twoscompliment = $1e 71 10000 ???? 00 02 vertical_shooting_explosion_01_width = $02 72 10000 ???? 00 00 vertical_shooting_1up_mode = $00 73 10000 ???? 00 1e vertical_shooting_1up_width_twoscompliment = $1e 74 10000 ???? 00 02 vertical_shooting_1up_width = $02 75 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_01_mode = $00 76 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_01_width_twoscompliment = $00 77 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_01_width = $00 78 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_mode = $00 79 10000 ???? 00 1e vertical_shooting_enemy01_tallsprite_00_width_twoscompliment = $1e 80 10000 ???? 00 02 vertical_shooting_enemy01_tallsprite_00_width = $02 81 10000 ???? 00 00 vertical_shooting_enemy01_mode = $00 82 10000 ???? 00 1e vertical_shooting_enemy01_width_twoscompliment = $1e 83 10000 ???? 00 02 vertical_shooting_enemy01_width = $02 84 10000 ???? 00 00 vertical_shooting_powerup_mode = $00 85 10000 ???? 00 1e vertical_shooting_powerup_width_twoscompliment = $1e 86 10000 ???? 00 02 vertical_shooting_powerup_width = $02 87 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 88 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 89 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 90 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 91 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 92 10000 ???? 00 01 vertical_shooting_bullet_width = $01 93 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 94 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 95 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 96 10000 ???? 00 00 vertical_shooting_ship_mode = $00 97 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 98 10000 ???? 00 02 vertical_shooting_ship_width = $02 99 10000 ???? 00 00 vertical_shooting_font_mode = $00 100 10000 ???? 00 13 vertical_shooting_font_width_twoscompliment = $13 101 10000 ???? 00 2d vertical_shooting_font_width = $2d 102 10000 ???? 00 90 sfx_explosion_length = .skipL0266-sfx_explosion 103 10000 ???? 104 10000 ???? 00 30 sfx_plainlaser_length = .skipL0265-sfx_plainlaser 105 10000 ???? 106 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0264-sfx_pulsecannon 107 10000 ???? 108 10000 ???? 00 36 sfx_bling_length = .skipL0263-sfx_bling 109 10000 ???? 110 10000 ???? 00 04 vertical_shooting_laser_tallsprite_00_color3 = $04 111 10000 ???? 00 42 vertical_shooting_laser_tallsprite_00_color2 = $42 112 10000 ???? 00 0f vertical_shooting_laser_tallsprite_00_color1 = $0f 113 10000 ???? 00 00 vertical_shooting_laser_tallsprite_00_color0 = $00 114 10000 ???? 00 04 vertical_shooting_laser_color3 = $04 115 10000 ???? 00 42 vertical_shooting_laser_color2 = $42 116 10000 ???? 00 0f vertical_shooting_laser_color1 = $0f 117 10000 ???? 00 00 vertical_shooting_laser_color0 = $00 118 10000 ???? 00 33 vertical_shooting_explosion_10_tallsprite_00_color3 = $33 119 10000 ???? 00 2b vertical_shooting_explosion_10_tallsprite_00_color2 = $2b 120 10000 ???? 00 36 vertical_shooting_explosion_10_tallsprite_00_color1 = $36 121 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_color0 = $00 122 10000 ???? 00 33 vertical_shooting_explosion_10_color3 = $33 123 10000 ???? 00 2b vertical_shooting_explosion_10_color2 = $2b 124 10000 ???? 00 36 vertical_shooting_explosion_10_color1 = $36 125 10000 ???? 00 00 vertical_shooting_explosion_10_color0 = $00 126 10000 ???? 00 33 vertical_shooting_explosion_09_tallsprite_00_color3 = $33 127 10000 ???? 00 2b vertical_shooting_explosion_09_tallsprite_00_color2 = $2b 128 10000 ???? 00 36 vertical_shooting_explosion_09_tallsprite_00_color1 = $36 129 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_color0 = $00 130 10000 ???? 00 33 vertical_shooting_explosion_09_color3 = $33 131 10000 ???? 00 2b vertical_shooting_explosion_09_color2 = $2b 132 10000 ???? 00 36 vertical_shooting_explosion_09_color1 = $36 133 10000 ???? 00 00 vertical_shooting_explosion_09_color0 = $00 134 10000 ???? 00 33 vertical_shooting_explosion_08_tallsprite_00_color3 = $33 135 10000 ???? 00 2b vertical_shooting_explosion_08_tallsprite_00_color2 = $2b 136 10000 ???? 00 36 vertical_shooting_explosion_08_tallsprite_00_color1 = $36 137 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_color0 = $00 138 10000 ???? 00 33 vertical_shooting_explosion_08_color3 = $33 139 10000 ???? 00 2b vertical_shooting_explosion_08_color2 = $2b 140 10000 ???? 00 36 vertical_shooting_explosion_08_color1 = $36 141 10000 ???? 00 00 vertical_shooting_explosion_08_color0 = $00 142 10000 ???? 00 33 vertical_shooting_explosion_07_tallsprite_00_color3 = $33 143 10000 ???? 00 2b vertical_shooting_explosion_07_tallsprite_00_color2 = $2b 144 10000 ???? 00 36 vertical_shooting_explosion_07_tallsprite_00_color1 = $36 145 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_color0 = $00 146 10000 ???? 00 33 vertical_shooting_explosion_07_color3 = $33 147 10000 ???? 00 2b vertical_shooting_explosion_07_color2 = $2b 148 10000 ???? 00 36 vertical_shooting_explosion_07_color1 = $36 149 10000 ???? 00 00 vertical_shooting_explosion_07_color0 = $00 150 10000 ???? 00 33 vertical_shooting_explosion_06_tallsprite_00_color3 = $33 151 10000 ???? 00 2b vertical_shooting_explosion_06_tallsprite_00_color2 = $2b 152 10000 ???? 00 36 vertical_shooting_explosion_06_tallsprite_00_color1 = $36 153 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_color0 = $00 154 10000 ???? 00 33 vertical_shooting_explosion_06_color3 = $33 155 10000 ???? 00 2b vertical_shooting_explosion_06_color2 = $2b 156 10000 ???? 00 36 vertical_shooting_explosion_06_color1 = $36 157 10000 ???? 00 00 vertical_shooting_explosion_06_color0 = $00 158 10000 ???? 00 33 vertical_shooting_explosion_05_tallsprite_00_color3 = $33 159 10000 ???? 00 2b vertical_shooting_explosion_05_tallsprite_00_color2 = $2b 160 10000 ???? 00 36 vertical_shooting_explosion_05_tallsprite_00_color1 = $36 161 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_color0 = $00 162 10000 ???? 00 33 vertical_shooting_explosion_05_color3 = $33 163 10000 ???? 00 2b vertical_shooting_explosion_05_color2 = $2b 164 10000 ???? 00 36 vertical_shooting_explosion_05_color1 = $36 165 10000 ???? 00 00 vertical_shooting_explosion_05_color0 = $00 166 10000 ???? 00 33 vertical_shooting_explosion_04_tallsprite_00_color3 = $33 167 10000 ???? 00 36 vertical_shooting_explosion_04_tallsprite_00_color2 = $36 168 10000 ???? 00 2b vertical_shooting_explosion_04_tallsprite_00_color1 = $2b 169 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_color0 = $00 170 10000 ???? 00 33 vertical_shooting_explosion_04_color3 = $33 171 10000 ???? 00 36 vertical_shooting_explosion_04_color2 = $36 172 10000 ???? 00 2b vertical_shooting_explosion_04_color1 = $2b 173 10000 ???? 00 00 vertical_shooting_explosion_04_color0 = $00 174 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color3 = 0 175 10000 ???? 00 36 vertical_shooting_explosion_03_tallsprite_00_color2 = $36 176 10000 ???? 00 2b vertical_shooting_explosion_03_tallsprite_00_color1 = $2b 177 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color0 = $00 178 10000 ???? 00 00 vertical_shooting_explosion_03_color3 = 0 179 10000 ???? 00 36 vertical_shooting_explosion_03_color2 = $36 180 10000 ???? 00 2b vertical_shooting_explosion_03_color1 = $2b 181 10000 ???? 00 00 vertical_shooting_explosion_03_color0 = $00 182 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color3 = 0 183 10000 ???? 00 36 vertical_shooting_explosion_02_tallsprite_00_color2 = $36 184 10000 ???? 00 2b vertical_shooting_explosion_02_tallsprite_00_color1 = $2b 185 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color0 = $00 186 10000 ???? 00 00 vertical_shooting_explosion_02_color3 = 0 187 10000 ???? 00 36 vertical_shooting_explosion_02_color2 = $36 188 10000 ???? 00 2b vertical_shooting_explosion_02_color1 = $2b 189 10000 ???? 00 00 vertical_shooting_explosion_02_color0 = $00 190 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color3 = 0 191 10000 ???? 00 2b vertical_shooting_explosion_01_tallsprite_00_color2 = $2b 192 10000 ???? 00 36 vertical_shooting_explosion_01_tallsprite_00_color1 = $36 193 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color0 = $00 194 10000 ???? 00 00 vertical_shooting_explosion_01_color3 = 0 195 10000 ???? 00 2b vertical_shooting_explosion_01_color2 = $2b 196 10000 ???? 00 36 vertical_shooting_explosion_01_color1 = $36 197 10000 ???? 00 00 vertical_shooting_explosion_01_color0 = $00 198 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 199 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 200 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 201 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 202 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 203 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 204 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 205 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 206 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 207 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 208 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 209 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 210 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 211 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 212 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 213 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 214 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 215 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 216 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 217 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 218 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 219 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 220 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 221 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 222 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 223 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 224 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 225 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 226 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 227 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 228 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 229 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 230 10000 ???? 00 0f vertical_shooting_font_color1 = $0f 231 10000 ???? 00 00 vertical_shooting_font_color0 = $00 232 10000 ???? 01 6b enemy01_Slowdown = var43 233 10000 ???? 234 10000 ???? 01 6a isDead_flag = var42 235 10000 ???? 236 10000 ???? 01 69 continue_flag = var41 237 10000 ???? 238 10000 ???? 01 68 twinlaser_Slowdown = var40 239 10000 ???? 240 10000 ???? 01 67 twinlaser_flag = var39 241 10000 ???? 242 10000 ???? 01 66 twinlaserY = var38 243 10000 ???? 244 10000 ???? 01 65 twinlaserX = var37 245 10000 ???? 246 10000 ???? 01 64 lives = var36 247 10000 ???? 248 10000 ???? 01 63 explosion_aniframe = var35 249 10000 ???? 250 10000 ???? 01 62 extra_shipFlag = var34 251 10000 ???? 252 10000 ???? 01 61 extra_shipY = var33 253 10000 ???? 254 10000 ???? 01 60 extra_shipX = var32 255 10000 ???? 256 10000 ???? 01 5f gameover_flag = var31 257 10000 ???? 258 10000 ???? 01 5e enemy01_speed = var30 259 10000 ???? 260 10000 ???? 01 5d rMovement6 = var29 261 10000 ???? 262 10000 ???? 01 5c rMovement5 = var28 263 10000 ???? 264 10000 ???? 01 5b rMovement4 = var27 265 10000 ???? 266 10000 ???? 01 5a rMovement3 = var26 267 10000 ???? 268 10000 ???? 01 59 enemy01_Flag = var25 269 10000 ???? 270 10000 ???? 01 58 enemy01_Y = var24 271 10000 ???? 272 10000 ???? 01 57 enemy01_X = var23 273 10000 ???? 274 10000 ???? 01 56 enemy_shotSlowdown = var22 275 10000 ???? 276 10000 ???? 01 55 bulletSlowdown = var21 277 10000 ???? 278 10000 ???? 01 54 power_upSlowdown = var20 279 10000 ???? 280 10000 ???? 01 53 rMovement2 = var19 281 10000 ???? 282 10000 ???? 01 52 power_upFlag = var18 283 10000 ???? 284 10000 ???? 01 51 power_upY = var17 285 10000 ???? 286 10000 ???? 01 50 power_upX = var16 287 10000 ???? 288 10000 ???? 01 4f rDirection = var15 289 10000 ???? 290 10000 ???? 01 4e rMovement1 = var14 291 10000 ???? 292 10000 ???? 01 4d playerFlag = var13 293 10000 ???? 294 10000 ???? 01 4c enemy_shotFlag = var12 295 10000 ???? 296 10000 ???? 01 4b enemy_shotY = var11 297 10000 ???? 298 10000 ???? 01 4a enemy_shotX = var10 299 10000 ???? 300 10000 ???? 01 49 bulletY = var9 301 10000 ???? 302 10000 ???? 01 48 bulletX = var8 303 10000 ???? 304 10000 ???? 01 47 joyposright = var7 305 10000 ???? 306 10000 ???? 01 46 joyposleft = var6 307 10000 ???? 308 10000 ???? 01 45 joyposdown = var5 309 10000 ???? 310 10000 ???? 01 44 joyposup = var4 311 10000 ???? 312 10000 ???? 01 43 fire_debounce = var3 313 10000 ???? 314 10000 ???? 01 42 playerY = var2 315 10000 ???? 316 10000 ???? 01 41 playerX = var1 317 10000 ???? 318 10000 ???? 01 40 frameCounter = var0 319 10000 ???? 320 10000 ???? 00 01 collisionwrap = 1 321 10000 ???? 00 01 NTSC = 1 322 10000 ???? 00 c0 SCREENHEIGHT = 192 323 10000 ???? 00 01 CHECKOVERWRITE = 1 324 10000 ???? 00 08 ZONEHEIGHT = 8 325 10000 ???? 00 01 ROM48K = 1 ------- FILE 7800basic.h 6 10000 ???? 7 10000 ???? ;************ 7800 overall RAM map ************** 8 10000 ???? 9 10000 ???? ; 40-FF zero page RAM 10 10000 ???? ; 140-1FF RAM (stack) 11 10000 ???? ; 1800-203F RAM 12 10000 ???? ; 2100-213F RAM 13 10000 ???? ; 2200-27FF RAM 14 10000 ???? 15 10000 ???? ;************ 7800basic RAM usage map ************** 16 10000 ???? 17 10000 ???? ; 40-FF numerous defines, listed below 18 10000 ???? ; 140-1FF RAM (stack) 19 10000 ???? 20 10000 ???? ; 1800-187F DLL (1800-18DF with page flipping enabled) 21 10000 ???? ; 1880-1FFF DLs (18E0-1FFF with page flipping enabled) 22 10000 ???? 23 10000 ???? ; 2000-203F Reserved 24 10000 ???? ; 2100-213F Reserved 25 10000 ???? ; 2200-27FF Free 26 10000 ???? 27 10000 ???? 1f e0 eeprombuffer = $1FE0 28 10000 ???? 18 00 DLLMEM = $1800 29 10000 ???? 00 70 DBOFFSET = $70 ; $E0 length DL is /2 for double-buffering 30 10000 ???? 31 10000 ???? - ifconst PLOTVALUEPAGE 32 10000 ???? -VALBUFFER = (PLOTVALUEPAGE*256) 33 10000 ???? else 34 10000 ???? 20 00 VALBUFFER = $2000 ; to $203F ** never let VALBUFFER straddle pages 35 10000 ???? endif 36 10000 ???? 37 10000 ???? 38 10000 ???? 21 00 pausestate = $2100 39 10000 ???? 21 01 dlzero = $2101 ; zero to force end of $2100 DL, which we use in vblank and overscan 40 10000 ???? 21 02 sINPT1 = $2102 ; save register for joy button joy0 41 10000 ???? 21 03 sINPT3 = $2103 ; save register for joy button joy1 42 10000 ???? 21 04 currentbank = $2104 43 10000 ???? 44 10000 ???? 21 05 currentrambank = $2105 45 10000 ???? 21 06 charactermode = $2106 46 10000 ???? 21 07 sCTRL = $2107 47 10000 ???? 21 08 pokeydetected = $2108 48 10000 ???? 21 09 paldetected = $2109 49 10000 ???? 21 0a avoxdetected = $210A 50 10000 ???? 21 0b sCHARBASE = $210B ; save register for CHARBASE 51 10000 ???? 52 10000 ???? 21 0c hsdevice = $210C 53 10000 ???? 21 0d hsdifficulty = $210D 54 10000 ???? 21 0e hserror = $210E 55 10000 ???? 21 0f hsgameslot = $210F 56 10000 ???? 21 10 hsnewscoreline = $2110 57 10000 ???? 21 11 hsnewscorerank = $2111 58 10000 ???? 21 12 HSRAMTable = $2112 ; to $212F (30 bytes) Format: III*5, SSS*5 59 10000 ???? 21 12 HSRAMInitials = $2112 ; see above 60 10000 ???? 21 21 HSRAMScores = $2121 ; see above 61 10000 ???? 62 10000 ???? 21 31 ssCTRL = $2131 63 10000 ???? 21 32 ssCHARBASE = $2132 64 10000 ???? 21 33 hsdisplaymode = $2133 65 10000 ???? 21 34 gamedifficulty = $2134 66 10000 ???? 21 35 hsinitialpos = $2135 67 10000 ???? 21 36 hsinitialhold = $2136 68 10000 ???? 21 37 hscursorx = $2137 69 10000 ???? 21 38 hsjoydebounce = $2138 70 10000 ???? 21 39 hsswcha = $2139 71 10000 ???? 21 3a hsinpt1 = $213A 72 10000 ???? 21 3b hscolorchaseindex = $213B 73 10000 ???? 21 3c visibleDLLstart = $213C 74 10000 ???? 21 3d overscanDLLstart = $213D 75 10000 ???? 21 3e frameslost = $213E 76 10000 ???? 77 10000 ???? 78 10000 ???? 00 40 rand = $40 79 10000 ???? 00 41 rand16 = $41 80 10000 ???? 00 42 temp1 = $42 81 10000 ???? 00 43 temp2 = $43 82 10000 ???? 00 44 temp3 = $44 83 10000 ???? 00 45 temp4 = $45 84 10000 ???? 00 46 temp5 = $46 85 10000 ???? 00 47 temp6 = $47 86 10000 ???? 00 48 temp7 = $48 87 10000 ???? 00 49 temp8 = $49 88 10000 ???? 00 4a temp9 = $4a 89 10000 ???? 90 10000 ???? 00 4b pokeybase = $4b 91 10000 ???? 00 4b pokeybaselo = $4b 92 10000 ???? 00 4c pokeybasehi = $4c 93 10000 ???? 94 10000 ???? 00 4d visibleover = $4d 95 10000 ???? 96 10000 ???? 00 4e sfx1pointlo = $4e 97 10000 ???? 00 4f sfx2pointlo = $4f 98 10000 ???? 00 50 sfx1pointhi = $50 99 10000 ???? 00 51 sfx2pointhi = $51 100 10000 ???? 101 10000 ???? 00 52 sfx1priority = $52 102 10000 ???? 00 53 sfx2priority = $53 103 10000 ???? 00 54 sfx1poffset = $54 104 10000 ???? 00 55 sfx2poffset = $55 105 10000 ???? 106 10000 ???? 00 56 sfx1frames = $56 107 10000 ???? 00 57 sfx2frames = $57 108 10000 ???? 00 58 sfx1tick = $58 109 10000 ???? 00 59 sfx2tick = $59 110 10000 ???? 111 10000 ???? 00 5a tempmath = $5a 112 10000 ???? 113 10000 ???? 00 5b pokey1pointlo = $5b 114 10000 ???? 00 5c pokey1pointhi = $5c 115 10000 ???? 00 5d pokey2pointlo = $5d 116 10000 ???? 00 5e pokey2pointhi = $5e 117 10000 ???? 00 5f pokey3pointlo = $5f 118 10000 ???? 00 60 pokey3pointhi = $60 119 10000 ???? 00 61 pokey4pointlo = $61 120 10000 ???? 00 62 pokey4pointhi = $62 121 10000 ???? 122 10000 ???? 00 63 dlpnt = $63 ; to $64 123 10000 ???? 00 65 dlend = $65 ; to $81 - for 28 possible visible dll entries 124 10000 ???? 00 82 dlendsave = $82 ; to $9e - for 28 possible visible dll entries 125 10000 ???? 126 10000 ???? 00 9f speech_addr = $9f 127 10000 ???? 00 a0 speech_addr_hi = $a0 128 10000 ???? 129 10000 ???? 00 a1 HSGameTableLo = $a1 130 10000 ???? 00 a2 HSGameTableHi = $a2 131 10000 ???? 00 a3 HSVoxHi = $a3 132 10000 ???? 00 a4 HSVoxLo = $a4 133 10000 ???? 134 10000 ???? ;channel pointers 135 10000 ???? 136 10000 ???? 00 a5 songchannel1layer1lo = $a5 137 10000 ???? 00 a6 songchannel2layer1lo = $a6 138 10000 ???? 00 a7 songchannel3layer1lo = $a7 139 10000 ???? 00 a8 songchannel4layer1lo = $a8 140 10000 ???? 141 10000 ???? 00 a9 songchannel1layer2lo = $a9 142 10000 ???? 00 aa songchannel2layer2lo = $aA 143 10000 ???? 00 ab songchannel3layer2lo = $aB 144 10000 ???? 00 ac songchannel4layer2lo = $aC 145 10000 ???? 146 10000 ???? 00 ad songchannel1layer3lo = $aD 147 10000 ???? 00 ae songchannel2layer3lo = $aE 148 10000 ???? 00 af songchannel3layer3lo = $aF 149 10000 ???? 00 b0 songchannel4layer3lo = $b0 150 10000 ???? 151 10000 ???? 00 b1 songchannel1layer1hi = $b1 152 10000 ???? 00 b2 songchannel2layer1hi = $b2 153 10000 ???? 00 b3 songchannel3layer1hi = $b3 154 10000 ???? 00 b4 songchannel4layer1hi = $b4 155 10000 ???? 156 10000 ???? 00 b5 songchannel1layer2hi = $b5 157 10000 ???? 00 b6 songchannel2layer2hi = $b6 158 10000 ???? 00 b7 songchannel3layer2hi = $b7 159 10000 ???? 00 b8 songchannel4layer2hi = $b8 160 10000 ???? 161 10000 ???? 00 b9 songchannel1layer3hi = $b9 162 10000 ???? 00 ba songchannel2layer3hi = $bA 163 10000 ???? 00 bb songchannel3layer3hi = $bB 164 10000 ???? 00 bc songchannel4layer3hi = $bC 165 10000 ???? 166 10000 ???? 00 bd songdatalo = $bd 167 10000 ???? 00 be songdatahi = $be 168 10000 ???? 169 10000 ???? 00 bf inactivechannelcount = $bf 170 10000 ???? 171 10000 ???? 172 10000 ???? 00 c0 songchannel1transpose = $c0 173 10000 ???? 00 c1 songchannel2transpose = $c1 174 10000 ???? 00 c2 songchannel3transpose = $c2 175 10000 ???? 00 c3 songchannel4transpose = $c3 176 10000 ???? 177 10000 ???? 00 c4 songstackindex = $c4 178 10000 ???? 179 10000 ???? 00 c5 songchannel1instrumentlo = $c5 180 10000 ???? 00 c6 songchannel2instrumentlo = $c6 181 10000 ???? 00 c7 songchannel3instrumentlo = $c7 182 10000 ???? 00 c8 songchannel4instrumentlo = $c8 183 10000 ???? 184 10000 ???? 00 c9 songchannel1instrumenthi = $c9 185 10000 ???? 00 ca songchannel2instrumenthi = $ca 186 10000 ???? 00 cb songchannel3instrumenthi = $cb 187 10000 ???? 00 cc songchannel4instrumenthi = $cc 188 10000 ???? 189 10000 ???? 00 cd sfx1notedata = $cd 190 10000 ???? 00 ce sfx2notedata = $ce 191 10000 ???? 192 10000 ???? 00 cf songloops = $cf 193 10000 ???? 194 10000 ???? 00 d0 songpointerlo = $D0 195 10000 ???? 00 d1 songpointerhi = $D1 196 10000 ???? 197 10000 ???? 00 d2 voxlock = $D2 198 10000 ???? 00 d3 voxqueuesize = $D3 199 10000 ???? 200 10000 ???? 00 d4 vblankroutines = $D4 201 10000 ???? 202 10000 ???? 00 d5 doublebufferstate = $D5 203 10000 ???? 00 d6 doublebufferdloffset = $D6 204 10000 ???? 00 d7 doublebufferbufferdirty = $D7 205 10000 ???? 206 10000 ???? 00 d8 inttemp1 = $D8 207 10000 ???? 00 d9 inttemp2 = $D9 208 10000 ???? 00 da inttemp3 = $DA 209 10000 ???? 00 db inttemp4 = $DB 210 10000 ???? 00 dc inttemp5 = $DC 211 10000 ???? 00 dd inttemp6 = $DD 212 10000 ???? 213 10000 ???? 00 de sfxschedulelock = $DE 214 10000 ???? 00 df sfxschedulemissed = $DF 215 10000 ???? 00 e0 sfxinstrumentlo = $E0 216 10000 ???? 00 e1 sfxinstrumenthi = $E1 217 10000 ???? 00 e2 sfxpitchoffset = $E2 218 10000 ???? 00 e3 sfxnoteindex = $E3 219 10000 ???? 220 10000 ???? 00 e4 CTLSWAs = $E4 221 10000 ???? 00 e5 CTLSWBs = $E5 222 10000 ???? 223 10000 ???? 00 e6 A = $e6 224 10000 ???? 00 e6 a = $e6 225 10000 ???? 00 e7 B = $e7 226 10000 ???? 00 e7 b = $e7 227 10000 ???? 00 e8 C = $e8 228 10000 ???? 00 e8 c = $e8 229 10000 ???? 00 e9 D = $e9 230 10000 ???? 00 e9 d = $e9 231 10000 ???? 00 ea E = $ea 232 10000 ???? 00 ea e = $ea 233 10000 ???? 00 eb F = $eb 234 10000 ???? 00 eb f = $eb 235 10000 ???? 00 ec G = $ec 236 10000 ???? 00 ec g = $ec 237 10000 ???? 00 ed H = $ed 238 10000 ???? 00 ed h = $ed 239 10000 ???? 00 ee I = $ee 240 10000 ???? 00 ee i = $ee 241 10000 ???? 00 ef J = $ef 242 10000 ???? 00 ef j = $ef 243 10000 ???? 00 f0 K = $f0 244 10000 ???? 00 f0 k = $f0 245 10000 ???? 00 f1 L = $f1 246 10000 ???? 00 f1 l = $f1 247 10000 ???? 00 f2 M = $f2 248 10000 ???? 00 f2 m = $f2 249 10000 ???? 00 f3 N = $f3 250 10000 ???? 00 f3 n = $f3 251 10000 ???? 00 f4 O = $f4 252 10000 ???? 00 f4 o = $f4 253 10000 ???? 00 f5 P = $f5 254 10000 ???? 00 f5 p = $f5 255 10000 ???? 00 f6 Q = $f6 256 10000 ???? 00 f6 q = $f6 257 10000 ???? 00 f7 R = $f7 258 10000 ???? 00 f7 r = $f7 259 10000 ???? 00 f8 S = $f8 260 10000 ???? 00 f8 s = $f8 261 10000 ???? 00 f9 T = $f9 262 10000 ???? 00 f9 t = $f9 263 10000 ???? 00 fa U = $fa 264 10000 ???? 00 fa u = $fa 265 10000 ???? 00 fb V = $fb 266 10000 ???? 00 fb v = $fb 267 10000 ???? 00 fc W = $fc 268 10000 ???? 00 fc w = $fc 269 10000 ???? 00 fd X = $fd 270 10000 ???? 00 fd x = $fd 271 10000 ???? 00 fe Y = $fe 272 10000 ???? 00 fe y = $fe 273 10000 ???? 00 ff Z = $ff 274 10000 ???? 00 ff z = $ff 275 10000 ???? 276 10000 ???? ; var0-var99 variables use the top of the stack 277 10000 ???? 01 40 var0 = $140 278 10000 ???? 01 41 var1 = $141 279 10000 ???? 01 42 var2 = $142 280 10000 ???? 01 43 var3 = $143 281 10000 ???? 01 44 var4 = $144 282 10000 ???? 01 45 var5 = $145 283 10000 ???? 01 46 var6 = $146 284 10000 ???? 01 47 var7 = $147 285 10000 ???? 01 48 var8 = $148 286 10000 ???? 01 49 var9 = $149 287 10000 ???? 01 4a var10 = $14a 288 10000 ???? 01 4b var11 = $14b 289 10000 ???? 01 4c var12 = $14c 290 10000 ???? 01 4d var13 = $14d 291 10000 ???? 01 4e var14 = $14e 292 10000 ???? 01 4f var15 = $14f 293 10000 ???? 01 50 var16 = $150 294 10000 ???? 01 51 var17 = $151 295 10000 ???? 01 52 var18 = $152 296 10000 ???? 01 53 var19 = $153 297 10000 ???? 01 54 var20 = $154 298 10000 ???? 01 55 var21 = $155 299 10000 ???? 01 56 var22 = $156 300 10000 ???? 01 57 var23 = $157 301 10000 ???? 01 58 var24 = $158 302 10000 ???? 01 59 var25 = $159 303 10000 ???? 01 5a var26 = $15a 304 10000 ???? 01 5b var27 = $15b 305 10000 ???? 01 5c var28 = $15c 306 10000 ???? 01 5d var29 = $15d 307 10000 ???? 01 5e var30 = $15e 308 10000 ???? 01 5f var31 = $15f 309 10000 ???? 01 60 var32 = $160 310 10000 ???? 01 61 var33 = $161 311 10000 ???? 01 62 var34 = $162 312 10000 ???? 01 63 var35 = $163 313 10000 ???? 01 64 var36 = $164 314 10000 ???? 01 65 var37 = $165 315 10000 ???? 01 66 var38 = $166 316 10000 ???? 01 67 var39 = $167 317 10000 ???? 01 68 var40 = $168 318 10000 ???? 01 69 var41 = $169 319 10000 ???? 01 6a var42 = $16a 320 10000 ???? 01 6b var43 = $16b 321 10000 ???? 01 6c var44 = $16c 322 10000 ???? 01 6d var45 = $16d 323 10000 ???? 01 6e var46 = $16e 324 10000 ???? 01 6f var47 = $16f 325 10000 ???? 01 70 var48 = $170 326 10000 ???? 01 71 var49 = $171 327 10000 ???? 01 72 var50 = $172 328 10000 ???? 01 73 var51 = $173 329 10000 ???? 01 74 var52 = $174 330 10000 ???? 01 75 var53 = $175 331 10000 ???? 01 76 var54 = $176 332 10000 ???? 01 77 var55 = $177 333 10000 ???? 01 78 var56 = $178 334 10000 ???? 01 79 var57 = $179 335 10000 ???? 01 7a var58 = $17a 336 10000 ???? 01 7b var59 = $17b 337 10000 ???? 01 7c var60 = $17c 338 10000 ???? 01 7d var61 = $17d 339 10000 ???? 01 7e var62 = $17e 340 10000 ???? 01 7f var63 = $17f 341 10000 ???? 01 80 var64 = $180 342 10000 ???? 01 81 var65 = $181 343 10000 ???? 01 82 var66 = $182 344 10000 ???? 01 83 var67 = $183 345 10000 ???? 01 84 var68 = $184 346 10000 ???? 01 85 var69 = $185 347 10000 ???? 01 86 var70 = $186 348 10000 ???? 01 87 var71 = $187 349 10000 ???? 01 88 var72 = $188 350 10000 ???? 01 89 var73 = $189 351 10000 ???? 01 8a var74 = $18a 352 10000 ???? 01 8b var75 = $18b 353 10000 ???? 01 8c var76 = $18c 354 10000 ???? 01 8d var77 = $18d 355 10000 ???? 01 8e var78 = $18e 356 10000 ???? 01 8f var79 = $18f 357 10000 ???? 01 90 var80 = $190 358 10000 ???? 01 91 var81 = $191 359 10000 ???? 01 92 var82 = $192 360 10000 ???? 01 93 var83 = $193 361 10000 ???? 01 94 var84 = $194 362 10000 ???? 01 95 var85 = $195 363 10000 ???? 01 96 var86 = $196 364 10000 ???? 01 97 var87 = $197 365 10000 ???? 01 98 var88 = $198 366 10000 ???? 01 99 var89 = $199 367 10000 ???? 01 9a var90 = $19a 368 10000 ???? 01 9b var91 = $19b 369 10000 ???? 01 9c var92 = $19c 370 10000 ???? 01 9d var93 = $19d 371 10000 ???? 01 9e var94 = $19e 372 10000 ???? 01 9f var95 = $19f 373 10000 ???? 01 a0 var96 = $1a0 374 10000 ???? 01 a1 var97 = $1a1 375 10000 ???? 01 a2 var98 = $1a2 376 10000 ???? 01 a3 var99 = $1a3 377 10000 ???? 378 U01c2 ???? SEG.U "7800basicRAM" 379 U01a4 ORG $1A4 380 U01a4 381 U01a4 ; MAX allocation locations are in comments... 382 U01a4 00 framecounter DS 1 ; $1A4 383 U01a5 00 countdownseconds DS 1 ; $1A5 384 U01a6 00 00 00 score0 DS 3 ; $1A6 $1A7 $1A8 385 U01a9 00 00 00 score1 DS 3 ; $1A9 $1AA $1AB 386 U01ac 00 pausebuttonflag DS 1 ; $1AC 387 U01ad 00 valbufend DS 1 ; $1AD 388 U01ae 00 valbufendsave DS 1 ; $1AE 389 U01af 00 finescrollx DS 1 ; $1AF 390 U01b0 00 finescrolly DS 1 ; $1B0 391 U01b1 00 joybuttonmode DS 1 ; $1B1 ; track joysticks that were changed to one-button mode 392 U01b2 00 interruptindex DS 1 ; $1B2 393 U01b3 394 U01b3 - ifconst DOUBLEBUFFER 395 U01b3 -doublebufferminimumframetarget DS 1 ; $1B3 396 U01b3 -doublebufferminimumframeindex DS 1 ; $1B4 397 U01b3 endif 398 U01b3 399 U01b3 00 pausedisable DS 1 ; $1B5 400 U01b4 00 XCTRL1s DS 1 ; $1B6 401 U01b5 402 U01b5 - ifconst AVOXVOICE 403 U01b5 -avoxenable DS 1 ; $1B7 404 U01b5 -tempavox DS 1 ; $1B8 405 U01b5 endif 406 U01b5 407 U01b5 - ifconst MUSICTRACKER 408 U01b5 -songtempo DS 1 ; $1B9 409 U01b5 -songtick DS 1 ; $1BA 410 U01b5 - 411 U01b5 -songchannel1layer1loops DS 1 ; $1BB 412 U01b5 -songchannel2layer1loops DS 1 ; $1BC 413 U01b5 -songchannel3layer1loops DS 1 ; $1BD 414 U01b5 -songchannel4layer1loops DS 1 ; $1BE 415 U01b5 - 416 U01b5 -songchannel1layer2loops DS 1 ; $1BF 417 U01b5 -songchannel2layer2loops DS 1 ; $1C0 418 U01b5 -songchannel3layer2loops DS 1 ; $1C1 419 U01b5 -songchannel4layer2loops DS 1 ; $1C2 420 U01b5 - 421 U01b5 -songchannel1layer3loops DS 1 ; $1C3 422 U01b5 -songchannel2layer3loops DS 1 ; $1C4 423 U01b5 -songchannel3layer3loops DS 1 ; $1C5 424 U01b5 -songchannel4layer3loops DS 1 ; $1C6 425 U01b5 - 426 U01b5 -songchannel1busywait DS 1 ; $1C7 427 U01b5 -songchannel2busywait DS 1 ; $1C8 428 U01b5 -songchannel3busywait DS 1 ; $1C9 429 U01b5 -songchannel4busywait DS 1 ; $1CA 430 U01b5 - 431 U01b5 -songchannel1stackdepth DS 1 ; $1CB 432 U01b5 -songchannel2stackdepth DS 1 ; $1CC 433 U01b5 -songchannel3stackdepth DS 1 ; $1CD 434 U01b5 -songchannel4stackdepth DS 1 ; $1CE 435 U01b5 endif 436 U01b5 437 U01b5 00 palframes DS 1 ; $1CF 438 U01b6 00 palfastframe DS 1 ; $1D0 439 U01b7 440 U01b7 - ifconst MOUSESUPPORT 441 U01b7 -port0resolution DS 1 ; $1D1 442 U01b7 -port1resolution DS 1 ; $1D2 443 U01b7 else 444 U01b7 - ifconst TRAKBALLSUPPORT 445 U01b7 -port0resolution DS 1 ; $1D1 446 U01b7 -port1resolution DS 1 ; $1D2 447 U01b7 endif 448 U01b7 endif 449 U01b7 450 U01b7 00 port0control DS 1 ; $1D3 451 U01b8 00 port1control DS 1 ; $1D4 452 U01b9 453 U01b9 ; port#control values... 454 U01b9 ; 1 = proline 455 U01b9 ; 2 = lightgun 456 U01b9 ; 3 = paddle 457 U01b9 ; 4 = trakball 458 U01b9 ; 5 = vcs joystick 459 U01b9 ; 6 = driving 460 U01b9 ; 7 = keypad 461 U01b9 ; 8 = st mouse/cx80 462 U01b9 ; 9 = amiga mouse 463 U01b9 ; 10 = atarivox 464 U01b9 465 U01b9 ; controller 0 data... 466 U01b9 00 paddleposition0 DS 1 ; $1D5 467 U01b9 01 b9 keypadmatrix0a = paddleposition0 468 U01b9 01 b9 drivingposition0 = paddleposition0 469 U01b9 01 b9 trakballx0 = paddleposition0 470 U01b9 01 b9 mousex0 = paddleposition0 471 U01b9 01 b9 lighttgunx0 = paddleposition0 472 U01ba 473 U01ba ; controller 1 data... 474 U01ba 00 paddleposition2 DS 1 ; $1D6 475 U01ba 01 ba keypadmatrix1a = paddleposition2 476 U01ba 01 ba drivingposition1 = paddleposition2 477 U01ba 01 ba trakballx1 = paddleposition2 478 U01ba 01 ba mousex1 = paddleposition2 479 U01ba 01 ba lightgunx1 = paddleposition2 480 U01bb 481 U01bb ; controller 0 altdata... 482 U01bb 00 paddleposition1 DS 1 ; $1D7 483 U01bb 01 bb keypadmatrix0b = paddleposition1 484 U01bb 01 bb trakbally0 = paddleposition1 485 U01bb 01 bb mousey0 = paddleposition1 486 U01bb 01 bb lightguny0 = paddleposition1 487 U01bc 488 U01bc ; controller 1 altdata... 489 U01bc 00 paddleposition3 DS 1 ; $1D8 490 U01bc 01 bc keypadmatrix1b = paddleposition3 491 U01bc 01 bc trakbally1 = paddleposition3 492 U01bc 01 bc mousey1 = paddleposition3 493 U01bc 01 bc lightguny1 = paddleposition3 494 U01bd 495 U01bd ; controller state save. for trakball state+dir codes, rotary position codes 496 U01bd 00 controller0statesave DS 1 ; $1D9 497 U01bd 01 bd paddleprevious0 = controller0statesave 498 U01bd 01 bd mousecodex0 = controller0statesave 499 U01bd 01 bd trakballcodex0 = controller0statesave 500 U01bd 01 bd keypadmatrix0c = controller0statesave 501 U01be 502 U01be 00 controller1statesave DS 1 ; $1DA 503 U01be 01 be paddleprevious2 = controller1statesave 504 U01be 01 be mousecodex1 = controller1statesave 505 U01be 01 be trakballcodex1 = controller1statesave 506 U01be 01 be keypadmatrix1c = controller1statesave 507 U01bf 508 U01bf 00 paddleprevious1 DS 1 ; $1DB 509 U01bf 01 bf keypadmatrix0d = paddleprevious1 510 U01bf 01 bf mousecodey0 = paddleprevious1 511 U01bf 01 bf trakballcodey0 = paddleprevious1 512 U01c0 513 U01c0 00 paddleprevious3 DS 1 ; $1DC 514 U01c0 01 c0 keypadmatrix1d = paddleprevious3 515 U01c0 01 c0 mousecodey1 = paddleprevious3 516 U01c0 01 c0 trakballcodey1 = paddleprevious3 517 U01c1 518 U01c1 - ifconst pokeysupport 519 U01c1 -pokey1frames DS 1 ; $1DD 520 U01c1 -pokey1tick DS 1 ; $1DE 521 U01c1 -pokey2frames DS 1 ; $1DF 522 U01c1 -pokey2tick DS 1 ; $1E0 523 U01c1 -pokey3frames DS 1 ; $1E1 524 U01c1 -pokey3tick DS 1 ; $1E2 525 U01c1 -pokey4frames DS 1 ; $1E3 526 U01c1 -pokey4tick DS 1 ; $1E4 527 U01c1 -pokey1priority DS 1 ; $1E5 528 U01c1 -pokey1offset DS 1 ; $1E6 529 U01c1 -pokey2priority DS 1 ; $1E7 530 U01c1 -pokey2offset DS 1 ; $1E8 531 U01c1 -pokey3priority DS 1 ; $1E9 532 U01c1 -pokey3offset DS 1 ; $1EA 533 U01c1 -pokey4priority DS 1 ; $1EB 534 U01c1 -pokey4offset DS 1 ; $1EC 535 U01c1 endif 536 U01c1 537 U01c1 ifnconst CANARYOFF 538 U01c1 00 canary DS 1 ; $1ED 539 U01c2 endif 540 U01c2 541 U01c2 ifnconst bankswitchmode stack allowance: 30 nested subroutines. 542 U01c2 echo " stack allowance:",[($1FF - .)/2]d,"nested subroutines." 543 U01c2 - else 544 U01c2 - echo " stack allowance:",[($1FF - .)/3]d,"nested subroutines." 545 U01c2 endif 546 U01c2 ifnconst CANARYOFF the canary is situated at: $1c1 547 U01c2 echo " the canary is situated at:",[canary] 548 U01c2 - else 549 U01c2 - echo " the canary is disabled." 550 U01c2 endif 551 U01c2 552 U01c2 ; $1EE - $1FF reserved for stack 553 U01c2 554 10000 ???? SEG "GAME" 555 10000 ???? ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm ------- FILE 7800basic_variable_redefs.h LEVEL 2 PASS 3 0 10000 ???? include "7800basic_variable_redefs.h" 1 10000 ???? ; This file contains variable mapping and other information for the current project. 2 10000 ???? 3 10000 ???? 00 00 vertical_shooting_laser_tallsprite_01_mode = $00 4 10000 ???? 00 00 vertical_shooting_laser_tallsprite_01_width_twoscompliment = $00 5 10000 ???? 00 00 vertical_shooting_laser_tallsprite_01_width = $00 6 10000 ???? 00 00 vertical_shooting_laser_tallsprite_00_mode = $00 7 10000 ???? 00 1f vertical_shooting_laser_tallsprite_00_width_twoscompliment = $1f 8 10000 ???? 00 01 vertical_shooting_laser_tallsprite_00_width = $01 9 10000 ???? 00 00 vertical_shooting_laser_mode = $00 10 10000 ???? 00 1f vertical_shooting_laser_width_twoscompliment = $1f 11 10000 ???? 00 01 vertical_shooting_laser_width = $01 12 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_mode = $00 13 10000 ???? 00 0c vertical_shooting_explosion_10_tallsprite_00_width_twoscompliment = $0c 14 10000 ???? 00 14 vertical_shooting_explosion_10_tallsprite_00_width = $14 15 10000 ???? 00 00 vertical_shooting_explosion_10_mode = $00 16 10000 ???? 00 0c vertical_shooting_explosion_10_width_twoscompliment = $0c 17 10000 ???? 00 14 vertical_shooting_explosion_10_width = $14 18 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_mode = $00 19 10000 ???? 00 0c vertical_shooting_explosion_09_tallsprite_00_width_twoscompliment = $0c 20 10000 ???? 00 14 vertical_shooting_explosion_09_tallsprite_00_width = $14 21 10000 ???? 00 00 vertical_shooting_explosion_09_mode = $00 22 10000 ???? 00 0c vertical_shooting_explosion_09_width_twoscompliment = $0c 23 10000 ???? 00 14 vertical_shooting_explosion_09_width = $14 24 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_mode = $00 25 10000 ???? 00 0c vertical_shooting_explosion_08_tallsprite_00_width_twoscompliment = $0c 26 10000 ???? 00 14 vertical_shooting_explosion_08_tallsprite_00_width = $14 27 10000 ???? 00 00 vertical_shooting_explosion_08_mode = $00 28 10000 ???? 00 0c vertical_shooting_explosion_08_width_twoscompliment = $0c 29 10000 ???? 00 14 vertical_shooting_explosion_08_width = $14 30 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_mode = $00 31 10000 ???? 00 0c vertical_shooting_explosion_07_tallsprite_00_width_twoscompliment = $0c 32 10000 ???? 00 14 vertical_shooting_explosion_07_tallsprite_00_width = $14 33 10000 ???? 00 00 vertical_shooting_explosion_07_mode = $00 34 10000 ???? 00 0c vertical_shooting_explosion_07_width_twoscompliment = $0c 35 10000 ???? 00 14 vertical_shooting_explosion_07_width = $14 36 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_mode = $00 37 10000 ???? 00 1e vertical_shooting_explosion_06_tallsprite_00_width_twoscompliment = $1e 38 10000 ???? 00 02 vertical_shooting_explosion_06_tallsprite_00_width = $02 39 10000 ???? 00 00 vertical_shooting_explosion_06_mode = $00 40 10000 ???? 00 1e vertical_shooting_explosion_06_width_twoscompliment = $1e 41 10000 ???? 00 02 vertical_shooting_explosion_06_width = $02 42 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_mode = $00 43 10000 ???? 00 1e vertical_shooting_explosion_05_tallsprite_00_width_twoscompliment = $1e 44 10000 ???? 00 02 vertical_shooting_explosion_05_tallsprite_00_width = $02 45 10000 ???? 00 00 vertical_shooting_explosion_05_mode = $00 46 10000 ???? 00 1e vertical_shooting_explosion_05_width_twoscompliment = $1e 47 10000 ???? 00 02 vertical_shooting_explosion_05_width = $02 48 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_mode = $00 49 10000 ???? 00 1e vertical_shooting_explosion_04_tallsprite_00_width_twoscompliment = $1e 50 10000 ???? 00 02 vertical_shooting_explosion_04_tallsprite_00_width = $02 51 10000 ???? 00 00 vertical_shooting_explosion_04_mode = $00 52 10000 ???? 00 1e vertical_shooting_explosion_04_width_twoscompliment = $1e 53 10000 ???? 00 02 vertical_shooting_explosion_04_width = $02 54 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_mode = $00 55 10000 ???? 00 1e vertical_shooting_explosion_03_tallsprite_00_width_twoscompliment = $1e 56 10000 ???? 00 02 vertical_shooting_explosion_03_tallsprite_00_width = $02 57 10000 ???? 00 00 vertical_shooting_explosion_03_mode = $00 58 10000 ???? 00 1e vertical_shooting_explosion_03_width_twoscompliment = $1e 59 10000 ???? 00 02 vertical_shooting_explosion_03_width = $02 60 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_mode = $00 61 10000 ???? 00 1e vertical_shooting_explosion_02_tallsprite_00_width_twoscompliment = $1e 62 10000 ???? 00 02 vertical_shooting_explosion_02_tallsprite_00_width = $02 63 10000 ???? 00 00 vertical_shooting_explosion_02_mode = $00 64 10000 ???? 00 1e vertical_shooting_explosion_02_width_twoscompliment = $1e 65 10000 ???? 00 02 vertical_shooting_explosion_02_width = $02 66 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_mode = $00 67 10000 ???? 00 1e vertical_shooting_explosion_01_tallsprite_00_width_twoscompliment = $1e 68 10000 ???? 00 02 vertical_shooting_explosion_01_tallsprite_00_width = $02 69 10000 ???? 00 00 vertical_shooting_explosion_01_mode = $00 70 10000 ???? 00 1e vertical_shooting_explosion_01_width_twoscompliment = $1e 71 10000 ???? 00 02 vertical_shooting_explosion_01_width = $02 72 10000 ???? 00 00 vertical_shooting_1up_mode = $00 73 10000 ???? 00 1e vertical_shooting_1up_width_twoscompliment = $1e 74 10000 ???? 00 02 vertical_shooting_1up_width = $02 75 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_01_mode = $00 76 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_01_width_twoscompliment = $00 77 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_01_width = $00 78 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_mode = $00 79 10000 ???? 00 1e vertical_shooting_enemy01_tallsprite_00_width_twoscompliment = $1e 80 10000 ???? 00 02 vertical_shooting_enemy01_tallsprite_00_width = $02 81 10000 ???? 00 00 vertical_shooting_enemy01_mode = $00 82 10000 ???? 00 1e vertical_shooting_enemy01_width_twoscompliment = $1e 83 10000 ???? 00 02 vertical_shooting_enemy01_width = $02 84 10000 ???? 00 00 vertical_shooting_powerup_mode = $00 85 10000 ???? 00 1e vertical_shooting_powerup_width_twoscompliment = $1e 86 10000 ???? 00 02 vertical_shooting_powerup_width = $02 87 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 88 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 89 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 90 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 91 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 92 10000 ???? 00 01 vertical_shooting_bullet_width = $01 93 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 94 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 95 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 96 10000 ???? 00 00 vertical_shooting_ship_mode = $00 97 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 98 10000 ???? 00 02 vertical_shooting_ship_width = $02 99 10000 ???? 00 00 vertical_shooting_font_mode = $00 100 10000 ???? 00 13 vertical_shooting_font_width_twoscompliment = $13 101 10000 ???? 00 2d vertical_shooting_font_width = $2d 102 10000 ???? 00 90 sfx_explosion_length = .skipL0266-sfx_explosion 103 10000 ???? 104 10000 ???? 00 30 sfx_plainlaser_length = .skipL0265-sfx_plainlaser 105 10000 ???? 106 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0264-sfx_pulsecannon 107 10000 ???? 108 10000 ???? 00 36 sfx_bling_length = .skipL0263-sfx_bling 109 10000 ???? 110 10000 ???? 00 04 vertical_shooting_laser_tallsprite_00_color3 = $04 111 10000 ???? 00 42 vertical_shooting_laser_tallsprite_00_color2 = $42 112 10000 ???? 00 0f vertical_shooting_laser_tallsprite_00_color1 = $0f 113 10000 ???? 00 00 vertical_shooting_laser_tallsprite_00_color0 = $00 114 10000 ???? 00 04 vertical_shooting_laser_color3 = $04 115 10000 ???? 00 42 vertical_shooting_laser_color2 = $42 116 10000 ???? 00 0f vertical_shooting_laser_color1 = $0f 117 10000 ???? 00 00 vertical_shooting_laser_color0 = $00 118 10000 ???? 00 33 vertical_shooting_explosion_10_tallsprite_00_color3 = $33 119 10000 ???? 00 2b vertical_shooting_explosion_10_tallsprite_00_color2 = $2b 120 10000 ???? 00 36 vertical_shooting_explosion_10_tallsprite_00_color1 = $36 121 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_color0 = $00 122 10000 ???? 00 33 vertical_shooting_explosion_10_color3 = $33 123 10000 ???? 00 2b vertical_shooting_explosion_10_color2 = $2b 124 10000 ???? 00 36 vertical_shooting_explosion_10_color1 = $36 125 10000 ???? 00 00 vertical_shooting_explosion_10_color0 = $00 126 10000 ???? 00 33 vertical_shooting_explosion_09_tallsprite_00_color3 = $33 127 10000 ???? 00 2b vertical_shooting_explosion_09_tallsprite_00_color2 = $2b 128 10000 ???? 00 36 vertical_shooting_explosion_09_tallsprite_00_color1 = $36 129 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_color0 = $00 130 10000 ???? 00 33 vertical_shooting_explosion_09_color3 = $33 131 10000 ???? 00 2b vertical_shooting_explosion_09_color2 = $2b 132 10000 ???? 00 36 vertical_shooting_explosion_09_color1 = $36 133 10000 ???? 00 00 vertical_shooting_explosion_09_color0 = $00 134 10000 ???? 00 33 vertical_shooting_explosion_08_tallsprite_00_color3 = $33 135 10000 ???? 00 2b vertical_shooting_explosion_08_tallsprite_00_color2 = $2b 136 10000 ???? 00 36 vertical_shooting_explosion_08_tallsprite_00_color1 = $36 137 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_color0 = $00 138 10000 ???? 00 33 vertical_shooting_explosion_08_color3 = $33 139 10000 ???? 00 2b vertical_shooting_explosion_08_color2 = $2b 140 10000 ???? 00 36 vertical_shooting_explosion_08_color1 = $36 141 10000 ???? 00 00 vertical_shooting_explosion_08_color0 = $00 142 10000 ???? 00 33 vertical_shooting_explosion_07_tallsprite_00_color3 = $33 143 10000 ???? 00 2b vertical_shooting_explosion_07_tallsprite_00_color2 = $2b 144 10000 ???? 00 36 vertical_shooting_explosion_07_tallsprite_00_color1 = $36 145 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_color0 = $00 146 10000 ???? 00 33 vertical_shooting_explosion_07_color3 = $33 147 10000 ???? 00 2b vertical_shooting_explosion_07_color2 = $2b 148 10000 ???? 00 36 vertical_shooting_explosion_07_color1 = $36 149 10000 ???? 00 00 vertical_shooting_explosion_07_color0 = $00 150 10000 ???? 00 33 vertical_shooting_explosion_06_tallsprite_00_color3 = $33 151 10000 ???? 00 2b vertical_shooting_explosion_06_tallsprite_00_color2 = $2b 152 10000 ???? 00 36 vertical_shooting_explosion_06_tallsprite_00_color1 = $36 153 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_color0 = $00 154 10000 ???? 00 33 vertical_shooting_explosion_06_color3 = $33 155 10000 ???? 00 2b vertical_shooting_explosion_06_color2 = $2b 156 10000 ???? 00 36 vertical_shooting_explosion_06_color1 = $36 157 10000 ???? 00 00 vertical_shooting_explosion_06_color0 = $00 158 10000 ???? 00 33 vertical_shooting_explosion_05_tallsprite_00_color3 = $33 159 10000 ???? 00 2b vertical_shooting_explosion_05_tallsprite_00_color2 = $2b 160 10000 ???? 00 36 vertical_shooting_explosion_05_tallsprite_00_color1 = $36 161 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_color0 = $00 162 10000 ???? 00 33 vertical_shooting_explosion_05_color3 = $33 163 10000 ???? 00 2b vertical_shooting_explosion_05_color2 = $2b 164 10000 ???? 00 36 vertical_shooting_explosion_05_color1 = $36 165 10000 ???? 00 00 vertical_shooting_explosion_05_color0 = $00 166 10000 ???? 00 33 vertical_shooting_explosion_04_tallsprite_00_color3 = $33 167 10000 ???? 00 36 vertical_shooting_explosion_04_tallsprite_00_color2 = $36 168 10000 ???? 00 2b vertical_shooting_explosion_04_tallsprite_00_color1 = $2b 169 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_color0 = $00 170 10000 ???? 00 33 vertical_shooting_explosion_04_color3 = $33 171 10000 ???? 00 36 vertical_shooting_explosion_04_color2 = $36 172 10000 ???? 00 2b vertical_shooting_explosion_04_color1 = $2b 173 10000 ???? 00 00 vertical_shooting_explosion_04_color0 = $00 174 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color3 = 0 175 10000 ???? 00 36 vertical_shooting_explosion_03_tallsprite_00_color2 = $36 176 10000 ???? 00 2b vertical_shooting_explosion_03_tallsprite_00_color1 = $2b 177 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color0 = $00 178 10000 ???? 00 00 vertical_shooting_explosion_03_color3 = 0 179 10000 ???? 00 36 vertical_shooting_explosion_03_color2 = $36 180 10000 ???? 00 2b vertical_shooting_explosion_03_color1 = $2b 181 10000 ???? 00 00 vertical_shooting_explosion_03_color0 = $00 182 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color3 = 0 183 10000 ???? 00 36 vertical_shooting_explosion_02_tallsprite_00_color2 = $36 184 10000 ???? 00 2b vertical_shooting_explosion_02_tallsprite_00_color1 = $2b 185 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color0 = $00 186 10000 ???? 00 00 vertical_shooting_explosion_02_color3 = 0 187 10000 ???? 00 36 vertical_shooting_explosion_02_color2 = $36 188 10000 ???? 00 2b vertical_shooting_explosion_02_color1 = $2b 189 10000 ???? 00 00 vertical_shooting_explosion_02_color0 = $00 190 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color3 = 0 191 10000 ???? 00 2b vertical_shooting_explosion_01_tallsprite_00_color2 = $2b 192 10000 ???? 00 36 vertical_shooting_explosion_01_tallsprite_00_color1 = $36 193 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color0 = $00 194 10000 ???? 00 00 vertical_shooting_explosion_01_color3 = 0 195 10000 ???? 00 2b vertical_shooting_explosion_01_color2 = $2b 196 10000 ???? 00 36 vertical_shooting_explosion_01_color1 = $36 197 10000 ???? 00 00 vertical_shooting_explosion_01_color0 = $00 198 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 199 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 200 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 201 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 202 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 203 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 204 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 205 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 206 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 207 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 208 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 209 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 210 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 211 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 212 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 213 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 214 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 215 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 216 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 217 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 218 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 219 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 220 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 221 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 222 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 223 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 224 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 225 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 226 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 227 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 228 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 229 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 230 10000 ???? 00 0f vertical_shooting_font_color1 = $0f 231 10000 ???? 00 00 vertical_shooting_font_color0 = $00 232 10000 ???? 01 6b enemy01_Slowdown = var43 233 10000 ???? 234 10000 ???? 01 6a isDead_flag = var42 235 10000 ???? 236 10000 ???? 01 69 continue_flag = var41 237 10000 ???? 238 10000 ???? 01 68 twinlaser_Slowdown = var40 239 10000 ???? 240 10000 ???? 01 67 twinlaser_flag = var39 241 10000 ???? 242 10000 ???? 01 66 twinlaserY = var38 243 10000 ???? 244 10000 ???? 01 65 twinlaserX = var37 245 10000 ???? 246 10000 ???? 01 64 lives = var36 247 10000 ???? 248 10000 ???? 01 63 explosion_aniframe = var35 249 10000 ???? 250 10000 ???? 01 62 extra_shipFlag = var34 251 10000 ???? 252 10000 ???? 01 61 extra_shipY = var33 253 10000 ???? 254 10000 ???? 01 60 extra_shipX = var32 255 10000 ???? 256 10000 ???? 01 5f gameover_flag = var31 257 10000 ???? 258 10000 ???? 01 5e enemy01_speed = var30 259 10000 ???? 260 10000 ???? 01 5d rMovement6 = var29 261 10000 ???? 262 10000 ???? 01 5c rMovement5 = var28 263 10000 ???? 264 10000 ???? 01 5b rMovement4 = var27 265 10000 ???? 266 10000 ???? 01 5a rMovement3 = var26 267 10000 ???? 268 10000 ???? 01 59 enemy01_Flag = var25 269 10000 ???? 270 10000 ???? 01 58 enemy01_Y = var24 271 10000 ???? 272 10000 ???? 01 57 enemy01_X = var23 273 10000 ???? 274 10000 ???? 01 56 enemy_shotSlowdown = var22 275 10000 ???? 276 10000 ???? 01 55 bulletSlowdown = var21 277 10000 ???? 278 10000 ???? 01 54 power_upSlowdown = var20 279 10000 ???? 280 10000 ???? 01 53 rMovement2 = var19 281 10000 ???? 282 10000 ???? 01 52 power_upFlag = var18 283 10000 ???? 284 10000 ???? 01 51 power_upY = var17 285 10000 ???? 286 10000 ???? 01 50 power_upX = var16 287 10000 ???? 288 10000 ???? 01 4f rDirection = var15 289 10000 ???? 290 10000 ???? 01 4e rMovement1 = var14 291 10000 ???? 292 10000 ???? 01 4d playerFlag = var13 293 10000 ???? 294 10000 ???? 01 4c enemy_shotFlag = var12 295 10000 ???? 296 10000 ???? 01 4b enemy_shotY = var11 297 10000 ???? 298 10000 ???? 01 4a enemy_shotX = var10 299 10000 ???? 300 10000 ???? 01 49 bulletY = var9 301 10000 ???? 302 10000 ???? 01 48 bulletX = var8 303 10000 ???? 304 10000 ???? 01 47 joyposright = var7 305 10000 ???? 306 10000 ???? 01 46 joyposleft = var6 307 10000 ???? 308 10000 ???? 01 45 joyposdown = var5 309 10000 ???? 310 10000 ???? 01 44 joyposup = var4 311 10000 ???? 312 10000 ???? 01 43 fire_debounce = var3 313 10000 ???? 314 10000 ???? 01 42 playerY = var2 315 10000 ???? 316 10000 ???? 01 41 playerX = var1 317 10000 ???? 318 10000 ???? 01 40 frameCounter = var0 319 10000 ???? 320 10000 ???? 00 01 collisionwrap = 1 321 10000 ???? 00 01 NTSC = 1 322 10000 ???? 00 c0 SCREENHEIGHT = 192 323 10000 ???? 00 01 CHECKOVERWRITE = 1 324 10000 ???? 00 08 ZONEHEIGHT = 8 325 10000 ???? 00 01 ROM48K = 1 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm 545 10000 ???? 546 10000 ???? ; A BEAD header gets automatically incorportated into the ROM header. 547 10000 ???? ; For more BEAD executable info, check out the spec... 548 10000 ???? ; http://7800.8bitdev.org/index.php/The_Atari_7800_BEAD_Execuable_Specification 549 10000 ???? 550 10000 ???? 00 01 GAMEDESCRIPTIONSET = 1 551 10000 ???? 4e 61 6d 65 GAMEDESCRIPTION = "Test Name" 552 10000 ???? 553 10000 ???? 00 40 BDHSC = %01000000 554 10000 ???? 00 20 BDYM = %00100000 555 10000 ???? 00 10 BDPOKEY = %00010000 556 10000 ???? 00 08 BDROF = %00001000 557 10000 ???? 00 00 BD16K = %00000000 558 10000 ???? 00 01 BD32K = %00000001 559 10000 ???? 00 02 BD48K = %00000010 560 10000 ???? 00 05 BD1800 = %00000101 561 10000 ???? 00 06 BD4000 = %00000110 562 10000 ???? 563 10000 ???? - ifconst ROM16K 564 10000 ???? -BEADHEADER = 1 565 10000 ???? endif 566 10000 ???? - ifconst ROM32K 567 10000 ???? -BEADHEADER = 1 568 10000 ???? endif 569 10000 ???? ifconst ROM48K 570 10000 ???? 00 01 BEADHEADER = 1 571 10000 ???? endif 572 10000 ???? 573 10000 ???? ifconst BEADHEADER 574 10000 ???? BEADHARDWARE SET 0 575 10000 ???? - ifconst ROM16K 576 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BD16K) 577 10000 ???? endif 578 10000 ???? - ifconst ROM32K 579 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BD32K) 580 10000 ???? endif 581 10000 ???? ifconst ROM48K 582 10000 ???? BEADHARDWARE SET (BEADHARDWARE|BD48K) 583 10000 ???? endif 584 10000 ???? - ifconst pokeysupport 585 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BDPOKEY) 586 10000 ???? endif 587 10000 ???? - ifconst HSSUPPORT 588 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BDHSC) 589 10000 ???? endif 590 10000 ???? endif 591 10000 ???? 592 10000 ???? ;start address of cart... 593 10000 ???? ifconst ROM48K 594 4000 ORG $4000,0 595 4000 ifconst BEADHEADER 596 4000 be ad 02 .byte.b $BE,$AD,BEADHARDWARE 597 4003 ifconst GAMEDESCRIPTIONSET 598 4003 18 CLC 599 4004 90 0a BCC _SKIPDESCRIPTION 600 4006 54 65 73 74* .byte.b GAMEDESCRIPTION,0 601 4010 _SKIPDESCRIPTION 602 4010 endif 603 4010 6c fc ff jmp ($FFFC) 604 4013 endif 605 4013 - else 606 4013 - ifconst bankswitchmode 607 4013 - ifconst ROMAT4K 608 4013 - ORG $4000,0 609 4013 - RORG $4000 610 4013 - else 611 4013 - ORG $8000,0 612 4013 - RORG $8000 613 4013 - endif 614 4013 - else ; not bankswitchmode 615 4013 - ifconst ROM16K 616 4013 - ORG $C000,0 617 4013 - ifconst BEADHEADER 618 4013 - .byte $BE,$AD,BEADHARDWARE 619 4013 - ifconst GAMEDESCRIPTION 620 4013 - CLC 621 4013 - BCC _SKIPDESCRIPTION 622 4013 - .byte GAMEDESCRIPTION,0 623 4013 -_SKIPDESCRIPTION 624 4013 - endif 625 4013 - jmp ($FFFC) 626 4013 - endif 627 4013 - else 628 4013 - ifconst ROM8K 629 4013 - ORG $E000,0 630 4013 - else 631 4013 - ORG $8000,0 632 4013 - ifconst BEADHEADER 633 4013 - .byte $BE,$AD,BEADHARDWARE 634 4013 - ifconst GAMEDESCRIPTION 635 4013 - CLC 636 4013 - BCC _SKIPDESCRIPTION 637 4013 - .byte GAMEDESCRIPTION,0 638 4013 -_SKIPDESCRIPTION 639 4013 - endif 640 4013 - jmp ($FFFC) 641 4013 - endif 642 4013 - endif 643 4013 - endif 644 4013 - endif 645 4013 endif 646 4013 647 4013 ;7800basic v0.16 Nov 21 2020 15:38:52 648 4013 SPACEOVERFLOW SET 0 649 4013 game 650 4013 . 651 4013 ;; 652 4013 653 4013 . 654 4013 ;; 655 4013 656 4013 .L00 ;; set romsize 48k 657 4013 658 4013 .L01 ;; set zoneheight 8 659 4013 660 4013 .L02 ;; set zoneprotection on 661 4013 662 4013 .L03 ;; set tallsprite on 663 4013 664 4013 .L04 ;; set screenheight 192 665 4013 666 4013 .L05 ;; set basepath gfx 667 4013 668 4013 .L06 ;; set tv ntsc 669 4013 670 4013 .L07 ;; set collisionwrap on 671 4013 672 4013 .L08 ;; set doublewide off 673 4013 674 4013 .L09 ;; displaymode 160A 675 4013 676 4013 a9 40 lda #%01000000 ;Enable DMA, mode=160x2/160x4 677 4015 85 3c sta CTRL 678 4017 679 4017 8d 07 21 sta sCTRL 680 401a 681 401a . 682 401a ;; 683 401a 684 401a .L010 ;; dim frameCounter = var0 685 401a 686 401a .L011 ;; dim playerX = var1 687 401a 688 401a .L012 ;; dim playerY = var2 689 401a 690 401a .L013 ;; dim fire_debounce = var3 691 401a 692 401a . 693 401a ;; 694 401a 695 401a . 696 401a ;; 697 401a 698 401a . 699 401a ;; 700 401a 701 401a . 702 401a ;; 703 401a 704 401a . 705 401a ;; 706 401a 707 401a . 708 401a ;; 709 401a 710 401a . 711 401a ;; 712 401a 713 401a . 714 401a ;; 715 401a 716 401a . 717 401a ;; 718 401a 719 401a . 720 401a ;; 721 401a 722 401a . 723 401a ;; 724 401a 725 401a . 726 401a ;; 727 401a 728 401a . 729 401a ;; 730 401a 731 401a . 732 401a ;; 733 401a 734 401a . 735 401a ;; 736 401a 737 401a . 738 401a ;; 739 401a 740 401a .L014 ;; dim joyposup = var4 741 401a 742 401a .L015 ;; dim joyposdown = var5 743 401a 744 401a .L016 ;; dim joyposleft = var6 745 401a 746 401a .L017 ;; dim joyposright = var7 747 401a 748 401a .L018 ;; dim bulletX = var8 749 401a 750 401a .L019 ;; dim bulletY = var9 751 401a 752 401a .L020 ;; dim enemy_shotX = var10 753 401a 754 401a .L021 ;; dim enemy_shotY = var11 755 401a 756 401a .L022 ;; dim enemy_shotFlag = var12 757 401a 758 401a .L023 ;; dim playerFlag = var13 759 401a 760 401a .L024 ;; dim rMovement1 = var14 761 401a 762 401a .L025 ;; dim rDirection = var15 763 401a 764 401a .L026 ;; dim power_upX = var16 765 401a 766 401a .L027 ;; dim power_upY = var17 767 401a 768 401a .L028 ;; dim power_upFlag = var18 769 401a 770 401a .L029 ;; dim rMovement2 = var19 771 401a 772 401a .L030 ;; dim power_upSlowdown = var20 773 401a 774 401a .L031 ;; dim bulletSlowdown = var21 775 401a 776 401a .L032 ;; dim enemy_shotSlowdown = var22 777 401a 778 401a .L033 ;; dim enemy01_X = var23 779 401a 780 401a .L034 ;; dim enemy01_Y = var24 781 401a 782 401a .L035 ;; dim enemy01_Flag = var25 783 401a 784 401a .L036 ;; dim rMovement3 = var26 785 401a 786 401a .L037 ;; dim rMovement4 = var27 787 401a 788 401a .L038 ;; dim rMovement5 = var28 789 401a 790 401a .L039 ;; dim rMovement6 = var29 791 401a 792 401a .L040 ;; dim enemy01_speed = var30 793 401a 794 401a .L041 ;; dim gameover_flag = var31 795 401a 796 401a .L042 ;; dim extra_shipX = var32 797 401a 798 401a .L043 ;; dim extra_shipY = var33 799 401a 800 401a .L044 ;; dim extra_shipFlag = var34 801 401a 802 401a .L045 ;; dim explosion_aniframe = var35 803 401a 804 401a .L046 ;; dim lives = var36 805 401a 806 401a .L047 ;; dim twinlaserX = var37 807 401a 808 401a .L048 ;; dim twinlaserY = var38 809 401a 810 401a .L049 ;; dim twinlaser_flag = var39 811 401a 812 401a .L050 ;; dim twinlaser_Slowdown = var40 813 401a 814 401a .L051 ;; dim continue_flag = var41 815 401a 816 401a .L052 ;; dim isDead_flag = var42 817 401a 818 401a .L053 ;; dim enemy01_Slowdown = var43 819 401a 820 401a . 821 401a ;; 822 401a 823 401a . 824 401a ;; 825 401a 826 401a .L054 ;; characterset vertical_shooting_font 827 401a 828 401a a9 b0 lda #>vertical_shooting_font 829 401c 8d 0b 21 sta sCHARBASE 830 401f 831 401f 85 34 sta CHARBASE 832 4021 a9 60 lda #(vertical_shooting_font_mode | %01100000) 833 4023 8d 06 21 sta charactermode 834 4026 835 4026 .L055 ;; alphachars ' 0123456789abcdefghijklmnopqrstuvwxyz.,?!:;`"' 836 4026 837 4026 . 838 4026 ;; 839 4026 840 4026 .import 841 4026 ;; import 842 4026 843 4026 . 844 4026 ;; 845 4026 846 4026 .L056 ;; incgraphic vertical_shooting_font.png 160A 847 4026 848 4026 .L057 ;; incgraphic vertical_shooting_ship.png 160A 849 4026 850 4026 .L058 ;; incgraphic vertical_shooting_bullet.png 160A 851 4026 852 4026 .L059 ;; incgraphic vertical_shooting_enemyshot.png 160A 853 4026 854 4026 .L060 ;; incgraphic vertical_shooting_powerup.png 160A 855 4026 856 4026 .L061 ;; incgraphic vertical_shooting_enemy01.png 160A 857 4026 858 4026 .L062 ;; newblock 859 4026 860 4026 . 861 4026 ;; 862 4026 863 4026 .L063 ;; incgraphic vertical_shooting_1up.png 160A 864 4026 865 4026 .L064 ;; incgraphic vertical_shooting_explosion_01.png 160A 866 4026 867 4026 .L065 ;; incgraphic vertical_shooting_explosion_02.png 160A 868 4026 869 4026 .L066 ;; incgraphic vertical_shooting_explosion_03.png 160A 870 4026 871 4026 .L067 ;; incgraphic vertical_shooting_explosion_04.png 160A 872 4026 873 4026 .L068 ;; incgraphic vertical_shooting_explosion_05.png 160A 874 4026 875 4026 .L069 ;; incgraphic vertical_shooting_explosion_06.png 160A 876 4026 877 4026 .L070 ;; incgraphic vertical_shooting_explosion_07.png 160A 878 4026 879 4026 .L071 ;; incgraphic vertical_shooting_explosion_08.png 160A 880 4026 881 4026 .L072 ;; incgraphic vertical_shooting_explosion_09.png 160A 882 4026 883 4026 .L073 ;; incgraphic vertical_shooting_explosion_10.png 160A 884 4026 885 4026 .L074 ;; incgraphic vertical_shooting_laser.png 160A 886 4026 887 4026 . 888 4026 ;; 889 4026 890 4026 .L075 ;; newblock 891 4026 892 4026 .L076 ;; newblock 893 4026 894 4026 . 895 4026 ;; 896 4026 897 4026 . 898 4026 ;; 899 4026 900 4026 .L077 ;; dmahole 0 901 4026 902 4026 4c 00 b8 jmp dmahole_0 903 4029 gameend 904 4029 DMAHOLEEND2 SET . 28631 bytes of ROM space left in the main area. 905 4029 echo " ",[($B000 - gameend)]d , "bytes of ROM space left in the main area." 906 4029 - if ($B000 - gameend) < 0 907 4029 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 908 4029 endif 909 4029 910 b000 ORG $B000,0 ; ************* 911 b000 912 b000 vertical_shooting_font 913 b000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 914 b020 00 00 00 00* HEX 00000000000000000000000000 915 b02d vertical_shooting_ship 916 b02d 07 d0 HEX 07d0 917 b02f vertical_shooting_ship_tallsprite_00 918 b02f 80 02 HEX 8002 919 b031 vertical_shooting_bullet 920 b031 28 HEX 28 921 b032 vertical_shooting_enemyshot 922 b032 00 HEX 00 923 b033 vertical_shooting_powerup 924 b033 28 00 HEX 2800 925 b035 vertical_shooting_enemy01 926 b035 09 e0 HEX 09e0 927 b037 vertical_shooting_enemy01_tallsprite_00 928 b037 40 03 HEX 4003 929 b039 930 b100 ORG $B100,0 ; ************* 931 b100 932 b100 ;vertical_shooting_font 933 b100 00 54 54 54* HEX 0054545454045454045404445054505440544454104454444410401444501014 934 b120 10 44 44 10* HEX 10444410544040101040400000 935 b12d ;vertical_shooting_ship 936 b12d 07 d0 HEX 07d0 937 b12f ;vertical_shooting_ship_tallsprite_00 938 b12f 80 02 HEX 8002 939 b131 ;vertical_shooting_bullet 940 b131 28 HEX 28 941 b132 ;vertical_shooting_enemyshot 942 b132 88 HEX 88 943 b133 ;vertical_shooting_powerup 944 b133 78 08 HEX 7808 945 b135 ;vertical_shooting_enemy01 946 b135 09 e0 HEX 09e0 947 b137 ;vertical_shooting_enemy01_tallsprite_00 948 b137 50 0f HEX 500f 949 b139 950 b200 ORG $B200,0 ; ************* 951 b200 952 b200 ;vertical_shooting_font 953 b200 00 44 10 40* HEX 0044104004040444044404444440444040444410444440444444404444041044 954 b220 10 54 44 10* HEX 10544410400010000000100000 955 b22d ;vertical_shooting_ship 956 b22d 03 c0 HEX 03c0 957 b22f ;vertical_shooting_ship_tallsprite_00 958 b22f a1 4a HEX a14a 959 b231 ;vertical_shooting_bullet 960 b231 3c HEX 3c 961 b232 ;vertical_shooting_enemyshot 962 b232 10 HEX 10 963 b233 ;vertical_shooting_powerup 964 b233 78 1e HEX 781e 965 b235 ;vertical_shooting_enemy01 966 b235 19 ec HEX 19ec 967 b237 ;vertical_shooting_enemy01_tallsprite_00 968 b237 5a af HEX 5aaf 969 b239 970 b300 ORG $B300,0 ; ************* 971 b300 972 b300 ;vertical_shooting_font 973 b300 00 44 10 40* HEX 0044104004040444044404444440444040444410044440444444404444041044 974 b320 54 54 44 10* HEX 54544410100000101000000000 975 b32d ;vertical_shooting_ship 976 b32d 01 40 HEX 0140 977 b32f ;vertical_shooting_ship_tallsprite_00 978 b32f a5 5a HEX a55a 979 b331 ;vertical_shooting_bullet 980 b331 3c HEX 3c 981 b332 ;vertical_shooting_enemyshot 982 b332 74 HEX 74 983 b333 ;vertical_shooting_powerup 984 b333 7a a4 HEX 7aa4 985 b335 ;vertical_shooting_enemy01 986 b335 59 ef HEX 59ef 987 b337 ;vertical_shooting_enemy01_tallsprite_00 988 b337 59 ef HEX 59ef 989 b339 990 b400 ORG $B400,0 ; ************* 991 b400 992 b400 ;vertical_shooting_font 993 b400 00 44 10 54* HEX 0044105454545454045454545040445454445410045040544444504450101044 994 b420 44 44 10 10* HEX 44441010100000101000000000 995 b42d ;vertical_shooting_ship 996 b42d 01 40 HEX 0140 997 b42f ;vertical_shooting_ship_tallsprite_00 998 b42f a5 5a HEX a55a 999 b431 ;vertical_shooting_bullet 1000 b431 14 HEX 14 1001 b432 ;vertical_shooting_enemyshot 1002 b432 74 HEX 74 1003 b433 ;vertical_shooting_powerup 1004 b433 75 7a HEX 757a 1005 b435 ;vertical_shooting_enemy01 1006 b435 59 6f HEX 596f 1007 b437 ;vertical_shooting_enemy01_tallsprite_00 1008 b437 59 ef HEX 59ef 1009 b439 1010 b500 ORG $B500,0 ; ************* 1011 b500 1012 b500 ;vertical_shooting_font 1013 b500 00 44 10 04* HEX 0044100404444040044444444440444040404410044440544444444444401044 1014 b520 44 44 44 54* HEX 44444454100000041000000000 1015 b52d ;vertical_shooting_ship 1016 b52d 01 40 HEX 0140 1017 b52f ;vertical_shooting_ship_tallsprite_00 1018 b52f a5 5a HEX a55a 1019 b531 ;vertical_shooting_bullet 1020 b531 14 HEX 14 1021 b532 ;vertical_shooting_enemyshot 1022 b532 74 HEX 74 1023 b533 ;vertical_shooting_powerup 1024 b533 78 1e HEX 781e 1025 b535 ;vertical_shooting_enemy01 1026 b535 5a af HEX 5aaf 1027 b537 ;vertical_shooting_enemy01_tallsprite_00 1028 b537 19 ec HEX 19ec 1029 b539 1030 b600 ORG $B600,0 ; ************* 1031 b600 1032 b600 ;vertical_shooting_font 1033 b600 00 44 50 04* HEX 0044500404444040044444444440444040404410044440544444444444401044 1034 b620 44 44 44 44* HEX 44444444040000441000001044 1035 b62d ;vertical_shooting_ship 1036 b62d 01 40 HEX 0140 1037 b62f ;vertical_shooting_ship_tallsprite_00 1038 b62f a7 da HEX a7da 1039 b631 ;vertical_shooting_bullet 1040 b631 14 HEX 14 1041 b632 ;vertical_shooting_enemyshot 1042 b632 10 HEX 10 1043 b633 ;vertical_shooting_powerup 1044 b633 7a bc HEX 7abc 1045 b635 ;vertical_shooting_enemy01 1046 b635 50 07 HEX 5007 1047 b637 ;vertical_shooting_enemy01_tallsprite_00 1048 b637 09 e0 HEX 09e0 1049 b639 1050 b700 ORG $B700,0 ; ************* 1051 b700 1052 b700 ;vertical_shooting_font 1053 b700 00 54 10 54* HEX 0054105454445454545454545054505454544454044440445010501050145444 1054 b720 44 44 44 44* HEX 44444444540000101040401044 1055 b72d ;vertical_shooting_ship 1056 b72d 01 40 HEX 0140 1057 b72f ;vertical_shooting_ship_tallsprite_00 1058 b72f 27 d8 HEX 27d8 1059 b731 ;vertical_shooting_bullet 1060 b731 00 HEX 00 1061 b732 ;vertical_shooting_enemyshot 1062 b732 88 HEX 88 1063 b733 ;vertical_shooting_powerup 1064 b733 55 50 HEX 5550 1065 b735 ;vertical_shooting_enemy01 1066 b735 40 01 HEX 4001 1067 b737 ;vertical_shooting_enemy01_tallsprite_00 1068 b737 09 e0 HEX 09e0 1069 b739 1070 b800 ORG $B800,0 ; ************* 1071 b800 dmahole_0 1072 b800 DMAHOLESTART0 SET . 1073 b800 . 1074 b800 ;; 1075 b800 1076 b800 . 1077 b800 ;; 1078 b800 1079 b800 .palettes 1080 b800 ;; palettes 1081 b800 1082 b800 .L078 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 1083 b800 1084 b800 a9 0f LDA #$0F 1085 b802 85 21 STA P0C1 1086 b804 a9 05 LDA #$05 1087 b806 85 22 STA P0C2 1088 b808 a9 32 LDA #$32 1089 b80a 85 23 STA P0C3 1090 b80c .L079 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 1091 b80c 1092 b80c a9 0f LDA #$0F 1093 b80e 85 25 STA P1C1 1094 b810 a9 ee LDA #$EE 1095 b812 85 26 STA P1C2 1096 b814 a9 e7 LDA #$E7 1097 b816 85 27 STA P1C3 1098 b818 .L080 ;; P2C1 = $9D : P2C2 = $73 : P2C3 = $88 1099 b818 1100 b818 a9 9d LDA #$9D 1101 b81a 85 29 STA P2C1 1102 b81c a9 73 LDA #$73 1103 b81e 85 2a STA P2C2 1104 b820 a9 88 LDA #$88 1105 b822 85 2b STA P2C3 1106 b824 .L081 ;; P3C1 = $FB : P3C2 = $F2 : P3C3 = $25 1107 b824 1108 b824 a9 fb LDA #$FB 1109 b826 85 2d STA P3C1 1110 b828 a9 f2 LDA #$F2 1111 b82a 85 2e STA P3C2 1112 b82c a9 25 LDA #$25 1113 b82e 85 2f STA P3C3 1114 b830 . 1115 b830 ;; 1116 b830 1117 b830 .plot 1118 b830 ;; plot 1119 b830 1120 b830 .L082 ;; playerX = 80 : playerY = 144 : playerFlag = 0 : fire_debounce = 0 : isDead_flag = 0 1121 b830 1122 b830 a9 50 LDA #80 1123 b832 8d 41 01 STA playerX 1124 b835 a9 90 LDA #144 1125 b837 8d 42 01 STA playerY 1126 b83a a9 00 LDA #0 1127 b83c 8d 4d 01 STA playerFlag 1128 b83f 8d 43 01 STA fire_debounce 1129 b842 8d 6a 01 STA isDead_flag 1130 b845 .L083 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1131 b845 1132 b845 a9 00 LDA #0 1133 b847 8d 44 01 STA joyposup 1134 b84a 8d 45 01 STA joyposdown 1135 b84d 8d 46 01 STA joyposleft 1136 b850 8d 47 01 STA joyposright 1137 b853 .L084 ;; bulletX = 0 : bulletY = 0 : lives = 3 1138 b853 1139 b853 a9 00 LDA #0 1140 b855 8d 48 01 STA bulletX 1141 b858 8d 49 01 STA bulletY 1142 b85b a9 03 LDA #3 1143 b85d 8d 64 01 STA lives 1144 b860 .L085 ;; enemy_shotX = 0 : enemy_shotY = 0 : enemy_shotFlag = 0 1145 b860 1146 b860 a9 00 LDA #0 1147 b862 8d 4a 01 STA enemy_shotX 1148 b865 8d 4b 01 STA enemy_shotY 1149 b868 8d 4c 01 STA enemy_shotFlag 1150 b86b .L086 ;; rMovement1 = 1 : rMovement2 = 1 : rMovement3 = 1 : rMovement4 = 1 1151 b86b 1152 b86b a9 01 LDA #1 1153 b86d 8d 4e 01 STA rMovement1 1154 b870 8d 53 01 STA rMovement2 1155 b873 8d 5a 01 STA rMovement3 1156 b876 8d 5b 01 STA rMovement4 1157 b879 .L087 ;; rMovement5 = 1 : rMovement6 = 1 : rDirection = 1 1158 b879 1159 b879 a9 01 LDA #1 1160 b87b 8d 5c 01 STA rMovement5 1161 b87e 8d 5d 01 STA rMovement6 1162 b881 8d 4f 01 STA rDirection 1163 b884 .L088 ;; power_upX = 5 : power_upY = 32 : power_upFlag = 0 1164 b884 1165 b884 a9 05 LDA #5 1166 b886 8d 50 01 STA power_upX 1167 b889 a9 20 LDA #32 1168 b88b 8d 51 01 STA power_upY 1169 b88e a9 00 LDA #0 1170 b890 8d 52 01 STA power_upFlag 1171 b893 .L089 ;; enemy_shotSlowdown = 0 : bulletSlowdown = 0 : power_upSlowdown = 0 1172 b893 1173 b893 a9 00 LDA #0 1174 b895 8d 56 01 STA enemy_shotSlowdown 1175 b898 8d 55 01 STA bulletSlowdown 1176 b89b 8d 54 01 STA power_upSlowdown 1177 b89e .L090 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 : enemy01_speed = 6 1178 b89e 1179 b89e a9 00 LDA #0 1180 b8a0 8d 57 01 STA enemy01_X 1181 b8a3 8d 58 01 STA enemy01_Y 1182 b8a6 8d 59 01 STA enemy01_Flag 1183 b8a9 a9 06 LDA #6 1184 b8ab 8d 5e 01 STA enemy01_speed 1185 b8ae .L091 ;; frameCounter = 0 : gameover_flag = 0 1186 b8ae 1187 b8ae a9 00 LDA #0 1188 b8b0 8d 40 01 STA frameCounter 1189 b8b3 8d 5f 01 STA gameover_flag 1190 b8b6 .L092 ;; extra_shipX = 0 : extra_shipY = 0 : extra_shipFlag = 0 1191 b8b6 1192 b8b6 a9 00 LDA #0 1193 b8b8 8d 60 01 STA extra_shipX 1194 b8bb 8d 61 01 STA extra_shipY 1195 b8be 8d 62 01 STA extra_shipFlag 1196 b8c1 .L093 ;; twinlaserX = 0 : twinlaserY = 0 : twinlaser_flag = 0 : twinlaser_Slowdown = 0 1197 b8c1 1198 b8c1 a9 00 LDA #0 1199 b8c3 8d 65 01 STA twinlaserX 1200 b8c6 8d 66 01 STA twinlaserY 1201 b8c9 8d 67 01 STA twinlaser_flag 1202 b8cc 8d 68 01 STA twinlaser_Slowdown 1203 b8cf .L094 ;; enemy01_Slowdown = 0 1204 b8cf 1205 b8cf a9 00 LDA #0 1206 b8d1 8d 6b 01 STA enemy01_Slowdown 1207 b8d4 . 1208 b8d4 ;; 1209 b8d4 1210 b8d4 . 1211 b8d4 ;; 1212 b8d4 1213 b8d4 .L095 ;; gosub titlescreen 1214 b8d4 1215 b8d4 20 99 da jsr .titlescreen 1216 b8d7 1217 b8d7 . 1218 b8d7 ;; 1219 b8d7 1220 b8d7 .L096 ;; gosub initialise_gamescreen 1221 b8d7 1222 b8d7 20 a6 db jsr .initialise_gamescreen 1223 b8da 1224 b8da . 1225 b8da ;; 1226 b8da 1227 b8da . 1228 b8da ;; 1229 b8da 1230 b8da . 1231 b8da ;; 1232 b8da 1233 b8da .main 1234 b8da ;; main 1235 b8da 1236 b8da .L097 ;; frameCounter = frameCounter + 1 1237 b8da 1238 b8da ad 40 01 LDA frameCounter 1239 b8dd 18 CLC 1240 b8de 69 01 ADC #1 1241 b8e0 8d 40 01 STA frameCounter 1242 b8e3 .L098 ;; if frameCounter > 10 then frameCounter = 0 1243 b8e3 1244 b8e3 a9 0a LDA #10 1245 b8e5 cd 40 01 CMP frameCounter 1246 b8e8 b0 05 BCS .skipL098 1247 b8ea .condpart0 1248 b8ea a9 00 LDA #0 1249 b8ec 8d 40 01 STA frameCounter 1250 b8ef .skipL098 1251 b8ef .mainloop 1252 b8ef ;; mainloop 1253 b8ef 1254 b8ef . 1255 b8ef ;; 1256 b8ef 1257 b8ef . 1258 b8ef ;; 1259 b8ef 1260 b8ef . 1261 b8ef ;; 1262 b8ef 1263 b8ef . 1264 b8ef ;; 1265 b8ef 1266 b8ef . 1267 b8ef ;; 1268 b8ef 1269 b8ef . 1270 b8ef ;; 1271 b8ef 1272 b8ef . 1273 b8ef ;; 1274 b8ef 1275 b8ef . 1276 b8ef ;; 1277 b8ef 1278 b8ef . 1279 b8ef ;; 1280 b8ef 1281 b8ef . 1282 b8ef ;; 1283 b8ef 1284 b8ef . 1285 b8ef ;; 1286 b8ef 1287 b8ef . 1288 b8ef ;; 1289 b8ef 1290 b8ef . 1291 b8ef ;; 1292 b8ef 1293 b8ef .L099 ;; rMovement1 = ( rand & 7 ) - 2 1294 b8ef 1295 b8ef ; complex statement detected 1296 b8ef 20 fd f3 jsr randomize 1297 b8f2 29 07 AND #7 1298 b8f4 38 SEC 1299 b8f5 e9 02 SBC #2 1300 b8f7 8d 4e 01 STA rMovement1 1301 b8fa .L0100 ;; rMovement2 = ( rand & 6 ) 1302 b8fa 1303 b8fa ; complex statement detected 1304 b8fa 20 fd f3 jsr randomize 1305 b8fd 29 06 AND #6 1306 b8ff 8d 53 01 STA rMovement2 1307 b902 .L0101 ;; rMovement3 = ( rand & 3 ) + 1 1308 b902 1309 b902 ; complex statement detected 1310 b902 20 fd f3 jsr randomize 1311 b905 29 03 AND #3 1312 b907 18 CLC 1313 b908 69 01 ADC #1 1314 b90a 8d 5a 01 STA rMovement3 1315 b90d .L0102 ;; rMovement4 = ( rand & 5 ) + 2 1316 b90d 1317 b90d ; complex statement detected 1318 b90d 20 fd f3 jsr randomize 1319 b910 29 05 AND #5 1320 b912 18 CLC 1321 b913 69 02 ADC #2 1322 b915 8d 5b 01 STA rMovement4 1323 b918 .L0103 ;; rMovement5 = ( rand & 5 ) + 1 1324 b918 1325 b918 ; complex statement detected 1326 b918 20 fd f3 jsr randomize 1327 b91b 29 05 AND #5 1328 b91d 18 CLC 1329 b91e 69 01 ADC #1 1330 b920 8d 5c 01 STA rMovement5 1331 b923 .L0104 ;; rMovement6 = ( rand & 6 ) - 1 1332 b923 1333 b923 ; complex statement detected 1334 b923 20 fd f3 jsr randomize 1335 b926 29 06 AND #6 1336 b928 38 SEC 1337 b929 e9 01 SBC #1 1338 b92b 8d 5d 01 STA rMovement6 1339 b92e .L0105 ;; rDirection = ( rand & 4 ) 1340 b92e 1341 b92e ; complex statement detected 1342 b92e 20 fd f3 jsr randomize 1343 b931 29 04 AND #4 1344 b933 8d 4f 01 STA rDirection 1345 b936 .L0106 ;; if switchreset then reboot 1346 b936 1347 b936 20 85 f4 jsr checkresetswitch 1348 b939 d0 03 BNE .skipL0106 1349 b93b .condpart1 1350 b93b 4c 72 f5 JMP START 1351 b93e .skipL0106 1352 b93e . 1353 b93e ;; 1354 b93e 1355 b93e . 1356 b93e ;; 1357 b93e 1358 b93e .L0107 ;; enemy_shotSlowdown = enemy_shotSlowdown + 1 1359 b93e 1360 b93e ad 56 01 LDA enemy_shotSlowdown 1361 b941 18 CLC 1362 b942 69 01 ADC #1 1363 b944 8d 56 01 STA enemy_shotSlowdown 1364 b947 .L0108 ;; if enemy_shotSlowdown > 8 then enemy_shotSlowdown = 0 1365 b947 1366 b947 a9 08 LDA #8 1367 b949 cd 56 01 CMP enemy_shotSlowdown 1368 b94c b0 05 BCS .skipL0108 1369 b94e .condpart2 1370 b94e a9 00 LDA #0 1371 b950 8d 56 01 STA enemy_shotSlowdown 1372 b953 .skipL0108 1373 b953 . 1374 b953 ;; 1375 b953 1376 b953 .L0109 ;; enemy01_Slowdown = enemy01_Slowdown + 1 1377 b953 1378 b953 ad 6b 01 LDA enemy01_Slowdown 1379 b956 18 CLC 1380 b957 69 01 ADC #1 1381 b959 8d 6b 01 STA enemy01_Slowdown 1382 b95c .L0110 ;; if enemy01_Slowdown > 8 then enemy01_Slowdown = 0 1383 b95c 1384 b95c a9 08 LDA #8 1385 b95e cd 6b 01 CMP enemy01_Slowdown 1386 b961 b0 05 BCS .skipL0110 1387 b963 .condpart3 1388 b963 a9 00 LDA #0 1389 b965 8d 6b 01 STA enemy01_Slowdown 1390 b968 .skipL0110 1391 b968 . 1392 b968 ;; 1393 b968 1394 b968 .L0111 ;; bulletSlowdown = bulletSlowdown + 1 1395 b968 1396 b968 ad 55 01 LDA bulletSlowdown 1397 b96b 18 CLC 1398 b96c 69 01 ADC #1 1399 b96e 8d 55 01 STA bulletSlowdown 1400 b971 .L0112 ;; if bulletSlowdown > 6 then bulletSlowdown = 0 1401 b971 1402 b971 a9 06 LDA #6 1403 b973 cd 55 01 CMP bulletSlowdown 1404 b976 b0 05 BCS .skipL0112 1405 b978 .condpart4 1406 b978 a9 00 LDA #0 1407 b97a 8d 55 01 STA bulletSlowdown 1408 b97d .skipL0112 1409 b97d . 1410 b97d ;; 1411 b97d 1412 b97d .L0113 ;; power_upSlowdown = power_upSlowdown + 1 1413 b97d 1414 b97d ad 54 01 LDA power_upSlowdown 1415 b980 18 CLC 1416 b981 69 01 ADC #1 1417 b983 8d 54 01 STA power_upSlowdown 1418 b986 .L0114 ;; if power_upSlowdown > 7 then power_upSlowdown = 0 1419 b986 1420 b986 a9 07 LDA #7 1421 b988 cd 54 01 CMP power_upSlowdown 1422 b98b b0 05 BCS .skipL0114 1423 b98d .condpart5 1424 b98d a9 00 LDA #0 1425 b98f 8d 54 01 STA power_upSlowdown 1426 b992 .skipL0114 1427 b992 . 1428 b992 ;; 1429 b992 1430 b992 .L0115 ;; twinlaser_Slowdown = twinlaser_Slowdown + 1 1431 b992 1432 b992 ad 68 01 LDA twinlaser_Slowdown 1433 b995 18 CLC 1434 b996 69 01 ADC #1 1435 b998 8d 68 01 STA twinlaser_Slowdown 1436 b99b .L0116 ;; if twinlaser_Slowdown > 5 then twinlaser_Slowdown = 0 1437 b99b 1438 b99b a9 05 LDA #5 1439 b99d cd 68 01 CMP twinlaser_Slowdown 1440 b9a0 b0 05 BCS .skipL0116 1441 b9a2 .condpart6 1442 b9a2 a9 00 LDA #0 1443 b9a4 8d 68 01 STA twinlaser_Slowdown 1444 b9a7 .skipL0116 1445 b9a7 . 1446 b9a7 ;; 1447 b9a7 1448 b9a7 .L0117 ;; if joy0up && joyposup = - 2 then gosub SetBulletHome 1449 b9a7 1450 b9a7 a9 10 lda #$10 1451 b9a9 2c 80 02 bit SWCHA 1452 b9ac d0 10 BNE .skipL0117 1453 b9ae .condpart7 1454 b9ae ; complex condition detected 1455 b9ae a9 fe LDA #254 1456 b9b0 48 PHA 1457 b9b1 ba TSX 1458 b9b2 68 PLA 1459 b9b3 ad 44 01 LDA joyposup 1460 b9b6 dd 01 01 CMP $101,x 1461 b9b9 d0 03 BNE .skip7then 1462 b9bb .condpart8 1463 b9bb 20 92 cd jsr .SetBulletHome 1464 b9be 1465 b9be .skip7then 1466 b9be .skipL0117 1467 b9be .L0118 ;; if joy0down && joyposdown = - 2 then gosub SetBulletHome 1468 b9be 1469 b9be a9 20 lda #$20 1470 b9c0 2c 80 02 bit SWCHA 1471 b9c3 d0 10 BNE .skipL0118 1472 b9c5 .condpart9 1473 b9c5 ; complex condition detected 1474 b9c5 a9 fe LDA #254 1475 b9c7 48 PHA 1476 b9c8 ba TSX 1477 b9c9 68 PLA 1478 b9ca ad 45 01 LDA joyposdown 1479 b9cd dd 01 01 CMP $101,x 1480 b9d0 d0 03 BNE .skip9then 1481 b9d2 .condpart10 1482 b9d2 20 92 cd jsr .SetBulletHome 1483 b9d5 1484 b9d5 .skip9then 1485 b9d5 .skipL0118 1486 b9d5 .L0119 ;; if joy0up && joyposleft = - 2 then gosub SetBulletHome 1487 b9d5 1488 b9d5 a9 10 lda #$10 1489 b9d7 2c 80 02 bit SWCHA 1490 b9da d0 10 BNE .skipL0119 1491 b9dc .condpart11 1492 b9dc ; complex condition detected 1493 b9dc a9 fe LDA #254 1494 b9de 48 PHA 1495 b9df ba TSX 1496 b9e0 68 PLA 1497 b9e1 ad 46 01 LDA joyposleft 1498 b9e4 dd 01 01 CMP $101,x 1499 b9e7 d0 03 BNE .skip11then 1500 b9e9 .condpart12 1501 b9e9 20 92 cd jsr .SetBulletHome 1502 b9ec 1503 b9ec .skip11then 1504 b9ec .skipL0119 1505 b9ec .L0120 ;; if joy0down && joyposright = - 2 then gosub SetBulletHome 1506 b9ec 1507 b9ec a9 20 lda #$20 1508 b9ee 2c 80 02 bit SWCHA 1509 b9f1 d0 10 BNE .skipL0120 1510 b9f3 .condpart13 1511 b9f3 ; complex condition detected 1512 b9f3 a9 fe LDA #254 1513 b9f5 48 PHA 1514 b9f6 ba TSX 1515 b9f7 68 PLA 1516 b9f8 ad 47 01 LDA joyposright 1517 b9fb dd 01 01 CMP $101,x 1518 b9fe d0 03 BNE .skip13then 1519 ba00 .condpart14 1520 ba00 20 92 cd jsr .SetBulletHome 1521 ba03 1522 ba03 .skip13then 1523 ba03 .skipL0120 1524 ba03 .L0121 ;; if joy0up && joyposup = - 2 then gosub SetLaserHome 1525 ba03 1526 ba03 a9 10 lda #$10 1527 ba05 2c 80 02 bit SWCHA 1528 ba08 d0 10 BNE .skipL0121 1529 ba0a .condpart15 1530 ba0a ; complex condition detected 1531 ba0a a9 fe LDA #254 1532 ba0c 48 PHA 1533 ba0d ba TSX 1534 ba0e 68 PLA 1535 ba0f ad 44 01 LDA joyposup 1536 ba12 dd 01 01 CMP $101,x 1537 ba15 d0 03 BNE .skip15then 1538 ba17 .condpart16 1539 ba17 20 a5 cd jsr .SetLaserHome 1540 ba1a 1541 ba1a .skip15then 1542 ba1a .skipL0121 1543 ba1a .L0122 ;; if joy0down && joyposdown = - 2 then gosub SetLaserHome 1544 ba1a 1545 ba1a a9 20 lda #$20 1546 ba1c 2c 80 02 bit SWCHA 1547 ba1f d0 10 BNE .skipL0122 1548 ba21 .condpart17 1549 ba21 ; complex condition detected 1550 ba21 a9 fe LDA #254 1551 ba23 48 PHA 1552 ba24 ba TSX 1553 ba25 68 PLA 1554 ba26 ad 45 01 LDA joyposdown 1555 ba29 dd 01 01 CMP $101,x 1556 ba2c d0 03 BNE .skip17then 1557 ba2e .condpart18 1558 ba2e 20 a5 cd jsr .SetLaserHome 1559 ba31 1560 ba31 .skip17then 1561 ba31 .skipL0122 1562 ba31 .L0123 ;; if joy0up && joyposleft = - 2 then gosub SetLaserHome 1563 ba31 1564 ba31 a9 10 lda #$10 1565 ba33 2c 80 02 bit SWCHA 1566 ba36 d0 10 BNE .skipL0123 1567 ba38 .condpart19 1568 ba38 ; complex condition detected 1569 ba38 a9 fe LDA #254 1570 ba3a 48 PHA 1571 ba3b ba TSX 1572 ba3c 68 PLA 1573 ba3d ad 46 01 LDA joyposleft 1574 ba40 dd 01 01 CMP $101,x 1575 ba43 d0 03 BNE .skip19then 1576 ba45 .condpart20 1577 ba45 20 a5 cd jsr .SetLaserHome 1578 ba48 1579 ba48 .skip19then 1580 ba48 .skipL0123 1581 ba48 .L0124 ;; if joy0down && joyposright = - 2 then gosub SetLaserHome 1582 ba48 1583 ba48 a9 20 lda #$20 1584 ba4a 2c 80 02 bit SWCHA 1585 ba4d d0 10 BNE .skipL0124 1586 ba4f .condpart21 1587 ba4f ; complex condition detected 1588 ba4f a9 fe LDA #254 1589 ba51 48 PHA 1590 ba52 ba TSX 1591 ba53 68 PLA 1592 ba54 ad 47 01 LDA joyposright 1593 ba57 dd 01 01 CMP $101,x 1594 ba5a d0 03 BNE .skip21then 1595 ba5c .condpart22 1596 ba5c 20 a5 cd jsr .SetLaserHome 1597 ba5f 1598 ba5f .skip21then 1599 ba5f .skipL0124 1600 ba5f .L0125 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1601 ba5f 1602 ba5f a9 10 lda #$10 1603 ba61 2c 80 02 bit SWCHA 1604 ba64 d0 19 BNE .skipL0125 1605 ba66 .condpart23 1606 ba66 ad 42 01 LDA playerY 1607 ba69 38 SEC 1608 ba6a e9 01 SBC #1 1609 ba6c 8d 42 01 STA playerY 1610 ba6f a9 01 LDA #1 1611 ba71 8d 44 01 STA joyposup 1612 ba74 a9 00 LDA #0 1613 ba76 8d 45 01 STA joyposdown 1614 ba79 8d 46 01 STA joyposleft 1615 ba7c 8d 47 01 STA joyposright 1616 ba7f .skipL0125 1617 ba7f .L0126 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 1618 ba7f 1619 ba7f a9 20 lda #$20 1620 ba81 2c 80 02 bit SWCHA 1621 ba84 d0 1b BNE .skipL0126 1622 ba86 .condpart24 1623 ba86 ad 42 01 LDA playerY 1624 ba89 18 CLC 1625 ba8a 69 01 ADC #1 1626 ba8c 8d 42 01 STA playerY 1627 ba8f a9 00 LDA #0 1628 ba91 8d 44 01 STA joyposup 1629 ba94 a9 01 LDA #1 1630 ba96 8d 45 01 STA joyposdown 1631 ba99 a9 00 LDA #0 1632 ba9b 8d 46 01 STA joyposleft 1633 ba9e 8d 47 01 STA joyposright 1634 baa1 .skipL0126 1635 baa1 .L0127 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 1636 baa1 1637 baa1 2c 80 02 bit SWCHA 1638 baa4 70 1b BVS .skipL0127 1639 baa6 .condpart25 1640 baa6 ad 41 01 LDA playerX 1641 baa9 38 SEC 1642 baaa e9 01 SBC #1 1643 baac 8d 41 01 STA playerX 1644 baaf a9 00 LDA #0 1645 bab1 8d 44 01 STA joyposup 1646 bab4 8d 45 01 STA joyposdown 1647 bab7 a9 01 LDA #1 1648 bab9 8d 46 01 STA joyposleft 1649 babc a9 00 LDA #0 1650 babe 8d 47 01 STA joyposright 1651 bac1 .skipL0127 1652 bac1 .L0128 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 1653 bac1 1654 bac1 2c 80 02 bit SWCHA 1655 bac4 30 19 BMI .skipL0128 1656 bac6 .condpart26 1657 bac6 ad 41 01 LDA playerX 1658 bac9 18 CLC 1659 baca 69 01 ADC #1 1660 bacc 8d 41 01 STA playerX 1661 bacf a9 00 LDA #0 1662 bad1 8d 44 01 STA joyposup 1663 bad4 8d 45 01 STA joyposdown 1664 bad7 8d 46 01 STA joyposleft 1665 bada a9 01 LDA #1 1666 badc 8d 47 01 STA joyposright 1667 badf .skipL0128 1668 badf .L0129 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1669 badf 1670 badf 2c 02 21 bit sINPT1 1671 bae2 10 29 BPL .skipL0129 1672 bae4 .condpart27 1673 bae4 ad 44 01 LDA joyposup 1674 bae7 c9 01 CMP #1 1675 bae9 d0 22 BNE .skip27then 1676 baeb .condpart28 1677 baeb ad 49 01 LDA bulletY 1678 baee 38 SEC 1679 baef e9 05 SBC #5 1680 baf1 8d 49 01 STA bulletY 1681 baf4 a9 01 lda #1 1682 baf6 85 de sta sfxschedulelock 1683 baf8 a9 ed lda #sfx_pulsecannon 1686 bafe 85 e1 sta sfxinstrumenthi 1687 bb00 a9 00 lda #0 1688 bb02 85 e2 sta sfxpitchoffset ; no pitch modification 1689 bb04 85 e3 sta sfxnoteindex ; not a musical note 1690 bb06 20 58 f2 jsr schedulesfx 1691 bb09 a9 00 lda #0 1692 bb0b 85 de sta sfxschedulelock 1693 bb0d .skip27then 1694 bb0d .skipL0129 1695 bb0d .L0130 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1696 bb0d 1697 bb0d 2c 02 21 bit sINPT1 1698 bb10 10 29 BPL .skipL0130 1699 bb12 .condpart29 1700 bb12 ad 45 01 LDA joyposdown 1701 bb15 c9 01 CMP #1 1702 bb17 d0 22 BNE .skip29then 1703 bb19 .condpart30 1704 bb19 ad 49 01 LDA bulletY 1705 bb1c 38 SEC 1706 bb1d e9 05 SBC #5 1707 bb1f 8d 49 01 STA bulletY 1708 bb22 a9 01 lda #1 1709 bb24 85 de sta sfxschedulelock 1710 bb26 a9 ed lda #sfx_pulsecannon 1713 bb2c 85 e1 sta sfxinstrumenthi 1714 bb2e a9 00 lda #0 1715 bb30 85 e2 sta sfxpitchoffset ; no pitch modification 1716 bb32 85 e3 sta sfxnoteindex ; not a musical note 1717 bb34 20 58 f2 jsr schedulesfx 1718 bb37 a9 00 lda #0 1719 bb39 85 de sta sfxschedulelock 1720 bb3b .skip29then 1721 bb3b .skipL0130 1722 bb3b .L0131 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1723 bb3b 1724 bb3b 2c 02 21 bit sINPT1 1725 bb3e 10 29 BPL .skipL0131 1726 bb40 .condpart31 1727 bb40 ad 46 01 LDA joyposleft 1728 bb43 c9 01 CMP #1 1729 bb45 d0 22 BNE .skip31then 1730 bb47 .condpart32 1731 bb47 ad 49 01 LDA bulletY 1732 bb4a 38 SEC 1733 bb4b e9 05 SBC #5 1734 bb4d 8d 49 01 STA bulletY 1735 bb50 a9 01 lda #1 1736 bb52 85 de sta sfxschedulelock 1737 bb54 a9 ed lda #sfx_pulsecannon 1740 bb5a 85 e1 sta sfxinstrumenthi 1741 bb5c a9 00 lda #0 1742 bb5e 85 e2 sta sfxpitchoffset ; no pitch modification 1743 bb60 85 e3 sta sfxnoteindex ; not a musical note 1744 bb62 20 58 f2 jsr schedulesfx 1745 bb65 a9 00 lda #0 1746 bb67 85 de sta sfxschedulelock 1747 bb69 .skip31then 1748 bb69 .skipL0131 1749 bb69 .L0132 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1750 bb69 1751 bb69 2c 02 21 bit sINPT1 1752 bb6c 10 29 BPL .skipL0132 1753 bb6e .condpart33 1754 bb6e ad 47 01 LDA joyposright 1755 bb71 c9 01 CMP #1 1756 bb73 d0 22 BNE .skip33then 1757 bb75 .condpart34 1758 bb75 ad 49 01 LDA bulletY 1759 bb78 38 SEC 1760 bb79 e9 05 SBC #5 1761 bb7b 8d 49 01 STA bulletY 1762 bb7e a9 01 lda #1 1763 bb80 85 de sta sfxschedulelock 1764 bb82 a9 ed lda #sfx_pulsecannon 1767 bb88 85 e1 sta sfxinstrumenthi 1768 bb8a a9 00 lda #0 1769 bb8c 85 e2 sta sfxpitchoffset ; no pitch modification 1770 bb8e 85 e3 sta sfxnoteindex ; not a musical note 1771 bb90 20 58 f2 jsr schedulesfx 1772 bb93 a9 00 lda #0 1773 bb95 85 de sta sfxschedulelock 1774 bb97 .skip33then 1775 bb97 .skipL0132 1776 bb97 .L0133 ;; if !joy0fire then bulletX = playerX + 2 : bulletY = playerY - 8 * / 1777 bb97 1778 bb97 2c 02 21 bit sINPT1 1779 bb9a 30 1e BMI .skipL0133 1780 bb9c .condpart35 1781 bb9c ad 41 01 LDA playerX 1782 bb9f 18 CLC 1783 bba0 69 02 ADC #2 1784 bba2 8d 48 01 STA bulletX 1785 bba5 ; complex statement detected 1786 bba5 ad 42 01 LDA playerY 1787 bba8 0a asl 1788 bba9 0a asl 1789 bbaa 0a asl 1790 bbab a8 TAY 1791 bbac 68 PLA 1792 bbad 20 36 f4 jsr div8 1793 bbb0 a8 TAY 1794 bbb1 68 PLA 1795 bbb2 84 5a STY tempmath 1796 bbb4 38 SEC 1797 bbb5 e5 5a SBC tempmath 1798 bbb7 8d 49 01 STA bulletY 1799 bbba .skipL0133 1800 bbba . 1801 bbba ;; 1802 bbba 1803 bbba . 1804 bbba ;; 1805 bbba 1806 bbba . 1807 bbba ;; 1808 bbba 1809 bbba .L0134 ;; if playerX > 152 then playerX = playerX - 1 1810 bbba 1811 bbba a9 98 LDA #152 1812 bbbc cd 41 01 CMP playerX 1813 bbbf b0 09 BCS .skipL0134 1814 bbc1 .condpart36 1815 bbc1 ad 41 01 LDA playerX 1816 bbc4 38 SEC 1817 bbc5 e9 01 SBC #1 1818 bbc7 8d 41 01 STA playerX 1819 bbca .skipL0134 1820 bbca .L0135 ;; if playerX < 1 then playerX = playerX + 1 1821 bbca 1822 bbca ad 41 01 LDA playerX 1823 bbcd c9 01 CMP #1 1824 bbcf b0 09 BCS .skipL0135 1825 bbd1 .condpart37 1826 bbd1 ad 41 01 LDA playerX 1827 bbd4 18 CLC 1828 bbd5 69 01 ADC #1 1829 bbd7 8d 41 01 STA playerX 1830 bbda .skipL0135 1831 bbda .L0136 ;; if playerY > 177 then playerY = playerY - 1 1832 bbda 1833 bbda a9 b1 LDA #177 1834 bbdc cd 42 01 CMP playerY 1835 bbdf b0 09 BCS .skipL0136 1836 bbe1 .condpart38 1837 bbe1 ad 42 01 LDA playerY 1838 bbe4 38 SEC 1839 bbe5 e9 01 SBC #1 1840 bbe7 8d 42 01 STA playerY 1841 bbea .skipL0136 1842 bbea .L0137 ;; if playerY < 1 then playerY = playerY + 1 1843 bbea 1844 bbea ad 42 01 LDA playerY 1845 bbed c9 01 CMP #1 1846 bbef b0 09 BCS .skipL0137 1847 bbf1 .condpart39 1848 bbf1 ad 42 01 LDA playerY 1849 bbf4 18 CLC 1850 bbf5 69 01 ADC #1 1851 bbf7 8d 42 01 STA playerY 1852 bbfa .skipL0137 1853 bbfa .L0138 ;; if bulletY > 183 then bulletY = bulletY - 1 1854 bbfa 1855 bbfa a9 b7 LDA #183 1856 bbfc cd 49 01 CMP bulletY 1857 bbff b0 09 BCS .skipL0138 1858 bc01 .condpart40 1859 bc01 ad 49 01 LDA bulletY 1860 bc04 38 SEC 1861 bc05 e9 01 SBC #1 1862 bc07 8d 49 01 STA bulletY 1863 bc0a .skipL0138 1864 bc0a .L0139 ;; if bulletY < 1 then bulletY = bulletY + 1 1865 bc0a 1866 bc0a ad 49 01 LDA bulletY 1867 bc0d c9 01 CMP #1 1868 bc0f b0 09 BCS .skipL0139 1869 bc11 .condpart41 1870 bc11 ad 49 01 LDA bulletY 1871 bc14 18 CLC 1872 bc15 69 01 ADC #1 1873 bc17 8d 49 01 STA bulletY 1874 bc1a .skipL0139 1875 bc1a .L0140 ;; if twinlaserY > 183 then twinlaserY = twinlaserY - 1 1876 bc1a 1877 bc1a a9 b7 LDA #183 1878 bc1c cd 66 01 CMP twinlaserY 1879 bc1f b0 09 BCS .skipL0140 1880 bc21 .condpart42 1881 bc21 ad 66 01 LDA twinlaserY 1882 bc24 38 SEC 1883 bc25 e9 01 SBC #1 1884 bc27 8d 66 01 STA twinlaserY 1885 bc2a .skipL0140 1886 bc2a .L0141 ;; if twinlaserY < 1 then twinlaserY = twinlaserY + 1 1887 bc2a 1888 bc2a ad 66 01 LDA twinlaserY 1889 bc2d c9 01 CMP #1 1890 bc2f b0 09 BCS .skipL0141 1891 bc31 .condpart43 1892 bc31 ad 66 01 LDA twinlaserY 1893 bc34 18 CLC 1894 bc35 69 01 ADC #1 1895 bc37 8d 66 01 STA twinlaserY 1896 bc3a .skipL0141 1897 bc3a . 1898 bc3a ;; 1899 bc3a 1900 bc3a .L0142 ;; gosub check_collisions 1901 bc3a 1902 bc3a 20 53 ca jsr .check_collisions 1903 bc3d 1904 bc3d .L0143 ;; if isDead_flag then goto lose_a_life 1905 bc3d 1906 bc3d ad 6a 01 LDA isDead_flag 1907 bc40 f0 03 BEQ .skipL0143 1908 bc42 .condpart44 1909 bc42 4c 66 d9 jmp .lose_a_life 1910 bc45 1911 bc45 .skipL0143 1912 bc45 . 1913 bc45 ;; 1914 bc45 1915 bc45 . 1916 bc45 ;; 1917 bc45 1918 bc45 . 1919 bc45 ;; 1920 bc45 1921 bc45 .L0144 ;; if enemy_shotX > 160 then enemy_shotX = enemy_shotX - 1 1922 bc45 1923 bc45 a9 a0 LDA #160 1924 bc47 cd 4a 01 CMP enemy_shotX 1925 bc4a b0 09 BCS .skipL0144 1926 bc4c .condpart45 1927 bc4c ad 4a 01 LDA enemy_shotX 1928 bc4f 38 SEC 1929 bc50 e9 01 SBC #1 1930 bc52 8d 4a 01 STA enemy_shotX 1931 bc55 .skipL0144 1932 bc55 .L0145 ;; if enemy_shotX < 1 then enemy_shotX = enemy_shotX + 1 1933 bc55 1934 bc55 ad 4a 01 LDA enemy_shotX 1935 bc58 c9 01 CMP #1 1936 bc5a b0 09 BCS .skipL0145 1937 bc5c .condpart46 1938 bc5c ad 4a 01 LDA enemy_shotX 1939 bc5f 18 CLC 1940 bc60 69 01 ADC #1 1941 bc62 8d 4a 01 STA enemy_shotX 1942 bc65 .skipL0145 1943 bc65 .L0146 ;; if enemy_shotY > 191 then enemy_shotY = enemy_shotY - 1 1944 bc65 1945 bc65 a9 bf LDA #191 1946 bc67 cd 4b 01 CMP enemy_shotY 1947 bc6a b0 09 BCS .skipL0146 1948 bc6c .condpart47 1949 bc6c ad 4b 01 LDA enemy_shotY 1950 bc6f 38 SEC 1951 bc70 e9 01 SBC #1 1952 bc72 8d 4b 01 STA enemy_shotY 1953 bc75 .skipL0146 1954 bc75 .L0147 ;; if enemy_shotY < 1 then enemy_shotY = enemy_shotY + 1 1955 bc75 1956 bc75 ad 4b 01 LDA enemy_shotY 1957 bc78 c9 01 CMP #1 1958 bc7a b0 09 BCS .skipL0147 1959 bc7c .condpart48 1960 bc7c ad 4b 01 LDA enemy_shotY 1961 bc7f 18 CLC 1962 bc80 69 01 ADC #1 1963 bc82 8d 4b 01 STA enemy_shotY 1964 bc85 .skipL0147 1965 bc85 .L0148 ;; if power_upX > 155 then power_upX = power_upX - 5 1966 bc85 1967 bc85 a9 9b LDA #155 1968 bc87 cd 50 01 CMP power_upX 1969 bc8a b0 09 BCS .skipL0148 1970 bc8c .condpart49 1971 bc8c ad 50 01 LDA power_upX 1972 bc8f 38 SEC 1973 bc90 e9 05 SBC #5 1974 bc92 8d 50 01 STA power_upX 1975 bc95 .skipL0148 1976 bc95 .L0149 ;; if power_upX < 1 then power_upX = power_upX + 5 1977 bc95 1978 bc95 ad 50 01 LDA power_upX 1979 bc98 c9 01 CMP #1 1980 bc9a b0 09 BCS .skipL0149 1981 bc9c .condpart50 1982 bc9c ad 50 01 LDA power_upX 1983 bc9f 18 CLC 1984 bca0 69 05 ADC #5 1985 bca2 8d 50 01 STA power_upX 1986 bca5 .skipL0149 1987 bca5 .L0150 ;; if power_upY > 191 then power_upY = power_upY - 5 1988 bca5 1989 bca5 a9 bf LDA #191 1990 bca7 cd 51 01 CMP power_upY 1991 bcaa b0 09 BCS .skipL0150 1992 bcac .condpart51 1993 bcac ad 51 01 LDA power_upY 1994 bcaf 38 SEC 1995 bcb0 e9 05 SBC #5 1996 bcb2 8d 51 01 STA power_upY 1997 bcb5 .skipL0150 1998 bcb5 .L0151 ;; if power_upY < 1 then power_upY = power_upY + 5 1999 bcb5 2000 bcb5 ad 51 01 LDA power_upY 2001 bcb8 c9 01 CMP #1 2002 bcba b0 09 BCS .skipL0151 2003 bcbc .condpart52 2004 bcbc ad 51 01 LDA power_upY 2005 bcbf 18 CLC 2006 bcc0 69 05 ADC #5 2007 bcc2 8d 51 01 STA power_upY 2008 bcc5 .skipL0151 2009 bcc5 .L0152 ;; if enemy01_X > 160 then enemy01_X = enemy01_X - 1 2010 bcc5 2011 bcc5 a9 a0 LDA #160 2012 bcc7 cd 57 01 CMP enemy01_X 2013 bcca b0 09 BCS .skipL0152 2014 bccc .condpart53 2015 bccc ad 57 01 LDA enemy01_X 2016 bccf 38 SEC 2017 bcd0 e9 01 SBC #1 2018 bcd2 8d 57 01 STA enemy01_X 2019 bcd5 .skipL0152 2020 bcd5 .L0153 ;; if enemy01_X < 1 then enemy01_X = enemy01_X + 1 2021 bcd5 2022 bcd5 ad 57 01 LDA enemy01_X 2023 bcd8 c9 01 CMP #1 2024 bcda b0 09 BCS .skipL0153 2025 bcdc .condpart54 2026 bcdc ad 57 01 LDA enemy01_X 2027 bcdf 18 CLC 2028 bce0 69 01 ADC #1 2029 bce2 8d 57 01 STA enemy01_X 2030 bce5 .skipL0153 2031 bce5 .L0154 ;; if enemy01_Y > 220 then enemy01_Y = enemy01_Y - 1 2032 bce5 2033 bce5 a9 dc LDA #220 2034 bce7 cd 58 01 CMP enemy01_Y 2035 bcea b0 09 BCS .skipL0154 2036 bcec .condpart55 2037 bcec ad 58 01 LDA enemy01_Y 2038 bcef 38 SEC 2039 bcf0 e9 01 SBC #1 2040 bcf2 8d 58 01 STA enemy01_Y 2041 bcf5 .skipL0154 2042 bcf5 .L0155 ;; if enemy01_Y < - 16 then enemy01_Y = enemy01_Y + 1 2043 bcf5 2044 bcf5 ; complex condition detected 2045 bcf5 a9 f0 LDA #240 2046 bcf7 48 PHA 2047 bcf8 ba TSX 2048 bcf9 68 PLA 2049 bcfa ad 58 01 LDA enemy01_Y 2050 bcfd dd 01 01 CMP $101,x 2051 bd00 b0 09 BCS .skipL0155 2052 bd02 .condpart56 2053 bd02 ad 58 01 LDA enemy01_Y 2054 bd05 18 CLC 2055 bd06 69 01 ADC #1 2056 bd08 8d 58 01 STA enemy01_Y 2057 bd0b .skipL0155 2058 bd0b .L0156 ;; if extra_shipX > 160 then extra_shipX = extra_shipX - 1 2059 bd0b 2060 bd0b a9 a0 LDA #160 2061 bd0d cd 60 01 CMP extra_shipX 2062 bd10 b0 09 BCS .skipL0156 2063 bd12 .condpart57 2064 bd12 ad 60 01 LDA extra_shipX 2065 bd15 38 SEC 2066 bd16 e9 01 SBC #1 2067 bd18 8d 60 01 STA extra_shipX 2068 bd1b .skipL0156 2069 bd1b .L0157 ;; if extra_shipX < 1 then extra_shipX = extra_shipX + 1 2070 bd1b 2071 bd1b ad 60 01 LDA extra_shipX 2072 bd1e c9 01 CMP #1 2073 bd20 b0 09 BCS .skipL0157 2074 bd22 .condpart58 2075 bd22 ad 60 01 LDA extra_shipX 2076 bd25 18 CLC 2077 bd26 69 01 ADC #1 2078 bd28 8d 60 01 STA extra_shipX 2079 bd2b .skipL0157 2080 bd2b .L0158 ;; if extra_shipY > 191 then extra_shipY = extra_shipY - 1 2081 bd2b 2082 bd2b a9 bf LDA #191 2083 bd2d cd 61 01 CMP extra_shipY 2084 bd30 b0 09 BCS .skipL0158 2085 bd32 .condpart59 2086 bd32 ad 61 01 LDA extra_shipY 2087 bd35 38 SEC 2088 bd36 e9 01 SBC #1 2089 bd38 8d 61 01 STA extra_shipY 2090 bd3b .skipL0158 2091 bd3b .L0159 ;; if extra_shipY < 1 then extra_shipY = extra_shipY + 1 2092 bd3b 2093 bd3b ad 61 01 LDA extra_shipY 2094 bd3e c9 01 CMP #1 2095 bd40 b0 09 BCS .skipL0159 2096 bd42 .condpart60 2097 bd42 ad 61 01 LDA extra_shipY 2098 bd45 18 CLC 2099 bd46 69 01 ADC #1 2100 bd48 8d 61 01 STA extra_shipY 2101 bd4b .skipL0159 2102 bd4b . 2103 bd4b ;; 2104 bd4b 2105 bd4b .L0160 ;; if rDirection = 0 then enemy_shotX = enemy_shotX + rMovement1 : enemy_shotY = enemy_shotY + rMovement2 2106 bd4b 2107 bd4b ad 4f 01 LDA rDirection 2108 bd4e c9 00 CMP #0 2109 bd50 d0 14 BNE .skipL0160 2110 bd52 .condpart61 2111 bd52 ad 4a 01 LDA enemy_shotX 2112 bd55 18 CLC 2113 bd56 6d 4e 01 ADC rMovement1 2114 bd59 8d 4a 01 STA enemy_shotX 2115 bd5c ad 4b 01 LDA enemy_shotY 2116 bd5f 18 CLC 2117 bd60 6d 53 01 ADC rMovement2 2118 bd63 8d 4b 01 STA enemy_shotY 2119 bd66 .skipL0160 2120 bd66 .L0161 ;; if rDirection = 1 then enemy_shotX = enemy_shotX + rMovement3 : enemy_shotY = enemy_shotY + rMovement4 2121 bd66 2122 bd66 ad 4f 01 LDA rDirection 2123 bd69 c9 01 CMP #1 2124 bd6b d0 14 BNE .skipL0161 2125 bd6d .condpart62 2126 bd6d ad 4a 01 LDA enemy_shotX 2127 bd70 18 CLC 2128 bd71 6d 5a 01 ADC rMovement3 2129 bd74 8d 4a 01 STA enemy_shotX 2130 bd77 ad 4b 01 LDA enemy_shotY 2131 bd7a 18 CLC 2132 bd7b 6d 5b 01 ADC rMovement4 2133 bd7e 8d 4b 01 STA enemy_shotY 2134 bd81 .skipL0161 2135 bd81 .L0162 ;; if rDirection = 2 then enemy_shotX = enemy_shotX + rMovement5 : enemy_shotY = enemy_shotY + rMovement6 2136 bd81 2137 bd81 ad 4f 01 LDA rDirection 2138 bd84 c9 02 CMP #2 2139 bd86 d0 14 BNE .skipL0162 2140 bd88 .condpart63 2141 bd88 ad 4a 01 LDA enemy_shotX 2142 bd8b 18 CLC 2143 bd8c 6d 5c 01 ADC rMovement5 2144 bd8f 8d 4a 01 STA enemy_shotX 2145 bd92 ad 4b 01 LDA enemy_shotY 2146 bd95 18 CLC 2147 bd96 6d 5d 01 ADC rMovement6 2148 bd99 8d 4b 01 STA enemy_shotY 2149 bd9c .skipL0162 2150 bd9c .L0163 ;; if rDirection = 3 then enemy_shotX = enemy_shotX + rMovement4 : enemy_shotY = enemy_shotY + rMovement2 2151 bd9c 2152 bd9c ad 4f 01 LDA rDirection 2153 bd9f c9 03 CMP #3 2154 bda1 d0 14 BNE .skipL0163 2155 bda3 .condpart64 2156 bda3 ad 4a 01 LDA enemy_shotX 2157 bda6 18 CLC 2158 bda7 6d 5b 01 ADC rMovement4 2159 bdaa 8d 4a 01 STA enemy_shotX 2160 bdad ad 4b 01 LDA enemy_shotY 2161 bdb0 18 CLC 2162 bdb1 6d 53 01 ADC rMovement2 2163 bdb4 8d 4b 01 STA enemy_shotY 2164 bdb7 .skipL0163 2165 bdb7 . 2166 bdb7 ;; 2167 bdb7 2168 bdb7 .L0164 ;; if rDirection = 0 then power_upX = power_upX + rMovement5 : power_upY = power_upY + rMovement2 2169 bdb7 2170 bdb7 ad 4f 01 LDA rDirection 2171 bdba c9 00 CMP #0 2172 bdbc d0 14 BNE .skipL0164 2173 bdbe .condpart65 2174 bdbe ad 50 01 LDA power_upX 2175 bdc1 18 CLC 2176 bdc2 6d 5c 01 ADC rMovement5 2177 bdc5 8d 50 01 STA power_upX 2178 bdc8 ad 51 01 LDA power_upY 2179 bdcb 18 CLC 2180 bdcc 6d 53 01 ADC rMovement2 2181 bdcf 8d 51 01 STA power_upY 2182 bdd2 .skipL0164 2183 bdd2 .L0165 ;; if rDirection = 1 then power_upX = power_upX + rMovement3 : power_upY = power_upY + rMovement4 2184 bdd2 2185 bdd2 ad 4f 01 LDA rDirection 2186 bdd5 c9 01 CMP #1 2187 bdd7 d0 14 BNE .skipL0165 2188 bdd9 .condpart66 2189 bdd9 ad 50 01 LDA power_upX 2190 bddc 18 CLC 2191 bddd 6d 5a 01 ADC rMovement3 2192 bde0 8d 50 01 STA power_upX 2193 bde3 ad 51 01 LDA power_upY 2194 bde6 18 CLC 2195 bde7 6d 5b 01 ADC rMovement4 2196 bdea 8d 51 01 STA power_upY 2197 bded .skipL0165 2198 bded .L0166 ;; if rDirection = 2 then power_upX = power_upX + rMovement1 : power_upY = power_upY + rMovement6 2199 bded 2200 bded ad 4f 01 LDA rDirection 2201 bdf0 c9 02 CMP #2 2202 bdf2 d0 14 BNE .skipL0166 2203 bdf4 .condpart67 2204 bdf4 ad 50 01 LDA power_upX 2205 bdf7 18 CLC 2206 bdf8 6d 4e 01 ADC rMovement1 2207 bdfb 8d 50 01 STA power_upX 2208 bdfe ad 51 01 LDA power_upY 2209 be01 18 CLC 2210 be02 6d 5d 01 ADC rMovement6 2211 be05 8d 51 01 STA power_upY 2212 be08 .skipL0166 2213 be08 . 2214 be08 ;; 2215 be08 2216 be08 .L0167 ;; if rDirection = 0 then enemy01_X = enemy01_X + rMovement4 : enemy01_Y = enemy01_Y + rMovement2 2217 be08 2218 be08 ad 4f 01 LDA rDirection 2219 be0b c9 00 CMP #0 2220 be0d d0 14 BNE .skipL0167 2221 be0f .condpart68 2222 be0f ad 57 01 LDA enemy01_X 2223 be12 18 CLC 2224 be13 6d 5b 01 ADC rMovement4 2225 be16 8d 57 01 STA enemy01_X 2226 be19 ad 58 01 LDA enemy01_Y 2227 be1c 18 CLC 2228 be1d 6d 53 01 ADC rMovement2 2229 be20 8d 58 01 STA enemy01_Y 2230 be23 .skipL0167 2231 be23 .L0168 ;; if rDirection = 1 then enemy01_X = enemy01_X + rMovement3 : enemy01_Y = enemy01_Y + rMovement4 2232 be23 2233 be23 ad 4f 01 LDA rDirection 2234 be26 c9 01 CMP #1 2235 be28 d0 14 BNE .skipL0168 2236 be2a .condpart69 2237 be2a ad 57 01 LDA enemy01_X 2238 be2d 18 CLC 2239 be2e 6d 5a 01 ADC rMovement3 2240 be31 8d 57 01 STA enemy01_X 2241 be34 ad 58 01 LDA enemy01_Y 2242 be37 18 CLC 2243 be38 6d 5b 01 ADC rMovement4 2244 be3b 8d 58 01 STA enemy01_Y 2245 be3e .skipL0168 2246 be3e .L0169 ;; if rDirection = 2 then enemy01_X = enemy01_X + rMovement6 : enemy01_Y = enemy01_Y + rMovement6 2247 be3e 2248 be3e ad 4f 01 LDA rDirection 2249 be41 c9 02 CMP #2 2250 be43 d0 14 BNE .skipL0169 2251 be45 .condpart70 2252 be45 ad 57 01 LDA enemy01_X 2253 be48 18 CLC 2254 be49 6d 5d 01 ADC rMovement6 2255 be4c 8d 57 01 STA enemy01_X 2256 be4f ad 58 01 LDA enemy01_Y 2257 be52 18 CLC 2258 be53 6d 5d 01 ADC rMovement6 2259 be56 8d 58 01 STA enemy01_Y 2260 be59 .skipL0169 2261 be59 . 2262 be59 ;; 2263 be59 2264 be59 .L0170 ;; if rDirection = 0 then extra_shipX = extra_shipX + rMovement5 : extra_shipY = extra_shipY + rMovement2 2265 be59 2266 be59 ad 4f 01 LDA rDirection 2267 be5c c9 00 CMP #0 2268 be5e d0 14 BNE .skipL0170 2269 be60 .condpart71 2270 be60 ad 60 01 LDA extra_shipX 2271 be63 18 CLC 2272 be64 6d 5c 01 ADC rMovement5 2273 be67 8d 60 01 STA extra_shipX 2274 be6a ad 61 01 LDA extra_shipY 2275 be6d 18 CLC 2276 be6e 6d 53 01 ADC rMovement2 2277 be71 8d 61 01 STA extra_shipY 2278 be74 .skipL0170 2279 be74 . 2280 be74 ;; 2281 be74 2282 be74 .L0171 ;; if playerFlag = 1 && explosion_aniframe = 1 then playsfx sfx_explosion 2283 be74 2284 be74 ad 4d 01 LDA playerFlag 2285 be77 c9 01 CMP #1 2286 be79 d0 20 BNE .skipL0171 2287 be7b .condpart72 2288 be7b ad 63 01 LDA explosion_aniframe 2289 be7e c9 01 CMP #1 2290 be80 d0 19 BNE .skip72then 2291 be82 .condpart73 2292 be82 a9 01 lda #1 2293 be84 85 de sta sfxschedulelock 2294 be86 a9 77 lda #sfx_explosion 2297 be8c 85 e1 sta sfxinstrumenthi 2298 be8e a9 00 lda #0 2299 be90 85 e2 sta sfxpitchoffset ; no pitch modification 2300 be92 85 e3 sta sfxnoteindex ; not a musical note 2301 be94 20 58 f2 jsr schedulesfx 2302 be97 a9 00 lda #0 2303 be99 85 de sta sfxschedulelock 2304 be9b .skip72then 2305 be9b .skipL0171 2306 be9b .L0172 ;; if playerFlag = 1 then enemy_shotSlowdown = enemy_shotSlowdown + 1 2307 be9b 2308 be9b ad 4d 01 LDA playerFlag 2309 be9e c9 01 CMP #1 2310 bea0 d0 09 BNE .skipL0172 2311 bea2 .condpart74 2312 bea2 ad 56 01 LDA enemy_shotSlowdown 2313 bea5 18 CLC 2314 bea6 69 01 ADC #1 2315 bea8 8d 56 01 STA enemy_shotSlowdown 2316 beab .skipL0172 2317 beab .L0173 ;; if playerFlag = 1 && enemy_shotSlowdown = 8 then enemy_shotSlowdown = 0 2318 beab 2319 beab ad 4d 01 LDA playerFlag 2320 beae c9 01 CMP #1 2321 beb0 d0 0c BNE .skipL0173 2322 beb2 .condpart75 2323 beb2 ad 56 01 LDA enemy_shotSlowdown 2324 beb5 c9 08 CMP #8 2325 beb7 d0 05 BNE .skip75then 2326 beb9 .condpart76 2327 beb9 a9 00 LDA #0 2328 bebb 8d 56 01 STA enemy_shotSlowdown 2329 bebe .skip75then 2330 bebe .skipL0173 2331 bebe .L0174 ;; if playerFlag = 1 && enemy_shotSlowdown = 2 then explosion_aniframe = explosion_aniframe + 1 2332 bebe 2333 bebe ad 4d 01 LDA playerFlag 2334 bec1 c9 01 CMP #1 2335 bec3 d0 10 BNE .skipL0174 2336 bec5 .condpart77 2337 bec5 ad 56 01 LDA enemy_shotSlowdown 2338 bec8 c9 02 CMP #2 2339 beca d0 09 BNE .skip77then 2340 becc .condpart78 2341 becc ad 63 01 LDA explosion_aniframe 2342 becf 18 CLC 2343 bed0 69 01 ADC #1 2344 bed2 8d 63 01 STA explosion_aniframe 2345 bed5 .skip77then 2346 bed5 .skipL0174 2347 bed5 .L0175 ;; if playerFlag = 1 && explosion_aniframe > 11 then explosion_aniframe = 200 2348 bed5 2349 bed5 ad 4d 01 LDA playerFlag 2350 bed8 c9 01 CMP #1 2351 beda d0 0c BNE .skipL0175 2352 bedc .condpart79 2353 bedc a9 0b LDA #11 2354 bede cd 63 01 CMP explosion_aniframe 2355 bee1 b0 05 BCS .skip79then 2356 bee3 .condpart80 2357 bee3 a9 c8 LDA #200 2358 bee5 8d 63 01 STA explosion_aniframe 2359 bee8 .skip79then 2360 bee8 .skipL0175 2361 bee8 . 2362 bee8 ;; 2363 bee8 2364 bee8 . 2365 bee8 ;; 2366 bee8 2367 bee8 .L0176 ;; restorescreen 2368 bee8 2369 bee8 20 9e f0 jsr restorescreen 2370 beeb .L0177 ;; gosub draw_scores 2371 beeb 2372 beeb 20 ea c9 jsr .draw_scores 2373 beee 2374 beee .L0178 ;; gosub draw_sprites 2375 beee 2376 beee 20 00 c8 jsr .draw_sprites 2377 bef1 2378 bef1 .L0179 ;; drawscreen 2379 bef1 2380 bef1 20 c0 f0 jsr drawscreen 2381 bef4 . 2382 bef4 ;; 2383 bef4 2384 bef4 .L0180 ;; goto mainloop 2385 bef4 2386 bef4 4c ef b8 jmp .mainloop 2387 bef7 2388 bef7 .L0181 ;; dmahole 1 2389 bef7 2390 bef7 4c 00 c8 jmp dmahole_1 2391 bef7 DMAHOLEEND0 SET . 262 bytes of ROM space left in DMA hole 0. 2392 bef7 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)]d , "bytes of ROM space left in DMA hole 0." 2393 befa - if ((256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)) < 0 2394 befa -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 2395 befa endif 2396 befa 2397 c000 ORG $C000,0 ; ************* 2398 c000 2399 c000 vertical_shooting_1up 2400 c000 15 55 HEX 1555 2401 c002 vertical_shooting_explosion_01 2402 c002 02 80 HEX 0280 2403 c004 vertical_shooting_explosion_01_tallsprite_00 2404 c004 00 00 HEX 0000 2405 c006 vertical_shooting_explosion_02 2406 c006 05 50 HEX 0550 2407 c008 vertical_shooting_explosion_02_tallsprite_00 2408 c008 00 00 HEX 0000 2409 c00a vertical_shooting_explosion_03 2410 c00a 15 54 HEX 1554 2411 c00c vertical_shooting_explosion_03_tallsprite_00 2412 c00c 00 00 HEX 0000 2413 c00e vertical_shooting_explosion_04 2414 c00e 07 d0 HEX 07d0 2415 c010 vertical_shooting_explosion_04_tallsprite_00 2416 c010 00 00 HEX 0000 2417 c012 vertical_shooting_explosion_05 2418 c012 0c 30 HEX 0c30 2419 c014 vertical_shooting_explosion_05_tallsprite_00 2420 c014 01 40 HEX 0140 2421 c016 vertical_shooting_explosion_06 2422 c016 00 00 HEX 0000 2423 c018 vertical_shooting_explosion_06_tallsprite_00 2424 c018 01 40 HEX 0140 2425 c01a vertical_shooting_explosion_07 2426 c01a 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2427 c02e vertical_shooting_explosion_07_tallsprite_00 2428 c02e 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2429 c042 vertical_shooting_explosion_08 2430 c042 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2431 c056 vertical_shooting_explosion_08_tallsprite_00 2432 c056 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2433 c06a vertical_shooting_explosion_09 2434 c06a 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2435 c07e vertical_shooting_explosion_09_tallsprite_00 2436 c07e 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2437 c092 vertical_shooting_explosion_10 2438 c092 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2439 c0a6 vertical_shooting_explosion_10_tallsprite_00 2440 c0a6 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2441 c0ba vertical_shooting_laser 2442 c0ba 88 HEX 88 2443 c0bb vertical_shooting_laser_tallsprite_00 2444 c0bb cc HEX cc 2445 c0bc 2446 c100 ORG $C100,0 ; ************* 2447 c100 2448 c100 ;vertical_shooting_1up 2449 c100 ea a9 HEX eaa9 2450 c102 ;vertical_shooting_explosion_01 2451 c102 01 40 HEX 0140 2452 c104 ;vertical_shooting_explosion_01_tallsprite_00 2453 c104 00 00 HEX 0000 2454 c106 ;vertical_shooting_explosion_02 2455 c106 09 60 HEX 0960 2456 c108 ;vertical_shooting_explosion_02_tallsprite_00 2457 c108 00 00 HEX 0000 2458 c10a ;vertical_shooting_explosion_03 2459 c10a 25 58 HEX 2558 2460 c10c ;vertical_shooting_explosion_03_tallsprite_00 2461 c10c 00 00 HEX 0000 2462 c10e ;vertical_shooting_explosion_04 2463 c10e 05 50 HEX 0550 2464 c110 ;vertical_shooting_explosion_04_tallsprite_00 2465 c110 02 80 HEX 0280 2466 c112 ;vertical_shooting_explosion_05 2467 c112 0b e0 HEX 0be0 2468 c114 ;vertical_shooting_explosion_05_tallsprite_00 2469 c114 01 40 HEX 0140 2470 c116 ;vertical_shooting_explosion_06 2471 c116 0c 30 HEX 0c30 2472 c118 ;vertical_shooting_explosion_06_tallsprite_00 2473 c118 01 40 HEX 0140 2474 c11a ;vertical_shooting_explosion_07 2475 c11a 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2476 c12e ;vertical_shooting_explosion_07_tallsprite_00 2477 c12e 00 00 00 00* HEX 0000000000000140014001400140014001400000 2478 c142 ;vertical_shooting_explosion_08 2479 c142 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2480 c156 ;vertical_shooting_explosion_08_tallsprite_00 2481 c156 00 00 00 00* HEX 0000000000000140014001400140014001400000 2482 c16a ;vertical_shooting_explosion_09 2483 c16a 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2484 c17e ;vertical_shooting_explosion_09_tallsprite_00 2485 c17e 00 00 00 00* HEX 0000000000000140014001400140014001400000 2486 c192 ;vertical_shooting_explosion_10 2487 c192 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2488 c1a6 ;vertical_shooting_explosion_10_tallsprite_00 2489 c1a6 00 00 00 00* HEX 0000000000000140014001400140014001400000 2490 c1ba ;vertical_shooting_laser 2491 c1ba 88 HEX 88 2492 c1bb ;vertical_shooting_laser_tallsprite_00 2493 c1bb cc HEX cc 2494 c1bc 2495 c200 ORG $C200,0 ; ************* 2496 c200 2497 c200 ;vertical_shooting_1up 2498 c200 d5 58 HEX d558 2499 c202 ;vertical_shooting_explosion_01 2500 c202 00 00 HEX 0000 2501 c204 ;vertical_shooting_explosion_01_tallsprite_00 2502 c204 00 00 HEX 0000 2503 c206 ;vertical_shooting_explosion_02 2504 c206 02 80 HEX 0280 2505 c208 ;vertical_shooting_explosion_02_tallsprite_00 2506 c208 00 00 HEX 0000 2507 c20a ;vertical_shooting_explosion_03 2508 c20a 09 60 HEX 0960 2509 c20c ;vertical_shooting_explosion_03_tallsprite_00 2510 c20c 00 00 HEX 0000 2511 c20e ;vertical_shooting_explosion_04 2512 c20e 05 50 HEX 0550 2513 c210 ;vertical_shooting_explosion_04_tallsprite_00 2514 c210 02 80 HEX 0280 2515 c212 ;vertical_shooting_explosion_05 2516 c212 0a a0 HEX 0aa0 2517 c214 ;vertical_shooting_explosion_05_tallsprite_00 2518 c214 05 50 HEX 0550 2519 c216 ;vertical_shooting_explosion_06 2520 c216 0b e0 HEX 0be0 2521 c218 ;vertical_shooting_explosion_06_tallsprite_00 2522 c218 05 50 HEX 0550 2523 c21a ;vertical_shooting_explosion_07 2524 c21a 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2525 c22e ;vertical_shooting_explosion_07_tallsprite_00 2526 c22e 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2527 c242 ;vertical_shooting_explosion_08 2528 c242 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2529 c256 ;vertical_shooting_explosion_08_tallsprite_00 2530 c256 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2531 c26a ;vertical_shooting_explosion_09 2532 c26a 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2533 c27e ;vertical_shooting_explosion_09_tallsprite_00 2534 c27e 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2535 c292 ;vertical_shooting_explosion_10 2536 c292 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2537 c2a6 ;vertical_shooting_explosion_10_tallsprite_00 2538 c2a6 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2539 c2ba ;vertical_shooting_laser 2540 c2ba 44 HEX 44 2541 c2bb ;vertical_shooting_laser_tallsprite_00 2542 c2bb cc HEX cc 2543 c2bc 2544 c300 ORG $C300,0 ; ************* 2545 c300 2546 c300 ;vertical_shooting_1up 2547 c300 35 60 HEX 3560 2548 c302 ;vertical_shooting_explosion_01 2549 c302 00 00 HEX 0000 2550 c304 ;vertical_shooting_explosion_01_tallsprite_00 2551 c304 00 00 HEX 0000 2552 c306 ;vertical_shooting_explosion_02 2553 c306 00 00 HEX 0000 2554 c308 ;vertical_shooting_explosion_02_tallsprite_00 2555 c308 00 00 HEX 0000 2556 c30a ;vertical_shooting_explosion_03 2557 c30a 02 80 HEX 0280 2558 c30c ;vertical_shooting_explosion_03_tallsprite_00 2559 c30c 00 00 HEX 0000 2560 c30e ;vertical_shooting_explosion_04 2561 c30e 09 60 HEX 0960 2562 c310 ;vertical_shooting_explosion_04_tallsprite_00 2563 c310 09 60 HEX 0960 2564 c312 ;vertical_shooting_explosion_05 2565 c312 06 90 HEX 0690 2566 c314 ;vertical_shooting_explosion_05_tallsprite_00 2567 c314 06 90 HEX 0690 2568 c316 ;vertical_shooting_explosion_06 2569 c316 06 90 HEX 0690 2570 c318 ;vertical_shooting_explosion_06_tallsprite_00 2571 c318 06 90 HEX 0690 2572 c31a ;vertical_shooting_explosion_07 2573 c31a 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2574 c32e ;vertical_shooting_explosion_07_tallsprite_00 2575 c32e 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2576 c342 ;vertical_shooting_explosion_08 2577 c342 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2578 c356 ;vertical_shooting_explosion_08_tallsprite_00 2579 c356 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2580 c36a ;vertical_shooting_explosion_09 2581 c36a 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2582 c37e ;vertical_shooting_explosion_09_tallsprite_00 2583 c37e 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2584 c392 ;vertical_shooting_explosion_10 2585 c392 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2586 c3a6 ;vertical_shooting_explosion_10_tallsprite_00 2587 c3a6 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2588 c3ba ;vertical_shooting_laser 2589 c3ba 44 HEX 44 2590 c3bb ;vertical_shooting_laser_tallsprite_00 2591 c3bb cc HEX cc 2592 c3bc 2593 c400 ORG $C400,0 ; ************* 2594 c400 2595 c400 ;vertical_shooting_1up 2596 c400 35 60 HEX 3560 2597 c402 ;vertical_shooting_explosion_01 2598 c402 00 00 HEX 0000 2599 c404 ;vertical_shooting_explosion_01_tallsprite_00 2600 c404 00 00 HEX 0000 2601 c406 ;vertical_shooting_explosion_02 2602 c406 00 00 HEX 0000 2603 c408 ;vertical_shooting_explosion_02_tallsprite_00 2604 c408 00 00 HEX 0000 2605 c40a ;vertical_shooting_explosion_03 2606 c40a 00 00 HEX 0000 2607 c40c ;vertical_shooting_explosion_03_tallsprite_00 2608 c40c 02 80 HEX 0280 2609 c40e ;vertical_shooting_explosion_04 2610 c40e 09 60 HEX 0960 2611 c410 ;vertical_shooting_explosion_04_tallsprite_00 2612 c410 09 60 HEX 0960 2613 c412 ;vertical_shooting_explosion_05 2614 c412 06 90 HEX 0690 2615 c414 ;vertical_shooting_explosion_05_tallsprite_00 2616 c414 06 90 HEX 0690 2617 c416 ;vertical_shooting_explosion_06 2618 c416 06 90 HEX 0690 2619 c418 ;vertical_shooting_explosion_06_tallsprite_00 2620 c418 06 90 HEX 0690 2621 c41a ;vertical_shooting_explosion_07 2622 c41a 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2623 c42e ;vertical_shooting_explosion_07_tallsprite_00 2624 c42e 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2625 c442 ;vertical_shooting_explosion_08 2626 c442 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2627 c456 ;vertical_shooting_explosion_08_tallsprite_00 2628 c456 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2629 c46a ;vertical_shooting_explosion_09 2630 c46a 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2631 c47e ;vertical_shooting_explosion_09_tallsprite_00 2632 c47e 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2633 c492 ;vertical_shooting_explosion_10 2634 c492 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2635 c4a6 ;vertical_shooting_explosion_10_tallsprite_00 2636 c4a6 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2637 c4ba ;vertical_shooting_laser 2638 c4ba 44 HEX 44 2639 c4bb ;vertical_shooting_laser_tallsprite_00 2640 c4bb cc HEX cc 2641 c4bc 2642 c500 ORG $C500,0 ; ************* 2643 c500 2644 c500 ;vertical_shooting_1up 2645 c500 0d 80 HEX 0d80 2646 c502 ;vertical_shooting_explosion_01 2647 c502 00 00 HEX 0000 2648 c504 ;vertical_shooting_explosion_01_tallsprite_00 2649 c504 00 00 HEX 0000 2650 c506 ;vertical_shooting_explosion_02 2651 c506 00 00 HEX 0000 2652 c508 ;vertical_shooting_explosion_02_tallsprite_00 2653 c508 02 80 HEX 0280 2654 c50a ;vertical_shooting_explosion_03 2655 c50a 00 00 HEX 0000 2656 c50c ;vertical_shooting_explosion_03_tallsprite_00 2657 c50c 09 60 HEX 0960 2658 c50e ;vertical_shooting_explosion_04 2659 c50e 02 80 HEX 0280 2660 c510 ;vertical_shooting_explosion_04_tallsprite_00 2661 c510 05 50 HEX 0550 2662 c512 ;vertical_shooting_explosion_05 2663 c512 05 50 HEX 0550 2664 c514 ;vertical_shooting_explosion_05_tallsprite_00 2665 c514 0a a0 HEX 0aa0 2666 c516 ;vertical_shooting_explosion_06 2667 c516 05 50 HEX 0550 2668 c518 ;vertical_shooting_explosion_06_tallsprite_00 2669 c518 0b e0 HEX 0be0 2670 c51a ;vertical_shooting_explosion_07 2671 c51a 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2672 c52e ;vertical_shooting_explosion_07_tallsprite_00 2673 c52e 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2674 c542 ;vertical_shooting_explosion_08 2675 c542 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2676 c556 ;vertical_shooting_explosion_08_tallsprite_00 2677 c556 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2678 c56a ;vertical_shooting_explosion_09 2679 c56a 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2680 c57e ;vertical_shooting_explosion_09_tallsprite_00 2681 c57e 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2682 c592 ;vertical_shooting_explosion_10 2683 c592 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2684 c5a6 ;vertical_shooting_explosion_10_tallsprite_00 2685 c5a6 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2686 c5ba ;vertical_shooting_laser 2687 c5ba 44 HEX 44 2688 c5bb ;vertical_shooting_laser_tallsprite_00 2689 c5bb 88 HEX 88 2690 c5bc 2691 c600 ORG $C600,0 ; ************* 2692 c600 2693 c600 ;vertical_shooting_1up 2694 c600 0d 80 HEX 0d80 2695 c602 ;vertical_shooting_explosion_01 2696 c602 00 00 HEX 0000 2697 c604 ;vertical_shooting_explosion_01_tallsprite_00 2698 c604 01 40 HEX 0140 2699 c606 ;vertical_shooting_explosion_02 2700 c606 00 00 HEX 0000 2701 c608 ;vertical_shooting_explosion_02_tallsprite_00 2702 c608 09 60 HEX 0960 2703 c60a ;vertical_shooting_explosion_03 2704 c60a 00 00 HEX 0000 2705 c60c ;vertical_shooting_explosion_03_tallsprite_00 2706 c60c 25 58 HEX 2558 2707 c60e ;vertical_shooting_explosion_04 2708 c60e 02 80 HEX 0280 2709 c610 ;vertical_shooting_explosion_04_tallsprite_00 2710 c610 05 50 HEX 0550 2711 c612 ;vertical_shooting_explosion_05 2712 c612 01 40 HEX 0140 2713 c614 ;vertical_shooting_explosion_05_tallsprite_00 2714 c614 0b e0 HEX 0be0 2715 c616 ;vertical_shooting_explosion_06 2716 c616 01 40 HEX 0140 2717 c618 ;vertical_shooting_explosion_06_tallsprite_00 2718 c618 0c 30 HEX 0c30 2719 c61a ;vertical_shooting_explosion_07 2720 c61a 00 00 00 00* HEX 0000000000000140014001400140014001400000 2721 c62e ;vertical_shooting_explosion_07_tallsprite_00 2722 c62e 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2723 c642 ;vertical_shooting_explosion_08 2724 c642 00 00 00 00* HEX 0000000000000140014001400140014001400000 2725 c656 ;vertical_shooting_explosion_08_tallsprite_00 2726 c656 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2727 c66a ;vertical_shooting_explosion_09 2728 c66a 00 00 00 00* HEX 0000000000000140014001400140014001400000 2729 c67e ;vertical_shooting_explosion_09_tallsprite_00 2730 c67e 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2731 c692 ;vertical_shooting_explosion_10 2732 c692 00 00 00 00* HEX 0000000000000140014001400140014001400000 2733 c6a6 ;vertical_shooting_explosion_10_tallsprite_00 2734 c6a6 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2735 c6ba ;vertical_shooting_laser 2736 c6ba 44 HEX 44 2737 c6bb ;vertical_shooting_laser_tallsprite_00 2738 c6bb 88 HEX 88 2739 c6bc 2740 c700 ORG $C700,0 ; ************* 2741 c700 2742 c700 ;vertical_shooting_1up 2743 c700 03 00 HEX 0300 2744 c702 ;vertical_shooting_explosion_01 2745 c702 00 00 HEX 0000 2746 c704 ;vertical_shooting_explosion_01_tallsprite_00 2747 c704 02 80 HEX 0280 2748 c706 ;vertical_shooting_explosion_02 2749 c706 00 00 HEX 0000 2750 c708 ;vertical_shooting_explosion_02_tallsprite_00 2751 c708 05 50 HEX 0550 2752 c70a ;vertical_shooting_explosion_03 2753 c70a 00 00 HEX 0000 2754 c70c ;vertical_shooting_explosion_03_tallsprite_00 2755 c70c 15 54 HEX 1554 2756 c70e ;vertical_shooting_explosion_04 2757 c70e 00 00 HEX 0000 2758 c710 ;vertical_shooting_explosion_04_tallsprite_00 2759 c710 07 d0 HEX 07d0 2760 c712 ;vertical_shooting_explosion_05 2761 c712 01 40 HEX 0140 2762 c714 ;vertical_shooting_explosion_05_tallsprite_00 2763 c714 0c 30 HEX 0c30 2764 c716 ;vertical_shooting_explosion_06 2765 c716 01 40 HEX 0140 2766 c718 ;vertical_shooting_explosion_06_tallsprite_00 2767 c718 00 00 HEX 0000 2768 c71a ;vertical_shooting_explosion_07 2769 c71a 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2770 c72e ;vertical_shooting_explosion_07_tallsprite_00 2771 c72e 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2772 c742 ;vertical_shooting_explosion_08 2773 c742 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2774 c756 ;vertical_shooting_explosion_08_tallsprite_00 2775 c756 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2776 c76a ;vertical_shooting_explosion_09 2777 c76a 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2778 c77e ;vertical_shooting_explosion_09_tallsprite_00 2779 c77e 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2780 c792 ;vertical_shooting_explosion_10 2781 c792 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2782 c7a6 ;vertical_shooting_explosion_10_tallsprite_00 2783 c7a6 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2784 c7ba ;vertical_shooting_laser 2785 c7ba 44 HEX 44 2786 c7bb ;vertical_shooting_laser_tallsprite_00 2787 c7bb 88 HEX 88 2788 c7bc 2789 c800 ORG $C800,0 ; ************* 2790 c800 dmahole_1 2791 c800 DMAHOLESTART1 SET . 2792 c800 . 2793 c800 ;; 2794 c800 2795 c800 .draw_sprites 2796 c800 ;; draw_sprites 2797 c800 2798 c800 .L0182 ;; plotsprite vertical_shooting_ship 0 playerX playerY 2799 c800 2800 c800 a9 2d lda #vertical_shooting_ship 2804 c806 85 43 sta temp2 2805 c808 2806 c808 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 2807 c80a 85 44 sta temp3 2808 c80c 2809 c80c ad 41 01 lda playerX 2810 c80f 85 45 sta temp4 2811 c811 2812 c811 ad 42 01 lda playerY 2813 c814 2814 c814 85 46 sta temp5 2815 c816 2816 c816 a9 40 lda #(vertical_shooting_ship_mode|%01000000) 2817 c818 85 47 sta temp6 2818 c81a 2819 c81a 20 a0 f2 jsr plotsprite 2820 c81d ; +tall sprite replot 2821 c81d 18 clc 2822 c81e a5 42 lda temp1 2823 c820 69 02 adc #vertical_shooting_ship_width 2824 c822 85 42 sta temp1 2825 c824 a5 46 lda temp5 2826 c826 69 08 adc #WZONEHEIGHT 2827 c828 85 46 sta temp5 2828 c82a 20 a0 f2 jsr plotsprite 2829 c82d .L0183 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 2830 c82d 2831 c82d a9 31 lda #vertical_shooting_bullet 2835 c833 85 43 sta temp2 2836 c835 2837 c835 a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 2838 c837 85 44 sta temp3 2839 c839 2840 c839 ad 48 01 lda bulletX 2841 c83c 85 45 sta temp4 2842 c83e 2843 c83e ad 49 01 lda bulletY 2844 c841 2845 c841 85 46 sta temp5 2846 c843 2847 c843 a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 2848 c845 85 47 sta temp6 2849 c847 2850 c847 20 a0 f2 jsr plotsprite 2851 c84a .L0184 ;; plotsprite vertical_shooting_enemyshot 2 enemy_shotX enemy_shotY 2852 c84a 2853 c84a a9 32 lda #vertical_shooting_enemyshot 2857 c850 85 43 sta temp2 2858 c852 2859 c852 a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 2860 c854 85 44 sta temp3 2861 c856 2862 c856 ad 4a 01 lda enemy_shotX 2863 c859 85 45 sta temp4 2864 c85b 2865 c85b ad 4b 01 lda enemy_shotY 2866 c85e 2867 c85e 85 46 sta temp5 2868 c860 2869 c860 a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 2870 c862 85 47 sta temp6 2871 c864 2872 c864 20 a0 f2 jsr plotsprite 2873 c867 .L0185 ;; plotsprite vertical_shooting_powerup 3 power_upX power_upY 2874 c867 2875 c867 a9 33 lda #vertical_shooting_powerup 2879 c86d 85 43 sta temp2 2880 c86f 2881 c86f a9 7e lda #(96|vertical_shooting_powerup_width_twoscompliment) 2882 c871 85 44 sta temp3 2883 c873 2884 c873 ad 50 01 lda power_upX 2885 c876 85 45 sta temp4 2886 c878 2887 c878 ad 51 01 lda power_upY 2888 c87b 2889 c87b 85 46 sta temp5 2890 c87d 2891 c87d a9 40 lda #(vertical_shooting_powerup_mode|%01000000) 2892 c87f 85 47 sta temp6 2893 c881 2894 c881 20 a0 f2 jsr plotsprite 2895 c884 .L0186 ;; plotsprite vertical_shooting_enemy01 2 enemy01_X enemy01_Y 2896 c884 2897 c884 a9 35 lda #vertical_shooting_enemy01 2901 c88a 85 43 sta temp2 2902 c88c 2903 c88c a9 5e lda #(64|vertical_shooting_enemy01_width_twoscompliment) 2904 c88e 85 44 sta temp3 2905 c890 2906 c890 ad 57 01 lda enemy01_X 2907 c893 85 45 sta temp4 2908 c895 2909 c895 ad 58 01 lda enemy01_Y 2910 c898 2911 c898 85 46 sta temp5 2912 c89a 2913 c89a a9 40 lda #(vertical_shooting_enemy01_mode|%01000000) 2914 c89c 85 47 sta temp6 2915 c89e 2916 c89e 20 a0 f2 jsr plotsprite 2917 c8a1 ; +tall sprite replot 2918 c8a1 18 clc 2919 c8a2 a5 42 lda temp1 2920 c8a4 69 02 adc #vertical_shooting_enemy01_width 2921 c8a6 85 42 sta temp1 2922 c8a8 a5 46 lda temp5 2923 c8aa 69 08 adc #WZONEHEIGHT 2924 c8ac 85 46 sta temp5 2925 c8ae 20 a0 f2 jsr plotsprite 2926 c8b1 .L0187 ;; plotsprite vertical_shooting_1up 0 extra_shipX extra_shipY 2927 c8b1 2928 c8b1 a9 00 lda #vertical_shooting_1up 2932 c8b7 85 43 sta temp2 2933 c8b9 2934 c8b9 a9 1e lda #(0|vertical_shooting_1up_width_twoscompliment) 2935 c8bb 85 44 sta temp3 2936 c8bd 2937 c8bd ad 60 01 lda extra_shipX 2938 c8c0 85 45 sta temp4 2939 c8c2 2940 c8c2 ad 61 01 lda extra_shipY 2941 c8c5 2942 c8c5 85 46 sta temp5 2943 c8c7 2944 c8c7 a9 40 lda #(vertical_shooting_1up_mode|%01000000) 2945 c8c9 85 47 sta temp6 2946 c8cb 2947 c8cb 20 a0 f2 jsr plotsprite 2948 c8ce .L0188 ;; plotsprite vertical_shooting_explosion_01 3 playerX playerY explosion_aniframe 2949 c8ce 2950 c8ce a9 02 lda #vertical_shooting_explosion_01 2962 c8df 85 43 sta temp2 2963 c8e1 2964 c8e1 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2965 c8e3 85 44 sta temp3 2966 c8e5 2967 c8e5 ad 41 01 lda playerX 2968 c8e8 85 45 sta temp4 2969 c8ea 2970 c8ea ad 42 01 lda playerY 2971 c8ed 85 46 sta temp5 2972 c8ef 2973 c8ef a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2974 c8f1 85 47 sta temp6 2975 c8f3 2976 c8f3 20 a0 f2 jsr plotsprite 2977 c8f6 ; +tall sprite replot 2978 c8f6 18 clc 2979 c8f7 a5 42 lda temp1 2980 c8f9 69 02 adc #vertical_shooting_explosion_01_width 2981 c8fb 85 42 sta temp1 2982 c8fd a5 46 lda temp5 2983 c8ff 69 08 adc #WZONEHEIGHT 2984 c901 85 46 sta temp5 2985 c903 20 a0 f2 jsr plotsprite 2986 c906 .L0189 ;; plotsprite vertical_shooting_explosion_01 3 enemy01_X enemy01_Y explosion_aniframe 2987 c906 2988 c906 a9 02 lda #vertical_shooting_explosion_01 3000 c917 85 43 sta temp2 3001 c919 3002 c919 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 3003 c91b 85 44 sta temp3 3004 c91d 3005 c91d ad 57 01 lda enemy01_X 3006 c920 85 45 sta temp4 3007 c922 3008 c922 ad 58 01 lda enemy01_Y 3009 c925 85 46 sta temp5 3010 c927 3011 c927 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 3012 c929 85 47 sta temp6 3013 c92b 3014 c92b 20 a0 f2 jsr plotsprite 3015 c92e ; +tall sprite replot 3016 c92e 18 clc 3017 c92f a5 42 lda temp1 3018 c931 69 02 adc #vertical_shooting_explosion_01_width 3019 c933 85 42 sta temp1 3020 c935 a5 46 lda temp5 3021 c937 69 08 adc #WZONEHEIGHT 3022 c939 85 46 sta temp5 3023 c93b 20 a0 f2 jsr plotsprite 3024 c93e .L0190 ;; plotsprite vertical_shooting_laser 0 twinlaserX twinlaserY 3025 c93e 3026 c93e a9 ba lda #vertical_shooting_laser 3030 c944 85 43 sta temp2 3031 c946 3032 c946 a9 1f lda #(0|vertical_shooting_laser_width_twoscompliment) 3033 c948 85 44 sta temp3 3034 c94a 3035 c94a ad 65 01 lda twinlaserX 3036 c94d 85 45 sta temp4 3037 c94f 3038 c94f ad 66 01 lda twinlaserY 3039 c952 3040 c952 85 46 sta temp5 3041 c954 3042 c954 a9 40 lda #(vertical_shooting_laser_mode|%01000000) 3043 c956 85 47 sta temp6 3044 c958 3045 c958 20 a0 f2 jsr plotsprite 3046 c95b ; +tall sprite replot 3047 c95b 18 clc 3048 c95c a5 42 lda temp1 3049 c95e 69 01 adc #vertical_shooting_laser_width 3050 c960 85 42 sta temp1 3051 c962 a5 46 lda temp5 3052 c964 69 08 adc #WZONEHEIGHT 3053 c966 85 46 sta temp5 3054 c968 20 a0 f2 jsr plotsprite 3055 c96b .L0191 ;; if playerFlag = 1 then plotsprite vertical_shooting_explosion_01 3 playerX playerY explosion_aniframe 3056 c96b 3057 c96b ad 4d 01 LDA playerFlag 3058 c96e c9 01 CMP #1 3059 c970 d0 38 BNE .skipL0191 3060 c972 .condpart81 3061 c972 a9 02 lda #vertical_shooting_explosion_01 3073 c983 85 43 sta temp2 3074 c985 3075 c985 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 3076 c987 85 44 sta temp3 3077 c989 3078 c989 ad 41 01 lda playerX 3079 c98c 85 45 sta temp4 3080 c98e 3081 c98e ad 42 01 lda playerY 3082 c991 85 46 sta temp5 3083 c993 3084 c993 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 3085 c995 85 47 sta temp6 3086 c997 3087 c997 20 a0 f2 jsr plotsprite 3088 c99a ; +tall sprite replot 3089 c99a 18 clc 3090 c99b a5 42 lda temp1 3091 c99d 69 02 adc #vertical_shooting_explosion_01_width 3092 c99f 85 42 sta temp1 3093 c9a1 a5 46 lda temp5 3094 c9a3 69 08 adc #WZONEHEIGHT 3095 c9a5 85 46 sta temp5 3096 c9a7 20 a0 f2 jsr plotsprite 3097 c9aa .skipL0191 3098 c9aa .L0192 ;; if enemy01_Flag = 1 then plotsprite vertical_shooting_explosion_01 3 enemy01_X enemy01_Y explosion_aniframe 3099 c9aa 3100 c9aa ad 59 01 LDA enemy01_Flag 3101 c9ad c9 01 CMP #1 3102 c9af d0 38 BNE .skipL0192 3103 c9b1 .condpart82 3104 c9b1 a9 02 lda #vertical_shooting_explosion_01 3116 c9c2 85 43 sta temp2 3117 c9c4 3118 c9c4 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 3119 c9c6 85 44 sta temp3 3120 c9c8 3121 c9c8 ad 57 01 lda enemy01_X 3122 c9cb 85 45 sta temp4 3123 c9cd 3124 c9cd ad 58 01 lda enemy01_Y 3125 c9d0 85 46 sta temp5 3126 c9d2 3127 c9d2 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 3128 c9d4 85 47 sta temp6 3129 c9d6 3130 c9d6 20 a0 f2 jsr plotsprite 3131 c9d9 ; +tall sprite replot 3132 c9d9 18 clc 3133 c9da a5 42 lda temp1 3134 c9dc 69 02 adc #vertical_shooting_explosion_01_width 3135 c9de 85 42 sta temp1 3136 c9e0 a5 46 lda temp5 3137 c9e2 69 08 adc #WZONEHEIGHT 3138 c9e4 85 46 sta temp5 3139 c9e6 20 a0 f2 jsr plotsprite 3140 c9e9 .skipL0192 3141 c9e9 .L0193 ;; return 3142 c9e9 3143 c9e9 60 RTS 3144 c9ea . 3145 c9ea ;; 3146 c9ea 3147 c9ea .draw_scores 3148 c9ea ;; draw_scores 3149 c9ea 3150 c9ea .L0194 ;; plotvalue vertical_shooting_font 0 score0 6 25 1 3151 c9ea 3152 c9ea a9 00 lda #vertical_shooting_font 3156 c9f0 85 43 sta temp2 3157 c9f2 3158 c9f2 ad 06 21 lda charactermode 3159 c9f5 85 4a sta temp9 3160 c9f7 a9 60 lda #(vertical_shooting_font_mode | %01100000) 3161 c9f9 8d 06 21 sta charactermode 3162 c9fc a9 1a lda #26 ; width in two's complement 3163 c9fe 09 00 ora #0 ; palette left shifted 5 bits 3164 ca00 85 44 sta temp3 3165 ca02 a9 19 lda #25 3166 ca04 85 45 sta temp4 3167 ca06 3168 ca06 a9 01 lda #1 3169 ca08 85 46 sta temp5 3170 ca0a 3171 ca0a a9 06 lda #6 3172 ca0c 85 47 sta temp6 3173 ca0e 3174 ca0e a9 a6 lda #score0 3178 ca14 85 49 sta temp8 3179 ca16 3180 ca16 20 8e f3 jsr plotvalue 3181 ca16 00 01 USED_PLOTVALUE = 1 3182 ca19 a5 4a lda temp9 3183 ca1b 8d 06 21 sta charactermode 3184 ca1e .L0195 ;; plotvalue vertical_shooting_font 0 lives 1 153 1 3185 ca1e 3186 ca1e a9 00 lda #vertical_shooting_font 3190 ca24 85 43 sta temp2 3191 ca26 3192 ca26 ad 06 21 lda charactermode 3193 ca29 85 4a sta temp9 3194 ca2b a9 60 lda #(vertical_shooting_font_mode | %01100000) 3195 ca2d 8d 06 21 sta charactermode 3196 ca30 a9 1f lda #31 ; width in two's complement 3197 ca32 09 00 ora #0 ; palette left shifted 5 bits 3198 ca34 85 44 sta temp3 3199 ca36 a9 99 lda #153 3200 ca38 85 45 sta temp4 3201 ca3a 3202 ca3a a9 01 lda #1 3203 ca3c 85 46 sta temp5 3204 ca3e 3205 ca3e a9 01 lda #1 3206 ca40 85 47 sta temp6 3207 ca42 3208 ca42 a9 64 lda #lives 3212 ca48 85 49 sta temp8 3213 ca4a 3214 ca4a 20 8e f3 jsr plotvalue 3215 ca4a 00 01 USED_PLOTVALUE = 1 3216 ca4d a5 4a lda temp9 3217 ca4f 8d 06 21 sta charactermode 3218 ca52 .L0196 ;; return 3219 ca52 3220 ca52 60 RTS 3221 ca53 . 3222 ca53 ;; 3223 ca53 3224 ca53 .check_collisions 3225 ca53 ;; check_collisions 3226 ca53 3227 ca53 .L0197 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy_shotX , enemy_shotY , 4 , 8 ) then enemy_shotX = 200 : enemy_shotY = 200 : playerFlag = 1 : lives = lives - 0 : playsfx sfx_explosion : isDead_flag = 1 : goto _checkCollisionsExit 3228 ca53 3229 ca53 3230 ca53 18 clc ; one clc only. If we overflow we're screwed anyway. 3231 ca54 a0 07 ldy #(8-1) 3232 ca56 84 44 sty temp3 3233 ca58 a0 0f ldy #(16-1) 3234 ca5a 84 45 sty temp4 3235 ca5c ad 4a 01 lda enemy_shotX 3236 ca5f 69 30 adc #48 3237 ca61 85 46 sta temp5 3238 ca63 ad 4b 01 lda enemy_shotY 3239 ca66 69 20 adc #((256-WSCREENHEIGHT)/2) 3240 ca68 85 47 sta temp6 3241 ca6a a0 03 ldy #(4-1) 3242 ca6c 84 48 sty temp7 3243 ca6e a0 07 ldy #(8-1) 3244 ca70 84 49 sty temp8 3245 ca72 ad 42 01 lda playerY 3246 ca75 69 20 adc #((256-WSCREENHEIGHT)/2) 3247 ca77 a8 tay 3248 ca78 ad 41 01 lda playerX 3249 ca7b 69 30 adc #48 3250 ca7d 20 d6 f3 jsr boxcollision 3251 ca80 3252 ca80 90 37 BCC .skipL0197 3253 ca82 .condpart83 3254 ca82 a9 c8 LDA #200 3255 ca84 8d 4a 01 STA enemy_shotX 3256 ca87 8d 4b 01 STA enemy_shotY 3257 ca8a a9 01 LDA #1 3258 ca8c 8d 4d 01 STA playerFlag 3259 ca8f ad 64 01 LDA lives 3260 ca92 38 SEC 3261 ca93 e9 00 SBC #0 3262 ca95 8d 64 01 STA lives 3263 ca98 a9 01 lda #1 3264 ca9a 85 de sta sfxschedulelock 3265 ca9c a9 77 lda #sfx_explosion 3268 caa2 85 e1 sta sfxinstrumenthi 3269 caa4 a9 00 lda #0 3270 caa6 85 e2 sta sfxpitchoffset ; no pitch modification 3271 caa8 85 e3 sta sfxnoteindex ; not a musical note 3272 caaa 20 58 f2 jsr schedulesfx 3273 caad a9 00 lda #0 3274 caaf 85 de sta sfxschedulelock 3275 cab1 a9 01 LDA #1 3276 cab3 8d 6a 01 STA isDead_flag 3277 cab6 4c 91 cd jmp ._checkCollisionsExit 3278 cab9 3279 cab9 .skipL0197 3280 cab9 .L0198 ;; if boxcollision ( playerX , playerY , 8 , 16 , power_upX , power_upY , 8 , 8 ) then power_upX = 208 : power_upY = 208 : playerFlag = 1 : power_upFlag = 1 : playsfx sfx_bling : score0 = score0 + 1 : gosub power_up_obtained 3281 cab9 3282 cab9 3283 cab9 18 clc ; one clc only. If we overflow we're screwed anyway. 3284 caba a0 07 ldy #(8-1) 3285 cabc 84 44 sty temp3 3286 cabe a0 0f ldy #(16-1) 3287 cac0 84 45 sty temp4 3288 cac2 ad 50 01 lda power_upX 3289 cac5 69 30 adc #48 3290 cac7 85 46 sta temp5 3291 cac9 ad 51 01 lda power_upY 3292 cacc 69 20 adc #((256-WSCREENHEIGHT)/2) 3293 cace 85 47 sta temp6 3294 cad0 a0 07 ldy #(8-1) 3295 cad2 84 48 sty temp7 3296 cad4 a0 07 ldy #(8-1) 3297 cad6 84 49 sty temp8 3298 cad8 ad 42 01 lda playerY 3299 cadb 69 20 adc #((256-WSCREENHEIGHT)/2) 3300 cadd a8 tay 3301 cade ad 41 01 lda playerX 3302 cae1 69 30 adc #48 3303 cae3 20 d6 f3 jsr boxcollision 3304 cae6 3305 cae6 90 47 BCC .skipL0198 3306 cae8 .condpart84 3307 cae8 a9 d0 LDA #208 3308 caea 8d 50 01 STA power_upX 3309 caed 8d 51 01 STA power_upY 3310 caf0 a9 01 LDA #1 3311 caf2 8d 4d 01 STA playerFlag 3312 caf5 8d 52 01 STA power_upFlag 3313 caf8 a9 01 lda #1 3314 cafa 85 de sta sfxschedulelock 3315 cafc a9 b4 lda #sfx_bling 3318 cb02 85 e1 sta sfxinstrumenthi 3319 cb04 a9 00 lda #0 3320 cb06 85 e2 sta sfxpitchoffset ; no pitch modification 3321 cb08 85 e3 sta sfxnoteindex ; not a musical note 3322 cb0a 20 58 f2 jsr schedulesfx 3323 cb0d a9 00 lda #0 3324 cb0f 85 de sta sfxschedulelock 3325 cb11 f8 SED 3326 cb12 18 CLC 3327 cb13 ad a8 01 LDA score0+2 3328 cb16 69 01 ADC #$01 3329 cb18 8d a8 01 STA score0+2 3330 cb1b ad a7 01 LDA score0+1 3331 cb1e 69 00 ADC #$00 3332 cb20 8d a7 01 STA score0+1 3333 cb23 ad a6 01 LDA score0 3334 cb26 69 00 ADC #$00 3335 cb28 8d a6 01 STA score0 3336 cb2b d8 CLD 3337 cb2c 20 00 d8 jsr .power_up_obtained 3338 cb2f 3339 cb2f .skipL0198 3340 cb2f .L0199 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy01_X , enemy01_Y , 8 , 16 ) then enemy01_X = 200 : enemy01_Y = 200 : playerFlag = 1 : lives = lives - 0 : playsfx sfx_explosion : isDead_flag = 1 : goto _checkCollisionsExit 3341 cb2f 3342 cb2f 3343 cb2f 18 clc ; one clc only. If we overflow we're screwed anyway. 3344 cb30 a0 07 ldy #(8-1) 3345 cb32 84 44 sty temp3 3346 cb34 a0 0f ldy #(16-1) 3347 cb36 84 45 sty temp4 3348 cb38 ad 57 01 lda enemy01_X 3349 cb3b 69 30 adc #48 3350 cb3d 85 46 sta temp5 3351 cb3f ad 58 01 lda enemy01_Y 3352 cb42 69 20 adc #((256-WSCREENHEIGHT)/2) 3353 cb44 85 47 sta temp6 3354 cb46 a0 07 ldy #(8-1) 3355 cb48 84 48 sty temp7 3356 cb4a a0 0f ldy #(16-1) 3357 cb4c 84 49 sty temp8 3358 cb4e ad 42 01 lda playerY 3359 cb51 69 20 adc #((256-WSCREENHEIGHT)/2) 3360 cb53 a8 tay 3361 cb54 ad 41 01 lda playerX 3362 cb57 69 30 adc #48 3363 cb59 20 d6 f3 jsr boxcollision 3364 cb5c 3365 cb5c 90 37 BCC .skipL0199 3366 cb5e .condpart85 3367 cb5e a9 c8 LDA #200 3368 cb60 8d 57 01 STA enemy01_X 3369 cb63 8d 58 01 STA enemy01_Y 3370 cb66 a9 01 LDA #1 3371 cb68 8d 4d 01 STA playerFlag 3372 cb6b ad 64 01 LDA lives 3373 cb6e 38 SEC 3374 cb6f e9 00 SBC #0 3375 cb71 8d 64 01 STA lives 3376 cb74 a9 01 lda #1 3377 cb76 85 de sta sfxschedulelock 3378 cb78 a9 77 lda #sfx_explosion 3381 cb7e 85 e1 sta sfxinstrumenthi 3382 cb80 a9 00 lda #0 3383 cb82 85 e2 sta sfxpitchoffset ; no pitch modification 3384 cb84 85 e3 sta sfxnoteindex ; not a musical note 3385 cb86 20 58 f2 jsr schedulesfx 3386 cb89 a9 00 lda #0 3387 cb8b 85 de sta sfxschedulelock 3388 cb8d a9 01 LDA #1 3389 cb8f 8d 6a 01 STA isDead_flag 3390 cb92 4c 91 cd jmp ._checkCollisionsExit 3391 cb95 3392 cb95 .skipL0199 3393 cb95 .L0200 ;; if boxcollision ( playerX , playerY , 8 , 16 , extra_shipX , extra_shipY , 8 , 8 ) then extra_shipX = 200 : extra_shipY = 200 : extra_shipFlag = 1 : lives = lives + 1 : playsfx sfx_bling 3394 cb95 3395 cb95 3396 cb95 18 clc ; one clc only. If we overflow we're screwed anyway. 3397 cb96 a0 07 ldy #(8-1) 3398 cb98 84 44 sty temp3 3399 cb9a a0 0f ldy #(16-1) 3400 cb9c 84 45 sty temp4 3401 cb9e ad 60 01 lda extra_shipX 3402 cba1 69 30 adc #48 3403 cba3 85 46 sta temp5 3404 cba5 ad 61 01 lda extra_shipY 3405 cba8 69 20 adc #((256-WSCREENHEIGHT)/2) 3406 cbaa 85 47 sta temp6 3407 cbac a0 07 ldy #(8-1) 3408 cbae 84 48 sty temp7 3409 cbb0 a0 07 ldy #(8-1) 3410 cbb2 84 49 sty temp8 3411 cbb4 ad 42 01 lda playerY 3412 cbb7 69 20 adc #((256-WSCREENHEIGHT)/2) 3413 cbb9 a8 tay 3414 cbba ad 41 01 lda playerX 3415 cbbd 69 30 adc #48 3416 cbbf 20 d6 f3 jsr boxcollision 3417 cbc2 3418 cbc2 90 2f BCC .skipL0200 3419 cbc4 .condpart86 3420 cbc4 a9 c8 LDA #200 3421 cbc6 8d 60 01 STA extra_shipX 3422 cbc9 8d 61 01 STA extra_shipY 3423 cbcc a9 01 LDA #1 3424 cbce 8d 62 01 STA extra_shipFlag 3425 cbd1 ad 64 01 LDA lives 3426 cbd4 18 CLC 3427 cbd5 69 01 ADC #1 3428 cbd7 8d 64 01 STA lives 3429 cbda a9 01 lda #1 3430 cbdc 85 de sta sfxschedulelock 3431 cbde a9 b4 lda #sfx_bling 3434 cbe4 85 e1 sta sfxinstrumenthi 3435 cbe6 a9 00 lda #0 3436 cbe8 85 e2 sta sfxpitchoffset ; no pitch modification 3437 cbea 85 e3 sta sfxnoteindex ; not a musical note 3438 cbec 20 58 f2 jsr schedulesfx 3439 cbef a9 00 lda #0 3440 cbf1 85 de sta sfxschedulelock 3441 cbf3 .skipL0200 3442 cbf3 .L0201 ;; if boxcollision ( bulletX , bulletY , 4 , 8 , enemy01_X , enemy01_Y , 8 , 16 ) then bulletX = - 8 : bulletY = 0 : enemy01_X = 208 : enemy01_Y = 200 : enemy01_Flag = 1 : playsfx sfx_explosion 3443 cbf3 3444 cbf3 3445 cbf3 18 clc ; one clc only. If we overflow we're screwed anyway. 3446 cbf4 a0 03 ldy #(4-1) 3447 cbf6 84 44 sty temp3 3448 cbf8 a0 07 ldy #(8-1) 3449 cbfa 84 45 sty temp4 3450 cbfc ad 57 01 lda enemy01_X 3451 cbff 69 30 adc #48 3452 cc01 85 46 sta temp5 3453 cc03 ad 58 01 lda enemy01_Y 3454 cc06 69 20 adc #((256-WSCREENHEIGHT)/2) 3455 cc08 85 47 sta temp6 3456 cc0a a0 07 ldy #(8-1) 3457 cc0c 84 48 sty temp7 3458 cc0e a0 0f ldy #(16-1) 3459 cc10 84 49 sty temp8 3460 cc12 ad 49 01 lda bulletY 3461 cc15 69 20 adc #((256-WSCREENHEIGHT)/2) 3462 cc17 a8 tay 3463 cc18 ad 48 01 lda bulletX 3464 cc1b 69 30 adc #48 3465 cc1d 20 d6 f3 jsr boxcollision 3466 cc20 3467 cc20 90 32 BCC .skipL0201 3468 cc22 .condpart87 3469 cc22 a9 f8 LDA #248 3470 cc24 8d 48 01 STA bulletX 3471 cc27 a9 00 LDA #0 3472 cc29 8d 49 01 STA bulletY 3473 cc2c a9 d0 LDA #208 3474 cc2e 8d 57 01 STA enemy01_X 3475 cc31 a9 c8 LDA #200 3476 cc33 8d 58 01 STA enemy01_Y 3477 cc36 a9 01 LDA #1 3478 cc38 8d 59 01 STA enemy01_Flag 3479 cc3b a9 01 lda #1 3480 cc3d 85 de sta sfxschedulelock 3481 cc3f a9 77 lda #sfx_explosion 3484 cc45 85 e1 sta sfxinstrumenthi 3485 cc47 a9 00 lda #0 3486 cc49 85 e2 sta sfxpitchoffset ; no pitch modification 3487 cc4b 85 e3 sta sfxnoteindex ; not a musical note 3488 cc4d 20 58 f2 jsr schedulesfx 3489 cc50 a9 00 lda #0 3490 cc52 85 de sta sfxschedulelock 3491 cc54 .skipL0201 3492 cc54 .L0202 ;; if boxcollision ( twinlaserX , twinlaserY , 4 , 16 , enemy01_X , enemy01_Y , 8 , 16 ) then twinlaserX = - 8 : twinlaserY = 0 : enemy01_X = 208 : enemy01_Y = 200 : enemy01_Flag = 1 : playsfx sfx_explosion 3493 cc54 3494 cc54 3495 cc54 18 clc ; one clc only. If we overflow we're screwed anyway. 3496 cc55 a0 03 ldy #(4-1) 3497 cc57 84 44 sty temp3 3498 cc59 a0 0f ldy #(16-1) 3499 cc5b 84 45 sty temp4 3500 cc5d ad 57 01 lda enemy01_X 3501 cc60 69 30 adc #48 3502 cc62 85 46 sta temp5 3503 cc64 ad 58 01 lda enemy01_Y 3504 cc67 69 20 adc #((256-WSCREENHEIGHT)/2) 3505 cc69 85 47 sta temp6 3506 cc6b a0 07 ldy #(8-1) 3507 cc6d 84 48 sty temp7 3508 cc6f a0 0f ldy #(16-1) 3509 cc71 84 49 sty temp8 3510 cc73 ad 66 01 lda twinlaserY 3511 cc76 69 20 adc #((256-WSCREENHEIGHT)/2) 3512 cc78 a8 tay 3513 cc79 ad 65 01 lda twinlaserX 3514 cc7c 69 30 adc #48 3515 cc7e 20 d6 f3 jsr boxcollision 3516 cc81 3517 cc81 90 32 BCC .skipL0202 3518 cc83 .condpart88 3519 cc83 a9 f8 LDA #248 3520 cc85 8d 65 01 STA twinlaserX 3521 cc88 a9 00 LDA #0 3522 cc8a 8d 66 01 STA twinlaserY 3523 cc8d a9 d0 LDA #208 3524 cc8f 8d 57 01 STA enemy01_X 3525 cc92 a9 c8 LDA #200 3526 cc94 8d 58 01 STA enemy01_Y 3527 cc97 a9 01 LDA #1 3528 cc99 8d 59 01 STA enemy01_Flag 3529 cc9c a9 01 lda #1 3530 cc9e 85 de sta sfxschedulelock 3531 cca0 a9 77 lda #sfx_explosion 3534 cca6 85 e1 sta sfxinstrumenthi 3535 cca8 a9 00 lda #0 3536 ccaa 85 e2 sta sfxpitchoffset ; no pitch modification 3537 ccac 85 e3 sta sfxnoteindex ; not a musical note 3538 ccae 20 58 f2 jsr schedulesfx 3539 ccb1 a9 00 lda #0 3540 ccb3 85 de sta sfxschedulelock 3541 ccb5 .skipL0202 3542 ccb5 . 3543 ccb5 ;; 3544 ccb5 3545 ccb5 .L0203 ;; if bulletX > enemy01_X && bulletX < ( enemy01_X + 16 ) && bulletY > enemy01_Y && bulletY < ( enemy01_Y + 16 ) then enemy01_Flag = 1 : explosion_aniframe = 1 : score0 = score0 + 1 : playsfx sfx_explosion 3546 ccb5 3547 ccb5 ad 57 01 LDA enemy01_X 3548 ccb8 cd 48 01 CMP bulletX 3549 ccbb b0 66 BCS .skipL0203 3550 ccbd .condpart89 3551 ccbd ; complex condition detected 3552 ccbd ; complex statement detected 3553 ccbd ad 57 01 LDA enemy01_X 3554 ccc0 18 CLC 3555 ccc1 69 10 ADC #16 3556 ccc3 48 PHA 3557 ccc4 ba TSX 3558 ccc5 68 PLA 3559 ccc6 ad 48 01 LDA bulletX 3560 ccc9 dd 01 01 CMP $101,x 3561 cccc b0 55 BCS .skip89then 3562 ccce .condpart90 3563 ccce ad 58 01 LDA enemy01_Y 3564 ccd1 cd 49 01 CMP bulletY 3565 ccd4 b0 4d BCS .skip90then 3566 ccd6 .condpart91 3567 ccd6 ; complex condition detected 3568 ccd6 ; complex statement detected 3569 ccd6 ad 58 01 LDA enemy01_Y 3570 ccd9 18 CLC 3571 ccda 69 10 ADC #16 3572 ccdc 48 PHA 3573 ccdd ba TSX 3574 ccde 68 PLA 3575 ccdf ad 49 01 LDA bulletY 3576 cce2 dd 01 01 CMP $101,x 3577 cce5 b0 3c BCS .skip91then 3578 cce7 .condpart92 3579 cce7 a9 01 LDA #1 3580 cce9 8d 59 01 STA enemy01_Flag 3581 ccec 8d 63 01 STA explosion_aniframe 3582 ccef f8 SED 3583 ccf0 18 CLC 3584 ccf1 ad a8 01 LDA score0+2 3585 ccf4 69 01 ADC #$01 3586 ccf6 8d a8 01 STA score0+2 3587 ccf9 ad a7 01 LDA score0+1 3588 ccfc 69 00 ADC #$00 3589 ccfe 8d a7 01 STA score0+1 3590 cd01 ad a6 01 LDA score0 3591 cd04 69 00 ADC #$00 3592 cd06 8d a6 01 STA score0 3593 cd09 d8 CLD 3594 cd0a a9 01 lda #1 3595 cd0c 85 de sta sfxschedulelock 3596 cd0e a9 77 lda #sfx_explosion 3599 cd14 85 e1 sta sfxinstrumenthi 3600 cd16 a9 00 lda #0 3601 cd18 85 e2 sta sfxpitchoffset ; no pitch modification 3602 cd1a 85 e3 sta sfxnoteindex ; not a musical note 3603 cd1c 20 58 f2 jsr schedulesfx 3604 cd1f a9 00 lda #0 3605 cd21 85 de sta sfxschedulelock 3606 cd23 .skip91then 3607 cd23 .skip90then 3608 cd23 .skip89then 3609 cd23 .skipL0203 3610 cd23 .L0204 ;; if twinlaserX > enemy01_X && twinlaserX < ( enemy01_X + 16 ) && twinlaserY > enemy01_Y && twinlaserY < ( enemy01_Y + 16 ) then enemy01_Flag = 1 : explosion_aniframe = 1 : score0 = score0 + 1 : playsfx sfx_explosion 3611 cd23 3612 cd23 ad 57 01 LDA enemy01_X 3613 cd26 cd 65 01 CMP twinlaserX 3614 cd29 b0 66 BCS .skipL0204 3615 cd2b .condpart93 3616 cd2b ; complex condition detected 3617 cd2b ; complex statement detected 3618 cd2b ad 57 01 LDA enemy01_X 3619 cd2e 18 CLC 3620 cd2f 69 10 ADC #16 3621 cd31 48 PHA 3622 cd32 ba TSX 3623 cd33 68 PLA 3624 cd34 ad 65 01 LDA twinlaserX 3625 cd37 dd 01 01 CMP $101,x 3626 cd3a b0 55 BCS .skip93then 3627 cd3c .condpart94 3628 cd3c ad 58 01 LDA enemy01_Y 3629 cd3f cd 66 01 CMP twinlaserY 3630 cd42 b0 4d BCS .skip94then 3631 cd44 .condpart95 3632 cd44 ; complex condition detected 3633 cd44 ; complex statement detected 3634 cd44 ad 58 01 LDA enemy01_Y 3635 cd47 18 CLC 3636 cd48 69 10 ADC #16 3637 cd4a 48 PHA 3638 cd4b ba TSX 3639 cd4c 68 PLA 3640 cd4d ad 66 01 LDA twinlaserY 3641 cd50 dd 01 01 CMP $101,x 3642 cd53 b0 3c BCS .skip95then 3643 cd55 .condpart96 3644 cd55 a9 01 LDA #1 3645 cd57 8d 59 01 STA enemy01_Flag 3646 cd5a 8d 63 01 STA explosion_aniframe 3647 cd5d f8 SED 3648 cd5e 18 CLC 3649 cd5f ad a8 01 LDA score0+2 3650 cd62 69 01 ADC #$01 3651 cd64 8d a8 01 STA score0+2 3652 cd67 ad a7 01 LDA score0+1 3653 cd6a 69 00 ADC #$00 3654 cd6c 8d a7 01 STA score0+1 3655 cd6f ad a6 01 LDA score0 3656 cd72 69 00 ADC #$00 3657 cd74 8d a6 01 STA score0 3658 cd77 d8 CLD 3659 cd78 a9 01 lda #1 3660 cd7a 85 de sta sfxschedulelock 3661 cd7c a9 77 lda #sfx_explosion 3664 cd82 85 e1 sta sfxinstrumenthi 3665 cd84 a9 00 lda #0 3666 cd86 85 e2 sta sfxpitchoffset ; no pitch modification 3667 cd88 85 e3 sta sfxnoteindex ; not a musical note 3668 cd8a 20 58 f2 jsr schedulesfx 3669 cd8d a9 00 lda #0 3670 cd8f 85 de sta sfxschedulelock 3671 cd91 .skip95then 3672 cd91 .skip94then 3673 cd91 .skip93then 3674 cd91 .skipL0204 3675 cd91 . 3676 cd91 ;; 3677 cd91 3678 cd91 ._checkCollisionsExit 3679 cd91 ;; _checkCollisionsExit 3680 cd91 3681 cd91 .L0205 ;; return 3682 cd91 3683 cd91 60 RTS 3684 cd92 . 3685 cd92 ;; 3686 cd92 3687 cd92 . 3688 cd92 ;; 3689 cd92 3690 cd92 .SetBulletHome 3691 cd92 ;; SetBulletHome 3692 cd92 3693 cd92 .L0206 ;; bulletX = playerX + 4 : bulletY = playerY - 2 3694 cd92 3695 cd92 ad 41 01 LDA playerX 3696 cd95 18 CLC 3697 cd96 69 04 ADC #4 3698 cd98 8d 48 01 STA bulletX 3699 cd9b ad 42 01 LDA playerY 3700 cd9e 38 SEC 3701 cd9f e9 02 SBC #2 3702 cda1 8d 49 01 STA bulletY 3703 cda4 .L0207 ;; return 3704 cda4 3705 cda4 60 RTS 3706 cda5 . 3707 cda5 ;; 3708 cda5 3709 cda5 .SetLaserHome 3710 cda5 ;; SetLaserHome 3711 cda5 3712 cda5 .L0208 ;; twinlaserX = playerX + 4 : twinlaserY = playerY - 2 3713 cda5 3714 cda5 ad 41 01 LDA playerX 3715 cda8 18 CLC 3716 cda9 69 04 ADC #4 3717 cdab 8d 65 01 STA twinlaserX 3718 cdae ad 42 01 LDA playerY 3719 cdb1 38 SEC 3720 cdb2 e9 02 SBC #2 3721 cdb4 8d 66 01 STA twinlaserY 3722 cdb7 .L0209 ;; return 3723 cdb7 3724 cdb7 60 RTS 3725 cdb8 . 3726 cdb8 ;; 3727 cdb8 3728 cdb8 .L0210 ;; dmahole 2 3729 cdb8 3730 cdb8 4c 00 d8 jmp dmahole_2 3731 cdb8 DMAHOLEEND1 SET . 581 bytes of ROM space left in DMA hole 1. 3732 cdb8 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND1 - DMAHOLESTART1)]d , "bytes of ROM space left in DMA hole 1." 3733 cdbb - if ((256*WZONEHEIGHT)-(DMAHOLEEND1 - DMAHOLESTART1)) < 0 3734 cdbb -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 3735 cdbb endif 3736 cdbb 3737 d000 ORG $D000,0 ; ************* 3738 d000 3739 d000 3740 d100 ORG $D100,0 ; ************* 3741 d100 3742 d100 3743 d200 ORG $D200,0 ; ************* 3744 d200 3745 d200 3746 d300 ORG $D300,0 ; ************* 3747 d300 3748 d300 3749 d400 ORG $D400,0 ; ************* 3750 d400 3751 d400 3752 d500 ORG $D500,0 ; ************* 3753 d500 3754 d500 3755 d600 ORG $D600,0 ; ************* 3756 d600 3757 d600 3758 d700 ORG $D700,0 ; ************* 3759 d700 3760 d700 3761 d800 ORG $D800,0 ; ************* 3762 d800 dmahole_2 3763 d800 DMAHOLESTART2 SET . 3764 d800 . 3765 d800 ;; 3766 d800 3767 d800 .power_up_obtained 3768 d800 ;; power_up_obtained 3769 d800 3770 d800 .L0211 ;; if power_upFlag = 1 then twinlaser_flag = 1 3771 d800 3772 d800 ad 52 01 LDA power_upFlag 3773 d803 c9 01 CMP #1 3774 d805 d0 05 BNE .skipL0211 3775 d807 .condpart97 3776 d807 a9 01 LDA #1 3777 d809 8d 67 01 STA twinlaser_flag 3778 d80c .skipL0211 3779 d80c .L0212 ;; if twinlaser_flag = 1 && joy0up && joyposup = - 2 then gosub SetLaserHome 3780 d80c 3781 d80c ad 67 01 LDA twinlaser_flag 3782 d80f c9 01 CMP #1 3783 d811 d0 17 BNE .skipL0212 3784 d813 .condpart98 3785 d813 a9 10 lda #$10 3786 d815 2c 80 02 bit SWCHA 3787 d818 d0 10 BNE .skip98then 3788 d81a .condpart99 3789 d81a ; complex condition detected 3790 d81a a9 fe LDA #254 3791 d81c 48 PHA 3792 d81d ba TSX 3793 d81e 68 PLA 3794 d81f ad 44 01 LDA joyposup 3795 d822 dd 01 01 CMP $101,x 3796 d825 d0 03 BNE .skip99then 3797 d827 .condpart100 3798 d827 20 a5 cd jsr .SetLaserHome 3799 d82a 3800 d82a .skip99then 3801 d82a .skip98then 3802 d82a .skipL0212 3803 d82a .L0213 ;; if twinlaser_flag = 1 && joy0down && joyposdown = - 2 then gosub SetLaserHome 3804 d82a 3805 d82a ad 67 01 LDA twinlaser_flag 3806 d82d c9 01 CMP #1 3807 d82f d0 17 BNE .skipL0213 3808 d831 .condpart101 3809 d831 a9 20 lda #$20 3810 d833 2c 80 02 bit SWCHA 3811 d836 d0 10 BNE .skip101then 3812 d838 .condpart102 3813 d838 ; complex condition detected 3814 d838 a9 fe LDA #254 3815 d83a 48 PHA 3816 d83b ba TSX 3817 d83c 68 PLA 3818 d83d ad 45 01 LDA joyposdown 3819 d840 dd 01 01 CMP $101,x 3820 d843 d0 03 BNE .skip102then 3821 d845 .condpart103 3822 d845 20 a5 cd jsr .SetLaserHome 3823 d848 3824 d848 .skip102then 3825 d848 .skip101then 3826 d848 .skipL0213 3827 d848 .L0214 ;; if twinlaser_flag = 1 && joy0up && joyposleft = - 2 then gosub SetLaserHome 3828 d848 3829 d848 ad 67 01 LDA twinlaser_flag 3830 d84b c9 01 CMP #1 3831 d84d d0 17 BNE .skipL0214 3832 d84f .condpart104 3833 d84f a9 10 lda #$10 3834 d851 2c 80 02 bit SWCHA 3835 d854 d0 10 BNE .skip104then 3836 d856 .condpart105 3837 d856 ; complex condition detected 3838 d856 a9 fe LDA #254 3839 d858 48 PHA 3840 d859 ba TSX 3841 d85a 68 PLA 3842 d85b ad 46 01 LDA joyposleft 3843 d85e dd 01 01 CMP $101,x 3844 d861 d0 03 BNE .skip105then 3845 d863 .condpart106 3846 d863 20 a5 cd jsr .SetLaserHome 3847 d866 3848 d866 .skip105then 3849 d866 .skip104then 3850 d866 .skipL0214 3851 d866 .L0215 ;; if twinlaser_flag = 1 && joy0down && joyposright = - 2 then gosub SetLaserHome 3852 d866 3853 d866 ad 67 01 LDA twinlaser_flag 3854 d869 c9 01 CMP #1 3855 d86b d0 17 BNE .skipL0215 3856 d86d .condpart107 3857 d86d a9 20 lda #$20 3858 d86f 2c 80 02 bit SWCHA 3859 d872 d0 10 BNE .skip107then 3860 d874 .condpart108 3861 d874 ; complex condition detected 3862 d874 a9 fe LDA #254 3863 d876 48 PHA 3864 d877 ba TSX 3865 d878 68 PLA 3866 d879 ad 47 01 LDA joyposright 3867 d87c dd 01 01 CMP $101,x 3868 d87f d0 03 BNE .skip108then 3869 d881 .condpart109 3870 d881 20 a5 cd jsr .SetLaserHome 3871 d884 3872 d884 .skip108then 3873 d884 .skip107then 3874 d884 .skipL0215 3875 d884 . 3876 d884 ;; 3877 d884 3878 d884 .L0216 ;; if twinlaser_flag = 1 && joy0fire && joyposup = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3879 d884 3880 d884 ad 67 01 LDA twinlaser_flag 3881 d887 c9 01 CMP #1 3882 d889 d0 2e BNE .skipL0216 3883 d88b .condpart110 3884 d88b 2c 02 21 bit sINPT1 3885 d88e 10 29 BPL .skip110then 3886 d890 .condpart111 3887 d890 ad 44 01 LDA joyposup 3888 d893 c9 01 CMP #1 3889 d895 d0 22 BNE .skip111then 3890 d897 .condpart112 3891 d897 ad 66 01 LDA twinlaserY 3892 d89a 38 SEC 3893 d89b e9 0a SBC #10 3894 d89d 8d 66 01 STA twinlaserY 3895 d8a0 a9 01 lda #1 3896 d8a2 85 de sta sfxschedulelock 3897 d8a4 a9 44 lda #sfx_plainlaser 3900 d8aa 85 e1 sta sfxinstrumenthi 3901 d8ac a9 00 lda #0 3902 d8ae 85 e2 sta sfxpitchoffset ; no pitch modification 3903 d8b0 85 e3 sta sfxnoteindex ; not a musical note 3904 d8b2 20 58 f2 jsr schedulesfx 3905 d8b5 a9 00 lda #0 3906 d8b7 85 de sta sfxschedulelock 3907 d8b9 .skip111then 3908 d8b9 .skip110then 3909 d8b9 .skipL0216 3910 d8b9 .L0217 ;; if twinlaser_flag = 1 && joy0fire && joyposdown = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3911 d8b9 3912 d8b9 ad 67 01 LDA twinlaser_flag 3913 d8bc c9 01 CMP #1 3914 d8be d0 2e BNE .skipL0217 3915 d8c0 .condpart113 3916 d8c0 2c 02 21 bit sINPT1 3917 d8c3 10 29 BPL .skip113then 3918 d8c5 .condpart114 3919 d8c5 ad 45 01 LDA joyposdown 3920 d8c8 c9 01 CMP #1 3921 d8ca d0 22 BNE .skip114then 3922 d8cc .condpart115 3923 d8cc ad 66 01 LDA twinlaserY 3924 d8cf 38 SEC 3925 d8d0 e9 0a SBC #10 3926 d8d2 8d 66 01 STA twinlaserY 3927 d8d5 a9 01 lda #1 3928 d8d7 85 de sta sfxschedulelock 3929 d8d9 a9 44 lda #sfx_plainlaser 3932 d8df 85 e1 sta sfxinstrumenthi 3933 d8e1 a9 00 lda #0 3934 d8e3 85 e2 sta sfxpitchoffset ; no pitch modification 3935 d8e5 85 e3 sta sfxnoteindex ; not a musical note 3936 d8e7 20 58 f2 jsr schedulesfx 3937 d8ea a9 00 lda #0 3938 d8ec 85 de sta sfxschedulelock 3939 d8ee .skip114then 3940 d8ee .skip113then 3941 d8ee .skipL0217 3942 d8ee .L0218 ;; if twinlaser_flag = 1 && joy0fire && joyposleft = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3943 d8ee 3944 d8ee ad 67 01 LDA twinlaser_flag 3945 d8f1 c9 01 CMP #1 3946 d8f3 d0 2e BNE .skipL0218 3947 d8f5 .condpart116 3948 d8f5 2c 02 21 bit sINPT1 3949 d8f8 10 29 BPL .skip116then 3950 d8fa .condpart117 3951 d8fa ad 46 01 LDA joyposleft 3952 d8fd c9 01 CMP #1 3953 d8ff d0 22 BNE .skip117then 3954 d901 .condpart118 3955 d901 ad 66 01 LDA twinlaserY 3956 d904 38 SEC 3957 d905 e9 0a SBC #10 3958 d907 8d 66 01 STA twinlaserY 3959 d90a a9 01 lda #1 3960 d90c 85 de sta sfxschedulelock 3961 d90e a9 44 lda #sfx_plainlaser 3964 d914 85 e1 sta sfxinstrumenthi 3965 d916 a9 00 lda #0 3966 d918 85 e2 sta sfxpitchoffset ; no pitch modification 3967 d91a 85 e3 sta sfxnoteindex ; not a musical note 3968 d91c 20 58 f2 jsr schedulesfx 3969 d91f a9 00 lda #0 3970 d921 85 de sta sfxschedulelock 3971 d923 .skip117then 3972 d923 .skip116then 3973 d923 .skipL0218 3974 d923 .L0219 ;; if twinlaser_flag = 1 && joy0fire && joyposright = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3975 d923 3976 d923 ad 67 01 LDA twinlaser_flag 3977 d926 c9 01 CMP #1 3978 d928 d0 2e BNE .skipL0219 3979 d92a .condpart119 3980 d92a 2c 02 21 bit sINPT1 3981 d92d 10 29 BPL .skip119then 3982 d92f .condpart120 3983 d92f ad 47 01 LDA joyposright 3984 d932 c9 01 CMP #1 3985 d934 d0 22 BNE .skip120then 3986 d936 .condpart121 3987 d936 ad 66 01 LDA twinlaserY 3988 d939 38 SEC 3989 d93a e9 0a SBC #10 3990 d93c 8d 66 01 STA twinlaserY 3991 d93f a9 01 lda #1 3992 d941 85 de sta sfxschedulelock 3993 d943 a9 44 lda #sfx_plainlaser 3996 d949 85 e1 sta sfxinstrumenthi 3997 d94b a9 00 lda #0 3998 d94d 85 e2 sta sfxpitchoffset ; no pitch modification 3999 d94f 85 e3 sta sfxnoteindex ; not a musical note 4000 d951 20 58 f2 jsr schedulesfx 4001 d954 a9 00 lda #0 4002 d956 85 de sta sfxschedulelock 4003 d958 .skip120then 4004 d958 .skip119then 4005 d958 .skipL0219 4006 d958 .L0220 ;; if !joy0fire && fire_debounce then gosub SetLaserHome 4007 d958 4008 d958 2c 02 21 bit sINPT1 4009 d95b 30 08 BMI .skipL0220 4010 d95d .condpart122 4011 d95d ad 43 01 LDA fire_debounce 4012 d960 f0 03 BEQ .skip122then 4013 d962 .condpart123 4014 d962 20 a5 cd jsr .SetLaserHome 4015 d965 4016 d965 .skip122then 4017 d965 .skipL0220 4018 d965 . 4019 d965 ;; 4020 d965 4021 d965 . 4022 d965 ;; 4023 d965 4024 d965 . 4025 d965 ;; 4026 d965 4027 d965 .L0221 ;; return 4028 d965 4029 d965 60 RTS 4030 d966 . 4031 d966 ;; 4032 d966 4033 d966 .lose_a_life 4034 d966 ;; lose_a_life 4035 d966 4036 d966 .L0222 ;; lives = lives - 1 : isDead_flag = 0 4037 d966 4038 d966 ad 64 01 LDA lives 4039 d969 38 SEC 4040 d96a e9 01 SBC #1 4041 d96c 8d 64 01 STA lives 4042 d96f a9 00 LDA #0 4043 d971 8d 6a 01 STA isDead_flag 4044 d974 .L0223 ;; if enemy01_Flag <> 1 then enemy01_X = 32 : enemy01_Y = 0 4045 d974 4046 d974 ad 59 01 LDA enemy01_Flag 4047 d977 c9 01 CMP #1 4048 d979 f0 0a BEQ .skipL0223 4049 d97b .condpart124 4050 d97b a9 20 LDA #32 4051 d97d 8d 57 01 STA enemy01_X 4052 d980 a9 00 LDA #0 4053 d982 8d 58 01 STA enemy01_Y 4054 d985 .skipL0223 4055 d985 .L0224 ;; if enemy_shotFlag <> 1 then enemy_shotX = 0 : enemy_shotY = 0 4056 d985 4057 d985 ad 4c 01 LDA enemy_shotFlag 4058 d988 c9 01 CMP #1 4059 d98a f0 08 BEQ .skipL0224 4060 d98c .condpart125 4061 d98c a9 00 LDA #0 4062 d98e 8d 4a 01 STA enemy_shotX 4063 d991 8d 4b 01 STA enemy_shotY 4064 d994 .skipL0224 4065 d994 .L0225 ;; if playerFlag = 1 && explosion_aniframe = 200 && lives > 0 then playerX = 80 : playerY = 144 : playerFlag = 0 : explosion_aniframe = 0 : twinlaser_flag = 0 : goto main 4066 d994 4067 d994 ad 4d 01 LDA playerFlag 4068 d997 c9 01 CMP #1 4069 d999 d0 26 BNE .skipL0225 4070 d99b .condpart126 4071 d99b ad 63 01 LDA explosion_aniframe 4072 d99e c9 c8 CMP #200 4073 d9a0 d0 1f BNE .skip126then 4074 d9a2 .condpart127 4075 d9a2 a9 00 LDA #0 4076 d9a4 cd 64 01 CMP lives 4077 d9a7 b0 18 BCS .skip127then 4078 d9a9 .condpart128 4079 d9a9 a9 50 LDA #80 4080 d9ab 8d 41 01 STA playerX 4081 d9ae a9 90 LDA #144 4082 d9b0 8d 42 01 STA playerY 4083 d9b3 a9 00 LDA #0 4084 d9b5 8d 4d 01 STA playerFlag 4085 d9b8 8d 63 01 STA explosion_aniframe 4086 d9bb 8d 67 01 STA twinlaser_flag 4087 d9be 4c da b8 jmp .main 4088 d9c1 4089 d9c1 .skip127then 4090 d9c1 .skip126then 4091 d9c1 .skipL0225 4092 d9c1 .L0226 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 4093 d9c1 4094 d9c1 a9 00 LDA #0 4095 d9c3 8d 44 01 STA joyposup 4096 d9c6 8d 45 01 STA joyposdown 4097 d9c9 8d 46 01 STA joyposleft 4098 d9cc 8d 47 01 STA joyposright 4099 d9cf .L0227 ;; fire_debounce = 0 : bulletX = 0 : bulletY = 0 4100 d9cf 4101 d9cf a9 00 LDA #0 4102 d9d1 8d 43 01 STA fire_debounce 4103 d9d4 8d 48 01 STA bulletX 4104 d9d7 8d 49 01 STA bulletY 4105 d9da .L0228 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 4106 d9da 4107 d9da a9 00 LDA #0 4108 d9dc 8d 57 01 STA enemy01_X 4109 d9df 8d 58 01 STA enemy01_Y 4110 d9e2 8d 59 01 STA enemy01_Flag 4111 d9e5 .L0229 ;; playerFlag = 0 : gameover_flag = 0 4112 d9e5 4113 d9e5 a9 00 LDA #0 4114 d9e7 8d 4d 01 STA playerFlag 4115 d9ea 8d 5f 01 STA gameover_flag 4116 d9ed .L0230 ;; power_upFlag = 0 : twinlaser_flag = 0 4117 d9ed 4118 d9ed a9 00 LDA #0 4119 d9ef 8d 52 01 STA power_upFlag 4120 d9f2 8d 67 01 STA twinlaser_flag 4121 d9f5 . 4122 d9f5 ;; 4123 d9f5 4124 d9f5 . 4125 d9f5 ;; 4126 d9f5 4127 d9f5 . 4128 d9f5 ;; 4129 d9f5 4130 d9f5 .lose_a_lifeloop 4131 d9f5 ;; lose_a_lifeloop 4132 d9f5 4133 d9f5 .L0231 ;; restorescreen 4134 d9f5 4135 d9f5 20 9e f0 jsr restorescreen 4136 d9f8 .L0232 ;; gosub draw_scores 4137 d9f8 4138 d9f8 20 ea c9 jsr .draw_scores 4139 d9fb 4140 d9fb .L0233 ;; drawscreen 4141 d9fb 4142 d9fb 20 c0 f0 jsr drawscreen 4143 d9fe .L0234 ;; if joy0fire then fire_debounce = 2 4144 d9fe 4145 d9fe 2c 02 21 bit sINPT1 4146 da01 10 05 BPL .skipL0234 4147 da03 .condpart129 4148 da03 a9 02 LDA #2 4149 da05 8d 43 01 STA fire_debounce 4150 da08 .skipL0234 4151 da08 .L0235 ;; if !joy0fire then fire_debounce = 1 4152 da08 4153 da08 2c 02 21 bit sINPT1 4154 da0b 30 05 BMI .skipL0235 4155 da0d .condpart130 4156 da0d a9 01 LDA #1 4157 da0f 8d 43 01 STA fire_debounce 4158 da12 .skipL0235 4159 da12 .L0236 ;; if fire_debounce = 1 && lives > 0 then clearscreen : goto main 4160 da12 4161 da12 ad 43 01 LDA fire_debounce 4162 da15 c9 01 CMP #1 4163 da17 d0 0d BNE .skipL0236 4164 da19 .condpart131 4165 da19 a9 00 LDA #0 4166 da1b cd 64 01 CMP lives 4167 da1e b0 06 BCS .skip131then 4168 da20 .condpart132 4169 da20 20 8c f0 jsr clearscreen 4170 da23 4c da b8 jmp .main 4171 da26 4172 da26 .skip131then 4173 da26 .skipL0236 4174 da26 .L0237 ;; if fire_debounce = 1 && lives < 1 then clearscreen : goto gameover 4175 da26 4176 da26 ad 43 01 LDA fire_debounce 4177 da29 c9 01 CMP #1 4178 da2b d0 0d BNE .skipL0237 4179 da2d .condpart133 4180 da2d ad 64 01 LDA lives 4181 da30 c9 01 CMP #1 4182 da32 b0 06 BCS .skip133then 4183 da34 .condpart134 4184 da34 20 8c f0 jsr clearscreen 4185 da37 4c 3d da jmp .gameover 4186 da3a 4187 da3a .skip133then 4188 da3a .skipL0237 4189 da3a .L0238 ;; goto lose_a_lifeloop 4190 da3a 4191 da3a 4c f5 d9 jmp .lose_a_lifeloop 4192 da3d 4193 da3d . 4194 da3d ;; 4195 da3d 4196 da3d .gameover 4197 da3d ;; gameover 4198 da3d 4199 da3d .L0239 ;; gameover_flag = 0 4200 da3d 4201 da3d a9 00 LDA #0 4202 da3f 8d 5f 01 STA gameover_flag 4203 da42 .L0240 ;; fire_debounce = 1 4204 da42 4205 da42 a9 01 LDA #1 4206 da44 8d 43 01 STA fire_debounce 4207 da47 .gameover_loop 4208 da47 ;; gameover_loop 4209 da47 4210 da47 .L0241 ;; if lives = 0 then gameover_flag = 1 : clearscreen 4211 da47 4212 da47 ad 64 01 LDA lives 4213 da4a c9 00 CMP #0 4214 da4c d0 08 BNE .skipL0241 4215 da4e .condpart135 4216 da4e a9 01 LDA #1 4217 da50 8d 5f 01 STA gameover_flag 4218 da53 20 8c f0 jsr clearscreen 4219 da56 .skipL0241 4220 da56 .L0242 ;; plotchars 'game^over!' 0 40 16 4221 da56 4222 da56 4c 63 da JMP skipalphadata4 4223 da59 alphadata4 4224 da59 11 .byte.b (alphadata4 4239 da69 85 43 sta temp2 4240 da6b 4241 da6b a9 16 lda #22 ; width in two's complement 4242 da6d 09 00 ora #0 ; palette left shifted 5 bits 4243 da6f 85 44 sta temp3 4244 da71 a9 28 lda #40 4245 da73 85 45 sta temp4 4246 da75 4247 da75 a9 10 lda #16 4248 da77 4249 da77 85 46 sta temp5 4250 da79 4251 da79 20 59 f3 jsr plotcharacters 4252 da7c .L0243 ;; if joy0fire && !fire_debounce then clearscreen : goto plot 4253 da7c 4254 da7c 2c 02 21 bit sINPT1 4255 da7f 10 0b BPL .skipL0243 4256 da81 .condpart136 4257 da81 ad 43 01 LDA fire_debounce 4258 da84 d0 06 BNE .skip136then 4259 da86 .condpart137 4260 da86 20 8c f0 jsr clearscreen 4261 da89 4c 30 b8 jmp .plot 4262 da8c 4263 da8c .skip136then 4264 da8c .skipL0243 4265 da8c .L0244 ;; if !joy0fire then fire_debounce = 0 4266 da8c 4267 da8c 2c 02 21 bit sINPT1 4268 da8f 30 05 BMI .skipL0244 4269 da91 .condpart138 4270 da91 a9 00 LDA #0 4271 da93 8d 43 01 STA fire_debounce 4272 da96 .skipL0244 4273 da96 .L0245 ;; goto gameover_loop 4274 da96 4275 da96 4c 47 da jmp .gameover_loop 4276 da99 4277 da99 . 4278 da99 ;; 4279 da99 4280 da99 . 4281 da99 ;; 4282 da99 4283 da99 . 4284 da99 ;; 4285 da99 4286 da99 . 4287 da99 ;; 4288 da99 4289 da99 . 4290 da99 ;; 4291 da99 4292 da99 . 4293 da99 ;; 4294 da99 4295 da99 . 4296 da99 ;; 4297 da99 4298 da99 . 4299 da99 ;; 4300 da99 4301 da99 . 4302 da99 ;; 4303 da99 4304 da99 . 4305 da99 ;; 4306 da99 4307 da99 . 4308 da99 ;; 4309 da99 4310 da99 . 4311 da99 ;; 4312 da99 4313 da99 . 4314 da99 ;; 4315 da99 4316 da99 . 4317 da99 ;; 4318 da99 4319 da99 . 4320 da99 ;; 4321 da99 4322 da99 . 4323 da99 ;; 4324 da99 4325 da99 . 4326 da99 ;; 4327 da99 4328 da99 .titlescreen 4329 da99 ;; titlescreen 4330 da99 4331 da99 .L0246 ;; plotchars 'new^vertical^shooting' 1 38 4 4332 da99 4333 da99 4c b1 da JMP skipalphadata5 4334 da9c alphadata5 4335 da9c 18 .byte.b (alphadata5 4361 dab7 85 43 sta temp2 4362 dab9 4363 dab9 a9 0b lda #11 ; width in two's complement 4364 dabb 09 20 ora #32 ; palette left shifted 5 bits 4365 dabd 85 44 sta temp3 4366 dabf a9 26 lda #38 4367 dac1 85 45 sta temp4 4368 dac3 4369 dac3 a9 04 lda #4 4370 dac5 4371 dac5 85 46 sta temp5 4372 dac7 4373 dac7 20 59 f3 jsr plotcharacters 4374 daca .L0247 ;; plotchars 'demo' 1 72 5 4375 daca 4376 daca 4c d1 da JMP skipalphadata6 4377 dacd alphadata6 4378 dacd 0e .byte.b (alphadata6 4387 dad7 85 43 sta temp2 4388 dad9 4389 dad9 a9 1c lda #28 ; width in two's complement 4390 dadb 09 20 ora #32 ; palette left shifted 5 bits 4391 dadd 85 44 sta temp3 4392 dadf a9 48 lda #72 4393 dae1 85 45 sta temp4 4394 dae3 4395 dae3 a9 05 lda #5 4396 dae5 4397 dae5 85 46 sta temp5 4398 dae7 4399 dae7 20 59 f3 jsr plotcharacters 4400 daea .L0248 ;; plotchars 'by^shane^skekel.' 1 48 7 4401 daea 4402 daea 4c fd da JMP skipalphadata7 4403 daed alphadata7 4404 daed 0c .byte.b (alphadata7 4425 db03 85 43 sta temp2 4426 db05 4427 db05 a9 10 lda #16 ; width in two's complement 4428 db07 09 20 ora #32 ; palette left shifted 5 bits 4429 db09 85 44 sta temp3 4430 db0b a9 30 lda #48 4431 db0d 85 45 sta temp4 4432 db0f 4433 db0f a9 07 lda #7 4434 db11 4435 db11 85 46 sta temp5 4436 db13 4437 db13 20 59 f3 jsr plotcharacters 4438 db16 .L0249 ;; plotchars 'push^fire^to^begin.' 2 42 16 4439 db16 4440 db16 4c 2c db JMP skipalphadata8 4441 db19 alphadata8 4442 db19 1a .byte.b (alphadata8 4466 db32 85 43 sta temp2 4467 db34 4468 db34 a9 0d lda #13 ; width in two's complement 4469 db36 09 40 ora #64 ; palette left shifted 5 bits 4470 db38 85 44 sta temp3 4471 db3a a9 2a lda #42 4472 db3c 85 45 sta temp4 4473 db3e 4474 db3e a9 10 lda #16 4475 db40 4476 db40 85 46 sta temp5 4477 db42 4478 db42 20 59 f3 jsr plotcharacters 4479 db45 .L0250 ;; savescreen 4480 db45 4481 db45 20 b0 f0 jsr savescreen 4482 db48 .L0251 ;; drawscreen 4483 db48 4484 db48 20 c0 f0 jsr drawscreen 4485 db4b .L0252 ;; fire_debounce = 1 4486 db4b 4487 db4b a9 01 LDA #1 4488 db4d 8d 43 01 STA fire_debounce 4489 db50 . 4490 db50 ;; 4491 db50 4492 db50 .titlescreenloop 4493 db50 ;; titlescreenloop 4494 db50 4495 db50 .L0253 ;; restorescreen 4496 db50 4497 db50 20 9e f0 jsr restorescreen 4498 db53 .L0254 ;; if switchreset then reboot 4499 db53 4500 db53 20 85 f4 jsr checkresetswitch 4501 db56 d0 03 BNE .skipL0254 4502 db58 .condpart139 4503 db58 4c 72 f5 JMP START 4504 db5b .skipL0254 4505 db5b .L0255 ;; if joy0fire then clearscreen : savescreen : lives = $04 : score0 = 0 : playsfx sfx_bling : goto main 4506 db5b 4507 db5b 2c 02 21 bit sINPT1 4508 db5e 10 36 BPL .skipL0255 4509 db60 .condpart140 4510 db60 20 8c f0 jsr clearscreen 4511 db63 20 b0 f0 jsr savescreen 4512 db66 a9 04 LDA #$04 4513 db68 8d 64 01 STA lives 4514 db6b a9 00 LDA #$00 4515 db6d 8d a8 01 STA score0+2 4516 db70 a9 00 LDA #$00 4517 db72 8d a7 01 STA score0+1 4518 db75 a9 00 LDA #$00 4519 db77 8d a6 01 STA score0 4520 db7a a9 01 lda #1 4521 db7c 85 de sta sfxschedulelock 4522 db7e a9 b4 lda #sfx_bling 4525 db84 85 e1 sta sfxinstrumenthi 4526 db86 a9 00 lda #0 4527 db88 85 e2 sta sfxpitchoffset ; no pitch modification 4528 db8a 85 e3 sta sfxnoteindex ; not a musical note 4529 db8c 20 58 f2 jsr schedulesfx 4530 db8f a9 00 lda #0 4531 db91 85 de sta sfxschedulelock 4532 db93 4c da b8 jmp .main 4533 db96 4534 db96 .skipL0255 4535 db96 .L0256 ;; if !joy0fire then fire_debounce = 0 4536 db96 4537 db96 2c 02 21 bit sINPT1 4538 db99 30 05 BMI .skipL0256 4539 db9b .condpart141 4540 db9b a9 00 LDA #0 4541 db9d 8d 43 01 STA fire_debounce 4542 dba0 .skipL0256 4543 dba0 . 4544 dba0 ;; 4545 dba0 4546 dba0 . 4547 dba0 ;; 4548 dba0 4549 dba0 . 4550 dba0 ;; 4551 dba0 4552 dba0 .L0257 ;; drawscreen 4553 dba0 4554 dba0 20 c0 f0 jsr drawscreen 4555 dba3 .L0258 ;; goto titlescreenloop 4556 dba3 4557 dba3 4c 50 db jmp .titlescreenloop 4558 dba6 4559 dba6 . 4560 dba6 ;; 4561 dba6 4562 dba6 . 4563 dba6 ;; 4564 dba6 4565 dba6 .initialise_gamescreen 4566 dba6 ;; initialise_gamescreen 4567 dba6 4568 dba6 .L0259 ;; clearscreen 4569 dba6 4570 dba6 20 8c f0 jsr clearscreen 4571 dba9 .L0260 ;; BACKGRND = $00 4572 dba9 4573 dba9 a9 00 LDA #$00 4574 dbab 85 20 STA BACKGRND 4575 dbad . 4576 dbad ;; 4577 dbad 4578 dbad .L0261 ;; savescreen 4579 dbad 4580 dbad 20 b0 f0 jsr savescreen 4581 dbb0 .L0262 ;; return 4582 dbb0 4583 dbb0 60 RTS 4584 dbb1 . 4585 dbb1 ;; 4586 dbb1 4587 dbb1 . 4588 dbb1 ;; 4589 dbb1 4590 dbb1 . 4591 dbb1 ;; 4592 dbb1 4593 dbb1 . 4594 dbb1 ;; 4595 dbb1 4596 dbb1 . 4597 dbb1 ;; 4598 dbb1 4599 dbb1 . 4600 dbb1 ;; 4601 dbb1 4602 dbb1 . 4603 dbb1 ;; 4604 dbb1 4605 dbb1 . 4606 dbb1 ;; 4607 dbb1 4608 dbb1 . 4609 dbb1 ;; 4610 dbb1 4611 dbb1 . 4612 dbb1 ;; 4613 dbb1 4614 dbb1 . 4615 dbb1 ;; 4616 dbb1 4617 dbb1 . 4618 dbb1 ;; 4619 dbb1 4620 dbb1 . 4621 dbb1 ;; 4622 dbb1 4623 dbb1 . 4624 dbb1 ;; 4625 dbb1 4626 dbb1 . 4627 dbb1 ;; 4628 dbb1 4629 dbb1 . 4630 dbb1 ;; 4631 dbb1 4632 dbb1 . 4633 dbb1 ;; 4634 dbb1 4635 dbb1 . 4636 dbb1 ;; 4637 dbb1 4638 dbb1 . 4639 dbb1 ;; 4640 dbb1 4641 dbb1 . 4642 dbb1 ;; 4643 dbb1 4644 dbb1 . 4645 dbb1 ;; 4646 dbb1 4647 dbb1 . 4648 dbb1 ;; 4649 dbb1 4650 dbb1 . 4651 dbb1 ;; 4652 dbb1 4653 dbb1 . 4654 dbb1 ;; 4655 dbb1 4656 dbb1 . 4657 dbb1 ;; 4658 dbb1 4659 dbb1 . 4660 dbb1 ;; 4661 dbb1 4662 dbb1 . 4663 dbb1 ;; 4664 dbb1 4665 dbb1 . 4666 dbb1 ;; 4667 dbb1 4668 dbb1 . 4669 dbb1 ;; 4670 dbb1 4671 dbb1 . 4672 dbb1 ;; 4673 dbb1 4674 dbb1 . 4675 dbb1 ;; 4676 dbb1 4677 dbb1 . 4678 dbb1 ;; 4679 dbb1 4680 dbb1 .L0263 ;; data sfx_bling 4681 dbb1 4682 dbb1 4c ea db JMP .skipL0263 4683 dbb4 sfx_bling 4684 dbb4 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 4685 dbb7 4686 dbb7 1c 04 07 .byte.b $1c,$04,$07 4687 dbba 4688 dbba 1b 04 07 .byte.b $1b,$04,$07 4689 dbbd 4690 dbbd 04 0f 05 .byte.b $04,$0f,$05 4691 dbc0 4692 dbc0 15 04 09 .byte.b $15,$04,$09 4693 dbc3 4694 dbc3 16 04 07 .byte.b $16,$04,$07 4695 dbc6 4696 dbc6 03 0f 04 .byte.b $03,$0f,$04 4697 dbc9 4698 dbc9 11 04 08 .byte.b $11,$04,$08 4699 dbcc 4700 dbcc 11 04 08 .byte.b $11,$04,$08 4701 dbcf 4702 dbcf 11 04 04 .byte.b $11,$04,$04 4703 dbd2 4704 dbd2 0e 04 09 .byte.b $0e,$04,$09 4705 dbd5 4706 dbd5 0e 04 07 .byte.b $0e,$04,$07 4707 dbd8 4708 dbd8 0e 04 04 .byte.b $0e,$04,$04 4709 dbdb 4710 dbdb 1c 04 07 .byte.b $1c,$04,$07 4711 dbde 4712 dbde 1b 04 05 .byte.b $1b,$04,$05 4713 dbe1 4714 dbe1 1c 04 04 .byte.b $1c,$04,$04 4715 dbe4 4716 dbe4 1b 04 02 .byte.b $1b,$04,$02 4717 dbe7 4718 dbe7 00 00 00 .byte.b $00,$00,$00 4719 dbea 4720 dbea .skipL0263 4721 dbea 00 b4 sfx_bling_lo = #sfx_bling 4723 dbea . 4724 dbea ;; 4725 dbea 4726 dbea .L0264 ;; data sfx_pulsecannon 4727 dbea 4728 dbea 4c 41 dc JMP .skipL0264 4729 dbed sfx_pulsecannon 4730 dbed 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 4731 dbf0 4732 dbf0 1e 0c 0a .byte.b $1e,$0c,$0a ; first chunk of freq,channel,volume 4733 dbf3 4734 dbf3 07 06 0f .byte.b $07,$06,$0f 4735 dbf6 4736 dbf6 07 06 0f .byte.b $07,$06,$0f 4737 dbf9 4738 dbf9 1e 06 0f .byte.b $1e,$06,$0f 4739 dbfc 4740 dbfc 17 0c 0b .byte.b $17,$0c,$0b 4741 dbff 4742 dbff 1b 0c 0b .byte.b $1b,$0c,$0b 4743 dc02 4744 dc02 1e 0c 0f .byte.b $1e,$0c,$0f 4745 dc05 4746 dc05 07 06 0f .byte.b $07,$06,$0f 4747 dc08 4748 dc08 07 06 0f .byte.b $07,$06,$0f 4749 dc0b 4750 dc0b 1e 06 08 .byte.b $1e,$06,$08 4751 dc0e 4752 dc0e 17 0c 06 .byte.b $17,$0c,$06 4753 dc11 4754 dc11 1b 0c 0f .byte.b $1b,$0c,$0f 4755 dc14 4756 dc14 1e 0c 0f .byte.b $1e,$0c,$0f 4757 dc17 4758 dc17 07 06 0f .byte.b $07,$06,$0f 4759 dc1a 4760 dc1a 07 06 0f .byte.b $07,$06,$0f 4761 dc1d 4762 dc1d 0a 06 0a .byte.b $0a,$06,$0a 4763 dc20 4764 dc20 17 0c 0a .byte.b $17,$0c,$0a 4765 dc23 4766 dc23 1e 0c 04 .byte.b $1e,$0c,$04 4767 dc26 4768 dc26 1e 06 09 .byte.b $1e,$06,$09 4769 dc29 4770 dc29 1b 04 05 .byte.b $1b,$04,$05 4771 dc2c 4772 dc2c 07 06 0f .byte.b $07,$06,$0f 4773 dc2f 4774 dc2f 0a 06 09 .byte.b $0a,$06,$09 4775 dc32 4776 dc32 17 0c 0d .byte.b $17,$0c,$0d 4777 dc35 4778 dc35 1b 0c 09 .byte.b $1b,$0c,$09 4779 dc38 4780 dc38 0a 06 05 .byte.b $0a,$06,$05 4781 dc3b 4782 dc3b 17 0c 03 .byte.b $17,$0c,$03 4783 dc3e 4784 dc3e 00 00 00 .byte.b $00,$00,$00 4785 dc41 4786 dc41 .skipL0264 4787 dc41 00 ed sfx_pulsecannon_lo = #sfx_pulsecannon 4789 dc41 . 4790 dc41 ;; 4791 dc41 4792 dc41 .L0265 ;; data sfx_plainlaser 4793 dc41 4794 dc41 4c 74 dc JMP .skipL0265 4795 dc44 sfx_plainlaser 4796 dc44 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 4797 dc47 4798 dc47 10 04 06 .byte.b $10,$04,$06 ; first chunk of freq,channel,volume 4799 dc4a 4800 dc4a 13 04 08 .byte.b $13,$04,$08 4801 dc4d 4802 dc4d 16 04 08 .byte.b $16,$04,$08 4803 dc50 4804 dc50 16 04 07 .byte.b $16,$04,$07 4805 dc53 4806 dc53 1c 04 09 .byte.b $1c,$04,$09 4807 dc56 4808 dc56 0b 0c 0f .byte.b $0b,$0c,$0f 4809 dc59 4810 dc59 0d 0c 0f .byte.b $0d,$0c,$0f 4811 dc5c 4812 dc5c 0e 0c 0f .byte.b $0e,$0c,$0f 4813 dc5f 4814 dc5f 0e 0c 0f .byte.b $0e,$0c,$0f 4815 dc62 4816 dc62 12 0c 0f .byte.b $12,$0c,$0f 4817 dc65 4818 dc65 03 06 0d .byte.b $03,$06,$0d 4819 dc68 4820 dc68 1e 0c 0a .byte.b $1e,$0c,$0a 4821 dc6b 4822 dc6b 1e 0c 0c .byte.b $1e,$0c,$0c 4823 dc6e 4824 dc6e 0a 06 04 .byte.b $0a,$06,$04 4825 dc71 4826 dc71 00 00 00 .byte.b $00,$00,$00 4827 dc74 4828 dc74 .skipL0265 4829 dc74 00 44 sfx_plainlaser_lo = #sfx_plainlaser 4831 dc74 . 4832 dc74 ;; 4833 dc74 4834 dc74 .L0266 ;; data sfx_explosion 4835 dc74 4836 dc74 4c 07 dd JMP .skipL0266 4837 dc77 sfx_explosion 4838 dc77 10 10 00 .byte.b $10,$10,$00 4839 dc7a 4840 dc7a 01 08 02 .byte.b $01,$08,$02 4841 dc7d 4842 dc7d 0b 0c 05 .byte.b $0b,$0c,$05 4843 dc80 4844 dc80 04 06 08 .byte.b $04,$06,$08 4845 dc83 4846 dc83 03 0e 0f .byte.b $03,$0e,$0f 4847 dc86 4848 dc86 09 06 0f .byte.b $09,$06,$0f 4849 dc89 4850 dc89 0d 06 0f .byte.b $0d,$06,$0f 4851 dc8c 4852 dc8c 04 0e 0f .byte.b $04,$0e,$0f 4853 dc8f 4854 dc8f 0f 06 08 .byte.b $0f,$06,$08 4855 dc92 4856 dc92 09 06 04 .byte.b $09,$06,$04 4857 dc95 4858 dc95 16 01 03 .byte.b $16,$01,$03 4859 dc98 4860 dc98 0c 06 04 .byte.b $0c,$06,$04 4861 dc9b 4862 dc9b 09 06 05 .byte.b $09,$06,$05 4863 dc9e 4864 dc9e 0a 06 03 .byte.b $0a,$06,$03 4865 dca1 4866 dca1 09 06 05 .byte.b $09,$06,$05 4867 dca4 4868 dca4 0d 06 08 .byte.b $0d,$06,$08 4869 dca7 4870 dca7 09 06 04 .byte.b $09,$06,$04 4871 dcaa 4872 dcaa 04 0e 06 .byte.b $04,$0e,$06 4873 dcad 4874 dcad 0f 06 05 .byte.b $0f,$06,$05 4875 dcb0 4876 dcb0 0f 06 07 .byte.b $0f,$06,$07 4877 dcb3 4878 dcb3 04 0e 07 .byte.b $04,$0e,$07 4879 dcb6 4880 dcb6 08 06 06 .byte.b $08,$06,$06 4881 dcb9 4882 dcb9 03 0e 08 .byte.b $03,$0e,$08 4883 dcbc 4884 dcbc 0f 06 06 .byte.b $0f,$06,$06 4885 dcbf 4886 dcbf 09 06 05 .byte.b $09,$06,$05 4887 dcc2 4888 dcc2 06 06 05 .byte.b $06,$06,$05 4889 dcc5 4890 dcc5 03 0e 05 .byte.b $03,$0e,$05 4891 dcc8 4892 dcc8 0e 06 06 .byte.b $0e,$06,$06 4893 dccb 4894 dccb 02 0e 05 .byte.b $02,$0e,$05 4895 dcce 4896 dcce 0f 06 03 .byte.b $0f,$06,$03 4897 dcd1 4898 dcd1 0e 06 06 .byte.b $0e,$06,$06 4899 dcd4 4900 dcd4 09 06 05 .byte.b $09,$06,$05 4901 dcd7 4902 dcd7 0c 06 05 .byte.b $0c,$06,$05 4903 dcda 4904 dcda 0f 06 03 .byte.b $0f,$06,$03 4905 dcdd 4906 dcdd 04 0e 08 .byte.b $04,$0e,$08 4907 dce0 4908 dce0 0c 06 03 .byte.b $0c,$06,$03 4909 dce3 4910 dce3 0f 06 03 .byte.b $0f,$06,$03 4911 dce6 4912 dce6 0c 06 06 .byte.b $0c,$06,$06 4913 dce9 4914 dce9 0f 06 04 .byte.b $0f,$06,$04 4915 dcec 4916 dcec 0f 06 05 .byte.b $0f,$06,$05 4917 dcef 4918 dcef 0f 06 03 .byte.b $0f,$06,$03 4919 dcf2 4920 dcf2 0a 06 04 .byte.b $0a,$06,$04 4921 dcf5 4922 dcf5 0f 06 03 .byte.b $0f,$06,$03 4923 dcf8 4924 dcf8 08 06 03 .byte.b $08,$06,$03 4925 dcfb 4926 dcfb 0c 06 03 .byte.b $0c,$06,$03 4927 dcfe 4928 dcfe 0e 06 03 .byte.b $0e,$06,$03 4929 dd01 4930 dd01 08 06 03 .byte.b $08,$06,$03 4931 dd04 4932 dd04 00 00 00 .byte.b $00,$00,$00 4933 dd07 4934 dd07 .skipL0266 4935 dd07 00 77 sfx_explosion_lo = #sfx_explosion 4937 dd07 DMAHOLEEND2 SET . 761 bytes of ROM space left in DMA hole 2. 4938 dd07 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND2 - DMAHOLESTART2)]d , "bytes of ROM space left in DMA hole 2." 4939 dd07 - if ((256*WZONEHEIGHT)-(DMAHOLEEND2 - DMAHOLESTART2)) < 0 4940 dd07 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 4941 dd07 endif 4942 dd07 4943 e000 ORG $E000,0 ; ************* 4944 e000 4945 e000 4946 e100 ORG $E100,0 ; ************* 4947 e100 4948 e100 4949 e200 ORG $E200,0 ; ************* 4950 e200 4951 e200 4952 e300 ORG $E300,0 ; ************* 4953 e300 4954 e300 4955 e400 ORG $E400,0 ; ************* 4956 e400 4957 e400 4958 e500 ORG $E500,0 ; ************* 4959 e500 4960 e500 4961 e600 ORG $E600,0 ; ************* 4962 e600 4963 e600 4964 e700 ORG $E700,0 ; ************* 4965 e700 4966 e700 - if SPACEOVERFLOW > 0 4967 e700 - echo "" 4968 e700 - echo "######## ERROR: space overflow detected in",[SPACEOVERFLOW]d,"areas." 4969 e700 - echo "######## look above for areas with negative ROM space left." 4970 e700 - echo "######## Aborting assembly." 4971 e700 - ERR 4972 e700 endif 4973 e700 4974 e700 4975 e700 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4976 e700 4977 e700 ifnconst bankswitchmode 4978 e700 if ( * < $f000 ) 4979 f000 ORG $F000 4980 f000 endif 4981 f000 - else 4982 f000 - ifconst ROM128K 4983 f000 - if ( * < $f000 ) 4984 f000 - ORG $27000 4985 f000 - RORG $F000 4986 f000 - endif 4987 f000 - endif 4988 f000 - ifconst ROM144K 4989 f000 - if ( * < $f000 ) 4990 f000 - ORG $27000 4991 f000 - RORG $F000 4992 f000 - endif 4993 f000 - endif 4994 f000 - ifconst ROM256K 4995 f000 - if ( * < $f000 ) 4996 f000 - ORG $47000 4997 f000 - RORG $F000 4998 f000 - endif 4999 f000 - endif 5000 f000 - ifconst ROM272K 5001 f000 - if ( * < $f000 ) 5002 f000 - ORG $47000 5003 f000 - RORG $F000 5004 f000 - endif 5005 f000 - endif 5006 f000 - ifconst ROM512K 5007 f000 - if ( * < $f000 ) 5008 f000 - ORG $87000 5009 f000 - RORG $F000 5010 f000 - endif 5011 f000 - endif 5012 f000 - ifconst ROM528K 5013 f000 - if ( * < $f000 ) 5014 f000 - ORG $87000 5015 f000 - RORG $F000 5016 f000 - endif 5017 f000 - endif 5018 f000 endif 5019 f000 5020 f000 ; all of these "modules" have conditional clauses in them, so even though 5021 f000 ; they're always included here, they don't take up rom unless the user 5022 f000 ; explicitly enables support for the feature. 5023 f000 5024 f000 ifnconst included.7800vox.asm ------- FILE 7800vox.asm LEVEL 2 PASS 3 0 f000 include 7800vox.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 ; AtariVox 7800basic wrapper 4 f000 5 f000 ; to be called with 6 f000 ; A=# of bytes 7 f000 ; 8 f000 9 f000 - ifconst HSSUPPORT 10 f000 - 11 f000 -AVoxReadBytes 12 f000 - sta temp8 13 f000 - jsr i2c_startwrite 14 f000 - bcs eeprom_error 15 f000 - 16 f000 - lda HSVoxHi 17 f000 - jsr i2c_txbyte 18 f000 - lda HSVoxLo 19 f000 - jsr i2c_txbyte 20 f000 - jsr i2c_stopwrite 21 f000 - 22 f000 - jsr i2c_startread 23 f000 - 24 f000 - ldx #0 25 f000 -AVoxReadBytesLoop 26 f000 - jsr i2c_rxbyte 27 f000 - sta eeprombuffer,x 28 f000 - inx 29 f000 - cpx temp8 30 f000 - bne AVoxReadBytesLoop 31 f000 - jsr i2c_stopread 32 f000 - lda #0 33 f000 - rts 34 f000 - 35 f000 - ; to be called with 36 f000 - ; A=# of bytes 37 f000 - ; 38 f000 - 39 f000 -AVoxWriteBytes 40 f000 - sta temp8 41 f000 - jsr i2c_startwrite 42 f000 - bcs eeprom_error 43 f000 - 44 f000 - lda HSVoxHi 45 f000 - jsr i2c_txbyte 46 f000 - lda HSVoxLo 47 f000 - jsr i2c_txbyte 48 f000 - 49 f000 - ldx #$00 50 f000 -AVoxWriteBytesLoop 51 f000 - lda eeprombuffer,x 52 f000 - jsr i2c_txbyte 53 f000 - inx 54 f000 - cpx temp8 55 f000 - bne AVoxWriteBytesLoop 56 f000 - jsr i2c_stopwrite 57 f000 - 58 f000 - lda #0 59 f000 - rts 60 f000 - 61 f000 -eeprom_error 62 f000 - lda #$ff 63 f000 - rts 64 f000 - 65 f000 -AVoxDetect 66 f000 - 67 f000 - jsr i2c_startwrite 68 f000 - bcs eeprom_error 69 f000 - lda #$30 70 f000 - jsr i2c_txbyte 71 f000 - lda #$00 72 f000 - jsr i2c_txbyte 73 f000 - jsr i2c_stopwrite 74 f000 - rts 75 f000 - 76 f000 - include "i2c7800.inc" 77 f000 - I2C_SUBS temp9 78 f000 - 79 f000 endif 80 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm 5026 f000 endif 5027 f000 ifnconst included.pokeysound.asm ------- FILE pokeysound.asm LEVEL 2 PASS 3 0 f000 include pokeysound.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 4 f000 - ifconst pokeysupport 5 f000 - 6 f000 -pokeysoundmodulestart 7 f000 - 8 f000 -mutepokey 9 f000 - lda #0 10 f000 - ldy #7 11 f000 -mutepokeyloop 12 f000 - sta pokey1pointlo,y 13 f000 - sta (pokeybaselo),y 14 f000 - dey 15 f000 - bpl mutepokeyloop 16 f000 - rts 17 f000 - 18 f000 -checkpokeyplaying 19 f000 - ldx #6 20 f000 -checkpokeyplayingloop 21 f000 - lda pokey1pointlo,x 22 f000 - ora pokey1pointhi,x 23 f000 - beq pokeychannelinactive 24 f000 - jsr playpokeysfxA ; x=channel*2 25 f000 -pokeychannelinactive 26 f000 - dex 27 f000 - dex 28 f000 - bpl checkpokeyplayingloop 29 f000 - rts 30 f000 - 31 f000 -playpokeysfxA 32 f000 - txa 33 f000 - tay 34 f000 - lda pokey1tick,x 35 f000 - beq playpokeysfxAcont 36 f000 - sec 37 f000 - sbc #1 38 f000 - sta pokey1tick,x ; sound resolution is >1 frame, and we're mid-tock... 39 f000 - rts 40 f000 - 41 f000 -playpokeysfxAcont 42 f000 - lda pokey1frames,x ; set the frame countdown for this sound chunk 43 f000 - sta pokey1tick,x 44 f000 - 45 f000 - lda pokey1priority,x ; decrease the sound's priority if its non-zero 46 f000 - beq playpokeysfxAcont2 47 f000 - sec 48 f000 - sbc #1 49 f000 - sta pokey1priority,x 50 f000 -playpokeysfxAcont2 51 f000 - 52 f000 - ; *** FREQUENCY 53 f000 - lda (pokey1pointlo,x) 54 f000 - sta temp1 55 f000 - clc 56 f000 - adc pokey1offset,x ; take into account any pitch modification 57 f000 - sta (pokeybaselo),y ; PAUDF0,0 58 f000 - 59 f000 - ;advance the data pointer +1 60 f000 - inc pokey1pointlo,x 61 f000 - bne skippokeyhiinc1 62 f000 - inc pokey1pointhi,x 63 f000 -skippokeyhiinc1 64 f000 - 65 f000 - ; *** WAVE 66 f000 - lda (pokey1pointlo,x) 67 f000 - asl 68 f000 - asl 69 f000 - asl 70 f000 - asl ; x16 71 f000 - 72 f000 - ;advance the data pointer +1 73 f000 - inc pokey1pointlo,x 74 f000 - bne skippokeyhiinc2 75 f000 - inc pokey1pointhi,x 76 f000 -skippokeyhiinc2 77 f000 - 78 f000 - ora (pokey1pointlo,x) 79 f000 - iny 80 f000 - sta (pokeybaselo),y 81 f000 - 82 f000 - ora temp1 ; check if F|C|V=0 83 f000 - beq zeropokeypoint ; if so, we're at the end of the sound. 84 f000 - 85 f000 - ; advance the pointer +1, on to the next sound chunk 86 f000 - inc pokey1pointlo,x 87 f000 - bne skippokeyhiinc3 88 f000 - inc pokey1pointhi,x 89 f000 -skippokeyhiinc3 90 f000 - rts 91 f000 - 92 f000 -zeropokeypoint 93 f000 - sta pokey1pointlo,x 94 f000 - sta pokey1pointhi,x 95 f000 - sta pokey1priority,x 96 f000 - rts 97 f000 - 98 f000 -schedulepokeysfx 99 f000 - ldx #6 100 f000 -schedulepokeysfxloop 101 f000 - lda pokey1pointlo,x 102 f000 - ora pokey1pointhi,x 103 f000 - bne schedulespokeysearch 104 f000 - jmp schedulepokeyX ; we found an unused channel, so use it... 105 f000 -schedulespokeysearch 106 f000 - dex 107 f000 - dex 108 f000 - bpl schedulepokeysfxloop 109 f000 - 110 f000 - ; if we're here, all 4 channels are presently playing a sound... 111 f000 - ldy #1 112 f000 - lda (temp1),y ; peek at the priority of this sfx... 113 f000 - bne schedulepokeysfxcont1 114 f000 - rts ; ...and skip it if it's 0 priority 115 f000 -schedulepokeysfxcont1 116 f000 - 117 f000 - ; figure out which current sound has the lowest priority... 118 f000 - lda #0 119 f000 - sta temp8 120 f000 - lda pokey1priority 121 f000 - sta temp9 122 f000 - ldx #6 123 f000 -findlowprioritypokeyloop 124 f000 - lda pokey1priority,x 125 f000 - cmp temp9 126 f000 - bcs findlowprioritypokeyloopcontinue 127 f000 - sta temp9 128 f000 - stx temp8 129 f000 -findlowprioritypokeyloopcontinue 130 f000 - dex 131 f000 - dex 132 f000 - bne findlowprioritypokeyloop 133 f000 - ldx temp8 ; the low priority channel we'll interrupt 134 f000 - 135 f000 -schedulepokeyX 136 f000 - ;called with X=2*pokey channel to play on... 137 f000 - ldy #1 ; get priority and sound-resolution (in frames) 138 f000 - lda (temp1),y 139 f000 - sta pokey1priority,x 140 f000 - iny 141 f000 - lda (temp1),y 142 f000 - sta pokey1frames,x 143 f000 - 144 f000 - lda temp1 145 f000 - clc 146 f000 - adc #3 147 f000 - sta pokey1pointlo,x 148 f000 - lda temp2 149 f000 - adc #0 150 f000 - sta pokey1pointhi,x 151 f000 - lda temp3 152 f000 - sta pokey1offset,x 153 f000 - lda #0 154 f000 - sta pokey1tick,x 155 f000 - rts 156 f000 - 157 f000 - ; pokey detection routine. we check for pokey in the XBOARD/XM location, 158 f000 - ; and the standard $4000 location. 159 f000 - ; if pokey the pokey is present, this routine will reset it. 160 f000 - 161 f000 -detectpokeylocation 162 f000 - ;XBoard/XM... 163 f000 - ldx #2 164 f000 -detectpokeyloop 165 f000 - lda XCTRL1s 166 f000 - ora #%00010100 167 f000 - and POKEYXMMASK,x 168 f000 - sta XCTRL1s 169 f000 - sta XCTRL1 170 f000 - 171 f000 - lda POKEYCHECKLO,x 172 f000 - sta pokeybaselo 173 f000 - lda POKEYCHECKHI,x 174 f000 - sta pokeybasehi 175 f000 - jsr checkforpokey 176 f000 - lda pokeydetected 177 f000 - beq foundpokeychip 178 f000 - dex 179 f000 - bpl detectpokeyloop 180 f000 -foundpokeychip 181 f000 - eor #$ff ; invert state for 7800basic if...then test 182 f000 - sta pokeydetected 183 f000 - rts 184 f000 - 185 f000 -POKEYXMMASK 186 f000 - ; XM POKEY on XM POKEY off XM POKEY off 187 f000 - .byte %11111111, %11101111, %11101111 188 f000 - 189 f000 -POKEYCHECKLO 190 f000 - .byte <$0450, <$0450, <$4000 191 f000 -POKEYCHECKHI 192 f000 - .byte >$0450, >$0450, >$4000 193 f000 - 194 f000 -checkforpokey 195 f000 - ldy #$0f 196 f000 - lda #$00 197 f000 - sta pokeydetected ; start off by assuming pokey will be detected 198 f000 -resetpokeyregistersloop 199 f000 - sta (pokeybase),y 200 f000 - dey 201 f000 - bpl resetpokeyregistersloop 202 f000 - 203 f000 - ldy #PAUDCTL 204 f000 - sta (pokeybase),y 205 f000 - ldy #PSKCTL 206 f000 - sta (pokeybase),y 207 f000 - 208 f000 - ; let the dust settle... 209 f000 - nop 210 f000 - nop 211 f000 - nop 212 f000 - 213 f000 - lda #4 214 f000 - sta temp9 215 f000 -pokeycheckloop1 216 f000 - ; we're in reset, so the RANDOM register should read $ff... 217 f000 - ldy #PRANDOM 218 f000 - lda (pokeybase),y 219 f000 - cmp #$ff 220 f000 - bne nopokeydetected 221 f000 - dec temp9 222 f000 - bne pokeycheckloop1 223 f000 - 224 f000 - ; take pokey out of reset... 225 f000 - ldy #PSKCTL 226 f000 - lda #3 227 f000 - sta (pokeybase),y 228 f000 - ldy #PAUDCTL 229 f000 - lda #0 230 f000 - sta (pokeybase),y 231 f000 - 232 f000 - ; let the dust settle again... 233 f000 - nop 234 f000 - nop 235 f000 - nop 236 f000 - 237 f000 - lda #4 238 f000 - sta temp9 239 f000 -pokeycheckloop2 240 f000 - ; we're out of reset, so RANDOM should read non-$ff... 241 f000 - ldy #PRANDOM 242 f000 - lda (pokeybase),y 243 f000 - cmp #$ff 244 f000 - beq skippokeycheckreturn 245 f000 - rts 246 f000 -skippokeycheckreturn 247 f000 - dec temp9 248 f000 - bne pokeycheckloop2 249 f000 -nopokeydetected 250 f000 - dec pokeydetected ; pokeydetected=#$ff 251 f000 - rts 252 f000 - 253 f000 -pokeysoundmoduleend 254 f000 - 255 f000 - echo " pokeysound assembly: ",[(pokeysoundmoduleend-pokeysoundmodulestart)]d," bytes" 256 f000 - 257 f000 endif ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm 5029 f000 endif 5030 f000 ifnconst included.tracker.asm ------- FILE tracker.asm LEVEL 2 PASS 3 0 f000 include tracker.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 4 f000 - ifconst MUSICTRACKER 5 f000 - ; ** songtempo lists how many 256ths of a frame a 16th note lasts 6 f000 - ; ** the player operates on a 16th note grid. 7 f000 - 8 f000 -servicesongover 9 f000 - rts 10 f000 -servicesong 11 f000 - lda songtempo 12 f000 - beq servicesongover ; ** if song is off/paused then return 13 f000 -servicesongcontinue 14 f000 - lda sfxschedulelock 15 f000 - sta sfxschedulemissed 16 f000 - bne servicesongover 17 f000 - lda songtempo 18 f000 - clc 19 f000 - adc songtick ; add songtempo to songtick until it rolls over 20 f000 - sta songtick ; this is how we break away from 50/60Hz timing. 21 f000 - bcc servicesongover 22 f000 - ; ** if we're here a new 16th note has passed 23 f000 - ; ** check if a new note is due on any of the 4 channels 24 f000 -servicesongredo 25 f000 - ldx #3 26 f000 -checkchannelloop 27 f000 - dec songchannel1busywait,x 28 f000 - bpl carryoncheckingchannel 29 f000 - txa 30 f000 - pha ; save X for the loop 31 f000 - jsr processsongdata 32 f000 - pla ; restore X for the loop 33 f000 - tax 34 f000 -carryoncheckingchannel 35 f000 - dex 36 f000 - bpl checkchannelloop 37 f000 - lda inactivechannelcount 38 f000 - cmp #15 39 f000 - bne skipstopsong 40 f000 - lda songloops 41 f000 - bne doasongloop 42 f000 - ;lda #0 43 f000 - sta songtempo ; all channels are done. stop the song 44 f000 - rts 45 f000 -doasongloop 46 f000 - bmi skipsongloopadjust 47 f000 - dec songloops 48 f000 -skipsongloopadjust 49 f000 - jsr setsongchannels 50 f000 - jmp servicesongredo 51 f000 -skipstopsong 52 f000 - rts 53 f000 - 54 f000 -processsongdata 55 f000 - ; channel needs processing 56 f000 - ; X=channel # 57 f000 - 58 f000 - txa 59 f000 - clc 60 f000 - adc songchannel1stackdepth,x ; stack depth value will be 0, 4, or 8 61 f000 - tay 62 f000 - 63 f000 - 64 f000 - ; ** indirect x is cumbersome with mult-byte commands. 65 f000 - ; ** setup a pointer to the song data for indirect y addressing. 66 f000 - lda songchannel1layer1lo,y 67 f000 - sta songdatalo 68 f000 - lda songchannel1layer1hi,y 69 f000 - sta songdatahi 70 f000 - ora songdatalo 71 f000 - bne channelhasdata 72 f000 - ;channel data is pointing at $0000 73 f000 - lda #$7F 74 f000 - sta songchannel1busywait,x ; skip a bunch of notes 75 f000 -setchannelcountbits 76 f000 - lda channel2bits,x 77 f000 - ora inactivechannelcount 78 f000 - sta inactivechannelcount 79 f000 - rts 80 f000 -channelhasdata 81 f000 - 82 f000 - sty songstackindex 83 f000 - ldy #0 84 f000 - lda (songdatalo),y ; ** load in the next byte of song data, so we can decode it 85 f000 - cmp #$ff 86 f000 - bne carryoncheckingdatatype ; ** $ff=pattern end marker 87 f000 - jmp handlechannelEOD 88 f000 - 89 f000 -carryoncheckingdatatype 90 f000 - and #$F0 91 f000 - cmp #$C0 92 f000 - beq handlechannelrest ; 0000XXXX=rest 93 f000 - cmp #$F0 94 f000 - beq handlemultibytecommand 95 f000 - cmp #$D0 96 f000 - beq handlesemiup 97 f000 - cmp #$E0 98 f000 - beq handlesemidown 99 f000 -handlenotedata 100 f000 - ; ** TODO: note playing is a terrible choice for fall-through 101 f000 - 102 f000 - ; ** its simple note data, prepare arguments for schedulesfx 103 f000 - 104 f000 - ; ** set the note length 105 f000 - lda (songdatalo),y 106 f000 - and #$0F 107 f000 - sta songchannel1busywait,x 108 f000 - 109 f000 - ; ** load the instrument 110 f000 - lda songchannel1instrumentlo,x 111 f000 - sta sfxinstrumentlo 112 f000 - lda songchannel1instrumenthi,x 113 f000 - sta sfxinstrumenthi 114 f000 - 115 f000 - ; ** get the note, and transpose 116 f000 - lda (songdatalo),y 117 f000 - lsr 118 f000 - lsr 119 f000 - lsr 120 f000 - lsr 121 f000 - clc 122 f000 - adc songchannel1transpose,x ; ** add it to the transpose index 123 f000 - ; ** its up the respective SFX scheduler to handle and save the note data 124 f000 - sta sfxnoteindex 125 f000 - 126 f000 - lda #0 127 f000 - sta sfxpitchoffset 128 f000 - 129 f000 - jsr schedulesfx 130 f000 - 131 f000 - jmp advancethesongpointer1byte ; advance to the next data byte and exit 132 f000 - 133 f000 -handlechannelrest 134 f000 - ; ** set the note length 135 f000 - lda (songdatalo),y 136 f000 - and #$0F 137 f000 - sta songchannel1busywait,x 138 f000 - jmp advancethesongpointer1byte ; advance to the next data byte and exit 139 f000 - 140 f000 -handlesemiup 141 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 142 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 143 f000 - clc 144 f000 -handlesemidownentry 145 f000 - adc songchannel1transpose,x ; ** add it to the transpose index 146 f000 - sta songchannel1transpose,x 147 f000 - jsr advancethesongpointer1byte 148 f000 - jmp processsongdata ; semi doesn't have note length, so process the next data byte... 149 f000 - 150 f000 -handlesemidown 151 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 152 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 153 f000 - eor #$ff ; ** its easier if we negate it, and then add it instead. 154 f000 - sec 155 f000 - jmp handlesemidownentry 156 f000 - 157 f000 -handlemultibytecommand 158 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 159 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 160 f000 - cmp #$08 ; ** load new instrument? 161 f000 - bne nothandleinstrumentchange 162 f000 -handleinstrumentchange 163 f000 - iny 164 f000 - lda (songdatalo),y 165 f000 - sta songchannel1instrumentlo,x 166 f000 - iny 167 f000 - lda (songdatalo),y 168 f000 - sta songchannel1instrumenthi,x 169 f000 - lda #3 170 f000 - jsr advancethesongpointerNbytes ; advance 3 bytes 171 f000 - jmp processsongdata 172 f000 - 173 f000 -nothandleinstrumentchange 174 f000 - cmp #$09 ; ** absolute tempo change? 175 f000 - bne nothandletempochange 176 f000 - lda #0 177 f000 - sta songtempo 178 f000 -handlerelativetempochange 179 f000 - iny 180 f000 - lda (songdatalo),y 181 f000 - clc 182 f000 - adc songtempo 183 f000 - sta songtempo 184 f000 - lda #2 185 f000 - jsr advancethesongpointerNbytes ; advance 2 bytes 186 f000 - jmp processsongdata 187 f000 - 188 f000 -nothandletempochange 189 f000 - cmp #$0A ; ** relative tempo change?: 190 f000 - beq handlerelativetempochange 191 f000 - cmp #$0B ; ** octave/semi change? 192 f000 - beq handleoctavesemichange 193 f000 -handlepatterndata 194 f000 - ; ** if we're here its a pattern/loop "subroutine" 195 f000 - ; ** move the channel's "stack" pointer and populate the new stack level 196 f000 - 197 f000 - lda #4 198 f000 - clc 199 f000 - adc songchannel1stackdepth,x 200 f000 - sta songchannel1stackdepth,x ; stack depth value will be 0, 4, or 8 201 f000 - 202 f000 - stx inttemp6 ; about to invalidate x. save it. 203 f000 - lda songstackindex 204 f000 - adc #4 205 f000 - tax 206 f000 - 207 f000 - lda (songdatalo),y 208 f000 - and #$7 209 f000 - sta songchannel1layer1loops,x 210 f000 - iny 211 f000 - lda (songdatalo),y 212 f000 - sta songchannel1layer1lo,x 213 f000 - iny 214 f000 - lda (songdatalo),y 215 f000 - sta songchannel1layer1hi,x 216 f000 - 217 f000 - ldx inttemp6 ; restore x with the channel # 218 f000 - 219 f000 - ; ** advance will operate on the old stack level, since we didn't store the updated songstackindex... 220 f000 - lda #3 221 f000 - jsr advancethesongpointerNbytes ; advance 3 bytes 222 f000 - 223 f000 - ; ** ...but the new stack level will be correctly picked up when we process the next byte. 224 f000 - jmp processsongdata 225 f000 - 226 f000 -handlechannelEOD 227 f000 - ; ** check if there are loops remaining on the pattern 228 f000 - stx inttemp6 229 f000 - ldx songstackindex 230 f000 - dec songchannel1layer1loops,x 231 f000 - bmi handlechannelEODnoloop 232 f000 - ; ** loops are remaining. set the pattern pointer to the pattern start, which is contained after the EOD 233 f000 - iny 234 f000 - lda (songdatalo),y 235 f000 - sta songchannel1layer1lo,x 236 f000 - iny 237 f000 - lda (songdatalo),y 238 f000 - sta songchannel1layer1hi,x 239 f000 - ldx inttemp6 240 f000 - jmp processsongdata ; EOD handling doesn't have note length, so process the next data byte... 241 f000 - 242 f000 -handlechannelEODnoloop 243 f000 - ; this pattern/loop is done playing. "pop" the stack 244 f000 - ldx inttemp6 245 f000 - lda songchannel1stackdepth,x 246 f000 - beq handlerootchannelEOD 247 f000 - sec 248 f000 - sbc #4 249 f000 - sta songchannel1stackdepth,x 250 f000 - jmp processsongdata ; EOD handling doesn't have note length, so process the next data byte... 251 f000 - 252 f000 -handlerootchannelEOD 253 f000 - ; this channel is done. point it to $ff data so we no longer process this channel. 254 f000 - lda #0 255 f000 - sta songchannel1layer1lo,x 256 f000 - sta songchannel1layer1hi,x 257 f000 - sta songchannel1busywait,x 258 f000 - jmp setchannelcountbits 259 f000 - rts 260 f000 - 261 f000 -nothandlepatternchange 262 f000 -handleoctavesemichange 263 f000 - iny 264 f000 - lda (songdatalo),y 265 f000 - sta songchannel1transpose,x 266 f000 - lda #2 267 f000 - jsr advancethesongpointerNbytes ; advance 2 bytes 268 f000 - jmp processsongdata 269 f000 - 270 f000 -advancethesongpointer1byte 271 f000 - txa 272 f000 - ldx songstackindex 273 f000 - inc songchannel1layer1lo,x 274 f000 - bne skiphiadvancethesongpointer1byte 275 f000 - inc songchannel1layer1hi,x 276 f000 -skiphiadvancethesongpointer1byte 277 f000 - tax 278 f000 - rts 279 f000 - 280 f000 -advancethesongpointerNbytes 281 f000 - ; entered with A=# of byte to advance 282 f000 - stx inttemp6 283 f000 - ldx songstackindex 284 f000 - clc 285 f000 - adc songchannel1layer1lo,x 286 f000 - sta songchannel1layer1lo,x 287 f000 - lda #0 288 f000 - adc songchannel1layer1hi,x 289 f000 - sta songchannel1layer1hi,x 290 f000 - ldx inttemp6 291 f000 - rts 292 f000 - 293 f000 -clearsongmemory 294 f000 - lda #0 295 f000 - ldx #(songchannel4instrumenthi-songchannel1layer1lo) 296 f000 -clearsongmemoryloop1 297 f000 - sta songchannel1layer1lo,x 298 f000 - dex 299 f000 - bpl clearsongmemoryloop1 300 f000 - 301 f000 - ldx #(songchannel4stackdepth-songchannel1layer1loops) 302 f000 -clearsongmemoryloop2 303 f000 - sta songchannel1layer1loops,x 304 f000 - dex 305 f000 - bpl clearsongmemoryloop2 306 f000 - 307 f000 - lda #$ff 308 f000 - ldx #3 309 f000 -clearsongmemoryloop3 310 f000 - sta songchannel1busywait,x 311 f000 - dex 312 f000 - bpl clearsongmemoryloop3 313 f000 - rts 314 f000 - 315 f000 -setsongchannels 316 f000 - jsr clearsongmemory 317 f000 - ldy #7 318 f000 - ldx #3 319 f000 -setsongchannelsloop 320 f000 - lda (songpointerlo),y 321 f000 - sta songchannel1layer1hi,x 322 f000 - dey 323 f000 - lda (songpointerlo),y 324 f000 - sta songchannel1layer1lo,x 325 f000 - dex 326 f000 - dey 327 f000 - bpl setsongchannelsloop 328 f000 - rts 329 f000 - 330 f000 -channel2bits 331 f000 - .byte 1,2,4,8 332 f000 - 333 f000 -tiatrackeroctavenotes 334 f000 - ifconst BUZZBASS 335 f000 -LOWC = 15 336 f000 - else 337 f000 -LOWC = 14 338 f000 - endif 339 f000 - ; ****** ELECTRONIC (0 to 11) 340 f000 - .byte LOWC,20 ; c0 16.1Hz 341 f000 - .byte LOWC,18 ; c#0 342 f000 - .byte LOWC,17 ; d0 343 f000 - .byte LOWC,16 ; d#0 344 f000 - .byte LOWC,15 ; e0 345 f000 - .byte LOWC,14 ; f0 (very off) 346 f000 - .byte LOWC,14 ; f#0 347 f000 - .byte LOWC,13 ; g0 348 f000 - .byte LOWC,12 ; g#0 349 f000 - .byte LOWC,11 ; a0 350 f000 - .byte LOWC,11 ; a#0 (very off) 351 f000 - .byte LOWC,10 ; b0 30.7Hz 352 f000 - 353 f000 - ; ****** SLIGHTLY BUZZY (12 to 23) 354 f000 - .byte 6,30 ; c1 32.7Hz 355 f000 - .byte 6,28 ; c#1 356 f000 - .byte 6,27 ; d1 357 f000 - .byte 6,25 ; d#1 358 f000 - .byte 6,24 ; e1 359 f000 - .byte 6,22 ; f1 360 f000 - .byte 6,21 ; f#1 361 f000 - .byte 6,20 ; g1 362 f000 - .byte 6,18 ; g#1 363 f000 - .byte 6,17 ; a1 364 f000 - .byte 6,16 ; a#1 365 f000 - .byte 6,15 ; b1 63.4Hz 366 f000 - 367 f000 - ; ****** BUZZY (24 to 39) 368 f000 - .byte 1,31 ; c2 65.5 369 f000 - .byte 1,30 ; c#2 67.6 370 f000 - .byte 1,27 ; d2 72.3 371 f000 - .byte 1,26 ; d#2 77.6 372 f000 - .byte 1,24 ; e2 373 f000 - .byte 1,23 ; f2 374 f000 - .byte 1,22 ; f#2 375 f000 - .byte 1,20 ; g2 376 f000 - .byte 1,19 ; g#2 377 f000 - .byte 1,18 ; a2 378 f000 - .byte 1,17 ; a#2 379 f000 - .byte 1,16 ; b2 380 f000 - .byte 1,15 ; c3 126.8Hz 381 f000 - .byte 1,14 ; c#3 382 f000 - .byte 1,13 ; d3 149.7Hz 383 f000 - .byte 1,12 ; d#3 161.2Hz (very off) 384 f000 - ; ****** PURE (40 to 71) - best key is A3 Major 385 f000 - .byte 12,31 ; e3 163.8Hz 386 f000 - .byte 12,29 ; f3 387 f000 - .byte 12,28 ; f#3 388 f000 - .byte 12,26 ; g3 389 f000 - .byte 12,24 ; g#3 390 f000 - .byte 12,23 ; a3 songs in key of A benefit from Perceptual Tuning 391 f000 - .byte 12,22 ; a#3 392 f000 - .byte 12,20 ; b3 393 f000 - .byte 12,19 ; c4 (middle C) 394 f000 - .byte 12,18 ; c#4 395 f000 - .byte 12,17 ; d4 396 f000 - .byte 12,16 ; d#4 397 f000 - .byte 12,15 ; e4 398 f000 - .byte 12,14 ; f4 399 f000 - .byte 12,13 ; f#4 400 f000 - .byte 12,12 ; g4 (very off) 401 f000 - .byte 12,12 ; g#4 402 f000 - .byte 12,11 ; a4 403 f000 - .byte 12,10 ; a#4 404 f000 - .byte 4,31 ; b4 405 f000 - .byte 4,29 ; c5 406 f000 - .byte 4,28 ; c#5 407 f000 - .byte 4,26 ; d5 408 f000 - .byte 4,24 ; d#5 409 f000 - .byte 4,23 ; e5 410 f000 - .byte 4,22 ; f5 411 f000 - .byte 4,20 ; f#5 412 f000 - .byte 4,19 ; g5 413 f000 - .byte 4,18 ; g#5 414 f000 - .byte 4,17 ; a5 415 f000 - .byte 4,16 ; a#5 416 f000 - .byte 4,15 ; b5 417 f000 - 418 f000 - ; ****** TUNED WIND (72 to 83) 419 f000 - .byte 8,30 ; c 420 f000 - .byte 8,28 ; c# 421 f000 - .byte 8,27 ; d 422 f000 - .byte 8,25 ; d# 423 f000 - .byte 8,24 ; e 424 f000 - .byte 8,22 ; f 425 f000 - .byte 8,21 ; f# 426 f000 - .byte 8,20 ; g 427 f000 - .byte 8,18 ; g# 428 f000 - .byte 8,17 ; a 429 f000 - .byte 8,16 ; a# 430 f000 - .byte 8,15 ; b 431 f000 - 432 f000 - include "tiadrumkit.asm" 433 f000 - 434 f000 endif ;MUSICTRACKER ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm 5032 f000 endif 5033 f000 ifnconst included.hiscore.asm ------- FILE hiscore.asm LEVEL 2 PASS 3 0 f000 include hiscore.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 - ifconst HSSUPPORT 4 f000 -detectatarivoxeeprom 5 f000 -hiscoremodulestart 6 f000 - ; do a test to see if atarivox eeprom can be accessed, and save results 7 f000 - jsr AVoxDetect 8 f000 - eor #$ff ; invert for easy 7800basic if...then logic 9 f000 - sta avoxdetected 10 f000 - lda #$0 11 f000 - sta SWACNT 12 f000 - lda avoxdetected 13 f000 - rts 14 f000 - 15 f000 -detecthsc 16 f000 - ; check for the HSC ROM signature... 17 f000 - lda XCTRL1s 18 f000 - ora #%00001100 19 f000 - sta XCTRL1s 20 f000 - sta XCTRL1 21 f000 - lda $3900 22 f000 - cmp #$C6 23 f000 - bne detecthscfail 24 f000 - lda $3904 25 f000 - cmp #$FE 26 f000 - bne detecthscfail 27 f000 - ; check if it's initialized... 28 f000 - ldy #0 29 f000 - lda #$ff 30 f000 -checkhscinit 31 f000 - and $1000,y 32 f000 - dey 33 f000 - bpl checkhscinit 34 f000 - cmp #$ff 35 f000 - bne hscisalreadyinit 36 f000 - ; if we're here, we need to do a minimal HSC init... 37 f000 - ldy #$28 38 f000 -hscinitloop1 39 f000 - lda hscheader,y 40 f000 - sta $1000,y 41 f000 - dey 42 f000 - bpl hscinitloop1 43 f000 - ldy #$89 44 f000 - lda #$7F 45 f000 -hscinitloop2 46 f000 - sta $10B3,y 47 f000 - dey 48 f000 - cpy #$ff 49 f000 - bne hscinitloop2 50 f000 -hscisalreadyinit 51 f000 - lda #$ff 52 f000 - rts 53 f000 -hscheader 54 f000 - .byte $00,$00,$68,$83,$AA,$55,$9C,$FF,$07,$12,$02,$1F,$00,$00,$00,$00 55 f000 - .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 56 f000 - .byte $00,$00,$00,$00,$00,$00,$00,$00,$03 57 f000 -detecthscfail 58 f000 - lda XCTRL1s 59 f000 - and #%11110111 60 f000 - sta XCTRL1s 61 f000 - lda #0 62 f000 - rts 63 f000 endif ; HSSUPPORT 64 f000 65 f000 - ifconst HSSUPPORT 66 f000 - ifnconst hiscorefont 67 f000 - echo "" 68 f000 - echo "WARNING: High score support is enabled, but the hiscorefont.png was" 69 f000 - echo " NOT imported with incgraphic. The high score display code" 70 f000 - echo " has been omitted from this build." 71 f000 - echo "" 72 f000 - else 73 f000 -hscdrawscreen 74 f000 - 75 f000 - ; we use 20 lines on a 24 line display 76 f000 - ; HSSCOREY to dynamically centers based on 77 f000 - ;HSSCOREY = 0 78 f000 -HSSCOREY = ((WZONECOUNT*WZONEHEIGHT/8)-22)/2 79 f000 -HSCURSORY = ((HSSCOREY/(WZONEHEIGHT/8))*WZONEHEIGHT) 80 f000 - 81 f000 - ifconst HSSCORESIZE 82 f000 -SCORESIZE = HSSCORESIZE 83 f000 - else 84 f000 -SCORESIZE = 6 85 f000 - endif 86 f000 - 87 f000 - ;save shadow registers for later return... 88 f000 - lda sCTRL 89 f000 - sta ssCTRL 90 f000 - lda sCHARBASE 91 f000 - sta ssCHARBASE 92 f000 - lda #$60 93 f000 - sta charactermode 94 f000 - jsr drawwait 95 f000 - jsr blacken320colors 96 f000 - jsr clearscreen 97 f000 - 98 f000 - ;set the character base to the HSC font 99 f000 - lda #>hiscorefont 100 f000 - sta CHARBASE 101 f000 - sta sCHARBASE 102 f000 - lda #%01000011 ;Enable DMA, mode=320A 103 f000 - sta CTRL 104 f000 - sta sCTRL 105 f000 - 106 f000 - lda #60 107 f000 - sta hsjoydebounce 108 f000 - 109 f000 - lda #0 110 f000 - sta hscursorx 111 f000 - sta framecounter 112 f000 - ifnconst HSCOLORCHASESTART 113 f000 - lda #$8D ; default is blue. why not? 114 f000 - else 115 f000 - lda #HSCOLORCHASESTART 116 f000 - endif 117 f000 - sta hscolorchaseindex 118 f000 - 119 f000 - lda #$0F 120 f000 - sta P0C2 ; base text is white 121 f000 - 122 f000 - jsr hschasecolors 123 f000 - ; ** plot all of the initials 124 f000 - lda #HSRAMInitials 127 f000 - sta temp2 ; charmaphi 128 f000 - lda #32+29 ; palette=0-29 | 32-(width=3) 129 f000 - sta temp3 ; palette/width 130 f000 - lda #104 131 f000 - sta temp4 ; X 132 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 133 f000 - sta temp5 ; Y 134 f000 -plothsinitialsloop 135 f000 - jsr plotcharacters 136 f000 - clc 137 f000 - lda temp3 138 f000 - adc #32 139 f000 - sta temp3 140 f000 - inc temp5 141 f000 - if WZONEHEIGHT = 8 142 f000 - inc temp5 143 f000 - endif 144 f000 - clc 145 f000 - lda #3 146 f000 - adc temp1 147 f000 - sta temp1 148 f000 - cmp #(<(HSRAMInitials+15)) 149 f000 - bcc plothsinitialsloop 150 f000 - 151 f000 - ifconst HSGAMENAMELEN 152 f000 - ;plot the game name... 153 f000 - lda #HSGAMENAMEtable 156 f000 - sta temp2 ; charmaphi 157 f000 - lda #(32-HSGAMENAMELEN) ; palette=0*29 | 32-(width=3) 158 f000 - sta temp3 ; palette/width 159 f000 - lda #(80-(HSGAMENAMELEN*2)) 160 f000 - sta temp4 ; X 161 f000 - lda #((HSSCOREY+0)/(WZONEHEIGHT/8)) 162 f000 - sta temp5 ; Y 163 f000 - jsr plotcharacters 164 f000 - endif ; HSGAMENAMELEN 165 f000 - 166 f000 - ;plot "difficulty"... 167 f000 - ldy gamedifficulty 168 f000 - ifnconst HSNOLEVELNAMES 169 f000 - lda highscoredifficultytextlo,y 170 f000 - sta temp1 171 f000 - lda highscoredifficultytexthi,y 172 f000 - sta temp2 173 f000 - sec 174 f000 - lda #32 175 f000 - sbc highscoredifficultytextlen,y 176 f000 - sta temp3 ; palette/width 177 f000 - sec 178 f000 - lda #40 179 f000 - sbc highscoredifficultytextlen,y 180 f000 - asl 181 f000 - sta temp4 ; X 182 f000 - else 183 f000 - lda #HSHIGHSCOREStext 186 f000 - sta temp2 ; charmaphi 187 f000 - lda #(32-11) ; palette=0*29 | 32-(width=3) 188 f000 - sta temp3 ; palette/width 189 f000 - lda #(80-(11*2)) 190 f000 - sta temp4 ; X 191 f000 - endif ; HSNOLEVELNAMES 192 f000 - 193 f000 - lda #((HSSCOREY+2)/(WZONEHEIGHT/8)) 194 f000 - sta temp5 ; Y 195 f000 - jsr plotcharacters 196 f000 - ldy hsdisplaymode ; 0=attact mode, 1=player eval, 2=player 1 eval, 3=player 2 player eval 197 f000 - bne carronwithscoreevaluation 198 f000 - jmp donoscoreevaluation 199 f000 -carronwithscoreevaluation 200 f000 - dey 201 f000 - lda highscorelabeltextlo,y 202 f000 - sta temp1 203 f000 - lda highscorelabeltexthi,y 204 f000 - sta temp2 205 f000 - sec 206 f000 - lda #(32-15) ; palette=0*29 | 32-(width=3) 207 f000 - sta temp3 ; palette/width 208 f000 - lda highscorelabeladjust1,y 209 f000 - sta temp4 ; X 210 f000 - lda #((HSSCOREY+18)/(WZONEHEIGHT/8)) 211 f000 - sta temp5 ; Y 212 f000 - jsr plotcharacters 213 f000 - 214 f000 - ldy hsdisplaymode ; 0=attact mode, 1=player eval, 2=player 1 eval, 3=player 2 player eval 215 f000 - dey 216 f000 - ;plot the current player score... 217 f000 - lda #(32-SCORESIZE) ; palette=0*32 218 f000 - sta temp3 ; palette/width 219 f000 - lda highscorelabeladjust2,y 220 f000 - sta temp4 ; X 221 f000 - lda #((HSSCOREY+18)/(WZONEHEIGHT/8)) 222 f000 - sta temp5 ; Y 223 f000 - 224 f000 - lda scorevarlo,y 225 f000 - sta temp7 ; score variable lo 226 f000 - lda scorevarhi,y 227 f000 - sta temp8 ; score variable hi 228 f000 - 229 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 230 f000 - sta temp9 231 f000 - 232 f000 - lda #<(hiscorefont+33) ; +33 to get to '0' character 233 f000 - sta temp1 ; charmaplo 234 f000 - lda #>(hiscorefont+33) 235 f000 - sta temp2 ; charmaphi 236 f000 - lda #SCORESIZE 237 f000 - sta temp6 238 f000 - ifnconst DOUBLEWIDE 239 f000 - jsr plotvalue 240 f000 - else 241 f000 - jsr plotvaluedw 242 f000 - endif 243 f000 - 244 f000 -USED_PLOTVALUE = 1 ; ensure that plotvalue gets compiled in 245 f000 - 246 f000 - ifconst HSGAMERANKS 247 f000 - 248 f000 - ldx #$ff ; start at 0 after the inx... 249 f000 -comparescore2rankloop 250 f000 - inx 251 f000 - ldy #0 252 f000 - lda rankvalue_0,x 253 f000 - cmp (temp7),y 254 f000 - bcc score2rankloopdone 255 f000 - bne comparescore2rankloop 256 f000 - iny 257 f000 - lda rankvalue_1,x 258 f000 - cmp (temp7),y 259 f000 - bcc score2rankloopdone 260 f000 - bne comparescore2rankloop 261 f000 - iny 262 f000 - lda (temp7),y 263 f000 - cmp rankvalue_2,x 264 f000 - bcs score2rankloopdone 265 f000 - jmp comparescore2rankloop 266 f000 -score2rankloopdone 267 f000 - stx hsnewscorerank 268 f000 - 269 f000 - lda ranklabello,x 270 f000 - sta temp1 271 f000 - lda ranklabelhi,x 272 f000 - sta temp2 273 f000 - sec 274 f000 - lda #32 ; palette=0*29 | 32-(width=3) 275 f000 - sbc ranklabellengths,x 276 f000 - sta temp3 ; palette/width 277 f000 - sec 278 f000 - lda #(40+6) 279 f000 - sbc ranklabellengths,x 280 f000 - asl 281 f000 - sta temp4 ; X 282 f000 - lda #((HSSCOREY+20)/(WZONEHEIGHT/8)) 283 f000 - sta temp5 ; Y 284 f000 - jsr plotcharacters 285 f000 - 286 f000 - ldx hsnewscorerank 287 f000 - 288 f000 - lda #highscoreranklabel 291 f000 - sta temp2 292 f000 - 293 f000 - lda #(32-5) ; palette=0*29 | 32-(width=3) 294 f000 - sta temp3 ; palette/width 295 f000 - lda #(40-6) 296 f000 - sec 297 f000 - sbc ranklabellengths,x 298 f000 - asl 299 f000 - sta temp4 ; X 300 f000 - lda #((HSSCOREY+20)/(WZONEHEIGHT/8)) 301 f000 - sta temp5 ; Y 302 f000 - jsr plotcharacters 303 f000 - endif 304 f000 - 305 f000 - 306 f000 - ; ** which line did this player beat? 307 f000 - lda #$ff 308 f000 - sta hsnewscoreline 309 f000 - ldx #$fd 310 f000 -comparescoreadd2x 311 f000 - inx 312 f000 -comparescoreadd1x 313 f000 - inx 314 f000 -comparescore2lineloop 315 f000 - inc hsnewscoreline 316 f000 - inx ; initialrun, x=0 317 f000 - cpx #15 318 f000 - beq nohighscoreforyou 319 f000 - ldy #0 320 f000 - lda HSRAMScores,x 321 f000 - cmp (temp7),y ; first score digit 322 f000 - bcc score2lineloopdonedel1x 323 f000 - bne comparescoreadd2x 324 f000 - iny 325 f000 - inx 326 f000 - lda HSRAMScores,x 327 f000 - cmp (temp7),y 328 f000 - bcc score2lineloopdonedel2x 329 f000 - bne comparescoreadd1x 330 f000 - iny 331 f000 - inx 332 f000 - lda (temp7),y 333 f000 - cmp HSRAMScores,x 334 f000 - bcs score2lineloopdonedel3x 335 f000 - jmp comparescore2lineloop 336 f000 -nohighscoreforyou 337 f000 - lda #$ff 338 f000 - sta hsnewscoreline 339 f000 - sta countdownseconds 340 f000 - jmp donoscoreevaluation 341 f000 -score2lineloopdonedel3x 342 f000 - dex 343 f000 -score2lineloopdonedel2x 344 f000 - dex 345 f000 -score2lineloopdonedel1x 346 f000 - dex 347 f000 - 348 f000 - ; 0 1 2 349 f000 - ; 3 4 5 350 f000 - ; 6 7 8 351 f000 - ; 9 0 1 352 f000 - ; 2 3 4 353 f000 - 354 f000 - stx temp9 355 f000 - cpx #11 356 f000 - beq postsortscoresuploop 357 f000 - ldx #11 358 f000 -sortscoresuploop 359 f000 - lda HSRAMScores,x 360 f000 - sta HSRAMScores+3,x 361 f000 - lda HSRAMInitials,x 362 f000 - sta HSRAMInitials+3,x 363 f000 - dex 364 f000 - cpx temp9 365 f000 - bne sortscoresuploop 366 f000 -postsortscoresuploop 367 f000 - 368 f000 - ;stick the score and cleared initials in the slot... 369 f000 - inx 370 f000 - ldy #0 371 f000 - sty hsinitialhold 372 f000 - lda (temp7),y 373 f000 - sta HSRAMScores,x 374 f000 - iny 375 f000 - lda (temp7),y 376 f000 - sta HSRAMScores+1,x 377 f000 - iny 378 f000 - lda (temp7),y 379 f000 - sta HSRAMScores+2,x 380 f000 - lda #0 381 f000 - sta HSRAMInitials,x 382 f000 - lda #29 383 f000 - sta HSRAMInitials+1,x 384 f000 - sta HSRAMInitials+2,x 385 f000 - 386 f000 - stx hsinitialpos 387 f000 - 388 f000 - ifconst vox_highscore 389 f000 - lda <#vox_highscore 390 f000 - sta speech_addr 391 f000 - lda >#vox_highscore 392 f000 - sta speech_addr+1 393 f000 - endif 394 f000 - ifconst sfx_highscore 395 f000 - lda <#sfx_highscore 396 f000 - sta temp1 397 f000 - lda >#sfx_highscore 398 f000 - sta temp2 399 f000 - lda #0 400 f000 - sta temp3 401 f000 - jsr schedulesfx 402 f000 - endif 403 f000 - ifconst songdatastart_song_highscore 404 f000 - lda #songchanneltable_song_highscore 407 f000 - sta songpointerhi 408 f000 - lda #73 409 f000 - sta songtempo 410 f000 - jsr setsongchannels 411 f000 - endif 412 f000 - 413 f000 - 414 f000 -donoscoreevaluation 415 f000 - 416 f000 - lda #(32+(32-SCORESIZE)) ; palette=0*32 | 32-(width=6) 417 f000 - sta temp3 ; palette/width 418 f000 - lda #(72+(4*(6-SCORESIZE))) 419 f000 - sta temp4 ; X 420 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 421 f000 - sta temp5 ; Y 422 f000 - lda #HSRAMScores 425 f000 - sta temp8 ; score variable hi 426 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 427 f000 - sta temp9 428 f000 -plothsscoresloop 429 f000 - lda #<(hiscorefont+33) ; +33 to get to '0' character 430 f000 - sta temp1 ; charmaplo 431 f000 - lda #>(hiscorefont+33) 432 f000 - sta temp2 ; charmaphi 433 f000 - lda #6 434 f000 - sta temp6 435 f000 - ifnconst DOUBLEWIDE 436 f000 - jsr plotvalue 437 f000 - else 438 f000 - jsr plotvaluedw 439 f000 - endif 440 f000 - clc 441 f000 - lda temp3 442 f000 - adc #32 443 f000 - sta temp3 444 f000 - inc temp5 445 f000 - if WZONEHEIGHT = 8 446 f000 - inc temp5 447 f000 - endif 448 f000 - clc 449 f000 - lda #3 450 f000 - adc temp7 451 f000 - sta temp7 452 f000 - cmp #(<(HSRAMScores+15)) 453 f000 - bcc plothsscoresloop 454 f000 -plothsindex 455 f000 - lda #32+31 ; palette=0*32 | 32-(width=1) 456 f000 - sta temp3 ; palette/width 457 f000 - lda #44 458 f000 - sta temp4 ; X 459 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 460 f000 - sta temp5 ; Y 461 f000 - lda #hsgameslotnumbers 464 f000 - sta temp8 ; score variable hi 465 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 466 f000 - sta temp9 467 f000 -plothsindexloop 468 f000 - lda #<(hiscorefont+33) 469 f000 - sta temp1 ; charmaplo 470 f000 - lda #>(hiscorefont+33) 471 f000 - sta temp2 ; charmaphi 472 f000 - lda #1 473 f000 - sta temp6 ; number of characters 474 f000 - ifnconst DOUBLEWIDE 475 f000 - jsr plotvalue 476 f000 - else 477 f000 - jsr plotvaluedw 478 f000 - endif 479 f000 - clc 480 f000 - lda temp3 481 f000 - adc #32 482 f000 - sta temp3 483 f000 - inc temp5 484 f000 - if WZONEHEIGHT = 8 485 f000 - inc temp5 486 f000 - endif 487 f000 - inc temp7 488 f000 - lda temp7 489 f000 - cmp #(<(hsgameslotnumbers+5)) 490 f000 - bcc plothsindexloop 491 f000 - 492 f000 - jsr savescreen 493 f000 - ifnconst HSSECONDS 494 f000 - lda #6 495 f000 - else 496 f000 - lda #HSSECONDS 497 f000 - endif 498 f000 - 499 f000 - sta countdownseconds 500 f000 - 501 f000 -keepdisplayinghs 502 f000 - jsr restorescreen 503 f000 - 504 f000 - jsr setuphsinpt1 505 f000 - 506 f000 - lda hsnewscoreline 507 f000 - bpl carryonkeepdisplayinghs 508 f000 - jmp skipenterscorecontrol 509 f000 -carryonkeepdisplayinghs 510 f000 - 511 f000 - 512 f000 - ifnconst HSSECONDS 513 f000 - lda #6 514 f000 - else 515 f000 - lda #HSSECONDS 516 f000 - endif 517 f000 - 518 f000 - sta countdownseconds 519 f000 - 520 f000 - ;plot the "cursor" initial sprite... 521 f000 - lda hsinitialhold 522 f000 - 523 f000 - sta temp1 524 f000 - lda #>(hiscorefont+32) 525 f000 - sta temp2 526 f000 - lda #31 ; palette=0*32 | 32-(width=1) 527 f000 - sta temp3 ; palette/width 528 f000 - lda hscursorx 529 f000 - asl 530 f000 - asl 531 f000 - clc 532 f000 - adc #104 533 f000 - sta temp4 ; X 534 f000 - lda hsnewscoreline 535 f000 - asl 536 f000 - asl 537 f000 - asl 538 f000 - asl 539 f000 - adc #((3*16)+HSCURSORY) 540 f000 - sta temp5 ; Y 541 f000 - lda #%01000000 542 f000 - sta temp6 543 f000 - jsr plotsprite 544 f000 - 545 f000 - ldx hscursorx 546 f000 - ldy hsdisplaymode 547 f000 - lda SWCHA 548 f000 - cpy #3 549 f000 - bne hsskipadjustjoystick1 550 f000 - asl 551 f000 - asl 552 f000 - asl 553 f000 - asl 554 f000 -hsskipadjustjoystick1 555 f000 - sta hsswcha 556 f000 - lda SWCHB 557 f000 - and #%00000010 558 f000 - bne hsskipselectswitch 559 f000 - lda #%00010000 560 f000 - sta hsswcha 561 f000 - bne hsdodebouncecheck 562 f000 -hsskipselectswitch 563 f000 - lda hsswcha 564 f000 - and #%00110000 565 f000 - cmp #%00110000 566 f000 - beq hsjoystickskipped 567 f000 -hsdodebouncecheck 568 f000 - lda hsjoydebounce 569 f000 - beq hsdontdebounce 570 f000 - jmp hspostjoystick 571 f000 -hsdontdebounce 572 f000 - ldx #1 ; small tick sound 573 f000 - jsr playhssfx 574 f000 - lda hsswcha 575 f000 - and #%00110000 576 f000 - ldx hscursorx 577 f000 - cmp #%00100000 ; check down 578 f000 - bne hsjoycheckup 579 f000 - ldy hsinitialhold 580 f000 - cpx #0 581 f000 - bne skipavoid31_1 582 f000 - cpy #0 ; if we're about to change to the <- char (#31) then double-decrement to skip over it 583 f000 - bne skipavoid31_1 584 f000 - dey 585 f000 -skipavoid31_1 586 f000 - dey 587 f000 - jmp hssetdebounce 588 f000 -hsjoycheckup 589 f000 - cmp #%00010000 ; check up 590 f000 - bne hsjoystickskipped 591 f000 - ldy hsinitialhold 592 f000 - cpx #0 593 f000 - bne skipavoid31_2 594 f000 - cpy #30 ; if we're about to change to the <- char (#31) then double-increment to skip over it 595 f000 - bne skipavoid31_2 596 f000 - iny 597 f000 -skipavoid31_2 598 f000 - iny 599 f000 -hssetdebounce 600 f000 - tya 601 f000 - and #31 602 f000 - sta hsinitialhold 603 f000 - lda #15 604 f000 - sta hsjoydebounce 605 f000 - bne hspostjoystick 606 f000 -hsjoystickskipped 607 f000 - ; check the fire button only when the stick isn't engaged 608 f000 - lda hsinpt1 609 f000 - bpl hsbuttonskipped 610 f000 - lda hsjoydebounce 611 f000 - beq hsfiredontdebounce 612 f000 - bne hspostjoystick 613 f000 -hsfiredontdebounce 614 f000 - lda hsinitialhold 615 f000 - cmp #31 616 f000 - beq hsmovecursorback 617 f000 - inc hscursorx 618 f000 - inc hsinitialpos 619 f000 - lda hscursorx 620 f000 - cmp #3 621 f000 - bne skiphsentryisdone 622 f000 - lda #0 623 f000 - sta framecounter 624 f000 - lda #$ff 625 f000 - sta hsnewscoreline 626 f000 - dec hsinitialpos 627 f000 - bne skiphsentryisdone 628 f000 -hsmovecursorback 629 f000 - lda hscursorx 630 f000 - beq skiphsmovecursorback 631 f000 - lda #29 632 f000 - ldx hsinitialpos 633 f000 - sta HSRAMInitials,x 634 f000 - dec hsinitialpos 635 f000 - dec hscursorx 636 f000 - dex 637 f000 - lda HSRAMInitials,x 638 f000 - sta hsinitialhold 639 f000 -skiphsmovecursorback 640 f000 -skiphsentryisdone 641 f000 - ldx #0 642 f000 - jsr playhssfx 643 f000 - lda #20 644 f000 - sta hsjoydebounce 645 f000 - bne hspostjoystick 646 f000 - 647 f000 -hsbuttonskipped 648 f000 - lda #0 649 f000 - sta hsjoydebounce 650 f000 -hspostjoystick 651 f000 - 652 f000 - ldx hsinitialpos 653 f000 - lda hsinitialhold 654 f000 - sta HSRAMInitials,x 655 f000 - 656 f000 - jmp skiphschasecolors 657 f000 - 658 f000 -skipenterscorecontrol 659 f000 - jsr hschasecolors 660 f000 - jsr setuphsinpt1 661 f000 - lda hsjoydebounce 662 f000 - bne skiphschasecolors 663 f000 - lda hsinpt1 664 f000 - bmi returnfromhs 665 f000 -skiphschasecolors 666 f000 - 667 f000 - jsr drawscreen 668 f000 - 669 f000 - lda countdownseconds 670 f000 - beq returnfromhs 671 f000 - jmp keepdisplayinghs 672 f000 -returnfromhs 673 f000 - 674 f000 - ifconst songdatastart_song_highscore 675 f000 - lda hsdisplaymode 676 f000 - beq skipclearHSCsong 677 f000 - lda #0 678 f000 - sta songtempo 679 f000 -skipclearHSCsong 680 f000 - endif 681 f000 - jsr drawwait 682 f000 - jsr clearscreen 683 f000 - lda #0 684 f000 - ldy #7 685 f000 - jsr blacken320colors 686 f000 - lda ssCTRL 687 f000 - sta sCTRL 688 f000 - lda ssCHARBASE 689 f000 - sta sCHARBASE 690 f000 - rts 691 f000 - 692 f000 -setuphsinpt1 693 f000 - lda #$ff 694 f000 - sta hsinpt1 695 f000 - lda hsjoydebounce 696 f000 - beq skipdebounceadjust 697 f000 - dec hsjoydebounce 698 f000 - bne skipstorefirebuttonstatus 699 f000 -skipdebounceadjust 700 f000 - lda SWCHB 701 f000 - and #%00000001 702 f000 - bne hscheckresetover 703 f000 - lda #$ff 704 f000 - sta hsinpt1 705 f000 - rts 706 f000 -hscheckresetover 707 f000 - ldx hsdisplaymode 708 f000 - cpx #3 709 f000 - bne hsskipadjustjoyfire1 710 f000 - lda sINPT3 711 f000 - jmp hsskipadjustjoyfire1done 712 f000 -hsskipadjustjoyfire1 713 f000 - lda sINPT1 714 f000 -hsskipadjustjoyfire1done 715 f000 - sta hsinpt1 716 f000 -skipstorefirebuttonstatus 717 f000 - rts 718 f000 - 719 f000 -blacken320colors 720 f000 - ldy #7 721 f000 -blacken320colorsloop 722 f000 - sta P0C2,y 723 f000 - dey 724 f000 - bpl blacken320colorsloop 725 f000 - rts 726 f000 - 727 f000 -hschasecolors 728 f000 - lda framecounter 729 f000 - and #3 730 f000 - bne hschasecolorsreturn 731 f000 - inc hscolorchaseindex 732 f000 - lda hscolorchaseindex 733 f000 - 734 f000 - sta P5C2 735 f000 - sbc #$02 736 f000 - sta P4C2 737 f000 - sbc #$02 738 f000 - sta P3C2 739 f000 - sbc #$02 740 f000 - sta P2C2 741 f000 - sbc #$02 742 f000 - sta P1C2 743 f000 -hschasecolorsreturn 744 f000 - rts 745 f000 - 746 f000 -playhssfx 747 f000 - lda hssfx_lo,x 748 f000 - sta temp1 749 f000 - lda hssfx_hi,x 750 f000 - sta temp2 751 f000 - lda #0 752 f000 - sta temp3 753 f000 - jmp schedulesfx 754 f000 - 755 f000 -hssfx_lo 756 f000 - .byte sfx_hsletterpositionchange, >sfx_hslettertick 759 f000 - 760 f000 -sfx_hsletterpositionchange 761 f000 - .byte $10,$18,$00 762 f000 - .byte $02,$06,$08 763 f000 - .byte $02,$06,$04 764 f000 - .byte $00,$00,$00 765 f000 -sfx_hslettertick 766 f000 - .byte $10,$18,$00 767 f000 - .byte $00,$00,$0a 768 f000 - .byte $00,$00,$00 769 f000 - 770 f000 -highscorelabeladjust1 771 f000 - .byte (80-(14*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)) 772 f000 -highscorelabeladjust2 773 f000 - .byte (80+(14*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)) 774 f000 - 775 f000 -scorevarlo 776 f000 - .byte <(score0+((6-SCORESIZE)/2)),<(score0+((6-SCORESIZE)/2)),<(score1+((6-SCORESIZE)/2)) 777 f000 -scorevarhi 778 f000 - .byte >(score0+((6-SCORESIZE)/2)),>(score0+((6-SCORESIZE)/2)),>(score1+((6-SCORESIZE)/2)) 779 f000 - 780 f000 - ifnconst HSNOLEVELNAMES 781 f000 -highscoredifficultytextlo 782 f000 - .byte easylevelname, >mediumlevelname, >hardlevelname, >expertlevelname 785 f000 - ifnconst HSCUSTOMLEVELNAMES 786 f000 -highscoredifficultytextlen 787 f000 - .byte 22, 30, 26, 24 788 f000 - 789 f000 -easylevelname 790 f000 - .byte $04,$00,$12,$18,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 791 f000 -mediumlevelname 792 f000 - .byte $08,$0d,$13,$04,$11,$0c,$04,$03,$08,$00,$13,$04,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 793 f000 -hardlevelname 794 f000 - .byte $00,$03,$15,$00,$0d,$02,$04,$03,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 795 f000 -expertlevelname 796 f000 - .byte $04,$17,$0f,$04,$11,$13,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 797 f000 - else 798 f000 - include "7800hsgamediffnames.asm" 799 f000 - endif ; HSCUSTOMLEVELNAMES 800 f000 - else 801 f000 -HSHIGHSCOREStext 802 f000 - .byte $07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 803 f000 - endif ; HSNOLEVELNAMES 804 f000 - 805 f000 -highscorelabeltextlo 806 f000 - .byte player0label, >player1label, >player2label 809 f000 - 810 f000 -player0label 811 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$12,$02,$0e,$11,$04,$1a,$1d,$1d 812 f000 - 813 f000 -player1label 814 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$22,$1d,$12,$02,$0e,$11,$04,$1a 815 f000 - 816 f000 -player2label 817 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$23,$1d,$12,$02,$0e,$11,$04,$1a 818 f000 - 819 f000 - 820 f000 - ifconst HSGAMENAMELEN 821 f000 -HSGAMENAMEtable 822 f000 - include "7800hsgamename.asm" 823 f000 - endif 824 f000 - ifconst HSGAMERANKS 825 f000 - include "7800hsgameranks.asm" 826 f000 -highscoreranklabel 827 f000 - .byte $11,$00,$0d,$0a,$1a 828 f000 - endif 829 f000 - 830 f000 - ;ensure our table doesn't wrap a page... 831 f000 - if ((<*)>251) 832 f000 - align 256 833 f000 - endif 834 f000 -hsgameslotnumbers 835 f000 - .byte 33,34,35,36,37 836 f000 - endif 837 f000 - 838 f000 -loaddifficultytable 839 f000 - lda gamedifficulty 840 f000 - and #$03 ; ensure the user hasn't selected an invalid difficulty 841 f000 - sta gamedifficulty 842 f000 - cmp hsdifficulty ; check game difficulty is the same as RAM table 843 f000 - bne loaddifficultytablecontinue1 844 f000 - rts ; this high score difficulty table is already loaded 845 f000 -loaddifficultytablecontinue1 846 f000 - lda gamedifficulty 847 f000 - sta hsdifficulty 848 f000 - ;we need to check the device for the table 849 f000 - lda hsdevice 850 f000 - bne loaddifficultytablecontinue2 851 f000 - ; there's no save device. clear out this table. 852 f000 - jmp cleardifficultytablemem 853 f000 -loaddifficultytablecontinue2 854 f000 - lda hsdevice 855 f000 - and #1 856 f000 - beq memdeviceisntHSC 857 f000 - jmp loaddifficultytableHSC 858 f000 -memdeviceisntHSC 859 f000 - jmp loaddifficultytableAVOX 860 f000 - 861 f000 -savedifficultytable 862 f000 - ;*** we need to check wich device we should use... 863 f000 - lda hsdevice 864 f000 - bne savedifficultytablerealdevice 865 f000 - rts ; its a ram device 866 f000 -savedifficultytablerealdevice 867 f000 - and #1 868 f000 - beq savememdeviceisntHSC 869 f000 - jmp savedifficultytableHSC 870 f000 -savememdeviceisntHSC 871 f000 - jmp savedifficultytableAVOX 872 f000 - 873 f000 -savedifficultytableAVOX 874 f000 - ; the load call already setup the memory structure and atarivox memory location 875 f000 - jsr savealoadedHSCtablecontinue 876 f000 -savedifficultytableAVOXskipconvert 877 f000 - lda #HSIDHI 878 f000 - sta eeprombuffer 879 f000 - lda #HSIDLO 880 f000 - sta eeprombuffer+1 881 f000 - lda hsdifficulty 882 f000 - sta eeprombuffer+2 883 f000 - lda #32 884 f000 - jsr AVoxWriteBytes 885 f000 - rts 886 f000 - 887 f000 -savedifficultytableHSC 888 f000 - ;we always load a table before reaching here, so the 889 f000 - ;memory structures from the load should be intact... 890 f000 - ldy hsgameslot 891 f000 - bpl savealoadedHSCtable 892 f000 - rts 893 f000 -savealoadedHSCtable 894 f000 - lda HSCGameDifficulty,y 895 f000 - cmp #$7F 896 f000 - bne savealoadedHSCtablecontinue 897 f000 - jsr initializeHSCtableentry 898 f000 -savealoadedHSCtablecontinue 899 f000 - ;convert our RAM table to HSC format and write it out... 900 f000 - ldy #0 901 f000 - ldx #0 902 f000 -savedifficultytableScores 903 f000 - 904 f000 - lda HSRAMInitials,x 905 f000 - sta temp3 906 f000 - lda HSRAMInitials+1,x 907 f000 - sta temp4 908 f000 - lda HSRAMInitials+2,x 909 f000 - sta temp5 910 f000 - jsr encodeHSCInitials ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 911 f000 - 912 f000 - lda temp1 913 f000 - sta (HSGameTableLo),y 914 f000 - iny 915 f000 - lda temp2 916 f000 - sta (HSGameTableLo),y 917 f000 - iny 918 f000 - 919 f000 - lda HSRAMScores,x 920 f000 - sta (HSGameTableLo),y 921 f000 - iny 922 f000 - lda HSRAMScores+1,x 923 f000 - sta (HSGameTableLo),y 924 f000 - iny 925 f000 - lda HSRAMScores+2,x 926 f000 - sta (HSGameTableLo),y 927 f000 - iny 928 f000 - inx 929 f000 - inx 930 f000 - inx ; +3 931 f000 - cpx #15 932 f000 - bne savedifficultytableScores 933 f000 - rts 934 f000 - 935 f000 -loaddifficultytableHSC 936 f000 - ; routine responsible for loading the difficulty table from HSC 937 f000 - jsr findindexHSC 938 f000 - ldy hsgameslot 939 f000 - lda HSCGameDifficulty,y 940 f000 - cmp #$7F 941 f000 - bne loaddifficultytableHSCcontinue 942 f000 - ;there was an error. use a new RAM table instead... 943 f000 - jmp cleardifficultytablemem 944 f000 -loaddifficultytableHSCcontinue 945 f000 - ; parse the data into the HS memory... 946 f000 - ldy #0 947 f000 - ldx #0 948 f000 -loaddifficultytableScores 949 f000 - lda (HSGameTableLo),y 950 f000 - sta temp1 951 f000 - iny 952 f000 - lda (HSGameTableLo),y 953 f000 - sta temp2 954 f000 - jsr decodeHSCInitials ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 955 f000 - iny 956 f000 - lda (HSGameTableLo),y 957 f000 - sta HSRAMScores,x 958 f000 - lda temp3 959 f000 - sta HSRAMInitials,x 960 f000 - inx 961 f000 - iny 962 f000 - lda (HSGameTableLo),y 963 f000 - sta HSRAMScores,x 964 f000 - lda temp4 965 f000 - sta HSRAMInitials,x 966 f000 - inx 967 f000 - iny 968 f000 - lda (HSGameTableLo),y 969 f000 - sta HSRAMScores,x 970 f000 - lda temp5 971 f000 - sta HSRAMInitials,x 972 f000 - inx 973 f000 - iny 974 f000 - cpx #15 975 f000 - bne loaddifficultytableScores 976 f000 - rts 977 f000 - 978 f000 -decodeHSCInitials 979 f000 - ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 980 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 981 f000 - lda #0 982 f000 - sta temp4 983 f000 - lda temp1 984 f000 - and #%00011111 985 f000 - sta temp3 986 f000 - 987 f000 - lda temp2 988 f000 - and #%00011111 989 f000 - sta temp5 990 f000 - 991 f000 - lda temp1 992 f000 - asl 993 f000 - rol temp4 994 f000 - asl 995 f000 - rol temp4 996 f000 - asl 997 f000 - rol temp4 998 f000 - lda temp2 999 f000 - asl 1000 f000 - rol temp4 1001 f000 - asl 1002 f000 - rol temp4 1003 f000 - rts 1004 f000 -encodeHSCInitials 1005 f000 - ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 1006 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 1007 f000 - ; start with packing temp1... 1008 f000 - lda temp4 1009 f000 - and #%00011100 1010 f000 - sta temp1 1011 f000 - asl temp1 1012 f000 - asl temp1 1013 f000 - asl temp1 1014 f000 - lda temp3 1015 f000 - and #%00011111 1016 f000 - ora temp1 1017 f000 - sta temp1 1018 f000 - ; ...temp1 is now packed, on to temp2... 1019 f000 - lda temp5 1020 f000 - asl 1021 f000 - asl 1022 f000 - ror temp4 1023 f000 - ror 1024 f000 - ror temp4 1025 f000 - ror 1026 f000 - sta temp2 1027 f000 - rts 1028 f000 - 1029 f000 -findindexHSCerror 1030 f000 - ;the HSC is stuffed. return the bad slot flag 1031 f000 - ldy #$ff 1032 f000 - sty hsgameslot 1033 f000 - rts 1034 f000 - 1035 f000 -findindexHSC 1036 f000 -HSCGameID1 = $1029 1037 f000 -HSCGameID2 = $106E 1038 f000 -HSCGameDifficulty = $10B3 1039 f000 -HSCGameIndex = $10F8 1040 f000 - ; routine responsible for finding the game index from HSC 1041 f000 - ; call with x=0 to create a new table if none exist, call with x=$ff to avoid creating new tables 1042 f000 - ; the HS loading routine will use x=$ff, the HS saving routine will use x=0 1043 f000 - ldy #69 ; start +1 to account for the dey 1044 f000 -findindexHSCloop 1045 f000 - dey 1046 f000 - bmi findindexHSCerror 1047 f000 - lda HSCGameDifficulty,y 1048 f000 - cmp #$7F 1049 f000 - beq findourindexHSC 1050 f000 - cmp gamedifficulty 1051 f000 - bne findindexHSCloop 1052 f000 - lda HSCGameID1,y 1053 f000 - cmp #HSIDHI 1054 f000 - bne findindexHSCloop 1055 f000 - lda HSCGameID2,y 1056 f000 - cmp #HSIDLO 1057 f000 - bne findindexHSCloop 1058 f000 -findourindexHSC 1059 f000 - ; if we're here we found our index in the table 1060 f000 - ; or we found the first empty one 1061 f000 - sty hsgameslot 1062 f000 - jsr setupHSCGamepointer ; setup the pointer to the HS Table for this game... 1063 f000 - rts 1064 f000 - 1065 f000 - 1066 f000 -initializeHSCtableentry 1067 f000 - ldy hsgameslot 1068 f000 - ; we need to make a new entry... 1069 f000 - lda #HSIDHI 1070 f000 - sta HSCGameID1,y 1071 f000 - lda #HSIDLO 1072 f000 - sta HSCGameID2,y 1073 f000 - lda gamedifficulty 1074 f000 - sta HSCGameDifficulty,y 1075 f000 - ldx #0 1076 f000 -fixHSDGameDifficultylistLoop 1077 f000 - inx 1078 f000 - txa 1079 f000 - sta HSCGameIndex,y 1080 f000 - iny 1081 f000 - cpy #69 1082 f000 - bne fixHSDGameDifficultylistLoop 1083 f000 - rts 1084 f000 - 1085 f000 -setupHSCGamepointer 1086 f000 - ; this routines sets (HSGameTableLo) pointing to the game's HS table 1087 f000 - lda #$17 1088 f000 - sta HSGameTableHi 1089 f000 - lda #$FA 1090 f000 - sta HSGameTableLo 1091 f000 -setupHSCGamepointerLoop 1092 f000 - lda HSGameTableLo 1093 f000 - sec 1094 f000 - sbc #25 1095 f000 - sta HSGameTableLo 1096 f000 - lda HSGameTableHi 1097 f000 - sbc #0 1098 f000 - sta HSGameTableHi 1099 f000 - iny 1100 f000 - cpy #69 1101 f000 - bne setupHSCGamepointerLoop 1102 f000 - rts 1103 f000 - 1104 f000 -loaddifficultytableAVOX 1105 f000 - ; routine responsible for loading the difficulty table from Avox 1106 f000 - ; we reuse HSC routines to format data to/from our Avox RAM buffer... 1107 f000 - lda #>(eeprombuffer+3) 1108 f000 - sta HSGameTableHi 1109 f000 - lda #<(eeprombuffer+3) 1110 f000 - sta HSGameTableLo 1111 f000 - 1112 f000 - ; the start location in EEPROM, subtract 32... 1113 f000 - lda #$5F 1114 f000 - sta HSVoxHi 1115 f000 - lda #$E0 1116 f000 - sta HSVoxLo 1117 f000 - lda #0 1118 f000 - sta temp1 1119 f000 -loaddifficultytableAVOXloop 1120 f000 - inc temp1 1121 f000 - beq loaddifficultytableAVOXfull 1122 f000 - clc 1123 f000 - lda HSVoxLo 1124 f000 - adc #32 1125 f000 - sta HSVoxLo 1126 f000 - lda HSVoxHi 1127 f000 - adc #0 1128 f000 - sta HSVoxHi 1129 f000 - lda #3 1130 f000 - jsr AVoxReadBytes ; read in 3 bytes, ID1,ID2,Difficulty 1131 f000 - lda eeprombuffer 1132 f000 - cmp #$FF 1133 f000 - beq loaddifficultytableAVOXempty 1134 f000 - cmp #HSIDHI 1135 f000 - bne loaddifficultytableAVOXloop 1136 f000 - lda eeprombuffer+1 1137 f000 - cmp #HSIDLO 1138 f000 - bne loaddifficultytableAVOXloop 1139 f000 - lda eeprombuffer+2 1140 f000 - cmp gamedifficulty 1141 f000 - bne loaddifficultytableAVOXloop 1142 f000 -loaddifficultytableAVOXdone 1143 f000 - lda #32 1144 f000 - jsr AVoxReadBytes 1145 f000 - jsr loaddifficultytableHSCcontinue 1146 f000 - rts 1147 f000 -loaddifficultytableAVOXfull 1148 f000 - lda #0 1149 f000 - sta hsdevice ; looks like all 255 entries are taken... disable it. 1150 f000 -loaddifficultytableAVOXempty 1151 f000 - jmp cleardifficultytablemem 1152 f000 - rts 1153 f000 - 1154 f000 -cleardifficultytablemem 1155 f000 - ldy #29 1156 f000 - lda #0 1157 f000 -cleardifficultytablememloop 1158 f000 - sta HSRAMTable,y 1159 f000 - dey 1160 f000 - bpl cleardifficultytablememloop 1161 f000 - rts 1162 f000 -hiscoremoduleend 1163 f000 - 1164 f000 - echo " hiscore assembly: ",[(hiscoremoduleend-hiscoremodulestart)]d," bytes" 1165 f000 - 1166 f000 - ifconst DOUBLEWIDE 1167 f000 -plotvaluedw 1168 f000 -plotdigitcount = temp6 1169 f000 - lda #0 1170 f000 - tay 1171 f000 - ldx valbufend 1172 f000 - 1173 f000 - lda plotdigitcount 1174 f000 - and #1 1175 f000 - beq pvnibble2chardw 1176 f000 - lda #0 1177 f000 - sta VALBUFFER,x ; just in case we skip this digit 1178 f000 - beq pvnibble2char_skipnibbledw 1179 f000 - 1180 f000 -pvnibble2chardw 1181 f000 - ; high nibble... 1182 f000 - lda (temp7),y 1183 f000 - and #$f0 1184 f000 - lsr 1185 f000 - lsr 1186 f000 - lsr 1187 f000 - lsr 1188 f000 - 1189 f000 - clc 1190 f000 - adc temp1 ; add the offset to character graphics to our value 1191 f000 - sta VALBUFFER,x 1192 f000 - inx 1193 f000 - dec plotdigitcount 1194 f000 -pvnibble2char_skipnibbledw 1195 f000 - ; low nibble... 1196 f000 - lda (temp7),y 1197 f000 - and #$0f 1198 f000 - clc 1199 f000 - adc temp1 ; add the offset to character graphics to our value 1200 f000 - sta VALBUFFER,x 1201 f000 - inx 1202 f000 - iny 1203 f000 - 1204 f000 - dec plotdigitcount 1205 f000 - bne pvnibble2chardw 1206 f000 - ;point to the start of our valuebuffer 1207 f000 - clc 1208 f000 - lda #VALBUFFER 1212 f000 - adc #0 1213 f000 - sta temp2 1214 f000 - 1215 f000 - ;advance valbufend to the end of our value buffer 1216 f000 - stx valbufend 1217 f000 - 1218 f000 - ifnconst plotvalueonscreen 1219 f000 - jmp plotcharacters 1220 f000 - else 1221 f000 - jmp plotcharacterslive 1222 f000 - endif 1223 f000 - endif ; DOUBLEWIDE 1224 f000 - 1225 f000 endif ; HSSUPPORT 1226 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_controller_check.78b.asm 5035 f000 endif 5036 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 5037 f000 5038 f000 ;standard routimes needed for pretty much all games 5039 f000 5040 f000 ; some definitions used with "set debug color" 5041 f000 00 91 DEBUGCALC = $91 5042 f000 00 41 DEBUGWASTE = $41 5043 f000 00 c1 DEBUGDRAW = $C1 5044 f000 5045 f000 ;NMI and IRQ handlers 5046 f000 NMI 5047 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 5048 f000 48 pha ; save A 5049 f001 a5 4d lda visibleover 5050 f003 49 ff eor #255 5051 f005 85 4d sta visibleover 5052 f007 - ifconst DEBUGINTERRUPT 5053 f007 - and #$93 5054 f007 - sta BACKGRND 5055 f007 endif 5056 f007 ce b2 01 dec interruptindex 5057 f00a d0 03 bne skipreallyoffvisible 5058 f00c 4c 73 f0 jmp reallyoffvisible 5059 f00f skipreallyoffvisible 5060 f00f a5 4d lda visibleover 5061 f011 d0 03 bne carryontopscreenroutine 5062 f013 - ifconst .bottomscreenroutine 5063 f013 - jsr .bottomscreenroutine 5064 f013 endif 5065 f013 5066 f013 4c 65 f0 jmp skiptopscreenroutine 5067 f016 carryontopscreenroutine 5068 f016 8a txa ; save X+Y 5069 f017 48 pha 5070 f018 98 tya 5071 f019 48 pha 5072 f01a d8 cld 5073 f01b - ifconst .topscreenroutine 5074 f01b - jsr .topscreenroutine 5075 f01b endif 5076 f01b ifnconst CANARYOFF 5077 f01b ad c1 01 lda canary 5078 f01e f0 0c beq skipcanarytriggered 5079 f020 a9 45 lda #$45 5080 f022 85 20 sta BACKGRND 5081 f024 a9 60 lda #$60 5082 f026 85 3c sta CTRL 5083 f028 8d 07 21 sta sCTRL 5084 f02b 02 .byte.b $02 ; KIL/JAM 5085 f02c endif 5086 f02c skipcanarytriggered 5087 f02c ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 5088 f02f 5089 f02f ; ** Other important routines that need to regularly run, and can run onscreen. 5090 f02f ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 5091 f02f 5092 f02f - ifconst LONGCONTROLLERREAD 5093 f02f -longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 5094 f02f - ldy port1control 5095 f02f - lda longreadtype,y 5096 f02f - beq LLRET1 5097 f02f - tay 5098 f02f - lda longreadroutinehiP1,y 5099 f02f - sta inttemp4 5100 f02f - lda longreadroutineloP1,y 5101 f02f - sta inttemp3 5102 f02f - jmp (inttemp3) 5103 f02f -LLRET1 5104 f02f - ldy port0control 5105 f02f - lda longreadtype,y 5106 f02f - beq LLRET0 5107 f02f - tay 5108 f02f - lda longreadroutinehiP0,y 5109 f02f - sta inttemp4 5110 f02f - lda longreadroutineloP0,y 5111 f02f - sta inttemp3 5112 f02f - jmp (inttemp3) 5113 f02f -LLRET0 5114 f02f - 5115 f02f - 5116 f02f - ifconst PADDLERANGE 5117 f02f -TIMEVAL = PADDLERANGE 5118 f02f - else 5119 f02f -TIMEVAL = 160 5120 f02f - endif 5121 f02f -TIMEOFFSET = 10 5122 f02f - 5123 f02f endif ; LONGCONTROLLERREAD 5124 f02f 5125 f02f 5126 f02f 20 e5 f1 jsr servicesfxchannels 5127 f032 - ifconst MUSICTRACKER 5128 f032 - jsr servicesong 5129 f032 endif ; MUSICTRACKER 5130 f032 5131 f032 ee a4 01 inc framecounter 5132 f035 ad a4 01 lda framecounter 5133 f038 29 3f and #63 5134 f03a d0 08 bne skipcountdownseconds 5135 f03c ad a5 01 lda countdownseconds 5136 f03f f0 03 beq skipcountdownseconds 5137 f041 ce a5 01 dec countdownseconds 5138 f044 skipcountdownseconds 5139 f044 5140 f044 a2 01 ldx #1 5141 f046 buttonreadloop 5142 f046 8a txa 5143 f047 48 pha 5144 f048 bc b7 01 ldy port0control,x 5145 f04b b9 c8 f1 lda buttonhandlerlo,y 5146 f04e 85 da sta inttemp3 5147 f050 b9 bd f1 lda buttonhandlerhi,y 5148 f053 85 db sta inttemp4 5149 f055 05 da ora inttemp3 5150 f057 f0 03 beq buttonreadloopreturn 5151 f059 6c da 00 jmp (inttemp3) 5152 f05c buttonreadloopreturn 5153 f05c 68 pla 5154 f05d aa tax 5155 f05e ca dex 5156 f05f 10 e5 bpl buttonreadloop 5157 f061 5158 f061 - ifconst KEYPADSUPPORT 5159 f061 - jsr keypadrowselect 5160 f061 endif ; KEYPADSUPPORT 5161 f061 5162 f061 5163 f061 - ifconst DOUBLEBUFFER 5164 f061 - lda doublebufferminimumframeindex 5165 f061 - beq skipdoublebufferminimumframeindexadjust 5166 f061 - dec doublebufferminimumframeindex 5167 f061 -skipdoublebufferminimumframeindexadjust 5168 f061 endif 5169 f061 5170 f061 68 pla 5171 f062 a8 tay 5172 f063 68 pla 5173 f064 aa tax 5174 f065 skiptopscreenroutine 5175 f065 68 pla 5176 f066 40 RTI 5177 f067 5178 f067 IRQ ; the only source of non-nmi is the BRK opcode. The only 5179 f067 ifnconst BREAKPROTECTOFF 5180 f067 a9 1a lda #$1A 5181 f069 85 20 sta BACKGRND 5182 f06b a9 60 lda #$60 5183 f06d 85 3c sta CTRL 5184 f06f 8d 07 21 sta sCTRL 5185 f072 02 .byte.b $02 ; KIL/JAM 5186 f073 - else 5187 f073 - RTI 5188 f073 endif 5189 f073 5190 f073 - ifconst LONGCONTROLLERREAD 5191 f073 - 5192 f073 -longreadtype 5193 f073 - .byte 0, 0, 0, 1 ; NONE PROLINE LIGHTGUN PADDLE 5194 f073 - .byte 2, 0, 3, 0 ; TRKBALL VCSSTICK DRIVING KEYPAD 5195 f073 - .byte 3, 3, 0 ; STMOUSE AMOUSE ATARIVOX 5196 f073 - 5197 f073 -longreadroutineloP0 5198 f073 - .byte LLRET0 ; 0 = no routine 5205 f073 - .byte >paddleport0update ; 1 = paddle 5206 f073 - .byte >trakball0update ; 2 = trackball 5207 f073 - .byte >mouse0update ; 3 = mouse 5208 f073 - 5209 f073 -longreadroutineloP1 5210 f073 - .byte LLRET1 ; 0 = no routine 5217 f073 - .byte >paddleport1update ; 1 = paddle 5218 f073 - .byte >trakball1update ; 2 = trackball 5219 f073 - .byte >mouse1update ; 3 = mouse 5220 f073 - 5221 f073 - 5222 f073 -SETTIM64T 5223 f073 - bne skipdefaulttime 5224 f073 - ifnconst PADDLESMOOTHINGOFF 5225 f073 - lda #(TIMEVAL+TIMEOFFSET+1) 5226 f073 - else 5227 f073 - lda #(TIMEVAL+TIMEOFFSET) 5228 f073 - endif 5229 f073 -skipdefaulttime 5230 f073 - tay 5231 f073 - dey 5232 f073 -.setTIM64Tloop 5233 f073 - sta TIM64T 5234 f073 - cpy INTIM 5235 f073 - bne .setTIM64Tloop 5236 f073 - rts 5237 f073 endif ; LONGCONTROLLERREAD 5238 f073 5239 f073 reallyoffvisible 5240 f073 85 24 sta WSYNC 5241 f075 5242 f075 a9 00 lda #0 5243 f077 85 4d sta visibleover 5244 f079 - ifconst DEBUGINTERRUPT 5245 f079 - sta BACKGRND 5246 f079 endif 5247 f079 5248 f079 a9 03 lda #3 5249 f07b 8d b2 01 sta interruptindex 5250 f07e 5251 f07e 8a txa 5252 f07f 48 pha 5253 f080 98 tya 5254 f081 48 pha 5255 f082 d8 cld 5256 f083 5257 f083 5258 f083 20 5f f1 jsr uninterruptableroutines 5259 f086 5260 f086 - ifconst .userinterrupt 5261 f086 - jsr .userinterrupt 5262 f086 endif 5263 f086 5264 f086 - ifconst KEYPADSUPPORT 5265 f086 - jsr keypadcolumnread 5266 f086 endif 5267 f086 5268 f086 68 pla 5269 f087 a8 tay 5270 f088 68 pla 5271 f089 aa tax 5272 f08a 68 pla 5273 f08b 40 RTI 5274 f08c 5275 f08c clearscreen 5276 f08c a2 17 ldx #(WZONECOUNT-1) 5277 f08e a9 00 lda #0 5278 f090 clearscreenloop 5279 f090 95 65 sta dlend,x 5280 f092 ca dex 5281 f093 10 fb bpl clearscreenloop 5282 f095 a9 00 lda #0 5283 f097 8d ad 01 sta valbufend ; clear the bcd value buffer 5284 f09a 8d ae 01 sta valbufendsave 5285 f09d 60 rts 5286 f09e 5287 f09e restorescreen 5288 f09e a2 17 ldx #(WZONECOUNT-1) 5289 f0a0 a9 00 lda #0 5290 f0a2 restorescreenloop 5291 f0a2 b5 82 lda dlendsave,x 5292 f0a4 95 65 sta dlend,x 5293 f0a6 ca dex 5294 f0a7 10 f9 bpl restorescreenloop 5295 f0a9 ad ae 01 lda valbufendsave 5296 f0ac 8d ad 01 sta valbufend 5297 f0af 60 rts 5298 f0b0 5299 f0b0 savescreen 5300 f0b0 a2 17 ldx #(WZONECOUNT-1) 5301 f0b2 savescreenloop 5302 f0b2 b5 65 lda dlend,x 5303 f0b4 95 82 sta dlendsave,x 5304 f0b6 ca dex 5305 f0b7 10 f9 bpl savescreenloop 5306 f0b9 ad ad 01 lda valbufend 5307 f0bc 8d ae 01 sta valbufendsave 5308 f0bf - ifconst DOUBLEBUFFER 5309 f0bf - lda doublebufferstate 5310 f0bf - beq savescreenrts 5311 f0bf - lda #1 5312 f0bf - sta doublebufferbufferdirty 5313 f0bf -savescreenrts 5314 f0bf endif ; DOUBLEBUFFER 5315 f0bf 60 rts 5316 f0c0 5317 f0c0 drawscreen 5318 f0c0 5319 f0c0 a9 00 lda #0 5320 f0c2 85 42 sta temp1 ; not B&W if we're here... 5321 f0c4 5322 f0c4 drawscreenwait 5323 f0c4 a5 4d lda visibleover 5324 f0c6 d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 5325 f0c8 5326 f0c8 ;restore some registers in case the game changed them mid-screen... 5327 f0c8 ad 07 21 lda sCTRL 5328 f0cb 05 42 ora temp1 5329 f0cd 85 3c sta CTRL 5330 f0cf ad 0b 21 lda sCHARBASE 5331 f0d2 85 34 sta CHARBASE 5332 f0d4 5333 f0d4 ;ensure all of the display list is terminated... 5334 f0d4 20 45 f1 jsr terminatedisplaylist 5335 f0d7 5336 f0d7 ifnconst pauseroutineoff 5337 f0d7 20 e2 f0 jsr pauseroutine 5338 f0da endif ; pauseroutineoff 5339 f0da 5340 f0da ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 5341 f0da ; delaying a full frame, but still allowing time for basic calculations. 5342 f0da visiblescreenstartedwait 5343 f0da a5 4d lda visibleover 5344 f0dc f0 fc beq visiblescreenstartedwait 5345 f0de visiblescreenstartedwaitdone 5346 f0de ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 5347 f0e1 60 rts 5348 f0e2 5349 f0e2 ifnconst pauseroutineoff 5350 f0e2 ; check to see if pause was pressed and released 5351 f0e2 pauseroutine 5352 f0e2 ad b3 01 lda pausedisable 5353 f0e5 d0 4e bne leavepauseroutine 5354 f0e7 a9 08 lda #8 5355 f0e9 2c 82 02 bit SWCHB 5356 f0ec f0 29 beq pausepressed 5357 f0ee 5358 f0ee ifnconst SOFTRESETASPAUSEOFF 5359 f0ee ifnconst MOUSESUPPORT 5360 f0ee ifnconst TRAKBALLSUPPORT 5361 f0ee ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 5362 f0f1 29 70 and #%01110000 ; _LDU 5363 f0f3 f0 22 beq pausepressed 5364 f0f5 endif 5365 f0f5 endif 5366 f0f5 endif 5367 f0f5 5368 f0f5 ;pause isn't pressed 5369 f0f5 a9 00 lda #0 5370 f0f7 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 5371 f0fa 5372 f0fa ;check if we're in an already paused state 5373 f0fa ad 00 21 lda pausestate 5374 f0fd f0 36 beq leavepauseroutine ; nope, leave 5375 f0ff 5376 f0ff c9 01 cmp #1 ; last frame was the start of pausing 5377 f101 f0 2b beq enterpausestate2 ; move from state 1 to 2 5378 f103 5379 f103 c9 02 cmp #2 5380 f105 f0 34 beq carryonpausing 5381 f107 5382 f107 ;pausestate must be >2, which means we're ending an unpause 5383 f107 a9 00 lda #0 5384 f109 8d ac 01 sta pausebuttonflag 5385 f10c 8d 00 21 sta pausestate 5386 f10f ad 07 21 lda sCTRL 5387 f112 85 3c sta CTRL 5388 f114 4c 35 f1 jmp leavepauseroutine 5389 f117 5390 f117 pausepressed 5391 f117 ;pause is pressed 5392 f117 ad ac 01 lda pausebuttonflag 5393 f11a c9 ff cmp #$ff 5394 f11c f0 1d beq carryonpausing 5395 f11e 5396 f11e ;its a new press, increment the state 5397 f11e ee 00 21 inc pausestate 5398 f121 5399 f121 ;silence volume at the start and end of pausing 5400 f121 a9 00 lda #0 5401 f123 85 19 sta AUDV0 5402 f125 85 1a sta AUDV1 5403 f127 5404 f127 - ifconst pokeysupport 5405 f127 - ldy #7 5406 f127 -pausesilencepokeyaudioloop 5407 f127 - sta (pokeybase),y 5408 f127 - dey 5409 f127 - bpl pausesilencepokeyaudioloop 5410 f127 endif ; pokeysupport 5411 f127 5412 f127 a9 ff lda #$ff 5413 f129 8d ac 01 sta pausebuttonflag 5414 f12c d0 0d bne carryonpausing 5415 f12e 5416 f12e enterpausestate2 5417 f12e a9 02 lda #2 5418 f130 8d 00 21 sta pausestate 5419 f133 d0 06 bne carryonpausing 5420 f135 leavepauseroutine 5421 f135 ad 07 21 lda sCTRL 5422 f138 85 3c sta CTRL 5423 f13a 60 rts 5424 f13b carryonpausing 5425 f13b - ifconst .pause 5426 f13b - jsr .pause 5427 f13b endif ; .pause 5428 f13b ad 07 21 lda sCTRL 5429 f13e 09 80 ora #%10000000 ; turn off colorburst during pause... 5430 f140 85 3c sta CTRL 5431 f142 4c e2 f0 jmp pauseroutine 5432 f145 endif ; pauseroutineoff 5433 f145 5434 f145 5435 f145 - ifconst DOUBLEBUFFER 5436 f145 -skipterminatedisplaylistreturn 5437 f145 - rts 5438 f145 endif ; DOUBLEBUFFER 5439 f145 terminatedisplaylist 5440 f145 - ifconst DOUBLEBUFFER 5441 f145 - lda doublebufferstate 5442 f145 - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 5443 f145 endif ; DOUBLEBUFFER 5444 f145 terminatedisplaybuffer 5445 f145 ;add DL end entry on each DL 5446 f145 a2 17 ldx #(WZONECOUNT-1) 5447 f147 dlendloop 5448 f147 bd 48 f6 lda DLPOINTL,x 5449 f14a - ifconst DOUBLEBUFFER 5450 f14a - clc 5451 f14a - adc doublebufferdloffset 5452 f14a endif ; DOUBLEBUFFER 5453 f14a 85 63 sta dlpnt 5454 f14c bd 30 f6 lda DLPOINTH,x 5455 f14f - ifconst DOUBLEBUFFER 5456 f14f - adc #0 5457 f14f endif ; DOUBLEBUFFER 5458 f14f 85 64 sta dlpnt+1 5459 f151 b4 65 ldy dlend,x 5460 f153 a9 00 lda #$00 5461 f155 dlendmoreloops 5462 f155 c8 iny 5463 f156 91 63 sta (dlpnt),y 5464 f158 - ifconst FRAMESKIPGLITCHFIXWEAK 5465 f158 - cpy #DLLASTOBJ+1 5466 f158 - beq dlendthiszonedone 5467 f158 - iny 5468 f158 - iny 5469 f158 - iny 5470 f158 - iny 5471 f158 - iny 5472 f158 - sta (dlpnt),y 5473 f158 -dlendthiszonedone 5474 f158 endif FRAMESKIPGLITCHFIXWEAK 5475 f158 - ifconst FRAMESKIPGLITCHFIX 5476 f158 - iny 5477 f158 - iny 5478 f158 - iny 5479 f158 - iny 5480 f158 - cpy #DLLASTOBJ-1 5481 f158 - bcc dlendmoreloops 5482 f158 endif ; FRAMESKIPGLITCHFIX 5483 f158 ca dex 5484 f159 10 ec bpl dlendloop 5485 f15b 5486 f15b ifnconst pauseroutineoff 5487 f15b 20 e2 f0 jsr pauseroutine 5488 f15e endif ; pauseroutineoff 5489 f15e 60 rts 5490 f15f 5491 f15f uninterruptableroutines 5492 f15f ; this is for routines that must happen off the visible screen, each frame. 5493 f15f 5494 f15f - ifconst AVOXVOICE 5495 f15f - jsr serviceatarivoxqueue 5496 f15f endif 5497 f15f 5498 f15f a9 00 lda #0 5499 f161 8d b6 01 sta palfastframe 5500 f164 ad 09 21 lda paldetected 5501 f167 f0 10 beq skippalframeadjusting 5502 f169 ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 5503 f169 ae b5 01 ldx palframes 5504 f16c e8 inx 5505 f16d e0 05 cpx #5 5506 f16f d0 05 bne palframeskipdone 5507 f171 ee b6 01 inc palfastframe 5508 f174 a2 00 ldx #0 5509 f176 palframeskipdone 5510 f176 8e b5 01 stx palframes 5511 f179 skippalframeadjusting 5512 f179 5513 f179 - ifconst MUSICTRACKER 5514 f179 - ; We normally run the servicesong routine from the top-screen interrupt, but if it 5515 f179 - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 5516 f179 - ; If that happens, we try again here. Chances are very small we'll run into the same 5517 f179 - ; problem twice, and if we do, we just drop a musical note or two. 5518 f179 - lda sfxschedulemissed 5519 f179 - beq servicesongwasnotmissed 5520 f179 - jsr servicesong 5521 f179 -servicesongwasnotmissed 5522 f179 endif ; MUSICTRACKER 5523 f179 5524 f179 60 rts 5525 f17a 5526 f17a serviceatarivoxqueue 5527 f17a - ifconst AVOXVOICE 5528 f17a - lda voxlock 5529 f17a - bne skipvoxprocessing ; the vox is in the middle of speech address update 5530 f17a -skipvoxqueuesizedec 5531 f17a - jmp processavoxvoice 5532 f17a -skipvoxprocessing 5533 f17a - rts 5534 f17a - 5535 f17a -processavoxvoice 5536 f17a - lda avoxenable 5537 f17a - bne avoxfixport 5538 f17a - SPKOUT tempavox 5539 f17a - rts 5540 f17a -avoxfixport 5541 f17a - lda #0 ; restore the port to all bits as inputs... 5542 f17a - sta CTLSWA 5543 f17a - rts 5544 f17a -silenceavoxvoice 5545 f17a - SPEAK avoxsilentdata 5546 f17a - rts 5547 f17a -avoxsilentdata 5548 f17a - .byte 31,255 5549 f17a else 5550 f17a 60 rts 5551 f17b endif ; AVOXVOICE 5552 f17b 5553 f17b joybuttonhandler 5554 f17b 8a txa 5555 f17c 0a asl 5556 f17d a8 tay 5557 f17e b9 08 00 lda INPT0,y 5558 f181 4a lsr 5559 f182 9d 02 21 sta sINPT1,x 5560 f185 b9 09 00 lda INPT1,y 5561 f188 29 80 and #%10000000 5562 f18a 1d 02 21 ora sINPT1,x 5563 f18d 9d 02 21 sta sINPT1,x 5564 f190 5565 f190 b5 0c lda INPT4,x 5566 f192 30 19 bmi .skip1bjoyfirecheck 5567 f194 ;one button joystick is down 5568 f194 49 80 eor #%10000000 5569 f196 9d 02 21 sta sINPT1,x 5570 f199 5571 f199 ad b1 01 lda joybuttonmode 5572 f19c 3d b0 f1 and twobuttonmask,x 5573 f19f f0 0c beq .skip1bjoyfirecheck 5574 f1a1 ad b1 01 lda joybuttonmode 5575 f1a4 1d b0 f1 ora twobuttonmask,x 5576 f1a7 8d b1 01 sta joybuttonmode 5577 f1aa 8d 82 02 sta SWCHB 5578 f1ad .skip1bjoyfirecheck 5579 f1ad 4c 5c f0 jmp buttonreadloopreturn 5580 f1b0 5581 f1b0 twobuttonmask 5582 f1b0 04 10 .byte.b %00000100,%00010000 5583 f1b2 5584 f1b2 gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 5585 f1b2 - ifconst LIGHTGUNSUPPORT 5586 f1b2 - cpx #0 5587 f1b2 - bne secondportgunhandler 5588 f1b2 -firstportgunhandler 5589 f1b2 - lda SWCHA 5590 f1b2 - asl 5591 f1b2 - asl 5592 f1b2 - asl ; shift D4 to D7 5593 f1b2 - and #%10000000 5594 f1b2 - eor #%10000000 5595 f1b2 - sta sINPT1 5596 f1b2 - jmp buttonreadloopreturn 5597 f1b2 -secondportgunhandler 5598 f1b2 - lda SWCHA 5599 f1b2 - lsr ; shift D0 into carry 5600 f1b2 - lsr ; shift carry into D7 5601 f1b2 - and #%10000000 5602 f1b2 - eor #%10000000 5603 f1b2 - sta sINPT3 5604 f1b2 - jmp buttonreadloopreturn 5605 f1b2 endif ; LIGHTGUNSUPPORT 5606 f1b2 5607 f1b2 controlsusing2buttoncode 5608 f1b2 00 .byte.b 0 ; 00=no controller plugged in 5609 f1b3 01 .byte.b 1 ; 01=proline joystick 5610 f1b4 00 .byte.b 0 ; 02=lightgun 5611 f1b5 00 .byte.b 0 ; 03=paddle 5612 f1b6 01 .byte.b 1 ; 04=trakball 5613 f1b7 01 .byte.b 1 ; 05=vcs joystick 5614 f1b8 01 .byte.b 1 ; 06=driving control 5615 f1b9 00 .byte.b 0 ; 07=keypad control 5616 f1ba 00 .byte.b 0 ; 08=st mouse/cx80 5617 f1bb 00 .byte.b 0 ; 09=amiga mouse 5618 f1bc 01 .byte.b 1 ; 10=atarivox 5619 f1bd 5620 f1bd buttonhandlerhi 5621 f1bd 00 .byte.b 0 ; 00=no controller plugged in 5622 f1be f1 .byte.b >joybuttonhandler ; 01=proline joystick 5623 f1bf f1 .byte.b >gunbuttonhandler ; 02=lightgun 5624 f1c0 f5 .byte.b >paddlebuttonhandler ; 03=paddle 5625 f1c1 f1 .byte.b >joybuttonhandler ; 04=trakball 5626 f1c2 f1 .byte.b >joybuttonhandler ; 05=vcs joystick 5627 f1c3 f1 .byte.b >joybuttonhandler ; 06=driving control 5628 f1c4 00 .byte.b 0 ; 07=keypad 5629 f1c5 f5 .byte.b >mousebuttonhandler ; 08=st mouse 5630 f1c6 f5 .byte.b >mousebuttonhandler ; 09=amiga mouse 5631 f1c7 f1 .byte.b >joybuttonhandler ; 10=atarivox 5632 f1c8 buttonhandlerlo 5633 f1c8 00 .byte.b 0 ; 00=no controller plugged in 5634 f1c9 7b .byte.b $0F means the sound is looped while priority is active 5735 f226 5736 f226 05 d9 ora inttemp2 5737 f228 05 d8 ora inttemp1 ; check if F|C|V=0 5738 f22a f0 23 beq zerosfx ; if so, we're at the end of the sound. 5739 f22c 5740 f22c advancesfxpointer 5741 f22c ; advance the pointer to the next sound chunk 5742 f22c c8 iny 5743 f22d 84 da sty inttemp3 5744 f22f 18 clc 5745 f230 b5 4e lda sfx1pointlo,x 5746 f232 65 da adc inttemp3 5747 f234 95 4e sta sfx1pointlo,x 5748 f236 b5 50 lda sfx1pointhi,x 5749 f238 69 00 adc #0 5750 f23a 95 50 sta sfx1pointhi,x 5751 f23c 4c e7 f1 jmp servicesfxchannelsloop 5752 f23f 5753 f23f sfxsoundloop 5754 f23f 48 pha 5755 f240 b5 52 lda sfx1priority,x 5756 f242 d0 04 bne sfxsoundloop_carryon 5757 f244 68 pla ; fix the stack before we go 5758 f245 4c 2c f2 jmp advancesfxpointer 5759 f248 sfxsoundloop_carryon 5760 f248 68 pla 5761 f249 29 f0 and #$F0 5762 f24b 4a lsr 5763 f24c 4a lsr 5764 f24d 4a lsr 5765 f24e 4a lsr 5766 f24f 5767 f24f zerosfx 5768 f24f 95 4e sta sfx1pointlo,x 5769 f251 95 50 sta sfx1pointhi,x 5770 f253 95 52 sta sfx1priority,x 5771 f255 4c e7 f1 jmp servicesfxchannelsloop 5772 f258 5773 f258 5774 f258 schedulesfx 5775 f258 ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 5776 f258 a0 00 ldy #0 5777 f25a b1 e0 lda (sfxinstrumentlo),y 5778 f25c - ifconst pokeysupport 5779 f25c - cmp #$20 ; POKEY? 5780 f25c - bne scheduletiasfx 5781 f25c - jmp schedulepokeysfx 5782 f25c endif 5783 f25c scheduletiasfx 5784 f25c ;cmp #$10 ; TIA? 5785 f25c ;beq continuescheduletiasfx 5786 f25c ; rts ; unhandled!!! 5787 f25c continuescheduletiasfx 5788 f25c ifnconst TIASFXMONO 5789 f25c a5 4e lda sfx1pointlo 5790 f25e 05 50 ora sfx1pointhi 5791 f260 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 5792 f262 a5 4f lda sfx2pointlo 5793 f264 05 51 ora sfx2pointhi 5794 f266 f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 5795 f268 ; Both channels are scheduled. 5796 f268 a0 01 ldy #1 5797 f26a b1 e0 lda (sfxinstrumentlo),y 5798 f26c d0 01 bne interruptsfx 5799 f26e 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 5800 f26f interruptsfx 5801 f26f ;Compare which active sound has a lower priority. We'll interrupt the lower one. 5802 f26f a5 52 lda sfx1priority 5803 f271 c5 53 cmp sfx2priority 5804 f273 b0 04 bcs schedulesfx2 5805 f275 endif ; !TIASFXMONO 5806 f275 5807 f275 schedulesfx1 5808 f275 a2 00 ldx #0 ; channel 1 5809 f277 ifnconst TIASFXMONO 5810 f277 f0 02 beq skipschedulesfx2 5811 f279 schedulesfx2 5812 f279 a2 01 ldx #1 ; channel 2 5813 f27b skipschedulesfx2 5814 f27b endif ; !TIASFXMONO 5815 f27b 5816 f27b - ifconst MUSICTRACKER 5817 f27b - lda sfxnoteindex 5818 f27b - bpl skipdrumkitoverride 5819 f27b - and #$7F ; subtract 128 5820 f27b - sec 5821 f27b - sbc #4 ; drums start at 132, i.e. octave 10 5822 f27b - asl 5823 f27b - tay 5824 f27b - lda tiadrumkitdefinition,y 5825 f27b - sta sfxinstrumentlo 5826 f27b - iny 5827 f27b - lda tiadrumkitdefinition,y 5828 f27b - sta sfxinstrumenthi 5829 f27b - lda #0 5830 f27b - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 5831 f27b -skipdrumkitoverride 5832 f27b endif ; MUSICTRACKER 5833 f27b a0 01 ldy #1 ; get priority and sound-resolution (in frames) 5834 f27d b1 e0 lda (sfxinstrumentlo),y 5835 f27f 95 52 sta sfx1priority,x 5836 f281 c8 iny 5837 f282 b1 e0 lda (sfxinstrumentlo),y 5838 f284 95 56 sta sfx1frames,x 5839 f286 a5 e0 lda sfxinstrumentlo 5840 f288 18 clc 5841 f289 69 03 adc #3 5842 f28b 95 4e sta sfx1pointlo,x 5843 f28d a5 e1 lda sfxinstrumenthi 5844 f28f 69 00 adc #0 5845 f291 95 50 sta sfx1pointhi,x 5846 f293 a5 e2 lda sfxpitchoffset 5847 f295 95 54 sta sfx1poffset,x 5848 f297 a9 00 lda #0 5849 f299 95 58 sta sfx1tick,x 5850 f29b a5 e3 lda sfxnoteindex 5851 f29d 95 cd sta sfx1notedata,x 5852 f29f 60 rts 5853 f2a0 5854 f2a0 plotsprite 5855 f2a0 ifnconst NODRAWWAIT 5856 f2a0 - ifconst DOUBLEBUFFER 5857 f2a0 - lda doublebufferstate 5858 f2a0 - bne skipplotspritewait 5859 f2a0 endif ; DOUBLEBUFFER 5860 f2a0 - ifconst DEBUGWAITCOLOR 5861 f2a0 - lda #$41 5862 f2a0 - sta BACKGRND 5863 f2a0 endif 5864 f2a0 plotspritewait 5865 f2a0 a5 4d lda visibleover 5866 f2a2 d0 fc bne plotspritewait 5867 f2a4 skipplotspritewait 5868 f2a4 - ifconst DEBUGWAITCOLOR 5869 f2a4 - lda #$0 5870 f2a4 - sta BACKGRND 5871 f2a4 endif 5872 f2a4 endif 5873 f2a4 5874 f2a4 ;arguments: 5875 f2a4 ; temp1=lo graphicdata 5876 f2a4 ; temp2=hi graphicdata 5877 f2a4 ; temp3=palette | width byte 5878 f2a4 ; temp4=x 5879 f2a4 ; temp5=y 5880 f2a4 ; temp6=mode 5881 f2a4 a5 46 lda temp5 ;Y position 5882 f2a6 4a lsr ; 2 - Divide by 8 or 16 5883 f2a7 4a lsr ; 2 5884 f2a8 4a lsr ; 2 5885 f2a9 - if WZONEHEIGHT = 16 5886 f2a9 - lsr ; 2 5887 f2a9 endif 5888 f2a9 5889 f2a9 aa tax 5890 f2aa 5891 f2aa ifnconst NOLIMITCHECKING 5892 f2aa 5893 f2aa ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 5894 f2aa 5895 f2aa c9 18 cmp #WZONECOUNT 5896 f2ac 5897 f2ac 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 5898 f2ae ; otherwise, check to see if the bottom half is in zone 0... 5899 f2ae 5900 f2ae - if WZONEHEIGHT = 16 5901 f2ae - cmp #15 5902 f2ae else 5903 f2ae c9 1f cmp #31 5904 f2b0 endif 5905 f2b0 5906 f2b0 d0 05 bne exitplotsprite1 5907 f2b2 a2 00 ldx #0 5908 f2b4 4c f1 f2 jmp continueplotsprite2 5909 f2b7 exitplotsprite1 5910 f2b7 60 rts 5911 f2b8 5912 f2b8 continueplotsprite1 5913 f2b8 endif 5914 f2b8 5915 f2b8 bd 48 f6 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 5916 f2bb - ifconst DOUBLEBUFFER 5917 f2bb - clc 5918 f2bb - adc doublebufferdloffset 5919 f2bb endif ; DOUBLEBUFFER 5920 f2bb 85 63 sta dlpnt 5921 f2bd bd 30 f6 lda DLPOINTH,x 5922 f2c0 - ifconst DOUBLEBUFFER 5923 f2c0 - adc #0 5924 f2c0 endif ; DOUBLEBUFFER 5925 f2c0 85 64 sta dlpnt+1 5926 f2c2 5927 f2c2 ;Create DL entry for upper part of sprite 5928 f2c2 5929 f2c2 b4 65 ldy dlend,x ;Get the index to the end of this DL 5930 f2c4 5931 f2c4 ifconst CHECKOVERWRITE 5932 f2c4 c0 4b cpy #DLLASTOBJ 5933 f2c6 f0 21 beq checkcontinueplotsprite2 5934 f2c8 continueplotsprite1a 5935 f2c8 endif 5936 f2c8 5937 f2c8 a5 42 lda temp1 ; graphic data, lo byte 5938 f2ca 91 63 sta (dlpnt),y ;Low byte of data address 5939 f2cc 5940 f2cc ifnconst ATOMICSPRITEUPDATE 5941 f2cc c8 iny 5942 f2cd a5 47 lda temp6 5943 f2cf 91 63 sta (dlpnt),y 5944 f2d1 - else 5945 f2d1 - iny 5946 f2d1 - sty temp8 5947 f2d1 endif 5948 f2d1 5949 f2d1 c8 iny 5950 f2d2 5951 f2d2 a5 46 lda temp5 ;Y position 5952 f2d4 29 07 and #(WZONEHEIGHT - 1) 5953 f2d6 c9 01 cmp #1 ; clear carry if our sprite is just in this zone 5954 f2d8 05 43 ora temp2 ; graphic data, hi byte 5955 f2da 91 63 sta (dlpnt),y 5956 f2dc 5957 f2dc 5958 f2dc c8 iny 5959 f2dd a5 44 lda temp3 ;palette|width 5960 f2df 91 63 sta (dlpnt),y 5961 f2e1 5962 f2e1 c8 iny 5963 f2e2 a5 45 lda temp4 ;Horizontal position 5964 f2e4 91 63 sta (dlpnt),y 5965 f2e6 5966 f2e6 c8 iny 5967 f2e7 94 65 sty dlend,x 5968 f2e9 5969 f2e9 - ifconst ALWAYSTERMINATE 5970 f2e9 - iny 5971 f2e9 - lda #0 5972 f2e9 - sta (dlpnt),y 5973 f2e9 endif 5974 f2e9 5975 f2e9 - ifconst ATOMICSPRITEUPDATE 5976 f2e9 - ldy temp8 5977 f2e9 - lda temp6 5978 f2e9 - sta (dlpnt),y 5979 f2e9 endif 5980 f2e9 5981 f2e9 checkcontinueplotsprite2 5982 f2e9 5983 f2e9 90 38 bcc doneSPDL ;branch if the sprite was fully in the last zone 5984 f2eb 5985 f2eb ;Create DL entry for lower part of sprite 5986 f2eb 5987 f2eb e8 inx ;Next region 5988 f2ec 5989 f2ec ifnconst NOLIMITCHECKING 5990 f2ec e0 18 cpx #WZONECOUNT 5991 f2ee 5992 f2ee 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 5993 f2f0 60 rts 5994 f2f1 continueplotsprite2 5995 f2f1 endif 5996 f2f1 5997 f2f1 bd 48 f6 lda DLPOINTL,x ;Get pointer to next DL 5998 f2f4 - ifconst DOUBLEBUFFER 5999 f2f4 - clc 6000 f2f4 - adc doublebufferdloffset 6001 f2f4 endif ; DOUBLEBUFFER 6002 f2f4 85 63 sta dlpnt 6003 f2f6 bd 30 f6 lda DLPOINTH,x 6004 f2f9 - ifconst DOUBLEBUFFER 6005 f2f9 - adc #0 6006 f2f9 endif ; DOUBLEBUFFER 6007 f2f9 85 64 sta dlpnt+1 6008 f2fb b4 65 ldy dlend,x ;Get the index to the end of this DL 6009 f2fd 6010 f2fd ifconst CHECKOVERWRITE 6011 f2fd c0 4b cpy #DLLASTOBJ 6012 f2ff d0 01 bne continueplotsprite2a 6013 f301 60 rts 6014 f302 continueplotsprite2a 6015 f302 endif 6016 f302 6017 f302 a5 42 lda temp1 ; graphic data, lo byte 6018 f304 91 63 sta (dlpnt),y 6019 f306 6020 f306 ifnconst ATOMICSPRITEUPDATE 6021 f306 c8 iny 6022 f307 a5 47 lda temp6 6023 f309 91 63 sta (dlpnt),y 6024 f30b - else 6025 f30b - iny 6026 f30b - sty temp8 6027 f30b endif 6028 f30b 6029 f30b c8 iny 6030 f30c 6031 f30c a5 46 lda temp5 ;Y position 6032 f30e 0b 07 anc #(WZONEHEIGHT - 1) ; undocumented. A=A&IMM, then move bit 7 into carry 6033 f310 05 43 ora temp2 ; graphic data, hi byte 6034 f312 e9 07 sbc #(WZONEHEIGHT-1) ; start at the DMA hole. -1 because carry is clear 6035 f314 91 63 sta (dlpnt),y 6036 f316 6037 f316 c8 iny 6038 f317 6039 f317 a5 44 lda temp3 ;palette|width 6040 f319 91 63 sta (dlpnt),y 6041 f31b 6042 f31b c8 iny 6043 f31c 6044 f31c a5 45 lda temp4 ;Horizontal position 6045 f31e 91 63 sta (dlpnt),y 6046 f320 6047 f320 c8 iny 6048 f321 94 65 sty dlend,x 6049 f323 6050 f323 - ifconst ALWAYSTERMINATE 6051 f323 - iny 6052 f323 - lda #0 6053 f323 - sta (dlpnt),y 6054 f323 endif 6055 f323 6056 f323 - ifconst ATOMICSPRITEUPDATE 6057 f323 - ldy temp8 6058 f323 - lda temp6 6059 f323 - sta (dlpnt),y 6060 f323 endif 6061 f323 6062 f323 doneSPDL 6063 f323 60 rts 6064 f324 6065 f324 6066 f324 lockzonex 6067 f324 - ifconst ZONELOCKS 6068 f324 - ldy dlend,x 6069 f324 - cpy #DLLASTOBJ 6070 f324 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 6071 f324 - lda DLPOINTL,x 6072 f324 - ifconst DOUBLEBUFFER 6073 f324 - clc 6074 f324 - adc doublebufferdloffset 6075 f324 - endif ; DOUBLEBUFFER 6076 f324 - sta dlpnt 6077 f324 - lda DLPOINTH,x 6078 f324 - ifconst DOUBLEBUFFER 6079 f324 - adc #0 6080 f324 - endif ; DOUBLEBUFFER 6081 f324 - sta dlpnt+1 6082 f324 - iny 6083 f324 - lda #0 6084 f324 - sta (dlpnt),y 6085 f324 - dey 6086 f324 - tya 6087 f324 - ldy #(DLLASTOBJ-1) 6088 f324 - sta (dlpnt),y 6089 f324 - iny 6090 f324 - sty dlend,x 6091 f324 -lockzonexreturn 6092 f324 - rts 6093 f324 endif ; ZONELOCKS 6094 f324 unlockzonex 6095 f324 - ifconst ZONELOCKS 6096 f324 - ldy dlend,x 6097 f324 - cpy #DLLASTOBJ 6098 f324 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 6099 f324 - lda DLPOINTL,x 6100 f324 - ifconst DOUBLEBUFFER 6101 f324 - clc 6102 f324 - adc doublebufferdloffset 6103 f324 - endif ; DOUBLEBUFFER 6104 f324 - sta dlpnt 6105 f324 - lda DLPOINTH,x 6106 f324 - ifconst DOUBLEBUFFER 6107 f324 - adc #0 6108 f324 - endif ; DOUBLEBUFFER 6109 f324 - sta dlpnt+1 6110 f324 - dey 6111 f324 - ;ldy #(DLLASTOBJ-1) 6112 f324 - lda (dlpnt),y 6113 f324 - tay 6114 f324 - sty dlend,x 6115 f324 -unlockzonexreturn 6116 f324 endif ; ZONELOCKS 6117 f324 60 rts 6118 f325 6119 f325 plotcharloop 6120 f325 ; ** read from a data indirectly pointed to from temp8,temp9 6121 f325 ; ** format is: lo_data, hi_data, palette|width, x, y 6122 f325 ; ** format ends with lo_data | hi_data = 0 6123 f325 6124 f325 - ifconst DOUBLEBUFFER 6125 f325 - lda doublebufferstate 6126 f325 - bne skipplotcharloopwait 6127 f325 endif ; DOUBLEBUFFER 6128 f325 - ifconst DEBUGWAITCOLOR 6129 f325 - lda #$61 6130 f325 - sta BACKGRND 6131 f325 endif 6132 f325 plotcharloopwait 6133 f325 a5 4d lda visibleover 6134 f327 d0 fc bne plotcharloopwait 6135 f329 - ifconst DEBUGWAITCOLOR 6136 f329 - lda #0 6137 f329 - sta BACKGRND 6138 f329 endif 6139 f329 skipplotcharloopwait 6140 f329 plotcharlooploop 6141 f329 a0 00 ldy #0 6142 f32b b1 49 lda (temp8),y 6143 f32d 85 42 sta temp1 6144 f32f c8 iny 6145 f330 b1 49 lda (temp8),y 6146 f332 85 43 sta temp2 6147 f334 05 42 ora temp1 6148 f336 d0 01 bne plotcharloopcontinue 6149 f338 ;the pointer=0, so return 6150 f338 60 rts 6151 f339 plotcharloopcontinue 6152 f339 c8 iny 6153 f33a b1 49 lda (temp8),y 6154 f33c 85 44 sta temp3 6155 f33e c8 iny 6156 f33f b1 49 lda (temp8),y 6157 f341 85 45 sta temp4 6158 f343 c8 iny 6159 f344 b1 49 lda (temp8),y 6160 f346 ;sta temp5 ; not needed with our late entry. 6161 f346 20 5f f3 jsr plotcharactersskipentry 6162 f349 a5 49 lda temp8 6163 f34b 18 clc 6164 f34c 69 05 adc #5 6165 f34e 85 49 sta temp8 6166 f350 a5 4a lda temp9 6167 f352 69 00 adc #0 6168 f354 85 4a sta temp9 6169 f356 4c 29 f3 jmp plotcharlooploop 6170 f359 6171 f359 plotcharacters 6172 f359 - ifconst DOUBLEBUFFER 6173 f359 - lda doublebufferstate 6174 f359 - bne skipplotcharacterswait 6175 f359 endif ; DOUBLEBUFFER 6176 f359 - ifconst DEBUGWAITCOLOR 6177 f359 - lda #$41 6178 f359 - sta BACKGRND 6179 f359 endif 6180 f359 plotcharacterswait 6181 f359 a5 4d lda visibleover 6182 f35b d0 fc bne plotcharacterswait 6183 f35d - ifconst DEBUGWAITCOLOR 6184 f35d - sta BACKGRND 6185 f35d endif 6186 f35d skipplotcharacterswait 6187 f35d ;arguments: 6188 f35d ; temp1=lo charactermap 6189 f35d ; temp2=hi charactermap 6190 f35d ; temp3=palette | width byte 6191 f35d ; temp4=x 6192 f35d ; temp5=y 6193 f35d 6194 f35d a5 46 lda temp5 ;Y position 6195 f35f 6196 f35f plotcharactersskipentry 6197 f35f 6198 f35f ;ifconst ZONEHEIGHT 6199 f35f ; if ZONEHEIGHT = 16 6200 f35f ; and #$0F 6201 f35f ; endif 6202 f35f ; if ZONEHEIGHT = 8 6203 f35f ; and #$1F 6204 f35f ; endif 6205 f35f ;else 6206 f35f ; and #$0F 6207 f35f ;endif 6208 f35f 6209 f35f aa tax 6210 f360 bd 48 f6 lda DLPOINTL,x ;Get pointer to DL that the characters are in 6211 f363 - ifconst DOUBLEBUFFER 6212 f363 - clc 6213 f363 - adc doublebufferdloffset 6214 f363 endif ; DOUBLEBUFFER 6215 f363 85 63 sta dlpnt 6216 f365 bd 30 f6 lda DLPOINTH,x 6217 f368 - ifconst DOUBLEBUFFER 6218 f368 - adc #0 6219 f368 endif ; DOUBLEBUFFER 6220 f368 85 64 sta dlpnt+1 6221 f36a 6222 f36a ;Create DL entry for the characters 6223 f36a 6224 f36a b4 65 ldy dlend,x ;Get the index to the end of this DL 6225 f36c 6226 f36c ifconst CHECKOVERWRITE 6227 f36c c0 4b cpy #DLLASTOBJ 6228 f36e d0 01 bne continueplotcharacters 6229 f370 60 rts 6230 f371 continueplotcharacters 6231 f371 endif 6232 f371 6233 f371 a5 42 lda temp1 ; character map data, lo byte 6234 f373 91 63 sta (dlpnt),y ;(1) store low address 6235 f375 6236 f375 c8 iny 6237 f376 ad 06 21 lda charactermode 6238 f379 91 63 sta (dlpnt),y ;(2) store mode 6239 f37b 6240 f37b c8 iny 6241 f37c a5 43 lda temp2 ; character map, hi byte 6242 f37e 91 63 sta (dlpnt),y ;(3) store high address 6243 f380 6244 f380 c8 iny 6245 f381 a5 44 lda temp3 ;palette|width 6246 f383 91 63 sta (dlpnt),y ;(4) store palette|width 6247 f385 6248 f385 c8 iny 6249 f386 a5 45 lda temp4 ;Horizontal position 6250 f388 91 63 sta (dlpnt),y ;(5) store horizontal position 6251 f38a 6252 f38a c8 iny 6253 f38b 94 65 sty dlend,x ; save display list end byte 6254 f38d 60 rts 6255 f38e 6256 f38e 6257 f38e - ifconst plotvalueonscreen 6258 f38e -plotcharacterslive 6259 f38e - ; a version of plotcharacters that draws live and minimally disrupts the screen... 6260 f38e - 6261 f38e - ;arguments: 6262 f38e - ; temp1=lo charactermap 6263 f38e - ; temp2=hi charactermap 6264 f38e - ; temp3=palette | width byte 6265 f38e - ; temp4=x 6266 f38e - ; temp5=y 6267 f38e - 6268 f38e - lda temp5 ;Y position 6269 f38e - 6270 f38e - tax 6271 f38e - lda DLPOINTL,x ;Get pointer to DL that the characters are in 6272 f38e - ifconst DOUBLEBUFFER 6273 f38e - clc 6274 f38e - adc doublebufferdloffset 6275 f38e - endif ; DOUBLEBUFFER 6276 f38e - sta dlpnt 6277 f38e - lda DLPOINTH,x 6278 f38e - ifconst DOUBLEBUFFER 6279 f38e - adc #0 6280 f38e - endif ; DOUBLEBUFFER 6281 f38e - sta dlpnt+1 6282 f38e - 6283 f38e - ;Create DL entry for the characters 6284 f38e - 6285 f38e - ldy dlend,x ;Get the index to the end of this DL 6286 f38e - 6287 f38e - ifconst CHECKOVERWRITE 6288 f38e - cpy #DLLASTOBJ 6289 f38e - bne continueplotcharacterslive 6290 f38e - rts 6291 f38e -continueplotcharacterslive 6292 f38e - endif 6293 f38e - 6294 f38e - lda temp1 ; character map data, lo byte 6295 f38e - sta (dlpnt),y ;(1) store low address 6296 f38e - 6297 f38e - iny 6298 f38e - ; we don't add the second byte yet, since the charmap could briefly 6299 f38e - ; render without a proper character map address, width, or position. 6300 f38e - lda charactermode 6301 f38e - sta (dlpnt),y ;(2) store mode 6302 f38e - 6303 f38e - iny 6304 f38e - lda temp2 ; character map, hi byte 6305 f38e - sta (dlpnt),y ;(3) store high address 6306 f38e - 6307 f38e - iny 6308 f38e - lda temp3 ;palette|width 6309 f38e - sta (dlpnt),y ;(4) store palette|width 6310 f38e - 6311 f38e - iny 6312 f38e - lda temp4 ;Horizontal position 6313 f38e - sta (dlpnt),y ;(5) store horizontal position 6314 f38e - 6315 f38e - iny 6316 f38e - sty dlend,x ; save display list end byte 6317 f38e - 6318 f38e - rts 6319 f38e endif ;plotcharacterslive 6320 f38e 6321 f38e ifconst USED_PLOTVALUE 6322 f38e plotvalue 6323 f38e ; calling 7800basic command: 6324 f38e ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 6325 f38e ; ...displays the variable as BCD digits 6326 f38e ; 6327 f38e ; asm sub arguments: 6328 f38e ; temp1=lo charactermap 6329 f38e ; temp2=hi charactermap 6330 f38e ; temp3=palette | width byte 6331 f38e ; temp4=x 6332 f38e ; temp5=y 6333 f38e ; temp6=number of digits 6334 f38e ; temp7=lo variable 6335 f38e ; temp8=hi variable 6336 f38e ; temp9=character mode 6337 f38e 6338 f38e 00 47 plotdigitcount = temp6 6339 f38e 6340 f38e - ifconst ZONELOCKS 6341 f38e - ldx temp5 6342 f38e - ldy dlend,x 6343 f38e - cpy #DLLASTOBJ 6344 f38e - bne carryonplotvalue 6345 f38e - rts 6346 f38e -carryonplotvalue 6347 f38e endif 6348 f38e 6349 f38e a9 00 lda #0 6350 f390 a8 tay 6351 f391 ae ad 01 ldx valbufend 6352 f394 6353 f394 a5 47 lda plotdigitcount 6354 f396 29 01 and #1 6355 f398 f0 07 beq pvnibble2char 6356 f39a a9 00 lda #0 6357 f39c 9d 00 20 sta VALBUFFER,x ; just in case we skip this digit 6358 f39f f0 11 beq pvnibble2char_skipnibble 6359 f3a1 6360 f3a1 pvnibble2char 6361 f3a1 ; high nibble... 6362 f3a1 b1 48 lda (temp7),y 6363 f3a3 29 f0 and #$f0 6364 f3a5 4a lsr 6365 f3a6 4a lsr 6366 f3a7 4a lsr 6367 f3a8 ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 6368 f3a8 4a lsr 6369 f3a9 endif 6370 f3a9 6371 f3a9 18 clc 6372 f3aa 65 42 adc temp1 ; add the offset to character graphics to our value 6373 f3ac 9d 00 20 sta VALBUFFER,x 6374 f3af e8 inx 6375 f3b0 c6 47 dec plotdigitcount 6376 f3b2 6377 f3b2 pvnibble2char_skipnibble 6378 f3b2 ; low nibble... 6379 f3b2 b1 48 lda (temp7),y 6380 f3b4 29 0f and #$0f 6381 f3b6 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 6382 f3b6 - asl 6383 f3b6 endif 6384 f3b6 18 clc 6385 f3b7 65 42 adc temp1 ; add the offset to character graphics to our value 6386 f3b9 9d 00 20 sta VALBUFFER,x 6387 f3bc e8 inx 6388 f3bd c8 iny 6389 f3be 6390 f3be c6 47 dec plotdigitcount 6391 f3c0 d0 df bne pvnibble2char 6392 f3c2 6393 f3c2 ;point to the start of our valuebuffer 6394 f3c2 18 clc 6395 f3c3 a9 00 lda #VALBUFFER 6399 f3cc 69 00 adc #0 6400 f3ce 85 43 sta temp2 6401 f3d0 6402 f3d0 ;advance valbufend to the end of our value buffer 6403 f3d0 8e ad 01 stx valbufend 6404 f3d3 6405 f3d3 ifnconst plotvalueonscreen 6406 f3d3 4c 59 f3 jmp plotcharacters 6407 f3d6 - else 6408 f3d6 - jmp plotcharacterslive 6409 f3d6 endif 6410 f3d6 6411 f3d6 endif ; USED_PLOTVALUE 6412 f3d6 6413 f3d6 6414 f3d6 - ifconst USED_PLOTVALUEEXTRA 6415 f3d6 -plotdigitcount = temp6 6416 f3d6 -plotvalueextra 6417 f3d6 - ; calling 7800basic command: 6418 f3d6 - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 6419 f3d6 - ; ...displays the variable as BCD digits 6420 f3d6 - ; 6421 f3d6 - ; asm sub arguments: 6422 f3d6 - ; temp1=lo charactermap 6423 f3d6 - ; temp2=hi charactermap 6424 f3d6 - ; temp3=palette | width byte 6425 f3d6 - ; temp4=x 6426 f3d6 - ; temp5=y 6427 f3d6 - ; temp6=number of digits 6428 f3d6 - ; temp7=lo variable 6429 f3d6 - ; temp8=hi variable 6430 f3d6 - 6431 f3d6 - lda #0 6432 f3d6 - tay 6433 f3d6 - ldx valbufend 6434 f3d6 - ifnconst plotvalueonscreen 6435 f3d6 - sta VALBUFFER,x 6436 f3d6 - endif 6437 f3d6 - 6438 f3d6 - lda plotdigitcount 6439 f3d6 - and #1 6440 f3d6 - 6441 f3d6 - bne pvnibble2char_skipnibbleextra 6442 f3d6 - 6443 f3d6 -pvnibble2charextra 6444 f3d6 - ; high nibble... 6445 f3d6 - lda (temp7),y 6446 f3d6 - and #$f0 6447 f3d6 - lsr 6448 f3d6 - lsr 6449 f3d6 - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 6450 f3d6 - lsr 6451 f3d6 - endif 6452 f3d6 - clc 6453 f3d6 - adc temp1 ; add the offset to character graphics to our value 6454 f3d6 - sta VALBUFFER,x 6455 f3d6 - inx 6456 f3d6 - 6457 f3d6 - ; second half of the digit 6458 f3d6 - clc 6459 f3d6 - adc #1 6460 f3d6 - sta VALBUFFER,x 6461 f3d6 - inx 6462 f3d6 - 6463 f3d6 -pvnibble2char_skipnibbleextra 6464 f3d6 - ; low nibble... 6465 f3d6 - lda (temp7),y 6466 f3d6 - and #$0f 6467 f3d6 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 6468 f3d6 - asl 6469 f3d6 - endif 6470 f3d6 - asl 6471 f3d6 - 6472 f3d6 - clc 6473 f3d6 - adc temp1 ; add the offset to character graphics to our value 6474 f3d6 - sta VALBUFFER,x 6475 f3d6 - inx 6476 f3d6 - 6477 f3d6 - clc 6478 f3d6 - adc #1 6479 f3d6 - sta VALBUFFER,x 6480 f3d6 - inx 6481 f3d6 - iny 6482 f3d6 - 6483 f3d6 - dec plotdigitcount 6484 f3d6 - bne pvnibble2charextra 6485 f3d6 - 6486 f3d6 - ;point to the start of our valuebuffer 6487 f3d6 - clc 6488 f3d6 - lda #VALBUFFER 6492 f3d6 - adc #0 6493 f3d6 - sta temp2 6494 f3d6 - 6495 f3d6 - ;advance valbufend to the end of our value buffer 6496 f3d6 - stx valbufend 6497 f3d6 - 6498 f3d6 - ifnconst plotvalueonscreen 6499 f3d6 - jmp plotcharacters 6500 f3d6 - else 6501 f3d6 - jmp plotcharacterslive 6502 f3d6 - endif 6503 f3d6 endif ; USED_PLOTVALUEEXTRA 6504 f3d6 6505 f3d6 boxcollision 6506 f3d6 ; the worst case cycle-time for the code below is 43 cycles. 6507 f3d6 ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 6508 f3d6 6509 f3d6 ;__boxx1 = accumulator 6510 f3d6 ;__boxy1 = y 6511 f3d6 00 44 __boxw1 = temp3 6512 f3d6 00 45 __boxh1 = temp4 6513 f3d6 6514 f3d6 00 46 __boxx2 = temp5 6515 f3d6 00 47 __boxy2 = temp6 6516 f3d6 00 48 __boxw2 = temp7 6517 f3d6 00 49 __boxh2 = temp8 6518 f3d6 6519 f3d6 DoXCollisionCheck 6520 f3d6 ;lda __boxx1 ; skipped. already in the accumulator 6521 f3d6 c5 46 cmp __boxx2 ;3 6522 f3d8 b0 07 bcs X1isbiggerthanX2 ;2/3 6523 f3da X2isbiggerthanX1 6524 f3da ; carry is clear 6525 f3da 65 44 adc __boxw1 ;3 6526 f3dc c5 46 cmp __boxx2 ;3 6527 f3de b0 08 bcs DoYCollisionCheck ;3/2 6528 f3e0 60 rts ;6 - carry clear, no collision 6529 f3e1 X1isbiggerthanX2 6530 f3e1 18 clc ;2 6531 f3e2 e5 48 sbc __boxw2 ;3 6532 f3e4 c5 46 cmp __boxx2 ;3 6533 f3e6 b0 13 bcs noboxcollision ;3/2 6534 f3e8 DoYCollisionCheck 6535 f3e8 98 tya ; 2 ; use to be "lda __boxy1" 6536 f3e9 c5 47 cmp __boxy2 ;3 6537 f3eb b0 05 bcs Y1isbiggerthanY2 ;3/2 6538 f3ed Y2isbiggerthanY1 6539 f3ed ; carry is clear 6540 f3ed 65 45 adc __boxh1 ;3 6541 f3ef c5 47 cmp __boxy2 ;3 6542 f3f1 60 rts ;6 6543 f3f2 Y1isbiggerthanY2 6544 f3f2 18 clc ;2 6545 f3f3 e5 49 sbc __boxh2 ;3 6546 f3f5 c5 47 cmp __boxy2 ;3 6547 f3f7 b0 02 bcs noboxcollision ;3/2 6548 f3f9 yesboxcollision 6549 f3f9 38 sec ;2 6550 f3fa 60 rts ;6 6551 f3fb noboxcollision 6552 f3fb 18 clc ;2 6553 f3fc 60 rts ;6 6554 f3fd 6555 f3fd randomize 6556 f3fd a5 40 lda rand 6557 f3ff 4a lsr 6558 f400 26 41 rol rand16 6559 f402 90 02 bcc noeor 6560 f404 49 b4 eor #$B4 6561 f406 noeor 6562 f406 85 40 sta rand 6563 f408 45 41 eor rand16 6564 f40a 60 rts 6565 f40b 6566 f40b ; *** bcd conversion routine courtesy Omegamatrix 6567 f40b ; *** http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 6568 f40b converttobcd 6569 f40b ;value to convert is in the accumulator 6570 f40b 85 42 sta temp1 6571 f40d 4a lsr 6572 f40e 65 42 adc temp1 6573 f410 6a ror 6574 f411 4a lsr 6575 f412 4a lsr 6576 f413 65 42 adc temp1 6577 f415 6a ror 6578 f416 65 42 adc temp1 6579 f418 6a ror 6580 f419 4a lsr 6581 f41a 29 3c and #$3C 6582 f41c 85 43 sta temp2 6583 f41e 4a lsr 6584 f41f 65 43 adc temp2 6585 f421 65 42 adc temp1 6586 f423 60 rts ; return the result in the accumulator 6587 f424 6588 f424 ; Y and A contain multiplicands, result in A 6589 f424 mul8 6590 f424 84 42 sty temp1 6591 f426 85 43 sta temp2 6592 f428 a9 00 lda #0 6593 f42a reptmul8 6594 f42a 46 43 lsr temp2 6595 f42c 90 03 bcc skipmul8 6596 f42e 18 clc 6597 f42f 65 42 adc temp1 6598 f431 ;bcs donemul8 might save cycles? 6599 f431 skipmul8 6600 f431 ;beq donemul8 might save cycles? 6601 f431 06 42 asl temp1 6602 f433 d0 f5 bne reptmul8 6603 f435 donemul8 6604 f435 60 rts 6605 f436 6606 f436 div8 6607 f436 ; A=numerator Y=denominator, result in A 6608 f436 c0 02 cpy #2 6609 f438 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 6610 f43a 84 42 sty temp1 6611 f43c a0 ff ldy #$ff 6612 f43e div8loop 6613 f43e e5 42 sbc temp1 6614 f440 c8 iny 6615 f441 b0 fb bcs div8loop 6616 f443 div8end 6617 f443 98 tya 6618 f444 ; result in A 6619 f444 60 rts 6620 f445 6621 f445 ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 6622 f445 mul16 6623 f445 84 42 sty temp1 6624 f447 85 43 sta temp2 6625 f449 6626 f449 a9 00 lda #0 6627 f44b a2 08 ldx #8 6628 f44d 46 42 lsr temp1 6629 f44f mul16_1 6630 f44f 90 03 bcc mul16_2 6631 f451 18 clc 6632 f452 65 43 adc temp2 6633 f454 mul16_2 6634 f454 6a ror 6635 f455 66 42 ror temp1 6636 f457 ca dex 6637 f458 d0 f5 bne mul16_1 6638 f45a 85 43 sta temp2 6639 f45c 60 rts 6640 f45d 6641 f45d ; div int/int 6642 f45d ; numerator in A, denom in temp1 6643 f45d ; returns with quotient in A, remainder in temp1 6644 f45d div16 6645 f45d 85 43 sta temp2 6646 f45f 84 42 sty temp1 6647 f461 a9 00 lda #0 6648 f463 a2 08 ldx #8 6649 f465 06 43 asl temp2 6650 f467 div16_1 6651 f467 2a rol 6652 f468 c5 42 cmp temp1 6653 f46a 90 02 bcc div16_2 6654 f46c e5 42 sbc temp1 6655 f46e div16_2 6656 f46e 26 43 rol temp2 6657 f470 ca dex 6658 f471 d0 f4 bne div16_1 6659 f473 85 42 sta temp1 6660 f475 a5 43 lda temp2 6661 f477 60 rts 6662 f478 6663 f478 - ifconst bankswitchmode 6664 f478 -BS_jsr 6665 f478 - ifconst MCPDEVCART 6666 f478 - ora #$18 6667 f478 - sta $3000 6668 f478 - else 6669 f478 - sta $8000 6670 f478 - endif 6671 f478 - pla 6672 f478 - tax 6673 f478 - pla 6674 f478 - rts 6675 f478 - 6676 f478 -BS_return 6677 f478 - pla ; bankswitch bank 6678 f478 - ifconst BANKRAM 6679 f478 - sta currentbank 6680 f478 - ora currentrambank 6681 f478 - endif 6682 f478 - ifconst MCPDEVCART 6683 f478 - ora #$18 6684 f478 - sta $3000 6685 f478 - else 6686 f478 - sta $8000 6687 f478 - endif 6688 f478 - pla ; bankswitch $0 flag 6689 f478 - rts 6690 f478 endif 6691 f478 6692 f478 checkselectswitch 6693 f478 ad 82 02 lda SWCHB ; first check the real select switch... 6694 f47b 29 02 and #%00000010 6695 f47d ifnconst MOUSESUPPORT 6696 f47d f0 05 beq checkselectswitchreturn ; switch is pressed 6697 f47f ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 6698 f482 29 b0 and #%10110000 ; R_DU 6699 f484 endif ; MOUSESUPPORT 6700 f484 checkselectswitchreturn 6701 f484 60 rts 6702 f485 6703 f485 checkresetswitch 6704 f485 ad 82 02 lda SWCHB ; first check the real reset switch... 6705 f488 29 01 and #%00000001 6706 f48a ifnconst MOUSESUPPORT 6707 f48a f0 05 beq checkresetswitchreturn ; switch is pressed 6708 f48c ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 6709 f48f 29 70 and #%01110000 ; _LDU 6710 f491 endif ; MOUSESUPPORT 6711 f491 checkresetswitchreturn 6712 f491 60 rts 6713 f492 6714 f492 - ifconst FINESCROLLENABLED 6715 f492 -finescrolldlls 6716 f492 - ldx temp1 ; first DLL index x3 6717 f492 - lda DLLMEM,x 6718 f492 - and #%11110000 6719 f492 - ora finescrolly 6720 f492 - sta DLLMEM,x 6721 f492 - 6722 f492 - ldx temp2 ; last DLL index x3 6723 f492 - lda DLLMEM,x 6724 f492 - and #%11110000 6725 f492 - ora finescrolly 6726 f492 - eor #(WZONEHEIGHT-1) 6727 f492 - sta DLLMEM,x 6728 f492 - rts 6729 f492 endif ; FINESCROLLENABLED 6730 f492 6731 f492 - ifconst USED_ADJUSTVISIBLE 6732 f492 -adjustvisible 6733 f492 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 6734 f492 - jsr waitforvblankstart ; ensure vblank just started 6735 f492 - ldx visibleDLLstart 6736 f492 -findfirstinterrupt 6737 f492 - lda DLLMEM,x 6738 f492 - bmi foundfirstinterrupt 6739 f492 - inx 6740 f492 - inx 6741 f492 - inx 6742 f492 - bne findfirstinterrupt 6743 f492 -foundfirstinterrupt 6744 f492 - and #%01111111 ; clear the interrupt bit 6745 f492 - sta DLLMEM,x 6746 f492 - ifconst DOUBLEBUFFER 6747 f492 - sta DLLMEM+DBOFFSET,x 6748 f492 - endif ; DOUBLEBUFFER 6749 f492 - ldx overscanDLLstart 6750 f492 -findlastinterrupt 6751 f492 - lda DLLMEM,x 6752 f492 - bmi foundlastinterrupt 6753 f492 - dex 6754 f492 - dex 6755 f492 - dex 6756 f492 - bne findlastinterrupt 6757 f492 -foundlastinterrupt 6758 f492 - and #%01111111 ; clear the interrupt bit 6759 f492 - sta DLLMEM,x 6760 f492 - ifconst DOUBLEBUFFER 6761 f492 - sta DLLMEM+DBOFFSET,x 6762 f492 - endif ; DOUBLEBUFFER 6763 f492 - ;now we need to set the new interrupts 6764 f492 - clc 6765 f492 - lda temp1 6766 f492 - adc visibleDLLstart 6767 f492 - tax 6768 f492 - lda DLLMEM,x 6769 f492 - ora #%10000000 6770 f492 - sta DLLMEM,x 6771 f492 - ifconst DOUBLEBUFFER 6772 f492 - sta DLLMEM+DBOFFSET,x 6773 f492 - endif ; DOUBLEBUFFER 6774 f492 - clc 6775 f492 - lda temp2 6776 f492 - adc visibleDLLstart 6777 f492 - tax 6778 f492 - lda DLLMEM,x 6779 f492 - ora #%10000000 6780 f492 - sta DLLMEM,x 6781 f492 - ifconst DOUBLEBUFFER 6782 f492 - sta DLLMEM+DBOFFSET,x 6783 f492 - endif ; DOUBLEBUFFER 6784 f492 - jsr vblankresync 6785 f492 - rts 6786 f492 endif ; USED_ADJUSTVISIBLE 6787 f492 6788 f492 vblankresync 6789 f492 20 30 f5 jsr waitforvblankstart ; ensure vblank just started 6790 f495 a9 00 lda #0 6791 f497 85 4d sta visibleover 6792 f499 a9 03 lda #3 6793 f49b 8d b2 01 sta interruptindex 6794 f49e 60 rts 6795 f49f 6796 f49f createallgamedlls 6797 f49f a2 00 ldx #0 6798 f4a1 a9 19 lda #NVLINES 6799 f4a3 ac 09 21 ldy paldetected 6800 f4a6 f0 03 beq skipcreatePALpadding 6801 f4a8 18 clc 6802 f4a9 69 15 adc #21 6803 f4ab skipcreatePALpadding 6804 f4ab 20 e0 f4 jsr createnonvisibledlls 6805 f4ae 8e 3c 21 stx visibleDLLstart 6806 f4b1 20 11 f5 jsr createvisiblezones 6807 f4b4 8e 3d 21 stx overscanDLLstart 6808 f4b7 createallgamedllscontinue 6809 f4b7 a9 50 lda #(NVLINES+55) ; extras for PAL 6810 f4b9 20 e0 f4 jsr createnonvisibledlls 6811 f4bc 6812 f4bc ae 3c 21 ldx visibleDLLstart 6813 f4bf bd 00 18 lda DLLMEM,x 6814 f4c2 09 80 ora #%10000000 ; NMI 1 - start of visible screen 6815 f4c4 9d 00 18 sta DLLMEM,x 6816 f4c7 - ifconst DOUBLEBUFFER 6817 f4c7 - sta DLLMEM+DBOFFSET,x 6818 f4c7 endif ; DOUBLEBUFFER 6819 f4c7 6820 f4c7 ae 3d 21 ldx overscanDLLstart 6821 f4ca bd 00 18 lda DLLMEM,x 6822 f4cd 09 83 ora #%10000011 ; NMI 2 - end of visible screen 6823 f4cf 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 6824 f4d1 9d 00 18 sta DLLMEM,x 6825 f4d4 - ifconst DOUBLEBUFFER 6826 f4d4 - sta DLLMEM+DBOFFSET,x 6827 f4d4 endif ; DOUBLEBUFFER 6828 f4d4 6829 f4d4 e8 inx 6830 f4d5 e8 inx 6831 f4d6 e8 inx 6832 f4d7 6833 f4d7 bd 00 18 lda DLLMEM,x 6834 f4da 09 80 ora #%10000000 ; NMI 3 - deeper overscan 6835 f4dc 9d 00 18 sta DLLMEM,x 6836 f4df - ifconst DOUBLEBUFFER 6837 f4df - sta DLLMEM+DBOFFSET,x 6838 f4df endif ; DOUBLEBUFFER 6839 f4df 6840 f4df 60 rts 6841 f4e0 6842 f4e0 createnonvisibledlls 6843 f4e0 85 42 sta temp1 6844 f4e2 4a lsr 6845 f4e3 4a lsr 6846 f4e4 4a lsr 6847 f4e5 4a lsr ; /16 6848 f4e6 f0 09 beq skipcreatenonvisibledlls1loop 6849 f4e8 a8 tay 6850 f4e9 createnonvisibledlls1loop 6851 f4e9 a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 6852 f4eb 20 00 f5 jsr createblankdllentry 6853 f4ee 88 dey 6854 f4ef d0 f8 bne createnonvisibledlls1loop 6855 f4f1 skipcreatenonvisibledlls1loop 6856 f4f1 a5 42 lda temp1 6857 f4f3 29 0f and #%00001111 6858 f4f5 f0 08 beq createnonvisibledllsreturn 6859 f4f7 38 sec 6860 f4f8 e9 01 sbc #1 6861 f4fa 09 40 ora #%01000000 6862 f4fc 20 00 f5 jsr createblankdllentry 6863 f4ff createnonvisibledllsreturn 6864 f4ff 60 rts 6865 f500 6866 f500 createblankdllentry 6867 f500 9d 00 18 sta DLLMEM,x 6868 f503 - ifconst DOUBLEBUFFER 6869 f503 - sta DLLMEM+DBOFFSET,x 6870 f503 endif ; DOUBLEBUFFER 6871 f503 e8 inx 6872 f504 a9 21 lda #$21 ; blank 6873 f506 9d 00 18 sta DLLMEM,x 6874 f509 - ifconst DOUBLEBUFFER 6875 f509 - sta DLLMEM+DBOFFSET,x 6876 f509 endif ; DOUBLEBUFFER 6877 f509 e8 inx 6878 f50a a9 00 lda #$00 6879 f50c 9d 00 18 sta DLLMEM,x 6880 f50f - ifconst DOUBLEBUFFER 6881 f50f - sta DLLMEM+DBOFFSET,x 6882 f50f endif ; DOUBLEBUFFER 6883 f50f e8 inx 6884 f510 60 rts 6885 f511 6886 f511 createvisiblezones 6887 f511 a0 00 ldy #0 6888 f513 createvisiblezonesloop 6889 f513 b9 60 f6 lda.w DLHEIGHT,y 6890 f516 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 6891 f518 9d 00 18 sta DLLMEM,x 6892 f51b - ifconst DOUBLEBUFFER 6893 f51b - sta DLLMEM+DBOFFSET,x 6894 f51b endif ; DOUBLEBUFFER 6895 f51b e8 inx 6896 f51c b9 30 f6 lda DLPOINTH,y 6897 f51f 9d 00 18 sta DLLMEM,x 6898 f522 - ifconst DOUBLEBUFFER 6899 f522 - sta DLLMEM+DBOFFSET,x 6900 f522 endif ; DOUBLEBUFFER 6901 f522 e8 inx 6902 f523 b9 48 f6 lda DLPOINTL,y 6903 f526 9d 00 18 sta DLLMEM,x 6904 f529 - ifconst DOUBLEBUFFER 6905 f529 - clc 6906 f529 - adc #DOUBLEBUFFEROFFSET 6907 f529 - sta DLLMEM+DBOFFSET,x 6908 f529 - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 6909 f529 - inc DLLMEM+DBOFFSET-1,x 6910 f529 -skiphidoublebufferadjust 6911 f529 endif ; DOUBLEBUFFER 6912 f529 e8 inx 6913 f52a c8 iny 6914 f52b c0 18 cpy #WZONECOUNT 6915 f52d d0 e4 bne createvisiblezonesloop 6916 f52f 60 rts 6917 f530 6918 f530 waitforvblankstart 6919 f530 visibleoverwait 6920 f530 24 28 BIT MSTAT 6921 f532 10 fc bpl visibleoverwait 6922 f534 vblankstartwait 6923 f534 24 28 BIT MSTAT 6924 f536 30 fc bmi vblankstartwait 6925 f538 60 rts 6926 f539 6927 f539 - ifconst DOUBLEBUFFER 6928 f539 -flipdisplaybufferreturn 6929 f539 - rts 6930 f539 -flipdisplaybuffer 6931 f539 - lda doublebufferstate 6932 f539 - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 6933 f539 - 6934 f539 - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 6935 f539 - 6936 f539 - lda doublebufferstate 6937 f539 - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 6938 f539 - tax 6939 f539 - 6940 f539 - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 6941 f539 - 6942 f539 -flipdisplaybufferwait1 6943 f539 - lda visibleover 6944 f539 - beq flipdisplaybufferwait1 6945 f539 - 6946 f539 -flipdisplaybufferwait 6947 f539 - lda visibleover 6948 f539 - bne flipdisplaybufferwait 6949 f539 - 6950 f539 - lda doublebufferminimumframetarget 6951 f539 - beq skipminimumframecode 6952 f539 - lda doublebufferminimumframeindex 6953 f539 - bne flipdisplaybufferwait1 6954 f539 - lda doublebufferminimumframetarget 6955 f539 - sta doublebufferminimumframeindex 6956 f539 -skipminimumframecode 6957 f539 - 6958 f539 - lda DLLMEMLutHi,x 6959 f539 - sta DPPH 6960 f539 - lda DLLMEMLutLo,x 6961 f539 - sta DPPL 6962 f539 - 6963 f539 - lda NewPageflipstate,x 6964 f539 - sta doublebufferstate 6965 f539 - lda NewPageflipoffset,x 6966 f539 - sta doublebufferdloffset 6967 f539 - 6968 f539 - lda doublebufferbufferdirty 6969 f539 - beq flipdisplaybufferreturn 6970 f539 - 6971 f539 - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 6972 f539 - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 6973 f539 - ; from the displayed buffer to the working buffer... 6974 f539 - 6975 f539 - lda doublebufferdloffset 6976 f539 - eor #DOUBLEBUFFEROFFSET 6977 f539 - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 6978 f539 - 6979 f539 - ldx #(WZONECOUNT-1) 6980 f539 -copybufferzoneloop 6981 f539 - 6982 f539 - lda DLPOINTL,x 6983 f539 - clc 6984 f539 - adc doublebufferdloffset 6985 f539 - sta temp1 6986 f539 - lda DLPOINTH,x 6987 f539 - adc #0 6988 f539 - sta temp2 6989 f539 - 6990 f539 - lda DLPOINTL,x 6991 f539 - clc 6992 f539 - adc temp6 6993 f539 - sta temp3 6994 f539 - lda DLPOINTH,x 6995 f539 - adc #0 6996 f539 - sta temp4 6997 f539 - 6998 f539 - lda dlendsave,x 6999 f539 - tay 7000 f539 -copybuffercharsloop 7001 f539 - lda (temp3),y 7002 f539 - sta (temp1),y 7003 f539 - dey 7004 f539 - bpl copybuffercharsloop 7005 f539 - dex 7006 f539 - bpl copybufferzoneloop 7007 f539 - lda #0 7008 f539 - sta doublebufferbufferdirty 7009 f539 - rts 7010 f539 - 7011 f539 -doublebufferoff 7012 f539 - lda #1 7013 f539 - sta doublebufferstate 7014 f539 - jsr flipdisplaybuffer 7015 f539 - lda #0 7016 f539 - sta doublebufferstate 7017 f539 - sta doublebufferdloffset 7018 f539 - rts 7019 f539 - 7020 f539 -DLLMEMLutLo 7021 f539 - .byte DLLMEM,>(DLLMEM+DBOFFSET) 7024 f539 -NewPageflipstate 7025 f539 - .byte 3,1 7026 f539 -NewPageflipoffset 7027 f539 - .byte DOUBLEBUFFEROFFSET,0 7028 f539 - 7029 f539 endif ; DOUBLEBUFFER 7030 f539 7031 f539 - ifconst MOUSESUPPORT 7032 f539 - 7033 f539 -rotationalcompare 7034 f539 - ; old = 00 01 10 11 7035 f539 - .byte $00, $01, $ff, $00 ; new=00 7036 f539 - .byte $ff, $00, $00, $01 ; new=01 7037 f539 - .byte $01, $00, $00, $ff ; new=10 7038 f539 - .byte $00, $ff, $01, $00 ; new=11 7039 f539 - 7040 f539 - ; 0000YyXx st mouse 7041 f539 - 7042 f539 - ; 0000xyXY amiga mouse 7043 f539 - 7044 f539 - ifconst MOUSEXONLY 7045 f539 -amigatoataribits ; swap bits 1 and 4... 7046 f539 - .byte %0000, %0000, %0010, %0010 7047 f539 - .byte %0000, %0000, %0010, %0010 7048 f539 - .byte %0001, %0001, %0011, %0011 7049 f539 - .byte %0001, %0001, %0011, %0011 7050 f539 - 7051 f539 - ; null change bits 7052 f539 - .byte %0000, %0001, %0010, %0011 7053 f539 - .byte %0000, %0001, %0010, %0011 7054 f539 - .byte %0000, %0001, %0010, %0011 7055 f539 - .byte %0000, %0001, %0010, %0011 7056 f539 - 7057 f539 - else ; !MOUSEXONLY 7058 f539 - 7059 f539 -amigatoataribits ; swap bits 1 and 4... 7060 f539 - .byte %0000, %1000, %0010, %1010 7061 f539 - .byte %0100, %1100, %0110, %1110 7062 f539 - .byte %0001, %1001, %0011, %1011 7063 f539 - .byte %0101, %1101, %0111, %1111 7064 f539 - ; null change bits 7065 f539 - .byte %0000, %0001, %0010, %0011 7066 f539 - .byte %0100, %0101, %0110, %0111 7067 f539 - .byte %1000, %1001, %1010, %1011 7068 f539 - .byte %1100, %1101, %1110, %1111 7069 f539 - endif ; !MOUSEXONLY 7070 f539 - 7071 f539 endif ; MOUSESUPPORT 7072 f539 7073 f539 mouse0update 7074 f539 - ifconst MOUSE0SUPPORT 7075 f539 - 7076 f539 -mousetableselect = inttemp2 7077 f539 -mousexdelta = inttemp3 7078 f539 -mouseydelta = inttemp4 7079 f539 -lastSWCHA = inttemp6 7080 f539 - 7081 f539 - ; 0000YyXx st mouse 7082 f539 - ; 0000xyXY amiga mouse 7083 f539 - 7084 f539 - lda #$ff 7085 f539 - sta lastSWCHA 7086 f539 - 7087 f539 - ldy port0control 7088 f539 - 7089 f539 - lda #%00010000 7090 f539 - cpy #9 ; AMIGA? 7091 f539 - bne skipamigabitsfix0 7092 f539 - lda #0 7093 f539 -skipamigabitsfix0 7094 f539 - sta mousetableselect 7095 f539 - ifconst DRIVINGBOOST 7096 f539 - cpy #6 ; DRIVING? 7097 f539 - bne skipdriving0setup 7098 f539 - ; swap mousex0 and mousey0. mousex seen by the 7800basic program 7099 f539 - ; trails the actual mousex0, so we can smoothly interpolate toward 7100 f539 - ; the actual position. This actual position is stored in mousey0 7101 f539 - ; after the driver has run. 7102 f539 - ldx mousex0 7103 f539 - lda mousey0 7104 f539 - stx mousey0 7105 f539 - sta mousex0 7106 f539 -skipdriving0setup 7107 f539 - endif ; DRIVINGBOOST 7108 f539 - 7109 f539 - lda #0 7110 f539 - sta mousexdelta 7111 f539 - sta mouseydelta 7112 f539 - 7113 f539 - ifnconst MOUSETIME 7114 f539 - ifnconst MOUSEXONLY 7115 f539 - lda #180 ; minimum for x+y 7116 f539 - else 7117 f539 - lda #100 ; minimum for just x 7118 f539 - endif 7119 f539 - else 7120 f539 - lda #MOUSETIME 7121 f539 - endif 7122 f539 - jsr SETTIM64T ; INTIM is in Y 7123 f539 - 7124 f539 -mouse0updateloop 7125 f539 - lda SWCHA 7126 f539 - asr #%11110000 ; Undocumented. A = A & #IMM, then LSR A. 7127 f539 - cmp lastSWCHA 7128 f539 - beq mouse0loopcondition 7129 f539 - sta lastSWCHA 7130 f539 - lsr 7131 f539 - lsr 7132 f539 - lsr 7133 f539 - 7134 f539 - ora mousetableselect ; atari/amiga decoding table selection 7135 f539 - 7136 f539 - ; st mice encode on different bits/joystick-lines than amiga mice... 7137 f539 - ; 0000YyXx st mouse 7138 f539 - ; 0000xyXY amiga mouse 7139 f539 - ; ...so can shuffle the amiga bits to reuse the st driver. 7140 f539 - tay 7141 f539 - lax amigatoataribits,y 7142 f539 - 7143 f539 - ifnconst MOUSEXONLY 7144 f539 - ; first the Y... 7145 f539 - and #%00001100 7146 f539 - ora mousecodey0 7147 f539 - tay 7148 f539 - lda rotationalcompare,y 7149 f539 - clc 7150 f539 - adc mouseydelta 7151 f539 - sta mouseydelta 7152 f539 - tya 7153 f539 - lsr 7154 f539 - lsr 7155 f539 - sta mousecodey0 7156 f539 - txa 7157 f539 - ; ...then the X... 7158 f539 - and #%00000011 7159 f539 - tax 7160 f539 - endif ; !MOUSEXONLY 7161 f539 - 7162 f539 - asl 7163 f539 - asl 7164 f539 - ora mousecodex0 7165 f539 - tay 7166 f539 - lda rotationalcompare,y 7167 f539 - adc mousexdelta ; carry was clear by previous ASL 7168 f539 - sta mousexdelta 7169 f539 - stx mousecodex0 7170 f539 -mouse0loopcondition 7171 f539 - lda TIMINT 7172 f539 - bpl mouse0updateloop 7173 f539 - 7174 f539 - ; *** adapt to selected device resolution. 7175 f539 - ldx port0control 7176 f539 - 7177 f539 - ifconst PRECISIONMOUSING 7178 f539 - ldy port0resolution 7179 f539 - bne mouse0halveddone 7180 f539 - cpx #6 ; half-resolution is no good for driving wheels 7181 f539 - beq mouse0halveddone 7182 f539 - ; resolution=0 is half mouse resolution, necessary for precision 7183 f539 - ; mousing on a 160x240 screen with a 1000 dpi mouse. 7184 f539 - 7185 f539 - lda mousexdelta 7186 f539 - cmp #$80 7187 f539 - ror ; do a signed divide by 2. 7188 f539 - clc 7189 f539 - adc mousex0 7190 f539 - sta mousex0 7191 f539 - ifnconst MOUSEXONLY 7192 f539 - lda mouseydelta 7193 f539 - clc 7194 f539 - adc mousey0 7195 f539 - sta mousey0 7196 f539 - endif 7197 f539 - ; at half resolution we just exit after updating x and y 7198 f539 - jmp LLRET0 7199 f539 -mouse0halveddone 7200 f539 - endif ; PRECISIONMOUSING 7201 f539 - 7202 f539 - ifnconst MOUSEXONLY 7203 f539 - asl mouseydelta ; *2 because Y resolution is finer 7204 f539 - ldy port0resolution 7205 f539 - dey 7206 f539 - lda #0 7207 f539 -mousey0resolutionfix 7208 f539 - clc 7209 f539 - adc mouseydelta 7210 f539 - dey 7211 f539 - bpl mousey0resolutionfix 7212 f539 - clc 7213 f539 - adc mousey0 7214 f539 - sta mousey0 7215 f539 - endif ; MOUSEXONLY 7216 f539 - 7217 f539 - ldy port0resolution 7218 f539 - dey 7219 f539 - lda #0 7220 f539 -mousex0resolutionfix 7221 f539 - clc 7222 f539 - adc mousexdelta 7223 f539 - dey 7224 f539 - bpl mousex0resolutionfix 7225 f539 - ifnconst DRIVINGBOOST 7226 f539 - clc 7227 f539 - adc mousex0 7228 f539 - sta mousex0 7229 f539 - else 7230 f539 - cpx #6 7231 f539 - beq carryonmouse0boost 7232 f539 - clc 7233 f539 - adc mousex0 7234 f539 - sta mousex0 7235 f539 - jmp LLRET0 7236 f539 -carryonmouse0boost 7237 f539 - sta mousexdelta 7238 f539 - clc 7239 f539 - adc mousecodey0 7240 f539 - sta mousecodey0 7241 f539 - clc 7242 f539 - adc mousex0 7243 f539 - tay ; save the target X 7244 f539 - adc mousey0 ; average in the smoothly-trailing X 7245 f539 - ror 7246 f539 - sta mousex0 ; mousex0 now has the smoothly trailing X 7247 f539 - sty mousey0 ; and mousey0 has the the target X 7248 f539 - 7249 f539 - ; check to see if the coordinate wrapped. If so, undo the averaging code. 7250 f539 - ; A has mousex0, the smoothly trailing X 7251 f539 - sbc mousey0 ; less the target X 7252 f539 - bpl skipabsolutedrive0 7253 f539 - eor #$ff 7254 f539 -skipabsolutedrive0 7255 f539 - cmp #64 ; just an unreasonably large change 7256 f539 - bcc skipdrivewrapfix0 7257 f539 - sty mousex0 ; if X wrapped, we catch the trailing X up to the target X 7258 f539 -skipdrivewrapfix0 7259 f539 - 7260 f539 - ; get rid of the tweening if the distance travelled was very small 7261 f539 - lda mousexdelta 7262 f539 - cmp port0resolution 7263 f539 - bcs skipbetweenfix0 7264 f539 - lda mousex0 7265 f539 - sta mousey0 7266 f539 -skipbetweenfix0 7267 f539 - 7268 f539 -drivingboostreductioncheck0 7269 f539 - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 7270 f539 - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 7271 f539 - ; negated again because truncation during BCD math results in 7272 f539 - ; differing magnitudes, depending if the value is +ve or -ve. 7273 f539 -driving0fix 7274 f539 - lax mousecodey0 7275 f539 - cmp #$80 7276 f539 - bcs driving0skipnegate1 7277 f539 - eor #$FF 7278 f539 - adc #1 7279 f539 - sta mousecodey0 7280 f539 -driving0skipnegate1 7281 f539 - cmp #$80 7282 f539 - ror 7283 f539 - cmp #$80 7284 f539 - ror 7285 f539 - cmp #$80 7286 f539 - ror 7287 f539 - sta inttemp1 7288 f539 - lda mousecodey0 7289 f539 - sec 7290 f539 - sbc inttemp1 7291 f539 - cpx #$80 7292 f539 - bcs driving0skipnegate2 7293 f539 - eor #$FF 7294 f539 - adc #1 7295 f539 -driving0skipnegate2 7296 f539 - sta mousecodey0 7297 f539 -drivingboostdone0 7298 f539 - endif ; DRIVINGBOOST 7299 f539 - 7300 f539 - jmp LLRET0 7301 f539 - 7302 f539 endif ; MOUSE0SUPPORT 7303 f539 7304 f539 mouse1update 7305 f539 - ifconst MOUSE1SUPPORT 7306 f539 - 7307 f539 -mousetableselect = inttemp2 7308 f539 -mousexdelta = inttemp3 7309 f539 -mouseydelta = inttemp4 7310 f539 -lastSWCHA = inttemp6 7311 f539 - 7312 f539 - ; 0000YyXx st mouse 7313 f539 - ; 0000xyXY amiga mouse 7314 f539 - 7315 f539 - lda #$ff 7316 f539 - sta lastSWCHA 7317 f539 - 7318 f539 - ldy port1control 7319 f539 - 7320 f539 - lda #%00010000 7321 f539 - cpy #9 ; AMIGA? 7322 f539 - bne skipamigabitsfix1 7323 f539 - lda #0 7324 f539 -skipamigabitsfix1 7325 f539 - sta mousetableselect 7326 f539 - ifconst DRIVINGBOOST 7327 f539 - cpy #6 ; DRIVING? 7328 f539 - bne skipdriving1setup 7329 f539 - ; swap mousex1 and mousey1. mousex seen by the 7800basic program 7330 f539 - ; trails the actual mousex1, so we can smoothly interpolate toward 7331 f539 - ; the actual position. This actual position is stored in mousey1 7332 f539 - ; after the driver has run. 7333 f539 - ldx mousex1 7334 f539 - lda mousey1 7335 f539 - stx mousey1 7336 f539 - sta mousex1 7337 f539 -skipdriving1setup 7338 f539 - endif ; DRIVINGBOOST 7339 f539 - 7340 f539 - lda #0 7341 f539 - sta mousexdelta 7342 f539 - sta mouseydelta 7343 f539 - 7344 f539 - ifnconst MOUSETIME 7345 f539 - ifnconst MOUSEXONLY 7346 f539 - lda #180 ; minimum for x+y 7347 f539 - else 7348 f539 - lda #100 ; minimum for just x 7349 f539 - endif 7350 f539 - else 7351 f539 - lda #MOUSETIME 7352 f539 - endif 7353 f539 - jsr SETTIM64T ; INTIM is in Y 7354 f539 - 7355 f539 -mouse1updateloop 7356 f539 - lda SWCHA 7357 f539 - and #%00001111 7358 f539 - cmp lastSWCHA 7359 f539 - beq mouse1loopcondition 7360 f539 - sta lastSWCHA 7361 f539 - 7362 f539 - ora mousetableselect ; atari/amiga decoding table selection 7363 f539 - 7364 f539 - ; st mice encode on different bits/joystick-lines than amiga mice... 7365 f539 - ; 0000YyXx st mouse 7366 f539 - ; 0000xyXY amiga mouse 7367 f539 - ; ...so can shuffle the amiga bits to reuse the st driver. 7368 f539 - tay 7369 f539 - lax amigatoataribits,y 7370 f539 - 7371 f539 - ifnconst MOUSEXONLY 7372 f539 - ; first the Y... 7373 f539 - and #%00001100 7374 f539 - ora mousecodey1 7375 f539 - tay 7376 f539 - lda rotationalcompare,y 7377 f539 - clc 7378 f539 - adc mouseydelta 7379 f539 - sta mouseydelta 7380 f539 - tya 7381 f539 - lsr 7382 f539 - lsr 7383 f539 - sta mousecodey1 7384 f539 - txa 7385 f539 - ; ...then the X... 7386 f539 - and #%00000011 7387 f539 - tax 7388 f539 - endif ; !MOUSEXONLY 7389 f539 - 7390 f539 - asl 7391 f539 - asl 7392 f539 - ora mousecodex1 7393 f539 - tay 7394 f539 - lda rotationalcompare,y 7395 f539 - adc mousexdelta ; carry was clear by previous ASL 7396 f539 - sta mousexdelta 7397 f539 - stx mousecodex1 7398 f539 -mouse1loopcondition 7399 f539 - lda TIMINT 7400 f539 - bpl mouse1updateloop 7401 f539 - 7402 f539 - ; *** adapt to selected device resolution. 7403 f539 - ldx port1control 7404 f539 - 7405 f539 - ifconst PRECISIONMOUSING 7406 f539 - ldy port1resolution 7407 f539 - bne mouse1halveddone 7408 f539 - cpx #6 ; half-resolution is no good for driving wheels 7409 f539 - beq mouse1halveddone 7410 f539 - ; resolution=0 is half mouse resolution, necessary for precision 7411 f539 - ; mousing on a 160x240 screen with a 1000 dpi mouse. 7412 f539 - 7413 f539 - lda mousexdelta 7414 f539 - cmp #$80 7415 f539 - ror ; do a signed divide by 2. 7416 f539 - clc 7417 f539 - adc mousex1 7418 f539 - sta mousex1 7419 f539 - ifnconst MOUSEXONLY 7420 f539 - lda mouseydelta 7421 f539 - clc 7422 f539 - adc mousey1 7423 f539 - sta mousey1 7424 f539 - endif 7425 f539 - ; at half resolution we just exit after updating x and y 7426 f539 - jmp LLRET1 7427 f539 -mouse1halveddone 7428 f539 - endif ; PRECISIONMOUSING 7429 f539 - 7430 f539 - ifnconst MOUSEXONLY 7431 f539 - asl mouseydelta ; *2 because Y resolution is finer 7432 f539 - ldy port1resolution 7433 f539 - dey 7434 f539 - lda #0 7435 f539 -mousey1resolutionfix 7436 f539 - clc 7437 f539 - adc mouseydelta 7438 f539 - dey 7439 f539 - bpl mousey1resolutionfix 7440 f539 - clc 7441 f539 - adc mousey1 7442 f539 - sta mousey1 7443 f539 - endif ; MOUSEXONLY 7444 f539 - 7445 f539 - ldy port1resolution 7446 f539 - dey 7447 f539 - lda #0 7448 f539 -mousex1resolutionfix 7449 f539 - clc 7450 f539 - adc mousexdelta 7451 f539 - dey 7452 f539 - bpl mousex1resolutionfix 7453 f539 - ifnconst DRIVINGBOOST 7454 f539 - clc 7455 f539 - adc mousex1 7456 f539 - sta mousex1 7457 f539 - else 7458 f539 - cpx #6 7459 f539 - beq carryonmouse1boost 7460 f539 - clc 7461 f539 - adc mousex1 7462 f539 - sta mousex1 7463 f539 - jmp LLRET1 7464 f539 -carryonmouse1boost 7465 f539 - sta mousexdelta 7466 f539 - clc 7467 f539 - adc mousecodey1 7468 f539 - sta mousecodey1 7469 f539 - clc 7470 f539 - adc mousex1 7471 f539 - tay ; save the target X 7472 f539 - adc mousey1 ; average in the smoothly-trailing X 7473 f539 - ror 7474 f539 - sta mousex1 ; mousex0 now has the smoothly trailing X 7475 f539 - sty mousey1 ; and mousey0 has the the target X 7476 f539 - 7477 f539 - ; check to see if the coordinate wrapped. If so, undo the averaging code. 7478 f539 - ; A has mousex1, the smoothly trailing X 7479 f539 - sbc mousey1 ; less the target X 7480 f539 - bpl skipabsolutedrive1 7481 f539 - eor #$ff 7482 f539 -skipabsolutedrive1 7483 f539 - cmp #64 ; just an unreasonably large change 7484 f539 - bcc skipdrivewrapfix1 7485 f539 - sty mousex1 ; if X wrapped, we catch the trailing X up to the target X 7486 f539 -skipdrivewrapfix1 7487 f539 - 7488 f539 - ; get rid of the tweening if the distance travelled was very small 7489 f539 - lda mousexdelta 7490 f539 - cmp port1resolution 7491 f539 - bcs skipbetweenfix1 7492 f539 - lda mousex1 7493 f539 - sta mousey1 7494 f539 -skipbetweenfix1 7495 f539 - 7496 f539 -drivingboostreductioncheck1 7497 f539 - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 7498 f539 - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 7499 f539 - ; negated again because truncation during BCD math results in 7500 f539 - ; differing magnitudes, depending if the value is +ve or -ve. 7501 f539 -driving1fix 7502 f539 - lax mousecodey1 7503 f539 - cmp #$80 7504 f539 - bcs driving0skipnegate1 7505 f539 - eor #$FF 7506 f539 - adc #1 7507 f539 - sta mousecodey1 7508 f539 -driving0skipnegate1 7509 f539 - cmp #$80 7510 f539 - ror 7511 f539 - cmp #$80 7512 f539 - ror 7513 f539 - cmp #$80 7514 f539 - ror 7515 f539 - sta inttemp1 7516 f539 - lda mousecodey1 7517 f539 - sec 7518 f539 - sbc inttemp1 7519 f539 - cpx #$80 7520 f539 - bcs driving1skipnegate2 7521 f539 - eor #$FF 7522 f539 - adc #1 7523 f539 -driving1skipnegate2 7524 f539 - sta mousecodey1 7525 f539 -drivingboostdone1 7526 f539 - endif ; DRIVINGBOOST 7527 f539 - 7528 f539 - jmp LLRET1 7529 f539 - 7530 f539 endif ; MOUSE1SUPPORT 7531 f539 7532 f539 7533 f539 trakball0update 7534 f539 - ifconst TRAKBALL0SUPPORT 7535 f539 - ifnconst TRAKTIME 7536 f539 - ifnconst TRAKXONLY 7537 f539 - lda #180 ; minimum for x+y 7538 f539 - else ; !TRAKXONLY 7539 f539 - lda #100 ; minimum for just x 7540 f539 - endif ; !TRAKXONLY 7541 f539 - else ; !TRAKTIME 7542 f539 - lda #TRAKTIME 7543 f539 - endif ; !TRAKTIME 7544 f539 - jsr SETTIM64T ; INTIM is in Y 7545 f539 - ldx #0 7546 f539 - ifnconst TRAKXONLY 7547 f539 - ldy #0 7548 f539 - endif ; TRAKXONLY 7549 f539 -trakball0updateloop 7550 f539 - lda SWCHA 7551 f539 - and #%00110000 7552 f539 - cmp trakballcodex0 7553 f539 - sta trakballcodex0 7554 f539 - beq trakball0movementXdone 7555 f539 - and #%00010000 7556 f539 - beq trakball0negativeX 7557 f539 -trakball0positiveX 7558 f539 - ;(2 from beq) 7559 f539 - inx ; 2 7560 f539 - jmp trakball0movementXdone ; 3 7561 f539 -trakball0negativeX 7562 f539 - ;(3 from beq) 7563 f539 - dex ; 2 7564 f539 - nop ; 2 7565 f539 -trakball0movementXdone 7566 f539 - 7567 f539 - ifnconst TRAKXONLY 7568 f539 - lda SWCHA 7569 f539 - and #%11000000 7570 f539 - cmp trakballcodey0 7571 f539 - sta trakballcodey0 7572 f539 - beq trakball0movementYdone 7573 f539 - and #%01000000 7574 f539 - beq trakball0negativeY 7575 f539 -trakball0positiveY 7576 f539 - ;(2 from beq) 7577 f539 - iny ; 2 7578 f539 - jmp trakball0movementYdone ; 3 7579 f539 -trakball0negativeY 7580 f539 - ;(3 from beq) 7581 f539 - dey ; 2 7582 f539 - nop ; 2 7583 f539 -trakball0movementYdone 7584 f539 - endif ; !TRAKXONLY 7585 f539 - 7586 f539 - lda TIMINT 7587 f539 - bpl trakball0updateloop 7588 f539 - lda #0 7589 f539 - cpx #0 7590 f539 - beq trakball0skipXadjust 7591 f539 - clc 7592 f539 -trakball0Xloop 7593 f539 - adc port0resolution 7594 f539 - dex 7595 f539 - bne trakball0Xloop 7596 f539 - clc 7597 f539 - adc trakballx0 7598 f539 - sta trakballx0 7599 f539 -trakball0skipXadjust 7600 f539 - ifnconst TRAKXONLY 7601 f539 - lda #0 7602 f539 - cpy #0 7603 f539 - beq trakball0skipYadjust 7604 f539 - clc 7605 f539 -trakball0yloop 7606 f539 - adc port0resolution 7607 f539 - dey 7608 f539 - bne trakball0yloop 7609 f539 - clc 7610 f539 - adc trakbally0 7611 f539 - sta trakbally0 7612 f539 -trakball0skipYadjust 7613 f539 - endif ; !TRAKXONLY 7614 f539 - 7615 f539 - jmp LLRET0 7616 f539 endif 7617 f539 7618 f539 7619 f539 7620 f539 trakball1update 7621 f539 - ifconst TRAKBALL1SUPPORT 7622 f539 - ifnconst TRAKTIME 7623 f539 - ifnconst TRAKXONLY 7624 f539 - lda #180 ; minimum for x+y 7625 f539 - else ; !TRAKXONLY 7626 f539 - lda #100 ; minimum for just x 7627 f539 - endif ; !TRAKXONLY 7628 f539 - else ; !TRAKTIME 7629 f539 - lda #TRAKTIME 7630 f539 - endif ; !TRAKTIME 7631 f539 - jsr SETTIM64T ; INTIM is in Y 7632 f539 - ldx #0 7633 f539 - ifnconst TRAKXONLY 7634 f539 - ldy #0 7635 f539 - endif ; TRAKXONLY 7636 f539 -trakball1updateloop 7637 f539 - lda SWCHA 7638 f539 - and #%00000011 7639 f539 - cmp trakballcodex1 7640 f539 - sta trakballcodex1 7641 f539 - beq trakball1movementXdone 7642 f539 - and #%00000001 7643 f539 - beq trakball1negativeX 7644 f539 -trakball1positiveX 7645 f539 - ;(2 from beq) 7646 f539 - inx ; 2 7647 f539 - jmp trakball1movementXdone ; 3 7648 f539 -trakball1negativeX 7649 f539 - ;(3 from beq) 7650 f539 - dex ; 2 7651 f539 - nop ; 2 7652 f539 -trakball1movementXdone 7653 f539 - 7654 f539 - ifnconst TRAKXONLY 7655 f539 - lda SWCHA 7656 f539 - and #%00001100 7657 f539 - cmp trakballcodey1 7658 f539 - sta trakballcodey1 7659 f539 - beq trakball1movementYdone 7660 f539 - and #%00000100 7661 f539 - beq trakball1negativeY 7662 f539 -trakball1positiveY 7663 f539 - ;(2 from beq) 7664 f539 - iny ; 2 7665 f539 - jmp trakball1movementYdone ; 3 7666 f539 -trakball1negativeY 7667 f539 - ;(3 from beq) 7668 f539 - dey ; 2 7669 f539 - nop ; 2 7670 f539 -trakball1movementYdone 7671 f539 - endif ; !TRAKXONLY 7672 f539 - 7673 f539 - lda TIMINT 7674 f539 - bpl trakball1updateloop 7675 f539 - lda #0 7676 f539 - cpx #0 7677 f539 - beq trakball1skipXadjust 7678 f539 - clc 7679 f539 -trakball1Xloop 7680 f539 - adc port1resolution 7681 f539 - dex 7682 f539 - bne trakball1Xloop 7683 f539 - clc 7684 f539 - adc trakballx1 7685 f539 - sta trakballx1 7686 f539 -trakball1skipXadjust 7687 f539 - ifnconst TRAKXONLY 7688 f539 - lda #0 7689 f539 - cpy #0 7690 f539 - beq trakball1skipYadjust 7691 f539 - clc 7692 f539 -trakball1yloop 7693 f539 - adc port1resolution 7694 f539 - dey 7695 f539 - bne trakball1yloop 7696 f539 - clc 7697 f539 - adc trakbally1 7698 f539 - sta trakbally1 7699 f539 -trakball1skipYadjust 7700 f539 - endif ; !TRAKXONLY 7701 f539 - 7702 f539 - jmp LLRET1 7703 f539 endif 7704 f539 7705 f539 7706 f539 paddleport0update 7707 f539 - ifconst PADDLE0SUPPORT 7708 f539 - lda #6 7709 f539 - sta VBLANK ; start charging the paddle caps 7710 f539 - lda #0 ; use PADDLE timing 7711 f539 - jsr SETTIM64T ; INTIM is in Y 7712 f539 - 7713 f539 -paddleport0updateloop 7714 f539 - lda INPT0 7715 f539 - bmi skippaddle0setposition 7716 f539 - sty paddleposition0 7717 f539 -skippaddle0setposition 7718 f539 - ifconst TWOPADDLESUPPORT 7719 f539 - lda INPT1 7720 f539 - bmi skippaddle1setposition 7721 f539 - sty paddleposition1 7722 f539 -skippaddle1setposition 7723 f539 - endif 7724 f539 - ldy INTIM 7725 f539 - cpy #TIMEOFFSET 7726 f539 - bcs paddleport0updateloop 7727 f539 - 7728 f539 - lda #%10000110 7729 f539 - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 7730 f539 - sec 7731 f539 - lda paddleposition0 7732 f539 - sbc #TIMEOFFSET 7733 f539 - ifconst PADDLESCALEX2 7734 f539 - asl 7735 f539 - endif 7736 f539 - 7737 f539 - ifnconst PADDLESMOOTHINGOFF 7738 f539 - clc 7739 f539 - adc paddleprevious0 7740 f539 - ror 7741 f539 - sta paddleprevious0 7742 f539 - endif 7743 f539 - 7744 f539 - sta paddleposition0 7745 f539 - 7746 f539 - ifconst TWOPADDLESUPPORT 7747 f539 - sec 7748 f539 - lda paddleposition1 7749 f539 - sbc #TIMEOFFSET 7750 f539 - ifconst PADDLESCALEX2 7751 f539 - asl 7752 f539 - endif 7753 f539 - 7754 f539 - ifnconst PADDLESMOOTHINGOFF 7755 f539 - clc 7756 f539 - adc paddleprevious1 7757 f539 - ror 7758 f539 - sta paddleprevious1 7759 f539 - endif 7760 f539 - sta paddleposition1 7761 f539 - endif ; TWOPADDLESUPPORT 7762 f539 - 7763 f539 - jmp LLRET0 7764 f539 endif 7765 f539 7766 f539 paddleport1update 7767 f539 - ifconst PADDLE1SUPPORT 7768 f539 - lda #6 7769 f539 - sta VBLANK ; start charging the paddle caps 7770 f539 - 7771 f539 - lda #0 ; use PADDLE timing 7772 f539 - jsr SETTIM64T ; INTIM is in Y 7773 f539 - 7774 f539 -paddleport1updateloop 7775 f539 - lda INPT2 7776 f539 - bmi skippaddle2setposition 7777 f539 - sty paddleposition2 7778 f539 -skippaddle2setposition 7779 f539 - ifconst TWOPADDLESUPPORT 7780 f539 - lda INPT3 7781 f539 - bmi skippaddle3setposition 7782 f539 - sty paddleposition3 7783 f539 -skippaddle3setposition 7784 f539 - endif 7785 f539 - ldy INTIM 7786 f539 - cpy #TIMEOFFSET 7787 f539 - bcs paddleport1updateloop 7788 f539 - 7789 f539 - lda #%10000110 7790 f539 - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 7791 f539 - sec 7792 f539 - lda paddleposition2 7793 f539 - sbc #TIMEOFFSET 7794 f539 - ifconst PADDLESCALEX2 7795 f539 - asl 7796 f539 - endif 7797 f539 - 7798 f539 - ifnconst PADDLESMOOTHINGOFF 7799 f539 - clc 7800 f539 - adc paddleprevious2 7801 f539 - ror 7802 f539 - sta paddleprevious2 7803 f539 - endif 7804 f539 - 7805 f539 - sta paddleposition2 7806 f539 - 7807 f539 - ifconst TWOPADDLESUPPORT 7808 f539 - sec 7809 f539 - lda paddleposition3 7810 f539 - sbc #TIMEOFFSET 7811 f539 - ifconst PADDLESCALEX2 7812 f539 - asl 7813 f539 - endif 7814 f539 - 7815 f539 - ifnconst PADDLESMOOTHINGOFF 7816 f539 - clc 7817 f539 - adc paddleprevious3 7818 f539 - ror 7819 f539 - sta paddleprevious3 7820 f539 - endif 7821 f539 - sta paddleposition3 7822 f539 - endif ; TWOPADDLESUPPORT 7823 f539 - 7824 f539 - jmp LLRET1 7825 f539 endif 7826 f539 7827 f539 7828 f539 paddlebuttonhandler ; outside of conditional, for button-handler LUT 7829 f539 - ifconst PADDLESUPPORT 7830 f539 - ; x=0|1 for port, rather than paddle #. 7831 f539 - ; Only the first paddle button will integrate into "joy0fire" testing. If the 7832 f539 - ; game wants to support 2 paddles, up to the game to instead test the 7833 f539 - ; joystick right+left directions instead. 7834 f539 - lda SWCHA ; top of nibble is first paddle button 7835 f539 - cpx #0 ; port 0? 7836 f539 - beq skippaddleport2shift 7837 f539 - asl ; shift second port to upper nibble 7838 f539 - asl 7839 f539 - asl 7840 f539 - asl 7841 f539 -skippaddleport2shift 7842 f539 - and #%10000000 7843 f539 - eor #%10000000 ; invert 7844 f539 - sta sINPT1,x 7845 f539 - jmp buttonreadloopreturn 7846 f539 endif ; PADDLESUPPORT 7847 f539 7848 f539 mousebuttonhandler ; outside of conditional, for button-handler LUT 7849 f539 - ifconst MOUSESUPPORT 7850 f539 - ; stick the mouse buttons in the correct shadow register... 7851 f539 - txa 7852 f539 - asl 7853 f539 - tay ; y=x*2 7854 f539 - lda INPT4,x 7855 f539 - eor #%10000000 7856 f539 - lsr 7857 f539 - sta sINPT1,x 7858 f539 - 7859 f539 - lda INPT1,y 7860 f539 - and #%10000000 7861 f539 - eor #%10000000 7862 f539 - ora sINPT1,x 7863 f539 - sta sINPT1,x 7864 f539 - jmp buttonreadloopreturn 7865 f539 endif ; MOUSESUPPORT 7866 f539 7867 f539 - ifconst KEYPADSUPPORT 7868 f539 - ; ** select keypad rows 0 to 3 over 4 frames... 7869 f539 -keypadrowselect 7870 f539 - ldy #0 7871 f539 - lda port0control 7872 f539 - cmp #7 7873 f539 - bne skipport0val 7874 f539 - iny ; y=y+1 7875 f539 -skipport0val 7876 f539 - lda port1control 7877 f539 - cmp #7 7878 f539 - bne skipport1val 7879 f539 - iny 7880 f539 - iny ; y=y+2 7881 f539 -skipport1val 7882 f539 - lda keyrowdirectionmask,y 7883 f539 - sta CTLSWA 7884 f539 - tya 7885 f539 - asl 7886 f539 - asl 7887 f539 - sta inttemp1 7888 f539 - lda framecounter 7889 f539 - and #3 7890 f539 - ora inttemp1 7891 f539 - tax 7892 f539 - lda keyrowselectvalue,x 7893 f539 - sta SWCHA 7894 f539 - rts 7895 f539 - 7896 f539 -keyrowdirectionmask 7897 f539 - .byte #%00000000 ; 0 : port0=input port1=input 7898 f539 - .byte #%11110000 ; 1 : port0=output port1=input 7899 f539 - .byte #%00001111 ; 2 : port0=input port1=output 7900 f539 - .byte #%11111111 ; 3 : port0=output port1=output 7901 f539 - 7902 f539 -keyrowselectvalue 7903 f539 - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 7904 f539 - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 7905 f539 - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 7906 f539 - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 7907 f539 endif ; KEYPADSUPPORT 7908 f539 7909 f539 - ifconst KEYPADSUPPORT 7910 f539 - ; TODO - split into compile-time KEYPAD0SUPPORT and KEYPAD1SUPPORT 7911 f539 -keypadcolumnread 7912 f539 - lda port0control 7913 f539 - cmp #7 7914 f539 - bne skipkeypadcolumnread0 7915 f539 - lda framecounter 7916 f539 - and #3 7917 f539 - asl ; x2 because keypad variables are interleaved 7918 f539 - tax 7919 f539 - lda #0 7920 f539 - sta keypadmatrix0a,x 7921 f539 - lda INPT0 7922 f539 - cmp #$80 7923 f539 - rol keypadmatrix0a,x 7924 f539 - lda INPT1 7925 f539 - cmp #$80 7926 f539 - rol keypadmatrix0a,x 7927 f539 - lda INPT4 7928 f539 - cmp #$80 7929 f539 - rol keypadmatrix0a,x 7930 f539 - lda keypadmatrix0a,x 7931 f539 - eor #%00000111 7932 f539 - sta keypadmatrix0a,x 7933 f539 -skipkeypadcolumnread0 7934 f539 - 7935 f539 - lda port1control 7936 f539 - cmp #7 7937 f539 - bne skipkeypadcolumnread1 7938 f539 - lda framecounter 7939 f539 - and #3 7940 f539 - asl ; x2 because keypad variables are interleaved 7941 f539 - tax 7942 f539 - lda #0 7943 f539 - sta keypadmatrix1a,x 7944 f539 - rol keypadmatrix1a,x 7945 f539 - lda INPT2 7946 f539 - cmp #$80 7947 f539 - rol keypadmatrix1a,x 7948 f539 - lda INPT3 7949 f539 - cmp #$80 7950 f539 - rol keypadmatrix1a,x 7951 f539 - lda INPT5 7952 f539 - cmp #$80 7953 f539 - rol keypadmatrix1a,x 7954 f539 - lda keypadmatrix1a,x 7955 f539 - eor #%00000111 7956 f539 - sta keypadmatrix1a,x 7957 f539 -skipkeypadcolumnread1 7958 f539 - rts 7959 f539 endif ; KEYPADSUPPORT 7960 f539 7961 f539 setportforinput 7962 f539 a5 e4 lda CTLSWAs 7963 f53b 3d 44 f5 and allpinsinputlut,x 7964 f53e 85 e4 sta CTLSWAs 7965 f540 8d 81 02 sta CTLSWA 7966 f543 60 rts 7967 f544 7968 f544 allpinsinputlut 7969 f544 0f f0 .byte.b $0F, $F0 7970 f546 7971 f546 setonebuttonmode 7972 f546 a9 06 lda #6 ; in case we're in unlocked-bios mode 7973 f548 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 7974 f54a a9 14 lda #$14 7975 f54c 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 7976 f54f a5 e5 lda CTLSWBs 7977 f551 1d 5a f5 ora thisjoy2buttonbit,x 7978 f554 85 e5 sta CTLSWBs 7979 f556 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 7980 f559 60 rts 7981 f55a 7982 f55a thisjoy2buttonbit 7983 f55a 04 10 .byte.b $04, $10 7984 f55c 7985 f55c settwobuttonmode 7986 f55c a9 06 lda #6 ; in case we're in unlocked-bios mode 7987 f55e 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 7988 f560 a9 14 lda #$14 7989 f562 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 7990 f565 a5 e5 lda CTLSWBs 7991 f567 3d 70 f5 and thisjoy2buttonmask,x 7992 f56a 85 e5 sta CTLSWBs 7993 f56c 8d 82 02 sta SWCHB 7994 f56f 60 rts 7995 f570 7996 f570 thisjoy2buttonmask 7997 f570 fb ef .byte.b $fb, $ef 7998 f572 7999 f572 ; Provided under the CC0 license. See the included LICENSE.txt for details. 8000 f572 8001 f572 START 8002 f572 start 8003 f572 8004 f572 ;******** more or less the Atari recommended startup procedure 8005 f572 8006 f572 78 sei 8007 f573 d8 cld 8008 f574 8009 f574 ifnconst NOTIALOCK 8010 f574 a9 07 lda #$07 8011 f576 - else 8012 f576 - lda #$06 8013 f576 endif 8014 f576 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 8015 f578 a9 7f lda #$7F 8016 f57a 85 3c sta CTRL ;disable DMA 8017 f57c a9 00 lda #$00 8018 f57e 85 38 sta OFFSET 8019 f580 ifnconst NOTIALOCK 8020 f580 85 01 sta INPTCTRL 8021 f582 endif 8022 f582 a2 ff ldx #$FF 8023 f584 9a txs 8024 f585 8025 f585 ;************** Clear Memory 8026 f585 8027 f585 a2 40 ldx #$40 8028 f587 a9 00 lda #$00 8029 f589 crloop1 8030 f589 95 00 sta $00,x ;Clear zero page 8031 f58b 9d 00 01 sta $100,x ;Clear page 1 8032 f58e e8 inx 8033 f58f d0 f8 bne crloop1 8034 f591 8035 f591 8036 f591 a0 00 ldy #$00 ;Clear Ram 8037 f593 a9 18 lda #$18 ;Start at $1800 8038 f595 85 81 sta $81 8039 f597 a9 00 lda #$00 8040 f599 85 80 sta $80 8041 f59b crloop3 8042 f59b a9 00 lda #$00 8043 f59d 91 80 sta ($80),y ;Store data 8044 f59f c8 iny ;Next byte 8045 f5a0 d0 f9 bne crloop3 ;Branch if not done page 8046 f5a2 e6 81 inc $81 ;Next page 8047 f5a4 a5 81 lda $81 8048 f5a6 c9 20 cmp #$20 ;End at $1FFF 8049 f5a8 d0 f1 bne crloop3 ;Branch if not 8050 f5aa 8051 f5aa a0 00 ldy #$00 ;Clear Ram 8052 f5ac a9 22 lda #$22 ;Start at $2200 8053 f5ae 85 81 sta $81 8054 f5b0 a9 00 lda #$00 8055 f5b2 85 80 sta $80 8056 f5b4 crloop4 8057 f5b4 a9 00 lda #$00 8058 f5b6 91 80 sta ($80),y ;Store data 8059 f5b8 c8 iny ;Next byte 8060 f5b9 d0 f9 bne crloop4 ;Branch if not done page 8061 f5bb e6 81 inc $81 ;Next page 8062 f5bd a5 81 lda $81 8063 f5bf c9 27 cmp #$27 ;End at $27FF 8064 f5c1 d0 f1 bne crloop4 ;Branch if not 8065 f5c3 8066 f5c3 a2 00 ldx #$00 8067 f5c5 a9 00 lda #$00 8068 f5c7 crloop5 ;Clear 2100-213F, 2000-203F 8069 f5c7 9d 00 20 sta $2000,x 8070 f5ca 9d 00 21 sta $2100,x 8071 f5cd e8 inx 8072 f5ce e0 40 cpx #$40 8073 f5d0 d0 f5 bne crloop5 8074 f5d2 8075 f5d2 85 80 sta $80 8076 f5d4 85 81 sta $81 8077 f5d6 85 82 sta $82 8078 f5d8 85 83 sta $83 8079 f5da 8080 f5da ;seed random number with hopefully-random timer value 8081 f5da a9 01 lda #1 8082 f5dc 0d 84 02 ora INTIM 8083 f5df 85 40 sta rand 8084 f5e1 8085 f5e1 ; detect the console type... 8086 f5e1 pndetectvblankstart 8087 f5e1 a5 28 lda MSTAT 8088 f5e3 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 8089 f5e5 pndetectvblankover 8090 f5e5 a5 28 lda MSTAT 8091 f5e7 30 fc bmi pndetectvblankover ; then wait for it to be over 8092 f5e9 a0 00 ldy #$00 8093 f5eb a2 00 ldx #$00 8094 f5ed pndetectvblankhappening 8095 f5ed a5 28 lda MSTAT 8096 f5ef 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 8097 f5f1 85 24 sta WSYNC 8098 f5f3 85 24 sta WSYNC 8099 f5f5 e8 inx 8100 f5f6 d0 f5 bne pndetectvblankhappening 8101 f5f8 pndetectinvblank 8102 f5f8 e0 7d cpx #125 8103 f5fa 90 02 bcc pndetecispal 8104 f5fc a0 01 ldy #$01 8105 f5fe pndetecispal 8106 f5fe 8c 09 21 sty paldetected 8107 f601 8108 f601 20 9f f4 jsr createallgamedlls 8109 f604 8110 f604 a9 18 lda #>DLLMEM 8111 f606 85 2c sta DPPH 8112 f608 a9 00 lda # 255 8281 f630 -DOUBLEBUFFEROFFSET = 255 8282 f630 else 8283 f630 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 8284 f630 endif 8285 f630 8286 f630 - ifconst EXTRADLMEMORY 8287 f630 -SECONDDLHALFSTART SET $2300 8288 f630 endif 8289 f630 8290 f630 DLPOINTH 8291 f630 DLINDEX SET 0 8292 f630 REPEAT WZONECOUNT 8293 f630 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f630 - ifconst EXTRADLMEMORY 8295 f630 - if TMPMEMADDRESS > $1FFF 8296 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f630 - else 8298 f630 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f630 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f630 - endif 8302 f630 - endif ; TMPMEMADDRESS > $1FFF 8303 f630 endif ; EXTRADLMEMORY 8304 f630 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f630 18 .byte.b >TMPMEMADDRESS 8306 f630 DLINDEX SET DLINDEX + 1 8292 f630 REPEND 8293 f630 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f631 - ifconst EXTRADLMEMORY 8295 f631 - if TMPMEMADDRESS > $1FFF 8296 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f631 - else 8298 f631 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f631 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f631 - endif 8302 f631 - endif ; TMPMEMADDRESS > $1FFF 8303 f631 endif ; EXTRADLMEMORY 8304 f631 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f631 18 .byte.b >TMPMEMADDRESS 8306 f631 DLINDEX SET DLINDEX + 1 8292 f631 REPEND 8293 f631 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f632 - ifconst EXTRADLMEMORY 8295 f632 - if TMPMEMADDRESS > $1FFF 8296 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f632 - else 8298 f632 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f632 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f632 - endif 8302 f632 - endif ; TMPMEMADDRESS > $1FFF 8303 f632 endif ; EXTRADLMEMORY 8304 f632 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f632 19 .byte.b >TMPMEMADDRESS 8306 f632 DLINDEX SET DLINDEX + 1 8292 f632 REPEND 8293 f632 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f633 - ifconst EXTRADLMEMORY 8295 f633 - if TMPMEMADDRESS > $1FFF 8296 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f633 - else 8298 f633 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f633 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f633 - endif 8302 f633 - endif ; TMPMEMADDRESS > $1FFF 8303 f633 endif ; EXTRADLMEMORY 8304 f633 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f633 19 .byte.b >TMPMEMADDRESS 8306 f633 DLINDEX SET DLINDEX + 1 8292 f633 REPEND 8293 f633 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f634 - ifconst EXTRADLMEMORY 8295 f634 - if TMPMEMADDRESS > $1FFF 8296 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f634 - else 8298 f634 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f634 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f634 - endif 8302 f634 - endif ; TMPMEMADDRESS > $1FFF 8303 f634 endif ; EXTRADLMEMORY 8304 f634 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f634 19 .byte.b >TMPMEMADDRESS 8306 f634 DLINDEX SET DLINDEX + 1 8292 f634 REPEND 8293 f634 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f635 - ifconst EXTRADLMEMORY 8295 f635 - if TMPMEMADDRESS > $1FFF 8296 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f635 - else 8298 f635 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f635 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f635 - endif 8302 f635 - endif ; TMPMEMADDRESS > $1FFF 8303 f635 endif ; EXTRADLMEMORY 8304 f635 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f635 1a .byte.b >TMPMEMADDRESS 8306 f635 DLINDEX SET DLINDEX + 1 8292 f635 REPEND 8293 f635 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f636 - ifconst EXTRADLMEMORY 8295 f636 - if TMPMEMADDRESS > $1FFF 8296 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f636 - else 8298 f636 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f636 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f636 - endif 8302 f636 - endif ; TMPMEMADDRESS > $1FFF 8303 f636 endif ; EXTRADLMEMORY 8304 f636 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f636 1a .byte.b >TMPMEMADDRESS 8306 f636 DLINDEX SET DLINDEX + 1 8292 f636 REPEND 8293 f636 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f637 - ifconst EXTRADLMEMORY 8295 f637 - if TMPMEMADDRESS > $1FFF 8296 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f637 - else 8298 f637 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f637 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f637 - endif 8302 f637 - endif ; TMPMEMADDRESS > $1FFF 8303 f637 endif ; EXTRADLMEMORY 8304 f637 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f637 1a .byte.b >TMPMEMADDRESS 8306 f637 DLINDEX SET DLINDEX + 1 8292 f637 REPEND 8293 f637 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f638 - ifconst EXTRADLMEMORY 8295 f638 - if TMPMEMADDRESS > $1FFF 8296 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f638 - else 8298 f638 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f638 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f638 - endif 8302 f638 - endif ; TMPMEMADDRESS > $1FFF 8303 f638 endif ; EXTRADLMEMORY 8304 f638 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f638 1b .byte.b >TMPMEMADDRESS 8306 f638 DLINDEX SET DLINDEX + 1 8292 f638 REPEND 8293 f638 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f639 - ifconst EXTRADLMEMORY 8295 f639 - if TMPMEMADDRESS > $1FFF 8296 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f639 - else 8298 f639 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f639 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f639 - endif 8302 f639 - endif ; TMPMEMADDRESS > $1FFF 8303 f639 endif ; EXTRADLMEMORY 8304 f639 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f639 1b .byte.b >TMPMEMADDRESS 8306 f639 DLINDEX SET DLINDEX + 1 8292 f639 REPEND 8293 f639 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f63a - ifconst EXTRADLMEMORY 8295 f63a - if TMPMEMADDRESS > $1FFF 8296 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f63a - else 8298 f63a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f63a -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f63a - endif 8302 f63a - endif ; TMPMEMADDRESS > $1FFF 8303 f63a endif ; EXTRADLMEMORY 8304 f63a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f63a 1b .byte.b >TMPMEMADDRESS 8306 f63a DLINDEX SET DLINDEX + 1 8292 f63a REPEND 8293 f63a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f63b - ifconst EXTRADLMEMORY 8295 f63b - if TMPMEMADDRESS > $1FFF 8296 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f63b - else 8298 f63b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f63b -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f63b - endif 8302 f63b - endif ; TMPMEMADDRESS > $1FFF 8303 f63b endif ; EXTRADLMEMORY 8304 f63b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f63b 1b .byte.b >TMPMEMADDRESS 8306 f63b DLINDEX SET DLINDEX + 1 8292 f63b REPEND 8293 f63b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f63c - ifconst EXTRADLMEMORY 8295 f63c - if TMPMEMADDRESS > $1FFF 8296 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f63c - else 8298 f63c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f63c -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f63c - endif 8302 f63c - endif ; TMPMEMADDRESS > $1FFF 8303 f63c endif ; EXTRADLMEMORY 8304 f63c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f63c 1c .byte.b >TMPMEMADDRESS 8306 f63c DLINDEX SET DLINDEX + 1 8292 f63c REPEND 8293 f63c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f63d - ifconst EXTRADLMEMORY 8295 f63d - if TMPMEMADDRESS > $1FFF 8296 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f63d - else 8298 f63d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f63d -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f63d - endif 8302 f63d - endif ; TMPMEMADDRESS > $1FFF 8303 f63d endif ; EXTRADLMEMORY 8304 f63d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f63d 1c .byte.b >TMPMEMADDRESS 8306 f63d DLINDEX SET DLINDEX + 1 8292 f63d REPEND 8293 f63d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f63e - ifconst EXTRADLMEMORY 8295 f63e - if TMPMEMADDRESS > $1FFF 8296 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f63e - else 8298 f63e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f63e -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f63e - endif 8302 f63e - endif ; TMPMEMADDRESS > $1FFF 8303 f63e endif ; EXTRADLMEMORY 8304 f63e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f63e 1c .byte.b >TMPMEMADDRESS 8306 f63e DLINDEX SET DLINDEX + 1 8292 f63e REPEND 8293 f63e TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f63f - ifconst EXTRADLMEMORY 8295 f63f - if TMPMEMADDRESS > $1FFF 8296 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f63f - else 8298 f63f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f63f -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f63f - endif 8302 f63f - endif ; TMPMEMADDRESS > $1FFF 8303 f63f endif ; EXTRADLMEMORY 8304 f63f ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f63f 1d .byte.b >TMPMEMADDRESS 8306 f63f DLINDEX SET DLINDEX + 1 8292 f63f REPEND 8293 f63f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f640 - ifconst EXTRADLMEMORY 8295 f640 - if TMPMEMADDRESS > $1FFF 8296 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f640 - else 8298 f640 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f640 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f640 - endif 8302 f640 - endif ; TMPMEMADDRESS > $1FFF 8303 f640 endif ; EXTRADLMEMORY 8304 f640 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f640 1d .byte.b >TMPMEMADDRESS 8306 f640 DLINDEX SET DLINDEX + 1 8292 f640 REPEND 8293 f640 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f641 - ifconst EXTRADLMEMORY 8295 f641 - if TMPMEMADDRESS > $1FFF 8296 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f641 - else 8298 f641 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f641 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f641 - endif 8302 f641 - endif ; TMPMEMADDRESS > $1FFF 8303 f641 endif ; EXTRADLMEMORY 8304 f641 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f641 1d .byte.b >TMPMEMADDRESS 8306 f641 DLINDEX SET DLINDEX + 1 8292 f641 REPEND 8293 f641 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f642 - ifconst EXTRADLMEMORY 8295 f642 - if TMPMEMADDRESS > $1FFF 8296 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f642 - else 8298 f642 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f642 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f642 - endif 8302 f642 - endif ; TMPMEMADDRESS > $1FFF 8303 f642 endif ; EXTRADLMEMORY 8304 f642 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f642 1e .byte.b >TMPMEMADDRESS 8306 f642 DLINDEX SET DLINDEX + 1 8292 f642 REPEND 8293 f642 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f643 - ifconst EXTRADLMEMORY 8295 f643 - if TMPMEMADDRESS > $1FFF 8296 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f643 - else 8298 f643 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f643 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f643 - endif 8302 f643 - endif ; TMPMEMADDRESS > $1FFF 8303 f643 endif ; EXTRADLMEMORY 8304 f643 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f643 1e .byte.b >TMPMEMADDRESS 8306 f643 DLINDEX SET DLINDEX + 1 8292 f643 REPEND 8293 f643 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f644 - ifconst EXTRADLMEMORY 8295 f644 - if TMPMEMADDRESS > $1FFF 8296 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f644 - else 8298 f644 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f644 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f644 - endif 8302 f644 - endif ; TMPMEMADDRESS > $1FFF 8303 f644 endif ; EXTRADLMEMORY 8304 f644 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f644 1e .byte.b >TMPMEMADDRESS 8306 f644 DLINDEX SET DLINDEX + 1 8292 f644 REPEND 8293 f644 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f645 - ifconst EXTRADLMEMORY 8295 f645 - if TMPMEMADDRESS > $1FFF 8296 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f645 - else 8298 f645 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f645 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f645 - endif 8302 f645 - endif ; TMPMEMADDRESS > $1FFF 8303 f645 endif ; EXTRADLMEMORY 8304 f645 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f645 1f .byte.b >TMPMEMADDRESS 8306 f645 DLINDEX SET DLINDEX + 1 8292 f645 REPEND 8293 f645 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f646 - ifconst EXTRADLMEMORY 8295 f646 - if TMPMEMADDRESS > $1FFF 8296 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f646 - else 8298 f646 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f646 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f646 - endif 8302 f646 - endif ; TMPMEMADDRESS > $1FFF 8303 f646 endif ; EXTRADLMEMORY 8304 f646 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f646 1f .byte.b >TMPMEMADDRESS 8306 f646 DLINDEX SET DLINDEX + 1 8292 f646 REPEND 8293 f646 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8294 f647 - ifconst EXTRADLMEMORY 8295 f647 - if TMPMEMADDRESS > $1FFF 8296 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8297 f647 - else 8298 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8299 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8300 f647 -SECONDDLHALFSTART SET TMPMEMADDRESS 8301 f647 - endif 8302 f647 - endif ; TMPMEMADDRESS > $1FFF 8303 f647 endif ; EXTRADLMEMORY 8304 f647 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 8305 f647 1f .byte.b >TMPMEMADDRESS 8306 f647 DLINDEX SET DLINDEX + 1 8307 f648 REPEND 8308 f648 8309 f648 - ifconst EXTRADLMEMORY 8310 f648 - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 8311 f648 endif 8312 f648 8313 f648 8314 f648 DLPOINTL 8315 f648 DLINDEX SET 0 8316 f648 REPEAT WZONECOUNT 8317 f648 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8318 f648 - ifconst EXTRADLMEMORY 8319 f648 - if TMPMEMADDRESS > $1FFF 8320 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f648 - else 8322 f648 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f648 - endif 8325 f648 - endif ; TMPMEMADDRESS > $1FFF 8326 f648 endif ; EXTRADLMEMORY 8327 f648 80 .byte.b $1FFF 8320 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f649 - else 8322 f649 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f649 - endif 8325 f649 - endif ; TMPMEMADDRESS > $1FFF 8326 f649 endif ; EXTRADLMEMORY 8327 f649 d0 .byte.b $1FFF 8320 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f64a - else 8322 f64a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f64a - endif 8325 f64a - endif ; TMPMEMADDRESS > $1FFF 8326 f64a endif ; EXTRADLMEMORY 8327 f64a 20 .byte.b $1FFF 8320 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f64b - else 8322 f64b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f64b - endif 8325 f64b - endif ; TMPMEMADDRESS > $1FFF 8326 f64b endif ; EXTRADLMEMORY 8327 f64b 70 .byte.b $1FFF 8320 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f64c - else 8322 f64c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f64c - endif 8325 f64c - endif ; TMPMEMADDRESS > $1FFF 8326 f64c endif ; EXTRADLMEMORY 8327 f64c c0 .byte.b $1FFF 8320 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f64d - else 8322 f64d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f64d - endif 8325 f64d - endif ; TMPMEMADDRESS > $1FFF 8326 f64d endif ; EXTRADLMEMORY 8327 f64d 10 .byte.b $1FFF 8320 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f64e - else 8322 f64e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f64e - endif 8325 f64e - endif ; TMPMEMADDRESS > $1FFF 8326 f64e endif ; EXTRADLMEMORY 8327 f64e 60 .byte.b $1FFF 8320 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f64f - else 8322 f64f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f64f - endif 8325 f64f - endif ; TMPMEMADDRESS > $1FFF 8326 f64f endif ; EXTRADLMEMORY 8327 f64f b0 .byte.b $1FFF 8320 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f650 - else 8322 f650 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f650 - endif 8325 f650 - endif ; TMPMEMADDRESS > $1FFF 8326 f650 endif ; EXTRADLMEMORY 8327 f650 00 .byte.b $1FFF 8320 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f651 - else 8322 f651 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f651 - endif 8325 f651 - endif ; TMPMEMADDRESS > $1FFF 8326 f651 endif ; EXTRADLMEMORY 8327 f651 50 .byte.b $1FFF 8320 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f652 - else 8322 f652 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f652 - endif 8325 f652 - endif ; TMPMEMADDRESS > $1FFF 8326 f652 endif ; EXTRADLMEMORY 8327 f652 a0 .byte.b $1FFF 8320 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f653 - else 8322 f653 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f653 - endif 8325 f653 - endif ; TMPMEMADDRESS > $1FFF 8326 f653 endif ; EXTRADLMEMORY 8327 f653 f0 .byte.b $1FFF 8320 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f654 - else 8322 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f654 - endif 8325 f654 - endif ; TMPMEMADDRESS > $1FFF 8326 f654 endif ; EXTRADLMEMORY 8327 f654 40 .byte.b $1FFF 8320 f655 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f655 - else 8322 f655 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f655 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f655 - endif 8325 f655 - endif ; TMPMEMADDRESS > $1FFF 8326 f655 endif ; EXTRADLMEMORY 8327 f655 90 .byte.b $1FFF 8320 f656 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f656 - else 8322 f656 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f656 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f656 - endif 8325 f656 - endif ; TMPMEMADDRESS > $1FFF 8326 f656 endif ; EXTRADLMEMORY 8327 f656 e0 .byte.b $1FFF 8320 f657 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f657 - else 8322 f657 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f657 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f657 - endif 8325 f657 - endif ; TMPMEMADDRESS > $1FFF 8326 f657 endif ; EXTRADLMEMORY 8327 f657 30 .byte.b $1FFF 8320 f658 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f658 - else 8322 f658 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f658 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f658 - endif 8325 f658 - endif ; TMPMEMADDRESS > $1FFF 8326 f658 endif ; EXTRADLMEMORY 8327 f658 80 .byte.b $1FFF 8320 f659 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f659 - else 8322 f659 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f659 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f659 - endif 8325 f659 - endif ; TMPMEMADDRESS > $1FFF 8326 f659 endif ; EXTRADLMEMORY 8327 f659 d0 .byte.b $1FFF 8320 f65a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f65a - else 8322 f65a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f65a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f65a - endif 8325 f65a - endif ; TMPMEMADDRESS > $1FFF 8326 f65a endif ; EXTRADLMEMORY 8327 f65a 20 .byte.b $1FFF 8320 f65b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f65b - else 8322 f65b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f65b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f65b - endif 8325 f65b - endif ; TMPMEMADDRESS > $1FFF 8326 f65b endif ; EXTRADLMEMORY 8327 f65b 70 .byte.b $1FFF 8320 f65c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f65c - else 8322 f65c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f65c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f65c - endif 8325 f65c - endif ; TMPMEMADDRESS > $1FFF 8326 f65c endif ; EXTRADLMEMORY 8327 f65c c0 .byte.b $1FFF 8320 f65d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f65d - else 8322 f65d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f65d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f65d - endif 8325 f65d - endif ; TMPMEMADDRESS > $1FFF 8326 f65d endif ; EXTRADLMEMORY 8327 f65d 10 .byte.b $1FFF 8320 f65e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f65e - else 8322 f65e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f65e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f65e - endif 8325 f65e - endif ; TMPMEMADDRESS > $1FFF 8326 f65e endif ; EXTRADLMEMORY 8327 f65e 60 .byte.b $1FFF 8320 f65f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8321 f65f - else 8322 f65f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8323 f65f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8324 f65f - endif 8325 f65f - endif ; TMPMEMADDRESS > $1FFF 8326 f65f endif ; EXTRADLMEMORY 8327 f65f b0 .byte.b $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 18 80 ZONE0ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 19 20 ZONE2ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 19 70 ZONE3ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8333 f660 REPEND 8334 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8335 f660 - ifconst EXTRADLMEMORY 8336 f660 - if TMPMEMADDRESS > $1FFF 8337 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8338 f660 - else 8339 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8340 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8341 f660 - endif 8342 f660 - endif ; TMPMEMADDRESS > $1FFF 8343 f660 endif ; EXTRADLMEMORY 8344 f660 8345 f660 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 8346 f660 8347 f660 DLINDEX SET DLINDEX + 1 8348 f660 REPEND 8349 f660 8350 f660 $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 8351 f660 echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 8352 f660 8353 f660 DLHEIGHT 8354 f660 REPEAT WZONECOUNT 8355 f660 07 .byte.b (WZONEHEIGHT-1) 8354 f660 REPEND 8355 f661 07 .byte.b (WZONEHEIGHT-1) 8354 f661 REPEND 8355 f662 07 .byte.b (WZONEHEIGHT-1) 8354 f662 REPEND 8355 f663 07 .byte.b (WZONEHEIGHT-1) 8354 f663 REPEND 8355 f664 07 .byte.b (WZONEHEIGHT-1) 8354 f664 REPEND 8355 f665 07 .byte.b (WZONEHEIGHT-1) 8354 f665 REPEND 8355 f666 07 .byte.b (WZONEHEIGHT-1) 8354 f666 REPEND 8355 f667 07 .byte.b (WZONEHEIGHT-1) 8354 f667 REPEND 8355 f668 07 .byte.b (WZONEHEIGHT-1) 8354 f668 REPEND 8355 f669 07 .byte.b (WZONEHEIGHT-1) 8354 f669 REPEND 8355 f66a 07 .byte.b (WZONEHEIGHT-1) 8354 f66a REPEND 8355 f66b 07 .byte.b (WZONEHEIGHT-1) 8354 f66b REPEND 8355 f66c 07 .byte.b (WZONEHEIGHT-1) 8354 f66c REPEND 8355 f66d 07 .byte.b (WZONEHEIGHT-1) 8354 f66d REPEND 8355 f66e 07 .byte.b (WZONEHEIGHT-1) 8354 f66e REPEND 8355 f66f 07 .byte.b (WZONEHEIGHT-1) 8354 f66f REPEND 8355 f670 07 .byte.b (WZONEHEIGHT-1) 8354 f670 REPEND 8355 f671 07 .byte.b (WZONEHEIGHT-1) 8354 f671 REPEND 8355 f672 07 .byte.b (WZONEHEIGHT-1) 8354 f672 REPEND 8355 f673 07 .byte.b (WZONEHEIGHT-1) 8354 f673 REPEND 8355 f674 07 .byte.b (WZONEHEIGHT-1) 8354 f674 REPEND 8355 f675 07 .byte.b (WZONEHEIGHT-1) 8354 f675 REPEND 8355 f676 07 .byte.b (WZONEHEIGHT-1) 8354 f676 REPEND 8355 f677 07 .byte.b (WZONEHEIGHT-1) 8356 f678 REPEND 8357 f678 8358 f678 ; Provided under the CC0 license. See the included LICENSE.txt for details. 8359 f678 8360 f678 ; a simple guard, than ensures the 7800basic code hasn't 8361 f678 ; spilled into the encryption area... 2310 bytes left in the 7800basic reserved area. 8362 f678 echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 8363 f678 - if (*>$FF7D) 8364 f678 - ERR ; abort the assembly 8365 f678 endif 8366 f678 ; Provided under the CC0 license. See the included LICENSE.txt for details. 8367 f678 8368 f678 - ifconst DEV 8369 f678 - ifnconst ZONEHEIGHT 8370 f678 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 8371 f678 - else 8372 f678 - if ZONEHEIGHT = 8 8373 f678 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 8374 f678 - else 8375 f678 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 8376 f678 - endif 8377 f678 - endif 8378 f678 endif 8379 f678 8380 f678 ; FF7E/FF7F contains the 7800basic crc checksum word 8381 f678 8382 f678 ; FF80 - FFF7 contains the 7800 encryption key 8383 f678 8384 f678 ifnconst bankswitchmode 8385 fff8 ORG $FFF8 8386 fff8 - else 8387 fff8 - ifconst ROM128K 8388 fff8 - ORG $27FF8 8389 fff8 - RORG $FFF8 8390 fff8 - endif 8391 fff8 - ifconst ROM144K 8392 fff8 - ORG $27FF8 8393 fff8 - RORG $FFF8 8394 fff8 - endif 8395 fff8 - ifconst ROM256K 8396 fff8 - ORG $47FF8 8397 fff8 - RORG $FFF8 8398 fff8 - endif 8399 fff8 - ifconst ROM272K 8400 fff8 - ORG $47FF8 8401 fff8 - RORG $FFF8 8402 fff8 - endif 8403 fff8 - ifconst ROM512K 8404 fff8 - ORG $87FF8 8405 fff8 - RORG $FFF8 8406 fff8 - endif 8407 fff8 - ifconst ROM528K 8408 fff8 - ORG $87FF8 8409 fff8 - RORG $FFF8 8410 fff8 - endif 8411 fff8 endif 8412 fff8 8413 fff8 8414 fff8 ff .byte.b $FF ; region verification. $FF=all regions 8415 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 8416 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 8417 fffa 8418 fffa ;Vectors 8419 fffa 00 f0 .word.w NMI 8420 fffc 72 f5 .word.w START 8421 fffe 67 f0 .word.w IRQ 8422 10000