0000        0100         .OPT NOEJECT            0105 ;            0110 ;******************************            0115 :            0120 ; FORMATTER CARTRIDGE SOFTWARE            0125 ;            0130 ;   (C) 1984  BERNHARD ENGL            0135 ;            0140 ;******************************            0145 ;E456        0150 CIOV    =   $E4560342        0155 ICCMD   =   $3420344        0160 ICBAL   =   $3440345        0165 ICBAH   =   $3450348        0170 ICBLL   =   $3480349        0175 ICBLH   =   $349034A        0180 ICAX1   =   $34A034B        0185 ICAX2   =   $34B00F3        0190 INBUFF  =   $F300F2        0195 CIX     =   $F200D4        0200 FRO     =   $D4D800        0205 AFP     =   $D800D9D2        0210 FPI     =   $D9D2D9AA        0215 IFP     =   $D9AADDB6        0220 FMOVE   =   $DDB6DB28        0225 FDIV    =   $DB28D500        0230 FCTRL   =   $D500D501        0235 FDATA   =   $D501D400        0240 DMACTL  =   $D400D40E        0245 NMIEN   =   $D40ED40A        0250 WSYNC   =   $D40A02FC        0255 CH      =   $2FC02C5        0260 COLOR1  =   $2C50052        0265 LMARGN  =   $520053        0270 RMARGN  =   $530580        0275 LBUFF   =   $580D8E6        0280 FASC    =   $D8E6D20A        0285 RNDGEN  =   $D20A000A        0290 DOSVEC  =   $A            0295 ;0000        0300         *=  $B0            0305 ;00B0        0310 PRTPNT  *=  *+2          PRINT POINTER00B2        0315 TEMP    *=  *+100B3        0320 TEMP1   *=  *+100B4        0325 CONPNT  *=  *+2          PNT FOR CONTROL FILE00B6        0330 CONEND  *=  *+2          CONTROL FILE END00B8        0335 SECTOR  *=  *+1          SECTOR ID00B9        0340 TRACK   *=  *+1          TRACK NO00BA        0345 CRCL    *=  *+1          CRC SHIFT REGISTER (LOW)00BB        0350 CRCH    *=  *+1          CRC SHIFT REGISTER (HIGH)00BC        0355 CLOCK   *=  *+1          CLOCK PATTERN00BD        0360 DATA    *=  *+1          DATA PATTERN00BE        0365 FORPNT  *=  *+2          FORMAT POINTER00C0        0370 FOREND  *=  *+2          FORMAT END00C2        0375 COUNT   *=  *+100C3        0380 COUNT2  *=  *+100C4        0385 NUM     *=  *+1          LOCAL FOR BINNUM00C5        0390 STAT    *=  *+100C6        0395 ZEROUT  *=  *+20         ZERO PAGE WRITER            0400 ;00DA        0405         *=  $3400            0410 ;            0415 ;--------------------------------------------            0420 ;            0425 ; MAIN MENU            0430 ;3400 A2FF   0435 MAIN    LDX #$FF         SET STACK POINTER3402 9A     0440         TXS3403 A90F   0445         LDA #$F          RESET HARDWARE3405 8D00D5 0450         STA FCTRL3408 A901   0455         LDA #1           SET NEW SREEN MARGINS340A A226   0460         LDX #38340C 8552   0465         STA LMARGN340E 8653   0470         STA RMARGN3410 A203   0475         LDX #3           SET COLORS3412 BD2E35 0480 MAIN1   LDA COLTAB,X3415 9DC502 0485         STA COLOR1,X3418 CA     0490         DEX3419 10F7   0495         BPL MAIN1341B A200   0500 MAIN2   LDX #0           DISPLAY MENU341D 205834 0505         JSR PRTSTR3420 20A034 0510         JSR INPUT        GET BUFFER3423 AD0940 0515         LDA INBUF        GET CHAR3426 38     0520         SEC              ACCEPT ONLY 1-63427 E931   0525         SBC #$313429 9004   0530         BCC MAIN3342B C906   0535         CMP #6342D 9008   0540         BCC MAIN4342F A201   0545 MAIN3   LDX #1           BEEP3431 205834 0550         JSR PRTSTR3434 4C1B34 0555         JMP MAIN23437 AE0A40 0560 MAIN4   LDX INBUF+1      ACCEPT ONLY SINGLE CHR343A E09B   0565         CPX #$9B343C D01F   0570         BNE MAIN3343E 0A     0575         ASL A            CALC BRANCH TABLE INDEX343F AA     0580         TAX3440 BD4A34 0585         LDA BRTAB+1,X3443 48     0590         PHA3444 BD4934 0595         LDA BRTAB,X3447 48     0600         PHA3448 60     0605         RTS              BRANCH TO ROUTINE            0610 ;3449 2539   0615 BRTAB   .WORD CREATE-1344B 433A   0620         .WORD COMPIL-1344D 923D   0625         .WORD RANDOM-1344F 1B3F   0630         .WORD FORMTR-13451 733E   0635         .WORD RPMCHK-13453 5434   0640         .WORD EXIT-1            0645 ;3455 6C0A00 0650 EXIT    JMP (DOSVEC)            0655 ;            0660 ;--------------------------------------------            0665 ;            0670 ; PRINT STRING X            0675 ;3458 86B2   0680 PRTSTR  STX TEMP345A A932   0685         LDA #MESTAB&$FF  SET POINTER345C A235   0690         LDX #MESTAB/256345E 85B0   0695         STA PRTPNT3460 86B1   0700         STX PRTPNT+13462 C6B2   0705 PRTST1  DEC TEMP         STRING COUNT3464 1012   0710         BPL PRTST4       SCAN FOR NEXT3466 A000   0715 PRTST2  LDY #0           GET CHAR3468 B1B0   0720         LDA (PRTPNT),Y346A D001   0725         BNE PRTST3346C 60     0730         RTS              ZERO IS STRING END346D 208E34 0735 PRTST3  JSR PRTCHR       CHAR TO SCREEN3470 A2B0   0740         LDX #PRTPNT      ADVANCE POINTER3472 209934 0745         JSR INCPNT3475 4C6634 0750         JMP PRTST23478 A000   0755 PRTST4  LDY #0           SCAN FOR STRING END347A B1B0   0760         LDA (PRTPNT),Y347C F008   0765         BEQ PRTST5       FOUND347E A2B0   0770         LDX #PRTPNT      INC POINTER3480 209934 0775         JSR INCPNT3483 4C7834 0780         JMP PRTST43486 A2B0   0785 PRTST5  LDX #PRTPNT      INC POINTER3488 209934 0790         JSR INCPNT348B 4C6234 0795         JMP PRTST1            0800 ;            0805 ; PRINT CHARACTER A            0810 ;348E AA     0815 PRTCHR  TAX              SAVE CHR348F AD4703 0820         LDA ICBAL+3      USE PUT VECTOR3492 48     0825         PHA3493 AD4603 0830         LDA ICBAL+23496 48     0835         PHA3497 8A     0840         TXA              GET CHR3498 60     0845         RTS            0850 ;            0855 ; INCREMENT POINTER X            0860 ;3499 F600   0865 INCPNT  INC 0,X349B D002   0870         BNE INCPN1349D F601   0875         INC 1,X349F 60     0880 INCPN1  RTS            0885 ;            0890 ; KEYBOARD INPUT TO INBUF            0895 ;34A0 A909   0900 INPUT   LDA #INBUF&$FF   SET BUFFER ADDRESS34A2 A240   0905         LDX #INBUF/25634A4 8D4403 0910         STA ICBAL34A7 8E4503 0915         STX ICBAH34AA A980   0920         LDA #$80         BUFFER LENGTH34AC A200   0925         LDX #034AE 8D4803 0930         STA ICBLL34B1 8E4903 0935         STX ICBLH34B4 A905   0940         LDA #5           GET RECORD34B6 8D4203 0945         STA ICCMD34B9 2056E4 0950         JSR CIOV34BC 3007   0955         BMI BREAK34BE 60     0960         RTS            0965 ;            0970 ; DISPLAY ERROR X AND BREAK            0975 ;34BF 205834 0980 ERROR   JSR PRTSTR34C2 20A034 0985         JSR INPUT        WAIT FOR RETURN            0990 ;            0995 ; CLOSE FILE, RETURN TO MENU            1000 ;34C5 20CB34 1005 BREAK   JSR CLOSE34C8 4C0034 1010         JMP MAIN            1015 ;            1020 ; CLOSE DISK FILE            1025 ;34CB A210   1030 CLOSE   LDX #$1034CD A90C   1035         LDA #$C34CF 9D4203 1040         STA ICCMD,X34D2 4C56E4 1045         JMP CIOV            1050 ;            1055 ; OPEN DISK FILE #1            1060 ; INPUT : A=4            1065 ; OUTPUT: A=8            1070 ; FILESPEC IN INBUF            1075 ;34D5 48     1080 OPEN    PHA              MAKE SURE FILE CLOSED34D6 20CB34 1085         JSR CLOSE34D9 68     1090         PLA34DA A210   1095         LDX #$1034DC 9D4A03 1100         STA ICAX1,X34DF A909   1105         LDA #INBUF&$FF   FILESPEC ADDRESS34E1 9D4403 1110         STA ICBAL,X      25634E4 A940   1115         LDA #INBUF/25634E6 9D4503 1120         STA ICBAH,X34E9 A903   1125         LDA #334EB 9D4203 1130         STA ICCMD,X34EE 2056E4 1135         JSR CIOV34F1 1004   1140         BPL OPEN1        OPEN SUCCESFUL34F3 A202   1145         LDX #2           CAN'T OPEN FILE34F5 D0C8   1150         BNE ERROR        ALWAYS34F7 60     1155 OPEN1   RTS            1160 ;            1165 ; PUT BYTE A TO DISK FILE            1170 ;34F8 48     1175 PUTBYT  PHA34F9 A210   1180         LDX #$1034FB A90B   1185         LDA #$B34FD 9D4203 1190         STA ICCMD,X3500 A900   1195         LDA #03502 9D4803 1200         STA ICBLL,X3505 9D4903 1205         STA ICBLH,X3508 68     1210         PLA3509 2056E4 1215         JSR CIOV350C 10E9   1220         BPL OPEN1        OK350E A203   1225         LDX #3           DISK WRITE ERROR3510 D0AD   1230         BNE ERROR        ALWAYS            1235 ;            1240 ; GET BYTE FROM DISK FILE            1245 ; EQ IF EOF            1250 ;3512 A210   1255 GETBYT  LDX #$103514 A907   1260         LDA #73516 9D4203 1265         STA ICCMD,X3519 A900   1270         LDA #0351B 9D4803 1275         STA ICBLL,X351E 9D4903 1280         STA ICBLH,X3521 2056E4 1285         JSR CIOV3524 10D1   1290         BPL OPEN1        OK3526 C088   1295         CPY #$88         EOF ?3528 F0CD   1300         BEQ OPEN1        OK352A A204   1305         LDX #4           DISK READ ERROR352C D091   1310         BNE ERROR        ALWAYS            1315 ;            1320 ; COLOR TABLE            1325 ;352E B0     1330 COLTAB  .BYTE $B0,$B6,$B0,$B0352F B63530 B03531 B0            1335 ;            1340 ; MESSAGE TABLE            1345 ;3532 7D     1350 MESTAB  .BYTE $7D,$9B3533 9B3534 A0     1355         .BYTE "     FORMATTER CARTRIDGE SOFTWARE     "3535 A03536 A03537 A03538 A03539 C6353A CF353B D2353C CD353D C1353E D4353F D43540 C53541 D23542 A03543 C33544 C13545 D23546 D43547 D23548 C93549 C4354A C7354B C5354C A0354D D3354E CF354F C63550 D43551 D73552 C13553 D23554 C53555 A03556 A03557 A03558 A03559 A0355A A0     1360         .BYTE "        (C) 1984 Bernhard Engl        "355B A0355C A0355D A0355E A0355F A03560 A03561 A03562 A83563 C33564 A93565 A03566 B13567 B93568 B83569 B4356A A0356B C2356C E5356D F2356E EE356F E83570 E13571 F23572 E43573 A03574 C53575 EE3576 E73577 EC3578 A03579 A0357A A0357B A0357C A0357D A0357E A0357F A03580 9B     1365         .BYTE $9B3581 20     1370         .BYTE "       1 Create  Control File ",$9B3582 203583 203584 203585 203586 203587 203588 A03589 B1358A A0358B A0358C C3358D F2358E E5358F E13590 F43591 E53592 A03593 A03594 C33595 EF3596 EE3597 F43598 F23599 EF359A EC359B A0359C C6359D E9359E EC359F E535A0 A035A1 9B35A2 20     1375         .BYTE "       2 Compile Control File ",$9B35A3 2035A4 2035A5 2035A6 2035A7 2035A8 2035A9 A035AA B235AB A035AC A035AD C335AE EF35AF ED35B0 F035B1 E935B2 EC35B3 E535B4 A035B5 C335B6 EF35B7 EE35B8 F435B9 F235BA EF35BB EC35BC A035BD C635BE E935BF EC35C0 E535C1 A035C2 9B35C3 20     1380         .BYTE "       3 Create Rnd Data File ",$9B35C4 2035C5 2035C6 2035C7 2035C8 2035C9 2035CA A035CB B335CC A035CD A035CE C335CF F235D0 E535D1 E135D2 F435D3 E535D4 A035D5 D235D6 EE35D7 E435D8 A035D9 C435DA E135DB F435DC E135DD A035DE C635DF E935E0 EC35E1 E535E2 A035E3 9B35E4 20     1385         .BYTE "       4  Format Track        ",$9B35E5 2035E6 2035E7 2035E8 2035E9 2035EA 2035EB A035EC B435ED A035EE A035EF C635F0 EF35F1 F235F2 ED35F3 E135F4 F435F5 A035F6 D435F7 F235F8 E135F9 E335FA EB35FB A035FC A035FD A035FE A035FF A03600 A03601 A03602 A03603 A03604 9B3605 20     1390         .BYTE "       5  RPM Check           ",$9B3606 203607 203608 203609 20360A 20360B 20360C A0360D B5360E A0360F A03610 D23611 D03612 CD3613 A03614 C33615 E83616 E53617 E33618 EB3619 A0361A A0361B A0361C A0361D A0361E A0361F A03620 A03621 A03622 A03623 A03624 A03625 9B3626 20     1395         .BYTE "       6  Exit to DOS         ",$9B,$9B3627 203628 203629 20362A 20362B 20362C 20362D A0362E B6362F A03630 A03631 C53632 F83633 E93634 F43635 A03636 F43637 EF3638 A03639 C4363A CF363B D3363C A0363D A0363E A0363F A03640 A03641 A03642 A03643 A03644 A03645 A03646 9B3647 9B3648 A0     1400         .BYTE "           Enter Selection    ",$9B,03649 A0364A A0364B A0364C A0364D A0364E A0364F A03650 A03651 A03652 A03653 C53654 EE3655 F43656 E53657 F23658 A03659 A0365A D3365B E5365C EC365D E5365E E3365F F43660 E93661 EF3662 EE3663 A03664 A03665 A03666 A03667 A03668 A03669 A0366A A0366B A0366C A0366D A0366E 9B366F 003670 FD     1405         .BYTE $FD,03671 003672 A0     1410         .BYTE " Can't OPEN File ",$FD,03673 C33674 E13675 EE3676 A73677 F43678 A03679 CF367A D0367B C5367C CE367D A0367E C6367F E93680 EC3681 E53682 A03683 FD3684 003685 A0     1415         .BYTE " Disk Write Error ",$FD,03686 C43687 E93688 F33689 EB368A A0368B D7368C F2368D E9368D F4368F E53690 A03691 C53692 F23693 F23694 EF3695 F23696 A03697 FD3698 003699 A0     1420         .BYTE " Disk Read Error ",$FD,0369A C4369B E9369C F3369D EB369E A0369F D236A0 E536A1 E136A2 E436A3 A036A4 C536A5 F236A6 F236A7 EF36A8 F236A9 A036AA FD36AB 0036AC 7D     1425         .BYTE $7D,$9B,"        CREATE  CONTROL  FILE         ",$9B,$9B,036AD 9B36AE A036AF A036B0 A036B1 A036B2 A036B3 A036B4 A036B5 A036B6 C336B7 D236B8 C536B9 C136BA D436BB C536BC A036BD A036BE C336BF CF36C0 CE36C1 D436C2 D236C3 CF36C4 CC36C5 A036C6 A036C7 C636C8 C936C9 CC36CA C536CB A036CC A036CD A036CE A036CF A036D0 A036D1 A036D2 A036D3 A036D4 9B36D5 9B36D6 0036D7 A0     1430         .BYTE " Enter Filespec ",$9B,036D8 C536D9 EE36DA F436DB E536DC F236DD A036DE C636DF E936E0 EC36E1 E536E2 F336E3 F036E4 E536E5 E336E6 A036E7 9B36E8 0036E9 9B     1435         .BYTE $9B," Enter Sector Control Block ",$9B,$9B,036EA A036EB C536EC EE36ED F436EE E536EF F236F0 A036F1 D336F2 E536F3 E336F4 F436F5 EF36F6 F236F7 A036F8 C336F9 EF36FA EE36FB F436FC F236FD EF36FE EC36FF A03700 C23701 EC3702 EF3703 E33704 EB3705 A03706 9B3707 9B3708 003709 9B     1440         .BYTE $9B," Enter Sector ID String ",$9B,0370A A0370B C5370C EE370D F4370E E5370F F23710 A03711 D33712 E53713 E33714 F43715 EF3716 F23717 A03718 C93719 C4371A A0371B D3371C F4371D F2371E E9371F EE3720 E73721 A03722 9B3723 003724 9B     1445         .BYTE $9B,03725 003726 7D     1450         .BYTE $7D,$9B,"        COMPILE CONTROL FILE        ",$9B,$9B,03727 9B3728 A03729 A0372A A0372B A0372C A0372D A0372E A0372F A03730 C33731 CF3732 CD3733 D03734 C93735 CC3736 C53737 A03738 A03739 C3373A CF373B CE373C D4373D D2373E CF373F CC3740 A03741 A03742 C63743 C93744 CC3745 C53746 A03747 A03748 A03749 A0374A A0374B A0374C A0374D A0374E 9B374F 9B3750 003751 A0     1455         .BYTE " Enter Control Filespec ",$9B,03752 C53753 EE3754 F43755 E53756 F23757 A03758 C33759 EF375A EE375B F4375C F2375D EF375E EC375F A03760 C63761 E93762 EC3763 E53764 F33765 F03766 E53767 E33768 A03769 9B376A 00376B A0     1460         .BYTE " Enter Data Filespec ",$9B,0376C C5376D EE376E F4376F E53770 F23771 A03772 C43773 E13774 F43775 E13776 A03777 C63778 E93779 EC377A E5377B F3377C F0377D E5377E E3377F A03780 9B3781 003782 A0     1465         .BYTE " Enter Trackno 00-41 ",$9B,03783 C53784 EE3785 F43786 E53787 F23788 A03789 D4378A F2378B E1378C E3378D EB378E EE378F EF3790 A03791 B03792 B03793 AD3794 B43795 B13796 A03797 9B3798 003799 9B     1470         .BYTE $9B,  Bad Data File ",$FD,0379A A0379B A0379C C2379D E1379E E4379F A037A0 C437A1 E137A2 F437A3 E137A4 A037A5 C637A6 E937A7 EC37A8 E537A9 A037AA FD37AB 0037AC 9B     1475         .BYTE $9B," Syntax Error ",$FD,037AD A037AE D337AF F937B0 EE37B1 F437B2 E137B3 F837B4 A037B5 C537B6 F237B7 F237B8 EF37B9 F237BA A037BB FD37BC 0037BD 9B     1480         .BYTE $9B, "Data CRC Fixup Y/N? ",$9B,037BE A037BF C437C0 E137C1 F437C2 E137C3 A037C4 C337C5 D237C6 C337C7 A037C8 C637C9 E937CA F837CB F537CC F037CD A037CE D937CF AF37D0 CE37D1 BF37D2 A037D3 9B37D4 0037D5 A0     1485         .BYTE " Enter Format Filespec ",$9B37D6 C537D7 EE37D8 F437D9 E537DA F237DB A037DC C637DD EF37DE F237DF ED37E0 E137E1 F437E2 A037E3 C637E4 E937E5 EC37E6 E537E7 F337E8 F037E9 E537EA E337EB A037EC 9B37ED 0037EE 9B     1490         .BYTE $9B," Out of Data Error ",$FD,037EF A037F0 CF37F1 F537F2 F437F3 A037F4 EF37F5 E637F6 A037F7 C437F8 E137F9 F437FA E137FB A037FC C537FD F237FE F237FF EF3800 F23801 A03802 FD3803 003804 7D     1495         .BYTE $7D,$9B,"      CREATE  RANDOM  DATA  FILE      ",$9B,$9B,03805 9B3806 A03807 A03808 A03809 A0380A A0380B A0380C C3380D D2380E C5380F C13810 D43811 C53812 A03813 A03814 D23815 C13816 CE3817 C43818 CF3819 CD381A A0381B A0381C C4381D C1381E D4381F C13820 A03821 A03822 C63823 C93824 CC3825 C53826 A03827 A03828 A03829 A0382A A0382B A0382C 9B382D 9B382E 00382F A0     1500         .BYTE " Enter No of Blocks ",$9B,03830 C53831 EE3832 F43833 E53834 F23835 A03836 CE3837 EF3838 A03839 EF383A E6383B A0383C C2383D EC383E EF383F E33840 EB3841 F33842 A03843 9B3844 003845 A0     1505         .BYTE " Prefer $08 (Y/N) ",$9B,03846 D03847 F23848 E53849 E6384A E5384B F2384C A0384D A4384E B0384F B83850 A03851 A83852 D93853 AF3854 CE3855 A93856 A03857 9B3858 003859 7D     1510         .BYTE $7D,$9B,"              RPM  CHECK              ",$9B,0385A 9B385B A0385C A0385D A0385E A0385F A03860 A03861 A03862 A03863 A03864 A03865 A03866 A03867 A03868 A03869 D2386A D0386B CD386C A0386D A0386E C3386F C83870 C53871 C33872 CB3873 A03874 A03875 A03876 A03877 A03878 A03879 A0387A A0387B A0387C A0387D A0387E A0387F A03880 A03881 9B3882 003883 7D     1515         .BYTE $7D,$9B,"            FORMAT  TRACK             ",$9B,03884 9B3885 A03886 A03887 A03888 A03889 A0388A A0388B A0388C A0388D A0388E A0388F A03890 A03891 C63892 CF3893 D23894 CD3895 C13896 D43897 A03898 A03899 D4389A D2389B C1389C C3389D CB389E A0389F A039A0 A039A1 A039A2 A039A3 A039A4 A039A5 A039A6 A039A7 A039A8 A039A9 A039AA A039AB 9B39AC 0038AD A0     1520         .BYTE " Insert Disk in F-Drive, hit RETURN ",$9B,038AE C938AF EE38B0 F338B1 E538B2 F238B3 F438B4 A038B5 C438B6 E938B7 F338B8 EB38B9 A038BA E938BB EE38BC A038BD C638BE AD38BF C438C0 F238C1 E938C2 F638C3 E538C4 AC38C5 A038C6 E838C7 E938C8 F438C9 A038CA D238CB C538CC D438CD D538CE D238CF CE38D0 A038D1 9B38D2 0038D3 A0     1525         .BYTE "Enter Index Delay ",$9B,038D4 C538D5 ED38D6 F438D7 E538D8 F238D9 A038DA C938DB EE38DC E438DD E538DE F838DF A038E0 C438E1 E538E2 EC38E3 E138E4 F938E5 A038E6 9B38E7 0038E8 58     1530 SPEED   .BYTE "XXX.X  UPM",038E9 5838EA 5838EB 2E38EC 5838ED 2038EE A038EF D538F0 D038F1 CD38F2 0038F3 9B     1535         .BYTE $9B,$9B," Space Bar to Exit ",$9B,$1C,$1C,$1C,038F4 9B38F5 A038F6 D338F7 F038F8 E138F9 E338FA E538FB A038FC C238FD E138FE F238FF A03900 F43901 EF3902 A03903 C53904 F83905 E93906 F43907 A03908 9B3909 1C390A 1C390B 1C390C 00390D 9B     1540         .BYTE $9B, " Type Y to Restart ",$9B,0390E A0390F D43910 F93911 F03912 E53913 A03914 D93915 A03916 F43917 EF3918 A03919 D2391A E5391B F3391C F4391D E1391E F2391F F43920 A03921 9B3922 003923 9B     1545         .BYTE $9B,$1C,03924 1C3925 00            1550 ;            1555 ;---------------------            1560 ;            1565 ; CREATE CONTROL FILE            1570 ;3962 A205   1575 CREATE  LDX #5           OUTPUT STRING3928 205834 1580         JSR PRTSTR392B A206   1585         LDX #6           ASK FOR FILESPEC392D 205834 1590         JSR PRTSTR3930 20A034 1595         JSR INPUT3933 A908   1600         LDA #8           OPEN FILE FOR OUTPUT3935 20D534 1605         JSR OPEN3938 A207   1610         LDX #7           ASL FOR CONTROL BLOCK393A 205834 1615         JSR PRTSTR393D 20E739 1620         JSR RESCON3940 20A034 1625 CREAT1  JSR INPUT        GET LINE3943 AD0940 1630         LDA INBUF        BLOCK COMPLETE ?3946 C99B   1635         CMP #$9B3948 F01A   1640         BEQ CREAT4394A A000   1645         LDY #0           MOVE LINE TO CONTROL BUFFER394C B90940 1650 CREAT2  LDA INBUF,Y394F 91B4   1655         STA (CONPNT),Y3951 C99B   1660         CMP #$9B3953 F003   1665         BEQ CREAT3       EOL3955 C8     1670         INY3956 10F4   1675         BPL CREAT2       ALWAYS3958 98     1680 CREAT3  TYA              ADVANCE POINTER3959 38     1685         SEC395A 65B4   1690         ADC CONPNT395C 85B4   1695         STA CONPNT395E 90E0   1700         BCC CREAT13960 E6B5   1705         INC CONPNT+13962 D0DC   1710         BNE CREAT1       ALWAYS3964 A208   1715 CREAT4  LDX #8           ASK FOR SECTOR STRING3966 205834 1720         JSR PRTSTR3969 20A034 1725         JSR INPUT        GET IT396C A209   1730         LDX #9           CR/LF396E 205834 1735         JSR PRTSTR3971 20F039 1740         JSR SETEND       SET END ADDRESS3974 A964   1745         LDA #100         RESET LINE3976 A200   1750         LDX #03978 85B0   1755         STA PRTPNT       USE PRINTER POINTER397A 86B1   1760         STX PRTPNT+1397C A900   1765 CREAT5  LDA #0           CREATE FILE397E 85B2   1770         STA TEMP         RESET SECTOR POINTER INDEX3980 A4B2   1775 CREAT6  LDY TEMP         LAST SECTOR PROCESSED ?3982 B90940 1780         LDA INBUF,Y3985 C99B   1785         CMP #$9B3987 D006   1790         BNE CREAT7       NO3989 20CB34 1795         JSR CLOSE        CLOSE FILE398C 4C0034 1800         JMP MAIN398F 38     1805 CREAT7  SEC              CALC SECTOR NO3990 E940   1810         SBC #$403992 85B8   1815         STA SECTOR3994 20E739 1820         JSR RESCON3997 20293A 1825 CREAT8  JSR LINNUM       GENERATE LINENNO399A A000   1830         LDY #0           SAVE FIRST STATEMENT CHR399C B1B4   1835         LDA (CONPNT),Y399E 48     1840         PHA399F A000   1845 CREAT9  LDY #0           GENERATE ONE LINE39A1 B1B4   1850         LDA (CONPNT),Y39A3 C99B   1855         CMP #$9B39A5 F00B   1860         BEQ CREA10       EOL39A7 20033A 1865         JSR GENBYT39AA A2B4   1870         LDX #CONPNT39AC 209934 1875         JSR INCPNT39AF 4C9F39 1880         JMP CREAT939B2 68     1885 CREA10  PLA              HEADER STATEMENT ?39B3 C948   1890         CMP #$4839B5 D00F   1895         BNE CREA11       NO39B7 A920   1900         LDA #$2039B9 20033A 1905         JSR GENBYT39BC A5B8   1910         LDA SECTOR       OUTPUT SECTOR NO39BE A200   1915         LDX #039C0 200B3A 1920         JSR INTASC39C3 20153A 1925         JSR GENNUM39C6 A99B   1930 CREA11  LDA #$9B         EOL39C8 20033A 1935         JSR GENBYT39CB A2B4   1940         LDX #CONPNT      ADVANCE PNT39CD 209934 1945         JSR INCPNT39D0 20F939 1950         JSR CMPCON39D3 90C2   1955         BCC CREAT8       NEXT LINE39D5 20293A 1960         JSR LINNUM       NEW LINE39D8 A93B   1965         LDA #$3B39DA 20033A 1970         JSR GENBYT39DD A99B   1975         LDA #$9B39DF 20033A 1980         JSR GENBYT39E2 E6B2   1985         INC TEMP39E4 4C8039 1990         JMP CREAT6            1995 ;            2000 ; CONPNT=CONBUF            2005 ;39E7 A989   2010 RESCON  LDA #CONBUF&$FF39E9 A240   2015         LDX #CONBUF/25639EB 85B4   2020         STA CONPNT39ED 86B5   2025         STX CONPNT+139EF 60     2030         RTS            2035 ;            2040 ; CONEND=CONPNT            2045 ;39F0 A5B4   2050 SETEND  LDA CONPNT39F2 A6B5   2055         LDX CONPNT+139F4 85B6   2060         STA CONEND39F6 86B7   2065         STX CONEND+139F8 60     2070         RTS            2075 ;            2080 ; COMPARE CONPNT AGAINST CONEND            2085 ;39F9 A5B4   2090 CMPCON  LDA CONPNT39FB 38     2095         SEC39FC E5B6   2100         SBC CONEND39FE A5B5   2105         LDA CONPNT+13A00 E5B7   2110         SBC CONEND+13A02 60     2115         RTS            2120 ;            2125 ; BYTE A TO DISK AND SCREEN            2130 ;3A03 48     2135 GENBYT  PHA3A04 208E34 2140         JSR PRTCHR3A07 68     2145         PLA3A08 4CF834 2150         JMP PUTBYT            2155 ;            2160 ; CONVERT A,X TO ASCII            2165 ;3A0B 85D4   2170 INTASC  STA FR0          INTEGER TO FLOAT3A0D 86D5   2175         STX FR0+13A0F 20AAD9 2180         JSR IFP3A12 4CE6D8 2185         JMP FASC            2190 ;            2195 ; ASCII NUMBER TO DISK AND SCREEN            2200 ;3A15 A200   2205 GENNUM  LDX #03A17 86B3   2210 GENNU1  STX TEMP1        SAVE INDEX3A19 BD8005 2215         LDA LBUFF,X3A1C 48     2220         PHA              SAVE CHAR3A1D 297F   2225         AND #$7F3A1F 20033A 2230         JSR GENBYT       TO DISK AND SCREEN3A22 A6B3   2235         LDX TEMP1        NEXT INDEX3A24 E8     2240         INX3A25 68     2245         PLA3A26 10EF   2250         BPL GENNU1       ANOTHER CHAR3A28 60     2255         RTS            2260 ;            2265 ; GENERATE LINE NUMBER            2270 ;3A29 A5B0   2275 LINNUM  LDA PRTPNT3A2B A6B1   2280         LDX PRTPNT+13A2D 200B3A 2285         JSR INTASC       TO ASCII3A30 20153A 2290         JSR GENNUM       OUTPUT3A33 A920   2295         LDA #$20         SPACE3A35 20033A 2300         JSR GENBYT3A38 A5B0   2305         LDA PRTPNT       INC LINENO BY 53A3A 18     2310         CLC3A3B 6905   2315         ADC #53A3D 85B0   2320         STA PRTPNT3A3F 9002   2325         BCC LINNU13A41 E6B1   2330         INC PRTPNT+13A43 60     2335 LINNU1  RTS            2340 ;            2345 ;---------------------            2350 ;            2355 ; COMPILE FORMAT FILE            2360 ;3A44 A20A   2365 COMPIL  LDX #10          OUTPUT HEADLINE3A46 205834 2370         JSR PRTSTR3A49 A20B   2375         LDX #11          ASK FOR CONTROL FILESPEC3A4B 205834 2380         JSR PRTSTR3A4E 20A034 2385         JSR INPUT3A51 A904   2390         LDA #4           OPEN FILE3A53 20D534 2395         JSR OPEN3A56 20E739 2400         JSR RESCON       READ CONTROL FILE3A59 201235 2405 COMPI1  JSR GETBYT3A5C F00C   2410         BEQ COMPI2       EOF3A5E A000   2415         LDY #03A60 91B4   2420         STA (CONPNT),Y3A62 A2B4   2425         LDX #CONPNT      INC POINTER3A64 209934 2430         JSR INCPNT3A67 4C593A 2435         JMP COMPI13A6A 20F039 2440 COMPI2  JSR SETEND       SAVE END3A6D 20E739 2445         JSR RESCON3A70 20CB34 2450         JSR CLOSE3A73 A20C   2455         LDX #12          ASK FOR DATA FILESPEC3A75 205834 2460         JSR PRTSTR3A78 20A034 2465         JSR INPUT3A7B A904   2470         LDA #43A7D 20D534 2475         JSR OPEN         OPEN DATA FILE3A80 A906   2480         LDA #6           IGNORE HEADER3A82 85B2   2485         STA TEMP3A84 201235 2490 COMPI3  JSR GETBYT3A87 D005   2495         BNE COMPI4       NO EOF3A89 A20E   2500         LDX #14          BAD DATA FILE3A8B 4CBF34 2505         JMP ERROR3A8E C6B2   2510 COMPI4  DEC TEMP3A90 D0F2   2515         BNE COMPI33A92 A20D   2520 COMPI5  LDX #13          ASK FOR TRACK3A94 205834 2525         JSR PRTSTR3A97 20AE3B 2530         JSR NINPUT       GET NUMBER3A9A E000   2535         CPX #03A9C F008   2540         BEQ COMPI7       FROM 0 TO 2553A9E A201   2545 COMPI6  LDX #1           BEEP3AA0 205834 2550         JSR PRTSTR3AA3 4C923A 2555         JMP COMPI53AA6 C92A   2560 COMPI7  CMP #423AA8 B0F4   2565         BCS COMPI6       TOO BIG3AAA 85B9   2570         STA TRACK3AAC A209   2575         LDX #9           CR/LF3AAE 205834 2580         JSR PRTSTR3AB1 20093C 2585         JSR SETFOR       INIT POINTER3AB4 20123C 2590 COMPI8  JSR CONBYT       SCAN FOR COMMAND3AB7 C920   2595         CMP #$203AB9 F0F9   2600         BEQ COMPI8       IGNORE SPACE3ABB C930   2605         CMP #$303ABD 9004   2610         BCC COMPI93ABF C93A   2615         CMP #$3A3AC1 90F1   2620         BCC COMPI8       IGNORE LINENO3AC3 C93B   2625 COMPI9  CMP #$3B3AC5 D006   2630         BNE COMP103AC7 202C3C 2635         JSR LINEND       SKIP COMMENT3ACA 4CB43A 2640         JMP COMPI83ACD 85B2   2645 COMP10  STA TEMP         SAVE FIRST CHAR3ACF 20123C 2650         JSR CONBYT       GET SECOND CHAR3AD2 A8     2655         TAY3AD3 A215   2660         LDX #21          SCAN COMMAND TABLE3AD5 98     2665 COMP11  TYA3AD6 CA     2670         DEX3AD7 DD833B 2675         CMP COMTAB+1,X3ADA D007   2680         BNE COMP123ADC A5B2   2685         LDA TEMP3ADE DD823B 2690         CMP COMTAB,X3AE1 F00B   2695         BEQ COMP14       COMMAND FOUND3AE3 CA     2700 COMP12  DEX3AE4 10EF   2705         BPL COMP113AE6 202C3C 2710 COMP13  JSR LINEND       SYNTAX ERROR3AE9 A20F   2715         LDX #153AEB 4CBF34 2720         JMP ERROR3AEE 20733B 2725 COMP14  JSR COMP22       EXECUTE COMMAND3AF1 202C3C 2730         JSR LINEND       SKIP TO LINEND3AF4 4CB43A 2735         JMP COMP18       NEXT COMMAND3AF7 A210   2740 COMP15  LDX #16          ASK FOR CRC FIX3AF9 205834 2745         JSR PRTSTR3AFC 20A034 2750         JSR INPUT3AFF 20343C 2755         JSR SETFND       SAVE FORMAT TABLE END3B02 AD0940 2760         LDA INBUF3B05 C959   2765         CMP #$593B07 D040   2770         BNE COMP20       NO CRC FIX3B09 20093C 2775         JSR SETFOR       INIT POINTER3B0C 203D3C 2780 COMP16  JSR ASSBYT       GET DATA/CLOCK3B0F A5BC   2785         LDA CLOCK        TEST FOR DAM3B11 C9C7   2790         CMP #$C73B13 D02F   2795         BNE COMP19       NOT DAM3B15 A5BD   2800         LDA DATA3B17 29FC   2805         AND #$FC3B19 C9F8   2810         CMP #$F83B1B D027   2815         BNE COMP19       NOT DAM3B1D A5BE   2820         LDA FORPNT       SAVE POINTER3B1F 48     2825         PHA3B20 A5BF   2830         LDA FORPNT+13B22 48     2835         PHA3B23 20513C 2840         JSR RESCRC3B26 A981   2845         LDA #129         CRC FOR 129 DATA/CLOCKS3B28 85C2   2850         STA COUNT3B2A 203D3C 2855 COMP17  JSR ASSBYT3B2D A5BD   2860         LDA DATA3B2F 20583C 2865         JSR CRCGEN       CALC CRC3B32 20F53B 2870         JSR ADVFOR       ADVANCE POINTER3B35 B007   2875         BCS COMP18       END3B37 C6C2   2880         DEC COUNT3B39 D0EF   2885         BNE COMP17       NEXT BYTE3B3B 20793C 2890         JSR STOCRC       STORE CRC BYTES3B3E 68     2895 COMP18  PLA              RESTORE POINTER3B3F 85BF   2900         STA FORPNT+13B41 68     2905         PLA3B42 85BE   2910         STA FORPNT3B44 20F53B 2915 COMP19  JSR ADVFOR       TO NEXT DATA/CLOCK3B47 90C3   2920         BCC COMP163B49 20CB34 2925 COMP20  JSR CLOSE        CLOSE DATA FILE3B4C A211   2930         LDX #173B4E 205834 2935         JSR PRTSTR       ASK FOR FORM FILESPEC3B51 20A034 2940         JSR INPUT3B54 A908   2945         LDA #8           OPEN FOR OUTPUT3B56 20D534 2950         JSR OPEN3B59 20093C 2955         JSR SETFOR3B5C A5B9   2960         LDA TRACK        WRITE TRACK NO3B5E 20F834 2965         JSR PUTBYT3B61 A000   2970 COMP21  LDY #0           WRITE FORM FILE3B63 B1BE   2975         LDA (FORPNT),Y3B65 20F834 2980         JSR PUTBYT3B68 20FA3B 2985         JSR INCFOR3B6B 90F4   2990         BCC COMP213B6D 20CB34 2995         JSR CLOSE3B70 4C0034 3000         JMP MAIN3B73 A9FF   3005 COMP22  LDA #$FF         INIT CLOCK PATTERN3B75 85BC   3010         STA CLOCK3B77 BD993B 3015         LDA COMBTB+1,X3B7A 48     3020         PHA3B7B BD983B 3025         LDA COMBTB,X3B7E 48     3030         PHA3B7F 4C893C 3035         JMP SKIPCE       SKIP COMMAND AND BRANCH            3040 ;3B82 52     3045 COMTAB  .BYTE "RECRDAIDIXGA"3B83 453B84 433B85 523B86 443B87 413B88 49 3B89 443B8A 493B8B 583B8C 473B8D 413B8E 42     3050         .BYTE "BLBYNIHETR"3B8F 4C3B90 423B91 593B92 4E3B93 493B94 483B95 453B96 543B97 52            3055 ;3B98 503C   3060 COMBTB  .WORD RESCRC-13B9A 783C   3065         .WORD STOCRC-13B9C 983C   3070         .WORD DAM-13B9E AD3C   3075         .WORD IDAM-13BA0 A73C   3080         .WORD IXAM-13BA2 B13C   3085         .WORD GAP-13BA4 C03C   3090         .WORD BLOCK-13BA6 ED3C   3095         .WORD BYTE-13BA8 F83C   3100         .WORD NIBBLE-13BAA 093D   3105         .WORD HEADER-13BAC 273D   3110         .WORD GTRACK-1            3115 ;            3120 ; GET INTEGER A,X FROM KEYBOARD            3125 ;3BAE 20A034 3130 NINPUT  JSR INPUT3BB1 A909   3135         LDA #INBUF&$FF3BB3 A240   3140         LDX #INBUF/2563BB5 85F3   3145         STA INBUF3BB7 86F4   3150         STX INBUF+13BB9 A900   3155         LDX #03BBB 85F2   3160         STA CIX3BBD 2000D8 3165         JSR AFP          ASCII TO FLOAT3BC0 B00A   3170         BCS NINPU1       BAD3BC2 20D2D9 3175         JSR FPI          CONVERT TO INTEGER3BC5 B005   3180         BCS NINPU1       BAD3BC7 A5D4   3185         LDA FRO3BC9 A6D5   3190         LDX FRO+13BCB 60     3195         RTS3BCC A9FF   3200 NINPU1  LDA #$FF         ERROR EXIT3BCE AA     3205         TAX3BCF 60     3210         RTS            3215 ;            3220 ; PUT CLOCK/DATA PATTERN TO FORM AREA            3225 ; CALC CRC, ADVANCE POINTER            3230 ;3BD0 85BD   3235 PUTPAT  STA DATA         CALC CRC3BD2 20583C 3240         JSR CRCGEN3BD5 A208   3245         LDX #83BD7 06BC   3250 PUTPA1  ASL CLOCK3BD9 26B2   3255         ROL TEMP3BDB 26B3   3260         ROL TEMP13BDD 06BD   3265         ASL DATA3BDF 26B2   3270         ROL TEMP3BE1 26B3   3275         ROL TEMP13BE3 CA     3280         DEX3BE4 D01F   3285         BNE PUTPA13BE6 A000   3290         LDX #03BE8 A5B3   3295         LDA TEMP13BEA 91BE   3300         STA (FORPNT),Y3BEC C8     3305         INY3BED A5B2   3310         LDA TEMP3BEF 91BE   3315         STA (FORPNT),Y3BF1 A9FF   3320         LDA #$FF         NORMAL CLOCK PATTERN3BF3 85BC   3325         STA CLOCK            3330 ;            3335 ; ADVANCE PORPNT BY 2, CY=0 IF FORPNT<FOREND            3340 ;3BF5 A2BE   3345 ADVFOR  LDX #FORPNT3BF7 209934 3350         JSR INCPNT            3355 ;            3360 ; INCREMENT FORPNT, CY=0 IF FORPNT<FOREND            3365 ;3BFA A2BE   3370 INCFOR  LDX #FORPNT3BFC 209934 3375         JSR INCPNT3BFF A5BE   3380         LDA FORPNT3C01 38     3385         SEC3C02 E5C0   3390         SBC FOREND3C04 A5BF   3395         LDA FORPNT+13C06 E5C1   3400         SBC FOREND+13C08 60     3405         RTS            3410 ;            3415 ; FORPNT=CONEND            3420 ;3C09 A5B6   3425 SETFOR  LDA CONEND3C0B A6B7   3430         LDX CONEND+13C0D 85BE   3435         STA FORPNT3C0F 86BF   3440         STX FORPNT+13C11 60     3445         RTS            3450 ;            3455 ; GET NEXT BYTE FROM CONTROL FILE            3460 ; EXIT IF EOF, ELSE PRINT IT            3465 ;3C12 20F939 3470 CONBYT  JSR CMPCON3C15 B00F   3475         BCS CONBY1       EOF3C17 A000   3480         LDY #0           GET BYTE3C19 B1B4   3485         LDA (CONPNT),Y3C1B A2B4   3490         LDX #CONPNT      ADVANCE POINTER3C1D 209934 3495         JSR INCPNT3C20 48     3500         PHA              SAVE BYTE3C21 208E34 3505         JSR PRTCHR       PRINT IT3C24 68     3510         PLA3C25 60     3515         RTS3C26 A2FF   3520 CONBY1  LDX #$FF         RESTORE STACK3C28 9A     3525         TXS3C29 4CF73A 3530         JMP COMP15            3535 ;            3540 ; SKIP TO NEXT COMMAND LINE            3545 ;3C2C 20123C 3550 LINEND  JSR CONBYT       GET BYTE3C2F C99B   3555         CMP #$9B3C31 D0F9   3560         BNE LINEND       NOT EOF3C33 60     3565         RTS            3570 ;            3575 ; FOREND=FORPNT            3580 ;3C34 A5BE   3585 SETFND  LDA FORPNT3C36 A6BF   3590         LDX FORPNT+13C38 85C0   3595         STA FOREND3C3A 86C1   3600         STX FOREND+13C3C 60     3605         RTS            3610 ;            3615 ; ASSEMBLE DATA/CLOCK FROM (FORPNT)            3620 ;3C3D A000   3625 ASSBYT  LDY #03C3F 20433C 3630         JSR ASSBY13C42 C8     3635         INY3C43 B1BE   3640 ASSBY1  LDA (FORPNT),Y3C45 A204   3645         LDX #43C47 0A     3650 ASSBY2  ASL A3C48 26BC   3655         ROL CLOCK3C4A 0A     3660         ASL A3C4B 26BD   3665         ROL DATA3C4D CA     3670         DEX3C4E D07F   3675         BNE ASSBY23C50 60     3680         RTS            3685 ;            3690 ; RESET CRC GENERATOR            3695 ;3C51 A9FF   3700 RESCRC  LDA #$FF3C53 85BA   3705         STA CRCL3C55 85BB   3710         STA CRCH3C57 60     3715         RTS            3720 ;            3725 ; CRC GENERATOR            3730 ;3C58 85B2   3735 CRCGEN  STA TEMP         SAVE BYTE3C5A A208   3740         LDX #8           LOOP COUNTER3C5C A5B2   3745 CRCGE1  LDA TEMP         GET NEXT BIT3C5E 45BB   3750         EOR CRCH         MODULO ADD CRC BIT 153C60 0A     3755         ASL A            RESULT TO CARRY3C61 900C   3760         BCC CRCGE23C63 A5BA   3765         LDA CRCL         INVERT CRC BIT 43C65 4910   3770         EOR #$103C67 85BA   3775         STA CRCL3C69 A5BB   3780         LDA CRCH         INVERT CRC BIT 113C6B 4908   3785         EOR #83C6D 85BB   3790         STA CRCH3C6F 26BA   3795 CRCGE2  ROL CRCL         SHIFT CRC REGISTER3C71 26BB   3800         ROL CRCH3C73 06B2   3805         ASL TEMP         SHIFT BYTE3C75 CA     3810         DEX3C76 D0E4   3815         BNE CRCGE1       LOOP AGAIN3C78 60     3820         RTS            3825 ;            3830 ; STORE CRC VIA PUTPAT            3835 ;3C79 A5BA   3840 STOCRC  LDA CRCL         SAVE CRCL3C7B 48     3845         PHA3C7C A9FF   3850         LDA #$FF3C7E 85BC   3855         STA CLOCK3C80 A5BB   3860         LDA CRCH3C82 20D03B 3865         JSR PUTPAT3C85 68     3870         PLA3C86 4CD03B 3875         JMP PUTPAT            3880 ;            3885 ; SKIP TO COMMAND END            3890 ;3C89 A000   3895 SKIPCE  LDY #03C8B B1B4   3900         LDA (CONPNT),Y3C8D C99B   3905         CMP #$9B         EOL ?3C8F F007   3910         BEQ SKIPC13C91 20123C 3915         JSR CONBYT       NEXT BYTE3C94 C920   3920         CMP #$20         SPACE ?3C96 D0F1   3925         BNE SKIPCE       NO3C98 60     3930 SKIPC1  RTS            3935 ;            3940 ; DATA AM            3945 ;3C99 202D3D 3950 DAM     JSR BINNUM3C9C 49FF   3955         EOR #$FF3C9E 38     3960         SEC3C9F 69FB   3965         ADC #$FB3CA1 A2C7   3970 DAM1    LDX #$C7         CLOCK PATTERN3CA3 86BC   3975 DAM2    STX CLOCK3CA5 4CD03B 3980         JMP PUTPAT            3985 ;            3990 ; GENERATE INDEX AM            3995 ;3CA8 A9FC   4000 IXAM    LDA #$FC3CAA A2D7   4005         LDX #$D73CAC D0F5   4010         BNE DAM2         ALWAYS            4015 ;            4020 ; GENERATE ID AM            4025 ;3CAE A9FE   4030 IDAM    LDA #$FE3CB0 D0EF   4035         BNE DAM1            4040 ;            4045 ; GENERATE GAP            4050 ;3CB2 202D3D 4055 GAP     JSR BINNUM3CB5 85C2   4060         STA COUNT        NO OF ZEROES3CB7 A900   4065 GAP1    LDA #03CB9 20D03B 4070         JSR PUTPAT3CBC C6C2   4075         DEC COUNT3CBE D07F   4080         BNE GAP13CC0 60     4085         RTS            4090 ;            4095 ; GENERATE DATA BLOCK            4100 ;3CC1 202D3D 4105 BLOCK   JSR BINNUM3CC4 85C2   4110         STA COUNT3CC6 A900   4115         LDA #03CC8 85C3   4120         STA COUNT23CCA 201235 4125 BLOCK1  JSR GETBYT3CCD F01A   4130         BEQ BLOCK4       OUT OF DATA3CCF 49FF   4135         EOR #$FF         INVERT BITS3CD1 20D03B 4140         JSR PUTPAT3CD4 E6C3   4145         INC COUNT23CD6 C6C2   4150         DEC COUNT3CD8 D0F0   4155         BNE BLOCK13CDA 24C3   4160 BLOCK2  BIT COUNT2       USE ALWAYS 128 BYTES3CDC 300A   4165         BMI BLOCK33CDE 201235 4170         JSR GETBYT3CE1 F006   4175         BEQ BLOCK4       EOF3CE3 E6C3   4180         INC COUNT23CE5 4CDA3C 4185         JMP BLOCK23CE8 60     4190 BLOCK3  RTS3CE9 A212   4195 BLOCK4  LDX #18          OUT OF DATA MESSAGE3CEB 4CBF34 4200         JMP ERROR            4205 ;            4210 ; GENERATE BYTES            4215 ;3CEE 202D3D 4220 BYTE    JSR BINNUM3CF1 08     4225         PHP3CF2 20D03B 4230         JSR PUTPAT3CF5 28     4235         PLP3CF6 90F6   4240         BCC BYTE3CF8 60     4245         RTS            4250 ;            4255 ; GENERATE NIBBLES            4260 ;3CF9 202D3D 4265 NIBBLE  JSR BINNUM3CFC 08     4270 NIBBL1  PHP3CFD A000   4275         LDY #03CFF 91BE   4280         STA (FORPNT),Y3D01 A2BE   4285         LDX #FORPNT3D03 209934 4290         JSR INCPNT3D06 28     4295         PLP3D07 90F0   4300         BCC NIBBLE3D09 60     4305         RTS            4310 ;            4315 ; GENERATE HEADER            4320 ;3D0A 202D3D 4325 HEADER  JSR BINNUM3D0D 48     4330         PHA              SAVE SECTOR NO3D0E 20513C 4335         JSR RESCRC       REST CRC GEN3D11 20AE3C 4340         JSR IDAM3D14 20283D 4345         JSR GTRACK3D17 A900   4350         LDA #0           SIDE 03D19 20D03B 4355         JSR PUTPAT3D1C 68     4360         PLA3D1D 20D03B 4365         JSR PUTPAT       SECTOR NO3D20 A900   4370         LDA #0           LENGTH3D22 20D03B 4375         JSR PUTPAT3D25 4C793C 4380         JMP STOCRC            4385 ;            4390 ; GENERATE TRACK            4395 ;3D28 A5B9   4400 GTRACK  LDA TRACK3D2A 4CD03B 4405         JMP PUTPAT            4410 ;            4415 ; GET BYTE VALUE FROM (CONPNT)            4420 ; HEX $XX AND DEC ALLOWAED            4425 ; CY=1 IF LAST VALUE            4430 ; SYNTAX ERROR EXIT            4435 ;3D2D A900   4440 BINNUM  LDA #0           DECIMAL MODE3D2F 85C5   4445         STA STAT3D31 85C4   4450         STA NUM          ZERO NUMBER3D33 A000   4455 BINNU1  LDY #0           TEST BYTE3D35 B1B4   4460         LDA (CONPNT),Y3D37 C99B   4465         CMP #$9B3D39 F00C   4470         BEQ BINNU2       LINE END3D3B C920   4475         CMP #$203D3C F008   4480         BEQ BINNU23D3F 20123C 4485         JSR CONBYT3D42 C92C   4490         CMP #$2C3D44 D004   4495         BNE BINNU33D46 18     4500         CLC              NUMBER END3D47 A5C4   4505 BINNU2  LDA NUM3D49 60     4510         RTS3D4A C924   4515 BINNU3  CMP #$24         HEX NUMBER ?3D4C D006   4520         BNE BINNU4       NO3D4E A980   4525         LDA #$803D50 85C5   4530         STA STAT3D52 30DF   4535         BMI BINNU1       ALWAYS3D54 38     4540 BINNU4  SEC              ASCII TO DIGIT3D55 E930   4545         SBC #$303D57 9037   4550         BCC BINNU7       ERROR3D59 C90A   4555         CMP #103D5B 9006   4560         BCC BINNU5       FROM 0...93D5D E907   4565         SBC #73D5F C910   4570         CMP #$103D61 B02D   4575         BCS BINNU7       ERROR EXIT3D63 48     4580 BINNU5  PHA3D64 A5C5   4585         LDA STAT3D66 3018   4590         BMI BINNU6       HEX NUMBER3D68 06C4   4595         ASL NUM3D6A A5C4   4600         LDA NUM3D6C 06C4   4605         ASL NUM3D6E 06C4   4610         ASL NUM3D70 65C4   4615         ADC NUM3D72 85C4   4620         STA NUM3D74 68     4625         PLA3D75 C90A   4630         CMP #$A3D77 B017   4635         BCS BINNU7       ERROR3D79 65C4   4640         ADC NUM3D7B 85C4   4645         STA NUM3D7D 4C333D 4650         JMP BINNU13D80 06C4   4655 BINNU6  ASL NUM          MULT BY 163D82 06C4   4660         ASL NUM3D84 06C4   4665         ASL NUM3D86 06C4   4670         ASL NUM3D88 68     4675         PLA3D89 65C4   4680         ADC NUM3D8B 85C4   4685         STA NUM3D8D 4C333D 4690         JMP BINNU13D90 4CE63A 4695 BINNU7  JMP COMP13       SYNTAX ERROR            4700 ;            4705 ;------------------------            4710            4715 ; CREATE RANDOM DATA FILE            4720 ;3D93 A213   4725 RANDOM  LDX #193D95 205834 4730         JSR PRTSTR3D98 A214   4735         LDX #20          ASK FOR NO OF BLOCKS3D9A 205834 4740         JSR PRTSTR3D9D 20AE3B 4745         JSR NINPUT3DA0 85C2   4750         STA COUNT3DA2 A215   4755         LDX #21          ASK FOR MORE $083DA4 205834 4760         JSR PRTSTR3DA7 20A034 4765         JSR INPUT3DAA A900   4770         LDA #03DAC 85C5   4775         STA STAT3DAE AD0940 4780         LDA INBUF3DB1 C959   4785         CMP #$593DB3 D002   4790         BNE RANDO13DB5 E6C5   4795         INC STAT3DB7 A20C   4800 RANDO1  LDX #12          ASK FOR DATA FILESPEC3DB9 205834 4805         JSR PRTSTR3DBC 200A34 4810         JSR INPUT3DBF A908   4815         LDA #8           OPEN FOR OUTPUT3DC1 20D534 4820         JSR OPEN3DC4 A5C2   4825         LDA COUNT        PREPARE HEADER3DC6 4A     4830         LSR A3DC7 AA     4835         TAX3DC8 A900   4840         LDA #03DCA 6A     4845         ROR A3DCB 8D0C3E 4850         STA HEATAB+13DCE 8A     4855         TXA3DCF 6940   4860         ADC #$403DD1 8D0B3E 4865         STA HEATAB3DD4 A905   4870         LDA #5           WRITE BINARY LOAD HEADER3DD6 85C3   4875         STA COUNT23DD8 A6C3   4880 RANDO2  LDX COUNT23DDA BD0B3E 4885         LDA HEATAB,X3DDD 20F834 4890         JSR PUTBYT3DE0 C6C3   4895         DEC COUNT23DE2 10F4   4900         BPL RANDO23DE4 A980   4905 RANDO3  LDA #128         WRITE ONE BLOCK3DE6 85C3   4910         STA COUNT23DE8 A5C5   4915 RANDO4  LDA STAT         PREFER $08 ?3DEA F00B   4920         BEQ RANDO5       NO3DEC AD0AD2 4925         LDA RNDGEN       PROBABILITY 1:163DEF C910   4930         CMP #163DF1 B004   4935         BCS RANDO53DF3 A908   4940         LDA #83DF5 D003   4945         BNE RANDO6       ALWAYS3DF7 AD0AD2 4950 RANDO5  LDA RNDGEN3DFA 20F834 4955 RANDO6  JSR PUTBYT3DFD C6C3   4960         DEC COUNT23DFF D0E7   4965         BNE RANDO43E01 C6C2   4970         DEC COUNT3E03 D0DF   4975         BNE RANDO33E05 20CB34 4980         JSR CLOSE3E08 4C0034 4985         JMP MAIN            4990 ;3E0B 40     4995 HEATAB  .BYTE $40,0,$40,0,$FF,$FF3E0C 003E0D 403E0E 003E0F FF3E10 FF            5000 ;            5005 ;--------------------------------            5010 ;            5015 ; FLOPPY MOTOR ON & STEP TO TRACK            5020 ;3E11 A905   5025 FLACT   LDA #5           MOTOR ON3E13 8D00D5 5030         STA FCTRL3E16 AD00D5 5035 FLACT1  LDA FCTRL        WAIT FOR READY3E19 2910   5040         AND #$103E1B D0F9   5045         BNE FLACT13E1D A2FA   5050         LDX #250         WAIT 500 MS3E1F 20573E 5055         JSR WAIT3E22 A901   5060         LDA #1           STEP OUT3E24 20633E 5065         JSR STEP3E27 A901   5070         LDA #1           STEP OUT3E29 20633E 5075         JSR STEP3E2C A2C8   5080         LDX #200         WAIT 500 MS3E2E 20573E 5085         JSR WAIT3E31 AD00D5 5090 FLACT2  LDA FCTRL        RESTORE HEAD3E34 2920   5095         AND #$203E36 F007   5100         BEQ FLACT33E38 A909   5105         LDA #93E3A 20633E 5110         JSR STEP3E3D F0F2   5115         BEQ FLACT2       ALWAYS3E3F A2C8   5120 FLACT3  LDX #200         WAIT 500 MS3E41 20573E 5125         JSR WAIT3E44 A5B9   5130         LDA TRACK        STEP TO TRACK3E46 85B2   5135         STA TEMP3E48 A5B2   5140 FLACT4  LDA TEMP3E4A F009   5145         BEQ FLACT53E4C C6B2   5150         DEC TEMP3E4E A901   5155         LDA #13E50 20633E 5160         JSR STEP3E53 F0F3   5165         BEQ FLACT4       ALWAYS3E55 A214   5170 FLACT5  LDX #20          WAIT 20 MS            5175 ;            5180 ; Wait X MILLISEKUNDEN            5185 ;3E57 A010   5190 WAIT    LDY #163E59 8D0AD4 5195 WAIT1   STA WSYNC3E5C 88     5200         DEY3E5D D0FA   5205         BNE WAIT13E5F CA     5210         DEX3E60 D05F   5215         BNE WAIT3E62 60     5220         RTS            5225 ;            5230 ; STEP IN DIRECTION X            5235 ;3E63 8D00D5 5240 STEP    STA FCTRL        ACTIVE STEP3E66 A201   5245         LDX #1           WAIT 1 MS3E68 20573E 5250         JSR WAIT3E6B 0904   5255         ORA #43E6D 8D00D5 5260         STA FCTRL3E70 A205   5265         LDX #5           WAIT 5 MS3E72 D0E3   5270         BNE WAIT         ALWAYS            5275 ;            5280 ;-----------            5285 ;            5290 ; RPM CHECK            5295 ;3E74 A900   5300 RPMCHK  LDA #0           ZERO TRACK3E76 85B9   5305         STA TRACK3E78 A216   5310         LDX #223E7A 205834 5315         JSR PRTSTR3E7D A218   5320         LDX #24          ASK FOR DISK3E7F 205834 5325         JSR PRTSTR3E82 20A034 5330         JSR INPUT3E85 20113E 5335         JSR FLACT        ACTIVATE FLOPPY3E88 A21B   5340         LDX #273E8A 205834 5345         JSR PRTSTR3E8D A900   5350 RPMCH1  LDA #0           TIME OUT ON ROUND3E8F 85C2   5355         STA COUNT3E91 85C3   5360         STA COUNT23E93 2C00D5 5365 RPMCH2  BIT FCTRL        WAIT FOR INDEX3E96 70FB   5370         BVS RPMCH23E98 2C00D5 5375 RPMCH3  BIT FCTRL3E9B 700B   5380         BVS RPMCH4       INDEX HOLE PASSED3E9D E6C2   5385         INC COUNT3E9F D002   5390         BNE RPMC103EA1 E6C3   5395         INC COUNT23EA3 8D0AD4 5400 RPMC10  STA WSYNC3EA6 50F0   5405         BVC RPMCH3       ALWAYS3EA8 2C00D5 5410 RPMCH4  BIT FCTRL3EAB 500B   5415         BVC RPMCH5       INDEX HOLE AGAIN3EAD E6C2   5420         INC COUNT3EAF D002   5425         BNE RPMC113EB1 E6C3   5430         INC COUNT23EB3 8D0AD4 5435 RPMC11  STA WSYNC3EB6 70F0   5440         BVS RPMCH4       ALWAYS3EB8 A5C2   5445 RPMCH5  LDA COUNT        CALC RPM3EBA A6C3   5450         LDX COUNT23EBC 85D4   5455         STA FRO3EBE 86D5   5460         STX FRO+13EC0 20AAD9 5465         JSR IFP3EC3 20B6DD 5470         JSR FMOVE3EC6 A914   5475         LDA #RPMCST&$FF3EC8 A23F   5480         LDX #RPMCST/2563ECA 85F3   5485         STA INBUF3ECC 86F4   5490         STA INBUF+13ECE A900   5495         LDA #03ED0 85F2   5500         STA CIX3ED2 2000D8 5505         JSR AFP3ED5 2028DB 5510         JSR FDIV         RESULT IS RPM*103ED8 20D2D9 5515         JSR FPI          ROUND RESULT3EDB 20AAD9 5520         JSR IFP3EDE A000   5525         LDY #0           RESULT TO STRING3EE0 A204   5530 RPMCH6  LDX #43EE2 A900   5535         LDA #03EE4 06D6   5540 RPMCH7  ASL FRO+23EE6 26D5   5545         ROL FRO+13EE8 2A     5550         ROL A3EE9 CA     5555         DEX3EEA D0F8   5560         BNE RPMCH73EEC 6930   5565         ADC #$303EEE 99E838 5570         STA SPEED,Y3EF1 C8     5575         INY3EF2 C003   5580         CPY #33EF4 D001   5585         BNE RPMCH83EF6 C8     5590         INY              SKIP DECIMAL POINT3EF7 C005   5595 RPMCH8  CPY #53EF9 D0E5   5600         BNE RPMCH6       NEXT DIGIT3EFB A21D   5605         LDX #29          DISPLAY STRING3EFD 205834 5610         JSR PRTSTR3F00 A21A   5615         LDX #263F02 205834 5620         JSR PRTSTR3F05 ADFC02 5625         LDA CH           SPACE BAR ?3F08 C921   5630         CMP #$213F0A D081   5635         BNE RPMCH1       NO3F0C A9FF   5640         LDA #$FF         IGNORE KEY3F0E 8DFC02 5645         STA CH3F11 4C0034 5650         JMP MAIN            5655 ;3F14 39     5660 RPMCST  .BYTE "9.375E6",$9B3F15 2E3F16 333F17 373F18 353F19 453F1A 363F1B 9B            5665 ;            5670 ;-----------            5675 ;            5680 ; FORMAT TRACK            5685 ;3F1C A217   5690 FORMTR  LDX #233F1E 205834 5695         JSR PRTSTR3F21 A211   5700         LDX #17          ASK FOR FORMAT FILESPEC3F23 205834 5705         JSR PRTSTR3F26 20A034 5710         JSR INPUT        GET FILESPEC3F29 A904   5715         LDA #4           FOR INPUT3F2B 20D534 5720         JSR OPEN3F2E 201235 5725         JSR GETBYT3F31 85B9   5730         STA TRACK3F33 20E739 5735         JSR RESCON       READ BIT IMAGE3F36 201235 5740 FORMT1  JSR GETBYT3F39 F00C   5745         BEQ FORMT2       EOF3F3B A000   5750         LDY #03F3D 91B4   5755         STA (CONPNT),Y3F3F A2B4   5760         LDA #CONPNT3F41 209934 5765         JSR INCPNT3F44 4C363F 5770         JMP FORMT13F47 20CB34 5775 FORMT2  JSR CLOSE        CLOSE FILE3F4A A900   5780         LDA #$00         POINTER TO OUTPUT AREA3F4C A280   5785         LDX #$803F4E 85B0   5790         STA PRTPNT3F50 86B1   5795         STX PRTPNT+13F52 A000   5800         LDY #03F54 A5B4   5805 FORMT3  LDA CONPNT       MOVE BIT BUFFER3F56 D002   5810         BNE FORMT4       TO OUTPUT AREA3F58 C6B5   5815         DEC CONPNT+13F5A C6B4   5820 FORMT4  DEC CONPNT3F5C 200040 5825         JSR DECOUT       DEC PRTPNT3F5F B1B4   5830         LDA (CONPNT),Y3F61 91B0   5835         STA (PRTPNT),Y3F63 A5B4   5840         LDA CONPNT3F65 C989   5845         CMP #CONBUF&$FF3F67 D0EB   5850         BNE FORMT33F69 A5B5   5855         LDA CONPNT+13F6B C940   5860         CMP #CONBUF/2563F6D D0E5   5865         BNE FORMT33F6F 200040 5870 FORMT5  JSR DECOUT       ZERO REST OF OUTPUT AREA3F72 A9AA   5875         LDA #$AA         (NORMAL CLOCK PATTERN)3F74 91B0   5880         STA (PRTPNT),Y3F76 A5B1   5885         LDA PRTPNT+13F78 C966   5890         CMP #$663F7A B0F3   5895         BCS FORMT53F7C A219   5900 FORMT6  LDX #25          ASK FOR INDEX DELAY3F7E 205834 5905         JSR PRTSTR3F81 20AE3B 5910         JSR NINPUT3F84 85C2   5915 FORMT7  STA COUNT        SET COUNTER3F86 48     5920         PHA              AND SAVE ON STACK3F87 8A     5925         TXA3F88 85C3   5930         STA COUNT23F8A 48     5935         PHA3F8B A218   5940         LDX #24          ASK FOR DISK3F8D 205834 5945         JSR PRTSTR3F90 20A034 5950         JSR INPUT        WAIT FOR RETURN3F93 20113E 5955         JSR FLACT        ACTIVE FLOPPY3F96 2C00D5 5960 FORMT8  BIT FCTRL        WAIT FOR INDEX3F99 50FB   5965         BVC FORMT83F9B 2C00D5 5970 FORMT9  BIT FCTRL        WAIT FOR INDEX3F9E 70FB   5975         BVS FORMT93FA0 A213   5980         LDX #19          INSTALL ZERO PAGE ROUTINE3FA2 BDEC3F 5985 FORM10  LDA ZERSUB,X3FA5 95C6   5990         STA ZEROUT,X3FA7 CA     5995         DEX3FA8 10F8   6000         BPL FORM103FAA A900   6005         LDA #03FAC 8D0ED4 6010         STA NMIEN        KILL NMI3FAF 8D00D4 6015         STA DMACTL       KILL DMA3FB2 8D0AD4 6020 FORM11  STA WSYNC        WAIT INDEX DELAY3FB5 A5C2   6025         LDA COUNT3FB7 D004   6030         BNE FORM123FB9 C6C3   6035         DEC COUNT23FBB 3005   6040         BMI FORM133FBD C6C2   6045 FORM12  DEC COUNT3FBF 4CB23F 6050         JMP FORM113FC2 A90C   6055 FORM13  LDA #$C          ACTIVATE WRITE GATE3FC4 8D00D5 6060         STA FCTRL3FC7 20C600 6065         JSR ZEROUT       WRITE DATA3FCA A90F   6070         LDA #$F          DISABLE WRITE GATE3FCC 8D00D5 6075         STA FCTRL        AND STOP MOTOR3FCF A940   6080         LDA #$40         NMI ON AGAIN3FD1 8D0ED4 6085         STA NMIEN3FD4 A21C   6090         LDX #28          ASK FOR RETRY3FD6 205834 6095         JSR PRTSTR3FD9 20A034 6100         JSR INPUT3FDC AD0940 6105         LDA INBUF3FDF C959   6110         CMP #$593FE1 D006   6115         BNE FORM143FE3 68     6120         PLA              GET DELAY VALUE3FE4 AA     6125         TAX3FE5 68     6130         PLA3FE6 4C843F 6135         JMP FORMT73FE9 4C0034 6140 FORM14  JMP MAIN            6145 ;            6150 ; ZERO PAGE RESIDENT WRITER            6155 ;3FEC AD0066 6160 ZERSUB  LDA $6600        GET BYTE3FEF 2C00D5 6165 ZERSU1  BIT FCTRL        WAIT FOR DRQ3FF2 10FB   6170         BPL ZERSU13FF4 8D01D5 6175         STA FDATA3FF7 E6C7   6180         INC ZEROUT+1     INCREMENT ADDRESS3FF9 D0F1   6185         BNE ZERSUB3FFB E6C8   6190         INC ZEROUT+23FFD 10ED   6195         BPL ZERSUB3FFF 60     6200         RTS            6205 ;            6210 ; DECREMENT POINTER            6215 ;4000 A5B0   6220 DECOUT  LDA PRTPNT4002 D002   6225         BNE DECOU14004 C6B1   6230         DEC PRTPNT+14006 C6B0   6235 DECOU1  DEC PRTPNT4008 60     6240         RTS            6245 ;            6250 ;------------------            6255 ;4009        6260 INBUF   *=  *+1284089        6265 CONBUF  .END