------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_sprani.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_explosion_10_tallsprite_01_mode = $00 4 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_01_width_twoscompliment = $00 5 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_01_width = $00 6 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_mode = $00 7 10000 ???? 00 0c vertical_shooting_explosion_10_tallsprite_00_width_twoscompliment = $0c 8 10000 ???? 00 14 vertical_shooting_explosion_10_tallsprite_00_width = $14 9 10000 ???? 00 00 vertical_shooting_explosion_10_mode = $00 10 10000 ???? 00 0c vertical_shooting_explosion_10_width_twoscompliment = $0c 11 10000 ???? 00 14 vertical_shooting_explosion_10_width = $14 12 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_mode = $00 13 10000 ???? 00 0c vertical_shooting_explosion_09_tallsprite_00_width_twoscompliment = $0c 14 10000 ???? 00 14 vertical_shooting_explosion_09_tallsprite_00_width = $14 15 10000 ???? 00 00 vertical_shooting_explosion_09_mode = $00 16 10000 ???? 00 0c vertical_shooting_explosion_09_width_twoscompliment = $0c 17 10000 ???? 00 14 vertical_shooting_explosion_09_width = $14 18 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_mode = $00 19 10000 ???? 00 0c vertical_shooting_explosion_08_tallsprite_00_width_twoscompliment = $0c 20 10000 ???? 00 14 vertical_shooting_explosion_08_tallsprite_00_width = $14 21 10000 ???? 00 00 vertical_shooting_explosion_08_mode = $00 22 10000 ???? 00 0c vertical_shooting_explosion_08_width_twoscompliment = $0c 23 10000 ???? 00 14 vertical_shooting_explosion_08_width = $14 24 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_mode = $00 25 10000 ???? 00 0c vertical_shooting_explosion_07_tallsprite_00_width_twoscompliment = $0c 26 10000 ???? 00 14 vertical_shooting_explosion_07_tallsprite_00_width = $14 27 10000 ???? 00 00 vertical_shooting_explosion_07_mode = $00 28 10000 ???? 00 0c vertical_shooting_explosion_07_width_twoscompliment = $0c 29 10000 ???? 00 14 vertical_shooting_explosion_07_width = $14 30 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_mode = $00 31 10000 ???? 00 1e vertical_shooting_explosion_06_tallsprite_00_width_twoscompliment = $1e 32 10000 ???? 00 02 vertical_shooting_explosion_06_tallsprite_00_width = $02 33 10000 ???? 00 00 vertical_shooting_explosion_06_mode = $00 34 10000 ???? 00 1e vertical_shooting_explosion_06_width_twoscompliment = $1e 35 10000 ???? 00 02 vertical_shooting_explosion_06_width = $02 36 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_mode = $00 37 10000 ???? 00 1e vertical_shooting_explosion_05_tallsprite_00_width_twoscompliment = $1e 38 10000 ???? 00 02 vertical_shooting_explosion_05_tallsprite_00_width = $02 39 10000 ???? 00 00 vertical_shooting_explosion_05_mode = $00 40 10000 ???? 00 1e vertical_shooting_explosion_05_width_twoscompliment = $1e 41 10000 ???? 00 02 vertical_shooting_explosion_05_width = $02 42 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_mode = $00 43 10000 ???? 00 1e vertical_shooting_explosion_04_tallsprite_00_width_twoscompliment = $1e 44 10000 ???? 00 02 vertical_shooting_explosion_04_tallsprite_00_width = $02 45 10000 ???? 00 00 vertical_shooting_explosion_04_mode = $00 46 10000 ???? 00 1e vertical_shooting_explosion_04_width_twoscompliment = $1e 47 10000 ???? 00 02 vertical_shooting_explosion_04_width = $02 48 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_mode = $00 49 10000 ???? 00 1e vertical_shooting_explosion_03_tallsprite_00_width_twoscompliment = $1e 50 10000 ???? 00 02 vertical_shooting_explosion_03_tallsprite_00_width = $02 51 10000 ???? 00 00 vertical_shooting_explosion_03_mode = $00 52 10000 ???? 00 1e vertical_shooting_explosion_03_width_twoscompliment = $1e 53 10000 ???? 00 02 vertical_shooting_explosion_03_width = $02 54 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_mode = $00 55 10000 ???? 00 1e vertical_shooting_explosion_02_tallsprite_00_width_twoscompliment = $1e 56 10000 ???? 00 02 vertical_shooting_explosion_02_tallsprite_00_width = $02 57 10000 ???? 00 00 vertical_shooting_explosion_02_mode = $00 58 10000 ???? 00 1e vertical_shooting_explosion_02_width_twoscompliment = $1e 59 10000 ???? 00 02 vertical_shooting_explosion_02_width = $02 60 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_mode = $00 61 10000 ???? 00 1e vertical_shooting_explosion_01_tallsprite_00_width_twoscompliment = $1e 62 10000 ???? 00 02 vertical_shooting_explosion_01_tallsprite_00_width = $02 63 10000 ???? 00 00 vertical_shooting_explosion_01_mode = $00 64 10000 ???? 00 1e vertical_shooting_explosion_01_width_twoscompliment = $1e 65 10000 ???? 00 02 vertical_shooting_explosion_01_width = $02 66 10000 ???? 00 00 vertical_shooting_1up_mode = $00 67 10000 ???? 00 1e vertical_shooting_1up_width_twoscompliment = $1e 68 10000 ???? 00 02 vertical_shooting_1up_width = $02 69 10000 ???? 00 00 vertical_shooting_score_10_digits_mode = $00 70 10000 ???? 00 16 vertical_shooting_score_10_digits_width_twoscompliment = $16 71 10000 ???? 00 0a vertical_shooting_score_10_digits_width = $0a 72 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_mode = $00 73 10000 ???? 00 1e vertical_shooting_enemy01_tallsprite_00_width_twoscompliment = $1e 74 10000 ???? 00 02 vertical_shooting_enemy01_tallsprite_00_width = $02 75 10000 ???? 00 00 vertical_shooting_enemy01_mode = $00 76 10000 ???? 00 1e vertical_shooting_enemy01_width_twoscompliment = $1e 77 10000 ???? 00 02 vertical_shooting_enemy01_width = $02 78 10000 ???? 00 00 vertical_shooting_powerup_mode = $00 79 10000 ???? 00 1e vertical_shooting_powerup_width_twoscompliment = $1e 80 10000 ???? 00 02 vertical_shooting_powerup_width = $02 81 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 82 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 83 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 84 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 85 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 86 10000 ???? 00 01 vertical_shooting_bullet_width = $01 87 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 88 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 89 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 90 10000 ???? 00 00 vertical_shooting_ship_mode = $00 91 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 92 10000 ???? 00 02 vertical_shooting_ship_width = $02 93 10000 ???? 00 00 vertical_shooting_font_mode = $00 94 10000 ???? 00 13 vertical_shooting_font_width_twoscompliment = $13 95 10000 ???? 00 2d vertical_shooting_font_width = $2d 96 10000 ???? 00 00 atascii_mode = $00 97 10000 ???? 00 0a atascii_width_twoscompliment = $0a 98 10000 ???? 00 f6 atascii_width = $f6 99 10000 ???? 00 90 sfx_explosion_length = .skipL0213-sfx_explosion 100 10000 ???? 101 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0212-sfx_pulsecannon 102 10000 ???? 103 10000 ???? 00 36 sfx_bling_length = .skipL0211-sfx_bling 104 10000 ???? 105 10000 ???? 00 33 vertical_shooting_explosion_10_tallsprite_00_color3 = $33 106 10000 ???? 00 2b vertical_shooting_explosion_10_tallsprite_00_color2 = $2b 107 10000 ???? 00 36 vertical_shooting_explosion_10_tallsprite_00_color1 = $36 108 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_color0 = $00 109 10000 ???? 00 33 vertical_shooting_explosion_10_color3 = $33 110 10000 ???? 00 2b vertical_shooting_explosion_10_color2 = $2b 111 10000 ???? 00 36 vertical_shooting_explosion_10_color1 = $36 112 10000 ???? 00 00 vertical_shooting_explosion_10_color0 = $00 113 10000 ???? 00 33 vertical_shooting_explosion_09_tallsprite_00_color3 = $33 114 10000 ???? 00 2b vertical_shooting_explosion_09_tallsprite_00_color2 = $2b 115 10000 ???? 00 36 vertical_shooting_explosion_09_tallsprite_00_color1 = $36 116 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_color0 = $00 117 10000 ???? 00 33 vertical_shooting_explosion_09_color3 = $33 118 10000 ???? 00 2b vertical_shooting_explosion_09_color2 = $2b 119 10000 ???? 00 36 vertical_shooting_explosion_09_color1 = $36 120 10000 ???? 00 00 vertical_shooting_explosion_09_color0 = $00 121 10000 ???? 00 33 vertical_shooting_explosion_08_tallsprite_00_color3 = $33 122 10000 ???? 00 2b vertical_shooting_explosion_08_tallsprite_00_color2 = $2b 123 10000 ???? 00 36 vertical_shooting_explosion_08_tallsprite_00_color1 = $36 124 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_color0 = $00 125 10000 ???? 00 33 vertical_shooting_explosion_08_color3 = $33 126 10000 ???? 00 2b vertical_shooting_explosion_08_color2 = $2b 127 10000 ???? 00 36 vertical_shooting_explosion_08_color1 = $36 128 10000 ???? 00 00 vertical_shooting_explosion_08_color0 = $00 129 10000 ???? 00 33 vertical_shooting_explosion_07_tallsprite_00_color3 = $33 130 10000 ???? 00 2b vertical_shooting_explosion_07_tallsprite_00_color2 = $2b 131 10000 ???? 00 36 vertical_shooting_explosion_07_tallsprite_00_color1 = $36 132 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_color0 = $00 133 10000 ???? 00 33 vertical_shooting_explosion_07_color3 = $33 134 10000 ???? 00 2b vertical_shooting_explosion_07_color2 = $2b 135 10000 ???? 00 36 vertical_shooting_explosion_07_color1 = $36 136 10000 ???? 00 00 vertical_shooting_explosion_07_color0 = $00 137 10000 ???? 00 33 vertical_shooting_explosion_06_tallsprite_00_color3 = $33 138 10000 ???? 00 2b vertical_shooting_explosion_06_tallsprite_00_color2 = $2b 139 10000 ???? 00 36 vertical_shooting_explosion_06_tallsprite_00_color1 = $36 140 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_color0 = $00 141 10000 ???? 00 33 vertical_shooting_explosion_06_color3 = $33 142 10000 ???? 00 2b vertical_shooting_explosion_06_color2 = $2b 143 10000 ???? 00 36 vertical_shooting_explosion_06_color1 = $36 144 10000 ???? 00 00 vertical_shooting_explosion_06_color0 = $00 145 10000 ???? 00 33 vertical_shooting_explosion_05_tallsprite_00_color3 = $33 146 10000 ???? 00 2b vertical_shooting_explosion_05_tallsprite_00_color2 = $2b 147 10000 ???? 00 36 vertical_shooting_explosion_05_tallsprite_00_color1 = $36 148 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_color0 = $00 149 10000 ???? 00 33 vertical_shooting_explosion_05_color3 = $33 150 10000 ???? 00 2b vertical_shooting_explosion_05_color2 = $2b 151 10000 ???? 00 36 vertical_shooting_explosion_05_color1 = $36 152 10000 ???? 00 00 vertical_shooting_explosion_05_color0 = $00 153 10000 ???? 00 33 vertical_shooting_explosion_04_tallsprite_00_color3 = $33 154 10000 ???? 00 36 vertical_shooting_explosion_04_tallsprite_00_color2 = $36 155 10000 ???? 00 2b vertical_shooting_explosion_04_tallsprite_00_color1 = $2b 156 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_color0 = $00 157 10000 ???? 00 33 vertical_shooting_explosion_04_color3 = $33 158 10000 ???? 00 36 vertical_shooting_explosion_04_color2 = $36 159 10000 ???? 00 2b vertical_shooting_explosion_04_color1 = $2b 160 10000 ???? 00 00 vertical_shooting_explosion_04_color0 = $00 161 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color3 = 0 162 10000 ???? 00 36 vertical_shooting_explosion_03_tallsprite_00_color2 = $36 163 10000 ???? 00 2b vertical_shooting_explosion_03_tallsprite_00_color1 = $2b 164 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color0 = $00 165 10000 ???? 00 00 vertical_shooting_explosion_03_color3 = 0 166 10000 ???? 00 36 vertical_shooting_explosion_03_color2 = $36 167 10000 ???? 00 2b vertical_shooting_explosion_03_color1 = $2b 168 10000 ???? 00 00 vertical_shooting_explosion_03_color0 = $00 169 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color3 = 0 170 10000 ???? 00 36 vertical_shooting_explosion_02_tallsprite_00_color2 = $36 171 10000 ???? 00 2b vertical_shooting_explosion_02_tallsprite_00_color1 = $2b 172 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color0 = $00 173 10000 ???? 00 00 vertical_shooting_explosion_02_color3 = 0 174 10000 ???? 00 36 vertical_shooting_explosion_02_color2 = $36 175 10000 ???? 00 2b vertical_shooting_explosion_02_color1 = $2b 176 10000 ???? 00 00 vertical_shooting_explosion_02_color0 = $00 177 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color3 = 0 178 10000 ???? 00 2b vertical_shooting_explosion_01_tallsprite_00_color2 = $2b 179 10000 ???? 00 36 vertical_shooting_explosion_01_tallsprite_00_color1 = $36 180 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color0 = $00 181 10000 ???? 00 00 vertical_shooting_explosion_01_color3 = 0 182 10000 ???? 00 2b vertical_shooting_explosion_01_color2 = $2b 183 10000 ???? 00 36 vertical_shooting_explosion_01_color1 = $36 184 10000 ???? 00 00 vertical_shooting_explosion_01_color0 = $00 185 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 186 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 187 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 188 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 189 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 190 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 191 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 192 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 193 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 194 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 195 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 196 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 197 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 198 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 199 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 200 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 201 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 202 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 203 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 204 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 205 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 206 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 207 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 208 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 209 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 210 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 211 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 212 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 213 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 214 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 215 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 216 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 217 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 218 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 219 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 220 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 221 10000 ???? 00 0f vertical_shooting_font_color1 = $0f 222 10000 ???? 00 00 vertical_shooting_font_color0 = $00 223 10000 ???? 00 00 atascii_color1 = $00 224 10000 ???? 00 0f atascii_color0 = $0f 225 10000 ???? 01 64 lives = var36 226 10000 ???? 227 10000 ???? 01 63 explosion_aniframe = var35 228 10000 ???? 229 10000 ???? 01 62 extra_shipFlag = var34 230 10000 ???? 231 10000 ???? 01 61 extra_shipY = var33 232 10000 ???? 233 10000 ???? 01 60 extra_shipX = var32 234 10000 ???? 235 10000 ???? 01 5f gameover_flag = var31 236 10000 ???? 237 10000 ???? 01 5e enemy01_speed = var30 238 10000 ???? 239 10000 ???? 01 5d rMovement6 = var29 240 10000 ???? 241 10000 ???? 01 5c rMovement5 = var28 242 10000 ???? 243 10000 ???? 01 5b rMovement4 = var27 244 10000 ???? 245 10000 ???? 01 5a rMovement3 = var26 246 10000 ???? 247 10000 ???? 01 59 enemy01_Flag = var25 248 10000 ???? 249 10000 ???? 01 58 enemy01_Y = var24 250 10000 ???? 251 10000 ???? 01 57 enemy01_X = var23 252 10000 ???? 253 10000 ???? 01 56 enemy_shotSlowdown = var22 254 10000 ???? 255 10000 ???? 01 55 bulletSlowdown = var21 256 10000 ???? 257 10000 ???? 01 54 power_upSlowdown = var20 258 10000 ???? 259 10000 ???? 01 53 rMovement2 = var19 260 10000 ???? 261 10000 ???? 01 52 power_upFlag = var18 262 10000 ???? 263 10000 ???? 01 51 power_upY = var17 264 10000 ???? 265 10000 ???? 01 50 power_upX = var16 266 10000 ???? 267 10000 ???? 01 4f rDirection = var15 268 10000 ???? 269 10000 ???? 01 4e rMovement1 = var14 270 10000 ???? 271 10000 ???? 01 4d playerFlag = var13 272 10000 ???? 273 10000 ???? 01 4c enemy_shotFlag = var12 274 10000 ???? 275 10000 ???? 01 4b enemy_shotY = var11 276 10000 ???? 277 10000 ???? 01 4a enemy_shotX = var10 278 10000 ???? 279 10000 ???? 01 49 bulletY = var9 280 10000 ???? 281 10000 ???? 01 48 bulletX = var8 282 10000 ???? 283 10000 ???? 01 47 joyposright = var7 284 10000 ???? 285 10000 ???? 01 46 joyposleft = var6 286 10000 ???? 287 10000 ???? 01 45 joyposdown = var5 288 10000 ???? 289 10000 ???? 01 44 joyposup = var4 290 10000 ???? 291 10000 ???? 01 43 fire_debounce = var3 292 10000 ???? 293 10000 ???? 01 42 playerY = var2 294 10000 ???? 295 10000 ???? 01 41 playerX = var1 296 10000 ???? 297 10000 ???? 01 40 frameCounter = var0 298 10000 ???? 299 10000 ???? 00 01 DOUBLEWIDE = 1 300 10000 ???? 00 01 collisionwrap = 1 301 10000 ???? 00 01 NTSC = 1 302 10000 ???? 00 c0 SCREENHEIGHT = 192 303 10000 ???? 00 01 CHECKOVERWRITE = 1 304 10000 ???? 00 08 ZONEHEIGHT = 8 305 10000 ???? 00 01 ROM16K = 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 CANARRYOFF 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 CANARRYOFF 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_sprani.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_explosion_10_tallsprite_01_mode = $00 4 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_01_width_twoscompliment = $00 5 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_01_width = $00 6 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_mode = $00 7 10000 ???? 00 0c vertical_shooting_explosion_10_tallsprite_00_width_twoscompliment = $0c 8 10000 ???? 00 14 vertical_shooting_explosion_10_tallsprite_00_width = $14 9 10000 ???? 00 00 vertical_shooting_explosion_10_mode = $00 10 10000 ???? 00 0c vertical_shooting_explosion_10_width_twoscompliment = $0c 11 10000 ???? 00 14 vertical_shooting_explosion_10_width = $14 12 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_mode = $00 13 10000 ???? 00 0c vertical_shooting_explosion_09_tallsprite_00_width_twoscompliment = $0c 14 10000 ???? 00 14 vertical_shooting_explosion_09_tallsprite_00_width = $14 15 10000 ???? 00 00 vertical_shooting_explosion_09_mode = $00 16 10000 ???? 00 0c vertical_shooting_explosion_09_width_twoscompliment = $0c 17 10000 ???? 00 14 vertical_shooting_explosion_09_width = $14 18 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_mode = $00 19 10000 ???? 00 0c vertical_shooting_explosion_08_tallsprite_00_width_twoscompliment = $0c 20 10000 ???? 00 14 vertical_shooting_explosion_08_tallsprite_00_width = $14 21 10000 ???? 00 00 vertical_shooting_explosion_08_mode = $00 22 10000 ???? 00 0c vertical_shooting_explosion_08_width_twoscompliment = $0c 23 10000 ???? 00 14 vertical_shooting_explosion_08_width = $14 24 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_mode = $00 25 10000 ???? 00 0c vertical_shooting_explosion_07_tallsprite_00_width_twoscompliment = $0c 26 10000 ???? 00 14 vertical_shooting_explosion_07_tallsprite_00_width = $14 27 10000 ???? 00 00 vertical_shooting_explosion_07_mode = $00 28 10000 ???? 00 0c vertical_shooting_explosion_07_width_twoscompliment = $0c 29 10000 ???? 00 14 vertical_shooting_explosion_07_width = $14 30 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_mode = $00 31 10000 ???? 00 1e vertical_shooting_explosion_06_tallsprite_00_width_twoscompliment = $1e 32 10000 ???? 00 02 vertical_shooting_explosion_06_tallsprite_00_width = $02 33 10000 ???? 00 00 vertical_shooting_explosion_06_mode = $00 34 10000 ???? 00 1e vertical_shooting_explosion_06_width_twoscompliment = $1e 35 10000 ???? 00 02 vertical_shooting_explosion_06_width = $02 36 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_mode = $00 37 10000 ???? 00 1e vertical_shooting_explosion_05_tallsprite_00_width_twoscompliment = $1e 38 10000 ???? 00 02 vertical_shooting_explosion_05_tallsprite_00_width = $02 39 10000 ???? 00 00 vertical_shooting_explosion_05_mode = $00 40 10000 ???? 00 1e vertical_shooting_explosion_05_width_twoscompliment = $1e 41 10000 ???? 00 02 vertical_shooting_explosion_05_width = $02 42 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_mode = $00 43 10000 ???? 00 1e vertical_shooting_explosion_04_tallsprite_00_width_twoscompliment = $1e 44 10000 ???? 00 02 vertical_shooting_explosion_04_tallsprite_00_width = $02 45 10000 ???? 00 00 vertical_shooting_explosion_04_mode = $00 46 10000 ???? 00 1e vertical_shooting_explosion_04_width_twoscompliment = $1e 47 10000 ???? 00 02 vertical_shooting_explosion_04_width = $02 48 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_mode = $00 49 10000 ???? 00 1e vertical_shooting_explosion_03_tallsprite_00_width_twoscompliment = $1e 50 10000 ???? 00 02 vertical_shooting_explosion_03_tallsprite_00_width = $02 51 10000 ???? 00 00 vertical_shooting_explosion_03_mode = $00 52 10000 ???? 00 1e vertical_shooting_explosion_03_width_twoscompliment = $1e 53 10000 ???? 00 02 vertical_shooting_explosion_03_width = $02 54 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_mode = $00 55 10000 ???? 00 1e vertical_shooting_explosion_02_tallsprite_00_width_twoscompliment = $1e 56 10000 ???? 00 02 vertical_shooting_explosion_02_tallsprite_00_width = $02 57 10000 ???? 00 00 vertical_shooting_explosion_02_mode = $00 58 10000 ???? 00 1e vertical_shooting_explosion_02_width_twoscompliment = $1e 59 10000 ???? 00 02 vertical_shooting_explosion_02_width = $02 60 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_mode = $00 61 10000 ???? 00 1e vertical_shooting_explosion_01_tallsprite_00_width_twoscompliment = $1e 62 10000 ???? 00 02 vertical_shooting_explosion_01_tallsprite_00_width = $02 63 10000 ???? 00 00 vertical_shooting_explosion_01_mode = $00 64 10000 ???? 00 1e vertical_shooting_explosion_01_width_twoscompliment = $1e 65 10000 ???? 00 02 vertical_shooting_explosion_01_width = $02 66 10000 ???? 00 00 vertical_shooting_1up_mode = $00 67 10000 ???? 00 1e vertical_shooting_1up_width_twoscompliment = $1e 68 10000 ???? 00 02 vertical_shooting_1up_width = $02 69 10000 ???? 00 00 vertical_shooting_score_10_digits_mode = $00 70 10000 ???? 00 16 vertical_shooting_score_10_digits_width_twoscompliment = $16 71 10000 ???? 00 0a vertical_shooting_score_10_digits_width = $0a 72 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_mode = $00 73 10000 ???? 00 1e vertical_shooting_enemy01_tallsprite_00_width_twoscompliment = $1e 74 10000 ???? 00 02 vertical_shooting_enemy01_tallsprite_00_width = $02 75 10000 ???? 00 00 vertical_shooting_enemy01_mode = $00 76 10000 ???? 00 1e vertical_shooting_enemy01_width_twoscompliment = $1e 77 10000 ???? 00 02 vertical_shooting_enemy01_width = $02 78 10000 ???? 00 00 vertical_shooting_powerup_mode = $00 79 10000 ???? 00 1e vertical_shooting_powerup_width_twoscompliment = $1e 80 10000 ???? 00 02 vertical_shooting_powerup_width = $02 81 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 82 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 83 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 84 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 85 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 86 10000 ???? 00 01 vertical_shooting_bullet_width = $01 87 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 88 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 89 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 90 10000 ???? 00 00 vertical_shooting_ship_mode = $00 91 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 92 10000 ???? 00 02 vertical_shooting_ship_width = $02 93 10000 ???? 00 00 vertical_shooting_font_mode = $00 94 10000 ???? 00 13 vertical_shooting_font_width_twoscompliment = $13 95 10000 ???? 00 2d vertical_shooting_font_width = $2d 96 10000 ???? 00 00 atascii_mode = $00 97 10000 ???? 00 0a atascii_width_twoscompliment = $0a 98 10000 ???? 00 f6 atascii_width = $f6 99 10000 ???? 00 90 sfx_explosion_length = .skipL0213-sfx_explosion 100 10000 ???? 101 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0212-sfx_pulsecannon 102 10000 ???? 103 10000 ???? 00 36 sfx_bling_length = .skipL0211-sfx_bling 104 10000 ???? 105 10000 ???? 00 33 vertical_shooting_explosion_10_tallsprite_00_color3 = $33 106 10000 ???? 00 2b vertical_shooting_explosion_10_tallsprite_00_color2 = $2b 107 10000 ???? 00 36 vertical_shooting_explosion_10_tallsprite_00_color1 = $36 108 10000 ???? 00 00 vertical_shooting_explosion_10_tallsprite_00_color0 = $00 109 10000 ???? 00 33 vertical_shooting_explosion_10_color3 = $33 110 10000 ???? 00 2b vertical_shooting_explosion_10_color2 = $2b 111 10000 ???? 00 36 vertical_shooting_explosion_10_color1 = $36 112 10000 ???? 00 00 vertical_shooting_explosion_10_color0 = $00 113 10000 ???? 00 33 vertical_shooting_explosion_09_tallsprite_00_color3 = $33 114 10000 ???? 00 2b vertical_shooting_explosion_09_tallsprite_00_color2 = $2b 115 10000 ???? 00 36 vertical_shooting_explosion_09_tallsprite_00_color1 = $36 116 10000 ???? 00 00 vertical_shooting_explosion_09_tallsprite_00_color0 = $00 117 10000 ???? 00 33 vertical_shooting_explosion_09_color3 = $33 118 10000 ???? 00 2b vertical_shooting_explosion_09_color2 = $2b 119 10000 ???? 00 36 vertical_shooting_explosion_09_color1 = $36 120 10000 ???? 00 00 vertical_shooting_explosion_09_color0 = $00 121 10000 ???? 00 33 vertical_shooting_explosion_08_tallsprite_00_color3 = $33 122 10000 ???? 00 2b vertical_shooting_explosion_08_tallsprite_00_color2 = $2b 123 10000 ???? 00 36 vertical_shooting_explosion_08_tallsprite_00_color1 = $36 124 10000 ???? 00 00 vertical_shooting_explosion_08_tallsprite_00_color0 = $00 125 10000 ???? 00 33 vertical_shooting_explosion_08_color3 = $33 126 10000 ???? 00 2b vertical_shooting_explosion_08_color2 = $2b 127 10000 ???? 00 36 vertical_shooting_explosion_08_color1 = $36 128 10000 ???? 00 00 vertical_shooting_explosion_08_color0 = $00 129 10000 ???? 00 33 vertical_shooting_explosion_07_tallsprite_00_color3 = $33 130 10000 ???? 00 2b vertical_shooting_explosion_07_tallsprite_00_color2 = $2b 131 10000 ???? 00 36 vertical_shooting_explosion_07_tallsprite_00_color1 = $36 132 10000 ???? 00 00 vertical_shooting_explosion_07_tallsprite_00_color0 = $00 133 10000 ???? 00 33 vertical_shooting_explosion_07_color3 = $33 134 10000 ???? 00 2b vertical_shooting_explosion_07_color2 = $2b 135 10000 ???? 00 36 vertical_shooting_explosion_07_color1 = $36 136 10000 ???? 00 00 vertical_shooting_explosion_07_color0 = $00 137 10000 ???? 00 33 vertical_shooting_explosion_06_tallsprite_00_color3 = $33 138 10000 ???? 00 2b vertical_shooting_explosion_06_tallsprite_00_color2 = $2b 139 10000 ???? 00 36 vertical_shooting_explosion_06_tallsprite_00_color1 = $36 140 10000 ???? 00 00 vertical_shooting_explosion_06_tallsprite_00_color0 = $00 141 10000 ???? 00 33 vertical_shooting_explosion_06_color3 = $33 142 10000 ???? 00 2b vertical_shooting_explosion_06_color2 = $2b 143 10000 ???? 00 36 vertical_shooting_explosion_06_color1 = $36 144 10000 ???? 00 00 vertical_shooting_explosion_06_color0 = $00 145 10000 ???? 00 33 vertical_shooting_explosion_05_tallsprite_00_color3 = $33 146 10000 ???? 00 2b vertical_shooting_explosion_05_tallsprite_00_color2 = $2b 147 10000 ???? 00 36 vertical_shooting_explosion_05_tallsprite_00_color1 = $36 148 10000 ???? 00 00 vertical_shooting_explosion_05_tallsprite_00_color0 = $00 149 10000 ???? 00 33 vertical_shooting_explosion_05_color3 = $33 150 10000 ???? 00 2b vertical_shooting_explosion_05_color2 = $2b 151 10000 ???? 00 36 vertical_shooting_explosion_05_color1 = $36 152 10000 ???? 00 00 vertical_shooting_explosion_05_color0 = $00 153 10000 ???? 00 33 vertical_shooting_explosion_04_tallsprite_00_color3 = $33 154 10000 ???? 00 36 vertical_shooting_explosion_04_tallsprite_00_color2 = $36 155 10000 ???? 00 2b vertical_shooting_explosion_04_tallsprite_00_color1 = $2b 156 10000 ???? 00 00 vertical_shooting_explosion_04_tallsprite_00_color0 = $00 157 10000 ???? 00 33 vertical_shooting_explosion_04_color3 = $33 158 10000 ???? 00 36 vertical_shooting_explosion_04_color2 = $36 159 10000 ???? 00 2b vertical_shooting_explosion_04_color1 = $2b 160 10000 ???? 00 00 vertical_shooting_explosion_04_color0 = $00 161 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color3 = 0 162 10000 ???? 00 36 vertical_shooting_explosion_03_tallsprite_00_color2 = $36 163 10000 ???? 00 2b vertical_shooting_explosion_03_tallsprite_00_color1 = $2b 164 10000 ???? 00 00 vertical_shooting_explosion_03_tallsprite_00_color0 = $00 165 10000 ???? 00 00 vertical_shooting_explosion_03_color3 = 0 166 10000 ???? 00 36 vertical_shooting_explosion_03_color2 = $36 167 10000 ???? 00 2b vertical_shooting_explosion_03_color1 = $2b 168 10000 ???? 00 00 vertical_shooting_explosion_03_color0 = $00 169 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color3 = 0 170 10000 ???? 00 36 vertical_shooting_explosion_02_tallsprite_00_color2 = $36 171 10000 ???? 00 2b vertical_shooting_explosion_02_tallsprite_00_color1 = $2b 172 10000 ???? 00 00 vertical_shooting_explosion_02_tallsprite_00_color0 = $00 173 10000 ???? 00 00 vertical_shooting_explosion_02_color3 = 0 174 10000 ???? 00 36 vertical_shooting_explosion_02_color2 = $36 175 10000 ???? 00 2b vertical_shooting_explosion_02_color1 = $2b 176 10000 ???? 00 00 vertical_shooting_explosion_02_color0 = $00 177 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color3 = 0 178 10000 ???? 00 2b vertical_shooting_explosion_01_tallsprite_00_color2 = $2b 179 10000 ???? 00 36 vertical_shooting_explosion_01_tallsprite_00_color1 = $36 180 10000 ???? 00 00 vertical_shooting_explosion_01_tallsprite_00_color0 = $00 181 10000 ???? 00 00 vertical_shooting_explosion_01_color3 = 0 182 10000 ???? 00 2b vertical_shooting_explosion_01_color2 = $2b 183 10000 ???? 00 36 vertical_shooting_explosion_01_color1 = $36 184 10000 ???? 00 00 vertical_shooting_explosion_01_color0 = $00 185 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 186 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 187 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 188 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 189 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 190 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 191 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 192 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 193 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 194 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 195 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 196 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 197 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 198 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 199 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 200 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 201 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 202 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 203 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 204 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 205 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 206 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 207 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 208 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 209 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 210 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 211 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 212 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 213 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 214 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 215 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 216 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 217 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 218 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 219 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 220 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 221 10000 ???? 00 0f vertical_shooting_font_color1 = $0f 222 10000 ???? 00 00 vertical_shooting_font_color0 = $00 223 10000 ???? 00 00 atascii_color1 = $00 224 10000 ???? 00 0f atascii_color0 = $0f 225 10000 ???? 01 64 lives = var36 226 10000 ???? 227 10000 ???? 01 63 explosion_aniframe = var35 228 10000 ???? 229 10000 ???? 01 62 extra_shipFlag = var34 230 10000 ???? 231 10000 ???? 01 61 extra_shipY = var33 232 10000 ???? 233 10000 ???? 01 60 extra_shipX = var32 234 10000 ???? 235 10000 ???? 01 5f gameover_flag = var31 236 10000 ???? 237 10000 ???? 01 5e enemy01_speed = var30 238 10000 ???? 239 10000 ???? 01 5d rMovement6 = var29 240 10000 ???? 241 10000 ???? 01 5c rMovement5 = var28 242 10000 ???? 243 10000 ???? 01 5b rMovement4 = var27 244 10000 ???? 245 10000 ???? 01 5a rMovement3 = var26 246 10000 ???? 247 10000 ???? 01 59 enemy01_Flag = var25 248 10000 ???? 249 10000 ???? 01 58 enemy01_Y = var24 250 10000 ???? 251 10000 ???? 01 57 enemy01_X = var23 252 10000 ???? 253 10000 ???? 01 56 enemy_shotSlowdown = var22 254 10000 ???? 255 10000 ???? 01 55 bulletSlowdown = var21 256 10000 ???? 257 10000 ???? 01 54 power_upSlowdown = var20 258 10000 ???? 259 10000 ???? 01 53 rMovement2 = var19 260 10000 ???? 261 10000 ???? 01 52 power_upFlag = var18 262 10000 ???? 263 10000 ???? 01 51 power_upY = var17 264 10000 ???? 265 10000 ???? 01 50 power_upX = var16 266 10000 ???? 267 10000 ???? 01 4f rDirection = var15 268 10000 ???? 269 10000 ???? 01 4e rMovement1 = var14 270 10000 ???? 271 10000 ???? 01 4d playerFlag = var13 272 10000 ???? 273 10000 ???? 01 4c enemy_shotFlag = var12 274 10000 ???? 275 10000 ???? 01 4b enemy_shotY = var11 276 10000 ???? 277 10000 ???? 01 4a enemy_shotX = var10 278 10000 ???? 279 10000 ???? 01 49 bulletY = var9 280 10000 ???? 281 10000 ???? 01 48 bulletX = var8 282 10000 ???? 283 10000 ???? 01 47 joyposright = var7 284 10000 ???? 285 10000 ???? 01 46 joyposleft = var6 286 10000 ???? 287 10000 ???? 01 45 joyposdown = var5 288 10000 ???? 289 10000 ???? 01 44 joyposup = var4 290 10000 ???? 291 10000 ???? 01 43 fire_debounce = var3 292 10000 ???? 293 10000 ???? 01 42 playerY = var2 294 10000 ???? 295 10000 ???? 01 41 playerX = var1 296 10000 ???? 297 10000 ???? 01 40 frameCounter = var0 298 10000 ???? 299 10000 ???? 00 01 DOUBLEWIDE = 1 300 10000 ???? 00 01 collisionwrap = 1 301 10000 ???? 00 01 NTSC = 1 302 10000 ???? 00 c0 SCREENHEIGHT = 192 303 10000 ???? 00 01 CHECKOVERWRITE = 1 304 10000 ???? 00 08 ZONEHEIGHT = 8 305 10000 ???? 00 01 ROM16K = 1 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test_sprani.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 ???? 00 01 BEADHEADER = 1 565 10000 ???? endif 566 10000 ???? - ifconst ROM32K 567 10000 ???? -BEADHEADER = 1 568 10000 ???? endif 569 10000 ???? - ifconst ROM48K 570 10000 ???? -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 10000 ???? - ORG $4000,0 595 10000 ???? - ifconst BEADHEADER 596 10000 ???? - .byte $BE,$AD,BEADHARDWARE 597 10000 ???? - ifconst GAMEDESCRIPTIONSET 598 10000 ???? - CLC 599 10000 ???? - BCC _SKIPDESCRIPTION 600 10000 ???? - .byte GAMEDESCRIPTION,0 601 10000 ???? -_SKIPDESCRIPTION 602 10000 ???? - endif 603 10000 ???? - jmp ($FFFC) 604 10000 ???? - endif 605 10000 ???? else 606 10000 ???? - ifconst bankswitchmode 607 10000 ???? - ifconst ROMAT4K 608 10000 ???? - ORG $4000,0 609 10000 ???? - RORG $4000 610 10000 ???? - else 611 10000 ???? - ORG $8000,0 612 10000 ???? - RORG $8000 613 10000 ???? - endif 614 10000 ???? else ; not bankswitchmode 615 10000 ???? ifconst ROM16K 616 c000 ORG $C000,0 617 c000 ifconst BEADHEADER 618 c000 be ad 00 .byte.b $BE,$AD,BEADHARDWARE 619 c003 - ifconst GAMEDESCRIPTION 620 c003 - CLC 621 c003 - BCC _SKIPDESCRIPTION 622 c003 - .byte GAMEDESCRIPTION,0 623 c003 -_SKIPDESCRIPTION 624 c003 endif 625 c003 6c fc ff jmp ($FFFC) 626 c006 endif 627 c006 - else 628 c006 - ifconst ROM8K 629 c006 - ORG $E000,0 630 c006 - else 631 c006 - ORG $8000,0 632 c006 - ifconst BEADHEADER 633 c006 - .byte $BE,$AD,BEADHARDWARE 634 c006 - ifconst GAMEDESCRIPTION 635 c006 - CLC 636 c006 - BCC _SKIPDESCRIPTION 637 c006 - .byte GAMEDESCRIPTION,0 638 c006 -_SKIPDESCRIPTION 639 c006 - endif 640 c006 - jmp ($FFFC) 641 c006 - endif 642 c006 - endif 643 c006 endif 644 c006 endif 645 c006 endif 646 c006 647 c006 ;7800basic v0.15 Sep 16 2020 14:11:44 648 c006 SPACEOVERFLOW SET 0 649 c006 game 650 c006 . 651 c006 ;; 652 c006 653 c006 . 654 c006 ;; 655 c006 656 c006 .L00 ;; set romsize 16k 657 c006 658 c006 .L01 ;; set zoneheight 8 659 c006 660 c006 .L02 ;; set zoneprotection on 661 c006 662 c006 .L03 ;; set tallsprite on 663 c006 664 c006 .L04 ;; set screenheight 192 665 c006 666 c006 .L05 ;; set basepath gfx 667 c006 668 c006 .L06 ;; set tv ntsc 669 c006 670 c006 .L07 ;; set collisionwrap on 671 c006 672 c006 .L08 ;; set doublewide on 673 c006 674 c006 .L09 ;; displaymode 160A 675 c006 676 c006 a9 50 lda #%01010000 ;Enable DMA, mode=160x2/160x4, 2x character width 677 c008 85 3c sta CTRL 678 c00a 679 c00a 8d 07 21 sta sCTRL 680 c00d 681 c00d . 682 c00d ;; 683 c00d 684 c00d .L010 ;; dim frameCounter = var0 685 c00d 686 c00d .L011 ;; dim playerX = var1 687 c00d 688 c00d .L012 ;; dim playerY = var2 689 c00d 690 c00d .L013 ;; dim fire_debounce = var3 691 c00d 692 c00d .L014 ;; dim joyposup = var4 693 c00d 694 c00d .L015 ;; dim joyposdown = var5 695 c00d 696 c00d .L016 ;; dim joyposleft = var6 697 c00d 698 c00d .L017 ;; dim joyposright = var7 699 c00d 700 c00d .L018 ;; dim bulletX = var8 701 c00d 702 c00d .L019 ;; dim bulletY = var9 703 c00d 704 c00d .L020 ;; dim enemy_shotX = var10 705 c00d 706 c00d .L021 ;; dim enemy_shotY = var11 707 c00d 708 c00d .L022 ;; dim enemy_shotFlag = var12 709 c00d 710 c00d .L023 ;; dim playerFlag = var13 711 c00d 712 c00d .L024 ;; dim rMovement1 = var14 713 c00d 714 c00d .L025 ;; dim rDirection = var15 715 c00d 716 c00d .L026 ;; dim power_upX = var16 717 c00d 718 c00d .L027 ;; dim power_upY = var17 719 c00d 720 c00d .L028 ;; dim power_upFlag = var18 721 c00d 722 c00d .L029 ;; dim rMovement2 = var19 723 c00d 724 c00d .L030 ;; dim power_upSlowdown = var20 725 c00d 726 c00d .L031 ;; dim bulletSlowdown = var21 727 c00d 728 c00d .L032 ;; dim enemy_shotSlowdown = var22 729 c00d 730 c00d .L033 ;; dim enemy01_X = var23 731 c00d 732 c00d .L034 ;; dim enemy01_Y = var24 733 c00d 734 c00d .L035 ;; dim enemy01_Flag = var25 735 c00d 736 c00d .L036 ;; dim rMovement3 = var26 737 c00d 738 c00d .L037 ;; dim rMovement4 = var27 739 c00d 740 c00d .L038 ;; dim rMovement5 = var28 741 c00d 742 c00d .L039 ;; dim rMovement6 = var29 743 c00d 744 c00d .L040 ;; dim enemy01_speed = var30 745 c00d 746 c00d .L041 ;; dim gameover_flag = var31 747 c00d 748 c00d .L042 ;; dim extra_shipX = var32 749 c00d 750 c00d .L043 ;; dim extra_shipY = var33 751 c00d 752 c00d .L044 ;; dim extra_shipFlag = var34 753 c00d 754 c00d .L045 ;; dim explosion_aniframe = var35 755 c00d 756 c00d .L046 ;; dim lives = var36 757 c00d 758 c00d .palettes 759 c00d ;; palettes 760 c00d 761 c00d .L047 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 762 c00d 763 c00d a9 0f LDA #$0F 764 c00f 85 21 STA P0C1 765 c011 a9 05 LDA #$05 766 c013 85 22 STA P0C2 767 c015 a9 32 LDA #$32 768 c017 85 23 STA P0C3 769 c019 .L048 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 770 c019 771 c019 a9 0f LDA #$0F 772 c01b 85 25 STA P1C1 773 c01d a9 ee LDA #$EE 774 c01f 85 26 STA P1C2 775 c021 a9 e7 LDA #$E7 776 c023 85 27 STA P1C3 777 c025 .L049 ;; P2C1 = $9D : P2C2 = $73 : P2C3 = $88 778 c025 779 c025 a9 9d LDA #$9D 780 c027 85 29 STA P2C1 781 c029 a9 73 LDA #$73 782 c02b 85 2a STA P2C2 783 c02d a9 88 LDA #$88 784 c02f 85 2b STA P2C3 785 c031 .L050 ;; P3C1 = $FB : P3C2 = $F2 : P3C3 = $25 786 c031 787 c031 a9 fb LDA #$FB 788 c033 85 2d STA P3C1 789 c035 a9 f2 LDA #$F2 790 c037 85 2e STA P3C2 791 c039 a9 25 LDA #$25 792 c03b 85 2f STA P3C3 793 c03d . 794 c03d ;; 795 c03d 796 c03d .import 797 c03d ;; import 798 c03d 799 c03d .L051 ;; incgraphic atascii.png 160A 800 c03d 801 c03d .L052 ;; incgraphic vertical_shooting_font.png 160A 802 c03d 803 c03d .L053 ;; incgraphic vertical_shooting_ship.png 160A 804 c03d 805 c03d .L054 ;; incgraphic vertical_shooting_bullet.png 160A 806 c03d 807 c03d .L055 ;; incgraphic vertical_shooting_enemyshot.png 160A 808 c03d 809 c03d .L056 ;; incgraphic vertical_shooting_powerup.png 160A 810 c03d 811 c03d .L057 ;; incgraphic vertical_shooting_enemy01.png 160A 812 c03d 813 c03d .L058 ;; incgraphic vertical_shooting_score_10_digits.png 160A 814 c03d 815 c03d .L059 ;; incgraphic vertical_shooting_1up.png 160A 816 c03d 817 c03d .L060 ;; incgraphic vertical_shooting_explosion_01.png 160A 818 c03d 819 c03d .L061 ;; incgraphic vertical_shooting_explosion_02.png 160A 820 c03d 821 c03d .L062 ;; incgraphic vertical_shooting_explosion_03.png 160A 822 c03d 823 c03d .L063 ;; incgraphic vertical_shooting_explosion_04.png 160A 824 c03d 825 c03d .L064 ;; incgraphic vertical_shooting_explosion_05.png 160A 826 c03d 827 c03d .L065 ;; incgraphic vertical_shooting_explosion_06.png 160A 828 c03d 829 c03d .L066 ;; incgraphic vertical_shooting_explosion_07.png 160A 830 c03d 831 c03d .L067 ;; incgraphic vertical_shooting_explosion_08.png 160A 832 c03d 833 c03d .L068 ;; incgraphic vertical_shooting_explosion_09.png 160A 834 c03d 835 c03d .L069 ;; incgraphic vertical_shooting_explosion_10.png 160A 836 c03d 837 c03d .plot 838 c03d ;; plot 839 c03d 840 c03d .L070 ;; clearscreen 841 c03d 842 c03d 20 80 f0 jsr clearscreen 843 c040 .L071 ;; characterset atascii 844 c040 845 c040 a9 d0 lda #>atascii 846 c042 85 34 sta CHARBASE 847 c044 8d 0b 21 sta sCHARBASE 848 c047 849 c047 a9 60 lda #(atascii_mode | %01100000) 850 c049 8d 06 21 sta charactermode 851 c04c 852 c04c .L072 ;; alphachars ASCII 853 c04c 854 c04c .L073 ;; plotchars 'New^Vertical^Shooting' 1 8 4 855 c04c 856 c04c 4c 64 c0 JMP skipalphadata0 857 c04f alphadata0 858 c04f 9c .byte.b (alphadata0 884 c06a 85 43 sta temp2 885 c06c 886 c06c a9 0b lda #11 ; width in two's complement 887 c06e 09 20 ora #32 ; palette left shifted 5 bits 888 c070 85 44 sta temp3 889 c072 a9 08 lda #8 890 c074 85 45 sta temp4 891 c076 892 c076 a9 04 lda #4 893 c078 894 c078 85 46 sta temp5 895 c07a 896 c07a 20 4d f3 jsr plotcharacters 897 c07d .L074 ;; plotchars 'Demo' 1 16 5 898 c07d 899 c07d 4c 84 c0 JMP skipalphadata1 900 c080 alphadata1 901 c080 88 .byte.b (alphadata1 910 c08a 85 43 sta temp2 911 c08c 912 c08c a9 1c lda #28 ; width in two's complement 913 c08e 09 20 ora #32 ; palette left shifted 5 bits 914 c090 85 44 sta temp3 915 c092 a9 10 lda #16 916 c094 85 45 sta temp4 917 c096 918 c096 a9 05 lda #5 919 c098 920 c098 85 46 sta temp5 921 c09a 922 c09a 20 4d f3 jsr plotcharacters 923 c09d .L075 ;; plotchars 'by^Shane^Skekel.' 1 16 7 924 c09d 925 c09d 4c b0 c0 JMP skipalphadata2 926 c0a0 alphadata2 927 c0a0 c4 .byte.b (alphadata2 948 c0b6 85 43 sta temp2 949 c0b8 950 c0b8 a9 10 lda #16 ; width in two's complement 951 c0ba 09 20 ora #32 ; palette left shifted 5 bits 952 c0bc 85 44 sta temp3 953 c0be a9 10 lda #16 954 c0c0 85 45 sta temp4 955 c0c2 956 c0c2 a9 07 lda #7 957 c0c4 958 c0c4 85 46 sta temp5 959 c0c6 960 c0c6 20 4d f3 jsr plotcharacters 961 c0c9 .L076 ;; plotchars 'Push^Fire^to^Begin.' 2 8 16 962 c0c9 963 c0c9 4c df c0 JMP skipalphadata3 964 c0cc alphadata3 965 c0cc a0 .byte.b (alphadata3 989 c0e5 85 43 sta temp2 990 c0e7 991 c0e7 a9 0d lda #13 ; width in two's complement 992 c0e9 09 40 ora #64 ; palette left shifted 5 bits 993 c0eb 85 44 sta temp3 994 c0ed a9 08 lda #8 995 c0ef 85 45 sta temp4 996 c0f1 997 c0f1 a9 10 lda #16 998 c0f3 999 c0f3 85 46 sta temp5 1000 c0f5 1001 c0f5 20 4d f3 jsr plotcharacters 1002 c0f8 .L077 ;; savescreen 1003 c0f8 1004 c0f8 20 a4 f0 jsr savescreen 1005 c0fb .L078 ;; drawscreen 1006 c0fb 1007 c0fb 20 b4 f0 jsr drawscreen 1008 c0fe . 1009 c0fe ;; 1010 c0fe 1011 c0fe .L079 ;; playerX = 80 : playerY = 144 : playerFlag = 0 : fire_debounce = 0 1012 c0fe 1013 c0fe a9 50 LDA #80 1014 c100 8d 41 01 STA playerX 1015 c103 a9 90 LDA #144 1016 c105 8d 42 01 STA playerY 1017 c108 a9 00 LDA #0 1018 c10a 8d 4d 01 STA playerFlag 1019 c10d 8d 43 01 STA fire_debounce 1020 c110 .L080 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1021 c110 1022 c110 a9 00 LDA #0 1023 c112 8d 44 01 STA joyposup 1024 c115 8d 45 01 STA joyposdown 1025 c118 8d 46 01 STA joyposleft 1026 c11b 8d 47 01 STA joyposright 1027 c11e .L081 ;; bulletX = 0 : bulletY = 0 : lives = 3 1028 c11e 1029 c11e a9 00 LDA #0 1030 c120 8d 48 01 STA bulletX 1031 c123 8d 49 01 STA bulletY 1032 c126 a9 03 LDA #3 1033 c128 8d 64 01 STA lives 1034 c12b .L082 ;; enemy_shotX = 0 : enemy_shotY = 0 : enemy_shotFlag = 0 1035 c12b 1036 c12b a9 00 LDA #0 1037 c12d 8d 4a 01 STA enemy_shotX 1038 c130 8d 4b 01 STA enemy_shotY 1039 c133 8d 4c 01 STA enemy_shotFlag 1040 c136 .L083 ;; rMovement1 = 1 : rMovement2 = 1 : rMovement3 = 1 : rMovement4 = 1 1041 c136 1042 c136 a9 01 LDA #1 1043 c138 8d 4e 01 STA rMovement1 1044 c13b 8d 53 01 STA rMovement2 1045 c13e 8d 5a 01 STA rMovement3 1046 c141 8d 5b 01 STA rMovement4 1047 c144 .L084 ;; rMovement5 = 1 : rMovement6 = 1 : rDirection = 1 1048 c144 1049 c144 a9 01 LDA #1 1050 c146 8d 5c 01 STA rMovement5 1051 c149 8d 5d 01 STA rMovement6 1052 c14c 8d 4f 01 STA rDirection 1053 c14f .L085 ;; power_upX = 5 : power_upY = 32 : power_upFlag = 0 1054 c14f 1055 c14f a9 05 LDA #5 1056 c151 8d 50 01 STA power_upX 1057 c154 a9 20 LDA #32 1058 c156 8d 51 01 STA power_upY 1059 c159 a9 00 LDA #0 1060 c15b 8d 52 01 STA power_upFlag 1061 c15e .L086 ;; enemy_shotSlowdown = 0 : bulletSlowdown = 0 : power_upSlowdown = 0 1062 c15e 1063 c15e a9 00 LDA #0 1064 c160 8d 56 01 STA enemy_shotSlowdown 1065 c163 8d 55 01 STA bulletSlowdown 1066 c166 8d 54 01 STA power_upSlowdown 1067 c169 .L087 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 : enemy01_speed = 6 1068 c169 1069 c169 a9 00 LDA #0 1070 c16b 8d 57 01 STA enemy01_X 1071 c16e 8d 58 01 STA enemy01_Y 1072 c171 8d 59 01 STA enemy01_Flag 1073 c174 a9 06 LDA #6 1074 c176 8d 5e 01 STA enemy01_speed 1075 c179 .L088 ;; frameCounter = 0 : gameover_flag = 0 1076 c179 1077 c179 a9 00 LDA #0 1078 c17b 8d 40 01 STA frameCounter 1079 c17e 8d 5f 01 STA gameover_flag 1080 c181 .L089 ;; extra_shipX = 0 : extra_shipY = 0 : extra_shipFlag = 0 1081 c181 1082 c181 a9 00 LDA #0 1083 c183 8d 60 01 STA extra_shipX 1084 c186 8d 61 01 STA extra_shipY 1085 c189 8d 62 01 STA extra_shipFlag 1086 c18c . 1087 c18c ;; 1088 c18c 1089 c18c .titlescreenloop 1090 c18c ;; titlescreenloop 1091 c18c 1092 c18c .L090 ;; restorescreen 1093 c18c 1094 c18c 20 92 f0 jsr restorescreen 1095 c18f .L091 ;; if switchreset then reboot 1096 c18f 1097 c18f 20 79 f4 jsr checkresetswitch 1098 c192 d0 03 BNE .skipL091 1099 c194 .condpart0 1100 c194 4c 66 f5 JMP START 1101 c197 .skipL091 1102 c197 .L092 ;; if joy0fire then clearscreen : savescreen : lives = $04 : score0 = 0 : goto main 1103 c197 1104 c197 2c 02 21 bit sINPT1 1105 c19a 10 1d BPL .skipL092 1106 c19c .condpart1 1107 c19c 20 80 f0 jsr clearscreen 1108 c19f 20 a4 f0 jsr savescreen 1109 c1a2 a9 04 LDA #$04 1110 c1a4 8d 64 01 STA lives 1111 c1a7 a9 00 LDA #$00 1112 c1a9 8d a8 01 STA score0+2 1113 c1ac a9 00 LDA #$00 1114 c1ae 8d a7 01 STA score0+1 1115 c1b1 a9 00 LDA #$00 1116 c1b3 8d a6 01 STA score0 1117 c1b6 4c bf c1 jmp .main 1118 c1b9 1119 c1b9 .skipL092 1120 c1b9 . 1121 c1b9 ;; 1122 c1b9 1123 c1b9 . 1124 c1b9 ;; 1125 c1b9 1126 c1b9 . 1127 c1b9 ;; 1128 c1b9 1129 c1b9 .L093 ;; drawscreen 1130 c1b9 1131 c1b9 20 b4 f0 jsr drawscreen 1132 c1bc .L094 ;; goto titlescreenloop 1133 c1bc 1134 c1bc 4c 8c c1 jmp .titlescreenloop 1135 c1bf 1136 c1bf . 1137 c1bf ;; 1138 c1bf 1139 c1bf . 1140 c1bf ;; 1141 c1bf 1142 c1bf .main 1143 c1bf ;; main 1144 c1bf 1145 c1bf .L095 ;; frameCounter = frameCounter + 1 1146 c1bf 1147 c1bf ad 40 01 LDA frameCounter 1148 c1c2 18 CLC 1149 c1c3 69 01 ADC #1 1150 c1c5 8d 40 01 STA frameCounter 1151 c1c8 .L096 ;; if frameCounter > 10 then frameCounter = 0 1152 c1c8 1153 c1c8 a9 0a LDA #10 1154 c1ca cd 40 01 CMP frameCounter 1155 c1cd b0 05 BCS .skipL096 1156 c1cf .condpart2 1157 c1cf a9 00 LDA #0 1158 c1d1 8d 40 01 STA frameCounter 1159 c1d4 .skipL096 1160 c1d4 .mainloop 1161 c1d4 ;; mainloop 1162 c1d4 1163 c1d4 .L097 ;; BACKGRND = $00 1164 c1d4 1165 c1d4 a9 00 LDA #$00 1166 c1d6 85 20 STA BACKGRND 1167 c1d8 .L098 ;; restorescreen 1168 c1d8 1169 c1d8 20 92 f0 jsr restorescreen 1170 c1db .L099 ;; rMovement1 = ( rand & 7 ) - 2 1171 c1db 1172 c1db ; complex statement detected 1173 c1db 20 f1 f3 jsr randomize 1174 c1de 29 07 AND #7 1175 c1e0 38 SEC 1176 c1e1 e9 02 SBC #2 1177 c1e3 8d 4e 01 STA rMovement1 1178 c1e6 .L0100 ;; rMovement2 = ( rand & 6 ) 1179 c1e6 1180 c1e6 ; complex statement detected 1181 c1e6 20 f1 f3 jsr randomize 1182 c1e9 29 06 AND #6 1183 c1eb 8d 53 01 STA rMovement2 1184 c1ee .L0101 ;; rMovement3 = ( rand & 3 ) + 1 1185 c1ee 1186 c1ee ; complex statement detected 1187 c1ee 20 f1 f3 jsr randomize 1188 c1f1 29 03 AND #3 1189 c1f3 18 CLC 1190 c1f4 69 01 ADC #1 1191 c1f6 8d 5a 01 STA rMovement3 1192 c1f9 .L0102 ;; rMovement4 = ( rand & 5 ) + 2 1193 c1f9 1194 c1f9 ; complex statement detected 1195 c1f9 20 f1 f3 jsr randomize 1196 c1fc 29 05 AND #5 1197 c1fe 18 CLC 1198 c1ff 69 02 ADC #2 1199 c201 8d 5b 01 STA rMovement4 1200 c204 .L0103 ;; rMovement5 = ( rand & 5 ) + 1 1201 c204 1202 c204 ; complex statement detected 1203 c204 20 f1 f3 jsr randomize 1204 c207 29 05 AND #5 1205 c209 18 CLC 1206 c20a 69 01 ADC #1 1207 c20c 8d 5c 01 STA rMovement5 1208 c20f .L0104 ;; rMovement6 = ( rand & 6 ) - 1 1209 c20f 1210 c20f ; complex statement detected 1211 c20f 20 f1 f3 jsr randomize 1212 c212 29 06 AND #6 1213 c214 38 SEC 1214 c215 e9 01 SBC #1 1215 c217 8d 5d 01 STA rMovement6 1216 c21a .L0105 ;; rDirection = ( rand & 4 ) 1217 c21a 1218 c21a ; complex statement detected 1219 c21a 20 f1 f3 jsr randomize 1220 c21d 29 04 AND #4 1221 c21f 8d 4f 01 STA rDirection 1222 c222 .L0106 ;; if switchreset then reboot 1223 c222 1224 c222 20 79 f4 jsr checkresetswitch 1225 c225 d0 03 BNE .skipL0106 1226 c227 .condpart3 1227 c227 4c 66 f5 JMP START 1228 c22a .skipL0106 1229 c22a . 1230 c22a ;; 1231 c22a 1232 c22a . 1233 c22a ;; 1234 c22a 1235 c22a .L0107 ;; enemy_shotSlowdown = enemy_shotSlowdown + 1 1236 c22a 1237 c22a ad 56 01 LDA enemy_shotSlowdown 1238 c22d 18 CLC 1239 c22e 69 01 ADC #1 1240 c230 8d 56 01 STA enemy_shotSlowdown 1241 c233 .L0108 ;; if enemy_shotSlowdown > 8 then enemy_shotSlowdown = 0 1242 c233 1243 c233 a9 08 LDA #8 1244 c235 cd 56 01 CMP enemy_shotSlowdown 1245 c238 b0 05 BCS .skipL0108 1246 c23a .condpart4 1247 c23a a9 00 LDA #0 1248 c23c 8d 56 01 STA enemy_shotSlowdown 1249 c23f .skipL0108 1250 c23f . 1251 c23f ;; 1252 c23f 1253 c23f .L0109 ;; bulletSlowdown = bulletSlowdown + 1 1254 c23f 1255 c23f ad 55 01 LDA bulletSlowdown 1256 c242 18 CLC 1257 c243 69 01 ADC #1 1258 c245 8d 55 01 STA bulletSlowdown 1259 c248 .L0110 ;; if bulletSlowdown > 6 then bulletSlowdown = 0 1260 c248 1261 c248 a9 06 LDA #6 1262 c24a cd 55 01 CMP bulletSlowdown 1263 c24d b0 05 BCS .skipL0110 1264 c24f .condpart5 1265 c24f a9 00 LDA #0 1266 c251 8d 55 01 STA bulletSlowdown 1267 c254 .skipL0110 1268 c254 . 1269 c254 ;; 1270 c254 1271 c254 .L0111 ;; power_upSlowdown = power_upSlowdown + 1 1272 c254 1273 c254 ad 54 01 LDA power_upSlowdown 1274 c257 18 CLC 1275 c258 69 01 ADC #1 1276 c25a 8d 54 01 STA power_upSlowdown 1277 c25d .L0112 ;; if power_upSlowdown > 7 then power_upSlowdown = 0 1278 c25d 1279 c25d a9 07 LDA #7 1280 c25f cd 54 01 CMP power_upSlowdown 1281 c262 b0 05 BCS .skipL0112 1282 c264 .condpart6 1283 c264 a9 00 LDA #0 1284 c266 8d 54 01 STA power_upSlowdown 1285 c269 .skipL0112 1286 c269 . 1287 c269 ;; 1288 c269 1289 c269 . 1290 c269 ;; 1291 c269 1292 c269 .L0113 ;; if joy0up && joyposup = - 2 then gosub SetBulletHome 1293 c269 1294 c269 a9 10 lda #$10 1295 c26b 2c 80 02 bit SWCHA 1296 c26e d0 10 BNE .skipL0113 1297 c270 .condpart7 1298 c270 ; complex condition detected 1299 c270 a9 fe LDA #254 1300 c272 48 PHA 1301 c273 ba TSX 1302 c274 68 PLA 1303 c275 ad 44 01 LDA joyposup 1304 c278 dd 01 01 CMP $101,x 1305 c27b d0 03 BNE .skip7then 1306 c27d .condpart8 1307 c27d 20 00 d8 jsr .SetBulletHome 1308 c280 1309 c280 .skip7then 1310 c280 .skipL0113 1311 c280 .L0114 ;; if joy0down && joyposdown = - 2 then gosub SetBulletHome 1312 c280 1313 c280 a9 20 lda #$20 1314 c282 2c 80 02 bit SWCHA 1315 c285 d0 10 BNE .skipL0114 1316 c287 .condpart9 1317 c287 ; complex condition detected 1318 c287 a9 fe LDA #254 1319 c289 48 PHA 1320 c28a ba TSX 1321 c28b 68 PLA 1322 c28c ad 45 01 LDA joyposdown 1323 c28f dd 01 01 CMP $101,x 1324 c292 d0 03 BNE .skip9then 1325 c294 .condpart10 1326 c294 20 00 d8 jsr .SetBulletHome 1327 c297 1328 c297 .skip9then 1329 c297 .skipL0114 1330 c297 .L0115 ;; if joy0up && joyposleft = - 2 then gosub SetBulletHome 1331 c297 1332 c297 a9 10 lda #$10 1333 c299 2c 80 02 bit SWCHA 1334 c29c d0 10 BNE .skipL0115 1335 c29e .condpart11 1336 c29e ; complex condition detected 1337 c29e a9 fe LDA #254 1338 c2a0 48 PHA 1339 c2a1 ba TSX 1340 c2a2 68 PLA 1341 c2a3 ad 46 01 LDA joyposleft 1342 c2a6 dd 01 01 CMP $101,x 1343 c2a9 d0 03 BNE .skip11then 1344 c2ab .condpart12 1345 c2ab 20 00 d8 jsr .SetBulletHome 1346 c2ae 1347 c2ae .skip11then 1348 c2ae .skipL0115 1349 c2ae .L0116 ;; if joy0down && joyposright = - 2 then gosub SetBulletHome 1350 c2ae 1351 c2ae a9 20 lda #$20 1352 c2b0 2c 80 02 bit SWCHA 1353 c2b3 d0 10 BNE .skipL0116 1354 c2b5 .condpart13 1355 c2b5 ; complex condition detected 1356 c2b5 a9 fe LDA #254 1357 c2b7 48 PHA 1358 c2b8 ba TSX 1359 c2b9 68 PLA 1360 c2ba ad 47 01 LDA joyposright 1361 c2bd dd 01 01 CMP $101,x 1362 c2c0 d0 03 BNE .skip13then 1363 c2c2 .condpart14 1364 c2c2 20 00 d8 jsr .SetBulletHome 1365 c2c5 1366 c2c5 .skip13then 1367 c2c5 .skipL0116 1368 c2c5 .L0117 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1369 c2c5 1370 c2c5 a9 10 lda #$10 1371 c2c7 2c 80 02 bit SWCHA 1372 c2ca d0 19 BNE .skipL0117 1373 c2cc .condpart15 1374 c2cc ad 42 01 LDA playerY 1375 c2cf 38 SEC 1376 c2d0 e9 01 SBC #1 1377 c2d2 8d 42 01 STA playerY 1378 c2d5 a9 01 LDA #1 1379 c2d7 8d 44 01 STA joyposup 1380 c2da a9 00 LDA #0 1381 c2dc 8d 45 01 STA joyposdown 1382 c2df 8d 46 01 STA joyposleft 1383 c2e2 8d 47 01 STA joyposright 1384 c2e5 .skipL0117 1385 c2e5 .L0118 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 1386 c2e5 1387 c2e5 a9 20 lda #$20 1388 c2e7 2c 80 02 bit SWCHA 1389 c2ea d0 1b BNE .skipL0118 1390 c2ec .condpart16 1391 c2ec ad 42 01 LDA playerY 1392 c2ef 18 CLC 1393 c2f0 69 01 ADC #1 1394 c2f2 8d 42 01 STA playerY 1395 c2f5 a9 00 LDA #0 1396 c2f7 8d 44 01 STA joyposup 1397 c2fa a9 01 LDA #1 1398 c2fc 8d 45 01 STA joyposdown 1399 c2ff a9 00 LDA #0 1400 c301 8d 46 01 STA joyposleft 1401 c304 8d 47 01 STA joyposright 1402 c307 .skipL0118 1403 c307 .L0119 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 1404 c307 1405 c307 2c 80 02 bit SWCHA 1406 c30a 70 1b BVS .skipL0119 1407 c30c .condpart17 1408 c30c ad 41 01 LDA playerX 1409 c30f 38 SEC 1410 c310 e9 01 SBC #1 1411 c312 8d 41 01 STA playerX 1412 c315 a9 00 LDA #0 1413 c317 8d 44 01 STA joyposup 1414 c31a 8d 45 01 STA joyposdown 1415 c31d a9 01 LDA #1 1416 c31f 8d 46 01 STA joyposleft 1417 c322 a9 00 LDA #0 1418 c324 8d 47 01 STA joyposright 1419 c327 .skipL0119 1420 c327 .L0120 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 1421 c327 1422 c327 2c 80 02 bit SWCHA 1423 c32a 30 19 BMI .skipL0120 1424 c32c .condpart18 1425 c32c ad 41 01 LDA playerX 1426 c32f 18 CLC 1427 c330 69 01 ADC #1 1428 c332 8d 41 01 STA playerX 1429 c335 a9 00 LDA #0 1430 c337 8d 44 01 STA joyposup 1431 c33a 8d 45 01 STA joyposdown 1432 c33d 8d 46 01 STA joyposleft 1433 c340 a9 01 LDA #1 1434 c342 8d 47 01 STA joyposright 1435 c345 .skipL0120 1436 c345 .L0121 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1437 c345 1438 c345 2c 02 21 bit sINPT1 1439 c348 10 29 BPL .skipL0121 1440 c34a .condpart19 1441 c34a ad 44 01 LDA joyposup 1442 c34d c9 01 CMP #1 1443 c34f d0 22 BNE .skip19then 1444 c351 .condpart20 1445 c351 ad 49 01 LDA bulletY 1446 c354 38 SEC 1447 c355 e9 05 SBC #5 1448 c357 8d 49 01 STA bulletY 1449 c35a a9 01 lda #1 1450 c35c 85 de sta sfxschedulelock 1451 c35e a9 d9 lda #sfx_pulsecannon 1454 c364 85 e1 sta sfxinstrumenthi 1455 c366 a9 00 lda #0 1456 c368 85 e2 sta sfxpitchoffset ; no pitch modification 1457 c36a 85 e3 sta sfxnoteindex ; not a musical note 1458 c36c 20 4c f2 jsr schedulesfx 1459 c36f a9 00 lda #0 1460 c371 85 de sta sfxschedulelock 1461 c373 .skip19then 1462 c373 .skipL0121 1463 c373 .L0122 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1464 c373 1465 c373 2c 02 21 bit sINPT1 1466 c376 10 29 BPL .skipL0122 1467 c378 .condpart21 1468 c378 ad 45 01 LDA joyposdown 1469 c37b c9 01 CMP #1 1470 c37d d0 22 BNE .skip21then 1471 c37f .condpart22 1472 c37f ad 49 01 LDA bulletY 1473 c382 38 SEC 1474 c383 e9 05 SBC #5 1475 c385 8d 49 01 STA bulletY 1476 c388 a9 01 lda #1 1477 c38a 85 de sta sfxschedulelock 1478 c38c a9 d9 lda #sfx_pulsecannon 1481 c392 85 e1 sta sfxinstrumenthi 1482 c394 a9 00 lda #0 1483 c396 85 e2 sta sfxpitchoffset ; no pitch modification 1484 c398 85 e3 sta sfxnoteindex ; not a musical note 1485 c39a 20 4c f2 jsr schedulesfx 1486 c39d a9 00 lda #0 1487 c39f 85 de sta sfxschedulelock 1488 c3a1 .skip21then 1489 c3a1 .skipL0122 1490 c3a1 .L0123 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1491 c3a1 1492 c3a1 2c 02 21 bit sINPT1 1493 c3a4 10 29 BPL .skipL0123 1494 c3a6 .condpart23 1495 c3a6 ad 46 01 LDA joyposleft 1496 c3a9 c9 01 CMP #1 1497 c3ab d0 22 BNE .skip23then 1498 c3ad .condpart24 1499 c3ad ad 49 01 LDA bulletY 1500 c3b0 38 SEC 1501 c3b1 e9 05 SBC #5 1502 c3b3 8d 49 01 STA bulletY 1503 c3b6 a9 01 lda #1 1504 c3b8 85 de sta sfxschedulelock 1505 c3ba a9 d9 lda #sfx_pulsecannon 1508 c3c0 85 e1 sta sfxinstrumenthi 1509 c3c2 a9 00 lda #0 1510 c3c4 85 e2 sta sfxpitchoffset ; no pitch modification 1511 c3c6 85 e3 sta sfxnoteindex ; not a musical note 1512 c3c8 20 4c f2 jsr schedulesfx 1513 c3cb a9 00 lda #0 1514 c3cd 85 de sta sfxschedulelock 1515 c3cf .skip23then 1516 c3cf .skipL0123 1517 c3cf .L0124 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1518 c3cf 1519 c3cf 2c 02 21 bit sINPT1 1520 c3d2 10 29 BPL .skipL0124 1521 c3d4 .condpart25 1522 c3d4 ad 47 01 LDA joyposright 1523 c3d7 c9 01 CMP #1 1524 c3d9 d0 22 BNE .skip25then 1525 c3db .condpart26 1526 c3db ad 49 01 LDA bulletY 1527 c3de 38 SEC 1528 c3df e9 05 SBC #5 1529 c3e1 8d 49 01 STA bulletY 1530 c3e4 a9 01 lda #1 1531 c3e6 85 de sta sfxschedulelock 1532 c3e8 a9 d9 lda #sfx_pulsecannon 1535 c3ee 85 e1 sta sfxinstrumenthi 1536 c3f0 a9 00 lda #0 1537 c3f2 85 e2 sta sfxpitchoffset ; no pitch modification 1538 c3f4 85 e3 sta sfxnoteindex ; not a musical note 1539 c3f6 20 4c f2 jsr schedulesfx 1540 c3f9 a9 00 lda #0 1541 c3fb 85 de sta sfxschedulelock 1542 c3fd .skip25then 1543 c3fd .skipL0124 1544 c3fd .L0125 ;; if !joy0fire then bulletX = playerX + 2 : bulletY = playerY - 8 1545 c3fd 1546 c3fd 2c 02 21 bit sINPT1 1547 c400 30 12 BMI .skipL0125 1548 c402 .condpart27 1549 c402 ad 41 01 LDA playerX 1550 c405 18 CLC 1551 c406 69 02 ADC #2 1552 c408 8d 48 01 STA bulletX 1553 c40b ad 42 01 LDA playerY 1554 c40e 38 SEC 1555 c40f e9 08 SBC #8 1556 c411 8d 49 01 STA bulletY 1557 c414 .skipL0125 1558 c414 . 1559 c414 ;; 1560 c414 1561 c414 .L0126 ;; if playerX > 152 then playerX = playerX - 1 1562 c414 1563 c414 a9 98 LDA #152 1564 c416 cd 41 01 CMP playerX 1565 c419 b0 09 BCS .skipL0126 1566 c41b .condpart28 1567 c41b ad 41 01 LDA playerX 1568 c41e 38 SEC 1569 c41f e9 01 SBC #1 1570 c421 8d 41 01 STA playerX 1571 c424 .skipL0126 1572 c424 .L0127 ;; if playerX < 1 then playerX = playerX + 1 1573 c424 1574 c424 ad 41 01 LDA playerX 1575 c427 c9 01 CMP #1 1576 c429 b0 09 BCS .skipL0127 1577 c42b .condpart29 1578 c42b ad 41 01 LDA playerX 1579 c42e 18 CLC 1580 c42f 69 01 ADC #1 1581 c431 8d 41 01 STA playerX 1582 c434 .skipL0127 1583 c434 .L0128 ;; if playerY > 177 then playerY = playerY - 1 1584 c434 1585 c434 a9 b1 LDA #177 1586 c436 cd 42 01 CMP playerY 1587 c439 b0 09 BCS .skipL0128 1588 c43b .condpart30 1589 c43b ad 42 01 LDA playerY 1590 c43e 38 SEC 1591 c43f e9 01 SBC #1 1592 c441 8d 42 01 STA playerY 1593 c444 .skipL0128 1594 c444 .L0129 ;; if playerY < 1 then playerY = playerY + 1 1595 c444 1596 c444 ad 42 01 LDA playerY 1597 c447 c9 01 CMP #1 1598 c449 b0 09 BCS .skipL0129 1599 c44b .condpart31 1600 c44b ad 42 01 LDA playerY 1601 c44e 18 CLC 1602 c44f 69 01 ADC #1 1603 c451 8d 42 01 STA playerY 1604 c454 .skipL0129 1605 c454 .L0130 ;; if bulletY > 183 then bulletY = bulletY - 1 1606 c454 1607 c454 a9 b7 LDA #183 1608 c456 cd 49 01 CMP bulletY 1609 c459 b0 09 BCS .skipL0130 1610 c45b .condpart32 1611 c45b ad 49 01 LDA bulletY 1612 c45e 38 SEC 1613 c45f e9 01 SBC #1 1614 c461 8d 49 01 STA bulletY 1615 c464 .skipL0130 1616 c464 .L0131 ;; if bulletY < 1 then bulletY = bulletY + 1 1617 c464 1618 c464 ad 49 01 LDA bulletY 1619 c467 c9 01 CMP #1 1620 c469 b0 09 BCS .skipL0131 1621 c46b .condpart33 1622 c46b ad 49 01 LDA bulletY 1623 c46e 18 CLC 1624 c46f 69 01 ADC #1 1625 c471 8d 49 01 STA bulletY 1626 c474 .skipL0131 1627 c474 . 1628 c474 ;; 1629 c474 1630 c474 .L0132 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy_shotX , enemy_shotY , 4 , 8 ) then enemy_shotX = 200 : enemy_shotY = 200 : playerFlag = 1 : lives = lives - 1 : playsfx sfx_explosion : goto lose_a_life 1631 c474 1632 c474 1633 c474 18 clc ; one clc only. If we overflow we're screwed anyway. 1634 c475 ad 42 01 lda playerY 1635 c478 69 20 adc #((256-WSCREENHEIGHT)/2) 1636 c47a a8 tay 1637 c47b a9 07 lda #(8-1) 1638 c47d 85 44 sta temp3 1639 c47f a9 0f lda #(16-1) 1640 c481 85 45 sta temp4 1641 c483 ad 4a 01 lda enemy_shotX 1642 c486 69 30 adc #48 1643 c488 85 46 sta temp5 1644 c48a ad 4b 01 lda enemy_shotY 1645 c48d 69 20 adc #((256-WSCREENHEIGHT)/2) 1646 c48f 85 47 sta temp6 1647 c491 a9 03 lda #(4-1) 1648 c493 85 48 sta temp7 1649 c495 a9 07 lda #(8-1) 1650 c497 85 49 sta temp8 1651 c499 ad 41 01 lda playerX 1652 c49c 69 30 adc #48 1653 c49e 20 ca f3 jsr boxcollision 1654 c4a1 1655 c4a1 90 32 BCC .skipL0132 1656 c4a3 .condpart34 1657 c4a3 a9 c8 LDA #200 1658 c4a5 8d 4a 01 STA enemy_shotX 1659 c4a8 8d 4b 01 STA enemy_shotY 1660 c4ab a9 01 LDA #1 1661 c4ad 8d 4d 01 STA playerFlag 1662 c4b0 ad 64 01 LDA lives 1663 c4b3 38 SEC 1664 c4b4 e9 01 SBC #1 1665 c4b6 8d 64 01 STA lives 1666 c4b9 a9 01 lda #1 1667 c4bb 85 de sta sfxschedulelock 1668 c4bd a9 30 lda #sfx_explosion 1671 c4c3 85 e1 sta sfxinstrumenthi 1672 c4c5 a9 00 lda #0 1673 c4c7 85 e2 sta sfxpitchoffset ; no pitch modification 1674 c4c9 85 e3 sta sfxnoteindex ; not a musical note 1675 c4cb 20 4c f2 jsr schedulesfx 1676 c4ce a9 00 lda #0 1677 c4d0 85 de sta sfxschedulelock 1678 c4d2 4c 13 d8 jmp .lose_a_life 1679 c4d5 1680 c4d5 .skipL0132 1681 c4d5 .L0133 ;; if boxcollision ( playerX , playerY , 8 , 16 , power_upX , power_upY , 8 , 8 ) then power_upX = 208 : power_upY = 208 : playerFlag = 1 : playsfx sfx_bling 1682 c4d5 1683 c4d5 1684 c4d5 18 clc ; one clc only. If we overflow we're screwed anyway. 1685 c4d6 ad 42 01 lda playerY 1686 c4d9 69 20 adc #((256-WSCREENHEIGHT)/2) 1687 c4db a8 tay 1688 c4dc a9 07 lda #(8-1) 1689 c4de 85 44 sta temp3 1690 c4e0 a9 0f lda #(16-1) 1691 c4e2 85 45 sta temp4 1692 c4e4 ad 50 01 lda power_upX 1693 c4e7 69 30 adc #48 1694 c4e9 85 46 sta temp5 1695 c4eb ad 51 01 lda power_upY 1696 c4ee 69 20 adc #((256-WSCREENHEIGHT)/2) 1697 c4f0 85 47 sta temp6 1698 c4f2 a9 07 lda #(8-1) 1699 c4f4 85 48 sta temp7 1700 c4f6 a9 07 lda #(8-1) 1701 c4f8 85 49 sta temp8 1702 c4fa ad 41 01 lda playerX 1703 c4fd 69 30 adc #48 1704 c4ff 20 ca f3 jsr boxcollision 1705 c502 1706 c502 90 26 BCC .skipL0133 1707 c504 .condpart35 1708 c504 a9 d0 LDA #208 1709 c506 8d 50 01 STA power_upX 1710 c509 8d 51 01 STA power_upY 1711 c50c a9 01 LDA #1 1712 c50e 8d 4d 01 STA playerFlag 1713 c511 a9 01 lda #1 1714 c513 85 de sta sfxschedulelock 1715 c515 a9 a0 lda #sfx_bling 1718 c51b 85 e1 sta sfxinstrumenthi 1719 c51d a9 00 lda #0 1720 c51f 85 e2 sta sfxpitchoffset ; no pitch modification 1721 c521 85 e3 sta sfxnoteindex ; not a musical note 1722 c523 20 4c f2 jsr schedulesfx 1723 c526 a9 00 lda #0 1724 c528 85 de sta sfxschedulelock 1725 c52a .skipL0133 1726 c52a .L0134 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy01_X , enemy01_Y , 8 , 16 ) then enemy01_X = 200 : enemy01_Y = 200 : playerFlag = 1 : lives = lives - 1 : playsfx sfx_explosion : goto lose_a_life 1727 c52a 1728 c52a 1729 c52a 18 clc ; one clc only. If we overflow we're screwed anyway. 1730 c52b ad 42 01 lda playerY 1731 c52e 69 20 adc #((256-WSCREENHEIGHT)/2) 1732 c530 a8 tay 1733 c531 a9 07 lda #(8-1) 1734 c533 85 44 sta temp3 1735 c535 a9 0f lda #(16-1) 1736 c537 85 45 sta temp4 1737 c539 ad 57 01 lda enemy01_X 1738 c53c 69 30 adc #48 1739 c53e 85 46 sta temp5 1740 c540 ad 58 01 lda enemy01_Y 1741 c543 69 20 adc #((256-WSCREENHEIGHT)/2) 1742 c545 85 47 sta temp6 1743 c547 a9 07 lda #(8-1) 1744 c549 85 48 sta temp7 1745 c54b a9 0f lda #(16-1) 1746 c54d 85 49 sta temp8 1747 c54f ad 41 01 lda playerX 1748 c552 69 30 adc #48 1749 c554 20 ca f3 jsr boxcollision 1750 c557 1751 c557 90 32 BCC .skipL0134 1752 c559 .condpart36 1753 c559 a9 c8 LDA #200 1754 c55b 8d 57 01 STA enemy01_X 1755 c55e 8d 58 01 STA enemy01_Y 1756 c561 a9 01 LDA #1 1757 c563 8d 4d 01 STA playerFlag 1758 c566 ad 64 01 LDA lives 1759 c569 38 SEC 1760 c56a e9 01 SBC #1 1761 c56c 8d 64 01 STA lives 1762 c56f a9 01 lda #1 1763 c571 85 de sta sfxschedulelock 1764 c573 a9 30 lda #sfx_explosion 1767 c579 85 e1 sta sfxinstrumenthi 1768 c57b a9 00 lda #0 1769 c57d 85 e2 sta sfxpitchoffset ; no pitch modification 1770 c57f 85 e3 sta sfxnoteindex ; not a musical note 1771 c581 20 4c f2 jsr schedulesfx 1772 c584 a9 00 lda #0 1773 c586 85 de sta sfxschedulelock 1774 c588 4c 13 d8 jmp .lose_a_life 1775 c58b 1776 c58b .skipL0134 1777 c58b .L0135 ;; 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 1778 c58b 1779 c58b 1780 c58b 18 clc ; one clc only. If we overflow we're screwed anyway. 1781 c58c ad 42 01 lda playerY 1782 c58f 69 20 adc #((256-WSCREENHEIGHT)/2) 1783 c591 a8 tay 1784 c592 a9 07 lda #(8-1) 1785 c594 85 44 sta temp3 1786 c596 a9 0f lda #(16-1) 1787 c598 85 45 sta temp4 1788 c59a ad 60 01 lda extra_shipX 1789 c59d 69 30 adc #48 1790 c59f 85 46 sta temp5 1791 c5a1 ad 61 01 lda extra_shipY 1792 c5a4 69 20 adc #((256-WSCREENHEIGHT)/2) 1793 c5a6 85 47 sta temp6 1794 c5a8 a9 07 lda #(8-1) 1795 c5aa 85 48 sta temp7 1796 c5ac a9 07 lda #(8-1) 1797 c5ae 85 49 sta temp8 1798 c5b0 ad 41 01 lda playerX 1799 c5b3 69 30 adc #48 1800 c5b5 20 ca f3 jsr boxcollision 1801 c5b8 1802 c5b8 90 2f BCC .skipL0135 1803 c5ba .condpart37 1804 c5ba a9 c8 LDA #200 1805 c5bc 8d 60 01 STA extra_shipX 1806 c5bf 8d 61 01 STA extra_shipY 1807 c5c2 a9 01 LDA #1 1808 c5c4 8d 62 01 STA extra_shipFlag 1809 c5c7 ad 64 01 LDA lives 1810 c5ca 18 CLC 1811 c5cb 69 01 ADC #1 1812 c5cd 8d 64 01 STA lives 1813 c5d0 a9 01 lda #1 1814 c5d2 85 de sta sfxschedulelock 1815 c5d4 a9 a0 lda #sfx_bling 1818 c5da 85 e1 sta sfxinstrumenthi 1819 c5dc a9 00 lda #0 1820 c5de 85 e2 sta sfxpitchoffset ; no pitch modification 1821 c5e0 85 e3 sta sfxnoteindex ; not a musical note 1822 c5e2 20 4c f2 jsr schedulesfx 1823 c5e5 a9 00 lda #0 1824 c5e7 85 de sta sfxschedulelock 1825 c5e9 .skipL0135 1826 c5e9 .L0136 ;; if boxcollision ( bulletX , bulletY , 4 , 8 , enemy01_X , enemy01_Y , 8 , 16 ) then bulletX = - 8 : bulletY = 0 : enemy01_Flag = 1 1827 c5e9 1828 c5e9 1829 c5e9 18 clc ; one clc only. If we overflow we're screwed anyway. 1830 c5ea ad 49 01 lda bulletY 1831 c5ed 69 20 adc #((256-WSCREENHEIGHT)/2) 1832 c5ef a8 tay 1833 c5f0 a9 03 lda #(4-1) 1834 c5f2 85 44 sta temp3 1835 c5f4 a9 07 lda #(8-1) 1836 c5f6 85 45 sta temp4 1837 c5f8 ad 57 01 lda enemy01_X 1838 c5fb 69 30 adc #48 1839 c5fd 85 46 sta temp5 1840 c5ff ad 58 01 lda enemy01_Y 1841 c602 69 20 adc #((256-WSCREENHEIGHT)/2) 1842 c604 85 47 sta temp6 1843 c606 a9 07 lda #(8-1) 1844 c608 85 48 sta temp7 1845 c60a a9 0f lda #(16-1) 1846 c60c 85 49 sta temp8 1847 c60e ad 48 01 lda bulletX 1848 c611 69 30 adc #48 1849 c613 20 ca f3 jsr boxcollision 1850 c616 1851 c616 90 0f BCC .skipL0136 1852 c618 .condpart38 1853 c618 a9 f8 LDA #248 1854 c61a 8d 48 01 STA bulletX 1855 c61d a9 00 LDA #0 1856 c61f 8d 49 01 STA bulletY 1857 c622 a9 01 LDA #1 1858 c624 8d 59 01 STA enemy01_Flag 1859 c627 .skipL0136 1860 c627 . 1861 c627 ;; 1862 c627 1863 c627 .L0137 ;; 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 1864 c627 1865 c627 ad 57 01 LDA enemy01_X 1866 c62a cd 48 01 CMP bulletX 1867 c62d b0 63 BCS .skipL0137 1868 c62f .condpart39 1869 c62f ; complex condition detected 1870 c62f ; complex statement detected 1871 c62f ad 57 01 LDA enemy01_X 1872 c632 18 CLC 1873 c633 69 10 ADC #16 1874 c635 48 PHA 1875 c636 ba TSX 1876 c637 68 PLA 1877 c638 ad 48 01 LDA bulletX 1878 c63b dd 01 01 CMP $101,x 1879 c63e b0 52 BCS .skip39then 1880 c640 .condpart40 1881 c640 ad 58 01 LDA enemy01_Y 1882 c643 cd 49 01 CMP bulletY 1883 c646 b0 4a BCS .skip40then 1884 c648 .condpart41 1885 c648 ; complex condition detected 1886 c648 ; complex statement detected 1887 c648 ad 58 01 LDA enemy01_Y 1888 c64b 18 CLC 1889 c64c 69 10 ADC #16 1890 c64e 48 PHA 1891 c64f ba TSX 1892 c650 68 PLA 1893 c651 ad 49 01 LDA bulletY 1894 c654 dd 01 01 CMP $101,x 1895 c657 b0 39 BCS .skip41then 1896 c659 .condpart42 1897 c659 a9 01 LDA #1 1898 c65b 8d 59 01 STA enemy01_Flag 1899 c65e f8 SED 1900 c65f 18 CLC 1901 c660 ad a8 01 LDA score0+2 1902 c663 69 01 ADC #$01 1903 c665 8d a8 01 STA score0+2 1904 c668 ad a7 01 LDA score0+1 1905 c66b 69 00 ADC #$00 1906 c66d 8d a7 01 STA score0+1 1907 c670 ad a6 01 LDA score0 1908 c673 69 00 ADC #$00 1909 c675 8d a6 01 STA score0 1910 c678 d8 CLD 1911 c679 a9 01 lda #1 1912 c67b 85 de sta sfxschedulelock 1913 c67d a9 30 lda #sfx_explosion 1916 c683 85 e1 sta sfxinstrumenthi 1917 c685 a9 00 lda #0 1918 c687 85 e2 sta sfxpitchoffset ; no pitch modification 1919 c689 85 e3 sta sfxnoteindex ; not a musical note 1920 c68b 20 4c f2 jsr schedulesfx 1921 c68e a9 00 lda #0 1922 c690 85 de sta sfxschedulelock 1923 c692 .skip41then 1924 c692 .skip40then 1925 c692 .skip39then 1926 c692 .skipL0137 1927 c692 . 1928 c692 ;; 1929 c692 1930 c692 .L0138 ;; if enemy_shotX > 160 then enemy_shotX = enemy_shotX - 1 1931 c692 1932 c692 a9 a0 LDA #160 1933 c694 cd 4a 01 CMP enemy_shotX 1934 c697 b0 09 BCS .skipL0138 1935 c699 .condpart43 1936 c699 ad 4a 01 LDA enemy_shotX 1937 c69c 38 SEC 1938 c69d e9 01 SBC #1 1939 c69f 8d 4a 01 STA enemy_shotX 1940 c6a2 .skipL0138 1941 c6a2 .L0139 ;; if enemy_shotX < 1 then enemy_shotX = enemy_shotX + 1 1942 c6a2 1943 c6a2 ad 4a 01 LDA enemy_shotX 1944 c6a5 c9 01 CMP #1 1945 c6a7 b0 09 BCS .skipL0139 1946 c6a9 .condpart44 1947 c6a9 ad 4a 01 LDA enemy_shotX 1948 c6ac 18 CLC 1949 c6ad 69 01 ADC #1 1950 c6af 8d 4a 01 STA enemy_shotX 1951 c6b2 .skipL0139 1952 c6b2 .L0140 ;; if enemy_shotY > 191 then enemy_shotY = enemy_shotY - 1 1953 c6b2 1954 c6b2 a9 bf LDA #191 1955 c6b4 cd 4b 01 CMP enemy_shotY 1956 c6b7 b0 09 BCS .skipL0140 1957 c6b9 .condpart45 1958 c6b9 ad 4b 01 LDA enemy_shotY 1959 c6bc 38 SEC 1960 c6bd e9 01 SBC #1 1961 c6bf 8d 4b 01 STA enemy_shotY 1962 c6c2 .skipL0140 1963 c6c2 .L0141 ;; if enemy_shotY < 1 then enemy_shotY = enemy_shotY + 1 1964 c6c2 1965 c6c2 ad 4b 01 LDA enemy_shotY 1966 c6c5 c9 01 CMP #1 1967 c6c7 b0 09 BCS .skipL0141 1968 c6c9 .condpart46 1969 c6c9 ad 4b 01 LDA enemy_shotY 1970 c6cc 18 CLC 1971 c6cd 69 01 ADC #1 1972 c6cf 8d 4b 01 STA enemy_shotY 1973 c6d2 .skipL0141 1974 c6d2 .L0142 ;; if power_upX > 155 then power_upX = power_upX - 5 1975 c6d2 1976 c6d2 a9 9b LDA #155 1977 c6d4 cd 50 01 CMP power_upX 1978 c6d7 b0 09 BCS .skipL0142 1979 c6d9 .condpart47 1980 c6d9 ad 50 01 LDA power_upX 1981 c6dc 38 SEC 1982 c6dd e9 05 SBC #5 1983 c6df 8d 50 01 STA power_upX 1984 c6e2 .skipL0142 1985 c6e2 .L0143 ;; if power_upX < 1 then power_upX = power_upX + 5 1986 c6e2 1987 c6e2 ad 50 01 LDA power_upX 1988 c6e5 c9 01 CMP #1 1989 c6e7 b0 09 BCS .skipL0143 1990 c6e9 .condpart48 1991 c6e9 ad 50 01 LDA power_upX 1992 c6ec 18 CLC 1993 c6ed 69 05 ADC #5 1994 c6ef 8d 50 01 STA power_upX 1995 c6f2 .skipL0143 1996 c6f2 .L0144 ;; if power_upY > 191 then power_upY = power_upY - 5 1997 c6f2 1998 c6f2 a9 bf LDA #191 1999 c6f4 cd 51 01 CMP power_upY 2000 c6f7 b0 09 BCS .skipL0144 2001 c6f9 .condpart49 2002 c6f9 ad 51 01 LDA power_upY 2003 c6fc 38 SEC 2004 c6fd e9 05 SBC #5 2005 c6ff 8d 51 01 STA power_upY 2006 c702 .skipL0144 2007 c702 .L0145 ;; if power_upY < 1 then power_upY = power_upY + 5 2008 c702 2009 c702 ad 51 01 LDA power_upY 2010 c705 c9 01 CMP #1 2011 c707 b0 09 BCS .skipL0145 2012 c709 .condpart50 2013 c709 ad 51 01 LDA power_upY 2014 c70c 18 CLC 2015 c70d 69 05 ADC #5 2016 c70f 8d 51 01 STA power_upY 2017 c712 .skipL0145 2018 c712 .L0146 ;; if enemy01_X > 160 then enemy01_X = enemy01_X - 1 2019 c712 2020 c712 a9 a0 LDA #160 2021 c714 cd 57 01 CMP enemy01_X 2022 c717 b0 09 BCS .skipL0146 2023 c719 .condpart51 2024 c719 ad 57 01 LDA enemy01_X 2025 c71c 38 SEC 2026 c71d e9 01 SBC #1 2027 c71f 8d 57 01 STA enemy01_X 2028 c722 .skipL0146 2029 c722 .L0147 ;; if enemy01_X < 1 then enemy01_X = enemy01_X + 1 2030 c722 2031 c722 ad 57 01 LDA enemy01_X 2032 c725 c9 01 CMP #1 2033 c727 b0 09 BCS .skipL0147 2034 c729 .condpart52 2035 c729 ad 57 01 LDA enemy01_X 2036 c72c 18 CLC 2037 c72d 69 01 ADC #1 2038 c72f 8d 57 01 STA enemy01_X 2039 c732 .skipL0147 2040 c732 .L0148 ;; if enemy01_Y > 220 then enemy01_Y = enemy01_Y - 1 2041 c732 2042 c732 a9 dc LDA #220 2043 c734 cd 58 01 CMP enemy01_Y 2044 c737 b0 09 BCS .skipL0148 2045 c739 .condpart53 2046 c739 ad 58 01 LDA enemy01_Y 2047 c73c 38 SEC 2048 c73d e9 01 SBC #1 2049 c73f 8d 58 01 STA enemy01_Y 2050 c742 .skipL0148 2051 c742 .L0149 ;; if enemy01_Y < - 16 then enemy01_Y = enemy01_Y + 1 2052 c742 2053 c742 ; complex condition detected 2054 c742 a9 f0 LDA #240 2055 c744 48 PHA 2056 c745 ba TSX 2057 c746 68 PLA 2058 c747 ad 58 01 LDA enemy01_Y 2059 c74a dd 01 01 CMP $101,x 2060 c74d b0 09 BCS .skipL0149 2061 c74f .condpart54 2062 c74f ad 58 01 LDA enemy01_Y 2063 c752 18 CLC 2064 c753 69 01 ADC #1 2065 c755 8d 58 01 STA enemy01_Y 2066 c758 .skipL0149 2067 c758 .L0150 ;; if extra_shipX > 160 then extra_shipX = extra_shipX - 1 2068 c758 2069 c758 a9 a0 LDA #160 2070 c75a cd 60 01 CMP extra_shipX 2071 c75d b0 09 BCS .skipL0150 2072 c75f .condpart55 2073 c75f ad 60 01 LDA extra_shipX 2074 c762 38 SEC 2075 c763 e9 01 SBC #1 2076 c765 8d 60 01 STA extra_shipX 2077 c768 .skipL0150 2078 c768 .L0151 ;; if extra_shipX < 1 then extra_shipX = extra_shipX + 1 2079 c768 2080 c768 ad 60 01 LDA extra_shipX 2081 c76b c9 01 CMP #1 2082 c76d b0 09 BCS .skipL0151 2083 c76f .condpart56 2084 c76f ad 60 01 LDA extra_shipX 2085 c772 18 CLC 2086 c773 69 01 ADC #1 2087 c775 8d 60 01 STA extra_shipX 2088 c778 .skipL0151 2089 c778 .L0152 ;; if extra_shipY > 191 then extra_shipY = extra_shipY - 1 2090 c778 2091 c778 a9 bf LDA #191 2092 c77a cd 61 01 CMP extra_shipY 2093 c77d b0 09 BCS .skipL0152 2094 c77f .condpart57 2095 c77f ad 61 01 LDA extra_shipY 2096 c782 38 SEC 2097 c783 e9 01 SBC #1 2098 c785 8d 61 01 STA extra_shipY 2099 c788 .skipL0152 2100 c788 .L0153 ;; if extra_shipY < 1 then extra_shipY = extra_shipY + 1 2101 c788 2102 c788 ad 61 01 LDA extra_shipY 2103 c78b c9 01 CMP #1 2104 c78d b0 09 BCS .skipL0153 2105 c78f .condpart58 2106 c78f ad 61 01 LDA extra_shipY 2107 c792 18 CLC 2108 c793 69 01 ADC #1 2109 c795 8d 61 01 STA extra_shipY 2110 c798 .skipL0153 2111 c798 . 2112 c798 ;; 2113 c798 2114 c798 .L0154 ;; if rDirection = 0 then enemy_shotX = enemy_shotX + rMovement1 : enemy_shotY = enemy_shotY + rMovement2 2115 c798 2116 c798 ad 4f 01 LDA rDirection 2117 c79b c9 00 CMP #0 2118 c79d d0 14 BNE .skipL0154 2119 c79f .condpart59 2120 c79f ad 4a 01 LDA enemy_shotX 2121 c7a2 18 CLC 2122 c7a3 6d 4e 01 ADC rMovement1 2123 c7a6 8d 4a 01 STA enemy_shotX 2124 c7a9 ad 4b 01 LDA enemy_shotY 2125 c7ac 18 CLC 2126 c7ad 6d 53 01 ADC rMovement2 2127 c7b0 8d 4b 01 STA enemy_shotY 2128 c7b3 .skipL0154 2129 c7b3 .L0155 ;; if rDirection = 1 then enemy_shotX = enemy_shotX + rMovement3 : enemy_shotY = enemy_shotY + rMovement4 2130 c7b3 2131 c7b3 ad 4f 01 LDA rDirection 2132 c7b6 c9 01 CMP #1 2133 c7b8 d0 14 BNE .skipL0155 2134 c7ba .condpart60 2135 c7ba ad 4a 01 LDA enemy_shotX 2136 c7bd 18 CLC 2137 c7be 6d 5a 01 ADC rMovement3 2138 c7c1 8d 4a 01 STA enemy_shotX 2139 c7c4 ad 4b 01 LDA enemy_shotY 2140 c7c7 18 CLC 2141 c7c8 6d 5b 01 ADC rMovement4 2142 c7cb 8d 4b 01 STA enemy_shotY 2143 c7ce .skipL0155 2144 c7ce .L0156 ;; if rDirection = 2 then enemy_shotX = enemy_shotX + rMovement5 : enemy_shotY = enemy_shotY + rMovement6 2145 c7ce 2146 c7ce ad 4f 01 LDA rDirection 2147 c7d1 c9 02 CMP #2 2148 c7d3 d0 14 BNE .skipL0156 2149 c7d5 .condpart61 2150 c7d5 ad 4a 01 LDA enemy_shotX 2151 c7d8 18 CLC 2152 c7d9 6d 5c 01 ADC rMovement5 2153 c7dc 8d 4a 01 STA enemy_shotX 2154 c7df ad 4b 01 LDA enemy_shotY 2155 c7e2 18 CLC 2156 c7e3 6d 5d 01 ADC rMovement6 2157 c7e6 8d 4b 01 STA enemy_shotY 2158 c7e9 .skipL0156 2159 c7e9 .L0157 ;; if rDirection = 3 then enemy_shotX = enemy_shotX + rMovement4 : enemy_shotY = enemy_shotY + rMovement2 2160 c7e9 2161 c7e9 ad 4f 01 LDA rDirection 2162 c7ec c9 03 CMP #3 2163 c7ee d0 14 BNE .skipL0157 2164 c7f0 .condpart62 2165 c7f0 ad 4a 01 LDA enemy_shotX 2166 c7f3 18 CLC 2167 c7f4 6d 5b 01 ADC rMovement4 2168 c7f7 8d 4a 01 STA enemy_shotX 2169 c7fa ad 4b 01 LDA enemy_shotY 2170 c7fd 18 CLC 2171 c7fe 6d 53 01 ADC rMovement2 2172 c801 8d 4b 01 STA enemy_shotY 2173 c804 .skipL0157 2174 c804 . 2175 c804 ;; 2176 c804 2177 c804 .L0158 ;; if rDirection = 0 then power_upX = power_upX + rMovement5 : power_upY = power_upY + rMovement2 2178 c804 2179 c804 ad 4f 01 LDA rDirection 2180 c807 c9 00 CMP #0 2181 c809 d0 14 BNE .skipL0158 2182 c80b .condpart63 2183 c80b ad 50 01 LDA power_upX 2184 c80e 18 CLC 2185 c80f 6d 5c 01 ADC rMovement5 2186 c812 8d 50 01 STA power_upX 2187 c815 ad 51 01 LDA power_upY 2188 c818 18 CLC 2189 c819 6d 53 01 ADC rMovement2 2190 c81c 8d 51 01 STA power_upY 2191 c81f .skipL0158 2192 c81f .L0159 ;; if rDirection = 1 then power_upX = power_upX + rMovement3 : power_upY = power_upY + rMovement4 2193 c81f 2194 c81f ad 4f 01 LDA rDirection 2195 c822 c9 01 CMP #1 2196 c824 d0 14 BNE .skipL0159 2197 c826 .condpart64 2198 c826 ad 50 01 LDA power_upX 2199 c829 18 CLC 2200 c82a 6d 5a 01 ADC rMovement3 2201 c82d 8d 50 01 STA power_upX 2202 c830 ad 51 01 LDA power_upY 2203 c833 18 CLC 2204 c834 6d 5b 01 ADC rMovement4 2205 c837 8d 51 01 STA power_upY 2206 c83a .skipL0159 2207 c83a .L0160 ;; if rDirection = 2 then power_upX = power_upX + rMovement1 : power_upY = power_upY + rMovement6 2208 c83a 2209 c83a ad 4f 01 LDA rDirection 2210 c83d c9 02 CMP #2 2211 c83f d0 14 BNE .skipL0160 2212 c841 .condpart65 2213 c841 ad 50 01 LDA power_upX 2214 c844 18 CLC 2215 c845 6d 4e 01 ADC rMovement1 2216 c848 8d 50 01 STA power_upX 2217 c84b ad 51 01 LDA power_upY 2218 c84e 18 CLC 2219 c84f 6d 5d 01 ADC rMovement6 2220 c852 8d 51 01 STA power_upY 2221 c855 .skipL0160 2222 c855 . 2223 c855 ;; 2224 c855 2225 c855 .L0161 ;; if rDirection = 0 then enemy01_X = enemy01_X + rMovement4 : enemy01_Y = enemy01_Y + rMovement2 2226 c855 2227 c855 ad 4f 01 LDA rDirection 2228 c858 c9 00 CMP #0 2229 c85a d0 14 BNE .skipL0161 2230 c85c .condpart66 2231 c85c ad 57 01 LDA enemy01_X 2232 c85f 18 CLC 2233 c860 6d 5b 01 ADC rMovement4 2234 c863 8d 57 01 STA enemy01_X 2235 c866 ad 58 01 LDA enemy01_Y 2236 c869 18 CLC 2237 c86a 6d 53 01 ADC rMovement2 2238 c86d 8d 58 01 STA enemy01_Y 2239 c870 .skipL0161 2240 c870 .L0162 ;; if rDirection = 1 then enemy01_X = enemy01_X + rMovement3 : enemy01_Y = enemy01_Y + rMovement4 2241 c870 2242 c870 ad 4f 01 LDA rDirection 2243 c873 c9 01 CMP #1 2244 c875 d0 14 BNE .skipL0162 2245 c877 .condpart67 2246 c877 ad 57 01 LDA enemy01_X 2247 c87a 18 CLC 2248 c87b 6d 5a 01 ADC rMovement3 2249 c87e 8d 57 01 STA enemy01_X 2250 c881 ad 58 01 LDA enemy01_Y 2251 c884 18 CLC 2252 c885 6d 5b 01 ADC rMovement4 2253 c888 8d 58 01 STA enemy01_Y 2254 c88b .skipL0162 2255 c88b .L0163 ;; if rDirection = 2 then enemy01_X = enemy01_X + rMovement6 : enemy01_Y = enemy01_Y + rMovement6 2256 c88b 2257 c88b ad 4f 01 LDA rDirection 2258 c88e c9 02 CMP #2 2259 c890 d0 14 BNE .skipL0163 2260 c892 .condpart68 2261 c892 ad 57 01 LDA enemy01_X 2262 c895 18 CLC 2263 c896 6d 5d 01 ADC rMovement6 2264 c899 8d 57 01 STA enemy01_X 2265 c89c ad 58 01 LDA enemy01_Y 2266 c89f 18 CLC 2267 c8a0 6d 5d 01 ADC rMovement6 2268 c8a3 8d 58 01 STA enemy01_Y 2269 c8a6 .skipL0163 2270 c8a6 . 2271 c8a6 ;; 2272 c8a6 2273 c8a6 .L0164 ;; if rDirection = 0 then extra_shipX = extra_shipX + rMovement5 : extra_shipY = extra_shipY + rMovement2 2274 c8a6 2275 c8a6 ad 4f 01 LDA rDirection 2276 c8a9 c9 00 CMP #0 2277 c8ab d0 14 BNE .skipL0164 2278 c8ad .condpart69 2279 c8ad ad 60 01 LDA extra_shipX 2280 c8b0 18 CLC 2281 c8b1 6d 5c 01 ADC rMovement5 2282 c8b4 8d 60 01 STA extra_shipX 2283 c8b7 ad 61 01 LDA extra_shipY 2284 c8ba 18 CLC 2285 c8bb 6d 53 01 ADC rMovement2 2286 c8be 8d 61 01 STA extra_shipY 2287 c8c1 .skipL0164 2288 c8c1 . 2289 c8c1 ;; 2290 c8c1 2291 c8c1 .L0165 ;; if playerFlag = 1 && explosion_aniframe = 1 then playsfx sfx_explosion 2292 c8c1 2293 c8c1 ad 4d 01 LDA playerFlag 2294 c8c4 c9 01 CMP #1 2295 c8c6 d0 20 BNE .skipL0165 2296 c8c8 .condpart70 2297 c8c8 ad 63 01 LDA explosion_aniframe 2298 c8cb c9 01 CMP #1 2299 c8cd d0 19 BNE .skip70then 2300 c8cf .condpart71 2301 c8cf a9 01 lda #1 2302 c8d1 85 de sta sfxschedulelock 2303 c8d3 a9 30 lda #sfx_explosion 2306 c8d9 85 e1 sta sfxinstrumenthi 2307 c8db a9 00 lda #0 2308 c8dd 85 e2 sta sfxpitchoffset ; no pitch modification 2309 c8df 85 e3 sta sfxnoteindex ; not a musical note 2310 c8e1 20 4c f2 jsr schedulesfx 2311 c8e4 a9 00 lda #0 2312 c8e6 85 de sta sfxschedulelock 2313 c8e8 .skip70then 2314 c8e8 .skipL0165 2315 c8e8 .L0166 ;; if playerFlag = 1 then enemy_shotSlowdown = enemy_shotSlowdown + 1 2316 c8e8 2317 c8e8 ad 4d 01 LDA playerFlag 2318 c8eb c9 01 CMP #1 2319 c8ed d0 09 BNE .skipL0166 2320 c8ef .condpart72 2321 c8ef ad 56 01 LDA enemy_shotSlowdown 2322 c8f2 18 CLC 2323 c8f3 69 01 ADC #1 2324 c8f5 8d 56 01 STA enemy_shotSlowdown 2325 c8f8 .skipL0166 2326 c8f8 .L0167 ;; if playerFlag = 1 && enemy_shotSlowdown = 8 then enemy_shotSlowdown = 0 2327 c8f8 2328 c8f8 ad 4d 01 LDA playerFlag 2329 c8fb c9 01 CMP #1 2330 c8fd d0 0c BNE .skipL0167 2331 c8ff .condpart73 2332 c8ff ad 56 01 LDA enemy_shotSlowdown 2333 c902 c9 08 CMP #8 2334 c904 d0 05 BNE .skip73then 2335 c906 .condpart74 2336 c906 a9 00 LDA #0 2337 c908 8d 56 01 STA enemy_shotSlowdown 2338 c90b .skip73then 2339 c90b .skipL0167 2340 c90b .L0168 ;; if playerFlag = 1 && enemy_shotSlowdown = 2 then explosion_aniframe = explosion_aniframe + 1 2341 c90b 2342 c90b ad 4d 01 LDA playerFlag 2343 c90e c9 01 CMP #1 2344 c910 d0 10 BNE .skipL0168 2345 c912 .condpart75 2346 c912 ad 56 01 LDA enemy_shotSlowdown 2347 c915 c9 02 CMP #2 2348 c917 d0 09 BNE .skip75then 2349 c919 .condpart76 2350 c919 ad 63 01 LDA explosion_aniframe 2351 c91c 18 CLC 2352 c91d 69 01 ADC #1 2353 c91f 8d 63 01 STA explosion_aniframe 2354 c922 .skip75then 2355 c922 .skipL0168 2356 c922 .L0169 ;; if playerFlag = 1 && explosion_aniframe > 11 then explosion_aniframe = 200 2357 c922 2358 c922 ad 4d 01 LDA playerFlag 2359 c925 c9 01 CMP #1 2360 c927 d0 0c BNE .skipL0169 2361 c929 .condpart77 2362 c929 a9 0b LDA #11 2363 c92b cd 63 01 CMP explosion_aniframe 2364 c92e b0 05 BCS .skip77then 2365 c930 .condpart78 2366 c930 a9 c8 LDA #200 2367 c932 8d 63 01 STA explosion_aniframe 2368 c935 .skip77then 2369 c935 .skipL0169 2370 c935 . 2371 c935 ;; 2372 c935 2373 c935 .L0170 ;; plotsprite vertical_shooting_ship 0 playerX playerY 2374 c935 2375 c935 a9 2d lda #vertical_shooting_ship 2379 c93b 85 43 sta temp2 2380 c93d 2381 c93d a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 2382 c93f 85 44 sta temp3 2383 c941 2384 c941 ad 41 01 lda playerX 2385 c944 85 45 sta temp4 2386 c946 2387 c946 ad 42 01 lda playerY 2388 c949 2389 c949 85 46 sta temp5 2390 c94b 2391 c94b a9 40 lda #(vertical_shooting_ship_mode|%01000000) 2392 c94d 85 47 sta temp6 2393 c94f 2394 c94f 20 94 f2 jsr plotsprite 2395 c952 ; +tall sprite replot 2396 c952 18 clc 2397 c953 a5 42 lda temp1 2398 c955 69 02 adc #vertical_shooting_ship_width 2399 c957 85 42 sta temp1 2400 c959 a5 46 lda temp5 2401 c95b 69 08 adc #WZONEHEIGHT 2402 c95d 85 46 sta temp5 2403 c95f 20 94 f2 jsr plotsprite 2404 c962 .L0171 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 2405 c962 2406 c962 a9 31 lda #vertical_shooting_bullet 2410 c968 85 43 sta temp2 2411 c96a 2412 c96a a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 2413 c96c 85 44 sta temp3 2414 c96e 2415 c96e ad 48 01 lda bulletX 2416 c971 85 45 sta temp4 2417 c973 2418 c973 ad 49 01 lda bulletY 2419 c976 2420 c976 85 46 sta temp5 2421 c978 2422 c978 a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 2423 c97a 85 47 sta temp6 2424 c97c 2425 c97c 20 94 f2 jsr plotsprite 2426 c97f .L0172 ;; plotsprite vertical_shooting_enemyshot 2 enemy_shotX enemy_shotY 2427 c97f 2428 c97f a9 32 lda #vertical_shooting_enemyshot 2432 c985 85 43 sta temp2 2433 c987 2434 c987 a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 2435 c989 85 44 sta temp3 2436 c98b 2437 c98b ad 4a 01 lda enemy_shotX 2438 c98e 85 45 sta temp4 2439 c990 2440 c990 ad 4b 01 lda enemy_shotY 2441 c993 2442 c993 85 46 sta temp5 2443 c995 2444 c995 a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 2445 c997 85 47 sta temp6 2446 c999 2447 c999 20 94 f2 jsr plotsprite 2448 c99c .L0173 ;; plotsprite vertical_shooting_powerup 3 power_upX power_upY 2449 c99c 2450 c99c a9 33 lda #vertical_shooting_powerup 2454 c9a2 85 43 sta temp2 2455 c9a4 2456 c9a4 a9 7e lda #(96|vertical_shooting_powerup_width_twoscompliment) 2457 c9a6 85 44 sta temp3 2458 c9a8 2459 c9a8 ad 50 01 lda power_upX 2460 c9ab 85 45 sta temp4 2461 c9ad 2462 c9ad ad 51 01 lda power_upY 2463 c9b0 2464 c9b0 85 46 sta temp5 2465 c9b2 2466 c9b2 a9 40 lda #(vertical_shooting_powerup_mode|%01000000) 2467 c9b4 85 47 sta temp6 2468 c9b6 2469 c9b6 20 94 f2 jsr plotsprite 2470 c9b9 .L0174 ;; plotsprite vertical_shooting_enemy01 2 enemy01_X enemy01_Y 2471 c9b9 2472 c9b9 a9 35 lda #vertical_shooting_enemy01 2476 c9bf 85 43 sta temp2 2477 c9c1 2478 c9c1 a9 5e lda #(64|vertical_shooting_enemy01_width_twoscompliment) 2479 c9c3 85 44 sta temp3 2480 c9c5 2481 c9c5 ad 57 01 lda enemy01_X 2482 c9c8 85 45 sta temp4 2483 c9ca 2484 c9ca ad 58 01 lda enemy01_Y 2485 c9cd 2486 c9cd 85 46 sta temp5 2487 c9cf 2488 c9cf a9 40 lda #(vertical_shooting_enemy01_mode|%01000000) 2489 c9d1 85 47 sta temp6 2490 c9d3 2491 c9d3 20 94 f2 jsr plotsprite 2492 c9d6 ; +tall sprite replot 2493 c9d6 18 clc 2494 c9d7 a5 42 lda temp1 2495 c9d9 69 02 adc #vertical_shooting_enemy01_width 2496 c9db 85 42 sta temp1 2497 c9dd a5 46 lda temp5 2498 c9df 69 08 adc #WZONEHEIGHT 2499 c9e1 85 46 sta temp5 2500 c9e3 20 94 f2 jsr plotsprite 2501 c9e6 .L0175 ;; plotsprite vertical_shooting_1up 0 extra_shipX extra_shipY 2502 c9e6 2503 c9e6 a9 43 lda #vertical_shooting_1up 2507 c9ec 85 43 sta temp2 2508 c9ee 2509 c9ee a9 1e lda #(0|vertical_shooting_1up_width_twoscompliment) 2510 c9f0 85 44 sta temp3 2511 c9f2 2512 c9f2 ad 60 01 lda extra_shipX 2513 c9f5 85 45 sta temp4 2514 c9f7 2515 c9f7 ad 61 01 lda extra_shipY 2516 c9fa 2517 c9fa 85 46 sta temp5 2518 c9fc 2519 c9fc a9 40 lda #(vertical_shooting_1up_mode|%01000000) 2520 c9fe 85 47 sta temp6 2521 ca00 2522 ca00 20 94 f2 jsr plotsprite 2523 ca03 .L0176 ;; plotsprite vertical_shooting_explosion_01 3 playerX playerY explosion_aniframe 2524 ca03 2525 ca03 a9 45 lda #vertical_shooting_explosion_01 2537 ca14 85 43 sta temp2 2538 ca16 2539 ca16 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2540 ca18 85 44 sta temp3 2541 ca1a 2542 ca1a ad 41 01 lda playerX 2543 ca1d 85 45 sta temp4 2544 ca1f 2545 ca1f ad 42 01 lda playerY 2546 ca22 85 46 sta temp5 2547 ca24 2548 ca24 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2549 ca26 85 47 sta temp6 2550 ca28 2551 ca28 20 94 f2 jsr plotsprite 2552 ca2b ; +tall sprite replot 2553 ca2b 18 clc 2554 ca2c a5 42 lda temp1 2555 ca2e 69 02 adc #vertical_shooting_explosion_01_width 2556 ca30 85 42 sta temp1 2557 ca32 a5 46 lda temp5 2558 ca34 69 08 adc #WZONEHEIGHT 2559 ca36 85 46 sta temp5 2560 ca38 20 94 f2 jsr plotsprite 2561 ca3b .L0177 ;; plotsprite vertical_shooting_explosion_01 3 enemy01_X enemy01_Y explosion_aniframe 2562 ca3b 2563 ca3b a9 45 lda #vertical_shooting_explosion_01 2575 ca4c 85 43 sta temp2 2576 ca4e 2577 ca4e a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2578 ca50 85 44 sta temp3 2579 ca52 2580 ca52 ad 57 01 lda enemy01_X 2581 ca55 85 45 sta temp4 2582 ca57 2583 ca57 ad 58 01 lda enemy01_Y 2584 ca5a 85 46 sta temp5 2585 ca5c 2586 ca5c a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2587 ca5e 85 47 sta temp6 2588 ca60 2589 ca60 20 94 f2 jsr plotsprite 2590 ca63 ; +tall sprite replot 2591 ca63 18 clc 2592 ca64 a5 42 lda temp1 2593 ca66 69 02 adc #vertical_shooting_explosion_01_width 2594 ca68 85 42 sta temp1 2595 ca6a a5 46 lda temp5 2596 ca6c 69 08 adc #WZONEHEIGHT 2597 ca6e 85 46 sta temp5 2598 ca70 20 94 f2 jsr plotsprite 2599 ca73 .L0178 ;; plotvalue vertical_shooting_font 0 score0 6 25 1 2600 ca73 2601 ca73 a9 00 lda #vertical_shooting_font 2605 ca79 85 43 sta temp2 2606 ca7b 2607 ca7b ad 06 21 lda charactermode 2608 ca7e 85 4a sta temp9 2609 ca80 a9 60 lda #(vertical_shooting_font_mode | %01100000) 2610 ca82 8d 06 21 sta charactermode 2611 ca85 a9 1a lda #26 ; width in two's complement 2612 ca87 09 00 ora #0 ; palette left shifted 5 bits 2613 ca89 85 44 sta temp3 2614 ca8b a9 19 lda #25 2615 ca8d 85 45 sta temp4 2616 ca8f 2617 ca8f a9 01 lda #1 2618 ca91 85 46 sta temp5 2619 ca93 2620 ca93 a9 06 lda #6 2621 ca95 85 47 sta temp6 2622 ca97 2623 ca97 a9 a6 lda #score0 2627 ca9d 85 49 sta temp8 2628 ca9f 2629 ca9f 20 82 f3 jsr plotvalue 2630 ca9f 00 01 USED_PLOTVALUE = 1 2631 caa2 a5 4a lda temp9 2632 caa4 8d 06 21 sta charactermode 2633 caa7 .L0179 ;; plotvalue vertical_shooting_font 0 score1 1 153 1 2634 caa7 2635 caa7 a9 00 lda #vertical_shooting_font 2639 caad 85 43 sta temp2 2640 caaf 2641 caaf ad 06 21 lda charactermode 2642 cab2 85 4a sta temp9 2643 cab4 a9 60 lda #(vertical_shooting_font_mode | %01100000) 2644 cab6 8d 06 21 sta charactermode 2645 cab9 a9 1f lda #31 ; width in two's complement 2646 cabb 09 00 ora #0 ; palette left shifted 5 bits 2647 cabd 85 44 sta temp3 2648 cabf a9 99 lda #153 2649 cac1 85 45 sta temp4 2650 cac3 2651 cac3 a9 01 lda #1 2652 cac5 85 46 sta temp5 2653 cac7 2654 cac7 a9 01 lda #1 2655 cac9 85 47 sta temp6 2656 cacb 2657 cacb a9 a9 lda #score1 2661 cad1 85 49 sta temp8 2662 cad3 2663 cad3 20 82 f3 jsr plotvalue 2664 cad3 00 01 USED_PLOTVALUE = 1 2665 cad6 a5 4a lda temp9 2666 cad8 8d 06 21 sta charactermode 2667 cadb .L0180 ;; if playerFlag = 1 then plotsprite vertical_shooting_explosion_01 3 playerX playerY explosion_aniframe 2668 cadb 2669 cadb ad 4d 01 LDA playerFlag 2670 cade c9 01 CMP #1 2671 cae0 d0 38 BNE .skipL0180 2672 cae2 .condpart79 2673 cae2 a9 45 lda #vertical_shooting_explosion_01 2685 caf3 85 43 sta temp2 2686 caf5 2687 caf5 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2688 caf7 85 44 sta temp3 2689 caf9 2690 caf9 ad 41 01 lda playerX 2691 cafc 85 45 sta temp4 2692 cafe 2693 cafe ad 42 01 lda playerY 2694 cb01 85 46 sta temp5 2695 cb03 2696 cb03 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2697 cb05 85 47 sta temp6 2698 cb07 2699 cb07 20 94 f2 jsr plotsprite 2700 cb0a ; +tall sprite replot 2701 cb0a 18 clc 2702 cb0b a5 42 lda temp1 2703 cb0d 69 02 adc #vertical_shooting_explosion_01_width 2704 cb0f 85 42 sta temp1 2705 cb11 a5 46 lda temp5 2706 cb13 69 08 adc #WZONEHEIGHT 2707 cb15 85 46 sta temp5 2708 cb17 20 94 f2 jsr plotsprite 2709 cb1a .skipL0180 2710 cb1a .L0181 ;; if enemy01_Flag = 1 then plotsprite vertical_shooting_explosion_01 3 enemy01_X enemy01_Y explosion_aniframe 2711 cb1a 2712 cb1a ad 59 01 LDA enemy01_Flag 2713 cb1d c9 01 CMP #1 2714 cb1f d0 38 BNE .skipL0181 2715 cb21 .condpart80 2716 cb21 a9 45 lda #vertical_shooting_explosion_01 2728 cb32 85 43 sta temp2 2729 cb34 2730 cb34 a9 7e lda #(96|vertical_shooting_explosion_01_width_twoscompliment) 2731 cb36 85 44 sta temp3 2732 cb38 2733 cb38 ad 57 01 lda enemy01_X 2734 cb3b 85 45 sta temp4 2735 cb3d 2736 cb3d ad 58 01 lda enemy01_Y 2737 cb40 85 46 sta temp5 2738 cb42 2739 cb42 a9 40 lda #(vertical_shooting_explosion_01_mode|%01000000) 2740 cb44 85 47 sta temp6 2741 cb46 2742 cb46 20 94 f2 jsr plotsprite 2743 cb49 ; +tall sprite replot 2744 cb49 18 clc 2745 cb4a a5 42 lda temp1 2746 cb4c 69 02 adc #vertical_shooting_explosion_01_width 2747 cb4e 85 42 sta temp1 2748 cb50 a5 46 lda temp5 2749 cb52 69 08 adc #WZONEHEIGHT 2750 cb54 85 46 sta temp5 2751 cb56 20 94 f2 jsr plotsprite 2752 cb59 .skipL0181 2753 cb59 .L0182 ;; drawscreen 2754 cb59 2755 cb59 20 b4 f0 jsr drawscreen 2756 cb5c . 2757 cb5c ;; 2758 cb5c 2759 cb5c .L0183 ;; goto mainloop 2760 cb5c 2761 cb5c 4c d4 c1 jmp .mainloop 2762 cb5f 2763 cb5f .L0184 ;; dmahole 0 2764 cb5f 2765 cb5f 4c 00 d8 jmp dmahole_0 2766 cb62 gameend 2767 cb62 DMAHOLEEND0 SET . 1182 bytes of ROM space left in the main area. 2768 cb62 echo " ",[($D000 - gameend)]d , "bytes of ROM space left in the main area." 2769 cb62 - if ($D000 - gameend) < 0 2770 cb62 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 2771 cb62 endif 2772 cb62 2773 d000 ORG $D000,0 ; ************* 2774 d000 2775 d000 atascii 2776 d000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2777 d020 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2778 d040 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000500000000000000 2779 d060 00 00 00 00* HEX 0000000000000000000000000000000000000000000005000000000000000000 2780 d080 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2781 d0a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2782 d0c0 00 00 00 00* HEX 0000000000000000000000000000155000000000055000000000000000000000 2783 d0e0 14 00 00 14* HEX 14000014000000000000000000000000000015400000 2784 d0f6 2785 d100 ORG $D100,0 ; ************* 2786 d100 2787 d100 ;atascii 2788 d100 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2789 d120 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2790 d140 00 00 01 40* HEX 0000014000001414014010140545000000541500000000000140000001401000 2791 d160 05 50 15 54* HEX 0550155415540550005005500550050005500540014001400014000014000140 2792 d180 05 54 14 14* HEX 0554141415500550154015541400055414141554055014141554140514140550 2793 d1a0 14 00 05 14* HEX 1400051414140550014015540140140514140140155401540014154000005555 2794 d1c0 00 00 05 54* HEX 0000055415500550055405500140001414140550001414140550140514140550 2795 d1e0 14 00 00 14* HEX 14000014140015500054055401400514141400501554 2796 d1f6 2797 d200 ORG $D200,0 ; ************* 2798 d200 2799 d200 ;atascii 2800 d200 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2801 d220 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2802 d240 00 00 00 00* HEX 0000000000005555155014141414000001500540141401400140000001401400 2803 d260 14 14 01 40* HEX 1414014005001414155414141414050014140050014001400050155405000000 2804 d280 14 00 15 54* HEX 1400155414141414145014001400141414140140141414501400140514541414 2805 d2a0 14 00 14 50* HEX 1400145014500014014014140550151514140140140001400050014000000000 2806 d2c0 00 00 14 14* HEX 0000141414141400141414000140055414140140001414500140144514141414 2807 d2e0 15 50 05 54* HEX 15500554140000140140141405500554055005540500 2808 d2f6 2809 d300 ORG $D300,0 ; ************* 2810 d300 2811 d300 ;atascii 2812 d300 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2813 d320 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2814 d340 00 00 01 40* HEX 0000014000001414001405001455000001400140055001400000000000000500 2815 d360 15 14 01 40* HEX 1514014001400050145000141414014014140014000000000140000001400140 2816 d380 14 54 14 14* HEX 1454141414141400141414001400145414140140001415401400144515541414 2817 d3a0 15 50 14 14* HEX 1550141415500014014014141414155505500140050001400140014014050000 2818 d3c0 00 00 05 54* HEX 0000055414141400141415540140141414140140001415400140155514141414 2819 d3e0 14 14 14 14* HEX 14141414140005500140141414141555014014140140 2820 d3f6 2821 d400 ORG $D400,0 ; ************* 2822 d400 2823 d400 ;atascii 2824 d400 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2825 d420 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2826 d440 00 00 01 40* HEX 0000014014141414055001400540014001400140555515540000155400000140 2827 d460 14 54 01 40* HEX 1454014000500140055015501550005005500554014001400500000000500050 2828 d480 14 54 14 14* HEX 1454141415501400141415501550140015540140001415401400155515541414 2829 d4a0 14 14 14 14* HEX 1414141414140550014014141414144505500550014001400500014005140000 2830 d4c0 01 40 00 14* HEX 0140001415501400055414140554141415500540001414500140155514141414 2831 d4e0 14 14 14 14* HEX 14141414141414000140141414141445055014140050 2832 d4f6 2833 d500 ORG $D500,0 ; ************* 2834 d500 2835 d500 ;atascii 2836 d500 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2837 d520 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2838 d540 00 00 01 40* HEX 0000014014145555140014500150014001500540055001400000000000000050 2839 d560 14 14 05 40* HEX 1414054014140050015014001400001414141414014001400140155401401414 2840 d580 14 14 05 50* HEX 1414055014141414145014001400140014140140001414501400151515141414 2841 d5a0 14 14 14 14* HEX 1414141414141400014014141414140514141414005001401400014001500000 2842 d5c0 01 40 05 50* HEX 0140055014000550001405500140055414000000000014000140141415500550 2843 d5e0 15 50 05 54* HEX 15500554155005541554141414141405141414141554 2844 d5f6 2845 d600 ORG $D600,0 ; ************* 2846 d600 2847 d600 ;atascii 2848 d600 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2849 d620 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2850 d640 00 00 01 40* HEX 0000014014141414055414140514014000541500141401400000000000000014 2851 d660 05 50 01 40* HEX 0550014005501554005015540550155405500550000000000050000005000550 2852 d680 05 50 01 40* HEX 0550014015500550154015541554055414141554001414141400140514140550 2853 d6a0 15 50 05 50* HEX 1550055015500550155414141414140514141414155401541000154000400000 2854 d6c0 01 40 00 00* HEX 0140000014000000001400000054000014000140001414000540000000000000 2855 d6e0 00 00 00 00* HEX 00000000000000000140000000000000000000000000 2856 d6f6 2857 d700 ORG $D700,0 ; ************* 2858 d700 2859 d700 ;atascii 2860 d700 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2861 d720 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2862 d740 00 00 00 00* HEX 0000000000000000014000000150000000000000000000000000000000000000 2863 d760 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000014000014000000 2864 d780 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2865 d7a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2866 d7c0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2867 d7e0 00 00 00 00* HEX 00000000000000000000000000000000000000000000 2868 d7f6 2869 d800 ORG $D800,0 ; ************* 2870 d800 dmahole_0 2871 d800 DMAHOLESTART0 SET . 2872 d800 . 2873 d800 ;; 2874 d800 2875 d800 .SetBulletHome 2876 d800 ;; SetBulletHome 2877 d800 2878 d800 .L0185 ;; bulletX = playerX + 4 : bulletY = playerY - 2 2879 d800 2880 d800 ad 41 01 LDA playerX 2881 d803 18 CLC 2882 d804 69 04 ADC #4 2883 d806 8d 48 01 STA bulletX 2884 d809 ad 42 01 LDA playerY 2885 d80c 38 SEC 2886 d80d e9 02 SBC #2 2887 d80f 8d 49 01 STA bulletY 2888 d812 .L0186 ;; return 2889 d812 2890 d812 60 RTS 2891 d813 . 2892 d813 ;; 2893 d813 2894 d813 .lose_a_life 2895 d813 ;; lose_a_life 2896 d813 2897 d813 .L0187 ;; lives = lives - 1 2898 d813 2899 d813 ad 64 01 LDA lives 2900 d816 38 SEC 2901 d817 e9 01 SBC #1 2902 d819 8d 64 01 STA lives 2903 d81c .L0188 ;; if enemy01_Flag <> 1 then enemy01_X = 32 : enemy01_Y = 0 2904 d81c 2905 d81c ad 59 01 LDA enemy01_Flag 2906 d81f c9 01 CMP #1 2907 d821 f0 0a BEQ .skipL0188 2908 d823 .condpart81 2909 d823 a9 20 LDA #32 2910 d825 8d 57 01 STA enemy01_X 2911 d828 a9 00 LDA #0 2912 d82a 8d 58 01 STA enemy01_Y 2913 d82d .skipL0188 2914 d82d .L0189 ;; if enemy_shotFlag <> 1 then enemy_shotX = 0 : enemy_shotY = 0 2915 d82d 2916 d82d ad 4c 01 LDA enemy_shotFlag 2917 d830 c9 01 CMP #1 2918 d832 f0 08 BEQ .skipL0189 2919 d834 .condpart82 2920 d834 a9 00 LDA #0 2921 d836 8d 4a 01 STA enemy_shotX 2922 d839 8d 4b 01 STA enemy_shotY 2923 d83c .skipL0189 2924 d83c .L0190 ;; if playerFlag = 1 && explosion_aniframe = 200 && lives > 0 then playerX = 80 : playerY = 144 : playerFlag = 0 : explosion_aniframe = 0 : goto main 2925 d83c 2926 d83c ad 4d 01 LDA playerFlag 2927 d83f c9 01 CMP #1 2928 d841 d0 23 BNE .skipL0190 2929 d843 .condpart83 2930 d843 ad 63 01 LDA explosion_aniframe 2931 d846 c9 c8 CMP #200 2932 d848 d0 1c BNE .skip83then 2933 d84a .condpart84 2934 d84a a9 00 LDA #0 2935 d84c cd 64 01 CMP lives 2936 d84f b0 15 BCS .skip84then 2937 d851 .condpart85 2938 d851 a9 50 LDA #80 2939 d853 8d 41 01 STA playerX 2940 d856 a9 90 LDA #144 2941 d858 8d 42 01 STA playerY 2942 d85b a9 00 LDA #0 2943 d85d 8d 4d 01 STA playerFlag 2944 d860 8d 63 01 STA explosion_aniframe 2945 d863 4c bf c1 jmp .main 2946 d866 2947 d866 .skip84then 2948 d866 .skip83then 2949 d866 .skipL0190 2950 d866 .L0191 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 2951 d866 2952 d866 a9 00 LDA #0 2953 d868 8d 44 01 STA joyposup 2954 d86b 8d 45 01 STA joyposdown 2955 d86e 8d 46 01 STA joyposleft 2956 d871 8d 47 01 STA joyposright 2957 d874 .L0192 ;; fire_debounce = 0 : bulletX = 0 : bulletY = 0 2958 d874 2959 d874 a9 00 LDA #0 2960 d876 8d 43 01 STA fire_debounce 2961 d879 8d 48 01 STA bulletX 2962 d87c 8d 49 01 STA bulletY 2963 d87f .L0193 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 2964 d87f 2965 d87f a9 00 LDA #0 2966 d881 8d 57 01 STA enemy01_X 2967 d884 8d 58 01 STA enemy01_Y 2968 d887 8d 59 01 STA enemy01_Flag 2969 d88a .L0194 ;; playerFlag = 0 : gameover_flag = 0 2970 d88a 2971 d88a a9 00 LDA #0 2972 d88c 8d 4d 01 STA playerFlag 2973 d88f 8d 5f 01 STA gameover_flag 2974 d892 . 2975 d892 ;; 2976 d892 2977 d892 . 2978 d892 ;; 2979 d892 2980 d892 .lose_a_lifeloop 2981 d892 ;; lose_a_lifeloop 2982 d892 2983 d892 .L0195 ;; restorescreen 2984 d892 2985 d892 20 92 f0 jsr restorescreen 2986 d895 .L0196 ;; plotvalue vertical_shooting_score_10_digits 3 score0 6 25 8 2987 d895 2988 d895 a9 39 lda #vertical_shooting_score_10_digits 2992 d89b 85 43 sta temp2 2993 d89d 2994 d89d ad 06 21 lda charactermode 2995 d8a0 85 4a sta temp9 2996 d8a2 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 2997 d8a4 8d 06 21 sta charactermode 2998 d8a7 a9 1a lda #26 ; width in two's complement 2999 d8a9 09 60 ora #96 ; palette left shifted 5 bits 3000 d8ab 85 44 sta temp3 3001 d8ad a9 19 lda #25 3002 d8af 85 45 sta temp4 3003 d8b1 3004 d8b1 a9 08 lda #8 3005 d8b3 85 46 sta temp5 3006 d8b5 3007 d8b5 a9 06 lda #6 3008 d8b7 85 47 sta temp6 3009 d8b9 3010 d8b9 a9 a6 lda #score0 3014 d8bf 85 49 sta temp8 3015 d8c1 3016 d8c1 20 82 f3 jsr plotvalue 3017 d8c1 00 01 USED_PLOTVALUE = 1 3018 d8c4 a5 4a lda temp9 3019 d8c6 8d 06 21 sta charactermode 3020 d8c9 .L0197 ;; plotvalue vertical_shooting_score_10_digits 3 score1 1 153 8 3021 d8c9 3022 d8c9 a9 39 lda #vertical_shooting_score_10_digits 3026 d8cf 85 43 sta temp2 3027 d8d1 3028 d8d1 ad 06 21 lda charactermode 3029 d8d4 85 4a sta temp9 3030 d8d6 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 3031 d8d8 8d 06 21 sta charactermode 3032 d8db a9 1f lda #31 ; width in two's complement 3033 d8dd 09 60 ora #96 ; palette left shifted 5 bits 3034 d8df 85 44 sta temp3 3035 d8e1 a9 99 lda #153 3036 d8e3 85 45 sta temp4 3037 d8e5 3038 d8e5 a9 08 lda #8 3039 d8e7 85 46 sta temp5 3040 d8e9 3041 d8e9 a9 01 lda #1 3042 d8eb 85 47 sta temp6 3043 d8ed 3044 d8ed a9 a9 lda #score1 3048 d8f3 85 49 sta temp8 3049 d8f5 3050 d8f5 20 82 f3 jsr plotvalue 3051 d8f5 00 01 USED_PLOTVALUE = 1 3052 d8f8 a5 4a lda temp9 3053 d8fa 8d 06 21 sta charactermode 3054 d8fd .L0198 ;; drawscreen 3055 d8fd 3056 d8fd 20 b4 f0 jsr drawscreen 3057 d900 .L0199 ;; if joy0fire then fire_debounce = 2 3058 d900 3059 d900 2c 02 21 bit sINPT1 3060 d903 10 05 BPL .skipL0199 3061 d905 .condpart86 3062 d905 a9 02 LDA #2 3063 d907 8d 43 01 STA fire_debounce 3064 d90a .skipL0199 3065 d90a .L0200 ;; if !joy0fire then fire_debounce = 1 3066 d90a 3067 d90a 2c 02 21 bit sINPT1 3068 d90d 30 05 BMI .skipL0200 3069 d90f .condpart87 3070 d90f a9 01 LDA #1 3071 d911 8d 43 01 STA fire_debounce 3072 d914 .skipL0200 3073 d914 .L0201 ;; if fire_debounce = 1 && lives > 0 then clearscreen : goto main 3074 d914 3075 d914 ad 43 01 LDA fire_debounce 3076 d917 c9 01 CMP #1 3077 d919 d0 0d BNE .skipL0201 3078 d91b .condpart88 3079 d91b a9 00 LDA #0 3080 d91d cd 64 01 CMP lives 3081 d920 b0 06 BCS .skip88then 3082 d922 .condpart89 3083 d922 20 80 f0 jsr clearscreen 3084 d925 4c bf c1 jmp .main 3085 d928 3086 d928 .skip88then 3087 d928 .skipL0201 3088 d928 .L0202 ;; if fire_debounce = 1 && lives < 1 then clearscreen : goto gameover 3089 d928 3090 d928 ad 43 01 LDA fire_debounce 3091 d92b c9 01 CMP #1 3092 d92d d0 0d BNE .skipL0202 3093 d92f .condpart90 3094 d92f ad 64 01 LDA lives 3095 d932 c9 01 CMP #1 3096 d934 b0 06 BCS .skip90then 3097 d936 .condpart91 3098 d936 20 80 f0 jsr clearscreen 3099 d939 4c 3f d9 jmp .gameover 3100 d93c 3101 d93c .skip90then 3102 d93c .skipL0202 3103 d93c .L0203 ;; goto lose_a_lifeloop 3104 d93c 3105 d93c 4c 92 d8 jmp .lose_a_lifeloop 3106 d93f 3107 d93f . 3108 d93f ;; 3109 d93f 3110 d93f .gameover 3111 d93f ;; gameover 3112 d93f 3113 d93f .L0204 ;; gameover_flag = 0 3114 d93f 3115 d93f a9 00 LDA #0 3116 d941 8d 5f 01 STA gameover_flag 3117 d944 .gameover_loop 3118 d944 ;; gameover_loop 3119 d944 3120 d944 .L0205 ;; if lives < 1 then gameover_flag = 1 : clearscreen 3121 d944 3122 d944 ad 64 01 LDA lives 3123 d947 c9 01 CMP #1 3124 d949 b0 08 BCS .skipL0205 3125 d94b .condpart92 3126 d94b a9 01 LDA #1 3127 d94d 8d 5f 01 STA gameover_flag 3128 d950 20 80 f0 jsr clearscreen 3129 d953 .skipL0205 3130 d953 .L0206 ;; plotchars 'Game^Over!' 0 40 16 3131 d953 3132 d953 4c 60 d9 JMP skipalphadata8 3133 d956 alphadata8 3134 d956 8e .byte.b (alphadata8 3149 d966 85 43 sta temp2 3150 d968 3151 d968 a9 16 lda #22 ; width in two's complement 3152 d96a 09 00 ora #0 ; palette left shifted 5 bits 3153 d96c 85 44 sta temp3 3154 d96e a9 28 lda #40 3155 d970 85 45 sta temp4 3156 d972 3157 d972 a9 10 lda #16 3158 d974 3159 d974 85 46 sta temp5 3160 d976 3161 d976 20 4d f3 jsr plotcharacters 3162 d979 .L0207 ;; if joy0fire then fire_debounce = 1 3163 d979 3164 d979 2c 02 21 bit sINPT1 3165 d97c 10 05 BPL .skipL0207 3166 d97e .condpart93 3167 d97e a9 01 LDA #1 3168 d980 8d 43 01 STA fire_debounce 3169 d983 .skipL0207 3170 d983 .L0208 ;; if !joy0fire then fire_debounce = 0 3171 d983 3172 d983 2c 02 21 bit sINPT1 3173 d986 30 05 BMI .skipL0208 3174 d988 .condpart94 3175 d988 a9 00 LDA #0 3176 d98a 8d 43 01 STA fire_debounce 3177 d98d .skipL0208 3178 d98d .L0209 ;; goto gameover_loop 3179 d98d 3180 d98d 4c 44 d9 jmp .gameover_loop 3181 d990 3182 d990 .L0210 ;; if fire_debounce = 1 then clearscreen : goto plot 3183 d990 3184 d990 ad 43 01 LDA fire_debounce 3185 d993 c9 01 CMP #1 3186 d995 d0 06 BNE .skipL0210 3187 d997 .condpart95 3188 d997 20 80 f0 jsr clearscreen 3189 d99a 4c 3d c0 jmp .plot 3190 d99d 3191 d99d .skipL0210 3192 d99d . 3193 d99d ;; 3194 d99d 3195 d99d .L0211 ;; data sfx_bling 3196 d99d 3197 d99d 4c d6 d9 JMP .skipL0211 3198 d9a0 sfx_bling 3199 d9a0 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 3200 d9a3 3201 d9a3 1c 04 07 .byte.b $1c,$04,$07 3202 d9a6 3203 d9a6 1b 04 07 .byte.b $1b,$04,$07 3204 d9a9 3205 d9a9 04 0f 05 .byte.b $04,$0f,$05 3206 d9ac 3207 d9ac 15 04 09 .byte.b $15,$04,$09 3208 d9af 3209 d9af 16 04 07 .byte.b $16,$04,$07 3210 d9b2 3211 d9b2 03 0f 04 .byte.b $03,$0f,$04 3212 d9b5 3213 d9b5 11 04 08 .byte.b $11,$04,$08 3214 d9b8 3215 d9b8 11 04 08 .byte.b $11,$04,$08 3216 d9bb 3217 d9bb 11 04 04 .byte.b $11,$04,$04 3218 d9be 3219 d9be 0e 04 09 .byte.b $0e,$04,$09 3220 d9c1 3221 d9c1 0e 04 07 .byte.b $0e,$04,$07 3222 d9c4 3223 d9c4 0e 04 04 .byte.b $0e,$04,$04 3224 d9c7 3225 d9c7 1c 04 07 .byte.b $1c,$04,$07 3226 d9ca 3227 d9ca 1b 04 05 .byte.b $1b,$04,$05 3228 d9cd 3229 d9cd 1c 04 04 .byte.b $1c,$04,$04 3230 d9d0 3231 d9d0 1b 04 02 .byte.b $1b,$04,$02 3232 d9d3 3233 d9d3 00 00 00 .byte.b $00,$00,$00 3234 d9d6 3235 d9d6 .skipL0211 3236 d9d6 00 a0 sfx_bling_lo = #sfx_bling 3238 d9d6 . 3239 d9d6 ;; 3240 d9d6 3241 d9d6 .L0212 ;; data sfx_pulsecannon 3242 d9d6 3243 d9d6 4c 2d da JMP .skipL0212 3244 d9d9 sfx_pulsecannon 3245 d9d9 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 3246 d9dc 3247 d9dc 1e 0c 0a .byte.b $1e,$0c,$0a ; first chunk of freq,channel,volume 3248 d9df 3249 d9df 07 06 0f .byte.b $07,$06,$0f 3250 d9e2 3251 d9e2 07 06 0f .byte.b $07,$06,$0f 3252 d9e5 3253 d9e5 1e 06 0f .byte.b $1e,$06,$0f 3254 d9e8 3255 d9e8 17 0c 0b .byte.b $17,$0c,$0b 3256 d9eb 3257 d9eb 1b 0c 0b .byte.b $1b,$0c,$0b 3258 d9ee 3259 d9ee 1e 0c 0f .byte.b $1e,$0c,$0f 3260 d9f1 3261 d9f1 07 06 0f .byte.b $07,$06,$0f 3262 d9f4 3263 d9f4 07 06 0f .byte.b $07,$06,$0f 3264 d9f7 3265 d9f7 1e 06 08 .byte.b $1e,$06,$08 3266 d9fa 3267 d9fa 17 0c 06 .byte.b $17,$0c,$06 3268 d9fd 3269 d9fd 1b 0c 0f .byte.b $1b,$0c,$0f 3270 da00 3271 da00 1e 0c 0f .byte.b $1e,$0c,$0f 3272 da03 3273 da03 07 06 0f .byte.b $07,$06,$0f 3274 da06 3275 da06 07 06 0f .byte.b $07,$06,$0f 3276 da09 3277 da09 0a 06 0a .byte.b $0a,$06,$0a 3278 da0c 3279 da0c 17 0c 0a .byte.b $17,$0c,$0a 3280 da0f 3281 da0f 1e 0c 04 .byte.b $1e,$0c,$04 3282 da12 3283 da12 1e 06 09 .byte.b $1e,$06,$09 3284 da15 3285 da15 1b 04 05 .byte.b $1b,$04,$05 3286 da18 3287 da18 07 06 0f .byte.b $07,$06,$0f 3288 da1b 3289 da1b 0a 06 09 .byte.b $0a,$06,$09 3290 da1e 3291 da1e 17 0c 0d .byte.b $17,$0c,$0d 3292 da21 3293 da21 1b 0c 09 .byte.b $1b,$0c,$09 3294 da24 3295 da24 0a 06 05 .byte.b $0a,$06,$05 3296 da27 3297 da27 17 0c 03 .byte.b $17,$0c,$03 3298 da2a 3299 da2a 00 00 00 .byte.b $00,$00,$00 3300 da2d 3301 da2d .skipL0212 3302 da2d 00 d9 sfx_pulsecannon_lo = #sfx_pulsecannon 3304 da2d . 3305 da2d ;; 3306 da2d 3307 da2d .L0213 ;; data sfx_explosion 3308 da2d 3309 da2d 4c c0 da JMP .skipL0213 3310 da30 sfx_explosion 3311 da30 10 10 00 .byte.b $10,$10,$00 3312 da33 3313 da33 01 08 02 .byte.b $01,$08,$02 3314 da36 3315 da36 0b 0c 05 .byte.b $0b,$0c,$05 3316 da39 3317 da39 04 06 08 .byte.b $04,$06,$08 3318 da3c 3319 da3c 03 0e 0f .byte.b $03,$0e,$0f 3320 da3f 3321 da3f 09 06 0f .byte.b $09,$06,$0f 3322 da42 3323 da42 0d 06 0f .byte.b $0d,$06,$0f 3324 da45 3325 da45 04 0e 0f .byte.b $04,$0e,$0f 3326 da48 3327 da48 0f 06 08 .byte.b $0f,$06,$08 3328 da4b 3329 da4b 09 06 04 .byte.b $09,$06,$04 3330 da4e 3331 da4e 16 01 03 .byte.b $16,$01,$03 3332 da51 3333 da51 0c 06 04 .byte.b $0c,$06,$04 3334 da54 3335 da54 09 06 05 .byte.b $09,$06,$05 3336 da57 3337 da57 0a 06 03 .byte.b $0a,$06,$03 3338 da5a 3339 da5a 09 06 05 .byte.b $09,$06,$05 3340 da5d 3341 da5d 0d 06 08 .byte.b $0d,$06,$08 3342 da60 3343 da60 09 06 04 .byte.b $09,$06,$04 3344 da63 3345 da63 04 0e 06 .byte.b $04,$0e,$06 3346 da66 3347 da66 0f 06 05 .byte.b $0f,$06,$05 3348 da69 3349 da69 0f 06 07 .byte.b $0f,$06,$07 3350 da6c 3351 da6c 04 0e 07 .byte.b $04,$0e,$07 3352 da6f 3353 da6f 08 06 06 .byte.b $08,$06,$06 3354 da72 3355 da72 03 0e 08 .byte.b $03,$0e,$08 3356 da75 3357 da75 0f 06 06 .byte.b $0f,$06,$06 3358 da78 3359 da78 09 06 05 .byte.b $09,$06,$05 3360 da7b 3361 da7b 06 06 05 .byte.b $06,$06,$05 3362 da7e 3363 da7e 03 0e 05 .byte.b $03,$0e,$05 3364 da81 3365 da81 0e 06 06 .byte.b $0e,$06,$06 3366 da84 3367 da84 02 0e 05 .byte.b $02,$0e,$05 3368 da87 3369 da87 0f 06 03 .byte.b $0f,$06,$03 3370 da8a 3371 da8a 0e 06 06 .byte.b $0e,$06,$06 3372 da8d 3373 da8d 09 06 05 .byte.b $09,$06,$05 3374 da90 3375 da90 0c 06 05 .byte.b $0c,$06,$05 3376 da93 3377 da93 0f 06 03 .byte.b $0f,$06,$03 3378 da96 3379 da96 04 0e 08 .byte.b $04,$0e,$08 3380 da99 3381 da99 0c 06 03 .byte.b $0c,$06,$03 3382 da9c 3383 da9c 0f 06 03 .byte.b $0f,$06,$03 3384 da9f 3385 da9f 0c 06 06 .byte.b $0c,$06,$06 3386 daa2 3387 daa2 0f 06 04 .byte.b $0f,$06,$04 3388 daa5 3389 daa5 0f 06 05 .byte.b $0f,$06,$05 3390 daa8 3391 daa8 0f 06 03 .byte.b $0f,$06,$03 3392 daab 3393 daab 0a 06 04 .byte.b $0a,$06,$04 3394 daae 3395 daae 0f 06 03 .byte.b $0f,$06,$03 3396 dab1 3397 dab1 08 06 03 .byte.b $08,$06,$03 3398 dab4 3399 dab4 0c 06 03 .byte.b $0c,$06,$03 3400 dab7 3401 dab7 0e 06 03 .byte.b $0e,$06,$03 3402 daba 3403 daba 08 06 03 .byte.b $08,$06,$03 3404 dabd 3405 dabd 00 00 00 .byte.b $00,$00,$00 3406 dac0 3407 dac0 .skipL0213 3408 dac0 00 30 sfx_explosion_lo = #sfx_explosion 3410 dac0 DMAHOLEEND0 SET . 1344 bytes of ROM space left in DMA hole 0. 3411 dac0 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)]d , "bytes of ROM space left in DMA hole 0." 3412 dac0 - if ((256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)) < 0 3413 dac0 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 3414 dac0 endif 3415 dac0 3416 e000 ORG $E000,0 ; ************* 3417 e000 3418 e000 vertical_shooting_font 3419 e000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 3420 e020 00 00 00 00* HEX 00000000000000000000000000 3421 e02d vertical_shooting_ship 3422 e02d 07 d0 HEX 07d0 3423 e02f vertical_shooting_ship_tallsprite_00 3424 e02f 80 02 HEX 8002 3425 e031 vertical_shooting_bullet 3426 e031 28 HEX 28 3427 e032 vertical_shooting_enemyshot 3428 e032 00 HEX 00 3429 e033 vertical_shooting_powerup 3430 e033 28 00 HEX 2800 3431 e035 vertical_shooting_enemy01 3432 e035 09 e0 HEX 09e0 3433 e037 vertical_shooting_enemy01_tallsprite_00 3434 e037 40 03 HEX 4003 3435 e039 vertical_shooting_score_10_digits 3436 e039 00 00 00 00* HEX 00000000000000000000 3437 e043 vertical_shooting_1up 3438 e043 15 55 HEX 1555 3439 e045 vertical_shooting_explosion_01 3440 e045 02 80 HEX 0280 3441 e047 vertical_shooting_explosion_01_tallsprite_00 3442 e047 00 00 HEX 0000 3443 e049 vertical_shooting_explosion_02 3444 e049 05 50 HEX 0550 3445 e04b vertical_shooting_explosion_02_tallsprite_00 3446 e04b 00 00 HEX 0000 3447 e04d vertical_shooting_explosion_03 3448 e04d 15 54 HEX 1554 3449 e04f vertical_shooting_explosion_03_tallsprite_00 3450 e04f 00 00 HEX 0000 3451 e051 vertical_shooting_explosion_04 3452 e051 07 d0 HEX 07d0 3453 e053 vertical_shooting_explosion_04_tallsprite_00 3454 e053 00 00 HEX 0000 3455 e055 vertical_shooting_explosion_05 3456 e055 0c 30 HEX 0c30 3457 e057 vertical_shooting_explosion_05_tallsprite_00 3458 e057 01 40 HEX 0140 3459 e059 vertical_shooting_explosion_06 3460 e059 00 00 HEX 0000 3461 e05b vertical_shooting_explosion_06_tallsprite_00 3462 e05b 01 40 HEX 0140 3463 e05d vertical_shooting_explosion_07 3464 e05d 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3465 e071 vertical_shooting_explosion_07_tallsprite_00 3466 e071 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3467 e085 vertical_shooting_explosion_08 3468 e085 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3469 e099 vertical_shooting_explosion_08_tallsprite_00 3470 e099 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3471 e0ad vertical_shooting_explosion_09 3472 e0ad 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3473 e0c1 vertical_shooting_explosion_09_tallsprite_00 3474 e0c1 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3475 e0d5 vertical_shooting_explosion_10 3476 e0d5 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3477 e0e9 vertical_shooting_explosion_10_tallsprite_00 3478 e0e9 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3479 e0fd 3480 e100 ORG $E100,0 ; ************* 3481 e100 3482 e100 ;vertical_shooting_font 3483 e100 00 54 54 54* HEX 0054545454045454045404445054505440544454104454444410401444501014 3484 e120 10 44 44 10* HEX 10444410544040101040400000 3485 e12d ;vertical_shooting_ship 3486 e12d 07 d0 HEX 07d0 3487 e12f ;vertical_shooting_ship_tallsprite_00 3488 e12f 80 02 HEX 8002 3489 e131 ;vertical_shooting_bullet 3490 e131 28 HEX 28 3491 e132 ;vertical_shooting_enemyshot 3492 e132 88 HEX 88 3493 e133 ;vertical_shooting_powerup 3494 e133 78 08 HEX 7808 3495 e135 ;vertical_shooting_enemy01 3496 e135 09 e0 HEX 09e0 3497 e137 ;vertical_shooting_enemy01_tallsprite_00 3498 e137 50 0f HEX 500f 3499 e139 ;vertical_shooting_score_10_digits 3500 e139 54 54 54 10* HEX 54545410041054041010 3501 e143 ;vertical_shooting_1up 3502 e143 ea a9 HEX eaa9 3503 e145 ;vertical_shooting_explosion_01 3504 e145 01 40 HEX 0140 3505 e147 ;vertical_shooting_explosion_01_tallsprite_00 3506 e147 00 00 HEX 0000 3507 e149 ;vertical_shooting_explosion_02 3508 e149 09 60 HEX 0960 3509 e14b ;vertical_shooting_explosion_02_tallsprite_00 3510 e14b 00 00 HEX 0000 3511 e14d ;vertical_shooting_explosion_03 3512 e14d 25 58 HEX 2558 3513 e14f ;vertical_shooting_explosion_03_tallsprite_00 3514 e14f 00 00 HEX 0000 3515 e151 ;vertical_shooting_explosion_04 3516 e151 05 50 HEX 0550 3517 e153 ;vertical_shooting_explosion_04_tallsprite_00 3518 e153 02 80 HEX 0280 3519 e155 ;vertical_shooting_explosion_05 3520 e155 0b e0 HEX 0be0 3521 e157 ;vertical_shooting_explosion_05_tallsprite_00 3522 e157 01 40 HEX 0140 3523 e159 ;vertical_shooting_explosion_06 3524 e159 0c 30 HEX 0c30 3525 e15b ;vertical_shooting_explosion_06_tallsprite_00 3526 e15b 01 40 HEX 0140 3527 e15d ;vertical_shooting_explosion_07 3528 e15d 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3529 e171 ;vertical_shooting_explosion_07_tallsprite_00 3530 e171 00 00 00 00* HEX 0000000000000140014001400140014001400000 3531 e185 ;vertical_shooting_explosion_08 3532 e185 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3533 e199 ;vertical_shooting_explosion_08_tallsprite_00 3534 e199 00 00 00 00* HEX 0000000000000140014001400140014001400000 3535 e1ad ;vertical_shooting_explosion_09 3536 e1ad 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3537 e1c1 ;vertical_shooting_explosion_09_tallsprite_00 3538 e1c1 00 00 00 00* HEX 0000000000000140014001400140014001400000 3539 e1d5 ;vertical_shooting_explosion_10 3540 e1d5 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3541 e1e9 ;vertical_shooting_explosion_10_tallsprite_00 3542 e1e9 00 00 00 00* HEX 0000000000000140014001400140014001400000 3543 e1fd 3544 e200 ORG $E200,0 ; ************* 3545 e200 3546 e200 ;vertical_shooting_font 3547 e200 00 44 10 40* HEX 0044104004040444044404444440444040444410444440444444404444041044 3548 e220 10 54 44 10* HEX 10544410400010000000100000 3549 e22d ;vertical_shooting_ship 3550 e22d 03 c0 HEX 03c0 3551 e22f ;vertical_shooting_ship_tallsprite_00 3552 e22f a1 4a HEX a14a 3553 e231 ;vertical_shooting_bullet 3554 e231 3c HEX 3c 3555 e232 ;vertical_shooting_enemyshot 3556 e232 10 HEX 10 3557 e233 ;vertical_shooting_powerup 3558 e233 78 1e HEX 781e 3559 e235 ;vertical_shooting_enemy01 3560 e235 19 ec HEX 19ec 3561 e237 ;vertical_shooting_enemy01_tallsprite_00 3562 e237 5a af HEX 5aaf 3563 e239 ;vertical_shooting_score_10_digits 3564 e239 cc 30 c0 cc* HEX cc30c0cc0ccccc0ccc0c 3565 e243 ;vertical_shooting_1up 3566 e243 d5 58 HEX d558 3567 e245 ;vertical_shooting_explosion_01 3568 e245 00 00 HEX 0000 3569 e247 ;vertical_shooting_explosion_01_tallsprite_00 3570 e247 00 00 HEX 0000 3571 e249 ;vertical_shooting_explosion_02 3572 e249 02 80 HEX 0280 3573 e24b ;vertical_shooting_explosion_02_tallsprite_00 3574 e24b 00 00 HEX 0000 3575 e24d ;vertical_shooting_explosion_03 3576 e24d 09 60 HEX 0960 3577 e24f ;vertical_shooting_explosion_03_tallsprite_00 3578 e24f 00 00 HEX 0000 3579 e251 ;vertical_shooting_explosion_04 3580 e251 05 50 HEX 0550 3581 e253 ;vertical_shooting_explosion_04_tallsprite_00 3582 e253 02 80 HEX 0280 3583 e255 ;vertical_shooting_explosion_05 3584 e255 0a a0 HEX 0aa0 3585 e257 ;vertical_shooting_explosion_05_tallsprite_00 3586 e257 05 50 HEX 0550 3587 e259 ;vertical_shooting_explosion_06 3588 e259 0b e0 HEX 0be0 3589 e25b ;vertical_shooting_explosion_06_tallsprite_00 3590 e25b 05 50 HEX 0550 3591 e25d ;vertical_shooting_explosion_07 3592 e25d 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3593 e271 ;vertical_shooting_explosion_07_tallsprite_00 3594 e271 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3595 e285 ;vertical_shooting_explosion_08 3596 e285 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3597 e299 ;vertical_shooting_explosion_08_tallsprite_00 3598 e299 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3599 e2ad ;vertical_shooting_explosion_09 3600 e2ad 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3601 e2c1 ;vertical_shooting_explosion_09_tallsprite_00 3602 e2c1 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3603 e2d5 ;vertical_shooting_explosion_10 3604 e2d5 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3605 e2e9 ;vertical_shooting_explosion_10_tallsprite_00 3606 e2e9 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3607 e2fd 3608 e300 ORG $E300,0 ; ************* 3609 e300 3610 e300 ;vertical_shooting_font 3611 e300 00 44 10 40* HEX 0044104004040444044404444440444040444410044440444444404444041044 3612 e320 54 54 44 10* HEX 54544410100000101000000000 3613 e32d ;vertical_shooting_ship 3614 e32d 01 40 HEX 0140 3615 e32f ;vertical_shooting_ship_tallsprite_00 3616 e32f a5 5a HEX a55a 3617 e331 ;vertical_shooting_bullet 3618 e331 3c HEX 3c 3619 e332 ;vertical_shooting_enemyshot 3620 e332 74 HEX 74 3621 e333 ;vertical_shooting_powerup 3622 e333 7a a4 HEX 7aa4 3623 e335 ;vertical_shooting_enemy01 3624 e335 59 ef HEX 59ef 3625 e337 ;vertical_shooting_enemy01_tallsprite_00 3626 e337 59 ef HEX 59ef 3627 e339 ;vertical_shooting_score_10_digits 3628 e339 44 10 40 04* HEX 44104004040444044404 3629 e343 ;vertical_shooting_1up 3630 e343 35 60 HEX 3560 3631 e345 ;vertical_shooting_explosion_01 3632 e345 00 00 HEX 0000 3633 e347 ;vertical_shooting_explosion_01_tallsprite_00 3634 e347 00 00 HEX 0000 3635 e349 ;vertical_shooting_explosion_02 3636 e349 00 00 HEX 0000 3637 e34b ;vertical_shooting_explosion_02_tallsprite_00 3638 e34b 00 00 HEX 0000 3639 e34d ;vertical_shooting_explosion_03 3640 e34d 02 80 HEX 0280 3641 e34f ;vertical_shooting_explosion_03_tallsprite_00 3642 e34f 00 00 HEX 0000 3643 e351 ;vertical_shooting_explosion_04 3644 e351 09 60 HEX 0960 3645 e353 ;vertical_shooting_explosion_04_tallsprite_00 3646 e353 09 60 HEX 0960 3647 e355 ;vertical_shooting_explosion_05 3648 e355 06 90 HEX 0690 3649 e357 ;vertical_shooting_explosion_05_tallsprite_00 3650 e357 06 90 HEX 0690 3651 e359 ;vertical_shooting_explosion_06 3652 e359 06 90 HEX 0690 3653 e35b ;vertical_shooting_explosion_06_tallsprite_00 3654 e35b 06 90 HEX 0690 3655 e35d ;vertical_shooting_explosion_07 3656 e35d 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3657 e371 ;vertical_shooting_explosion_07_tallsprite_00 3658 e371 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3659 e385 ;vertical_shooting_explosion_08 3660 e385 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3661 e399 ;vertical_shooting_explosion_08_tallsprite_00 3662 e399 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3663 e3ad ;vertical_shooting_explosion_09 3664 e3ad 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3665 e3c1 ;vertical_shooting_explosion_09_tallsprite_00 3666 e3c1 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3667 e3d5 ;vertical_shooting_explosion_10 3668 e3d5 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3669 e3e9 ;vertical_shooting_explosion_10_tallsprite_00 3670 e3e9 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3671 e3fd 3672 e400 ORG $E400,0 ; ************* 3673 e400 3674 e400 ;vertical_shooting_font 3675 e400 00 44 10 54* HEX 0044105454545454045454545040445454445410045040544444504450101044 3676 e420 44 44 10 10* HEX 44441010100000101000000000 3677 e42d ;vertical_shooting_ship 3678 e42d 01 40 HEX 0140 3679 e42f ;vertical_shooting_ship_tallsprite_00 3680 e42f a5 5a HEX a55a 3681 e431 ;vertical_shooting_bullet 3682 e431 14 HEX 14 3683 e432 ;vertical_shooting_enemyshot 3684 e432 74 HEX 74 3685 e433 ;vertical_shooting_powerup 3686 e433 75 7a HEX 757a 3687 e435 ;vertical_shooting_enemy01 3688 e435 59 6f HEX 596f 3689 e437 ;vertical_shooting_enemy01_tallsprite_00 3690 e437 59 ef HEX 59ef 3691 e439 ;vertical_shooting_score_10_digits 3692 e439 44 10 10 10* HEX 44101010540454041014 3693 e443 ;vertical_shooting_1up 3694 e443 35 60 HEX 3560 3695 e445 ;vertical_shooting_explosion_01 3696 e445 00 00 HEX 0000 3697 e447 ;vertical_shooting_explosion_01_tallsprite_00 3698 e447 00 00 HEX 0000 3699 e449 ;vertical_shooting_explosion_02 3700 e449 00 00 HEX 0000 3701 e44b ;vertical_shooting_explosion_02_tallsprite_00 3702 e44b 00 00 HEX 0000 3703 e44d ;vertical_shooting_explosion_03 3704 e44d 00 00 HEX 0000 3705 e44f ;vertical_shooting_explosion_03_tallsprite_00 3706 e44f 02 80 HEX 0280 3707 e451 ;vertical_shooting_explosion_04 3708 e451 09 60 HEX 0960 3709 e453 ;vertical_shooting_explosion_04_tallsprite_00 3710 e453 09 60 HEX 0960 3711 e455 ;vertical_shooting_explosion_05 3712 e455 06 90 HEX 0690 3713 e457 ;vertical_shooting_explosion_05_tallsprite_00 3714 e457 06 90 HEX 0690 3715 e459 ;vertical_shooting_explosion_06 3716 e459 06 90 HEX 0690 3717 e45b ;vertical_shooting_explosion_06_tallsprite_00 3718 e45b 06 90 HEX 0690 3719 e45d ;vertical_shooting_explosion_07 3720 e45d 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3721 e471 ;vertical_shooting_explosion_07_tallsprite_00 3722 e471 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3723 e485 ;vertical_shooting_explosion_08 3724 e485 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3725 e499 ;vertical_shooting_explosion_08_tallsprite_00 3726 e499 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3727 e4ad ;vertical_shooting_explosion_09 3728 e4ad 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3729 e4c1 ;vertical_shooting_explosion_09_tallsprite_00 3730 e4c1 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3731 e4d5 ;vertical_shooting_explosion_10 3732 e4d5 00 00 00 00* HEX 000000000000069006900690069007d00c300000 3733 e4e9 ;vertical_shooting_explosion_10_tallsprite_00 3734 e4e9 00 00 00 00* HEX 00000000014006900690069007d00c3000000000 3735 e4fd 3736 e500 ORG $E500,0 ; ************* 3737 e500 3738 e500 ;vertical_shooting_font 3739 e500 00 44 10 04* HEX 0044100404444040044444444440444040404410044440544444444444401044 3740 e520 44 44 44 54* HEX 44444454100000041000000000 3741 e52d ;vertical_shooting_ship 3742 e52d 01 40 HEX 0140 3743 e52f ;vertical_shooting_ship_tallsprite_00 3744 e52f a5 5a HEX a55a 3745 e531 ;vertical_shooting_bullet 3746 e531 14 HEX 14 3747 e532 ;vertical_shooting_enemyshot 3748 e532 74 HEX 74 3749 e533 ;vertical_shooting_powerup 3750 e533 78 1e HEX 781e 3751 e535 ;vertical_shooting_enemy01 3752 e535 5a af HEX 5aaf 3753 e537 ;vertical_shooting_enemy01_tallsprite_00 3754 e537 19 ec HEX 19ec 3755 e539 ;vertical_shooting_score_10_digits 3756 e539 88 20 08 08* HEX 8820080888a080088888 3757 e543 ;vertical_shooting_1up 3758 e543 0d 80 HEX 0d80 3759 e545 ;vertical_shooting_explosion_01 3760 e545 00 00 HEX 0000 3761 e547 ;vertical_shooting_explosion_01_tallsprite_00 3762 e547 00 00 HEX 0000 3763 e549 ;vertical_shooting_explosion_02 3764 e549 00 00 HEX 0000 3765 e54b ;vertical_shooting_explosion_02_tallsprite_00 3766 e54b 02 80 HEX 0280 3767 e54d ;vertical_shooting_explosion_03 3768 e54d 00 00 HEX 0000 3769 e54f ;vertical_shooting_explosion_03_tallsprite_00 3770 e54f 09 60 HEX 0960 3771 e551 ;vertical_shooting_explosion_04 3772 e551 02 80 HEX 0280 3773 e553 ;vertical_shooting_explosion_04_tallsprite_00 3774 e553 05 50 HEX 0550 3775 e555 ;vertical_shooting_explosion_05 3776 e555 05 50 HEX 0550 3777 e557 ;vertical_shooting_explosion_05_tallsprite_00 3778 e557 0a a0 HEX 0aa0 3779 e559 ;vertical_shooting_explosion_06 3780 e559 05 50 HEX 0550 3781 e55b ;vertical_shooting_explosion_06_tallsprite_00 3782 e55b 0b e0 HEX 0be0 3783 e55d ;vertical_shooting_explosion_07 3784 e55d 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3785 e571 ;vertical_shooting_explosion_07_tallsprite_00 3786 e571 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3787 e585 ;vertical_shooting_explosion_08 3788 e585 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3789 e599 ;vertical_shooting_explosion_08_tallsprite_00 3790 e599 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3791 e5ad ;vertical_shooting_explosion_09 3792 e5ad 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3793 e5c1 ;vertical_shooting_explosion_09_tallsprite_00 3794 e5c1 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3795 e5d5 ;vertical_shooting_explosion_10 3796 e5d5 00 00 00 00* HEX 0000000000000140055005500550055007d00c30 3797 e5e9 ;vertical_shooting_explosion_10_tallsprite_00 3798 e5e9 00 00 01 40* HEX 0000014006900aa00aa00be00c30000000000000 3799 e5fd 3800 e600 ORG $E600,0 ; ************* 3801 e600 3802 e600 ;vertical_shooting_font 3803 e600 00 44 50 04* HEX 0044500404444040044444444440444040404410044440544444444444401044 3804 e620 44 44 44 44* HEX 44444444040000441000001044 3805 e62d ;vertical_shooting_ship 3806 e62d 01 40 HEX 0140 3807 e62f ;vertical_shooting_ship_tallsprite_00 3808 e62f a7 da HEX a7da 3809 e631 ;vertical_shooting_bullet 3810 e631 14 HEX 14 3811 e632 ;vertical_shooting_enemyshot 3812 e632 10 HEX 10 3813 e633 ;vertical_shooting_powerup 3814 e633 7a bc HEX 7abc 3815 e635 ;vertical_shooting_enemy01 3816 e635 50 07 HEX 5007 3817 e637 ;vertical_shooting_enemy01_tallsprite_00 3818 e637 09 e0 HEX 09e0 3819 e639 ;vertical_shooting_score_10_digits 3820 e639 88 a0 88 08* HEX 88a08808888080088888 3821 e643 ;vertical_shooting_1up 3822 e643 0d 80 HEX 0d80 3823 e645 ;vertical_shooting_explosion_01 3824 e645 00 00 HEX 0000 3825 e647 ;vertical_shooting_explosion_01_tallsprite_00 3826 e647 01 40 HEX 0140 3827 e649 ;vertical_shooting_explosion_02 3828 e649 00 00 HEX 0000 3829 e64b ;vertical_shooting_explosion_02_tallsprite_00 3830 e64b 09 60 HEX 0960 3831 e64d ;vertical_shooting_explosion_03 3832 e64d 00 00 HEX 0000 3833 e64f ;vertical_shooting_explosion_03_tallsprite_00 3834 e64f 25 58 HEX 2558 3835 e651 ;vertical_shooting_explosion_04 3836 e651 02 80 HEX 0280 3837 e653 ;vertical_shooting_explosion_04_tallsprite_00 3838 e653 05 50 HEX 0550 3839 e655 ;vertical_shooting_explosion_05 3840 e655 01 40 HEX 0140 3841 e657 ;vertical_shooting_explosion_05_tallsprite_00 3842 e657 0b e0 HEX 0be0 3843 e659 ;vertical_shooting_explosion_06 3844 e659 01 40 HEX 0140 3845 e65b ;vertical_shooting_explosion_06_tallsprite_00 3846 e65b 0c 30 HEX 0c30 3847 e65d ;vertical_shooting_explosion_07 3848 e65d 00 00 00 00* HEX 0000000000000140014001400140014001400000 3849 e671 ;vertical_shooting_explosion_07_tallsprite_00 3850 e671 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3851 e685 ;vertical_shooting_explosion_08 3852 e685 00 00 00 00* HEX 0000000000000140014001400140014001400000 3853 e699 ;vertical_shooting_explosion_08_tallsprite_00 3854 e699 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3855 e6ad ;vertical_shooting_explosion_09 3856 e6ad 00 00 00 00* HEX 0000000000000140014001400140014001400000 3857 e6c1 ;vertical_shooting_explosion_09_tallsprite_00 3858 e6c1 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3859 e6d5 ;vertical_shooting_explosion_10 3860 e6d5 00 00 00 00* HEX 0000000000000140014001400140014001400000 3861 e6e9 ;vertical_shooting_explosion_10_tallsprite_00 3862 e6e9 01 40 06 90* HEX 014006901aa40aa00be00c300000000000000000 3863 e6fd 3864 e700 ORG $E700,0 ; ************* 3865 e700 3866 e700 ;vertical_shooting_font 3867 e700 00 54 10 54* HEX 0054105454445454545454545054505454544454044440445010501050145444 3868 e720 44 44 44 44* HEX 44444444540000101040401044 3869 e72d ;vertical_shooting_ship 3870 e72d 01 40 HEX 0140 3871 e72f ;vertical_shooting_ship_tallsprite_00 3872 e72f 27 d8 HEX 27d8 3873 e731 ;vertical_shooting_bullet 3874 e731 00 HEX 00 3875 e732 ;vertical_shooting_enemyshot 3876 e732 88 HEX 88 3877 e733 ;vertical_shooting_powerup 3878 e733 55 50 HEX 5550 3879 e735 ;vertical_shooting_enemy01 3880 e735 40 01 HEX 4001 3881 e737 ;vertical_shooting_enemy01_tallsprite_00 3882 e737 09 e0 HEX 09e0 3883 e739 ;vertical_shooting_score_10_digits 3884 e739 54 10 10 54* HEX 54101054445454541010 3885 e743 ;vertical_shooting_1up 3886 e743 03 00 HEX 0300 3887 e745 ;vertical_shooting_explosion_01 3888 e745 00 00 HEX 0000 3889 e747 ;vertical_shooting_explosion_01_tallsprite_00 3890 e747 02 80 HEX 0280 3891 e749 ;vertical_shooting_explosion_02 3892 e749 00 00 HEX 0000 3893 e74b ;vertical_shooting_explosion_02_tallsprite_00 3894 e74b 05 50 HEX 0550 3895 e74d ;vertical_shooting_explosion_03 3896 e74d 00 00 HEX 0000 3897 e74f ;vertical_shooting_explosion_03_tallsprite_00 3898 e74f 15 54 HEX 1554 3899 e751 ;vertical_shooting_explosion_04 3900 e751 00 00 HEX 0000 3901 e753 ;vertical_shooting_explosion_04_tallsprite_00 3902 e753 07 d0 HEX 07d0 3903 e755 ;vertical_shooting_explosion_05 3904 e755 01 40 HEX 0140 3905 e757 ;vertical_shooting_explosion_05_tallsprite_00 3906 e757 0c 30 HEX 0c30 3907 e759 ;vertical_shooting_explosion_06 3908 e759 01 40 HEX 0140 3909 e75b ;vertical_shooting_explosion_06_tallsprite_00 3910 e75b 00 00 HEX 0000 3911 e75d ;vertical_shooting_explosion_07 3912 e75d 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3913 e771 ;vertical_shooting_explosion_07_tallsprite_00 3914 e771 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3915 e785 ;vertical_shooting_explosion_08 3916 e785 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3917 e799 ;vertical_shooting_explosion_08_tallsprite_00 3918 e799 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3919 e7ad ;vertical_shooting_explosion_09 3920 e7ad 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3921 e7c1 ;vertical_shooting_explosion_09_tallsprite_00 3922 e7c1 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3923 e7d5 ;vertical_shooting_explosion_10 3924 e7d5 00 00 00 00* HEX 00000000000000000140014001400140014003c0 3925 e7e9 ;vertical_shooting_explosion_10_tallsprite_00 3926 e7e9 02 80 0a a0* HEX 02800aa02aa80be00c3000000000000000000000 3927 e7fd - if SPACEOVERFLOW > 0 3928 e7fd - echo "" 3929 e7fd - echo "######## ERROR: space overflow detected in",[SPACEOVERFLOW]d,"areas." 3930 e7fd - echo "######## look above for areas with negative ROM space left." 3931 e7fd - echo "######## Aborting assembly." 3932 e7fd - ERR 3933 e7fd endif 3934 e7fd 3935 e7fd 3936 e7fd ; Provided under the CC0 license. See the included LICENSE.txt for details. 3937 e7fd 3938 e7fd ifnconst bankswitchmode 3939 e7fd if ( * < $f000 ) 3940 f000 ORG $F000 3941 f000 endif 3942 f000 - else 3943 f000 - ifconst ROM128K 3944 f000 - if ( * < $f000 ) 3945 f000 - ORG $27000 3946 f000 - RORG $F000 3947 f000 - endif 3948 f000 - endif 3949 f000 - ifconst ROM144K 3950 f000 - if ( * < $f000 ) 3951 f000 - ORG $27000 3952 f000 - RORG $F000 3953 f000 - endif 3954 f000 - endif 3955 f000 - ifconst ROM256K 3956 f000 - if ( * < $f000 ) 3957 f000 - ORG $47000 3958 f000 - RORG $F000 3959 f000 - endif 3960 f000 - endif 3961 f000 - ifconst ROM272K 3962 f000 - if ( * < $f000 ) 3963 f000 - ORG $47000 3964 f000 - RORG $F000 3965 f000 - endif 3966 f000 - endif 3967 f000 - ifconst ROM512K 3968 f000 - if ( * < $f000 ) 3969 f000 - ORG $87000 3970 f000 - RORG $F000 3971 f000 - endif 3972 f000 - endif 3973 f000 - ifconst ROM528K 3974 f000 - if ( * < $f000 ) 3975 f000 - ORG $87000 3976 f000 - RORG $F000 3977 f000 - endif 3978 f000 - endif 3979 f000 endif 3980 f000 3981 f000 ; all of these "modules" have conditional clauses in them, so even though 3982 f000 ; they're always included here, they don't take up rom unless the user 3983 f000 ; explicitly enables support for the feature. 3984 f000 3985 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_sprani.78b.asm 3987 f000 endif 3988 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_sprani.78b.asm 3990 f000 endif 3991 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_sprani.78b.asm 3993 f000 endif 3994 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_sprani.78b.asm 3996 f000 endif 3997 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 3998 f000 3999 f000 ;standard routimes needed for pretty much all games 4000 f000 4001 f000 ; some definitions used with "set debug color" 4002 f000 00 91 DEBUGCALC = $91 4003 f000 00 41 DEBUGWASTE = $41 4004 f000 00 c1 DEBUGDRAW = $C1 4005 f000 4006 f000 ;NMI and IRQ handlers 4007 f000 NMI 4008 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 4009 f000 48 pha ; save A 4010 f001 a5 4d lda visibleover 4011 f003 49 ff eor #255 4012 f005 85 4d sta visibleover 4013 f007 - ifconst DEBUGINTERRUPT 4014 f007 - and #$93 4015 f007 - sta BACKGRND 4016 f007 endif 4017 f007 ce b2 01 dec interruptindex 4018 f00a d0 03 bne skipreallyoffvisible 4019 f00c 4c 67 f0 jmp reallyoffvisible 4020 f00f skipreallyoffvisible 4021 f00f a5 4d lda visibleover 4022 f011 d0 03 bne carryontopscreenroutine 4023 f013 4c 65 f0 jmp skiptopscreenroutine 4024 f016 carryontopscreenroutine 4025 f016 8a txa ; save X+Y 4026 f017 48 pha 4027 f018 98 tya 4028 f019 48 pha 4029 f01a d8 cld 4030 f01b - ifconst .topscreenroutine 4031 f01b - jsr .topscreenroutine 4032 f01b endif 4033 f01b ifnconst CANARYOFF 4034 f01b ad c1 01 lda canary 4035 f01e f0 0c beq skipcanarytriggered 4036 f020 a9 45 lda #$45 4037 f022 85 20 sta BACKGRND 4038 f024 a9 60 lda #$60 4039 f026 85 3c sta CTRL 4040 f028 8d 07 21 sta sCTRL 4041 f02b 02 .byte.b $02 ; KIL/JAM 4042 f02c endif 4043 f02c skipcanarytriggered 4044 f02c ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 4045 f02f 4046 f02f ; ** Other important routines that need to regularly run, and can run onscreen. 4047 f02f ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 4048 f02f 4049 f02f - ifconst LONGCONTROLLERREAD 4050 f02f -longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 4051 f02f - ldy port1control 4052 f02f - lda longreadtype,y 4053 f02f - beq LLRET1 4054 f02f - tay 4055 f02f - lda longreadroutinehiP1,y 4056 f02f - sta inttemp4 4057 f02f - lda longreadroutineloP1,y 4058 f02f - sta inttemp3 4059 f02f - jmp (inttemp3) 4060 f02f -LLRET1 4061 f02f - ldy port0control 4062 f02f - lda longreadtype,y 4063 f02f - beq LLRET0 4064 f02f - tay 4065 f02f - lda longreadroutinehiP0,y 4066 f02f - sta inttemp4 4067 f02f - lda longreadroutineloP0,y 4068 f02f - sta inttemp3 4069 f02f - jmp (inttemp3) 4070 f02f -LLRET0 4071 f02f - 4072 f02f - 4073 f02f - ifconst PADDLERANGE 4074 f02f -TIMEVAL = PADDLERANGE 4075 f02f - else 4076 f02f -TIMEVAL = 160 4077 f02f - endif 4078 f02f -TIMEOFFSET = 10 4079 f02f - 4080 f02f endif ; LONGCONTROLLERREAD 4081 f02f 4082 f02f 4083 f02f 20 d9 f1 jsr servicesfxchannels 4084 f032 - ifconst MUSICTRACKER 4085 f032 - jsr servicesong 4086 f032 endif ; MUSICTRACKER 4087 f032 4088 f032 ee a4 01 inc framecounter 4089 f035 ad a4 01 lda framecounter 4090 f038 29 3f and #63 4091 f03a d0 08 bne skipcountdownseconds 4092 f03c ad a5 01 lda countdownseconds 4093 f03f f0 03 beq skipcountdownseconds 4094 f041 ce a5 01 dec countdownseconds 4095 f044 skipcountdownseconds 4096 f044 4097 f044 a2 01 ldx #1 4098 f046 buttonreadloop 4099 f046 8a txa 4100 f047 48 pha 4101 f048 bc b7 01 ldy port0control,x 4102 f04b b9 bc f1 lda buttonhandlerlo,y 4103 f04e 85 da sta inttemp3 4104 f050 b9 b1 f1 lda buttonhandlerhi,y 4105 f053 85 db sta inttemp4 4106 f055 05 da ora inttemp3 4107 f057 f0 03 beq buttonreadloopreturn 4108 f059 6c da 00 jmp (inttemp3) 4109 f05c buttonreadloopreturn 4110 f05c 68 pla 4111 f05d aa tax 4112 f05e ca dex 4113 f05f 10 e5 bpl buttonreadloop 4114 f061 4115 f061 - ifconst KEYPADSUPPORT 4116 f061 - jsr keypadrowselect 4117 f061 endif ; KEYPADSUPPORT 4118 f061 4119 f061 4120 f061 - ifconst DOUBLEBUFFER 4121 f061 - lda doublebufferminimumframeindex 4122 f061 - beq skipdoublebufferminimumframeindexadjust 4123 f061 - dec doublebufferminimumframeindex 4124 f061 -skipdoublebufferminimumframeindexadjust 4125 f061 endif 4126 f061 4127 f061 68 pla 4128 f062 a8 tay 4129 f063 68 pla 4130 f064 aa tax 4131 f065 skiptopscreenroutine 4132 f065 68 pla 4133 f066 IRQ 4134 f066 40 RTI 4135 f067 4136 f067 - ifconst LONGCONTROLLERREAD 4137 f067 - 4138 f067 -longreadtype 4139 f067 - .byte 0, 0, 0, 1 ; NONE PROLINE LIGHTGUN PADDLE 4140 f067 - .byte 2, 0, 3, 0 ; TRKBALL VCSSTICK DRIVING KEYPAD 4141 f067 - .byte 3, 3, 0 ; STMOUSE AMOUSE ATARIVOX 4142 f067 - 4143 f067 -longreadroutineloP0 4144 f067 - .byte LLRET0 ; 0 = no routine 4151 f067 - .byte >paddleport0update ; 1 = paddle 4152 f067 - .byte >trakball0update ; 2 = trackball 4153 f067 - .byte >mouse0update ; 3 = mouse 4154 f067 - 4155 f067 -longreadroutineloP1 4156 f067 - .byte LLRET1 ; 0 = no routine 4163 f067 - .byte >paddleport1update ; 1 = paddle 4164 f067 - .byte >trakball1update ; 2 = trackball 4165 f067 - .byte >mouse1update ; 3 = mouse 4166 f067 - 4167 f067 - 4168 f067 -SETTIM64T 4169 f067 - bne skipdefaulttime 4170 f067 - ifnconst PADDLESMOOTHINGOFF 4171 f067 - lda #(TIMEVAL+TIMEOFFSET+1) 4172 f067 - else 4173 f067 - lda #(TIMEVAL+TIMEOFFSET) 4174 f067 - endif 4175 f067 -skipdefaulttime 4176 f067 - tay 4177 f067 - dey 4178 f067 -.setTIM64Tloop 4179 f067 - sta TIM64T 4180 f067 - cpy INTIM 4181 f067 - bne .setTIM64Tloop 4182 f067 - rts 4183 f067 endif ; LONGCONTROLLERREAD 4184 f067 4185 f067 reallyoffvisible 4186 f067 85 24 sta WSYNC 4187 f069 4188 f069 a9 00 lda #0 4189 f06b 85 4d sta visibleover 4190 f06d - ifconst DEBUGINTERRUPT 4191 f06d - sta BACKGRND 4192 f06d endif 4193 f06d 4194 f06d a9 03 lda #3 4195 f06f 8d b2 01 sta interruptindex 4196 f072 4197 f072 8a txa 4198 f073 48 pha 4199 f074 98 tya 4200 f075 48 pha 4201 f076 d8 cld 4202 f077 4203 f077 20 53 f1 jsr uninterruptableroutines 4204 f07a 4205 f07a - ifconst .userinterrupt 4206 f07a - jsr .userinterrupt 4207 f07a endif 4208 f07a 4209 f07a - ifconst KEYPADSUPPORT 4210 f07a - jsr keypadcolumnread 4211 f07a endif 4212 f07a 4213 f07a 68 pla 4214 f07b a8 tay 4215 f07c 68 pla 4216 f07d aa tax 4217 f07e 68 pla 4218 f07f 40 RTI 4219 f080 4220 f080 clearscreen 4221 f080 a2 17 ldx #(WZONECOUNT-1) 4222 f082 a9 00 lda #0 4223 f084 clearscreenloop 4224 f084 95 65 sta dlend,x 4225 f086 ca dex 4226 f087 10 fb bpl clearscreenloop 4227 f089 a9 00 lda #0 4228 f08b 8d ad 01 sta valbufend ; clear the bcd value buffer 4229 f08e 8d ae 01 sta valbufendsave 4230 f091 60 rts 4231 f092 4232 f092 restorescreen 4233 f092 a2 17 ldx #(WZONECOUNT-1) 4234 f094 a9 00 lda #0 4235 f096 restorescreenloop 4236 f096 b5 82 lda dlendsave,x 4237 f098 95 65 sta dlend,x 4238 f09a ca dex 4239 f09b 10 f9 bpl restorescreenloop 4240 f09d ad ae 01 lda valbufendsave 4241 f0a0 8d ad 01 sta valbufend 4242 f0a3 60 rts 4243 f0a4 4244 f0a4 savescreen 4245 f0a4 a2 17 ldx #(WZONECOUNT-1) 4246 f0a6 savescreenloop 4247 f0a6 b5 65 lda dlend,x 4248 f0a8 95 82 sta dlendsave,x 4249 f0aa ca dex 4250 f0ab 10 f9 bpl savescreenloop 4251 f0ad ad ad 01 lda valbufend 4252 f0b0 8d ae 01 sta valbufendsave 4253 f0b3 - ifconst DOUBLEBUFFER 4254 f0b3 - lda doublebufferstate 4255 f0b3 - beq savescreenrts 4256 f0b3 - lda #1 4257 f0b3 - sta doublebufferbufferdirty 4258 f0b3 -savescreenrts 4259 f0b3 endif ; DOUBLEBUFFER 4260 f0b3 60 rts 4261 f0b4 4262 f0b4 drawscreen 4263 f0b4 4264 f0b4 a9 00 lda #0 4265 f0b6 85 42 sta temp1 ; not B&W if we're here... 4266 f0b8 4267 f0b8 drawscreenwait 4268 f0b8 a5 4d lda visibleover 4269 f0ba d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 4270 f0bc 4271 f0bc ;restore some registers in case the game changed them mid-screen... 4272 f0bc ad 07 21 lda sCTRL 4273 f0bf 05 42 ora temp1 4274 f0c1 85 3c sta CTRL 4275 f0c3 ad 0b 21 lda sCHARBASE 4276 f0c6 85 34 sta CHARBASE 4277 f0c8 4278 f0c8 ;ensure all of the display list is terminated... 4279 f0c8 20 39 f1 jsr terminatedisplaylist 4280 f0cb 4281 f0cb ifnconst pauseroutineoff 4282 f0cb 20 d6 f0 jsr pauseroutine 4283 f0ce endif ; pauseroutineoff 4284 f0ce 4285 f0ce ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 4286 f0ce ; delaying a full frame, but still allowing time for basic calculations. 4287 f0ce visiblescreenstartedwait 4288 f0ce a5 4d lda visibleover 4289 f0d0 f0 fc beq visiblescreenstartedwait 4290 f0d2 visiblescreenstartedwaitdone 4291 f0d2 ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 4292 f0d5 60 rts 4293 f0d6 4294 f0d6 ifnconst pauseroutineoff 4295 f0d6 ; check to see if pause was pressed and released 4296 f0d6 pauseroutine 4297 f0d6 ad b3 01 lda pausedisable 4298 f0d9 d0 4e bne leavepauseroutine 4299 f0db a9 08 lda #8 4300 f0dd 2c 82 02 bit SWCHB 4301 f0e0 f0 29 beq pausepressed 4302 f0e2 4303 f0e2 ifnconst SOFTRESETASPAUSEOFF 4304 f0e2 ifnconst MOUSESUPPORT 4305 f0e2 ifnconst TRAKBALLSUPPORT 4306 f0e2 ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 4307 f0e5 29 70 and #%01110000 ; _LDU 4308 f0e7 f0 22 beq pausepressed 4309 f0e9 endif 4310 f0e9 endif 4311 f0e9 endif 4312 f0e9 4313 f0e9 ;pause isn't pressed 4314 f0e9 a9 00 lda #0 4315 f0eb 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 4316 f0ee 4317 f0ee ;check if we're in an already paused state 4318 f0ee ad 00 21 lda pausestate 4319 f0f1 f0 36 beq leavepauseroutine ; nope, leave 4320 f0f3 4321 f0f3 c9 01 cmp #1 ; last frame was the start of pausing 4322 f0f5 f0 2b beq enterpausestate2 ; move from state 1 to 2 4323 f0f7 4324 f0f7 c9 02 cmp #2 4325 f0f9 f0 34 beq carryonpausing 4326 f0fb 4327 f0fb ;pausestate must be >2, which means we're ending an unpause 4328 f0fb a9 00 lda #0 4329 f0fd 8d ac 01 sta pausebuttonflag 4330 f100 8d 00 21 sta pausestate 4331 f103 ad 07 21 lda sCTRL 4332 f106 85 3c sta CTRL 4333 f108 4c 29 f1 jmp leavepauseroutine 4334 f10b 4335 f10b pausepressed 4336 f10b ;pause is pressed 4337 f10b ad ac 01 lda pausebuttonflag 4338 f10e c9 ff cmp #$ff 4339 f110 f0 1d beq carryonpausing 4340 f112 4341 f112 ;its a new press, increment the state 4342 f112 ee 00 21 inc pausestate 4343 f115 4344 f115 ;silence volume at the start and end of pausing 4345 f115 a9 00 lda #0 4346 f117 85 19 sta AUDV0 4347 f119 85 1a sta AUDV1 4348 f11b 4349 f11b - ifconst pokeysupport 4350 f11b - ldy #7 4351 f11b -pausesilencepokeyaudioloop 4352 f11b - sta (pokeybase),y 4353 f11b - dey 4354 f11b - bpl pausesilencepokeyaudioloop 4355 f11b endif ; pokeysupport 4356 f11b 4357 f11b a9 ff lda #$ff 4358 f11d 8d ac 01 sta pausebuttonflag 4359 f120 d0 0d bne carryonpausing 4360 f122 4361 f122 enterpausestate2 4362 f122 a9 02 lda #2 4363 f124 8d 00 21 sta pausestate 4364 f127 d0 06 bne carryonpausing 4365 f129 leavepauseroutine 4366 f129 ad 07 21 lda sCTRL 4367 f12c 85 3c sta CTRL 4368 f12e 60 rts 4369 f12f carryonpausing 4370 f12f - ifconst .pause 4371 f12f - jsr .pause 4372 f12f endif ; .pause 4373 f12f ad 07 21 lda sCTRL 4374 f132 09 80 ora #%10000000 ; turn off colorburst during pause... 4375 f134 85 3c sta CTRL 4376 f136 4c d6 f0 jmp pauseroutine 4377 f139 endif ; pauseroutineoff 4378 f139 4379 f139 4380 f139 - ifconst DOUBLEBUFFER 4381 f139 -skipterminatedisplaylistreturn 4382 f139 - rts 4383 f139 endif ; DOUBLEBUFFER 4384 f139 terminatedisplaylist 4385 f139 - ifconst DOUBLEBUFFER 4386 f139 - lda doublebufferstate 4387 f139 - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 4388 f139 endif ; DOUBLEBUFFER 4389 f139 terminatedisplaybuffer 4390 f139 ;add DL end entry on each DL 4391 f139 a2 17 ldx #(WZONECOUNT-1) 4392 f13b dlendloop 4393 f13b bd 3c f6 lda DLPOINTL,x 4394 f13e - ifconst DOUBLEBUFFER 4395 f13e - clc 4396 f13e - adc doublebufferdloffset 4397 f13e endif ; DOUBLEBUFFER 4398 f13e 85 63 sta dlpnt 4399 f140 bd 24 f6 lda DLPOINTH,x 4400 f143 - ifconst DOUBLEBUFFER 4401 f143 - adc #0 4402 f143 endif ; DOUBLEBUFFER 4403 f143 85 64 sta dlpnt+1 4404 f145 b4 65 ldy dlend,x 4405 f147 a9 00 lda #$00 4406 f149 dlendmoreloops 4407 f149 c8 iny 4408 f14a 91 63 sta (dlpnt),y 4409 f14c - ifconst FRAMESKIPGLITCHFIXWEAK 4410 f14c - cpy #DLLASTOBJ+1 4411 f14c - beq dlendthiszonedone 4412 f14c - iny 4413 f14c - iny 4414 f14c - iny 4415 f14c - iny 4416 f14c - iny 4417 f14c - sta (dlpnt),y 4418 f14c -dlendthiszonedone 4419 f14c endif FRAMESKIPGLITCHFIXWEAK 4420 f14c - ifconst FRAMESKIPGLITCHFIX 4421 f14c - iny 4422 f14c - iny 4423 f14c - iny 4424 f14c - iny 4425 f14c - cpy #DLLASTOBJ-1 4426 f14c - bcc dlendmoreloops 4427 f14c endif ; FRAMESKIPGLITCHFIX 4428 f14c ca dex 4429 f14d 10 ec bpl dlendloop 4430 f14f 4431 f14f ifnconst pauseroutineoff 4432 f14f 20 d6 f0 jsr pauseroutine 4433 f152 endif ; pauseroutineoff 4434 f152 60 rts 4435 f153 4436 f153 uninterruptableroutines 4437 f153 ; this is for routines that must happen off the visible screen, each frame. 4438 f153 4439 f153 - ifconst AVOXVOICE 4440 f153 - jsr serviceatarivoxqueue 4441 f153 endif 4442 f153 4443 f153 a9 00 lda #0 4444 f155 8d b6 01 sta palfastframe 4445 f158 ad 09 21 lda paldetected 4446 f15b f0 10 beq skippalframeadjusting 4447 f15d ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 4448 f15d ae b5 01 ldx palframes 4449 f160 e8 inx 4450 f161 e0 05 cpx #5 4451 f163 d0 05 bne palframeskipdone 4452 f165 ee b6 01 inc palfastframe 4453 f168 a2 00 ldx #0 4454 f16a palframeskipdone 4455 f16a 8e b5 01 stx palframes 4456 f16d skippalframeadjusting 4457 f16d 4458 f16d - ifconst MUSICTRACKER 4459 f16d - ; We normally run the servicesong routine from the top-screen interrupt, but if it 4460 f16d - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 4461 f16d - ; If that happens, we try again here. Chances are very small we'll run into the same 4462 f16d - ; problem twice, and if we do, we just drop a musical note or two. 4463 f16d - lda sfxschedulemissed 4464 f16d - beq servicesongwasnotmissed 4465 f16d - jsr servicesong 4466 f16d -servicesongwasnotmissed 4467 f16d endif ; MUSICTRACKER 4468 f16d 4469 f16d 60 rts 4470 f16e 4471 f16e serviceatarivoxqueue 4472 f16e - ifconst AVOXVOICE 4473 f16e - lda voxlock 4474 f16e - bne skipvoxprocessing ; the vox is in the middle of speech address update 4475 f16e -skipvoxqueuesizedec 4476 f16e - jmp processavoxvoice 4477 f16e -skipvoxprocessing 4478 f16e - rts 4479 f16e - 4480 f16e -processavoxvoice 4481 f16e - lda avoxenable 4482 f16e - bne avoxfixport 4483 f16e - SPKOUT tempavox 4484 f16e - rts 4485 f16e -avoxfixport 4486 f16e - lda #0 ; restore the port to all bits as inputs... 4487 f16e - sta CTLSWA 4488 f16e - rts 4489 f16e -silenceavoxvoice 4490 f16e - SPEAK avoxsilentdata 4491 f16e - rts 4492 f16e -avoxsilentdata 4493 f16e - .byte 31,255 4494 f16e else 4495 f16e 60 rts 4496 f16f endif ; AVOXVOICE 4497 f16f 4498 f16f joybuttonhandler 4499 f16f 8a txa 4500 f170 0a asl 4501 f171 a8 tay 4502 f172 b9 08 00 lda INPT0,y 4503 f175 4a lsr 4504 f176 9d 02 21 sta sINPT1,x 4505 f179 b9 09 00 lda INPT1,y 4506 f17c 29 80 and #%10000000 4507 f17e 1d 02 21 ora sINPT1,x 4508 f181 9d 02 21 sta sINPT1,x 4509 f184 4510 f184 b5 0c lda INPT4,x 4511 f186 30 19 bmi .skip1bjoyfirecheck 4512 f188 ;one button joystick is down 4513 f188 49 80 eor #%10000000 4514 f18a 9d 02 21 sta sINPT1,x 4515 f18d 4516 f18d ad b1 01 lda joybuttonmode 4517 f190 3d a4 f1 and twobuttonmask,x 4518 f193 f0 0c beq .skip1bjoyfirecheck 4519 f195 ad b1 01 lda joybuttonmode 4520 f198 1d a4 f1 ora twobuttonmask,x 4521 f19b 8d b1 01 sta joybuttonmode 4522 f19e 8d 82 02 sta SWCHB 4523 f1a1 .skip1bjoyfirecheck 4524 f1a1 4c 5c f0 jmp buttonreadloopreturn 4525 f1a4 4526 f1a4 twobuttonmask 4527 f1a4 04 10 .byte.b %00000100,%00010000 4528 f1a6 4529 f1a6 gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 4530 f1a6 - ifconst LIGHTGUNSUPPORT 4531 f1a6 - cpx #0 4532 f1a6 - bne secondportgunhandler 4533 f1a6 -firstportgunhandler 4534 f1a6 - lda SWCHA 4535 f1a6 - asl 4536 f1a6 - asl 4537 f1a6 - asl ; shift D4 to D7 4538 f1a6 - and #%10000000 4539 f1a6 - eor #%10000000 4540 f1a6 - sta sINPT1 4541 f1a6 - jmp buttonreadloopreturn 4542 f1a6 -secondportgunhandler 4543 f1a6 - lda SWCHA 4544 f1a6 - lsr ; shift D0 into carry 4545 f1a6 - lsr ; shift carry into D7 4546 f1a6 - and #%10000000 4547 f1a6 - eor #%10000000 4548 f1a6 - sta sINPT3 4549 f1a6 - jmp buttonreadloopreturn 4550 f1a6 endif ; LIGHTGUNSUPPORT 4551 f1a6 4552 f1a6 controlsusing2buttoncode 4553 f1a6 00 .byte.b 0 ; 00=no controller plugged in 4554 f1a7 01 .byte.b 1 ; 01=proline joystick 4555 f1a8 00 .byte.b 0 ; 02=lightgun 4556 f1a9 00 .byte.b 0 ; 03=paddle 4557 f1aa 01 .byte.b 1 ; 04=trakball 4558 f1ab 01 .byte.b 1 ; 05=vcs joystick 4559 f1ac 01 .byte.b 1 ; 06=driving control 4560 f1ad 00 .byte.b 0 ; 07=keypad control 4561 f1ae 00 .byte.b 0 ; 08=st mouse/cx80 4562 f1af 00 .byte.b 0 ; 09=amiga mouse 4563 f1b0 01 .byte.b 1 ; 10=atarivox 4564 f1b1 4565 f1b1 buttonhandlerhi 4566 f1b1 00 .byte.b 0 ; 00=no controller plugged in 4567 f1b2 f1 .byte.b >joybuttonhandler ; 01=proline joystick 4568 f1b3 f1 .byte.b >gunbuttonhandler ; 02=lightgun 4569 f1b4 f5 .byte.b >paddlebuttonhandler ; 03=paddle 4570 f1b5 f1 .byte.b >joybuttonhandler ; 04=trakball 4571 f1b6 f1 .byte.b >joybuttonhandler ; 05=vcs joystick 4572 f1b7 f1 .byte.b >joybuttonhandler ; 06=driving control 4573 f1b8 00 .byte.b 0 ; 07=keypad 4574 f1b9 f5 .byte.b >mousebuttonhandler ; 08=st mouse 4575 f1ba f5 .byte.b >mousebuttonhandler ; 09=amiga mouse 4576 f1bb f1 .byte.b >joybuttonhandler ; 10=atarivox 4577 f1bc buttonhandlerlo 4578 f1bc 00 .byte.b 0 ; 00=no controller plugged in 4579 f1bd 6f .byte.b $0F means the sound is looped while priority is active 4680 f21a 4681 f21a 05 d9 ora inttemp2 4682 f21c 05 d8 ora inttemp1 ; check if F|C|V=0 4683 f21e f0 23 beq zerosfx ; if so, we're at the end of the sound. 4684 f220 4685 f220 advancesfxpointer 4686 f220 ; advance the pointer to the next sound chunk 4687 f220 c8 iny 4688 f221 84 da sty inttemp3 4689 f223 18 clc 4690 f224 b5 4e lda sfx1pointlo,x 4691 f226 65 da adc inttemp3 4692 f228 95 4e sta sfx1pointlo,x 4693 f22a b5 50 lda sfx1pointhi,x 4694 f22c 69 00 adc #0 4695 f22e 95 50 sta sfx1pointhi,x 4696 f230 4c db f1 jmp servicesfxchannelsloop 4697 f233 4698 f233 sfxsoundloop 4699 f233 48 pha 4700 f234 b5 52 lda sfx1priority,x 4701 f236 d0 04 bne sfxsoundloop_carryon 4702 f238 68 pla ; fix the stack before we go 4703 f239 4c 20 f2 jmp advancesfxpointer 4704 f23c sfxsoundloop_carryon 4705 f23c 68 pla 4706 f23d 29 f0 and #$F0 4707 f23f 4a lsr 4708 f240 4a lsr 4709 f241 4a lsr 4710 f242 4a lsr 4711 f243 4712 f243 zerosfx 4713 f243 95 4e sta sfx1pointlo,x 4714 f245 95 50 sta sfx1pointhi,x 4715 f247 95 52 sta sfx1priority,x 4716 f249 4c db f1 jmp servicesfxchannelsloop 4717 f24c 4718 f24c 4719 f24c schedulesfx 4720 f24c ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 4721 f24c a0 00 ldy #0 4722 f24e b1 e0 lda (sfxinstrumentlo),y 4723 f250 - ifconst pokeysupport 4724 f250 - cmp #$20 ; POKEY? 4725 f250 - bne scheduletiasfx 4726 f250 - jmp schedulepokeysfx 4727 f250 endif 4728 f250 scheduletiasfx 4729 f250 ;cmp #$10 ; TIA? 4730 f250 ;beq continuescheduletiasfx 4731 f250 ; rts ; unhandled!!! 4732 f250 continuescheduletiasfx 4733 f250 ifnconst TIASFXMONO 4734 f250 a5 4e lda sfx1pointlo 4735 f252 05 50 ora sfx1pointhi 4736 f254 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 4737 f256 a5 4f lda sfx2pointlo 4738 f258 05 51 ora sfx2pointhi 4739 f25a f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 4740 f25c ; Both channels are scheduled. 4741 f25c a0 01 ldy #1 4742 f25e b1 e0 lda (sfxinstrumentlo),y 4743 f260 d0 01 bne interruptsfx 4744 f262 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 4745 f263 interruptsfx 4746 f263 ;Compare which active sound has a lower priority. We'll interrupt the lower one. 4747 f263 a5 52 lda sfx1priority 4748 f265 c5 53 cmp sfx2priority 4749 f267 b0 04 bcs schedulesfx2 4750 f269 endif ; !TIASFXMONO 4751 f269 4752 f269 schedulesfx1 4753 f269 a2 00 ldx #0 ; channel 1 4754 f26b ifnconst TIASFXMONO 4755 f26b f0 02 beq skipschedulesfx2 4756 f26d schedulesfx2 4757 f26d a2 01 ldx #1 ; channel 2 4758 f26f skipschedulesfx2 4759 f26f endif ; !TIASFXMONO 4760 f26f 4761 f26f - ifconst MUSICTRACKER 4762 f26f - lda sfxnoteindex 4763 f26f - bpl skipdrumkitoverride 4764 f26f - and #$7F ; subtract 128 4765 f26f - sec 4766 f26f - sbc #4 ; drums start at 132, i.e. octave 10 4767 f26f - asl 4768 f26f - tay 4769 f26f - lda tiadrumkitdefinition,y 4770 f26f - sta sfxinstrumentlo 4771 f26f - iny 4772 f26f - lda tiadrumkitdefinition,y 4773 f26f - sta sfxinstrumenthi 4774 f26f - lda #0 4775 f26f - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 4776 f26f -skipdrumkitoverride 4777 f26f endif ; MUSICTRACKER 4778 f26f a0 01 ldy #1 ; get priority and sound-resolution (in frames) 4779 f271 b1 e0 lda (sfxinstrumentlo),y 4780 f273 95 52 sta sfx1priority,x 4781 f275 c8 iny 4782 f276 b1 e0 lda (sfxinstrumentlo),y 4783 f278 95 56 sta sfx1frames,x 4784 f27a a5 e0 lda sfxinstrumentlo 4785 f27c 18 clc 4786 f27d 69 03 adc #3 4787 f27f 95 4e sta sfx1pointlo,x 4788 f281 a5 e1 lda sfxinstrumenthi 4789 f283 69 00 adc #0 4790 f285 95 50 sta sfx1pointhi,x 4791 f287 a5 e2 lda sfxpitchoffset 4792 f289 95 54 sta sfx1poffset,x 4793 f28b a9 00 lda #0 4794 f28d 95 58 sta sfx1tick,x 4795 f28f a5 e3 lda sfxnoteindex 4796 f291 95 cd sta sfx1notedata,x 4797 f293 60 rts 4798 f294 4799 f294 plotsprite 4800 f294 ifnconst NODRAWWAIT 4801 f294 - ifconst DOUBLEBUFFER 4802 f294 - lda doublebufferstate 4803 f294 - bne skipplotspritewait 4804 f294 endif ; DOUBLEBUFFER 4805 f294 - ifconst DEBUGWAITCOLOR 4806 f294 - lda #$41 4807 f294 - sta BACKGRND 4808 f294 endif 4809 f294 plotspritewait 4810 f294 a5 4d lda visibleover 4811 f296 d0 fc bne plotspritewait 4812 f298 skipplotspritewait 4813 f298 - ifconst DEBUGWAITCOLOR 4814 f298 - lda #$0 4815 f298 - sta BACKGRND 4816 f298 endif 4817 f298 endif 4818 f298 4819 f298 ;arguments: 4820 f298 ; temp1=lo graphicdata 4821 f298 ; temp2=hi graphicdata 4822 f298 ; temp3=palette | width byte 4823 f298 ; temp4=x 4824 f298 ; temp5=y 4825 f298 ; temp6=mode 4826 f298 a5 46 lda temp5 ;Y position 4827 f29a 4a lsr ; 2 - Divide by 8 or 16 4828 f29b 4a lsr ; 2 4829 f29c 4a lsr ; 2 4830 f29d - if WZONEHEIGHT = 16 4831 f29d - lsr ; 2 4832 f29d endif 4833 f29d 4834 f29d aa tax 4835 f29e 4836 f29e ifnconst NOLIMITCHECKING 4837 f29e 4838 f29e ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 4839 f29e 4840 f29e c9 18 cmp #WZONECOUNT 4841 f2a0 4842 f2a0 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 4843 f2a2 ; otherwise, check to see if the bottom half is in zone 0... 4844 f2a2 4845 f2a2 - if WZONEHEIGHT = 16 4846 f2a2 - cmp #15 4847 f2a2 else 4848 f2a2 c9 1f cmp #31 4849 f2a4 endif 4850 f2a4 4851 f2a4 d0 05 bne exitplotsprite1 4852 f2a6 a2 00 ldx #0 4853 f2a8 4c e5 f2 jmp continueplotsprite2 4854 f2ab exitplotsprite1 4855 f2ab 60 rts 4856 f2ac 4857 f2ac continueplotsprite1 4858 f2ac endif 4859 f2ac 4860 f2ac bd 3c f6 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 4861 f2af - ifconst DOUBLEBUFFER 4862 f2af - clc 4863 f2af - adc doublebufferdloffset 4864 f2af endif ; DOUBLEBUFFER 4865 f2af 85 63 sta dlpnt 4866 f2b1 bd 24 f6 lda DLPOINTH,x 4867 f2b4 - ifconst DOUBLEBUFFER 4868 f2b4 - adc #0 4869 f2b4 endif ; DOUBLEBUFFER 4870 f2b4 85 64 sta dlpnt+1 4871 f2b6 4872 f2b6 ;Create DL entry for upper part of sprite 4873 f2b6 4874 f2b6 b4 65 ldy dlend,x ;Get the index to the end of this DL 4875 f2b8 4876 f2b8 ifconst CHECKOVERWRITE 4877 f2b8 c0 4b cpy #DLLASTOBJ 4878 f2ba f0 21 beq checkcontinueplotsprite2 4879 f2bc continueplotsprite1a 4880 f2bc endif 4881 f2bc 4882 f2bc a5 42 lda temp1 ; graphic data, lo byte 4883 f2be 91 63 sta (dlpnt),y ;Low byte of data address 4884 f2c0 4885 f2c0 ifnconst ATOMICSPRITEUPDATE 4886 f2c0 c8 iny 4887 f2c1 a5 47 lda temp6 4888 f2c3 91 63 sta (dlpnt),y 4889 f2c5 - else 4890 f2c5 - iny 4891 f2c5 - sty temp8 4892 f2c5 endif 4893 f2c5 4894 f2c5 c8 iny 4895 f2c6 4896 f2c6 a5 46 lda temp5 ;Y position 4897 f2c8 29 07 and #(WZONEHEIGHT - 1) 4898 f2ca c9 01 cmp #1 ; clear carry if our sprite is just in this zone 4899 f2cc 05 43 ora temp2 ; graphic data, hi byte 4900 f2ce 91 63 sta (dlpnt),y 4901 f2d0 4902 f2d0 4903 f2d0 c8 iny 4904 f2d1 a5 44 lda temp3 ;palette|width 4905 f2d3 91 63 sta (dlpnt),y 4906 f2d5 4907 f2d5 c8 iny 4908 f2d6 a5 45 lda temp4 ;Horizontal position 4909 f2d8 91 63 sta (dlpnt),y 4910 f2da 4911 f2da c8 iny 4912 f2db 94 65 sty dlend,x 4913 f2dd 4914 f2dd - ifconst ALWAYSTERMINATE 4915 f2dd - iny 4916 f2dd - lda #0 4917 f2dd - sta (dlpnt),y 4918 f2dd endif 4919 f2dd 4920 f2dd - ifconst ATOMICSPRITEUPDATE 4921 f2dd - ldy temp8 4922 f2dd - lda temp6 4923 f2dd - sta (dlpnt),y 4924 f2dd endif 4925 f2dd 4926 f2dd checkcontinueplotsprite2 4927 f2dd 4928 f2dd 90 38 bcc doneSPDL ;branch if the sprite was fully in the last zone 4929 f2df 4930 f2df ;Create DL entry for lower part of sprite 4931 f2df 4932 f2df e8 inx ;Next region 4933 f2e0 4934 f2e0 ifnconst NOLIMITCHECKING 4935 f2e0 e0 18 cpx #WZONECOUNT 4936 f2e2 4937 f2e2 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 4938 f2e4 60 rts 4939 f2e5 continueplotsprite2 4940 f2e5 endif 4941 f2e5 4942 f2e5 bd 3c f6 lda DLPOINTL,x ;Get pointer to next DL 4943 f2e8 - ifconst DOUBLEBUFFER 4944 f2e8 - clc 4945 f2e8 - adc doublebufferdloffset 4946 f2e8 endif ; DOUBLEBUFFER 4947 f2e8 85 63 sta dlpnt 4948 f2ea bd 24 f6 lda DLPOINTH,x 4949 f2ed - ifconst DOUBLEBUFFER 4950 f2ed - adc #0 4951 f2ed endif ; DOUBLEBUFFER 4952 f2ed 85 64 sta dlpnt+1 4953 f2ef b4 65 ldy dlend,x ;Get the index to the end of this DL 4954 f2f1 4955 f2f1 ifconst CHECKOVERWRITE 4956 f2f1 c0 4b cpy #DLLASTOBJ 4957 f2f3 d0 01 bne continueplotsprite2a 4958 f2f5 60 rts 4959 f2f6 continueplotsprite2a 4960 f2f6 endif 4961 f2f6 4962 f2f6 a5 42 lda temp1 ; graphic data, lo byte 4963 f2f8 91 63 sta (dlpnt),y 4964 f2fa 4965 f2fa ifnconst ATOMICSPRITEUPDATE 4966 f2fa c8 iny 4967 f2fb a5 47 lda temp6 4968 f2fd 91 63 sta (dlpnt),y 4969 f2ff - else 4970 f2ff - iny 4971 f2ff - sty temp8 4972 f2ff endif 4973 f2ff 4974 f2ff c8 iny 4975 f300 4976 f300 a5 46 lda temp5 ;Y position 4977 f302 0b 07 anc #(WZONEHEIGHT - 1) ; undocumented. A=A&IMM, then move bit 7 into carry 4978 f304 05 43 ora temp2 ; graphic data, hi byte 4979 f306 e9 07 sbc #(WZONEHEIGHT-1) ; start at the DMA hole. -1 because carry is clear 4980 f308 91 63 sta (dlpnt),y 4981 f30a 4982 f30a c8 iny 4983 f30b 4984 f30b a5 44 lda temp3 ;palette|width 4985 f30d 91 63 sta (dlpnt),y 4986 f30f 4987 f30f c8 iny 4988 f310 4989 f310 a5 45 lda temp4 ;Horizontal position 4990 f312 91 63 sta (dlpnt),y 4991 f314 4992 f314 c8 iny 4993 f315 94 65 sty dlend,x 4994 f317 4995 f317 - ifconst ALWAYSTERMINATE 4996 f317 - iny 4997 f317 - lda #0 4998 f317 - sta (dlpnt),y 4999 f317 endif 5000 f317 5001 f317 - ifconst ATOMICSPRITEUPDATE 5002 f317 - ldy temp8 5003 f317 - lda temp6 5004 f317 - sta (dlpnt),y 5005 f317 endif 5006 f317 5007 f317 doneSPDL 5008 f317 60 rts 5009 f318 5010 f318 5011 f318 lockzonex 5012 f318 - ifconst ZONELOCKS 5013 f318 - ldy dlend,x 5014 f318 - cpy #DLLASTOBJ 5015 f318 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 5016 f318 - lda DLPOINTL,x 5017 f318 - ifconst DOUBLEBUFFER 5018 f318 - clc 5019 f318 - adc doublebufferdloffset 5020 f318 - endif ; DOUBLEBUFFER 5021 f318 - sta dlpnt 5022 f318 - lda DLPOINTH,x 5023 f318 - ifconst DOUBLEBUFFER 5024 f318 - adc #0 5025 f318 - endif ; DOUBLEBUFFER 5026 f318 - sta dlpnt+1 5027 f318 - iny 5028 f318 - lda #0 5029 f318 - sta (dlpnt),y 5030 f318 - dey 5031 f318 - tya 5032 f318 - ldy #(DLLASTOBJ-1) 5033 f318 - sta (dlpnt),y 5034 f318 - iny 5035 f318 - sty dlend,x 5036 f318 -lockzonexreturn 5037 f318 - rts 5038 f318 endif ; ZONELOCKS 5039 f318 unlockzonex 5040 f318 - ifconst ZONELOCKS 5041 f318 - ldy dlend,x 5042 f318 - cpy #DLLASTOBJ 5043 f318 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 5044 f318 - lda DLPOINTL,x 5045 f318 - ifconst DOUBLEBUFFER 5046 f318 - clc 5047 f318 - adc doublebufferdloffset 5048 f318 - endif ; DOUBLEBUFFER 5049 f318 - sta dlpnt 5050 f318 - lda DLPOINTH,x 5051 f318 - ifconst DOUBLEBUFFER 5052 f318 - adc #0 5053 f318 - endif ; DOUBLEBUFFER 5054 f318 - sta dlpnt+1 5055 f318 - dey 5056 f318 - ;ldy #(DLLASTOBJ-1) 5057 f318 - lda (dlpnt),y 5058 f318 - tay 5059 f318 - sty dlend,x 5060 f318 -unlockzonexreturn 5061 f318 endif ; ZONELOCKS 5062 f318 60 rts 5063 f319 5064 f319 plotcharloop 5065 f319 ; ** read from a data indirectly pointed to from temp8,temp9 5066 f319 ; ** format is: lo_data, hi_data, palette|width, x, y 5067 f319 ; ** format ends with lo_data | hi_data = 0 5068 f319 5069 f319 - ifconst DOUBLEBUFFER 5070 f319 - lda doublebufferstate 5071 f319 - bne skipplotcharloopwait 5072 f319 endif ; DOUBLEBUFFER 5073 f319 - ifconst DEBUGWAITCOLOR 5074 f319 - lda #$61 5075 f319 - sta BACKGRND 5076 f319 endif 5077 f319 plotcharloopwait 5078 f319 a5 4d lda visibleover 5079 f31b d0 fc bne plotcharloopwait 5080 f31d - ifconst DEBUGWAITCOLOR 5081 f31d - lda #0 5082 f31d - sta BACKGRND 5083 f31d endif 5084 f31d skipplotcharloopwait 5085 f31d plotcharlooploop 5086 f31d a0 00 ldy #0 5087 f31f b1 49 lda (temp8),y 5088 f321 85 42 sta temp1 5089 f323 c8 iny 5090 f324 b1 49 lda (temp8),y 5091 f326 85 43 sta temp2 5092 f328 05 42 ora temp1 5093 f32a d0 01 bne plotcharloopcontinue 5094 f32c ;the pointer=0, so return 5095 f32c 60 rts 5096 f32d plotcharloopcontinue 5097 f32d c8 iny 5098 f32e b1 49 lda (temp8),y 5099 f330 85 44 sta temp3 5100 f332 c8 iny 5101 f333 b1 49 lda (temp8),y 5102 f335 85 45 sta temp4 5103 f337 c8 iny 5104 f338 b1 49 lda (temp8),y 5105 f33a ;sta temp5 ; not needed with our late entry. 5106 f33a 20 53 f3 jsr plotcharactersskipentry 5107 f33d a5 49 lda temp8 5108 f33f 18 clc 5109 f340 69 05 adc #5 5110 f342 85 49 sta temp8 5111 f344 a5 4a lda temp9 5112 f346 69 00 adc #0 5113 f348 85 4a sta temp9 5114 f34a 4c 1d f3 jmp plotcharlooploop 5115 f34d 5116 f34d plotcharacters 5117 f34d - ifconst DOUBLEBUFFER 5118 f34d - lda doublebufferstate 5119 f34d - bne skipplotcharacterswait 5120 f34d endif ; DOUBLEBUFFER 5121 f34d - ifconst DEBUGWAITCOLOR 5122 f34d - lda #$41 5123 f34d - sta BACKGRND 5124 f34d endif 5125 f34d plotcharacterswait 5126 f34d a5 4d lda visibleover 5127 f34f d0 fc bne plotcharacterswait 5128 f351 - ifconst DEBUGWAITCOLOR 5129 f351 - sta BACKGRND 5130 f351 endif 5131 f351 skipplotcharacterswait 5132 f351 ;arguments: 5133 f351 ; temp1=lo charactermap 5134 f351 ; temp2=hi charactermap 5135 f351 ; temp3=palette | width byte 5136 f351 ; temp4=x 5137 f351 ; temp5=y 5138 f351 5139 f351 a5 46 lda temp5 ;Y position 5140 f353 5141 f353 plotcharactersskipentry 5142 f353 5143 f353 ;ifconst ZONEHEIGHT 5144 f353 ; if ZONEHEIGHT = 16 5145 f353 ; and #$0F 5146 f353 ; endif 5147 f353 ; if ZONEHEIGHT = 8 5148 f353 ; and #$1F 5149 f353 ; endif 5150 f353 ;else 5151 f353 ; and #$0F 5152 f353 ;endif 5153 f353 5154 f353 aa tax 5155 f354 bd 3c f6 lda DLPOINTL,x ;Get pointer to DL that the characters are in 5156 f357 - ifconst DOUBLEBUFFER 5157 f357 - clc 5158 f357 - adc doublebufferdloffset 5159 f357 endif ; DOUBLEBUFFER 5160 f357 85 63 sta dlpnt 5161 f359 bd 24 f6 lda DLPOINTH,x 5162 f35c - ifconst DOUBLEBUFFER 5163 f35c - adc #0 5164 f35c endif ; DOUBLEBUFFER 5165 f35c 85 64 sta dlpnt+1 5166 f35e 5167 f35e ;Create DL entry for the characters 5168 f35e 5169 f35e b4 65 ldy dlend,x ;Get the index to the end of this DL 5170 f360 5171 f360 ifconst CHECKOVERWRITE 5172 f360 c0 4b cpy #DLLASTOBJ 5173 f362 d0 01 bne continueplotcharacters 5174 f364 60 rts 5175 f365 continueplotcharacters 5176 f365 endif 5177 f365 5178 f365 a5 42 lda temp1 ; character map data, lo byte 5179 f367 91 63 sta (dlpnt),y ;(1) store low address 5180 f369 5181 f369 c8 iny 5182 f36a ad 06 21 lda charactermode 5183 f36d 91 63 sta (dlpnt),y ;(2) store mode 5184 f36f 5185 f36f c8 iny 5186 f370 a5 43 lda temp2 ; character map, hi byte 5187 f372 91 63 sta (dlpnt),y ;(3) store high address 5188 f374 5189 f374 c8 iny 5190 f375 a5 44 lda temp3 ;palette|width 5191 f377 91 63 sta (dlpnt),y ;(4) store palette|width 5192 f379 5193 f379 c8 iny 5194 f37a a5 45 lda temp4 ;Horizontal position 5195 f37c 91 63 sta (dlpnt),y ;(5) store horizontal position 5196 f37e 5197 f37e c8 iny 5198 f37f 94 65 sty dlend,x ; save display list end byte 5199 f381 60 rts 5200 f382 5201 f382 5202 f382 - ifconst plotvalueonscreen 5203 f382 -plotcharacterslive 5204 f382 - ; a version of plotcharacters that draws live and minimally disrupts the screen... 5205 f382 - 5206 f382 - ;arguments: 5207 f382 - ; temp1=lo charactermap 5208 f382 - ; temp2=hi charactermap 5209 f382 - ; temp3=palette | width byte 5210 f382 - ; temp4=x 5211 f382 - ; temp5=y 5212 f382 - 5213 f382 - lda temp5 ;Y position 5214 f382 - 5215 f382 - tax 5216 f382 - lda DLPOINTL,x ;Get pointer to DL that the characters are in 5217 f382 - ifconst DOUBLEBUFFER 5218 f382 - clc 5219 f382 - adc doublebufferdloffset 5220 f382 - endif ; DOUBLEBUFFER 5221 f382 - sta dlpnt 5222 f382 - lda DLPOINTH,x 5223 f382 - ifconst DOUBLEBUFFER 5224 f382 - adc #0 5225 f382 - endif ; DOUBLEBUFFER 5226 f382 - sta dlpnt+1 5227 f382 - 5228 f382 - ;Create DL entry for the characters 5229 f382 - 5230 f382 - ldy dlend,x ;Get the index to the end of this DL 5231 f382 - 5232 f382 - ifconst CHECKOVERWRITE 5233 f382 - cpy #DLLASTOBJ 5234 f382 - bne continueplotcharacterslive 5235 f382 - rts 5236 f382 -continueplotcharacterslive 5237 f382 - endif 5238 f382 - 5239 f382 - lda temp1 ; character map data, lo byte 5240 f382 - sta (dlpnt),y ;(1) store low address 5241 f382 - 5242 f382 - iny 5243 f382 - ; we don't add the second byte yet, since the charmap could briefly 5244 f382 - ; render without a proper character map address, width, or position. 5245 f382 - lda charactermode 5246 f382 - sta (dlpnt),y ;(2) store mode 5247 f382 - 5248 f382 - iny 5249 f382 - lda temp2 ; character map, hi byte 5250 f382 - sta (dlpnt),y ;(3) store high address 5251 f382 - 5252 f382 - iny 5253 f382 - lda temp3 ;palette|width 5254 f382 - sta (dlpnt),y ;(4) store palette|width 5255 f382 - 5256 f382 - iny 5257 f382 - lda temp4 ;Horizontal position 5258 f382 - sta (dlpnt),y ;(5) store horizontal position 5259 f382 - 5260 f382 - iny 5261 f382 - sty dlend,x ; save display list end byte 5262 f382 - 5263 f382 - rts 5264 f382 endif ;plotcharacterslive 5265 f382 5266 f382 ifconst USED_PLOTVALUE 5267 f382 plotvalue 5268 f382 ; calling 7800basic command: 5269 f382 ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 5270 f382 ; ...displays the variable as BCD digits 5271 f382 ; 5272 f382 ; asm sub arguments: 5273 f382 ; temp1=lo charactermap 5274 f382 ; temp2=hi charactermap 5275 f382 ; temp3=palette | width byte 5276 f382 ; temp4=x 5277 f382 ; temp5=y 5278 f382 ; temp6=number of digits 5279 f382 ; temp7=lo variable 5280 f382 ; temp8=hi variable 5281 f382 ; temp9=character mode 5282 f382 5283 f382 00 47 plotdigitcount = temp6 5284 f382 5285 f382 - ifconst ZONELOCKS 5286 f382 - ldx temp5 5287 f382 - ldy dlend,x 5288 f382 - cpy #DLLASTOBJ 5289 f382 - bne carryonplotvalue 5290 f382 - rts 5291 f382 -carryonplotvalue 5292 f382 endif 5293 f382 5294 f382 a9 00 lda #0 5295 f384 a8 tay 5296 f385 ae ad 01 ldx valbufend 5297 f388 5298 f388 a5 47 lda plotdigitcount 5299 f38a 29 01 and #1 5300 f38c f0 07 beq pvnibble2char 5301 f38e a9 00 lda #0 5302 f390 9d 00 20 sta VALBUFFER,x ; just in case we skip this digit 5303 f393 f0 10 beq pvnibble2char_skipnibble 5304 f395 5305 f395 pvnibble2char 5306 f395 ; high nibble... 5307 f395 b1 48 lda (temp7),y 5308 f397 29 f0 and #$f0 5309 f399 4a lsr 5310 f39a 4a lsr 5311 f39b 4a lsr 5312 f39c - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 5313 f39c - lsr 5314 f39c endif 5315 f39c 5316 f39c 18 clc 5317 f39d 65 42 adc temp1 ; add the offset to character graphics to our value 5318 f39f 9d 00 20 sta VALBUFFER,x 5319 f3a2 e8 inx 5320 f3a3 c6 47 dec plotdigitcount 5321 f3a5 5322 f3a5 pvnibble2char_skipnibble 5323 f3a5 ; low nibble... 5324 f3a5 b1 48 lda (temp7),y 5325 f3a7 29 0f and #$0f 5326 f3a9 ifconst DOUBLEWIDE ; multiply value by 2 for double-width 5327 f3a9 0a asl 5328 f3aa endif 5329 f3aa 18 clc 5330 f3ab 65 42 adc temp1 ; add the offset to character graphics to our value 5331 f3ad 9d 00 20 sta VALBUFFER,x 5332 f3b0 e8 inx 5333 f3b1 c8 iny 5334 f3b2 5335 f3b2 c6 47 dec plotdigitcount 5336 f3b4 d0 df bne pvnibble2char 5337 f3b6 5338 f3b6 ;point to the start of our valuebuffer 5339 f3b6 18 clc 5340 f3b7 a9 00 lda #VALBUFFER 5344 f3c0 69 00 adc #0 5345 f3c2 85 43 sta temp2 5346 f3c4 5347 f3c4 ;advance valbufend to the end of our value buffer 5348 f3c4 8e ad 01 stx valbufend 5349 f3c7 5350 f3c7 ifnconst plotvalueonscreen 5351 f3c7 4c 4d f3 jmp plotcharacters 5352 f3ca - else 5353 f3ca - jmp plotcharacterslive 5354 f3ca endif 5355 f3ca 5356 f3ca endif ; USED_PLOTVALUE 5357 f3ca 5358 f3ca 5359 f3ca - ifconst USED_PLOTVALUEEXTRA 5360 f3ca -plotdigitcount = temp6 5361 f3ca -plotvalueextra 5362 f3ca - ; calling 7800basic command: 5363 f3ca - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 5364 f3ca - ; ...displays the variable as BCD digits 5365 f3ca - ; 5366 f3ca - ; asm sub arguments: 5367 f3ca - ; temp1=lo charactermap 5368 f3ca - ; temp2=hi charactermap 5369 f3ca - ; temp3=palette | width byte 5370 f3ca - ; temp4=x 5371 f3ca - ; temp5=y 5372 f3ca - ; temp6=number of digits 5373 f3ca - ; temp7=lo variable 5374 f3ca - ; temp8=hi variable 5375 f3ca - 5376 f3ca - lda #0 5377 f3ca - tay 5378 f3ca - ldx valbufend 5379 f3ca - ifnconst plotvalueonscreen 5380 f3ca - sta VALBUFFER,x 5381 f3ca - endif 5382 f3ca - 5383 f3ca - lda plotdigitcount 5384 f3ca - and #1 5385 f3ca - 5386 f3ca - bne pvnibble2char_skipnibbleextra 5387 f3ca - 5388 f3ca -pvnibble2charextra 5389 f3ca - ; high nibble... 5390 f3ca - lda (temp7),y 5391 f3ca - and #$f0 5392 f3ca - lsr 5393 f3ca - lsr 5394 f3ca - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 5395 f3ca - lsr 5396 f3ca - endif 5397 f3ca - clc 5398 f3ca - adc temp1 ; add the offset to character graphics to our value 5399 f3ca - sta VALBUFFER,x 5400 f3ca - inx 5401 f3ca - 5402 f3ca - ; second half of the digit 5403 f3ca - clc 5404 f3ca - adc #1 5405 f3ca - sta VALBUFFER,x 5406 f3ca - inx 5407 f3ca - 5408 f3ca -pvnibble2char_skipnibbleextra 5409 f3ca - ; low nibble... 5410 f3ca - lda (temp7),y 5411 f3ca - and #$0f 5412 f3ca - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 5413 f3ca - asl 5414 f3ca - endif 5415 f3ca - asl 5416 f3ca - 5417 f3ca - clc 5418 f3ca - adc temp1 ; add the offset to character graphics to our value 5419 f3ca - sta VALBUFFER,x 5420 f3ca - inx 5421 f3ca - 5422 f3ca - clc 5423 f3ca - adc #1 5424 f3ca - sta VALBUFFER,x 5425 f3ca - inx 5426 f3ca - iny 5427 f3ca - 5428 f3ca - dec plotdigitcount 5429 f3ca - bne pvnibble2charextra 5430 f3ca - 5431 f3ca - ;point to the start of our valuebuffer 5432 f3ca - clc 5433 f3ca - lda #VALBUFFER 5437 f3ca - adc #0 5438 f3ca - sta temp2 5439 f3ca - 5440 f3ca - ;advance valbufend to the end of our value buffer 5441 f3ca - stx valbufend 5442 f3ca - 5443 f3ca - ifnconst plotvalueonscreen 5444 f3ca - jmp plotcharacters 5445 f3ca - else 5446 f3ca - jmp plotcharacterslive 5447 f3ca - endif 5448 f3ca endif ; USED_PLOTVALUEEXTRA 5449 f3ca 5450 f3ca boxcollision 5451 f3ca ; the worst case cycle-time for the code below is 43 cycles. 5452 f3ca ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 5453 f3ca 5454 f3ca ;__boxx1 = accumulator 5455 f3ca ;__boxy1 = y 5456 f3ca 00 44 __boxw1 = temp3 5457 f3ca 00 45 __boxh1 = temp4 5458 f3ca 5459 f3ca 00 46 __boxx2 = temp5 5460 f3ca 00 47 __boxy2 = temp6 5461 f3ca 00 48 __boxw2 = temp7 5462 f3ca 00 49 __boxh2 = temp8 5463 f3ca 5464 f3ca DoXCollisionCheck 5465 f3ca ;lda __boxx1 ; skipped. already in the accumulator 5466 f3ca c5 46 cmp __boxx2 ;3 5467 f3cc b0 07 bcs X1isbiggerthanX2 ;2/3 5468 f3ce X2isbiggerthanX1 5469 f3ce ; carry is clear 5470 f3ce 65 44 adc __boxw1 ;3 5471 f3d0 c5 46 cmp __boxx2 ;3 5472 f3d2 b0 08 bcs DoYCollisionCheck ;3/2 5473 f3d4 60 rts ;6 - carry clear, no collision 5474 f3d5 X1isbiggerthanX2 5475 f3d5 18 clc ;2 5476 f3d6 e5 48 sbc __boxw2 ;3 5477 f3d8 c5 46 cmp __boxx2 ;3 5478 f3da b0 13 bcs noboxcollision ;3/2 5479 f3dc DoYCollisionCheck 5480 f3dc 98 tya ; 2 ; use to be "lda __boxy1" 5481 f3dd c5 47 cmp __boxy2 ;3 5482 f3df b0 05 bcs Y1isbiggerthanY2 ;3/2 5483 f3e1 Y2isbiggerthanY1 5484 f3e1 ; carry is clear 5485 f3e1 65 45 adc __boxh1 ;3 5486 f3e3 c5 47 cmp __boxy2 ;3 5487 f3e5 60 rts ;6 5488 f3e6 Y1isbiggerthanY2 5489 f3e6 18 clc ;2 5490 f3e7 e5 49 sbc __boxh2 ;3 5491 f3e9 c5 47 cmp __boxy2 ;3 5492 f3eb b0 02 bcs noboxcollision ;3/2 5493 f3ed yesboxcollision 5494 f3ed 38 sec ;2 5495 f3ee 60 rts ;6 5496 f3ef noboxcollision 5497 f3ef 18 clc ;2 5498 f3f0 60 rts ;6 5499 f3f1 5500 f3f1 randomize 5501 f3f1 a5 40 lda rand 5502 f3f3 4a lsr 5503 f3f4 26 41 rol rand16 5504 f3f6 90 02 bcc noeor 5505 f3f8 49 b4 eor #$B4 5506 f3fa noeor 5507 f3fa 85 40 sta rand 5508 f3fc 45 41 eor rand16 5509 f3fe 60 rts 5510 f3ff 5511 f3ff ; *** bcd conversion routine courtesy Omegamatrix 5512 f3ff ; *** http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 5513 f3ff converttobcd 5514 f3ff ;value to convert is in the accumulator 5515 f3ff 85 42 sta temp1 5516 f401 4a lsr 5517 f402 65 42 adc temp1 5518 f404 6a ror 5519 f405 4a lsr 5520 f406 4a lsr 5521 f407 65 42 adc temp1 5522 f409 6a ror 5523 f40a 65 42 adc temp1 5524 f40c 6a ror 5525 f40d 4a lsr 5526 f40e 29 3c and #$3C 5527 f410 85 43 sta temp2 5528 f412 4a lsr 5529 f413 65 43 adc temp2 5530 f415 65 42 adc temp1 5531 f417 60 rts ; return the result in the accumulator 5532 f418 5533 f418 ; Y and A contain multiplicands, result in A 5534 f418 mul8 5535 f418 84 42 sty temp1 5536 f41a 85 43 sta temp2 5537 f41c a9 00 lda #0 5538 f41e reptmul8 5539 f41e 46 43 lsr temp2 5540 f420 90 03 bcc skipmul8 5541 f422 18 clc 5542 f423 65 42 adc temp1 5543 f425 ;bcs donemul8 might save cycles? 5544 f425 skipmul8 5545 f425 ;beq donemul8 might save cycles? 5546 f425 06 42 asl temp1 5547 f427 d0 f5 bne reptmul8 5548 f429 donemul8 5549 f429 60 rts 5550 f42a 5551 f42a div8 5552 f42a ; A=numerator Y=denominator, result in A 5553 f42a c0 02 cpy #2 5554 f42c 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 5555 f42e 84 42 sty temp1 5556 f430 a0 ff ldy #$ff 5557 f432 div8loop 5558 f432 e5 42 sbc temp1 5559 f434 c8 iny 5560 f435 b0 fb bcs div8loop 5561 f437 div8end 5562 f437 98 tya 5563 f438 ; result in A 5564 f438 60 rts 5565 f439 5566 f439 ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 5567 f439 mul16 5568 f439 84 42 sty temp1 5569 f43b 85 43 sta temp2 5570 f43d 5571 f43d a9 00 lda #0 5572 f43f a2 08 ldx #8 5573 f441 46 42 lsr temp1 5574 f443 mul16_1 5575 f443 90 03 bcc mul16_2 5576 f445 18 clc 5577 f446 65 43 adc temp2 5578 f448 mul16_2 5579 f448 6a ror 5580 f449 66 42 ror temp1 5581 f44b ca dex 5582 f44c d0 f5 bne mul16_1 5583 f44e 85 43 sta temp2 5584 f450 60 rts 5585 f451 5586 f451 ; div int/int 5587 f451 ; numerator in A, denom in temp1 5588 f451 ; returns with quotient in A, remainder in temp1 5589 f451 div16 5590 f451 85 43 sta temp2 5591 f453 84 42 sty temp1 5592 f455 a9 00 lda #0 5593 f457 a2 08 ldx #8 5594 f459 06 43 asl temp2 5595 f45b div16_1 5596 f45b 2a rol 5597 f45c c5 42 cmp temp1 5598 f45e 90 02 bcc div16_2 5599 f460 e5 42 sbc temp1 5600 f462 div16_2 5601 f462 26 43 rol temp2 5602 f464 ca dex 5603 f465 d0 f4 bne div16_1 5604 f467 85 42 sta temp1 5605 f469 a5 43 lda temp2 5606 f46b 60 rts 5607 f46c 5608 f46c - ifconst bankswitchmode 5609 f46c -BS_jsr 5610 f46c - ifconst MCPDEVCART 5611 f46c - ora #$18 5612 f46c - sta $3000 5613 f46c - else 5614 f46c - sta $8000 5615 f46c - endif 5616 f46c - pla 5617 f46c - tax 5618 f46c - pla 5619 f46c - rts 5620 f46c - 5621 f46c -BS_return 5622 f46c - pla ; bankswitch bank 5623 f46c - ifconst BANKRAM 5624 f46c - sta currentbank 5625 f46c - ora currentrambank 5626 f46c - endif 5627 f46c - ifconst MCPDEVCART 5628 f46c - ora #$18 5629 f46c - sta $3000 5630 f46c - else 5631 f46c - sta $8000 5632 f46c - endif 5633 f46c - pla ; bankswitch $0 flag 5634 f46c - rts 5635 f46c endif 5636 f46c 5637 f46c checkselectswitch 5638 f46c ad 82 02 lda SWCHB ; first check the real select switch... 5639 f46f 29 02 and #%00000010 5640 f471 ifnconst MOUSESUPPORT 5641 f471 f0 05 beq checkselectswitchreturn ; switch is pressed 5642 f473 ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 5643 f476 29 b0 and #%10110000 ; R_DU 5644 f478 endif ; MOUSESUPPORT 5645 f478 checkselectswitchreturn 5646 f478 60 rts 5647 f479 5648 f479 checkresetswitch 5649 f479 ad 82 02 lda SWCHB ; first check the real reset switch... 5650 f47c 29 01 and #%00000001 5651 f47e ifnconst MOUSESUPPORT 5652 f47e f0 05 beq checkresetswitchreturn ; switch is pressed 5653 f480 ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 5654 f483 29 70 and #%01110000 ; _LDU 5655 f485 endif ; MOUSESUPPORT 5656 f485 checkresetswitchreturn 5657 f485 60 rts 5658 f486 5659 f486 - ifconst FINESCROLLENABLED 5660 f486 -finescrolldlls 5661 f486 - ldx temp1 ; first DLL index x3 5662 f486 - lda DLLMEM,x 5663 f486 - and #%11110000 5664 f486 - ora finescrolly 5665 f486 - sta DLLMEM,x 5666 f486 - 5667 f486 - ldx temp2 ; last DLL index x3 5668 f486 - lda DLLMEM,x 5669 f486 - and #%11110000 5670 f486 - ora finescrolly 5671 f486 - eor #(WZONEHEIGHT-1) 5672 f486 - sta DLLMEM,x 5673 f486 - rts 5674 f486 endif ; FINESCROLLENABLED 5675 f486 5676 f486 - ifconst USED_ADJUSTVISIBLE 5677 f486 -adjustvisible 5678 f486 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 5679 f486 - jsr waitforvblankstart ; ensure vblank just started 5680 f486 - ldx visibleDLLstart 5681 f486 -findfirstinterrupt 5682 f486 - lda DLLMEM,x 5683 f486 - bmi foundfirstinterrupt 5684 f486 - inx 5685 f486 - inx 5686 f486 - inx 5687 f486 - bne findfirstinterrupt 5688 f486 -foundfirstinterrupt 5689 f486 - and #%01111111 ; clear the interrupt bit 5690 f486 - sta DLLMEM,x 5691 f486 - ifconst DOUBLEBUFFER 5692 f486 - sta DLLMEM+DBOFFSET,x 5693 f486 - endif ; DOUBLEBUFFER 5694 f486 - ldx overscanDLLstart 5695 f486 -findlastinterrupt 5696 f486 - lda DLLMEM,x 5697 f486 - bmi foundlastinterrupt 5698 f486 - dex 5699 f486 - dex 5700 f486 - dex 5701 f486 - bne findlastinterrupt 5702 f486 -foundlastinterrupt 5703 f486 - and #%01111111 ; clear the interrupt bit 5704 f486 - sta DLLMEM,x 5705 f486 - ifconst DOUBLEBUFFER 5706 f486 - sta DLLMEM+DBOFFSET,x 5707 f486 - endif ; DOUBLEBUFFER 5708 f486 - ;now we need to set the new interrupts 5709 f486 - clc 5710 f486 - lda temp1 5711 f486 - adc visibleDLLstart 5712 f486 - tax 5713 f486 - lda DLLMEM,x 5714 f486 - ora #%10000000 5715 f486 - sta DLLMEM,x 5716 f486 - ifconst DOUBLEBUFFER 5717 f486 - sta DLLMEM+DBOFFSET,x 5718 f486 - endif ; DOUBLEBUFFER 5719 f486 - clc 5720 f486 - lda temp2 5721 f486 - adc visibleDLLstart 5722 f486 - tax 5723 f486 - lda DLLMEM,x 5724 f486 - ora #%10000000 5725 f486 - sta DLLMEM,x 5726 f486 - ifconst DOUBLEBUFFER 5727 f486 - sta DLLMEM+DBOFFSET,x 5728 f486 - endif ; DOUBLEBUFFER 5729 f486 - jsr vblankresync 5730 f486 - rts 5731 f486 endif ; USED_ADJUSTVISIBLE 5732 f486 5733 f486 vblankresync 5734 f486 20 24 f5 jsr waitforvblankstart ; ensure vblank just started 5735 f489 a9 00 lda #0 5736 f48b 85 4d sta visibleover 5737 f48d a9 03 lda #3 5738 f48f 8d b2 01 sta interruptindex 5739 f492 60 rts 5740 f493 5741 f493 createallgamedlls 5742 f493 a2 00 ldx #0 5743 f495 a9 19 lda #NVLINES 5744 f497 ac 09 21 ldy paldetected 5745 f49a f0 03 beq skipcreatePALpadding 5746 f49c 18 clc 5747 f49d 69 15 adc #21 5748 f49f skipcreatePALpadding 5749 f49f 20 d4 f4 jsr createnonvisibledlls 5750 f4a2 8e 3c 21 stx visibleDLLstart 5751 f4a5 20 05 f5 jsr createvisiblezones 5752 f4a8 8e 3d 21 stx overscanDLLstart 5753 f4ab createallgamedllscontinue 5754 f4ab a9 50 lda #(NVLINES+55) ; extras for PAL 5755 f4ad 20 d4 f4 jsr createnonvisibledlls 5756 f4b0 5757 f4b0 ae 3c 21 ldx visibleDLLstart 5758 f4b3 bd 00 18 lda DLLMEM,x 5759 f4b6 09 80 ora #%10000000 ; NMI 1 - start of visible screen 5760 f4b8 9d 00 18 sta DLLMEM,x 5761 f4bb - ifconst DOUBLEBUFFER 5762 f4bb - sta DLLMEM+DBOFFSET,x 5763 f4bb endif ; DOUBLEBUFFER 5764 f4bb 5765 f4bb ae 3d 21 ldx overscanDLLstart 5766 f4be bd 00 18 lda DLLMEM,x 5767 f4c1 09 83 ora #%10000011 ; NMI 2 - end of visible screen 5768 f4c3 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 5769 f4c5 9d 00 18 sta DLLMEM,x 5770 f4c8 - ifconst DOUBLEBUFFER 5771 f4c8 - sta DLLMEM+DBOFFSET,x 5772 f4c8 endif ; DOUBLEBUFFER 5773 f4c8 5774 f4c8 e8 inx 5775 f4c9 e8 inx 5776 f4ca e8 inx 5777 f4cb 5778 f4cb bd 00 18 lda DLLMEM,x 5779 f4ce 09 80 ora #%10000000 ; NMI 3 - deeper overscan 5780 f4d0 9d 00 18 sta DLLMEM,x 5781 f4d3 - ifconst DOUBLEBUFFER 5782 f4d3 - sta DLLMEM+DBOFFSET,x 5783 f4d3 endif ; DOUBLEBUFFER 5784 f4d3 5785 f4d3 60 rts 5786 f4d4 5787 f4d4 createnonvisibledlls 5788 f4d4 85 42 sta temp1 5789 f4d6 4a lsr 5790 f4d7 4a lsr 5791 f4d8 4a lsr 5792 f4d9 4a lsr ; /16 5793 f4da f0 09 beq skipcreatenonvisibledlls1loop 5794 f4dc a8 tay 5795 f4dd createnonvisibledlls1loop 5796 f4dd a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 5797 f4df 20 f4 f4 jsr createblankdllentry 5798 f4e2 88 dey 5799 f4e3 d0 f8 bne createnonvisibledlls1loop 5800 f4e5 skipcreatenonvisibledlls1loop 5801 f4e5 a5 42 lda temp1 5802 f4e7 29 0f and #%00001111 5803 f4e9 f0 08 beq createnonvisibledllsreturn 5804 f4eb 38 sec 5805 f4ec e9 01 sbc #1 5806 f4ee 09 40 ora #%01000000 5807 f4f0 20 f4 f4 jsr createblankdllentry 5808 f4f3 createnonvisibledllsreturn 5809 f4f3 60 rts 5810 f4f4 5811 f4f4 createblankdllentry 5812 f4f4 9d 00 18 sta DLLMEM,x 5813 f4f7 - ifconst DOUBLEBUFFER 5814 f4f7 - sta DLLMEM+DBOFFSET,x 5815 f4f7 endif ; DOUBLEBUFFER 5816 f4f7 e8 inx 5817 f4f8 a9 21 lda #$21 ; blank 5818 f4fa 9d 00 18 sta DLLMEM,x 5819 f4fd - ifconst DOUBLEBUFFER 5820 f4fd - sta DLLMEM+DBOFFSET,x 5821 f4fd endif ; DOUBLEBUFFER 5822 f4fd e8 inx 5823 f4fe a9 00 lda #$00 5824 f500 9d 00 18 sta DLLMEM,x 5825 f503 - ifconst DOUBLEBUFFER 5826 f503 - sta DLLMEM+DBOFFSET,x 5827 f503 endif ; DOUBLEBUFFER 5828 f503 e8 inx 5829 f504 60 rts 5830 f505 5831 f505 createvisiblezones 5832 f505 a0 00 ldy #0 5833 f507 createvisiblezonesloop 5834 f507 b9 54 f6 lda.w DLHEIGHT,y 5835 f50a 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 5836 f50c 9d 00 18 sta DLLMEM,x 5837 f50f - ifconst DOUBLEBUFFER 5838 f50f - sta DLLMEM+DBOFFSET,x 5839 f50f endif ; DOUBLEBUFFER 5840 f50f e8 inx 5841 f510 b9 24 f6 lda DLPOINTH,y 5842 f513 9d 00 18 sta DLLMEM,x 5843 f516 - ifconst DOUBLEBUFFER 5844 f516 - sta DLLMEM+DBOFFSET,x 5845 f516 endif ; DOUBLEBUFFER 5846 f516 e8 inx 5847 f517 b9 3c f6 lda DLPOINTL,y 5848 f51a 9d 00 18 sta DLLMEM,x 5849 f51d - ifconst DOUBLEBUFFER 5850 f51d - clc 5851 f51d - adc #DOUBLEBUFFEROFFSET 5852 f51d - sta DLLMEM+DBOFFSET,x 5853 f51d - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 5854 f51d - inc DLLMEM+DBOFFSET-1,x 5855 f51d -skiphidoublebufferadjust 5856 f51d endif ; DOUBLEBUFFER 5857 f51d e8 inx 5858 f51e c8 iny 5859 f51f c0 18 cpy #WZONECOUNT 5860 f521 d0 e4 bne createvisiblezonesloop 5861 f523 60 rts 5862 f524 5863 f524 waitforvblankstart 5864 f524 visibleoverwait 5865 f524 24 28 BIT MSTAT 5866 f526 10 fc bpl visibleoverwait 5867 f528 vblankstartwait 5868 f528 24 28 BIT MSTAT 5869 f52a 30 fc bmi vblankstartwait 5870 f52c 60 rts 5871 f52d 5872 f52d - ifconst DOUBLEBUFFER 5873 f52d -flipdisplaybufferreturn 5874 f52d - rts 5875 f52d -flipdisplaybuffer 5876 f52d - lda doublebufferstate 5877 f52d - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 5878 f52d - 5879 f52d - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 5880 f52d - 5881 f52d - lda doublebufferstate 5882 f52d - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 5883 f52d - tax 5884 f52d - 5885 f52d - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 5886 f52d - 5887 f52d -flipdisplaybufferwait1 5888 f52d - lda visibleover 5889 f52d - beq flipdisplaybufferwait1 5890 f52d - 5891 f52d -flipdisplaybufferwait 5892 f52d - lda visibleover 5893 f52d - bne flipdisplaybufferwait 5894 f52d - 5895 f52d - lda doublebufferminimumframetarget 5896 f52d - beq skipminimumframecode 5897 f52d - lda doublebufferminimumframeindex 5898 f52d - bne flipdisplaybufferwait1 5899 f52d - lda doublebufferminimumframetarget 5900 f52d - sta doublebufferminimumframeindex 5901 f52d -skipminimumframecode 5902 f52d - 5903 f52d - lda DLLMEMLutHi,x 5904 f52d - sta DPPH 5905 f52d - lda DLLMEMLutLo,x 5906 f52d - sta DPPL 5907 f52d - 5908 f52d - lda NewPageflipstate,x 5909 f52d - sta doublebufferstate 5910 f52d - lda NewPageflipoffset,x 5911 f52d - sta doublebufferdloffset 5912 f52d - 5913 f52d - lda doublebufferbufferdirty 5914 f52d - beq flipdisplaybufferreturn 5915 f52d - 5916 f52d - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 5917 f52d - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 5918 f52d - ; from the displayed buffer to the working buffer... 5919 f52d - 5920 f52d - lda doublebufferdloffset 5921 f52d - eor #DOUBLEBUFFEROFFSET 5922 f52d - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 5923 f52d - 5924 f52d - ldx #(WZONECOUNT-1) 5925 f52d -copybufferzoneloop 5926 f52d - 5927 f52d - lda DLPOINTL,x 5928 f52d - clc 5929 f52d - adc doublebufferdloffset 5930 f52d - sta temp1 5931 f52d - lda DLPOINTH,x 5932 f52d - adc #0 5933 f52d - sta temp2 5934 f52d - 5935 f52d - lda DLPOINTL,x 5936 f52d - clc 5937 f52d - adc temp6 5938 f52d - sta temp3 5939 f52d - lda DLPOINTH,x 5940 f52d - adc #0 5941 f52d - sta temp4 5942 f52d - 5943 f52d - lda dlendsave,x 5944 f52d - tay 5945 f52d -copybuffercharsloop 5946 f52d - lda (temp3),y 5947 f52d - sta (temp1),y 5948 f52d - dey 5949 f52d - bpl copybuffercharsloop 5950 f52d - dex 5951 f52d - bpl copybufferzoneloop 5952 f52d - lda #0 5953 f52d - sta doublebufferbufferdirty 5954 f52d - rts 5955 f52d - 5956 f52d -doublebufferoff 5957 f52d - lda #1 5958 f52d - sta doublebufferstate 5959 f52d - jsr flipdisplaybuffer 5960 f52d - lda #0 5961 f52d - sta doublebufferstate 5962 f52d - sta doublebufferdloffset 5963 f52d - rts 5964 f52d - 5965 f52d -DLLMEMLutLo 5966 f52d - .byte DLLMEM,>(DLLMEM+DBOFFSET) 5969 f52d -NewPageflipstate 5970 f52d - .byte 3,1 5971 f52d -NewPageflipoffset 5972 f52d - .byte DOUBLEBUFFEROFFSET,0 5973 f52d - 5974 f52d endif ; DOUBLEBUFFER 5975 f52d 5976 f52d - ifconst MOUSESUPPORT 5977 f52d - 5978 f52d -rotationalcompare 5979 f52d - ; old = 00 01 10 11 5980 f52d - .byte $00, $01, $ff, $00 ; new=00 5981 f52d - .byte $ff, $00, $00, $01 ; new=01 5982 f52d - .byte $01, $00, $00, $ff ; new=10 5983 f52d - .byte $00, $ff, $01, $00 ; new=11 5984 f52d - 5985 f52d - ; 0000YyXx st mouse 5986 f52d - 5987 f52d - ; 0000xyXY amiga mouse 5988 f52d - 5989 f52d - ifconst MOUSEXONLY 5990 f52d -amigatoataribits ; swap bits 1 and 4... 5991 f52d - .byte %0000, %0000, %0010, %0010 5992 f52d - .byte %0000, %0000, %0010, %0010 5993 f52d - .byte %0001, %0001, %0011, %0011 5994 f52d - .byte %0001, %0001, %0011, %0011 5995 f52d - 5996 f52d - ; null change bits 5997 f52d - .byte %0000, %0001, %0010, %0011 5998 f52d - .byte %0000, %0001, %0010, %0011 5999 f52d - .byte %0000, %0001, %0010, %0011 6000 f52d - .byte %0000, %0001, %0010, %0011 6001 f52d - 6002 f52d - else ; !MOUSEXONLY 6003 f52d - 6004 f52d -amigatoataribits ; swap bits 1 and 4... 6005 f52d - .byte %0000, %1000, %0010, %1010 6006 f52d - .byte %0100, %1100, %0110, %1110 6007 f52d - .byte %0001, %1001, %0011, %1011 6008 f52d - .byte %0101, %1101, %0111, %1111 6009 f52d - ; null change bits 6010 f52d - .byte %0000, %0001, %0010, %0011 6011 f52d - .byte %0100, %0101, %0110, %0111 6012 f52d - .byte %1000, %1001, %1010, %1011 6013 f52d - .byte %1100, %1101, %1110, %1111 6014 f52d - endif ; !MOUSEXONLY 6015 f52d - 6016 f52d endif ; MOUSESUPPORT 6017 f52d 6018 f52d mouse0update 6019 f52d - ifconst MOUSE0SUPPORT 6020 f52d - 6021 f52d -mousetableselect = inttemp2 6022 f52d -mousexdelta = inttemp3 6023 f52d -mouseydelta = inttemp4 6024 f52d -lastSWCHA = inttemp6 6025 f52d - 6026 f52d - ; 0000YyXx st mouse 6027 f52d - ; 0000xyXY amiga mouse 6028 f52d - 6029 f52d - lda #$ff 6030 f52d - sta lastSWCHA 6031 f52d - 6032 f52d - ldy port0control 6033 f52d - 6034 f52d - lda #%00010000 6035 f52d - cpy #9 ; AMIGA? 6036 f52d - bne skipamigabitsfix0 6037 f52d - lda #0 6038 f52d -skipamigabitsfix0 6039 f52d - sta mousetableselect 6040 f52d - ifconst DRIVINGBOOST 6041 f52d - cpy #6 ; DRIVING? 6042 f52d - bne skipdriving0setup 6043 f52d - ; swap mousex0 and mousey0. mousex seen by the 7800basic program 6044 f52d - ; trails the actual mousex0, so we can smoothly interpolate toward 6045 f52d - ; the actual position. This actual position is stored in mousey0 6046 f52d - ; after the driver has run. 6047 f52d - ldx mousex0 6048 f52d - lda mousey0 6049 f52d - stx mousey0 6050 f52d - sta mousex0 6051 f52d -skipdriving0setup 6052 f52d - endif ; DRIVINGBOOST 6053 f52d - 6054 f52d - lda #0 6055 f52d - sta mousexdelta 6056 f52d - sta mouseydelta 6057 f52d - 6058 f52d - ifnconst MOUSETIME 6059 f52d - ifnconst MOUSEXONLY 6060 f52d - lda #180 ; minimum for x+y 6061 f52d - else 6062 f52d - lda #100 ; minimum for just x 6063 f52d - endif 6064 f52d - else 6065 f52d - lda #MOUSETIME 6066 f52d - endif 6067 f52d - jsr SETTIM64T ; INTIM is in Y 6068 f52d - 6069 f52d -mouse0updateloop 6070 f52d - lda SWCHA 6071 f52d - asr #%11110000 ; Undocumented. A = A & #IMM, then LSR A. 6072 f52d - cmp lastSWCHA 6073 f52d - beq mouse0loopcondition 6074 f52d - sta lastSWCHA 6075 f52d - lsr 6076 f52d - lsr 6077 f52d - lsr 6078 f52d - 6079 f52d - ora mousetableselect ; atari/amiga decoding table selection 6080 f52d - 6081 f52d - ; st mice encode on different bits/joystick-lines than amiga mice... 6082 f52d - ; 0000YyXx st mouse 6083 f52d - ; 0000xyXY amiga mouse 6084 f52d - ; ...so can shuffle the amiga bits to reuse the st driver. 6085 f52d - tay 6086 f52d - lax amigatoataribits,y 6087 f52d - 6088 f52d - ifnconst MOUSEXONLY 6089 f52d - ; first the Y... 6090 f52d - and #%00001100 6091 f52d - ora mousecodey0 6092 f52d - tay 6093 f52d - lda rotationalcompare,y 6094 f52d - clc 6095 f52d - adc mouseydelta 6096 f52d - sta mouseydelta 6097 f52d - tya 6098 f52d - lsr 6099 f52d - lsr 6100 f52d - sta mousecodey0 6101 f52d - txa 6102 f52d - ; ...then the X... 6103 f52d - and #%00000011 6104 f52d - tax 6105 f52d - endif ; !MOUSEXONLY 6106 f52d - 6107 f52d - asl 6108 f52d - asl 6109 f52d - ora mousecodex0 6110 f52d - tay 6111 f52d - lda rotationalcompare,y 6112 f52d - adc mousexdelta ; carry was clear by previous ASL 6113 f52d - sta mousexdelta 6114 f52d - stx mousecodex0 6115 f52d -mouse0loopcondition 6116 f52d - lda TIMINT 6117 f52d - bpl mouse0updateloop 6118 f52d - 6119 f52d - ; *** adapt to selected device resolution. 6120 f52d - ldx port0control 6121 f52d - 6122 f52d - ifconst PRECISIONMOUSING 6123 f52d - ldy port0resolution 6124 f52d - bne mouse0halveddone 6125 f52d - cpx #6 ; half-resolution is no good for driving wheels 6126 f52d - beq mouse0halveddone 6127 f52d - ; resolution=0 is half mouse resolution, necessary for precision 6128 f52d - ; mousing on a 160x240 screen with a 1000 dpi mouse. 6129 f52d - 6130 f52d - lda mousexdelta 6131 f52d - cmp #$80 6132 f52d - ror ; do a signed divide by 2. 6133 f52d - clc 6134 f52d - adc mousex0 6135 f52d - sta mousex0 6136 f52d - ifnconst MOUSEXONLY 6137 f52d - lda mouseydelta 6138 f52d - clc 6139 f52d - adc mousey0 6140 f52d - sta mousey0 6141 f52d - endif 6142 f52d - ; at half resolution we just exit after updating x and y 6143 f52d - jmp LLRET0 6144 f52d -mouse0halveddone 6145 f52d - endif ; PRECISIONMOUSING 6146 f52d - 6147 f52d - ifnconst MOUSEXONLY 6148 f52d - asl mouseydelta ; *2 because Y resolution is finer 6149 f52d - ldy port0resolution 6150 f52d - dey 6151 f52d - lda #0 6152 f52d -mousey0resolutionfix 6153 f52d - clc 6154 f52d - adc mouseydelta 6155 f52d - dey 6156 f52d - bpl mousey0resolutionfix 6157 f52d - clc 6158 f52d - adc mousey0 6159 f52d - sta mousey0 6160 f52d - endif ; MOUSEXONLY 6161 f52d - 6162 f52d - ldy port0resolution 6163 f52d - dey 6164 f52d - lda #0 6165 f52d -mousex0resolutionfix 6166 f52d - clc 6167 f52d - adc mousexdelta 6168 f52d - dey 6169 f52d - bpl mousex0resolutionfix 6170 f52d - ifnconst DRIVINGBOOST 6171 f52d - clc 6172 f52d - adc mousex0 6173 f52d - sta mousex0 6174 f52d - else 6175 f52d - cpx #6 6176 f52d - beq carryonmouse0boost 6177 f52d - clc 6178 f52d - adc mousex0 6179 f52d - sta mousex0 6180 f52d - jmp LLRET0 6181 f52d -carryonmouse0boost 6182 f52d - sta mousexdelta 6183 f52d - clc 6184 f52d - adc mousecodey0 6185 f52d - sta mousecodey0 6186 f52d - clc 6187 f52d - adc mousex0 6188 f52d - tay ; save the target X 6189 f52d - adc mousey0 ; average in the smoothly-trailing X 6190 f52d - ror 6191 f52d - sta mousex0 ; mousex0 now has the smoothly trailing X 6192 f52d - sty mousey0 ; and mousey0 has the the target X 6193 f52d - 6194 f52d - ; check to see if the coordinate wrapped. If so, undo the averaging code. 6195 f52d - ; A has mousex0, the smoothly trailing X 6196 f52d - sbc mousey0 ; less the target X 6197 f52d - bpl skipabsolutedrive0 6198 f52d - eor #$ff 6199 f52d -skipabsolutedrive0 6200 f52d - cmp #64 ; just an unreasonably large change 6201 f52d - bcc skipdrivewrapfix0 6202 f52d - sty mousex0 ; if X wrapped, we catch the trailing X up to the target X 6203 f52d -skipdrivewrapfix0 6204 f52d - 6205 f52d - ; get rid of the tweening if the distance travelled was very small 6206 f52d - lda mousexdelta 6207 f52d - cmp port0resolution 6208 f52d - bcs skipbetweenfix0 6209 f52d - lda mousex0 6210 f52d - sta mousey0 6211 f52d -skipbetweenfix0 6212 f52d - 6213 f52d -drivingboostreductioncheck0 6214 f52d - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 6215 f52d - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 6216 f52d - ; negated again because truncation during BCD math results in 6217 f52d - ; differing magnitudes, depending if the value is +ve or -ve. 6218 f52d -driving0fix 6219 f52d - lax mousecodey0 6220 f52d - cmp #$80 6221 f52d - bcs driving0skipnegate1 6222 f52d - eor #$FF 6223 f52d - adc #1 6224 f52d - sta mousecodey0 6225 f52d -driving0skipnegate1 6226 f52d - cmp #$80 6227 f52d - ror 6228 f52d - cmp #$80 6229 f52d - ror 6230 f52d - cmp #$80 6231 f52d - ror 6232 f52d - sta inttemp1 6233 f52d - lda mousecodey0 6234 f52d - sec 6235 f52d - sbc inttemp1 6236 f52d - cpx #$80 6237 f52d - bcs driving0skipnegate2 6238 f52d - eor #$FF 6239 f52d - adc #1 6240 f52d -driving0skipnegate2 6241 f52d - sta mousecodey0 6242 f52d -drivingboostdone0 6243 f52d - endif ; DRIVINGBOOST 6244 f52d - 6245 f52d - jmp LLRET0 6246 f52d - 6247 f52d endif ; MOUSE0SUPPORT 6248 f52d 6249 f52d mouse1update 6250 f52d - ifconst MOUSE1SUPPORT 6251 f52d - 6252 f52d -mousetableselect = inttemp2 6253 f52d -mousexdelta = inttemp3 6254 f52d -mouseydelta = inttemp4 6255 f52d -lastSWCHA = inttemp6 6256 f52d - 6257 f52d - ; 0000YyXx st mouse 6258 f52d - ; 0000xyXY amiga mouse 6259 f52d - 6260 f52d - lda #$ff 6261 f52d - sta lastSWCHA 6262 f52d - 6263 f52d - ldy port1control 6264 f52d - 6265 f52d - lda #%00010000 6266 f52d - cpy #9 ; AMIGA? 6267 f52d - bne skipamigabitsfix1 6268 f52d - lda #0 6269 f52d -skipamigabitsfix1 6270 f52d - sta mousetableselect 6271 f52d - ifconst DRIVINGBOOST 6272 f52d - cpy #6 ; DRIVING? 6273 f52d - bne skipdriving1setup 6274 f52d - ; swap mousex1 and mousey1. mousex seen by the 7800basic program 6275 f52d - ; trails the actual mousex1, so we can smoothly interpolate toward 6276 f52d - ; the actual position. This actual position is stored in mousey1 6277 f52d - ; after the driver has run. 6278 f52d - ldx mousex1 6279 f52d - lda mousey1 6280 f52d - stx mousey1 6281 f52d - sta mousex1 6282 f52d -skipdriving1setup 6283 f52d - endif ; DRIVINGBOOST 6284 f52d - 6285 f52d - lda #0 6286 f52d - sta mousexdelta 6287 f52d - sta mouseydelta 6288 f52d - 6289 f52d - ifnconst MOUSETIME 6290 f52d - ifnconst MOUSEXONLY 6291 f52d - lda #180 ; minimum for x+y 6292 f52d - else 6293 f52d - lda #100 ; minimum for just x 6294 f52d - endif 6295 f52d - else 6296 f52d - lda #MOUSETIME 6297 f52d - endif 6298 f52d - jsr SETTIM64T ; INTIM is in Y 6299 f52d - 6300 f52d -mouse1updateloop 6301 f52d - lda SWCHA 6302 f52d - and #%00001111 6303 f52d - cmp lastSWCHA 6304 f52d - beq mouse1loopcondition 6305 f52d - sta lastSWCHA 6306 f52d - 6307 f52d - ora mousetableselect ; atari/amiga decoding table selection 6308 f52d - 6309 f52d - ; st mice encode on different bits/joystick-lines than amiga mice... 6310 f52d - ; 0000YyXx st mouse 6311 f52d - ; 0000xyXY amiga mouse 6312 f52d - ; ...so can shuffle the amiga bits to reuse the st driver. 6313 f52d - tay 6314 f52d - lax amigatoataribits,y 6315 f52d - 6316 f52d - ifnconst MOUSEXONLY 6317 f52d - ; first the Y... 6318 f52d - and #%00001100 6319 f52d - ora mousecodey1 6320 f52d - tay 6321 f52d - lda rotationalcompare,y 6322 f52d - clc 6323 f52d - adc mouseydelta 6324 f52d - sta mouseydelta 6325 f52d - tya 6326 f52d - lsr 6327 f52d - lsr 6328 f52d - sta mousecodey1 6329 f52d - txa 6330 f52d - ; ...then the X... 6331 f52d - and #%00000011 6332 f52d - tax 6333 f52d - endif ; !MOUSEXONLY 6334 f52d - 6335 f52d - asl 6336 f52d - asl 6337 f52d - ora mousecodex1 6338 f52d - tay 6339 f52d - lda rotationalcompare,y 6340 f52d - adc mousexdelta ; carry was clear by previous ASL 6341 f52d - sta mousexdelta 6342 f52d - stx mousecodex1 6343 f52d -mouse1loopcondition 6344 f52d - lda TIMINT 6345 f52d - bpl mouse1updateloop 6346 f52d - 6347 f52d - ; *** adapt to selected device resolution. 6348 f52d - ldx port1control 6349 f52d - 6350 f52d - ifconst PRECISIONMOUSING 6351 f52d - ldy port1resolution 6352 f52d - bne mouse1halveddone 6353 f52d - cpx #6 ; half-resolution is no good for driving wheels 6354 f52d - beq mouse1halveddone 6355 f52d - ; resolution=0 is half mouse resolution, necessary for precision 6356 f52d - ; mousing on a 160x240 screen with a 1000 dpi mouse. 6357 f52d - 6358 f52d - lda mousexdelta 6359 f52d - cmp #$80 6360 f52d - ror ; do a signed divide by 2. 6361 f52d - clc 6362 f52d - adc mousex1 6363 f52d - sta mousex1 6364 f52d - ifnconst MOUSEXONLY 6365 f52d - lda mouseydelta 6366 f52d - clc 6367 f52d - adc mousey1 6368 f52d - sta mousey1 6369 f52d - endif 6370 f52d - ; at half resolution we just exit after updating x and y 6371 f52d - jmp LLRET1 6372 f52d -mouse1halveddone 6373 f52d - endif ; PRECISIONMOUSING 6374 f52d - 6375 f52d - ifnconst MOUSEXONLY 6376 f52d - asl mouseydelta ; *2 because Y resolution is finer 6377 f52d - ldy port1resolution 6378 f52d - dey 6379 f52d - lda #0 6380 f52d -mousey1resolutionfix 6381 f52d - clc 6382 f52d - adc mouseydelta 6383 f52d - dey 6384 f52d - bpl mousey1resolutionfix 6385 f52d - clc 6386 f52d - adc mousey1 6387 f52d - sta mousey1 6388 f52d - endif ; MOUSEXONLY 6389 f52d - 6390 f52d - ldy port1resolution 6391 f52d - dey 6392 f52d - lda #0 6393 f52d -mousex1resolutionfix 6394 f52d - clc 6395 f52d - adc mousexdelta 6396 f52d - dey 6397 f52d - bpl mousex1resolutionfix 6398 f52d - ifnconst DRIVINGBOOST 6399 f52d - clc 6400 f52d - adc mousex1 6401 f52d - sta mousex1 6402 f52d - else 6403 f52d - cpx #6 6404 f52d - beq carryonmouse1boost 6405 f52d - clc 6406 f52d - adc mousex1 6407 f52d - sta mousex1 6408 f52d - jmp LLRET1 6409 f52d -carryonmouse1boost 6410 f52d - sta mousexdelta 6411 f52d - clc 6412 f52d - adc mousecodey1 6413 f52d - sta mousecodey1 6414 f52d - clc 6415 f52d - adc mousex1 6416 f52d - tay ; save the target X 6417 f52d - adc mousey1 ; average in the smoothly-trailing X 6418 f52d - ror 6419 f52d - sta mousex1 ; mousex0 now has the smoothly trailing X 6420 f52d - sty mousey1 ; and mousey0 has the the target X 6421 f52d - 6422 f52d - ; check to see if the coordinate wrapped. If so, undo the averaging code. 6423 f52d - ; A has mousex1, the smoothly trailing X 6424 f52d - sbc mousey1 ; less the target X 6425 f52d - bpl skipabsolutedrive1 6426 f52d - eor #$ff 6427 f52d -skipabsolutedrive1 6428 f52d - cmp #64 ; just an unreasonably large change 6429 f52d - bcc skipdrivewrapfix1 6430 f52d - sty mousex1 ; if X wrapped, we catch the trailing X up to the target X 6431 f52d -skipdrivewrapfix1 6432 f52d - 6433 f52d - ; get rid of the tweening if the distance travelled was very small 6434 f52d - lda mousexdelta 6435 f52d - cmp port1resolution 6436 f52d - bcs skipbetweenfix1 6437 f52d - lda mousex1 6438 f52d - sta mousey1 6439 f52d -skipbetweenfix1 6440 f52d - 6441 f52d -drivingboostreductioncheck1 6442 f52d - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 6443 f52d - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 6444 f52d - ; negated again because truncation during BCD math results in 6445 f52d - ; differing magnitudes, depending if the value is +ve or -ve. 6446 f52d -driving1fix 6447 f52d - lax mousecodey1 6448 f52d - cmp #$80 6449 f52d - bcs driving0skipnegate1 6450 f52d - eor #$FF 6451 f52d - adc #1 6452 f52d - sta mousecodey1 6453 f52d -driving0skipnegate1 6454 f52d - cmp #$80 6455 f52d - ror 6456 f52d - cmp #$80 6457 f52d - ror 6458 f52d - cmp #$80 6459 f52d - ror 6460 f52d - sta inttemp1 6461 f52d - lda mousecodey1 6462 f52d - sec 6463 f52d - sbc inttemp1 6464 f52d - cpx #$80 6465 f52d - bcs driving1skipnegate2 6466 f52d - eor #$FF 6467 f52d - adc #1 6468 f52d -driving1skipnegate2 6469 f52d - sta mousecodey1 6470 f52d -drivingboostdone1 6471 f52d - endif ; DRIVINGBOOST 6472 f52d - 6473 f52d - jmp LLRET1 6474 f52d - 6475 f52d endif ; MOUSE1SUPPORT 6476 f52d 6477 f52d 6478 f52d trakball0update 6479 f52d - ifconst TRAKBALL0SUPPORT 6480 f52d - ifnconst TRAKTIME 6481 f52d - ifnconst TRAKXONLY 6482 f52d - lda #180 ; minimum for x+y 6483 f52d - else ; !TRAKXONLY 6484 f52d - lda #100 ; minimum for just x 6485 f52d - endif ; !TRAKXONLY 6486 f52d - else ; !TRAKTIME 6487 f52d - lda #TRAKTIME 6488 f52d - endif ; !TRAKTIME 6489 f52d - jsr SETTIM64T ; INTIM is in Y 6490 f52d - ldx #0 6491 f52d - ifnconst TRAKXONLY 6492 f52d - ldy #0 6493 f52d - endif ; TRAKXONLY 6494 f52d -trakball0updateloop 6495 f52d - lda SWCHA 6496 f52d - and #%00110000 6497 f52d - cmp trakballcodex0 6498 f52d - sta trakballcodex0 6499 f52d - beq trakball0movementXdone 6500 f52d - and #%00010000 6501 f52d - beq trakball0negativeX 6502 f52d -trakball0positiveX 6503 f52d - ;(2 from beq) 6504 f52d - inx ; 2 6505 f52d - jmp trakball0movementXdone ; 3 6506 f52d -trakball0negativeX 6507 f52d - ;(3 from beq) 6508 f52d - dex ; 2 6509 f52d - nop ; 2 6510 f52d -trakball0movementXdone 6511 f52d - 6512 f52d - ifnconst TRAKXONLY 6513 f52d - lda SWCHA 6514 f52d - and #%11000000 6515 f52d - cmp trakballcodey0 6516 f52d - sta trakballcodey0 6517 f52d - beq trakball0movementYdone 6518 f52d - and #%01000000 6519 f52d - beq trakball0negativeY 6520 f52d -trakball0positiveY 6521 f52d - ;(2 from beq) 6522 f52d - iny ; 2 6523 f52d - jmp trakball0movementYdone ; 3 6524 f52d -trakball0negativeY 6525 f52d - ;(3 from beq) 6526 f52d - dey ; 2 6527 f52d - nop ; 2 6528 f52d -trakball0movementYdone 6529 f52d - endif ; !TRAKXONLY 6530 f52d - 6531 f52d - lda TIMINT 6532 f52d - bpl trakball0updateloop 6533 f52d - lda #0 6534 f52d - cpx #0 6535 f52d - beq trakball0skipXadjust 6536 f52d - clc 6537 f52d -trakball0Xloop 6538 f52d - adc port0resolution 6539 f52d - dex 6540 f52d - bne trakball0Xloop 6541 f52d - clc 6542 f52d - adc trakballx0 6543 f52d - sta trakballx0 6544 f52d -trakball0skipXadjust 6545 f52d - ifnconst TRAKXONLY 6546 f52d - lda #0 6547 f52d - cpy #0 6548 f52d - beq trakball0skipYadjust 6549 f52d - clc 6550 f52d -trakball0yloop 6551 f52d - adc port0resolution 6552 f52d - dey 6553 f52d - bne trakball0yloop 6554 f52d - clc 6555 f52d - adc trakbally0 6556 f52d - sta trakbally0 6557 f52d -trakball0skipYadjust 6558 f52d - endif ; !TRAKXONLY 6559 f52d - 6560 f52d - jmp LLRET0 6561 f52d endif 6562 f52d 6563 f52d 6564 f52d 6565 f52d trakball1update 6566 f52d - ifconst TRAKBALL1SUPPORT 6567 f52d - ifnconst TRAKTIME 6568 f52d - ifnconst TRAKXONLY 6569 f52d - lda #180 ; minimum for x+y 6570 f52d - else ; !TRAKXONLY 6571 f52d - lda #100 ; minimum for just x 6572 f52d - endif ; !TRAKXONLY 6573 f52d - else ; !TRAKTIME 6574 f52d - lda #TRAKTIME 6575 f52d - endif ; !TRAKTIME 6576 f52d - jsr SETTIM64T ; INTIM is in Y 6577 f52d - ldx #0 6578 f52d - ifnconst TRAKXONLY 6579 f52d - ldy #0 6580 f52d - endif ; TRAKXONLY 6581 f52d -trakball1updateloop 6582 f52d - lda SWCHA 6583 f52d - and #%00000011 6584 f52d - cmp trakballcodex1 6585 f52d - sta trakballcodex1 6586 f52d - beq trakball1movementXdone 6587 f52d - and #%00000001 6588 f52d - beq trakball1negativeX 6589 f52d -trakball1positiveX 6590 f52d - ;(2 from beq) 6591 f52d - inx ; 2 6592 f52d - jmp trakball1movementXdone ; 3 6593 f52d -trakball1negativeX 6594 f52d - ;(3 from beq) 6595 f52d - dex ; 2 6596 f52d - nop ; 2 6597 f52d -trakball1movementXdone 6598 f52d - 6599 f52d - ifnconst TRAKXONLY 6600 f52d - lda SWCHA 6601 f52d - and #%00001100 6602 f52d - cmp trakballcodey1 6603 f52d - sta trakballcodey1 6604 f52d - beq trakball1movementYdone 6605 f52d - and #%00000100 6606 f52d - beq trakball1negativeY 6607 f52d -trakball1positiveY 6608 f52d - ;(2 from beq) 6609 f52d - iny ; 2 6610 f52d - jmp trakball1movementYdone ; 3 6611 f52d -trakball1negativeY 6612 f52d - ;(3 from beq) 6613 f52d - dey ; 2 6614 f52d - nop ; 2 6615 f52d -trakball1movementYdone 6616 f52d - endif ; !TRAKXONLY 6617 f52d - 6618 f52d - lda TIMINT 6619 f52d - bpl trakball1updateloop 6620 f52d - lda #0 6621 f52d - cpx #0 6622 f52d - beq trakball1skipXadjust 6623 f52d - clc 6624 f52d -trakball1Xloop 6625 f52d - adc port1resolution 6626 f52d - dex 6627 f52d - bne trakball1Xloop 6628 f52d - clc 6629 f52d - adc trakballx1 6630 f52d - sta trakballx1 6631 f52d -trakball1skipXadjust 6632 f52d - ifnconst TRAKXONLY 6633 f52d - lda #0 6634 f52d - cpy #0 6635 f52d - beq trakball1skipYadjust 6636 f52d - clc 6637 f52d -trakball1yloop 6638 f52d - adc port1resolution 6639 f52d - dey 6640 f52d - bne trakball1yloop 6641 f52d - clc 6642 f52d - adc trakbally1 6643 f52d - sta trakbally1 6644 f52d -trakball1skipYadjust 6645 f52d - endif ; !TRAKXONLY 6646 f52d - 6647 f52d - jmp LLRET1 6648 f52d endif 6649 f52d 6650 f52d 6651 f52d paddleport0update 6652 f52d - ifconst PADDLE0SUPPORT 6653 f52d - lda #6 6654 f52d - sta VBLANK ; start charging the paddle caps 6655 f52d - lda #0 ; use PADDLE timing 6656 f52d - jsr SETTIM64T ; INTIM is in Y 6657 f52d - 6658 f52d -paddleport0updateloop 6659 f52d - lda INPT0 6660 f52d - bmi skippaddle0setposition 6661 f52d - sty paddleposition0 6662 f52d -skippaddle0setposition 6663 f52d - ifconst TWOPADDLESUPPORT 6664 f52d - lda INPT1 6665 f52d - bmi skippaddle1setposition 6666 f52d - sty paddleposition1 6667 f52d -skippaddle1setposition 6668 f52d - endif 6669 f52d - ldy INTIM 6670 f52d - cpy #TIMEOFFSET 6671 f52d - bcs paddleport0updateloop 6672 f52d - 6673 f52d - lda #%10000110 6674 f52d - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 6675 f52d - sec 6676 f52d - lda paddleposition0 6677 f52d - sbc #TIMEOFFSET 6678 f52d - ifconst PADDLESCALEX2 6679 f52d - asl 6680 f52d - endif 6681 f52d - 6682 f52d - ifnconst PADDLESMOOTHINGOFF 6683 f52d - clc 6684 f52d - adc paddleprevious0 6685 f52d - ror 6686 f52d - sta paddleprevious0 6687 f52d - endif 6688 f52d - 6689 f52d - sta paddleposition0 6690 f52d - 6691 f52d - ifconst TWOPADDLESUPPORT 6692 f52d - sec 6693 f52d - lda paddleposition1 6694 f52d - sbc #TIMEOFFSET 6695 f52d - ifconst PADDLESCALEX2 6696 f52d - asl 6697 f52d - endif 6698 f52d - 6699 f52d - ifnconst PADDLESMOOTHINGOFF 6700 f52d - clc 6701 f52d - adc paddleprevious1 6702 f52d - ror 6703 f52d - sta paddleprevious1 6704 f52d - endif 6705 f52d - sta paddleposition1 6706 f52d - endif ; TWOPADDLESUPPORT 6707 f52d - 6708 f52d - jmp LLRET0 6709 f52d endif 6710 f52d 6711 f52d paddleport1update 6712 f52d - ifconst PADDLE1SUPPORT 6713 f52d - lda #6 6714 f52d - sta VBLANK ; start charging the paddle caps 6715 f52d - 6716 f52d - lda #0 ; use PADDLE timing 6717 f52d - jsr SETTIM64T ; INTIM is in Y 6718 f52d - 6719 f52d -paddleport1updateloop 6720 f52d - lda INPT2 6721 f52d - bmi skippaddle2setposition 6722 f52d - sty paddleposition2 6723 f52d -skippaddle2setposition 6724 f52d - ifconst TWOPADDLESUPPORT 6725 f52d - lda INPT3 6726 f52d - bmi skippaddle3setposition 6727 f52d - sty paddleposition3 6728 f52d -skippaddle3setposition 6729 f52d - endif 6730 f52d - ldy INTIM 6731 f52d - cpy #TIMEOFFSET 6732 f52d - bcs paddleport1updateloop 6733 f52d - 6734 f52d - lda #%10000110 6735 f52d - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 6736 f52d - sec 6737 f52d - lda paddleposition2 6738 f52d - sbc #TIMEOFFSET 6739 f52d - ifconst PADDLESCALEX2 6740 f52d - asl 6741 f52d - endif 6742 f52d - 6743 f52d - ifnconst PADDLESMOOTHINGOFF 6744 f52d - clc 6745 f52d - adc paddleprevious2 6746 f52d - ror 6747 f52d - sta paddleprevious2 6748 f52d - endif 6749 f52d - 6750 f52d - sta paddleposition2 6751 f52d - 6752 f52d - ifconst TWOPADDLESUPPORT 6753 f52d - sec 6754 f52d - lda paddleposition3 6755 f52d - sbc #TIMEOFFSET 6756 f52d - ifconst PADDLESCALEX2 6757 f52d - asl 6758 f52d - endif 6759 f52d - 6760 f52d - ifnconst PADDLESMOOTHINGOFF 6761 f52d - clc 6762 f52d - adc paddleprevious3 6763 f52d - ror 6764 f52d - sta paddleprevious3 6765 f52d - endif 6766 f52d - sta paddleposition3 6767 f52d - endif ; TWOPADDLESUPPORT 6768 f52d - 6769 f52d - jmp LLRET1 6770 f52d endif 6771 f52d 6772 f52d 6773 f52d paddlebuttonhandler ; outside of conditional, for button-handler LUT 6774 f52d - ifconst PADDLESUPPORT 6775 f52d - ; x=0|1 for port, rather than paddle #. 6776 f52d - ; Only the first paddle button will integrate into "joy0fire" testing. If the 6777 f52d - ; game wants to support 2 paddles, up to the game to instead test the 6778 f52d - ; joystick right+left directions instead. 6779 f52d - lda SWCHA ; top of nibble is first paddle button 6780 f52d - cpx #0 ; port 0? 6781 f52d - beq skippaddleport2shift 6782 f52d - asl ; shift second port to upper nibble 6783 f52d - asl 6784 f52d - asl 6785 f52d - asl 6786 f52d -skippaddleport2shift 6787 f52d - and #%10000000 6788 f52d - eor #%10000000 ; invert 6789 f52d - sta sINPT1,x 6790 f52d - jmp buttonreadloopreturn 6791 f52d endif ; PADDLESUPPORT 6792 f52d 6793 f52d mousebuttonhandler ; outside of conditional, for button-handler LUT 6794 f52d - ifconst MOUSESUPPORT 6795 f52d - ; stick the mouse buttons in the correct shadow register... 6796 f52d - txa 6797 f52d - asl 6798 f52d - tay ; y=x*2 6799 f52d - lda INPT4,x 6800 f52d - eor #%10000000 6801 f52d - lsr 6802 f52d - sta sINPT1,x 6803 f52d - 6804 f52d - lda INPT1,y 6805 f52d - and #%10000000 6806 f52d - eor #%10000000 6807 f52d - ora sINPT1,x 6808 f52d - sta sINPT1,x 6809 f52d - jmp buttonreadloopreturn 6810 f52d endif ; MOUSESUPPORT 6811 f52d 6812 f52d - ifconst KEYPADSUPPORT 6813 f52d - ; ** select keypad rows 0 to 3 over 4 frames... 6814 f52d -keypadrowselect 6815 f52d - ldy #0 6816 f52d - lda port0control 6817 f52d - cmp #7 6818 f52d - bne skipport0val 6819 f52d - iny ; y=y+1 6820 f52d -skipport0val 6821 f52d - lda port1control 6822 f52d - cmp #7 6823 f52d - bne skipport1val 6824 f52d - iny 6825 f52d - iny ; y=y+2 6826 f52d -skipport1val 6827 f52d - lda keyrowdirectionmask,y 6828 f52d - sta CTLSWA 6829 f52d - tya 6830 f52d - asl 6831 f52d - asl 6832 f52d - sta inttemp1 6833 f52d - lda framecounter 6834 f52d - and #3 6835 f52d - ora inttemp1 6836 f52d - tax 6837 f52d - lda keyrowselectvalue,x 6838 f52d - sta SWCHA 6839 f52d - rts 6840 f52d - 6841 f52d -keyrowdirectionmask 6842 f52d - .byte #%00000000 ; 0 : port0=input port1=input 6843 f52d - .byte #%11110000 ; 1 : port0=output port1=input 6844 f52d - .byte #%00001111 ; 2 : port0=input port1=output 6845 f52d - .byte #%11111111 ; 3 : port0=output port1=output 6846 f52d - 6847 f52d -keyrowselectvalue 6848 f52d - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 6849 f52d - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 6850 f52d - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 6851 f52d - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 6852 f52d endif ; KEYPADSUPPORT 6853 f52d 6854 f52d - ifconst KEYPADSUPPORT 6855 f52d - ; TODO - split into compile-time KEYPAD0SUPPORT and KEYPAD1SUPPORT 6856 f52d -keypadcolumnread 6857 f52d - lda port0control 6858 f52d - cmp #7 6859 f52d - bne skipkeypadcolumnread0 6860 f52d - lda framecounter 6861 f52d - and #3 6862 f52d - asl ; x2 because keypad variables are interleaved 6863 f52d - tax 6864 f52d - lda #0 6865 f52d - sta keypadmatrix0a,x 6866 f52d - lda INPT0 6867 f52d - cmp #$80 6868 f52d - rol keypadmatrix0a,x 6869 f52d - lda INPT1 6870 f52d - cmp #$80 6871 f52d - rol keypadmatrix0a,x 6872 f52d - lda INPT4 6873 f52d - cmp #$80 6874 f52d - rol keypadmatrix0a,x 6875 f52d - lda keypadmatrix0a,x 6876 f52d - eor #%00000111 6877 f52d - sta keypadmatrix0a,x 6878 f52d -skipkeypadcolumnread0 6879 f52d - 6880 f52d - lda port1control 6881 f52d - cmp #7 6882 f52d - bne skipkeypadcolumnread1 6883 f52d - lda framecounter 6884 f52d - and #3 6885 f52d - asl ; x2 because keypad variables are interleaved 6886 f52d - tax 6887 f52d - lda #0 6888 f52d - sta keypadmatrix1a,x 6889 f52d - rol keypadmatrix1a,x 6890 f52d - lda INPT2 6891 f52d - cmp #$80 6892 f52d - rol keypadmatrix1a,x 6893 f52d - lda INPT3 6894 f52d - cmp #$80 6895 f52d - rol keypadmatrix1a,x 6896 f52d - lda INPT5 6897 f52d - cmp #$80 6898 f52d - rol keypadmatrix1a,x 6899 f52d - lda keypadmatrix1a,x 6900 f52d - eor #%00000111 6901 f52d - sta keypadmatrix1a,x 6902 f52d -skipkeypadcolumnread1 6903 f52d - rts 6904 f52d endif ; KEYPADSUPPORT 6905 f52d 6906 f52d setportforinput 6907 f52d a5 e4 lda CTLSWAs 6908 f52f 3d 38 f5 and allpinsinputlut,x 6909 f532 85 e4 sta CTLSWAs 6910 f534 8d 81 02 sta CTLSWA 6911 f537 60 rts 6912 f538 6913 f538 allpinsinputlut 6914 f538 0f f0 .byte.b $0F, $F0 6915 f53a 6916 f53a setonebuttonmode 6917 f53a a9 06 lda #6 ; in case we're in unlocked-bios mode 6918 f53c 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 6919 f53e a9 14 lda #$14 6920 f540 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 6921 f543 a5 e5 lda CTLSWBs 6922 f545 1d 4e f5 ora thisjoy2buttonbit,x 6923 f548 85 e5 sta CTLSWBs 6924 f54a 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 6925 f54d 60 rts 6926 f54e 6927 f54e thisjoy2buttonbit 6928 f54e 04 10 .byte.b $04, $10 6929 f550 6930 f550 settwobuttonmode 6931 f550 a9 06 lda #6 ; in case we're in unlocked-bios mode 6932 f552 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 6933 f554 a9 14 lda #$14 6934 f556 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 6935 f559 a5 e5 lda CTLSWBs 6936 f55b 3d 64 f5 and thisjoy2buttonmask,x 6937 f55e 85 e5 sta CTLSWBs 6938 f560 8d 82 02 sta SWCHB 6939 f563 60 rts 6940 f564 6941 f564 thisjoy2buttonmask 6942 f564 fb ef .byte.b $fb, $ef 6943 f566 6944 f566 ; Provided under the CC0 license. See the included LICENSE.txt for details. 6945 f566 6946 f566 START 6947 f566 start 6948 f566 6949 f566 ;******** more or less the Atari recommended startup procedure 6950 f566 6951 f566 78 sei 6952 f567 d8 cld 6953 f568 6954 f568 ifnconst NOTIALOCK 6955 f568 a9 07 lda #$07 6956 f56a - else 6957 f56a - lda #$06 6958 f56a endif 6959 f56a 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 6960 f56c a9 7f lda #$7F 6961 f56e 85 3c sta CTRL ;disable DMA 6962 f570 a9 00 lda #$00 6963 f572 85 38 sta OFFSET 6964 f574 ifnconst NOTIALOCK 6965 f574 85 01 sta INPTCTRL 6966 f576 endif 6967 f576 a2 ff ldx #$FF 6968 f578 9a txs 6969 f579 6970 f579 ;************** Clear Memory 6971 f579 6972 f579 a2 40 ldx #$40 6973 f57b a9 00 lda #$00 6974 f57d crloop1 6975 f57d 95 00 sta $00,x ;Clear zero page 6976 f57f 9d 00 01 sta $100,x ;Clear page 1 6977 f582 e8 inx 6978 f583 d0 f8 bne crloop1 6979 f585 6980 f585 6981 f585 a0 00 ldy #$00 ;Clear Ram 6982 f587 a9 18 lda #$18 ;Start at $1800 6983 f589 85 81 sta $81 6984 f58b a9 00 lda #$00 6985 f58d 85 80 sta $80 6986 f58f crloop3 6987 f58f a9 00 lda #$00 6988 f591 91 80 sta ($80),y ;Store data 6989 f593 c8 iny ;Next byte 6990 f594 d0 f9 bne crloop3 ;Branch if not done page 6991 f596 e6 81 inc $81 ;Next page 6992 f598 a5 81 lda $81 6993 f59a c9 20 cmp #$20 ;End at $1FFF 6994 f59c d0 f1 bne crloop3 ;Branch if not 6995 f59e 6996 f59e a0 00 ldy #$00 ;Clear Ram 6997 f5a0 a9 22 lda #$22 ;Start at $2200 6998 f5a2 85 81 sta $81 6999 f5a4 a9 00 lda #$00 7000 f5a6 85 80 sta $80 7001 f5a8 crloop4 7002 f5a8 a9 00 lda #$00 7003 f5aa 91 80 sta ($80),y ;Store data 7004 f5ac c8 iny ;Next byte 7005 f5ad d0 f9 bne crloop4 ;Branch if not done page 7006 f5af e6 81 inc $81 ;Next page 7007 f5b1 a5 81 lda $81 7008 f5b3 c9 27 cmp #$27 ;End at $27FF 7009 f5b5 d0 f1 bne crloop4 ;Branch if not 7010 f5b7 7011 f5b7 a2 00 ldx #$00 7012 f5b9 a9 00 lda #$00 7013 f5bb crloop5 ;Clear 2100-213F, 2000-203F 7014 f5bb 9d 00 20 sta $2000,x 7015 f5be 9d 00 21 sta $2100,x 7016 f5c1 e8 inx 7017 f5c2 e0 40 cpx #$40 7018 f5c4 d0 f5 bne crloop5 7019 f5c6 7020 f5c6 85 80 sta $80 7021 f5c8 85 81 sta $81 7022 f5ca 85 82 sta $82 7023 f5cc 85 83 sta $83 7024 f5ce 7025 f5ce ;seed random number with hopefully-random timer value 7026 f5ce a9 01 lda #1 7027 f5d0 0d 84 02 ora INTIM 7028 f5d3 85 40 sta rand 7029 f5d5 7030 f5d5 ; detect the console type... 7031 f5d5 pndetectvblankstart 7032 f5d5 a5 28 lda MSTAT 7033 f5d7 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 7034 f5d9 pndetectvblankover 7035 f5d9 a5 28 lda MSTAT 7036 f5db 30 fc bmi pndetectvblankover ; then wait for it to be over 7037 f5dd a0 00 ldy #$00 7038 f5df a2 00 ldx #$00 7039 f5e1 pndetectvblankhappening 7040 f5e1 a5 28 lda MSTAT 7041 f5e3 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 7042 f5e5 85 24 sta WSYNC 7043 f5e7 85 24 sta WSYNC 7044 f5e9 e8 inx 7045 f5ea d0 f5 bne pndetectvblankhappening 7046 f5ec pndetectinvblank 7047 f5ec e0 7d cpx #125 7048 f5ee 90 02 bcc pndetecispal 7049 f5f0 a0 01 ldy #$01 7050 f5f2 pndetecispal 7051 f5f2 8c 09 21 sty paldetected 7052 f5f5 7053 f5f5 20 93 f4 jsr createallgamedlls 7054 f5f8 7055 f5f8 a9 18 lda #>DLLMEM 7056 f5fa 85 2c sta DPPH 7057 f5fc a9 00 lda # 255 7222 f624 -DOUBLEBUFFEROFFSET = 255 7223 f624 else 7224 f624 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 7225 f624 endif 7226 f624 7227 f624 - ifconst EXTRADLMEMORY 7228 f624 -SECONDDLHALFSTART SET $2300 7229 f624 endif 7230 f624 7231 f624 DLPOINTH 7232 f624 DLINDEX SET 0 7233 f624 REPEAT WZONECOUNT 7234 f624 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f624 - ifconst EXTRADLMEMORY 7236 f624 - if TMPMEMADDRESS > $1FFF 7237 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f624 - else 7239 f624 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f624 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f624 - endif 7243 f624 - endif ; TMPMEMADDRESS > $1FFF 7244 f624 endif ; EXTRADLMEMORY 7245 f624 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f624 18 .byte.b >TMPMEMADDRESS 7247 f624 DLINDEX SET DLINDEX + 1 7233 f624 REPEND 7234 f624 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f625 - ifconst EXTRADLMEMORY 7236 f625 - if TMPMEMADDRESS > $1FFF 7237 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f625 - else 7239 f625 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f625 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f625 - endif 7243 f625 - endif ; TMPMEMADDRESS > $1FFF 7244 f625 endif ; EXTRADLMEMORY 7245 f625 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f625 18 .byte.b >TMPMEMADDRESS 7247 f625 DLINDEX SET DLINDEX + 1 7233 f625 REPEND 7234 f625 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f626 - ifconst EXTRADLMEMORY 7236 f626 - if TMPMEMADDRESS > $1FFF 7237 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f626 - else 7239 f626 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f626 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f626 - endif 7243 f626 - endif ; TMPMEMADDRESS > $1FFF 7244 f626 endif ; EXTRADLMEMORY 7245 f626 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f626 19 .byte.b >TMPMEMADDRESS 7247 f626 DLINDEX SET DLINDEX + 1 7233 f626 REPEND 7234 f626 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f627 - ifconst EXTRADLMEMORY 7236 f627 - if TMPMEMADDRESS > $1FFF 7237 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f627 - else 7239 f627 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f627 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f627 - endif 7243 f627 - endif ; TMPMEMADDRESS > $1FFF 7244 f627 endif ; EXTRADLMEMORY 7245 f627 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f627 19 .byte.b >TMPMEMADDRESS 7247 f627 DLINDEX SET DLINDEX + 1 7233 f627 REPEND 7234 f627 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f628 - ifconst EXTRADLMEMORY 7236 f628 - if TMPMEMADDRESS > $1FFF 7237 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f628 - else 7239 f628 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f628 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f628 - endif 7243 f628 - endif ; TMPMEMADDRESS > $1FFF 7244 f628 endif ; EXTRADLMEMORY 7245 f628 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f628 19 .byte.b >TMPMEMADDRESS 7247 f628 DLINDEX SET DLINDEX + 1 7233 f628 REPEND 7234 f628 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f629 - ifconst EXTRADLMEMORY 7236 f629 - if TMPMEMADDRESS > $1FFF 7237 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f629 - else 7239 f629 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f629 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f629 - endif 7243 f629 - endif ; TMPMEMADDRESS > $1FFF 7244 f629 endif ; EXTRADLMEMORY 7245 f629 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f629 1a .byte.b >TMPMEMADDRESS 7247 f629 DLINDEX SET DLINDEX + 1 7233 f629 REPEND 7234 f629 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f62a - ifconst EXTRADLMEMORY 7236 f62a - if TMPMEMADDRESS > $1FFF 7237 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f62a - else 7239 f62a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f62a -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f62a - endif 7243 f62a - endif ; TMPMEMADDRESS > $1FFF 7244 f62a endif ; EXTRADLMEMORY 7245 f62a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f62a 1a .byte.b >TMPMEMADDRESS 7247 f62a DLINDEX SET DLINDEX + 1 7233 f62a REPEND 7234 f62a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f62b - ifconst EXTRADLMEMORY 7236 f62b - if TMPMEMADDRESS > $1FFF 7237 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f62b - else 7239 f62b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f62b -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f62b - endif 7243 f62b - endif ; TMPMEMADDRESS > $1FFF 7244 f62b endif ; EXTRADLMEMORY 7245 f62b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f62b 1a .byte.b >TMPMEMADDRESS 7247 f62b DLINDEX SET DLINDEX + 1 7233 f62b REPEND 7234 f62b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f62c - ifconst EXTRADLMEMORY 7236 f62c - if TMPMEMADDRESS > $1FFF 7237 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f62c - else 7239 f62c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f62c -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f62c - endif 7243 f62c - endif ; TMPMEMADDRESS > $1FFF 7244 f62c endif ; EXTRADLMEMORY 7245 f62c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f62c 1b .byte.b >TMPMEMADDRESS 7247 f62c DLINDEX SET DLINDEX + 1 7233 f62c REPEND 7234 f62c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f62d - ifconst EXTRADLMEMORY 7236 f62d - if TMPMEMADDRESS > $1FFF 7237 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f62d - else 7239 f62d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f62d -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f62d - endif 7243 f62d - endif ; TMPMEMADDRESS > $1FFF 7244 f62d endif ; EXTRADLMEMORY 7245 f62d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f62d 1b .byte.b >TMPMEMADDRESS 7247 f62d DLINDEX SET DLINDEX + 1 7233 f62d REPEND 7234 f62d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f62e - ifconst EXTRADLMEMORY 7236 f62e - if TMPMEMADDRESS > $1FFF 7237 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f62e - else 7239 f62e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f62e -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f62e - endif 7243 f62e - endif ; TMPMEMADDRESS > $1FFF 7244 f62e endif ; EXTRADLMEMORY 7245 f62e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f62e 1b .byte.b >TMPMEMADDRESS 7247 f62e DLINDEX SET DLINDEX + 1 7233 f62e REPEND 7234 f62e TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f62f - ifconst EXTRADLMEMORY 7236 f62f - if TMPMEMADDRESS > $1FFF 7237 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f62f - else 7239 f62f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f62f -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f62f - endif 7243 f62f - endif ; TMPMEMADDRESS > $1FFF 7244 f62f endif ; EXTRADLMEMORY 7245 f62f ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f62f 1b .byte.b >TMPMEMADDRESS 7247 f62f DLINDEX SET DLINDEX + 1 7233 f62f REPEND 7234 f62f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f630 - ifconst EXTRADLMEMORY 7236 f630 - if TMPMEMADDRESS > $1FFF 7237 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f630 - else 7239 f630 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f630 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f630 - endif 7243 f630 - endif ; TMPMEMADDRESS > $1FFF 7244 f630 endif ; EXTRADLMEMORY 7245 f630 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f630 1c .byte.b >TMPMEMADDRESS 7247 f630 DLINDEX SET DLINDEX + 1 7233 f630 REPEND 7234 f630 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f631 - ifconst EXTRADLMEMORY 7236 f631 - if TMPMEMADDRESS > $1FFF 7237 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f631 - else 7239 f631 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f631 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f631 - endif 7243 f631 - endif ; TMPMEMADDRESS > $1FFF 7244 f631 endif ; EXTRADLMEMORY 7245 f631 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f631 1c .byte.b >TMPMEMADDRESS 7247 f631 DLINDEX SET DLINDEX + 1 7233 f631 REPEND 7234 f631 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f632 - ifconst EXTRADLMEMORY 7236 f632 - if TMPMEMADDRESS > $1FFF 7237 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f632 - else 7239 f632 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f632 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f632 - endif 7243 f632 - endif ; TMPMEMADDRESS > $1FFF 7244 f632 endif ; EXTRADLMEMORY 7245 f632 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f632 1c .byte.b >TMPMEMADDRESS 7247 f632 DLINDEX SET DLINDEX + 1 7233 f632 REPEND 7234 f632 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f633 - ifconst EXTRADLMEMORY 7236 f633 - if TMPMEMADDRESS > $1FFF 7237 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f633 - else 7239 f633 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f633 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f633 - endif 7243 f633 - endif ; TMPMEMADDRESS > $1FFF 7244 f633 endif ; EXTRADLMEMORY 7245 f633 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f633 1d .byte.b >TMPMEMADDRESS 7247 f633 DLINDEX SET DLINDEX + 1 7233 f633 REPEND 7234 f633 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f634 - ifconst EXTRADLMEMORY 7236 f634 - if TMPMEMADDRESS > $1FFF 7237 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f634 - else 7239 f634 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f634 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f634 - endif 7243 f634 - endif ; TMPMEMADDRESS > $1FFF 7244 f634 endif ; EXTRADLMEMORY 7245 f634 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f634 1d .byte.b >TMPMEMADDRESS 7247 f634 DLINDEX SET DLINDEX + 1 7233 f634 REPEND 7234 f634 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f635 - ifconst EXTRADLMEMORY 7236 f635 - if TMPMEMADDRESS > $1FFF 7237 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f635 - else 7239 f635 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f635 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f635 - endif 7243 f635 - endif ; TMPMEMADDRESS > $1FFF 7244 f635 endif ; EXTRADLMEMORY 7245 f635 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f635 1d .byte.b >TMPMEMADDRESS 7247 f635 DLINDEX SET DLINDEX + 1 7233 f635 REPEND 7234 f635 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f636 - ifconst EXTRADLMEMORY 7236 f636 - if TMPMEMADDRESS > $1FFF 7237 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f636 - else 7239 f636 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f636 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f636 - endif 7243 f636 - endif ; TMPMEMADDRESS > $1FFF 7244 f636 endif ; EXTRADLMEMORY 7245 f636 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f636 1e .byte.b >TMPMEMADDRESS 7247 f636 DLINDEX SET DLINDEX + 1 7233 f636 REPEND 7234 f636 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f637 - ifconst EXTRADLMEMORY 7236 f637 - if TMPMEMADDRESS > $1FFF 7237 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f637 - else 7239 f637 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f637 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f637 - endif 7243 f637 - endif ; TMPMEMADDRESS > $1FFF 7244 f637 endif ; EXTRADLMEMORY 7245 f637 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f637 1e .byte.b >TMPMEMADDRESS 7247 f637 DLINDEX SET DLINDEX + 1 7233 f637 REPEND 7234 f637 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f638 - ifconst EXTRADLMEMORY 7236 f638 - if TMPMEMADDRESS > $1FFF 7237 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f638 - else 7239 f638 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f638 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f638 - endif 7243 f638 - endif ; TMPMEMADDRESS > $1FFF 7244 f638 endif ; EXTRADLMEMORY 7245 f638 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f638 1e .byte.b >TMPMEMADDRESS 7247 f638 DLINDEX SET DLINDEX + 1 7233 f638 REPEND 7234 f638 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f639 - ifconst EXTRADLMEMORY 7236 f639 - if TMPMEMADDRESS > $1FFF 7237 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f639 - else 7239 f639 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f639 -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f639 - endif 7243 f639 - endif ; TMPMEMADDRESS > $1FFF 7244 f639 endif ; EXTRADLMEMORY 7245 f639 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f639 1f .byte.b >TMPMEMADDRESS 7247 f639 DLINDEX SET DLINDEX + 1 7233 f639 REPEND 7234 f639 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f63a - ifconst EXTRADLMEMORY 7236 f63a - if TMPMEMADDRESS > $1FFF 7237 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f63a - else 7239 f63a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f63a -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f63a - endif 7243 f63a - endif ; TMPMEMADDRESS > $1FFF 7244 f63a endif ; EXTRADLMEMORY 7245 f63a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f63a 1f .byte.b >TMPMEMADDRESS 7247 f63a DLINDEX SET DLINDEX + 1 7233 f63a REPEND 7234 f63a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7235 f63b - ifconst EXTRADLMEMORY 7236 f63b - if TMPMEMADDRESS > $1FFF 7237 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7238 f63b - else 7239 f63b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7240 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7241 f63b -SECONDDLHALFSTART SET TMPMEMADDRESS 7242 f63b - endif 7243 f63b - endif ; TMPMEMADDRESS > $1FFF 7244 f63b endif ; EXTRADLMEMORY 7245 f63b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 7246 f63b 1f .byte.b >TMPMEMADDRESS 7247 f63b DLINDEX SET DLINDEX + 1 7248 f63c REPEND 7249 f63c 7250 f63c - ifconst EXTRADLMEMORY 7251 f63c - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 7252 f63c endif 7253 f63c 7254 f63c 7255 f63c DLPOINTL 7256 f63c DLINDEX SET 0 7257 f63c REPEAT WZONECOUNT 7258 f63c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7259 f63c - ifconst EXTRADLMEMORY 7260 f63c - if TMPMEMADDRESS > $1FFF 7261 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f63c - else 7263 f63c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f63c - endif 7266 f63c - endif ; TMPMEMADDRESS > $1FFF 7267 f63c endif ; EXTRADLMEMORY 7268 f63c 80 .byte.b $1FFF 7261 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f63d - else 7263 f63d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f63d - endif 7266 f63d - endif ; TMPMEMADDRESS > $1FFF 7267 f63d endif ; EXTRADLMEMORY 7268 f63d d0 .byte.b $1FFF 7261 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f63e - else 7263 f63e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f63e - endif 7266 f63e - endif ; TMPMEMADDRESS > $1FFF 7267 f63e endif ; EXTRADLMEMORY 7268 f63e 20 .byte.b $1FFF 7261 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f63f - else 7263 f63f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f63f - endif 7266 f63f - endif ; TMPMEMADDRESS > $1FFF 7267 f63f endif ; EXTRADLMEMORY 7268 f63f 70 .byte.b $1FFF 7261 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f640 - else 7263 f640 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f640 - endif 7266 f640 - endif ; TMPMEMADDRESS > $1FFF 7267 f640 endif ; EXTRADLMEMORY 7268 f640 c0 .byte.b $1FFF 7261 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f641 - else 7263 f641 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f641 - endif 7266 f641 - endif ; TMPMEMADDRESS > $1FFF 7267 f641 endif ; EXTRADLMEMORY 7268 f641 10 .byte.b $1FFF 7261 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f642 - else 7263 f642 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f642 - endif 7266 f642 - endif ; TMPMEMADDRESS > $1FFF 7267 f642 endif ; EXTRADLMEMORY 7268 f642 60 .byte.b $1FFF 7261 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f643 - else 7263 f643 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f643 - endif 7266 f643 - endif ; TMPMEMADDRESS > $1FFF 7267 f643 endif ; EXTRADLMEMORY 7268 f643 b0 .byte.b $1FFF 7261 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f644 - else 7263 f644 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f644 - endif 7266 f644 - endif ; TMPMEMADDRESS > $1FFF 7267 f644 endif ; EXTRADLMEMORY 7268 f644 00 .byte.b $1FFF 7261 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f645 - else 7263 f645 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f645 - endif 7266 f645 - endif ; TMPMEMADDRESS > $1FFF 7267 f645 endif ; EXTRADLMEMORY 7268 f645 50 .byte.b $1FFF 7261 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f646 - else 7263 f646 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f646 - endif 7266 f646 - endif ; TMPMEMADDRESS > $1FFF 7267 f646 endif ; EXTRADLMEMORY 7268 f646 a0 .byte.b $1FFF 7261 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f647 - else 7263 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f647 - endif 7266 f647 - endif ; TMPMEMADDRESS > $1FFF 7267 f647 endif ; EXTRADLMEMORY 7268 f647 f0 .byte.b $1FFF 7261 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f648 - else 7263 f648 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f648 - endif 7266 f648 - endif ; TMPMEMADDRESS > $1FFF 7267 f648 endif ; EXTRADLMEMORY 7268 f648 40 .byte.b $1FFF 7261 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f649 - else 7263 f649 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f649 - endif 7266 f649 - endif ; TMPMEMADDRESS > $1FFF 7267 f649 endif ; EXTRADLMEMORY 7268 f649 90 .byte.b $1FFF 7261 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f64a - else 7263 f64a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f64a - endif 7266 f64a - endif ; TMPMEMADDRESS > $1FFF 7267 f64a endif ; EXTRADLMEMORY 7268 f64a e0 .byte.b $1FFF 7261 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f64b - else 7263 f64b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f64b - endif 7266 f64b - endif ; TMPMEMADDRESS > $1FFF 7267 f64b endif ; EXTRADLMEMORY 7268 f64b 30 .byte.b $1FFF 7261 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f64c - else 7263 f64c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f64c - endif 7266 f64c - endif ; TMPMEMADDRESS > $1FFF 7267 f64c endif ; EXTRADLMEMORY 7268 f64c 80 .byte.b $1FFF 7261 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f64d - else 7263 f64d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f64d - endif 7266 f64d - endif ; TMPMEMADDRESS > $1FFF 7267 f64d endif ; EXTRADLMEMORY 7268 f64d d0 .byte.b $1FFF 7261 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f64e - else 7263 f64e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f64e - endif 7266 f64e - endif ; TMPMEMADDRESS > $1FFF 7267 f64e endif ; EXTRADLMEMORY 7268 f64e 20 .byte.b $1FFF 7261 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f64f - else 7263 f64f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f64f - endif 7266 f64f - endif ; TMPMEMADDRESS > $1FFF 7267 f64f endif ; EXTRADLMEMORY 7268 f64f 70 .byte.b $1FFF 7261 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f650 - else 7263 f650 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f650 - endif 7266 f650 - endif ; TMPMEMADDRESS > $1FFF 7267 f650 endif ; EXTRADLMEMORY 7268 f650 c0 .byte.b $1FFF 7261 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f651 - else 7263 f651 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f651 - endif 7266 f651 - endif ; TMPMEMADDRESS > $1FFF 7267 f651 endif ; EXTRADLMEMORY 7268 f651 10 .byte.b $1FFF 7261 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f652 - else 7263 f652 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f652 - endif 7266 f652 - endif ; TMPMEMADDRESS > $1FFF 7267 f652 endif ; EXTRADLMEMORY 7268 f652 60 .byte.b $1FFF 7261 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7262 f653 - else 7263 f653 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7264 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7265 f653 - endif 7266 f653 - endif ; TMPMEMADDRESS > $1FFF 7267 f653 endif ; EXTRADLMEMORY 7268 f653 b0 .byte.b $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 if DLINDEX = 0 7286 f654 18 80 ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 if DLINDEX = 1 7289 f654 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 if DLINDEX = 2 7292 f654 19 20 ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 if DLINDEX = 3 7295 f654 19 70 ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 if DLINDEX = 4 7298 f654 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 if DLINDEX = 5 7301 f654 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 if DLINDEX = 6 7304 f654 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 if DLINDEX = 7 7307 f654 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 if DLINDEX = 8 7310 f654 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 if DLINDEX = 9 7313 f654 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 if DLINDEX = 10 7316 f654 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 if DLINDEX = 11 7319 f654 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 if DLINDEX = 12 7322 f654 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 if DLINDEX = 13 7325 f654 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 if DLINDEX = 14 7328 f654 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 if DLINDEX = 15 7331 f654 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 if DLINDEX = 16 7334 f654 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 if DLINDEX = 17 7337 f654 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 if DLINDEX = 18 7340 f654 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 if DLINDEX = 19 7343 f654 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 if DLINDEX = 20 7346 f654 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 if DLINDEX = 21 7349 f654 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 if DLINDEX = 22 7352 f654 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 - if DLINDEX = 23 7355 f654 -ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7274 f654 REPEND 7275 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 7276 f654 - ifconst EXTRADLMEMORY 7277 f654 - if TMPMEMADDRESS > $1FFF 7278 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7279 f654 - else 7280 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 7281 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 7282 f654 - endif 7283 f654 - endif ; TMPMEMADDRESS > $1FFF 7284 f654 endif ; EXTRADLMEMORY 7285 f654 - if DLINDEX = 0 7286 f654 -ZONE0ADDRESS = TMPMEMADDRESS 7287 f654 endif 7288 f654 - if DLINDEX = 1 7289 f654 -ZONE1ADDRESS = TMPMEMADDRESS 7290 f654 endif 7291 f654 - if DLINDEX = 2 7292 f654 -ZONE2ADDRESS = TMPMEMADDRESS 7293 f654 endif 7294 f654 - if DLINDEX = 3 7295 f654 -ZONE3ADDRESS = TMPMEMADDRESS 7296 f654 endif 7297 f654 - if DLINDEX = 4 7298 f654 -ZONE4ADDRESS = TMPMEMADDRESS 7299 f654 endif 7300 f654 - if DLINDEX = 5 7301 f654 -ZONE5ADDRESS = TMPMEMADDRESS 7302 f654 endif 7303 f654 - if DLINDEX = 6 7304 f654 -ZONE6ADDRESS = TMPMEMADDRESS 7305 f654 endif 7306 f654 - if DLINDEX = 7 7307 f654 -ZONE7ADDRESS = TMPMEMADDRESS 7308 f654 endif 7309 f654 - if DLINDEX = 8 7310 f654 -ZONE8ADDRESS = TMPMEMADDRESS 7311 f654 endif 7312 f654 - if DLINDEX = 9 7313 f654 -ZONE9ADDRESS = TMPMEMADDRESS 7314 f654 endif 7315 f654 - if DLINDEX = 10 7316 f654 -ZONE10ADDRESS = TMPMEMADDRESS 7317 f654 endif 7318 f654 - if DLINDEX = 11 7319 f654 -ZONE11ADDRESS = TMPMEMADDRESS 7320 f654 endif 7321 f654 - if DLINDEX = 12 7322 f654 -ZONE12ADDRESS = TMPMEMADDRESS 7323 f654 endif 7324 f654 - if DLINDEX = 13 7325 f654 -ZONE13ADDRESS = TMPMEMADDRESS 7326 f654 endif 7327 f654 - if DLINDEX = 14 7328 f654 -ZONE14ADDRESS = TMPMEMADDRESS 7329 f654 endif 7330 f654 - if DLINDEX = 15 7331 f654 -ZONE15ADDRESS = TMPMEMADDRESS 7332 f654 endif 7333 f654 - if DLINDEX = 16 7334 f654 -ZONE16ADDRESS = TMPMEMADDRESS 7335 f654 endif 7336 f654 - if DLINDEX = 17 7337 f654 -ZONE17ADDRESS = TMPMEMADDRESS 7338 f654 endif 7339 f654 - if DLINDEX = 18 7340 f654 -ZONE18ADDRESS = TMPMEMADDRESS 7341 f654 endif 7342 f654 - if DLINDEX = 19 7343 f654 -ZONE19ADDRESS = TMPMEMADDRESS 7344 f654 endif 7345 f654 - if DLINDEX = 20 7346 f654 -ZONE20ADDRESS = TMPMEMADDRESS 7347 f654 endif 7348 f654 - if DLINDEX = 21 7349 f654 -ZONE21ADDRESS = TMPMEMADDRESS 7350 f654 endif 7351 f654 - if DLINDEX = 22 7352 f654 -ZONE22ADDRESS = TMPMEMADDRESS 7353 f654 endif 7354 f654 if DLINDEX = 23 7355 f654 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 7356 f654 endif 7357 f654 - if DLINDEX = 24 7358 f654 -ZONE24ADDRESS = TMPMEMADDRESS 7359 f654 endif 7360 f654 - if DLINDEX = 25 7361 f654 -ZONE25ADDRESS = TMPMEMADDRESS 7362 f654 endif 7363 f654 - if DLINDEX = 26 7364 f654 -ZONE26ADDRESS = TMPMEMADDRESS 7365 f654 endif 7366 f654 - if DLINDEX = 27 7367 f654 -ZONE27ADDRESS = TMPMEMADDRESS 7368 f654 endif 7369 f654 DLINDEX SET DLINDEX + 1 7370 f654 REPEND 7371 f654 7372 f654 $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 7373 f654 echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 7374 f654 7375 f654 DLHEIGHT 7376 f654 REPEAT WZONECOUNT 7377 f654 07 .byte.b (WZONEHEIGHT-1) 7376 f654 REPEND 7377 f655 07 .byte.b (WZONEHEIGHT-1) 7376 f655 REPEND 7377 f656 07 .byte.b (WZONEHEIGHT-1) 7376 f656 REPEND 7377 f657 07 .byte.b (WZONEHEIGHT-1) 7376 f657 REPEND 7377 f658 07 .byte.b (WZONEHEIGHT-1) 7376 f658 REPEND 7377 f659 07 .byte.b (WZONEHEIGHT-1) 7376 f659 REPEND 7377 f65a 07 .byte.b (WZONEHEIGHT-1) 7376 f65a REPEND 7377 f65b 07 .byte.b (WZONEHEIGHT-1) 7376 f65b REPEND 7377 f65c 07 .byte.b (WZONEHEIGHT-1) 7376 f65c REPEND 7377 f65d 07 .byte.b (WZONEHEIGHT-1) 7376 f65d REPEND 7377 f65e 07 .byte.b (WZONEHEIGHT-1) 7376 f65e REPEND 7377 f65f 07 .byte.b (WZONEHEIGHT-1) 7376 f65f REPEND 7377 f660 07 .byte.b (WZONEHEIGHT-1) 7376 f660 REPEND 7377 f661 07 .byte.b (WZONEHEIGHT-1) 7376 f661 REPEND 7377 f662 07 .byte.b (WZONEHEIGHT-1) 7376 f662 REPEND 7377 f663 07 .byte.b (WZONEHEIGHT-1) 7376 f663 REPEND 7377 f664 07 .byte.b (WZONEHEIGHT-1) 7376 f664 REPEND 7377 f665 07 .byte.b (WZONEHEIGHT-1) 7376 f665 REPEND 7377 f666 07 .byte.b (WZONEHEIGHT-1) 7376 f666 REPEND 7377 f667 07 .byte.b (WZONEHEIGHT-1) 7376 f667 REPEND 7377 f668 07 .byte.b (WZONEHEIGHT-1) 7376 f668 REPEND 7377 f669 07 .byte.b (WZONEHEIGHT-1) 7376 f669 REPEND 7377 f66a 07 .byte.b (WZONEHEIGHT-1) 7376 f66a REPEND 7377 f66b 07 .byte.b (WZONEHEIGHT-1) 7378 f66c REPEND 7379 f66c 7380 f66c ; Provided under the CC0 license. See the included LICENSE.txt for details. 7381 f66c 7382 f66c ; a simple guard, than ensures the 7800basic code hasn't 7383 f66c ; spilled into the encryption area... 2322 bytes left in the 7800basic reserved area. 7384 f66c echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 7385 f66c - if (*>$FF7D) 7386 f66c - ERR ; abort the assembly 7387 f66c endif 7388 f66c ; Provided under the CC0 license. See the included LICENSE.txt for details. 7389 f66c 7390 f66c - ifconst DEV 7391 f66c - ifnconst ZONEHEIGHT 7392 f66c - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 7393 f66c - else 7394 f66c - if ZONEHEIGHT = 8 7395 f66c - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 7396 f66c - else 7397 f66c - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 7398 f66c - endif 7399 f66c - endif 7400 f66c endif 7401 f66c 7402 f66c ; FF7E/FF7F contains the 7800basic crc checksum word 7403 f66c 7404 f66c ; FF80 - FFF7 contains the 7800 encryption key 7405 f66c 7406 f66c ifnconst bankswitchmode 7407 fff8 ORG $FFF8 7408 fff8 - else 7409 fff8 - ifconst ROM128K 7410 fff8 - ORG $27FF8 7411 fff8 - RORG $FFF8 7412 fff8 - endif 7413 fff8 - ifconst ROM144K 7414 fff8 - ORG $27FF8 7415 fff8 - RORG $FFF8 7416 fff8 - endif 7417 fff8 - ifconst ROM256K 7418 fff8 - ORG $47FF8 7419 fff8 - RORG $FFF8 7420 fff8 - endif 7421 fff8 - ifconst ROM272K 7422 fff8 - ORG $47FF8 7423 fff8 - RORG $FFF8 7424 fff8 - endif 7425 fff8 - ifconst ROM512K 7426 fff8 - ORG $87FF8 7427 fff8 - RORG $FFF8 7428 fff8 - endif 7429 fff8 - ifconst ROM528K 7430 fff8 - ORG $87FF8 7431 fff8 - RORG $FFF8 7432 fff8 - endif 7433 fff8 endif 7434 fff8 7435 fff8 7436 fff8 ff .byte.b $FF ; region verification. $FF=all regions 7437 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 7438 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 7439 fffa 7440 fffa ;Vectors 7441 fffa 00 f0 .word.w NMI 7442 fffc 66 f5 .word.w START 7443 fffe 66 f0 .word.w IRQ 7444 10000