335B TransferData¶
Stub MON 335B (221 decimal) · Mnemonic EXABS · Group: Input and Output Monitor Calls (manual section 2.5)
Available from: RT programs (manual compatibility box)
Emulation source: src/handlers/mon_335B_TransferData.c
Description¶
Transfers data between physical memory and a mass-storage device, e.g. a disk. You may perform various device control functions. This monitor call is mainly used by the operating system itself.
Notes¶
- The program must run on ring 2. You may use any page table. Both demand and non-demand segments are legal. Memory areas for DMA transfer must be fixed contiguously.
- For calls to magnetic tape or other devices where the last parameter contains number of bytes/words read or other return parameters, the parameter list must be in resident memory, i.e. an area with fixed page-table contents.
- The physical memory area must be contiguous. Older versions of magnetic tapes or disk controllers cannot cross physical memory-bank boundaries of 128 Kbytes. These magnetic tapes have ND numbers less than ND-537. The disks have ND numbers less than ND-559.
- Only two programs may execute TransferData at a time.
Parameters¶
| Name | Type | Direction | Description |
|---|---|---|---|
DeviceNumber |
INTEGER | In | Logical device number. |
Func |
INTEGER | In | Function code. |
MemAddr |
INTEGER | In | Physical memory address. |
BlockAddr |
INTEGER | In | Block address on device. |
NoOfBlocks |
INTEGER | In/Out | Number of blocks to transfer. |
ReturnStatus |
INTEGER | Out | Return status. |
Direction: In = the program supplies the value, Out = the call returns it, In/Out = both.
See also¶
DataTransfer, ReadFromFile, and WriteToFile
Compatibility¶
| Machines | Users | Programs |
|---|---|---|
| ND-100 | User RT and user SYSTEM | RT programs |
The manual's compatibility box for this call, word for word.
Yes/no fields from the YAML extraction (not in the manual's words):
| ND-100 | ND-500 | User programs | RT programs | System programs |
|---|---|---|---|---|
| No | Yes | No | No | No |
Disagreement
The manual box says ND-100, but the yes/no fields say ND-100 = No, ND-500 = Yes. The manual box is the source.
Examples¶
From the manual (OCR text, not corrected).
INTEGER : DeviceNumber, Func, ReturnStatus
INTEGERA : MemAddr, BlockAddr, NoOfBlocks
...
Monitor_Call('TransferData', DeviceNumber, Func, MemAddr, &
BlockAddr, NoOfBlocks, ReturnStatus)
INTEGER DeviceNumber, Func, ReturnStatus
INTEGER*4 MemAddr, BlockAddr, NoOfBlocks
...
Monitor_Call('TransferData', DeviceNumber, Func, MemAddr,
BlockAddr, NoOfBlocks, ReturnStatus)
DeviceNumber, Func, RetStatus : INTEGER2;
MemAddr, BlockAddr, NoOfBlocks : LONGINT;
...
TransferData(DeviceNumber, Func, MemAddr, BlockAddr, NoOfBlocks, RetStatus);
01 DeviceNumber COMP.
01 Func COMP.
01 ReturnStatus COMP.
01 MemAddr COMP PIC S9(10).
01 BlockAddr COMP PIC S9(10).
01 NoOfBlocks COMP PIC S9(10).
...
MONITOR-CALL "TransferData" USING DeviceNumber, Func, MemAddr,
BlockAddr, NoOfBlocks, ReturnStatus.
LDT DEVNO %Logical device number.
LDA (PAR %Load register A with address of parameter list.
MON 335 %Monitor call DataTransfer.
JAN ERROR %Error if register A is negative.
... %Continue with processing.
ERROR, ... %Error number in register A.
| DEVNO, ... | |
|------------|-------|
| PAR, FUNC | %Function code etc. |
| | DMEM %Memory address. |
| | BLOCK %Block address. |
| | NOBLK %Number of blocks to transfer. |
| FUNC, ... | |
|-----------|-------|
| DMEM, 0:0 | %These three parameters are 32-bit long. Use |
| BLOCK, 0:0| %the most significant word for 16-bit parameters. |
| NOBLK, 0:0| % |
ndmonlib implementation¶
Stub Registered MON_STATUS_NOT_IMPLEMENTED: the handler is a stub. mon_dispatch() in src/core/mon_dispatch.c reports the call as unimplemented without calling it.
| Handler | mon_335B_TransferData |
| Code lines | 10 (non-blank, non-comment lines in the file) |
Source¶
SINTRAN III Monitor Calls (ND-860228.2 EN), page 545.