Generador de caracteres de vídeo con PIC

Hola:

Por todas partes encuentro señales de vídeo en ASM, y encima muy viejo la programación de antes, ahora es algo más fácil de entender por las directivas.

1.gif


Tengo intención de pasarlo del PIC16F84A al PIC16F88 con sus patillajes compatibles y oscilador exerno ya que no me queda otra, ejejej.

Generador de caracteres de vdeo con PIC

No se mucho de C sobre PIC, lo estoy aprendiendo por el aire. Los que tienen experiencia sobre ambos lenguajes. ¿Es fácil adaptar el ASM para C y que funcione?

http://www.pablin.com.ar/electron/circuito/mc/picdream/picdream.asm

Ojo, sólo carácteres, no juegos con PIC.

Saludo.

Edito:
Lo he pasado del PIC16F84A al PIC16F88.
Código:
; LE 22/08/1997
; Edited with PFE and assembled with MPASM
; Tristan@Club-Internet.fr or F1CJN @ F6KBF.FRPA (by packet radio)
; 5*7 new routines 
; 7 characters visible scrolling long text on upper line, yes the pic do it !
; 8 Grey level bars in the middle of the screen
; 4 digits clock in the bottom 
; setup of the clock with two push buttons
; the 625 lines TV screen looks like this
; By Alain FORT and Peter KNIGHT 
; Free for public domain by Internet
;
;              *************
;              *  T E X T  * this line is scrolling to the left
;              * grey bars *
;              *   12:00   *    (This is the clock)
;              *************
;
;             Cristal: 4 MHz
;          
; ZONA DE DATOS **********************************************************************

    LIST        P=16F88
    INCLUDE        <P16F88.INC>
    __CONFIG     _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
    
    ; _CP_OFF: Protección de código DESACTIVADO.
    ; _DEBUG_OFF: Debug en circuito DESACTIVADO.
    ; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO.
    ; _CPD_OFF: Protección de código de datos DESACTIVADO.
    ; _LVP_OFF: Programación en baja tensión DESACTIVADO.
    ; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
    ; _MCLRE_ON: Reset por pin externo ACTIVADO.
    ; _PWRTE_ON: Retraso al reset ACTIVADO.
    ; _WDT_OFF: Watchdog DESACTIVADO.
    ; _XT_OSC: Oscilador externo del tipo XT.
    
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
    
    ; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO.
    ; _FCMEN_OFF: Monitor de CLK DESACTIVADO.

    TITLE    "PICDREAM"

;    cblock    0x00
;        INDF,RTCC,PCL,STATUS,FSR,PORTA,PORTB
;    endc
;    cblock    0x08
;        EEDATA,EEADR,PCLATH,INTCON
;    endc

;    cblock    0x00
;        C,DC,Z,PD,TO,RP0,RP1,IRP
;    endc

    CBLOCK    0x20
    ENDC

; Page 1 registers
;OPTION_REG    EQU    01H
;TrisA    EQU    05H
;TRISB    EQU    06H
RAMbase    EQU    0CH


#define    Sync    PORTA,0  ; Synchro out at RA0  (PIN 17)

; DNOP - Double NOP. Delay of 2 cycles, takes only one instruction

DNOP    MACRO
    LOCAL    Label
Label    GOTO    Label+1
    ENDM

; Delay3W - Delay 3 * W cycles, three instructions

Delay3W    MACRO
    LOCAL    Label
    MOVWF    Delay        
Label    DECFSZ    Delay
    GOTO    Label
    ENDM

SKIPCC    MACRO
    BTFSC    STATUS,C
    ENDM

SKIPNZ    MACRO
    BTFSC    STATUS,Z
    ENDM

    LIST

    CBLOCK    RAMbase
        Delay,Count,Count2,Count3,SubSec    ; 5 various registers
        HrT,HrU,MiT,MiU,SeU            ; 5 clock registers 
        CA0,CA1,CA2,CA3,CA4,CA5,CA6         ; 6 caracters pointers
        Ta0,Ta1,Ta2,Ta3,Ta4,Ta5,Ta6,TNB,TNB1      ; 7 caracter lines pointers
        Ptrtxt                    ; 1 text pointer    
    ENDC

    ORG    0
    GOTO    Main

    ORG    4
    RETURN

; Table of caracters

