[LÖST]Flasha nya PIC-18?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
rvl
Inlägg: 5719
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: [LÖST]Flasha nya PIC-18?

Inlägg av rvl »

säter skrev:Hur tänkte du här? :)
:) Jag råkade googla fram ett mycket liknande problem: https://www.microchip.com/forums/m1076720.aspx
Edit: citerar regelstridigt föregående inlägg, eftersom det blev sidbyte i tråden.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6886
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: [LÖST]Flasha nya PIC-18?

Inlägg av Marta »

"Själv är jag nyfiken på vilken hårdvara & mjukvara du använder, är det ett hemmabrygg eller hur?"

Det är hemmabygge och hemmaskrivet program, inklusive USB-delen av programmet. Även en hemmaskriven botloader som får fint plats i 512B skrivskyddat minne. Dessa är skivna i assembler.
Datorn är givetvis Linux och programmet där är i gcc utan ++.
Hårdvarans tillblivelse är från tiden då jag hade två händer och det var lätt att göra sådana saker. Använder en 16F1459 samt en step-up från Motorola för Vpp. Går att flytta byglar för ordningsföljd på pinnarna samt 8.5/11.5V Vpp och 5/3.3V signaler.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6886
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: [LÖST]Flasha nya PIC-18?

Inlägg av Marta »

"ps. Invaliden, du kanske kan hjälpa Marta på Microchipforumet."

Den var vass... :humm:
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: [LÖST]Flasha nya PIC-18?

Inlägg av Icecap »

Invaliden: Tack för svaret. Jag använder PICKit3 och den duger fint till mig, ska inte ställa om byglar eller liknande.

Men din lösning var kul och intressant.
Användarvisningsbild
Glenn
Inlägg: 33666
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: [LÖST]Flasha nya PIC-18?

Inlägg av Glenn »

Man kan ju gissa att Martas lösning tillkom innan Pickit2 och Pickit3 fanns ? ..För då var inte microchips egna lösningar så smidiga vad jag förstått.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6886
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: [LÖST]Flasha nya PIC-18?

Inlägg av Marta »

Ingen lösning från MC tycker jag faktiskt är särslilt smidig. Det är för storskaligt och deras assembler är klumpig och helt omöjlig synyax och OP's.
Här är programmet som diskuterats, eller rättare en liten del av det. USB-drivern som inte enumererar stabilt på min Dual Pentium, men däremot på eeePC och RPi, stannar här tills bugen är utdriven.

Kod: Markera allt

**************************************************************


        .RF                     !! NEW FENCED AREA


**************************************************************


        .BC

        !! NOT THE REAL ONE !!
*       COMMANDS
*CMDTAB BRI ADD PCL,A           DON'T USE, SILICONE BUG
CMDTAB  STZ PCLATH
        SMB PCLATH,1
        ADD PCL,A
        JMP DOEXEC              00      EXECUTE CODE
        JMP DORST               01      RESET EXECUTION
        JMP PGREAD              02      READ 32B FLASH
        JMP PGERAS              03      ERASE 64B FLASH
        JMP PGWRIT              04      WRITE 32B FLASH
        JMP DUMMY               05
        JMP DUMMY               06
        JMP TXTEST              07      SEND TEST STRING

        JMP LOAD.LOW            08      LOAD LOWER 32
        JMP LOAD.HIGH           09      LOAD UPPER 32
        JMP READ                0A      READ ALL 64
        JMP DUMMY               0B      OBSOLETED! READ UPPER 32
        JMP DUMMY               0C
        JMP DUMMY               0D      SET TRIS
        JMP PORTIO.SET          0E      SET PORT
        JMP DUMMY               0F      GET PORT

