Home of the original IBM PC emulator for browsers.
[PCjs Machine "ibm5150"]
Waiting for machine "ibm5150" to load....
The Pascal programs on this disk show how to do disk I/O with Pascal. PASCAL I/O is logical well written and documented code. At the heart of PASCAL I/O is INTRPT.OBJ which in conjunction with IOSTUFF.OBJ and IOSTUFF.INC demonstrate IBM I/O routines in Pascal. Also included is DISKREAD which displays the disk contents using IBM BIOS. System Requirements: An IBM PASCAL compiler. How to Start: To read documentation enter: TYPE IOSTUFF.DOC. To run a .PAS program, load Pascal, compile and run. File Descriptions: INTRPT ASM Source for INTRPT.OBJ IOSTUFF DOC Describes files below DISKREAD OBJ Object for DISKREAD.EXE DISKREAD EXE Displays disk contents by sector INTRPT OBJ Object to be linked to your Pascal program object DISKREAD PAS Source for DISKREAD.OBJ IOSTUFF OBJ Object to be linked to your Pascal program object IOSTUFF INC Source to be INCLUDED with your Pascal program source IOSTUFF PAS Source for IOSTUFF object PRIME PAS Source for DEMO SAMPLE PAS Source for DEMO
PC-SIG Disk No. #30, version v1 The following is a list of the file checksums which should be produced by the CRCK4 program on disk #9 (and others). If the CRC numbers do not match you may have a bad file. To use type: CRCK4 <filespec> CRCK4 output for this disk: CRCK ver 4.2B (MS DOS VERSION ) CTL-S pauses, CTL-C aborts --> FILE: IOSTUFF .DOC CRC = 3D 2E --> FILE: IOSTUFF .OBJ CRC = 90 F2 --> FILE: IOSTUFF .PAS CRC = D5 A7 --> FILE: IOSTUFF .INC CRC = 2F 08 --> FILE: DISKREAD.EXE CRC = E9 44 --> FILE: DISKREAD.OBJ CRC = 33 0A --> FILE: DISKREAD.PAS CRC = 2F 81 --> FILE: PRIME .PAS CRC = 0C 1A --> FILE: INTRPT .OBJ CRC = 34 B3 --> FILE: SAMPLE .PAS CRC = B4 95 --> FILE: INTRPT .ASM CRC = F8 38 ---------------------> SUM OF CRCS = 0C 38 DONE These and other Public Domain and user-supported programs from: PC Software Interest Group 1125 Stewart Ct Suite G Sunnyvale, CA 94086 (408) 730-9291
NAME INTRPT ;********************************************************************** ;* * ;* INTERRUPT HANDLER FOR USE WITH IBM PERSONAL COMPUTER PASCAL * ;* PROGRAMS TO ALLOW DIRECT CALLING OF DOS INTERRUPT FUNCTIONS * ;* FROM WITHIN A PASCAL PROGRAM. * ;* * ;********************************************************************** ; ; FRAME STRUC ;Define structure (DSECT) SAVEBP DW ? ;Caller's BP SAVERET DD ? ;Four byte return address ;pushed by PASCAL DXREG DW ? ;Address of word with DX value CXREG DW ? ;Address of word with CX value BXREG DW ? ;Address of word with BX value AXREG DW ? ;Address of word with AX value NUMBER DW ? ;Interrupt to be performed FRAME ENDS ; CSEG SEGMENT 'CODE' DGROUP GROUP DATA,STACK,CONST,HEAP,MEMORY ASSUME CS:CSEG,DS:DGROUP,ES:DGROUP,SS:DGROUP INTRPT PROC FAR PUBLIC INTRPT PUSH BP MOV BP,SP ;Point SP at FRAME structure MOV AL,BYTE PTR [BP].NUMBER ;Move the interrupt number ;into the right place MOV CS:INTERUPT+1,AL MOV SI,[BP].AXREG ;Set up regs for interrupt MOV AX,[SI] MOV SI,[BP].BXREG MOV BX,[SI] MOV SI,[BP].CXREG MOV CX,[SI] MOV SI,[BP].DXREG MOV DX,[SI] PUSH BP INTERUPT EQU THIS BYTE ;Perform the interrupt INT 16 POP BP MOV SI,[BP].AXREG ;Save the registers in ;VAR parameters, so that ;Pascal can access them MOV [SI],AX MOV SI,[BP].BXREG MOV [SI],BX MOV SI,[BP].CXREG MOV [SI],CX MOV SI,[BP].DXREG MOV [SI],DX POP BP RET 10 INTRPT ENDP CSEG ENDS END
IBM PASCAL UTILITY I/O SUBROUTINES ---------------------------------- by Brian Irvine This is a short description of the Pascal routines provided in the Unit IOSTUFF.PAS and its accompanying files IOSTUFF.INC and INTRPT.ASM. These files together, when assembled, compiled and linked with a host program written in Pascal, provide a set of utility procedures for screen manipulation which are not available as built-in procedures or functions in the IBM Pascal compiler. They also provide low-level access to the diskettes installed by allowing the programmer to read any sector into memory for examination. The pivotal mechanism in all this is the small assembly language routine INTRPT.ASM. This routine allows the programmer to access all the machine language code in the PC's ROM BIOS. These functions and their access mechanisms are detailed in the Technical Reference Manual, Appendix A. There are no built-in screen and cursor manipulation functions in the IBM Pascal compiler. The programmer is obliged to write his own routines to service the display in the way he wishes. However, there are many functions already available in the ROM, the only question is how to access them. This is where INTRPT.ASM comes into play. INTRPT.ASM is an interfacing routine which accepts five parameters passed to it in a stack frame by a calling Pascal procedure or function. These variables are the number of the interrupt to be generated, and values to place in the four 8088 registers AX, BX, CX and DX. The variables passed to INTRPT are word length and can therefore be used to pass two byte values for use in the high and low bytes of the registers. INTRPT then places the values passed into their proper locations and executes an interrupt. This passes control to the desired routine which then does its thing. When the ROM routine is done, it returns control to INTRPT, which places the returned values in the AX, BX, CX and DX registers back in the stack frame to be returned to Pascal. INTRPT then passes control back to the Pascal calling routine and we are back in our application program. The file IOSTUFF.INC is the include file which must be included in your Pascal source file before any of the routines or variables are used. This file contains a list of all the procedure names, variable names and variable type definitions. It also contains all the Procedure calls and the variables passed to and from them. The file IOSTUFF.PAS is the source code for all the procedures which access the INTRPT procedure. It is the Implementation of the Unit IOSTUFF. This file is not to be included in your source program, but rather the compiled version IOSTUFF.OBJ must be linked in with the object code from the application program and with the object code INTRPT.OBJ. This is done with a Linker command of the form: LINK MYPROG IOSTUFF INTRPT; This will cause the IBM Link facility to generate an EXE file with all the proper code in the right place, etc. For further information on using Units in Pascal, see the compiler manual, pages 13-11 to 13-17. All the routines in the IOSTUFF Unit are fairly well documented and most of them are simple routines. The parameters used and the functions or procedures performed are self-explanatory. There is not much checking for valid data performed in the procedures themselves. This is left up to the programmer to control as he wishes. There are also many functions in the ROM which are not implemented in this Unit. If you come up with some terrific new application, let me know. I think this system could be used effectively to create some good graphics routines for Pascal, since it lets you get to the bit level on the screen. Also, the access to the printer port through ROM has not been implemented nor has the access to the COM port. These are things which I would like to do in the future. All I need is about 2 months off work with pay. The program DISKREAD is a demonstration of some of the procedures in IOSTUFF, especially the ability to read any sector on the disk. It also demonstrates setting the cursor size and positioning the cursor on the screen. The program is not complete by any means, and the functions it performs are not very complicated. There are three commands not shown on the bottom line, they are: F1 - Input new Drive/Side/Track/Sector F2 - Toggle the radix for Drive/Side/Track/Sector from decimal to hex and back T - Fills the sector buffer with a test pattern of all characters in the PC's character generator ROM. Since this program prints ALL codes in the ROM, you may not be able to do a PrtSc since it may send your printer into the Thulies. Now there's a good application for writing a procedure using this method! Brian Irvine 3379 St Marys Place Santa Clara, CA 95051 (408) 984-8692 2/24/83
Volume in drive A has no label Directory of A:\ CRC TXT 1075 11-09-84 8:51a CRCK4 COM 1536 10-21-82 7:54p DISKREAD EXE 37632 2-24-83 9:31a DISKREAD OBJ 7154 2-24-83 9:31a DISKREAD PAS 7507 2-24-83 9:28a INTRPT ASM 1685 11-25-82 8:45p INTRPT OBJ 234 11-25-82 8:45p IOSTUFF DOC 5203 2-24-83 5:41p IOSTUFF INC 5142 2-24-83 9:56a IOSTUFF OBJ 7105 2-24-83 9:59a IOSTUFF PAS 7340 2-24-83 9:56a PRIME PAS 723 1-22-83 2:37p SAMPLE PAS 4822 11-20-82 9:12a 13 file(s) 87158 bytes 69632 bytes free