Files
vt1200/harness/c-hello/build/hello.map
T
arti 41b0979aef c-hello: first C program on the VT1200, running on real hardware
The 1987 TI K&R toolchain already compiled and linked a fib test, but nothing
had ever been executed on a VT1200. This is that program: hello.c draws HELLO
into video RAM (1 bpp, bit 0x04000000, no X11) and is loaded through the COFF
loader with hostload.py, on the real unit and in MAME.

Two runtime traps shaped the design, both recorded in the README:

  * boot.obj's exit() is `for(;;)` and _c_int00 ends in `reti`.  That is a
    standalone-ROM runtime, not a process: the child spun forever, and because
    the VT1200 OS is cooperative it took the whole terminal down (illegal
    opcode on hardware).  entry.asm replaces boot.obj -- set STK/FP, call
    _main, `rets` back to the create_process trampoline, the same return
    xhello uses -- and the image carries no .cinit (tables are built in code).
  * Pointers are bit addresses and pointer arithmetic scales by object size,
    so p + n on a char * is n bytes.  The pre-fix frame in evidence/ is that
    bug: 32 one-byte bars spread across a row.

Framebuffer geometry is not portable: the real unit is 1280 px wide at a
256-byte row pitch, MAME's canvas is 1024 px at 128.  build.sh builds both
(ROW_BYTES), and the README records how the real pitch was measured from a
real-unit frame rather than taken from MAME.

Evidence: real-unit frames in harness/c-hello/evidence/ (the pre-fix stripes
and the working HELLO), and dwt/loader/evidence/real-unit-xhello/ for the X
window that ran on the unit earlier.
2026-10-29 18:25:38 +02:00

50 lines
1.7 KiB
Plaintext

*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Thu Oct 29 18:24:36 2026
OUTPUT FILE NAME: <HELLO.out>
ENTRY POINT SYMBOL: "_start" address: 018A17E0
MEMORY CONFIGURATION
name origin length attributes
-------- -------- --------- ----------
prog 018A0000 000020000 RWIX
ram 01A00000 000040000 RWIX
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.text 0 018A0000 00001870
018A0000 000017E0 HELLO.obj (.text)
018A17E0 00000090 ENTRY.obj (.text)
.data 0 018A1870 00000000
.cinit 0 018A1870 00000000 UNINITIALIZED
.bss 0 01A00000 0000C910 UNINITIALIZED
01A00000 00004910 HELLO.obj (.bss)
01A04910 00008000 ENTRY.obj (.bss)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
01A00000 .bss 018A0000 .text
018A1870 .data 018A0770 _main
018A0000 .text 018A17E0 _start
018A0770 _main 018A1870 edata
018A17E0 _start 018A1870 .data
018A1870 edata 018A1870 etext
01A0C910 end 01A00000 .bss
018A1870 etext 01A0C910 end
[8 symbols]