Table    ADDWF    PCL,F
Tbase    equ    $
Car0    equ    $-Tbase
CarO    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001110'    ; ....***.
Car1    equ    $-Tbase
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00001100'    ; ....**..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00001110'    ; ....***.
Car2    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000010'    ; ......*.
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00001000'    ; ....*...
    RETLW    B'00011111'    ; ...*****
Car3    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'     ;....*...*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000110'    ; .....**.
    RETLW    B'00000001'    ; .......*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001110'    ; ....***.
Car4    equ    $-Tbase
    RETLW    B'00000010'    ; ......*.
    RETLW    B'00000110'    ; .....**.
    RETLW    B'00001010'    ; ....*.*.
    RETLW    B'00010010'    ; ...*..*.
    RETLW    B'00011111'    ; ...*****
    RETLW    B'00000010'    ; ......*.
    RETLW    B'00000010'    ; ......*.
Car5    equ    $-Tbase
    RETLW    B'00011111'    ; ...*****
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00011110'    ; ...****.
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001110'    ; ....***.
Car6    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001110'    ; ....***.
Car7    equ    $-Tbase
    RETLW    B'00011111'    ; ...*****
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000010'    ; ......*.
    RETLW    B'00000010'    ; ......*.
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
Car8    equ    $-Tbase
     RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
     RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
     RETLW    B'00001110'    ; ....***.
Car9    equ    $-Tbase
     RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
     RETLW    B'00001111'    ; ....****
    RETLW    B'00000001'    ; .......*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001110'    ; ....***.    
;B0      D'70'
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00001000'    ; ....*...
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000010'    ; ......*.
;B3      D'75'
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00000010'    ; ......*.
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00001000'    ; ....*...
CarSP    equ    $-Tbase
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
    RETLW    B'00000000'    ; ........
CarA    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00011111'    ; ...*****
CarH    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00011111'    ; ...*****
CarU    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001110'    ;.....***.
CarD    equ    $-Tbase
    RETLW    B'00011110'    ; ...****.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
CarB    equ    $-Tbase
    RETLW    B'00011110'    ; ...****.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
CarP    equ    $-Tbase
    RETLW    B'00011110'    ; ...****.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00011110'    ; ...****.
CarL    equ    $-Tbase
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
CarE    equ    $-Tbase
    RETLW    B'00011111'    ; ...***** 
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00011100'    ; ...***..
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
CarF    equ    $-Tbase
    RETLW    B'00011111'    ; ...***** 
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00011100'    ; ...***..
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
CarJ    equ    $-Tbase
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00000001'    ; .......*
    RETLW    B'00010001'    ; ...*...*
CarG    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010011'    ; ...*..**
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
CarQ    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010101'    ; ...*.*.*
    RETLW    B'00010011'    ; ...*..**
CarS    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00000001'    ; .......*
    RETLW    B'00010001'    ; ...*...*
CarC    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010000'    ; ...*....
    RETLW    B'00010001'    ; ...*...*
CarI    equ    $-Tbase
    RETLW    B'00001110'    ; ....***.
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00001110'    ; ....***.
CarK    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010010'    ; ...*..*.
    RETLW    B'00010100'    ; ...*.*..
    RETLW    B'00011000'    ; ...**...
    RETLW    B'00010100'    ; ...*.*..
    RETLW    B'00010010'    ; ...*..*.
CarM    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00011011'    ; ...**.**
    RETLW    B'00010101'    ; ...*.*.*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
CarN    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00011001'    ; ...**..*
    RETLW    B'00010101'    ; ...*.*.*
    RETLW    B'00010011'    ; ...*..**
CarY    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001010'    ; ....*.*.
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
CarR    equ    $-Tbase
    RETLW    B'00011110'    ; ...****.
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00011110'    ; ...****.
CarV    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
CarX    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00001010'    ; ....*.*.
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00001010'    ; ....*.*.
CarW    equ    $-Tbase
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010001'    ; ...*...*
    RETLW    B'00010101'    ; ...*.*.*
    RETLW    B'00011011'    ; ...**.**
    RETLW    B'00010001'    ; ...*...*
CarZ    equ    $-Tbase
    RETLW    B'00011111'    ; ...***** 
    RETLW    B'00000001'    ; ...... *
    RETLW    B'00000010'    ; ..... *.
    RETLW    B'00000100'    ; .... *..
    RETLW    B'00001000'    ; ....*...
    RETLW    B'00010000'    ; ...*....
CarT    equ    $-Tbase
    RETLW    B'00011111'    ; ...*****
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..
    RETLW    B'00000100'    ; .....*..