*       INDIRECT ACTIONS PERFORMED FROM MAIN LOOP

        JMP DUMMY               10
        JMP PICRES              11      ENTER RESET TO STOP RUN
        JMP PICRUN              12      CLEAR RESET TO ALLOW RUN
        JMP HVPBEG              13      START HVP
        JMP HVPEND              14      END HVP
        JMP LVPBEG              15      START LVP
        JMP LVPEND              16      END LVP
        JMP BULERA              17      BULK ERASE
        JMP ROWERA              18      ROW ERASE
        JMP PICRD               19      READ DATA
        JMP WRTROW              1A      WRITE DATA
        JMP DUMMY PCONRD              1B      READ CONFIG WORDS
        JMP DUMMY PCONWR              1C      WRITE CONFIG WORDS
        JMP PADRIN              1D      INC PIC ADR
        JMP PASET               1E      SET PIC-18 ADDRESS
        JMP WRTONE              1F

        .EC






PCMD    *                               PIC PROGRAMMING COMMANDS
.LODADR .EQ $80         LOAD A 24-BIT ADR
.INCADR .EQ $F8         INCREMENT ADDRESS +2
.LDATA  .EQ $00         LOAD DATA, NO INC
.LDATAI .EQ $02         LOAD DATA, INC ADR +2
.RDATA  .EQ $FC         READ DATA, NO INC
.RDATAI .EQ $FE         READ DATA, INC ADR +2
.FLASHI .EQ $E0         FLASH DATA INTERNALLY TIMED
.FLASHE .EQ $C0         FLASH DATA EXTERNALLY TIMED
.BULERA .EQ $18         BULK ERASE MEMORY
.EP     .EQ $82         END PROGRAMMING/ERASE
.ROWERA .EQ $F0         ROW ERASE PROGRAM MEMORY




******  CLEAR PIC DATA BUF
*
CLRPB   LOD BS,#TXBUF/128               !BANK
        LOD A,#<PBUF                    PNT AT BUFFER BEGIN
        LOD IXLOW,A
        LOD A,#>PBUF
        LOD IXHIGH,A
        LOD A,#32                       INIT WORD COUNT
        LOD PCOUNT,A
.NEXT   LOD A,#0                        GET ZERO
        LOD (IX)=+,A                    CLR A WORD
        LOD (IX)=+,A
        DSZ PCOUNT                      ALL DONE?
        BRA .NEXT                       DO NXT BT

.DONE   RTS                             DONE



*18FXXXX
******  FLASH PROGRAM MEM
*
WRTROW;
        JSR ADROUT                      PUT ADDRESS

        *                               DO 1:ST BUFFER
        LOD BS,#TXBUF/128               !BANK
        LOD A,#<PBUF                    PNT AT BUFFER BEGIN
        LOD IXLOW,A
        LOD A,#>PBUF
        LOD IXHIGH,A
        LOD A,#32                       INIT WORD COUNT
        LOD PCOUNT,A
        JSR .BUFOUT                     PUT FIRST BUFFER


        *                               DO 2:ND BUFFER
        LOD BS,#TXBUF/128               !BANK
        LOD A,#<PBUF2                   PNT AT BUFFER BEGIN
        LOD IXLOW,A
        LOD A,#>PBUF2
        LOD IXHIGH,A
        LOD A,#32-1                     INIT WORD COUNT, LEAVE LAST
        LOD PCOUNT,A
        JSR .BUFOUT

        *                               DO LAST WORD


        LOD A,#PCMD.LDATA               SEND WORD, LEAVE ADDRESS
        JSR CMDOUT
        JSR DATOUT



        JSR FLASHI                      DO THE FLASH  !! INTERNALLY TIMED FOR NOW !!!!

        LOD BS,#TXBUF/128               !BANK
        LOD A,#128                      BUMP ADR
        ADD ADR18.LOW,A
        LOD A,#0
        ADC ADR18.MID,A
        ADC ADR18.TOP,A
        LOD A,#$77                      RETURN CODE
        RTS                             BLOCK DONE


.BUFOUT
        LOD A,#PCMD.LDATAI              LOAD DATA INTO PIC AND INC
        JSR CMDOUT
        JSR DATOUT
        INC IXLOW
        INC IXLOW

        LOD BS,#TXBUF/128               !BANK
        DSZ PCOUNT
        JMP .BUFOUT                     DO NXT WORD

        RTS                             BUFFER DONE



