------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm LEVEL 1 PASS 3 1 10000 ???? ; MACRO.H 2 10000 ???? 3 10000 ???? ; Based on the 2600 macro.h file. 4 10000 ???? ; Macros irrelevant to the 7800 have been removed, and the sleep macro 5 10000 ???? ; has been adapted to give accurate results on the 7800. 6 10000 ???? 7 10000 ???? ; Version 1.0 2019/12/11 (based on the 2600 Version 1.05, 13/NOVEMBER/2003) 8 10000 ???? 9 10000 ???? ; Available macros... 10 10000 ???? ; SLEEP n - sleep for n cycles 11 10000 ???? ; SET_POINTER - load a 16-bit absolute to a 16-bit variable 12 10000 ???? 13 10000 ???? ;------------------------------------------------------------------------------- 14 10000 ???? ; SLEEP duration 15 10000 ???? ; Original author: Thomas Jentzsch 16 10000 ???? ; Inserts code which takes the specified number of cycles to execute. This is 17 10000 ???? ; useful for code where precise timing is required. 18 10000 ???? ; ILLEGAL-OPCODE VERSION DOES NOT AFFECT FLAGS OR REGISTERS. 19 10000 ???? ; LEGAL OPCODE VERSION MAY AFFECT FLAGS 20 10000 ???? ; Uses illegal opcode (DASM 2.20.01 onwards). 21 10000 ???? 22 10000 ???? MAC sleep 23 10000 ???? .CYCLES SET {1} 24 10000 ???? 25 10000 ???? IF .CYCLES < 2 26 10000 ???? ECHO "MACRO ERROR: 'SLEEP': Duration must be > 1" 27 10000 ???? ERR 28 10000 ???? ENDIF 29 10000 ???? 30 10000 ???? IF .CYCLES & 1 31 10000 ???? IFNCONST NO_ILLEGAL_OPCODES 32 10000 ???? nop $80 33 10000 ???? ELSE 34 10000 ???? bit $80 35 10000 ???? ENDIF 36 10000 ???? .CYCLES SET .CYCLES - 3 37 10000 ???? ENDIF 38 10000 ???? 39 10000 ???? REPEAT .CYCLES / 2 40 10000 ???? nop 41 10000 ???? REPEND 42 10000 ???? ENDM ;usage: SLEEP n (n>1) 43 10000 ???? 44 10000 ???? ;------------------------------------------------------- 45 10000 ???? ; SET_POINTER 46 10000 ???? ; Original author: Manuel Rotschkar 47 10000 ???? ; 48 10000 ???? ; Sets a 2 byte RAM pointer to an absolute address. 49 10000 ???? ; 50 10000 ???? ; Usage: SET_POINTER pointer, address 51 10000 ???? ; Example: SET_POINTER SpritePTR, SpriteData 52 10000 ???? ; 53 10000 ???? ; Note: Alters the accumulator, NZ flags 54 10000 ???? ; IN 1: 2 byte RAM location reserved for pointer 55 10000 ???? ; IN 2: absolute address 56 10000 ???? 57 10000 ???? MAC set_pointer 58 10000 ???? .POINTER SET {1} 59 10000 ???? .ADDRESS SET {2} 60 10000 ???? 61 10000 ???? LDA #<.ADDRESS ; Get Lowbyte of Address 62 10000 ???? STA .POINTER ; Store in pointer 63 10000 ???? LDA #>.ADDRESS ; Get Hibyte of Address 64 10000 ???? STA .POINTER+1 ; Store in pointer+1 65 10000 ???? 66 10000 ???? ENDM 67 10000 ???? 68 10000 ???? ; EOF 69 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 70 10000 ???? 71 10000 ???? ; 7800MACRO.H 72 10000 ???? 73 10000 ???? ;------------------------------------------------------- 74 10000 ???? ; BOXCOLLISIONCHECK 75 10000 ???? ; author: Mike Saarna 76 10000 ???? ; 77 10000 ???? ; A general bounding box collision check. compares 2 rectangles of differing size 78 10000 ???? ; and shape for overlap. Carry is set for collision detected, clear for none. 79 10000 ???? ; 80 10000 ???? ; Usage: BOXCOLLISIONCHECK x1var,y1var,w1var,h1var,x2var,y2var,w2var,h2var 81 10000 ???? ; 82 10000 ???? 83 10000 ???? MAC boxcollisioncheck 84 10000 ???? .boxx1 SET {1} 85 10000 ???? .boxy1 SET {2} 86 10000 ???? .boxw1 SET {3} 87 10000 ???? .boxh1 SET {4} 88 10000 ???? .boxx2 SET {5} 89 10000 ???? .boxy2 SET {6} 90 10000 ???? .boxw2 SET {7} 91 10000 ???? .boxh2 SET {8} 92 10000 ???? 93 10000 ???? .DoXCollisionCheck 94 10000 ???? lda .boxx1 ;3 95 10000 ???? cmp .boxx2 ;2 96 10000 ???? bcs .X1isbiggerthanX2 ;2/3 97 10000 ???? .X2isbiggerthanX1 98 10000 ???? adc #.boxw1 ;2 99 10000 ???? cmp .boxx2 ;3 100 10000 ???? bcs .DoYCollisionCheck ;3/2 101 10000 ???? bcc .noboxcollision ;3 102 10000 ???? .X1isbiggerthanX2 103 10000 ???? clc ;2 104 10000 ???? sbc #.boxw2 ;2 105 10000 ???? cmp .boxx2 ;3 106 10000 ???? bcs .noboxcollision ;3/2 107 10000 ???? .DoYCollisionCheck 108 10000 ???? lda .boxy1 ;3 109 10000 ???? cmp .boxy2 ;3 110 10000 ???? bcs .Y1isbiggerthanY2 ;3/2 111 10000 ???? .Y2isbiggerthanY1 112 10000 ???? adc #.boxh1 ;2 113 10000 ???? cmp .boxy2 ;3 114 10000 ???? jmp .checkdone ;6 115 10000 ???? .Y1isbiggerthanY2 116 10000 ???? clc ;2 117 10000 ???? sbc #.boxh2 ;2 118 10000 ???? cmp .boxy2 ;3 119 10000 ???? bcs .noboxcollision ;3/2 120 10000 ???? .boxcollision 121 10000 ???? sec ;2 122 10000 ???? .byte $24 ; hardcoded "BIT [clc opcode]", used to skip over the following clc 123 10000 ???? .noboxcollision 124 10000 ???? clc ;2 125 10000 ???? .checkdone 126 10000 ???? 127 10000 ???? ENDM 128 10000 ???? 129 10000 ???? MAC median3 130 10000 ???? 131 10000 ???? ; A median filter (for smoothing paddle jitter) 132 10000 ???? ; this macro takes the current paddle value, compares it to historic 133 10000 ???? ; values, and replaces the current paddle value with the median. 134 10000 ???? ; 135 10000 ???? ; called as: MEDIAN3 STORAGE CURRENT 136 10000 ???? ; where STORAGE points to 3 consecutive bytes of memory. The first 2 137 10000 ???? ; must be dedicated to this MEDIAN filter. The last 1 is a temp. 138 10000 ???? ; where CURRENT is memory holding the new value you wish to compare to 139 10000 ???? ; the previous values, and update with the median value. 140 10000 ???? ; 141 10000 ???? ; returns: CURRENT (modified to contain median value) 142 10000 ???? ; 143 10000 ???? ; author: Mike Saarna (aka RevEng) 144 10000 ???? 145 10000 ???? .MedianBytes SET {1} 146 10000 ???? .NewValue SET {2} 147 10000 ???? 148 10000 ???? lda #0 149 10000 ???? ldy .NewValue 150 10000 ???? sty .MedianBytes+2 ; put the new value in the most "recent" slot 151 10000 ???? 152 10000 ???? ; build an index from relative size comparisons between our 3 values. 153 10000 ???? cpy .MedianBytes 154 10000 ???? rol 155 10000 ???? cpy .MedianBytes+1 156 10000 ???? rol 157 10000 ???? ldy .MedianBytes 158 10000 ???? cpy .MedianBytes+1 159 10000 ???? rol 160 10000 ???? tay 161 10000 ???? 162 10000 ???? ldx MedianOrderLUT,y ; convert the size-comparison index to an index to the median value 163 10000 ???? lda .MedianBytes,x 164 10000 ???? sta .NewValue ; we replace the new value memory with the median value 165 10000 ???? 166 10000 ???? ; then shift values from "newer" bytes to "older" bytes, leaving the 167 10000 ???? ; newest byte (.MedianBytes+2) empty for next time. 168 10000 ???? lda .MedianBytes+1 169 10000 ???? sta .MedianBytes 170 10000 ???? lda .MedianBytes+2 171 10000 ???? sta .MedianBytes+1 172 10000 ???? ifnconst MedianOrderLUT 173 10000 ???? jmp MedianOrderLUTend 174 10000 ???? MedianOrderLUT ; converts our "comparison index" to an index to the median value 175 10000 ???? .byte 0 ; 0 B2 < B0 < B1 176 10000 ???? .byte 1 ; 1 B2 < B1 < B0 177 10000 ???? .byte 2 ; 2 impossible 178 10000 ???? .byte 2 ; 3 B1 < B2 < B0 179 10000 ???? .byte 2 ; 4 B0 < B2 < B1 180 10000 ???? .byte 2 ; 5 impossible 181 10000 ???? .byte 1 ; 6 B0 < B1 < B2 182 10000 ???? .byte 0 ; 7 B1 < B0 < B2 183 10000 ???? MedianOrderLUTend 184 10000 ???? endif 185 10000 ???? ENDM 186 10000 ???? 187 10000 ???? ; EOF 188 10000 ???? ; 189 10000 ???? ; speakjet.inc 190 10000 ???? ; 191 10000 ???? ; 192 10000 ???? ; AtariVox Speech Synth Driver 193 10000 ???? ; 194 10000 ???? ; By Alex Herbert, 2004 195 10000 ???? ; 196 10000 ???? 197 10000 ???? 198 10000 ???? 199 10000 ???? 200 10000 ???? ; Constants 201 10000 ???? 202 10000 ???? 203 10000 ???? 00 01 SERIAL_OUTMASK equ $01 204 10000 ???? 00 02 SERIAL_RDYMASK equ $02 205 10000 ???? 206 10000 ???? 207 10000 ???? 208 10000 ???? ; Macros 209 10000 ???? 210 10000 ???? mac spkout 211 10000 ???? 212 10000 ???? ; check buffer-full status 213 10000 ???? lda SWCHA 214 10000 ???? and #SERIAL_RDYMASK 215 10000 ???? beq .speech_done 216 10000 ???? 217 10000 ???? ; get next speech byte 218 10000 ???? ldy #$00 219 10000 ???? lda (speech_addr),y 220 10000 ???? 221 10000 ???? ; invert data and check for end of string 222 10000 ???? eor #$ff 223 10000 ???? ;sta BACKGRND ; debug - uncomment to flash the background color with vox data 224 10000 ???? beq .speech_done 225 10000 ???? sta {1} 226 10000 ???? 227 10000 ???? ; increment speech pointer 228 10000 ???? inc speech_addr 229 10000 ???? bne .incaddr_skip 230 10000 ???? inc speech_addr+1 231 10000 ???? .incaddr_skip 232 10000 ???? 233 10000 ???? ; output byte as serial data 234 10000 ???? 235 10000 ???? sec ; start bit 236 10000 ???? .byteout_loop 237 10000 ???? ; put carry flag into bit 0 of SWACNT, perserving other bits 238 10000 ???? lda SWACNT ; 4 239 10000 ???? and #$fe ; 2 6 240 10000 ???? adc #$00 ; 2 8 241 10000 ???? sta SWACNT ; 4 12 242 10000 ???? 243 10000 ???? ; 10 bits sent? (1 start bit, 8 data bits, 1 stop bit) 244 10000 ???? cpy #$09 ; 2 14 245 10000 ???? beq .speech_done ; 2 16 246 10000 ???? iny ; 2 18 247 10000 ???? 248 10000 ???? ; the 7800 is 1.5x faster than the 2600. Waste more cycles here 249 10000 ???? ; to match the original baud rate... 250 10000 ???? ;ldx #$07 ; 2600 251 10000 ???? ldx #$0D 252 10000 ???? 253 10000 ???? .delay_loop 254 10000 ???? dex ; 255 10000 ???? bne .delay_loop ; 36 54 256 10000 ???? 257 10000 ???? ; shift next data bit into carry 258 10000 ???? lsr {1} ; 5 59 259 10000 ???? 260 10000 ???? ; and loop (branch always taken) 261 10000 ???? bpl .byteout_loop ; 3 62 cycles for loop 262 10000 ???? 263 10000 ???? .speech_done 264 10000 ???? 265 10000 ???? endm 266 10000 ???? 267 10000 ???? 268 10000 ???? mac speak 269 10000 ???? 270 10000 ???? lda #<{1} 271 10000 ???? sta speech_addr 272 10000 ???? lda #>{1} 273 10000 ???? sta speech_addr+1 274 10000 ???? 275 10000 ???? endm 276 10000 ???? 277 10000 ???? 278 10000 ???? 279 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 280 10000 ???? 281 10000 ???? processor 6502 282 10000 ???? ------- FILE 7800basic.h LEVEL 2 PASS 3 0 10000 ???? include "7800basic.h" 1 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 10000 ???? 3 10000 ???? processor 6502 ------- FILE 7800.h LEVEL 3 PASS 3 0 10000 ???? include "7800.h" 1 10000 ???? ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 10000 ???? 3 10000 ???? ; 7800.h 4 10000 ???? ; Version 1.0, 2019/12/13 5 10000 ???? 6 10000 ???? ; This file defines hardware registers and memory mapping for the 7 10000 ???? ; Atari 7800. It is distributed as a companion machine-specific support package 8 10000 ???? ; for the DASM compiler. Updates to this file, DASM, and associated tools are 9 10000 ???? ; available at https://github.com/dasm-assembler/dasm 10 10000 ???? 11 10000 ???? 12 10000 ???? ; ******************** 7800 Hardware Adresses *************************** 13 10000 ???? ; 14 10000 ???? ; MEMORY MAP USAGE OF THE 7800 15 10000 ???? ; 16 10000 ???? ; 00 - 1F TIA REGISTERS 17 10000 ???? ; 20 - 3F MARIA REGISTERS 18 10000 ???? ; 40 - FF RAM block 0 (zero page) 19 10000 ???? ; 100 - 11F TIA (mirror of 0000-001f) 20 10000 ???? ; 120 - 13F MARIA (mirror of 0020-003f) 21 10000 ???? ; 140 - 1FF RAM block 1 (stack) 22 10000 ???? ; 200 - 21F TIA (mirror of 0000-001f) 23 10000 ???? ; 220 - 23F MARIA (mirror of 0020-003f) 24 10000 ???? ; 240 - 27F ??? 25 10000 ???? ; 280 - 2FF RIOT I/O ports and timers 26 10000 ???? ; 300 - 31F TIA (mirror of 0000-001f) 27 10000 ???? ; 320 - 33F MARIA (mirror of 0020-003f) 28 10000 ???? ; 340 - 3FF ??? 29 10000 ???? ; 400 - 47F unused address space 30 10000 ???? ; 480 - 4FF RIOT RAM 31 10000 ???? ; 500 - 57F unused address space 32 10000 ???? ; 580 - 5FF RIOT RAM (mirror of 0480-04ff) 33 10000 ???? ; 600 - 17FF unused address space 34 10000 ???? ; 1800 - 203F RAM 35 10000 ???? ; 2040 - 20FF RAM block 0 (mirror of 0000-001f) 36 10000 ???? ; 2100 - 213F RAM 37 10000 ???? ; 2140 - 21FF RAM block 1 (mirror of 0140-01ff) 38 10000 ???? ; 2200 - 27FF RAM 39 10000 ???? ; 2800 - 2FFF mirror of 1800-27ff 40 10000 ???? ; 3000 - 3FFF unused address space 41 10000 ???? ; 4000 - FF7F potential cartridge address space 42 10000 ???? ; FF80 - FFF9 RESERVED FOR ENCRYPTION 43 10000 ???? ; FFFA - FFFF 6502 VECTORS 44 10000 ???? 45 10000 ???? 46 10000 ???? ;****** 00-1F ********* TIA REGISTERS ****************** 47 10000 ???? 48 10000 ???? 00 01 INPTCTRL = $01 ;Input control. In same address space as TIA. write-only 49 10000 ???? 00 01 VBLANK = $01 ;VBLANK. D7=1:dump paddle caps to ground. write-only 50 10000 ???? 00 08 INPT0 = $08 ;Paddle Control Input 0 read-only 51 10000 ???? 00 09 INPT1 = $09 ;Paddle Control Input 1 read-only 52 10000 ???? 00 0a INPT2 = $0A ;Paddle Control Input 2 read-only 53 10000 ???? 00 0b INPT3 = $0B ;Paddle Control Input 3 read-only 54 10000 ???? 55 10000 ???? ; ** some common alternate names for INPT0/1/2/3 56 10000 ???? 00 08 INPT4B = $08 ;Joystick 0 Fire 1 read-only 57 10000 ???? 00 09 INPT4A = $09 ;Joystick 0 Fire 1 read-only 58 10000 ???? 00 0a INPT5B = $0A ;Joystick 1 Fire 0 read-only 59 10000 ???? 00 0b INPT5A = $0B ;Joystick 1 Fire 1 read-only 60 10000 ???? 00 08 INPT4R = $08 ;Joystick 0 Fire 1 read-only 61 10000 ???? 00 09 INPT4L = $09 ;Joystick 0 Fire 1 read-only 62 10000 ???? 00 0a INPT5R = $0A ;Joystick 1 Fire 0 read-only 63 10000 ???? 00 0b INPT5L = $0B ;Joystick 1 Fire 1 read-only 64 10000 ???? 65 10000 ???? 00 0c INPT4 = $0C ;Player 0 Fire Button Input read-only 66 10000 ???? 00 0d INPT5 = $0D ;Player 1 Fire Button Input read-only 67 10000 ???? 68 10000 ???? 00 15 AUDC0 = $15 ;Audio Control Channel 0 write-only 69 10000 ???? 00 16 AUDC1 = $16 ;Audio Control Channel 1 write-only 70 10000 ???? 00 17 AUDF0 = $17 ;Audio Frequency Channel 0 write-only 71 10000 ???? 00 18 AUDF1 = $18 ;Audio Frequency Channel 1 write-only 72 10000 ???? 00 19 AUDV0 = $19 ;Audio Volume Channel 0 write-only 73 10000 ???? 00 1a AUDV1 = $1A ;Audio Volume Channel 1 write-only 74 10000 ???? 75 10000 ???? ;****** 20-3F ********* MARIA REGISTERS *************** 76 10000 ???? 77 10000 ???? 00 20 BACKGRND = $20 ;Background Color write-only 78 10000 ???? 00 21 P0C1 = $21 ;Palette 0 - Color 1 write-only 79 10000 ???? 00 22 P0C2 = $22 ;Palette 0 - Color 2 write-only 80 10000 ???? 00 23 P0C3 = $23 ;Palette 0 - Color 3 write-only 81 10000 ???? 00 24 WSYNC = $24 ;Wait For Sync write-only 82 10000 ???? 00 25 P1C1 = $25 ;Palette 1 - Color 1 write-only 83 10000 ???? 00 26 P1C2 = $26 ;Palette 1 - Color 2 write-only 84 10000 ???? 00 27 P1C3 = $27 ;Palette 1 - Color 3 write-only 85 10000 ???? 00 28 MSTAT = $28 ;Maria Status read-only 86 10000 ???? 00 29 P2C1 = $29 ;Palette 2 - Color 1 write-only 87 10000 ???? 00 2a P2C2 = $2A ;Palette 2 - Color 2 write-only 88 10000 ???? 00 2b P2C3 = $2B ;Palette 2 - Color 3 write-only 89 10000 ???? 00 2c DPPH = $2C ;Display List List Pointer High write-only 90 10000 ???? 00 2d P3C1 = $2D ;Palette 3 - Color 1 write-only 91 10000 ???? 00 2e P3C2 = $2E ;Palette 3 - Color 2 write-only 92 10000 ???? 00 2f P3C3 = $2F ;Palette 3 - Color 3 write-only 93 10000 ???? 00 30 DPPL = $30 ;Display List List Pointer Low write-only 94 10000 ???? 00 31 P4C1 = $31 ;Palette 4 - Color 1 write-only 95 10000 ???? 00 32 P4C2 = $32 ;Palette 4 - Color 2 write-only 96 10000 ???? 00 33 P4C3 = $33 ;Palette 4 - Color 3 write-only 97 10000 ???? 00 34 CHARBASE = $34 ;Character Base Address write-only 98 10000 ???? 00 34 CHBASE = $34 ;Character Base Address write-only 99 10000 ???? 00 35 P5C1 = $35 ;Palette 5 - Color 1 write-only 100 10000 ???? 00 36 P5C2 = $36 ;Palette 5 - Color 2 write-only 101 10000 ???? 00 37 P5C3 = $37 ;Palette 5 - Color 3 write-only 102 10000 ???? 00 38 OFFSET = $38 ;Unused - Store zero here write-only 103 10000 ???? 00 39 P6C1 = $39 ;Palette 6 - Color 1 write-only 104 10000 ???? 00 3a P6C2 = $3A ;Palette 6 - Color 2 write-only 105 10000 ???? 00 3b P6C3 = $3B ;Palette 6 - Color 3 write-only 106 10000 ???? 00 3c CTRL = $3C ;Maria Control Register write-only 107 10000 ???? 00 3d P7C1 = $3D ;Palette 7 - Color 1 write-only 108 10000 ???? 00 3e P7C2 = $3E ;Palette 7 - Color 2 write-only 109 10000 ???? 00 3f P7C3 = $3F ;Palette 7 - Color 3 write-only 110 10000 ???? 111 10000 ???? 112 10000 ???? ;****** 280-2FF ******* PIA PORTS AND TIMERS ************ 113 10000 ???? 114 10000 ???? 02 80 SWCHA = $280 ;P0+P1 Joystick Directional Input read-write 115 10000 ???? 02 81 CTLSWA = $281 ;I/O Control for SCHWA read-write 116 10000 ???? 02 81 SWACNT = $281 ;VCS name for above read-write 117 10000 ???? 02 82 SWCHB = $282 ;Console Switches read-write 118 10000 ???? 02 83 CTLSWB = $283 ;I/O Control for SCHWB read-write 119 10000 ???? 02 83 SWBCNT = $283 ;VCS name for above read-write 120 10000 ???? 121 10000 ???? 02 84 INTIM = $284 ;Iterval Timer Read read-only 122 10000 ???? 02 94 TIM1T = $294 ;Set 1 CLK Interval (838 nsec/interval) write-only 123 10000 ???? 02 95 TIM8T = $295 ;Set 8 CLK Interval (6.7 usec/interval) write-only 124 10000 ???? 02 96 TIM64T = $296 ;Set 64 CLK Interval (63.6 usec/interval) write-only 125 10000 ???? 02 97 T1024T = $297 ;Set 1024 CLK Interval (858.2 usec/interval) write-only 126 10000 ???? 02 9e TIM64TI = $29E ;Interrupt timer 64T write-only 127 10000 ???? 128 10000 ???? ;XM 129 10000 ???? 04 70 XCTRL = $470 ; 7=YM2151 6=RAM@6k 5=RAM@4k 4=pokey@450 3=hsc 2=cart 1=RoF_bank1 0=RoF_bank2 130 10000 ???? 04 70 XCTRL1 = $470 131 10000 ???? 04 78 XCTRL2 = $478 132 10000 ???? 04 7c XCTRL3 = $47c 133 10000 ???? 04 71 XCTRL4 = $471 134 10000 ???? 04 72 XCTRL5 = $472 135 10000 ???? 136 10000 ???? ; Pokey register relative locations, since its base may be different 137 10000 ???? ; depending on the hardware. 138 10000 ???? 00 00 PAUDF0 = $0 ; extra audio channels and frequencies 139 10000 ???? 00 01 PAUDC0 = $1 140 10000 ???? 00 02 PAUDF1 = $2 141 10000 ???? 00 03 PAUDC1 = $3 142 10000 ???? 00 04 PAUDF2 = $4 143 10000 ???? 00 05 PAUDC2 = $5 144 10000 ???? 00 06 PAUDF3 = $6 145 10000 ???? 00 07 PAUDC3 = $7 146 10000 ???? 00 08 PAUDCTL = $8 ; Audio Control 147 10000 ???? 00 0a PRANDOM = $A ; 17 bit polycounter pseudo random 148 10000 ???? 00 0f PSKCTL = $F ; Serial Port control ------- FILE 7800basic.h ------- FILE 7800basic_variable_redefs.h LEVEL 3 PASS 3 0 10000 ???? include "7800basic_variable_redefs.h" 1 10000 ???? ; This file contains variable mapping and other information for the current project. 2 10000 ???? 3 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 4 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 5 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 6 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 7 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 8 10000 ???? 00 01 vertical_shooting_bullet_width = $01 9 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 10 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 11 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 12 10000 ???? 00 00 vertical_shooting_ship_mode = $00 13 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 14 10000 ???? 00 02 vertical_shooting_ship_width = $02 15 10000 ???? 00 00 atascii_mode = $00 16 10000 ???? 00 0a atascii_width_twoscompliment = $0a 17 10000 ???? 00 f6 atascii_width = $f6 18 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 19 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 20 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 21 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 22 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 23 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 24 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 25 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 26 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 27 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 28 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 29 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 30 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 31 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 32 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 33 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 34 10000 ???? 00 00 atascii_color1 = $00 35 10000 ???? 00 0f atascii_color0 = $0f 36 10000 ???? 01 4f rDirection = var15 37 10000 ???? 38 10000 ???? 01 4e rMovement = var14 39 10000 ???? 40 10000 ???? 01 4d playerFlag = var13 41 10000 ???? 42 10000 ???? 01 4c enemy_shotFlag = var12 43 10000 ???? 44 10000 ???? 01 4b enemy_shotY = var11 45 10000 ???? 46 10000 ???? 01 4a enemy_shotX = var10 47 10000 ???? 48 10000 ???? 01 49 bulletY = var9 49 10000 ???? 50 10000 ???? 01 48 bulletX = var8 51 10000 ???? 52 10000 ???? 01 47 joyposright = var7 53 10000 ???? 54 10000 ???? 01 46 joyposleft = var6 55 10000 ???? 56 10000 ???? 01 45 joyposdown = var5 57 10000 ???? 58 10000 ???? 01 44 joyposup = var4 59 10000 ???? 60 10000 ???? 01 43 fire_debounce = var3 61 10000 ???? 62 10000 ???? 01 42 playerY = var2 63 10000 ???? 64 10000 ???? 01 41 playerX = var1 65 10000 ???? 66 10000 ???? 01 40 frameCounter = var0 67 10000 ???? 68 10000 ???? 00 01 collisionwrap = 1 69 10000 ???? 00 01 NTSC = 1 70 10000 ???? 00 c0 SCREENHEIGHT = 192 71 10000 ???? 00 01 CHECKOVERWRITE = 1 72 10000 ???? 00 08 ZONEHEIGHT = 8 73 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 3 0 10000 ???? include "7800basic_variable_redefs.h" 1 10000 ???? ; This file contains variable mapping and other information for the current project. 2 10000 ???? 3 10000 ???? 00 00 vertical_shooting_enemyshot_mode = $00 4 10000 ???? 00 1f vertical_shooting_enemyshot_width_twoscompliment = $1f 5 10000 ???? 00 01 vertical_shooting_enemyshot_width = $01 6 10000 ???? 00 00 vertical_shooting_bullet_mode = $00 7 10000 ???? 00 1f vertical_shooting_bullet_width_twoscompliment = $1f 8 10000 ???? 00 01 vertical_shooting_bullet_width = $01 9 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 10 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 11 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 12 10000 ???? 00 00 vertical_shooting_ship_mode = $00 13 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 14 10000 ???? 00 02 vertical_shooting_ship_width = $02 15 10000 ???? 00 00 atascii_mode = $00 16 10000 ???? 00 0a atascii_width_twoscompliment = $0a 17 10000 ???? 00 f6 atascii_width = $f6 18 10000 ???? 00 bc vertical_shooting_enemyshot_color3 = $bc 19 10000 ???? 00 83 vertical_shooting_enemyshot_color2 = $83 20 10000 ???? 00 a8 vertical_shooting_enemyshot_color1 = $a8 21 10000 ???? 00 00 vertical_shooting_enemyshot_color0 = $00 22 10000 ???? 00 1d vertical_shooting_bullet_color3 = $1d 23 10000 ???? 00 18 vertical_shooting_bullet_color2 = $18 24 10000 ???? 00 0f vertical_shooting_bullet_color1 = $0f 25 10000 ???? 00 00 vertical_shooting_bullet_color0 = $00 26 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 27 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 28 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 29 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 30 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 31 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 32 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 33 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 34 10000 ???? 00 00 atascii_color1 = $00 35 10000 ???? 00 0f atascii_color0 = $0f 36 10000 ???? 01 4f rDirection = var15 37 10000 ???? 38 10000 ???? 01 4e rMovement = var14 39 10000 ???? 40 10000 ???? 01 4d playerFlag = var13 41 10000 ???? 42 10000 ???? 01 4c enemy_shotFlag = var12 43 10000 ???? 44 10000 ???? 01 4b enemy_shotY = var11 45 10000 ???? 46 10000 ???? 01 4a enemy_shotX = var10 47 10000 ???? 48 10000 ???? 01 49 bulletY = var9 49 10000 ???? 50 10000 ???? 01 48 bulletX = var8 51 10000 ???? 52 10000 ???? 01 47 joyposright = var7 53 10000 ???? 54 10000 ???? 01 46 joyposleft = var6 55 10000 ???? 56 10000 ???? 01 45 joyposdown = var5 57 10000 ???? 58 10000 ???? 01 44 joyposup = var4 59 10000 ???? 60 10000 ???? 01 43 fire_debounce = var3 61 10000 ???? 62 10000 ???? 01 42 playerY = var2 63 10000 ???? 64 10000 ???? 01 41 playerX = var1 65 10000 ???? 66 10000 ???? 01 40 frameCounter = var0 67 10000 ???? 68 10000 ???? 00 01 collisionwrap = 1 69 10000 ???? 00 01 NTSC = 1 70 10000 ???? 00 c0 SCREENHEIGHT = 192 71 10000 ???? 00 01 CHECKOVERWRITE = 1 72 10000 ???? 00 08 ZONEHEIGHT = 8 73 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 rMovement = var14 449 c00d 450 c00d .L024 ;; dim rDirection = var15 451 c00d 452 c00d . 453 c00d ;; 454 c00d 455 c00d .L025 ;; P0C1 = $0F : P0C2 = $05 : P0C3 = $32 456 c00d 457 c00d a9 0f LDA #$0F 458 c00f 85 21 STA P0C1 459 c011 a9 05 LDA #$05 460 c013 85 22 STA P0C2 461 c015 a9 32 LDA #$32 462 c017 85 23 STA P0C3 463 c019 .L026 ;; P1C1 = $0F : P1C2 = $EE : P1C3 = $E7 464 c019 465 c019 a9 0f LDA #$0F 466 c01b 85 25 STA P1C1 467 c01d a9 ee LDA #$EE 468 c01f 85 26 STA P1C2 469 c021 a9 e7 LDA #$E7 470 c023 85 27 STA P1C3 471 c025 .L027 ;; P2C1 = $88 : P2C2 = $9D : P2C3 = $73 472 c025 473 c025 a9 88 LDA #$88 474 c027 85 29 STA P2C1 475 c029 a9 9d LDA #$9D 476 c02b 85 2a STA P2C2 477 c02d a9 73 LDA #$73 478 c02f 85 2b STA P2C3 479 c031 . 480 c031 ;; 481 c031 482 c031 .L028 ;; characterset atascii 483 c031 484 c031 a9 e0 lda #>atascii 485 c033 85 34 sta CHARBASE 486 c035 8d 0b 21 sta sCHARBASE 487 c038 488 c038 a9 60 lda #(atascii_mode | %01100000) 489 c03a 8d 06 21 sta charactermode 490 c03d 491 c03d .L029 ;; alphachars ASCII 492 c03d 493 c03d . 494 c03d ;; 495 c03d 496 c03d .L030 ;; incgraphic atascii.png 160A 497 c03d 498 c03d .L031 ;; incgraphic vertical_shooting_ship.png 160A 499 c03d 500 c03d .L032 ;; incgraphic vertical_shooting_bullet.png 160A 501 c03d 502 c03d .L033 ;; incgraphic vertical_shooting_enemyshot.png 160A 503 c03d 504 c03d . 505 c03d ;; 506 c03d 507 c03d .L034 ;; playerX = 80 : playerY = 144 : fire_debounce = 0 508 c03d 509 c03d a9 50 LDA #80 510 c03f 8d 41 01 STA playerX 511 c042 a9 90 LDA #144 512 c044 8d 42 01 STA playerY 513 c047 a9 00 LDA #0 514 c049 8d 43 01 STA fire_debounce 515 c04c .L035 ;; joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 516 c04c 517 c04c a9 00 LDA #0 518 c04e 8d 44 01 STA joyposup 519 c051 8d 45 01 STA joyposdown 520 c054 8d 46 01 STA joyposleft 521 c057 8d 47 01 STA joyposright 522 c05a .L036 ;; bulletX = 0 : bulletY = 0 523 c05a 524 c05a a9 00 LDA #0 525 c05c 8d 48 01 STA bulletX 526 c05f 8d 49 01 STA bulletY 527 c062 .L037 ;; enemy_shotX = 0 : enemy_shotY = 0 : enemy_shotFlag = 0 528 c062 529 c062 a9 00 LDA #0 530 c064 8d 4a 01 STA enemy_shotX 531 c067 8d 4b 01 STA enemy_shotY 532 c06a 8d 4c 01 STA enemy_shotFlag 533 c06d .L038 ;; rMovement = 1 : rDirection = 1 534 c06d 535 c06d a9 01 LDA #1 536 c06f 8d 4e 01 STA rMovement 537 c072 8d 4f 01 STA rDirection 538 c075 . 539 c075 ;; 540 c075 541 c075 .titlescreenloop 542 c075 ;; titlescreenloop 543 c075 544 c075 .L039 ;; restorescreen 545 c075 546 c075 20 86 f0 jsr restorescreen 547 c078 .L040 ;; drawscreen 548 c078 549 c078 20 a8 f0 jsr drawscreen 550 c07b .L041 ;; plotchars 'New^Vertical^Shooting^Demo' 1 16 8 551 c07b 552 c07b 4c 98 c0 JMP skipalphadata0 553 c07e alphadata0 554 c07e 4e .byte.b (alphadata0 585 c09e 85 43 sta temp2 586 c0a0 587 c0a0 a9 06 lda #6 ; width in two's complement 588 c0a2 09 20 ora #32 ; palette left shifted 5 bits 589 c0a4 85 44 sta temp3 590 c0a6 a9 10 lda #16 591 c0a8 85 45 sta temp4 592 c0aa 593 c0aa a9 08 lda #8 594 c0ac 595 c0ac 85 46 sta temp5 596 c0ae 597 c0ae 20 48 f3 jsr plotcharacters 598 c0b1 .L042 ;; plotchars 'by^Shane^Skekel.' 1 16 16 599 c0b1 600 c0b1 4c c4 c0 JMP skipalphadata1 601 c0b4 alphadata1 602 c0b4 62 .byte.b (alphadata1 623 c0ca 85 43 sta temp2 624 c0cc 625 c0cc a9 10 lda #16 ; width in two's complement 626 c0ce 09 20 ora #32 ; palette left shifted 5 bits 627 c0d0 85 44 sta temp3 628 c0d2 a9 10 lda #16 629 c0d4 85 45 sta temp4 630 c0d6 631 c0d6 a9 10 lda #16 632 c0d8 633 c0d8 85 46 sta temp5 634 c0da 635 c0da 20 48 f3 jsr plotcharacters 636 c0dd .L043 ;; if switchreset then reboot 637 c0dd 638 c0dd 20 2c f4 jsr checkresetswitch 639 c0e0 d0 03 BNE .skipL043 640 c0e2 .condpart0 641 c0e2 4c 11 f5 JMP START 642 c0e5 .skipL043 643 c0e5 .L044 ;; if joy0fire then clearscreen : goto init 644 c0e5 645 c0e5 2c 02 21 bit sINPT1 646 c0e8 10 06 BPL .skipL044 647 c0ea .condpart1 648 c0ea 20 74 f0 jsr clearscreen 649 c0ed 4c f3 c0 jmp .init 650 c0f0 651 c0f0 .skipL044 652 c0f0 .L045 ;; goto titlescreenloop 653 c0f0 654 c0f0 4c 75 c0 jmp .titlescreenloop 655 c0f3 656 c0f3 . 657 c0f3 ;; 658 c0f3 659 c0f3 .init 660 c0f3 ;; init 661 c0f3 662 c0f3 .L046 ;; clearscreen 663 c0f3 664 c0f3 20 74 f0 jsr clearscreen 665 c0f6 .L047 ;; plotchars 'Push^Fire^to^Begin.' 0 24 80 666 c0f6 667 c0f6 4c 0c c1 JMP skipalphadata2 668 c0f9 alphadata2 669 c0f9 50 .byte.b (alphadata2 693 c112 85 43 sta temp2 694 c114 695 c114 a9 0d lda #13 ; width in two's complement 696 c116 09 00 ora #0 ; palette left shifted 5 bits 697 c118 85 44 sta temp3 698 c11a a9 18 lda #24 699 c11c 85 45 sta temp4 700 c11e 701 c11e a9 50 lda #80 702 c120 703 c120 85 46 sta temp5 704 c122 705 c122 20 48 f3 jsr plotcharacters 706 c125 .L048 ;; savescreen 707 c125 708 c125 20 98 f0 jsr savescreen 709 c128 .L049 ;; drawscreen 710 c128 711 c128 20 a8 f0 jsr drawscreen 712 c12b . 713 c12b ;; 714 c12b 715 c12b .main 716 c12b ;; main 717 c12b 718 c12b .L050 ;; frameCounter = 0 719 c12b 720 c12b a9 00 LDA #0 721 c12d 8d 40 01 STA frameCounter 722 c130 .mainloop 723 c130 ;; mainloop 724 c130 725 c130 .L051 ;; BACKGRND = $00 726 c130 727 c130 a9 00 LDA #$00 728 c132 85 20 STA BACKGRND 729 c134 .L052 ;; restorescreen 730 c134 731 c134 20 86 f0 jsr restorescreen 732 c137 .L053 ;; rMovement = ( rand & 7 ) - 2 733 c137 734 c137 ; complex statement detected 735 c137 20 a4 f3 jsr randomize 736 c13a 29 07 AND #7 737 c13c 38 SEC 738 c13d e9 02 SBC #2 739 c13f 8d 4e 01 STA rMovement 740 c142 .L054 ;; rDirection = ( rand & 4 ) 741 c142 742 c142 ; complex statement detected 743 c142 20 a4 f3 jsr randomize 744 c145 29 04 AND #4 745 c147 8d 4f 01 STA rDirection 746 c14a .L055 ;; plotsprite vertical_shooting_ship 0 playerX playerY 747 c14a 748 c14a a9 f6 lda #vertical_shooting_ship 752 c150 85 43 sta temp2 753 c152 754 c152 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 755 c154 85 44 sta temp3 756 c156 757 c156 ad 41 01 lda playerX 758 c159 85 45 sta temp4 759 c15b 760 c15b ad 42 01 lda playerY 761 c15e 762 c15e 85 46 sta temp5 763 c160 764 c160 a9 40 lda #(vertical_shooting_ship_mode|%01000000) 765 c162 85 47 sta temp6 766 c164 767 c164 20 88 f2 jsr plotsprite 768 c167 ; +tall sprite replot 769 c167 18 clc 770 c168 a5 42 lda temp1 771 c16a 69 02 adc #vertical_shooting_ship_width 772 c16c 85 42 sta temp1 773 c16e a5 46 lda temp5 774 c170 69 08 adc #WZONEHEIGHT 775 c172 85 46 sta temp5 776 c174 20 88 f2 jsr plotsprite 777 c177 .L056 ;; plotsprite vertical_shooting_bullet 1 bulletX bulletY 778 c177 779 c177 a9 fa lda #vertical_shooting_bullet 783 c17d 85 43 sta temp2 784 c17f 785 c17f a9 3f lda #(32|vertical_shooting_bullet_width_twoscompliment) 786 c181 85 44 sta temp3 787 c183 788 c183 ad 48 01 lda bulletX 789 c186 85 45 sta temp4 790 c188 791 c188 ad 49 01 lda bulletY 792 c18b 793 c18b 85 46 sta temp5 794 c18d 795 c18d a9 40 lda #(vertical_shooting_bullet_mode|%01000000) 796 c18f 85 47 sta temp6 797 c191 798 c191 20 88 f2 jsr plotsprite 799 c194 .L057 ;; plotsprite vertical_shooting_enemyshot 2 enemy_shotX enemy_shotY 800 c194 801 c194 a9 fb lda #vertical_shooting_enemyshot 805 c19a 85 43 sta temp2 806 c19c 807 c19c a9 5f lda #(64|vertical_shooting_enemyshot_width_twoscompliment) 808 c19e 85 44 sta temp3 809 c1a0 810 c1a0 ad 4a 01 lda enemy_shotX 811 c1a3 85 45 sta temp4 812 c1a5 813 c1a5 ad 4b 01 lda enemy_shotY 814 c1a8 815 c1a8 85 46 sta temp5 816 c1aa 817 c1aa a9 40 lda #(vertical_shooting_enemyshot_mode|%01000000) 818 c1ac 85 47 sta temp6 819 c1ae 820 c1ae 20 88 f2 jsr plotsprite 821 c1b1 .L058 ;; drawscreen 822 c1b1 823 c1b1 20 a8 f0 jsr drawscreen 824 c1b4 .L059 ;; frameCounter = frameCounter + 1 825 c1b4 826 c1b4 ad 40 01 LDA frameCounter 827 c1b7 18 CLC 828 c1b8 69 01 ADC #1 829 c1ba 8d 40 01 STA frameCounter 830 c1bd .L060 ;; if frameCounter > 10 then frameCounter = 0 831 c1bd 832 c1bd a9 0a LDA #10 833 c1bf cd 40 01 CMP frameCounter 834 c1c2 b0 05 BCS .skipL060 835 c1c4 .condpart2 836 c1c4 a9 00 LDA #0 837 c1c6 8d 40 01 STA frameCounter 838 c1c9 .skipL060 839 c1c9 .L061 ;; if joy0up && joyposup = - 2 then SetBulletHome 840 c1c9 841 c1c9 a9 10 lda #$10 842 c1cb 2c 80 02 bit SWCHA 843 c1ce d0 10 BNE .skipL061 844 c1d0 .condpart3 845 c1d0 ; complex condition detected 846 c1d0 a9 fe LDA #254 847 c1d2 48 PHA 848 c1d3 ba TSX 849 c1d4 68 PLA 850 c1d5 ad 44 01 LDA joyposup 851 c1d8 dd 01 01 CMP $101,x 852 c1db - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 853 c1db - BEQ .SetBulletHome 854 c1db else 855 c1db d0 03 bne .0skipSetBulletHome 856 c1dd 4c e2 c3 jmp .SetBulletHome 857 c1e0 .0skipSetBulletHome 858 c1e0 endif 859 c1e0 .skipL061 860 c1e0 .L062 ;; if joy0down && joyposdown = - 2 then SetBulletHome 861 c1e0 862 c1e0 a9 20 lda #$20 863 c1e2 2c 80 02 bit SWCHA 864 c1e5 d0 10 BNE .skipL062 865 c1e7 .condpart4 866 c1e7 ; complex condition detected 867 c1e7 a9 fe LDA #254 868 c1e9 48 PHA 869 c1ea ba TSX 870 c1eb 68 PLA 871 c1ec ad 45 01 LDA joyposdown 872 c1ef dd 01 01 CMP $101,x 873 c1f2 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 874 c1f2 - BEQ .SetBulletHome 875 c1f2 else 876 c1f2 d0 03 bne .1skipSetBulletHome 877 c1f4 4c e2 c3 jmp .SetBulletHome 878 c1f7 .1skipSetBulletHome 879 c1f7 endif 880 c1f7 .skipL062 881 c1f7 .L063 ;; if joy0up && joyposleft = - 2 then SetBulletHome 882 c1f7 883 c1f7 a9 10 lda #$10 884 c1f9 2c 80 02 bit SWCHA 885 c1fc d0 10 BNE .skipL063 886 c1fe .condpart5 887 c1fe ; complex condition detected 888 c1fe a9 fe LDA #254 889 c200 48 PHA 890 c201 ba TSX 891 c202 68 PLA 892 c203 ad 46 01 LDA joyposleft 893 c206 dd 01 01 CMP $101,x 894 c209 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 895 c209 - BEQ .SetBulletHome 896 c209 else 897 c209 d0 03 bne .2skipSetBulletHome 898 c20b 4c e2 c3 jmp .SetBulletHome 899 c20e .2skipSetBulletHome 900 c20e endif 901 c20e .skipL063 902 c20e .L064 ;; if joy0down && joyposright = - 2 then SetBulletHome 903 c20e 904 c20e a9 20 lda #$20 905 c210 2c 80 02 bit SWCHA 906 c213 d0 10 BNE .skipL064 907 c215 .condpart6 908 c215 ; complex condition detected 909 c215 a9 fe LDA #254 910 c217 48 PHA 911 c218 ba TSX 912 c219 68 PLA 913 c21a ad 47 01 LDA joyposright 914 c21d dd 01 01 CMP $101,x 915 c220 - if ((* - .SetBulletHome) < 127) && ((* - .SetBulletHome) > -128) 916 c220 - BEQ .SetBulletHome 917 c220 else 918 c220 d0 03 bne .3skipSetBulletHome 919 c222 4c e2 c3 jmp .SetBulletHome 920 c225 .3skipSetBulletHome 921 c225 endif 922 c225 .skipL064 923 c225 .L065 ;; if joy0up then playerY = playerY - 1 : joyposup = 1 : joyposdown = 0 : joyposleft = 0 : joyposright = 0 924 c225 925 c225 a9 10 lda #$10 926 c227 2c 80 02 bit SWCHA 927 c22a d0 19 BNE .skipL065 928 c22c .condpart7 929 c22c ad 42 01 LDA playerY 930 c22f 38 SEC 931 c230 e9 01 SBC #1 932 c232 8d 42 01 STA playerY 933 c235 a9 01 LDA #1 934 c237 8d 44 01 STA joyposup 935 c23a a9 00 LDA #0 936 c23c 8d 45 01 STA joyposdown 937 c23f 8d 46 01 STA joyposleft 938 c242 8d 47 01 STA joyposright 939 c245 .skipL065 940 c245 .L066 ;; if joy0down then playerY = playerY + 1 : joyposup = 0 : joyposdown = 1 : joyposleft = 0 : joyposright = 0 941 c245 942 c245 a9 20 lda #$20 943 c247 2c 80 02 bit SWCHA 944 c24a d0 1b BNE .skipL066 945 c24c .condpart8 946 c24c ad 42 01 LDA playerY 947 c24f 18 CLC 948 c250 69 01 ADC #1 949 c252 8d 42 01 STA playerY 950 c255 a9 00 LDA #0 951 c257 8d 44 01 STA joyposup 952 c25a a9 01 LDA #1 953 c25c 8d 45 01 STA joyposdown 954 c25f a9 00 LDA #0 955 c261 8d 46 01 STA joyposleft 956 c264 8d 47 01 STA joyposright 957 c267 .skipL066 958 c267 .L067 ;; if joy0left then playerX = playerX - 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 1 : joyposright = 0 959 c267 960 c267 2c 80 02 bit SWCHA 961 c26a 70 1b BVS .skipL067 962 c26c .condpart9 963 c26c ad 41 01 LDA playerX 964 c26f 38 SEC 965 c270 e9 01 SBC #1 966 c272 8d 41 01 STA playerX 967 c275 a9 00 LDA #0 968 c277 8d 44 01 STA joyposup 969 c27a 8d 45 01 STA joyposdown 970 c27d a9 01 LDA #1 971 c27f 8d 46 01 STA joyposleft 972 c282 a9 00 LDA #0 973 c284 8d 47 01 STA joyposright 974 c287 .skipL067 975 c287 .L068 ;; if joy0right then playerX = playerX + 1 : joyposup = 0 : joyposdown = 0 : joyposleft = 0 : joyposright = 1 976 c287 977 c287 2c 80 02 bit SWCHA 978 c28a 30 19 BMI .skipL068 979 c28c .condpart10 980 c28c ad 41 01 LDA playerX 981 c28f 18 CLC 982 c290 69 01 ADC #1 983 c292 8d 41 01 STA playerX 984 c295 a9 00 LDA #0 985 c297 8d 44 01 STA joyposup 986 c29a 8d 45 01 STA joyposdown 987 c29d 8d 46 01 STA joyposleft 988 c2a0 a9 01 LDA #1 989 c2a2 8d 47 01 STA joyposright 990 c2a5 .skipL068 991 c2a5 .L069 ;; if joy0fire && joyposup = 1 then bulletY = bulletY - 5 992 c2a5 993 c2a5 2c 02 21 bit sINPT1 994 c2a8 10 10 BPL .skipL069 995 c2aa .condpart11 996 c2aa ad 44 01 LDA joyposup 997 c2ad c9 01 CMP #1 998 c2af d0 09 BNE .skip11then 999 c2b1 .condpart12 1000 c2b1 ad 49 01 LDA bulletY 1001 c2b4 38 SEC 1002 c2b5 e9 05 SBC #5 1003 c2b7 8d 49 01 STA bulletY 1004 c2ba .skip11then 1005 c2ba .skipL069 1006 c2ba .L070 ;; if joy0fire && joyposdown = 1 then bulletY = bulletY - 5 1007 c2ba 1008 c2ba 2c 02 21 bit sINPT1 1009 c2bd 10 10 BPL .skipL070 1010 c2bf .condpart13 1011 c2bf ad 45 01 LDA joyposdown 1012 c2c2 c9 01 CMP #1 1013 c2c4 d0 09 BNE .skip13then 1014 c2c6 .condpart14 1015 c2c6 ad 49 01 LDA bulletY 1016 c2c9 38 SEC 1017 c2ca e9 05 SBC #5 1018 c2cc 8d 49 01 STA bulletY 1019 c2cf .skip13then 1020 c2cf .skipL070 1021 c2cf .L071 ;; if joy0fire && joyposleft = 1 then bulletY = bulletY - 5 1022 c2cf 1023 c2cf 2c 02 21 bit sINPT1 1024 c2d2 10 10 BPL .skipL071 1025 c2d4 .condpart15 1026 c2d4 ad 46 01 LDA joyposleft 1027 c2d7 c9 01 CMP #1 1028 c2d9 d0 09 BNE .skip15then 1029 c2db .condpart16 1030 c2db ad 49 01 LDA bulletY 1031 c2de 38 SEC 1032 c2df e9 05 SBC #5 1033 c2e1 8d 49 01 STA bulletY 1034 c2e4 .skip15then 1035 c2e4 .skipL071 1036 c2e4 .L072 ;; if joy0fire && joyposright = 1 then bulletY = bulletY - 5 1037 c2e4 1038 c2e4 2c 02 21 bit sINPT1 1039 c2e7 10 10 BPL .skipL072 1040 c2e9 .condpart17 1041 c2e9 ad 47 01 LDA joyposright 1042 c2ec c9 01 CMP #1 1043 c2ee d0 09 BNE .skip17then 1044 c2f0 .condpart18 1045 c2f0 ad 49 01 LDA bulletY 1046 c2f3 38 SEC 1047 c2f4 e9 05 SBC #5 1048 c2f6 8d 49 01 STA bulletY 1049 c2f9 .skip17then 1050 c2f9 .skipL072 1051 c2f9 .L073 ;; if !joy0fire then fire_debounce = 1 1052 c2f9 1053 c2f9 2c 02 21 bit sINPT1 1054 c2fc 30 05 BMI .skipL073 1055 c2fe .condpart19 1056 c2fe a9 01 LDA #1 1057 c300 8d 43 01 STA fire_debounce 1058 c303 .skipL073 1059 c303 .L074 ;; if playerX > 152 then playerX = playerX - 1 1060 c303 1061 c303 a9 98 LDA #152 1062 c305 cd 41 01 CMP playerX 1063 c308 b0 09 BCS .skipL074 1064 c30a .condpart20 1065 c30a ad 41 01 LDA playerX 1066 c30d 38 SEC 1067 c30e e9 01 SBC #1 1068 c310 8d 41 01 STA playerX 1069 c313 .skipL074 1070 c313 .L075 ;; if playerX < 1 then playerX = playerX + 1 1071 c313 1072 c313 ad 41 01 LDA playerX 1073 c316 c9 01 CMP #1 1074 c318 b0 09 BCS .skipL075 1075 c31a .condpart21 1076 c31a ad 41 01 LDA playerX 1077 c31d 18 CLC 1078 c31e 69 01 ADC #1 1079 c320 8d 41 01 STA playerX 1080 c323 .skipL075 1081 c323 .L076 ;; if playerY > 177 then playerY = playerY - 1 1082 c323 1083 c323 a9 b1 LDA #177 1084 c325 cd 42 01 CMP playerY 1085 c328 b0 09 BCS .skipL076 1086 c32a .condpart22 1087 c32a ad 42 01 LDA playerY 1088 c32d 38 SEC 1089 c32e e9 01 SBC #1 1090 c330 8d 42 01 STA playerY 1091 c333 .skipL076 1092 c333 .L077 ;; if playerY < 1 then playerY = playerY + 1 1093 c333 1094 c333 ad 42 01 LDA playerY 1095 c336 c9 01 CMP #1 1096 c338 b0 09 BCS .skipL077 1097 c33a .condpart23 1098 c33a ad 42 01 LDA playerY 1099 c33d 18 CLC 1100 c33e 69 01 ADC #1 1101 c340 8d 42 01 STA playerY 1102 c343 .skipL077 1103 c343 .L078 ;; if bulletY > 183 then bulletY = bulletY - 1 1104 c343 1105 c343 a9 b7 LDA #183 1106 c345 cd 49 01 CMP bulletY 1107 c348 b0 09 BCS .skipL078 1108 c34a .condpart24 1109 c34a ad 49 01 LDA bulletY 1110 c34d 38 SEC 1111 c34e e9 01 SBC #1 1112 c350 8d 49 01 STA bulletY 1113 c353 .skipL078 1114 c353 .L079 ;; if bulletY < 1 then bulletY = bulletY + 1 1115 c353 1116 c353 ad 49 01 LDA bulletY 1117 c356 c9 01 CMP #1 1118 c358 b0 09 BCS .skipL079 1119 c35a .condpart25 1120 c35a ad 49 01 LDA bulletY 1121 c35d 18 CLC 1122 c35e 69 01 ADC #1 1123 c360 8d 49 01 STA bulletY 1124 c363 .skipL079 1125 c363 .L080 ;; if boxcollision ( playerX , playerY , 8 , 16 , enemy_shotX , enemy_shotY , 4 , 8 ) then enemy_shotX = 200 : enemy_shotY = 200 : playerFlag = 1 1126 c363 1127 c363 1128 c363 18 clc ; one clc only. If we overflow we're screwed anyway. 1129 c364 ad 42 01 lda playerY 1130 c367 69 20 adc #((256-WSCREENHEIGHT)/2) 1131 c369 a8 tay 1132 c36a a9 07 lda #(8-1) 1133 c36c 85 44 sta temp3 1134 c36e a9 0f lda #(16-1) 1135 c370 85 45 sta temp4 1136 c372 ad 4a 01 lda enemy_shotX 1137 c375 69 30 adc #48 1138 c377 85 46 sta temp5 1139 c379 ad 4b 01 lda enemy_shotY 1140 c37c 69 20 adc #((256-WSCREENHEIGHT)/2) 1141 c37e 85 47 sta temp6 1142 c380 a9 03 lda #(4-1) 1143 c382 85 48 sta temp7 1144 c384 a9 07 lda #(8-1) 1145 c386 85 49 sta temp8 1146 c388 ad 41 01 lda playerX 1147 c38b 69 30 adc #48 1148 c38d 20 7d f3 jsr boxcollision 1149 c390 1150 c390 90 0d BCC .skipL080 1151 c392 .condpart26 1152 c392 a9 c8 LDA #200 1153 c394 8d 4a 01 STA enemy_shotX 1154 c397 8d 4b 01 STA enemy_shotY 1155 c39a a9 01 LDA #1 1156 c39c 8d 4d 01 STA playerFlag 1157 c39f .skipL080 1158 c39f .L081 ;; if enemy_shotX > 160 then enemy_shotX = enemy_shotX - 1 1159 c39f 1160 c39f a9 a0 LDA #160 1161 c3a1 cd 4a 01 CMP enemy_shotX 1162 c3a4 b0 09 BCS .skipL081 1163 c3a6 .condpart27 1164 c3a6 ad 4a 01 LDA enemy_shotX 1165 c3a9 38 SEC 1166 c3aa e9 01 SBC #1 1167 c3ac 8d 4a 01 STA enemy_shotX 1168 c3af .skipL081 1169 c3af .L082 ;; if enemy_shotX < 1 then enemy_shotX = enemy_shotX + 1 1170 c3af 1171 c3af ad 4a 01 LDA enemy_shotX 1172 c3b2 c9 01 CMP #1 1173 c3b4 b0 09 BCS .skipL082 1174 c3b6 .condpart28 1175 c3b6 ad 4a 01 LDA enemy_shotX 1176 c3b9 18 CLC 1177 c3ba 69 01 ADC #1 1178 c3bc 8d 4a 01 STA enemy_shotX 1179 c3bf .skipL082 1180 c3bf .L083 ;; if enemy_shotY > 191 then enemy_shotY = enemy_shotY - 1 1181 c3bf 1182 c3bf a9 bf LDA #191 1183 c3c1 cd 4b 01 CMP enemy_shotY 1184 c3c4 b0 09 BCS .skipL083 1185 c3c6 .condpart29 1186 c3c6 ad 4b 01 LDA enemy_shotY 1187 c3c9 38 SEC 1188 c3ca e9 01 SBC #1 1189 c3cc 8d 4b 01 STA enemy_shotY 1190 c3cf .skipL083 1191 c3cf .L084 ;; if enemy_shotY < 1 then enemy_shotY = enemy_shotY + 1 1192 c3cf 1193 c3cf ad 4b 01 LDA enemy_shotY 1194 c3d2 c9 01 CMP #1 1195 c3d4 b0 09 BCS .skipL084 1196 c3d6 .condpart30 1197 c3d6 ad 4b 01 LDA enemy_shotY 1198 c3d9 18 CLC 1199 c3da 69 01 ADC #1 1200 c3dc 8d 4b 01 STA enemy_shotY 1201 c3df .skipL084 1202 c3df .L085 ;; goto mainloop 1203 c3df 1204 c3df 4c 30 c1 jmp .mainloop 1205 c3e2 1206 c3e2 . 1207 c3e2 ;; 1208 c3e2 1209 c3e2 .SetBulletHome 1210 c3e2 ;; SetBulletHome 1211 c3e2 1212 c3e2 .L086 ;; bulletX = playerX + 4 : bulletY = playerY - 2 1213 c3e2 1214 c3e2 ad 41 01 LDA playerX 1215 c3e5 18 CLC 1216 c3e6 69 04 ADC #4 1217 c3e8 8d 48 01 STA bulletX 1218 c3eb ad 42 01 LDA playerY 1219 c3ee 38 SEC 1220 c3ef e9 02 SBC #2 1221 c3f1 8d 49 01 STA bulletY 1222 c3f4 .L087 ;; return 1223 c3f4 60 RTS 1224 c3f4 DMAHOLEEND0 SET . 1225 c3f5 gameend 1226 c3f5 DMAHOLEEND0 SET . 7179 bytes of ROM space left in the main area. 1227 c3f5 echo " ",[($E000 - gameend)]d , "bytes of ROM space left in the main area." 1228 c3f5 1229 e000 ORG $E000,0 ; ************* 1230 e000 1231 e000 atascii 1232 e000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1233 e020 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1234 e040 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000500000000000000 1235 e060 00 00 00 00* HEX 0000000000000000000000000000000000000000000005000000000000000000 1236 e080 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1237 e0a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1238 e0c0 00 00 00 00* HEX 0000000000000000000000000000155000000000055000000000000000000000 1239 e0e0 14 00 00 14* HEX 14000014000000000000000000000000000015400000 1240 e0f6 vertical_shooting_ship 1241 e0f6 07 d0 HEX 07d0 1242 e0f8 vertical_shooting_ship_tallsprite_00 1243 e0f8 80 02 HEX 8002 1244 e0fa vertical_shooting_bullet 1245 e0fa 28 HEX 28 1246 e0fb vertical_shooting_enemyshot 1247 e0fb 00 HEX 00 1248 e0fc 1249 e100 ORG $E100,0 ; ************* 1250 e100 1251 e100 ;atascii 1252 e100 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1253 e120 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1254 e140 00 00 01 40* HEX 0000014000001414014010140545000000541500000000000140000001401000 1255 e160 05 50 15 54* HEX 0550155415540550005005500550050005500540014001400014000014000140 1256 e180 05 54 14 14* HEX 0554141415500550154015541400055414141554055014141554140514140550 1257 e1a0 14 00 05 14* HEX 1400051414140550014015540140140514140140155401540014154000005555 1258 e1c0 00 00 05 54* HEX 0000055415500550055405500140001414140550001414140550140514140550 1259 e1e0 14 00 00 14* HEX 14000014140015500054055401400514141400501554 1260 e1f6 ;vertical_shooting_ship 1261 e1f6 07 d0 HEX 07d0 1262 e1f8 ;vertical_shooting_ship_tallsprite_00 1263 e1f8 80 02 HEX 8002 1264 e1fa ;vertical_shooting_bullet 1265 e1fa 28 HEX 28 1266 e1fb ;vertical_shooting_enemyshot 1267 e1fb 88 HEX 88 1268 e1fc 1269 e200 ORG $E200,0 ; ************* 1270 e200 1271 e200 ;atascii 1272 e200 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1273 e220 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1274 e240 00 00 00 00* HEX 0000000000005555155014141414000001500540141401400140000001401400 1275 e260 14 14 01 40* HEX 1414014005001414155414141414050014140050014001400050155405000000 1276 e280 14 00 15 54* HEX 1400155414141414145014001400141414140140141414501400140514541414 1277 e2a0 14 00 14 50* HEX 1400145014500014014014140550151514140140140001400050014000000000 1278 e2c0 00 00 14 14* HEX 0000141414141400141414000140055414140140001414500140144514141414 1279 e2e0 15 50 05 54* HEX 15500554140000140140141405500554055005540500 1280 e2f6 ;vertical_shooting_ship 1281 e2f6 03 c0 HEX 03c0 1282 e2f8 ;vertical_shooting_ship_tallsprite_00 1283 e2f8 a1 4a HEX a14a 1284 e2fa ;vertical_shooting_bullet 1285 e2fa 3c HEX 3c 1286 e2fb ;vertical_shooting_enemyshot 1287 e2fb 10 HEX 10 1288 e2fc 1289 e300 ORG $E300,0 ; ************* 1290 e300 1291 e300 ;atascii 1292 e300 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1293 e320 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1294 e340 00 00 01 40* HEX 0000014000001414001405001455000001400140055001400000000000000500 1295 e360 15 14 01 40* HEX 1514014001400050145000141414014014140014000000000140000001400140 1296 e380 14 54 14 14* HEX 1454141414141400141414001400145414140140001415401400144515541414 1297 e3a0 15 50 14 14* HEX 1550141415500014014014141414155505500140050001400140014014050000 1298 e3c0 00 00 05 54* HEX 0000055414141400141415540140141414140140001415400140155514141414 1299 e3e0 14 14 14 14* HEX 14141414140005500140141414141555014014140140 1300 e3f6 ;vertical_shooting_ship 1301 e3f6 01 40 HEX 0140 1302 e3f8 ;vertical_shooting_ship_tallsprite_00 1303 e3f8 a5 5a HEX a55a 1304 e3fa ;vertical_shooting_bullet 1305 e3fa 3c HEX 3c 1306 e3fb ;vertical_shooting_enemyshot 1307 e3fb 74 HEX 74 1308 e3fc 1309 e400 ORG $E400,0 ; ************* 1310 e400 1311 e400 ;atascii 1312 e400 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1313 e420 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1314 e440 00 00 01 40* HEX 0000014014141414055001400540014001400140555515540000155400000140 1315 e460 14 54 01 40* HEX 1454014000500140055015501550005005500554014001400500000000500050 1316 e480 14 54 14 14* HEX 1454141415501400141415501550140015540140001415401400155515541414 1317 e4a0 14 14 14 14* HEX 1414141414140550014014141414144505500550014001400500014005140000 1318 e4c0 01 40 00 14* HEX 0140001415501400055414140554141415500540001414500140155514141414 1319 e4e0 14 14 14 14* HEX 14141414141414000140141414141445055014140050 1320 e4f6 ;vertical_shooting_ship 1321 e4f6 01 40 HEX 0140 1322 e4f8 ;vertical_shooting_ship_tallsprite_00 1323 e4f8 a5 5a HEX a55a 1324 e4fa ;vertical_shooting_bullet 1325 e4fa 14 HEX 14 1326 e4fb ;vertical_shooting_enemyshot 1327 e4fb 74 HEX 74 1328 e4fc 1329 e500 ORG $E500,0 ; ************* 1330 e500 1331 e500 ;atascii 1332 e500 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1333 e520 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1334 e540 00 00 01 40* HEX 0000014014145555140014500150014001500540055001400000000000000050 1335 e560 14 14 05 40* HEX 1414054014140050015014001400001414141414014001400140155401401414 1336 e580 14 14 05 50* HEX 1414055014141414145014001400140014140140001414501400151515141414 1337 e5a0 14 14 14 14* HEX 1414141414141400014014141414140514141414005001401400014001500000 1338 e5c0 01 40 05 50* HEX 0140055014000550001405500140055414000000000014000140141415500550 1339 e5e0 15 50 05 54* HEX 15500554155005541554141414141405141414141554 1340 e5f6 ;vertical_shooting_ship 1341 e5f6 01 40 HEX 0140 1342 e5f8 ;vertical_shooting_ship_tallsprite_00 1343 e5f8 a5 5a HEX a55a 1344 e5fa ;vertical_shooting_bullet 1345 e5fa 14 HEX 14 1346 e5fb ;vertical_shooting_enemyshot 1347 e5fb 74 HEX 74 1348 e5fc 1349 e600 ORG $E600,0 ; ************* 1350 e600 1351 e600 ;atascii 1352 e600 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1353 e620 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1354 e640 00 00 01 40* HEX 0000014014141414055414140514014000541500141401400000000000000014 1355 e660 05 50 01 40* HEX 0550014005501554005015540550155405500550000000000050000005000550 1356 e680 05 50 01 40* HEX 0550014015500550154015541554055414141554001414141400140514140550 1357 e6a0 15 50 05 50* HEX 1550055015500550155414141414140514141414155401541000154000400000 1358 e6c0 01 40 00 00* HEX 0140000014000000001400000054000014000140001414000540000000000000 1359 e6e0 00 00 00 00* HEX 00000000000000000140000000000000000000000000 1360 e6f6 ;vertical_shooting_ship 1361 e6f6 01 40 HEX 0140 1362 e6f8 ;vertical_shooting_ship_tallsprite_00 1363 e6f8 a7 da HEX a7da 1364 e6fa ;vertical_shooting_bullet 1365 e6fa 14 HEX 14 1366 e6fb ;vertical_shooting_enemyshot 1367 e6fb 10 HEX 10 1368 e6fc 1369 e700 ORG $E700,0 ; ************* 1370 e700 1371 e700 ;atascii 1372 e700 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1373 e720 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1374 e740 00 00 00 00* HEX 0000000000000000014000000150000000000000000000000000000000000000 1375 e760 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000014000014000000 1376 e780 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1377 e7a0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1378 e7c0 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 1379 e7e0 00 00 00 00* HEX 00000000000000000000000000000000000000000000 1380 e7f6 ;vertical_shooting_ship 1381 e7f6 01 40 HEX 0140 1382 e7f8 ;vertical_shooting_ship_tallsprite_00 1383 e7f8 27 d8 HEX 27d8 1384 e7fa ;vertical_shooting_bullet 1385 e7fa 00 HEX 00 1386 e7fb ;vertical_shooting_enemyshot 1387 e7fb 88 HEX 88 1388 e7fc 1389 e7fc 1390 e7fc ; Provided under the CC0 license. See the included LICENSE.txt for details. 1391 e7fc 1392 e7fc ifnconst bankswitchmode 1393 e7fc if ( * < $f000 ) 1394 f000 ORG $F000 1395 f000 endif 1396 f000 - else 1397 f000 - ifconst ROM128K 1398 f000 - if ( * < $f000 ) 1399 f000 - ORG $27000 1400 f000 - RORG $F000 1401 f000 - endif 1402 f000 - endif 1403 f000 - ifconst ROM144K 1404 f000 - if ( * < $f000 ) 1405 f000 - ORG $27000 1406 f000 - RORG $F000 1407 f000 - endif 1408 f000 - endif 1409 f000 - ifconst ROM256K 1410 f000 - if ( * < $f000 ) 1411 f000 - ORG $47000 1412 f000 - RORG $F000 1413 f000 - endif 1414 f000 - endif 1415 f000 - ifconst ROM272K 1416 f000 - if ( * < $f000 ) 1417 f000 - ORG $47000 1418 f000 - RORG $F000 1419 f000 - endif 1420 f000 - endif 1421 f000 - ifconst ROM512K 1422 f000 - if ( * < $f000 ) 1423 f000 - ORG $87000 1424 f000 - RORG $F000 1425 f000 - endif 1426 f000 - endif 1427 f000 - ifconst ROM528K 1428 f000 - if ( * < $f000 ) 1429 f000 - ORG $87000 1430 f000 - RORG $F000 1431 f000 - endif 1432 f000 - endif 1433 f000 endif 1434 f000 1435 f000 ; all of these "modules" have conditional clauses in them, so even though 1436 f000 ; they're always included here, they don't take up rom unless the user 1437 f000 ; explicitly enables support for the feature. 1438 f000 1439 f000 ifnconst included.7800vox.asm ------- FILE 7800vox.asm LEVEL 2 PASS 3 0 f000 include 7800vox.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 ; AtariVox 7800basic wrapper 4 f000 5 f000 ; to be called with 6 f000 ; A=# of bytes 7 f000 ; 8 f000 9 f000 - ifconst HSSUPPORT 10 f000 - 11 f000 -AVoxReadBytes 12 f000 - sta temp8 13 f000 - jsr i2c_startwrite 14 f000 - bcs eeprom_error 15 f000 - 16 f000 - lda HSVoxHi 17 f000 - jsr i2c_txbyte 18 f000 - lda HSVoxLo 19 f000 - jsr i2c_txbyte 20 f000 - jsr i2c_stopwrite 21 f000 - 22 f000 - jsr i2c_startread 23 f000 - 24 f000 - ldx #0 25 f000 -AVoxReadBytesLoop 26 f000 - jsr i2c_rxbyte 27 f000 - sta eeprombuffer,x 28 f000 - inx 29 f000 - cpx temp8 30 f000 - bne AVoxReadBytesLoop 31 f000 - jsr i2c_stopread 32 f000 - lda #0 33 f000 - rts 34 f000 - 35 f000 - ; to be called with 36 f000 - ; A=# of bytes 37 f000 - ; 38 f000 - 39 f000 -AVoxWriteBytes 40 f000 - sta temp8 41 f000 - jsr i2c_startwrite 42 f000 - bcs eeprom_error 43 f000 - 44 f000 - lda HSVoxHi 45 f000 - jsr i2c_txbyte 46 f000 - lda HSVoxLo 47 f000 - jsr i2c_txbyte 48 f000 - 49 f000 - ldx #$00 50 f000 -AVoxWriteBytesLoop 51 f000 - lda eeprombuffer,x 52 f000 - jsr i2c_txbyte 53 f000 - inx 54 f000 - cpx temp8 55 f000 - bne AVoxWriteBytesLoop 56 f000 - jsr i2c_stopwrite 57 f000 - 58 f000 - lda #0 59 f000 - rts 60 f000 - 61 f000 -eeprom_error 62 f000 - lda #$ff 63 f000 - rts 64 f000 - 65 f000 -AVoxDetect 66 f000 - 67 f000 - jsr i2c_startwrite 68 f000 - bcs eeprom_error 69 f000 - lda #$30 70 f000 - jsr i2c_txbyte 71 f000 - lda #$00 72 f000 - jsr i2c_txbyte 73 f000 - jsr i2c_stopwrite 74 f000 - rts 75 f000 - 76 f000 - include "i2c7800.inc" 77 f000 - I2C_SUBS temp9 78 f000 - 79 f000 endif 80 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1441 f000 endif 1442 f000 ifnconst included.pokeysound.asm ------- FILE pokeysound.asm LEVEL 2 PASS 3 0 f000 include pokeysound.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 4 f000 - ifconst pokeysupport 5 f000 - 6 f000 -pokeysoundmodulestart 7 f000 - 8 f000 -mutepokey 9 f000 - lda #0 10 f000 - ldy #7 11 f000 -mutepokeyloop 12 f000 - sta pokey1pointlo,y 13 f000 - sta (pokeybaselo),y 14 f000 - dey 15 f000 - bpl mutepokeyloop 16 f000 - rts 17 f000 - 18 f000 -checkpokeyplaying 19 f000 - ldx #6 20 f000 -checkpokeyplayingloop 21 f000 - lda pokey1pointlo,x 22 f000 - ora pokey1pointhi,x 23 f000 - beq pokeychannelinactive 24 f000 - jsr playpokeysfxA ; x=channel*2 25 f000 -pokeychannelinactive 26 f000 - dex 27 f000 - dex 28 f000 - bpl checkpokeyplayingloop 29 f000 - rts 30 f000 - 31 f000 -playpokeysfxA 32 f000 - txa 33 f000 - tay 34 f000 - lda pokey1tick,x 35 f000 - beq playpokeysfxAcont 36 f000 - sec 37 f000 - sbc #1 38 f000 - sta pokey1tick,x ; sound resolution is >1 frame, and we're mid-tock... 39 f000 - rts 40 f000 - 41 f000 -playpokeysfxAcont 42 f000 - lda pokey1frames,x ; set the frame countdown for this sound chunk 43 f000 - sta pokey1tick,x 44 f000 - 45 f000 - lda pokey1priority,x ; decrease the sound's priority if its non-zero 46 f000 - beq playpokeysfxAcont2 47 f000 - sec 48 f000 - sbc #1 49 f000 - sta pokey1priority,x 50 f000 -playpokeysfxAcont2 51 f000 - 52 f000 - ; *** FREQUENCY 53 f000 - lda (pokey1pointlo,x) 54 f000 - sta temp1 55 f000 - clc 56 f000 - adc pokey1offset,x ; take into account any pitch modification 57 f000 - sta (pokeybaselo),y ; PAUDF0,0 58 f000 - 59 f000 - ;advance the data pointer +1 60 f000 - inc pokey1pointlo,x 61 f000 - bne skippokeyhiinc1 62 f000 - inc pokey1pointhi,x 63 f000 -skippokeyhiinc1 64 f000 - 65 f000 - ; *** WAVE 66 f000 - lda (pokey1pointlo,x) 67 f000 - asl 68 f000 - asl 69 f000 - asl 70 f000 - asl ; x16 71 f000 - 72 f000 - ;advance the data pointer +1 73 f000 - inc pokey1pointlo,x 74 f000 - bne skippokeyhiinc2 75 f000 - inc pokey1pointhi,x 76 f000 -skippokeyhiinc2 77 f000 - 78 f000 - ora (pokey1pointlo,x) 79 f000 - iny 80 f000 - sta (pokeybaselo),y 81 f000 - 82 f000 - ora temp1 ; check if F|C|V=0 83 f000 - beq zeropokeypoint ; if so, we're at the end of the sound. 84 f000 - 85 f000 - ; advance the pointer +1, on to the next sound chunk 86 f000 - inc pokey1pointlo,x 87 f000 - bne skippokeyhiinc3 88 f000 - inc pokey1pointhi,x 89 f000 -skippokeyhiinc3 90 f000 - rts 91 f000 - 92 f000 -zeropokeypoint 93 f000 - sta pokey1pointlo,x 94 f000 - sta pokey1pointhi,x 95 f000 - sta pokey1priority,x 96 f000 - rts 97 f000 - 98 f000 -schedulepokeysfx 99 f000 - ldx #6 100 f000 -schedulepokeysfxloop 101 f000 - lda pokey1pointlo,x 102 f000 - ora pokey1pointhi,x 103 f000 - bne schedulespokeysearch 104 f000 - jmp schedulepokeyX ; we found an unused channel, so use it... 105 f000 -schedulespokeysearch 106 f000 - dex 107 f000 - dex 108 f000 - bpl schedulepokeysfxloop 109 f000 - 110 f000 - ; if we're here, all 4 channels are presently playing a sound... 111 f000 - ldy #1 112 f000 - lda (temp1),y ; peek at the priority of this sfx... 113 f000 - bne schedulepokeysfxcont1 114 f000 - rts ; ...and skip it if it's 0 priority 115 f000 -schedulepokeysfxcont1 116 f000 - 117 f000 - ; figure out which current sound has the lowest priority... 118 f000 - lda #0 119 f000 - sta temp8 120 f000 - lda pokey1priority 121 f000 - sta temp9 122 f000 - ldx #6 123 f000 -findlowprioritypokeyloop 124 f000 - lda pokey1priority,x 125 f000 - cmp temp9 126 f000 - bcs findlowprioritypokeyloopcontinue 127 f000 - sta temp9 128 f000 - stx temp8 129 f000 -findlowprioritypokeyloopcontinue 130 f000 - dex 131 f000 - dex 132 f000 - bne findlowprioritypokeyloop 133 f000 - ldx temp8 ; the low priority channel we'll interrupt 134 f000 - 135 f000 -schedulepokeyX 136 f000 - ;called with X=2*pokey channel to play on... 137 f000 - ldy #1 ; get priority and sound-resolution (in frames) 138 f000 - lda (temp1),y 139 f000 - sta pokey1priority,x 140 f000 - iny 141 f000 - lda (temp1),y 142 f000 - sta pokey1frames,x 143 f000 - 144 f000 - lda temp1 145 f000 - clc 146 f000 - adc #3 147 f000 - sta pokey1pointlo,x 148 f000 - lda temp2 149 f000 - adc #0 150 f000 - sta pokey1pointhi,x 151 f000 - lda temp3 152 f000 - sta pokey1offset,x 153 f000 - lda #0 154 f000 - sta pokey1tick,x 155 f000 - rts 156 f000 - 157 f000 - ; pokey detection routine. we check for pokey in the XBOARD/XM location, 158 f000 - ; and the standard $4000 location. 159 f000 - ; if pokey the pokey is present, this routine will reset it. 160 f000 - 161 f000 -detectpokeylocation 162 f000 - ;XBoard/XM... 163 f000 - ldx #2 164 f000 -detectpokeyloop 165 f000 - lda XCTRL1s 166 f000 - ora #%00010100 167 f000 - and POKEYXMMASK,x 168 f000 - sta XCTRL1s 169 f000 - sta XCTRL1 170 f000 - 171 f000 - lda POKEYCHECKLO,x 172 f000 - sta pokeybaselo 173 f000 - lda POKEYCHECKHI,x 174 f000 - sta pokeybasehi 175 f000 - jsr checkforpokey 176 f000 - lda pokeydetected 177 f000 - beq foundpokeychip 178 f000 - dex 179 f000 - bpl detectpokeyloop 180 f000 -foundpokeychip 181 f000 - eor #$ff ; invert state for 7800basic if...then test 182 f000 - sta pokeydetected 183 f000 - rts 184 f000 - 185 f000 -POKEYXMMASK 186 f000 - ; XM POKEY on XM POKEY off XM POKEY off 187 f000 - .byte %11111111, %11101111, %11101111 188 f000 - 189 f000 -POKEYCHECKLO 190 f000 - .byte <$0450, <$0450, <$4000 191 f000 -POKEYCHECKHI 192 f000 - .byte >$0450, >$0450, >$4000 193 f000 - 194 f000 -checkforpokey 195 f000 - ldy #$0f 196 f000 - lda #$00 197 f000 - sta pokeydetected ; start off by assuming pokey will be detected 198 f000 -resetpokeyregistersloop 199 f000 - sta (pokeybase),y 200 f000 - dey 201 f000 - bpl resetpokeyregistersloop 202 f000 - 203 f000 - ldy #PAUDCTL 204 f000 - sta (pokeybase),y 205 f000 - ldy #PSKCTL 206 f000 - sta (pokeybase),y 207 f000 - 208 f000 - ; let the dust settle... 209 f000 - nop 210 f000 - nop 211 f000 - nop 212 f000 - 213 f000 - lda #4 214 f000 - sta temp9 215 f000 -pokeycheckloop1 216 f000 - ; we're in reset, so the RANDOM register should read $ff... 217 f000 - ldy #PRANDOM 218 f000 - lda (pokeybase),y 219 f000 - cmp #$ff 220 f000 - bne nopokeydetected 221 f000 - dec temp9 222 f000 - bne pokeycheckloop1 223 f000 - 224 f000 - ; take pokey out of reset... 225 f000 - ldy #PSKCTL 226 f000 - lda #3 227 f000 - sta (pokeybase),y 228 f000 - ldy #PAUDCTL 229 f000 - lda #0 230 f000 - sta (pokeybase),y 231 f000 - 232 f000 - ; let the dust settle again... 233 f000 - nop 234 f000 - nop 235 f000 - nop 236 f000 - 237 f000 - lda #4 238 f000 - sta temp9 239 f000 -pokeycheckloop2 240 f000 - ; we're out of reset, so RANDOM should read non-$ff... 241 f000 - ldy #PRANDOM 242 f000 - lda (pokeybase),y 243 f000 - cmp #$ff 244 f000 - beq skippokeycheckreturn 245 f000 - rts 246 f000 -skippokeycheckreturn 247 f000 - dec temp9 248 f000 - bne pokeycheckloop2 249 f000 -nopokeydetected 250 f000 - dec pokeydetected ; pokeydetected=#$ff 251 f000 - rts 252 f000 - 253 f000 -pokeysoundmoduleend 254 f000 - 255 f000 - echo " pokeysound assembly: ",[(pokeysoundmoduleend-pokeysoundmodulestart)]d," bytes" 256 f000 - 257 f000 endif ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1444 f000 endif 1445 f000 ifnconst included.tracker.asm ------- FILE tracker.asm LEVEL 2 PASS 3 0 f000 include tracker.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 4 f000 - ifconst MUSICTRACKER 5 f000 - ; ** songtempo lists how many 256ths of a frame a 16th note lasts 6 f000 - ; ** the player operates on a 16th note grid. 7 f000 - 8 f000 -servicesongover 9 f000 - rts 10 f000 -servicesong 11 f000 - lda songtempo 12 f000 - beq servicesongover ; ** if song is off/paused then return 13 f000 -servicesongcontinue 14 f000 - lda sfxschedulelock 15 f000 - sta sfxschedulemissed 16 f000 - bne servicesongover 17 f000 - lda songtempo 18 f000 - clc 19 f000 - adc songtick ; add songtempo to songtick until it rolls over 20 f000 - sta songtick ; this is how we break away from 50/60Hz timing. 21 f000 - bcc servicesongover 22 f000 - ; ** if we're here a new 16th note has passed 23 f000 - ; ** check if a new note is due on any of the 4 channels 24 f000 -servicesongredo 25 f000 - ldx #3 26 f000 -checkchannelloop 27 f000 - dec songchannel1busywait,x 28 f000 - bpl carryoncheckingchannel 29 f000 - txa 30 f000 - pha ; save X for the loop 31 f000 - jsr processsongdata 32 f000 - pla ; restore X for the loop 33 f000 - tax 34 f000 -carryoncheckingchannel 35 f000 - dex 36 f000 - bpl checkchannelloop 37 f000 - lda inactivechannelcount 38 f000 - cmp #15 39 f000 - bne skipstopsong 40 f000 - lda songloops 41 f000 - bne doasongloop 42 f000 - ;lda #0 43 f000 - sta songtempo ; all channels are done. stop the song 44 f000 - rts 45 f000 -doasongloop 46 f000 - bmi skipsongloopadjust 47 f000 - dec songloops 48 f000 -skipsongloopadjust 49 f000 - jsr setsongchannels 50 f000 - jmp servicesongredo 51 f000 -skipstopsong 52 f000 - rts 53 f000 - 54 f000 -processsongdata 55 f000 - ; channel needs processing 56 f000 - ; X=channel # 57 f000 - 58 f000 - txa 59 f000 - clc 60 f000 - adc songchannel1stackdepth,x ; stack depth value will be 0, 4, or 8 61 f000 - tay 62 f000 - 63 f000 - 64 f000 - ; ** indirect x is cumbersome with mult-byte commands. 65 f000 - ; ** setup a pointer to the song data for indirect y addressing. 66 f000 - lda songchannel1layer1lo,y 67 f000 - sta songdatalo 68 f000 - lda songchannel1layer1hi,y 69 f000 - sta songdatahi 70 f000 - ora songdatalo 71 f000 - bne channelhasdata 72 f000 - ;channel data is pointing at $0000 73 f000 - lda #$7F 74 f000 - sta songchannel1busywait,x ; skip a bunch of notes 75 f000 -setchannelcountbits 76 f000 - lda channel2bits,x 77 f000 - ora inactivechannelcount 78 f000 - sta inactivechannelcount 79 f000 - rts 80 f000 -channelhasdata 81 f000 - 82 f000 - sty songstackindex 83 f000 - ldy #0 84 f000 - lda (songdatalo),y ; ** load in the next byte of song data, so we can decode it 85 f000 - cmp #$ff 86 f000 - bne carryoncheckingdatatype ; ** $ff=pattern end marker 87 f000 - jmp handlechannelEOD 88 f000 - 89 f000 -carryoncheckingdatatype 90 f000 - and #$F0 91 f000 - cmp #$C0 92 f000 - beq handlechannelrest ; 0000XXXX=rest 93 f000 - cmp #$F0 94 f000 - beq handlemultibytecommand 95 f000 - cmp #$D0 96 f000 - beq handlesemiup 97 f000 - cmp #$E0 98 f000 - beq handlesemidown 99 f000 -handlenotedata 100 f000 - ; ** TODO: note playing is a terrible choice for fall-through 101 f000 - 102 f000 - ; ** its simple note data, prepare arguments for schedulesfx 103 f000 - 104 f000 - ; ** set the note length 105 f000 - lda (songdatalo),y 106 f000 - and #$0F 107 f000 - sta songchannel1busywait,x 108 f000 - 109 f000 - ; ** load the instrument 110 f000 - lda songchannel1instrumentlo,x 111 f000 - sta sfxinstrumentlo 112 f000 - lda songchannel1instrumenthi,x 113 f000 - sta sfxinstrumenthi 114 f000 - 115 f000 - ; ** get the note, and transpose 116 f000 - lda (songdatalo),y 117 f000 - lsr 118 f000 - lsr 119 f000 - lsr 120 f000 - lsr 121 f000 - clc 122 f000 - adc songchannel1transpose,x ; ** add it to the transpose index 123 f000 - ; ** its up the respective SFX scheduler to handle and save the note data 124 f000 - sta sfxnoteindex 125 f000 - 126 f000 - lda #0 127 f000 - sta sfxpitchoffset 128 f000 - 129 f000 - jsr schedulesfx 130 f000 - 131 f000 - jmp advancethesongpointer1byte ; advance to the next data byte and exit 132 f000 - 133 f000 -handlechannelrest 134 f000 - ; ** set the note length 135 f000 - lda (songdatalo),y 136 f000 - and #$0F 137 f000 - sta songchannel1busywait,x 138 f000 - jmp advancethesongpointer1byte ; advance to the next data byte and exit 139 f000 - 140 f000 -handlesemiup 141 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 142 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 143 f000 - clc 144 f000 -handlesemidownentry 145 f000 - adc songchannel1transpose,x ; ** add it to the transpose index 146 f000 - sta songchannel1transpose,x 147 f000 - jsr advancethesongpointer1byte 148 f000 - jmp processsongdata ; semi doesn't have note length, so process the next data byte... 149 f000 - 150 f000 -handlesemidown 151 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 152 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 153 f000 - eor #$ff ; ** its easier if we negate it, and then add it instead. 154 f000 - sec 155 f000 - jmp handlesemidownentry 156 f000 - 157 f000 -handlemultibytecommand 158 f000 - lda (songdatalo),y ; ** reload the song data, so we can get at the lower nibble 159 f000 - and #$0f ; ** since we need to mask the nibble of the subtracted value, 160 f000 - cmp #$08 ; ** load new instrument? 161 f000 - bne nothandleinstrumentchange 162 f000 -handleinstrumentchange 163 f000 - iny 164 f000 - lda (songdatalo),y 165 f000 - sta songchannel1instrumentlo,x 166 f000 - iny 167 f000 - lda (songdatalo),y 168 f000 - sta songchannel1instrumenthi,x 169 f000 - lda #3 170 f000 - jsr advancethesongpointerNbytes ; advance 3 bytes 171 f000 - jmp processsongdata 172 f000 - 173 f000 -nothandleinstrumentchange 174 f000 - cmp #$09 ; ** absolute tempo change? 175 f000 - bne nothandletempochange 176 f000 - lda #0 177 f000 - sta songtempo 178 f000 -handlerelativetempochange 179 f000 - iny 180 f000 - lda (songdatalo),y 181 f000 - clc 182 f000 - adc songtempo 183 f000 - sta songtempo 184 f000 - lda #2 185 f000 - jsr advancethesongpointerNbytes ; advance 2 bytes 186 f000 - jmp processsongdata 187 f000 - 188 f000 -nothandletempochange 189 f000 - cmp #$0A ; ** relative tempo change?: 190 f000 - beq handlerelativetempochange 191 f000 - cmp #$0B ; ** octave/semi change? 192 f000 - beq handleoctavesemichange 193 f000 -handlepatterndata 194 f000 - ; ** if we're here its a pattern/loop "subroutine" 195 f000 - ; ** move the channel's "stack" pointer and populate the new stack level 196 f000 - 197 f000 - lda #4 198 f000 - clc 199 f000 - adc songchannel1stackdepth,x 200 f000 - sta songchannel1stackdepth,x ; stack depth value will be 0, 4, or 8 201 f000 - 202 f000 - stx inttemp6 ; about to invalidate x. save it. 203 f000 - lda songstackindex 204 f000 - adc #4 205 f000 - tax 206 f000 - 207 f000 - lda (songdatalo),y 208 f000 - and #$7 209 f000 - sta songchannel1layer1loops,x 210 f000 - iny 211 f000 - lda (songdatalo),y 212 f000 - sta songchannel1layer1lo,x 213 f000 - iny 214 f000 - lda (songdatalo),y 215 f000 - sta songchannel1layer1hi,x 216 f000 - 217 f000 - ldx inttemp6 ; restore x with the channel # 218 f000 - 219 f000 - ; ** advance will operate on the old stack level, since we didn't store the updated songstackindex... 220 f000 - lda #3 221 f000 - jsr advancethesongpointerNbytes ; advance 3 bytes 222 f000 - 223 f000 - ; ** ...but the new stack level will be correctly picked up when we process the next byte. 224 f000 - jmp processsongdata 225 f000 - 226 f000 -handlechannelEOD 227 f000 - ; ** check if there are loops remaining on the pattern 228 f000 - stx inttemp6 229 f000 - ldx songstackindex 230 f000 - dec songchannel1layer1loops,x 231 f000 - bmi handlechannelEODnoloop 232 f000 - ; ** loops are remaining. set the pattern pointer to the pattern start, which is contained after the EOD 233 f000 - iny 234 f000 - lda (songdatalo),y 235 f000 - sta songchannel1layer1lo,x 236 f000 - iny 237 f000 - lda (songdatalo),y 238 f000 - sta songchannel1layer1hi,x 239 f000 - ldx inttemp6 240 f000 - jmp processsongdata ; EOD handling doesn't have note length, so process the next data byte... 241 f000 - 242 f000 -handlechannelEODnoloop 243 f000 - ; this pattern/loop is done playing. "pop" the stack 244 f000 - ldx inttemp6 245 f000 - lda songchannel1stackdepth,x 246 f000 - beq handlerootchannelEOD 247 f000 - sec 248 f000 - sbc #4 249 f000 - sta songchannel1stackdepth,x 250 f000 - jmp processsongdata ; EOD handling doesn't have note length, so process the next data byte... 251 f000 - 252 f000 -handlerootchannelEOD 253 f000 - ; this channel is done. point it to $ff data so we no longer process this channel. 254 f000 - lda #0 255 f000 - sta songchannel1layer1lo,x 256 f000 - sta songchannel1layer1hi,x 257 f000 - sta songchannel1busywait,x 258 f000 - jmp setchannelcountbits 259 f000 - rts 260 f000 - 261 f000 -nothandlepatternchange 262 f000 -handleoctavesemichange 263 f000 - iny 264 f000 - lda (songdatalo),y 265 f000 - sta songchannel1transpose,x 266 f000 - lda #2 267 f000 - jsr advancethesongpointerNbytes ; advance 2 bytes 268 f000 - jmp processsongdata 269 f000 - 270 f000 -advancethesongpointer1byte 271 f000 - txa 272 f000 - ldx songstackindex 273 f000 - inc songchannel1layer1lo,x 274 f000 - bne skiphiadvancethesongpointer1byte 275 f000 - inc songchannel1layer1hi,x 276 f000 -skiphiadvancethesongpointer1byte 277 f000 - tax 278 f000 - rts 279 f000 - 280 f000 -advancethesongpointerNbytes 281 f000 - ; entered with A=# of byte to advance 282 f000 - stx inttemp6 283 f000 - ldx songstackindex 284 f000 - clc 285 f000 - adc songchannel1layer1lo,x 286 f000 - sta songchannel1layer1lo,x 287 f000 - lda #0 288 f000 - adc songchannel1layer1hi,x 289 f000 - sta songchannel1layer1hi,x 290 f000 - ldx inttemp6 291 f000 - rts 292 f000 - 293 f000 -clearsongmemory 294 f000 - lda #0 295 f000 - ldx #(songchannel4instrumenthi-songchannel1layer1lo) 296 f000 -clearsongmemoryloop1 297 f000 - sta songchannel1layer1lo,x 298 f000 - dex 299 f000 - bpl clearsongmemoryloop1 300 f000 - 301 f000 - ldx #(songchannel4stackdepth-songchannel1layer1loops) 302 f000 -clearsongmemoryloop2 303 f000 - sta songchannel1layer1loops,x 304 f000 - dex 305 f000 - bpl clearsongmemoryloop2 306 f000 - 307 f000 - lda #$ff 308 f000 - ldx #3 309 f000 -clearsongmemoryloop3 310 f000 - sta songchannel1busywait,x 311 f000 - dex 312 f000 - bpl clearsongmemoryloop3 313 f000 - rts 314 f000 - 315 f000 -setsongchannels 316 f000 - jsr clearsongmemory 317 f000 - ldy #7 318 f000 - ldx #3 319 f000 -setsongchannelsloop 320 f000 - lda (songpointerlo),y 321 f000 - sta songchannel1layer1hi,x 322 f000 - dey 323 f000 - lda (songpointerlo),y 324 f000 - sta songchannel1layer1lo,x 325 f000 - dex 326 f000 - dey 327 f000 - bpl setsongchannelsloop 328 f000 - rts 329 f000 - 330 f000 -channel2bits 331 f000 - .byte 1,2,4,8 332 f000 - 333 f000 -tiatrackeroctavenotes 334 f000 - ifconst BUZZBASS 335 f000 -LOWC = 15 336 f000 - else 337 f000 -LOWC = 14 338 f000 - endif 339 f000 - ; ****** ELECTRONIC (0 to 11) 340 f000 - .byte LOWC,20 ; c0 16.1Hz 341 f000 - .byte LOWC,18 ; c#0 342 f000 - .byte LOWC,17 ; d0 343 f000 - .byte LOWC,16 ; d#0 344 f000 - .byte LOWC,15 ; e0 345 f000 - .byte LOWC,14 ; f0 (very off) 346 f000 - .byte LOWC,14 ; f#0 347 f000 - .byte LOWC,13 ; g0 348 f000 - .byte LOWC,12 ; g#0 349 f000 - .byte LOWC,11 ; a0 350 f000 - .byte LOWC,11 ; a#0 (very off) 351 f000 - .byte LOWC,10 ; b0 30.7Hz 352 f000 - 353 f000 - ; ****** SLIGHTLY BUZZY (12 to 23) 354 f000 - .byte 6,30 ; c1 32.7Hz 355 f000 - .byte 6,28 ; c#1 356 f000 - .byte 6,27 ; d1 357 f000 - .byte 6,25 ; d#1 358 f000 - .byte 6,24 ; e1 359 f000 - .byte 6,22 ; f1 360 f000 - .byte 6,21 ; f#1 361 f000 - .byte 6,20 ; g1 362 f000 - .byte 6,18 ; g#1 363 f000 - .byte 6,17 ; a1 364 f000 - .byte 6,16 ; a#1 365 f000 - .byte 6,15 ; b1 63.4Hz 366 f000 - 367 f000 - ; ****** BUZZY (24 to 39) 368 f000 - .byte 1,31 ; c2 65.5 369 f000 - .byte 1,30 ; c#2 67.6 370 f000 - .byte 1,27 ; d2 72.3 371 f000 - .byte 1,26 ; d#2 77.6 372 f000 - .byte 1,24 ; e2 373 f000 - .byte 1,23 ; f2 374 f000 - .byte 1,22 ; f#2 375 f000 - .byte 1,20 ; g2 376 f000 - .byte 1,19 ; g#2 377 f000 - .byte 1,18 ; a2 378 f000 - .byte 1,17 ; a#2 379 f000 - .byte 1,16 ; b2 380 f000 - .byte 1,15 ; c3 126.8Hz 381 f000 - .byte 1,14 ; c#3 382 f000 - .byte 1,13 ; d3 149.7Hz 383 f000 - .byte 1,12 ; d#3 161.2Hz (very off) 384 f000 - ; ****** PURE (40 to 71) - best key is A3 Major 385 f000 - .byte 12,31 ; e3 163.8Hz 386 f000 - .byte 12,29 ; f3 387 f000 - .byte 12,28 ; f#3 388 f000 - .byte 12,26 ; g3 389 f000 - .byte 12,24 ; g#3 390 f000 - .byte 12,23 ; a3 songs in key of A benefit from Perceptual Tuning 391 f000 - .byte 12,22 ; a#3 392 f000 - .byte 12,20 ; b3 393 f000 - .byte 12,19 ; c4 (middle C) 394 f000 - .byte 12,18 ; c#4 395 f000 - .byte 12,17 ; d4 396 f000 - .byte 12,16 ; d#4 397 f000 - .byte 12,15 ; e4 398 f000 - .byte 12,14 ; f4 399 f000 - .byte 12,13 ; f#4 400 f000 - .byte 12,12 ; g4 (very off) 401 f000 - .byte 12,12 ; g#4 402 f000 - .byte 12,11 ; a4 403 f000 - .byte 12,10 ; a#4 404 f000 - .byte 4,31 ; b4 405 f000 - .byte 4,29 ; c5 406 f000 - .byte 4,28 ; c#5 407 f000 - .byte 4,26 ; d5 408 f000 - .byte 4,24 ; d#5 409 f000 - .byte 4,23 ; e5 410 f000 - .byte 4,22 ; f5 411 f000 - .byte 4,20 ; f#5 412 f000 - .byte 4,19 ; g5 413 f000 - .byte 4,18 ; g#5 414 f000 - .byte 4,17 ; a5 415 f000 - .byte 4,16 ; a#5 416 f000 - .byte 4,15 ; b5 417 f000 - 418 f000 - ; ****** TUNED WIND (72 to 83) 419 f000 - .byte 8,30 ; c 420 f000 - .byte 8,28 ; c# 421 f000 - .byte 8,27 ; d 422 f000 - .byte 8,25 ; d# 423 f000 - .byte 8,24 ; e 424 f000 - .byte 8,22 ; f 425 f000 - .byte 8,21 ; f# 426 f000 - .byte 8,20 ; g 427 f000 - .byte 8,18 ; g# 428 f000 - .byte 8,17 ; a 429 f000 - .byte 8,16 ; a# 430 f000 - .byte 8,15 ; b 431 f000 - 432 f000 - include "tiadrumkit.asm" 433 f000 - 434 f000 endif ;MUSICTRACKER ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1447 f000 endif 1448 f000 ifnconst included.hiscore.asm ------- FILE hiscore.asm LEVEL 2 PASS 3 0 f000 include hiscore.asm 1 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2 f000 3 f000 - ifconst HSSUPPORT 4 f000 -detectatarivoxeeprom 5 f000 -hiscoremodulestart 6 f000 - ; do a test to see if atarivox eeprom can be accessed, and save results 7 f000 - jsr AVoxDetect 8 f000 - eor #$ff ; invert for easy 7800basic if...then logic 9 f000 - sta avoxdetected 10 f000 - lda #$0 11 f000 - sta SWACNT 12 f000 - lda avoxdetected 13 f000 - rts 14 f000 - 15 f000 -detecthsc 16 f000 - ; check for the HSC ROM signature... 17 f000 - lda XCTRL1s 18 f000 - ora #%00001100 19 f000 - sta XCTRL1s 20 f000 - sta XCTRL1 21 f000 - lda $3900 22 f000 - cmp #$C6 23 f000 - bne detecthscfail 24 f000 - lda $3904 25 f000 - cmp #$FE 26 f000 - bne detecthscfail 27 f000 - ; check if it's initialized... 28 f000 - ldy #0 29 f000 - lda #$ff 30 f000 -checkhscinit 31 f000 - and $1000,y 32 f000 - dey 33 f000 - bpl checkhscinit 34 f000 - cmp #$ff 35 f000 - bne hscisalreadyinit 36 f000 - ; if we're here, we need to do a minimal HSC init... 37 f000 - ldy #$28 38 f000 -hscinitloop1 39 f000 - lda hscheader,y 40 f000 - sta $1000,y 41 f000 - dey 42 f000 - bpl hscinitloop1 43 f000 - ldy #$89 44 f000 - lda #$7F 45 f000 -hscinitloop2 46 f000 - sta $10B3,y 47 f000 - dey 48 f000 - cpy #$ff 49 f000 - bne hscinitloop2 50 f000 -hscisalreadyinit 51 f000 - lda #$ff 52 f000 - rts 53 f000 -hscheader 54 f000 - .byte $00,$00,$68,$83,$AA,$55,$9C,$FF,$07,$12,$02,$1F,$00,$00,$00,$00 55 f000 - .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 56 f000 - .byte $00,$00,$00,$00,$00,$00,$00,$00,$03 57 f000 -detecthscfail 58 f000 - lda XCTRL1s 59 f000 - and #%11110111 60 f000 - sta XCTRL1s 61 f000 - lda #0 62 f000 - rts 63 f000 endif ; HSSUPPORT 64 f000 65 f000 - ifconst HSSUPPORT 66 f000 - ifnconst hiscorefont 67 f000 - echo "" 68 f000 - echo "WARNING: High score support is enabled, but the hiscorefont.png was" 69 f000 - echo " NOT imported with incgraphic. The high score display code" 70 f000 - echo " has been omitted from this build." 71 f000 - echo "" 72 f000 - else 73 f000 -hscdrawscreen 74 f000 - 75 f000 - ; we use 20 lines on a 24 line display 76 f000 - ; HSSCOREY to dynamically centers based on 77 f000 - ;HSSCOREY = 0 78 f000 -HSSCOREY = ((WZONECOUNT*WZONEHEIGHT/8)-22)/2 79 f000 -HSCURSORY = ((HSSCOREY/(WZONEHEIGHT/8))*WZONEHEIGHT) 80 f000 - 81 f000 - ifconst HSSCORESIZE 82 f000 -SCORESIZE = HSSCORESIZE 83 f000 - else 84 f000 -SCORESIZE = 6 85 f000 - endif 86 f000 - 87 f000 - ;save shadow registers for later return... 88 f000 - lda sCTRL 89 f000 - sta ssCTRL 90 f000 - lda sCHARBASE 91 f000 - sta ssCHARBASE 92 f000 - lda #$60 93 f000 - sta charactermode 94 f000 - jsr drawwait 95 f000 - jsr blacken320colors 96 f000 - jsr clearscreen 97 f000 - 98 f000 - ;set the character base to the HSC font 99 f000 - lda #>hiscorefont 100 f000 - sta CHARBASE 101 f000 - sta sCHARBASE 102 f000 - lda #%01000011 ;Enable DMA, mode=320A 103 f000 - sta CTRL 104 f000 - sta sCTRL 105 f000 - 106 f000 - lda #60 107 f000 - sta hsjoydebounce 108 f000 - 109 f000 - lda #0 110 f000 - sta hscursorx 111 f000 - sta framecounter 112 f000 - ifnconst HSCOLORCHASESTART 113 f000 - lda #$8D ; default is blue. why not? 114 f000 - else 115 f000 - lda #HSCOLORCHASESTART 116 f000 - endif 117 f000 - sta hscolorchaseindex 118 f000 - 119 f000 - lda #$0F 120 f000 - sta P0C2 ; base text is white 121 f000 - 122 f000 - jsr hschasecolors 123 f000 - ; ** plot all of the initials 124 f000 - lda #HSRAMInitials 127 f000 - sta temp2 ; charmaphi 128 f000 - lda #32+29 ; palette=0-29 | 32-(width=3) 129 f000 - sta temp3 ; palette/width 130 f000 - lda #104 131 f000 - sta temp4 ; X 132 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 133 f000 - sta temp5 ; Y 134 f000 -plothsinitialsloop 135 f000 - jsr plotcharacters 136 f000 - clc 137 f000 - lda temp3 138 f000 - adc #32 139 f000 - sta temp3 140 f000 - inc temp5 141 f000 - if WZONEHEIGHT = 8 142 f000 - inc temp5 143 f000 - endif 144 f000 - clc 145 f000 - lda #3 146 f000 - adc temp1 147 f000 - sta temp1 148 f000 - cmp #(<(HSRAMInitials+15)) 149 f000 - bcc plothsinitialsloop 150 f000 - 151 f000 - ifconst HSGAMENAMELEN 152 f000 - ;plot the game name... 153 f000 - lda #HSGAMENAMEtable 156 f000 - sta temp2 ; charmaphi 157 f000 - lda #(32-HSGAMENAMELEN) ; palette=0*29 | 32-(width=3) 158 f000 - sta temp3 ; palette/width 159 f000 - lda #(80-(HSGAMENAMELEN*2)) 160 f000 - sta temp4 ; X 161 f000 - lda #((HSSCOREY+0)/(WZONEHEIGHT/8)) 162 f000 - sta temp5 ; Y 163 f000 - jsr plotcharacters 164 f000 - endif ; HSGAMENAMELEN 165 f000 - 166 f000 - ;plot "difficulty"... 167 f000 - ldy gamedifficulty 168 f000 - ifnconst HSNOLEVELNAMES 169 f000 - lda highscoredifficultytextlo,y 170 f000 - sta temp1 171 f000 - lda highscoredifficultytexthi,y 172 f000 - sta temp2 173 f000 - sec 174 f000 - lda #32 175 f000 - sbc highscoredifficultytextlen,y 176 f000 - sta temp3 ; palette/width 177 f000 - sec 178 f000 - lda #40 179 f000 - sbc highscoredifficultytextlen,y 180 f000 - asl 181 f000 - sta temp4 ; X 182 f000 - else 183 f000 - lda #HSHIGHSCOREStext 186 f000 - sta temp2 ; charmaphi 187 f000 - lda #(32-11) ; palette=0*29 | 32-(width=3) 188 f000 - sta temp3 ; palette/width 189 f000 - lda #(80-(11*2)) 190 f000 - sta temp4 ; X 191 f000 - endif ; HSNOLEVELNAMES 192 f000 - 193 f000 - lda #((HSSCOREY+2)/(WZONEHEIGHT/8)) 194 f000 - sta temp5 ; Y 195 f000 - jsr plotcharacters 196 f000 - ldy hsdisplaymode ; 0=attact mode, 1=player eval, 2=player 1 eval, 3=player 2 player eval 197 f000 - bne carronwithscoreevaluation 198 f000 - jmp donoscoreevaluation 199 f000 -carronwithscoreevaluation 200 f000 - dey 201 f000 - lda highscorelabeltextlo,y 202 f000 - sta temp1 203 f000 - lda highscorelabeltexthi,y 204 f000 - sta temp2 205 f000 - sec 206 f000 - lda #(32-15) ; palette=0*29 | 32-(width=3) 207 f000 - sta temp3 ; palette/width 208 f000 - lda highscorelabeladjust1,y 209 f000 - sta temp4 ; X 210 f000 - lda #((HSSCOREY+18)/(WZONEHEIGHT/8)) 211 f000 - sta temp5 ; Y 212 f000 - jsr plotcharacters 213 f000 - 214 f000 - ldy hsdisplaymode ; 0=attact mode, 1=player eval, 2=player 1 eval, 3=player 2 player eval 215 f000 - dey 216 f000 - ;plot the current player score... 217 f000 - lda #(32-SCORESIZE) ; palette=0*32 218 f000 - sta temp3 ; palette/width 219 f000 - lda highscorelabeladjust2,y 220 f000 - sta temp4 ; X 221 f000 - lda #((HSSCOREY+18)/(WZONEHEIGHT/8)) 222 f000 - sta temp5 ; Y 223 f000 - 224 f000 - lda scorevarlo,y 225 f000 - sta temp7 ; score variable lo 226 f000 - lda scorevarhi,y 227 f000 - sta temp8 ; score variable hi 228 f000 - 229 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 230 f000 - sta temp9 231 f000 - 232 f000 - lda #<(hiscorefont+33) ; +33 to get to '0' character 233 f000 - sta temp1 ; charmaplo 234 f000 - lda #>(hiscorefont+33) 235 f000 - sta temp2 ; charmaphi 236 f000 - lda #SCORESIZE 237 f000 - sta temp6 238 f000 - ifnconst DOUBLEWIDE 239 f000 - jsr plotvalue 240 f000 - else 241 f000 - jsr plotvaluedw 242 f000 - endif 243 f000 - 244 f000 -USED_PLOTVALUE = 1 ; ensure that plotvalue gets compiled in 245 f000 - 246 f000 - ifconst HSGAMERANKS 247 f000 - 248 f000 - ldx #$ff ; start at 0 after the inx... 249 f000 -comparescore2rankloop 250 f000 - inx 251 f000 - ldy #0 252 f000 - lda rankvalue_0,x 253 f000 - cmp (temp7),y 254 f000 - bcc score2rankloopdone 255 f000 - bne comparescore2rankloop 256 f000 - iny 257 f000 - lda rankvalue_1,x 258 f000 - cmp (temp7),y 259 f000 - bcc score2rankloopdone 260 f000 - bne comparescore2rankloop 261 f000 - iny 262 f000 - lda (temp7),y 263 f000 - cmp rankvalue_2,x 264 f000 - bcs score2rankloopdone 265 f000 - jmp comparescore2rankloop 266 f000 -score2rankloopdone 267 f000 - stx hsnewscorerank 268 f000 - 269 f000 - lda ranklabello,x 270 f000 - sta temp1 271 f000 - lda ranklabelhi,x 272 f000 - sta temp2 273 f000 - sec 274 f000 - lda #32 ; palette=0*29 | 32-(width=3) 275 f000 - sbc ranklabellengths,x 276 f000 - sta temp3 ; palette/width 277 f000 - sec 278 f000 - lda #(40+6) 279 f000 - sbc ranklabellengths,x 280 f000 - asl 281 f000 - sta temp4 ; X 282 f000 - lda #((HSSCOREY+20)/(WZONEHEIGHT/8)) 283 f000 - sta temp5 ; Y 284 f000 - jsr plotcharacters 285 f000 - 286 f000 - ldx hsnewscorerank 287 f000 - 288 f000 - lda #highscoreranklabel 291 f000 - sta temp2 292 f000 - 293 f000 - lda #(32-5) ; palette=0*29 | 32-(width=3) 294 f000 - sta temp3 ; palette/width 295 f000 - lda #(40-6) 296 f000 - sec 297 f000 - sbc ranklabellengths,x 298 f000 - asl 299 f000 - sta temp4 ; X 300 f000 - lda #((HSSCOREY+20)/(WZONEHEIGHT/8)) 301 f000 - sta temp5 ; Y 302 f000 - jsr plotcharacters 303 f000 - endif 304 f000 - 305 f000 - 306 f000 - ; ** which line did this player beat? 307 f000 - lda #$ff 308 f000 - sta hsnewscoreline 309 f000 - ldx #$fd 310 f000 -comparescoreadd2x 311 f000 - inx 312 f000 -comparescoreadd1x 313 f000 - inx 314 f000 -comparescore2lineloop 315 f000 - inc hsnewscoreline 316 f000 - inx ; initialrun, x=0 317 f000 - cpx #15 318 f000 - beq nohighscoreforyou 319 f000 - ldy #0 320 f000 - lda HSRAMScores,x 321 f000 - cmp (temp7),y ; first score digit 322 f000 - bcc score2lineloopdonedel1x 323 f000 - bne comparescoreadd2x 324 f000 - iny 325 f000 - inx 326 f000 - lda HSRAMScores,x 327 f000 - cmp (temp7),y 328 f000 - bcc score2lineloopdonedel2x 329 f000 - bne comparescoreadd1x 330 f000 - iny 331 f000 - inx 332 f000 - lda (temp7),y 333 f000 - cmp HSRAMScores,x 334 f000 - bcs score2lineloopdonedel3x 335 f000 - jmp comparescore2lineloop 336 f000 -nohighscoreforyou 337 f000 - lda #$ff 338 f000 - sta hsnewscoreline 339 f000 - sta countdownseconds 340 f000 - jmp donoscoreevaluation 341 f000 -score2lineloopdonedel3x 342 f000 - dex 343 f000 -score2lineloopdonedel2x 344 f000 - dex 345 f000 -score2lineloopdonedel1x 346 f000 - dex 347 f000 - 348 f000 - ; 0 1 2 349 f000 - ; 3 4 5 350 f000 - ; 6 7 8 351 f000 - ; 9 0 1 352 f000 - ; 2 3 4 353 f000 - 354 f000 - stx temp9 355 f000 - cpx #11 356 f000 - beq postsortscoresuploop 357 f000 - ldx #11 358 f000 -sortscoresuploop 359 f000 - lda HSRAMScores,x 360 f000 - sta HSRAMScores+3,x 361 f000 - lda HSRAMInitials,x 362 f000 - sta HSRAMInitials+3,x 363 f000 - dex 364 f000 - cpx temp9 365 f000 - bne sortscoresuploop 366 f000 -postsortscoresuploop 367 f000 - 368 f000 - ;stick the score and cleared initials in the slot... 369 f000 - inx 370 f000 - ldy #0 371 f000 - sty hsinitialhold 372 f000 - lda (temp7),y 373 f000 - sta HSRAMScores,x 374 f000 - iny 375 f000 - lda (temp7),y 376 f000 - sta HSRAMScores+1,x 377 f000 - iny 378 f000 - lda (temp7),y 379 f000 - sta HSRAMScores+2,x 380 f000 - lda #0 381 f000 - sta HSRAMInitials,x 382 f000 - lda #29 383 f000 - sta HSRAMInitials+1,x 384 f000 - sta HSRAMInitials+2,x 385 f000 - 386 f000 - stx hsinitialpos 387 f000 - 388 f000 - ifconst vox_highscore 389 f000 - lda <#vox_highscore 390 f000 - sta speech_addr 391 f000 - lda >#vox_highscore 392 f000 - sta speech_addr+1 393 f000 - endif 394 f000 - ifconst sfx_highscore 395 f000 - lda <#sfx_highscore 396 f000 - sta temp1 397 f000 - lda >#sfx_highscore 398 f000 - sta temp2 399 f000 - lda #0 400 f000 - sta temp3 401 f000 - jsr schedulesfx 402 f000 - endif 403 f000 - ifconst songdatastart_song_highscore 404 f000 - lda #songchanneltable_song_highscore 407 f000 - sta songpointerhi 408 f000 - lda #73 409 f000 - sta songtempo 410 f000 - jsr setsongchannels 411 f000 - endif 412 f000 - 413 f000 - 414 f000 -donoscoreevaluation 415 f000 - 416 f000 - lda #(32+(32-SCORESIZE)) ; palette=0*32 | 32-(width=6) 417 f000 - sta temp3 ; palette/width 418 f000 - lda #(72+(4*(6-SCORESIZE))) 419 f000 - sta temp4 ; X 420 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 421 f000 - sta temp5 ; Y 422 f000 - lda #HSRAMScores 425 f000 - sta temp8 ; score variable hi 426 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 427 f000 - sta temp9 428 f000 -plothsscoresloop 429 f000 - lda #<(hiscorefont+33) ; +33 to get to '0' character 430 f000 - sta temp1 ; charmaplo 431 f000 - lda #>(hiscorefont+33) 432 f000 - sta temp2 ; charmaphi 433 f000 - lda #6 434 f000 - sta temp6 435 f000 - ifnconst DOUBLEWIDE 436 f000 - jsr plotvalue 437 f000 - else 438 f000 - jsr plotvaluedw 439 f000 - endif 440 f000 - clc 441 f000 - lda temp3 442 f000 - adc #32 443 f000 - sta temp3 444 f000 - inc temp5 445 f000 - if WZONEHEIGHT = 8 446 f000 - inc temp5 447 f000 - endif 448 f000 - clc 449 f000 - lda #3 450 f000 - adc temp7 451 f000 - sta temp7 452 f000 - cmp #(<(HSRAMScores+15)) 453 f000 - bcc plothsscoresloop 454 f000 -plothsindex 455 f000 - lda #32+31 ; palette=0*32 | 32-(width=1) 456 f000 - sta temp3 ; palette/width 457 f000 - lda #44 458 f000 - sta temp4 ; X 459 f000 - lda #((HSSCOREY+6)/(WZONEHEIGHT/8)) 460 f000 - sta temp5 ; Y 461 f000 - lda #hsgameslotnumbers 464 f000 - sta temp8 ; score variable hi 465 f000 - lda #(hiscorefont_mode | %01100000) ; charactermode 466 f000 - sta temp9 467 f000 -plothsindexloop 468 f000 - lda #<(hiscorefont+33) 469 f000 - sta temp1 ; charmaplo 470 f000 - lda #>(hiscorefont+33) 471 f000 - sta temp2 ; charmaphi 472 f000 - lda #1 473 f000 - sta temp6 ; number of characters 474 f000 - ifnconst DOUBLEWIDE 475 f000 - jsr plotvalue 476 f000 - else 477 f000 - jsr plotvaluedw 478 f000 - endif 479 f000 - clc 480 f000 - lda temp3 481 f000 - adc #32 482 f000 - sta temp3 483 f000 - inc temp5 484 f000 - if WZONEHEIGHT = 8 485 f000 - inc temp5 486 f000 - endif 487 f000 - inc temp7 488 f000 - lda temp7 489 f000 - cmp #(<(hsgameslotnumbers+5)) 490 f000 - bcc plothsindexloop 491 f000 - 492 f000 - jsr savescreen 493 f000 - ifnconst HSSECONDS 494 f000 - lda #6 495 f000 - else 496 f000 - lda #HSSECONDS 497 f000 - endif 498 f000 - 499 f000 - sta countdownseconds 500 f000 - 501 f000 -keepdisplayinghs 502 f000 - jsr restorescreen 503 f000 - 504 f000 - jsr setuphsinpt1 505 f000 - 506 f000 - lda hsnewscoreline 507 f000 - bpl carryonkeepdisplayinghs 508 f000 - jmp skipenterscorecontrol 509 f000 -carryonkeepdisplayinghs 510 f000 - 511 f000 - 512 f000 - ifnconst HSSECONDS 513 f000 - lda #6 514 f000 - else 515 f000 - lda #HSSECONDS 516 f000 - endif 517 f000 - 518 f000 - sta countdownseconds 519 f000 - 520 f000 - ;plot the "cursor" initial sprite... 521 f000 - lda hsinitialhold 522 f000 - 523 f000 - sta temp1 524 f000 - lda #>(hiscorefont+32) 525 f000 - sta temp2 526 f000 - lda #31 ; palette=0*32 | 32-(width=1) 527 f000 - sta temp3 ; palette/width 528 f000 - lda hscursorx 529 f000 - asl 530 f000 - asl 531 f000 - clc 532 f000 - adc #104 533 f000 - sta temp4 ; X 534 f000 - lda hsnewscoreline 535 f000 - asl 536 f000 - asl 537 f000 - asl 538 f000 - asl 539 f000 - adc #((3*16)+HSCURSORY) 540 f000 - sta temp5 ; Y 541 f000 - lda #%01000000 542 f000 - sta temp6 543 f000 - jsr plotsprite 544 f000 - 545 f000 - ldx hscursorx 546 f000 - ldy hsdisplaymode 547 f000 - lda SWCHA 548 f000 - cpy #3 549 f000 - bne hsskipadjustjoystick1 550 f000 - asl 551 f000 - asl 552 f000 - asl 553 f000 - asl 554 f000 -hsskipadjustjoystick1 555 f000 - sta hsswcha 556 f000 - and #%00110000 557 f000 - cmp #%00110000 558 f000 - beq hsjoystickskipped 559 f000 - lda hsjoydebounce 560 f000 - beq hsdontdebounce 561 f000 - jmp hspostjoystick 562 f000 -hsdontdebounce 563 f000 - ldx #1 ; small tick sound 564 f000 - jsr playhssfx 565 f000 - lda hsswcha 566 f000 - and #%00110000 567 f000 - ldx hscursorx 568 f000 - cmp #%00100000 ; check down 569 f000 - bne hsjoycheckup 570 f000 - ldy hsinitialhold 571 f000 - cpx #0 572 f000 - bne skipavoid31_1 573 f000 - cpy #0 ; if we're about to change to the <- char (#31) then double-decrement to skip over it 574 f000 - bne skipavoid31_1 575 f000 - dey 576 f000 -skipavoid31_1 577 f000 - dey 578 f000 - jmp hssetdebounce 579 f000 -hsjoycheckup 580 f000 - cmp #%00010000 ; check up 581 f000 - bne hsjoystickskipped 582 f000 - ldy hsinitialhold 583 f000 - cpx #0 584 f000 - bne skipavoid31_2 585 f000 - cpy #30 ; if we're about to change to the <- char (#31) then double-increment to skip over it 586 f000 - bne skipavoid31_2 587 f000 - iny 588 f000 -skipavoid31_2 589 f000 - iny 590 f000 -hssetdebounce 591 f000 - tya 592 f000 - and #31 593 f000 - sta hsinitialhold 594 f000 - lda #15 595 f000 - sta hsjoydebounce 596 f000 - bne hspostjoystick 597 f000 -hsjoystickskipped 598 f000 - ; check the fire button only when the stick isn't engaged 599 f000 - lda hsinpt1 600 f000 - bpl hsbuttonskipped 601 f000 - lda hsjoydebounce 602 f000 - beq hsfiredontdebounce 603 f000 - bne hspostjoystick 604 f000 -hsfiredontdebounce 605 f000 - lda hsinitialhold 606 f000 - cmp #31 607 f000 - beq hsmovecursorback 608 f000 - inc hscursorx 609 f000 - inc hsinitialpos 610 f000 - lda hscursorx 611 f000 - cmp #3 612 f000 - bne skiphsentryisdone 613 f000 - lda #0 614 f000 - sta framecounter 615 f000 - lda #$ff 616 f000 - sta hsnewscoreline 617 f000 - dec hsinitialpos 618 f000 - bne skiphsentryisdone 619 f000 -hsmovecursorback 620 f000 - lda hscursorx 621 f000 - beq skiphsmovecursorback 622 f000 - lda #29 623 f000 - ldx hsinitialpos 624 f000 - sta HSRAMInitials,x 625 f000 - dec hsinitialpos 626 f000 - dec hscursorx 627 f000 - dex 628 f000 - lda HSRAMInitials,x 629 f000 - sta hsinitialhold 630 f000 -skiphsmovecursorback 631 f000 -skiphsentryisdone 632 f000 - ldx #0 633 f000 - jsr playhssfx 634 f000 - lda #20 635 f000 - sta hsjoydebounce 636 f000 - bne hspostjoystick 637 f000 - 638 f000 -hsbuttonskipped 639 f000 - lda #0 640 f000 - sta hsjoydebounce 641 f000 -hspostjoystick 642 f000 - 643 f000 - ldx hsinitialpos 644 f000 - lda hsinitialhold 645 f000 - sta HSRAMInitials,x 646 f000 - 647 f000 - jmp skiphschasecolors 648 f000 - 649 f000 -skipenterscorecontrol 650 f000 - jsr hschasecolors 651 f000 - jsr setuphsinpt1 652 f000 - lda hsjoydebounce 653 f000 - bne skiphschasecolors 654 f000 - lda hsinpt1 655 f000 - bmi returnfromhs 656 f000 -skiphschasecolors 657 f000 - 658 f000 - jsr drawscreen 659 f000 - 660 f000 - lda countdownseconds 661 f000 - beq returnfromhs 662 f000 - jmp keepdisplayinghs 663 f000 -returnfromhs 664 f000 - 665 f000 - ifconst songdatastart_song_highscore 666 f000 - lda hsdisplaymode 667 f000 - beq skipclearHSCsong 668 f000 - lda #0 669 f000 - sta songtempo 670 f000 -skipclearHSCsong 671 f000 - endif 672 f000 - jsr drawwait 673 f000 - jsr clearscreen 674 f000 - lda #0 675 f000 - ldy #7 676 f000 - jsr blacken320colors 677 f000 - lda ssCTRL 678 f000 - sta sCTRL 679 f000 - lda ssCHARBASE 680 f000 - sta sCHARBASE 681 f000 - rts 682 f000 - 683 f000 -setuphsinpt1 684 f000 - lda #$ff 685 f000 - sta hsinpt1 686 f000 - lda hsjoydebounce 687 f000 - beq skipdebounceadjust 688 f000 - dec hsjoydebounce 689 f000 - bne skipstorefirebuttonstatus 690 f000 -skipdebounceadjust 691 f000 - ldx hsdisplaymode 692 f000 - cpx #3 693 f000 - bne hsskipadjustjoyfire1 694 f000 - lda sINPT3 695 f000 - jmp hsskipadjustjoyfire1done 696 f000 -hsskipadjustjoyfire1 697 f000 - lda sINPT1 698 f000 -hsskipadjustjoyfire1done 699 f000 - sta hsinpt1 700 f000 -skipstorefirebuttonstatus 701 f000 - rts 702 f000 - 703 f000 -blacken320colors 704 f000 - ldy #7 705 f000 -blacken320colorsloop 706 f000 - sta P0C2,y 707 f000 - dey 708 f000 - bpl blacken320colorsloop 709 f000 - rts 710 f000 - 711 f000 -hschasecolors 712 f000 - lda framecounter 713 f000 - and #3 714 f000 - bne hschasecolorsreturn 715 f000 - inc hscolorchaseindex 716 f000 - lda hscolorchaseindex 717 f000 - 718 f000 - sta P5C2 719 f000 - sbc #$02 720 f000 - sta P4C2 721 f000 - sbc #$02 722 f000 - sta P3C2 723 f000 - sbc #$02 724 f000 - sta P2C2 725 f000 - sbc #$02 726 f000 - sta P1C2 727 f000 -hschasecolorsreturn 728 f000 - rts 729 f000 - 730 f000 -playhssfx 731 f000 - lda hssfx_lo,x 732 f000 - sta temp1 733 f000 - lda hssfx_hi,x 734 f000 - sta temp2 735 f000 - lda #0 736 f000 - sta temp3 737 f000 - jmp schedulesfx 738 f000 - 739 f000 -hssfx_lo 740 f000 - .byte sfx_hsletterpositionchange, >sfx_hslettertick 743 f000 - 744 f000 -sfx_hsletterpositionchange 745 f000 - .byte $10,$18,$00 746 f000 - .byte $02,$06,$08 747 f000 - .byte $02,$06,$04 748 f000 - .byte $00,$00,$00 749 f000 -sfx_hslettertick 750 f000 - .byte $10,$18,$00 751 f000 - .byte $00,$00,$0a 752 f000 - .byte $00,$00,$00 753 f000 - 754 f000 -highscorelabeladjust1 755 f000 - .byte (80-(14*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)),(80-(16*2)-(SCORESIZE*2)) 756 f000 -highscorelabeladjust2 757 f000 - .byte (80+(14*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)),(80+(16*2)-(SCORESIZE*2)) 758 f000 - 759 f000 -scorevarlo 760 f000 - .byte <(score0+((6-SCORESIZE)/2)),<(score0+((6-SCORESIZE)/2)),<(score1+((6-SCORESIZE)/2)) 761 f000 -scorevarhi 762 f000 - .byte >(score0+((6-SCORESIZE)/2)),>(score0+((6-SCORESIZE)/2)),>(score1+((6-SCORESIZE)/2)) 763 f000 - 764 f000 - ifnconst HSNOLEVELNAMES 765 f000 -highscoredifficultytextlo 766 f000 - .byte easylevelname, >mediumlevelname, >hardlevelname, >expertlevelname 769 f000 - ifnconst HSCUSTOMLEVELNAMES 770 f000 -highscoredifficultytextlen 771 f000 - .byte 22, 30, 26, 24 772 f000 - 773 f000 -easylevelname 774 f000 - .byte $04,$00,$12,$18,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 775 f000 -mediumlevelname 776 f000 - .byte $08,$0d,$13,$04,$11,$0c,$04,$03,$08,$00,$13,$04,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 777 f000 -hardlevelname 778 f000 - .byte $00,$03,$15,$00,$0d,$02,$04,$03,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 779 f000 -expertlevelname 780 f000 - .byte $04,$17,$0f,$04,$11,$13,$1d,$0b,$04,$15,$04,$0b,$1d,$07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 781 f000 - else 782 f000 - include "7800hsgamediffnames.asm" 783 f000 - endif ; HSCUSTOMLEVELNAMES 784 f000 - else 785 f000 -HSHIGHSCOREStext 786 f000 - .byte $07,$08,$06,$07,$1d,$12,$02,$0e,$11,$04,$12 787 f000 - endif ; HSNOLEVELNAMES 788 f000 - 789 f000 -highscorelabeltextlo 790 f000 - .byte player0label, >player1label, >player2label 793 f000 - 794 f000 -player0label 795 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$12,$02,$0e,$11,$04,$1a,$1d,$1d 796 f000 - 797 f000 -player1label 798 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$22,$1d,$12,$02,$0e,$11,$04,$1a 799 f000 - 800 f000 -player2label 801 f000 - .byte $0f,$0b,$00,$18,$04,$11,$1d,$23,$1d,$12,$02,$0e,$11,$04,$1a 802 f000 - 803 f000 - 804 f000 - ifconst HSGAMENAMELEN 805 f000 -HSGAMENAMEtable 806 f000 - include "7800hsgamename.asm" 807 f000 - endif 808 f000 - ifconst HSGAMERANKS 809 f000 - include "7800hsgameranks.asm" 810 f000 -highscoreranklabel 811 f000 - .byte $11,$00,$0d,$0a,$1a 812 f000 - endif 813 f000 - 814 f000 - ;ensure our table doesn't wrap a page... 815 f000 - if ((<*)>251) 816 f000 - align 256 817 f000 - endif 818 f000 -hsgameslotnumbers 819 f000 - .byte 33,34,35,36,37 820 f000 - endif 821 f000 - 822 f000 -loaddifficultytable 823 f000 - lda gamedifficulty 824 f000 - and #$03 ; ensure the user hasn't selected an invalid difficulty 825 f000 - sta gamedifficulty 826 f000 - cmp hsdifficulty ; check game difficulty is the same as RAM table 827 f000 - bne loaddifficultytablecontinue1 828 f000 - rts ; this high score difficulty table is already loaded 829 f000 -loaddifficultytablecontinue1 830 f000 - lda gamedifficulty 831 f000 - sta hsdifficulty 832 f000 - ;we need to check the device for the table 833 f000 - lda hsdevice 834 f000 - bne loaddifficultytablecontinue2 835 f000 - ; there's no save device. clear out this table. 836 f000 - jmp cleardifficultytablemem 837 f000 -loaddifficultytablecontinue2 838 f000 - lda hsdevice 839 f000 - and #1 840 f000 - beq memdeviceisntHSC 841 f000 - jmp loaddifficultytableHSC 842 f000 -memdeviceisntHSC 843 f000 - jmp loaddifficultytableAVOX 844 f000 - 845 f000 -savedifficultytable 846 f000 - ;*** we need to check wich device we should use... 847 f000 - lda hsdevice 848 f000 - bne savedifficultytablerealdevice 849 f000 - rts ; its a ram device 850 f000 -savedifficultytablerealdevice 851 f000 - and #1 852 f000 - beq savememdeviceisntHSC 853 f000 - jmp savedifficultytableHSC 854 f000 -savememdeviceisntHSC 855 f000 - jmp savedifficultytableAVOX 856 f000 - 857 f000 -savedifficultytableAVOX 858 f000 - ; the load call already setup the memory structure and atarivox memory location 859 f000 - jsr savealoadedHSCtablecontinue 860 f000 -savedifficultytableAVOXskipconvert 861 f000 - lda #HSIDHI 862 f000 - sta eeprombuffer 863 f000 - lda #HSIDLO 864 f000 - sta eeprombuffer+1 865 f000 - lda hsdifficulty 866 f000 - sta eeprombuffer+2 867 f000 - lda #32 868 f000 - jsr AVoxWriteBytes 869 f000 - rts 870 f000 - 871 f000 -savedifficultytableHSC 872 f000 - ;we always load a table before reaching here, so the 873 f000 - ;memory structures from the load should be intact... 874 f000 - ldy hsgameslot 875 f000 - bpl savealoadedHSCtable 876 f000 - rts 877 f000 -savealoadedHSCtable 878 f000 - lda HSCGameDifficulty,y 879 f000 - cmp #$7F 880 f000 - bne savealoadedHSCtablecontinue 881 f000 - jsr initializeHSCtableentry 882 f000 -savealoadedHSCtablecontinue 883 f000 - ;convert our RAM table to HSC format and write it out... 884 f000 - ldy #0 885 f000 - ldx #0 886 f000 -savedifficultytableScores 887 f000 - 888 f000 - lda HSRAMInitials,x 889 f000 - sta temp3 890 f000 - lda HSRAMInitials+1,x 891 f000 - sta temp4 892 f000 - lda HSRAMInitials+2,x 893 f000 - sta temp5 894 f000 - jsr encodeHSCInitials ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 895 f000 - 896 f000 - lda temp1 897 f000 - sta (HSGameTableLo),y 898 f000 - iny 899 f000 - lda temp2 900 f000 - sta (HSGameTableLo),y 901 f000 - iny 902 f000 - 903 f000 - lda HSRAMScores,x 904 f000 - sta (HSGameTableLo),y 905 f000 - iny 906 f000 - lda HSRAMScores+1,x 907 f000 - sta (HSGameTableLo),y 908 f000 - iny 909 f000 - lda HSRAMScores+2,x 910 f000 - sta (HSGameTableLo),y 911 f000 - iny 912 f000 - inx 913 f000 - inx 914 f000 - inx ; +3 915 f000 - cpx #15 916 f000 - bne savedifficultytableScores 917 f000 - rts 918 f000 - 919 f000 -loaddifficultytableHSC 920 f000 - ; routine responsible for loading the difficulty table from HSC 921 f000 - jsr findindexHSC 922 f000 - ldy hsgameslot 923 f000 - lda HSCGameDifficulty,y 924 f000 - cmp #$7F 925 f000 - bne loaddifficultytableHSCcontinue 926 f000 - ;there was an error. use a new RAM table instead... 927 f000 - jmp cleardifficultytablemem 928 f000 -loaddifficultytableHSCcontinue 929 f000 - ; parse the data into the HS memory... 930 f000 - ldy #0 931 f000 - ldx #0 932 f000 -loaddifficultytableScores 933 f000 - lda (HSGameTableLo),y 934 f000 - sta temp1 935 f000 - iny 936 f000 - lda (HSGameTableLo),y 937 f000 - sta temp2 938 f000 - jsr decodeHSCInitials ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 939 f000 - iny 940 f000 - lda (HSGameTableLo),y 941 f000 - sta HSRAMScores,x 942 f000 - lda temp3 943 f000 - sta HSRAMInitials,x 944 f000 - inx 945 f000 - iny 946 f000 - lda (HSGameTableLo),y 947 f000 - sta HSRAMScores,x 948 f000 - lda temp4 949 f000 - sta HSRAMInitials,x 950 f000 - inx 951 f000 - iny 952 f000 - lda (HSGameTableLo),y 953 f000 - sta HSRAMScores,x 954 f000 - lda temp5 955 f000 - sta HSRAMInitials,x 956 f000 - inx 957 f000 - iny 958 f000 - cpx #15 959 f000 - bne loaddifficultytableScores 960 f000 - rts 961 f000 - 962 f000 -decodeHSCInitials 963 f000 - ; takes 2 byte initials from temp1,2 and stores 3 byte initials in temp3,4,5 964 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 965 f000 - lda #0 966 f000 - sta temp4 967 f000 - lda temp1 968 f000 - and #%00011111 969 f000 - sta temp3 970 f000 - 971 f000 - lda temp2 972 f000 - and #%00011111 973 f000 - sta temp5 974 f000 - 975 f000 - lda temp1 976 f000 - asl 977 f000 - rol temp4 978 f000 - asl 979 f000 - rol temp4 980 f000 - asl 981 f000 - rol temp4 982 f000 - lda temp2 983 f000 - asl 984 f000 - rol temp4 985 f000 - asl 986 f000 - rol temp4 987 f000 - rts 988 f000 -encodeHSCInitials 989 f000 - ; takes 3 byte initials from temp3,4,5 and stores 2 byte initials in temp1,2 990 f000 - ; 2 bytes are packed in the form: 22211111 22_33333 991 f000 - ; start with packing temp1... 992 f000 - lda temp4 993 f000 - and #%00011100 994 f000 - sta temp1 995 f000 - asl temp1 996 f000 - asl temp1 997 f000 - asl temp1 998 f000 - lda temp3 999 f000 - and #%00011111 1000 f000 - ora temp1 1001 f000 - sta temp1 1002 f000 - ; ...temp1 is now packed, on to temp2... 1003 f000 - lda temp5 1004 f000 - asl 1005 f000 - asl 1006 f000 - ror temp4 1007 f000 - ror 1008 f000 - ror temp4 1009 f000 - ror 1010 f000 - sta temp2 1011 f000 - rts 1012 f000 - 1013 f000 -findindexHSCerror 1014 f000 - ;the HSC is stuffed. return the bad slot flag 1015 f000 - ldy #$ff 1016 f000 - sty hsgameslot 1017 f000 - rts 1018 f000 - 1019 f000 -findindexHSC 1020 f000 -HSCGameID1 = $1029 1021 f000 -HSCGameID2 = $106E 1022 f000 -HSCGameDifficulty = $10B3 1023 f000 -HSCGameIndex = $10F8 1024 f000 - ; routine responsible for finding the game index from HSC 1025 f000 - ; call with x=0 to create a new table if none exist, call with x=$ff to avoid creating new tables 1026 f000 - ; the HS loading routine will use x=$ff, the HS saving routine will use x=0 1027 f000 - ldy #69 ; start +1 to account for the dey 1028 f000 -findindexHSCloop 1029 f000 - dey 1030 f000 - bmi findindexHSCerror 1031 f000 - lda HSCGameDifficulty,y 1032 f000 - cmp #$7F 1033 f000 - beq findourindexHSC 1034 f000 - cmp gamedifficulty 1035 f000 - bne findindexHSCloop 1036 f000 - lda HSCGameID1,y 1037 f000 - cmp #HSIDHI 1038 f000 - bne findindexHSCloop 1039 f000 - lda HSCGameID2,y 1040 f000 - cmp #HSIDLO 1041 f000 - bne findindexHSCloop 1042 f000 -findourindexHSC 1043 f000 - ; if we're here we found our index in the table 1044 f000 - ; or we found the first empty one 1045 f000 - sty hsgameslot 1046 f000 - jsr setupHSCGamepointer ; setup the pointer to the HS Table for this game... 1047 f000 - rts 1048 f000 - 1049 f000 - 1050 f000 -initializeHSCtableentry 1051 f000 - ldy hsgameslot 1052 f000 - ; we need to make a new entry... 1053 f000 - lda #HSIDHI 1054 f000 - sta HSCGameID1,y 1055 f000 - lda #HSIDLO 1056 f000 - sta HSCGameID2,y 1057 f000 - lda gamedifficulty 1058 f000 - sta HSCGameDifficulty,y 1059 f000 - ldx #0 1060 f000 -fixHSDGameDifficultylistLoop 1061 f000 - inx 1062 f000 - txa 1063 f000 - sta HSCGameIndex,y 1064 f000 - iny 1065 f000 - cpy #69 1066 f000 - bne fixHSDGameDifficultylistLoop 1067 f000 - rts 1068 f000 - 1069 f000 -setupHSCGamepointer 1070 f000 - ; this routines sets (HSGameTableLo) pointing to the game's HS table 1071 f000 - lda #$17 1072 f000 - sta HSGameTableHi 1073 f000 - lda #$FA 1074 f000 - sta HSGameTableLo 1075 f000 -setupHSCGamepointerLoop 1076 f000 - lda HSGameTableLo 1077 f000 - sec 1078 f000 - sbc #25 1079 f000 - sta HSGameTableLo 1080 f000 - lda HSGameTableHi 1081 f000 - sbc #0 1082 f000 - sta HSGameTableHi 1083 f000 - iny 1084 f000 - cpy #69 1085 f000 - bne setupHSCGamepointerLoop 1086 f000 - rts 1087 f000 - 1088 f000 -loaddifficultytableAVOX 1089 f000 - ; routine responsible for loading the difficulty table from Avox 1090 f000 - ; we reuse HSC routines to format data to/from our Avox RAM buffer... 1091 f000 - lda #>(eeprombuffer+3) 1092 f000 - sta HSGameTableHi 1093 f000 - lda #<(eeprombuffer+3) 1094 f000 - sta HSGameTableLo 1095 f000 - 1096 f000 - ; the start location in EEPROM, subtract 32... 1097 f000 - lda #$5F 1098 f000 - sta HSVoxHi 1099 f000 - lda #$E0 1100 f000 - sta HSVoxLo 1101 f000 - lda #0 1102 f000 - sta temp1 1103 f000 -loaddifficultytableAVOXloop 1104 f000 - inc temp1 1105 f000 - beq loaddifficultytableAVOXfull 1106 f000 - clc 1107 f000 - lda HSVoxLo 1108 f000 - adc #32 1109 f000 - sta HSVoxLo 1110 f000 - lda HSVoxHi 1111 f000 - adc #0 1112 f000 - sta HSVoxHi 1113 f000 - lda #3 1114 f000 - jsr AVoxReadBytes ; read in 3 bytes, ID1,ID2,Difficulty 1115 f000 - lda eeprombuffer 1116 f000 - cmp #$FF 1117 f000 - beq loaddifficultytableAVOXempty 1118 f000 - cmp #HSIDHI 1119 f000 - bne loaddifficultytableAVOXloop 1120 f000 - lda eeprombuffer+1 1121 f000 - cmp #HSIDLO 1122 f000 - bne loaddifficultytableAVOXloop 1123 f000 - lda eeprombuffer+2 1124 f000 - cmp gamedifficulty 1125 f000 - bne loaddifficultytableAVOXloop 1126 f000 -loaddifficultytableAVOXdone 1127 f000 - lda #32 1128 f000 - jsr AVoxReadBytes 1129 f000 - jsr loaddifficultytableHSCcontinue 1130 f000 - rts 1131 f000 -loaddifficultytableAVOXfull 1132 f000 - lda #0 1133 f000 - sta hsdevice ; looks like all 255 entries are taken... disable it. 1134 f000 -loaddifficultytableAVOXempty 1135 f000 - jmp cleardifficultytablemem 1136 f000 - rts 1137 f000 - 1138 f000 -cleardifficultytablemem 1139 f000 - ldy #29 1140 f000 - lda #0 1141 f000 -cleardifficultytablememloop 1142 f000 - sta HSRAMTable,y 1143 f000 - dey 1144 f000 - bpl cleardifficultytablememloop 1145 f000 - rts 1146 f000 -hiscoremoduleend 1147 f000 - 1148 f000 - echo " hiscore assembly: ",[(hiscoremoduleend-hiscoremodulestart)]d," bytes" 1149 f000 - 1150 f000 - ifconst DOUBLEWIDE 1151 f000 -plotvaluedw 1152 f000 -plotdigitcount = temp6 1153 f000 - lda #0 1154 f000 - tay 1155 f000 - ldx valbufend 1156 f000 - 1157 f000 - lda plotdigitcount 1158 f000 - and #1 1159 f000 - beq pvnibble2chardw 1160 f000 - lda #0 1161 f000 - sta VALBUFFER,x ; just in case we skip this digit 1162 f000 - beq pvnibble2char_skipnibbledw 1163 f000 - 1164 f000 -pvnibble2chardw 1165 f000 - ; high nibble... 1166 f000 - lda (temp7),y 1167 f000 - and #$f0 1168 f000 - lsr 1169 f000 - lsr 1170 f000 - lsr 1171 f000 - lsr 1172 f000 - 1173 f000 - clc 1174 f000 - adc temp1 ; add the offset to character graphics to our value 1175 f000 - sta VALBUFFER,x 1176 f000 - inx 1177 f000 - dec plotdigitcount 1178 f000 -pvnibble2char_skipnibbledw 1179 f000 - ; low nibble... 1180 f000 - lda (temp7),y 1181 f000 - and #$0f 1182 f000 - clc 1183 f000 - adc temp1 ; add the offset to character graphics to our value 1184 f000 - sta VALBUFFER,x 1185 f000 - inx 1186 f000 - iny 1187 f000 - 1188 f000 - dec plotdigitcount 1189 f000 - bne pvnibble2chardw 1190 f000 - ;point to the start of our valuebuffer 1191 f000 - clc 1192 f000 - lda #VALBUFFER 1196 f000 - adc #0 1197 f000 - sta temp2 1198 f000 - 1199 f000 - ;advance valbufend to the end of our value buffer 1200 f000 - stx valbufend 1201 f000 - 1202 f000 - ifnconst plotvalueonscreen 1203 f000 - jmp plotcharacters 1204 f000 - else 1205 f000 - jmp plotcharacterslive 1206 f000 - endif 1207 f000 - endif ; DOUBLEWIDE 1208 f000 - 1209 f000 endif ; HSSUPPORT 1210 f000 ------- FILE c:\Users\Shane\Documents\my7800projects\shooting_demos\vertical\New_VerticalShooter_Test.78b.asm 1450 f000 endif 1451 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 1452 f000 1453 f000 ;standard routimes needed for pretty much all games 1454 f000 1455 f000 ; some definitions used with "set debug color" 1456 f000 00 91 DEBUGCALC = $91 1457 f000 00 41 DEBUGWASTE = $41 1458 f000 00 c1 DEBUGDRAW = $C1 1459 f000 1460 f000 ;NMI and IRQ handlers 1461 f000 NMI 1462 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 1463 f000 48 pha ; save A 1464 f001 a5 4d lda visibleover 1465 f003 49 ff eor #255 1466 f005 85 4d sta visibleover 1467 f007 - ifconst DEBUGINTERRUPT 1468 f007 - and #$93 1469 f007 - sta BACKGRND 1470 f007 endif 1471 f007 ce b2 01 dec interruptindex 1472 f00a d0 03 bne skipreallyoffvisible 1473 f00c 4c 5b f0 jmp reallyoffvisible 1474 f00f skipreallyoffvisible 1475 f00f a5 4d lda visibleover 1476 f011 f0 46 beq skiptopscreenroutine 1477 f013 8a txa ; save X+Y 1478 f014 48 pha 1479 f015 98 tya 1480 f016 48 pha 1481 f017 d8 cld 1482 f018 - ifconst .topscreenroutine 1483 f018 - jsr .topscreenroutine 1484 f018 endif 1485 f018 ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 1486 f01b 1487 f01b ; ** Other important routines that need to regularly run, and can run onscreen. 1488 f01b ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 1489 f01b 1490 f01b longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 1491 f01b - ifconst LONGCONTROLLERREAD 1492 f01b - lda #$38 1493 f01b - ifconst LONGDEBUG 1494 f01b - sta BACKGRND 1495 f01b - endif 1496 f01b - sta inttemp6 1497 f01b - 1498 f01b -longreadlineloop 1499 f01b - ldx #1 1500 f01b -longreadloop 1501 f01b - ldy port0control,x 1502 f01b - lda longreadroutinelo,y 1503 f01b - sta inttemp3 1504 f01b - lda longreadroutinehi,y 1505 f01b - sta inttemp4 1506 f01b - ora inttemp3 1507 f01b - beq longreadloopreturn 1508 f01b - jmp (inttemp3) 1509 f01b -longreadloopreturn 1510 f01b - dex 1511 f01b - bpl longreadloop 1512 f01b - dec inttemp6 1513 f01b - sta WSYNC 1514 f01b - bne longreadlineloop 1515 f01b - 1516 f01b - ifconst LONGDEBUG 1517 f01b - lda #$00 1518 f01b - sta BACKGRND 1519 f01b - endif 1520 f01b endif ; LONGCONTROLLERREAD 1521 f01b 1522 f01b 20 cd f1 jsr servicesfxchannels 1523 f01e - ifconst MUSICTRACKER 1524 f01e - jsr servicesong 1525 f01e endif ; MUSICTRACKER 1526 f01e 1527 f01e ee a4 01 inc framecounter 1528 f021 ad a4 01 lda framecounter 1529 f024 29 3f and #63 1530 f026 d0 08 bne skipcountdownseconds 1531 f028 ad a5 01 lda countdownseconds 1532 f02b f0 03 beq skipcountdownseconds 1533 f02d ce a5 01 dec countdownseconds 1534 f030 skipcountdownseconds 1535 f030 1536 f030 a2 01 ldx #1 1537 f032 buttonreadloop 1538 f032 8a txa 1539 f033 48 pha 1540 f034 bc e2 01 ldy port0control,x 1541 f037 b9 b0 f1 lda buttonhandlerlo,y 1542 f03a 85 da sta inttemp3 1543 f03c b9 a5 f1 lda buttonhandlerhi,y 1544 f03f 85 db sta inttemp4 1545 f041 05 da ora inttemp3 1546 f043 f0 03 beq buttonreadloopreturn 1547 f045 6c da 00 jmp (inttemp3) 1548 f048 buttonreadloopreturn 1549 f048 68 pla 1550 f049 aa tax 1551 f04a ca dex 1552 f04b 10 e5 bpl buttonreadloop 1553 f04d 1554 f04d - ifconst DRIVINGSUPPORT 1555 f04d - jsr drivingupdate 1556 f04d endif ; DRIVINGSUPPORT 1557 f04d - ifconst KEYPADSUPPORT 1558 f04d - jsr keypadrowselect 1559 f04d endif ; KEYPADSUPPORT 1560 f04d 1561 f04d 1562 f04d ad b5 01 lda doublebufferminimumframeindex 1563 f050 f0 03 beq skipdoublebufferminimumframeindexadjust 1564 f052 ce b5 01 dec doublebufferminimumframeindex 1565 f055 skipdoublebufferminimumframeindexadjust 1566 f055 1567 f055 68 pla 1568 f056 a8 tay 1569 f057 68 pla 1570 f058 aa tax 1571 f059 skiptopscreenroutine 1572 f059 68 pla 1573 f05a IRQ 1574 f05a 40 RTI 1575 f05b 1576 f05b - ifconst LONGCONTROLLERREAD 1577 f05b -longreadroutinelo 1578 f05b - ; NONE PROLINE LIGHTGUN PADDLE 1579 f05b - .byte 0, 0, 0, 0 1580 f05b - ; TRKBALL VCS STICK DRIVING KEYPAD 1581 f05b - .byte 0, 0, 0, 0 1582 f05b - ; STMOUSE AMOUSE ATARIVOX 1583 f05b - .byte mouseupdate, >mouseupdate, 0 1592 f05b -nullroutine 1593 f05b - rts 1594 f05b endif ; LONGCONTROLLERREAD 1595 f05b 1596 f05b reallyoffvisible 1597 f05b 85 24 sta WSYNC 1598 f05d 1599 f05d a9 00 lda #0 1600 f05f 85 4d sta visibleover 1601 f061 - ifconst DEBUGINTERRUPT 1602 f061 - sta BACKGRND 1603 f061 endif 1604 f061 1605 f061 a9 03 lda #3 1606 f063 8d b2 01 sta interruptindex 1607 f066 1608 f066 8a txa 1609 f067 48 pha 1610 f068 98 tya 1611 f069 48 pha 1612 f06a d8 cld 1613 f06b 1614 f06b 20 47 f1 jsr uninterruptableroutines 1615 f06e 1616 f06e - ifconst .userinterrupt 1617 f06e - jsr .userinterrupt 1618 f06e endif 1619 f06e 1620 f06e - ifconst KEYPADSUPPORT 1621 f06e - jsr keypadcolumnread 1622 f06e endif 1623 f06e 1624 f06e 68 pla 1625 f06f a8 tay 1626 f070 68 pla 1627 f071 aa tax 1628 f072 68 pla 1629 f073 40 RTI 1630 f074 1631 f074 clearscreen 1632 f074 a2 17 ldx #(WZONECOUNT-1) 1633 f076 a9 00 lda #0 1634 f078 clearscreenloop 1635 f078 95 65 sta dlend,x 1636 f07a ca dex 1637 f07b 10 fb bpl clearscreenloop 1638 f07d a9 00 lda #0 1639 f07f 8d ad 01 sta valbufend ; clear the bcd value buffer 1640 f082 8d ae 01 sta valbufendsave 1641 f085 60 rts 1642 f086 1643 f086 restorescreen 1644 f086 a2 17 ldx #(WZONECOUNT-1) 1645 f088 a9 00 lda #0 1646 f08a restorescreenloop 1647 f08a b5 82 lda dlendsave,x 1648 f08c 95 65 sta dlend,x 1649 f08e ca dex 1650 f08f 10 f9 bpl restorescreenloop 1651 f091 ad ae 01 lda valbufendsave 1652 f094 8d ad 01 sta valbufend 1653 f097 60 rts 1654 f098 1655 f098 savescreen 1656 f098 a2 17 ldx #(WZONECOUNT-1) 1657 f09a savescreenloop 1658 f09a b5 65 lda dlend,x 1659 f09c 95 82 sta dlendsave,x 1660 f09e ca dex 1661 f09f 10 f9 bpl savescreenloop 1662 f0a1 ad ad 01 lda valbufend 1663 f0a4 8d ae 01 sta valbufendsave 1664 f0a7 - ifconst DOUBLEBUFFER 1665 f0a7 - lda doublebufferstate 1666 f0a7 - beq savescreenrts 1667 f0a7 - lda #1 1668 f0a7 - sta doublebufferbufferdirty 1669 f0a7 -savescreenrts 1670 f0a7 endif ; DOUBLEBUFFER 1671 f0a7 60 rts 1672 f0a8 1673 f0a8 drawscreen 1674 f0a8 1675 f0a8 a9 00 lda #0 1676 f0aa 85 42 sta temp1 ; not B&W if we're here... 1677 f0ac 1678 f0ac drawscreenwait 1679 f0ac a5 4d lda visibleover 1680 f0ae d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 1681 f0b0 1682 f0b0 ;restore some registers in case the game changed them mid-screen... 1683 f0b0 ad 07 21 lda sCTRL 1684 f0b3 05 42 ora temp1 1685 f0b5 85 3c sta CTRL 1686 f0b7 ad 0b 21 lda sCHARBASE 1687 f0ba 85 34 sta CHARBASE 1688 f0bc 1689 f0bc ;ensure all of the display list is terminated... 1690 f0bc 20 2d f1 jsr terminatedisplaylist 1691 f0bf 1692 f0bf ifnconst pauseroutineoff 1693 f0bf 20 ca f0 jsr pauseroutine 1694 f0c2 endif ; pauseroutineoff 1695 f0c2 1696 f0c2 ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 1697 f0c2 ; delaying a full frame, but still allowing time for basic calculations. 1698 f0c2 visiblescreenstartedwait 1699 f0c2 a5 4d lda visibleover 1700 f0c4 f0 fc beq visiblescreenstartedwait 1701 f0c6 visiblescreenstartedwaitdone 1702 f0c6 ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 1703 f0c9 60 rts 1704 f0ca 1705 f0ca ifnconst pauseroutineoff 1706 f0ca ; check to see if pause was pressed and released 1707 f0ca pauseroutine 1708 f0ca ad b6 01 lda pausedisable 1709 f0cd d0 4e bne leavepauseroutine 1710 f0cf a9 08 lda #8 1711 f0d1 2c 82 02 bit SWCHB 1712 f0d4 f0 29 beq pausepressed 1713 f0d6 1714 f0d6 ifnconst SOFTRESETASPAUSEOFF 1715 f0d6 ifnconst MOUSESUPPORT 1716 f0d6 ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 1717 f0d9 29 70 and #%01110000 ; _LDU 1718 f0db f0 22 beq pausepressed 1719 f0dd endif 1720 f0dd endif 1721 f0dd 1722 f0dd ;pause isn't pressed 1723 f0dd a9 00 lda #0 1724 f0df 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 1725 f0e2 1726 f0e2 ;check if we're in an already paused state 1727 f0e2 ad 00 21 lda pausestate 1728 f0e5 f0 36 beq leavepauseroutine ; nope, leave 1729 f0e7 1730 f0e7 c9 01 cmp #1 ; last frame was the start of pausing 1731 f0e9 f0 2b beq enterpausestate2 ; move from state 1 to 2 1732 f0eb 1733 f0eb c9 02 cmp #2 1734 f0ed f0 34 beq carryonpausing 1735 f0ef 1736 f0ef ;pausestate must be >2, which means we're ending an unpause 1737 f0ef a9 00 lda #0 1738 f0f1 8d ac 01 sta pausebuttonflag 1739 f0f4 8d 00 21 sta pausestate 1740 f0f7 ad 07 21 lda sCTRL 1741 f0fa 85 3c sta CTRL 1742 f0fc 4c 1d f1 jmp leavepauseroutine 1743 f0ff 1744 f0ff pausepressed 1745 f0ff ;pause is pressed 1746 f0ff ad ac 01 lda pausebuttonflag 1747 f102 c9 ff cmp #$ff 1748 f104 f0 1d beq carryonpausing 1749 f106 1750 f106 ;its a new press, increment the state 1751 f106 ee 00 21 inc pausestate 1752 f109 1753 f109 ;silence volume at the start and end of pausing 1754 f109 a9 00 lda #0 1755 f10b 85 19 sta AUDV0 1756 f10d 85 1a sta AUDV1 1757 f10f 1758 f10f - ifconst pokeysupport 1759 f10f - ldy #7 1760 f10f -pausesilencepokeyaudioloop 1761 f10f - sta (pokeybase),y 1762 f10f - dey 1763 f10f - bpl pausesilencepokeyaudioloop 1764 f10f endif ; pokeysupport 1765 f10f 1766 f10f a9 ff lda #$ff 1767 f111 8d ac 01 sta pausebuttonflag 1768 f114 d0 0d bne carryonpausing 1769 f116 1770 f116 enterpausestate2 1771 f116 a9 02 lda #2 1772 f118 8d 00 21 sta pausestate 1773 f11b d0 06 bne carryonpausing 1774 f11d leavepauseroutine 1775 f11d ad 07 21 lda sCTRL 1776 f120 85 3c sta CTRL 1777 f122 60 rts 1778 f123 carryonpausing 1779 f123 - ifconst .pause 1780 f123 - jsr .pause 1781 f123 endif ; .pause 1782 f123 ad 07 21 lda sCTRL 1783 f126 09 80 ora #%10000000 ; turn off colorburst during pause... 1784 f128 85 3c sta CTRL 1785 f12a 4c ca f0 jmp pauseroutine 1786 f12d endif ; pauseroutineoff 1787 f12d 1788 f12d 1789 f12d - ifconst DOUBLEBUFFER 1790 f12d -skipterminatedisplaylistreturn 1791 f12d - rts 1792 f12d endif ; DOUBLEBUFFER 1793 f12d terminatedisplaylist 1794 f12d - ifconst DOUBLEBUFFER 1795 f12d - lda doublebufferstate 1796 f12d - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 1797 f12d endif ; DOUBLEBUFFER 1798 f12d terminatedisplaybuffer 1799 f12d ;add DL end entry on each DL 1800 f12d a2 17 ldx #(WZONECOUNT-1) 1801 f12f dlendloop 1802 f12f bd e7 f5 lda DLPOINTL,x 1803 f132 - ifconst DOUBLEBUFFER 1804 f132 - clc 1805 f132 - adc doublebufferdloffset 1806 f132 endif ; DOUBLEBUFFER 1807 f132 85 63 sta dlpnt 1808 f134 bd cf f5 lda DLPOINTH,x 1809 f137 - ifconst DOUBLEBUFFER 1810 f137 - adc #0 1811 f137 endif ; DOUBLEBUFFER 1812 f137 85 64 sta dlpnt+1 1813 f139 b4 65 ldy dlend,x 1814 f13b a9 00 lda #$00 1815 f13d dlendmoreloops 1816 f13d c8 iny 1817 f13e 91 63 sta (dlpnt),y 1818 f140 - ifconst FRAMESKIPGLITCHFIXWEAK 1819 f140 - cpy #DLLASTOBJ+1 1820 f140 - beq dlendthiszonedone 1821 f140 - iny 1822 f140 - iny 1823 f140 - iny 1824 f140 - iny 1825 f140 - iny 1826 f140 - sta (dlpnt),y 1827 f140 -dlendthiszonedone 1828 f140 endif FRAMESKIPGLITCHFIXWEAK 1829 f140 - ifconst FRAMESKIPGLITCHFIX 1830 f140 - iny 1831 f140 - iny 1832 f140 - iny 1833 f140 - iny 1834 f140 - cpy #DLLASTOBJ-1 1835 f140 - bcc dlendmoreloops 1836 f140 endif ; FRAMESKIPGLITCHFIX 1837 f140 ca dex 1838 f141 10 ec bpl dlendloop 1839 f143 1840 f143 ifnconst pauseroutineoff 1841 f143 20 ca f0 jsr pauseroutine 1842 f146 endif ; pauseroutineoff 1843 f146 60 rts 1844 f147 1845 f147 uninterruptableroutines 1846 f147 ; this is for routines that must happen off the visible screen, each frame. 1847 f147 1848 f147 - ifconst AVOXVOICE 1849 f147 - jsr serviceatarivoxqueue 1850 f147 endif 1851 f147 1852 f147 a9 00 lda #0 1853 f149 8d e1 01 sta palfastframe 1854 f14c ad 09 21 lda paldetected 1855 f14f f0 10 beq skippalframeadjusting 1856 f151 ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 1857 f151 ae e0 01 ldx palframes 1858 f154 e8 inx 1859 f155 e0 05 cpx #5 1860 f157 d0 05 bne palframeskipdone 1861 f159 ee e1 01 inc palfastframe 1862 f15c a2 00 ldx #0 1863 f15e palframeskipdone 1864 f15e 8e e0 01 stx palframes 1865 f161 skippalframeadjusting 1866 f161 1867 f161 - ifconst MUSICTRACKER 1868 f161 - ; We normally run the servicesong routine from the top-screen interrupt, but if it 1869 f161 - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 1870 f161 - ; If that happens, we try again here. Chances are very small we'll run into the same 1871 f161 - ; problem twice, and if we do, we just drop a musical note or two. 1872 f161 - lda sfxschedulemissed 1873 f161 - beq servicesongwasnotmissed 1874 f161 - jsr servicesong 1875 f161 -servicesongwasnotmissed 1876 f161 endif ; MUSICTRACKER 1877 f161 1878 f161 60 rts 1879 f162 1880 f162 serviceatarivoxqueue 1881 f162 - ifconst AVOXVOICE 1882 f162 - lda voxlock 1883 f162 - bne skipvoxprocessing ; the vox is in the middle of speech address update 1884 f162 -skipvoxqueuesizedec 1885 f162 - jmp processavoxvoice 1886 f162 -skipvoxprocessing 1887 f162 - rts 1888 f162 - 1889 f162 -processavoxvoice 1890 f162 - lda avoxenable 1891 f162 - bne avoxfixport 1892 f162 - SPKOUT tempavox 1893 f162 - rts 1894 f162 -avoxfixport 1895 f162 - lda #0 ; restore the port to all bits as inputs... 1896 f162 - sta CTLSWA 1897 f162 - rts 1898 f162 -silenceavoxvoice 1899 f162 - SPEAK avoxsilentdata 1900 f162 - rts 1901 f162 -avoxsilentdata 1902 f162 - .byte 31,255 1903 f162 else 1904 f162 60 rts 1905 f163 endif ; AVOXVOICE 1906 f163 1907 f163 joybuttonhandler 1908 f163 8a txa 1909 f164 0a asl 1910 f165 a8 tay 1911 f166 b9 08 00 lda INPT0,y 1912 f169 4a lsr 1913 f16a 9d 02 21 sta sINPT1,x 1914 f16d b9 09 00 lda INPT1,y 1915 f170 29 80 and #%10000000 1916 f172 1d 02 21 ora sINPT1,x 1917 f175 ;eor genesisdetected0,x ; invert INPT1 if genesis is detected 1918 f175 9d 02 21 sta sINPT1,x 1919 f178 1920 f178 b5 0c lda INPT4,x 1921 f17a 30 19 bmi .skip1bjoyfirecheck 1922 f17c ;one button joystick is down 1923 f17c 49 80 eor #%10000000 1924 f17e 9d 02 21 sta sINPT1,x 1925 f181 1926 f181 ad b1 01 lda joybuttonmode 1927 f184 3d 98 f1 and twobuttonmask,x 1928 f187 f0 0c beq .skip1bjoyfirecheck 1929 f189 ad b1 01 lda joybuttonmode 1930 f18c 1d 98 f1 ora twobuttonmask,x 1931 f18f 8d b1 01 sta joybuttonmode 1932 f192 8d 82 02 sta SWCHB 1933 f195 .skip1bjoyfirecheck 1934 f195 4c 48 f0 jmp buttonreadloopreturn 1935 f198 1936 f198 twobuttonmask 1937 f198 04 10 .byte.b %00000100,%00010000 1938 f19a 1939 f19a gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 1940 f19a - ifconst LIGHTGUNSUPPORT 1941 f19a - cpx #0 1942 f19a - bne secondportgunhandler 1943 f19a -firstportgunhandler 1944 f19a - lda SWCHA 1945 f19a - asl 1946 f19a - asl 1947 f19a - asl ; shift D4 to D7 1948 f19a - and #%10000000 1949 f19a - eor #%10000000 1950 f19a - sta sINPT1 1951 f19a - jmp buttonreadloopreturn 1952 f19a -secondportgunhandler 1953 f19a - lda SWCHA 1954 f19a - lsr ; shift D0 into carry 1955 f19a - lsr ; shift carry into D7 1956 f19a - and #%10000000 1957 f19a - eor #%10000000 1958 f19a - sta sINPT3 1959 f19a - jmp buttonreadloopreturn 1960 f19a endif ; LIGHTGUNSUPPORT 1961 f19a 1962 f19a controlsusing2buttoncode 1963 f19a 00 .byte.b 0 ; 00=no controller plugged in 1964 f19b 01 .byte.b 1 ; 01=proline joystick 1965 f19c 00 .byte.b 0 ; 02=lightgun 1966 f19d 00 .byte.b 0 ; 03=paddle 1967 f19e 01 .byte.b 1 ; 04=trakball 1968 f19f 01 .byte.b 1 ; 05=vcs joystick 1969 f1a0 01 .byte.b 1 ; 06=driving control 1970 f1a1 00 .byte.b 0 ; 07=keypad control 1971 f1a2 00 .byte.b 0 ; 08=st mouse/cx80 1972 f1a3 00 .byte.b 0 ; 09=amiga mouse 1973 f1a4 01 .byte.b 1 ; 10=atarivox 1974 f1a5 1975 f1a5 buttonhandlerhi 1976 f1a5 00 .byte.b 0 ; 00=no controller plugged in 1977 f1a6 f1 .byte.b >joybuttonhandler ; 01=proline joystick 1978 f1a7 f1 .byte.b >gunbuttonhandler ; 02=lightgun 1979 f1a8 00 .byte.b 0 ; 03=paddle [not implemented yet] 1980 f1a9 f1 .byte.b >joybuttonhandler ; 04=trakball 1981 f1aa f1 .byte.b >joybuttonhandler ; 05=vcs joystick 1982 f1ab f1 .byte.b >joybuttonhandler ; 06=driving control 1983 f1ac 00 .byte.b 0 ; 07=keypad 1984 f1ad f4 .byte.b >mousebuttonhandler ; 08=st mouse 1985 f1ae f4 .byte.b >mousebuttonhandler ; 09=amiga mouse 1986 f1af f1 .byte.b >joybuttonhandler ; 10=atarivox 1987 f1b0 buttonhandlerlo 1988 f1b0 00 .byte.b 0 ; 00=no controller plugged in 1989 f1b1 63 .byte.b $0F means the sound is looped while priority is active 2090 f20e 2091 f20e 05 d9 ora inttemp2 2092 f210 05 d8 ora inttemp1 ; check if F|C|V=0 2093 f212 f0 23 beq zerosfx ; if so, we're at the end of the sound. 2094 f214 2095 f214 advancesfxpointer 2096 f214 ; advance the pointer to the next sound chunk 2097 f214 c8 iny 2098 f215 84 da sty inttemp3 2099 f217 18 clc 2100 f218 b5 4e lda sfx1pointlo,x 2101 f21a 65 da adc inttemp3 2102 f21c 95 4e sta sfx1pointlo,x 2103 f21e b5 50 lda sfx1pointhi,x 2104 f220 69 00 adc #0 2105 f222 95 50 sta sfx1pointhi,x 2106 f224 4c cf f1 jmp servicesfxchannelsloop 2107 f227 2108 f227 sfxsoundloop 2109 f227 48 pha 2110 f228 b5 52 lda sfx1priority,x 2111 f22a d0 04 bne sfxsoundloop_carryon 2112 f22c 68 pla ; fix the stack before we go 2113 f22d 4c 14 f2 jmp advancesfxpointer 2114 f230 sfxsoundloop_carryon 2115 f230 68 pla 2116 f231 29 f0 and #$F0 2117 f233 4a lsr 2118 f234 4a lsr 2119 f235 4a lsr 2120 f236 4a lsr 2121 f237 2122 f237 zerosfx 2123 f237 95 4e sta sfx1pointlo,x 2124 f239 95 50 sta sfx1pointhi,x 2125 f23b 95 52 sta sfx1priority,x 2126 f23d 4c cf f1 jmp servicesfxchannelsloop 2127 f240 2128 f240 2129 f240 schedulesfx 2130 f240 ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 2131 f240 a0 00 ldy #0 2132 f242 b1 e0 lda (sfxinstrumentlo),y 2133 f244 - ifconst pokeysupport 2134 f244 - cmp #$20 ; POKEY? 2135 f244 - bne scheduletiasfx 2136 f244 - jmp schedulepokeysfx 2137 f244 endif 2138 f244 scheduletiasfx 2139 f244 ;cmp #$10 ; TIA? 2140 f244 ;beq continuescheduletiasfx 2141 f244 ; rts ; unhandled!!! 2142 f244 continuescheduletiasfx 2143 f244 ifnconst TIASFXMONO 2144 f244 a5 4e lda sfx1pointlo 2145 f246 05 50 ora sfx1pointhi 2146 f248 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 2147 f24a a5 4f lda sfx2pointlo 2148 f24c 05 51 ora sfx2pointhi 2149 f24e f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 2150 f250 ; Both channels are scheduled. 2151 f250 a0 01 ldy #1 2152 f252 b1 e0 lda (sfxinstrumentlo),y 2153 f254 d0 01 bne interruptsfx 2154 f256 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 2155 f257 interruptsfx 2156 f257 ;Compare which active sound has a lower priority. We'll interrupt the lower one. 2157 f257 a5 52 lda sfx1priority 2158 f259 c5 53 cmp sfx2priority 2159 f25b b0 04 bcs schedulesfx2 2160 f25d endif ; !TIASFXMONO 2161 f25d 2162 f25d schedulesfx1 2163 f25d a2 00 ldx #0 ; channel 1 2164 f25f ifnconst TIASFXMONO 2165 f25f f0 02 beq skipschedulesfx2 2166 f261 schedulesfx2 2167 f261 a2 01 ldx #1 ; channel 2 2168 f263 skipschedulesfx2 2169 f263 endif ; !TIASFXMONO 2170 f263 2171 f263 - ifconst MUSICTRACKER 2172 f263 - lda sfxnoteindex 2173 f263 - bpl skipdrumkitoverride 2174 f263 - and #$7F ; subtract 128 2175 f263 - sec 2176 f263 - sbc #4 ; drums start at 132, i.e. octave 10 2177 f263 - asl 2178 f263 - tay 2179 f263 - lda tiadrumkitdefinition,y 2180 f263 - sta sfxinstrumentlo 2181 f263 - iny 2182 f263 - lda tiadrumkitdefinition,y 2183 f263 - sta sfxinstrumenthi 2184 f263 - lda #0 2185 f263 - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 2186 f263 -skipdrumkitoverride 2187 f263 endif ; MUSICTRACKER 2188 f263 a0 01 ldy #1 ; get priority and sound-resolution (in frames) 2189 f265 b1 e0 lda (sfxinstrumentlo),y 2190 f267 95 52 sta sfx1priority,x 2191 f269 c8 iny 2192 f26a b1 e0 lda (sfxinstrumentlo),y 2193 f26c 95 56 sta sfx1frames,x 2194 f26e a5 e0 lda sfxinstrumentlo 2195 f270 18 clc 2196 f271 69 03 adc #3 2197 f273 95 4e sta sfx1pointlo,x 2198 f275 a5 e1 lda sfxinstrumenthi 2199 f277 69 00 adc #0 2200 f279 95 50 sta sfx1pointhi,x 2201 f27b a5 e2 lda sfxpitchoffset 2202 f27d 95 54 sta sfx1poffset,x 2203 f27f a9 00 lda #0 2204 f281 95 58 sta sfx1tick,x 2205 f283 a5 e3 lda sfxnoteindex 2206 f285 95 cd sta sfx1notedata,x 2207 f287 60 rts 2208 f288 2209 f288 plotsprite 2210 f288 - ifconst DOUBLEBUFFER 2211 f288 - lda doublebufferstate 2212 f288 - bne skipplotspritewait 2213 f288 endif ; DOUBLEBUFFER 2214 f288 plotspritewait 2215 f288 a5 4d lda visibleover 2216 f28a d0 fc bne plotspritewait 2217 f28c skipplotspritewait 2218 f28c 2219 f28c ;arguments: 2220 f28c ; temp1=lo graphicdata 2221 f28c ; temp2=hi graphicdata 2222 f28c ; temp3=palette | width byte 2223 f28c ; temp4=x 2224 f28c ; temp5=y 2225 f28c ; temp6=mode 2226 f28c a5 46 lda temp5 ;Y position 2227 f28e 4a lsr ; 2 - Divide by 8 or 16 2228 f28f 4a lsr ; 2 2229 f290 4a lsr ; 2 2230 f291 - if WZONEHEIGHT = 16 2231 f291 - lsr ; 2 2232 f291 endif 2233 f291 2234 f291 aa tax 2235 f292 2236 f292 ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 2237 f292 2238 f292 c9 18 cmp #WZONECOUNT 2239 f294 2240 f294 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 2241 f296 ; otherwise, check to see if the bottom half is in zone 0... 2242 f296 2243 f296 - if WZONEHEIGHT = 16 2244 f296 - cmp #15 2245 f296 else 2246 f296 c9 1f cmp #31 2247 f298 endif 2248 f298 2249 f298 d0 05 bne exitplotsprite1 2250 f29a a2 00 ldx #0 2251 f29c 4c db f2 jmp continueplotsprite2 2252 f29f exitplotsprite1 2253 f29f 60 rts 2254 f2a0 2255 f2a0 continueplotsprite1 2256 f2a0 2257 f2a0 bd e7 f5 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 2258 f2a3 - ifconst DOUBLEBUFFER 2259 f2a3 - clc 2260 f2a3 - adc doublebufferdloffset 2261 f2a3 endif ; DOUBLEBUFFER 2262 f2a3 85 63 sta dlpnt 2263 f2a5 bd cf f5 lda DLPOINTH,x 2264 f2a8 - ifconst DOUBLEBUFFER 2265 f2a8 - adc #0 2266 f2a8 endif ; DOUBLEBUFFER 2267 f2a8 85 64 sta dlpnt+1 2268 f2aa 2269 f2aa ;Create DL entry for upper part of sprite 2270 f2aa 2271 f2aa b4 65 ldy dlend,x ;Get the index to the end of this DL 2272 f2ac 2273 f2ac ifconst CHECKOVERWRITE 2274 f2ac c0 4b cpy #DLLASTOBJ 2275 f2ae f0 1f beq checkcontinueplotsprite2 2276 f2b0 continueplotsprite1a 2277 f2b0 endif 2278 f2b0 2279 f2b0 a5 42 lda temp1 ; graphic data, lo byte 2280 f2b2 91 63 sta (dlpnt),y ;Low byte of data address 2281 f2b4 2282 f2b4 ifnconst ATOMICSPRITEUPDATE 2283 f2b4 c8 iny 2284 f2b5 a5 47 lda temp6 2285 f2b7 91 63 sta (dlpnt),y 2286 f2b9 - else 2287 f2b9 - iny 2288 f2b9 - sty temp8 2289 f2b9 - ;lda #0 2290 f2b9 - ;sta (dlpnt),y 2291 f2b9 endif 2292 f2b9 2293 f2b9 c8 iny 2294 f2ba a5 46 lda temp5 ;Y position 2295 f2bc 2296 f2bc - if WZONEHEIGHT = 16 2297 f2bc - and #$0F 2298 f2bc else ; WZONEHEIGHT = 8 2299 f2bc 29 07 and #$7 2300 f2be endif 2301 f2be 2302 f2be 05 43 ora temp2 ; graphic data, hi byte 2303 f2c0 91 63 sta (dlpnt),y 2304 f2c2 2305 f2c2 c8 iny 2306 f2c3 a5 44 lda temp3 ;palette|width 2307 f2c5 91 63 sta (dlpnt),y 2308 f2c7 2309 f2c7 c8 iny 2310 f2c8 a5 45 lda temp4 ;Horizontal position 2311 f2ca 91 63 sta (dlpnt),y 2312 f2cc 2313 f2cc c8 iny 2314 f2cd 94 65 sty dlend,x 2315 f2cf 2316 f2cf - ifconst ATOMICSPRITEUPDATE 2317 f2cf - ldy temp8 2318 f2cf - lda temp6 2319 f2cf - sta (dlpnt),y 2320 f2cf endif 2321 f2cf checkcontinueplotsprite2 2322 f2cf 2323 f2cf a5 46 lda temp5 2324 f2d1 29 07 and #(WZONEHEIGHT-1) 2325 f2d3 2326 f2d3 f0 3d beq doneSPDL ;branch if it is 2327 f2d5 2328 f2d5 ;Create DL entry for lower part of sprite 2329 f2d5 2330 f2d5 e8 inx ;Next region 2331 f2d6 2332 f2d6 e0 18 cpx #WZONECOUNT 2333 f2d8 2334 f2d8 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 2335 f2da 60 rts 2336 f2db continueplotsprite2 2337 f2db 2338 f2db bd e7 f5 lda DLPOINTL,x ;Get pointer to next DL 2339 f2de - ifconst DOUBLEBUFFER 2340 f2de - clc 2341 f2de - adc doublebufferdloffset 2342 f2de endif ; DOUBLEBUFFER 2343 f2de 85 63 sta dlpnt 2344 f2e0 bd cf f5 lda DLPOINTH,x 2345 f2e3 - ifconst DOUBLEBUFFER 2346 f2e3 - adc #0 2347 f2e3 endif ; DOUBLEBUFFER 2348 f2e3 85 64 sta dlpnt+1 2349 f2e5 b4 65 ldy dlend,x ;Get the index to the end of this DL 2350 f2e7 2351 f2e7 ifconst CHECKOVERWRITE 2352 f2e7 c0 4b cpy #DLLASTOBJ 2353 f2e9 d0 01 bne continueplotsprite2a 2354 f2eb 60 rts 2355 f2ec continueplotsprite2a 2356 f2ec endif 2357 f2ec 2358 f2ec a5 42 lda temp1 ; graphic data, lo byte 2359 f2ee 91 63 sta (dlpnt),y 2360 f2f0 2361 f2f0 ifnconst ATOMICSPRITEUPDATE 2362 f2f0 c8 iny 2363 f2f1 a5 47 lda temp6 2364 f2f3 91 63 sta (dlpnt),y 2365 f2f5 - else 2366 f2f5 - iny 2367 f2f5 - sty temp8 2368 f2f5 - ;lda #0 2369 f2f5 - ;sta (dlpnt),y 2370 f2f5 endif 2371 f2f5 2372 f2f5 c8 iny 2373 f2f6 a5 46 lda temp5 ;Y position 2374 f2f8 2375 f2f8 - if WZONEHEIGHT = 16 2376 f2f8 - and #$0F 2377 f2f8 - eor #$0F 2378 f2f8 endif 2379 f2f8 if WZONEHEIGHT = 8 2380 f2f8 29 07 and #$07 2381 f2fa 49 07 eor #$07 2382 f2fc endif 2383 f2fc 2384 f2fc 85 4a sta temp9 2385 f2fe a5 43 lda temp2 ; graphic data, hi byte 2386 f300 18 clc 2387 f301 e5 4a sbc temp9 2388 f303 91 63 sta (dlpnt),y 2389 f305 2390 f305 c8 iny 2391 f306 a5 44 lda temp3 ;palette|width 2392 f308 91 63 sta (dlpnt),y 2393 f30a 2394 f30a c8 iny 2395 f30b a5 45 lda temp4 ;Horizontal position 2396 f30d 91 63 sta (dlpnt),y 2397 f30f 2398 f30f c8 iny 2399 f310 94 65 sty dlend,x 2400 f312 2401 f312 - ifconst ATOMICSPRITEUPDATE 2402 f312 - ldy temp8 2403 f312 - lda temp6 2404 f312 - sta (dlpnt),y 2405 f312 endif 2406 f312 2407 f312 doneSPDL 2408 f312 60 rts 2409 f313 2410 f313 lockzonex 2411 f313 - ifconst ZONELOCKS 2412 f313 - ldy dlend,x 2413 f313 - cpy #DLLASTOBJ 2414 f313 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 2415 f313 - lda DLPOINTL,x 2416 f313 - ifconst DOUBLEBUFFER 2417 f313 - clc 2418 f313 - adc doublebufferdloffset 2419 f313 - endif ; DOUBLEBUFFER 2420 f313 - sta dlpnt 2421 f313 - lda DLPOINTH,x 2422 f313 - ifconst DOUBLEBUFFER 2423 f313 - adc #0 2424 f313 - endif ; DOUBLEBUFFER 2425 f313 - sta dlpnt+1 2426 f313 - iny 2427 f313 - lda #0 2428 f313 - sta (dlpnt),y 2429 f313 - dey 2430 f313 - tya 2431 f313 - ldy #(DLLASTOBJ-1) 2432 f313 - sta (dlpnt),y 2433 f313 - iny 2434 f313 - sty dlend,x 2435 f313 -lockzonexreturn 2436 f313 - rts 2437 f313 endif ; ZONELOCKS 2438 f313 unlockzonex 2439 f313 - ifconst ZONELOCKS 2440 f313 - ldy dlend,x 2441 f313 - cpy #DLLASTOBJ 2442 f313 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 2443 f313 - lda DLPOINTL,x 2444 f313 - ifconst DOUBLEBUFFER 2445 f313 - clc 2446 f313 - adc doublebufferdloffset 2447 f313 - endif ; DOUBLEBUFFER 2448 f313 - sta dlpnt 2449 f313 - lda DLPOINTH,x 2450 f313 - ifconst DOUBLEBUFFER 2451 f313 - adc #0 2452 f313 - endif ; DOUBLEBUFFER 2453 f313 - sta dlpnt+1 2454 f313 - dey 2455 f313 - ;ldy #(DLLASTOBJ-1) 2456 f313 - lda (dlpnt),y 2457 f313 - tay 2458 f313 - sty dlend,x 2459 f313 -unlockzonexreturn 2460 f313 endif ; ZONELOCKS 2461 f313 60 rts 2462 f314 2463 f314 plotcharloop 2464 f314 ; ** read from a data indirectly pointed to from temp8,temp9 2465 f314 ; ** format is: lo_data, hi_data, palette|width, x, y 2466 f314 ; ** format ends with lo_data | hi_data = 0 2467 f314 2468 f314 - ifconst DOUBLEBUFFER 2469 f314 - lda doublebufferstate 2470 f314 - bne skipplotcharloopwait 2471 f314 endif ; DOUBLEBUFFER 2472 f314 plotcharloopwait 2473 f314 a5 4d lda visibleover 2474 f316 d0 fc bne plotcharloopwait 2475 f318 skipplotcharloopwait 2476 f318 plotcharlooploop 2477 f318 a0 00 ldy #0 2478 f31a b1 49 lda (temp8),y 2479 f31c 85 42 sta temp1 2480 f31e c8 iny 2481 f31f b1 49 lda (temp8),y 2482 f321 85 43 sta temp2 2483 f323 05 42 ora temp1 2484 f325 d0 01 bne plotcharloopcontinue 2485 f327 ;the pointer=0, so return 2486 f327 60 rts 2487 f328 plotcharloopcontinue 2488 f328 c8 iny 2489 f329 b1 49 lda (temp8),y 2490 f32b 85 44 sta temp3 2491 f32d c8 iny 2492 f32e b1 49 lda (temp8),y 2493 f330 85 45 sta temp4 2494 f332 c8 iny 2495 f333 b1 49 lda (temp8),y 2496 f335 ;sta temp5 ; not needed with our late entry. 2497 f335 20 4e f3 jsr plotcharactersskipentry 2498 f338 a5 49 lda temp8 2499 f33a 18 clc 2500 f33b 69 05 adc #5 2501 f33d 85 49 sta temp8 2502 f33f a5 4a lda temp9 2503 f341 69 00 adc #0 2504 f343 85 4a sta temp9 2505 f345 4c 18 f3 jmp plotcharlooploop 2506 f348 2507 f348 plotcharacters 2508 f348 - ifconst DOUBLEBUFFER 2509 f348 - lda doublebufferstate 2510 f348 - bne skipplotcharacterswait 2511 f348 endif ; DOUBLEBUFFER 2512 f348 plotcharacterswait 2513 f348 a5 4d lda visibleover 2514 f34a d0 fc bne plotcharacterswait 2515 f34c skipplotcharacterswait 2516 f34c ;arguments: 2517 f34c ; temp1=lo charactermap 2518 f34c ; temp2=hi charactermap 2519 f34c ; temp3=palette | width byte 2520 f34c ; temp4=x 2521 f34c ; temp5=y 2522 f34c 2523 f34c a5 46 lda temp5 ;Y position 2524 f34e 2525 f34e plotcharactersskipentry 2526 f34e 2527 f34e ;ifconst ZONEHEIGHT 2528 f34e ; if ZONEHEIGHT = 16 2529 f34e ; and #$0F 2530 f34e ; endif 2531 f34e ; if ZONEHEIGHT = 8 2532 f34e ; and #$1F 2533 f34e ; endif 2534 f34e ;else 2535 f34e ; and #$0F 2536 f34e ;endif 2537 f34e 2538 f34e aa tax 2539 f34f bd e7 f5 lda DLPOINTL,x ;Get pointer to DL that the characters are in 2540 f352 - ifconst DOUBLEBUFFER 2541 f352 - clc 2542 f352 - adc doublebufferdloffset 2543 f352 endif ; DOUBLEBUFFER 2544 f352 85 63 sta dlpnt 2545 f354 bd cf f5 lda DLPOINTH,x 2546 f357 - ifconst DOUBLEBUFFER 2547 f357 - adc #0 2548 f357 endif ; DOUBLEBUFFER 2549 f357 85 64 sta dlpnt+1 2550 f359 2551 f359 ;Create DL entry for the characters 2552 f359 2553 f359 b4 65 ldy dlend,x ;Get the index to the end of this DL 2554 f35b 2555 f35b ifconst CHECKOVERWRITE 2556 f35b c0 4b cpy #DLLASTOBJ 2557 f35d d0 01 bne continueplotcharacters 2558 f35f 60 rts 2559 f360 continueplotcharacters 2560 f360 endif 2561 f360 2562 f360 a5 42 lda temp1 ; character map data, lo byte 2563 f362 91 63 sta (dlpnt),y ;(1) store low address 2564 f364 2565 f364 c8 iny 2566 f365 ad 06 21 lda charactermode 2567 f368 91 63 sta (dlpnt),y ;(2) store mode 2568 f36a 2569 f36a c8 iny 2570 f36b a5 43 lda temp2 ; character map, hi byte 2571 f36d 91 63 sta (dlpnt),y ;(3) store high address 2572 f36f 2573 f36f c8 iny 2574 f370 a5 44 lda temp3 ;palette|width 2575 f372 91 63 sta (dlpnt),y ;(4) store palette|width 2576 f374 2577 f374 c8 iny 2578 f375 a5 45 lda temp4 ;Horizontal position 2579 f377 91 63 sta (dlpnt),y ;(5) store horizontal position 2580 f379 2581 f379 c8 iny 2582 f37a 94 65 sty dlend,x ; save display list end byte 2583 f37c 60 rts 2584 f37d 2585 f37d 2586 f37d - ifconst plotvalueonscreen 2587 f37d -plotcharacterslive 2588 f37d - ; a version of plotcharacters that draws live and minimally disrupts the screen... 2589 f37d - 2590 f37d - ;arguments: 2591 f37d - ; temp1=lo charactermap 2592 f37d - ; temp2=hi charactermap 2593 f37d - ; temp3=palette | width byte 2594 f37d - ; temp4=x 2595 f37d - ; temp5=y 2596 f37d - 2597 f37d - lda temp5 ;Y position 2598 f37d - 2599 f37d - tax 2600 f37d - lda DLPOINTL,x ;Get pointer to DL that the characters are in 2601 f37d - ifconst DOUBLEBUFFER 2602 f37d - clc 2603 f37d - adc doublebufferdloffset 2604 f37d - endif ; DOUBLEBUFFER 2605 f37d - sta dlpnt 2606 f37d - lda DLPOINTH,x 2607 f37d - ifconst DOUBLEBUFFER 2608 f37d - adc #0 2609 f37d - endif ; DOUBLEBUFFER 2610 f37d - sta dlpnt+1 2611 f37d - 2612 f37d - ;Create DL entry for the characters 2613 f37d - 2614 f37d - ldy dlend,x ;Get the index to the end of this DL 2615 f37d - 2616 f37d - ifconst CHECKOVERWRITE 2617 f37d - cpy #DLLASTOBJ 2618 f37d - bne continueplotcharacterslive 2619 f37d - rts 2620 f37d -continueplotcharacterslive 2621 f37d - endif 2622 f37d - 2623 f37d - lda temp1 ; character map data, lo byte 2624 f37d - sta (dlpnt),y ;(1) store low address 2625 f37d - 2626 f37d - iny 2627 f37d - ; we don't add the second byte yet, since the charmap could briefly 2628 f37d - ; render without a proper character map address, width, or position. 2629 f37d - lda charactermode 2630 f37d - sta (dlpnt),y ;(2) store mode 2631 f37d - 2632 f37d - iny 2633 f37d - lda temp2 ; character map, hi byte 2634 f37d - sta (dlpnt),y ;(3) store high address 2635 f37d - 2636 f37d - iny 2637 f37d - lda temp3 ;palette|width 2638 f37d - sta (dlpnt),y ;(4) store palette|width 2639 f37d - 2640 f37d - iny 2641 f37d - lda temp4 ;Horizontal position 2642 f37d - sta (dlpnt),y ;(5) store horizontal position 2643 f37d - 2644 f37d - iny 2645 f37d - sty dlend,x ; save display list end byte 2646 f37d - 2647 f37d - rts 2648 f37d endif ;plotcharacterslive 2649 f37d 2650 f37d - ifconst USED_PLOTVALUE 2651 f37d -plotvalue 2652 f37d - ; calling 7800basic command: 2653 f37d - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 2654 f37d - ; ...displays the variable as BCD digits 2655 f37d - ; 2656 f37d - ; asm sub arguments: 2657 f37d - ; temp1=lo charactermap 2658 f37d - ; temp2=hi charactermap 2659 f37d - ; temp3=palette | width byte 2660 f37d - ; temp4=x 2661 f37d - ; temp5=y 2662 f37d - ; temp6=number of digits 2663 f37d - ; temp7=lo variable 2664 f37d - ; temp8=hi variable 2665 f37d - ; temp9=character mode 2666 f37d - 2667 f37d -plotdigitcount = temp6 2668 f37d - 2669 f37d - ifconst ZONELOCKS 2670 f37d - ldx temp5 2671 f37d - ldy dlend,x 2672 f37d - cpy #DLLASTOBJ 2673 f37d - bne carryonplotvalue 2674 f37d - rts 2675 f37d -carryonplotvalue 2676 f37d - endif 2677 f37d - 2678 f37d - lda #0 2679 f37d - tay 2680 f37d - ldx valbufend 2681 f37d - 2682 f37d - lda plotdigitcount 2683 f37d - and #1 2684 f37d - beq pvnibble2char 2685 f37d - lda #0 2686 f37d - sta VALBUFFER,x ; just in case we skip this digit 2687 f37d - beq pvnibble2char_skipnibble 2688 f37d - 2689 f37d -pvnibble2char 2690 f37d - ; high nibble... 2691 f37d - lda (temp7),y 2692 f37d - and #$f0 2693 f37d - lsr 2694 f37d - lsr 2695 f37d - lsr 2696 f37d - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 2697 f37d - lsr 2698 f37d - endif 2699 f37d - 2700 f37d - clc 2701 f37d - adc temp1 ; add the offset to character graphics to our value 2702 f37d - sta VALBUFFER,x 2703 f37d - inx 2704 f37d - dec plotdigitcount 2705 f37d - 2706 f37d -pvnibble2char_skipnibble 2707 f37d - ; low nibble... 2708 f37d - lda (temp7),y 2709 f37d - and #$0f 2710 f37d - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 2711 f37d - asl 2712 f37d - endif 2713 f37d - clc 2714 f37d - adc temp1 ; add the offset to character graphics to our value 2715 f37d - sta VALBUFFER,x 2716 f37d - inx 2717 f37d - iny 2718 f37d - 2719 f37d - dec plotdigitcount 2720 f37d - bne pvnibble2char 2721 f37d - 2722 f37d - ;point to the start of our valuebuffer 2723 f37d - clc 2724 f37d - lda #VALBUFFER 2728 f37d - adc #0 2729 f37d - sta temp2 2730 f37d - 2731 f37d - ;advance valbufend to the end of our value buffer 2732 f37d - stx valbufend 2733 f37d - 2734 f37d - ifnconst plotvalueonscreen 2735 f37d - jmp plotcharacters 2736 f37d - else 2737 f37d - jmp plotcharacterslive 2738 f37d - endif 2739 f37d - 2740 f37d endif ; USED_PLOTVALUE 2741 f37d 2742 f37d 2743 f37d - ifconst USED_PLOTVALUEEXTRA 2744 f37d -plotdigitcount = temp6 2745 f37d -plotvalueextra 2746 f37d - ; calling 7800basic command: 2747 f37d - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 2748 f37d - ; ...displays the variable as BCD digits 2749 f37d - ; 2750 f37d - ; asm sub arguments: 2751 f37d - ; temp1=lo charactermap 2752 f37d - ; temp2=hi charactermap 2753 f37d - ; temp3=palette | width byte 2754 f37d - ; temp4=x 2755 f37d - ; temp5=y 2756 f37d - ; temp6=number of digits 2757 f37d - ; temp7=lo variable 2758 f37d - ; temp8=hi variable 2759 f37d - 2760 f37d - lda #0 2761 f37d - tay 2762 f37d - ldx valbufend 2763 f37d - ifnconst plotvalueonscreen 2764 f37d - sta VALBUFFER,x 2765 f37d - endif 2766 f37d - 2767 f37d - lda plotdigitcount 2768 f37d - and #1 2769 f37d - 2770 f37d - bne pvnibble2char_skipnibbleextra 2771 f37d - 2772 f37d -pvnibble2charextra 2773 f37d - ; high nibble... 2774 f37d - lda (temp7),y 2775 f37d - and #$f0 2776 f37d - lsr 2777 f37d - lsr 2778 f37d - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 2779 f37d - lsr 2780 f37d - endif 2781 f37d - clc 2782 f37d - adc temp1 ; add the offset to character graphics to our value 2783 f37d - sta VALBUFFER,x 2784 f37d - inx 2785 f37d - 2786 f37d - ; second half of the digit 2787 f37d - clc 2788 f37d - adc #1 2789 f37d - sta VALBUFFER,x 2790 f37d - inx 2791 f37d - 2792 f37d -pvnibble2char_skipnibbleextra 2793 f37d - ; low nibble... 2794 f37d - lda (temp7),y 2795 f37d - and #$0f 2796 f37d - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 2797 f37d - asl 2798 f37d - endif 2799 f37d - asl 2800 f37d - 2801 f37d - clc 2802 f37d - adc temp1 ; add the offset to character graphics to our value 2803 f37d - sta VALBUFFER,x 2804 f37d - inx 2805 f37d - 2806 f37d - clc 2807 f37d - adc #1 2808 f37d - sta VALBUFFER,x 2809 f37d - inx 2810 f37d - iny 2811 f37d - 2812 f37d - dec plotdigitcount 2813 f37d - bne pvnibble2charextra 2814 f37d - 2815 f37d - ;point to the start of our valuebuffer 2816 f37d - clc 2817 f37d - lda #VALBUFFER 2821 f37d - adc #0 2822 f37d - sta temp2 2823 f37d - 2824 f37d - ;advance valbufend to the end of our value buffer 2825 f37d - stx valbufend 2826 f37d - 2827 f37d - ifnconst plotvalueonscreen 2828 f37d - jmp plotcharacters 2829 f37d - else 2830 f37d - jmp plotcharacterslive 2831 f37d - endif 2832 f37d endif ; USED_PLOTVALUEEXTRA 2833 f37d 2834 f37d boxcollision 2835 f37d ; the worst case cycle-time for the code below is 43 cycles. 2836 f37d ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 2837 f37d 2838 f37d ;__boxx1 = accumulator 2839 f37d ;__boxy1 = y 2840 f37d 00 44 __boxw1 = temp3 2841 f37d 00 45 __boxh1 = temp4 2842 f37d 2843 f37d 00 46 __boxx2 = temp5 2844 f37d 00 47 __boxy2 = temp6 2845 f37d 00 48 __boxw2 = temp7 2846 f37d 00 49 __boxh2 = temp8 2847 f37d 2848 f37d DoXCollisionCheck 2849 f37d ;lda __boxx1 ; skipped. already in the accumulator 2850 f37d c5 46 cmp __boxx2 ;3 2851 f37f b0 07 bcs X1isbiggerthanX2 ;2/3 2852 f381 X2isbiggerthanX1 2853 f381 ; carry is clear 2854 f381 65 44 adc __boxw1 ;3 2855 f383 c5 46 cmp __boxx2 ;3 2856 f385 b0 08 bcs DoYCollisionCheck ;3/2 2857 f387 60 rts ;6 - carry clear, no collision 2858 f388 X1isbiggerthanX2 2859 f388 18 clc ;2 2860 f389 e5 48 sbc __boxw2 ;3 2861 f38b c5 46 cmp __boxx2 ;3 2862 f38d b0 13 bcs noboxcollision ;3/2 2863 f38f DoYCollisionCheck 2864 f38f 98 tya ; 2 ; use to be "lda __boxy1" 2865 f390 c5 47 cmp __boxy2 ;3 2866 f392 b0 05 bcs Y1isbiggerthanY2 ;3/2 2867 f394 Y2isbiggerthanY1 2868 f394 ; carry is clear 2869 f394 65 45 adc __boxh1 ;3 2870 f396 c5 47 cmp __boxy2 ;3 2871 f398 60 rts ;6 2872 f399 Y1isbiggerthanY2 2873 f399 18 clc ;2 2874 f39a e5 49 sbc __boxh2 ;3 2875 f39c c5 47 cmp __boxy2 ;3 2876 f39e b0 02 bcs noboxcollision ;3/2 2877 f3a0 yesboxcollision 2878 f3a0 38 sec ;2 2879 f3a1 60 rts ;6 2880 f3a2 noboxcollision 2881 f3a2 18 clc ;2 2882 f3a3 60 rts ;6 2883 f3a4 2884 f3a4 randomize 2885 f3a4 a5 40 lda rand 2886 f3a6 4a lsr 2887 f3a7 26 41 rol rand16 2888 f3a9 90 02 bcc noeor 2889 f3ab 49 b4 eor #$B4 2890 f3ad noeor 2891 f3ad 85 40 sta rand 2892 f3af 45 41 eor rand16 2893 f3b1 60 rts 2894 f3b2 2895 f3b2 ; bcd conversion routine courtesy Omegamatrix 2896 f3b2 ; http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 2897 f3b2 converttobcd 2898 f3b2 ;value to convert is in the accumulator 2899 f3b2 85 42 sta temp1 2900 f3b4 4a lsr 2901 f3b5 65 42 adc temp1 2902 f3b7 6a ror 2903 f3b8 4a lsr 2904 f3b9 4a lsr 2905 f3ba 65 42 adc temp1 2906 f3bc 6a ror 2907 f3bd 65 42 adc temp1 2908 f3bf 6a ror 2909 f3c0 4a lsr 2910 f3c1 29 3c and #$3C 2911 f3c3 85 43 sta temp2 2912 f3c5 4a lsr 2913 f3c6 65 43 adc temp2 2914 f3c8 65 42 adc temp1 2915 f3ca 60 rts ; return the result in the accumulator 2916 f3cb 2917 f3cb ; Y and A contain multiplicands, result in A 2918 f3cb mul8 2919 f3cb 84 42 sty temp1 2920 f3cd 85 43 sta temp2 2921 f3cf a9 00 lda #0 2922 f3d1 reptmul8 2923 f3d1 46 43 lsr temp2 2924 f3d3 90 03 bcc skipmul8 2925 f3d5 18 clc 2926 f3d6 65 42 adc temp1 2927 f3d8 ;bcs donemul8 might save cycles? 2928 f3d8 skipmul8 2929 f3d8 ;beq donemul8 might save cycles? 2930 f3d8 06 42 asl temp1 2931 f3da d0 f5 bne reptmul8 2932 f3dc donemul8 2933 f3dc 60 rts 2934 f3dd 2935 f3dd div8 2936 f3dd ; A=numerator Y=denominator, result in A 2937 f3dd c0 02 cpy #2 2938 f3df 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 2939 f3e1 84 42 sty temp1 2940 f3e3 a0 ff ldy #$ff 2941 f3e5 div8loop 2942 f3e5 e5 42 sbc temp1 2943 f3e7 c8 iny 2944 f3e8 b0 fb bcs div8loop 2945 f3ea div8end 2946 f3ea 98 tya 2947 f3eb ; result in A 2948 f3eb 60 rts 2949 f3ec 2950 f3ec ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 2951 f3ec mul16 2952 f3ec 84 42 sty temp1 2953 f3ee 85 43 sta temp2 2954 f3f0 2955 f3f0 a9 00 lda #0 2956 f3f2 a2 08 ldx #8 2957 f3f4 46 42 lsr temp1 2958 f3f6 mul16_1 2959 f3f6 90 03 bcc mul16_2 2960 f3f8 18 clc 2961 f3f9 65 43 adc temp2 2962 f3fb mul16_2 2963 f3fb 6a ror 2964 f3fc 66 42 ror temp1 2965 f3fe ca dex 2966 f3ff d0 f5 bne mul16_1 2967 f401 85 43 sta temp2 2968 f403 60 rts 2969 f404 2970 f404 ; div int/int 2971 f404 ; numerator in A, denom in temp1 2972 f404 ; returns with quotient in A, remainder in temp1 2973 f404 div16 2974 f404 85 43 sta temp2 2975 f406 84 42 sty temp1 2976 f408 a9 00 lda #0 2977 f40a a2 08 ldx #8 2978 f40c 06 43 asl temp2 2979 f40e div16_1 2980 f40e 2a rol 2981 f40f c5 42 cmp temp1 2982 f411 90 02 bcc div16_2 2983 f413 e5 42 sbc temp1 2984 f415 div16_2 2985 f415 26 43 rol temp2 2986 f417 ca dex 2987 f418 d0 f4 bne div16_1 2988 f41a 85 42 sta temp1 2989 f41c a5 43 lda temp2 2990 f41e 60 rts 2991 f41f 2992 f41f - ifconst bankswitchmode 2993 f41f -BS_jsr 2994 f41f - ifconst MCPDEVCART 2995 f41f - ora #$18 2996 f41f - sta $3000 2997 f41f - else 2998 f41f - sta $8000 2999 f41f - endif 3000 f41f - pla 3001 f41f - tax 3002 f41f - pla 3003 f41f - rts 3004 f41f - 3005 f41f -BS_return 3006 f41f - pla ; bankswitch bank 3007 f41f - ifconst BANKRAM 3008 f41f - sta currentbank 3009 f41f - ora currentrambank 3010 f41f - endif 3011 f41f - ifconst MCPDEVCART 3012 f41f - ora #$18 3013 f41f - sta $3000 3014 f41f - else 3015 f41f - sta $8000 3016 f41f - endif 3017 f41f - pla ; bankswitch $0 flag 3018 f41f - rts 3019 f41f endif 3020 f41f 3021 f41f checkselectswitch 3022 f41f ad 82 02 lda SWCHB ; first check the real select switch... 3023 f422 29 02 and #%00000010 3024 f424 ifnconst MOUSESUPPORT 3025 f424 f0 05 beq checkselectswitchreturn ; switch is pressed 3026 f426 ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 3027 f429 29 b0 and #%10110000 ; R_DU 3028 f42b endif ; MOUSESUPPORT 3029 f42b checkselectswitchreturn 3030 f42b 60 rts 3031 f42c 3032 f42c checkresetswitch 3033 f42c ad 82 02 lda SWCHB ; first check the real reset switch... 3034 f42f 29 01 and #%00000001 3035 f431 ifnconst MOUSESUPPORT 3036 f431 f0 05 beq checkresetswitchreturn ; switch is pressed 3037 f433 ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 3038 f436 29 70 and #%01110000 ; _LDU 3039 f438 endif ; MOUSESUPPORT 3040 f438 checkresetswitchreturn 3041 f438 60 rts 3042 f439 3043 f439 - ifconst FINESCROLLENABLED 3044 f439 -finescrolldlls 3045 f439 - ldx temp1 ; first DLL index x3 3046 f439 - lda DLLMEM,x 3047 f439 - and #%11110000 3048 f439 - ora finescrolly 3049 f439 - sta DLLMEM,x 3050 f439 - 3051 f439 - ldx temp2 ; last DLL index x3 3052 f439 - lda DLLMEM,x 3053 f439 - and #%11110000 3054 f439 - ora finescrolly 3055 f439 - eor #(WZONEHEIGHT-1) 3056 f439 - sta DLLMEM,x 3057 f439 - rts 3058 f439 endif ; FINESCROLLENABLED 3059 f439 3060 f439 - ifconst USED_ADJUSTVISIBLE 3061 f439 -adjustvisible 3062 f439 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 3063 f439 - jsr waitforvblankstart ; ensure vblank just started 3064 f439 - ldx visibleDLLstart 3065 f439 -findfirstinterrupt 3066 f439 - lda DLLMEM,x 3067 f439 - bmi foundfirstinterrupt 3068 f439 - inx 3069 f439 - inx 3070 f439 - inx 3071 f439 - bne findfirstinterrupt 3072 f439 -foundfirstinterrupt 3073 f439 - and #%01111111 ; clear the interrupt bit 3074 f439 - sta DLLMEM,x 3075 f439 - ifconst DOUBLEBUFFER 3076 f439 - sta DLLMEM+DBOFFSET,x 3077 f439 - endif ; DOUBLEBUFFER 3078 f439 - ldx overscanDLLstart 3079 f439 -findlastinterrupt 3080 f439 - lda DLLMEM,x 3081 f439 - bmi foundlastinterrupt 3082 f439 - dex 3083 f439 - dex 3084 f439 - dex 3085 f439 - bne findlastinterrupt 3086 f439 -foundlastinterrupt 3087 f439 - and #%01111111 ; clear the interrupt bit 3088 f439 - sta DLLMEM,x 3089 f439 - ifconst DOUBLEBUFFER 3090 f439 - sta DLLMEM+DBOFFSET,x 3091 f439 - endif ; DOUBLEBUFFER 3092 f439 - ;now we need to set the new interrupts 3093 f439 - clc 3094 f439 - lda temp1 3095 f439 - adc visibleDLLstart 3096 f439 - tax 3097 f439 - lda DLLMEM,x 3098 f439 - ora #%10000000 3099 f439 - sta DLLMEM,x 3100 f439 - ifconst DOUBLEBUFFER 3101 f439 - sta DLLMEM+DBOFFSET,x 3102 f439 - endif ; DOUBLEBUFFER 3103 f439 - clc 3104 f439 - lda temp2 3105 f439 - adc visibleDLLstart 3106 f439 - tax 3107 f439 - lda DLLMEM,x 3108 f439 - ora #%10000000 3109 f439 - sta DLLMEM,x 3110 f439 - ifconst DOUBLEBUFFER 3111 f439 - sta DLLMEM+DBOFFSET,x 3112 f439 - endif ; DOUBLEBUFFER 3113 f439 - jsr vblankresync 3114 f439 - rts 3115 f439 endif ; USED_ADJUSTVISIBLE 3116 f439 3117 f439 vblankresync 3118 f439 20 d7 f4 jsr waitforvblankstart ; ensure vblank just started 3119 f43c a9 00 lda #0 3120 f43e 85 4d sta visibleover 3121 f440 a9 03 lda #3 3122 f442 8d b2 01 sta interruptindex 3123 f445 60 rts 3124 f446 3125 f446 createallgamedlls 3126 f446 a2 00 ldx #0 3127 f448 a9 19 lda #NVLINES 3128 f44a ac 09 21 ldy paldetected 3129 f44d f0 03 beq skipcreatePALpadding 3130 f44f 18 clc 3131 f450 69 15 adc #21 3132 f452 skipcreatePALpadding 3133 f452 20 87 f4 jsr createnonvisibledlls 3134 f455 8e 3c 21 stx visibleDLLstart 3135 f458 20 b8 f4 jsr createvisiblezones 3136 f45b 8e 3d 21 stx overscanDLLstart 3137 f45e createallgamedllscontinue 3138 f45e a9 50 lda #(NVLINES+55) ; extras for PAL 3139 f460 20 87 f4 jsr createnonvisibledlls 3140 f463 3141 f463 ae 3c 21 ldx visibleDLLstart 3142 f466 bd 00 18 lda DLLMEM,x 3143 f469 09 80 ora #%10000000 ; NMI 1 - start of visible screen 3144 f46b 9d 00 18 sta DLLMEM,x 3145 f46e - ifconst DOUBLEBUFFER 3146 f46e - sta DLLMEM+DBOFFSET,x 3147 f46e endif ; DOUBLEBUFFER 3148 f46e 3149 f46e ae 3d 21 ldx overscanDLLstart 3150 f471 bd 00 18 lda DLLMEM,x 3151 f474 09 83 ora #%10000011 ; NMI 2 - end of visible screen 3152 f476 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 3153 f478 9d 00 18 sta DLLMEM,x 3154 f47b - ifconst DOUBLEBUFFER 3155 f47b - sta DLLMEM+DBOFFSET,x 3156 f47b endif ; DOUBLEBUFFER 3157 f47b 3158 f47b e8 inx 3159 f47c e8 inx 3160 f47d e8 inx 3161 f47e 3162 f47e bd 00 18 lda DLLMEM,x 3163 f481 09 80 ora #%10000000 ; NMI 3 - deeper overscan 3164 f483 9d 00 18 sta DLLMEM,x 3165 f486 - ifconst DOUBLEBUFFER 3166 f486 - sta DLLMEM+DBOFFSET,x 3167 f486 endif ; DOUBLEBUFFER 3168 f486 3169 f486 60 rts 3170 f487 3171 f487 createnonvisibledlls 3172 f487 85 42 sta temp1 3173 f489 4a lsr 3174 f48a 4a lsr 3175 f48b 4a lsr 3176 f48c 4a lsr ; /16 3177 f48d f0 09 beq skipcreatenonvisibledlls1loop 3178 f48f a8 tay 3179 f490 createnonvisibledlls1loop 3180 f490 a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 3181 f492 20 a7 f4 jsr createblankdllentry 3182 f495 88 dey 3183 f496 d0 f8 bne createnonvisibledlls1loop 3184 f498 skipcreatenonvisibledlls1loop 3185 f498 a5 42 lda temp1 3186 f49a 29 0f and #%00001111 3187 f49c f0 08 beq createnonvisibledllsreturn 3188 f49e 38 sec 3189 f49f e9 01 sbc #1 3190 f4a1 09 40 ora #%01000000 3191 f4a3 20 a7 f4 jsr createblankdllentry 3192 f4a6 createnonvisibledllsreturn 3193 f4a6 60 rts 3194 f4a7 3195 f4a7 createblankdllentry 3196 f4a7 9d 00 18 sta DLLMEM,x 3197 f4aa - ifconst DOUBLEBUFFER 3198 f4aa - sta DLLMEM+DBOFFSET,x 3199 f4aa endif ; DOUBLEBUFFER 3200 f4aa e8 inx 3201 f4ab a9 21 lda #$21 ; blank 3202 f4ad 9d 00 18 sta DLLMEM,x 3203 f4b0 - ifconst DOUBLEBUFFER 3204 f4b0 - sta DLLMEM+DBOFFSET,x 3205 f4b0 endif ; DOUBLEBUFFER 3206 f4b0 e8 inx 3207 f4b1 a9 00 lda #$00 3208 f4b3 9d 00 18 sta DLLMEM,x 3209 f4b6 - ifconst DOUBLEBUFFER 3210 f4b6 - sta DLLMEM+DBOFFSET,x 3211 f4b6 endif ; DOUBLEBUFFER 3212 f4b6 e8 inx 3213 f4b7 60 rts 3214 f4b8 3215 f4b8 createvisiblezones 3216 f4b8 a0 00 ldy #0 3217 f4ba createvisiblezonesloop 3218 f4ba b9 ff f5 lda.w DLHEIGHT,y 3219 f4bd 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 3220 f4bf 9d 00 18 sta DLLMEM,x 3221 f4c2 - ifconst DOUBLEBUFFER 3222 f4c2 - sta DLLMEM+DBOFFSET,x 3223 f4c2 endif ; DOUBLEBUFFER 3224 f4c2 e8 inx 3225 f4c3 b9 cf f5 lda DLPOINTH,y 3226 f4c6 9d 00 18 sta DLLMEM,x 3227 f4c9 - ifconst DOUBLEBUFFER 3228 f4c9 - sta DLLMEM+DBOFFSET,x 3229 f4c9 endif ; DOUBLEBUFFER 3230 f4c9 e8 inx 3231 f4ca b9 e7 f5 lda DLPOINTL,y 3232 f4cd 9d 00 18 sta DLLMEM,x 3233 f4d0 - ifconst DOUBLEBUFFER 3234 f4d0 - clc 3235 f4d0 - adc #DOUBLEBUFFEROFFSET 3236 f4d0 - sta DLLMEM+DBOFFSET,x 3237 f4d0 - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 3238 f4d0 - inc DLLMEM+DBOFFSET-1,x 3239 f4d0 -skiphidoublebufferadjust 3240 f4d0 endif ; DOUBLEBUFFER 3241 f4d0 e8 inx 3242 f4d1 c8 iny 3243 f4d2 c0 18 cpy #WZONECOUNT 3244 f4d4 d0 e4 bne createvisiblezonesloop 3245 f4d6 60 rts 3246 f4d7 3247 f4d7 waitforvblankstart 3248 f4d7 visibleoverwait 3249 f4d7 24 28 BIT MSTAT 3250 f4d9 10 fc bpl visibleoverwait 3251 f4db vblankstartwait 3252 f4db 24 28 BIT MSTAT 3253 f4dd 30 fc bmi vblankstartwait 3254 f4df 60 rts 3255 f4e0 3256 f4e0 - ifconst DOUBLEBUFFER 3257 f4e0 -flipdisplaybufferreturn 3258 f4e0 - rts 3259 f4e0 -flipdisplaybuffer 3260 f4e0 - lda doublebufferstate 3261 f4e0 - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 3262 f4e0 - 3263 f4e0 - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 3264 f4e0 - 3265 f4e0 - lda doublebufferstate 3266 f4e0 - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 3267 f4e0 - tax 3268 f4e0 - 3269 f4e0 - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 3270 f4e0 - 3271 f4e0 -flipdisplaybufferwait1 3272 f4e0 - lda visibleover 3273 f4e0 - beq flipdisplaybufferwait1 3274 f4e0 - 3275 f4e0 -flipdisplaybufferwait 3276 f4e0 - lda visibleover 3277 f4e0 - bne flipdisplaybufferwait 3278 f4e0 - 3279 f4e0 - lda doublebufferminimumframetarget 3280 f4e0 - beq skipminimumframecode 3281 f4e0 - lda doublebufferminimumframeindex 3282 f4e0 - bne flipdisplaybufferwait1 3283 f4e0 - lda doublebufferminimumframetarget 3284 f4e0 - sta doublebufferminimumframeindex 3285 f4e0 -skipminimumframecode 3286 f4e0 - 3287 f4e0 - lda DLLMEMLutHi,x 3288 f4e0 - sta DPPH 3289 f4e0 - lda DLLMEMLutLo,x 3290 f4e0 - sta DPPL 3291 f4e0 - 3292 f4e0 - lda NewPageflipstate,x 3293 f4e0 - sta doublebufferstate 3294 f4e0 - lda NewPageflipoffset,x 3295 f4e0 - sta doublebufferdloffset 3296 f4e0 - 3297 f4e0 - lda doublebufferbufferdirty 3298 f4e0 - beq flipdisplaybufferreturn 3299 f4e0 - 3300 f4e0 - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 3301 f4e0 - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 3302 f4e0 - ; from the displayed buffer to the working buffer... 3303 f4e0 - 3304 f4e0 - lda doublebufferdloffset 3305 f4e0 - eor #DOUBLEBUFFEROFFSET 3306 f4e0 - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 3307 f4e0 - 3308 f4e0 - ldx #(WZONECOUNT-1) 3309 f4e0 -copybufferzoneloop 3310 f4e0 - 3311 f4e0 - lda DLPOINTL,x 3312 f4e0 - clc 3313 f4e0 - adc doublebufferdloffset 3314 f4e0 - sta temp1 3315 f4e0 - lda DLPOINTH,x 3316 f4e0 - adc #0 3317 f4e0 - sta temp2 3318 f4e0 - 3319 f4e0 - lda DLPOINTL,x 3320 f4e0 - clc 3321 f4e0 - adc temp6 3322 f4e0 - sta temp3 3323 f4e0 - lda DLPOINTH,x 3324 f4e0 - adc #0 3325 f4e0 - sta temp4 3326 f4e0 - 3327 f4e0 - lda dlendsave,x 3328 f4e0 - tay 3329 f4e0 -copybuffercharsloop 3330 f4e0 - lda (temp3),y 3331 f4e0 - sta (temp1),y 3332 f4e0 - dey 3333 f4e0 - bpl copybuffercharsloop 3334 f4e0 - dex 3335 f4e0 - bpl copybufferzoneloop 3336 f4e0 - lda #0 3337 f4e0 - sta doublebufferbufferdirty 3338 f4e0 - rts 3339 f4e0 - 3340 f4e0 -doublebufferoff 3341 f4e0 - lda #1 3342 f4e0 - sta doublebufferstate 3343 f4e0 - jsr flipdisplaybuffer 3344 f4e0 - lda #0 3345 f4e0 - sta doublebufferstate 3346 f4e0 - sta doublebufferdloffset 3347 f4e0 - rts 3348 f4e0 - 3349 f4e0 -DLLMEMLutLo 3350 f4e0 - .byte DLLMEM,>(DLLMEM+DBOFFSET) 3353 f4e0 -NewPageflipstate 3354 f4e0 - .byte 3,1 3355 f4e0 -NewPageflipoffset 3356 f4e0 - .byte DOUBLEBUFFEROFFSET,0 3357 f4e0 - 3358 f4e0 endif ; DOUBLEBUFFER 3359 f4e0 3360 f4e0 - ifconst MOUSESUPPORT 3361 f4e0 - ifnconst DRIVINGSUPPORT 3362 f4e0 -rotationalcompare 3363 f4e0 - ; new=00, old=xx 3364 f4e0 - .byte $00, $01, $ff, $00 3365 f4e0 - ; new=01, old=xx 3366 f4e0 - .byte $ff, $00, $00, $01 3367 f4e0 - ; new=10, old=xx 3368 f4e0 - .byte $01, $00, $00, $ff 3369 f4e0 - ; new=11, old=xx 3370 f4e0 - .byte $00, $ff, $01, $00 3371 f4e0 - endif 3372 f4e0 - 3373 f4e0 - ; 0000YyXx st mouse 3374 f4e0 - ; 0000xyXY amiga mouse 3375 f4e0 -amigatoataribits ; swap bits 1 and 4... 3376 f4e0 - .byte %00000000, %00001000, %00000010, %00001010 3377 f4e0 - .byte %00000100, %00001100, %00000110, %00001110 3378 f4e0 - .byte %00000001, %00001001, %00000011, %00001011 3379 f4e0 - .byte %00000101, %00001101, %00000111, %00001111 3380 f4e0 - 3381 f4e0 -mouseupdate 3382 f4e0 - ;LONGDEBUG = 1 3383 f4e0 - lda SWCHA 3384 f4e0 - and #$0f 3385 f4e0 - sta inttemp2 3386 f4e0 - lda SWCHA 3387 f4e0 - lsr 3388 f4e0 - lsr 3389 f4e0 - lsr 3390 f4e0 - lsr 3391 f4e0 - sta inttemp1 3392 f4e0 - 3393 f4e0 - lda port0control,x 3394 f4e0 - cmp #8 ; st mouse 3395 f4e0 - beq domousecontrol 3396 f4e0 - cmp #9 ; amiga mouse 3397 f4e0 - bne skipmousecontrol 3398 f4e0 - ; st mice encode on different bits/joystick-lines than amiga mice... 3399 f4e0 - ; 0000YyXx st mouse 3400 f4e0 - ; 0000xyXY amiga mouse 3401 f4e0 - ; ...so can shuffle the amiga bits to reuse the st driver. 3402 f4e0 - lda inttemp1,x 3403 f4e0 - tay 3404 f4e0 - lda amigatoataribits,y 3405 f4e0 - sta inttemp1,x 3406 f4e0 -domousecontrol 3407 f4e0 - ;port X has a mouse enabled 3408 f4e0 - lda inttemp1,x 3409 f4e0 - and #%00000011 3410 f4e0 - asl 3411 f4e0 - asl 3412 f4e0 - ora mousecodex0,x 3413 f4e0 - and #%00001111 3414 f4e0 - tay 3415 f4e0 - lda rotationalcompare,y 3416 f4e0 - clc 3417 f4e0 - adc mousex0,x 3418 f4e0 - sta mousex0,x 3419 f4e0 - tya 3420 f4e0 - lsr 3421 f4e0 - lsr 3422 f4e0 - sta mousecodex0,x 3423 f4e0 - 3424 f4e0 - lda inttemp1,x 3425 f4e0 - and #%00001100 3426 f4e0 - ora mousecodey0,x 3427 f4e0 - and #%00001111 3428 f4e0 - tay 3429 f4e0 - lda rotationalcompare,y 3430 f4e0 - asl ; *2 for y axis, since it has ~double the resolution of x 3431 f4e0 - clc 3432 f4e0 - adc mousey0,x 3433 f4e0 - sta mousey0,x 3434 f4e0 - tya 3435 f4e0 - lsr 3436 f4e0 - lsr 3437 f4e0 - sta mousecodey0,x 3438 f4e0 -skipmousecontrol 3439 f4e0 - jmp longreadloopreturn 3440 f4e0 endif ; MOUSESUPPORT 3441 f4e0 3442 f4e0 mousebuttonhandler ; outside of conditional, so button handler entry in LUT is valid 3443 f4e0 - ifconst MOUSESUPPORT 3444 f4e0 - ; stick the mouse buttons in the correct shadow register... 3445 f4e0 - txa 3446 f4e0 - asl 3447 f4e0 - tay ; y=x*2 3448 f4e0 - lda INPT1,y 3449 f4e0 - eor #%10000000 3450 f4e0 - lsr 3451 f4e0 - sta sINPT1,x 3452 f4e0 - 3453 f4e0 - lda INPT4,x 3454 f4e0 - and #%10000000 3455 f4e0 - eor #%10000000 3456 f4e0 - ora sINPT1,x 3457 f4e0 - sta sINPT1,x 3458 f4e0 - jmp buttonreadloopreturn 3459 f4e0 endif ; MOUSESUPPORT 3460 f4e0 3461 f4e0 - ifconst DRIVINGSUPPORT 3462 f4e0 -rotationalcompare 3463 f4e0 - ; new=00, old=xx 3464 f4e0 - .byte $00, $01, $ff, $00 3465 f4e0 - ; new=01, old=xx 3466 f4e0 - .byte $ff, $00, $00, $01 3467 f4e0 - ; new=10, old=xx 3468 f4e0 - .byte $01, $00, $00, $ff 3469 f4e0 - ; new=11, old=xx 3470 f4e0 - .byte $00, $ff, $01, $00 3471 f4e0 -drivingupdate 3472 f4e0 - ldx #1 3473 f4e0 - lda port1control 3474 f4e0 - cmp #6 ; check if port1=driving 3475 f4e0 - bne skipfirstdrivingcontrol 3476 f4e0 - lda SWCHA 3477 f4e0 - and #%00000011 3478 f4e0 - asl 3479 f4e0 - asl 3480 f4e0 -drivingupdateloop 3481 f4e0 - ora controller0statesave,x 3482 f4e0 - tay 3483 f4e0 - lda rotationalcompare,y 3484 f4e0 - clc 3485 f4e0 - adc drivingposition0,x 3486 f4e0 - sta drivingposition0,x 3487 f4e0 - tya 3488 f4e0 - lsr 3489 f4e0 - lsr 3490 f4e0 - sta controller0statesave,x 3491 f4e0 -skipfirstdrivingcontrol 3492 f4e0 - lda port0control 3493 f4e0 - cmp #6 ; check if port0=driving 3494 f4e0 - bne drivingcontrolsloopdone 3495 f4e0 - lda SWCHA 3496 f4e0 - and #%00110000 3497 f4e0 - lsr 3498 f4e0 - lsr 3499 f4e0 - dex 3500 f4e0 - bpl drivingupdateloop 3501 f4e0 -drivingcontrolsloopdone 3502 f4e0 - rts 3503 f4e0 endif ; DRIVINGSUPPORT 3504 f4e0 3505 f4e0 - ifconst KEYPADSUPPORT 3506 f4e0 - ; ** select keypad rows 0 to 3 over 4 frames... 3507 f4e0 -keypadrowselect 3508 f4e0 - ldy #0 3509 f4e0 - lda port0control 3510 f4e0 - cmp #7 3511 f4e0 - bne skipport0val 3512 f4e0 - iny ; y=y+1 3513 f4e0 -skipport0val 3514 f4e0 - lda port1control 3515 f4e0 - cmp #7 3516 f4e0 - bne skipport1val 3517 f4e0 - iny 3518 f4e0 - iny ; y=y+2 3519 f4e0 -skipport1val 3520 f4e0 - lda keyrowdirectionmask,y 3521 f4e0 - sta CTLSWA 3522 f4e0 - tya 3523 f4e0 - asl 3524 f4e0 - asl 3525 f4e0 - sta inttemp1 3526 f4e0 - lda framecounter 3527 f4e0 - and #3 3528 f4e0 - ora inttemp1 3529 f4e0 - tax 3530 f4e0 - lda keyrowselectvalue,x 3531 f4e0 - sta SWCHA 3532 f4e0 - rts 3533 f4e0 - 3534 f4e0 -keyrowdirectionmask 3535 f4e0 - .byte #%00000000 ; 0 : port0=input port1=input 3536 f4e0 - .byte #%11110000 ; 1 : port0=output port1=input 3537 f4e0 - .byte #%00001111 ; 2 : port0=input port1=output 3538 f4e0 - .byte #%11111111 ; 3 : port0=output port1=output 3539 f4e0 - 3540 f4e0 -keyrowselectvalue 3541 f4e0 - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 3542 f4e0 - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 3543 f4e0 - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 3544 f4e0 - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 3545 f4e0 endif ; KEYPADSUPPORT 3546 f4e0 3547 f4e0 - ifconst KEYPADSUPPORT 3548 f4e0 -keypadcolumnread 3549 f4e0 - lda framecounter 3550 f4e0 - and #3 3551 f4e0 - asl ; x2 because keypad variables are interleaved 3552 f4e0 - tax 3553 f4e0 - 3554 f4e0 - lda #0 3555 f4e0 - sta keypadmatrix0a,x 3556 f4e0 - sta keypadmatrix1a,x 3557 f4e0 - 3558 f4e0 - lda INPT0 3559 f4e0 - cmp #$80 3560 f4e0 - rol keypadmatrix0a,x 3561 f4e0 - lda INPT1 3562 f4e0 - cmp #$80 3563 f4e0 - rol keypadmatrix0a,x 3564 f4e0 - lda INPT4 3565 f4e0 - cmp #$80 3566 f4e0 - rol keypadmatrix0a,x 3567 f4e0 - lda keypadmatrix0a,x 3568 f4e0 - eor #%00000111 3569 f4e0 - sta keypadmatrix0a,x 3570 f4e0 - 3571 f4e0 - rol keypadmatrix1a,x 3572 f4e0 - lda INPT2 3573 f4e0 - cmp #$80 3574 f4e0 - rol keypadmatrix1a,x 3575 f4e0 - lda INPT3 3576 f4e0 - cmp #$80 3577 f4e0 - rol keypadmatrix1a,x 3578 f4e0 - lda INPT5 3579 f4e0 - cmp #$80 3580 f4e0 - rol keypadmatrix1a,x 3581 f4e0 - lda keypadmatrix1a,x 3582 f4e0 - eor #%00000111 3583 f4e0 - sta keypadmatrix1a,x 3584 f4e0 - 3585 f4e0 - rts 3586 f4e0 endif ; KEYPADSUPPORT 3587 f4e0 3588 f4e0 setportforinput 3589 f4e0 a5 e4 lda CTLSWAs 3590 f4e2 3d eb f4 and allpinsinputlut,x 3591 f4e5 85 e4 sta CTLSWAs 3592 f4e7 8d 81 02 sta CTLSWA 3593 f4ea 60 rts 3594 f4eb 3595 f4eb allpinsinputlut 3596 f4eb 0f f0 .byte.b $0F, $F0 3597 f4ed 3598 f4ed setonebuttonmode 3599 f4ed a9 14 lda #$14 3600 f4ef 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 3601 f4f2 a5 e5 lda CTLSWBs 3602 f4f4 1d fd f4 ora thisjoy2buttonbit,x 3603 f4f7 85 e5 sta CTLSWBs 3604 f4f9 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 3605 f4fc 60 rts 3606 f4fd 3607 f4fd thisjoy2buttonbit 3608 f4fd 04 10 .byte.b $04, $10 3609 f4ff 3610 f4ff settwobuttonmode 3611 f4ff a9 14 lda #$14 3612 f501 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 3613 f504 a5 e5 lda CTLSWBs 3614 f506 3d 0f f5 and thisjoy2buttonmask,x 3615 f509 85 e5 sta CTLSWBs 3616 f50b 8d 82 02 sta SWCHB 3617 f50e 60 rts 3618 f50f 3619 f50f thisjoy2buttonmask 3620 f50f fb ef .byte.b $fb, $ef 3621 f511 3622 f511 ; Provided under the CC0 license. See the included LICENSE.txt for details. 3623 f511 3624 f511 START 3625 f511 start 3626 f511 3627 f511 ;******** more or less the Atari recommended startup procedure 3628 f511 3629 f511 78 sei 3630 f512 d8 cld 3631 f513 3632 f513 ifnconst NOTIALOCK 3633 f513 a9 07 lda #$07 3634 f515 - else 3635 f515 - lda #$06 3636 f515 endif 3637 f515 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 3638 f517 a9 7f lda #$7F 3639 f519 85 3c sta CTRL ;disable DMA 3640 f51b a9 00 lda #$00 3641 f51d 85 38 sta OFFSET 3642 f51f ifnconst NOTIALOCK 3643 f51f 85 01 sta INPTCTRL 3644 f521 endif 3645 f521 a2 ff ldx #$FF 3646 f523 9a txs 3647 f524 3648 f524 ;************** Clear Memory 3649 f524 3650 f524 a2 40 ldx #$40 3651 f526 a9 00 lda #$00 3652 f528 crloop1 3653 f528 95 00 sta $00,x ;Clear zero page 3654 f52a 9d 00 01 sta $100,x ;Clear page 1 3655 f52d e8 inx 3656 f52e d0 f8 bne crloop1 3657 f530 3658 f530 3659 f530 a0 00 ldy #$00 ;Clear Ram 3660 f532 a9 18 lda #$18 ;Start at $1800 3661 f534 85 81 sta $81 3662 f536 a9 00 lda #$00 3663 f538 85 80 sta $80 3664 f53a crloop3 3665 f53a a9 00 lda #$00 3666 f53c 91 80 sta ($80),y ;Store data 3667 f53e c8 iny ;Next byte 3668 f53f d0 f9 bne crloop3 ;Branch if not done page 3669 f541 e6 81 inc $81 ;Next page 3670 f543 a5 81 lda $81 3671 f545 c9 20 cmp #$20 ;End at $1FFF 3672 f547 d0 f1 bne crloop3 ;Branch if not 3673 f549 3674 f549 a0 00 ldy #$00 ;Clear Ram 3675 f54b a9 22 lda #$22 ;Start at $2200 3676 f54d 85 81 sta $81 3677 f54f a9 00 lda #$00 3678 f551 85 80 sta $80 3679 f553 crloop4 3680 f553 a9 00 lda #$00 3681 f555 91 80 sta ($80),y ;Store data 3682 f557 c8 iny ;Next byte 3683 f558 d0 f9 bne crloop4 ;Branch if not done page 3684 f55a e6 81 inc $81 ;Next page 3685 f55c a5 81 lda $81 3686 f55e c9 27 cmp #$27 ;End at $27FF 3687 f560 d0 f1 bne crloop4 ;Branch if not 3688 f562 3689 f562 a2 00 ldx #$00 3690 f564 a9 00 lda #$00 3691 f566 crloop5 ;Clear 2100-213F, 2000-203F 3692 f566 9d 00 20 sta $2000,x 3693 f569 9d 00 21 sta $2100,x 3694 f56c e8 inx 3695 f56d e0 40 cpx #$40 3696 f56f d0 f5 bne crloop5 3697 f571 3698 f571 85 80 sta $80 3699 f573 85 81 sta $81 3700 f575 85 82 sta $82 3701 f577 85 83 sta $83 3702 f579 3703 f579 ;seed random number with hopefully-random timer value 3704 f579 a9 01 lda #1 3705 f57b 0d 84 02 ora INTIM 3706 f57e 85 40 sta rand 3707 f580 3708 f580 ; detect the console type... 3709 f580 pndetectvblankstart 3710 f580 a5 28 lda MSTAT 3711 f582 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 3712 f584 pndetectvblankover 3713 f584 a5 28 lda MSTAT 3714 f586 30 fc bmi pndetectvblankover ; then wait for it to be over 3715 f588 a0 00 ldy #$00 3716 f58a a2 00 ldx #$00 3717 f58c pndetectvblankhappening 3718 f58c a5 28 lda MSTAT 3719 f58e 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 3720 f590 85 24 sta WSYNC 3721 f592 85 24 sta WSYNC 3722 f594 e8 inx 3723 f595 d0 f5 bne pndetectvblankhappening 3724 f597 pndetectinvblank 3725 f597 e0 7d cpx #125 3726 f599 90 02 bcc pndetecispal 3727 f59b a0 01 ldy #$01 3728 f59d pndetecispal 3729 f59d 8c 09 21 sty paldetected 3730 f5a0 3731 f5a0 20 46 f4 jsr createallgamedlls 3732 f5a3 3733 f5a3 a9 18 lda #>DLLMEM 3734 f5a5 85 2c sta DPPH 3735 f5a7 a9 00 lda # 255 3919 f5cf -DOUBLEBUFFEROFFSET = 255 3920 f5cf else 3921 f5cf 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 3922 f5cf endif 3923 f5cf 3924 f5cf - ifconst EXTRADLMEMORY 3925 f5cf -SECONDDLHALFSTART SET $2300 3926 f5cf endif 3927 f5cf 3928 f5cf DLPOINTH 3929 f5cf DLINDEX SET 0 3930 f5cf REPEAT WZONECOUNT 3931 f5cf TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5cf - ifconst EXTRADLMEMORY 3933 f5cf - if TMPMEMADDRESS > $1FFF 3934 f5cf -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5cf - else 3936 f5cf - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5cf -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5cf -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5cf - endif 3940 f5cf - endif ; TMPMEMADDRESS > $1FFF 3941 f5cf endif ; EXTRADLMEMORY 3942 f5cf ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5cf 18 .byte.b >TMPMEMADDRESS 3944 f5cf DLINDEX SET DLINDEX + 1 3930 f5cf REPEND 3931 f5cf TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d0 - ifconst EXTRADLMEMORY 3933 f5d0 - if TMPMEMADDRESS > $1FFF 3934 f5d0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d0 - else 3936 f5d0 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d0 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d0 - endif 3940 f5d0 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d0 endif ; EXTRADLMEMORY 3942 f5d0 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d0 18 .byte.b >TMPMEMADDRESS 3944 f5d0 DLINDEX SET DLINDEX + 1 3930 f5d0 REPEND 3931 f5d0 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d1 - ifconst EXTRADLMEMORY 3933 f5d1 - if TMPMEMADDRESS > $1FFF 3934 f5d1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d1 - else 3936 f5d1 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d1 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d1 - endif 3940 f5d1 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d1 endif ; EXTRADLMEMORY 3942 f5d1 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d1 19 .byte.b >TMPMEMADDRESS 3944 f5d1 DLINDEX SET DLINDEX + 1 3930 f5d1 REPEND 3931 f5d1 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d2 - ifconst EXTRADLMEMORY 3933 f5d2 - if TMPMEMADDRESS > $1FFF 3934 f5d2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d2 - else 3936 f5d2 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d2 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d2 - endif 3940 f5d2 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d2 endif ; EXTRADLMEMORY 3942 f5d2 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d2 19 .byte.b >TMPMEMADDRESS 3944 f5d2 DLINDEX SET DLINDEX + 1 3930 f5d2 REPEND 3931 f5d2 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d3 - ifconst EXTRADLMEMORY 3933 f5d3 - if TMPMEMADDRESS > $1FFF 3934 f5d3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d3 - else 3936 f5d3 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d3 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d3 - endif 3940 f5d3 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d3 endif ; EXTRADLMEMORY 3942 f5d3 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d3 19 .byte.b >TMPMEMADDRESS 3944 f5d3 DLINDEX SET DLINDEX + 1 3930 f5d3 REPEND 3931 f5d3 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d4 - ifconst EXTRADLMEMORY 3933 f5d4 - if TMPMEMADDRESS > $1FFF 3934 f5d4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d4 - else 3936 f5d4 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d4 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d4 - endif 3940 f5d4 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d4 endif ; EXTRADLMEMORY 3942 f5d4 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d4 1a .byte.b >TMPMEMADDRESS 3944 f5d4 DLINDEX SET DLINDEX + 1 3930 f5d4 REPEND 3931 f5d4 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d5 - ifconst EXTRADLMEMORY 3933 f5d5 - if TMPMEMADDRESS > $1FFF 3934 f5d5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d5 - else 3936 f5d5 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d5 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d5 - endif 3940 f5d5 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d5 endif ; EXTRADLMEMORY 3942 f5d5 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d5 1a .byte.b >TMPMEMADDRESS 3944 f5d5 DLINDEX SET DLINDEX + 1 3930 f5d5 REPEND 3931 f5d5 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d6 - ifconst EXTRADLMEMORY 3933 f5d6 - if TMPMEMADDRESS > $1FFF 3934 f5d6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d6 - else 3936 f5d6 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d6 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d6 - endif 3940 f5d6 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d6 endif ; EXTRADLMEMORY 3942 f5d6 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d6 1a .byte.b >TMPMEMADDRESS 3944 f5d6 DLINDEX SET DLINDEX + 1 3930 f5d6 REPEND 3931 f5d6 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d7 - ifconst EXTRADLMEMORY 3933 f5d7 - if TMPMEMADDRESS > $1FFF 3934 f5d7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d7 - else 3936 f5d7 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d7 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d7 - endif 3940 f5d7 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d7 endif ; EXTRADLMEMORY 3942 f5d7 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d7 1b .byte.b >TMPMEMADDRESS 3944 f5d7 DLINDEX SET DLINDEX + 1 3930 f5d7 REPEND 3931 f5d7 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d8 - ifconst EXTRADLMEMORY 3933 f5d8 - if TMPMEMADDRESS > $1FFF 3934 f5d8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d8 - else 3936 f5d8 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d8 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d8 - endif 3940 f5d8 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d8 endif ; EXTRADLMEMORY 3942 f5d8 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d8 1b .byte.b >TMPMEMADDRESS 3944 f5d8 DLINDEX SET DLINDEX + 1 3930 f5d8 REPEND 3931 f5d8 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5d9 - ifconst EXTRADLMEMORY 3933 f5d9 - if TMPMEMADDRESS > $1FFF 3934 f5d9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5d9 - else 3936 f5d9 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5d9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5d9 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5d9 - endif 3940 f5d9 - endif ; TMPMEMADDRESS > $1FFF 3941 f5d9 endif ; EXTRADLMEMORY 3942 f5d9 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5d9 1b .byte.b >TMPMEMADDRESS 3944 f5d9 DLINDEX SET DLINDEX + 1 3930 f5d9 REPEND 3931 f5d9 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5da - ifconst EXTRADLMEMORY 3933 f5da - if TMPMEMADDRESS > $1FFF 3934 f5da -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5da - else 3936 f5da - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5da -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5da -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5da - endif 3940 f5da - endif ; TMPMEMADDRESS > $1FFF 3941 f5da endif ; EXTRADLMEMORY 3942 f5da ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5da 1b .byte.b >TMPMEMADDRESS 3944 f5da DLINDEX SET DLINDEX + 1 3930 f5da REPEND 3931 f5da TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5db - ifconst EXTRADLMEMORY 3933 f5db - if TMPMEMADDRESS > $1FFF 3934 f5db -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5db - else 3936 f5db - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5db -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5db -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5db - endif 3940 f5db - endif ; TMPMEMADDRESS > $1FFF 3941 f5db endif ; EXTRADLMEMORY 3942 f5db ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5db 1c .byte.b >TMPMEMADDRESS 3944 f5db DLINDEX SET DLINDEX + 1 3930 f5db REPEND 3931 f5db TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5dc - ifconst EXTRADLMEMORY 3933 f5dc - if TMPMEMADDRESS > $1FFF 3934 f5dc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5dc - else 3936 f5dc - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5dc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5dc -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5dc - endif 3940 f5dc - endif ; TMPMEMADDRESS > $1FFF 3941 f5dc endif ; EXTRADLMEMORY 3942 f5dc ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5dc 1c .byte.b >TMPMEMADDRESS 3944 f5dc DLINDEX SET DLINDEX + 1 3930 f5dc REPEND 3931 f5dc TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5dd - ifconst EXTRADLMEMORY 3933 f5dd - if TMPMEMADDRESS > $1FFF 3934 f5dd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5dd - else 3936 f5dd - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5dd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5dd -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5dd - endif 3940 f5dd - endif ; TMPMEMADDRESS > $1FFF 3941 f5dd endif ; EXTRADLMEMORY 3942 f5dd ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5dd 1c .byte.b >TMPMEMADDRESS 3944 f5dd DLINDEX SET DLINDEX + 1 3930 f5dd REPEND 3931 f5dd TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5de - ifconst EXTRADLMEMORY 3933 f5de - if TMPMEMADDRESS > $1FFF 3934 f5de -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5de - else 3936 f5de - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5de -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5de -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5de - endif 3940 f5de - endif ; TMPMEMADDRESS > $1FFF 3941 f5de endif ; EXTRADLMEMORY 3942 f5de ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5de 1d .byte.b >TMPMEMADDRESS 3944 f5de DLINDEX SET DLINDEX + 1 3930 f5de REPEND 3931 f5de TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5df - ifconst EXTRADLMEMORY 3933 f5df - if TMPMEMADDRESS > $1FFF 3934 f5df -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5df - else 3936 f5df - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5df -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5df -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5df - endif 3940 f5df - endif ; TMPMEMADDRESS > $1FFF 3941 f5df endif ; EXTRADLMEMORY 3942 f5df ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5df 1d .byte.b >TMPMEMADDRESS 3944 f5df DLINDEX SET DLINDEX + 1 3930 f5df REPEND 3931 f5df TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e0 - ifconst EXTRADLMEMORY 3933 f5e0 - if TMPMEMADDRESS > $1FFF 3934 f5e0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e0 - else 3936 f5e0 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e0 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e0 - endif 3940 f5e0 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e0 endif ; EXTRADLMEMORY 3942 f5e0 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e0 1d .byte.b >TMPMEMADDRESS 3944 f5e0 DLINDEX SET DLINDEX + 1 3930 f5e0 REPEND 3931 f5e0 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e1 - ifconst EXTRADLMEMORY 3933 f5e1 - if TMPMEMADDRESS > $1FFF 3934 f5e1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e1 - else 3936 f5e1 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e1 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e1 - endif 3940 f5e1 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e1 endif ; EXTRADLMEMORY 3942 f5e1 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e1 1e .byte.b >TMPMEMADDRESS 3944 f5e1 DLINDEX SET DLINDEX + 1 3930 f5e1 REPEND 3931 f5e1 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e2 - ifconst EXTRADLMEMORY 3933 f5e2 - if TMPMEMADDRESS > $1FFF 3934 f5e2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e2 - else 3936 f5e2 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e2 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e2 - endif 3940 f5e2 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e2 endif ; EXTRADLMEMORY 3942 f5e2 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e2 1e .byte.b >TMPMEMADDRESS 3944 f5e2 DLINDEX SET DLINDEX + 1 3930 f5e2 REPEND 3931 f5e2 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e3 - ifconst EXTRADLMEMORY 3933 f5e3 - if TMPMEMADDRESS > $1FFF 3934 f5e3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e3 - else 3936 f5e3 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e3 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e3 - endif 3940 f5e3 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e3 endif ; EXTRADLMEMORY 3942 f5e3 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e3 1e .byte.b >TMPMEMADDRESS 3944 f5e3 DLINDEX SET DLINDEX + 1 3930 f5e3 REPEND 3931 f5e3 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e4 - ifconst EXTRADLMEMORY 3933 f5e4 - if TMPMEMADDRESS > $1FFF 3934 f5e4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e4 - else 3936 f5e4 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e4 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e4 - endif 3940 f5e4 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e4 endif ; EXTRADLMEMORY 3942 f5e4 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e4 1f .byte.b >TMPMEMADDRESS 3944 f5e4 DLINDEX SET DLINDEX + 1 3930 f5e4 REPEND 3931 f5e4 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e5 - ifconst EXTRADLMEMORY 3933 f5e5 - if TMPMEMADDRESS > $1FFF 3934 f5e5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e5 - else 3936 f5e5 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e5 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e5 - endif 3940 f5e5 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e5 endif ; EXTRADLMEMORY 3942 f5e5 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e5 1f .byte.b >TMPMEMADDRESS 3944 f5e5 DLINDEX SET DLINDEX + 1 3930 f5e5 REPEND 3931 f5e5 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3932 f5e6 - ifconst EXTRADLMEMORY 3933 f5e6 - if TMPMEMADDRESS > $1FFF 3934 f5e6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3935 f5e6 - else 3936 f5e6 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3937 f5e6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3938 f5e6 -SECONDDLHALFSTART SET TMPMEMADDRESS 3939 f5e6 - endif 3940 f5e6 - endif ; TMPMEMADDRESS > $1FFF 3941 f5e6 endif ; EXTRADLMEMORY 3942 f5e6 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3943 f5e6 1f .byte.b >TMPMEMADDRESS 3944 f5e6 DLINDEX SET DLINDEX + 1 3945 f5e7 REPEND 3946 f5e7 3947 f5e7 - ifconst EXTRADLMEMORY 3948 f5e7 - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 3949 f5e7 endif 3950 f5e7 3951 f5e7 3952 f5e7 DLPOINTL 3953 f5e7 DLINDEX SET 0 3954 f5e7 REPEAT WZONECOUNT 3955 f5e7 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3956 f5e7 - ifconst EXTRADLMEMORY 3957 f5e7 - if TMPMEMADDRESS > $1FFF 3958 f5e7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5e7 - else 3960 f5e7 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5e7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5e7 - endif 3963 f5e7 - endif ; TMPMEMADDRESS > $1FFF 3964 f5e7 endif ; EXTRADLMEMORY 3965 f5e7 80 .byte.b $1FFF 3958 f5e8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5e8 - else 3960 f5e8 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5e8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5e8 - endif 3963 f5e8 - endif ; TMPMEMADDRESS > $1FFF 3964 f5e8 endif ; EXTRADLMEMORY 3965 f5e8 d0 .byte.b $1FFF 3958 f5e9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5e9 - else 3960 f5e9 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5e9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5e9 - endif 3963 f5e9 - endif ; TMPMEMADDRESS > $1FFF 3964 f5e9 endif ; EXTRADLMEMORY 3965 f5e9 20 .byte.b $1FFF 3958 f5ea -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5ea - else 3960 f5ea - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5ea -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5ea - endif 3963 f5ea - endif ; TMPMEMADDRESS > $1FFF 3964 f5ea endif ; EXTRADLMEMORY 3965 f5ea 70 .byte.b $1FFF 3958 f5eb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5eb - else 3960 f5eb - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5eb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5eb - endif 3963 f5eb - endif ; TMPMEMADDRESS > $1FFF 3964 f5eb endif ; EXTRADLMEMORY 3965 f5eb c0 .byte.b $1FFF 3958 f5ec -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5ec - else 3960 f5ec - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5ec -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5ec - endif 3963 f5ec - endif ; TMPMEMADDRESS > $1FFF 3964 f5ec endif ; EXTRADLMEMORY 3965 f5ec 10 .byte.b $1FFF 3958 f5ed -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5ed - else 3960 f5ed - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5ed -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5ed - endif 3963 f5ed - endif ; TMPMEMADDRESS > $1FFF 3964 f5ed endif ; EXTRADLMEMORY 3965 f5ed 60 .byte.b $1FFF 3958 f5ee -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5ee - else 3960 f5ee - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5ee -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5ee - endif 3963 f5ee - endif ; TMPMEMADDRESS > $1FFF 3964 f5ee endif ; EXTRADLMEMORY 3965 f5ee b0 .byte.b $1FFF 3958 f5ef -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5ef - else 3960 f5ef - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5ef -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5ef - endif 3963 f5ef - endif ; TMPMEMADDRESS > $1FFF 3964 f5ef endif ; EXTRADLMEMORY 3965 f5ef 00 .byte.b $1FFF 3958 f5f0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f0 - else 3960 f5f0 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f0 - endif 3963 f5f0 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f0 endif ; EXTRADLMEMORY 3965 f5f0 50 .byte.b $1FFF 3958 f5f1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f1 - else 3960 f5f1 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f1 - endif 3963 f5f1 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f1 endif ; EXTRADLMEMORY 3965 f5f1 a0 .byte.b $1FFF 3958 f5f2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f2 - else 3960 f5f2 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f2 - endif 3963 f5f2 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f2 endif ; EXTRADLMEMORY 3965 f5f2 f0 .byte.b $1FFF 3958 f5f3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f3 - else 3960 f5f3 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f3 - endif 3963 f5f3 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f3 endif ; EXTRADLMEMORY 3965 f5f3 40 .byte.b $1FFF 3958 f5f4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f4 - else 3960 f5f4 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f4 - endif 3963 f5f4 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f4 endif ; EXTRADLMEMORY 3965 f5f4 90 .byte.b $1FFF 3958 f5f5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f5 - else 3960 f5f5 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f5 - endif 3963 f5f5 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f5 endif ; EXTRADLMEMORY 3965 f5f5 e0 .byte.b $1FFF 3958 f5f6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f6 - else 3960 f5f6 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f6 - endif 3963 f5f6 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f6 endif ; EXTRADLMEMORY 3965 f5f6 30 .byte.b $1FFF 3958 f5f7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f7 - else 3960 f5f7 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f7 - endif 3963 f5f7 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f7 endif ; EXTRADLMEMORY 3965 f5f7 80 .byte.b $1FFF 3958 f5f8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f8 - else 3960 f5f8 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f8 - endif 3963 f5f8 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f8 endif ; EXTRADLMEMORY 3965 f5f8 d0 .byte.b $1FFF 3958 f5f9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5f9 - else 3960 f5f9 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5f9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5f9 - endif 3963 f5f9 - endif ; TMPMEMADDRESS > $1FFF 3964 f5f9 endif ; EXTRADLMEMORY 3965 f5f9 20 .byte.b $1FFF 3958 f5fa -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5fa - else 3960 f5fa - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5fa -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5fa - endif 3963 f5fa - endif ; TMPMEMADDRESS > $1FFF 3964 f5fa endif ; EXTRADLMEMORY 3965 f5fa 70 .byte.b $1FFF 3958 f5fb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5fb - else 3960 f5fb - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5fb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5fb - endif 3963 f5fb - endif ; TMPMEMADDRESS > $1FFF 3964 f5fb endif ; EXTRADLMEMORY 3965 f5fb c0 .byte.b $1FFF 3958 f5fc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5fc - else 3960 f5fc - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5fc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5fc - endif 3963 f5fc - endif ; TMPMEMADDRESS > $1FFF 3964 f5fc endif ; EXTRADLMEMORY 3965 f5fc 10 .byte.b $1FFF 3958 f5fd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5fd - else 3960 f5fd - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5fd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5fd - endif 3963 f5fd - endif ; TMPMEMADDRESS > $1FFF 3964 f5fd endif ; EXTRADLMEMORY 3965 f5fd 60 .byte.b $1FFF 3958 f5fe -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3959 f5fe - else 3960 f5fe - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3961 f5fe -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3962 f5fe - endif 3963 f5fe - endif ; TMPMEMADDRESS > $1FFF 3964 f5fe endif ; EXTRADLMEMORY 3965 f5fe b0 .byte.b $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff if DLINDEX = 0 3983 f5ff 18 80 ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff if DLINDEX = 1 3986 f5ff 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff if DLINDEX = 2 3989 f5ff 19 20 ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff if DLINDEX = 3 3992 f5ff 19 70 ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff if DLINDEX = 4 3995 f5ff 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff if DLINDEX = 5 3998 f5ff 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff if DLINDEX = 6 4001 f5ff 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff if DLINDEX = 7 4004 f5ff 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff if DLINDEX = 8 4007 f5ff 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff if DLINDEX = 9 4010 f5ff 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff if DLINDEX = 10 4013 f5ff 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff if DLINDEX = 11 4016 f5ff 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff if DLINDEX = 12 4019 f5ff 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff if DLINDEX = 13 4022 f5ff 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff if DLINDEX = 14 4025 f5ff 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff if DLINDEX = 15 4028 f5ff 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff if DLINDEX = 16 4031 f5ff 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff if DLINDEX = 17 4034 f5ff 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff if DLINDEX = 18 4037 f5ff 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff if DLINDEX = 19 4040 f5ff 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff if DLINDEX = 20 4043 f5ff 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff if DLINDEX = 21 4046 f5ff 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff if DLINDEX = 22 4049 f5ff 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff - if DLINDEX = 23 4052 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 3971 f5ff REPEND 3972 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3973 f5ff - ifconst EXTRADLMEMORY 3974 f5ff - if TMPMEMADDRESS > $1FFF 3975 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3976 f5ff - else 3977 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3978 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3979 f5ff - endif 3980 f5ff - endif ; TMPMEMADDRESS > $1FFF 3981 f5ff endif ; EXTRADLMEMORY 3982 f5ff - if DLINDEX = 0 3983 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3984 f5ff endif 3985 f5ff - if DLINDEX = 1 3986 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3987 f5ff endif 3988 f5ff - if DLINDEX = 2 3989 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3990 f5ff endif 3991 f5ff - if DLINDEX = 3 3992 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3993 f5ff endif 3994 f5ff - if DLINDEX = 4 3995 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3996 f5ff endif 3997 f5ff - if DLINDEX = 5 3998 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3999 f5ff endif 4000 f5ff - if DLINDEX = 6 4001 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 4002 f5ff endif 4003 f5ff - if DLINDEX = 7 4004 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 4005 f5ff endif 4006 f5ff - if DLINDEX = 8 4007 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 4008 f5ff endif 4009 f5ff - if DLINDEX = 9 4010 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 4011 f5ff endif 4012 f5ff - if DLINDEX = 10 4013 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 4014 f5ff endif 4015 f5ff - if DLINDEX = 11 4016 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 4017 f5ff endif 4018 f5ff - if DLINDEX = 12 4019 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 4020 f5ff endif 4021 f5ff - if DLINDEX = 13 4022 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 4023 f5ff endif 4024 f5ff - if DLINDEX = 14 4025 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 4026 f5ff endif 4027 f5ff - if DLINDEX = 15 4028 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 4029 f5ff endif 4030 f5ff - if DLINDEX = 16 4031 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 4032 f5ff endif 4033 f5ff - if DLINDEX = 17 4034 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 4035 f5ff endif 4036 f5ff - if DLINDEX = 18 4037 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 4038 f5ff endif 4039 f5ff - if DLINDEX = 19 4040 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 4041 f5ff endif 4042 f5ff - if DLINDEX = 20 4043 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 4044 f5ff endif 4045 f5ff - if DLINDEX = 21 4046 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 4047 f5ff endif 4048 f5ff - if DLINDEX = 22 4049 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 4050 f5ff endif 4051 f5ff if DLINDEX = 23 4052 f5ff 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 4053 f5ff endif 4054 f5ff - if DLINDEX = 24 4055 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 4056 f5ff endif 4057 f5ff - if DLINDEX = 25 4058 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 4059 f5ff endif 4060 f5ff - if DLINDEX = 26 4061 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 4062 f5ff endif 4063 f5ff - if DLINDEX = 27 4064 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 4065 f5ff endif 4066 f5ff DLINDEX SET DLINDEX + 1 4067 f5ff REPEND 4068 f5ff 4069 f5ff $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 4070 f5ff echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 4071 f5ff 4072 f5ff DLHEIGHT 4073 f5ff REPEAT WZONECOUNT 4074 f5ff 07 .byte.b (WZONEHEIGHT-1) 4073 f5ff REPEND 4074 f600 07 .byte.b (WZONEHEIGHT-1) 4073 f600 REPEND 4074 f601 07 .byte.b (WZONEHEIGHT-1) 4073 f601 REPEND 4074 f602 07 .byte.b (WZONEHEIGHT-1) 4073 f602 REPEND 4074 f603 07 .byte.b (WZONEHEIGHT-1) 4073 f603 REPEND 4074 f604 07 .byte.b (WZONEHEIGHT-1) 4073 f604 REPEND 4074 f605 07 .byte.b (WZONEHEIGHT-1) 4073 f605 REPEND 4074 f606 07 .byte.b (WZONEHEIGHT-1) 4073 f606 REPEND 4074 f607 07 .byte.b (WZONEHEIGHT-1) 4073 f607 REPEND 4074 f608 07 .byte.b (WZONEHEIGHT-1) 4073 f608 REPEND 4074 f609 07 .byte.b (WZONEHEIGHT-1) 4073 f609 REPEND 4074 f60a 07 .byte.b (WZONEHEIGHT-1) 4073 f60a REPEND 4074 f60b 07 .byte.b (WZONEHEIGHT-1) 4073 f60b REPEND 4074 f60c 07 .byte.b (WZONEHEIGHT-1) 4073 f60c REPEND 4074 f60d 07 .byte.b (WZONEHEIGHT-1) 4073 f60d REPEND 4074 f60e 07 .byte.b (WZONEHEIGHT-1) 4073 f60e REPEND 4074 f60f 07 .byte.b (WZONEHEIGHT-1) 4073 f60f REPEND 4074 f610 07 .byte.b (WZONEHEIGHT-1) 4073 f610 REPEND 4074 f611 07 .byte.b (WZONEHEIGHT-1) 4073 f611 REPEND 4074 f612 07 .byte.b (WZONEHEIGHT-1) 4073 f612 REPEND 4074 f613 07 .byte.b (WZONEHEIGHT-1) 4073 f613 REPEND 4074 f614 07 .byte.b (WZONEHEIGHT-1) 4073 f614 REPEND 4074 f615 07 .byte.b (WZONEHEIGHT-1) 4073 f615 REPEND 4074 f616 07 .byte.b (WZONEHEIGHT-1) 4075 f617 REPEND 4076 f617 4077 f617 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4078 f617 4079 f617 ; a simple guard, than ensures the 7800basic code hasn't 4080 f617 ; spilled into the encryption area... 2407 bytes left in the 7800basic reserved area. 4081 f617 echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 4082 f617 - if (*>$FF7D) 4083 f617 - ERR ; abort the assembly 4084 f617 endif 4085 f617 ; Provided under the CC0 license. See the included LICENSE.txt for details. 4086 f617 4087 f617 - ifconst DEV 4088 f617 - ifnconst ZONEHEIGHT 4089 f617 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 4090 f617 - else 4091 f617 - if ZONEHEIGHT = 8 4092 f617 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 4093 f617 - else 4094 f617 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 4095 f617 - endif 4096 f617 - endif 4097 f617 endif 4098 f617 4099 f617 ; FF7E/FF7F contains the 7800basic crc checksum word 4100 f617 4101 f617 ; FF80 - FFF7 contains the 7800 encryption key 4102 f617 4103 f617 ifnconst bankswitchmode 4104 fff8 ORG $FFF8 4105 fff8 - else 4106 fff8 - ifconst ROM128K 4107 fff8 - ORG $27FF8 4108 fff8 - RORG $FFF8 4109 fff8 - endif 4110 fff8 - ifconst ROM144K 4111 fff8 - ORG $27FF8 4112 fff8 - RORG $FFF8 4113 fff8 - endif 4114 fff8 - ifconst ROM256K 4115 fff8 - ORG $47FF8 4116 fff8 - RORG $FFF8 4117 fff8 - endif 4118 fff8 - ifconst ROM272K 4119 fff8 - ORG $47FF8 4120 fff8 - RORG $FFF8 4121 fff8 - endif 4122 fff8 - ifconst ROM512K 4123 fff8 - ORG $87FF8 4124 fff8 - RORG $FFF8 4125 fff8 - endif 4126 fff8 - ifconst ROM528K 4127 fff8 - ORG $87FF8 4128 fff8 - RORG $FFF8 4129 fff8 - endif 4130 fff8 endif 4131 fff8 4132 fff8 4133 fff8 ff .byte.b $FF ; region verification. $FF=all regions 4134 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 4135 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 4136 fffa 4137 fffa ;Vectors 4138 fffa 00 f0 .word.w NMI 4139 fffc 11 f5 .word.w START 4140 fffe 5a f0 .word.w IRQ 4141 10000