------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm LEVEL 1 PASS 4 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 4 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 4 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 4 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 00 sfx_pulsecannon_length = .skipL0191-sfx_pulsecannon 34 10000 ???? 35 10000 ???? 00 00 sfx_bling_length = .skipL0190-sfx_bling 36 10000 ???? 37 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 38 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 39 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 40 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 41 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 42 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 43 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 44 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 45 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 46 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 47 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 48 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 49 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 50 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 51 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 52 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 53 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 54 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 55 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 56 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 57 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 58 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 59 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 60 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 61 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 62 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 63 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 64 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 65 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 66 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 67 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 68 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 69 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 70 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 71 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 72 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 73 10000 ???? 00 00 atascii_color1 = $00 74 10000 ???? 00 0f atascii_color0 = $0f 75 10000 ???? 01 a9 lives = score1 76 10000 ???? 77 10000 ???? 01 62 extra_shipFlag = var34 78 10000 ???? 79 10000 ???? 01 61 extra_shipY = var33 80 10000 ???? 81 10000 ???? 01 60 extra_shipX = var32 82 10000 ???? 83 10000 ???? 01 5f gameover_flag = var31 84 10000 ???? 85 10000 ???? 01 5e enemy01_speed = var30 86 10000 ???? 87 10000 ???? 01 5d rMovement6 = var29 88 10000 ???? 89 10000 ???? 01 5c rMovement5 = var28 90 10000 ???? 91 10000 ???? 01 5b rMovement4 = var27 92 10000 ???? 93 10000 ???? 01 5a rMovement3 = var26 94 10000 ???? 95 10000 ???? 01 59 enemy01_Flag = var25 96 10000 ???? 97 10000 ???? 01 58 enemy01_Y = var24 98 10000 ???? 99 10000 ???? 01 57 enemy01_X = var23 100 10000 ???? 101 10000 ???? 01 56 enemy_shotSlowdown = var22 102 10000 ???? 103 10000 ???? 01 55 bulletSlowdown = var21 104 10000 ???? 105 10000 ???? 01 54 power_upSlowdown = var20 106 10000 ???? 107 10000 ???? 01 53 rMovement2 = var19 108 10000 ???? 109 10000 ???? 01 52 power_upFlag = var18 110 10000 ???? 111 10000 ???? 01 51 power_upY = var17 112 10000 ???? 113 10000 ???? 01 50 power_upX = var16 114 10000 ???? 115 10000 ???? 01 4f rDirection = var15 116 10000 ???? 117 10000 ???? 01 4e rMovement1 = var14 118 10000 ???? 119 10000 ???? 01 4d playerFlag = var13 120 10000 ???? 121 10000 ???? 01 4c enemy_shotFlag = var12 122 10000 ???? 123 10000 ???? 01 4b enemy_shotY = var11 124 10000 ???? 125 10000 ???? 01 4a enemy_shotX = var10 126 10000 ???? 127 10000 ???? 01 49 bulletY = var9 128 10000 ???? 129 10000 ???? 01 48 bulletX = var8 130 10000 ???? 131 10000 ???? 01 47 joyposright = var7 132 10000 ???? 133 10000 ???? 01 46 joyposleft = var6 134 10000 ???? 135 10000 ???? 01 45 joyposdown = var5 136 10000 ???? 137 10000 ???? 01 44 joyposup = var4 138 10000 ???? 139 10000 ???? 01 43 fire_debounce = var3 140 10000 ???? 141 10000 ???? 01 42 playerY = var2 142 10000 ???? 143 10000 ???? 01 41 playerX = var1 144 10000 ???? 145 10000 ???? 01 40 frameCounter = var0 146 10000 ???? 147 10000 ???? 00 01 collisionwrap = 1 148 10000 ???? 00 01 NTSC = 1 149 10000 ???? 00 c0 SCREENHEIGHT = 192 150 10000 ???? 00 01 CHECKOVERWRITE = 1 151 10000 ???? 00 08 ZONEHEIGHT = 8 152 10000 ???? 00 01 ROM16K = 1 ------- FILE 7800basic.h 6 10000 ???? 7 10000 ???? ;************ 7800 overall RAM map ************** 8 10000 ???? 9 10000 ???? ; 40-FF zero page RAM 10 10000 ???? ; 140-1FF RAM (stack) 11 10000 ???? ; 1800-203F RAM 12 10000 ???? ; 2100-213F RAM 13 10000 ???? ; 2200-27FF RAM 14 10000 ???? 15 10000 ???? ;************ 7800basic RAM usage map ************** 16 10000 ???? 17 10000 ???? ; 40-FF numerous defines, listed below 18 10000 ???? ; 140-1FF RAM (stack) 19 10000 ???? 20 10000 ???? ; 1800-187F DLL (1800-18DF with page flipping enabled) 21 10000 ???? ; 1880-1FFF DLs (18E0-1FFF with page flipping enabled) 22 10000 ???? 23 10000 ???? ; 2000-203F Reserved 24 10000 ???? ; 2100-213F Reserved 25 10000 ???? ; 2200-27FF Free 26 10000 ???? 27 10000 ???? 1f e0 eeprombuffer = $1FE0 28 10000 ???? 18 00 DLLMEM = $1800 29 10000 ???? 00 70 DBOFFSET = $70 ; $E0 length DL is /2 for double-buffering 30 10000 ???? 31 10000 ???? - ifconst PLOTVALUEPAGE 32 10000 ???? -VALBUFFER = (PLOTVALUEPAGE*256) 33 10000 ???? else 34 10000 ???? 20 00 VALBUFFER = $2000 ; to $203F ** never let VALBUFFER straddle pages 35 10000 ???? endif 36 10000 ???? 37 10000 ???? 38 10000 ???? 21 00 pausestate = $2100 39 10000 ???? 21 01 dlzero = $2101 ; zero to force end of $2100 DL, which we use in vblank and overscan 40 10000 ???? 21 02 sINPT1 = $2102 ; save register for joy button joy0 41 10000 ???? 21 03 sINPT3 = $2103 ; save register for joy button joy1 42 10000 ???? 21 04 currentbank = $2104 43 10000 ???? 44 10000 ???? 21 05 currentrambank = $2105 45 10000 ???? 21 06 charactermode = $2106 46 10000 ???? 21 07 sCTRL = $2107 47 10000 ???? 21 08 pokeydetected = $2108 48 10000 ???? 21 09 paldetected = $2109 49 10000 ???? 21 0a avoxdetected = $210A 50 10000 ???? 21 0b sCHARBASE = $210B ; save register for CHARBASE 51 10000 ???? 52 10000 ???? 21 0c hsdevice = $210C 53 10000 ???? 21 0d hsdifficulty = $210D 54 10000 ???? 21 0e hserror = $210E 55 10000 ???? 21 0f hsgameslot = $210F 56 10000 ???? 21 10 hsnewscoreline = $2110 57 10000 ???? 21 11 hsnewscorerank = $2111 58 10000 ???? 21 12 HSRAMTable = $2112 ; to $212F (30 bytes) Format: III*5, SSS*5 59 10000 ???? 21 12 HSRAMInitials = $2112 ; see above 60 10000 ???? 21 21 HSRAMScores = $2121 ; see above 61 10000 ???? 62 10000 ???? 21 31 ssCTRL = $2131 63 10000 ???? 21 32 ssCHARBASE = $2132 64 10000 ???? 21 33 hsdisplaymode = $2133 65 10000 ???? 21 34 gamedifficulty = $2134 66 10000 ???? 21 35 hsinitialpos = $2135 67 10000 ???? 21 36 hsinitialhold = $2136 68 10000 ???? 21 37 hscursorx = $2137 69 10000 ???? 21 38 hsjoydebounce = $2138 70 10000 ???? 21 39 hsswcha = $2139 71 10000 ???? 21 3a hsinpt1 = $213A 72 10000 ???? 21 3b hscolorchaseindex = $213B 73 10000 ???? 21 3c visibleDLLstart = $213C 74 10000 ???? 21 3d overscanDLLstart = $213D 75 10000 ???? 21 3e frameslost = $213E 76 10000 ???? 77 10000 ???? 78 10000 ???? 00 40 rand = $40 79 10000 ???? 00 41 rand16 = $41 80 10000 ???? 00 42 temp1 = $42 81 10000 ???? 00 43 temp2 = $43 82 10000 ???? 00 44 temp3 = $44 83 10000 ???? 00 45 temp4 = $45 84 10000 ???? 00 46 temp5 = $46 85 10000 ???? 00 47 temp6 = $47 86 10000 ???? 00 48 temp7 = $48 87 10000 ???? 00 49 temp8 = $49 88 10000 ???? 00 4a temp9 = $4a 89 10000 ???? 90 10000 ???? 00 4b pokeybase = $4b 91 10000 ???? 00 4b pokeybaselo = $4b 92 10000 ???? 00 4c pokeybasehi = $4c 93 10000 ???? 94 10000 ???? 00 4d visibleover = $4d 95 10000 ???? 96 10000 ???? 00 4e sfx1pointlo = $4e 97 10000 ???? 00 4f sfx2pointlo = $4f 98 10000 ???? 00 50 sfx1pointhi = $50 99 10000 ???? 00 51 sfx2pointhi = $51 100 10000 ???? 101 10000 ???? 00 52 sfx1priority = $52 102 10000 ???? 00 53 sfx2priority = $53 103 10000 ???? 00 54 sfx1poffset = $54 104 10000 ???? 00 55 sfx2poffset = $55 105 10000 ???? 106 10000 ???? 00 56 sfx1frames = $56 107 10000 ???? 00 57 sfx2frames = $57 108 10000 ???? 00 58 sfx1tick = $58 109 10000 ???? 00 59 sfx2tick = $59 110 10000 ???? 111 10000 ???? 00 5a tempmath = $5a 112 10000 ???? 113 10000 ???? 00 5b pokey1pointlo = $5b 114 10000 ???? 00 5c pokey1pointhi = $5c 115 10000 ???? 00 5d pokey2pointlo = $5d 116 10000 ???? 00 5e pokey2pointhi = $5e 117 10000 ???? 00 5f pokey3pointlo = $5f 118 10000 ???? 00 60 pokey3pointhi = $60 119 10000 ???? 00 61 pokey4pointlo = $61 120 10000 ???? 00 62 pokey4pointhi = $62 121 10000 ???? 122 10000 ???? 00 63 dlpnt = $63 ; to $64 123 10000 ???? 00 65 dlend = $65 ; to $81 - for 28 possible visible dll entries 124 10000 ???? 00 82 dlendsave = $82 ; to $9e - for 28 possible visible dll entries 125 10000 ???? 126 10000 ???? 00 9f speech_addr = $9f 127 10000 ???? 00 a0 speech_addr_hi = $a0 128 10000 ???? 129 10000 ???? 00 a1 HSGameTableLo = $a1 130 10000 ???? 00 a2 HSGameTableHi = $a2 131 10000 ???? 00 a3 HSVoxHi = $a3 132 10000 ???? 00 a4 HSVoxLo = $a4 133 10000 ???? 134 10000 ???? ;channel pointers 135 10000 ???? 136 10000 ???? 00 a5 songchannel1layer1lo = $a5 137 10000 ???? 00 a6 songchannel2layer1lo = $a6 138 10000 ???? 00 a7 songchannel3layer1lo = $a7 139 10000 ???? 00 a8 songchannel4layer1lo = $a8 140 10000 ???? 141 10000 ???? 00 a9 songchannel1layer2lo = $a9 142 10000 ???? 00 aa songchannel2layer2lo = $aA 143 10000 ???? 00 ab songchannel3layer2lo = $aB 144 10000 ???? 00 ac songchannel4layer2lo = $aC 145 10000 ???? 146 10000 ???? 00 ad songchannel1layer3lo = $aD 147 10000 ???? 00 ae songchannel2layer3lo = $aE 148 10000 ???? 00 af songchannel3layer3lo = $aF 149 10000 ???? 00 b0 songchannel4layer3lo = $b0 150 10000 ???? 151 10000 ???? 00 b1 songchannel1layer1hi = $b1 152 10000 ???? 00 b2 songchannel2layer1hi = $b2 153 10000 ???? 00 b3 songchannel3layer1hi = $b3 154 10000 ???? 00 b4 songchannel4layer1hi = $b4 155 10000 ???? 156 10000 ???? 00 b5 songchannel1layer2hi = $b5 157 10000 ???? 00 b6 songchannel2layer2hi = $b6 158 10000 ???? 00 b7 songchannel3layer2hi = $b7 159 10000 ???? 00 b8 songchannel4layer2hi = $b8 160 10000 ???? 161 10000 ???? 00 b9 songchannel1layer3hi = $b9 162 10000 ???? 00 ba songchannel2layer3hi = $bA 163 10000 ???? 00 bb songchannel3layer3hi = $bB 164 10000 ???? 00 bc songchannel4layer3hi = $bC 165 10000 ???? 166 10000 ???? 00 bd songdatalo = $bd 167 10000 ???? 00 be songdatahi = $be 168 10000 ???? 169 10000 ???? 00 bf inactivechannelcount = $bf 170 10000 ???? 171 10000 ???? 172 10000 ???? 00 c0 songchannel1transpose = $c0 173 10000 ???? 00 c1 songchannel2transpose = $c1 174 10000 ???? 00 c2 songchannel3transpose = $c2 175 10000 ???? 00 c3 songchannel4transpose = $c3 176 10000 ???? 177 10000 ???? 00 c4 songstackindex = $c4 178 10000 ???? 179 10000 ???? 00 c5 songchannel1instrumentlo = $c5 180 10000 ???? 00 c6 songchannel2instrumentlo = $c6 181 10000 ???? 00 c7 songchannel3instrumentlo = $c7 182 10000 ???? 00 c8 songchannel4instrumentlo = $c8 183 10000 ???? 184 10000 ???? 00 c9 songchannel1instrumenthi = $c9 185 10000 ???? 00 ca songchannel2instrumenthi = $ca 186 10000 ???? 00 cb songchannel3instrumenthi = $cb 187 10000 ???? 00 cc songchannel4instrumenthi = $cc 188 10000 ???? 189 10000 ???? 00 cd sfx1notedata = $cd 190 10000 ???? 00 ce sfx2notedata = $ce 191 10000 ???? 192 10000 ???? 00 cf songloops = $cf 193 10000 ???? 194 10000 ???? 00 d0 songpointerlo = $D0 195 10000 ???? 00 d1 songpointerhi = $D1 196 10000 ???? 197 10000 ???? 00 d2 voxlock = $D2 198 10000 ???? 00 d3 voxqueuesize = $D3 199 10000 ???? 200 10000 ???? 00 d4 vblankroutines = $D4 201 10000 ???? 202 10000 ???? 00 d5 doublebufferstate = $D5 203 10000 ???? 00 d6 doublebufferdloffset = $D6 204 10000 ???? 00 d7 doublebufferbufferdirty = $D7 205 10000 ???? 206 10000 ???? 00 d8 inttemp1 = $D8 207 10000 ???? 00 d9 inttemp2 = $D9 208 10000 ???? 00 da inttemp3 = $DA 209 10000 ???? 00 db inttemp4 = $DB 210 10000 ???? 00 dc inttemp5 = $DC 211 10000 ???? 00 dd inttemp6 = $DD 212 10000 ???? 213 10000 ???? 00 de sfxschedulelock = $DE 214 10000 ???? 00 df sfxschedulemissed = $DF 215 10000 ???? 00 e0 sfxinstrumentlo = $E0 216 10000 ???? 00 e1 sfxinstrumenthi = $E1 217 10000 ???? 00 e2 sfxpitchoffset = $E2 218 10000 ???? 00 e3 sfxnoteindex = $E3 219 10000 ???? 220 10000 ???? 00 e4 CTLSWAs = $E4 221 10000 ???? 00 e5 CTLSWBs = $E5 222 10000 ???? 223 10000 ???? 00 e6 A = $e6 224 10000 ???? 00 e6 a = $e6 225 10000 ???? 00 e7 B = $e7 226 10000 ???? 00 e7 b = $e7 227 10000 ???? 00 e8 C = $e8 228 10000 ???? 00 e8 c = $e8 229 10000 ???? 00 e9 D = $e9 230 10000 ???? 00 e9 d = $e9 231 10000 ???? 00 ea E = $ea 232 10000 ???? 00 ea e = $ea 233 10000 ???? 00 eb F = $eb 234 10000 ???? 00 eb f = $eb 235 10000 ???? 00 ec G = $ec 236 10000 ???? 00 ec g = $ec 237 10000 ???? 00 ed H = $ed 238 10000 ???? 00 ed h = $ed 239 10000 ???? 00 ee I = $ee 240 10000 ???? 00 ee i = $ee 241 10000 ???? 00 ef J = $ef 242 10000 ???? 00 ef j = $ef 243 10000 ???? 00 f0 K = $f0 244 10000 ???? 00 f0 k = $f0 245 10000 ???? 00 f1 L = $f1 246 10000 ???? 00 f1 l = $f1 247 10000 ???? 00 f2 M = $f2 248 10000 ???? 00 f2 m = $f2 249 10000 ???? 00 f3 N = $f3 250 10000 ???? 00 f3 n = $f3 251 10000 ???? 00 f4 O = $f4 252 10000 ???? 00 f4 o = $f4 253 10000 ???? 00 f5 P = $f5 254 10000 ???? 00 f5 p = $f5 255 10000 ???? 00 f6 Q = $f6 256 10000 ???? 00 f6 q = $f6 257 10000 ???? 00 f7 R = $f7 258 10000 ???? 00 f7 r = $f7 259 10000 ???? 00 f8 S = $f8 260 10000 ???? 00 f8 s = $f8 261 10000 ???? 00 f9 T = $f9 262 10000 ???? 00 f9 t = $f9 263 10000 ???? 00 fa U = $fa 264 10000 ???? 00 fa u = $fa 265 10000 ???? 00 fb V = $fb 266 10000 ???? 00 fb v = $fb 267 10000 ???? 00 fc W = $fc 268 10000 ???? 00 fc w = $fc 269 10000 ???? 00 fd X = $fd 270 10000 ???? 00 fd x = $fd 271 10000 ???? 00 fe Y = $fe 272 10000 ???? 00 fe y = $fe 273 10000 ???? 00 ff Z = $ff 274 10000 ???? 00 ff z = $ff 275 10000 ???? 276 10000 ???? ; var0-var99 variables use the top of the stack 277 10000 ???? 01 40 var0 = $140 278 10000 ???? 01 41 var1 = $141 279 10000 ???? 01 42 var2 = $142 280 10000 ???? 01 43 var3 = $143 281 10000 ???? 01 44 var4 = $144 282 10000 ???? 01 45 var5 = $145 283 10000 ???? 01 46 var6 = $146 284 10000 ???? 01 47 var7 = $147 285 10000 ???? 01 48 var8 = $148 286 10000 ???? 01 49 var9 = $149 287 10000 ???? 01 4a var10 = $14a 288 10000 ???? 01 4b var11 = $14b 289 10000 ???? 01 4c var12 = $14c 290 10000 ???? 01 4d var13 = $14d 291 10000 ???? 01 4e var14 = $14e 292 10000 ???? 01 4f var15 = $14f 293 10000 ???? 01 50 var16 = $150 294 10000 ???? 01 51 var17 = $151 295 10000 ???? 01 52 var18 = $152 296 10000 ???? 01 53 var19 = $153 297 10000 ???? 01 54 var20 = $154 298 10000 ???? 01 55 var21 = $155 299 10000 ???? 01 56 var22 = $156 300 10000 ???? 01 57 var23 = $157 301 10000 ???? 01 58 var24 = $158 302 10000 ???? 01 59 var25 = $159 303 10000 ???? 01 5a var26 = $15a 304 10000 ???? 01 5b var27 = $15b 305 10000 ???? 01 5c var28 = $15c 306 10000 ???? 01 5d var29 = $15d 307 10000 ???? 01 5e var30 = $15e 308 10000 ???? 01 5f var31 = $15f 309 10000 ???? 01 60 var32 = $160 310 10000 ???? 01 61 var33 = $161 311 10000 ???? 01 62 var34 = $162 312 10000 ???? 01 63 var35 = $163 313 10000 ???? 01 64 var36 = $164 314 10000 ???? 01 65 var37 = $165 315 10000 ???? 01 66 var38 = $166 316 10000 ???? 01 67 var39 = $167 317 10000 ???? 01 68 var40 = $168 318 10000 ???? 01 69 var41 = $169 319 10000 ???? 01 6a var42 = $16a 320 10000 ???? 01 6b var43 = $16b 321 10000 ???? 01 6c var44 = $16c 322 10000 ???? 01 6d var45 = $16d 323 10000 ???? 01 6e var46 = $16e 324 10000 ???? 01 6f var47 = $16f 325 10000 ???? 01 70 var48 = $170 326 10000 ???? 01 71 var49 = $171 327 10000 ???? 01 72 var50 = $172 328 10000 ???? 01 73 var51 = $173 329 10000 ???? 01 74 var52 = $174 330 10000 ???? 01 75 var53 = $175 331 10000 ???? 01 76 var54 = $176 332 10000 ???? 01 77 var55 = $177 333 10000 ???? 01 78 var56 = $178 334 10000 ???? 01 79 var57 = $179 335 10000 ???? 01 7a var58 = $17a 336 10000 ???? 01 7b var59 = $17b 337 10000 ???? 01 7c var60 = $17c 338 10000 ???? 01 7d var61 = $17d 339 10000 ???? 01 7e var62 = $17e 340 10000 ???? 01 7f var63 = $17f 341 10000 ???? 01 80 var64 = $180 342 10000 ???? 01 81 var65 = $181 343 10000 ???? 01 82 var66 = $182 344 10000 ???? 01 83 var67 = $183 345 10000 ???? 01 84 var68 = $184 346 10000 ???? 01 85 var69 = $185 347 10000 ???? 01 86 var70 = $186 348 10000 ???? 01 87 var71 = $187 349 10000 ???? 01 88 var72 = $188 350 10000 ???? 01 89 var73 = $189 351 10000 ???? 01 8a var74 = $18a 352 10000 ???? 01 8b var75 = $18b 353 10000 ???? 01 8c var76 = $18c 354 10000 ???? 01 8d var77 = $18d 355 10000 ???? 01 8e var78 = $18e 356 10000 ???? 01 8f var79 = $18f 357 10000 ???? 01 90 var80 = $190 358 10000 ???? 01 91 var81 = $191 359 10000 ???? 01 92 var82 = $192 360 10000 ???? 01 93 var83 = $193 361 10000 ???? 01 94 var84 = $194 362 10000 ???? 01 95 var85 = $195 363 10000 ???? 01 96 var86 = $196 364 10000 ???? 01 97 var87 = $197 365 10000 ???? 01 98 var88 = $198 366 10000 ???? 01 99 var89 = $199 367 10000 ???? 01 9a var90 = $19a 368 10000 ???? 01 9b var91 = $19b 369 10000 ???? 01 9c var92 = $19c 370 10000 ???? 01 9d var93 = $19d 371 10000 ???? 01 9e var94 = $19e 372 10000 ???? 01 9f var95 = $19f 373 10000 ???? 01 a0 var96 = $1a0 374 10000 ???? 01 a1 var97 = $1a1 375 10000 ???? 01 a2 var98 = $1a2 376 10000 ???? 01 a3 var99 = $1a3 377 10000 ???? 378 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_VerticalShooter_Test.78b.asm ------- FILE 7800basic_variable_redefs.h LEVEL 2 PASS 4 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 00 sfx_pulsecannon_length = .skipL0191-sfx_pulsecannon 34 10000 ???? 35 10000 ???? 00 00 sfx_bling_length = .skipL0190-sfx_bling 36 10000 ???? 37 10000 ???? 00 0f vertical_shooting_1up_color3 = $0f 38 10000 ???? 00 42 vertical_shooting_1up_color2 = $42 39 10000 ???? 00 04 vertical_shooting_1up_color1 = $04 40 10000 ???? 00 00 vertical_shooting_1up_color0 = $00 41 10000 ???? 00 33 vertical_shooting_score_10_digits_color3 = $33 42 10000 ???? 00 2b vertical_shooting_score_10_digits_color2 = $2b 43 10000 ???? 00 36 vertical_shooting_score_10_digits_color1 = $36 44 10000 ???? 00 00 vertical_shooting_score_10_digits_color0 = $00 45 10000 ???? 00 83 vertical_shooting_enemy01_tallsprite_00_color3 = $83 46 10000 ???? 00 a8 vertical_shooting_enemy01_tallsprite_00_color2 = $a8 47 10000 ???? 00 bc vertical_shooting_enemy01_tallsprite_00_color1 = $bc 48 10000 ???? 00 00 vertical_shooting_enemy01_tallsprite_00_color0 = $00 49 10000 ???? 00 83 vertical_shooting_enemy01_color3 = $83 50 10000 ???? 00 a8 vertical_shooting_enemy01_color2 = $a8 51 10000 ???? 00 bc vertical_shooting_enemy01_color1 = $bc 52 10000 ???? 00 00 vertical_shooting_enemy01_color0 = $00 53 10000 ???? 00 36 vertical_shooting_powerup_color3 = $36 54 10000 ???? 00 33 vertical_shooting_powerup_color2 = $33 55 10000 ???? 00 2b vertical_shooting_powerup_color1 = $2b 56 10000 ???? 00 00 vertical_shooting_powerup_color0 = $00 57 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 58 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 59 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 60 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 61 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 62 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 63 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 64 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 65 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 66 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 67 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 68 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 69 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 70 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 71 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 72 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 73 10000 ???? 00 00 atascii_color1 = $00 74 10000 ???? 00 0f atascii_color0 = $0f 75 10000 ???? 01 a9 lives = score1 76 10000 ???? 77 10000 ???? 01 62 extra_shipFlag = var34 78 10000 ???? 79 10000 ???? 01 61 extra_shipY = var33 80 10000 ???? 81 10000 ???? 01 60 extra_shipX = var32 82 10000 ???? 83 10000 ???? 01 5f gameover_flag = var31 84 10000 ???? 85 10000 ???? 01 5e enemy01_speed = var30 86 10000 ???? 87 10000 ???? 01 5d rMovement6 = var29 88 10000 ???? 89 10000 ???? 01 5c rMovement5 = var28 90 10000 ???? 91 10000 ???? 01 5b rMovement4 = var27 92 10000 ???? 93 10000 ???? 01 5a rMovement3 = var26 94 10000 ???? 95 10000 ???? 01 59 enemy01_Flag = var25 96 10000 ???? 97 10000 ???? 01 58 enemy01_Y = var24 98 10000 ???? 99 10000 ???? 01 57 enemy01_X = var23 100 10000 ???? 101 10000 ???? 01 56 enemy_shotSlowdown = var22 102 10000 ???? 103 10000 ???? 01 55 bulletSlowdown = var21 104 10000 ???? 105 10000 ???? 01 54 power_upSlowdown = var20 106 10000 ???? 107 10000 ???? 01 53 rMovement2 = var19 108 10000 ???? 109 10000 ???? 01 52 power_upFlag = var18 110 10000 ???? 111 10000 ???? 01 51 power_upY = var17 112 10000 ???? 113 10000 ???? 01 50 power_upX = var16 114 10000 ???? 115 10000 ???? 01 4f rDirection = var15 116 10000 ???? 117 10000 ???? 01 4e rMovement1 = var14 118 10000 ???? 119 10000 ???? 01 4d playerFlag = var13 120 10000 ???? 121 10000 ???? 01 4c enemy_shotFlag = var12 122 10000 ???? 123 10000 ???? 01 4b enemy_shotY = var11 124 10000 ???? 125 10000 ???? 01 4a enemy_shotX = var10 126 10000 ???? 127 10000 ???? 01 49 bulletY = var9 128 10000 ???? 129 10000 ???? 01 48 bulletX = var8 130 10000 ???? 131 10000 ???? 01 47 joyposright = var7 132 10000 ???? 133 10000 ???? 01 46 joyposleft = var6 134 10000 ???? 135 10000 ???? 01 45 joyposdown = var5 136 10000 ???? 137 10000 ???? 01 44 joyposup = var4 138 10000 ???? 139 10000 ???? 01 43 fire_debounce = var3 140 10000 ???? 141 10000 ???? 01 42 playerY = var2 142 10000 ???? 143 10000 ???? 01 41 playerX = var1 144 10000 ???? 145 10000 ???? 01 40 frameCounter = var0 146 10000 ???? 147 10000 ???? 00 01 collisionwrap = 1 148 10000 ???? 00 01 NTSC = 1 149 10000 ???? 00 c0 SCREENHEIGHT = 192 150 10000 ???? 00 01 CHECKOVERWRITE = 1 151 10000 ???? 00 08 ZONEHEIGHT = 8 152 10000 ???? 00 01 ROM16K = 1 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 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 . 389 c006 ;; 390 c006 391 c006 . 392 c006 ;; 393 c006 394 c006 .L00 ;; set romsize 16k 395 c006 396 c006 .L01 ;; set zoneheight 8 397 c006 398 c006 .L02 ;; set zoneprotection on 399 c006 400 c006 .L03 ;; set tallsprite on 401 c006 402 c006 .L04 ;; set screenheight 192 403 c006 404 c006 .L05 ;; set basepath gfx 405 c006 406 c006 .L06 ;; set tv ntsc 407 c006 408 c006 .L07 ;; set collisionwrap on 409 c006 410 c006 .L08 ;; displaymode 160A 411 c006 412 c006 a9 40 lda #%01000000 ;Enable DMA, mode=160x2/160x4 413 c008 85 3c sta CTRL 414 c00a 415 c00a 8d 07 21 sta sCTRL 416 c00d 417 c00d . 418 c00d ;; 419 c00d 420 c00d .L09 ;; dim frameCounter = var0 421 c00d 422 c00d .L010 ;; dim playerX = var1 423 c00d 424 c00d .L011 ;; dim playerY = var2 425 c00d 426 c00d .L012 ;; dim fire_debounce = var3 427 c00d 428 c00d .L013 ;; dim joyposup = var4 429 c00d 430 c00d .L014 ;; dim joyposdown = var5 431 c00d 432 c00d .L015 ;; dim joyposleft = var6 433 c00d 434 c00d .L016 ;; dim joyposright = var7 435 c00d 436 c00d .L017 ;; dim bulletX = var8 437 c00d 438 c00d .L018 ;; dim bulletY = var9 439 c00d 440 c00d .L019 ;; dim enemy_shotX = var10 441 c00d 442 c00d .L020 ;; dim enemy_shotY = var11 443 c00d 444 c00d .L021 ;; dim enemy_shotFlag = var12 445 c00d 446 c00d .L022 ;; dim playerFlag = var13 447 c00d 448 c00d .L023 ;; dim rMovement1 = var14 449 c00d 450 c00d .L024 ;; dim rDirection = var15 451 c00d 452 c00d .L025 ;; dim power_upX = var16 453 c00d 454 c00d .L026 ;; dim power_upY = var17 455 c00d 456 c00d .L027 ;; dim power_upFlag = var18 457 c00d 458 c00d .L028 ;; dim rMovement2 = var19 459 c00d 460 c00d .L029 ;; dim power_upSlowdown = var20 461 c00d 462 c00d .L030 ;; dim bulletSlowdown = var21 463 c00d 464 c00d .L031 ;; dim enemy_shotSlowdown = var22 465 c00d 466 c00d .L032 ;; dim enemy01_X = var23 467 c00d 468 c00d .L033 ;; dim enemy01_Y = var24 469 c00d 470 c00d .L034 ;; dim enemy01_Flag = var25 471 c00d 472 c00d .L035 ;; dim rMovement3 = var26 473 c00d 474 c00d .L036 ;; dim rMovement4 = var27 475 c00d 476 c00d .L037 ;; dim rMovement5 = var28 477 c00d 478 c00d .L038 ;; dim rMovement6 = var29 479 c00d 480 c00d .L039 ;; dim enemy01_speed = var30 481 c00d 482 c00d .L040 ;; dim gameover_flag = var31 483 c00d 484 c00d .L041 ;; dim extra_shipX = var32 485 c00d 486 c00d .L042 ;; dim extra_shipY = var33 487 c00d 488 c00d .L043 ;; dim extra_shipFlag = var34 489 c00d 490 c00d .L044 ;; dim lives = score1 491 c00d 492 c00d .palettes 493 c00d ;; palettes 494 c00d 495 c00d .L045 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 496 c00d 497 c00d a9 0f LDA #$0F 498 c00f 85 21 STA P0C1 499 c011 a9 05 LDA #$05 500 c013 85 22 STA P0C2 501 c015 a9 32 LDA #$32 502 c017 85 23 STA P0C3 503 c019 .L046 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 504 c019 505 c019 a9 0f LDA #$0F 506 c01b 85 25 STA P1C1 507 c01d a9 ee LDA #$EE 508 c01f 85 26 STA P1C2 509 c021 a9 e7 LDA #$E7 510 c023 85 27 STA P1C3 511 c025 .L047 ;; P2C1 = $9D : P2C2 = $73 : P2C3 = $88 512 c025 513 c025 a9 9d LDA #$9D 514 c027 85 29 STA P2C1 515 c029 a9 73 LDA #$73 516 c02b 85 2a STA P2C2 517 c02d a9 88 LDA #$88 518 c02f 85 2b STA P2C3 519 c031 .L048 ;; P3C1 = $FB : P3C2 = $F2 : P3C3 = $25 520 c031 521 c031 a9 fb LDA #$FB 522 c033 85 2d STA P3C1 523 c035 a9 f2 LDA #$F2 524 c037 85 2e STA P3C2 525 c039 a9 25 LDA #$25 526 c03b 85 2f STA P3C3 527 c03d . 528 c03d ;; 529 c03d 530 c03d .L049 ;; characterset atascii 531 c03d 532 c03d a9 d0 lda #>atascii 533 c03f 85 34 sta CHARBASE 534 c041 8d 0b 21 sta sCHARBASE 535 c044 536 c044 a9 e0 lda #(atascii_mode | %01100000) 537 c046 8d 06 21 sta charactermode 538 c049 539 c049 .L050 ;; alphachars ASCII 540 c049 541 c049 .import 542 c049 ;; import 543 c049 544 c049 .L051 ;; incgraphic atascii.png 320B 545 c049 546 c049 .L052 ;; incgraphic vertical_shooting_ship.png 160A 547 c049 548 c049 .L053 ;; incgraphic vertical_shooting_bullet.png 160A 549 c049 550 c049 .L054 ;; incgraphic vertical_shooting_enemyshot.png 160A 551 c049 552 c049 .L055 ;; incgraphic vertical_shooting_powerup.png 160A 553 c049 554 c049 .L056 ;; incgraphic vertical_shooting_enemy01.png 160A 555 c049 556 c049 .L057 ;; incgraphic vertical_shooting_score_10_digits.png 160A 557 c049 558 c049 .L058 ;; incgraphic vertical_shooting_1up.png 160A 559 c049 560 c049 . 561 c049 ;; 562 c049 563 c049 .plot 564 c049 ;; plot 565 c049 566 c049 .L059 ;; clearscreen 567 c049 568 c049 20 74 f0 jsr clearscreen 569 c04c .L060 ;; plotchars 'New^Vertical^Shooting^Demo' 1 26 8 570 c04c 571 c04c 4c 69 c0 JMP skipalphadata0 572 c04f alphadata0 573 c04f 4e .byte.b (alphadata0 604 c06f 85 43 sta temp2 605 c071 606 c071 a9 06 lda #6 ; width in two's complement 607 c073 09 20 ora #32 ; palette left shifted 5 bits 608 c075 85 44 sta temp3 609 c077 a9 1a lda #26 610 c079 85 45 sta temp4 611 c07b 612 c07b a9 08 lda #8 613 c07d 614 c07d 85 46 sta temp5 615 c07f 616 c07f 20 48 f3 jsr plotcharacters 617 c082 .L061 ;; plotchars 'by^Shane^Skekel.' 1 16 16 618 c082 619 c082 4c 95 c0 JMP skipalphadata1 620 c085 alphadata1 621 c085 62 .byte.b (alphadata1 642 c09b 85 43 sta temp2 643 c09d 644 c09d a9 10 lda #16 ; width in two's complement 645 c09f 09 20 ora #32 ; palette left shifted 5 bits 646 c0a1 85 44 sta temp3 647 c0a3 a9 10 lda #16 648 c0a5 85 45 sta temp4 649 c0a7 650 c0a7 a9 10 lda #16 651 c0a9 652 c0a9 85 46 sta temp5 653 c0ab 654 c0ab 20 48 f3 jsr plotcharacters 655 c0ae .L062 ;; plotchars 'Push^Fire^to^Begin.' 2 24 80 656 c0ae 657 c0ae 4c c4 c0 JMP skipalphadata2 658 c0b1 alphadata2 659 c0b1 50 .byte.b (alphadata2 683 c0ca 85 43 sta temp2 684 c0cc 685 c0cc a9 0d lda #13 ; width in two's complement 686 c0ce 09 40 ora #64 ; palette left shifted 5 bits 687 c0d0 85 44 sta temp3 688 c0d2 a9 18 lda #24 689 c0d4 85 45 sta temp4 690 c0d6 691 c0d6 a9 50 lda #80 692 c0d8 693 c0d8 85 46 sta temp5 694 c0da 695 c0da 20 48 f3 jsr plotcharacters 696 c0dd .L063 ;; savescreen 697 c0dd 698 c0dd 20 98 f0 jsr savescreen 699 c0e0 .L064 ;; drawscreen 700 c0e0 701 c0e0 20 a8 f0 jsr drawscreen 702 c0e3 .init 703 c0e3 ;; init 704 c0e3 705 c0e3 .L065 ;; playerX = 80 : playerY = 144 : playerFlag = 0 : fire_debounce = 0 706 c0e3 707 c0e3 a9 50 LDA #80 708 c0e5 8d 41 01 STA playerX 709 c0e8 a9 90 LDA #144 710 c0ea 8d 42 01 STA playerY 711 c0ed a9 00 LDA #0 712 c0ef 8d 4d 01 STA playerFlag 713 c0f2 8d 43 01 STA fire_debounce 714 c0f5 .L066 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 715 c0f5 716 c0f5 a9 00 LDA #0 717 c0f7 8d 44 01 STA joyposup 718 c0fa 8d 45 01 STA joyposdown 719 c0fd 8d 46 01 STA joyposleft 720 c100 8d 47 01 STA joyposright 721 c103 .L067 ;; bulletX = 0 : bulletY = 0 722 c103 723 c103 a9 00 LDA #0 724 c105 8d 48 01 STA bulletX 725 c108 8d 49 01 STA bulletY 726 c10b .L068 ;; enemy_shotX = 0 : enemy_shotY = 0 : enemy_shotFlag = 0 727 c10b 728 c10b a9 00 LDA #0 729 c10d 8d 4a 01 STA enemy_shotX 730 c110 8d 4b 01 STA enemy_shotY 731 c113 8d 4c 01 STA enemy_shotFlag 732 c116 .L069 ;; rMovement1 = 1 : rMovement2 = 1 : rMovement3 = 1 : rMovement4 = 1 733 c116 734 c116 a9 01 LDA #1 735 c118 8d 4e 01 STA rMovement1 736 c11b 8d 53 01 STA rMovement2 737 c11e 8d 5a 01 STA rMovement3 738 c121 8d 5b 01 STA rMovement4 739 c124 .L070 ;; rMovement5 = 1 : rMovement6 = 1 : rDirection = 1 740 c124 741 c124 a9 01 LDA #1 742 c126 8d 5c 01 STA rMovement5 743 c129 8d 5d 01 STA rMovement6 744 c12c 8d 4f 01 STA rDirection 745 c12f .L071 ;; power_upX = 5 : power_upY = 32 : power_upFlag = 0 746 c12f 747 c12f a9 05 LDA #5 748 c131 8d 50 01 STA power_upX 749 c134 a9 20 LDA #32 750 c136 8d 51 01 STA power_upY 751 c139 a9 00 LDA #0 752 c13b 8d 52 01 STA power_upFlag 753 c13e .L072 ;; enemy_shotSlowdown = 0 : bulletSlowdown = 0 : power_upSlowdown = 0 754 c13e 755 c13e a9 00 LDA #0 756 c140 8d 56 01 STA enemy_shotSlowdown 757 c143 8d 55 01 STA bulletSlowdown 758 c146 8d 54 01 STA power_upSlowdown 759 c149 .L073 ;; enemy01_X = 0 : enemy01_Y = 0 : enemy01_Flag = 0 : enemy01_speed = 6 760 c149 761 c149 a9 00 LDA #0 762 c14b 8d 57 01 STA enemy01_X 763 c14e 8d 58 01 STA enemy01_Y 764 c151 8d 59 01 STA enemy01_Flag 765 c154 a9 06 LDA #6 766 c156 8d 5e 01 STA enemy01_speed 767 c159 .L074 ;; frameCounter = 0 : gameover_flag = 0 768 c159 769 c159 a9 00 LDA #0 770 c15b 8d 40 01 STA frameCounter 771 c15e 8d 5f 01 STA gameover_flag 772 c161 .L075 ;; extra_shipX = 0 : extra_shipY = 0 : extra_shipFlag = 0 773 c161 774 c161 a9 00 LDA #0 775 c163 8d 60 01 STA extra_shipX 776 c166 8d 61 01 STA extra_shipY 777 c169 8d 62 01 STA extra_shipFlag 778 c16c . 779 c16c ;; 780 c16c 781 c16c .titlescreenloop 782 c16c ;; titlescreenloop 783 c16c 784 c16c .L076 ;; restorescreen 785 c16c 786 c16c 20 86 f0 jsr restorescreen 787 c16f .L077 ;; if switchreset then reboot 788 c16f 789 c16f 20 74 f4 jsr checkresetswitch 790 c172 d0 03 BNE .skipL077 791 c174 .condpart0 792 c174 4c 59 f5 JMP START 793 c177 .skipL077 794 c177 .L078 ;; if joy0fire then clearscreen : lives = $04 : score0 = 0 : goto main 795 c177 796 c177 2c 02 21 bit sINPT1 797 c17a 10 1a BPL .skipL078 798 c17c .condpart1 799 c17c 20 74 f0 jsr clearscreen 800 c17f a9 04 LDA #$04 801 c181 8d a9 01 STA lives 802 c184 a9 00 LDA #$00 803 c186 8d a8 01 STA score0+2 804 c189 a9 00 LDA #$00 805 c18b 8d a7 01 STA score0+1 806 c18e a9 00 LDA #$00 807 c190 8d a6 01 STA score0 808 c193 4c 00 d8 jmp .main 809 c196 810 c196 .skipL078 811 c196 . 812 c196 ;; 813 c196 814 c196 .L079 ;; if switchleftb then goto gameover_loop 815 c196 816 c196 2c 82 02 bit SWCHB 817 c199 70 03 BVS .skipL079 818 c19b .condpart2 819 c19b 4c 00 00 jmp .gameover_loop 820 c19e 821 c19e .skipL079 822 c19e .L080 ;; if switchrightb then playsfx sfx_bling 823 c19e 824 c19e 2c 82 02 bit SWCHB 825 c1a1 30 19 BMI .skipL080 826 c1a3 .condpart3 827 c1a3 a9 01 lda #1 828 c1a5 85 de sta sfxschedulelock 829 c1a7 a9 00 lda #sfx_bling 832 c1ad 85 e1 sta sfxinstrumenthi 833 c1af a9 00 lda #0 834 c1b1 85 e2 sta sfxpitchoffset ; no pitch modification 835 c1b3 85 e3 sta sfxnoteindex ; not a musical note 836 c1b5 20 40 f2 jsr schedulesfx 837 c1b8 a9 00 lda #0 838 c1ba 85 de sta sfxschedulelock 839 c1bc .skipL080 840 c1bc .L081 ;; drawscreen 841 c1bc 842 c1bc 20 a8 f0 jsr drawscreen 843 c1bf .L082 ;; goto titlescreenloop 844 c1bf 845 c1bf 4c 6c c1 jmp .titlescreenloop 846 c1c2 847 c1c2 . 848 c1c2 ;; 849 c1c2 850 c1c2 .L083 ;; dmahole 0 noflow 851 c1c2 852 c1c2 gameend 853 c1c2 DMAHOLEEND2 SET . 3646 bytes of ROM space left in the main area. 854 c1c2 echo " ",[($D000 - gameend)]d , "bytes of ROM space left in the main area." 855 c1c2 856 d000 ORG $D000,0 ; ************* 857 d000 858 d000 atascii 859 d000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 860 d020 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 861 d040 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000300000000000000 862 d060 00 00 00 00* HEX 0000000000000000000000000000000000000000000003000000000000000000 863 d080 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 864 d0a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 865 d0c0 00 00 00 00* HEX 0000000000000000000000000000070c00000000030c00000000000000000000 866 d0e0 06 00 00 06* HEX 06000006000000000000000000000000000007080000 867 d0f6 vertical_shooting_ship 868 d0f6 07 d0 HEX 07d0 869 d0f8 vertical_shooting_ship_tallsprite_00 870 d0f8 80 02 HEX 8002 871 d0fa vertical_shooting_bullet 872 d0fa 28 HEX 28 873 d0fb vertical_shooting_enemyshot 874 d0fb 00 HEX 00 875 d0fc vertical_shooting_powerup 876 d0fc 28 00 HEX 2800 877 d0fe 878 d100 ORG $D100,0 ; ************* 879 d100 880 d100 ;atascii 881 d100 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 882 d120 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 883 d140 00 00 01 08* HEX 000001080000060601080406030b0000000e0700000000000108000001080400 884 d160 03 0c 07 0e* HEX 030c070e070e030c000c030c030c0300030c0308010801080006000006000108 885 d180 03 0e 06 06* HEX 030e0606070c030c0708070e0600030e0606070e030c0606070e06030606030c 886 d1a0 06 00 03 06* HEX 060003060606030c0108070e0108060306060108070e010e0006070800000f0f 887 d1c0 00 00 03 0e* HEX 0000030e070c030c030e030c010800060606030c00060606030c06030606030c 888 d1e0 06 00 00 06* HEX 060000060600070c000e030e010803060606000c070e 889 d1f6 ;vertical_shooting_ship 890 d1f6 07 d0 HEX 07d0 891 d1f8 ;vertical_shooting_ship_tallsprite_00 892 d1f8 80 02 HEX 8002 893 d1fa ;vertical_shooting_bullet 894 d1fa 28 HEX 28 895 d1fb ;vertical_shooting_enemyshot 896 d1fb 88 HEX 88 897 d1fc ;vertical_shooting_powerup 898 d1fc 78 08 HEX 7808 899 d1fe 900 d200 ORG $D200,0 ; ************* 901 d200 902 d200 ;atascii 903 d200 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 904 d220 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 905 d240 00 00 00 00* HEX 0000000000000f0f070c060606060000010c0308060601080108000001080600 906 d260 06 06 01 08* HEX 0606010803000606070e0606060603000606000c01080108000c070e03000000 907 d280 06 00 07 0e* HEX 0600070e06060606060c060006000606060601080606060c06000603060e0606 908 d2a0 06 00 06 0c* HEX 0600060c060c000601080606030c07070606010806000108000c010800000000 909 d2c0 00 00 06 06* HEX 0000060606060600060606000108030e060601080006060c0108060b06060606 910 d2e0 07 0c 03 0e* HEX 070c030e0600000601080606030c030e030c030e0300 911 d2f6 ;vertical_shooting_ship 912 d2f6 03 c0 HEX 03c0 913 d2f8 ;vertical_shooting_ship_tallsprite_00 914 d2f8 a1 4a HEX a14a 915 d2fa ;vertical_shooting_bullet 916 d2fa 3c HEX 3c 917 d2fb ;vertical_shooting_enemyshot 918 d2fb 10 HEX 10 919 d2fc ;vertical_shooting_powerup 920 d2fc 78 1e HEX 781e 921 d2fe 922 d300 ORG $D300,0 ; ************* 923 d300 924 d300 ;atascii 925 d300 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 926 d320 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 927 d340 00 00 01 08* HEX 000001080000060600060300060f000001080108030c01080000000000000300 928 d360 07 06 01 08* HEX 070601080108000c060c00060606010806060006000000000108000001080108 929 d380 06 0e 06 06* HEX 060e060606060600060606000600060e06060108000607080600060b070e0606 930 d3a0 07 0c 06 06* HEX 070c0606070c0006010806060606070f030c0108030001080108010806030000 931 d3c0 00 00 03 0e* HEX 0000030e060606000606070e0108060606060108000607080108070f06060606 932 d3e0 06 06 06 06* HEX 060606060600030c010806060606070f010806060108 933 d3f6 ;vertical_shooting_ship 934 d3f6 01 40 HEX 0140 935 d3f8 ;vertical_shooting_ship_tallsprite_00 936 d3f8 a5 5a HEX a55a 937 d3fa ;vertical_shooting_bullet 938 d3fa 3c HEX 3c 939 d3fb ;vertical_shooting_enemyshot 940 d3fb 74 HEX 74 941 d3fc ;vertical_shooting_powerup 942 d3fc 7a a4 HEX 7aa4 943 d3fe 944 d400 ORG $D400,0 ; ************* 945 d400 946 d400 ;atascii 947 d400 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 948 d420 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 949 d440 00 00 01 08* HEX 0000010806060606030c010803080108010801080f0f070e0000070e00000108 950 d460 06 0e 01 08* HEX 060e0108000c0108030c070c070c000c030c030e0108010803000000000c000c 951 d480 06 0e 06 06* HEX 060e0606070c06000606070c070c0600070e0108000607080600070f070e0606 952 d4a0 06 06 06 06* HEX 060606060606030c010806060606060b030c030c010801080300010803060000 953 d4c0 01 08 00 06* HEX 01080006070c0600030e0606030e0606070c03080006060c0108070f06060606 954 d4e0 06 06 06 06* HEX 0606060606060600010806060606060b030c0606000c 955 d4f6 ;vertical_shooting_ship 956 d4f6 01 40 HEX 0140 957 d4f8 ;vertical_shooting_ship_tallsprite_00 958 d4f8 a5 5a HEX a55a 959 d4fa ;vertical_shooting_bullet 960 d4fa 14 HEX 14 961 d4fb ;vertical_shooting_enemyshot 962 d4fb 74 HEX 74 963 d4fc ;vertical_shooting_powerup 964 d4fc 75 7a HEX 757a 965 d4fe 966 d500 ORG $D500,0 ; ************* 967 d500 968 d500 ;atascii 969 d500 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 970 d520 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 971 d540 00 00 01 08* HEX 0000010806060f0f0600060c010c0108010c0308030c0108000000000000000c 972 d560 06 06 03 08* HEX 060603080606000c010c06000600000606060606010801080108070e01080606 973 d580 06 06 03 0c* HEX 0606030c06060606060c060006000600060601080006060c0600070707060606 974 d5a0 06 06 06 06* HEX 0606060606060600010806060606060306060606000c010806000108010c0000 975 d5c0 01 08 03 0c* HEX 0108030c0600030c0006030c0108030e060000000000060001080606070c030c 976 d5e0 07 0c 03 0e* HEX 070c030e070c030e070e06060606060306060606070e 977 d5f6 ;vertical_shooting_ship 978 d5f6 01 40 HEX 0140 979 d5f8 ;vertical_shooting_ship_tallsprite_00 980 d5f8 a5 5a HEX a55a 981 d5fa ;vertical_shooting_bullet 982 d5fa 14 HEX 14 983 d5fb ;vertical_shooting_enemyshot 984 d5fb 74 HEX 74 985 d5fc ;vertical_shooting_powerup 986 d5fc 78 1e HEX 781e 987 d5fe 988 d600 ORG $D600,0 ; ************* 989 d600 990 d600 ;atascii 991 d600 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 992 d620 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 993 d640 00 00 01 08* HEX 0000010806060606030e060603060108000e0700060601080000000000000006 994 d660 03 0c 01 08* HEX 030c0108030c070e000c070e030c070e030c030c00000000000c00000300030c 995 d680 03 0c 01 08* HEX 030c0108070c030c0708070e070e030e0606070e00060606060006030606030c 996 d6a0 07 0c 03 0c* HEX 070c030c070c030c070e06060606060306060606070e010e0400070800080000 997 d6c0 01 08 00 00* HEX 010800000600000000060000000e000006000108000606000308000000000000 998 d6e0 00 00 00 00* HEX 00000000000000000108000000000000000000000000 999 d6f6 ;vertical_shooting_ship 1000 d6f6 01 40 HEX 0140 1001 d6f8 ;vertical_shooting_ship_tallsprite_00 1002 d6f8 a7 da HEX a7da 1003 d6fa ;vertical_shooting_bullet 1004 d6fa 14 HEX 14 1005 d6fb ;vertical_shooting_enemyshot 1006 d6fb 10 HEX 10 1007 d6fc ;vertical_shooting_powerup 1008 d6fc 7a bc HEX 7abc 1009 d6fe 1010 d700 ORG $D700,0 ; ************* 1011 d700 1012 d700 ;atascii 1013 d700 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1014 d720 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1015 d740 00 00 00 00* HEX 000000000000000001080000010c000000000000000000000000000000000000 1016 d760 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000006000006000000 1017 d780 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1018 d7a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1019 d7c0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1020 d7e0 00 00 00 00* HEX 00000000000000000000000000000000000000000000 1021 d7f6 ;vertical_shooting_ship 1022 d7f6 01 40 HEX 0140 1023 d7f8 ;vertical_shooting_ship_tallsprite_00 1024 d7f8 27 d8 HEX 27d8 1025 d7fa ;vertical_shooting_bullet 1026 d7fa 00 HEX 00 1027 d7fb ;vertical_shooting_enemyshot 1028 d7fb 88 HEX 88 1029 d7fc ;vertical_shooting_powerup 1030 d7fc 55 50 HEX 5550 1031 d7fe 1032 d800 ORG $D800,0 ; ************* 1033 d800 DMAHOLESTART0 SET . 1034 d800 .main 1035 d800 ;; main 1036 d800 1037 d800 .L084 ;; frameCounter = frameCounter + 1 1038 d800 1039 d800 ad 40 01 LDA frameCounter 1040 d803 18 CLC 1041 d804 69 01 ADC #1 1042 d806 8d 40 01 STA frameCounter 1043 d809 .L085 ;; if frameCounter > 10 then frameCounter = 0 1044 d809 1045 d809 a9 0a LDA #10 1046 d80b cd 40 01 CMP frameCounter 1047 d80e b0 05 BCS .skipL085 1048 d810 .condpart4 1049 d810 a9 00 LDA #0 1050 d812 8d 40 01 STA frameCounter 1051 d815 .skipL085 1052 d815 .mainloop 1053 d815 ;; mainloop 1054 d815 1055 d815 .L086 ;; BACKGRND = $00 1056 d815 1057 d815 a9 00 LDA #$00 1058 d817 85 20 STA BACKGRND 1059 d819 .L087 ;; restorescreen 1060 d819 1061 d819 20 86 f0 jsr restorescreen 1062 d81c .L088 ;; rMovement1 = ( rand & 7 ) - 2 1063 d81c 1064 d81c ; complex statement detected 1065 d81c 20 ec f3 jsr randomize 1066 d81f 29 07 AND #7 1067 d821 38 SEC 1068 d822 e9 02 SBC #2 1069 d824 8d 4e 01 STA rMovement1 1070 d827 .L089 ;; rMovement2 = ( rand & 6 ) 1071 d827 1072 d827 ; complex statement detected 1073 d827 20 ec f3 jsr randomize 1074 d82a 29 06 AND #6 1075 d82c 8d 53 01 STA rMovement2 1076 d82f .L090 ;; rMovement3 = ( rand & 3 ) + 1 1077 d82f 1078 d82f ; complex statement detected 1079 d82f 20 ec f3 jsr randomize 1080 d832 29 03 AND #3 1081 d834 18 CLC 1082 d835 69 01 ADC #1 1083 d837 8d 5a 01 STA rMovement3 1084 d83a .L091 ;; rMovement4 = ( rand & 5 ) + 2 1085 d83a 1086 d83a ; complex statement detected 1087 d83a 20 ec f3 jsr randomize 1088 d83d 29 05 AND #5 1089 d83f 18 CLC 1090 d840 69 02 ADC #2 1091 d842 8d 5b 01 STA rMovement4 1092 d845 .L092 ;; rMovement5 = ( rand & 5 ) + 1 1093 d845 1094 d845 ; complex statement detected 1095 d845 20 ec f3 jsr randomize 1096 d848 29 05 AND #5 1097 d84a 18 CLC 1098 d84b 69 01 ADC #1 1099 d84d 8d 5c 01 STA rMovement5 1100 d850 .L093 ;; rMovement6 = ( rand & 6 ) - 1 1101 d850 1102 d850 ; complex statement detected 1103 d850 20 ec f3 jsr randomize 1104 d853 29 06 AND #6 1105 d855 38 SEC 1106 d856 e9 01 SBC #1 1107 d858 8d 5d 01 STA rMovement6 1108 d85b .L094 ;; rDirection = ( rand & 4 ) 1109 d85b 1110 d85b ; complex statement detected 1111 d85b 20 ec f3 jsr randomize 1112 d85e 29 04 AND #4 1113 d860 8d 4f 01 STA rDirection 1114 d863 .L095 ;; if switchreset then reboot 1115 d863 1116 d863 20 74 f4 jsr checkresetswitch 1117 d866 d0 03 BNE .skipL095 1118 d868 .condpart5 1119 d868 4c 59 f5 JMP START 1120 d86b .skipL095 1121 d86b .L096 ;; enemy_shotSlowdown = enemy_shotSlowdown + 1 1122 d86b 1123 d86b ad 56 01 LDA enemy_shotSlowdown 1124 d86e 18 CLC 1125 d86f 69 01 ADC #1 1126 d871 8d 56 01 STA enemy_shotSlowdown 1127 d874 .L097 ;; if enemy_shotSlowdown > 8 then enemy_shotSlowdown = 0 1128 d874 1129 d874 a9 08 LDA #8 1130 d876 cd 56 01 CMP enemy_shotSlowdown 1131 d879 b0 05 BCS .skipL097 1132 d87b .condpart6 1133 d87b a9 00 LDA #0 1134 d87d 8d 56 01 STA enemy_shotSlowdown 1135 d880 .skipL097 1136 d880 . 1137 d880 ;; 1138 d880 1139 d880 .L098 ;; bulletSlowdown = bulletSlowdown + 1 1140 d880 1141 d880 ad 55 01 LDA bulletSlowdown 1142 d883 18 CLC 1143 d884 69 01 ADC #1 1144 d886 8d 55 01 STA bulletSlowdown 1145 d889 .L099 ;; if bulletSlowdown > 6 then bulletSlowdown = 0 1146 d889 1147 d889 a9 06 LDA #6 1148 d88b cd 55 01 CMP bulletSlowdown 1149 d88e b0 05 BCS .skipL099 1150 d890 .condpart7 1151 d890 a9 00 LDA #0 1152 d892 8d 55 01 STA bulletSlowdown 1153 d895 .skipL099 1154 d895 . 1155 d895 ;; 1156 d895 1157 d895 .L0100 ;; power_upSlowdown = power_upSlowdown + 1 1158 d895 1159 d895 ad 54 01 LDA power_upSlowdown 1160 d898 18 CLC 1161 d899 69 01 ADC #1 1162 d89b 8d 54 01 STA power_upSlowdown 1163 d89e .L0101 ;; if power_upSlowdown > 7 then power_upSlowdown = 0 1164 d89e 1165 d89e a9 07 LDA #7 1166 d8a0 cd 54 01 CMP power_upSlowdown 1167 d8a3 b0 05 BCS .skipL0101 1168 d8a5 .condpart8 1169 d8a5 a9 00 LDA #0 1170 d8a7 8d 54 01 STA power_upSlowdown 1171 d8aa .skipL0101 1172 d8aa . 1173 d8aa ;; 1174 d8aa 1175 d8aa .L0102 ;; plotsprite vertical_shooting_ship 0 playerX playerY 1176 d8aa 1177 d8aa a9 f6 lda #vertical_shooting_ship 1181 d8b0 85 43 sta temp2 1182 d8b2 1183 d8b2 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 1184 d8b4 85 44 sta temp3 1185 d8b6 1186 d8b6 ad 41 01 lda playerX 1187 d8b9 85 45 sta temp4 1188 d8bb 1189 d8bb ad 42 01 lda playerY 1190 d8be 1191 d8be 85 46 sta temp5 1192 d8c0 1193 d8c0 a9 40 lda #(vertical_shooting_ship_mode|%01000000) 1194 d8c2 85 47 sta temp6 1195 d8c4 1196 d8c4 20 88 f2 jsr plotsprite 1197 d8c7 ; +tall sprite replot 1198 d8c7 18 clc 1199 d8c8 a5 42 lda temp1 1200 d8ca 69 02 adc #vertical_shooting_ship_width 1201 d8cc 85 42 sta temp1 1202 d8ce a5 46 lda temp5 1203 d8d0 69 08 adc #WZONEHEIGHT 1204 d8d2 85 46 sta temp5 1205 d8d4 20 88 f2 jsr plotsprite 1206 d8d7 .L0103 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 1207 d8d7 1208 d8d7 a9 fa lda #vertical_shooting_bullet 1212 d8dd 85 43 sta temp2 1213 d8df 1214 d8df a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 1215 d8e1 85 44 sta temp3 1216 d8e3 1217 d8e3 ad 48 01 lda bulletX 1218 d8e6 85 45 sta temp4 1219 d8e8 1220 d8e8 ad 49 01 lda bulletY 1221 d8eb 1222 d8eb 85 46 sta temp5 1223 d8ed 1224 d8ed a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 1225 d8ef 85 47 sta temp6 1226 d8f1 1227 d8f1 20 88 f2 jsr plotsprite 1228 d8f4 .L0104 ;; plotsprite vertical_shooting_enemyshot 2 enemy_shotX enemy_shotY 1229 d8f4 1230 d8f4 a9 fb lda #vertical_shooting_enemyshot 1234 d8fa 85 43 sta temp2 1235 d8fc 1236 d8fc a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 1237 d8fe 85 44 sta temp3 1238 d900 1239 d900 ad 4a 01 lda enemy_shotX 1240 d903 85 45 sta temp4 1241 d905 1242 d905 ad 4b 01 lda enemy_shotY 1243 d908 1244 d908 85 46 sta temp5 1245 d90a 1246 d90a a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 1247 d90c 85 47 sta temp6 1248 d90e 1249 d90e 20 88 f2 jsr plotsprite 1250 d911 .L0105 ;; plotsprite vertical_shooting_powerup 3 power_upX power_upY 1251 d911 1252 d911 a9 fc lda #vertical_shooting_powerup 1256 d917 85 43 sta temp2 1257 d919 1258 d919 a9 7e lda #(96|vertical_shooting_powerup_width_twoscompliment) 1259 d91b 85 44 sta temp3 1260 d91d 1261 d91d ad 50 01 lda power_upX 1262 d920 85 45 sta temp4 1263 d922 1264 d922 ad 51 01 lda power_upY 1265 d925 1266 d925 85 46 sta temp5 1267 d927 1268 d927 a9 40 lda #(vertical_shooting_powerup_mode|%01000000) 1269 d929 85 47 sta temp6 1270 d92b 1271 d92b 20 88 f2 jsr plotsprite 1272 d92e .L0106 ;; plotsprite vertical_shooting_enemy01 2 enemy01_X enemy01_Y 1273 d92e 1274 d92e a9 00 lda #vertical_shooting_enemy01 1278 d934 85 43 sta temp2 1279 d936 1280 d936 a9 5e lda #(64|vertical_shooting_enemy01_width_twoscompliment) 1281 d938 85 44 sta temp3 1282 d93a 1283 d93a ad 57 01 lda enemy01_X 1284 d93d 85 45 sta temp4 1285 d93f 1286 d93f ad 58 01 lda enemy01_Y 1287 d942 1288 d942 85 46 sta temp5 1289 d944 1290 d944 a9 40 lda #(vertical_shooting_enemy01_mode|%01000000) 1291 d946 85 47 sta temp6 1292 d948 1293 d948 20 88 f2 jsr plotsprite 1294 d94b ; +tall sprite replot 1295 d94b 18 clc 1296 d94c a5 42 lda temp1 1297 d94e 69 02 adc #vertical_shooting_enemy01_width 1298 d950 85 42 sta temp1 1299 d952 a5 46 lda temp5 1300 d954 69 08 adc #WZONEHEIGHT 1301 d956 85 46 sta temp5 1302 d958 20 88 f2 jsr plotsprite 1303 d95b .L0107 ;; plotsprite vertical_shooting_1up 0 extra_shipX extra_shipY 1304 d95b 1305 d95b a9 0e lda #vertical_shooting_1up 1309 d961 85 43 sta temp2 1310 d963 1311 d963 a9 1e lda #(0|vertical_shooting_1up_width_twoscompliment) 1312 d965 85 44 sta temp3 1313 d967 1314 d967 ad 60 01 lda extra_shipX 1315 d96a 85 45 sta temp4 1316 d96c 1317 d96c ad 61 01 lda extra_shipY 1318 d96f 1319 d96f 85 46 sta temp5 1320 d971 1321 d971 a9 40 lda #(vertical_shooting_1up_mode|%01000000) 1322 d973 85 47 sta temp6 1323 d975 1324 d975 20 88 f2 jsr plotsprite 1325 d978 .L0108 ;; plotvalue vertical_shooting_score_10_digits 3 score0 6 25 8 1326 d978 1327 d978 a9 04 lda #vertical_shooting_score_10_digits 1331 d97e 85 43 sta temp2 1332 d980 1333 d980 ad 06 21 lda charactermode 1334 d983 85 4a sta temp9 1335 d985 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 1336 d987 8d 06 21 sta charactermode 1337 d98a a9 1a lda #26 ; width in two's complement 1338 d98c 09 60 ora #96 ; palette left shifted 5 bits 1339 d98e 85 44 sta temp3 1340 d990 a9 19 lda #25 1341 d992 85 45 sta temp4 1342 d994 1343 d994 a9 08 lda #8 1344 d996 85 46 sta temp5 1345 d998 1346 d998 a9 06 lda #6 1347 d99a 85 47 sta temp6 1348 d99c 1349 d99c a9 a6 lda #score0 1353 d9a2 85 49 sta temp8 1354 d9a4 1355 d9a4 20 7d f3 jsr plotvalue 1356 d9a4 00 01 USED_PLOTVALUE = 1 1357 d9a7 a5 4a lda temp9 1358 d9a9 8d 06 21 sta charactermode 1359 d9ac .L0109 ;; plotvalue vertical_shooting_score_10_digits 3 score1 1 153 8 1360 d9ac 1361 d9ac a9 04 lda #vertical_shooting_score_10_digits 1365 d9b2 85 43 sta temp2 1366 d9b4 1367 d9b4 ad 06 21 lda charactermode 1368 d9b7 85 4a sta temp9 1369 d9b9 a9 60 lda #(vertical_shooting_score_10_digits_mode | %01100000) 1370 d9bb 8d 06 21 sta charactermode 1371 d9be a9 1f lda #31 ; width in two's complement 1372 d9c0 09 60 ora #96 ; palette left shifted 5 bits 1373 d9c2 85 44 sta temp3 1374 d9c4 a9 99 lda #153 1375 d9c6 85 45 sta temp4 1376 d9c8 1377 d9c8 a9 08 lda #8 1378 d9ca 85 46 sta temp5 1379 d9cc 1380 d9cc a9 01 lda #1 1381 d9ce 85 47 sta temp6 1382 d9d0 1383 d9d0 a9 a9 lda #score1 1387 d9d6 85 49 sta temp8 1388 d9d8 1389 d9d8 20 7d f3 jsr plotvalue 1390 d9d8 00 01 USED_PLOTVALUE = 1 1391 d9db a5 4a lda temp9 1392 d9dd 8d 06 21 sta charactermode 1393 d9e0 . 1394 d9e0 ;; 1395 d9e0 1396 d9e0 .L0110 ;; drawscreen 1397 d9e0 1398 d9e0 20 a8 f0 jsr drawscreen 1399 d9e3 . 1400 d9e3 ;; 1401 d9e3 1402 d9e3 .L0111 ;; if joy0up && joyposup = - 2 then SetBulletHome 1403 d9e3 1404 d9e3 a9 10 lda #$10 1405 d9e5 2c 80 02 bit SWCHA 1406 d9e8 d0 0b BNE .skipL0111 1407 d9ea .condpart9 1408 d9ea ; complex condition detected 1409 d9ea a9 fe LDA #254 1410 d9ec 48 PHA 1411 d9ed ba TSX 1412 d9ee 68 PLA 1413 d9ef ad 44 01 LDA joyposup 1414 d9f2 dd 01 01 CMP $101,x 1415 d9f5 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1416 d9f5 - BEQ .SetBulletHome 1417 d9f5 - else 1418 d9f5 - bne .0skipSetBulletHome 1419 d9f5 - jmp .SetBulletHome 1420 d9f5 -.0skipSetBulletHome 1421 d9f5 endif 1422 d9f5 .skipL0111 1423 d9f5 .L0112 ;; if joy0down && joyposdown = - 2 then SetBulletHome 1424 d9f5 1425 d9f5 a9 20 lda #$20 1426 d9f7 2c 80 02 bit SWCHA 1427 d9fa d0 0b BNE .skipL0112 1428 d9fc .condpart10 1429 d9fc ; complex condition detected 1430 d9fc a9 fe LDA #254 1431 d9fe 48 PHA 1432 d9ff ba TSX 1433 da00 68 PLA 1434 da01 ad 45 01 LDA joyposdown 1435 da04 dd 01 01 CMP $101,x 1436 da07 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1437 da07 - BEQ .SetBulletHome 1438 da07 - else 1439 da07 - bne .1skipSetBulletHome 1440 da07 - jmp .SetBulletHome 1441 da07 -.1skipSetBulletHome 1442 da07 endif 1443 da07 .skipL0112 1444 da07 .L0113 ;; if joy0up && joyposleft = - 2 then SetBulletHome 1445 da07 1446 da07 a9 10 lda #$10 1447 da09 2c 80 02 bit SWCHA 1448 da0c d0 0b BNE .skipL0113 1449 da0e .condpart11 1450 da0e ; complex condition detected 1451 da0e a9 fe LDA #254 1452 da10 48 PHA 1453 da11 ba TSX 1454 da12 68 PLA 1455 da13 ad 46 01 LDA joyposleft 1456 da16 dd 01 01 CMP $101,x 1457 da19 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1458 da19 - BEQ .SetBulletHome 1459 da19 - else 1460 da19 - bne .2skipSetBulletHome 1461 da19 - jmp .SetBulletHome 1462 da19 -.2skipSetBulletHome 1463 da19 endif 1464 da19 .skipL0113 1465 da19 .L0114 ;; if joy0down && joyposright = - 2 then SetBulletHome 1466 da19 1467 da19 a9 20 lda #$20 1468 da1b 2c 80 02 bit SWCHA 1469 da1e d0 0b BNE .skipL0114 1470 da20 .condpart12 1471 da20 ; complex condition detected 1472 da20 a9 fe LDA #254 1473 da22 48 PHA 1474 da23 ba TSX 1475 da24 68 PLA 1476 da25 ad 47 01 LDA joyposright 1477 da28 dd 01 01 CMP $101,x 1478 da2b - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 1479 da2b - BEQ .SetBulletHome 1480 da2b - else 1481 da2b - bne .3skipSetBulletHome 1482 da2b - jmp .SetBulletHome 1483 da2b -.3skipSetBulletHome 1484 da2b endif 1485 da2b .skipL0114 1486 da2b .L0115 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 1487 da2b 1488 da2b a9 10 lda #$10 1489 da2d 2c 80 02 bit SWCHA 1490 da30 d0 19 BNE .skipL0115 1491 da32 .condpart13 1492 da32 ad 42 01 LDA playerY 1493 da35 38 SEC 1494 da36 e9 01 SBC #1 1495 da38 8d 42 01 STA playerY 1496 da3b a9 01 LDA #1 1497 da3d 8d 44 01 STA joyposup 1498 da40 a9 00 LDA #0 1499 da42 8d 45 01 STA joyposdown 1500 da45 8d 46 01 STA joyposleft 1501 da48 8d 47 01 STA joyposright 1502 da4b .skipL0115 1503 da4b .L0116 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 1504 da4b 1505 da4b a9 20 lda #$20 1506 da4d 2c 80 02 bit SWCHA 1507 da50 d0 1b BNE .skipL0116 1508 da52 .condpart14 1509 da52 ad 42 01 LDA playerY 1510 da55 18 CLC 1511 da56 69 01 ADC #1 1512 da58 8d 42 01 STA playerY 1513 da5b a9 00 LDA #0 1514 da5d 8d 44 01 STA joyposup 1515 da60 a9 01 LDA #1 1516 da62 8d 45 01 STA joyposdown 1517 da65 a9 00 LDA #0 1518 da67 8d 46 01 STA joyposleft 1519 da6a 8d 47 01 STA joyposright 1520 da6d .skipL0116 1521 da6d .L0117 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 1522 da6d 1523 da6d 2c 80 02 bit SWCHA 1524 da70 70 1b BVS .skipL0117 1525 da72 .condpart15 1526 da72 ad 41 01 LDA playerX 1527 da75 38 SEC 1528 da76 e9 01 SBC #1 1529 da78 8d 41 01 STA playerX 1530 da7b a9 00 LDA #0 1531 da7d 8d 44 01 STA joyposup 1532 da80 8d 45 01 STA joyposdown 1533 da83 a9 01 LDA #1 1534 da85 8d 46 01 STA joyposleft 1535 da88 a9 00 LDA #0 1536 da8a 8d 47 01 STA joyposright 1537 da8d .skipL0117 1538 da8d .L0118 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 1539 da8d 1540 da8d 2c 80 02 bit SWCHA 1541 da90 30 19 BMI .skipL0118 1542 da92 .condpart16 1543 da92 ad 41 01 LDA playerX 1544 da95 18 CLC 1545 da96 69 01 ADC #1 1546 da98 8d 41 01 STA playerX 1547 da9b a9 00 LDA #0 1548 da9d 8d 44 01 STA joyposup 1549 daa0 8d 45 01 STA joyposdown 1550 daa3 8d 46 01 STA joyposleft 1551 daa6 a9 01 LDA #1 1552 daa8 8d 47 01 STA joyposright 1553 daab .skipL0118 1554 daab .L0119 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 && playsfx sfx_pulsecannon 1555 daab 1556 daab 2c 02 21 bit sINPT1 1557 daae 10 17 BPL .skipL0119 1558 dab0 .condpart17 1559 dab0 ad 44 01 LDA joyposup 1560 dab3 c9 01 CMP #1 1561 dab5 d0 10 BNE .skip17then 1562 dab7 .condpart18 1563 dab7 ; complex statement detected 1564 dab7 ad 49 01 LDA bulletY 1565 daba 38 SEC 1566 dabb e9 05 SBC #5 1567 dabd 48 PHA 1568 dabe ad 00 00 LDA playsfx 1569 dac1 2d 00 00 AND sfx_pulsecannon 1570 dac4 8d 49 01 STA bulletY 1571 dac7 .skip17then 1572 dac7 .skipL0119 1573 dac7 .L0120 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 && playsfx sfx_pulsecannon 1574 dac7 1575 dac7 2c 02 21 bit sINPT1 1576 daca 10 17 BPL .skipL0120 1577 dacc .condpart19 1578 dacc ad 45 01 LDA joyposdown 1579 dacf c9 01 CMP #1 1580 dad1 d0 10 BNE .skip19then 1581 dad3 .condpart20 1582 dad3 ; complex statement detected 1583 dad3 ad 49 01 LDA bulletY 1584 dad6 38 SEC 1585 dad7 e9 05 SBC #5 1586 dad9 48 PHA 1587 dada ad 00 00 LDA playsfx 1588 dadd 2d 00 00 AND sfx_pulsecannon 1589 dae0 8d 49 01 STA bulletY 1590 dae3 .skip19then 1591 dae3 .skipL0120 1592 dae3 .L0121 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 && playsfx sfx_pulsecannon 1593 dae3 1594 dae3 2c 02 21 bit sINPT1 1595 dae6 10 17 BPL .skipL0121 1596 dae8 .condpart21 1597 dae8 ad 46 01 LDA joyposleft 1598 daeb c9 01 CMP #1 1599 daed d0 10 BNE .skip21then 1600 daef .condpart22 1601 daef ; complex statement detected 1602 daef ad 49 01 LDA bulletY 1603 daf2 38 SEC 1604 daf3 e9 05 SBC #5 1605 daf5 48 PHA 1606 daf6 ad 00 00 LDA playsfx 1607 daf9 2d 00 00 AND sfx_pulsecannon 1608 dafc 8d 49 01 STA bulletY 1609 daff .skip21then 1610 daff .skipL0121 1611 daff .L0122 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 && playsfx sfx_pulsecannon 1612 daff 1613 daff 2c 02 21 bit sINPT1 1614 db02 10 17 BPL .skipL0122 1615 db04 .condpart23 1616 db04 ad 47 01 LDA joyposright 1617 db07 c9 01 CMP #1 1618 db09 d0 10 BNE .skip23then 1619 db0b .condpart24 1620 db0b ; complex statement detected 1621 db0b ad 49 01 LDA bulletY 1622 db0e 38 SEC 1623 db0f e9 05 SBC #5 1624 db11 48 PHA 1625 db12 ad 00 00 LDA playsfx 1626 db15 2d 00 00 AND sfx_pulsecannon 1627 db18 8d 49 01 STA bulletY 1628 db1b .skip23then 1629 db1b .skipL0122 1630 db1b .L0123 ;; if !joy0fire then bulletX = playerX + 2 : bulletY = playerY - 8 1631 db1b 1632 db1b 2c 02 21 bit sINPT1 1633 db1e 30 12 BMI .skipL0123 1634 db20 .condpart25 1635 db20 ad 41 01 LDA playerX 1636 db23 18 CLC 1637 db24 69 02 ADC #2 1638 db26 8d 48 01 STA bulletX 1639 db29 ad 42 01 LDA playerY 1640 db2c 38 SEC 1641 db2d e9 08 SBC #8 1642 db2f 8d 49 01 STA bulletY 1643 db32 .skipL0123 1644 db32 . 1645 db32 ;; 1646 db32 1647 db32 .L0124 ;; if playerX > 152 then playerX = playerX - 1 1648 db32 1649 db32 a9 98 LDA #152 1650 db34 cd 41 01 CMP playerX 1651 db37 b0 09 BCS .skipL0124 1652 db39 .condpart26 1653 db39 ad 41 01 LDA playerX 1654 db3c 38 SEC 1655 db3d e9 01 SBC #1 1656 db3f 8d 41 01 STA playerX 1657 db42 .skipL0124 1658 db42 .L0125 ;; if playerX < 1 then playerX = playerX + 1 1659 db42 1660 db42 ad 41 01 LDA playerX 1661 db45 c9 01 CMP #1 1662 db47 b0 09 BCS .skipL0125 1663 db49 .condpart27 1664 db49 ad 41 01 LDA playerX 1665 db4c 18 CLC 1666 db4d 69 01 ADC #1 1667 db4f 8d 41 01 STA playerX 1668 db52 .skipL0125 1669 db52 .L0126 ;; if playerY > 177 then playerY = playerY - 1 1670 db52 1671 db52 a9 b1 LDA #177 1672 db54 cd 42 01 CMP playerY 1673 db57 b0 09 BCS .skipL0126 1674 db59 .condpart28 1675 db59 ad 42 01 LDA playerY 1676 db5c 38 SEC 1677 db5d e9 01 SBC #1 1678 db5f 8d 42 01 STA playerY 1679 db62 .skipL0126 1680 db62 .L0127 ;; if playerY < 1 then playerY = playerY + 1 1681 db62 1682 db62 ad 42 01 LDA playerY 1683 db65 c9 01 CMP #1 1684 db67 b0 09 BCS .skipL0127 1685 db69 .condpart29 1686 db69 ad 42 01 LDA playerY 1687 db6c 18 CLC 1688 db6d 69 01 ADC #1 1689 db6f 8d 42 01 STA playerY 1690 db72 .skipL0127 1691 db72 .L0128 ;; if bulletY > 183 then bulletY = bulletY - 1 1692 db72 1693 db72 a9 b7 LDA #183 1694 db74 cd 49 01 CMP bulletY 1695 db77 b0 09 BCS .skipL0128 1696 db79 .condpart30 1697 db79 ad 49 01 LDA bulletY 1698 db7c 38 SEC 1699 db7d e9 01 SBC #1 1700 db7f 8d 49 01 STA bulletY 1701 db82 .skipL0128 1702 db82 .L0129 ;; if bulletY < 1 then bulletY = bulletY + 1 1703 db82 1704 db82 ad 49 01 LDA bulletY 1705 db85 c9 01 CMP #1 1706 db87 b0 09 BCS .skipL0129 1707 db89 .condpart31 1708 db89 ad 49 01 LDA bulletY 1709 db8c 18 CLC 1710 db8d 69 01 ADC #1 1711 db8f 8d 49 01 STA bulletY 1712 db92 .skipL0129 1713 db92 .L0130 ;; dmahole 1 1714 db92 1715 db92 4c 00 00 jmp dmahole_1 1716 db92 DMAHOLEEND0 SET . 1131 bytes of ROM space left in DMA hole 0. 1717 db92 echo " "," "," "," ",[(256*WZONEHEIGHT)-(DMAHOLEEND0 - DMAHOLESTART0)]d , "bytes of ROM space left in DMA hole 0." 1718 db95 1719 e000 ORG $E000,0 ; ************* 1720 e000 1721 e000 vertical_shooting_enemy01 1722 e000 09 e0 HEX 09e0 1723 e002 vertical_shooting_enemy01_tallsprite_00 1724 e002 40 03 HEX 4003 1725 e004 vertical_shooting_score_10_digits 1726 e004 00 00 00 00* HEX 00000000000000000000 1727 e00e vertical_shooting_1up 1728 e00e 15 55 HEX 1555 1729 e010 1730 e100 ORG $E100,0 ; ************* 1731 e100 1732 e100 ;vertical_shooting_enemy01 1733 e100 09 e0 HEX 09e0 1734 e102 ;vertical_shooting_enemy01_tallsprite_00 1735 e102 50 0f HEX 500f 1736 e104 ;vertical_shooting_score_10_digits 1737 e104 54 54 54 10* HEX 54545410041054041010 1738 e10e ;vertical_shooting_1up 1739 e10e ea a9 HEX eaa9 1740 e110 1741 e200 ORG $E200,0 ; ************* 1742 e200 1743 e200 ;vertical_shooting_enemy01 1744 e200 19 ec HEX 19ec 1745 e202 ;vertical_shooting_enemy01_tallsprite_00 1746 e202 5a af HEX 5aaf 1747 e204 ;vertical_shooting_score_10_digits 1748 e204 cc 30 c0 cc* HEX cc30c0cc0ccccc0ccc0c 1749 e20e ;vertical_shooting_1up 1750 e20e d5 58 HEX d558 1751 e210 1752 e300 ORG $E300,0 ; ************* 1753 e300 1754 e300 ;vertical_shooting_enemy01 1755 e300 59 ef HEX 59ef 1756 e302 ;vertical_shooting_enemy01_tallsprite_00 1757 e302 59 ef HEX 59ef 1758 e304 ;vertical_shooting_score_10_digits 1759 e304 44 10 40 04* HEX 44104004040444044404 1760 e30e ;vertical_shooting_1up 1761 e30e 35 60 HEX 3560 1762 e310 1763 e400 ORG $E400,0 ; ************* 1764 e400 1765 e400 ;vertical_shooting_enemy01 1766 e400 59 6f HEX 596f 1767 e402 ;vertical_shooting_enemy01_tallsprite_00 1768 e402 59 ef HEX 59ef 1769 e404 ;vertical_shooting_score_10_digits 1770 e404 44 10 10 10* HEX 44101010540454041014 1771 e40e ;vertical_shooting_1up 1772 e40e 35 60 HEX 3560 1773 e410 1774 e500 ORG $E500,0 ; ************* 1775 e500 1776 e500 ;vertical_shooting_enemy01 1777 e500 5a af HEX 5aaf 1778 e502 ;vertical_shooting_enemy01_tallsprite_00 1779 e502 19 ec HEX 19ec 1780 e504 ;vertical_shooting_score_10_digits 1781 e504 88 20 08 08* HEX 8820080888a080088888 1782 e50e ;vertical_shooting_1up 1783 e50e 0d 80 HEX 0d80 1784 e510 1785 e600 ORG $E600,0 ; ************* 1786 e600 1787 e600 ;vertical_shooting_enemy01 1788 e600 50 07 HEX 5007 1789 e602 ;vertical_shooting_enemy01_tallsprite_00 1790 e602 09 e0 HEX 09e0 1791 e604 ;vertical_shooting_score_10_digits 1792 e604 88 a0 88 08* HEX 88a08808888080088888 1793 e60e ;vertical_shooting_1up 1794 e60e 0d 80 HEX 0d80 1795 e610 1796 e700 ORG $E700,0 ; ************* 1797 e700 1798 e700 ;vertical_shooting_enemy01 1799 e700 40 01 HEX 4001 1800 e702 ;vertical_shooting_enemy01_tallsprite_00 1801 e702 09 e0 HEX 09e0 1802 e704 ;vertical_shooting_score_10_digits 1803 e704 54 10 10 54* HEX 54101054445454541010 1804 e70e ;vertical_shooting_1up 1805 e70e 03 00 HEX 0300 1806 e710 1807 e710 1808 e710 ; Provided under the CC0 license. See the included LICENSE.txt for details. 1809 e710 1810 e710 ifnconst bankswitchmode 1811 e710 if ( * < $f000 ) 1812 f000 ORG $F000 1813 f000 endif 1814 f000 - else 1815 f000 - ifconst ROM128K 1816 f000 - if ( * < $f000 ) 1817 f000 - ORG $27000 1818 f000 - RORG $F000 1819 f000 - endif 1820 f000 - endif 1821 f000 - ifconst ROM144K 1822 f000 - if ( * < $f000 ) 1823 f000 - ORG $27000 1824 f000 - RORG $F000 1825 f000 - endif 1826 f000 - endif 1827 f000 - ifconst ROM256K 1828 f000 - if ( * < $f000 ) 1829 f000 - ORG $47000 1830 f000 - RORG $F000 1831 f000 - endif 1832 f000 - endif 1833 f000 - ifconst ROM272K 1834 f000 - if ( * < $f000 ) 1835 f000 - ORG $47000 1836 f000 - RORG $F000 1837 f000 - endif 1838 f000 - endif 1839 f000 - ifconst ROM512K 1840 f000 - if ( * < $f000 ) 1841 f000 - ORG $87000 1842 f000 - RORG $F000 1843 f000 - endif 1844 f000 - endif 1845 f000 - ifconst ROM528K 1846 f000 - if ( * < $f000 ) 1847 f000 - ORG $87000 1848 f000 - RORG $F000 1849 f000 - endif 1850 f000 - endif 1851 f000 endif 1852 f000 1853 f000 ; all of these "modules" have conditional clauses in them, so even though 1854 f000 ; they're always included here, they don't take up rom unless the user 1855 f000 ; explicitly enables support for the feature. 1856 f000 1857 f000 ifnconst included.7800vox.asm ------- FILE 7800vox.asm LEVEL 2 PASS 4 0 f000 include 7800vox.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 ; AtariVox 7800basic wrapper 4 f000 5 f000 ; to be called with 6 f000 ; A=# of bytes 7 f000 ; 8 f000 9 f000 - ifconst HSSUPPORT 10 f000 - 11 f000 -AVoxReadBytes 12 f000 - sta temp8 13 f000 - jsr i2c_startwrite 14 f000 - bcs eeprom_error 15 f000 - 16 f000 - lda HSVoxHi 17 f000 - jsr i2c_txbyte 18 f000 - lda HSVoxLo 19 f000 - jsr i2c_txbyte 20 f000 - jsr i2c_stopwrite 21 f000 - 22 f000 - jsr i2c_startread 23 f000 - 24 f000 - ldx #0 25 f000 -AVoxReadBytesLoop 26 f000 - jsr i2c_rxbyte 27 f000 - sta eeprombuffer,x 28 f000 - inx 29 f000 - cpx temp8 30 f000 - bne AVoxReadBytesLoop 31 f000 - jsr i2c_stopread 32 f000 - lda #0 33 f000 - rts 34 f000 - 35 f000 - ; to be called with 36 f000 - ; A=# of bytes 37 f000 - ; 38 f000 - 39 f000 -AVoxWriteBytes 40 f000 - sta temp8 41 f000 - jsr i2c_startwrite 42 f000 - bcs eeprom_error 43 f000 - 44 f000 - lda HSVoxHi 45 f000 - jsr i2c_txbyte 46 f000 - lda HSVoxLo 47 f000 - jsr i2c_txbyte 48 f000 - 49 f000 - ldx #$00 50 f000 -AVoxWriteBytesLoop 51 f000 - lda eeprombuffer,x 52 f000 - jsr i2c_txbyte 53 f000 - inx 54 f000 - cpx temp8 55 f000 - bne AVoxWriteBytesLoop 56 f000 - jsr i2c_stopwrite 57 f000 - 58 f000 - lda #0 59 f000 - rts 60 f000 - 61 f000 -eeprom_error 62 f000 - lda #$ff 63 f000 - rts 64 f000 - 65 f000 -AVoxDetect 66 f000 - 67 f000 - jsr i2c_startwrite 68 f000 - bcs eeprom_error 69 f000 - lda #$30 70 f000 - jsr i2c_txbyte 71 f000 - lda #$00 72 f000 - jsr i2c_txbyte 73 f000 - jsr i2c_stopwrite 74 f000 - rts 75 f000 - 76 f000 - include "i2c7800.inc" 77 f000 - I2C_SUBS temp9 78 f000 - 79 f000 endif 80 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1859 f000 endif 1860 f000 ifnconst included.pokeysound.asm ------- FILE pokeysound.asm LEVEL 2 PASS 4 0 f000 include pokeysound.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 4 f000 - ifconst pokeysupport 5 f000 - 6 f000 -pokeysoundmodulestart 7 f000 - 8 f000 -mutepokey 9 f000 - lda #0 10 f000 - ldy #7 11 f000 -mutepokeyloop 12 f000 - sta pokey1pointlo,y 13 f000 - sta (pokeybaselo),y 14 f000 - dey 15 f000 - bpl mutepokeyloop 16 f000 - rts 17 f000 - 18 f000 -checkpokeyplaying 19 f000 - ldx #6 20 f000 -checkpokeyplayingloop 21 f000 - lda pokey1pointlo,x 22 f000 - ora pokey1pointhi,x 23 f000 - beq pokeychannelinactive 24 f000 - jsr playpokeysfxA ; x=channel*2 25 f000 -pokeychannelinactive 26 f000 - dex 27 f000 - dex 28 f000 - bpl checkpokeyplayingloop 29 f000 - rts 30 f000 - 31 f000 -playpokeysfxA 32 f000 - txa 33 f000 - tay 34 f000 - lda pokey1tick,x 35 f000 - beq playpokeysfxAcont 36 f000 - sec 37 f000 - sbc #1 38 f000 - sta pokey1tick,x ; sound resolution is >1 frame, and we're mid-tock... 39 f000 - rts 40 f000 - 41 f000 -playpokeysfxAcont 42 f000 - lda pokey1frames,x ; set the frame countdown for this sound chunk 43 f000 - sta pokey1tick,x 44 f000 - 45 f000 - lda pokey1priority,x ; decrease the sound's priority if its non-zero 46 f000 - beq playpokeysfxAcont2 47 f000 - sec 48 f000 - sbc #1 49 f000 - sta pokey1priority,x 50 f000 -playpokeysfxAcont2 51 f000 - 52 f000 - ; *** FREQUENCY 53 f000 - lda (pokey1pointlo,x) 54 f000 - sta temp1 55 f000 - clc 56 f000 - adc pokey1offset,x ; take into account any pitch modification 57 f000 - sta (pokeybaselo),y ; PAUDF0,0 58 f000 - 59 f000 - ;advance the data pointer +1 60 f000 - inc pokey1pointlo,x 61 f000 - bne skippokeyhiinc1 62 f000 - inc pokey1pointhi,x 63 f000 -skippokeyhiinc1 64 f000 - 65 f000 - ; *** WAVE 66 f000 - lda (pokey1pointlo,x) 67 f000 - asl 68 f000 - asl 69 f000 - asl 70 f000 - asl ; x16 71 f000 - 72 f000 - ;advance the data pointer +1 73 f000 - inc pokey1pointlo,x 74 f000 - bne skippokeyhiinc2 75 f000 - inc pokey1pointhi,x 76 f000 -skippokeyhiinc2 77 f000 - 78 f000 - ora (pokey1pointlo,x) 79 f000 - iny 80 f000 - sta (pokeybaselo),y 81 f000 - 82 f000 - ora temp1 ; check if F|C|V=0 83 f000 - beq zeropokeypoint ; if so, we're at the end of the sound. 84 f000 - 85 f000 - ; advance the pointer +1, on to the next sound chunk 86 f000 - inc pokey1pointlo,x 87 f000 - bne skippokeyhiinc3 88 f000 - inc pokey1pointhi,x 89 f000 -skippokeyhiinc3 90 f000 - rts 91 f000 - 92 f000 -zeropokeypoint 93 f000 - sta pokey1pointlo,x 94 f000 - sta pokey1pointhi,x 95 f000 - sta pokey1priority,x 96 f000 - rts 97 f000 - 98 f000 -schedulepokeysfx 99 f000 - ldx #6 100 f000 -schedulepokeysfxloop 101 f000 - lda pokey1pointlo,x 102 f000 - ora pokey1pointhi,x 103 f000 - bne schedulespokeysearch 104 f000 - jmp schedulepokeyX ; we found an unused channel, so use it... 105 f000 -schedulespokeysearch 106 f000 - dex 107 f000 - dex 108 f000 - bpl schedulepokeysfxloop 109 f000 - 110 f000 - ; if we're here, all 4 channels are presently playing a sound... 111 f000 - ldy #1 112 f000 - lda (temp1),y ; peek at the priority of this sfx... 113 f000 - bne schedulepokeysfxcont1 114 f000 - rts ; ...and skip it if it's 0 priority 115 f000 -schedulepokeysfxcont1 116 f000 - 117 f000 - ; figure out which current sound has the lowest priority... 118 f000 - lda #0 119 f000 - sta temp8 120 f000 - lda pokey1priority 121 f000 - sta temp9 122 f000 - ldx #6 123 f000 -findlowprioritypokeyloop 124 f000 - lda pokey1priority,x 125 f000 - cmp temp9 126 f000 - bcs findlowprioritypokeyloopcontinue 127 f000 - sta temp9 128 f000 - stx temp8 129 f000 -findlowprioritypokeyloopcontinue 130 f000 - dex 131 f000 - dex 132 f000 - bne findlowprioritypokeyloop 133 f000 - ldx temp8 ; the low priority channel we'll interrupt 134 f000 - 135 f000 -schedulepokeyX 136 f000 - ;called with X=2*pokey channel to play on... 137 f000 - ldy #1 ; get priority and sound-resolution (in frames) 138 f000 - lda (temp1),y 139 f000 - sta pokey1priority,x 140 f000 - iny 141 f000 - lda (temp1),y 142 f000 - sta pokey1frames,x 143 f000 - 144 f000 - lda temp1 145 f000 - clc 146 f000 - adc #3 147 f000 - sta pokey1pointlo,x 148 f000 - lda temp2 149 f000 - adc #0 150 f000 - sta pokey1pointhi,x 151 f000 - lda temp3 152 f000 - sta pokey1offset,x 153 f000 - lda #0 154 f000 - sta pokey1tick,x 155 f000 - rts 156 f000 - 157 f000 - ; pokey detection routine. we check for pokey in the XBOARD/XM location, 158 f000 - ; and the standard $4000 location. 159 f000 - ; if pokey the pokey is present, this routine will reset it. 160 f000 - 161 f000 -detectpokeylocation 162 f000 - ;XBoard/XM... 163 f000 - ldx #2 164 f000 -detectpokeyloop 165 f000 - lda XCTRL1s 166 f000 - ora #%00010100 167 f000 - and POKEYXMMASK,x 168 f000 - sta XCTRL1s 169 f000 - sta XCTRL1 170 f000 - 171 f000 - lda POKEYCHECKLO,x 172 f000 - sta pokeybaselo 173 f000 - lda POKEYCHECKHI,x 174 f000 - sta pokeybasehi 175 f000 - jsr checkforpokey 176 f000 - lda pokeydetected 177 f000 - beq foundpokeychip 178 f000 - dex 179 f000 - bpl detectpokeyloop 180 f000 -foundpokeychip 181 f000 - eor #$ff ; invert state for 7800basic if...then test 182 f000 - sta pokeydetected 183 f000 - rts 184 f000 - 185 f000 -POKEYXMMASK 186 f000 - ; XM POKEY on XM POKEY off XM POKEY off 187 f000 - .byte %11111111, %11101111, %11101111 188 f000 - 189 f000 -POKEYCHECKLO 190 f000 - .byte <$0450, <$0450, <$4000 191 f000 -POKEYCHECKHI 192 f000 - .byte >$0450, >$0450, >$4000 193 f000 - 194 f000 -checkforpokey 195 f000 - ldy #$0f 196 f000 - lda #$00 197 f000 - sta pokeydetected ; start off by assuming pokey will be detected 198 f000 -resetpokeyregistersloop 199 f000 - sta (pokeybase),y 200 f000 - dey 201 f000 - bpl resetpokeyregistersloop 202 f000 - 203 f000 - ldy #PAUDCTL 204 f000 - sta (pokeybase),y 205 f000 - ldy #PSKCTL 206 f000 - sta (pokeybase),y 207 f000 - 208 f000 - ; let the dust settle... 209 f000 - nop 210 f000 - nop 211 f000 - nop 212 f000 - 213 f000 - lda #4 214 f000 - sta temp9 215 f000 -pokeycheckloop1 216 f000 - ; we're in reset, so the RANDOM register should read $ff... 217 f000 - ldy #PRANDOM 218 f000 - lda (pokeybase),y 219 f000 - cmp #$ff 220 f000 - bne nopokeydetected 221 f000 - dec temp9 222 f000 - bne pokeycheckloop1 223 f000 - 224 f000 - ; take pokey out of reset... 225 f000 - ldy #PSKCTL 226 f000 - lda #3 227 f000 - sta (pokeybase),y 228 f000 - ldy #PAUDCTL 229 f000 - lda #0 230 f000 - sta (pokeybase),y 231 f000 - 232 f000 - ; let the dust settle again... 233 f000 - nop 234 f000 - nop 235 f000 - nop 236 f000 - 237 f000 - lda #4 238 f000 - sta temp9 239 f000 -pokeycheckloop2 240 f000 - ; we're out of reset, so RANDOM should read non-$ff... 241 f000 - ldy #PRANDOM 242 f000 - lda (pokeybase),y 243 f000 - cmp #$ff 244 f000 - beq skippokeycheckreturn 245 f000 - rts 246 f000 -skippokeycheckreturn 247 f000 - dec temp9 248 f000 - bne pokeycheckloop2 249 f000 -nopokeydetected 250 f000 - dec pokeydetected ; pokeydetected=#$ff 251 f000 - rts 252 f000 - 253 f000 -pokeysoundmoduleend 254 f000 - 255 f000 - echo " pokeysound assembly: ",[(pokeysoundmoduleend-pokeysoundmodulestart)]d," bytes" 256 f000 - 257 f000 endif ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1862 f000 endif 1863 f000 ifnconst included.tracker.asm ------- FILE tracker.asm LEVEL 2 PASS 4 0 f000 include tracker.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 4 f000 - ifconst MUSICTRACKER 5 f000 - ; ** songtempo lists how many 256ths of a frame a 16th note lasts 6 f000 - ; ** the player operates on a 16th note grid. 7 f000 - 8 f000 -servicesongover 9 f000 - rts 10 f000 -servicesong 11 f000 - lda songtempo 12 f000 - beq servicesongover ; ** if song is off/paused then return 13 f000 -servicesongcontinue 14 f000 - lda sfxschedulelock 15 f000 - sta sfxschedulemissed 16 f000 - bne servicesongover 17 f000 - lda songtempo 18 f000 - clc 19 f000 - adc songtick ; add songtempo to songtick until it rolls over 20 f000 - sta songtick ; this is how we break away from 50/60Hz timing. 21 f000 - bcc servicesongover 22 f000 - ; ** if we're here a new 16th note has passed 23 f000 - ; ** check if a new note is due on any of the 4 channels 24 f000 -servicesongredo 25 f000 - ldx #3 26 f000 -checkchannelloop 27 f000 - dec songchannel1busywait,x 28 f000 - bpl carryoncheckingchannel 29 f000 - txa 30 f000 - pha ; save X for the loop 31 f000 - jsr processsongdata 32 f000 - pla ; restore X for the loop 33 f000 - tax 34 f000 -carryoncheckingchannel 35 f000 - dex 36 f000 - bpl checkchannelloop 37 f000 - lda inactivechannelcount 38 f000 - cmp #15 39 f000 - bne skipstopsong 40 f000 - lda songloops 41 f000 - bne doasongloop 42 f000 - ;lda #0 43 f000 - sta songtempo ; all channels are done. stop the song 44 f000 - rts 45 f000 -doasongloop 46 f000 - bmi skipsongloopadjust 47 f000 - dec songloops 48 f000 -skipsongloopadjust 49 f000 - jsr setsongchannels 50 f000 - jmp servicesongredo 51 f000 -skipstopsong 52 f000 - rts 53 f000 - 54 f000 -processsongdata 55 f000 - ; channel needs processing 56 f000 - ; X=channel # 57 f000 - 58 f000 - txa 59 f000 - clc 60 f000 - adc songchannel1stackdepth,x ; stack depth value will be 0, 4, or 8 61 f000 - tay 62 f000 - 63 f000 - 64 f000 - ; ** indirect x is cumbersome with mult-byte commands. 65 f000 - ; ** setup a pointer to the song data for indirect y addressing. 66 f000 - lda songchannel1layer1lo,y 67 f000 - sta songdatalo 68 f000 - lda songchannel1layer1hi,y 69 f000 - sta songdatahi 70 f000 - ora songdatalo 71 f000 - bne channelhasdata 72 f000 - ;channel data is pointing at $0000 73 f000 - lda #$7F 74 f000 - sta songchannel1busywait,x ; skip a bunch of notes 75 f000 -setchannelcountbits 76 f000 - lda channel2bits,x 77 f000 - ora inactivechannelcount 78 f000 - sta inactivechannelcount 79 f000 - rts 80 f000 -channelhasdata 81 f000 - 82 f000 - sty songstackindex 83 f000 - ldy #0 84 f000 - lda (songdatalo),y ; ** load in the next byte of song data, so we can decode it 85 f000 - cmp #$ff 86 f000 - bne carryoncheckingdatatype ; ** $ff=pattern end marker 87 f000 - jmp handlechannelEOD 88 f000 - 89 f000 -carryoncheckingdatatype 90 f000 - and #$F0 91 f000 - cmp #$C0 92 f000 - beq handlechannelrest ; 0000XXXX=rest 93 f000 - cmp #$F0 94 f000 - beq handlemultibytecommand 95 f000 - cmp #$D0 96 f000 - beq handlesemiup 97 f000 - cmp #$E0 98 f000 - beq handlesemidown 99 f000 -handlenotedata 100 f000 - ; ** TODO: note playing is a terrible choice for fall-through 101 f000 - 102 f000 - ; ** its simple note data, prepare arguments for schedulesfx 103 f000 - 104 f000 - ; ** set the note length 105 f000 - lda (songdatalo),y 106 f000 - and #$0F 107 f000 - sta songchannel1busywait,x 108 f000 - 109 f000 - ; ** load the instrument 110 f000 - lda songchannel1instrumentlo,x 111 f000 - sta sfxinstrumentlo 112 f000 - lda songchannel1instrumenthi,x 113 f000 - sta sfxinstrumenthi 114 f000 - 115 f000 - ; ** get the note, and transpose 116 f000 - lda (songdatalo),y 117 f000 - lsr 118 f000 - lsr 119 f000 - lsr 120 f000 - lsr 121 f000 - clc 122 f000 - adc songchannel1transpose,x ; ** add it to the transpose index 123 f000 - ; ** its up the respective SFX scheduler to handle and save the note data 124 f000 - sta sfxnoteindex 125 f000 - 126 f000 - lda #0 127 f000 - sta sfxpitchoffset 128 f000 - 129 f000 - jsr schedulesfx 130 f000 - 131 f000 - jmp advancethesongpointer1byte ; advance to the next data byte and exit 132 f000 - 133 f000 -handlechannelrest 134 f000 - ; ** set the note length 135 f000 - lda (songdatalo),y 136 f000 - and #$0F 137 f000 - sta songchannel1busywait,x 138 f000 - jmp advancethesongpointer1byte ; advance to the next data byte and exit 139 f000 - 140 f000 -handlesemiup 141 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 142 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 143 f000 - clc 144 f000 -handlesemidownentry 145 f000 - adc songchannel1transpose,x ; ** add it to the transpose index 146 f000 - sta songchannel1transpose,x 147 f000 - jsr advancethesongpointer1byte 148 f000 - jmp processsongdata ; semi doesn't have note length, so process the next data byte... 149 f000 - 150 f000 -handlesemidown 151 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 152 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 153 f000 - eor #$ff ; ** its easier if we negate it, and then add it instead. 154 f000 - sec 155 f000 - jmp handlesemidownentry 156 f000 - 157 f000 -handlemultibytecommand 158 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 159 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 160 f000 - cmp #$08 ; ** load new instrument? 161 f000 - bne nothandleinstrumentchange 162 f000 -handleinstrumentchange 163 f000 - iny 164 f000 - lda (songdatalo),y 165 f000 - sta songchannel1instrumentlo,x 166 f000 - iny 167 f000 - lda (songdatalo),y 168 f000 - sta songchannel1instrumenthi,x 169 f000 - lda #3 170 f000 - jsr advancethesongpointerNbytes ; advance 3 bytes 171 f000 - jmp processsongdata 172 f000 - 173 f000 -nothandleinstrumentchange 174 f000 - cmp #$09 ; ** absolute tempo change? 175 f000 - bne nothandletempochange 176 f000 - lda #0 177 f000 - sta songtempo 178 f000 -handlerelativetempochange 179 f000 - iny 180 f000 - lda (songdatalo),y 181 f000 - clc 182 f000 - adc songtempo 183 f000 - sta songtempo 184 f000 - lda #2 185 f000 - jsr advancethesongpointerNbytes ; advance 2 bytes 186 f000 - jmp processsongdata 187 f000 - 188 f000 -nothandletempochange 189 f000 - cmp #$0A ; ** relative tempo change?: 190 f000 - beq handlerelativetempochange 191 f000 - cmp #$0B ; ** octave/semi change? 192 f000 - beq handleoctavesemichange 193 f000 -handlepatterndata 194 f000 - ; ** if we're here its a pattern/loop "subroutine" 195 f000 - ; ** move the channel's "stack" pointer and populate the new stack level 196 f000 - 197 f000 - lda #4 198 f000 - clc 199 f000 - adc songchannel1stackdepth,x 200 f000 - sta songchannel1stackdepth,x ; stack depth value will be 0, 4, or 8 201 f000 - 202 f000 - stx inttemp6 ; about to invalidate x. save it. 203 f000 - lda songstackindex 204 f000 - adc #4 205 f000 - tax 206 f000 - 207 f000 - lda (songdatalo),y 208 f000 - and #$7 209 f000 - sta songchannel1layer1loops,x 210 f000 - iny 211 f000 - lda (songdatalo),y 212 f000 - sta songchannel1layer1lo,x 213 f000 - iny 214 f000 - lda (songdatalo),y 215 f000 - sta songchannel1layer1hi,x 216 f000 - 217 f000 - ldx inttemp6 ; restore x with the channel # 218 f000 - 219 f000 - ; ** advance will operate on the old stack level, since we didn't store the updated songstackindex... 220 f000 - lda #3 221 f000 - jsr advancethesongpointerNbytes ; advance 3 bytes 222 f000 - 223 f000 - ; ** ...but the new stack level will be correctly picked up when we process the next byte. 224 f000 - jmp processsongdata 225 f000 - 226 f000 -handlechannelEOD 227 f000 - ; ** check if there are loops remaining on the pattern 228 f000 - stx inttemp6 229 f000 - ldx songstackindex 230 f000 - dec songchannel1layer1loops,x 231 f000 - bmi handlechannelEODnoloop 232 f000 - ; ** loops are remaining. set the pattern pointer to the pattern start, which is contained after the EOD 233 f000 - iny 234 f000 - lda (songdatalo),y 235 f000 - sta songchannel1layer1lo,x 236 f000 - iny 237 f000 - lda (songdatalo),y 238 f000 - sta songchannel1layer1hi,x 239 f000 - ldx inttemp6 240 f000 - jmp processsongdata ; EOD handling doesn't have note length, so process the next data byte... 241 f000 - 242 f000 -handlechannelEODnoloop 243 f000 - ; this pattern/loop is done playing. "pop" the stack 244 f000 - ldx inttemp6 245 f000 - lda songchannel1stackdepth,x 246 f000 - beq handlerootchannelEOD 247 f000 - sec 248 f000 - sbc #4 249 f000 - sta songchannel1stackdepth,x 250 f000 - jmp processsongdata ; EOD handling doesn't have note length, so process the next data byte... 251 f000 - 252 f000 -handlerootchannelEOD 253 f000 - ; this channel is done. point it to $ff data so we no longer process this channel. 254 f000 - lda #0 255 f000 - sta songchannel1layer1lo,x 256 f000 - sta songchannel1layer1hi,x 257 f000 - sta songchannel1busywait,x 258 f000 - jmp setchannelcountbits 259 f000 - rts 260 f000 - 261 f000 -nothandlepatternchange 262 f000 -handleoctavesemichange 263 f000 - iny 264 f000 - lda (songdatalo),y 265 f000 - sta songchannel1transpose,x 266 f000 - lda #2 267 f000 - jsr advancethesongpointerNbytes ; advance 2 bytes 268 f000 - jmp processsongdata 269 f000 - 270 f000 -advancethesongpointer1byte 271 f000 - txa 272 f000 - ldx songstackindex 273 f000 - inc songchannel1layer1lo,x 274 f000 - bne skiphiadvancethesongpointer1byte 275 f000 - inc songchannel1layer1hi,x 276 f000 -skiphiadvancethesongpointer1byte 277 f000 - tax 278 f000 - rts 279 f000 - 280 f000 -advancethesongpointerNbytes 281 f000 - ; entered with A=# of byte to advance 282 f000 - stx inttemp6 283 f000 - ldx songstackindex 284 f000 - clc 285 f000 - adc songchannel1layer1lo,x 286 f000 - sta songchannel1layer1lo,x 287 f000 - lda #0 288 f000 - adc songchannel1layer1hi,x 289 f000 - sta songchannel1layer1hi,x 290 f000 - ldx inttemp6 291 f000 - rts 292 f000 - 293 f000 -clearsongmemory 294 f000 - lda #0 295 f000 - ldx #(songchannel4instrumenthi-songchannel1layer1lo) 296 f000 -clearsongmemoryloop1 297 f000 - sta songchannel1layer1lo,x 298 f000 - dex 299 f000 - bpl clearsongmemoryloop1 300 f000 - 301 f000 - ldx #(songchannel4stackdepth-songchannel1layer1loops) 302 f000 -clearsongmemoryloop2 303 f000 - sta songchannel1layer1loops,x 304 f000 - dex 305 f000 - bpl clearsongmemoryloop2 306 f000 - 307 f000 - lda #$ff 308 f000 - ldx #3 309 f000 -clearsongmemoryloop3 310 f000 - sta songchannel1busywait,x 311 f000 - dex 312 f000 - bpl clearsongmemoryloop3 313 f000 - rts 314 f000 - 315 f000 -setsongchannels 316 f000 - jsr clearsongmemory 317 f000 - ldy #7 318 f000 - ldx #3 319 f000 -setsongchannelsloop 320 f000 - lda (songpointerlo),y 321 f000 - sta songchannel1layer1hi,x 322 f000 - dey 323 f000 - lda (songpointerlo),y 324 f000 - sta songchannel1layer1lo,x 325 f000 - dex 326 f000 - dey 327 f000 - bpl setsongchannelsloop 328 f000 - rts 329 f000 - 330 f000 -channel2bits 331 f000 - .byte 1,2,4,8 332 f000 - 333 f000 -tiatrackeroctavenotes 334 f000 - ifconst BUZZBASS 335 f000 -LOWC = 15 336 f000 - else 337 f000 -LOWC = 14 338 f000 - endif 339 f000 - ; ****** ELECTRONIC (0 to 11) 340 f000 - .byte LOWC,20 ; c0 16.1Hz 341 f000 - .byte LOWC,18 ; c#0 342 f000 - .byte LOWC,17 ; d0 343 f000 - .byte LOWC,16 ; d#0 344 f000 - .byte LOWC,15 ; e0 345 f000 - .byte LOWC,14 ; f0 (very off) 346 f000 - .byte LOWC,14 ; f#0 347 f000 - .byte LOWC,13 ; g0 348 f000 - .byte LOWC,12 ; g#0 349 f000 - .byte LOWC,11 ; a0 350 f000 - .byte LOWC,11 ; a#0 (very off) 351 f000 - .byte LOWC,10 ; b0 30.7Hz 352 f000 - 353 f000 - ; ****** SLIGHTLY BUZZY (12 to 23) 354 f000 - .byte 6,30 ; c1 32.7Hz 355 f000 - .byte 6,28 ; c#1 356 f000 - .byte 6,27 ; d1 357 f000 - .byte 6,25 ; d#1 358 f000 - .byte 6,24 ; e1 359 f000 - .byte 6,22 ; f1 360 f000 - .byte 6,21 ; f#1 361 f000 - .byte 6,20 ; g1 362 f000 - .byte 6,18 ; g#1 363 f000 - .byte 6,17 ; a1 364 f000 - .byte 6,16 ; a#1 365 f000 - .byte 6,15 ; b1 63.4Hz 366 f000 - 367 f000 - ; ****** BUZZY (24 to 39) 368 f000 - .byte 1,31 ; c2 65.5 369 f000 - .byte 1,30 ; c#2 67.6 370 f000 - .byte 1,27 ; d2 72.3 371 f000 - .byte 1,26 ; d#2 77.6 372 f000 - .byte 1,24 ; e2 373 f000 - .byte 1,23 ; f2 374 f000 - .byte 1,22 ; f#2 375 f000 - .byte 1,20 ; g2 376 f000 - .byte 1,19 ; g#2 377 f000 - .byte 1,18 ; a2 378 f000 - .byte 1,17 ; a#2 379 f000 - .byte 1,16 ; b2 380 f000 - .byte 1,15 ; c3 126.8Hz 381 f000 - .byte 1,14 ; c#3 382 f000 - .byte 1,13 ; d3 149.7Hz 383 f000 - .byte 1,12 ; d#3 161.2Hz (very off) 384 f000 - ; ****** PURE (40 to 71) - best key is A3 Major 385 f000 - .byte 12,31 ; e3 163.8Hz 386 f000 - .byte 12,29 ; f3 387 f000 - .byte 12,28 ; f#3 388 f000 - .byte 12,26 ; g3 389 f000 - .byte 12,24 ; g#3 390 f000 - .byte 12,23 ; a3 songs in key of A benefit from Perceptual Tuning 391 f000 - .byte 12,22 ; a#3 392 f000 - .byte 12,20 ; b3 393 f000 - .byte 12,19 ; c4 (middle C) 394 f000 - .byte 12,18 ; c#4 395 f000 - .byte 12,17 ; d4 396 f000 - .byte 12,16 ; d#4 397 f000 - .byte 12,15 ; e4 398 f000 - .byte 12,14 ; f4 399 f000 - .byte 12,13 ; f#4 400 f000 - .byte 12,12 ; g4 (very off) 401 f000 - .byte 12,12 ; g#4 402 f000 - .byte 12,11 ; a4 403 f000 - .byte 12,10 ; a#4 404 f000 - .byte 4,31 ; b4 405 f000 - .byte 4,29 ; c5 406 f000 - .byte 4,28 ; c#5 407 f000 - .byte 4,26 ; d5 408 f000 - .byte 4,24 ; d#5 409 f000 - .byte 4,23 ; e5 410 f000 - .byte 4,22 ; f5 411 f000 - .byte 4,20 ; f#5 412 f000 - .byte 4,19 ; g5 413 f000 - .byte 4,18 ; g#5 414 f000 - .byte 4,17 ; a5 415 f000 - .byte 4,16 ; a#5 416 f000 - .byte 4,15 ; b5 417 f000 - 418 f000 - ; ****** TUNED WIND (72 to 83) 419 f000 - .byte 8,30 ; c 420 f000 - .byte 8,28 ; c# 421 f000 - .byte 8,27 ; d 422 f000 - .byte 8,25 ; d# 423 f000 - .byte 8,24 ; e 424 f000 - .byte 8,22 ; f 425 f000 - .byte 8,21 ; f# 426 f000 - .byte 8,20 ; g 427 f000 - .byte 8,18 ; g# 428 f000 - .byte 8,17 ; a 429 f000 - .byte 8,16 ; a# 430 f000 - .byte 8,15 ; b 431 f000 - 432 f000 - include "tiadrumkit.asm" 433 f000 - 434 f000 endif ;MUSICTRACKER ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1865 f000 endif 1866 f000 ifnconst included.hiscore.asm ------- FILE hiscore.asm LEVEL 2 PASS 4 0 f000 include hiscore.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 - ifconst HSSUPPORT 4 f000 -detectatarivoxeeprom 5 f000 -hiscoremodulestart 6 f000 - ; do a test to see if atarivox eeprom can be accessed, and save results 7 f000 - jsr AVoxDetect 8 f000 - eor #$ff ; invert for easy 7800basic if...then logic 9 f000 - sta avoxdetected 10 f000 - lda #$0 11 f000 - sta SWACNT 12 f000 - lda avoxdetected 13 f000 - rts 14 f000 - 15 f000 -detecthsc 16 f000 - ; check for the HSC ROM signature... 17 f000 - lda XCTRL1s 18 f000 - ora #%00001100 19 f000 - sta XCTRL1s 20 f000 - sta XCTRL1 21 f000 - lda $3900 22 f000 - cmp #$C6 23 f000 - bne detecthscfail 24 f000 - lda $3904 25 f000 - cmp #$FE 26 f000 - bne detecthscfail 27 f000 - ; check if it's initialized... 28 f000 - ldy #0 29 f000 - lda #$ff 30 f000 -checkhscinit 31 f000 - and $1000,y 32 f000 - dey 33 f000 - bpl checkhscinit 34 f000 - cmp #$ff 35 f000 - bne hscisalreadyinit 36 f000 - ; if we're here, we need to do a minimal HSC init... 37 f000 - ldy #$28 38 f000 -hscinitloop1 39 f000 - lda hscheader,y 40 f000 - sta $1000,y 41 f000 - dey 42 f000 - bpl hscinitloop1 43 f000 - ldy #$89 44 f000 - lda #$7F 45 f000 -hscinitloop2 46 f000 - sta $10B3,y 47 f000 - dey 48 f000 - cpy #$ff 49 f000 - bne hscinitloop2 50 f000 -hscisalreadyinit 51 f000 - lda #$ff 52 f000 - rts 53 f000 -hscheader 54 f000 - .byte $00,$00,$68,$83,$AA,$55,$9C,$FF,$07,$12,$02,$1F,$00,$00,$00,$00 55 f000 - .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 56 f000 - .byte $00,$00,$00,$00,$00,$00,$00,$00,$03 57 f000 -detecthscfail 58 f000 - lda XCTRL1s 59 f000 - and #%11110111 60 f000 - sta XCTRL1s 61 f000 - lda #0 62 f000 - rts 63 f000 endif ; HSSUPPORT 64 f000 65 f000 - ifconst HSSUPPORT 66 f000 - ifnconst hiscorefont 67 f000 - echo "" 68 f000 - echo "WARNING: High score support is enabled, but the hiscorefont.png was" 69 f000 - echo " NOT imported with incgraphic. The high score display code" 70 f000 - echo " has been omitted from this build." 71 f000 - echo "" 72 f000 - else 73 f000 -hscdrawscreen 74 f000 - 75 f000 - ; we use 20 lines on a 24 line display 76 f000 - ; HSSCOREY to dynamically centers based on 77 f000 - ;HSSCOREY = 0 78 f000 -HSSCOREY = ((WZONECOUNT*WZONEHEIGHT/8)-22)/2 79 f000 -HSCURSORY = ((HSSCOREY/(WZONEHEIGHT/8))*WZONEHEIGHT) 80 f000 - 81 f000 - ifconst HSSCORESIZE 82 f000 -SCORESIZE = HSSCORESIZE 83 f000 - else 84 f000 -SCORESIZE = 6 85 f000 - endif 86 f000 - 87 f000 - ;save shadow registers for later return... 88 f000 - lda sCTRL 89 f000 - sta ssCTRL 90 f000 - lda sCHARBASE 91 f000 - sta ssCHARBASE 92 f000 - lda #$60 93 f000 - sta charactermode 94 f000 - jsr drawwait 95 f000 - jsr blacken320colors 96 f000 - jsr clearscreen 97 f000 - 98 f000 - ;set the character base to the HSC font 99 f000 - lda #>hiscorefont 100 f000 - sta CHARBASE 101 f000 - sta sCHARBASE 102 f000 - lda #%01000011 ;Enable DMA, mode=320A 103 f000 - sta CTRL 104 f000 - sta sCTRL 105 f000 - 106 f000 - lda #60 107 f000 - sta hsjoydebounce 108 f000 - 109 f000 - lda #0 110 f000 - sta hscursorx 111 f000 - sta framecounter 112 f000 - ifnconst HSCOLORCHASESTART 113 f000 - lda #$8D ; default is blue. why not? 114 f000 - else 115 f000 - lda #HSCOLORCHASESTART 116 f000 - endif 117 f000 - sta hscolorchaseindex 118 f000 - 119 f000 - lda #$0F 120 f000 - sta P0C2 ; base text is white 121 f000 - 122 f000 - jsr hschasecolors 123 f000 - ; ** plot all of the initials 124 f000 - lda #HSRAMInitials 127 f000 - sta temp2 ; charmaphi 128 f000 - lda #32+29 ; palette=0-29 | 32-(width=3) 129 f000 - sta temp3 ; palette/width 130 f000 - lda #104 131 f000 - sta temp4 ; X 132 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 133 f000 - sta temp5 ; Y 134 f000 -plothsinitialsloop 135 f000 - jsr plotcharacters 136 f000 - clc 137 f000 - lda temp3 138 f000 - adc #32 139 f000 - sta temp3 140 f000 - inc temp5 141 f000 - if WZONEHEIGHT = 8 142 f000 - inc temp5 143 f000 - endif 144 f000 - clc 145 f000 - lda #3 146 f000 - adc temp1 147 f000 - sta temp1 148 f000 - cmp #(<(HSRAMInitials+15)) 149 f000 - bcc plothsinitialsloop 150 f000 - 151 f000 - ifconst HSGAMENAMELEN 152 f000 - ;plot the game name... 153 f000 - lda #HSGAMENAMEtable 156 f000 - sta temp2 ; charmaphi 157 f000 - lda #(32-HSGAMENAMELEN) ; palette=0*29 | 32-(width=3) 158 f000 - sta temp3 ; palette/width 159 f000 - lda #(80-(HSGAMENAMELEN*2)) 160 f000 - sta temp4 ; X 161 f000 - lda #((HSSCOREY+0)/(WZONEHEIGHT/8)) 162 f000 - sta temp5 ; Y 163 f000 - jsr plotcharacters 164 f000 - endif ; HSGAMENAMELEN 165 f000 - 166 f000 - ;plot "difficulty"... 167 f000 - ldy gamedifficulty 168 f000 - ifnconst HSNOLEVELNAMES 169 f000 - lda highscoredifficultytextlo,y 170 f000 - sta temp1 171 f000 - lda highscoredifficultytexthi,y 172 f000 - sta temp2 173 f000 - sec 174 f000 - lda #32 175 f000 - sbc highscoredifficultytextlen,y 176 f000 - sta temp3 ; palette/width 177 f000 - sec 178 f000 - lda #40 179 f000 - sbc highscoredifficultytextlen,y 180 f000 - asl 181 f000 - sta temp4 ; X 182 f000 - else 183 f000 - lda #HSHIGHSCOREStext 186 f000 - sta temp2 ; charmaphi 187 f000 - lda #(32-11) ; palette=0*29 | 32-(width=3) 188 f000 - sta temp3 ; palette/width 189 f000 - lda #(80-(11*2)) 190 f000 - sta temp4 ; X 191 f000 - endif ; HSNOLEVELNAMES 192 f000 - 193 f000 - lda #((HSSCOREY+2)/(WZONEHEIGHT/8)) 194 f000 - sta temp5 ; Y 195 f000 - jsr plotcharacters 196 f000 - ldy hsdisplaymode ; 0=attact mode, 1=player eval, 2=player 1 eval, 3=player 2 player eval 197 f000 - bne carronwithscoreevaluation 198 f000 - jmp donoscoreevaluation 199 f000 -carronwithscoreevaluation 200 f000 - dey 201 f000 - lda highscorelabeltextlo,y 202 f000 - sta temp1 203 f000 - lda highscorelabeltexthi,y 204 f000 - sta temp2 205 f000 - sec 206 f000 - lda #(32-15) ; palette=0*29 | 32-(width=3) 207 f000 - sta temp3 ; palette/width 208 f000 - lda highscorelabeladjust1,y 209 f000 - sta temp4 ; X 210 f000 - lda #((HSSCOREY+18)/(WZONEHEIGHT/8)) 211 f000 - sta temp5 ; Y 212 f000 - jsr plotcharacters 213 f000 - 214 f000 - ldy hsdisplaymode ; 0=attact mode, 1=player eval, 2=player 1 eval, 3=player 2 player eval 215 f000 - dey 216 f000 - ;plot the current player score... 217 f000 - lda #(32-SCORESIZE) ; palette=0*32 218 f000 - sta temp3 ; palette/width 219 f000 - lda highscorelabeladjust2,y 220 f000 - sta temp4 ; X 221 f000 - lda #((HSSCOREY+18)/(WZONEHEIGHT/8)) 222 f000 - sta temp5 ; Y 223 f000 - 224 f000 - lda scorevarlo,y 225 f000 - sta temp7 ; score variable lo 226 f000 - lda scorevarhi,y 227 f000 - sta temp8 ; score variable hi 228 f000 - 229 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 230 f000 - sta temp9 231 f000 - 232 f000 - lda #<(hiscorefont+33) ; +33 to get to '0' character 233 f000 - sta temp1 ; charmaplo 234 f000 - lda #>(hiscorefont+33) 235 f000 - sta temp2 ; charmaphi 236 f000 - lda #SCORESIZE 237 f000 - sta temp6 238 f000 - ifnconst DOUBLEWIDE 239 f000 - jsr plotvalue 240 f000 - else 241 f000 - jsr plotvaluedw 242 f000 - endif 243 f000 - 244 f000 -USED_PLOTVALUE = 1 ; ensure that plotvalue gets compiled in 245 f000 - 246 f000 - ifconst HSGAMERANKS 247 f000 - 248 f000 - ldx #$ff ; start at 0 after the inx... 249 f000 -comparescore2rankloop 250 f000 - inx 251 f000 - ldy #0 252 f000 - lda rankvalue_0,x 253 f000 - cmp (temp7),y 254 f000 - bcc score2rankloopdone 255 f000 - bne comparescore2rankloop 256 f000 - iny 257 f000 - lda rankvalue_1,x 258 f000 - cmp (temp7),y 259 f000 - bcc score2rankloopdone 260 f000 - bne comparescore2rankloop 261 f000 - iny 262 f000 - lda (temp7),y 263 f000 - cmp rankvalue_2,x 264 f000 - bcs score2rankloopdone 265 f000 - jmp comparescore2rankloop 266 f000 -score2rankloopdone 267 f000 - stx hsnewscorerank 268 f000 - 269 f000 - lda ranklabello,x 270 f000 - sta temp1 271 f000 - lda ranklabelhi,x 272 f000 - sta temp2 273 f000 - sec 274 f000 - lda #32 ; palette=0*29 | 32-(width=3) 275 f000 - sbc ranklabellengths,x 276 f000 - sta temp3 ; palette/width 277 f000 - sec 278 f000 - lda #(40+6) 279 f000 - sbc ranklabellengths,x 280 f000 - asl 281 f000 - sta temp4 ; X 282 f000 - lda #((HSSCOREY+20)/(WZONEHEIGHT/8)) 283 f000 - sta temp5 ; Y 284 f000 - jsr plotcharacters 285 f000 - 286 f000 - ldx hsnewscorerank 287 f000 - 288 f000 - lda #highscoreranklabel 291 f000 - sta temp2 292 f000 - 293 f000 - lda #(32-5) ; palette=0*29 | 32-(width=3) 294 f000 - sta temp3 ; palette/width 295 f000 - lda #(40-6) 296 f000 - sec 297 f000 - sbc ranklabellengths,x 298 f000 - asl 299 f000 - sta temp4 ; X 300 f000 - lda #((HSSCOREY+20)/(WZONEHEIGHT/8)) 301 f000 - sta temp5 ; Y 302 f000 - jsr plotcharacters 303 f000 - endif 304 f000 - 305 f000 - 306 f000 - ; ** which line did this player beat? 307 f000 - lda #$ff 308 f000 - sta hsnewscoreline 309 f000 - ldx #$fd 310 f000 -comparescoreadd2x 311 f000 - inx 312 f000 -comparescoreadd1x 313 f000 - inx 314 f000 -comparescore2lineloop 315 f000 - inc hsnewscoreline 316 f000 - inx ; initialrun, x=0 317 f000 - cpx #15 318 f000 - beq nohighscoreforyou 319 f000 - ldy #0 320 f000 - lda HSRAMScores,x 321 f000 - cmp (temp7),y ; first score digit 322 f000 - bcc score2lineloopdonedel1x 323 f000 - bne comparescoreadd2x 324 f000 - iny 325 f000 - inx 326 f000 - lda HSRAMScores,x 327 f000 - cmp (temp7),y 328 f000 - bcc score2lineloopdonedel2x 329 f000 - bne comparescoreadd1x 330 f000 - iny 331 f000 - inx 332 f000 - lda (temp7),y 333 f000 - cmp HSRAMScores,x 334 f000 - bcs score2lineloopdonedel3x 335 f000 - jmp comparescore2lineloop 336 f000 -nohighscoreforyou 337 f000 - lda #$ff 338 f000 - sta hsnewscoreline 339 f000 - sta countdownseconds 340 f000 - jmp donoscoreevaluation 341 f000 -score2lineloopdonedel3x 342 f000 - dex 343 f000 -score2lineloopdonedel2x 344 f000 - dex 345 f000 -score2lineloopdonedel1x 346 f000 - dex 347 f000 - 348 f000 - ; 0 1 2 349 f000 - ; 3 4 5 350 f000 - ; 6 7 8 351 f000 - ; 9 0 1 352 f000 - ; 2 3 4 353 f000 - 354 f000 - stx temp9 355 f000 - cpx #11 356 f000 - beq postsortscoresuploop 357 f000 - ldx #11 358 f000 -sortscoresuploop 359 f000 - lda HSRAMScores,x 360 f000 - sta HSRAMScores+3,x 361 f000 - lda HSRAMInitials,x 362 f000 - sta HSRAMInitials+3,x 363 f000 - dex 364 f000 - cpx temp9 365 f000 - bne sortscoresuploop 366 f000 -postsortscoresuploop 367 f000 - 368 f000 - ;stick the score and cleared initials in the slot... 369 f000 - inx 370 f000 - ldy #0 371 f000 - sty hsinitialhold 372 f000 - lda (temp7),y 373 f000 - sta HSRAMScores,x 374 f000 - iny 375 f000 - lda (temp7),y 376 f000 - sta HSRAMScores+1,x 377 f000 - iny 378 f000 - lda (temp7),y 379 f000 - sta HSRAMScores+2,x 380 f000 - lda #0 381 f000 - sta HSRAMInitials,x 382 f000 - lda #29 383 f000 - sta HSRAMInitials+1,x 384 f000 - sta HSRAMInitials+2,x 385 f000 - 386 f000 - stx hsinitialpos 387 f000 - 388 f000 - ifconst vox_highscore 389 f000 - lda <#vox_highscore 390 f000 - sta speech_addr 391 f000 - lda >#vox_highscore 392 f000 - sta speech_addr+1 393 f000 - endif 394 f000 - ifconst sfx_highscore 395 f000 - lda <#sfx_highscore 396 f000 - sta temp1 397 f000 - lda >#sfx_highscore 398 f000 - sta temp2 399 f000 - lda #0 400 f000 - sta temp3 401 f000 - jsr schedulesfx 402 f000 - endif 403 f000 - ifconst songdatastart_song_highscore 404 f000 - lda #songchanneltable_song_highscore 407 f000 - sta songpointerhi 408 f000 - lda #73 409 f000 - sta songtempo 410 f000 - jsr setsongchannels 411 f000 - endif 412 f000 - 413 f000 - 414 f000 -donoscoreevaluation 415 f000 - 416 f000 - lda #(32+(32-SCORESIZE)) ; palette=0*32 | 32-(width=6) 417 f000 - sta temp3 ; palette/width 418 f000 - lda #(72+(4*(6-SCORESIZE))) 419 f000 - sta temp4 ; X 420 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 421 f000 - sta temp5 ; Y 422 f000 - lda #HSRAMScores 425 f000 - sta temp8 ; score variable hi 426 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 427 f000 - sta temp9 428 f000 -plothsscoresloop 429 f000 - lda #<(hiscorefont+33) ; +33 to get to '0' character 430 f000 - sta temp1 ; charmaplo 431 f000 - lda #>(hiscorefont+33) 432 f000 - sta temp2 ; charmaphi 433 f000 - lda #6 434 f000 - sta temp6 435 f000 - ifnconst DOUBLEWIDE 436 f000 - jsr plotvalue 437 f000 - else 438 f000 - jsr plotvaluedw 439 f000 - endif 440 f000 - clc 441 f000 - lda temp3 442 f000 - adc #32 443 f000 - sta temp3 444 f000 - inc temp5 445 f000 - if WZONEHEIGHT = 8 446 f000 - inc temp5 447 f000 - endif 448 f000 - clc 449 f000 - lda #3 450 f000 - adc temp7 451 f000 - sta temp7 452 f000 - cmp #(<(HSRAMScores+15)) 453 f000 - bcc plothsscoresloop 454 f000 -plothsindex 455 f000 - lda #32+31 ; palette=0*32 | 32-(width=1) 456 f000 - sta temp3 ; palette/width 457 f000 - lda #44 458 f000 - sta temp4 ; X 459 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 460 f000 - sta temp5 ; Y 461 f000 - lda #hsgameslotnumbers 464 f000 - sta temp8 ; score variable hi 465 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 466 f000 - sta temp9 467 f000 -plothsindexloop 468 f000 - lda #<(hiscorefont+33) 469 f000 - sta temp1 ; charmaplo 470 f000 - lda #>(hiscorefont+33) 471 f000 - sta temp2 ; charmaphi 472 f000 - lda #1 473 f000 - sta temp6 ; number of characters 474 f000 - ifnconst DOUBLEWIDE 475 f000 - jsr plotvalue 476 f000 - else 477 f000 - jsr plotvaluedw 478 f000 - endif 479 f000 - clc 480 f000 - lda temp3 481 f000 - adc #32 482 f000 - sta temp3 483 f000 - inc temp5 484 f000 - if WZONEHEIGHT = 8 485 f000 - inc temp5 486 f000 - endif 487 f000 - inc temp7 488 f000 - lda temp7 489 f000 - cmp #(<(hsgameslotnumbers+5)) 490 f000 - bcc plothsindexloop 491 f000 - 492 f000 - jsr savescreen 493 f000 - ifnconst HSSECONDS 494 f000 - lda #6 495 f000 - else 496 f000 - lda #HSSECONDS 497 f000 - endif 498 f000 - 499 f000 - sta countdownseconds 500 f000 - 501 f000 -keepdisplayinghs 502 f000 - jsr restorescreen 503 f000 - 504 f000 - jsr setuphsinpt1 505 f000 - 506 f000 - lda hsnewscoreline 507 f000 - bpl carryonkeepdisplayinghs 508 f000 - jmp skipenterscorecontrol 509 f000 -carryonkeepdisplayinghs 510 f000 - 511 f000 - 512 f000 - ifnconst HSSECONDS 513 f000 - lda #6 514 f000 - else 515 f000 - lda #HSSECONDS 516 f000 - endif 517 f000 - 518 f000 - sta countdownseconds 519 f000 - 520 f000 - ;plot the "cursor" initial sprite... 521 f000 - lda hsinitialhold 522 f000 - 523 f000 - sta temp1 524 f000 - lda #>(hiscorefont+32) 525 f000 - sta temp2 526 f000 - lda #31 ; palette=0*32 | 32-(width=1) 527 f000 - sta temp3 ; palette/width 528 f000 - lda hscursorx 529 f000 - asl 530 f000 - asl 531 f000 - clc 532 f000 - adc #104 533 f000 - sta temp4 ; X 534 f000 - lda hsnewscoreline 535 f000 - asl 536 f000 - asl 537 f000 - asl 538 f000 - asl 539 f000 - adc #((3*16)+HSCURSORY) 540 f000 - sta temp5 ; Y 541 f000 - lda #%01000000 542 f000 - sta temp6 543 f000 - jsr plotsprite 544 f000 - 545 f000 - ldx hscursorx 546 f000 - ldy hsdisplaymode 547 f000 - lda SWCHA 548 f000 - cpy #3 549 f000 - bne hsskipadjustjoystick1 550 f000 - asl 551 f000 - asl 552 f000 - asl 553 f000 - asl 554 f000 -hsskipadjustjoystick1 555 f000 - sta hsswcha 556 f000 - and #%00110000 557 f000 - cmp #%00110000 558 f000 - beq hsjoystickskipped 559 f000 - lda hsjoydebounce 560 f000 - beq hsdontdebounce 561 f000 - jmp hspostjoystick 562 f000 -hsdontdebounce 563 f000 - ldx #1 ; small tick sound 564 f000 - jsr playhssfx 565 f000 - lda hsswcha 566 f000 - and #%00110000 567 f000 - ldx hscursorx 568 f000 - cmp #%00100000 ; check down 569 f000 - bne hsjoycheckup 570 f000 - ldy hsinitialhold 571 f000 - cpx #0 572 f000 - bne skipavoid31_1 573 f000 - cpy #0 ; if we're about to change to the <- char (#31) then double-decrement to skip over it 574 f000 - bne skipavoid31_1 575 f000 - dey 576 f000 -skipavoid31_1 577 f000 - dey 578 f000 - jmp hssetdebounce 579 f000 -hsjoycheckup 580 f000 - cmp #%00010000 ; check up 581 f000 - bne hsjoystickskipped 582 f000 - ldy hsinitialhold 583 f000 - cpx #0 584 f000 - bne skipavoid31_2 585 f000 - cpy #30 ; if we're about to change to the <- char (#31) then double-increment to skip over it 586 f000 - bne skipavoid31_2 587 f000 - iny 588 f000 -skipavoid31_2 589 f000 - iny 590 f000 -hssetdebounce 591 f000 - tya 592 f000 - and #31 593 f000 - sta hsinitialhold 594 f000 - lda #15 595 f000 - sta hsjoydebounce 596 f000 - bne hspostjoystick 597 f000 -hsjoystickskipped 598 f000 - ; check the fire button only when the stick isn't engaged 599 f000 - lda hsinpt1 600 f000 - bpl hsbuttonskipped 601 f000 - lda hsjoydebounce 602 f000 - beq hsfiredontdebounce 603 f000 - bne hspostjoystick 604 f000 -hsfiredontdebounce 605 f000 - lda hsinitialhold 606 f000 - cmp #31 607 f000 - beq hsmovecursorback 608 f000 - inc hscursorx 609 f000 - inc hsinitialpos 610 f000 - lda hscursorx 611 f000 - cmp #3 612 f000 - bne skiphsentryisdone 613 f000 - lda #0 614 f000 - sta framecounter 615 f000 - lda #$ff 616 f000 - sta hsnewscoreline 617 f000 - dec hsinitialpos 618 f000 - bne skiphsentryisdone 619 f000 -hsmovecursorback 620 f000 - lda hscursorx 621 f000 - beq skiphsmovecursorback 622 f000 - lda #29 623 f000 - ldx hsinitialpos 624 f000 - sta HSRAMInitials,x 625 f000 - dec hsinitialpos 626 f000 - dec hscursorx 627 f000 - dex 628 f000 - lda HSRAMInitials,x 629 f000 - sta hsinitialhold 630 f000 -skiphsmovecursorback 631 f000 -skiphsentryisdone 632 f000 - ldx #0 633 f000 - jsr playhssfx 634 f000 - lda #20 635 f000 - sta hsjoydebounce 636 f000 - bne hspostjoystick 637 f000 - 638 f000 -hsbuttonskipped 639 f000 - lda #0 640 f000 - sta hsjoydebounce 641 f000 -hspostjoystick 642 f000 - 643 f000 - ldx hsinitialpos 644 f000 - lda hsinitialhold 645 f000 - sta HSRAMInitials,x 646 f000 - 647 f000 - jmp skiphschasecolors 648 f000 - 649 f000 -skipenterscorecontrol 650 f000 - jsr hschasecolors 651 f000 - jsr setuphsinpt1 652 f000 - lda hsjoydebounce 653 f000 - bne skiphschasecolors 654 f000 - lda hsinpt1 655 f000 - bmi returnfromhs 656 f000 -skiphschasecolors 657 f000 - 658 f000 - jsr drawscreen 659 f000 - 660 f000 - lda countdownseconds 661 f000 - beq returnfromhs 662 f000 - jmp keepdisplayinghs 663 f000 -returnfromhs 664 f000 - 665 f000 - ifconst songdatastart_song_highscore 666 f000 - lda hsdisplaymode 667 f000 - beq skipclearHSCsong 668 f000 - lda #0 669 f000 - sta songtempo 670 f000 -skipclearHSCsong 671 f000 - endif 672 f000 - jsr drawwait 673 f000 - jsr clearscreen 674 f000 - lda #0 675 f000 - ldy #7 676 f000 - jsr blacken320colors 677 f000 - lda ssCTRL 678 f000 - sta sCTRL 679 f000 - lda ssCHARBASE 680 f000 - sta sCHARBASE 681 f000 - rts 682 f000 - 683 f000 -setuphsinpt1 684 f000 - lda #$ff 685 f000 - sta hsinpt1 686 f000 - lda hsjoydebounce 687 f000 - beq skipdebounceadjust 688 f000 - dec hsjoydebounce 689 f000 - bne skipstorefirebuttonstatus 690 f000 -skipdebounceadjust 691 f000 - ldx hsdisplaymode 692 f000 - cpx #3 693 f000 - bne hsskipadjustjoyfire1 694 f000 - lda sINPT3 695 f000 - jmp hsskipadjustjoyfire1done 696 f000 -hsskipadjustjoyfire1 697 f000 - lda sINPT1 698 f000 -hsskipadjustjoyfire1done 699 f000 - sta hsinpt1 700 f000 -skipstorefirebuttonstatus 701 f000 - rts 702 f000 - 703 f000 -blacken320colors 704 f000 - ldy #7 705 f000 -blacken320colorsloop 706 f000 - sta P0C2,y 707 f000 - dey 708 f000 - bpl blacken320colorsloop 709 f000 - rts 710 f000 - 711 f000 -hschasecolors 712 f000 - lda framecounter 713 f000 - and #3 714 f000 - bne hschasecolorsreturn 715 f000 - inc hscolorchaseindex 716 f000 - lda hscolorchaseindex 717 f000 - 718 f000 - sta P5C2 719 f000 - sbc #$02 720 f000 - sta P4C2 721 f000 - sbc #$02 722 f000 - sta P3C2 723 f000 - sbc #$02 724 f000 - sta P2C2 725 f000 - sbc #$02 726 f000 - sta P1C2 727 f000 -hschasecolorsreturn 728 f000 - rts 729 f000 - 730 f000 -playhssfx 731 f000 - lda hssfx_lo,x 732 f000 - sta temp1 733 f000 - lda hssfx_hi,x 734 f000 - sta temp2 735 f000 - lda #0 736 f000 - sta temp3 737 f000 - jmp schedulesfx 738 f000 - 739 f000 -hssfx_lo 740 f000 - .byte sfx_hsletterpositionchange, >sfx_hslettertick 743 f000 - 744 f000 -sfx_hsletterpositionchange 745 f000 - .byte $10,$18,$00 746 f000 - .byte $02,$06,$08 747 f000 - .byte $02,$06,$04 748 f000 - .byte $00,$00,$00 749 f000 -sfx_hslettertick 750 f000 - .byte $10,$18,$00 751 f000 - .byte $00,$00,$0a 752 f000 - .byte $00,$00,$00 753 f000 - 754 f000 -highscorelabeladjust1 755 f000 - .byte (80-(14*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)) 756 f000 -highscorelabeladjust2 757 f000 - .byte (80+(14*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)) 758 f000 - 759 f000 -scorevarlo 760 f000 - .byte <(score0+((6-SCORESIZE)/2)),<(score0+((6-SCORESIZE)/2)),<(score1+((6-SCORESIZE)/2)) 761 f000 -scorevarhi 762 f000 - .byte >(score0+((6-SCORESIZE)/2)),>(score0+((6-SCORESIZE)/2)),>(score1+((6-SCORESIZE)/2)) 763 f000 - 764 f000 - ifnconst HSNOLEVELNAMES 765 f000 -highscoredifficultytextlo 766 f000 - .byte easylevelname, >mediumlevelname, >hardlevelname, >expertlevelname 769 f000 - ifnconst HSCUSTOMLEVELNAMES 770 f000 -highscoredifficultytextlen 771 f000 - .byte 22, 30, 26, 24 772 f000 - 773 f000 -easylevelname 774 f000 - .byte $04,$00,$12,$18,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 775 f000 -mediumlevelname 776 f000 - .byte $08,$0d,$13,$04,$11,$0c,$04,$03,$08,$00,$13,$04,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 777 f000 -hardlevelname 778 f000 - .byte $00,$03,$15,$00,$0d,$02,$04,$03,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 779 f000 -expertlevelname 780 f000 - .byte $04,$17,$0f,$04,$11,$13,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 781 f000 - else 782 f000 - include "7800hsgamediffnames.asm" 783 f000 - endif ; HSCUSTOMLEVELNAMES 784 f000 - else 785 f000 -HSHIGHSCOREStext 786 f000 - .byte $07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 787 f000 - endif ; HSNOLEVELNAMES 788 f000 - 789 f000 -highscorelabeltextlo 790 f000 - .byte player0label, >player1label, >player2label 793 f000 - 794 f000 -player0label 795 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$12,$02,$0e,$11,$04,$1a,$1d,$1d 796 f000 - 797 f000 -player1label 798 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$22,$1d,$12,$02,$0e,$11,$04,$1a 799 f000 - 800 f000 -player2label 801 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$23,$1d,$12,$02,$0e,$11,$04,$1a 802 f000 - 803 f000 - 804 f000 - ifconst HSGAMENAMELEN 805 f000 -HSGAMENAMEtable 806 f000 - include "7800hsgamename.asm" 807 f000 - endif 808 f000 - ifconst HSGAMERANKS 809 f000 - include "7800hsgameranks.asm" 810 f000 -highscoreranklabel 811 f000 - .byte $11,$00,$0d,$0a,$1a 812 f000 - endif 813 f000 - 814 f000 - ;ensure our table doesn't wrap a page... 815 f000 - if ((<*)>251) 816 f000 - align 256 817 f000 - endif 818 f000 -hsgameslotnumbers 819 f000 - .byte 33,34,35,36,37 820 f000 - endif 821 f000 - 822 f000 -loaddifficultytable 823 f000 - lda gamedifficulty 824 f000 - and #$03 ; ensure the user hasn't selected an invalid difficulty 825 f000 - sta gamedifficulty 826 f000 - cmp hsdifficulty ; check game difficulty is the same as RAM table 827 f000 - bne loaddifficultytablecontinue1 828 f000 - rts ; this high score difficulty table is already loaded 829 f000 -loaddifficultytablecontinue1 830 f000 - lda gamedifficulty 831 f000 - sta hsdifficulty 832 f000 - ;we need to check the device for the table 833 f000 - lda hsdevice 834 f000 - bne loaddifficultytablecontinue2 835 f000 - ; there's no save device. clear out this table. 836 f000 - jmp cleardifficultytablemem 837 f000 -loaddifficultytablecontinue2 838 f000 - lda hsdevice 839 f000 - and #1 840 f000 - beq memdeviceisntHSC 841 f000 - jmp loaddifficultytableHSC 842 f000 -memdeviceisntHSC 843 f000 - jmp loaddifficultytableAVOX 844 f000 - 845 f000 -savedifficultytable 846 f000 - ;*** we need to check wich device we should use... 847 f000 - lda hsdevice 848 f000 - bne savedifficultytablerealdevice 849 f000 - rts ; its a ram device 850 f000 -savedifficultytablerealdevice 851 f000 - and #1 852 f000 - beq savememdeviceisntHSC 853 f000 - jmp savedifficultytableHSC 854 f000 -savememdeviceisntHSC 855 f000 - jmp savedifficultytableAVOX 856 f000 - 857 f000 -savedifficultytableAVOX 858 f000 - ; the load call already setup the memory structure and atarivox memory location 859 f000 - jsr savealoadedHSCtablecontinue 860 f000 -savedifficultytableAVOXskipconvert 861 f000 - lda #HSIDHI 862 f000 - sta eeprombuffer 863 f000 - lda #HSIDLO 864 f000 - sta eeprombuffer+1 865 f000 - lda hsdifficulty 866 f000 - sta eeprombuffer+2 867 f000 - lda #32 868 f000 - jsr AVoxWriteBytes 869 f000 - rts 870 f000 - 871 f000 -savedifficultytableHSC 872 f000 - ;we always load a table before reaching here, so the 873 f000 - ;memory structures from the load should be intact... 874 f000 - ldy hsgameslot 875 f000 - bpl savealoadedHSCtable 876 f000 - rts 877 f000 -savealoadedHSCtable 878 f000 - lda HSCGameDifficulty,y 879 f000 - cmp #$7F 880 f000 - bne savealoadedHSCtablecontinue 881 f000 - jsr initializeHSCtableentry 882 f000 -savealoadedHSCtablecontinue 883 f000 - ;convert our RAM table to HSC format and write it out... 884 f000 - ldy #0 885 f000 - ldx #0 886 f000 -savedifficultytableScores 887 f000 - 888 f000 - lda HSRAMInitials,x 889 f000 - sta temp3 890 f000 - lda HSRAMInitials+1,x 891 f000 - sta temp4 892 f000 - lda HSRAMInitials+2,x 893 f000 - sta temp5 894 f000 - jsr encodeHSCInitials ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 895 f000 - 896 f000 - lda temp1 897 f000 - sta (HSGameTableLo),y 898 f000 - iny 899 f000 - lda temp2 900 f000 - sta (HSGameTableLo),y 901 f000 - iny 902 f000 - 903 f000 - lda HSRAMScores,x 904 f000 - sta (HSGameTableLo),y 905 f000 - iny 906 f000 - lda HSRAMScores+1,x 907 f000 - sta (HSGameTableLo),y 908 f000 - iny 909 f000 - lda HSRAMScores+2,x 910 f000 - sta (HSGameTableLo),y 911 f000 - iny 912 f000 - inx 913 f000 - inx 914 f000 - inx ; +3 915 f000 - cpx #15 916 f000 - bne savedifficultytableScores 917 f000 - rts 918 f000 - 919 f000 -loaddifficultytableHSC 920 f000 - ; routine responsible for loading the difficulty table from HSC 921 f000 - jsr findindexHSC 922 f000 - ldy hsgameslot 923 f000 - lda HSCGameDifficulty,y 924 f000 - cmp #$7F 925 f000 - bne loaddifficultytableHSCcontinue 926 f000 - ;there was an error. use a new RAM table instead... 927 f000 - jmp cleardifficultytablemem 928 f000 -loaddifficultytableHSCcontinue 929 f000 - ; parse the data into the HS memory... 930 f000 - ldy #0 931 f000 - ldx #0 932 f000 -loaddifficultytableScores 933 f000 - lda (HSGameTableLo),y 934 f000 - sta temp1 935 f000 - iny 936 f000 - lda (HSGameTableLo),y 937 f000 - sta temp2 938 f000 - jsr decodeHSCInitials ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 939 f000 - iny 940 f000 - lda (HSGameTableLo),y 941 f000 - sta HSRAMScores,x 942 f000 - lda temp3 943 f000 - sta HSRAMInitials,x 944 f000 - inx 945 f000 - iny 946 f000 - lda (HSGameTableLo),y 947 f000 - sta HSRAMScores,x 948 f000 - lda temp4 949 f000 - sta HSRAMInitials,x 950 f000 - inx 951 f000 - iny 952 f000 - lda (HSGameTableLo),y 953 f000 - sta HSRAMScores,x 954 f000 - lda temp5 955 f000 - sta HSRAMInitials,x 956 f000 - inx 957 f000 - iny 958 f000 - cpx #15 959 f000 - bne loaddifficultytableScores 960 f000 - rts 961 f000 - 962 f000 -decodeHSCInitials 963 f000 - ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 964 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 965 f000 - lda #0 966 f000 - sta temp4 967 f000 - lda temp1 968 f000 - and #%00011111 969 f000 - sta temp3 970 f000 - 971 f000 - lda temp2 972 f000 - and #%00011111 973 f000 - sta temp5 974 f000 - 975 f000 - lda temp1 976 f000 - asl 977 f000 - rol temp4 978 f000 - asl 979 f000 - rol temp4 980 f000 - asl 981 f000 - rol temp4 982 f000 - lda temp2 983 f000 - asl 984 f000 - rol temp4 985 f000 - asl 986 f000 - rol temp4 987 f000 - rts 988 f000 -encodeHSCInitials 989 f000 - ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 990 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 991 f000 - ; start with packing temp1... 992 f000 - lda temp4 993 f000 - and #%00011100 994 f000 - sta temp1 995 f000 - asl temp1 996 f000 - asl temp1 997 f000 - asl temp1 998 f000 - lda temp3 999 f000 - and #%00011111 1000 f000 - ora temp1 1001 f000 - sta temp1 1002 f000 - ; ...temp1 is now packed, on to temp2... 1003 f000 - lda temp5 1004 f000 - asl 1005 f000 - asl 1006 f000 - ror temp4 1007 f000 - ror 1008 f000 - ror temp4 1009 f000 - ror 1010 f000 - sta temp2 1011 f000 - rts 1012 f000 - 1013 f000 -findindexHSCerror 1014 f000 - ;the HSC is stuffed. return the bad slot flag 1015 f000 - ldy #$ff 1016 f000 - sty hsgameslot 1017 f000 - rts 1018 f000 - 1019 f000 -findindexHSC 1020 f000 -HSCGameID1 = $1029 1021 f000 -HSCGameID2 = $106E 1022 f000 -HSCGameDifficulty = $10B3 1023 f000 -HSCGameIndex = $10F8 1024 f000 - ; routine responsible for finding the game index from HSC 1025 f000 - ; call with x=0 to create a new table if none exist, call with x=$ff to avoid creating new tables 1026 f000 - ; the HS loading routine will use x=$ff, the HS saving routine will use x=0 1027 f000 - ldy #69 ; start +1 to account for the dey 1028 f000 -findindexHSCloop 1029 f000 - dey 1030 f000 - bmi findindexHSCerror 1031 f000 - lda HSCGameDifficulty,y 1032 f000 - cmp #$7F 1033 f000 - beq findourindexHSC 1034 f000 - cmp gamedifficulty 1035 f000 - bne findindexHSCloop 1036 f000 - lda HSCGameID1,y 1037 f000 - cmp #HSIDHI 1038 f000 - bne findindexHSCloop 1039 f000 - lda HSCGameID2,y 1040 f000 - cmp #HSIDLO 1041 f000 - bne findindexHSCloop 1042 f000 -findourindexHSC 1043 f000 - ; if we're here we found our index in the table 1044 f000 - ; or we found the first empty one 1045 f000 - sty hsgameslot 1046 f000 - jsr setupHSCGamepointer ; setup the pointer to the HS Table for this game... 1047 f000 - rts 1048 f000 - 1049 f000 - 1050 f000 -initializeHSCtableentry 1051 f000 - ldy hsgameslot 1052 f000 - ; we need to make a new entry... 1053 f000 - lda #HSIDHI 1054 f000 - sta HSCGameID1,y 1055 f000 - lda #HSIDLO 1056 f000 - sta HSCGameID2,y 1057 f000 - lda gamedifficulty 1058 f000 - sta HSCGameDifficulty,y 1059 f000 - ldx #0 1060 f000 -fixHSDGameDifficultylistLoop 1061 f000 - inx 1062 f000 - txa 1063 f000 - sta HSCGameIndex,y 1064 f000 - iny 1065 f000 - cpy #69 1066 f000 - bne fixHSDGameDifficultylistLoop 1067 f000 - rts 1068 f000 - 1069 f000 -setupHSCGamepointer 1070 f000 - ; this routines sets (HSGameTableLo) pointing to the game's HS table 1071 f000 - lda #$17 1072 f000 - sta HSGameTableHi 1073 f000 - lda #$FA 1074 f000 - sta HSGameTableLo 1075 f000 -setupHSCGamepointerLoop 1076 f000 - lda HSGameTableLo 1077 f000 - sec 1078 f000 - sbc #25 1079 f000 - sta HSGameTableLo 1080 f000 - lda HSGameTableHi 1081 f000 - sbc #0 1082 f000 - sta HSGameTableHi 1083 f000 - iny 1084 f000 - cpy #69 1085 f000 - bne setupHSCGamepointerLoop 1086 f000 - rts 1087 f000 - 1088 f000 -loaddifficultytableAVOX 1089 f000 - ; routine responsible for loading the difficulty table from Avox 1090 f000 - ; we reuse HSC routines to format data to/from our Avox RAM buffer... 1091 f000 - lda #>(eeprombuffer+3) 1092 f000 - sta HSGameTableHi 1093 f000 - lda #<(eeprombuffer+3) 1094 f000 - sta HSGameTableLo 1095 f000 - 1096 f000 - ; the start location in EEPROM, subtract 32... 1097 f000 - lda #$5F 1098 f000 - sta HSVoxHi 1099 f000 - lda #$E0 1100 f000 - sta HSVoxLo 1101 f000 - lda #0 1102 f000 - sta temp1 1103 f000 -loaddifficultytableAVOXloop 1104 f000 - inc temp1 1105 f000 - beq loaddifficultytableAVOXfull 1106 f000 - clc 1107 f000 - lda HSVoxLo 1108 f000 - adc #32 1109 f000 - sta HSVoxLo 1110 f000 - lda HSVoxHi 1111 f000 - adc #0 1112 f000 - sta HSVoxHi 1113 f000 - lda #3 1114 f000 - jsr AVoxReadBytes ; read in 3 bytes, ID1,ID2,Difficulty 1115 f000 - lda eeprombuffer 1116 f000 - cmp #$FF 1117 f000 - beq loaddifficultytableAVOXempty 1118 f000 - cmp #HSIDHI 1119 f000 - bne loaddifficultytableAVOXloop 1120 f000 - lda eeprombuffer+1 1121 f000 - cmp #HSIDLO 1122 f000 - bne loaddifficultytableAVOXloop 1123 f000 - lda eeprombuffer+2 1124 f000 - cmp gamedifficulty 1125 f000 - bne loaddifficultytableAVOXloop 1126 f000 -loaddifficultytableAVOXdone 1127 f000 - lda #32 1128 f000 - jsr AVoxReadBytes 1129 f000 - jsr loaddifficultytableHSCcontinue 1130 f000 - rts 1131 f000 -loaddifficultytableAVOXfull 1132 f000 - lda #0 1133 f000 - sta hsdevice ; looks like all 255 entries are taken... disable it. 1134 f000 -loaddifficultytableAVOXempty 1135 f000 - jmp cleardifficultytablemem 1136 f000 - rts 1137 f000 - 1138 f000 -cleardifficultytablemem 1139 f000 - ldy #29 1140 f000 - lda #0 1141 f000 -cleardifficultytablememloop 1142 f000 - sta HSRAMTable,y 1143 f000 - dey 1144 f000 - bpl cleardifficultytablememloop 1145 f000 - rts 1146 f000 -hiscoremoduleend 1147 f000 - 1148 f000 - echo " hiscore assembly: ",[(hiscoremoduleend-hiscoremodulestart)]d," bytes" 1149 f000 - 1150 f000 - ifconst DOUBLEWIDE 1151 f000 -plotvaluedw 1152 f000 -plotdigitcount = temp6 1153 f000 - lda #0 1154 f000 - tay 1155 f000 - ldx valbufend 1156 f000 - 1157 f000 - lda plotdigitcount 1158 f000 - and #1 1159 f000 - beq pvnibble2chardw 1160 f000 - lda #0 1161 f000 - sta VALBUFFER,x ; just in case we skip this digit 1162 f000 - beq pvnibble2char_skipnibbledw 1163 f000 - 1164 f000 -pvnibble2chardw 1165 f000 - ; high nibble... 1166 f000 - lda (temp7),y 1167 f000 - and #$f0 1168 f000 - lsr 1169 f000 - lsr 1170 f000 - lsr 1171 f000 - lsr 1172 f000 - 1173 f000 - clc 1174 f000 - adc temp1 ; add the offset to character graphics to our value 1175 f000 - sta VALBUFFER,x 1176 f000 - inx 1177 f000 - dec plotdigitcount 1178 f000 -pvnibble2char_skipnibbledw 1179 f000 - ; low nibble... 1180 f000 - lda (temp7),y 1181 f000 - and #$0f 1182 f000 - clc 1183 f000 - adc temp1 ; add the offset to character graphics to our value 1184 f000 - sta VALBUFFER,x 1185 f000 - inx 1186 f000 - iny 1187 f000 - 1188 f000 - dec plotdigitcount 1189 f000 - bne pvnibble2chardw 1190 f000 - ;point to the start of our valuebuffer 1191 f000 - clc 1192 f000 - lda #VALBUFFER 1196 f000 - adc #0 1197 f000 - sta temp2 1198 f000 - 1199 f000 - ;advance valbufend to the end of our value buffer 1200 f000 - stx valbufend 1201 f000 - 1202 f000 - ifnconst plotvalueonscreen 1203 f000 - jmp plotcharacters 1204 f000 - else 1205 f000 - jmp plotcharacterslive 1206 f000 - endif 1207 f000 - endif ; DOUBLEWIDE 1208 f000 - 1209 f000 endif ; HSSUPPORT 1210 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1868 f000 endif 1869 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 1870 f000 1871 f000 ;standard routimes needed for pretty much all games 1872 f000 1873 f000 ; some definitions used with "set debug color" 1874 f000 00 91 DEBUGCALC = $91 1875 f000 00 41 DEBUGWASTE = $41 1876 f000 00 c1 DEBUGDRAW = $C1 1877 f000 1878 f000 ;NMI and IRQ handlers 1879 f000 NMI 1880 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 1881 f000 48 pha ; save A 1882 f001 a5 4d lda visibleover 1883 f003 49 ff eor #255 1884 f005 85 4d sta visibleover 1885 f007 - ifconst DEBUGINTERRUPT 1886 f007 - and #$93 1887 f007 - sta BACKGRND 1888 f007 endif 1889 f007 ce b2 01 dec interruptindex 1890 f00a d0 03 bne skipreallyoffvisible 1891 f00c 4c 5b f0 jmp reallyoffvisible 1892 f00f skipreallyoffvisible 1893 f00f a5 4d lda visibleover 1894 f011 f0 46 beq skiptopscreenroutine 1895 f013 8a txa ; save X+Y 1896 f014 48 pha 1897 f015 98 tya 1898 f016 48 pha 1899 f017 d8 cld 1900 f018 - ifconst .topscreenroutine 1901 f018 - jsr .topscreenroutine 1902 f018 endif 1903 f018 ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 1904 f01b 1905 f01b ; ** Other important routines that need to regularly run, and can run onscreen. 1906 f01b ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 1907 f01b 1908 f01b longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 1909 f01b - ifconst LONGCONTROLLERREAD 1910 f01b - lda #$38 1911 f01b - ifconst LONGDEBUG 1912 f01b - sta BACKGRND 1913 f01b - endif 1914 f01b - sta inttemp6 1915 f01b - 1916 f01b -longreadlineloop 1917 f01b - ldx #1 1918 f01b -longreadloop 1919 f01b - ldy port0control,x 1920 f01b - lda longreadroutinelo,y 1921 f01b - sta inttemp3 1922 f01b - lda longreadroutinehi,y 1923 f01b - sta inttemp4 1924 f01b - ora inttemp3 1925 f01b - beq longreadloopreturn 1926 f01b - jmp (inttemp3) 1927 f01b -longreadloopreturn 1928 f01b - dex 1929 f01b - bpl longreadloop 1930 f01b - dec inttemp6 1931 f01b - sta WSYNC 1932 f01b - bne longreadlineloop 1933 f01b - 1934 f01b - ifconst LONGDEBUG 1935 f01b - lda #$00 1936 f01b - sta BACKGRND 1937 f01b - endif 1938 f01b endif ; LONGCONTROLLERREAD 1939 f01b 1940 f01b 20 cd f1 jsr servicesfxchannels 1941 f01e - ifconst MUSICTRACKER 1942 f01e - jsr servicesong 1943 f01e endif ; MUSICTRACKER 1944 f01e 1945 f01e ee a4 01 inc framecounter 1946 f021 ad a4 01 lda framecounter 1947 f024 29 3f and #63 1948 f026 d0 08 bne skipcountdownseconds 1949 f028 ad a5 01 lda countdownseconds 1950 f02b f0 03 beq skipcountdownseconds 1951 f02d ce a5 01 dec countdownseconds 1952 f030 skipcountdownseconds 1953 f030 1954 f030 a2 01 ldx #1 1955 f032 buttonreadloop 1956 f032 8a txa 1957 f033 48 pha 1958 f034 bc e2 01 ldy port0control,x 1959 f037 b9 b0 f1 lda buttonhandlerlo,y 1960 f03a 85 da sta inttemp3 1961 f03c b9 a5 f1 lda buttonhandlerhi,y 1962 f03f 85 db sta inttemp4 1963 f041 05 da ora inttemp3 1964 f043 f0 03 beq buttonreadloopreturn 1965 f045 6c da 00 jmp (inttemp3) 1966 f048 buttonreadloopreturn 1967 f048 68 pla 1968 f049 aa tax 1969 f04a ca dex 1970 f04b 10 e5 bpl buttonreadloop 1971 f04d 1972 f04d - ifconst DRIVINGSUPPORT 1973 f04d - jsr drivingupdate 1974 f04d endif ; DRIVINGSUPPORT 1975 f04d - ifconst KEYPADSUPPORT 1976 f04d - jsr keypadrowselect 1977 f04d endif ; KEYPADSUPPORT 1978 f04d 1979 f04d 1980 f04d ad b5 01 lda doublebufferminimumframeindex 1981 f050 f0 03 beq skipdoublebufferminimumframeindexadjust 1982 f052 ce b5 01 dec doublebufferminimumframeindex 1983 f055 skipdoublebufferminimumframeindexadjust 1984 f055 1985 f055 68 pla 1986 f056 a8 tay 1987 f057 68 pla 1988 f058 aa tax 1989 f059 skiptopscreenroutine 1990 f059 68 pla 1991 f05a IRQ 1992 f05a 40 RTI 1993 f05b 1994 f05b - ifconst LONGCONTROLLERREAD 1995 f05b -longreadroutinelo 1996 f05b - ; NONE PROLINE LIGHTGUN PADDLE 1997 f05b - .byte 0, 0, 0, 0 1998 f05b - ; TRKBALL VCS STICK DRIVING KEYPAD 1999 f05b - .byte 0, 0, 0, 0 2000 f05b - ; STMOUSE AMOUSE ATARIVOX 2001 f05b - .byte mouseupdate, >mouseupdate, 0 2010 f05b -nullroutine 2011 f05b - rts 2012 f05b endif ; LONGCONTROLLERREAD 2013 f05b 2014 f05b reallyoffvisible 2015 f05b 85 24 sta WSYNC 2016 f05d 2017 f05d a9 00 lda #0 2018 f05f 85 4d sta visibleover 2019 f061 - ifconst DEBUGINTERRUPT 2020 f061 - sta BACKGRND 2021 f061 endif 2022 f061 2023 f061 a9 03 lda #3 2024 f063 8d b2 01 sta interruptindex 2025 f066 2026 f066 8a txa 2027 f067 48 pha 2028 f068 98 tya 2029 f069 48 pha 2030 f06a d8 cld 2031 f06b 2032 f06b 20 47 f1 jsr uninterruptableroutines 2033 f06e 2034 f06e - ifconst .userinterrupt 2035 f06e - jsr .userinterrupt 2036 f06e endif 2037 f06e 2038 f06e - ifconst KEYPADSUPPORT 2039 f06e - jsr keypadcolumnread 2040 f06e endif 2041 f06e 2042 f06e 68 pla 2043 f06f a8 tay 2044 f070 68 pla 2045 f071 aa tax 2046 f072 68 pla 2047 f073 40 RTI 2048 f074 2049 f074 clearscreen 2050 f074 a2 17 ldx #(WZONECOUNT-1) 2051 f076 a9 00 lda #0 2052 f078 clearscreenloop 2053 f078 95 65 sta dlend,x 2054 f07a ca dex 2055 f07b 10 fb bpl clearscreenloop 2056 f07d a9 00 lda #0 2057 f07f 8d ad 01 sta valbufend ; clear the bcd value buffer 2058 f082 8d ae 01 sta valbufendsave 2059 f085 60 rts 2060 f086 2061 f086 restorescreen 2062 f086 a2 17 ldx #(WZONECOUNT-1) 2063 f088 a9 00 lda #0 2064 f08a restorescreenloop 2065 f08a b5 82 lda dlendsave,x 2066 f08c 95 65 sta dlend,x 2067 f08e ca dex 2068 f08f 10 f9 bpl restorescreenloop 2069 f091 ad ae 01 lda valbufendsave 2070 f094 8d ad 01 sta valbufend 2071 f097 60 rts 2072 f098 2073 f098 savescreen 2074 f098 a2 17 ldx #(WZONECOUNT-1) 2075 f09a savescreenloop 2076 f09a b5 65 lda dlend,x 2077 f09c 95 82 sta dlendsave,x 2078 f09e ca dex 2079 f09f 10 f9 bpl savescreenloop 2080 f0a1 ad ad 01 lda valbufend 2081 f0a4 8d ae 01 sta valbufendsave 2082 f0a7 - ifconst DOUBLEBUFFER 2083 f0a7 - lda doublebufferstate 2084 f0a7 - beq savescreenrts 2085 f0a7 - lda #1 2086 f0a7 - sta doublebufferbufferdirty 2087 f0a7 -savescreenrts 2088 f0a7 endif ; DOUBLEBUFFER 2089 f0a7 60 rts 2090 f0a8 2091 f0a8 drawscreen 2092 f0a8 2093 f0a8 a9 00 lda #0 2094 f0aa 85 42 sta temp1 ; not B&W if we're here... 2095 f0ac 2096 f0ac drawscreenwait 2097 f0ac a5 4d lda visibleover 2098 f0ae d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 2099 f0b0 2100 f0b0 ;restore some registers in case the game changed them mid-screen... 2101 f0b0 ad 07 21 lda sCTRL 2102 f0b3 05 42 ora temp1 2103 f0b5 85 3c sta CTRL 2104 f0b7 ad 0b 21 lda sCHARBASE 2105 f0ba 85 34 sta CHARBASE 2106 f0bc 2107 f0bc ;ensure all of the display list is terminated... 2108 f0bc 20 2d f1 jsr terminatedisplaylist 2109 f0bf 2110 f0bf ifnconst pauseroutineoff 2111 f0bf 20 ca f0 jsr pauseroutine 2112 f0c2 endif ; pauseroutineoff 2113 f0c2 2114 f0c2 ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 2115 f0c2 ; delaying a full frame, but still allowing time for basic calculations. 2116 f0c2 visiblescreenstartedwait 2117 f0c2 a5 4d lda visibleover 2118 f0c4 f0 fc beq visiblescreenstartedwait 2119 f0c6 visiblescreenstartedwaitdone 2120 f0c6 ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 2121 f0c9 60 rts 2122 f0ca 2123 f0ca ifnconst pauseroutineoff 2124 f0ca ; check to see if pause was pressed and released 2125 f0ca pauseroutine 2126 f0ca ad b6 01 lda pausedisable 2127 f0cd d0 4e bne leavepauseroutine 2128 f0cf a9 08 lda #8 2129 f0d1 2c 82 02 bit SWCHB 2130 f0d4 f0 29 beq pausepressed 2131 f0d6 2132 f0d6 ifnconst SOFTRESETASPAUSEOFF 2133 f0d6 ifnconst MOUSESUPPORT 2134 f0d6 ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 2135 f0d9 29 70 and #%01110000 ; _LDU 2136 f0db f0 22 beq pausepressed 2137 f0dd endif 2138 f0dd endif 2139 f0dd 2140 f0dd ;pause isn't pressed 2141 f0dd a9 00 lda #0 2142 f0df 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 2143 f0e2 2144 f0e2 ;check if we're in an already paused state 2145 f0e2 ad 00 21 lda pausestate 2146 f0e5 f0 36 beq leavepauseroutine ; nope, leave 2147 f0e7 2148 f0e7 c9 01 cmp #1 ; last frame was the start of pausing 2149 f0e9 f0 2b beq enterpausestate2 ; move from state 1 to 2 2150 f0eb 2151 f0eb c9 02 cmp #2 2152 f0ed f0 34 beq carryonpausing 2153 f0ef 2154 f0ef ;pausestate must be >2, which means we're ending an unpause 2155 f0ef a9 00 lda #0 2156 f0f1 8d ac 01 sta pausebuttonflag 2157 f0f4 8d 00 21 sta pausestate 2158 f0f7 ad 07 21 lda sCTRL 2159 f0fa 85 3c sta CTRL 2160 f0fc 4c 1d f1 jmp leavepauseroutine 2161 f0ff 2162 f0ff pausepressed 2163 f0ff ;pause is pressed 2164 f0ff ad ac 01 lda pausebuttonflag 2165 f102 c9 ff cmp #$ff 2166 f104 f0 1d beq carryonpausing 2167 f106 2168 f106 ;its a new press, increment the state 2169 f106 ee 00 21 inc pausestate 2170 f109 2171 f109 ;silence volume at the start and end of pausing 2172 f109 a9 00 lda #0 2173 f10b 85 19 sta AUDV0 2174 f10d 85 1a sta AUDV1 2175 f10f 2176 f10f - ifconst pokeysupport 2177 f10f - ldy #7 2178 f10f -pausesilencepokeyaudioloop 2179 f10f - sta (pokeybase),y 2180 f10f - dey 2181 f10f - bpl pausesilencepokeyaudioloop 2182 f10f endif ; pokeysupport 2183 f10f 2184 f10f a9 ff lda #$ff 2185 f111 8d ac 01 sta pausebuttonflag 2186 f114 d0 0d bne carryonpausing 2187 f116 2188 f116 enterpausestate2 2189 f116 a9 02 lda #2 2190 f118 8d 00 21 sta pausestate 2191 f11b d0 06 bne carryonpausing 2192 f11d leavepauseroutine 2193 f11d ad 07 21 lda sCTRL 2194 f120 85 3c sta CTRL 2195 f122 60 rts 2196 f123 carryonpausing 2197 f123 - ifconst .pause 2198 f123 - jsr .pause 2199 f123 endif ; .pause 2200 f123 ad 07 21 lda sCTRL 2201 f126 09 80 ora #%10000000 ; turn off colorburst during pause... 2202 f128 85 3c sta CTRL 2203 f12a 4c ca f0 jmp pauseroutine 2204 f12d endif ; pauseroutineoff 2205 f12d 2206 f12d 2207 f12d - ifconst DOUBLEBUFFER 2208 f12d -skipterminatedisplaylistreturn 2209 f12d - rts 2210 f12d endif ; DOUBLEBUFFER 2211 f12d terminatedisplaylist 2212 f12d - ifconst DOUBLEBUFFER 2213 f12d - lda doublebufferstate 2214 f12d - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 2215 f12d endif ; DOUBLEBUFFER 2216 f12d terminatedisplaybuffer 2217 f12d ;add DL end entry on each DL 2218 f12d a2 17 ldx #(WZONECOUNT-1) 2219 f12f dlendloop 2220 f12f bd 2f f6 lda DLPOINTL,x 2221 f132 - ifconst DOUBLEBUFFER 2222 f132 - clc 2223 f132 - adc doublebufferdloffset 2224 f132 endif ; DOUBLEBUFFER 2225 f132 85 63 sta dlpnt 2226 f134 bd 17 f6 lda DLPOINTH,x 2227 f137 - ifconst DOUBLEBUFFER 2228 f137 - adc #0 2229 f137 endif ; DOUBLEBUFFER 2230 f137 85 64 sta dlpnt+1 2231 f139 b4 65 ldy dlend,x 2232 f13b a9 00 lda #$00 2233 f13d dlendmoreloops 2234 f13d c8 iny 2235 f13e 91 63 sta (dlpnt),y 2236 f140 - ifconst FRAMESKIPGLITCHFIXWEAK 2237 f140 - cpy #DLLASTOBJ+1 2238 f140 - beq dlendthiszonedone 2239 f140 - iny 2240 f140 - iny 2241 f140 - iny 2242 f140 - iny 2243 f140 - iny 2244 f140 - sta (dlpnt),y 2245 f140 -dlendthiszonedone 2246 f140 endif FRAMESKIPGLITCHFIXWEAK 2247 f140 - ifconst FRAMESKIPGLITCHFIX 2248 f140 - iny 2249 f140 - iny 2250 f140 - iny 2251 f140 - iny 2252 f140 - cpy #DLLASTOBJ-1 2253 f140 - bcc dlendmoreloops 2254 f140 endif ; FRAMESKIPGLITCHFIX 2255 f140 ca dex 2256 f141 10 ec bpl dlendloop 2257 f143 2258 f143 ifnconst pauseroutineoff 2259 f143 20 ca f0 jsr pauseroutine 2260 f146 endif ; pauseroutineoff 2261 f146 60 rts 2262 f147 2263 f147 uninterruptableroutines 2264 f147 ; this is for routines that must happen off the visible screen, each frame. 2265 f147 2266 f147 - ifconst AVOXVOICE 2267 f147 - jsr serviceatarivoxqueue 2268 f147 endif 2269 f147 2270 f147 a9 00 lda #0 2271 f149 8d e1 01 sta palfastframe 2272 f14c ad 09 21 lda paldetected 2273 f14f f0 10 beq skippalframeadjusting 2274 f151 ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 2275 f151 ae e0 01 ldx palframes 2276 f154 e8 inx 2277 f155 e0 05 cpx #5 2278 f157 d0 05 bne palframeskipdone 2279 f159 ee e1 01 inc palfastframe 2280 f15c a2 00 ldx #0 2281 f15e palframeskipdone 2282 f15e 8e e0 01 stx palframes 2283 f161 skippalframeadjusting 2284 f161 2285 f161 - ifconst MUSICTRACKER 2286 f161 - ; We normally run the servicesong routine from the top-screen interrupt, but if it 2287 f161 - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 2288 f161 - ; If that happens, we try again here. Chances are very small we'll run into the same 2289 f161 - ; problem twice, and if we do, we just drop a musical note or two. 2290 f161 - lda sfxschedulemissed 2291 f161 - beq servicesongwasnotmissed 2292 f161 - jsr servicesong 2293 f161 -servicesongwasnotmissed 2294 f161 endif ; MUSICTRACKER 2295 f161 2296 f161 60 rts 2297 f162 2298 f162 serviceatarivoxqueue 2299 f162 - ifconst AVOXVOICE 2300 f162 - lda voxlock 2301 f162 - bne skipvoxprocessing ; the vox is in the middle of speech address update 2302 f162 -skipvoxqueuesizedec 2303 f162 - jmp processavoxvoice 2304 f162 -skipvoxprocessing 2305 f162 - rts 2306 f162 - 2307 f162 -processavoxvoice 2308 f162 - lda avoxenable 2309 f162 - bne avoxfixport 2310 f162 - SPKOUT tempavox 2311 f162 - rts 2312 f162 -avoxfixport 2313 f162 - lda #0 ; restore the port to all bits as inputs... 2314 f162 - sta CTLSWA 2315 f162 - rts 2316 f162 -silenceavoxvoice 2317 f162 - SPEAK avoxsilentdata 2318 f162 - rts 2319 f162 -avoxsilentdata 2320 f162 - .byte 31,255 2321 f162 else 2322 f162 60 rts 2323 f163 endif ; AVOXVOICE 2324 f163 2325 f163 joybuttonhandler 2326 f163 8a txa 2327 f164 0a asl 2328 f165 a8 tay 2329 f166 b9 08 00 lda INPT0,y 2330 f169 4a lsr 2331 f16a 9d 02 21 sta sINPT1,x 2332 f16d b9 09 00 lda INPT1,y 2333 f170 29 80 and #%10000000 2334 f172 1d 02 21 ora sINPT1,x 2335 f175 ;eor genesisdetected0,x ; invert INPT1 if genesis is detected 2336 f175 9d 02 21 sta sINPT1,x 2337 f178 2338 f178 b5 0c lda INPT4,x 2339 f17a 30 19 bmi .skip1bjoyfirecheck 2340 f17c ;one button joystick is down 2341 f17c 49 80 eor #%10000000 2342 f17e 9d 02 21 sta sINPT1,x 2343 f181 2344 f181 ad b1 01 lda joybuttonmode 2345 f184 3d 98 f1 and twobuttonmask,x 2346 f187 f0 0c beq .skip1bjoyfirecheck 2347 f189 ad b1 01 lda joybuttonmode 2348 f18c 1d 98 f1 ora twobuttonmask,x 2349 f18f 8d b1 01 sta joybuttonmode 2350 f192 8d 82 02 sta SWCHB 2351 f195 .skip1bjoyfirecheck 2352 f195 4c 48 f0 jmp buttonreadloopreturn 2353 f198 2354 f198 twobuttonmask 2355 f198 04 10 .byte.b %00000100,%00010000 2356 f19a 2357 f19a gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 2358 f19a - ifconst LIGHTGUNSUPPORT 2359 f19a - cpx #0 2360 f19a - bne secondportgunhandler 2361 f19a -firstportgunhandler 2362 f19a - lda SWCHA 2363 f19a - asl 2364 f19a - asl 2365 f19a - asl ; shift D4 to D7 2366 f19a - and #%10000000 2367 f19a - eor #%10000000 2368 f19a - sta sINPT1 2369 f19a - jmp buttonreadloopreturn 2370 f19a -secondportgunhandler 2371 f19a - lda SWCHA 2372 f19a - lsr ; shift D0 into carry 2373 f19a - lsr ; shift carry into D7 2374 f19a - and #%10000000 2375 f19a - eor #%10000000 2376 f19a - sta sINPT3 2377 f19a - jmp buttonreadloopreturn 2378 f19a endif ; LIGHTGUNSUPPORT 2379 f19a 2380 f19a controlsusing2buttoncode 2381 f19a 00 .byte.b 0 ; 00=no controller plugged in 2382 f19b 01 .byte.b 1 ; 01=proline joystick 2383 f19c 00 .byte.b 0 ; 02=lightgun 2384 f19d 00 .byte.b 0 ; 03=paddle 2385 f19e 01 .byte.b 1 ; 04=trakball 2386 f19f 01 .byte.b 1 ; 05=vcs joystick 2387 f1a0 01 .byte.b 1 ; 06=driving control 2388 f1a1 00 .byte.b 0 ; 07=keypad control 2389 f1a2 00 .byte.b 0 ; 08=st mouse/cx80 2390 f1a3 00 .byte.b 0 ; 09=amiga mouse 2391 f1a4 01 .byte.b 1 ; 10=atarivox 2392 f1a5 2393 f1a5 buttonhandlerhi 2394 f1a5 00 .byte.b 0 ; 00=no controller plugged in 2395 f1a6 f1 .byte.b >joybuttonhandler ; 01=proline joystick 2396 f1a7 f1 .byte.b >gunbuttonhandler ; 02=lightgun 2397 f1a8 00 .byte.b 0 ; 03=paddle [not implemented yet] 2398 f1a9 f1 .byte.b >joybuttonhandler ; 04=trakball 2399 f1aa f1 .byte.b >joybuttonhandler ; 05=vcs joystick 2400 f1ab f1 .byte.b >joybuttonhandler ; 06=driving control 2401 f1ac 00 .byte.b 0 ; 07=keypad 2402 f1ad f5 .byte.b >mousebuttonhandler ; 08=st mouse 2403 f1ae f5 .byte.b >mousebuttonhandler ; 09=amiga mouse 2404 f1af f1 .byte.b >joybuttonhandler ; 10=atarivox 2405 f1b0 buttonhandlerlo 2406 f1b0 00 .byte.b 0 ; 00=no controller plugged in 2407 f1b1 63 .byte.b $0F means the sound is looped while priority is active 2508 f20e 2509 f20e 05 d9 ora inttemp2 2510 f210 05 d8 ora inttemp1 ; check if F|C|V=0 2511 f212 f0 23 beq zerosfx ; if so, we're at the end of the sound. 2512 f214 2513 f214 advancesfxpointer 2514 f214 ; advance the pointer to the next sound chunk 2515 f214 c8 iny 2516 f215 84 da sty inttemp3 2517 f217 18 clc 2518 f218 b5 4e lda sfx1pointlo,x 2519 f21a 65 da adc inttemp3 2520 f21c 95 4e sta sfx1pointlo,x 2521 f21e b5 50 lda sfx1pointhi,x 2522 f220 69 00 adc #0 2523 f222 95 50 sta sfx1pointhi,x 2524 f224 4c cf f1 jmp servicesfxchannelsloop 2525 f227 2526 f227 sfxsoundloop 2527 f227 48 pha 2528 f228 b5 52 lda sfx1priority,x 2529 f22a d0 04 bne sfxsoundloop_carryon 2530 f22c 68 pla ; fix the stack before we go 2531 f22d 4c 14 f2 jmp advancesfxpointer 2532 f230 sfxsoundloop_carryon 2533 f230 68 pla 2534 f231 29 f0 and #$F0 2535 f233 4a lsr 2536 f234 4a lsr 2537 f235 4a lsr 2538 f236 4a lsr 2539 f237 2540 f237 zerosfx 2541 f237 95 4e sta sfx1pointlo,x 2542 f239 95 50 sta sfx1pointhi,x 2543 f23b 95 52 sta sfx1priority,x 2544 f23d 4c cf f1 jmp servicesfxchannelsloop 2545 f240 2546 f240 2547 f240 schedulesfx 2548 f240 ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 2549 f240 a0 00 ldy #0 2550 f242 b1 e0 lda (sfxinstrumentlo),y 2551 f244 - ifconst pokeysupport 2552 f244 - cmp #$20 ; POKEY? 2553 f244 - bne scheduletiasfx 2554 f244 - jmp schedulepokeysfx 2555 f244 endif 2556 f244 scheduletiasfx 2557 f244 ;cmp #$10 ; TIA? 2558 f244 ;beq continuescheduletiasfx 2559 f244 ; rts ; unhandled!!! 2560 f244 continuescheduletiasfx 2561 f244 ifnconst TIASFXMONO 2562 f244 a5 4e lda sfx1pointlo 2563 f246 05 50 ora sfx1pointhi 2564 f248 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 2565 f24a a5 4f lda sfx2pointlo 2566 f24c 05 51 ora sfx2pointhi 2567 f24e f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 2568 f250 ; Both channels are scheduled. 2569 f250 a0 01 ldy #1 2570 f252 b1 e0 lda (sfxinstrumentlo),y 2571 f254 d0 01 bne interruptsfx 2572 f256 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 2573 f257 interruptsfx 2574 f257 ;Compare which active sound has a lower priority. We'll interrupt the lower one. 2575 f257 a5 52 lda sfx1priority 2576 f259 c5 53 cmp sfx2priority 2577 f25b b0 04 bcs schedulesfx2 2578 f25d endif ; !TIASFXMONO 2579 f25d 2580 f25d schedulesfx1 2581 f25d a2 00 ldx #0 ; channel 1 2582 f25f ifnconst TIASFXMONO 2583 f25f f0 02 beq skipschedulesfx2 2584 f261 schedulesfx2 2585 f261 a2 01 ldx #1 ; channel 2 2586 f263 skipschedulesfx2 2587 f263 endif ; !TIASFXMONO 2588 f263 2589 f263 - ifconst MUSICTRACKER 2590 f263 - lda sfxnoteindex 2591 f263 - bpl skipdrumkitoverride 2592 f263 - and #$7F ; subtract 128 2593 f263 - sec 2594 f263 - sbc #4 ; drums start at 132, i.e. octave 10 2595 f263 - asl 2596 f263 - tay 2597 f263 - lda tiadrumkitdefinition,y 2598 f263 - sta sfxinstrumentlo 2599 f263 - iny 2600 f263 - lda tiadrumkitdefinition,y 2601 f263 - sta sfxinstrumenthi 2602 f263 - lda #0 2603 f263 - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 2604 f263 -skipdrumkitoverride 2605 f263 endif ; MUSICTRACKER 2606 f263 a0 01 ldy #1 ; get priority and sound-resolution (in frames) 2607 f265 b1 e0 lda (sfxinstrumentlo),y 2608 f267 95 52 sta sfx1priority,x 2609 f269 c8 iny 2610 f26a b1 e0 lda (sfxinstrumentlo),y 2611 f26c 95 56 sta sfx1frames,x 2612 f26e a5 e0 lda sfxinstrumentlo 2613 f270 18 clc 2614 f271 69 03 adc #3 2615 f273 95 4e sta sfx1pointlo,x 2616 f275 a5 e1 lda sfxinstrumenthi 2617 f277 69 00 adc #0 2618 f279 95 50 sta sfx1pointhi,x 2619 f27b a5 e2 lda sfxpitchoffset 2620 f27d 95 54 sta sfx1poffset,x 2621 f27f a9 00 lda #0 2622 f281 95 58 sta sfx1tick,x 2623 f283 a5 e3 lda sfxnoteindex 2624 f285 95 cd sta sfx1notedata,x 2625 f287 60 rts 2626 f288 2627 f288 plotsprite 2628 f288 - ifconst DOUBLEBUFFER 2629 f288 - lda doublebufferstate 2630 f288 - bne skipplotspritewait 2631 f288 endif ; DOUBLEBUFFER 2632 f288 plotspritewait 2633 f288 a5 4d lda visibleover 2634 f28a d0 fc bne plotspritewait 2635 f28c skipplotspritewait 2636 f28c 2637 f28c ;arguments: 2638 f28c ; temp1=lo graphicdata 2639 f28c ; temp2=hi graphicdata 2640 f28c ; temp3=palette | width byte 2641 f28c ; temp4=x 2642 f28c ; temp5=y 2643 f28c ; temp6=mode 2644 f28c a5 46 lda temp5 ;Y position 2645 f28e 4a lsr ; 2 - Divide by 8 or 16 2646 f28f 4a lsr ; 2 2647 f290 4a lsr ; 2 2648 f291 - if WZONEHEIGHT = 16 2649 f291 - lsr ; 2 2650 f291 endif 2651 f291 2652 f291 aa tax 2653 f292 2654 f292 ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 2655 f292 2656 f292 c9 18 cmp #WZONECOUNT 2657 f294 2658 f294 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 2659 f296 ; otherwise, check to see if the bottom half is in zone 0... 2660 f296 2661 f296 - if WZONEHEIGHT = 16 2662 f296 - cmp #15 2663 f296 else 2664 f296 c9 1f cmp #31 2665 f298 endif 2666 f298 2667 f298 d0 05 bne exitplotsprite1 2668 f29a a2 00 ldx #0 2669 f29c 4c db f2 jmp continueplotsprite2 2670 f29f exitplotsprite1 2671 f29f 60 rts 2672 f2a0 2673 f2a0 continueplotsprite1 2674 f2a0 2675 f2a0 bd 2f f6 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 2676 f2a3 - ifconst DOUBLEBUFFER 2677 f2a3 - clc 2678 f2a3 - adc doublebufferdloffset 2679 f2a3 endif ; DOUBLEBUFFER 2680 f2a3 85 63 sta dlpnt 2681 f2a5 bd 17 f6 lda DLPOINTH,x 2682 f2a8 - ifconst DOUBLEBUFFER 2683 f2a8 - adc #0 2684 f2a8 endif ; DOUBLEBUFFER 2685 f2a8 85 64 sta dlpnt+1 2686 f2aa 2687 f2aa ;Create DL entry for upper part of sprite 2688 f2aa 2689 f2aa b4 65 ldy dlend,x ;Get the index to the end of this DL 2690 f2ac 2691 f2ac ifconst CHECKOVERWRITE 2692 f2ac c0 4b cpy #DLLASTOBJ 2693 f2ae f0 1f beq checkcontinueplotsprite2 2694 f2b0 continueplotsprite1a 2695 f2b0 endif 2696 f2b0 2697 f2b0 a5 42 lda temp1 ; graphic data, lo byte 2698 f2b2 91 63 sta (dlpnt),y ;Low byte of data address 2699 f2b4 2700 f2b4 ifnconst ATOMICSPRITEUPDATE 2701 f2b4 c8 iny 2702 f2b5 a5 47 lda temp6 2703 f2b7 91 63 sta (dlpnt),y 2704 f2b9 - else 2705 f2b9 - iny 2706 f2b9 - sty temp8 2707 f2b9 - ;lda #0 2708 f2b9 - ;sta (dlpnt),y 2709 f2b9 endif 2710 f2b9 2711 f2b9 c8 iny 2712 f2ba a5 46 lda temp5 ;Y position 2713 f2bc 2714 f2bc - if WZONEHEIGHT = 16 2715 f2bc - and #$0F 2716 f2bc else ; WZONEHEIGHT = 8 2717 f2bc 29 07 and #$7 2718 f2be endif 2719 f2be 2720 f2be 05 43 ora temp2 ; graphic data, hi byte 2721 f2c0 91 63 sta (dlpnt),y 2722 f2c2 2723 f2c2 c8 iny 2724 f2c3 a5 44 lda temp3 ;palette|width 2725 f2c5 91 63 sta (dlpnt),y 2726 f2c7 2727 f2c7 c8 iny 2728 f2c8 a5 45 lda temp4 ;Horizontal position 2729 f2ca 91 63 sta (dlpnt),y 2730 f2cc 2731 f2cc c8 iny 2732 f2cd 94 65 sty dlend,x 2733 f2cf 2734 f2cf - ifconst ATOMICSPRITEUPDATE 2735 f2cf - ldy temp8 2736 f2cf - lda temp6 2737 f2cf - sta (dlpnt),y 2738 f2cf endif 2739 f2cf checkcontinueplotsprite2 2740 f2cf 2741 f2cf a5 46 lda temp5 2742 f2d1 29 07 and #(WZONEHEIGHT-1) 2743 f2d3 2744 f2d3 f0 3d beq doneSPDL ;branch if it is 2745 f2d5 2746 f2d5 ;Create DL entry for lower part of sprite 2747 f2d5 2748 f2d5 e8 inx ;Next region 2749 f2d6 2750 f2d6 e0 18 cpx #WZONECOUNT 2751 f2d8 2752 f2d8 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 2753 f2da 60 rts 2754 f2db continueplotsprite2 2755 f2db 2756 f2db bd 2f f6 lda DLPOINTL,x ;Get pointer to next DL 2757 f2de - ifconst DOUBLEBUFFER 2758 f2de - clc 2759 f2de - adc doublebufferdloffset 2760 f2de endif ; DOUBLEBUFFER 2761 f2de 85 63 sta dlpnt 2762 f2e0 bd 17 f6 lda DLPOINTH,x 2763 f2e3 - ifconst DOUBLEBUFFER 2764 f2e3 - adc #0 2765 f2e3 endif ; DOUBLEBUFFER 2766 f2e3 85 64 sta dlpnt+1 2767 f2e5 b4 65 ldy dlend,x ;Get the index to the end of this DL 2768 f2e7 2769 f2e7 ifconst CHECKOVERWRITE 2770 f2e7 c0 4b cpy #DLLASTOBJ 2771 f2e9 d0 01 bne continueplotsprite2a 2772 f2eb 60 rts 2773 f2ec continueplotsprite2a 2774 f2ec endif 2775 f2ec 2776 f2ec a5 42 lda temp1 ; graphic data, lo byte 2777 f2ee 91 63 sta (dlpnt),y 2778 f2f0 2779 f2f0 ifnconst ATOMICSPRITEUPDATE 2780 f2f0 c8 iny 2781 f2f1 a5 47 lda temp6 2782 f2f3 91 63 sta (dlpnt),y 2783 f2f5 - else 2784 f2f5 - iny 2785 f2f5 - sty temp8 2786 f2f5 - ;lda #0 2787 f2f5 - ;sta (dlpnt),y 2788 f2f5 endif 2789 f2f5 2790 f2f5 c8 iny 2791 f2f6 a5 46 lda temp5 ;Y position 2792 f2f8 2793 f2f8 - if WZONEHEIGHT = 16 2794 f2f8 - and #$0F 2795 f2f8 - eor #$0F 2796 f2f8 endif 2797 f2f8 if WZONEHEIGHT = 8 2798 f2f8 29 07 and #$07 2799 f2fa 49 07 eor #$07 2800 f2fc endif 2801 f2fc 2802 f2fc 85 4a sta temp9 2803 f2fe a5 43 lda temp2 ; graphic data, hi byte 2804 f300 18 clc 2805 f301 e5 4a sbc temp9 2806 f303 91 63 sta (dlpnt),y 2807 f305 2808 f305 c8 iny 2809 f306 a5 44 lda temp3 ;palette|width 2810 f308 91 63 sta (dlpnt),y 2811 f30a 2812 f30a c8 iny 2813 f30b a5 45 lda temp4 ;Horizontal position 2814 f30d 91 63 sta (dlpnt),y 2815 f30f 2816 f30f c8 iny 2817 f310 94 65 sty dlend,x 2818 f312 2819 f312 - ifconst ATOMICSPRITEUPDATE 2820 f312 - ldy temp8 2821 f312 - lda temp6 2822 f312 - sta (dlpnt),y 2823 f312 endif 2824 f312 2825 f312 doneSPDL 2826 f312 60 rts 2827 f313 2828 f313 lockzonex 2829 f313 - ifconst ZONELOCKS 2830 f313 - ldy dlend,x 2831 f313 - cpy #DLLASTOBJ 2832 f313 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 2833 f313 - lda DLPOINTL,x 2834 f313 - ifconst DOUBLEBUFFER 2835 f313 - clc 2836 f313 - adc doublebufferdloffset 2837 f313 - endif ; DOUBLEBUFFER 2838 f313 - sta dlpnt 2839 f313 - lda DLPOINTH,x 2840 f313 - ifconst DOUBLEBUFFER 2841 f313 - adc #0 2842 f313 - endif ; DOUBLEBUFFER 2843 f313 - sta dlpnt+1 2844 f313 - iny 2845 f313 - lda #0 2846 f313 - sta (dlpnt),y 2847 f313 - dey 2848 f313 - tya 2849 f313 - ldy #(DLLASTOBJ-1) 2850 f313 - sta (dlpnt),y 2851 f313 - iny 2852 f313 - sty dlend,x 2853 f313 -lockzonexreturn 2854 f313 - rts 2855 f313 endif ; ZONELOCKS 2856 f313 unlockzonex 2857 f313 - ifconst ZONELOCKS 2858 f313 - ldy dlend,x 2859 f313 - cpy #DLLASTOBJ 2860 f313 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 2861 f313 - lda DLPOINTL,x 2862 f313 - ifconst DOUBLEBUFFER 2863 f313 - clc 2864 f313 - adc doublebufferdloffset 2865 f313 - endif ; DOUBLEBUFFER 2866 f313 - sta dlpnt 2867 f313 - lda DLPOINTH,x 2868 f313 - ifconst DOUBLEBUFFER 2869 f313 - adc #0 2870 f313 - endif ; DOUBLEBUFFER 2871 f313 - sta dlpnt+1 2872 f313 - dey 2873 f313 - ;ldy #(DLLASTOBJ-1) 2874 f313 - lda (dlpnt),y 2875 f313 - tay 2876 f313 - sty dlend,x 2877 f313 -unlockzonexreturn 2878 f313 endif ; ZONELOCKS 2879 f313 60 rts 2880 f314 2881 f314 plotcharloop 2882 f314 ; ** read from a data indirectly pointed to from temp8,temp9 2883 f314 ; ** format is: lo_data, hi_data, palette|width, x, y 2884 f314 ; ** format ends with lo_data | hi_data = 0 2885 f314 2886 f314 - ifconst DOUBLEBUFFER 2887 f314 - lda doublebufferstate 2888 f314 - bne skipplotcharloopwait 2889 f314 endif ; DOUBLEBUFFER 2890 f314 plotcharloopwait 2891 f314 a5 4d lda visibleover 2892 f316 d0 fc bne plotcharloopwait 2893 f318 skipplotcharloopwait 2894 f318 plotcharlooploop 2895 f318 a0 00 ldy #0 2896 f31a b1 49 lda (temp8),y 2897 f31c 85 42 sta temp1 2898 f31e c8 iny 2899 f31f b1 49 lda (temp8),y 2900 f321 85 43 sta temp2 2901 f323 05 42 ora temp1 2902 f325 d0 01 bne plotcharloopcontinue 2903 f327 ;the pointer=0, so return 2904 f327 60 rts 2905 f328 plotcharloopcontinue 2906 f328 c8 iny 2907 f329 b1 49 lda (temp8),y 2908 f32b 85 44 sta temp3 2909 f32d c8 iny 2910 f32e b1 49 lda (temp8),y 2911 f330 85 45 sta temp4 2912 f332 c8 iny 2913 f333 b1 49 lda (temp8),y 2914 f335 ;sta temp5 ; not needed with our late entry. 2915 f335 20 4e f3 jsr plotcharactersskipentry 2916 f338 a5 49 lda temp8 2917 f33a 18 clc 2918 f33b 69 05 adc #5 2919 f33d 85 49 sta temp8 2920 f33f a5 4a lda temp9 2921 f341 69 00 adc #0 2922 f343 85 4a sta temp9 2923 f345 4c 18 f3 jmp plotcharlooploop 2924 f348 2925 f348 plotcharacters 2926 f348 - ifconst DOUBLEBUFFER 2927 f348 - lda doublebufferstate 2928 f348 - bne skipplotcharacterswait 2929 f348 endif ; DOUBLEBUFFER 2930 f348 plotcharacterswait 2931 f348 a5 4d lda visibleover 2932 f34a d0 fc bne plotcharacterswait 2933 f34c skipplotcharacterswait 2934 f34c ;arguments: 2935 f34c ; temp1=lo charactermap 2936 f34c ; temp2=hi charactermap 2937 f34c ; temp3=palette | width byte 2938 f34c ; temp4=x 2939 f34c ; temp5=y 2940 f34c 2941 f34c a5 46 lda temp5 ;Y position 2942 f34e 2943 f34e plotcharactersskipentry 2944 f34e 2945 f34e ;ifconst ZONEHEIGHT 2946 f34e ; if ZONEHEIGHT = 16 2947 f34e ; and #$0F 2948 f34e ; endif 2949 f34e ; if ZONEHEIGHT = 8 2950 f34e ; and #$1F 2951 f34e ; endif 2952 f34e ;else 2953 f34e ; and #$0F 2954 f34e ;endif 2955 f34e 2956 f34e aa tax 2957 f34f bd 2f f6 lda DLPOINTL,x ;Get pointer to DL that the characters are in 2958 f352 - ifconst DOUBLEBUFFER 2959 f352 - clc 2960 f352 - adc doublebufferdloffset 2961 f352 endif ; DOUBLEBUFFER 2962 f352 85 63 sta dlpnt 2963 f354 bd 17 f6 lda DLPOINTH,x 2964 f357 - ifconst DOUBLEBUFFER 2965 f357 - adc #0 2966 f357 endif ; DOUBLEBUFFER 2967 f357 85 64 sta dlpnt+1 2968 f359 2969 f359 ;Create DL entry for the characters 2970 f359 2971 f359 b4 65 ldy dlend,x ;Get the index to the end of this DL 2972 f35b 2973 f35b ifconst CHECKOVERWRITE 2974 f35b c0 4b cpy #DLLASTOBJ 2975 f35d d0 01 bne continueplotcharacters 2976 f35f 60 rts 2977 f360 continueplotcharacters 2978 f360 endif 2979 f360 2980 f360 a5 42 lda temp1 ; character map data, lo byte 2981 f362 91 63 sta (dlpnt),y ;(1) store low address 2982 f364 2983 f364 c8 iny 2984 f365 ad 06 21 lda charactermode 2985 f368 91 63 sta (dlpnt),y ;(2) store mode 2986 f36a 2987 f36a c8 iny 2988 f36b a5 43 lda temp2 ; character map, hi byte 2989 f36d 91 63 sta (dlpnt),y ;(3) store high address 2990 f36f 2991 f36f c8 iny 2992 f370 a5 44 lda temp3 ;palette|width 2993 f372 91 63 sta (dlpnt),y ;(4) store palette|width 2994 f374 2995 f374 c8 iny 2996 f375 a5 45 lda temp4 ;Horizontal position 2997 f377 91 63 sta (dlpnt),y ;(5) store horizontal position 2998 f379 2999 f379 c8 iny 3000 f37a 94 65 sty dlend,x ; save display list end byte 3001 f37c 60 rts 3002 f37d 3003 f37d 3004 f37d - ifconst plotvalueonscreen 3005 f37d -plotcharacterslive 3006 f37d - ; a version of plotcharacters that draws live and minimally disrupts the screen... 3007 f37d - 3008 f37d - ;arguments: 3009 f37d - ; temp1=lo charactermap 3010 f37d - ; temp2=hi charactermap 3011 f37d - ; temp3=palette | width byte 3012 f37d - ; temp4=x 3013 f37d - ; temp5=y 3014 f37d - 3015 f37d - lda temp5 ;Y position 3016 f37d - 3017 f37d - tax 3018 f37d - lda DLPOINTL,x ;Get pointer to DL that the characters are in 3019 f37d - ifconst DOUBLEBUFFER 3020 f37d - clc 3021 f37d - adc doublebufferdloffset 3022 f37d - endif ; DOUBLEBUFFER 3023 f37d - sta dlpnt 3024 f37d - lda DLPOINTH,x 3025 f37d - ifconst DOUBLEBUFFER 3026 f37d - adc #0 3027 f37d - endif ; DOUBLEBUFFER 3028 f37d - sta dlpnt+1 3029 f37d - 3030 f37d - ;Create DL entry for the characters 3031 f37d - 3032 f37d - ldy dlend,x ;Get the index to the end of this DL 3033 f37d - 3034 f37d - ifconst CHECKOVERWRITE 3035 f37d - cpy #DLLASTOBJ 3036 f37d - bne continueplotcharacterslive 3037 f37d - rts 3038 f37d -continueplotcharacterslive 3039 f37d - endif 3040 f37d - 3041 f37d - lda temp1 ; character map data, lo byte 3042 f37d - sta (dlpnt),y ;(1) store low address 3043 f37d - 3044 f37d - iny 3045 f37d - ; we don't add the second byte yet, since the charmap could briefly 3046 f37d - ; render without a proper character map address, width, or position. 3047 f37d - lda charactermode 3048 f37d - sta (dlpnt),y ;(2) store mode 3049 f37d - 3050 f37d - iny 3051 f37d - lda temp2 ; character map, hi byte 3052 f37d - sta (dlpnt),y ;(3) store high address 3053 f37d - 3054 f37d - iny 3055 f37d - lda temp3 ;palette|width 3056 f37d - sta (dlpnt),y ;(4) store palette|width 3057 f37d - 3058 f37d - iny 3059 f37d - lda temp4 ;Horizontal position 3060 f37d - sta (dlpnt),y ;(5) store horizontal position 3061 f37d - 3062 f37d - iny 3063 f37d - sty dlend,x ; save display list end byte 3064 f37d - 3065 f37d - rts 3066 f37d endif ;plotcharacterslive 3067 f37d 3068 f37d ifconst USED_PLOTVALUE 3069 f37d plotvalue 3070 f37d ; calling 7800basic command: 3071 f37d ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 3072 f37d ; ...displays the variable as BCD digits 3073 f37d ; 3074 f37d ; asm sub arguments: 3075 f37d ; temp1=lo charactermap 3076 f37d ; temp2=hi charactermap 3077 f37d ; temp3=palette | width byte 3078 f37d ; temp4=x 3079 f37d ; temp5=y 3080 f37d ; temp6=number of digits 3081 f37d ; temp7=lo variable 3082 f37d ; temp8=hi variable 3083 f37d ; temp9=character mode 3084 f37d 3085 f37d 00 47 plotdigitcount = temp6 3086 f37d 3087 f37d - ifconst ZONELOCKS 3088 f37d - ldx temp5 3089 f37d - ldy dlend,x 3090 f37d - cpy #DLLASTOBJ 3091 f37d - bne carryonplotvalue 3092 f37d - rts 3093 f37d -carryonplotvalue 3094 f37d endif 3095 f37d 3096 f37d a9 00 lda #0 3097 f37f a8 tay 3098 f380 ae ad 01 ldx valbufend 3099 f383 3100 f383 a5 47 lda plotdigitcount 3101 f385 29 01 and #1 3102 f387 f0 07 beq pvnibble2char 3103 f389 a9 00 lda #0 3104 f38b 9d 00 20 sta VALBUFFER,x ; just in case we skip this digit 3105 f38e f0 11 beq pvnibble2char_skipnibble 3106 f390 3107 f390 pvnibble2char 3108 f390 ; high nibble... 3109 f390 b1 48 lda (temp7),y 3110 f392 29 f0 and #$f0 3111 f394 4a lsr 3112 f395 4a lsr 3113 f396 4a lsr 3114 f397 ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 3115 f397 4a lsr 3116 f398 endif 3117 f398 3118 f398 18 clc 3119 f399 65 42 adc temp1 ; add the offset to character graphics to our value 3120 f39b 9d 00 20 sta VALBUFFER,x 3121 f39e e8 inx 3122 f39f c6 47 dec plotdigitcount 3123 f3a1 3124 f3a1 pvnibble2char_skipnibble 3125 f3a1 ; low nibble... 3126 f3a1 b1 48 lda (temp7),y 3127 f3a3 29 0f and #$0f 3128 f3a5 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 3129 f3a5 - asl 3130 f3a5 endif 3131 f3a5 18 clc 3132 f3a6 65 42 adc temp1 ; add the offset to character graphics to our value 3133 f3a8 9d 00 20 sta VALBUFFER,x 3134 f3ab e8 inx 3135 f3ac c8 iny 3136 f3ad 3137 f3ad c6 47 dec plotdigitcount 3138 f3af d0 df bne pvnibble2char 3139 f3b1 3140 f3b1 ;point to the start of our valuebuffer 3141 f3b1 18 clc 3142 f3b2 a9 00 lda #VALBUFFER 3146 f3bb 69 00 adc #0 3147 f3bd 85 43 sta temp2 3148 f3bf 3149 f3bf ;advance valbufend to the end of our value buffer 3150 f3bf 8e ad 01 stx valbufend 3151 f3c2 3152 f3c2 ifnconst plotvalueonscreen 3153 f3c2 4c 48 f3 jmp plotcharacters 3154 f3c5 - else 3155 f3c5 - jmp plotcharacterslive 3156 f3c5 endif 3157 f3c5 3158 f3c5 endif ; USED_PLOTVALUE 3159 f3c5 3160 f3c5 3161 f3c5 - ifconst USED_PLOTVALUEEXTRA 3162 f3c5 -plotdigitcount = temp6 3163 f3c5 -plotvalueextra 3164 f3c5 - ; calling 7800basic command: 3165 f3c5 - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 3166 f3c5 - ; ...displays the variable as BCD digits 3167 f3c5 - ; 3168 f3c5 - ; asm sub arguments: 3169 f3c5 - ; temp1=lo charactermap 3170 f3c5 - ; temp2=hi charactermap 3171 f3c5 - ; temp3=palette | width byte 3172 f3c5 - ; temp4=x 3173 f3c5 - ; temp5=y 3174 f3c5 - ; temp6=number of digits 3175 f3c5 - ; temp7=lo variable 3176 f3c5 - ; temp8=hi variable 3177 f3c5 - 3178 f3c5 - lda #0 3179 f3c5 - tay 3180 f3c5 - ldx valbufend 3181 f3c5 - ifnconst plotvalueonscreen 3182 f3c5 - sta VALBUFFER,x 3183 f3c5 - endif 3184 f3c5 - 3185 f3c5 - lda plotdigitcount 3186 f3c5 - and #1 3187 f3c5 - 3188 f3c5 - bne pvnibble2char_skipnibbleextra 3189 f3c5 - 3190 f3c5 -pvnibble2charextra 3191 f3c5 - ; high nibble... 3192 f3c5 - lda (temp7),y 3193 f3c5 - and #$f0 3194 f3c5 - lsr 3195 f3c5 - lsr 3196 f3c5 - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 3197 f3c5 - lsr 3198 f3c5 - endif 3199 f3c5 - clc 3200 f3c5 - adc temp1 ; add the offset to character graphics to our value 3201 f3c5 - sta VALBUFFER,x 3202 f3c5 - inx 3203 f3c5 - 3204 f3c5 - ; second half of the digit 3205 f3c5 - clc 3206 f3c5 - adc #1 3207 f3c5 - sta VALBUFFER,x 3208 f3c5 - inx 3209 f3c5 - 3210 f3c5 -pvnibble2char_skipnibbleextra 3211 f3c5 - ; low nibble... 3212 f3c5 - lda (temp7),y 3213 f3c5 - and #$0f 3214 f3c5 - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 3215 f3c5 - asl 3216 f3c5 - endif 3217 f3c5 - asl 3218 f3c5 - 3219 f3c5 - clc 3220 f3c5 - adc temp1 ; add the offset to character graphics to our value 3221 f3c5 - sta VALBUFFER,x 3222 f3c5 - inx 3223 f3c5 - 3224 f3c5 - clc 3225 f3c5 - adc #1 3226 f3c5 - sta VALBUFFER,x 3227 f3c5 - inx 3228 f3c5 - iny 3229 f3c5 - 3230 f3c5 - dec plotdigitcount 3231 f3c5 - bne pvnibble2charextra 3232 f3c5 - 3233 f3c5 - ;point to the start of our valuebuffer 3234 f3c5 - clc 3235 f3c5 - lda #VALBUFFER 3239 f3c5 - adc #0 3240 f3c5 - sta temp2 3241 f3c5 - 3242 f3c5 - ;advance valbufend to the end of our value buffer 3243 f3c5 - stx valbufend 3244 f3c5 - 3245 f3c5 - ifnconst plotvalueonscreen 3246 f3c5 - jmp plotcharacters 3247 f3c5 - else 3248 f3c5 - jmp plotcharacterslive 3249 f3c5 - endif 3250 f3c5 endif ; USED_PLOTVALUEEXTRA 3251 f3c5 3252 f3c5 boxcollision 3253 f3c5 ; the worst case cycle-time for the code below is 43 cycles. 3254 f3c5 ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 3255 f3c5 3256 f3c5 ;__boxx1 = accumulator 3257 f3c5 ;__boxy1 = y 3258 f3c5 00 44 __boxw1 = temp3 3259 f3c5 00 45 __boxh1 = temp4 3260 f3c5 3261 f3c5 00 46 __boxx2 = temp5 3262 f3c5 00 47 __boxy2 = temp6 3263 f3c5 00 48 __boxw2 = temp7 3264 f3c5 00 49 __boxh2 = temp8 3265 f3c5 3266 f3c5 DoXCollisionCheck 3267 f3c5 ;lda __boxx1 ; skipped. already in the accumulator 3268 f3c5 c5 46 cmp __boxx2 ;3 3269 f3c7 b0 07 bcs X1isbiggerthanX2 ;2/3 3270 f3c9 X2isbiggerthanX1 3271 f3c9 ; carry is clear 3272 f3c9 65 44 adc __boxw1 ;3 3273 f3cb c5 46 cmp __boxx2 ;3 3274 f3cd b0 08 bcs DoYCollisionCheck ;3/2 3275 f3cf 60 rts ;6 - carry clear, no collision 3276 f3d0 X1isbiggerthanX2 3277 f3d0 18 clc ;2 3278 f3d1 e5 48 sbc __boxw2 ;3 3279 f3d3 c5 46 cmp __boxx2 ;3 3280 f3d5 b0 13 bcs noboxcollision ;3/2 3281 f3d7 DoYCollisionCheck 3282 f3d7 98 tya ; 2 ; use to be "lda __boxy1" 3283 f3d8 c5 47 cmp __boxy2 ;3 3284 f3da b0 05 bcs Y1isbiggerthanY2 ;3/2 3285 f3dc Y2isbiggerthanY1 3286 f3dc ; carry is clear 3287 f3dc 65 45 adc __boxh1 ;3 3288 f3de c5 47 cmp __boxy2 ;3 3289 f3e0 60 rts ;6 3290 f3e1 Y1isbiggerthanY2 3291 f3e1 18 clc ;2 3292 f3e2 e5 49 sbc __boxh2 ;3 3293 f3e4 c5 47 cmp __boxy2 ;3 3294 f3e6 b0 02 bcs noboxcollision ;3/2 3295 f3e8 yesboxcollision 3296 f3e8 38 sec ;2 3297 f3e9 60 rts ;6 3298 f3ea noboxcollision 3299 f3ea 18 clc ;2 3300 f3eb 60 rts ;6 3301 f3ec 3302 f3ec randomize 3303 f3ec a5 40 lda rand 3304 f3ee 4a lsr 3305 f3ef 26 41 rol rand16 3306 f3f1 90 02 bcc noeor 3307 f3f3 49 b4 eor #$B4 3308 f3f5 noeor 3309 f3f5 85 40 sta rand 3310 f3f7 45 41 eor rand16 3311 f3f9 60 rts 3312 f3fa 3313 f3fa ; bcd conversion routine courtesy Omegamatrix 3314 f3fa ; http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 3315 f3fa converttobcd 3316 f3fa ;value to convert is in the accumulator 3317 f3fa 85 42 sta temp1 3318 f3fc 4a lsr 3319 f3fd 65 42 adc temp1 3320 f3ff 6a ror 3321 f400 4a lsr 3322 f401 4a lsr 3323 f402 65 42 adc temp1 3324 f404 6a ror 3325 f405 65 42 adc temp1 3326 f407 6a ror 3327 f408 4a lsr 3328 f409 29 3c and #$3C 3329 f40b 85 43 sta temp2 3330 f40d 4a lsr 3331 f40e 65 43 adc temp2 3332 f410 65 42 adc temp1 3333 f412 60 rts ; return the result in the accumulator 3334 f413 3335 f413 ; Y and A contain multiplicands, result in A 3336 f413 mul8 3337 f413 84 42 sty temp1 3338 f415 85 43 sta temp2 3339 f417 a9 00 lda #0 3340 f419 reptmul8 3341 f419 46 43 lsr temp2 3342 f41b 90 03 bcc skipmul8 3343 f41d 18 clc 3344 f41e 65 42 adc temp1 3345 f420 ;bcs donemul8 might save cycles? 3346 f420 skipmul8 3347 f420 ;beq donemul8 might save cycles? 3348 f420 06 42 asl temp1 3349 f422 d0 f5 bne reptmul8 3350 f424 donemul8 3351 f424 60 rts 3352 f425 3353 f425 div8 3354 f425 ; A=numerator Y=denominator, result in A 3355 f425 c0 02 cpy #2 3356 f427 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 3357 f429 84 42 sty temp1 3358 f42b a0 ff ldy #$ff 3359 f42d div8loop 3360 f42d e5 42 sbc temp1 3361 f42f c8 iny 3362 f430 b0 fb bcs div8loop 3363 f432 div8end 3364 f432 98 tya 3365 f433 ; result in A 3366 f433 60 rts 3367 f434 3368 f434 ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 3369 f434 mul16 3370 f434 84 42 sty temp1 3371 f436 85 43 sta temp2 3372 f438 3373 f438 a9 00 lda #0 3374 f43a a2 08 ldx #8 3375 f43c 46 42 lsr temp1 3376 f43e mul16_1 3377 f43e 90 03 bcc mul16_2 3378 f440 18 clc 3379 f441 65 43 adc temp2 3380 f443 mul16_2 3381 f443 6a ror 3382 f444 66 42 ror temp1 3383 f446 ca dex 3384 f447 d0 f5 bne mul16_1 3385 f449 85 43 sta temp2 3386 f44b 60 rts 3387 f44c 3388 f44c ; div int/int 3389 f44c ; numerator in A, denom in temp1 3390 f44c ; returns with quotient in A, remainder in temp1 3391 f44c div16 3392 f44c 85 43 sta temp2 3393 f44e 84 42 sty temp1 3394 f450 a9 00 lda #0 3395 f452 a2 08 ldx #8 3396 f454 06 43 asl temp2 3397 f456 div16_1 3398 f456 2a rol 3399 f457 c5 42 cmp temp1 3400 f459 90 02 bcc div16_2 3401 f45b e5 42 sbc temp1 3402 f45d div16_2 3403 f45d 26 43 rol temp2 3404 f45f ca dex 3405 f460 d0 f4 bne div16_1 3406 f462 85 42 sta temp1 3407 f464 a5 43 lda temp2 3408 f466 60 rts 3409 f467 3410 f467 - ifconst bankswitchmode 3411 f467 -BS_jsr 3412 f467 - ifconst MCPDEVCART 3413 f467 - ora #$18 3414 f467 - sta $3000 3415 f467 - else 3416 f467 - sta $8000 3417 f467 - endif 3418 f467 - pla 3419 f467 - tax 3420 f467 - pla 3421 f467 - rts 3422 f467 - 3423 f467 -BS_return 3424 f467 - pla ; bankswitch bank 3425 f467 - ifconst BANKRAM 3426 f467 - sta currentbank 3427 f467 - ora currentrambank 3428 f467 - endif 3429 f467 - ifconst MCPDEVCART 3430 f467 - ora #$18 3431 f467 - sta $3000 3432 f467 - else 3433 f467 - sta $8000 3434 f467 - endif 3435 f467 - pla ; bankswitch $0 flag 3436 f467 - rts 3437 f467 endif 3438 f467 3439 f467 checkselectswitch 3440 f467 ad 82 02 lda SWCHB ; first check the real select switch... 3441 f46a 29 02 and #%00000010 3442 f46c ifnconst MOUSESUPPORT 3443 f46c f0 05 beq checkselectswitchreturn ; switch is pressed 3444 f46e ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 3445 f471 29 b0 and #%10110000 ; R_DU 3446 f473 endif ; MOUSESUPPORT 3447 f473 checkselectswitchreturn 3448 f473 60 rts 3449 f474 3450 f474 checkresetswitch 3451 f474 ad 82 02 lda SWCHB ; first check the real reset switch... 3452 f477 29 01 and #%00000001 3453 f479 ifnconst MOUSESUPPORT 3454 f479 f0 05 beq checkresetswitchreturn ; switch is pressed 3455 f47b ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 3456 f47e 29 70 and #%01110000 ; _LDU 3457 f480 endif ; MOUSESUPPORT 3458 f480 checkresetswitchreturn 3459 f480 60 rts 3460 f481 3461 f481 - ifconst FINESCROLLENABLED 3462 f481 -finescrolldlls 3463 f481 - ldx temp1 ; first DLL index x3 3464 f481 - lda DLLMEM,x 3465 f481 - and #%11110000 3466 f481 - ora finescrolly 3467 f481 - sta DLLMEM,x 3468 f481 - 3469 f481 - ldx temp2 ; last DLL index x3 3470 f481 - lda DLLMEM,x 3471 f481 - and #%11110000 3472 f481 - ora finescrolly 3473 f481 - eor #(WZONEHEIGHT-1) 3474 f481 - sta DLLMEM,x 3475 f481 - rts 3476 f481 endif ; FINESCROLLENABLED 3477 f481 3478 f481 - ifconst USED_ADJUSTVISIBLE 3479 f481 -adjustvisible 3480 f481 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 3481 f481 - jsr waitforvblankstart ; ensure vblank just started 3482 f481 - ldx visibleDLLstart 3483 f481 -findfirstinterrupt 3484 f481 - lda DLLMEM,x 3485 f481 - bmi foundfirstinterrupt 3486 f481 - inx 3487 f481 - inx 3488 f481 - inx 3489 f481 - bne findfirstinterrupt 3490 f481 -foundfirstinterrupt 3491 f481 - and #%01111111 ; clear the interrupt bit 3492 f481 - sta DLLMEM,x 3493 f481 - ifconst DOUBLEBUFFER 3494 f481 - sta DLLMEM+DBOFFSET,x 3495 f481 - endif ; DOUBLEBUFFER 3496 f481 - ldx overscanDLLstart 3497 f481 -findlastinterrupt 3498 f481 - lda DLLMEM,x 3499 f481 - bmi foundlastinterrupt 3500 f481 - dex 3501 f481 - dex 3502 f481 - dex 3503 f481 - bne findlastinterrupt 3504 f481 -foundlastinterrupt 3505 f481 - and #%01111111 ; clear the interrupt bit 3506 f481 - sta DLLMEM,x 3507 f481 - ifconst DOUBLEBUFFER 3508 f481 - sta DLLMEM+DBOFFSET,x 3509 f481 - endif ; DOUBLEBUFFER 3510 f481 - ;now we need to set the new interrupts 3511 f481 - clc 3512 f481 - lda temp1 3513 f481 - adc visibleDLLstart 3514 f481 - tax 3515 f481 - lda DLLMEM,x 3516 f481 - ora #%10000000 3517 f481 - sta DLLMEM,x 3518 f481 - ifconst DOUBLEBUFFER 3519 f481 - sta DLLMEM+DBOFFSET,x 3520 f481 - endif ; DOUBLEBUFFER 3521 f481 - clc 3522 f481 - lda temp2 3523 f481 - adc visibleDLLstart 3524 f481 - tax 3525 f481 - lda DLLMEM,x 3526 f481 - ora #%10000000 3527 f481 - sta DLLMEM,x 3528 f481 - ifconst DOUBLEBUFFER 3529 f481 - sta DLLMEM+DBOFFSET,x 3530 f481 - endif ; DOUBLEBUFFER 3531 f481 - jsr vblankresync 3532 f481 - rts 3533 f481 endif ; USED_ADJUSTVISIBLE 3534 f481 3535 f481 vblankresync 3536 f481 20 1f f5 jsr waitforvblankstart ; ensure vblank just started 3537 f484 a9 00 lda #0 3538 f486 85 4d sta visibleover 3539 f488 a9 03 lda #3 3540 f48a 8d b2 01 sta interruptindex 3541 f48d 60 rts 3542 f48e 3543 f48e createallgamedlls 3544 f48e a2 00 ldx #0 3545 f490 a9 19 lda #NVLINES 3546 f492 ac 09 21 ldy paldetected 3547 f495 f0 03 beq skipcreatePALpadding 3548 f497 18 clc 3549 f498 69 15 adc #21 3550 f49a skipcreatePALpadding 3551 f49a 20 cf f4 jsr createnonvisibledlls 3552 f49d 8e 3c 21 stx visibleDLLstart 3553 f4a0 20 00 f5 jsr createvisiblezones 3554 f4a3 8e 3d 21 stx overscanDLLstart 3555 f4a6 createallgamedllscontinue 3556 f4a6 a9 50 lda #(NVLINES+55) ; extras for PAL 3557 f4a8 20 cf f4 jsr createnonvisibledlls 3558 f4ab 3559 f4ab ae 3c 21 ldx visibleDLLstart 3560 f4ae bd 00 18 lda DLLMEM,x 3561 f4b1 09 80 ora #%10000000 ; NMI 1 - start of visible screen 3562 f4b3 9d 00 18 sta DLLMEM,x 3563 f4b6 - ifconst DOUBLEBUFFER 3564 f4b6 - sta DLLMEM+DBOFFSET,x 3565 f4b6 endif ; DOUBLEBUFFER 3566 f4b6 3567 f4b6 ae 3d 21 ldx overscanDLLstart 3568 f4b9 bd 00 18 lda DLLMEM,x 3569 f4bc 09 83 ora #%10000011 ; NMI 2 - end of visible screen 3570 f4be 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 3571 f4c0 9d 00 18 sta DLLMEM,x 3572 f4c3 - ifconst DOUBLEBUFFER 3573 f4c3 - sta DLLMEM+DBOFFSET,x 3574 f4c3 endif ; DOUBLEBUFFER 3575 f4c3 3576 f4c3 e8 inx 3577 f4c4 e8 inx 3578 f4c5 e8 inx 3579 f4c6 3580 f4c6 bd 00 18 lda DLLMEM,x 3581 f4c9 09 80 ora #%10000000 ; NMI 3 - deeper overscan 3582 f4cb 9d 00 18 sta DLLMEM,x 3583 f4ce - ifconst DOUBLEBUFFER 3584 f4ce - sta DLLMEM+DBOFFSET,x 3585 f4ce endif ; DOUBLEBUFFER 3586 f4ce 3587 f4ce 60 rts 3588 f4cf 3589 f4cf createnonvisibledlls 3590 f4cf 85 42 sta temp1 3591 f4d1 4a lsr 3592 f4d2 4a lsr 3593 f4d3 4a lsr 3594 f4d4 4a lsr ; /16 3595 f4d5 f0 09 beq skipcreatenonvisibledlls1loop 3596 f4d7 a8 tay 3597 f4d8 createnonvisibledlls1loop 3598 f4d8 a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 3599 f4da 20 ef f4 jsr createblankdllentry 3600 f4dd 88 dey 3601 f4de d0 f8 bne createnonvisibledlls1loop 3602 f4e0 skipcreatenonvisibledlls1loop 3603 f4e0 a5 42 lda temp1 3604 f4e2 29 0f and #%00001111 3605 f4e4 f0 08 beq createnonvisibledllsreturn 3606 f4e6 38 sec 3607 f4e7 e9 01 sbc #1 3608 f4e9 09 40 ora #%01000000 3609 f4eb 20 ef f4 jsr createblankdllentry 3610 f4ee createnonvisibledllsreturn 3611 f4ee 60 rts 3612 f4ef 3613 f4ef createblankdllentry 3614 f4ef 9d 00 18 sta DLLMEM,x 3615 f4f2 - ifconst DOUBLEBUFFER 3616 f4f2 - sta DLLMEM+DBOFFSET,x 3617 f4f2 endif ; DOUBLEBUFFER 3618 f4f2 e8 inx 3619 f4f3 a9 21 lda #$21 ; blank 3620 f4f5 9d 00 18 sta DLLMEM,x 3621 f4f8 - ifconst DOUBLEBUFFER 3622 f4f8 - sta DLLMEM+DBOFFSET,x 3623 f4f8 endif ; DOUBLEBUFFER 3624 f4f8 e8 inx 3625 f4f9 a9 00 lda #$00 3626 f4fb 9d 00 18 sta DLLMEM,x 3627 f4fe - ifconst DOUBLEBUFFER 3628 f4fe - sta DLLMEM+DBOFFSET,x 3629 f4fe endif ; DOUBLEBUFFER 3630 f4fe e8 inx 3631 f4ff 60 rts 3632 f500 3633 f500 createvisiblezones 3634 f500 a0 00 ldy #0 3635 f502 createvisiblezonesloop 3636 f502 b9 47 f6 lda.w DLHEIGHT,y 3637 f505 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 3638 f507 9d 00 18 sta DLLMEM,x 3639 f50a - ifconst DOUBLEBUFFER 3640 f50a - sta DLLMEM+DBOFFSET,x 3641 f50a endif ; DOUBLEBUFFER 3642 f50a e8 inx 3643 f50b b9 17 f6 lda DLPOINTH,y 3644 f50e 9d 00 18 sta DLLMEM,x 3645 f511 - ifconst DOUBLEBUFFER 3646 f511 - sta DLLMEM+DBOFFSET,x 3647 f511 endif ; DOUBLEBUFFER 3648 f511 e8 inx 3649 f512 b9 2f f6 lda DLPOINTL,y 3650 f515 9d 00 18 sta DLLMEM,x 3651 f518 - ifconst DOUBLEBUFFER 3652 f518 - clc 3653 f518 - adc #DOUBLEBUFFEROFFSET 3654 f518 - sta DLLMEM+DBOFFSET,x 3655 f518 - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 3656 f518 - inc DLLMEM+DBOFFSET-1,x 3657 f518 -skiphidoublebufferadjust 3658 f518 endif ; DOUBLEBUFFER 3659 f518 e8 inx 3660 f519 c8 iny 3661 f51a c0 18 cpy #WZONECOUNT 3662 f51c d0 e4 bne createvisiblezonesloop 3663 f51e 60 rts 3664 f51f 3665 f51f waitforvblankstart 3666 f51f visibleoverwait 3667 f51f 24 28 BIT MSTAT 3668 f521 10 fc bpl visibleoverwait 3669 f523 vblankstartwait 3670 f523 24 28 BIT MSTAT 3671 f525 30 fc bmi vblankstartwait 3672 f527 60 rts 3673 f528 3674 f528 - ifconst DOUBLEBUFFER 3675 f528 -flipdisplaybufferreturn 3676 f528 - rts 3677 f528 -flipdisplaybuffer 3678 f528 - lda doublebufferstate 3679 f528 - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 3680 f528 - 3681 f528 - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 3682 f528 - 3683 f528 - lda doublebufferstate 3684 f528 - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 3685 f528 - tax 3686 f528 - 3687 f528 - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 3688 f528 - 3689 f528 -flipdisplaybufferwait1 3690 f528 - lda visibleover 3691 f528 - beq flipdisplaybufferwait1 3692 f528 - 3693 f528 -flipdisplaybufferwait 3694 f528 - lda visibleover 3695 f528 - bne flipdisplaybufferwait 3696 f528 - 3697 f528 - lda doublebufferminimumframetarget 3698 f528 - beq skipminimumframecode 3699 f528 - lda doublebufferminimumframeindex 3700 f528 - bne flipdisplaybufferwait1 3701 f528 - lda doublebufferminimumframetarget 3702 f528 - sta doublebufferminimumframeindex 3703 f528 -skipminimumframecode 3704 f528 - 3705 f528 - lda DLLMEMLutHi,x 3706 f528 - sta DPPH 3707 f528 - lda DLLMEMLutLo,x 3708 f528 - sta DPPL 3709 f528 - 3710 f528 - lda NewPageflipstate,x 3711 f528 - sta doublebufferstate 3712 f528 - lda NewPageflipoffset,x 3713 f528 - sta doublebufferdloffset 3714 f528 - 3715 f528 - lda doublebufferbufferdirty 3716 f528 - beq flipdisplaybufferreturn 3717 f528 - 3718 f528 - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 3719 f528 - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 3720 f528 - ; from the displayed buffer to the working buffer... 3721 f528 - 3722 f528 - lda doublebufferdloffset 3723 f528 - eor #DOUBLEBUFFEROFFSET 3724 f528 - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 3725 f528 - 3726 f528 - ldx #(WZONECOUNT-1) 3727 f528 -copybufferzoneloop 3728 f528 - 3729 f528 - lda DLPOINTL,x 3730 f528 - clc 3731 f528 - adc doublebufferdloffset 3732 f528 - sta temp1 3733 f528 - lda DLPOINTH,x 3734 f528 - adc #0 3735 f528 - sta temp2 3736 f528 - 3737 f528 - lda DLPOINTL,x 3738 f528 - clc 3739 f528 - adc temp6 3740 f528 - sta temp3 3741 f528 - lda DLPOINTH,x 3742 f528 - adc #0 3743 f528 - sta temp4 3744 f528 - 3745 f528 - lda dlendsave,x 3746 f528 - tay 3747 f528 -copybuffercharsloop 3748 f528 - lda (temp3),y 3749 f528 - sta (temp1),y 3750 f528 - dey 3751 f528 - bpl copybuffercharsloop 3752 f528 - dex 3753 f528 - bpl copybufferzoneloop 3754 f528 - lda #0 3755 f528 - sta doublebufferbufferdirty 3756 f528 - rts 3757 f528 - 3758 f528 -doublebufferoff 3759 f528 - lda #1 3760 f528 - sta doublebufferstate 3761 f528 - jsr flipdisplaybuffer 3762 f528 - lda #0 3763 f528 - sta doublebufferstate 3764 f528 - sta doublebufferdloffset 3765 f528 - rts 3766 f528 - 3767 f528 -DLLMEMLutLo 3768 f528 - .byte DLLMEM,>(DLLMEM+DBOFFSET) 3771 f528 -NewPageflipstate 3772 f528 - .byte 3,1 3773 f528 -NewPageflipoffset 3774 f528 - .byte DOUBLEBUFFEROFFSET,0 3775 f528 - 3776 f528 endif ; DOUBLEBUFFER 3777 f528 3778 f528 - ifconst MOUSESUPPORT 3779 f528 - ifnconst DRIVINGSUPPORT 3780 f528 -rotationalcompare 3781 f528 - ; new=00, old=xx 3782 f528 - .byte $00, $01, $ff, $00 3783 f528 - ; new=01, old=xx 3784 f528 - .byte $ff, $00, $00, $01 3785 f528 - ; new=10, old=xx 3786 f528 - .byte $01, $00, $00, $ff 3787 f528 - ; new=11, old=xx 3788 f528 - .byte $00, $ff, $01, $00 3789 f528 - endif 3790 f528 - 3791 f528 - ; 0000YyXx st mouse 3792 f528 - ; 0000xyXY amiga mouse 3793 f528 -amigatoataribits ; swap bits 1 and 4... 3794 f528 - .byte %00000000, %00001000, %00000010, %00001010 3795 f528 - .byte %00000100, %00001100, %00000110, %00001110 3796 f528 - .byte %00000001, %00001001, %00000011, %00001011 3797 f528 - .byte %00000101, %00001101, %00000111, %00001111 3798 f528 - 3799 f528 -mouseupdate 3800 f528 - ;LONGDEBUG = 1 3801 f528 - lda SWCHA 3802 f528 - and #$0f 3803 f528 - sta inttemp2 3804 f528 - lda SWCHA 3805 f528 - lsr 3806 f528 - lsr 3807 f528 - lsr 3808 f528 - lsr 3809 f528 - sta inttemp1 3810 f528 - 3811 f528 - lda port0control,x 3812 f528 - cmp #8 ; st mouse 3813 f528 - beq domousecontrol 3814 f528 - cmp #9 ; amiga mouse 3815 f528 - bne skipmousecontrol 3816 f528 - ; st mice encode on different bits/joystick-lines than amiga mice... 3817 f528 - ; 0000YyXx st mouse 3818 f528 - ; 0000xyXY amiga mouse 3819 f528 - ; ...so can shuffle the amiga bits to reuse the st driver. 3820 f528 - lda inttemp1,x 3821 f528 - tay 3822 f528 - lda amigatoataribits,y 3823 f528 - sta inttemp1,x 3824 f528 -domousecontrol 3825 f528 - ;port X has a mouse enabled 3826 f528 - lda inttemp1,x 3827 f528 - and #%00000011 3828 f528 - asl 3829 f528 - asl 3830 f528 - ora mousecodex0,x 3831 f528 - and #%00001111 3832 f528 - tay 3833 f528 - lda rotationalcompare,y 3834 f528 - clc 3835 f528 - adc mousex0,x 3836 f528 - sta mousex0,x 3837 f528 - tya 3838 f528 - lsr 3839 f528 - lsr 3840 f528 - sta mousecodex0,x 3841 f528 - 3842 f528 - lda inttemp1,x 3843 f528 - and #%00001100 3844 f528 - ora mousecodey0,x 3845 f528 - and #%00001111 3846 f528 - tay 3847 f528 - lda rotationalcompare,y 3848 f528 - asl ; *2 for y axis, since it has ~double the resolution of x 3849 f528 - clc 3850 f528 - adc mousey0,x 3851 f528 - sta mousey0,x 3852 f528 - tya 3853 f528 - lsr 3854 f528 - lsr 3855 f528 - sta mousecodey0,x 3856 f528 -skipmousecontrol 3857 f528 - jmp longreadloopreturn 3858 f528 endif ; MOUSESUPPORT 3859 f528 3860 f528 mousebuttonhandler ; outside of conditional, so button handler entry in LUT is valid 3861 f528 - ifconst MOUSESUPPORT 3862 f528 - ; stick the mouse buttons in the correct shadow register... 3863 f528 - txa 3864 f528 - asl 3865 f528 - tay ; y=x*2 3866 f528 - lda INPT1,y 3867 f528 - eor #%10000000 3868 f528 - lsr 3869 f528 - sta sINPT1,x 3870 f528 - 3871 f528 - lda INPT4,x 3872 f528 - and #%10000000 3873 f528 - eor #%10000000 3874 f528 - ora sINPT1,x 3875 f528 - sta sINPT1,x 3876 f528 - jmp buttonreadloopreturn 3877 f528 endif ; MOUSESUPPORT 3878 f528 3879 f528 - ifconst DRIVINGSUPPORT 3880 f528 -rotationalcompare 3881 f528 - ; new=00, old=xx 3882 f528 - .byte $00, $01, $ff, $00 3883 f528 - ; new=01, old=xx 3884 f528 - .byte $ff, $00, $00, $01 3885 f528 - ; new=10, old=xx 3886 f528 - .byte $01, $00, $00, $ff 3887 f528 - ; new=11, old=xx 3888 f528 - .byte $00, $ff, $01, $00 3889 f528 -drivingupdate 3890 f528 - ldx #1 3891 f528 - lda port1control 3892 f528 - cmp #6 ; check if port1=driving 3893 f528 - bne skipfirstdrivingcontrol 3894 f528 - lda SWCHA 3895 f528 - and #%00000011 3896 f528 - asl 3897 f528 - asl 3898 f528 -drivingupdateloop 3899 f528 - ora controller0statesave,x 3900 f528 - tay 3901 f528 - lda rotationalcompare,y 3902 f528 - clc 3903 f528 - adc drivingposition0,x 3904 f528 - sta drivingposition0,x 3905 f528 - tya 3906 f528 - lsr 3907 f528 - lsr 3908 f528 - sta controller0statesave,x 3909 f528 -skipfirstdrivingcontrol 3910 f528 - lda port0control 3911 f528 - cmp #6 ; check if port0=driving 3912 f528 - bne drivingcontrolsloopdone 3913 f528 - lda SWCHA 3914 f528 - and #%00110000 3915 f528 - lsr 3916 f528 - lsr 3917 f528 - dex 3918 f528 - bpl drivingupdateloop 3919 f528 -drivingcontrolsloopdone 3920 f528 - rts 3921 f528 endif ; DRIVINGSUPPORT 3922 f528 3923 f528 - ifconst KEYPADSUPPORT 3924 f528 - ; ** select keypad rows 0 to 3 over 4 frames... 3925 f528 -keypadrowselect 3926 f528 - ldy #0 3927 f528 - lda port0control 3928 f528 - cmp #7 3929 f528 - bne skipport0val 3930 f528 - iny ; y=y+1 3931 f528 -skipport0val 3932 f528 - lda port1control 3933 f528 - cmp #7 3934 f528 - bne skipport1val 3935 f528 - iny 3936 f528 - iny ; y=y+2 3937 f528 -skipport1val 3938 f528 - lda keyrowdirectionmask,y 3939 f528 - sta CTLSWA 3940 f528 - tya 3941 f528 - asl 3942 f528 - asl 3943 f528 - sta inttemp1 3944 f528 - lda framecounter 3945 f528 - and #3 3946 f528 - ora inttemp1 3947 f528 - tax 3948 f528 - lda keyrowselectvalue,x 3949 f528 - sta SWCHA 3950 f528 - rts 3951 f528 - 3952 f528 -keyrowdirectionmask 3953 f528 - .byte #%00000000 ; 0 : port0=input port1=input 3954 f528 - .byte #%11110000 ; 1 : port0=output port1=input 3955 f528 - .byte #%00001111 ; 2 : port0=input port1=output 3956 f528 - .byte #%11111111 ; 3 : port0=output port1=output 3957 f528 - 3958 f528 -keyrowselectvalue 3959 f528 - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 3960 f528 - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 3961 f528 - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 3962 f528 - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 3963 f528 endif ; KEYPADSUPPORT 3964 f528 3965 f528 - ifconst KEYPADSUPPORT 3966 f528 -keypadcolumnread 3967 f528 - lda framecounter 3968 f528 - and #3 3969 f528 - asl ; x2 because keypad variables are interleaved 3970 f528 - tax 3971 f528 - 3972 f528 - lda #0 3973 f528 - sta keypadmatrix0a,x 3974 f528 - sta keypadmatrix1a,x 3975 f528 - 3976 f528 - lda INPT0 3977 f528 - cmp #$80 3978 f528 - rol keypadmatrix0a,x 3979 f528 - lda INPT1 3980 f528 - cmp #$80 3981 f528 - rol keypadmatrix0a,x 3982 f528 - lda INPT4 3983 f528 - cmp #$80 3984 f528 - rol keypadmatrix0a,x 3985 f528 - lda keypadmatrix0a,x 3986 f528 - eor #%00000111 3987 f528 - sta keypadmatrix0a,x 3988 f528 - 3989 f528 - rol keypadmatrix1a,x 3990 f528 - lda INPT2 3991 f528 - cmp #$80 3992 f528 - rol keypadmatrix1a,x 3993 f528 - lda INPT3 3994 f528 - cmp #$80 3995 f528 - rol keypadmatrix1a,x 3996 f528 - lda INPT5 3997 f528 - cmp #$80 3998 f528 - rol keypadmatrix1a,x 3999 f528 - lda keypadmatrix1a,x 4000 f528 - eor #%00000111 4001 f528 - sta keypadmatrix1a,x 4002 f528 - 4003 f528 - rts 4004 f528 endif ; KEYPADSUPPORT 4005 f528 4006 f528 setportforinput 4007 f528 a5 e4 lda CTLSWAs 4008 f52a 3d 33 f5 and allpinsinputlut,x 4009 f52d 85 e4 sta CTLSWAs 4010 f52f 8d 81 02 sta CTLSWA 4011 f532 60 rts 4012 f533 4013 f533 allpinsinputlut 4014 f533 0f f0 .byte.b $0F, $F0 4015 f535 4016 f535 setonebuttonmode 4017 f535 a9 14 lda #$14 4018 f537 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 4019 f53a a5 e5 lda CTLSWBs 4020 f53c 1d 45 f5 ora thisjoy2buttonbit,x 4021 f53f 85 e5 sta CTLSWBs 4022 f541 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 4023 f544 60 rts 4024 f545 4025 f545 thisjoy2buttonbit 4026 f545 04 10 .byte.b $04, $10 4027 f547 4028 f547 settwobuttonmode 4029 f547 a9 14 lda #$14 4030 f549 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 4031 f54c a5 e5 lda CTLSWBs 4032 f54e 3d 57 f5 and thisjoy2buttonmask,x 4033 f551 85 e5 sta CTLSWBs 4034 f553 8d 82 02 sta SWCHB 4035 f556 60 rts 4036 f557 4037 f557 thisjoy2buttonmask 4038 f557 fb ef .byte.b $fb, $ef 4039 f559 4040 f559 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4041 f559 4042 f559 START 4043 f559 start 4044 f559 4045 f559 ;******** more or less the Atari recommended startup procedure 4046 f559 4047 f559 78 sei 4048 f55a d8 cld 4049 f55b 4050 f55b ifnconst NOTIALOCK 4051 f55b a9 07 lda #$07 4052 f55d - else 4053 f55d - lda #$06 4054 f55d endif 4055 f55d 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 4056 f55f a9 7f lda #$7F 4057 f561 85 3c sta CTRL ;disable DMA 4058 f563 a9 00 lda #$00 4059 f565 85 38 sta OFFSET 4060 f567 ifnconst NOTIALOCK 4061 f567 85 01 sta INPTCTRL 4062 f569 endif 4063 f569 a2 ff ldx #$FF 4064 f56b 9a txs 4065 f56c 4066 f56c ;************** Clear Memory 4067 f56c 4068 f56c a2 40 ldx #$40 4069 f56e a9 00 lda #$00 4070 f570 crloop1 4071 f570 95 00 sta $00,x ;Clear zero page 4072 f572 9d 00 01 sta $100,x ;Clear page 1 4073 f575 e8 inx 4074 f576 d0 f8 bne crloop1 4075 f578 4076 f578 4077 f578 a0 00 ldy #$00 ;Clear Ram 4078 f57a a9 18 lda #$18 ;Start at $1800 4079 f57c 85 81 sta $81 4080 f57e a9 00 lda #$00 4081 f580 85 80 sta $80 4082 f582 crloop3 4083 f582 a9 00 lda #$00 4084 f584 91 80 sta ($80),y ;Store data 4085 f586 c8 iny ;Next byte 4086 f587 d0 f9 bne crloop3 ;Branch if not done page 4087 f589 e6 81 inc $81 ;Next page 4088 f58b a5 81 lda $81 4089 f58d c9 20 cmp #$20 ;End at $1FFF 4090 f58f d0 f1 bne crloop3 ;Branch if not 4091 f591 4092 f591 a0 00 ldy #$00 ;Clear Ram 4093 f593 a9 22 lda #$22 ;Start at $2200 4094 f595 85 81 sta $81 4095 f597 a9 00 lda #$00 4096 f599 85 80 sta $80 4097 f59b crloop4 4098 f59b a9 00 lda #$00 4099 f59d 91 80 sta ($80),y ;Store data 4100 f59f c8 iny ;Next byte 4101 f5a0 d0 f9 bne crloop4 ;Branch if not done page 4102 f5a2 e6 81 inc $81 ;Next page 4103 f5a4 a5 81 lda $81 4104 f5a6 c9 27 cmp #$27 ;End at $27FF 4105 f5a8 d0 f1 bne crloop4 ;Branch if not 4106 f5aa 4107 f5aa a2 00 ldx #$00 4108 f5ac a9 00 lda #$00 4109 f5ae crloop5 ;Clear 2100-213F, 2000-203F 4110 f5ae 9d 00 20 sta $2000,x 4111 f5b1 9d 00 21 sta $2100,x 4112 f5b4 e8 inx 4113 f5b5 e0 40 cpx #$40 4114 f5b7 d0 f5 bne crloop5 4115 f5b9 4116 f5b9 85 80 sta $80 4117 f5bb 85 81 sta $81 4118 f5bd 85 82 sta $82 4119 f5bf 85 83 sta $83 4120 f5c1 4121 f5c1 ;seed random number with hopefully-random timer value 4122 f5c1 a9 01 lda #1 4123 f5c3 0d 84 02 ora INTIM 4124 f5c6 85 40 sta rand 4125 f5c8 4126 f5c8 ; detect the console type... 4127 f5c8 pndetectvblankstart 4128 f5c8 a5 28 lda MSTAT 4129 f5ca 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 4130 f5cc pndetectvblankover 4131 f5cc a5 28 lda MSTAT 4132 f5ce 30 fc bmi pndetectvblankover ; then wait for it to be over 4133 f5d0 a0 00 ldy #$00 4134 f5d2 a2 00 ldx #$00 4135 f5d4 pndetectvblankhappening 4136 f5d4 a5 28 lda MSTAT 4137 f5d6 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 4138 f5d8 85 24 sta WSYNC 4139 f5da 85 24 sta WSYNC 4140 f5dc e8 inx 4141 f5dd d0 f5 bne pndetectvblankhappening 4142 f5df pndetectinvblank 4143 f5df e0 7d cpx #125 4144 f5e1 90 02 bcc pndetecispal 4145 f5e3 a0 01 ldy #$01 4146 f5e5 pndetecispal 4147 f5e5 8c 09 21 sty paldetected 4148 f5e8 4149 f5e8 20 8e f4 jsr createallgamedlls 4150 f5eb 4151 f5eb a9 18 lda #>DLLMEM 4152 f5ed 85 2c sta DPPH 4153 f5ef a9 00 lda # 255 4337 f617 -DOUBLEBUFFEROFFSET = 255 4338 f617 else 4339 f617 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 4340 f617 endif 4341 f617 4342 f617 - ifconst EXTRADLMEMORY 4343 f617 -SECONDDLHALFSTART SET $2300 4344 f617 endif 4345 f617 4346 f617 DLPOINTH 4347 f617 DLINDEX SET 0 4348 f617 REPEAT WZONECOUNT 4349 f617 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f617 - ifconst EXTRADLMEMORY 4351 f617 - if TMPMEMADDRESS > $1FFF 4352 f617 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f617 - else 4354 f617 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f617 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f617 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f617 - endif 4358 f617 - endif ; TMPMEMADDRESS > $1FFF 4359 f617 endif ; EXTRADLMEMORY 4360 f617 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f617 18 .byte.b >TMPMEMADDRESS 4362 f617 DLINDEX SET DLINDEX + 1 4348 f617 REPEND 4349 f617 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f618 - ifconst EXTRADLMEMORY 4351 f618 - if TMPMEMADDRESS > $1FFF 4352 f618 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f618 - else 4354 f618 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f618 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f618 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f618 - endif 4358 f618 - endif ; TMPMEMADDRESS > $1FFF 4359 f618 endif ; EXTRADLMEMORY 4360 f618 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f618 18 .byte.b >TMPMEMADDRESS 4362 f618 DLINDEX SET DLINDEX + 1 4348 f618 REPEND 4349 f618 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f619 - ifconst EXTRADLMEMORY 4351 f619 - if TMPMEMADDRESS > $1FFF 4352 f619 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f619 - else 4354 f619 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f619 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f619 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f619 - endif 4358 f619 - endif ; TMPMEMADDRESS > $1FFF 4359 f619 endif ; EXTRADLMEMORY 4360 f619 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f619 19 .byte.b >TMPMEMADDRESS 4362 f619 DLINDEX SET DLINDEX + 1 4348 f619 REPEND 4349 f619 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f61a - ifconst EXTRADLMEMORY 4351 f61a - if TMPMEMADDRESS > $1FFF 4352 f61a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f61a - else 4354 f61a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f61a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f61a -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f61a - endif 4358 f61a - endif ; TMPMEMADDRESS > $1FFF 4359 f61a endif ; EXTRADLMEMORY 4360 f61a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f61a 19 .byte.b >TMPMEMADDRESS 4362 f61a DLINDEX SET DLINDEX + 1 4348 f61a REPEND 4349 f61a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f61b - ifconst EXTRADLMEMORY 4351 f61b - if TMPMEMADDRESS > $1FFF 4352 f61b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f61b - else 4354 f61b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f61b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f61b -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f61b - endif 4358 f61b - endif ; TMPMEMADDRESS > $1FFF 4359 f61b endif ; EXTRADLMEMORY 4360 f61b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f61b 19 .byte.b >TMPMEMADDRESS 4362 f61b DLINDEX SET DLINDEX + 1 4348 f61b REPEND 4349 f61b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f61c - ifconst EXTRADLMEMORY 4351 f61c - if TMPMEMADDRESS > $1FFF 4352 f61c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f61c - else 4354 f61c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f61c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f61c -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f61c - endif 4358 f61c - endif ; TMPMEMADDRESS > $1FFF 4359 f61c endif ; EXTRADLMEMORY 4360 f61c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f61c 1a .byte.b >TMPMEMADDRESS 4362 f61c DLINDEX SET DLINDEX + 1 4348 f61c REPEND 4349 f61c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f61d - ifconst EXTRADLMEMORY 4351 f61d - if TMPMEMADDRESS > $1FFF 4352 f61d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f61d - else 4354 f61d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f61d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f61d -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f61d - endif 4358 f61d - endif ; TMPMEMADDRESS > $1FFF 4359 f61d endif ; EXTRADLMEMORY 4360 f61d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f61d 1a .byte.b >TMPMEMADDRESS 4362 f61d DLINDEX SET DLINDEX + 1 4348 f61d REPEND 4349 f61d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f61e - ifconst EXTRADLMEMORY 4351 f61e - if TMPMEMADDRESS > $1FFF 4352 f61e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f61e - else 4354 f61e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f61e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f61e -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f61e - endif 4358 f61e - endif ; TMPMEMADDRESS > $1FFF 4359 f61e endif ; EXTRADLMEMORY 4360 f61e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f61e 1a .byte.b >TMPMEMADDRESS 4362 f61e DLINDEX SET DLINDEX + 1 4348 f61e REPEND 4349 f61e TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f61f - ifconst EXTRADLMEMORY 4351 f61f - if TMPMEMADDRESS > $1FFF 4352 f61f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f61f - else 4354 f61f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f61f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f61f -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f61f - endif 4358 f61f - endif ; TMPMEMADDRESS > $1FFF 4359 f61f endif ; EXTRADLMEMORY 4360 f61f ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f61f 1b .byte.b >TMPMEMADDRESS 4362 f61f DLINDEX SET DLINDEX + 1 4348 f61f REPEND 4349 f61f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f620 - ifconst EXTRADLMEMORY 4351 f620 - if TMPMEMADDRESS > $1FFF 4352 f620 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f620 - else 4354 f620 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f620 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f620 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f620 - endif 4358 f620 - endif ; TMPMEMADDRESS > $1FFF 4359 f620 endif ; EXTRADLMEMORY 4360 f620 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f620 1b .byte.b >TMPMEMADDRESS 4362 f620 DLINDEX SET DLINDEX + 1 4348 f620 REPEND 4349 f620 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f621 - ifconst EXTRADLMEMORY 4351 f621 - if TMPMEMADDRESS > $1FFF 4352 f621 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f621 - else 4354 f621 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f621 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f621 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f621 - endif 4358 f621 - endif ; TMPMEMADDRESS > $1FFF 4359 f621 endif ; EXTRADLMEMORY 4360 f621 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f621 1b .byte.b >TMPMEMADDRESS 4362 f621 DLINDEX SET DLINDEX + 1 4348 f621 REPEND 4349 f621 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f622 - ifconst EXTRADLMEMORY 4351 f622 - if TMPMEMADDRESS > $1FFF 4352 f622 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f622 - else 4354 f622 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f622 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f622 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f622 - endif 4358 f622 - endif ; TMPMEMADDRESS > $1FFF 4359 f622 endif ; EXTRADLMEMORY 4360 f622 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f622 1b .byte.b >TMPMEMADDRESS 4362 f622 DLINDEX SET DLINDEX + 1 4348 f622 REPEND 4349 f622 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f623 - ifconst EXTRADLMEMORY 4351 f623 - if TMPMEMADDRESS > $1FFF 4352 f623 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f623 - else 4354 f623 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f623 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f623 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f623 - endif 4358 f623 - endif ; TMPMEMADDRESS > $1FFF 4359 f623 endif ; EXTRADLMEMORY 4360 f623 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f623 1c .byte.b >TMPMEMADDRESS 4362 f623 DLINDEX SET DLINDEX + 1 4348 f623 REPEND 4349 f623 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f624 - ifconst EXTRADLMEMORY 4351 f624 - if TMPMEMADDRESS > $1FFF 4352 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f624 - else 4354 f624 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f624 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f624 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f624 - endif 4358 f624 - endif ; TMPMEMADDRESS > $1FFF 4359 f624 endif ; EXTRADLMEMORY 4360 f624 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f624 1c .byte.b >TMPMEMADDRESS 4362 f624 DLINDEX SET DLINDEX + 1 4348 f624 REPEND 4349 f624 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f625 - ifconst EXTRADLMEMORY 4351 f625 - if TMPMEMADDRESS > $1FFF 4352 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f625 - else 4354 f625 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f625 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f625 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f625 - endif 4358 f625 - endif ; TMPMEMADDRESS > $1FFF 4359 f625 endif ; EXTRADLMEMORY 4360 f625 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f625 1c .byte.b >TMPMEMADDRESS 4362 f625 DLINDEX SET DLINDEX + 1 4348 f625 REPEND 4349 f625 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f626 - ifconst EXTRADLMEMORY 4351 f626 - if TMPMEMADDRESS > $1FFF 4352 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f626 - else 4354 f626 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f626 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f626 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f626 - endif 4358 f626 - endif ; TMPMEMADDRESS > $1FFF 4359 f626 endif ; EXTRADLMEMORY 4360 f626 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f626 1d .byte.b >TMPMEMADDRESS 4362 f626 DLINDEX SET DLINDEX + 1 4348 f626 REPEND 4349 f626 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f627 - ifconst EXTRADLMEMORY 4351 f627 - if TMPMEMADDRESS > $1FFF 4352 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f627 - else 4354 f627 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f627 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f627 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f627 - endif 4358 f627 - endif ; TMPMEMADDRESS > $1FFF 4359 f627 endif ; EXTRADLMEMORY 4360 f627 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f627 1d .byte.b >TMPMEMADDRESS 4362 f627 DLINDEX SET DLINDEX + 1 4348 f627 REPEND 4349 f627 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f628 - ifconst EXTRADLMEMORY 4351 f628 - if TMPMEMADDRESS > $1FFF 4352 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f628 - else 4354 f628 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f628 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f628 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f628 - endif 4358 f628 - endif ; TMPMEMADDRESS > $1FFF 4359 f628 endif ; EXTRADLMEMORY 4360 f628 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f628 1d .byte.b >TMPMEMADDRESS 4362 f628 DLINDEX SET DLINDEX + 1 4348 f628 REPEND 4349 f628 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f629 - ifconst EXTRADLMEMORY 4351 f629 - if TMPMEMADDRESS > $1FFF 4352 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f629 - else 4354 f629 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f629 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f629 -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f629 - endif 4358 f629 - endif ; TMPMEMADDRESS > $1FFF 4359 f629 endif ; EXTRADLMEMORY 4360 f629 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f629 1e .byte.b >TMPMEMADDRESS 4362 f629 DLINDEX SET DLINDEX + 1 4348 f629 REPEND 4349 f629 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f62a - ifconst EXTRADLMEMORY 4351 f62a - if TMPMEMADDRESS > $1FFF 4352 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f62a - else 4354 f62a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f62a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f62a -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f62a - endif 4358 f62a - endif ; TMPMEMADDRESS > $1FFF 4359 f62a endif ; EXTRADLMEMORY 4360 f62a ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f62a 1e .byte.b >TMPMEMADDRESS 4362 f62a DLINDEX SET DLINDEX + 1 4348 f62a REPEND 4349 f62a TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f62b - ifconst EXTRADLMEMORY 4351 f62b - if TMPMEMADDRESS > $1FFF 4352 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f62b - else 4354 f62b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f62b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f62b -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f62b - endif 4358 f62b - endif ; TMPMEMADDRESS > $1FFF 4359 f62b endif ; EXTRADLMEMORY 4360 f62b ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f62b 1e .byte.b >TMPMEMADDRESS 4362 f62b DLINDEX SET DLINDEX + 1 4348 f62b REPEND 4349 f62b TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f62c - ifconst EXTRADLMEMORY 4351 f62c - if TMPMEMADDRESS > $1FFF 4352 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f62c - else 4354 f62c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f62c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f62c -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f62c - endif 4358 f62c - endif ; TMPMEMADDRESS > $1FFF 4359 f62c endif ; EXTRADLMEMORY 4360 f62c ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f62c 1f .byte.b >TMPMEMADDRESS 4362 f62c DLINDEX SET DLINDEX + 1 4348 f62c REPEND 4349 f62c TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f62d - ifconst EXTRADLMEMORY 4351 f62d - if TMPMEMADDRESS > $1FFF 4352 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f62d - else 4354 f62d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f62d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f62d -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f62d - endif 4358 f62d - endif ; TMPMEMADDRESS > $1FFF 4359 f62d endif ; EXTRADLMEMORY 4360 f62d ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f62d 1f .byte.b >TMPMEMADDRESS 4362 f62d DLINDEX SET DLINDEX + 1 4348 f62d REPEND 4349 f62d TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4350 f62e - ifconst EXTRADLMEMORY 4351 f62e - if TMPMEMADDRESS > $1FFF 4352 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4353 f62e - else 4354 f62e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4355 f62e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4356 f62e -SECONDDLHALFSTART SET TMPMEMADDRESS 4357 f62e - endif 4358 f62e - endif ; TMPMEMADDRESS > $1FFF 4359 f62e endif ; EXTRADLMEMORY 4360 f62e ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 4361 f62e 1f .byte.b >TMPMEMADDRESS 4362 f62e DLINDEX SET DLINDEX + 1 4363 f62f REPEND 4364 f62f 4365 f62f - ifconst EXTRADLMEMORY 4366 f62f - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 4367 f62f endif 4368 f62f 4369 f62f 4370 f62f DLPOINTL 4371 f62f DLINDEX SET 0 4372 f62f REPEAT WZONECOUNT 4373 f62f TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4374 f62f - ifconst EXTRADLMEMORY 4375 f62f - if TMPMEMADDRESS > $1FFF 4376 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f62f - else 4378 f62f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f62f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f62f - endif 4381 f62f - endif ; TMPMEMADDRESS > $1FFF 4382 f62f endif ; EXTRADLMEMORY 4383 f62f 80 .byte.b $1FFF 4376 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f630 - else 4378 f630 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f630 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f630 - endif 4381 f630 - endif ; TMPMEMADDRESS > $1FFF 4382 f630 endif ; EXTRADLMEMORY 4383 f630 d0 .byte.b $1FFF 4376 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f631 - else 4378 f631 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f631 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f631 - endif 4381 f631 - endif ; TMPMEMADDRESS > $1FFF 4382 f631 endif ; EXTRADLMEMORY 4383 f631 20 .byte.b $1FFF 4376 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f632 - else 4378 f632 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f632 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f632 - endif 4381 f632 - endif ; TMPMEMADDRESS > $1FFF 4382 f632 endif ; EXTRADLMEMORY 4383 f632 70 .byte.b $1FFF 4376 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f633 - else 4378 f633 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f633 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f633 - endif 4381 f633 - endif ; TMPMEMADDRESS > $1FFF 4382 f633 endif ; EXTRADLMEMORY 4383 f633 c0 .byte.b $1FFF 4376 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f634 - else 4378 f634 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f634 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f634 - endif 4381 f634 - endif ; TMPMEMADDRESS > $1FFF 4382 f634 endif ; EXTRADLMEMORY 4383 f634 10 .byte.b $1FFF 4376 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f635 - else 4378 f635 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f635 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f635 - endif 4381 f635 - endif ; TMPMEMADDRESS > $1FFF 4382 f635 endif ; EXTRADLMEMORY 4383 f635 60 .byte.b $1FFF 4376 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f636 - else 4378 f636 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f636 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f636 - endif 4381 f636 - endif ; TMPMEMADDRESS > $1FFF 4382 f636 endif ; EXTRADLMEMORY 4383 f636 b0 .byte.b $1FFF 4376 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f637 - else 4378 f637 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f637 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f637 - endif 4381 f637 - endif ; TMPMEMADDRESS > $1FFF 4382 f637 endif ; EXTRADLMEMORY 4383 f637 00 .byte.b $1FFF 4376 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f638 - else 4378 f638 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f638 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f638 - endif 4381 f638 - endif ; TMPMEMADDRESS > $1FFF 4382 f638 endif ; EXTRADLMEMORY 4383 f638 50 .byte.b $1FFF 4376 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f639 - else 4378 f639 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f639 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f639 - endif 4381 f639 - endif ; TMPMEMADDRESS > $1FFF 4382 f639 endif ; EXTRADLMEMORY 4383 f639 a0 .byte.b $1FFF 4376 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f63a - else 4378 f63a - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f63a -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f63a - endif 4381 f63a - endif ; TMPMEMADDRESS > $1FFF 4382 f63a endif ; EXTRADLMEMORY 4383 f63a f0 .byte.b $1FFF 4376 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f63b - else 4378 f63b - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f63b -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f63b - endif 4381 f63b - endif ; TMPMEMADDRESS > $1FFF 4382 f63b endif ; EXTRADLMEMORY 4383 f63b 40 .byte.b $1FFF 4376 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f63c - else 4378 f63c - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f63c -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f63c - endif 4381 f63c - endif ; TMPMEMADDRESS > $1FFF 4382 f63c endif ; EXTRADLMEMORY 4383 f63c 90 .byte.b $1FFF 4376 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f63d - else 4378 f63d - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f63d -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f63d - endif 4381 f63d - endif ; TMPMEMADDRESS > $1FFF 4382 f63d endif ; EXTRADLMEMORY 4383 f63d e0 .byte.b $1FFF 4376 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f63e - else 4378 f63e - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f63e -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f63e - endif 4381 f63e - endif ; TMPMEMADDRESS > $1FFF 4382 f63e endif ; EXTRADLMEMORY 4383 f63e 30 .byte.b $1FFF 4376 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f63f - else 4378 f63f - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f63f -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f63f - endif 4381 f63f - endif ; TMPMEMADDRESS > $1FFF 4382 f63f endif ; EXTRADLMEMORY 4383 f63f 80 .byte.b $1FFF 4376 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f640 - else 4378 f640 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f640 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f640 - endif 4381 f640 - endif ; TMPMEMADDRESS > $1FFF 4382 f640 endif ; EXTRADLMEMORY 4383 f640 d0 .byte.b $1FFF 4376 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f641 - else 4378 f641 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f641 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f641 - endif 4381 f641 - endif ; TMPMEMADDRESS > $1FFF 4382 f641 endif ; EXTRADLMEMORY 4383 f641 20 .byte.b $1FFF 4376 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f642 - else 4378 f642 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f642 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f642 - endif 4381 f642 - endif ; TMPMEMADDRESS > $1FFF 4382 f642 endif ; EXTRADLMEMORY 4383 f642 70 .byte.b $1FFF 4376 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f643 - else 4378 f643 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f643 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f643 - endif 4381 f643 - endif ; TMPMEMADDRESS > $1FFF 4382 f643 endif ; EXTRADLMEMORY 4383 f643 c0 .byte.b $1FFF 4376 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f644 - else 4378 f644 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f644 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f644 - endif 4381 f644 - endif ; TMPMEMADDRESS > $1FFF 4382 f644 endif ; EXTRADLMEMORY 4383 f644 10 .byte.b $1FFF 4376 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f645 - else 4378 f645 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f645 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f645 - endif 4381 f645 - endif ; TMPMEMADDRESS > $1FFF 4382 f645 endif ; EXTRADLMEMORY 4383 f645 60 .byte.b $1FFF 4376 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4377 f646 - else 4378 f646 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4379 f646 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4380 f646 - endif 4381 f646 - endif ; TMPMEMADDRESS > $1FFF 4382 f646 endif ; EXTRADLMEMORY 4383 f646 b0 .byte.b $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 if DLINDEX = 0 4401 f647 18 80 ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 if DLINDEX = 1 4404 f647 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 if DLINDEX = 2 4407 f647 19 20 ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 if DLINDEX = 3 4410 f647 19 70 ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 if DLINDEX = 4 4413 f647 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 if DLINDEX = 5 4416 f647 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 if DLINDEX = 6 4419 f647 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 if DLINDEX = 7 4422 f647 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 if DLINDEX = 8 4425 f647 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 if DLINDEX = 9 4428 f647 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 if DLINDEX = 10 4431 f647 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 if DLINDEX = 11 4434 f647 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 if DLINDEX = 12 4437 f647 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 if DLINDEX = 13 4440 f647 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 if DLINDEX = 14 4443 f647 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 if DLINDEX = 15 4446 f647 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 if DLINDEX = 16 4449 f647 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 if DLINDEX = 17 4452 f647 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 if DLINDEX = 18 4455 f647 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 if DLINDEX = 19 4458 f647 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 if DLINDEX = 20 4461 f647 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 if DLINDEX = 21 4464 f647 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 if DLINDEX = 22 4467 f647 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 - if DLINDEX = 23 4470 f647 -ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4389 f647 REPEND 4390 f647 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 4391 f647 - ifconst EXTRADLMEMORY 4392 f647 - if TMPMEMADDRESS > $1FFF 4393 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4394 f647 - else 4395 f647 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 4396 f647 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 4397 f647 - endif 4398 f647 - endif ; TMPMEMADDRESS > $1FFF 4399 f647 endif ; EXTRADLMEMORY 4400 f647 - if DLINDEX = 0 4401 f647 -ZONE0ADDRESS = TMPMEMADDRESS 4402 f647 endif 4403 f647 - if DLINDEX = 1 4404 f647 -ZONE1ADDRESS = TMPMEMADDRESS 4405 f647 endif 4406 f647 - if DLINDEX = 2 4407 f647 -ZONE2ADDRESS = TMPMEMADDRESS 4408 f647 endif 4409 f647 - if DLINDEX = 3 4410 f647 -ZONE3ADDRESS = TMPMEMADDRESS 4411 f647 endif 4412 f647 - if DLINDEX = 4 4413 f647 -ZONE4ADDRESS = TMPMEMADDRESS 4414 f647 endif 4415 f647 - if DLINDEX = 5 4416 f647 -ZONE5ADDRESS = TMPMEMADDRESS 4417 f647 endif 4418 f647 - if DLINDEX = 6 4419 f647 -ZONE6ADDRESS = TMPMEMADDRESS 4420 f647 endif 4421 f647 - if DLINDEX = 7 4422 f647 -ZONE7ADDRESS = TMPMEMADDRESS 4423 f647 endif 4424 f647 - if DLINDEX = 8 4425 f647 -ZONE8ADDRESS = TMPMEMADDRESS 4426 f647 endif 4427 f647 - if DLINDEX = 9 4428 f647 -ZONE9ADDRESS = TMPMEMADDRESS 4429 f647 endif 4430 f647 - if DLINDEX = 10 4431 f647 -ZONE10ADDRESS = TMPMEMADDRESS 4432 f647 endif 4433 f647 - if DLINDEX = 11 4434 f647 -ZONE11ADDRESS = TMPMEMADDRESS 4435 f647 endif 4436 f647 - if DLINDEX = 12 4437 f647 -ZONE12ADDRESS = TMPMEMADDRESS 4438 f647 endif 4439 f647 - if DLINDEX = 13 4440 f647 -ZONE13ADDRESS = TMPMEMADDRESS 4441 f647 endif 4442 f647 - if DLINDEX = 14 4443 f647 -ZONE14ADDRESS = TMPMEMADDRESS 4444 f647 endif 4445 f647 - if DLINDEX = 15 4446 f647 -ZONE15ADDRESS = TMPMEMADDRESS 4447 f647 endif 4448 f647 - if DLINDEX = 16 4449 f647 -ZONE16ADDRESS = TMPMEMADDRESS 4450 f647 endif 4451 f647 - if DLINDEX = 17 4452 f647 -ZONE17ADDRESS = TMPMEMADDRESS 4453 f647 endif 4454 f647 - if DLINDEX = 18 4455 f647 -ZONE18ADDRESS = TMPMEMADDRESS 4456 f647 endif 4457 f647 - if DLINDEX = 19 4458 f647 -ZONE19ADDRESS = TMPMEMADDRESS 4459 f647 endif 4460 f647 - if DLINDEX = 20 4461 f647 -ZONE20ADDRESS = TMPMEMADDRESS 4462 f647 endif 4463 f647 - if DLINDEX = 21 4464 f647 -ZONE21ADDRESS = TMPMEMADDRESS 4465 f647 endif 4466 f647 - if DLINDEX = 22 4467 f647 -ZONE22ADDRESS = TMPMEMADDRESS 4468 f647 endif 4469 f647 if DLINDEX = 23 4470 f647 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 4471 f647 endif 4472 f647 - if DLINDEX = 24 4473 f647 -ZONE24ADDRESS = TMPMEMADDRESS 4474 f647 endif 4475 f647 - if DLINDEX = 25 4476 f647 -ZONE25ADDRESS = TMPMEMADDRESS 4477 f647 endif 4478 f647 - if DLINDEX = 26 4479 f647 -ZONE26ADDRESS = TMPMEMADDRESS 4480 f647 endif 4481 f647 - if DLINDEX = 27 4482 f647 -ZONE27ADDRESS = TMPMEMADDRESS 4483 f647 endif 4484 f647 DLINDEX SET DLINDEX + 1 4485 f647 REPEND 4486 f647 4487 f647 $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 4488 f647 echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 4489 f647 4490 f647 DLHEIGHT 4491 f647 REPEAT WZONECOUNT 4492 f647 07 .byte.b (WZONEHEIGHT-1) 4491 f647 REPEND 4492 f648 07 .byte.b (WZONEHEIGHT-1) 4491 f648 REPEND 4492 f649 07 .byte.b (WZONEHEIGHT-1) 4491 f649 REPEND 4492 f64a 07 .byte.b (WZONEHEIGHT-1) 4491 f64a REPEND 4492 f64b 07 .byte.b (WZONEHEIGHT-1) 4491 f64b REPEND 4492 f64c 07 .byte.b (WZONEHEIGHT-1) 4491 f64c REPEND 4492 f64d 07 .byte.b (WZONEHEIGHT-1) 4491 f64d REPEND 4492 f64e 07 .byte.b (WZONEHEIGHT-1) 4491 f64e REPEND 4492 f64f 07 .byte.b (WZONEHEIGHT-1) 4491 f64f REPEND 4492 f650 07 .byte.b (WZONEHEIGHT-1) 4491 f650 REPEND 4492 f651 07 .byte.b (WZONEHEIGHT-1) 4491 f651 REPEND 4492 f652 07 .byte.b (WZONEHEIGHT-1) 4491 f652 REPEND 4492 f653 07 .byte.b (WZONEHEIGHT-1) 4491 f653 REPEND 4492 f654 07 .byte.b (WZONEHEIGHT-1) 4491 f654 REPEND 4492 f655 07 .byte.b (WZONEHEIGHT-1) 4491 f655 REPEND 4492 f656 07 .byte.b (WZONEHEIGHT-1) 4491 f656 REPEND 4492 f657 07 .byte.b (WZONEHEIGHT-1) 4491 f657 REPEND 4492 f658 07 .byte.b (WZONEHEIGHT-1) 4491 f658 REPEND 4492 f659 07 .byte.b (WZONEHEIGHT-1) 4491 f659 REPEND 4492 f65a 07 .byte.b (WZONEHEIGHT-1) 4491 f65a REPEND 4492 f65b 07 .byte.b (WZONEHEIGHT-1) 4491 f65b REPEND 4492 f65c 07 .byte.b (WZONEHEIGHT-1) 4491 f65c REPEND 4492 f65d 07 .byte.b (WZONEHEIGHT-1) 4491 f65d REPEND 4492 f65e 07 .byte.b (WZONEHEIGHT-1) 4493 f65f REPEND 4494 f65f 4495 f65f ; Provided under the CC0 license. See the included LICENSE.txt for details. 4496 f65f 4497 f65f ; a simple guard, than ensures the 7800basic code hasn't 4498 f65f ; spilled into the encryption area... 2335 bytes left in the 7800basic reserved area. 4499 f65f echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 4500 f65f - if (*>$FF7D) 4501 f65f - ERR ; abort the assembly 4502 f65f endif 4503 f65f ; Provided under the CC0 license. See the included LICENSE.txt for details. 4504 f65f 4505 f65f - ifconst DEV 4506 f65f - ifnconst ZONEHEIGHT 4507 f65f - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 4508 f65f - else 4509 f65f - if ZONEHEIGHT = 8 4510 f65f - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 4511 f65f - else 4512 f65f - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 4513 f65f - endif 4514 f65f - endif 4515 f65f endif 4516 f65f 4517 f65f ; FF7E/FF7F contains the 7800basic crc checksum word 4518 f65f 4519 f65f ; FF80 - FFF7 contains the 7800 encryption key 4520 f65f 4521 f65f ifnconst bankswitchmode 4522 fff8 ORG $FFF8 4523 fff8 - else 4524 fff8 - ifconst ROM128K 4525 fff8 - ORG $27FF8 4526 fff8 - RORG $FFF8 4527 fff8 - endif 4528 fff8 - ifconst ROM144K 4529 fff8 - ORG $27FF8 4530 fff8 - RORG $FFF8 4531 fff8 - endif 4532 fff8 - ifconst ROM256K 4533 fff8 - ORG $47FF8 4534 fff8 - RORG $FFF8 4535 fff8 - endif 4536 fff8 - ifconst ROM272K 4537 fff8 - ORG $47FF8 4538 fff8 - RORG $FFF8 4539 fff8 - endif 4540 fff8 - ifconst ROM512K 4541 fff8 - ORG $87FF8 4542 fff8 - RORG $FFF8 4543 fff8 - endif 4544 fff8 - ifconst ROM528K 4545 fff8 - ORG $87FF8 4546 fff8 - RORG $FFF8 4547 fff8 - endif 4548 fff8 endif 4549 fff8 4550 fff8 4551 fff8 ff .byte.b $FF ; region verification. $FF=all regions 4552 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 4553 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 4554 fffa 4555 fffa ;Vectors 4556 fffa 00 f0 .word.w NMI 4557 fffc 59 f5 .word.w START 4558 fffe 5a f0 .word.w IRQ 4559 10000