* 18FXXXX
******  READ MEMORY
*
**RPROG
PICRD;  JSR CLRPB                       CLEAR BUFFER

*HEERE



        JSR ADROUT                      SEND START ADR TO PIC

        LOD A,#<PBUF                    START AT POS 0 IN PBUF
        LOD IXLOW,A
        LOD A,#>PBUF
        LOD IXHIGH,A
        LOD BS,#CMDBUF/128              !BANK
        LOD A,CMDBUF+CMDBLK.LENGTH      GET IENGTH
        LOD BS,#TXBUF/128               !BANK
        LOD ADR18.LENGTH,A              #WORD TO READ
        LOD PCOUNT,A


.NXTWRD LOD A,#PCMD.RDATAI              GET READ AND INC  CMD
        JSR CMDOUT                      SEND CMD
        JSR PICIN                       READ A WORD
        INC IXLOW                       INC BUF^
        INC IXLOW

        LOD BS,#TXBUF/128               !BANK
        DSZ PCOUNT                      ALL DONE?
        BRA .NXTWRD                     DO NXT WORD

        .BC
        LOD A,#$55      DEBUG!!!!!
        LOD (IX)0,A
        LOD A,#$AA
        LOD (IX)1,A
        .EC

        LOD A,ADR18.LENGTH              BUMP PIC ADR
        ADD A,ADR18.LENGTH              DOUBLE FOR WORDS
        ADD ADR18.LOW,A
        LOD A,#0
        ADC ADR18.MID,A
        ADC ADR18.TOP,A

        LOD A,#$42                      RETURN CODE

        RTS                             DONE



******  WRITE BY SINLE WORD FLASHES
*
WRTONE; LOD BS,#TXBUF/128               !BANK
        LOD A,#<CMDBUF                  PNT AT CMDBLK
        LOD IXLOW,A
        LOD A,#>CMDBUF
        LOD IXHIGH,A

        LOD A,(IX)CMDBLK.LENGTH         GET #WORDS TO WRITE
        LOD PCOUNT,A                    SET WORD COUNTER


        JSR ADROUT                      SET INITIAL ADR

        LOD A,#<PBUF                    START AT POS 0 IN PBUF
        LOD IXLOW,A
        LOD A,#>PBUF
        LOD IXHIGH,A

.NXTWRD LOD A,#PCMD.LDATA               LOAD ONE WORD DATA
        JSR CMDOUT                      COMMAND..
        JSR DATOUT                      ..AND DATA
        JSR FLASHI                      FLASH IT
        JSR INCADR                      NXT ADR IN PIC
        INC IXLOW                       NXT IN BUF, NEVER ROLLS OVER
        INC IXLOW
        LOD BS,#TXBUF/128               !BANK
        LOD A,#2                        FOLLOW WITH ADR
        ADD ADR18.LOW,A
        LOD A,#0
        ADC ADR18.MID,A
        ADC ADR18.TOP,A
        DSZ PCOUNT                      DO NXT WORD
        JMP .NXTWRD

        LOD A,#$17                      RETURN CODE
        RTS                             DONE



******  SET PIC-18 ADDRESS POINTER
*
PASET;  LOD BS,#ADR18/128               !BANK

        LOD A,#<CMDBUF                  PNT AT INPUT DATA
        LOD IXLOW,A
        LOD A,#>CMDBUF
        LOD IXHIGH,A

        LOD A,(IX)CMDBLK.ADRLOW         PUT ADR IN PLACE
        LOD ADR18.LOW,A
        LOD A,(IX)CMDBLK.ADRMID
        LOD ADR18.MID,A
        LOD A,(IX)CMDBLK.ADRTOP
        LOD ADR18.TOP,A

        LOD A,#$AA                      RETURN CODE
        RTS                             DONE





