------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_continue.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 = .skipL0262-sfx_explosion 103 10000 ???? 104 10000 ???? 00 30 sfx_plainlaser_length = .skipL0261-sfx_plainlaser 105 10000 ???? 106 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0260-sfx_pulsecannon 107 10000 ???? 108 10000 ???? 00 36 sfx_bling_length = .skipL0259-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 6a isDead_flag = var42 233 10000 ???? 234 10000 ???? 01 69 continue_flag = var41 235 10000 ???? 236 10000 ???? 01 68 twinlaser_Slowdown = var40 237 10000 ???? 238 10000 ???? 01 67 twinlaser_flag = var39 239 10000 ???? 240 10000 ???? 01 66 twinlaserY = var38 241 10000 ???? 242 10000 ???? 01 65 twinlaserX = var37 243 10000 ???? 244 10000 ???? 01 64 lives = var36 245 10000 ???? 246 10000 ???? 01 63 explosion_aniframe = var35 247 10000 ???? 248 10000 ???? 01 62 extra_shipFlag = var34 249 10000 ???? 250 10000 ???? 01 61 extra_shipY = var33 251 10000 ???? 252 10000 ???? 01 60 extra_shipX = var32 253 10000 ???? 254 10000 ???? 01 5f gameover_flag = var31 255 10000 ???? 256 10000 ???? 01 5e enemy01_speed = var30 257 10000 ???? 258 10000 ???? 01 5d rMovement6 = var29 259 10000 ???? 260 10000 ???? 01 5c rMovement5 = var28 261 10000 ???? 262 10000 ???? 01 5b rMovement4 = var27 263 10000 ???? 264 10000 ???? 01 5a rMovement3 = var26 265 10000 ???? 266 10000 ???? 01 59 enemy01_Flag = var25 267 10000 ???? 268 10000 ???? 01 58 enemy01_Y = var24 269 10000 ???? 270 10000 ???? 01 57 enemy01_X = var23 271 10000 ???? 272 10000 ???? 01 56 enemy_shotSlowdown = var22 273 10000 ???? 274 10000 ???? 01 55 bulletSlowdown = var21 275 10000 ???? 276 10000 ???? 01 54 power_upSlowdown = var20 277 10000 ???? 278 10000 ???? 01 53 rMovement2 = var19 279 10000 ???? 280 10000 ???? 01 52 power_upFlag = var18 281 10000 ???? 282 10000 ???? 01 51 power_upY = var17 283 10000 ???? 284 10000 ???? 01 50 power_upX = var16 285 10000 ???? 286 10000 ???? 01 4f rDirection = var15 287 10000 ???? 288 10000 ???? 01 4e rMovement1 = var14 289 10000 ???? 290 10000 ???? 01 4d playerFlag = var13 291 10000 ???? 292 10000 ???? 01 4c enemy_shotFlag = var12 293 10000 ???? 294 10000 ???? 01 4b enemy_shotY = var11 295 10000 ???? 296 10000 ???? 01 4a enemy_shotX = var10 297 10000 ???? 298 10000 ???? 01 49 bulletY = var9 299 10000 ???? 300 10000 ???? 01 48 bulletX = var8 301 10000 ???? 302 10000 ???? 01 47 joyposright = var7 303 10000 ???? 304 10000 ???? 01 46 joyposleft = var6 305 10000 ???? 306 10000 ???? 01 45 joyposdown = var5 307 10000 ???? 308 10000 ???? 01 44 joyposup = var4 309 10000 ???? 310 10000 ???? 01 43 fire_debounce = var3 311 10000 ???? 312 10000 ???? 01 42 playerY = var2 313 10000 ???? 314 10000 ???? 01 41 playerX = var1 315 10000 ???? 316 10000 ???? 01 40 frameCounter = var0 317 10000 ???? 318 10000 ???? 00 01 collisionwrap = 1 319 10000 ???? 00 01 NTSC = 1 320 10000 ???? 00 c0 SCREENHEIGHT = 192 321 10000 ???? 00 01 CHECKOVERWRITE = 1 322 10000 ???? 00 08 ZONEHEIGHT = 8 323 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_continue.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 = .skipL0262-sfx_explosion 103 10000 ???? 104 10000 ???? 00 30 sfx_plainlaser_length = .skipL0261-sfx_plainlaser 105 10000 ???? 106 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0260-sfx_pulsecannon 107 10000 ???? 108 10000 ???? 00 36 sfx_bling_length = .skipL0259-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 6a isDead_flag = var42 233 10000 ???? 234 10000 ???? 01 69 continue_flag = var41 235 10000 ???? 236 10000 ???? 01 68 twinlaser_Slowdown = var40 237 10000 ???? 238 10000 ???? 01 67 twinlaser_flag = var39 239 10000 ???? 240 10000 ???? 01 66 twinlaserY = var38 241 10000 ???? 242 10000 ???? 01 65 twinlaserX = var37 243 10000 ???? 244 10000 ???? 01 64 lives = var36 245 10000 ???? 246 10000 ???? 01 63 explosion_aniframe = var35 247 10000 ???? 248 10000 ???? 01 62 extra_shipFlag = var34 249 10000 ???? 250 10000 ???? 01 61 extra_shipY = var33 251 10000 ???? 252 10000 ???? 01 60 extra_shipX = var32 253 10000 ???? 254 10000 ???? 01 5f gameover_flag = var31 255 10000 ???? 256 10000 ???? 01 5e enemy01_speed = var30 257 10000 ???? 258 10000 ???? 01 5d rMovement6 = var29 259 10000 ???? 260 10000 ???? 01 5c rMovement5 = var28 261 10000 ???? 262 10000 ???? 01 5b rMovement4 = var27 263 10000 ???? 264 10000 ???? 01 5a rMovement3 = var26 265 10000 ???? 266 10000 ???? 01 59 enemy01_Flag = var25 267 10000 ???? 268 10000 ???? 01 58 enemy01_Y = var24 269 10000 ???? 270 10000 ???? 01 57 enemy01_X = var23 271 10000 ???? 272 10000 ???? 01 56 enemy_shotSlowdown = var22 273 10000 ???? 274 10000 ???? 01 55 bulletSlowdown = var21 275 10000 ???? 276 10000 ???? 01 54 power_upSlowdown = var20 277 10000 ???? 278 10000 ???? 01 53 rMovement2 = var19 279 10000 ???? 280 10000 ???? 01 52 power_upFlag = var18 281 10000 ???? 282 10000 ???? 01 51 power_upY = var17 283 10000 ???? 284 10000 ???? 01 50 power_upX = var16 285 10000 ???? 286 10000 ???? 01 4f rDirection = var15 287 10000 ???? 288 10000 ???? 01 4e rMovement1 = var14 289 10000 ???? 290 10000 ???? 01 4d playerFlag = var13 291 10000 ???? 292 10000 ???? 01 4c enemy_shotFlag = var12 293 10000 ???? 294 10000 ???? 01 4b enemy_shotY = var11 295 10000 ???? 296 10000 ???? 01 4a enemy_shotX = var10 297 10000 ???? 298 10000 ???? 01 49 bulletY = var9 299 10000 ???? 300 10000 ???? 01 48 bulletX = var8 301 10000 ???? 302 10000 ???? 01 47 joyposright = var7 303 10000 ???? 304 10000 ???? 01 46 joyposleft = var6 305 10000 ???? 306 10000 ???? 01 45 joyposdown = var5 307 10000 ???? 308 10000 ???? 01 44 joyposup = var4 309 10000 ???? 310 10000 ???? 01 43 fire_debounce = var3 311 10000 ???? 312 10000 ???? 01 42 playerY = var2 313 10000 ???? 314 10000 ???? 01 41 playerX = var1 315 10000 ???? 316 10000 ???? 01 40 frameCounter = var0 317 10000 ???? 318 10000 ???? 00 01 collisionwrap = 1 319 10000 ???? 00 01 NTSC = 1 320 10000 ???? 00 c0 SCREENHEIGHT = 192 321 10000 ???? 00 01 CHECKOVERWRITE = 1 322 10000 ???? 00 08 ZONEHEIGHT = 8 323 10000 ???? 00 01 ROM48K = 1 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_continue.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 .L014 ;; dim joyposup = var4 693 401a 694 401a .L015 ;; dim joyposdown = var5 695 401a 696 401a .L016 ;; dim joyposleft = var6 697 401a 698 401a .L017 ;; dim joyposright = var7 699 401a 700 401a .L018 ;; dim bulletX = var8 701 401a 702 401a .L019 ;; dim bulletY = var9 703 401a 704 401a .L020 ;; dim enemy_shotX = var10 705 401a 706 401a .L021 ;; dim enemy_shotY = var11 707 401a 708 401a .L022 ;; dim enemy_shotFlag = var12 709 401a 710 401a .L023 ;; dim playerFlag = var13 711 401a 712 401a .L024 ;; dim rMovement1 = var14 713 401a 714 401a .L025 ;; dim rDirection = var15 715 401a 716 401a .L026 ;; dim power_upX = var16 717 401a 718 401a .L027 ;; dim power_upY = var17 719 401a 720 401a .L028 ;; dim power_upFlag = var18 721 401a 722 401a .L029 ;; dim rMovement2 = var19 723 401a 724 401a .L030 ;; dim power_upSlowdown = var20 725 401a 726 401a .L031 ;; dim bulletSlowdown = var21 727 401a 728 401a .L032 ;; dim enemy_shotSlowdown = var22 729 401a 730 401a .L033 ;; dim enemy01_X = var23 731 401a 732 401a .L034 ;; dim enemy01_Y = var24 733 401a 734 401a .L035 ;; dim enemy01_Flag = var25 735 401a 736 401a .L036 ;; dim rMovement3 = var26 737 401a 738 401a .L037 ;; dim rMovement4 = var27 739 401a 740 401a .L038 ;; dim rMovement5 = var28 741 401a 742 401a .L039 ;; dim rMovement6 = var29 743 401a 744 401a .L040 ;; dim enemy01_speed = var30 745 401a 746 401a .L041 ;; dim gameover_flag = var31 747 401a 748 401a .L042 ;; dim extra_shipX = var32 749 401a 750 401a .L043 ;; dim extra_shipY = var33 751 401a 752 401a .L044 ;; dim extra_shipFlag = var34 753 401a 754 401a .L045 ;; dim explosion_aniframe = var35 755 401a 756 401a .L046 ;; dim lives = var36 757 401a 758 401a .L047 ;; dim twinlaserX = var37 759 401a 760 401a .L048 ;; dim twinlaserY = var38 761 401a 762 401a .L049 ;; dim twinlaser_flag = var39 763 401a 764 401a .L050 ;; dim twinlaser_Slowdown = var40 765 401a 766 401a .L051 ;; dim continue_flag = var41 767 401a 768 401a .L052 ;; dim isDead_flag = var42 769 401a 770 401a . 771 401a ;; 772 401a 773 401a . 774 401a ;; 775 401a 776 401a .L053 ;; characterset vertical_shooting_font 777 401a 778 401a a9 b0 lda #>vertical_shooting_font 779 401c 8d 0b 21 sta sCHARBASE 780 401f 781 401f 85 34 sta CHARBASE 782 4021 a9 60 lda #(vertical_shooting_font_mode | %01100000) 783 4023 8d 06 21 sta charactermode 784 4026 785 4026 .L054 ;; alphachars ' 0123456789abcdefghijklmnopqrstuvwxyz.,?!:;`"' 786 4026 787 4026 . 788 4026 ;; 789 4026 790 4026 .import 791 4026 ;; import 792 4026 793 4026 . 794 4026 ;; 795 4026 796 4026 .L055 ;; incgraphic vertical_shooting_font.png 160A 797 4026 798 4026 .L056 ;; incgraphic vertical_shooting_ship.png 160A 799 4026 800 4026 .L057 ;; incgraphic vertical_shooting_bullet.png 160A 801 4026 802 4026 .L058 ;; incgraphic vertical_shooting_enemyshot.png 160A 803 4026 804 4026 .L059 ;; incgraphic vertical_shooting_powerup.png 160A 805 4026 806 4026 .L060 ;; incgraphic vertical_shooting_enemy01.png 160A 807 4026 808 4026 .L061 ;; newblock 809 4026 810 4026 . 811 4026 ;; 812 4026 813 4026 .L062 ;; incgraphic vertical_shooting_1up.png 160A 814 4026 815 4026 .L063 ;; incgraphic vertical_shooting_explosion_01.png 160A 816 4026 817 4026 .L064 ;; incgraphic vertical_shooting_explosion_02.png 160A 818 4026 819 4026 .L065 ;; incgraphic vertical_shooting_explosion_03.png 160A 820 4026 821 4026 .L066 ;; incgraphic vertical_shooting_explosion_04.png 160A 822 4026 823 4026 .L067 ;; incgraphic vertical_shooting_explosion_05.png 160A 824 4026 825 4026 .L068 ;; incgraphic vertical_shooting_explosion_06.png 160A 826 4026 827 4026 .L069 ;; incgraphic vertical_shooting_explosion_07.png 160A 828 4026 829 4026 .L070 ;; incgraphic vertical_shooting_explosion_08.png 160A 830 4026 831 4026 .L071 ;; incgraphic vertical_shooting_explosion_09.png 160A 832 4026 833 4026 .L072 ;; incgraphic vertical_shooting_explosion_10.png 160A 834 4026 835 4026 .L073 ;; incgraphic vertical_shooting_laser.png 160A 836 4026 837 4026 . 838 4026 ;; 839 4026 840 4026 .L074 ;; newblock 841 4026 842 4026 .L075 ;; newblock 843 4026 844 4026 . 845 4026 ;; 846 4026 847 4026 . 848 4026 ;; 849 4026 850 4026 .L076 ;; dmahole 0 851 4026 852 4026 4c 00 b8 jmp dmahole_0 853 4029 gameend 854 4029 DMAHOLEEND2 SET . 28631 bytes of ROM space left in the main area. 855 4029 echo " ",[($B000 - gameend)]d , "bytes of ROM space left in the main area." 856 4029 - if ($B000 - gameend) < 0 857 4029 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 858 4029 endif 859 4029 860 b000 ORG $B000,0 ; ************* 861 b000 862 b000 vertical_shooting_font 863 b000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 864 b020 00 00 00 00* HEX 00000000000000000000000000 865 b02d vertical_shooting_ship 866 b02d 07 d0 HEX 07d0 867 b02f vertical_shooting_ship_tallsprite_00 868 b02f 80 02 HEX 8002 869 b031 vertical_shooting_bullet 870 b031 28 HEX 28 871 b032 vertical_shooting_enemyshot 872 b032 00 HEX 00 873 b033 vertical_shooting_powerup 874 b033 28 00 HEX 2800 875 b035 vertical_shooting_enemy01 876 b035 09 e0 HEX 09e0 877 b037 vertical_shooting_enemy01_tallsprite_00 878 b037 40 03 HEX 4003 879 b039 880 b100 ORG $B100,0 ; ************* 881 b100 882 b100 ;vertical_shooting_font 883 b100 00 54 54 54* HEX 0054545454045454045404445054505440544454104454444410401444501014 884 b120 10 44 44 10* HEX 10444410544040101040400000 885 b12d ;vertical_shooting_ship 886 b12d 07 d0 HEX 07d0 887 b12f ;vertical_shooting_ship_tallsprite_00 888 b12f 80 02 HEX 8002 889 b131 ;vertical_shooting_bullet 890 b131 28 HEX 28 891 b132 ;vertical_shooting_enemyshot 892 b132 88 HEX 88 893 b133 ;vertical_shooting_powerup 894 b133 78 08 HEX 7808 895 b135 ;vertical_shooting_enemy01 896 b135 09 e0 HEX 09e0 897 b137 ;vertical_shooting_enemy01_tallsprite_00 898 b137 50 0f HEX 500f 899 b139 900 b200 ORG $B200,0 ; ************* 901 b200 902 b200 ;vertical_shooting_font 903 b200 00 44 10 40* HEX 0044104004040444044404444440444040444410444440444444404444041044 904 b220 10 54 44 10* HEX 10544410400010000000100000 905 b22d ;vertical_shooting_ship 906 b22d 03 c0 HEX 03c0 907 b22f ;vertical_shooting_ship_tallsprite_00 908 b22f a1 4a HEX a14a 909 b231 ;vertical_shooting_bullet 910 b231 3c HEX 3c 911 b232 ;vertical_shooting_enemyshot 912 b232 10 HEX 10 913 b233 ;vertical_shooting_powerup 914 b233 78 1e HEX 781e 915 b235 ;vertical_shooting_enemy01 916 b235 19 ec HEX 19ec 917 b237 ;vertical_shooting_enemy01_tallsprite_00 918 b237 5a af HEX 5aaf 919 b239 920 b300 ORG $B300,0 ; ************* 921 b300 922 b300 ;vertical_shooting_font 923 b300 00 44 10 40* HEX 0044104004040444044404444440444040444410044440444444404444041044 924 b320 54 54 44 10* HEX 54544410100000101000000000 925 b32d ;vertical_shooting_ship 926 b32d 01 40 HEX 0140 927 b32f ;vertical_shooting_ship_tallsprite_00 928 b32f a5 5a HEX a55a 929 b331 ;vertical_shooting_bullet 930 b331 3c HEX 3c 931 b332 ;vertical_shooting_enemyshot 932 b332 74 HEX 74 933 b333 ;vertical_shooting_powerup 934 b333 7a a4 HEX 7aa4 935 b335 ;vertical_shooting_enemy01 936 b335 59 ef HEX 59ef 937 b337 ;vertical_shooting_enemy01_tallsprite_00 938 b337 59 ef HEX 59ef 939 b339 940 b400 ORG $B400,0 ; ************* 941 b400 942 b400 ;vertical_shooting_font 943 b400 00 44 10 54* HEX 0044105454545454045454545040445454445410045040544444504450101044 944 b420 44 44 10 10* HEX 44441010100000101000000000 945 b42d ;vertical_shooting_ship 946 b42d 01 40 HEX 0140 947 b42f ;vertical_shooting_ship_tallsprite_00 948 b42f a5 5a HEX a55a 949 b431 ;vertical_shooting_bullet 950 b431 14 HEX 14 951 b432 ;vertical_shooting_enemyshot 952 b432 74 HEX 74 953 b433 ;vertical_shooting_powerup 954 b433 75 7a HEX 757a 955 b435 ;vertical_shooting_enemy01 956 b435 59 6f HEX 596f 957 b437 ;vertical_shooting_enemy01_tallsprite_00 958 b437 59 ef HEX 59ef 959 b439 960 b500 ORG $B500,0 ; ************* 961 b500 962 b500 ;vertical_shooting_font 963 b500 00 44 10 04* HEX 0044100404444040044444444440444040404410044440544444444444401044 964 b520 44 44 44 54* HEX 44444454100000041000000000 965 b52d ;vertical_shooting_ship 966 b52d 01 40 HEX 0140 967 b52f ;vertical_shooting_ship_tallsprite_00 968 b52f a5 5a HEX a55a 969 b531 ;vertical_shooting_bullet 970 b531 14 HEX 14 971 b532 ;vertical_shooting_enemyshot 972 b532 74 HEX 74 973 b533 ;vertical_shooting_powerup 974 b533 78 1e HEX 781e 975 b535 ;vertical_shooting_enemy01 976 b535 5a af HEX 5aaf 977 b537 ;vertical_shooting_enemy01_tallsprite_00 978 b537 19 ec HEX 19ec 979 b539 980 b600 ORG $B600,0 ; ************* 981 b600 982 b600 ;vertical_shooting_font 983 b600 00 44 50 04* HEX 0044500404444040044444444440444040404410044440544444444444401044 984 b620 44 44 44 44* HEX 44444444040000441000001044 985 b62d ;vertical_shooting_ship 986 b62d 01 40 HEX 0140 987 b62f ;vertical_shooting_ship_tallsprite_00 988 b62f a7 da HEX a7da 989 b631 ;vertical_shooting_bullet 990 b631 14 HEX 14 991 b632 ;vertical_shooting_enemyshot 992 b632 10 HEX 10 993 b633 ;vertical_shooting_powerup 994 b633 7a bc HEX 7abc 995 b635 ;vertical_shooting_enemy01 996 b635 50 07 HEX 5007 997 b637 ;vertical_shooting_enemy01_tallsprite_00 998 b637 09 e0 HEX 09e0 999 b639 1000 b700 ORG $B700,0 ; ************* 1001 b700 1002 b700 ;vertical_shooting_font 1003 b700 00 54 10 54* HEX 0054105454445454545454545054505454544454044440445010501050145444 1004 b720 44 44 44 44* HEX 44444444540000101040401044 1005 b72d ;vertical_shooting_ship 1006 b72d 01 40 HEX 0140 1007 b72f ;vertical_shooting_ship_tallsprite_00 1008 b72f 27 d8 HEX 27d8 1009 b731 ;vertical_shooting_bullet 1010 b731 00 HEX 00 1011 b732 ;vertical_shooting_enemyshot 1012 b732 88 HEX 88 1013 b733 ;vertical_shooting_powerup 1014 b733 55 50 HEX 5550 1015 b735 ;vertical_shooting_enemy01 1016 b735 40 01 HEX 4001 1017 b737 ;vertical_shooting_enemy01_tallsprite_00 1018 b737 09 e0 HEX 09e0 1019 b739 1020 b800 ORG $B800,0 ; ************* 1021 b800 dmahole_0 1022 b800 DMAHOLESTART0 SET . 1023 b800 . 1024 b800 ;; 1025 b800 1026 b800 . 1027 b800 ;; 1028 b800 1029 b800 .palettes 1030 b800 ;; palettes 1031 b800 1032 b800 .L077 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 1033 b800 1034 b800 a9 0f LDA #$0F 1035 b802 85 21 STA P0C1 1036 b804 a9 05 LDA #$05 1037 b806 85 22 STA P0C2 1038 b808 a9 32 LDA #$32 1039 b80a 85 23 STA P0C3 1040 b80c .L078 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 1041 b80c 1042 b80c a9 0f LDA #$0F 1043 b80e 85 25 STA P1C1 1044 b810 a9 ee LDA #$EE 1045 b812 85 26 STA P1C2 1046 b814 a9 e7 LDA #$E7 1047 b816 85 27 STA P1C3 1048 b818 .L079 ;; P2C1 = $9D : P2C2 = $73 : P2C3 = $88 1049 b818 1050 b818 a9 9d LDA #$9D 1051 b81a 85 29 STA P2C1 1052 b81c a9 73 LDA #$73 1053 b81e 85 2a STA P2C2 1054 b820 a9 88 LDA #$88 1055 b822 85 2b STA P2C3 1056 b824 .L080 ;; P3C1 = $FB : P3C2 = $F2 : P3C3 = $25 1057 b824 1058 b824 a9 fb LDA #$FB 1059 b826 85 2d STA P3C1 1060 b828 a9 f2 LDA #$F2 1061 b82a 85 2e STA P3C2 1062 b82c a9 25 LDA #$25 1063 b82e 85 2f STA P3C3 1064 b830 . 1065 b830 ;; 1066 b830 1067 b830 .plot 1068 b830 ;; plot 1069 b830 1070 b830 .L081 ;; playerX = 80 : playerY = 144 : playerFlag = 0 : fire_debounce = 0 : isDead_flag = 0 1071 b830 1072 b830 a9 50 LDA #80 1073 b832 8d 41 01 STA playerX 1074 b835 a9 90 LDA #144 1075 b837 8d 42 01 STA playerY 1076 b83a a9 00 LDA #0 1077 b83c 8d 4d 01 STA playerFlag 1078 b83f 8d 43 01 STA fire_debounce 1079 b842 8d 6a 01 STA isDead_flag 1080 b845 .L082 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1081 b845 1082 b845 a9 00 LDA #0 1083 b847 8d 44 01 STA joyposup 1084 b84a 8d 45 01 STA joyposdown 1085 b84d 8d 46 01 STA joyposleft 1086 b850 8d 47 01 STA joyposright 1087 b853 .L083 ;; bulletX = 0 : bulletY = 0 : lives = 3 1088 b853 1089 b853 a9 00 LDA #0 1090 b855 8d 48 01 STA bulletX 1091 b858 8d 49 01 STA bulletY 1092 b85b a9 03 LDA #3 1093 b85d 8d 64 01 STA lives 1094 b860 .L084 ;; enemy_shotX = 0 : enemy_shotY = 0 : enemy_shotFlag = 0 1095 b860 1096 b860 a9 00 LDA #0 1097 b862 8d 4a 01 STA enemy_shotX 1098 b865 8d 4b 01 STA enemy_shotY 1099 b868 8d 4c 01 STA enemy_shotFlag 1100 b86b .L085 ;; rMovement1 = 1 : rMovement2 = 1 : rMovement3 = 1 : rMovement4 = 1 1101 b86b 1102 b86b a9 01 LDA #1 1103 b86d 8d 4e 01 STA rMovement1 1104 b870 8d 53 01 STA rMovement2 1105 b873 8d 5a 01 STA rMovement3 1106 b876 8d 5b 01 STA rMovement4 1107 b879 .L086 ;; rMovement5 = 1 : rMovement6 = 1 : rDirection = 1 1108 b879 1109 b879 a9 01 LDA #1 1110 b87b 8d 5c 01 STA rMovement5 1111 b87e 8d 5d 01 STA rMovement6 1112 b881 8d 4f 01 STA rDirection 1113 b884 .L087 ;; power_upX = 5 : power_upY = 32 : power_upFlag = 0 1114 b884 1115 b884 a9 05 LDA #5 1116 b886 8d 50 01 STA power_upX 1117 b889 a9 20 LDA #32 1118 b88b 8d 51 01 STA power_upY 1119 b88e a9 00 LDA #0 1120 b890 8d 52 01 STA power_upFlag 1121 b893 .L088 ;; enemy_shotSlowdown = 0 : bulletSlowdown = 0 : power_upSlowdown = 0 1122 b893 1123 b893 a9 00 LDA #0 1124 b895 8d 56 01 STA enemy_shotSlowdown 1125 b898 8d 55 01 STA bulletSlowdown 1126 b89b 8d 54 01 STA power_upSlowdown 1127 b89e .L089 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 : enemy01_speed = 6 1128 b89e 1129 b89e a9 00 LDA #0 1130 b8a0 8d 57 01 STA enemy01_X 1131 b8a3 8d 58 01 STA enemy01_Y 1132 b8a6 8d 59 01 STA enemy01_Flag 1133 b8a9 a9 06 LDA #6 1134 b8ab 8d 5e 01 STA enemy01_speed 1135 b8ae .L090 ;; frameCounter = 0 : gameover_flag = 0 1136 b8ae 1137 b8ae a9 00 LDA #0 1138 b8b0 8d 40 01 STA frameCounter 1139 b8b3 8d 5f 01 STA gameover_flag 1140 b8b6 .L091 ;; extra_shipX = 0 : extra_shipY = 0 : extra_shipFlag = 0 1141 b8b6 1142 b8b6 a9 00 LDA #0 1143 b8b8 8d 60 01 STA extra_shipX 1144 b8bb 8d 61 01 STA extra_shipY 1145 b8be 8d 62 01 STA extra_shipFlag 1146 b8c1 .L092 ;; twinlaserX = 0 : twinlaserY = 0 : twinlaser_flag = 0 : twinlaser_Slowdown = 0 1147 b8c1 1148 b8c1 a9 00 LDA #0 1149 b8c3 8d 65 01 STA twinlaserX 1150 b8c6 8d 66 01 STA twinlaserY 1151 b8c9 8d 67 01 STA twinlaser_flag 1152 b8cc 8d 68 01 STA twinlaser_Slowdown 1153 b8cf . 1154 b8cf ;; 1155 b8cf 1156 b8cf .L093 ;; gosub titlescreen 1157 b8cf 1158 b8cf 20 68 da jsr .titlescreen 1159 b8d2 1160 b8d2 . 1161 b8d2 ;; 1162 b8d2 1163 b8d2 .L094 ;; gosub initialise_gamescreen 1164 b8d2 1165 b8d2 20 75 db jsr .initialise_gamescreen 1166 b8d5 1167 b8d5 . 1168 b8d5 ;; 1169 b8d5 1170 b8d5 . 1171 b8d5 ;; 1172 b8d5 1173 b8d5 . 1174 b8d5 ;; 1175 b8d5 1176 b8d5 .main 1177 b8d5 ;; main 1178 b8d5 1179 b8d5 .L095 ;; frameCounter = frameCounter + 1 1180 b8d5 1181 b8d5 ad 40 01 LDA frameCounter 1182 b8d8 18 CLC 1183 b8d9 69 01 ADC #1 1184 b8db 8d 40 01 STA frameCounter 1185 b8de .L096 ;; if frameCounter > 10 then frameCounter = 0 1186 b8de 1187 b8de a9 0a LDA #10 1188 b8e0 cd 40 01 CMP frameCounter 1189 b8e3 b0 05 BCS .skipL096 1190 b8e5 .condpart0 1191 b8e5 a9 00 LDA #0 1192 b8e7 8d 40 01 STA frameCounter 1193 b8ea .skipL096 1194 b8ea .mainloop 1195 b8ea ;; mainloop 1196 b8ea 1197 b8ea .L097 ;; rMovement1 = ( rand & 7 ) - 2 1198 b8ea 1199 b8ea ; complex statement detected 1200 b8ea 20 fd f3 jsr randomize 1201 b8ed 29 07 AND #7 1202 b8ef 38 SEC 1203 b8f0 e9 02 SBC #2 1204 b8f2 8d 4e 01 STA rMovement1 1205 b8f5 .L098 ;; rMovement2 = ( rand & 6 ) 1206 b8f5 1207 b8f5 ; complex statement detected 1208 b8f5 20 fd f3 jsr randomize 1209 b8f8 29 06 AND #6 1210 b8fa 8d 53 01 STA rMovement2 1211 b8fd .L099 ;; rMovement3 = ( rand & 3 ) + 1 1212 b8fd 1213 b8fd ; complex statement detected 1214 b8fd 20 fd f3 jsr randomize 1215 b900 29 03 AND #3 1216 b902 18 CLC 1217 b903 69 01 ADC #1 1218 b905 8d 5a 01 STA rMovement3 1219 b908 .L0100 ;; rMovement4 = ( rand & 5 ) + 2 1220 b908 1221 b908 ; complex statement detected 1222 b908 20 fd f3 jsr randomize 1223 b90b 29 05 AND #5 1224 b90d 18 CLC 1225 b90e 69 02 ADC #2 1226 b910 8d 5b 01 STA rMovement4 1227 b913 .L0101 ;; rMovement5 = ( rand & 5 ) + 1 1228 b913 1229 b913 ; complex statement detected 1230 b913 20 fd f3 jsr randomize 1231 b916 29 05 AND #5 1232 b918 18 CLC 1233 b919 69 01 ADC #1 1234 b91b 8d 5c 01 STA rMovement5 1235 b91e .L0102 ;; rMovement6 = ( rand & 6 ) - 1 1236 b91e 1237 b91e ; complex statement detected 1238 b91e 20 fd f3 jsr randomize 1239 b921 29 06 AND #6 1240 b923 38 SEC 1241 b924 e9 01 SBC #1 1242 b926 8d 5d 01 STA rMovement6 1243 b929 .L0103 ;; rDirection = ( rand & 4 ) 1244 b929 1245 b929 ; complex statement detected 1246 b929 20 fd f3 jsr randomize 1247 b92c 29 04 AND #4 1248 b92e 8d 4f 01 STA rDirection 1249 b931 .L0104 ;; if switchreset then reboot 1250 b931 1251 b931 20 85 f4 jsr checkresetswitch 1252 b934 d0 03 BNE .skipL0104 1253 b936 .condpart1 1254 b936 4c 72 f5 JMP START 1255 b939 .skipL0104 1256 b939 . 1257 b939 ;; 1258 b939 1259 b939 . 1260 b939 ;; 1261 b939 1262 b939 .L0105 ;; enemy_shotSlowdown = enemy_shotSlowdown + 1 1263 b939 1264 b939 ad 56 01 LDA enemy_shotSlowdown 1265 b93c 18 CLC 1266 b93d 69 01 ADC #1 1267 b93f 8d 56 01 STA enemy_shotSlowdown 1268 b942 .L0106 ;; if enemy_shotSlowdown > 8 then enemy_shotSlowdown = 0 1269 b942 1270 b942 a9 08 LDA #8 1271 b944 cd 56 01 CMP enemy_shotSlowdown 1272 b947 b0 05 BCS .skipL0106 1273 b949 .condpart2 1274 b949 a9 00 LDA #0 1275 b94b 8d 56 01 STA enemy_shotSlowdown 1276 b94e .skipL0106 1277 b94e . 1278 b94e ;; 1279 b94e 1280 b94e .L0107 ;; bulletSlowdown = bulletSlowdown + 1 1281 b94e 1282 b94e ad 55 01 LDA bulletSlowdown 1283 b951 18 CLC 1284 b952 69 01 ADC #1 1285 b954 8d 55 01 STA bulletSlowdown 1286 b957 .L0108 ;; if bulletSlowdown > 6 then bulletSlowdown = 0 1287 b957 1288 b957 a9 06 LDA #6 1289 b959 cd 55 01 CMP bulletSlowdown 1290 b95c b0 05 BCS .skipL0108 1291 b95e .condpart3 1292 b95e a9 00 LDA #0 1293 b960 8d 55 01 STA bulletSlowdown 1294 b963 .skipL0108 1295 b963 . 1296 b963 ;; 1297 b963 1298 b963 .L0109 ;; power_upSlowdown = power_upSlowdown + 1 1299 b963 1300 b963 ad 54 01 LDA power_upSlowdown 1301 b966 18 CLC 1302 b967 69 01 ADC #1 1303 b969 8d 54 01 STA power_upSlowdown 1304 b96c .L0110 ;; if power_upSlowdown > 7 then power_upSlowdown = 0 1305 b96c 1306 b96c a9 07 LDA #7 1307 b96e cd 54 01 CMP power_upSlowdown 1308 b971 b0 05 BCS .skipL0110 1309 b973 .condpart4 1310 b973 a9 00 LDA #0 1311 b975 8d 54 01 STA power_upSlowdown 1312 b978 .skipL0110 1313 b978 . 1314 b978 ;; 1315 b978 1316 b978 .L0111 ;; twinlaser_Slowdown = twinlaser_Slowdown + 1 1317 b978 1318 b978 ad 68 01 LDA twinlaser_Slowdown 1319 b97b 18 CLC 1320 b97c 69 01 ADC #1 1321 b97e 8d 68 01 STA twinlaser_Slowdown 1322 b981 .L0112 ;; if twinlaser_Slowdown > 5 then twinlaser_Slowdown = 0 1323 b981 1324 b981 a9 05 LDA #5 1325 b983 cd 68 01 CMP twinlaser_Slowdown 1326 b986 b0 05 BCS .skipL0112 1327 b988 .condpart5 1328 b988 a9 00 LDA #0 1329 b98a 8d 68 01 STA twinlaser_Slowdown 1330 b98d .skipL0112 1331 b98d . 1332 b98d ;; 1333 b98d 1334 b98d .L0113 ;; if joy0up && joyposup = - 2 then gosub SetBulletHome 1335 b98d 1336 b98d a9 10 lda #$10 1337 b98f 2c 80 02 bit SWCHA 1338 b992 d0 10 BNE .skipL0113 1339 b994 .condpart6 1340 b994 ; complex condition detected 1341 b994 a9 fe LDA #254 1342 b996 48 PHA 1343 b997 ba TSX 1344 b998 68 PLA 1345 b999 ad 44 01 LDA joyposup 1346 b99c dd 01 01 CMP $101,x 1347 b99f d0 03 BNE .skip6then 1348 b9a1 .condpart7 1349 b9a1 20 43 cd jsr .SetBulletHome 1350 b9a4 1351 b9a4 .skip6then 1352 b9a4 .skipL0113 1353 b9a4 .L0114 ;; if joy0down && joyposdown = - 2 then gosub SetBulletHome 1354 b9a4 1355 b9a4 a9 20 lda #$20 1356 b9a6 2c 80 02 bit SWCHA 1357 b9a9 d0 10 BNE .skipL0114 1358 b9ab .condpart8 1359 b9ab ; complex condition detected 1360 b9ab a9 fe LDA #254 1361 b9ad 48 PHA 1362 b9ae ba TSX 1363 b9af 68 PLA 1364 b9b0 ad 45 01 LDA joyposdown 1365 b9b3 dd 01 01 CMP $101,x 1366 b9b6 d0 03 BNE .skip8then 1367 b9b8 .condpart9 1368 b9b8 20 43 cd jsr .SetBulletHome 1369 b9bb 1370 b9bb .skip8then 1371 b9bb .skipL0114 1372 b9bb .L0115 ;; if joy0up && joyposleft = - 2 then gosub SetBulletHome 1373 b9bb 1374 b9bb a9 10 lda #$10 1375 b9bd 2c 80 02 bit SWCHA 1376 b9c0 d0 10 BNE .skipL0115 1377 b9c2 .condpart10 1378 b9c2 ; complex condition detected 1379 b9c2 a9 fe LDA #254 1380 b9c4 48 PHA 1381 b9c5 ba TSX 1382 b9c6 68 PLA 1383 b9c7 ad 46 01 LDA joyposleft 1384 b9ca dd 01 01 CMP $101,x 1385 b9cd d0 03 BNE .skip10then 1386 b9cf .condpart11 1387 b9cf 20 43 cd jsr .SetBulletHome 1388 b9d2 1389 b9d2 .skip10then 1390 b9d2 .skipL0115 1391 b9d2 .L0116 ;; if joy0down && joyposright = - 2 then gosub SetBulletHome 1392 b9d2 1393 b9d2 a9 20 lda #$20 1394 b9d4 2c 80 02 bit SWCHA 1395 b9d7 d0 10 BNE .skipL0116 1396 b9d9 .condpart12 1397 b9d9 ; complex condition detected 1398 b9d9 a9 fe LDA #254 1399 b9db 48 PHA 1400 b9dc ba TSX 1401 b9dd 68 PLA 1402 b9de ad 47 01 LDA joyposright 1403 b9e1 dd 01 01 CMP $101,x 1404 b9e4 d0 03 BNE .skip12then 1405 b9e6 .condpart13 1406 b9e6 20 43 cd jsr .SetBulletHome 1407 b9e9 1408 b9e9 .skip12then 1409 b9e9 .skipL0116 1410 b9e9 .L0117 ;; if joy0up && joyposup = - 2 then gosub SetLaserHome 1411 b9e9 1412 b9e9 a9 10 lda #$10 1413 b9eb 2c 80 02 bit SWCHA 1414 b9ee d0 10 BNE .skipL0117 1415 b9f0 .condpart14 1416 b9f0 ; complex condition detected 1417 b9f0 a9 fe LDA #254 1418 b9f2 48 PHA 1419 b9f3 ba TSX 1420 b9f4 68 PLA 1421 b9f5 ad 44 01 LDA joyposup 1422 b9f8 dd 01 01 CMP $101,x 1423 b9fb d0 03 BNE .skip14then 1424 b9fd .condpart15 1425 b9fd 20 56 cd jsr .SetLaserHome 1426 ba00 1427 ba00 .skip14then 1428 ba00 .skipL0117 1429 ba00 .L0118 ;; if joy0down && joyposdown = - 2 then gosub SetLaserHome 1430 ba00 1431 ba00 a9 20 lda #$20 1432 ba02 2c 80 02 bit SWCHA 1433 ba05 d0 10 BNE .skipL0118 1434 ba07 .condpart16 1435 ba07 ; complex condition detected 1436 ba07 a9 fe LDA #254 1437 ba09 48 PHA 1438 ba0a ba TSX 1439 ba0b 68 PLA 1440 ba0c ad 45 01 LDA joyposdown 1441 ba0f dd 01 01 CMP $101,x 1442 ba12 d0 03 BNE .skip16then 1443 ba14 .condpart17 1444 ba14 20 56 cd jsr .SetLaserHome 1445 ba17 1446 ba17 .skip16then 1447 ba17 .skipL0118 1448 ba17 .L0119 ;; if joy0up && joyposleft = - 2 then gosub SetLaserHome 1449 ba17 1450 ba17 a9 10 lda #$10 1451 ba19 2c 80 02 bit SWCHA 1452 ba1c d0 10 BNE .skipL0119 1453 ba1e .condpart18 1454 ba1e ; complex condition detected 1455 ba1e a9 fe LDA #254 1456 ba20 48 PHA 1457 ba21 ba TSX 1458 ba22 68 PLA 1459 ba23 ad 46 01 LDA joyposleft 1460 ba26 dd 01 01 CMP $101,x 1461 ba29 d0 03 BNE .skip18then 1462 ba2b .condpart19 1463 ba2b 20 56 cd jsr .SetLaserHome 1464 ba2e 1465 ba2e .skip18then 1466 ba2e .skipL0119 1467 ba2e .L0120 ;; if joy0down && joyposright = - 2 then gosub SetLaserHome 1468 ba2e 1469 ba2e a9 20 lda #$20 1470 ba30 2c 80 02 bit SWCHA 1471 ba33 d0 10 BNE .skipL0120 1472 ba35 .condpart20 1473 ba35 ; complex condition detected 1474 ba35 a9 fe LDA #254 1475 ba37 48 PHA 1476 ba38 ba TSX 1477 ba39 68 PLA 1478 ba3a ad 47 01 LDA joyposright 1479 ba3d dd 01 01 CMP $101,x 1480 ba40 d0 03 BNE .skip20then 1481 ba42 .condpart21 1482 ba42 20 56 cd jsr .SetLaserHome 1483 ba45 1484 ba45 .skip20then 1485 ba45 .skipL0120 1486 ba45 .L0121 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1487 ba45 1488 ba45 a9 10 lda #$10 1489 ba47 2c 80 02 bit SWCHA 1490 ba4a d0 19 BNE .skipL0121 1491 ba4c .condpart22 1492 ba4c ad 42 01 LDA playerY 1493 ba4f 38 SEC 1494 ba50 e9 01 SBC #1 1495 ba52 8d 42 01 STA playerY 1496 ba55 a9 01 LDA #1 1497 ba57 8d 44 01 STA joyposup 1498 ba5a a9 00 LDA #0 1499 ba5c 8d 45 01 STA joyposdown 1500 ba5f 8d 46 01 STA joyposleft 1501 ba62 8d 47 01 STA joyposright 1502 ba65 .skipL0121 1503 ba65 .L0122 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 1504 ba65 1505 ba65 a9 20 lda #$20 1506 ba67 2c 80 02 bit SWCHA 1507 ba6a d0 1b BNE .skipL0122 1508 ba6c .condpart23 1509 ba6c ad 42 01 LDA playerY 1510 ba6f 18 CLC 1511 ba70 69 01 ADC #1 1512 ba72 8d 42 01 STA playerY 1513 ba75 a9 00 LDA #0 1514 ba77 8d 44 01 STA joyposup 1515 ba7a a9 01 LDA #1 1516 ba7c 8d 45 01 STA joyposdown 1517 ba7f a9 00 LDA #0 1518 ba81 8d 46 01 STA joyposleft 1519 ba84 8d 47 01 STA joyposright 1520 ba87 .skipL0122 1521 ba87 .L0123 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 1522 ba87 1523 ba87 2c 80 02 bit SWCHA 1524 ba8a 70 1b BVS .skipL0123 1525 ba8c .condpart24 1526 ba8c ad 41 01 LDA playerX 1527 ba8f 38 SEC 1528 ba90 e9 01 SBC #1 1529 ba92 8d 41 01 STA playerX 1530 ba95 a9 00 LDA #0 1531 ba97 8d 44 01 STA joyposup 1532 ba9a 8d 45 01 STA joyposdown 1533 ba9d a9 01 LDA #1 1534 ba9f 8d 46 01 STA joyposleft 1535 baa2 a9 00 LDA #0 1536 baa4 8d 47 01 STA joyposright 1537 baa7 .skipL0123 1538 baa7 .L0124 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 1539 baa7 1540 baa7 2c 80 02 bit SWCHA 1541 baaa 30 19 BMI .skipL0124 1542 baac .condpart25 1543 baac ad 41 01 LDA playerX 1544 baaf 18 CLC 1545 bab0 69 01 ADC #1 1546 bab2 8d 41 01 STA playerX 1547 bab5 a9 00 LDA #0 1548 bab7 8d 44 01 STA joyposup 1549 baba 8d 45 01 STA joyposdown 1550 babd 8d 46 01 STA joyposleft 1551 bac0 a9 01 LDA #1 1552 bac2 8d 47 01 STA joyposright 1553 bac5 .skipL0124 1554 bac5 .L0125 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1555 bac5 1556 bac5 2c 02 21 bit sINPT1 1557 bac8 10 29 BPL .skipL0125 1558 baca .condpart26 1559 baca ad 44 01 LDA joyposup 1560 bacd c9 01 CMP #1 1561 bacf d0 22 BNE .skip26then 1562 bad1 .condpart27 1563 bad1 ad 49 01 LDA bulletY 1564 bad4 38 SEC 1565 bad5 e9 05 SBC #5 1566 bad7 8d 49 01 STA bulletY 1567 bada a9 01 lda #1 1568 badc 85 de sta sfxschedulelock 1569 bade a9 bc lda #sfx_pulsecannon 1572 bae4 85 e1 sta sfxinstrumenthi 1573 bae6 a9 00 lda #0 1574 bae8 85 e2 sta sfxpitchoffset ; no pitch modification 1575 baea 85 e3 sta sfxnoteindex ; not a musical note 1576 baec 20 58 f2 jsr schedulesfx 1577 baef a9 00 lda #0 1578 baf1 85 de sta sfxschedulelock 1579 baf3 .skip26then 1580 baf3 .skipL0125 1581 baf3 .L0126 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1582 baf3 1583 baf3 2c 02 21 bit sINPT1 1584 baf6 10 29 BPL .skipL0126 1585 baf8 .condpart28 1586 baf8 ad 45 01 LDA joyposdown 1587 bafb c9 01 CMP #1 1588 bafd d0 22 BNE .skip28then 1589 baff .condpart29 1590 baff ad 49 01 LDA bulletY 1591 bb02 38 SEC 1592 bb03 e9 05 SBC #5 1593 bb05 8d 49 01 STA bulletY 1594 bb08 a9 01 lda #1 1595 bb0a 85 de sta sfxschedulelock 1596 bb0c a9 bc lda #sfx_pulsecannon 1599 bb12 85 e1 sta sfxinstrumenthi 1600 bb14 a9 00 lda #0 1601 bb16 85 e2 sta sfxpitchoffset ; no pitch modification 1602 bb18 85 e3 sta sfxnoteindex ; not a musical note 1603 bb1a 20 58 f2 jsr schedulesfx 1604 bb1d a9 00 lda #0 1605 bb1f 85 de sta sfxschedulelock 1606 bb21 .skip28then 1607 bb21 .skipL0126 1608 bb21 .L0127 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1609 bb21 1610 bb21 2c 02 21 bit sINPT1 1611 bb24 10 29 BPL .skipL0127 1612 bb26 .condpart30 1613 bb26 ad 46 01 LDA joyposleft 1614 bb29 c9 01 CMP #1 1615 bb2b d0 22 BNE .skip30then 1616 bb2d .condpart31 1617 bb2d ad 49 01 LDA bulletY 1618 bb30 38 SEC 1619 bb31 e9 05 SBC #5 1620 bb33 8d 49 01 STA bulletY 1621 bb36 a9 01 lda #1 1622 bb38 85 de sta sfxschedulelock 1623 bb3a a9 bc lda #sfx_pulsecannon 1626 bb40 85 e1 sta sfxinstrumenthi 1627 bb42 a9 00 lda #0 1628 bb44 85 e2 sta sfxpitchoffset ; no pitch modification 1629 bb46 85 e3 sta sfxnoteindex ; not a musical note 1630 bb48 20 58 f2 jsr schedulesfx 1631 bb4b a9 00 lda #0 1632 bb4d 85 de sta sfxschedulelock 1633 bb4f .skip30then 1634 bb4f .skipL0127 1635 bb4f .L0128 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1636 bb4f 1637 bb4f 2c 02 21 bit sINPT1 1638 bb52 10 29 BPL .skipL0128 1639 bb54 .condpart32 1640 bb54 ad 47 01 LDA joyposright 1641 bb57 c9 01 CMP #1 1642 bb59 d0 22 BNE .skip32then 1643 bb5b .condpart33 1644 bb5b ad 49 01 LDA bulletY 1645 bb5e 38 SEC 1646 bb5f e9 05 SBC #5 1647 bb61 8d 49 01 STA bulletY 1648 bb64 a9 01 lda #1 1649 bb66 85 de sta sfxschedulelock 1650 bb68 a9 bc lda #sfx_pulsecannon 1653 bb6e 85 e1 sta sfxinstrumenthi 1654 bb70 a9 00 lda #0 1655 bb72 85 e2 sta sfxpitchoffset ; no pitch modification 1656 bb74 85 e3 sta sfxnoteindex ; not a musical note 1657 bb76 20 58 f2 jsr schedulesfx 1658 bb79 a9 00 lda #0 1659 bb7b 85 de sta sfxschedulelock 1660 bb7d .skip32then 1661 bb7d .skipL0128 1662 bb7d .L0129 ;; if !joy0fire then bulletX = playerX + 2 : bulletY = playerY - 8 1663 bb7d 1664 bb7d 2c 02 21 bit sINPT1 1665 bb80 30 12 BMI .skipL0129 1666 bb82 .condpart34 1667 bb82 ad 41 01 LDA playerX 1668 bb85 18 CLC 1669 bb86 69 02 ADC #2 1670 bb88 8d 48 01 STA bulletX 1671 bb8b ad 42 01 LDA playerY 1672 bb8e 38 SEC 1673 bb8f e9 08 SBC #8 1674 bb91 8d 49 01 STA bulletY 1675 bb94 .skipL0129 1676 bb94 . 1677 bb94 ;; 1678 bb94 1679 bb94 . 1680 bb94 ;; 1681 bb94 1682 bb94 . 1683 bb94 ;; 1684 bb94 1685 bb94 .L0130 ;; if playerX > 152 then playerX = playerX - 1 1686 bb94 1687 bb94 a9 98 LDA #152 1688 bb96 cd 41 01 CMP playerX 1689 bb99 b0 09 BCS .skipL0130 1690 bb9b .condpart35 1691 bb9b ad 41 01 LDA playerX 1692 bb9e 38 SEC 1693 bb9f e9 01 SBC #1 1694 bba1 8d 41 01 STA playerX 1695 bba4 .skipL0130 1696 bba4 .L0131 ;; if playerX < 1 then playerX = playerX + 1 1697 bba4 1698 bba4 ad 41 01 LDA playerX 1699 bba7 c9 01 CMP #1 1700 bba9 b0 09 BCS .skipL0131 1701 bbab .condpart36 1702 bbab ad 41 01 LDA playerX 1703 bbae 18 CLC 1704 bbaf 69 01 ADC #1 1705 bbb1 8d 41 01 STA playerX 1706 bbb4 .skipL0131 1707 bbb4 .L0132 ;; if playerY > 177 then playerY = playerY - 1 1708 bbb4 1709 bbb4 a9 b1 LDA #177 1710 bbb6 cd 42 01 CMP playerY 1711 bbb9 b0 09 BCS .skipL0132 1712 bbbb .condpart37 1713 bbbb ad 42 01 LDA playerY 1714 bbbe 38 SEC 1715 bbbf e9 01 SBC #1 1716 bbc1 8d 42 01 STA playerY 1717 bbc4 .skipL0132 1718 bbc4 .L0133 ;; if playerY < 1 then playerY = playerY + 1 1719 bbc4 1720 bbc4 ad 42 01 LDA playerY 1721 bbc7 c9 01 CMP #1 1722 bbc9 b0 09 BCS .skipL0133 1723 bbcb .condpart38 1724 bbcb ad 42 01 LDA playerY 1725 bbce 18 CLC 1726 bbcf 69 01 ADC #1 1727 bbd1 8d 42 01 STA playerY 1728 bbd4 .skipL0133 1729 bbd4 .L0134 ;; if bulletY > 183 then bulletY = bulletY - 1 1730 bbd4 1731 bbd4 a9 b7 LDA #183 1732 bbd6 cd 49 01 CMP bulletY 1733 bbd9 b0 09 BCS .skipL0134 1734 bbdb .condpart39 1735 bbdb ad 49 01 LDA bulletY 1736 bbde 38 SEC 1737 bbdf e9 01 SBC #1 1738 bbe1 8d 49 01 STA bulletY 1739 bbe4 .skipL0134 1740 bbe4 .L0135 ;; if bulletY < 1 then bulletY = bulletY + 1 1741 bbe4 1742 bbe4 ad 49 01 LDA bulletY 1743 bbe7 c9 01 CMP #1 1744 bbe9 b0 09 BCS .skipL0135 1745 bbeb .condpart40 1746 bbeb ad 49 01 LDA bulletY 1747 bbee 18 CLC 1748 bbef 69 01 ADC #1 1749 bbf1 8d 49 01 STA bulletY 1750 bbf4 .skipL0135 1751 bbf4 .L0136 ;; if twinlaserY > 183 then twinlaserY = twinlaserY - 1 1752 bbf4 1753 bbf4 a9 b7 LDA #183 1754 bbf6 cd 66 01 CMP twinlaserY 1755 bbf9 b0 09 BCS .skipL0136 1756 bbfb .condpart41 1757 bbfb ad 66 01 LDA twinlaserY 1758 bbfe 38 SEC 1759 bbff e9 01 SBC #1 1760 bc01 8d 66 01 STA twinlaserY 1761 bc04 .skipL0136 1762 bc04 .L0137 ;; if twinlaserY < 1 then twinlaserY = twinlaserY + 1 1763 bc04 1764 bc04 ad 66 01 LDA twinlaserY 1765 bc07 c9 01 CMP #1 1766 bc09 b0 09 BCS .skipL0137 1767 bc0b .condpart42 1768 bc0b ad 66 01 LDA twinlaserY 1769 bc0e 18 CLC 1770 bc0f 69 01 ADC #1 1771 bc11 8d 66 01 STA twinlaserY 1772 bc14 .skipL0137 1773 bc14 . 1774 bc14 ;; 1775 bc14 1776 bc14 .L0138 ;; gosub check_collisions 1777 bc14 1778 bc14 20 53 ca jsr .check_collisions 1779 bc17 1780 bc17 .L0139 ;; if isDead_flag then goto lose_a_life 1781 bc17 1782 bc17 ad 6a 01 LDA isDead_flag 1783 bc1a f0 03 BEQ .skipL0139 1784 bc1c .condpart43 1785 bc1c 4c 38 d9 jmp .lose_a_life 1786 bc1f 1787 bc1f .skipL0139 1788 bc1f . 1789 bc1f ;; 1790 bc1f 1791 bc1f . 1792 bc1f ;; 1793 bc1f 1794 bc1f . 1795 bc1f ;; 1796 bc1f 1797 bc1f .L0140 ;; if enemy_shotX > 160 then enemy_shotX = enemy_shotX - 1 1798 bc1f 1799 bc1f a9 a0 LDA #160 1800 bc21 cd 4a 01 CMP enemy_shotX 1801 bc24 b0 09 BCS .skipL0140 1802 bc26 .condpart44 1803 bc26 ad 4a 01 LDA enemy_shotX 1804 bc29 38 SEC 1805 bc2a e9 01 SBC #1 1806 bc2c 8d 4a 01 STA enemy_shotX 1807 bc2f .skipL0140 1808 bc2f .L0141 ;; if enemy_shotX < 1 then enemy_shotX = enemy_shotX + 1 1809 bc2f 1810 bc2f ad 4a 01 LDA enemy_shotX 1811 bc32 c9 01 CMP #1 1812 bc34 b0 09 BCS .skipL0141 1813 bc36 .condpart45 1814 bc36 ad 4a 01 LDA enemy_shotX 1815 bc39 18 CLC 1816 bc3a 69 01 ADC #1 1817 bc3c 8d 4a 01 STA enemy_shotX 1818 bc3f .skipL0141 1819 bc3f .L0142 ;; if enemy_shotY > 191 then enemy_shotY = enemy_shotY - 1 1820 bc3f 1821 bc3f a9 bf LDA #191 1822 bc41 cd 4b 01 CMP enemy_shotY 1823 bc44 b0 09 BCS .skipL0142 1824 bc46 .condpart46 1825 bc46 ad 4b 01 LDA enemy_shotY 1826 bc49 38 SEC 1827 bc4a e9 01 SBC #1 1828 bc4c 8d 4b 01 STA enemy_shotY 1829 bc4f .skipL0142 1830 bc4f .L0143 ;; if enemy_shotY < 1 then enemy_shotY = enemy_shotY + 1 1831 bc4f 1832 bc4f ad 4b 01 LDA enemy_shotY 1833 bc52 c9 01 CMP #1 1834 bc54 b0 09 BCS .skipL0143 1835 bc56 .condpart47 1836 bc56 ad 4b 01 LDA enemy_shotY 1837 bc59 18 CLC 1838 bc5a 69 01 ADC #1 1839 bc5c 8d 4b 01 STA enemy_shotY 1840 bc5f .skipL0143 1841 bc5f .L0144 ;; if power_upX > 155 then power_upX = power_upX - 5 1842 bc5f 1843 bc5f a9 9b LDA #155 1844 bc61 cd 50 01 CMP power_upX 1845 bc64 b0 09 BCS .skipL0144 1846 bc66 .condpart48 1847 bc66 ad 50 01 LDA power_upX 1848 bc69 38 SEC 1849 bc6a e9 05 SBC #5 1850 bc6c 8d 50 01 STA power_upX 1851 bc6f .skipL0144 1852 bc6f .L0145 ;; if power_upX < 1 then power_upX = power_upX + 5 1853 bc6f 1854 bc6f ad 50 01 LDA power_upX 1855 bc72 c9 01 CMP #1 1856 bc74 b0 09 BCS .skipL0145 1857 bc76 .condpart49 1858 bc76 ad 50 01 LDA power_upX 1859 bc79 18 CLC 1860 bc7a 69 05 ADC #5 1861 bc7c 8d 50 01 STA power_upX 1862 bc7f .skipL0145 1863 bc7f .L0146 ;; if power_upY > 191 then power_upY = power_upY - 5 1864 bc7f 1865 bc7f a9 bf LDA #191 1866 bc81 cd 51 01 CMP power_upY 1867 bc84 b0 09 BCS .skipL0146 1868 bc86 .condpart50 1869 bc86 ad 51 01 LDA power_upY 1870 bc89 38 SEC 1871 bc8a e9 05 SBC #5 1872 bc8c 8d 51 01 STA power_upY 1873 bc8f .skipL0146 1874 bc8f .L0147 ;; if power_upY < 1 then power_upY = power_upY + 5 1875 bc8f 1876 bc8f ad 51 01 LDA power_upY 1877 bc92 c9 01 CMP #1 1878 bc94 b0 09 BCS .skipL0147 1879 bc96 .condpart51 1880 bc96 ad 51 01 LDA power_upY 1881 bc99 18 CLC 1882 bc9a 69 05 ADC #5 1883 bc9c 8d 51 01 STA power_upY 1884 bc9f .skipL0147 1885 bc9f .L0148 ;; if enemy01_X > 160 then enemy01_X = enemy01_X - 1 1886 bc9f 1887 bc9f a9 a0 LDA #160 1888 bca1 cd 57 01 CMP enemy01_X 1889 bca4 b0 09 BCS .skipL0148 1890 bca6 .condpart52 1891 bca6 ad 57 01 LDA enemy01_X 1892 bca9 38 SEC 1893 bcaa e9 01 SBC #1 1894 bcac 8d 57 01 STA enemy01_X 1895 bcaf .skipL0148 1896 bcaf .L0149 ;; if enemy01_X < 1 then enemy01_X = enemy01_X + 1 1897 bcaf 1898 bcaf ad 57 01 LDA enemy01_X 1899 bcb2 c9 01 CMP #1 1900 bcb4 b0 09 BCS .skipL0149 1901 bcb6 .condpart53 1902 bcb6 ad 57 01 LDA enemy01_X 1903 bcb9 18 CLC 1904 bcba 69 01 ADC #1 1905 bcbc 8d 57 01 STA enemy01_X 1906 bcbf .skipL0149 1907 bcbf .L0150 ;; if enemy01_Y > 220 then enemy01_Y = enemy01_Y - 1 1908 bcbf 1909 bcbf a9 dc LDA #220 1910 bcc1 cd 58 01 CMP enemy01_Y 1911 bcc4 b0 09 BCS .skipL0150 1912 bcc6 .condpart54 1913 bcc6 ad 58 01 LDA enemy01_Y 1914 bcc9 38 SEC 1915 bcca e9 01 SBC #1 1916 bccc 8d 58 01 STA enemy01_Y 1917 bccf .skipL0150 1918 bccf .L0151 ;; if enemy01_Y < - 16 then enemy01_Y = enemy01_Y + 1 1919 bccf 1920 bccf ; complex condition detected 1921 bccf a9 f0 LDA #240 1922 bcd1 48 PHA 1923 bcd2 ba TSX 1924 bcd3 68 PLA 1925 bcd4 ad 58 01 LDA enemy01_Y 1926 bcd7 dd 01 01 CMP $101,x 1927 bcda b0 09 BCS .skipL0151 1928 bcdc .condpart55 1929 bcdc ad 58 01 LDA enemy01_Y 1930 bcdf 18 CLC 1931 bce0 69 01 ADC #1 1932 bce2 8d 58 01 STA enemy01_Y 1933 bce5 .skipL0151 1934 bce5 .L0152 ;; if extra_shipX > 160 then extra_shipX = extra_shipX - 1 1935 bce5 1936 bce5 a9 a0 LDA #160 1937 bce7 cd 60 01 CMP extra_shipX 1938 bcea b0 09 BCS .skipL0152 1939 bcec .condpart56 1940 bcec ad 60 01 LDA extra_shipX 1941 bcef 38 SEC 1942 bcf0 e9 01 SBC #1 1943 bcf2 8d 60 01 STA extra_shipX 1944 bcf5 .skipL0152 1945 bcf5 .L0153 ;; if extra_shipX < 1 then extra_shipX = extra_shipX + 1 1946 bcf5 1947 bcf5 ad 60 01 LDA extra_shipX 1948 bcf8 c9 01 CMP #1 1949 bcfa b0 09 BCS .skipL0153 1950 bcfc .condpart57 1951 bcfc ad 60 01 LDA extra_shipX 1952 bcff 18 CLC 1953 bd00 69 01 ADC #1 1954 bd02 8d 60 01 STA extra_shipX 1955 bd05 .skipL0153 1956 bd05 .L0154 ;; if extra_shipY > 191 then extra_shipY = extra_shipY - 1 1957 bd05 1958 bd05 a9 bf LDA #191 1959 bd07 cd 61 01 CMP extra_shipY 1960 bd0a b0 09 BCS .skipL0154 1961 bd0c .condpart58 1962 bd0c ad 61 01 LDA extra_shipY 1963 bd0f 38 SEC 1964 bd10 e9 01 SBC #1 1965 bd12 8d 61 01 STA extra_shipY 1966 bd15 .skipL0154 1967 bd15 .L0155 ;; if extra_shipY < 1 then extra_shipY = extra_shipY + 1 1968 bd15 1969 bd15 ad 61 01 LDA extra_shipY 1970 bd18 c9 01 CMP #1 1971 bd1a b0 09 BCS .skipL0155 1972 bd1c .condpart59 1973 bd1c ad 61 01 LDA extra_shipY 1974 bd1f 18 CLC 1975 bd20 69 01 ADC #1 1976 bd22 8d 61 01 STA extra_shipY 1977 bd25 .skipL0155 1978 bd25 . 1979 bd25 ;; 1980 bd25 1981 bd25 .L0156 ;; if rDirection = 0 then enemy_shotX = enemy_shotX + rMovement1 : enemy_shotY = enemy_shotY + rMovement2 1982 bd25 1983 bd25 ad 4f 01 LDA rDirection 1984 bd28 c9 00 CMP #0 1985 bd2a d0 14 BNE .skipL0156 1986 bd2c .condpart60 1987 bd2c ad 4a 01 LDA enemy_shotX 1988 bd2f 18 CLC 1989 bd30 6d 4e 01 ADC rMovement1 1990 bd33 8d 4a 01 STA enemy_shotX 1991 bd36 ad 4b 01 LDA enemy_shotY 1992 bd39 18 CLC 1993 bd3a 6d 53 01 ADC rMovement2 1994 bd3d 8d 4b 01 STA enemy_shotY 1995 bd40 .skipL0156 1996 bd40 .L0157 ;; if rDirection = 1 then enemy_shotX = enemy_shotX + rMovement3 : enemy_shotY = enemy_shotY + rMovement4 1997 bd40 1998 bd40 ad 4f 01 LDA rDirection 1999 bd43 c9 01 CMP #1 2000 bd45 d0 14 BNE .skipL0157 2001 bd47 .condpart61 2002 bd47 ad 4a 01 LDA enemy_shotX 2003 bd4a 18 CLC 2004 bd4b 6d 5a 01 ADC rMovement3 2005 bd4e 8d 4a 01 STA enemy_shotX 2006 bd51 ad 4b 01 LDA enemy_shotY 2007 bd54 18 CLC 2008 bd55 6d 5b 01 ADC rMovement4 2009 bd58 8d 4b 01 STA enemy_shotY 2010 bd5b .skipL0157 2011 bd5b .L0158 ;; if rDirection = 2 then enemy_shotX = enemy_shotX + rMovement5 : enemy_shotY = enemy_shotY + rMovement6 2012 bd5b 2013 bd5b ad 4f 01 LDA rDirection 2014 bd5e c9 02 CMP #2 2015 bd60 d0 14 BNE .skipL0158 2016 bd62 .condpart62 2017 bd62 ad 4a 01 LDA enemy_shotX 2018 bd65 18 CLC 2019 bd66 6d 5c 01 ADC rMovement5 2020 bd69 8d 4a 01 STA enemy_shotX 2021 bd6c ad 4b 01 LDA enemy_shotY 2022 bd6f 18 CLC 2023 bd70 6d 5d 01 ADC rMovement6 2024 bd73 8d 4b 01 STA enemy_shotY 2025 bd76 .skipL0158 2026 bd76 .L0159 ;; if rDirection = 3 then enemy_shotX = enemy_shotX + rMovement4 : enemy_shotY = enemy_shotY + rMovement2 2027 bd76 2028 bd76 ad 4f 01 LDA rDirection 2029 bd79 c9 03 CMP #3 2030 bd7b d0 14 BNE .skipL0159 2031 bd7d .condpart63 2032 bd7d ad 4a 01 LDA enemy_shotX 2033 bd80 18 CLC 2034 bd81 6d 5b 01 ADC rMovement4 2035 bd84 8d 4a 01 STA enemy_shotX 2036 bd87 ad 4b 01 LDA enemy_shotY 2037 bd8a 18 CLC 2038 bd8b 6d 53 01 ADC rMovement2 2039 bd8e 8d 4b 01 STA enemy_shotY 2040 bd91 .skipL0159 2041 bd91 . 2042 bd91 ;; 2043 bd91 2044 bd91 .L0160 ;; if rDirection = 0 then power_upX = power_upX + rMovement5 : power_upY = power_upY + rMovement2 2045 bd91 2046 bd91 ad 4f 01 LDA rDirection 2047 bd94 c9 00 CMP #0 2048 bd96 d0 14 BNE .skipL0160 2049 bd98 .condpart64 2050 bd98 ad 50 01 LDA power_upX 2051 bd9b 18 CLC 2052 bd9c 6d 5c 01 ADC rMovement5 2053 bd9f 8d 50 01 STA power_upX 2054 bda2 ad 51 01 LDA power_upY 2055 bda5 18 CLC 2056 bda6 6d 53 01 ADC rMovement2 2057 bda9 8d 51 01 STA power_upY 2058 bdac .skipL0160 2059 bdac .L0161 ;; if rDirection = 1 then power_upX = power_upX + rMovement3 : power_upY = power_upY + rMovement4 2060 bdac 2061 bdac ad 4f 01 LDA rDirection 2062 bdaf c9 01 CMP #1 2063 bdb1 d0 14 BNE .skipL0161 2064 bdb3 .condpart65 2065 bdb3 ad 50 01 LDA power_upX 2066 bdb6 18 CLC 2067 bdb7 6d 5a 01 ADC rMovement3 2068 bdba 8d 50 01 STA power_upX 2069 bdbd ad 51 01 LDA power_upY 2070 bdc0 18 CLC 2071 bdc1 6d 5b 01 ADC rMovement4 2072 bdc4 8d 51 01 STA power_upY 2073 bdc7 .skipL0161 2074 bdc7 .L0162 ;; if rDirection = 2 then power_upX = power_upX + rMovement1 : power_upY = power_upY + rMovement6 2075 bdc7 2076 bdc7 ad 4f 01 LDA rDirection 2077 bdca c9 02 CMP #2 2078 bdcc d0 14 BNE .skipL0162 2079 bdce .condpart66 2080 bdce ad 50 01 LDA power_upX 2081 bdd1 18 CLC 2082 bdd2 6d 4e 01 ADC rMovement1 2083 bdd5 8d 50 01 STA power_upX 2084 bdd8 ad 51 01 LDA power_upY 2085 bddb 18 CLC 2086 bddc 6d 5d 01 ADC rMovement6 2087 bddf 8d 51 01 STA power_upY 2088 bde2 .skipL0162 2089 bde2 . 2090 bde2 ;; 2091 bde2 2092 bde2 .L0163 ;; if rDirection = 0 then enemy01_X = enemy01_X + rMovement4 : enemy01_Y = enemy01_Y + rMovement2 2093 bde2 2094 bde2 ad 4f 01 LDA rDirection 2095 bde5 c9 00 CMP #0 2096 bde7 d0 14 BNE .skipL0163 2097 bde9 .condpart67 2098 bde9 ad 57 01 LDA enemy01_X 2099 bdec 18 CLC 2100 bded 6d 5b 01 ADC rMovement4 2101 bdf0 8d 57 01 STA enemy01_X 2102 bdf3 ad 58 01 LDA enemy01_Y 2103 bdf6 18 CLC 2104 bdf7 6d 53 01 ADC rMovement2 2105 bdfa 8d 58 01 STA enemy01_Y 2106 bdfd .skipL0163 2107 bdfd .L0164 ;; if rDirection = 1 then enemy01_X = enemy01_X + rMovement3 : enemy01_Y = enemy01_Y + rMovement4 2108 bdfd 2109 bdfd ad 4f 01 LDA rDirection 2110 be00 c9 01 CMP #1 2111 be02 d0 14 BNE .skipL0164 2112 be04 .condpart68 2113 be04 ad 57 01 LDA enemy01_X 2114 be07 18 CLC 2115 be08 6d 5a 01 ADC rMovement3 2116 be0b 8d 57 01 STA enemy01_X 2117 be0e ad 58 01 LDA enemy01_Y 2118 be11 18 CLC 2119 be12 6d 5b 01 ADC rMovement4 2120 be15 8d 58 01 STA enemy01_Y 2121 be18 .skipL0164 2122 be18 .L0165 ;; if rDirection = 2 then enemy01_X = enemy01_X + rMovement6 : enemy01_Y = enemy01_Y + rMovement6 2123 be18 2124 be18 ad 4f 01 LDA rDirection 2125 be1b c9 02 CMP #2 2126 be1d d0 14 BNE .skipL0165 2127 be1f .condpart69 2128 be1f ad 57 01 LDA enemy01_X 2129 be22 18 CLC 2130 be23 6d 5d 01 ADC rMovement6 2131 be26 8d 57 01 STA enemy01_X 2132 be29 ad 58 01 LDA enemy01_Y 2133 be2c 18 CLC 2134 be2d 6d 5d 01 ADC rMovement6 2135 be30 8d 58 01 STA enemy01_Y 2136 be33 .skipL0165 2137 be33 . 2138 be33 ;; 2139 be33 2140 be33 .L0166 ;; if rDirection = 0 then extra_shipX = extra_shipX + rMovement5 : extra_shipY = extra_shipY + rMovement2 2141 be33 2142 be33 ad 4f 01 LDA rDirection 2143 be36 c9 00 CMP #0 2144 be38 d0 14 BNE .skipL0166 2145 be3a .condpart70 2146 be3a ad 60 01 LDA extra_shipX 2147 be3d 18 CLC 2148 be3e 6d 5c 01 ADC rMovement5 2149 be41 8d 60 01 STA extra_shipX 2150 be44 ad 61 01 LDA extra_shipY 2151 be47 18 CLC 2152 be48 6d 53 01 ADC rMovement2 2153 be4b 8d 61 01 STA extra_shipY 2154 be4e .skipL0166 2155 be4e . 2156 be4e ;; 2157 be4e 2158 be4e .L0167 ;; if playerFlag = 1 && explosion_aniframe = 1 then playsfx sfx_explosion 2159 be4e 2160 be4e ad 4d 01 LDA playerFlag 2161 be51 c9 01 CMP #1 2162 be53 d0 20 BNE .skipL0167 2163 be55 .condpart71 2164 be55 ad 63 01 LDA explosion_aniframe 2165 be58 c9 01 CMP #1 2166 be5a d0 19 BNE .skip71then 2167 be5c .condpart72 2168 be5c a9 01 lda #1 2169 be5e 85 de sta sfxschedulelock 2170 be60 a9 46 lda #sfx_explosion 2173 be66 85 e1 sta sfxinstrumenthi 2174 be68 a9 00 lda #0 2175 be6a 85 e2 sta sfxpitchoffset ; no pitch modification 2176 be6c 85 e3 sta sfxnoteindex ; not a musical note 2177 be6e 20 58 f2 jsr schedulesfx 2178 be71 a9 00 lda #0 2179 be73 85 de sta sfxschedulelock 2180 be75 .skip71then 2181 be75 .skipL0167 2182 be75 .L0168 ;; if playerFlag = 1 then enemy_shotSlowdown = enemy_shotSlowdown + 1 2183 be75 2184 be75 ad 4d 01 LDA playerFlag 2185 be78 c9 01 CMP #1 2186 be7a d0 09 BNE .skipL0168 2187 be7c .condpart73 2188 be7c ad 56 01 LDA enemy_shotSlowdown 2189 be7f 18 CLC 2190 be80 69 01 ADC #1 2191 be82 8d 56 01 STA enemy_shotSlowdown 2192 be85 .skipL0168 2193 be85 .L0169 ;; if playerFlag = 1 && enemy_shotSlowdown = 8 then enemy_shotSlowdown = 0 2194 be85 2195 be85 ad 4d 01 LDA playerFlag 2196 be88 c9 01 CMP #1 2197 be8a d0 0c BNE .skipL0169 2198 be8c .condpart74 2199 be8c ad 56 01 LDA enemy_shotSlowdown 2200 be8f c9 08 CMP #8 2201 be91 d0 05 BNE .skip74then 2202 be93 .condpart75 2203 be93 a9 00 LDA #0 2204 be95 8d 56 01 STA enemy_shotSlowdown 2205 be98 .skip74then 2206 be98 .skipL0169 2207 be98 .L0170 ;; if playerFlag = 1 && enemy_shotSlowdown = 2 then explosion_aniframe = explosion_aniframe + 1 2208 be98 2209 be98 ad 4d 01 LDA playerFlag 2210 be9b c9 01 CMP #1 2211 be9d d0 10 BNE .skipL0170 2212 be9f .condpart76 2213 be9f ad 56 01 LDA enemy_shotSlowdown 2214 bea2 c9 02 CMP #2 2215 bea4 d0 09 BNE .skip76then 2216 bea6 .condpart77 2217 bea6 ad 63 01 LDA explosion_aniframe 2218 bea9 18 CLC 2219 beaa 69 01 ADC #1 2220 beac 8d 63 01 STA explosion_aniframe 2221 beaf .skip76then 2222 beaf .skipL0170 2223 beaf .L0171 ;; if playerFlag = 1 && explosion_aniframe > 11 then explosion_aniframe = 200 2224 beaf 2225 beaf ad 4d 01 LDA playerFlag 2226 beb2 c9 01 CMP #1 2227 beb4 d0 0c BNE .skipL0171 2228 beb6 .condpart78 2229 beb6 a9 0b LDA #11 2230 beb8 cd 63 01 CMP explosion_aniframe 2231 bebb b0 05 BCS .skip78then 2232 bebd .condpart79 2233 bebd a9 c8 LDA #200 2234 bebf 8d 63 01 STA explosion_aniframe 2235 bec2 .skip78then 2236 bec2 .skipL0171 2237 bec2 . 2238 bec2 ;; 2239 bec2 2240 bec2 . 2241 bec2 ;; 2242 bec2 2243 bec2 .L0172 ;; restorescreen 2244 bec2 2245 bec2 20 9e f0 jsr restorescreen 2246 bec5 .L0173 ;; gosub draw_scores 2247 bec5 2248 bec5 20 ea c9 jsr .draw_scores 2249 bec8 2250 bec8 .L0174 ;; gosub draw_sprites 2251 bec8 2252 bec8 20 00 c8 jsr .draw_sprites 2253 becb 2254 becb .L0175 ;; drawscreen 2255 becb 2256 becb 20 c0 f0 jsr drawscreen 2257 bece . 2258 bece ;; 2259 bece 2260 bece .L0176 ;; goto mainloop 2261 bece 2262 bece 4c ea b8 jmp .mainloop 2263 bed1 2264 bed1 .L0177 ;; dmahole 1 2265 bed1 2266 bed1 4c 00 c8 jmp dmahole_1 2267 bed1 DMAHOLEEND0 SET . 300 bytes of ROM space left in DMA hole 0. 2268 bed1 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)]d , "bytes of ROM space left in DMA hole 0." 2269 bed4 - if ((256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)) < 0 2270 bed4 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 2271 bed4 endif 2272 bed4 2273 c000 ORG $C000,0 ; ************* 2274 c000 2275 c000 vertical_shooting_1up 2276 c000 15 55 HEX 1555 2277 c002 vertical_shooting_explosion_01 2278 c002 02 80 HEX 0280 2279 c004 vertical_shooting_explosion_01_tallsprite_00 2280 c004 00 00 HEX 0000 2281 c006 vertical_shooting_explosion_02 2282 c006 05 50 HEX 0550 2283 c008 vertical_shooting_explosion_02_tallsprite_00 2284 c008 00 00 HEX 0000 2285 c00a vertical_shooting_explosion_03 2286 c00a 15 54 HEX 1554 2287 c00c vertical_shooting_explosion_03_tallsprite_00 2288 c00c 00 00 HEX 0000 2289 c00e vertical_shooting_explosion_04 2290 c00e 07 d0 HEX 07d0 2291 c010 vertical_shooting_explosion_04_tallsprite_00 2292 c010 00 00 HEX 0000 2293 c012 vertical_shooting_explosion_05 2294 c012 0c 30 HEX 0c30 2295 c014 vertical_shooting_explosion_05_tallsprite_00 2296 c014 01 40 HEX 0140 2297 c016 vertical_shooting_explosion_06 2298 c016 00 00 HEX 0000 2299 c018 vertical_shooting_explosion_06_tallsprite_00 2300 c018 01 40 HEX 0140 2301 c01a vertical_shooting_explosion_07 2302 c01a 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2303 c02e vertical_shooting_explosion_07_tallsprite_00 2304 c02e 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2305 c042 vertical_shooting_explosion_08 2306 c042 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2307 c056 vertical_shooting_explosion_08_tallsprite_00 2308 c056 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2309 c06a vertical_shooting_explosion_09 2310 c06a 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2311 c07e vertical_shooting_explosion_09_tallsprite_00 2312 c07e 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2313 c092 vertical_shooting_explosion_10 2314 c092 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2315 c0a6 vertical_shooting_explosion_10_tallsprite_00 2316 c0a6 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2317 c0ba vertical_shooting_laser 2318 c0ba 88 HEX 88 2319 c0bb vertical_shooting_laser_tallsprite_00 2320 c0bb cc HEX cc 2321 c0bc 2322 c100 ORG $C100,0 ; ************* 2323 c100 2324 c100 ;vertical_shooting_1up 2325 c100 ea a9 HEX eaa9 2326 c102 ;vertical_shooting_explosion_01 2327 c102 01 40 HEX 0140 2328 c104 ;vertical_shooting_explosion_01_tallsprite_00 2329 c104 00 00 HEX 0000 2330 c106 ;vertical_shooting_explosion_02 2331 c106 09 60 HEX 0960 2332 c108 ;vertical_shooting_explosion_02_tallsprite_00 2333 c108 00 00 HEX 0000 2334 c10a ;vertical_shooting_explosion_03 2335 c10a 25 58 HEX 2558 2336 c10c ;vertical_shooting_explosion_03_tallsprite_00 2337 c10c 00 00 HEX 0000 2338 c10e ;vertical_shooting_explosion_04 2339 c10e 05 50 HEX 0550 2340 c110 ;vertical_shooting_explosion_04_tallsprite_00 2341 c110 02 80 HEX 0280 2342 c112 ;vertical_shooting_explosion_05 2343 c112 0b e0 HEX 0be0 2344 c114 ;vertical_shooting_explosion_05_tallsprite_00 2345 c114 01 40 HEX 0140 2346 c116 ;vertical_shooting_explosion_06 2347 c116 0c 30 HEX 0c30 2348 c118 ;vertical_shooting_explosion_06_tallsprite_00 2349 c118 01 40 HEX 0140 2350 c11a ;vertical_shooting_explosion_07 2351 c11a 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2352 c12e ;vertical_shooting_explosion_07_tallsprite_00 2353 c12e 00 00 00 00* HEX 0000000000000140014001400140014001400000 2354 c142 ;vertical_shooting_explosion_08 2355 c142 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2356 c156 ;vertical_shooting_explosion_08_tallsprite_00 2357 c156 00 00 00 00* HEX 0000000000000140014001400140014001400000 2358 c16a ;vertical_shooting_explosion_09 2359 c16a 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2360 c17e ;vertical_shooting_explosion_09_tallsprite_00 2361 c17e 00 00 00 00* HEX 0000000000000140014001400140014001400000 2362 c192 ;vertical_shooting_explosion_10 2363 c192 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2364 c1a6 ;vertical_shooting_explosion_10_tallsprite_00 2365 c1a6 00 00 00 00* HEX 0000000000000140014001400140014001400000 2366 c1ba ;vertical_shooting_laser 2367 c1ba 88 HEX 88 2368 c1bb ;vertical_shooting_laser_tallsprite_00 2369 c1bb cc HEX cc 2370 c1bc 2371 c200 ORG $C200,0 ; ************* 2372 c200 2373 c200 ;vertical_shooting_1up 2374 c200 d5 58 HEX d558 2375 c202 ;vertical_shooting_explosion_01 2376 c202 00 00 HEX 0000 2377 c204 ;vertical_shooting_explosion_01_tallsprite_00 2378 c204 00 00 HEX 0000 2379 c206 ;vertical_shooting_explosion_02 2380 c206 02 80 HEX 0280 2381 c208 ;vertical_shooting_explosion_02_tallsprite_00 2382 c208 00 00 HEX 0000 2383 c20a ;vertical_shooting_explosion_03 2384 c20a 09 60 HEX 0960 2385 c20c ;vertical_shooting_explosion_03_tallsprite_00 2386 c20c 00 00 HEX 0000 2387 c20e ;vertical_shooting_explosion_04 2388 c20e 05 50 HEX 0550 2389 c210 ;vertical_shooting_explosion_04_tallsprite_00 2390 c210 02 80 HEX 0280 2391 c212 ;vertical_shooting_explosion_05 2392 c212 0a a0 HEX 0aa0 2393 c214 ;vertical_shooting_explosion_05_tallsprite_00 2394 c214 05 50 HEX 0550 2395 c216 ;vertical_shooting_explosion_06 2396 c216 0b e0 HEX 0be0 2397 c218 ;vertical_shooting_explosion_06_tallsprite_00 2398 c218 05 50 HEX 0550 2399 c21a ;vertical_shooting_explosion_07 2400 c21a 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2401 c22e ;vertical_shooting_explosion_07_tallsprite_00 2402 c22e 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2403 c242 ;vertical_shooting_explosion_08 2404 c242 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2405 c256 ;vertical_shooting_explosion_08_tallsprite_00 2406 c256 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2407 c26a ;vertical_shooting_explosion_09 2408 c26a 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2409 c27e ;vertical_shooting_explosion_09_tallsprite_00 2410 c27e 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2411 c292 ;vertical_shooting_explosion_10 2412 c292 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2413 c2a6 ;vertical_shooting_explosion_10_tallsprite_00 2414 c2a6 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2415 c2ba ;vertical_shooting_laser 2416 c2ba 44 HEX 44 2417 c2bb ;vertical_shooting_laser_tallsprite_00 2418 c2bb cc HEX cc 2419 c2bc 2420 c300 ORG $C300,0 ; ************* 2421 c300 2422 c300 ;vertical_shooting_1up 2423 c300 35 60 HEX 3560 2424 c302 ;vertical_shooting_explosion_01 2425 c302 00 00 HEX 0000 2426 c304 ;vertical_shooting_explosion_01_tallsprite_00 2427 c304 00 00 HEX 0000 2428 c306 ;vertical_shooting_explosion_02 2429 c306 00 00 HEX 0000 2430 c308 ;vertical_shooting_explosion_02_tallsprite_00 2431 c308 00 00 HEX 0000 2432 c30a ;vertical_shooting_explosion_03 2433 c30a 02 80 HEX 0280 2434 c30c ;vertical_shooting_explosion_03_tallsprite_00 2435 c30c 00 00 HEX 0000 2436 c30e ;vertical_shooting_explosion_04 2437 c30e 09 60 HEX 0960 2438 c310 ;vertical_shooting_explosion_04_tallsprite_00 2439 c310 09 60 HEX 0960 2440 c312 ;vertical_shooting_explosion_05 2441 c312 06 90 HEX 0690 2442 c314 ;vertical_shooting_explosion_05_tallsprite_00 2443 c314 06 90 HEX 0690 2444 c316 ;vertical_shooting_explosion_06 2445 c316 06 90 HEX 0690 2446 c318 ;vertical_shooting_explosion_06_tallsprite_00 2447 c318 06 90 HEX 0690 2448 c31a ;vertical_shooting_explosion_07 2449 c31a 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2450 c32e ;vertical_shooting_explosion_07_tallsprite_00 2451 c32e 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2452 c342 ;vertical_shooting_explosion_08 2453 c342 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2454 c356 ;vertical_shooting_explosion_08_tallsprite_00 2455 c356 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2456 c36a ;vertical_shooting_explosion_09 2457 c36a 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2458 c37e ;vertical_shooting_explosion_09_tallsprite_00 2459 c37e 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2460 c392 ;vertical_shooting_explosion_10 2461 c392 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2462 c3a6 ;vertical_shooting_explosion_10_tallsprite_00 2463 c3a6 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2464 c3ba ;vertical_shooting_laser 2465 c3ba 44 HEX 44 2466 c3bb ;vertical_shooting_laser_tallsprite_00 2467 c3bb cc HEX cc 2468 c3bc 2469 c400 ORG $C400,0 ; ************* 2470 c400 2471 c400 ;vertical_shooting_1up 2472 c400 35 60 HEX 3560 2473 c402 ;vertical_shooting_explosion_01 2474 c402 00 00 HEX 0000 2475 c404 ;vertical_shooting_explosion_01_tallsprite_00 2476 c404 00 00 HEX 0000 2477 c406 ;vertical_shooting_explosion_02 2478 c406 00 00 HEX 0000 2479 c408 ;vertical_shooting_explosion_02_tallsprite_00 2480 c408 00 00 HEX 0000 2481 c40a ;vertical_shooting_explosion_03 2482 c40a 00 00 HEX 0000 2483 c40c ;vertical_shooting_explosion_03_tallsprite_00 2484 c40c 02 80 HEX 0280 2485 c40e ;vertical_shooting_explosion_04 2486 c40e 09 60 HEX 0960 2487 c410 ;vertical_shooting_explosion_04_tallsprite_00 2488 c410 09 60 HEX 0960 2489 c412 ;vertical_shooting_explosion_05 2490 c412 06 90 HEX 0690 2491 c414 ;vertical_shooting_explosion_05_tallsprite_00 2492 c414 06 90 HEX 0690 2493 c416 ;vertical_shooting_explosion_06 2494 c416 06 90 HEX 0690 2495 c418 ;vertical_shooting_explosion_06_tallsprite_00 2496 c418 06 90 HEX 0690 2497 c41a ;vertical_shooting_explosion_07 2498 c41a 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2499 c42e ;vertical_shooting_explosion_07_tallsprite_00 2500 c42e 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2501 c442 ;vertical_shooting_explosion_08 2502 c442 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2503 c456 ;vertical_shooting_explosion_08_tallsprite_00 2504 c456 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2505 c46a ;vertical_shooting_explosion_09 2506 c46a 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2507 c47e ;vertical_shooting_explosion_09_tallsprite_00 2508 c47e 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2509 c492 ;vertical_shooting_explosion_10 2510 c492 00 00 00 00* HEX 000000000000069006900690069007d00c300000 2511 c4a6 ;vertical_shooting_explosion_10_tallsprite_00 2512 c4a6 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 2513 c4ba ;vertical_shooting_laser 2514 c4ba 44 HEX 44 2515 c4bb ;vertical_shooting_laser_tallsprite_00 2516 c4bb cc HEX cc 2517 c4bc 2518 c500 ORG $C500,0 ; ************* 2519 c500 2520 c500 ;vertical_shooting_1up 2521 c500 0d 80 HEX 0d80 2522 c502 ;vertical_shooting_explosion_01 2523 c502 00 00 HEX 0000 2524 c504 ;vertical_shooting_explosion_01_tallsprite_00 2525 c504 00 00 HEX 0000 2526 c506 ;vertical_shooting_explosion_02 2527 c506 00 00 HEX 0000 2528 c508 ;vertical_shooting_explosion_02_tallsprite_00 2529 c508 02 80 HEX 0280 2530 c50a ;vertical_shooting_explosion_03 2531 c50a 00 00 HEX 0000 2532 c50c ;vertical_shooting_explosion_03_tallsprite_00 2533 c50c 09 60 HEX 0960 2534 c50e ;vertical_shooting_explosion_04 2535 c50e 02 80 HEX 0280 2536 c510 ;vertical_shooting_explosion_04_tallsprite_00 2537 c510 05 50 HEX 0550 2538 c512 ;vertical_shooting_explosion_05 2539 c512 05 50 HEX 0550 2540 c514 ;vertical_shooting_explosion_05_tallsprite_00 2541 c514 0a a0 HEX 0aa0 2542 c516 ;vertical_shooting_explosion_06 2543 c516 05 50 HEX 0550 2544 c518 ;vertical_shooting_explosion_06_tallsprite_00 2545 c518 0b e0 HEX 0be0 2546 c51a ;vertical_shooting_explosion_07 2547 c51a 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2548 c52e ;vertical_shooting_explosion_07_tallsprite_00 2549 c52e 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2550 c542 ;vertical_shooting_explosion_08 2551 c542 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2552 c556 ;vertical_shooting_explosion_08_tallsprite_00 2553 c556 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2554 c56a ;vertical_shooting_explosion_09 2555 c56a 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2556 c57e ;vertical_shooting_explosion_09_tallsprite_00 2557 c57e 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2558 c592 ;vertical_shooting_explosion_10 2559 c592 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 2560 c5a6 ;vertical_shooting_explosion_10_tallsprite_00 2561 c5a6 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 2562 c5ba ;vertical_shooting_laser 2563 c5ba 44 HEX 44 2564 c5bb ;vertical_shooting_laser_tallsprite_00 2565 c5bb 88 HEX 88 2566 c5bc 2567 c600 ORG $C600,0 ; ************* 2568 c600 2569 c600 ;vertical_shooting_1up 2570 c600 0d 80 HEX 0d80 2571 c602 ;vertical_shooting_explosion_01 2572 c602 00 00 HEX 0000 2573 c604 ;vertical_shooting_explosion_01_tallsprite_00 2574 c604 01 40 HEX 0140 2575 c606 ;vertical_shooting_explosion_02 2576 c606 00 00 HEX 0000 2577 c608 ;vertical_shooting_explosion_02_tallsprite_00 2578 c608 09 60 HEX 0960 2579 c60a ;vertical_shooting_explosion_03 2580 c60a 00 00 HEX 0000 2581 c60c ;vertical_shooting_explosion_03_tallsprite_00 2582 c60c 25 58 HEX 2558 2583 c60e ;vertical_shooting_explosion_04 2584 c60e 02 80 HEX 0280 2585 c610 ;vertical_shooting_explosion_04_tallsprite_00 2586 c610 05 50 HEX 0550 2587 c612 ;vertical_shooting_explosion_05 2588 c612 01 40 HEX 0140 2589 c614 ;vertical_shooting_explosion_05_tallsprite_00 2590 c614 0b e0 HEX 0be0 2591 c616 ;vertical_shooting_explosion_06 2592 c616 01 40 HEX 0140 2593 c618 ;vertical_shooting_explosion_06_tallsprite_00 2594 c618 0c 30 HEX 0c30 2595 c61a ;vertical_shooting_explosion_07 2596 c61a 00 00 00 00* HEX 0000000000000140014001400140014001400000 2597 c62e ;vertical_shooting_explosion_07_tallsprite_00 2598 c62e 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2599 c642 ;vertical_shooting_explosion_08 2600 c642 00 00 00 00* HEX 0000000000000140014001400140014001400000 2601 c656 ;vertical_shooting_explosion_08_tallsprite_00 2602 c656 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2603 c66a ;vertical_shooting_explosion_09 2604 c66a 00 00 00 00* HEX 0000000000000140014001400140014001400000 2605 c67e ;vertical_shooting_explosion_09_tallsprite_00 2606 c67e 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2607 c692 ;vertical_shooting_explosion_10 2608 c692 00 00 00 00* HEX 0000000000000140014001400140014001400000 2609 c6a6 ;vertical_shooting_explosion_10_tallsprite_00 2610 c6a6 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 2611 c6ba ;vertical_shooting_laser 2612 c6ba 44 HEX 44 2613 c6bb ;vertical_shooting_laser_tallsprite_00 2614 c6bb 88 HEX 88 2615 c6bc 2616 c700 ORG $C700,0 ; ************* 2617 c700 2618 c700 ;vertical_shooting_1up 2619 c700 03 00 HEX 0300 2620 c702 ;vertical_shooting_explosion_01 2621 c702 00 00 HEX 0000 2622 c704 ;vertical_shooting_explosion_01_tallsprite_00 2623 c704 02 80 HEX 0280 2624 c706 ;vertical_shooting_explosion_02 2625 c706 00 00 HEX 0000 2626 c708 ;vertical_shooting_explosion_02_tallsprite_00 2627 c708 05 50 HEX 0550 2628 c70a ;vertical_shooting_explosion_03 2629 c70a 00 00 HEX 0000 2630 c70c ;vertical_shooting_explosion_03_tallsprite_00 2631 c70c 15 54 HEX 1554 2632 c70e ;vertical_shooting_explosion_04 2633 c70e 00 00 HEX 0000 2634 c710 ;vertical_shooting_explosion_04_tallsprite_00 2635 c710 07 d0 HEX 07d0 2636 c712 ;vertical_shooting_explosion_05 2637 c712 01 40 HEX 0140 2638 c714 ;vertical_shooting_explosion_05_tallsprite_00 2639 c714 0c 30 HEX 0c30 2640 c716 ;vertical_shooting_explosion_06 2641 c716 01 40 HEX 0140 2642 c718 ;vertical_shooting_explosion_06_tallsprite_00 2643 c718 00 00 HEX 0000 2644 c71a ;vertical_shooting_explosion_07 2645 c71a 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2646 c72e ;vertical_shooting_explosion_07_tallsprite_00 2647 c72e 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2648 c742 ;vertical_shooting_explosion_08 2649 c742 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2650 c756 ;vertical_shooting_explosion_08_tallsprite_00 2651 c756 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2652 c76a ;vertical_shooting_explosion_09 2653 c76a 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2654 c77e ;vertical_shooting_explosion_09_tallsprite_00 2655 c77e 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2656 c792 ;vertical_shooting_explosion_10 2657 c792 00 00 00 00* HEX 00000000000000000140014001400140014003c0 2658 c7a6 ;vertical_shooting_explosion_10_tallsprite_00 2659 c7a6 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 2660 c7ba ;vertical_shooting_laser 2661 c7ba 44 HEX 44 2662 c7bb ;vertical_shooting_laser_tallsprite_00 2663 c7bb 88 HEX 88 2664 c7bc 2665 c800 ORG $C800,0 ; ************* 2666 c800 dmahole_1 2667 c800 DMAHOLESTART1 SET . 2668 c800 . 2669 c800 ;; 2670 c800 2671 c800 .draw_sprites 2672 c800 ;; draw_sprites 2673 c800 2674 c800 .L0178 ;; plotsprite vertical_shooting_ship 0 playerX playerY 2675 c800 2676 c800 a9 2d lda #vertical_shooting_ship 2680 c806 85 43 sta temp2 2681 c808 2682 c808 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 2683 c80a 85 44 sta temp3 2684 c80c 2685 c80c ad 41 01 lda playerX 2686 c80f 85 45 sta temp4 2687 c811 2688 c811 ad 42 01 lda playerY 2689 c814 2690 c814 85 46 sta temp5 2691 c816 2692 c816 a9 40 lda #(vertical_shooting_ship_mode|%01000000) 2693 c818 85 47 sta temp6 2694 c81a 2695 c81a 20 a0 f2 jsr plotsprite 2696 c81d ; +tall sprite replot 2697 c81d 18 clc 2698 c81e a5 42 lda temp1 2699 c820 69 02 adc #vertical_shooting_ship_width 2700 c822 85 42 sta temp1 2701 c824 a5 46 lda temp5 2702 c826 69 08 adc #WZONEHEIGHT 2703 c828 85 46 sta temp5 2704 c82a 20 a0 f2 jsr plotsprite 2705 c82d .L0179 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 2706 c82d 2707 c82d a9 31 lda #vertical_shooting_bullet 2711 c833 85 43 sta temp2 2712 c835 2713 c835 a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 2714 c837 85 44 sta temp3 2715 c839 2716 c839 ad 48 01 lda bulletX 2717 c83c 85 45 sta temp4 2718 c83e 2719 c83e ad 49 01 lda bulletY 2720 c841 2721 c841 85 46 sta temp5 2722 c843 2723 c843 a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 2724 c845 85 47 sta temp6 2725 c847 2726 c847 20 a0 f2 jsr plotsprite 2727 c84a .L0180 ;; plotsprite vertical_shooting_enemyshot 2 enemy_shotX enemy_shotY 2728 c84a 2729 c84a a9 32 lda #vertical_shooting_enemyshot 2733 c850 85 43 sta temp2 2734 c852 2735 c852 a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 2736 c854 85 44 sta temp3 2737 c856 2738 c856 ad 4a 01 lda enemy_shotX 2739 c859 85 45 sta temp4 2740 c85b 2741 c85b ad 4b 01 lda enemy_shotY 2742 c85e 2743 c85e 85 46 sta temp5 2744 c860 2745 c860 a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 2746 c862 85 47 sta temp6 2747 c864 2748 c864 20 a0 f2 jsr plotsprite 2749 c867 .L0181 ;; plotsprite vertical_shooting_powerup 3 power_upX power_upY 2750 c867 2751 c867 a9 33 lda #vertical_shooting_powerup 2755 c86d 85 43 sta temp2 2756 c86f 2757 c86f a9 7e lda #(96|vertical_shooting_powerup_width_twoscompliment) 2758 c871 85 44 sta temp3 2759 c873 2760 c873 ad 50 01 lda power_upX 2761 c876 85 45 sta temp4 2762 c878 2763 c878 ad 51 01 lda power_upY 2764 c87b 2765 c87b 85 46 sta temp5 2766 c87d 2767 c87d a9 40 lda #(vertical_shooting_powerup_mode|%01000000) 2768 c87f 85 47 sta temp6 2769 c881 2770 c881 20 a0 f2 jsr plotsprite 2771 c884 .L0182 ;; plotsprite vertical_shooting_enemy01 2 enemy01_X enemy01_Y 2772 c884 2773 c884 a9 35 lda #vertical_shooting_enemy01 2777 c88a 85 43 sta temp2 2778 c88c 2779 c88c a9 5e lda #(64|vertical_shooting_enemy01_width_twoscompliment) 2780 c88e 85 44 sta temp3 2781 c890 2782 c890 ad 57 01 lda enemy01_X 2783 c893 85 45 sta temp4 2784 c895 2785 c895 ad 58 01 lda enemy01_Y 2786 c898 2787 c898 85 46 sta temp5 2788 c89a 2789 c89a a9 40 lda #(vertical_shooting_enemy01_mode|%01000000) 2790 c89c 85 47 sta temp6 2791 c89e 2792 c89e 20 a0 f2 jsr plotsprite 2793 c8a1 ; +tall sprite replot 2794 c8a1 18 clc 2795 c8a2 a5 42 lda temp1 2796 c8a4 69 02 adc #vertical_shooting_enemy01_width 2797 c8a6 85 42 sta temp1 2798 c8a8 a5 46 lda temp5 2799 c8aa 69 08 adc #WZONEHEIGHT 2800 c8ac 85 46 sta temp5 2801 c8ae 20 a0 f2 jsr plotsprite 2802 c8b1 .L0183 ;; plotsprite vertical_shooting_1up 0 extra_shipX extra_shipY 2803 c8b1 2804 c8b1 a9 00 lda #vertical_shooting_1up 2808 c8b7 85 43 sta temp2 2809 c8b9 2810 c8b9 a9 1e lda #(0|vertical_shooting_1up_width_twoscompliment) 2811 c8bb 85 44 sta temp3 2812 c8bd 2813 c8bd ad 60 01 lda extra_shipX 2814 c8c0 85 45 sta temp4 2815 c8c2 2816 c8c2 ad 61 01 lda extra_shipY 2817 c8c5 2818 c8c5 85 46 sta temp5 2819 c8c7 2820 c8c7 a9 40 lda #(vertical_shooting_1up_mode|%01000000) 2821 c8c9 85 47 sta temp6 2822 c8cb 2823 c8cb 20 a0 f2 jsr plotsprite 2824 c8ce .L0184 ;; plotsprite vertical_shooting_explosion_01 3 playerX playerY explosion_aniframe 2825 c8ce 2826 c8ce a9 02 lda #vertical_shooting_explosion_01 2838 c8df 85 43 sta temp2 2839 c8e1 2840 c8e1 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2841 c8e3 85 44 sta temp3 2842 c8e5 2843 c8e5 ad 41 01 lda playerX 2844 c8e8 85 45 sta temp4 2845 c8ea 2846 c8ea ad 42 01 lda playerY 2847 c8ed 85 46 sta temp5 2848 c8ef 2849 c8ef a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2850 c8f1 85 47 sta temp6 2851 c8f3 2852 c8f3 20 a0 f2 jsr plotsprite 2853 c8f6 ; +tall sprite replot 2854 c8f6 18 clc 2855 c8f7 a5 42 lda temp1 2856 c8f9 69 02 adc #vertical_shooting_explosion_01_width 2857 c8fb 85 42 sta temp1 2858 c8fd a5 46 lda temp5 2859 c8ff 69 08 adc #WZONEHEIGHT 2860 c901 85 46 sta temp5 2861 c903 20 a0 f2 jsr plotsprite 2862 c906 .L0185 ;; plotsprite vertical_shooting_explosion_01 3 enemy01_X enemy01_Y explosion_aniframe 2863 c906 2864 c906 a9 02 lda #vertical_shooting_explosion_01 2876 c917 85 43 sta temp2 2877 c919 2878 c919 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2879 c91b 85 44 sta temp3 2880 c91d 2881 c91d ad 57 01 lda enemy01_X 2882 c920 85 45 sta temp4 2883 c922 2884 c922 ad 58 01 lda enemy01_Y 2885 c925 85 46 sta temp5 2886 c927 2887 c927 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2888 c929 85 47 sta temp6 2889 c92b 2890 c92b 20 a0 f2 jsr plotsprite 2891 c92e ; +tall sprite replot 2892 c92e 18 clc 2893 c92f a5 42 lda temp1 2894 c931 69 02 adc #vertical_shooting_explosion_01_width 2895 c933 85 42 sta temp1 2896 c935 a5 46 lda temp5 2897 c937 69 08 adc #WZONEHEIGHT 2898 c939 85 46 sta temp5 2899 c93b 20 a0 f2 jsr plotsprite 2900 c93e .L0186 ;; plotsprite vertical_shooting_laser 0 twinlaserX twinlaserY 2901 c93e 2902 c93e a9 ba lda #vertical_shooting_laser 2906 c944 85 43 sta temp2 2907 c946 2908 c946 a9 1f lda #(0|vertical_shooting_laser_width_twoscompliment) 2909 c948 85 44 sta temp3 2910 c94a 2911 c94a ad 65 01 lda twinlaserX 2912 c94d 85 45 sta temp4 2913 c94f 2914 c94f ad 66 01 lda twinlaserY 2915 c952 2916 c952 85 46 sta temp5 2917 c954 2918 c954 a9 40 lda #(vertical_shooting_laser_mode|%01000000) 2919 c956 85 47 sta temp6 2920 c958 2921 c958 20 a0 f2 jsr plotsprite 2922 c95b ; +tall sprite replot 2923 c95b 18 clc 2924 c95c a5 42 lda temp1 2925 c95e 69 01 adc #vertical_shooting_laser_width 2926 c960 85 42 sta temp1 2927 c962 a5 46 lda temp5 2928 c964 69 08 adc #WZONEHEIGHT 2929 c966 85 46 sta temp5 2930 c968 20 a0 f2 jsr plotsprite 2931 c96b .L0187 ;; if playerFlag = 1 then plotsprite vertical_shooting_explosion_01 3 playerX playerY explosion_aniframe 2932 c96b 2933 c96b ad 4d 01 LDA playerFlag 2934 c96e c9 01 CMP #1 2935 c970 d0 38 BNE .skipL0187 2936 c972 .condpart80 2937 c972 a9 02 lda #vertical_shooting_explosion_01 2949 c983 85 43 sta temp2 2950 c985 2951 c985 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2952 c987 85 44 sta temp3 2953 c989 2954 c989 ad 41 01 lda playerX 2955 c98c 85 45 sta temp4 2956 c98e 2957 c98e ad 42 01 lda playerY 2958 c991 85 46 sta temp5 2959 c993 2960 c993 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2961 c995 85 47 sta temp6 2962 c997 2963 c997 20 a0 f2 jsr plotsprite 2964 c99a ; +tall sprite replot 2965 c99a 18 clc 2966 c99b a5 42 lda temp1 2967 c99d 69 02 adc #vertical_shooting_explosion_01_width 2968 c99f 85 42 sta temp1 2969 c9a1 a5 46 lda temp5 2970 c9a3 69 08 adc #WZONEHEIGHT 2971 c9a5 85 46 sta temp5 2972 c9a7 20 a0 f2 jsr plotsprite 2973 c9aa .skipL0187 2974 c9aa .L0188 ;; if enemy01_Flag = 1 then plotsprite vertical_shooting_explosion_01 3 enemy01_X enemy01_Y explosion_aniframe 2975 c9aa 2976 c9aa ad 59 01 LDA enemy01_Flag 2977 c9ad c9 01 CMP #1 2978 c9af d0 38 BNE .skipL0188 2979 c9b1 .condpart81 2980 c9b1 a9 02 lda #vertical_shooting_explosion_01 2992 c9c2 85 43 sta temp2 2993 c9c4 2994 c9c4 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2995 c9c6 85 44 sta temp3 2996 c9c8 2997 c9c8 ad 57 01 lda enemy01_X 2998 c9cb 85 45 sta temp4 2999 c9cd 3000 c9cd ad 58 01 lda enemy01_Y 3001 c9d0 85 46 sta temp5 3002 c9d2 3003 c9d2 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 3004 c9d4 85 47 sta temp6 3005 c9d6 3006 c9d6 20 a0 f2 jsr plotsprite 3007 c9d9 ; +tall sprite replot 3008 c9d9 18 clc 3009 c9da a5 42 lda temp1 3010 c9dc 69 02 adc #vertical_shooting_explosion_01_width 3011 c9de 85 42 sta temp1 3012 c9e0 a5 46 lda temp5 3013 c9e2 69 08 adc #WZONEHEIGHT 3014 c9e4 85 46 sta temp5 3015 c9e6 20 a0 f2 jsr plotsprite 3016 c9e9 .skipL0188 3017 c9e9 .L0189 ;; return 3018 c9e9 3019 c9e9 60 RTS 3020 c9ea . 3021 c9ea ;; 3022 c9ea 3023 c9ea .draw_scores 3024 c9ea ;; draw_scores 3025 c9ea 3026 c9ea .L0190 ;; plotvalue vertical_shooting_font 0 score0 6 25 1 3027 c9ea 3028 c9ea a9 00 lda #vertical_shooting_font 3032 c9f0 85 43 sta temp2 3033 c9f2 3034 c9f2 ad 06 21 lda charactermode 3035 c9f5 85 4a sta temp9 3036 c9f7 a9 60 lda #(vertical_shooting_font_mode | %01100000) 3037 c9f9 8d 06 21 sta charactermode 3038 c9fc a9 1a lda #26 ; width in two's complement 3039 c9fe 09 00 ora #0 ; palette left shifted 5 bits 3040 ca00 85 44 sta temp3 3041 ca02 a9 19 lda #25 3042 ca04 85 45 sta temp4 3043 ca06 3044 ca06 a9 01 lda #1 3045 ca08 85 46 sta temp5 3046 ca0a 3047 ca0a a9 06 lda #6 3048 ca0c 85 47 sta temp6 3049 ca0e 3050 ca0e a9 a6 lda #score0 3054 ca14 85 49 sta temp8 3055 ca16 3056 ca16 20 8e f3 jsr plotvalue 3057 ca16 00 01 USED_PLOTVALUE = 1 3058 ca19 a5 4a lda temp9 3059 ca1b 8d 06 21 sta charactermode 3060 ca1e .L0191 ;; plotvalue vertical_shooting_font 0 lives 1 153 1 3061 ca1e 3062 ca1e a9 00 lda #vertical_shooting_font 3066 ca24 85 43 sta temp2 3067 ca26 3068 ca26 ad 06 21 lda charactermode 3069 ca29 85 4a sta temp9 3070 ca2b a9 60 lda #(vertical_shooting_font_mode | %01100000) 3071 ca2d 8d 06 21 sta charactermode 3072 ca30 a9 1f lda #31 ; width in two's complement 3073 ca32 09 00 ora #0 ; palette left shifted 5 bits 3074 ca34 85 44 sta temp3 3075 ca36 a9 99 lda #153 3076 ca38 85 45 sta temp4 3077 ca3a 3078 ca3a a9 01 lda #1 3079 ca3c 85 46 sta temp5 3080 ca3e 3081 ca3e a9 01 lda #1 3082 ca40 85 47 sta temp6 3083 ca42 3084 ca42 a9 64 lda #lives 3088 ca48 85 49 sta temp8 3089 ca4a 3090 ca4a 20 8e f3 jsr plotvalue 3091 ca4a 00 01 USED_PLOTVALUE = 1 3092 ca4d a5 4a lda temp9 3093 ca4f 8d 06 21 sta charactermode 3094 ca52 .L0192 ;; return 3095 ca52 3096 ca52 60 RTS 3097 ca53 . 3098 ca53 ;; 3099 ca53 3100 ca53 .check_collisions 3101 ca53 ;; check_collisions 3102 ca53 3103 ca53 .L0193 ;; 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 3104 ca53 3105 ca53 3106 ca53 18 clc ; one clc only. If we overflow we're screwed anyway. 3107 ca54 a0 07 ldy #(8-1) 3108 ca56 84 44 sty temp3 3109 ca58 a0 0f ldy #(16-1) 3110 ca5a 84 45 sty temp4 3111 ca5c ad 4a 01 lda enemy_shotX 3112 ca5f 69 30 adc #48 3113 ca61 85 46 sta temp5 3114 ca63 ad 4b 01 lda enemy_shotY 3115 ca66 69 20 adc #((256-WSCREENHEIGHT)/2) 3116 ca68 85 47 sta temp6 3117 ca6a a0 03 ldy #(4-1) 3118 ca6c 84 48 sty temp7 3119 ca6e a0 07 ldy #(8-1) 3120 ca70 84 49 sty temp8 3121 ca72 ad 42 01 lda playerY 3122 ca75 69 20 adc #((256-WSCREENHEIGHT)/2) 3123 ca77 a8 tay 3124 ca78 ad 41 01 lda playerX 3125 ca7b 69 30 adc #48 3126 ca7d 20 d6 f3 jsr boxcollision 3127 ca80 3128 ca80 90 37 BCC .skipL0193 3129 ca82 .condpart82 3130 ca82 a9 c8 LDA #200 3131 ca84 8d 4a 01 STA enemy_shotX 3132 ca87 8d 4b 01 STA enemy_shotY 3133 ca8a a9 01 LDA #1 3134 ca8c 8d 4d 01 STA playerFlag 3135 ca8f ad 64 01 LDA lives 3136 ca92 38 SEC 3137 ca93 e9 00 SBC #0 3138 ca95 8d 64 01 STA lives 3139 ca98 a9 01 lda #1 3140 ca9a 85 de sta sfxschedulelock 3141 ca9c a9 46 lda #sfx_explosion 3144 caa2 85 e1 sta sfxinstrumenthi 3145 caa4 a9 00 lda #0 3146 caa6 85 e2 sta sfxpitchoffset ; no pitch modification 3147 caa8 85 e3 sta sfxnoteindex ; not a musical note 3148 caaa 20 58 f2 jsr schedulesfx 3149 caad a9 00 lda #0 3150 caaf 85 de sta sfxschedulelock 3151 cab1 a9 01 LDA #1 3152 cab3 8d 6a 01 STA isDead_flag 3153 cab6 4c 42 cd jmp ._checkCollisionsExit 3154 cab9 3155 cab9 .skipL0193 3156 cab9 .L0194 ;; if boxcollision ( playerX , playerY , 8 , 16 , power_upX , power_upY , 8 , 8 ) then power_upX = 208 : power_upY = 208 : playerFlag = 1 : playsfx sfx_bling : score0 = score0 + 1 : gosub power_up_obtained 3157 cab9 3158 cab9 3159 cab9 18 clc ; one clc only. If we overflow we're screwed anyway. 3160 caba a0 07 ldy #(8-1) 3161 cabc 84 44 sty temp3 3162 cabe a0 0f ldy #(16-1) 3163 cac0 84 45 sty temp4 3164 cac2 ad 50 01 lda power_upX 3165 cac5 69 30 adc #48 3166 cac7 85 46 sta temp5 3167 cac9 ad 51 01 lda power_upY 3168 cacc 69 20 adc #((256-WSCREENHEIGHT)/2) 3169 cace 85 47 sta temp6 3170 cad0 a0 07 ldy #(8-1) 3171 cad2 84 48 sty temp7 3172 cad4 a0 07 ldy #(8-1) 3173 cad6 84 49 sty temp8 3174 cad8 ad 42 01 lda playerY 3175 cadb 69 20 adc #((256-WSCREENHEIGHT)/2) 3176 cadd a8 tay 3177 cade ad 41 01 lda playerX 3178 cae1 69 30 adc #48 3179 cae3 20 d6 f3 jsr boxcollision 3180 cae6 3181 cae6 90 44 BCC .skipL0194 3182 cae8 .condpart83 3183 cae8 a9 d0 LDA #208 3184 caea 8d 50 01 STA power_upX 3185 caed 8d 51 01 STA power_upY 3186 caf0 a9 01 LDA #1 3187 caf2 8d 4d 01 STA playerFlag 3188 caf5 a9 01 lda #1 3189 caf7 85 de sta sfxschedulelock 3190 caf9 a9 83 lda #sfx_bling 3193 caff 85 e1 sta sfxinstrumenthi 3194 cb01 a9 00 lda #0 3195 cb03 85 e2 sta sfxpitchoffset ; no pitch modification 3196 cb05 85 e3 sta sfxnoteindex ; not a musical note 3197 cb07 20 58 f2 jsr schedulesfx 3198 cb0a a9 00 lda #0 3199 cb0c 85 de sta sfxschedulelock 3200 cb0e f8 SED 3201 cb0f 18 CLC 3202 cb10 ad a8 01 LDA score0+2 3203 cb13 69 01 ADC #$01 3204 cb15 8d a8 01 STA score0+2 3205 cb18 ad a7 01 LDA score0+1 3206 cb1b 69 00 ADC #$00 3207 cb1d 8d a7 01 STA score0+1 3208 cb20 ad a6 01 LDA score0 3209 cb23 69 00 ADC #$00 3210 cb25 8d a6 01 STA score0 3211 cb28 d8 CLD 3212 cb29 20 00 d8 jsr .power_up_obtained 3213 cb2c 3214 cb2c .skipL0194 3215 cb2c .L0195 ;; 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 3216 cb2c 3217 cb2c 3218 cb2c 18 clc ; one clc only. If we overflow we're screwed anyway. 3219 cb2d a0 07 ldy #(8-1) 3220 cb2f 84 44 sty temp3 3221 cb31 a0 0f ldy #(16-1) 3222 cb33 84 45 sty temp4 3223 cb35 ad 57 01 lda enemy01_X 3224 cb38 69 30 adc #48 3225 cb3a 85 46 sta temp5 3226 cb3c ad 58 01 lda enemy01_Y 3227 cb3f 69 20 adc #((256-WSCREENHEIGHT)/2) 3228 cb41 85 47 sta temp6 3229 cb43 a0 07 ldy #(8-1) 3230 cb45 84 48 sty temp7 3231 cb47 a0 0f ldy #(16-1) 3232 cb49 84 49 sty temp8 3233 cb4b ad 42 01 lda playerY 3234 cb4e 69 20 adc #((256-WSCREENHEIGHT)/2) 3235 cb50 a8 tay 3236 cb51 ad 41 01 lda playerX 3237 cb54 69 30 adc #48 3238 cb56 20 d6 f3 jsr boxcollision 3239 cb59 3240 cb59 90 37 BCC .skipL0195 3241 cb5b .condpart84 3242 cb5b a9 c8 LDA #200 3243 cb5d 8d 57 01 STA enemy01_X 3244 cb60 8d 58 01 STA enemy01_Y 3245 cb63 a9 01 LDA #1 3246 cb65 8d 4d 01 STA playerFlag 3247 cb68 ad 64 01 LDA lives 3248 cb6b 38 SEC 3249 cb6c e9 00 SBC #0 3250 cb6e 8d 64 01 STA lives 3251 cb71 a9 01 lda #1 3252 cb73 85 de sta sfxschedulelock 3253 cb75 a9 46 lda #sfx_explosion 3256 cb7b 85 e1 sta sfxinstrumenthi 3257 cb7d a9 00 lda #0 3258 cb7f 85 e2 sta sfxpitchoffset ; no pitch modification 3259 cb81 85 e3 sta sfxnoteindex ; not a musical note 3260 cb83 20 58 f2 jsr schedulesfx 3261 cb86 a9 00 lda #0 3262 cb88 85 de sta sfxschedulelock 3263 cb8a a9 01 LDA #1 3264 cb8c 8d 6a 01 STA isDead_flag 3265 cb8f 4c 42 cd jmp ._checkCollisionsExit 3266 cb92 3267 cb92 .skipL0195 3268 cb92 .L0196 ;; 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 3269 cb92 3270 cb92 3271 cb92 18 clc ; one clc only. If we overflow we're screwed anyway. 3272 cb93 a0 07 ldy #(8-1) 3273 cb95 84 44 sty temp3 3274 cb97 a0 0f ldy #(16-1) 3275 cb99 84 45 sty temp4 3276 cb9b ad 60 01 lda extra_shipX 3277 cb9e 69 30 adc #48 3278 cba0 85 46 sta temp5 3279 cba2 ad 61 01 lda extra_shipY 3280 cba5 69 20 adc #((256-WSCREENHEIGHT)/2) 3281 cba7 85 47 sta temp6 3282 cba9 a0 07 ldy #(8-1) 3283 cbab 84 48 sty temp7 3284 cbad a0 07 ldy #(8-1) 3285 cbaf 84 49 sty temp8 3286 cbb1 ad 42 01 lda playerY 3287 cbb4 69 20 adc #((256-WSCREENHEIGHT)/2) 3288 cbb6 a8 tay 3289 cbb7 ad 41 01 lda playerX 3290 cbba 69 30 adc #48 3291 cbbc 20 d6 f3 jsr boxcollision 3292 cbbf 3293 cbbf 90 2f BCC .skipL0196 3294 cbc1 .condpart85 3295 cbc1 a9 c8 LDA #200 3296 cbc3 8d 60 01 STA extra_shipX 3297 cbc6 8d 61 01 STA extra_shipY 3298 cbc9 a9 01 LDA #1 3299 cbcb 8d 62 01 STA extra_shipFlag 3300 cbce ad 64 01 LDA lives 3301 cbd1 18 CLC 3302 cbd2 69 01 ADC #1 3303 cbd4 8d 64 01 STA lives 3304 cbd7 a9 01 lda #1 3305 cbd9 85 de sta sfxschedulelock 3306 cbdb a9 83 lda #sfx_bling 3309 cbe1 85 e1 sta sfxinstrumenthi 3310 cbe3 a9 00 lda #0 3311 cbe5 85 e2 sta sfxpitchoffset ; no pitch modification 3312 cbe7 85 e3 sta sfxnoteindex ; not a musical note 3313 cbe9 20 58 f2 jsr schedulesfx 3314 cbec a9 00 lda #0 3315 cbee 85 de sta sfxschedulelock 3316 cbf0 .skipL0196 3317 cbf0 .L0197 ;; if boxcollision ( bulletX , bulletY , 4 , 8 , enemy01_X , enemy01_Y , 8 , 16 ) then bulletX = - 8 : bulletY = 0 : enemy01_Flag = 1 3318 cbf0 3319 cbf0 3320 cbf0 18 clc ; one clc only. If we overflow we're screwed anyway. 3321 cbf1 a0 03 ldy #(4-1) 3322 cbf3 84 44 sty temp3 3323 cbf5 a0 07 ldy #(8-1) 3324 cbf7 84 45 sty temp4 3325 cbf9 ad 57 01 lda enemy01_X 3326 cbfc 69 30 adc #48 3327 cbfe 85 46 sta temp5 3328 cc00 ad 58 01 lda enemy01_Y 3329 cc03 69 20 adc #((256-WSCREENHEIGHT)/2) 3330 cc05 85 47 sta temp6 3331 cc07 a0 07 ldy #(8-1) 3332 cc09 84 48 sty temp7 3333 cc0b a0 0f ldy #(16-1) 3334 cc0d 84 49 sty temp8 3335 cc0f ad 49 01 lda bulletY 3336 cc12 69 20 adc #((256-WSCREENHEIGHT)/2) 3337 cc14 a8 tay 3338 cc15 ad 48 01 lda bulletX 3339 cc18 69 30 adc #48 3340 cc1a 20 d6 f3 jsr boxcollision 3341 cc1d 3342 cc1d 90 0f BCC .skipL0197 3343 cc1f .condpart86 3344 cc1f a9 f8 LDA #248 3345 cc21 8d 48 01 STA bulletX 3346 cc24 a9 00 LDA #0 3347 cc26 8d 49 01 STA bulletY 3348 cc29 a9 01 LDA #1 3349 cc2b 8d 59 01 STA enemy01_Flag 3350 cc2e .skipL0197 3351 cc2e .L0198 ;; if boxcollision ( twinlaserX , twinlaserY , 4 , 16 , enemy01_X , enemy01_Y , 8 , 16 ) then twinlaserX = - 8 : twinlaserY = 0 : enemy01_Flag = 1 3352 cc2e 3353 cc2e 3354 cc2e 18 clc ; one clc only. If we overflow we're screwed anyway. 3355 cc2f a0 03 ldy #(4-1) 3356 cc31 84 44 sty temp3 3357 cc33 a0 0f ldy #(16-1) 3358 cc35 84 45 sty temp4 3359 cc37 ad 57 01 lda enemy01_X 3360 cc3a 69 30 adc #48 3361 cc3c 85 46 sta temp5 3362 cc3e ad 58 01 lda enemy01_Y 3363 cc41 69 20 adc #((256-WSCREENHEIGHT)/2) 3364 cc43 85 47 sta temp6 3365 cc45 a0 07 ldy #(8-1) 3366 cc47 84 48 sty temp7 3367 cc49 a0 0f ldy #(16-1) 3368 cc4b 84 49 sty temp8 3369 cc4d ad 66 01 lda twinlaserY 3370 cc50 69 20 adc #((256-WSCREENHEIGHT)/2) 3371 cc52 a8 tay 3372 cc53 ad 65 01 lda twinlaserX 3373 cc56 69 30 adc #48 3374 cc58 20 d6 f3 jsr boxcollision 3375 cc5b 3376 cc5b 90 0f BCC .skipL0198 3377 cc5d .condpart87 3378 cc5d a9 f8 LDA #248 3379 cc5f 8d 65 01 STA twinlaserX 3380 cc62 a9 00 LDA #0 3381 cc64 8d 66 01 STA twinlaserY 3382 cc67 a9 01 LDA #1 3383 cc69 8d 59 01 STA enemy01_Flag 3384 cc6c .skipL0198 3385 cc6c . 3386 cc6c ;; 3387 cc6c 3388 cc6c .L0199 ;; if bulletX > enemy01_X && bulletX < ( enemy01_X + 16 ) && bulletY > enemy01_Y && bulletY < ( enemy01_Y + 16 ) then enemy01_Flag = 1 : score0 = score0 + 1 : playsfx sfx_explosion 3389 cc6c 3390 cc6c ad 57 01 LDA enemy01_X 3391 cc6f cd 48 01 CMP bulletX 3392 cc72 b0 63 BCS .skipL0199 3393 cc74 .condpart88 3394 cc74 ; complex condition detected 3395 cc74 ; complex statement detected 3396 cc74 ad 57 01 LDA enemy01_X 3397 cc77 18 CLC 3398 cc78 69 10 ADC #16 3399 cc7a 48 PHA 3400 cc7b ba TSX 3401 cc7c 68 PLA 3402 cc7d ad 48 01 LDA bulletX 3403 cc80 dd 01 01 CMP $101,x 3404 cc83 b0 52 BCS .skip88then 3405 cc85 .condpart89 3406 cc85 ad 58 01 LDA enemy01_Y 3407 cc88 cd 49 01 CMP bulletY 3408 cc8b b0 4a BCS .skip89then 3409 cc8d .condpart90 3410 cc8d ; complex condition detected 3411 cc8d ; complex statement detected 3412 cc8d ad 58 01 LDA enemy01_Y 3413 cc90 18 CLC 3414 cc91 69 10 ADC #16 3415 cc93 48 PHA 3416 cc94 ba TSX 3417 cc95 68 PLA 3418 cc96 ad 49 01 LDA bulletY 3419 cc99 dd 01 01 CMP $101,x 3420 cc9c b0 39 BCS .skip90then 3421 cc9e .condpart91 3422 cc9e a9 01 LDA #1 3423 cca0 8d 59 01 STA enemy01_Flag 3424 cca3 f8 SED 3425 cca4 18 CLC 3426 cca5 ad a8 01 LDA score0+2 3427 cca8 69 01 ADC #$01 3428 ccaa 8d a8 01 STA score0+2 3429 ccad ad a7 01 LDA score0+1 3430 ccb0 69 00 ADC #$00 3431 ccb2 8d a7 01 STA score0+1 3432 ccb5 ad a6 01 LDA score0 3433 ccb8 69 00 ADC #$00 3434 ccba 8d a6 01 STA score0 3435 ccbd d8 CLD 3436 ccbe a9 01 lda #1 3437 ccc0 85 de sta sfxschedulelock 3438 ccc2 a9 46 lda #sfx_explosion 3441 ccc8 85 e1 sta sfxinstrumenthi 3442 ccca a9 00 lda #0 3443 cccc 85 e2 sta sfxpitchoffset ; no pitch modification 3444 ccce 85 e3 sta sfxnoteindex ; not a musical note 3445 ccd0 20 58 f2 jsr schedulesfx 3446 ccd3 a9 00 lda #0 3447 ccd5 85 de sta sfxschedulelock 3448 ccd7 .skip90then 3449 ccd7 .skip89then 3450 ccd7 .skip88then 3451 ccd7 .skipL0199 3452 ccd7 .L0200 ;; if twinlaserX > enemy01_X && twinlaserX < ( enemy01_X + 16 ) && twinlaserY > enemy01_Y && twinlaserY < ( enemy01_Y + 16 ) then enemy01_Flag = 1 : score0 = score0 + 1 : playsfx sfx_explosion 3453 ccd7 3454 ccd7 ad 57 01 LDA enemy01_X 3455 ccda cd 65 01 CMP twinlaserX 3456 ccdd b0 63 BCS .skipL0200 3457 ccdf .condpart92 3458 ccdf ; complex condition detected 3459 ccdf ; complex statement detected 3460 ccdf ad 57 01 LDA enemy01_X 3461 cce2 18 CLC 3462 cce3 69 10 ADC #16 3463 cce5 48 PHA 3464 cce6 ba TSX 3465 cce7 68 PLA 3466 cce8 ad 65 01 LDA twinlaserX 3467 cceb dd 01 01 CMP $101,x 3468 ccee b0 52 BCS .skip92then 3469 ccf0 .condpart93 3470 ccf0 ad 58 01 LDA enemy01_Y 3471 ccf3 cd 66 01 CMP twinlaserY 3472 ccf6 b0 4a BCS .skip93then 3473 ccf8 .condpart94 3474 ccf8 ; complex condition detected 3475 ccf8 ; complex statement detected 3476 ccf8 ad 58 01 LDA enemy01_Y 3477 ccfb 18 CLC 3478 ccfc 69 10 ADC #16 3479 ccfe 48 PHA 3480 ccff ba TSX 3481 cd00 68 PLA 3482 cd01 ad 66 01 LDA twinlaserY 3483 cd04 dd 01 01 CMP $101,x 3484 cd07 b0 39 BCS .skip94then 3485 cd09 .condpart95 3486 cd09 a9 01 LDA #1 3487 cd0b 8d 59 01 STA enemy01_Flag 3488 cd0e f8 SED 3489 cd0f 18 CLC 3490 cd10 ad a8 01 LDA score0+2 3491 cd13 69 01 ADC #$01 3492 cd15 8d a8 01 STA score0+2 3493 cd18 ad a7 01 LDA score0+1 3494 cd1b 69 00 ADC #$00 3495 cd1d 8d a7 01 STA score0+1 3496 cd20 ad a6 01 LDA score0 3497 cd23 69 00 ADC #$00 3498 cd25 8d a6 01 STA score0 3499 cd28 d8 CLD 3500 cd29 a9 01 lda #1 3501 cd2b 85 de sta sfxschedulelock 3502 cd2d a9 46 lda #sfx_explosion 3505 cd33 85 e1 sta sfxinstrumenthi 3506 cd35 a9 00 lda #0 3507 cd37 85 e2 sta sfxpitchoffset ; no pitch modification 3508 cd39 85 e3 sta sfxnoteindex ; not a musical note 3509 cd3b 20 58 f2 jsr schedulesfx 3510 cd3e a9 00 lda #0 3511 cd40 85 de sta sfxschedulelock 3512 cd42 .skip94then 3513 cd42 .skip93then 3514 cd42 .skip92then 3515 cd42 .skipL0200 3516 cd42 . 3517 cd42 ;; 3518 cd42 3519 cd42 ._checkCollisionsExit 3520 cd42 ;; _checkCollisionsExit 3521 cd42 3522 cd42 .L0201 ;; return 3523 cd42 3524 cd42 60 RTS 3525 cd43 . 3526 cd43 ;; 3527 cd43 3528 cd43 .SetBulletHome 3529 cd43 ;; SetBulletHome 3530 cd43 3531 cd43 .L0202 ;; bulletX = playerX + 4 : bulletY = playerY - 2 3532 cd43 3533 cd43 ad 41 01 LDA playerX 3534 cd46 18 CLC 3535 cd47 69 04 ADC #4 3536 cd49 8d 48 01 STA bulletX 3537 cd4c ad 42 01 LDA playerY 3538 cd4f 38 SEC 3539 cd50 e9 02 SBC #2 3540 cd52 8d 49 01 STA bulletY 3541 cd55 .L0203 ;; return 3542 cd55 3543 cd55 60 RTS 3544 cd56 . 3545 cd56 ;; 3546 cd56 3547 cd56 .SetLaserHome 3548 cd56 ;; SetLaserHome 3549 cd56 3550 cd56 .L0204 ;; twinlaserX = playerX + 4 : twinlaserY = playerY - 2 3551 cd56 3552 cd56 ad 41 01 LDA playerX 3553 cd59 18 CLC 3554 cd5a 69 04 ADC #4 3555 cd5c 8d 65 01 STA twinlaserX 3556 cd5f ad 42 01 LDA playerY 3557 cd62 38 SEC 3558 cd63 e9 02 SBC #2 3559 cd65 8d 66 01 STA twinlaserY 3560 cd68 .L0205 ;; return 3561 cd68 3562 cd68 60 RTS 3563 cd69 . 3564 cd69 ;; 3565 cd69 3566 cd69 .L0206 ;; dmahole 2 3567 cd69 3568 cd69 4c 00 d8 jmp dmahole_2 3569 cd69 DMAHOLEEND1 SET . 660 bytes of ROM space left in DMA hole 1. 3570 cd69 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND1 - DMAHOLESTART1)]d , "bytes of ROM space left in DMA hole 1." 3571 cd6c - if ((256*WZONEHEIGHT)-(DMAHOLEEND1 - DMAHOLESTART1)) < 0 3572 cd6c -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 3573 cd6c endif 3574 cd6c 3575 d000 ORG $D000,0 ; ************* 3576 d000 3577 d000 3578 d100 ORG $D100,0 ; ************* 3579 d100 3580 d100 3581 d200 ORG $D200,0 ; ************* 3582 d200 3583 d200 3584 d300 ORG $D300,0 ; ************* 3585 d300 3586 d300 3587 d400 ORG $D400,0 ; ************* 3588 d400 3589 d400 3590 d500 ORG $D500,0 ; ************* 3591 d500 3592 d500 3593 d600 ORG $D600,0 ; ************* 3594 d600 3595 d600 3596 d700 ORG $D700,0 ; ************* 3597 d700 3598 d700 3599 d800 ORG $D800,0 ; ************* 3600 d800 dmahole_2 3601 d800 DMAHOLESTART2 SET . 3602 d800 . 3603 d800 ;; 3604 d800 3605 d800 .power_up_obtained 3606 d800 ;; power_up_obtained 3607 d800 3608 d800 .L0207 ;; if power_upFlag = 1 then twinlaser_flag = 1 3609 d800 3610 d800 ad 52 01 LDA power_upFlag 3611 d803 c9 01 CMP #1 3612 d805 d0 05 BNE .skipL0207 3613 d807 .condpart96 3614 d807 a9 01 LDA #1 3615 d809 8d 67 01 STA twinlaser_flag 3616 d80c .skipL0207 3617 d80c .L0208 ;; if joy0up && joyposup = - 2 then gosub SetLaserHome 3618 d80c 3619 d80c a9 10 lda #$10 3620 d80e 2c 80 02 bit SWCHA 3621 d811 d0 10 BNE .skipL0208 3622 d813 .condpart97 3623 d813 ; complex condition detected 3624 d813 a9 fe LDA #254 3625 d815 48 PHA 3626 d816 ba TSX 3627 d817 68 PLA 3628 d818 ad 44 01 LDA joyposup 3629 d81b dd 01 01 CMP $101,x 3630 d81e d0 03 BNE .skip97then 3631 d820 .condpart98 3632 d820 20 56 cd jsr .SetLaserHome 3633 d823 3634 d823 .skip97then 3635 d823 .skipL0208 3636 d823 .L0209 ;; if joy0down && joyposdown = - 2 then gosub SetLaserHome 3637 d823 3638 d823 a9 20 lda #$20 3639 d825 2c 80 02 bit SWCHA 3640 d828 d0 10 BNE .skipL0209 3641 d82a .condpart99 3642 d82a ; complex condition detected 3643 d82a a9 fe LDA #254 3644 d82c 48 PHA 3645 d82d ba TSX 3646 d82e 68 PLA 3647 d82f ad 45 01 LDA joyposdown 3648 d832 dd 01 01 CMP $101,x 3649 d835 d0 03 BNE .skip99then 3650 d837 .condpart100 3651 d837 20 56 cd jsr .SetLaserHome 3652 d83a 3653 d83a .skip99then 3654 d83a .skipL0209 3655 d83a .L0210 ;; if joy0up && joyposleft = - 2 then gosub SetLaserHome 3656 d83a 3657 d83a a9 10 lda #$10 3658 d83c 2c 80 02 bit SWCHA 3659 d83f d0 10 BNE .skipL0210 3660 d841 .condpart101 3661 d841 ; complex condition detected 3662 d841 a9 fe LDA #254 3663 d843 48 PHA 3664 d844 ba TSX 3665 d845 68 PLA 3666 d846 ad 46 01 LDA joyposleft 3667 d849 dd 01 01 CMP $101,x 3668 d84c d0 03 BNE .skip101then 3669 d84e .condpart102 3670 d84e 20 56 cd jsr .SetLaserHome 3671 d851 3672 d851 .skip101then 3673 d851 .skipL0210 3674 d851 .L0211 ;; if joy0down && joyposright = - 2 then gosub SetLaserHome 3675 d851 3676 d851 a9 20 lda #$20 3677 d853 2c 80 02 bit SWCHA 3678 d856 d0 10 BNE .skipL0211 3679 d858 .condpart103 3680 d858 ; complex condition detected 3681 d858 a9 fe LDA #254 3682 d85a 48 PHA 3683 d85b ba TSX 3684 d85c 68 PLA 3685 d85d ad 47 01 LDA joyposright 3686 d860 dd 01 01 CMP $101,x 3687 d863 d0 03 BNE .skip103then 3688 d865 .condpart104 3689 d865 20 56 cd jsr .SetLaserHome 3690 d868 3691 d868 .skip103then 3692 d868 .skipL0211 3693 d868 .L0212 ;; if joy0fire && joyposup = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3694 d868 3695 d868 2c 02 21 bit sINPT1 3696 d86b 10 29 BPL .skipL0212 3697 d86d .condpart105 3698 d86d ad 44 01 LDA joyposup 3699 d870 c9 01 CMP #1 3700 d872 d0 22 BNE .skip105then 3701 d874 .condpart106 3702 d874 ad 66 01 LDA twinlaserY 3703 d877 38 SEC 3704 d878 e9 0a SBC #10 3705 d87a 8d 66 01 STA twinlaserY 3706 d87d a9 01 lda #1 3707 d87f 85 de sta sfxschedulelock 3708 d881 a9 13 lda #sfx_plainlaser 3711 d887 85 e1 sta sfxinstrumenthi 3712 d889 a9 00 lda #0 3713 d88b 85 e2 sta sfxpitchoffset ; no pitch modification 3714 d88d 85 e3 sta sfxnoteindex ; not a musical note 3715 d88f 20 58 f2 jsr schedulesfx 3716 d892 a9 00 lda #0 3717 d894 85 de sta sfxschedulelock 3718 d896 .skip105then 3719 d896 .skipL0212 3720 d896 .L0213 ;; if joy0fire && joyposdown = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3721 d896 3722 d896 2c 02 21 bit sINPT1 3723 d899 10 29 BPL .skipL0213 3724 d89b .condpart107 3725 d89b ad 45 01 LDA joyposdown 3726 d89e c9 01 CMP #1 3727 d8a0 d0 22 BNE .skip107then 3728 d8a2 .condpart108 3729 d8a2 ad 66 01 LDA twinlaserY 3730 d8a5 38 SEC 3731 d8a6 e9 0a SBC #10 3732 d8a8 8d 66 01 STA twinlaserY 3733 d8ab a9 01 lda #1 3734 d8ad 85 de sta sfxschedulelock 3735 d8af a9 13 lda #sfx_plainlaser 3738 d8b5 85 e1 sta sfxinstrumenthi 3739 d8b7 a9 00 lda #0 3740 d8b9 85 e2 sta sfxpitchoffset ; no pitch modification 3741 d8bb 85 e3 sta sfxnoteindex ; not a musical note 3742 d8bd 20 58 f2 jsr schedulesfx 3743 d8c0 a9 00 lda #0 3744 d8c2 85 de sta sfxschedulelock 3745 d8c4 .skip107then 3746 d8c4 .skipL0213 3747 d8c4 .L0214 ;; if joy0fire && joyposleft = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3748 d8c4 3749 d8c4 2c 02 21 bit sINPT1 3750 d8c7 10 29 BPL .skipL0214 3751 d8c9 .condpart109 3752 d8c9 ad 46 01 LDA joyposleft 3753 d8cc c9 01 CMP #1 3754 d8ce d0 22 BNE .skip109then 3755 d8d0 .condpart110 3756 d8d0 ad 66 01 LDA twinlaserY 3757 d8d3 38 SEC 3758 d8d4 e9 0a SBC #10 3759 d8d6 8d 66 01 STA twinlaserY 3760 d8d9 a9 01 lda #1 3761 d8db 85 de sta sfxschedulelock 3762 d8dd a9 13 lda #sfx_plainlaser 3765 d8e3 85 e1 sta sfxinstrumenthi 3766 d8e5 a9 00 lda #0 3767 d8e7 85 e2 sta sfxpitchoffset ; no pitch modification 3768 d8e9 85 e3 sta sfxnoteindex ; not a musical note 3769 d8eb 20 58 f2 jsr schedulesfx 3770 d8ee a9 00 lda #0 3771 d8f0 85 de sta sfxschedulelock 3772 d8f2 .skip109then 3773 d8f2 .skipL0214 3774 d8f2 .L0215 ;; if joy0fire && joyposright = 1 then twinlaserY = twinlaserY - 10 : playsfx sfx_plainlaser 3775 d8f2 3776 d8f2 2c 02 21 bit sINPT1 3777 d8f5 10 29 BPL .skipL0215 3778 d8f7 .condpart111 3779 d8f7 ad 47 01 LDA joyposright 3780 d8fa c9 01 CMP #1 3781 d8fc d0 22 BNE .skip111then 3782 d8fe .condpart112 3783 d8fe ad 66 01 LDA twinlaserY 3784 d901 38 SEC 3785 d902 e9 0a SBC #10 3786 d904 8d 66 01 STA twinlaserY 3787 d907 a9 01 lda #1 3788 d909 85 de sta sfxschedulelock 3789 d90b a9 13 lda #sfx_plainlaser 3792 d911 85 e1 sta sfxinstrumenthi 3793 d913 a9 00 lda #0 3794 d915 85 e2 sta sfxpitchoffset ; no pitch modification 3795 d917 85 e3 sta sfxnoteindex ; not a musical note 3796 d919 20 58 f2 jsr schedulesfx 3797 d91c a9 00 lda #0 3798 d91e 85 de sta sfxschedulelock 3799 d920 .skip111then 3800 d920 .skipL0215 3801 d920 .L0216 ;; if !joy0fire then twinlaserX = playerX + 2 : twinlaserY = playerY - 8 3802 d920 3803 d920 2c 02 21 bit sINPT1 3804 d923 30 12 BMI .skipL0216 3805 d925 .condpart113 3806 d925 ad 41 01 LDA playerX 3807 d928 18 CLC 3808 d929 69 02 ADC #2 3809 d92b 8d 65 01 STA twinlaserX 3810 d92e ad 42 01 LDA playerY 3811 d931 38 SEC 3812 d932 e9 08 SBC #8 3813 d934 8d 66 01 STA twinlaserY 3814 d937 .skipL0216 3815 d937 .L0217 ;; return 3816 d937 3817 d937 60 RTS 3818 d938 . 3819 d938 ;; 3820 d938 3821 d938 .lose_a_life 3822 d938 ;; lose_a_life 3823 d938 3824 d938 .L0218 ;; lives = lives - 1 : isDead_flag = 0 3825 d938 3826 d938 ad 64 01 LDA lives 3827 d93b 38 SEC 3828 d93c e9 01 SBC #1 3829 d93e 8d 64 01 STA lives 3830 d941 a9 00 LDA #0 3831 d943 8d 6a 01 STA isDead_flag 3832 d946 .L0219 ;; if enemy01_Flag <> 1 then enemy01_X = 32 : enemy01_Y = 0 3833 d946 3834 d946 ad 59 01 LDA enemy01_Flag 3835 d949 c9 01 CMP #1 3836 d94b f0 0a BEQ .skipL0219 3837 d94d .condpart114 3838 d94d a9 20 LDA #32 3839 d94f 8d 57 01 STA enemy01_X 3840 d952 a9 00 LDA #0 3841 d954 8d 58 01 STA enemy01_Y 3842 d957 .skipL0219 3843 d957 .L0220 ;; if enemy_shotFlag <> 1 then enemy_shotX = 0 : enemy_shotY = 0 3844 d957 3845 d957 ad 4c 01 LDA enemy_shotFlag 3846 d95a c9 01 CMP #1 3847 d95c f0 08 BEQ .skipL0220 3848 d95e .condpart115 3849 d95e a9 00 LDA #0 3850 d960 8d 4a 01 STA enemy_shotX 3851 d963 8d 4b 01 STA enemy_shotY 3852 d966 .skipL0220 3853 d966 .L0221 ;; if playerFlag = 1 && explosion_aniframe = 200 && lives > 0 then playerX = 80 : playerY = 144 : playerFlag = 0 : explosion_aniframe = 0 : goto main 3854 d966 3855 d966 ad 4d 01 LDA playerFlag 3856 d969 c9 01 CMP #1 3857 d96b d0 23 BNE .skipL0221 3858 d96d .condpart116 3859 d96d ad 63 01 LDA explosion_aniframe 3860 d970 c9 c8 CMP #200 3861 d972 d0 1c BNE .skip116then 3862 d974 .condpart117 3863 d974 a9 00 LDA #0 3864 d976 cd 64 01 CMP lives 3865 d979 b0 15 BCS .skip117then 3866 d97b .condpart118 3867 d97b a9 50 LDA #80 3868 d97d 8d 41 01 STA playerX 3869 d980 a9 90 LDA #144 3870 d982 8d 42 01 STA playerY 3871 d985 a9 00 LDA #0 3872 d987 8d 4d 01 STA playerFlag 3873 d98a 8d 63 01 STA explosion_aniframe 3874 d98d 4c d5 b8 jmp .main 3875 d990 3876 d990 .skip117then 3877 d990 .skip116then 3878 d990 .skipL0221 3879 d990 .L0222 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 3880 d990 3881 d990 a9 00 LDA #0 3882 d992 8d 44 01 STA joyposup 3883 d995 8d 45 01 STA joyposdown 3884 d998 8d 46 01 STA joyposleft 3885 d99b 8d 47 01 STA joyposright 3886 d99e .L0223 ;; fire_debounce = 0 : bulletX = 0 : bulletY = 0 3887 d99e 3888 d99e a9 00 LDA #0 3889 d9a0 8d 43 01 STA fire_debounce 3890 d9a3 8d 48 01 STA bulletX 3891 d9a6 8d 49 01 STA bulletY 3892 d9a9 .L0224 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 3893 d9a9 3894 d9a9 a9 00 LDA #0 3895 d9ab 8d 57 01 STA enemy01_X 3896 d9ae 8d 58 01 STA enemy01_Y 3897 d9b1 8d 59 01 STA enemy01_Flag 3898 d9b4 .L0225 ;; playerFlag = 0 : gameover_flag = 0 3899 d9b4 3900 d9b4 a9 00 LDA #0 3901 d9b6 8d 4d 01 STA playerFlag 3902 d9b9 8d 5f 01 STA gameover_flag 3903 d9bc .L0226 ;; power_upFlag = 0 : twinlaser_flag = 0 3904 d9bc 3905 d9bc a9 00 LDA #0 3906 d9be 8d 52 01 STA power_upFlag 3907 d9c1 8d 67 01 STA twinlaser_flag 3908 d9c4 . 3909 d9c4 ;; 3910 d9c4 3911 d9c4 . 3912 d9c4 ;; 3913 d9c4 3914 d9c4 .lose_a_lifeloop 3915 d9c4 ;; lose_a_lifeloop 3916 d9c4 3917 d9c4 .L0227 ;; restorescreen 3918 d9c4 3919 d9c4 20 9e f0 jsr restorescreen 3920 d9c7 .L0228 ;; gosub draw_scores 3921 d9c7 3922 d9c7 20 ea c9 jsr .draw_scores 3923 d9ca 3924 d9ca .L0229 ;; drawscreen 3925 d9ca 3926 d9ca 20 c0 f0 jsr drawscreen 3927 d9cd .L0230 ;; if joy0fire then fire_debounce = 2 3928 d9cd 3929 d9cd 2c 02 21 bit sINPT1 3930 d9d0 10 05 BPL .skipL0230 3931 d9d2 .condpart119 3932 d9d2 a9 02 LDA #2 3933 d9d4 8d 43 01 STA fire_debounce 3934 d9d7 .skipL0230 3935 d9d7 .L0231 ;; if !joy0fire then fire_debounce = 1 3936 d9d7 3937 d9d7 2c 02 21 bit sINPT1 3938 d9da 30 05 BMI .skipL0231 3939 d9dc .condpart120 3940 d9dc a9 01 LDA #1 3941 d9de 8d 43 01 STA fire_debounce 3942 d9e1 .skipL0231 3943 d9e1 .L0232 ;; if fire_debounce = 1 && lives > 0 then clearscreen : goto main 3944 d9e1 3945 d9e1 ad 43 01 LDA fire_debounce 3946 d9e4 c9 01 CMP #1 3947 d9e6 d0 0d BNE .skipL0232 3948 d9e8 .condpart121 3949 d9e8 a9 00 LDA #0 3950 d9ea cd 64 01 CMP lives 3951 d9ed b0 06 BCS .skip121then 3952 d9ef .condpart122 3953 d9ef 20 8c f0 jsr clearscreen 3954 d9f2 4c d5 b8 jmp .main 3955 d9f5 3956 d9f5 .skip121then 3957 d9f5 .skipL0232 3958 d9f5 .L0233 ;; if fire_debounce = 1 && lives < 1 then clearscreen : goto gameover 3959 d9f5 3960 d9f5 ad 43 01 LDA fire_debounce 3961 d9f8 c9 01 CMP #1 3962 d9fa d0 0d BNE .skipL0233 3963 d9fc .condpart123 3964 d9fc ad 64 01 LDA lives 3965 d9ff c9 01 CMP #1 3966 da01 b0 06 BCS .skip123then 3967 da03 .condpart124 3968 da03 20 8c f0 jsr clearscreen 3969 da06 4c 0c da jmp .gameover 3970 da09 3971 da09 .skip123then 3972 da09 .skipL0233 3973 da09 .L0234 ;; goto lose_a_lifeloop 3974 da09 3975 da09 4c c4 d9 jmp .lose_a_lifeloop 3976 da0c 3977 da0c . 3978 da0c ;; 3979 da0c 3980 da0c .gameover 3981 da0c ;; gameover 3982 da0c 3983 da0c .L0235 ;; gameover_flag = 0 3984 da0c 3985 da0c a9 00 LDA #0 3986 da0e 8d 5f 01 STA gameover_flag 3987 da11 .L0236 ;; fire_debounce = 1 3988 da11 3989 da11 a9 01 LDA #1 3990 da13 8d 43 01 STA fire_debounce 3991 da16 .gameover_loop 3992 da16 ;; gameover_loop 3993 da16 3994 da16 .L0237 ;; if lives = 0 then gameover_flag = 1 : clearscreen 3995 da16 3996 da16 ad 64 01 LDA lives 3997 da19 c9 00 CMP #0 3998 da1b d0 08 BNE .skipL0237 3999 da1d .condpart125 4000 da1d a9 01 LDA #1 4001 da1f 8d 5f 01 STA gameover_flag 4002 da22 20 8c f0 jsr clearscreen 4003 da25 .skipL0237 4004 da25 .L0238 ;; plotchars 'game^over!' 0 40 16 4005 da25 4006 da25 4c 32 da JMP skipalphadata4 4007 da28 alphadata4 4008 da28 11 .byte.b (alphadata4 4023 da38 85 43 sta temp2 4024 da3a 4025 da3a a9 16 lda #22 ; width in two's complement 4026 da3c 09 00 ora #0 ; palette left shifted 5 bits 4027 da3e 85 44 sta temp3 4028 da40 a9 28 lda #40 4029 da42 85 45 sta temp4 4030 da44 4031 da44 a9 10 lda #16 4032 da46 4033 da46 85 46 sta temp5 4034 da48 4035 da48 20 59 f3 jsr plotcharacters 4036 da4b .L0239 ;; if joy0fire && !fire_debounce then clearscreen : goto plot 4037 da4b 4038 da4b 2c 02 21 bit sINPT1 4039 da4e 10 0b BPL .skipL0239 4040 da50 .condpart126 4041 da50 ad 43 01 LDA fire_debounce 4042 da53 d0 06 BNE .skip126then 4043 da55 .condpart127 4044 da55 20 8c f0 jsr clearscreen 4045 da58 4c 30 b8 jmp .plot 4046 da5b 4047 da5b .skip126then 4048 da5b .skipL0239 4049 da5b .L0240 ;; if !joy0fire then fire_debounce = 0 4050 da5b 4051 da5b 2c 02 21 bit sINPT1 4052 da5e 30 05 BMI .skipL0240 4053 da60 .condpart128 4054 da60 a9 00 LDA #0 4055 da62 8d 43 01 STA fire_debounce 4056 da65 .skipL0240 4057 da65 .L0241 ;; goto gameover_loop 4058 da65 4059 da65 4c 16 da jmp .gameover_loop 4060 da68 4061 da68 . 4062 da68 ;; 4063 da68 4064 da68 . 4065 da68 ;; 4066 da68 4067 da68 . 4068 da68 ;; 4069 da68 4070 da68 . 4071 da68 ;; 4072 da68 4073 da68 . 4074 da68 ;; 4075 da68 4076 da68 . 4077 da68 ;; 4078 da68 4079 da68 . 4080 da68 ;; 4081 da68 4082 da68 . 4083 da68 ;; 4084 da68 4085 da68 . 4086 da68 ;; 4087 da68 4088 da68 . 4089 da68 ;; 4090 da68 4091 da68 . 4092 da68 ;; 4093 da68 4094 da68 . 4095 da68 ;; 4096 da68 4097 da68 . 4098 da68 ;; 4099 da68 4100 da68 . 4101 da68 ;; 4102 da68 4103 da68 . 4104 da68 ;; 4105 da68 4106 da68 . 4107 da68 ;; 4108 da68 4109 da68 .titlescreen 4110 da68 ;; titlescreen 4111 da68 4112 da68 .L0242 ;; plotchars 'new^vertical^shooting' 1 38 4 4113 da68 4114 da68 4c 80 da JMP skipalphadata5 4115 da6b alphadata5 4116 da6b 18 .byte.b (alphadata5 4142 da86 85 43 sta temp2 4143 da88 4144 da88 a9 0b lda #11 ; width in two's complement 4145 da8a 09 20 ora #32 ; palette left shifted 5 bits 4146 da8c 85 44 sta temp3 4147 da8e a9 26 lda #38 4148 da90 85 45 sta temp4 4149 da92 4150 da92 a9 04 lda #4 4151 da94 4152 da94 85 46 sta temp5 4153 da96 4154 da96 20 59 f3 jsr plotcharacters 4155 da99 .L0243 ;; plotchars 'demo' 1 72 5 4156 da99 4157 da99 4c a0 da JMP skipalphadata6 4158 da9c alphadata6 4159 da9c 0e .byte.b (alphadata6 4168 daa6 85 43 sta temp2 4169 daa8 4170 daa8 a9 1c lda #28 ; width in two's complement 4171 daaa 09 20 ora #32 ; palette left shifted 5 bits 4172 daac 85 44 sta temp3 4173 daae a9 48 lda #72 4174 dab0 85 45 sta temp4 4175 dab2 4176 dab2 a9 05 lda #5 4177 dab4 4178 dab4 85 46 sta temp5 4179 dab6 4180 dab6 20 59 f3 jsr plotcharacters 4181 dab9 .L0244 ;; plotchars 'by^shane^skekel.' 1 48 7 4182 dab9 4183 dab9 4c cc da JMP skipalphadata7 4184 dabc alphadata7 4185 dabc 0c .byte.b (alphadata7 4206 dad2 85 43 sta temp2 4207 dad4 4208 dad4 a9 10 lda #16 ; width in two's complement 4209 dad6 09 20 ora #32 ; palette left shifted 5 bits 4210 dad8 85 44 sta temp3 4211 dada a9 30 lda #48 4212 dadc 85 45 sta temp4 4213 dade 4214 dade a9 07 lda #7 4215 dae0 4216 dae0 85 46 sta temp5 4217 dae2 4218 dae2 20 59 f3 jsr plotcharacters 4219 dae5 .L0245 ;; plotchars 'push^fire^to^begin.' 2 42 16 4220 dae5 4221 dae5 4c fb da JMP skipalphadata8 4222 dae8 alphadata8 4223 dae8 1a .byte.b (alphadata8 4247 db01 85 43 sta temp2 4248 db03 4249 db03 a9 0d lda #13 ; width in two's complement 4250 db05 09 40 ora #64 ; palette left shifted 5 bits 4251 db07 85 44 sta temp3 4252 db09 a9 2a lda #42 4253 db0b 85 45 sta temp4 4254 db0d 4255 db0d a9 10 lda #16 4256 db0f 4257 db0f 85 46 sta temp5 4258 db11 4259 db11 20 59 f3 jsr plotcharacters 4260 db14 .L0246 ;; savescreen 4261 db14 4262 db14 20 b0 f0 jsr savescreen 4263 db17 .L0247 ;; drawscreen 4264 db17 4265 db17 20 c0 f0 jsr drawscreen 4266 db1a .L0248 ;; fire_debounce = 1 4267 db1a 4268 db1a a9 01 LDA #1 4269 db1c 8d 43 01 STA fire_debounce 4270 db1f . 4271 db1f ;; 4272 db1f 4273 db1f .titlescreenloop 4274 db1f ;; titlescreenloop 4275 db1f 4276 db1f .L0249 ;; restorescreen 4277 db1f 4278 db1f 20 9e f0 jsr restorescreen 4279 db22 .L0250 ;; if switchreset then reboot 4280 db22 4281 db22 20 85 f4 jsr checkresetswitch 4282 db25 d0 03 BNE .skipL0250 4283 db27 .condpart129 4284 db27 4c 72 f5 JMP START 4285 db2a .skipL0250 4286 db2a .L0251 ;; if joy0fire then clearscreen : savescreen : lives = $04 : score0 = 0 : playsfx sfx_bling : goto main 4287 db2a 4288 db2a 2c 02 21 bit sINPT1 4289 db2d 10 36 BPL .skipL0251 4290 db2f .condpart130 4291 db2f 20 8c f0 jsr clearscreen 4292 db32 20 b0 f0 jsr savescreen 4293 db35 a9 04 LDA #$04 4294 db37 8d 64 01 STA lives 4295 db3a a9 00 LDA #$00 4296 db3c 8d a8 01 STA score0+2 4297 db3f a9 00 LDA #$00 4298 db41 8d a7 01 STA score0+1 4299 db44 a9 00 LDA #$00 4300 db46 8d a6 01 STA score0 4301 db49 a9 01 lda #1 4302 db4b 85 de sta sfxschedulelock 4303 db4d a9 83 lda #sfx_bling 4306 db53 85 e1 sta sfxinstrumenthi 4307 db55 a9 00 lda #0 4308 db57 85 e2 sta sfxpitchoffset ; no pitch modification 4309 db59 85 e3 sta sfxnoteindex ; not a musical note 4310 db5b 20 58 f2 jsr schedulesfx 4311 db5e a9 00 lda #0 4312 db60 85 de sta sfxschedulelock 4313 db62 4c d5 b8 jmp .main 4314 db65 4315 db65 .skipL0251 4316 db65 .L0252 ;; if !joy0fire then fire_debounce = 0 4317 db65 4318 db65 2c 02 21 bit sINPT1 4319 db68 30 05 BMI .skipL0252 4320 db6a .condpart131 4321 db6a a9 00 LDA #0 4322 db6c 8d 43 01 STA fire_debounce 4323 db6f .skipL0252 4324 db6f . 4325 db6f ;; 4326 db6f 4327 db6f . 4328 db6f ;; 4329 db6f 4330 db6f . 4331 db6f ;; 4332 db6f 4333 db6f .L0253 ;; drawscreen 4334 db6f 4335 db6f 20 c0 f0 jsr drawscreen 4336 db72 .L0254 ;; goto titlescreenloop 4337 db72 4338 db72 4c 1f db jmp .titlescreenloop 4339 db75 4340 db75 . 4341 db75 ;; 4342 db75 4343 db75 . 4344 db75 ;; 4345 db75 4346 db75 .initialise_gamescreen 4347 db75 ;; initialise_gamescreen 4348 db75 4349 db75 .L0255 ;; clearscreen 4350 db75 4351 db75 20 8c f0 jsr clearscreen 4352 db78 .L0256 ;; BACKGRND = $00 4353 db78 4354 db78 a9 00 LDA #$00 4355 db7a 85 20 STA BACKGRND 4356 db7c . 4357 db7c ;; 4358 db7c 4359 db7c .L0257 ;; savescreen 4360 db7c 4361 db7c 20 b0 f0 jsr savescreen 4362 db7f .L0258 ;; return 4363 db7f 4364 db7f 60 RTS 4365 db80 . 4366 db80 ;; 4367 db80 4368 db80 .L0259 ;; data sfx_bling 4369 db80 4370 db80 4c b9 db JMP .skipL0259 4371 db83 sfx_bling 4372 db83 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 4373 db86 4374 db86 1c 04 07 .byte.b $1c,$04,$07 4375 db89 4376 db89 1b 04 07 .byte.b $1b,$04,$07 4377 db8c 4378 db8c 04 0f 05 .byte.b $04,$0f,$05 4379 db8f 4380 db8f 15 04 09 .byte.b $15,$04,$09 4381 db92 4382 db92 16 04 07 .byte.b $16,$04,$07 4383 db95 4384 db95 03 0f 04 .byte.b $03,$0f,$04 4385 db98 4386 db98 11 04 08 .byte.b $11,$04,$08 4387 db9b 4388 db9b 11 04 08 .byte.b $11,$04,$08 4389 db9e 4390 db9e 11 04 04 .byte.b $11,$04,$04 4391 dba1 4392 dba1 0e 04 09 .byte.b $0e,$04,$09 4393 dba4 4394 dba4 0e 04 07 .byte.b $0e,$04,$07 4395 dba7 4396 dba7 0e 04 04 .byte.b $0e,$04,$04 4397 dbaa 4398 dbaa 1c 04 07 .byte.b $1c,$04,$07 4399 dbad 4400 dbad 1b 04 05 .byte.b $1b,$04,$05 4401 dbb0 4402 dbb0 1c 04 04 .byte.b $1c,$04,$04 4403 dbb3 4404 dbb3 1b 04 02 .byte.b $1b,$04,$02 4405 dbb6 4406 dbb6 00 00 00 .byte.b $00,$00,$00 4407 dbb9 4408 dbb9 .skipL0259 4409 dbb9 00 83 sfx_bling_lo = #sfx_bling 4411 dbb9 . 4412 dbb9 ;; 4413 dbb9 4414 dbb9 .L0260 ;; data sfx_pulsecannon 4415 dbb9 4416 dbb9 4c 10 dc JMP .skipL0260 4417 dbbc sfx_pulsecannon 4418 dbbc 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 4419 dbbf 4420 dbbf 1e 0c 0a .byte.b $1e,$0c,$0a ; first chunk of freq,channel,volume 4421 dbc2 4422 dbc2 07 06 0f .byte.b $07,$06,$0f 4423 dbc5 4424 dbc5 07 06 0f .byte.b $07,$06,$0f 4425 dbc8 4426 dbc8 1e 06 0f .byte.b $1e,$06,$0f 4427 dbcb 4428 dbcb 17 0c 0b .byte.b $17,$0c,$0b 4429 dbce 4430 dbce 1b 0c 0b .byte.b $1b,$0c,$0b 4431 dbd1 4432 dbd1 1e 0c 0f .byte.b $1e,$0c,$0f 4433 dbd4 4434 dbd4 07 06 0f .byte.b $07,$06,$0f 4435 dbd7 4436 dbd7 07 06 0f .byte.b $07,$06,$0f 4437 dbda 4438 dbda 1e 06 08 .byte.b $1e,$06,$08 4439 dbdd 4440 dbdd 17 0c 06 .byte.b $17,$0c,$06 4441 dbe0 4442 dbe0 1b 0c 0f .byte.b $1b,$0c,$0f 4443 dbe3 4444 dbe3 1e 0c 0f .byte.b $1e,$0c,$0f 4445 dbe6 4446 dbe6 07 06 0f .byte.b $07,$06,$0f 4447 dbe9 4448 dbe9 07 06 0f .byte.b $07,$06,$0f 4449 dbec 4450 dbec 0a 06 0a .byte.b $0a,$06,$0a 4451 dbef 4452 dbef 17 0c 0a .byte.b $17,$0c,$0a 4453 dbf2 4454 dbf2 1e 0c 04 .byte.b $1e,$0c,$04 4455 dbf5 4456 dbf5 1e 06 09 .byte.b $1e,$06,$09 4457 dbf8 4458 dbf8 1b 04 05 .byte.b $1b,$04,$05 4459 dbfb 4460 dbfb 07 06 0f .byte.b $07,$06,$0f 4461 dbfe 4462 dbfe 0a 06 09 .byte.b $0a,$06,$09 4463 dc01 4464 dc01 17 0c 0d .byte.b $17,$0c,$0d 4465 dc04 4466 dc04 1b 0c 09 .byte.b $1b,$0c,$09 4467 dc07 4468 dc07 0a 06 05 .byte.b $0a,$06,$05 4469 dc0a 4470 dc0a 17 0c 03 .byte.b $17,$0c,$03 4471 dc0d 4472 dc0d 00 00 00 .byte.b $00,$00,$00 4473 dc10 4474 dc10 .skipL0260 4475 dc10 00 bc sfx_pulsecannon_lo = #sfx_pulsecannon 4477 dc10 . 4478 dc10 ;; 4479 dc10 4480 dc10 .L0261 ;; data sfx_plainlaser 4481 dc10 4482 dc10 4c 43 dc JMP .skipL0261 4483 dc13 sfx_plainlaser 4484 dc13 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 4485 dc16 4486 dc16 10 04 06 .byte.b $10,$04,$06 ; first chunk of freq,channel,volume 4487 dc19 4488 dc19 13 04 08 .byte.b $13,$04,$08 4489 dc1c 4490 dc1c 16 04 08 .byte.b $16,$04,$08 4491 dc1f 4492 dc1f 16 04 07 .byte.b $16,$04,$07 4493 dc22 4494 dc22 1c 04 09 .byte.b $1c,$04,$09 4495 dc25 4496 dc25 0b 0c 0f .byte.b $0b,$0c,$0f 4497 dc28 4498 dc28 0d 0c 0f .byte.b $0d,$0c,$0f 4499 dc2b 4500 dc2b 0e 0c 0f .byte.b $0e,$0c,$0f 4501 dc2e 4502 dc2e 0e 0c 0f .byte.b $0e,$0c,$0f 4503 dc31 4504 dc31 12 0c 0f .byte.b $12,$0c,$0f 4505 dc34 4506 dc34 03 06 0d .byte.b $03,$06,$0d 4507 dc37 4508 dc37 1e 0c 0a .byte.b $1e,$0c,$0a 4509 dc3a 4510 dc3a 1e 0c 0c .byte.b $1e,$0c,$0c 4511 dc3d 4512 dc3d 0a 06 04 .byte.b $0a,$06,$04 4513 dc40 4514 dc40 00 00 00 .byte.b $00,$00,$00 4515 dc43 4516 dc43 .skipL0261 4517 dc43 00 13 sfx_plainlaser_lo = #sfx_plainlaser 4519 dc43 . 4520 dc43 ;; 4521 dc43 4522 dc43 .L0262 ;; data sfx_explosion 4523 dc43 4524 dc43 4c d6 dc JMP .skipL0262 4525 dc46 sfx_explosion 4526 dc46 10 10 00 .byte.b $10,$10,$00 4527 dc49 4528 dc49 01 08 02 .byte.b $01,$08,$02 4529 dc4c 4530 dc4c 0b 0c 05 .byte.b $0b,$0c,$05 4531 dc4f 4532 dc4f 04 06 08 .byte.b $04,$06,$08 4533 dc52 4534 dc52 03 0e 0f .byte.b $03,$0e,$0f 4535 dc55 4536 dc55 09 06 0f .byte.b $09,$06,$0f 4537 dc58 4538 dc58 0d 06 0f .byte.b $0d,$06,$0f 4539 dc5b 4540 dc5b 04 0e 0f .byte.b $04,$0e,$0f 4541 dc5e 4542 dc5e 0f 06 08 .byte.b $0f,$06,$08 4543 dc61 4544 dc61 09 06 04 .byte.b $09,$06,$04 4545 dc64 4546 dc64 16 01 03 .byte.b $16,$01,$03 4547 dc67 4548 dc67 0c 06 04 .byte.b $0c,$06,$04 4549 dc6a 4550 dc6a 09 06 05 .byte.b $09,$06,$05 4551 dc6d 4552 dc6d 0a 06 03 .byte.b $0a,$06,$03 4553 dc70 4554 dc70 09 06 05 .byte.b $09,$06,$05 4555 dc73 4556 dc73 0d 06 08 .byte.b $0d,$06,$08 4557 dc76 4558 dc76 09 06 04 .byte.b $09,$06,$04 4559 dc79 4560 dc79 04 0e 06 .byte.b $04,$0e,$06 4561 dc7c 4562 dc7c 0f 06 05 .byte.b $0f,$06,$05 4563 dc7f 4564 dc7f 0f 06 07 .byte.b $0f,$06,$07 4565 dc82 4566 dc82 04 0e 07 .byte.b $04,$0e,$07 4567 dc85 4568 dc85 08 06 06 .byte.b $08,$06,$06 4569 dc88 4570 dc88 03 0e 08 .byte.b $03,$0e,$08 4571 dc8b 4572 dc8b 0f 06 06 .byte.b $0f,$06,$06 4573 dc8e 4574 dc8e 09 06 05 .byte.b $09,$06,$05 4575 dc91 4576 dc91 06 06 05 .byte.b $06,$06,$05 4577 dc94 4578 dc94 03 0e 05 .byte.b $03,$0e,$05 4579 dc97 4580 dc97 0e 06 06 .byte.b $0e,$06,$06 4581 dc9a 4582 dc9a 02 0e 05 .byte.b $02,$0e,$05 4583 dc9d 4584 dc9d 0f 06 03 .byte.b $0f,$06,$03 4585 dca0 4586 dca0 0e 06 06 .byte.b $0e,$06,$06 4587 dca3 4588 dca3 09 06 05 .byte.b $09,$06,$05 4589 dca6 4590 dca6 0c 06 05 .byte.b $0c,$06,$05 4591 dca9 4592 dca9 0f 06 03 .byte.b $0f,$06,$03 4593 dcac 4594 dcac 04 0e 08 .byte.b $04,$0e,$08 4595 dcaf 4596 dcaf 0c 06 03 .byte.b $0c,$06,$03 4597 dcb2 4598 dcb2 0f 06 03 .byte.b $0f,$06,$03 4599 dcb5 4600 dcb5 0c 06 06 .byte.b $0c,$06,$06 4601 dcb8 4602 dcb8 0f 06 04 .byte.b $0f,$06,$04 4603 dcbb 4604 dcbb 0f 06 05 .byte.b $0f,$06,$05 4605 dcbe 4606 dcbe 0f 06 03 .byte.b $0f,$06,$03 4607 dcc1 4608 dcc1 0a 06 04 .byte.b $0a,$06,$04 4609 dcc4 4610 dcc4 0f 06 03 .byte.b $0f,$06,$03 4611 dcc7 4612 dcc7 08 06 03 .byte.b $08,$06,$03 4613 dcca 4614 dcca 0c 06 03 .byte.b $0c,$06,$03 4615 dccd 4616 dccd 0e 06 03 .byte.b $0e,$06,$03 4617 dcd0 4618 dcd0 08 06 03 .byte.b $08,$06,$03 4619 dcd3 4620 dcd3 00 00 00 .byte.b $00,$00,$00 4621 dcd6 4622 dcd6 .skipL0262 4623 dcd6 00 46 sfx_explosion_lo = #sfx_explosion 4625 dcd6 DMAHOLEEND2 SET . 810 bytes of ROM space left in DMA hole 2. 4626 dcd6 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND2 - DMAHOLESTART2)]d , "bytes of ROM space left in DMA hole 2." 4627 dcd6 - if ((256*WZONEHEIGHT)-(DMAHOLEEND2 - DMAHOLESTART2)) < 0 4628 dcd6 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 4629 dcd6 endif 4630 dcd6 4631 e000 ORG $E000,0 ; ************* 4632 e000 4633 e000 4634 e100 ORG $E100,0 ; ************* 4635 e100 4636 e100 4637 e200 ORG $E200,0 ; ************* 4638 e200 4639 e200 4640 e300 ORG $E300,0 ; ************* 4641 e300 4642 e300 4643 e400 ORG $E400,0 ; ************* 4644 e400 4645 e400 4646 e500 ORG $E500,0 ; ************* 4647 e500 4648 e500 4649 e600 ORG $E600,0 ; ************* 4650 e600 4651 e600 4652 e700 ORG $E700,0 ; ************* 4653 e700 4654 e700 - if SPACEOVERFLOW > 0 4655 e700 - echo "" 4656 e700 - echo "######## ERROR: space overflow detected in",[SPACEOVERFLOW]d,"areas." 4657 e700 - echo "######## look above for areas with negative ROM space left." 4658 e700 - echo "######## Aborting assembly." 4659 e700 - ERR 4660 e700 endif 4661 e700 4662 e700 4663 e700 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4664 e700 4665 e700 ifnconst bankswitchmode 4666 e700 if ( * < $f000 ) 4667 f000 ORG $F000 4668 f000 endif 4669 f000 - else 4670 f000 - ifconst ROM128K 4671 f000 - if ( * < $f000 ) 4672 f000 - ORG $27000 4673 f000 - RORG $F000 4674 f000 - endif 4675 f000 - endif 4676 f000 - ifconst ROM144K 4677 f000 - if ( * < $f000 ) 4678 f000 - ORG $27000 4679 f000 - RORG $F000 4680 f000 - endif 4681 f000 - endif 4682 f000 - ifconst ROM256K 4683 f000 - if ( * < $f000 ) 4684 f000 - ORG $47000 4685 f000 - RORG $F000 4686 f000 - endif 4687 f000 - endif 4688 f000 - ifconst ROM272K 4689 f000 - if ( * < $f000 ) 4690 f000 - ORG $47000 4691 f000 - RORG $F000 4692 f000 - endif 4693 f000 - endif 4694 f000 - ifconst ROM512K 4695 f000 - if ( * < $f000 ) 4696 f000 - ORG $87000 4697 f000 - RORG $F000 4698 f000 - endif 4699 f000 - endif 4700 f000 - ifconst ROM528K 4701 f000 - if ( * < $f000 ) 4702 f000 - ORG $87000 4703 f000 - RORG $F000 4704 f000 - endif 4705 f000 - endif 4706 f000 endif 4707 f000 4708 f000 ; all of these "modules" have conditional clauses in them, so even though 4709 f000 ; they're always included here, they don't take up rom unless the user 4710 f000 ; explicitly enables support for the feature. 4711 f000 4712 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_continue.78b.asm 4714 f000 endif 4715 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_continue.78b.asm 4717 f000 endif 4718 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_continue.78b.asm 4720 f000 endif 4721 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_continue.78b.asm 4723 f000 endif 4724 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4725 f000 4726 f000 ;standard routimes needed for pretty much all games 4727 f000 4728 f000 ; some definitions used with "set debug color" 4729 f000 00 91 DEBUGCALC = $91 4730 f000 00 41 DEBUGWASTE = $41 4731 f000 00 c1 DEBUGDRAW = $C1 4732 f000 4733 f000 ;NMI and IRQ handlers 4734 f000 NMI 4735 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 4736 f000 48 pha ; save A 4737 f001 a5 4d lda visibleover 4738 f003 49 ff eor #255 4739 f005 85 4d sta visibleover 4740 f007 - ifconst DEBUGINTERRUPT 4741 f007 - and #$93 4742 f007 - sta BACKGRND 4743 f007 endif 4744 f007 ce b2 01 dec interruptindex 4745 f00a d0 03 bne skipreallyoffvisible 4746 f00c 4c 73 f0 jmp reallyoffvisible 4747 f00f skipreallyoffvisible 4748 f00f a5 4d lda visibleover 4749 f011 d0 03 bne carryontopscreenroutine 4750 f013 - ifconst .bottomscreenroutine 4751 f013 - jsr .bottomscreenroutine 4752 f013 endif 4753 f013 4754 f013 4c 65 f0 jmp skiptopscreenroutine 4755 f016 carryontopscreenroutine 4756 f016 8a txa ; save X+Y 4757 f017 48 pha 4758 f018 98 tya 4759 f019 48 pha 4760 f01a d8 cld 4761 f01b - ifconst .topscreenroutine 4762 f01b - jsr .topscreenroutine 4763 f01b endif 4764 f01b ifnconst CANARYOFF 4765 f01b ad c1 01 lda canary 4766 f01e f0 0c beq skipcanarytriggered 4767 f020 a9 45 lda #$45 4768 f022 85 20 sta BACKGRND 4769 f024 a9 60 lda #$60 4770 f026 85 3c sta CTRL 4771 f028 8d 07 21 sta sCTRL 4772 f02b 02 .byte.b $02 ; KIL/JAM 4773 f02c endif 4774 f02c skipcanarytriggered 4775 f02c ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 4776 f02f 4777 f02f ; ** Other important routines that need to regularly run, and can run onscreen. 4778 f02f ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 4779 f02f 4780 f02f - ifconst LONGCONTROLLERREAD 4781 f02f -longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 4782 f02f - ldy port1control 4783 f02f - lda longreadtype,y 4784 f02f - beq LLRET1 4785 f02f - tay 4786 f02f - lda longreadroutinehiP1,y 4787 f02f - sta inttemp4 4788 f02f - lda longreadroutineloP1,y 4789 f02f - sta inttemp3 4790 f02f - jmp (inttemp3) 4791 f02f -LLRET1 4792 f02f - ldy port0control 4793 f02f - lda longreadtype,y 4794 f02f - beq LLRET0 4795 f02f - tay 4796 f02f - lda longreadroutinehiP0,y 4797 f02f - sta inttemp4 4798 f02f - lda longreadroutineloP0,y 4799 f02f - sta inttemp3 4800 f02f - jmp (inttemp3) 4801 f02f -LLRET0 4802 f02f - 4803 f02f - 4804 f02f - ifconst PADDLERANGE 4805 f02f -TIMEVAL = PADDLERANGE 4806 f02f - else 4807 f02f -TIMEVAL = 160 4808 f02f - endif 4809 f02f -TIMEOFFSET = 10 4810 f02f - 4811 f02f endif ; LONGCONTROLLERREAD 4812 f02f 4813 f02f 4814 f02f 20 e5 f1 jsr servicesfxchannels 4815 f032 - ifconst MUSICTRACKER 4816 f032 - jsr servicesong 4817 f032 endif ; MUSICTRACKER 4818 f032 4819 f032 ee a4 01 inc framecounter 4820 f035 ad a4 01 lda framecounter 4821 f038 29 3f and #63 4822 f03a d0 08 bne skipcountdownseconds 4823 f03c ad a5 01 lda countdownseconds 4824 f03f f0 03 beq skipcountdownseconds 4825 f041 ce a5 01 dec countdownseconds 4826 f044 skipcountdownseconds 4827 f044 4828 f044 a2 01 ldx #1 4829 f046 buttonreadloop 4830 f046 8a txa 4831 f047 48 pha 4832 f048 bc b7 01 ldy port0control,x 4833 f04b b9 c8 f1 lda buttonhandlerlo,y 4834 f04e 85 da sta inttemp3 4835 f050 b9 bd f1 lda buttonhandlerhi,y 4836 f053 85 db sta inttemp4 4837 f055 05 da ora inttemp3 4838 f057 f0 03 beq buttonreadloopreturn 4839 f059 6c da 00 jmp (inttemp3) 4840 f05c buttonreadloopreturn 4841 f05c 68 pla 4842 f05d aa tax 4843 f05e ca dex 4844 f05f 10 e5 bpl buttonreadloop 4845 f061 4846 f061 - ifconst KEYPADSUPPORT 4847 f061 - jsr keypadrowselect 4848 f061 endif ; KEYPADSUPPORT 4849 f061 4850 f061 4851 f061 - ifconst DOUBLEBUFFER 4852 f061 - lda doublebufferminimumframeindex 4853 f061 - beq skipdoublebufferminimumframeindexadjust 4854 f061 - dec doublebufferminimumframeindex 4855 f061 -skipdoublebufferminimumframeindexadjust 4856 f061 endif 4857 f061 4858 f061 68 pla 4859 f062 a8 tay 4860 f063 68 pla 4861 f064 aa tax 4862 f065 skiptopscreenroutine 4863 f065 68 pla 4864 f066 40 RTI 4865 f067 4866 f067 IRQ ; the only source of non-nmi is the BRK opcode. The only 4867 f067 ifnconst BREAKPROTECTOFF 4868 f067 a9 1a lda #$1A 4869 f069 85 20 sta BACKGRND 4870 f06b a9 60 lda #$60 4871 f06d 85 3c sta CTRL 4872 f06f 8d 07 21 sta sCTRL 4873 f072 02 .byte.b $02 ; KIL/JAM 4874 f073 - else 4875 f073 - RTI 4876 f073 endif 4877 f073 4878 f073 - ifconst LONGCONTROLLERREAD 4879 f073 - 4880 f073 -longreadtype 4881 f073 - .byte 0, 0, 0, 1 ; NONE PROLINE LIGHTGUN PADDLE 4882 f073 - .byte 2, 0, 3, 0 ; TRKBALL VCSSTICK DRIVING KEYPAD 4883 f073 - .byte 3, 3, 0 ; STMOUSE AMOUSE ATARIVOX 4884 f073 - 4885 f073 -longreadroutineloP0 4886 f073 - .byte LLRET0 ; 0 = no routine 4893 f073 - .byte >paddleport0update ; 1 = paddle 4894 f073 - .byte >trakball0update ; 2 = trackball 4895 f073 - .byte >mouse0update ; 3 = mouse 4896 f073 - 4897 f073 -longreadroutineloP1 4898 f073 - .byte LLRET1 ; 0 = no routine 4905 f073 - .byte >paddleport1update ; 1 = paddle 4906 f073 - .byte >trakball1update ; 2 = trackball 4907 f073 - .byte >mouse1update ; 3 = mouse 4908 f073 - 4909 f073 - 4910 f073 -SETTIM64T 4911 f073 - bne skipdefaulttime 4912 f073 - ifnconst PADDLESMOOTHINGOFF 4913 f073 - lda #(TIMEVAL+TIMEOFFSET+1) 4914 f073 - else 4915 f073 - lda #(TIMEVAL+TIMEOFFSET) 4916 f073 - endif 4917 f073 -skipdefaulttime 4918 f073 - tay 4919 f073 - dey 4920 f073 -.setTIM64Tloop 4921 f073 - sta TIM64T 4922 f073 - cpy INTIM 4923 f073 - bne .setTIM64Tloop 4924 f073 - rts 4925 f073 endif ; LONGCONTROLLERREAD 4926 f073 4927 f073 reallyoffvisible 4928 f073 85 24 sta WSYNC 4929 f075 4930 f075 a9 00 lda #0 4931 f077 85 4d sta visibleover 4932 f079 - ifconst DEBUGINTERRUPT 4933 f079 - sta BACKGRND 4934 f079 endif 4935 f079 4936 f079 a9 03 lda #3 4937 f07b 8d b2 01 sta interruptindex 4938 f07e 4939 f07e 8a txa 4940 f07f 48 pha 4941 f080 98 tya 4942 f081 48 pha 4943 f082 d8 cld 4944 f083 4945 f083 4946 f083 20 5f f1 jsr uninterruptableroutines 4947 f086 4948 f086 - ifconst .userinterrupt 4949 f086 - jsr .userinterrupt 4950 f086 endif 4951 f086 4952 f086 - ifconst KEYPADSUPPORT 4953 f086 - jsr keypadcolumnread 4954 f086 endif 4955 f086 4956 f086 68 pla 4957 f087 a8 tay 4958 f088 68 pla 4959 f089 aa tax 4960 f08a 68 pla 4961 f08b 40 RTI 4962 f08c 4963 f08c clearscreen 4964 f08c a2 17 ldx #(WZONECOUNT-1) 4965 f08e a9 00 lda #0 4966 f090 clearscreenloop 4967 f090 95 65 sta dlend,x 4968 f092 ca dex 4969 f093 10 fb bpl clearscreenloop 4970 f095 a9 00 lda #0 4971 f097 8d ad 01 sta valbufend ; clear the bcd value buffer 4972 f09a 8d ae 01 sta valbufendsave 4973 f09d 60 rts 4974 f09e 4975 f09e restorescreen 4976 f09e a2 17 ldx #(WZONECOUNT-1) 4977 f0a0 a9 00 lda #0 4978 f0a2 restorescreenloop 4979 f0a2 b5 82 lda dlendsave,x 4980 f0a4 95 65 sta dlend,x 4981 f0a6 ca dex 4982 f0a7 10 f9 bpl restorescreenloop 4983 f0a9 ad ae 01 lda valbufendsave 4984 f0ac 8d ad 01 sta valbufend 4985 f0af 60 rts 4986 f0b0 4987 f0b0 savescreen 4988 f0b0 a2 17 ldx #(WZONECOUNT-1) 4989 f0b2 savescreenloop 4990 f0b2 b5 65 lda dlend,x 4991 f0b4 95 82 sta dlendsave,x 4992 f0b6 ca dex 4993 f0b7 10 f9 bpl savescreenloop 4994 f0b9 ad ad 01 lda valbufend 4995 f0bc 8d ae 01 sta valbufendsave 4996 f0bf - ifconst DOUBLEBUFFER 4997 f0bf - lda doublebufferstate 4998 f0bf - beq savescreenrts 4999 f0bf - lda #1 5000 f0bf - sta doublebufferbufferdirty 5001 f0bf -savescreenrts 5002 f0bf endif ; DOUBLEBUFFER 5003 f0bf 60 rts 5004 f0c0 5005 f0c0 drawscreen 5006 f0c0 5007 f0c0 a9 00 lda #0 5008 f0c2 85 42 sta temp1 ; not B&W if we're here... 5009 f0c4 5010 f0c4 drawscreenwait 5011 f0c4 a5 4d lda visibleover 5012 f0c6 d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 5013 f0c8 5014 f0c8 ;restore some registers in case the game changed them mid-screen... 5015 f0c8 ad 07 21 lda sCTRL 5016 f0cb 05 42 ora temp1 5017 f0cd 85 3c sta CTRL 5018 f0cf ad 0b 21 lda sCHARBASE 5019 f0d2 85 34 sta CHARBASE 5020 f0d4 5021 f0d4 ;ensure all of the display list is terminated... 5022 f0d4 20 45 f1 jsr terminatedisplaylist 5023 f0d7 5024 f0d7 ifnconst pauseroutineoff 5025 f0d7 20 e2 f0 jsr pauseroutine 5026 f0da endif ; pauseroutineoff 5027 f0da 5028 f0da ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 5029 f0da ; delaying a full frame, but still allowing time for basic calculations. 5030 f0da visiblescreenstartedwait 5031 f0da a5 4d lda visibleover 5032 f0dc f0 fc beq visiblescreenstartedwait 5033 f0de visiblescreenstartedwaitdone 5034 f0de ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 5035 f0e1 60 rts 5036 f0e2 5037 f0e2 ifnconst pauseroutineoff 5038 f0e2 ; check to see if pause was pressed and released 5039 f0e2 pauseroutine 5040 f0e2 ad b3 01 lda pausedisable 5041 f0e5 d0 4e bne leavepauseroutine 5042 f0e7 a9 08 lda #8 5043 f0e9 2c 82 02 bit SWCHB 5044 f0ec f0 29 beq pausepressed 5045 f0ee 5046 f0ee ifnconst SOFTRESETASPAUSEOFF 5047 f0ee ifnconst MOUSESUPPORT 5048 f0ee ifnconst TRAKBALLSUPPORT 5049 f0ee ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 5050 f0f1 29 70 and #%01110000 ; _LDU 5051 f0f3 f0 22 beq pausepressed 5052 f0f5 endif 5053 f0f5 endif 5054 f0f5 endif 5055 f0f5 5056 f0f5 ;pause isn't pressed 5057 f0f5 a9 00 lda #0 5058 f0f7 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 5059 f0fa 5060 f0fa ;check if we're in an already paused state 5061 f0fa ad 00 21 lda pausestate 5062 f0fd f0 36 beq leavepauseroutine ; nope, leave 5063 f0ff 5064 f0ff c9 01 cmp #1 ; last frame was the start of pausing 5065 f101 f0 2b beq enterpausestate2 ; move from state 1 to 2 5066 f103 5067 f103 c9 02 cmp #2 5068 f105 f0 34 beq carryonpausing 5069 f107 5070 f107 ;pausestate must be >2, which means we're ending an unpause 5071 f107 a9 00 lda #0 5072 f109 8d ac 01 sta pausebuttonflag 5073 f10c 8d 00 21 sta pausestate 5074 f10f ad 07 21 lda sCTRL 5075 f112 85 3c sta CTRL 5076 f114 4c 35 f1 jmp leavepauseroutine 5077 f117 5078 f117 pausepressed 5079 f117 ;pause is pressed 5080 f117 ad ac 01 lda pausebuttonflag 5081 f11a c9 ff cmp #$ff 5082 f11c f0 1d beq carryonpausing 5083 f11e 5084 f11e ;its a new press, increment the state 5085 f11e ee 00 21 inc pausestate 5086 f121 5087 f121 ;silence volume at the start and end of pausing 5088 f121 a9 00 lda #0 5089 f123 85 19 sta AUDV0 5090 f125 85 1a sta AUDV1 5091 f127 5092 f127 - ifconst pokeysupport 5093 f127 - ldy #7 5094 f127 -pausesilencepokeyaudioloop 5095 f127 - sta (pokeybase),y 5096 f127 - dey 5097 f127 - bpl pausesilencepokeyaudioloop 5098 f127 endif ; pokeysupport 5099 f127 5100 f127 a9 ff lda #$ff 5101 f129 8d ac 01 sta pausebuttonflag 5102 f12c d0 0d bne carryonpausing 5103 f12e 5104 f12e enterpausestate2 5105 f12e a9 02 lda #2 5106 f130 8d 00 21 sta pausestate 5107 f133 d0 06 bne carryonpausing 5108 f135 leavepauseroutine 5109 f135 ad 07 21 lda sCTRL 5110 f138 85 3c sta CTRL 5111 f13a 60 rts 5112 f13b carryonpausing 5113 f13b - ifconst .pause 5114 f13b - jsr .pause 5115 f13b endif ; .pause 5116 f13b ad 07 21 lda sCTRL 5117 f13e 09 80 ora #%10000000 ; turn off colorburst during pause... 5118 f140 85 3c sta CTRL 5119 f142 4c e2 f0 jmp pauseroutine 5120 f145 endif ; pauseroutineoff 5121 f145 5122 f145 5123 f145 - ifconst DOUBLEBUFFER 5124 f145 -skipterminatedisplaylistreturn 5125 f145 - rts 5126 f145 endif ; DOUBLEBUFFER 5127 f145 terminatedisplaylist 5128 f145 - ifconst DOUBLEBUFFER 5129 f145 - lda doublebufferstate 5130 f145 - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 5131 f145 endif ; DOUBLEBUFFER 5132 f145 terminatedisplaybuffer 5133 f145 ;add DL end entry on each DL 5134 f145 a2 17 ldx #(WZONECOUNT-1) 5135 f147 dlendloop 5136 f147 bd 48 f6 lda DLPOINTL,x 5137 f14a - ifconst DOUBLEBUFFER 5138 f14a - clc 5139 f14a - adc doublebufferdloffset 5140 f14a endif ; DOUBLEBUFFER 5141 f14a 85 63 sta dlpnt 5142 f14c bd 30 f6 lda DLPOINTH,x 5143 f14f - ifconst DOUBLEBUFFER 5144 f14f - adc #0 5145 f14f endif ; DOUBLEBUFFER 5146 f14f 85 64 sta dlpnt+1 5147 f151 b4 65 ldy dlend,x 5148 f153 a9 00 lda #$00 5149 f155 dlendmoreloops 5150 f155 c8 iny 5151 f156 91 63 sta (dlpnt),y 5152 f158 - ifconst FRAMESKIPGLITCHFIXWEAK 5153 f158 - cpy #DLLASTOBJ+1 5154 f158 - beq dlendthiszonedone 5155 f158 - iny 5156 f158 - iny 5157 f158 - iny 5158 f158 - iny 5159 f158 - iny 5160 f158 - sta (dlpnt),y 5161 f158 -dlendthiszonedone 5162 f158 endif FRAMESKIPGLITCHFIXWEAK 5163 f158 - ifconst FRAMESKIPGLITCHFIX 5164 f158 - iny 5165 f158 - iny 5166 f158 - iny 5167 f158 - iny 5168 f158 - cpy #DLLASTOBJ-1 5169 f158 - bcc dlendmoreloops 5170 f158 endif ; FRAMESKIPGLITCHFIX 5171 f158 ca dex 5172 f159 10 ec bpl dlendloop 5173 f15b 5174 f15b ifnconst pauseroutineoff 5175 f15b 20 e2 f0 jsr pauseroutine 5176 f15e endif ; pauseroutineoff 5177 f15e 60 rts 5178 f15f 5179 f15f uninterruptableroutines 5180 f15f ; this is for routines that must happen off the visible screen, each frame. 5181 f15f 5182 f15f - ifconst AVOXVOICE 5183 f15f - jsr serviceatarivoxqueue 5184 f15f endif 5185 f15f 5186 f15f a9 00 lda #0 5187 f161 8d b6 01 sta palfastframe 5188 f164 ad 09 21 lda paldetected 5189 f167 f0 10 beq skippalframeadjusting 5190 f169 ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 5191 f169 ae b5 01 ldx palframes 5192 f16c e8 inx 5193 f16d e0 05 cpx #5 5194 f16f d0 05 bne palframeskipdone 5195 f171 ee b6 01 inc palfastframe 5196 f174 a2 00 ldx #0 5197 f176 palframeskipdone 5198 f176 8e b5 01 stx palframes 5199 f179 skippalframeadjusting 5200 f179 5201 f179 - ifconst MUSICTRACKER 5202 f179 - ; We normally run the servicesong routine from the top-screen interrupt, but if it 5203 f179 - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 5204 f179 - ; If that happens, we try again here. Chances are very small we'll run into the same 5205 f179 - ; problem twice, and if we do, we just drop a musical note or two. 5206 f179 - lda sfxschedulemissed 5207 f179 - beq servicesongwasnotmissed 5208 f179 - jsr servicesong 5209 f179 -servicesongwasnotmissed 5210 f179 endif ; MUSICTRACKER 5211 f179 5212 f179 60 rts 5213 f17a 5214 f17a serviceatarivoxqueue 5215 f17a - ifconst AVOXVOICE 5216 f17a - lda voxlock 5217 f17a - bne skipvoxprocessing ; the vox is in the middle of speech address update 5218 f17a -skipvoxqueuesizedec 5219 f17a - jmp processavoxvoice 5220 f17a -skipvoxprocessing 5221 f17a - rts 5222 f17a - 5223 f17a -processavoxvoice 5224 f17a - lda avoxenable 5225 f17a - bne avoxfixport 5226 f17a - SPKOUT tempavox 5227 f17a - rts 5228 f17a -avoxfixport 5229 f17a - lda #0 ; restore the port to all bits as inputs... 5230 f17a - sta CTLSWA 5231 f17a - rts 5232 f17a -silenceavoxvoice 5233 f17a - SPEAK avoxsilentdata 5234 f17a - rts 5235 f17a -avoxsilentdata 5236 f17a - .byte 31,255 5237 f17a else 5238 f17a 60 rts 5239 f17b endif ; AVOXVOICE 5240 f17b 5241 f17b joybuttonhandler 5242 f17b 8a txa 5243 f17c 0a asl 5244 f17d a8 tay 5245 f17e b9 08 00 lda INPT0,y 5246 f181 4a lsr 5247 f182 9d 02 21 sta sINPT1,x 5248 f185 b9 09 00 lda INPT1,y 5249 f188 29 80 and #%10000000 5250 f18a 1d 02 21 ora sINPT1,x 5251 f18d 9d 02 21 sta sINPT1,x 5252 f190 5253 f190 b5 0c lda INPT4,x 5254 f192 30 19 bmi .skip1bjoyfirecheck 5255 f194 ;one button joystick is down 5256 f194 49 80 eor #%10000000 5257 f196 9d 02 21 sta sINPT1,x 5258 f199 5259 f199 ad b1 01 lda joybuttonmode 5260 f19c 3d b0 f1 and twobuttonmask,x 5261 f19f f0 0c beq .skip1bjoyfirecheck 5262 f1a1 ad b1 01 lda joybuttonmode 5263 f1a4 1d b0 f1 ora twobuttonmask,x 5264 f1a7 8d b1 01 sta joybuttonmode 5265 f1aa 8d 82 02 sta SWCHB 5266 f1ad .skip1bjoyfirecheck 5267 f1ad 4c 5c f0 jmp buttonreadloopreturn 5268 f1b0 5269 f1b0 twobuttonmask 5270 f1b0 04 10 .byte.b %00000100,%00010000 5271 f1b2 5272 f1b2 gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 5273 f1b2 - ifconst LIGHTGUNSUPPORT 5274 f1b2 - cpx #0 5275 f1b2 - bne secondportgunhandler 5276 f1b2 -firstportgunhandler 5277 f1b2 - lda SWCHA 5278 f1b2 - asl 5279 f1b2 - asl 5280 f1b2 - asl ; shift D4 to D7 5281 f1b2 - and #%10000000 5282 f1b2 - eor #%10000000 5283 f1b2 - sta sINPT1 5284 f1b2 - jmp buttonreadloopreturn 5285 f1b2 -secondportgunhandler 5286 f1b2 - lda SWCHA 5287 f1b2 - lsr ; shift D0 into carry 5288 f1b2 - lsr ; shift carry into D7 5289 f1b2 - and #%10000000 5290 f1b2 - eor #%10000000 5291 f1b2 - sta sINPT3 5292 f1b2 - jmp buttonreadloopreturn 5293 f1b2 endif ; LIGHTGUNSUPPORT 5294 f1b2 5295 f1b2 controlsusing2buttoncode 5296 f1b2 00 .byte.b 0 ; 00=no controller plugged in 5297 f1b3 01 .byte.b 1 ; 01=proline joystick 5298 f1b4 00 .byte.b 0 ; 02=lightgun 5299 f1b5 00 .byte.b 0 ; 03=paddle 5300 f1b6 01 .byte.b 1 ; 04=trakball 5301 f1b7 01 .byte.b 1 ; 05=vcs joystick 5302 f1b8 01 .byte.b 1 ; 06=driving control 5303 f1b9 00 .byte.b 0 ; 07=keypad control 5304 f1ba 00 .byte.b 0 ; 08=st mouse/cx80 5305 f1bb 00 .byte.b 0 ; 09=amiga mouse 5306 f1bc 01 .byte.b 1 ; 10=atarivox 5307 f1bd 5308 f1bd buttonhandlerhi 5309 f1bd 00 .byte.b 0 ; 00=no controller plugged in 5310 f1be f1 .byte.b >joybuttonhandler ; 01=proline joystick 5311 f1bf f1 .byte.b >gunbuttonhandler ; 02=lightgun 5312 f1c0 f5 .byte.b >paddlebuttonhandler ; 03=paddle 5313 f1c1 f1 .byte.b >joybuttonhandler ; 04=trakball 5314 f1c2 f1 .byte.b >joybuttonhandler ; 05=vcs joystick 5315 f1c3 f1 .byte.b >joybuttonhandler ; 06=driving control 5316 f1c4 00 .byte.b 0 ; 07=keypad 5317 f1c5 f5 .byte.b >mousebuttonhandler ; 08=st mouse 5318 f1c6 f5 .byte.b >mousebuttonhandler ; 09=amiga mouse 5319 f1c7 f1 .byte.b >joybuttonhandler ; 10=atarivox 5320 f1c8 buttonhandlerlo 5321 f1c8 00 .byte.b 0 ; 00=no controller plugged in 5322 f1c9 7b .byte.b $0F means the sound is looped while priority is active 5423 f226 5424 f226 05 d9 ora inttemp2 5425 f228 05 d8 ora inttemp1 ; check if F|C|V=0 5426 f22a f0 23 beq zerosfx ; if so, we're at the end of the sound. 5427 f22c 5428 f22c advancesfxpointer 5429 f22c ; advance the pointer to the next sound chunk 5430 f22c c8 iny 5431 f22d 84 da sty inttemp3 5432 f22f 18 clc 5433 f230 b5 4e lda sfx1pointlo,x 5434 f232 65 da adc inttemp3 5435 f234 95 4e sta sfx1pointlo,x 5436 f236 b5 50 lda sfx1pointhi,x 5437 f238 69 00 adc #0 5438 f23a 95 50 sta sfx1pointhi,x 5439 f23c 4c e7 f1 jmp servicesfxchannelsloop 5440 f23f 5441 f23f sfxsoundloop 5442 f23f 48 pha 5443 f240 b5 52 lda sfx1priority,x 5444 f242 d0 04 bne sfxsoundloop_carryon 5445 f244 68 pla ; fix the stack before we go 5446 f245 4c 2c f2 jmp advancesfxpointer 5447 f248 sfxsoundloop_carryon 5448 f248 68 pla 5449 f249 29 f0 and #$F0 5450 f24b 4a lsr 5451 f24c 4a lsr 5452 f24d 4a lsr 5453 f24e 4a lsr 5454 f24f 5455 f24f zerosfx 5456 f24f 95 4e sta sfx1pointlo,x 5457 f251 95 50 sta sfx1pointhi,x 5458 f253 95 52 sta sfx1priority,x 5459 f255 4c e7 f1 jmp servicesfxchannelsloop 5460 f258 5461 f258 5462 f258 schedulesfx 5463 f258 ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 5464 f258 a0 00 ldy #0 5465 f25a b1 e0 lda (sfxinstrumentlo),y 5466 f25c - ifconst pokeysupport 5467 f25c - cmp #$20 ; POKEY? 5468 f25c - bne scheduletiasfx 5469 f25c - jmp schedulepokeysfx 5470 f25c endif 5471 f25c scheduletiasfx 5472 f25c ;cmp #$10 ; TIA? 5473 f25c ;beq continuescheduletiasfx 5474 f25c ; rts ; unhandled!!! 5475 f25c continuescheduletiasfx 5476 f25c ifnconst TIASFXMONO 5477 f25c a5 4e lda sfx1pointlo 5478 f25e 05 50 ora sfx1pointhi 5479 f260 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 5480 f262 a5 4f lda sfx2pointlo 5481 f264 05 51 ora sfx2pointhi 5482 f266 f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 5483 f268 ; Both channels are scheduled. 5484 f268 a0 01 ldy #1 5485 f26a b1 e0 lda (sfxinstrumentlo),y 5486 f26c d0 01 bne interruptsfx 5487 f26e 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 5488 f26f interruptsfx 5489 f26f ;Compare which active sound has a lower priority. We'll interrupt the lower one. 5490 f26f a5 52 lda sfx1priority 5491 f271 c5 53 cmp sfx2priority 5492 f273 b0 04 bcs schedulesfx2 5493 f275 endif ; !TIASFXMONO 5494 f275 5495 f275 schedulesfx1 5496 f275 a2 00 ldx #0 ; channel 1 5497 f277 ifnconst TIASFXMONO 5498 f277 f0 02 beq skipschedulesfx2 5499 f279 schedulesfx2 5500 f279 a2 01 ldx #1 ; channel 2 5501 f27b skipschedulesfx2 5502 f27b endif ; !TIASFXMONO 5503 f27b 5504 f27b - ifconst MUSICTRACKER 5505 f27b - lda sfxnoteindex 5506 f27b - bpl skipdrumkitoverride 5507 f27b - and #$7F ; subtract 128 5508 f27b - sec 5509 f27b - sbc #4 ; drums start at 132, i.e. octave 10 5510 f27b - asl 5511 f27b - tay 5512 f27b - lda tiadrumkitdefinition,y 5513 f27b - sta sfxinstrumentlo 5514 f27b - iny 5515 f27b - lda tiadrumkitdefinition,y 5516 f27b - sta sfxinstrumenthi 5517 f27b - lda #0 5518 f27b - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 5519 f27b -skipdrumkitoverride 5520 f27b endif ; MUSICTRACKER 5521 f27b a0 01 ldy #1 ; get priority and sound-resolution (in frames) 5522 f27d b1 e0 lda (sfxinstrumentlo),y 5523 f27f 95 52 sta sfx1priority,x 5524 f281 c8 iny 5525 f282 b1 e0 lda (sfxinstrumentlo),y 5526 f284 95 56 sta sfx1frames,x 5527 f286 a5 e0 lda sfxinstrumentlo 5528 f288 18 clc 5529 f289 69 03 adc #3 5530 f28b 95 4e sta sfx1pointlo,x 5531 f28d a5 e1 lda sfxinstrumenthi 5532 f28f 69 00 adc #0 5533 f291 95 50 sta sfx1pointhi,x 5534 f293 a5 e2 lda sfxpitchoffset 5535 f295 95 54 sta sfx1poffset,x 5536 f297 a9 00 lda #0 5537 f299 95 58 sta sfx1tick,x 5538 f29b a5 e3 lda sfxnoteindex 5539 f29d 95 cd sta sfx1notedata,x 5540 f29f 60 rts 5541 f2a0 5542 f2a0 plotsprite 5543 f2a0 ifnconst NODRAWWAIT 5544 f2a0 - ifconst DOUBLEBUFFER 5545 f2a0 - lda doublebufferstate 5546 f2a0 - bne skipplotspritewait 5547 f2a0 endif ; DOUBLEBUFFER 5548 f2a0 - ifconst DEBUGWAITCOLOR 5549 f2a0 - lda #$41 5550 f2a0 - sta BACKGRND 5551 f2a0 endif 5552 f2a0 plotspritewait 5553 f2a0 a5 4d lda visibleover 5554 f2a2 d0 fc bne plotspritewait 5555 f2a4 skipplotspritewait 5556 f2a4 - ifconst DEBUGWAITCOLOR 5557 f2a4 - lda #$0 5558 f2a4 - sta BACKGRND 5559 f2a4 endif 5560 f2a4 endif 5561 f2a4 5562 f2a4 ;arguments: 5563 f2a4 ; temp1=lo graphicdata 5564 f2a4 ; temp2=hi graphicdata 5565 f2a4 ; temp3=palette | width byte 5566 f2a4 ; temp4=x 5567 f2a4 ; temp5=y 5568 f2a4 ; temp6=mode 5569 f2a4 a5 46 lda temp5 ;Y position 5570 f2a6 4a lsr ; 2 - Divide by 8 or 16 5571 f2a7 4a lsr ; 2 5572 f2a8 4a lsr ; 2 5573 f2a9 - if WZONEHEIGHT = 16 5574 f2a9 - lsr ; 2 5575 f2a9 endif 5576 f2a9 5577 f2a9 aa tax 5578 f2aa 5579 f2aa ifnconst NOLIMITCHECKING 5580 f2aa 5581 f2aa ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 5582 f2aa 5583 f2aa c9 18 cmp #WZONECOUNT 5584 f2ac 5585 f2ac 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 5586 f2ae ; otherwise, check to see if the bottom half is in zone 0... 5587 f2ae 5588 f2ae - if WZONEHEIGHT = 16 5589 f2ae - cmp #15 5590 f2ae else 5591 f2ae c9 1f cmp #31 5592 f2b0 endif 5593 f2b0 5594 f2b0 d0 05 bne exitplotsprite1 5595 f2b2 a2 00 ldx #0 5596 f2b4 4c f1 f2 jmp continueplotsprite2 5597 f2b7 exitplotsprite1 5598 f2b7 60 rts 5599 f2b8 5600 f2b8 continueplotsprite1 5601 f2b8 endif 5602 f2b8 5603 f2b8 bd 48 f6 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 5604 f2bb - ifconst DOUBLEBUFFER 5605 f2bb - clc 5606 f2bb - adc doublebufferdloffset 5607 f2bb endif ; DOUBLEBUFFER 5608 f2bb 85 63 sta dlpnt 5609 f2bd bd 30 f6 lda DLPOINTH,x 5610 f2c0 - ifconst DOUBLEBUFFER 5611 f2c0 - adc #0 5612 f2c0 endif ; DOUBLEBUFFER 5613 f2c0 85 64 sta dlpnt+1 5614 f2c2 5615 f2c2 ;Create DL entry for upper part of sprite 5616 f2c2 5617 f2c2 b4 65 ldy dlend,x ;Get the index to the end of this DL 5618 f2c4 5619 f2c4 ifconst CHECKOVERWRITE 5620 f2c4 c0 4b cpy #DLLASTOBJ 5621 f2c6 f0 21 beq checkcontinueplotsprite2 5622 f2c8 continueplotsprite1a 5623 f2c8 endif 5624 f2c8 5625 f2c8 a5 42 lda temp1 ; graphic data, lo byte 5626 f2ca 91 63 sta (dlpnt),y ;Low byte of data address 5627 f2cc 5628 f2cc ifnconst ATOMICSPRITEUPDATE 5629 f2cc c8 iny 5630 f2cd a5 47 lda temp6 5631 f2cf 91 63 sta (dlpnt),y 5632 f2d1 - else 5633 f2d1 - iny 5634 f2d1 - sty temp8 5635 f2d1 endif 5636 f2d1 5637 f2d1 c8 iny 5638 f2d2 5639 f2d2 a5 46 lda temp5 ;Y position 5640 f2d4 29 07 and #(WZONEHEIGHT - 1) 5641 f2d6 c9 01 cmp #1 ; clear carry if our sprite is just in this zone 5642 f2d8 05 43 ora temp2 ; graphic data, hi byte 5643 f2da 91 63 sta (dlpnt),y 5644 f2dc 5645 f2dc 5646 f2dc c8 iny 5647 f2dd a5 44 lda temp3 ;palette|width 5648 f2df 91 63 sta (dlpnt),y 5649 f2e1 5650 f2e1 c8 iny 5651 f2e2 a5 45 lda temp4 ;Horizontal position 5652 f2e4 91 63 sta (dlpnt),y 5653 f2e6 5654 f2e6 c8 iny 5655 f2e7 94 65 sty dlend,x 5656 f2e9 5657 f2e9 - ifconst ALWAYSTERMINATE 5658 f2e9 - iny 5659 f2e9 - lda #0 5660 f2e9 - sta (dlpnt),y 5661 f2e9 endif 5662 f2e9 5663 f2e9 - ifconst ATOMICSPRITEUPDATE 5664 f2e9 - ldy temp8 5665 f2e9 - lda temp6 5666 f2e9 - sta (dlpnt),y 5667 f2e9 endif 5668 f2e9 5669 f2e9 checkcontinueplotsprite2 5670 f2e9 5671 f2e9 90 38 bcc doneSPDL ;branch if the sprite was fully in the last zone 5672 f2eb 5673 f2eb ;Create DL entry for lower part of sprite 5674 f2eb 5675 f2eb e8 inx ;Next region 5676 f2ec 5677 f2ec ifnconst NOLIMITCHECKING 5678 f2ec e0 18 cpx #WZONECOUNT 5679 f2ee 5680 f2ee 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 5681 f2f0 60 rts 5682 f2f1 continueplotsprite2 5683 f2f1 endif 5684 f2f1 5685 f2f1 bd 48 f6 lda DLPOINTL,x ;Get pointer to next DL 5686 f2f4 - ifconst DOUBLEBUFFER 5687 f2f4 - clc 5688 f2f4 - adc doublebufferdloffset 5689 f2f4 endif ; DOUBLEBUFFER 5690 f2f4 85 63 sta dlpnt 5691 f2f6 bd 30 f6 lda DLPOINTH,x 5692 f2f9 - ifconst DOUBLEBUFFER 5693 f2f9 - adc #0 5694 f2f9 endif ; DOUBLEBUFFER 5695 f2f9 85 64 sta dlpnt+1 5696 f2fb b4 65 ldy dlend,x ;Get the index to the end of this DL 5697 f2fd 5698 f2fd ifconst CHECKOVERWRITE 5699 f2fd c0 4b cpy #DLLASTOBJ 5700 f2ff d0 01 bne continueplotsprite2a 5701 f301 60 rts 5702 f302 continueplotsprite2a 5703 f302 endif 5704 f302 5705 f302 a5 42 lda temp1 ; graphic data, lo byte 5706 f304 91 63 sta (dlpnt),y 5707 f306 5708 f306 ifnconst ATOMICSPRITEUPDATE 5709 f306 c8 iny 5710 f307 a5 47 lda temp6 5711 f309 91 63 sta (dlpnt),y 5712 f30b - else 5713 f30b - iny 5714 f30b - sty temp8 5715 f30b endif 5716 f30b 5717 f30b c8 iny 5718 f30c 5719 f30c a5 46 lda temp5 ;Y position 5720 f30e 0b 07 anc #(WZONEHEIGHT - 1) ; undocumented. A=A&IMM, then move bit 7 into carry 5721 f310 05 43 ora temp2 ; graphic data, hi byte 5722 f312 e9 07 sbc #(WZONEHEIGHT-1) ; start at the DMA hole. -1 because carry is clear 5723 f314 91 63 sta (dlpnt),y 5724 f316 5725 f316 c8 iny 5726 f317 5727 f317 a5 44 lda temp3 ;palette|width 5728 f319 91 63 sta (dlpnt),y 5729 f31b 5730 f31b c8 iny 5731 f31c 5732 f31c a5 45 lda temp4 ;Horizontal position 5733 f31e 91 63 sta (dlpnt),y 5734 f320 5735 f320 c8 iny 5736 f321 94 65 sty dlend,x 5737 f323 5738 f323 - ifconst ALWAYSTERMINATE 5739 f323 - iny 5740 f323 - lda #0 5741 f323 - sta (dlpnt),y 5742 f323 endif 5743 f323 5744 f323 - ifconst ATOMICSPRITEUPDATE 5745 f323 - ldy temp8 5746 f323 - lda temp6 5747 f323 - sta (dlpnt),y 5748 f323 endif 5749 f323 5750 f323 doneSPDL 5751 f323 60 rts 5752 f324 5753 f324 5754 f324 lockzonex 5755 f324 - ifconst ZONELOCKS 5756 f324 - ldy dlend,x 5757 f324 - cpy #DLLASTOBJ 5758 f324 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 5759 f324 - lda DLPOINTL,x 5760 f324 - ifconst DOUBLEBUFFER 5761 f324 - clc 5762 f324 - adc doublebufferdloffset 5763 f324 - endif ; DOUBLEBUFFER 5764 f324 - sta dlpnt 5765 f324 - lda DLPOINTH,x 5766 f324 - ifconst DOUBLEBUFFER 5767 f324 - adc #0 5768 f324 - endif ; DOUBLEBUFFER 5769 f324 - sta dlpnt+1 5770 f324 - iny 5771 f324 - lda #0 5772 f324 - sta (dlpnt),y 5773 f324 - dey 5774 f324 - tya 5775 f324 - ldy #(DLLASTOBJ-1) 5776 f324 - sta (dlpnt),y 5777 f324 - iny 5778 f324 - sty dlend,x 5779 f324 -lockzonexreturn 5780 f324 - rts 5781 f324 endif ; ZONELOCKS 5782 f324 unlockzonex 5783 f324 - ifconst ZONELOCKS 5784 f324 - ldy dlend,x 5785 f324 - cpy #DLLASTOBJ 5786 f324 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 5787 f324 - lda DLPOINTL,x 5788 f324 - ifconst DOUBLEBUFFER 5789 f324 - clc 5790 f324 - adc doublebufferdloffset 5791 f324 - endif ; DOUBLEBUFFER 5792 f324 - sta dlpnt 5793 f324 - lda DLPOINTH,x 5794 f324 - ifconst DOUBLEBUFFER 5795 f324 - adc #0 5796 f324 - endif ; DOUBLEBUFFER 5797 f324 - sta dlpnt+1 5798 f324 - dey 5799 f324 - ;ldy #(DLLASTOBJ-1) 5800 f324 - lda (dlpnt),y 5801 f324 - tay 5802 f324 - sty dlend,x 5803 f324 -unlockzonexreturn 5804 f324 endif ; ZONELOCKS 5805 f324 60 rts 5806 f325 5807 f325 plotcharloop 5808 f325 ; ** read from a data indirectly pointed to from temp8,temp9 5809 f325 ; ** format is: lo_data, hi_data, palette|width, x, y 5810 f325 ; ** format ends with lo_data | hi_data = 0 5811 f325 5812 f325 - ifconst DOUBLEBUFFER 5813 f325 - lda doublebufferstate 5814 f325 - bne skipplotcharloopwait 5815 f325 endif ; DOUBLEBUFFER 5816 f325 - ifconst DEBUGWAITCOLOR 5817 f325 - lda #$61 5818 f325 - sta BACKGRND 5819 f325 endif 5820 f325 plotcharloopwait 5821 f325 a5 4d lda visibleover 5822 f327 d0 fc bne plotcharloopwait 5823 f329 - ifconst DEBUGWAITCOLOR 5824 f329 - lda #0 5825 f329 - sta BACKGRND 5826 f329 endif 5827 f329 skipplotcharloopwait 5828 f329 plotcharlooploop 5829 f329 a0 00 ldy #0 5830 f32b b1 49 lda (temp8),y 5831 f32d 85 42 sta temp1 5832 f32f c8 iny 5833 f330 b1 49 lda (temp8),y 5834 f332 85 43 sta temp2 5835 f334 05 42 ora temp1 5836 f336 d0 01 bne plotcharloopcontinue 5837 f338 ;the pointer=0, so return 5838 f338 60 rts 5839 f339 plotcharloopcontinue 5840 f339 c8 iny 5841 f33a b1 49 lda (temp8),y 5842 f33c 85 44 sta temp3 5843 f33e c8 iny 5844 f33f b1 49 lda (temp8),y 5845 f341 85 45 sta temp4 5846 f343 c8 iny 5847 f344 b1 49 lda (temp8),y 5848 f346 ;sta temp5 ; not needed with our late entry. 5849 f346 20 5f f3 jsr plotcharactersskipentry 5850 f349 a5 49 lda temp8 5851 f34b 18 clc 5852 f34c 69 05 adc #5 5853 f34e 85 49 sta temp8 5854 f350 a5 4a lda temp9 5855 f352 69 00 adc #0 5856 f354 85 4a sta temp9 5857 f356 4c 29 f3 jmp plotcharlooploop 5858 f359 5859 f359 plotcharacters 5860 f359 - ifconst DOUBLEBUFFER 5861 f359 - lda doublebufferstate 5862 f359 - bne skipplotcharacterswait 5863 f359 endif ; DOUBLEBUFFER 5864 f359 - ifconst DEBUGWAITCOLOR 5865 f359 - lda #$41 5866 f359 - sta BACKGRND 5867 f359 endif 5868 f359 plotcharacterswait 5869 f359 a5 4d lda visibleover 5870 f35b d0 fc bne plotcharacterswait 5871 f35d - ifconst DEBUGWAITCOLOR 5872 f35d - sta BACKGRND 5873 f35d endif 5874 f35d skipplotcharacterswait 5875 f35d ;arguments: 5876 f35d ; temp1=lo charactermap 5877 f35d ; temp2=hi charactermap 5878 f35d ; temp3=palette | width byte 5879 f35d ; temp4=x 5880 f35d ; temp5=y 5881 f35d 5882 f35d a5 46 lda temp5 ;Y position 5883 f35f 5884 f35f plotcharactersskipentry 5885 f35f 5886 f35f ;ifconst ZONEHEIGHT 5887 f35f ; if ZONEHEIGHT = 16 5888 f35f ; and #$0F 5889 f35f ; endif 5890 f35f ; if ZONEHEIGHT = 8 5891 f35f ; and #$1F 5892 f35f ; endif 5893 f35f ;else 5894 f35f ; and #$0F 5895 f35f ;endif 5896 f35f 5897 f35f aa tax 5898 f360 bd 48 f6 lda DLPOINTL,x ;Get pointer to DL that the characters are in 5899 f363 - ifconst DOUBLEBUFFER 5900 f363 - clc 5901 f363 - adc doublebufferdloffset 5902 f363 endif ; DOUBLEBUFFER 5903 f363 85 63 sta dlpnt 5904 f365 bd 30 f6 lda DLPOINTH,x 5905 f368 - ifconst DOUBLEBUFFER 5906 f368 - adc #0 5907 f368 endif ; DOUBLEBUFFER 5908 f368 85 64 sta dlpnt+1 5909 f36a 5910 f36a ;Create DL entry for the characters 5911 f36a 5912 f36a b4 65 ldy dlend,x ;Get the index to the end of this DL 5913 f36c 5914 f36c ifconst CHECKOVERWRITE 5915 f36c c0 4b cpy #DLLASTOBJ 5916 f36e d0 01 bne continueplotcharacters 5917 f370 60 rts 5918 f371 continueplotcharacters 5919 f371 endif 5920 f371 5921 f371 a5 42 lda temp1 ; character map data, lo byte 5922 f373 91 63 sta (dlpnt),y ;(1) store low address 5923 f375 5924 f375 c8 iny 5925 f376 ad 06 21 lda charactermode 5926 f379 91 63 sta (dlpnt),y ;(2) store mode 5927 f37b 5928 f37b c8 iny 5929 f37c a5 43 lda temp2 ; character map, hi byte 5930 f37e 91 63 sta (dlpnt),y ;(3) store high address 5931 f380 5932 f380 c8 iny 5933 f381 a5 44 lda temp3 ;palette|width 5934 f383 91 63 sta (dlpnt),y ;(4) store palette|width 5935 f385 5936 f385 c8 iny 5937 f386 a5 45 lda temp4 ;Horizontal position 5938 f388 91 63 sta (dlpnt),y ;(5) store horizontal position 5939 f38a 5940 f38a c8 iny 5941 f38b 94 65 sty dlend,x ; save display list end byte 5942 f38d 60 rts 5943 f38e 5944 f38e 5945 f38e - ifconst plotvalueonscreen 5946 f38e -plotcharacterslive 5947 f38e - ; a version of plotcharacters that draws live and minimally disrupts the screen... 5948 f38e - 5949 f38e - ;arguments: 5950 f38e - ; temp1=lo charactermap 5951 f38e - ; temp2=hi charactermap 5952 f38e - ; temp3=palette | width byte 5953 f38e - ; temp4=x 5954 f38e - ; temp5=y 5955 f38e - 5956 f38e - lda temp5 ;Y position 5957 f38e - 5958 f38e - tax 5959 f38e - lda DLPOINTL,x ;Get pointer to DL that the characters are in 5960 f38e - ifconst DOUBLEBUFFER 5961 f38e - clc 5962 f38e - adc doublebufferdloffset 5963 f38e - endif ; DOUBLEBUFFER 5964 f38e - sta dlpnt 5965 f38e - lda DLPOINTH,x 5966 f38e - ifconst DOUBLEBUFFER 5967 f38e - adc #0 5968 f38e - endif ; DOUBLEBUFFER 5969 f38e - sta dlpnt+1 5970 f38e - 5971 f38e - ;Create DL entry for the characters 5972 f38e - 5973 f38e - ldy dlend,x ;Get the index to the end of this DL 5974 f38e - 5975 f38e - ifconst CHECKOVERWRITE 5976 f38e - cpy #DLLASTOBJ 5977 f38e - bne continueplotcharacterslive 5978 f38e - rts 5979 f38e -continueplotcharacterslive 5980 f38e - endif 5981 f38e - 5982 f38e - lda temp1 ; character map data, lo byte 5983 f38e - sta (dlpnt),y ;(1) store low address 5984 f38e - 5985 f38e - iny 5986 f38e - ; we don't add the second byte yet, since the charmap could briefly 5987 f38e - ; render without a proper character map address, width, or position. 5988 f38e - lda charactermode 5989 f38e - sta (dlpnt),y ;(2) store mode 5990 f38e - 5991 f38e - iny 5992 f38e - lda temp2 ; character map, hi byte 5993 f38e - sta (dlpnt),y ;(3) store high address 5994 f38e - 5995 f38e - iny 5996 f38e - lda temp3 ;palette|width 5997 f38e - sta (dlpnt),y ;(4) store palette|width 5998 f38e - 5999 f38e - iny 6000 f38e - lda temp4 ;Horizontal position 6001 f38e - sta (dlpnt),y ;(5) store horizontal position 6002 f38e - 6003 f38e - iny 6004 f38e - sty dlend,x ; save display list end byte 6005 f38e - 6006 f38e - rts 6007 f38e endif ;plotcharacterslive 6008 f38e 6009 f38e ifconst USED_PLOTVALUE 6010 f38e plotvalue 6011 f38e ; calling 7800basic command: 6012 f38e ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 6013 f38e ; ...displays the variable as BCD digits 6014 f38e ; 6015 f38e ; asm sub arguments: 6016 f38e ; temp1=lo charactermap 6017 f38e ; temp2=hi charactermap 6018 f38e ; temp3=palette | width byte 6019 f38e ; temp4=x 6020 f38e ; temp5=y 6021 f38e ; temp6=number of digits 6022 f38e ; temp7=lo variable 6023 f38e ; temp8=hi variable 6024 f38e ; temp9=character mode 6025 f38e 6026 f38e 00 47 plotdigitcount = temp6 6027 f38e 6028 f38e - ifconst ZONELOCKS 6029 f38e - ldx temp5 6030 f38e - ldy dlend,x 6031 f38e - cpy #DLLASTOBJ 6032 f38e - bne carryonplotvalue 6033 f38e - rts 6034 f38e -carryonplotvalue 6035 f38e endif 6036 f38e 6037 f38e a9 00 lda #0 6038 f390 a8 tay 6039 f391 ae ad 01 ldx valbufend 6040 f394 6041 f394 a5 47 lda plotdigitcount 6042 f396 29 01 and #1 6043 f398 f0 07 beq pvnibble2char 6044 f39a a9 00 lda #0 6045 f39c 9d 00 20 sta VALBUFFER,x ; just in case we skip this digit 6046 f39f f0 11 beq pvnibble2char_skipnibble 6047 f3a1 6048 f3a1 pvnibble2char 6049 f3a1 ; high nibble... 6050 f3a1 b1 48 lda (temp7),y 6051 f3a3 29 f0 and #$f0 6052 f3a5 4a lsr 6053 f3a6 4a lsr 6054 f3a7 4a lsr 6055 f3a8 ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 6056 f3a8 4a lsr 6057 f3a9 endif 6058 f3a9 6059 f3a9 18 clc 6060 f3aa 65 42 adc temp1 ; add the offset to character graphics to our value 6061 f3ac 9d 00 20 sta VALBUFFER,x 6062 f3af e8 inx 6063 f3b0 c6 47 dec plotdigitcount 6064 f3b2 6065 f3b2 pvnibble2char_skipnibble 6066 f3b2 ; low nibble... 6067 f3b2 b1 48 lda (temp7),y 6068 f3b4 29 0f and #$0f 6069 f3b6 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 6070 f3b6 - asl 6071 f3b6 endif 6072 f3b6 18 clc 6073 f3b7 65 42 adc temp1 ; add the offset to character graphics to our value 6074 f3b9 9d 00 20 sta VALBUFFER,x 6075 f3bc e8 inx 6076 f3bd c8 iny 6077 f3be 6078 f3be c6 47 dec plotdigitcount 6079 f3c0 d0 df bne pvnibble2char 6080 f3c2 6081 f3c2 ;point to the start of our valuebuffer 6082 f3c2 18 clc 6083 f3c3 a9 00 lda #VALBUFFER 6087 f3cc 69 00 adc #0 6088 f3ce 85 43 sta temp2 6089 f3d0 6090 f3d0 ;advance valbufend to the end of our value buffer 6091 f3d0 8e ad 01 stx valbufend 6092 f3d3 6093 f3d3 ifnconst plotvalueonscreen 6094 f3d3 4c 59 f3 jmp plotcharacters 6095 f3d6 - else 6096 f3d6 - jmp plotcharacterslive 6097 f3d6 endif 6098 f3d6 6099 f3d6 endif ; USED_PLOTVALUE 6100 f3d6 6101 f3d6 6102 f3d6 - ifconst USED_PLOTVALUEEXTRA 6103 f3d6 -plotdigitcount = temp6 6104 f3d6 -plotvalueextra 6105 f3d6 - ; calling 7800basic command: 6106 f3d6 - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 6107 f3d6 - ; ...displays the variable as BCD digits 6108 f3d6 - ; 6109 f3d6 - ; asm sub arguments: 6110 f3d6 - ; temp1=lo charactermap 6111 f3d6 - ; temp2=hi charactermap 6112 f3d6 - ; temp3=palette | width byte 6113 f3d6 - ; temp4=x 6114 f3d6 - ; temp5=y 6115 f3d6 - ; temp6=number of digits 6116 f3d6 - ; temp7=lo variable 6117 f3d6 - ; temp8=hi variable 6118 f3d6 - 6119 f3d6 - lda #0 6120 f3d6 - tay 6121 f3d6 - ldx valbufend 6122 f3d6 - ifnconst plotvalueonscreen 6123 f3d6 - sta VALBUFFER,x 6124 f3d6 - endif 6125 f3d6 - 6126 f3d6 - lda plotdigitcount 6127 f3d6 - and #1 6128 f3d6 - 6129 f3d6 - bne pvnibble2char_skipnibbleextra 6130 f3d6 - 6131 f3d6 -pvnibble2charextra 6132 f3d6 - ; high nibble... 6133 f3d6 - lda (temp7),y 6134 f3d6 - and #$f0 6135 f3d6 - lsr 6136 f3d6 - lsr 6137 f3d6 - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 6138 f3d6 - lsr 6139 f3d6 - endif 6140 f3d6 - clc 6141 f3d6 - adc temp1 ; add the offset to character graphics to our value 6142 f3d6 - sta VALBUFFER,x 6143 f3d6 - inx 6144 f3d6 - 6145 f3d6 - ; second half of the digit 6146 f3d6 - clc 6147 f3d6 - adc #1 6148 f3d6 - sta VALBUFFER,x 6149 f3d6 - inx 6150 f3d6 - 6151 f3d6 -pvnibble2char_skipnibbleextra 6152 f3d6 - ; low nibble... 6153 f3d6 - lda (temp7),y 6154 f3d6 - and #$0f 6155 f3d6 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 6156 f3d6 - asl 6157 f3d6 - endif 6158 f3d6 - asl 6159 f3d6 - 6160 f3d6 - clc 6161 f3d6 - adc temp1 ; add the offset to character graphics to our value 6162 f3d6 - sta VALBUFFER,x 6163 f3d6 - inx 6164 f3d6 - 6165 f3d6 - clc 6166 f3d6 - adc #1 6167 f3d6 - sta VALBUFFER,x 6168 f3d6 - inx 6169 f3d6 - iny 6170 f3d6 - 6171 f3d6 - dec plotdigitcount 6172 f3d6 - bne pvnibble2charextra 6173 f3d6 - 6174 f3d6 - ;point to the start of our valuebuffer 6175 f3d6 - clc 6176 f3d6 - lda #VALBUFFER 6180 f3d6 - adc #0 6181 f3d6 - sta temp2 6182 f3d6 - 6183 f3d6 - ;advance valbufend to the end of our value buffer 6184 f3d6 - stx valbufend 6185 f3d6 - 6186 f3d6 - ifnconst plotvalueonscreen 6187 f3d6 - jmp plotcharacters 6188 f3d6 - else 6189 f3d6 - jmp plotcharacterslive 6190 f3d6 - endif 6191 f3d6 endif ; USED_PLOTVALUEEXTRA 6192 f3d6 6193 f3d6 boxcollision 6194 f3d6 ; the worst case cycle-time for the code below is 43 cycles. 6195 f3d6 ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 6196 f3d6 6197 f3d6 ;__boxx1 = accumulator 6198 f3d6 ;__boxy1 = y 6199 f3d6 00 44 __boxw1 = temp3 6200 f3d6 00 45 __boxh1 = temp4 6201 f3d6 6202 f3d6 00 46 __boxx2 = temp5 6203 f3d6 00 47 __boxy2 = temp6 6204 f3d6 00 48 __boxw2 = temp7 6205 f3d6 00 49 __boxh2 = temp8 6206 f3d6 6207 f3d6 DoXCollisionCheck 6208 f3d6 ;lda __boxx1 ; skipped. already in the accumulator 6209 f3d6 c5 46 cmp __boxx2 ;3 6210 f3d8 b0 07 bcs X1isbiggerthanX2 ;2/3 6211 f3da X2isbiggerthanX1 6212 f3da ; carry is clear 6213 f3da 65 44 adc __boxw1 ;3 6214 f3dc c5 46 cmp __boxx2 ;3 6215 f3de b0 08 bcs DoYCollisionCheck ;3/2 6216 f3e0 60 rts ;6 - carry clear, no collision 6217 f3e1 X1isbiggerthanX2 6218 f3e1 18 clc ;2 6219 f3e2 e5 48 sbc __boxw2 ;3 6220 f3e4 c5 46 cmp __boxx2 ;3 6221 f3e6 b0 13 bcs noboxcollision ;3/2 6222 f3e8 DoYCollisionCheck 6223 f3e8 98 tya ; 2 ; use to be "lda __boxy1" 6224 f3e9 c5 47 cmp __boxy2 ;3 6225 f3eb b0 05 bcs Y1isbiggerthanY2 ;3/2 6226 f3ed Y2isbiggerthanY1 6227 f3ed ; carry is clear 6228 f3ed 65 45 adc __boxh1 ;3 6229 f3ef c5 47 cmp __boxy2 ;3 6230 f3f1 60 rts ;6 6231 f3f2 Y1isbiggerthanY2 6232 f3f2 18 clc ;2 6233 f3f3 e5 49 sbc __boxh2 ;3 6234 f3f5 c5 47 cmp __boxy2 ;3 6235 f3f7 b0 02 bcs noboxcollision ;3/2 6236 f3f9 yesboxcollision 6237 f3f9 38 sec ;2 6238 f3fa 60 rts ;6 6239 f3fb noboxcollision 6240 f3fb 18 clc ;2 6241 f3fc 60 rts ;6 6242 f3fd 6243 f3fd randomize 6244 f3fd a5 40 lda rand 6245 f3ff 4a lsr 6246 f400 26 41 rol rand16 6247 f402 90 02 bcc noeor 6248 f404 49 b4 eor #$B4 6249 f406 noeor 6250 f406 85 40 sta rand 6251 f408 45 41 eor rand16 6252 f40a 60 rts 6253 f40b 6254 f40b ; *** bcd conversion routine courtesy Omegamatrix 6255 f40b ; *** http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 6256 f40b converttobcd 6257 f40b ;value to convert is in the accumulator 6258 f40b 85 42 sta temp1 6259 f40d 4a lsr 6260 f40e 65 42 adc temp1 6261 f410 6a ror 6262 f411 4a lsr 6263 f412 4a lsr 6264 f413 65 42 adc temp1 6265 f415 6a ror 6266 f416 65 42 adc temp1 6267 f418 6a ror 6268 f419 4a lsr 6269 f41a 29 3c and #$3C 6270 f41c 85 43 sta temp2 6271 f41e 4a lsr 6272 f41f 65 43 adc temp2 6273 f421 65 42 adc temp1 6274 f423 60 rts ; return the result in the accumulator 6275 f424 6276 f424 ; Y and A contain multiplicands, result in A 6277 f424 mul8 6278 f424 84 42 sty temp1 6279 f426 85 43 sta temp2 6280 f428 a9 00 lda #0 6281 f42a reptmul8 6282 f42a 46 43 lsr temp2 6283 f42c 90 03 bcc skipmul8 6284 f42e 18 clc 6285 f42f 65 42 adc temp1 6286 f431 ;bcs donemul8 might save cycles? 6287 f431 skipmul8 6288 f431 ;beq donemul8 might save cycles? 6289 f431 06 42 asl temp1 6290 f433 d0 f5 bne reptmul8 6291 f435 donemul8 6292 f435 60 rts 6293 f436 6294 f436 div8 6295 f436 ; A=numerator Y=denominator, result in A 6296 f436 c0 02 cpy #2 6297 f438 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 6298 f43a 84 42 sty temp1 6299 f43c a0 ff ldy #$ff 6300 f43e div8loop 6301 f43e e5 42 sbc temp1 6302 f440 c8 iny 6303 f441 b0 fb bcs div8loop 6304 f443 div8end 6305 f443 98 tya 6306 f444 ; result in A 6307 f444 60 rts 6308 f445 6309 f445 ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 6310 f445 mul16 6311 f445 84 42 sty temp1 6312 f447 85 43 sta temp2 6313 f449 6314 f449 a9 00 lda #0 6315 f44b a2 08 ldx #8 6316 f44d 46 42 lsr temp1 6317 f44f mul16_1 6318 f44f 90 03 bcc mul16_2 6319 f451 18 clc 6320 f452 65 43 adc temp2 6321 f454 mul16_2 6322 f454 6a ror 6323 f455 66 42 ror temp1 6324 f457 ca dex 6325 f458 d0 f5 bne mul16_1 6326 f45a 85 43 sta temp2 6327 f45c 60 rts 6328 f45d 6329 f45d ; div int/int 6330 f45d ; numerator in A, denom in temp1 6331 f45d ; returns with quotient in A, remainder in temp1 6332 f45d div16 6333 f45d 85 43 sta temp2 6334 f45f 84 42 sty temp1 6335 f461 a9 00 lda #0 6336 f463 a2 08 ldx #8 6337 f465 06 43 asl temp2 6338 f467 div16_1 6339 f467 2a rol 6340 f468 c5 42 cmp temp1 6341 f46a 90 02 bcc div16_2 6342 f46c e5 42 sbc temp1 6343 f46e div16_2 6344 f46e 26 43 rol temp2 6345 f470 ca dex 6346 f471 d0 f4 bne div16_1 6347 f473 85 42 sta temp1 6348 f475 a5 43 lda temp2 6349 f477 60 rts 6350 f478 6351 f478 - ifconst bankswitchmode 6352 f478 -BS_jsr 6353 f478 - ifconst MCPDEVCART 6354 f478 - ora #$18 6355 f478 - sta $3000 6356 f478 - else 6357 f478 - sta $8000 6358 f478 - endif 6359 f478 - pla 6360 f478 - tax 6361 f478 - pla 6362 f478 - rts 6363 f478 - 6364 f478 -BS_return 6365 f478 - pla ; bankswitch bank 6366 f478 - ifconst BANKRAM 6367 f478 - sta currentbank 6368 f478 - ora currentrambank 6369 f478 - endif 6370 f478 - ifconst MCPDEVCART 6371 f478 - ora #$18 6372 f478 - sta $3000 6373 f478 - else 6374 f478 - sta $8000 6375 f478 - endif 6376 f478 - pla ; bankswitch $0 flag 6377 f478 - rts 6378 f478 endif 6379 f478 6380 f478 checkselectswitch 6381 f478 ad 82 02 lda SWCHB ; first check the real select switch... 6382 f47b 29 02 and #%00000010 6383 f47d ifnconst MOUSESUPPORT 6384 f47d f0 05 beq checkselectswitchreturn ; switch is pressed 6385 f47f ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 6386 f482 29 b0 and #%10110000 ; R_DU 6387 f484 endif ; MOUSESUPPORT 6388 f484 checkselectswitchreturn 6389 f484 60 rts 6390 f485 6391 f485 checkresetswitch 6392 f485 ad 82 02 lda SWCHB ; first check the real reset switch... 6393 f488 29 01 and #%00000001 6394 f48a ifnconst MOUSESUPPORT 6395 f48a f0 05 beq checkresetswitchreturn ; switch is pressed 6396 f48c ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 6397 f48f 29 70 and #%01110000 ; _LDU 6398 f491 endif ; MOUSESUPPORT 6399 f491 checkresetswitchreturn 6400 f491 60 rts 6401 f492 6402 f492 - ifconst FINESCROLLENABLED 6403 f492 -finescrolldlls 6404 f492 - ldx temp1 ; first DLL index x3 6405 f492 - lda DLLMEM,x 6406 f492 - and #%11110000 6407 f492 - ora finescrolly 6408 f492 - sta DLLMEM,x 6409 f492 - 6410 f492 - ldx temp2 ; last DLL index x3 6411 f492 - lda DLLMEM,x 6412 f492 - and #%11110000 6413 f492 - ora finescrolly 6414 f492 - eor #(WZONEHEIGHT-1) 6415 f492 - sta DLLMEM,x 6416 f492 - rts 6417 f492 endif ; FINESCROLLENABLED 6418 f492 6419 f492 - ifconst USED_ADJUSTVISIBLE 6420 f492 -adjustvisible 6421 f492 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 6422 f492 - jsr waitforvblankstart ; ensure vblank just started 6423 f492 - ldx visibleDLLstart 6424 f492 -findfirstinterrupt 6425 f492 - lda DLLMEM,x 6426 f492 - bmi foundfirstinterrupt 6427 f492 - inx 6428 f492 - inx 6429 f492 - inx 6430 f492 - bne findfirstinterrupt 6431 f492 -foundfirstinterrupt 6432 f492 - and #%01111111 ; clear the interrupt bit 6433 f492 - sta DLLMEM,x 6434 f492 - ifconst DOUBLEBUFFER 6435 f492 - sta DLLMEM+DBOFFSET,x 6436 f492 - endif ; DOUBLEBUFFER 6437 f492 - ldx overscanDLLstart 6438 f492 -findlastinterrupt 6439 f492 - lda DLLMEM,x 6440 f492 - bmi foundlastinterrupt 6441 f492 - dex 6442 f492 - dex 6443 f492 - dex 6444 f492 - bne findlastinterrupt 6445 f492 -foundlastinterrupt 6446 f492 - and #%01111111 ; clear the interrupt bit 6447 f492 - sta DLLMEM,x 6448 f492 - ifconst DOUBLEBUFFER 6449 f492 - sta DLLMEM+DBOFFSET,x 6450 f492 - endif ; DOUBLEBUFFER 6451 f492 - ;now we need to set the new interrupts 6452 f492 - clc 6453 f492 - lda temp1 6454 f492 - adc visibleDLLstart 6455 f492 - tax 6456 f492 - lda DLLMEM,x 6457 f492 - ora #%10000000 6458 f492 - sta DLLMEM,x 6459 f492 - ifconst DOUBLEBUFFER 6460 f492 - sta DLLMEM+DBOFFSET,x 6461 f492 - endif ; DOUBLEBUFFER 6462 f492 - clc 6463 f492 - lda temp2 6464 f492 - adc visibleDLLstart 6465 f492 - tax 6466 f492 - lda DLLMEM,x 6467 f492 - ora #%10000000 6468 f492 - sta DLLMEM,x 6469 f492 - ifconst DOUBLEBUFFER 6470 f492 - sta DLLMEM+DBOFFSET,x 6471 f492 - endif ; DOUBLEBUFFER 6472 f492 - jsr vblankresync 6473 f492 - rts 6474 f492 endif ; USED_ADJUSTVISIBLE 6475 f492 6476 f492 vblankresync 6477 f492 20 30 f5 jsr waitforvblankstart ; ensure vblank just started 6478 f495 a9 00 lda #0 6479 f497 85 4d sta visibleover 6480 f499 a9 03 lda #3 6481 f49b 8d b2 01 sta interruptindex 6482 f49e 60 rts 6483 f49f 6484 f49f createallgamedlls 6485 f49f a2 00 ldx #0 6486 f4a1 a9 19 lda #NVLINES 6487 f4a3 ac 09 21 ldy paldetected 6488 f4a6 f0 03 beq skipcreatePALpadding 6489 f4a8 18 clc 6490 f4a9 69 15 adc #21 6491 f4ab skipcreatePALpadding 6492 f4ab 20 e0 f4 jsr createnonvisibledlls 6493 f4ae 8e 3c 21 stx visibleDLLstart 6494 f4b1 20 11 f5 jsr createvisiblezones 6495 f4b4 8e 3d 21 stx overscanDLLstart 6496 f4b7 createallgamedllscontinue 6497 f4b7 a9 50 lda #(NVLINES+55) ; extras for PAL 6498 f4b9 20 e0 f4 jsr createnonvisibledlls 6499 f4bc 6500 f4bc ae 3c 21 ldx visibleDLLstart 6501 f4bf bd 00 18 lda DLLMEM,x 6502 f4c2 09 80 ora #%10000000 ; NMI 1 - start of visible screen 6503 f4c4 9d 00 18 sta DLLMEM,x 6504 f4c7 - ifconst DOUBLEBUFFER 6505 f4c7 - sta DLLMEM+DBOFFSET,x 6506 f4c7 endif ; DOUBLEBUFFER 6507 f4c7 6508 f4c7 ae 3d 21 ldx overscanDLLstart 6509 f4ca bd 00 18 lda DLLMEM,x 6510 f4cd 09 83 ora #%10000011 ; NMI 2 - end of visible screen 6511 f4cf 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 6512 f4d1 9d 00 18 sta DLLMEM,x 6513 f4d4 - ifconst DOUBLEBUFFER 6514 f4d4 - sta DLLMEM+DBOFFSET,x 6515 f4d4 endif ; DOUBLEBUFFER 6516 f4d4 6517 f4d4 e8 inx 6518 f4d5 e8 inx 6519 f4d6 e8 inx 6520 f4d7 6521 f4d7 bd 00 18 lda DLLMEM,x 6522 f4da 09 80 ora #%10000000 ; NMI 3 - deeper overscan 6523 f4dc 9d 00 18 sta DLLMEM,x 6524 f4df - ifconst DOUBLEBUFFER 6525 f4df - sta DLLMEM+DBOFFSET,x 6526 f4df endif ; DOUBLEBUFFER 6527 f4df 6528 f4df 60 rts 6529 f4e0 6530 f4e0 createnonvisibledlls 6531 f4e0 85 42 sta temp1 6532 f4e2 4a lsr 6533 f4e3 4a lsr 6534 f4e4 4a lsr 6535 f4e5 4a lsr ; /16 6536 f4e6 f0 09 beq skipcreatenonvisibledlls1loop 6537 f4e8 a8 tay 6538 f4e9 createnonvisibledlls1loop 6539 f4e9 a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 6540 f4eb 20 00 f5 jsr createblankdllentry 6541 f4ee 88 dey 6542 f4ef d0 f8 bne createnonvisibledlls1loop 6543 f4f1 skipcreatenonvisibledlls1loop 6544 f4f1 a5 42 lda temp1 6545 f4f3 29 0f and #%00001111 6546 f4f5 f0 08 beq createnonvisibledllsreturn 6547 f4f7 38 sec 6548 f4f8 e9 01 sbc #1 6549 f4fa 09 40 ora #%01000000 6550 f4fc 20 00 f5 jsr createblankdllentry 6551 f4ff createnonvisibledllsreturn 6552 f4ff 60 rts 6553 f500 6554 f500 createblankdllentry 6555 f500 9d 00 18 sta DLLMEM,x 6556 f503 - ifconst DOUBLEBUFFER 6557 f503 - sta DLLMEM+DBOFFSET,x 6558 f503 endif ; DOUBLEBUFFER 6559 f503 e8 inx 6560 f504 a9 21 lda #$21 ; blank 6561 f506 9d 00 18 sta DLLMEM,x 6562 f509 - ifconst DOUBLEBUFFER 6563 f509 - sta DLLMEM+DBOFFSET,x 6564 f509 endif ; DOUBLEBUFFER 6565 f509 e8 inx 6566 f50a a9 00 lda #$00 6567 f50c 9d 00 18 sta DLLMEM,x 6568 f50f - ifconst DOUBLEBUFFER 6569 f50f - sta DLLMEM+DBOFFSET,x 6570 f50f endif ; DOUBLEBUFFER 6571 f50f e8 inx 6572 f510 60 rts 6573 f511 6574 f511 createvisiblezones 6575 f511 a0 00 ldy #0 6576 f513 createvisiblezonesloop 6577 f513 b9 60 f6 lda.w DLHEIGHT,y 6578 f516 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 6579 f518 9d 00 18 sta DLLMEM,x 6580 f51b - ifconst DOUBLEBUFFER 6581 f51b - sta DLLMEM+DBOFFSET,x 6582 f51b endif ; DOUBLEBUFFER 6583 f51b e8 inx 6584 f51c b9 30 f6 lda DLPOINTH,y 6585 f51f 9d 00 18 sta DLLMEM,x 6586 f522 - ifconst DOUBLEBUFFER 6587 f522 - sta DLLMEM+DBOFFSET,x 6588 f522 endif ; DOUBLEBUFFER 6589 f522 e8 inx 6590 f523 b9 48 f6 lda DLPOINTL,y 6591 f526 9d 00 18 sta DLLMEM,x 6592 f529 - ifconst DOUBLEBUFFER 6593 f529 - clc 6594 f529 - adc #DOUBLEBUFFEROFFSET 6595 f529 - sta DLLMEM+DBOFFSET,x 6596 f529 - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 6597 f529 - inc DLLMEM+DBOFFSET-1,x 6598 f529 -skiphidoublebufferadjust 6599 f529 endif ; DOUBLEBUFFER 6600 f529 e8 inx 6601 f52a c8 iny 6602 f52b c0 18 cpy #WZONECOUNT 6603 f52d d0 e4 bne createvisiblezonesloop 6604 f52f 60 rts 6605 f530 6606 f530 waitforvblankstart 6607 f530 visibleoverwait 6608 f530 24 28 BIT MSTAT 6609 f532 10 fc bpl visibleoverwait 6610 f534 vblankstartwait 6611 f534 24 28 BIT MSTAT 6612 f536 30 fc bmi vblankstartwait 6613 f538 60 rts 6614 f539 6615 f539 - ifconst DOUBLEBUFFER 6616 f539 -flipdisplaybufferreturn 6617 f539 - rts 6618 f539 -flipdisplaybuffer 6619 f539 - lda doublebufferstate 6620 f539 - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 6621 f539 - 6622 f539 - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 6623 f539 - 6624 f539 - lda doublebufferstate 6625 f539 - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 6626 f539 - tax 6627 f539 - 6628 f539 - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 6629 f539 - 6630 f539 -flipdisplaybufferwait1 6631 f539 - lda visibleover 6632 f539 - beq flipdisplaybufferwait1 6633 f539 - 6634 f539 -flipdisplaybufferwait 6635 f539 - lda visibleover 6636 f539 - bne flipdisplaybufferwait 6637 f539 - 6638 f539 - lda doublebufferminimumframetarget 6639 f539 - beq skipminimumframecode 6640 f539 - lda doublebufferminimumframeindex 6641 f539 - bne flipdisplaybufferwait1 6642 f539 - lda doublebufferminimumframetarget 6643 f539 - sta doublebufferminimumframeindex 6644 f539 -skipminimumframecode 6645 f539 - 6646 f539 - lda DLLMEMLutHi,x 6647 f539 - sta DPPH 6648 f539 - lda DLLMEMLutLo,x 6649 f539 - sta DPPL 6650 f539 - 6651 f539 - lda NewPageflipstate,x 6652 f539 - sta doublebufferstate 6653 f539 - lda NewPageflipoffset,x 6654 f539 - sta doublebufferdloffset 6655 f539 - 6656 f539 - lda doublebufferbufferdirty 6657 f539 - beq flipdisplaybufferreturn 6658 f539 - 6659 f539 - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 6660 f539 - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 6661 f539 - ; from the displayed buffer to the working buffer... 6662 f539 - 6663 f539 - lda doublebufferdloffset 6664 f539 - eor #DOUBLEBUFFEROFFSET 6665 f539 - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 6666 f539 - 6667 f539 - ldx #(WZONECOUNT-1) 6668 f539 -copybufferzoneloop 6669 f539 - 6670 f539 - lda DLPOINTL,x 6671 f539 - clc 6672 f539 - adc doublebufferdloffset 6673 f539 - sta temp1 6674 f539 - lda DLPOINTH,x 6675 f539 - adc #0 6676 f539 - sta temp2 6677 f539 - 6678 f539 - lda DLPOINTL,x 6679 f539 - clc 6680 f539 - adc temp6 6681 f539 - sta temp3 6682 f539 - lda DLPOINTH,x 6683 f539 - adc #0 6684 f539 - sta temp4 6685 f539 - 6686 f539 - lda dlendsave,x 6687 f539 - tay 6688 f539 -copybuffercharsloop 6689 f539 - lda (temp3),y 6690 f539 - sta (temp1),y 6691 f539 - dey 6692 f539 - bpl copybuffercharsloop 6693 f539 - dex 6694 f539 - bpl copybufferzoneloop 6695 f539 - lda #0 6696 f539 - sta doublebufferbufferdirty 6697 f539 - rts 6698 f539 - 6699 f539 -doublebufferoff 6700 f539 - lda #1 6701 f539 - sta doublebufferstate 6702 f539 - jsr flipdisplaybuffer 6703 f539 - lda #0 6704 f539 - sta doublebufferstate 6705 f539 - sta doublebufferdloffset 6706 f539 - rts 6707 f539 - 6708 f539 -DLLMEMLutLo 6709 f539 - .byte DLLMEM,>(DLLMEM+DBOFFSET) 6712 f539 -NewPageflipstate 6713 f539 - .byte 3,1 6714 f539 -NewPageflipoffset 6715 f539 - .byte DOUBLEBUFFEROFFSET,0 6716 f539 - 6717 f539 endif ; DOUBLEBUFFER 6718 f539 6719 f539 - ifconst MOUSESUPPORT 6720 f539 - 6721 f539 -rotationalcompare 6722 f539 - ; old = 00 01 10 11 6723 f539 - .byte $00, $01, $ff, $00 ; new=00 6724 f539 - .byte $ff, $00, $00, $01 ; new=01 6725 f539 - .byte $01, $00, $00, $ff ; new=10 6726 f539 - .byte $00, $ff, $01, $00 ; new=11 6727 f539 - 6728 f539 - ; 0000YyXx st mouse 6729 f539 - 6730 f539 - ; 0000xyXY amiga mouse 6731 f539 - 6732 f539 - ifconst MOUSEXONLY 6733 f539 -amigatoataribits ; swap bits 1 and 4... 6734 f539 - .byte %0000, %0000, %0010, %0010 6735 f539 - .byte %0000, %0000, %0010, %0010 6736 f539 - .byte %0001, %0001, %0011, %0011 6737 f539 - .byte %0001, %0001, %0011, %0011 6738 f539 - 6739 f539 - ; null change bits 6740 f539 - .byte %0000, %0001, %0010, %0011 6741 f539 - .byte %0000, %0001, %0010, %0011 6742 f539 - .byte %0000, %0001, %0010, %0011 6743 f539 - .byte %0000, %0001, %0010, %0011 6744 f539 - 6745 f539 - else ; !MOUSEXONLY 6746 f539 - 6747 f539 -amigatoataribits ; swap bits 1 and 4... 6748 f539 - .byte %0000, %1000, %0010, %1010 6749 f539 - .byte %0100, %1100, %0110, %1110 6750 f539 - .byte %0001, %1001, %0011, %1011 6751 f539 - .byte %0101, %1101, %0111, %1111 6752 f539 - ; null change bits 6753 f539 - .byte %0000, %0001, %0010, %0011 6754 f539 - .byte %0100, %0101, %0110, %0111 6755 f539 - .byte %1000, %1001, %1010, %1011 6756 f539 - .byte %1100, %1101, %1110, %1111 6757 f539 - endif ; !MOUSEXONLY 6758 f539 - 6759 f539 endif ; MOUSESUPPORT 6760 f539 6761 f539 mouse0update 6762 f539 - ifconst MOUSE0SUPPORT 6763 f539 - 6764 f539 -mousetableselect = inttemp2 6765 f539 -mousexdelta = inttemp3 6766 f539 -mouseydelta = inttemp4 6767 f539 -lastSWCHA = inttemp6 6768 f539 - 6769 f539 - ; 0000YyXx st mouse 6770 f539 - ; 0000xyXY amiga mouse 6771 f539 - 6772 f539 - lda #$ff 6773 f539 - sta lastSWCHA 6774 f539 - 6775 f539 - ldy port0control 6776 f539 - 6777 f539 - lda #%00010000 6778 f539 - cpy #9 ; AMIGA? 6779 f539 - bne skipamigabitsfix0 6780 f539 - lda #0 6781 f539 -skipamigabitsfix0 6782 f539 - sta mousetableselect 6783 f539 - ifconst DRIVINGBOOST 6784 f539 - cpy #6 ; DRIVING? 6785 f539 - bne skipdriving0setup 6786 f539 - ; swap mousex0 and mousey0. mousex seen by the 7800basic program 6787 f539 - ; trails the actual mousex0, so we can smoothly interpolate toward 6788 f539 - ; the actual position. This actual position is stored in mousey0 6789 f539 - ; after the driver has run. 6790 f539 - ldx mousex0 6791 f539 - lda mousey0 6792 f539 - stx mousey0 6793 f539 - sta mousex0 6794 f539 -skipdriving0setup 6795 f539 - endif ; DRIVINGBOOST 6796 f539 - 6797 f539 - lda #0 6798 f539 - sta mousexdelta 6799 f539 - sta mouseydelta 6800 f539 - 6801 f539 - ifnconst MOUSETIME 6802 f539 - ifnconst MOUSEXONLY 6803 f539 - lda #180 ; minimum for x+y 6804 f539 - else 6805 f539 - lda #100 ; minimum for just x 6806 f539 - endif 6807 f539 - else 6808 f539 - lda #MOUSETIME 6809 f539 - endif 6810 f539 - jsr SETTIM64T ; INTIM is in Y 6811 f539 - 6812 f539 -mouse0updateloop 6813 f539 - lda SWCHA 6814 f539 - asr #%11110000 ; Undocumented. A = A & #IMM, then LSR A. 6815 f539 - cmp lastSWCHA 6816 f539 - beq mouse0loopcondition 6817 f539 - sta lastSWCHA 6818 f539 - lsr 6819 f539 - lsr 6820 f539 - lsr 6821 f539 - 6822 f539 - ora mousetableselect ; atari/amiga decoding table selection 6823 f539 - 6824 f539 - ; st mice encode on different bits/joystick-lines than amiga mice... 6825 f539 - ; 0000YyXx st mouse 6826 f539 - ; 0000xyXY amiga mouse 6827 f539 - ; ...so can shuffle the amiga bits to reuse the st driver. 6828 f539 - tay 6829 f539 - lax amigatoataribits,y 6830 f539 - 6831 f539 - ifnconst MOUSEXONLY 6832 f539 - ; first the Y... 6833 f539 - and #%00001100 6834 f539 - ora mousecodey0 6835 f539 - tay 6836 f539 - lda rotationalcompare,y 6837 f539 - clc 6838 f539 - adc mouseydelta 6839 f539 - sta mouseydelta 6840 f539 - tya 6841 f539 - lsr 6842 f539 - lsr 6843 f539 - sta mousecodey0 6844 f539 - txa 6845 f539 - ; ...then the X... 6846 f539 - and #%00000011 6847 f539 - tax 6848 f539 - endif ; !MOUSEXONLY 6849 f539 - 6850 f539 - asl 6851 f539 - asl 6852 f539 - ora mousecodex0 6853 f539 - tay 6854 f539 - lda rotationalcompare,y 6855 f539 - adc mousexdelta ; carry was clear by previous ASL 6856 f539 - sta mousexdelta 6857 f539 - stx mousecodex0 6858 f539 -mouse0loopcondition 6859 f539 - lda TIMINT 6860 f539 - bpl mouse0updateloop 6861 f539 - 6862 f539 - ; *** adapt to selected device resolution. 6863 f539 - ldx port0control 6864 f539 - 6865 f539 - ifconst PRECISIONMOUSING 6866 f539 - ldy port0resolution 6867 f539 - bne mouse0halveddone 6868 f539 - cpx #6 ; half-resolution is no good for driving wheels 6869 f539 - beq mouse0halveddone 6870 f539 - ; resolution=0 is half mouse resolution, necessary for precision 6871 f539 - ; mousing on a 160x240 screen with a 1000 dpi mouse. 6872 f539 - 6873 f539 - lda mousexdelta 6874 f539 - cmp #$80 6875 f539 - ror ; do a signed divide by 2. 6876 f539 - clc 6877 f539 - adc mousex0 6878 f539 - sta mousex0 6879 f539 - ifnconst MOUSEXONLY 6880 f539 - lda mouseydelta 6881 f539 - clc 6882 f539 - adc mousey0 6883 f539 - sta mousey0 6884 f539 - endif 6885 f539 - ; at half resolution we just exit after updating x and y 6886 f539 - jmp LLRET0 6887 f539 -mouse0halveddone 6888 f539 - endif ; PRECISIONMOUSING 6889 f539 - 6890 f539 - ifnconst MOUSEXONLY 6891 f539 - asl mouseydelta ; *2 because Y resolution is finer 6892 f539 - ldy port0resolution 6893 f539 - dey 6894 f539 - lda #0 6895 f539 -mousey0resolutionfix 6896 f539 - clc 6897 f539 - adc mouseydelta 6898 f539 - dey 6899 f539 - bpl mousey0resolutionfix 6900 f539 - clc 6901 f539 - adc mousey0 6902 f539 - sta mousey0 6903 f539 - endif ; MOUSEXONLY 6904 f539 - 6905 f539 - ldy port0resolution 6906 f539 - dey 6907 f539 - lda #0 6908 f539 -mousex0resolutionfix 6909 f539 - clc 6910 f539 - adc mousexdelta 6911 f539 - dey 6912 f539 - bpl mousex0resolutionfix 6913 f539 - ifnconst DRIVINGBOOST 6914 f539 - clc 6915 f539 - adc mousex0 6916 f539 - sta mousex0 6917 f539 - else 6918 f539 - cpx #6 6919 f539 - beq carryonmouse0boost 6920 f539 - clc 6921 f539 - adc mousex0 6922 f539 - sta mousex0 6923 f539 - jmp LLRET0 6924 f539 -carryonmouse0boost 6925 f539 - sta mousexdelta 6926 f539 - clc 6927 f539 - adc mousecodey0 6928 f539 - sta mousecodey0 6929 f539 - clc 6930 f539 - adc mousex0 6931 f539 - tay ; save the target X 6932 f539 - adc mousey0 ; average in the smoothly-trailing X 6933 f539 - ror 6934 f539 - sta mousex0 ; mousex0 now has the smoothly trailing X 6935 f539 - sty mousey0 ; and mousey0 has the the target X 6936 f539 - 6937 f539 - ; check to see if the coordinate wrapped. If so, undo the averaging code. 6938 f539 - ; A has mousex0, the smoothly trailing X 6939 f539 - sbc mousey0 ; less the target X 6940 f539 - bpl skipabsolutedrive0 6941 f539 - eor #$ff 6942 f539 -skipabsolutedrive0 6943 f539 - cmp #64 ; just an unreasonably large change 6944 f539 - bcc skipdrivewrapfix0 6945 f539 - sty mousex0 ; if X wrapped, we catch the trailing X up to the target X 6946 f539 -skipdrivewrapfix0 6947 f539 - 6948 f539 - ; get rid of the tweening if the distance travelled was very small 6949 f539 - lda mousexdelta 6950 f539 - cmp port0resolution 6951 f539 - bcs skipbetweenfix0 6952 f539 - lda mousex0 6953 f539 - sta mousey0 6954 f539 -skipbetweenfix0 6955 f539 - 6956 f539 -drivingboostreductioncheck0 6957 f539 - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 6958 f539 - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 6959 f539 - ; negated again because truncation during BCD math results in 6960 f539 - ; differing magnitudes, depending if the value is +ve or -ve. 6961 f539 -driving0fix 6962 f539 - lax mousecodey0 6963 f539 - cmp #$80 6964 f539 - bcs driving0skipnegate1 6965 f539 - eor #$FF 6966 f539 - adc #1 6967 f539 - sta mousecodey0 6968 f539 -driving0skipnegate1 6969 f539 - cmp #$80 6970 f539 - ror 6971 f539 - cmp #$80 6972 f539 - ror 6973 f539 - cmp #$80 6974 f539 - ror 6975 f539 - sta inttemp1 6976 f539 - lda mousecodey0 6977 f539 - sec 6978 f539 - sbc inttemp1 6979 f539 - cpx #$80 6980 f539 - bcs driving0skipnegate2 6981 f539 - eor #$FF 6982 f539 - adc #1 6983 f539 -driving0skipnegate2 6984 f539 - sta mousecodey0 6985 f539 -drivingboostdone0 6986 f539 - endif ; DRIVINGBOOST 6987 f539 - 6988 f539 - jmp LLRET0 6989 f539 - 6990 f539 endif ; MOUSE0SUPPORT 6991 f539 6992 f539 mouse1update 6993 f539 - ifconst MOUSE1SUPPORT 6994 f539 - 6995 f539 -mousetableselect = inttemp2 6996 f539 -mousexdelta = inttemp3 6997 f539 -mouseydelta = inttemp4 6998 f539 -lastSWCHA = inttemp6 6999 f539 - 7000 f539 - ; 0000YyXx st mouse 7001 f539 - ; 0000xyXY amiga mouse 7002 f539 - 7003 f539 - lda #$ff 7004 f539 - sta lastSWCHA 7005 f539 - 7006 f539 - ldy port1control 7007 f539 - 7008 f539 - lda #%00010000 7009 f539 - cpy #9 ; AMIGA? 7010 f539 - bne skipamigabitsfix1 7011 f539 - lda #0 7012 f539 -skipamigabitsfix1 7013 f539 - sta mousetableselect 7014 f539 - ifconst DRIVINGBOOST 7015 f539 - cpy #6 ; DRIVING? 7016 f539 - bne skipdriving1setup 7017 f539 - ; swap mousex1 and mousey1. mousex seen by the 7800basic program 7018 f539 - ; trails the actual mousex1, so we can smoothly interpolate toward 7019 f539 - ; the actual position. This actual position is stored in mousey1 7020 f539 - ; after the driver has run. 7021 f539 - ldx mousex1 7022 f539 - lda mousey1 7023 f539 - stx mousey1 7024 f539 - sta mousex1 7025 f539 -skipdriving1setup 7026 f539 - endif ; DRIVINGBOOST 7027 f539 - 7028 f539 - lda #0 7029 f539 - sta mousexdelta 7030 f539 - sta mouseydelta 7031 f539 - 7032 f539 - ifnconst MOUSETIME 7033 f539 - ifnconst MOUSEXONLY 7034 f539 - lda #180 ; minimum for x+y 7035 f539 - else 7036 f539 - lda #100 ; minimum for just x 7037 f539 - endif 7038 f539 - else 7039 f539 - lda #MOUSETIME 7040 f539 - endif 7041 f539 - jsr SETTIM64T ; INTIM is in Y 7042 f539 - 7043 f539 -mouse1updateloop 7044 f539 - lda SWCHA 7045 f539 - and #%00001111 7046 f539 - cmp lastSWCHA 7047 f539 - beq mouse1loopcondition 7048 f539 - sta lastSWCHA 7049 f539 - 7050 f539 - ora mousetableselect ; atari/amiga decoding table selection 7051 f539 - 7052 f539 - ; st mice encode on different bits/joystick-lines than amiga mice... 7053 f539 - ; 0000YyXx st mouse 7054 f539 - ; 0000xyXY amiga mouse 7055 f539 - ; ...so can shuffle the amiga bits to reuse the st driver. 7056 f539 - tay 7057 f539 - lax amigatoataribits,y 7058 f539 - 7059 f539 - ifnconst MOUSEXONLY 7060 f539 - ; first the Y... 7061 f539 - and #%00001100 7062 f539 - ora mousecodey1 7063 f539 - tay 7064 f539 - lda rotationalcompare,y 7065 f539 - clc 7066 f539 - adc mouseydelta 7067 f539 - sta mouseydelta 7068 f539 - tya 7069 f539 - lsr 7070 f539 - lsr 7071 f539 - sta mousecodey1 7072 f539 - txa 7073 f539 - ; ...then the X... 7074 f539 - and #%00000011 7075 f539 - tax 7076 f539 - endif ; !MOUSEXONLY 7077 f539 - 7078 f539 - asl 7079 f539 - asl 7080 f539 - ora mousecodex1 7081 f539 - tay 7082 f539 - lda rotationalcompare,y 7083 f539 - adc mousexdelta ; carry was clear by previous ASL 7084 f539 - sta mousexdelta 7085 f539 - stx mousecodex1 7086 f539 -mouse1loopcondition 7087 f539 - lda TIMINT 7088 f539 - bpl mouse1updateloop 7089 f539 - 7090 f539 - ; *** adapt to selected device resolution. 7091 f539 - ldx port1control 7092 f539 - 7093 f539 - ifconst PRECISIONMOUSING 7094 f539 - ldy port1resolution 7095 f539 - bne mouse1halveddone 7096 f539 - cpx #6 ; half-resolution is no good for driving wheels 7097 f539 - beq mouse1halveddone 7098 f539 - ; resolution=0 is half mouse resolution, necessary for precision 7099 f539 - ; mousing on a 160x240 screen with a 1000 dpi mouse. 7100 f539 - 7101 f539 - lda mousexdelta 7102 f539 - cmp #$80 7103 f539 - ror ; do a signed divide by 2. 7104 f539 - clc 7105 f539 - adc mousex1 7106 f539 - sta mousex1 7107 f539 - ifnconst MOUSEXONLY 7108 f539 - lda mouseydelta 7109 f539 - clc 7110 f539 - adc mousey1 7111 f539 - sta mousey1 7112 f539 - endif 7113 f539 - ; at half resolution we just exit after updating x and y 7114 f539 - jmp LLRET1 7115 f539 -mouse1halveddone 7116 f539 - endif ; PRECISIONMOUSING 7117 f539 - 7118 f539 - ifnconst MOUSEXONLY 7119 f539 - asl mouseydelta ; *2 because Y resolution is finer 7120 f539 - ldy port1resolution 7121 f539 - dey 7122 f539 - lda #0 7123 f539 -mousey1resolutionfix 7124 f539 - clc 7125 f539 - adc mouseydelta 7126 f539 - dey 7127 f539 - bpl mousey1resolutionfix 7128 f539 - clc 7129 f539 - adc mousey1 7130 f539 - sta mousey1 7131 f539 - endif ; MOUSEXONLY 7132 f539 - 7133 f539 - ldy port1resolution 7134 f539 - dey 7135 f539 - lda #0 7136 f539 -mousex1resolutionfix 7137 f539 - clc 7138 f539 - adc mousexdelta 7139 f539 - dey 7140 f539 - bpl mousex1resolutionfix 7141 f539 - ifnconst DRIVINGBOOST 7142 f539 - clc 7143 f539 - adc mousex1 7144 f539 - sta mousex1 7145 f539 - else 7146 f539 - cpx #6 7147 f539 - beq carryonmouse1boost 7148 f539 - clc 7149 f539 - adc mousex1 7150 f539 - sta mousex1 7151 f539 - jmp LLRET1 7152 f539 -carryonmouse1boost 7153 f539 - sta mousexdelta 7154 f539 - clc 7155 f539 - adc mousecodey1 7156 f539 - sta mousecodey1 7157 f539 - clc 7158 f539 - adc mousex1 7159 f539 - tay ; save the target X 7160 f539 - adc mousey1 ; average in the smoothly-trailing X 7161 f539 - ror 7162 f539 - sta mousex1 ; mousex0 now has the smoothly trailing X 7163 f539 - sty mousey1 ; and mousey0 has the the target X 7164 f539 - 7165 f539 - ; check to see if the coordinate wrapped. If so, undo the averaging code. 7166 f539 - ; A has mousex1, the smoothly trailing X 7167 f539 - sbc mousey1 ; less the target X 7168 f539 - bpl skipabsolutedrive1 7169 f539 - eor #$ff 7170 f539 -skipabsolutedrive1 7171 f539 - cmp #64 ; just an unreasonably large change 7172 f539 - bcc skipdrivewrapfix1 7173 f539 - sty mousex1 ; if X wrapped, we catch the trailing X up to the target X 7174 f539 -skipdrivewrapfix1 7175 f539 - 7176 f539 - ; get rid of the tweening if the distance travelled was very small 7177 f539 - lda mousexdelta 7178 f539 - cmp port1resolution 7179 f539 - bcs skipbetweenfix1 7180 f539 - lda mousex1 7181 f539 - sta mousey1 7182 f539 -skipbetweenfix1 7183 f539 - 7184 f539 -drivingboostreductioncheck1 7185 f539 - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 7186 f539 - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 7187 f539 - ; negated again because truncation during BCD math results in 7188 f539 - ; differing magnitudes, depending if the value is +ve or -ve. 7189 f539 -driving1fix 7190 f539 - lax mousecodey1 7191 f539 - cmp #$80 7192 f539 - bcs driving0skipnegate1 7193 f539 - eor #$FF 7194 f539 - adc #1 7195 f539 - sta mousecodey1 7196 f539 -driving0skipnegate1 7197 f539 - cmp #$80 7198 f539 - ror 7199 f539 - cmp #$80 7200 f539 - ror 7201 f539 - cmp #$80 7202 f539 - ror 7203 f539 - sta inttemp1 7204 f539 - lda mousecodey1 7205 f539 - sec 7206 f539 - sbc inttemp1 7207 f539 - cpx #$80 7208 f539 - bcs driving1skipnegate2 7209 f539 - eor #$FF 7210 f539 - adc #1 7211 f539 -driving1skipnegate2 7212 f539 - sta mousecodey1 7213 f539 -drivingboostdone1 7214 f539 - endif ; DRIVINGBOOST 7215 f539 - 7216 f539 - jmp LLRET1 7217 f539 - 7218 f539 endif ; MOUSE1SUPPORT 7219 f539 7220 f539 7221 f539 trakball0update 7222 f539 - ifconst TRAKBALL0SUPPORT 7223 f539 - ifnconst TRAKTIME 7224 f539 - ifnconst TRAKXONLY 7225 f539 - lda #180 ; minimum for x+y 7226 f539 - else ; !TRAKXONLY 7227 f539 - lda #100 ; minimum for just x 7228 f539 - endif ; !TRAKXONLY 7229 f539 - else ; !TRAKTIME 7230 f539 - lda #TRAKTIME 7231 f539 - endif ; !TRAKTIME 7232 f539 - jsr SETTIM64T ; INTIM is in Y 7233 f539 - ldx #0 7234 f539 - ifnconst TRAKXONLY 7235 f539 - ldy #0 7236 f539 - endif ; TRAKXONLY 7237 f539 -trakball0updateloop 7238 f539 - lda SWCHA 7239 f539 - and #%00110000 7240 f539 - cmp trakballcodex0 7241 f539 - sta trakballcodex0 7242 f539 - beq trakball0movementXdone 7243 f539 - and #%00010000 7244 f539 - beq trakball0negativeX 7245 f539 -trakball0positiveX 7246 f539 - ;(2 from beq) 7247 f539 - inx ; 2 7248 f539 - jmp trakball0movementXdone ; 3 7249 f539 -trakball0negativeX 7250 f539 - ;(3 from beq) 7251 f539 - dex ; 2 7252 f539 - nop ; 2 7253 f539 -trakball0movementXdone 7254 f539 - 7255 f539 - ifnconst TRAKXONLY 7256 f539 - lda SWCHA 7257 f539 - and #%11000000 7258 f539 - cmp trakballcodey0 7259 f539 - sta trakballcodey0 7260 f539 - beq trakball0movementYdone 7261 f539 - and #%01000000 7262 f539 - beq trakball0negativeY 7263 f539 -trakball0positiveY 7264 f539 - ;(2 from beq) 7265 f539 - iny ; 2 7266 f539 - jmp trakball0movementYdone ; 3 7267 f539 -trakball0negativeY 7268 f539 - ;(3 from beq) 7269 f539 - dey ; 2 7270 f539 - nop ; 2 7271 f539 -trakball0movementYdone 7272 f539 - endif ; !TRAKXONLY 7273 f539 - 7274 f539 - lda TIMINT 7275 f539 - bpl trakball0updateloop 7276 f539 - lda #0 7277 f539 - cpx #0 7278 f539 - beq trakball0skipXadjust 7279 f539 - clc 7280 f539 -trakball0Xloop 7281 f539 - adc port0resolution 7282 f539 - dex 7283 f539 - bne trakball0Xloop 7284 f539 - clc 7285 f539 - adc trakballx0 7286 f539 - sta trakballx0 7287 f539 -trakball0skipXadjust 7288 f539 - ifnconst TRAKXONLY 7289 f539 - lda #0 7290 f539 - cpy #0 7291 f539 - beq trakball0skipYadjust 7292 f539 - clc 7293 f539 -trakball0yloop 7294 f539 - adc port0resolution 7295 f539 - dey 7296 f539 - bne trakball0yloop 7297 f539 - clc 7298 f539 - adc trakbally0 7299 f539 - sta trakbally0 7300 f539 -trakball0skipYadjust 7301 f539 - endif ; !TRAKXONLY 7302 f539 - 7303 f539 - jmp LLRET0 7304 f539 endif 7305 f539 7306 f539 7307 f539 7308 f539 trakball1update 7309 f539 - ifconst TRAKBALL1SUPPORT 7310 f539 - ifnconst TRAKTIME 7311 f539 - ifnconst TRAKXONLY 7312 f539 - lda #180 ; minimum for x+y 7313 f539 - else ; !TRAKXONLY 7314 f539 - lda #100 ; minimum for just x 7315 f539 - endif ; !TRAKXONLY 7316 f539 - else ; !TRAKTIME 7317 f539 - lda #TRAKTIME 7318 f539 - endif ; !TRAKTIME 7319 f539 - jsr SETTIM64T ; INTIM is in Y 7320 f539 - ldx #0 7321 f539 - ifnconst TRAKXONLY 7322 f539 - ldy #0 7323 f539 - endif ; TRAKXONLY 7324 f539 -trakball1updateloop 7325 f539 - lda SWCHA 7326 f539 - and #%00000011 7327 f539 - cmp trakballcodex1 7328 f539 - sta trakballcodex1 7329 f539 - beq trakball1movementXdone 7330 f539 - and #%00000001 7331 f539 - beq trakball1negativeX 7332 f539 -trakball1positiveX 7333 f539 - ;(2 from beq) 7334 f539 - inx ; 2 7335 f539 - jmp trakball1movementXdone ; 3 7336 f539 -trakball1negativeX 7337 f539 - ;(3 from beq) 7338 f539 - dex ; 2 7339 f539 - nop ; 2 7340 f539 -trakball1movementXdone 7341 f539 - 7342 f539 - ifnconst TRAKXONLY 7343 f539 - lda SWCHA 7344 f539 - and #%00001100 7345 f539 - cmp trakballcodey1 7346 f539 - sta trakballcodey1 7347 f539 - beq trakball1movementYdone 7348 f539 - and #%00000100 7349 f539 - beq trakball1negativeY 7350 f539 -trakball1positiveY 7351 f539 - ;(2 from beq) 7352 f539 - iny ; 2 7353 f539 - jmp trakball1movementYdone ; 3 7354 f539 -trakball1negativeY 7355 f539 - ;(3 from beq) 7356 f539 - dey ; 2 7357 f539 - nop ; 2 7358 f539 -trakball1movementYdone 7359 f539 - endif ; !TRAKXONLY 7360 f539 - 7361 f539 - lda TIMINT 7362 f539 - bpl trakball1updateloop 7363 f539 - lda #0 7364 f539 - cpx #0 7365 f539 - beq trakball1skipXadjust 7366 f539 - clc 7367 f539 -trakball1Xloop 7368 f539 - adc port1resolution 7369 f539 - dex 7370 f539 - bne trakball1Xloop 7371 f539 - clc 7372 f539 - adc trakballx1 7373 f539 - sta trakballx1 7374 f539 -trakball1skipXadjust 7375 f539 - ifnconst TRAKXONLY 7376 f539 - lda #0 7377 f539 - cpy #0 7378 f539 - beq trakball1skipYadjust 7379 f539 - clc 7380 f539 -trakball1yloop 7381 f539 - adc port1resolution 7382 f539 - dey 7383 f539 - bne trakball1yloop 7384 f539 - clc 7385 f539 - adc trakbally1 7386 f539 - sta trakbally1 7387 f539 -trakball1skipYadjust 7388 f539 - endif ; !TRAKXONLY 7389 f539 - 7390 f539 - jmp LLRET1 7391 f539 endif 7392 f539 7393 f539 7394 f539 paddleport0update 7395 f539 - ifconst PADDLE0SUPPORT 7396 f539 - lda #6 7397 f539 - sta VBLANK ; start charging the paddle caps 7398 f539 - lda #0 ; use PADDLE timing 7399 f539 - jsr SETTIM64T ; INTIM is in Y 7400 f539 - 7401 f539 -paddleport0updateloop 7402 f539 - lda INPT0 7403 f539 - bmi skippaddle0setposition 7404 f539 - sty paddleposition0 7405 f539 -skippaddle0setposition 7406 f539 - ifconst TWOPADDLESUPPORT 7407 f539 - lda INPT1 7408 f539 - bmi skippaddle1setposition 7409 f539 - sty paddleposition1 7410 f539 -skippaddle1setposition 7411 f539 - endif 7412 f539 - ldy INTIM 7413 f539 - cpy #TIMEOFFSET 7414 f539 - bcs paddleport0updateloop 7415 f539 - 7416 f539 - lda #%10000110 7417 f539 - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 7418 f539 - sec 7419 f539 - lda paddleposition0 7420 f539 - sbc #TIMEOFFSET 7421 f539 - ifconst PADDLESCALEX2 7422 f539 - asl 7423 f539 - endif 7424 f539 - 7425 f539 - ifnconst PADDLESMOOTHINGOFF 7426 f539 - clc 7427 f539 - adc paddleprevious0 7428 f539 - ror 7429 f539 - sta paddleprevious0 7430 f539 - endif 7431 f539 - 7432 f539 - sta paddleposition0 7433 f539 - 7434 f539 - ifconst TWOPADDLESUPPORT 7435 f539 - sec 7436 f539 - lda paddleposition1 7437 f539 - sbc #TIMEOFFSET 7438 f539 - ifconst PADDLESCALEX2 7439 f539 - asl 7440 f539 - endif 7441 f539 - 7442 f539 - ifnconst PADDLESMOOTHINGOFF 7443 f539 - clc 7444 f539 - adc paddleprevious1 7445 f539 - ror 7446 f539 - sta paddleprevious1 7447 f539 - endif 7448 f539 - sta paddleposition1 7449 f539 - endif ; TWOPADDLESUPPORT 7450 f539 - 7451 f539 - jmp LLRET0 7452 f539 endif 7453 f539 7454 f539 paddleport1update 7455 f539 - ifconst PADDLE1SUPPORT 7456 f539 - lda #6 7457 f539 - sta VBLANK ; start charging the paddle caps 7458 f539 - 7459 f539 - lda #0 ; use PADDLE timing 7460 f539 - jsr SETTIM64T ; INTIM is in Y 7461 f539 - 7462 f539 -paddleport1updateloop 7463 f539 - lda INPT2 7464 f539 - bmi skippaddle2setposition 7465 f539 - sty paddleposition2 7466 f539 -skippaddle2setposition 7467 f539 - ifconst TWOPADDLESUPPORT 7468 f539 - lda INPT3 7469 f539 - bmi skippaddle3setposition 7470 f539 - sty paddleposition3 7471 f539 -skippaddle3setposition 7472 f539 - endif 7473 f539 - ldy INTIM 7474 f539 - cpy #TIMEOFFSET 7475 f539 - bcs paddleport1updateloop 7476 f539 - 7477 f539 - lda #%10000110 7478 f539 - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 7479 f539 - sec 7480 f539 - lda paddleposition2 7481 f539 - sbc #TIMEOFFSET 7482 f539 - ifconst PADDLESCALEX2 7483 f539 - asl 7484 f539 - endif 7485 f539 - 7486 f539 - ifnconst PADDLESMOOTHINGOFF 7487 f539 - clc 7488 f539 - adc paddleprevious2 7489 f539 - ror 7490 f539 - sta paddleprevious2 7491 f539 - endif 7492 f539 - 7493 f539 - sta paddleposition2 7494 f539 - 7495 f539 - ifconst TWOPADDLESUPPORT 7496 f539 - sec 7497 f539 - lda paddleposition3 7498 f539 - sbc #TIMEOFFSET 7499 f539 - ifconst PADDLESCALEX2 7500 f539 - asl 7501 f539 - endif 7502 f539 - 7503 f539 - ifnconst PADDLESMOOTHINGOFF 7504 f539 - clc 7505 f539 - adc paddleprevious3 7506 f539 - ror 7507 f539 - sta paddleprevious3 7508 f539 - endif 7509 f539 - sta paddleposition3 7510 f539 - endif ; TWOPADDLESUPPORT 7511 f539 - 7512 f539 - jmp LLRET1 7513 f539 endif 7514 f539 7515 f539 7516 f539 paddlebuttonhandler ; outside of conditional, for button-handler LUT 7517 f539 - ifconst PADDLESUPPORT 7518 f539 - ; x=0|1 for port, rather than paddle #. 7519 f539 - ; Only the first paddle button will integrate into "joy0fire" testing. If the 7520 f539 - ; game wants to support 2 paddles, up to the game to instead test the 7521 f539 - ; joystick right+left directions instead. 7522 f539 - lda SWCHA ; top of nibble is first paddle button 7523 f539 - cpx #0 ; port 0? 7524 f539 - beq skippaddleport2shift 7525 f539 - asl ; shift second port to upper nibble 7526 f539 - asl 7527 f539 - asl 7528 f539 - asl 7529 f539 -skippaddleport2shift 7530 f539 - and #%10000000 7531 f539 - eor #%10000000 ; invert 7532 f539 - sta sINPT1,x 7533 f539 - jmp buttonreadloopreturn 7534 f539 endif ; PADDLESUPPORT 7535 f539 7536 f539 mousebuttonhandler ; outside of conditional, for button-handler LUT 7537 f539 - ifconst MOUSESUPPORT 7538 f539 - ; stick the mouse buttons in the correct shadow register... 7539 f539 - txa 7540 f539 - asl 7541 f539 - tay ; y=x*2 7542 f539 - lda INPT4,x 7543 f539 - eor #%10000000 7544 f539 - lsr 7545 f539 - sta sINPT1,x 7546 f539 - 7547 f539 - lda INPT1,y 7548 f539 - and #%10000000 7549 f539 - eor #%10000000 7550 f539 - ora sINPT1,x 7551 f539 - sta sINPT1,x 7552 f539 - jmp buttonreadloopreturn 7553 f539 endif ; MOUSESUPPORT 7554 f539 7555 f539 - ifconst KEYPADSUPPORT 7556 f539 - ; ** select keypad rows 0 to 3 over 4 frames... 7557 f539 -keypadrowselect 7558 f539 - ldy #0 7559 f539 - lda port0control 7560 f539 - cmp #7 7561 f539 - bne skipport0val 7562 f539 - iny ; y=y+1 7563 f539 -skipport0val 7564 f539 - lda port1control 7565 f539 - cmp #7 7566 f539 - bne skipport1val 7567 f539 - iny 7568 f539 - iny ; y=y+2 7569 f539 -skipport1val 7570 f539 - lda keyrowdirectionmask,y 7571 f539 - sta CTLSWA 7572 f539 - tya 7573 f539 - asl 7574 f539 - asl 7575 f539 - sta inttemp1 7576 f539 - lda framecounter 7577 f539 - and #3 7578 f539 - ora inttemp1 7579 f539 - tax 7580 f539 - lda keyrowselectvalue,x 7581 f539 - sta SWCHA 7582 f539 - rts 7583 f539 - 7584 f539 -keyrowdirectionmask 7585 f539 - .byte #%00000000 ; 0 : port0=input port1=input 7586 f539 - .byte #%11110000 ; 1 : port0=output port1=input 7587 f539 - .byte #%00001111 ; 2 : port0=input port1=output 7588 f539 - .byte #%11111111 ; 3 : port0=output port1=output 7589 f539 - 7590 f539 -keyrowselectvalue 7591 f539 - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 7592 f539 - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 7593 f539 - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 7594 f539 - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 7595 f539 endif ; KEYPADSUPPORT 7596 f539 7597 f539 - ifconst KEYPADSUPPORT 7598 f539 - ; TODO - split into compile-time KEYPAD0SUPPORT and KEYPAD1SUPPORT 7599 f539 -keypadcolumnread 7600 f539 - lda port0control 7601 f539 - cmp #7 7602 f539 - bne skipkeypadcolumnread0 7603 f539 - lda framecounter 7604 f539 - and #3 7605 f539 - asl ; x2 because keypad variables are interleaved 7606 f539 - tax 7607 f539 - lda #0 7608 f539 - sta keypadmatrix0a,x 7609 f539 - lda INPT0 7610 f539 - cmp #$80 7611 f539 - rol keypadmatrix0a,x 7612 f539 - lda INPT1 7613 f539 - cmp #$80 7614 f539 - rol keypadmatrix0a,x 7615 f539 - lda INPT4 7616 f539 - cmp #$80 7617 f539 - rol keypadmatrix0a,x 7618 f539 - lda keypadmatrix0a,x 7619 f539 - eor #%00000111 7620 f539 - sta keypadmatrix0a,x 7621 f539 -skipkeypadcolumnread0 7622 f539 - 7623 f539 - lda port1control 7624 f539 - cmp #7 7625 f539 - bne skipkeypadcolumnread1 7626 f539 - lda framecounter 7627 f539 - and #3 7628 f539 - asl ; x2 because keypad variables are interleaved 7629 f539 - tax 7630 f539 - lda #0 7631 f539 - sta keypadmatrix1a,x 7632 f539 - rol keypadmatrix1a,x 7633 f539 - lda INPT2 7634 f539 - cmp #$80 7635 f539 - rol keypadmatrix1a,x 7636 f539 - lda INPT3 7637 f539 - cmp #$80 7638 f539 - rol keypadmatrix1a,x 7639 f539 - lda INPT5 7640 f539 - cmp #$80 7641 f539 - rol keypadmatrix1a,x 7642 f539 - lda keypadmatrix1a,x 7643 f539 - eor #%00000111 7644 f539 - sta keypadmatrix1a,x 7645 f539 -skipkeypadcolumnread1 7646 f539 - rts 7647 f539 endif ; KEYPADSUPPORT 7648 f539 7649 f539 setportforinput 7650 f539 a5 e4 lda CTLSWAs 7651 f53b 3d 44 f5 and allpinsinputlut,x 7652 f53e 85 e4 sta CTLSWAs 7653 f540 8d 81 02 sta CTLSWA 7654 f543 60 rts 7655 f544 7656 f544 allpinsinputlut 7657 f544 0f f0 .byte.b $0F, $F0 7658 f546 7659 f546 setonebuttonmode 7660 f546 a9 06 lda #6 ; in case we're in unlocked-bios mode 7661 f548 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 7662 f54a a9 14 lda #$14 7663 f54c 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 7664 f54f a5 e5 lda CTLSWBs 7665 f551 1d 5a f5 ora thisjoy2buttonbit,x 7666 f554 85 e5 sta CTLSWBs 7667 f556 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 7668 f559 60 rts 7669 f55a 7670 f55a thisjoy2buttonbit 7671 f55a 04 10 .byte.b $04, $10 7672 f55c 7673 f55c settwobuttonmode 7674 f55c a9 06 lda #6 ; in case we're in unlocked-bios mode 7675 f55e 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 7676 f560 a9 14 lda #$14 7677 f562 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 7678 f565 a5 e5 lda CTLSWBs 7679 f567 3d 70 f5 and thisjoy2buttonmask,x 7680 f56a 85 e5 sta CTLSWBs 7681 f56c 8d 82 02 sta SWCHB 7682 f56f 60 rts 7683 f570 7684 f570 thisjoy2buttonmask 7685 f570 fb ef .byte.b $fb, $ef 7686 f572 7687 f572 ; Provided under the CC0 license. See the included LICENSE.txt for details. 7688 f572 7689 f572 START 7690 f572 start 7691 f572 7692 f572 ;******** more or less the Atari recommended startup procedure 7693 f572 7694 f572 78 sei 7695 f573 d8 cld 7696 f574 7697 f574 ifnconst NOTIALOCK 7698 f574 a9 07 lda #$07 7699 f576 - else 7700 f576 - lda #$06 7701 f576 endif 7702 f576 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 7703 f578 a9 7f lda #$7F 7704 f57a 85 3c sta CTRL ;disable DMA 7705 f57c a9 00 lda #$00 7706 f57e 85 38 sta OFFSET 7707 f580 ifnconst NOTIALOCK 7708 f580 85 01 sta INPTCTRL 7709 f582 endif 7710 f582 a2 ff ldx #$FF 7711 f584 9a txs 7712 f585 7713 f585 ;************** Clear Memory 7714 f585 7715 f585 a2 40 ldx #$40 7716 f587 a9 00 lda #$00 7717 f589 crloop1 7718 f589 95 00 sta $00,x ;Clear zero page 7719 f58b 9d 00 01 sta $100,x ;Clear page 1 7720 f58e e8 inx 7721 f58f d0 f8 bne crloop1 7722 f591 7723 f591 7724 f591 a0 00 ldy #$00 ;Clear Ram 7725 f593 a9 18 lda #$18 ;Start at $1800 7726 f595 85 81 sta $81 7727 f597 a9 00 lda #$00 7728 f599 85 80 sta $80 7729 f59b crloop3 7730 f59b a9 00 lda #$00 7731 f59d 91 80 sta ($80),y ;Store data 7732 f59f c8 iny ;Next byte 7733 f5a0 d0 f9 bne crloop3 ;Branch if not done page 7734 f5a2 e6 81 inc $81 ;Next page 7735 f5a4 a5 81 lda $81 7736 f5a6 c9 20 cmp #$20 ;End at $1FFF 7737 f5a8 d0 f1 bne crloop3 ;Branch if not 7738 f5aa 7739 f5aa a0 00 ldy #$00 ;Clear Ram 7740 f5ac a9 22 lda #$22 ;Start at $2200 7741 f5ae 85 81 sta $81 7742 f5b0 a9 00 lda #$00 7743 f5b2 85 80 sta $80 7744 f5b4 crloop4 7745 f5b4 a9 00 lda #$00 7746 f5b6 91 80 sta ($80),y ;Store data 7747 f5b8 c8 iny ;Next byte 7748 f5b9 d0 f9 bne crloop4 ;Branch if not done page 7749 f5bb e6 81 inc $81 ;Next page 7750 f5bd a5 81 lda $81 7751 f5bf c9 27 cmp #$27 ;End at $27FF 7752 f5c1 d0 f1 bne crloop4 ;Branch if not 7753 f5c3 7754 f5c3 a2 00 ldx #$00 7755 f5c5 a9 00 lda #$00 7756 f5c7 crloop5 ;Clear 2100-213F, 2000-203F 7757 f5c7 9d 00 20 sta $2000,x 7758 f5ca 9d 00 21 sta $2100,x 7759 f5cd e8 inx 7760 f5ce e0 40 cpx #$40 7761 f5d0 d0 f5 bne crloop5 7762 f5d2 7763 f5d2 85 80 sta $80 7764 f5d4 85 81 sta $81 7765 f5d6 85 82 sta $82 7766 f5d8 85 83 sta $83 7767 f5da 7768 f5da ;seed random number with hopefully-random timer value 7769 f5da a9 01 lda #1 7770 f5dc 0d 84 02 ora INTIM 7771 f5df 85 40 sta rand 7772 f5e1 7773 f5e1 ; detect the console type... 7774 f5e1 pndetectvblankstart 7775 f5e1 a5 28 lda MSTAT 7776 f5e3 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 7777 f5e5 pndetectvblankover 7778 f5e5 a5 28 lda MSTAT 7779 f5e7 30 fc bmi pndetectvblankover ; then wait for it to be over 7780 f5e9 a0 00 ldy #$00 7781 f5eb a2 00 ldx #$00 7782 f5ed pndetectvblankhappening 7783 f5ed a5 28 lda MSTAT 7784 f5ef 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 7785 f5f1 85 24 sta WSYNC 7786 f5f3 85 24 sta WSYNC 7787 f5f5 e8 inx 7788 f5f6 d0 f5 bne pndetectvblankhappening 7789 f5f8 pndetectinvblank 7790 f5f8 e0 7d cpx #125 7791 f5fa 90 02 bcc pndetecispal 7792 f5fc a0 01 ldy #$01 7793 f5fe pndetecispal 7794 f5fe 8c 09 21 sty paldetected 7795 f601 7796 f601 20 9f f4 jsr createallgamedlls 7797 f604 7798 f604 a9 18 lda #>DLLMEM 7799 f606 85 2c sta DPPH 7800 f608 a9 00 lda # 255 7969 f630 -DOUBLEBUFFEROFFSET = 255 7970 f630 else 7971 f630 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 7972 f630 endif 7973 f630 7974 f630 - ifconst EXTRADLMEMORY 7975 f630 -SECONDDLHALFSTART SET $2300 7976 f630 endif 7977 f630 7978 f630 DLPOINTH 7979 f630 DLINDEX SET 0 7980 f630 REPEAT WZONECOUNT 7981 f630 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f630 - ifconst EXTRADLMEMORY 7983 f630 - if TMPMEMADDRESS > $1FFF 7984 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f630 - else 7986 f630 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f630 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f630 - endif 7990 f630 - endif ; TMPMEMADDRESS > $1FFF 7991 f630 endif ; EXTRADLMEMORY 7992 f630 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f630 18 .byte.b >TMPMEMADDRESS 7994 f630 DLINDEX SET DLINDEX + 1 7980 f630 REPEND 7981 f630 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f631 - ifconst EXTRADLMEMORY 7983 f631 - if TMPMEMADDRESS > $1FFF 7984 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f631 - else 7986 f631 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f631 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f631 - endif 7990 f631 - endif ; TMPMEMADDRESS > $1FFF 7991 f631 endif ; EXTRADLMEMORY 7992 f631 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f631 18 .byte.b >TMPMEMADDRESS 7994 f631 DLINDEX SET DLINDEX + 1 7980 f631 REPEND 7981 f631 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f632 - ifconst EXTRADLMEMORY 7983 f632 - if TMPMEMADDRESS > $1FFF 7984 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f632 - else 7986 f632 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f632 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f632 - endif 7990 f632 - endif ; TMPMEMADDRESS > $1FFF 7991 f632 endif ; EXTRADLMEMORY 7992 f632 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f632 19 .byte.b >TMPMEMADDRESS 7994 f632 DLINDEX SET DLINDEX + 1 7980 f632 REPEND 7981 f632 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f633 - ifconst EXTRADLMEMORY 7983 f633 - if TMPMEMADDRESS > $1FFF 7984 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f633 - else 7986 f633 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f633 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f633 - endif 7990 f633 - endif ; TMPMEMADDRESS > $1FFF 7991 f633 endif ; EXTRADLMEMORY 7992 f633 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f633 19 .byte.b >TMPMEMADDRESS 7994 f633 DLINDEX SET DLINDEX + 1 7980 f633 REPEND 7981 f633 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f634 - ifconst EXTRADLMEMORY 7983 f634 - if TMPMEMADDRESS > $1FFF 7984 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f634 - else 7986 f634 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f634 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f634 - endif 7990 f634 - endif ; TMPMEMADDRESS > $1FFF 7991 f634 endif ; EXTRADLMEMORY 7992 f634 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f634 19 .byte.b >TMPMEMADDRESS 7994 f634 DLINDEX SET DLINDEX + 1 7980 f634 REPEND 7981 f634 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f635 - ifconst EXTRADLMEMORY 7983 f635 - if TMPMEMADDRESS > $1FFF 7984 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f635 - else 7986 f635 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f635 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f635 - endif 7990 f635 - endif ; TMPMEMADDRESS > $1FFF 7991 f635 endif ; EXTRADLMEMORY 7992 f635 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f635 1a .byte.b >TMPMEMADDRESS 7994 f635 DLINDEX SET DLINDEX + 1 7980 f635 REPEND 7981 f635 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f636 - ifconst EXTRADLMEMORY 7983 f636 - if TMPMEMADDRESS > $1FFF 7984 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f636 - else 7986 f636 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f636 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f636 - endif 7990 f636 - endif ; TMPMEMADDRESS > $1FFF 7991 f636 endif ; EXTRADLMEMORY 7992 f636 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f636 1a .byte.b >TMPMEMADDRESS 7994 f636 DLINDEX SET DLINDEX + 1 7980 f636 REPEND 7981 f636 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f637 - ifconst EXTRADLMEMORY 7983 f637 - if TMPMEMADDRESS > $1FFF 7984 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f637 - else 7986 f637 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f637 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f637 - endif 7990 f637 - endif ; TMPMEMADDRESS > $1FFF 7991 f637 endif ; EXTRADLMEMORY 7992 f637 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f637 1a .byte.b >TMPMEMADDRESS 7994 f637 DLINDEX SET DLINDEX + 1 7980 f637 REPEND 7981 f637 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f638 - ifconst EXTRADLMEMORY 7983 f638 - if TMPMEMADDRESS > $1FFF 7984 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f638 - else 7986 f638 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f638 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f638 - endif 7990 f638 - endif ; TMPMEMADDRESS > $1FFF 7991 f638 endif ; EXTRADLMEMORY 7992 f638 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f638 1b .byte.b >TMPMEMADDRESS 7994 f638 DLINDEX SET DLINDEX + 1 7980 f638 REPEND 7981 f638 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f639 - ifconst EXTRADLMEMORY 7983 f639 - if TMPMEMADDRESS > $1FFF 7984 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f639 - else 7986 f639 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f639 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f639 - endif 7990 f639 - endif ; TMPMEMADDRESS > $1FFF 7991 f639 endif ; EXTRADLMEMORY 7992 f639 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f639 1b .byte.b >TMPMEMADDRESS 7994 f639 DLINDEX SET DLINDEX + 1 7980 f639 REPEND 7981 f639 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f63a - ifconst EXTRADLMEMORY 7983 f63a - if TMPMEMADDRESS > $1FFF 7984 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f63a - else 7986 f63a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f63a -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f63a - endif 7990 f63a - endif ; TMPMEMADDRESS > $1FFF 7991 f63a endif ; EXTRADLMEMORY 7992 f63a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f63a 1b .byte.b >TMPMEMADDRESS 7994 f63a DLINDEX SET DLINDEX + 1 7980 f63a REPEND 7981 f63a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f63b - ifconst EXTRADLMEMORY 7983 f63b - if TMPMEMADDRESS > $1FFF 7984 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f63b - else 7986 f63b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f63b -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f63b - endif 7990 f63b - endif ; TMPMEMADDRESS > $1FFF 7991 f63b endif ; EXTRADLMEMORY 7992 f63b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f63b 1b .byte.b >TMPMEMADDRESS 7994 f63b DLINDEX SET DLINDEX + 1 7980 f63b REPEND 7981 f63b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f63c - ifconst EXTRADLMEMORY 7983 f63c - if TMPMEMADDRESS > $1FFF 7984 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f63c - else 7986 f63c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f63c -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f63c - endif 7990 f63c - endif ; TMPMEMADDRESS > $1FFF 7991 f63c endif ; EXTRADLMEMORY 7992 f63c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f63c 1c .byte.b >TMPMEMADDRESS 7994 f63c DLINDEX SET DLINDEX + 1 7980 f63c REPEND 7981 f63c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f63d - ifconst EXTRADLMEMORY 7983 f63d - if TMPMEMADDRESS > $1FFF 7984 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f63d - else 7986 f63d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f63d -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f63d - endif 7990 f63d - endif ; TMPMEMADDRESS > $1FFF 7991 f63d endif ; EXTRADLMEMORY 7992 f63d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f63d 1c .byte.b >TMPMEMADDRESS 7994 f63d DLINDEX SET DLINDEX + 1 7980 f63d REPEND 7981 f63d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f63e - ifconst EXTRADLMEMORY 7983 f63e - if TMPMEMADDRESS > $1FFF 7984 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f63e - else 7986 f63e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f63e -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f63e - endif 7990 f63e - endif ; TMPMEMADDRESS > $1FFF 7991 f63e endif ; EXTRADLMEMORY 7992 f63e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f63e 1c .byte.b >TMPMEMADDRESS 7994 f63e DLINDEX SET DLINDEX + 1 7980 f63e REPEND 7981 f63e TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f63f - ifconst EXTRADLMEMORY 7983 f63f - if TMPMEMADDRESS > $1FFF 7984 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f63f - else 7986 f63f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f63f -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f63f - endif 7990 f63f - endif ; TMPMEMADDRESS > $1FFF 7991 f63f endif ; EXTRADLMEMORY 7992 f63f ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f63f 1d .byte.b >TMPMEMADDRESS 7994 f63f DLINDEX SET DLINDEX + 1 7980 f63f REPEND 7981 f63f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f640 - ifconst EXTRADLMEMORY 7983 f640 - if TMPMEMADDRESS > $1FFF 7984 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f640 - else 7986 f640 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f640 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f640 - endif 7990 f640 - endif ; TMPMEMADDRESS > $1FFF 7991 f640 endif ; EXTRADLMEMORY 7992 f640 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f640 1d .byte.b >TMPMEMADDRESS 7994 f640 DLINDEX SET DLINDEX + 1 7980 f640 REPEND 7981 f640 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f641 - ifconst EXTRADLMEMORY 7983 f641 - if TMPMEMADDRESS > $1FFF 7984 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f641 - else 7986 f641 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f641 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f641 - endif 7990 f641 - endif ; TMPMEMADDRESS > $1FFF 7991 f641 endif ; EXTRADLMEMORY 7992 f641 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f641 1d .byte.b >TMPMEMADDRESS 7994 f641 DLINDEX SET DLINDEX + 1 7980 f641 REPEND 7981 f641 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f642 - ifconst EXTRADLMEMORY 7983 f642 - if TMPMEMADDRESS > $1FFF 7984 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f642 - else 7986 f642 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f642 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f642 - endif 7990 f642 - endif ; TMPMEMADDRESS > $1FFF 7991 f642 endif ; EXTRADLMEMORY 7992 f642 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f642 1e .byte.b >TMPMEMADDRESS 7994 f642 DLINDEX SET DLINDEX + 1 7980 f642 REPEND 7981 f642 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f643 - ifconst EXTRADLMEMORY 7983 f643 - if TMPMEMADDRESS > $1FFF 7984 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f643 - else 7986 f643 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f643 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f643 - endif 7990 f643 - endif ; TMPMEMADDRESS > $1FFF 7991 f643 endif ; EXTRADLMEMORY 7992 f643 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f643 1e .byte.b >TMPMEMADDRESS 7994 f643 DLINDEX SET DLINDEX + 1 7980 f643 REPEND 7981 f643 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f644 - ifconst EXTRADLMEMORY 7983 f644 - if TMPMEMADDRESS > $1FFF 7984 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f644 - else 7986 f644 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f644 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f644 - endif 7990 f644 - endif ; TMPMEMADDRESS > $1FFF 7991 f644 endif ; EXTRADLMEMORY 7992 f644 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f644 1e .byte.b >TMPMEMADDRESS 7994 f644 DLINDEX SET DLINDEX + 1 7980 f644 REPEND 7981 f644 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f645 - ifconst EXTRADLMEMORY 7983 f645 - if TMPMEMADDRESS > $1FFF 7984 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f645 - else 7986 f645 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f645 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f645 - endif 7990 f645 - endif ; TMPMEMADDRESS > $1FFF 7991 f645 endif ; EXTRADLMEMORY 7992 f645 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f645 1f .byte.b >TMPMEMADDRESS 7994 f645 DLINDEX SET DLINDEX + 1 7980 f645 REPEND 7981 f645 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f646 - ifconst EXTRADLMEMORY 7983 f646 - if TMPMEMADDRESS > $1FFF 7984 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f646 - else 7986 f646 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f646 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f646 - endif 7990 f646 - endif ; TMPMEMADDRESS > $1FFF 7991 f646 endif ; EXTRADLMEMORY 7992 f646 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f646 1f .byte.b >TMPMEMADDRESS 7994 f646 DLINDEX SET DLINDEX + 1 7980 f646 REPEND 7981 f646 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7982 f647 - ifconst EXTRADLMEMORY 7983 f647 - if TMPMEMADDRESS > $1FFF 7984 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7985 f647 - else 7986 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7987 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7988 f647 -SECONDDLHALFSTART SET TMPMEMADDRESS 7989 f647 - endif 7990 f647 - endif ; TMPMEMADDRESS > $1FFF 7991 f647 endif ; EXTRADLMEMORY 7992 f647 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7993 f647 1f .byte.b >TMPMEMADDRESS 7994 f647 DLINDEX SET DLINDEX + 1 7995 f648 REPEND 7996 f648 7997 f648 - ifconst EXTRADLMEMORY 7998 f648 - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 7999 f648 endif 8000 f648 8001 f648 8002 f648 DLPOINTL 8003 f648 DLINDEX SET 0 8004 f648 REPEAT WZONECOUNT 8005 f648 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8006 f648 - ifconst EXTRADLMEMORY 8007 f648 - if TMPMEMADDRESS > $1FFF 8008 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f648 - else 8010 f648 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f648 - endif 8013 f648 - endif ; TMPMEMADDRESS > $1FFF 8014 f648 endif ; EXTRADLMEMORY 8015 f648 80 .byte.b $1FFF 8008 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f649 - else 8010 f649 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f649 - endif 8013 f649 - endif ; TMPMEMADDRESS > $1FFF 8014 f649 endif ; EXTRADLMEMORY 8015 f649 d0 .byte.b $1FFF 8008 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f64a - else 8010 f64a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f64a - endif 8013 f64a - endif ; TMPMEMADDRESS > $1FFF 8014 f64a endif ; EXTRADLMEMORY 8015 f64a 20 .byte.b $1FFF 8008 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f64b - else 8010 f64b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f64b - endif 8013 f64b - endif ; TMPMEMADDRESS > $1FFF 8014 f64b endif ; EXTRADLMEMORY 8015 f64b 70 .byte.b $1FFF 8008 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f64c - else 8010 f64c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f64c - endif 8013 f64c - endif ; TMPMEMADDRESS > $1FFF 8014 f64c endif ; EXTRADLMEMORY 8015 f64c c0 .byte.b $1FFF 8008 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f64d - else 8010 f64d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f64d - endif 8013 f64d - endif ; TMPMEMADDRESS > $1FFF 8014 f64d endif ; EXTRADLMEMORY 8015 f64d 10 .byte.b $1FFF 8008 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f64e - else 8010 f64e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f64e - endif 8013 f64e - endif ; TMPMEMADDRESS > $1FFF 8014 f64e endif ; EXTRADLMEMORY 8015 f64e 60 .byte.b $1FFF 8008 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f64f - else 8010 f64f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f64f - endif 8013 f64f - endif ; TMPMEMADDRESS > $1FFF 8014 f64f endif ; EXTRADLMEMORY 8015 f64f b0 .byte.b $1FFF 8008 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f650 - else 8010 f650 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f650 - endif 8013 f650 - endif ; TMPMEMADDRESS > $1FFF 8014 f650 endif ; EXTRADLMEMORY 8015 f650 00 .byte.b $1FFF 8008 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f651 - else 8010 f651 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f651 - endif 8013 f651 - endif ; TMPMEMADDRESS > $1FFF 8014 f651 endif ; EXTRADLMEMORY 8015 f651 50 .byte.b $1FFF 8008 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f652 - else 8010 f652 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f652 - endif 8013 f652 - endif ; TMPMEMADDRESS > $1FFF 8014 f652 endif ; EXTRADLMEMORY 8015 f652 a0 .byte.b $1FFF 8008 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f653 - else 8010 f653 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f653 - endif 8013 f653 - endif ; TMPMEMADDRESS > $1FFF 8014 f653 endif ; EXTRADLMEMORY 8015 f653 f0 .byte.b $1FFF 8008 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f654 - else 8010 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f654 - endif 8013 f654 - endif ; TMPMEMADDRESS > $1FFF 8014 f654 endif ; EXTRADLMEMORY 8015 f654 40 .byte.b $1FFF 8008 f655 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f655 - else 8010 f655 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f655 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f655 - endif 8013 f655 - endif ; TMPMEMADDRESS > $1FFF 8014 f655 endif ; EXTRADLMEMORY 8015 f655 90 .byte.b $1FFF 8008 f656 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f656 - else 8010 f656 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f656 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f656 - endif 8013 f656 - endif ; TMPMEMADDRESS > $1FFF 8014 f656 endif ; EXTRADLMEMORY 8015 f656 e0 .byte.b $1FFF 8008 f657 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f657 - else 8010 f657 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f657 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f657 - endif 8013 f657 - endif ; TMPMEMADDRESS > $1FFF 8014 f657 endif ; EXTRADLMEMORY 8015 f657 30 .byte.b $1FFF 8008 f658 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f658 - else 8010 f658 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f658 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f658 - endif 8013 f658 - endif ; TMPMEMADDRESS > $1FFF 8014 f658 endif ; EXTRADLMEMORY 8015 f658 80 .byte.b $1FFF 8008 f659 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f659 - else 8010 f659 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f659 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f659 - endif 8013 f659 - endif ; TMPMEMADDRESS > $1FFF 8014 f659 endif ; EXTRADLMEMORY 8015 f659 d0 .byte.b $1FFF 8008 f65a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f65a - else 8010 f65a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f65a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f65a - endif 8013 f65a - endif ; TMPMEMADDRESS > $1FFF 8014 f65a endif ; EXTRADLMEMORY 8015 f65a 20 .byte.b $1FFF 8008 f65b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f65b - else 8010 f65b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f65b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f65b - endif 8013 f65b - endif ; TMPMEMADDRESS > $1FFF 8014 f65b endif ; EXTRADLMEMORY 8015 f65b 70 .byte.b $1FFF 8008 f65c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f65c - else 8010 f65c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f65c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f65c - endif 8013 f65c - endif ; TMPMEMADDRESS > $1FFF 8014 f65c endif ; EXTRADLMEMORY 8015 f65c c0 .byte.b $1FFF 8008 f65d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f65d - else 8010 f65d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f65d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f65d - endif 8013 f65d - endif ; TMPMEMADDRESS > $1FFF 8014 f65d endif ; EXTRADLMEMORY 8015 f65d 10 .byte.b $1FFF 8008 f65e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f65e - else 8010 f65e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f65e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f65e - endif 8013 f65e - endif ; TMPMEMADDRESS > $1FFF 8014 f65e endif ; EXTRADLMEMORY 8015 f65e 60 .byte.b $1FFF 8008 f65f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8009 f65f - else 8010 f65f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8011 f65f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8012 f65f - endif 8013 f65f - endif ; TMPMEMADDRESS > $1FFF 8014 f65f endif ; EXTRADLMEMORY 8015 f65f b0 .byte.b $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 18 80 ZONE0ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 19 20 ZONE2ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 19 70 ZONE3ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8021 f660 REPEND 8022 f660 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 8023 f660 - ifconst EXTRADLMEMORY 8024 f660 - if TMPMEMADDRESS > $1FFF 8025 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8026 f660 - else 8027 f660 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 8028 f660 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 8029 f660 - endif 8030 f660 - endif ; TMPMEMADDRESS > $1FFF 8031 f660 endif ; EXTRADLMEMORY 8032 f660 8033 f660 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 8034 f660 8035 f660 DLINDEX SET DLINDEX + 1 8036 f660 REPEND 8037 f660 8038 f660 $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 8039 f660 echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 8040 f660 8041 f660 DLHEIGHT 8042 f660 REPEAT WZONECOUNT 8043 f660 07 .byte.b (WZONEHEIGHT-1) 8042 f660 REPEND 8043 f661 07 .byte.b (WZONEHEIGHT-1) 8042 f661 REPEND 8043 f662 07 .byte.b (WZONEHEIGHT-1) 8042 f662 REPEND 8043 f663 07 .byte.b (WZONEHEIGHT-1) 8042 f663 REPEND 8043 f664 07 .byte.b (WZONEHEIGHT-1) 8042 f664 REPEND 8043 f665 07 .byte.b (WZONEHEIGHT-1) 8042 f665 REPEND 8043 f666 07 .byte.b (WZONEHEIGHT-1) 8042 f666 REPEND 8043 f667 07 .byte.b (WZONEHEIGHT-1) 8042 f667 REPEND 8043 f668 07 .byte.b (WZONEHEIGHT-1) 8042 f668 REPEND 8043 f669 07 .byte.b (WZONEHEIGHT-1) 8042 f669 REPEND 8043 f66a 07 .byte.b (WZONEHEIGHT-1) 8042 f66a REPEND 8043 f66b 07 .byte.b (WZONEHEIGHT-1) 8042 f66b REPEND 8043 f66c 07 .byte.b (WZONEHEIGHT-1) 8042 f66c REPEND 8043 f66d 07 .byte.b (WZONEHEIGHT-1) 8042 f66d REPEND 8043 f66e 07 .byte.b (WZONEHEIGHT-1) 8042 f66e REPEND 8043 f66f 07 .byte.b (WZONEHEIGHT-1) 8042 f66f REPEND 8043 f670 07 .byte.b (WZONEHEIGHT-1) 8042 f670 REPEND 8043 f671 07 .byte.b (WZONEHEIGHT-1) 8042 f671 REPEND 8043 f672 07 .byte.b (WZONEHEIGHT-1) 8042 f672 REPEND 8043 f673 07 .byte.b (WZONEHEIGHT-1) 8042 f673 REPEND 8043 f674 07 .byte.b (WZONEHEIGHT-1) 8042 f674 REPEND 8043 f675 07 .byte.b (WZONEHEIGHT-1) 8042 f675 REPEND 8043 f676 07 .byte.b (WZONEHEIGHT-1) 8042 f676 REPEND 8043 f677 07 .byte.b (WZONEHEIGHT-1) 8044 f678 REPEND 8045 f678 8046 f678 ; Provided under the CC0 license. See the included LICENSE.txt for details. 8047 f678 8048 f678 ; a simple guard, than ensures the 7800basic code hasn't 8049 f678 ; spilled into the encryption area... 2310 bytes left in the 7800basic reserved area. 8050 f678 echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 8051 f678 - if (*>$FF7D) 8052 f678 - ERR ; abort the assembly 8053 f678 endif 8054 f678 ; Provided under the CC0 license. See the included LICENSE.txt for details. 8055 f678 8056 f678 - ifconst DEV 8057 f678 - ifnconst ZONEHEIGHT 8058 f678 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 8059 f678 - else 8060 f678 - if ZONEHEIGHT = 8 8061 f678 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 8062 f678 - else 8063 f678 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 8064 f678 - endif 8065 f678 - endif 8066 f678 endif 8067 f678 8068 f678 ; FF7E/FF7F contains the 7800basic crc checksum word 8069 f678 8070 f678 ; FF80 - FFF7 contains the 7800 encryption key 8071 f678 8072 f678 ifnconst bankswitchmode 8073 fff8 ORG $FFF8 8074 fff8 - else 8075 fff8 - ifconst ROM128K 8076 fff8 - ORG $27FF8 8077 fff8 - RORG $FFF8 8078 fff8 - endif 8079 fff8 - ifconst ROM144K 8080 fff8 - ORG $27FF8 8081 fff8 - RORG $FFF8 8082 fff8 - endif 8083 fff8 - ifconst ROM256K 8084 fff8 - ORG $47FF8 8085 fff8 - RORG $FFF8 8086 fff8 - endif 8087 fff8 - ifconst ROM272K 8088 fff8 - ORG $47FF8 8089 fff8 - RORG $FFF8 8090 fff8 - endif 8091 fff8 - ifconst ROM512K 8092 fff8 - ORG $87FF8 8093 fff8 - RORG $FFF8 8094 fff8 - endif 8095 fff8 - ifconst ROM528K 8096 fff8 - ORG $87FF8 8097 fff8 - RORG $FFF8 8098 fff8 - endif 8099 fff8 endif 8100 fff8 8101 fff8 8102 fff8 ff .byte.b $FF ; region verification. $FF=all regions 8103 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 8104 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 8105 fffa 8106 fffa ;Vectors 8107 fffa 00 f0 .word.w NMI 8108 fffc 72 f5 .word.w START 8109 fffe 67 f0 .word.w IRQ 8110 10000