Main
    BSF        STATUS,RP0    ;  adressing bank 1
    clrf    ANSEL
    MOVLW    B'11110'
    MOVWF    TRISA
    MOVLW    B'11000000'
    MOVWF    TRISB        ; ports B as outputs except  RB7 and RB6
    BCF    OPTION_REG,7    ; we need the integrated pull-up resistors
    BCF    STATUS,RP0    ; adressing bank 0 for the rest of the program

    CLRF    SeU    ;Initialisation clock at 00.00
    CLRF    MiU
    CLRF    MiT
    CLRF    HrU
    CLRF    HrT
    CLRF    Count3

; Frame starts here.
;
; Frame must be exactly 312.5 Lignes long, each Ligne 64 cycles.
; That ensures frame rate of exactly 50Hz to crystal accuracy.

;5 Long Equalisation pulses

Frame                ;Main Loop
    BCF        Sync        ; 1        ;30us Sync
    DNOP            ; 3
    MOVLW    4        ; 4
    MOVWF    Count        ; 5
Loop1    MOVLW    8        ; 6  6
    Delay3W            ;30 30
    BSF        Sync        ;31 31    ;2us Black
    NOP            ;32 32
    BCF        Sync        ; 1  1    ;30us Sync
    NOP            ; 2  2
    DECFSZ Count        ; -  -
    GOTO    Loop1        ; 5
    MOVLW    8        ;    5
    Delay3W            ;   29
    NOP            ;   30
    BSF    Sync        ;   31    ;2us Black
    NOP            ;   32

; Now 5 short equalisation pulses, 4 on interlace

    BCF        Sync        ; 1    ;2us Sync
    NOP            ; 2
    BSF    Sync        ; 3    ;30us Black
    MOVLW    4        ; 4
    BTFSC    SubSec,0    ;    ; 3 on interlace (SubSec odd)
    MOVLW    3        ; 6
    MOVWF    Count        ; 7
Loop2    MOVLW    8        ; 8  8  8  8
    Delay3W            ;32 32 32 32
    BCF    Sync        ; 1  1  1  1    ;2us Sync
    NOP            ; 2  2  2  2
    BSF    Sync        ; 3  3  3  3    ;30us Black
    NOP            ; 4  4  4  4
    DECFSZ Count        ; -  -  -  -
    GOTO    Loop2        ; 7  7  7
    CLRF    TNB        ;          7   RAZ de TBN a chaque trame
    MOVLW    8        ;          8
    Delay3W            ;         32
        

; 304 visible Lines

; 41 black Lines 
    BCF    Sync        ; 1
    MOVLW    D'41'        ; 2
    CALL    BlkLns        ;64

; ****     INIT TEXTE ******   line  42

    BCF     Sync
    Call     Preptxt3

; ****    INIT TEXTE CONTINUED ****** line 43

    BCF     Sync
    Call     Preptxt4

;********** DISPLAY TEXTE ********* ( + 60 lines) = 103

    BCF    Sync        ; 1
    CALL    DisTxt        ;64

; 15 black lines = 118

    BCF    Sync        ; 1
    MOVLW    D'15'        ; 2
    CALL    BlkLns        ;64

; ***** GREY BARS ***** 60 lines = 178

    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64 ligne 10
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64 Line 20
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64 Line 30
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64 Line 40
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64 Line 50
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64
    BCF Sync        ;1
    CALL BARRE        ;64  

;*****  14  BLACK LINES =192  *****
    BCF    Sync        ; 1
    MOVLW    D'14'        ; 2
    CALL    BlkLns        ;64

;*****  KEYS TEST 1 line = 193 *****
    BCF    Sync        ; 1    Line 54
    CALL    TOUCHE        ;64

;***** PREPARE CLOCK    =  194 *****
    BCF    Sync        ; 1    Line 54
    CALL    PREPH        ;64

;***** DISPLAY CLOCK     = 254  ***** (this takes 60 Lignes)
    BCF    Sync
    CALL    DisTxt

