← DL-Pascal collectioncov12.log
DOWNLOAD ORIGINAL FILE
=== Cov12: Segments, Far Pointers & Memory ===
--- SECTION A: Standard Pascal Pointer Features ---
=== A1: Near Pointers (^) ===
Near pointers: bank 1 only, 2 bytes
OK Near non-nil
OK Near deref
OK Near write
OK Addr roundtrip
OK New Byte non-nil
OK New Byte deref
OK New Byte modify
OK New Word deref
OK Multi alloc b
OK Multi alloc w
OK Real ptr deref
MemAvail after: 15209
=== A2: Seg / Ofs / Ptr / Addr ===
Seg() returns bank number (0..3) as Integer
Ofs() DOC BUG: manual says Word but returns LongInt
For bank 1 vars: Ofs = 65536 + raw_offset
For bank 0/2 vars: Ofs = raw_offset only
Use fp.offset via FarPtr record for true raw offset
Seg(n) = 1
OK Seg(n) = 1
Seg(copyRight) = 0
OK Seg(copyRight)=0
Seg(charBuf) = 1
OK Seg(charBuf)=1
Seg(gfxBuf) = 1
OK Seg(gfxBuf)=1
Seg(ram2start) = 2
OK Seg(ram2start)=2
Seg(ram2end) = 2
OK Seg(ram2end)=2
Ofs(n) runtime = 22009
OK Ofs(n) > 0
Ofs(charBuf) = 65792
Ofs(gfxBuf) = 66048
Ofs(copyRight) = 65511
Ofs(ram2start) = 32768
Ofs(ram2end) = 65535
DOC BUG: Ofs() returns LongInt not Word
OK Ptr non-nil
OK Addr non-nil
OK Addr charBuf
OK Addr ram2start
=== A3: FarPtr Record Structure ===
Far pointer internal layout: Word(offset) + Word(segment)
fp.segment = 1
fp.offset = 21999
OK FarPtr seg=1
OK FarPtr ofs>0
OK Seg matches
OK Ofs = raw offset
ROM seg = 0
ROM ofs = 65511
OK ROM fp seg=0
OK ROM fp ofs=$FFE7
RAM2 seg = 2
RAM2 ofs = 32768
OK RAM2 fp seg=2
OK RAM2 fp ofs=$8000
DOC BUG: Ofs() returns LongInt not Word as documented
fp.offset = true raw 16-bit offset within bank
Ofs() = seg*65536+offset for bank 0/1, raw for bank 2
=== A4: LongPtr ===
LongPtr: system far pointer, compatible with all ^^Type
OK LongPtr non-nil
OK LongPtr via Ptr
OK LongPtr ROM
OK LongPtr RAM2
OK LongPtr gfxBuf
Note: ^^ dereference in expressions gives
"Type not expected" in DL-Pascal 1.2.
Use ABSOLUTE vars for direct memory access.
Use Seg/Ofs/Ptr/Addr for address arithmetic.
--- SECTION B: Hardware Absolute Memory ---
=== B1: Hans Larsson ROM Easter Egg ===
Address: bank 0:$FFE7 (read-only ROM)
Hidden copyright string placed by the author
of DL-Pascal, Hans Larsson / Data-Larsson, 1989
Content: [© DL Hans Larsson 1989]
OK Easter egg non-empty
Length: 22
Char codes: 169 32 68 76 32 72 97 110 115 32 76 97 114 115 115 111 110 32 49 57 56 57
Reading ROM via ABSOLUTE 0:$FFE7 â no pointer needed.
The bank:offset syntax IS the far addressing.
=== B2: Bank 1 Normal RAM ===
Bank 1: $0000-$FFFF (64KB), heap + variables
memEnd ($0AB4) = 65535
OK memEnd > 0
MemAvail = 15223
OK MemAvail > 0
1:$0000 = 10
1:$FFFF = 22
charBuf[0] = 0
OK charBuf readable
OK Bank1 write/read
OK Bank1 restore
Bank 1 key addresses:
$0100: char display buffer (256 bytes)
$0200: pixel graphics buffer (768 bytes)
$0AB4: memEnd system variable
=== B3: Bank 2 Expansion RAM ($8000-$FFFF) ===
Confirmed by Piotr: ram2 maps $8000-$FFFF in bank 2
32KB of additional static storage
ram2start (2:$8000) = 255
ram2end (2:$FFFF) = 255
OK Bank2 write/read
expArray[0] = 0
expArray[15] = 255
OK Bank2 256 bytes
OK Bank2 $8100
OK Bank2 restore
Idiomatic use: named static ABSOLUTE variables
e.g. large lookup tables, P-machine stack,
graphics buffers, language runtime data.
Total addressable: 64KB(bank1) + 32KB(bank2) = 96KB
=== B4: Absolute Variable Aliasing ===
Multiple variables can alias the same address.
Write via one name, read via another.
OK Alias write
OK Alias read
OK Alias2 write
OK Alias restore
ABSOLUTE $XXXX = bank 1 (default)
ABSOLUTE N:$XXXX = bank N explicitly
ABSOLUTE 0:$FFE7 = ROM (read-only in practice)
ABSOLUTE 2:$8000 = expansion RAM start
=== Memory Map: Casio PB-2000C ===
Bank 0: ROM card 0:$0000-$FFFF 64KB RO
Bank 1: Normal RAM 1:$0000-$FFFF 64KB RW
Bank 2: Exp. RAM 2:$8000-$FFFF 32KB RW
Bank 3: ROM+exp 3:$0000-$FFFF 64KB
Pointer types:
Near ptr (^) 2 bytes bank 1 only
Far ptr (^^) 4 bytes any bank
LongPtr system far pointer type
Key addresses:
$0100 char display buffer (bank 1)
$0200 pixel graphics buf (bank 1)
$0AB4 memEnd (bank 1)
0:$FFE7 Hans Larsson easter egg (ROM)
2:$8000 expansion RAM start
2:$FFFF expansion RAM end
Total addressable with expansion: 96KB
(64KB bank1 + 32KB bank2)
DOC BUG: Ofs() return type:
Manual says Word (0..$FFFF) - INCORRECT
Actually returns LongInt linear address
bank1 vars: Ofs = 65536 + raw_offset
bank0 vars: Ofs = raw_offset
bank2 vars: Ofs = raw_offset (not 2*65536+ofs)
For true raw offset: use FarPtr record fp.offset
Note: ^^ dereference not usable in expressions.
Use ABSOLUTE declarations for direct access.
=== Cov12 complete ===