Subversion Repositories Kolibri OS

Rev

Rev 7696 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7696 Rev 7983
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2019, Anton Krotov
4
    Copyright (c) 2019-2020, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 37... Line 37...
37
    HP = 14;
37
    HP = 14;
Line 38... Line 38...
38
 
38
 
Line 39... Line 39...
39
    LenIV* = 32;
39
    LenIV* = 32;
-
 
40
 
40
 
41
    iv          = 10000H - LenIV * 2;
41
    iv          = 10000H - LenIV * 2;
42
    bsl         = iv - 2;
42
    sp          = iv - 2;
43
    sp          = bsl - 2;
43
    empty_proc* = sp - 2;
44
    empty_proc* = sp - 2;
44
    free_size   = empty_proc - 2;
45
    free_size   = empty_proc - 2;
45
    free_adr    = free_size - 2;
46
    free_adr    = free_size - 2;
Line 368... Line 369...
368
        Word1(2000H + 400H - 7);      (*  JNZ  L2                  *)
369
        Word1(2000H + 400H - 7);      (*  JNZ  L2                  *)
369
                                      (*  L1:                      *)
370
                                      (*  L1:                      *)
370
        Word1(4130H)                  (*  RET                      *)
371
        Word1(4130H)                  (*  RET                      *)
371
    END;
372
    END;
Line 372... Line 373...
372
 
373
 
373
    (* _error (module, err, line: INTEGER) *)
374
    (* _error (modNum, modName, err, line: INTEGER) *)
374
    IF rtl[_error].used THEN
375
    IF rtl[_error].used THEN
375
        Label(rtl[_error].label);
376
        Label(rtl[_error].label);
376
        Word1(0C232H);               (*  BIC   #8, SR; DINT                 *)
377
        Word1(0C232H);               (*  BIC   #8, SR; DINT                 *)
377
        Word1(4303H);                (*  MOV   R3, R3; NOP                  *)
378
        Word1(4303H);                (*  MOV   R3, R3; NOP                  *)
-
 
379
        Word2(4114H, 2);             (*  MOV   2(SP), R4; R4 <- modNum      *)
378
        Word2(4114H, 2);             (*  MOV   2(SP), R4; R4 <- module      *)
380
        Word2(4115H, 4);             (*  MOV   4(SP), R5; R5 <- modName     *)
379
        Word2(4115H, 4);             (*  MOV   4(SP), R5; R5 <- err         *)
381
        Word2(4116H, 6);             (*  MOV   6(SP), R6; R6 <- err         *)
380
        Word2(4116H, 6);             (*  MOV   6(SP), R6; R6 <- line        *)
382
        Word2(4117H, 8);             (*  MOV   8(SP), R7; R7 <- line        *)
-
 
383
        Word2(4211H, sp);            (*  MOV   sp(SR), SP                   *)
381
        Word2(4211H, sp);            (*  MOV   sp(SR), SP                   *)
384
        Word1(1207H);                (*  PUSH  R7                           *)
382
        Word1(1206H);                (*  PUSH  R6                           *)
-
 
383
        Word1(1204H);                (*  PUSH  R4                           *)
385
        Word1(1206H);                (*  PUSH  R6                           *)
-
 
386
        Word1(1205H);                (*  PUSH  R5                           *)
384
        Word1(1205H);                (*  PUSH  R5                           *)
387
        Word1(1204H);                (*  PUSH  R4                           *)
385
        Word2(4214H, trap);          (*  MOV   trap(SR), R4                 *)
388
        Word2(4214H, trap);          (*  MOV   trap(SR), R4                 *)
386
        Word1(9304H);                (*  TST   R4                           *)
389
        Word1(9304H);                (*  TST   R4                           *)
387
        Word1(2400H + 1);            (*  JZ    L                            *)
390
        Word1(2400H + 1);            (*  JZ    L                            *)
388
        Word1(1284H);                (*  CALL  R4                           *)
391
        Word1(1284H);                (*  CALL  R4                           *)
Line 661... Line 664...
661
PROCEDURE Init* (pLabel, pWord, pCall: EMITPROC; ramSize: INTEGER);
664
PROCEDURE Init* (pLabel, pWord, pCall: EMITPROC; ramSize: INTEGER);
662
BEGIN
665
BEGIN
663
    Label := pLabel;
666
    Label := pLabel;
664
    Word  := pWord;
667
    Word  := pWord;
665
    Call  := pCall;
668
    Call  := pCall;
666
 
-
 
667
    IF ramSize > 2048 THEN
-
 
668
        ram := 1100H
-
 
669
    ELSE
-
 
670
        ram := 200H
669
    ram   := 200H;
671
    END;
-
 
672
    trap := ram;
670
    trap  := ram;
673
    int  := trap + 2
671
    int   := trap + 2
674
END Init;
672
END Init;