EDDEBUGS.S (9699B)
1 * eddebugs 2 org = $ea00 3 lst off 4 *------------------------------- 5 * 6 * " D E B U G S " 7 * 8 * Special version to sit at end of hrtables (for builder) 9 * Replaces UNPACK 10 * 11 *------------------------------- 12 org org 13 14 jmp _SHOWPAGE 15 jmp DEBUGKEYS 16 17 clc 18 bcc MOVEAUXLC ;must be relocatable 19 20 jmp _TITLESCREEN 21 22 *------------------------------- 23 * 24 * M O V E A U X L C 25 * (Move to auxiliary language card) 26 * 27 * This code is loaded into mainmem, where MASTER calls it 28 * to move itself & all other aux l.c. stuff to aux l.c. 29 * 30 * WARNING--once in aux l.c. this code is useless! 31 * 32 *------------------------------- 33 dum $00 34 35 ]dest ds 2 36 ]source ds 2 37 ]endsourc ds 2 38 39 dend 40 41 MOVEAUXLC 42 sta $c009 ;ALTZP on (aux l.c.) 43 44 lda $c083 45 lda $c083 ;bank 2 46 47 lda #$d0 48 ldx #$20 49 ldy #$50 50 51 * "MOVEMEM" 52 53 sta ]dest+1 54 stx ]source+1 55 sty ]endsourc+1 56 57 ldy #0 58 sty ]dest 59 sty ]source 60 sty ]endsourc 61 62 :loop lda (]source),y 63 sta (]dest),y 64 65 iny 66 bne :loop 67 68 inc ]source+1 69 inc ]dest+1 70 71 lda ]source+1 72 cmp ]endsourc+1 73 bne :loop 74 75 * Switch back to bank 1 before returning to MASTER 76 77 lda $c08b 78 lda $c08b ;bank 1 79 80 sta $c008 ;ALTZP off (main l.c.) 81 82 rts 83 84 *------------------------------- 85 lastpage ds 1 86 87 _SHOWPAGE jsr pre 88 jsr SHOWPAGE 89 jmp post 90 91 _TITLESCREEN jsr pre 92 jsr TITLESCREEN 93 jmp post 94 95 *------------------------------- 96 pre 97 pha 98 99 jsr saveregs 100 jsr mainmem 101 jsr savezero 102 103 pla 104 ]rts rts 105 106 post 107 jsr loadzero 108 jsr auxmem 109 jmp loadregs 110 111 *------------------------------- 112 mainmem 113 sta $c004 114 sta $c002 115 rts 116 117 *------------------------------- 118 auxmem 119 sta $c005 120 sta $c003 121 ]rts rts 122 123 *------------------------------- 124 regs ds 3 125 *------------------------------- 126 dum $00 127 128 base ds 2 129 tab ds 1 130 line ds 1 131 inverse ds 1 132 bytenum ds 1 133 mempage ds 1 134 oldpage ds 1 135 strptr ds 2 136 xsave ds 1 137 ysave ds 1 138 nextbytenum ds 1 139 direcptr ds 1 140 ztemp ds 1 141 old80col ds 1 142 143 dend 144 145 zerodump = $1f00 ;mainmem 146 pagedump = $1e00 ;mainmem 147 148 eol = $8d ;string delimiter 149 150 *------------------------------- 151 * Keys within routines 152 153 kesc = $9b 154 kpageup = $8b 155 kpagedown = $8a 156 k4kup = $95 157 k4kdown = $88 158 khires = "H" 159 160 *------------------------------- 161 * 162 * D E B U G K E Y S 163 * 164 * In: A = kbd value 165 * 166 *------------------------------- 167 kshowzero = "= 168 kshowpage3 = "\ 169 kshowlastpage = "- 170 171 DEBUGKEYS 172 cmp #kshowzero 173 bne :1 174 175 lda #0 176 jmp _SHOWPAGE 177 178 :1 cmp #kshowpage3 179 bne :4 180 181 lda #3 182 jmp _SHOWPAGE 183 :4 184 cmp #kshowlastpage 185 bne ]rts 186 187 lda lastpage 188 jmp _SHOWPAGE 189 190 *------------------------------- 191 * 192 * S H O W P A G E 193 * 194 * Show page on text page 1; any key to exit 195 * Keys 0-9 to change page # 196 * 197 * In: A = initial page # 198 * 199 *------------------------------- 200 SHOWPAGE 201 pha 202 jsr pretext 203 pla 204 205 newdump ;A = page # 206 jsr PageDump ;dump a page of memory 207 jsr RegsDump ;dump registers 208 209 :loop jsr waitloop 210 211 cmp #"0 212 bcc :1 213 cmp #": 214 bcs :1 215 216 sec 217 sbc #"0 218 jmp newdump ;dump new page 219 220 :1 cmp #kpageup 221 bne :2 222 lda #-1 223 jmp chgpg ;change page 224 225 :2 cmp #kpagedown 226 bne :3 227 lda #1 228 jmp chgpg 229 230 :3 cmp #k4kup 231 bne :4 232 lda #$10 233 jmp chgpg 234 235 :4 cmp #k4kdown 236 bne :5 237 lda #$f0 238 jmp chgpg 239 240 :5 cmp #khires 241 bne :6 242 243 jsr showhires 244 jsr waitloop 245 jsr showtext 246 jmp :loop 247 248 :6 249 :exit 250 jmp posttext 251 252 *------------------------------- 253 * Change page 254 * 255 * In: A = increment 256 * 257 * Lock out pages C0-CF 258 *------------------------------- 259 chgpg 260 sta ztemp 261 262 lda mempage 263 :loop clc 264 adc ztemp 265 266 cmp #$c0 267 bcc :ok 268 cmp #$d0 269 bcc :loop 270 271 :ok sta mempage 272 273 jmp newdump 274 275 *------------------------------- 276 * 277 * P R E T E X T / P O S T T E X T 278 * 279 *------------------------------- 280 pretext 281 lda $c01f ;read 80COL 282 sta old80col 283 284 lda $c01c ;read PAGE2 285 sta oldpage 286 287 jsr textcls 288 289 showtext 290 lda $c054 ;page 1 291 lda $c051 ;text 292 sta $c00c ;40-column 293 294 rts 295 296 *------------------------------- 297 posttext 298 lda mempage 299 sta lastpage ;for next time 300 301 jsr showhires 302 303 lda #$00 ;black 304 jmp cls40 305 306 *------------------------------- 307 * Show orig. hires page 308 309 showhires 310 lda oldpage ;original page 311 bpl :1 ;page 1 312 lda $c055 ;page 2 313 :1 314 lda old80col 315 bpl :2 316 sta $c00d ;80-col on 317 :2 318 lda $c050 ;graphics 319 rts 320 321 *------------------------------- 322 * 323 * P A G E D U M P 324 * 325 * In: A = page # (auxmem) 326 * 327 * Locks out $c0-cf 328 * 329 *------------------------------- 330 PageDump 331 sta mempage 332 333 cmp #$c0 334 bcc :ok 335 cmp #$d0 336 bcs :ok 337 rts ;lock out $c0-cf 338 :ok 339 jsr copypage ;to mainmem 340 341 jsr home 342 jsr normal 343 344 lda #STRpage 345 ldx #>STRpage 346 jsr prline ;"Page " 347 348 lda mempage 349 jsr prhexbyte 350 351 jsr inv 352 353 lda #0 354 sta bytenum 355 356 lda #8 357 sta tab 358 359 :rulerloop 360 lda #" " 361 jsr prchar 362 363 lda bytenum 364 jsr prhexdig 365 366 jsr toggle 367 368 inc bytenum 369 370 lda bytenum 371 cmp #$10 372 bne :rulerloop 373 374 jsr cr 375 jsr cr 376 377 lda #0 378 sta bytenum 379 :nextline 380 jsr normal 381 lda #"$" 382 jsr prchar 383 384 lda mempage 385 jsr prhexbyte 386 387 lda bytenum 388 jsr prhexbyte 389 390 lda #":" 391 jsr prchar 392 393 lda #8 394 sta tab 395 396 * Print next 16 byte values 397 398 lda bytenum 399 tax 400 clc 401 adc #$10 402 sta nextbytenum 403 404 :loop stx xsave 405 406 jsr toggle 407 408 lda pagedump,x 409 jsr prhexbyte 410 411 ldx xsave 412 inx 413 cpx nextbytenum 414 bne :loop 415 416 * Next line 417 418 cpx #0 419 beq :rts 420 stx bytenum 421 422 jsr cr 423 424 jmp :nextline 425 426 :rts rts 427 428 *------------------------------- 429 * 430 * R E G S D U M P 431 * 432 *------------------------------- 433 RegsDump 434 jsr normal 435 436 ldx #19 437 jsr setline 438 439 ldx #0 440 lda #"A" 441 jsr printreg 442 443 ldx #1 444 lda #"X" 445 jsr printreg 446 447 ldx #2 448 lda #"Y" 449 jsr printreg 450 451 rts 452 453 *------------------------------- 454 printreg 455 stx xsave 456 457 jsr prchar 458 inc tab 459 460 lda #"=" 461 jsr prchar 462 inc tab 463 464 ldx xsave 465 lda regs,x 466 jsr prhexbyte 467 468 lda tab 469 clc 470 adc #5 471 sta tab 472 rts 473 474 *------------------------------- 475 * 476 * W A I T L O O P 477 * 478 * Wait for keypress (return in A, hibit set) 479 * 480 *------------------------------- 481 waitloop 482 sta $c010 483 484 :loop lda $c000 485 bpl :loop 486 487 rts 488 489 *------------------------------- 490 * C R 491 *------------------------------- 492 cr 493 lda #0 494 sta tab 495 496 inc line 497 ldx line 498 jmp bascalc 499 500 *------------------------------- 501 * 502 * P R L I N E 503 * 504 * Print a line of normal text 505 * 506 * In: A-X = string ptr 507 * 508 *------------------------------- 509 prline 510 sta strptr 511 stx strptr+1 512 :loop 513 ldy #0 514 lda (strptr),y 515 cmp #eol 516 beq :rts 517 518 jsr prcharn 519 520 inc strptr 521 bne :loop 522 inc strptr+1 523 bne :loop 524 525 :rts rts 526 527 *------------------------------- 528 * 529 * P R H E X B Y T E 530 * 531 * Print a hex byte (in A) 532 * 533 *------------------------------- 534 prhexbyte 535 pha 536 lsr 537 lsr 538 lsr 539 lsr 540 jsr prhexdig 541 542 pla 543 and #$0f 544 jmp prhexdig 545 546 *------------------------------- 547 * 548 * P R H E X D I G 549 * 550 * Print a hex digit (in A) 551 * Trashes X 552 * 553 *------------------------------- 554 prhexdig 555 tax 556 lda hextoasc,x 557 jmp prchar 558 559 *------------------------------- 560 * 561 * P R C H A R 562 * 563 * Print an ASCII character (in A) 564 * 565 *------------------------------- 566 prchar 567 ldy tab 568 and #%00111111 569 ora inverse 570 sta (base),y 571 572 inc tab 573 574 rts 575 576 prcharn ;normal 577 ldy tab 578 sta (base),y 579 580 inc tab 581 582 rts 583 584 *------------------------------- 585 * 586 * H O M E 587 * 588 *------------------------------- 589 home 590 lda #0 591 sta tab 592 593 ldx #0 594 stx line 595 596 jmp bascalc 597 598 *------------------------------- 599 * 600 * I N V E R S E / N O R M A L 601 * 602 *------------------------------- 603 normal 604 lda #$80 605 sta inverse 606 rts 607 608 inv 609 lda #0 610 sta inverse 611 rts 612 613 toggle 614 lda inverse 615 eor #$80 616 sta inverse 617 rts 618 619 *------------------------------- 620 * 621 * S E T L I N E 622 * 623 * In: X = line # 624 * 625 *------------------------------- 626 setline 627 lda #0 628 sta tab 629 630 stx line 631 632 *------------------------------- 633 * 634 * B A S C A L C 635 * 636 * In: X = line # (0-24) 637 * 638 *------------------------------- 639 bascalc 640 cpx #24 641 bcs :rts 642 643 lda textl,x 644 sta base 645 646 lda texth,x 647 sta base+1 648 649 :rts rts 650 651 *------------------------------- 652 * 653 * T E X T C L S 654 * 655 * Clear text page 1 to black 656 * 657 *------------------------------- 658 textcls lda #$a0 ;space 659 660 cls40 ldy #$f7 661 :2 sta $400,y 662 sta $500,y 663 sta $600,y 664 sta $700,y 665 666 dey 667 cpy #$7f 668 bne :3 669 670 ldy #$77 671 :3 cpy #$ff 672 bne :2 673 674 rts 675 676 *------------------------------- 677 * S A V E / L O A D R E G S 678 *------------------------------- 679 saveregs sta regs 680 stx regs+1 681 sty regs+2 682 rts 683 684 loadregs lda regs 685 ldx regs+1 686 ldy regs+2 687 rts 688 689 *------------------------------- 690 * S A V E Z E R O 691 *------------------------------- 692 savezero 693 ldx #0 694 695 :loop lda $00,x 696 sta zerodump,x 697 698 inx 699 bne :loop 700 rts 701 702 *------------------------------- 703 * L O A D Z E R O 704 *------------------------------- 705 loadzero 706 ldx #0 707 708 :loop lda zerodump,x 709 sta $00,x 710 711 inx 712 bne :loop 713 rts 714 715 *------------------------------- 716 * C O P Y P A G E 717 * 718 * Copy desired auxmem page to "pagedump" in mainmem 719 * 720 * In: A = page # 721 *------------------------------- 722 copypage 723 tax 724 beq :pagezero 725 726 sta :loop+2 ;self-mod 727 728 sta $c003 ;read auxmem 729 730 ldx #0 731 732 :loop lda $300,x 733 sta pagedump,x 734 735 inx 736 bne :loop 737 738 sta $c002 ;read mainmem 739 740 rts 741 742 * Read original page 0 from pagedump, not the current page 0 743 744 :pagezero 745 ldx #0 746 :loop0 lda zerodump,x 747 sta pagedump,x 748 inx 749 bne :loop0 750 rts 751 752 *------------------------------- 753 * 40-column text base addresses 754 *------------------------------- 755 756 textl hex 00,80,00,80,00,80,00,80 757 hex 28,a8,28,a8,28,a8,28,a8 758 hex 50,d0,50,d0,50,d0,50,d0 759 760 texth hex 04,04,05,05,06,06,07,07 761 hex 04,04,05,05,06,06,07,07 762 hex 04,04,05,05,06,06,07,07 763 764 *------------------------------- 765 * Hex to ASCII 766 *------------------------------- 767 768 hextoasc asc "0123456789ABCDEF" 769 770 *------------------------------- 771 * 772 * S T R I N G D A T A 773 * 774 *------------------------------- 775 STRpage asc "Page " 776 db #eol 777 778 title asc "PRINCE OF PERSIA Dungeon Builder" 779 db #eol 780 date asc "7/8/89 Master Copy" 781 db #eol 782 please asc "PLEASE DO NOT COPY!!" 783 db #eol 784 copyr asc "Copyright 1989 Jordan Mechner" 785 db #eol 786 787 *------------------------------- 788 TITLESCREEN 789 jsr pretext 790 jsr textcls 791 792 jsr home 793 jsr normal 794 795 lda #title 796 ldx #>title 797 jsr prline 798 799 ldx #3 800 jsr setline 801 lda #date 802 ldx #>date 803 jsr prline 804 805 ldx #11 806 jsr setline 807 lda #please 808 ldx #>please 809 jsr prline 810 811 ldx #23 812 jsr setline 813 lda #copyr 814 ldx #>copyr 815 jsr prline 816 817 jsr waitloop 818 sta $c010 819 rts 820 821 *------------------------------- 822 lst 823 eof ds 1 824 usr $a9,2,$a00,*-org 825 lst off