*r 10 20 30 40 CIOV = 50 DSKINV = 60 SIOV s 70 DOSVEC = 80 DOSINI = 90 COLDS! s 0100 KBDHND DISPLA TITLE OPT OBJ M1C0PV 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200 0210 0220 0230 0240 0250 0260 0270 0280 0290 0300 0310 0315 0320 0330 0340 0350 0360 0370 0380 0390 0400 0410 0420 0430 0440 0450 0460 0470 0480 0490 0500 0510 0520 0530 0540 0550 0560 0570 0580 0590 0600 0610 0620 0630 $8500 $E456 $E453 $E459 $0A $00 $0244 = $E420 = $E4 10 GETCH = $8300 OUT CHI = $8302 CHAR = $02FA ATACHR = $02FB INBUF = SDRIVE DDRIVE NUMBER FFLAG = SECTLO SECTHI D301 = WRTC = BKTEST TNUM = TEMPI s TEMP2 = BU3CMD DENFLG SRANGE KCOUNT TBUFLO TBUFHI DDEVIC DUNIT = DCOMND DSTATS DBUFLO DBUFHI DTIMLO DBYTLO DBYTHI DAUX1 = $030A DAUX2 = $0308 RAMTOP = $6A ; SET UP TITLE START JSR I NIT NCOPY LDA #1 STA SECTLO LDX LDY JSR $8400 = $8304 = $8305 = $8306 $8307 ~ $8308 = $8309 $8310 $8312 — (t»O v 2f 1 T o o JL o $8314 $8315 $8316 = $8317 = $8318 = $8320 = $8323 = $00 = $40 = $0300 $0301 = $0302 = $0303 = $0304 = $0305 = $0306 = $0308 = $0309 POINTER KEYBD HANDLER POINTER TO DISPLA HANDLER TEMP WORK AREA SOURCE DRIVE DEST DRIVE NUMBER OF COPIES FORMAT FLAG y SAVED VERIFY FLAG BANKING TEST INITIAL 10 BUFFER BUS I.D. # DEVICE # BUS COMMAND STATUS BUFFER POINTER LO BUFFER POINTER HI DISK TIME OUT # OF BYTES LO # OF BYTES HI SECTOR # LO SECTOR # HI INIT&PROTECTION ; POINT TO FIRST #MESS1&255 #MESSl/256 PUTLIN ; COPYRIGHT #MESS2&255 #MESS2/256 PUTLIN ; NUM OF COPIES? #0 SECTHI KCOUNT DENFLG LDA #$D1 STA SRANGE LDA U2 STA SRANGE+1 LDX LDY JSR LDX TX Q STX STX hmu i wwi\ v»« » — i I \ I i ■) i vi ini\nv i un 0650 LDX KCOUNT 0660 LDA ATACHR 0670 CMP #'X ; EXIT 0680 BNE CHKD 0690 LDA D301 ; SAVED REG 0700 STA $D301 ; SET IT NORMAL 0710 RTS 0720 CHKD CMP #$44 ; "D" FOR DOUBLE DENSITY 0730 BNE CHKH 0740 STA DENFLG ; SHOW DD 0750 JMP PRCH 0760 CHKH CMP #'H ’ ; $171 SECTORS 0770 BNE CHKQ 0780 LDY #$72 0790 STY SRANGE 0800 LDY #1 0810 STY SRANGE+1 0820 JMP PRCH 0830 CHKQ CMP #’Q ’ ; $5A0 SECTORS 0840 BNE CHKO 0850 LDY #$A1 0860 STY SRANGE 0870 LDY #5 0880 STY SRANGE+1 0890 JMP PRCH 0900 CHKO CMP #’0 ” ; $840 SECTORS 0910 BNE CKDIG 0920 LDY #$41 0930 STY SRANGE 0940 LDY #$0B 0950 STY SRANGE+1 0960 PRCH JSR OUTCH ; PRINT CHAR 0970 JMP KGET 0980 CKDIG CMP #$30 ; LESS THAN 0? 0990 BCC KGET 1000 CMP #$3A ; MORE THAN 9 1010 BCC NEXT CH 1020 CMP #$98 ; RETURN? 1030 BNE KGET 1040 NEXT CH STA INBUF ,x 1050 JSR OUTCH 1060 INC KCOUNT 1070 CMP #$9B ; RETURN? 1080 BNE KGET 1090 LDA KCOUNT 1100 CMP #4 1110 BCC K4 1120 JMP NCOPY 1130 K4 CMP #2 1140 BNE TWODIG 1150 LDA INBUF 1160 SEC 1170 S8C #$30 1180 JMP STNUM 1190 TWODIG LDA INBUF ; ASCII TO HEX 1200 SEC 1210 SBC #$30 1220 ASL A 1230 STA NUMBER 1240 ASL A 1250 ASL A 1260 CLC 1270 ADC NUMBER 1280 STA NUMBER 1290 LDA IN8UF+1 JU w w w w W V 1310 SBC #$30 1320 CLC 1330 ADC NUMBER 1340 STNUM STA NUMBER 1350 STA TNUM 1360 SRCDRV LDX #MES33&255 1370 LDY #MESS3/256 1380 JSR PUTLIN ;S0URCE DRIVE? 1390 K2 JSR GETKEY 1400 LDA ATACHR 1410 CMP #$31 ; LESS THAN 1? 1420 BCC K2 1430 CMP #$35 ; MORE THAN 4? 1440 BCS K2 1450 SEC 1460 SBC #$30 1470 STA SDRIVE 1480 JSR MYOUT 1490 DESDRV LDX #MESS4&255 1500 LDY #MESS4/256 1510 JSR PUTLIN ; DEST IN DRIVE? 1520 K3 JSR GETKEY 1530 LDA ATACHR 1540 CMP #$31 ; LESS THAN 1? 1550 BCC K3 1560 CMP #$35 ; MORE THAN 4? 1570 BCS K3 1580 SEC 1590 SBC #$30 1600 STA DDRIVE 1610 JSR MYOUT 1620 VERIFY LDX #MESS7&255 1630 LDY #MESS7/256 1640 JSR PUTLIN ; VERIFY DISK? 1650 JSR GETKEY 1660 LDA #$50 1670 STA WRTC ; NON VERIFY 1680 LDA ATACHR 1690 CMP #$59 ;Y 1700 BNE VER1 1710 LDA #$57 1720 STA WRTC 1730 VER1 JSR MYOUT 1740 FORMAT LDX #MESS5&255 1750 LDY #MESS5/256 1760 JSR PUTLIN ; FORMAT DISK? 1770 JSR GETKEY 1780 LDA ATACHR 1790 STA FFLAG 1800 JSR MYOUT 1810 MAIN JMP SRCMSG ;G0 WAIT FOR START 1820 RSRC LDA #$40 1830 STA 8USCMD 1840 JSR READ 1850 JMP DSTMSG 1860 WLOOP JSR FMTDSK 1870 WRT LDA #$80 1880 STA 8USCMD 1890 JSR WRITE 1900 DEC TNUM ; NUMBER OF COPIES 1910 LDA TNUM ; IN PASS 1920 CMP #0 1930 BNE DSTMSG 1940 STA FFLAG ; TURN OFF FORMAT FLAG 1950 LDA NUMBER ; GET READY FOR NEXT 1970 JSR TDONE 1980 SRCMSG JSR MSG6 1990 JSR BEGIN 2000 JMP RSRC 2010 DSTMSG JSR MSGS 2020 JSR BEGIN 2030 JMP WLOOP 2040 BEGIN LDA $D01F 2050 CMP #6 2060 BNE BEGIN 2070 RTS 2080 FMTDSK 1 LDA FFLAG 2090 CMP #$59 2100 BNE CONT 2110 LDA #$80 2120 STA DTIMLO 2130 LDA DDRIVE 2140 STA DUNIT 2150 LDA #$21 2160 STA DCOMND 2170 JSR GETRDY 2180 LDA #$40 2190 STA DSTATS 2200 STA DBUFLO 2210 LDA #$80 2220 STA DBUFHI 2230 JSR SIOV 2240 BMI FMTDSK 2250 CONT RT: S 2260 READ LDA SDRIVE 2270 STA DUNIT 2280 LDA #$52 2290 STA DCOMND 2300 LDA SECTLO 2310 STA TEMPI 2320 STA DAUX1 2330 LDA SECTHI 2340 STA TEMP2 2350 STA DAUX2 2360 JSR GETRDY 2370 LDA #TBUFLO 2380 STA DBUFLO 2390 LDA #TBUFHI 2400 STA DBUFHI 2410 CONT 2 J: SR SIOV 2420 JSR INCSD 2430 BCC C0NT2 2440 RTS 2450 INCSD CLC 2460 LDA SECTLO 2470 ADC #1 2480 STA SECTLO 2490 STA DAUX1 2500 LDA SECTHI 2510 ADC #0 2520 STA SECTHI 2530 STA DAUX2 2540 CMP S RANGE +1 2550 BNE CONTI 2560 LDA SECTLO 2570 CMP SRANGE 2580 BNE CONTI 2590 LDA #$01 2600 STA $D301 2610 LDA #$10 ; SEE IF FINISHED ; GO READ MORE SECTOR ; GO WRITE NEXT DISK ; IS START PUSHED ; NO . GOTO BEGIN ; FORMAT FLAG ; "Y" ; NO. GOTO CONT ; TIMEOUT 120 SEC. ; FORMAT ; FOR STATUS ; GO FORMAT DISK ; TRY AGAIN IF BAD £ ; SOURCE DRIVE ; READ COMMAND ; STORE IN TEMP SO WE ; KNOW WHERE TO WRITE ; AND GET READY ; FOR I/O CALL ; SECTOR TO READ ; BUFFER POINTERS ; INCREMENT SECTOR ; AND BUFFER PIONTERS ;8RING IN FIRST ; RAM BANK AND ; SETUP TEST BYTE 2630 SEC ; SET CARRY WHEN DONE 2640 RTS 2650 CONTI J SR GETRDY 2660 RTS 2670 WRITE LDA DDRIVE ; GET READY 2680 STA DUNIT ; TO WRITE 2690 LDA #$50 ; WRITE COMMAND 2700 STA DCOMND 2710 LDA #10 2720 STA $4D ; ATRACT FLAG 2730 STA DTIMLO 2740 LDA TEMPI 2750 STA SECTLO 2760 STA DAUX1 2770 LDA TEMP2 2780 STA SECTH1 2790 STA DAUX2 2800 JSR GETRDY 2810 LDA #TBUFLO 2820 STA DBUFL.0 2830 LDA #T8UFHI 2840 STA DBUFHI 2850 C0NT3 JSR SIOV 2860 JSR INCSD 2870 8CC C0NT3 2880 RTS 2890 GETRDY LDA #$31 2900 STA DDE VIC 2910 LDA 8USCMD 2920 STA DSTATS 2930 LDA DENFLG 2940 8EQ SINGLE 2950 LDA DCOMND 2960 CMP #$21 2970 8EG 8256 - 2980 LDA SECTLO 2990 CMP #4 3000 BCS 8256 3010 LDA SECTHI 3020 BNE 8256 3030 SINGLE LDA #0 3040 STA DBYTHI 3050 LDA #$80 3060 STA D8YTL.0 3070 CLC 3080 LDA DBUFLO 3090 ADC #$80 3100 STA DBUFLO 3110 LDA DBUFHI 3120 ADC #0 3130 STA DBUFHI 3140 JMP RDT 3150 8256 LDA #0 3160 STA D8YTL0 3170 LDA #1 3180 STA DBYTHI 3190 CLC 3200 LDA DBUFHI 3210 ADC #1 3220 STA DBUFHI f 3230 RDT LDA DBUFHI ; DON'T DELETE THIS DUMMY 3240 CMP #$7F ; AT TOP OF BANK? 3250 BCC RDT 4 ; NO 3260 CLC 3270 LDA $D301 .... __ ^ ** *“ i t i f icl r% o r^iN r\ , n 1 ~ 11.^ ~ ^ , no ~ JL 3290 CMP BKTEST ; ANY FIRST BANKS LEFT 3300 BCC RDT3 ;YES 3310 CLC ; SET UP NEXT SET OF BANKS 3320 ADC #$10 3330 STA $D301 3340 CLC 3350 LDA #$20 ; Ml =$20 , M2=$10 , M3=$40 3360 ADC BKTEST 3370 STA BKTEST 3380 BCC RDT5 3390 LDA D301 ;NQ BANKS LEFT 3400 STA $D301 ; RESET TO NORMAL 3410 RDT 4 RTS 3420 RDT3 STA $D301 3430 RDT5 LDA #0 ; RESET BUFFERS FOR 3440 STA DBUFLO ; XTRA BANKS 3450 LDA #$40 3460 STA DBUFHI 3470 CLC 3480 RTS 3490 MESS2 .BYTE "HOW MANY COPIES? (X TO EXIT)" ,$98 3500 MESS3 .BYTE “SOURCE DRIVE? ",$9B 3510 MESS4 . 8 YTE "DESTINATION DRIVE?", $98 3520 MESS7 .BYTE "VERIFY WRITES?(Y OR N)“,$9B 3530 MESS5 .BYTE "FORMAT DESTINATION (Y or N)?”,$9B 3540 MESS6 .BYTE "»INSERT SOURCE DISK, PUSH ST ART }■" , $98 3550 ME3S8 .BYTE "> INSERT DESTINATION DISK, PUSH ST ART , $9B 3560 MSG6 LDX #MESS6&255 3570 LDY #MESS6/256 3580 JMP PUTLIN ; SOURCE DISK 3590 MSGS LDX #MESS8&255 3600 LDY #MESS8/256 3610 JMP PUTLIN ; NEXT DISK 3620 TDONE LDA SECTLO 3630 CMP SRANGE 3640 BNE TRTS 3650 LDA SECTHI 3660 CMP SRANGE+1 3670 BNE TRTS 3680 LDA D301 3690 STA $D301 ; RESTORE MAP REG 3700 PL A ; CLEAN UP STACK 3710 PLA ; BEFORE JMP OUT OF SUBROUTINE 3720 JMP START ; RESTART 3730 TRTS RTS 3740 MYOUT LDA ATACHR 3750 OUTCH JMP (0UTCH1) ;T0 OS TO PRINT CHARACTER 3760 GETKEY JMP ( GETCH ) ; GO TO OS AND GET KEY 3770 INIT LDA $D301 ; B ANK MAP 3780 STA D301 ;SAVE IT FOR EXIT 3790 LDA #$01 ;SET UP MMU FOR FIRST RAM BANK 3800 STA $D301 ; M1&M3=1 , M2=3 3810 LDA #$10 ; SETUP TEST BYTE 3820 STA BKTEST ;FOR 1ST RAM BANKS 3830 LDA #10 3840 STA DTIMLO ;SET DEVICE TIMEOUT 3850 LDA KBDHND+5 ;SET UP FOR CALL TO GET KEYBOARD CHARACTER 3860 STA GETCH+1 ;VIA JMP (GETCH ) 3870 LDA K8DHND+4 3880 CLC 3890 ADC #1 ; FOR SCREWED UP VECTOR TABLE 3900 STA GETCH ; IF WE CROSS PAGE BOUNDARY 3910 BCC SOUTCH 3920 INC GETCH+1 ; ADD 1 TO HIGH BIT 3930 SOUTCH LDA DISPLA+7 ; SAME AS ABOVE TO PRINT CHR. w 3950 ■wr i v 1 LDA Vr W I V/ 1 1 ' /JL If ¥ .J, f DISPLA+6 » v/ i i i v i vi i jl / 3960 CLC 3970 ADC #1 3980 STA OUT CHI 3990 BCC GOON 4000 INC OUT CH1 + 1 4010 GOON RTS 4020 ME3S1 .BYTE ">M1C0PY (C) 1990 NEWELL INDUSTRIES 4030 PUTLIN TXA ; PUT LINE ON SCREEN 4040 LDX #0 4050 STA $0344, X 4060 TYA 4070 STA $0345, X 4080 LDA #9 4090 STA $0342, X 4100 LDA #$FF 4110 STA $0348, X 4120 END JMP CIOV 4130 .END ,$98