File DSDFMT.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/ DSDFMT - PROGRAM TO SET MEDIA DENSITY ON RX02 MODE CONTROLLERS
/ DSDFMT.PA	17-AUG-79	FRED ZEISE
/  DSDFMT PRINTS  "DSD FLOPPY DISK MEDIA DENSITY FORMATTER V1.1"
/ ASKS	"ENTER DRIVE # (0 OR 1):"
/	"ENTER DENSITY (S OR D):"
/ STARTS OVER AGAIN WHEN FORMAT (SET MEDIA DENSITY) IS COMPLETE
/ IF UNSUCCESSFUL TYPES "ERROR DURING SET MEDIA DENSITY
/		"PLEASE REFORMAT DISK "
/	TYPE CTRL C	TO EXIT TO OS/8
/	TYPE CTRL R	TO RESTART AND ASK DRIVE # AGAIN

	*20	/ PAGE ZERO GLOBAL DEFS

COMAND,	0	/ LAST COMMAND TO FLOPPY STORED HERE
ICHAR,	0	/ INPUT CHAR FROM KEYBOARD

B77,	77
M37,	-37
B100,	100
B237,	237
B15,	15
B12,	12
B177,	177
B200,	200

MESAGE=	JMS I .
	TYPX	/ MESSAGE OUTPUT ROUTINE

/ FLOPPY DISK IOT'S
	DEV=6750	/ STANDARD FLOPPY IOT
LCD=	DEV+1	/ LOAD COMMAND REGISTER
XDR=	DEV+2	/ TRANSFER DATA REGISTER
STRF=	DEV+3	/ SKIP ON TRANSFER REQUEST AND CLEAR FLAG
SERF=	DEV+4	/ SKIP ON ERROR FLAG AND CLEAR FLAG.
SDNF=	DEV+5	/ SKIP ON DONE FLAG AND CLEAR DONE
INIT=	DEV+7	/ INITIALIZE CONTROLLER AND DRIVES.

	*200