;Increment time
    BCF    Sync        ;1
    INCF    SubSec        ;2    Increment 1/50th sec
    MOVLW    -D'50'        ;3
    ADDWF    SubSec,W    ;4    Carry now set if second has expired
    BSF    Sync        ;5
    SKIPCC            ;6    Zero SubSec if =50
    CLRF    SubSec        ;7
    SKIPCC            ;8
    INCF    SeU        ;9    And increment Second Units
    SKIPCC            ;10
    NOP            ;11     seconds counter modulo 256
    MOVLW    -D'60'        ;12
    ADDWF    SeU,W        ;13    Carry if needed Second Units->Tens
    SKIPCC            ;14
    CLRF    SeU        ;15
    SKIPCC            ;16
    INCF    MiU        ;17    Minutes Units
    MOVLW    -D'10'        ;18
    ADDWF    MiU,W        ;19
    SKIPCC            ;20
    CLRF    MiU        ;21
    SKIPCC            ;22
    INCF    MiT        ;23    Minutes tens
    MOVLW    -D'6'        ;24
    ADDWF    MiT,W        ;25
    SKIPCC            ;26
    CLRF    MiT        ;27
    SKIPCC            ;28
    INCF    HrU        ;29
    MOVLW    -D'10'        ;30
    ADDWF    HrU,W        ;31 
    SKIPCC            ;32
    CLRF    HrU        ;33
    SKIPCC            ;34
    INCF    HrT        ;35
    MOVF    HrU,W        ;36  Now check for Hours=24
    BTFSC    HrT,0        ;37
    ADDLW    D'10'        ;38  
    BTFSC    HrT,1        ;39
    ADDLW    -D'4'        ;40
    SKIPCC            ;41
    CLRF    HrU        ;42 clear hours units
    SKIPCC            ;43
    CLRF    HrT        ;44 clear hours tens
    MOVLW    D'6'        ;45         
    Delay3W            ;63

; *****  489 BLACK LINES = 304 *****
    BCF    Sync        ; 1        ;5us Sync
    MOVLW    D'49'        ; 2
    CALL    BlkLns        ; 64

; insert half Ligne here on interlace

; Now 5 short equalisation pulses
; prefixed by half video Ligne on interlace

; Slight bodge of CCIR/PAL - the half Ligne segment is actually a short eq pulse
    BCF    Sync        ; 1        ;2us Sync
    NOP            ; 2
    BSF    Sync        ; 3        ;30us Black
    MOVLW    4        ; 4
    BTFSS    SubSec,0    ; -
    MOVLW    5        ; 6
    MOVWF    Count        ; 7
Loop6    MOVLW    8        ; 8  8  8  8
    Delay3W            ;32 32 32 32
    BCF    Sync        ; 1  1  1  1 ; 2us Sync
    NOP            ; 2  2  2  2
    BSF    Sync        ; 3  3  3       ; 30us Black
    NOP            ; 4  4  4  4
    DECFSZ    Count        ; -  -  -  -
    GOTO    Loop6        ; 7  7  7
    MOVLW    7        ;          7
    Delay3W            ;         28
    DNOP            ;         30
    GOTO    Frame        ;         32

; Delay routines

Delay6    NOP
Delay5    NOP
Delay4    RETURN

; Some black Lignes
BlkLns    ADDLW    -1
    BSF    Sync        ; 1        ;59us black
    MOVWF    Count
    DNOP            ; 1
Loop5    MOVLW    D'17'        ; 1  1  1  1
    MOVWF    Delay        ; 1  1  1  1
LoopD9    DECFSZ    Delay        ;18 18 18 18
    GOTO    LoopD9        ;32 32 32 32
    NOP            ; 1  1  1  1
    DNOP            ; 2  2  2  2
    BCF    Sync        ; 1  1  1  1    ;5us Sync
    CALL    Delay4        ; 4  4  4  4
    BSF    Sync        ; 1  1  1  1    ;59us Black
    DECFSZ    Count        ; 1  1  1  2
    GOTO    Loop5        ; 2  2  2
    NOP            ;          1
    MOVLW    D'17'        ;          1
    Delay3W            ;         51
    NOP            ;          1
    RETURN            ;          2


;Display
; Call immediately after BCF Sync, takes 60 Ligne periods