******  BULK ERASE
*
BULERA;


        JSR ADROUT                      SEND ADDRESS
        LOD A,#PCMD.BULERA              SEND CMD
        JSR CMDOUT
        JSR DELAY.10M                   WAIT FOR COMPLETION
        LOD A,#$33                      GET RETURN CODE
        RTS                             DONE



******  ROW ERASE
*
ROWERA;


        JSR ADROUT                      SEND ADDRESS
        LOD A,#PCMD.ROWERA              SEND CMD
        JSR CMDOUT
        JSR DELAY.TROW                  WAIT FOR COMPLETION
        LOD A,#$34                      GET RETURN CODE
        RTS                             DONE


******  INCREMENT ADR
*
INCADR;
        LOD A,#PCMD.INCADR              INCREMENT ADDRESS BY 1 WORD
        JSR CMDOUT                      SEND AND EXIT
        LOD A,#$22                      GET RETURN CODE
        RTS                             DONE



******  DO AN INTERNALY TIMED FLASH
*
FLASHI
        LOD A,#PCMD.FLASHI              START FLASH
        JSR CMDOUT

        JMP DELAY.TINTFL                WAIT AND EXIT


******  DO AN EXTERNALY TIMED FLASH
*
FLASHE
        *SEI                            BLOCK IRQ'S

        LOD A,#PCMD.FLASHE              START FLASH
        JSR CMDOUT

        JSR DELAY.TEXTFL                !*CRITICAL WAIT*!

        LOD A,#PCMD.EP                  END FLASH
        JSR CMDOUT

        *CLI
        RTS                             DONE




******  SEND COMMAND TO PIC
*       IN: A = COMMAND
*
CMDOUT  LOD BS,#TXBUF/128               !BANK
        LOD TXBUF.TOP,A                 PUT DATA TO SHIFT OUT
        LOD A,#8                        8 BITS DATA
        LOD TXBUF.BITCNT,A
        JSR PICOUT                      SEND IT
        JMP DELAY.TDLY                  WAIT AND EXIT


******  SEND ADR TO PIC
*       IN = ADR18
*
ADROUT  LOD A,#PCMD.LODADR              SEND ADDRESS COMMAND
        JSR CMDOUT
        LOD BS,#TXBUF/128               !BANK
        CLF CY                          CLEAR LOWEST BIT
        ROL A=ADR18.LOW                 GET AND SHIFT UP
        LOD TXBUF.LOW,A                 PUT FOR SHIFT OUT
        ROL A=ADR18.MID                 HIGH BYTE
        LOD TXBUF.MID,A
        ROL A=ADR18.TOP                 UPPER BYTE
        LOD TXBUF.TOP,A
        LOD A,#24                       24 BITS DATA
        LOD TXBUF.BITCNT,A
        JMP PICOUT                      SEND IT


******  SEND DATA TO PIC
*       IN = (IX)
*
DATOUT  LOD BS,#TXBUF/128               !BANK
        CLF CY                          CLEAR LOWEST BIT
        LOD A,(IX)                      GET LOW BYTE
        ROL AREG                        SHIFT UP
        LOD TXBUF.LOW,A                 PUT FOR SHIFT OUT
        LOD A,(IX)1                     HIGH BYTE
        ROL AREG
        LOD TXBUF.MID,A
        STZ AREG                        CLEAR TOP BYTE
        ROL AREG
        LOD TXBUF.TOP,A
        LOD A,#24                       24 BITS DATA
        LOD TXBUF.BITCNT,A
        JMP PICOUT                      SEND IT




******  SEND DATA TO PIC
*       IN: TXBUF = DATA SHIFTED TO THE RIGHT POS, TXBUF.BITCNT = #BT
*
PICOUT

