10 ;******************************************* 20 ;* DIRCNV2 - CONVERT OLD OS-65D DIRECTORY * 30 ;* READS TRACK 12 SECTORS 1 & 2, CONVERTS * 40 ;* AND WRITES BACK - ALL IN ONE GO * 50 ;* OLD: 64 ENTRIES X 8 BYTES * 60 ;* 6 CHAR NAME, START TK, END TK * 70 ;* NEW: 32 ENTRIES X 16 BYTES * 80 ;* 14 CHAR NAME, START TK, END TK * 90 ;* * 100 ;* USE: GO 7A00 * 110 ;* RESULTS: $7BF0 = FILES FOUND (HEX) * 120 ;* $7BF1 = 00 OK - DIR WRITTEN * 130 ;* FF TOO MANY - NOT * 140 ;* WRITTEN, DISK SAFE * 150 ;* * 160 ;* FOR OS-65D V3.3 * 170 ;* DISK ERROR = ERR # AND NOTHING WRITTEN * 180 ;******************************************* 190 ; 200 OLDHI = $78 ;OLD DIR BUFFER $7800-$79FF 210 OLDHI2 = $79 220 NEWHI = $7C ;NEW DIR BUFFER $7C00-$7DFF 230 NEWHI2 = $7D 240 DIRTK = $12 ;DIRECTORY TRACK 12 (BCD) 250 EMPTY = $23 ;'#' MARKS UNUSED ENTRY 260 PAD = $20 ;SPACE TO PAD NAMES 270 MAXNEW = $20 ;32 ENTRIES IN NEW DIR 280 ; 290 SRCL = $FC ;ZERO PAGE POINTERS 300 SRCH = $FD ;(SAVED AND RESTORED) 310 DSTL = $FE 320 DSTH = $FF 330 ; 340 USED = $7BF0 ;FILES FOUND 350 STAT = $7BF1 ;00=OK FF=OVERFLOW 360 OCNT = $7BF2 ;OLD ENTRIES LEFT 370 WCNT = $7BF3 ;EMPTY SLOTS TO FILL 380 ; 390 * = $7A00 400 ; 410 START LDA SRCL ;SAVE ZERO PAGE 420 PHA 430 LDA SRCH 440 PHA 450 LDA DSTL 460 PHA 470 LDA DSTH 480 PHA 490 ; 500 ;---- READ OLD DIRECTORY ---- 510 LDA #DIRTK 520 LDX #$01 530 LDY #OLDHI 540 JSR RDSEC ;12,1 -> $7800 550 LDA #DIRTK 560 LDX #$02 570 LDY #OLDHI2 580 JSR RDSEC ;12,2 -> $7900 590 ; 600 ;---- CONVERT ---- 610 JSR CONV 620 LDA STAT 630 BNE QUIT ;TOO MANY - DON'T WRITE 640 ; 650 ;---- WRITE NEW DIRECTORY ---- 660 LDA #DIRTK 670 LDX #$01 680 LDY #NEWHI 690 JSR WRSEC ;$7C00 -> 12,1 700 LDA #DIRTK 710 LDX #$02 720 LDY #NEWHI2 730 JSR WRSEC ;$7D00 -> 12,2 740 ; 750 QUIT PLA ;RESTORE ZERO PAGE 760 STA DSTH 770 PLA 780 STA DSTL 790 PLA 800 STA SRCH 810 PLA 820 STA SRCL 830 LDA STAT 840 RTS ;BACK TO DOS 850 ; 860 ;---- CONVERSION ROUTINE ---- 870 CONV LDA #$00 880 STA SRCL 890 STA DSTL 900 STA USED 910 STA STAT 920 LDA #OLDHI 930 STA SRCH 940 LDA #NEWHI 950 STA DSTH 960 LDA #$40 ;64 OLD ENTRIES 970 STA OCNT 980 LOOP LDY #$00 990 LDA (SRCL),Y ;FIRST CHAR OF NAME 1000 CMP #EMPTY 1010 BEQ NEXT ;UNUSED - SKIP IT 1020 LDA USED 1030 CMP #MAXNEW 1040 BCC ROOM 1050 LDA #$FF ;NO ROOM IN NEW DIR 1060 STA STAT 1070 INC USED ;KEEP COUNTING 1080 JMP NEXT 1090 ROOM LDY #$00 1100 CPNM LDA (SRCL),Y ;COPY 6 CHAR NAME 1110 STA (DSTL),Y 1120 INY 1130 CPY #$06 1140 BNE CPNM 1150 LDA #PAD ;PAD TO 14 CHARS 1160 PADL STA (DSTL),Y 1170 INY 1180 CPY #$0E 1190 BNE PADL 1200 LDY #$06 ;START TRACK 1210 LDA (SRCL),Y 1220 LDY #$0E 1230 STA (DSTL),Y 1240 LDY #$07 ;END TRACK 1250 LDA (SRCL),Y 1260 LDY #$0F 1270 STA (DSTL),Y 1280 JSR ADDDST 1290 INC USED 1300 NEXT CLC ;SRC = SRC + 8 1310 LDA SRCL 1320 ADC #$08 1330 STA SRCL 1340 LDA SRCH 1350 ADC #$00 1360 STA SRCH 1370 DEC OCNT 1380 BNE LOOP 1390 LDA STAT ;FILL SPARE SLOTS 1400 BNE CVDONE 1410 SEC 1420 LDA #MAXNEW 1430 SBC USED 1440 BEQ CVDONE 1450 STA WCNT 1460 FILL LDY #$00 1470 LDA #EMPTY 1480 FLN STA (DSTL),Y ;14 X '#' 1490 INY 1500 CPY #$0E 1510 BNE FLN 1520 LDA #$00 ;TRACKS = 00 1530 STA (DSTL),Y 1540 INY 1550 STA (DSTL),Y 1560 JSR ADDDST 1570 DEC WCNT 1580 BNE FILL 1590 CVDONE RTS 1600 ; 1610 ADDDST CLC ;DST = DST + 16 1620 LDA DSTL 1630 ADC #$10 1640 STA DSTL 1650 LDA DSTH 1660 ADC #$00 1670 STA DSTH 1680 RTS 1690 ; 1700 ;******************************************* 1710 ;* DOS ADAPTER - CALLS INTO THE ROM DOS * 1720 ;* SAME SEQUENCE AS THE ROM'S CA AND SA * 1730 ;* COMMANDS. A DISK ERROR JUMPS TO THE DOS * 1740 ;* ERROR HANDLER (ERR #) AND NEVER RETURNS * 1750 ;******************************************* 1760 MEMLO = $FE ;DOS MEMORY POINTER LO 1770 MEMHI = $FF ;DOS MEMORY POINTER HI 1780 DSECT = $265E ;DOS SECTOR NUMBER 1790 DPAGES = $265F ;DOS SECTOR LENGTH (PAGES) 1800 DSEEK = $26BC ;SEEK TO TRACK IN A (BCD) 1810 DHLOAD = $2754 ;LOAD HEAD 1820 DREAD = $2967 ;READ SECTOR TO (MEMLO) 1830 DWRIT = $27E1 ;WRITE SECTOR FROM (MEMLO) 1840 DHUNLD = $2761 ;UNLOAD HEAD 1850 ; 1860 ;RDSEC/WRSEC: A=TRACK (BCD) X=SECTOR 1870 ; Y=BUFFER PAGE, 1 PAGE LONG 1880 RDSEC JSR SETUP 1890 JSR DHLOAD 1900 JSR DREAD 1910 JMP DHUNLD 1920 WRSEC JSR SETUP 1930 LDA #$01 ;1 PAGE 1940 STA DPAGES 1950 JSR DHLOAD 1960 JSR DWRIT 1970 JMP DHUNLD 1980 SETUP STY MEMHI ;BUFFER = Y PAGE 1990 LDY #$00 2000 STY MEMLO 2010 STX DSECT 2020 JMP DSEEK ;SEEK TO TRACK IN A 2030 ; 2040 .END .!SY V SYMBOL VALUE SYMBOL VALUE SYMBOL VALUE SYMBOL VALUE ------ ----- ------ ----- ------ ----- ------ ----- DIRTK $0012 MAXNEW $0020 PAD $0020 EMPTY $0023 OLDHI $0078 OLDHI2 $0079 NEWHI $007C NEWHI2 $007D SRCL $00FC SRCH $00FD DSTL $00FE MEMLO $00FE DSTH $00FF MEMHI $00FF DSECT $265E DPAGES $265F START $7A00 QUIT $7A38 CONV $7A48 LOOP $7A61 ROOM $7A7B CPNM $7A7D PADL $7A88 NEXT $7AA5 FILL $7AC7 FLN $7ACB CVDONE $7AE1 ADDDST $7AE2 RDSEC $7AF0 WRSEC $7AFC SETUP $7B0D USED $7BF0 STAT $7BF1 OCNT $7BF2 WCNT $7BF3 DSEEK $E435 DHLOAD $E4CD DHUNLD $E4DA DWRIT $E55A DREAD $F024