Difference between revisions of "Error messages"
(update) |
(Added RISC-V.) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 20: | Line 20: | ||
'''Not found''', '''XXXX not found''' and '''File 'XXXX' not found'''. | '''Not found''', '''XXXX not found''' and '''File 'XXXX' not found'''. | ||
However, the error number is consistantly 214. | However, the error number is consistantly 214. | ||
+ | |||
+ | On 32-bit platforms the error number is a 32-bit word, error numbers < 256 | ||
+ | are the same as 8-bit error numbers. | ||
==Raising an error== | ==Raising an error== | ||
Line 46: | Line 49: | ||
DEFB 0 | DEFB 0 | ||
− | === | + | ===PDP11=== |
EMT 15 | EMT 15 | ||
+ | DEFB err_num | ||
+ | DEFM err_string$ | ||
+ | DEFB 0 | ||
+ | |||
+ | Errors can also be returned to the caller: | ||
+ | ADR PDP11ErrorBlock,R0 ; Point R0 to error block | ||
+ | SEV ; Set Overflow flag | ||
+ | RTS PC ; Return to caller | ||
+ | .PDP11ErrorBlock | ||
DEFB err_num | DEFB err_num | ||
DEFM err_string$ | DEFM err_string$ | ||
Line 59: | Line 71: | ||
RET 0 ; Return to caller | RET 0 ; Return to caller | ||
.PanErrorBlock | .PanErrorBlock | ||
− | + | EQUD err_num16bit ; error numbers < 256 are the same as 8-bit error numbers | |
EQUB LEN err_string$ | EQUB LEN err_string$ | ||
EQUS err_string$ | EQUS err_string$ | ||
Line 70: | Line 82: | ||
EQUS err_string$ | EQUS err_string$ | ||
EQUB 0 | EQUB 0 | ||
+ | |||
+ | Errors can also be returned to the caller: | ||
+ | ADR R0,ArmErrorBlock ; Point R0 to error block | ||
+ | CMPVC R0,#1<<31 ; These two instructions | ||
+ | CMNVC R0,#1<<31 ; set the Overflow flag | ||
+ | MOV PC,LINK ; Return to caller | ||
+ | .ArmErrorBlock | ||
+ | EQUD err_num32bit ; error numbers < 256 are the same as 8-bit error numbers | ||
+ | EQUS err_string$ | ||
+ | EQUB 0 | ||
+ | |||
+ | ===RISC-V=== | ||
+ | ECALL &AC000F | ||
+ | EQUD err_num32bit ; error numbers < 256 are the same as 8-bit error numbers | ||
+ | EQUS err_string$ | ||
+ | EQUB 0 | ||
===BBC BASIC=== | ===BBC BASIC=== | ||
Line 77: | Line 105: | ||
==See also== | ==See also== | ||
+ | * [[Error messages]] | ||
* [[BASIC error messages]] | * [[BASIC error messages]] | ||
* [[System error messages]] | * [[System error messages]] | ||
+ | * [[6502 routines|Generating sideways ROM errors]] | ||
* [[Catching errors]] | * [[Catching errors]] | ||
* [[Talk:Error_messages|Discussion on new error numbers]] | * [[Talk:Error_messages|Discussion on new error numbers]] |
Latest revision as of 19:44, 10 September 2023
BBC computer errors are an 8-bit number and a string.
+---------------------------+ | error number, 1 byte | +---------------------------+ | error string, 1-254 bytes | +---------------------------+ | &00 | +---------------------------+
Error numbers < 128 (ie, b7=0) are language errors, error numbers > 127 (ie b7=1) are system (ie MOS, filing system, utility, etc.) errors. As BASIC's errors are all <64 (ie b7=0, b6=0), any error numbers used within a program for its own purposes should be 64-127 (ie b7=0, b6=1).
While the text of an error message can vary between situations, the error number must be consistant. For example, error 214 (&D6) is File not found, the string can vary between File not found, Not found, XXXX not found and File 'XXXX' not found. However, the error number is consistantly 214.
On 32-bit platforms the error number is a 32-bit word, error numbers < 256 are the same as 8-bit error numbers.
Raising an error
6502
BRK EQUB err_num EQUS err_string$ EQUB 0
Z80
RST &38 DEFB err_num DEFM err_string$ DEFB 0
6809/6811/6812
SWI DEFB err_num DEFM err_string$ DEFB 0
80x86
INT &4F DEFB err_num DEFM err_string$ DEFB 0
PDP11
EMT 15 DEFB err_num DEFM err_string$ DEFB 0
Errors can also be returned to the caller:
ADR PDP11ErrorBlock,R0 ; Point R0 to error block SEV ; Set Overflow flag RTS PC ; Return to caller .PDP11ErrorBlock DEFB err_num DEFM err_string$ DEFB 0
32016
Errors cannot be generated within PanOS, but they can be returned to the caller:
ADDR PanErrorBlock,R0 ; Point R0 to error block MOV [R0],R1 ; R1=error number SEF ; Set error flag RET 0 ; Return to caller .PanErrorBlock EQUD err_num16bit ; error numbers < 256 are the same as 8-bit error numbers EQUB LEN err_string$ EQUS err_string$
ARM
ADR R0,ArmErrorBlock ; ARM error block is word, string, &00 SWI "OS_GenerateError" ; &2B .ArmErrorBlock EQUD err_num32bit ; error numbers < 256 are the same as 8-bit error numbers EQUS err_string$ EQUB 0
Errors can also be returned to the caller:
ADR R0,ArmErrorBlock ; Point R0 to error block CMPVC R0,#1<<31 ; These two instructions CMNVC R0,#1<<31 ; set the Overflow flag MOV PC,LINK ; Return to caller .ArmErrorBlock EQUD err_num32bit ; error numbers < 256 are the same as 8-bit error numbers EQUS err_string$ EQUB 0
RISC-V
ECALL &AC000F EQUD err_num32bit ; error numbers < 256 are the same as 8-bit error numbers EQUS err_string$ EQUB 0
BBC BASIC
In BASICs that support the ERROR
command (BASIC V and some earlier versions):
ERROR err_num,err_string$