🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: net.micro.atari
1 messages
1 total messages Started by Jwahar R. Bammi Mon, 10 Feb 1986 08:14
Bios calls For Modula-2
#2423
Author: Jwahar R. Bammi
Date: Mon, 10 Feb 1986 08:14
251 lines
9593 bytes
	Here are definition and implementation modules for bios calls
for use with TDI's Modula-2. I found these on CompuServe. I have
almost completed a similar interface for xbios calls, that i will post
shortly.

----
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	bioscall.def
#	bioscall.mod
# This archive created: Mon Feb 10 03:10:05 1986
# By:	Jwahar R. Bammi ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'bioscall.def'" '(1125 characters)'
if test -f 'bioscall.def'
then
	echo shar: over-writing existing file "'bioscall.def'"
fi
sed 's/^X//' << \SHAR_EOF > 'bioscall.def'
XDEFINITION MODULE BIOScalls;
X
XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
X
XEXPORT QUALIFIED getmpb, bconstat, bconin, bconout, rwabs, setexc, tickcal,
X                 getbpb, bcostat, mediach, drvmap, kbshift;
X
XPROCEDURE getmpb( pmpb : ADDRESS );  (* BIOS call #0 *)
X
XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT;  (* BIOS call #1 *)
X
XPROCEDURE bconin( dev : CARDINAL ) : LONGINT;  (* BIOS call #2 *)
X
XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL );  (* BIOS call #3 *)
X
XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
X: LONGINT;  (* BIOS call #4 *)
X
XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
X                                                          (* BIOS call #5 *)
XPROCEDURE tickcal(): LONGINT;  (* BIOS call #6 *)
X
XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS;  (* BIOS call #7 *)
X
XPROCEDURE bcostat( dev : CARDINAL ): LONGINT;  (* BIOS call #8 *)
X
XPROCEDURE mediach( dev :CARDINAL ): LONGINT;  (* BIOS call #9 *)
X
XPROCEDURE drvmap(): LONGCARD;  (* BIOS call #10 *)
X
XPROCEDURE kbshift( mode : LONGINT ) : LONGINT;  (* BIOS call *11 *)
X
XEND BIOScalls.
SHAR_EOF
if test 1125 -ne "`wc -c 'bioscall.def'`"
then
	echo shar: error transmitting "'bioscall.def'" '(should have been 1125 characters)'
fi
echo shar: extracting "'bioscall.mod'" '(6054 characters)'
if test -f 'bioscall.mod'
then
	echo shar: over-writing existing file "'bioscall.mod'"
fi
sed 's/^X//' << \SHAR_EOF > 'bioscall.mod'
XIMPLEMENTATION MODULE BIOScalls;
X
XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
X
X
XPROCEDURE getmpb( pmpb : ADDRESS );  (* BIOS call #0 *)
X
XBEGIN;
X
X  SETREG(7,pmpb);                (* put table address into register D7 *)
X  CODE( 2F07H );                 (* push longword D7 onto stack *)
X  CODE(3F3CH,0,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X
XEND getmpb;
X
X
XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT;  (* BIOS call #1 *)
X
XBEGIN;
X
X  CODE( 7000H );                 (* clear D0 register *)
X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,1,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0));   (* return status of character device *)
X
XEND bconstat;
X
X
XPROCEDURE bconin( dev : CARDINAL ) : LONGINT;  (* BIOS call #2 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,2,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0));   (* return input character longword *)
X
XEND bconin;
X
X
XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL );  (* BIOS call #3 *)
X
XBEGIN;
X
X  SETREG(7,ADDRESS(ByteOut));    (* put character into register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,3,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X
XEND bconout;
X
X
XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
X: LONGINT;  (* BIOS call #4 *)
X
XBEGIN;
X
X  CODE ( 7000H );              (* clear D0 register *)
X  SETREG(7,ADDRESS(dev));      (* put mass storage device number into *)
X                                   (* register D7 *)
X  CODE( 3F07H );               (* push word D7 onto stack *)
X  SETREG(7,ADDRESS(recno));    (* put starting logical sector number into *)
X                                    (* register D7 *)
X  CODE( 3F07H );               (* push word D7 onto stack *)
X  SETREG(7,ADDRESS(count));    (* put sector count into register D7 *)
X  CODE( 3F07H );               (* push word D7 onto stack *)
X  SETREG(7,buff);              (* put buffer address into register D7 *)
X  CODE( 2F07H );               (* push longword D7 onto stack *)
X  SETREG(7,ADDRESS(rwflag));   (* put read/write flag into register D7 *)
X  CODE( 3F07H );               (* push word D7 onto stack *)
X  CODE(3F3CH,4,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0)); (* return mass storage device error *)
X                                  (* status word *)
XEND rwabs;
X
X
XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
X                                                          (* BIOS call #5 *)
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  SETREG(7,vec);                 (* put vector address into register D7 *) 
X  CODE ( 2F07H );                (* push longword D7 onto stack *)
X  SETREG(7,ADDRESS(vecnum));     (* put vector number into register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,5,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN REGISTER(0);            (* return old vector address *)
X
XEND setexc;
X
X
XPROCEDURE tickcal(): LONGINT;  (* BIOS call #6 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  CODE(3F3CH,6,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0));   (* return system clock in milliseconds *)
X
XEND tickcal;
X
X
XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS;  (* BIOS call #7 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  SETREG(7,ADDRESS(dev));        (* put mass storage device number into *)
X                                    (* register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,7,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN REGISTER(0);            (* return BIOS parameter block pointer *)
X
XEND getbpb;
X
X
XPROCEDURE bcostat( dev : CARDINAL ): LONGINT;  (* BIOS call #8 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,8,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0));   (* return device output status word *)
X
XEND bcostat;
X
X
XPROCEDURE mediach( dev :CARDINAL ): LONGINT;  (* BIOS call #9 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  SETREG(7,ADDRESS(dev));        (* put mass storage device number into *)
X                                    (* register D7 *)
X  CODE( 3F07H );                 (* push word D7 onto stack *)
X  CODE(3F3CH,9,4E4DH);   (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0));   (* return mass storage device media *)
X                                    (* status word *)
XEND mediach;
X  
X
XPROCEDURE drvmap(): LONGCARD;  (* BIOS call #10 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  CODE(3F3CH,10,4E4DH);  (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGCARD(REGISTER(0));  (* returns longword that maps active *)
X                                    (* storage units available *)
XEND drvmap;
X
X
XPROCEDURE kbshift( mode : LONGINT ) : LONGINT;  (* BIOS call *11 *)
X
XBEGIN;
X
X  CODE ( 7000H );                (* clear D0 register *)
X  SETREG(7,ADDRESS(mode));       (* put mode into register D7 *)
X  CODE( 2F07H );                 (* push longword D7 onto stack *)
X  CODE(3F3CH,11,4E4DH);  (* push call number onto stack and call TRAP #13 *)
X  RETURN LONGINT(REGISTER(0));   (* return shift key status word *)
X
XEND kbshift;
X
X
XEND BIOScalls.
SHAR_EOF
if test 6054 -ne "`wc -c 'bioscall.mod'`"
then
	echo shar: error transmitting "'bioscall.mod'" '(should have been 6054 characters)'
fi
#	End of shell archive
exit 0
-- 
					Jwahar R. Bammi
			       Usenet:  .....!decvax!cwruecmp!bammi
			        CSnet:  bammi@case
				 Arpa:  bammi%case@csnet-relay
			   CompuServe:  71515,155
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads