← DL-Pascal collection

cov12.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 ===