------- 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_ship_tallsprite_01_mode = $00 4 10000 ???? 00 00 vertical_shooting_ship_tallsprite_01_width_twoscompliment = $00 5 10000 ???? 00 00 vertical_shooting_ship_tallsprite_01_width = $00 6 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 7 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 8 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 9 10000 ???? 00 00 vertical_shooting_ship_mode = $00 10 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 11 10000 ???? 00 02 vertical_shooting_ship_width = $02 12 10000 ???? 00 00 atascii_mode = $00 13 10000 ???? 00 05 atascii_width_twoscompliment = $05 14 10000 ???? 00 7b atascii_width = $7b 15 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 16 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 17 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 18 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 19 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 20 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 21 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 22 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 23 10000 ???? 00 00 atascii_color1 = $00 24 10000 ???? 00 0f atascii_color0 = $0f 25 10000 ???? 01 45 fire_debounce = var5 26 10000 ???? 27 10000 ???? 01 43 playerY = var3 28 10000 ???? 01 41 playerX = var1 29 10000 ???? 01 40 frameCounter = var0 30 10000 ???? 31 10000 ???? 00 01 NTSC = 1 32 10000 ???? 00 c0 SCREENHEIGHT = 192 33 10000 ???? 00 01 CHECKOVERWRITE = 1 34 10000 ???? 00 08 ZONEHEIGHT = 8 35 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_ship_tallsprite_01_mode = $00 4 10000 ???? 00 00 vertical_shooting_ship_tallsprite_01_width_twoscompliment = $00 5 10000 ???? 00 00 vertical_shooting_ship_tallsprite_01_width = $00 6 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_mode = $00 7 10000 ???? 00 1e vertical_shooting_ship_tallsprite_00_width_twoscompliment = $1e 8 10000 ???? 00 02 vertical_shooting_ship_tallsprite_00_width = $02 9 10000 ???? 00 00 vertical_shooting_ship_mode = $00 10 10000 ???? 00 1e vertical_shooting_ship_width_twoscompliment = $1e 11 10000 ???? 00 02 vertical_shooting_ship_width = $02 12 10000 ???? 00 00 atascii_mode = $00 13 10000 ???? 00 05 atascii_width_twoscompliment = $05 14 10000 ???? 00 7b atascii_width = $7b 15 10000 ???? 00 42 vertical_shooting_ship_tallsprite_00_color3 = $42 16 10000 ???? 00 04 vertical_shooting_ship_tallsprite_00_color2 = $04 17 10000 ???? 00 0f vertical_shooting_ship_tallsprite_00_color1 = $0f 18 10000 ???? 00 00 vertical_shooting_ship_tallsprite_00_color0 = $00 19 10000 ???? 00 42 vertical_shooting_ship_color3 = $42 20 10000 ???? 00 04 vertical_shooting_ship_color2 = $04 21 10000 ???? 00 0f vertical_shooting_ship_color1 = $0f 22 10000 ???? 00 00 vertical_shooting_ship_color0 = $00 23 10000 ???? 00 00 atascii_color1 = $00 24 10000 ???? 00 0f atascii_color0 = $0f 25 10000 ???? 01 45 fire_debounce = var5 26 10000 ???? 27 10000 ???? 01 43 playerY = var3 28 10000 ???? 01 41 playerX = var1 29 10000 ???? 01 40 frameCounter = var0 30 10000 ???? 31 10000 ???? 00 01 NTSC = 1 32 10000 ???? 00 c0 SCREENHEIGHT = 192 33 10000 ???? 00 01 CHECKOVERWRITE = 1 34 10000 ???? 00 08 ZONEHEIGHT = 8 35 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 ;; displaymode 160A 409 c006 410 c006 a9 40 lda #%01000000 ;Enable DMA, mode=160x2/160x4 411 c008 85 3c sta CTRL 412 c00a 413 c00a 8d 07 21 sta sCTRL 414 c00d 415 c00d . 416 c00d ;; 417 c00d 418 c00d .L08 ;; dim frameCounter = var0 419 c00d 420 c00d .L09 ;; dim playerX = var1.var2 421 c00d 422 c00d .L010 ;; dim playerY = var3.var4 423 c00d 424 c00d .L011 ;; dim fire_debounce = var5 425 c00d 426 c00d . 427 c00d ;; 428 c00d 429 c00d .L012 ;; P0C1 = $05 : P0C2 = $32 : P0C3 = $0F 430 c00d 431 c00d a9 05 LDA #$05 432 c00f 85 21 STA P0C1 433 c011 a9 32 LDA #$32 434 c013 85 22 STA P0C2 435 c015 a9 0f LDA #$0F 436 c017 85 23 STA P0C3 437 c019 .L013 ;; P1C2 = $0F 438 c019 439 c019 a9 0f LDA #$0F 440 c01b 85 26 STA P1C2 441 c01d . 442 c01d ;; 443 c01d 444 c01d .L014 ;; characterset atascii 445 c01d 446 c01d a9 e0 lda #>atascii 447 c01f 85 34 sta CHARBASE 448 c021 8d 0b 21 sta sCHARBASE 449 c024 450 c024 a9 60 lda #(atascii_mode | %01100000) 451 c026 8d 06 21 sta charactermode 452 c029 453 c029 .L015 ;; alphachars ASCII 454 c029 455 c029 . 456 c029 ;; 457 c029 458 c029 .L016 ;; incgraphic atascii.png 320A 459 c029 460 c029 .L017 ;; incgraphic vertical_shooting_ship.png 160A 461 c029 462 c029 . 463 c029 ;; 464 c029 465 c029 .L018 ;; playerX = 80 : playerY = 144 466 c029 467 c029 a9 00 LDA #0 468 c02b 8d 42 01 STA var2 469 c02e a9 50 LDA #80 470 c030 8d 41 01 STA playerX 471 c033 a9 00 LDA #0 472 c035 8d 44 01 STA var4 473 c038 a9 90 LDA #144 474 c03a 8d 43 01 STA playerY 475 c03d . 476 c03d ;; 477 c03d 478 c03d .titlescreenloop 479 c03d ;; titlescreenloop 480 c03d 481 c03d .L019 ;; plotchars 'New^Vertical^Shooting^Demo' 1 16 8 482 c03d 483 c03d 4c 5a c0 JMP skipalphadata0 484 c040 alphadata0 485 c040 4e .byte.b (alphadata0 516 c060 85 43 sta temp2 517 c062 518 c062 a9 06 lda #6 ; width in two's complement 519 c064 09 20 ora #32 ; palette left shifted 5 bits 520 c066 85 44 sta temp3 521 c068 a9 10 lda #16 522 c06a 85 45 sta temp4 523 c06c 524 c06c a9 08 lda #8 525 c06e 526 c06e 85 46 sta temp5 527 c070 528 c070 20 48 f3 jsr plotcharacters 529 c073 . 530 c073 ;; 531 c073 532 c073 .L020 ;; clearscreen 533 c073 534 c073 20 74 f0 jsr clearscreen 535 c076 .L021 ;; savescreen 536 c076 537 c076 20 98 f0 jsr savescreen 538 c079 .L022 ;; drawscreen 539 c079 540 c079 20 a8 f0 jsr drawscreen 541 c07c . 542 c07c ;; 543 c07c 544 c07c .main 545 c07c ;; main 546 c07c 547 c07c .L023 ;; frameCounter = 0 548 c07c 549 c07c a9 00 LDA #0 550 c07e 8d 40 01 STA frameCounter 551 c081 .mainloop 552 c081 ;; mainloop 553 c081 554 c081 .L024 ;; BACKGRND = $00 555 c081 556 c081 a9 00 LDA #$00 557 c083 85 20 STA BACKGRND 558 c085 .L025 ;; restorescreen 559 c085 560 c085 20 86 f0 jsr restorescreen 561 c088 .L026 ;; plotsprite vertical_shooting_ship 0 playerX playerY 562 c088 563 c088 a9 7b lda #vertical_shooting_ship 567 c08e 85 43 sta temp2 568 c090 569 c090 a9 1e lda #(0|vertical_shooting_ship_width_twoscompliment) 570 c092 85 44 sta temp3 571 c094 572 c094 ad 41 01 lda playerX 573 c097 85 45 sta temp4 574 c099 575 c099 ad 43 01 lda playerY 576 c09c 577 c09c 85 46 sta temp5 578 c09e 579 c09e a9 40 lda #(vertical_shooting_ship_mode|%01000000) 580 c0a0 85 47 sta temp6 581 c0a2 582 c0a2 20 88 f2 jsr plotsprite 583 c0a5 ; +tall sprite replot 584 c0a5 18 clc 585 c0a6 a5 42 lda temp1 586 c0a8 69 02 adc #vertical_shooting_ship_width 587 c0aa 85 42 sta temp1 588 c0ac a5 46 lda temp5 589 c0ae 69 08 adc #WZONEHEIGHT 590 c0b0 85 46 sta temp5 591 c0b2 20 88 f2 jsr plotsprite 592 c0b5 .L027 ;; drawscreen 593 c0b5 594 c0b5 20 a8 f0 jsr drawscreen 595 c0b8 .L028 ;; frameCounter = frameCounter + 1 596 c0b8 597 c0b8 ad 40 01 LDA frameCounter 598 c0bb 18 CLC 599 c0bc 69 01 ADC #1 600 c0be 8d 40 01 STA frameCounter 601 c0c1 .L029 ;; if frameCounter > 10 then frameCounter = 0 602 c0c1 603 c0c1 a9 0a LDA #10 604 c0c3 cd 40 01 CMP frameCounter 605 c0c6 b0 05 BCS .skipL029 606 c0c8 .condpart0 607 c0c8 a9 00 LDA #0 608 c0ca 8d 40 01 STA frameCounter 609 c0cd .skipL029 610 c0cd .L030 ;; goto mainloop 611 c0cd 612 c0cd 4c 81 c0 jmp .mainloop 613 c0d0 614 c0d0 . 615 c0d0 ;; 616 c0d0 617 c0d0 DMAHOLEEND0 SET . 618 c0d0 gameend 619 c0d0 DMAHOLEEND0 SET . 7984 bytes of ROM space left in the main area. 620 c0d0 echo " ",[($E000 - gameend)]d , "bytes of ROM space left in the main area." 621 c0d0 622 e000 ORG $E000,0 ; ************* 623 e000 624 e000 atascii 625 e000 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 626 e020 00 00 00 00* HEX 0000000000000000000000003000000000000000000000000000003000000000 627 e040 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 628 e060 00 00 00 00* HEX 000000000000007c00003c00000000006006000000000000007800 629 e07b vertical_shooting_ship 630 e07b 07 d0 HEX 07d0 631 e07d vertical_shooting_ship_tallsprite_00 632 e07d 80 02 HEX 8002 633 e07f 634 e100 ORG $E100,0 ; ************* 635 e100 636 e100 ;atascii 637 e100 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 638 e120 00 18 00 66* HEX 0018006618463b000e700000180018403c7e7e3c0c3c3c303c38181806006018 639 e140 3e 66 7c 3c* HEX 3e667c3c787e603e667e3c667e63663c6036663c187e186366187e1e067800ff 640 e160 00 3e 7c 3c* HEX 003e7c3c3e3c1806663c06663c63663c6006607c0e3e1836660c7e 641 e17b ;vertical_shooting_ship 642 e17b 07 d0 HEX 07d0 643 e17d ;vertical_shooting_ship_tallsprite_00 644 e17d 80 02 HEX 8002 645 e17f 646 e200 ORG $E200,0 ; ************* 647 e200 648 e200 ;atascii 649 e200 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 650 e220 00 00 00 ff* HEX 000000ff7c6666001c38661818001860661830667e666630660c18180c7e3000 651 e240 60 7e 66 66* HEX 607e66666c6060666618666c60636e66606c6c0618663c77661860180c180000 652 e260 00 66 66 60* HEX 006666606660183e6618066c186b66667c3e600618663c3e3c3e30 653 e27b ;vertical_shooting_ship 654 e27b 03 c0 HEX 03c0 655 e27d ;vertical_shooting_ship_tallsprite_00 656 e27d a1 4a HEX a14a 657 e27f 658 e300 ORG $E300,0 ; ************* 659 e300 660 e300 ;atascii 661 e300 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 662 e320 00 18 00 66* HEX 0018006606306f0018183c18000000307618180c6c0666186606000018001818 663 e340 6e 66 66 60* HEX 6e6666606660606e66180678606b7e667c667c061866667f3c18301818186300 664 e360 00 3e 66 60* HEX 003e6660667e186666180678187f66666666603c1866667f186618 665 e37b ;vertical_shooting_ship 666 e37b 01 40 HEX 0140 667 e37d ;vertical_shooting_ship_tallsprite_00 668 e37d a5 5a HEX a55a 669 e37f 670 e400 ORG $E400,0 ; ************* 671 e400 672 e400 ;atascii 673 e400 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 674 e420 00 18 66 66* HEX 001866663c1838181818ff7e007e00186e180c183c7c7c0c3c3e181830000c0c 675 e440 6e 66 7c 60* HEX 6e667c60667c7c607e180678607f7e666666663c1866666b3c3c181830183600 676 e460 18 06 7c 60* HEX 18067c603e663e667c38066c187f6666666666601866666b3c660c 677 e47b ;vertical_shooting_ship 678 e47b 01 40 HEX 0140 679 e47d ;vertical_shooting_ship_tallsprite_00 680 e47d a5 5a HEX a55a 681 e47f 682 e500 ORG $E500,0 ; ************* 683 e500 684 e500 ;atascii 685 e500 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 686 e520 00 18 66 ff* HEX 001866ff606c1c181c383c180000000c6638660c1c60600666661818187e1866 687 e540 66 3c 66 66* HEX 663c66666c6060606618066c60777666666666601866666366660c1860181c00 688 e560 18 3c 60 3c* HEX 183c603c063c183e6000006018667c3c7c3e7c3e7e66666366667e 689 e57b ;vertical_shooting_ship 690 e57b 01 40 HEX 0140 691 e57d ;vertical_shooting_ship_tallsprite_00 692 e57d a5 5a HEX a55a 693 e57f 694 e600 ORG $E600,0 ; ************* 695 e600 696 e600 ;atascii 697 e600 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 698 e620 00 18 66 66* HEX 001866663e6636180e706618000000063c183c7e0c7e3c7e3c3c00000c00303c 699 e640 3c 18 7c 3c* HEX 3c187c3c787e7e3e667e06666063663c7c3c7c3c7e66666366667e1e40780800 700 e660 18 00 60 00* HEX 1800600006000e0060180660380000000000000018000000000000 701 e67b ;vertical_shooting_ship 702 e67b 01 40 HEX 0140 703 e67d ;vertical_shooting_ship_tallsprite_00 704 e67d a7 da HEX a7da 705 e67f 706 e700 ORG $E700,0 ; ************* 707 e700 708 e700 ;atascii 709 e700 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 710 e720 00 00 00 00* HEX 0000000018001c00000000000000000000000000000000000000000006006000 711 e740 00 00 00 00* HEX 0000000000000000000000000000000000000000000000000000000000000000 712 e760 00 00 00 00* HEX 000000000000000000000000000000000000000000000000000000 713 e77b ;vertical_shooting_ship 714 e77b 01 40 HEX 0140 715 e77d ;vertical_shooting_ship_tallsprite_00 716 e77d 27 d8 HEX 27d8 717 e77f 718 e77f 719 e77f ; Provided under the CC0 license. See the included LICENSE.txt for details. 720 e77f 721 e77f ifnconst bankswitchmode 722 e77f if ( * < $f000 ) 723 f000 ORG $F000 724 f000 endif 725 f000 - else 726 f000 - ifconst ROM128K 727 f000 - if ( * < $f000 ) 728 f000 - ORG $27000 729 f000 - RORG $F000 730 f000 - endif 731 f000 - endif 732 f000 - ifconst ROM144K 733 f000 - if ( * < $f000 ) 734 f000 - ORG $27000 735 f000 - RORG $F000 736 f000 - endif 737 f000 - endif 738 f000 - ifconst ROM256K 739 f000 - if ( * < $f000 ) 740 f000 - ORG $47000 741 f000 - RORG $F000 742 f000 - endif 743 f000 - endif 744 f000 - ifconst ROM272K 745 f000 - if ( * < $f000 ) 746 f000 - ORG $47000 747 f000 - RORG $F000 748 f000 - endif 749 f000 - endif 750 f000 - ifconst ROM512K 751 f000 - if ( * < $f000 ) 752 f000 - ORG $87000 753 f000 - RORG $F000 754 f000 - endif 755 f000 - endif 756 f000 - ifconst ROM528K 757 f000 - if ( * < $f000 ) 758 f000 - ORG $87000 759 f000 - RORG $F000 760 f000 - endif 761 f000 - endif 762 f000 endif 763 f000 764 f000 ; all of these "modules" have conditional clauses in them, so even though 765 f000 ; they're always included here, they don't take up rom unless the user 766 f000 ; explicitly enables support for the feature. 767 f000 768 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 770 f000 endif 771 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 773 f000 endif 774 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 776 f000 endif 777 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 779 f000 endif 780 f000 ; Provided under the CC0 license. See the included LICENSE.txt for details. 781 f000 782 f000 ;standard routimes needed for pretty much all games 783 f000 784 f000 ; some definitions used with "set debug color" 785 f000 00 91 DEBUGCALC = $91 786 f000 00 41 DEBUGWASTE = $41 787 f000 00 c1 DEBUGDRAW = $C1 788 f000 789 f000 ;NMI and IRQ handlers 790 f000 NMI 791 f000 ;VISIBLEOVER is 255 while the screen is drawn, and 0 right after the visible screen is done. 792 f000 48 pha ; save A 793 f001 a5 4d lda visibleover 794 f003 49 ff eor #255 795 f005 85 4d sta visibleover 796 f007 - ifconst DEBUGINTERRUPT 797 f007 - and #$93 798 f007 - sta BACKGRND 799 f007 endif 800 f007 ce b2 01 dec interruptindex 801 f00a d0 03 bne skipreallyoffvisible 802 f00c 4c 5b f0 jmp reallyoffvisible 803 f00f skipreallyoffvisible 804 f00f a5 4d lda visibleover 805 f011 f0 46 beq skiptopscreenroutine 806 f013 8a txa ; save X+Y 807 f014 48 pha 808 f015 98 tya 809 f016 48 pha 810 f017 d8 cld 811 f018 - ifconst .topscreenroutine 812 f018 - jsr .topscreenroutine 813 f018 endif 814 f018 ee 3e 21 inc frameslost ; this is balanced with a "dec frameslost" when drawscreen is called. 815 f01b 816 f01b ; ** Other important routines that need to regularly run, and can run onscreen. 817 f01b ; ** Atarivox can't go here, because Maria might interrupt it while it's bit-banging. 818 f01b 819 f01b longcontrollerreads ; ** controllers that take a lot of time to read. We use much of the visible screen here. 820 f01b - ifconst LONGCONTROLLERREAD 821 f01b - lda #$38 822 f01b - ifconst LONGDEBUG 823 f01b - sta BACKGRND 824 f01b - endif 825 f01b - sta inttemp6 826 f01b - 827 f01b -longreadlineloop 828 f01b - ldx #1 829 f01b -longreadloop 830 f01b - ldy port0control,x 831 f01b - lda longreadroutinelo,y 832 f01b - sta inttemp3 833 f01b - lda longreadroutinehi,y 834 f01b - sta inttemp4 835 f01b - ora inttemp3 836 f01b - beq longreadloopreturn 837 f01b - jmp (inttemp3) 838 f01b -longreadloopreturn 839 f01b - dex 840 f01b - bpl longreadloop 841 f01b - dec inttemp6 842 f01b - sta WSYNC 843 f01b - bne longreadlineloop 844 f01b - 845 f01b - ifconst LONGDEBUG 846 f01b - lda #$00 847 f01b - sta BACKGRND 848 f01b - endif 849 f01b endif ; LONGCONTROLLERREAD 850 f01b 851 f01b 20 cd f1 jsr servicesfxchannels 852 f01e - ifconst MUSICTRACKER 853 f01e - jsr servicesong 854 f01e endif ; MUSICTRACKER 855 f01e 856 f01e ee a4 01 inc framecounter 857 f021 ad a4 01 lda framecounter 858 f024 29 3f and #63 859 f026 d0 08 bne skipcountdownseconds 860 f028 ad a5 01 lda countdownseconds 861 f02b f0 03 beq skipcountdownseconds 862 f02d ce a5 01 dec countdownseconds 863 f030 skipcountdownseconds 864 f030 865 f030 a2 01 ldx #1 866 f032 buttonreadloop 867 f032 8a txa 868 f033 48 pha 869 f034 bc e2 01 ldy port0control,x 870 f037 b9 b0 f1 lda buttonhandlerlo,y 871 f03a 85 da sta inttemp3 872 f03c b9 a5 f1 lda buttonhandlerhi,y 873 f03f 85 db sta inttemp4 874 f041 05 da ora inttemp3 875 f043 f0 03 beq buttonreadloopreturn 876 f045 6c da 00 jmp (inttemp3) 877 f048 buttonreadloopreturn 878 f048 68 pla 879 f049 aa tax 880 f04a ca dex 881 f04b 10 e5 bpl buttonreadloop 882 f04d 883 f04d - ifconst DRIVINGSUPPORT 884 f04d - jsr drivingupdate 885 f04d endif ; DRIVINGSUPPORT 886 f04d - ifconst KEYPADSUPPORT 887 f04d - jsr keypadrowselect 888 f04d endif ; KEYPADSUPPORT 889 f04d 890 f04d 891 f04d ad b5 01 lda doublebufferminimumframeindex 892 f050 f0 03 beq skipdoublebufferminimumframeindexadjust 893 f052 ce b5 01 dec doublebufferminimumframeindex 894 f055 skipdoublebufferminimumframeindexadjust 895 f055 896 f055 68 pla 897 f056 a8 tay 898 f057 68 pla 899 f058 aa tax 900 f059 skiptopscreenroutine 901 f059 68 pla 902 f05a IRQ 903 f05a 40 RTI 904 f05b 905 f05b - ifconst LONGCONTROLLERREAD 906 f05b -longreadroutinelo 907 f05b - ; NONE PROLINE LIGHTGUN PADDLE 908 f05b - .byte 0, 0, 0, 0 909 f05b - ; TRKBALL VCS STICK DRIVING KEYPAD 910 f05b - .byte 0, 0, 0, 0 911 f05b - ; STMOUSE AMOUSE ATARIVOX 912 f05b - .byte mouseupdate, >mouseupdate, 0 921 f05b -nullroutine 922 f05b - rts 923 f05b endif ; LONGCONTROLLERREAD 924 f05b 925 f05b reallyoffvisible 926 f05b 85 24 sta WSYNC 927 f05d 928 f05d a9 00 lda #0 929 f05f 85 4d sta visibleover 930 f061 - ifconst DEBUGINTERRUPT 931 f061 - sta BACKGRND 932 f061 endif 933 f061 934 f061 a9 03 lda #3 935 f063 8d b2 01 sta interruptindex 936 f066 937 f066 8a txa 938 f067 48 pha 939 f068 98 tya 940 f069 48 pha 941 f06a d8 cld 942 f06b 943 f06b 20 47 f1 jsr uninterruptableroutines 944 f06e 945 f06e - ifconst .userinterrupt 946 f06e - jsr .userinterrupt 947 f06e endif 948 f06e 949 f06e - ifconst KEYPADSUPPORT 950 f06e - jsr keypadcolumnread 951 f06e endif 952 f06e 953 f06e 68 pla 954 f06f a8 tay 955 f070 68 pla 956 f071 aa tax 957 f072 68 pla 958 f073 40 RTI 959 f074 960 f074 clearscreen 961 f074 a2 17 ldx #(WZONECOUNT-1) 962 f076 a9 00 lda #0 963 f078 clearscreenloop 964 f078 95 65 sta dlend,x 965 f07a ca dex 966 f07b 10 fb bpl clearscreenloop 967 f07d a9 00 lda #0 968 f07f 8d ad 01 sta valbufend ; clear the bcd value buffer 969 f082 8d ae 01 sta valbufendsave 970 f085 60 rts 971 f086 972 f086 restorescreen 973 f086 a2 17 ldx #(WZONECOUNT-1) 974 f088 a9 00 lda #0 975 f08a restorescreenloop 976 f08a b5 82 lda dlendsave,x 977 f08c 95 65 sta dlend,x 978 f08e ca dex 979 f08f 10 f9 bpl restorescreenloop 980 f091 ad ae 01 lda valbufendsave 981 f094 8d ad 01 sta valbufend 982 f097 60 rts 983 f098 984 f098 savescreen 985 f098 a2 17 ldx #(WZONECOUNT-1) 986 f09a savescreenloop 987 f09a b5 65 lda dlend,x 988 f09c 95 82 sta dlendsave,x 989 f09e ca dex 990 f09f 10 f9 bpl savescreenloop 991 f0a1 ad ad 01 lda valbufend 992 f0a4 8d ae 01 sta valbufendsave 993 f0a7 - ifconst DOUBLEBUFFER 994 f0a7 - lda doublebufferstate 995 f0a7 - beq savescreenrts 996 f0a7 - lda #1 997 f0a7 - sta doublebufferbufferdirty 998 f0a7 -savescreenrts 999 f0a7 endif ; DOUBLEBUFFER 1000 f0a7 60 rts 1001 f0a8 1002 f0a8 drawscreen 1003 f0a8 1004 f0a8 a9 00 lda #0 1005 f0aa 85 42 sta temp1 ; not B&W if we're here... 1006 f0ac 1007 f0ac drawscreenwait 1008 f0ac a5 4d lda visibleover 1009 f0ae d0 fc bne drawscreenwait ; make sure the visible screen isn't being drawn 1010 f0b0 1011 f0b0 ;restore some registers in case the game changed them mid-screen... 1012 f0b0 ad 07 21 lda sCTRL 1013 f0b3 05 42 ora temp1 1014 f0b5 85 3c sta CTRL 1015 f0b7 ad 0b 21 lda sCHARBASE 1016 f0ba 85 34 sta CHARBASE 1017 f0bc 1018 f0bc ;ensure all of the display list is terminated... 1019 f0bc 20 2d f1 jsr terminatedisplaylist 1020 f0bf 1021 f0bf ifnconst pauseroutineoff 1022 f0bf 20 ca f0 jsr pauseroutine 1023 f0c2 endif ; pauseroutineoff 1024 f0c2 1025 f0c2 ; Make sure the visible screen has *started* before we exit. That way we can rely on drawscreen 1026 f0c2 ; delaying a full frame, but still allowing time for basic calculations. 1027 f0c2 visiblescreenstartedwait 1028 f0c2 a5 4d lda visibleover 1029 f0c4 f0 fc beq visiblescreenstartedwait 1030 f0c6 visiblescreenstartedwaitdone 1031 f0c6 ce 3e 21 dec frameslost ; ; this gets balanced with an "inc frameslost" by an NMI at the top of the screen 1032 f0c9 60 rts 1033 f0ca 1034 f0ca ifnconst pauseroutineoff 1035 f0ca ; check to see if pause was pressed and released 1036 f0ca pauseroutine 1037 f0ca ad b6 01 lda pausedisable 1038 f0cd d0 4e bne leavepauseroutine 1039 f0cf a9 08 lda #8 1040 f0d1 2c 82 02 bit SWCHB 1041 f0d4 f0 29 beq pausepressed 1042 f0d6 1043 f0d6 ifnconst SOFTRESETASPAUSEOFF 1044 f0d6 ifnconst MOUSESUPPORT 1045 f0d6 ad 80 02 lda SWCHA ; then check the soft "RESET" joysick code... 1046 f0d9 29 70 and #%01110000 ; _LDU 1047 f0db f0 22 beq pausepressed 1048 f0dd endif 1049 f0dd endif 1050 f0dd 1051 f0dd ;pause isn't pressed 1052 f0dd a9 00 lda #0 1053 f0df 8d ac 01 sta pausebuttonflag ; clear pause hold state in case its set 1054 f0e2 1055 f0e2 ;check if we're in an already paused state 1056 f0e2 ad 00 21 lda pausestate 1057 f0e5 f0 36 beq leavepauseroutine ; nope, leave 1058 f0e7 1059 f0e7 c9 01 cmp #1 ; last frame was the start of pausing 1060 f0e9 f0 2b beq enterpausestate2 ; move from state 1 to 2 1061 f0eb 1062 f0eb c9 02 cmp #2 1063 f0ed f0 34 beq carryonpausing 1064 f0ef 1065 f0ef ;pausestate must be >2, which means we're ending an unpause 1066 f0ef a9 00 lda #0 1067 f0f1 8d ac 01 sta pausebuttonflag 1068 f0f4 8d 00 21 sta pausestate 1069 f0f7 ad 07 21 lda sCTRL 1070 f0fa 85 3c sta CTRL 1071 f0fc 4c 1d f1 jmp leavepauseroutine 1072 f0ff 1073 f0ff pausepressed 1074 f0ff ;pause is pressed 1075 f0ff ad ac 01 lda pausebuttonflag 1076 f102 c9 ff cmp #$ff 1077 f104 f0 1d beq carryonpausing 1078 f106 1079 f106 ;its a new press, increment the state 1080 f106 ee 00 21 inc pausestate 1081 f109 1082 f109 ;silence volume at the start and end of pausing 1083 f109 a9 00 lda #0 1084 f10b 85 19 sta AUDV0 1085 f10d 85 1a sta AUDV1 1086 f10f 1087 f10f - ifconst pokeysupport 1088 f10f - ldy #7 1089 f10f -pausesilencepokeyaudioloop 1090 f10f - sta (pokeybase),y 1091 f10f - dey 1092 f10f - bpl pausesilencepokeyaudioloop 1093 f10f endif ; pokeysupport 1094 f10f 1095 f10f a9 ff lda #$ff 1096 f111 8d ac 01 sta pausebuttonflag 1097 f114 d0 0d bne carryonpausing 1098 f116 1099 f116 enterpausestate2 1100 f116 a9 02 lda #2 1101 f118 8d 00 21 sta pausestate 1102 f11b d0 06 bne carryonpausing 1103 f11d leavepauseroutine 1104 f11d ad 07 21 lda sCTRL 1105 f120 85 3c sta CTRL 1106 f122 60 rts 1107 f123 carryonpausing 1108 f123 - ifconst .pause 1109 f123 - jsr .pause 1110 f123 endif ; .pause 1111 f123 ad 07 21 lda sCTRL 1112 f126 09 80 ora #%10000000 ; turn off colorburst during pause... 1113 f128 85 3c sta CTRL 1114 f12a 4c ca f0 jmp pauseroutine 1115 f12d endif ; pauseroutineoff 1116 f12d 1117 f12d 1118 f12d - ifconst DOUBLEBUFFER 1119 f12d -skipterminatedisplaylistreturn 1120 f12d - rts 1121 f12d endif ; DOUBLEBUFFER 1122 f12d terminatedisplaylist 1123 f12d - ifconst DOUBLEBUFFER 1124 f12d - lda doublebufferstate 1125 f12d - bne skipterminatedisplaylistreturn ; double-buffering runs it's own DL termination code 1126 f12d endif ; DOUBLEBUFFER 1127 f12d terminatedisplaybuffer 1128 f12d ;add DL end entry on each DL 1129 f12d a2 17 ldx #(WZONECOUNT-1) 1130 f12f dlendloop 1131 f12f bd e7 f5 lda DLPOINTL,x 1132 f132 - ifconst DOUBLEBUFFER 1133 f132 - clc 1134 f132 - adc doublebufferdloffset 1135 f132 endif ; DOUBLEBUFFER 1136 f132 85 63 sta dlpnt 1137 f134 bd cf f5 lda DLPOINTH,x 1138 f137 - ifconst DOUBLEBUFFER 1139 f137 - adc #0 1140 f137 endif ; DOUBLEBUFFER 1141 f137 85 64 sta dlpnt+1 1142 f139 b4 65 ldy dlend,x 1143 f13b a9 00 lda #$00 1144 f13d dlendmoreloops 1145 f13d c8 iny 1146 f13e 91 63 sta (dlpnt),y 1147 f140 - ifconst FRAMESKIPGLITCHFIXWEAK 1148 f140 - cpy #DLLASTOBJ+1 1149 f140 - beq dlendthiszonedone 1150 f140 - iny 1151 f140 - iny 1152 f140 - iny 1153 f140 - iny 1154 f140 - iny 1155 f140 - sta (dlpnt),y 1156 f140 -dlendthiszonedone 1157 f140 endif FRAMESKIPGLITCHFIXWEAK 1158 f140 - ifconst FRAMESKIPGLITCHFIX 1159 f140 - iny 1160 f140 - iny 1161 f140 - iny 1162 f140 - iny 1163 f140 - cpy #DLLASTOBJ-1 1164 f140 - bcc dlendmoreloops 1165 f140 endif ; FRAMESKIPGLITCHFIX 1166 f140 ca dex 1167 f141 10 ec bpl dlendloop 1168 f143 1169 f143 ifnconst pauseroutineoff 1170 f143 20 ca f0 jsr pauseroutine 1171 f146 endif ; pauseroutineoff 1172 f146 60 rts 1173 f147 1174 f147 uninterruptableroutines 1175 f147 ; this is for routines that must happen off the visible screen, each frame. 1176 f147 1177 f147 - ifconst AVOXVOICE 1178 f147 - jsr serviceatarivoxqueue 1179 f147 endif 1180 f147 1181 f147 a9 00 lda #0 1182 f149 8d e1 01 sta palfastframe 1183 f14c ad 09 21 lda paldetected 1184 f14f f0 10 beq skippalframeadjusting 1185 f151 ; ** PAL console is detected. we increment palframes to accurately count 5 frames, 1186 f151 ae e0 01 ldx palframes 1187 f154 e8 inx 1188 f155 e0 05 cpx #5 1189 f157 d0 05 bne palframeskipdone 1190 f159 ee e1 01 inc palfastframe 1191 f15c a2 00 ldx #0 1192 f15e palframeskipdone 1193 f15e 8e e0 01 stx palframes 1194 f161 skippalframeadjusting 1195 f161 1196 f161 - ifconst MUSICTRACKER 1197 f161 - ; We normally run the servicesong routine from the top-screen interrupt, but if it 1198 f161 - ; happens to interrupt the scheduling of a sound effect in the game code, we skip it. 1199 f161 - ; If that happens, we try again here. Chances are very small we'll run into the same 1200 f161 - ; problem twice, and if we do, we just drop a musical note or two. 1201 f161 - lda sfxschedulemissed 1202 f161 - beq servicesongwasnotmissed 1203 f161 - jsr servicesong 1204 f161 -servicesongwasnotmissed 1205 f161 endif ; MUSICTRACKER 1206 f161 1207 f161 60 rts 1208 f162 1209 f162 serviceatarivoxqueue 1210 f162 - ifconst AVOXVOICE 1211 f162 - lda voxlock 1212 f162 - bne skipvoxprocessing ; the vox is in the middle of speech address update 1213 f162 -skipvoxqueuesizedec 1214 f162 - jmp processavoxvoice 1215 f162 -skipvoxprocessing 1216 f162 - rts 1217 f162 - 1218 f162 -processavoxvoice 1219 f162 - lda avoxenable 1220 f162 - bne avoxfixport 1221 f162 - SPKOUT tempavox 1222 f162 - rts 1223 f162 -avoxfixport 1224 f162 - lda #0 ; restore the port to all bits as inputs... 1225 f162 - sta CTLSWA 1226 f162 - rts 1227 f162 -silenceavoxvoice 1228 f162 - SPEAK avoxsilentdata 1229 f162 - rts 1230 f162 -avoxsilentdata 1231 f162 - .byte 31,255 1232 f162 else 1233 f162 60 rts 1234 f163 endif ; AVOXVOICE 1235 f163 1236 f163 joybuttonhandler 1237 f163 8a txa 1238 f164 0a asl 1239 f165 a8 tay 1240 f166 b9 08 00 lda INPT0,y 1241 f169 4a lsr 1242 f16a 9d 02 21 sta sINPT1,x 1243 f16d b9 09 00 lda INPT1,y 1244 f170 29 80 and #%10000000 1245 f172 1d 02 21 ora sINPT1,x 1246 f175 ;eor genesisdetected0,x ; invert INPT1 if genesis is detected 1247 f175 9d 02 21 sta sINPT1,x 1248 f178 1249 f178 b5 0c lda INPT4,x 1250 f17a 30 19 bmi .skip1bjoyfirecheck 1251 f17c ;one button joystick is down 1252 f17c 49 80 eor #%10000000 1253 f17e 9d 02 21 sta sINPT1,x 1254 f181 1255 f181 ad b1 01 lda joybuttonmode 1256 f184 3d 98 f1 and twobuttonmask,x 1257 f187 f0 0c beq .skip1bjoyfirecheck 1258 f189 ad b1 01 lda joybuttonmode 1259 f18c 1d 98 f1 ora twobuttonmask,x 1260 f18f 8d b1 01 sta joybuttonmode 1261 f192 8d 82 02 sta SWCHB 1262 f195 .skip1bjoyfirecheck 1263 f195 4c 48 f0 jmp buttonreadloopreturn 1264 f198 1265 f198 twobuttonmask 1266 f198 04 10 .byte.b %00000100,%00010000 1267 f19a 1268 f19a gunbuttonhandler ; outside of the conditional, so our button handler LUT is valid 1269 f19a - ifconst LIGHTGUNSUPPORT 1270 f19a - cpx #0 1271 f19a - bne secondportgunhandler 1272 f19a -firstportgunhandler 1273 f19a - lda SWCHA 1274 f19a - asl 1275 f19a - asl 1276 f19a - asl ; shift D4 to D7 1277 f19a - and #%10000000 1278 f19a - eor #%10000000 1279 f19a - sta sINPT1 1280 f19a - jmp buttonreadloopreturn 1281 f19a -secondportgunhandler 1282 f19a - lda SWCHA 1283 f19a - lsr ; shift D0 into carry 1284 f19a - lsr ; shift carry into D7 1285 f19a - and #%10000000 1286 f19a - eor #%10000000 1287 f19a - sta sINPT3 1288 f19a - jmp buttonreadloopreturn 1289 f19a endif ; LIGHTGUNSUPPORT 1290 f19a 1291 f19a controlsusing2buttoncode 1292 f19a 00 .byte.b 0 ; 00=no controller plugged in 1293 f19b 01 .byte.b 1 ; 01=proline joystick 1294 f19c 00 .byte.b 0 ; 02=lightgun 1295 f19d 00 .byte.b 0 ; 03=paddle 1296 f19e 01 .byte.b 1 ; 04=trakball 1297 f19f 01 .byte.b 1 ; 05=vcs joystick 1298 f1a0 01 .byte.b 1 ; 06=driving control 1299 f1a1 00 .byte.b 0 ; 07=keypad control 1300 f1a2 00 .byte.b 0 ; 08=st mouse/cx80 1301 f1a3 00 .byte.b 0 ; 09=amiga mouse 1302 f1a4 01 .byte.b 1 ; 10=atarivox 1303 f1a5 1304 f1a5 buttonhandlerhi 1305 f1a5 00 .byte.b 0 ; 00=no controller plugged in 1306 f1a6 f1 .byte.b >joybuttonhandler ; 01=proline joystick 1307 f1a7 f1 .byte.b >gunbuttonhandler ; 02=lightgun 1308 f1a8 00 .byte.b 0 ; 03=paddle [not implemented yet] 1309 f1a9 f1 .byte.b >joybuttonhandler ; 04=trakball 1310 f1aa f1 .byte.b >joybuttonhandler ; 05=vcs joystick 1311 f1ab f1 .byte.b >joybuttonhandler ; 06=driving control 1312 f1ac 00 .byte.b 0 ; 07=keypad 1313 f1ad f4 .byte.b >mousebuttonhandler ; 08=st mouse 1314 f1ae f4 .byte.b >mousebuttonhandler ; 09=amiga mouse 1315 f1af f1 .byte.b >joybuttonhandler ; 10=atarivox 1316 f1b0 buttonhandlerlo 1317 f1b0 00 .byte.b 0 ; 00=no controller plugged in 1318 f1b1 63 .byte.b $0F means the sound is looped while priority is active 1419 f20e 1420 f20e 05 d9 ora inttemp2 1421 f210 05 d8 ora inttemp1 ; check if F|C|V=0 1422 f212 f0 23 beq zerosfx ; if so, we're at the end of the sound. 1423 f214 1424 f214 advancesfxpointer 1425 f214 ; advance the pointer to the next sound chunk 1426 f214 c8 iny 1427 f215 84 da sty inttemp3 1428 f217 18 clc 1429 f218 b5 4e lda sfx1pointlo,x 1430 f21a 65 da adc inttemp3 1431 f21c 95 4e sta sfx1pointlo,x 1432 f21e b5 50 lda sfx1pointhi,x 1433 f220 69 00 adc #0 1434 f222 95 50 sta sfx1pointhi,x 1435 f224 4c cf f1 jmp servicesfxchannelsloop 1436 f227 1437 f227 sfxsoundloop 1438 f227 48 pha 1439 f228 b5 52 lda sfx1priority,x 1440 f22a d0 04 bne sfxsoundloop_carryon 1441 f22c 68 pla ; fix the stack before we go 1442 f22d 4c 14 f2 jmp advancesfxpointer 1443 f230 sfxsoundloop_carryon 1444 f230 68 pla 1445 f231 29 f0 and #$F0 1446 f233 4a lsr 1447 f234 4a lsr 1448 f235 4a lsr 1449 f236 4a lsr 1450 f237 1451 f237 zerosfx 1452 f237 95 4e sta sfx1pointlo,x 1453 f239 95 50 sta sfx1pointhi,x 1454 f23b 95 52 sta sfx1priority,x 1455 f23d 4c cf f1 jmp servicesfxchannelsloop 1456 f240 1457 f240 1458 f240 schedulesfx 1459 f240 ; called with sfxinstrumentlo=data sfxpitchoffset=pitch-offset sfxnoteindex=note index 1460 f240 a0 00 ldy #0 1461 f242 b1 e0 lda (sfxinstrumentlo),y 1462 f244 - ifconst pokeysupport 1463 f244 - cmp #$20 ; POKEY? 1464 f244 - bne scheduletiasfx 1465 f244 - jmp schedulepokeysfx 1466 f244 endif 1467 f244 scheduletiasfx 1468 f244 ;cmp #$10 ; TIA? 1469 f244 ;beq continuescheduletiasfx 1470 f244 ; rts ; unhandled!!! 1471 f244 continuescheduletiasfx 1472 f244 ifnconst TIASFXMONO 1473 f244 a5 4e lda sfx1pointlo 1474 f246 05 50 ora sfx1pointhi 1475 f248 f0 13 beq schedulesfx1 ;if channel 1 is idle, use it 1476 f24a a5 4f lda sfx2pointlo 1477 f24c 05 51 ora sfx2pointhi 1478 f24e f0 11 beq schedulesfx2 ;if channel 2 is idle, use it 1479 f250 ; Both channels are scheduled. 1480 f250 a0 01 ldy #1 1481 f252 b1 e0 lda (sfxinstrumentlo),y 1482 f254 d0 01 bne interruptsfx 1483 f256 60 rts ; the new sound has 0 priority and both channels are busy. Skip playing it. 1484 f257 interruptsfx 1485 f257 ;Compare which active sound has a lower priority. We'll interrupt the lower one. 1486 f257 a5 52 lda sfx1priority 1487 f259 c5 53 cmp sfx2priority 1488 f25b b0 04 bcs schedulesfx2 1489 f25d endif ; !TIASFXMONO 1490 f25d 1491 f25d schedulesfx1 1492 f25d a2 00 ldx #0 ; channel 1 1493 f25f ifnconst TIASFXMONO 1494 f25f f0 02 beq skipschedulesfx2 1495 f261 schedulesfx2 1496 f261 a2 01 ldx #1 ; channel 2 1497 f263 skipschedulesfx2 1498 f263 endif ; !TIASFXMONO 1499 f263 1500 f263 - ifconst MUSICTRACKER 1501 f263 - lda sfxnoteindex 1502 f263 - bpl skipdrumkitoverride 1503 f263 - and #$7F ; subtract 128 1504 f263 - sec 1505 f263 - sbc #4 ; drums start at 132, i.e. octave 10 1506 f263 - asl 1507 f263 - tay 1508 f263 - lda tiadrumkitdefinition,y 1509 f263 - sta sfxinstrumentlo 1510 f263 - iny 1511 f263 - lda tiadrumkitdefinition,y 1512 f263 - sta sfxinstrumenthi 1513 f263 - lda #0 1514 f263 - sta sfxnoteindex ; and tell the driver it's a non-pitched instrument 1515 f263 -skipdrumkitoverride 1516 f263 endif ; MUSICTRACKER 1517 f263 a0 01 ldy #1 ; get priority and sound-resolution (in frames) 1518 f265 b1 e0 lda (sfxinstrumentlo),y 1519 f267 95 52 sta sfx1priority,x 1520 f269 c8 iny 1521 f26a b1 e0 lda (sfxinstrumentlo),y 1522 f26c 95 56 sta sfx1frames,x 1523 f26e a5 e0 lda sfxinstrumentlo 1524 f270 18 clc 1525 f271 69 03 adc #3 1526 f273 95 4e sta sfx1pointlo,x 1527 f275 a5 e1 lda sfxinstrumenthi 1528 f277 69 00 adc #0 1529 f279 95 50 sta sfx1pointhi,x 1530 f27b a5 e2 lda sfxpitchoffset 1531 f27d 95 54 sta sfx1poffset,x 1532 f27f a9 00 lda #0 1533 f281 95 58 sta sfx1tick,x 1534 f283 a5 e3 lda sfxnoteindex 1535 f285 95 cd sta sfx1notedata,x 1536 f287 60 rts 1537 f288 1538 f288 plotsprite 1539 f288 - ifconst DOUBLEBUFFER 1540 f288 - lda doublebufferstate 1541 f288 - bne skipplotspritewait 1542 f288 endif ; DOUBLEBUFFER 1543 f288 plotspritewait 1544 f288 a5 4d lda visibleover 1545 f28a d0 fc bne plotspritewait 1546 f28c skipplotspritewait 1547 f28c 1548 f28c ;arguments: 1549 f28c ; temp1=lo graphicdata 1550 f28c ; temp2=hi graphicdata 1551 f28c ; temp3=palette | width byte 1552 f28c ; temp4=x 1553 f28c ; temp5=y 1554 f28c ; temp6=mode 1555 f28c a5 46 lda temp5 ;Y position 1556 f28e 4a lsr ; 2 - Divide by 8 or 16 1557 f28f 4a lsr ; 2 1558 f290 4a lsr ; 2 1559 f291 - if WZONEHEIGHT = 16 1560 f291 - lsr ; 2 1561 f291 endif 1562 f291 1563 f291 aa tax 1564 f292 1565 f292 ; the next block allows for vertical masking, and ensures we don't overwrite non-DL memory 1566 f292 1567 f292 c9 18 cmp #WZONECOUNT 1568 f294 1569 f294 90 0a bcc continueplotsprite1 ; the sprite is fully on-screen, so carry on... 1570 f296 ; otherwise, check to see if the bottom half is in zone 0... 1571 f296 1572 f296 - if WZONEHEIGHT = 16 1573 f296 - cmp #15 1574 f296 else 1575 f296 c9 1f cmp #31 1576 f298 endif 1577 f298 1578 f298 d0 05 bne exitplotsprite1 1579 f29a a2 00 ldx #0 1580 f29c 4c db f2 jmp continueplotsprite2 1581 f29f exitplotsprite1 1582 f29f 60 rts 1583 f2a0 1584 f2a0 continueplotsprite1 1585 f2a0 1586 f2a0 bd e7 f5 lda DLPOINTL,x ;Get pointer to DL that this sprite starts in 1587 f2a3 - ifconst DOUBLEBUFFER 1588 f2a3 - clc 1589 f2a3 - adc doublebufferdloffset 1590 f2a3 endif ; DOUBLEBUFFER 1591 f2a3 85 63 sta dlpnt 1592 f2a5 bd cf f5 lda DLPOINTH,x 1593 f2a8 - ifconst DOUBLEBUFFER 1594 f2a8 - adc #0 1595 f2a8 endif ; DOUBLEBUFFER 1596 f2a8 85 64 sta dlpnt+1 1597 f2aa 1598 f2aa ;Create DL entry for upper part of sprite 1599 f2aa 1600 f2aa b4 65 ldy dlend,x ;Get the index to the end of this DL 1601 f2ac 1602 f2ac ifconst CHECKOVERWRITE 1603 f2ac c0 4b cpy #DLLASTOBJ 1604 f2ae f0 1f beq checkcontinueplotsprite2 1605 f2b0 continueplotsprite1a 1606 f2b0 endif 1607 f2b0 1608 f2b0 a5 42 lda temp1 ; graphic data, lo byte 1609 f2b2 91 63 sta (dlpnt),y ;Low byte of data address 1610 f2b4 1611 f2b4 ifnconst ATOMICSPRITEUPDATE 1612 f2b4 c8 iny 1613 f2b5 a5 47 lda temp6 1614 f2b7 91 63 sta (dlpnt),y 1615 f2b9 - else 1616 f2b9 - iny 1617 f2b9 - sty temp8 1618 f2b9 - ;lda #0 1619 f2b9 - ;sta (dlpnt),y 1620 f2b9 endif 1621 f2b9 1622 f2b9 c8 iny 1623 f2ba a5 46 lda temp5 ;Y position 1624 f2bc 1625 f2bc - if WZONEHEIGHT = 16 1626 f2bc - and #$0F 1627 f2bc else ; WZONEHEIGHT = 8 1628 f2bc 29 07 and #$7 1629 f2be endif 1630 f2be 1631 f2be 05 43 ora temp2 ; graphic data, hi byte 1632 f2c0 91 63 sta (dlpnt),y 1633 f2c2 1634 f2c2 c8 iny 1635 f2c3 a5 44 lda temp3 ;palette|width 1636 f2c5 91 63 sta (dlpnt),y 1637 f2c7 1638 f2c7 c8 iny 1639 f2c8 a5 45 lda temp4 ;Horizontal position 1640 f2ca 91 63 sta (dlpnt),y 1641 f2cc 1642 f2cc c8 iny 1643 f2cd 94 65 sty dlend,x 1644 f2cf 1645 f2cf - ifconst ATOMICSPRITEUPDATE 1646 f2cf - ldy temp8 1647 f2cf - lda temp6 1648 f2cf - sta (dlpnt),y 1649 f2cf endif 1650 f2cf checkcontinueplotsprite2 1651 f2cf 1652 f2cf a5 46 lda temp5 1653 f2d1 29 07 and #(WZONEHEIGHT-1) 1654 f2d3 1655 f2d3 f0 3d beq doneSPDL ;branch if it is 1656 f2d5 1657 f2d5 ;Create DL entry for lower part of sprite 1658 f2d5 1659 f2d5 e8 inx ;Next region 1660 f2d6 1661 f2d6 e0 18 cpx #WZONECOUNT 1662 f2d8 1663 f2d8 90 01 bcc continueplotsprite2 ; the second half of the sprite is fully on-screen, so carry on... 1664 f2da 60 rts 1665 f2db continueplotsprite2 1666 f2db 1667 f2db bd e7 f5 lda DLPOINTL,x ;Get pointer to next DL 1668 f2de - ifconst DOUBLEBUFFER 1669 f2de - clc 1670 f2de - adc doublebufferdloffset 1671 f2de endif ; DOUBLEBUFFER 1672 f2de 85 63 sta dlpnt 1673 f2e0 bd cf f5 lda DLPOINTH,x 1674 f2e3 - ifconst DOUBLEBUFFER 1675 f2e3 - adc #0 1676 f2e3 endif ; DOUBLEBUFFER 1677 f2e3 85 64 sta dlpnt+1 1678 f2e5 b4 65 ldy dlend,x ;Get the index to the end of this DL 1679 f2e7 1680 f2e7 ifconst CHECKOVERWRITE 1681 f2e7 c0 4b cpy #DLLASTOBJ 1682 f2e9 d0 01 bne continueplotsprite2a 1683 f2eb 60 rts 1684 f2ec continueplotsprite2a 1685 f2ec endif 1686 f2ec 1687 f2ec a5 42 lda temp1 ; graphic data, lo byte 1688 f2ee 91 63 sta (dlpnt),y 1689 f2f0 1690 f2f0 ifnconst ATOMICSPRITEUPDATE 1691 f2f0 c8 iny 1692 f2f1 a5 47 lda temp6 1693 f2f3 91 63 sta (dlpnt),y 1694 f2f5 - else 1695 f2f5 - iny 1696 f2f5 - sty temp8 1697 f2f5 - ;lda #0 1698 f2f5 - ;sta (dlpnt),y 1699 f2f5 endif 1700 f2f5 1701 f2f5 c8 iny 1702 f2f6 a5 46 lda temp5 ;Y position 1703 f2f8 1704 f2f8 - if WZONEHEIGHT = 16 1705 f2f8 - and #$0F 1706 f2f8 - eor #$0F 1707 f2f8 endif 1708 f2f8 if WZONEHEIGHT = 8 1709 f2f8 29 07 and #$07 1710 f2fa 49 07 eor #$07 1711 f2fc endif 1712 f2fc 1713 f2fc 85 4a sta temp9 1714 f2fe a5 43 lda temp2 ; graphic data, hi byte 1715 f300 18 clc 1716 f301 e5 4a sbc temp9 1717 f303 91 63 sta (dlpnt),y 1718 f305 1719 f305 c8 iny 1720 f306 a5 44 lda temp3 ;palette|width 1721 f308 91 63 sta (dlpnt),y 1722 f30a 1723 f30a c8 iny 1724 f30b a5 45 lda temp4 ;Horizontal position 1725 f30d 91 63 sta (dlpnt),y 1726 f30f 1727 f30f c8 iny 1728 f310 94 65 sty dlend,x 1729 f312 1730 f312 - ifconst ATOMICSPRITEUPDATE 1731 f312 - ldy temp8 1732 f312 - lda temp6 1733 f312 - sta (dlpnt),y 1734 f312 endif 1735 f312 1736 f312 doneSPDL 1737 f312 60 rts 1738 f313 1739 f313 lockzonex 1740 f313 - ifconst ZONELOCKS 1741 f313 - ldy dlend,x 1742 f313 - cpy #DLLASTOBJ 1743 f313 - beq lockzonexreturn ; the zone is either stuffed or locked. abort! 1744 f313 - lda DLPOINTL,x 1745 f313 - ifconst DOUBLEBUFFER 1746 f313 - clc 1747 f313 - adc doublebufferdloffset 1748 f313 - endif ; DOUBLEBUFFER 1749 f313 - sta dlpnt 1750 f313 - lda DLPOINTH,x 1751 f313 - ifconst DOUBLEBUFFER 1752 f313 - adc #0 1753 f313 - endif ; DOUBLEBUFFER 1754 f313 - sta dlpnt+1 1755 f313 - iny 1756 f313 - lda #0 1757 f313 - sta (dlpnt),y 1758 f313 - dey 1759 f313 - tya 1760 f313 - ldy #(DLLASTOBJ-1) 1761 f313 - sta (dlpnt),y 1762 f313 - iny 1763 f313 - sty dlend,x 1764 f313 -lockzonexreturn 1765 f313 - rts 1766 f313 endif ; ZONELOCKS 1767 f313 unlockzonex 1768 f313 - ifconst ZONELOCKS 1769 f313 - ldy dlend,x 1770 f313 - cpy #DLLASTOBJ 1771 f313 - bne unlockzonexreturn ; if the zone isn't stuffed, it's not locked. abort! 1772 f313 - lda DLPOINTL,x 1773 f313 - ifconst DOUBLEBUFFER 1774 f313 - clc 1775 f313 - adc doublebufferdloffset 1776 f313 - endif ; DOUBLEBUFFER 1777 f313 - sta dlpnt 1778 f313 - lda DLPOINTH,x 1779 f313 - ifconst DOUBLEBUFFER 1780 f313 - adc #0 1781 f313 - endif ; DOUBLEBUFFER 1782 f313 - sta dlpnt+1 1783 f313 - dey 1784 f313 - ;ldy #(DLLASTOBJ-1) 1785 f313 - lda (dlpnt),y 1786 f313 - tay 1787 f313 - sty dlend,x 1788 f313 -unlockzonexreturn 1789 f313 endif ; ZONELOCKS 1790 f313 60 rts 1791 f314 1792 f314 plotcharloop 1793 f314 ; ** read from a data indirectly pointed to from temp8,temp9 1794 f314 ; ** format is: lo_data, hi_data, palette|width, x, y 1795 f314 ; ** format ends with lo_data | hi_data = 0 1796 f314 1797 f314 - ifconst DOUBLEBUFFER 1798 f314 - lda doublebufferstate 1799 f314 - bne skipplotcharloopwait 1800 f314 endif ; DOUBLEBUFFER 1801 f314 plotcharloopwait 1802 f314 a5 4d lda visibleover 1803 f316 d0 fc bne plotcharloopwait 1804 f318 skipplotcharloopwait 1805 f318 plotcharlooploop 1806 f318 a0 00 ldy #0 1807 f31a b1 49 lda (temp8),y 1808 f31c 85 42 sta temp1 1809 f31e c8 iny 1810 f31f b1 49 lda (temp8),y 1811 f321 85 43 sta temp2 1812 f323 05 42 ora temp1 1813 f325 d0 01 bne plotcharloopcontinue 1814 f327 ;the pointer=0, so return 1815 f327 60 rts 1816 f328 plotcharloopcontinue 1817 f328 c8 iny 1818 f329 b1 49 lda (temp8),y 1819 f32b 85 44 sta temp3 1820 f32d c8 iny 1821 f32e b1 49 lda (temp8),y 1822 f330 85 45 sta temp4 1823 f332 c8 iny 1824 f333 b1 49 lda (temp8),y 1825 f335 ;sta temp5 ; not needed with our late entry. 1826 f335 20 4e f3 jsr plotcharactersskipentry 1827 f338 a5 49 lda temp8 1828 f33a 18 clc 1829 f33b 69 05 adc #5 1830 f33d 85 49 sta temp8 1831 f33f a5 4a lda temp9 1832 f341 69 00 adc #0 1833 f343 85 4a sta temp9 1834 f345 4c 18 f3 jmp plotcharlooploop 1835 f348 1836 f348 plotcharacters 1837 f348 - ifconst DOUBLEBUFFER 1838 f348 - lda doublebufferstate 1839 f348 - bne skipplotcharacterswait 1840 f348 endif ; DOUBLEBUFFER 1841 f348 plotcharacterswait 1842 f348 a5 4d lda visibleover 1843 f34a d0 fc bne plotcharacterswait 1844 f34c skipplotcharacterswait 1845 f34c ;arguments: 1846 f34c ; temp1=lo charactermap 1847 f34c ; temp2=hi charactermap 1848 f34c ; temp3=palette | width byte 1849 f34c ; temp4=x 1850 f34c ; temp5=y 1851 f34c 1852 f34c a5 46 lda temp5 ;Y position 1853 f34e 1854 f34e plotcharactersskipentry 1855 f34e 1856 f34e ;ifconst ZONEHEIGHT 1857 f34e ; if ZONEHEIGHT = 16 1858 f34e ; and #$0F 1859 f34e ; endif 1860 f34e ; if ZONEHEIGHT = 8 1861 f34e ; and #$1F 1862 f34e ; endif 1863 f34e ;else 1864 f34e ; and #$0F 1865 f34e ;endif 1866 f34e 1867 f34e aa tax 1868 f34f bd e7 f5 lda DLPOINTL,x ;Get pointer to DL that the characters are in 1869 f352 - ifconst DOUBLEBUFFER 1870 f352 - clc 1871 f352 - adc doublebufferdloffset 1872 f352 endif ; DOUBLEBUFFER 1873 f352 85 63 sta dlpnt 1874 f354 bd cf f5 lda DLPOINTH,x 1875 f357 - ifconst DOUBLEBUFFER 1876 f357 - adc #0 1877 f357 endif ; DOUBLEBUFFER 1878 f357 85 64 sta dlpnt+1 1879 f359 1880 f359 ;Create DL entry for the characters 1881 f359 1882 f359 b4 65 ldy dlend,x ;Get the index to the end of this DL 1883 f35b 1884 f35b ifconst CHECKOVERWRITE 1885 f35b c0 4b cpy #DLLASTOBJ 1886 f35d d0 01 bne continueplotcharacters 1887 f35f 60 rts 1888 f360 continueplotcharacters 1889 f360 endif 1890 f360 1891 f360 a5 42 lda temp1 ; character map data, lo byte 1892 f362 91 63 sta (dlpnt),y ;(1) store low address 1893 f364 1894 f364 c8 iny 1895 f365 ad 06 21 lda charactermode 1896 f368 91 63 sta (dlpnt),y ;(2) store mode 1897 f36a 1898 f36a c8 iny 1899 f36b a5 43 lda temp2 ; character map, hi byte 1900 f36d 91 63 sta (dlpnt),y ;(3) store high address 1901 f36f 1902 f36f c8 iny 1903 f370 a5 44 lda temp3 ;palette|width 1904 f372 91 63 sta (dlpnt),y ;(4) store palette|width 1905 f374 1906 f374 c8 iny 1907 f375 a5 45 lda temp4 ;Horizontal position 1908 f377 91 63 sta (dlpnt),y ;(5) store horizontal position 1909 f379 1910 f379 c8 iny 1911 f37a 94 65 sty dlend,x ; save display list end byte 1912 f37c 60 rts 1913 f37d 1914 f37d 1915 f37d - ifconst plotvalueonscreen 1916 f37d -plotcharacterslive 1917 f37d - ; a version of plotcharacters that draws live and minimally disrupts the screen... 1918 f37d - 1919 f37d - ;arguments: 1920 f37d - ; temp1=lo charactermap 1921 f37d - ; temp2=hi charactermap 1922 f37d - ; temp3=palette | width byte 1923 f37d - ; temp4=x 1924 f37d - ; temp5=y 1925 f37d - 1926 f37d - lda temp5 ;Y position 1927 f37d - 1928 f37d - tax 1929 f37d - lda DLPOINTL,x ;Get pointer to DL that the characters are in 1930 f37d - ifconst DOUBLEBUFFER 1931 f37d - clc 1932 f37d - adc doublebufferdloffset 1933 f37d - endif ; DOUBLEBUFFER 1934 f37d - sta dlpnt 1935 f37d - lda DLPOINTH,x 1936 f37d - ifconst DOUBLEBUFFER 1937 f37d - adc #0 1938 f37d - endif ; DOUBLEBUFFER 1939 f37d - sta dlpnt+1 1940 f37d - 1941 f37d - ;Create DL entry for the characters 1942 f37d - 1943 f37d - ldy dlend,x ;Get the index to the end of this DL 1944 f37d - 1945 f37d - ifconst CHECKOVERWRITE 1946 f37d - cpy #DLLASTOBJ 1947 f37d - bne continueplotcharacterslive 1948 f37d - rts 1949 f37d -continueplotcharacterslive 1950 f37d - endif 1951 f37d - 1952 f37d - lda temp1 ; character map data, lo byte 1953 f37d - sta (dlpnt),y ;(1) store low address 1954 f37d - 1955 f37d - iny 1956 f37d - ; we don't add the second byte yet, since the charmap could briefly 1957 f37d - ; render without a proper character map address, width, or position. 1958 f37d - lda charactermode 1959 f37d - sta (dlpnt),y ;(2) store mode 1960 f37d - 1961 f37d - iny 1962 f37d - lda temp2 ; character map, hi byte 1963 f37d - sta (dlpnt),y ;(3) store high address 1964 f37d - 1965 f37d - iny 1966 f37d - lda temp3 ;palette|width 1967 f37d - sta (dlpnt),y ;(4) store palette|width 1968 f37d - 1969 f37d - iny 1970 f37d - lda temp4 ;Horizontal position 1971 f37d - sta (dlpnt),y ;(5) store horizontal position 1972 f37d - 1973 f37d - iny 1974 f37d - sty dlend,x ; save display list end byte 1975 f37d - 1976 f37d - rts 1977 f37d endif ;plotcharacterslive 1978 f37d 1979 f37d - ifconst USED_PLOTVALUE 1980 f37d -plotvalue 1981 f37d - ; calling 7800basic command: 1982 f37d - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 1983 f37d - ; ...displays the variable as BCD digits 1984 f37d - ; 1985 f37d - ; asm sub arguments: 1986 f37d - ; temp1=lo charactermap 1987 f37d - ; temp2=hi charactermap 1988 f37d - ; temp3=palette | width byte 1989 f37d - ; temp4=x 1990 f37d - ; temp5=y 1991 f37d - ; temp6=number of digits 1992 f37d - ; temp7=lo variable 1993 f37d - ; temp8=hi variable 1994 f37d - ; temp9=character mode 1995 f37d - 1996 f37d -plotdigitcount = temp6 1997 f37d - 1998 f37d - ifconst ZONELOCKS 1999 f37d - ldx temp5 2000 f37d - ldy dlend,x 2001 f37d - cpy #DLLASTOBJ 2002 f37d - bne carryonplotvalue 2003 f37d - rts 2004 f37d -carryonplotvalue 2005 f37d - endif 2006 f37d - 2007 f37d - lda #0 2008 f37d - tay 2009 f37d - ldx valbufend 2010 f37d - 2011 f37d - lda plotdigitcount 2012 f37d - and #1 2013 f37d - beq pvnibble2char 2014 f37d - lda #0 2015 f37d - sta VALBUFFER,x ; just in case we skip this digit 2016 f37d - beq pvnibble2char_skipnibble 2017 f37d - 2018 f37d -pvnibble2char 2019 f37d - ; high nibble... 2020 f37d - lda (temp7),y 2021 f37d - and #$f0 2022 f37d - lsr 2023 f37d - lsr 2024 f37d - lsr 2025 f37d - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 2026 f37d - lsr 2027 f37d - endif 2028 f37d - 2029 f37d - clc 2030 f37d - adc temp1 ; add the offset to character graphics to our value 2031 f37d - sta VALBUFFER,x 2032 f37d - inx 2033 f37d - dec plotdigitcount 2034 f37d - 2035 f37d -pvnibble2char_skipnibble 2036 f37d - ; low nibble... 2037 f37d - lda (temp7),y 2038 f37d - and #$0f 2039 f37d - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 2040 f37d - asl 2041 f37d - endif 2042 f37d - clc 2043 f37d - adc temp1 ; add the offset to character graphics to our value 2044 f37d - sta VALBUFFER,x 2045 f37d - inx 2046 f37d - iny 2047 f37d - 2048 f37d - dec plotdigitcount 2049 f37d - bne pvnibble2char 2050 f37d - 2051 f37d - ;point to the start of our valuebuffer 2052 f37d - clc 2053 f37d - lda #VALBUFFER 2057 f37d - adc #0 2058 f37d - sta temp2 2059 f37d - 2060 f37d - ;advance valbufend to the end of our value buffer 2061 f37d - stx valbufend 2062 f37d - 2063 f37d - ifnconst plotvalueonscreen 2064 f37d - jmp plotcharacters 2065 f37d - else 2066 f37d - jmp plotcharacterslive 2067 f37d - endif 2068 f37d - 2069 f37d endif ; USED_PLOTVALUE 2070 f37d 2071 f37d 2072 f37d - ifconst USED_PLOTVALUEEXTRA 2073 f37d -plotdigitcount = temp6 2074 f37d -plotvalueextra 2075 f37d - ; calling 7800basic command: 2076 f37d - ; plotvalue digit_gfx palette variable/data number_of_digits screen_x screen_y 2077 f37d - ; ...displays the variable as BCD digits 2078 f37d - ; 2079 f37d - ; asm sub arguments: 2080 f37d - ; temp1=lo charactermap 2081 f37d - ; temp2=hi charactermap 2082 f37d - ; temp3=palette | width byte 2083 f37d - ; temp4=x 2084 f37d - ; temp5=y 2085 f37d - ; temp6=number of digits 2086 f37d - ; temp7=lo variable 2087 f37d - ; temp8=hi variable 2088 f37d - 2089 f37d - lda #0 2090 f37d - tay 2091 f37d - ldx valbufend 2092 f37d - ifnconst plotvalueonscreen 2093 f37d - sta VALBUFFER,x 2094 f37d - endif 2095 f37d - 2096 f37d - lda plotdigitcount 2097 f37d - and #1 2098 f37d - 2099 f37d - bne pvnibble2char_skipnibbleextra 2100 f37d - 2101 f37d -pvnibble2charextra 2102 f37d - ; high nibble... 2103 f37d - lda (temp7),y 2104 f37d - and #$f0 2105 f37d - lsr 2106 f37d - lsr 2107 f37d - ifnconst DOUBLEWIDE ; multiply value by 2 for double-width 2108 f37d - lsr 2109 f37d - endif 2110 f37d - clc 2111 f37d - adc temp1 ; add the offset to character graphics to our value 2112 f37d - sta VALBUFFER,x 2113 f37d - inx 2114 f37d - 2115 f37d - ; second half of the digit 2116 f37d - clc 2117 f37d - adc #1 2118 f37d - sta VALBUFFER,x 2119 f37d - inx 2120 f37d - 2121 f37d -pvnibble2char_skipnibbleextra 2122 f37d - ; low nibble... 2123 f37d - lda (temp7),y 2124 f37d - and #$0f 2125 f37d - ifconst DOUBLEWIDE ; multiply value by 2 for double-width 2126 f37d - asl 2127 f37d - endif 2128 f37d - asl 2129 f37d - 2130 f37d - clc 2131 f37d - adc temp1 ; add the offset to character graphics to our value 2132 f37d - sta VALBUFFER,x 2133 f37d - inx 2134 f37d - 2135 f37d - clc 2136 f37d - adc #1 2137 f37d - sta VALBUFFER,x 2138 f37d - inx 2139 f37d - iny 2140 f37d - 2141 f37d - dec plotdigitcount 2142 f37d - bne pvnibble2charextra 2143 f37d - 2144 f37d - ;point to the start of our valuebuffer 2145 f37d - clc 2146 f37d - lda #VALBUFFER 2150 f37d - adc #0 2151 f37d - sta temp2 2152 f37d - 2153 f37d - ;advance valbufend to the end of our value buffer 2154 f37d - stx valbufend 2155 f37d - 2156 f37d - ifnconst plotvalueonscreen 2157 f37d - jmp plotcharacters 2158 f37d - else 2159 f37d - jmp plotcharacterslive 2160 f37d - endif 2161 f37d endif ; USED_PLOTVALUEEXTRA 2162 f37d 2163 f37d boxcollision 2164 f37d ; the worst case cycle-time for the code below is 43 cycles. 2165 f37d ; unfortunately, prior to getting here we've burned 44 cycles in argument setup. eep! 2166 f37d 2167 f37d ;__boxx1 = accumulator 2168 f37d ;__boxy1 = y 2169 f37d 00 44 __boxw1 = temp3 2170 f37d 00 45 __boxh1 = temp4 2171 f37d 2172 f37d 00 46 __boxx2 = temp5 2173 f37d 00 47 __boxy2 = temp6 2174 f37d 00 48 __boxw2 = temp7 2175 f37d 00 49 __boxh2 = temp8 2176 f37d 2177 f37d DoXCollisionCheck 2178 f37d ;lda __boxx1 ; skipped. already in the accumulator 2179 f37d c5 46 cmp __boxx2 ;3 2180 f37f b0 07 bcs X1isbiggerthanX2 ;2/3 2181 f381 X2isbiggerthanX1 2182 f381 ; carry is clear 2183 f381 65 44 adc __boxw1 ;3 2184 f383 c5 46 cmp __boxx2 ;3 2185 f385 b0 08 bcs DoYCollisionCheck ;3/2 2186 f387 60 rts ;6 - carry clear, no collision 2187 f388 X1isbiggerthanX2 2188 f388 18 clc ;2 2189 f389 e5 48 sbc __boxw2 ;3 2190 f38b c5 46 cmp __boxx2 ;3 2191 f38d b0 13 bcs noboxcollision ;3/2 2192 f38f DoYCollisionCheck 2193 f38f 98 tya ; 2 ; use to be "lda __boxy1" 2194 f390 c5 47 cmp __boxy2 ;3 2195 f392 b0 05 bcs Y1isbiggerthanY2 ;3/2 2196 f394 Y2isbiggerthanY1 2197 f394 ; carry is clear 2198 f394 65 45 adc __boxh1 ;3 2199 f396 c5 47 cmp __boxy2 ;3 2200 f398 60 rts ;6 2201 f399 Y1isbiggerthanY2 2202 f399 18 clc ;2 2203 f39a e5 49 sbc __boxh2 ;3 2204 f39c c5 47 cmp __boxy2 ;3 2205 f39e b0 02 bcs noboxcollision ;3/2 2206 f3a0 yesboxcollision 2207 f3a0 38 sec ;2 2208 f3a1 60 rts ;6 2209 f3a2 noboxcollision 2210 f3a2 18 clc ;2 2211 f3a3 60 rts ;6 2212 f3a4 2213 f3a4 randomize 2214 f3a4 a5 40 lda rand 2215 f3a6 4a lsr 2216 f3a7 26 41 rol rand16 2217 f3a9 90 02 bcc noeor 2218 f3ab 49 b4 eor #$B4 2219 f3ad noeor 2220 f3ad 85 40 sta rand 2221 f3af 45 41 eor rand16 2222 f3b1 60 rts 2223 f3b2 2224 f3b2 ; bcd conversion routine courtesy Omegamatrix 2225 f3b2 ; http://atariage.com/forums/blog/563/entry-10832-hex-to-bcd-conversion-0-99/ 2226 f3b2 converttobcd 2227 f3b2 ;value to convert is in the accumulator 2228 f3b2 85 42 sta temp1 2229 f3b4 4a lsr 2230 f3b5 65 42 adc temp1 2231 f3b7 6a ror 2232 f3b8 4a lsr 2233 f3b9 4a lsr 2234 f3ba 65 42 adc temp1 2235 f3bc 6a ror 2236 f3bd 65 42 adc temp1 2237 f3bf 6a ror 2238 f3c0 4a lsr 2239 f3c1 29 3c and #$3C 2240 f3c3 85 43 sta temp2 2241 f3c5 4a lsr 2242 f3c6 65 43 adc temp2 2243 f3c8 65 42 adc temp1 2244 f3ca 60 rts ; return the result in the accumulator 2245 f3cb 2246 f3cb ; Y and A contain multiplicands, result in A 2247 f3cb mul8 2248 f3cb 84 42 sty temp1 2249 f3cd 85 43 sta temp2 2250 f3cf a9 00 lda #0 2251 f3d1 reptmul8 2252 f3d1 46 43 lsr temp2 2253 f3d3 90 03 bcc skipmul8 2254 f3d5 18 clc 2255 f3d6 65 42 adc temp1 2256 f3d8 ;bcs donemul8 might save cycles? 2257 f3d8 skipmul8 2258 f3d8 ;beq donemul8 might save cycles? 2259 f3d8 06 42 asl temp1 2260 f3da d0 f5 bne reptmul8 2261 f3dc donemul8 2262 f3dc 60 rts 2263 f3dd 2264 f3dd div8 2265 f3dd ; A=numerator Y=denominator, result in A 2266 f3dd c0 02 cpy #2 2267 f3df 90 0a bcc div8end+1 ;div by 0 = bad, div by 1=no calc needed, so bail out 2268 f3e1 84 42 sty temp1 2269 f3e3 a0 ff ldy #$ff 2270 f3e5 div8loop 2271 f3e5 e5 42 sbc temp1 2272 f3e7 c8 iny 2273 f3e8 b0 fb bcs div8loop 2274 f3ea div8end 2275 f3ea 98 tya 2276 f3eb ; result in A 2277 f3eb 60 rts 2278 f3ec 2279 f3ec ; Y and A contain multiplicands, result in temp2,A=low, temp1=high 2280 f3ec mul16 2281 f3ec 84 42 sty temp1 2282 f3ee 85 43 sta temp2 2283 f3f0 2284 f3f0 a9 00 lda #0 2285 f3f2 a2 08 ldx #8 2286 f3f4 46 42 lsr temp1 2287 f3f6 mul16_1 2288 f3f6 90 03 bcc mul16_2 2289 f3f8 18 clc 2290 f3f9 65 43 adc temp2 2291 f3fb mul16_2 2292 f3fb 6a ror 2293 f3fc 66 42 ror temp1 2294 f3fe ca dex 2295 f3ff d0 f5 bne mul16_1 2296 f401 85 43 sta temp2 2297 f403 60 rts 2298 f404 2299 f404 ; div int/int 2300 f404 ; numerator in A, denom in temp1 2301 f404 ; returns with quotient in A, remainder in temp1 2302 f404 div16 2303 f404 85 43 sta temp2 2304 f406 84 42 sty temp1 2305 f408 a9 00 lda #0 2306 f40a a2 08 ldx #8 2307 f40c 06 43 asl temp2 2308 f40e div16_1 2309 f40e 2a rol 2310 f40f c5 42 cmp temp1 2311 f411 90 02 bcc div16_2 2312 f413 e5 42 sbc temp1 2313 f415 div16_2 2314 f415 26 43 rol temp2 2315 f417 ca dex 2316 f418 d0 f4 bne div16_1 2317 f41a 85 42 sta temp1 2318 f41c a5 43 lda temp2 2319 f41e 60 rts 2320 f41f 2321 f41f - ifconst bankswitchmode 2322 f41f -BS_jsr 2323 f41f - ifconst MCPDEVCART 2324 f41f - ora #$18 2325 f41f - sta $3000 2326 f41f - else 2327 f41f - sta $8000 2328 f41f - endif 2329 f41f - pla 2330 f41f - tax 2331 f41f - pla 2332 f41f - rts 2333 f41f - 2334 f41f -BS_return 2335 f41f - pla ; bankswitch bank 2336 f41f - ifconst BANKRAM 2337 f41f - sta currentbank 2338 f41f - ora currentrambank 2339 f41f - endif 2340 f41f - ifconst MCPDEVCART 2341 f41f - ora #$18 2342 f41f - sta $3000 2343 f41f - else 2344 f41f - sta $8000 2345 f41f - endif 2346 f41f - pla ; bankswitch $0 flag 2347 f41f - rts 2348 f41f endif 2349 f41f 2350 f41f checkselectswitch 2351 f41f ad 82 02 lda SWCHB ; first check the real select switch... 2352 f422 29 02 and #%00000010 2353 f424 ifnconst MOUSESUPPORT 2354 f424 f0 05 beq checkselectswitchreturn ; switch is pressed 2355 f426 ad 80 02 lda SWCHA ; then check the soft "select" joysick code... 2356 f429 29 b0 and #%10110000 ; R_DU 2357 f42b endif ; MOUSESUPPORT 2358 f42b checkselectswitchreturn 2359 f42b 60 rts 2360 f42c 2361 f42c checkresetswitch 2362 f42c ad 82 02 lda SWCHB ; first check the real reset switch... 2363 f42f 29 01 and #%00000001 2364 f431 ifnconst MOUSESUPPORT 2365 f431 f0 05 beq checkresetswitchreturn ; switch is pressed 2366 f433 ad 80 02 lda SWCHA ; then check the soft "reset" joysick code... 2367 f436 29 70 and #%01110000 ; _LDU 2368 f438 endif ; MOUSESUPPORT 2369 f438 checkresetswitchreturn 2370 f438 60 rts 2371 f439 2372 f439 - ifconst FINESCROLLENABLED 2373 f439 -finescrolldlls 2374 f439 - ldx temp1 ; first DLL index x3 2375 f439 - lda DLLMEM,x 2376 f439 - and #%11110000 2377 f439 - ora finescrolly 2378 f439 - sta DLLMEM,x 2379 f439 - 2380 f439 - ldx temp2 ; last DLL index x3 2381 f439 - lda DLLMEM,x 2382 f439 - and #%11110000 2383 f439 - ora finescrolly 2384 f439 - eor #(WZONEHEIGHT-1) 2385 f439 - sta DLLMEM,x 2386 f439 - rts 2387 f439 endif ; FINESCROLLENABLED 2388 f439 2389 f439 - ifconst USED_ADJUSTVISIBLE 2390 f439 -adjustvisible 2391 f439 - ; called with temp1=first visible zone *3, temp2=last visible zone *3 2392 f439 - jsr waitforvblankstart ; ensure vblank just started 2393 f439 - ldx visibleDLLstart 2394 f439 -findfirstinterrupt 2395 f439 - lda DLLMEM,x 2396 f439 - bmi foundfirstinterrupt 2397 f439 - inx 2398 f439 - inx 2399 f439 - inx 2400 f439 - bne findfirstinterrupt 2401 f439 -foundfirstinterrupt 2402 f439 - and #%01111111 ; clear the interrupt bit 2403 f439 - sta DLLMEM,x 2404 f439 - ifconst DOUBLEBUFFER 2405 f439 - sta DLLMEM+DBOFFSET,x 2406 f439 - endif ; DOUBLEBUFFER 2407 f439 - ldx overscanDLLstart 2408 f439 -findlastinterrupt 2409 f439 - lda DLLMEM,x 2410 f439 - bmi foundlastinterrupt 2411 f439 - dex 2412 f439 - dex 2413 f439 - dex 2414 f439 - bne findlastinterrupt 2415 f439 -foundlastinterrupt 2416 f439 - and #%01111111 ; clear the interrupt bit 2417 f439 - sta DLLMEM,x 2418 f439 - ifconst DOUBLEBUFFER 2419 f439 - sta DLLMEM+DBOFFSET,x 2420 f439 - endif ; DOUBLEBUFFER 2421 f439 - ;now we need to set the new interrupts 2422 f439 - clc 2423 f439 - lda temp1 2424 f439 - adc visibleDLLstart 2425 f439 - tax 2426 f439 - lda DLLMEM,x 2427 f439 - ora #%10000000 2428 f439 - sta DLLMEM,x 2429 f439 - ifconst DOUBLEBUFFER 2430 f439 - sta DLLMEM+DBOFFSET,x 2431 f439 - endif ; DOUBLEBUFFER 2432 f439 - clc 2433 f439 - lda temp2 2434 f439 - adc visibleDLLstart 2435 f439 - tax 2436 f439 - lda DLLMEM,x 2437 f439 - ora #%10000000 2438 f439 - sta DLLMEM,x 2439 f439 - ifconst DOUBLEBUFFER 2440 f439 - sta DLLMEM+DBOFFSET,x 2441 f439 - endif ; DOUBLEBUFFER 2442 f439 - jsr vblankresync 2443 f439 - rts 2444 f439 endif ; USED_ADJUSTVISIBLE 2445 f439 2446 f439 vblankresync 2447 f439 20 d7 f4 jsr waitforvblankstart ; ensure vblank just started 2448 f43c a9 00 lda #0 2449 f43e 85 4d sta visibleover 2450 f440 a9 03 lda #3 2451 f442 8d b2 01 sta interruptindex 2452 f445 60 rts 2453 f446 2454 f446 createallgamedlls 2455 f446 a2 00 ldx #0 2456 f448 a9 19 lda #NVLINES 2457 f44a ac 09 21 ldy paldetected 2458 f44d f0 03 beq skipcreatePALpadding 2459 f44f 18 clc 2460 f450 69 15 adc #21 2461 f452 skipcreatePALpadding 2462 f452 20 87 f4 jsr createnonvisibledlls 2463 f455 8e 3c 21 stx visibleDLLstart 2464 f458 20 b8 f4 jsr createvisiblezones 2465 f45b 8e 3d 21 stx overscanDLLstart 2466 f45e createallgamedllscontinue 2467 f45e a9 50 lda #(NVLINES+55) ; extras for PAL 2468 f460 20 87 f4 jsr createnonvisibledlls 2469 f463 2470 f463 ae 3c 21 ldx visibleDLLstart 2471 f466 bd 00 18 lda DLLMEM,x 2472 f469 09 80 ora #%10000000 ; NMI 1 - start of visible screen 2473 f46b 9d 00 18 sta DLLMEM,x 2474 f46e - ifconst DOUBLEBUFFER 2475 f46e - sta DLLMEM+DBOFFSET,x 2476 f46e endif ; DOUBLEBUFFER 2477 f46e 2478 f46e ae 3d 21 ldx overscanDLLstart 2479 f471 bd 00 18 lda DLLMEM,x 2480 f474 09 83 ora #%10000011 ; NMI 2 - end of visible screen 2481 f476 29 f3 and #%11110011 ; change this to a 1-line DLL, so there's time enough for the "deeper overscan" DLL 2482 f478 9d 00 18 sta DLLMEM,x 2483 f47b - ifconst DOUBLEBUFFER 2484 f47b - sta DLLMEM+DBOFFSET,x 2485 f47b endif ; DOUBLEBUFFER 2486 f47b 2487 f47b e8 inx 2488 f47c e8 inx 2489 f47d e8 inx 2490 f47e 2491 f47e bd 00 18 lda DLLMEM,x 2492 f481 09 80 ora #%10000000 ; NMI 3 - deeper overscan 2493 f483 9d 00 18 sta DLLMEM,x 2494 f486 - ifconst DOUBLEBUFFER 2495 f486 - sta DLLMEM+DBOFFSET,x 2496 f486 endif ; DOUBLEBUFFER 2497 f486 2498 f486 60 rts 2499 f487 2500 f487 createnonvisibledlls 2501 f487 85 42 sta temp1 2502 f489 4a lsr 2503 f48a 4a lsr 2504 f48b 4a lsr 2505 f48c 4a lsr ; /16 2506 f48d f0 09 beq skipcreatenonvisibledlls1loop 2507 f48f a8 tay 2508 f490 createnonvisibledlls1loop 2509 f490 a9 4f lda #%01001111 ;low nibble=16 lines, high nibble=Holey DMA 2510 f492 20 a7 f4 jsr createblankdllentry 2511 f495 88 dey 2512 f496 d0 f8 bne createnonvisibledlls1loop 2513 f498 skipcreatenonvisibledlls1loop 2514 f498 a5 42 lda temp1 2515 f49a 29 0f and #%00001111 2516 f49c f0 08 beq createnonvisibledllsreturn 2517 f49e 38 sec 2518 f49f e9 01 sbc #1 2519 f4a1 09 40 ora #%01000000 2520 f4a3 20 a7 f4 jsr createblankdllentry 2521 f4a6 createnonvisibledllsreturn 2522 f4a6 60 rts 2523 f4a7 2524 f4a7 createblankdllentry 2525 f4a7 9d 00 18 sta DLLMEM,x 2526 f4aa - ifconst DOUBLEBUFFER 2527 f4aa - sta DLLMEM+DBOFFSET,x 2528 f4aa endif ; DOUBLEBUFFER 2529 f4aa e8 inx 2530 f4ab a9 21 lda #$21 ; blank 2531 f4ad 9d 00 18 sta DLLMEM,x 2532 f4b0 - ifconst DOUBLEBUFFER 2533 f4b0 - sta DLLMEM+DBOFFSET,x 2534 f4b0 endif ; DOUBLEBUFFER 2535 f4b0 e8 inx 2536 f4b1 a9 00 lda #$00 2537 f4b3 9d 00 18 sta DLLMEM,x 2538 f4b6 - ifconst DOUBLEBUFFER 2539 f4b6 - sta DLLMEM+DBOFFSET,x 2540 f4b6 endif ; DOUBLEBUFFER 2541 f4b6 e8 inx 2542 f4b7 60 rts 2543 f4b8 2544 f4b8 createvisiblezones 2545 f4b8 a0 00 ldy #0 2546 f4ba createvisiblezonesloop 2547 f4ba b9 ff f5 lda.w DLHEIGHT,y 2548 f4bd 09 20 ora #(WZONEHEIGHT * 4) ; set Holey DMA for 8 or 16 tall zones 2549 f4bf 9d 00 18 sta DLLMEM,x 2550 f4c2 - ifconst DOUBLEBUFFER 2551 f4c2 - sta DLLMEM+DBOFFSET,x 2552 f4c2 endif ; DOUBLEBUFFER 2553 f4c2 e8 inx 2554 f4c3 b9 cf f5 lda DLPOINTH,y 2555 f4c6 9d 00 18 sta DLLMEM,x 2556 f4c9 - ifconst DOUBLEBUFFER 2557 f4c9 - sta DLLMEM+DBOFFSET,x 2558 f4c9 endif ; DOUBLEBUFFER 2559 f4c9 e8 inx 2560 f4ca b9 e7 f5 lda DLPOINTL,y 2561 f4cd 9d 00 18 sta DLLMEM,x 2562 f4d0 - ifconst DOUBLEBUFFER 2563 f4d0 - clc 2564 f4d0 - adc #DOUBLEBUFFEROFFSET 2565 f4d0 - sta DLLMEM+DBOFFSET,x 2566 f4d0 - bcc skiphidoublebufferadjust ; dlls are big endian, so we need to fix the hi byte after-the-fact... 2567 f4d0 - inc DLLMEM+DBOFFSET-1,x 2568 f4d0 -skiphidoublebufferadjust 2569 f4d0 endif ; DOUBLEBUFFER 2570 f4d0 e8 inx 2571 f4d1 c8 iny 2572 f4d2 c0 18 cpy #WZONECOUNT 2573 f4d4 d0 e4 bne createvisiblezonesloop 2574 f4d6 60 rts 2575 f4d7 2576 f4d7 waitforvblankstart 2577 f4d7 visibleoverwait 2578 f4d7 24 28 BIT MSTAT 2579 f4d9 10 fc bpl visibleoverwait 2580 f4db vblankstartwait 2581 f4db 24 28 BIT MSTAT 2582 f4dd 30 fc bmi vblankstartwait 2583 f4df 60 rts 2584 f4e0 2585 f4e0 - ifconst DOUBLEBUFFER 2586 f4e0 -flipdisplaybufferreturn 2587 f4e0 - rts 2588 f4e0 -flipdisplaybuffer 2589 f4e0 - lda doublebufferstate 2590 f4e0 - beq flipdisplaybufferreturn ; exit if we're not in double-buffer 2591 f4e0 - 2592 f4e0 - jsr terminatedisplaybuffer ; terminate the working buffer before we flip 2593 f4e0 - 2594 f4e0 - lda doublebufferstate 2595 f4e0 - lsr ; /2, so we'll see 0 or 1, rather than 1 or 3 2596 f4e0 - tax 2597 f4e0 - 2598 f4e0 - ; ensure we don't flip mid-display. otherwise the displayed DL will be the one the game is working on. 2599 f4e0 - 2600 f4e0 -flipdisplaybufferwait1 2601 f4e0 - lda visibleover 2602 f4e0 - beq flipdisplaybufferwait1 2603 f4e0 - 2604 f4e0 -flipdisplaybufferwait 2605 f4e0 - lda visibleover 2606 f4e0 - bne flipdisplaybufferwait 2607 f4e0 - 2608 f4e0 - lda doublebufferminimumframetarget 2609 f4e0 - beq skipminimumframecode 2610 f4e0 - lda doublebufferminimumframeindex 2611 f4e0 - bne flipdisplaybufferwait1 2612 f4e0 - lda doublebufferminimumframetarget 2613 f4e0 - sta doublebufferminimumframeindex 2614 f4e0 -skipminimumframecode 2615 f4e0 - 2616 f4e0 - lda DLLMEMLutHi,x 2617 f4e0 - sta DPPH 2618 f4e0 - lda DLLMEMLutLo,x 2619 f4e0 - sta DPPL 2620 f4e0 - 2621 f4e0 - lda NewPageflipstate,x 2622 f4e0 - sta doublebufferstate 2623 f4e0 - lda NewPageflipoffset,x 2624 f4e0 - sta doublebufferdloffset 2625 f4e0 - 2626 f4e0 - lda doublebufferbufferdirty 2627 f4e0 - beq flipdisplaybufferreturn 2628 f4e0 - 2629 f4e0 - ; The doublebuffer buffer is dirty, so the game code must have issued a savescreen recently. 2630 f4e0 - ; To make savescreen work with the new working buffer, we need to copy over the saved objects 2631 f4e0 - ; from the displayed buffer to the working buffer... 2632 f4e0 - 2633 f4e0 - lda doublebufferdloffset 2634 f4e0 - eor #DOUBLEBUFFEROFFSET 2635 f4e0 - sta temp6 ; make temp6 the anti-doublebufferdloffset variable 2636 f4e0 - 2637 f4e0 - ldx #(WZONECOUNT-1) 2638 f4e0 -copybufferzoneloop 2639 f4e0 - 2640 f4e0 - lda DLPOINTL,x 2641 f4e0 - clc 2642 f4e0 - adc doublebufferdloffset 2643 f4e0 - sta temp1 2644 f4e0 - lda DLPOINTH,x 2645 f4e0 - adc #0 2646 f4e0 - sta temp2 2647 f4e0 - 2648 f4e0 - lda DLPOINTL,x 2649 f4e0 - clc 2650 f4e0 - adc temp6 2651 f4e0 - sta temp3 2652 f4e0 - lda DLPOINTH,x 2653 f4e0 - adc #0 2654 f4e0 - sta temp4 2655 f4e0 - 2656 f4e0 - lda dlendsave,x 2657 f4e0 - tay 2658 f4e0 -copybuffercharsloop 2659 f4e0 - lda (temp3),y 2660 f4e0 - sta (temp1),y 2661 f4e0 - dey 2662 f4e0 - bpl copybuffercharsloop 2663 f4e0 - dex 2664 f4e0 - bpl copybufferzoneloop 2665 f4e0 - lda #0 2666 f4e0 - sta doublebufferbufferdirty 2667 f4e0 - rts 2668 f4e0 - 2669 f4e0 -doublebufferoff 2670 f4e0 - lda #1 2671 f4e0 - sta doublebufferstate 2672 f4e0 - jsr flipdisplaybuffer 2673 f4e0 - lda #0 2674 f4e0 - sta doublebufferstate 2675 f4e0 - sta doublebufferdloffset 2676 f4e0 - rts 2677 f4e0 - 2678 f4e0 -DLLMEMLutLo 2679 f4e0 - .byte DLLMEM,>(DLLMEM+DBOFFSET) 2682 f4e0 -NewPageflipstate 2683 f4e0 - .byte 3,1 2684 f4e0 -NewPageflipoffset 2685 f4e0 - .byte DOUBLEBUFFEROFFSET,0 2686 f4e0 - 2687 f4e0 endif ; DOUBLEBUFFER 2688 f4e0 2689 f4e0 - ifconst MOUSESUPPORT 2690 f4e0 - ifnconst DRIVINGSUPPORT 2691 f4e0 -rotationalcompare 2692 f4e0 - ; new=00, old=xx 2693 f4e0 - .byte $00, $01, $ff, $00 2694 f4e0 - ; new=01, old=xx 2695 f4e0 - .byte $ff, $00, $00, $01 2696 f4e0 - ; new=10, old=xx 2697 f4e0 - .byte $01, $00, $00, $ff 2698 f4e0 - ; new=11, old=xx 2699 f4e0 - .byte $00, $ff, $01, $00 2700 f4e0 - endif 2701 f4e0 - 2702 f4e0 - ; 0000YyXx st mouse 2703 f4e0 - ; 0000xyXY amiga mouse 2704 f4e0 -amigatoataribits ; swap bits 1 and 4... 2705 f4e0 - .byte %00000000, %00001000, %00000010, %00001010 2706 f4e0 - .byte %00000100, %00001100, %00000110, %00001110 2707 f4e0 - .byte %00000001, %00001001, %00000011, %00001011 2708 f4e0 - .byte %00000101, %00001101, %00000111, %00001111 2709 f4e0 - 2710 f4e0 -mouseupdate 2711 f4e0 - ;LONGDEBUG = 1 2712 f4e0 - lda SWCHA 2713 f4e0 - and #$0f 2714 f4e0 - sta inttemp2 2715 f4e0 - lda SWCHA 2716 f4e0 - lsr 2717 f4e0 - lsr 2718 f4e0 - lsr 2719 f4e0 - lsr 2720 f4e0 - sta inttemp1 2721 f4e0 - 2722 f4e0 - lda port0control,x 2723 f4e0 - cmp #8 ; st mouse 2724 f4e0 - beq domousecontrol 2725 f4e0 - cmp #9 ; amiga mouse 2726 f4e0 - bne skipmousecontrol 2727 f4e0 - ; st mice encode on different bits/joystick-lines than amiga mice... 2728 f4e0 - ; 0000YyXx st mouse 2729 f4e0 - ; 0000xyXY amiga mouse 2730 f4e0 - ; ...so can shuffle the amiga bits to reuse the st driver. 2731 f4e0 - lda inttemp1,x 2732 f4e0 - tay 2733 f4e0 - lda amigatoataribits,y 2734 f4e0 - sta inttemp1,x 2735 f4e0 -domousecontrol 2736 f4e0 - ;port X has a mouse enabled 2737 f4e0 - lda inttemp1,x 2738 f4e0 - and #%00000011 2739 f4e0 - asl 2740 f4e0 - asl 2741 f4e0 - ora mousecodex0,x 2742 f4e0 - and #%00001111 2743 f4e0 - tay 2744 f4e0 - lda rotationalcompare,y 2745 f4e0 - clc 2746 f4e0 - adc mousex0,x 2747 f4e0 - sta mousex0,x 2748 f4e0 - tya 2749 f4e0 - lsr 2750 f4e0 - lsr 2751 f4e0 - sta mousecodex0,x 2752 f4e0 - 2753 f4e0 - lda inttemp1,x 2754 f4e0 - and #%00001100 2755 f4e0 - ora mousecodey0,x 2756 f4e0 - and #%00001111 2757 f4e0 - tay 2758 f4e0 - lda rotationalcompare,y 2759 f4e0 - asl ; *2 for y axis, since it has ~double the resolution of x 2760 f4e0 - clc 2761 f4e0 - adc mousey0,x 2762 f4e0 - sta mousey0,x 2763 f4e0 - tya 2764 f4e0 - lsr 2765 f4e0 - lsr 2766 f4e0 - sta mousecodey0,x 2767 f4e0 -skipmousecontrol 2768 f4e0 - jmp longreadloopreturn 2769 f4e0 endif ; MOUSESUPPORT 2770 f4e0 2771 f4e0 mousebuttonhandler ; outside of conditional, so button handler entry in LUT is valid 2772 f4e0 - ifconst MOUSESUPPORT 2773 f4e0 - ; stick the mouse buttons in the correct shadow register... 2774 f4e0 - txa 2775 f4e0 - asl 2776 f4e0 - tay ; y=x*2 2777 f4e0 - lda INPT1,y 2778 f4e0 - eor #%10000000 2779 f4e0 - lsr 2780 f4e0 - sta sINPT1,x 2781 f4e0 - 2782 f4e0 - lda INPT4,x 2783 f4e0 - and #%10000000 2784 f4e0 - eor #%10000000 2785 f4e0 - ora sINPT1,x 2786 f4e0 - sta sINPT1,x 2787 f4e0 - jmp buttonreadloopreturn 2788 f4e0 endif ; MOUSESUPPORT 2789 f4e0 2790 f4e0 - ifconst DRIVINGSUPPORT 2791 f4e0 -rotationalcompare 2792 f4e0 - ; new=00, old=xx 2793 f4e0 - .byte $00, $01, $ff, $00 2794 f4e0 - ; new=01, old=xx 2795 f4e0 - .byte $ff, $00, $00, $01 2796 f4e0 - ; new=10, old=xx 2797 f4e0 - .byte $01, $00, $00, $ff 2798 f4e0 - ; new=11, old=xx 2799 f4e0 - .byte $00, $ff, $01, $00 2800 f4e0 -drivingupdate 2801 f4e0 - ldx #1 2802 f4e0 - lda port1control 2803 f4e0 - cmp #6 ; check if port1=driving 2804 f4e0 - bne skipfirstdrivingcontrol 2805 f4e0 - lda SWCHA 2806 f4e0 - and #%00000011 2807 f4e0 - asl 2808 f4e0 - asl 2809 f4e0 -drivingupdateloop 2810 f4e0 - ora controller0statesave,x 2811 f4e0 - tay 2812 f4e0 - lda rotationalcompare,y 2813 f4e0 - clc 2814 f4e0 - adc drivingposition0,x 2815 f4e0 - sta drivingposition0,x 2816 f4e0 - tya 2817 f4e0 - lsr 2818 f4e0 - lsr 2819 f4e0 - sta controller0statesave,x 2820 f4e0 -skipfirstdrivingcontrol 2821 f4e0 - lda port0control 2822 f4e0 - cmp #6 ; check if port0=driving 2823 f4e0 - bne drivingcontrolsloopdone 2824 f4e0 - lda SWCHA 2825 f4e0 - and #%00110000 2826 f4e0 - lsr 2827 f4e0 - lsr 2828 f4e0 - dex 2829 f4e0 - bpl drivingupdateloop 2830 f4e0 -drivingcontrolsloopdone 2831 f4e0 - rts 2832 f4e0 endif ; DRIVINGSUPPORT 2833 f4e0 2834 f4e0 - ifconst KEYPADSUPPORT 2835 f4e0 - ; ** select keypad rows 0 to 3 over 4 frames... 2836 f4e0 -keypadrowselect 2837 f4e0 - ldy #0 2838 f4e0 - lda port0control 2839 f4e0 - cmp #7 2840 f4e0 - bne skipport0val 2841 f4e0 - iny ; y=y+1 2842 f4e0 -skipport0val 2843 f4e0 - lda port1control 2844 f4e0 - cmp #7 2845 f4e0 - bne skipport1val 2846 f4e0 - iny 2847 f4e0 - iny ; y=y+2 2848 f4e0 -skipport1val 2849 f4e0 - lda keyrowdirectionmask,y 2850 f4e0 - sta CTLSWA 2851 f4e0 - tya 2852 f4e0 - asl 2853 f4e0 - asl 2854 f4e0 - sta inttemp1 2855 f4e0 - lda framecounter 2856 f4e0 - and #3 2857 f4e0 - ora inttemp1 2858 f4e0 - tax 2859 f4e0 - lda keyrowselectvalue,x 2860 f4e0 - sta SWCHA 2861 f4e0 - rts 2862 f4e0 - 2863 f4e0 -keyrowdirectionmask 2864 f4e0 - .byte #%00000000 ; 0 : port0=input port1=input 2865 f4e0 - .byte #%11110000 ; 1 : port0=output port1=input 2866 f4e0 - .byte #%00001111 ; 2 : port0=input port1=output 2867 f4e0 - .byte #%11111111 ; 3 : port0=output port1=output 2868 f4e0 - 2869 f4e0 -keyrowselectvalue 2870 f4e0 - .byte #%00000000, #%00000000, #%00000000, #%00000000 ; no row selected, all pins high, always 2871 f4e0 - .byte #%11100000, #%11010000, #%10110000, #%01110000 ; p0 keypad in 2872 f4e0 - .byte #%00001110, #%00001101, #%00001011, #%00000111 ; p1 keypad in 2873 f4e0 - .byte #%11101110, #%11011101, #%10111011, #%01110111 ; p0+p1 keypads in 2874 f4e0 endif ; KEYPADSUPPORT 2875 f4e0 2876 f4e0 - ifconst KEYPADSUPPORT 2877 f4e0 -keypadcolumnread 2878 f4e0 - lda framecounter 2879 f4e0 - and #3 2880 f4e0 - asl ; x2 because keypad variables are interleaved 2881 f4e0 - tax 2882 f4e0 - 2883 f4e0 - lda #0 2884 f4e0 - sta keypadmatrix0a,x 2885 f4e0 - sta keypadmatrix1a,x 2886 f4e0 - 2887 f4e0 - lda INPT0 2888 f4e0 - cmp #$80 2889 f4e0 - rol keypadmatrix0a,x 2890 f4e0 - lda INPT1 2891 f4e0 - cmp #$80 2892 f4e0 - rol keypadmatrix0a,x 2893 f4e0 - lda INPT4 2894 f4e0 - cmp #$80 2895 f4e0 - rol keypadmatrix0a,x 2896 f4e0 - lda keypadmatrix0a,x 2897 f4e0 - eor #%00000111 2898 f4e0 - sta keypadmatrix0a,x 2899 f4e0 - 2900 f4e0 - rol keypadmatrix1a,x 2901 f4e0 - lda INPT2 2902 f4e0 - cmp #$80 2903 f4e0 - rol keypadmatrix1a,x 2904 f4e0 - lda INPT3 2905 f4e0 - cmp #$80 2906 f4e0 - rol keypadmatrix1a,x 2907 f4e0 - lda INPT5 2908 f4e0 - cmp #$80 2909 f4e0 - rol keypadmatrix1a,x 2910 f4e0 - lda keypadmatrix1a,x 2911 f4e0 - eor #%00000111 2912 f4e0 - sta keypadmatrix1a,x 2913 f4e0 - 2914 f4e0 - rts 2915 f4e0 endif ; KEYPADSUPPORT 2916 f4e0 2917 f4e0 setportforinput 2918 f4e0 a5 e4 lda CTLSWAs 2919 f4e2 3d eb f4 and allpinsinputlut,x 2920 f4e5 85 e4 sta CTLSWAs 2921 f4e7 8d 81 02 sta CTLSWA 2922 f4ea 60 rts 2923 f4eb 2924 f4eb allpinsinputlut 2925 f4eb 0f f0 .byte.b $0F, $F0 2926 f4ed 2927 f4ed setonebuttonmode 2928 f4ed a9 14 lda #$14 2929 f4ef 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 2930 f4f2 a5 e5 lda CTLSWBs 2931 f4f4 1d fd f4 ora thisjoy2buttonbit,x 2932 f4f7 85 e5 sta CTLSWBs 2933 f4f9 8d 82 02 sta SWCHB ; turn off the 2-button disable bits 2934 f4fc 60 rts 2935 f4fd 2936 f4fd thisjoy2buttonbit 2937 f4fd 04 10 .byte.b $04, $10 2938 f4ff 2939 f4ff settwobuttonmode 2940 f4ff a9 14 lda #$14 2941 f501 8d 83 02 sta CTLSWB ; set both 2-button disable bits to writable 2942 f504 a5 e5 lda CTLSWBs 2943 f506 3d 0f f5 and thisjoy2buttonmask,x 2944 f509 85 e5 sta CTLSWBs 2945 f50b 8d 82 02 sta SWCHB 2946 f50e 60 rts 2947 f50f 2948 f50f thisjoy2buttonmask 2949 f50f fb ef .byte.b $fb, $ef 2950 f511 2951 f511 ; Provided under the CC0 license. See the included LICENSE.txt for details. 2952 f511 2953 f511 START 2954 f511 start 2955 f511 2956 f511 ;******** more or less the Atari recommended startup procedure 2957 f511 2958 f511 78 sei 2959 f512 d8 cld 2960 f513 2961 f513 ifnconst NOTIALOCK 2962 f513 a9 07 lda #$07 2963 f515 - else 2964 f515 - lda #$06 2965 f515 endif 2966 f515 85 01 sta INPTCTRL ;lock 7800 into 7800 mode 2967 f517 a9 7f lda #$7F 2968 f519 85 3c sta CTRL ;disable DMA 2969 f51b a9 00 lda #$00 2970 f51d 85 38 sta OFFSET 2971 f51f ifnconst NOTIALOCK 2972 f51f 85 01 sta INPTCTRL 2973 f521 endif 2974 f521 a2 ff ldx #$FF 2975 f523 9a txs 2976 f524 2977 f524 ;************** Clear Memory 2978 f524 2979 f524 a2 40 ldx #$40 2980 f526 a9 00 lda #$00 2981 f528 crloop1 2982 f528 95 00 sta $00,x ;Clear zero page 2983 f52a 9d 00 01 sta $100,x ;Clear page 1 2984 f52d e8 inx 2985 f52e d0 f8 bne crloop1 2986 f530 2987 f530 2988 f530 a0 00 ldy #$00 ;Clear Ram 2989 f532 a9 18 lda #$18 ;Start at $1800 2990 f534 85 81 sta $81 2991 f536 a9 00 lda #$00 2992 f538 85 80 sta $80 2993 f53a crloop3 2994 f53a a9 00 lda #$00 2995 f53c 91 80 sta ($80),y ;Store data 2996 f53e c8 iny ;Next byte 2997 f53f d0 f9 bne crloop3 ;Branch if not done page 2998 f541 e6 81 inc $81 ;Next page 2999 f543 a5 81 lda $81 3000 f545 c9 20 cmp #$20 ;End at $1FFF 3001 f547 d0 f1 bne crloop3 ;Branch if not 3002 f549 3003 f549 a0 00 ldy #$00 ;Clear Ram 3004 f54b a9 22 lda #$22 ;Start at $2200 3005 f54d 85 81 sta $81 3006 f54f a9 00 lda #$00 3007 f551 85 80 sta $80 3008 f553 crloop4 3009 f553 a9 00 lda #$00 3010 f555 91 80 sta ($80),y ;Store data 3011 f557 c8 iny ;Next byte 3012 f558 d0 f9 bne crloop4 ;Branch if not done page 3013 f55a e6 81 inc $81 ;Next page 3014 f55c a5 81 lda $81 3015 f55e c9 27 cmp #$27 ;End at $27FF 3016 f560 d0 f1 bne crloop4 ;Branch if not 3017 f562 3018 f562 a2 00 ldx #$00 3019 f564 a9 00 lda #$00 3020 f566 crloop5 ;Clear 2100-213F, 2000-203F 3021 f566 9d 00 20 sta $2000,x 3022 f569 9d 00 21 sta $2100,x 3023 f56c e8 inx 3024 f56d e0 40 cpx #$40 3025 f56f d0 f5 bne crloop5 3026 f571 3027 f571 85 80 sta $80 3028 f573 85 81 sta $81 3029 f575 85 82 sta $82 3030 f577 85 83 sta $83 3031 f579 3032 f579 ;seed random number with hopefully-random timer value 3033 f579 a9 01 lda #1 3034 f57b 0d 84 02 ora INTIM 3035 f57e 85 40 sta rand 3036 f580 3037 f580 ; detect the console type... 3038 f580 pndetectvblankstart 3039 f580 a5 28 lda MSTAT 3040 f582 10 fc bpl pndetectvblankstart ; if we're not in VBLANK, wait for it to start 3041 f584 pndetectvblankover 3042 f584 a5 28 lda MSTAT 3043 f586 30 fc bmi pndetectvblankover ; then wait for it to be over 3044 f588 a0 00 ldy #$00 3045 f58a a2 00 ldx #$00 3046 f58c pndetectvblankhappening 3047 f58c a5 28 lda MSTAT 3048 f58e 30 07 bmi pndetectinvblank ; if VBLANK starts, exit our counting loop 3049 f590 85 24 sta WSYNC 3050 f592 85 24 sta WSYNC 3051 f594 e8 inx 3052 f595 d0 f5 bne pndetectvblankhappening 3053 f597 pndetectinvblank 3054 f597 e0 7d cpx #125 3055 f599 90 02 bcc pndetecispal 3056 f59b a0 01 ldy #$01 3057 f59d pndetecispal 3058 f59d 8c 09 21 sty paldetected 3059 f5a0 3060 f5a0 20 46 f4 jsr createallgamedlls 3061 f5a3 3062 f5a3 a9 18 lda #>DLLMEM 3063 f5a5 85 2c sta DPPH 3064 f5a7 a9 00 lda # 255 3248 f5cf -DOUBLEBUFFEROFFSET = 255 3249 f5cf else 3250 f5cf 00 4d DOUBLEBUFFEROFFSET = (DLLASTOBJ+2) 3251 f5cf endif 3252 f5cf 3253 f5cf - ifconst EXTRADLMEMORY 3254 f5cf -SECONDDLHALFSTART SET $2300 3255 f5cf endif 3256 f5cf 3257 f5cf DLPOINTH 3258 f5cf DLINDEX SET 0 3259 f5cf REPEAT WZONECOUNT 3260 f5cf TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5cf - ifconst EXTRADLMEMORY 3262 f5cf - if TMPMEMADDRESS > $1FFF 3263 f5cf -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5cf - else 3265 f5cf - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5cf -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5cf -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5cf - endif 3269 f5cf - endif ; TMPMEMADDRESS > $1FFF 3270 f5cf endif ; EXTRADLMEMORY 3271 f5cf ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5cf 18 .byte.b >TMPMEMADDRESS 3273 f5cf DLINDEX SET DLINDEX + 1 3259 f5cf REPEND 3260 f5cf TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d0 - ifconst EXTRADLMEMORY 3262 f5d0 - if TMPMEMADDRESS > $1FFF 3263 f5d0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d0 - else 3265 f5d0 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d0 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d0 - endif 3269 f5d0 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d0 endif ; EXTRADLMEMORY 3271 f5d0 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d0 18 .byte.b >TMPMEMADDRESS 3273 f5d0 DLINDEX SET DLINDEX + 1 3259 f5d0 REPEND 3260 f5d0 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d1 - ifconst EXTRADLMEMORY 3262 f5d1 - if TMPMEMADDRESS > $1FFF 3263 f5d1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d1 - else 3265 f5d1 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d1 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d1 - endif 3269 f5d1 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d1 endif ; EXTRADLMEMORY 3271 f5d1 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d1 19 .byte.b >TMPMEMADDRESS 3273 f5d1 DLINDEX SET DLINDEX + 1 3259 f5d1 REPEND 3260 f5d1 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d2 - ifconst EXTRADLMEMORY 3262 f5d2 - if TMPMEMADDRESS > $1FFF 3263 f5d2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d2 - else 3265 f5d2 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d2 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d2 - endif 3269 f5d2 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d2 endif ; EXTRADLMEMORY 3271 f5d2 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d2 19 .byte.b >TMPMEMADDRESS 3273 f5d2 DLINDEX SET DLINDEX + 1 3259 f5d2 REPEND 3260 f5d2 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d3 - ifconst EXTRADLMEMORY 3262 f5d3 - if TMPMEMADDRESS > $1FFF 3263 f5d3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d3 - else 3265 f5d3 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d3 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d3 - endif 3269 f5d3 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d3 endif ; EXTRADLMEMORY 3271 f5d3 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d3 19 .byte.b >TMPMEMADDRESS 3273 f5d3 DLINDEX SET DLINDEX + 1 3259 f5d3 REPEND 3260 f5d3 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d4 - ifconst EXTRADLMEMORY 3262 f5d4 - if TMPMEMADDRESS > $1FFF 3263 f5d4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d4 - else 3265 f5d4 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d4 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d4 - endif 3269 f5d4 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d4 endif ; EXTRADLMEMORY 3271 f5d4 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d4 1a .byte.b >TMPMEMADDRESS 3273 f5d4 DLINDEX SET DLINDEX + 1 3259 f5d4 REPEND 3260 f5d4 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d5 - ifconst EXTRADLMEMORY 3262 f5d5 - if TMPMEMADDRESS > $1FFF 3263 f5d5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d5 - else 3265 f5d5 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d5 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d5 - endif 3269 f5d5 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d5 endif ; EXTRADLMEMORY 3271 f5d5 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d5 1a .byte.b >TMPMEMADDRESS 3273 f5d5 DLINDEX SET DLINDEX + 1 3259 f5d5 REPEND 3260 f5d5 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d6 - ifconst EXTRADLMEMORY 3262 f5d6 - if TMPMEMADDRESS > $1FFF 3263 f5d6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d6 - else 3265 f5d6 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d6 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d6 - endif 3269 f5d6 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d6 endif ; EXTRADLMEMORY 3271 f5d6 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d6 1a .byte.b >TMPMEMADDRESS 3273 f5d6 DLINDEX SET DLINDEX + 1 3259 f5d6 REPEND 3260 f5d6 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d7 - ifconst EXTRADLMEMORY 3262 f5d7 - if TMPMEMADDRESS > $1FFF 3263 f5d7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d7 - else 3265 f5d7 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d7 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d7 - endif 3269 f5d7 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d7 endif ; EXTRADLMEMORY 3271 f5d7 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d7 1b .byte.b >TMPMEMADDRESS 3273 f5d7 DLINDEX SET DLINDEX + 1 3259 f5d7 REPEND 3260 f5d7 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d8 - ifconst EXTRADLMEMORY 3262 f5d8 - if TMPMEMADDRESS > $1FFF 3263 f5d8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d8 - else 3265 f5d8 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d8 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d8 - endif 3269 f5d8 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d8 endif ; EXTRADLMEMORY 3271 f5d8 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d8 1b .byte.b >TMPMEMADDRESS 3273 f5d8 DLINDEX SET DLINDEX + 1 3259 f5d8 REPEND 3260 f5d8 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5d9 - ifconst EXTRADLMEMORY 3262 f5d9 - if TMPMEMADDRESS > $1FFF 3263 f5d9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5d9 - else 3265 f5d9 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5d9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5d9 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5d9 - endif 3269 f5d9 - endif ; TMPMEMADDRESS > $1FFF 3270 f5d9 endif ; EXTRADLMEMORY 3271 f5d9 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5d9 1b .byte.b >TMPMEMADDRESS 3273 f5d9 DLINDEX SET DLINDEX + 1 3259 f5d9 REPEND 3260 f5d9 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5da - ifconst EXTRADLMEMORY 3262 f5da - if TMPMEMADDRESS > $1FFF 3263 f5da -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5da - else 3265 f5da - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5da -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5da -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5da - endif 3269 f5da - endif ; TMPMEMADDRESS > $1FFF 3270 f5da endif ; EXTRADLMEMORY 3271 f5da ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5da 1b .byte.b >TMPMEMADDRESS 3273 f5da DLINDEX SET DLINDEX + 1 3259 f5da REPEND 3260 f5da TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5db - ifconst EXTRADLMEMORY 3262 f5db - if TMPMEMADDRESS > $1FFF 3263 f5db -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5db - else 3265 f5db - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5db -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5db -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5db - endif 3269 f5db - endif ; TMPMEMADDRESS > $1FFF 3270 f5db endif ; EXTRADLMEMORY 3271 f5db ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5db 1c .byte.b >TMPMEMADDRESS 3273 f5db DLINDEX SET DLINDEX + 1 3259 f5db REPEND 3260 f5db TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5dc - ifconst EXTRADLMEMORY 3262 f5dc - if TMPMEMADDRESS > $1FFF 3263 f5dc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5dc - else 3265 f5dc - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5dc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5dc -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5dc - endif 3269 f5dc - endif ; TMPMEMADDRESS > $1FFF 3270 f5dc endif ; EXTRADLMEMORY 3271 f5dc ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5dc 1c .byte.b >TMPMEMADDRESS 3273 f5dc DLINDEX SET DLINDEX + 1 3259 f5dc REPEND 3260 f5dc TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5dd - ifconst EXTRADLMEMORY 3262 f5dd - if TMPMEMADDRESS > $1FFF 3263 f5dd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5dd - else 3265 f5dd - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5dd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5dd -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5dd - endif 3269 f5dd - endif ; TMPMEMADDRESS > $1FFF 3270 f5dd endif ; EXTRADLMEMORY 3271 f5dd ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5dd 1c .byte.b >TMPMEMADDRESS 3273 f5dd DLINDEX SET DLINDEX + 1 3259 f5dd REPEND 3260 f5dd TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5de - ifconst EXTRADLMEMORY 3262 f5de - if TMPMEMADDRESS > $1FFF 3263 f5de -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5de - else 3265 f5de - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5de -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5de -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5de - endif 3269 f5de - endif ; TMPMEMADDRESS > $1FFF 3270 f5de endif ; EXTRADLMEMORY 3271 f5de ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5de 1d .byte.b >TMPMEMADDRESS 3273 f5de DLINDEX SET DLINDEX + 1 3259 f5de REPEND 3260 f5de TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5df - ifconst EXTRADLMEMORY 3262 f5df - if TMPMEMADDRESS > $1FFF 3263 f5df -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5df - else 3265 f5df - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5df -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5df -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5df - endif 3269 f5df - endif ; TMPMEMADDRESS > $1FFF 3270 f5df endif ; EXTRADLMEMORY 3271 f5df ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5df 1d .byte.b >TMPMEMADDRESS 3273 f5df DLINDEX SET DLINDEX + 1 3259 f5df REPEND 3260 f5df TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e0 - ifconst EXTRADLMEMORY 3262 f5e0 - if TMPMEMADDRESS > $1FFF 3263 f5e0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e0 - else 3265 f5e0 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e0 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e0 - endif 3269 f5e0 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e0 endif ; EXTRADLMEMORY 3271 f5e0 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e0 1d .byte.b >TMPMEMADDRESS 3273 f5e0 DLINDEX SET DLINDEX + 1 3259 f5e0 REPEND 3260 f5e0 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e1 - ifconst EXTRADLMEMORY 3262 f5e1 - if TMPMEMADDRESS > $1FFF 3263 f5e1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e1 - else 3265 f5e1 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e1 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e1 - endif 3269 f5e1 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e1 endif ; EXTRADLMEMORY 3271 f5e1 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e1 1e .byte.b >TMPMEMADDRESS 3273 f5e1 DLINDEX SET DLINDEX + 1 3259 f5e1 REPEND 3260 f5e1 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e2 - ifconst EXTRADLMEMORY 3262 f5e2 - if TMPMEMADDRESS > $1FFF 3263 f5e2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e2 - else 3265 f5e2 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e2 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e2 - endif 3269 f5e2 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e2 endif ; EXTRADLMEMORY 3271 f5e2 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e2 1e .byte.b >TMPMEMADDRESS 3273 f5e2 DLINDEX SET DLINDEX + 1 3259 f5e2 REPEND 3260 f5e2 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e3 - ifconst EXTRADLMEMORY 3262 f5e3 - if TMPMEMADDRESS > $1FFF 3263 f5e3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e3 - else 3265 f5e3 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e3 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e3 - endif 3269 f5e3 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e3 endif ; EXTRADLMEMORY 3271 f5e3 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e3 1e .byte.b >TMPMEMADDRESS 3273 f5e3 DLINDEX SET DLINDEX + 1 3259 f5e3 REPEND 3260 f5e3 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e4 - ifconst EXTRADLMEMORY 3262 f5e4 - if TMPMEMADDRESS > $1FFF 3263 f5e4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e4 - else 3265 f5e4 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e4 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e4 - endif 3269 f5e4 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e4 endif ; EXTRADLMEMORY 3271 f5e4 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e4 1f .byte.b >TMPMEMADDRESS 3273 f5e4 DLINDEX SET DLINDEX + 1 3259 f5e4 REPEND 3260 f5e4 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e5 - ifconst EXTRADLMEMORY 3262 f5e5 - if TMPMEMADDRESS > $1FFF 3263 f5e5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e5 - else 3265 f5e5 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e5 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e5 - endif 3269 f5e5 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e5 endif ; EXTRADLMEMORY 3271 f5e5 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e5 1f .byte.b >TMPMEMADDRESS 3273 f5e5 DLINDEX SET DLINDEX + 1 3259 f5e5 REPEND 3260 f5e5 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3261 f5e6 - ifconst EXTRADLMEMORY 3262 f5e6 - if TMPMEMADDRESS > $1FFF 3263 f5e6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3264 f5e6 - else 3265 f5e6 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3266 f5e6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3267 f5e6 -SECONDDLHALFSTART SET TMPMEMADDRESS 3268 f5e6 - endif 3269 f5e6 - endif ; TMPMEMADDRESS > $1FFF 3270 f5e6 endif ; EXTRADLMEMORY 3271 f5e6 ;echo " "," ZONE",[DLINDEX]d,"ADDRESS: ",TMPMEMADDRESS 3272 f5e6 1f .byte.b >TMPMEMADDRESS 3273 f5e6 DLINDEX SET DLINDEX + 1 3274 f5e7 REPEND 3275 f5e7 3276 f5e7 - ifconst EXTRADLMEMORY 3277 f5e7 - echo " ",[SECONDDLHALFSTART],"to",[$27FF],"was claimed as extra DL memory." 3278 f5e7 endif 3279 f5e7 3280 f5e7 3281 f5e7 DLPOINTL 3282 f5e7 DLINDEX SET 0 3283 f5e7 REPEAT WZONECOUNT 3284 f5e7 TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3285 f5e7 - ifconst EXTRADLMEMORY 3286 f5e7 - if TMPMEMADDRESS > $1FFF 3287 f5e7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5e7 - else 3289 f5e7 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5e7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5e7 - endif 3292 f5e7 - endif ; TMPMEMADDRESS > $1FFF 3293 f5e7 endif ; EXTRADLMEMORY 3294 f5e7 80 .byte.b $1FFF 3287 f5e8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5e8 - else 3289 f5e8 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5e8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5e8 - endif 3292 f5e8 - endif ; TMPMEMADDRESS > $1FFF 3293 f5e8 endif ; EXTRADLMEMORY 3294 f5e8 d0 .byte.b $1FFF 3287 f5e9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5e9 - else 3289 f5e9 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5e9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5e9 - endif 3292 f5e9 - endif ; TMPMEMADDRESS > $1FFF 3293 f5e9 endif ; EXTRADLMEMORY 3294 f5e9 20 .byte.b $1FFF 3287 f5ea -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5ea - else 3289 f5ea - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5ea -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5ea - endif 3292 f5ea - endif ; TMPMEMADDRESS > $1FFF 3293 f5ea endif ; EXTRADLMEMORY 3294 f5ea 70 .byte.b $1FFF 3287 f5eb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5eb - else 3289 f5eb - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5eb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5eb - endif 3292 f5eb - endif ; TMPMEMADDRESS > $1FFF 3293 f5eb endif ; EXTRADLMEMORY 3294 f5eb c0 .byte.b $1FFF 3287 f5ec -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5ec - else 3289 f5ec - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5ec -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5ec - endif 3292 f5ec - endif ; TMPMEMADDRESS > $1FFF 3293 f5ec endif ; EXTRADLMEMORY 3294 f5ec 10 .byte.b $1FFF 3287 f5ed -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5ed - else 3289 f5ed - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5ed -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5ed - endif 3292 f5ed - endif ; TMPMEMADDRESS > $1FFF 3293 f5ed endif ; EXTRADLMEMORY 3294 f5ed 60 .byte.b $1FFF 3287 f5ee -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5ee - else 3289 f5ee - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5ee -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5ee - endif 3292 f5ee - endif ; TMPMEMADDRESS > $1FFF 3293 f5ee endif ; EXTRADLMEMORY 3294 f5ee b0 .byte.b $1FFF 3287 f5ef -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5ef - else 3289 f5ef - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5ef -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5ef - endif 3292 f5ef - endif ; TMPMEMADDRESS > $1FFF 3293 f5ef endif ; EXTRADLMEMORY 3294 f5ef 00 .byte.b $1FFF 3287 f5f0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f0 - else 3289 f5f0 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f0 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f0 - endif 3292 f5f0 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f0 endif ; EXTRADLMEMORY 3294 f5f0 50 .byte.b $1FFF 3287 f5f1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f1 - else 3289 f5f1 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f1 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f1 - endif 3292 f5f1 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f1 endif ; EXTRADLMEMORY 3294 f5f1 a0 .byte.b $1FFF 3287 f5f2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f2 - else 3289 f5f2 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f2 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f2 - endif 3292 f5f2 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f2 endif ; EXTRADLMEMORY 3294 f5f2 f0 .byte.b $1FFF 3287 f5f3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f3 - else 3289 f5f3 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f3 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f3 - endif 3292 f5f3 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f3 endif ; EXTRADLMEMORY 3294 f5f3 40 .byte.b $1FFF 3287 f5f4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f4 - else 3289 f5f4 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f4 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f4 - endif 3292 f5f4 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f4 endif ; EXTRADLMEMORY 3294 f5f4 90 .byte.b $1FFF 3287 f5f5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f5 - else 3289 f5f5 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f5 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f5 - endif 3292 f5f5 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f5 endif ; EXTRADLMEMORY 3294 f5f5 e0 .byte.b $1FFF 3287 f5f6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f6 - else 3289 f5f6 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f6 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f6 - endif 3292 f5f6 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f6 endif ; EXTRADLMEMORY 3294 f5f6 30 .byte.b $1FFF 3287 f5f7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f7 - else 3289 f5f7 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f7 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f7 - endif 3292 f5f7 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f7 endif ; EXTRADLMEMORY 3294 f5f7 80 .byte.b $1FFF 3287 f5f8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f8 - else 3289 f5f8 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f8 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f8 - endif 3292 f5f8 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f8 endif ; EXTRADLMEMORY 3294 f5f8 d0 .byte.b $1FFF 3287 f5f9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5f9 - else 3289 f5f9 - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5f9 -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5f9 - endif 3292 f5f9 - endif ; TMPMEMADDRESS > $1FFF 3293 f5f9 endif ; EXTRADLMEMORY 3294 f5f9 20 .byte.b $1FFF 3287 f5fa -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5fa - else 3289 f5fa - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5fa -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5fa - endif 3292 f5fa - endif ; TMPMEMADDRESS > $1FFF 3293 f5fa endif ; EXTRADLMEMORY 3294 f5fa 70 .byte.b $1FFF 3287 f5fb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5fb - else 3289 f5fb - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5fb -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5fb - endif 3292 f5fb - endif ; TMPMEMADDRESS > $1FFF 3293 f5fb endif ; EXTRADLMEMORY 3294 f5fb c0 .byte.b $1FFF 3287 f5fc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5fc - else 3289 f5fc - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5fc -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5fc - endif 3292 f5fc - endif ; TMPMEMADDRESS > $1FFF 3293 f5fc endif ; EXTRADLMEMORY 3294 f5fc 10 .byte.b $1FFF 3287 f5fd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5fd - else 3289 f5fd - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5fd -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5fd - endif 3292 f5fd - endif ; TMPMEMADDRESS > $1FFF 3293 f5fd endif ; EXTRADLMEMORY 3294 f5fd 60 .byte.b $1FFF 3287 f5fe -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3288 f5fe - else 3289 f5fe - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3290 f5fe -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3291 f5fe - endif 3292 f5fe - endif ; TMPMEMADDRESS > $1FFF 3293 f5fe endif ; EXTRADLMEMORY 3294 f5fe b0 .byte.b $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff if DLINDEX = 0 3312 f5ff 18 80 ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff if DLINDEX = 1 3315 f5ff 18 d0 ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff if DLINDEX = 2 3318 f5ff 19 20 ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff if DLINDEX = 3 3321 f5ff 19 70 ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff if DLINDEX = 4 3324 f5ff 19 c0 ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff if DLINDEX = 5 3327 f5ff 1a 10 ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff if DLINDEX = 6 3330 f5ff 1a 60 ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff if DLINDEX = 7 3333 f5ff 1a b0 ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff if DLINDEX = 8 3336 f5ff 1b 00 ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff if DLINDEX = 9 3339 f5ff 1b 50 ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff if DLINDEX = 10 3342 f5ff 1b a0 ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff if DLINDEX = 11 3345 f5ff 1b f0 ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff if DLINDEX = 12 3348 f5ff 1c 40 ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff if DLINDEX = 13 3351 f5ff 1c 90 ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff if DLINDEX = 14 3354 f5ff 1c e0 ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff if DLINDEX = 15 3357 f5ff 1d 30 ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff if DLINDEX = 16 3360 f5ff 1d 80 ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff if DLINDEX = 17 3363 f5ff 1d d0 ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff if DLINDEX = 18 3366 f5ff 1e 20 ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff if DLINDEX = 19 3369 f5ff 1e 70 ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff if DLINDEX = 20 3372 f5ff 1e c0 ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff if DLINDEX = 21 3375 f5ff 1f 10 ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff if DLINDEX = 22 3378 f5ff 1f 60 ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff - if DLINDEX = 23 3381 f5ff -ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3300 f5ff REPEND 3301 f5ff TMPMEMADDRESS SET (((DLINDEX*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) 3302 f5ff - ifconst EXTRADLMEMORY 3303 f5ff - if TMPMEMADDRESS > $1FFF 3304 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3305 f5ff - else 3306 f5ff - if ((((DLINDEX+1)*WMEMSIZE)/WZONECOUNT)+WDLMEMSTART) > $1FFF 3307 f5ff -TMPMEMADDRESS SET (TMPMEMADDRESS + $300) 3308 f5ff - endif 3309 f5ff - endif ; TMPMEMADDRESS > $1FFF 3310 f5ff endif ; EXTRADLMEMORY 3311 f5ff - if DLINDEX = 0 3312 f5ff -ZONE0ADDRESS = TMPMEMADDRESS 3313 f5ff endif 3314 f5ff - if DLINDEX = 1 3315 f5ff -ZONE1ADDRESS = TMPMEMADDRESS 3316 f5ff endif 3317 f5ff - if DLINDEX = 2 3318 f5ff -ZONE2ADDRESS = TMPMEMADDRESS 3319 f5ff endif 3320 f5ff - if DLINDEX = 3 3321 f5ff -ZONE3ADDRESS = TMPMEMADDRESS 3322 f5ff endif 3323 f5ff - if DLINDEX = 4 3324 f5ff -ZONE4ADDRESS = TMPMEMADDRESS 3325 f5ff endif 3326 f5ff - if DLINDEX = 5 3327 f5ff -ZONE5ADDRESS = TMPMEMADDRESS 3328 f5ff endif 3329 f5ff - if DLINDEX = 6 3330 f5ff -ZONE6ADDRESS = TMPMEMADDRESS 3331 f5ff endif 3332 f5ff - if DLINDEX = 7 3333 f5ff -ZONE7ADDRESS = TMPMEMADDRESS 3334 f5ff endif 3335 f5ff - if DLINDEX = 8 3336 f5ff -ZONE8ADDRESS = TMPMEMADDRESS 3337 f5ff endif 3338 f5ff - if DLINDEX = 9 3339 f5ff -ZONE9ADDRESS = TMPMEMADDRESS 3340 f5ff endif 3341 f5ff - if DLINDEX = 10 3342 f5ff -ZONE10ADDRESS = TMPMEMADDRESS 3343 f5ff endif 3344 f5ff - if DLINDEX = 11 3345 f5ff -ZONE11ADDRESS = TMPMEMADDRESS 3346 f5ff endif 3347 f5ff - if DLINDEX = 12 3348 f5ff -ZONE12ADDRESS = TMPMEMADDRESS 3349 f5ff endif 3350 f5ff - if DLINDEX = 13 3351 f5ff -ZONE13ADDRESS = TMPMEMADDRESS 3352 f5ff endif 3353 f5ff - if DLINDEX = 14 3354 f5ff -ZONE14ADDRESS = TMPMEMADDRESS 3355 f5ff endif 3356 f5ff - if DLINDEX = 15 3357 f5ff -ZONE15ADDRESS = TMPMEMADDRESS 3358 f5ff endif 3359 f5ff - if DLINDEX = 16 3360 f5ff -ZONE16ADDRESS = TMPMEMADDRESS 3361 f5ff endif 3362 f5ff - if DLINDEX = 17 3363 f5ff -ZONE17ADDRESS = TMPMEMADDRESS 3364 f5ff endif 3365 f5ff - if DLINDEX = 18 3366 f5ff -ZONE18ADDRESS = TMPMEMADDRESS 3367 f5ff endif 3368 f5ff - if DLINDEX = 19 3369 f5ff -ZONE19ADDRESS = TMPMEMADDRESS 3370 f5ff endif 3371 f5ff - if DLINDEX = 20 3372 f5ff -ZONE20ADDRESS = TMPMEMADDRESS 3373 f5ff endif 3374 f5ff - if DLINDEX = 21 3375 f5ff -ZONE21ADDRESS = TMPMEMADDRESS 3376 f5ff endif 3377 f5ff - if DLINDEX = 22 3378 f5ff -ZONE22ADDRESS = TMPMEMADDRESS 3379 f5ff endif 3380 f5ff if DLINDEX = 23 3381 f5ff 1f b0 ZONE23ADDRESS = TMPMEMADDRESS 3382 f5ff endif 3383 f5ff - if DLINDEX = 24 3384 f5ff -ZONE24ADDRESS = TMPMEMADDRESS 3385 f5ff endif 3386 f5ff - if DLINDEX = 25 3387 f5ff -ZONE25ADDRESS = TMPMEMADDRESS 3388 f5ff endif 3389 f5ff - if DLINDEX = 26 3390 f5ff -ZONE26ADDRESS = TMPMEMADDRESS 3391 f5ff endif 3392 f5ff - if DLINDEX = 27 3393 f5ff -ZONE27ADDRESS = TMPMEMADDRESS 3394 f5ff endif 3395 f5ff DLINDEX SET DLINDEX + 1 3396 f5ff REPEND 3397 f5ff 3398 f5ff $1880 to $1fff used as zone memory, allowing 15 display objects per zone. 3399 f5ff echo " ",[WDLMEMSTART],"to",[WDLMEMEND],"used as zone memory, allowing",[(DLLASTOBJ/5)]d,"display objects per zone." 3400 f5ff 3401 f5ff DLHEIGHT 3402 f5ff REPEAT WZONECOUNT 3403 f5ff 07 .byte.b (WZONEHEIGHT-1) 3402 f5ff REPEND 3403 f600 07 .byte.b (WZONEHEIGHT-1) 3402 f600 REPEND 3403 f601 07 .byte.b (WZONEHEIGHT-1) 3402 f601 REPEND 3403 f602 07 .byte.b (WZONEHEIGHT-1) 3402 f602 REPEND 3403 f603 07 .byte.b (WZONEHEIGHT-1) 3402 f603 REPEND 3403 f604 07 .byte.b (WZONEHEIGHT-1) 3402 f604 REPEND 3403 f605 07 .byte.b (WZONEHEIGHT-1) 3402 f605 REPEND 3403 f606 07 .byte.b (WZONEHEIGHT-1) 3402 f606 REPEND 3403 f607 07 .byte.b (WZONEHEIGHT-1) 3402 f607 REPEND 3403 f608 07 .byte.b (WZONEHEIGHT-1) 3402 f608 REPEND 3403 f609 07 .byte.b (WZONEHEIGHT-1) 3402 f609 REPEND 3403 f60a 07 .byte.b (WZONEHEIGHT-1) 3402 f60a REPEND 3403 f60b 07 .byte.b (WZONEHEIGHT-1) 3402 f60b REPEND 3403 f60c 07 .byte.b (WZONEHEIGHT-1) 3402 f60c REPEND 3403 f60d 07 .byte.b (WZONEHEIGHT-1) 3402 f60d REPEND 3403 f60e 07 .byte.b (WZONEHEIGHT-1) 3402 f60e REPEND 3403 f60f 07 .byte.b (WZONEHEIGHT-1) 3402 f60f REPEND 3403 f610 07 .byte.b (WZONEHEIGHT-1) 3402 f610 REPEND 3403 f611 07 .byte.b (WZONEHEIGHT-1) 3402 f611 REPEND 3403 f612 07 .byte.b (WZONEHEIGHT-1) 3402 f612 REPEND 3403 f613 07 .byte.b (WZONEHEIGHT-1) 3402 f613 REPEND 3403 f614 07 .byte.b (WZONEHEIGHT-1) 3402 f614 REPEND 3403 f615 07 .byte.b (WZONEHEIGHT-1) 3402 f615 REPEND 3403 f616 07 .byte.b (WZONEHEIGHT-1) 3404 f617 REPEND 3405 f617 3406 f617 ; Provided under the CC0 license. See the included LICENSE.txt for details. 3407 f617 3408 f617 ; a simple guard, than ensures the 7800basic code hasn't 3409 f617 ; spilled into the encryption area... 2407 bytes left in the 7800basic reserved area. 3410 f617 echo " ",($FF7E-*)d,"bytes left in the 7800basic reserved area." 3411 f617 - if (*>$FF7D) 3412 f617 - ERR ; abort the assembly 3413 f617 endif 3414 f617 ; Provided under the CC0 license. See the included LICENSE.txt for details. 3415 f617 3416 f617 - ifconst DEV 3417 f617 - ifnconst ZONEHEIGHT 3418 f617 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 3419 f617 - else 3420 f617 - if ZONEHEIGHT = 8 3421 f617 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 3422 f617 - else 3423 f617 - echo "* the 4k 7800basic area has",[($FF7E - *)]d,"bytes free." 3424 f617 - endif 3425 f617 - endif 3426 f617 endif 3427 f617 3428 f617 ; FF7E/FF7F contains the 7800basic crc checksum word 3429 f617 3430 f617 ; FF80 - FFF7 contains the 7800 encryption key 3431 f617 3432 f617 ifnconst bankswitchmode 3433 fff8 ORG $FFF8 3434 fff8 - else 3435 fff8 - ifconst ROM128K 3436 fff8 - ORG $27FF8 3437 fff8 - RORG $FFF8 3438 fff8 - endif 3439 fff8 - ifconst ROM144K 3440 fff8 - ORG $27FF8 3441 fff8 - RORG $FFF8 3442 fff8 - endif 3443 fff8 - ifconst ROM256K 3444 fff8 - ORG $47FF8 3445 fff8 - RORG $FFF8 3446 fff8 - endif 3447 fff8 - ifconst ROM272K 3448 fff8 - ORG $47FF8 3449 fff8 - RORG $FFF8 3450 fff8 - endif 3451 fff8 - ifconst ROM512K 3452 fff8 - ORG $87FF8 3453 fff8 - RORG $FFF8 3454 fff8 - endif 3455 fff8 - ifconst ROM528K 3456 fff8 - ORG $87FF8 3457 fff8 - RORG $FFF8 3458 fff8 - endif 3459 fff8 endif 3460 fff8 3461 fff8 3462 fff8 ff .byte.b $FF ; region verification. $FF=all regions 3463 fff9 f7 .byte.b $F7 ; high nibble: encryption check from $N000 to $FF7F. we only hash the last 4k for faster boot. 3464 fffa ; low nibble : N=7 atari rainbow start, N=3 no atari rainbow 3465 fffa 3466 fffa ;Vectors 3467 fffa 00 f0 .word.w NMI 3468 fffc 11 f5 .word.w START 3469 fffe 5a f0 .word.w IRQ 3470 10000