#lang scheme/base
(provide
 (all-defined-out))
(require
 "../coma.ss")


;; The PIC18 kernel uses standard machine register names to implement
;; functionality. However, not all names are defined on all machines,
;; but if they are, they work the same in all practical cases. This
;; file solves the following problems:
;;
;;   * create stub macros that are later redefined when machine
;;     specific macros are loaded.
;;
;;   * create scheme wrapper values in the form of computations to be
;;     evaluated at assembly time.


;; NOTE: there are simply too many such parameters to make this kind
;; of linking static (testable at PIC18 compiler compile time) by
;; making the parameterization explicit. Therefore, each of the names
;; below by default generates an exception when it is invoked. As a
;; result it is possible that during compilation (PIC18 compiler
;; execution time) some macros remain undefined.


(constants

 ;; generic registers
 TOSL TOSH WREG STATUS C Z
 
 ;; multiplier
 PRODL PRODH

 ;; flash access
 TBLPTRL TBLPTRH TABLAT

 ;; indirect addressing
 FSR0L FSR0H POSTDEC0 PREINC0 POSTINC0 INDF0 PLUSW0
 FSR1L FSR1H POSTDEC1 PREINC1 POSTINC1 INDF1 PLUSW1
 FSR2L FSR2H POSTDEC2 PREINC2 POSTINC2 INDF2 PLUSW2

 ;; register access
 TRISC
 TRISD
 TRISE
 
 )