IOT: Difference between revisions
(IOT instruction stub) |
(IOT is an old version of MON) |
||
Line 1: | Line 1: | ||
{{InstructionBox | {{InstructionBox | ||
|Mnemonic=IOT | |Mnemonic=IOT | ||
|Description= | |Description=Perform monitor call | ||
|Format=IOT SKA | |Format=IOT SKA <number> | ||
|Code=161 000 | |Code=161 000 | ||
|Affected= | |Affected= Various registers, depending on <number> | ||
|Type=User | |Type=User | ||
|Architecture=[[NORD-1]] | |Architecture=[[NORD-1]] | ||
}} | }} | ||
'''IOT''', or '''IOT SKA''' is an undocumented instruction used by very old applications like [[NPL]]. Old ND system applications tend to keep old code even when updated. This instruction is probably from NORD-1. | '''IOT''', or '''IOT SKA''' is an undocumented instruction used by very old applications like [[NPL]]. Old ND system applications tend to keep old code even when updated. This instruction is probably from [[NORD-1]]. | ||
The [[BRF EDITOR]] command ''LIST-BRF'' is aware of 161.xxx instructions and lists them as '''IOT SKA'''. The [[BRF Linker]] will only list the | The [[BRF EDITOR]] command ''LIST-BRF'' is aware of 161.xxx instructions and lists them as '''IOT SKA'''. The [[BRF Linker]] ''LIST-BRF-CODE'' command will only list the octal value, and no mnemonic. | ||
The instruction pre-dates [[SINTRAN-III]] and the [[NORD-10]]/[[ND-100|N1xx]] CPUs, but applications using this instruction, within a certain range of <number> values, are still able to execute on the newer systems due to a trick explained below. This allows applications like [[NPL]] to work. | |||
==== Implementation details ==== | |||
The instruction does not exist in the NORD-10/ND-1x0 CPUs, so it will trigger an ''Illegal instruction'' exception in SINTRAN-III. The snippet of SINTRAN-III code which handles the exception looks as follows: <ref>SIN-L STD A listing part two, March 1989</ref> | |||
<pre> | |||
072404 IIC06: IF ACTLV=ALEVL THEN % PRIVILIGED INSTRUCTION | |||
072410 RTREF.ACTPRI/\74000 SHZ -4+"NMPIT+LV14B+ERNG2"% SET USERS NORMAL PIT AS ALT. PIT | |||
072415 X:=PERR; *TRR PCR | |||
072417 X.SN1=:D % D= THE ILL.INSTR. | |||
072421 "NMPIT+ADPIT+LV14B+ERNG2"; *TRR PCR % RESET PCR | |||
072423 IF 177600/\D=161000 THEN T:=177/\D; GO FAR MONCALL FI % IF 161XXX THEN MONCALL | |||
072433 IBITNO; T:=PERR; CALL 9ERR(#24) % GIVE ERROR MESSAGE | |||
072437 GO FAR ABOR % TERMINATE CURRENT RUNNING PROGRAM | |||
072440 FI; GO FAR TDTLEV % MAY BE ILL.INSTRUCTION ON ILLEGAL LEVEL | |||
</pre> | |||
The NPL code '''IF 177600/\D=161000 THEN T:=177/\D; GO FAR MONCALL FI''' translates to the following pseudocode: | |||
<pre> | |||
if instruction is in the 161000 (octal) range, and <number> is in the range 0x00-0x7f, then | |||
handle as monitor call (<number>) | |||
else | |||
handle as any other illegal instruction, abort program | |||
endif | |||
</pre> | |||
The illegal instruction error handler detects if the instruction is an 161000 instruction, and, if so, handles it as a [[MON]] instruction (153000<sub><small>8</small></sub>), i.e. a monitor call (within the allowed range for <number>), instead of aborting the program. The instruction is thus an old version of the [[MON]] instruction, and the old calls map one-to-one to the SINTRAN-III functions as long as they are below 128 decimal (i.e. up to and including 'MON 177'). | |||
'' 'IOT SKA', as used by the BRF EDITOR, may possibly stand for 'IOT Systemkall' which translates to 'IOT System Call' from Norwegian.'' | |||
== References == | == References == | ||
<references/> | |||
*{{ND-doc|60.228.1}} | |||
[[Category:ND-100 instructions]] | [[Category:ND-100 instructions]] |
Revision as of 15:30, 4 August 2010
IOT | |
---|---|
Description | Perform monitor call |
Format | IOT SKA <number> |
Code | 161 0008 |
Affected | Various registers, depending on <number> |
Type | User |
Architecture | NORD-1 |
IOT, or IOT SKA is an undocumented instruction used by very old applications like NPL. Old ND system applications tend to keep old code even when updated. This instruction is probably from NORD-1.
The BRF EDITOR command LIST-BRF is aware of 161.xxx instructions and lists them as IOT SKA. The BRF Linker LIST-BRF-CODE command will only list the octal value, and no mnemonic.
The instruction pre-dates SINTRAN-III and the NORD-10/N1xx CPUs, but applications using this instruction, within a certain range of <number> values, are still able to execute on the newer systems due to a trick explained below. This allows applications like NPL to work.
Implementation details
The instruction does not exist in the NORD-10/ND-1x0 CPUs, so it will trigger an Illegal instruction exception in SINTRAN-III. The snippet of SINTRAN-III code which handles the exception looks as follows: [1]
072404 IIC06: IF ACTLV=ALEVL THEN % PRIVILIGED INSTRUCTION 072410 RTREF.ACTPRI/\74000 SHZ -4+"NMPIT+LV14B+ERNG2"% SET USERS NORMAL PIT AS ALT. PIT 072415 X:=PERR; *TRR PCR 072417 X.SN1=:D % D= THE ILL.INSTR. 072421 "NMPIT+ADPIT+LV14B+ERNG2"; *TRR PCR % RESET PCR 072423 IF 177600/\D=161000 THEN T:=177/\D; GO FAR MONCALL FI % IF 161XXX THEN MONCALL 072433 IBITNO; T:=PERR; CALL 9ERR(#24) % GIVE ERROR MESSAGE 072437 GO FAR ABOR % TERMINATE CURRENT RUNNING PROGRAM 072440 FI; GO FAR TDTLEV % MAY BE ILL.INSTRUCTION ON ILLEGAL LEVEL
The NPL code IF 177600/\D=161000 THEN T:=177/\D; GO FAR MONCALL FI translates to the following pseudocode:
if instruction is in the 161000 (octal) range, and <number> is in the range 0x00-0x7f, then handle as monitor call (<number>) else handle as any other illegal instruction, abort program endif
The illegal instruction error handler detects if the instruction is an 161000 instruction, and, if so, handles it as a MON instruction (1530008), i.e. a monitor call (within the allowed range for <number>), instead of aborting the program. The instruction is thus an old version of the MON instruction, and the old calls map one-to-one to the SINTRAN-III functions as long as they are below 128 decimal (i.e. up to and including 'MON 177').
'IOT SKA', as used by the BRF EDITOR, may possibly stand for 'IOT Systemkall' which translates to 'IOT System Call' from Norwegian.
References
- ↑ SIN-L STD A listing part two, March 1989
- Norsk Data Document ND–60.228.1 SINTRAN III Monitor Calls manual