.NXT    LOD BS,#FLAT/128                !BANK
        LOD A,LATC                      GET OUTPUTS
        RMB AREG,3                      CLEAR DATA BIT ASSUMING ZERO
        LOD BS,#TXBUF/128               !BANK
        ROL TXBUF.LOW                   SHIFT OUT DATA BIT
        ROL TXBUF.MID
        ROL TXBUF.TOP
        SFC CY                          IS IT A ONE?
        SMB AREG,3                      YES-SET IT
        LOD BS,#FLAT/128                !BANK
        LOD LATC,A                      SET DATA BIT
        SEF FLAT.CLOCK                  WIGGLE PGC
        JSR DELAY.TBIT
        LOD BS,#FLAT/128                !BANK
        CLF FLAT.CLOCK
        JSR DELAY.TBIT
        LOD BS,#TXBUF/128               !BANK
        DSZ TXBUF.BITCNT                DO NXT BIT
        JMP .NXT
        LOD BS,#FLAT/128                !BANK
        CLF FLAT.DATA                   SOME MAGIC? LEAVE PGD AS LOW
        RTS                             DONE


*.DATA  .EQ FPORT*8+3                   0       16      RC0     DATA
*.STEPUP .EQ PORTA*8+5                  1       15      RC1     0=STEP-UP ON
*.RESET .EQ FPORT*8+5                   2       14      RC2     1=RESET
*.HVON  .EQ FPORT*8+4                   3       9       RC7     1=HV ON
*.CLOCK .EQ PORTA*8+4                   4       8       RC6     CLOCK


******  GET DATA FROM PIC
*       OUT: (IX)
*
PICIN
        LOD BS,#TXBUF/128               !BANK
        LOD A,#24                       24 BITS
        LOD TXBUF.BITCNT,A
        LOD BS,#FTRIS/128               !BANK
        SEF FTRIS.DATA                  SET INPUT MODE

.NXT    LOD BS,#FLAT/128                RISE CLK
        SEF FLAT.CLOCK
        JSR DELAY.TBIT                  WAIT
        LOD BS,#FPORT/128               !BANK
        LOD A,FPORT                     GET PORT
        ROR AREG                        DATA BIT INTO CY
        ROR AREG
        ROR AREG
        ROR AREG
        LOD BS,#TXBUF/128               !BANK
        ROL TXBUF.LOW                   SHIFT IN DATA BIT
        ROL TXBUF.MID
        ROL TXBUF.TOP
        LOD BS,#FLAT/128                !BANK
        CLF FLAT.CLOCK                  LOWER CLK
        JSR DELAY.TBIT                  WAIT
        LOD BS,#TXBUF/128               !BANK
        DSZ TXBUF.BITCNT                DO NXT BIT
        JMP .NXT
        LOD BS,#FTRIS/128               !BANK
        CLF FTRIS.DATA                  BACK TO OUTPUT MODE


        LOD BS,#TXBUF/128               !BANK
        ROR A=TXBUF.TOP                 GET TOP BIT
        ROR A=TXBUF.MID                 GET HIGH BYTE
        LOD (IX)1,A                     PUT HIGH BYTE
        ROR A=TXBUF.LOW                 LOW BYTE
        LOD (IX)0,A


        .BC                             !!FOR DEBUG
        LOD BS,#TXBUF/128               !BANK
        LOD A,TXBUF.TOP                 GET TOP BIT
        LOD (IX)2,A
        LOD A,TXBUF.MID                 GET HIGH BYTE
        LOD (IX)1,A                     PUT HIGH BYTE
        LOD A,TXBUF.LOW                 LOW BYTE
        LOD (IX)0,A
        .EC

        RTS                             DONE







        .BC
*       PORT PIN FOR PIC FLASHER

FPORT   .EQ PORTC
*                                       I/O     PIN     PORT
.DATA   .EQ FPORT*8+0  01               0       16      RC0     DATA
.STEPUP .EQ FPORT*8+1  02               1       15      RC1     1=STEP-UP ON
.RESET  .EQ FPORT*8+2  04               2       14      RC2     1=RESET
.HVON   .EQ FPORT*8+7  80               3       9       RC7     1=HV ON
.CLOCK  .EQ FPORT*8+6  40               4       8       RC6     CLOCK
        .EC