DisTxt    DNOP            ; 5    ;Ligne 1 noire
    BSF    Sync        ; 6
    MOVLW    D'19'        ; 7    delai=57
    Delay3W            ;64
    BCF    Sync        ; 1    lignes 2 et 3 noires
    MOVLW    D'2'        ; 2
    CALL    BlkLns        ;64
    BCF    Sync        ; 1    Ligne 4 au noir , +1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 5
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 6  
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 7  
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 8 
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 9 
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 10 
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 11 
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 12 is black, + 1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 13
    CALL    Showline    ;64    
    BCF    Sync        ; 1    Ligne 14
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 15
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 16
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 17
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 18
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 19
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 20 is black, +1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 21
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 22
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 23
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 24
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 25
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 26
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 27
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 28 is black,+1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 29
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 30
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 31
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 32
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 33
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 34
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 35
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 36 is black, +1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 37
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 38
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 39
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 40
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 41
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 42
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 43
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 44 is black, +1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 45
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 46
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 47
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 48
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 49
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 50
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 51
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 52 is black, +1 for caracters line
    CALL    INCLIN        ;64
    BCF    Sync        ; 1    Ligne 53
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 54
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 55
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 56
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 57
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 58
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 59
    CALL    Showline    ;64
    BCF    Sync        ; 1    Ligne 60
    GOTO    Showline    ;64


Showline MOVF    TNB1,W        ; 4  old TNB (without plus one)
    ADDWF    CA6,W        ; 5  Incline (continued), seventh caracter preparation
    BSF    Sync        ; 6
    CALL     Table        ;12
    MOVWF    Ta6        ;13
    MOVF    Ta0,W        ;15 Carac 1
    MOVWF    PORTB        ;16  
    RLF    PORTB        ;18
    RLF    PORTB        ;19
    RLF    PORTB        ;20
    RLF    PORTB        ;21
    CLRF    PORTB        ;22
    MOVF    Ta1,W        ;23 Carac 2
    MOVWF    PORTB        ;24
    RLF    PORTB        ;25
    RLF    PORTB        ;26
    RLF    PORTB        ;27
    RLF    PORTB        ;28
    CLRF    PORTB        ;29
    MOVF    Ta2,W        ;30 Carac 3
    MOVWF    PORTB        ;31
    RLF    PORTB        ;32
    RLF    PORTB        ;33
    RLF    PORTB        ;34
    RLF    PORTB        ;35
    CLRF    PORTB        ;36
    MOVF    Ta3,W        ;37 Carac 4
    MOVWF    PORTB        ;38  
    RLF    PORTB        ;39
    RLF    PORTB        ;40
    RLF    PORTB        ;41
    RLF    PORTB        ;42
    CLRF    PORTB        ;43
    MOVF    Ta4,W        ;44 Carac 5
    MOVWF    PORTB        ;45
    RLF    PORTB        ;46
    RLF    PORTB        ;47
    RLF    PORTB        ;48
    RLF    PORTB        ;49
    CLRF    PORTB        ;50
    MOVF    Ta5,W        ;51 Carac 6
    MOVWF    PORTB        ;50
    RLF    PORTB        ;51
    RLF    PORTB        ;52
    RLF    PORTB        ;53
    RLF    PORTB        ;54
    CLRF    PORTB        ;55 Put 0 ( black video between 2 caracters)
    MOVF    Ta6,W        ;56 Carac 7
    MOVWF    PORTB        ;57  
    RLF    PORTB        ;58
    RLF    PORTB        ;59
    RLF    PORTB        ;60
    RLF    PORTB        ;61
    CLRF    PORTB        ;62 Ouf! no more room for any NOP
    RETURN            ;64

Preptxt3  DNOP            ; 5    
    BSF    Sync        ; 6
    MOVF    SubSec,w    ; 7
    ANDLW    B'00000001'    ; 8
    SKIPNZ            ; 9
    GOTO    GT4        ; 10/11    
    MOVLW    D'16'        ; 11
    ADDWF    Count3        ; 12
    SKIPNZ            ; 13
    INCF    Ptrtxt        ; 14
    GOTO     GT5        ; 16
GT4    CALL    Delay4        ; 15
    NOP            ; 16
GT5     MOVLW   HIGH Texte    ; 17    prepare to read the text page at 3C0
    MOVWF    PCLATH        ; 18     
    MOVF    Ptrtxt,W    ; 19    first caracter
    CALL    Texte        ; 25
    MOVWF    CA0        ; 26
    INCF    Ptrtxt        ; 27
    MOVF    Ptrtxt,W    ; 28    Second caracter
    CALL    Texte        ; 34
    MOVWF    CA1        ; 35
    INCF    Ptrtxt        ; 36
    MOVF    Ptrtxt,W    ; 37    Third caracter
    CALL    Texte        ; 43
    MOVWF    CA2        ; 44
    INCF    Ptrtxt        ; 45    
    MOVF    Ptrtxt,W    ; 46    Fourth caracter
    CALL    Texte        ; 52
    MOVWF    CA3        ; 53
    INCF    Ptrtxt        ; 54
    MOVLW    D'2'        ; 55  
    Delay3W            ; 61    equ 6 cycles            
    NOP            ; 62 
    RETURN            ; 64

