64 5 REM trs3link/bas G. Rahman
@10 DEFUSR0=&H7820
@20 DEFUSR1=&H784C
@30 DEFUSR2=&H782D
@40 CLS
@50 PRINT"Even de machinetaal routines inladen..."
@60 CMD"LOAD ENE/CMD"
@70 S1=0
@80 INPUT"Drive nummer ";X
@90 IFX<0 OR X>3 THEN 70
@100 X1=(&H4371+(X*10))
@110 TST=PEEK(X1+1)*PEEK(X1+5)*5
@120 TC=PEEK(X1+3)
@130 SPT=PEEK(X1+4)
@140 IFSPT>18THENDS=2ELSEDS=1
@150 IFSPT=18ORSPT=36THENDD=18ELSEDD=10
@160 LINE INPUT"Press ENTER to start sending";X$
@170 PRINT@512,"Sending.... "
@180 POKE &H7806,X
@190 FORT=0 TO TC-1
@200 PRINT@524," Track";T
@210 FOR S=0 TO DD*DS-1
@220 PRINT@550," Sector";S
@230 POKE&H780D,SPT
@240 POKE &H784D,T:U=USR1(0)
@250 POKE &H784D,S:U=USR1(0)
@260 POKE &H780A,S1-INT(S1/256)*256
@270 POKE &H780B,INT(S1/256)
@280 U=USR0(0): U=USR2(0)
@290 S1=S1+1:IFS1>=TSTTHEN320
@300 NEXTS
@310 NEXTT
@320 POKE &H784D,255:U=USR1(0)
@330 POKE &H784D,255:U=USR1(0)
@340 PRINT"done"
@350 STOP
@360 PRINT@0,;:FORI=&H7900TO&H7900+&H08:PRINT
@CHR$(PEEK(I));:NEXT
@370 RETURN
@
@De machinetaal routine heet "ENE/CMD". Deze routine bestaat uit@drie afzonderlijke routines.
@- Een routine om een sector te lezen (USR0(0)=&H7820, een om 
@- Een routine (USR2(0)=&H782D) om de gegevns uit de buffer te@halen en een checksum te maken.
@- Een routine (USR1(0)=&H784C) om een byte (2 nibbles) naar de@printer te sturen.
@
@			ORG	7800H
@07800 82	DCB	DEFB	82H	;Dit is de Newdos-FCB
@07801 04		DEFB	04H	;FCB = file control block
@07802 2000		DEFB	20H	;Het label BUFF staat op 
@07804 79	BUFF	DEFW	7900H	;geheugen 7803H en 7804H
@07805 00		DEFB	00H	;
@07806 010000	DRIVE	DEFB	01H	;01 staat voor drive 1
@07809 00		DEFB	00H
@0780A 00		DEFB	00H
@0780B 00		DEFB	00H
@0780C 00	NEXFI	DEFW	0000H	;next sector # to get
@0780D 00	EOFFI	DEFW	0000H	;control for EOF
@00220 	DEFS	12H
@07820 110078		LD	DE,DCB	;DE points to buffer 
@07823 CD3644 		CALL	4436H	;READ sector to
@07826 CB		RET	Z	;(buffer)=7900H
@07827 F680		OR	80H	;Error routine
@00270 CD0944		CALL	4409H	;display error
@00280 C9		RET
@
@0782D 110000		LD	DE,0000H
@07830 210079		LD	HL,7900H
@07833 7E		LD	A,(HL)	; Get buffer byte
@07834 EB		EX	DE,HL	;
@07835 D5		PUSH	DE	;
@07836 5F		LD	E,A	;
@07837 1600		LD	D,00H	;
@07839 19		ADD	HL,DE	; and create a sort of@0783A D1		POP	DE	; checksum
@0783B EB		EX	DE,HL	; Send byte to 
@0783C CD4E78		CALL	784EH	; printer
@0783F 2C		INC	L	; Get next byte
@07840 20F1		JR	NZ,7833H
@07842 7A		LD	A,D	; At last
@07843 CD4E78		CALL	784EH	; Send checksum to
@07846 7B		LD	A,E	; printer
@07847 CD4E78		CALL	784EH
@0784A AF		XOR	A
@0784B C9		RET
@
@0784C 3E00	BYTE	LD	A,00H	; load A with byte to
@0784E 4F	INIET	LD	C,A	; send
@0784F 0603		LD	B,03H	; Initiate nibble strip
@07851 FD214038	LD	IY,3840H; Read keyboard (14400)
@07855 21E837 	LD	HL,37E8H; Status floppy drive
@07858 79	PLOOP	LD	A,C
@07859 37		SCF
@0785A 1F		RRA
@0785B 77 		LD	(HL),A	;Test if floppy
@0785C CB7E	PBUSY	BIT	07H,(HL)	floppy busy
@0785E 2008		JR	NZ,786DH
@07860 FDCB0056	BIT	02H,(IY+00H)	Test to see if
@07864 2002		JR	NZ,PRESET	BREAK key is used
@07866 18F4		JR	PBUSY		Floppy busy?
@07868 E67F	PRESET	AND	7FH		Reset printer
@0786A 77		LD	(HL),A
@0786B CB7E	 TBUSY	BIT	07H,(HL)	Printer busy?
@0786D 2808		JR	Z,PR2
@0786F FDCB0056	BIT	02H,(IY+00H)	Test to see if
@07873 2002		JR	NZ,PR2		BREAK key is used
@07875 18F4		JR	TBUSY
@07877 79	PR2	LD	A,C
@07878 07		RLCA
@07879 07		RLCA
@0787A 07		RLCA
@0787B 4F		LD	C,A
@0787C 10DA		DJNZ	PLOOP
@0787E C9		RET
@00760 		END
@
@Ik ben zo enthousiast om met het programma verder te werken, dat@ik een diep gaande uitleg maar laat voor wat het is.
@De machinetaal routines van Jeff waren 90 bytes langer dan mijn@routines. Grote delen van mijn routine zijn bijna gelijk aan de@zijne.
@
@Zoals gezegd bestaat de kunst van het programmeren voor Newdos@eruit dat u de handleiding goed bestudeerd. Toegegeven, een niet@ingewijde komt niet door de handleiding. Newdos kent enkele@CALL's om files te openen, te sluiten, sectoren te lezen enz.
@Voor het openen van een file creeert een bepaalde CALL@zelfstandig een file buffer. Als u geen file wilt openen, maar@wel een sector wilt lezen, moet u zelf een soort file buffer@creeeren. Nadat een byte van uw schijf ingeslezen is, moet die@natuurlijk ergens geplaatst worden om tenminste ruimte voor het@inlezen van de volgende byte te maken. De plaats waar u de bytes@opslaat (data van de sectoren van uw schijf) geeft u ook aan in@de door u te creeren buffer. De regels voor het opzetten van@zo'n filebuffer staan in Hoofdstuk 5 van uw handleiding.
@
@Mijn "filebuffer" staat op 7800H-781FH. Mijn gegevens gaan naar@geheugen 7900H-79FFH (zie bytes 7803 en 7804H).
@
@In de routine 782DH-784BH worden de bytes uit de opslag buffer@(7900H-79FFH) bij elkaar opgeteld. Dit totaal van de waarde van@de bytes van een sector wordt na elke sector als checksum over@gezonden naar de PC. In het RECEIVE.EXE programma van de PC@wordt gecontroleerd of het totaal van de ontvangen bytes gelijk@is aan deze ontvangen checksum.
@
@Van 784CH-7887H staat de knappe routine van Jeff, waarin hij@elke byte die uitgezonden dient te worden splitst in 2x 4 bits.@Trouwens vier bits heet een nibble (8 bits heet een byte).
@Zoals u weet heeft Jeff een kabel van zes aders gemaakt. Twee@aders dienen voor de controle en vier aders voor het overseinen@van de data. Dus moest hij elke byte splitsen in twee nibbles.
@
@Nu het BASIC programma.
@
@Dit programma werkt alleen goed voor Newdos80. Ik zoek in regel@100 de pdrive tabel uit het geheugen op. Met de gegevens uit@deze tabel bereken ik het aantal over te zenden sectoren. Daarna@worden de sectoren achter elkaar uitgezonden. Om de SPT sectoren@zend ik nog even het track nummer begin weer met een sector@nummer 0. Dat was nodig omdat RECEIVE.EXE controleert op@tracknummer en sectornummer, althans RECEIVE.EXE verwacht track-@en sectornummers op gezette tijden.
@
@Met deze programma's kon ik moeiteloos elke diskette die door@Newdos80 gelezen kan worden, via het kabeltje naar de PC@overzenden.
@
@Het MODEL1.EXE programma wordt gevoed met gegevens uit@MODEL1.CFG. Dit configuratie programma wordt weer gevoed door@SETUP.EXE. Intussen heeft Rence alle drie programma's zo@gewijzigd dat de met DD-DS NEWDOS schijven gewerkt kan worden.@SETUP.EXE is vergroot, evenals MODEL1.CFG. MODEL1.EXE is@aangepast.
@
@Uiteraard is het hele pakket met wijzigingen naar Jeff Vavasour@opgestuurd. Aan hem hebben we verzocht de wijzigingen in het@origineel te passen, waardoor een naar onze mening beter produkt@ontstaat.
@
@Nog even over de kabeltjes.
@Indien u geen kabels wilt maken, omdat u dat moeilijk vindt of@omdat uw TRS80 en PC te ver van elkaar vandaan staan, heeft u@toch nog de mogelijkheid schijfjes in uw TRS80 aan te maken en@die op de PC in te lezen.
@
@U neemt een SS-SD schijfje, doet dat in uw TRS80 en zet daarop@de gegevens van een andere schijf. Het is een hele toer om DD-DS@schijfjes op een SS-SD schijf te krijgen. Jeff heeft geen@programma meegeleverd dat de gegevens van een schijf in een file@stopt. De redaktie van het blad TRS-Times heeft zo'n programma@gepubliceerd voor het werken met LDOS schijfjes. Dit programma@wil ik u niet onthouden.
@
@De programma werkt alleen met LDOS
@
@	ORG	7000H
@START	LD	HL,LDOS	;wijst naar de filenaam
@	LD	DE,FCB	;wijst naar FCB
@	CALL	441CH	;filenaam in FCB bij Newdos?
@	LD	HL,BUFFER	;I/O buffer
@	LD	B,0	;record lengte 256
@	CALL	4420H	;indeling FCB is bij Newdos anders
@	LD	C,2
@	CALL	4754H	;Newdos LD (37E1H),3
@	LD	D,0	;track 0
@	LD	B,40	;disk heeft 40 tracks
@LOOP0	PUSH	BC	;
@	LD	B,10	;sector loop
@	LD	E,0	;sector 0
@LOOP1	LD	A,11H	;kijkt uit naar de
@	CP	D	;protected dir-sectoren
@	JR	NZ,RDSECD	;gewone sector
@	CALL	4B45H	;speciale sector!
@	JR	LOOP2
@RDSECD	CALL	4477H	;lees een sector
@LOOP2	PUSH	DE
@	LD	DE,FCB	;wijst naar FCB
@	CALL	4439H	;schrijf buffer naar disk
@	POP	DE
@	INC	E
@	DJNZ	LOOP1	;10 sectoren
@	POP	BC
@	INC	D	;volgende track
@	DJNZ	LOOP0	;40 tracks
@	LD	DE,FCB
@	CALL	4428H	;close file
@	RET
@LDOS	DM	'NEWDOS/DSK:1'
@	DB	13
@FCB	DS	32
@BUFFER	DS	256
@	END	START
@
@
@Een andere mogelijkheid moest zijn om een TRS80 schijfje in uw@PC te stoppen en gewoon in te lezen als file. Rence is daar aan@begonnen. Het programma was niet zo eenvoudig gemaakt als op een@TRS80. Onder anderen de BIOS-calls zijn onvoldoende en niet@eenvoudig uit defaults te halen. Zo nu en dan moest hij zelfs@zijn AT-486 geheel resetten! Als u Rence (Dr. L. Roozendaal)@beter kent, weet u dat hij dit niet gauw op zal geven.
@
@De versie die Rence nu bezit, leest elke gewenste TRS80 schijf!@maar bij de protected sectoren aangekomen weigert zijn programma@deze sectoren in te lezen. De enige oplossing is tot nu toe, dat@de TRS80 schijven (NEWDOS) eerst met WRDIRP (en SYSTEM BK=y)@behandeld worden voordat ze op de PC ingelezen worden.
@Na het overzetten kunnen de schijfjes met het programma DIRCHECK@optie W, weer van de speciale directory sectoren voorzien@worden.
@
@  