10 REM PC-DOS V1.28 20 REM door roland leurs 30 40 NONMI;ESCAPE=OFF 50 PASS 2 ; GOSUB a 60 PASS 1 ; GOSUB a 70 ESCAPE=ON;EXIT 80 90a 100 ASM-B 110 .CODE #9000 120 .RAM #9000 130 .OPTION #40 140 .TABLE #8200 150 160 :ZENDBYTE = #FFC8 170 :LEESBYTE = #FFC5 180 :OSBYTE = #FFC2 190 200 \ INITIALISATIE PC-DOS 210 :PCDOS LDA @<INTERPRET \ ZET COM VECTOR 220 STA #206 230 LDA @>INTERPRET 240 STA #207 250 LDX @#0F 260 :PCDOS1 LDA DOSVECTAB,X 270 STA #20C,X 280 DEX 290 BPL PCDOS1;LDX @0;STX #EF 300 JSR ENDCOM \ RESET SEMAFOOR 310 :PCVERSIE JSR #F7D1 \ DRUK TEXT AF 320 .AS "PC-DOS",#0A,#0D,#EA 330 RTS 340 350 :INTERPRET LDX @#FF 360 CLD 370 :INTER1 LDY @#00 380 JSR #F876 390 DEY 400 :INTER2 INY 410 INX 420 :INTER3 LDA COMTAB,X 430 BMI INTER5 440 CMP #100,Y 450 BEQ INTER2 460 DEX 470 :INTER4 INX 480 LDA COMTAB,X 490 BPL INTER4 500 INX 510 LDA #100,Y 520 CMP @CH"." 530 BNE INTER1 540 INY 550 DEX 560 BCS INTER3 570 :INTER5 STA #9B 580 LDA COMTAB+1,X 590 STA #9A 600 :TESTSEM LDA @11 \ WACHT OP TOESTEMMING VOOR PC-COMMUNICATIE 610 JSR OSBYTE 620 BCC TESTSEM 630 LDX @#00 640 JMP (#9A) 650 660 :COMTAB 670 .AS "CAT" ; .DB CAT 680 .AS "CD" ; .DB CDIR 690 .AS "COMMAND" ; .DB SHELL 700 .AS "COPY" ; .DB SHELL 710 .AS "DELETE" ; .DB DELETE 720 .AS "DIR" ; .DB SHELL 730 .AS "DISKCOPY" ; .DB SHELL 740 .AS "DRIVE" ; .DB DRIVE 750 .AS "ERASE" ; .DB SHELL 760 .AS "EXEC" ; .DB EXEC 770 .AS "FIND" ; .DB FILEFIND 780 .AS "FORMAT" ; .DB SHELL 790 .AS "HELP" ; .DB HELP 800 .AS "HIDE" ; .DB HIDE 810 .AS "INFO" ; .DB INFO 820 .AS "LOAD" ; .DB LOAD 830 .AS "LABEL" ; .DB SHELL 840 .AS "LOCK" ; .DB LOCK 845 .AS "LIB" ; .DB LIB 850 .AS "MD" ; .DB MDIR 853 .AS "MON" ; .DB MON 859 .AS "NOMON" ; .DB NOMON 860 .AS "PC" ; .DB MSDOS 865 .AS "RUN" ; .DB RUN 870 .AS "RD" ; .DB RDIR 880 .AS "RENAME" ; .DB SHELL 888 .AS "RESET" ; .DB RESET 900 .AS "SAVE" ; .DB SAVE 910 .AS "SPOOL" ; .DB SPOOL 920 .AS "UNHIDE" ; .DB UNHIDE 930 .AS "UNLOCK" ; .DB UNLOCK 940 .AS "VOL" ; .DB SHELL 950 .AS "XCOPY" ; .DB SHELL 960 .DB NIETS \ ERROR 970 980 :COMMAND PHA \ GEEF EEN COMMAND NAAR DE PC 990 LDA @#00 1000 JSR ZENDBYTE 1010 PLA 1020 JMP ZENDBYTE 1030 1040 :FILENAAM JSR FNAAM \ ZET NAAM OP #140 1050 LDX @#00 1060 :FILENAAM1 LDA #140,X 1070 CMP @#0D 1080 BNE FILENAAM2 1090 LDA @#00 1100 :FILENAAM2 JSR ZENDBYTE 1110 INX 1120 CMP @#00 1130 BNE FILENAAM1 1140 RTS 1150 1160 :NIETS LDY @#00 \ ZET POINTER NAAR BEGIN VAN COMMAND 1170 :RUN JSR ZOEK;LDA #710;BEQ RUN3;LDX @0 1172 :RUN1 LDA #140,X;INX;CMP @#0D;BNE RUN1;LDY @0;DEX 1174 :RUN2 LDA RUNEXT,Y;STA #140,X;INX;INY;CMP @#0D;BNE RUN2 1176 :RUN3 LDA @#00;STA #9E;JSR SAVE-5 1180 LDA @10 \ RESET SEMAFOOR 1190 JSR OSBYTE 1200 JMP (#A1) \ SPRING NAAR EXECUTIE ADRES 1205 :RUNEXT .AS ".RUN",#0D 1210 1220 :CAT LDA #100,Y;CMP @#0D;BEQ CAT1;CMP @#20;BNE CAT2;INY;BNE CAT 1230 :CAT1 STA #143;LDA @CH"*";STA #140;STA #142;LDA@CH".";STA #141 1240 JMP CAT2+3 1250 :CAT2 JSR FNAAM;JSR ZOEK+3;LDA#710;BEQ CAT_RSEM;JMP ERROR 1255 :CAT_RSEM LDA @10;JSR OSBYTE 1260 LDA#711;AND@#08;BEQ PRINTCAT;JSR #F7D1 1270 .AS "Inhoud van volume : ",#EA 1280 :PRINTCAT LDA @10;JSR OSBYTE 1285 LDA @0;STA #07;LDA#711;AND @#02;BNE NEXTCAT;LDA #711 1290 AND@#10;BEQ PRINTCAT1;LDA @CH"[";JSR #CA4C 1300 :PRINTCAT1 LDX @0 1310 :PRINTCAT2 LDA #71A,X;CMP @#0D;BEQ PRINTCAT3;JSR #CA4C;INX;BNE PRINTCAT2 1320 :PRINTCAT3 LDA#711;AND @#10;BEQ PRINTCAT4;LDA @CH"]";JSR #CA4C 1330 :PRINTCAT4 LDA @#20;JSR #CA4C;LDA #07;CMP @16;BNE PRINTCAT4 1340 LDA #711;AND @#08;BEQ NEXTCAT;JSR #FFED;JSR #FFED 1350 :NEXTCAT LDA@11;JSR OSBYTE;BCC NEXTCAT;JSR ZOEKNEXT;LDA #710;BEQ PRINTCAT 1360 LDA @10;JSR OSBYTE;JMP #FFED \EINDE ROUTINE 1370 1380 :ERROR CLC \ TEL 47 OP BIJ PC ERRORCODE 1390 ADC @47 1400 TAX \ ZET ATOM ERRORCODE IN X REG 1410 LDA @#0A \ RESET SEMAFOOR 1420 JSR OSBYTE 1430 LDA @#0C \ GENEREER FOUTMELDING MET OSBYTE 12 1440 JMP OSBYTE 1450 :ENDCOM PHA;LDA @10 \ RESET SEMAFOOR 1460 JSR OSBYTE;PLA;CLC;RTS 1470 1480 :CDIR LDA #100,Y;CMP @#0D;BEQ CDIR0;CMP @#20;BNE CDIR1;INY;BNE CDIR 1490 :CDIR0 STA #140;BEQ CDIR1+3 1500 :CDIR1 JSR FNAAM 1510 LDA @#0E \ GEEF CHDIR COMMAND AAN PC 1520 JSR COMMAND 1530 JSR FILENAAM+3 1540 JSR LEESBYTE \ LEES RESULTAAT 1550 BEQ CDIR2 1560 JMP ERROR 1570 :CDIR2 JSR LEESBYTE \ TEST OF ER NOG TEKST VOLGT 1580 BEQ CDIR6 \ SPRING ALS ER GEEN TEKST MEER VOLGT 1590 JSR LEESBYTE \ LEES DRIVE CODE 1600 CLC \ MAAK ER EEN LETTER VAN 1610 ADC @CH"@" 1620 LDY @#00 \ RESET POINTER 1630 STA #140,Y \ BERG DRIVE LETTER OP IN STRING BUFFER 1640 INY \ VERHOOG POINTER 1650 LDA @CH":" \ IDEM VOOR :\ 1660 STA #140,Y 1670 INY 1680 LDA @CH"\" 1690 STA #140,Y 1700 INY 1710 :CDIR3 JSR LEESBYTE \ LEES KARAKTER VAN ACTUELE DIRECTORY 1720 BEQ CDIR4 1730 STA #140,Y 1740 INY 1750 JMP CDIR3 1760 :CDIR4 LDA @#0D \ SLUIT STRING AF 1770 STA #140,Y 1780 JSR ENDCOM \ WIS SEMAFOOR 1790 LDY @#00 1800 :CDIR5 LDA #140,Y \ DRUK DIRECTORY AF 1810 INY 1820 JSR #FFF4 1830 CMP @#0D 1840 BNE CDIR5 1850 :CDIR6 JSR ENDCOM \ WIS SEMAFOOR 1860 JMP #FFED \ GEEF CR/LF EN EINDE ROUTINE 1870 1880 :RDIR LDA @#0F \ GEEF COMMAND AAN PC 1890 JSR COMMAND 1900 JSR FILENAAM \ GEEF DIRECTORY AAN PC 1910 JSR LEESBYTE \ LEES RESULTAAT 1920 BEQ RDIR2 \ SPRING INDIEN GEEN FOUTMELDING 1930 JMP ERROR 1940 :RDIR2 JSR LEESBYTE \ READ DUMMY 1950 JMP ENDCOM \ EINDE ROUTINE 1960 1970 :MDIR LDA @#10 \ GEEF COMMAND AAN PC 1980 JSR COMMAND 1990 JSR FILENAAM \ GEEF DIRECTORY AAN PC 2000 JSR LEESBYTE \ LEES RESULTAAT 2010 BEQ RDIR2 \ SPRING INDIEN GEEN FOUTMELDING 2020 JMP ERROR 2028 2030 :DELETE JSR FNAAM;LDX @#00 2031 LDA #EF;BEQ DELETE4 2032 :DELETE1 LDA #140,X;STA #100,X;INX;CMP @#0D;BNE DELETE1 2034 JSR ZOEK+3;LDA @#03;STA #98;JSR INFO+5 2036 :DELETE2 JSR #F7D1 2038 .BY #0A,#0D 2040 .AS "Deze bestanden verwijderen ? ",#EA 2042 JSR #FFE6;ORA @#20;CMP @CH"j";BNE DELETE5;LDX @#00 2044 :DELETE3 LDA #100,X;STA #140,X;INX;CMP @#0D;BNE DELETE3 2046 :DELETE4 LDA @#11 2050 JSR COMMAND 2060 JSR FILENAAM+3 \ GEEF FILESPEC AAN PC 2070 JSR LEESBYTE \ LEES RESULTAAT 2080 BEQ DELETE5 2090 JMP ERROR 2100 :DELETE5 JSR #FFED;JMP ENDCOM 2110 2120 :LOCK JSR FNAAM;LDA @#12 2130 JSR COMMAND 2140 JSR FILENAAM+3 \ GEEF FILESPEC AAN PC 2150 JSR LEESBYTE \ LEES RESULTAAT 2160 BEQ HIDE1 2170 JMP ERROR 2180 2190 :UNLOCK JSR FNAAM;LDA @#13 2200 JSR COMMAND 2210 JSR FILENAAM+3 \ GEEF FILESPEC AAN PC 2220 JSR LEESBYTE \ LEES RESULTAAT 2230 BEQ HIDE1 2240 JMP ERROR 2250 2260 :DRIVE LDA #100,Y \ LEES EERSTE KARAKTER NIET ZIJNDE SPATIE 2270 CMP @CH" " 2280 BNE DRIVE4 2290 INY 2300 BNE DRIVE 2350 :DRIVE3 LDA @15 2360 JMP ERROR 2370 :DRIVE4 PHA;PHA;LDA @#0E;JSR COMMAND;PLA;JSR ZENDBYTE 2372 LDA @CH":";JSR ZENDBYTE;LDA @#00;JSR ZENDBYTE;JSR LEESBYTE 2374 BNE DRIVE3 2376 :DRIVE1 JSR LEESBYTE;BNE DRIVE1 2380 LDA @#14 \ GEEF COMMAND AAN PC 2390 JSR COMMAND 2400 SEC \ ZET CARRY VOOR AFTREKKEN 2410 PLA 2420 SBC @CH"A" 2430 JSR ZENDBYTE 2440 :DRIVE5 JMP ENDCOM 2450 2460 :HIDE JSR FNAAM;LDA @#16 2470 JSR COMMAND 2480 JSR FILENAAM+3 \ GEEF FILESPEC AAN PC 2490 JSR LEESBYTE \ LEES RESULTAAT 2500 BNE FILE_ERR 2502 :HIDE1 LDA #EF;BEQ HIDE2;JSR ZOEK+3;JMP INFO+3 2504 :HIDE2 JMP ENDCOM 2510 :FILE_ERR JMP ERROR 2520 2530 :UNHIDE JSR FNAAM;LDA @#17 2540 JSR COMMAND 2550 JSR FILENAAM+3 \ GEEF FILESPEC AAN PC 2560 JSR LEESBYTE \ LEES RESULTAAT 2570 BEQ HIDE1 2580 JMP ERROR 2590 2600 :MSDOS LDA #100,Y \ LEES EERSTE KARAKTER <> SPATIE 2610 INY;CMP @CH" ";BEQ MSDOS 2620 CMP @#0D;BEQ MSDOS1;DEY;TYA;TAX;JMP SHELL+2 \ VOER SHELL COMMAND UIT 2630 :MSDOS1 LDA @#15;JSR COMMAND 2640 JMP ENDCOM \ EINDE COMMAND 2650 JMP ENDCOM \ EINDE ROUTINE 2660 2670 :FNAAM LDX @#00 \ RESET POINTER 2680 :FNAAM1 LDA #100,Y \ ZOEK EERSTE KARAKTER DAT GEEN SPATIE IS 2690 CMP @#0D 2700 BEQ NAAMERROR 2710 CMP @#20 2720 BNE FNAAM2 2730 INY 2740 BNE FNAAM1 2750 :FNAAM2 CMP @CH"""" \ TEST OP QUOTE 2760 BEQ BUFFER3 \ SPRING INDIEN FILENAAM TUSSEN QUOTES 2770 JMP BUFFER1 \ GEDWONGEN SPRONG 2780 2790 :NAAMERROR LDA @71 2800 JMP ERROR 2810 2820 :BUFFER1 LDA #100,Y \ LEES NAAM UIT INVOERBUFFER 2830 CMP @CH" " \ TEST OP EINDE FILENAAM 2840 BEQ BUFFER2 \ SPRING BIJ EINDE 2850 CMP @#0D 2860 BEQ BUFFER2 2870 STA #140,X \ BERG KARAKTER OP IN STRINGBUFFER 2880 INX \ VERHOOG POINTERS 2890 INY 2900 BNE BUFFER1 2910 :BUFFER2 LDA @#0D \ SLUIT STRING AF 2920 STA #140,X 2930 LDA @#40 \ ZET ADRES FILENAAM IN #9A/#9B 2940 STA #9A 2950 LDA @#01 2960 STA #9B 2970 RTS \ EINDE ROUTINE 2980 2990 :BUFFER3 INY \ VERHOOG GEHEUGEN INDEX 3000 LDA #100,Y \ LEES KARAKTER UIT INVOERBUFFER 3010 CMP @#0D \ TEST OP EINDE 3020 BEQ NAAMERROR \ SPRING BIJ EINDE 3030 CMP @CH"""" \ TEST OP " 3040 BNE BUFFER4 3050 INY \ VERHOOG POINTER 3060 LDA #100,Y \ LEES VOLGEND TEKEN 3070 CMP @CH"""" \ TEST NOGMAALS OP " 3080 BNE BUFFER2 \ SPRING NAAR EINDE ROUTINE BIJ 1 " 3090 :BUFFER4 STA #140,X \ BERG OP IN STRINGBUFFER 3100 INX \ VERHOOG POINTERS 3110 INY 3120 BNE BUFFER3+1 \ GA VOLGEND KARAKTER AFHANDELEN 3130 3140 :ADRES LDA @#00 \ MAAK ACCU 0 3150 STA #00,X \ MAAK ZERO PAGE ADRESSEN 0 3160 STA #01,X 3170 STA #02,X 3180 JSR #F876 \ VERWIJDER EVENTUELE SPATIES 3190 :ADRES1 LDA #100,Y \ LEES KARAKTER VAN ADRES 3200 CMP @#30 \ VERGELIJK MET '0' 3210 BCC ADRES_ERR \ SPRING INDIEN KLEINER NAAR EINDE 3220 CMP @#3A \ VERGELIJK MET '9+1' 3230 BCC ADRES2 \ INDIEN KLEINER DAN GETAL TUSSEN 0 EN 9 3240 SBC @#07 \ MAAK HEXADECIMALE LETTER 3250 BCC ADRES_ERR \ SPRING INDIEN KLEINER DAN 'A' 3260 CMP @#40 \ TEST OP 'F' 3270 BCS ADRES_ERR \ SPRING INDIEN GROTER 3280 :ADRES2 ASL A \ SCHUIF VIER MAAL LINKS 3290 ASL A 3300 ASL A 3310 ASL A 3320 STY #02,X \ BERG GEHEUGEN INDEX OP 3330 LDY @#04 \ LAADT Y REGISTER VOOR 4 MAAL SCHUIVEN 3340 :ADRES3 ASL A \ SCHUIF LINKER BIT IN CARRY 3350 ROL #00,X \ SCHUIF DOOR ZEROPAGE 3360 ROL #01,X 3370 DEY \ VERLAAG TELLER 3380 BNE ADRES3 3390 LDY #02,X \ HERSTEL GEHEUGEN INDEX 3400 INY \ VERHOOG GEHEUGEN INDEX 3410 BNE ADRES1 \ GEDWONGEN SPRON# 3420 :ADRES_ERR LDA #02,X \ LAADT ACCU MET RESULTAAT (0=ERROR) 3430 RTS \ EINDE ROUTINE 3440 3450 :LOAD JSR FNAAM \ ZET FILENAAM IN STRINGBUFFER #140 3460 LDX @#9C \ LAADT ADRES VAN LOAD ADRES 3470 JSR ADRES \ LEES ADRES UIT INVOERBUFFER 3480 BCS NO_ADRES 3490 LDX @#9A \ ZET GEHEUGEN INDEX 3500 JMP (#020C) \ SPRING NAAR LOAD VECTOR 3510 3520 :SAVE JSR FNAAM \ LEES EERSTE KARAKTER VAN FILENAAM 3530 LDX @#9C \ ZET START ADRES IN #9C/#9D 3540 JSR ADRES 3550 BEQ NO_ADRES \ SPRING INDIEN GEEN START ADRES 3560 LDX @#A2 \ ZET EIND ADRES IN #A2/A3 3570 JSR ADRES 3580 BEQ NO_ADRES \ SPRING INDIEN GEEN EIND ADRES 3590 LDX @#9E \ ZET EXEC ADRES IN #9E/#9F 3600 JSR ADRES 3610 BNE SAVE1 \ SPRING INDIEN EXEC ADRES GEVONDEN 3620 LDA #9C \ ZET START ADRES ALS EXEC ADRES 3630 STA #9E 3640 LDA #9D 3650 STA #9F 3660 :SAVE1 LDX @#9A \ ZET GEHEUGEN INDEX 3670 JMP (#020E) \ SPRING NAAR SAVE VECTOR 3680 3690 :NO_ADRES LDA @88 3700 JMP ERROR 3710 3720 :HELP JSR ENDCOM \ WIS SEMAFOOR 3750 JSR #F7D1 \ DRUK HELP TEKST AF 3755 .AS "PC-DOS - internal version v1.28",#0A,#0D 3760 .BY #0A 3770 .AS "*CAT [filespec] *COMMAND",#0A,#0D 3780 .AS "*CD [path] *COPY",#0A,#0D 3790 .AS "*DELETE <filespec> *DIR",#0A,#0D 3800 .AS "*DRIVE <drive> *DISKCOPY",#0A,#0D 3810 .AS "*FIND <filespec> *ERASE",#0A,#0D 3820 .AS "*HIDE <filespec> *FORMAT",#0A,#0D 3830 .AS "*INFO <filespec> *LABEL",#0A,#0D 3840 .AS "*LOAD <file> [adres] *RENAME",#0A,#0D 3850 .AS "*LOCK <filespec> *VOL",#0A,#0D 3860 .AS "*MD <path> *XCOPY",#0A,#0D 3863 .AS "*MON",#0A,#0D 3869 .AS "*NOMON",#0A,#0D 3870 .AS "*PC [msdos commando]",#0A,#0D 3880 .AS "*RD <path>",#0A,#0D 3890 .AS "*RUN <file> [adres] {msdos commando's hebben",#0A,#0D 3900 .AS "*SAVE <file><ba><ea>[ea] de normale syntax}",#0A,#0D 3910 .AS "*UNHIDE <filespec>",#0A,#0D 3920 .AS "*UNLOCK <filespec>",#0A,#0D 3930 .BY #0A 3940 .AS "FILESPEC = [DRIVE][PATH][FILENAAM.EXT]",#0A,#0D 3950 .AS "[...] = gegeven niet verplicht",#0A,#0D 3960 .AS "<...> = gegeven is wel verplicht",#0A,#0D 3980 .BY #EA 3990 RTS 4000 4010 :VECNAAM LDY @#00 \ RESET INDEX 4020 :VECNAAM1 LDA (#9A),Y \ LEES KARAKTER VAN FILENAAM 4030 STA #140,Y;CMP @#0D \ TEST OP EINDE 4040 BEQ VECNAAM2 \ SPRING INDIEN EINDE FILENAAM 4050 JSR ZENDBYTE \ ANDERS STUUR KARAKTER NAAR PC 4060 INY \ VERHOOG INDEX 4070 BNE VECNAAM1 \ GEDWONGEN SPRONG 4080 :VECNAAM2 LDA @#00 \ SLUIT FILENAAM AF 4090 JSR ZENDBYTE 4100 JSR LEESBYTE \ LEES RESULTAAT 4110 BEQ VECNAAM3 4120 JMP FILE_ERR \ SPRING NAAR FOUTROUTINE 4130 :VECNAAM3 RTS 4140 4150 :LOADVEC LDA @#0B \ GEEF LOAD COMMAND AAN PC 4160 JSR COMMAND 4170 LDA #00,X \ KOPIEER DATA NAAR VASTE ZP-ADRESSEN 4180 STA #9A 4190 LDA #01,X 4200 STA #9B 4210 LDA #02,X 4220 STA #9C 4230 LDA #03,X 4240 STA #9D 4250 JSR VECNAAM \ STUUR FILENAAM NAAR PC 4260 JSR LEESBYTE \ LEES BLOKLENGTE 4270 PHA \ ZET OP STACK 4280 LDY @#00 \ RESET TELLER 4290 :LOADHEADER JSR LEESBYTE \ LEES 16 BYTES FILEHEADER 4300 STA #9F,Y 4310 INY 4320 CPY @#10 4330 BNE LOADHEADER 4340 LDA #04,X \ TEST OF LOAD ADRES GEGEVEN WAS 4350 BNE LOADVEC2 \ SPRING INDIEN LOAD ADRES GEGEVEN 4360 LDA #9F \ ANDERS GEBRUIK ADRES UIT FILE HEADER 4370 STA #9C 4380 LDA #A0 4390 STA #9D 4400 :LOADVEC2 SEC \ ZET CARRY VOOR AFTREKKEN 4410 PLA \ HAAL BLOKLENGTE TERUG 4420 SBC @#10 \ TREK ER DE HEADERLENGTE VAN AF 4430 LDY @#00 \ RESET INDEX 4440 :LOADVEC3 TAX \ AANTAL TE LEZEN BYTES NAAR TELLER 4450 :LOADVEC4 JSR LEESBYTE \ LEES DATA BYTE 4460 STA (#9C),Y \ BERG OP IN GEHEUGEN 4470 INC #9C 4480 BNE LOADVEC5 4490 INC #9D 4500 :LOADVEC5 DEX \ VERLAAG TELLER 4510 BNE LOADVEC4 \ SPRING INDIEN NOG BYTES VOLGEND 4520 JSR LEESBYTE \ LEES LENGTE VAN VOLGEND BLOK 4530 BEQ LOADEIND \ SPRING INDIEN GEEN BLOK MEER VOLGT 4540 JMP LOADVEC3 \ GEDWONGEN SPRONG 4550 :LOADEIND JSR MESSAGE;JMP ENDCOM 4560 4570 :SAVEVEC LDA @#0C \ GEEF COMMAND AAN PC 4580 JSR COMMAND 4590 LDY @#00 \ RESET INDEX 4600 :SAVEVEC1 LDA #00,X \ LEES SAVE PARAMETERS 4610 STA #9A,Y \ ZET IN WERKRUIMTE 4620 INX 4630 INY 4640 CPY @#0A \ TEST OF ALLES GEHAD 4650 BNE SAVEVEC1 \ NEE, DAN VOLGENDE 4660 JSR VECNAAM \ STUUR FILENAAM NAAR PC 4670 :SAVEHEADER LDY @#00 \ RESET TELLER 4680 LDA @16 \ STUUR BLOKLENGTE NAAR PC 4690 JSR ZENDBYTE 4700 :SAVEHEAD1 LDA #9C,Y \ LEES HEADER DATA 4710 JSR ZENDBYTE 4720 INY \ VERHOOG TELLER 4730 CPY @4 \ ALLES GEHAD? 4740 BNE SAVEHEAD1 \ NEE, DAN VOLGENDE 4750 JSR FILENGTE \ BEREKEN FILE LENGTE 4760 LDA #A0 \ STUUR NAAR PC 4770 JSR ZENDBYTE 4780 LDA #A1 4790 JSR ZENDBYTE 4800 LDA @#00 \ REST VAN HEADER MET 0 VULLEN 4810 INY 4820 :SAVEHEAD2 INY 4830 JSR ZENDBYTE 4840 CPY @15 4850 BNE SAVEHEAD2 4860 JSR LEESBYTE \ LEES BLOKLENGTE GESCHREVEN BLOK (CONTROLE) 4870 CMP @16 4880 BEQ SAVEBLOK \ SPRING INDIEN ALLES OK 4890 :DISKVOL LDA @#00;JSR ZENDBYTE;LDA @#00 4900 JMP ERROR 4910 :SAVEBLOK LDY @#00 \ RESET INDEX 4920 :SAVEBLOK1 LDA @#FF \ ZEND BLOKLENGTE NAAR PC 4930 JSR ZENDBYTE 4940 TAX \ BLOKLENGTE NAAR TELLER 4950 :SAVEBLOK2 LDA (#9C),Y \ LEES DATA 4960 JSR ZENDBYTE \ STUUR NAAR PC 4970 INC #9C \ VERHOOG DATA ADRES 4980 BNE SAVEBLOK3 4990 INC #9D 5000 :SAVEBLOK3 DEX \ VERLAAG TELLER 5010 BNE SAVEBLOK2 \ SPRING INDIEN GEEN GEHEEL BLOK VERZONDEN 5020 JSR LEESBYTE \ LEES CONTROLE BYTE 5030 CMP @#FF \ CORRECT AANTAL GESCHREVEN BYTES ? 5040 BNE DISKVOL \ SPRING BIJ ERROR 5050 JSR FILENGTE \ BEREKEN AANTAL NOG TE VERZENDEN BYTES 5060 CMP @#FF 5070 BNE SAVEBLOK \ SPRING INDIEN ER NOG EEN BLOK VOLGT 5080 LDA @#00 \ ZEND AANDUIDING VOOR LAATSTE BLOK 5090 JSR ZENDBYTE 5100 JSR MESSAGE;JMP ENDCOM \ EINDE ROUTINE 5110 5120 :FILENGTE SEC \ ZET CARRY VOOR AFTREKKEN 5130 LDA #A2 \ BEREKEN EIND - BEGIN 5140 SBC #9C 5150 STA #A0 \ ZET RESULTAAT IN #A0/#A1 5160 LDA #A3 5170 SBC #9D 5180 STA #A1 5190 RTS \ EINDE ROUTINE 5200 5210 :INFO JSR ZOEK;LDA @#00;STA #98;LDX #99;LDA #710;BEQ INFO5;JMP ERROR 5212 :INFO5 LDA #140,X;CMP @CH"\";BEQ INFO3;CMP @CH":";BEQ INFO3 5214 DEX;BPL INFO5 5216 :INFO3 INX;STX #99;JSR INFOKOP 5225 :INFO1 LDA #711;AND @#10;BNE NEXTINFO;LDA #711;AND @#08 5230 BNE NEXTINFO;LDA #711;AND #98;BNE NEXTINFO;LDX #99;LDY @0 5232 :INFO4 LDA #71A,Y;STA #140,X;INX;INY;CMP @#0D;BNE INFO4;JSR INFOLINE 5240 :NEXTINFO JSR ZOEKNEXT;LDA #710;BNE INFO_END;JMP INFO1 5250 :INFO_END JMP ENDCOM 5260 6000 :MESSAGE LDA #EF;BEQ NOMESS 6010 JSR ZOEK+3;LDA #A1;PHA;LDA #A2;PHA;LDA @10;JSR OSBYTE;JSR INFOLINE 6015 :MESS1 LDA@11;JSR OSBYTE;BCC MESS1;PLA;STA #A2;PLA;STA #A1 6020 :NOMESS RTS 6030 6040 :NOMON LDA @#00;STA #EF;JMP ENDCOM 6050 6060 :MON LDA @#FF;BNE NOMON+2 6070 6100 :RESET LDA @#5B;JSR COMMAND;LDA @#5C;JSR ZENDBYTE;LDA @#02;JSR ZENDBYTE 6110 LDA @#5B;JSR COMMAND;LDA @#5D;JMP ZENDBYTE \ Geeft softreset type #2 6120 6570 :INFO0 CMP @#0A \ ALS GETAL < 10 6580 BPL INFO9 6590 LDA @CH"0" \ DAN EERST '0' AFDRUKKEN 6600 JSR #FFF4 6610 :INFO9 RTS 6620 6630 :SHELL LDX @#00 \ RESET POINTER 6640 LDA @59;JSR COMMAND \ GEEF SHELL COMMAND 6650 :SHELL1 LDA #100,X;CMP @#0D;BEQ SHELL2 \ LEES KARAKTER 6660 JSR ZENDBYTE;INX;BNE SHELL1 \ ALS NIET #0D DAN NAAR PC STUREN 6670 :SHELL2 LDA @#00;JSR ZENDBYTE;JMP ENDCOM 6680 6690 :ZOEK JSR FNAAM;LDA @60;JSR COMMAND;LDX @#00 6700 :ZOEK2 LDA #140,X;INX;CMP @#0D;BEQ ZOEK3;JSR ZENDBYTE;JMP ZOEK2 6710 :ZOEK3 LDA @#00;JSR ZENDBYTE;STX #99 6720 :ZOEK4 JSR LEESBYTE;STA #710;CLC;BNE ZOEK8;LDX @0 6730 :ZOEK5 JSR LEESBYTE;STA #711,X;INX;CPX @22;BNE ZOEK5;LDX @10 6740 :ZOEK6 LDA #710,X;BEQ ZOEK7;INX;BNE ZOEK6 6750 :ZOEK7 LDA @#0D;STA #710,X;SEC 6760 :ZOEK8 RTS 6770 :ZOEKNEXT LDA @61;JSR COMMAND;JMP ZOEK4 6772 6774 :FILEFIND LDA #100,Y;CMP @#0D;BEQ FILEFIND1 6776 CMP @CH" ";BEQ FILEFIND2;INY;BNE FILEFIND 6778 :FILEFIND1 JSR ZOEKNEXT;JMP FILEFIND3 6780 :FILEFIND2 JSR ZOEK 6782 :FILEFIND3 LDX @22 6784 :FILEFIND4 LDA #710,X;STA #140,X;DEX;BPL FILEFIND4;JMP ENDCOM 6786 6790 \ *************************************************************** 6800 \ RANDOM ACCESS FILE SUPPORT ROUTINES 6810 \ *************************************************************** 6820 6830 :RAF_SEM PHA;LDA @#0B;JSR OSBYTE;BCC P-3;PLA;JMP COMMAND 6840 6850 :RAF_OPEN PHP;LDA @63;JSR RAF_SEM 6860 LDA #00,X;STA #A0;LDA #01,X;STA #A1;LDY @#00 6870 :RAF1 LDA (#A0),Y;CMP @#0D;BEQ RAF2;JSR ZENDBYTE;INY;BNE RAF1 6880 :RAF2 LDA @#00;JSR ZENDBYTE;PLP;BCS RAF3;LDA @#02 6890 :RAF3 JSR ZENDBYTE;JSR LEESBYTE;JMP ENDCOM 6900 6910 :RAF_SLUIT PHA;LDA @64;JSR RAF_SEM;TYA;JSR ZENDBYTE;PLA;JMP ENDCOM 6920 6930 :RAF_SCHRIJF PHA;PHA;LDA @65;JSR RAF_SEM;TYA;JSR ZENDBYTE;PLA 6940 JSR ZENDBYTE;JSR LEESBYTE;CMP @1;BEQ RAF4;JMP RAF_ERROR 6950 :RAF4 PLA;JMP ENDCOM 6960 6970 :RAF_LEES LDA @66;JSR RAF_SEM;TYA;JSR ZENDBYTE 6980 JSR LEESBYTE;CMP @1;BEQ RAF5;CMP @0;BEQ RAF_EOF 6990 PHA;JSR LEESBYTE;PLA;JMP RAF_ERROR 7000 :RAF5 JSR LEESBYTE;JMP ENDCOM 7010 :RAF_EOF JSR LEESBYTE;JSR ENDCOM;LDA @#FF;SEC;RTS 7020 7030 :RAF_PTR PHA;LSR A;LDA @67;BCC RAF6;ADC @#00 \ A WORDT HIER 68 VOOR EXT ! 7040 :RAF6 JSR RAF_SEM;CMP @68;BEQ RAF_EXT 7050 TYA;JSR ZENDBYTE;PHA;LDY @#03;LDA @#00 7060 :RAF7 JSR ZENDBYTE;DEY;BPL RAF7;LDA @#01;JSR ZENDBYTE 7070 :RAF8 JSR LEESBYTE;BEQ RAF9;JMP RAF_ERROR 7080 :RAF9 SEC;JSR LEESBYTE;SBC @#10;STA #00,X;JSR LEESBYTE;SBC @#00 7090 STA #01,X;JSR LEESBYTE;SBC @#00;STA #02,X;JSR LEESBYTE;SBC @#00 7100 STA #03,X;PLA;TAY;PLA;JMP ENDCOM 7110 7120 :RAF_EXT TYA;JSR ZENDBYTE;PHA;JMP RAF8 7130 7140 :RAF_STORE PHA;LDA @67;JSR RAF_SEM;TYA;JSR ZENDBYTE;PHA;CLC 7150 LDA #00,X;ADC @#10;JSR ZENDBYTE;LDA #01,X;ADC @#00;JSR ZENDBYTE 7160 LDA #02,X;ADC @#00;JSR ZENDBYTE;LDA #03,X;ADC @#00;JSR ZENDBYTE 7170 LDA @#00;JSR ZENDBYTE;JMP RAF8 7180 7190 :DOSVECTAB 7200 .WORD LOADVEC,SAVEVEC,RAF_PTR,RAF_STORE 7210 .WORD RAF_LEES,RAF_SCHRIJF,RAF_OPEN,RAF_SLUIT 7220 7230 :SPOOL LDA @#0A;JSR OSBYTE 7240 :SPOOLL LDA #100,Y;CMP @CH" ";BNE SPOOL1;INY;BNE SPOOLL 7250 :SPOOL1 CMP @#0D;BEQ SPOOL_END 7260 LDA #209;CMP @>RAF_WRCH;BEQ SPOOL3+1;STA #BB;LDA #208;STA #BA 7270 LDA @<RAF_WRCH;STA #208;LDA @>RAF_WRCH;STA #209 7280 CLC;JSR SPOOL_INIT;CPY @#00;BEQ SPOOL_END;STY #B9;RTS 7290 :SPOOL_END PHA;LDA #209;CMP @>RAF_WRCH;BNE SPOOL3;STX #E4;LDX @#00 7300 :SPOOL2 STY #E5;LDA #BA;STA #208;LDA #BB;STA #209 7310 LDY #B9;JSR #FFCB;LDX #E4;LDY #E5 7320 :SPOOL3 PLA;JMP ENDCOM 7330 :SPOOL_INIT STY #52;LDY @#01;STY #53;LDX @#52;JSR #FFCE;TAY 7340 RTS 7350 7360 :EXEC LDA @#0A;JSR OSBYTE 7370 :EXECC LDA #100,Y;CMP @CH" ";BNE EXEC1;INY;BNE EXECC 7380 :EXEC1 LDA #20B;CMP @>RAF_WRCH;BEQ SPOOL3+1 7390 LDA #20A;STA #BD;LDA #20B;STA #BE;LDA @>RAF_RDCH 7400 STA #20B;LDA @<RAF_RDCH;STA #20A 7410 SEC;JSR SPOOL_INIT;CPY @#00;BEQ RDCH_SHUT;STY #BC;RTS 7420 7430 :RAF_WRCH STY #E5;LDY #B9;JSR #FFD1;LDY #E5;BCS SPOOL_END 7440 CMP @26;BEQ SPOOL_END;JMP (#BA) 7450 7460 :RAF_RDCH STY #E5;LDY #BC;JSR #FFD4;LDY #E5;CMP @26;BEQ RDCH_SHUT;RTS 7470 :RDCH_SHUT LDA #BD;STA #20A;LDA #BE;STA #20B;LDY #BC;JSR #FFCB 7480 LDY #E5;JMP (#20A) 7490 7500 :RAF_ERROR PHA;LDA #209;CMP @>RAF_WRCH;BEQ RAF_ERRVLAG 7510 LDA #20B;CMP @>RAF_RDCH;BEQ RAF_ERRVLAG;PLA;JMP ERROR 7520 :RAF_ERRVLAG PLA;SEC;RTS 7530 7590 :INFOKOP LDA @10;JSR OSBYTE;JSR #F7D1 7600 .AS"Naam Start Exec Lengte Datum Tijd Attributen" 7610 .BY #0A,#0D,#EA 7620 LDA @CH"-";LDX @79 7630 :INFOKOP1 JSR #FFF4;DEX;BNE INFOKOP1;JSR #FFED 7635 :INFOKOP2 LDA @11;JSR OSBYTE;BCC INFOKOP2;RTS 7640 7650 :INFOLINE LDA @#18;JSR COMMAND;LDX @0 7660 :INFOLINE2 LDA#140,X;INX;CMP@13;BEQ INFOLINE3;JSR ZENDBYTE;JMP INFOLINE2 7670 :INFOLINE3 LDA @#00;JSR ZENDBYTE;TAX;STA #07 7680 JSR LEESBYTE;BEQ INFOLINE4;JMP FILE_ERR 7690 :INFOLINE4 JSR LEESBYTE;STA #9B,X;INX;CPX @21;BNE INFOLINE4 7700 JSR ENDCOM;LDX @0 7710 :INFOLINE5 LDA#71A,X;CMP @#0D;BEQ INFOLINE6;JSR #CA4C;INX;BNE INFOLINE5 7720 :INFOLINE6 LDA@#20;JSR #FFF4;INX;CPX@14;BNE INFOLINE6;LDA @#23;JSR#FFF4 7730 LDA #9C;JSR #F802;LDA #9B;JSR #F802;JSR DBLSPACE;LDA @#23;JSR #FFF4 7740 LDA #9E;JSR #F802;LDA #9D;JSR #F802;JSR DBLSPACE 7750 LDA #9F;STA #16;LDA #A0;STA #25;LDA #A1;STA #34;LDA #A2;STA #43 7760 LDA @8;STA #321;JSR #C589;JSR DBLSPACE 7770 LDA @0;STA #16;STA #25;STA #34;STA #43;STA #321;LDA #AE;AND @#1F;STA #16 7780 JSR INFO0;JSR #C589;LDA @CH"-";JSR #FFF4;LSR #AF;ROR #AE;LDA #AE 7790 LSR A;LSR A;LSR A;LSR A;STA #16;JSR INFO0;JSR #C589;LDA @CH"-";JSR #FFF4 7800 LDA #AF;AND @#7F;CLC;ADC @<1980;STA #16;LDA @0;ADC @>1980;STA #25 7810 JSR #C589;JSR DBLSPACE;LDA @#00;STA #25;LDA #AD;AND @#F8 7820 LSR A;LSR A;LSR A;STA #16;JSR INFO0;JSR #C589;LDA @CH":";JSR #FFF4 7830 LDA #AC;ASL A;ROL #AD;ASL A;ROL #AD;ASL A;ROL #AD;LDA #AD;AND @#3F 7840 STA #16;JSR INFO0;JSR #C589;JSR DBLSPACE 7850 LDA #AB;AND @#03;BEQ INFOLINE8;LSR #AB;BCC INFOLINE7;JSR #F7D1 7860 .AS "READ-ONLY ",#EA 7870 :INFOLINE7 LSR #AB;BCC INFOLINE9;JSR #F7D1 7880 .AS "HIDDEN",#EA;JMP INFOLINE9 7890 :INFOLINE8 LDA @CH"-";JSR #FFF4 7900 :INFOLINE9 JMP #FFED 7910 7911 :DBLSPACE LDA @#20;JSR #FFF4;JMP #FFF4 7912 7920 :LIB LDX @0;JSR #F291;STA #780,X;INX;CMP @#0D;BNE LIB+2 7930 LDA @CH"*";JSR #FFF4;JMP ENDCOM 7940 7950 .END 7960 RETURN