******  INIT PORT AND OUTPUTS, BEGIN LVPMODE
*
LVPBEG; LOD BS,#FLAT/128                ENSURE INIT CONDITIONSS
        SEF FLAT.RESET                  RESET
        CLF FLAT.DATA                   PGC/PGD LOW
        CLF FLAT.CLOCK
        CLF FLAT.HVON                   NO HV
        SEF FLAT.STEPUP

        LOD BS,#FTRIS/128
        SEF FTRIS.DATA                  FLOAT PGC/PGD
        SEF FTRIS.CLOCK
        CLF FTRIS.RESET                 ENSURE AS OUTPUTS
        CLF FTRIS.HVON
        CLF FTRIS.STEPUP
        JSR DELAY.10M                   WAIT A LITTLE

        LOD BS,#FLAT/128                GIVE PIC A FRESH RESET
        CLF FLAT.RESET                  RELEASE RESET
        JSR DELAY.10M                   WAIT, START TIMER WON'T EXPIRE
        LOD BS,#FLAT/128
        SEF FLAT.RESET                  BACK TO RESET

        JSR DELAY.1M                    SOME WAIT
        LOD BS,#FTRIS/128               PGC/PGD AS OUTPUTS
        CLF FTRIS.CLOCK
        CLF FTRIS.DATA
        JSR DELAY.1M                    WAIT A LITTLE

        LOD A,#'M                       SEND KEYWORD
        JSR CMDOUT
        LOD A,#'C
        JSR CMDOUT
        LOD A,#'H
        JSR CMDOUT
        LOD A,#'P
        JSR CMDOUT

        JSR DELAY.10M                   SOME WAIT

        LOD A,#$A6                      EXIT CODE
        RTS                             DONE



******  EXIT LVP PROGRAMMING MODE
*
LVPEND; JSR DELAY.10M                   WAIT-JUST IN CASE
        LOD BS,#FLAT/128
        CLF FLAT.HVON                   ENSURE NO HV
        SEF FLAT.STEPUP
        LOD BS,#FTRIS/128               TRISTATE PGC AND PGD
        SEF FTRIS.DATA
        SEF FTRIS.CLOCK
        NOP
        NOP
        LOD BS,#FLAT/128
        CLF FLAT.RESET                  RELEASE RESET TO EXIT LVP
        JSR DELAY.10M                   10 MILLISEC, START TIMER WON'T EXPIRE
        LOD BS,#FLAT/128
        SEF FLAT.RESET                  BACK TO RESET
        LOD A,#$5A                      GET RETURN VALUE
        RTS                             DONE





******  INIT PORT AND OUTPUTS FOR PROGRAMMING, BEGIN HVPMODE
*
HVPBEG; LOD BS,#FLAT/128                INIT PORT
        SEF FLAT.RESET                  RESET OUT PULLED LOW
        CLF FLAT.DATA                   INIT TO ZERO
        CLF FLAT.CLOCK                  INIT TO ZERO
        CLF FLAT.HVON                   SET OFF
        SEF FLAT.STEPUP                 SET  OFF

        LOD BS,#FTRIS/128               SET I/O
        CLF FTRIS.RESET                 ENSURE AS OUTPUTS
        CLF FTRIS.HVON
        CLF FTRIS.STEPUP
        JSR DELAY.10M                   GIVE RESET SOME TIME
        CLF FTRIS.DATA                  DATA. CLOCK AS OUTPUTS
        CLF FTRIS.CLOCK
        LOD BS,#FLAT/128
        CLF FLAT.STEPUP                 START STEPUP
        JSR DELAY.100M                  WAIT FOR IT TO BUILD UP VOLTAGE
        JSR DELAY.100M
        LOD BS,#FLAT/128
        SEF FLAT.HVON                   TURN ON HV
        NOP
        NOP
        CLF FLAT.RESET                  RELEASE RESET INTO VPP
        JSR DELAY.10M                   WAIT

        LOD A,#$A5                      EXIT CODE
        RTS                             DONE


