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        TTYPGM, ´ SC/MP PROGRAMMER´
  5.  
  6. ; "TTYPGM" IS A PROGRAM THAT ALLOWS THE SC/MP LCDS TO
  7. ; PROGRAM MM5204 OR MM4204 PROMS.
  8.  
  9. ; THE COMMANDS AND THEIR FORMATS ARE:
  10.  
  11. ;       CXXXX           COPY PROM INTO MEMORY
  12.  
  13. ;       VXXXX           VERIFY PROM AGAINST MEMORY
  14.  
  15. ;       PXXXX           PROGRAM PROM FROM MEMORY
  16. ;                       WITH CHECK FOR ERASED
  17.  
  18. ;       YXXXX           PROGRAM FROM MEMORY
  19. ;                       WITHOUT CHECK FOR ERASED
  20.  
  21. ; WHERE XXXX IS THE HEX STARTING ADDRESS TO BE USED.
  22.  
  23. ; THE PROGRAM REQUIRES THAT THERE ARE 512 CONTINUOUS MEMORY
  24. ; LOCATIONS UPWARDS FROM XXXX.
  25.  
  26. ; "TTYPGM" USES MEMORY ON THELCDS MOTHERBOARD FOR TEMPORARY
  27. ; STRORAGE.  THEREFORE, USER R/W MEMORY CAN BE ANYWHERE,
  28. ; EXCEPT AS SHOWN BELOW.
  29.  
  30. ; "TTYPGM" CAN BE ASSEMBLED ANYWHERE THE USER HAS MEMORY
  31. ; SPACE EXCEPT IN THE FOLLOWING LOCATIONS:
  32.  
  33. ;       X'8000 -- X'83FF        LOCATIONS OCCUPIED BY
  34. ;                               PROGRAMMER HARDWARE
  35. ;       X'7000 -- X'7FFF        LOCATIONS USED BY LCDS
  36.  
  37. ; A TELETYPE IS REQUIRED FOR EXECUTION
  38.  
  39.         ;.PAGE  'POINTERS AND CONSTANTS'
  40.  
  41. $       =       0
  42. P1      =       1
  43. P2      =       2
  44. P3      =       3
  45.  
  46. PPRGMR  =       08000           ;PERIPHERAL ADDR. OF PROM
  47.                                 ; PROGRAMMER BOARD
  48. VP      =       014             ;ORDER CODE FOR PROG. VOLTAGE
  49. RD      =       0C              ;ORDER CODE FOR READ
  50. VSS     =       04              ;ORDER CODE FOR VSS,VBB,VDD
  51. CS      =       01C             ;ORDER CODE FOR CHIP SELECT
  52. LOAD    =       0               ;ORDER CODE TO LOAD DATA
  53. CLK     =       1               ;ORDER CODE TO CLOCK COUNTER
  54. RDPRM   =       2               ;ORDER CODE TO READ PROM
  55.                                 ; DATA
  56. CLR     =       3               ;ORDER CODE TO CLEAR COUNTER
  57. ENBL    =       4               ;ORDER CODE TO ENABLE CONTROL
  58.                                 ; LATCH
  59. PUTC    =       07AE2           ;PUT CHARACTER POINTER
  60. GECHO   =       07A91           ;GET CHARACTER W/ECHO POINTER
  61. GHEX    =       07B50           ;POINTER TO GET 4 HEX DIGITS
  62. MESG    =       07B17           ;POINTER TO MESSAGE ROUTINE
  63. PHEX    =       07BB3           ;POINTER TO PUT HEX ROUTINE
  64. STACK   =       077D0           ;STACK POINTER TO MOTHERBOARD
  65.                                 ; R/W MEMORY
  66. HI      =       -17             ;TEMPORARY LOCATIONS OFFSET
  67. LO      =       -18             ; FROM STACK POINTER
  68. SAVLO   =       -19
  69. SAVHI   =       -20
  70. HCNT    =       -21
  71. DPLO    =       -22
  72. DPHI    =       -23
  73.  
  74.         ;.PAGE  'COMMAND INPUT PROCESSING'
  75.  
  76. ; *** COMMAND ENTRY ROUTINE ***
  77.  
  78.         NOP
  79. ENTRY:
  80.         LDI     H(STACK)        ; INITIALIZE STACK PTR
  81.         XPAH    P2
  82.         LDI     L(STACK)
  83.         XPAL    P2
  84. PROMPT:
  85.         JS      P3,MESG         ;PROMPT FOR COMMAND
  86.         .DBYTE  PRMPT
  87.         JS      P3,GECHO        ;GO TO GET CHAR W/ECHO
  88.         ANI     07F             ;MASK OUT PARITY, IF ANY
  89.         XAE                     ;SAVE CHAR IN E. REG.
  90.         LDI     H(CMDTBL)       ;SET PTR. TO COMMAND TABLE
  91.         XPAH    P1
  92.         LDI     L(CMDTBL)
  93.         XPAL    P1
  94.         CCL
  95. CLOOP:
  96.         LD      @3(P1)          ;GET COMMAND CHAR
  97.         JZ      ERROR           ;END OF TABLE, ERROR ON INPUT
  98.         XRE                     ;CHECK FOP CORRECT COMMAND
  99.         JNZ     CLOOP           ;NOT RIGHT, TRY NEXT
  100.         LD      @-1(P1)         ;FOUND, COMMAND, GET ADDR.
  101.         XAE                     ;SAVE TEMPORARILY IN E. REG
  102.         LD      @-1(P1)
  103.         XPAH    P1
  104.         LDE
  105.         XPAL    P1
  106.         XPPC    P1              ;EXECUTE COMMAND
  107.         JMP     PROMPT
  108. ERROR:
  109.         LDI     L(PUTC)-1
  110.         XPAL    P3
  111.         LDI     '?'
  112.         XPPC    P3
  113.         JMP     PROMPT
  114.  
  115.         ;.PAGE  'PROM ACCESS AND PROGRAMMING ROUTINES'
  116.  
  117. ; *** ROUTINE TO CHECK PROM FOR ERASED CONDITION ***
  118.  
  119. ; THIS SUBROUTINE IS ALSO CALLED BY "PROG:" TO VERIFY THAT
  120. ; THE PROM IS ERASED.
  121.  
  122. ERASED:
  123.         LDI     H(PPRGMR)       ;SET ADDR. OF PROGRAMMER
  124.         XPAH    P3
  125.         LDI     L(PPRGMR)
  126.         XPAL    P3
  127.         LDI     1               ;SET UPPER COUNT
  128.         ST      HI(P2)          ;STACK IS EMPTY, USE AS PTR.
  129.         ST      RD(P3)          ;SET READ MODE
  130.         ST      CS(P3)          ;SELECT PROM SOCKET
  131.         LDI     0               ;SET LOWER COUNT
  132.         ST      LO(P2)
  133.         ST      CLR(P3)         ;CLEAR PROM COUNTER
  134.         ST      LOAD(P3)        ;CLEAR DATA LATCHES FOR READ
  135. ELOOP:
  136.         LD      RDPRM(P3)       ;READ DATA OUT OF PROM
  137.         JNZ     NOT             ;DATA NOT ZERO? NOT ERASED
  138.         ST      CLK(P3)         ;DATA OK, BUMP COUNTER
  139.         DLD     LO(P2)          ;DECREMENT LOWER COUNT
  140.         JNZ     ELOOP           ;NOT DONE YET
  141.         DLD     HI(P2)          ;DECREMENT UPPER COUNT
  142.         JP      ELOOP           ;NOT DONE YET
  143.         XPPC    P1              ;PROM IS ERASED
  144. NOT:
  145.         JS      P3,MESG         ;GO TO MESSAGE RTN
  146.         .DBYTE  NOTMSG          ;PTR TO MESSAGE
  147. RETN2:
  148.         JMP     PROMPT          ;RETURN TO COMMAND PROCESSING
  149.  
  150. ; *** ENTRY POINT TO PROGRAM PROM W/O CHECK FOR ERASED ***
  151.  
  152. WOCHK:
  153.         JS      P3,GHEX         ;GET ADDR. TO PROG. FROM
  154.         LDI     H(PPRGMR)
  155.         XPAH    P3
  156.         LDI     L(PPRGMR)
  157.         XPAL    P3
  158.         LD      @1(P2)          ;GET UPPER BYTE OF ADDR.
  159.         ADI     2               ;ADD 512 OFFSET
  160.         XPAH    P1
  161.         LD      @1(P2)          ;GET LOWER BYTE
  162.         XPAL    P1
  163.         JMP     SET
  164.  
  165. ; *** ENTRY POINT TO PROGRAM PROM W/CHECK FOR ERASED ***
  166.  
  167. ;     PROM IS PROGRAMMED FROM MOST SIGNIFICANT ADDRESS TO
  168. ;     LEAST SIGNIFICANT ADDRESS DUE TO INVERSION OF COUNTER
  169.  
  170. PROG:
  171.         JS      P3,GHEX         ;GET ADDR. TO PROGRAM FROM
  172.         LD      @1(P2)          ;RETRIEVE ADDR. FROM STACK
  173.         XAE
  174.         LD      @1(P2)
  175.         ST      SAVLO(P2)       ;SAVE IN R/W MEMORY
  176.         LDE
  177.         ST      SAVHI(P2)
  178.         LDI     L(ERASED)-1     ;CHECK PROM FOR ERASED
  179.         XPAL    P1
  180.         XPPC    P1
  181.         LD      SAVLO(P2)
  182.         XPAL    P1
  183.         LD      SAVHI(P2)
  184.         ADI     2               ;ADD 512 OFFSET
  185.         XPAH    P1
  186. SET:    LDI     1
  187.         ST      HI(P2)          ;SET UPPER LOC COUNT
  188.         LDI     0
  189.         ST      LO(P2)          ;SET LOWER LOC COUNT
  190.         ST      CLR(P3)         ;CLEAR PROM COUNTER
  191. NXTLOC:
  192.         LD      @-1(P1)         ;GET DATA TO PROGRAM
  193.         XAE                     ;SAVE IN EXTENSION REG.
  194. THSLOC:
  195.         LDI     H(PPROM)        ;SET ADDR OF PROGRAMMING RTN
  196.         XPAH    P1
  197.         ST      SAVHI(P2)       ;SAVE PTR ADDR.
  198.         LDI     L(PPROM)-1
  199.         XPAL    P1
  200.         ST      SAVLO(P2)
  201.         LDI     -2              ;SET COUNT
  202.         ST      HCNT(P2)        ;SAVE HIT COUNT IN RAM
  203. GO:
  204.         XPPC    P1
  205.         XRE                     ;CHECK PROM DATA
  206.         JZ      OK              ;PROM DATA CORRECT, DO X+5X
  207.         DLD     HCNT(P2)        ;DECREMENT HIT COUNT
  208.         JNZ     GO
  209. NPROG:
  210.         JS      P3,MESG         ;HIT COUNT OVER MAK. BAD PROM
  211.         .DBYTE  BADPRM
  212. LOC:
  213.         LDI     L(PHEX)-1
  214.         XPAL    P3
  215.         LD      HI(P2)
  216.         XPPC    P3
  217.         LD      LO(P2)
  218.         CCL                     ;CLEAR CARRY/LINK FLAG
  219.         ADI     -1              ;CORRECT COUNT
  220.         XPPC    P3
  221.         JMP     RETN2
  222. OK:
  223.         CCL
  224.         LDI     0
  225.         ST      DPHI(P2)        ;CLEAR UPPER D. P. COUNT
  226.         CAD     HCNT(P2)        ;COMPLEMENT HIT COUNT
  227.         ST      HCNT(P2)
  228.         CCL                     ;CLEAR CARRY/LINK FLAG
  229.         ADD     HCNT(P2)        ;COMPUTE 5X
  230.         ST      DPLO(P2)
  231.         LDI     0
  232.         ADD     DPHI(P2)
  233.         ST      DPHI(P2)        ;2X
  234.         CCL
  235.         LD      DPLO(P2)
  236.         ADD     DPLO(P2)
  237.         ST      DPLO(P2)
  238.         LD      DPHI(P2)
  239.         ADD     DPHI(P2)
  240.         ST      DPHI(P2)        ;4X
  241.         CCL
  242.         LD      HCNT(P2)
  243.         ADD     DPLO(P2)
  244.         ST      DPLO(P2)
  245.         LDI     0
  246.         ADD     DPHI(P2)
  247.         ST      DPHI(P2)
  248. PRLP:
  249.         XPPC    P1              ;PROGRAM PROM
  250.         DLD     DPLO(P2)        ;DECREMENT LOWER COUNT
  251.         JNZ     PRLP            ;NOT DONE
  252.         DLD     DPHI(P2)        ;DECREMENT UPPER COUNT
  253.         JP      PRLP            ;NOT DONE
  254.         LD      SAVLO(P2)       ;RESTORE P1
  255.         XPAL    P1
  256.         LD      SAVHI(P2)
  257.         XPAH    P1
  258. UPDATE:
  259.         ST      CLK(P3)         ;BUMP PROM COUNTER
  260.         DLD     LO(P2)          ;DECREMENT LOWER LOC COUNT
  261.         JNZ     NXTLOC          ;NOT DONE
  262.         DLD     HI(P2)          ;DECREMENT UPPER LOC COUNT
  263.         JP      NXTLOC          ;NOT DONE
  264.         JMP     RETN1           ;PROGRAMMING DONE
  265. PPROM:
  266.         LDI     0
  267.         ST      RD(P3)          ;TURN OFF READ MODE AND
  268.         ST      CS(P3)          ; CHIP SELECT
  269.         LDE
  270.         ST      LOAD(P3)        ;SEND DATA TO PROGRAMMER
  271.         LDI     1
  272.         ST      VSS(P3)         ;TURN ON VSS VOLTAGE
  273.         LDI     07F             ;WAIT 500 MICROSECONDS
  274.         DLY     0
  275.         ST      VP(3)           ;TURN ON PROGRAM PULSE
  276.         LDI     0FF
  277.         DLY     0               ;DELAY 1 MS
  278.         LDI     0
  279.         ST      VP(3)           ;TURN OFF VP
  280.         LDI     20              ;WAIT 100 MICROSECONDS
  281.         DLY     0
  282.         LDI     0
  283.         ST      VSS(P3)         ;TURN OFF VSS VOLTAGE
  284.         LDI     20              ;WAIT 100 MICROSECONDS
  285.         DLY     0
  286.         ST      RD(P3)          ;SET UP READ MODE
  287.         ST      CS(P3)          ;SELECT PROM SOCKET
  288.         LDI     0
  289.         ST      LOAD(P3)        ;CLEAR DATA LATCHES
  290.         LD      RDPRM(P3)       ;READ DATA FROM PROM
  291.         XPPC    P1
  292.         JMP     PPROM
  293.  
  294. ; *** COPY PROM TO RANGE IN MEMORY ***
  295.  
  296. COPY:
  297.         JS      P1,SETRD        ;SET READ MODE
  298.         LD      @1(P2)          ;RETRIEVE ADDR. FROM STACK
  299.         ADI     2               ;ADD 512 OFFSET
  300.         XPAH    P1
  301.         LD      @1(P2)
  302.         XPAL    P1
  303. CPLOOP:
  304.         LD      RDPRM(P3)       ;GET PROM DATA
  305.         ST      @-1(P1)         ;STORE INTO MEMORY
  306.         ST      CLK(P3)         ;BUMP PROM COUNTER
  307.         DLD     LO(P2)          ;DECREMENT LOC COUNTER LOW
  308.         JNZ     CPLOOP
  309.         DLD     HI(P2)          ;DECREMENT LOC COUNTER HIGH
  310.         JP      CPLOOP          ;NOT DONE
  311. RETN1:
  312.         LDI     H(PROMPT)
  313.         XPAH    P1
  314.         LDI     L(PROMPT)-1
  315.         XPAL    P1
  316.         XPPC    P1
  317.  
  318. ; *** VERIFY PROM AGAINST RANGE IN MEMORY ***
  319.  
  320. VERIFY:
  321.         JS      P1,SETRD        ;SET READ MODE
  322.         LD      @1(P2)
  323.         ADI     2               ;ADD 512 OFFSET
  324.         XPAH    P1
  325.         LD      @1(P2)
  326.         XPAL    P1
  327. VLOOP:
  328.         LD      RDPRM(P3)       ;GET DATA FROM PROM
  329.         XOR     @-1(P1)         ;COMPARE AGAINST MEMORY DATA
  330.         JNZ     NOVFY           ;DOES NOT VERIFY
  331.         ST      CLK(P3)         ;BUMP PROM COUIHER
  332.         DLD     LO(P2)          ;DECREMENT LOC COUNTER LOW
  333.         JNZ     VLOOP           ;NOT DONE
  334.         DLD     HI(P2)          ;DECREMENT LOC COUNTER HIGH
  335.         JP      VLOOP           ;NOT DONE
  336.         JMP     RETN1
  337. NOVFY:
  338.         JS      P3,MESG         ;GO TO MESSAGE ROUTINE
  339.         .DBYTE  NVRFY
  340.         JMP     RETN1
  341. SETRD:
  342.         JS      P3,GHEX         ;GET ADDR. TO COPY TO
  343.         LDI     H(PPRGMR)       ;PUT ADDR OF PROGRAMMER
  344.         XPAH    P3              ; IN P3
  345.         LDI     L(PPRGMR)
  346.         XPAL    P3
  347.         LDI     1               ;SET UPPER LOC COUNTER
  348.         ST      HI+2(P2)
  349.         ST      RD(P3)          ;SET READ MODE
  350.         ST      CS(P3)          ;SELECT PROM SOCKET
  351.         LDI     0
  352.         ST      LO+2(P2)
  353.         ST      CLR(P3)         ;CLEAR PROM COUNTER
  354.         ST      LOAD(P3)        ;CLEAR PROM DATA LATCHES
  355.         XPPC    P1
  356.  
  357.         ;.PAGE  'MESSAGES AND COMMAND TABLE'
  358.  
  359. ; *** MESSAGES ***
  360.  
  361. NOTMSG:
  362.         .DBYTE  0D0A
  363.         .ASCII  'NOT ERASED'
  364.         .BYTE   0
  365. NVRFY:
  366.         .DBYTE  0D0A
  367.         .ASCII  'NO VERIFY'
  368.         .BYTE   0
  369. BADPRM:
  370.         .DBYTE  0D0A
  371.         .ASCII  'BAD PROM AT '
  372.         .BYTE   0
  373. PRMPT:
  374.         .DBYTE  0D0A
  375.         .BYTE   '?',0
  376.  
  377. ; *** COMMAND TABLE ***
  378.  
  379. CMDTBL:
  380.         .BYTE   'P'
  381.         .DBYTE  PROG-1
  382.         .BYTE   'Y'
  383.         .DBYTE  WOCHK-1
  384.         .BYTE   'E'
  385.         .DBYTE  ERASED-1
  386.         .BYTE   'V'
  387.         .DBYTE  VERIFY-1
  388.         .BYTE   'C'
  389.         .DBYTE  COPY-1
  390.         .BYTE   0
  391.  
  392.         END
  393.