EDMASTER.S (13777B)
1 * edmaster 2 edfirst = 1 3 org = $f900 4 lst off 5 *------------------------------- 6 * 7 * M A S T E R 8 * 9 * (version for editor disk) 10 * 11 *------------------------------- 12 org org 13 14 jmp FIRSTBOOT 15 jmp LOADLEVEL 16 jmp RELOAD1 17 jmp RELOAD2 18 jmp RELOAD3 ;1st 5 entry points are same as in game version 19 20 jmp REBOOT 21 jmp GOBUILD 22 jmp GOGAME 23 jmp WRITEDIR 24 jmp READDIR 25 26 jmp SAVELEVEL 27 jmp SAVELEVELG 28 jmp SCREENDUMP 29 30 *------------------------------- 31 put eq 32 33 development = 1 34 35 *------------------------------- 36 * File equates 37 38 topctrl = $2000 39 builder = $8400 40 Mdebugs = $4c00 ;mainmem, destined for $fc00 aux 41 42 coldgame = topctrl 43 warmgame = coldgame+3 44 45 coldbuild = builder 46 warmbuild = coldbuild+3 47 48 dum Mdebugs 49 showpage ds 3 50 debugkeys ds 3 51 moveauxlc ds 3 52 dend 53 54 BbundID = BBundID 55 56 POPside1 = $a9 57 POPside2 = $ad ;game 58 59 *------------------------------- 60 break = $fa59 61 62 realreset = $300 63 64 *------------------------------- 65 * RW18 zero page vars 66 67 slot = $fd 68 track = $fe 69 lastrack = $ff 70 71 *------------------------------- 72 * local vars 73 74 locals = $f0 75 76 dum locals 77 78 ]dest ds 2 79 ]source ds 2 80 ]endsourc ds 2 81 82 dend 83 84 params = $3f0 85 86 *------------------------------- 87 * Coordinates of default load-in level 88 89 firstlevel db 33,0,30,0 90 91 *------------------------------- 92 * 93 * Notes: 94 * 95 * Game & builder code sits in auxmem & aux l.c. and uses 96 * aux z.p. 97 * 98 * Routines in main l.c. (including MASTER and HIRES) 99 * are called via intermediary routines in GRAFIX (in auxmem). 100 * 101 * RW18 sits in bank 1 of main language card; 102 * driveon switches it in, driveoff switches it out. 103 * 104 *------------------------------- 105 * 106 * F I R S T B O O T 107 * 108 *------------------------------- 109 FIRSTBOOT 110 jsr setaux 111 jsr setreset ;in auxmem 112 113 jsr setmain 114 jsr setreset ;in maimmem 115 116 boot 117 jsr setaux 118 119 lda #$a9 ;side 1 120 sta BbundID 121 122 jsr loadcommon1 ;tracks 2-3 (2 tracks) 123 124 * boot builder 125 126 jsr bootbuilder 127 jsr xtitle 128 jmp coldbuild 129 130 *------------------------------- 131 * coldstart builder 132 133 bootbuilder 134 jsr loadbuild1 ;tracks 4-6 (3 tracks) 135 jsr loadcommon2 ;tracks 11-12 (chtable3; 2 tracks) 136 jsr loadbuild2 ;tracks 22-28 (7 tracks) 137 jsr loadgame4 138 139 jmp driveoff 140 141 *------------------------------- 142 * 143 * G O B U I L D 144 * 145 *------------------------------- 146 GOBUILD 147 jsr driveon 148 149 jsr copybgmain ;copy bgtable to mainmem 150 151 jsr loadbuild2 ;tracks 22-28 (7 tracks) 152 153 jsr driveoff 154 155 jmp warmbuild 156 157 *------------------------------- 158 * 159 * G O G A M E 160 * 161 *------------------------------- 162 GOGAME 163 jsr driveon 164 165 jsr copybgaux ;copy bgtable to auxmem 166 167 jsr loadgame1a 168 jsr xfergame 169 jsr loadgame3 170 jsr loadgame4 171 172 jsr driveoff 173 174 ColdstartGame 175 lda #1 176 jmp coldgame 177 178 *------------------------------- 179 * 180 * R E B O O T 181 * 182 *------------------------------- 183 REBOOT jsr driveon 184 185 jsr bootbuilder 186 jmp warmbuild 187 188 *------------------------------- 189 * 190 * Q U I C K R E L O A D S 191 * 192 * (for game development) 193 * 194 *------------------------------- 195 * Reload 1: reload images 196 197 RELOAD1 198 jsr driveon 199 200 jsr loadgame2 201 202 jmp driveoff 203 204 *------------------------------- 205 * Reload 2: reload code 206 207 RELOAD2 208 jsr driveon 209 210 jsr loadgame1 211 jsr loadgame3 212 jsr loadgame4 213 214 jmp driveoff 215 216 *------------------------------- 217 * Reload 3: reload everything but blueprint 218 * (& restart level) 219 220 RELOAD3 221 jsr driveon 222 223 jsr loadgame1 224 jsr loadgame2 225 jsr loadgame3 226 jsr loadgame4 227 228 jsr driveoff 229 jmp warmgame 230 231 *------------------------------- 232 * 233 * L O A D C O M M O N 234 * 235 *------------------------------- 236 * load common 1: tracks 1-3 (code) 237 238 loadcommon1 239 jsr setmain 240 241 lda #1 242 sta track 243 244 jsr rw18 245 hex c3,ee 246 247 jsr rw18 248 hex c4 249 hex e0,e1,e2,e3,e4,e5,e6,e7,e8 250 hex e9,ea,eb,ec,ed,00,00,00,00 251 252 jsr setaux 253 254 jsr rw18 255 hex c3,0e 256 257 rts 258 259 *------------------------------- 260 * load common 2: tracks 11-12 (chtable3) 261 262 loadcommon2 263 lda #11 264 sta track 265 266 jsr setmain 267 268 jsr rw18 269 hex c3,08 270 271 jsr rw18 272 hex c4 273 hex 1a,1b,1c,1d,1e,1f,00,00,00 274 hex 00,00,00,00,00,00,00,00,00 275 276 rts 277 278 *------------------------------- 279 * 280 * L O A D G A M E 281 * 282 *------------------------------- 283 * load game 1: tracks 3 & 4 (code) 284 285 loadgame1 286 lda #3 287 sta track 288 289 jsr setaux 290 291 jsr rw18 292 hex c3,0e 293 294 *------------------------------- 295 * load game 1a: track 4 (code) 296 297 loadgame1a 298 lda #4 299 sta track 300 301 jsr setaux 302 303 jsr rw18 304 hex c4 305 hex 04,05,06,07,08,09,0a,0b,0c 306 hex 0d,20,21,22,23,24,25,26,27 307 308 rts 309 310 *------------------------------- 311 * load game 2: tracks 5-13 (all image tables) 312 313 loadgame2 314 lda #5 315 sta track 316 317 jsr setaux 318 319 jsr rw18 320 hex c3,60 321 322 jsr rw18 323 hex c3,72 324 ;bgtable goes in aux 325 jsr setmain 326 327 jsr rw18 328 hex c3,60 329 330 jsr rw18 331 hex c3,72 332 333 jsr rw18 334 hex c3,84 335 336 jsr rw18 337 hex c3,96 338 339 jsr rw18 340 hex c3,08 341 342 jsr rw18 343 hex c4 344 hex 1a,1b,1c,1d,1e,1f,a8,a9,aa 345 hex ab,ac,ad,ae,af,b0,b1,b2,b3 346 347 jsr rw18 348 hex c4 349 hex b4,b5,b6,b7,b8,b9,ba,bb,bc 350 hex bd,be,bf,00,00,00,00,00,00 351 352 rts 353 354 *------------------------------- 355 * load game 3: tracks 13-18 (aux code, chtab4, bgtab2) 356 357 loadgame3 358 jsr setaux 359 360 lda #13 361 sta track 362 363 jsr rw18 364 hex c4 365 hex 00,00,00,00,00,00,00,00,00 366 hex 00,00,00,96,97,98,99,9a,9b 367 jsr rw18 368 hex c3,9c ;chtable4.gd 369 370 jsr rw18 371 hex c3,28 372 373 jsr rw18 374 hex c3,3a 375 376 jsr rw18 377 hex c3,4c 378 379 jsr rw18 380 hex c3,84 ;bgtable2 381 382 rts 383 384 *------------------------------- 385 * load game 4: tracks 19-21 (aux l.c. bank 2) 386 * 387 * We can't reach aux l.c. from here, so load code 388 * into mainmem hires area 389 390 loadgame4 391 jsr setmain 392 393 lda #19 394 sta track 395 396 jsr rw18 397 hex c4 398 hex 00,00,20,21,22,23,24,25,26 399 hex 27,28,29,2a,2b,2c,2d,2e,2f 400 401 jsr rw18 402 hex c4 403 hex 00,00,00,00,30,31,32,33,34 404 hex 35,36,37,38,39,3a,3b,3c,3d 405 406 jsr rw18 407 hex c3,3e 408 409 * Now have it move itself to aux l.c. 410 411 jmp moveauxlc ;still in mainmem 412 413 *------------------------------- 414 * xfer game: 415 * load tracks 7-10 & 12-13 (chtables 1,2 & 5) 416 417 xfergame 418 lda #7 419 sta track 420 421 jsr setmain 422 423 jsr rw18 424 hex c3,60 425 426 jsr rw18 427 hex c3,72 428 429 jsr rw18 430 hex c3,84 431 432 jsr rw18 433 hex c3,96 434 435 lda #12 436 sta track 437 438 jsr rw18 439 hex c4 440 hex 1a,1b,1c,1d,1e,1f,a8,a9,aa 441 hex ab,ac,ad,ae,af,b0,b1,b2,b3 442 443 jsr rw18 444 hex c4 445 hex b4,b5,b6,b7,b8,b9,ba,bb,bc 446 hex bd,be,bf,00,00,00,00,00,00 447 448 rts 449 450 *------------------------------- 451 * 452 * L O A D B U I L D E R 453 * 454 *------------------------------- 455 * load builder 1: tracks 4-6 (common code & bgtable) 456 457 loadbuild1 458 lda #4 459 sta track 460 461 jsr setaux 462 463 jsr rw18 464 hex c4 465 hex 04,05,06,07,08,09,0a,0b,0c 466 hex 0d,00,00,00,00,00,00,00,00 467 468 jsr setmain 469 470 jsr rw18 471 hex c3,60 472 473 jsr rw18 474 hex c3,72 475 ;bgtable goes in main, not aux 476 477 lda #18 478 sta track 479 480 jsr rw18 481 hex c3,84 ;bgtable2 482 483 rts 484 485 *------------------------------- 486 * load builder 2: tracks 22-28 487 488 loadbuild2 489 lda #22 490 sta track 491 492 jsr setaux 493 494 jsr rw18 495 hex c3,60 496 497 jsr rw18 498 hex c3,72 499 500 jsr rw18 501 hex c3,84 502 503 jsr rw18 504 hex c3,96 505 506 jsr setmain 507 508 jsr rw18 509 hex c3,ae 510 511 jsr setaux 512 513 jsr rw18 514 hex c4 515 hex 2e,2f,30,31,32,33,34,35,36 516 hex 00,00,00,00,00,00,00,00,00 517 518 jsr rw18 519 hex c4 520 hex 40,41,42,43,44,45,46,47,48 521 hex 49,4a,4b,4c,4d,4e,4f,00,00 522 523 rts 524 525 *=============================== 526 * 527 * C O P Y B G T A B L E 528 * 529 * BGTABLE is loaded into $6000-$9600 530 * Mainmem for builder, aux for game 531 * 532 *------------------------------- 533 copybgmain 534 sta $c003 535 sta $c004 ;read aux, write main 536 copybg 537 lda #$60 538 ldx #$60 539 ldy #$96 540 jmp MOVEMEM 541 542 copybgaux 543 sta $c002 544 sta $c005 ;read main, write aux 545 546 jmp copybg 547 548 *------------------------------- 549 setaux sta $c003 550 sta $c005 ;rd/write aux 551 rts 552 553 setmain sta $c002 554 sta $c004 ;rd/write main 555 rts 556 557 *------------------------------- 558 * 559 * S E T R E S E T V E C T O R 560 * 561 *------------------------------- 562 setreset 563 ldx #0 564 :loop lda resetroutine,x 565 sta realreset,x 566 inx 567 bne :loop ;move reset routine 568 569 lda #realreset 570 sta $3f2 571 572 lda #>realreset 573 sta $3f3 ;reset vector 574 ;(for development) 575 eor #$a5 576 sta $3f4 ;power-up byte 577 578 lda #break 579 sta $3f0 580 581 lda #>break 582 sta $3f1 583 584 rts 585 586 *------------------------------- 587 resetroutine 588 sta $c004 ;RAMWRT off 589 sta $c002 ;RAMRD off 590 591 lda #break 592 sta $3f2 593 594 lda #>break 595 sta $3f3 ;$fa59: monitor break routine 596 597 eor #$a5 598 sta $3f4 599 600 jmp $fa62 ;reset 601 602 *------------------------------- 603 * 604 * D R I V E O N 605 * 606 *------------------------------- 607 driveon 608 609 jsr setaux 610 611 * switch in bank 1 (RW18) 612 613 bit $c08b 614 bit $c08b ;1st 4k bank 615 616 * set Bbund ID 617 618 lda BbundID 619 sta :idbyte 620 621 jsr rw18 622 hex 07 623 :idbyte hex a9 624 625 * turn on drive 1 626 627 jsr rw18 628 hex 00 629 drive hex 01 630 delay hex 00 631 rts 632 633 *------------------------------- 634 * 635 * D R I V E O F F 636 * 637 *------------------------------- 638 driveoff jsr rw18 639 hex 01 640 641 * switch in bank 2 642 643 bit $c083 644 bit $c083 ;2nd 4k bank 645 646 jmp setaux ;& set auxmem 647 648 *------------------------------- 649 * 650 * R E A D / W R I T E D I R E C T O R Y 651 * 652 *------------------------------- 653 READDIR lda #0 654 sta delay 655 656 jsr driveon 657 658 lda #34 659 sta track 660 661 jsr rw18 662 hex 84 ;readgroup 663 hex 70,71,00,00,00,00,00,00,00 664 hex 00,00,00,00,00,00,00,00,00 665 666 jmp driveoff 667 668 *------------------------------- 669 WRITEDIR lda #10 670 sta delay 671 672 jsr driveon 673 674 lda #34 675 sta track 676 677 jsr rw18 678 hex 84 ;read unused regions into scratch buffer 679 hex 00,00,20,21,22,23,24,25,26 680 hex 27,28,29,2a,2b,2c,2d,2e,2f 681 682 jsr rw18 683 hex 86 ;then write it all out 684 hex 70,71,20,21,22,23,24,25,26 685 hex 27,28,29,2a,2b,2c,2d,2e,2f 686 687 jmp driveoff 688 689 *------------------------------- 690 * 691 * S E T 1 s t L E V E L 692 * 693 *------------------------------- 694 set1stlevel 695 696 ldx #3 697 :loop lda firstlevel,x 698 sta params,x 699 dex 700 bpl :loop 701 702 rts 703 704 *------------------------------- 705 * 706 * L O A D / S A V E L E V E L 707 * 708 * 2 routines: loadlevel & savelevel 709 * 710 * These in turn call 4 routines: 711 * rdbluep & wrtbluep (load & save 9-sector blueprint) 712 * rdbinfo & wrtbinfo (load & save 6-sector binfo) 713 * 714 * In: bluepTRK, bluepREG, binfoTRK, binfoREG 715 * 716 * TRK = track # (1-33) 717 * REG = region on track (0-1 for blueprint, 0-2 for binfo) 718 * 719 * Use $2000 auxmem as scratchpad 720 * 721 * Load level into "working blueprint" buffer in auxmem; 722 * game code will make a "backup copy" into aux l.c. 723 * (which we can't reach from here). 724 * 725 *------------------------------- 726 LOADLEVEL 727 lda #0 728 sta delay 729 jsr driveon 730 731 jsr rdbluep 732 jsr rdbinfo 733 734 jmp driveoff 735 736 ]sl lda #10 737 sta delay 738 jsr driveon 739 740 jmp wrtbluep 741 742 SAVELEVEL 743 jsr ]sl 744 jsr wrtbinfo 745 746 jmp driveoff 747 748 SAVELEVELG 749 jsr ]sl 750 jmp driveoff 751 752 *------------------------------- 753 * read blueprint 754 *------------------------------- 755 rdbluep 756 jsr setbluep 757 bne :reg1 758 759 :reg0 jsr rw18 760 hex 84 761 hex b7,b8,b9,ba,bb,bc,bd,be,bf 762 hex 00,00,00,00,00,00,00,00,00 763 rts 764 765 :reg1 jsr rw18 766 hex 84 767 hex 00,00,00,00,00,00,00,00,00 768 hex b7,b8,b9,ba,bb,bc,bd,be,bf 769 rts 770 771 *------------------------------- 772 * write blueprint 773 *------------------------------- 774 wrtbluep 775 jsr setbluep 776 bne :reg1 777 778 :reg0 jsr rw18 779 hex 84 ;read unused regions into scratch buffer 780 hex 00,00,00,00,00,00,00,00,00 781 hex 24,25,26,27,28,29,2a,2b,2c 782 783 jsr rw18 784 hex 86 ;then write it all out 785 hex b7,b8,b9,ba,bb,bc,bd,be,bf ;new data 786 hex 24,25,26,27,28,29,2a,2b,2c ;old data 787 rts 788 789 :reg1 jsr rw18 790 hex 84 791 hex 24,25,26,27,28,29,2a,2b,2c 792 hex 00,00,00,00,00,00,00,00,00 793 794 jsr rw18 795 hex 86 796 hex 24,25,26,27,28,29,2a,2b,2c ;old data 797 hex b7,b8,b9,ba,bb,bc,bd,be,bf ;new data 798 rts 799 800 *------------------------------- 801 setbluep 802 lda bluepTRK 803 sta :track 804 805 jsr rw18 ;seek track 806 db 2,1 807 :track db 34 808 809 lda bluepREG 810 rts 811 812 *------------------------------- 813 * read binfo 814 *------------------------------- 815 rdbinfo 816 lda binfoTRK 817 sta track ;assume rdbluep has already sought it 818 819 lda binfoREG 820 beq :reg0 821 822 cmp #1 823 beq :reg1 824 825 :reg2 jsr rw18 826 hex 84 827 hex 00,00,00,00,00,00 828 hex 00,00,00,00,00,00 829 hex a6,a7,a8,a9,aa,ab 830 rts 831 832 :reg1 jsr rw18 833 hex 84 834 hex 00,00,00,00,00,00 835 hex a6,a7,a8,a9,aa,ab 836 hex 00,00,00,00,00,00 837 rts 838 839 :reg0 jsr rw18 840 hex 84 841 hex a6,a7,a8,a9,aa,ab 842 hex 00,00,00,00,00,00 843 hex 00,00,00,00,00,00 844 rts 845 846 *------------------------------- 847 * write binfo 848 *------------------------------- 849 wrtbinfo 850 lda binfoTRK 851 sta track ;assume rdbluep has already sought it 852 853 lda binfoREG 854 beq :reg0 855 856 cmp #1 857 beq :reg1 858 859 :reg2 jsr rw18 860 hex 84 ;first read into scratchpad... 861 hex 24,25,26,27,28,29 862 hex 2a,2b,2c,2d,2e,2f 863 hex 00,00,00,00,00,00 864 865 jsr rw18 866 hex 86 ;...then write it all out 867 hex 24,25,26,27,28,29 868 hex 2a,2b,2c,2d,2e,2f 869 hex a6,a7,a8,a9,aa,ab 870 rts 871 872 :reg1 jsr rw18 873 hex 84 ;first read into scratchpad... 874 hex 24,25,26,27,28,29 875 hex 00,00,00,00,00,00 876 hex 2a,2b,2c,2d,2e,2f 877 878 jsr rw18 879 hex 86 ;...then write it all out 880 hex 24,25,26,27,28,29 881 hex a6,a7,a8,a9,aa,ab 882 hex 2a,2b,2c,2d,2e,2f 883 rts 884 885 :reg0 jsr rw18 886 hex 84 ;first read into scratchpad... 887 hex 00,00,00,00,00,00 888 hex 24,25,26,27,28,29 889 hex 2a,2b,2c,2d,2e,2f 890 891 jsr rw18 892 hex 86 ;...then write it all out 893 hex a6,a7,a8,a9,aa,ab 894 hex 24,25,26,27,28,29 895 hex 2a,2b,2c,2d,2e,2f 896 rts 897 898 *------------------------------- 899 * 900 * M O V E M E M 901 * 902 *------------------------------- 903 MOVEMEM 904 sta ]dest+1 905 stx ]source+1 906 sty ]endsourc+1 907 908 ldy #0 909 sty ]dest 910 sty ]source 911 sty ]endsourc 912 913 :loop lda (]source),y 914 sta (]dest),y 915 916 iny 917 bne :loop 918 919 inc ]source+1 920 inc ]dest+1 921 922 lda ]source+1 923 cmp ]endsourc+1 924 bne :loop 925 926 rts 927 928 *------------------------------- 929 * 930 * T O N E 931 * 932 *------------------------------- 933 dum locals 934 ]dur ds 1 935 dend 936 937 ]setdur = 10 938 ]setpitch = 20 939 940 TONE 941 lda #]setdur 942 sta ]dur 943 :outloop lda $c030 944 ldx #]setpitch 945 :midloop ldy #64 946 :inloop dey 947 bne :inloop 948 dex 949 bne :midloop 950 dec ]dur 951 bne :outloop 952 rts 953 954 *------------------------------- 955 * Hires screen dump 956 * 957 * Dump hires screen to tracks 22-23 958 * In: A = page # (00/20) 959 *------------------------------- 960 SCREENDUMP 961 clc 962 adc #$20 963 sta :sm1 964 adc #$12 965 sta :sm2 966 967 lda BBundID 968 pha 969 lda #POPside2 970 sta BBundID 971 972 jsr driveon 973 jsr setmain 974 975 lda #22 976 sta track 977 jsr checkdisk 978 979 jsr rw18 980 hex c5 981 :sm1 hex 20 982 jsr rw18 983 hex c5 984 :sm2 hex 32 985 986 jsr driveoff 987 pla 988 sta BBundID 989 rts 990 991 *------------------------------- 992 * check track to make sure it's the right disk 993 *------------------------------- 994 checkdisk 995 jsr rw18 996 hex 84 ;don't advance 997 hex 05,00,00,00,00,00,00,00,00 998 hex 00,00,00,00,00,00,00,00,00 999 rts 1000 1001 *------------------------------- 1002 1003 lst 1004 eof ds 1 1005 usr $a9,1,$b00,*-org 1006 lst off