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
Author: Jwahar R. Bammi
Date: Mon, 10 Feb 1986 08:14
Date: Mon, 10 Feb 1986 08:14
251 lines
9593 bytes
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