START,	MESAGE; HELLO	/ "DSD FLOPPY DISK MEDIA DENSITY FORMATTER"
RESTRT,	CAF		/ CLEAR ALL FLAGS AND INIT FLOPPY SYSTEM
	MESAGE; DRIVNO	/ "ENTER DRIVE # (0 OR 1):"
	TAD (10; DCA COMAND / INIT COMMAND TO SET MEDIA DENSITY.
	JMS	DISPAT	/ DISPATCH FOR DRVZRO OR DRVONE
	"0;	DRVZRO	/ DISPATCH ADDRESS LIST
	"1;	DRVONE
	"C-100;	OS8DIS	/ RETURN TO OS/8
	0
	JMP	RESTRT	/ ELSE GO BACK AND ASK DRIVE AGAIN

DRVZRO,	MESAGE; DRIVE0	/ "DRIVE 0 SELECTED!! REMOVE SYSTEM DISK!."
	JMP	DENDET	/ GOTO DENSITY DETERMINATION

DRVONE,	MESAGE; DRIVE1	/ "DRIVE 1 SELECTED"
	TAD (20; TAD COMAND; DCA COMAND

DENDET,	JMS CHKDEN	/ DETERMINE CURRENT DENSITY OF SELECTED DRIVE
	  TAD	(SINGL-DUBBLE	/ GET PTR TO "SINGLE DENSITY"
	  TAD	(DUBBLE		/ GET PTR TO "DOUBLE DENSITY"
	  DCA .+2
	MESAGE; DUBBLE		/ PRINT ACTUAL DRIVE DENSITY

DENSEL,	MESAGE; DENSTY	/ "ENTER DENSITY (S OR D):"
	JMS	DISPAT	/ GET DENSITY SELECTION.
	"S;	SINGLE
	"D;	DOUBLE
	"C-100;	OS8DIS
	"R-100;	RESTRT
	0
	JMP	DENSEL	/ ASK AGAIN IF NOT RECOGNIZED

SINGLE,	MESAGE; SINGL	/ "SINGLE DENSITY SELECTED"
	JMP	GO

DOUBLE,	MESAGE; DUBBLE	/ "DOUBLE DENSITY SELECTED"
	TAD (400; TAD COMAND; DCA COMAND

GO,	MESAGE; TSELCT
	SERF; NOP	/ CLEAR ERROR FLAG
	TAD COMAND; LCD	/ LOAD THE COMMAND
	STRF; JMP .-1	/ WAIT FOR VERIFICATION
	TAD (111; XDR	/ LOAD VERIFICATION.
	SDNF; JMP .-1	/ WAIT TILL FINISHED
	SERF; JMP FMTFIN	/ TYPE "MEDIA DENSITY SUCCESSFULLY SET"
	 MESAGE; TERROR	/ "ERROR DURING SET MEDIA DENSITY__"
	 MESAGE; TREFOR	/ "--PLEASE REFORMAT DISKETTE__"
	 JMP RESTRT

FMTFIN,	MESAGE; TMEDOK	/ 
	JMP	RESTRT	/ ASK FOR ANOTHER DISK


/ CHKDEN - DETERMINES DENSITY OF DISKETTE IN SPECIFIED DRIVE.
/ JMS	CHKDEN	/ RETURNS TO OS/8 IF NOT IN RX02 MODE.
/	SINGLE DENSITY RETURN
/	DOUBLE DENSITY RETURN

CHKDEN,	0
	CLA STL RTL; TAD COMAND	/ MAKE "READ STATUS COMMAND"
	SDNF; JMP .-1		/ WAIT FOR INIT FINISHED
	LCD
	SDNF; JMP .-1		/ WAIT FOR STATUS READY
	XDR; AND B200		/ CHECK FOR DRIVE READY
	SZA CLA; JMP .+4	/ IF NOT TYPE
	 MESAGE; TDVNTR		/ "DRIVE NOT READY"
	 JMP RESTRT		/ AND ASK "ENTER DRIVE "
	XDR; AND (10		/ CHECK "RX02 MODE"
	 SZA CLA; JMP .+4
	  MESAGE; TNTRX02	/ "CONTROLLER NOT IN RX02 MODE - EXIT."
	  JMP START		/ SAFER TO RESTART AND WAIT FOR CTRLC
	XDR; AND (40		/ CHECK DENSITY BIT
	 SZA CLA; ISZ CHKDEN	/ DO SKIP RETURN IF DOUBLE DENSITY
	JMP I CHKDEN

/ DISPATCH - DISPATCH TO ADDRESS FOLLOWING CHAR IF CHAR MATCH / JMS DISPATCH / CHAR1; ADDRESS1 / CHAR2; ADDRESS2 / 0 / TERMINATOR DISPAT, 0 / DISPATCH ROUTINE JMS XREAD / GET A CHAR FROM KEYBOARD DISPTL, TAD I DISPAT / GET CHAR FROM TABLE ISZ DISPAT / POINT TO POINTER SNA; JMP I DISPAT / RETURN FOLLOWING TABLE END. CIA; TAD ICHAR / IS CHAR = DISPATCH CHAR SNA CLA; JMP DISFND ISZ DISPAT; JMP DISPTL DISFND, TAD I DISPAT; DCA DISPAT / GET ACTUAL DISPATCH ADDRESS JMP I DISPAT / GO TO IT OS8DIS, CAF / SET FLOPPY DONE FLAG. JMP I .+1; 7605 / RETURN TO OS/8 PAGE
/ TYPX - PRINT A MESSAGE POINTED TO FOLLOWING CALL. / MESAGE; POINTER TO TEXT; RETURNS - AC = 0 / 2 CHARACTERS HAVE SPECIAL MEANING 00=TERMINATOR AND 37 = CRLF TYPX, 0 CLA CLL TAD I TYPX; DCA TYPNT; ISZ TYPX / GET TEXT POINTER TYPX1, TAD I TYPNT / GET HIGH BYTE CHAR BSW; JMS TYPY TAD I TYPNT; JMS TYPY / GET LOW BYTE CHAR ISZ TYPNT; JMP TYPX1 TYPNT, 0 / TYPY - SUBROUTINE CALLED TO DO 6 BIT CHAR UNPACK BY TYPX / 1) TESTS FOR TERMINATOR AND EXITS TYPX WHEN FOUND / 2) TESTS FOR (37) AND PRINTS CRLF WHEN FOUND / 3) CONVERTS OTHERS TO 8 BIT ASCII AND OUTPUTS TYPY, 0 AND B77; SNA; JMP I TYPX / EXIT IF 0 CHAR FOUND TAD M37; SZA; JMP .+3 / TYPE CRLF AND RETURN JMS PCRLF; JMP I TYPY SPA; TAD B100 / ADD 100 TO A-Z TAD B237 / CONVERT BACK FROM OFFSET JMS TLSX JMP I TYPY PCRLF, 0 / PRINT CARRIAGE RETURN LINE FEED CLA CLL TAD B15; JMS TLSX TAD B12; JMS TLSX JMP I PCRLF TLSX, 0 / PRINT THE CHARACTER IN THE AC AND CLEAR AC TLS TSF; JMP .-1 CLA JMP I TLSX XREAD, 0 / RETURN WITH NEXT CHAR TYPED IN THE ICHAR. KSF; JMP .-1 KRB AND B177; TAD B200 / SET PARITY BIT ALWAYS DCA ICHAR TAD ICHAR; JMS TLSX JMS PCRLF JMP I XREAD HELLO, TEXT "_DSD FLOPPY DISK MEDIA DENSITY FORMATTER V1_" *.-1 / BACK UP OVER TERMINATOR TEXT " CTRL C RETURNS TO OS/8_" *.-1 TEXT " CTRL R RESTARTS DSDFMT__" DRIVNO, TEXT "__ENTER DRIVE # (0 OR 1):" DRIVE0, TEXT "_DRIVE 0 SELECTED ! REMOVE SYSTEM DISK !_" DRIVE1, TEXT "_DRIVE 1 SELECTED " TDVNTR, TEXT " DRIVE NOT READY_" DENSTY, TEXT "__ENTER DENSITY (S OR D):" DUBBLE, TEXT " DOUBLE DENSITY" SINGL, TEXT " SINGLE DENSITY" TSELCT, TEXT " SELECTED_" TNTRX02, TEXT "_CONTROLLER NOT IN RX02 MODE EXIT_" TERROR, TEXT "__ERROR DURING SET MEDIA DENSITY_" TREFOR, TEXT "_ - PLEASE REFORMAT DISK_" TMEDOK, TEXT "_SET MEDIA DENSITY COMPLETED_" $ $ $ $ $ $ $ $ $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search