******  EXIT HVP PROGRAMMING MODE
*
HVPEND; JSR DELAY.10M                   WAIT-JUST IN CASE
        LOD BS,#FLAT/128
        SEF FLAT.RESET                  PULL RESET DIRECTLY FROM VPP
        CLF FLAT.HVON                   TURN OFF HV
        SEF FLAT.STEPUP                 STOP STEPUP
        JSR DELAY.10M                   GIVE IT SOME TIME
        LOD BS,#FTRIS/128               TRISTATE PGC AND PGD
        SEF FTRIS.DATA
        SEF FTRIS.CLOCK
        LOD A,#$5A                      EXIT CODE
        RTS                             DONE


TESTIT;

        LOD BS,#FLAT/128

.NXT    SEF FLAT.CLOCK
        CLF FLAT.DATA
        JSR DELAY.TBIT
        CLF FLAT.CLOCK
        SEF FLAT.DATA
        JSR DELAY.TBIT
        JMP .NXT





******  DELAYS
*
DELAY

.TDLY   JMP .5U                         BETWEEN CMD AND DATA
.TBIT   JMP .50U                        PGC HIGH/PGC LOW, DO IT SLOW
.TBULK  JMP .100M                       BULK ERASE
.TROW   JMP .5M                         ROW ERASE
.TINTFL JMP .10M                        INT TIMED FLASH
.TEXTFL JMP .1M                         EXT TIMED FLASH, SHORTEST POSSIBLE










.50U    *                               5 MICROSECONDS, MAKE IT 6 TO BE SURE
        LOD A,#50*12/4                  TIME*SPEED/LOOPLENGTH
.50U0   DSZ AREG                        DO DELAY LOOP
        JMP .50U0
        RTS                             DONE


.5U     *                               5 MICROSECONDS, MAKE IT 6 TO BE SURE
        LOD A,#6*12/4                   TIME*SPEED/LOOPLENGTH
.5U0    DSZ AREG                        DO DELAY LOOP
        JMP .5U0
        RTS                             DONE

.1U     *                               1 MICROSECOND
        LOD A,#1*12/4                   TIME*SPEED/LOOPLENGTH
.1U0    DSZ AREG                        DO DELAY LOOP
        JMP .1U0
        RTS                             DONE


.5M    *
        LOD A,#118                      5 000US / 42.7US = #LOOPS OF IRQ TIMER
        LOD TIMER,A
.5M0    TFZ TIMER                       WAIT FOR IT TO EXPIRE
        SFS Z
        JMP .5M0
        RTS                             DONE


.10M    *
        LOD A,#235                      10 000US / 42.7US = #LOOPS OF IRQ TIMER
        STZ TIMER                       START TIMER
        DEC TIMER
.10M0   TFZ TIMER                       WAIT FOR IT TO EXPIRE
        SFS Z
        JMP .10M0
        RTS                             DONE

.100M   *                               100 MILLISECONDS
        JSR .10M                        DO 10 * A0 MILLISECONDS
        JSR .10M
        JSR .10M
        JSR .10M
        JSR .10M
        JSR .10M
        JSR .10M
        JSR .10M
        JSR .10M
        JMP .10M

.1M     LOD A,#22
        LOD TIMER,A
.1M0    TFZ TIMER                       WAIT FOR IT TO EXPIRE
        SFS Z
        JMP .1M0
        RTS                             DONE


.BLIP   JMP .1U

        NOP
        NOP
        RTS





******  RESET PIC
*
PICRES;
        LOD BS,#FLAT/128
        SEF FLAT.RESET
        CLF TLED
        LOD A,#$44
        RTS

******  RELEASE PIC RESET
PICRUN;
        LOD BS,#FLAT/128
        CLF FLAT.RESET
        LOD A,#$45
        SEF TLED
        RTS


        .EN



Skriv svar