------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.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 has no training wheels, and is all sharp edges. 192 10000 ???? 193 10000 ???? .GFXLabel SET {1} 194 10000 ???? .Palette SET {2} ; constant 195 10000 ???? .SpriteX SET {3} ; variable 196 10000 ???? .SpriteY SET {4} ; variable 197 10000 ???? .ByteOffset SET {5} ; variable (in bytes, to mimimize calculation.) 198 10000 ???? 199 10000 ???? lda .SpriteY 200 10000 ???? lsr 201 10000 ???? lsr 202 10000 ???? asr #%11111110 ; ensure carry is clear 203 10000 ???? if WZONEHEIGHT = 16 204 10000 ???? asr #%11111110 ; ensure carry is clear 205 10000 ???? endif 206 10000 ???? 207 10000 ???? tax 208 10000 ???? 209 10000 ???? lda DLPOINTL,x ; setup DL pointer for this zone 210 10000 ???? sta dlpnt 211 10000 ???? lda DLPOINTH,x ; setup DL pointer for this zone 212 10000 ???? sta dlpnt+1 213 10000 ???? 214 10000 ???? ldy dlend,x ; find the next new object position in this zone 215 10000 ???? 216 10000 ???? lda #<.GFXLabel 217 10000 ???? adc .ByteOffset ; carry is clear via asr 218 10000 ???? sta (dlpnt),y ; #1 - low byte object address 219 10000 ???? 220 10000 ???? iny 221 10000 ???? 222 10000 ???? lda #({1}_mode | %01000000) 223 10000 ???? sta (dlpnt),y ; #2 - graphics mode , indirect 224 10000 ???? 225 10000 ???? iny 226 10000 ???? 227 10000 ???? lda .SpriteY 228 10000 ???? and #(WZONEHEIGHT - 1) 229 10000 ???? cmp #1 ; clear carry if our sprite is just in this zone 230 10000 ???? ora #>.GFXLabel 231 10000 ???? sta (dlpnt),y ; #3 - hi byte object address 232 10000 ???? 233 10000 ???? iny 234 10000 ???? 235 10000 ???? lda #({1}_width_twoscompliment | (.Palette * 32)) 236 10000 ???? sta (dlpnt),y ; #4 - palette|width 237 10000 ???? 238 10000 ???? iny 239 10000 ???? 240 10000 ???? lda .SpriteX 241 10000 ???? sta (dlpnt),y ; #5 - x object position 242 10000 ???? 243 10000 ???? iny 244 10000 ???? sty dlend,x 245 10000 ???? 246 10000 ???? ifconst ALWAYSTERMINATE 247 10000 ???? iny 248 10000 ???? lda #0 249 10000 ???? sta (dlpnt),y 250 10000 ???? endif 251 10000 ???? 252 10000 ???? bcc .PLOTSPRITEend 253 10000 ???? 254 10000 ???? inx ; next zone 255 10000 ???? 256 10000 ???? lda DLPOINTL,x ; setup DL pointer for this zone 257 10000 ???? sta dlpnt 258 10000 ???? lda DLPOINTH,x ; setup DL pointer for this zone 259 10000 ???? sta dlpnt+1 260 10000 ???? 261 10000 ???? ldy dlend,x ; find the next new object position in this zone 262 10000 ???? 263 10000 ???? lda #<(.GFXLabel-1) ; carry is set, so -1 to compensate 264 10000 ???? adc .ByteOffset 265 10000 ???? sta (dlpnt),y ; #1 - low byte object address 266 10000 ???? 267 10000 ???? iny 268 10000 ???? 269 10000 ???? lda #({1}_mode | %01000000) 270 10000 ???? sta (dlpnt),y ; #2 - graphics mode , indirect 271 10000 ???? 272 10000 ???? iny 273 10000 ???? 274 10000 ???? lda .SpriteY 275 10000 ???? and #(WZONEHEIGHT - 1) 276 10000 ???? ora #>(.GFXLabel - (WZONEHEIGHT * 256)) ; start in the dma hole 277 10000 ???? sta (dlpnt),y ; #3 - hi byte object address 278 10000 ???? 279 10000 ???? iny 280 10000 ???? 281 10000 ???? lda #({1}_width_twoscompliment | (.Palette * 32)) 282 10000 ???? sta (dlpnt),y ; #4 - palette|width 283 10000 ???? 284 10000 ???? iny 285 10000 ???? 286 10000 ???? lda .SpriteX 287 10000 ???? sta (dlpnt),y ; #5 - x object position 288 10000 ???? 289 10000 ???? iny 290 10000 ???? sty dlend,x 291 10000 ???? 292 10000 ???? ifconst ALWAYSTERMINATE 293 10000 ???? iny 294 10000 ???? lda #0 295 10000 ???? sta (dlpnt),y 296 10000 ???? endif 297 10000 ???? 298 10000 ???? .PLOTSPRITEend 299 10000 ???? ENDM 300 10000 ???? 301 10000 ???? ; 302 10000 ???? ; speakjet.inc 303 10000 ???? ; 304 10000 ???? ; 305 10000 ???? ; AtariVox Speech Synth Driver 306 10000 ???? ; 307 10000 ???? ; By Alex Herbert, 2004 308 10000 ???? ; 309 10000 ???? 310 10000 ???? 311 10000 ???? 312 10000 ???? 313 10000 ???? ; Constants 314 10000 ???? 315 10000 ???? 316 10000 ???? 00 01 SERIAL_OUTMASK equ $01 317 10000 ???? 00 02 SERIAL_RDYMASK equ $02 318 10000 ???? 319 10000 ???? 320 10000 ???? 321 10000 ???? ; Macros 322 10000 ???? 323 10000 ???? mac spkout 324 10000 ???? 325 10000 ???? ; check buffer-full status 326 10000 ???? lda SWCHA 327 10000 ???? and #SERIAL_RDYMASK 328 10000 ???? beq .speech_done 329 10000 ???? 330 10000 ???? ; get next speech byte 331 10000 ???? ldy #$00 332 10000 ???? lda (speech_addr),y 333 10000 ???? 334 10000 ???? ; invert data and check for end of string 335 10000 ???? eor #$ff 336 10000 ???? ;sta BACKGRND ; debug - uncomment to flash the background color with vox data 337 10000 ???? beq .speech_done 338 10000 ???? sta {1} 339 10000 ???? 340 10000 ???? ; increment speech pointer 341 10000 ???? inc speech_addr 342 10000 ???? bne .incaddr_skip 343 10000 ???? inc speech_addr+1 344 10000 ???? .incaddr_skip 345 10000 ???? 346 10000 ???? ; output byte as serial data 347 10000 ???? 348 10000 ???? sec ; start bit 349 10000 ???? .byteout_loop 350 10000 ???? ; put carry flag into bit 0 of SWACNT, perserving other bits 351 10000 ???? lda SWACNT ; 4 352 10000 ???? and #$fe ; 2 6 353 10000 ???? adc #$00 ; 2 8 354 10000 ???? sta SWACNT ; 4 12 355 10000 ???? 356 10000 ???? ; 10 bits sent? (1 start bit, 8 data bits, 1 stop bit) 357 10000 ???? cpy #$09 ; 2 14 358 10000 ???? beq .speech_done ; 2 16 359 10000 ???? iny ; 2 18 360 10000 ???? 361 10000 ???? ; the 7800 is 1.5x faster than the 2600. Waste more cycles here 362 10000 ???? ; to match the original baud rate... 363 10000 ???? ;ldx #$07 ; 2600 364 10000 ???? ldx #$0D 365 10000 ???? 366 10000 ???? .delay_loop 367 10000 ???? dex ; 368 10000 ???? bne .delay_loop ; 36 54 369 10000 ???? 370 10000 ???? ; shift next data bit into carry 371 10000 ???? lsr {1} ; 5 59 372 10000 ???? 373 10000 ???? ; and loop (branch always taken) 374 10000 ???? bpl .byteout_loop ; 3 62 cycles for loop 375 10000 ???? 376 10000 ???? .speech_done 377 10000 ???? 378 10000 ???? endm 379 10000 ???? 380 10000 ???? 381 10000 ???? mac speak 382 10000 ???? 383 10000 ???? lda #<{1} 384 10000 ???? sta speech_addr 385 10000 ???? lda #>{1} 386 10000 ???? sta speech_addr+1 387 10000 ???? 388 10000 ???? endm 389 10000 ???? 390 10000 ???? 391 10000 ???? 392 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 393 10000 ???? 394 10000 ???? processor 6502 395 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 0a PRANDOM = $A ; 17 bit polycounter pseudo random 149 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_1up_mode = $00 4 10000 ???? 00 1e vertical_shooting_1up_width_twoscompliment = $1e 5 10000 ???? 00 02 vertical_shooting_1up_width = $02 6 10000 ???? 00 00 vertical_shooting_score_10_digits_mode = $00 7 10000 ???? 00 16 vertical_shooting_score_10_digits_width_twoscompliment = $16 8 10000 ???? 00 0a vertical_shooting_score_10_digits_width = $0a 9 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_mode = $00 10 10000 ???? 00 1e vertical_shooting_enemy01_tallsprite_00_width_twoscompliment = $1e 11 10000 ???? 00 02 vertical_shooting_enemy01_tallsprite_00_width = $02 12 10000 ???? 00 00 vertical_shooting_enemy01_mode = $00 13 10000 ???? 00 1e vertical_shooting_enemy01_width_twoscompliment = $1e 14 10000 ???? 00 02 vertical_shooting_enemy01_width = $02 15 10000 ???? 00 00 vertical_shooting_powerup_mode = $00 16 10000 ???? 00 1e vertical_shooting_powerup_width_twoscompliment = $1e 17 10000 ???? 00 02 vertical_shooting_powerup_width = $02 18 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 19 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 20 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 21 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 22 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 23 10000 ???? 00 01 vertical_shooting_bullet_width = $01 24 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 25 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 26 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 27 10000 ???? 00 00 vertical_shooting_ship_mode = $00 28 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 29 10000 ???? 00 02 vertical_shooting_ship_width = $02 30 10000 ???? 00 80 atascii_mode = $80 31 10000 ???? 00 0a atascii_width_twoscompliment = $0a 32 10000 ???? 00 f6 atascii_width = $f6 33 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0189-sfx_pulsecannon 34 10000 ???? 35 10000 ???? 00 36 sfx_bling_length = .skipL0188-sfx_bling 36 10000 ???? 37 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 38 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 39 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 40 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 41 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 42 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 43 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 44 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 45 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 46 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 47 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 48 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 49 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 50 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 51 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 52 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 53 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 54 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 55 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 56 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 57 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 58 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 59 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 60 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 61 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 62 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 63 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 64 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 65 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 66 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 67 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 68 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 69 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 70 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 71 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 72 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 73 10000 ???? 00 00 atascii_color1 = $00 74 10000 ???? 00 0f atascii_color0 = $0f 75 10000 ???? 01 a9 lives = score1 76 10000 ???? 77 10000 ???? 01 62 extra_shipFlag = var34 78 10000 ???? 79 10000 ???? 01 61 extra_shipY = var33 80 10000 ???? 81 10000 ???? 01 60 extra_shipX = var32 82 10000 ???? 83 10000 ???? 01 5f gameover_flag = var31 84 10000 ???? 85 10000 ???? 01 5e enemy01_speed = var30 86 10000 ???? 87 10000 ???? 01 5d rMovement6 = var29 88 10000 ???? 89 10000 ???? 01 5c rMovement5 = var28 90 10000 ???? 91 10000 ???? 01 5b rMovement4 = var27 92 10000 ???? 93 10000 ???? 01 5a rMovement3 = var26 94 10000 ???? 95 10000 ???? 01 59 enemy01_Flag = var25 96 10000 ???? 97 10000 ???? 01 58 enemy01_Y = var24 98 10000 ???? 99 10000 ???? 01 57 enemy01_X = var23 100 10000 ???? 101 10000 ???? 01 56 enemy_shotSlowdown = var22 102 10000 ???? 103 10000 ???? 01 55 bulletSlowdown = var21 104 10000 ???? 105 10000 ???? 01 54 power_upSlowdown = var20 106 10000 ???? 107 10000 ???? 01 53 rMovement2 = var19 108 10000 ???? 109 10000 ???? 01 52 power_upFlag = var18 110 10000 ???? 111 10000 ???? 01 51 power_upY = var17 112 10000 ???? 113 10000 ???? 01 50 power_upX = var16 114 10000 ???? 115 10000 ???? 01 4f rDirection = var15 116 10000 ???? 117 10000 ???? 01 4e rMovement1 = var14 118 10000 ???? 119 10000 ???? 01 4d playerFlag = var13 120 10000 ???? 121 10000 ???? 01 4c enemy_shotFlag = var12 122 10000 ???? 123 10000 ???? 01 4b enemy_shotY = var11 124 10000 ???? 125 10000 ???? 01 4a enemy_shotX = var10 126 10000 ???? 127 10000 ???? 01 49 bulletY = var9 128 10000 ???? 129 10000 ???? 01 48 bulletX = var8 130 10000 ???? 131 10000 ???? 01 47 joyposright = var7 132 10000 ???? 133 10000 ???? 01 46 joyposleft = var6 134 10000 ???? 135 10000 ???? 01 45 joyposdown = var5 136 10000 ???? 137 10000 ???? 01 44 joyposup = var4 138 10000 ???? 139 10000 ???? 01 43 fire_debounce = var3 140 10000 ???? 141 10000 ???? 01 42 playerY = var2 142 10000 ???? 143 10000 ???? 01 41 playerX = var1 144 10000 ???? 145 10000 ???? 01 40 frameCounter = var0 146 10000 ???? 147 10000 ???? 00 01 collisionwrap = 1 148 10000 ???? 00 01 NTSC = 1 149 10000 ???? 00 c0 SCREENHEIGHT = 192 150 10000 ???? 00 01 CHECKOVERWRITE = 1 151 10000 ???? 00 08 ZONEHEIGHT = 8 152 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 endif 444 U01b7 445 U01b7 00 port0control DS 1 ; $1D3 446 U01b8 00 port1control DS 1 ; $1D4 447 U01b9 448 U01b9 ; port#control values... 449 U01b9 ; 1 = proline 450 U01b9 ; 2 = lightgun 451 U01b9 ; 3 = paddle 452 U01b9 ; 4 = trakball 453 U01b9 ; 5 = vcs joystick 454 U01b9 ; 6 = driving 455 U01b9 ; 7 = keypad 456 U01b9 ; 8 = st mouse/cx80 457 U01b9 ; 9 = amiga mouse 458 U01b9 ; 10 = atarivox 459 U01b9 460 U01b9 ; controller 0 data... 461 U01b9 00 paddleposition0 DS 1 ; $1D5 462 U01b9 01 b9 keypadmatrix0a = paddleposition0 463 U01b9 01 b9 drivingposition0 = paddleposition0 464 U01b9 01 b9 trakballx0 = paddleposition0 465 U01b9 01 b9 mousex0 = paddleposition0 466 U01b9 01 b9 lighttgunx0 = paddleposition0 467 U01ba 468 U01ba ; controller 1 data... 469 U01ba 00 paddleposition2 DS 1 ; $1D6 470 U01ba 01 ba keypadmatrix1a = paddleposition2 471 U01ba 01 ba drivingposition1 = paddleposition2 472 U01ba 01 ba trakballx1 = paddleposition2 473 U01ba 01 ba mousex1 = paddleposition2 474 U01ba 01 ba lightgunx1 = paddleposition2 475 U01bb 476 U01bb ; controller 0 altdata... 477 U01bb 00 paddleposition1 DS 1 ; $1D7 478 U01bb 01 bb keypadmatrix0b = paddleposition1 479 U01bb 01 bb trakbally0 = paddleposition1 480 U01bb 01 bb mousey0 = paddleposition1 481 U01bb 01 bb lightguny0 = paddleposition1 482 U01bc 483 U01bc ; controller 1 altdata... 484 U01bc 00 paddleposition3 DS 1 ; $1D8 485 U01bc 01 bc keypadmatrix1b = paddleposition3 486 U01bc 01 bc trakbally1 = paddleposition3 487 U01bc 01 bc mousey1 = paddleposition3 488 U01bc 01 bc lightguny1 = paddleposition3 489 U01bd 490 U01bd ; controller state save. for trakball state+dir codes, rotary position codes 491 U01bd 00 controller0statesave DS 1 ; $1D9 492 U01bd 01 bd paddleprevious0 = controller0statesave 493 U01bd 01 bd mousecodex0 = controller0statesave 494 U01bd 01 bd trakballcodex0 = controller0statesave 495 U01bd 01 bd keypadmatrix0c = controller0statesave 496 U01be 497 U01be 00 controller1statesave DS 1 ; $1DA 498 U01be 01 be paddleprevious2 = controller1statesave 499 U01be 01 be mousecodex1 = controller1statesave 500 U01be 01 be trakballcodex1 = controller1statesave 501 U01be 01 be keypadmatrix1c = controller1statesave 502 U01bf 503 U01bf 00 paddleprevious1 DS 1 ; $1DB 504 U01bf 01 bf keypadmatrix0d = paddleprevious1 505 U01bf 01 bf mousecodey0 = paddleprevious1 506 U01bf 01 bf trakballcodey0 = paddleprevious1 507 U01c0 508 U01c0 00 paddleprevious3 DS 1 ; $1DC 509 U01c0 01 c0 keypadmatrix1d = paddleprevious3 510 U01c0 01 c0 mousecodey1 = paddleprevious3 511 U01c0 01 c0 trakballcodey1 = paddleprevious3 512 U01c1 513 U01c1 - ifconst pokeysupport 514 U01c1 -pokey1frames DS 1 ; $1DD 515 U01c1 -pokey1tick DS 1 ; $1DE 516 U01c1 -pokey2frames DS 1 ; $1DF 517 U01c1 -pokey2tick DS 1 ; $1E0 518 U01c1 -pokey3frames DS 1 ; $1E1 519 U01c1 -pokey3tick DS 1 ; $1E2 520 U01c1 -pokey4frames DS 1 ; $1E3 521 U01c1 -pokey4tick DS 1 ; $1E4 522 U01c1 -pokey1priority DS 1 ; $1E5 523 U01c1 -pokey1offset DS 1 ; $1E6 524 U01c1 -pokey2priority DS 1 ; $1E7 525 U01c1 -pokey2offset DS 1 ; $1E8 526 U01c1 -pokey3priority DS 1 ; $1E9 527 U01c1 -pokey3offset DS 1 ; $1EA 528 U01c1 -pokey4priority DS 1 ; $1EB 529 U01c1 -pokey4offset DS 1 ; $1EC 530 U01c1 endif 531 U01c1 532 U01c1 ifnconst CANARRYOFF 533 U01c1 00 canary DS 1 ; $1ED 534 U01c2 endif 535 U01c2 536 U01c2 ifnconst bankswitchmode stack allowance: 30 nested subroutines. 537 U01c2 echo " stack allowance:",[($1FF - .)/2]d,"nested subroutines." 538 U01c2 - else 539 U01c2 - echo " stack allowance:",[($1FF - .)/3]d,"nested subroutines." 540 U01c2 endif 541 U01c2 ifnconst CANARRYOFF the canary is situated at: $1c1 542 U01c2 echo " the canary is situated at:",[canary] 543 U01c2 - else 544 U01c2 - echo " the canary is disabled." 545 U01c2 endif 546 U01c2 547 U01c2 ; $1EE - $1FF reserved for stack 548 U01c2 549 10000 ???? SEG "GAME" 550 10000 ???? ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.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_1up_mode = $00 4 10000 ???? 00 1e vertical_shooting_1up_width_twoscompliment = $1e 5 10000 ???? 00 02 vertical_shooting_1up_width = $02 6 10000 ???? 00 00 vertical_shooting_score_10_digits_mode = $00 7 10000 ???? 00 16 vertical_shooting_score_10_digits_width_twoscompliment = $16 8 10000 ???? 00 0a vertical_shooting_score_10_digits_width = $0a 9 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_mode = $00 10 10000 ???? 00 1e vertical_shooting_enemy01_tallsprite_00_width_twoscompliment = $1e 11 10000 ???? 00 02 vertical_shooting_enemy01_tallsprite_00_width = $02 12 10000 ???? 00 00 vertical_shooting_enemy01_mode = $00 13 10000 ???? 00 1e vertical_shooting_enemy01_width_twoscompliment = $1e 14 10000 ???? 00 02 vertical_shooting_enemy01_width = $02 15 10000 ???? 00 00 vertical_shooting_powerup_mode = $00 16 10000 ???? 00 1e vertical_shooting_powerup_width_twoscompliment = $1e 17 10000 ???? 00 02 vertical_shooting_powerup_width = $02 18 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 19 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 20 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 21 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 22 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 23 10000 ???? 00 01 vertical_shooting_bullet_width = $01 24 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 25 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 26 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 27 10000 ???? 00 00 vertical_shooting_ship_mode = $00 28 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 29 10000 ???? 00 02 vertical_shooting_ship_width = $02 30 10000 ???? 00 80 atascii_mode = $80 31 10000 ???? 00 0a atascii_width_twoscompliment = $0a 32 10000 ???? 00 f6 atascii_width = $f6 33 10000 ???? 00 54 sfx_pulsecannon_length = .skipL0189-sfx_pulsecannon 34 10000 ???? 35 10000 ???? 00 36 sfx_bling_length = .skipL0188-sfx_bling 36 10000 ???? 37 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 38 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 39 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 40 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 41 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 42 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 43 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 44 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 45 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 46 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 47 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 48 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 49 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 50 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 51 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 52 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 53 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 54 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 55 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 56 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 57 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 58 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 59 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 60 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 61 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 62 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 63 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 64 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 65 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 66 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 67 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 68 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 69 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 70 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 71 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 72 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 73 10000 ???? 00 00 atascii_color1 = $00 74 10000 ???? 00 0f atascii_color0 = $0f 75 10000 ???? 01 a9 lives = score1 76 10000 ???? 77 10000 ???? 01 62 extra_shipFlag = var34 78 10000 ???? 79 10000 ???? 01 61 extra_shipY = var33 80 10000 ???? 81 10000 ???? 01 60 extra_shipX = var32 82 10000 ???? 83 10000 ???? 01 5f gameover_flag = var31 84 10000 ???? 85 10000 ???? 01 5e enemy01_speed = var30 86 10000 ???? 87 10000 ???? 01 5d rMovement6 = var29 88 10000 ???? 89 10000 ???? 01 5c rMovement5 = var28 90 10000 ???? 91 10000 ???? 01 5b rMovement4 = var27 92 10000 ???? 93 10000 ???? 01 5a rMovement3 = var26 94 10000 ???? 95 10000 ???? 01 59 enemy01_Flag = var25 96 10000 ???? 97 10000 ???? 01 58 enemy01_Y = var24 98 10000 ???? 99 10000 ???? 01 57 enemy01_X = var23 100 10000 ???? 101 10000 ???? 01 56 enemy_shotSlowdown = var22 102 10000 ???? 103 10000 ???? 01 55 bulletSlowdown = var21 104 10000 ???? 105 10000 ???? 01 54 power_upSlowdown = var20 106 10000 ???? 107 10000 ???? 01 53 rMovement2 = var19 108 10000 ???? 109 10000 ???? 01 52 power_upFlag = var18 110 10000 ???? 111 10000 ???? 01 51 power_upY = var17 112 10000 ???? 113 10000 ???? 01 50 power_upX = var16 114 10000 ???? 115 10000 ???? 01 4f rDirection = var15 116 10000 ???? 117 10000 ???? 01 4e rMovement1 = var14 118 10000 ???? 119 10000 ???? 01 4d playerFlag = var13 120 10000 ???? 121 10000 ???? 01 4c enemy_shotFlag = var12 122 10000 ???? 123 10000 ???? 01 4b enemy_shotY = var11 124 10000 ???? 125 10000 ???? 01 4a enemy_shotX = var10 126 10000 ???? 127 10000 ???? 01 49 bulletY = var9 128 10000 ???? 129 10000 ???? 01 48 bulletX = var8 130 10000 ???? 131 10000 ???? 01 47 joyposright = var7 132 10000 ???? 133 10000 ???? 01 46 joyposleft = var6 134 10000 ???? 135 10000 ???? 01 45 joyposdown = var5 136 10000 ???? 137 10000 ???? 01 44 joyposup = var4 138 10000 ???? 139 10000 ???? 01 43 fire_debounce = var3 140 10000 ???? 141 10000 ???? 01 42 playerY = var2 142 10000 ???? 143 10000 ???? 01 41 playerX = var1 144 10000 ???? 145 10000 ???? 01 40 frameCounter = var0 146 10000 ???? 147 10000 ???? 00 01 collisionwrap = 1 148 10000 ???? 00 01 NTSC = 1 149 10000 ???? 00 c0 SCREENHEIGHT = 192 150 10000 ???? 00 01 CHECKOVERWRITE = 1 151 10000 ???? 00 08 ZONEHEIGHT = 8 152 10000 ???? 00 01 ROM16K = 1 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 398 10000 ???? 399 10000 ???? ; A BEAD header gets automatically incorportated into the ROM header. 400 10000 ???? ; For more BEAD executable info, check out the spec... 401 10000 ???? ; http://7800.8bitdev.org/index.php/The_Atari_7800_BEAD_Execuable_Specification 402 10000 ???? 403 10000 ???? 00 01 GAMEDESCRIPTIONSET = 1 404 10000 ???? 4e 61 6d 65 GAMEDESCRIPTION = "Test Name" 405 10000 ???? 406 10000 ???? 00 40 BDHSC = %01000000 407 10000 ???? 00 20 BDYM = %00100000 408 10000 ???? 00 10 BDPOKEY = %00010000 409 10000 ???? 00 08 BDROF = %00001000 410 10000 ???? 00 00 BD16K = %00000000 411 10000 ???? 00 01 BD32K = %00000001 412 10000 ???? 00 02 BD48K = %00000010 413 10000 ???? 00 05 BD1800 = %00000101 414 10000 ???? 00 06 BD4000 = %00000110 415 10000 ???? 416 10000 ???? ifconst ROM16K 417 10000 ???? 00 01 BEADHEADER = 1 418 10000 ???? endif 419 10000 ???? - ifconst ROM32K 420 10000 ???? -BEADHEADER = 1 421 10000 ???? endif 422 10000 ???? - ifconst ROM48K 423 10000 ???? -BEADHEADER = 1 424 10000 ???? endif 425 10000 ???? 426 10000 ???? ifconst BEADHEADER 427 10000 ???? BEADHARDWARE SET 0 428 10000 ???? ifconst ROM16K 429 10000 ???? BEADHARDWARE SET (BEADHARDWARE|BD16K) 430 10000 ???? endif 431 10000 ???? - ifconst ROM32K 432 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BD32K) 433 10000 ???? endif 434 10000 ???? - ifconst ROM48K 435 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BD48K) 436 10000 ???? endif 437 10000 ???? - ifconst pokeysupport 438 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BDPOKEY) 439 10000 ???? endif 440 10000 ???? - ifconst HSSUPPORT 441 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BDHSC) 442 10000 ???? endif 443 10000 ???? endif 444 10000 ???? 445 10000 ???? ;start address of cart... 446 10000 ???? - ifconst ROM48K 447 10000 ???? - ORG $4000,0 448 10000 ???? - ifconst BEADHEADER 449 10000 ???? - .byte $BE,$AD,BEADHARDWARE 450 10000 ???? - ifconst GAMEDESCRIPTIONSET 451 10000 ???? - CLC 452 10000 ???? - BCC _SKIPDESCRIPTION 453 10000 ???? - .byte GAMEDESCRIPTION,0 454 10000 ???? -_SKIPDESCRIPTION 455 10000 ???? - endif 456 10000 ???? - jmp ($FFFC) 457 10000 ???? - endif 458 10000 ???? else 459 10000 ???? - ifconst bankswitchmode 460 10000 ???? - ifconst ROMAT4K 461 10000 ???? - ORG $4000,0 462 10000 ???? - RORG $4000 463 10000 ???? - else 464 10000 ???? - ORG $8000,0 465 10000 ???? - RORG $8000 466 10000 ???? - endif 467 10000 ???? else ; not bankswitchmode 468 10000 ???? ifconst ROM16K 469 c000 ORG $C000,0 470 c000 ifconst BEADHEADER 471 c000 be ad 00 .byte.b $BE,$AD,BEADHARDWARE 472 c003 - ifconst GAMEDESCRIPTION 473 c003 - CLC 474 c003 - BCC _SKIPDESCRIPTION 475 c003 - .byte GAMEDESCRIPTION,0 476 c003 -_SKIPDESCRIPTION 477 c003 endif 478 c003 6c fc ff jmp ($FFFC) 479 c006 endif 480 c006 - else 481 c006 - ifconst ROM8K 482 c006 - ORG $E000,0 483 c006 - else 484 c006 - ORG $8000,0 485 c006 - ifconst BEADHEADER 486 c006 - .byte $BE,$AD,BEADHARDWARE 487 c006 - ifconst GAMEDESCRIPTION 488 c006 - CLC 489 c006 - BCC _SKIPDESCRIPTION 490 c006 - .byte GAMEDESCRIPTION,0 491 c006 -_SKIPDESCRIPTION 492 c006 - endif 493 c006 - jmp ($FFFC) 494 c006 - endif 495 c006 - endif 496 c006 endif 497 c006 endif 498 c006 endif 499 c006 500 c006 ;7800basic v0.14 Aug 31 2020 20:48:20 501 c006 SPACEOVERFLOW SET 0 502 c006 game 503 c006 . 504 c006 ;; 505 c006 506 c006 . 507 c006 ;; 508 c006 509 c006 .L00 ;; set romsize 16k 510 c006 511 c006 .L01 ;; set zoneheight 8 512 c006 513 c006 .L02 ;; set zoneprotection on 514 c006 515 c006 .L03 ;; set tallsprite on 516 c006 517 c006 .L04 ;; set screenheight 192 518 c006 519 c006 .L05 ;; set basepath gfx 520 c006 521 c006 .L06 ;; set tv ntsc 522 c006 523 c006 .L07 ;; set collisionwrap on 524 c006 525 c006 .L08 ;; displaymode 160A 526 c006 527 c006 a9 40 lda #%01000000 ;Enable DMA, mode=160x2/160x4 528 c008 85 3c sta CTRL 529 c00a 530 c00a 8d 07 21 sta sCTRL 531 c00d 532 c00d . 533 c00d ;; 534 c00d 535 c00d .L09 ;; dim frameCounter = var0 536 c00d 537 c00d .L010 ;; dim playerX = var1 538 c00d 539 c00d .L011 ;; dim playerY = var2 540 c00d 541 c00d .L012 ;; dim fire_debounce = var3 542 c00d 543 c00d .L013 ;; dim joyposup = var4 544 c00d 545 c00d .L014 ;; dim joyposdown = var5 546 c00d 547 c00d .L015 ;; dim joyposleft = var6 548 c00d 549 c00d .L016 ;; dim joyposright = var7 550 c00d 551 c00d .L017 ;; dim bulletX = var8 552 c00d 553 c00d .L018 ;; dim bulletY = var9 554 c00d 555 c00d .L019 ;; dim enemy_shotX = var10 556 c00d 557 c00d .L020 ;; dim enemy_shotY = var11 558 c00d 559 c00d .L021 ;; dim enemy_shotFlag = var12 560 c00d 561 c00d .L022 ;; dim playerFlag = var13 562 c00d 563 c00d .L023 ;; dim rMovement1 = var14 564 c00d 565 c00d .L024 ;; dim rDirection = var15 566 c00d 567 c00d .L025 ;; dim power_upX = var16 568 c00d 569 c00d .L026 ;; dim power_upY = var17 570 c00d 571 c00d .L027 ;; dim power_upFlag = var18 572 c00d 573 c00d .L028 ;; dim rMovement2 = var19 574 c00d 575 c00d .L029 ;; dim power_upSlowdown = var20 576 c00d 577 c00d .L030 ;; dim bulletSlowdown = var21 578 c00d 579 c00d .L031 ;; dim enemy_shotSlowdown = var22 580 c00d 581 c00d .L032 ;; dim enemy01_X = var23 582 c00d 583 c00d .L033 ;; dim enemy01_Y = var24 584 c00d 585 c00d .L034 ;; dim enemy01_Flag = var25 586 c00d 587 c00d .L035 ;; dim rMovement3 = var26 588 c00d 589 c00d .L036 ;; dim rMovement4 = var27 590 c00d 591 c00d .L037 ;; dim rMovement5 = var28 592 c00d 593 c00d .L038 ;; dim rMovement6 = var29 594 c00d 595 c00d .L039 ;; dim enemy01_speed = var30 596 c00d 597 c00d .L040 ;; dim gameover_flag = var31 598 c00d 599 c00d .L041 ;; dim extra_shipX = var32 600 c00d 601 c00d .L042 ;; dim extra_shipY = var33 602 c00d 603 c00d .L043 ;; dim extra_shipFlag = var34 604 c00d 605 c00d .L044 ;; dim lives = score1 606 c00d 607 c00d .palettes 608 c00d ;; palettes 609 c00d 610 c00d .L045 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 611 c00d 612 c00d a9 0f LDA #$0F 613 c00f 85 21 STA P0C1 614 c011 a9 05 LDA #$05 615 c013 85 22 STA P0C2 616 c015 a9 32 LDA #$32 617 c017 85 23 STA P0C3 618 c019 .L046 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 619 c019 620 c019 a9 0f LDA #$0F 621 c01b 85 25 STA P1C1 622 c01d a9 ee LDA #$EE 623 c01f 85 26 STA P1C2 624 c021 a9 e7 LDA #$E7 625 c023 85 27 STA P1C3 626 c025 .L047 ;; P2C1 = $9D : P2C2 = $73 : P2C3 = $88 627 c025 628 c025 a9 9d LDA #$9D 629 c027 85 29 STA P2C1 630 c029 a9 73 LDA #$73 631 c02b 85 2a STA P2C2 632 c02d a9 88 LDA #$88 633 c02f 85 2b STA P2C3 634 c031 .L048 ;; P3C1 = $FB : P3C2 = $F2 : P3C3 = $25 635 c031 636 c031 a9 fb LDA #$FB 637 c033 85 2d STA P3C1 638 c035 a9 f2 LDA #$F2 639 c037 85 2e STA P3C2 640 c039 a9 25 LDA #$25 641 c03b 85 2f STA P3C3 642 c03d . 643 c03d ;; 644 c03d 645 c03d .L049 ;; characterset atascii 646 c03d 647 c03d a9 d0 lda #>atascii 648 c03f 85 34 sta CHARBASE 649 c041 8d 0b 21 sta sCHARBASE 650 c044 651 c044 a9 e0 lda #(atascii_mode | %01100000) 652 c046 8d 06 21 sta charactermode 653 c049 654 c049 .L050 ;; alphachars ASCII 655 c049 656 c049 .import 657 c049 ;; import 658 c049 659 c049 .L051 ;; incgraphic atascii.png 320B 660 c049 661 c049 .L052 ;; incgraphic vertical_shooting_ship.png 160A 662 c049 663 c049 .L053 ;; incgraphic vertical_shooting_bullet.png 160A 664 c049 665 c049 .L054 ;; incgraphic vertical_shooting_enemyshot.png 160A 666 c049 667 c049 .L055 ;; incgraphic vertical_shooting_powerup.png 160A 668 c049 669 c049 .L056 ;; incgraphic vertical_shooting_enemy01.png 160A 670 c049 671 c049 .L057 ;; incgraphic vertical_shooting_score_10_digits.png 160A 672 c049 673 c049 .L058 ;; incgraphic vertical_shooting_1up.png 160A 674 c049 675 c049 . 676 c049 ;; 677 c049 678 c049 .plot 679 c049 ;; plot 680 c049 681 c049 .L059 ;; clearscreen 682 c049 683 c049 20 80 f0 jsr clearscreen 684 c04c .L060 ;; plotchars 'New^Vertical^Shooting^Demo' 1 26 8 685 c04c 686 c04c 4c 69 c0 JMP skipalphadata0 687 c04f alphadata0 688 c04f 4e .byte.b (alphadata0 719 c06f 85 43 sta temp2 720 c071 721 c071 a9 06 lda #6 ; width in two's complement 722 c073 09 20 ora #32 ; palette left shifted 5 bits 723 c075 85 44 sta temp3 724 c077 a9 1a lda #26 725 c079 85 45 sta temp4 726 c07b 727 c07b a9 08 lda #8 728 c07d 729 c07d 85 46 sta temp5 730 c07f 731 c07f 20 4d f3 jsr plotcharacters 732 c082 .L061 ;; plotchars 'by^Shane^Skekel.' 1 16 16 733 c082 734 c082 4c 95 c0 JMP skipalphadata1 735 c085 alphadata1 736 c085 62 .byte.b (alphadata1 757 c09b 85 43 sta temp2 758 c09d 759 c09d a9 10 lda #16 ; width in two's complement 760 c09f 09 20 ora #32 ; palette left shifted 5 bits 761 c0a1 85 44 sta temp3 762 c0a3 a9 10 lda #16 763 c0a5 85 45 sta temp4 764 c0a7 765 c0a7 a9 10 lda #16 766 c0a9 767 c0a9 85 46 sta temp5 768 c0ab 769 c0ab 20 4d f3 jsr plotcharacters 770 c0ae .L062 ;; plotchars 'Push^Fire^to^Begin.' 2 24 80 771 c0ae 772 c0ae 4c c4 c0 JMP skipalphadata2 773 c0b1 alphadata2 774 c0b1 50 .byte.b (alphadata2 798 c0ca 85 43 sta temp2 799 c0cc 800 c0cc a9 0d lda #13 ; width in two's complement 801 c0ce 09 40 ora #64 ; palette left shifted 5 bits 802 c0d0 85 44 sta temp3 803 c0d2 a9 18 lda #24 804 c0d4 85 45 sta temp4 805 c0d6 806 c0d6 a9 50 lda #80 807 c0d8 808 c0d8 85 46 sta temp5 809 c0da 810 c0da 20 4d f3 jsr plotcharacters 811 c0dd .L063 ;; savescreen 812 c0dd 813 c0dd 20 a4 f0 jsr savescreen 814 c0e0 .L064 ;; drawscreen 815 c0e0 816 c0e0 20 b4 f0 jsr drawscreen 817 c0e3 .init 818 c0e3 ;; init 819 c0e3 820 c0e3 .L065 ;; playerX = 80 : playerY = 144 : playerFlag = 0 : fire_debounce = 0 821 c0e3 822 c0e3 a9 50 LDA #80 823 c0e5 8d 41 01 STA playerX 824 c0e8 a9 90 LDA #144 825 c0ea 8d 42 01 STA playerY 826 c0ed a9 00 LDA #0 827 c0ef 8d 4d 01 STA playerFlag 828 c0f2 8d 43 01 STA fire_debounce 829 c0f5 .L066 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 830 c0f5 831 c0f5 a9 00 LDA #0 832 c0f7 8d 44 01 STA joyposup 833 c0fa 8d 45 01 STA joyposdown 834 c0fd 8d 46 01 STA joyposleft 835 c100 8d 47 01 STA joyposright 836 c103 .L067 ;; bulletX = 0 : bulletY = 0 837 c103 838 c103 a9 00 LDA #0 839 c105 8d 48 01 STA bulletX 840 c108 8d 49 01 STA bulletY 841 c10b .L068 ;; enemy_shotX = 0 : enemy_shotY = 0 : enemy_shotFlag = 0 842 c10b 843 c10b a9 00 LDA #0 844 c10d 8d 4a 01 STA enemy_shotX 845 c110 8d 4b 01 STA enemy_shotY 846 c113 8d 4c 01 STA enemy_shotFlag 847 c116 .L069 ;; rMovement1 = 1 : rMovement2 = 1 : rMovement3 = 1 : rMovement4 = 1 848 c116 849 c116 a9 01 LDA #1 850 c118 8d 4e 01 STA rMovement1 851 c11b 8d 53 01 STA rMovement2 852 c11e 8d 5a 01 STA rMovement3 853 c121 8d 5b 01 STA rMovement4 854 c124 .L070 ;; rMovement5 = 1 : rMovement6 = 1 : rDirection = 1 855 c124 856 c124 a9 01 LDA #1 857 c126 8d 5c 01 STA rMovement5 858 c129 8d 5d 01 STA rMovement6 859 c12c 8d 4f 01 STA rDirection 860 c12f .L071 ;; power_upX = 5 : power_upY = 32 : power_upFlag = 0 861 c12f 862 c12f a9 05 LDA #5 863 c131 8d 50 01 STA power_upX 864 c134 a9 20 LDA #32 865 c136 8d 51 01 STA power_upY 866 c139 a9 00 LDA #0 867 c13b 8d 52 01 STA power_upFlag 868 c13e .L072 ;; enemy_shotSlowdown = 0 : bulletSlowdown = 0 : power_upSlowdown = 0 869 c13e 870 c13e a9 00 LDA #0 871 c140 8d 56 01 STA enemy_shotSlowdown 872 c143 8d 55 01 STA bulletSlowdown 873 c146 8d 54 01 STA power_upSlowdown 874 c149 .L073 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 : enemy01_speed = 6 875 c149 876 c149 a9 00 LDA #0 877 c14b 8d 57 01 STA enemy01_X 878 c14e 8d 58 01 STA enemy01_Y 879 c151 8d 59 01 STA enemy01_Flag 880 c154 a9 06 LDA #6 881 c156 8d 5e 01 STA enemy01_speed 882 c159 .L074 ;; frameCounter = 0 : gameover_flag = 0 883 c159 884 c159 a9 00 LDA #0 885 c15b 8d 40 01 STA frameCounter 886 c15e 8d 5f 01 STA gameover_flag 887 c161 .L075 ;; extra_shipX = 0 : extra_shipY = 0 : extra_shipFlag = 0 888 c161 889 c161 a9 00 LDA #0 890 c163 8d 60 01 STA extra_shipX 891 c166 8d 61 01 STA extra_shipY 892 c169 8d 62 01 STA extra_shipFlag 893 c16c . 894 c16c ;; 895 c16c 896 c16c .titlescreenloop 897 c16c ;; titlescreenloop 898 c16c 899 c16c .L076 ;; restorescreen 900 c16c 901 c16c 20 92 f0 jsr restorescreen 902 c16f .L077 ;; if switchreset then reboot 903 c16f 904 c16f 20 79 f4 jsr checkresetswitch 905 c172 d0 03 BNE .skipL077 906 c174 .condpart0 907 c174 4c 66 f5 JMP START 908 c177 .skipL077 909 c177 .L078 ;; if joy0fire then clearscreen : lives = $04 : score0 = 0 : goto main 910 c177 911 c177 2c 02 21 bit sINPT1 912 c17a 10 1a BPL .skipL078 913 c17c .condpart1 914 c17c 20 80 f0 jsr clearscreen 915 c17f a9 04 LDA #$04 916 c181 8d a9 01 STA lives 917 c184 a9 00 LDA #$00 918 c186 8d a8 01 STA score0+2 919 c189 a9 00 LDA #$00 920 c18b 8d a7 01 STA score0+1 921 c18e a9 00 LDA #$00 922 c190 8d a6 01 STA score0 923 c193 4c c2 c1 jmp .main 924 c196 925 c196 .skipL078 926 c196 . 927 c196 ;; 928 c196 929 c196 .L079 ;; if switchleftb then goto gameover_loop 930 c196 931 c196 2c 82 02 bit SWCHB 932 c199 70 03 BVS .skipL079 933 c19b .condpart2 934 c19b 4c 25 d9 jmp .gameover_loop 935 c19e 936 c19e .skipL079 937 c19e .L080 ;; if switchrightb then playsfx sfx_bling 938 c19e 939 c19e 2c 82 02 bit SWCHB 940 c1a1 30 19 BMI .skipL080 941 c1a3 .condpart3 942 c1a3 a9 01 lda #1 943 c1a5 85 de sta sfxschedulelock 944 c1a7 a9 6d lda #sfx_bling 947 c1ad 85 e1 sta sfxinstrumenthi 948 c1af a9 00 lda #0 949 c1b1 85 e2 sta sfxpitchoffset ; no pitch modification 950 c1b3 85 e3 sta sfxnoteindex ; not a musical note 951 c1b5 20 4c f2 jsr schedulesfx 952 c1b8 a9 00 lda #0 953 c1ba 85 de sta sfxschedulelock 954 c1bc .skipL080 955 c1bc .L081 ;; drawscreen 956 c1bc 957 c1bc 20 b4 f0 jsr drawscreen 958 c1bf .L082 ;; goto titlescreenloop 959 c1bf 960 c1bf 4c 6c c1 jmp .titlescreenloop 961 c1c2 962 c1c2 . 963 c1c2 ;; 964 c1c2 965 c1c2 . 966 c1c2 ;; 967 c1c2 968 c1c2 .main 969 c1c2 ;; main 970 c1c2 971 c1c2 .L083 ;; frameCounter = frameCounter + 1 972 c1c2 973 c1c2 ad 40 01 LDA frameCounter 974 c1c5 18 CLC 975 c1c6 69 01 ADC #1 976 c1c8 8d 40 01 STA frameCounter 977 c1cb .L084 ;; if frameCounter > 10 then frameCounter = 0 978 c1cb 979 c1cb a9 0a LDA #10 980 c1cd cd 40 01 CMP frameCounter 981 c1d0 b0 05 BCS .skipL084 982 c1d2 .condpart4 983 c1d2 a9 00 LDA #0 984 c1d4 8d 40 01 STA frameCounter 985 c1d7 .skipL084 986 c1d7 .mainloop 987 c1d7 ;; mainloop 988 c1d7 989 c1d7 .L085 ;; BACKGRND = $00 990 c1d7 991 c1d7 a9 00 LDA #$00 992 c1d9 85 20 STA BACKGRND 993 c1db .L086 ;; restorescreen 994 c1db 995 c1db 20 92 f0 jsr restorescreen 996 c1de .L087 ;; rMovement1 = ( rand & 7 ) - 2 997 c1de 998 c1de ; complex statement detected 999 c1de 20 f1 f3 jsr randomize 1000 c1e1 29 07 AND #7 1001 c1e3 38 SEC 1002 c1e4 e9 02 SBC #2 1003 c1e6 8d 4e 01 STA rMovement1 1004 c1e9 .L088 ;; rMovement2 = ( rand & 6 ) 1005 c1e9 1006 c1e9 ; complex statement detected 1007 c1e9 20 f1 f3 jsr randomize 1008 c1ec 29 06 AND #6 1009 c1ee 8d 53 01 STA rMovement2 1010 c1f1 .L089 ;; rMovement3 = ( rand & 3 ) + 1 1011 c1f1 1012 c1f1 ; complex statement detected 1013 c1f1 20 f1 f3 jsr randomize 1014 c1f4 29 03 AND #3 1015 c1f6 18 CLC 1016 c1f7 69 01 ADC #1 1017 c1f9 8d 5a 01 STA rMovement3 1018 c1fc .L090 ;; rMovement4 = ( rand & 5 ) + 2 1019 c1fc 1020 c1fc ; complex statement detected 1021 c1fc 20 f1 f3 jsr randomize 1022 c1ff 29 05 AND #5 1023 c201 18 CLC 1024 c202 69 02 ADC #2 1025 c204 8d 5b 01 STA rMovement4 1026 c207 .L091 ;; rMovement5 = ( rand & 5 ) + 1 1027 c207 1028 c207 ; complex statement detected 1029 c207 20 f1 f3 jsr randomize 1030 c20a 29 05 AND #5 1031 c20c 18 CLC 1032 c20d 69 01 ADC #1 1033 c20f 8d 5c 01 STA rMovement5 1034 c212 .L092 ;; rMovement6 = ( rand & 6 ) - 1 1035 c212 1036 c212 ; complex statement detected 1037 c212 20 f1 f3 jsr randomize 1038 c215 29 06 AND #6 1039 c217 38 SEC 1040 c218 e9 01 SBC #1 1041 c21a 8d 5d 01 STA rMovement6 1042 c21d .L093 ;; rDirection = ( rand & 4 ) 1043 c21d 1044 c21d ; complex statement detected 1045 c21d 20 f1 f3 jsr randomize 1046 c220 29 04 AND #4 1047 c222 8d 4f 01 STA rDirection 1048 c225 .L094 ;; if switchreset then reboot 1049 c225 1050 c225 20 79 f4 jsr checkresetswitch 1051 c228 d0 03 BNE .skipL094 1052 c22a .condpart5 1053 c22a 4c 66 f5 JMP START 1054 c22d .skipL094 1055 c22d .L095 ;; enemy_shotSlowdown = enemy_shotSlowdown + 1 1056 c22d 1057 c22d ad 56 01 LDA enemy_shotSlowdown 1058 c230 18 CLC 1059 c231 69 01 ADC #1 1060 c233 8d 56 01 STA enemy_shotSlowdown 1061 c236 .L096 ;; if enemy_shotSlowdown > 8 then enemy_shotSlowdown = 0 1062 c236 1063 c236 a9 08 LDA #8 1064 c238 cd 56 01 CMP enemy_shotSlowdown 1065 c23b b0 05 BCS .skipL096 1066 c23d .condpart6 1067 c23d a9 00 LDA #0 1068 c23f 8d 56 01 STA enemy_shotSlowdown 1069 c242 .skipL096 1070 c242 . 1071 c242 ;; 1072 c242 1073 c242 .L097 ;; bulletSlowdown = bulletSlowdown + 1 1074 c242 1075 c242 ad 55 01 LDA bulletSlowdown 1076 c245 18 CLC 1077 c246 69 01 ADC #1 1078 c248 8d 55 01 STA bulletSlowdown 1079 c24b .L098 ;; if bulletSlowdown > 6 then bulletSlowdown = 0 1080 c24b 1081 c24b a9 06 LDA #6 1082 c24d cd 55 01 CMP bulletSlowdown 1083 c250 b0 05 BCS .skipL098 1084 c252 .condpart7 1085 c252 a9 00 LDA #0 1086 c254 8d 55 01 STA bulletSlowdown 1087 c257 .skipL098 1088 c257 . 1089 c257 ;; 1090 c257 1091 c257 .L099 ;; power_upSlowdown = power_upSlowdown + 1 1092 c257 1093 c257 ad 54 01 LDA power_upSlowdown 1094 c25a 18 CLC 1095 c25b 69 01 ADC #1 1096 c25d 8d 54 01 STA power_upSlowdown 1097 c260 .L0100 ;; if power_upSlowdown > 7 then power_upSlowdown = 0 1098 c260 1099 c260 a9 07 LDA #7 1100 c262 cd 54 01 CMP power_upSlowdown 1101 c265 b0 05 BCS .skipL0100 1102 c267 .condpart8 1103 c267 a9 00 LDA #0 1104 c269 8d 54 01 STA power_upSlowdown 1105 c26c .skipL0100 1106 c26c . 1107 c26c ;; 1108 c26c 1109 c26c .L0101 ;; plotsprite vertical_shooting_ship 0 playerX playerY 1110 c26c 1111 c26c a9 f6 lda #vertical_shooting_ship 1115 c272 85 43 sta temp2 1116 c274 1117 c274 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 1118 c276 85 44 sta temp3 1119 c278 1120 c278 ad 41 01 lda playerX 1121 c27b 85 45 sta temp4 1122 c27d 1123 c27d ad 42 01 lda playerY 1124 c280 1125 c280 85 46 sta temp5 1126 c282 1127 c282 a9 40 lda #(vertical_shooting_ship_mode|%01000000) 1128 c284 85 47 sta temp6 1129 c286 1130 c286 20 94 f2 jsr plotsprite 1131 c289 ; +tall sprite replot 1132 c289 18 clc 1133 c28a a5 42 lda temp1 1134 c28c 69 02 adc #vertical_shooting_ship_width 1135 c28e 85 42 sta temp1 1136 c290 a5 46 lda temp5 1137 c292 69 08 adc #WZONEHEIGHT 1138 c294 85 46 sta temp5 1139 c296 20 94 f2 jsr plotsprite 1140 c299 .L0102 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 1141 c299 1142 c299 a9 fa lda #vertical_shooting_bullet 1146 c29f 85 43 sta temp2 1147 c2a1 1148 c2a1 a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 1149 c2a3 85 44 sta temp3 1150 c2a5 1151 c2a5 ad 48 01 lda bulletX 1152 c2a8 85 45 sta temp4 1153 c2aa 1154 c2aa ad 49 01 lda bulletY 1155 c2ad 1156 c2ad 85 46 sta temp5 1157 c2af 1158 c2af a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 1159 c2b1 85 47 sta temp6 1160 c2b3 1161 c2b3 20 94 f2 jsr plotsprite 1162 c2b6 .L0103 ;; plotsprite vertical_shooting_enemyshot 2 enemy_shotX enemy_shotY 1163 c2b6 1164 c2b6 a9 fb lda #vertical_shooting_enemyshot 1168 c2bc 85 43 sta temp2 1169 c2be 1170 c2be a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 1171 c2c0 85 44 sta temp3 1172 c2c2 1173 c2c2 ad 4a 01 lda enemy_shotX 1174 c2c5 85 45 sta temp4 1175 c2c7 1176 c2c7 ad 4b 01 lda enemy_shotY 1177 c2ca 1178 c2ca 85 46 sta temp5 1179 c2cc 1180 c2cc a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 1181 c2ce 85 47 sta temp6 1182 c2d0 1183 c2d0 20 94 f2 jsr plotsprite 1184 c2d3 .L0104 ;; plotsprite vertical_shooting_powerup 3 power_upX power_upY 1185 c2d3 1186 c2d3 a9 fc lda #vertical_shooting_powerup 1190 c2d9 85 43 sta temp2 1191 c2db 1192 c2db a9 7e lda #(96|vertical_shooting_powerup_width_twoscompliment) 1193 c2dd 85 44 sta temp3 1194 c2df 1195 c2df ad 50 01 lda power_upX 1196 c2e2 85 45 sta temp4 1197 c2e4 1198 c2e4 ad 51 01 lda power_upY 1199 c2e7 1200 c2e7 85 46 sta temp5 1201 c2e9 1202 c2e9 a9 40 lda #(vertical_shooting_powerup_mode|%01000000) 1203 c2eb 85 47 sta temp6 1204 c2ed 1205 c2ed 20 94 f2 jsr plotsprite 1206 c2f0 .L0105 ;; plotsprite vertical_shooting_enemy01 2 enemy01_X enemy01_Y 1207 c2f0 1208 c2f0 a9 00 lda #vertical_shooting_enemy01 1212 c2f6 85 43 sta temp2 1213 c2f8 1214 c2f8 a9 5e lda #(64|vertical_shooting_enemy01_width_twoscompliment) 1215 c2fa 85 44 sta temp3 1216 c2fc 1217 c2fc ad 57 01 lda enemy01_X 1218 c2ff 85 45 sta temp4 1219 c301 1220 c301 ad 58 01 lda enemy01_Y 1221 c304 1222 c304 85 46 sta temp5 1223 c306 1224 c306 a9 40 lda #(vertical_shooting_enemy01_mode|%01000000) 1225 c308 85 47 sta temp6 1226 c30a 1227 c30a 20 94 f2 jsr plotsprite 1228 c30d ; +tall sprite replot 1229 c30d 18 clc 1230 c30e a5 42 lda temp1 1231 c310 69 02 adc #vertical_shooting_enemy01_width 1232 c312 85 42 sta temp1 1233 c314 a5 46 lda temp5 1234 c316 69 08 adc #WZONEHEIGHT 1235 c318 85 46 sta temp5 1236 c31a 20 94 f2 jsr plotsprite 1237 c31d .L0106 ;; plotsprite vertical_shooting_1up 0 extra_shipX extra_shipY 1238 c31d 1239 c31d a9 0e lda #vertical_shooting_1up 1243 c323 85 43 sta temp2 1244 c325 1245 c325 a9 1e lda #(0|vertical_shooting_1up_width_twoscompliment) 1246 c327 85 44 sta temp3 1247 c329 1248 c329 ad 60 01 lda extra_shipX 1249 c32c 85 45 sta temp4 1250 c32e 1251 c32e ad 61 01 lda extra_shipY 1252 c331 1253 c331 85 46 sta temp5 1254 c333 1255 c333 a9 40 lda #(vertical_shooting_1up_mode|%01000000) 1256 c335 85 47 sta temp6 1257 c337 1258 c337 20 94 f2 jsr plotsprite 1259 c33a .L0107 ;; plotvalue vertical_shooting_score_10_digits 3 score0 6 25 8 1260 c33a 1261 c33a a9 04 lda #vertical_shooting_score_10_digits 1265 c340 85 43 sta temp2 1266 c342 1267 c342 ad 06 21 lda charactermode 1268 c345 85 4a sta temp9 1269 c347 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 1270 c349 8d 06 21 sta charactermode 1271 c34c a9 1a lda #26 ; width in two's complement 1272 c34e 09 60 ora #96 ; palette left shifted 5 bits 1273 c350 85 44 sta temp3 1274 c352 a9 19 lda #25 1275 c354 85 45 sta temp4 1276 c356 1277 c356 a9 08 lda #8 1278 c358 85 46 sta temp5 1279 c35a 1280 c35a a9 06 lda #6 1281 c35c 85 47 sta temp6 1282 c35e 1283 c35e a9 a6 lda #score0 1287 c364 85 49 sta temp8 1288 c366 1289 c366 20 82 f3 jsr plotvalue 1290 c366 00 01 USED_PLOTVALUE = 1 1291 c369 a5 4a lda temp9 1292 c36b 8d 06 21 sta charactermode 1293 c36e .L0108 ;; plotvalue vertical_shooting_score_10_digits 3 score1 1 153 8 1294 c36e 1295 c36e a9 04 lda #vertical_shooting_score_10_digits 1299 c374 85 43 sta temp2 1300 c376 1301 c376 ad 06 21 lda charactermode 1302 c379 85 4a sta temp9 1303 c37b a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 1304 c37d 8d 06 21 sta charactermode 1305 c380 a9 1f lda #31 ; width in two's complement 1306 c382 09 60 ora #96 ; palette left shifted 5 bits 1307 c384 85 44 sta temp3 1308 c386 a9 99 lda #153 1309 c388 85 45 sta temp4 1310 c38a 1311 c38a a9 08 lda #8 1312 c38c 85 46 sta temp5 1313 c38e 1314 c38e a9 01 lda #1 1315 c390 85 47 sta temp6 1316 c392 1317 c392 a9 a9 lda #score1 1321 c398 85 49 sta temp8 1322 c39a 1323 c39a 20 82 f3 jsr plotvalue 1324 c39a 00 01 USED_PLOTVALUE = 1 1325 c39d a5 4a lda temp9 1326 c39f 8d 06 21 sta charactermode 1327 c3a2 . 1328 c3a2 ;; 1329 c3a2 1330 c3a2 .L0109 ;; drawscreen 1331 c3a2 1332 c3a2 20 b4 f0 jsr drawscreen 1333 c3a5 . 1334 c3a5 ;; 1335 c3a5 1336 c3a5 .L0110 ;; if joy0up && joyposup = - 2 then gosub SetBulletHome 1337 c3a5 1338 c3a5 a9 10 lda #$10 1339 c3a7 2c 80 02 bit SWCHA 1340 c3aa d0 10 BNE .skipL0110 1341 c3ac .condpart9 1342 c3ac ; complex condition detected 1343 c3ac a9 fe LDA #254 1344 c3ae 48 PHA 1345 c3af ba TSX 1346 c3b0 68 PLA 1347 c3b1 ad 44 01 LDA joyposup 1348 c3b4 dd 01 01 CMP $101,x 1349 c3b7 d0 03 BNE .skip9then 1350 c3b9 .condpart10 1351 c3b9 20 00 d8 jsr .SetBulletHome 1352 c3bc 1353 c3bc .skip9then 1354 c3bc .skipL0110 1355 c3bc .L0111 ;; if joy0down && joyposdown = - 2 then gosub SetBulletHome 1356 c3bc 1357 c3bc a9 20 lda #$20 1358 c3be 2c 80 02 bit SWCHA 1359 c3c1 d0 10 BNE .skipL0111 1360 c3c3 .condpart11 1361 c3c3 ; complex condition detected 1362 c3c3 a9 fe LDA #254 1363 c3c5 48 PHA 1364 c3c6 ba TSX 1365 c3c7 68 PLA 1366 c3c8 ad 45 01 LDA joyposdown 1367 c3cb dd 01 01 CMP $101,x 1368 c3ce d0 03 BNE .skip11then 1369 c3d0 .condpart12 1370 c3d0 20 00 d8 jsr .SetBulletHome 1371 c3d3 1372 c3d3 .skip11then 1373 c3d3 .skipL0111 1374 c3d3 .L0112 ;; if joy0up && joyposleft = - 2 then gosub SetBulletHome 1375 c3d3 1376 c3d3 a9 10 lda #$10 1377 c3d5 2c 80 02 bit SWCHA 1378 c3d8 d0 10 BNE .skipL0112 1379 c3da .condpart13 1380 c3da ; complex condition detected 1381 c3da a9 fe LDA #254 1382 c3dc 48 PHA 1383 c3dd ba TSX 1384 c3de 68 PLA 1385 c3df ad 46 01 LDA joyposleft 1386 c3e2 dd 01 01 CMP $101,x 1387 c3e5 d0 03 BNE .skip13then 1388 c3e7 .condpart14 1389 c3e7 20 00 d8 jsr .SetBulletHome 1390 c3ea 1391 c3ea .skip13then 1392 c3ea .skipL0112 1393 c3ea .L0113 ;; if joy0down && joyposright = - 2 then gosub SetBulletHome 1394 c3ea 1395 c3ea a9 20 lda #$20 1396 c3ec 2c 80 02 bit SWCHA 1397 c3ef d0 10 BNE .skipL0113 1398 c3f1 .condpart15 1399 c3f1 ; complex condition detected 1400 c3f1 a9 fe LDA #254 1401 c3f3 48 PHA 1402 c3f4 ba TSX 1403 c3f5 68 PLA 1404 c3f6 ad 47 01 LDA joyposright 1405 c3f9 dd 01 01 CMP $101,x 1406 c3fc d0 03 BNE .skip15then 1407 c3fe .condpart16 1408 c3fe 20 00 d8 jsr .SetBulletHome 1409 c401 1410 c401 .skip15then 1411 c401 .skipL0113 1412 c401 .L0114 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1413 c401 1414 c401 a9 10 lda #$10 1415 c403 2c 80 02 bit SWCHA 1416 c406 d0 19 BNE .skipL0114 1417 c408 .condpart17 1418 c408 ad 42 01 LDA playerY 1419 c40b 38 SEC 1420 c40c e9 01 SBC #1 1421 c40e 8d 42 01 STA playerY 1422 c411 a9 01 LDA #1 1423 c413 8d 44 01 STA joyposup 1424 c416 a9 00 LDA #0 1425 c418 8d 45 01 STA joyposdown 1426 c41b 8d 46 01 STA joyposleft 1427 c41e 8d 47 01 STA joyposright 1428 c421 .skipL0114 1429 c421 .L0115 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 1430 c421 1431 c421 a9 20 lda #$20 1432 c423 2c 80 02 bit SWCHA 1433 c426 d0 1b BNE .skipL0115 1434 c428 .condpart18 1435 c428 ad 42 01 LDA playerY 1436 c42b 18 CLC 1437 c42c 69 01 ADC #1 1438 c42e 8d 42 01 STA playerY 1439 c431 a9 00 LDA #0 1440 c433 8d 44 01 STA joyposup 1441 c436 a9 01 LDA #1 1442 c438 8d 45 01 STA joyposdown 1443 c43b a9 00 LDA #0 1444 c43d 8d 46 01 STA joyposleft 1445 c440 8d 47 01 STA joyposright 1446 c443 .skipL0115 1447 c443 .L0116 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 1448 c443 1449 c443 2c 80 02 bit SWCHA 1450 c446 70 1b BVS .skipL0116 1451 c448 .condpart19 1452 c448 ad 41 01 LDA playerX 1453 c44b 38 SEC 1454 c44c e9 01 SBC #1 1455 c44e 8d 41 01 STA playerX 1456 c451 a9 00 LDA #0 1457 c453 8d 44 01 STA joyposup 1458 c456 8d 45 01 STA joyposdown 1459 c459 a9 01 LDA #1 1460 c45b 8d 46 01 STA joyposleft 1461 c45e a9 00 LDA #0 1462 c460 8d 47 01 STA joyposright 1463 c463 .skipL0116 1464 c463 .L0117 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 1465 c463 1466 c463 2c 80 02 bit SWCHA 1467 c466 30 19 BMI .skipL0117 1468 c468 .condpart20 1469 c468 ad 41 01 LDA playerX 1470 c46b 18 CLC 1471 c46c 69 01 ADC #1 1472 c46e 8d 41 01 STA playerX 1473 c471 a9 00 LDA #0 1474 c473 8d 44 01 STA joyposup 1475 c476 8d 45 01 STA joyposdown 1476 c479 8d 46 01 STA joyposleft 1477 c47c a9 01 LDA #1 1478 c47e 8d 47 01 STA joyposright 1479 c481 .skipL0117 1480 c481 .L0118 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1481 c481 1482 c481 2c 02 21 bit sINPT1 1483 c484 10 29 BPL .skipL0118 1484 c486 .condpart21 1485 c486 ad 44 01 LDA joyposup 1486 c489 c9 01 CMP #1 1487 c48b d0 22 BNE .skip21then 1488 c48d .condpart22 1489 c48d ad 49 01 LDA bulletY 1490 c490 38 SEC 1491 c491 e9 05 SBC #5 1492 c493 8d 49 01 STA bulletY 1493 c496 a9 01 lda #1 1494 c498 85 de sta sfxschedulelock 1495 c49a a9 a6 lda #sfx_pulsecannon 1498 c4a0 85 e1 sta sfxinstrumenthi 1499 c4a2 a9 00 lda #0 1500 c4a4 85 e2 sta sfxpitchoffset ; no pitch modification 1501 c4a6 85 e3 sta sfxnoteindex ; not a musical note 1502 c4a8 20 4c f2 jsr schedulesfx 1503 c4ab a9 00 lda #0 1504 c4ad 85 de sta sfxschedulelock 1505 c4af .skip21then 1506 c4af .skipL0118 1507 c4af .L0119 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1508 c4af 1509 c4af 2c 02 21 bit sINPT1 1510 c4b2 10 29 BPL .skipL0119 1511 c4b4 .condpart23 1512 c4b4 ad 45 01 LDA joyposdown 1513 c4b7 c9 01 CMP #1 1514 c4b9 d0 22 BNE .skip23then 1515 c4bb .condpart24 1516 c4bb ad 49 01 LDA bulletY 1517 c4be 38 SEC 1518 c4bf e9 05 SBC #5 1519 c4c1 8d 49 01 STA bulletY 1520 c4c4 a9 01 lda #1 1521 c4c6 85 de sta sfxschedulelock 1522 c4c8 a9 a6 lda #sfx_pulsecannon 1525 c4ce 85 e1 sta sfxinstrumenthi 1526 c4d0 a9 00 lda #0 1527 c4d2 85 e2 sta sfxpitchoffset ; no pitch modification 1528 c4d4 85 e3 sta sfxnoteindex ; not a musical note 1529 c4d6 20 4c f2 jsr schedulesfx 1530 c4d9 a9 00 lda #0 1531 c4db 85 de sta sfxschedulelock 1532 c4dd .skip23then 1533 c4dd .skipL0119 1534 c4dd .L0120 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1535 c4dd 1536 c4dd 2c 02 21 bit sINPT1 1537 c4e0 10 29 BPL .skipL0120 1538 c4e2 .condpart25 1539 c4e2 ad 46 01 LDA joyposleft 1540 c4e5 c9 01 CMP #1 1541 c4e7 d0 22 BNE .skip25then 1542 c4e9 .condpart26 1543 c4e9 ad 49 01 LDA bulletY 1544 c4ec 38 SEC 1545 c4ed e9 05 SBC #5 1546 c4ef 8d 49 01 STA bulletY 1547 c4f2 a9 01 lda #1 1548 c4f4 85 de sta sfxschedulelock 1549 c4f6 a9 a6 lda #sfx_pulsecannon 1552 c4fc 85 e1 sta sfxinstrumenthi 1553 c4fe a9 00 lda #0 1554 c500 85 e2 sta sfxpitchoffset ; no pitch modification 1555 c502 85 e3 sta sfxnoteindex ; not a musical note 1556 c504 20 4c f2 jsr schedulesfx 1557 c507 a9 00 lda #0 1558 c509 85 de sta sfxschedulelock 1559 c50b .skip25then 1560 c50b .skipL0120 1561 c50b .L0121 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 : playsfx sfx_pulsecannon 1562 c50b 1563 c50b 2c 02 21 bit sINPT1 1564 c50e 10 29 BPL .skipL0121 1565 c510 .condpart27 1566 c510 ad 47 01 LDA joyposright 1567 c513 c9 01 CMP #1 1568 c515 d0 22 BNE .skip27then 1569 c517 .condpart28 1570 c517 ad 49 01 LDA bulletY 1571 c51a 38 SEC 1572 c51b e9 05 SBC #5 1573 c51d 8d 49 01 STA bulletY 1574 c520 a9 01 lda #1 1575 c522 85 de sta sfxschedulelock 1576 c524 a9 a6 lda #sfx_pulsecannon 1579 c52a 85 e1 sta sfxinstrumenthi 1580 c52c a9 00 lda #0 1581 c52e 85 e2 sta sfxpitchoffset ; no pitch modification 1582 c530 85 e3 sta sfxnoteindex ; not a musical note 1583 c532 20 4c f2 jsr schedulesfx 1584 c535 a9 00 lda #0 1585 c537 85 de sta sfxschedulelock 1586 c539 .skip27then 1587 c539 .skipL0121 1588 c539 .L0122 ;; if !joy0fire then bulletX = playerX + 2 : bulletY = playerY - 8 1589 c539 1590 c539 2c 02 21 bit sINPT1 1591 c53c 30 12 BMI .skipL0122 1592 c53e .condpart29 1593 c53e ad 41 01 LDA playerX 1594 c541 18 CLC 1595 c542 69 02 ADC #2 1596 c544 8d 48 01 STA bulletX 1597 c547 ad 42 01 LDA playerY 1598 c54a 38 SEC 1599 c54b e9 08 SBC #8 1600 c54d 8d 49 01 STA bulletY 1601 c550 .skipL0122 1602 c550 . 1603 c550 ;; 1604 c550 1605 c550 .L0123 ;; if playerX > 152 then playerX = playerX - 1 1606 c550 1607 c550 a9 98 LDA #152 1608 c552 cd 41 01 CMP playerX 1609 c555 b0 09 BCS .skipL0123 1610 c557 .condpart30 1611 c557 ad 41 01 LDA playerX 1612 c55a 38 SEC 1613 c55b e9 01 SBC #1 1614 c55d 8d 41 01 STA playerX 1615 c560 .skipL0123 1616 c560 .L0124 ;; if playerX < 1 then playerX = playerX + 1 1617 c560 1618 c560 ad 41 01 LDA playerX 1619 c563 c9 01 CMP #1 1620 c565 b0 09 BCS .skipL0124 1621 c567 .condpart31 1622 c567 ad 41 01 LDA playerX 1623 c56a 18 CLC 1624 c56b 69 01 ADC #1 1625 c56d 8d 41 01 STA playerX 1626 c570 .skipL0124 1627 c570 .L0125 ;; if playerY > 177 then playerY = playerY - 1 1628 c570 1629 c570 a9 b1 LDA #177 1630 c572 cd 42 01 CMP playerY 1631 c575 b0 09 BCS .skipL0125 1632 c577 .condpart32 1633 c577 ad 42 01 LDA playerY 1634 c57a 38 SEC 1635 c57b e9 01 SBC #1 1636 c57d 8d 42 01 STA playerY 1637 c580 .skipL0125 1638 c580 .L0126 ;; if playerY < 1 then playerY = playerY + 1 1639 c580 1640 c580 ad 42 01 LDA playerY 1641 c583 c9 01 CMP #1 1642 c585 b0 09 BCS .skipL0126 1643 c587 .condpart33 1644 c587 ad 42 01 LDA playerY 1645 c58a 18 CLC 1646 c58b 69 01 ADC #1 1647 c58d 8d 42 01 STA playerY 1648 c590 .skipL0126 1649 c590 .L0127 ;; if bulletY > 183 then bulletY = bulletY - 1 1650 c590 1651 c590 a9 b7 LDA #183 1652 c592 cd 49 01 CMP bulletY 1653 c595 b0 09 BCS .skipL0127 1654 c597 .condpart34 1655 c597 ad 49 01 LDA bulletY 1656 c59a 38 SEC 1657 c59b e9 01 SBC #1 1658 c59d 8d 49 01 STA bulletY 1659 c5a0 .skipL0127 1660 c5a0 .L0128 ;; if bulletY < 1 then bulletY = bulletY + 1 1661 c5a0 1662 c5a0 ad 49 01 LDA bulletY 1663 c5a3 c9 01 CMP #1 1664 c5a5 b0 09 BCS .skipL0128 1665 c5a7 .condpart35 1666 c5a7 ad 49 01 LDA bulletY 1667 c5aa 18 CLC 1668 c5ab 69 01 ADC #1 1669 c5ad 8d 49 01 STA bulletY 1670 c5b0 .skipL0128 1671 c5b0 . 1672 c5b0 ;; 1673 c5b0 1674 c5b0 .L0129 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy_shotX , enemy_shotY , 4 , 8 ) then enemy_shotX = 200 : enemy_shotY = 200 : playerFlag = 1 : lives = lives - 1 : goto lose_a_life 1675 c5b0 1676 c5b0 1677 c5b0 18 clc ; one clc only. If we overflow we're screwed anyway. 1678 c5b1 ad 42 01 lda playerY 1679 c5b4 69 20 adc #((256-WSCREENHEIGHT)/2) 1680 c5b6 a8 tay 1681 c5b7 a9 07 lda #(8-1) 1682 c5b9 85 44 sta temp3 1683 c5bb a9 0f lda #(16-1) 1684 c5bd 85 45 sta temp4 1685 c5bf ad 4a 01 lda enemy_shotX 1686 c5c2 69 30 adc #48 1687 c5c4 85 46 sta temp5 1688 c5c6 ad 4b 01 lda enemy_shotY 1689 c5c9 69 20 adc #((256-WSCREENHEIGHT)/2) 1690 c5cb 85 47 sta temp6 1691 c5cd a9 03 lda #(4-1) 1692 c5cf 85 48 sta temp7 1693 c5d1 a9 07 lda #(8-1) 1694 c5d3 85 49 sta temp8 1695 c5d5 ad 41 01 lda playerX 1696 c5d8 69 30 adc #48 1697 c5da 20 ca f3 jsr boxcollision 1698 c5dd 1699 c5dd 90 19 BCC .skipL0129 1700 c5df .condpart36 1701 c5df a9 c8 LDA #200 1702 c5e1 8d 4a 01 STA enemy_shotX 1703 c5e4 8d 4b 01 STA enemy_shotY 1704 c5e7 a9 01 LDA #1 1705 c5e9 8d 4d 01 STA playerFlag 1706 c5ec ad a9 01 LDA lives 1707 c5ef 38 SEC 1708 c5f0 e9 01 SBC #1 1709 c5f2 8d a9 01 STA lives 1710 c5f5 4c 13 d8 jmp .lose_a_life 1711 c5f8 1712 c5f8 .skipL0129 1713 c5f8 .L0130 ;; if boxcollision ( playerX , playerY , 8 , 16 , power_upX , power_upY , 8 , 8 ) then power_upX = 208 : power_upY = 208 : playerFlag = 1 1714 c5f8 1715 c5f8 1716 c5f8 18 clc ; one clc only. If we overflow we're screwed anyway. 1717 c5f9 ad 42 01 lda playerY 1718 c5fc 69 20 adc #((256-WSCREENHEIGHT)/2) 1719 c5fe a8 tay 1720 c5ff a9 07 lda #(8-1) 1721 c601 85 44 sta temp3 1722 c603 a9 0f lda #(16-1) 1723 c605 85 45 sta temp4 1724 c607 ad 50 01 lda power_upX 1725 c60a 69 30 adc #48 1726 c60c 85 46 sta temp5 1727 c60e ad 51 01 lda power_upY 1728 c611 69 20 adc #((256-WSCREENHEIGHT)/2) 1729 c613 85 47 sta temp6 1730 c615 a9 07 lda #(8-1) 1731 c617 85 48 sta temp7 1732 c619 a9 07 lda #(8-1) 1733 c61b 85 49 sta temp8 1734 c61d ad 41 01 lda playerX 1735 c620 69 30 adc #48 1736 c622 20 ca f3 jsr boxcollision 1737 c625 1738 c625 90 0d BCC .skipL0130 1739 c627 .condpart37 1740 c627 a9 d0 LDA #208 1741 c629 8d 50 01 STA power_upX 1742 c62c 8d 51 01 STA power_upY 1743 c62f a9 01 LDA #1 1744 c631 8d 4d 01 STA playerFlag 1745 c634 .skipL0130 1746 c634 .L0131 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy01_X , enemy01_Y , 8 , 16 ) then enemy01_X = 200 : enemy01_Y = 200 : playerFlag = 1 : lives = lives - 1 : goto lose_a_life 1747 c634 1748 c634 1749 c634 18 clc ; one clc only. If we overflow we're screwed anyway. 1750 c635 ad 42 01 lda playerY 1751 c638 69 20 adc #((256-WSCREENHEIGHT)/2) 1752 c63a a8 tay 1753 c63b a9 07 lda #(8-1) 1754 c63d 85 44 sta temp3 1755 c63f a9 0f lda #(16-1) 1756 c641 85 45 sta temp4 1757 c643 ad 57 01 lda enemy01_X 1758 c646 69 30 adc #48 1759 c648 85 46 sta temp5 1760 c64a ad 58 01 lda enemy01_Y 1761 c64d 69 20 adc #((256-WSCREENHEIGHT)/2) 1762 c64f 85 47 sta temp6 1763 c651 a9 07 lda #(8-1) 1764 c653 85 48 sta temp7 1765 c655 a9 0f lda #(16-1) 1766 c657 85 49 sta temp8 1767 c659 ad 41 01 lda playerX 1768 c65c 69 30 adc #48 1769 c65e 20 ca f3 jsr boxcollision 1770 c661 1771 c661 90 19 BCC .skipL0131 1772 c663 .condpart38 1773 c663 a9 c8 LDA #200 1774 c665 8d 57 01 STA enemy01_X 1775 c668 8d 58 01 STA enemy01_Y 1776 c66b a9 01 LDA #1 1777 c66d 8d 4d 01 STA playerFlag 1778 c670 ad a9 01 LDA lives 1779 c673 38 SEC 1780 c674 e9 01 SBC #1 1781 c676 8d a9 01 STA lives 1782 c679 4c 13 d8 jmp .lose_a_life 1783 c67c 1784 c67c .skipL0131 1785 c67c .L0132 ;; 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 1786 c67c 1787 c67c 1788 c67c 18 clc ; one clc only. If we overflow we're screwed anyway. 1789 c67d ad 42 01 lda playerY 1790 c680 69 20 adc #((256-WSCREENHEIGHT)/2) 1791 c682 a8 tay 1792 c683 a9 07 lda #(8-1) 1793 c685 85 44 sta temp3 1794 c687 a9 0f lda #(16-1) 1795 c689 85 45 sta temp4 1796 c68b ad 60 01 lda extra_shipX 1797 c68e 69 30 adc #48 1798 c690 85 46 sta temp5 1799 c692 ad 61 01 lda extra_shipY 1800 c695 69 20 adc #((256-WSCREENHEIGHT)/2) 1801 c697 85 47 sta temp6 1802 c699 a9 07 lda #(8-1) 1803 c69b 85 48 sta temp7 1804 c69d a9 07 lda #(8-1) 1805 c69f 85 49 sta temp8 1806 c6a1 ad 41 01 lda playerX 1807 c6a4 69 30 adc #48 1808 c6a6 20 ca f3 jsr boxcollision 1809 c6a9 1810 c6a9 90 16 BCC .skipL0132 1811 c6ab .condpart39 1812 c6ab a9 c8 LDA #200 1813 c6ad 8d 60 01 STA extra_shipX 1814 c6b0 8d 61 01 STA extra_shipY 1815 c6b3 a9 01 LDA #1 1816 c6b5 8d 62 01 STA extra_shipFlag 1817 c6b8 ad a9 01 LDA lives 1818 c6bb 18 CLC 1819 c6bc 69 01 ADC #1 1820 c6be 8d a9 01 STA lives 1821 c6c1 .skipL0132 1822 c6c1 . 1823 c6c1 ;; 1824 c6c1 1825 c6c1 . 1826 c6c1 ;; 1827 c6c1 1828 c6c1 .L0133 ;; if bulletX > enemy01_X && bulletX < ( enemy01_X + 16 ) && bulletY > enemy01_Y && bulletY < ( enemy01_Y + 16 ) then enemy01_Flag = 1 : score0 = score0 + 1 1829 c6c1 1830 c6c1 ad 57 01 LDA enemy01_X 1831 c6c4 cd 48 01 CMP bulletX 1832 c6c7 b0 4a BCS .skipL0133 1833 c6c9 .condpart40 1834 c6c9 ; complex condition detected 1835 c6c9 ; complex statement detected 1836 c6c9 ad 57 01 LDA enemy01_X 1837 c6cc 18 CLC 1838 c6cd 69 10 ADC #16 1839 c6cf 48 PHA 1840 c6d0 ba TSX 1841 c6d1 68 PLA 1842 c6d2 ad 48 01 LDA bulletX 1843 c6d5 dd 01 01 CMP $101,x 1844 c6d8 b0 39 BCS .skip40then 1845 c6da .condpart41 1846 c6da ad 58 01 LDA enemy01_Y 1847 c6dd cd 49 01 CMP bulletY 1848 c6e0 b0 31 BCS .skip41then 1849 c6e2 .condpart42 1850 c6e2 ; complex condition detected 1851 c6e2 ; complex statement detected 1852 c6e2 ad 58 01 LDA enemy01_Y 1853 c6e5 18 CLC 1854 c6e6 69 10 ADC #16 1855 c6e8 48 PHA 1856 c6e9 ba TSX 1857 c6ea 68 PLA 1858 c6eb ad 49 01 LDA bulletY 1859 c6ee dd 01 01 CMP $101,x 1860 c6f1 b0 20 BCS .skip42then 1861 c6f3 .condpart43 1862 c6f3 a9 01 LDA #1 1863 c6f5 8d 59 01 STA enemy01_Flag 1864 c6f8 f8 SED 1865 c6f9 18 CLC 1866 c6fa ad a8 01 LDA score0+2 1867 c6fd 69 01 ADC #$01 1868 c6ff 8d a8 01 STA score0+2 1869 c702 ad a7 01 LDA score0+1 1870 c705 69 00 ADC #$00 1871 c707 8d a7 01 STA score0+1 1872 c70a ad a6 01 LDA score0 1873 c70d 69 00 ADC #$00 1874 c70f 8d a6 01 STA score0 1875 c712 d8 CLD 1876 c713 .skip42then 1877 c713 .skip41then 1878 c713 .skip40then 1879 c713 .skipL0133 1880 c713 . 1881 c713 ;; 1882 c713 1883 c713 .L0134 ;; if enemy_shotX > 160 then enemy_shotX = enemy_shotX - 1 1884 c713 1885 c713 a9 a0 LDA #160 1886 c715 cd 4a 01 CMP enemy_shotX 1887 c718 b0 09 BCS .skipL0134 1888 c71a .condpart44 1889 c71a ad 4a 01 LDA enemy_shotX 1890 c71d 38 SEC 1891 c71e e9 01 SBC #1 1892 c720 8d 4a 01 STA enemy_shotX 1893 c723 .skipL0134 1894 c723 .L0135 ;; if enemy_shotX < 1 then enemy_shotX = enemy_shotX + 1 1895 c723 1896 c723 ad 4a 01 LDA enemy_shotX 1897 c726 c9 01 CMP #1 1898 c728 b0 09 BCS .skipL0135 1899 c72a .condpart45 1900 c72a ad 4a 01 LDA enemy_shotX 1901 c72d 18 CLC 1902 c72e 69 01 ADC #1 1903 c730 8d 4a 01 STA enemy_shotX 1904 c733 .skipL0135 1905 c733 .L0136 ;; if enemy_shotY > 191 then enemy_shotY = enemy_shotY - 1 1906 c733 1907 c733 a9 bf LDA #191 1908 c735 cd 4b 01 CMP enemy_shotY 1909 c738 b0 09 BCS .skipL0136 1910 c73a .condpart46 1911 c73a ad 4b 01 LDA enemy_shotY 1912 c73d 38 SEC 1913 c73e e9 01 SBC #1 1914 c740 8d 4b 01 STA enemy_shotY 1915 c743 .skipL0136 1916 c743 .L0137 ;; if enemy_shotY < 1 then enemy_shotY = enemy_shotY + 1 1917 c743 1918 c743 ad 4b 01 LDA enemy_shotY 1919 c746 c9 01 CMP #1 1920 c748 b0 09 BCS .skipL0137 1921 c74a .condpart47 1922 c74a ad 4b 01 LDA enemy_shotY 1923 c74d 18 CLC 1924 c74e 69 01 ADC #1 1925 c750 8d 4b 01 STA enemy_shotY 1926 c753 .skipL0137 1927 c753 .L0138 ;; if power_upX > 155 then power_upX = power_upX - 5 1928 c753 1929 c753 a9 9b LDA #155 1930 c755 cd 50 01 CMP power_upX 1931 c758 b0 09 BCS .skipL0138 1932 c75a .condpart48 1933 c75a ad 50 01 LDA power_upX 1934 c75d 38 SEC 1935 c75e e9 05 SBC #5 1936 c760 8d 50 01 STA power_upX 1937 c763 .skipL0138 1938 c763 .L0139 ;; if power_upX < 1 then power_upX = power_upX + 5 1939 c763 1940 c763 ad 50 01 LDA power_upX 1941 c766 c9 01 CMP #1 1942 c768 b0 09 BCS .skipL0139 1943 c76a .condpart49 1944 c76a ad 50 01 LDA power_upX 1945 c76d 18 CLC 1946 c76e 69 05 ADC #5 1947 c770 8d 50 01 STA power_upX 1948 c773 .skipL0139 1949 c773 .L0140 ;; if power_upY > 191 then power_upY = power_upY - 5 1950 c773 1951 c773 a9 bf LDA #191 1952 c775 cd 51 01 CMP power_upY 1953 c778 b0 09 BCS .skipL0140 1954 c77a .condpart50 1955 c77a ad 51 01 LDA power_upY 1956 c77d 38 SEC 1957 c77e e9 05 SBC #5 1958 c780 8d 51 01 STA power_upY 1959 c783 .skipL0140 1960 c783 .L0141 ;; if power_upY < 1 then power_upY = power_upY + 5 1961 c783 1962 c783 ad 51 01 LDA power_upY 1963 c786 c9 01 CMP #1 1964 c788 b0 09 BCS .skipL0141 1965 c78a .condpart51 1966 c78a ad 51 01 LDA power_upY 1967 c78d 18 CLC 1968 c78e 69 05 ADC #5 1969 c790 8d 51 01 STA power_upY 1970 c793 .skipL0141 1971 c793 .L0142 ;; if enemy01_X > 160 then enemy01_X = enemy01_X - 1 1972 c793 1973 c793 a9 a0 LDA #160 1974 c795 cd 57 01 CMP enemy01_X 1975 c798 b0 09 BCS .skipL0142 1976 c79a .condpart52 1977 c79a ad 57 01 LDA enemy01_X 1978 c79d 38 SEC 1979 c79e e9 01 SBC #1 1980 c7a0 8d 57 01 STA enemy01_X 1981 c7a3 .skipL0142 1982 c7a3 .L0143 ;; if enemy01_X < 1 then enemy01_X = enemy01_X + 1 1983 c7a3 1984 c7a3 ad 57 01 LDA enemy01_X 1985 c7a6 c9 01 CMP #1 1986 c7a8 b0 09 BCS .skipL0143 1987 c7aa .condpart53 1988 c7aa ad 57 01 LDA enemy01_X 1989 c7ad 18 CLC 1990 c7ae 69 01 ADC #1 1991 c7b0 8d 57 01 STA enemy01_X 1992 c7b3 .skipL0143 1993 c7b3 .L0144 ;; if enemy01_Y > 220 then enemy01_Y = enemy01_Y - 1 1994 c7b3 1995 c7b3 a9 dc LDA #220 1996 c7b5 cd 58 01 CMP enemy01_Y 1997 c7b8 b0 09 BCS .skipL0144 1998 c7ba .condpart54 1999 c7ba ad 58 01 LDA enemy01_Y 2000 c7bd 38 SEC 2001 c7be e9 01 SBC #1 2002 c7c0 8d 58 01 STA enemy01_Y 2003 c7c3 .skipL0144 2004 c7c3 .L0145 ;; if enemy01_Y < - 16 then enemy01_Y = enemy01_Y + 1 2005 c7c3 2006 c7c3 ; complex condition detected 2007 c7c3 a9 f0 LDA #240 2008 c7c5 48 PHA 2009 c7c6 ba TSX 2010 c7c7 68 PLA 2011 c7c8 ad 58 01 LDA enemy01_Y 2012 c7cb dd 01 01 CMP $101,x 2013 c7ce b0 09 BCS .skipL0145 2014 c7d0 .condpart55 2015 c7d0 ad 58 01 LDA enemy01_Y 2016 c7d3 18 CLC 2017 c7d4 69 01 ADC #1 2018 c7d6 8d 58 01 STA enemy01_Y 2019 c7d9 .skipL0145 2020 c7d9 .L0146 ;; if extra_shipX > 160 then extra_shipX = extra_shipX - 1 2021 c7d9 2022 c7d9 a9 a0 LDA #160 2023 c7db cd 60 01 CMP extra_shipX 2024 c7de b0 09 BCS .skipL0146 2025 c7e0 .condpart56 2026 c7e0 ad 60 01 LDA extra_shipX 2027 c7e3 38 SEC 2028 c7e4 e9 01 SBC #1 2029 c7e6 8d 60 01 STA extra_shipX 2030 c7e9 .skipL0146 2031 c7e9 .L0147 ;; if extra_shipX < 1 then extra_shipX = extra_shipX + 1 2032 c7e9 2033 c7e9 ad 60 01 LDA extra_shipX 2034 c7ec c9 01 CMP #1 2035 c7ee b0 09 BCS .skipL0147 2036 c7f0 .condpart57 2037 c7f0 ad 60 01 LDA extra_shipX 2038 c7f3 18 CLC 2039 c7f4 69 01 ADC #1 2040 c7f6 8d 60 01 STA extra_shipX 2041 c7f9 .skipL0147 2042 c7f9 .L0148 ;; if extra_shipY > 191 then extra_shipY = extra_shipY - 1 2043 c7f9 2044 c7f9 a9 bf LDA #191 2045 c7fb cd 61 01 CMP extra_shipY 2046 c7fe b0 09 BCS .skipL0148 2047 c800 .condpart58 2048 c800 ad 61 01 LDA extra_shipY 2049 c803 38 SEC 2050 c804 e9 01 SBC #1 2051 c806 8d 61 01 STA extra_shipY 2052 c809 .skipL0148 2053 c809 .L0149 ;; if extra_shipY < 1 then extra_shipY = extra_shipY + 1 2054 c809 2055 c809 ad 61 01 LDA extra_shipY 2056 c80c c9 01 CMP #1 2057 c80e b0 09 BCS .skipL0149 2058 c810 .condpart59 2059 c810 ad 61 01 LDA extra_shipY 2060 c813 18 CLC 2061 c814 69 01 ADC #1 2062 c816 8d 61 01 STA extra_shipY 2063 c819 .skipL0149 2064 c819 . 2065 c819 ;; 2066 c819 2067 c819 .L0150 ;; if rDirection = 0 then enemy_shotX = enemy_shotX + rMovement1 : enemy_shotY = enemy_shotY + rMovement2 2068 c819 2069 c819 ad 4f 01 LDA rDirection 2070 c81c c9 00 CMP #0 2071 c81e d0 14 BNE .skipL0150 2072 c820 .condpart60 2073 c820 ad 4a 01 LDA enemy_shotX 2074 c823 18 CLC 2075 c824 6d 4e 01 ADC rMovement1 2076 c827 8d 4a 01 STA enemy_shotX 2077 c82a ad 4b 01 LDA enemy_shotY 2078 c82d 18 CLC 2079 c82e 6d 53 01 ADC rMovement2 2080 c831 8d 4b 01 STA enemy_shotY 2081 c834 .skipL0150 2082 c834 .L0151 ;; if rDirection = 1 then enemy_shotX = enemy_shotX + rMovement3 : enemy_shotY = enemy_shotY + rMovement4 2083 c834 2084 c834 ad 4f 01 LDA rDirection 2085 c837 c9 01 CMP #1 2086 c839 d0 14 BNE .skipL0151 2087 c83b .condpart61 2088 c83b ad 4a 01 LDA enemy_shotX 2089 c83e 18 CLC 2090 c83f 6d 5a 01 ADC rMovement3 2091 c842 8d 4a 01 STA enemy_shotX 2092 c845 ad 4b 01 LDA enemy_shotY 2093 c848 18 CLC 2094 c849 6d 5b 01 ADC rMovement4 2095 c84c 8d 4b 01 STA enemy_shotY 2096 c84f .skipL0151 2097 c84f .L0152 ;; if rDirection = 2 then enemy_shotX = enemy_shotX + rMovement5 : enemy_shotY = enemy_shotY + rMovement6 2098 c84f 2099 c84f ad 4f 01 LDA rDirection 2100 c852 c9 02 CMP #2 2101 c854 d0 14 BNE .skipL0152 2102 c856 .condpart62 2103 c856 ad 4a 01 LDA enemy_shotX 2104 c859 18 CLC 2105 c85a 6d 5c 01 ADC rMovement5 2106 c85d 8d 4a 01 STA enemy_shotX 2107 c860 ad 4b 01 LDA enemy_shotY 2108 c863 18 CLC 2109 c864 6d 5d 01 ADC rMovement6 2110 c867 8d 4b 01 STA enemy_shotY 2111 c86a .skipL0152 2112 c86a .L0153 ;; if rDirection = 3 then enemy_shotX = enemy_shotX + rMovement4 : enemy_shotY = enemy_shotY + rMovement2 2113 c86a 2114 c86a ad 4f 01 LDA rDirection 2115 c86d c9 03 CMP #3 2116 c86f d0 14 BNE .skipL0153 2117 c871 .condpart63 2118 c871 ad 4a 01 LDA enemy_shotX 2119 c874 18 CLC 2120 c875 6d 5b 01 ADC rMovement4 2121 c878 8d 4a 01 STA enemy_shotX 2122 c87b ad 4b 01 LDA enemy_shotY 2123 c87e 18 CLC 2124 c87f 6d 53 01 ADC rMovement2 2125 c882 8d 4b 01 STA enemy_shotY 2126 c885 .skipL0153 2127 c885 . 2128 c885 ;; 2129 c885 2130 c885 .L0154 ;; if rDirection = 0 then power_upX = power_upX + rMovement5 : power_upY = power_upY + rMovement2 2131 c885 2132 c885 ad 4f 01 LDA rDirection 2133 c888 c9 00 CMP #0 2134 c88a d0 14 BNE .skipL0154 2135 c88c .condpart64 2136 c88c ad 50 01 LDA power_upX 2137 c88f 18 CLC 2138 c890 6d 5c 01 ADC rMovement5 2139 c893 8d 50 01 STA power_upX 2140 c896 ad 51 01 LDA power_upY 2141 c899 18 CLC 2142 c89a 6d 53 01 ADC rMovement2 2143 c89d 8d 51 01 STA power_upY 2144 c8a0 .skipL0154 2145 c8a0 .L0155 ;; if rDirection = 1 then power_upX = power_upX + rMovement3 : power_upY = power_upY + rMovement4 2146 c8a0 2147 c8a0 ad 4f 01 LDA rDirection 2148 c8a3 c9 01 CMP #1 2149 c8a5 d0 14 BNE .skipL0155 2150 c8a7 .condpart65 2151 c8a7 ad 50 01 LDA power_upX 2152 c8aa 18 CLC 2153 c8ab 6d 5a 01 ADC rMovement3 2154 c8ae 8d 50 01 STA power_upX 2155 c8b1 ad 51 01 LDA power_upY 2156 c8b4 18 CLC 2157 c8b5 6d 5b 01 ADC rMovement4 2158 c8b8 8d 51 01 STA power_upY 2159 c8bb .skipL0155 2160 c8bb .L0156 ;; if rDirection = 2 then power_upX = power_upX + rMovement1 : power_upY = power_upY + rMovement6 2161 c8bb 2162 c8bb ad 4f 01 LDA rDirection 2163 c8be c9 02 CMP #2 2164 c8c0 d0 14 BNE .skipL0156 2165 c8c2 .condpart66 2166 c8c2 ad 50 01 LDA power_upX 2167 c8c5 18 CLC 2168 c8c6 6d 4e 01 ADC rMovement1 2169 c8c9 8d 50 01 STA power_upX 2170 c8cc ad 51 01 LDA power_upY 2171 c8cf 18 CLC 2172 c8d0 6d 5d 01 ADC rMovement6 2173 c8d3 8d 51 01 STA power_upY 2174 c8d6 .skipL0156 2175 c8d6 . 2176 c8d6 ;; 2177 c8d6 2178 c8d6 .L0157 ;; if rDirection = 0 then enemy01_X = enemy01_X + rMovement4 : enemy01_Y = enemy01_Y + rMovement2 2179 c8d6 2180 c8d6 ad 4f 01 LDA rDirection 2181 c8d9 c9 00 CMP #0 2182 c8db d0 14 BNE .skipL0157 2183 c8dd .condpart67 2184 c8dd ad 57 01 LDA enemy01_X 2185 c8e0 18 CLC 2186 c8e1 6d 5b 01 ADC rMovement4 2187 c8e4 8d 57 01 STA enemy01_X 2188 c8e7 ad 58 01 LDA enemy01_Y 2189 c8ea 18 CLC 2190 c8eb 6d 53 01 ADC rMovement2 2191 c8ee 8d 58 01 STA enemy01_Y 2192 c8f1 .skipL0157 2193 c8f1 .L0158 ;; if rDirection = 1 then enemy01_X = enemy01_X + rMovement3 : enemy01_Y = enemy01_Y + rMovement4 2194 c8f1 2195 c8f1 ad 4f 01 LDA rDirection 2196 c8f4 c9 01 CMP #1 2197 c8f6 d0 14 BNE .skipL0158 2198 c8f8 .condpart68 2199 c8f8 ad 57 01 LDA enemy01_X 2200 c8fb 18 CLC 2201 c8fc 6d 5a 01 ADC rMovement3 2202 c8ff 8d 57 01 STA enemy01_X 2203 c902 ad 58 01 LDA enemy01_Y 2204 c905 18 CLC 2205 c906 6d 5b 01 ADC rMovement4 2206 c909 8d 58 01 STA enemy01_Y 2207 c90c .skipL0158 2208 c90c .L0159 ;; if rDirection = 2 then enemy01_X = enemy01_X + rMovement6 : enemy01_Y = enemy01_Y + rMovement6 2209 c90c 2210 c90c ad 4f 01 LDA rDirection 2211 c90f c9 02 CMP #2 2212 c911 d0 14 BNE .skipL0159 2213 c913 .condpart69 2214 c913 ad 57 01 LDA enemy01_X 2215 c916 18 CLC 2216 c917 6d 5d 01 ADC rMovement6 2217 c91a 8d 57 01 STA enemy01_X 2218 c91d ad 58 01 LDA enemy01_Y 2219 c920 18 CLC 2220 c921 6d 5d 01 ADC rMovement6 2221 c924 8d 58 01 STA enemy01_Y 2222 c927 .skipL0159 2223 c927 . 2224 c927 ;; 2225 c927 2226 c927 .L0160 ;; if rDirection = 0 then extra_shipX = extra_shipX + rMovement5 : extra_shipY = extra_shipY + rMovement2 2227 c927 2228 c927 ad 4f 01 LDA rDirection 2229 c92a c9 00 CMP #0 2230 c92c d0 14 BNE .skipL0160 2231 c92e .condpart70 2232 c92e ad 60 01 LDA extra_shipX 2233 c931 18 CLC 2234 c932 6d 5c 01 ADC rMovement5 2235 c935 8d 60 01 STA extra_shipX 2236 c938 ad 61 01 LDA extra_shipY 2237 c93b 18 CLC 2238 c93c 6d 53 01 ADC rMovement2 2239 c93f 8d 61 01 STA extra_shipY 2240 c942 .skipL0160 2241 c942 . 2242 c942 ;; 2243 c942 2244 c942 .L0161 ;; goto mainloop 2245 c942 2246 c942 4c d7 c1 jmp .mainloop 2247 c945 2248 c945 .L0162 ;; dmahole 0 2249 c945 2250 c945 4c 00 d8 jmp dmahole_0 2251 c948 gameend 2252 c948 DMAHOLEEND0 SET . 1720 bytes of ROM space left in the main area. 2253 c948 echo " ",[($D000 - gameend)]d , "bytes of ROM space left in the main area." 2254 c948 - if ($D000 - gameend) < 0 2255 c948 -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 2256 c948 endif 2257 c948 2258 d000 ORG $D000,0 ; ************* 2259 d000 2260 d000 atascii 2261 d000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2262 d020 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2263 d040 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000300000000000000 2264 d060 00 00 00 00* HEX 0000000000000000000000000000000000000000000003000000000000000000 2265 d080 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2266 d0a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2267 d0c0 00 00 00 00* HEX 0000000000000000000000000000070c00000000030c00000000000000000000 2268 d0e0 06 00 00 06* HEX 06000006000000000000000000000000000007080000 2269 d0f6 vertical_shooting_ship 2270 d0f6 07 d0 HEX 07d0 2271 d0f8 vertical_shooting_ship_tallsprite_00 2272 d0f8 80 02 HEX 8002 2273 d0fa vertical_shooting_bullet 2274 d0fa 28 HEX 28 2275 d0fb vertical_shooting_enemyshot 2276 d0fb 00 HEX 00 2277 d0fc vertical_shooting_powerup 2278 d0fc 28 00 HEX 2800 2279 d0fe 2280 d100 ORG $D100,0 ; ************* 2281 d100 2282 d100 ;atascii 2283 d100 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2284 d120 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2285 d140 00 00 01 08* HEX 000001080000060601080406030b0000000e0700000000000108000001080400 2286 d160 03 0c 07 0e* HEX 030c070e070e030c000c030c030c0300030c0308010801080006000006000108 2287 d180 03 0e 06 06* HEX 030e0606070c030c0708070e0600030e0606070e030c0606070e06030606030c 2288 d1a0 06 00 03 06* HEX 060003060606030c0108070e0108060306060108070e010e0006070800000f0f 2289 d1c0 00 00 03 0e* HEX 0000030e070c030c030e030c010800060606030c00060606030c06030606030c 2290 d1e0 06 00 00 06* HEX 060000060600070c000e030e010803060606000c070e 2291 d1f6 ;vertical_shooting_ship 2292 d1f6 07 d0 HEX 07d0 2293 d1f8 ;vertical_shooting_ship_tallsprite_00 2294 d1f8 80 02 HEX 8002 2295 d1fa ;vertical_shooting_bullet 2296 d1fa 28 HEX 28 2297 d1fb ;vertical_shooting_enemyshot 2298 d1fb 88 HEX 88 2299 d1fc ;vertical_shooting_powerup 2300 d1fc 78 08 HEX 7808 2301 d1fe 2302 d200 ORG $D200,0 ; ************* 2303 d200 2304 d200 ;atascii 2305 d200 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2306 d220 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2307 d240 00 00 00 00* HEX 0000000000000f0f070c060606060000010c0308060601080108000001080600 2308 d260 06 06 01 08* HEX 0606010803000606070e0606060603000606000c01080108000c070e03000000 2309 d280 06 00 07 0e* HEX 0600070e06060606060c060006000606060601080606060c06000603060e0606 2310 d2a0 06 00 06 0c* HEX 0600060c060c000601080606030c07070606010806000108000c010800000000 2311 d2c0 00 00 06 06* HEX 0000060606060600060606000108030e060601080006060c0108060b06060606 2312 d2e0 07 0c 03 0e* HEX 070c030e0600000601080606030c030e030c030e0300 2313 d2f6 ;vertical_shooting_ship 2314 d2f6 03 c0 HEX 03c0 2315 d2f8 ;vertical_shooting_ship_tallsprite_00 2316 d2f8 a1 4a HEX a14a 2317 d2fa ;vertical_shooting_bullet 2318 d2fa 3c HEX 3c 2319 d2fb ;vertical_shooting_enemyshot 2320 d2fb 10 HEX 10 2321 d2fc ;vertical_shooting_powerup 2322 d2fc 78 1e HEX 781e 2323 d2fe 2324 d300 ORG $D300,0 ; ************* 2325 d300 2326 d300 ;atascii 2327 d300 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2328 d320 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2329 d340 00 00 01 08* HEX 000001080000060600060300060f000001080108030c01080000000000000300 2330 d360 07 06 01 08* HEX 070601080108000c060c00060606010806060006000000000108000001080108 2331 d380 06 0e 06 06* HEX 060e060606060600060606000600060e06060108000607080600060b070e0606 2332 d3a0 07 0c 06 06* HEX 070c0606070c0006010806060606070f030c0108030001080108010806030000 2333 d3c0 00 00 03 0e* HEX 0000030e060606000606070e0108060606060108000607080108070f06060606 2334 d3e0 06 06 06 06* HEX 060606060600030c010806060606070f010806060108 2335 d3f6 ;vertical_shooting_ship 2336 d3f6 01 40 HEX 0140 2337 d3f8 ;vertical_shooting_ship_tallsprite_00 2338 d3f8 a5 5a HEX a55a 2339 d3fa ;vertical_shooting_bullet 2340 d3fa 3c HEX 3c 2341 d3fb ;vertical_shooting_enemyshot 2342 d3fb 74 HEX 74 2343 d3fc ;vertical_shooting_powerup 2344 d3fc 7a a4 HEX 7aa4 2345 d3fe 2346 d400 ORG $D400,0 ; ************* 2347 d400 2348 d400 ;atascii 2349 d400 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2350 d420 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2351 d440 00 00 01 08* HEX 0000010806060606030c010803080108010801080f0f070e0000070e00000108 2352 d460 06 0e 01 08* HEX 060e0108000c0108030c070c070c000c030c030e0108010803000000000c000c 2353 d480 06 0e 06 06* HEX 060e0606070c06000606070c070c0600070e0108000607080600070f070e0606 2354 d4a0 06 06 06 06* HEX 060606060606030c010806060606060b030c030c010801080300010803060000 2355 d4c0 01 08 00 06* HEX 01080006070c0600030e0606030e0606070c03080006060c0108070f06060606 2356 d4e0 06 06 06 06* HEX 0606060606060600010806060606060b030c0606000c 2357 d4f6 ;vertical_shooting_ship 2358 d4f6 01 40 HEX 0140 2359 d4f8 ;vertical_shooting_ship_tallsprite_00 2360 d4f8 a5 5a HEX a55a 2361 d4fa ;vertical_shooting_bullet 2362 d4fa 14 HEX 14 2363 d4fb ;vertical_shooting_enemyshot 2364 d4fb 74 HEX 74 2365 d4fc ;vertical_shooting_powerup 2366 d4fc 75 7a HEX 757a 2367 d4fe 2368 d500 ORG $D500,0 ; ************* 2369 d500 2370 d500 ;atascii 2371 d500 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2372 d520 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2373 d540 00 00 01 08* HEX 0000010806060f0f0600060c010c0108010c0308030c0108000000000000000c 2374 d560 06 06 03 08* HEX 060603080606000c010c06000600000606060606010801080108070e01080606 2375 d580 06 06 03 0c* HEX 0606030c06060606060c060006000600060601080006060c0600070707060606 2376 d5a0 06 06 06 06* HEX 0606060606060600010806060606060306060606000c010806000108010c0000 2377 d5c0 01 08 03 0c* HEX 0108030c0600030c0006030c0108030e060000000000060001080606070c030c 2378 d5e0 07 0c 03 0e* HEX 070c030e070c030e070e06060606060306060606070e 2379 d5f6 ;vertical_shooting_ship 2380 d5f6 01 40 HEX 0140 2381 d5f8 ;vertical_shooting_ship_tallsprite_00 2382 d5f8 a5 5a HEX a55a 2383 d5fa ;vertical_shooting_bullet 2384 d5fa 14 HEX 14 2385 d5fb ;vertical_shooting_enemyshot 2386 d5fb 74 HEX 74 2387 d5fc ;vertical_shooting_powerup 2388 d5fc 78 1e HEX 781e 2389 d5fe 2390 d600 ORG $D600,0 ; ************* 2391 d600 2392 d600 ;atascii 2393 d600 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2394 d620 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2395 d640 00 00 01 08* HEX 0000010806060606030e060603060108000e0700060601080000000000000006 2396 d660 03 0c 01 08* HEX 030c0108030c070e000c070e030c070e030c030c00000000000c00000300030c 2397 d680 03 0c 01 08* HEX 030c0108070c030c0708070e070e030e0606070e00060606060006030606030c 2398 d6a0 07 0c 03 0c* HEX 070c030c070c030c070e06060606060306060606070e010e0400070800080000 2399 d6c0 01 08 00 00* HEX 010800000600000000060000000e000006000108000606000308000000000000 2400 d6e0 00 00 00 00* HEX 00000000000000000108000000000000000000000000 2401 d6f6 ;vertical_shooting_ship 2402 d6f6 01 40 HEX 0140 2403 d6f8 ;vertical_shooting_ship_tallsprite_00 2404 d6f8 a7 da HEX a7da 2405 d6fa ;vertical_shooting_bullet 2406 d6fa 14 HEX 14 2407 d6fb ;vertical_shooting_enemyshot 2408 d6fb 10 HEX 10 2409 d6fc ;vertical_shooting_powerup 2410 d6fc 7a bc HEX 7abc 2411 d6fe 2412 d700 ORG $D700,0 ; ************* 2413 d700 2414 d700 ;atascii 2415 d700 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2416 d720 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2417 d740 00 00 00 00* HEX 000000000000000001080000010c000000000000000000000000000000000000 2418 d760 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000006000006000000 2419 d780 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2420 d7a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2421 d7c0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2422 d7e0 00 00 00 00* HEX 00000000000000000000000000000000000000000000 2423 d7f6 ;vertical_shooting_ship 2424 d7f6 01 40 HEX 0140 2425 d7f8 ;vertical_shooting_ship_tallsprite_00 2426 d7f8 27 d8 HEX 27d8 2427 d7fa ;vertical_shooting_bullet 2428 d7fa 00 HEX 00 2429 d7fb ;vertical_shooting_enemyshot 2430 d7fb 88 HEX 88 2431 d7fc ;vertical_shooting_powerup 2432 d7fc 55 50 HEX 5550 2433 d7fe 2434 d800 ORG $D800,0 ; ************* 2435 d800 dmahole_0 2436 d800 DMAHOLESTART0 SET . 2437 d800 . 2438 d800 ;; 2439 d800 2440 d800 .SetBulletHome 2441 d800 ;; SetBulletHome 2442 d800 2443 d800 .L0163 ;; bulletX = playerX + 4 : bulletY = playerY - 2 2444 d800 2445 d800 ad 41 01 LDA playerX 2446 d803 18 CLC 2447 d804 69 04 ADC #4 2448 d806 8d 48 01 STA bulletX 2449 d809 ad 42 01 LDA playerY 2450 d80c 38 SEC 2451 d80d e9 02 SBC #2 2452 d80f 8d 49 01 STA bulletY 2453 d812 .L0164 ;; return 2454 d812 2455 d812 60 RTS 2456 d813 . 2457 d813 ;; 2458 d813 2459 d813 .lose_a_life 2460 d813 ;; lose_a_life 2461 d813 2462 d813 .L0165 ;; lives = lives - 1 2463 d813 2464 d813 ad a9 01 LDA lives 2465 d816 38 SEC 2466 d817 e9 01 SBC #1 2467 d819 8d a9 01 STA lives 2468 d81c .L0166 ;; if enemy01_Flag <> 1 then enemy01_X = 32 : enemy01_Y = 0 2469 d81c 2470 d81c ad 59 01 LDA enemy01_Flag 2471 d81f c9 01 CMP #1 2472 d821 f0 0a BEQ .skipL0166 2473 d823 .condpart71 2474 d823 a9 20 LDA #32 2475 d825 8d 57 01 STA enemy01_X 2476 d828 a9 00 LDA #0 2477 d82a 8d 58 01 STA enemy01_Y 2478 d82d .skipL0166 2479 d82d .L0167 ;; if enemy_shotFlag <> 1 then enemy_shotX = 0 : enemy_shotY = 0 2480 d82d 2481 d82d ad 4c 01 LDA enemy_shotFlag 2482 d830 c9 01 CMP #1 2483 d832 f0 08 BEQ .skipL0167 2484 d834 .condpart72 2485 d834 a9 00 LDA #0 2486 d836 8d 4a 01 STA enemy_shotX 2487 d839 8d 4b 01 STA enemy_shotY 2488 d83c .skipL0167 2489 d83c .L0168 ;; playerX = 80 : playerY = 144 2490 d83c 2491 d83c a9 50 LDA #80 2492 d83e 8d 41 01 STA playerX 2493 d841 a9 90 LDA #144 2494 d843 8d 42 01 STA playerY 2495 d846 .L0169 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 2496 d846 2497 d846 a9 00 LDA #0 2498 d848 8d 44 01 STA joyposup 2499 d84b 8d 45 01 STA joyposdown 2500 d84e 8d 46 01 STA joyposleft 2501 d851 8d 47 01 STA joyposright 2502 d854 .L0170 ;; fire_debounce = 0 : bulletX = 0 : bulletY = 0 2503 d854 2504 d854 a9 00 LDA #0 2505 d856 8d 43 01 STA fire_debounce 2506 d859 8d 48 01 STA bulletX 2507 d85c 8d 49 01 STA bulletY 2508 d85f .L0171 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 2509 d85f 2510 d85f a9 00 LDA #0 2511 d861 8d 57 01 STA enemy01_X 2512 d864 8d 58 01 STA enemy01_Y 2513 d867 8d 59 01 STA enemy01_Flag 2514 d86a .L0172 ;; playerFlag = 0 : gameover_flag = 0 2515 d86a 2516 d86a a9 00 LDA #0 2517 d86c 8d 4d 01 STA playerFlag 2518 d86f 8d 5f 01 STA gameover_flag 2519 d872 .L0173 ;; return 2520 d872 2521 d872 60 RTS 2522 d873 . 2523 d873 ;; 2524 d873 2525 d873 .lose_a_lifeloop 2526 d873 ;; lose_a_lifeloop 2527 d873 2528 d873 .L0174 ;; restorescreen 2529 d873 2530 d873 20 92 f0 jsr restorescreen 2531 d876 .L0175 ;; plotvalue vertical_shooting_score_10_digits 3 score0 6 25 8 2532 d876 2533 d876 a9 04 lda #vertical_shooting_score_10_digits 2537 d87c 85 43 sta temp2 2538 d87e 2539 d87e ad 06 21 lda charactermode 2540 d881 85 4a sta temp9 2541 d883 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 2542 d885 8d 06 21 sta charactermode 2543 d888 a9 1a lda #26 ; width in two's complement 2544 d88a 09 60 ora #96 ; palette left shifted 5 bits 2545 d88c 85 44 sta temp3 2546 d88e a9 19 lda #25 2547 d890 85 45 sta temp4 2548 d892 2549 d892 a9 08 lda #8 2550 d894 85 46 sta temp5 2551 d896 2552 d896 a9 06 lda #6 2553 d898 85 47 sta temp6 2554 d89a 2555 d89a a9 a6 lda #score0 2559 d8a0 85 49 sta temp8 2560 d8a2 2561 d8a2 20 82 f3 jsr plotvalue 2562 d8a2 00 01 USED_PLOTVALUE = 1 2563 d8a5 a5 4a lda temp9 2564 d8a7 8d 06 21 sta charactermode 2565 d8aa .L0176 ;; plotvalue vertical_shooting_score_10_digits 3 score1 1 153 8 2566 d8aa 2567 d8aa a9 04 lda #vertical_shooting_score_10_digits 2571 d8b0 85 43 sta temp2 2572 d8b2 2573 d8b2 ad 06 21 lda charactermode 2574 d8b5 85 4a sta temp9 2575 d8b7 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 2576 d8b9 8d 06 21 sta charactermode 2577 d8bc a9 1f lda #31 ; width in two's complement 2578 d8be 09 60 ora #96 ; palette left shifted 5 bits 2579 d8c0 85 44 sta temp3 2580 d8c2 a9 99 lda #153 2581 d8c4 85 45 sta temp4 2582 d8c6 2583 d8c6 a9 08 lda #8 2584 d8c8 85 46 sta temp5 2585 d8ca 2586 d8ca a9 01 lda #1 2587 d8cc 85 47 sta temp6 2588 d8ce 2589 d8ce a9 a9 lda #score1 2593 d8d4 85 49 sta temp8 2594 d8d6 2595 d8d6 20 82 f3 jsr plotvalue 2596 d8d6 00 01 USED_PLOTVALUE = 1 2597 d8d9 a5 4a lda temp9 2598 d8db 8d 06 21 sta charactermode 2599 d8de .L0177 ;; drawscreen 2600 d8de 2601 d8de 20 b4 f0 jsr drawscreen 2602 d8e1 .L0178 ;; if joy0fire then fire_debounce = 2 2603 d8e1 2604 d8e1 2c 02 21 bit sINPT1 2605 d8e4 10 05 BPL .skipL0178 2606 d8e6 .condpart73 2607 d8e6 a9 02 LDA #2 2608 d8e8 8d 43 01 STA fire_debounce 2609 d8eb .skipL0178 2610 d8eb .L0179 ;; if !joy0fire then fire_debounce = 1 2611 d8eb 2612 d8eb 2c 02 21 bit sINPT1 2613 d8ee 30 05 BMI .skipL0179 2614 d8f0 .condpart74 2615 d8f0 a9 01 LDA #1 2616 d8f2 8d 43 01 STA fire_debounce 2617 d8f5 .skipL0179 2618 d8f5 .L0180 ;; if fire_debounce = 1 && lives > 0 then clearscreen : goto main 2619 d8f5 2620 d8f5 ad 43 01 LDA fire_debounce 2621 d8f8 c9 01 CMP #1 2622 d8fa d0 0d BNE .skipL0180 2623 d8fc .condpart75 2624 d8fc a9 00 LDA #0 2625 d8fe cd a9 01 CMP lives 2626 d901 b0 06 BCS .skip75then 2627 d903 .condpart76 2628 d903 20 80 f0 jsr clearscreen 2629 d906 4c c2 c1 jmp .main 2630 d909 2631 d909 .skip75then 2632 d909 .skipL0180 2633 d909 .L0181 ;; if fire_debounce = 1 && lives < 1 then clearscreen : goto gameover 2634 d909 2635 d909 ad 43 01 LDA fire_debounce 2636 d90c c9 01 CMP #1 2637 d90e d0 0d BNE .skipL0181 2638 d910 .condpart77 2639 d910 ad a9 01 LDA lives 2640 d913 c9 01 CMP #1 2641 d915 b0 06 BCS .skip77then 2642 d917 .condpart78 2643 d917 20 80 f0 jsr clearscreen 2644 d91a 4c 20 d9 jmp .gameover 2645 d91d 2646 d91d .skip77then 2647 d91d .skipL0181 2648 d91d .L0182 ;; goto lose_a_lifeloop 2649 d91d 2650 d91d 4c 73 d8 jmp .lose_a_lifeloop 2651 d920 2652 d920 . 2653 d920 ;; 2654 d920 2655 d920 .gameover 2656 d920 ;; gameover 2657 d920 2658 d920 .L0183 ;; gameover_flag = 0 2659 d920 2660 d920 a9 00 LDA #0 2661 d922 8d 5f 01 STA gameover_flag 2662 d925 .gameover_loop 2663 d925 ;; gameover_loop 2664 d925 2665 d925 .L0184 ;; if lives < 0 then gameover_flag = 1 : clearscreen 2666 d925 2667 d925 ad a9 01 LDA lives 2668 d928 c9 00 CMP #0 2669 d92a b0 08 BCS .skipL0184 2670 d92c .condpart79 2671 d92c a9 01 LDA #1 2672 d92e 8d 5f 01 STA gameover_flag 2673 d931 20 80 f0 jsr clearscreen 2674 d934 .skipL0184 2675 d934 .L0185 ;; plotchars 'Game^Over!' 0 32 32 2676 d934 2677 d934 4c 41 d9 JMP skipalphadata3 2678 d937 alphadata3 2679 d937 47 .byte.b (alphadata3 2694 d947 85 43 sta temp2 2695 d949 2696 d949 a9 16 lda #22 ; width in two's complement 2697 d94b 09 00 ora #0 ; palette left shifted 5 bits 2698 d94d 85 44 sta temp3 2699 d94f a9 20 lda #32 2700 d951 85 45 sta temp4 2701 d953 2702 d953 a9 20 lda #32 2703 d955 2704 d955 85 46 sta temp5 2705 d957 2706 d957 20 4d f3 jsr plotcharacters 2707 d95a .L0186 ;; goto gameover_loop 2708 d95a 2709 d95a 4c 25 d9 jmp .gameover_loop 2710 d95d 2711 d95d .L0187 ;; if fire_debounce = 1 then clearscreen : goto titlescreenloop 2712 d95d 2713 d95d ad 43 01 LDA fire_debounce 2714 d960 c9 01 CMP #1 2715 d962 d0 06 BNE .skipL0187 2716 d964 .condpart80 2717 d964 20 80 f0 jsr clearscreen 2718 d967 4c 6c c1 jmp .titlescreenloop 2719 d96a 2720 d96a .skipL0187 2721 d96a . 2722 d96a ;; 2723 d96a 2724 d96a .L0188 ;; data sfx_bling 2725 d96a 2726 d96a 4c a3 d9 JMP .skipL0188 2727 d96d sfx_bling 2728 d96d 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 2729 d970 2730 d970 1c 04 07 .byte.b $1c,$04,$07 2731 d973 2732 d973 1b 04 07 .byte.b $1b,$04,$07 2733 d976 2734 d976 04 0f 05 .byte.b $04,$0f,$05 2735 d979 2736 d979 15 04 09 .byte.b $15,$04,$09 2737 d97c 2738 d97c 16 04 07 .byte.b $16,$04,$07 2739 d97f 2740 d97f 03 0f 04 .byte.b $03,$0f,$04 2741 d982 2742 d982 11 04 08 .byte.b $11,$04,$08 2743 d985 2744 d985 11 04 08 .byte.b $11,$04,$08 2745 d988 2746 d988 11 04 04 .byte.b $11,$04,$04 2747 d98b 2748 d98b 0e 04 09 .byte.b $0e,$04,$09 2749 d98e 2750 d98e 0e 04 07 .byte.b $0e,$04,$07 2751 d991 2752 d991 0e 04 04 .byte.b $0e,$04,$04 2753 d994 2754 d994 1c 04 07 .byte.b $1c,$04,$07 2755 d997 2756 d997 1b 04 05 .byte.b $1b,$04,$05 2757 d99a 2758 d99a 1c 04 04 .byte.b $1c,$04,$04 2759 d99d 2760 d99d 1b 04 02 .byte.b $1b,$04,$02 2761 d9a0 2762 d9a0 00 00 00 .byte.b $00,$00,$00 2763 d9a3 2764 d9a3 .skipL0188 2765 d9a3 00 6d sfx_bling_lo = #sfx_bling 2767 d9a3 . 2768 d9a3 ;; 2769 d9a3 2770 d9a3 .L0189 ;; data sfx_pulsecannon 2771 d9a3 2772 d9a3 4c fa d9 JMP .skipL0189 2773 d9a6 sfx_pulsecannon 2774 d9a6 10 10 00 .byte.b $10,$10,$00 ; version, priority, frames per chunk 2775 d9a9 2776 d9a9 1e 0c 0a .byte.b $1e,$0c,$0a ; first chunk of freq,channel,volume 2777 d9ac 2778 d9ac 07 06 0f .byte.b $07,$06,$0f 2779 d9af 2780 d9af 07 06 0f .byte.b $07,$06,$0f 2781 d9b2 2782 d9b2 1e 06 0f .byte.b $1e,$06,$0f 2783 d9b5 2784 d9b5 17 0c 0b .byte.b $17,$0c,$0b 2785 d9b8 2786 d9b8 1b 0c 0b .byte.b $1b,$0c,$0b 2787 d9bb 2788 d9bb 1e 0c 0f .byte.b $1e,$0c,$0f 2789 d9be 2790 d9be 07 06 0f .byte.b $07,$06,$0f 2791 d9c1 2792 d9c1 07 06 0f .byte.b $07,$06,$0f 2793 d9c4 2794 d9c4 1e 06 08 .byte.b $1e,$06,$08 2795 d9c7 2796 d9c7 17 0c 06 .byte.b $17,$0c,$06 2797 d9ca 2798 d9ca 1b 0c 0f .byte.b $1b,$0c,$0f 2799 d9cd 2800 d9cd 1e 0c 0f .byte.b $1e,$0c,$0f 2801 d9d0 2802 d9d0 07 06 0f .byte.b $07,$06,$0f 2803 d9d3 2804 d9d3 07 06 0f .byte.b $07,$06,$0f 2805 d9d6 2806 d9d6 0a 06 0a .byte.b $0a,$06,$0a 2807 d9d9 2808 d9d9 17 0c 0a .byte.b $17,$0c,$0a 2809 d9dc 2810 d9dc 1e 0c 04 .byte.b $1e,$0c,$04 2811 d9df 2812 d9df 1e 06 09 .byte.b $1e,$06,$09 2813 d9e2 2814 d9e2 1b 04 05 .byte.b $1b,$04,$05 2815 d9e5 2816 d9e5 07 06 0f .byte.b $07,$06,$0f 2817 d9e8 2818 d9e8 0a 06 09 .byte.b $0a,$06,$09 2819 d9eb 2820 d9eb 17 0c 0d .byte.b $17,$0c,$0d 2821 d9ee 2822 d9ee 1b 0c 09 .byte.b $1b,$0c,$09 2823 d9f1 2824 d9f1 0a 06 05 .byte.b $0a,$06,$05 2825 d9f4 2826 d9f4 17 0c 03 .byte.b $17,$0c,$03 2827 d9f7 2828 d9f7 00 00 00 .byte.b $00,$00,$00 2829 d9fa 2830 d9fa .skipL0189 2831 d9fa 00 a6 sfx_pulsecannon_lo = #sfx_pulsecannon 2833 d9fa DMAHOLEEND0 SET . 1542 bytes of ROM space left in DMA hole 0. 2834 d9fa echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)]d , "bytes of ROM space left in DMA hole 0." 2835 d9fa - if ((256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)) < 0 2836 d9fa -SPACEOVERFLOW SET (SPACEOVERFLOW+1) 2837 d9fa endif 2838 d9fa 2839 e000 ORG $E000,0 ; ************* 2840 e000 2841 e000 vertical_shooting_enemy01 2842 e000 09 e0 HEX 09e0 2843 e002 vertical_shooting_enemy01_tallsprite_00 2844 e002 40 03 HEX 4003 2845 e004 vertical_shooting_score_10_digits 2846 e004 00 00 00 00* HEX 00000000000000000000 2847 e00e vertical_shooting_1up 2848 e00e 15 55 HEX 1555 2849 e010 2850 e100 ORG $E100,0 ; ************* 2851 e100 2852 e100 ;vertical_shooting_enemy01 2853 e100 09 e0 HEX 09e0 2854 e102 ;vertical_shooting_enemy01_tallsprite_00 2855 e102 50 0f HEX 500f 2856 e104 ;vertical_shooting_score_10_digits 2857 e104 54 54 54 10* HEX 54545410041054041010 2858 e10e ;vertical_shooting_1up 2859 e10e ea a9 HEX eaa9 2860 e110 2861 e200 ORG $E200,0 ; ************* 2862 e200 2863 e200 ;vertical_shooting_enemy01 2864 e200 19 ec HEX 19ec 2865 e202 ;vertical_shooting_enemy01_tallsprite_00 2866 e202 5a af HEX 5aaf 2867 e204 ;vertical_shooting_score_10_digits 2868 e204 cc 30 c0 cc* HEX cc30c0cc0ccccc0ccc0c 2869 e20e ;vertical_shooting_1up 2870 e20e d5 58 HEX d558 2871 e210 2872 e300 ORG $E300,0 ; ************* 2873 e300 2874 e300 ;vertical_shooting_enemy01 2875 e300 59 ef HEX 59ef 2876 e302 ;vertical_shooting_enemy01_tallsprite_00 2877 e302 59 ef HEX 59ef 2878 e304 ;vertical_shooting_score_10_digits 2879 e304 44 10 40 04* HEX 44104004040444044404 2880 e30e ;vertical_shooting_1up 2881 e30e 35 60 HEX 3560 2882 e310 2883 e400 ORG $E400,0 ; ************* 2884 e400 2885 e400 ;vertical_shooting_enemy01 2886 e400 59 6f HEX 596f 2887 e402 ;vertical_shooting_enemy01_tallsprite_00 2888 e402 59 ef HEX 59ef 2889 e404 ;vertical_shooting_score_10_digits 2890 e404 44 10 10 10* HEX 44101010540454041014 2891 e40e ;vertical_shooting_1up 2892 e40e 35 60 HEX 3560 2893 e410 2894 e500 ORG $E500,0 ; ************* 2895 e500 2896 e500 ;vertical_shooting_enemy01 2897 e500 5a af HEX 5aaf 2898 e502 ;vertical_shooting_enemy01_tallsprite_00 2899 e502 19 ec HEX 19ec 2900 e504 ;vertical_shooting_score_10_digits 2901 e504 88 20 08 08* HEX 8820080888a080088888 2902 e50e ;vertical_shooting_1up 2903 e50e 0d 80 HEX 0d80 2904 e510 2905 e600 ORG $E600,0 ; ************* 2906 e600 2907 e600 ;vertical_shooting_enemy01 2908 e600 50 07 HEX 5007 2909 e602 ;vertical_shooting_enemy01_tallsprite_00 2910 e602 09 e0 HEX 09e0 2911 e604 ;vertical_shooting_score_10_digits 2912 e604 88 a0 88 08* HEX 88a08808888080088888 2913 e60e ;vertical_shooting_1up 2914 e60e 0d 80 HEX 0d80 2915 e610 2916 e700 ORG $E700,0 ; ************* 2917 e700 2918 e700 ;vertical_shooting_enemy01 2919 e700 40 01 HEX 4001 2920 e702 ;vertical_shooting_enemy01_tallsprite_00 2921 e702 09 e0 HEX 09e0 2922 e704 ;vertical_shooting_score_10_digits 2923 e704 54 10 10 54* HEX 54101054445454541010 2924 e70e ;vertical_shooting_1up 2925 e70e 03 00 HEX 0300 2926 e710 - if SPACEOVERFLOW > 0 2927 e710 - echo "" 2928 e710 - echo "######## ERROR: space overflow detected in",[SPACEOVERFLOW]d,"areas." 2929 e710 - echo "######## look above for areas with negative ROM space left." 2930 e710 - echo "######## Aborting assembly." 2931 e710 - ERR 2932 e710 endif 2933 e710 2934 e710 2935 e710 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2936 e710 2937 e710 ifnconst bankswitchmode 2938 e710 if ( * < $f000 ) 2939 f000 ORG $F000 2940 f000 endif 2941 f000 - else 2942 f000 - ifconst ROM128K 2943 f000 - if ( * < $f000 ) 2944 f000 - ORG $27000 2945 f000 - RORG $F000 2946 f000 - endif 2947 f000 - endif 2948 f000 - ifconst ROM144K 2949 f000 - if ( * < $f000 ) 2950 f000 - ORG $27000 2951 f000 - RORG $F000 2952 f000 - endif 2953 f000 - endif 2954 f000 - ifconst ROM256K 2955 f000 - if ( * < $f000 ) 2956 f000 - ORG $47000 2957 f000 - RORG $F000 2958 f000 - endif 2959 f000 - endif 2960 f000 - ifconst ROM272K 2961 f000 - if ( * < $f000 ) 2962 f000 - ORG $47000 2963 f000 - RORG $F000 2964 f000 - endif 2965 f000 - endif 2966 f000 - ifconst ROM512K 2967 f000 - if ( * < $f000 ) 2968 f000 - ORG $87000 2969 f000 - RORG $F000 2970 f000 - endif 2971 f000 - endif 2972 f000 - ifconst ROM528K 2973 f000 - if ( * < $f000 ) 2974 f000 - ORG $87000 2975 f000 - RORG $F000 2976 f000 - endif 2977 f000 - endif 2978 f000 endif 2979 f000 2980 f000 ; all of these "modules" have conditional clauses in them, so even though 2981 f000 ; they're always included here, they don't take up rom unless the user 2982 f000 ; explicitly enables support for the feature. 2983 f000 2984 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.78b.asm 2986 f000 endif 2987 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.78b.asm 2989 f000 endif 2990 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.78b.asm 2992 f000 endif 2993 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 - and #%00110000 557 f000 - cmp #%00110000 558 f000 - beq hsjoystickskipped 559 f000 - lda hsjoydebounce 560 f000 - beq hsdontdebounce 561 f000 - jmp hspostjoystick 562 f000 -hsdontdebounce 563 f000 - ldx #1 ; small tick sound 564 f000 - jsr playhssfx 565 f000 - lda hsswcha 566 f000 - and #%00110000 567 f000 - ldx hscursorx 568 f000 - cmp #%00100000 ; check down 569 f000 - bne hsjoycheckup 570 f000 - ldy hsinitialhold 571 f000 - cpx #0 572 f000 - bne skipavoid31_1 573 f000 - cpy #0 ; if we're about to change to the <- char (#31) then double-decrement to skip over it 574 f000 - bne skipavoid31_1 575 f000 - dey 576 f000 -skipavoid31_1 577 f000 - dey 578 f000 - jmp hssetdebounce 579 f000 -hsjoycheckup 580 f000 - cmp #%00010000 ; check up 581 f000 - bne hsjoystickskipped 582 f000 - ldy hsinitialhold 583 f000 - cpx #0 584 f000 - bne skipavoid31_2 585 f000 - cpy #30 ; if we're about to change to the <- char (#31) then double-increment to skip over it 586 f000 - bne skipavoid31_2 587 f000 - iny 588 f000 -skipavoid31_2 589 f000 - iny 590 f000 -hssetdebounce 591 f000 - tya 592 f000 - and #31 593 f000 - sta hsinitialhold 594 f000 - lda #15 595 f000 - sta hsjoydebounce 596 f000 - bne hspostjoystick 597 f000 -hsjoystickskipped 598 f000 - ; check the fire button only when the stick isn't engaged 599 f000 - lda hsinpt1 600 f000 - bpl hsbuttonskipped 601 f000 - lda hsjoydebounce 602 f000 - beq hsfiredontdebounce 603 f000 - bne hspostjoystick 604 f000 -hsfiredontdebounce 605 f000 - lda hsinitialhold 606 f000 - cmp #31 607 f000 - beq hsmovecursorback 608 f000 - inc hscursorx 609 f000 - inc hsinitialpos 610 f000 - lda hscursorx 611 f000 - cmp #3 612 f000 - bne skiphsentryisdone 613 f000 - lda #0 614 f000 - sta framecounter 615 f000 - lda #$ff 616 f000 - sta hsnewscoreline 617 f000 - dec hsinitialpos 618 f000 - bne skiphsentryisdone 619 f000 -hsmovecursorback 620 f000 - lda hscursorx 621 f000 - beq skiphsmovecursorback 622 f000 - lda #29 623 f000 - ldx hsinitialpos 624 f000 - sta HSRAMInitials,x 625 f000 - dec hsinitialpos 626 f000 - dec hscursorx 627 f000 - dex 628 f000 - lda HSRAMInitials,x 629 f000 - sta hsinitialhold 630 f000 -skiphsmovecursorback 631 f000 -skiphsentryisdone 632 f000 - ldx #0 633 f000 - jsr playhssfx 634 f000 - lda #20 635 f000 - sta hsjoydebounce 636 f000 - bne hspostjoystick 637 f000 - 638 f000 -hsbuttonskipped 639 f000 - lda #0 640 f000 - sta hsjoydebounce 641 f000 -hspostjoystick 642 f000 - 643 f000 - ldx hsinitialpos 644 f000 - lda hsinitialhold 645 f000 - sta HSRAMInitials,x 646 f000 - 647 f000 - jmp skiphschasecolors 648 f000 - 649 f000 -skipenterscorecontrol 650 f000 - jsr hschasecolors 651 f000 - jsr setuphsinpt1 652 f000 - lda hsjoydebounce 653 f000 - bne skiphschasecolors 654 f000 - lda hsinpt1 655 f000 - bmi returnfromhs 656 f000 -skiphschasecolors 657 f000 - 658 f000 - jsr drawscreen 659 f000 - 660 f000 - lda countdownseconds 661 f000 - beq returnfromhs 662 f000 - jmp keepdisplayinghs 663 f000 -returnfromhs 664 f000 - 665 f000 - ifconst songdatastart_song_highscore 666 f000 - lda hsdisplaymode 667 f000 - beq skipclearHSCsong 668 f000 - lda #0 669 f000 - sta songtempo 670 f000 -skipclearHSCsong 671 f000 - endif 672 f000 - jsr drawwait 673 f000 - jsr clearscreen 674 f000 - lda #0 675 f000 - ldy #7 676 f000 - jsr blacken320colors 677 f000 - lda ssCTRL 678 f000 - sta sCTRL 679 f000 - lda ssCHARBASE 680 f000 - sta sCHARBASE 681 f000 - rts 682 f000 - 683 f000 -setuphsinpt1 684 f000 - lda #$ff 685 f000 - sta hsinpt1 686 f000 - lda hsjoydebounce 687 f000 - beq skipdebounceadjust 688 f000 - dec hsjoydebounce 689 f000 - bne skipstorefirebuttonstatus 690 f000 -skipdebounceadjust 691 f000 - ldx hsdisplaymode 692 f000 - cpx #3 693 f000 - bne hsskipadjustjoyfire1 694 f000 - lda sINPT3 695 f000 - jmp hsskipadjustjoyfire1done 696 f000 -hsskipadjustjoyfire1 697 f000 - lda sINPT1 698 f000 -hsskipadjustjoyfire1done 699 f000 - sta hsinpt1 700 f000 -skipstorefirebuttonstatus 701 f000 - rts 702 f000 - 703 f000 -blacken320colors 704 f000 - ldy #7 705 f000 -blacken320colorsloop 706 f000 - sta P0C2,y 707 f000 - dey 708 f000 - bpl blacken320colorsloop 709 f000 - rts 710 f000 - 711 f000 -hschasecolors 712 f000 - lda framecounter 713 f000 - and #3 714 f000 - bne hschasecolorsreturn 715 f000 - inc hscolorchaseindex 716 f000 - lda hscolorchaseindex 717 f000 - 718 f000 - sta P5C2 719 f000 - sbc #$02 720 f000 - sta P4C2 721 f000 - sbc #$02 722 f000 - sta P3C2 723 f000 - sbc #$02 724 f000 - sta P2C2 725 f000 - sbc #$02 726 f000 - sta P1C2 727 f000 -hschasecolorsreturn 728 f000 - rts 729 f000 - 730 f000 -playhssfx 731 f000 - lda hssfx_lo,x 732 f000 - sta temp1 733 f000 - lda hssfx_hi,x 734 f000 - sta temp2 735 f000 - lda #0 736 f000 - sta temp3 737 f000 - jmp schedulesfx 738 f000 - 739 f000 -hssfx_lo 740 f000 - .byte sfx_hsletterpositionchange, >sfx_hslettertick 743 f000 - 744 f000 -sfx_hsletterpositionchange 745 f000 - .byte $10,$18,$00 746 f000 - .byte $02,$06,$08 747 f000 - .byte $02,$06,$04 748 f000 - .byte $00,$00,$00 749 f000 -sfx_hslettertick 750 f000 - .byte $10,$18,$00 751 f000 - .byte $00,$00,$0a 752 f000 - .byte $00,$00,$00 753 f000 - 754 f000 -highscorelabeladjust1 755 f000 - .byte (80-(14*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)) 756 f000 -highscorelabeladjust2 757 f000 - .byte (80+(14*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)) 758 f000 - 759 f000 -scorevarlo 760 f000 - .byte <(score0+((6-SCORESIZE)/2)),<(score0+((6-SCORESIZE)/2)),<(score1+((6-SCORESIZE)/2)) 761 f000 -scorevarhi 762 f000 - .byte >(score0+((6-SCORESIZE)/2)),>(score0+((6-SCORESIZE)/2)),>(score1+((6-SCORESIZE)/2)) 763 f000 - 764 f000 - ifnconst HSNOLEVELNAMES 765 f000 -highscoredifficultytextlo 766 f000 - .byte easylevelname, >mediumlevelname, >hardlevelname, >expertlevelname 769 f000 - ifnconst HSCUSTOMLEVELNAMES 770 f000 -highscoredifficultytextlen 771 f000 - .byte 22, 30, 26, 24 772 f000 - 773 f000 -easylevelname 774 f000 - .byte $04,$00,$12,$18,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 775 f000 -mediumlevelname 776 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 777 f000 -hardlevelname 778 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 779 f000 -expertlevelname 780 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 781 f000 - else 782 f000 - include "7800hsgamediffnames.asm" 783 f000 - endif ; HSCUSTOMLEVELNAMES 784 f000 - else 785 f000 -HSHIGHSCOREStext 786 f000 - .byte $07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 787 f000 - endif ; HSNOLEVELNAMES 788 f000 - 789 f000 -highscorelabeltextlo 790 f000 - .byte player0label, >player1label, >player2label 793 f000 - 794 f000 -player0label 795 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$12,$02,$0e,$11,$04,$1a,$1d,$1d 796 f000 - 797 f000 -player1label 798 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$22,$1d,$12,$02,$0e,$11,$04,$1a 799 f000 - 800 f000 -player2label 801 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$23,$1d,$12,$02,$0e,$11,$04,$1a 802 f000 - 803 f000 - 804 f000 - ifconst HSGAMENAMELEN 805 f000 -HSGAMENAMEtable 806 f000 - include "7800hsgamename.asm" 807 f000 - endif 808 f000 - ifconst HSGAMERANKS 809 f000 - include "7800hsgameranks.asm" 810 f000 -highscoreranklabel 811 f000 - .byte $11,$00,$0d,$0a,$1a 812 f000 - endif 813 f000 - 814 f000 - ;ensure our table doesn't wrap a page... 815 f000 - if ((<*)>251) 816 f000 - align 256 817 f000 - endif 818 f000 -hsgameslotnumbers 819 f000 - .byte 33,34,35,36,37 820 f000 - endif 821 f000 - 822 f000 -loaddifficultytable 823 f000 - lda gamedifficulty 824 f000 - and #$03 ; ensure the user hasn't selected an invalid difficulty 825 f000 - sta gamedifficulty 826 f000 - cmp hsdifficulty ; check game difficulty is the same as RAM table 827 f000 - bne loaddifficultytablecontinue1 828 f000 - rts ; this high score difficulty table is already loaded 829 f000 -loaddifficultytablecontinue1 830 f000 - lda gamedifficulty 831 f000 - sta hsdifficulty 832 f000 - ;we need to check the device for the table 833 f000 - lda hsdevice 834 f000 - bne loaddifficultytablecontinue2 835 f000 - ; there's no save device. clear out this table. 836 f000 - jmp cleardifficultytablemem 837 f000 -loaddifficultytablecontinue2 838 f000 - lda hsdevice 839 f000 - and #1 840 f000 - beq memdeviceisntHSC 841 f000 - jmp loaddifficultytableHSC 842 f000 -memdeviceisntHSC 843 f000 - jmp loaddifficultytableAVOX 844 f000 - 845 f000 -savedifficultytable 846 f000 - ;*** we need to check wich device we should use... 847 f000 - lda hsdevice 848 f000 - bne savedifficultytablerealdevice 849 f000 - rts ; its a ram device 850 f000 -savedifficultytablerealdevice 851 f000 - and #1 852 f000 - beq savememdeviceisntHSC 853 f000 - jmp savedifficultytableHSC 854 f000 -savememdeviceisntHSC 855 f000 - jmp savedifficultytableAVOX 856 f000 - 857 f000 -savedifficultytableAVOX 858 f000 - ; the load call already setup the memory structure and atarivox memory location 859 f000 - jsr savealoadedHSCtablecontinue 860 f000 -savedifficultytableAVOXskipconvert 861 f000 - lda #HSIDHI 862 f000 - sta eeprombuffer 863 f000 - lda #HSIDLO 864 f000 - sta eeprombuffer+1 865 f000 - lda hsdifficulty 866 f000 - sta eeprombuffer+2 867 f000 - lda #32 868 f000 - jsr AVoxWriteBytes 869 f000 - rts 870 f000 - 871 f000 -savedifficultytableHSC 872 f000 - ;we always load a table before reaching here, so the 873 f000 - ;memory structures from the load should be intact... 874 f000 - ldy hsgameslot 875 f000 - bpl savealoadedHSCtable 876 f000 - rts 877 f000 -savealoadedHSCtable 878 f000 - lda HSCGameDifficulty,y 879 f000 - cmp #$7F 880 f000 - bne savealoadedHSCtablecontinue 881 f000 - jsr initializeHSCtableentry 882 f000 -savealoadedHSCtablecontinue 883 f000 - ;convert our RAM table to HSC format and write it out... 884 f000 - ldy #0 885 f000 - ldx #0 886 f000 -savedifficultytableScores 887 f000 - 888 f000 - lda HSRAMInitials,x 889 f000 - sta temp3 890 f000 - lda HSRAMInitials+1,x 891 f000 - sta temp4 892 f000 - lda HSRAMInitials+2,x 893 f000 - sta temp5 894 f000 - jsr encodeHSCInitials ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 895 f000 - 896 f000 - lda temp1 897 f000 - sta (HSGameTableLo),y 898 f000 - iny 899 f000 - lda temp2 900 f000 - sta (HSGameTableLo),y 901 f000 - iny 902 f000 - 903 f000 - lda HSRAMScores,x 904 f000 - sta (HSGameTableLo),y 905 f000 - iny 906 f000 - lda HSRAMScores+1,x 907 f000 - sta (HSGameTableLo),y 908 f000 - iny 909 f000 - lda HSRAMScores+2,x 910 f000 - sta (HSGameTableLo),y 911 f000 - iny 912 f000 - inx 913 f000 - inx 914 f000 - inx ; +3 915 f000 - cpx #15 916 f000 - bne savedifficultytableScores 917 f000 - rts 918 f000 - 919 f000 -loaddifficultytableHSC 920 f000 - ; routine responsible for loading the difficulty table from HSC 921 f000 - jsr findindexHSC 922 f000 - ldy hsgameslot 923 f000 - lda HSCGameDifficulty,y 924 f000 - cmp #$7F 925 f000 - bne loaddifficultytableHSCcontinue 926 f000 - ;there was an error. use a new RAM table instead... 927 f000 - jmp cleardifficultytablemem 928 f000 -loaddifficultytableHSCcontinue 929 f000 - ; parse the data into the HS memory... 930 f000 - ldy #0 931 f000 - ldx #0 932 f000 -loaddifficultytableScores 933 f000 - lda (HSGameTableLo),y 934 f000 - sta temp1 935 f000 - iny 936 f000 - lda (HSGameTableLo),y 937 f000 - sta temp2 938 f000 - jsr decodeHSCInitials ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 939 f000 - iny 940 f000 - lda (HSGameTableLo),y 941 f000 - sta HSRAMScores,x 942 f000 - lda temp3 943 f000 - sta HSRAMInitials,x 944 f000 - inx 945 f000 - iny 946 f000 - lda (HSGameTableLo),y 947 f000 - sta HSRAMScores,x 948 f000 - lda temp4 949 f000 - sta HSRAMInitials,x 950 f000 - inx 951 f000 - iny 952 f000 - lda (HSGameTableLo),y 953 f000 - sta HSRAMScores,x 954 f000 - lda temp5 955 f000 - sta HSRAMInitials,x 956 f000 - inx 957 f000 - iny 958 f000 - cpx #15 959 f000 - bne loaddifficultytableScores 960 f000 - rts 961 f000 - 962 f000 -decodeHSCInitials 963 f000 - ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 964 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 965 f000 - lda #0 966 f000 - sta temp4 967 f000 - lda temp1 968 f000 - and #%00011111 969 f000 - sta temp3 970 f000 - 971 f000 - lda temp2 972 f000 - and #%00011111 973 f000 - sta temp5 974 f000 - 975 f000 - lda temp1 976 f000 - asl 977 f000 - rol temp4 978 f000 - asl 979 f000 - rol temp4 980 f000 - asl 981 f000 - rol temp4 982 f000 - lda temp2 983 f000 - asl 984 f000 - rol temp4 985 f000 - asl 986 f000 - rol temp4 987 f000 - rts 988 f000 -encodeHSCInitials 989 f000 - ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 990 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 991 f000 - ; start with packing temp1... 992 f000 - lda temp4 993 f000 - and #%00011100 994 f000 - sta temp1 995 f000 - asl temp1 996 f000 - asl temp1 997 f000 - asl temp1 998 f000 - lda temp3 999 f000 - and #%00011111 1000 f000 - ora temp1 1001 f000 - sta temp1 1002 f000 - ; ...temp1 is now packed, on to temp2... 1003 f000 - lda temp5 1004 f000 - asl 1005 f000 - asl 1006 f000 - ror temp4 1007 f000 - ror 1008 f000 - ror temp4 1009 f000 - ror 1010 f000 - sta temp2 1011 f000 - rts 1012 f000 - 1013 f000 -findindexHSCerror 1014 f000 - ;the HSC is stuffed. return the bad slot flag 1015 f000 - ldy #$ff 1016 f000 - sty hsgameslot 1017 f000 - rts 1018 f000 - 1019 f000 -findindexHSC 1020 f000 -HSCGameID1 = $1029 1021 f000 -HSCGameID2 = $106E 1022 f000 -HSCGameDifficulty = $10B3 1023 f000 -HSCGameIndex = $10F8 1024 f000 - ; routine responsible for finding the game index from HSC 1025 f000 - ; call with x=0 to create a new table if none exist, call with x=$ff to avoid creating new tables 1026 f000 - ; the HS loading routine will use x=$ff, the HS saving routine will use x=0 1027 f000 - ldy #69 ; start +1 to account for the dey 1028 f000 -findindexHSCloop 1029 f000 - dey 1030 f000 - bmi findindexHSCerror 1031 f000 - lda HSCGameDifficulty,y 1032 f000 - cmp #$7F 1033 f000 - beq findourindexHSC 1034 f000 - cmp gamedifficulty 1035 f000 - bne findindexHSCloop 1036 f000 - lda HSCGameID1,y 1037 f000 - cmp #HSIDHI 1038 f000 - bne findindexHSCloop 1039 f000 - lda HSCGameID2,y 1040 f000 - cmp #HSIDLO 1041 f000 - bne findindexHSCloop 1042 f000 -findourindexHSC 1043 f000 - ; if we're here we found our index in the table 1044 f000 - ; or we found the first empty one 1045 f000 - sty hsgameslot 1046 f000 - jsr setupHSCGamepointer ; setup the pointer to the HS Table for this game... 1047 f000 - rts 1048 f000 - 1049 f000 - 1050 f000 -initializeHSCtableentry 1051 f000 - ldy hsgameslot 1052 f000 - ; we need to make a new entry... 1053 f000 - lda #HSIDHI 1054 f000 - sta HSCGameID1,y 1055 f000 - lda #HSIDLO 1056 f000 - sta HSCGameID2,y 1057 f000 - lda gamedifficulty 1058 f000 - sta HSCGameDifficulty,y 1059 f000 - ldx #0 1060 f000 -fixHSDGameDifficultylistLoop 1061 f000 - inx 1062 f000 - txa 1063 f000 - sta HSCGameIndex,y 1064 f000 - iny 1065 f000 - cpy #69 1066 f000 - bne fixHSDGameDifficultylistLoop 1067 f000 - rts 1068 f000 - 1069 f000 -setupHSCGamepointer 1070 f000 - ; this routines sets (HSGameTableLo) pointing to the game's HS table 1071 f000 - lda #$17 1072 f000 - sta HSGameTableHi 1073 f000 - lda #$FA 1074 f000 - sta HSGameTableLo 1075 f000 -setupHSCGamepointerLoop 1076 f000 - lda HSGameTableLo 1077 f000 - sec 1078 f000 - sbc #25 1079 f000 - sta HSGameTableLo 1080 f000 - lda HSGameTableHi 1081 f000 - sbc #0 1082 f000 - sta HSGameTableHi 1083 f000 - iny 1084 f000 - cpy #69 1085 f000 - bne setupHSCGamepointerLoop 1086 f000 - rts 1087 f000 - 1088 f000 -loaddifficultytableAVOX 1089 f000 - ; routine responsible for loading the difficulty table from Avox 1090 f000 - ; we reuse HSC routines to format data to/from our Avox RAM buffer... 1091 f000 - lda #>(eeprombuffer+3) 1092 f000 - sta HSGameTableHi 1093 f000 - lda #<(eeprombuffer+3) 1094 f000 - sta HSGameTableLo 1095 f000 - 1096 f000 - ; the start location in EEPROM, subtract 32... 1097 f000 - lda #$5F 1098 f000 - sta HSVoxHi 1099 f000 - lda #$E0 1100 f000 - sta HSVoxLo 1101 f000 - lda #0 1102 f000 - sta temp1 1103 f000 -loaddifficultytableAVOXloop 1104 f000 - inc temp1 1105 f000 - beq loaddifficultytableAVOXfull 1106 f000 - clc 1107 f000 - lda HSVoxLo 1108 f000 - adc #32 1109 f000 - sta HSVoxLo 1110 f000 - lda HSVoxHi 1111 f000 - adc #0 1112 f000 - sta HSVoxHi 1113 f000 - lda #3 1114 f000 - jsr AVoxReadBytes ; read in 3 bytes, ID1,ID2,Difficulty 1115 f000 - lda eeprombuffer 1116 f000 - cmp #$FF 1117 f000 - beq loaddifficultytableAVOXempty 1118 f000 - cmp #HSIDHI 1119 f000 - bne loaddifficultytableAVOXloop 1120 f000 - lda eeprombuffer+1 1121 f000 - cmp #HSIDLO 1122 f000 - bne loaddifficultytableAVOXloop 1123 f000 - lda eeprombuffer+2 1124 f000 - cmp gamedifficulty 1125 f000 - bne loaddifficultytableAVOXloop 1126 f000 -loaddifficultytableAVOXdone 1127 f000 - lda #32 1128 f000 - jsr AVoxReadBytes 1129 f000 - jsr loaddifficultytableHSCcontinue 1130 f000 - rts 1131 f000 -loaddifficultytableAVOXfull 1132 f000 - lda #0 1133 f000 - sta hsdevice ; looks like all 255 entries are taken... disable it. 1134 f000 -loaddifficultytableAVOXempty 1135 f000 - jmp cleardifficultytablemem 1136 f000 - rts 1137 f000 - 1138 f000 -cleardifficultytablemem 1139 f000 - ldy #29 1140 f000 - lda #0 1141 f000 -cleardifficultytablememloop 1142 f000 - sta HSRAMTable,y 1143 f000 - dey 1144 f000 - bpl cleardifficultytablememloop 1145 f000 - rts 1146 f000 -hiscoremoduleend 1147 f000 - 1148 f000 - echo " hiscore assembly: ",[(hiscoremoduleend-hiscoremodulestart)]d," bytes" 1149 f000 - 1150 f000 - ifconst DOUBLEWIDE 1151 f000 -plotvaluedw 1152 f000 -plotdigitcount = temp6 1153 f000 - lda #0 1154 f000 - tay 1155 f000 - ldx valbufend 1156 f000 - 1157 f000 - lda plotdigitcount 1158 f000 - and #1 1159 f000 - beq pvnibble2chardw 1160 f000 - lda #0 1161 f000 - sta VALBUFFER,x ; just in case we skip this digit 1162 f000 - beq pvnibble2char_skipnibbledw 1163 f000 - 1164 f000 -pvnibble2chardw 1165 f000 - ; high nibble... 1166 f000 - lda (temp7),y 1167 f000 - and #$f0 1168 f000 - lsr 1169 f000 - lsr 1170 f000 - lsr 1171 f000 - lsr 1172 f000 - 1173 f000 - clc 1174 f000 - adc temp1 ; add the offset to character graphics to our value 1175 f000 - sta VALBUFFER,x 1176 f000 - inx 1177 f000 - dec plotdigitcount 1178 f000 -pvnibble2char_skipnibbledw 1179 f000 - ; low nibble... 1180 f000 - lda (temp7),y 1181 f000 - and #$0f 1182 f000 - clc 1183 f000 - adc temp1 ; add the offset to character graphics to our value 1184 f000 - sta VALBUFFER,x 1185 f000 - inx 1186 f000 - iny 1187 f000 - 1188 f000 - dec plotdigitcount 1189 f000 - bne pvnibble2chardw 1190 f000 - ;point to the start of our valuebuffer 1191 f000 - clc 1192 f000 - lda #VALBUFFER 1196 f000 - adc #0 1197 f000 - sta temp2 1198 f000 - 1199 f000 - ;advance valbufend to the end of our value buffer 1200 f000 - stx valbufend 1201 f000 - 1202 f000 - ifnconst plotvalueonscreen 1203 f000 - jmp plotcharacters 1204 f000 - else 1205 f000 - jmp plotcharacterslive 1206 f000 - endif 1207 f000 - endif ; DOUBLEWIDE 1208 f000 - 1209 f000 endif ; HSSUPPORT 1210 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 2995 f000 endif 2996 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2997 f000 2998 f000 ;standard routimes needed for pretty much all games 2999 f000 3000 f000 ; some definitions used with "set debug color" 3001 f000 00 91 DEBUGCALC = $91 3002 f000 00 41 DEBUGWASTE = $41 3003 f000 00 c1 DEBUGDRAW = $C1 3004 f000 3005 f000 ;NMI and IRQ handlers 3006 f000 NMI 3007 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 3008 f000 48 pha ; save A 3009 f001 a5 4d lda visibleover 3010 f003 49 ff eor #255 3011 f005 85 4d sta visibleover 3012 f007 - ifconst DEBUGINTERRUPT 3013 f007 - and #$93 3014 f007 - sta BACKGRND 3015 f007 endif 3016 f007 ce b2 01 dec interruptindex 3017 f00a d0 03 bne skipreallyoffvisible 3018 f00c 4c 67 f0 jmp reallyoffvisible 3019 f00f skipreallyoffvisible 3020 f00f a5 4d lda visibleover 3021 f011 d0 03 bne carryontopscreenroutine 3022 f013 4c 65 f0 jmp skiptopscreenroutine 3023 f016 carryontopscreenroutine 3024 f016 8a txa ; save X+Y 3025 f017 48 pha 3026 f018 98 tya 3027 f019 48 pha 3028 f01a d8 cld 3029 f01b - ifconst .topscreenroutine 3030 f01b - jsr .topscreenroutine 3031 f01b endif 3032 f01b ifnconst CANARYOFF 3033 f01b ad c1 01 lda canary 3034 f01e f0 0c beq skipcanarytriggered 3035 f020 a9 45 lda #$45 3036 f022 85 20 sta BACKGRND 3037 f024 a9 60 lda #$60 3038 f026 85 3c sta CTRL 3039 f028 8d 07 21 sta sCTRL 3040 f02b 02 .byte.b $02 ; KIL/JAM 3041 f02c endif 3042 f02c skipcanarytriggered 3043 f02c ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 3044 f02f 3045 f02f ; ** Other important routines that need to regularly run, and can run onscreen. 3046 f02f ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 3047 f02f 3048 f02f - ifconst LONGCONTROLLERREAD 3049 f02f -longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 3050 f02f - ldy port1control 3051 f02f - lda longreadindex,y 3052 f02f - asl 3053 f02f - ldy port0control 3054 f02f - ora longreadindex,y 3055 f02f - bne beginlongcontrollerreads ; long-read controlers are enabled but not chosen... 3056 f02f - jmp longcontrollerreadsdone 3057 f02f -beginlongcontrollerreads 3058 f02f - tay 3059 f02f - 3060 f02f - lda longreadroutinehi,y 3061 f02f - sta inttemp4 3062 f02f - lda longreadroutinelo,y 3063 f02f - sta inttemp3 3064 f02f - 3065 f02f - jmp (inttemp3) 3066 f02f - 3067 f02f - ifconst PADDLERANGE 3068 f02f -TIMEVAL = PADDLERANGE 3069 f02f - else 3070 f02f -TIMEVAL = 160 3071 f02f - endif 3072 f02f -TIMEOFFSET = 10 3073 f02f - 3074 f02f -LLRET 3075 f02f - 3076 f02f -longcontrollerreadsdone 3077 f02f endif ; LONGCONTROLLERREAD 3078 f02f 3079 f02f 3080 f02f 20 d9 f1 jsr servicesfxchannels 3081 f032 - ifconst MUSICTRACKER 3082 f032 - jsr servicesong 3083 f032 endif ; MUSICTRACKER 3084 f032 3085 f032 ee a4 01 inc framecounter 3086 f035 ad a4 01 lda framecounter 3087 f038 29 3f and #63 3088 f03a d0 08 bne skipcountdownseconds 3089 f03c ad a5 01 lda countdownseconds 3090 f03f f0 03 beq skipcountdownseconds 3091 f041 ce a5 01 dec countdownseconds 3092 f044 skipcountdownseconds 3093 f044 3094 f044 a2 01 ldx #1 3095 f046 buttonreadloop 3096 f046 8a txa 3097 f047 48 pha 3098 f048 bc b7 01 ldy port0control,x 3099 f04b b9 bc f1 lda buttonhandlerlo,y 3100 f04e 85 da sta inttemp3 3101 f050 b9 b1 f1 lda buttonhandlerhi,y 3102 f053 85 db sta inttemp4 3103 f055 05 da ora inttemp3 3104 f057 f0 03 beq buttonreadloopreturn 3105 f059 6c da 00 jmp (inttemp3) 3106 f05c buttonreadloopreturn 3107 f05c 68 pla 3108 f05d aa tax 3109 f05e ca dex 3110 f05f 10 e5 bpl buttonreadloop 3111 f061 3112 f061 - ifconst KEYPADSUPPORT 3113 f061 - jsr keypadrowselect 3114 f061 endif ; KEYPADSUPPORT 3115 f061 3116 f061 3117 f061 - ifconst DOUBLEBUFFER 3118 f061 - lda doublebufferminimumframeindex 3119 f061 - beq skipdoublebufferminimumframeindexadjust 3120 f061 - dec doublebufferminimumframeindex 3121 f061 -skipdoublebufferminimumframeindexadjust 3122 f061 endif 3123 f061 3124 f061 68 pla 3125 f062 a8 tay 3126 f063 68 pla 3127 f064 aa tax 3128 f065 skiptopscreenroutine 3129 f065 68 pla 3130 f066 IRQ 3131 f066 40 RTI 3132 f067 3133 f067 - ifconst LONGCONTROLLERREAD 3134 f067 - 3135 f067 -longreadindex 3136 f067 - .byte 0, 0, 0, 1 ; NONE PROLINE LIGHTGUN PADDLE 3137 f067 - .byte 0, 0, 4, 0 ; TRKBALL VCSSTICK DRIVING KEYPAD 3138 f067 - .byte 4, 4, 0 ; STMOUSE AMOUSE ATARIVOX 3139 f067 - 3140 f067 -longreadroutinelo 3141 f067 - .byte LLRET ; 0 = no routine 3155 f067 - .byte >paddleport0update ; 1 = paddle port 0 3156 f067 - .byte >paddleport1update ; 2 = paddle port 1 3157 f067 - .byte >paddleport01update ; 3 = paddle port 0+1 3158 f067 - .byte >mouse0update ; 4 = mouse port 0 3159 f067 - .byte >LLRET ; 5 = impossible (paddle port 0 + mouse port 0) 3160 f067 - .byte >mouse0update ; 6 = unsupported (mouse port 0 + paddle port 1) 3161 f067 - .byte >LLRET ; 7 = impossible (mouse port 0 + paddle port 1) 3162 f067 - .byte >mouse1update ; 8 = mouse port 1 3163 f067 - .byte >paddleport0update ; 9 = unsupported (paddle port 0 + mouse port 1) 3164 f067 - .byte >LLRET ; 10 = impossible (mouse port 1 + paddle port 1) 3165 f067 - 3166 f067 - 3167 f067 -SETTIM64T 3168 f067 - bne skipdefaulttime 3169 f067 - ifnconst PADDLESMOOTHINGOFF 3170 f067 - lda #(TIMEVAL+TIMEOFFSET+1) 3171 f067 - else 3172 f067 - lda #(TIMEVAL+TIMEOFFSET) 3173 f067 - endif 3174 f067 -skipdefaulttime 3175 f067 - tay 3176 f067 - dey 3177 f067 -.setTIM64Tloop 3178 f067 - sta TIM64T 3179 f067 - cpy INTIM 3180 f067 - bne .setTIM64Tloop 3181 f067 - rts 3182 f067 endif ; LONGCONTROLLERREAD 3183 f067 3184 f067 reallyoffvisible 3185 f067 85 24 sta WSYNC 3186 f069 3187 f069 a9 00 lda #0 3188 f06b 85 4d sta visibleover 3189 f06d - ifconst DEBUGINTERRUPT 3190 f06d - sta BACKGRND 3191 f06d endif 3192 f06d 3193 f06d a9 03 lda #3 3194 f06f 8d b2 01 sta interruptindex 3195 f072 3196 f072 8a txa 3197 f073 48 pha 3198 f074 98 tya 3199 f075 48 pha 3200 f076 d8 cld 3201 f077 3202 f077 20 53 f1 jsr uninterruptableroutines 3203 f07a 3204 f07a - ifconst .userinterrupt 3205 f07a - jsr .userinterrupt 3206 f07a endif 3207 f07a 3208 f07a - ifconst KEYPADSUPPORT 3209 f07a - jsr keypadcolumnread 3210 f07a endif 3211 f07a 3212 f07a 68 pla 3213 f07b a8 tay 3214 f07c 68 pla 3215 f07d aa tax 3216 f07e 68 pla 3217 f07f 40 RTI 3218 f080 3219 f080 clearscreen 3220 f080 a2 17 ldx #(WZONECOUNT-1) 3221 f082 a9 00 lda #0 3222 f084 clearscreenloop 3223 f084 95 65 sta dlend,x 3224 f086 ca dex 3225 f087 10 fb bpl clearscreenloop 3226 f089 a9 00 lda #0 3227 f08b 8d ad 01 sta valbufend ; clear the bcd value buffer 3228 f08e 8d ae 01 sta valbufendsave 3229 f091 60 rts 3230 f092 3231 f092 restorescreen 3232 f092 a2 17 ldx #(WZONECOUNT-1) 3233 f094 a9 00 lda #0 3234 f096 restorescreenloop 3235 f096 b5 82 lda dlendsave,x 3236 f098 95 65 sta dlend,x 3237 f09a ca dex 3238 f09b 10 f9 bpl restorescreenloop 3239 f09d ad ae 01 lda valbufendsave 3240 f0a0 8d ad 01 sta valbufend 3241 f0a3 60 rts 3242 f0a4 3243 f0a4 savescreen 3244 f0a4 a2 17 ldx #(WZONECOUNT-1) 3245 f0a6 savescreenloop 3246 f0a6 b5 65 lda dlend,x 3247 f0a8 95 82 sta dlendsave,x 3248 f0aa ca dex 3249 f0ab 10 f9 bpl savescreenloop 3250 f0ad ad ad 01 lda valbufend 3251 f0b0 8d ae 01 sta valbufendsave 3252 f0b3 - ifconst DOUBLEBUFFER 3253 f0b3 - lda doublebufferstate 3254 f0b3 - beq savescreenrts 3255 f0b3 - lda #1 3256 f0b3 - sta doublebufferbufferdirty 3257 f0b3 -savescreenrts 3258 f0b3 endif ; DOUBLEBUFFER 3259 f0b3 60 rts 3260 f0b4 3261 f0b4 drawscreen 3262 f0b4 3263 f0b4 a9 00 lda #0 3264 f0b6 85 42 sta temp1 ; not B&W if we're here... 3265 f0b8 3266 f0b8 drawscreenwait 3267 f0b8 a5 4d lda visibleover 3268 f0ba d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 3269 f0bc 3270 f0bc ;restore some registers in case the game changed them mid-screen... 3271 f0bc ad 07 21 lda sCTRL 3272 f0bf 05 42 ora temp1 3273 f0c1 85 3c sta CTRL 3274 f0c3 ad 0b 21 lda sCHARBASE 3275 f0c6 85 34 sta CHARBASE 3276 f0c8 3277 f0c8 ;ensure all of the display list is terminated... 3278 f0c8 20 39 f1 jsr terminatedisplaylist 3279 f0cb 3280 f0cb ifnconst pauseroutineoff 3281 f0cb 20 d6 f0 jsr pauseroutine 3282 f0ce endif ; pauseroutineoff 3283 f0ce 3284 f0ce ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 3285 f0ce ; delaying a full frame, but still allowing time for basic calculations. 3286 f0ce visiblescreenstartedwait 3287 f0ce a5 4d lda visibleover 3288 f0d0 f0 fc beq visiblescreenstartedwait 3289 f0d2 visiblescreenstartedwaitdone 3290 f0d2 ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 3291 f0d5 60 rts 3292 f0d6 3293 f0d6 ifnconst pauseroutineoff 3294 f0d6 ; check to see if pause was pressed and released 3295 f0d6 pauseroutine 3296 f0d6 ad b3 01 lda pausedisable 3297 f0d9 d0 4e bne leavepauseroutine 3298 f0db a9 08 lda #8 3299 f0dd 2c 82 02 bit SWCHB 3300 f0e0 f0 29 beq pausepressed 3301 f0e2 3302 f0e2 ifnconst SOFTRESETASPAUSEOFF 3303 f0e2 ifnconst MOUSESUPPORT 3304 f0e2 ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 3305 f0e5 29 70 and #%01110000 ; _LDU 3306 f0e7 f0 22 beq pausepressed 3307 f0e9 endif 3308 f0e9 endif 3309 f0e9 3310 f0e9 ;pause isn't pressed 3311 f0e9 a9 00 lda #0 3312 f0eb 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 3313 f0ee 3314 f0ee ;check if we're in an already paused state 3315 f0ee ad 00 21 lda pausestate 3316 f0f1 f0 36 beq leavepauseroutine ; nope, leave 3317 f0f3 3318 f0f3 c9 01 cmp #1 ; last frame was the start of pausing 3319 f0f5 f0 2b beq enterpausestate2 ; move from state 1 to 2 3320 f0f7 3321 f0f7 c9 02 cmp #2 3322 f0f9 f0 34 beq carryonpausing 3323 f0fb 3324 f0fb ;pausestate must be >2, which means we're ending an unpause 3325 f0fb a9 00 lda #0 3326 f0fd 8d ac 01 sta pausebuttonflag 3327 f100 8d 00 21 sta pausestate 3328 f103 ad 07 21 lda sCTRL 3329 f106 85 3c sta CTRL 3330 f108 4c 29 f1 jmp leavepauseroutine 3331 f10b 3332 f10b pausepressed 3333 f10b ;pause is pressed 3334 f10b ad ac 01 lda pausebuttonflag 3335 f10e c9 ff cmp #$ff 3336 f110 f0 1d beq carryonpausing 3337 f112 3338 f112 ;its a new press, increment the state 3339 f112 ee 00 21 inc pausestate 3340 f115 3341 f115 ;silence volume at the start and end of pausing 3342 f115 a9 00 lda #0 3343 f117 85 19 sta AUDV0 3344 f119 85 1a sta AUDV1 3345 f11b 3346 f11b - ifconst pokeysupport 3347 f11b - ldy #7 3348 f11b -pausesilencepokeyaudioloop 3349 f11b - sta (pokeybase),y 3350 f11b - dey 3351 f11b - bpl pausesilencepokeyaudioloop 3352 f11b endif ; pokeysupport 3353 f11b 3354 f11b a9 ff lda #$ff 3355 f11d 8d ac 01 sta pausebuttonflag 3356 f120 d0 0d bne carryonpausing 3357 f122 3358 f122 enterpausestate2 3359 f122 a9 02 lda #2 3360 f124 8d 00 21 sta pausestate 3361 f127 d0 06 bne carryonpausing 3362 f129 leavepauseroutine 3363 f129 ad 07 21 lda sCTRL 3364 f12c 85 3c sta CTRL 3365 f12e 60 rts 3366 f12f carryonpausing 3367 f12f - ifconst .pause 3368 f12f - jsr .pause 3369 f12f endif ; .pause 3370 f12f ad 07 21 lda sCTRL 3371 f132 09 80 ora #%10000000 ; turn off colorburst during pause... 3372 f134 85 3c sta CTRL 3373 f136 4c d6 f0 jmp pauseroutine 3374 f139 endif ; pauseroutineoff 3375 f139 3376 f139 3377 f139 - ifconst DOUBLEBUFFER 3378 f139 -skipterminatedisplaylistreturn 3379 f139 - rts 3380 f139 endif ; DOUBLEBUFFER 3381 f139 terminatedisplaylist 3382 f139 - ifconst DOUBLEBUFFER 3383 f139 - lda doublebufferstate 3384 f139 - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 3385 f139 endif ; DOUBLEBUFFER 3386 f139 terminatedisplaybuffer 3387 f139 ;add DL end entry on each DL 3388 f139 a2 17 ldx #(WZONECOUNT-1) 3389 f13b dlendloop 3390 f13b bd 3c f6 lda DLPOINTL,x 3391 f13e - ifconst DOUBLEBUFFER 3392 f13e - clc 3393 f13e - adc doublebufferdloffset 3394 f13e endif ; DOUBLEBUFFER 3395 f13e 85 63 sta dlpnt 3396 f140 bd 24 f6 lda DLPOINTH,x 3397 f143 - ifconst DOUBLEBUFFER 3398 f143 - adc #0 3399 f143 endif ; DOUBLEBUFFER 3400 f143 85 64 sta dlpnt+1 3401 f145 b4 65 ldy dlend,x 3402 f147 a9 00 lda #$00 3403 f149 dlendmoreloops 3404 f149 c8 iny 3405 f14a 91 63 sta (dlpnt),y 3406 f14c - ifconst FRAMESKIPGLITCHFIXWEAK 3407 f14c - cpy #DLLASTOBJ+1 3408 f14c - beq dlendthiszonedone 3409 f14c - iny 3410 f14c - iny 3411 f14c - iny 3412 f14c - iny 3413 f14c - iny 3414 f14c - sta (dlpnt),y 3415 f14c -dlendthiszonedone 3416 f14c endif FRAMESKIPGLITCHFIXWEAK 3417 f14c - ifconst FRAMESKIPGLITCHFIX 3418 f14c - iny 3419 f14c - iny 3420 f14c - iny 3421 f14c - iny 3422 f14c - cpy #DLLASTOBJ-1 3423 f14c - bcc dlendmoreloops 3424 f14c endif ; FRAMESKIPGLITCHFIX 3425 f14c ca dex 3426 f14d 10 ec bpl dlendloop 3427 f14f 3428 f14f ifnconst pauseroutineoff 3429 f14f 20 d6 f0 jsr pauseroutine 3430 f152 endif ; pauseroutineoff 3431 f152 60 rts 3432 f153 3433 f153 uninterruptableroutines 3434 f153 ; this is for routines that must happen off the visible screen, each frame. 3435 f153 3436 f153 - ifconst AVOXVOICE 3437 f153 - jsr serviceatarivoxqueue 3438 f153 endif 3439 f153 3440 f153 a9 00 lda #0 3441 f155 8d b6 01 sta palfastframe 3442 f158 ad 09 21 lda paldetected 3443 f15b f0 10 beq skippalframeadjusting 3444 f15d ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 3445 f15d ae b5 01 ldx palframes 3446 f160 e8 inx 3447 f161 e0 05 cpx #5 3448 f163 d0 05 bne palframeskipdone 3449 f165 ee b6 01 inc palfastframe 3450 f168 a2 00 ldx #0 3451 f16a palframeskipdone 3452 f16a 8e b5 01 stx palframes 3453 f16d skippalframeadjusting 3454 f16d 3455 f16d - ifconst MUSICTRACKER 3456 f16d - ; We normally run the servicesong routine from the top-screen interrupt, but if it 3457 f16d - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 3458 f16d - ; If that happens, we try again here. Chances are very small we'll run into the same 3459 f16d - ; problem twice, and if we do, we just drop a musical note or two. 3460 f16d - lda sfxschedulemissed 3461 f16d - beq servicesongwasnotmissed 3462 f16d - jsr servicesong 3463 f16d -servicesongwasnotmissed 3464 f16d endif ; MUSICTRACKER 3465 f16d 3466 f16d 60 rts 3467 f16e 3468 f16e serviceatarivoxqueue 3469 f16e - ifconst AVOXVOICE 3470 f16e - lda voxlock 3471 f16e - bne skipvoxprocessing ; the vox is in the middle of speech address update 3472 f16e -skipvoxqueuesizedec 3473 f16e - jmp processavoxvoice 3474 f16e -skipvoxprocessing 3475 f16e - rts 3476 f16e - 3477 f16e -processavoxvoice 3478 f16e - lda avoxenable 3479 f16e - bne avoxfixport 3480 f16e - SPKOUT tempavox 3481 f16e - rts 3482 f16e -avoxfixport 3483 f16e - lda #0 ; restore the port to all bits as inputs... 3484 f16e - sta CTLSWA 3485 f16e - rts 3486 f16e -silenceavoxvoice 3487 f16e - SPEAK avoxsilentdata 3488 f16e - rts 3489 f16e -avoxsilentdata 3490 f16e - .byte 31,255 3491 f16e else 3492 f16e 60 rts 3493 f16f endif ; AVOXVOICE 3494 f16f 3495 f16f joybuttonhandler 3496 f16f 8a txa 3497 f170 0a asl 3498 f171 a8 tay 3499 f172 b9 08 00 lda INPT0,y 3500 f175 4a lsr 3501 f176 9d 02 21 sta sINPT1,x 3502 f179 b9 09 00 lda INPT1,y 3503 f17c 29 80 and #%10000000 3504 f17e 1d 02 21 ora sINPT1,x 3505 f181 9d 02 21 sta sINPT1,x 3506 f184 3507 f184 b5 0c lda INPT4,x 3508 f186 30 19 bmi .skip1bjoyfirecheck 3509 f188 ;one button joystick is down 3510 f188 49 80 eor #%10000000 3511 f18a 9d 02 21 sta sINPT1,x 3512 f18d 3513 f18d ad b1 01 lda joybuttonmode 3514 f190 3d a4 f1 and twobuttonmask,x 3515 f193 f0 0c beq .skip1bjoyfirecheck 3516 f195 ad b1 01 lda joybuttonmode 3517 f198 1d a4 f1 ora twobuttonmask,x 3518 f19b 8d b1 01 sta joybuttonmode 3519 f19e 8d 82 02 sta SWCHB 3520 f1a1 .skip1bjoyfirecheck 3521 f1a1 4c 5c f0 jmp buttonreadloopreturn 3522 f1a4 3523 f1a4 twobuttonmask 3524 f1a4 04 10 .byte.b %00000100,%00010000 3525 f1a6 3526 f1a6 gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 3527 f1a6 - ifconst LIGHTGUNSUPPORT 3528 f1a6 - cpx #0 3529 f1a6 - bne secondportgunhandler 3530 f1a6 -firstportgunhandler 3531 f1a6 - lda SWCHA 3532 f1a6 - asl 3533 f1a6 - asl 3534 f1a6 - asl ; shift D4 to D7 3535 f1a6 - and #%10000000 3536 f1a6 - eor #%10000000 3537 f1a6 - sta sINPT1 3538 f1a6 - jmp buttonreadloopreturn 3539 f1a6 -secondportgunhandler 3540 f1a6 - lda SWCHA 3541 f1a6 - lsr ; shift D0 into carry 3542 f1a6 - lsr ; shift carry into D7 3543 f1a6 - and #%10000000 3544 f1a6 - eor #%10000000 3545 f1a6 - sta sINPT3 3546 f1a6 - jmp buttonreadloopreturn 3547 f1a6 endif ; LIGHTGUNSUPPORT 3548 f1a6 3549 f1a6 controlsusing2buttoncode 3550 f1a6 00 .byte.b 0 ; 00=no controller plugged in 3551 f1a7 01 .byte.b 1 ; 01=proline joystick 3552 f1a8 00 .byte.b 0 ; 02=lightgun 3553 f1a9 00 .byte.b 0 ; 03=paddle 3554 f1aa 01 .byte.b 1 ; 04=trakball 3555 f1ab 01 .byte.b 1 ; 05=vcs joystick 3556 f1ac 01 .byte.b 1 ; 06=driving control 3557 f1ad 00 .byte.b 0 ; 07=keypad control 3558 f1ae 00 .byte.b 0 ; 08=st mouse/cx80 3559 f1af 00 .byte.b 0 ; 09=amiga mouse 3560 f1b0 01 .byte.b 1 ; 10=atarivox 3561 f1b1 3562 f1b1 buttonhandlerhi 3563 f1b1 00 .byte.b 0 ; 00=no controller plugged in 3564 f1b2 f1 .byte.b >joybuttonhandler ; 01=proline joystick 3565 f1b3 f1 .byte.b >gunbuttonhandler ; 02=lightgun 3566 f1b4 f5 .byte.b >paddlebuttonhandler ; 03=paddle 3567 f1b5 f1 .byte.b >joybuttonhandler ; 04=trakball 3568 f1b6 f1 .byte.b >joybuttonhandler ; 05=vcs joystick 3569 f1b7 f1 .byte.b >joybuttonhandler ; 06=driving control 3570 f1b8 00 .byte.b 0 ; 07=keypad 3571 f1b9 f5 .byte.b >mousebuttonhandler ; 08=st mouse 3572 f1ba f5 .byte.b >mousebuttonhandler ; 09=amiga mouse 3573 f1bb f1 .byte.b >joybuttonhandler ; 10=atarivox 3574 f1bc buttonhandlerlo 3575 f1bc 00 .byte.b 0 ; 00=no controller plugged in 3576 f1bd 6f .byte.b $0F means the sound is looped while priority is active 3677 f21a 3678 f21a 05 d9 ora inttemp2 3679 f21c 05 d8 ora inttemp1 ; check if F|C|V=0 3680 f21e f0 23 beq zerosfx ; if so, we're at the end of the sound. 3681 f220 3682 f220 advancesfxpointer 3683 f220 ; advance the pointer to the next sound chunk 3684 f220 c8 iny 3685 f221 84 da sty inttemp3 3686 f223 18 clc 3687 f224 b5 4e lda sfx1pointlo,x 3688 f226 65 da adc inttemp3 3689 f228 95 4e sta sfx1pointlo,x 3690 f22a b5 50 lda sfx1pointhi,x 3691 f22c 69 00 adc #0 3692 f22e 95 50 sta sfx1pointhi,x 3693 f230 4c db f1 jmp servicesfxchannelsloop 3694 f233 3695 f233 sfxsoundloop 3696 f233 48 pha 3697 f234 b5 52 lda sfx1priority,x 3698 f236 d0 04 bne sfxsoundloop_carryon 3699 f238 68 pla ; fix the stack before we go 3700 f239 4c 20 f2 jmp advancesfxpointer 3701 f23c sfxsoundloop_carryon 3702 f23c 68 pla 3703 f23d 29 f0 and #$F0 3704 f23f 4a lsr 3705 f240 4a lsr 3706 f241 4a lsr 3707 f242 4a lsr 3708 f243 3709 f243 zerosfx 3710 f243 95 4e sta sfx1pointlo,x 3711 f245 95 50 sta sfx1pointhi,x 3712 f247 95 52 sta sfx1priority,x 3713 f249 4c db f1 jmp servicesfxchannelsloop 3714 f24c 3715 f24c 3716 f24c schedulesfx 3717 f24c ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 3718 f24c a0 00 ldy #0 3719 f24e b1 e0 lda (sfxinstrumentlo),y 3720 f250 - ifconst pokeysupport 3721 f250 - cmp #$20 ; POKEY? 3722 f250 - bne scheduletiasfx 3723 f250 - jmp schedulepokeysfx 3724 f250 endif 3725 f250 scheduletiasfx 3726 f250 ;cmp #$10 ; TIA? 3727 f250 ;beq continuescheduletiasfx 3728 f250 ; rts ; unhandled!!! 3729 f250 continuescheduletiasfx 3730 f250 ifnconst TIASFXMONO 3731 f250 a5 4e lda sfx1pointlo 3732 f252 05 50 ora sfx1pointhi 3733 f254 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 3734 f256 a5 4f lda sfx2pointlo 3735 f258 05 51 ora sfx2pointhi 3736 f25a f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 3737 f25c ; Both channels are scheduled. 3738 f25c a0 01 ldy #1 3739 f25e b1 e0 lda (sfxinstrumentlo),y 3740 f260 d0 01 bne interruptsfx 3741 f262 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 3742 f263 interruptsfx 3743 f263 ;Compare which active sound has a lower priority. We'll interrupt the lower one. 3744 f263 a5 52 lda sfx1priority 3745 f265 c5 53 cmp sfx2priority 3746 f267 b0 04 bcs schedulesfx2 3747 f269 endif ; !TIASFXMONO 3748 f269 3749 f269 schedulesfx1 3750 f269 a2 00 ldx #0 ; channel 1 3751 f26b ifnconst TIASFXMONO 3752 f26b f0 02 beq skipschedulesfx2 3753 f26d schedulesfx2 3754 f26d a2 01 ldx #1 ; channel 2 3755 f26f skipschedulesfx2 3756 f26f endif ; !TIASFXMONO 3757 f26f 3758 f26f - ifconst MUSICTRACKER 3759 f26f - lda sfxnoteindex 3760 f26f - bpl skipdrumkitoverride 3761 f26f - and #$7F ; subtract 128 3762 f26f - sec 3763 f26f - sbc #4 ; drums start at 132, i.e. octave 10 3764 f26f - asl 3765 f26f - tay 3766 f26f - lda tiadrumkitdefinition,y 3767 f26f - sta sfxinstrumentlo 3768 f26f - iny 3769 f26f - lda tiadrumkitdefinition,y 3770 f26f - sta sfxinstrumenthi 3771 f26f - lda #0 3772 f26f - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 3773 f26f -skipdrumkitoverride 3774 f26f endif ; MUSICTRACKER 3775 f26f a0 01 ldy #1 ; get priority and sound-resolution (in frames) 3776 f271 b1 e0 lda (sfxinstrumentlo),y 3777 f273 95 52 sta sfx1priority,x 3778 f275 c8 iny 3779 f276 b1 e0 lda (sfxinstrumentlo),y 3780 f278 95 56 sta sfx1frames,x 3781 f27a a5 e0 lda sfxinstrumentlo 3782 f27c 18 clc 3783 f27d 69 03 adc #3 3784 f27f 95 4e sta sfx1pointlo,x 3785 f281 a5 e1 lda sfxinstrumenthi 3786 f283 69 00 adc #0 3787 f285 95 50 sta sfx1pointhi,x 3788 f287 a5 e2 lda sfxpitchoffset 3789 f289 95 54 sta sfx1poffset,x 3790 f28b a9 00 lda #0 3791 f28d 95 58 sta sfx1tick,x 3792 f28f a5 e3 lda sfxnoteindex 3793 f291 95 cd sta sfx1notedata,x 3794 f293 60 rts 3795 f294 3796 f294 plotsprite 3797 f294 ifnconst NODRAWWAIT 3798 f294 - ifconst DOUBLEBUFFER 3799 f294 - lda doublebufferstate 3800 f294 - bne skipplotspritewait 3801 f294 endif ; DOUBLEBUFFER 3802 f294 - ifconst DEBUGWAITCOLOR 3803 f294 - lda #$41 3804 f294 - sta BACKGRND 3805 f294 endif 3806 f294 plotspritewait 3807 f294 a5 4d lda visibleover 3808 f296 d0 fc bne plotspritewait 3809 f298 skipplotspritewait 3810 f298 - ifconst DEBUGWAITCOLOR 3811 f298 - lda #$0 3812 f298 - sta BACKGRND 3813 f298 endif 3814 f298 endif 3815 f298 3816 f298 ;arguments: 3817 f298 ; temp1=lo graphicdata 3818 f298 ; temp2=hi graphicdata 3819 f298 ; temp3=palette | width byte 3820 f298 ; temp4=x 3821 f298 ; temp5=y 3822 f298 ; temp6=mode 3823 f298 a5 46 lda temp5 ;Y position 3824 f29a 4a lsr ; 2 - Divide by 8 or 16 3825 f29b 4a lsr ; 2 3826 f29c 4a lsr ; 2 3827 f29d - if WZONEHEIGHT = 16 3828 f29d - lsr ; 2 3829 f29d endif 3830 f29d 3831 f29d aa tax 3832 f29e 3833 f29e ifnconst NOLIMITCHECKING 3834 f29e 3835 f29e ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 3836 f29e 3837 f29e c9 18 cmp #WZONECOUNT 3838 f2a0 3839 f2a0 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 3840 f2a2 ; otherwise, check to see if the bottom half is in zone 0... 3841 f2a2 3842 f2a2 - if WZONEHEIGHT = 16 3843 f2a2 - cmp #15 3844 f2a2 else 3845 f2a2 c9 1f cmp #31 3846 f2a4 endif 3847 f2a4 3848 f2a4 d0 05 bne exitplotsprite1 3849 f2a6 a2 00 ldx #0 3850 f2a8 4c e5 f2 jmp continueplotsprite2 3851 f2ab exitplotsprite1 3852 f2ab 60 rts 3853 f2ac 3854 f2ac continueplotsprite1 3855 f2ac endif 3856 f2ac 3857 f2ac bd 3c f6 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 3858 f2af - ifconst DOUBLEBUFFER 3859 f2af - clc 3860 f2af - adc doublebufferdloffset 3861 f2af endif ; DOUBLEBUFFER 3862 f2af 85 63 sta dlpnt 3863 f2b1 bd 24 f6 lda DLPOINTH,x 3864 f2b4 - ifconst DOUBLEBUFFER 3865 f2b4 - adc #0 3866 f2b4 endif ; DOUBLEBUFFER 3867 f2b4 85 64 sta dlpnt+1 3868 f2b6 3869 f2b6 ;Create DL entry for upper part of sprite 3870 f2b6 3871 f2b6 b4 65 ldy dlend,x ;Get the index to the end of this DL 3872 f2b8 3873 f2b8 ifconst CHECKOVERWRITE 3874 f2b8 c0 4b cpy #DLLASTOBJ 3875 f2ba f0 21 beq checkcontinueplotsprite2 3876 f2bc continueplotsprite1a 3877 f2bc endif 3878 f2bc 3879 f2bc a5 42 lda temp1 ; graphic data, lo byte 3880 f2be 91 63 sta (dlpnt),y ;Low byte of data address 3881 f2c0 3882 f2c0 ifnconst ATOMICSPRITEUPDATE 3883 f2c0 c8 iny 3884 f2c1 a5 47 lda temp6 3885 f2c3 91 63 sta (dlpnt),y 3886 f2c5 - else 3887 f2c5 - iny 3888 f2c5 - sty temp8 3889 f2c5 endif 3890 f2c5 3891 f2c5 c8 iny 3892 f2c6 3893 f2c6 a5 46 lda temp5 ;Y position 3894 f2c8 29 07 and #(WZONEHEIGHT - 1) 3895 f2ca c9 01 cmp #1 ; clear carry if our sprite is just in this zone 3896 f2cc 05 43 ora temp2 ; graphic data, hi byte 3897 f2ce 91 63 sta (dlpnt),y 3898 f2d0 3899 f2d0 3900 f2d0 c8 iny 3901 f2d1 a5 44 lda temp3 ;palette|width 3902 f2d3 91 63 sta (dlpnt),y 3903 f2d5 3904 f2d5 c8 iny 3905 f2d6 a5 45 lda temp4 ;Horizontal position 3906 f2d8 91 63 sta (dlpnt),y 3907 f2da 3908 f2da c8 iny 3909 f2db 94 65 sty dlend,x 3910 f2dd 3911 f2dd - ifconst ALWAYSTERMINATE 3912 f2dd - iny 3913 f2dd - lda #0 3914 f2dd - sta (dlpnt),y 3915 f2dd endif 3916 f2dd 3917 f2dd - ifconst ATOMICSPRITEUPDATE 3918 f2dd - ldy temp8 3919 f2dd - lda temp6 3920 f2dd - sta (dlpnt),y 3921 f2dd endif 3922 f2dd 3923 f2dd checkcontinueplotsprite2 3924 f2dd 3925 f2dd 90 38 bcc doneSPDL ;branch if the sprite was fully in the last zone 3926 f2df 3927 f2df ;Create DL entry for lower part of sprite 3928 f2df 3929 f2df e8 inx ;Next region 3930 f2e0 3931 f2e0 ifnconst NOLIMITCHECKING 3932 f2e0 e0 18 cpx #WZONECOUNT 3933 f2e2 3934 f2e2 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 3935 f2e4 60 rts 3936 f2e5 continueplotsprite2 3937 f2e5 endif 3938 f2e5 3939 f2e5 bd 3c f6 lda DLPOINTL,x ;Get pointer to next DL 3940 f2e8 - ifconst DOUBLEBUFFER 3941 f2e8 - clc 3942 f2e8 - adc doublebufferdloffset 3943 f2e8 endif ; DOUBLEBUFFER 3944 f2e8 85 63 sta dlpnt 3945 f2ea bd 24 f6 lda DLPOINTH,x 3946 f2ed - ifconst DOUBLEBUFFER 3947 f2ed - adc #0 3948 f2ed endif ; DOUBLEBUFFER 3949 f2ed 85 64 sta dlpnt+1 3950 f2ef b4 65 ldy dlend,x ;Get the index to the end of this DL 3951 f2f1 3952 f2f1 ifconst CHECKOVERWRITE 3953 f2f1 c0 4b cpy #DLLASTOBJ 3954 f2f3 d0 01 bne continueplotsprite2a 3955 f2f5 60 rts 3956 f2f6 continueplotsprite2a 3957 f2f6 endif 3958 f2f6 3959 f2f6 a5 42 lda temp1 ; graphic data, lo byte 3960 f2f8 91 63 sta (dlpnt),y 3961 f2fa 3962 f2fa ifnconst ATOMICSPRITEUPDATE 3963 f2fa c8 iny 3964 f2fb a5 47 lda temp6 3965 f2fd 91 63 sta (dlpnt),y 3966 f2ff - else 3967 f2ff - iny 3968 f2ff - sty temp8 3969 f2ff endif 3970 f2ff 3971 f2ff c8 iny 3972 f300 3973 f300 a5 46 lda temp5 ;Y position 3974 f302 0b 07 anc #(WZONEHEIGHT - 1) ; undocumented. A=A&IMM, then move bit 7 into carry 3975 f304 05 43 ora temp2 ; graphic data, hi byte 3976 f306 e9 07 sbc #(WZONEHEIGHT-1) ; start at the DMA hole. -1 because carry is clear 3977 f308 91 63 sta (dlpnt),y 3978 f30a 3979 f30a c8 iny 3980 f30b 3981 f30b a5 44 lda temp3 ;palette|width 3982 f30d 91 63 sta (dlpnt),y 3983 f30f 3984 f30f c8 iny 3985 f310 3986 f310 a5 45 lda temp4 ;Horizontal position 3987 f312 91 63 sta (dlpnt),y 3988 f314 3989 f314 c8 iny 3990 f315 94 65 sty dlend,x 3991 f317 3992 f317 - ifconst ALWAYSTERMINATE 3993 f317 - iny 3994 f317 - lda #0 3995 f317 - sta (dlpnt),y 3996 f317 endif 3997 f317 3998 f317 - ifconst ATOMICSPRITEUPDATE 3999 f317 - ldy temp8 4000 f317 - lda temp6 4001 f317 - sta (dlpnt),y 4002 f317 endif 4003 f317 4004 f317 doneSPDL 4005 f317 60 rts 4006 f318 4007 f318 4008 f318 lockzonex 4009 f318 - ifconst ZONELOCKS 4010 f318 - ldy dlend,x 4011 f318 - cpy #DLLASTOBJ 4012 f318 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 4013 f318 - lda DLPOINTL,x 4014 f318 - ifconst DOUBLEBUFFER 4015 f318 - clc 4016 f318 - adc doublebufferdloffset 4017 f318 - endif ; DOUBLEBUFFER 4018 f318 - sta dlpnt 4019 f318 - lda DLPOINTH,x 4020 f318 - ifconst DOUBLEBUFFER 4021 f318 - adc #0 4022 f318 - endif ; DOUBLEBUFFER 4023 f318 - sta dlpnt+1 4024 f318 - iny 4025 f318 - lda #0 4026 f318 - sta (dlpnt),y 4027 f318 - dey 4028 f318 - tya 4029 f318 - ldy #(DLLASTOBJ-1) 4030 f318 - sta (dlpnt),y 4031 f318 - iny 4032 f318 - sty dlend,x 4033 f318 -lockzonexreturn 4034 f318 - rts 4035 f318 endif ; ZONELOCKS 4036 f318 unlockzonex 4037 f318 - ifconst ZONELOCKS 4038 f318 - ldy dlend,x 4039 f318 - cpy #DLLASTOBJ 4040 f318 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 4041 f318 - lda DLPOINTL,x 4042 f318 - ifconst DOUBLEBUFFER 4043 f318 - clc 4044 f318 - adc doublebufferdloffset 4045 f318 - endif ; DOUBLEBUFFER 4046 f318 - sta dlpnt 4047 f318 - lda DLPOINTH,x 4048 f318 - ifconst DOUBLEBUFFER 4049 f318 - adc #0 4050 f318 - endif ; DOUBLEBUFFER 4051 f318 - sta dlpnt+1 4052 f318 - dey 4053 f318 - ;ldy #(DLLASTOBJ-1) 4054 f318 - lda (dlpnt),y 4055 f318 - tay 4056 f318 - sty dlend,x 4057 f318 -unlockzonexreturn 4058 f318 endif ; ZONELOCKS 4059 f318 60 rts 4060 f319 4061 f319 plotcharloop 4062 f319 ; ** read from a data indirectly pointed to from temp8,temp9 4063 f319 ; ** format is: lo_data, hi_data, palette|width, x, y 4064 f319 ; ** format ends with lo_data | hi_data = 0 4065 f319 4066 f319 - ifconst DOUBLEBUFFER 4067 f319 - lda doublebufferstate 4068 f319 - bne skipplotcharloopwait 4069 f319 endif ; DOUBLEBUFFER 4070 f319 - ifconst DEBUGWAITCOLOR 4071 f319 - lda #$61 4072 f319 - sta BACKGRND 4073 f319 endif 4074 f319 plotcharloopwait 4075 f319 a5 4d lda visibleover 4076 f31b d0 fc bne plotcharloopwait 4077 f31d - ifconst DEBUGWAITCOLOR 4078 f31d - lda #0 4079 f31d - sta BACKGRND 4080 f31d endif 4081 f31d skipplotcharloopwait 4082 f31d plotcharlooploop 4083 f31d a0 00 ldy #0 4084 f31f b1 49 lda (temp8),y 4085 f321 85 42 sta temp1 4086 f323 c8 iny 4087 f324 b1 49 lda (temp8),y 4088 f326 85 43 sta temp2 4089 f328 05 42 ora temp1 4090 f32a d0 01 bne plotcharloopcontinue 4091 f32c ;the pointer=0, so return 4092 f32c 60 rts 4093 f32d plotcharloopcontinue 4094 f32d c8 iny 4095 f32e b1 49 lda (temp8),y 4096 f330 85 44 sta temp3 4097 f332 c8 iny 4098 f333 b1 49 lda (temp8),y 4099 f335 85 45 sta temp4 4100 f337 c8 iny 4101 f338 b1 49 lda (temp8),y 4102 f33a ;sta temp5 ; not needed with our late entry. 4103 f33a 20 53 f3 jsr plotcharactersskipentry 4104 f33d a5 49 lda temp8 4105 f33f 18 clc 4106 f340 69 05 adc #5 4107 f342 85 49 sta temp8 4108 f344 a5 4a lda temp9 4109 f346 69 00 adc #0 4110 f348 85 4a sta temp9 4111 f34a 4c 1d f3 jmp plotcharlooploop 4112 f34d 4113 f34d plotcharacters 4114 f34d - ifconst DOUBLEBUFFER 4115 f34d - lda doublebufferstate 4116 f34d - bne skipplotcharacterswait 4117 f34d endif ; DOUBLEBUFFER 4118 f34d - ifconst DEBUGWAITCOLOR 4119 f34d - lda #$41 4120 f34d - sta BACKGRND 4121 f34d endif 4122 f34d plotcharacterswait 4123 f34d a5 4d lda visibleover 4124 f34f d0 fc bne plotcharacterswait 4125 f351 - ifconst DEBUGWAITCOLOR 4126 f351 - sta BACKGRND 4127 f351 endif 4128 f351 skipplotcharacterswait 4129 f351 ;arguments: 4130 f351 ; temp1=lo charactermap 4131 f351 ; temp2=hi charactermap 4132 f351 ; temp3=palette | width byte 4133 f351 ; temp4=x 4134 f351 ; temp5=y 4135 f351 4136 f351 a5 46 lda temp5 ;Y position 4137 f353 4138 f353 plotcharactersskipentry 4139 f353 4140 f353 ;ifconst ZONEHEIGHT 4141 f353 ; if ZONEHEIGHT = 16 4142 f353 ; and #$0F 4143 f353 ; endif 4144 f353 ; if ZONEHEIGHT = 8 4145 f353 ; and #$1F 4146 f353 ; endif 4147 f353 ;else 4148 f353 ; and #$0F 4149 f353 ;endif 4150 f353 4151 f353 aa tax 4152 f354 bd 3c f6 lda DLPOINTL,x ;Get pointer to DL that the characters are in 4153 f357 - ifconst DOUBLEBUFFER 4154 f357 - clc 4155 f357 - adc doublebufferdloffset 4156 f357 endif ; DOUBLEBUFFER 4157 f357 85 63 sta dlpnt 4158 f359 bd 24 f6 lda DLPOINTH,x 4159 f35c - ifconst DOUBLEBUFFER 4160 f35c - adc #0 4161 f35c endif ; DOUBLEBUFFER 4162 f35c 85 64 sta dlpnt+1 4163 f35e 4164 f35e ;Create DL entry for the characters 4165 f35e 4166 f35e b4 65 ldy dlend,x ;Get the index to the end of this DL 4167 f360 4168 f360 ifconst CHECKOVERWRITE 4169 f360 c0 4b cpy #DLLASTOBJ 4170 f362 d0 01 bne continueplotcharacters 4171 f364 60 rts 4172 f365 continueplotcharacters 4173 f365 endif 4174 f365 4175 f365 a5 42 lda temp1 ; character map data, lo byte 4176 f367 91 63 sta (dlpnt),y ;(1) store low address 4177 f369 4178 f369 c8 iny 4179 f36a ad 06 21 lda charactermode 4180 f36d 91 63 sta (dlpnt),y ;(2) store mode 4181 f36f 4182 f36f c8 iny 4183 f370 a5 43 lda temp2 ; character map, hi byte 4184 f372 91 63 sta (dlpnt),y ;(3) store high address 4185 f374 4186 f374 c8 iny 4187 f375 a5 44 lda temp3 ;palette|width 4188 f377 91 63 sta (dlpnt),y ;(4) store palette|width 4189 f379 4190 f379 c8 iny 4191 f37a a5 45 lda temp4 ;Horizontal position 4192 f37c 91 63 sta (dlpnt),y ;(5) store horizontal position 4193 f37e 4194 f37e c8 iny 4195 f37f 94 65 sty dlend,x ; save display list end byte 4196 f381 60 rts 4197 f382 4198 f382 4199 f382 - ifconst plotvalueonscreen 4200 f382 -plotcharacterslive 4201 f382 - ; a version of plotcharacters that draws live and minimally disrupts the screen... 4202 f382 - 4203 f382 - ;arguments: 4204 f382 - ; temp1=lo charactermap 4205 f382 - ; temp2=hi charactermap 4206 f382 - ; temp3=palette | width byte 4207 f382 - ; temp4=x 4208 f382 - ; temp5=y 4209 f382 - 4210 f382 - lda temp5 ;Y position 4211 f382 - 4212 f382 - tax 4213 f382 - lda DLPOINTL,x ;Get pointer to DL that the characters are in 4214 f382 - ifconst DOUBLEBUFFER 4215 f382 - clc 4216 f382 - adc doublebufferdloffset 4217 f382 - endif ; DOUBLEBUFFER 4218 f382 - sta dlpnt 4219 f382 - lda DLPOINTH,x 4220 f382 - ifconst DOUBLEBUFFER 4221 f382 - adc #0 4222 f382 - endif ; DOUBLEBUFFER 4223 f382 - sta dlpnt+1 4224 f382 - 4225 f382 - ;Create DL entry for the characters 4226 f382 - 4227 f382 - ldy dlend,x ;Get the index to the end of this DL 4228 f382 - 4229 f382 - ifconst CHECKOVERWRITE 4230 f382 - cpy #DLLASTOBJ 4231 f382 - bne continueplotcharacterslive 4232 f382 - rts 4233 f382 -continueplotcharacterslive 4234 f382 - endif 4235 f382 - 4236 f382 - lda temp1 ; character map data, lo byte 4237 f382 - sta (dlpnt),y ;(1) store low address 4238 f382 - 4239 f382 - iny 4240 f382 - ; we don't add the second byte yet, since the charmap could briefly 4241 f382 - ; render without a proper character map address, width, or position. 4242 f382 - lda charactermode 4243 f382 - sta (dlpnt),y ;(2) store mode 4244 f382 - 4245 f382 - iny 4246 f382 - lda temp2 ; character map, hi byte 4247 f382 - sta (dlpnt),y ;(3) store high address 4248 f382 - 4249 f382 - iny 4250 f382 - lda temp3 ;palette|width 4251 f382 - sta (dlpnt),y ;(4) store palette|width 4252 f382 - 4253 f382 - iny 4254 f382 - lda temp4 ;Horizontal position 4255 f382 - sta (dlpnt),y ;(5) store horizontal position 4256 f382 - 4257 f382 - iny 4258 f382 - sty dlend,x ; save display list end byte 4259 f382 - 4260 f382 - rts 4261 f382 endif ;plotcharacterslive 4262 f382 4263 f382 ifconst USED_PLOTVALUE 4264 f382 plotvalue 4265 f382 ; calling 7800basic command: 4266 f382 ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 4267 f382 ; ...displays the variable as BCD digits 4268 f382 ; 4269 f382 ; asm sub arguments: 4270 f382 ; temp1=lo charactermap 4271 f382 ; temp2=hi charactermap 4272 f382 ; temp3=palette | width byte 4273 f382 ; temp4=x 4274 f382 ; temp5=y 4275 f382 ; temp6=number of digits 4276 f382 ; temp7=lo variable 4277 f382 ; temp8=hi variable 4278 f382 ; temp9=character mode 4279 f382 4280 f382 00 47 plotdigitcount = temp6 4281 f382 4282 f382 - ifconst ZONELOCKS 4283 f382 - ldx temp5 4284 f382 - ldy dlend,x 4285 f382 - cpy #DLLASTOBJ 4286 f382 - bne carryonplotvalue 4287 f382 - rts 4288 f382 -carryonplotvalue 4289 f382 endif 4290 f382 4291 f382 a9 00 lda #0 4292 f384 a8 tay 4293 f385 ae ad 01 ldx valbufend 4294 f388 4295 f388 a5 47 lda plotdigitcount 4296 f38a 29 01 and #1 4297 f38c f0 07 beq pvnibble2char 4298 f38e a9 00 lda #0 4299 f390 9d 00 20 sta VALBUFFER,x ; just in case we skip this digit 4300 f393 f0 11 beq pvnibble2char_skipnibble 4301 f395 4302 f395 pvnibble2char 4303 f395 ; high nibble... 4304 f395 b1 48 lda (temp7),y 4305 f397 29 f0 and #$f0 4306 f399 4a lsr 4307 f39a 4a lsr 4308 f39b 4a lsr 4309 f39c ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 4310 f39c 4a lsr 4311 f39d endif 4312 f39d 4313 f39d 18 clc 4314 f39e 65 42 adc temp1 ; add the offset to character graphics to our value 4315 f3a0 9d 00 20 sta VALBUFFER,x 4316 f3a3 e8 inx 4317 f3a4 c6 47 dec plotdigitcount 4318 f3a6 4319 f3a6 pvnibble2char_skipnibble 4320 f3a6 ; low nibble... 4321 f3a6 b1 48 lda (temp7),y 4322 f3a8 29 0f and #$0f 4323 f3aa - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 4324 f3aa - asl 4325 f3aa endif 4326 f3aa 18 clc 4327 f3ab 65 42 adc temp1 ; add the offset to character graphics to our value 4328 f3ad 9d 00 20 sta VALBUFFER,x 4329 f3b0 e8 inx 4330 f3b1 c8 iny 4331 f3b2 4332 f3b2 c6 47 dec plotdigitcount 4333 f3b4 d0 df bne pvnibble2char 4334 f3b6 4335 f3b6 ;point to the start of our valuebuffer 4336 f3b6 18 clc 4337 f3b7 a9 00 lda #VALBUFFER 4341 f3c0 69 00 adc #0 4342 f3c2 85 43 sta temp2 4343 f3c4 4344 f3c4 ;advance valbufend to the end of our value buffer 4345 f3c4 8e ad 01 stx valbufend 4346 f3c7 4347 f3c7 ifnconst plotvalueonscreen 4348 f3c7 4c 4d f3 jmp plotcharacters 4349 f3ca - else 4350 f3ca - jmp plotcharacterslive 4351 f3ca endif 4352 f3ca 4353 f3ca endif ; USED_PLOTVALUE 4354 f3ca 4355 f3ca 4356 f3ca - ifconst USED_PLOTVALUEEXTRA 4357 f3ca -plotdigitcount = temp6 4358 f3ca -plotvalueextra 4359 f3ca - ; calling 7800basic command: 4360 f3ca - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 4361 f3ca - ; ...displays the variable as BCD digits 4362 f3ca - ; 4363 f3ca - ; asm sub arguments: 4364 f3ca - ; temp1=lo charactermap 4365 f3ca - ; temp2=hi charactermap 4366 f3ca - ; temp3=palette | width byte 4367 f3ca - ; temp4=x 4368 f3ca - ; temp5=y 4369 f3ca - ; temp6=number of digits 4370 f3ca - ; temp7=lo variable 4371 f3ca - ; temp8=hi variable 4372 f3ca - 4373 f3ca - lda #0 4374 f3ca - tay 4375 f3ca - ldx valbufend 4376 f3ca - ifnconst plotvalueonscreen 4377 f3ca - sta VALBUFFER,x 4378 f3ca - endif 4379 f3ca - 4380 f3ca - lda plotdigitcount 4381 f3ca - and #1 4382 f3ca - 4383 f3ca - bne pvnibble2char_skipnibbleextra 4384 f3ca - 4385 f3ca -pvnibble2charextra 4386 f3ca - ; high nibble... 4387 f3ca - lda (temp7),y 4388 f3ca - and #$f0 4389 f3ca - lsr 4390 f3ca - lsr 4391 f3ca - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 4392 f3ca - lsr 4393 f3ca - endif 4394 f3ca - clc 4395 f3ca - adc temp1 ; add the offset to character graphics to our value 4396 f3ca - sta VALBUFFER,x 4397 f3ca - inx 4398 f3ca - 4399 f3ca - ; second half of the digit 4400 f3ca - clc 4401 f3ca - adc #1 4402 f3ca - sta VALBUFFER,x 4403 f3ca - inx 4404 f3ca - 4405 f3ca -pvnibble2char_skipnibbleextra 4406 f3ca - ; low nibble... 4407 f3ca - lda (temp7),y 4408 f3ca - and #$0f 4409 f3ca - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 4410 f3ca - asl 4411 f3ca - endif 4412 f3ca - asl 4413 f3ca - 4414 f3ca - clc 4415 f3ca - adc temp1 ; add the offset to character graphics to our value 4416 f3ca - sta VALBUFFER,x 4417 f3ca - inx 4418 f3ca - 4419 f3ca - clc 4420 f3ca - adc #1 4421 f3ca - sta VALBUFFER,x 4422 f3ca - inx 4423 f3ca - iny 4424 f3ca - 4425 f3ca - dec plotdigitcount 4426 f3ca - bne pvnibble2charextra 4427 f3ca - 4428 f3ca - ;point to the start of our valuebuffer 4429 f3ca - clc 4430 f3ca - lda #VALBUFFER 4434 f3ca - adc #0 4435 f3ca - sta temp2 4436 f3ca - 4437 f3ca - ;advance valbufend to the end of our value buffer 4438 f3ca - stx valbufend 4439 f3ca - 4440 f3ca - ifnconst plotvalueonscreen 4441 f3ca - jmp plotcharacters 4442 f3ca - else 4443 f3ca - jmp plotcharacterslive 4444 f3ca - endif 4445 f3ca endif ; USED_PLOTVALUEEXTRA 4446 f3ca 4447 f3ca boxcollision 4448 f3ca ; the worst case cycle-time for the code below is 43 cycles. 4449 f3ca ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 4450 f3ca 4451 f3ca ;__boxx1 = accumulator 4452 f3ca ;__boxy1 = y 4453 f3ca 00 44 __boxw1 = temp3 4454 f3ca 00 45 __boxh1 = temp4 4455 f3ca 4456 f3ca 00 46 __boxx2 = temp5 4457 f3ca 00 47 __boxy2 = temp6 4458 f3ca 00 48 __boxw2 = temp7 4459 f3ca 00 49 __boxh2 = temp8 4460 f3ca 4461 f3ca DoXCollisionCheck 4462 f3ca ;lda __boxx1 ; skipped. already in the accumulator 4463 f3ca c5 46 cmp __boxx2 ;3 4464 f3cc b0 07 bcs X1isbiggerthanX2 ;2/3 4465 f3ce X2isbiggerthanX1 4466 f3ce ; carry is clear 4467 f3ce 65 44 adc __boxw1 ;3 4468 f3d0 c5 46 cmp __boxx2 ;3 4469 f3d2 b0 08 bcs DoYCollisionCheck ;3/2 4470 f3d4 60 rts ;6 - carry clear, no collision 4471 f3d5 X1isbiggerthanX2 4472 f3d5 18 clc ;2 4473 f3d6 e5 48 sbc __boxw2 ;3 4474 f3d8 c5 46 cmp __boxx2 ;3 4475 f3da b0 13 bcs noboxcollision ;3/2 4476 f3dc DoYCollisionCheck 4477 f3dc 98 tya ; 2 ; use to be "lda __boxy1" 4478 f3dd c5 47 cmp __boxy2 ;3 4479 f3df b0 05 bcs Y1isbiggerthanY2 ;3/2 4480 f3e1 Y2isbiggerthanY1 4481 f3e1 ; carry is clear 4482 f3e1 65 45 adc __boxh1 ;3 4483 f3e3 c5 47 cmp __boxy2 ;3 4484 f3e5 60 rts ;6 4485 f3e6 Y1isbiggerthanY2 4486 f3e6 18 clc ;2 4487 f3e7 e5 49 sbc __boxh2 ;3 4488 f3e9 c5 47 cmp __boxy2 ;3 4489 f3eb b0 02 bcs noboxcollision ;3/2 4490 f3ed yesboxcollision 4491 f3ed 38 sec ;2 4492 f3ee 60 rts ;6 4493 f3ef noboxcollision 4494 f3ef 18 clc ;2 4495 f3f0 60 rts ;6 4496 f3f1 4497 f3f1 randomize 4498 f3f1 a5 40 lda rand 4499 f3f3 4a lsr 4500 f3f4 26 41 rol rand16 4501 f3f6 90 02 bcc noeor 4502 f3f8 49 b4 eor #$B4 4503 f3fa noeor 4504 f3fa 85 40 sta rand 4505 f3fc 45 41 eor rand16 4506 f3fe 60 rts 4507 f3ff 4508 f3ff ; *** bcd conversion routine courtesy Omegamatrix 4509 f3ff ; *** http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 4510 f3ff converttobcd 4511 f3ff ;value to convert is in the accumulator 4512 f3ff 85 42 sta temp1 4513 f401 4a lsr 4514 f402 65 42 adc temp1 4515 f404 6a ror 4516 f405 4a lsr 4517 f406 4a lsr 4518 f407 65 42 adc temp1 4519 f409 6a ror 4520 f40a 65 42 adc temp1 4521 f40c 6a ror 4522 f40d 4a lsr 4523 f40e 29 3c and #$3C 4524 f410 85 43 sta temp2 4525 f412 4a lsr 4526 f413 65 43 adc temp2 4527 f415 65 42 adc temp1 4528 f417 60 rts ; return the result in the accumulator 4529 f418 4530 f418 ; Y and A contain multiplicands, result in A 4531 f418 mul8 4532 f418 84 42 sty temp1 4533 f41a 85 43 sta temp2 4534 f41c a9 00 lda #0 4535 f41e reptmul8 4536 f41e 46 43 lsr temp2 4537 f420 90 03 bcc skipmul8 4538 f422 18 clc 4539 f423 65 42 adc temp1 4540 f425 ;bcs donemul8 might save cycles? 4541 f425 skipmul8 4542 f425 ;beq donemul8 might save cycles? 4543 f425 06 42 asl temp1 4544 f427 d0 f5 bne reptmul8 4545 f429 donemul8 4546 f429 60 rts 4547 f42a 4548 f42a div8 4549 f42a ; A=numerator Y=denominator, result in A 4550 f42a c0 02 cpy #2 4551 f42c 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 4552 f42e 84 42 sty temp1 4553 f430 a0 ff ldy #$ff 4554 f432 div8loop 4555 f432 e5 42 sbc temp1 4556 f434 c8 iny 4557 f435 b0 fb bcs div8loop 4558 f437 div8end 4559 f437 98 tya 4560 f438 ; result in A 4561 f438 60 rts 4562 f439 4563 f439 ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 4564 f439 mul16 4565 f439 84 42 sty temp1 4566 f43b 85 43 sta temp2 4567 f43d 4568 f43d a9 00 lda #0 4569 f43f a2 08 ldx #8 4570 f441 46 42 lsr temp1 4571 f443 mul16_1 4572 f443 90 03 bcc mul16_2 4573 f445 18 clc 4574 f446 65 43 adc temp2 4575 f448 mul16_2 4576 f448 6a ror 4577 f449 66 42 ror temp1 4578 f44b ca dex 4579 f44c d0 f5 bne mul16_1 4580 f44e 85 43 sta temp2 4581 f450 60 rts 4582 f451 4583 f451 ; div int/int 4584 f451 ; numerator in A, denom in temp1 4585 f451 ; returns with quotient in A, remainder in temp1 4586 f451 div16 4587 f451 85 43 sta temp2 4588 f453 84 42 sty temp1 4589 f455 a9 00 lda #0 4590 f457 a2 08 ldx #8 4591 f459 06 43 asl temp2 4592 f45b div16_1 4593 f45b 2a rol 4594 f45c c5 42 cmp temp1 4595 f45e 90 02 bcc div16_2 4596 f460 e5 42 sbc temp1 4597 f462 div16_2 4598 f462 26 43 rol temp2 4599 f464 ca dex 4600 f465 d0 f4 bne div16_1 4601 f467 85 42 sta temp1 4602 f469 a5 43 lda temp2 4603 f46b 60 rts 4604 f46c 4605 f46c - ifconst bankswitchmode 4606 f46c -BS_jsr 4607 f46c - ifconst MCPDEVCART 4608 f46c - ora #$18 4609 f46c - sta $3000 4610 f46c - else 4611 f46c - sta $8000 4612 f46c - endif 4613 f46c - pla 4614 f46c - tax 4615 f46c - pla 4616 f46c - rts 4617 f46c - 4618 f46c -BS_return 4619 f46c - pla ; bankswitch bank 4620 f46c - ifconst BANKRAM 4621 f46c - sta currentbank 4622 f46c - ora currentrambank 4623 f46c - endif 4624 f46c - ifconst MCPDEVCART 4625 f46c - ora #$18 4626 f46c - sta $3000 4627 f46c - else 4628 f46c - sta $8000 4629 f46c - endif 4630 f46c - pla ; bankswitch $0 flag 4631 f46c - rts 4632 f46c endif 4633 f46c 4634 f46c checkselectswitch 4635 f46c ad 82 02 lda SWCHB ; first check the real select switch... 4636 f46f 29 02 and #%00000010 4637 f471 ifnconst MOUSESUPPORT 4638 f471 f0 05 beq checkselectswitchreturn ; switch is pressed 4639 f473 ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 4640 f476 29 b0 and #%10110000 ; R_DU 4641 f478 endif ; MOUSESUPPORT 4642 f478 checkselectswitchreturn 4643 f478 60 rts 4644 f479 4645 f479 checkresetswitch 4646 f479 ad 82 02 lda SWCHB ; first check the real reset switch... 4647 f47c 29 01 and #%00000001 4648 f47e ifnconst MOUSESUPPORT 4649 f47e f0 05 beq checkresetswitchreturn ; switch is pressed 4650 f480 ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 4651 f483 29 70 and #%01110000 ; _LDU 4652 f485 endif ; MOUSESUPPORT 4653 f485 checkresetswitchreturn 4654 f485 60 rts 4655 f486 4656 f486 - ifconst FINESCROLLENABLED 4657 f486 -finescrolldlls 4658 f486 - ldx temp1 ; first DLL index x3 4659 f486 - lda DLLMEM,x 4660 f486 - and #%11110000 4661 f486 - ora finescrolly 4662 f486 - sta DLLMEM,x 4663 f486 - 4664 f486 - ldx temp2 ; last DLL index x3 4665 f486 - lda DLLMEM,x 4666 f486 - and #%11110000 4667 f486 - ora finescrolly 4668 f486 - eor #(WZONEHEIGHT-1) 4669 f486 - sta DLLMEM,x 4670 f486 - rts 4671 f486 endif ; FINESCROLLENABLED 4672 f486 4673 f486 - ifconst USED_ADJUSTVISIBLE 4674 f486 -adjustvisible 4675 f486 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 4676 f486 - jsr waitforvblankstart ; ensure vblank just started 4677 f486 - ldx visibleDLLstart 4678 f486 -findfirstinterrupt 4679 f486 - lda DLLMEM,x 4680 f486 - bmi foundfirstinterrupt 4681 f486 - inx 4682 f486 - inx 4683 f486 - inx 4684 f486 - bne findfirstinterrupt 4685 f486 -foundfirstinterrupt 4686 f486 - and #%01111111 ; clear the interrupt bit 4687 f486 - sta DLLMEM,x 4688 f486 - ifconst DOUBLEBUFFER 4689 f486 - sta DLLMEM+DBOFFSET,x 4690 f486 - endif ; DOUBLEBUFFER 4691 f486 - ldx overscanDLLstart 4692 f486 -findlastinterrupt 4693 f486 - lda DLLMEM,x 4694 f486 - bmi foundlastinterrupt 4695 f486 - dex 4696 f486 - dex 4697 f486 - dex 4698 f486 - bne findlastinterrupt 4699 f486 -foundlastinterrupt 4700 f486 - and #%01111111 ; clear the interrupt bit 4701 f486 - sta DLLMEM,x 4702 f486 - ifconst DOUBLEBUFFER 4703 f486 - sta DLLMEM+DBOFFSET,x 4704 f486 - endif ; DOUBLEBUFFER 4705 f486 - ;now we need to set the new interrupts 4706 f486 - clc 4707 f486 - lda temp1 4708 f486 - adc visibleDLLstart 4709 f486 - tax 4710 f486 - lda DLLMEM,x 4711 f486 - ora #%10000000 4712 f486 - sta DLLMEM,x 4713 f486 - ifconst DOUBLEBUFFER 4714 f486 - sta DLLMEM+DBOFFSET,x 4715 f486 - endif ; DOUBLEBUFFER 4716 f486 - clc 4717 f486 - lda temp2 4718 f486 - adc visibleDLLstart 4719 f486 - tax 4720 f486 - lda DLLMEM,x 4721 f486 - ora #%10000000 4722 f486 - sta DLLMEM,x 4723 f486 - ifconst DOUBLEBUFFER 4724 f486 - sta DLLMEM+DBOFFSET,x 4725 f486 - endif ; DOUBLEBUFFER 4726 f486 - jsr vblankresync 4727 f486 - rts 4728 f486 endif ; USED_ADJUSTVISIBLE 4729 f486 4730 f486 vblankresync 4731 f486 20 24 f5 jsr waitforvblankstart ; ensure vblank just started 4732 f489 a9 00 lda #0 4733 f48b 85 4d sta visibleover 4734 f48d a9 03 lda #3 4735 f48f 8d b2 01 sta interruptindex 4736 f492 60 rts 4737 f493 4738 f493 createallgamedlls 4739 f493 a2 00 ldx #0 4740 f495 a9 19 lda #NVLINES 4741 f497 ac 09 21 ldy paldetected 4742 f49a f0 03 beq skipcreatePALpadding 4743 f49c 18 clc 4744 f49d 69 15 adc #21 4745 f49f skipcreatePALpadding 4746 f49f 20 d4 f4 jsr createnonvisibledlls 4747 f4a2 8e 3c 21 stx visibleDLLstart 4748 f4a5 20 05 f5 jsr createvisiblezones 4749 f4a8 8e 3d 21 stx overscanDLLstart 4750 f4ab createallgamedllscontinue 4751 f4ab a9 50 lda #(NVLINES+55) ; extras for PAL 4752 f4ad 20 d4 f4 jsr createnonvisibledlls 4753 f4b0 4754 f4b0 ae 3c 21 ldx visibleDLLstart 4755 f4b3 bd 00 18 lda DLLMEM,x 4756 f4b6 09 80 ora #%10000000 ; NMI 1 - start of visible screen 4757 f4b8 9d 00 18 sta DLLMEM,x 4758 f4bb - ifconst DOUBLEBUFFER 4759 f4bb - sta DLLMEM+DBOFFSET,x 4760 f4bb endif ; DOUBLEBUFFER 4761 f4bb 4762 f4bb ae 3d 21 ldx overscanDLLstart 4763 f4be bd 00 18 lda DLLMEM,x 4764 f4c1 09 83 ora #%10000011 ; NMI 2 - end of visible screen 4765 f4c3 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 4766 f4c5 9d 00 18 sta DLLMEM,x 4767 f4c8 - ifconst DOUBLEBUFFER 4768 f4c8 - sta DLLMEM+DBOFFSET,x 4769 f4c8 endif ; DOUBLEBUFFER 4770 f4c8 4771 f4c8 e8 inx 4772 f4c9 e8 inx 4773 f4ca e8 inx 4774 f4cb 4775 f4cb bd 00 18 lda DLLMEM,x 4776 f4ce 09 80 ora #%10000000 ; NMI 3 - deeper overscan 4777 f4d0 9d 00 18 sta DLLMEM,x 4778 f4d3 - ifconst DOUBLEBUFFER 4779 f4d3 - sta DLLMEM+DBOFFSET,x 4780 f4d3 endif ; DOUBLEBUFFER 4781 f4d3 4782 f4d3 60 rts 4783 f4d4 4784 f4d4 createnonvisibledlls 4785 f4d4 85 42 sta temp1 4786 f4d6 4a lsr 4787 f4d7 4a lsr 4788 f4d8 4a lsr 4789 f4d9 4a lsr ; /16 4790 f4da f0 09 beq skipcreatenonvisibledlls1loop 4791 f4dc a8 tay 4792 f4dd createnonvisibledlls1loop 4793 f4dd a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 4794 f4df 20 f4 f4 jsr createblankdllentry 4795 f4e2 88 dey 4796 f4e3 d0 f8 bne createnonvisibledlls1loop 4797 f4e5 skipcreatenonvisibledlls1loop 4798 f4e5 a5 42 lda temp1 4799 f4e7 29 0f and #%00001111 4800 f4e9 f0 08 beq createnonvisibledllsreturn 4801 f4eb 38 sec 4802 f4ec e9 01 sbc #1 4803 f4ee 09 40 ora #%01000000 4804 f4f0 20 f4 f4 jsr createblankdllentry 4805 f4f3 createnonvisibledllsreturn 4806 f4f3 60 rts 4807 f4f4 4808 f4f4 createblankdllentry 4809 f4f4 9d 00 18 sta DLLMEM,x 4810 f4f7 - ifconst DOUBLEBUFFER 4811 f4f7 - sta DLLMEM+DBOFFSET,x 4812 f4f7 endif ; DOUBLEBUFFER 4813 f4f7 e8 inx 4814 f4f8 a9 21 lda #$21 ; blank 4815 f4fa 9d 00 18 sta DLLMEM,x 4816 f4fd - ifconst DOUBLEBUFFER 4817 f4fd - sta DLLMEM+DBOFFSET,x 4818 f4fd endif ; DOUBLEBUFFER 4819 f4fd e8 inx 4820 f4fe a9 00 lda #$00 4821 f500 9d 00 18 sta DLLMEM,x 4822 f503 - ifconst DOUBLEBUFFER 4823 f503 - sta DLLMEM+DBOFFSET,x 4824 f503 endif ; DOUBLEBUFFER 4825 f503 e8 inx 4826 f504 60 rts 4827 f505 4828 f505 createvisiblezones 4829 f505 a0 00 ldy #0 4830 f507 createvisiblezonesloop 4831 f507 b9 54 f6 lda.w DLHEIGHT,y 4832 f50a 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 4833 f50c 9d 00 18 sta DLLMEM,x 4834 f50f - ifconst DOUBLEBUFFER 4835 f50f - sta DLLMEM+DBOFFSET,x 4836 f50f endif ; DOUBLEBUFFER 4837 f50f e8 inx 4838 f510 b9 24 f6 lda DLPOINTH,y 4839 f513 9d 00 18 sta DLLMEM,x 4840 f516 - ifconst DOUBLEBUFFER 4841 f516 - sta DLLMEM+DBOFFSET,x 4842 f516 endif ; DOUBLEBUFFER 4843 f516 e8 inx 4844 f517 b9 3c f6 lda DLPOINTL,y 4845 f51a 9d 00 18 sta DLLMEM,x 4846 f51d - ifconst DOUBLEBUFFER 4847 f51d - clc 4848 f51d - adc #DOUBLEBUFFEROFFSET 4849 f51d - sta DLLMEM+DBOFFSET,x 4850 f51d - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 4851 f51d - inc DLLMEM+DBOFFSET-1,x 4852 f51d -skiphidoublebufferadjust 4853 f51d endif ; DOUBLEBUFFER 4854 f51d e8 inx 4855 f51e c8 iny 4856 f51f c0 18 cpy #WZONECOUNT 4857 f521 d0 e4 bne createvisiblezonesloop 4858 f523 60 rts 4859 f524 4860 f524 waitforvblankstart 4861 f524 visibleoverwait 4862 f524 24 28 BIT MSTAT 4863 f526 10 fc bpl visibleoverwait 4864 f528 vblankstartwait 4865 f528 24 28 BIT MSTAT 4866 f52a 30 fc bmi vblankstartwait 4867 f52c 60 rts 4868 f52d 4869 f52d - ifconst DOUBLEBUFFER 4870 f52d -flipdisplaybufferreturn 4871 f52d - rts 4872 f52d -flipdisplaybuffer 4873 f52d - lda doublebufferstate 4874 f52d - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 4875 f52d - 4876 f52d - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 4877 f52d - 4878 f52d - lda doublebufferstate 4879 f52d - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 4880 f52d - tax 4881 f52d - 4882 f52d - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 4883 f52d - 4884 f52d -flipdisplaybufferwait1 4885 f52d - lda visibleover 4886 f52d - beq flipdisplaybufferwait1 4887 f52d - 4888 f52d -flipdisplaybufferwait 4889 f52d - lda visibleover 4890 f52d - bne flipdisplaybufferwait 4891 f52d - 4892 f52d - lda doublebufferminimumframetarget 4893 f52d - beq skipminimumframecode 4894 f52d - lda doublebufferminimumframeindex 4895 f52d - bne flipdisplaybufferwait1 4896 f52d - lda doublebufferminimumframetarget 4897 f52d - sta doublebufferminimumframeindex 4898 f52d -skipminimumframecode 4899 f52d - 4900 f52d - lda DLLMEMLutHi,x 4901 f52d - sta DPPH 4902 f52d - lda DLLMEMLutLo,x 4903 f52d - sta DPPL 4904 f52d - 4905 f52d - lda NewPageflipstate,x 4906 f52d - sta doublebufferstate 4907 f52d - lda NewPageflipoffset,x 4908 f52d - sta doublebufferdloffset 4909 f52d - 4910 f52d - lda doublebufferbufferdirty 4911 f52d - beq flipdisplaybufferreturn 4912 f52d - 4913 f52d - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 4914 f52d - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 4915 f52d - ; from the displayed buffer to the working buffer... 4916 f52d - 4917 f52d - lda doublebufferdloffset 4918 f52d - eor #DOUBLEBUFFEROFFSET 4919 f52d - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 4920 f52d - 4921 f52d - ldx #(WZONECOUNT-1) 4922 f52d -copybufferzoneloop 4923 f52d - 4924 f52d - lda DLPOINTL,x 4925 f52d - clc 4926 f52d - adc doublebufferdloffset 4927 f52d - sta temp1 4928 f52d - lda DLPOINTH,x 4929 f52d - adc #0 4930 f52d - sta temp2 4931 f52d - 4932 f52d - lda DLPOINTL,x 4933 f52d - clc 4934 f52d - adc temp6 4935 f52d - sta temp3 4936 f52d - lda DLPOINTH,x 4937 f52d - adc #0 4938 f52d - sta temp4 4939 f52d - 4940 f52d - lda dlendsave,x 4941 f52d - tay 4942 f52d -copybuffercharsloop 4943 f52d - lda (temp3),y 4944 f52d - sta (temp1),y 4945 f52d - dey 4946 f52d - bpl copybuffercharsloop 4947 f52d - dex 4948 f52d - bpl copybufferzoneloop 4949 f52d - lda #0 4950 f52d - sta doublebufferbufferdirty 4951 f52d - rts 4952 f52d - 4953 f52d -doublebufferoff 4954 f52d - lda #1 4955 f52d - sta doublebufferstate 4956 f52d - jsr flipdisplaybuffer 4957 f52d - lda #0 4958 f52d - sta doublebufferstate 4959 f52d - sta doublebufferdloffset 4960 f52d - rts 4961 f52d - 4962 f52d -DLLMEMLutLo 4963 f52d - .byte DLLMEM,>(DLLMEM+DBOFFSET) 4966 f52d -NewPageflipstate 4967 f52d - .byte 3,1 4968 f52d -NewPageflipoffset 4969 f52d - .byte DOUBLEBUFFEROFFSET,0 4970 f52d - 4971 f52d endif ; DOUBLEBUFFER 4972 f52d 4973 f52d - ifconst MOUSESUPPORT 4974 f52d - 4975 f52d -rotationalcompare 4976 f52d - ; old = 00 01 10 11 4977 f52d - .byte $00, $01, $ff, $00 ; new=00 4978 f52d - .byte $ff, $00, $00, $01 ; new=01 4979 f52d - .byte $01, $00, $00, $ff ; new=10 4980 f52d - .byte $00, $ff, $01, $00 ; new=11 4981 f52d - 4982 f52d - ; 0000YyXx st mouse 4983 f52d - 4984 f52d - ; 0000xyXY amiga mouse 4985 f52d - 4986 f52d - ifconst MOUSEXONLY 4987 f52d -amigatoataribits ; swap bits 1 and 4... 4988 f52d - .byte %0000, %0000, %0010, %0010 4989 f52d - .byte %0000, %0000, %0010, %0010 4990 f52d - .byte %0001, %0001, %0011, %0011 4991 f52d - .byte %0001, %0001, %0011, %0011 4992 f52d - 4993 f52d - ; null change bits 4994 f52d - .byte %0000, %0001, %0010, %0011 4995 f52d - .byte %0000, %0001, %0010, %0011 4996 f52d - .byte %0000, %0001, %0010, %0011 4997 f52d - .byte %0000, %0001, %0010, %0011 4998 f52d - 4999 f52d - else ; !MOUSEXONLY 5000 f52d - 5001 f52d -amigatoataribits ; swap bits 1 and 4... 5002 f52d - .byte %0000, %1000, %0010, %1010 5003 f52d - .byte %0100, %1100, %0110, %1110 5004 f52d - .byte %0001, %1001, %0011, %1011 5005 f52d - .byte %0101, %1101, %0111, %1111 5006 f52d - ; null change bits 5007 f52d - .byte %0000, %0001, %0010, %0011 5008 f52d - .byte %0100, %0101, %0110, %0111 5009 f52d - .byte %1000, %1001, %1010, %1011 5010 f52d - .byte %1100, %1101, %1110, %1111 5011 f52d - endif ; !MOUSEXONLY 5012 f52d - 5013 f52d endif ; MOUSESUPPORT 5014 f52d 5015 f52d mouse0update 5016 f52d - ifconst MOUSE0SUPPORT 5017 f52d - 5018 f52d -mousetableselect = inttemp2 5019 f52d -mousexdelta = inttemp3 5020 f52d -mouseydelta = inttemp4 5021 f52d -lastSWCHA = inttemp6 5022 f52d - 5023 f52d - ; 0000YyXx st mouse 5024 f52d - ; 0000xyXY amiga mouse 5025 f52d - 5026 f52d - lda #$ff 5027 f52d - sta lastSWCHA 5028 f52d - 5029 f52d - ldy port0control 5030 f52d - 5031 f52d - lda #%00010000 5032 f52d - cpy #9 ; AMIGA? 5033 f52d - bne skipamigabitsfix0 5034 f52d - lda #0 5035 f52d -skipamigabitsfix0 5036 f52d - sta mousetableselect 5037 f52d - ifconst DRIVINGBOOST 5038 f52d - cpy #6 ; DRIVING? 5039 f52d - bne skipdriving0setup 5040 f52d - ; swap mousex0 and mousey0. mousex seen by the 7800basic program 5041 f52d - ; trails the actual mousex0, so we can smoothly interpolate toward 5042 f52d - ; the actual position. This actual position is stored in mousey0 5043 f52d - ; after the driver has run. 5044 f52d - ldx mousex0 5045 f52d - lda mousey0 5046 f52d - stx mousey0 5047 f52d - sta mousex0 5048 f52d -skipdriving0setup 5049 f52d - endif ; DRIVINGBOOST 5050 f52d - 5051 f52d - lda #0 5052 f52d - sta mousexdelta 5053 f52d - sta mouseydelta 5054 f52d - 5055 f52d - ifnconst MOUSETIME 5056 f52d - ifnconst MOUSEXONLY 5057 f52d - lda #180 ; minimum for x+y 5058 f52d - else 5059 f52d - lda #100 ; minimum for just x 5060 f52d - endif 5061 f52d - else 5062 f52d - lda #MOUSETIME 5063 f52d - endif 5064 f52d - jsr SETTIM64T ; INTIM is in Y 5065 f52d - 5066 f52d -mouse0updateloop 5067 f52d - lda SWCHA 5068 f52d - asr #%11110000 ; Undocumented. A = A & #IMM, then LSR A. 5069 f52d - cmp lastSWCHA 5070 f52d - beq mouse0loopcondition 5071 f52d - sta lastSWCHA 5072 f52d - lsr 5073 f52d - lsr 5074 f52d - lsr 5075 f52d - 5076 f52d - ora mousetableselect ; atari/amiga decoding table selection 5077 f52d - 5078 f52d - ; st mice encode on different bits/joystick-lines than amiga mice... 5079 f52d - ; 0000YyXx st mouse 5080 f52d - ; 0000xyXY amiga mouse 5081 f52d - ; ...so can shuffle the amiga bits to reuse the st driver. 5082 f52d - tay 5083 f52d - lax amigatoataribits,y 5084 f52d - 5085 f52d - ifnconst MOUSEXONLY 5086 f52d - ; first the Y... 5087 f52d - and #%00001100 5088 f52d - ora mousecodey0 5089 f52d - tay 5090 f52d - lda rotationalcompare,y 5091 f52d - clc 5092 f52d - adc mouseydelta 5093 f52d - sta mouseydelta 5094 f52d - tya 5095 f52d - lsr 5096 f52d - lsr 5097 f52d - sta mousecodey0 5098 f52d - txa 5099 f52d - ; ...then the X... 5100 f52d - and #%00000011 5101 f52d - tax 5102 f52d - endif ; !MOUSEXONLY 5103 f52d - 5104 f52d - asl 5105 f52d - asl 5106 f52d - ora mousecodex0 5107 f52d - tay 5108 f52d - lda rotationalcompare,y 5109 f52d - adc mousexdelta ; carry was clear by previous ASL 5110 f52d - sta mousexdelta 5111 f52d - stx mousecodex0 5112 f52d -mouse0loopcondition 5113 f52d - lda TIMINT 5114 f52d - bpl mouse0updateloop 5115 f52d - 5116 f52d - ; *** adapt to selected device resolution. 5117 f52d - ldx port0control 5118 f52d - 5119 f52d - ifconst PRECISIONMOUSING 5120 f52d - ldy port0resolution 5121 f52d - bne mouse0halveddone 5122 f52d - cpx #6 ; half-resolution is no good for driving wheels 5123 f52d - beq mouse0halveddone 5124 f52d - ; resolution=0 is half mouse resolution, necessary for precision 5125 f52d - ; mousing on a 160x240 screen with a 1000 dpi mouse. 5126 f52d - 5127 f52d - lda mousexdelta 5128 f52d - cmp #$80 5129 f52d - ror ; do a signed divide by 2. 5130 f52d - clc 5131 f52d - adc mousex0 5132 f52d - sta mousex0 5133 f52d - ifnconst MOUSEXONLY 5134 f52d - lda mouseydelta 5135 f52d - clc 5136 f52d - adc mousey0 5137 f52d - sta mousey0 5138 f52d - endif 5139 f52d - ; at half resolution we just exit after updating x and y 5140 f52d - jmp longcontrollerreadsdone 5141 f52d -mouse0halveddone 5142 f52d - endif ; PRECISIONMOUSING 5143 f52d - 5144 f52d - ifnconst MOUSEXONLY 5145 f52d - asl mouseydelta ; *2 because Y resolution is finer 5146 f52d - ldy port0resolution 5147 f52d - dey 5148 f52d - lda #0 5149 f52d -mousey0resolutionfix 5150 f52d - clc 5151 f52d - adc mouseydelta 5152 f52d - dey 5153 f52d - bpl mousey0resolutionfix 5154 f52d - clc 5155 f52d - adc mousey0 5156 f52d - sta mousey0 5157 f52d - endif ; MOUSEXONLY 5158 f52d - 5159 f52d - ldy port0resolution 5160 f52d - dey 5161 f52d - lda #0 5162 f52d -mousex0resolutionfix 5163 f52d - clc 5164 f52d - adc mousexdelta 5165 f52d - dey 5166 f52d - bpl mousex0resolutionfix 5167 f52d - ifnconst DRIVINGBOOST 5168 f52d - clc 5169 f52d - adc mousex0 5170 f52d - sta mousex0 5171 f52d - else 5172 f52d - cpx #6 5173 f52d - beq carryonmouse0boost 5174 f52d - clc 5175 f52d - adc mousex0 5176 f52d - sta mousex0 5177 f52d - jmp longcontrollerreadsdone 5178 f52d -carryonmouse0boost 5179 f52d - sta mousexdelta 5180 f52d - clc 5181 f52d - adc mousecodey0 5182 f52d - sta mousecodey0 5183 f52d - clc 5184 f52d - adc mousex0 5185 f52d - tay ; save the target X 5186 f52d - adc mousey0 ; average in the smoothly-trailing X 5187 f52d - ror 5188 f52d - sta mousex0 ; mousex0 now has the smoothly trailing X 5189 f52d - sty mousey0 ; and mousey0 has the the target X 5190 f52d - 5191 f52d - ; check to see if the coordinate wrapped. If so, undo the averaging code. 5192 f52d - ; A has mousex0, the smoothly trailing X 5193 f52d - sbc mousey0 ; less the target X 5194 f52d - bpl skipabsolutedrive0 5195 f52d - eor #$ff 5196 f52d -skipabsolutedrive0 5197 f52d - cmp #64 ; just an unreasonably large change 5198 f52d - bcc skipdrivewrapfix0 5199 f52d - sty mousex0 ; if X wrapped, we catch the trailing X up to the target X 5200 f52d -skipdrivewrapfix0 5201 f52d - 5202 f52d - ; get rid of the tweening if the distance travelled was very small 5203 f52d - lda mousexdelta 5204 f52d - cmp port0resolution 5205 f52d - bcs skipbetweenfix0 5206 f52d - lda mousex0 5207 f52d - sta mousey0 5208 f52d -skipbetweenfix0 5209 f52d - 5210 f52d -drivingboostreductioncheck0 5211 f52d - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 5212 f52d - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 5213 f52d - ; negated again because truncation during BCD math results in 5214 f52d - ; differing magnitudes, depending if the value is +ve or -ve. 5215 f52d -driving0fix 5216 f52d - lax mousecodey0 5217 f52d - cmp #$80 5218 f52d - bcs driving0skipnegate1 5219 f52d - eor #$FF 5220 f52d - adc #1 5221 f52d - sta mousecodey0 5222 f52d -driving0skipnegate1 5223 f52d - cmp #$80 5224 f52d - ror 5225 f52d - cmp #$80 5226 f52d - ror 5227 f52d - cmp #$80 5228 f52d - ror 5229 f52d - sta inttemp1 5230 f52d - lda mousecodey0 5231 f52d - sec 5232 f52d - sbc inttemp1 5233 f52d - cpx #$80 5234 f52d - bcs driving0skipnegate2 5235 f52d - eor #$FF 5236 f52d - adc #1 5237 f52d -driving0skipnegate2 5238 f52d - sta mousecodey0 5239 f52d -drivingboostdone0 5240 f52d - endif ; DRIVINGBOOST 5241 f52d - 5242 f52d - jmp longcontrollerreadsdone 5243 f52d - 5244 f52d endif ; MOUSE0SUPPORT 5245 f52d 5246 f52d mouse1update 5247 f52d - ifconst MOUSE1SUPPORT 5248 f52d - 5249 f52d -mousetableselect = inttemp2 5250 f52d -mousexdelta = inttemp3 5251 f52d -mouseydelta = inttemp4 5252 f52d -lastSWCHA = inttemp6 5253 f52d - 5254 f52d - ; 0000YyXx st mouse 5255 f52d - ; 0000xyXY amiga mouse 5256 f52d - 5257 f52d - lda #$ff 5258 f52d - sta lastSWCHA 5259 f52d - 5260 f52d - ldy port1control 5261 f52d - 5262 f52d - lda #%00010000 5263 f52d - cpy #9 ; AMIGA? 5264 f52d - bne skipamigabitsfix1 5265 f52d - lda #0 5266 f52d -skipamigabitsfix1 5267 f52d - sta mousetableselect 5268 f52d - ifconst DRIVINGBOOST 5269 f52d - cpy #6 ; DRIVING? 5270 f52d - bne skipdriving1setup 5271 f52d - ; swap mousex1 and mousey1. mousex seen by the 7800basic program 5272 f52d - ; trails the actual mousex1, so we can smoothly interpolate toward 5273 f52d - ; the actual position. This actual position is stored in mousey1 5274 f52d - ; after the driver has run. 5275 f52d - ldx mousex1 5276 f52d - lda mousey1 5277 f52d - stx mousey1 5278 f52d - sta mousex1 5279 f52d -skipdriving1setup 5280 f52d - endif ; DRIVINGBOOST 5281 f52d - 5282 f52d - lda #0 5283 f52d - sta mousexdelta 5284 f52d - sta mouseydelta 5285 f52d - 5286 f52d - ifnconst MOUSETIME 5287 f52d - ifnconst MOUSEXONLY 5288 f52d - lda #180 ; minimum for x+y 5289 f52d - else 5290 f52d - lda #100 ; minimum for just x 5291 f52d - endif 5292 f52d - else 5293 f52d - lda #MOUSETIME 5294 f52d - endif 5295 f52d - jsr SETTIM64T ; INTIM is in Y 5296 f52d - 5297 f52d -mouse1updateloop 5298 f52d - lda SWCHA 5299 f52d - and #%00001111 5300 f52d - cmp lastSWCHA 5301 f52d - beq mouse1loopcondition 5302 f52d - sta lastSWCHA 5303 f52d - 5304 f52d - ora mousetableselect ; atari/amiga decoding table selection 5305 f52d - 5306 f52d - ; st mice encode on different bits/joystick-lines than amiga mice... 5307 f52d - ; 0000YyXx st mouse 5308 f52d - ; 0000xyXY amiga mouse 5309 f52d - ; ...so can shuffle the amiga bits to reuse the st driver. 5310 f52d - tay 5311 f52d - lax amigatoataribits,y 5312 f52d - 5313 f52d - ifnconst MOUSEXONLY 5314 f52d - ; first the Y... 5315 f52d - and #%00001100 5316 f52d - ora mousecodey1 5317 f52d - tay 5318 f52d - lda rotationalcompare,y 5319 f52d - clc 5320 f52d - adc mouseydelta 5321 f52d - sta mouseydelta 5322 f52d - tya 5323 f52d - lsr 5324 f52d - lsr 5325 f52d - sta mousecodey1 5326 f52d - txa 5327 f52d - ; ...then the X... 5328 f52d - and #%00000011 5329 f52d - tax 5330 f52d - endif ; !MOUSEXONLY 5331 f52d - 5332 f52d - asl 5333 f52d - asl 5334 f52d - ora mousecodex1 5335 f52d - tay 5336 f52d - lda rotationalcompare,y 5337 f52d - adc mousexdelta ; carry was clear by previous ASL 5338 f52d - sta mousexdelta 5339 f52d - stx mousecodex1 5340 f52d -mouse1loopcondition 5341 f52d - lda TIMINT 5342 f52d - bpl mouse1updateloop 5343 f52d - 5344 f52d - ; *** adapt to selected device resolution. 5345 f52d - ldx port1control 5346 f52d - 5347 f52d - ifconst PRECISIONMOUSING 5348 f52d - ldy port1resolution 5349 f52d - bne mouse1halveddone 5350 f52d - cpx #6 ; half-resolution is no good for driving wheels 5351 f52d - beq mouse1halveddone 5352 f52d - ; resolution=0 is half mouse resolution, necessary for precision 5353 f52d - ; mousing on a 160x240 screen with a 1000 dpi mouse. 5354 f52d - 5355 f52d - lda mousexdelta 5356 f52d - cmp #$80 5357 f52d - ror ; do a signed divide by 2. 5358 f52d - clc 5359 f52d - adc mousex1 5360 f52d - sta mousex1 5361 f52d - ifnconst MOUSEXONLY 5362 f52d - lda mouseydelta 5363 f52d - clc 5364 f52d - adc mousey1 5365 f52d - sta mousey1 5366 f52d - endif 5367 f52d - ; at half resolution we just exit after updating x and y 5368 f52d - jmp longcontrollerreadsdone 5369 f52d -mouse1halveddone 5370 f52d - endif ; PRECISIONMOUSING 5371 f52d - 5372 f52d - ifnconst MOUSEXONLY 5373 f52d - asl mouseydelta ; *2 because Y resolution is finer 5374 f52d - ldy port1resolution 5375 f52d - dey 5376 f52d - lda #0 5377 f52d -mousey1resolutionfix 5378 f52d - clc 5379 f52d - adc mouseydelta 5380 f52d - dey 5381 f52d - bpl mousey1resolutionfix 5382 f52d - clc 5383 f52d - adc mousey1 5384 f52d - sta mousey1 5385 f52d - endif ; MOUSEXONLY 5386 f52d - 5387 f52d - ldy port1resolution 5388 f52d - dey 5389 f52d - lda #0 5390 f52d -mousex1resolutionfix 5391 f52d - clc 5392 f52d - adc mousexdelta 5393 f52d - dey 5394 f52d - bpl mousex1resolutionfix 5395 f52d - ifnconst DRIVINGBOOST 5396 f52d - clc 5397 f52d - adc mousex1 5398 f52d - sta mousex1 5399 f52d - else 5400 f52d - cpx #6 5401 f52d - beq carryonmouse1boost 5402 f52d - clc 5403 f52d - adc mousex1 5404 f52d - sta mousex1 5405 f52d - jmp longcontrollerreadsdone 5406 f52d -carryonmouse1boost 5407 f52d - sta mousexdelta 5408 f52d - clc 5409 f52d - adc mousecodey1 5410 f52d - sta mousecodey1 5411 f52d - clc 5412 f52d - adc mousex1 5413 f52d - tay ; save the target X 5414 f52d - adc mousey1 ; average in the smoothly-trailing X 5415 f52d - ror 5416 f52d - sta mousex1 ; mousex0 now has the smoothly trailing X 5417 f52d - sty mousey1 ; and mousey0 has the the target X 5418 f52d - 5419 f52d - ; check to see if the coordinate wrapped. If so, undo the averaging code. 5420 f52d - ; A has mousex1, the smoothly trailing X 5421 f52d - sbc mousey1 ; less the target X 5422 f52d - bpl skipabsolutedrive1 5423 f52d - eor #$ff 5424 f52d -skipabsolutedrive1 5425 f52d - cmp #64 ; just an unreasonably large change 5426 f52d - bcc skipdrivewrapfix1 5427 f52d - sty mousex1 ; if X wrapped, we catch the trailing X up to the target X 5428 f52d -skipdrivewrapfix1 5429 f52d - 5430 f52d - ; get rid of the tweening if the distance travelled was very small 5431 f52d - lda mousexdelta 5432 f52d - cmp port1resolution 5433 f52d - bcs skipbetweenfix1 5434 f52d - lda mousex1 5435 f52d - sta mousey1 5436 f52d -skipbetweenfix1 5437 f52d - 5438 f52d -drivingboostreductioncheck1 5439 f52d - ; The below code amounts to mousecodey0=mousecodey0-(mousecodey0/8) 5440 f52d - ; +ve mousecodey0 is converted to -ve to do the calculation, and then 5441 f52d - ; negated again because truncation during BCD math results in 5442 f52d - ; differing magnitudes, depending if the value is +ve or -ve. 5443 f52d -driving1fix 5444 f52d - lax mousecodey1 5445 f52d - cmp #$80 5446 f52d - bcs driving0skipnegate1 5447 f52d - eor #$FF 5448 f52d - adc #1 5449 f52d - sta mousecodey1 5450 f52d -driving0skipnegate1 5451 f52d - cmp #$80 5452 f52d - ror 5453 f52d - cmp #$80 5454 f52d - ror 5455 f52d - cmp #$80 5456 f52d - ror 5457 f52d - sta inttemp1 5458 f52d - lda mousecodey1 5459 f52d - sec 5460 f52d - sbc inttemp1 5461 f52d - cpx #$80 5462 f52d - bcs driving1skipnegate2 5463 f52d - eor #$FF 5464 f52d - adc #1 5465 f52d -driving1skipnegate2 5466 f52d - sta mousecodey1 5467 f52d -drivingboostdone1 5468 f52d - endif ; DRIVINGBOOST 5469 f52d - 5470 f52d - jmp longcontrollerreadsdone 5471 f52d - 5472 f52d endif ; MOUSE!SUPPORT 5473 f52d 5474 f52d 5475 f52d 5476 f52d 5477 f52d paddleport0update 5478 f52d - ifconst PADDLE0SUPPORT 5479 f52d - lda #0 5480 f52d - sta VBLANK ; start charging the paddle caps 5481 f52d - ; lda #0 ; use PADDLE timing 5482 f52d - jsr SETTIM64T ; INTIM is in Y 5483 f52d - 5484 f52d -paddleport0updateloop 5485 f52d - lda INPT0 5486 f52d - bmi skippaddle0setposition 5487 f52d - sty paddleposition0 5488 f52d -skippaddle0setposition 5489 f52d - ifconst TWOPADDLESUPPORT 5490 f52d - lda INPT1 5491 f52d - bmi skippaddle1setposition 5492 f52d - sty paddleposition1 5493 f52d -skippaddle1setposition 5494 f52d - endif 5495 f52d - ldy INTIM 5496 f52d - cpy #TIMEOFFSET 5497 f52d - bcs paddleport0updateloop 5498 f52d - 5499 f52d - ifconst FOURPADDLESUPPORT 5500 f52d - jsr fourpaddlefixup 5501 f52d - else 5502 f52d - lda #%10000000 5503 f52d - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 5504 f52d - sec 5505 f52d - lda paddleposition0 5506 f52d - sbc #TIMEOFFSET 5507 f52d - ifconst PADDLESCALEX2 5508 f52d - asl 5509 f52d - endif 5510 f52d - 5511 f52d - ifnconst PADDLESMOOTHINGOFF 5512 f52d - clc 5513 f52d - adc paddleprevious0 5514 f52d - ror 5515 f52d - sta paddleprevious0 5516 f52d - endif 5517 f52d - 5518 f52d - sta paddleposition0 5519 f52d - 5520 f52d - ifconst TWOPADDLESUPPORT 5521 f52d - sec 5522 f52d - lda paddleposition1 5523 f52d - sbc #TIMEOFFSET 5524 f52d - ifconst PADDLESCALEX2 5525 f52d - asl 5526 f52d - endif 5527 f52d - 5528 f52d - ifnconst PADDLESMOOTHINGOFF 5529 f52d - clc 5530 f52d - adc paddleprevious1 5531 f52d - ror 5532 f52d - sta paddleprevious1 5533 f52d - endif 5534 f52d - sta paddleposition1 5535 f52d - endif ; TWOPADDLESUPPORT 5536 f52d - endif ; !FOURPADDLESUPPORT 5537 f52d - 5538 f52d - jmp longcontrollerreadsdone 5539 f52d endif 5540 f52d 5541 f52d paddleport1update 5542 f52d - ifconst PADDLE1SUPPORT 5543 f52d - lda #0 5544 f52d - sta VBLANK ; start charging the paddle caps 5545 f52d - 5546 f52d - ; lda #0 ; use PADDLE timing 5547 f52d - jsr SETTIM64T ; INTIM is in Y 5548 f52d - 5549 f52d -paddleport1updateloop 5550 f52d - lda INPT2 5551 f52d - bmi skippaddle2setposition 5552 f52d - sty paddleposition2 5553 f52d -skippaddle2setposition 5554 f52d - ifconst TWOPADDLESUPPORT 5555 f52d - lda INPT3 5556 f52d - bmi skippaddle3setposition 5557 f52d - sty paddleposition3 5558 f52d -skippaddle3setposition 5559 f52d - endif 5560 f52d - ldy INTIM 5561 f52d - cpy #TIMEOFFSET 5562 f52d - bcs paddleport1updateloop 5563 f52d - 5564 f52d - ifconst FOURPADDLESUPPORT 5565 f52d - jsr fourpaddlefixup 5566 f52d - else 5567 f52d - 5568 f52d - lda #%10000000 5569 f52d - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 5570 f52d - sec 5571 f52d - lda paddleposition2 5572 f52d - sbc #TIMEOFFSET 5573 f52d - ifconst PADDLESCALEX2 5574 f52d - asl 5575 f52d - endif 5576 f52d - 5577 f52d - ifnconst PADDLESMOOTHINGOFF 5578 f52d - clc 5579 f52d - adc paddleprevious2 5580 f52d - ror 5581 f52d - sta paddleprevious2 5582 f52d - endif 5583 f52d - 5584 f52d - sta paddleposition2 5585 f52d - 5586 f52d - ifconst TWOPADDLESUPPORT 5587 f52d - sec 5588 f52d - lda paddleposition3 5589 f52d - sbc #TIMEOFFSET 5590 f52d - ifconst PADDLESCALEX2 5591 f52d - asl 5592 f52d - endif 5593 f52d - 5594 f52d - ifnconst PADDLESMOOTHINGOFF 5595 f52d - clc 5596 f52d - adc paddleprevious3 5597 f52d - ror 5598 f52d - sta paddleprevious3 5599 f52d - endif 5600 f52d - sta paddleposition1 5601 f52d - endif ; TWOPADDLESUPPORT 5602 f52d - endif ; !FOURPADDLESUPPORT 5603 f52d - 5604 f52d - jmp longcontrollerreadsdone 5605 f52d endif 5606 f52d 5607 f52d paddleport01update 5608 f52d - ifconst FOURPADDLESUPPORT 5609 f52d - lda #0 5610 f52d - sta VBLANK ; start charging the paddle caps 5611 f52d - 5612 f52d - ; lda #0 ; use PADDLE timing 5613 f52d - jsr SETTIM64T ; INTIM is in Y 5614 f52d - 5615 f52d -paddleport01updateloop 5616 f52d - lda INPT0 5617 f52d - bmi skippaddle0setposition01 5618 f52d - sty paddleposition0 5619 f52d -skippaddle0setposition01 5620 f52d - lda INPT1 5621 f52d - bmi skippaddle1setposition01 5622 f52d - sty paddleposition1 5623 f52d -skippaddle1setposition01 5624 f52d - lda INPT2 5625 f52d - bmi skippaddle0setposition01 5626 f52d - sty paddleposition2 5627 f52d -skippaddle2setposition01 5628 f52d - lda INPT3 5629 f52d - bmi skippaddle3setposition01 5630 f52d - sty paddleposition3 5631 f52d -skippaddle3setposition01 5632 f52d - ldy INTIM 5633 f52d - cpy #TIMEOFFSET 5634 f52d - bcs paddleport01updateloop 5635 f52d - 5636 f52d -fourpaddlefixup 5637 f52d - lda #%10000000 5638 f52d - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 5639 f52d - ldx #1 5640 f52d -paddlefixuploop 5641 f52d - ; ground paddles if in-use, and correct the positions 5642 f52d - lda port0control,x 5643 f52d - cmp #3 5644 f52d - bne skippaddlefixup 5645 f52d - lda #%10000000 5646 f52d - sta VBLANK ; dump paddles to ground... this may not be great for genesis controllers 5647 f52d - sec 5648 f52d - lda paddleposition0,x 5649 f52d - sbc #TIMEOFFSET 5650 f52d - ifconst PADDLESCALEX2 5651 f52d - asl 5652 f52d - endif 5653 f52d - 5654 f52d - ifnconst PADDLESMOOTHINGOFF 5655 f52d - clc 5656 f52d - adc paddleprevious0,x 5657 f52d - ror 5658 f52d - sta paddleprevious0,x 5659 f52d - endif 5660 f52d - sta paddleposition0,x 5661 f52d - ifconst TWOPADDLESUPPORT 5662 f52d - sec 5663 f52d - lda paddleposition1,x 5664 f52d - sbc #TIMEOFFSET 5665 f52d - ifconst PADDLESCALEX2 5666 f52d - asl 5667 f52d - endif 5668 f52d - 5669 f52d - ifnconst PADDLESMOOTHINGOFF 5670 f52d - clc 5671 f52d - adc paddleprevious1,x 5672 f52d - ror 5673 f52d - sta paddleprevious1,x 5674 f52d - endif 5675 f52d - sta paddleposition1,x 5676 f52d - endif 5677 f52d -skippaddlefixup 5678 f52d - dex 5679 f52d - bpl paddlefixuploop 5680 f52d - 5681 f52d - jmp longcontrollerreadsdone 5682 f52d endif 5683 f52d 5684 f52d 5685 f52d paddlebuttonhandler ; outside of conditional, for button-handler LUT 5686 f52d - ifconst PADDLESUPPORT 5687 f52d - ; x=0|1 for port, rather than paddle #. 5688 f52d - ; Only the first paddle button will integrate into "joy0fire" testing. If the 5689 f52d - ; game wants to support 2 paddles, up to the game to instead test the 5690 f52d - ; joystick right+left directions instead. 5691 f52d - lda SWCHA ; top of nibble is first paddle button 5692 f52d - cpx #0 ; port 0? 5693 f52d - beq skippaddleport2shift 5694 f52d - asl ; shift second port to upper nibble 5695 f52d - asl 5696 f52d - asl 5697 f52d - asl 5698 f52d -skippaddleport2shift 5699 f52d - and #%10000000 5700 f52d - eor #%10000000 ; invert 5701 f52d - sta sINPT1,x 5702 f52d - jmp buttonreadloopreturn 5703 f52d endif ; PADDLESUPPORT 5704 f52d 5705 f52d mousebuttonhandler ; outside of conditional, for button-handler LUT 5706 f52d - ifconst MOUSESUPPORT 5707 f52d - ; stick the mouse buttons in the correct shadow register... 5708 f52d - txa 5709 f52d - asl 5710 f52d - tay ; y=x*2 5711 f52d - lda INPT4,x 5712 f52d - eor #%10000000 5713 f52d - lsr 5714 f52d - sta sINPT1,x 5715 f52d - 5716 f52d - lda INPT1,y 5717 f52d - and #%10000000 5718 f52d - eor #%10000000 5719 f52d - ora sINPT1,x 5720 f52d - sta sINPT1,x 5721 f52d - jmp buttonreadloopreturn 5722 f52d endif ; MOUSESUPPORT 5723 f52d 5724 f52d - ifconst KEYPADSUPPORT 5725 f52d - ; ** select keypad rows 0 to 3 over 4 frames... 5726 f52d -keypadrowselect 5727 f52d - ldy #0 5728 f52d - lda port0control 5729 f52d - cmp #7 5730 f52d - bne skipport0val 5731 f52d - iny ; y=y+1 5732 f52d -skipport0val 5733 f52d - lda port1control 5734 f52d - cmp #7 5735 f52d - bne skipport1val 5736 f52d - iny 5737 f52d - iny ; y=y+2 5738 f52d -skipport1val 5739 f52d - lda keyrowdirectionmask,y 5740 f52d - sta CTLSWA 5741 f52d - tya 5742 f52d - asl 5743 f52d - asl 5744 f52d - sta inttemp1 5745 f52d - lda framecounter 5746 f52d - and #3 5747 f52d - ora inttemp1 5748 f52d - tax 5749 f52d - lda keyrowselectvalue,x 5750 f52d - sta SWCHA 5751 f52d - rts 5752 f52d - 5753 f52d -keyrowdirectionmask 5754 f52d - .byte #%00000000 ; 0 : port0=input port1=input 5755 f52d - .byte #%11110000 ; 1 : port0=output port1=input 5756 f52d - .byte #%00001111 ; 2 : port0=input port1=output 5757 f52d - .byte #%11111111 ; 3 : port0=output port1=output 5758 f52d - 5759 f52d -keyrowselectvalue 5760 f52d - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 5761 f52d - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 5762 f52d - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 5763 f52d - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 5764 f52d endif ; KEYPADSUPPORT 5765 f52d 5766 f52d - ifconst KEYPADSUPPORT 5767 f52d - ; TODO - split into compile-time KEYPAD0SUPPORT and KEYPAD1SUPPORT 5768 f52d -keypadcolumnread 5769 f52d - lda port0control 5770 f52d - cmp #7 5771 f52d - bne skipkeypadcolumnread0 5772 f52d - lda framecounter 5773 f52d - and #3 5774 f52d - asl ; x2 because keypad variables are interleaved 5775 f52d - tax 5776 f52d - lda #0 5777 f52d - sta keypadmatrix0a,x 5778 f52d - lda INPT0 5779 f52d - cmp #$80 5780 f52d - rol keypadmatrix0a,x 5781 f52d - lda INPT1 5782 f52d - cmp #$80 5783 f52d - rol keypadmatrix0a,x 5784 f52d - lda INPT4 5785 f52d - cmp #$80 5786 f52d - rol keypadmatrix0a,x 5787 f52d - lda keypadmatrix0a,x 5788 f52d - eor #%00000111 5789 f52d - sta keypadmatrix0a,x 5790 f52d -skipkeypadcolumnread0 5791 f52d - 5792 f52d - lda port1control 5793 f52d - cmp #7 5794 f52d - bne skipkeypadcolumnread1 5795 f52d - lda framecounter 5796 f52d - and #3 5797 f52d - asl ; x2 because keypad variables are interleaved 5798 f52d - tax 5799 f52d - lda #0 5800 f52d - sta keypadmatrix1a,x 5801 f52d - rol keypadmatrix1a,x 5802 f52d - lda INPT2 5803 f52d - cmp #$80 5804 f52d - rol keypadmatrix1a,x 5805 f52d - lda INPT3 5806 f52d - cmp #$80 5807 f52d - rol keypadmatrix1a,x 5808 f52d - lda INPT5 5809 f52d - cmp #$80 5810 f52d - rol keypadmatrix1a,x 5811 f52d - lda keypadmatrix1a,x 5812 f52d - eor #%00000111 5813 f52d - sta keypadmatrix1a,x 5814 f52d -skipkeypadcolumnread1 5815 f52d - rts 5816 f52d endif ; KEYPADSUPPORT 5817 f52d 5818 f52d setportforinput 5819 f52d a5 e4 lda CTLSWAs 5820 f52f 3d 38 f5 and allpinsinputlut,x 5821 f532 85 e4 sta CTLSWAs 5822 f534 8d 81 02 sta CTLSWA 5823 f537 60 rts 5824 f538 5825 f538 allpinsinputlut 5826 f538 0f f0 .byte.b $0F, $F0 5827 f53a 5828 f53a setonebuttonmode 5829 f53a a9 00 lda #0 5830 f53c 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 5831 f53e a9 14 lda #$14 5832 f540 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 5833 f543 a5 e5 lda CTLSWBs 5834 f545 1d 4e f5 ora thisjoy2buttonbit,x 5835 f548 85 e5 sta CTLSWBs 5836 f54a 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 5837 f54d 60 rts 5838 f54e 5839 f54e thisjoy2buttonbit 5840 f54e 04 10 .byte.b $04, $10 5841 f550 5842 f550 settwobuttonmode 5843 f550 a9 00 lda #0 5844 f552 85 01 sta VBLANK ; if we were on paddles, the line is grounded out. 5845 f554 a9 14 lda #$14 5846 f556 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 5847 f559 a5 e5 lda CTLSWBs 5848 f55b 3d 64 f5 and thisjoy2buttonmask,x 5849 f55e 85 e5 sta CTLSWBs 5850 f560 8d 82 02 sta SWCHB 5851 f563 60 rts 5852 f564 5853 f564 thisjoy2buttonmask 5854 f564 fb ef .byte.b $fb, $ef 5855 f566 5856 f566 ; Provided under the CC0 license. See the included LICENSE.txt for details. 5857 f566 5858 f566 START 5859 f566 start 5860 f566 5861 f566 ;******** more or less the Atari recommended startup procedure 5862 f566 5863 f566 78 sei 5864 f567 d8 cld 5865 f568 5866 f568 ifnconst NOTIALOCK 5867 f568 a9 07 lda #$07 5868 f56a - else 5869 f56a - lda #$06 5870 f56a endif 5871 f56a 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 5872 f56c a9 7f lda #$7F 5873 f56e 85 3c sta CTRL ;disable DMA 5874 f570 a9 00 lda #$00 5875 f572 85 38 sta OFFSET 5876 f574 ifnconst NOTIALOCK 5877 f574 85 01 sta INPTCTRL 5878 f576 endif 5879 f576 a2 ff ldx #$FF 5880 f578 9a txs 5881 f579 5882 f579 ;************** Clear Memory 5883 f579 5884 f579 a2 40 ldx #$40 5885 f57b a9 00 lda #$00 5886 f57d crloop1 5887 f57d 95 00 sta $00,x ;Clear zero page 5888 f57f 9d 00 01 sta $100,x ;Clear page 1 5889 f582 e8 inx 5890 f583 d0 f8 bne crloop1 5891 f585 5892 f585 5893 f585 a0 00 ldy #$00 ;Clear Ram 5894 f587 a9 18 lda #$18 ;Start at $1800 5895 f589 85 81 sta $81 5896 f58b a9 00 lda #$00 5897 f58d 85 80 sta $80 5898 f58f crloop3 5899 f58f a9 00 lda #$00 5900 f591 91 80 sta ($80),y ;Store data 5901 f593 c8 iny ;Next byte 5902 f594 d0 f9 bne crloop3 ;Branch if not done page 5903 f596 e6 81 inc $81 ;Next page 5904 f598 a5 81 lda $81 5905 f59a c9 20 cmp #$20 ;End at $1FFF 5906 f59c d0 f1 bne crloop3 ;Branch if not 5907 f59e 5908 f59e a0 00 ldy #$00 ;Clear Ram 5909 f5a0 a9 22 lda #$22 ;Start at $2200 5910 f5a2 85 81 sta $81 5911 f5a4 a9 00 lda #$00 5912 f5a6 85 80 sta $80 5913 f5a8 crloop4 5914 f5a8 a9 00 lda #$00 5915 f5aa 91 80 sta ($80),y ;Store data 5916 f5ac c8 iny ;Next byte 5917 f5ad d0 f9 bne crloop4 ;Branch if not done page 5918 f5af e6 81 inc $81 ;Next page 5919 f5b1 a5 81 lda $81 5920 f5b3 c9 27 cmp #$27 ;End at $27FF 5921 f5b5 d0 f1 bne crloop4 ;Branch if not 5922 f5b7 5923 f5b7 a2 00 ldx #$00 5924 f5b9 a9 00 lda #$00 5925 f5bb crloop5 ;Clear 2100-213F, 2000-203F 5926 f5bb 9d 00 20 sta $2000,x 5927 f5be 9d 00 21 sta $2100,x 5928 f5c1 e8 inx 5929 f5c2 e0 40 cpx #$40 5930 f5c4 d0 f5 bne crloop5 5931 f5c6 5932 f5c6 85 80 sta $80 5933 f5c8 85 81 sta $81 5934 f5ca 85 82 sta $82 5935 f5cc 85 83 sta $83 5936 f5ce 5937 f5ce ;seed random number with hopefully-random timer value 5938 f5ce a9 01 lda #1 5939 f5d0 0d 84 02 ora INTIM 5940 f5d3 85 40 sta rand 5941 f5d5 5942 f5d5 ; detect the console type... 5943 f5d5 pndetectvblankstart 5944 f5d5 a5 28 lda MSTAT 5945 f5d7 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 5946 f5d9 pndetectvblankover 5947 f5d9 a5 28 lda MSTAT 5948 f5db 30 fc bmi pndetectvblankover ; then wait for it to be over 5949 f5dd a0 00 ldy #$00 5950 f5df a2 00 ldx #$00 5951 f5e1 pndetectvblankhappening 5952 f5e1 a5 28 lda MSTAT 5953 f5e3 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 5954 f5e5 85 24 sta WSYNC 5955 f5e7 85 24 sta WSYNC 5956 f5e9 e8 inx 5957 f5ea d0 f5 bne pndetectvblankhappening 5958 f5ec pndetectinvblank 5959 f5ec e0 7d cpx #125 5960 f5ee 90 02 bcc pndetecispal 5961 f5f0 a0 01 ldy #$01 5962 f5f2 pndetecispal 5963 f5f2 8c 09 21 sty paldetected 5964 f5f5 5965 f5f5 20 93 f4 jsr createallgamedlls 5966 f5f8 5967 f5f8 a9 18 lda #>DLLMEM 5968 f5fa 85 2c sta DPPH 5969 f5fc a9 00 lda # 255 6134 f624 -DOUBLEBUFFEROFFSET = 255 6135 f624 else 6136 f624 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 6137 f624 endif 6138 f624 6139 f624 - ifconst EXTRADLMEMORY 6140 f624 -SECONDDLHALFSTART SET $2300 6141 f624 endif 6142 f624 6143 f624 DLPOINTH 6144 f624 DLINDEX SET 0 6145 f624 REPEAT WZONECOUNT 6146 f624 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f624 - ifconst EXTRADLMEMORY 6148 f624 - if TMPMEMADDRESS > $1FFF 6149 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f624 - else 6151 f624 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f624 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f624 - endif 6155 f624 - endif ; TMPMEMADDRESS > $1FFF 6156 f624 endif ; EXTRADLMEMORY 6157 f624 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f624 18 .byte.b >TMPMEMADDRESS 6159 f624 DLINDEX SET DLINDEX + 1 6145 f624 REPEND 6146 f624 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f625 - ifconst EXTRADLMEMORY 6148 f625 - if TMPMEMADDRESS > $1FFF 6149 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f625 - else 6151 f625 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f625 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f625 - endif 6155 f625 - endif ; TMPMEMADDRESS > $1FFF 6156 f625 endif ; EXTRADLMEMORY 6157 f625 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f625 18 .byte.b >TMPMEMADDRESS 6159 f625 DLINDEX SET DLINDEX + 1 6145 f625 REPEND 6146 f625 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f626 - ifconst EXTRADLMEMORY 6148 f626 - if TMPMEMADDRESS > $1FFF 6149 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f626 - else 6151 f626 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f626 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f626 - endif 6155 f626 - endif ; TMPMEMADDRESS > $1FFF 6156 f626 endif ; EXTRADLMEMORY 6157 f626 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f626 19 .byte.b >TMPMEMADDRESS 6159 f626 DLINDEX SET DLINDEX + 1 6145 f626 REPEND 6146 f626 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f627 - ifconst EXTRADLMEMORY 6148 f627 - if TMPMEMADDRESS > $1FFF 6149 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f627 - else 6151 f627 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f627 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f627 - endif 6155 f627 - endif ; TMPMEMADDRESS > $1FFF 6156 f627 endif ; EXTRADLMEMORY 6157 f627 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f627 19 .byte.b >TMPMEMADDRESS 6159 f627 DLINDEX SET DLINDEX + 1 6145 f627 REPEND 6146 f627 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f628 - ifconst EXTRADLMEMORY 6148 f628 - if TMPMEMADDRESS > $1FFF 6149 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f628 - else 6151 f628 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f628 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f628 - endif 6155 f628 - endif ; TMPMEMADDRESS > $1FFF 6156 f628 endif ; EXTRADLMEMORY 6157 f628 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f628 19 .byte.b >TMPMEMADDRESS 6159 f628 DLINDEX SET DLINDEX + 1 6145 f628 REPEND 6146 f628 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f629 - ifconst EXTRADLMEMORY 6148 f629 - if TMPMEMADDRESS > $1FFF 6149 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f629 - else 6151 f629 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f629 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f629 - endif 6155 f629 - endif ; TMPMEMADDRESS > $1FFF 6156 f629 endif ; EXTRADLMEMORY 6157 f629 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f629 1a .byte.b >TMPMEMADDRESS 6159 f629 DLINDEX SET DLINDEX + 1 6145 f629 REPEND 6146 f629 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f62a - ifconst EXTRADLMEMORY 6148 f62a - if TMPMEMADDRESS > $1FFF 6149 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f62a - else 6151 f62a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f62a -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f62a - endif 6155 f62a - endif ; TMPMEMADDRESS > $1FFF 6156 f62a endif ; EXTRADLMEMORY 6157 f62a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f62a 1a .byte.b >TMPMEMADDRESS 6159 f62a DLINDEX SET DLINDEX + 1 6145 f62a REPEND 6146 f62a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f62b - ifconst EXTRADLMEMORY 6148 f62b - if TMPMEMADDRESS > $1FFF 6149 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f62b - else 6151 f62b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f62b -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f62b - endif 6155 f62b - endif ; TMPMEMADDRESS > $1FFF 6156 f62b endif ; EXTRADLMEMORY 6157 f62b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f62b 1a .byte.b >TMPMEMADDRESS 6159 f62b DLINDEX SET DLINDEX + 1 6145 f62b REPEND 6146 f62b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f62c - ifconst EXTRADLMEMORY 6148 f62c - if TMPMEMADDRESS > $1FFF 6149 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f62c - else 6151 f62c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f62c -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f62c - endif 6155 f62c - endif ; TMPMEMADDRESS > $1FFF 6156 f62c endif ; EXTRADLMEMORY 6157 f62c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f62c 1b .byte.b >TMPMEMADDRESS 6159 f62c DLINDEX SET DLINDEX + 1 6145 f62c REPEND 6146 f62c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f62d - ifconst EXTRADLMEMORY 6148 f62d - if TMPMEMADDRESS > $1FFF 6149 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f62d - else 6151 f62d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f62d -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f62d - endif 6155 f62d - endif ; TMPMEMADDRESS > $1FFF 6156 f62d endif ; EXTRADLMEMORY 6157 f62d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f62d 1b .byte.b >TMPMEMADDRESS 6159 f62d DLINDEX SET DLINDEX + 1 6145 f62d REPEND 6146 f62d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f62e - ifconst EXTRADLMEMORY 6148 f62e - if TMPMEMADDRESS > $1FFF 6149 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f62e - else 6151 f62e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f62e -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f62e - endif 6155 f62e - endif ; TMPMEMADDRESS > $1FFF 6156 f62e endif ; EXTRADLMEMORY 6157 f62e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f62e 1b .byte.b >TMPMEMADDRESS 6159 f62e DLINDEX SET DLINDEX + 1 6145 f62e REPEND 6146 f62e TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f62f - ifconst EXTRADLMEMORY 6148 f62f - if TMPMEMADDRESS > $1FFF 6149 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f62f - else 6151 f62f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f62f -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f62f - endif 6155 f62f - endif ; TMPMEMADDRESS > $1FFF 6156 f62f endif ; EXTRADLMEMORY 6157 f62f ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f62f 1b .byte.b >TMPMEMADDRESS 6159 f62f DLINDEX SET DLINDEX + 1 6145 f62f REPEND 6146 f62f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f630 - ifconst EXTRADLMEMORY 6148 f630 - if TMPMEMADDRESS > $1FFF 6149 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f630 - else 6151 f630 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f630 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f630 - endif 6155 f630 - endif ; TMPMEMADDRESS > $1FFF 6156 f630 endif ; EXTRADLMEMORY 6157 f630 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f630 1c .byte.b >TMPMEMADDRESS 6159 f630 DLINDEX SET DLINDEX + 1 6145 f630 REPEND 6146 f630 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f631 - ifconst EXTRADLMEMORY 6148 f631 - if TMPMEMADDRESS > $1FFF 6149 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f631 - else 6151 f631 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f631 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f631 - endif 6155 f631 - endif ; TMPMEMADDRESS > $1FFF 6156 f631 endif ; EXTRADLMEMORY 6157 f631 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f631 1c .byte.b >TMPMEMADDRESS 6159 f631 DLINDEX SET DLINDEX + 1 6145 f631 REPEND 6146 f631 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f632 - ifconst EXTRADLMEMORY 6148 f632 - if TMPMEMADDRESS > $1FFF 6149 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f632 - else 6151 f632 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f632 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f632 - endif 6155 f632 - endif ; TMPMEMADDRESS > $1FFF 6156 f632 endif ; EXTRADLMEMORY 6157 f632 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f632 1c .byte.b >TMPMEMADDRESS 6159 f632 DLINDEX SET DLINDEX + 1 6145 f632 REPEND 6146 f632 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f633 - ifconst EXTRADLMEMORY 6148 f633 - if TMPMEMADDRESS > $1FFF 6149 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f633 - else 6151 f633 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f633 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f633 - endif 6155 f633 - endif ; TMPMEMADDRESS > $1FFF 6156 f633 endif ; EXTRADLMEMORY 6157 f633 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f633 1d .byte.b >TMPMEMADDRESS 6159 f633 DLINDEX SET DLINDEX + 1 6145 f633 REPEND 6146 f633 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f634 - ifconst EXTRADLMEMORY 6148 f634 - if TMPMEMADDRESS > $1FFF 6149 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f634 - else 6151 f634 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f634 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f634 - endif 6155 f634 - endif ; TMPMEMADDRESS > $1FFF 6156 f634 endif ; EXTRADLMEMORY 6157 f634 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f634 1d .byte.b >TMPMEMADDRESS 6159 f634 DLINDEX SET DLINDEX + 1 6145 f634 REPEND 6146 f634 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f635 - ifconst EXTRADLMEMORY 6148 f635 - if TMPMEMADDRESS > $1FFF 6149 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f635 - else 6151 f635 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f635 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f635 - endif 6155 f635 - endif ; TMPMEMADDRESS > $1FFF 6156 f635 endif ; EXTRADLMEMORY 6157 f635 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f635 1d .byte.b >TMPMEMADDRESS 6159 f635 DLINDEX SET DLINDEX + 1 6145 f635 REPEND 6146 f635 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f636 - ifconst EXTRADLMEMORY 6148 f636 - if TMPMEMADDRESS > $1FFF 6149 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f636 - else 6151 f636 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f636 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f636 - endif 6155 f636 - endif ; TMPMEMADDRESS > $1FFF 6156 f636 endif ; EXTRADLMEMORY 6157 f636 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f636 1e .byte.b >TMPMEMADDRESS 6159 f636 DLINDEX SET DLINDEX + 1 6145 f636 REPEND 6146 f636 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f637 - ifconst EXTRADLMEMORY 6148 f637 - if TMPMEMADDRESS > $1FFF 6149 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f637 - else 6151 f637 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f637 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f637 - endif 6155 f637 - endif ; TMPMEMADDRESS > $1FFF 6156 f637 endif ; EXTRADLMEMORY 6157 f637 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f637 1e .byte.b >TMPMEMADDRESS 6159 f637 DLINDEX SET DLINDEX + 1 6145 f637 REPEND 6146 f637 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f638 - ifconst EXTRADLMEMORY 6148 f638 - if TMPMEMADDRESS > $1FFF 6149 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f638 - else 6151 f638 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f638 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f638 - endif 6155 f638 - endif ; TMPMEMADDRESS > $1FFF 6156 f638 endif ; EXTRADLMEMORY 6157 f638 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f638 1e .byte.b >TMPMEMADDRESS 6159 f638 DLINDEX SET DLINDEX + 1 6145 f638 REPEND 6146 f638 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f639 - ifconst EXTRADLMEMORY 6148 f639 - if TMPMEMADDRESS > $1FFF 6149 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f639 - else 6151 f639 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f639 -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f639 - endif 6155 f639 - endif ; TMPMEMADDRESS > $1FFF 6156 f639 endif ; EXTRADLMEMORY 6157 f639 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f639 1f .byte.b >TMPMEMADDRESS 6159 f639 DLINDEX SET DLINDEX + 1 6145 f639 REPEND 6146 f639 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f63a - ifconst EXTRADLMEMORY 6148 f63a - if TMPMEMADDRESS > $1FFF 6149 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f63a - else 6151 f63a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f63a -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f63a - endif 6155 f63a - endif ; TMPMEMADDRESS > $1FFF 6156 f63a endif ; EXTRADLMEMORY 6157 f63a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f63a 1f .byte.b >TMPMEMADDRESS 6159 f63a DLINDEX SET DLINDEX + 1 6145 f63a REPEND 6146 f63a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6147 f63b - ifconst EXTRADLMEMORY 6148 f63b - if TMPMEMADDRESS > $1FFF 6149 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6150 f63b - else 6151 f63b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6152 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6153 f63b -SECONDDLHALFSTART SET TMPMEMADDRESS 6154 f63b - endif 6155 f63b - endif ; TMPMEMADDRESS > $1FFF 6156 f63b endif ; EXTRADLMEMORY 6157 f63b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 6158 f63b 1f .byte.b >TMPMEMADDRESS 6159 f63b DLINDEX SET DLINDEX + 1 6160 f63c REPEND 6161 f63c 6162 f63c - ifconst EXTRADLMEMORY 6163 f63c - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 6164 f63c endif 6165 f63c 6166 f63c 6167 f63c DLPOINTL 6168 f63c DLINDEX SET 0 6169 f63c REPEAT WZONECOUNT 6170 f63c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6171 f63c - ifconst EXTRADLMEMORY 6172 f63c - if TMPMEMADDRESS > $1FFF 6173 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f63c - else 6175 f63c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f63c - endif 6178 f63c - endif ; TMPMEMADDRESS > $1FFF 6179 f63c endif ; EXTRADLMEMORY 6180 f63c 80 .byte.b $1FFF 6173 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f63d - else 6175 f63d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f63d - endif 6178 f63d - endif ; TMPMEMADDRESS > $1FFF 6179 f63d endif ; EXTRADLMEMORY 6180 f63d d0 .byte.b $1FFF 6173 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f63e - else 6175 f63e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f63e - endif 6178 f63e - endif ; TMPMEMADDRESS > $1FFF 6179 f63e endif ; EXTRADLMEMORY 6180 f63e 20 .byte.b $1FFF 6173 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f63f - else 6175 f63f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f63f - endif 6178 f63f - endif ; TMPMEMADDRESS > $1FFF 6179 f63f endif ; EXTRADLMEMORY 6180 f63f 70 .byte.b $1FFF 6173 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f640 - else 6175 f640 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f640 - endif 6178 f640 - endif ; TMPMEMADDRESS > $1FFF 6179 f640 endif ; EXTRADLMEMORY 6180 f640 c0 .byte.b $1FFF 6173 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f641 - else 6175 f641 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f641 - endif 6178 f641 - endif ; TMPMEMADDRESS > $1FFF 6179 f641 endif ; EXTRADLMEMORY 6180 f641 10 .byte.b $1FFF 6173 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f642 - else 6175 f642 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f642 - endif 6178 f642 - endif ; TMPMEMADDRESS > $1FFF 6179 f642 endif ; EXTRADLMEMORY 6180 f642 60 .byte.b $1FFF 6173 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f643 - else 6175 f643 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f643 - endif 6178 f643 - endif ; TMPMEMADDRESS > $1FFF 6179 f643 endif ; EXTRADLMEMORY 6180 f643 b0 .byte.b $1FFF 6173 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f644 - else 6175 f644 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f644 - endif 6178 f644 - endif ; TMPMEMADDRESS > $1FFF 6179 f644 endif ; EXTRADLMEMORY 6180 f644 00 .byte.b $1FFF 6173 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f645 - else 6175 f645 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f645 - endif 6178 f645 - endif ; TMPMEMADDRESS > $1FFF 6179 f645 endif ; EXTRADLMEMORY 6180 f645 50 .byte.b $1FFF 6173 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f646 - else 6175 f646 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f646 - endif 6178 f646 - endif ; TMPMEMADDRESS > $1FFF 6179 f646 endif ; EXTRADLMEMORY 6180 f646 a0 .byte.b $1FFF 6173 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f647 - else 6175 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f647 - endif 6178 f647 - endif ; TMPMEMADDRESS > $1FFF 6179 f647 endif ; EXTRADLMEMORY 6180 f647 f0 .byte.b $1FFF 6173 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f648 - else 6175 f648 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f648 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f648 - endif 6178 f648 - endif ; TMPMEMADDRESS > $1FFF 6179 f648 endif ; EXTRADLMEMORY 6180 f648 40 .byte.b $1FFF 6173 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f649 - else 6175 f649 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f649 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f649 - endif 6178 f649 - endif ; TMPMEMADDRESS > $1FFF 6179 f649 endif ; EXTRADLMEMORY 6180 f649 90 .byte.b $1FFF 6173 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f64a - else 6175 f64a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f64a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f64a - endif 6178 f64a - endif ; TMPMEMADDRESS > $1FFF 6179 f64a endif ; EXTRADLMEMORY 6180 f64a e0 .byte.b $1FFF 6173 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f64b - else 6175 f64b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f64b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f64b - endif 6178 f64b - endif ; TMPMEMADDRESS > $1FFF 6179 f64b endif ; EXTRADLMEMORY 6180 f64b 30 .byte.b $1FFF 6173 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f64c - else 6175 f64c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f64c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f64c - endif 6178 f64c - endif ; TMPMEMADDRESS > $1FFF 6179 f64c endif ; EXTRADLMEMORY 6180 f64c 80 .byte.b $1FFF 6173 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f64d - else 6175 f64d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f64d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f64d - endif 6178 f64d - endif ; TMPMEMADDRESS > $1FFF 6179 f64d endif ; EXTRADLMEMORY 6180 f64d d0 .byte.b $1FFF 6173 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f64e - else 6175 f64e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f64e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f64e - endif 6178 f64e - endif ; TMPMEMADDRESS > $1FFF 6179 f64e endif ; EXTRADLMEMORY 6180 f64e 20 .byte.b $1FFF 6173 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f64f - else 6175 f64f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f64f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f64f - endif 6178 f64f - endif ; TMPMEMADDRESS > $1FFF 6179 f64f endif ; EXTRADLMEMORY 6180 f64f 70 .byte.b $1FFF 6173 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f650 - else 6175 f650 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f650 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f650 - endif 6178 f650 - endif ; TMPMEMADDRESS > $1FFF 6179 f650 endif ; EXTRADLMEMORY 6180 f650 c0 .byte.b $1FFF 6173 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f651 - else 6175 f651 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f651 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f651 - endif 6178 f651 - endif ; TMPMEMADDRESS > $1FFF 6179 f651 endif ; EXTRADLMEMORY 6180 f651 10 .byte.b $1FFF 6173 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f652 - else 6175 f652 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f652 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f652 - endif 6178 f652 - endif ; TMPMEMADDRESS > $1FFF 6179 f652 endif ; EXTRADLMEMORY 6180 f652 60 .byte.b $1FFF 6173 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6174 f653 - else 6175 f653 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6176 f653 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6177 f653 - endif 6178 f653 - endif ; TMPMEMADDRESS > $1FFF 6179 f653 endif ; EXTRADLMEMORY 6180 f653 b0 .byte.b $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 if DLINDEX = 0 6198 f654 18 80 ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 if DLINDEX = 1 6201 f654 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 if DLINDEX = 2 6204 f654 19 20 ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 if DLINDEX = 3 6207 f654 19 70 ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 if DLINDEX = 4 6210 f654 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 if DLINDEX = 5 6213 f654 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 if DLINDEX = 6 6216 f654 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 if DLINDEX = 7 6219 f654 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 if DLINDEX = 8 6222 f654 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 if DLINDEX = 9 6225 f654 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 if DLINDEX = 10 6228 f654 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 if DLINDEX = 11 6231 f654 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 if DLINDEX = 12 6234 f654 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 if DLINDEX = 13 6237 f654 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 if DLINDEX = 14 6240 f654 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 if DLINDEX = 15 6243 f654 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 if DLINDEX = 16 6246 f654 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 if DLINDEX = 17 6249 f654 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 if DLINDEX = 18 6252 f654 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 if DLINDEX = 19 6255 f654 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 if DLINDEX = 20 6258 f654 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 if DLINDEX = 21 6261 f654 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 if DLINDEX = 22 6264 f654 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 - if DLINDEX = 23 6267 f654 -ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6186 f654 REPEND 6187 f654 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 6188 f654 - ifconst EXTRADLMEMORY 6189 f654 - if TMPMEMADDRESS > $1FFF 6190 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6191 f654 - else 6192 f654 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 6193 f654 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 6194 f654 - endif 6195 f654 - endif ; TMPMEMADDRESS > $1FFF 6196 f654 endif ; EXTRADLMEMORY 6197 f654 - if DLINDEX = 0 6198 f654 -ZONE0ADDRESS = TMPMEMADDRESS 6199 f654 endif 6200 f654 - if DLINDEX = 1 6201 f654 -ZONE1ADDRESS = TMPMEMADDRESS 6202 f654 endif 6203 f654 - if DLINDEX = 2 6204 f654 -ZONE2ADDRESS = TMPMEMADDRESS 6205 f654 endif 6206 f654 - if DLINDEX = 3 6207 f654 -ZONE3ADDRESS = TMPMEMADDRESS 6208 f654 endif 6209 f654 - if DLINDEX = 4 6210 f654 -ZONE4ADDRESS = TMPMEMADDRESS 6211 f654 endif 6212 f654 - if DLINDEX = 5 6213 f654 -ZONE5ADDRESS = TMPMEMADDRESS 6214 f654 endif 6215 f654 - if DLINDEX = 6 6216 f654 -ZONE6ADDRESS = TMPMEMADDRESS 6217 f654 endif 6218 f654 - if DLINDEX = 7 6219 f654 -ZONE7ADDRESS = TMPMEMADDRESS 6220 f654 endif 6221 f654 - if DLINDEX = 8 6222 f654 -ZONE8ADDRESS = TMPMEMADDRESS 6223 f654 endif 6224 f654 - if DLINDEX = 9 6225 f654 -ZONE9ADDRESS = TMPMEMADDRESS 6226 f654 endif 6227 f654 - if DLINDEX = 10 6228 f654 -ZONE10ADDRESS = TMPMEMADDRESS 6229 f654 endif 6230 f654 - if DLINDEX = 11 6231 f654 -ZONE11ADDRESS = TMPMEMADDRESS 6232 f654 endif 6233 f654 - if DLINDEX = 12 6234 f654 -ZONE12ADDRESS = TMPMEMADDRESS 6235 f654 endif 6236 f654 - if DLINDEX = 13 6237 f654 -ZONE13ADDRESS = TMPMEMADDRESS 6238 f654 endif 6239 f654 - if DLINDEX = 14 6240 f654 -ZONE14ADDRESS = TMPMEMADDRESS 6241 f654 endif 6242 f654 - if DLINDEX = 15 6243 f654 -ZONE15ADDRESS = TMPMEMADDRESS 6244 f654 endif 6245 f654 - if DLINDEX = 16 6246 f654 -ZONE16ADDRESS = TMPMEMADDRESS 6247 f654 endif 6248 f654 - if DLINDEX = 17 6249 f654 -ZONE17ADDRESS = TMPMEMADDRESS 6250 f654 endif 6251 f654 - if DLINDEX = 18 6252 f654 -ZONE18ADDRESS = TMPMEMADDRESS 6253 f654 endif 6254 f654 - if DLINDEX = 19 6255 f654 -ZONE19ADDRESS = TMPMEMADDRESS 6256 f654 endif 6257 f654 - if DLINDEX = 20 6258 f654 -ZONE20ADDRESS = TMPMEMADDRESS 6259 f654 endif 6260 f654 - if DLINDEX = 21 6261 f654 -ZONE21ADDRESS = TMPMEMADDRESS 6262 f654 endif 6263 f654 - if DLINDEX = 22 6264 f654 -ZONE22ADDRESS = TMPMEMADDRESS 6265 f654 endif 6266 f654 if DLINDEX = 23 6267 f654 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 6268 f654 endif 6269 f654 - if DLINDEX = 24 6270 f654 -ZONE24ADDRESS = TMPMEMADDRESS 6271 f654 endif 6272 f654 - if DLINDEX = 25 6273 f654 -ZONE25ADDRESS = TMPMEMADDRESS 6274 f654 endif 6275 f654 - if DLINDEX = 26 6276 f654 -ZONE26ADDRESS = TMPMEMADDRESS 6277 f654 endif 6278 f654 - if DLINDEX = 27 6279 f654 -ZONE27ADDRESS = TMPMEMADDRESS 6280 f654 endif 6281 f654 DLINDEX SET DLINDEX + 1 6282 f654 REPEND 6283 f654 6284 f654 $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 6285 f654 echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 6286 f654 6287 f654 DLHEIGHT 6288 f654 REPEAT WZONECOUNT 6289 f654 07 .byte.b (WZONEHEIGHT-1) 6288 f654 REPEND 6289 f655 07 .byte.b (WZONEHEIGHT-1) 6288 f655 REPEND 6289 f656 07 .byte.b (WZONEHEIGHT-1) 6288 f656 REPEND 6289 f657 07 .byte.b (WZONEHEIGHT-1) 6288 f657 REPEND 6289 f658 07 .byte.b (WZONEHEIGHT-1) 6288 f658 REPEND 6289 f659 07 .byte.b (WZONEHEIGHT-1) 6288 f659 REPEND 6289 f65a 07 .byte.b (WZONEHEIGHT-1) 6288 f65a REPEND 6289 f65b 07 .byte.b (WZONEHEIGHT-1) 6288 f65b REPEND 6289 f65c 07 .byte.b (WZONEHEIGHT-1) 6288 f65c REPEND 6289 f65d 07 .byte.b (WZONEHEIGHT-1) 6288 f65d REPEND 6289 f65e 07 .byte.b (WZONEHEIGHT-1) 6288 f65e REPEND 6289 f65f 07 .byte.b (WZONEHEIGHT-1) 6288 f65f REPEND 6289 f660 07 .byte.b (WZONEHEIGHT-1) 6288 f660 REPEND 6289 f661 07 .byte.b (WZONEHEIGHT-1) 6288 f661 REPEND 6289 f662 07 .byte.b (WZONEHEIGHT-1) 6288 f662 REPEND 6289 f663 07 .byte.b (WZONEHEIGHT-1) 6288 f663 REPEND 6289 f664 07 .byte.b (WZONEHEIGHT-1) 6288 f664 REPEND 6289 f665 07 .byte.b (WZONEHEIGHT-1) 6288 f665 REPEND 6289 f666 07 .byte.b (WZONEHEIGHT-1) 6288 f666 REPEND 6289 f667 07 .byte.b (WZONEHEIGHT-1) 6288 f667 REPEND 6289 f668 07 .byte.b (WZONEHEIGHT-1) 6288 f668 REPEND 6289 f669 07 .byte.b (WZONEHEIGHT-1) 6288 f669 REPEND 6289 f66a 07 .byte.b (WZONEHEIGHT-1) 6288 f66a REPEND 6289 f66b 07 .byte.b (WZONEHEIGHT-1) 6290 f66c REPEND 6291 f66c 6292 f66c ; Provided under the CC0 license. See the included LICENSE.txt for details. 6293 f66c 6294 f66c ; a simple guard, than ensures the 7800basic code hasn't 6295 f66c ; spilled into the encryption area... 2322 bytes left in the 7800basic reserved area. 6296 f66c echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 6297 f66c - if (*>$FF7D) 6298 f66c - ERR ; abort the assembly 6299 f66c endif 6300 f66c ; Provided under the CC0 license. See the included LICENSE.txt for details. 6301 f66c 6302 f66c - ifconst DEV 6303 f66c - ifnconst ZONEHEIGHT 6304 f66c - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 6305 f66c - else 6306 f66c - if ZONEHEIGHT = 8 6307 f66c - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 6308 f66c - else 6309 f66c - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 6310 f66c - endif 6311 f66c - endif 6312 f66c endif 6313 f66c 6314 f66c ; FF7E/FF7F contains the 7800basic crc checksum word 6315 f66c 6316 f66c ; FF80 - FFF7 contains the 7800 encryption key 6317 f66c 6318 f66c ifnconst bankswitchmode 6319 fff8 ORG $FFF8 6320 fff8 - else 6321 fff8 - ifconst ROM128K 6322 fff8 - ORG $27FF8 6323 fff8 - RORG $FFF8 6324 fff8 - endif 6325 fff8 - ifconst ROM144K 6326 fff8 - ORG $27FF8 6327 fff8 - RORG $FFF8 6328 fff8 - endif 6329 fff8 - ifconst ROM256K 6330 fff8 - ORG $47FF8 6331 fff8 - RORG $FFF8 6332 fff8 - endif 6333 fff8 - ifconst ROM272K 6334 fff8 - ORG $47FF8 6335 fff8 - RORG $FFF8 6336 fff8 - endif 6337 fff8 - ifconst ROM512K 6338 fff8 - ORG $87FF8 6339 fff8 - RORG $FFF8 6340 fff8 - endif 6341 fff8 - ifconst ROM528K 6342 fff8 - ORG $87FF8 6343 fff8 - RORG $FFF8 6344 fff8 - endif 6345 fff8 endif 6346 fff8 6347 fff8 6348 fff8 ff .byte.b $FF ; region verification. $FF=all regions 6349 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 6350 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 6351 fffa 6352 fffa ;Vectors 6353 fffa 00 f0 .word.w NMI 6354 fffc 66 f5 .word.w START 6355 fffe 66 f0 .word.w IRQ 6356 10000