mirror of
https://git.k-space.ee/arti/vt1200.git
synced 2026-10-30 12:03:54 +02:00
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.
266 lines
4.1 KiB
ArmAsm
266 lines
4.1 KiB
ArmAsm
*******************************************************
|
|
* GSP C COMPILER, Version 2.01, 87.300 *
|
|
*******************************************************
|
|
FP .set A13
|
|
STK .set A14
|
|
.bss STATIC_1,224,16
|
|
.bss STATIC_2,40,16
|
|
.bss STATIC_3,18432,16
|
|
.file "HELLO.c"
|
|
******************************************************
|
|
* FUNCTION DEF : _build_font
|
|
******************************************************
|
|
_build_font:
|
|
MOVE A12,-*SP,1
|
|
MOVK 17,A12
|
|
MOVB A12,@STATIC_1
|
|
MOVB A12,@STATIC_1+8
|
|
ADDK 14,A12
|
|
MOVB A12,@STATIC_1+16
|
|
SUBK 14,A12
|
|
MOVB A12,@STATIC_1+24
|
|
MOVB A12,@STATIC_1+32
|
|
MOVB A12,@STATIC_1+40
|
|
MOVB A12,@STATIC_1+48
|
|
ADDK 14,A12
|
|
MOVB A12,@STATIC_1+56
|
|
SUBK 15,A12
|
|
MOVB A12,@STATIC_1+64
|
|
MOVB A12,@STATIC_1+72
|
|
ADDK 14,A12
|
|
MOVB A12,@STATIC_1+80
|
|
SUBK 14,A12
|
|
MOVB A12,@STATIC_1+88
|
|
MOVB A12,@STATIC_1+96
|
|
ADDK 15,A12
|
|
MOVB A12,@STATIC_1+104
|
|
SUBK 15,A12
|
|
MOVB A12,@STATIC_1+112
|
|
MOVB A12,@STATIC_1+120
|
|
MOVB A12,@STATIC_1+128
|
|
MOVB A12,@STATIC_1+136
|
|
MOVB A12,@STATIC_1+144
|
|
MOVB A12,@STATIC_1+152
|
|
ADDK 15,A12
|
|
MOVB A12,@STATIC_1+160
|
|
SUBK 17,A12
|
|
MOVB A12,@STATIC_1+168
|
|
ADDK 3,A12
|
|
MOVB A12,@STATIC_1+176
|
|
MOVB A12,@STATIC_1+184
|
|
MOVB A12,@STATIC_1+192
|
|
MOVB A12,@STATIC_1+200
|
|
MOVB A12,@STATIC_1+208
|
|
SUBK 3,A12
|
|
MOVB A12,@STATIC_1+216
|
|
SUB A12,A12
|
|
MOVB A12,@STATIC_2
|
|
ADDK 1,A12
|
|
MOVB A12,@STATIC_2+8
|
|
ADD A12,A12
|
|
MOVB A12,@STATIC_2+16
|
|
MOVB A12,@STATIC_2+24
|
|
ADDK 1,A12
|
|
MOVB A12,@STATIC_2+32
|
|
EPI0_1:
|
|
MOVE *SP+,A12,1
|
|
RETS 0
|
|
.globl _main
|
|
******************************************************
|
|
* FUNCTION DEF : _main
|
|
******************************************************
|
|
_main:
|
|
MMTM SP,A3,A5,A7,A12,FP
|
|
MOVE STK,FP
|
|
ADDI 288,STK
|
|
CALLA _build_font
|
|
MOVI 1212501068,A12
|
|
MOVE A12,@0018A8000h,1
|
|
CLR A12
|
|
MOVE A12,*FP(192),1
|
|
JRUC L1
|
|
L4:
|
|
CLR A12
|
|
MOVE A12,*FP(160),1
|
|
JRUC L5
|
|
L8:
|
|
MOVE *FP(192),A7,1
|
|
SLL 8,A7
|
|
ADDI STATIC_3,A7
|
|
MOVE *FP(160),A5,1
|
|
SLL 3,A5
|
|
ADD A5,A7
|
|
CLR A5
|
|
MOVB A5,*A7
|
|
MOVE *FP(160),A7,1
|
|
ADDK 1,A7
|
|
MOVE A7,*FP(160),1
|
|
L5:
|
|
MOVE *FP(160),A7,1
|
|
CMPI 32,A7
|
|
JRLT L8
|
|
MOVE *FP(192),A5,1
|
|
ADDK 1,A5
|
|
MOVE A5,*FP(192),1
|
|
L1:
|
|
MOVE *FP(192),A7,1
|
|
CMPI 72,A7
|
|
JRLT L4
|
|
CLR A12
|
|
MOVE A12,*FP,1
|
|
JRUC L9
|
|
L12:
|
|
CLR A12
|
|
MOVE A12,*FP(32),1
|
|
JRUC L13
|
|
L16:
|
|
MOVE *FP,A7,1
|
|
SLL 3,A7
|
|
ADDI STATIC_2,A7
|
|
SETF 8,0,0
|
|
MOVE *A7,A7
|
|
MOVI 56,A12
|
|
MPYS A12,A7
|
|
ADDI STATIC_1,A7
|
|
MOVE *FP(32),A5,1
|
|
SLL 3,A5
|
|
ADD A5,A7
|
|
MOVE *A7,A7
|
|
MOVE A7,*FP(224),1
|
|
CLR A12
|
|
MOVE A12,*FP(64),1
|
|
JRUC L17
|
|
L20:
|
|
MOVK 16,A7
|
|
MOVE *FP(64),A5,1
|
|
NEG A5
|
|
SRA A5,A7
|
|
MOVE *FP(224),A5,1
|
|
AND A5,A7
|
|
JRZ L18
|
|
CLR A7
|
|
MOVE A7,*FP(128),1
|
|
JRUC L22
|
|
L25:
|
|
CLR A12
|
|
MOVE A12,*FP(96),1
|
|
JRUC L26
|
|
L29:
|
|
MOVE *FP,A7,1
|
|
MOVE A7,A5
|
|
SLL 5,A7
|
|
SLL 4,A5
|
|
ADD A7,A5
|
|
ADDK 8,A5
|
|
MOVE *FP(64),A7,1
|
|
SLL 3,A7
|
|
ADD A7,A5
|
|
MOVE *FP(96),A7,1
|
|
ADD A7,A5
|
|
MOVE A5,*FP(160),1
|
|
MOVE *FP(32),A7,1
|
|
SLL 3,A7
|
|
ADDK 8,A7
|
|
MOVE *FP(128),A5,1
|
|
ADD A5,A7
|
|
MOVE A7,*FP(192),1
|
|
SLL 8,A7
|
|
ADDI STATIC_3,A7
|
|
MOVE *FP(160),A5,1
|
|
SRA 3,A5
|
|
SLL 3,A5
|
|
ADD A5,A7
|
|
MOVE *FP(160),A5,1
|
|
MOVK 7,A12
|
|
AND A12,A5
|
|
MOVK 1,A3
|
|
SLL A5,A3
|
|
SLL 24,A3
|
|
SRL 24,A3
|
|
SETF 8,0,0
|
|
MOVE *A7,A5
|
|
OR A3,A5
|
|
MOVB A5,*A7
|
|
MOVE *FP(96),A7,1
|
|
ADDK 1,A7
|
|
MOVE A7,*FP(96),1
|
|
L26:
|
|
MOVE *FP(96),A7,1
|
|
CMPI 8,A7
|
|
JRLT L29
|
|
MOVE *FP(128),A5,1
|
|
ADDK 1,A5
|
|
MOVE A5,*FP(128),1
|
|
L22:
|
|
MOVE *FP(128),A7,1
|
|
CMPI 8,A7
|
|
JRLT L25
|
|
L18:
|
|
MOVE *FP(64),A7,1
|
|
ADDK 1,A7
|
|
MOVE A7,*FP(64),1
|
|
L17:
|
|
MOVE *FP(64),A7,1
|
|
CMPI 5,A7
|
|
JRLT L20
|
|
MOVE *FP(32),A5,1
|
|
ADDK 1,A5
|
|
MOVE A5,*FP(32),1
|
|
L13:
|
|
MOVE *FP(32),A7,1
|
|
CMPI 7,A7
|
|
JRLT L16
|
|
MOVE *FP,A5,1
|
|
ADDK 1,A5
|
|
MOVE A5,*FP,1
|
|
L9:
|
|
MOVE *FP,A7,1
|
|
CMPI 5,A7
|
|
JRLT L12
|
|
CLR A12
|
|
MOVE A12,*FP(192),1
|
|
JRUC L30
|
|
L33:
|
|
MOVE *FP(192),A7,1
|
|
ADDI 800,A7
|
|
SLL 10,A7
|
|
ADDI 67108904,A7
|
|
MOVE A7,*FP(256),1
|
|
CLR A12
|
|
MOVE A12,*FP(160),1
|
|
JRUC L34
|
|
L37:
|
|
MOVE *FP(256),A7,1
|
|
MOVE *FP(160),A5,1
|
|
SLL 3,A5
|
|
ADD A7,A5
|
|
MOVE *FP(192),A7,1
|
|
SLL 8,A7
|
|
ADDI STATIC_3,A7
|
|
MOVE *FP(160),A3,1
|
|
SLL 3,A3
|
|
ADD A3,A7
|
|
MOVB *A7,*A5
|
|
MOVE *FP(160),A7,1
|
|
ADDK 1,A7
|
|
MOVE A7,*FP(160),1
|
|
L34:
|
|
MOVE *FP(160),A7,1
|
|
CMPI 32,A7
|
|
JRLT L37
|
|
MOVE *FP(192),A5,1
|
|
ADDK 1,A5
|
|
MOVE A5,*FP(192),1
|
|
L30:
|
|
MOVE *FP(192),A7,1
|
|
CMPI 72,A7
|
|
JRLT L33
|
|
MOVI 1146048069,A12
|
|
MOVE A12,@0018A8020h,1
|
|
CLR A8
|
|
EPI0_2:
|
|
ADDI -288,STK
|
|
MMFM SP,A3,A5,A7,A12,FP
|
|
RETS 0
|
|
.end
|