10 REM PC-DOS V1.28  terug.gif
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
terug.gif