****** Laatste wijziging 10/09/87****** A.DISCCA1CH2EX	JSR	CH2TX	;load catalogueCH2EX1	JSR	FLBS	JSR	RDC	AND	#&DF	CMP	#"Y"	BEQ	CH2EX2	CMP	#"N"	BNE	CH2EX1	JSR	OSWRCH	JSR	OSNEWL	JSR	FLBS	JMP	CH2EX3CH2EX2	JSR	OSWRCH	JSR	OSNEWL	JSR	FLBS	JSR	SVCAT	;save catalogueCH2EX3	JSR	START	;reset data	JSR	MCTX	;memory clear	JSR	LDCAT	JMP	PROGRMCH3	CMP	#&33	;choice 3	BNE	CH4CH3EX	JSR	CH3TX	;update catalogueCH3EX1	JSR	HD3ATX	;put a disc in a driveCH3EX2	JSR	FLBS	JSR	RDC	CMP	#&34	BCS	CH3EX2	CMP	#&30	BCC	CH3EX2	PHA	JSR	OSWRCH	JSR	OSNEWL	PLA	AND	#&03	STA	DRNR	JSR	OSW7E	JSR	FIPEF	JSR	WRDT	;write disc title to screen	JSR	CPDD	;copy disc data to workspace	JSR	ANXFC	;address next file catalogue	JSR	DBL	BCC	CH3EX4CH3EX3	JSR	CATTF	;catalogue title	JSR	RDRNR	;       and files	JMP	CH3EX1CH3EX4	JSR	HD3BTXCH3EX5	JSR	FLBS	JSR	RDC	AND	#&DF	CMP	#"S"	BNE	CH3EX6	JSR	OSWRCH	JSR	OSNEWL	JSR	DLI	;delete old disc files	JSR	OSW7E	JMP	CH3EX3CH3EX6	CMP	#"N"	;no action	BNE	CH3EX5	JSR	OSWRCH	JSR	OSNEWL	JSR	RDRNR	;restore drive nr	JMP	CH3EX1CH4	CMP	#&34	;choice 4	BNE	CH5	JSR	CH4TX	JSR	PRDTS	;print disc titles	JSR	KEY	JMP	PROGRMCH5	CMP	#&35	;choice 5	BNE	CH6CH5EX	JSR	CH5TX	JSR	PRITF	;print index, titles & filenames	JSR	KEY	JMP	PROGRMCH6	CMP	#&36	;choice 6	BNE	CH7CH6EX	JSR	CH6TX	JSR	RDSTR	JSR	HD5BTX	JSR	CMSTR	JSR	KEY	JMP	PROGRMCH7	CMP	#&37	;choice 7	BNE	CH8CH7EX	JSR	CH7TX	;delete title, etc	JSR	RDB	JSR	DLI	JSR	KEY	JMP	PROGRMCH8	CMP	#&38	;choice 8	BNE	CH9CH8EX	JSR	CH8TX	JSR	SVCAT	;save catalogue	JMP	PROGRMCH9	CMP	#&39	;choice 9	BNE	NCHCH9EX	LDX	&024B	;BASIC ROM socket	LDA	#&8E	JMP	OSBYTE	;enter BASICNCH	JMP	PROGRM****** STCMD (Star command)STCMD	JSR	MODE	LDA	#&2A	JSR	OSWRCH	LDA	#>NAME	;OSWORD parameter block	STA	CTRBL	;at (Y;X)=CTRBL	LDA	#<NAME	STA	CTRBL+1	;input starts at NAME	LDA	#&10	STA	CTRBL+2	;max. line length = 16	LDA	#&20	;min. acceptable value	STA	CTRBL+3	LDA	#&7F	;max. acceptable value	STA	CTRBL+4	LDX	#>CTRBL	LDY	#<CTRBL	LDA	#&00	;read line from input into memory at NAME	JSR	OSWORD	LDX	#>NAME	LDY	#<NAME	;interpret the command at NAME	JSR	OSCLI	JSR	KEY	RTS****** KEY (Hit a key)KEY	LDY	#<TXKEY	LDX	#>TXKEY	JSR	PRTX	JSR	FLBS	;flush buffers	JSR	RDC	RTS****** MVOSB (Move osword block)MVOSB	LDX	#10	;move oswordMVOSB1	LDA	OSBL,X	;  block to CTRBL	STA	CTRBL,X	DEX	BPL	MVOSB1	RTS****** OSW7E (Osword &7E)OSW7E	LDX	#>DSIZE	LDY	#<DSIZE	LDA	#&7E	JSR	OSWORD	LDA	DSIZE+2	CMP	#&05	BNE	OSW7E1	LDA	DSIZE+1	CMP	#&00	;80 tr, 16 sect?	BEQ	OSW7E6	BNE	OSW7E4OSW7E1	CMP	#&03	BNE	OSW7E2	LDA	DSIZE+1	CMP	#&20	;80 tr, 10 sect?	BEQ	OSW7E5	BNE	OSW7E4OSW7E2	CMP	#&02	BNE	OSW7E3	LDA	DSIZE+1	CMP	#&80	;40 tr, 16 sect?	BEQ	OSW7E6	BNE	OSW7E4OSW7E3	CMP	#&01	BNE	OSW7E4	LDA	DSIZE+1	CMP	#&90	;40 tr, 10 sect?	BEQ	OSW7E5OSW7E4	LDY	#<TXSD	;strange disc	LDX	#>TXSD	JSR	PRBS	JSR	KEY	JMP	PROGRMOSW7E5	LDA	#10	STA	SPT	;sectors/track	RTSOSW7E6	LDA	#16	STA	SPT	RTS****** OSW7F (Osword &7F)OSW7F	LDX	#>CTRBL	LDY	#<CTRBL	LDA	#&7F	JSR	OSWORD	RTS******	FIPEF (Fill pages 0E & 0F)FIPEF	JSR	MVOSB	JSR	OSW7F	RTS******	FIPE (Fill page 0E)FIPE	JSR	MVOSB	LDA	TRCK	STA	CTRBL+7	LDA	SECT	STA	CTRBL+8	LDA	#&21	;256 bytes/1 sector	STA	CTRBL+9	JSR	OSW7F	RTS****** FIPF (FILL PAGE 0F)FIPF	JSR	MVOSB	INC	SECT	LDA	SECT	CMP	SPT	BNE	FIPF1	LDA	#&00	STA	SECT	INC	TRCKFIPF1	LDA	#&0F	STA	CTRBL+2	LDA	TRCK	STA	CTRBL+7	LDA	SECT	STA	CTRBL+8	LDA	#&21	;256 bytes/1 sector	STA	CTRBL+9	JSR	OSW7F	RTS****** WRDT (Write disc title to screen)WRDT	LDY	#<TXTTL	;print text	LDX	#>TXTTL	;    "Disc title"	JSR	PRBS	LDX	#&00WRDT1	LDA	&0E00,X	;write disc title to screen	CMP	#"?"	;hidden title	BEQ	WRDT2		CMP	#&E3	;locked "?"	BEQ	WRDT2		JSR	OSWRCHWRDT2	INX		CPX	#&08	BNE	WRDT1	JSR	OSNEWL	RTS****** CPDD (Copy disc data to workspace CTRBL)CPDD	LDX	#&07CPDD1	LDA	&0E00,X	;copy disc data	STA	CTRBL,X	;   to CTRBL-(CTRBL+7)	DEX	BPL	CPDD1	LDX	#&07CPDD2	LDA	&0F00,X	;copy catalogue data	STA	CTRBL+8,X	;to CTRBL+8-(CTRBL+0F)	DEX	BPL	CPDD2	RTS****** ANXFC (Address next file catalogue)ANXFC	LDA	#&00	STA	CATFLG	;no next catalogue	LDA	&0F02	AND	#&F0	CMP	#&C0	BEQ	ANXFC1	RTSANXFC1	LDA	#&01	STA	CATFLG	;next catalog present	LDA	&0F02	AND	#&0F	STA	TRCK	LDA	&0F03	STA	SECT	LDX	#0ANXFC2	LDA	SECT	INX	SEC	SBC	SPT	;sectors/track	STA	SECT	LDA	TRCK	SBC	#0	STA	TRCK	BPL	ANXFC2	DEX	STX	TRCK	LDA	SECT	CLC	ADC	SPT	;sectors/track	STA	SECT	RTS****** BEGAD (Begin address)BEGAD	LDA	#&00	;begin address	STA	LDAD	LDA	MINPAG	STA	LDAD+1	RTS****** DBL (Double, search for identical disc titles)DBL	JSR	BEGAD	;initialise LDADDBL1	JSR	FANXD	;find address next disc	BCS	DBL2	;no more discs in catalogue	JSR	CMDT	;compare disc titles	BCS	DBL1	;titles are not identicalDBL2	RTS	;carry clear = identical titles		;carry set = no identity****** PRITF (Print index, title, filenames)PRITF	JSR	HD5ATXPRITF1	JSR	FLBS	JSR	RDC	;read 1st nybble	CMP	#"@"	BEQ	PRITF3	STA	NBL1	JSR	CTNB	BCS	PRITF1	STA	NBL11	LDA	NBL1	JSR	OSWRCHPRITF2	JSR	RDC	;read 2nd nybble	STA	NBL2	JSR	CTNB	BCS	PRITF2	STA	NBL22	LDA	NBL2	JSR	OSWRCH	LDA	NBL11	ASL	ASL	ASL	ASL	CLC	ADC	NBL22	STA	INDEX	CMP	#&7F	BCS	PRITF4	JSR	FDAIN	;find disc address	BCS	PRITF4	JSR	HD5BTX	JSR	PRDT1	;print disc title	JSR	PRFNS	;print filenames	RTSPRITF3	JSR	OSWRCH	JSR	HD5BTX	JSR	PRDTF	;print all titles	RTS		;   and filenamesPRITF4	JSR	HD5BTX	RTS****** CMSTR (Compare strings)CMSTR	LDA	#&10	STA	&F8	LDA	MINPAG	STA	&F9	LDA	#14	;page mode on	JSR	OSWRCH	INC	NMLTHCMSTR1	JSR	SCESC	;scan ESCAPE	LDX	#&00	LDY	#&00CMSTR2	LDA	(&F8),Y	CPY	#&07	BNE	CMSTRA	AND	#&7FCMSTRA	CMP	#&7B	BCS	CMSTR3	CMP	#&61	BCC	CMSTR3	AND	#&DFCMSTR3	CMP	NAME,X	BNE	CMSTR4	INX	CPX	NMLTH	BCS	CMSTR6	INY	CPY	#&08	BCS	CMSTR5	JMP	CMSTR2CMSTR4	INY	CPY	#&08	BNE	CMSTR2CMSTR5	JSR	F8ADD	CMP	MAXPAG	BNE	CMSTR1	RTSCMSTR6	LDA	&F8	STA	LDAD	STA	LFAD	LDA	&F9	STA	LDAD+1	STA	LFAD+1	LDY	#&0F	LDA	(&F8),Y	BEQ	CMSTR8	STA	INDEX	CMP	#&80	BCC	CMSTR7	AND	#&7F	STA	INDEX	JSR	FDAIN	JSR	OSNEWL	JSR	PRDT1	JSR	PRFN	JMP	CMSTR5CMSTR7	JSR	OSNEWL	JSR	PRDT1CMSTR8	JMP	CMSTR5****** FDAIN (Find disc address with index)FDAIN	LDA	#&00	STA	&F8	LDA	MINPAG	STA	&F9	LDY	#&0FFDAIN1	JSR	F8ADD	CMP	MAXPAG	BEQ	FDAIN2	LDA	(&F8),Y	CMP	INDEX	BNE	FDAIN1	LDA	&F8	STA	LDAD	LDA	&F9	STA	LDAD+1	CLC		;address found	RTSFDAIN2	SEC		;no address found	RTS****** SCESC (Scan ESCAPE)SCESC	PHA	TYA	PHA	TXA	PHA	LDA	#&7A	JSR	OSBYTE	;scan keyboard	CPX	#&70	;ESCAPE?	BNE	SCESC1	JMP	RDC1SCESC1	PLA	TAX	PLA	TAY	PLA	RTS****** CATTF (Catalogue title & files)CATTF	JSR	FINWD	;find index new discCATTF1	LDA	&0F05	STA	NRFILS	LDA	#&00	;addresses	STA	&F2	;&0E00-&0E07	LDA	#&0E	;in (&F2),Y if	STA	&F3	;0 <= Y <= 7	LDA	#&F8	;addresses	STA	&FD	;&0F00-&0F07	LDA	#&0E	;in (&FD),Y if	STA	&FE	;8 <= Y <= &0ECATTF2	JSR	FANWF	;find address new file	LDA	LFAD	STA	&F8	LDA	LFAD+1	STA	&F9	LDY	#&07PAG.E0	LDA	(&F2),Y	CPY	#&07	BNE	CATTF4	CMP	#&FF	;deleted file	BEQ	CATTF3	CMP	#&3F	;hidden file/title	BEQ	CATTF3	CMP	#&BF	;hidden file/title	BNE	CATTF4CATTF3	JSR	SKAF	BCC	PAG.E0	;more files present	BCS	CATTF5	;no more filesCATTF4	STA	(&F8),Y	DEY	BPL	PAG.E0	LDY	#&0F	LDA	INDEX	STA	(&F8),Y	ORA	#&80	STA	INDEX	LDX	#&06	DEYPAG.F0	LDA	(&FD),Y	STA	(&F8),Y	DEY	DEX	BPL	PAG.F0	JSR	SKAF	BCC	CATTF2CATTF5	LDA	CATFLG	;no more files	BNE	CATTF6	;next file catalogue	RTSCATTF6	JSR	FIPE	;fill page 0E	JSR	FIPF	;fill page 0F	JSR	ANXFC	JMP	CATTF1****** SKAF (Skip address of file)SKAF	LDA	NRFILS	;skip hidden or	SEC		;deleted files	SBC	#8	CMP	#&F8	BEQ	SKAF1	STA	NRFILS	LDA	&F2	CLC	ADC	#&08	STA	&F2	LDA	&FD	CLC	ADC	#&08	STA	&FD	LDA	&FE	ADC	#&00	STA	&FE	CLC		;more files present	RTSSKAF1	SEC		;no more files	RTS****** CMDT (Compare disc titles)CMDT	LDA	LDAD	STA	&F8	LDA	LDAD+1	STA	&F9	LDY	#7CMDT1	LDA	CTRBL,Y	CMP	(&F8),Y	BNE	CMDT2	DEY	BPL	CMDT1	CLC		;identical disc titles	LDY	#&0F	LDA	(&F8),Y	STA	INDEX	RTSCMDT2	SEC		;different disc titles	RTS****** FANWF (Find address new file)FANWF	LDA	#&10	STA	&F8	LDA	MINPAG	STA	&F9	LDY	#&0FFANWF1	LDA	(&F8),Y	BEQ	FANWF2	;branch if new address found	JSR	F8ADD	CMP	MAXPAG	BNE	FANWF1	LDA	#&07	JSR	OSWRCH	LDX	#>TXNRM	;no room	LDY	#<TXNRM	JSR	PRBS	JSR	KEY	JMP	PROGRMFANWF2	LDA	&F8	;new address found	STA	LFAD	LDA	&F9	STA	LFAD+1	RTS****** F8ADD (Add &10 to &F8)F8ADD	LDA	&F8	CLC	ADC	#&10	STA	&F8	LDA	&F9	ADC	#&00	STA	&F9	RTS****** FINWD (Find index new disc)FINWD	LDY	#&0F	LDX	#1FINWD1	STX	INDEX	LDA	#&10	STA	&F8	LDA	MINPAG	STA	&F9FINWD2	LDA	(&F8),Y	CMP	INDEX	BEQ	FINWD3	JSR	F8ADD	CMP	MAXPAG	BNE	FINWD2	RTS		;free index nr foundFINWD3	INX	CPX	#&80	BCC	FINWD1	LDA	#7	;all numbers used	JSR	OSWRCH	LDX	#>TXNMT	;no more titles	LDY	#<TXNMT	JSR	PRBS	JSR	KEY	JMP	PROGRM	RTS****** PRDTS (Print (all) disc titles)PRDTS	JSR	BEGAD	JSR	FLBS	;flush all buffers	LDA	#14	JSR	OSWRCH	;page mode onPRDTS1	JSR	SCESC	;scan ESCAPE	JSR	PRDT	;print disc title	BCC	PRDTS1	RTS		;no more discs****** PRDT (Print disc title)PRDT	JSR	FANXD	;find address next disc	BCC	PRDT1	RTSPRDT1	JSR	OSNEWL	;print one disc title	LDA	LDAD	STA	&F8	LDA	LDAD+1	STA	&F9	LDY	#&0F	LDA	(&F8),Y	JSR	WRB	LDA	#&20	JSR	OSWRCH	JSR	OSWRCH	LDY	#&00PRDT2	LDA	(&F8),Y	BEQ	PRDT3	JSR	OSWRCH	INY	CPY	#&08	BNE	PRDT2PRDT3	CLC	RTS		****** PRDTF (Print disc titles & files)PRDTF	LDA	#&00	STA	LFAD	;last file address	STA	LDAD	;last disc address	LDA	MINPAG	STA	LFAD+1	STA	LDAD+1	JSR	FLBS	;flush all buffers	LDA	#14	JSR	OSWRCH	;page mode onPRDTF1	JSR	SCESC	JSR	OSNEWL	JSR	PRDT	;print disc title	BCC	PRDTF2	RTS		;no more discsPRDTF2	JSR	PRFNS	;print filenames	BCC	PRDTF2	BCS	PRDTF1		****** PRFNS (Print filenames)PRFNS	LDA	LDAD	STA	LFAD	LDA	LDAD+1	STA	LFAD+1PRFNS1	JSR	SCESC	JSR	FNXFA	;find next file address	BCS	PRFNS2	JSR	PRFN	;print filename	JMP	PRFNS1PRFNS2	RTS	CHN	A.DISCCA2