diff src/tft.inc @ 0:11d4fc797f74

init
author heinrichsweikamp
date Wed, 24 Apr 2013 19:22:45 +0200
parents
children ec4d8503ec45
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tft.inc	Wed Apr 24 19:22:45 2013 +0200
@@ -0,0 +1,229 @@
+;=============================================================================
+;
+;   File tft.inc
+;
+;   Declaring interfaces to the TFT screen and its Oxxx controler
+;
+;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
+;=============================================================================
+; HISTORY
+;  2011-05-24 : [jDG] Cleanups from initial Matthias code.
+
+;=============================================================================
+; TFT public subroutines
+;=============================================================================
+
+; Writes two half-pixels at position (win_top,win_leftx2)
+; Inputs: win_leftx2, win_top, win_color:2
+; Trashed: WREG, PROD
+    extern  pixel_write
+
+;-----------------------------------------------------------------------------
+; Writes one half-pixel at position (win_top,win_leftx2).
+; Inputs: win_leftx2, win_top, win_color:2
+; Trashed: WREG, PROD
+    extern  half_pixel_write
+
+;-----------------------------------------------------------------------------
+; TFT_frame : draw a frame around current box with current color.
+; Inputs:  win_top, win_leftx2, win_height, win_width, win_color1, win_color2
+; Outputs: (none)
+; Trashed: WREG, PROD, aa_start:2, aa_end:2, win_leftx2, win_width:1
+    extern  TFT_frame
+
+;-----------------------------------------------------------------------------
+	extern	TFT_DisplayOff              ; Power-off everything (need a boot next)
+    extern  TFT_boot                    ; Initialize screen hardware
+    extern  TFT_Display_FadeIn          ; Smooth lighting
+    extern  TFT_Display_FadeOut         ; Smooth darkening
+    extern  TFT_ClearScreen
+    extern  TFT_box_write
+    extern  TFT_box
+    extern  TFT_DataWrite_PROD
+    extern  TFT_set_color
+	extern	init_pixel_write
+	extern	pixel_write
+	extern	pixel_write_col320
+	extern	half_vertical_line
+	extern  half_horizontal_line
+    extern  TFT_dump_screen
+
+;-----------------------------------------------------------------------------
+; Macro to encode standard colors.
+; TODO: User preferences... Maybe.
+TFT_STD_COLOR   macro
+        setf    WREG                    ; Default to white
+        call    TFT_set_color
+        endm
+
+TFT_MASK_COLOR  macro
+        movlw   color_greenish          ; Default to OSTC mask-green
+        call    TFT_set_color
+        endm
+
+TFT_ATTENTION_COLOR  macro
+        movlw   color_yellow             ; Default to OSTC yelow
+        call    TFT_set_color
+        endm
+
+TFT_WARNINGS_COLOR  macro
+        movlw   color_red                ; Default to OSTC red
+        call    TFT_set_color
+        endm
+
+;TFT_DISABLED_COLOR  macro
+;        movlw   color_grey               ; Default to OSTC grey (dark blue)
+;        call    TFT_set_color
+;        endm
+
+;=============================================================================
+; Low level macros (for aa_wordprocessor and color_processor).
+;
+            extern  TFT_CmdWrite
+Index_out	macro low_b
+			movlw low_b
+			call  TFT_CmdWrite
+			endm
+
+;=============================================================================
+; A shortcut for TFT_box and TFT_frame call sequences.
+;
+        extern  box_frame_std, box_frame_common, box_frame_color, box_frame_color16
+        extern  box_std_block, box_black_block, box_color_block
+
+; Erase a given screen area.
+WIN_BOX_BLACK macro   top, bottom, left, right
+        call    box_black_block
+        db      top, (bottom)-(top)+1, left, (right)-(left)+1
+        endm
+
+; Fill a given screen area with standard color (White).
+WIN_BOX_STD macro   top, bottom, left, right
+        call    box_std_block
+        db      top, (bottom)-(top)+1, left, (right)-(left)+1
+        endm
+
+; Fill a given screen area with color from WREG (8bits rrrgggbb)
+WIN_BOX_COLOR macro   top, bottom, left, right
+        call    box_color_block
+        db      top, (bottom)-(top)+1, left, (right)-(left)+1
+        endm
+
+; Draw a frame in standard color (White).
+WIN_FRAME_STD macro   top, bottom, left, right
+        call    box_frame_std
+        db      top, (bottom)-(top)+1, left, (right)-(left)+1
+        endm
+
+; Draw a frame with color from WREG (8bits rrrgggbb)
+WIN_FRAME_COLOR macro   top, bottom, left, right
+        call    box_frame_color
+        db      top, (bottom)-(top)+1, left, (right)-(left)+1
+        endm
+
+; Draw a frame with color from win_color (16bits in TFT format)
+WIN_FRAME_COLOR16 macro   top, bottom, left, right
+        call    box_frame_color16
+        db      top, (bottom)-(top)+1, left, (right)-(left)+1
+        endm
+
+WIN_FONT 	macro	win_font_input
+			movlw	win_font_input
+			movff	WREG,win_font
+			endm
+			
+WIN_TOP 	macro 	win_top_input
+			movlw	win_top_input
+			movff	WREG,win_top
+			endm
+
+WIN_HEIGHT 	macro 	h
+			movlw	h
+			movff	WREG,win_height
+			endm
+			
+WIN_LEFT 	macro 	win_left_input
+			movlw	win_left_input
+			movff	WREG,win_leftx2
+			endm
+			
+WIN_WIDTH 	macro 	w
+			movlw	w
+			movff	WREG,win_width
+			endm
+
+WIN_INVERT	macro 	win_invert_input
+			movlw	win_invert_input
+			movff	WREG,win_invert
+			endm
+
+WIN_COLOR	macro 	win_color_input
+			movlw	win_color_input
+			call	TFT_set_color
+			endm
+
+;=============================================================================
+; TFT_write_flash_image
+;
+; Inputs:  cx, cy : Image center (in 0..160 x 0..240 range)
+;          image  : flash image header's address
+; Outputs: win_top, win_left, win_height, win_width
+;          image copyed on screen.
+; Trashed: PROD, hi, lo
+; 
+    extern  TFT_write_flash_image
+    extern  TFT_write_flash_image_addr
+TFT_WRITE_FLASH_IMAGE macro cx, cy, image
+    If LOW(image) != 0
+        Error "Image "image" mis-aligned"
+    Endif
+    If (UPPER(image) & 0xF0) != 0x30
+        Error "Image "image" not in image flash memory"
+    Endif
+    If (cx < 0) || (cx > 160)
+        Error "Image center's X "cx" not in 0..160 range".
+    Endif
+    If (cy < 0) || (cy > 240)
+        Error "Image center's Y "cy" not in 0..240 range".
+    Endif
+            ; Once we know image is aligned, we can use the compact (4bytes)
+            ; 12bit registers to pass the address:
+            lfsr    FSR2, ((image)>>8) & 0xFFF
+            WIN_LEFT    cx
+            WIN_TOP     cy
+            call    TFT_write_flash_image
+            endm
+
+;=============================================================================
+; TFT_write_prom_image
+;
+TFT_WRITE_PROM_IMAGE    macro   icon
+            extern  icon, color_image
+            movlw   LOW(icon)
+            movwf   TBLPTRL
+            movlw   HIGH(icon)
+            movwf   TBLPTRH
+            movlw   UPPER(icon)
+            movwf   TBLPTRU
+            call    color_image
+            endm
+
+;=============================================================================
+; Macro to provides our own interface code.
+;
+PIXEL_WRITE macro   colRegister, rowRegister
+        movff   colRegister,win_leftx2
+        movff   rowRegister,win_top
+        call    pixel_write
+        endm
+
+INIT_PIXEL_WROTE macro colRegister
+        movff   colRegister,win_leftx2
+        call    init_pixel_write
+        endm
+
+HALF_PIXEL_WRITE macro rowRegister
+        movff   rowRegister,win_top
+        call    half_pixel_write
+        endm
+