Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. H       function        X,(X>>8)&0FF
  2. L       function        X,X&0FF
  3.  
  4.         ; .TITLE PNLPGM, 'SC/MP PROM PROGRAMMER'
  5.  
  6. ; "PNLPGM" IS A PROGRAM THAT ALLOWS THE SC/MPP LCDS TO
  7. ; PROGRAM MM5204 OR MM4204 PROMS USING THE PANEL FOR ALL
  8. ; INPUTS FROM THE USER
  9.  
  10. ; THE USER MUST ENTER THE STARTING HEX ADDRESS TO BE
  11. ; PROGRAMMED FROM OR COPIED TO INTO POINTER #1 BEFORE
  12. ; EXECUTING EACH ROUTINE.
  13.  
  14. ; THE PROGRAM REQUIRES THAT THERE ARE 512 CONTINUOUS MEMORY
  15. ; LOCATIONS UPWARDS FROM THE CONTENTS OF POINTER #1.
  16.  
  17. ; "PNLPGM" USES MEMORY ON THE LCDS MOTHERBOARD FOR TEMPORARY
  18. ; STORAGE.  THEREFORE, USER R/W MEM0RY CAN BE ANYHERE,
  19. ; EXCEPT AS SHOWN BELOW.
  20.  
  21. ; "PNLPGM" CAN BE ASSEMBLED ANYWHERE THE USER HAS MEMORY
  22. ; SPACE EXCEPT IN THE FOLLOWING LOCATIONS:
  23.  
  24. ;       X'8000 -- X'83FF      LOCATIONS OCCUPIED BY
  25. ;                             PROGRAMMER HARDWARE
  26. ;       X'7000 -- X'7FFF      LOCATIONS USED BY LCDS
  27.  
  28. ; THE ENTRY POINTS ARE:
  29.  
  30. ; NAME          ADDRESS
  31. ; ----          -------
  32.  
  33. ; CKERSD        X'0001          CHECK PROM FOR ERASED
  34. ; WOCHK         X'0035          PRORGAM PROM WITHOUT CHECK
  35. ;                               FOR ERASED
  36. ; PROG          X'0048          PRORGAM PROM WITH CHECK FOR
  37. ;                               ERASED
  38. ; COPY          X'0101          COPY PROM INTO MEMORY
  39. ; VERIFY        X'012C          VERIFY PROM AGAINST MEMORY
  40.  
  41. ; "PNLPGM" HALTS WHEN FINISHED OR ON ERrORS.  THE ERRROR
  42. ; HALTS ARE:
  43.  
  44. ;  X'0035       PROM NOT ERASED
  45. ;  X'0085       PROM CANNOT BE PROGRAMMED
  46. ;  X'015A       PROM DOES NOT VERIFY
  47.  
  48. ; THE "HALT INST" SWITCH ON THE LCDS MOTHERBOARD MUST BE
  49. ; IN THE "DEBUG" POSITION BEFORE EXECUTION
  50.  
  51.         ;.PAGE  'POINTERS AND CONSTANTS'
  52.  
  53. $       =       0
  54.  
  55. P1      =       1
  56. P2      =       2
  57. P3      =       3
  58.  
  59. PPRGMR  =       08000           ;PERIPHERAL ADDR. OF PROM
  60.                                 ; PROGPAMMER BOARD
  61. VP      =       014             ;ORDER CODE FOR PROG. VOLTAGE
  62. RD      =       0C              ;ORDER CODE FOR READ
  63. VSS     =       04              ;ORDER CODE FOR VSS,VBB,VDD
  64. CS      =       01C             ;ORDER CODE FOR CHIP SELECT
  65. LOAD    =       0               ;ORDER CODE TO LOAD DATA
  66. CLK     =       1               ;ORDER CODE TO CLOCK COUNTER
  67. RDPRM   =       2               ;ORDER CODE TO READ PROM
  68.                                 ; DATA
  69. CLR     =       3               ;ORDER CODE TO CLEAR COUNTER
  70. ENBL    =       4               ;ORDER CODE TO ENABLE CONTROL
  71.                                 ; LATCH
  72. RAM     =       077D0           ;RAM POINTER TO MOTHERBOARD
  73.                                 ; R/W MEMORY
  74. HI      =       0               ;TEMPORARY LOCATIONS IN RAM
  75. LO      =       -1
  76. SAVLO   =       -2
  77. SAVHI   =       -3
  78. HCNT    =       -4
  79. DPLO    =       -5
  80. DPHI    =       -6
  81.  
  82.         ;.PAGE  'PROM ACCESS AND PROGRAAMMING ROUTINES'
  83.  
  84. ; *** ROUTINE TO CHECK PROM FOR ERASED CONDITION ***
  85.  
  86.         NOP
  87. CKERSD:
  88.         LDI     L(ERASED)-1
  89.         XPAL    P1
  90.         LDI     H(ERASED)
  91.         XPAH    P1
  92.         XPPC    P1
  93.         HALT                    ;HALT IF ERASED
  94.  
  95. ; THIS SUBROUTINE IS ALSO CALLED BY "PROG" TO VERIFY THAT
  96. ; THE PROM IS EPASED.
  97.  
  98. ERASED:
  99.         LDI     L(RAM)          ;INIT RAM POINTER
  100.         XPAL    P2
  101.         LDI     H(RAM)
  102.         XPAH    P2
  103. ERAS2:
  104.         LDI     H(PPRGMR)       ;SET ADDR. OF PROGRAMMER
  105.         XPAH    P3
  106.         LDI     L(PPRGMR)
  107.         XPAL    P3
  108.         LDI     1               ;SET UPPER COUNT
  109.         ST      HI(P2)          ;STACK IS EMPTY, USE AS PTR
  110.         ST      RD(P3)          ;SET READ MODE
  111.         ST      CS(P3)          ;SELECT PROM SOCKET
  112.         LDI     0               ;SET LOWER COUNT
  113.         ST      LO(P2)
  114.         ST      CLR(P3)         ;CLEAR PROM COUNTER
  115.         ST      LOAD(P3)        ;CLEAR OATA LATCHES FOR READ
  116. ELOOP:
  117.         LD      RDPRM(P3)       ;READ DATA OUT OF PROM
  118.         JNZ     NOT             ;DATA NOT ZERO? NOT ERASEO
  119.         ST      CLK(P3)         ;DATA OK, BUMP COUNTER
  120.         DLD     LO(P2)          ;DECREMENT LOWER COUNT
  121.         JNZ     ELOOP           ;NOT DONE YET
  122.         DLD     HI(P2)          ;DECREMENT UPPER COUNT
  123.         JP      ELOOP           ;NOT DONE YET
  124.         XPPC    P1              ;PROM IS ERASED
  125. NOT:
  126.         HALT                    ;HALT IF PROM NOT ERASED
  127.  
  128. ; *** ENTRY POINT TO PPOGRAM PROM W/O CHECK FOR ERASED ***
  129.  
  130. WOCHK:
  131.         CCL
  132.         LDI     H(RAM)          ;INIT RAM POINTER
  133.         XPAH    P2
  134.         LDI     L(RAM)
  135.         XPAL    P2
  136.         LDI     H(PPRGMR)
  137.         XPAH    P3
  138.         LDI     L(PPRGMR)
  139.         XPAL    P3
  140.         XPAH    P1
  141.         ADI     2               ;ADD 512 OFFSET
  142.         XPAH    P1
  143.         JMP     SET
  144.  
  145. ; *** ENTRY POINT TO PROGRAM PROM W/CHECK FOR ERASED **
  146.  
  147. ;     PROM IS PROGRAMMED FROM MOST SIGNIFICANT ADDRESS TO
  148. ;     LEAST SIGNIFICANT ADDRESS DUE TO INVERSION OF COUNTER
  149.  
  150. PROG:
  151.         CCL
  152.         LDI     L(RAM)
  153.         XPAL    P2
  154.         LDI     H(RAM)
  155.         XPAH    P2
  156.         XPAL    P1              ;SAVE ADDRESS
  157.         ST      SAVLO(P2)
  158.         XPAH    P1
  159.         ST      SAVHI(P2)
  160.         LDI     L(ERAS2)-1      ;CHECK PROM FOR ERASED
  161.         XPAL    P1
  162.         XPPC    P1
  163.         LD      SAVLO(P2)
  164.         XPAL    P1
  165.         LD      SAVHI(P2)
  166.         ADI     2               ;ADD 512 OFFSET
  167.         XPAH    P1
  168. SET:    LDI     1
  169.         ST      HI(P2)          ;SET UPPER LOC COUNT
  170.         LDI     0
  171.         ST      LO(P2)          ;SET LOWER LOC COUNT
  172.         ST      CLR(P3)         ;CLEAR PROM COUNTER
  173. NXTLOC:
  174.         LD      @-1(P1)         ;GET DATA TO PROGRAM
  175.         XAE                     ;SAVE IN EXTENSION REG.
  176. THSLOC:
  177.         LDI     H(PPROM)        ;SET ADDR OF PROGRAMMING RTN
  178.         XPAH    P1
  179.         ST      SAVHI(P2)       ;SAVE PTR ADDR
  180.         LDI     L(PPROM)-1
  181.         XPAL    P1
  182.         ST      SAVLO(P2)
  183.         LDI     -2              ;SET COUNT
  184.         ST      HCNT(P2)        ;SAVE HIT COUNT IN RAM
  185. GO:
  186.         XPPC    P1
  187.         XRE                     ;CHECK PROM DATA
  188.         JZ      OK              ;PPOM DATA CORRECT, DO X+5X
  189.         DLD     HCNT(P2)        ;DECREMENT HIT COUNT
  190.         JNZ     GO              ;CHECK FOR MAX HIT
  191. NPROG:
  192.         HALT                    ;HIT COUNT OVER MAX, BAD PROM
  193. OK:
  194.         CCL
  195.         LDI     0
  196.         ST      DPHI(P2)        ;CLEAR UPPER D. P COUNT
  197.         CAD     HCNT(P2)        ;COMPLEMENT HIT COUNT
  198.         ST      HCNT(P2)
  199.         CCL                     ;CLEAR CARRY/LINK FLAG
  200.         ADD     HCNT(P2)        ;COMPUTE 5X
  201.         ST      DPLO(P2)
  202.         LDI     0
  203.         ADD     DPHI(P2)
  204.         ST      DPHI(P2)        ;2X
  205.         CCL
  206.         LD      DPLO(P2)
  207.         ADD     DPLO(P2)
  208.         ST      DPLO(P2)
  209.         LD      DPHI(P2)
  210.         ADD     DPHI(P2)
  211.         ST      DPHI(P2)        ;4X
  212.         CCL
  213.         LD      HCNT(P2)
  214.         ADD     DPLO(P2)
  215.         ST      DPLO(P2)
  216.         LDI     0
  217.         ADD     DPHI(P2)
  218.         ST      DPHI(P2)        ;5X
  219. PRLP:
  220.         XPPC    P1              ;PROGRAM PROM
  221.         DLD     DPLO(P2)        ;DECREMENT LOWER COUNT
  222.         JNZ     PRLP            ;NOT DONE
  223.         DLD     DPHI(P2)        ;DECREMENT UPPER COUNT
  224.         JP      PRLP            ;NOT DONE
  225.         LD      SAVLO(P2)       ;RESTORE P1
  226.         XPAL    P1
  227.         LD      SAVHI(P2)
  228.         XPAH    P1
  229. UPDATE:
  230.         ST      CLK(P3)         ;BUMP PROM COUNTER
  231.         DLD     LO(P2)          ;DECREMENT LOWER LOC COUNT
  232.         JNZ     NXTLOC          ;NOT DONE
  233.         DLD     HI(P2)          ;DECREMENT UPPER LOC COUNT
  234.         JP      NXTLOC          ;NOT DONE
  235.         HALT                    ;HALT WHEN DONE
  236. PPROM:
  237.         LDI     0
  238.         ST      RD(P3)          ;TURN OFF READ MODE AND
  239.         ST      CS(P3)          ; CHIP SELECT
  240.         LDE
  241.         ST      LOAD(P3)        ;SEND DATA TO PROGRAMMER
  242.         LDI     1
  243.         ST      VSS(P3)         ;TURN ON VSS VOLTAGE
  244.         LDI     07F             ;WAIT 500 MICPOSECONDS
  245.         DLY     0
  246.         ST      VP(P3)          ;TURN ON PROGRAM PULSE
  247.         LDI     0FF
  248.         DLY     0               ;DELAY 1 MS
  249.         LDI     0
  250.         ST      VP(P3)          ;TURN OFF VP
  251.         LDI     20              ;WAIT 100 MICROSECONDS
  252.         DLY     0
  253.         LDI     0
  254.         ST      VSS(P3)         ;TURN OFF VSS VOLTAGE
  255.         LDI     20
  256.         DLY     0
  257.         ST      RD(P3)          ;SET UP READ MODE
  258.         ST      CS(P3)          ;SELECT PROM SOCKET
  259.         LDI     0
  260.         ST      LOAD(P3)        ;CLEAR DATA LATCHES
  261.         LD      RDPRM(P3)       ;READ DATA FROM PROM
  262.         XPPC    P1
  263.         JMP     PPROM
  264.  
  265. ; *** COPY PROM TO RANGE IN MEMORY ***
  266.  
  267. COPY:
  268.         CCL
  269.         LDI     H(RAM)
  270.         XPAH    P2
  271.         LDI     L(RAM)
  272.         XPAL    P2              ;INIT RAM POINTER
  273.         XPAL    P1
  274.         ST      SAVLO(P2)
  275.         XPAH    P1
  276.         ADI     2               ;ADD 512 OFFSET
  277.         ST      SAVHI(P2)
  278.         JS      P1,SETRD        ;SET READ MODE
  279.         LD      SAVHI(P2)       ;RETRIEVE ADDRESS
  280.         XPAH    P1
  281.         LD      SAVLO(P2)
  282.         XPAL    P1
  283. CPLOOP:
  284.         LD      RDPRM(P3)       ;GET PROM DATA
  285.         ST      @-1(P1)         ;STORE INTO MENORY
  286.         ST      CLK(P3)         ;BUMP PROM COUNTER
  287.         DLD     LO(P2)          ;DECREMENT LOC COUNTER LOW
  288.         JNZ     CPLOOP
  289.         DLD     HI(P2)          ;DECREMENT LOC COUNTER HIGH
  290.         JP      CPLOOP          ;NOT DONE
  291.         HALT                    ;HALT WHEN DONE
  292.  
  293. ; *** VERIFY PROM AGAINST RANGE IN MEMORY ***
  294.  
  295. VERIFY:
  296.         CCL
  297.         LDI     H(RAM)
  298.         XPAH    P2
  299.         LDI     L(RAM)
  300.         XPAL    P2              ;INIT RAM POINTER
  301.         XPAL    P1
  302.         ST      SAVLO(P2)
  303.         XPAH    P1
  304.         ADI     2               ;ADD 512 OFFSET
  305.         ST      SAVHI(P2)
  306.         JS      P1,SETRD        ;SET READ MODE
  307.         LD      SAVHI(P2)       ;RETRIEVE ADDRESS
  308.         XPAH    P1
  309.         LD      SAVLO(P2)
  310.         XPAL    P1
  311. VLOOP:
  312.         LD      RDPRM(P3)       ;GET DATA FROM PROM
  313.         XOR     @-1(P1)         ;COMPARE AGAINST MEMORY DATA
  314.         JNZ     NOVFY           ;DOES NOT VERIFY
  315.         ST      CLK(P3)         ;BUMP PROM COUNTER
  316.         DLD     LO(P2)          ;DECREMENT LOC COUNTER LOW
  317.         JNZ     VLOOP           ;NOT DONE
  318.         DLD     HI(P2)          ;DECREMENT LOC COUNTER HIGH
  319.         JP      VLOOP           ;NOT DONE
  320.         HALT                    ;HALT WHEN DONE
  321. NOVFY:
  322.         HALT                    ;HALT ON ERROR
  323. SETRD:
  324.         LDI     H(PPRGMR)       ;PUT ADDR. OF PROGRAMMER
  325.         XPAH    P3              ; IN P3
  326.         LDI     L(PPRGMR)
  327.         XPAL    P3
  328.         LDI     1               ;SET UPPER LOC COUNTER
  329.         ST      HI(P2)
  330.         ST      RD(P3)          ;SET READ MODE
  331.         ST      CS(P3)          ;SELECT PROM SOCKET
  332.         LDI     0
  333.         ST      LO(P2)
  334.         ST      CLR(P3)         ;CLEAR PROM COUNTER
  335.         ST      LOAD(P3)        ;CLEAR PROM DATA LATCHES
  336.         XPPC    P1
  337.  
  338.         END
  339.