Rev 660 | Details | Compare with Previous | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
171 | demige | 1 | DEVICE ZXSPECTRUM128 |
2 | include "../../_sdk/sys_h.asm" |
||
3 | |||
4 | Z80=1 |
||
5 | Z80ATTR=1 |
||
344 | alone | 6 | Z80OPT=1 ; ? |
7 | Z80OPT2=1 ; ? |
||
8 | Z80OPT2bug=1 ; 1 ९ ⠫ 㣠 (⠬ ᠭ 3-3, TODO । ) - ५ !!! |
||
9 | Z80OPT2a=1 ; ? |
||
10 | Z80OPT3=1 ;ᯠ - ? |
||
11 | Z80OPT3ly=1 ; ? |
||
12 | Z80OPT3hy=1 ; ? |
||
13 | Z80OPT3hybug=1 ; 1 1-4, (প 쪮 ३, ) - ५ !!! |
||
14 | Z80OPT4=1 ;뢮 ᯠ - ? |
||
174 | demige | 15 | |
16 | Z80MARIOCOLOR=1 |
||
180 | demige | 17 | Z80BGCOLOR=1 |
18 | Z80MARIOCYCLECOLOR=1 |
||
19 | Z80COINCYCLECOLOR=1 |
||
174 | demige | 20 | |
171 | demige | 21 | INFINITELIVES=1 |
344 | alone | 22 | NOPIRANHAPLANT=0 ; |
23 | GOODPIRANHAPLANT=1 ; 㡨 ( ) |
||
24 | GOODBULLET=0 ; 㡨 ( 8-2 MULTITASKING) |
||
180 | demige | 25 | ALWAYSPRINCESS=0;1 ;no mushroom retainer (Toad), princess in every level-4 |
171 | demige | 26 | |
344 | alone | 27 | FASTDEMOBEFOREBREAKPOINT=0;1 ;( 宦 1-2 MUSICONINT=1) 絛 (ய뢠 reset, .. 窠) ० ࠡ⠥ |
28 | ; ᪥ 㧨 antipac.fm2 - , 砥 ० |
||
29 | ;: ५, a="A", s="B", Enter="START", Space="SELECT" |
||
30 | ;Esc (Break, Caps Shift + Space) - 室 OS |
||
31 | ;C=த 絛 |
||
32 | ;D=ࢠ (砥 ⮣ ) |
||
33 | ;V= ⥪饥 ᠭ demo.fb2 ( 窨 ᨪ) |
||
34 | ; 襬 ⠪: |
||
35 | ;- ⠢ ⥪ 㦭 絛 (|.r|) |
||
36 | ;᪠ FASTDEMOBEFOREBREAKPOINT=1 |
||
37 | ; ࠦ, D, ࠥ |
||
38 | ; 訡 V (࠭) |
||
39 | ;ࠪ⨬ demo.fm2 |
||
40 | ;饬 |.r| |
||
41 | ;ࠢ塞 ? (ᥩ த ⠪ ) |
||
42 | ;㥬 demo.fm2 , |.r| 訡, ⥪ , |.r| ࠥ ( ⠩ ) |
||
171 | demige | 43 | |
44 | ;include "6502.asm" |
||
45 | include "6502fast.asm" |
||
46 | |||
174 | demige | 47 | RESTOREPG16K=1 |
48 | MUSIC=1 |
||
231 | alone | 49 | MUSICONINT=0;1 |
174 | demige | 50 | |
51 | OSCALLS=0 |
||
594 | alone | 52 | MULTITASKING=0;1 ; MUSICONINT=1 宦 8-2 ( ⠪⮢!), , 室 GOODBULLET |
174 | demige | 53 | ;display "OSCALLS=",OSCALLS |
54 | |||
171 | demige | 55 | SWEEP=0 |
56 | |||
57 | DEMO=1 |
||
58 | |||
437 | alone | 59 | tempintstack=0x4000 ;2 bytes |
60 | STACK=0x3ffe |
||
171 | demige | 61 | INTSTACK=0x3f00 |
62 | scrbase=0x8000 |
||
63 | |||
64 | scrwid=320 |
||
65 | scrhgt=200 |
||
344 | alone | 66 | ;title safe area 224x192 ( 3 孨 ) |
67 | ; 8 . |
||
171 | demige | 68 | YSKIPFROMTOP=2;3 |
69 | |||
70 | ;font=0x4000+0x2000 ;TODO |
||
71 | |||
344 | alone | 72 | COMPACTDATA=0 ;1 뢠 |
73 | SCRATCHPAD=0x100 ; ਣ 0x000 |
||
171 | demige | 74 | |
75 | ENDLINETILE=0xff;10+('J'-'A');0xff ;letter 'J' unused |
||
344 | alone | 76 | EMPTYTILE=0x24 ;⠬ 뫮 ਣ |
187 | demige | 77 | FASTEMPTYTILES=1 |
171 | demige | 78 | |
79 | org PROGSTART |
||
80 | begin |
||
583 | alone | 81 | OS_HIDEFROMPARENT |
171 | demige | 82 | ld e,0 |
83 | OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode) |
||
84 | ld e,0 ;color byte |
||
85 | OS_CLS |
||
86 | ld e,1 |
||
87 | OS_SETSCREEN |
||
88 | ld e,0 ;color byte |
||
89 | OS_CLS |
||
90 | |||
91 | OS_GETMAINPAGES |
||
344 | alone | 92 | ;dehl= ࠭ 0000,4000,8000,c000 |
171 | demige | 93 | ld a,e |
94 | ld (codepage4000),a |
||
95 | ld a,h |
||
96 | ld (codepage8000),a |
||
97 | ld a,l |
||
98 | ld (codepagec000),a |
||
99 | OS_NEWPAGE |
||
100 | ld a,e |
||
101 | ld (tilepage),a |
||
102 | OS_NEWPAGE |
||
103 | ld a,e |
||
104 | ld (spritepage),a |
||
105 | OS_NEWPAGE |
||
106 | ld a,e |
||
107 | ld (spritepagemirver),a |
||
108 | OS_NEWPAGE |
||
109 | ld a,e |
||
110 | ld (spritepagemirhor),a |
||
111 | OS_NEWPAGE |
||
112 | ld a,e |
||
113 | ld (spritepagemirhorver),a |
||
114 | OS_NEWPAGE |
||
115 | ld a,e |
||
116 | ld (pgtileprocL),a |
||
117 | OS_NEWPAGE |
||
118 | ld a,e |
||
119 | ld (pgtileprocR),a |
||
120 | OS_NEWPAGE |
||
121 | ld a,e |
||
122 | ld (pgaddrstack),a |
||
123 | OS_NEWPAGE |
||
124 | ld a,e |
||
125 | ld (pgaddrstackcopy),a |
||
126 | |||
505 | alone | 127 | ;OS_GETSCREENPAGES |
344 | alone | 128 | ;de=࠭ 0- ࠭ (d=), hl=࠭ 1- ࠭ (h=) |
505 | alone | 129 | ;ld a,e |
130 | ;ld (setpgs_scr_low),a |
||
131 | ;xor l |
||
132 | ;ld (setpgs_scr_low_xor),a |
||
133 | ;ld a,d |
||
134 | ;ld (setpgs_scr_high),a |
||
135 | ;xor h |
||
136 | ;ld (setpgs_scr_high_xor),a |
||
171 | demige | 137 | |
187 | demige | 138 | ld de,gfxfilename |
139 | call openstream_file |
||
140 | or a |
||
141 | jp nz,noloadgfx |
||
142 | ;skip 0x8010 bytes |
||
143 | ld de,0 |
||
144 | ld hl,0x8010 |
||
145 | ;dehl=shift |
||
146 | ld a,(filehandle) |
||
147 | ld b,a |
||
148 | OS_SEEKHANDLE |
||
149 | ld de,tilegfx |
||
150 | ld hl,0x2000 |
||
151 | ;DE = Buffer address, HL = Number of bytes to read |
||
152 | call readstream_file |
||
153 | call closestream_file |
||
154 | |||
171 | demige | 155 | ld hl,0x2000+TitleScreenDataOffset |
156 | ld de,TitleScreen |
||
157 | ld bc,TitleScreenDataSize |
||
158 | ldir |
||
159 | |||
160 | call copytilesgfx |
||
161 | |||
162 | ld a,(tilepage) |
||
163 | SETPG16K ;stack in 0xfffx |
||
164 | call recodetiles |
||
165 | |||
166 | ld a,(spritepage) |
||
167 | SETPG16K ;stack in 0xfffx |
||
168 | call recodesprites |
||
169 | |||
170 | call mirspritesver |
||
171 | |||
172 | ld a,(spritepagemirver) |
||
173 | SETPG16K ;stack in 0xfffx |
||
174 | call recodesprites |
||
175 | |||
176 | call mirspriteshor |
||
177 | |||
178 | ld a,(spritepagemirhorver) |
||
179 | SETPG16K ;stack in 0xfffx |
||
180 | call recodesprites |
||
181 | |||
182 | call mirspritesver |
||
183 | |||
184 | ld a,(spritepagemirhor) |
||
185 | SETPG16K |
||
186 | call recodesprites |
||
187 | |||
188 | ;result in 0x4000: 32bytes/tile |
||
189 | |||
190 | ld sp,STACK |
||
191 | |||
192 | |||
193 | ld de,filename |
||
194 | call openstream_file |
||
195 | or a |
||
196 | jr nz,noloaddemo |
||
197 | |||
198 | ld hl,0 |
||
199 | ld de,0 |
||
200 | nvview_load0 |
||
201 | push de |
||
202 | push hl |
||
203 | call reservepage |
||
204 | pop hl |
||
205 | pop de |
||
206 | ret nz ;no memory |
||
207 | push de |
||
208 | push hl |
||
209 | ld de,0xc000 |
||
210 | ld hl,0x4000 |
||
211 | ;DE = Buffer address, HL = Number of bytes to read |
||
212 | push hl |
||
213 | call readstream_file |
||
214 | ;hl=loaded bytes |
||
215 | ld b,h |
||
216 | ld c,l |
||
217 | pop hl ;Number of bytes to read |
||
218 | or a |
||
219 | sbc hl,bc ;z=loaded as requested |
||
220 | ;bc=loaded bytes |
||
221 | pop hl |
||
222 | pop de |
||
223 | ;hlde=size |
||
224 | ;z=loaded as requested |
||
225 | ex de,hl |
||
226 | add hl,bc |
||
227 | ex de,hl |
||
228 | jr nc,$+3 |
||
229 | inc hl |
||
230 | jr z,nvview_load0 |
||
231 | ;hlde=true file size (for TRDOSFS) |
||
232 | ;ld (fcb+FCB_FSIZE),de |
||
233 | ;ld (fcb+FCB_FSIZE+2),hl |
||
234 | |||
235 | call closestream_file |
||
236 | |||
237 | jr loaddemoq |
||
238 | noloaddemo |
||
239 | call demooff |
||
240 | loaddemoq |
||
241 | |||
242 | |||
243 | |||
244 | call gentileproc_all |
||
245 | call genaddrstack |
||
246 | |||
247 | call shutay |
||
248 | |||
249 | ld e,13 |
||
250 | ld bc,0xfffd |
||
251 | out (c),e |
||
252 | ld a,0x08 ;sawtooth |
||
253 | ld b,0xbf |
||
254 | out (c),a |
||
255 | |||
256 | ld de,mariopal |
||
257 | OS_SETPAL |
||
1510 | alone | 258 | ;OS_GETTIMER ;dehl=timer |
259 | ;ld (oldtimer),hl |
||
344 | alone | 260 | YIELD ; ⠭ |
171 | demige | 261 | |
174 | demige | 262 | call setpgs_code |
171 | demige | 263 | call swapimer |
264 | |||
265 | jp Start |
||
266 | |||
267 | mirspriteshor |
||
268 | ld hl,0x2000 |
||
269 | ld bc,0x1000 |
||
270 | mirspriteshor0 |
||
271 | ld e,(hl) |
||
272 | ld a,1 |
||
273 | mirspriteshor00 |
||
274 | rr e |
||
275 | rla |
||
276 | jr nc,mirspriteshor00 |
||
277 | ld (hl),a |
||
278 | cpi |
||
279 | jp pe,mirspriteshor0 |
||
280 | ret |
||
660 | alone | 281 | |
171 | demige | 282 | mirspritesver |
283 | ld de,0x2000 |
||
284 | ;sprite gfx: 256 tiles *2 (high, low bitchars) |
||
285 | mirspritesver0 |
||
286 | ld h,d |
||
287 | ld l,e |
||
288 | ld bc,4 |
||
289 | add hl,bc |
||
290 | add hl,bc |
||
291 | push hl |
||
292 | mirspritesver00 |
||
293 | dec hl |
||
294 | ld a,(de) |
||
295 | ldi |
||
296 | dec hl |
||
297 | ld (hl),a |
||
298 | jp pe,mirspritesver00 |
||
299 | pop de |
||
300 | bit 4,d ;<0x3000 |
||
301 | jr z,mirspritesver0 |
||
302 | ret |
||
660 | alone | 303 | |
171 | demige | 304 | recodesprites |
305 | ld hl,0x2000 |
||
306 | ld de,0x4000 |
||
307 | ;sprite gfx: 256 tiles |
||
308 | ld hy,_K;_1 ;_3 too dark |
||
309 | ld hx,0 ;256 |
||
310 | recodesprites0 |
||
311 | push hl |
||
312 | add hl,hl |
||
313 | add hl,hl |
||
314 | add hl,hl |
||
315 | add hl,hl |
||
344 | alone | 316 | ld l,h ; ⠩ |
171 | demige | 317 | ld h,tileattr/256+1 |
344 | alone | 318 | ld a,(hl) ; |
171 | demige | 319 | ld hy,a |
320 | pop hl |
||
321 | call recodesprite |
||
322 | dec hx;bit 6,h ;<0x4000 |
||
323 | jr nz,recodesprites0 |
||
324 | ret |
||
325 | |||
326 | recodetiles |
||
327 | ld hl,0x3000 |
||
328 | ld de,0x6000 |
||
329 | ;tile gfx: 256-tiles |
||
330 | ld hx,0 ;256 |
||
331 | recodetiles0 |
||
332 | push hl |
||
333 | add hl,hl |
||
334 | add hl,hl |
||
335 | add hl,hl |
||
336 | add hl,hl |
||
344 | alone | 337 | ld l,h ; ⠩ |
171 | demige | 338 | ld h,tileattr/256 |
344 | alone | 339 | ld a,(hl) ;_0.._3 |
171 | demige | 340 | ld hy,a |
341 | pop hl |
||
342 | call recodetile |
||
343 | dec hx;bit 6,h ;<0x4000 |
||
344 | jr nz,recodetiles0 |
||
345 | ret |
||
346 | |||
347 | recodetile |
||
348 | ;16bytes/tile: 8bytes low bit, 8bytes high bit |
||
349 | ld lx,8 |
||
350 | recodetile0 |
||
351 | ld c,(hl) ;low bits |
||
352 | set 3,l |
||
353 | ld b,(hl) ;high bits |
||
354 | res 3,l |
||
355 | inc l |
||
356 | ;c=high gfx byte |
||
357 | ;b=low gfx byte |
||
344 | alone | 358 | ;hy=_0.._3 |
171 | demige | 359 | ;de=to |
360 | push hl |
||
361 | ld h,ttilepalrecode/256 |
||
362 | recodetilebyte0 |
||
344 | alone | 363 | ;ᤢ 梥 a=0..3 |
364 | ;᪫뢠 - 砥 梥 |
||
365 | ;⠪ 砥 ࠢ 梥 |
||
366 | ;뢠 梥⮢ |
||
171 | demige | 367 | call recodetilepixel |
368 | ld (de),a |
||
369 | inc de |
||
370 | ld a,e |
||
371 | and 3 |
||
372 | jr nz,recodetilebyte0 |
||
373 | pop hl |
||
374 | dec lx |
||
375 | jr nz,recodetile0 |
||
376 | ld bc,8 |
||
377 | add hl,bc |
||
378 | ret |
||
379 | |||
380 | recodesprite |
||
381 | ;16bytes/tile: 8bytes low bit, 8bytes high bit |
||
382 | ld lx,8 |
||
383 | recodesprite0 |
||
384 | push de |
||
385 | ld a,d;e |
||
386 | add a,3*16 ;with mask |
||
387 | ld d,a;e,a |
||
388 | ld c,(hl) ;low bits |
||
389 | set 3,l |
||
390 | ld b,(hl) ;high bits |
||
391 | res 3,l |
||
392 | inc l |
||
393 | push hl |
||
394 | ld h,ttilepalrecode/256 |
||
395 | recodespritebyte0 |
||
396 | call recodetilepixel |
||
397 | ld ly,a |
||
398 | ld a,b |
||
399 | or c |
||
400 | rra ;right pixel mask (0=transparent) |
||
401 | bit 0,a ;left pixel mask (0=transparent) |
||
402 | ld a,0x00 ;skip all pixels |
||
403 | jr c,$+4 |
||
404 | ld a,0xb8 ;keep right pixel |
||
405 | jr nz,$+4 |
||
406 | or 0x47 ;keep left pixel |
||
407 | ld (de),a ;mask |
||
408 | ld a,ly |
||
409 | inc d;e |
||
410 | ld (de),a ;gfx |
||
411 | ld a,d;e |
||
412 | sub 16+1 ;with mask |
||
413 | ld d,a;e,a |
||
414 | cpl |
||
415 | and 3*16 ;with mask |
||
416 | jr nz,recodespritebyte0 |
||
417 | pop hl |
||
418 | pop de |
||
419 | inc d;e |
||
420 | inc d;e ;next row |
||
421 | dec lx |
||
422 | jr nz,recodesprite0 |
||
423 | ;ex de,hl |
||
424 | ;ld bc,3*16 ;with mask |
||
425 | ;add hl,bc |
||
426 | ;ex de,hl |
||
427 | ld d,0x40 |
||
428 | inc e |
||
429 | ld bc,8 |
||
430 | add hl,bc |
||
431 | ret |
||
432 | |||
433 | recodetilepixel |
||
344 | alone | 434 | ;c=high gfx byte ( ᤢ) |
435 | ;b=low gfx byte ( ᤢ) |
||
436 | ;hy=_0.._3 |
||
171 | demige | 437 | ;h=ttilepalrecode/256 |
438 | ;out: a=color byte |
||
439 | xor a |
||
440 | rlc c |
||
441 | rla |
||
442 | rlc b |
||
344 | alone | 443 | adc a,a ;a=0..3= 梥 |
171 | demige | 444 | add a,hy |
445 | ld l,a |
||
446 | ld a,(hl) |
||
447 | ld ly,a ;%LLLLLlll |
||
448 | xor a |
||
449 | rlc c |
||
450 | rla |
||
451 | rlc b |
||
344 | alone | 452 | adc a,a ;a=0..3= 梥 |
171 | demige | 453 | add a,hy |
454 | ld l,a |
||
455 | ld a,(hl) ;a=%RRRRRrrr |
||
456 | ;ly=%LLLLLlll |
||
457 | add a,a |
||
458 | add a,a |
||
459 | add a,a |
||
460 | ;a=%RRrrr000 |
||
461 | xor ly |
||
462 | and %10111000 |
||
463 | xor ly |
||
464 | ;a=%RLrrrlll |
||
465 | ret |
||
466 | |||
467 | |||
344 | alone | 468 | noaddr=0x6000 ;⠬ 7*40+1 |
171 | demige | 469 | genaddrstack |
470 | call setpgaddrstack4000 |
||
471 | call genaddrstack_onepage |
||
472 | call setpgaddrstackcopy4000 |
||
473 | genaddrstack_onepage |
||
344 | alone | 474 | ; scroll phase 0 ⥪ ⠪: |
171 | demige | 475 | ;(scrL) 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 2 |
476 | ;(scrR) 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 2 |
||
344 | alone | 477 | ; scroll phase 1 ⥪ ⠪: |
171 | demige | 478 | ;(scrR) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
479 | ;(scrL) 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 2 |
||
344 | alone | 480 | ; scroll phase 2 ⥪ ⠪: |
171 | demige | 481 | ;(scrL) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
482 | ;(scrR) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
||
344 | alone | 483 | ; scroll phase 3 ⥪ ⠪: |
171 | demige | 484 | ;(scrR) noaddr, noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023 |
485 | ;(scrL) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
||
486 | |||
344 | alone | 487 | ;㥬 ⥪ 䠧 (ப १ 256 ): |
171 | demige | 488 | ;noaddr, noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr, noaddr |
489 | ld h,0x40 |
||
490 | ld de,0x8004 |
||
491 | |||
492 | ld b,25 |
||
493 | genaddrstack_lines0 |
||
494 | ld l,2 ;2 spare bytes for interrupt |
||
495 | push bc |
||
496 | push de |
||
497 | |||
498 | ld bc,noaddr |
||
499 | ld (hl),c |
||
500 | inc hl |
||
501 | ld (hl),b |
||
502 | inc hl |
||
503 | ld (hl),c |
||
504 | inc hl |
||
505 | ld (hl),b |
||
506 | inc hl |
||
507 | ld b,32 |
||
508 | genaddrstack_line0 |
||
509 | ld (hl),e |
||
510 | inc hl |
||
511 | ld (hl),d |
||
512 | inc hl |
||
513 | set 5,d |
||
514 | ld (hl),e |
||
515 | inc hl |
||
516 | ld (hl),d |
||
517 | inc hl |
||
518 | res 5,d |
||
519 | inc de |
||
520 | djnz genaddrstack_line0 |
||
521 | ld bc,noaddr |
||
522 | ld (hl),c |
||
523 | inc hl |
||
524 | ld (hl),b |
||
525 | inc hl |
||
526 | ld (hl),c |
||
527 | inc hl |
||
528 | ld (hl),b |
||
529 | ;inc hl |
||
344 | alone | 530 | ;ࠢ 64*4 = 256 |
171 | demige | 531 | inc h |
660 | alone | 532 | |
171 | demige | 533 | pop de |
534 | ex de,hl |
||
535 | ld bc,40*8 |
||
536 | add hl,bc |
||
537 | ex de,hl |
||
538 | pop bc |
||
539 | djnz genaddrstack_lines0 |
||
660 | alone | 540 | |
171 | demige | 541 | ret |
542 | |||
543 | copytilesgfx |
||
544 | ld de,0x3000+(16*0xec) ;tile 0xec |
||
545 | ld hl,copytiles_table |
||
546 | ld b,copytiles_sz |
||
547 | copytilesgfx0 |
||
548 | push bc |
||
549 | push hl |
||
550 | ld l,(hl) |
||
551 | ;l=tile from |
||
552 | ;de=addr to |
||
553 | ld h,3 |
||
554 | add hl,hl |
||
555 | add hl,hl |
||
556 | add hl,hl |
||
557 | add hl,hl ;*16 + 0x3000 |
||
558 | ld bc,16 |
||
559 | ldir |
||
560 | pop hl |
||
561 | inc hl |
||
562 | pop bc |
||
563 | djnz copytilesgfx0 |
||
564 | ld hl,0x3000+(16*0x26) |
||
565 | ld de,0x3000+(16*w26) |
||
566 | ld c,16 |
||
567 | ldir |
||
568 | ld hl,0x3000+(16*0x91) |
||
569 | ld de,0x3000+(16*x91) |
||
570 | ld c,16 |
||
571 | ldir |
||
572 | ld de,0x3000+(16*x92) |
||
573 | ld c,16 |
||
574 | ldir |
||
575 | ret |
||
576 | copytiles_table |
||
577 | db 0xa0 |
||
578 | db 0xa1 |
||
579 | db 0xa2 |
||
580 | db 0xa3 |
||
581 | db 0x27 |
||
582 | db 0xba |
||
583 | db 0xbb |
||
584 | db 0x86 |
||
585 | db 0x87 |
||
586 | db 0x8a |
||
587 | db 0x8b |
||
588 | db 0x8e |
||
589 | db 0x8f |
||
590 | db 0x25 |
||
591 | db 0x26 |
||
592 | db 0x35 |
||
593 | db 0x36 |
||
594 | db 0x37 ;cloud middle |
||
595 | db 0x38 ;cloud right |
||
596 | copytiles_sz=$-copytiles_table |
||
597 | |||
598 | gentileproc_all |
||
599 | ld a,(tilepage) |
||
600 | SETPG16K |
||
601 | ld de,0x6000 ;data |
||
602 | call setpgtileprocL |
||
603 | call gentileproc_all_half |
||
604 | ld de,0x6001 ;data |
||
605 | call setpgtileprocR |
||
606 | gentileproc_all_half |
||
607 | ld hl,0xc000 ;proc |
||
608 | gentileproc_all0 |
||
609 | push hl |
||
610 | push de |
||
611 | call gentileproc |
||
612 | pop de |
||
613 | ld hl,32 |
||
614 | add hl,de |
||
615 | ex de,hl |
||
616 | pop hl |
||
617 | inc h |
||
618 | ld a,h |
||
619 | or 0xc0 |
||
620 | ld h,a |
||
621 | inc l |
||
622 | ld a,l |
||
623 | inc a |
||
624 | jr nz,gentileproc_all0 |
||
625 | ld (hl),0xf7 ;rst 0x30 for tile #0xff |
||
626 | ;tile for endline = ENDLINETILE;0xff? |
||
555 | alone | 627 | ld hl,(0) ;ok |
171 | demige | 628 | ld (oldquitcode),hl |
629 | ld hl,ENDLINETILE*0x0101|0xc000;0xffff |
||
630 | ld (hl),0xc3 ;"jp" |
||
631 | ret |
||
632 | |||
633 | gentileproc |
||
634 | ;hl=proc |
||
635 | ;de=data |
||
636 | ;out: de=next data |
||
344 | alone | 637 | ; ⠪: |
638 | ;pop hl ;ᥫ 0..1 |
||
171 | demige | 639 | ;dup 7 |
640 | ;[ld (hl),n] |
||
641 | ;add hl,bc |
||
642 | ;edup |
||
643 | ;[ld (hl),n] |
||
344 | alone | 644 | ;pop hl ;ᥫ 4..5 ⮩ ࠭ (㣮 bit 5 +1) |
171 | demige | 645 | ;dup 7 |
646 | ;[ld (hl),n] |
||
647 | ;add hl,bc |
||
648 | ;edup |
||
649 | ;[ld (hl),n] |
||
650 | ;ld a,(de) |
||
651 | ;inc e |
||
652 | ;ld l,a |
||
653 | ;or 0xc0 |
||
654 | ;ld h,a |
||
655 | ;jp (hl) |
||
656 | push de |
||
657 | call gentileproc_bytes |
||
658 | pop de |
||
659 | inc de |
||
660 | inc de |
||
661 | call gentileproc_bytes |
||
662 | push de |
||
663 | ex de,hl |
||
664 | ld hl,gentileproc_jpcode |
||
187 | demige | 665 | ld c,gentileproc_jpcode_sz |
171 | demige | 666 | ldir |
187 | demige | 667 | if FASTEMPTYTILES |
668 | ld hl,premptytiles_was |
||
669 | ld de,premptytiles;EMPTYTILE*257+0xc000 |
||
670 | ld c,premptytiles_sz |
||
671 | ldir |
||
672 | endif |
||
171 | demige | 673 | pop de |
674 | ret |
||
675 | gentileproc_bytes |
||
676 | ld (hl),0xe1 ;"pop hl" |
||
677 | inc hl |
||
678 | ld (gentileproc_lastnonzeroaddr),hl |
||
679 | |||
680 | ;find most popular byte (at least 3 times), change to ld a,n:ld (hl),a |
||
344 | alone | 681 | ; 6 ⮢ 0 ( ) |
682 | ;TODO 㬥 室 㯯 3 |
||
171 | demige | 683 | ld c,0 ;most popular byte (0=not found) |
684 | push de |
||
685 | push hl |
||
686 | ex de,hl |
||
687 | ld e,2 ;max times (find more than that!) |
||
688 | ld b,7 |
||
689 | gentileproc_testpopular_allbytes0 |
||
690 | ld a,(hl) |
||
691 | push bc |
||
692 | push hl |
||
693 | ld d,1 ;times |
||
694 | gentileproc_testpopular0 |
||
695 | inc hl |
||
696 | inc hl |
||
697 | inc hl |
||
698 | inc hl |
||
699 | cp (hl) |
||
700 | jr nz,$+3 |
||
701 | inc d ;times |
||
702 | djnz gentileproc_testpopular0 |
||
703 | pop hl |
||
704 | pop bc |
||
705 | ld a,e ;max times |
||
706 | cp d ;times |
||
707 | jr nc,gentileproc_testpopular_nomax |
||
708 | ld e,d ;max times = times |
||
709 | ld c,(hl) ;most popular byte |
||
710 | gentileproc_testpopular_nomax |
||
711 | inc hl |
||
712 | inc hl |
||
713 | inc hl |
||
714 | inc hl ;try next byte |
||
715 | djnz gentileproc_testpopular_allbytes0 |
||
716 | pop hl |
||
717 | pop de |
||
718 | |||
719 | ld a,c |
||
720 | or a |
||
721 | jr z,gentileproc_nooldbyte |
||
722 | ld (hl),0x3e ;"ld a,n" |
||
723 | inc hl |
||
724 | ld (hl),c |
||
725 | inc hl |
||
726 | gentileproc_nooldbyte |
||
727 | |||
728 | ld b,8 |
||
729 | gentileproc_bytes0 |
||
730 | ld a,(de) |
||
731 | inc de |
||
732 | inc de |
||
733 | inc de |
||
734 | inc de |
||
735 | or a |
||
736 | jr z,gentileproc_skipbyte |
||
737 | cp c |
||
738 | ld (hl),0x77 ;"ld (hl),a |
||
739 | jr z,gentileproc_oldbyte |
||
740 | ld (hl),0x36 ;"ld (hl),n" |
||
741 | inc hl |
||
742 | ld (hl),a |
||
743 | gentileproc_oldbyte |
||
744 | inc hl |
||
745 | ld (gentileproc_lastnonzeroaddr),hl |
||
746 | gentileproc_skipbyte |
||
747 | ld (hl),0x09 ;add hl,bc |
||
748 | inc hl |
||
749 | djnz gentileproc_bytes0 |
||
750 | ;dec hl ;skip last add |
||
751 | gentileproc_lastnonzeroaddr=$+1 |
||
752 | ld hl,0 |
||
753 | ret |
||
187 | demige | 754 | |
755 | if FASTEMPTYTILES |
||
344 | alone | 756 | ;ᥩ 楤 ⮣ ⠩ (0xe424) 룫廊 ⠪: |
187 | demige | 757 | ;pop hl |
344 | alone | 758 | ;pop hl ;⮡ ࠢ sp |
187 | demige | 759 | ;inc e |
760 | ;ld a,(de) |
||
761 | ;ld l,a |
||
762 | ;or 0xc0 |
||
763 | ;ld h,a |
||
764 | ;jp (hl) ;50t |
||
344 | alone | 765 | ;⨬ ⥫쭮 ⠩: |
766 | ;1 ⮩ ⠩: ந 54t (ந 35t) |
||
767 | ;2 ⠩: ந 26t (먣 23t) |
||
768 | ;3 ⠩: 먣 0t (먣 31t) |
||
769 | ;>=4 ⠩: 먣 29..32t/tile |
||
187 | demige | 770 | premptytiles_was |
771 | disp EMPTYTILE*257+0xc000 |
||
772 | premptytiles |
||
773 | ;-24t |
||
774 | ld a,l;EMPTYTILE |
||
775 | ld h,d |
||
776 | ld l,e ;+12t |
||
777 | inc l |
||
778 | cp (hl) |
||
779 | jr nz,premptytilesq1 |
||
780 | inc l |
||
781 | cp (hl) |
||
782 | jr nz,premptytilesq2 |
||
783 | inc l |
||
784 | cp (hl) |
||
785 | jr nz,premptytilesq3 |
||
786 | premptytiles0 |
||
787 | dup 3 |
||
788 | inc l |
||
789 | cp (hl) |
||
790 | jr nz,premptytilesq |
||
791 | edup |
||
792 | inc l |
||
793 | cp (hl) |
||
794 | jp z,premptytiles0 ;+18..21t/tile |
||
795 | premptytilesq |
||
796 | ld a,l |
||
797 | sub e |
||
798 | ld e,l |
||
799 | add a,a |
||
800 | add a,a |
||
801 | ld l,a |
||
802 | ld h,0 |
||
803 | add hl,sp |
||
804 | ld sp,hl ;48t |
||
805 | ld a,(de) |
||
806 | ld l,a |
||
807 | or 0xc0 |
||
808 | ld h,a |
||
809 | jp (hl) |
||
810 | premptytilesq3 |
||
811 | pop hl |
||
812 | pop hl |
||
813 | inc e |
||
814 | premptytilesq2 |
||
815 | pop hl |
||
816 | pop hl |
||
817 | inc e |
||
818 | premptytilesq1 |
||
819 | pop hl |
||
820 | pop hl |
||
821 | ent |
||
171 | demige | 822 | gentileproc_jpcode |
187 | demige | 823 | inc e |
824 | ld a,(de) |
||
825 | ld l,a |
||
826 | or 0xc0 |
||
827 | ld h,a |
||
828 | jp (hl) |
||
829 | premptytiles_sz=$-premptytiles_was |
||
289 | dimkam | 830 | ;display "premptytiles_sz=",premptytiles_sz,"<=0x40!" |
187 | demige | 831 | gentileproc_jpcode_sz=$-gentileproc_jpcode |
832 | else |
||
833 | gentileproc_jpcode |
||
834 | inc e |
||
171 | demige | 835 | ld a,(de) |
836 | ld l,a |
||
837 | or 0xc0 |
||
838 | ld h,a |
||
839 | jp (hl) |
||
840 | gentileproc_jpcode_sz=$-gentileproc_jpcode |
||
187 | demige | 841 | endif |
171 | demige | 842 | |
187 | demige | 843 | |
171 | demige | 844 | align 256 |
845 | tileattr |
||
846 | include "tileattr.asm" |
||
847 | ttilepalrecode |
||
848 | db 0,1,2,3 ;tilepal0 |
||
849 | db 0,4,5,6 ;tilepal1 |
||
850 | db 0,7,0xf8,0xf9 ;tilepal2 |
||
344 | alone | 851 | db 0,0xfa,0xfb,6 ;tilepal3 ;10=⥭ / , 11=ઠ /, 12=㡠誠 ਮ ( 뢠 ᨭ - 梥 6) |
852 | ;梥 ਮ: [1]=4 () 13=0x3131, [2]=14=0xb1b1 ( , ), [3]=12 (㡠誠 筥 !!!) |
||
853 | ;梥 ९/Lakitu: [1]=8 (), [2]=2 ( , ᨭ!!!) 15=0xe3e3, [3]=13 ( ९) |
||
854 | ;梥 Goomba//誠/: [1]=5 (), [2]=6 (, -!!!), [3]=4 (ﯠ) |
||
855 | ;梥 : [1]=8 ( ७), [2]=10 (), [3]=11 () |
||
856 | ;梥 ਡ: [1]=5 (), [2]=10 (), [3]=13 (࠭) |
||
857 | ;梥⮪ ⫨砥 ९ ⥬, ᥣ |
||
858 | ;ଠ ⫨砥 ਮ ⠡묨 梥⠬??? ਡ/Goomba |
||
859 | ; 䫠 ⫨砥 ९ ⥬, ᥣ ᭠ |
||
171 | demige | 860 | db 0,0xfd,0xfe,0xfc ;Mario |
861 | db 0,0xf8,0xff,0xfd ;Koopa/Lakitu |
||
344 | alone | 862 | db 0,5,6,4 ;Goomba//誠/ |
863 | db 0,0xf8,0xfa,0xfb ; |
||
864 | db 0,5,0xfa,0xfd ;ਡ |
||
865 | db 0,0xf8,2,0xfd ;梥⮪ (ᥣ ) |
||
866 | db 0,0xfb,0xf8,0xfa ; |
||
867 | ;db 0,0xfd,0xfa,4 ;ଠ |
||
868 | db 0,5,0xfa,0xfd ;ଠ |
||
869 | db 0,0xf8,0xfa,0xfd ; 䫠 (ᥣ ᭠ ) |
||
171 | demige | 870 | |
871 | ;ds 0x0200-$ |
||
872 | |||
873 | if COMPACTDATA |
||
874 | Sprite_Data=$ ;= $0200 |
||
875 | Sprite_Y_Position=Sprite_Data ;db 0;= $0200 |
||
876 | ;Sprite data is delayed by one scanline; you must subtract 1 from the sprite's Y coordinate before writing it here. Hide a sprite by writing any values in $EF-$FF here. |
||
877 | ;Sprites are never displayed on the first line of the picture, and it is impossible to place a sprite partially off the top of the screen. |
||
878 | Sprite_Tilenumber=Sprite_Data+1 ;db 0;= $0201 |
||
879 | ;For 8x8 sprites, this is the tile number of this sprite within the pattern table selected in bit 3 of PPUCTRL ($2000). |
||
880 | ;For 8x16 sprites, the PPU ignores the pattern table selection and selects a pattern table from bit 0 of this number. |
||
881 | ;76543210 |
||
882 | ;|||||||| |
||
883 | ;|||||||+- Bank ($0000 or $1000) of tiles |
||
884 | ;+++++++-- Tile number of top of sprite (0 to 254; bottom half gets the next tile) |
||
885 | Sprite_Attributes=Sprite_Data+2 ;db 0;= $0202 |
||
886 | ;76543210 |
||
887 | ;|||||||| |
||
888 | ;||||||++- Palette (4 to 7) of sprite |
||
889 | ;|||+++--- Unimplemented |
||
890 | ;||+------ Priority (0: in front of background; 1: behind background) |
||
891 | ;|+------- Flip sprite horizontally |
||
892 | ;+-------- Flip sprite vertically |
||
893 | Sprite_X_Position=Sprite_Data+3 ;db 0;= $0203 |
||
894 | ;X-scroll values of $F9-FF results in parts of the sprite to be past the right edge of the screen, thus invisible. It is not possible to have a sprite partially visible on the left edge. |
||
895 | ;Instead, left-clipping through PPUMASK ($2001) can be used to simulate this effect. |
||
896 | |||
897 | ds 0x0300-$ |
||
898 | ;tile buf |
||
899 | VRAM_Buffer1_Offset db 0;= $0300 |
||
900 | VRAM_Buffer1 ds 63;???;= $0301 |
||
901 | VRAM_Buffer2_Offset db 0;= $0340 |
||
344 | alone | 902 | VRAM_Buffer2 ds 0x100;TitleScreenDataSize-64;63;???;= $0341 ;騩 $0363, 㦥 0x043a (⥫쭮) |
903 | ds 0x0500-$ ;ClearBuffersDrawIcon 512 |
||
171 | demige | 904 | endif |
905 | |||
906 | ds 0x0800-$ |
||
907 | SCRATCHPAD2=$-0x100 |
||
344 | alone | 908 | ds 0x100 ; SCRATCHPAD2+$01xx (쪮???) |
171 | demige | 909 | |
910 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
911 | align 256 |
||
912 | filepages |
||
913 | ds 128 |
||
914 | |||
915 | ;DDp palette: %grbG11RB(low),%grbG11RB(high) |
||
916 | mariopalblack |
||
917 | castlepalette |
||
231 | alone | 918 | dw 0xffff |
344 | alone | 919 | dw 0xafaf,0xeded,0x7f7f ;1=। 㡠, 2=ઠ 㡠, 3= |
920 | dw 0xecec,0x0c0c,0x1f1f ;4=ન ௨, 5= ௨, 6= =⥭ ௨ ( , 8-4 -) |
||
921 | dw 0x3d3d,0x0c0c,0xffff ;7=/⥭ , 8=, 9= (ୠ) |
||
922 | dw 0xfdfd,0xadad,0x3f3f ;10=⥭ , 11=ઠ , 12=㡠誠 ਮ ( 뢠 ᨭ - 梥 6) |
||
923 | dw 0x3d3d,0xbdbd,0xefef ;13= ਮ/ ९, 14= ਮ, 15= |
||
171 | demige | 924 | undergroundpalette |
344 | alone | 925 | ; 䮭: , ⥭ ௨ ( ); 㡠誠 ਮ ( 筥), ﯠ ਡ ( 㡠), ९ ( ࠭), ⥡ ( ࠭), toad |
171 | demige | 926 | ;dw 0xf3f3,0xa3a3,0x6161,0x7373,0xf3f3,0x3131,0xa0a0,0xb3b3 |
927 | ;dw 0xf3f3,0x0202,0x0000,0xd3d3,0xf3f3,0xf1f1,0xa1a1,0xb3b3 |
||
344 | alone | 928 | ;ࠩ ࠧ ਧ, ࠩ |
231 | alone | 929 | dw 0xffff |
344 | alone | 930 | dw 0xafaf,0xeded,0x7f7f ;1=। 㡠, 2=ઠ 㡠, 3= |
931 | dw 0xeeee,0x4c4c,0x5f5f ;4=ન ௨, 5= ௨, 6= =⥭ ௨ ( , 8-4 -) |
||
932 | dw 0x0e0e,0x0c0c,0xffff ;7=/⥭ , 8=, 9= (ୠ) |
||
933 | dw 0xfdfd,0xadad,0x3f3f ;10=⥭ , 11=ઠ , 12=㡠誠 ਮ ( 뢠 ᨭ - 梥 6) |
||
934 | dw 0x3d3d,0xbdbd,0xefef ;13= ਮ/ ९, 14= ਮ, 15= |
||
171 | demige | 935 | waterpalette |
344 | alone | 936 | dw 0xcccc ; |
937 | dw 0xafaf,0xeded,0x7f7f ;1=। 㡠, 2=ઠ 㡠, 3= |
||
938 | dw 0x6f6f,0x6c6c,0xffff ;4=ન ௨, 5= ௨, 6= =⥭ ௨ ( , 8-4 -) |
||
939 | dw 0x0e0e,0x0c0c,0xffff ;7=/⥭ , 8=/ࠫ???/ ???, 9= (ୠ) |
||
940 | dw 0xfdfd,0xadad,0x3f3f ;10=⥭ , 11=ઠ , 12=㡠誠 ਮ ( 뢠 ᨭ - 梥 6) |
||
941 | dw 0x3d3d,0xbdbd,0xecec ;13= ਮ/ ९, 14= ਮ, 15=/ 롪 |
||
171 | demige | 942 | mariopal |
943 | groundpalette |
||
344 | alone | 944 | ; ᨭ : |
171 | demige | 945 | ;23 ;e3 ;e0 |
946 | ;dw 0xc0c0,0xa3a3,0x6161,0x7373,0xc0c0,0x3131,0xa0a0,0xb3b3 |
||
947 | ;dw 0xc0c0,0x0202,0x0000,0xd3d3,0xc0c0,0xf1f1,0xa1a1,0xb3b3 |
||
344 | alone | 948 | ;/᮪ |
949 | dw 0xcccc ; |
||
950 | dw 0xafaf,0xeded,0x7f7f ;1=। 㡠 (0xe3 誮 宫), 2=ઠ 㡠 (0x61 誮 મ), 3= |
||
951 | dw 0x7d7d,0xacac,0xffff ;4=ન ௨ (0x11 誮 મ, 0x31 誮 饭, 0x71 誮 筥 - VirtualNES ⠪), 5= ௨, 6= =⥭ ௨ ( , 8-4 -) |
||
952 | dw 0x0e0e,0x0c0c,0xffff ;7=/⥭ , 8=, 9= (ୠ) |
||
953 | dw 0xfdfd,0xadad,0x3f3f ;10=⥭ / , 11=ઠ /, 12=㡠誠 ਮ (0xb3 誮 饭, 뢠 ᨭ - 梥 6) |
||
954 | dw 0x3d3d,0xbdbd,0xefef ;13= ਮ/ ९, 14= ਮ, 15= |
||
171 | demige | 955 | |
344 | alone | 956 | ;梥 ਮ: [1]=4 () 13=0x3131, [2]=14=0xb1b1 ( , ), [3]=12 (㡠誠 筥 !!!) |
957 | ;梥 ९/Lakitu: [1]=8 (), [2]=2 ( , ᨭ!!!) 15=0xe3e3, [3]=13 ( ९) |
||
958 | ;梥 Goomba//誠/: [1]=5 (), [2]=6 (, -!!!), [3]=4 (ﯠ) |
||
959 | ;梥 : [1]=8 ( ७), [2]=10 (), [3]=11 () |
||
960 | ;梥 : [1]=8 ( 誮), [2]=15 (), [3]=13 ( 墮) - ९ |
||
961 | ;梥 ਡ: [1]=5 (), [2]=10 (), [3]=13 (મ-࠭) |
||
171 | demige | 962 | |
963 | quit |
||
964 | call swapimer |
||
965 | call shutay |
||
966 | oldquitcode=$+1 |
||
967 | ld hl,0 |
||
968 | ld (0),hl |
||
187 | demige | 969 | quitquit |
507 | alone | 970 | halt |
971 | GET_KEY ; Break |
||
171 | demige | 972 | QUIT |
973 | |||
187 | demige | 974 | noloadgfx |
975 | ld e,6 |
||
976 | OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode) |
||
977 | ld e,0 |
||
978 | OS_SETSCREEN |
||
979 | ld e,0 ;color byte |
||
980 | OS_CLS |
||
981 | ld hl,tnofile |
||
982 | prerr0 |
||
983 | ld a,(hl) |
||
984 | or a |
||
985 | jr z,quitquit |
||
986 | inc hl |
||
987 | push hl |
||
988 | PRCHAR |
||
989 | pop hl |
||
990 | jr prerr0 |
||
991 | |||
171 | demige | 992 | swapimer |
993 | di |
||
231 | alone | 994 | if MULTITASKING |
660 | alone | 995 | ;ld hl,(0x0038+3) ; intjp |
996 | ;ld (intjpaddr),hl |
||
231 | alone | 997 | endif |
171 | demige | 998 | ld de,0x0038 |
999 | ld hl,oldimer |
||
1000 | ld bc,3 |
||
1001 | swapimer0 |
||
1002 | ld a,(de) |
||
1003 | ldi ;[oldimer] -> [0x0038] |
||
1004 | dec hl |
||
1005 | ld (hl),a ;[0x0038] -> [oldimer] |
||
1006 | inc hl |
||
1007 | jp pe,swapimer0 |
||
1008 | ei |
||
1009 | ret |
||
1010 | oldimer |
||
344 | alone | 1011 | jp on_int ; 0x0038 |
660 | alone | 1012 | jp 0x0038+3 |
171 | demige | 1013 | |
1014 | setpgs_code |
||
1015 | codepage4000=$+1 |
||
1016 | ld a,0 |
||
174 | demige | 1017 | if RESTOREPG16K |
434 | alone | 1018 | ;ld (curpg4000),a |
174 | demige | 1019 | endif |
171 | demige | 1020 | SETPG16K |
1021 | codepage8000=$+1 |
||
1022 | ld a,0 |
||
1023 | SETPG32KLOW |
||
1024 | codepagec000=$+1 |
||
1025 | ld a,0 |
||
1026 | SETPG32KHIGH |
||
1027 | ret |
||
1028 | |||
1029 | setpgs_scr |
||
1030 | tilepage=$+1 |
||
1031 | ld a,0 |
||
174 | demige | 1032 | if RESTOREPG16K |
434 | alone | 1033 | ;ld (curpg4000),a |
174 | demige | 1034 | endif |
171 | demige | 1035 | SETPG16K |
505 | alone | 1036 | ;setpgs_scr_low=$+1 |
1037 | ; ld a,0;pgscr0_0 ;scr0_0 |
||
1038 | call getuser_scr_low |
||
171 | demige | 1039 | SETPG32KLOW |
505 | alone | 1040 | ;setpgs_scr_high=$+1 |
1041 | ; ld a,0;pgscr0_1 ;scr0_1 |
||
1042 | call getuser_scr_high |
||
171 | demige | 1043 | SETPG32KHIGH |
1044 | ret |
||
1045 | |||
505 | alone | 1046 | getuser_scr_low |
1047 | getuser_scr_low_patch=$+1 |
||
1048 | getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low) |
||
555 | alone | 1049 | ld a,(user_scr0_low) ;ok |
505 | alone | 1050 | ret |
1051 | |||
1052 | getuser_scr_high |
||
1053 | getuser_scr_high_patch=$+1 |
||
1054 | getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high) |
||
555 | alone | 1055 | ld a,(user_scr0_high) ;ok |
505 | alone | 1056 | ret |
1057 | |||
1058 | |||
171 | demige | 1059 | align 256 |
1060 | tytoscr |
||
1061 | dup 200 |
||
1062 | db (($&0xff)*40)&0xff |
||
1063 | edup |
||
1064 | align 256 |
||
1065 | dup 200 |
||
1066 | db (($&0xff)*40)/256 + 0x80 |
||
1067 | edup |
||
1068 | |||
1069 | macro NEXTCOLUMN |
||
1070 | bit 6,h |
||
1071 | set 6,h |
||
1072 | jr z,$+2+4+2+2+1 |
||
1073 | ld a,h |
||
1074 | xor 0x60 |
||
1075 | ld h,a |
||
1076 | and 0x20 |
||
1077 | jr nz,$+3 |
||
1078 | inc hl |
||
1079 | endm |
||
1080 | |||
1081 | macro COUNTSCRADDR |
||
1082 | add a,(hl) |
||
1083 | inc h |
||
1084 | ld c,a |
||
1085 | ;ld h,(hl) |
||
1086 | adc a,(hl) |
||
1087 | sub c |
||
1088 | ld l,c;a |
||
1089 | ;ld a,b |
||
1090 | ;adc a,h |
||
1091 | ;inc h |
||
1092 | ;ld l,c ;x |
||
344 | alone | 1093 | ;add a,(hl) ;8+7=15t, rra:srl a=12t, 먣뢠 2 bit |
171 | demige | 1094 | ;inc h |
1095 | ;ld a,(hl) |
||
344 | alone | 1096 | ;ld (prcharxy_jr),a ;4+7+13+12(jr) = 35t, bit:jr z:bit:jr z, । 16+7+12=35t ⮦ |
171 | demige | 1097 | endm |
1098 | |||
1099 | macro NEXTCOLUMNS0 |
||
1100 | ld h,a ;.00 |
||
1101 | push hl |
||
1102 | set 6,h ;.10 |
||
1103 | push hl |
||
1104 | xor 0x20 |
||
1105 | ld h,a ;.01 |
||
1106 | push hl |
||
1107 | set 6,h ;.11 |
||
1108 | endm |
||
1109 | macro NEXTCOLUMNS1 |
||
1110 | ld c,a |
||
1111 | xor 0x40 |
||
1112 | ld h,a ;.10 |
||
1113 | push hl |
||
1114 | xor 0x60 |
||
1115 | ld h,a ;.01 |
||
1116 | push hl |
||
1117 | set 6,h ;.11 |
||
1118 | push hl |
||
1119 | ld h,c ;.00 |
||
1120 | inc hl |
||
1121 | endm |
||
1122 | macro NEXTCOLUMNS2 |
||
1123 | ld h,a |
||
1124 | set 5,h ;.01 |
||
1125 | push hl |
||
1126 | set 6,h ;.11 |
||
1127 | push hl |
||
1128 | ld h,a ;.00 |
||
1129 | inc hl |
||
1130 | push hl |
||
1131 | set 6,h ;.10 |
||
1132 | endm |
||
1133 | macro NEXTCOLUMNS3 |
||
1134 | ld c,a |
||
1135 | xor 0x60 |
||
1136 | ld h,a ;.11 |
||
1137 | push hl |
||
1138 | ld h,c ;.00 |
||
1139 | inc hl |
||
1140 | push hl |
||
1141 | set 6,h ;.10 |
||
1142 | push hl |
||
344 | alone | 1143 | ld a,h ; , .. 뫮 inc hl |
171 | demige | 1144 | xor 0x60 |
1145 | ld h,a ;.01 |
||
1146 | endm |
||
1147 | |||
1148 | prcharxy |
||
1149 | ;de=gfx |
||
1150 | ;la=yx |
||
1151 | ;CY=0 |
||
1152 | ld h,tytoscr/256 |
||
1153 | rra |
||
1154 | jr c,prcharxy_nextcolumns13 |
||
1155 | rra;srl a |
||
1156 | jr c,prcharxy_nextcolumns2 |
||
1157 | prcharxy_nextcolumns0 |
||
1158 | COUNTSCRADDR |
||
1159 | NEXTCOLUMNS0 |
||
1160 | jp prcharxy_scrok |
||
1161 | prcharxy_nextcolumns2 |
||
1162 | COUNTSCRADDR |
||
1163 | NEXTCOLUMNS2 |
||
1164 | jp prcharxy_scrok |
||
1165 | prcharxy_nextcolumns13 |
||
1166 | srl a |
||
1167 | jr c,prcharxy_nextcolumns3 |
||
1168 | prcharxy_nextcolumns1 |
||
1169 | COUNTSCRADDR |
||
1170 | NEXTCOLUMNS1 |
||
1171 | jp prcharxy_scrok |
||
1172 | prcharxy_nextcolumns3 |
||
1173 | COUNTSCRADDR |
||
1174 | NEXTCOLUMNS3 |
||
1175 | prcharxy_scrok |
||
1176 | |||
1177 | macro SHOWBYTEBEHIND |
||
1178 | inc d;e |
||
1179 | cp (hl) ;scr |
||
1180 | jr nz,$+5 |
||
1181 | ld a,(de) |
||
1182 | ld (hl),a ;scr |
||
1183 | xor a |
||
1184 | inc d;e |
||
1185 | endm |
||
1186 | macro SHOWBYTEBEHIND_LAST |
||
1187 | cp (hl) ;scr |
||
1188 | ret nz |
||
1189 | inc d;e |
||
1190 | ld a,(de) |
||
1191 | ld (hl),a ;scr |
||
1192 | ret |
||
1193 | endm |
||
1194 | |||
187 | demige | 1195 | macro SHOWBYTE ;TODO pop de |
171 | demige | 1196 | ex de,hl |
1197 | ld a,(de) ;scr |
||
1198 | and (hl) ;font |
||
1199 | inc h;l |
||
1200 | or (hl) |
||
1201 | inc h;l |
||
1202 | ld (de),a ;scr |
||
1203 | ex de,hl |
||
1204 | endm |
||
187 | demige | 1205 | macro SHOWBYTE_LAST ;TODO pop de |
171 | demige | 1206 | ex de,hl |
1207 | ld a,(de) ;scr |
||
1208 | and (hl) ;font |
||
1209 | inc h;l |
||
1210 | or (hl) |
||
1211 | ld (de),a ;scr |
||
1212 | ret |
||
1213 | endm |
||
1214 | |||
1215 | ;ld a,(de) ;font |
||
1216 | ;ld (hl),a ;scr |
||
1217 | ; inc d;e |
||
1218 | ;add hl,bc |
||
1219 | |||
1220 | |||
1221 | ;x=???432Xx |
||
1222 | ;scraddr = %1xX????? ?????432 |
||
344 | alone | 1223 | ld bc,40 ;TODO ᨬ ॢ |
171 | demige | 1224 | |
1225 | bit 5,(ix+2) ;attributes.behind |
||
1226 | jp nz,prcharxy_behind |
||
1227 | |||
1228 | dup 7 |
||
1229 | SHOWBYTE |
||
1230 | add hl,bc |
||
1231 | edup |
||
1232 | SHOWBYTE |
||
1233 | |||
1234 | pop hl |
||
1235 | dup 7 |
||
1236 | SHOWBYTE |
||
1237 | add hl,bc |
||
1238 | edup |
||
1239 | SHOWBYTE |
||
1240 | |||
1241 | pop hl |
||
1242 | dup 7 |
||
1243 | SHOWBYTE |
||
1244 | add hl,bc |
||
1245 | edup |
||
1246 | SHOWBYTE |
||
1247 | |||
1248 | pop hl |
||
1249 | dup 7 |
||
1250 | SHOWBYTE |
||
1251 | add hl,bc |
||
1252 | edup |
||
1253 | SHOWBYTE_LAST |
||
344 | alone | 1254 | ;ret ;⠬ 㦥 |
171 | demige | 1255 | |
1256 | prcharxy_behind |
||
1257 | xor a |
||
1258 | dup 7 |
||
1259 | SHOWBYTEBEHIND |
||
1260 | add hl,bc |
||
1261 | edup |
||
1262 | SHOWBYTEBEHIND |
||
1263 | |||
1264 | pop hl |
||
1265 | dup 7 |
||
1266 | SHOWBYTEBEHIND |
||
1267 | add hl,bc |
||
1268 | edup |
||
1269 | SHOWBYTEBEHIND |
||
1270 | |||
1271 | pop hl |
||
1272 | dup 7 |
||
1273 | SHOWBYTEBEHIND |
||
1274 | add hl,bc |
||
1275 | edup |
||
1276 | SHOWBYTEBEHIND |
||
1277 | |||
1278 | pop hl |
||
1279 | dup 7 |
||
1280 | SHOWBYTEBEHIND |
||
1281 | add hl,bc |
||
1282 | edup |
||
1283 | SHOWBYTEBEHIND_LAST |
||
344 | alone | 1284 | ;ret ;⠬ 㦥 |
171 | demige | 1285 | |
1286 | EmulatePPU |
||
1287 | if FASTDEMOBEFOREBREAKPOINT |
||
206 | alone | 1288 | ld a,0 |
1289 | sub 4 |
||
1290 | ld ($-1-2),a |
||
1291 | ;scf |
||
1292 | jr c,EmulatePPU_noskipgo |
||
171 | demige | 1293 | skipPPU=$ |
1294 | ret |
||
206 | alone | 1295 | EmulatePPU_noskipgo |
171 | demige | 1296 | endif |
344 | alone | 1297 | ; 䫠 ⮢ ࠭ (砥 뢠) |
1298 | ; 㤥 ⠪: |
||
1299 | ;३ 1: |
||
1300 | ; ࠭0, 㥬 ࠭1 |
||
1301 | ;३ 2: |
||
1302 | ; ࠭0, 稫 ᮢ ࠭1, [ 㦭 ], 砫 ᮢ ࠭0 ( ) |
||
1303 | ;३ 3: |
||
1304 | ; ࠭1 |
||
1305 | ;⮢ - ⥪騩 ⠩ != ⠩ 諮 ᮢ |
||
1306 | ;塞 ⠩, ⥬ 뢠 |
||
171 | demige | 1307 | EmulatePPU_waitforscreenready0 |
1308 | call gettimer |
||
1309 | endoflastredrawtimer=$+1 |
||
1310 | ld de,0 |
||
1311 | or a |
||
1312 | sbc hl,de |
||
206 | alone | 1313 | jr z,EmulatePPU_waitforscreenready0 |
171 | demige | 1314 | |
174 | demige | 1315 | if OSCALLS |
171 | demige | 1316 | curpalette=$+1 |
1317 | ld de,mariopal |
||
1318 | oldpalette=$+1 |
||
1319 | ld hl,0 |
||
1320 | ld (oldpalette),de |
||
1321 | or a |
||
1322 | sbc hl,de |
||
344 | alone | 1323 | jp z,EmulatePPU_nochpal ;ॠ쭮 ঠ 梥 ਮ : ⮬ oldpalette= |
171 | demige | 1324 | push de |
1510 | alone | 1325 | ;OS_GETTIMER ;dehl=timer |
1326 | ;ld (oldtimer),hl ; yield 뫥 뢠 |
||
344 | alone | 1327 | YIELD ; di swapimer |
1328 | call swapimer ; YIELD, .. di..ei |
||
171 | demige | 1329 | pop de |
344 | alone | 1330 | OS_SETPAL ; ६ ⠭ ࠡ稪 뢠, 몠 몫祭 ( ⠪ , 쪮 諮 뢠 ⥬ ⠩ ⠩) |
1331 | YIELD ; ⠭ |
||
171 | demige | 1332 | call swapimer |
174 | demige | 1333 | else |
171 | demige | 1334 | EmulatePPU_nochpal |
174 | demige | 1335 | endif |
231 | alone | 1336 | |
171 | demige | 1337 | call setpgs_scr |
1338 | |||
505 | alone | 1339 | wascurkeyredraw=$+1 |
1340 | ld a,0 |
||
1341 | cp key_redraw |
||
1342 | if 1==1 |
||
1343 | jr nz,EmulatePPU_nofullcls |
||
1344 | xor a |
||
1345 | ld (wascurkeyredraw),a |
||
1346 | ;ld hl,0x8000 |
||
1347 | ;ld de,0x8000+1 |
||
1348 | ;ld bc,0x7fff |
||
1349 | ;ld (hl),l;0 |
||
1350 | ;ldir |
||
1351 | ld e,0 |
||
1352 | OS_SETSCREEN |
||
1353 | ld e,0 ;color byte |
||
1354 | OS_CLS |
||
1355 | ld e,1 |
||
1356 | OS_SETSCREEN |
||
1357 | ld e,0 ;color byte |
||
1358 | OS_CLS |
||
1359 | EmulatePPU_nofullcls |
||
1360 | endif |
||
171 | demige | 1361 | ld hl,0x8000+4+32 |
1362 | call emppucls |
||
1363 | ld hl,0xa000+4+32 |
||
1364 | call emppucls |
||
1365 | ld hl,0xc000+4+32 |
||
1366 | call emppucls |
||
1367 | ld hl,0xe000+4+32 |
||
187 | demige | 1368 | call emppucls ;cls=173000 |
171 | demige | 1369 | |
1370 | ld hl,proc_endline |
||
344 | alone | 1371 | ld (0),hl ; ⥬ ࠡ稪 뢠 ᯥ (0x0001) |
187 | demige | 1372 | call prtilesfast ;143700 |
171 | demige | 1373 | |
1374 | call setpgs_scr |
||
1375 | ;ld a,0x40 |
||
1376 | ;ld (fonthsb),a |
||
344 | alone | 1377 | ;㥬 ࠩ ⭮ 浪 (0- । ) |
171 | demige | 1378 | ld ix,Sprite_Data+256-4 |
187 | demige | 1379 | ;ld b,64;8 |
171 | demige | 1380 | prsprites0 |
187 | demige | 1381 | ;push bc |
1382 | ld a,(ix) ;y |
||
1383 | sub 8*YSKIPFROMTOP |
||
1384 | cp 200-8 |
||
344 | alone | 1385 | jp nc,prsprites_skip ;設⢮ ࠩ⮢ ᥩ , ==0xf8 |
187 | demige | 1386 | ld l,a ;y |
1387 | |||
171 | demige | 1388 | ld a,(ix+2) ;attributes |
344 | alone | 1389 | rla ;flip vertically ;TODO ணࠬ |
171 | demige | 1390 | spritepage=$+1 |
1391 | spritepagemirhor=$+2 |
||
1392 | ld bc,0 |
||
1393 | jr nc,$+5 |
||
1394 | spritepagemirver=$+1 |
||
1395 | spritepagemirhorver=$+2 |
||
1396 | ld bc,0 |
||
1397 | rla ;flip horizontally |
||
1398 | ld a,c; |
||
1399 | jr nc,$+3 |
||
1400 | ld a,b;mirver |
||
174 | demige | 1401 | if RESTOREPG16K |
434 | alone | 1402 | ;ld (curpg4000),a |
174 | demige | 1403 | endif |
171 | demige | 1404 | SETPG16K |
1405 | |||
1406 | ld a,(ix+3) ;x |
||
180 | demige | 1407 | inc a |
344 | alone | 1408 | jr z,prsprites_skip ;祬- 릪 ࠭ ࠭ ⠪ x=0xff TODO |
171 | demige | 1409 | srl a |
1410 | add a,4*4 |
||
1411 | |||
1412 | ld e,(ix+1) ;tile |
||
1413 | ld d,0x40 ;gfx |
||
1414 | ;ld l,e |
||
1415 | ;ld h,0x40/64 |
||
1416 | ; add hl,hl |
||
1417 | ; add hl,hl |
||
1418 | ; add hl,hl |
||
1419 | ; add hl,hl |
||
1420 | ; add hl,hl |
||
1421 | ; add hl,hl |
||
1422 | ;ex de,hl |
||
1423 | ;la=yx |
||
1424 | ;de=gfx |
||
1425 | call prcharxy |
||
1426 | prsprites_skip |
||
187 | demige | 1427 | ;ld bc,-4 |
1428 | ;add ix,bc |
||
1429 | ;pop bc |
||
1430 | ;djnz prsprites0 |
||
1431 | ld a,lx |
||
1432 | sub 4 |
||
1433 | ld lx,a |
||
344 | alone | 1434 | jp nz,prsprites0 ;0- ࠩ - ࠩ ⪨, 뢮 |
231 | alone | 1435 | ;jp nc,prsprites0 |
171 | demige | 1436 | |
1437 | ld a,1 |
||
231 | alone | 1438 | curscreen=$+1 |
171 | demige | 1439 | xor 1 |
231 | alone | 1440 | ld (curscreen),a |
174 | demige | 1441 | if OSCALLS |
171 | demige | 1442 | ld e,a |
344 | alone | 1443 | OS_SETSCREEN ;䠪᪨ 뢠 ; ⮡ࠧ 0- ࠭ |
171 | demige | 1444 | ld a,e |
174 | demige | 1445 | endif |
171 | demige | 1446 | add a,a |
1447 | add a,a |
||
1448 | add a,a |
||
1449 | ld (imer_curscreen_value),a |
||
174 | demige | 1450 | ;ld bc,0x7ffd |
1451 | ;out (c),a |
||
171 | demige | 1452 | |
1453 | call gettimer |
||
1454 | ld (endoflastredrawtimer),hl |
||
1455 | |||
505 | alone | 1456 | ; ld hl,setpgs_scr_low |
1457 | ; ld a,(hl) |
||
1458 | ;setpgs_scr_low_xor=$+1 |
||
1459 | ; xor 2 |
||
1460 | ; ld (hl),a |
||
1461 | ; ld hl,setpgs_scr_high |
||
1462 | ; ld a,(hl) |
||
1463 | ;setpgs_scr_high_xor=$+1 |
||
1464 | ; xor 2 |
||
1465 | ; ld (hl),a |
||
1466 | ld hl,getuser_scr_low_patch |
||
171 | demige | 1467 | ld a,(hl) |
505 | alone | 1468 | xor getuser_scr_low_patchN |
171 | demige | 1469 | ld (hl),a |
505 | alone | 1470 | ld hl,getuser_scr_high_patch |
171 | demige | 1471 | ld a,(hl) |
505 | alone | 1472 | xor getuser_scr_high_patchN |
171 | demige | 1473 | ld (hl),a |
1474 | |||
1475 | call setpgs_code |
||
1476 | ld d,0 |
||
1477 | ld b,d |
||
1478 | ret |
||
1479 | |||
1480 | emppucls |
||
1481 | ld (emppuclssp),sp |
||
1482 | ld de,0 |
||
1483 | ld bc,40 |
||
1484 | ld a,200 |
||
1485 | emppucls0 |
||
344 | alone | 1486 | ld sp,hl ; ६ 뢠 de=0 |
171 | demige | 1487 | ld (hl),e |
1488 | dup 32/2 |
||
1489 | push de |
||
1490 | edup |
||
1491 | add hl,bc |
||
1492 | dec a |
||
1493 | jr nz,emppucls0 |
||
1494 | emppuclssp=$+1 |
||
1495 | ld sp,0 |
||
1496 | ret |
||
1497 | |||
1498 | include "nesconst.asm" |
||
1499 | include "smbconst.asm" |
||
1500 | |||
1501 | TitleScreen |
||
1502 | ds TitleScreenDataSize |
||
1503 | |||
1504 | prtilesfast |
||
1505 | call setpgaddrstack4000 |
||
1506 | ld hl,0x2000 + (32*YSKIPFROMTOP) |
||
1507 | ld de,0x4000+6 ;addrstack |
||
1508 | ld bc,0x0280;0x0220 |
||
1509 | call prtilesfast0block |
||
231 | alone | 1510 | |
171 | demige | 1511 | ld a,(Sprite0HitDetectFlag) |
1512 | or a |
||
1513 | ld c,0x80 |
||
1514 | jr z,prtilesfastbottom ;no scroll |
||
1515 | |||
1516 | ld a,(PPU_CTRL_REG1) |
||
1517 | rra |
||
1518 | jr nc,$+4 |
||
1519 | set 2,h ;2nd tilemap |
||
1520 | |||
1521 | ld a,(PPU_SCROLL_REG_H) |
||
1522 | rra |
||
1523 | ;rra |
||
1524 | ;rra |
||
1525 | and 127;31 |
||
1526 | ld c,a ;scroll |
||
1527 | push hl |
||
1528 | srl a |
||
1529 | srl a |
||
1530 | add a,l |
||
1531 | ld l,a |
||
344 | alone | 1532 | ;㤥 뢮 32-scroll, ࠢ scroll |
171 | demige | 1533 | |
1534 | push bc |
||
1535 | push de ;screen (addrstack) |
||
1536 | ld a,c |
||
1537 | and 3 |
||
1538 | jr z,prtilesfast_noblankleft |
||
1539 | dec de |
||
1540 | dec a |
||
1541 | jr nz,$-3 |
||
1542 | prtilesfast_noblankleft |
||
1543 | ld a,128;32 |
||
1544 | sub c |
||
1545 | ld c,a |
||
1546 | ld b,25-2 |
||
1547 | call prtilesfast0block |
||
1548 | pop de ;screen (addrstack) |
||
1549 | pop bc ;scroll |
||
1550 | pop hl |
||
1551 | ld a,h |
||
1552 | xor 4 |
||
1553 | ld h,a ;another tilemap |
||
1554 | ;ld b,0 |
||
1555 | ld a,128;32 |
||
1556 | sub c |
||
1557 | ;add a,a |
||
1558 | ;add a,a |
||
1559 | add a,e |
||
1560 | ld e,a |
||
1561 | ;adc a,d |
||
1562 | ;sub e |
||
1563 | ;ld d,a |
||
1564 | |||
1565 | prtilesfastbottom |
||
1566 | ld b,25-2 |
||
1567 | ld a,c |
||
1568 | or a |
||
1569 | ret z |
||
1570 | |||
344 | alone | 1571 | ; scroll phase 0 ⥪ ⠪: |
171 | demige | 1572 | ;(scrL) 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 2 |
1573 | ;(scrR) 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 2 |
||
344 | alone | 1574 | ; scroll phase 1 ⥪ ⠪: |
171 | demige | 1575 | ;(scrR) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
1576 | ;(scrL) 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 2 |
||
344 | alone | 1577 | ; scroll phase 2 ⥪ ⠪: |
171 | demige | 1578 | ;(scrL) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
1579 | ;(scrR) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
||
344 | alone | 1580 | ; scroll phase 3 ⥪ ⠪: |
171 | demige | 1581 | ;(scrR) noaddr, noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023 |
1582 | ;(scrL) noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr x 1 |
||
1583 | |||
344 | alone | 1584 | ;㥬 ⥪ 䠧 (ப १ 256 ): |
171 | demige | 1585 | ;noaddr, noaddr, 0x8004, 0xa004, 0x8005, ... 0xa023, noaddr, noaddr |
1586 | prtilesfast0block |
||
1587 | bit 0,e |
||
1588 | jr z,prtilesfast0block_even |
||
1589 | res 0,e |
||
1590 | push bc |
||
1591 | push de |
||
1592 | push hl |
||
1593 | push bc |
||
505 | alone | 1594 | ;ld a,(setpgs_scr_high) |
1595 | call getuser_scr_high |
||
171 | demige | 1596 | SETPG32KLOW |
1597 | call setpgtileprocL |
||
1598 | pop bc |
||
1599 | call prtilesfast0lines |
||
505 | alone | 1600 | ;ld a,(setpgs_scr_low) |
1601 | call getuser_scr_low |
||
171 | demige | 1602 | SETPG32KLOW |
1603 | call setpgtileprocR |
||
1604 | pop hl |
||
1605 | pop de |
||
1606 | pop bc |
||
1607 | inc de |
||
1608 | inc de |
||
1609 | jp prtilesfast0lines |
||
1610 | |||
1611 | prtilesfast0block_even |
||
1612 | push bc |
||
1613 | push de |
||
1614 | push hl |
||
1615 | push bc |
||
505 | alone | 1616 | ;ld a,(setpgs_scr_low) |
1617 | call getuser_scr_low |
||
171 | demige | 1618 | SETPG32KLOW |
1619 | call setpgtileprocL |
||
1620 | pop bc |
||
1621 | call prtilesfast0lines |
||
505 | alone | 1622 | ;ld a,(setpgs_scr_high) |
1623 | call getuser_scr_high |
||
171 | demige | 1624 | SETPG32KLOW |
1625 | call setpgtileprocR |
||
1626 | pop hl |
||
1627 | pop de |
||
1628 | pop bc |
||
1629 | ;call prtilesfast0 |
||
1630 | ;ret |
||
1631 | |||
1632 | ;hl=tileaddr for line start |
||
1633 | ;de=addrstack |
||
1634 | ;b=hgt |
||
1635 | ;c=width ;max 128 |
||
1636 | ;out: hl=tileaddr after last line, de=addrstack after last line |
||
1637 | prtilesfast0lines |
||
1638 | ld hy,d |
||
1639 | ld ly,e ;iy=addrstack |
||
1640 | ld (prtilelinefast_sp),sp |
||
1641 | dec c |
||
1642 | srl c |
||
1643 | srl c |
||
1644 | inc c ;c=((width+3)/4) |
||
1645 | ld a,l |
||
344 | alone | 1646 | add a,c ; ७, .. ⠥ ⠩ १ inc e |
171 | demige | 1647 | ld l,a ;hl=tileaddr for line end |
1648 | ;hl=tileaddr for line end |
||
1649 | ;iy=addrstack |
||
1650 | ;b=hgt |
||
1651 | ;c=((width+3)/4) |
||
1652 | exx |
||
1653 | ld bc,40 |
||
1654 | exx |
||
1655 | ld e,32 |
||
1656 | ;a=l |
||
1657 | ;jr $ |
||
1658 | _prtilesfast0 |
||
1659 | ld sp,iy ;addrstack for this line |
||
1660 | inc hy ;addrstack for next line |
||
344 | alone | 1661 | sub c ; ७, .. ⠥ ⠩ १ inc e |
171 | demige | 1662 | ld d,(hl) ;old tile after last tile |
1663 | ld (hl),ENDLINETILE;0xfe ;patch after last tile |
||
1664 | exx |
||
1665 | ld e,a |
||
1666 | exx |
||
1667 | ld a,h |
||
1668 | exx |
||
1669 | ld d,a ;de=tileaddr for line start |
||
1670 | ld a,(de) |
||
187 | demige | 1671 | ;inc e |
171 | demige | 1672 | ld l,a |
1673 | or 0xc0 |
||
1674 | ld h,a |
||
1675 | jp (hl) |
||
1676 | proc_endline |
||
1677 | exx |
||
1678 | ld (hl),d ;unpatch after last tile |
||
344 | alone | 1679 | ;add hl,de ;+32 (for next tileline) ; 砫 ப, ப ४襭 HSB |
171 | demige | 1680 | ld a,l |
1681 | sub c |
||
1682 | add a,e |
||
1683 | jp nc,$+4 |
||
1684 | inc h |
||
1685 | add a,c |
||
1686 | ld l,a |
||
1687 | djnz _prtilesfast0 |
||
1688 | prtilelinefast_sp=$+1 |
||
1689 | ld sp,0 |
||
1690 | ld d,hy |
||
1691 | ld e,ly |
||
344 | alone | 1692 | sub c ; ७, .. ⠥ ⠩ १ inc e |
171 | demige | 1693 | ld l,a ;hl=tileaddr after last line |
1694 | ret |
||
187 | demige | 1695 | |
171 | demige | 1696 | setpgaddrstack4000 |
1697 | pgaddrstack=$+1 |
||
1698 | ld a,0 |
||
174 | demige | 1699 | if RESTOREPG16K |
434 | alone | 1700 | ;ld (curpg4000),a |
174 | demige | 1701 | endif |
171 | demige | 1702 | SETPG16K |
1703 | ret |
||
344 | alone | 1704 | setpgaddrstackcopy4000 ;⮫쪮 int |
171 | demige | 1705 | pgaddrstackcopy=$+1 |
1706 | ld a,0 |
||
1707 | SETPG16K |
||
1708 | ret |
||
1709 | |||
1710 | setpgtileprocL |
||
1711 | pgtileprocL=$+1 |
||
1712 | ld a,0 |
||
1713 | SETPG32KHIGH |
||
1714 | ret |
||
1715 | setpgtileprocR |
||
1716 | pgtileprocR=$+1 |
||
1717 | ld a,0 |
||
1718 | SETPG32KHIGH |
||
1719 | ret |
||
1720 | |||
1721 | shutay |
||
1722 | ld de,0xe00 |
||
1723 | shutay0 |
||
1724 | dec d |
||
1725 | ld bc,0xfffd |
||
1726 | out (c),d |
||
1727 | ld b,0xbf |
||
1728 | out (c),e |
||
1729 | jr nz,shutay0 |
||
1730 | ret |
||
1731 | |||
174 | demige | 1732 | if OSCALLS==0 |
1733 | oldpalette=$ |
||
1734 | dw 0 |
||
1735 | endif |
||
171 | demige | 1736 | on_int |
1737 | ;if stack in 0x4000..0x7fff: |
||
1738 | ;restore stack from pgaddrstackcopy (set in 0x4000 temporarily, then set pgaddrstack) |
||
187 | demige | 1739 | ;else restore stack with de;0 |
171 | demige | 1740 | ld (on_int_hl),hl |
1741 | ld (on_int_sp),sp |
||
1742 | ld (on_int_spcopy),sp |
||
1743 | pop hl |
||
1744 | ld (on_int_sp2),sp |
||
231 | alone | 1745 | ld (on_int_jp),hl |
171 | demige | 1746 | ld sp,INTSTACK |
1747 | push af |
||
1748 | push bc |
||
1749 | push de |
||
434 | alone | 1750 | |
1751 | if RESTOREPG16K |
||
660 | alone | 1752 | ld a,(curpg16k) ;ok |
434 | alone | 1753 | push af |
1754 | endif |
||
660 | alone | 1755 | |
174 | demige | 1756 | imer_curscreen_value=$+1 |
1757 | ld a,0 |
||
1758 | ld bc,0x7ffd |
||
1759 | out (c),a |
||
1760 | |||
171 | demige | 1761 | ld a,(on_int_sp+1) |
1762 | sub 0x40 |
||
344 | alone | 1763 | cp 0x3f ;, ⮡ 墠 ࠭ 0x8000 |
187 | demige | 1764 | ex de,hl;ld hl,0 |
171 | demige | 1765 | jr nc,on_int_norestoredata |
1766 | ;jr $ |
||
1767 | ld a,(pgaddrstackcopy) |
||
1768 | SETPG16K |
||
1769 | on_int_spcopy=$+1 |
||
555 | alone | 1770 | ld hl,(0) ;ok |
174 | demige | 1771 | ;if RESTOREPG16K==0 |
171 | demige | 1772 | ld a,(pgaddrstack) |
1773 | SETPG16K |
||
174 | demige | 1774 | ;endif |
171 | demige | 1775 | on_int_norestoredata |
1776 | on_int_sp=$+1 |
||
344 | alone | 1777 | ld (0),hl ;⠭ ⥪ |
231 | alone | 1778 | |
1779 | if MULTITASKING |
||
660 | alone | 1780 | ; ld hl,on_int_q |
1781 | ;intjpaddr=$+1 |
||
1782 | ; ld (0),hl |
||
231 | alone | 1783 | push ix |
1784 | push iy |
||
1785 | ex af,af' |
||
1786 | exx |
||
1787 | push af |
||
1788 | push bc |
||
1789 | push de |
||
1790 | push hl |
||
1791 | ld a,(curscreen) |
||
1792 | ld e,a |
||
344 | alone | 1793 | OS_SETSCREEN ;뢠 , ࠭ , 祩 ।᪠㥬 প, 䨪 ⠩? 쪨 砬 뢠 ⥬ - TODO |
231 | alone | 1794 | curpalette=$+1 |
1795 | ld de,mariopal |
||
1796 | OS_SETPAL |
||
505 | alone | 1797 | |
1798 | GET_KEY |
||
1799 | cp key_redraw |
||
1800 | jr nz,$+5 |
||
1801 | ld (wascurkeyredraw),a ; 襬 |
||
1802 | |||
231 | alone | 1803 | pop hl |
1804 | pop de |
||
1805 | pop bc |
||
1806 | pop af |
||
1807 | exx |
||
1808 | ex af,af' |
||
1809 | pop iy |
||
1810 | pop ix |
||
1811 | endif |
||
174 | demige | 1812 | |
231 | alone | 1813 | if MULTITASKING==0 ;OSCALLS==0 |
174 | demige | 1814 | curpalette=$+1 |
1815 | ld de,mariopal |
||
1816 | ld hl,31 |
||
1817 | add hl,de |
||
1818 | ld c,0xff |
||
1819 | ld a,7 |
||
1820 | dup 8 |
||
1821 | OUT (0xF6),A |
||
1822 | ld d,(hl) |
||
1823 | dec hl |
||
1824 | ld b,(hl) ;DDp palette low bits |
||
1825 | OUT (c),d;(0xFF),A |
||
1826 | dec hl |
||
1827 | dec a |
||
1828 | edup |
||
1829 | ld a,7 |
||
1830 | dup 7 |
||
1831 | OUT (0xFE),A |
||
1832 | ld d,(hl) |
||
1833 | dec hl |
||
1834 | ld b,(hl) ;DDp palette low bits |
||
1835 | OUT (c),d;(0xFF),A |
||
1836 | dec hl |
||
1837 | dec a |
||
1838 | edup |
||
1839 | OUT (0xFE),A ;0 |
||
1840 | ld d,(hl) |
||
1841 | dec hl |
||
1842 | ld b,(hl) ;DDp palette low bits |
||
1843 | OUT (c),d;(0xFF),A |
||
1844 | endif |
||
1845 | |||
171 | demige | 1846 | ld hl,(curtimer) |
1847 | inc hl |
||
1848 | ld (curtimer),hl |
||
1849 | |||
1850 | if MUSIC |
||
174 | demige | 1851 | if MUSICONINT |
1852 | ld a,(codepage4000) |
||
1853 | SETPG16K |
||
1854 | ld b,0 |
||
1855 | ld d,b |
||
231 | alone | 1856 | soundenginecall=$ |
174 | demige | 1857 | call SoundEngine |
1858 | endif |
||
171 | demige | 1859 | |
1860 | ld c,0xfd |
||
1861 | |||
1862 | if SWEEP |
||
1863 | ;$4001(sq1)/$4005(sq2) bits |
||
1864 | ;-------------------------- |
||
1865 | ;0-2 right shift amount |
||
1866 | ;3 decrease / increase (1/0) wavelength |
||
1867 | ;4-6 sweep update rate ;frequency at which $4002/3 is updated with the new calculated wavelength. The refresh rate frequency is 120Hz/(N+1), where N is the value written |
||
1868 | ;7 sweep enable |
||
1869 | sweep1=$+1 |
||
344 | alone | 1870 | ld de,0 ;쪮 ⮬ 稪??? 㤥 , 8 |
171 | demige | 1871 | ld a,(SND_SQUARE1_REG+1) |
1872 | rra |
||
1873 | rra |
||
1874 | rra |
||
1875 | rra |
||
1876 | and 7 ;sweep rate |
||
1877 | inc a |
||
1878 | ld b,a |
||
1879 | sweep1counter=$+1 |
||
1880 | ld a,0 |
||
1881 | sub 2 ;2 "sound frames" |
||
1882 | jr nc,$+3 |
||
1883 | add a,b ;sweep rate |
||
1884 | ld (sweep1counter),a |
||
1885 | jr nc,sweep1noinc |
||
1886 | inc e |
||
1887 | ld (sweep1),de |
||
1888 | sweep1noinc |
||
1889 | ld a,(SND_SQUARE1_REG+1) |
||
1890 | and 7 ;right shift |
||
1891 | jr z,sweep1noshift |
||
1892 | ld b,a |
||
1893 | sweep1shift0 |
||
1894 | srl e |
||
1895 | djnz sweep1shift0 |
||
1896 | sweep1noshift |
||
1897 | endif |
||
1898 | |||
1899 | ld hl,SND_SQUARE1_REG+3 |
||
1900 | ld a,(hl) |
||
1901 | dec hl |
||
1902 | ld l,(hl) |
||
1903 | and 7 |
||
1904 | ld h,a |
||
1905 | |||
1906 | if SWEEP |
||
1907 | ld a,(SND_SQUARE1_REG+1) |
||
1908 | or a |
||
1909 | jp p,sweep1disabled |
||
1910 | ;add/sub sweep: |
||
1911 | scf ;for sq1 only! |
||
1912 | sbc hl,de |
||
1913 | and 8 |
||
1914 | jr nz,$+5 ;decrease wavelength |
||
1915 | inc hl ;for sq1 only! |
||
1916 | add hl,de |
||
1917 | add hl,de ;increase wavelength |
||
1918 | sweep1disabled |
||
1919 | endif |
||
1920 | |||
1921 | ld a,1 |
||
1922 | ld b,0xff |
||
1923 | out (c),a |
||
1924 | ld b,0xbf |
||
1925 | out (c),h |
||
1926 | dec a |
||
1927 | ld b,0xff |
||
1928 | out (c),a |
||
1929 | ld b,0xbf |
||
1930 | out (c),l |
||
1931 | |||
1932 | if SWEEP |
||
1933 | sweep2=$+1 |
||
344 | alone | 1934 | ld de,0 ;쪮 ⮬ 稪??? 㤥 , 8 |
171 | demige | 1935 | ld a,(SND_SQUARE2_REG+1) |
1936 | rra |
||
1937 | rra |
||
1938 | rra |
||
1939 | rra |
||
1940 | and 7 ;sweep rate |
||
1941 | inc a |
||
1942 | ld b,a |
||
1943 | sweep2counter=$+1 |
||
1944 | ld a,0 |
||
1945 | sub 2 ;2 "sound frames" |
||
1946 | jr nc,$+3 |
||
1947 | add a,b ;sweep rate |
||
1948 | ld (sweep2counter),a |
||
1949 | jr nc,sweep2noinc |
||
1950 | inc e |
||
1951 | ld (sweep2),de |
||
1952 | sweep2noinc |
||
1953 | ld a,(SND_SQUARE2_REG+1) |
||
1954 | and 7 ;right shift |
||
1955 | jr z,sweep2noshift |
||
1956 | ld b,a |
||
1957 | sweep2shift0 |
||
1958 | srl e |
||
1959 | djnz sweep2shift0 |
||
1960 | sweep2noshift |
||
1961 | endif |
||
660 | alone | 1962 | |
171 | demige | 1963 | ld hl,SND_SQUARE2_REG+3 |
1964 | ld a,(hl) |
||
1965 | dec hl |
||
1966 | ld l,(hl) |
||
1967 | and 7 |
||
1968 | ld h,a |
||
660 | alone | 1969 | |
171 | demige | 1970 | if SWEEP |
1971 | ld a,(SND_SQUARE2_REG+1) |
||
1972 | or a |
||
1973 | jp p,sweep2disabled |
||
1974 | ;add/sub sweep: |
||
1975 | sbc hl,de |
||
1976 | ld a,(SND_SQUARE2_REG+1) |
||
1977 | and 8 |
||
1978 | jr nz,$+4 ;decrease wavelength |
||
1979 | add hl,de |
||
1980 | add hl,de ;increase wavelength |
||
1981 | sweep2disabled |
||
1982 | endif |
||
1983 | |||
1984 | ld a,5 |
||
1985 | ld b,0xff |
||
1986 | out (c),a |
||
1987 | ld b,0xbf |
||
1988 | out (c),h |
||
1989 | dec a |
||
1990 | ld b,0xff |
||
1991 | out (c),a |
||
1992 | ld b,0xbf |
||
1993 | out (c),l |
||
1994 | |||
180 | demige | 1995 | ld d,0x0f ;all channels enabled |
171 | demige | 1996 | |
1997 | ld a,11 |
||
1998 | ld b,0xff |
||
1999 | out (c),a |
||
2000 | ld hl,SND_TRIANGLE_REG+3 |
||
2001 | ld a,(hl) |
||
2002 | and 7 |
||
2003 | dec hl |
||
2004 | ld e,(hl) |
||
2005 | sla e |
||
2006 | adc a,a |
||
344 | alone | 2007 | jr z,$+2+2+2 ; 䠫訢 孨 |
171 | demige | 2008 | srl a |
2009 | rr e |
||
2010 | srl a |
||
2011 | rr e |
||
2012 | ld hl,curtimer |
||
2013 | bit 0,(hl) |
||
2014 | jr z,$+3 |
||
344 | alone | 2015 | inc e ;ᥤ塞 䠫 2 뢠 |
171 | demige | 2016 | srl a |
2017 | rr e |
||
2018 | jr nz,$+4 |
||
2019 | res 1,d ;disable triangle if freq=0 |
||
2020 | ld b,0xbf |
||
2021 | out (c),e |
||
2022 | ;ld e,12;3 |
||
2023 | ;ld b,0xff |
||
2024 | ;out (c),e |
||
2025 | ;ld b,0xbf |
||
2026 | ;out (c),a |
||
2027 | |||
180 | demige | 2028 | ld a,6 |
2029 | ld b,0xff |
||
2030 | out (c),a |
||
2031 | ld a,(SND_NOISE_REG+2) |
||
2032 | add a,a |
||
2033 | ld b,0xbf |
||
2034 | out (c),a |
||
2035 | |||
171 | demige | 2036 | ;counters |
2037 | ld a,(SND_TRIANGLE_REG) |
||
2038 | or a |
||
2039 | jp m,trianglecount |
||
2040 | ;linear counter load, stop length counter |
||
2041 | ;and 0x7f |
||
2042 | ld (trianglelinearcounter),a |
||
2043 | ;jp trianglehalt |
||
2044 | trianglecount |
||
2045 | trianglelinearcounter=$+1 |
||
2046 | ld a,0 |
||
2047 | sub 4 |
||
2048 | jr nc,$+3 |
||
2049 | xor a |
||
2050 | ld (trianglelinearcounter),a ;ld (SND_TRIANGLE_REG),a |
||
2051 | jr nz,$+4 |
||
2052 | res 1,d ;triangle disabled because of linear counter=0 |
||
2053 | ld a,(SND_COUNTER+8) ;(SND_TRIANGLE_REG+3) ;counter register, load it = f(SND_TRIANGLE_REG+3) at write there |
||
2054 | sub 1;2 |
||
2055 | jr nc,$+3 |
||
2056 | xor a |
||
2057 | ld (SND_COUNTER+8),a ;(SND_TRIANGLE_REG+3),a |
||
2058 | jr nz,$+4 |
||
2059 | res 1,d ;triangle disabled because of counter=0 |
||
2060 | trianglehalt |
||
2061 | |||
2062 | ld a,(SND_SQUARE2_REG) |
||
2063 | bit 5,a |
||
2064 | jp nz,square2halt ;counter disable |
||
2065 | ld a,(SND_COUNTER+4) ;(SND_SQUARE2_REG+3) ;counter register, load it = f(SND_SQUARE2_REG+3) at write there |
||
2066 | sub 1;2 |
||
2067 | jr nc,$+3 |
||
2068 | xor a |
||
2069 | ld (SND_COUNTER+4),a ;(SND_SQUARE2_REG+3),a |
||
2070 | jr nz,$+4 |
||
2071 | res 2,d ;disabled because of counter=0 |
||
2072 | square2halt |
||
2073 | |||
2074 | ld a,(SND_SQUARE1_REG) |
||
2075 | bit 5,a |
||
2076 | jp nz,square1halt ;counter disable |
||
2077 | ld a,(SND_COUNTER+0) ;(SND_SQUARE1_REG+3) ;counter register, load it = f(SND_SQUARE2_REG+1) at write there |
||
2078 | sub 1;2 |
||
2079 | jr nc,$+3 |
||
2080 | xor a |
||
2081 | ld (SND_COUNTER+0),a ;(SND_SQUARE1_REG+3),a |
||
2082 | jr nz,$+4 |
||
2083 | res 0,d ;disabled because of counter=0 |
||
2084 | square1halt |
||
2085 | |||
180 | demige | 2086 | ld a,(SND_NOISE_REG) |
2087 | bit 5,a |
||
2088 | jp nz,noisehalt ;counter disable |
||
2089 | ld a,(SND_COUNTER+12) ;(SND_SQUARE1_REG+3) ;counter register, load it = f(SND_SQUARE2_REG+1) at write there |
||
2090 | sub 16;1;2 |
||
2091 | jr nc,$+3 |
||
2092 | xor a |
||
2093 | ld (SND_COUNTER+12),a ;(SND_SQUARE1_REG+3),a |
||
2094 | jr nz,$+4 |
||
2095 | res 3,d ;disabled because of counter=0 |
||
2096 | noisehalt |
||
2097 | |||
171 | demige | 2098 | ;channel enable |
2099 | ld a,7 |
||
2100 | ld b,0xff |
||
2101 | out (c),a |
||
2102 | ld hl,SND_MASTERCTRL_REG ;%???DNT21 |
||
2103 | ld a,(hl) |
||
2104 | if 1==1 |
||
2105 | add a,0x2 ;%00? -> %01? (bit 2 reset), %11? -> %00? (bit 2 reset) |
||
2106 | and 0x4 ;was %00? or %11? - no swap |
||
2107 | ld a,(hl) |
||
2108 | jr z,noswap21 ;bit 2 reset - no swap |
||
2109 | xor 0x6 ;swap %01? <-> %10? |
||
2110 | noswap21 |
||
2111 | else |
||
2112 | rra ;%??????T? |
||
2113 | xor (hl) |
||
2114 | and 0x02 |
||
2115 | xor (hl) ;%???DNTT1 |
||
2116 | and 0xfb ;%???DN0T1 |
||
2117 | bit 1,(hl) |
||
2118 | jr z,$+4 |
||
2119 | or 0x04 ;%???DN2T1 |
||
2120 | endif |
||
180 | demige | 2121 | ;or 8 ;noise |
171 | demige | 2122 | and d |
2123 | ld d,a |
||
2124 | cpl |
||
180 | demige | 2125 | ;and 7 |
344 | alone | 2126 | and 5 ;enable B ( ) ;or 2 ;disable triangle(B) here |
171 | demige | 2127 | or 0x38 ;disable noise |
180 | demige | 2128 | bit 3,d |
2129 | jr z,$+2+2+2 |
||
2130 | set 1,a ;disable tone in B |
||
2131 | res 4,a ;enable noise in B |
||
171 | demige | 2132 | ld b,0xbf |
2133 | out (c),a |
||
2134 | |||
2135 | ;Only a write out to $4003/$4007/$400F will reset the current envelope decay counter to a known state (to $F, the maximum volume level) for the appropriate channel's envelope decay hardware. |
||
2136 | ;Otherwise, the envelope decay counter is always counting down (by 1) at the frequency currently contained in the volume / envelope decay rate bits (even when envelope decays are disabled (setting bit 4)), except when the envelope decay counter contains a value of 0, and envelope decay looping (bit 5) is disabled (0). |
||
2137 | ;vol |
||
2138 | ld e,8 |
||
2139 | ld b,0xff |
||
2140 | out (c),e |
||
2141 | ld a,(SND_SQUARE1_REG) ;bit4=constant volume, or else envelope |
||
2142 | bit 4,a |
||
2143 | jr nz,vol1const |
||
2144 | ld a,(SND_DECAYVOL+0) |
||
2145 | vol1const |
||
2146 | and 15 |
||
2147 | ld hl,tvolume |
||
2148 | add a,l |
||
2149 | ld l,a |
||
2150 | adc a,h |
||
2151 | sub l |
||
2152 | ld h,a |
||
2153 | ld l,(hl) |
||
2154 | ld b,0xbf |
||
2155 | out (c),l |
||
2156 | |||
2157 | ld hl,SND_SQUARE1_REG |
||
2158 | ld a,(hl) |
||
2159 | and 15 ;decay rate |
||
2160 | inc a |
||
2161 | ld b,a |
||
2162 | vol1decaycounter=$+1 |
||
2163 | ld a,0 |
||
2164 | sub 4 ;4 "sound frames" |
||
2165 | jr nc,$+3 |
||
2166 | add a,b ;decay rate |
||
2167 | ld (vol1decaycounter),a |
||
2168 | jr nc,vol1nodecay |
||
2169 | ld a,(SND_DECAYVOL+0) |
||
2170 | dec a |
||
2171 | jp p,vol1noenddecay |
||
2172 | and 0xf |
||
2173 | bit 5,(hl) |
||
2174 | jr nz,vol1noenddecay ;decay looping enabled |
||
2175 | xor a |
||
2176 | vol1noenddecay |
||
2177 | ld (SND_DECAYVOL+0),a |
||
2178 | vol1nodecay |
||
2179 | |||
2180 | ld e,10 |
||
2181 | ld b,0xff |
||
2182 | out (c),e |
||
2183 | ld a,(SND_SQUARE2_REG) ;bit4=constant volume, or else envelope |
||
2184 | bit 4,a |
||
2185 | jr nz,vol2const |
||
2186 | ld a,(SND_DECAYVOL+4) |
||
2187 | vol2const |
||
2188 | and 15 |
||
2189 | ld hl,tvolume |
||
2190 | add a,l |
||
2191 | ld l,a |
||
2192 | adc a,h |
||
2193 | sub l |
||
2194 | ld h,a |
||
2195 | ld l,(hl) |
||
2196 | ld b,0xbf |
||
2197 | out (c),l |
||
2198 | |||
2199 | ld hl,SND_SQUARE2_REG |
||
2200 | ld a,(hl) |
||
2201 | and 15 ;decay rate |
||
2202 | inc a |
||
2203 | ld b,a |
||
2204 | vol2decaycounter=$+1 |
||
2205 | ld a,0 |
||
2206 | sub 4 ;4 "sound frames" |
||
2207 | jr nc,$+3 |
||
2208 | add a,b ;decay rate |
||
2209 | ld (vol2decaycounter),a |
||
2210 | jr nc,vol2nodecay |
||
2211 | ld a,(SND_DECAYVOL+4) |
||
2212 | dec a |
||
2213 | jp p,vol2noenddecay |
||
2214 | and 0xf |
||
2215 | bit 5,(hl) |
||
2216 | jr nz,vol2noenddecay ;decay looping enabled |
||
2217 | xor a |
||
2218 | vol2noenddecay |
||
2219 | ld (SND_DECAYVOL+4),a |
||
2220 | vol2nodecay |
||
2221 | |||
2222 | ld e,9 |
||
2223 | ld b,0xff |
||
2224 | out (c),e |
||
180 | demige | 2225 | ld a,(SND_NOISE_REG) ;bit4=constant volume, or else envelope |
2226 | bit 4,a |
||
2227 | jr nz,noiseconst |
||
2228 | ld a,(SND_DECAYVOL+12) |
||
2229 | noiseconst |
||
2230 | and 15 |
||
2231 | ld hl,tvolume |
||
2232 | add a,l |
||
2233 | ld l,a |
||
2234 | adc a,h |
||
2235 | sub l |
||
2236 | ld h,a |
||
2237 | ld a,(hl) |
||
2238 | ;ld b,0xbf |
||
2239 | ;out (c),l |
||
2240 | |||
2241 | ;ld e,9 |
||
2242 | ;ld b,0xff |
||
2243 | ;out (c),e |
||
2244 | bit 3,d ;noise |
||
2245 | jr nz,notrianglevolumeout |
||
171 | demige | 2246 | xor a |
2247 | bit 1,d ;triangle |
||
2248 | jr z,$+4 |
||
2249 | ld a,16 |
||
180 | demige | 2250 | notrianglevolumeout |
171 | demige | 2251 | ld b,0xbf |
2252 | out (c),a |
||
180 | demige | 2253 | ;and 15 |
2254 | ;jr nz,$ |
||
2255 | |||
2256 | ld hl,SND_NOISE_REG |
||
2257 | ld a,(hl) |
||
2258 | and 15 ;decay rate |
||
2259 | inc a |
||
2260 | ld b,a |
||
2261 | noisedecaycounter=$+1 |
||
2262 | ld a,0 |
||
2263 | sub 4 ;4 "sound frames" |
||
2264 | jr nc,$+3 |
||
2265 | add a,b ;decay rate |
||
2266 | ld (noisedecaycounter),a |
||
2267 | jr nc,noisenodecay |
||
2268 | ld a,(SND_DECAYVOL+12) |
||
2269 | dec a |
||
2270 | jp p,noisenoenddecay |
||
2271 | and 0xf |
||
2272 | bit 5,(hl) |
||
2273 | jr nz,noisenoenddecay ;decay looping enabled |
||
2274 | xor a |
||
2275 | noisenoenddecay |
||
2276 | ld (SND_DECAYVOL+12),a |
||
2277 | noisenodecay |
||
171 | demige | 2278 | endif |
2279 | |||
660 | alone | 2280 | if MULTITASKING |
2281 | call oldimer |
||
2282 | endif |
||
2283 | |||
174 | demige | 2284 | if RESTOREPG16K |
434 | alone | 2285 | ;curpg4000=$+1 |
2286 | ; ld a,0 |
||
2287 | pop af |
||
174 | demige | 2288 | SETPG16K |
2289 | endif |
||
2290 | |||
171 | demige | 2291 | pop de |
2292 | pop bc |
||
2293 | pop af |
||
660 | alone | 2294 | |
171 | demige | 2295 | on_int_hl=$+1 |
2296 | ld hl,0 |
||
2297 | on_int_sp2=$+1 |
||
2298 | ld sp,0 |
||
2299 | ei |
||
2300 | on_int_jp=$+1 |
||
231 | alone | 2301 | jp 0 |
2302 | |||
171 | demige | 2303 | SND_COUNTER |
2304 | SND_DECAYVOL=$+1 |
||
180 | demige | 2305 | ds 4+4+4+2 ;sq1,sq2,tri,noise (2 bytes used from 4) |
171 | demige | 2306 | |
2307 | tvolume |
||
2308 | db 0,9,10,11, 12,12,13,13, 13,14,14,14, 15,15,15,15 |
||
2309 | |||
344 | alone | 2310 | ;- ⠪ ⮩ ⠡楩 |
171 | demige | 2311 | tcounterload |
2312 | db 0x7f,0x05 |
||
2313 | db 0x01,0x0a |
||
2314 | db 0x02,0x14 |
||
2315 | db 0x03,0x28 |
||
2316 | db 0x04,0x50 |
||
2317 | db 0x05,0x1e |
||
2318 | db 0x06,0x07 |
||
2319 | db 0x07,0x0d |
||
2320 | |||
2321 | db 0x08,0x06 |
||
2322 | db 0x09,0x0c |
||
2323 | db 0x0a,0x18 |
||
2324 | db 0x0b,0x30 |
||
2325 | db 0x0c,0x60 |
||
2326 | db 0x0d,0x24 |
||
2327 | db 0x0e,0x08 |
||
2328 | db 0x0f,0x10 |
||
2329 | |||
2330 | gettimer |
||
2331 | ;out: hl=timer |
||
344 | alone | 2332 | ;㬬㥬 ⠩ - 뫮 ⥬ 뢠 |
174 | demige | 2333 | if OSCALLS |
1510 | alone | 2334 | OS_GETTIMER ;dehl=timer |
171 | demige | 2335 | curtimer=$+1 |
1510 | alone | 2336 | ld de,0 |
2337 | add hl,de |
||
2338 | else |
||
2339 | curtimer=$+1 |
||
171 | demige | 2340 | ld hl,0 |
174 | demige | 2341 | endif |
171 | demige | 2342 | ret |
2343 | |||
2344 | ;include "smbsound.asm" |
||
2345 | ;include "smbmusic.asm" |
||
2346 | |||
2347 | reservepage |
||
2348 | ;new page, set page in textpages, npages++, set page in #c000 |
||
2349 | ;nz=error |
||
2350 | OS_NEWPAGE |
||
2351 | or a |
||
2352 | ret nz |
||
2353 | npages=$+1 |
||
2354 | ld hl,filepages |
||
2355 | ld (hl),e |
||
2356 | inc l |
||
2357 | ld (npages),hl |
||
2358 | ld a,e |
||
2359 | SETPG32KHIGH |
||
2360 | xor a |
||
2361 | ret ;z |
||
2362 | |||
2363 | |||
2364 | DEMOLONGLINE=1 |
||
2365 | |||
2366 | demooff |
||
344 | alone | 2367 | ;몫祭 , ࠥ 襬 |
171 | demige | 2368 | ld a,55; ;scf ;201 ;ret |
2369 | ld (readdemo),a |
||
2370 | ;ld a,0x77 |
||
2371 | ;ld (getbyte_opcode),a |
||
2372 | xor a |
||
2373 | ld (InjurePlayer_PiranhaPlant),a |
||
344 | alone | 2374 | ;jp democontinue ; 㤥 筠 㧠 |
171 | demige | 2375 | democontinue |
344 | alone | 2376 | ;த 絛 |
171 | demige | 2377 | xor a |
2378 | ld (readdemo_stopflag),a |
||
2379 | ret |
||
2380 | |||
187 | demige | 2381 | macro NEXTBYTEFAST |
2382 | inc l |
||
2383 | call z,getbyte_inch_pp |
||
2384 | endm |
||
2385 | macro NEXTBYTEEND |
||
2386 | ld (getbyte_addr),hl |
||
2387 | endm |
||
2388 | |||
171 | demige | 2389 | writedemo |
344 | alone | 2390 | ;ᥩ 㪠⥫ ࠧ⥫ ⨪ |
171 | demige | 2391 | ;a=keys |
2392 | ;DEMOLONGLINE=1!!! |
||
2393 | push af |
||
187 | demige | 2394 | call getbyte_setpg |
2395 | NEXTBYTEFAST |
||
171 | demige | 2396 | ld (hl),'+' |
187 | demige | 2397 | |
171 | demige | 2398 | ld b,8 |
2399 | writedemo0 |
||
187 | demige | 2400 | NEXTBYTEFAST |
171 | demige | 2401 | ld (hl),'.' |
2402 | djnz writedemo0 |
||
187 | demige | 2403 | |
2404 | NEXTBYTEFAST |
||
171 | demige | 2405 | ld (hl),'|' |
187 | demige | 2406 | NEXTBYTEFAST |
171 | demige | 2407 | ld (hl),0x0d |
187 | demige | 2408 | NEXTBYTEFAST |
171 | demige | 2409 | ld (hl),0x0a |
187 | demige | 2410 | NEXTBYTEFAST |
171 | demige | 2411 | ld (hl),'|' |
187 | demige | 2412 | NEXTBYTEFAST |
171 | demige | 2413 | ld (hl),'.' |
187 | demige | 2414 | NEXTBYTEFAST |
171 | demige | 2415 | ld (hl),'.' |
187 | demige | 2416 | NEXTBYTEFAST |
171 | demige | 2417 | ld (hl),'|' |
2418 | |||
2419 | pop af |
||
2420 | push af |
||
2421 | ld c,a |
||
2422 | |||
2423 | if DEMOLONGLINE |
||
2424 | xor a |
||
2425 | ld b,c |
||
2426 | rr c |
||
2427 | rla |
||
2428 | rr c |
||
2429 | rla |
||
2430 | rr c |
||
2431 | rla |
||
2432 | rr c |
||
2433 | rla ;%0000UDLR |
||
2434 | xor b |
||
2435 | and 0x0f |
||
2436 | xor b |
||
2437 | ld c,a |
||
2438 | endif |
||
2439 | |||
2440 | ld b,8 |
||
2441 | writedemo1 |
||
187 | demige | 2442 | NEXTBYTEFAST |
171 | demige | 2443 | rrc c |
2444 | ld (hl),'.' |
||
2445 | jr nc,$+4 |
||
2446 | ld (hl),'Z' |
||
2447 | djnz writedemo1 |
||
187 | demige | 2448 | |
2449 | NEXTBYTEEND |
||
171 | demige | 2450 | |
2451 | call setpgs_code |
||
2452 | pop af |
||
2453 | ret |
||
2454 | |||
2455 | readdemo |
||
524 | alone | 2456 | display "readdemo=",$ |
171 | demige | 2457 | or a ;/scf |
2458 | jr c,writedemo |
||
2459 | readdemo_stopflag=$ |
||
2460 | nop ;/ret |
||
2461 | |||
187 | demige | 2462 | ;jr $ |
2463 | call getbyte_setpg |
||
2464 | |||
344 | alone | 2465 | if 1==0 ; ଠ |
171 | demige | 2466 | ld a,(hl) |
2467 | ;a=buttons = %R?D?t?BA |
||
2468 | ld b,8 |
||
187 | demige | 2469 | rra |
2470 | rl c |
||
171 | demige | 2471 | djnz $-3 |
187 | demige | 2472 | NEXTBYTEEND |
2473 | ld a,c |
||
171 | demige | 2474 | |
2475 | ;a=buttons |
||
2476 | ;bit - button (ZX key) |
||
2477 | ;7 - A (A) |
||
2478 | ;6 - B (S) |
||
2479 | ;5 - Select (Space) |
||
2480 | ;4 - Start (Enter) |
||
2481 | ;3 - Up (7) |
||
2482 | ;2 - Down (6) |
||
2483 | ;1 - Left (5) |
||
2484 | ;0 - Right (8) |
||
2485 | else |
||
2486 | |||
344 | alone | 2487 | ;"|0|RLDUTsBA|||",0x0a = 15 bytes, ॠ쭮 稭 4 ࠭ |
2488 | ;"|.r|UDLRSsBA|........|",0x0d,0x0a = 24 bytes, ॠ쭮 稭 12 ࠭ |
||
2489 | ; ३ ⪨ ଠ, 6000t ⨬樨 ( = 194t) |
||
171 | demige | 2490 | if DEMOLONGLINE |
2491 | ld d,12+4 |
||
2492 | else |
||
2493 | ld d,3+4 |
||
2494 | endif |
||
187 | demige | 2495 | |
171 | demige | 2496 | readdemo0 |
187 | demige | 2497 | NEXTBYTEFAST |
171 | demige | 2498 | ld a,(hl) |
2499 | add a,256-'A' |
||
2500 | rr e |
||
2501 | dec d |
||
2502 | jp nz,readdemo0 |
||
2503 | |||
2504 | ld d,0x80 |
||
2505 | readdemo1 |
||
187 | demige | 2506 | NEXTBYTEFAST |
171 | demige | 2507 | ld a,(hl) |
2508 | add a,256-'A' |
||
2509 | rr d |
||
2510 | jp nc,readdemo1 |
||
187 | demige | 2511 | |
2512 | NEXTBYTEEND |
||
171 | demige | 2513 | |
2514 | if DEMOLONGLINE |
||
2515 | ;ld a,e |
||
2516 | ;and 0x40 ;reset |
||
2517 | ;cp 0 |
||
2518 | ;ld ($-1),a |
||
2519 | bit 6,e |
||
2520 | jp z,readdemo_noreset |
||
2521 | ;or a |
||
2522 | ;jr nz,readdemo_noreset |
||
2523 | ;pop af |
||
2524 | ;jp Start |
||
2525 | if FASTDEMOBEFOREBREAKPOINT |
||
2526 | push de |
||
2527 | xor a |
||
2528 | ld (skipPPU),a |
||
2529 | call EmulatePPU |
||
2530 | call EmulatePPU |
||
2531 | pop de |
||
2532 | endif |
||
2533 | ld a,201 |
||
2534 | ld (readdemo_stopflag),a |
||
2535 | readdemo_noreset |
||
2536 | |||
2537 | xor a |
||
2538 | ld b,d |
||
2539 | rr d |
||
2540 | rla |
||
2541 | rr d |
||
2542 | rla |
||
2543 | rr d |
||
2544 | rla |
||
2545 | rr d |
||
2546 | rla ;%0000UDLR |
||
2547 | xor b |
||
2548 | and 0x0f |
||
2549 | xor b |
||
2550 | |||
2551 | else |
||
2552 | |||
2553 | ld a,d |
||
2554 | |||
2555 | endif |
||
2556 | |||
2557 | endif |
||
2558 | ;a=buttons |
||
2559 | ;bit - button (ZX key) |
||
2560 | ;7 - A (A) |
||
2561 | ;6 - B (S) |
||
2562 | ;5 - Select (Space) |
||
2563 | ;4 - Start (Enter) |
||
2564 | ;3 - Up (7) |
||
2565 | ;2 - Down (6) |
||
2566 | ;1 - Left (5) |
||
2567 | ;0 - Right (8) |
||
2568 | push af |
||
2569 | call setpgs_code |
||
2570 | pop af |
||
2571 | ret |
||
2572 | |||
187 | demige | 2573 | getbyte_setpg |
344 | alone | 2574 | ; hl,bc |
2575 | ; de |
||
171 | demige | 2576 | ;out: a=pg, hl=addr in pg |
344 | alone | 2577 | getbyte_addr=$+1 ;ॠ쭮 饣 |
171 | demige | 2578 | ;ld hl,0xffe0+5 ;148974 |
344 | alone | 2579 | ;ࠢ ⮫쪮 5..6, - ⠪ ࠣ? |
171 | demige | 2580 | ;ld hl,0xffe0+14 ;53672 |
2581 | ;ld hl,0xc260+4 ;53672 |
||
344 | alone | 2582 | ;뫮 ( 誮 - 㦥 ) |
2583 | ;12..13 室 १ , |
||
2584 | ;14 (+4) 室 १ প ࠢ, ⮬ ⭨ |
||
2585 | ;15 룭 ᮬ |
||
2586 | ;16-20 㦥 |
||
171 | demige | 2587 | ;ld hl,0xd2c8-12-1+(15*24) ;1904330 (pg1) |
344 | alone | 2588 | ;11..13 ᡨ ௨, ய룠 |
2589 | ;14 1-1, ९ 1-2 |
||
2590 | ;15 1-1, ਡ ९ 1-2 |
||
2591 | ;16 , ᮡࠫ ⪨, |
||
2592 | ;17..20 |
||
171 | demige | 2593 | ;ld hl,0xc111-4-1+(16*15) ;351918 |
344 | alone | 2594 | ;11..14 - ॢ 㡨⢠ ண |
2595 | ;15 - ९루 , ॢ |
||
2596 | ;16 - १ , ॢ ⭨ |
||
2597 | ;17..20- 㬨ࠥ |
||
171 | demige | 2598 | ;ld hl,0xc0f4-4-1+(7*15) ;307549 |
344 | alone | 2599 | ;7..8 - 쭮 , ࢮ |
2600 | ;9 릮 |
||
2601 | ;12 |
||
2602 | ;16..20 |
||
171 | demige | 2603 | ld hl,0xc090-12-1 +(4*24) ;1775978 (cropped) |
344 | alone | 2604 | ;0,1 - 室 world 1-1 ( jr RImpd ॢ ) |
2605 | ;2,3 - ॢ 筮 ⭨ 1-1 ( jr RImpd ॢ 㡥) |
||
2606 | ;4 - 室 1-2 ( jr RImpd ॢ ) |
||
2607 | ;5,6,7,8,9,10,11,12,13,14,15,16,17,18 - 室 1-1 (18 jr RImpd ॢ ) |
||
2608 | ;19,20 - ॢ 筮 ⭨ 1-1 ( jr RImpd ॢ ) |
||
2609 | ;21,22 - 室 world 1-1 |
||
2610 | ;23,24 - ॢ 筮 ⭨ 1-1 |
||
2611 | ;25 - 室 1-2 |
||
171 | demige | 2612 | getbyte_pg=$+1 |
187 | demige | 2613 | ld a,(filepages) |
2614 | SETPG32KHIGH |
||
2615 | ret |
||
2616 | |||
2617 | getbyte_inch_pp |
||
344 | alone | 2618 | ; bc, ⠭ hl 砫 ࠭ (⮣ ࠭) |
187 | demige | 2619 | ;l=0 |
2620 | inc h |
||
2621 | ret nz |
||
2622 | ld hl,getbyte_pg |
||
2623 | inc (hl) |
||
2624 | push bc |
||
2625 | getbyte_inch_memoryretry_m |
||
2626 | ld c,(hl) |
||
171 | demige | 2627 | ld b,filepages/256 |
187 | demige | 2628 | getbyte_inch_memoryretry |
171 | demige | 2629 | ld a,(bc) |
187 | demige | 2630 | or a |
2631 | jr z,getbyte_inch_newpg |
||
2632 | SETPG32KHIGH |
||
2633 | pop bc |
||
2634 | ld hl,0xc000 |
||
2635 | ret |
||
2636 | getbyte_inch_newpg |
||
2637 | push bc |
||
171 | demige | 2638 | push de |
344 | alone | 2639 | halt ;⮡ ࠡ⠫ ⥬ 뢠 |
2640 | call reservepage ;nz=error ; ॣ ( hl ) |
||
180 | demige | 2641 | ld a,(imer_curscreen_value) |
2642 | ld bc,0x7ffd |
||
2643 | out (c),a |
||
171 | demige | 2644 | pop de |
187 | demige | 2645 | pop bc |
2646 | jr z,getbyte_inch_memoryretry |
||
2647 | ld hl,getbyte_pg |
||
2648 | dec (hl) |
||
2649 | jr getbyte_inch_memoryretry_m ;no more memory |
||
171 | demige | 2650 | |
2651 | |||
2652 | savedemo |
||
2653 | ld de,filename2 |
||
2654 | OS_CREATEHANDLE |
||
2655 | ;b=new file handle |
||
2656 | push af |
||
2657 | ld a,b |
||
2658 | ld (filehandle),a |
||
2659 | pop af |
||
2660 | ;or a |
||
2661 | ;ret nz |
||
2662 | |||
2663 | ld hl,0 |
||
2664 | ld de,0 |
||
2665 | ld a,0 |
||
2666 | nvview_save0 |
||
2667 | ;push de |
||
2668 | ;push hl |
||
2669 | ;call reservepage |
||
2670 | ;pop hl |
||
2671 | ;pop de |
||
2672 | ;ret nz ;no memory |
||
2673 | push af |
||
2674 | ld c,a |
||
2675 | ld b,filepages/256 |
||
2676 | ld a,(bc) |
||
2677 | SETPG32KHIGH |
||
2678 | |||
2679 | push de |
||
2680 | push hl |
||
2681 | ld de,0xc000 |
||
2682 | ld hl,0x4000 |
||
2683 | ;DE = Buffer address, HL = Number of bytes to read |
||
2684 | push hl |
||
2685 | ld a,(filehandle) |
||
2686 | ld b,a |
||
2687 | OS_WRITEHANDLE |
||
2688 | ;hl=actual size |
||
2689 | ;hl=loaded bytes |
||
2690 | ld b,h |
||
2691 | ld c,l |
||
2692 | pop hl ;Number of bytes to read |
||
2693 | or a |
||
2694 | sbc hl,bc ;z=loaded as requested |
||
2695 | ;bc=loaded bytes |
||
2696 | pop hl |
||
2697 | pop de |
||
2698 | pop af |
||
2699 | ;hlde=size |
||
2700 | ;z=loaded as requested |
||
2701 | ;ex de,hl |
||
2702 | ;add hl,bc |
||
2703 | ;ex de,hl |
||
2704 | ;jr nc,$+3 |
||
2705 | ;inc hl |
||
2706 | ;jr z,nvview_save0 |
||
2707 | inc a |
||
2708 | ld ix,npages |
||
2709 | cp (ix) |
||
2710 | jr nz,nvview_save0 |
||
2711 | ;hlde=true file size (for TRDOSFS) |
||
2712 | ;ld (fcb+FCB_FSIZE),de |
||
2713 | ;ld (fcb+FCB_FSIZE+2),hl |
||
2714 | |||
2715 | call closestream_file |
||
187 | demige | 2716 | jp setpgs_code |
171 | demige | 2717 | |
187 | demige | 2718 | gfxfilename |
2719 | db "smb.nes",0 |
||
171 | demige | 2720 | filename |
2721 | db "antipac.fm2",0 |
||
2722 | filename2 |
||
2723 | db "demo.fm2",0 |
||
2724 | include "../../_sdk/file.asm" |
||
187 | demige | 2725 | tnofile |
2726 | db "smb.nes not found",0x0d,0x0a,0 |
||
171 | demige | 2727 | |
260 | alone | 2728 | ;oldtimer |
2729 | ; ds 2 |
||
171 | demige | 2730 | |
289 | dimkam | 2731 | ;display "free before 0x2000=",0x2000-$ |
171 | demige | 2732 | ds 0x2000-$ |
2733 | ;tile gfx: 2 256-tile maps |
||
2734 | ;16bytes/tile: 8bytes low bit, 8bytes high bit |
||
187 | demige | 2735 | tilegfx |
2736 | ds 0x2000 ;incbin "smbtiles" |
||
171 | demige | 2737 | |
2738 | include "SMBDIS.ASM" |
||
2739 | |||
2740 | end |
||
2741 | |||
289 | dimkam | 2742 | ;display "End=",end |
171 | demige | 2743 | ;display "Free after end=",/d,0xc000-end |
289 | dimkam | 2744 | ;display "Size ",/d,end-begin," bytes" |
171 | demige | 2745 | |
2746 | savebin "smb.com",begin,end-begin |
||
2747 | |||
206 | alone | 2748 | ;LABELSLIST "user.l" |