------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_Vertical_Shooter_Rewrite1.bas.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 ???? ; EOF 188 10000 ???? ; 189 10000 ???? ; speakjet.inc 190 10000 ???? ; 191 10000 ???? ; 192 10000 ???? ; AtariVox Speech Synth Driver 193 10000 ???? ; 194 10000 ???? ; By Alex Herbert, 2004 195 10000 ???? ; 196 10000 ???? 197 10000 ???? 198 10000 ???? 199 10000 ???? 200 10000 ???? ; Constants 201 10000 ???? 202 10000 ???? 203 10000 ???? 00 01 SERIAL_OUTMASK equ $01 204 10000 ???? 00 02 SERIAL_RDYMASK equ $02 205 10000 ???? 206 10000 ???? 207 10000 ???? 208 10000 ???? ; Macros 209 10000 ???? 210 10000 ???? mac spkout 211 10000 ???? 212 10000 ???? ; check buffer-full status 213 10000 ???? lda SWCHA 214 10000 ???? and #SERIAL_RDYMASK 215 10000 ???? beq .speech_done 216 10000 ???? 217 10000 ???? ; get next speech byte 218 10000 ???? ldy #$00 219 10000 ???? lda (speech_addr),y 220 10000 ???? 221 10000 ???? ; invert data and check for end of string 222 10000 ???? eor #$ff 223 10000 ???? ;sta BACKGRND ; debug - uncomment to flash the background color with vox data 224 10000 ???? beq .speech_done 225 10000 ???? sta {1} 226 10000 ???? 227 10000 ???? ; increment speech pointer 228 10000 ???? inc speech_addr 229 10000 ???? bne .incaddr_skip 230 10000 ???? inc speech_addr+1 231 10000 ???? .incaddr_skip 232 10000 ???? 233 10000 ???? ; output byte as serial data 234 10000 ???? 235 10000 ???? sec ; start bit 236 10000 ???? .byteout_loop 237 10000 ???? ; put carry flag into bit 0 of SWACNT, perserving other bits 238 10000 ???? lda SWACNT ; 4 239 10000 ???? and #$fe ; 2 6 240 10000 ???? adc #$00 ; 2 8 241 10000 ???? sta SWACNT ; 4 12 242 10000 ???? 243 10000 ???? ; 10 bits sent? (1 start bit, 8 data bits, 1 stop bit) 244 10000 ???? cpy #$09 ; 2 14 245 10000 ???? beq .speech_done ; 2 16 246 10000 ???? iny ; 2 18 247 10000 ???? 248 10000 ???? ; the 7800 is 1.5x faster than the 2600. Waste more cycles here 249 10000 ???? ; to match the original baud rate... 250 10000 ???? ;ldx #$07 ; 2600 251 10000 ???? ldx #$0D 252 10000 ???? 253 10000 ???? .delay_loop 254 10000 ???? dex ; 255 10000 ???? bne .delay_loop ; 36 54 256 10000 ???? 257 10000 ???? ; shift next data bit into carry 258 10000 ???? lsr {1} ; 5 59 259 10000 ???? 260 10000 ???? ; and loop (branch always taken) 261 10000 ???? bpl .byteout_loop ; 3 62 cycles for loop 262 10000 ???? 263 10000 ???? .speech_done 264 10000 ???? 265 10000 ???? endm 266 10000 ???? 267 10000 ???? 268 10000 ???? mac speak 269 10000 ???? 270 10000 ???? lda #<{1} 271 10000 ???? sta speech_addr 272 10000 ???? lda #>{1} 273 10000 ???? sta speech_addr+1 274 10000 ???? 275 10000 ???? endm 276 10000 ???? 277 10000 ???? 278 10000 ???? 279 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 280 10000 ???? 281 10000 ???? processor 6502 282 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 ;Iterval Timer Read read-only 122 10000 ???? 02 94 TIM1T = $294 ;Set 1 CLK Interval (838 nsec/interval) write-only 123 10000 ???? 02 95 TIM8T = $295 ;Set 8 CLK Interval (6.7 usec/interval) write-only 124 10000 ???? 02 96 TIM64T = $296 ;Set 64 CLK Interval (63.6 usec/interval) write-only 125 10000 ???? 02 97 T1024T = $297 ;Set 1024 CLK Interval (858.2 usec/interval) write-only 126 10000 ???? 02 9e TIM64TI = $29E ;Interrupt timer 64T write-only 127 10000 ???? 128 10000 ???? ;XM 129 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 130 10000 ???? 04 70 XCTRL1 = $470 131 10000 ???? 04 78 XCTRL2 = $478 132 10000 ???? 04 7c XCTRL3 = $47c 133 10000 ???? 04 71 XCTRL4 = $471 134 10000 ???? 04 72 XCTRL5 = $472 135 10000 ???? 136 10000 ???? ; Pokey register relative locations, since its base may be different 137 10000 ???? ; depending on the hardware. 138 10000 ???? 00 00 PAUDF0 = $0 ; extra audio channels and frequencies 139 10000 ???? 00 01 PAUDC0 = $1 140 10000 ???? 00 02 PAUDF1 = $2 141 10000 ???? 00 03 PAUDC1 = $3 142 10000 ???? 00 04 PAUDF2 = $4 143 10000 ???? 00 05 PAUDC2 = $5 144 10000 ???? 00 06 PAUDF3 = $6 145 10000 ???? 00 07 PAUDC3 = $7 146 10000 ???? 00 08 PAUDCTL = $8 ; Audio Control 147 10000 ???? 00 0a PRANDOM = $A ; 17 bit polycounter pseudo random 148 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 0f vertical_shooting_1up_color3 = $0f 34 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 35 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 36 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 37 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 38 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 39 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 40 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 41 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 42 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 43 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 44 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 45 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 46 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 47 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 48 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 49 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 50 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 51 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 52 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 53 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 54 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 55 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 56 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 57 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 58 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 59 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 60 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 61 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 62 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 63 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 64 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 65 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 66 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 67 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 68 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 69 10000 ???? 00 00 atascii_color1 = $00 70 10000 ???? 00 0f atascii_color0 = $0f 71 10000 ???? 01 a9 lives = score1 72 10000 ???? 73 10000 ???? 01 66 r_direction = var38 74 10000 ???? 75 10000 ???? 01 65 r_movement7 = var37 76 10000 ???? 77 10000 ???? 01 64 r_movement6 = var36 78 10000 ???? 79 10000 ???? 01 63 r_movement5 = var35 80 10000 ???? 81 10000 ???? 01 62 r_movement4 = var34 82 10000 ???? 83 10000 ???? 01 61 r_movement3 = var33 84 10000 ???? 85 10000 ???? 01 60 r_movement2 = var32 86 10000 ???? 87 10000 ???? 01 5f r_movement1 = var31 88 10000 ???? 89 10000 ???? 01 5e gameover_flag = var30 90 10000 ???? 91 10000 ???? 01 5d extra_ship_slowdown = var29 92 10000 ???? 93 10000 ???? 01 5c extra_ship_flag = var28 94 10000 ???? 95 10000 ???? 01 5b extra_ship_y = var27 96 10000 ???? 97 10000 ???? 01 5a extra_ship_x = var26 98 10000 ???? 99 10000 ???? 01 59 power_upSlowdown = var25 100 10000 ???? 101 10000 ???? 01 58 power_upFlag = var24 102 10000 ???? 103 10000 ???? 01 57 power_upY = var23 104 10000 ???? 105 10000 ???? 01 56 power_upX = var22 106 10000 ???? 107 10000 ???? 01 55 enemy_bullet_slowdown = var21 108 10000 ???? 109 10000 ???? 01 54 enemy_bullet_flag = var20 110 10000 ???? 111 10000 ???? 01 53 enemy_bullet_y = var19 112 10000 ???? 113 10000 ???? 01 52 enemy_bullet_x = var18 114 10000 ???? 115 10000 ???? 01 51 enemy01_speed = var17 116 10000 ???? 117 10000 ???? 01 50 enemy01_slowdown = var16 118 10000 ???? 119 10000 ???? 01 4f enemy01_flag = var15 120 10000 ???? 121 10000 ???? 01 4e enemy01_y = var14 122 10000 ???? 123 10000 ???? 01 4d enemy01_x = var13 124 10000 ???? 125 10000 ???? 01 4c bulletSlowdown = var12 126 10000 ???? 127 10000 ???? 01 4b bulletY = var11 128 10000 ???? 129 10000 ???? 01 4a bulletX = var10 130 10000 ???? 131 10000 ???? 01 49 joyposright = var9 132 10000 ???? 133 10000 ???? 01 48 joyposleft = var8 134 10000 ???? 135 10000 ???? 01 47 joyposdown = var7 136 10000 ???? 137 10000 ???? 01 46 joyposup = var6 138 10000 ???? 139 10000 ???? 01 45 fire_debounce = var5 140 10000 ???? 141 10000 ???? 01 44 playerFlag = var4 142 10000 ???? 143 10000 ???? 01 43 playerY = var3 144 10000 ???? 145 10000 ???? 01 42 playerX = var2 146 10000 ???? 147 10000 ???? 01 41 frameCounter = var1 148 10000 ???? 149 10000 ???? 00 01 collisionwrap = 1 150 10000 ???? 00 01 NTSC = 1 151 10000 ???? 00 c0 SCREENHEIGHT = 192 152 10000 ???? 00 01 CHECKOVERWRITE = 1 153 10000 ???? 00 08 ZONEHEIGHT = 8 154 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 10000 ???? 01 a4 framecounter = $1A4 379 10000 ???? 01 a5 countdownseconds = $1A5 380 10000 ???? 01 a6 score0 = $1A6 ; $1A7 $1A8 381 10000 ???? 01 a9 score1 = $1A9 ; $1AA $1AB 382 10000 ???? 01 ac pausebuttonflag = $1AC 383 10000 ???? 01 ad valbufend = $1AD 384 10000 ???? 01 ae valbufendsave = $1AE 385 10000 ???? 01 af finescrollx = $1AF 386 10000 ???? 01 b0 finescrolly = $1B0 387 10000 ???? 01 b1 joybuttonmode = $1B1 ; used to track any joysticks that were changed to one-button mode 388 10000 ???? 01 b2 interruptindex = $1B2 389 10000 ???? 01 b3 tempavox = $1B3 390 10000 ???? 01 b4 doublebufferminimumframetarget = $1B4 391 10000 ???? 01 b5 doublebufferminimumframeindex = $1B5 392 10000 ???? 01 b6 pausedisable = $1B6 393 10000 ???? 01 b7 XCTRL1s = $1B7 394 10000 ???? 01 b8 spritecount = $1B8 395 10000 ???? 01 b9 avoxenable = $1B9 396 10000 ???? 397 10000 ???? 01 ba pokey1frames = $1BA 398 10000 ???? 01 bb pokey1tick = $1BB 399 10000 ???? 01 bc pokey2frames = $1BC 400 10000 ???? 01 bd pokey2tick = $1BD 401 10000 ???? 01 be pokey3frames = $1BE 402 10000 ???? 01 bf pokey3tick = $1BF 403 10000 ???? 01 c0 pokey4frames = $1C0 404 10000 ???? 01 c1 pokey4tick = $1C1 405 10000 ???? 01 c2 pokey1priority = $1C2 406 10000 ???? 01 c3 pokey1offset = $1C3 407 10000 ???? 01 c4 pokey2priority = $1C4 408 10000 ???? 01 c5 pokey2offset = $1C5 409 10000 ???? 01 c6 pokey3priority = $1C6 410 10000 ???? 01 c7 pokey3offset = $1C7 411 10000 ???? 01 c8 pokey4priority = $1C8 412 10000 ???? 01 c9 pokey4offset = $1C9 413 10000 ???? 414 10000 ???? 01 ca songtempo = $1CA 415 10000 ???? 01 cb songtick = $1CB 416 10000 ???? 417 10000 ???? 01 cc songchannel1layer1loops = $1CC 418 10000 ???? 01 cd songchannel2layer1loops = $1CD 419 10000 ???? 01 ce songchannel3layer1loops = $1CE 420 10000 ???? 01 cf songchannel4layer1loops = $1CF 421 10000 ???? 422 10000 ???? 01 d0 songchannel1layer2loops = $1D0 423 10000 ???? 01 d1 songchannel2layer2loops = $1D1 424 10000 ???? 01 d2 songchannel3layer2loops = $1D2 425 10000 ???? 01 d3 songchannel4layer2loops = $1D3 426 10000 ???? 427 10000 ???? 01 d4 songchannel1layer3loops = $1D4 428 10000 ???? 01 d5 songchannel2layer3loops = $1D5 429 10000 ???? 01 d6 songchannel3layer3loops = $1D6 430 10000 ???? 01 d7 songchannel4layer3loops = $1D7 431 10000 ???? 432 10000 ???? 01 d8 songchannel1busywait = $1D8 433 10000 ???? 01 d9 songchannel2busywait = $1D9 434 10000 ???? 01 da songchannel3busywait = $1DA 435 10000 ???? 01 db songchannel4busywait = $1DB 436 10000 ???? 437 10000 ???? 01 dc songchannel1stackdepth = $1DC 438 10000 ???? 01 dd songchannel2stackdepth = $1DD 439 10000 ???? 01 de songchannel3stackdepth = $1DE 440 10000 ???? 01 df songchannel4stackdepth = $1DF 441 10000 ???? 442 10000 ???? 01 e0 palframes = $1E0 443 10000 ???? 01 e1 palfastframe = $1E1 444 10000 ???? 445 10000 ???? 01 e2 port0control = $1E2 446 10000 ???? 01 e3 port1control = $1E3 447 10000 ???? 448 10000 ???? ; port#control values... 449 10000 ???? ; 1 = proline 450 10000 ???? ; 2 = lightgun 451 10000 ???? ; 3 = paddle 452 10000 ???? ; 4 = trakball 453 10000 ???? ; 5 = vcs joystick 454 10000 ???? ; 6 = driving 455 10000 ???? ; 7 = keypad 456 10000 ???? ; 8 = st mouse/cx80 457 10000 ???? ; 9 = amiga mouse 458 10000 ???? ; 10 = atarivox 459 10000 ???? 460 10000 ???? ; controller 0 data... 461 10000 ???? 01 e4 paddleposition0 = $1E4 462 10000 ???? 01 e4 keypadmatrix0a = $1E4 463 10000 ???? 01 e4 drivingposition0 = $1E4 464 10000 ???? 01 e4 trakballx0 = $1E4 465 10000 ???? 01 e4 mousex0 = $1E4 466 10000 ???? 01 e4 lighttgunx0 = $1E4 467 10000 ???? 468 10000 ???? ; controller 1 data... 469 10000 ???? 01 e5 paddleposition2 = $1E5 470 10000 ???? 01 e5 keypadmatrix1a = $1E5 471 10000 ???? 01 e5 drivingposition1 = $1E5 472 10000 ???? 01 e5 trakballx1 = $1E5 473 10000 ???? 01 e5 mousex1 = $1E5 474 10000 ???? 01 e5 lightgunx1 = $1E5 475 10000 ???? 476 10000 ???? ; controller 0 altdata... 477 10000 ???? 01 e6 paddleposition1 = $1E6 478 10000 ???? 01 e6 keypadmatrix0b = $1E6 479 10000 ???? 01 e6 trakbally0 = $1E6 480 10000 ???? 01 e6 mousey0 = $1E6 481 10000 ???? 01 e6 lightguny0 = $1E6 482 10000 ???? 483 10000 ???? ; controller 1 altdata... 484 10000 ???? 01 e7 paddleposition3 = $1E7 485 10000 ???? 01 e7 keypadmatrix1b = $1E7 486 10000 ???? 01 e7 trakbally1 = $1E7 487 10000 ???? 01 e7 mousey1 = $1E7 488 10000 ???? 01 e7 lightguny1 = $1E7 489 10000 ???? 490 10000 ???? ; controller state save. for trakball state+dir codes, rotary position codes 491 10000 ???? 01 e8 controller0statesave = $1E8 492 10000 ???? 01 e8 mousecodex0 = $1E8 493 10000 ???? 01 e8 trakballcodex0 = $1E8 494 10000 ???? 01 e8 keypadmatrix0c = $1E8 495 10000 ???? 496 10000 ???? 01 e9 controller1statesave = $1E9 497 10000 ???? 01 e9 mousecodex1 = $1E9 498 10000 ???? 01 e9 trakballcodex1 = $1E9 499 10000 ???? 01 e9 keypadmatrix1c = $1E9 500 10000 ???? 501 10000 ???? 01 ea keypadmatrix0d = $1EA 502 10000 ???? 01 ea mousecodey0 = $1EA 503 10000 ???? 01 ea trakballcodey0 = $1EA 504 10000 ???? 505 10000 ???? 01 eb keypadmatrix1d = $1EB 506 10000 ???? 01 eb mousecodey1 = $1EB 507 10000 ???? 01 eb trakballcodey1 = $1EB 508 10000 ???? 509 10000 ???? 01 ec genesisdetected0 = $1EC 510 10000 ???? 01 ed genesisdetected1 = $1ED 511 10000 ???? 512 10000 ???? ; $1EE - $1FF reserved for stack 513 10000 ???? ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_Vertical_Shooter_Rewrite1.bas.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 0f vertical_shooting_1up_color3 = $0f 34 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 35 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 36 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 37 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 38 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 39 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 40 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 41 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 42 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 43 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 44 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 45 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 46 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 47 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 48 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 49 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 50 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 51 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 52 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 53 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 54 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 55 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 56 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 57 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 58 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 59 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 60 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 61 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 62 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 63 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 64 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 65 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 66 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 67 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 68 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 69 10000 ???? 00 00 atascii_color1 = $00 70 10000 ???? 00 0f atascii_color0 = $0f 71 10000 ???? 01 a9 lives = score1 72 10000 ???? 73 10000 ???? 01 66 r_direction = var38 74 10000 ???? 75 10000 ???? 01 65 r_movement7 = var37 76 10000 ???? 77 10000 ???? 01 64 r_movement6 = var36 78 10000 ???? 79 10000 ???? 01 63 r_movement5 = var35 80 10000 ???? 81 10000 ???? 01 62 r_movement4 = var34 82 10000 ???? 83 10000 ???? 01 61 r_movement3 = var33 84 10000 ???? 85 10000 ???? 01 60 r_movement2 = var32 86 10000 ???? 87 10000 ???? 01 5f r_movement1 = var31 88 10000 ???? 89 10000 ???? 01 5e gameover_flag = var30 90 10000 ???? 91 10000 ???? 01 5d extra_ship_slowdown = var29 92 10000 ???? 93 10000 ???? 01 5c extra_ship_flag = var28 94 10000 ???? 95 10000 ???? 01 5b extra_ship_y = var27 96 10000 ???? 97 10000 ???? 01 5a extra_ship_x = var26 98 10000 ???? 99 10000 ???? 01 59 power_upSlowdown = var25 100 10000 ???? 101 10000 ???? 01 58 power_upFlag = var24 102 10000 ???? 103 10000 ???? 01 57 power_upY = var23 104 10000 ???? 105 10000 ???? 01 56 power_upX = var22 106 10000 ???? 107 10000 ???? 01 55 enemy_bullet_slowdown = var21 108 10000 ???? 109 10000 ???? 01 54 enemy_bullet_flag = var20 110 10000 ???? 111 10000 ???? 01 53 enemy_bullet_y = var19 112 10000 ???? 113 10000 ???? 01 52 enemy_bullet_x = var18 114 10000 ???? 115 10000 ???? 01 51 enemy01_speed = var17 116 10000 ???? 117 10000 ???? 01 50 enemy01_slowdown = var16 118 10000 ???? 119 10000 ???? 01 4f enemy01_flag = var15 120 10000 ???? 121 10000 ???? 01 4e enemy01_y = var14 122 10000 ???? 123 10000 ???? 01 4d enemy01_x = var13 124 10000 ???? 125 10000 ???? 01 4c bulletSlowdown = var12 126 10000 ???? 127 10000 ???? 01 4b bulletY = var11 128 10000 ???? 129 10000 ???? 01 4a bulletX = var10 130 10000 ???? 131 10000 ???? 01 49 joyposright = var9 132 10000 ???? 133 10000 ???? 01 48 joyposleft = var8 134 10000 ???? 135 10000 ???? 01 47 joyposdown = var7 136 10000 ???? 137 10000 ???? 01 46 joyposup = var6 138 10000 ???? 139 10000 ???? 01 45 fire_debounce = var5 140 10000 ???? 141 10000 ???? 01 44 playerFlag = var4 142 10000 ???? 143 10000 ???? 01 43 playerY = var3 144 10000 ???? 145 10000 ???? 01 42 playerX = var2 146 10000 ???? 147 10000 ???? 01 41 frameCounter = var1 148 10000 ???? 149 10000 ???? 00 01 collisionwrap = 1 150 10000 ???? 00 01 NTSC = 1 151 10000 ???? 00 c0 SCREENHEIGHT = 192 152 10000 ???? 00 01 CHECKOVERWRITE = 1 153 10000 ???? 00 08 ZONEHEIGHT = 8 154 10000 ???? 00 01 ROM16K = 1 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_Vertical_Shooter_Rewrite1.bas.asm 285 10000 ???? 286 10000 ???? ; A BEAD header gets automatically incorportated into the ROM header. 287 10000 ???? ; For more BEAD executable info, check out the spec... 288 10000 ???? ; http://7800.8bitdev.org/index.php/The_Atari_7800_BEAD_Execuable_Specification 289 10000 ???? 290 10000 ???? 00 01 GAMEDESCRIPTIONSET = 1 291 10000 ???? 4e 61 6d 65 GAMEDESCRIPTION = "Test Name" 292 10000 ???? 293 10000 ???? 00 40 BDHSC = %01000000 294 10000 ???? 00 20 BDYM = %00100000 295 10000 ???? 00 10 BDPOKEY = %00010000 296 10000 ???? 00 08 BDROF = %00001000 297 10000 ???? 00 00 BD16K = %00000000 298 10000 ???? 00 01 BD32K = %00000001 299 10000 ???? 00 02 BD48K = %00000010 300 10000 ???? 00 05 BD1800 = %00000101 301 10000 ???? 00 06 BD4000 = %00000110 302 10000 ???? 303 10000 ???? ifconst ROM16K 304 10000 ???? 00 01 BEADHEADER = 1 305 10000 ???? endif 306 10000 ???? - ifconst ROM32K 307 10000 ???? -BEADHEADER = 1 308 10000 ???? endif 309 10000 ???? - ifconst ROM48K 310 10000 ???? -BEADHEADER = 1 311 10000 ???? endif 312 10000 ???? 313 10000 ???? ifconst BEADHEADER 314 10000 ???? BEADHARDWARE SET 0 315 10000 ???? ifconst ROM16K 316 10000 ???? BEADHARDWARE SET (BEADHARDWARE|BD16K) 317 10000 ???? endif 318 10000 ???? - ifconst ROM32K 319 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BD32K) 320 10000 ???? endif 321 10000 ???? - ifconst ROM48K 322 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BD48K) 323 10000 ???? endif 324 10000 ???? - ifconst pokeysupport 325 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BDPOKEY) 326 10000 ???? endif 327 10000 ???? - ifconst HSSUPPORT 328 10000 ???? -BEADHARDWARE SET (BEADHARDWARE|BDHSC) 329 10000 ???? endif 330 10000 ???? endif 331 10000 ???? 332 10000 ???? ;start address of cart... 333 10000 ???? - ifconst ROM48K 334 10000 ???? - ORG $4000,0 335 10000 ???? - ifconst BEADHEADER 336 10000 ???? - .byte $BE,$AD,BEADHARDWARE 337 10000 ???? - ifconst GAMEDESCRIPTIONSET 338 10000 ???? - CLC 339 10000 ???? - BCC _SKIPDESCRIPTION 340 10000 ???? - .byte GAMEDESCRIPTION,0 341 10000 ???? -_SKIPDESCRIPTION 342 10000 ???? - endif 343 10000 ???? - jmp ($FFFC) 344 10000 ???? - endif 345 10000 ???? else 346 10000 ???? - ifconst bankswitchmode 347 10000 ???? - ifconst ROMAT4K 348 10000 ???? - ORG $4000,0 349 10000 ???? - RORG $4000 350 10000 ???? - else 351 10000 ???? - ORG $8000,0 352 10000 ???? - RORG $8000 353 10000 ???? - endif 354 10000 ???? else ; not bankswitchmode 355 10000 ???? ifconst ROM16K 356 c000 ORG $C000,0 357 c000 ifconst BEADHEADER 358 c000 be ad 00 .byte.b $BE,$AD,BEADHARDWARE 359 c003 - ifconst GAMEDESCRIPTION 360 c003 - CLC 361 c003 - BCC _SKIPDESCRIPTION 362 c003 - .byte GAMEDESCRIPTION,0 363 c003 -_SKIPDESCRIPTION 364 c003 endif 365 c003 6c fc ff jmp ($FFFC) 366 c006 endif 367 c006 - else 368 c006 - ifconst ROM8K 369 c006 - ORG $E000,0 370 c006 - else 371 c006 - ORG $8000,0 372 c006 - ifconst BEADHEADER 373 c006 - .byte $BE,$AD,BEADHARDWARE 374 c006 - ifconst GAMEDESCRIPTION 375 c006 - CLC 376 c006 - BCC _SKIPDESCRIPTION 377 c006 - .byte GAMEDESCRIPTION,0 378 c006 -_SKIPDESCRIPTION 379 c006 - endif 380 c006 - jmp ($FFFC) 381 c006 - endif 382 c006 - endif 383 c006 endif 384 c006 endif 385 c006 endif 386 c006 387 c006 game 388 c006 .L00 ;; set romsize 16k 389 c006 390 c006 .L01 ;; set zoneheight 8 391 c006 392 c006 .L02 ;; set zoneprotection on 393 c006 394 c006 .L03 ;; set tallsprite on 395 c006 396 c006 .L04 ;; set screenheight 192 397 c006 398 c006 .L05 ;; set basepath gfx 399 c006 400 c006 .L06 ;; set tv ntsc 401 c006 402 c006 .L07 ;; set collisionwrap on 403 c006 404 c006 .L08 ;; displaymode 160A 405 c006 406 c006 a9 40 lda #%01000000 ;Enable DMA, mode=160x2/160x4 407 c008 85 3c sta CTRL 408 c00a 409 c00a 8d 07 21 sta sCTRL 410 c00d 411 c00d . 412 c00d ;; 413 c00d 414 c00d .L09 ;; dim frameCounter = var1 415 c00d 416 c00d .L010 ;; dim playerX = var2 417 c00d 418 c00d .L011 ;; dim playerY = var3 419 c00d 420 c00d .L012 ;; dim playerFlag = var4 421 c00d 422 c00d .L013 ;; dim fire_debounce = var5 423 c00d 424 c00d .L014 ;; dim joyposup = var6 425 c00d 426 c00d .L015 ;; dim joyposdown = var7 427 c00d 428 c00d .L016 ;; dim joyposleft = var8 429 c00d 430 c00d .L017 ;; dim joyposright = var9 431 c00d 432 c00d .L018 ;; dim bulletX = var10 433 c00d 434 c00d .L019 ;; dim bulletY = var11 435 c00d 436 c00d .L020 ;; dim bulletSlowdown = var12 437 c00d 438 c00d .L021 ;; dim enemy01_x = var13 439 c00d 440 c00d .L022 ;; dim enemy01_y = var14 441 c00d 442 c00d .L023 ;; dim enemy01_flag = var15 443 c00d 444 c00d .L024 ;; dim enemy01_slowdown = var16 445 c00d 446 c00d .L025 ;; dim enemy01_speed = var17 447 c00d 448 c00d .L026 ;; dim enemy_bullet_x = var18 449 c00d 450 c00d .L027 ;; dim enemy_bullet_y = var19 451 c00d 452 c00d .L028 ;; dim enemy_bullet_flag = var20 453 c00d 454 c00d .L029 ;; dim enemy_bullet_slowdown = var21 455 c00d 456 c00d .L030 ;; dim power_upX = var22 457 c00d 458 c00d .L031 ;; dim power_upY = var23 459 c00d 460 c00d .L032 ;; dim power_upFlag = var24 461 c00d 462 c00d .L033 ;; dim power_upSlowdown = var25 463 c00d 464 c00d .L034 ;; dim extra_ship_x = var26 465 c00d 466 c00d .L035 ;; dim extra_ship_y = var27 467 c00d 468 c00d .L036 ;; dim extra_ship_flag = var28 469 c00d 470 c00d .L037 ;; dim extra_ship_slowdown = var29 471 c00d 472 c00d .L038 ;; dim gameover_flag = var30 473 c00d 474 c00d .L039 ;; dim r_movement1 = var31 475 c00d 476 c00d .L040 ;; dim r_movement2 = var32 477 c00d 478 c00d .L041 ;; dim r_movement3 = var33 479 c00d 480 c00d .L042 ;; dim r_movement4 = var34 481 c00d 482 c00d .L043 ;; dim r_movement5 = var35 483 c00d 484 c00d .L044 ;; dim r_movement6 = var36 485 c00d 486 c00d .L045 ;; dim r_movement7 = var37 487 c00d 488 c00d .L046 ;; dim r_direction = var38 489 c00d 490 c00d .L047 ;; dim lives = score1 491 c00d 492 c00d . 493 c00d ;; 494 c00d 495 c00d .palettes 496 c00d ;; palettes 497 c00d 498 c00d .L048 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 499 c00d 500 c00d a9 0f LDA #$0F 501 c00f 85 21 STA P0C1 502 c011 a9 05 LDA #$05 503 c013 85 22 STA P0C2 504 c015 a9 32 LDA #$32 505 c017 85 23 STA P0C3 506 c019 .L049 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 507 c019 508 c019 a9 0f LDA #$0F 509 c01b 85 25 STA P1C1 510 c01d a9 ee LDA #$EE 511 c01f 85 26 STA P1C2 512 c021 a9 e7 LDA #$E7 513 c023 85 27 STA P1C3 514 c025 .L050 ;; P2C1 = $9D : P2C2 = $73 : P2C3 = $88 515 c025 516 c025 a9 9d LDA #$9D 517 c027 85 29 STA P2C1 518 c029 a9 73 LDA #$73 519 c02b 85 2a STA P2C2 520 c02d a9 88 LDA #$88 521 c02f 85 2b STA P2C3 522 c031 .L051 ;; P3C1 = $FB : P3C2 = $F2 : P3C3 = $25 523 c031 524 c031 a9 fb LDA #$FB 525 c033 85 2d STA P3C1 526 c035 a9 f2 LDA #$F2 527 c037 85 2e STA P3C2 528 c039 a9 25 LDA #$25 529 c03b 85 2f STA P3C3 530 c03d . 531 c03d ;; 532 c03d 533 c03d .L052 ;; characterset atascii 534 c03d 535 c03d a9 d0 lda #>atascii 536 c03f 85 34 sta CHARBASE 537 c041 8d 0b 21 sta sCHARBASE 538 c044 539 c044 a9 e0 lda #(atascii_mode | %01100000) 540 c046 8d 06 21 sta charactermode 541 c049 542 c049 .L053 ;; alphachars ASCII 543 c049 544 c049 . 545 c049 ;; 546 c049 547 c049 .import 548 c049 ;; import 549 c049 550 c049 .L054 ;; incgraphic atascii.png 320B 551 c049 552 c049 .L055 ;; incgraphic vertical_shooting_ship.png 160A 553 c049 554 c049 .L056 ;; incgraphic vertical_shooting_bullet.png 160A 555 c049 556 c049 .L057 ;; incgraphic vertical_shooting_enemyshot.png 160A 557 c049 558 c049 .L058 ;; incgraphic vertical_shooting_powerup.png 160A 559 c049 560 c049 .L059 ;; incgraphic vertical_shooting_enemy01.png 160A 561 c049 562 c049 .L060 ;; incgraphic vertical_shooting_score_10_digits.png 160A 563 c049 564 c049 .L061 ;; incgraphic vertical_shooting_1up.png 160A 565 c049 566 c049 . 567 c049 ;; 568 c049 569 c049 .plot 570 c049 ;; plot 571 c049 572 c049 .L062 ;; clearscreen 573 c049 574 c049 20 74 f0 jsr clearscreen 575 c04c .L063 ;; plotchars 'New^Vertical^Shooter^V2' 1 26 8 576 c04c 577 c04c 4c 66 c0 JMP skipalphadata0 578 c04f alphadata0 579 c04f 4e .byte.b (alphadata0 607 c06c 85 43 sta temp2 608 c06e 609 c06e a9 09 lda #9 ; width in two's complement 610 c070 09 20 ora #32 ; palette left shifted 5 bits 611 c072 85 44 sta temp3 612 c074 a9 1a lda #26 613 c076 85 45 sta temp4 614 c078 615 c078 a9 08 lda #8 616 c07a 617 c07a 85 46 sta temp5 618 c07c 619 c07c 20 48 f3 jsr plotcharacters 620 c07f .L064 ;; plotchars 'by^Shane^Skekel' 1 26 16 621 c07f 622 c07f 4c 91 c0 JMP skipalphadata1 623 c082 alphadata1 624 c082 62 .byte.b (alphadata1 644 c097 85 43 sta temp2 645 c099 646 c099 a9 11 lda #17 ; width in two's complement 647 c09b 09 20 ora #32 ; palette left shifted 5 bits 648 c09d 85 44 sta temp3 649 c09f a9 1a lda #26 650 c0a1 85 45 sta temp4 651 c0a3 652 c0a3 a9 10 lda #16 653 c0a5 654 c0a5 85 46 sta temp5 655 c0a7 656 c0a7 20 48 f3 jsr plotcharacters 657 c0aa .L065 ;; plotchars 'Push^fire^to^begin' 3 24 80 658 c0aa 659 c0aa 4c bf c0 JMP skipalphadata2 660 c0ad alphadata2 661 c0ad 50 .byte.b (alphadata2 684 c0c5 85 43 sta temp2 685 c0c7 686 c0c7 a9 0e lda #14 ; width in two's complement 687 c0c9 09 60 ora #96 ; palette left shifted 5 bits 688 c0cb 85 44 sta temp3 689 c0cd a9 18 lda #24 690 c0cf 85 45 sta temp4 691 c0d1 692 c0d1 a9 50 lda #80 693 c0d3 694 c0d3 85 46 sta temp5 695 c0d5 696 c0d5 20 48 f3 jsr plotcharacters 697 c0d8 .L066 ;; savescreen 698 c0d8 699 c0d8 20 98 f0 jsr savescreen 700 c0db .L067 ;; drawscreen 701 c0db 702 c0db 20 a8 f0 jsr drawscreen 703 c0de . 704 c0de ;; 705 c0de 706 c0de .init 707 c0de ;; init 708 c0de 709 c0de .L068 ;; playerX = 80 : playerY = 144 : playerFlag = 0 : fire_debounce = 0 710 c0de 711 c0de a9 50 LDA #80 712 c0e0 8d 42 01 STA playerX 713 c0e3 a9 90 LDA #144 714 c0e5 8d 43 01 STA playerY 715 c0e8 a9 00 LDA #0 716 c0ea 8d 44 01 STA playerFlag 717 c0ed 8d 45 01 STA fire_debounce 718 c0f0 .L069 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 719 c0f0 720 c0f0 a9 00 LDA #0 721 c0f2 8d 46 01 STA joyposup 722 c0f5 8d 47 01 STA joyposdown 723 c0f8 8d 48 01 STA joyposleft 724 c0fb 8d 49 01 STA joyposright 725 c0fe .L070 ;; bulletX = 0 : bulletY = 0 726 c0fe 727 c0fe a9 00 LDA #0 728 c100 8d 4a 01 STA bulletX 729 c103 8d 4b 01 STA bulletY 730 c106 .L071 ;; enemy_bullet_x = 0 : enemy_bullet_y = 0 : enemy_bullet_flag = 0 : enemy_bullet_slowdown = 0 731 c106 732 c106 a9 00 LDA #0 733 c108 8d 52 01 STA enemy_bullet_x 734 c10b 8d 53 01 STA enemy_bullet_y 735 c10e 8d 54 01 STA enemy_bullet_flag 736 c111 8d 55 01 STA enemy_bullet_slowdown 737 c114 .L072 ;; r_movement1 = 1 : r_movement2 = 1 : r_movement3 = 1 : r_movement4 = 1 738 c114 739 c114 a9 01 LDA #1 740 c116 8d 5f 01 STA r_movement1 741 c119 8d 60 01 STA r_movement2 742 c11c 8d 61 01 STA r_movement3 743 c11f 8d 62 01 STA r_movement4 744 c122 .L073 ;; r_movement5 = 1 : r_movement6 = 1 : r_movement7 = 1 : r_direction = 1 745 c122 746 c122 a9 01 LDA #1 747 c124 8d 63 01 STA r_movement5 748 c127 8d 64 01 STA r_movement6 749 c12a 8d 65 01 STA r_movement7 750 c12d 8d 66 01 STA r_direction 751 c130 .L074 ;; power_upX = 5 : power_upY = 32 : power_upFlag = 0 752 c130 753 c130 a9 05 LDA #5 754 c132 8d 56 01 STA power_upX 755 c135 a9 20 LDA #32 756 c137 8d 57 01 STA power_upY 757 c13a a9 00 LDA #0 758 c13c 8d 58 01 STA power_upFlag 759 c13f .L075 ;; bulletSlowdown = 0 : power_upSlowdown = 0 760 c13f 761 c13f a9 00 LDA #0 762 c141 8d 4c 01 STA bulletSlowdown 763 c144 8d 59 01 STA power_upSlowdown 764 c147 .L076 ;; enemy01_x = 0 : enemy01_y = 0 : enemy01_flag = 0 : enemy01_speed = 3 : enemy01_slowdown = 0 765 c147 766 c147 a9 00 LDA #0 767 c149 8d 4d 01 STA enemy01_x 768 c14c 8d 4e 01 STA enemy01_y 769 c14f 8d 4f 01 STA enemy01_flag 770 c152 a9 03 LDA #3 771 c154 8d 51 01 STA enemy01_speed 772 c157 a9 00 LDA #0 773 c159 8d 50 01 STA enemy01_slowdown 774 c15c .L077 ;; frameCounter = 0 : gameover_flag = 0 775 c15c 776 c15c a9 00 LDA #0 777 c15e 8d 41 01 STA frameCounter 778 c161 8d 5e 01 STA gameover_flag 779 c164 .L078 ;; extra_ship_x = 0 : extra_ship_y = 0 : extra_ship_flag = 0 : extra_ship_slowdown = 0 780 c164 781 c164 a9 00 LDA #0 782 c166 8d 5a 01 STA extra_ship_x 783 c169 8d 5b 01 STA extra_ship_y 784 c16c 8d 5c 01 STA extra_ship_flag 785 c16f 8d 5d 01 STA extra_ship_slowdown 786 c172 . 787 c172 ;; 788 c172 789 c172 .titlescreen_loop 790 c172 ;; titlescreen_loop 791 c172 792 c172 .L079 ;; restorescreen 793 c172 794 c172 20 86 f0 jsr restorescreen 795 c175 .L080 ;; if switchreset then reboot 796 c175 797 c175 20 74 f4 jsr checkresetswitch 798 c178 d0 03 BNE .skipL080 799 c17a .condpart0 800 c17a 4c 59 f5 JMP START 801 c17d .skipL080 802 c17d .L081 ;; plotchars 'New^Vertical^Shooter^V2' 1 26 8 803 c17d 804 c17d 4c 97 c1 JMP skipalphadata3 805 c180 alphadata3 806 c180 4e .byte.b (alphadata3 834 c19d 85 43 sta temp2 835 c19f 836 c19f a9 09 lda #9 ; width in two's complement 837 c1a1 09 20 ora #32 ; palette left shifted 5 bits 838 c1a3 85 44 sta temp3 839 c1a5 a9 1a lda #26 840 c1a7 85 45 sta temp4 841 c1a9 842 c1a9 a9 08 lda #8 843 c1ab 844 c1ab 85 46 sta temp5 845 c1ad 846 c1ad 20 48 f3 jsr plotcharacters 847 c1b0 .L082 ;; plotchars 'by^Shane^Skekel' 1 26 16 848 c1b0 849 c1b0 4c c2 c1 JMP skipalphadata4 850 c1b3 alphadata4 851 c1b3 62 .byte.b (alphadata4 871 c1c8 85 43 sta temp2 872 c1ca 873 c1ca a9 11 lda #17 ; width in two's complement 874 c1cc 09 20 ora #32 ; palette left shifted 5 bits 875 c1ce 85 44 sta temp3 876 c1d0 a9 1a lda #26 877 c1d2 85 45 sta temp4 878 c1d4 879 c1d4 a9 10 lda #16 880 c1d6 881 c1d6 85 46 sta temp5 882 c1d8 883 c1d8 20 48 f3 jsr plotcharacters 884 c1db .L083 ;; plotchars 'Push^fire^to^begin' 3 24 80 885 c1db 886 c1db 4c f0 c1 JMP skipalphadata5 887 c1de alphadata5 888 c1de 50 .byte.b (alphadata5 911 c1f6 85 43 sta temp2 912 c1f8 913 c1f8 a9 0e lda #14 ; width in two's complement 914 c1fa 09 60 ora #96 ; palette left shifted 5 bits 915 c1fc 85 44 sta temp3 916 c1fe a9 18 lda #24 917 c200 85 45 sta temp4 918 c202 919 c202 a9 50 lda #80 920 c204 921 c204 85 46 sta temp5 922 c206 923 c206 20 48 f3 jsr plotcharacters 924 c209 .L084 ;; if joy0fire then clearscreen : lives = $04 : score0 = 0 : goto main 925 c209 926 c209 2c 02 21 bit sINPT1 927 c20c 10 1a BPL .skipL084 928 c20e .condpart1 929 c20e 20 74 f0 jsr clearscreen 930 c211 a9 04 LDA #$04 931 c213 8d a9 01 STA lives 932 c216 a9 00 LDA #$00 933 c218 8d a8 01 STA score0+2 934 c21b a9 00 LDA #$00 935 c21d 8d a7 01 STA score0+1 936 c220 a9 00 LDA #$00 937 c222 8d a6 01 STA score0 938 c225 4c 2e c2 jmp .main 939 c228 940 c228 .skipL084 941 c228 .L085 ;; drawscreen 942 c228 943 c228 20 a8 f0 jsr drawscreen 944 c22b .L086 ;; goto titlescreen_loop 945 c22b 946 c22b 4c 72 c1 jmp .titlescreen_loop 947 c22e 948 c22e . 949 c22e ;; 950 c22e 951 c22e . 952 c22e ;; 953 c22e 954 c22e .main 955 c22e ;; main 956 c22e 957 c22e .L087 ;; frameCounter = frameCounter + 1 958 c22e 959 c22e ad 41 01 LDA frameCounter 960 c231 18 CLC 961 c232 69 01 ADC #1 962 c234 8d 41 01 STA frameCounter 963 c237 .L088 ;; if frameCounter > 10 then frameCounter = 0 964 c237 965 c237 a9 0a LDA #10 966 c239 cd 41 01 CMP frameCounter 967 c23c b0 05 BCS .skipL088 968 c23e .condpart2 969 c23e a9 00 LDA #0 970 c240 8d 41 01 STA frameCounter 971 c243 .skipL088 972 c243 .L089 ;; BACKGRND = $00 973 c243 974 c243 a9 00 LDA #$00 975 c245 85 20 STA BACKGRND 976 c247 .main_loop 977 c247 ;; main_loop 978 c247 979 c247 .L090 ;; restorescreen 980 c247 981 c247 20 86 f0 jsr restorescreen 982 c24a .L091 ;; r_movement1 = ( rand & 7 ) 983 c24a 984 c24a ; complex statement detected 985 c24a 20 ec f3 jsr randomize 986 c24d 29 07 AND #7 987 c24f 8d 5f 01 STA r_movement1 988 c252 .L092 ;; r_movement2 = ( rand & 4 ) 989 c252 990 c252 ; complex statement detected 991 c252 20 ec f3 jsr randomize 992 c255 29 04 AND #4 993 c257 8d 60 01 STA r_movement2 994 c25a .L093 ;; r_movement3 = ( rand & 6 ) + 3 995 c25a 996 c25a ; complex statement detected 997 c25a 20 ec f3 jsr randomize 998 c25d 29 06 AND #6 999 c25f 18 CLC 1000 c260 69 03 ADC #3 1001 c262 8d 61 01 STA r_movement3 1002 c265 .L094 ;; r_movement4 = ( rand & 5 ) - 1 1003 c265 1004 c265 ; complex statement detected 1005 c265 20 ec f3 jsr randomize 1006 c268 29 05 AND #5 1007 c26a 38 SEC 1008 c26b e9 01 SBC #1 1009 c26d 8d 62 01 STA r_movement4 1010 c270 .L095 ;; r_movement5 = ( rand & 5 ) + 2 1011 c270 1012 c270 ; complex statement detected 1013 c270 20 ec f3 jsr randomize 1014 c273 29 05 AND #5 1015 c275 18 CLC 1016 c276 69 02 ADC #2 1017 c278 8d 63 01 STA r_movement5 1018 c27b .L096 ;; r_movement6 = ( rand & 8 ) + 2 1019 c27b 1020 c27b ; complex statement detected 1021 c27b 20 ec f3 jsr randomize 1022 c27e 29 08 AND #8 1023 c280 18 CLC 1024 c281 69 02 ADC #2 1025 c283 8d 64 01 STA r_movement6 1026 c286 .L097 ;; r_movement7 = ( rand & 7 ) + 4 1027 c286 1028 c286 ; complex statement detected 1029 c286 20 ec f3 jsr randomize 1030 c289 29 07 AND #7 1031 c28b 18 CLC 1032 c28c 69 04 ADC #4 1033 c28e 8d 65 01 STA r_movement7 1034 c291 .L098 ;; r_direction = ( rand & 8 ) 1035 c291 1036 c291 ; complex statement detected 1037 c291 20 ec f3 jsr randomize 1038 c294 29 08 AND #8 1039 c296 8d 66 01 STA r_direction 1040 c299 .L099 ;; if switchreset then reboot 1041 c299 1042 c299 20 74 f4 jsr checkresetswitch 1043 c29c d0 03 BNE .skipL099 1044 c29e .condpart3 1045 c29e 4c 59 f5 JMP START 1046 c2a1 .skipL099 1047 c2a1 . 1048 c2a1 ;; 1049 c2a1 1050 c2a1 .L0100 ;; plotsprite vertical_shooting_ship 0 playerX playerY 1051 c2a1 1052 c2a1 a9 f6 lda #vertical_shooting_ship 1056 c2a7 85 43 sta temp2 1057 c2a9 1058 c2a9 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 1059 c2ab 85 44 sta temp3 1060 c2ad 1061 c2ad ad 42 01 lda playerX 1062 c2b0 85 45 sta temp4 1063 c2b2 1064 c2b2 ad 43 01 lda playerY 1065 c2b5 1066 c2b5 85 46 sta temp5 1067 c2b7 1068 c2b7 a9 40 lda #(vertical_shooting_ship_mode|%01000000) 1069 c2b9 85 47 sta temp6 1070 c2bb 1071 c2bb 20 88 f2 jsr plotsprite 1072 c2be ; +tall sprite replot 1073 c2be 18 clc 1074 c2bf a5 42 lda temp1 1075 c2c1 69 02 adc #vertical_shooting_ship_width 1076 c2c3 85 42 sta temp1 1077 c2c5 a5 46 lda temp5 1078 c2c7 69 08 adc #WZONEHEIGHT 1079 c2c9 85 46 sta temp5 1080 c2cb 20 88 f2 jsr plotsprite 1081 c2ce .L0101 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 1082 c2ce 1083 c2ce a9 fa lda #vertical_shooting_bullet 1087 c2d4 85 43 sta temp2 1088 c2d6 1089 c2d6 a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 1090 c2d8 85 44 sta temp3 1091 c2da 1092 c2da ad 4a 01 lda bulletX 1093 c2dd 85 45 sta temp4 1094 c2df 1095 c2df ad 4b 01 lda bulletY 1096 c2e2 1097 c2e2 85 46 sta temp5 1098 c2e4 1099 c2e4 a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 1100 c2e6 85 47 sta temp6 1101 c2e8 1102 c2e8 20 88 f2 jsr plotsprite 1103 c2eb .L0102 ;; plotsprite vertical_shooting_enemyshot 2 enemy_bullet_x enemy_bullet_y 1104 c2eb 1105 c2eb a9 fb lda #vertical_shooting_enemyshot 1109 c2f1 85 43 sta temp2 1110 c2f3 1111 c2f3 a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 1112 c2f5 85 44 sta temp3 1113 c2f7 1114 c2f7 ad 52 01 lda enemy_bullet_x 1115 c2fa 85 45 sta temp4 1116 c2fc 1117 c2fc ad 53 01 lda enemy_bullet_y 1118 c2ff 1119 c2ff 85 46 sta temp5 1120 c301 1121 c301 a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 1122 c303 85 47 sta temp6 1123 c305 1124 c305 20 88 f2 jsr plotsprite 1125 c308 .L0103 ;; plotsprite vertical_shooting_powerup 3 power_upX power_upY 1126 c308 1127 c308 a9 fc lda #vertical_shooting_powerup 1131 c30e 85 43 sta temp2 1132 c310 1133 c310 a9 7e lda #(96|vertical_shooting_powerup_width_twoscompliment) 1134 c312 85 44 sta temp3 1135 c314 1136 c314 ad 56 01 lda power_upX 1137 c317 85 45 sta temp4 1138 c319 1139 c319 ad 57 01 lda power_upY 1140 c31c 1141 c31c 85 46 sta temp5 1142 c31e 1143 c31e a9 40 lda #(vertical_shooting_powerup_mode|%01000000) 1144 c320 85 47 sta temp6 1145 c322 1146 c322 20 88 f2 jsr plotsprite 1147 c325 .L0104 ;; plotsprite vertical_shooting_enemy01 2 enemy01_x enemy01_y 1148 c325 1149 c325 a9 00 lda #vertical_shooting_enemy01 1153 c32b 85 43 sta temp2 1154 c32d 1155 c32d a9 5e lda #(64|vertical_shooting_enemy01_width_twoscompliment) 1156 c32f 85 44 sta temp3 1157 c331 1158 c331 ad 4d 01 lda enemy01_x 1159 c334 85 45 sta temp4 1160 c336 1161 c336 ad 4e 01 lda enemy01_y 1162 c339 1163 c339 85 46 sta temp5 1164 c33b 1165 c33b a9 40 lda #(vertical_shooting_enemy01_mode|%01000000) 1166 c33d 85 47 sta temp6 1167 c33f 1168 c33f 20 88 f2 jsr plotsprite 1169 c342 ; +tall sprite replot 1170 c342 18 clc 1171 c343 a5 42 lda temp1 1172 c345 69 02 adc #vertical_shooting_enemy01_width 1173 c347 85 42 sta temp1 1174 c349 a5 46 lda temp5 1175 c34b 69 08 adc #WZONEHEIGHT 1176 c34d 85 46 sta temp5 1177 c34f 20 88 f2 jsr plotsprite 1178 c352 .L0105 ;; plotsprite vertical_shooting_1up 0 extra_ship_x extra_ship_y 1179 c352 1180 c352 a9 0e lda #vertical_shooting_1up 1184 c358 85 43 sta temp2 1185 c35a 1186 c35a a9 1e lda #(0|vertical_shooting_1up_width_twoscompliment) 1187 c35c 85 44 sta temp3 1188 c35e 1189 c35e ad 5a 01 lda extra_ship_x 1190 c361 85 45 sta temp4 1191 c363 1192 c363 ad 5b 01 lda extra_ship_y 1193 c366 1194 c366 85 46 sta temp5 1195 c368 1196 c368 a9 40 lda #(vertical_shooting_1up_mode|%01000000) 1197 c36a 85 47 sta temp6 1198 c36c 1199 c36c 20 88 f2 jsr plotsprite 1200 c36f .L0106 ;; plotvalue vertical_shooting_score_10_digits 3 score0 6 25 8 1201 c36f 1202 c36f a9 04 lda #vertical_shooting_score_10_digits 1206 c375 85 43 sta temp2 1207 c377 1208 c377 ad 06 21 lda charactermode 1209 c37a 85 4a sta temp9 1210 c37c a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 1211 c37e 8d 06 21 sta charactermode 1212 c381 a9 1a lda #26 ; width in two's complement 1213 c383 09 60 ora #96 ; palette left shifted 5 bits 1214 c385 85 44 sta temp3 1215 c387 a9 19 lda #25 1216 c389 85 45 sta temp4 1217 c38b 1218 c38b a9 08 lda #8 1219 c38d 85 46 sta temp5 1220 c38f 1221 c38f a9 06 lda #6 1222 c391 85 47 sta temp6 1223 c393 1224 c393 a9 a6 lda #score0 1228 c399 85 49 sta temp8 1229 c39b 1230 c39b 20 7d f3 jsr plotvalue 1231 c39b 00 01 USED_PLOTVALUE = 1 1232 c39e a5 4a lda temp9 1233 c3a0 8d 06 21 sta charactermode 1234 c3a3 .L0107 ;; plotvalue vertical_shooting_score_10_digits 3 score1 1 153 8 1235 c3a3 1236 c3a3 a9 04 lda #vertical_shooting_score_10_digits 1240 c3a9 85 43 sta temp2 1241 c3ab 1242 c3ab ad 06 21 lda charactermode 1243 c3ae 85 4a sta temp9 1244 c3b0 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 1245 c3b2 8d 06 21 sta charactermode 1246 c3b5 a9 1f lda #31 ; width in two's complement 1247 c3b7 09 60 ora #96 ; palette left shifted 5 bits 1248 c3b9 85 44 sta temp3 1249 c3bb a9 99 lda #153 1250 c3bd 85 45 sta temp4 1251 c3bf 1252 c3bf a9 08 lda #8 1253 c3c1 85 46 sta temp5 1254 c3c3 1255 c3c3 a9 01 lda #1 1256 c3c5 85 47 sta temp6 1257 c3c7 1258 c3c7 a9 a9 lda #score1 1262 c3cd 85 49 sta temp8 1263 c3cf 1264 c3cf 20 7d f3 jsr plotvalue 1265 c3cf 00 01 USED_PLOTVALUE = 1 1266 c3d2 a5 4a lda temp9 1267 c3d4 8d 06 21 sta charactermode 1268 c3d7 . 1269 c3d7 ;; 1270 c3d7 1271 c3d7 .L0108 ;; drawscreen 1272 c3d7 1273 c3d7 20 a8 f0 jsr drawscreen 1274 c3da . 1275 c3da ;; 1276 c3da 1277 c3da .L0109 ;; if joy0up && joyposup = - 2 then SetBulletHome 1278 c3da 1279 c3da a9 10 lda #$10 1280 c3dc 2c 80 02 bit SWCHA 1281 c3df d0 10 BNE .skipL0109 1282 c3e1 .condpart4 1283 c3e1 ; complex condition detected 1284 c3e1 a9 fe LDA #254 1285 c3e3 48 PHA 1286 c3e4 ba TSX 1287 c3e5 68 PLA 1288 c3e6 ad 46 01 LDA joyposup 1289 c3e9 dd 01 01 CMP $101,x 1290 c3ec - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1291 c3ec - BEQ .SetBulletHome 1292 c3ec else 1293 c3ec d0 03 bne .0skipSetBulletHome 1294 c3ee 4c 4c c9 jmp .SetBulletHome 1295 c3f1 .0skipSetBulletHome 1296 c3f1 endif 1297 c3f1 .skipL0109 1298 c3f1 .L0110 ;; if joy0down && joyposdown = - 2 then SetBulletHome 1299 c3f1 1300 c3f1 a9 20 lda #$20 1301 c3f3 2c 80 02 bit SWCHA 1302 c3f6 d0 10 BNE .skipL0110 1303 c3f8 .condpart5 1304 c3f8 ; complex condition detected 1305 c3f8 a9 fe LDA #254 1306 c3fa 48 PHA 1307 c3fb ba TSX 1308 c3fc 68 PLA 1309 c3fd ad 47 01 LDA joyposdown 1310 c400 dd 01 01 CMP $101,x 1311 c403 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1312 c403 - BEQ .SetBulletHome 1313 c403 else 1314 c403 d0 03 bne .1skipSetBulletHome 1315 c405 4c 4c c9 jmp .SetBulletHome 1316 c408 .1skipSetBulletHome 1317 c408 endif 1318 c408 .skipL0110 1319 c408 .L0111 ;; if joy0up && joyposleft = - 2 then SetBulletHome 1320 c408 1321 c408 a9 10 lda #$10 1322 c40a 2c 80 02 bit SWCHA 1323 c40d d0 10 BNE .skipL0111 1324 c40f .condpart6 1325 c40f ; complex condition detected 1326 c40f a9 fe LDA #254 1327 c411 48 PHA 1328 c412 ba TSX 1329 c413 68 PLA 1330 c414 ad 48 01 LDA joyposleft 1331 c417 dd 01 01 CMP $101,x 1332 c41a - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1333 c41a - BEQ .SetBulletHome 1334 c41a else 1335 c41a d0 03 bne .2skipSetBulletHome 1336 c41c 4c 4c c9 jmp .SetBulletHome 1337 c41f .2skipSetBulletHome 1338 c41f endif 1339 c41f .skipL0111 1340 c41f .L0112 ;; if joy0down && joyposright = - 2 then SetBulletHome 1341 c41f 1342 c41f a9 20 lda #$20 1343 c421 2c 80 02 bit SWCHA 1344 c424 d0 10 BNE .skipL0112 1345 c426 .condpart7 1346 c426 ; complex condition detected 1347 c426 a9 fe LDA #254 1348 c428 48 PHA 1349 c429 ba TSX 1350 c42a 68 PLA 1351 c42b ad 49 01 LDA joyposright 1352 c42e dd 01 01 CMP $101,x 1353 c431 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1354 c431 - BEQ .SetBulletHome 1355 c431 else 1356 c431 d0 03 bne .3skipSetBulletHome 1357 c433 4c 4c c9 jmp .SetBulletHome 1358 c436 .3skipSetBulletHome 1359 c436 endif 1360 c436 .skipL0112 1361 c436 .L0113 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1362 c436 1363 c436 a9 10 lda #$10 1364 c438 2c 80 02 bit SWCHA 1365 c43b d0 19 BNE .skipL0113 1366 c43d .condpart8 1367 c43d ad 43 01 LDA playerY 1368 c440 38 SEC 1369 c441 e9 01 SBC #1 1370 c443 8d 43 01 STA playerY 1371 c446 a9 01 LDA #1 1372 c448 8d 46 01 STA joyposup 1373 c44b a9 00 LDA #0 1374 c44d 8d 47 01 STA joyposdown 1375 c450 8d 48 01 STA joyposleft 1376 c453 8d 49 01 STA joyposright 1377 c456 .skipL0113 1378 c456 .L0114 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 1379 c456 1380 c456 a9 20 lda #$20 1381 c458 2c 80 02 bit SWCHA 1382 c45b d0 1b BNE .skipL0114 1383 c45d .condpart9 1384 c45d ad 43 01 LDA playerY 1385 c460 18 CLC 1386 c461 69 01 ADC #1 1387 c463 8d 43 01 STA playerY 1388 c466 a9 00 LDA #0 1389 c468 8d 46 01 STA joyposup 1390 c46b a9 01 LDA #1 1391 c46d 8d 47 01 STA joyposdown 1392 c470 a9 00 LDA #0 1393 c472 8d 48 01 STA joyposleft 1394 c475 8d 49 01 STA joyposright 1395 c478 .skipL0114 1396 c478 .L0115 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 1397 c478 1398 c478 2c 80 02 bit SWCHA 1399 c47b 70 1b BVS .skipL0115 1400 c47d .condpart10 1401 c47d ad 42 01 LDA playerX 1402 c480 38 SEC 1403 c481 e9 01 SBC #1 1404 c483 8d 42 01 STA playerX 1405 c486 a9 00 LDA #0 1406 c488 8d 46 01 STA joyposup 1407 c48b 8d 47 01 STA joyposdown 1408 c48e a9 01 LDA #1 1409 c490 8d 48 01 STA joyposleft 1410 c493 a9 00 LDA #0 1411 c495 8d 49 01 STA joyposright 1412 c498 .skipL0115 1413 c498 .L0116 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 1414 c498 1415 c498 2c 80 02 bit SWCHA 1416 c49b 30 19 BMI .skipL0116 1417 c49d .condpart11 1418 c49d ad 42 01 LDA playerX 1419 c4a0 18 CLC 1420 c4a1 69 01 ADC #1 1421 c4a3 8d 42 01 STA playerX 1422 c4a6 a9 00 LDA #0 1423 c4a8 8d 46 01 STA joyposup 1424 c4ab 8d 47 01 STA joyposdown 1425 c4ae 8d 48 01 STA joyposleft 1426 c4b1 a9 01 LDA #1 1427 c4b3 8d 49 01 STA joyposright 1428 c4b6 .skipL0116 1429 c4b6 .L0117 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 1430 c4b6 1431 c4b6 2c 02 21 bit sINPT1 1432 c4b9 10 10 BPL .skipL0117 1433 c4bb .condpart12 1434 c4bb ad 46 01 LDA joyposup 1435 c4be c9 01 CMP #1 1436 c4c0 d0 09 BNE .skip12then 1437 c4c2 .condpart13 1438 c4c2 ad 4b 01 LDA bulletY 1439 c4c5 38 SEC 1440 c4c6 e9 05 SBC #5 1441 c4c8 8d 4b 01 STA bulletY 1442 c4cb .skip12then 1443 c4cb .skipL0117 1444 c4cb .L0118 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 1445 c4cb 1446 c4cb 2c 02 21 bit sINPT1 1447 c4ce 10 10 BPL .skipL0118 1448 c4d0 .condpart14 1449 c4d0 ad 47 01 LDA joyposdown 1450 c4d3 c9 01 CMP #1 1451 c4d5 d0 09 BNE .skip14then 1452 c4d7 .condpart15 1453 c4d7 ad 4b 01 LDA bulletY 1454 c4da 38 SEC 1455 c4db e9 05 SBC #5 1456 c4dd 8d 4b 01 STA bulletY 1457 c4e0 .skip14then 1458 c4e0 .skipL0118 1459 c4e0 .L0119 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 1460 c4e0 1461 c4e0 2c 02 21 bit sINPT1 1462 c4e3 10 10 BPL .skipL0119 1463 c4e5 .condpart16 1464 c4e5 ad 48 01 LDA joyposleft 1465 c4e8 c9 01 CMP #1 1466 c4ea d0 09 BNE .skip16then 1467 c4ec .condpart17 1468 c4ec ad 4b 01 LDA bulletY 1469 c4ef 38 SEC 1470 c4f0 e9 05 SBC #5 1471 c4f2 8d 4b 01 STA bulletY 1472 c4f5 .skip16then 1473 c4f5 .skipL0119 1474 c4f5 .L0120 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 1475 c4f5 1476 c4f5 2c 02 21 bit sINPT1 1477 c4f8 10 10 BPL .skipL0120 1478 c4fa .condpart18 1479 c4fa ad 49 01 LDA joyposright 1480 c4fd c9 01 CMP #1 1481 c4ff d0 09 BNE .skip18then 1482 c501 .condpart19 1483 c501 ad 4b 01 LDA bulletY 1484 c504 38 SEC 1485 c505 e9 05 SBC #5 1486 c507 8d 4b 01 STA bulletY 1487 c50a .skip18then 1488 c50a .skipL0120 1489 c50a .L0121 ;; if !joy0fire then bulletX = playerX + 2 : bulletY = playerY - 8 1490 c50a 1491 c50a 2c 02 21 bit sINPT1 1492 c50d 30 12 BMI .skipL0121 1493 c50f .condpart20 1494 c50f ad 42 01 LDA playerX 1495 c512 18 CLC 1496 c513 69 02 ADC #2 1497 c515 8d 4a 01 STA bulletX 1498 c518 ad 43 01 LDA playerY 1499 c51b 38 SEC 1500 c51c e9 08 SBC #8 1501 c51e 8d 4b 01 STA bulletY 1502 c521 .skipL0121 1503 c521 . 1504 c521 ;; 1505 c521 1506 c521 .L0122 ;; if playerX > 152 then playerX = playerX - 1 1507 c521 1508 c521 a9 98 LDA #152 1509 c523 cd 42 01 CMP playerX 1510 c526 b0 09 BCS .skipL0122 1511 c528 .condpart21 1512 c528 ad 42 01 LDA playerX 1513 c52b 38 SEC 1514 c52c e9 01 SBC #1 1515 c52e 8d 42 01 STA playerX 1516 c531 .skipL0122 1517 c531 .L0123 ;; if playerX < 1 then playerX = playerX + 1 1518 c531 1519 c531 ad 42 01 LDA playerX 1520 c534 c9 01 CMP #1 1521 c536 b0 09 BCS .skipL0123 1522 c538 .condpart22 1523 c538 ad 42 01 LDA playerX 1524 c53b 18 CLC 1525 c53c 69 01 ADC #1 1526 c53e 8d 42 01 STA playerX 1527 c541 .skipL0123 1528 c541 .L0124 ;; if playerY > 177 then playerY = playerY - 1 1529 c541 1530 c541 a9 b1 LDA #177 1531 c543 cd 43 01 CMP playerY 1532 c546 b0 09 BCS .skipL0124 1533 c548 .condpart23 1534 c548 ad 43 01 LDA playerY 1535 c54b 38 SEC 1536 c54c e9 01 SBC #1 1537 c54e 8d 43 01 STA playerY 1538 c551 .skipL0124 1539 c551 .L0125 ;; if playerY < 1 then playerY = playerY + 1 1540 c551 1541 c551 ad 43 01 LDA playerY 1542 c554 c9 01 CMP #1 1543 c556 b0 09 BCS .skipL0125 1544 c558 .condpart24 1545 c558 ad 43 01 LDA playerY 1546 c55b 18 CLC 1547 c55c 69 01 ADC #1 1548 c55e 8d 43 01 STA playerY 1549 c561 .skipL0125 1550 c561 .L0126 ;; if bulletY > 183 then bulletY = bulletY - 1 1551 c561 1552 c561 a9 b7 LDA #183 1553 c563 cd 4b 01 CMP bulletY 1554 c566 b0 09 BCS .skipL0126 1555 c568 .condpart25 1556 c568 ad 4b 01 LDA bulletY 1557 c56b 38 SEC 1558 c56c e9 01 SBC #1 1559 c56e 8d 4b 01 STA bulletY 1560 c571 .skipL0126 1561 c571 .L0127 ;; if bulletY < 1 then bulletY = bulletY + 1 1562 c571 1563 c571 ad 4b 01 LDA bulletY 1564 c574 c9 01 CMP #1 1565 c576 b0 09 BCS .skipL0127 1566 c578 .condpart26 1567 c578 ad 4b 01 LDA bulletY 1568 c57b 18 CLC 1569 c57c 69 01 ADC #1 1570 c57e 8d 4b 01 STA bulletY 1571 c581 .skipL0127 1572 c581 . 1573 c581 ;; 1574 c581 1575 c581 .L0128 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy_bullet_x , enemy_bullet_y , 4 , 8 ) then enemy_bullet_x = 200 : enemy_bullet_y = 200 : playerFlag = 1 : lives = lives - 1 : goto lose_a_life 1576 c581 1577 c581 1578 c581 18 clc ; one clc only. If we overflow we're screwed anyway. 1579 c582 ad 43 01 lda playerY 1580 c585 69 20 adc #((256-WSCREENHEIGHT)/2) 1581 c587 a8 tay 1582 c588 a9 07 lda #(8-1) 1583 c58a 85 44 sta temp3 1584 c58c a9 0f lda #(16-1) 1585 c58e 85 45 sta temp4 1586 c590 ad 52 01 lda enemy_bullet_x 1587 c593 69 30 adc #48 1588 c595 85 46 sta temp5 1589 c597 ad 53 01 lda enemy_bullet_y 1590 c59a 69 20 adc #((256-WSCREENHEIGHT)/2) 1591 c59c 85 47 sta temp6 1592 c59e a9 03 lda #(4-1) 1593 c5a0 85 48 sta temp7 1594 c5a2 a9 07 lda #(8-1) 1595 c5a4 85 49 sta temp8 1596 c5a6 ad 42 01 lda playerX 1597 c5a9 69 30 adc #48 1598 c5ab 20 c5 f3 jsr boxcollision 1599 c5ae 1600 c5ae 90 19 BCC .skipL0128 1601 c5b0 .condpart27 1602 c5b0 a9 c8 LDA #200 1603 c5b2 8d 52 01 STA enemy_bullet_x 1604 c5b5 8d 53 01 STA enemy_bullet_y 1605 c5b8 a9 01 LDA #1 1606 c5ba 8d 44 01 STA playerFlag 1607 c5bd ad a9 01 LDA lives 1608 c5c0 38 SEC 1609 c5c1 e9 01 SBC #1 1610 c5c3 8d a9 01 STA lives 1611 c5c6 4c 5f c9 jmp .lose_a_life 1612 c5c9 1613 c5c9 .skipL0128 1614 c5c9 .L0129 ;; if boxcollision ( playerX , playerY , 8 , 16 , power_upX , power_upY , 8 , 8 ) then power_upX = 208 : power_upY = 208 : playerFlag = 1 1615 c5c9 1616 c5c9 1617 c5c9 18 clc ; one clc only. If we overflow we're screwed anyway. 1618 c5ca ad 43 01 lda playerY 1619 c5cd 69 20 adc #((256-WSCREENHEIGHT)/2) 1620 c5cf a8 tay 1621 c5d0 a9 07 lda #(8-1) 1622 c5d2 85 44 sta temp3 1623 c5d4 a9 0f lda #(16-1) 1624 c5d6 85 45 sta temp4 1625 c5d8 ad 56 01 lda power_upX 1626 c5db 69 30 adc #48 1627 c5dd 85 46 sta temp5 1628 c5df ad 57 01 lda power_upY 1629 c5e2 69 20 adc #((256-WSCREENHEIGHT)/2) 1630 c5e4 85 47 sta temp6 1631 c5e6 a9 07 lda #(8-1) 1632 c5e8 85 48 sta temp7 1633 c5ea a9 07 lda #(8-1) 1634 c5ec 85 49 sta temp8 1635 c5ee ad 42 01 lda playerX 1636 c5f1 69 30 adc #48 1637 c5f3 20 c5 f3 jsr boxcollision 1638 c5f6 1639 c5f6 90 0d BCC .skipL0129 1640 c5f8 .condpart28 1641 c5f8 a9 d0 LDA #208 1642 c5fa 8d 56 01 STA power_upX 1643 c5fd 8d 57 01 STA power_upY 1644 c600 a9 01 LDA #1 1645 c602 8d 44 01 STA playerFlag 1646 c605 .skipL0129 1647 c605 .L0130 ;; 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 1648 c605 1649 c605 1650 c605 18 clc ; one clc only. If we overflow we're screwed anyway. 1651 c606 ad 43 01 lda playerY 1652 c609 69 20 adc #((256-WSCREENHEIGHT)/2) 1653 c60b a8 tay 1654 c60c a9 07 lda #(8-1) 1655 c60e 85 44 sta temp3 1656 c610 a9 0f lda #(16-1) 1657 c612 85 45 sta temp4 1658 c614 ad 4d 01 lda enemy01_x 1659 c617 69 30 adc #48 1660 c619 85 46 sta temp5 1661 c61b ad 4e 01 lda enemy01_y 1662 c61e 69 20 adc #((256-WSCREENHEIGHT)/2) 1663 c620 85 47 sta temp6 1664 c622 a9 07 lda #(8-1) 1665 c624 85 48 sta temp7 1666 c626 a9 0f lda #(16-1) 1667 c628 85 49 sta temp8 1668 c62a ad 42 01 lda playerX 1669 c62d 69 30 adc #48 1670 c62f 20 c5 f3 jsr boxcollision 1671 c632 1672 c632 90 19 BCC .skipL0130 1673 c634 .condpart29 1674 c634 a9 c8 LDA #200 1675 c636 8d 4d 01 STA enemy01_x 1676 c639 8d 4e 01 STA enemy01_y 1677 c63c a9 01 LDA #1 1678 c63e 8d 44 01 STA playerFlag 1679 c641 ad a9 01 LDA lives 1680 c644 38 SEC 1681 c645 e9 01 SBC #1 1682 c647 8d a9 01 STA lives 1683 c64a 4c 5f c9 jmp .lose_a_life 1684 c64d 1685 c64d .skipL0130 1686 c64d .L0131 ;; if boxcollision ( playerX , playerY , 8 , 16 , extra_ship_x , extra_ship_y , 8 , 8 ) then extra_ship_x = 200 : extra_ship_y = 200 : extra_ship_flag = 1 : lives = lives + 1 1687 c64d 1688 c64d 1689 c64d 18 clc ; one clc only. If we overflow we're screwed anyway. 1690 c64e ad 43 01 lda playerY 1691 c651 69 20 adc #((256-WSCREENHEIGHT)/2) 1692 c653 a8 tay 1693 c654 a9 07 lda #(8-1) 1694 c656 85 44 sta temp3 1695 c658 a9 0f lda #(16-1) 1696 c65a 85 45 sta temp4 1697 c65c ad 5a 01 lda extra_ship_x 1698 c65f 69 30 adc #48 1699 c661 85 46 sta temp5 1700 c663 ad 5b 01 lda extra_ship_y 1701 c666 69 20 adc #((256-WSCREENHEIGHT)/2) 1702 c668 85 47 sta temp6 1703 c66a a9 07 lda #(8-1) 1704 c66c 85 48 sta temp7 1705 c66e a9 07 lda #(8-1) 1706 c670 85 49 sta temp8 1707 c672 ad 42 01 lda playerX 1708 c675 69 30 adc #48 1709 c677 20 c5 f3 jsr boxcollision 1710 c67a 1711 c67a 90 16 BCC .skipL0131 1712 c67c .condpart30 1713 c67c a9 c8 LDA #200 1714 c67e 8d 5a 01 STA extra_ship_x 1715 c681 8d 5b 01 STA extra_ship_y 1716 c684 a9 01 LDA #1 1717 c686 8d 5c 01 STA extra_ship_flag 1718 c689 ad a9 01 LDA lives 1719 c68c 18 CLC 1720 c68d 69 01 ADC #1 1721 c68f 8d a9 01 STA lives 1722 c692 .skipL0131 1723 c692 . 1724 c692 ;; 1725 c692 1726 c692 . 1727 c692 ;; 1728 c692 1729 c692 .L0132 ;; if bulletX > enemy01_x && bulletX < ( enemy01_x + 16 ) && bulletY > enemy01_y && bulletY < ( enemy01_y + 16 ) then enemy01_flag = 1 : score0 = score0 + 1 1730 c692 1731 c692 ad 4d 01 LDA enemy01_x 1732 c695 cd 4a 01 CMP bulletX 1733 c698 b0 4a BCS .skipL0132 1734 c69a .condpart31 1735 c69a ; complex condition detected 1736 c69a ; complex statement detected 1737 c69a ad 4d 01 LDA enemy01_x 1738 c69d 18 CLC 1739 c69e 69 10 ADC #16 1740 c6a0 48 PHA 1741 c6a1 ba TSX 1742 c6a2 68 PLA 1743 c6a3 ad 4a 01 LDA bulletX 1744 c6a6 dd 01 01 CMP $101,x 1745 c6a9 b0 39 BCS .skip31then 1746 c6ab .condpart32 1747 c6ab ad 4e 01 LDA enemy01_y 1748 c6ae cd 4b 01 CMP bulletY 1749 c6b1 b0 31 BCS .skip32then 1750 c6b3 .condpart33 1751 c6b3 ; complex condition detected 1752 c6b3 ; complex statement detected 1753 c6b3 ad 4e 01 LDA enemy01_y 1754 c6b6 18 CLC 1755 c6b7 69 10 ADC #16 1756 c6b9 48 PHA 1757 c6ba ba TSX 1758 c6bb 68 PLA 1759 c6bc ad 4b 01 LDA bulletY 1760 c6bf dd 01 01 CMP $101,x 1761 c6c2 b0 20 BCS .skip33then 1762 c6c4 .condpart34 1763 c6c4 a9 01 LDA #1 1764 c6c6 8d 4f 01 STA enemy01_flag 1765 c6c9 f8 SED 1766 c6ca 18 CLC 1767 c6cb ad a8 01 LDA score0+2 1768 c6ce 69 01 ADC #$01 1769 c6d0 8d a8 01 STA score0+2 1770 c6d3 ad a7 01 LDA score0+1 1771 c6d6 69 00 ADC #$00 1772 c6d8 8d a7 01 STA score0+1 1773 c6db ad a6 01 LDA score0 1774 c6de 69 00 ADC #$00 1775 c6e0 8d a6 01 STA score0 1776 c6e3 d8 CLD 1777 c6e4 .skip33then 1778 c6e4 .skip32then 1779 c6e4 .skip31then 1780 c6e4 .skipL0132 1781 c6e4 . 1782 c6e4 ;; 1783 c6e4 1784 c6e4 .L0133 ;; if enemy_bullet_x > 160 then enemy_bullet_x = enemy_bullet_x - 1 1785 c6e4 1786 c6e4 a9 a0 LDA #160 1787 c6e6 cd 52 01 CMP enemy_bullet_x 1788 c6e9 b0 09 BCS .skipL0133 1789 c6eb .condpart35 1790 c6eb ad 52 01 LDA enemy_bullet_x 1791 c6ee 38 SEC 1792 c6ef e9 01 SBC #1 1793 c6f1 8d 52 01 STA enemy_bullet_x 1794 c6f4 .skipL0133 1795 c6f4 .L0134 ;; if enemy_bullet_x < 1 then enemy_bullet_x = enemy_bullet_x + 1 1796 c6f4 1797 c6f4 ad 52 01 LDA enemy_bullet_x 1798 c6f7 c9 01 CMP #1 1799 c6f9 b0 09 BCS .skipL0134 1800 c6fb .condpart36 1801 c6fb ad 52 01 LDA enemy_bullet_x 1802 c6fe 18 CLC 1803 c6ff 69 01 ADC #1 1804 c701 8d 52 01 STA enemy_bullet_x 1805 c704 .skipL0134 1806 c704 .L0135 ;; if enemy_bullet_y > 191 then enemy_bullet_y = enemy_bullet_y - 1 1807 c704 1808 c704 a9 bf LDA #191 1809 c706 cd 53 01 CMP enemy_bullet_y 1810 c709 b0 09 BCS .skipL0135 1811 c70b .condpart37 1812 c70b ad 53 01 LDA enemy_bullet_y 1813 c70e 38 SEC 1814 c70f e9 01 SBC #1 1815 c711 8d 53 01 STA enemy_bullet_y 1816 c714 .skipL0135 1817 c714 .L0136 ;; if enemy_bullet_y < 1 then enemy_bullet_y = enemy_bullet_y + 1 1818 c714 1819 c714 ad 53 01 LDA enemy_bullet_y 1820 c717 c9 01 CMP #1 1821 c719 b0 09 BCS .skipL0136 1822 c71b .condpart38 1823 c71b ad 53 01 LDA enemy_bullet_y 1824 c71e 18 CLC 1825 c71f 69 01 ADC #1 1826 c721 8d 53 01 STA enemy_bullet_y 1827 c724 .skipL0136 1828 c724 .L0137 ;; if power_upX > 155 then power_upX = power_upX - 5 1829 c724 1830 c724 a9 9b LDA #155 1831 c726 cd 56 01 CMP power_upX 1832 c729 b0 09 BCS .skipL0137 1833 c72b .condpart39 1834 c72b ad 56 01 LDA power_upX 1835 c72e 38 SEC 1836 c72f e9 05 SBC #5 1837 c731 8d 56 01 STA power_upX 1838 c734 .skipL0137 1839 c734 .L0138 ;; if power_upX < 1 then power_upX = power_upX + 5 1840 c734 1841 c734 ad 56 01 LDA power_upX 1842 c737 c9 01 CMP #1 1843 c739 b0 09 BCS .skipL0138 1844 c73b .condpart40 1845 c73b ad 56 01 LDA power_upX 1846 c73e 18 CLC 1847 c73f 69 05 ADC #5 1848 c741 8d 56 01 STA power_upX 1849 c744 .skipL0138 1850 c744 .L0139 ;; if power_upY > 191 then power_upY = power_upY - 5 1851 c744 1852 c744 a9 bf LDA #191 1853 c746 cd 57 01 CMP power_upY 1854 c749 b0 09 BCS .skipL0139 1855 c74b .condpart41 1856 c74b ad 57 01 LDA power_upY 1857 c74e 38 SEC 1858 c74f e9 05 SBC #5 1859 c751 8d 57 01 STA power_upY 1860 c754 .skipL0139 1861 c754 .L0140 ;; if power_upY < 1 then power_upY = power_upY + 5 1862 c754 1863 c754 ad 57 01 LDA power_upY 1864 c757 c9 01 CMP #1 1865 c759 b0 09 BCS .skipL0140 1866 c75b .condpart42 1867 c75b ad 57 01 LDA power_upY 1868 c75e 18 CLC 1869 c75f 69 05 ADC #5 1870 c761 8d 57 01 STA power_upY 1871 c764 .skipL0140 1872 c764 .L0141 ;; if enemy01_x > 160 then enemy01_x = enemy01_x - 1 1873 c764 1874 c764 a9 a0 LDA #160 1875 c766 cd 4d 01 CMP enemy01_x 1876 c769 b0 09 BCS .skipL0141 1877 c76b .condpart43 1878 c76b ad 4d 01 LDA enemy01_x 1879 c76e 38 SEC 1880 c76f e9 01 SBC #1 1881 c771 8d 4d 01 STA enemy01_x 1882 c774 .skipL0141 1883 c774 .L0142 ;; if enemy01_x < 1 then enemy01_x = enemy01_x + 1 1884 c774 1885 c774 ad 4d 01 LDA enemy01_x 1886 c777 c9 01 CMP #1 1887 c779 b0 09 BCS .skipL0142 1888 c77b .condpart44 1889 c77b ad 4d 01 LDA enemy01_x 1890 c77e 18 CLC 1891 c77f 69 01 ADC #1 1892 c781 8d 4d 01 STA enemy01_x 1893 c784 .skipL0142 1894 c784 .L0143 ;; if enemy01_y > 220 then enemy01_y = enemy01_y - 1 1895 c784 1896 c784 a9 dc LDA #220 1897 c786 cd 4e 01 CMP enemy01_y 1898 c789 b0 09 BCS .skipL0143 1899 c78b .condpart45 1900 c78b ad 4e 01 LDA enemy01_y 1901 c78e 38 SEC 1902 c78f e9 01 SBC #1 1903 c791 8d 4e 01 STA enemy01_y 1904 c794 .skipL0143 1905 c794 .L0144 ;; if enemy01_y < - 16 then enemy01_y = enemy01_y + 1 1906 c794 1907 c794 ; complex condition detected 1908 c794 a9 f0 LDA #240 1909 c796 48 PHA 1910 c797 ba TSX 1911 c798 68 PLA 1912 c799 ad 4e 01 LDA enemy01_y 1913 c79c dd 01 01 CMP $101,x 1914 c79f b0 09 BCS .skipL0144 1915 c7a1 .condpart46 1916 c7a1 ad 4e 01 LDA enemy01_y 1917 c7a4 18 CLC 1918 c7a5 69 01 ADC #1 1919 c7a7 8d 4e 01 STA enemy01_y 1920 c7aa .skipL0144 1921 c7aa .L0145 ;; if extra_ship_x > 160 then extra_ship_x = extra_ship_x - 1 1922 c7aa 1923 c7aa a9 a0 LDA #160 1924 c7ac cd 5a 01 CMP extra_ship_x 1925 c7af b0 09 BCS .skipL0145 1926 c7b1 .condpart47 1927 c7b1 ad 5a 01 LDA extra_ship_x 1928 c7b4 38 SEC 1929 c7b5 e9 01 SBC #1 1930 c7b7 8d 5a 01 STA extra_ship_x 1931 c7ba .skipL0145 1932 c7ba .L0146 ;; if extra_ship_x < 1 then extra_ship_x = extra_ship_x + 1 1933 c7ba 1934 c7ba ad 5a 01 LDA extra_ship_x 1935 c7bd c9 01 CMP #1 1936 c7bf b0 09 BCS .skipL0146 1937 c7c1 .condpart48 1938 c7c1 ad 5a 01 LDA extra_ship_x 1939 c7c4 18 CLC 1940 c7c5 69 01 ADC #1 1941 c7c7 8d 5a 01 STA extra_ship_x 1942 c7ca .skipL0146 1943 c7ca .L0147 ;; if extra_ship_y > 191 then extra_ship_y = extra_ship_y - 1 1944 c7ca 1945 c7ca a9 bf LDA #191 1946 c7cc cd 5b 01 CMP extra_ship_y 1947 c7cf b0 09 BCS .skipL0147 1948 c7d1 .condpart49 1949 c7d1 ad 5b 01 LDA extra_ship_y 1950 c7d4 38 SEC 1951 c7d5 e9 01 SBC #1 1952 c7d7 8d 5b 01 STA extra_ship_y 1953 c7da .skipL0147 1954 c7da .L0148 ;; if extra_ship_y < 1 then extra_ship_y = extra_ship_y + 1 1955 c7da 1956 c7da ad 5b 01 LDA extra_ship_y 1957 c7dd c9 01 CMP #1 1958 c7df b0 09 BCS .skipL0148 1959 c7e1 .condpart50 1960 c7e1 ad 5b 01 LDA extra_ship_y 1961 c7e4 18 CLC 1962 c7e5 69 01 ADC #1 1963 c7e7 8d 5b 01 STA extra_ship_y 1964 c7ea .skipL0148 1965 c7ea . 1966 c7ea ;; 1967 c7ea 1968 c7ea . 1969 c7ea ;; 1970 c7ea 1971 c7ea .L0149 ;; if r_direction = 0 then enemy_bullet_x = enemy_bullet_x + r_movement1 : enemy_bullet_y = enemy_bullet_y + r_movement2 1972 c7ea 1973 c7ea ad 66 01 LDA r_direction 1974 c7ed c9 00 CMP #0 1975 c7ef d0 14 BNE .skipL0149 1976 c7f1 .condpart51 1977 c7f1 ad 52 01 LDA enemy_bullet_x 1978 c7f4 18 CLC 1979 c7f5 6d 5f 01 ADC r_movement1 1980 c7f8 8d 52 01 STA enemy_bullet_x 1981 c7fb ad 53 01 LDA enemy_bullet_y 1982 c7fe 18 CLC 1983 c7ff 6d 60 01 ADC r_movement2 1984 c802 8d 53 01 STA enemy_bullet_y 1985 c805 .skipL0149 1986 c805 .L0150 ;; if r_direction = 1 then enemy_bullet_x = enemy_bullet_x + r_movement3 : enemy_bullet_y = enemy_bullet_y + r_movement4 1987 c805 1988 c805 ad 66 01 LDA r_direction 1989 c808 c9 01 CMP #1 1990 c80a d0 14 BNE .skipL0150 1991 c80c .condpart52 1992 c80c ad 52 01 LDA enemy_bullet_x 1993 c80f 18 CLC 1994 c810 6d 61 01 ADC r_movement3 1995 c813 8d 52 01 STA enemy_bullet_x 1996 c816 ad 53 01 LDA enemy_bullet_y 1997 c819 18 CLC 1998 c81a 6d 62 01 ADC r_movement4 1999 c81d 8d 53 01 STA enemy_bullet_y 2000 c820 .skipL0150 2001 c820 .L0151 ;; if r_direction = 2 then enemy_bullet_x = enemy_bullet_x + r_movement5 : enemy_bullet_y = enemy_bullet_y + r_movement6 2002 c820 2003 c820 ad 66 01 LDA r_direction 2004 c823 c9 02 CMP #2 2005 c825 d0 14 BNE .skipL0151 2006 c827 .condpart53 2007 c827 ad 52 01 LDA enemy_bullet_x 2008 c82a 18 CLC 2009 c82b 6d 63 01 ADC r_movement5 2010 c82e 8d 52 01 STA enemy_bullet_x 2011 c831 ad 53 01 LDA enemy_bullet_y 2012 c834 18 CLC 2013 c835 6d 64 01 ADC r_movement6 2014 c838 8d 53 01 STA enemy_bullet_y 2015 c83b .skipL0151 2016 c83b .L0152 ;; if r_direction = 3 then enemy_bullet_x = enemy_bullet_x + r_movement4 : enemy_bullet_y = enemy_bullet_y + r_movement2 2017 c83b 2018 c83b ad 66 01 LDA r_direction 2019 c83e c9 03 CMP #3 2020 c840 d0 14 BNE .skipL0152 2021 c842 .condpart54 2022 c842 ad 52 01 LDA enemy_bullet_x 2023 c845 18 CLC 2024 c846 6d 62 01 ADC r_movement4 2025 c849 8d 52 01 STA enemy_bullet_x 2026 c84c ad 53 01 LDA enemy_bullet_y 2027 c84f 18 CLC 2028 c850 6d 60 01 ADC r_movement2 2029 c853 8d 53 01 STA enemy_bullet_y 2030 c856 .skipL0152 2031 c856 . 2032 c856 ;; 2033 c856 2034 c856 .L0153 ;; if r_direction = 0 then power_upX = power_upX + r_movement5 : power_upY = power_upY + r_movement2 2035 c856 2036 c856 ad 66 01 LDA r_direction 2037 c859 c9 00 CMP #0 2038 c85b d0 14 BNE .skipL0153 2039 c85d .condpart55 2040 c85d ad 56 01 LDA power_upX 2041 c860 18 CLC 2042 c861 6d 63 01 ADC r_movement5 2043 c864 8d 56 01 STA power_upX 2044 c867 ad 57 01 LDA power_upY 2045 c86a 18 CLC 2046 c86b 6d 60 01 ADC r_movement2 2047 c86e 8d 57 01 STA power_upY 2048 c871 .skipL0153 2049 c871 .L0154 ;; if r_direction = 1 then power_upX = power_upX + r_movement3 : power_upY = power_upY + r_movement7 2050 c871 2051 c871 ad 66 01 LDA r_direction 2052 c874 c9 01 CMP #1 2053 c876 d0 14 BNE .skipL0154 2054 c878 .condpart56 2055 c878 ad 56 01 LDA power_upX 2056 c87b 18 CLC 2057 c87c 6d 61 01 ADC r_movement3 2058 c87f 8d 56 01 STA power_upX 2059 c882 ad 57 01 LDA power_upY 2060 c885 18 CLC 2061 c886 6d 65 01 ADC r_movement7 2062 c889 8d 57 01 STA power_upY 2063 c88c .skipL0154 2064 c88c .L0155 ;; if r_direction = 2 then power_upX = power_upX + r_movement1 : power_upY = power_upY + r_movement6 2065 c88c 2066 c88c ad 66 01 LDA r_direction 2067 c88f c9 02 CMP #2 2068 c891 d0 14 BNE .skipL0155 2069 c893 .condpart57 2070 c893 ad 56 01 LDA power_upX 2071 c896 18 CLC 2072 c897 6d 5f 01 ADC r_movement1 2073 c89a 8d 56 01 STA power_upX 2074 c89d ad 57 01 LDA power_upY 2075 c8a0 18 CLC 2076 c8a1 6d 64 01 ADC r_movement6 2077 c8a4 8d 57 01 STA power_upY 2078 c8a7 .skipL0155 2079 c8a7 . 2080 c8a7 ;; 2081 c8a7 2082 c8a7 .L0156 ;; if r_direction = 0 then enemy01_x = enemy01_x + r_movement4 : enemy01_y = enemy01_y + r_movement2 2083 c8a7 2084 c8a7 ad 66 01 LDA r_direction 2085 c8aa c9 00 CMP #0 2086 c8ac d0 14 BNE .skipL0156 2087 c8ae .condpart58 2088 c8ae ad 4d 01 LDA enemy01_x 2089 c8b1 18 CLC 2090 c8b2 6d 62 01 ADC r_movement4 2091 c8b5 8d 4d 01 STA enemy01_x 2092 c8b8 ad 4e 01 LDA enemy01_y 2093 c8bb 18 CLC 2094 c8bc 6d 60 01 ADC r_movement2 2095 c8bf 8d 4e 01 STA enemy01_y 2096 c8c2 .skipL0156 2097 c8c2 .L0157 ;; if r_direction = 1 then enemy01_x = enemy01_x + r_movement3 : enemy01_y = enemy01_y + r_movement4 2098 c8c2 2099 c8c2 ad 66 01 LDA r_direction 2100 c8c5 c9 01 CMP #1 2101 c8c7 d0 14 BNE .skipL0157 2102 c8c9 .condpart59 2103 c8c9 ad 4d 01 LDA enemy01_x 2104 c8cc 18 CLC 2105 c8cd 6d 61 01 ADC r_movement3 2106 c8d0 8d 4d 01 STA enemy01_x 2107 c8d3 ad 4e 01 LDA enemy01_y 2108 c8d6 18 CLC 2109 c8d7 6d 62 01 ADC r_movement4 2110 c8da 8d 4e 01 STA enemy01_y 2111 c8dd .skipL0157 2112 c8dd .L0158 ;; if r_direction = 2 then enemy01_x = enemy01_x + r_movement6 : enemy01_y = enemy01_y + r_movement7 2113 c8dd 2114 c8dd ad 66 01 LDA r_direction 2115 c8e0 c9 02 CMP #2 2116 c8e2 d0 14 BNE .skipL0158 2117 c8e4 .condpart60 2118 c8e4 ad 4d 01 LDA enemy01_x 2119 c8e7 18 CLC 2120 c8e8 6d 64 01 ADC r_movement6 2121 c8eb 8d 4d 01 STA enemy01_x 2122 c8ee ad 4e 01 LDA enemy01_y 2123 c8f1 18 CLC 2124 c8f2 6d 65 01 ADC r_movement7 2125 c8f5 8d 4e 01 STA enemy01_y 2126 c8f8 .skipL0158 2127 c8f8 . 2128 c8f8 ;; 2129 c8f8 2130 c8f8 .L0159 ;; if r_direction = 0 then extra_ship_x = extra_ship_x + r_movement5 : extra_ship_y = extra_ship_y + r_movement2 2131 c8f8 2132 c8f8 ad 66 01 LDA r_direction 2133 c8fb c9 00 CMP #0 2134 c8fd d0 14 BNE .skipL0159 2135 c8ff .condpart61 2136 c8ff ad 5a 01 LDA extra_ship_x 2137 c902 18 CLC 2138 c903 6d 63 01 ADC r_movement5 2139 c906 8d 5a 01 STA extra_ship_x 2140 c909 ad 5b 01 LDA extra_ship_y 2141 c90c 18 CLC 2142 c90d 6d 60 01 ADC r_movement2 2143 c910 8d 5b 01 STA extra_ship_y 2144 c913 .skipL0159 2145 c913 .L0160 ;; if r_direction = 1 then extra_ship_x = extra_ship_x + r_movement6 : extra_ship_y = extra_ship_y + r_movement3 2146 c913 2147 c913 ad 66 01 LDA r_direction 2148 c916 c9 01 CMP #1 2149 c918 d0 14 BNE .skipL0160 2150 c91a .condpart62 2151 c91a ad 5a 01 LDA extra_ship_x 2152 c91d 18 CLC 2153 c91e 6d 64 01 ADC r_movement6 2154 c921 8d 5a 01 STA extra_ship_x 2155 c924 ad 5b 01 LDA extra_ship_y 2156 c927 18 CLC 2157 c928 6d 61 01 ADC r_movement3 2158 c92b 8d 5b 01 STA extra_ship_y 2159 c92e .skipL0160 2160 c92e .L0161 ;; if r_direction = 2 then extra_ship_x = extra_ship_x + r_movement7 : extra_ship_y = extra_ship_y + r_movement4 2161 c92e 2162 c92e ad 66 01 LDA r_direction 2163 c931 c9 02 CMP #2 2164 c933 d0 14 BNE .skipL0161 2165 c935 .condpart63 2166 c935 ad 5a 01 LDA extra_ship_x 2167 c938 18 CLC 2168 c939 6d 65 01 ADC r_movement7 2169 c93c 8d 5a 01 STA extra_ship_x 2170 c93f ad 5b 01 LDA extra_ship_y 2171 c942 18 CLC 2172 c943 6d 62 01 ADC r_movement4 2173 c946 8d 5b 01 STA extra_ship_y 2174 c949 .skipL0161 2175 c949 .L0162 ;; goto main_loop 2176 c949 2177 c949 4c 47 c2 jmp .main_loop 2178 c94c 2179 c94c . 2180 c94c ;; 2181 c94c 2182 c94c .SetBulletHome 2183 c94c ;; SetBulletHome 2184 c94c 2185 c94c .L0163 ;; bulletX = playerX + 4 : bulletY = playerY - 2 2186 c94c 2187 c94c ad 42 01 LDA playerX 2188 c94f 18 CLC 2189 c950 69 04 ADC #4 2190 c952 8d 4a 01 STA bulletX 2191 c955 ad 43 01 LDA playerY 2192 c958 38 SEC 2193 c959 e9 02 SBC #2 2194 c95b 8d 4b 01 STA bulletY 2195 c95e .L0164 ;; return 2196 c95e 2197 c95e 60 RTS 2198 c95f . 2199 c95f ;; 2200 c95f 2201 c95f .lose_a_life 2202 c95f ;; lose_a_life 2203 c95f 2204 c95f .L0165 ;; lives = lives - 1 2205 c95f 2206 c95f ad a9 01 LDA lives 2207 c962 38 SEC 2208 c963 e9 01 SBC #1 2209 c965 8d a9 01 STA lives 2210 c968 .L0166 ;; if enemy01_flag <> 1 then enemy01_x = 32 : enemy01_y = 0 2211 c968 2212 c968 ad 4f 01 LDA enemy01_flag 2213 c96b c9 01 CMP #1 2214 c96d f0 0a BEQ .skipL0166 2215 c96f .condpart64 2216 c96f a9 20 LDA #32 2217 c971 8d 4d 01 STA enemy01_x 2218 c974 a9 00 LDA #0 2219 c976 8d 4e 01 STA enemy01_y 2220 c979 .skipL0166 2221 c979 .L0167 ;; if enemy_bullet_flag <> 1 then enemy_bullet_x = 0 : enemy_bullet_y = 0 2222 c979 2223 c979 ad 54 01 LDA enemy_bullet_flag 2224 c97c c9 01 CMP #1 2225 c97e f0 08 BEQ .skipL0167 2226 c980 .condpart65 2227 c980 a9 00 LDA #0 2228 c982 8d 52 01 STA enemy_bullet_x 2229 c985 8d 53 01 STA enemy_bullet_y 2230 c988 .skipL0167 2231 c988 .L0168 ;; playerX = 80 : playerY = 144 2232 c988 2233 c988 a9 50 LDA #80 2234 c98a 8d 42 01 STA playerX 2235 c98d a9 90 LDA #144 2236 c98f 8d 43 01 STA playerY 2237 c992 .L0169 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 2238 c992 2239 c992 a9 00 LDA #0 2240 c994 8d 46 01 STA joyposup 2241 c997 8d 47 01 STA joyposdown 2242 c99a 8d 48 01 STA joyposleft 2243 c99d 8d 49 01 STA joyposright 2244 c9a0 .L0170 ;; fire_debounce = 0 : bulletX = 0 : bulletY = 0 2245 c9a0 2246 c9a0 a9 00 LDA #0 2247 c9a2 8d 45 01 STA fire_debounce 2248 c9a5 8d 4a 01 STA bulletX 2249 c9a8 8d 4b 01 STA bulletY 2250 c9ab .L0171 ;; enemy01_x = 0 : enemy01_y = 0 : enemy01_flag = 0 2251 c9ab 2252 c9ab a9 00 LDA #0 2253 c9ad 8d 4d 01 STA enemy01_x 2254 c9b0 8d 4e 01 STA enemy01_y 2255 c9b3 8d 4f 01 STA enemy01_flag 2256 c9b6 .L0172 ;; playerFlag = 0 : gameover_flag = 0 2257 c9b6 2258 c9b6 a9 00 LDA #0 2259 c9b8 8d 44 01 STA playerFlag 2260 c9bb 8d 5e 01 STA gameover_flag 2261 c9be .L0173 ;; return 2262 c9be 2263 c9be 60 RTS 2264 c9bf . 2265 c9bf ;; 2266 c9bf 2267 c9bf .lose_a_lifeloop 2268 c9bf ;; lose_a_lifeloop 2269 c9bf 2270 c9bf .L0174 ;; restorescreen 2271 c9bf 2272 c9bf 20 86 f0 jsr restorescreen 2273 c9c2 .L0175 ;; plotvalue vertical_shooting_score_10_digits 3 score0 6 25 8 2274 c9c2 2275 c9c2 a9 04 lda #vertical_shooting_score_10_digits 2279 c9c8 85 43 sta temp2 2280 c9ca 2281 c9ca ad 06 21 lda charactermode 2282 c9cd 85 4a sta temp9 2283 c9cf a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 2284 c9d1 8d 06 21 sta charactermode 2285 c9d4 a9 1a lda #26 ; width in two's complement 2286 c9d6 09 60 ora #96 ; palette left shifted 5 bits 2287 c9d8 85 44 sta temp3 2288 c9da a9 19 lda #25 2289 c9dc 85 45 sta temp4 2290 c9de 2291 c9de a9 08 lda #8 2292 c9e0 85 46 sta temp5 2293 c9e2 2294 c9e2 a9 06 lda #6 2295 c9e4 85 47 sta temp6 2296 c9e6 2297 c9e6 a9 a6 lda #score0 2301 c9ec 85 49 sta temp8 2302 c9ee 2303 c9ee 20 7d f3 jsr plotvalue 2304 c9ee 00 01 USED_PLOTVALUE = 1 2305 c9f1 a5 4a lda temp9 2306 c9f3 8d 06 21 sta charactermode 2307 c9f6 .L0176 ;; plotvalue vertical_shooting_score_10_digits 3 score1 1 153 8 2308 c9f6 2309 c9f6 a9 04 lda #vertical_shooting_score_10_digits 2313 c9fc 85 43 sta temp2 2314 c9fe 2315 c9fe ad 06 21 lda charactermode 2316 ca01 85 4a sta temp9 2317 ca03 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 2318 ca05 8d 06 21 sta charactermode 2319 ca08 a9 1f lda #31 ; width in two's complement 2320 ca0a 09 60 ora #96 ; palette left shifted 5 bits 2321 ca0c 85 44 sta temp3 2322 ca0e a9 99 lda #153 2323 ca10 85 45 sta temp4 2324 ca12 2325 ca12 a9 08 lda #8 2326 ca14 85 46 sta temp5 2327 ca16 2328 ca16 a9 01 lda #1 2329 ca18 85 47 sta temp6 2330 ca1a 2331 ca1a a9 a9 lda #score1 2335 ca20 85 49 sta temp8 2336 ca22 2337 ca22 20 7d f3 jsr plotvalue 2338 ca22 00 01 USED_PLOTVALUE = 1 2339 ca25 a5 4a lda temp9 2340 ca27 8d 06 21 sta charactermode 2341 ca2a .L0177 ;; drawscreen 2342 ca2a 2343 ca2a 20 a8 f0 jsr drawscreen 2344 ca2d .L0178 ;; if joy0fire then fire_debounce = 2 2345 ca2d 2346 ca2d 2c 02 21 bit sINPT1 2347 ca30 10 05 BPL .skipL0178 2348 ca32 .condpart66 2349 ca32 a9 02 LDA #2 2350 ca34 8d 45 01 STA fire_debounce 2351 ca37 .skipL0178 2352 ca37 .L0179 ;; if !joy0fire then fire_debounce = 1 2353 ca37 2354 ca37 2c 02 21 bit sINPT1 2355 ca3a 30 05 BMI .skipL0179 2356 ca3c .condpart67 2357 ca3c a9 01 LDA #1 2358 ca3e 8d 45 01 STA fire_debounce 2359 ca41 .skipL0179 2360 ca41 .L0180 ;; if fire_debounce = 1 && lives > 0 then clearscreen : goto main 2361 ca41 2362 ca41 ad 45 01 LDA fire_debounce 2363 ca44 c9 01 CMP #1 2364 ca46 d0 0d BNE .skipL0180 2365 ca48 .condpart68 2366 ca48 a9 00 LDA #0 2367 ca4a cd a9 01 CMP lives 2368 ca4d b0 06 BCS .skip68then 2369 ca4f .condpart69 2370 ca4f 20 74 f0 jsr clearscreen 2371 ca52 4c 2e c2 jmp .main 2372 ca55 2373 ca55 .skip68then 2374 ca55 .skipL0180 2375 ca55 .L0181 ;; if fire_debounce = 1 && lives < 1 then clearscreen : goto plot 2376 ca55 2377 ca55 ad 45 01 LDA fire_debounce 2378 ca58 c9 01 CMP #1 2379 ca5a d0 0d BNE .skipL0181 2380 ca5c .condpart70 2381 ca5c ad a9 01 LDA lives 2382 ca5f c9 01 CMP #1 2383 ca61 b0 06 BCS .skip70then 2384 ca63 .condpart71 2385 ca63 20 74 f0 jsr clearscreen 2386 ca66 4c 49 c0 jmp .plot 2387 ca69 2388 ca69 .skip70then 2389 ca69 .skipL0181 2390 ca69 .L0182 ;; goto lose_a_lifeloop 2391 ca69 2392 ca69 4c bf c9 jmp .lose_a_lifeloop 2393 ca6c 2394 ca6c . 2395 ca6c ;; 2396 ca6c 2397 ca6c .gameover 2398 ca6c ;; gameover 2399 ca6c 2400 ca6c .L0183 ;; gameover_flag = 0 2401 ca6c 2402 ca6c a9 00 LDA #0 2403 ca6e 8d 5e 01 STA gameover_flag 2404 ca71 .gameover_loop 2405 ca71 ;; gameover_loop 2406 ca71 2407 ca71 .L0184 ;; if lives < 0 then gameover_flag = 1 : clearscreen 2408 ca71 2409 ca71 ad a9 01 LDA lives 2410 ca74 c9 00 CMP #0 2411 ca76 b0 08 BCS .skipL0184 2412 ca78 .condpart72 2413 ca78 a9 01 LDA #1 2414 ca7a 8d 5e 01 STA gameover_flag 2415 ca7d 20 74 f0 jsr clearscreen 2416 ca80 .skipL0184 2417 ca80 .L0185 ;; plotchars 'Game^Over!' 0 32 32 2418 ca80 2419 ca80 4c 8d ca JMP skipalphadata6 2420 ca83 alphadata6 2421 ca83 47 .byte.b (alphadata6 2436 ca93 85 43 sta temp2 2437 ca95 2438 ca95 a9 16 lda #22 ; width in two's complement 2439 ca97 09 00 ora #0 ; palette left shifted 5 bits 2440 ca99 85 44 sta temp3 2441 ca9b a9 20 lda #32 2442 ca9d 85 45 sta temp4 2443 ca9f 2444 ca9f a9 20 lda #32 2445 caa1 2446 caa1 85 46 sta temp5 2447 caa3 2448 caa3 20 48 f3 jsr plotcharacters 2449 caa6 .L0186 ;; goto gameover_loop 2450 caa6 2451 caa6 4c 71 ca jmp .gameover_loop 2452 caa9 2453 caa9 .L0187 ;; if fire_debounce = 1 then clearscreen : goto titlescreen_loop 2454 caa9 ad 45 01 LDA fire_debounce 2455 caac c9 01 CMP #1 2456 caae d0 06 BNE .skipL0187 2457 cab0 .condpart73 2458 cab0 20 74 f0 jsr clearscreen 2459 cab3 4c 72 c1 jmp .titlescreen_loop 2460 cab6 .skipL0187 2461 cab6 DMAHOLEEND0 SET . 2462 cab6 gameend 2463 cab6 DMAHOLEEND0 SET . 1354 bytes of ROM space left in the main area. 2464 cab6 echo " ",[($D000 - gameend)]d , "bytes of ROM space left in the main area." 2465 cab6 2466 d000 ORG $D000,0 ; ************* 2467 d000 2468 d000 atascii 2469 d000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2470 d020 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2471 d040 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000300000000000000 2472 d060 00 00 00 00* HEX 0000000000000000000000000000000000000000000003000000000000000000 2473 d080 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2474 d0a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2475 d0c0 00 00 00 00* HEX 0000000000000000000000000000070c00000000030c00000000000000000000 2476 d0e0 06 00 00 06* HEX 06000006000000000000000000000000000007080000 2477 d0f6 vertical_shooting_ship 2478 d0f6 07 d0 HEX 07d0 2479 d0f8 vertical_shooting_ship_tallsprite_00 2480 d0f8 80 02 HEX 8002 2481 d0fa vertical_shooting_bullet 2482 d0fa 28 HEX 28 2483 d0fb vertical_shooting_enemyshot 2484 d0fb 00 HEX 00 2485 d0fc vertical_shooting_powerup 2486 d0fc 28 00 HEX 2800 2487 d0fe 2488 d100 ORG $D100,0 ; ************* 2489 d100 2490 d100 ;atascii 2491 d100 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2492 d120 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2493 d140 00 00 01 08* HEX 000001080000060601080406030b0000000e0700000000000108000001080400 2494 d160 03 0c 07 0e* HEX 030c070e070e030c000c030c030c0300030c0308010801080006000006000108 2495 d180 03 0e 06 06* HEX 030e0606070c030c0708070e0600030e0606070e030c0606070e06030606030c 2496 d1a0 06 00 03 06* HEX 060003060606030c0108070e0108060306060108070e010e0006070800000f0f 2497 d1c0 00 00 03 0e* HEX 0000030e070c030c030e030c010800060606030c00060606030c06030606030c 2498 d1e0 06 00 00 06* HEX 060000060600070c000e030e010803060606000c070e 2499 d1f6 ;vertical_shooting_ship 2500 d1f6 07 d0 HEX 07d0 2501 d1f8 ;vertical_shooting_ship_tallsprite_00 2502 d1f8 80 02 HEX 8002 2503 d1fa ;vertical_shooting_bullet 2504 d1fa 28 HEX 28 2505 d1fb ;vertical_shooting_enemyshot 2506 d1fb 88 HEX 88 2507 d1fc ;vertical_shooting_powerup 2508 d1fc 78 08 HEX 7808 2509 d1fe 2510 d200 ORG $D200,0 ; ************* 2511 d200 2512 d200 ;atascii 2513 d200 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2514 d220 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2515 d240 00 00 00 00* HEX 0000000000000f0f070c060606060000010c0308060601080108000001080600 2516 d260 06 06 01 08* HEX 0606010803000606070e0606060603000606000c01080108000c070e03000000 2517 d280 06 00 07 0e* HEX 0600070e06060606060c060006000606060601080606060c06000603060e0606 2518 d2a0 06 00 06 0c* HEX 0600060c060c000601080606030c07070606010806000108000c010800000000 2519 d2c0 00 00 06 06* HEX 0000060606060600060606000108030e060601080006060c0108060b06060606 2520 d2e0 07 0c 03 0e* HEX 070c030e0600000601080606030c030e030c030e0300 2521 d2f6 ;vertical_shooting_ship 2522 d2f6 03 c0 HEX 03c0 2523 d2f8 ;vertical_shooting_ship_tallsprite_00 2524 d2f8 a1 4a HEX a14a 2525 d2fa ;vertical_shooting_bullet 2526 d2fa 3c HEX 3c 2527 d2fb ;vertical_shooting_enemyshot 2528 d2fb 10 HEX 10 2529 d2fc ;vertical_shooting_powerup 2530 d2fc 78 1e HEX 781e 2531 d2fe 2532 d300 ORG $D300,0 ; ************* 2533 d300 2534 d300 ;atascii 2535 d300 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2536 d320 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2537 d340 00 00 01 08* HEX 000001080000060600060300060f000001080108030c01080000000000000300 2538 d360 07 06 01 08* HEX 070601080108000c060c00060606010806060006000000000108000001080108 2539 d380 06 0e 06 06* HEX 060e060606060600060606000600060e06060108000607080600060b070e0606 2540 d3a0 07 0c 06 06* HEX 070c0606070c0006010806060606070f030c0108030001080108010806030000 2541 d3c0 00 00 03 0e* HEX 0000030e060606000606070e0108060606060108000607080108070f06060606 2542 d3e0 06 06 06 06* HEX 060606060600030c010806060606070f010806060108 2543 d3f6 ;vertical_shooting_ship 2544 d3f6 01 40 HEX 0140 2545 d3f8 ;vertical_shooting_ship_tallsprite_00 2546 d3f8 a5 5a HEX a55a 2547 d3fa ;vertical_shooting_bullet 2548 d3fa 3c HEX 3c 2549 d3fb ;vertical_shooting_enemyshot 2550 d3fb 74 HEX 74 2551 d3fc ;vertical_shooting_powerup 2552 d3fc 7a a4 HEX 7aa4 2553 d3fe 2554 d400 ORG $D400,0 ; ************* 2555 d400 2556 d400 ;atascii 2557 d400 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2558 d420 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2559 d440 00 00 01 08* HEX 0000010806060606030c010803080108010801080f0f070e0000070e00000108 2560 d460 06 0e 01 08* HEX 060e0108000c0108030c070c070c000c030c030e0108010803000000000c000c 2561 d480 06 0e 06 06* HEX 060e0606070c06000606070c070c0600070e0108000607080600070f070e0606 2562 d4a0 06 06 06 06* HEX 060606060606030c010806060606060b030c030c010801080300010803060000 2563 d4c0 01 08 00 06* HEX 01080006070c0600030e0606030e0606070c03080006060c0108070f06060606 2564 d4e0 06 06 06 06* HEX 0606060606060600010806060606060b030c0606000c 2565 d4f6 ;vertical_shooting_ship 2566 d4f6 01 40 HEX 0140 2567 d4f8 ;vertical_shooting_ship_tallsprite_00 2568 d4f8 a5 5a HEX a55a 2569 d4fa ;vertical_shooting_bullet 2570 d4fa 14 HEX 14 2571 d4fb ;vertical_shooting_enemyshot 2572 d4fb 74 HEX 74 2573 d4fc ;vertical_shooting_powerup 2574 d4fc 75 7a HEX 757a 2575 d4fe 2576 d500 ORG $D500,0 ; ************* 2577 d500 2578 d500 ;atascii 2579 d500 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2580 d520 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2581 d540 00 00 01 08* HEX 0000010806060f0f0600060c010c0108010c0308030c0108000000000000000c 2582 d560 06 06 03 08* HEX 060603080606000c010c06000600000606060606010801080108070e01080606 2583 d580 06 06 03 0c* HEX 0606030c06060606060c060006000600060601080006060c0600070707060606 2584 d5a0 06 06 06 06* HEX 0606060606060600010806060606060306060606000c010806000108010c0000 2585 d5c0 01 08 03 0c* HEX 0108030c0600030c0006030c0108030e060000000000060001080606070c030c 2586 d5e0 07 0c 03 0e* HEX 070c030e070c030e070e06060606060306060606070e 2587 d5f6 ;vertical_shooting_ship 2588 d5f6 01 40 HEX 0140 2589 d5f8 ;vertical_shooting_ship_tallsprite_00 2590 d5f8 a5 5a HEX a55a 2591 d5fa ;vertical_shooting_bullet 2592 d5fa 14 HEX 14 2593 d5fb ;vertical_shooting_enemyshot 2594 d5fb 74 HEX 74 2595 d5fc ;vertical_shooting_powerup 2596 d5fc 78 1e HEX 781e 2597 d5fe 2598 d600 ORG $D600,0 ; ************* 2599 d600 2600 d600 ;atascii 2601 d600 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2602 d620 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2603 d640 00 00 01 08* HEX 0000010806060606030e060603060108000e0700060601080000000000000006 2604 d660 03 0c 01 08* HEX 030c0108030c070e000c070e030c070e030c030c00000000000c00000300030c 2605 d680 03 0c 01 08* HEX 030c0108070c030c0708070e070e030e0606070e00060606060006030606030c 2606 d6a0 07 0c 03 0c* HEX 070c030c070c030c070e06060606060306060606070e010e0400070800080000 2607 d6c0 01 08 00 00* HEX 010800000600000000060000000e000006000108000606000308000000000000 2608 d6e0 00 00 00 00* HEX 00000000000000000108000000000000000000000000 2609 d6f6 ;vertical_shooting_ship 2610 d6f6 01 40 HEX 0140 2611 d6f8 ;vertical_shooting_ship_tallsprite_00 2612 d6f8 a7 da HEX a7da 2613 d6fa ;vertical_shooting_bullet 2614 d6fa 14 HEX 14 2615 d6fb ;vertical_shooting_enemyshot 2616 d6fb 10 HEX 10 2617 d6fc ;vertical_shooting_powerup 2618 d6fc 7a bc HEX 7abc 2619 d6fe 2620 d700 ORG $D700,0 ; ************* 2621 d700 2622 d700 ;atascii 2623 d700 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2624 d720 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2625 d740 00 00 00 00* HEX 000000000000000001080000010c000000000000000000000000000000000000 2626 d760 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000006000006000000 2627 d780 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2628 d7a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2629 d7c0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 2630 d7e0 00 00 00 00* HEX 00000000000000000000000000000000000000000000 2631 d7f6 ;vertical_shooting_ship 2632 d7f6 01 40 HEX 0140 2633 d7f8 ;vertical_shooting_ship_tallsprite_00 2634 d7f8 27 d8 HEX 27d8 2635 d7fa ;vertical_shooting_bullet 2636 d7fa 00 HEX 00 2637 d7fb ;vertical_shooting_enemyshot 2638 d7fb 88 HEX 88 2639 d7fc ;vertical_shooting_powerup 2640 d7fc 55 50 HEX 5550 2641 d7fe 2642 d800 ORG $D800,0 ; ************* 2643 d800 2644 e000 ORG $E000,0 ; ************* 2645 e000 2646 e000 vertical_shooting_enemy01 2647 e000 09 e0 HEX 09e0 2648 e002 vertical_shooting_enemy01_tallsprite_00 2649 e002 40 03 HEX 4003 2650 e004 vertical_shooting_score_10_digits 2651 e004 00 00 00 00* HEX 00000000000000000000 2652 e00e vertical_shooting_1up 2653 e00e 15 55 HEX 1555 2654 e010 2655 e100 ORG $E100,0 ; ************* 2656 e100 2657 e100 ;vertical_shooting_enemy01 2658 e100 09 e0 HEX 09e0 2659 e102 ;vertical_shooting_enemy01_tallsprite_00 2660 e102 50 0f HEX 500f 2661 e104 ;vertical_shooting_score_10_digits 2662 e104 54 54 54 10* HEX 54545410041054041010 2663 e10e ;vertical_shooting_1up 2664 e10e ea a9 HEX eaa9 2665 e110 2666 e200 ORG $E200,0 ; ************* 2667 e200 2668 e200 ;vertical_shooting_enemy01 2669 e200 19 ec HEX 19ec 2670 e202 ;vertical_shooting_enemy01_tallsprite_00 2671 e202 5a af HEX 5aaf 2672 e204 ;vertical_shooting_score_10_digits 2673 e204 cc 30 c0 cc* HEX cc30c0cc0ccccc0ccc0c 2674 e20e ;vertical_shooting_1up 2675 e20e d5 58 HEX d558 2676 e210 2677 e300 ORG $E300,0 ; ************* 2678 e300 2679 e300 ;vertical_shooting_enemy01 2680 e300 59 ef HEX 59ef 2681 e302 ;vertical_shooting_enemy01_tallsprite_00 2682 e302 59 ef HEX 59ef 2683 e304 ;vertical_shooting_score_10_digits 2684 e304 44 10 40 04* HEX 44104004040444044404 2685 e30e ;vertical_shooting_1up 2686 e30e 35 60 HEX 3560 2687 e310 2688 e400 ORG $E400,0 ; ************* 2689 e400 2690 e400 ;vertical_shooting_enemy01 2691 e400 59 6f HEX 596f 2692 e402 ;vertical_shooting_enemy01_tallsprite_00 2693 e402 59 ef HEX 59ef 2694 e404 ;vertical_shooting_score_10_digits 2695 e404 44 10 10 10* HEX 44101010540454041014 2696 e40e ;vertical_shooting_1up 2697 e40e 35 60 HEX 3560 2698 e410 2699 e500 ORG $E500,0 ; ************* 2700 e500 2701 e500 ;vertical_shooting_enemy01 2702 e500 5a af HEX 5aaf 2703 e502 ;vertical_shooting_enemy01_tallsprite_00 2704 e502 19 ec HEX 19ec 2705 e504 ;vertical_shooting_score_10_digits 2706 e504 88 20 08 08* HEX 8820080888a080088888 2707 e50e ;vertical_shooting_1up 2708 e50e 0d 80 HEX 0d80 2709 e510 2710 e600 ORG $E600,0 ; ************* 2711 e600 2712 e600 ;vertical_shooting_enemy01 2713 e600 50 07 HEX 5007 2714 e602 ;vertical_shooting_enemy01_tallsprite_00 2715 e602 09 e0 HEX 09e0 2716 e604 ;vertical_shooting_score_10_digits 2717 e604 88 a0 88 08* HEX 88a08808888080088888 2718 e60e ;vertical_shooting_1up 2719 e60e 0d 80 HEX 0d80 2720 e610 2721 e700 ORG $E700,0 ; ************* 2722 e700 2723 e700 ;vertical_shooting_enemy01 2724 e700 40 01 HEX 4001 2725 e702 ;vertical_shooting_enemy01_tallsprite_00 2726 e702 09 e0 HEX 09e0 2727 e704 ;vertical_shooting_score_10_digits 2728 e704 54 10 10 54* HEX 54101054445454541010 2729 e70e ;vertical_shooting_1up 2730 e70e 03 00 HEX 0300 2731 e710 2732 e710 2733 e710 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2734 e710 2735 e710 ifnconst bankswitchmode 2736 e710 if ( * < $f000 ) 2737 f000 ORG $F000 2738 f000 endif 2739 f000 - else 2740 f000 - ifconst ROM128K 2741 f000 - if ( * < $f000 ) 2742 f000 - ORG $27000 2743 f000 - RORG $F000 2744 f000 - endif 2745 f000 - endif 2746 f000 - ifconst ROM144K 2747 f000 - if ( * < $f000 ) 2748 f000 - ORG $27000 2749 f000 - RORG $F000 2750 f000 - endif 2751 f000 - endif 2752 f000 - ifconst ROM256K 2753 f000 - if ( * < $f000 ) 2754 f000 - ORG $47000 2755 f000 - RORG $F000 2756 f000 - endif 2757 f000 - endif 2758 f000 - ifconst ROM272K 2759 f000 - if ( * < $f000 ) 2760 f000 - ORG $47000 2761 f000 - RORG $F000 2762 f000 - endif 2763 f000 - endif 2764 f000 - ifconst ROM512K 2765 f000 - if ( * < $f000 ) 2766 f000 - ORG $87000 2767 f000 - RORG $F000 2768 f000 - endif 2769 f000 - endif 2770 f000 - ifconst ROM528K 2771 f000 - if ( * < $f000 ) 2772 f000 - ORG $87000 2773 f000 - RORG $F000 2774 f000 - endif 2775 f000 - endif 2776 f000 endif 2777 f000 2778 f000 ; all of these "modules" have conditional clauses in them, so even though 2779 f000 ; they're always included here, they don't take up rom unless the user 2780 f000 ; explicitly enables support for the feature. 2781 f000 2782 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_Vertical_Shooter_Rewrite1.bas.asm 2784 f000 endif 2785 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_Vertical_Shooter_Rewrite1.bas.asm 2787 f000 endif 2788 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_Vertical_Shooter_Rewrite1.bas.asm 2790 f000 endif 2791 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_Vertical_Shooter_Rewrite1.bas.asm 2793 f000 endif 2794 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2795 f000 2796 f000 ;standard routimes needed for pretty much all games 2797 f000 2798 f000 ; some definitions used with "set debug color" 2799 f000 00 91 DEBUGCALC = $91 2800 f000 00 41 DEBUGWASTE = $41 2801 f000 00 c1 DEBUGDRAW = $C1 2802 f000 2803 f000 ;NMI and IRQ handlers 2804 f000 NMI 2805 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 2806 f000 48 pha ; save A 2807 f001 a5 4d lda visibleover 2808 f003 49 ff eor #255 2809 f005 85 4d sta visibleover 2810 f007 - ifconst DEBUGINTERRUPT 2811 f007 - and #$93 2812 f007 - sta BACKGRND 2813 f007 endif 2814 f007 ce b2 01 dec interruptindex 2815 f00a d0 03 bne skipreallyoffvisible 2816 f00c 4c 5b f0 jmp reallyoffvisible 2817 f00f skipreallyoffvisible 2818 f00f a5 4d lda visibleover 2819 f011 f0 46 beq skiptopscreenroutine 2820 f013 8a txa ; save X+Y 2821 f014 48 pha 2822 f015 98 tya 2823 f016 48 pha 2824 f017 d8 cld 2825 f018 - ifconst .topscreenroutine 2826 f018 - jsr .topscreenroutine 2827 f018 endif 2828 f018 ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 2829 f01b 2830 f01b ; ** Other important routines that need to regularly run, and can run onscreen. 2831 f01b ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 2832 f01b 2833 f01b longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 2834 f01b - ifconst LONGCONTROLLERREAD 2835 f01b - lda #$38 2836 f01b - ifconst LONGDEBUG 2837 f01b - sta BACKGRND 2838 f01b - endif 2839 f01b - sta inttemp6 2840 f01b - 2841 f01b -longreadlineloop 2842 f01b - ldx #1 2843 f01b -longreadloop 2844 f01b - ldy port0control,x 2845 f01b - lda longreadroutinelo,y 2846 f01b - sta inttemp3 2847 f01b - lda longreadroutinehi,y 2848 f01b - sta inttemp4 2849 f01b - ora inttemp3 2850 f01b - beq longreadloopreturn 2851 f01b - jmp (inttemp3) 2852 f01b -longreadloopreturn 2853 f01b - dex 2854 f01b - bpl longreadloop 2855 f01b - dec inttemp6 2856 f01b - sta WSYNC 2857 f01b - bne longreadlineloop 2858 f01b - 2859 f01b - ifconst LONGDEBUG 2860 f01b - lda #$00 2861 f01b - sta BACKGRND 2862 f01b - endif 2863 f01b endif ; LONGCONTROLLERREAD 2864 f01b 2865 f01b 20 cd f1 jsr servicesfxchannels 2866 f01e - ifconst MUSICTRACKER 2867 f01e - jsr servicesong 2868 f01e endif ; MUSICTRACKER 2869 f01e 2870 f01e ee a4 01 inc framecounter 2871 f021 ad a4 01 lda framecounter 2872 f024 29 3f and #63 2873 f026 d0 08 bne skipcountdownseconds 2874 f028 ad a5 01 lda countdownseconds 2875 f02b f0 03 beq skipcountdownseconds 2876 f02d ce a5 01 dec countdownseconds 2877 f030 skipcountdownseconds 2878 f030 2879 f030 a2 01 ldx #1 2880 f032 buttonreadloop 2881 f032 8a txa 2882 f033 48 pha 2883 f034 bc e2 01 ldy port0control,x 2884 f037 b9 b0 f1 lda buttonhandlerlo,y 2885 f03a 85 da sta inttemp3 2886 f03c b9 a5 f1 lda buttonhandlerhi,y 2887 f03f 85 db sta inttemp4 2888 f041 05 da ora inttemp3 2889 f043 f0 03 beq buttonreadloopreturn 2890 f045 6c da 00 jmp (inttemp3) 2891 f048 buttonreadloopreturn 2892 f048 68 pla 2893 f049 aa tax 2894 f04a ca dex 2895 f04b 10 e5 bpl buttonreadloop 2896 f04d 2897 f04d - ifconst DRIVINGSUPPORT 2898 f04d - jsr drivingupdate 2899 f04d endif ; DRIVINGSUPPORT 2900 f04d - ifconst KEYPADSUPPORT 2901 f04d - jsr keypadrowselect 2902 f04d endif ; KEYPADSUPPORT 2903 f04d 2904 f04d 2905 f04d ad b5 01 lda doublebufferminimumframeindex 2906 f050 f0 03 beq skipdoublebufferminimumframeindexadjust 2907 f052 ce b5 01 dec doublebufferminimumframeindex 2908 f055 skipdoublebufferminimumframeindexadjust 2909 f055 2910 f055 68 pla 2911 f056 a8 tay 2912 f057 68 pla 2913 f058 aa tax 2914 f059 skiptopscreenroutine 2915 f059 68 pla 2916 f05a IRQ 2917 f05a 40 RTI 2918 f05b 2919 f05b - ifconst LONGCONTROLLERREAD 2920 f05b -longreadroutinelo 2921 f05b - ; NONE PROLINE LIGHTGUN PADDLE 2922 f05b - .byte 0, 0, 0, 0 2923 f05b - ; TRKBALL VCS STICK DRIVING KEYPAD 2924 f05b - .byte 0, 0, 0, 0 2925 f05b - ; STMOUSE AMOUSE ATARIVOX 2926 f05b - .byte mouseupdate, >mouseupdate, 0 2935 f05b -nullroutine 2936 f05b - rts 2937 f05b endif ; LONGCONTROLLERREAD 2938 f05b 2939 f05b reallyoffvisible 2940 f05b 85 24 sta WSYNC 2941 f05d 2942 f05d a9 00 lda #0 2943 f05f 85 4d sta visibleover 2944 f061 - ifconst DEBUGINTERRUPT 2945 f061 - sta BACKGRND 2946 f061 endif 2947 f061 2948 f061 a9 03 lda #3 2949 f063 8d b2 01 sta interruptindex 2950 f066 2951 f066 8a txa 2952 f067 48 pha 2953 f068 98 tya 2954 f069 48 pha 2955 f06a d8 cld 2956 f06b 2957 f06b 20 47 f1 jsr uninterruptableroutines 2958 f06e 2959 f06e - ifconst .userinterrupt 2960 f06e - jsr .userinterrupt 2961 f06e endif 2962 f06e 2963 f06e - ifconst KEYPADSUPPORT 2964 f06e - jsr keypadcolumnread 2965 f06e endif 2966 f06e 2967 f06e 68 pla 2968 f06f a8 tay 2969 f070 68 pla 2970 f071 aa tax 2971 f072 68 pla 2972 f073 40 RTI 2973 f074 2974 f074 clearscreen 2975 f074 a2 17 ldx #(WZONECOUNT-1) 2976 f076 a9 00 lda #0 2977 f078 clearscreenloop 2978 f078 95 65 sta dlend,x 2979 f07a ca dex 2980 f07b 10 fb bpl clearscreenloop 2981 f07d a9 00 lda #0 2982 f07f 8d ad 01 sta valbufend ; clear the bcd value buffer 2983 f082 8d ae 01 sta valbufendsave 2984 f085 60 rts 2985 f086 2986 f086 restorescreen 2987 f086 a2 17 ldx #(WZONECOUNT-1) 2988 f088 a9 00 lda #0 2989 f08a restorescreenloop 2990 f08a b5 82 lda dlendsave,x 2991 f08c 95 65 sta dlend,x 2992 f08e ca dex 2993 f08f 10 f9 bpl restorescreenloop 2994 f091 ad ae 01 lda valbufendsave 2995 f094 8d ad 01 sta valbufend 2996 f097 60 rts 2997 f098 2998 f098 savescreen 2999 f098 a2 17 ldx #(WZONECOUNT-1) 3000 f09a savescreenloop 3001 f09a b5 65 lda dlend,x 3002 f09c 95 82 sta dlendsave,x 3003 f09e ca dex 3004 f09f 10 f9 bpl savescreenloop 3005 f0a1 ad ad 01 lda valbufend 3006 f0a4 8d ae 01 sta valbufendsave 3007 f0a7 - ifconst DOUBLEBUFFER 3008 f0a7 - lda doublebufferstate 3009 f0a7 - beq savescreenrts 3010 f0a7 - lda #1 3011 f0a7 - sta doublebufferbufferdirty 3012 f0a7 -savescreenrts 3013 f0a7 endif ; DOUBLEBUFFER 3014 f0a7 60 rts 3015 f0a8 3016 f0a8 drawscreen 3017 f0a8 3018 f0a8 a9 00 lda #0 3019 f0aa 85 42 sta temp1 ; not B&W if we're here... 3020 f0ac 3021 f0ac drawscreenwait 3022 f0ac a5 4d lda visibleover 3023 f0ae d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 3024 f0b0 3025 f0b0 ;restore some registers in case the game changed them mid-screen... 3026 f0b0 ad 07 21 lda sCTRL 3027 f0b3 05 42 ora temp1 3028 f0b5 85 3c sta CTRL 3029 f0b7 ad 0b 21 lda sCHARBASE 3030 f0ba 85 34 sta CHARBASE 3031 f0bc 3032 f0bc ;ensure all of the display list is terminated... 3033 f0bc 20 2d f1 jsr terminatedisplaylist 3034 f0bf 3035 f0bf ifnconst pauseroutineoff 3036 f0bf 20 ca f0 jsr pauseroutine 3037 f0c2 endif ; pauseroutineoff 3038 f0c2 3039 f0c2 ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 3040 f0c2 ; delaying a full frame, but still allowing time for basic calculations. 3041 f0c2 visiblescreenstartedwait 3042 f0c2 a5 4d lda visibleover 3043 f0c4 f0 fc beq visiblescreenstartedwait 3044 f0c6 visiblescreenstartedwaitdone 3045 f0c6 ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 3046 f0c9 60 rts 3047 f0ca 3048 f0ca ifnconst pauseroutineoff 3049 f0ca ; check to see if pause was pressed and released 3050 f0ca pauseroutine 3051 f0ca ad b6 01 lda pausedisable 3052 f0cd d0 4e bne leavepauseroutine 3053 f0cf a9 08 lda #8 3054 f0d1 2c 82 02 bit SWCHB 3055 f0d4 f0 29 beq pausepressed 3056 f0d6 3057 f0d6 ifnconst SOFTRESETASPAUSEOFF 3058 f0d6 ifnconst MOUSESUPPORT 3059 f0d6 ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 3060 f0d9 29 70 and #%01110000 ; _LDU 3061 f0db f0 22 beq pausepressed 3062 f0dd endif 3063 f0dd endif 3064 f0dd 3065 f0dd ;pause isn't pressed 3066 f0dd a9 00 lda #0 3067 f0df 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 3068 f0e2 3069 f0e2 ;check if we're in an already paused state 3070 f0e2 ad 00 21 lda pausestate 3071 f0e5 f0 36 beq leavepauseroutine ; nope, leave 3072 f0e7 3073 f0e7 c9 01 cmp #1 ; last frame was the start of pausing 3074 f0e9 f0 2b beq enterpausestate2 ; move from state 1 to 2 3075 f0eb 3076 f0eb c9 02 cmp #2 3077 f0ed f0 34 beq carryonpausing 3078 f0ef 3079 f0ef ;pausestate must be >2, which means we're ending an unpause 3080 f0ef a9 00 lda #0 3081 f0f1 8d ac 01 sta pausebuttonflag 3082 f0f4 8d 00 21 sta pausestate 3083 f0f7 ad 07 21 lda sCTRL 3084 f0fa 85 3c sta CTRL 3085 f0fc 4c 1d f1 jmp leavepauseroutine 3086 f0ff 3087 f0ff pausepressed 3088 f0ff ;pause is pressed 3089 f0ff ad ac 01 lda pausebuttonflag 3090 f102 c9 ff cmp #$ff 3091 f104 f0 1d beq carryonpausing 3092 f106 3093 f106 ;its a new press, increment the state 3094 f106 ee 00 21 inc pausestate 3095 f109 3096 f109 ;silence volume at the start and end of pausing 3097 f109 a9 00 lda #0 3098 f10b 85 19 sta AUDV0 3099 f10d 85 1a sta AUDV1 3100 f10f 3101 f10f - ifconst pokeysupport 3102 f10f - ldy #7 3103 f10f -pausesilencepokeyaudioloop 3104 f10f - sta (pokeybase),y 3105 f10f - dey 3106 f10f - bpl pausesilencepokeyaudioloop 3107 f10f endif ; pokeysupport 3108 f10f 3109 f10f a9 ff lda #$ff 3110 f111 8d ac 01 sta pausebuttonflag 3111 f114 d0 0d bne carryonpausing 3112 f116 3113 f116 enterpausestate2 3114 f116 a9 02 lda #2 3115 f118 8d 00 21 sta pausestate 3116 f11b d0 06 bne carryonpausing 3117 f11d leavepauseroutine 3118 f11d ad 07 21 lda sCTRL 3119 f120 85 3c sta CTRL 3120 f122 60 rts 3121 f123 carryonpausing 3122 f123 - ifconst .pause 3123 f123 - jsr .pause 3124 f123 endif ; .pause 3125 f123 ad 07 21 lda sCTRL 3126 f126 09 80 ora #%10000000 ; turn off colorburst during pause... 3127 f128 85 3c sta CTRL 3128 f12a 4c ca f0 jmp pauseroutine 3129 f12d endif ; pauseroutineoff 3130 f12d 3131 f12d 3132 f12d - ifconst DOUBLEBUFFER 3133 f12d -skipterminatedisplaylistreturn 3134 f12d - rts 3135 f12d endif ; DOUBLEBUFFER 3136 f12d terminatedisplaylist 3137 f12d - ifconst DOUBLEBUFFER 3138 f12d - lda doublebufferstate 3139 f12d - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 3140 f12d endif ; DOUBLEBUFFER 3141 f12d terminatedisplaybuffer 3142 f12d ;add DL end entry on each DL 3143 f12d a2 17 ldx #(WZONECOUNT-1) 3144 f12f dlendloop 3145 f12f bd 2f f6 lda DLPOINTL,x 3146 f132 - ifconst DOUBLEBUFFER 3147 f132 - clc 3148 f132 - adc doublebufferdloffset 3149 f132 endif ; DOUBLEBUFFER 3150 f132 85 63 sta dlpnt 3151 f134 bd 17 f6 lda DLPOINTH,x 3152 f137 - ifconst DOUBLEBUFFER 3153 f137 - adc #0 3154 f137 endif ; DOUBLEBUFFER 3155 f137 85 64 sta dlpnt+1 3156 f139 b4 65 ldy dlend,x 3157 f13b a9 00 lda #$00 3158 f13d dlendmoreloops 3159 f13d c8 iny 3160 f13e 91 63 sta (dlpnt),y 3161 f140 - ifconst FRAMESKIPGLITCHFIXWEAK 3162 f140 - cpy #DLLASTOBJ+1 3163 f140 - beq dlendthiszonedone 3164 f140 - iny 3165 f140 - iny 3166 f140 - iny 3167 f140 - iny 3168 f140 - iny 3169 f140 - sta (dlpnt),y 3170 f140 -dlendthiszonedone 3171 f140 endif FRAMESKIPGLITCHFIXWEAK 3172 f140 - ifconst FRAMESKIPGLITCHFIX 3173 f140 - iny 3174 f140 - iny 3175 f140 - iny 3176 f140 - iny 3177 f140 - cpy #DLLASTOBJ-1 3178 f140 - bcc dlendmoreloops 3179 f140 endif ; FRAMESKIPGLITCHFIX 3180 f140 ca dex 3181 f141 10 ec bpl dlendloop 3182 f143 3183 f143 ifnconst pauseroutineoff 3184 f143 20 ca f0 jsr pauseroutine 3185 f146 endif ; pauseroutineoff 3186 f146 60 rts 3187 f147 3188 f147 uninterruptableroutines 3189 f147 ; this is for routines that must happen off the visible screen, each frame. 3190 f147 3191 f147 - ifconst AVOXVOICE 3192 f147 - jsr serviceatarivoxqueue 3193 f147 endif 3194 f147 3195 f147 a9 00 lda #0 3196 f149 8d e1 01 sta palfastframe 3197 f14c ad 09 21 lda paldetected 3198 f14f f0 10 beq skippalframeadjusting 3199 f151 ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 3200 f151 ae e0 01 ldx palframes 3201 f154 e8 inx 3202 f155 e0 05 cpx #5 3203 f157 d0 05 bne palframeskipdone 3204 f159 ee e1 01 inc palfastframe 3205 f15c a2 00 ldx #0 3206 f15e palframeskipdone 3207 f15e 8e e0 01 stx palframes 3208 f161 skippalframeadjusting 3209 f161 3210 f161 - ifconst MUSICTRACKER 3211 f161 - ; We normally run the servicesong routine from the top-screen interrupt, but if it 3212 f161 - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 3213 f161 - ; If that happens, we try again here. Chances are very small we'll run into the same 3214 f161 - ; problem twice, and if we do, we just drop a musical note or two. 3215 f161 - lda sfxschedulemissed 3216 f161 - beq servicesongwasnotmissed 3217 f161 - jsr servicesong 3218 f161 -servicesongwasnotmissed 3219 f161 endif ; MUSICTRACKER 3220 f161 3221 f161 60 rts 3222 f162 3223 f162 serviceatarivoxqueue 3224 f162 - ifconst AVOXVOICE 3225 f162 - lda voxlock 3226 f162 - bne skipvoxprocessing ; the vox is in the middle of speech address update 3227 f162 -skipvoxqueuesizedec 3228 f162 - jmp processavoxvoice 3229 f162 -skipvoxprocessing 3230 f162 - rts 3231 f162 - 3232 f162 -processavoxvoice 3233 f162 - lda avoxenable 3234 f162 - bne avoxfixport 3235 f162 - SPKOUT tempavox 3236 f162 - rts 3237 f162 -avoxfixport 3238 f162 - lda #0 ; restore the port to all bits as inputs... 3239 f162 - sta CTLSWA 3240 f162 - rts 3241 f162 -silenceavoxvoice 3242 f162 - SPEAK avoxsilentdata 3243 f162 - rts 3244 f162 -avoxsilentdata 3245 f162 - .byte 31,255 3246 f162 else 3247 f162 60 rts 3248 f163 endif ; AVOXVOICE 3249 f163 3250 f163 joybuttonhandler 3251 f163 8a txa 3252 f164 0a asl 3253 f165 a8 tay 3254 f166 b9 08 00 lda INPT0,y 3255 f169 4a lsr 3256 f16a 9d 02 21 sta sINPT1,x 3257 f16d b9 09 00 lda INPT1,y 3258 f170 29 80 and #%10000000 3259 f172 1d 02 21 ora sINPT1,x 3260 f175 ;eor genesisdetected0,x ; invert INPT1 if genesis is detected 3261 f175 9d 02 21 sta sINPT1,x 3262 f178 3263 f178 b5 0c lda INPT4,x 3264 f17a 30 19 bmi .skip1bjoyfirecheck 3265 f17c ;one button joystick is down 3266 f17c 49 80 eor #%10000000 3267 f17e 9d 02 21 sta sINPT1,x 3268 f181 3269 f181 ad b1 01 lda joybuttonmode 3270 f184 3d 98 f1 and twobuttonmask,x 3271 f187 f0 0c beq .skip1bjoyfirecheck 3272 f189 ad b1 01 lda joybuttonmode 3273 f18c 1d 98 f1 ora twobuttonmask,x 3274 f18f 8d b1 01 sta joybuttonmode 3275 f192 8d 82 02 sta SWCHB 3276 f195 .skip1bjoyfirecheck 3277 f195 4c 48 f0 jmp buttonreadloopreturn 3278 f198 3279 f198 twobuttonmask 3280 f198 04 10 .byte.b %00000100,%00010000 3281 f19a 3282 f19a gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 3283 f19a - ifconst LIGHTGUNSUPPORT 3284 f19a - cpx #0 3285 f19a - bne secondportgunhandler 3286 f19a -firstportgunhandler 3287 f19a - lda SWCHA 3288 f19a - asl 3289 f19a - asl 3290 f19a - asl ; shift D4 to D7 3291 f19a - and #%10000000 3292 f19a - eor #%10000000 3293 f19a - sta sINPT1 3294 f19a - jmp buttonreadloopreturn 3295 f19a -secondportgunhandler 3296 f19a - lda SWCHA 3297 f19a - lsr ; shift D0 into carry 3298 f19a - lsr ; shift carry into D7 3299 f19a - and #%10000000 3300 f19a - eor #%10000000 3301 f19a - sta sINPT3 3302 f19a - jmp buttonreadloopreturn 3303 f19a endif ; LIGHTGUNSUPPORT 3304 f19a 3305 f19a controlsusing2buttoncode 3306 f19a 00 .byte.b 0 ; 00=no controller plugged in 3307 f19b 01 .byte.b 1 ; 01=proline joystick 3308 f19c 00 .byte.b 0 ; 02=lightgun 3309 f19d 00 .byte.b 0 ; 03=paddle 3310 f19e 01 .byte.b 1 ; 04=trakball 3311 f19f 01 .byte.b 1 ; 05=vcs joystick 3312 f1a0 01 .byte.b 1 ; 06=driving control 3313 f1a1 00 .byte.b 0 ; 07=keypad control 3314 f1a2 00 .byte.b 0 ; 08=st mouse/cx80 3315 f1a3 00 .byte.b 0 ; 09=amiga mouse 3316 f1a4 01 .byte.b 1 ; 10=atarivox 3317 f1a5 3318 f1a5 buttonhandlerhi 3319 f1a5 00 .byte.b 0 ; 00=no controller plugged in 3320 f1a6 f1 .byte.b >joybuttonhandler ; 01=proline joystick 3321 f1a7 f1 .byte.b >gunbuttonhandler ; 02=lightgun 3322 f1a8 00 .byte.b 0 ; 03=paddle [not implemented yet] 3323 f1a9 f1 .byte.b >joybuttonhandler ; 04=trakball 3324 f1aa f1 .byte.b >joybuttonhandler ; 05=vcs joystick 3325 f1ab f1 .byte.b >joybuttonhandler ; 06=driving control 3326 f1ac 00 .byte.b 0 ; 07=keypad 3327 f1ad f5 .byte.b >mousebuttonhandler ; 08=st mouse 3328 f1ae f5 .byte.b >mousebuttonhandler ; 09=amiga mouse 3329 f1af f1 .byte.b >joybuttonhandler ; 10=atarivox 3330 f1b0 buttonhandlerlo 3331 f1b0 00 .byte.b 0 ; 00=no controller plugged in 3332 f1b1 63 .byte.b $0F means the sound is looped while priority is active 3433 f20e 3434 f20e 05 d9 ora inttemp2 3435 f210 05 d8 ora inttemp1 ; check if F|C|V=0 3436 f212 f0 23 beq zerosfx ; if so, we're at the end of the sound. 3437 f214 3438 f214 advancesfxpointer 3439 f214 ; advance the pointer to the next sound chunk 3440 f214 c8 iny 3441 f215 84 da sty inttemp3 3442 f217 18 clc 3443 f218 b5 4e lda sfx1pointlo,x 3444 f21a 65 da adc inttemp3 3445 f21c 95 4e sta sfx1pointlo,x 3446 f21e b5 50 lda sfx1pointhi,x 3447 f220 69 00 adc #0 3448 f222 95 50 sta sfx1pointhi,x 3449 f224 4c cf f1 jmp servicesfxchannelsloop 3450 f227 3451 f227 sfxsoundloop 3452 f227 48 pha 3453 f228 b5 52 lda sfx1priority,x 3454 f22a d0 04 bne sfxsoundloop_carryon 3455 f22c 68 pla ; fix the stack before we go 3456 f22d 4c 14 f2 jmp advancesfxpointer 3457 f230 sfxsoundloop_carryon 3458 f230 68 pla 3459 f231 29 f0 and #$F0 3460 f233 4a lsr 3461 f234 4a lsr 3462 f235 4a lsr 3463 f236 4a lsr 3464 f237 3465 f237 zerosfx 3466 f237 95 4e sta sfx1pointlo,x 3467 f239 95 50 sta sfx1pointhi,x 3468 f23b 95 52 sta sfx1priority,x 3469 f23d 4c cf f1 jmp servicesfxchannelsloop 3470 f240 3471 f240 3472 f240 schedulesfx 3473 f240 ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 3474 f240 a0 00 ldy #0 3475 f242 b1 e0 lda (sfxinstrumentlo),y 3476 f244 - ifconst pokeysupport 3477 f244 - cmp #$20 ; POKEY? 3478 f244 - bne scheduletiasfx 3479 f244 - jmp schedulepokeysfx 3480 f244 endif 3481 f244 scheduletiasfx 3482 f244 ;cmp #$10 ; TIA? 3483 f244 ;beq continuescheduletiasfx 3484 f244 ; rts ; unhandled!!! 3485 f244 continuescheduletiasfx 3486 f244 ifnconst TIASFXMONO 3487 f244 a5 4e lda sfx1pointlo 3488 f246 05 50 ora sfx1pointhi 3489 f248 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 3490 f24a a5 4f lda sfx2pointlo 3491 f24c 05 51 ora sfx2pointhi 3492 f24e f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 3493 f250 ; Both channels are scheduled. 3494 f250 a0 01 ldy #1 3495 f252 b1 e0 lda (sfxinstrumentlo),y 3496 f254 d0 01 bne interruptsfx 3497 f256 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 3498 f257 interruptsfx 3499 f257 ;Compare which active sound has a lower priority. We'll interrupt the lower one. 3500 f257 a5 52 lda sfx1priority 3501 f259 c5 53 cmp sfx2priority 3502 f25b b0 04 bcs schedulesfx2 3503 f25d endif ; !TIASFXMONO 3504 f25d 3505 f25d schedulesfx1 3506 f25d a2 00 ldx #0 ; channel 1 3507 f25f ifnconst TIASFXMONO 3508 f25f f0 02 beq skipschedulesfx2 3509 f261 schedulesfx2 3510 f261 a2 01 ldx #1 ; channel 2 3511 f263 skipschedulesfx2 3512 f263 endif ; !TIASFXMONO 3513 f263 3514 f263 - ifconst MUSICTRACKER 3515 f263 - lda sfxnoteindex 3516 f263 - bpl skipdrumkitoverride 3517 f263 - and #$7F ; subtract 128 3518 f263 - sec 3519 f263 - sbc #4 ; drums start at 132, i.e. octave 10 3520 f263 - asl 3521 f263 - tay 3522 f263 - lda tiadrumkitdefinition,y 3523 f263 - sta sfxinstrumentlo 3524 f263 - iny 3525 f263 - lda tiadrumkitdefinition,y 3526 f263 - sta sfxinstrumenthi 3527 f263 - lda #0 3528 f263 - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 3529 f263 -skipdrumkitoverride 3530 f263 endif ; MUSICTRACKER 3531 f263 a0 01 ldy #1 ; get priority and sound-resolution (in frames) 3532 f265 b1 e0 lda (sfxinstrumentlo),y 3533 f267 95 52 sta sfx1priority,x 3534 f269 c8 iny 3535 f26a b1 e0 lda (sfxinstrumentlo),y 3536 f26c 95 56 sta sfx1frames,x 3537 f26e a5 e0 lda sfxinstrumentlo 3538 f270 18 clc 3539 f271 69 03 adc #3 3540 f273 95 4e sta sfx1pointlo,x 3541 f275 a5 e1 lda sfxinstrumenthi 3542 f277 69 00 adc #0 3543 f279 95 50 sta sfx1pointhi,x 3544 f27b a5 e2 lda sfxpitchoffset 3545 f27d 95 54 sta sfx1poffset,x 3546 f27f a9 00 lda #0 3547 f281 95 58 sta sfx1tick,x 3548 f283 a5 e3 lda sfxnoteindex 3549 f285 95 cd sta sfx1notedata,x 3550 f287 60 rts 3551 f288 3552 f288 plotsprite 3553 f288 - ifconst DOUBLEBUFFER 3554 f288 - lda doublebufferstate 3555 f288 - bne skipplotspritewait 3556 f288 endif ; DOUBLEBUFFER 3557 f288 plotspritewait 3558 f288 a5 4d lda visibleover 3559 f28a d0 fc bne plotspritewait 3560 f28c skipplotspritewait 3561 f28c 3562 f28c ;arguments: 3563 f28c ; temp1=lo graphicdata 3564 f28c ; temp2=hi graphicdata 3565 f28c ; temp3=palette | width byte 3566 f28c ; temp4=x 3567 f28c ; temp5=y 3568 f28c ; temp6=mode 3569 f28c a5 46 lda temp5 ;Y position 3570 f28e 4a lsr ; 2 - Divide by 8 or 16 3571 f28f 4a lsr ; 2 3572 f290 4a lsr ; 2 3573 f291 - if WZONEHEIGHT = 16 3574 f291 - lsr ; 2 3575 f291 endif 3576 f291 3577 f291 aa tax 3578 f292 3579 f292 ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 3580 f292 3581 f292 c9 18 cmp #WZONECOUNT 3582 f294 3583 f294 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 3584 f296 ; otherwise, check to see if the bottom half is in zone 0... 3585 f296 3586 f296 - if WZONEHEIGHT = 16 3587 f296 - cmp #15 3588 f296 else 3589 f296 c9 1f cmp #31 3590 f298 endif 3591 f298 3592 f298 d0 05 bne exitplotsprite1 3593 f29a a2 00 ldx #0 3594 f29c 4c db f2 jmp continueplotsprite2 3595 f29f exitplotsprite1 3596 f29f 60 rts 3597 f2a0 3598 f2a0 continueplotsprite1 3599 f2a0 3600 f2a0 bd 2f f6 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 3601 f2a3 - ifconst DOUBLEBUFFER 3602 f2a3 - clc 3603 f2a3 - adc doublebufferdloffset 3604 f2a3 endif ; DOUBLEBUFFER 3605 f2a3 85 63 sta dlpnt 3606 f2a5 bd 17 f6 lda DLPOINTH,x 3607 f2a8 - ifconst DOUBLEBUFFER 3608 f2a8 - adc #0 3609 f2a8 endif ; DOUBLEBUFFER 3610 f2a8 85 64 sta dlpnt+1 3611 f2aa 3612 f2aa ;Create DL entry for upper part of sprite 3613 f2aa 3614 f2aa b4 65 ldy dlend,x ;Get the index to the end of this DL 3615 f2ac 3616 f2ac ifconst CHECKOVERWRITE 3617 f2ac c0 4b cpy #DLLASTOBJ 3618 f2ae f0 1f beq checkcontinueplotsprite2 3619 f2b0 continueplotsprite1a 3620 f2b0 endif 3621 f2b0 3622 f2b0 a5 42 lda temp1 ; graphic data, lo byte 3623 f2b2 91 63 sta (dlpnt),y ;Low byte of data address 3624 f2b4 3625 f2b4 ifnconst ATOMICSPRITEUPDATE 3626 f2b4 c8 iny 3627 f2b5 a5 47 lda temp6 3628 f2b7 91 63 sta (dlpnt),y 3629 f2b9 - else 3630 f2b9 - iny 3631 f2b9 - sty temp8 3632 f2b9 - ;lda #0 3633 f2b9 - ;sta (dlpnt),y 3634 f2b9 endif 3635 f2b9 3636 f2b9 c8 iny 3637 f2ba a5 46 lda temp5 ;Y position 3638 f2bc 3639 f2bc - if WZONEHEIGHT = 16 3640 f2bc - and #$0F 3641 f2bc else ; WZONEHEIGHT = 8 3642 f2bc 29 07 and #$7 3643 f2be endif 3644 f2be 3645 f2be 05 43 ora temp2 ; graphic data, hi byte 3646 f2c0 91 63 sta (dlpnt),y 3647 f2c2 3648 f2c2 c8 iny 3649 f2c3 a5 44 lda temp3 ;palette|width 3650 f2c5 91 63 sta (dlpnt),y 3651 f2c7 3652 f2c7 c8 iny 3653 f2c8 a5 45 lda temp4 ;Horizontal position 3654 f2ca 91 63 sta (dlpnt),y 3655 f2cc 3656 f2cc c8 iny 3657 f2cd 94 65 sty dlend,x 3658 f2cf 3659 f2cf - ifconst ATOMICSPRITEUPDATE 3660 f2cf - ldy temp8 3661 f2cf - lda temp6 3662 f2cf - sta (dlpnt),y 3663 f2cf endif 3664 f2cf checkcontinueplotsprite2 3665 f2cf 3666 f2cf a5 46 lda temp5 3667 f2d1 29 07 and #(WZONEHEIGHT-1) 3668 f2d3 3669 f2d3 f0 3d beq doneSPDL ;branch if it is 3670 f2d5 3671 f2d5 ;Create DL entry for lower part of sprite 3672 f2d5 3673 f2d5 e8 inx ;Next region 3674 f2d6 3675 f2d6 e0 18 cpx #WZONECOUNT 3676 f2d8 3677 f2d8 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 3678 f2da 60 rts 3679 f2db continueplotsprite2 3680 f2db 3681 f2db bd 2f f6 lda DLPOINTL,x ;Get pointer to next DL 3682 f2de - ifconst DOUBLEBUFFER 3683 f2de - clc 3684 f2de - adc doublebufferdloffset 3685 f2de endif ; DOUBLEBUFFER 3686 f2de 85 63 sta dlpnt 3687 f2e0 bd 17 f6 lda DLPOINTH,x 3688 f2e3 - ifconst DOUBLEBUFFER 3689 f2e3 - adc #0 3690 f2e3 endif ; DOUBLEBUFFER 3691 f2e3 85 64 sta dlpnt+1 3692 f2e5 b4 65 ldy dlend,x ;Get the index to the end of this DL 3693 f2e7 3694 f2e7 ifconst CHECKOVERWRITE 3695 f2e7 c0 4b cpy #DLLASTOBJ 3696 f2e9 d0 01 bne continueplotsprite2a 3697 f2eb 60 rts 3698 f2ec continueplotsprite2a 3699 f2ec endif 3700 f2ec 3701 f2ec a5 42 lda temp1 ; graphic data, lo byte 3702 f2ee 91 63 sta (dlpnt),y 3703 f2f0 3704 f2f0 ifnconst ATOMICSPRITEUPDATE 3705 f2f0 c8 iny 3706 f2f1 a5 47 lda temp6 3707 f2f3 91 63 sta (dlpnt),y 3708 f2f5 - else 3709 f2f5 - iny 3710 f2f5 - sty temp8 3711 f2f5 - ;lda #0 3712 f2f5 - ;sta (dlpnt),y 3713 f2f5 endif 3714 f2f5 3715 f2f5 c8 iny 3716 f2f6 a5 46 lda temp5 ;Y position 3717 f2f8 3718 f2f8 - if WZONEHEIGHT = 16 3719 f2f8 - and #$0F 3720 f2f8 - eor #$0F 3721 f2f8 endif 3722 f2f8 if WZONEHEIGHT = 8 3723 f2f8 29 07 and #$07 3724 f2fa 49 07 eor #$07 3725 f2fc endif 3726 f2fc 3727 f2fc 85 4a sta temp9 3728 f2fe a5 43 lda temp2 ; graphic data, hi byte 3729 f300 18 clc 3730 f301 e5 4a sbc temp9 3731 f303 91 63 sta (dlpnt),y 3732 f305 3733 f305 c8 iny 3734 f306 a5 44 lda temp3 ;palette|width 3735 f308 91 63 sta (dlpnt),y 3736 f30a 3737 f30a c8 iny 3738 f30b a5 45 lda temp4 ;Horizontal position 3739 f30d 91 63 sta (dlpnt),y 3740 f30f 3741 f30f c8 iny 3742 f310 94 65 sty dlend,x 3743 f312 3744 f312 - ifconst ATOMICSPRITEUPDATE 3745 f312 - ldy temp8 3746 f312 - lda temp6 3747 f312 - sta (dlpnt),y 3748 f312 endif 3749 f312 3750 f312 doneSPDL 3751 f312 60 rts 3752 f313 3753 f313 lockzonex 3754 f313 - ifconst ZONELOCKS 3755 f313 - ldy dlend,x 3756 f313 - cpy #DLLASTOBJ 3757 f313 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 3758 f313 - lda DLPOINTL,x 3759 f313 - ifconst DOUBLEBUFFER 3760 f313 - clc 3761 f313 - adc doublebufferdloffset 3762 f313 - endif ; DOUBLEBUFFER 3763 f313 - sta dlpnt 3764 f313 - lda DLPOINTH,x 3765 f313 - ifconst DOUBLEBUFFER 3766 f313 - adc #0 3767 f313 - endif ; DOUBLEBUFFER 3768 f313 - sta dlpnt+1 3769 f313 - iny 3770 f313 - lda #0 3771 f313 - sta (dlpnt),y 3772 f313 - dey 3773 f313 - tya 3774 f313 - ldy #(DLLASTOBJ-1) 3775 f313 - sta (dlpnt),y 3776 f313 - iny 3777 f313 - sty dlend,x 3778 f313 -lockzonexreturn 3779 f313 - rts 3780 f313 endif ; ZONELOCKS 3781 f313 unlockzonex 3782 f313 - ifconst ZONELOCKS 3783 f313 - ldy dlend,x 3784 f313 - cpy #DLLASTOBJ 3785 f313 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 3786 f313 - lda DLPOINTL,x 3787 f313 - ifconst DOUBLEBUFFER 3788 f313 - clc 3789 f313 - adc doublebufferdloffset 3790 f313 - endif ; DOUBLEBUFFER 3791 f313 - sta dlpnt 3792 f313 - lda DLPOINTH,x 3793 f313 - ifconst DOUBLEBUFFER 3794 f313 - adc #0 3795 f313 - endif ; DOUBLEBUFFER 3796 f313 - sta dlpnt+1 3797 f313 - dey 3798 f313 - ;ldy #(DLLASTOBJ-1) 3799 f313 - lda (dlpnt),y 3800 f313 - tay 3801 f313 - sty dlend,x 3802 f313 -unlockzonexreturn 3803 f313 endif ; ZONELOCKS 3804 f313 60 rts 3805 f314 3806 f314 plotcharloop 3807 f314 ; ** read from a data indirectly pointed to from temp8,temp9 3808 f314 ; ** format is: lo_data, hi_data, palette|width, x, y 3809 f314 ; ** format ends with lo_data | hi_data = 0 3810 f314 3811 f314 - ifconst DOUBLEBUFFER 3812 f314 - lda doublebufferstate 3813 f314 - bne skipplotcharloopwait 3814 f314 endif ; DOUBLEBUFFER 3815 f314 plotcharloopwait 3816 f314 a5 4d lda visibleover 3817 f316 d0 fc bne plotcharloopwait 3818 f318 skipplotcharloopwait 3819 f318 plotcharlooploop 3820 f318 a0 00 ldy #0 3821 f31a b1 49 lda (temp8),y 3822 f31c 85 42 sta temp1 3823 f31e c8 iny 3824 f31f b1 49 lda (temp8),y 3825 f321 85 43 sta temp2 3826 f323 05 42 ora temp1 3827 f325 d0 01 bne plotcharloopcontinue 3828 f327 ;the pointer=0, so return 3829 f327 60 rts 3830 f328 plotcharloopcontinue 3831 f328 c8 iny 3832 f329 b1 49 lda (temp8),y 3833 f32b 85 44 sta temp3 3834 f32d c8 iny 3835 f32e b1 49 lda (temp8),y 3836 f330 85 45 sta temp4 3837 f332 c8 iny 3838 f333 b1 49 lda (temp8),y 3839 f335 ;sta temp5 ; not needed with our late entry. 3840 f335 20 4e f3 jsr plotcharactersskipentry 3841 f338 a5 49 lda temp8 3842 f33a 18 clc 3843 f33b 69 05 adc #5 3844 f33d 85 49 sta temp8 3845 f33f a5 4a lda temp9 3846 f341 69 00 adc #0 3847 f343 85 4a sta temp9 3848 f345 4c 18 f3 jmp plotcharlooploop 3849 f348 3850 f348 plotcharacters 3851 f348 - ifconst DOUBLEBUFFER 3852 f348 - lda doublebufferstate 3853 f348 - bne skipplotcharacterswait 3854 f348 endif ; DOUBLEBUFFER 3855 f348 plotcharacterswait 3856 f348 a5 4d lda visibleover 3857 f34a d0 fc bne plotcharacterswait 3858 f34c skipplotcharacterswait 3859 f34c ;arguments: 3860 f34c ; temp1=lo charactermap 3861 f34c ; temp2=hi charactermap 3862 f34c ; temp3=palette | width byte 3863 f34c ; temp4=x 3864 f34c ; temp5=y 3865 f34c 3866 f34c a5 46 lda temp5 ;Y position 3867 f34e 3868 f34e plotcharactersskipentry 3869 f34e 3870 f34e ;ifconst ZONEHEIGHT 3871 f34e ; if ZONEHEIGHT = 16 3872 f34e ; and #$0F 3873 f34e ; endif 3874 f34e ; if ZONEHEIGHT = 8 3875 f34e ; and #$1F 3876 f34e ; endif 3877 f34e ;else 3878 f34e ; and #$0F 3879 f34e ;endif 3880 f34e 3881 f34e aa tax 3882 f34f bd 2f f6 lda DLPOINTL,x ;Get pointer to DL that the characters are in 3883 f352 - ifconst DOUBLEBUFFER 3884 f352 - clc 3885 f352 - adc doublebufferdloffset 3886 f352 endif ; DOUBLEBUFFER 3887 f352 85 63 sta dlpnt 3888 f354 bd 17 f6 lda DLPOINTH,x 3889 f357 - ifconst DOUBLEBUFFER 3890 f357 - adc #0 3891 f357 endif ; DOUBLEBUFFER 3892 f357 85 64 sta dlpnt+1 3893 f359 3894 f359 ;Create DL entry for the characters 3895 f359 3896 f359 b4 65 ldy dlend,x ;Get the index to the end of this DL 3897 f35b 3898 f35b ifconst CHECKOVERWRITE 3899 f35b c0 4b cpy #DLLASTOBJ 3900 f35d d0 01 bne continueplotcharacters 3901 f35f 60 rts 3902 f360 continueplotcharacters 3903 f360 endif 3904 f360 3905 f360 a5 42 lda temp1 ; character map data, lo byte 3906 f362 91 63 sta (dlpnt),y ;(1) store low address 3907 f364 3908 f364 c8 iny 3909 f365 ad 06 21 lda charactermode 3910 f368 91 63 sta (dlpnt),y ;(2) store mode 3911 f36a 3912 f36a c8 iny 3913 f36b a5 43 lda temp2 ; character map, hi byte 3914 f36d 91 63 sta (dlpnt),y ;(3) store high address 3915 f36f 3916 f36f c8 iny 3917 f370 a5 44 lda temp3 ;palette|width 3918 f372 91 63 sta (dlpnt),y ;(4) store palette|width 3919 f374 3920 f374 c8 iny 3921 f375 a5 45 lda temp4 ;Horizontal position 3922 f377 91 63 sta (dlpnt),y ;(5) store horizontal position 3923 f379 3924 f379 c8 iny 3925 f37a 94 65 sty dlend,x ; save display list end byte 3926 f37c 60 rts 3927 f37d 3928 f37d 3929 f37d - ifconst plotvalueonscreen 3930 f37d -plotcharacterslive 3931 f37d - ; a version of plotcharacters that draws live and minimally disrupts the screen... 3932 f37d - 3933 f37d - ;arguments: 3934 f37d - ; temp1=lo charactermap 3935 f37d - ; temp2=hi charactermap 3936 f37d - ; temp3=palette | width byte 3937 f37d - ; temp4=x 3938 f37d - ; temp5=y 3939 f37d - 3940 f37d - lda temp5 ;Y position 3941 f37d - 3942 f37d - tax 3943 f37d - lda DLPOINTL,x ;Get pointer to DL that the characters are in 3944 f37d - ifconst DOUBLEBUFFER 3945 f37d - clc 3946 f37d - adc doublebufferdloffset 3947 f37d - endif ; DOUBLEBUFFER 3948 f37d - sta dlpnt 3949 f37d - lda DLPOINTH,x 3950 f37d - ifconst DOUBLEBUFFER 3951 f37d - adc #0 3952 f37d - endif ; DOUBLEBUFFER 3953 f37d - sta dlpnt+1 3954 f37d - 3955 f37d - ;Create DL entry for the characters 3956 f37d - 3957 f37d - ldy dlend,x ;Get the index to the end of this DL 3958 f37d - 3959 f37d - ifconst CHECKOVERWRITE 3960 f37d - cpy #DLLASTOBJ 3961 f37d - bne continueplotcharacterslive 3962 f37d - rts 3963 f37d -continueplotcharacterslive 3964 f37d - endif 3965 f37d - 3966 f37d - lda temp1 ; character map data, lo byte 3967 f37d - sta (dlpnt),y ;(1) store low address 3968 f37d - 3969 f37d - iny 3970 f37d - ; we don't add the second byte yet, since the charmap could briefly 3971 f37d - ; render without a proper character map address, width, or position. 3972 f37d - lda charactermode 3973 f37d - sta (dlpnt),y ;(2) store mode 3974 f37d - 3975 f37d - iny 3976 f37d - lda temp2 ; character map, hi byte 3977 f37d - sta (dlpnt),y ;(3) store high address 3978 f37d - 3979 f37d - iny 3980 f37d - lda temp3 ;palette|width 3981 f37d - sta (dlpnt),y ;(4) store palette|width 3982 f37d - 3983 f37d - iny 3984 f37d - lda temp4 ;Horizontal position 3985 f37d - sta (dlpnt),y ;(5) store horizontal position 3986 f37d - 3987 f37d - iny 3988 f37d - sty dlend,x ; save display list end byte 3989 f37d - 3990 f37d - rts 3991 f37d endif ;plotcharacterslive 3992 f37d 3993 f37d ifconst USED_PLOTVALUE 3994 f37d plotvalue 3995 f37d ; calling 7800basic command: 3996 f37d ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 3997 f37d ; ...displays the variable as BCD digits 3998 f37d ; 3999 f37d ; asm sub arguments: 4000 f37d ; temp1=lo charactermap 4001 f37d ; temp2=hi charactermap 4002 f37d ; temp3=palette | width byte 4003 f37d ; temp4=x 4004 f37d ; temp5=y 4005 f37d ; temp6=number of digits 4006 f37d ; temp7=lo variable 4007 f37d ; temp8=hi variable 4008 f37d ; temp9=character mode 4009 f37d 4010 f37d 00 47 plotdigitcount = temp6 4011 f37d 4012 f37d - ifconst ZONELOCKS 4013 f37d - ldx temp5 4014 f37d - ldy dlend,x 4015 f37d - cpy #DLLASTOBJ 4016 f37d - bne carryonplotvalue 4017 f37d - rts 4018 f37d -carryonplotvalue 4019 f37d endif 4020 f37d 4021 f37d a9 00 lda #0 4022 f37f a8 tay 4023 f380 ae ad 01 ldx valbufend 4024 f383 4025 f383 a5 47 lda plotdigitcount 4026 f385 29 01 and #1 4027 f387 f0 07 beq pvnibble2char 4028 f389 a9 00 lda #0 4029 f38b 9d 00 20 sta VALBUFFER,x ; just in case we skip this digit 4030 f38e f0 11 beq pvnibble2char_skipnibble 4031 f390 4032 f390 pvnibble2char 4033 f390 ; high nibble... 4034 f390 b1 48 lda (temp7),y 4035 f392 29 f0 and #$f0 4036 f394 4a lsr 4037 f395 4a lsr 4038 f396 4a lsr 4039 f397 ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 4040 f397 4a lsr 4041 f398 endif 4042 f398 4043 f398 18 clc 4044 f399 65 42 adc temp1 ; add the offset to character graphics to our value 4045 f39b 9d 00 20 sta VALBUFFER,x 4046 f39e e8 inx 4047 f39f c6 47 dec plotdigitcount 4048 f3a1 4049 f3a1 pvnibble2char_skipnibble 4050 f3a1 ; low nibble... 4051 f3a1 b1 48 lda (temp7),y 4052 f3a3 29 0f and #$0f 4053 f3a5 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 4054 f3a5 - asl 4055 f3a5 endif 4056 f3a5 18 clc 4057 f3a6 65 42 adc temp1 ; add the offset to character graphics to our value 4058 f3a8 9d 00 20 sta VALBUFFER,x 4059 f3ab e8 inx 4060 f3ac c8 iny 4061 f3ad 4062 f3ad c6 47 dec plotdigitcount 4063 f3af d0 df bne pvnibble2char 4064 f3b1 4065 f3b1 ;point to the start of our valuebuffer 4066 f3b1 18 clc 4067 f3b2 a9 00 lda #VALBUFFER 4071 f3bb 69 00 adc #0 4072 f3bd 85 43 sta temp2 4073 f3bf 4074 f3bf ;advance valbufend to the end of our value buffer 4075 f3bf 8e ad 01 stx valbufend 4076 f3c2 4077 f3c2 ifnconst plotvalueonscreen 4078 f3c2 4c 48 f3 jmp plotcharacters 4079 f3c5 - else 4080 f3c5 - jmp plotcharacterslive 4081 f3c5 endif 4082 f3c5 4083 f3c5 endif ; USED_PLOTVALUE 4084 f3c5 4085 f3c5 4086 f3c5 - ifconst USED_PLOTVALUEEXTRA 4087 f3c5 -plotdigitcount = temp6 4088 f3c5 -plotvalueextra 4089 f3c5 - ; calling 7800basic command: 4090 f3c5 - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 4091 f3c5 - ; ...displays the variable as BCD digits 4092 f3c5 - ; 4093 f3c5 - ; asm sub arguments: 4094 f3c5 - ; temp1=lo charactermap 4095 f3c5 - ; temp2=hi charactermap 4096 f3c5 - ; temp3=palette | width byte 4097 f3c5 - ; temp4=x 4098 f3c5 - ; temp5=y 4099 f3c5 - ; temp6=number of digits 4100 f3c5 - ; temp7=lo variable 4101 f3c5 - ; temp8=hi variable 4102 f3c5 - 4103 f3c5 - lda #0 4104 f3c5 - tay 4105 f3c5 - ldx valbufend 4106 f3c5 - ifnconst plotvalueonscreen 4107 f3c5 - sta VALBUFFER,x 4108 f3c5 - endif 4109 f3c5 - 4110 f3c5 - lda plotdigitcount 4111 f3c5 - and #1 4112 f3c5 - 4113 f3c5 - bne pvnibble2char_skipnibbleextra 4114 f3c5 - 4115 f3c5 -pvnibble2charextra 4116 f3c5 - ; high nibble... 4117 f3c5 - lda (temp7),y 4118 f3c5 - and #$f0 4119 f3c5 - lsr 4120 f3c5 - lsr 4121 f3c5 - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 4122 f3c5 - lsr 4123 f3c5 - endif 4124 f3c5 - clc 4125 f3c5 - adc temp1 ; add the offset to character graphics to our value 4126 f3c5 - sta VALBUFFER,x 4127 f3c5 - inx 4128 f3c5 - 4129 f3c5 - ; second half of the digit 4130 f3c5 - clc 4131 f3c5 - adc #1 4132 f3c5 - sta VALBUFFER,x 4133 f3c5 - inx 4134 f3c5 - 4135 f3c5 -pvnibble2char_skipnibbleextra 4136 f3c5 - ; low nibble... 4137 f3c5 - lda (temp7),y 4138 f3c5 - and #$0f 4139 f3c5 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 4140 f3c5 - asl 4141 f3c5 - endif 4142 f3c5 - asl 4143 f3c5 - 4144 f3c5 - clc 4145 f3c5 - adc temp1 ; add the offset to character graphics to our value 4146 f3c5 - sta VALBUFFER,x 4147 f3c5 - inx 4148 f3c5 - 4149 f3c5 - clc 4150 f3c5 - adc #1 4151 f3c5 - sta VALBUFFER,x 4152 f3c5 - inx 4153 f3c5 - iny 4154 f3c5 - 4155 f3c5 - dec plotdigitcount 4156 f3c5 - bne pvnibble2charextra 4157 f3c5 - 4158 f3c5 - ;point to the start of our valuebuffer 4159 f3c5 - clc 4160 f3c5 - lda #VALBUFFER 4164 f3c5 - adc #0 4165 f3c5 - sta temp2 4166 f3c5 - 4167 f3c5 - ;advance valbufend to the end of our value buffer 4168 f3c5 - stx valbufend 4169 f3c5 - 4170 f3c5 - ifnconst plotvalueonscreen 4171 f3c5 - jmp plotcharacters 4172 f3c5 - else 4173 f3c5 - jmp plotcharacterslive 4174 f3c5 - endif 4175 f3c5 endif ; USED_PLOTVALUEEXTRA 4176 f3c5 4177 f3c5 boxcollision 4178 f3c5 ; the worst case cycle-time for the code below is 43 cycles. 4179 f3c5 ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 4180 f3c5 4181 f3c5 ;__boxx1 = accumulator 4182 f3c5 ;__boxy1 = y 4183 f3c5 00 44 __boxw1 = temp3 4184 f3c5 00 45 __boxh1 = temp4 4185 f3c5 4186 f3c5 00 46 __boxx2 = temp5 4187 f3c5 00 47 __boxy2 = temp6 4188 f3c5 00 48 __boxw2 = temp7 4189 f3c5 00 49 __boxh2 = temp8 4190 f3c5 4191 f3c5 DoXCollisionCheck 4192 f3c5 ;lda __boxx1 ; skipped. already in the accumulator 4193 f3c5 c5 46 cmp __boxx2 ;3 4194 f3c7 b0 07 bcs X1isbiggerthanX2 ;2/3 4195 f3c9 X2isbiggerthanX1 4196 f3c9 ; carry is clear 4197 f3c9 65 44 adc __boxw1 ;3 4198 f3cb c5 46 cmp __boxx2 ;3 4199 f3cd b0 08 bcs DoYCollisionCheck ;3/2 4200 f3cf 60 rts ;6 - carry clear, no collision 4201 f3d0 X1isbiggerthanX2 4202 f3d0 18 clc ;2 4203 f3d1 e5 48 sbc __boxw2 ;3 4204 f3d3 c5 46 cmp __boxx2 ;3 4205 f3d5 b0 13 bcs noboxcollision ;3/2 4206 f3d7 DoYCollisionCheck 4207 f3d7 98 tya ; 2 ; use to be "lda __boxy1" 4208 f3d8 c5 47 cmp __boxy2 ;3 4209 f3da b0 05 bcs Y1isbiggerthanY2 ;3/2 4210 f3dc Y2isbiggerthanY1 4211 f3dc ; carry is clear 4212 f3dc 65 45 adc __boxh1 ;3 4213 f3de c5 47 cmp __boxy2 ;3 4214 f3e0 60 rts ;6 4215 f3e1 Y1isbiggerthanY2 4216 f3e1 18 clc ;2 4217 f3e2 e5 49 sbc __boxh2 ;3 4218 f3e4 c5 47 cmp __boxy2 ;3 4219 f3e6 b0 02 bcs noboxcollision ;3/2 4220 f3e8 yesboxcollision 4221 f3e8 38 sec ;2 4222 f3e9 60 rts ;6 4223 f3ea noboxcollision 4224 f3ea 18 clc ;2 4225 f3eb 60 rts ;6 4226 f3ec 4227 f3ec randomize 4228 f3ec a5 40 lda rand 4229 f3ee 4a lsr 4230 f3ef 26 41 rol rand16 4231 f3f1 90 02 bcc noeor 4232 f3f3 49 b4 eor #$B4 4233 f3f5 noeor 4234 f3f5 85 40 sta rand 4235 f3f7 45 41 eor rand16 4236 f3f9 60 rts 4237 f3fa 4238 f3fa ; bcd conversion routine courtesy Omegamatrix 4239 f3fa ; http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 4240 f3fa converttobcd 4241 f3fa ;value to convert is in the accumulator 4242 f3fa 85 42 sta temp1 4243 f3fc 4a lsr 4244 f3fd 65 42 adc temp1 4245 f3ff 6a ror 4246 f400 4a lsr 4247 f401 4a lsr 4248 f402 65 42 adc temp1 4249 f404 6a ror 4250 f405 65 42 adc temp1 4251 f407 6a ror 4252 f408 4a lsr 4253 f409 29 3c and #$3C 4254 f40b 85 43 sta temp2 4255 f40d 4a lsr 4256 f40e 65 43 adc temp2 4257 f410 65 42 adc temp1 4258 f412 60 rts ; return the result in the accumulator 4259 f413 4260 f413 ; Y and A contain multiplicands, result in A 4261 f413 mul8 4262 f413 84 42 sty temp1 4263 f415 85 43 sta temp2 4264 f417 a9 00 lda #0 4265 f419 reptmul8 4266 f419 46 43 lsr temp2 4267 f41b 90 03 bcc skipmul8 4268 f41d 18 clc 4269 f41e 65 42 adc temp1 4270 f420 ;bcs donemul8 might save cycles? 4271 f420 skipmul8 4272 f420 ;beq donemul8 might save cycles? 4273 f420 06 42 asl temp1 4274 f422 d0 f5 bne reptmul8 4275 f424 donemul8 4276 f424 60 rts 4277 f425 4278 f425 div8 4279 f425 ; A=numerator Y=denominator, result in A 4280 f425 c0 02 cpy #2 4281 f427 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 4282 f429 84 42 sty temp1 4283 f42b a0 ff ldy #$ff 4284 f42d div8loop 4285 f42d e5 42 sbc temp1 4286 f42f c8 iny 4287 f430 b0 fb bcs div8loop 4288 f432 div8end 4289 f432 98 tya 4290 f433 ; result in A 4291 f433 60 rts 4292 f434 4293 f434 ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 4294 f434 mul16 4295 f434 84 42 sty temp1 4296 f436 85 43 sta temp2 4297 f438 4298 f438 a9 00 lda #0 4299 f43a a2 08 ldx #8 4300 f43c 46 42 lsr temp1 4301 f43e mul16_1 4302 f43e 90 03 bcc mul16_2 4303 f440 18 clc 4304 f441 65 43 adc temp2 4305 f443 mul16_2 4306 f443 6a ror 4307 f444 66 42 ror temp1 4308 f446 ca dex 4309 f447 d0 f5 bne mul16_1 4310 f449 85 43 sta temp2 4311 f44b 60 rts 4312 f44c 4313 f44c ; div int/int 4314 f44c ; numerator in A, denom in temp1 4315 f44c ; returns with quotient in A, remainder in temp1 4316 f44c div16 4317 f44c 85 43 sta temp2 4318 f44e 84 42 sty temp1 4319 f450 a9 00 lda #0 4320 f452 a2 08 ldx #8 4321 f454 06 43 asl temp2 4322 f456 div16_1 4323 f456 2a rol 4324 f457 c5 42 cmp temp1 4325 f459 90 02 bcc div16_2 4326 f45b e5 42 sbc temp1 4327 f45d div16_2 4328 f45d 26 43 rol temp2 4329 f45f ca dex 4330 f460 d0 f4 bne div16_1 4331 f462 85 42 sta temp1 4332 f464 a5 43 lda temp2 4333 f466 60 rts 4334 f467 4335 f467 - ifconst bankswitchmode 4336 f467 -BS_jsr 4337 f467 - ifconst MCPDEVCART 4338 f467 - ora #$18 4339 f467 - sta $3000 4340 f467 - else 4341 f467 - sta $8000 4342 f467 - endif 4343 f467 - pla 4344 f467 - tax 4345 f467 - pla 4346 f467 - rts 4347 f467 - 4348 f467 -BS_return 4349 f467 - pla ; bankswitch bank 4350 f467 - ifconst BANKRAM 4351 f467 - sta currentbank 4352 f467 - ora currentrambank 4353 f467 - endif 4354 f467 - ifconst MCPDEVCART 4355 f467 - ora #$18 4356 f467 - sta $3000 4357 f467 - else 4358 f467 - sta $8000 4359 f467 - endif 4360 f467 - pla ; bankswitch $0 flag 4361 f467 - rts 4362 f467 endif 4363 f467 4364 f467 checkselectswitch 4365 f467 ad 82 02 lda SWCHB ; first check the real select switch... 4366 f46a 29 02 and #%00000010 4367 f46c ifnconst MOUSESUPPORT 4368 f46c f0 05 beq checkselectswitchreturn ; switch is pressed 4369 f46e ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 4370 f471 29 b0 and #%10110000 ; R_DU 4371 f473 endif ; MOUSESUPPORT 4372 f473 checkselectswitchreturn 4373 f473 60 rts 4374 f474 4375 f474 checkresetswitch 4376 f474 ad 82 02 lda SWCHB ; first check the real reset switch... 4377 f477 29 01 and #%00000001 4378 f479 ifnconst MOUSESUPPORT 4379 f479 f0 05 beq checkresetswitchreturn ; switch is pressed 4380 f47b ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 4381 f47e 29 70 and #%01110000 ; _LDU 4382 f480 endif ; MOUSESUPPORT 4383 f480 checkresetswitchreturn 4384 f480 60 rts 4385 f481 4386 f481 - ifconst FINESCROLLENABLED 4387 f481 -finescrolldlls 4388 f481 - ldx temp1 ; first DLL index x3 4389 f481 - lda DLLMEM,x 4390 f481 - and #%11110000 4391 f481 - ora finescrolly 4392 f481 - sta DLLMEM,x 4393 f481 - 4394 f481 - ldx temp2 ; last DLL index x3 4395 f481 - lda DLLMEM,x 4396 f481 - and #%11110000 4397 f481 - ora finescrolly 4398 f481 - eor #(WZONEHEIGHT-1) 4399 f481 - sta DLLMEM,x 4400 f481 - rts 4401 f481 endif ; FINESCROLLENABLED 4402 f481 4403 f481 - ifconst USED_ADJUSTVISIBLE 4404 f481 -adjustvisible 4405 f481 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 4406 f481 - jsr waitforvblankstart ; ensure vblank just started 4407 f481 - ldx visibleDLLstart 4408 f481 -findfirstinterrupt 4409 f481 - lda DLLMEM,x 4410 f481 - bmi foundfirstinterrupt 4411 f481 - inx 4412 f481 - inx 4413 f481 - inx 4414 f481 - bne findfirstinterrupt 4415 f481 -foundfirstinterrupt 4416 f481 - and #%01111111 ; clear the interrupt bit 4417 f481 - sta DLLMEM,x 4418 f481 - ifconst DOUBLEBUFFER 4419 f481 - sta DLLMEM+DBOFFSET,x 4420 f481 - endif ; DOUBLEBUFFER 4421 f481 - ldx overscanDLLstart 4422 f481 -findlastinterrupt 4423 f481 - lda DLLMEM,x 4424 f481 - bmi foundlastinterrupt 4425 f481 - dex 4426 f481 - dex 4427 f481 - dex 4428 f481 - bne findlastinterrupt 4429 f481 -foundlastinterrupt 4430 f481 - and #%01111111 ; clear the interrupt bit 4431 f481 - sta DLLMEM,x 4432 f481 - ifconst DOUBLEBUFFER 4433 f481 - sta DLLMEM+DBOFFSET,x 4434 f481 - endif ; DOUBLEBUFFER 4435 f481 - ;now we need to set the new interrupts 4436 f481 - clc 4437 f481 - lda temp1 4438 f481 - adc visibleDLLstart 4439 f481 - tax 4440 f481 - lda DLLMEM,x 4441 f481 - ora #%10000000 4442 f481 - sta DLLMEM,x 4443 f481 - ifconst DOUBLEBUFFER 4444 f481 - sta DLLMEM+DBOFFSET,x 4445 f481 - endif ; DOUBLEBUFFER 4446 f481 - clc 4447 f481 - lda temp2 4448 f481 - adc visibleDLLstart 4449 f481 - tax 4450 f481 - lda DLLMEM,x 4451 f481 - ora #%10000000 4452 f481 - sta DLLMEM,x 4453 f481 - ifconst DOUBLEBUFFER 4454 f481 - sta DLLMEM+DBOFFSET,x 4455 f481 - endif ; DOUBLEBUFFER 4456 f481 - jsr vblankresync 4457 f481 - rts 4458 f481 endif ; USED_ADJUSTVISIBLE 4459 f481 4460 f481 vblankresync 4461 f481 20 1f f5 jsr waitforvblankstart ; ensure vblank just started 4462 f484 a9 00 lda #0 4463 f486 85 4d sta visibleover 4464 f488 a9 03 lda #3 4465 f48a 8d b2 01 sta interruptindex 4466 f48d 60 rts 4467 f48e 4468 f48e createallgamedlls 4469 f48e a2 00 ldx #0 4470 f490 a9 19 lda #NVLINES 4471 f492 ac 09 21 ldy paldetected 4472 f495 f0 03 beq skipcreatePALpadding 4473 f497 18 clc 4474 f498 69 15 adc #21 4475 f49a skipcreatePALpadding 4476 f49a 20 cf f4 jsr createnonvisibledlls 4477 f49d 8e 3c 21 stx visibleDLLstart 4478 f4a0 20 00 f5 jsr createvisiblezones 4479 f4a3 8e 3d 21 stx overscanDLLstart 4480 f4a6 createallgamedllscontinue 4481 f4a6 a9 50 lda #(NVLINES+55) ; extras for PAL 4482 f4a8 20 cf f4 jsr createnonvisibledlls 4483 f4ab 4484 f4ab ae 3c 21 ldx visibleDLLstart 4485 f4ae bd 00 18 lda DLLMEM,x 4486 f4b1 09 80 ora #%10000000 ; NMI 1 - start of visible screen 4487 f4b3 9d 00 18 sta DLLMEM,x 4488 f4b6 - ifconst DOUBLEBUFFER 4489 f4b6 - sta DLLMEM+DBOFFSET,x 4490 f4b6 endif ; DOUBLEBUFFER 4491 f4b6 4492 f4b6 ae 3d 21 ldx overscanDLLstart 4493 f4b9 bd 00 18 lda DLLMEM,x 4494 f4bc 09 83 ora #%10000011 ; NMI 2 - end of visible screen 4495 f4be 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 4496 f4c0 9d 00 18 sta DLLMEM,x 4497 f4c3 - ifconst DOUBLEBUFFER 4498 f4c3 - sta DLLMEM+DBOFFSET,x 4499 f4c3 endif ; DOUBLEBUFFER 4500 f4c3 4501 f4c3 e8 inx 4502 f4c4 e8 inx 4503 f4c5 e8 inx 4504 f4c6 4505 f4c6 bd 00 18 lda DLLMEM,x 4506 f4c9 09 80 ora #%10000000 ; NMI 3 - deeper overscan 4507 f4cb 9d 00 18 sta DLLMEM,x 4508 f4ce - ifconst DOUBLEBUFFER 4509 f4ce - sta DLLMEM+DBOFFSET,x 4510 f4ce endif ; DOUBLEBUFFER 4511 f4ce 4512 f4ce 60 rts 4513 f4cf 4514 f4cf createnonvisibledlls 4515 f4cf 85 42 sta temp1 4516 f4d1 4a lsr 4517 f4d2 4a lsr 4518 f4d3 4a lsr 4519 f4d4 4a lsr ; /16 4520 f4d5 f0 09 beq skipcreatenonvisibledlls1loop 4521 f4d7 a8 tay 4522 f4d8 createnonvisibledlls1loop 4523 f4d8 a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 4524 f4da 20 ef f4 jsr createblankdllentry 4525 f4dd 88 dey 4526 f4de d0 f8 bne createnonvisibledlls1loop 4527 f4e0 skipcreatenonvisibledlls1loop 4528 f4e0 a5 42 lda temp1 4529 f4e2 29 0f and #%00001111 4530 f4e4 f0 08 beq createnonvisibledllsreturn 4531 f4e6 38 sec 4532 f4e7 e9 01 sbc #1 4533 f4e9 09 40 ora #%01000000 4534 f4eb 20 ef f4 jsr createblankdllentry 4535 f4ee createnonvisibledllsreturn 4536 f4ee 60 rts 4537 f4ef 4538 f4ef createblankdllentry 4539 f4ef 9d 00 18 sta DLLMEM,x 4540 f4f2 - ifconst DOUBLEBUFFER 4541 f4f2 - sta DLLMEM+DBOFFSET,x 4542 f4f2 endif ; DOUBLEBUFFER 4543 f4f2 e8 inx 4544 f4f3 a9 21 lda #$21 ; blank 4545 f4f5 9d 00 18 sta DLLMEM,x 4546 f4f8 - ifconst DOUBLEBUFFER 4547 f4f8 - sta DLLMEM+DBOFFSET,x 4548 f4f8 endif ; DOUBLEBUFFER 4549 f4f8 e8 inx 4550 f4f9 a9 00 lda #$00 4551 f4fb 9d 00 18 sta DLLMEM,x 4552 f4fe - ifconst DOUBLEBUFFER 4553 f4fe - sta DLLMEM+DBOFFSET,x 4554 f4fe endif ; DOUBLEBUFFER 4555 f4fe e8 inx 4556 f4ff 60 rts 4557 f500 4558 f500 createvisiblezones 4559 f500 a0 00 ldy #0 4560 f502 createvisiblezonesloop 4561 f502 b9 47 f6 lda.w DLHEIGHT,y 4562 f505 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 4563 f507 9d 00 18 sta DLLMEM,x 4564 f50a - ifconst DOUBLEBUFFER 4565 f50a - sta DLLMEM+DBOFFSET,x 4566 f50a endif ; DOUBLEBUFFER 4567 f50a e8 inx 4568 f50b b9 17 f6 lda DLPOINTH,y 4569 f50e 9d 00 18 sta DLLMEM,x 4570 f511 - ifconst DOUBLEBUFFER 4571 f511 - sta DLLMEM+DBOFFSET,x 4572 f511 endif ; DOUBLEBUFFER 4573 f511 e8 inx 4574 f512 b9 2f f6 lda DLPOINTL,y 4575 f515 9d 00 18 sta DLLMEM,x 4576 f518 - ifconst DOUBLEBUFFER 4577 f518 - clc 4578 f518 - adc #DOUBLEBUFFEROFFSET 4579 f518 - sta DLLMEM+DBOFFSET,x 4580 f518 - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 4581 f518 - inc DLLMEM+DBOFFSET-1,x 4582 f518 -skiphidoublebufferadjust 4583 f518 endif ; DOUBLEBUFFER 4584 f518 e8 inx 4585 f519 c8 iny 4586 f51a c0 18 cpy #WZONECOUNT 4587 f51c d0 e4 bne createvisiblezonesloop 4588 f51e 60 rts 4589 f51f 4590 f51f waitforvblankstart 4591 f51f visibleoverwait 4592 f51f 24 28 BIT MSTAT 4593 f521 10 fc bpl visibleoverwait 4594 f523 vblankstartwait 4595 f523 24 28 BIT MSTAT 4596 f525 30 fc bmi vblankstartwait 4597 f527 60 rts 4598 f528 4599 f528 - ifconst DOUBLEBUFFER 4600 f528 -flipdisplaybufferreturn 4601 f528 - rts 4602 f528 -flipdisplaybuffer 4603 f528 - lda doublebufferstate 4604 f528 - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 4605 f528 - 4606 f528 - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 4607 f528 - 4608 f528 - lda doublebufferstate 4609 f528 - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 4610 f528 - tax 4611 f528 - 4612 f528 - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 4613 f528 - 4614 f528 -flipdisplaybufferwait1 4615 f528 - lda visibleover 4616 f528 - beq flipdisplaybufferwait1 4617 f528 - 4618 f528 -flipdisplaybufferwait 4619 f528 - lda visibleover 4620 f528 - bne flipdisplaybufferwait 4621 f528 - 4622 f528 - lda doublebufferminimumframetarget 4623 f528 - beq skipminimumframecode 4624 f528 - lda doublebufferminimumframeindex 4625 f528 - bne flipdisplaybufferwait1 4626 f528 - lda doublebufferminimumframetarget 4627 f528 - sta doublebufferminimumframeindex 4628 f528 -skipminimumframecode 4629 f528 - 4630 f528 - lda DLLMEMLutHi,x 4631 f528 - sta DPPH 4632 f528 - lda DLLMEMLutLo,x 4633 f528 - sta DPPL 4634 f528 - 4635 f528 - lda NewPageflipstate,x 4636 f528 - sta doublebufferstate 4637 f528 - lda NewPageflipoffset,x 4638 f528 - sta doublebufferdloffset 4639 f528 - 4640 f528 - lda doublebufferbufferdirty 4641 f528 - beq flipdisplaybufferreturn 4642 f528 - 4643 f528 - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 4644 f528 - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 4645 f528 - ; from the displayed buffer to the working buffer... 4646 f528 - 4647 f528 - lda doublebufferdloffset 4648 f528 - eor #DOUBLEBUFFEROFFSET 4649 f528 - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 4650 f528 - 4651 f528 - ldx #(WZONECOUNT-1) 4652 f528 -copybufferzoneloop 4653 f528 - 4654 f528 - lda DLPOINTL,x 4655 f528 - clc 4656 f528 - adc doublebufferdloffset 4657 f528 - sta temp1 4658 f528 - lda DLPOINTH,x 4659 f528 - adc #0 4660 f528 - sta temp2 4661 f528 - 4662 f528 - lda DLPOINTL,x 4663 f528 - clc 4664 f528 - adc temp6 4665 f528 - sta temp3 4666 f528 - lda DLPOINTH,x 4667 f528 - adc #0 4668 f528 - sta temp4 4669 f528 - 4670 f528 - lda dlendsave,x 4671 f528 - tay 4672 f528 -copybuffercharsloop 4673 f528 - lda (temp3),y 4674 f528 - sta (temp1),y 4675 f528 - dey 4676 f528 - bpl copybuffercharsloop 4677 f528 - dex 4678 f528 - bpl copybufferzoneloop 4679 f528 - lda #0 4680 f528 - sta doublebufferbufferdirty 4681 f528 - rts 4682 f528 - 4683 f528 -doublebufferoff 4684 f528 - lda #1 4685 f528 - sta doublebufferstate 4686 f528 - jsr flipdisplaybuffer 4687 f528 - lda #0 4688 f528 - sta doublebufferstate 4689 f528 - sta doublebufferdloffset 4690 f528 - rts 4691 f528 - 4692 f528 -DLLMEMLutLo 4693 f528 - .byte DLLMEM,>(DLLMEM+DBOFFSET) 4696 f528 -NewPageflipstate 4697 f528 - .byte 3,1 4698 f528 -NewPageflipoffset 4699 f528 - .byte DOUBLEBUFFEROFFSET,0 4700 f528 - 4701 f528 endif ; DOUBLEBUFFER 4702 f528 4703 f528 - ifconst MOUSESUPPORT 4704 f528 - ifnconst DRIVINGSUPPORT 4705 f528 -rotationalcompare 4706 f528 - ; new=00, old=xx 4707 f528 - .byte $00, $01, $ff, $00 4708 f528 - ; new=01, old=xx 4709 f528 - .byte $ff, $00, $00, $01 4710 f528 - ; new=10, old=xx 4711 f528 - .byte $01, $00, $00, $ff 4712 f528 - ; new=11, old=xx 4713 f528 - .byte $00, $ff, $01, $00 4714 f528 - endif 4715 f528 - 4716 f528 - ; 0000YyXx st mouse 4717 f528 - ; 0000xyXY amiga mouse 4718 f528 -amigatoataribits ; swap bits 1 and 4... 4719 f528 - .byte %00000000, %00001000, %00000010, %00001010 4720 f528 - .byte %00000100, %00001100, %00000110, %00001110 4721 f528 - .byte %00000001, %00001001, %00000011, %00001011 4722 f528 - .byte %00000101, %00001101, %00000111, %00001111 4723 f528 - 4724 f528 -mouseupdate 4725 f528 - ;LONGDEBUG = 1 4726 f528 - lda SWCHA 4727 f528 - and #$0f 4728 f528 - sta inttemp2 4729 f528 - lda SWCHA 4730 f528 - lsr 4731 f528 - lsr 4732 f528 - lsr 4733 f528 - lsr 4734 f528 - sta inttemp1 4735 f528 - 4736 f528 - lda port0control,x 4737 f528 - cmp #8 ; st mouse 4738 f528 - beq domousecontrol 4739 f528 - cmp #9 ; amiga mouse 4740 f528 - bne skipmousecontrol 4741 f528 - ; st mice encode on different bits/joystick-lines than amiga mice... 4742 f528 - ; 0000YyXx st mouse 4743 f528 - ; 0000xyXY amiga mouse 4744 f528 - ; ...so can shuffle the amiga bits to reuse the st driver. 4745 f528 - lda inttemp1,x 4746 f528 - tay 4747 f528 - lda amigatoataribits,y 4748 f528 - sta inttemp1,x 4749 f528 -domousecontrol 4750 f528 - ;port X has a mouse enabled 4751 f528 - lda inttemp1,x 4752 f528 - and #%00000011 4753 f528 - asl 4754 f528 - asl 4755 f528 - ora mousecodex0,x 4756 f528 - and #%00001111 4757 f528 - tay 4758 f528 - lda rotationalcompare,y 4759 f528 - clc 4760 f528 - adc mousex0,x 4761 f528 - sta mousex0,x 4762 f528 - tya 4763 f528 - lsr 4764 f528 - lsr 4765 f528 - sta mousecodex0,x 4766 f528 - 4767 f528 - lda inttemp1,x 4768 f528 - and #%00001100 4769 f528 - ora mousecodey0,x 4770 f528 - and #%00001111 4771 f528 - tay 4772 f528 - lda rotationalcompare,y 4773 f528 - asl ; *2 for y axis, since it has ~double the resolution of x 4774 f528 - clc 4775 f528 - adc mousey0,x 4776 f528 - sta mousey0,x 4777 f528 - tya 4778 f528 - lsr 4779 f528 - lsr 4780 f528 - sta mousecodey0,x 4781 f528 -skipmousecontrol 4782 f528 - jmp longreadloopreturn 4783 f528 endif ; MOUSESUPPORT 4784 f528 4785 f528 mousebuttonhandler ; outside of conditional, so button handler entry in LUT is valid 4786 f528 - ifconst MOUSESUPPORT 4787 f528 - ; stick the mouse buttons in the correct shadow register... 4788 f528 - txa 4789 f528 - asl 4790 f528 - tay ; y=x*2 4791 f528 - lda INPT1,y 4792 f528 - eor #%10000000 4793 f528 - lsr 4794 f528 - sta sINPT1,x 4795 f528 - 4796 f528 - lda INPT4,x 4797 f528 - and #%10000000 4798 f528 - eor #%10000000 4799 f528 - ora sINPT1,x 4800 f528 - sta sINPT1,x 4801 f528 - jmp buttonreadloopreturn 4802 f528 endif ; MOUSESUPPORT 4803 f528 4804 f528 - ifconst DRIVINGSUPPORT 4805 f528 -rotationalcompare 4806 f528 - ; new=00, old=xx 4807 f528 - .byte $00, $01, $ff, $00 4808 f528 - ; new=01, old=xx 4809 f528 - .byte $ff, $00, $00, $01 4810 f528 - ; new=10, old=xx 4811 f528 - .byte $01, $00, $00, $ff 4812 f528 - ; new=11, old=xx 4813 f528 - .byte $00, $ff, $01, $00 4814 f528 -drivingupdate 4815 f528 - ldx #1 4816 f528 - lda port1control 4817 f528 - cmp #6 ; check if port1=driving 4818 f528 - bne skipfirstdrivingcontrol 4819 f528 - lda SWCHA 4820 f528 - and #%00000011 4821 f528 - asl 4822 f528 - asl 4823 f528 -drivingupdateloop 4824 f528 - ora controller0statesave,x 4825 f528 - tay 4826 f528 - lda rotationalcompare,y 4827 f528 - clc 4828 f528 - adc drivingposition0,x 4829 f528 - sta drivingposition0,x 4830 f528 - tya 4831 f528 - lsr 4832 f528 - lsr 4833 f528 - sta controller0statesave,x 4834 f528 -skipfirstdrivingcontrol 4835 f528 - lda port0control 4836 f528 - cmp #6 ; check if port0=driving 4837 f528 - bne drivingcontrolsloopdone 4838 f528 - lda SWCHA 4839 f528 - and #%00110000 4840 f528 - lsr 4841 f528 - lsr 4842 f528 - dex 4843 f528 - bpl drivingupdateloop 4844 f528 -drivingcontrolsloopdone 4845 f528 - rts 4846 f528 endif ; DRIVINGSUPPORT 4847 f528 4848 f528 - ifconst KEYPADSUPPORT 4849 f528 - ; ** select keypad rows 0 to 3 over 4 frames... 4850 f528 -keypadrowselect 4851 f528 - ldy #0 4852 f528 - lda port0control 4853 f528 - cmp #7 4854 f528 - bne skipport0val 4855 f528 - iny ; y=y+1 4856 f528 -skipport0val 4857 f528 - lda port1control 4858 f528 - cmp #7 4859 f528 - bne skipport1val 4860 f528 - iny 4861 f528 - iny ; y=y+2 4862 f528 -skipport1val 4863 f528 - lda keyrowdirectionmask,y 4864 f528 - sta CTLSWA 4865 f528 - tya 4866 f528 - asl 4867 f528 - asl 4868 f528 - sta inttemp1 4869 f528 - lda framecounter 4870 f528 - and #3 4871 f528 - ora inttemp1 4872 f528 - tax 4873 f528 - lda keyrowselectvalue,x 4874 f528 - sta SWCHA 4875 f528 - rts 4876 f528 - 4877 f528 -keyrowdirectionmask 4878 f528 - .byte #%00000000 ; 0 : port0=input port1=input 4879 f528 - .byte #%11110000 ; 1 : port0=output port1=input 4880 f528 - .byte #%00001111 ; 2 : port0=input port1=output 4881 f528 - .byte #%11111111 ; 3 : port0=output port1=output 4882 f528 - 4883 f528 -keyrowselectvalue 4884 f528 - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 4885 f528 - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 4886 f528 - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 4887 f528 - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 4888 f528 endif ; KEYPADSUPPORT 4889 f528 4890 f528 - ifconst KEYPADSUPPORT 4891 f528 -keypadcolumnread 4892 f528 - lda framecounter 4893 f528 - and #3 4894 f528 - asl ; x2 because keypad variables are interleaved 4895 f528 - tax 4896 f528 - 4897 f528 - lda #0 4898 f528 - sta keypadmatrix0a,x 4899 f528 - sta keypadmatrix1a,x 4900 f528 - 4901 f528 - lda INPT0 4902 f528 - cmp #$80 4903 f528 - rol keypadmatrix0a,x 4904 f528 - lda INPT1 4905 f528 - cmp #$80 4906 f528 - rol keypadmatrix0a,x 4907 f528 - lda INPT4 4908 f528 - cmp #$80 4909 f528 - rol keypadmatrix0a,x 4910 f528 - lda keypadmatrix0a,x 4911 f528 - eor #%00000111 4912 f528 - sta keypadmatrix0a,x 4913 f528 - 4914 f528 - rol keypadmatrix1a,x 4915 f528 - lda INPT2 4916 f528 - cmp #$80 4917 f528 - rol keypadmatrix1a,x 4918 f528 - lda INPT3 4919 f528 - cmp #$80 4920 f528 - rol keypadmatrix1a,x 4921 f528 - lda INPT5 4922 f528 - cmp #$80 4923 f528 - rol keypadmatrix1a,x 4924 f528 - lda keypadmatrix1a,x 4925 f528 - eor #%00000111 4926 f528 - sta keypadmatrix1a,x 4927 f528 - 4928 f528 - rts 4929 f528 endif ; KEYPADSUPPORT 4930 f528 4931 f528 setportforinput 4932 f528 a5 e4 lda CTLSWAs 4933 f52a 3d 33 f5 and allpinsinputlut,x 4934 f52d 85 e4 sta CTLSWAs 4935 f52f 8d 81 02 sta CTLSWA 4936 f532 60 rts 4937 f533 4938 f533 allpinsinputlut 4939 f533 0f f0 .byte.b $0F, $F0 4940 f535 4941 f535 setonebuttonmode 4942 f535 a9 14 lda #$14 4943 f537 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 4944 f53a a5 e5 lda CTLSWBs 4945 f53c 1d 45 f5 ora thisjoy2buttonbit,x 4946 f53f 85 e5 sta CTLSWBs 4947 f541 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 4948 f544 60 rts 4949 f545 4950 f545 thisjoy2buttonbit 4951 f545 04 10 .byte.b $04, $10 4952 f547 4953 f547 settwobuttonmode 4954 f547 a9 14 lda #$14 4955 f549 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 4956 f54c a5 e5 lda CTLSWBs 4957 f54e 3d 57 f5 and thisjoy2buttonmask,x 4958 f551 85 e5 sta CTLSWBs 4959 f553 8d 82 02 sta SWCHB 4960 f556 60 rts 4961 f557 4962 f557 thisjoy2buttonmask 4963 f557 fb ef .byte.b $fb, $ef 4964 f559 4965 f559 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4966 f559 4967 f559 START 4968 f559 start 4969 f559 4970 f559 ;******** more or less the Atari recommended startup procedure 4971 f559 4972 f559 78 sei 4973 f55a d8 cld 4974 f55b 4975 f55b ifnconst NOTIALOCK 4976 f55b a9 07 lda #$07 4977 f55d - else 4978 f55d - lda #$06 4979 f55d endif 4980 f55d 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 4981 f55f a9 7f lda #$7F 4982 f561 85 3c sta CTRL ;disable DMA 4983 f563 a9 00 lda #$00 4984 f565 85 38 sta OFFSET 4985 f567 ifnconst NOTIALOCK 4986 f567 85 01 sta INPTCTRL 4987 f569 endif 4988 f569 a2 ff ldx #$FF 4989 f56b 9a txs 4990 f56c 4991 f56c ;************** Clear Memory 4992 f56c 4993 f56c a2 40 ldx #$40 4994 f56e a9 00 lda #$00 4995 f570 crloop1 4996 f570 95 00 sta $00,x ;Clear zero page 4997 f572 9d 00 01 sta $100,x ;Clear page 1 4998 f575 e8 inx 4999 f576 d0 f8 bne crloop1 5000 f578 5001 f578 5002 f578 a0 00 ldy #$00 ;Clear Ram 5003 f57a a9 18 lda #$18 ;Start at $1800 5004 f57c 85 81 sta $81 5005 f57e a9 00 lda #$00 5006 f580 85 80 sta $80 5007 f582 crloop3 5008 f582 a9 00 lda #$00 5009 f584 91 80 sta ($80),y ;Store data 5010 f586 c8 iny ;Next byte 5011 f587 d0 f9 bne crloop3 ;Branch if not done page 5012 f589 e6 81 inc $81 ;Next page 5013 f58b a5 81 lda $81 5014 f58d c9 20 cmp #$20 ;End at $1FFF 5015 f58f d0 f1 bne crloop3 ;Branch if not 5016 f591 5017 f591 a0 00 ldy #$00 ;Clear Ram 5018 f593 a9 22 lda #$22 ;Start at $2200 5019 f595 85 81 sta $81 5020 f597 a9 00 lda #$00 5021 f599 85 80 sta $80 5022 f59b crloop4 5023 f59b a9 00 lda #$00 5024 f59d 91 80 sta ($80),y ;Store data 5025 f59f c8 iny ;Next byte 5026 f5a0 d0 f9 bne crloop4 ;Branch if not done page 5027 f5a2 e6 81 inc $81 ;Next page 5028 f5a4 a5 81 lda $81 5029 f5a6 c9 27 cmp #$27 ;End at $27FF 5030 f5a8 d0 f1 bne crloop4 ;Branch if not 5031 f5aa 5032 f5aa a2 00 ldx #$00 5033 f5ac a9 00 lda #$00 5034 f5ae crloop5 ;Clear 2100-213F, 2000-203F 5035 f5ae 9d 00 20 sta $2000,x 5036 f5b1 9d 00 21 sta $2100,x 5037 f5b4 e8 inx 5038 f5b5 e0 40 cpx #$40 5039 f5b7 d0 f5 bne crloop5 5040 f5b9 5041 f5b9 85 80 sta $80 5042 f5bb 85 81 sta $81 5043 f5bd 85 82 sta $82 5044 f5bf 85 83 sta $83 5045 f5c1 5046 f5c1 ;seed random number with hopefully-random timer value 5047 f5c1 a9 01 lda #1 5048 f5c3 0d 84 02 ora INTIM 5049 f5c6 85 40 sta rand 5050 f5c8 5051 f5c8 ; detect the console type... 5052 f5c8 pndetectvblankstart 5053 f5c8 a5 28 lda MSTAT 5054 f5ca 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 5055 f5cc pndetectvblankover 5056 f5cc a5 28 lda MSTAT 5057 f5ce 30 fc bmi pndetectvblankover ; then wait for it to be over 5058 f5d0 a0 00 ldy #$00 5059 f5d2 a2 00 ldx #$00 5060 f5d4 pndetectvblankhappening 5061 f5d4 a5 28 lda MSTAT 5062 f5d6 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 5063 f5d8 85 24 sta WSYNC 5064 f5da 85 24 sta WSYNC 5065 f5dc e8 inx 5066 f5dd d0 f5 bne pndetectvblankhappening 5067 f5df pndetectinvblank 5068 f5df e0 7d cpx #125 5069 f5e1 90 02 bcc pndetecispal 5070 f5e3 a0 01 ldy #$01 5071 f5e5 pndetecispal 5072 f5e5 8c 09 21 sty paldetected 5073 f5e8 5074 f5e8 20 8e f4 jsr createallgamedlls 5075 f5eb 5076 f5eb a9 18 lda #>DLLMEM 5077 f5ed 85 2c sta DPPH 5078 f5ef a9 00 lda # 255 5262 f617 -DOUBLEBUFFEROFFSET = 255 5263 f617 else 5264 f617 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 5265 f617 endif 5266 f617 5267 f617 - ifconst EXTRADLMEMORY 5268 f617 -SECONDDLHALFSTART SET $2300 5269 f617 endif 5270 f617 5271 f617 DLPOINTH 5272 f617 DLINDEX SET 0 5273 f617 REPEAT WZONECOUNT 5274 f617 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f617 - ifconst EXTRADLMEMORY 5276 f617 - if TMPMEMADDRESS > $1FFF 5277 f617 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f617 - else 5279 f617 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f617 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f617 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f617 - endif 5283 f617 - endif ; TMPMEMADDRESS > $1FFF 5284 f617 endif ; EXTRADLMEMORY 5285 f617 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f617 18 .byte.b >TMPMEMADDRESS 5287 f617 DLINDEX SET DLINDEX + 1 5273 f617 REPEND 5274 f617 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f618 - ifconst EXTRADLMEMORY 5276 f618 - if TMPMEMADDRESS > $1FFF 5277 f618 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f618 - else 5279 f618 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f618 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f618 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f618 - endif 5283 f618 - endif ; TMPMEMADDRESS > $1FFF 5284 f618 endif ; EXTRADLMEMORY 5285 f618 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f618 18 .byte.b >TMPMEMADDRESS 5287 f618 DLINDEX SET DLINDEX + 1 5273 f618 REPEND 5274 f618 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f619 - ifconst EXTRADLMEMORY 5276 f619 - if TMPMEMADDRESS > $1FFF 5277 f619 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f619 - else 5279 f619 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f619 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f619 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f619 - endif 5283 f619 - endif ; TMPMEMADDRESS > $1FFF 5284 f619 endif ; EXTRADLMEMORY 5285 f619 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f619 19 .byte.b >TMPMEMADDRESS 5287 f619 DLINDEX SET DLINDEX + 1 5273 f619 REPEND 5274 f619 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f61a - ifconst EXTRADLMEMORY 5276 f61a - if TMPMEMADDRESS > $1FFF 5277 f61a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f61a - else 5279 f61a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f61a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f61a -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f61a - endif 5283 f61a - endif ; TMPMEMADDRESS > $1FFF 5284 f61a endif ; EXTRADLMEMORY 5285 f61a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f61a 19 .byte.b >TMPMEMADDRESS 5287 f61a DLINDEX SET DLINDEX + 1 5273 f61a REPEND 5274 f61a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f61b - ifconst EXTRADLMEMORY 5276 f61b - if TMPMEMADDRESS > $1FFF 5277 f61b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f61b - else 5279 f61b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f61b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f61b -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f61b - endif 5283 f61b - endif ; TMPMEMADDRESS > $1FFF 5284 f61b endif ; EXTRADLMEMORY 5285 f61b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f61b 19 .byte.b >TMPMEMADDRESS 5287 f61b DLINDEX SET DLINDEX + 1 5273 f61b REPEND 5274 f61b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f61c - ifconst EXTRADLMEMORY 5276 f61c - if TMPMEMADDRESS > $1FFF 5277 f61c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f61c - else 5279 f61c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f61c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f61c -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f61c - endif 5283 f61c - endif ; TMPMEMADDRESS > $1FFF 5284 f61c endif ; EXTRADLMEMORY 5285 f61c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f61c 1a .byte.b >TMPMEMADDRESS 5287 f61c DLINDEX SET DLINDEX + 1 5273 f61c REPEND 5274 f61c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f61d - ifconst EXTRADLMEMORY 5276 f61d - if TMPMEMADDRESS > $1FFF 5277 f61d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f61d - else 5279 f61d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f61d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f61d -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f61d - endif 5283 f61d - endif ; TMPMEMADDRESS > $1FFF 5284 f61d endif ; EXTRADLMEMORY 5285 f61d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f61d 1a .byte.b >TMPMEMADDRESS 5287 f61d DLINDEX SET DLINDEX + 1 5273 f61d REPEND 5274 f61d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f61e - ifconst EXTRADLMEMORY 5276 f61e - if TMPMEMADDRESS > $1FFF 5277 f61e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f61e - else 5279 f61e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f61e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f61e -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f61e - endif 5283 f61e - endif ; TMPMEMADDRESS > $1FFF 5284 f61e endif ; EXTRADLMEMORY 5285 f61e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f61e 1a .byte.b >TMPMEMADDRESS 5287 f61e DLINDEX SET DLINDEX + 1 5273 f61e REPEND 5274 f61e TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f61f - ifconst EXTRADLMEMORY 5276 f61f - if TMPMEMADDRESS > $1FFF 5277 f61f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f61f - else 5279 f61f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f61f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f61f -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f61f - endif 5283 f61f - endif ; TMPMEMADDRESS > $1FFF 5284 f61f endif ; EXTRADLMEMORY 5285 f61f ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f61f 1b .byte.b >TMPMEMADDRESS 5287 f61f DLINDEX SET DLINDEX + 1 5273 f61f REPEND 5274 f61f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f620 - ifconst EXTRADLMEMORY 5276 f620 - if TMPMEMADDRESS > $1FFF 5277 f620 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f620 - else 5279 f620 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f620 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f620 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f620 - endif 5283 f620 - endif ; TMPMEMADDRESS > $1FFF 5284 f620 endif ; EXTRADLMEMORY 5285 f620 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f620 1b .byte.b >TMPMEMADDRESS 5287 f620 DLINDEX SET DLINDEX + 1 5273 f620 REPEND 5274 f620 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f621 - ifconst EXTRADLMEMORY 5276 f621 - if TMPMEMADDRESS > $1FFF 5277 f621 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f621 - else 5279 f621 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f621 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f621 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f621 - endif 5283 f621 - endif ; TMPMEMADDRESS > $1FFF 5284 f621 endif ; EXTRADLMEMORY 5285 f621 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f621 1b .byte.b >TMPMEMADDRESS 5287 f621 DLINDEX SET DLINDEX + 1 5273 f621 REPEND 5274 f621 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f622 - ifconst EXTRADLMEMORY 5276 f622 - if TMPMEMADDRESS > $1FFF 5277 f622 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f622 - else 5279 f622 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f622 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f622 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f622 - endif 5283 f622 - endif ; TMPMEMADDRESS > $1FFF 5284 f622 endif ; EXTRADLMEMORY 5285 f622 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f622 1b .byte.b >TMPMEMADDRESS 5287 f622 DLINDEX SET DLINDEX + 1 5273 f622 REPEND 5274 f622 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f623 - ifconst EXTRADLMEMORY 5276 f623 - if TMPMEMADDRESS > $1FFF 5277 f623 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f623 - else 5279 f623 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f623 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f623 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f623 - endif 5283 f623 - endif ; TMPMEMADDRESS > $1FFF 5284 f623 endif ; EXTRADLMEMORY 5285 f623 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f623 1c .byte.b >TMPMEMADDRESS 5287 f623 DLINDEX SET DLINDEX + 1 5273 f623 REPEND 5274 f623 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f624 - ifconst EXTRADLMEMORY 5276 f624 - if TMPMEMADDRESS > $1FFF 5277 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f624 - else 5279 f624 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f624 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f624 - endif 5283 f624 - endif ; TMPMEMADDRESS > $1FFF 5284 f624 endif ; EXTRADLMEMORY 5285 f624 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f624 1c .byte.b >TMPMEMADDRESS 5287 f624 DLINDEX SET DLINDEX + 1 5273 f624 REPEND 5274 f624 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f625 - ifconst EXTRADLMEMORY 5276 f625 - if TMPMEMADDRESS > $1FFF 5277 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f625 - else 5279 f625 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f625 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f625 - endif 5283 f625 - endif ; TMPMEMADDRESS > $1FFF 5284 f625 endif ; EXTRADLMEMORY 5285 f625 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f625 1c .byte.b >TMPMEMADDRESS 5287 f625 DLINDEX SET DLINDEX + 1 5273 f625 REPEND 5274 f625 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f626 - ifconst EXTRADLMEMORY 5276 f626 - if TMPMEMADDRESS > $1FFF 5277 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f626 - else 5279 f626 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f626 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f626 - endif 5283 f626 - endif ; TMPMEMADDRESS > $1FFF 5284 f626 endif ; EXTRADLMEMORY 5285 f626 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f626 1d .byte.b >TMPMEMADDRESS 5287 f626 DLINDEX SET DLINDEX + 1 5273 f626 REPEND 5274 f626 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f627 - ifconst EXTRADLMEMORY 5276 f627 - if TMPMEMADDRESS > $1FFF 5277 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f627 - else 5279 f627 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f627 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f627 - endif 5283 f627 - endif ; TMPMEMADDRESS > $1FFF 5284 f627 endif ; EXTRADLMEMORY 5285 f627 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f627 1d .byte.b >TMPMEMADDRESS 5287 f627 DLINDEX SET DLINDEX + 1 5273 f627 REPEND 5274 f627 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f628 - ifconst EXTRADLMEMORY 5276 f628 - if TMPMEMADDRESS > $1FFF 5277 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f628 - else 5279 f628 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f628 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f628 - endif 5283 f628 - endif ; TMPMEMADDRESS > $1FFF 5284 f628 endif ; EXTRADLMEMORY 5285 f628 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f628 1d .byte.b >TMPMEMADDRESS 5287 f628 DLINDEX SET DLINDEX + 1 5273 f628 REPEND 5274 f628 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f629 - ifconst EXTRADLMEMORY 5276 f629 - if TMPMEMADDRESS > $1FFF 5277 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f629 - else 5279 f629 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f629 -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f629 - endif 5283 f629 - endif ; TMPMEMADDRESS > $1FFF 5284 f629 endif ; EXTRADLMEMORY 5285 f629 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f629 1e .byte.b >TMPMEMADDRESS 5287 f629 DLINDEX SET DLINDEX + 1 5273 f629 REPEND 5274 f629 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f62a - ifconst EXTRADLMEMORY 5276 f62a - if TMPMEMADDRESS > $1FFF 5277 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f62a - else 5279 f62a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f62a -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f62a - endif 5283 f62a - endif ; TMPMEMADDRESS > $1FFF 5284 f62a endif ; EXTRADLMEMORY 5285 f62a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f62a 1e .byte.b >TMPMEMADDRESS 5287 f62a DLINDEX SET DLINDEX + 1 5273 f62a REPEND 5274 f62a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f62b - ifconst EXTRADLMEMORY 5276 f62b - if TMPMEMADDRESS > $1FFF 5277 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f62b - else 5279 f62b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f62b -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f62b - endif 5283 f62b - endif ; TMPMEMADDRESS > $1FFF 5284 f62b endif ; EXTRADLMEMORY 5285 f62b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f62b 1e .byte.b >TMPMEMADDRESS 5287 f62b DLINDEX SET DLINDEX + 1 5273 f62b REPEND 5274 f62b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f62c - ifconst EXTRADLMEMORY 5276 f62c - if TMPMEMADDRESS > $1FFF 5277 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f62c - else 5279 f62c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f62c -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f62c - endif 5283 f62c - endif ; TMPMEMADDRESS > $1FFF 5284 f62c endif ; EXTRADLMEMORY 5285 f62c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f62c 1f .byte.b >TMPMEMADDRESS 5287 f62c DLINDEX SET DLINDEX + 1 5273 f62c REPEND 5274 f62c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f62d - ifconst EXTRADLMEMORY 5276 f62d - if TMPMEMADDRESS > $1FFF 5277 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f62d - else 5279 f62d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f62d -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f62d - endif 5283 f62d - endif ; TMPMEMADDRESS > $1FFF 5284 f62d endif ; EXTRADLMEMORY 5285 f62d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f62d 1f .byte.b >TMPMEMADDRESS 5287 f62d DLINDEX SET DLINDEX + 1 5273 f62d REPEND 5274 f62d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5275 f62e - ifconst EXTRADLMEMORY 5276 f62e - if TMPMEMADDRESS > $1FFF 5277 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5278 f62e - else 5279 f62e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5280 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5281 f62e -SECONDDLHALFSTART SET TMPMEMADDRESS 5282 f62e - endif 5283 f62e - endif ; TMPMEMADDRESS > $1FFF 5284 f62e endif ; EXTRADLMEMORY 5285 f62e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 5286 f62e 1f .byte.b >TMPMEMADDRESS 5287 f62e DLINDEX SET DLINDEX + 1 5288 f62f REPEND 5289 f62f 5290 f62f - ifconst EXTRADLMEMORY 5291 f62f - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 5292 f62f endif 5293 f62f 5294 f62f 5295 f62f DLPOINTL 5296 f62f DLINDEX SET 0 5297 f62f REPEAT WZONECOUNT 5298 f62f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5299 f62f - ifconst EXTRADLMEMORY 5300 f62f - if TMPMEMADDRESS > $1FFF 5301 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f62f - else 5303 f62f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f62f - endif 5306 f62f - endif ; TMPMEMADDRESS > $1FFF 5307 f62f endif ; EXTRADLMEMORY 5308 f62f 80 .byte.b $1FFF 5301 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f630 - else 5303 f630 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f630 - endif 5306 f630 - endif ; TMPMEMADDRESS > $1FFF 5307 f630 endif ; EXTRADLMEMORY 5308 f630 d0 .byte.b $1FFF 5301 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f631 - else 5303 f631 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f631 - endif 5306 f631 - endif ; TMPMEMADDRESS > $1FFF 5307 f631 endif ; EXTRADLMEMORY 5308 f631 20 .byte.b $1FFF 5301 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f632 - else 5303 f632 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f632 - endif 5306 f632 - endif ; TMPMEMADDRESS > $1FFF 5307 f632 endif ; EXTRADLMEMORY 5308 f632 70 .byte.b $1FFF 5301 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f633 - else 5303 f633 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f633 - endif 5306 f633 - endif ; TMPMEMADDRESS > $1FFF 5307 f633 endif ; EXTRADLMEMORY 5308 f633 c0 .byte.b $1FFF 5301 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f634 - else 5303 f634 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f634 - endif 5306 f634 - endif ; TMPMEMADDRESS > $1FFF 5307 f634 endif ; EXTRADLMEMORY 5308 f634 10 .byte.b $1FFF 5301 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f635 - else 5303 f635 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f635 - endif 5306 f635 - endif ; TMPMEMADDRESS > $1FFF 5307 f635 endif ; EXTRADLMEMORY 5308 f635 60 .byte.b $1FFF 5301 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f636 - else 5303 f636 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f636 - endif 5306 f636 - endif ; TMPMEMADDRESS > $1FFF 5307 f636 endif ; EXTRADLMEMORY 5308 f636 b0 .byte.b $1FFF 5301 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f637 - else 5303 f637 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f637 - endif 5306 f637 - endif ; TMPMEMADDRESS > $1FFF 5307 f637 endif ; EXTRADLMEMORY 5308 f637 00 .byte.b $1FFF 5301 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f638 - else 5303 f638 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f638 - endif 5306 f638 - endif ; TMPMEMADDRESS > $1FFF 5307 f638 endif ; EXTRADLMEMORY 5308 f638 50 .byte.b $1FFF 5301 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f639 - else 5303 f639 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f639 - endif 5306 f639 - endif ; TMPMEMADDRESS > $1FFF 5307 f639 endif ; EXTRADLMEMORY 5308 f639 a0 .byte.b $1FFF 5301 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f63a - else 5303 f63a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f63a - endif 5306 f63a - endif ; TMPMEMADDRESS > $1FFF 5307 f63a endif ; EXTRADLMEMORY 5308 f63a f0 .byte.b $1FFF 5301 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f63b - else 5303 f63b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f63b - endif 5306 f63b - endif ; TMPMEMADDRESS > $1FFF 5307 f63b endif ; EXTRADLMEMORY 5308 f63b 40 .byte.b $1FFF 5301 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f63c - else 5303 f63c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f63c - endif 5306 f63c - endif ; TMPMEMADDRESS > $1FFF 5307 f63c endif ; EXTRADLMEMORY 5308 f63c 90 .byte.b $1FFF 5301 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f63d - else 5303 f63d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f63d - endif 5306 f63d - endif ; TMPMEMADDRESS > $1FFF 5307 f63d endif ; EXTRADLMEMORY 5308 f63d e0 .byte.b $1FFF 5301 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f63e - else 5303 f63e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f63e - endif 5306 f63e - endif ; TMPMEMADDRESS > $1FFF 5307 f63e endif ; EXTRADLMEMORY 5308 f63e 30 .byte.b $1FFF 5301 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f63f - else 5303 f63f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f63f - endif 5306 f63f - endif ; TMPMEMADDRESS > $1FFF 5307 f63f endif ; EXTRADLMEMORY 5308 f63f 80 .byte.b $1FFF 5301 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f640 - else 5303 f640 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f640 - endif 5306 f640 - endif ; TMPMEMADDRESS > $1FFF 5307 f640 endif ; EXTRADLMEMORY 5308 f640 d0 .byte.b $1FFF 5301 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f641 - else 5303 f641 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f641 - endif 5306 f641 - endif ; TMPMEMADDRESS > $1FFF 5307 f641 endif ; EXTRADLMEMORY 5308 f641 20 .byte.b $1FFF 5301 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f642 - else 5303 f642 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f642 - endif 5306 f642 - endif ; TMPMEMADDRESS > $1FFF 5307 f642 endif ; EXTRADLMEMORY 5308 f642 70 .byte.b $1FFF 5301 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f643 - else 5303 f643 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f643 - endif 5306 f643 - endif ; TMPMEMADDRESS > $1FFF 5307 f643 endif ; EXTRADLMEMORY 5308 f643 c0 .byte.b $1FFF 5301 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f644 - else 5303 f644 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f644 - endif 5306 f644 - endif ; TMPMEMADDRESS > $1FFF 5307 f644 endif ; EXTRADLMEMORY 5308 f644 10 .byte.b $1FFF 5301 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f645 - else 5303 f645 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f645 - endif 5306 f645 - endif ; TMPMEMADDRESS > $1FFF 5307 f645 endif ; EXTRADLMEMORY 5308 f645 60 .byte.b $1FFF 5301 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5302 f646 - else 5303 f646 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5304 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5305 f646 - endif 5306 f646 - endif ; TMPMEMADDRESS > $1FFF 5307 f646 endif ; EXTRADLMEMORY 5308 f646 b0 .byte.b $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 if DLINDEX = 0 5326 f647 18 80 ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 if DLINDEX = 1 5329 f647 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 if DLINDEX = 2 5332 f647 19 20 ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 if DLINDEX = 3 5335 f647 19 70 ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 if DLINDEX = 4 5338 f647 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 if DLINDEX = 5 5341 f647 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 if DLINDEX = 6 5344 f647 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 if DLINDEX = 7 5347 f647 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 if DLINDEX = 8 5350 f647 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 if DLINDEX = 9 5353 f647 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 if DLINDEX = 10 5356 f647 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 if DLINDEX = 11 5359 f647 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 if DLINDEX = 12 5362 f647 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 if DLINDEX = 13 5365 f647 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 if DLINDEX = 14 5368 f647 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 if DLINDEX = 15 5371 f647 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 if DLINDEX = 16 5374 f647 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 if DLINDEX = 17 5377 f647 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 if DLINDEX = 18 5380 f647 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 if DLINDEX = 19 5383 f647 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 if DLINDEX = 20 5386 f647 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 if DLINDEX = 21 5389 f647 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 if DLINDEX = 22 5392 f647 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 - if DLINDEX = 23 5395 f647 -ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5314 f647 REPEND 5315 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 5316 f647 - ifconst EXTRADLMEMORY 5317 f647 - if TMPMEMADDRESS > $1FFF 5318 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5319 f647 - else 5320 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 5321 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 5322 f647 - endif 5323 f647 - endif ; TMPMEMADDRESS > $1FFF 5324 f647 endif ; EXTRADLMEMORY 5325 f647 - if DLINDEX = 0 5326 f647 -ZONE0ADDRESS = TMPMEMADDRESS 5327 f647 endif 5328 f647 - if DLINDEX = 1 5329 f647 -ZONE1ADDRESS = TMPMEMADDRESS 5330 f647 endif 5331 f647 - if DLINDEX = 2 5332 f647 -ZONE2ADDRESS = TMPMEMADDRESS 5333 f647 endif 5334 f647 - if DLINDEX = 3 5335 f647 -ZONE3ADDRESS = TMPMEMADDRESS 5336 f647 endif 5337 f647 - if DLINDEX = 4 5338 f647 -ZONE4ADDRESS = TMPMEMADDRESS 5339 f647 endif 5340 f647 - if DLINDEX = 5 5341 f647 -ZONE5ADDRESS = TMPMEMADDRESS 5342 f647 endif 5343 f647 - if DLINDEX = 6 5344 f647 -ZONE6ADDRESS = TMPMEMADDRESS 5345 f647 endif 5346 f647 - if DLINDEX = 7 5347 f647 -ZONE7ADDRESS = TMPMEMADDRESS 5348 f647 endif 5349 f647 - if DLINDEX = 8 5350 f647 -ZONE8ADDRESS = TMPMEMADDRESS 5351 f647 endif 5352 f647 - if DLINDEX = 9 5353 f647 -ZONE9ADDRESS = TMPMEMADDRESS 5354 f647 endif 5355 f647 - if DLINDEX = 10 5356 f647 -ZONE10ADDRESS = TMPMEMADDRESS 5357 f647 endif 5358 f647 - if DLINDEX = 11 5359 f647 -ZONE11ADDRESS = TMPMEMADDRESS 5360 f647 endif 5361 f647 - if DLINDEX = 12 5362 f647 -ZONE12ADDRESS = TMPMEMADDRESS 5363 f647 endif 5364 f647 - if DLINDEX = 13 5365 f647 -ZONE13ADDRESS = TMPMEMADDRESS 5366 f647 endif 5367 f647 - if DLINDEX = 14 5368 f647 -ZONE14ADDRESS = TMPMEMADDRESS 5369 f647 endif 5370 f647 - if DLINDEX = 15 5371 f647 -ZONE15ADDRESS = TMPMEMADDRESS 5372 f647 endif 5373 f647 - if DLINDEX = 16 5374 f647 -ZONE16ADDRESS = TMPMEMADDRESS 5375 f647 endif 5376 f647 - if DLINDEX = 17 5377 f647 -ZONE17ADDRESS = TMPMEMADDRESS 5378 f647 endif 5379 f647 - if DLINDEX = 18 5380 f647 -ZONE18ADDRESS = TMPMEMADDRESS 5381 f647 endif 5382 f647 - if DLINDEX = 19 5383 f647 -ZONE19ADDRESS = TMPMEMADDRESS 5384 f647 endif 5385 f647 - if DLINDEX = 20 5386 f647 -ZONE20ADDRESS = TMPMEMADDRESS 5387 f647 endif 5388 f647 - if DLINDEX = 21 5389 f647 -ZONE21ADDRESS = TMPMEMADDRESS 5390 f647 endif 5391 f647 - if DLINDEX = 22 5392 f647 -ZONE22ADDRESS = TMPMEMADDRESS 5393 f647 endif 5394 f647 if DLINDEX = 23 5395 f647 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 5396 f647 endif 5397 f647 - if DLINDEX = 24 5398 f647 -ZONE24ADDRESS = TMPMEMADDRESS 5399 f647 endif 5400 f647 - if DLINDEX = 25 5401 f647 -ZONE25ADDRESS = TMPMEMADDRESS 5402 f647 endif 5403 f647 - if DLINDEX = 26 5404 f647 -ZONE26ADDRESS = TMPMEMADDRESS 5405 f647 endif 5406 f647 - if DLINDEX = 27 5407 f647 -ZONE27ADDRESS = TMPMEMADDRESS 5408 f647 endif 5409 f647 DLINDEX SET DLINDEX + 1 5410 f647 REPEND 5411 f647 5412 f647 $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 5413 f647 echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 5414 f647 5415 f647 DLHEIGHT 5416 f647 REPEAT WZONECOUNT 5417 f647 07 .byte.b (WZONEHEIGHT-1) 5416 f647 REPEND 5417 f648 07 .byte.b (WZONEHEIGHT-1) 5416 f648 REPEND 5417 f649 07 .byte.b (WZONEHEIGHT-1) 5416 f649 REPEND 5417 f64a 07 .byte.b (WZONEHEIGHT-1) 5416 f64a REPEND 5417 f64b 07 .byte.b (WZONEHEIGHT-1) 5416 f64b REPEND 5417 f64c 07 .byte.b (WZONEHEIGHT-1) 5416 f64c REPEND 5417 f64d 07 .byte.b (WZONEHEIGHT-1) 5416 f64d REPEND 5417 f64e 07 .byte.b (WZONEHEIGHT-1) 5416 f64e REPEND 5417 f64f 07 .byte.b (WZONEHEIGHT-1) 5416 f64f REPEND 5417 f650 07 .byte.b (WZONEHEIGHT-1) 5416 f650 REPEND 5417 f651 07 .byte.b (WZONEHEIGHT-1) 5416 f651 REPEND 5417 f652 07 .byte.b (WZONEHEIGHT-1) 5416 f652 REPEND 5417 f653 07 .byte.b (WZONEHEIGHT-1) 5416 f653 REPEND 5417 f654 07 .byte.b (WZONEHEIGHT-1) 5416 f654 REPEND 5417 f655 07 .byte.b (WZONEHEIGHT-1) 5416 f655 REPEND 5417 f656 07 .byte.b (WZONEHEIGHT-1) 5416 f656 REPEND 5417 f657 07 .byte.b (WZONEHEIGHT-1) 5416 f657 REPEND 5417 f658 07 .byte.b (WZONEHEIGHT-1) 5416 f658 REPEND 5417 f659 07 .byte.b (WZONEHEIGHT-1) 5416 f659 REPEND 5417 f65a 07 .byte.b (WZONEHEIGHT-1) 5416 f65a REPEND 5417 f65b 07 .byte.b (WZONEHEIGHT-1) 5416 f65b REPEND 5417 f65c 07 .byte.b (WZONEHEIGHT-1) 5416 f65c REPEND 5417 f65d 07 .byte.b (WZONEHEIGHT-1) 5416 f65d REPEND 5417 f65e 07 .byte.b (WZONEHEIGHT-1) 5418 f65f REPEND 5419 f65f 5420 f65f ; Provided under the CC0 license. See the included LICENSE.txt for details. 5421 f65f 5422 f65f ; a simple guard, than ensures the 7800basic code hasn't 5423 f65f ; spilled into the encryption area... 2335 bytes left in the 7800basic reserved area. 5424 f65f echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 5425 f65f - if (*>$FF7D) 5426 f65f - ERR ; abort the assembly 5427 f65f endif 5428 f65f ; Provided under the CC0 license. See the included LICENSE.txt for details. 5429 f65f 5430 f65f - ifconst DEV 5431 f65f - ifnconst ZONEHEIGHT 5432 f65f - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 5433 f65f - else 5434 f65f - if ZONEHEIGHT = 8 5435 f65f - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 5436 f65f - else 5437 f65f - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 5438 f65f - endif 5439 f65f - endif 5440 f65f endif 5441 f65f 5442 f65f ; FF7E/FF7F contains the 7800basic crc checksum word 5443 f65f 5444 f65f ; FF80 - FFF7 contains the 7800 encryption key 5445 f65f 5446 f65f ifnconst bankswitchmode 5447 fff8 ORG $FFF8 5448 fff8 - else 5449 fff8 - ifconst ROM128K 5450 fff8 - ORG $27FF8 5451 fff8 - RORG $FFF8 5452 fff8 - endif 5453 fff8 - ifconst ROM144K 5454 fff8 - ORG $27FF8 5455 fff8 - RORG $FFF8 5456 fff8 - endif 5457 fff8 - ifconst ROM256K 5458 fff8 - ORG $47FF8 5459 fff8 - RORG $FFF8 5460 fff8 - endif 5461 fff8 - ifconst ROM272K 5462 fff8 - ORG $47FF8 5463 fff8 - RORG $FFF8 5464 fff8 - endif 5465 fff8 - ifconst ROM512K 5466 fff8 - ORG $87FF8 5467 fff8 - RORG $FFF8 5468 fff8 - endif 5469 fff8 - ifconst ROM528K 5470 fff8 - ORG $87FF8 5471 fff8 - RORG $FFF8 5472 fff8 - endif 5473 fff8 endif 5474 fff8 5475 fff8 5476 fff8 ff .byte.b $FF ; region verification. $FF=all regions 5477 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 5478 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 5479 fffa 5480 fffa ;Vectors 5481 fffa 00 f0 .word.w NMI 5482 fffc 59 f5 .word.w START 5483 fffe 5a f0 .word.w IRQ 5484 10000