Preptxt4  DNOP            ; 5    
    BSF    Sync        ; 6
    MOVF    Ptrtxt,W    ; 7    Fith caracter
    CALL    Texte        ;13
    MOVWF    CA4        ;14
    INCF    Ptrtxt        ;15    
    MOVF    Ptrtxt,W    ;16    Sixth caracter
    CALL    Texte        ;22
    MOVWF    CA5        ;23 

    INCF    Ptrtxt        ;24    
    MOVF    Ptrtxt,W    ;25    Seventh caracter
    CALL    Texte        ;31
    MOVWF    CA6        ;32       

    MOVLW    D'7'        ; 33  
    Delay3W            ; 54   equ 21

    MOVLW    -D'6'        ; 55   plus 6 for a one caracter shift
    ADDWF    Ptrtxt        ; 56   voila 
    MOVF    Ptrtxt,W    ; 57   
    ADDLW    -(FTexte-DTexte); 58 compar to text length
    SKIPCC            ; 59
    CLRF    Ptrtxt        ; 60 RAZ text pointer if end of scroll
    CLRF     PCLATH        ; 61 RAZ PCLATH for reading lire caracters table page at page 0    
    CLRF    TNB        ; 62 TNB initialisation
    RETURN            ; 64    
            

INCLIN    MOVF    TNB,W        ; 4  Computing the table input adress 
    MOVWF    TNB1        ; 5
    BSF    Sync        ; 6  and store in  Ta0 to Ta5 registers
    NOP            ; 7 
    MOVF     TNB,W        ; 8    
    ADDWF    CA0,W        ; 9   Add TNB to result
    CALL     Table        ; 15  Call line number NB
    MOVWF    Ta0        ; 16  Table in TA0
    MOVF     TNB,W        ; 17    
    ADDWF    CA1,W        ; 18
    CALL     Table        ; 24
    MOVWF    Ta1        ; 25
    MOVF     TNB,W        ; 26    
    ADDWF    CA2,W        ; 27
    CALL     Table        ; 33
    MOVWF    Ta2        ; 34
    MOVF     TNB,W        ; 35    
    ADDWF    CA3,W        ; 36
    CALL     Table        ; 42
    MOVWF    Ta3        ; 43
    MOVF     TNB,W        ; 44    
    ADDWF    CA4,W        ; 45
    CALL     Table        ; 51
    MOVWF    Ta4        ; 52 
    MOVF     TNB,W        ; 53 
    ADDWF    CA5,W        ; 54 
    CALL     Table        ; 60 
    MOVWF    Ta5        ; 61 
    INCF    TNB        ; 62  the (Ta6) is in the Showline routine !!
    RETURN            ; 64

PREPH    DNOP            ; 5    Clock 
    BSF    Sync        ; 6
    BCF     STATUS,C    ; 7

    MOVLW    D'80'        ; 8 First caracter is space (black)
    MOVWF    CA0        ; 9  

    MOVF    HrT,W        ; 10  Hours Tens 
    MOVWF    CA1        ; 11
    RLF    CA1        ; 12  multiply by 7 for table access
    RLF    CA1        ; 13  
    ADDWF    CA1        ; 14
    ADDWF    CA1        ; 15
    ADDWF    CA1        ; 16

    MOVF    HrU,W        ; 17  Heures Units
    MOVWF    CA2        ; 18
    RLF    CA2        ; 19  multiply by 7 for table access
    RLF    CA2        ; 20
    ADDWF    CA2        ; 21
    ADDWF    CA2        ; 22
    ADDWF    CA2        ; 23

    MOVLW     D'70'        ; 24
    BTFSC    SeU,0        ; 25 parity test for seconds
    ADDLW    D'5'        ; 26
    MOVWF    CA3        ; 27 result = 70 or 75

    MOVF    MiT,W        ; 28 Minutes Tens
    MOVWF    CA4        ; 29
    RLF    CA4        ; 30 multiply by 7 for table access
    RLF    CA4        ; 31
    ADDWF    CA4        ; 32
    ADDWF    CA4        ; 33
    ADDWF    CA4        ; 34

    MOVF    MiU,W        ; 35 Minutes Units
    MOVWF    CA5        ; 36
    RLF    CA5        ; 37 multiply by 7 for table access
    RLF    CA5        ; 38
    ADDWF    CA5        ; 39
    ADDWF    CA5        ; 40
    ADDWF    CA5        ; 41

    MOVLW    D'80'        ; 42
    MOVWF    CA6        ; 43 Last caracter is a space

    MOVLW    D'5'        ; 44
    Delay3W            ; 59 eq (15)
    
    DNOP            ; 61
    CLRF    TNB        ; 62
    RETURN            ; 64

