Files
sibo-playground/code/SIBOSDK/src/coreinit.a
T

258 lines
5.3 KiB
Plaintext
Raw Normal View History

2026-07-06 18:01:36 +01:00
(* Release 3.00 *)
(* c_coreinit - common initialisation between PLIB and CLIB *)
(* Copyright (C) 1991 Psion PLC. All Rights Reserved*)
(* Written by NSM.*)
include "corelib.inc"
include "epocdefs.inc"
module coreinit
(***************************************************************************)
section
segment _MAGIC(MAGIC,68H)
segment _DATA(DATA,68H)
segment _CONST(DATA,48H)
segment _BSS(BSS,68H)
segment BSS_END(BSS,68H)
group DGROUP(_MAGIC,_DATA,_CONST,_BSS,BSS_END)
select _DATA
public _winHandle : dw 0
public __conName : db 'CON:*',0
(***************************************************************************)
section
segment _DATA(DATA,68H)
public __DefScreenRect : dw -1,0,0,0
(***************************************************************************)
section
segment _DATA(DATA,68H)
public __DefScreenMode : dw 0
(****************************************************************************)
section
segment _TEXT(CODE,28H)
public __FatalErrorPos :
push bx
mov bx, sp
mov ax, ss:[bx][2]
pop bx
ret 0
(****************************************************************************)
section
segment _TEXT(CODE,28H)
public __FatalError :
mov al, 80
int ProcPanic
(****************************************************************************)
section
segment _TEXT(CODE,28H)
segment _DATA(DATA,28H)
extrn _winHandle
extrn _DatCommandPtr
extrn __DefScreenRect
extrn __DefScreenMode
extrn __conName
select _TEXT
extrn __FatalErrorPos
extrn __FatalError
xMode = -2
xParse = xMode-FullParseEnt
xBuf = xParse-MaxPathSize
public _p_xwind :
push bp
mov bp, sp
add sp, xBuf
push ax
push bx
push cx
push dx
push di
push si
;
mov bx, [_DatCommandPtr]
test bx, bx
je noCommandLine
sub cx, cx
lea di, [bp][xBuf]
lea si, [bp][xParse]
sub al, al
mov ah, NmFilParse
int FilManager
jc noCommandLine
lea di, [bp][xBuf]
mov si, __conName
int StringCopy
add di, 5
lea si, [bp][xBuf][FileSystemNameSize]
mov ax, [bp][xParse][FullParseDevice]
add al, ah
sub ah, ah
add si, ax
mov cl, [bp][xParse][FullParseName]
sub ch, ch
cld
rep ; movsb
sub al, al
stosb
jmp openCon
noCommandLine:
lea di, [bp][xBuf]
mov si, __conName
int StringCopy
mov byte [di][4], 0
openCon:
lea bx, [bp][xBuf]
mov cx, -1
mov ah, NmIoOpen
int DevManager
jnc openOk
;
call __FatalErrorPos
mov bx, FatalOpenConsole
jmp __FatalError
;
openOk: mov [_winHandle], ax
;
mov si, ds:[Datawserv_channel]
or si, si
jz old_window_server
mov al, [si][wserv_spec_info_version]
and al, 0FH
cmp al, 2 (* WS_VERSION_4 *)
jb old_window_server
;
sub sp, 32 (* SIZE W_SUPPORT_INFO *)
mov si, sp
mov ax, 0FF06H (* WOR_X_SUPPROT_INFO *)
int WservOpcodes
mov ax, [__DefScreenMode]
mov bx, [si]
add sp, 32 (* SIZE W_SUPPORT_INFO *)
;
test bx, 2 (* W_SUPPORT_CTBY_S3 *)
jz no_ctby_mode
test ax, 1 (* Use compatibility mode if set *)
jnz no_ctby_mode
push ax
push bx
mov word [bp][xMode], 20 (* P_SCR_COMPATIBILITY *)
lea cx, [bp][xMode]
xor ax, ax (* No compatibilty mode *)
push ax
mov dx, sp
mov bx, [_winHandle]
mov al, IoFuncSet
mov ah, NmIoWithWait
int IoManager
pop ax
pop bx
pop ax
;
no_ctby_mode:
test bx, 1 (* W_SUPPORT_CTBY_GREY *)
jz no_grey
test ax, 2 (* Use grey if set *)
jz no_grey
;
mov word [bp][xMode], 21 (* P_SCR_GREY *)
lea cx, [bp][xMode]
mov ax, TRUE
push ax
mov dx, sp
mov bx, [_winHandle]
mov al, IoFuncSet
mov ah, NmIoWithWait
int IoManager
pop ax
no_grey:
;
old_window_server:
mov di, __DefScreenRect
cmp word [di][RectTl][PointX], -1
jne rectGood
sub ax, ax
mov [di][RectTl][PointX], ax
mov [di][RectTl][PointY], ax
mov ah, NmGenLcdType
int GenManager
mov bx, 60
mov cx, 15
cmp al, Lcd240X80
jne try160X80
mov bx, 40
mov cx, 9
jmp setBr
try160X80:
cmp al, Lcd160X80
jne setBr
mov bx, 26
mov cx, 9
setBr:
mov [di][RectBr][PointX], bx
mov [di][RectBr][PointY], cx
rectGood:
mov word [bp][xMode], 5 (* P_SCR_WSET *)
lea cx, [bp][xMode]
mov dx, di
mov bx, [_winHandle]
mov al, IoFuncSet
mov ah, NmIoWithWait
int IoManager
;
mov word [bp][xMode], 3 (* P_SCR_POSA *)
lea cx, [bp][xMode]
xor ax, ax
push ax
push ax
mov dx, sp
mov al, IoFuncSet
mov ah, NmIoWithWait
int IoManager
;
lea di, [bp][xParse]
mov word [di], 1
mov dx, di
mov word [bp][xMode], 9 (* P_SCR_CURSOR *)
mov al, IoFuncSet
mov ah, NmIoWithWait
int IoManager
;
pop si
pop di
pop dx
pop cx
pop bx
pop ax
mov sp, bp
pop bp
ret 0
;
(****************************************************************************)
section
segment _TEXT(CODE,28H)
public _ClassTable :
public _ExtCatTable :
dw 0
end