Subversion Repositories SvarDOS

Rev

Rev 1863 | Rev 1866 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1863 Rev 1864
Line 469... Line 469...
469
; set DS to myself
469
; set DS to myself
470
push cs
470
push cs
471
pop ds
471
pop ds
472
 
472
 
473
; is this a DISK error?
473
; is this a DISK error?
474
;test ah, 0x80
474
test ah, 0x80
475
;jz DISKERROR
475
jz DISKERROR
476
; non-disk error: output "CRITICAL ERROR #XXX SYSTEM HALTED" and freeze
476
; non-disk error: output "CRITICAL ERROR #XXX SYSTEM HALTED" and freeze
477
; update the crit string so it contains the proper error code
477
; update the crit string so it contains the proper error code
478
mov bx, CRITERR
478
mov bx, CRITERRSYST+1
479
mov ax, di
479
mov ax, di
480
xor ah, ah
480
xor ah, ah
481
mov cl, 100
481
mov cl, 100
482
div cl ; AL = AX / cl     AH = remainder
482
div cl ; AL = AX / cl     AH = remainder
483
add al, '0'
483
add al, '0'
484
mov [bx+16], al
484
mov [bx], al
-
 
485
inc bx
485
 
486
 
486
mov al, ah
487
mov al, ah
487
xor ah, ah
488
xor ah, ah
488
mov cl, 10
489
mov cl, 10
489
div cl
490
div cl
490
add al, '0'
491
add al, '0'
491
add ah, '0'
492
add ah, '0'
492
mov [bx+17], al
493
mov [bx], al
-
 
494
inc bx
493
mov [bx+18], ah
495
mov [bx], ah
494
 
496
 
495
; display the string
497
; display the string
496
mov ah, 0x09
498
mov ah, 0x09
497
mov dx, CRITERR
499
mov dx, CRITERR
498
int 0x21
500
int 0x21
-
 
501
mov dx, CRITERRSYST
-
 
502
int 0x21
499
; freeze the system
503
; freeze the system
500
HALT:
504
HALT:
501
sti
505
sti
502
hlt;
506
hlt;
503
jmp HALT
507
jmp HALT
504
 
508
 
505
DISKERROR:
509
DISKERROR:
506
; disk errors product this message:
510
; disk errors produce this message:
507
; CRITICAL ERROR - DRIVE A: - READ|WRITE FAILURE
511
; CRITICAL ERROR - DRIVE A: - READ|WRITE FAILURE
508
; (A)bort, (R)etry, (F)ail
512
; (A)bort, (R)etry, (F)ail
-
 
513
mov dh, ah      ; backup AH flags into CH
-
 
514
add al, 'A'
-
 
515
mov [CRITERRDISK+6], al
-
 
516
mov ah, 0x09
-
 
517
mov dx, CRITERR
-
 
518
int 0x21
-
 
519
mov dx, CRITERRDISK
509
;
520
int 0x21
-
 
521
; READ / WRITE (test flag 0x01, set = write, read otherwise)
510
; non-disk errors produce this:
522
mov dx, CRITERRDSK_WRITE
-
 
523
test ch, 1
-
 
524
jnz WRITE
511
; CRITICAL ERROR #errno
525
mov dx, CRITERRDSK_READ
512
 
526
WRITE:
-
 
527
int 0x21
-
 
528
mov dx, CRITERRDSK_FAIL
-
 
529
int 0x21
-
 
530
jmp HALT
513
 
531
 
514
; restore registers and quit the handler
532
; restore registers and quit the handler
515
popf
533
popf
516
pop ds
534
pop ds
517
pop dx
535
pop dx
Line 519... Line 537...
519
pop bx
537
pop bx
520
pop ax
538
pop ax
521
 
539
 
522
iret
540
iret
523
 
541
 
-
 
542
CRITERR db "CRITICAL ERROR - $"
524
CRITERR db "CRITICAL ERROR #XXX SYSTEM HALTED$"
543
CRITERRSYST db "#XXX SYSTEM HALTED$"
-
 
544
CRITERRDISK db "DRIVE @: - $"
-
 
545
CRITERRDSK_READ db "READ$"
-
 
546
CRITERRDSK_WRITE db "WRITE$"
-
 
547
CRITERRDSK_FAIL db " FAILURE$"