Scheme 8088 types: ATOMIC OBJECTS: XH XL XS DESCRIPTON: TYPE: OFF: SEG: #f 0000 0000 00 ---- #t 0000 0000 FF ---- () 0000 0001 -- ---- undefined 0000 0010 -- ---- unspecified 0000 0011 -- ---- eof 0000 0100 -- ---- local 0000 0101 -- ---- char 0000 0110 -- ---- 0000 0111 -- ---- fixnum 0000 1000 xx xxxx handle 0000 1001 xx xxxx frame pointer 0000 1111 00 yyyy FIXED LENGTH OBJECTS: box 0001 0000 pointer -> long pair 0001 0001 pointer -> long long symbol (triple) 0001 0010 pointer -> long long long port (quad) 0001 0011 pointer -> long long long long VARIABLE LENGTH OBJECTS: string 0010 0000 pointer -> header byte ... byte unresolved 0010 0100 pointer -> {string header} byte ... byte unresolved bco 0110 0100 pointer -> {string header} byte ... byte body code object 0010 1000 pointer -> header {header} byte ... byte * lambda code object 0010 1100 pointer -> header {header} byte ... byte * code vector object 0110 1100 pointer -> header byte ... byte ** bignum 0010 0001 pointer -> header word ... word real 0010 0101 pointer -> header word ... word vector 0010 0010 pointer -> header long ... long closure 0010 0110 pointer -> header address long ... long continuation 0010 1010 pointer -> header long ... long ^ ^ ^ ^^ | | | ||---- size bits 00=byte 01=word 10=long | | |------- paragraph aligned bit | |--------- header bit |------------ reserved for foward reference. * must be paragraph (16 bytes) aligned ** must be aligned 4 byte less than paragraph (16 bytes) All headers for variable length objects have the same type field except bit4 is a 1. (EX: string header is 0011 0000)