( !Startup)

HEX
7A CONSTANT OS_Hardware
0 VARIABLE qrevision      ( 3 for B+, 6 for Pi 2)
0 VARIABLE qboard         ( 0 for Pi)
0 VARIABLE qprocessor     ( 2 for Pi)
0 VARIABLE qPi2

CODE OSHardware   ( r0,r1,r8...r1,r2)
R8 POP,
R1 POP,
R0 POP,
OS_Hardware SWI,
R2 PUSH,                   ( pointer to device descriptor address)
R1 PUSH,                   ( -1 if no more devices of this type)
PC R14 MOV,
END-CODE

DECIMAL
 : get_info
  [ HEX 403 ] LITERAL  0  4  OSHardware ;

DECIMAL
: revision   68 +  @ ;   ( R2...n)
: board      64 +  @ ;   ( R2...n)
: processor   2 + C@ ;   ( R2...n)

: qPi_data  ( ...)
        get_info  2DUP   ." R2=" . SPACE  HEX ." R1=" .   CR
        DROP
        DECIMAL
        DUP processor qprocessor !  ( CR ." processor: " qprocessor ?)
        qprocessor @ 2 = IF
                          DUP revision  qrevision  !  ( CR ."  revision: "  qrevision ?)
                              board     qboard     !  ( CR ."     board: "     qboard ?) 
                         ELSE DROP CR ." This isn't a Pi !" ABORT 
                         ENDIF ;

: qPi_type 
  qPi_data
  qboard @ 0= IF
                qrevision @ DUP 3 = IF 0 qPi2 ! DROP               ( B+, so not a Pi2)
                                    ELSE
                                     6 = IF 1 qPi2 ! ENDIF         ( Pi2)
                                    ENDIF
              ENDIF ;