BARRE    DNOP            ; 5    Grey for outputs RA1 RA2 RA3
    BSF    Sync        ; 6
    MOVLW    B'10000'    ; 7    Outputs Activation RA1 RA2 RA3 on portA
    TRIS    PORTA        ; 8      
    MOVLW    D'1'        ; 9    Only even numbers (for sync='1')
    MOVWF    PORTA        ; 10
    CALL     Delay4        ; 14
    CALL     Delay4        ; 18
    MOVLW    D'3'        ; 
    MOVWF    PORTA        ;   
    CALL     Delay4        ; 24
    MOVLW    D'5'        ; 
    MOVWF    PORTA        ;   
    CALL    Delay4        ; 30
    MOVLW    D'7'        ;
    MOVWF    PORTA        ; 
    CALL     Delay4        ; 36
    MOVLW    D'9'        ;
    MOVWF    PORTA        ; 
    CALL    Delay4        ; 42
    MOVLW    D'11'        ;
    MOVWF    PORTA        ; 
    CALL    Delay4        ; 48
    MOVLW    D'13'        ;
    MOVWF    PORTA        ; 
    CALL    Delay4        ; 54
    MOVLW    D'15'        ; 55
    MOVWF    PORTA        ; 56
    CALL    Delay4        ; 60
    MOVLW    B'11110'    ; 61 Ouput in tristate (except sync) on Port A
    TRIS    PORTA        ; 62
    RETURN            ; 64

TOUCHE
    DNOP            ;5
    BSF Sync        ;6
    MOVF    PORTB,w        ;7    reading PORTB
    XORLW    B'11111111'    ;8    compare with before which was '1' due to the pull-up loads
    ANDLW    B'11000000'    ;9      mask for RB7 et RB6
    BTFSC    STATUS,Z    ;10    zero set=no buttons
    GOTO    RT2        ;12    out if no key press    
    INCFSZ     Count2        ;13    delay (with frame counter) if a key at 1
    GOTO     RT1        ;15
    BTFSC    PORTB,7        ;15    minutes button test
    INCF    MiU        ;16
    BTFSC    PORTB,6        ;17    hours button test
    INCF    HrU        ;18
    MOVLW    D'236'        ;19    Wait a while
    MOVWF     Count2        ;20
    GOTO    RT3        ;22        
RT2    MOVLW    D'236'        ;13    
    MOVWF    Count2        ;14
RT1    CALL Delay4        ;18    
    CALL Delay4        ;22
RT3    MOVLW    D'13'        ;23
    Delay3W            ;62
    return            ;64

    Org    3A0

Texte    ADDWF    PCL,F
DTexte    equ    $
    RETLW    CarSP    ; 1  LENGTH = 95 MAXIMUM (characters plus space)
    RETLW    CarSP    ; 2
    RETLW    CarSP    ; 3
    RETLW    CarSP    ; 4
    RETLW    CarSP    ; 5  
    RETLW    CarSP    ; 6  *** do not modify the first 6 SP characters **
    RETLW    CarB    ; 7
    RETLW    CarA    ; 8
    RETLW    CarT    ; 9
    RETLW    CarC    ;10
    RETLW    CarSP    ;
    RETLW    CarP    ; 
    RETLW    CarI    ;  
    RETLW    CarC    ;
    RETLW    CarD
    RETLW    CarR
    RETLW    CarE
    RETLW    CarA
    RETLW    CarM
    RETLW    CarSP
    RETLW   CarSP
    RETLW   CarSP
    RETLW   CarSP
    RETLW    CarSP
    RETLW    CarSP
    RETLW    CarSP
    RETLW    CarSP    
FTexte    equ    $-6    ; necessairy for scrolling 7 caracters on the screen
    RETLW    CarSP

    END
 
Última edición:
Atrás
Arriba