DECLARE SUB SetData (sData AS STRING)
DECLARE FUNCTION GetData$ ()
DECLARE SUB SetBootDriveLetter (DriveLetter AS INTEGER)
DECLARE FUNCTION GetCaller$ ()
DECLARE SUB SetCaller (program AS STRING)
DECLARE FUNCTION GetBootDriveLetter ()
DECLARE FUNCTION GetVersionMajor! ()
DECLARE FUNCTION GetVersionMinor! ()
DECLARE FUNCTION GetVersionRevision! ()
DECLARE FUNCTION GetVersionCPU! ()
DECLARE SUB SetVersion (Major AS INTEGER, Minor AS INTEGER, Revision AS INTEGER, CPU AS INTEGER)
'The Following Routines Are For pc/OS 6 Program Execution
'(C) 2004 Peter Chapman
'
'You Need These to Write Programs For pc/OS 6
'I Give Permission For You To Learn From These Functions And To Use However
'You Wish, BUT If You Are Programming For pc/OS 6, They Must Remain Unchanged.
'
'pc/OS 6 Memory Map
'
'1584:6400 Drive Letter
'1584:6401 VersionMajor
'1584:6402 VersionMinor
'1584:6403 VersionRevision
'1584:6404 VersionCPU
'1584:6405 Caller
'1584:.... ...
'1584:???? CHR$(255)
'1584:???1 Data For Program
'1584:.... ...
'1584:???? CHR$(255)
'
'pc/OS Program Execution Sample
'
'SetCaller("C:\myprog.exe")
'chain "yourprog.exe"
'
'
'pc/OS Program Exit Sample
'
'chain GetCaller
'Set To Version 6.0.0.86
SetVersion 6, 0, 0, 86
'Set Caller Program
SetCaller "C:\pcos6.exe"
'Set Data
SetData "This Is A Command Line Arguement."
'Set Boot Drive Letter To A:\
SetBootDriveLetter (ASC("A"))
'Get Caller Program
PRINT "Caller Program: " + GetCaller
'Get Data
PRINT "Data: " + GetData$
'Get Boot Drive Letter
PRINT "Boot Drive Letter: " + CHR$(GetBootDriveLetter)
END
FUNCTION GetBootDriveLetter
DEF SEG = &H1584
GetBootDriveLetter = PEEK(&H6400)
END FUNCTION
FUNCTION GetCaller$
DIM Char AS INTEGER
DIM prog AS STRING
DEF SEG = &H1584
C = &H6405
DO
Char = PEEK(C)
prog = prog + CHR$(Char)
C = C + 1
LOOP UNTIL Char = 255
GetCaller$ = LEFT$(prog, LEN(prog) - 1)
END FUNCTION
FUNCTION GetData$
DIM Char AS INTEGER
DIM prog AS STRING
DIM sData AS STRING
DEF SEG = &H1584
C = &H6405
'Find Caller
DO
Char = PEEK(C)
prog = prog + CHR$(Char)
C = C + 1
LOOP UNTIL Char = 255
'Find Data
DO
Char = PEEK(C)
sData = sData + CHR$(Char)
C = C + 1
LOOP UNTIL Char = 255
GetData$ = LEFT$(sData, LEN(sData) - 1)
END FUNCTION
FUNCTION GetVersionCPU
DEF SEG = &H1584
GetVersionCPU = PEEK(&H6404)
END FUNCTION
FUNCTION GetVersionMajor
DEF SEG = &H1584
GetVersionMajor = PEEK(&H6401)
END FUNCTION
FUNCTION GetVersionMinor
DEF SEG = &H1584
GetVersionMinor = PEEK(&H6402)
END FUNCTION
FUNCTION GetVersionRevision
DEF SEG = &H1584
GetVersionRevision = PEEK(&H6403)
END FUNCTION
SUB SetBootDriveLetter (DriveLetter AS INTEGER)
DEF SEG = &H1584
POKE &H6400, DriveLetter
END SUB
SUB SetCaller (program AS STRING)
DEF SEG = &H1584
C = &H6405
D = LEN(program)
FOR I = 0 TO D
IF I = D THEN
POKE C, 255
ELSE
POKE C, ASC(LEFT$(program, 1))
program = RIGHT$(program, LEN(program) - 1)
END IF
C = C + 1
NEXT I
END SUB
SUB SetData (sData AS STRING)
DIM Char AS INTEGER
DIM prog AS STRING
DEF SEG = &H1584
C = &H6405
'Find Caller
DO
Char = PEEK(C)
prog = prog + CHR$(Char)
C = C + 1
LOOP UNTIL Char = 255
'Set Data
D = LEN(sData)
FOR I = 0 TO D
IF I = D THEN
POKE C, 255
ELSE
POKE C, ASC(LEFT$(sData, 1))
sData = RIGHT$(sData, LEN(sData) - 1)
END IF
C = C + 1
NEXT I
END SUB
SUB SetVersion (Major AS INTEGER, Minor AS INTEGER, Revision AS INTEGER, CPU AS INTEGER)
DEF SEG = &H1584
POKE &H6401, Major
POKE &H6402, Minor
POKE &H6403, Revision
POKE &H6404, CPU
END SUB