bammi@cwruecmp.UUCP (Jwahar R. Bammi) (02/10/86)
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