home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG078.ARK / EPROM.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  8KB  |  413 lines

  1. ;***************************************************************;
  2. ;                                ;
  3. ;            EPROM.ASM                ;
  4. ;                                ;
  5. ;        LAST MODIFIED 9/27/80                ;
  6. ;                                ;
  7. ;    EPROM PROGRAMMER SOFTWARE FOR RUNNING AN SSM - PB1    ;
  8. ;    2708/2716 PROGRAMMER WITH CP/M UNDER DDT        ;
  9. ;                                ;
  10. ;    TO RUN THIS PROGRAM, TYPE:                ;
  11. ;                                ;
  12. ;DDT EPROM.COM(CR)                        ;
  13. ;                                ;
  14. ;    THE CONSOLE WILL RESPOND WITH:                ;
  15. ;                                ;
  16. ;DDT VERS #.#                            ;
  17. ;NEXT  PC                            ;
  18. ;#### 0100                            ;
  19. ;-                                ;
  20. ;                                ;
  21. ;    INSERT A HEX FILE TO BE PLACED IN EPROM BY ENTERING:    ;
  22. ;                                ;
  23. ;IFILENAME.HEX(CR)                        ;
  24. ;R[BIAS](CR)                            ;
  25. ;                                ;
  26. ;   (NOTE THAT BIAS WILL ALLOW THE ENTERED PROGRAM TO RESIDE    ;
  27. ;   WITHIN 103H TO 'START' AS REQUIRED EVEN THOUGH THE PROGRAM    ;
  28. ;   WAS ASSEMBLED FOR EXECUTION OUTSIDE THIS RANGE)        ;
  29. ;                                ;
  30. ;   TO START THE PROGRAM FROM DDT, ENTER EITHER 'G(START:)'    ;
  31. ;   OR 'G100'.  THE PROGRAM WILL ASK FOR EPROM TYPE SO AS    ;
  32. ;   TO SET THE PROPER SIZE (1K FOR 2708 AND 2K FOR 2716/2516)    ;
  33. ;   AND PROGRAMMING ROUTINE.                    ;
  34. ;                                ;
  35. ;   SUPPORTED FUNCTIONS ARE COPY, PROGRAM AND VERIFY WHICH ARE    ;
  36. ;   SELF EXPLANATORY.  THE AUTOMATIC SEQUENCE FOR PROGRAMMING    ;
  37. ;   AN EPROM IS TO FIRST CHECK FOR FULL ERASURE, THEN THE    ;
  38. ;   PROGRAM CYCLE, FOLLOWED BY THE VERIFY ROUTINE.        ;
  39. ;   (ANY FAILURE RESULTS IN AN ERROR MESSAGE AND A BELL        ;
  40. ;   SO AS TO NOT GO UNNOTICED.)                    ;
  41. ;                                ;
  42. ;   AS CONTROL IS PASSED TO DDT AND YOU WISH TO            ;
  43. ;   RETURN TO THE PROGRAMMER, JUST ENTER 'G' AGAIN.        ;
  44. ;                                ;
  45. ;   EXIT FROM THE PROGRAM BY ENTERING A CONTROL C        ;
  46. ;                                ;
  47. ;***************************************************************;
  48.  
  49. ;    <<<<SET PROM AND CPORT TO AGREE WITH PB1 SWITCHES>>>>
  50. PROM    EQU    0E000H    ;SELECTED LOCATION OF SOCKETS
  51. CPORT    EQU    70H    ;   "        "     "  CONTROL PORT
  52.  
  53. CR    EQU    0DH    ;CARRIGE RETURN
  54. LF    EQU    0AH    ;LINE FEED
  55. BELL    EQU    7    ;***** DING
  56. TERM    EQU    '$'
  57. RST7    EQU    38H
  58.  
  59.     ORG    100H
  60.  
  61.     JMP    START
  62.  
  63.     DS    4000H-$    ; RAM WORKSPACE
  64.  
  65. START:    CALL    HELLO
  66.     DB  CR,LF,'CP/M EPROM PROGRAMMER - VER 1.0',CR,LF,CR,LF,TERM
  67. HELLO:    POP    D
  68.     CALL    PRNMSG
  69. TYPE:    CALL    TYPE1
  70.     DB    CR,LF,'ENTER EPROM TYPE (2516,2716 OR 2708)  ',TERM
  71. TYPE1:    POP    D
  72.     CALL    PRNMSG
  73.     CALL    GETVAL
  74.     POP    H
  75.     LXI    D,2708H
  76.     CALL    CPHL
  77.     JZ    X2708
  78.     LXI    D,2516H
  79.     CALL    CPHL
  80.     JZ    X2716
  81.     LXI    D,2716H
  82.     CALL    CPHL
  83.     JZ    X2716
  84.     JMP    TYPE    ;WRONG TYPE
  85.  
  86. X2708:    MVI    A,3    ;PAGE COUNT - 1
  87.     STA    SIZE
  88.     MVI    A,1    ;HARDWARE CODE
  89.     STA    CODE
  90.     MVI    A,250    ;# OF PROGRAMMING CYCLES
  91.     STA    NCYC
  92.     JMP    DIRECT
  93.  
  94. X2716:    MVI    A,7    ;PAGE COUNT - 1
  95.     STA    SIZE
  96.     MVI    A,2    ;HARDWARE CODE
  97.     STA    CODE
  98.     MVI    A,1    ;# OF PROGRAMMING CYCLES
  99.     STA    NCYC
  100.  
  101. DIRECT:    CALL    DIR1
  102.     DB CR,LF,'DO YOU WISH (D)DT, (C)OPY, '
  103.     DB  '(P)ROGRAM, (V)ERIFY ? ',TERM
  104. DIR1:    POP    D
  105.     CALL    PRNMSG
  106.     CALL    CI
  107.     CPI    'C'
  108.     LXI    H,COPY
  109.     JZ    DIR2
  110.     CPI    'P'
  111.     LXI    H,PROG
  112.     JZ    DIR2
  113.     CPI    'V'
  114.     LXI    H,VERIFY
  115.     JZ    DIR2
  116.     CPI    'D'
  117.     JNZ    DIRECT
  118.     LXI    H,DIRECT
  119.     PUSH    H    ;SET RETURN ADDRESS
  120.     JMP    RST7    ;DDT BREAKPOINT ENTRY
  121. DIR2:    SHLD    OPTION
  122.  
  123. ADDR:    CALL    ADD1
  124.     DB    CR,LF,'ENTER STARTING ADDRESS '
  125.     DB    'OF MEMORY BLOCK IN HEX  ',TERM
  126. ADD1:    POP    D
  127.     CALL    PRNMSG
  128.     CALL    GETVAL
  129.     POP    H
  130.     SHLD    RAM
  131.  
  132. GO:    LDA    PROM    ;CLEAR PROGRAMMER
  133.     CALL    GO1
  134.     DB  CR,LF,'PLACE EPROM IN PROPER SOCKET '
  135.     DB  'AND STRIKE ANY KEY',CR,LF,TERM
  136. GO1:    POP    D
  137.     CALL    PRNMSG
  138.     CALL    CI
  139.     LHLD    OPTION
  140.     PCHL
  141.  
  142. VERIFY:    CALL    VERIF
  143.     JMP    DIRECT
  144.  
  145. COPY:    CALL    CPY
  146.     JMP    DIRECT
  147.  
  148. PROG:    CALL    ERACHK    ;SEE IF EPROM IS ERASED
  149.     JNZ    DIRECT    ;ABORT IF NOT-
  150.     CALL    PRG    ;NOW PROGRAM
  151.     CALL    VERIF    ;AND VERIFY
  152.     JMP    DIRECT    ;THEN CHECK WHAT'S NEXT
  153.  
  154.     ;***********************
  155.     ;   MAIN SUBROUTINES
  156.     ;***********************
  157.  
  158.  
  159.     ;    ERACHK
  160.  
  161.     ;ROUTINE TO TEST FOR COMPLETE
  162.     ;ERASURE OF EPROM BEFORE PROG.
  163.  
  164. ERACHK:    LXI    H,SIZE
  165.     MOV    C,M
  166.     LXI    D,PROM
  167. ERACH1:    LDAX    D    ;GET BYTE FROM EPROM
  168.     INX    D
  169.     CPI    0FFH    ;TEST FOR ERASE PATTERN
  170.     JNZ    NERASE
  171.     MOV    A,D
  172.     ANA    C
  173.     ORA    E    ;CHECK FOR END
  174.     JNZ    ERACH1
  175.     RET
  176. NERASE:    PUSH    PSW    ;SAVE FLAGS
  177.     CALL    NER1
  178.     DB   CR,LF,'EPROM NOT ERASED',CR,LF,BELL,TERM
  179. NER1:    POP    D
  180.     CALL    PRNMSG
  181.     POP    PSW
  182.     RET
  183.  
  184.  
  185.     ;    PRG
  186.  
  187.     ;ROUTINE TO PROGRAM EITHER
  188.     ;A 2708 OR 2716 EROM
  189.  
  190. PRG:    LDA    CODE    ;SET HARDWARE FOR TYPE
  191.     OUT    CPORT
  192.     LXI    H,NCYC    ;# OF PROG. CYCLES
  193.     MOV    B,M
  194.     LXI    H,SIZE
  195.     MOV    C,M    ;# OF PAGES -1
  196. PRG1:    LXI    D,PROM
  197.     LHLD    RAM
  198. ;PROGRAM THE EPROM
  199. PRG2:    MOV    A,M
  200.     STAX    D    ;THIS STEP DOES IT
  201.     INX    D
  202.     INX    H
  203.     MOV    A,D
  204.     ANA    C
  205.     ORA    E
  206.     JNZ    PRG2    ;GET NEXT ADDRESS
  207.     DCR    B
  208.     JNZ    PRG1    ;LOOP FOR N CYCLES
  209.     DCX    D
  210.     LDAX    D    ;RESET THE HARDWARE
  211.     RET
  212.  
  213.  
  214.     ;    VERIF
  215.  
  216.     ;ROUTINE TO VERIFY CONTENTS
  217.     ;OF AN EPROM WITH MEMORY
  218.  
  219. VERIF:    LXI    H,SIZE
  220.     MOV    C,M
  221.     LXI    D,PROM    ;ADDRESS OF EPROM
  222.     LHLD    RAM    ;RAM TO BE COMPARED
  223. VERF1:    MOV    B,M    ;GET ORIGINAL
  224.     LDAX    D    ;THEN ROM
  225.     INX    D
  226.     INX    H
  227.     CMP    B    ;BETTER BE THE SAME.
  228.     JNZ    DIFF
  229.     MOV    A,D
  230.     ANA    C
  231.     ORA    E
  232.     JNZ    VERF1    ;OK SO FAR, GET NEXT
  233.     PUSH    PSW
  234.     CALL    VERF2
  235.     DB  CR,LF,CR,LF,CR,LF,'<<<<<<<<<< EPROM '
  236.     DB  'VERIFIED GOOD >>>>>>>>>>',CR,LF,TERM
  237. VERF2:    POP    D
  238.     CALL    PRNMSG
  239.     POP    PSW
  240.     RET
  241. DIFF:    PUSH    PSW    ;SAVE FLAGS
  242.     CALL    DIFF1
  243.     DB  CR,LF,'EPROM DOES NOT VERIFY',CR,LF,BELL,TERM
  244. DIFF1:    POP    D
  245.     CALL    PRNMSG
  246.     POP    PSW
  247.     RET
  248.  
  249.  
  250.     ;    CPY
  251.  
  252.     ;ROUTINE TO COPY AN EPROM
  253.     ;FROM THE SOCKET TO RAM
  254.  
  255. CPY:    LXI    H,SIZE
  256.     MOV    C,M
  257.     LXI    D,PROM    ;SOCKET ADDRESS OF MASTER
  258.     LHLD    RAM    ;POINT TO TARGET RAM
  259. CPY1:    LDAX    D    ;GET ROM DATA
  260.     MOV    M,A    ;LOAD TO RAM
  261.     INX    D
  262.     INX    H
  263.     MOV    A,D
  264.     ANA    C
  265.     ORA    E
  266.     JNZ    CPY1    ;GO BACK FOR NEXT BYTE
  267.     CALL    CPY2
  268.     DB  CR,LF,CR,LF,'COPY COMPLETE',CR,LF,CR,LF,TERM
  269. CPY2:    POP    D
  270.     CALL    PRNMSG
  271.     RET
  272.  
  273.  
  274.     ;****************************
  275.     ;  MISCELLANEOUS SUBROUTINES
  276.     ;****************************
  277.  
  278.     ;    CPHL
  279.  
  280.     ;ROUTINE TO COMPARE HL VS DE
  281.  
  282. CPHL:    MOV    A,H
  283.     CMP    D
  284.     RNZ
  285.     MOV    A,L
  286.     CMP    E
  287.     RET
  288.  
  289.     ;    GETVAL
  290.  
  291.     ;ROUTINE TO LOAD A 16 BIT
  292.     ;VALUE FROM A HEX INPUT
  293.  
  294. GETVAL:    CALL    CI    ;GET KEYBOARD BYTE
  295.     LXI    H,0    ;INITIALIZE HL
  296. GET1:    MOV    B,A    ;SAVE KEYBOARD
  297.     CALL    NIBBLE    ;CONVERT ASCII TO HEX
  298.     JC    GET2    ;NOT LEGAL
  299.     DAD    H    ;HL*16
  300.     DAD    H
  301.     DAD    H
  302.     DAD    H
  303.     ORA    L    ;ADD IN NIBBLE
  304.     MOV    L,A
  305.     CALL    CI    ;GET NEXT KEYBOARD BYTE
  306.     JMP    GET1
  307. GET2:    XTHL        ;STICK PRAMETER ON STACK
  308.     PUSH    H    ;REPLACE RETURN
  309.     MOV    A,B    ;TEST CHARACTER
  310.     CALL    ECHK    ;FOR JUNK
  311.     JNZ    ERROR    ;JUNK OR ILLEGAL
  312.     RET
  313.  
  314. NIBBLE:    SUI    '0'
  315.     RC
  316.     CPI    'G'-'0'
  317.     CMC
  318.     RC
  319.     CPI    10
  320.     CMC
  321.     RNC
  322.     SUI    'A'-'9'-1
  323.     CPI    10
  324.     RET
  325.  
  326. ECHK:    CPI    ' '
  327.     RZ
  328.     CPI    ','
  329.     RZ
  330.     CPI    CR
  331.     STC
  332.     RZ
  333.     CMC
  334.     RET
  335.  
  336. ERROR:    POP    H    ;DUMP DATA
  337.     POP    D
  338.     PUSH    H
  339.     CALL    ER1
  340.     DB    CR,LF,'ENTER VALUE(CR)',CR,LF,TERM
  341. ER1:    POP    D
  342.     CALL    PRNMSG
  343.     JMP    GETVAL
  344.  
  345.     ;    CONSOLE IN
  346.  
  347.     ;ROUTINE TO GET A CHARACTER
  348.     ;THROUGH CP/M FROM THE CONSOLE
  349.  
  350. CI:    PUSH B! PUSH D! PUSH H
  351.     MVI    C,RDCON
  352.     CALL    BDOS
  353.     POP H! POP D! POP B
  354.     CPI    3    ;CHECK FOR ^C
  355.     JZ    BOOT    ;ABORT
  356.     RET
  357.  
  358.     ;    PRNMSG
  359.  
  360.     ;ROUTINE TO PRINT A
  361.     ;MESSAGE TO THE CONSOLE
  362.     ;THROUGH CP/M
  363.  
  364. PRNMSG:    MVI    C,PRINT
  365.     JMP    BDOS
  366.  
  367.  
  368.     ;    VARIABLE STORAGE
  369.  
  370. SIZE:    DS    1
  371. CODE:    DS    1
  372. NCYC:    DS    1
  373. OPTION:    DS    2
  374. RAM:    DS    2
  375.  
  376.  
  377.  
  378. ; * * * * * * * * * * * * * * * * * * * * * * * *
  379. ;                        *
  380. ;BDOS/CBIOS EQUATES (VERSION 7)            *
  381. ;                        *
  382. RDCON    EQU    1    ;            *
  383. WRCON    EQU    2    ;            *
  384. PRINT    EQU    9    ;            *
  385. OPEN    EQU    15    ;0FFH=NOT FOUND        *
  386. CLOSE    EQU    16    ;   "    "        *
  387. SRCHF    EQU    17    ;   "    "        *
  388. SRCHN    EQU    18    ;   "    "        *
  389. ERASE    EQU    19    ;NO RET CODE        *
  390. DELT    EQU    ERASE    ;            *
  391. READ    EQU    20    ;0=OK, 1=EOF        *
  392. WRITE    EQU    21    ;0=OK, 1=ERR, 2=?,    *
  393. ;            0FFH=NO DIR SPC        *
  394. MAKE    EQU    22    ;0FFH=BAD        *
  395. REN    EQU    23    ;0FFH=BAD        *
  396. STDMA    EQU    26    ;            *
  397. ;                        *
  398. ;                        *
  399. BOOT    EQU    0    ;WARM BOOT        *
  400. BDOS    EQU    5    ;            *
  401. FCB    EQU    5CH     ;            *
  402. SYSSIZ    EQU    32    ;SYSTEM SIZE        *
  403. CBIOS    EQU    SYSSIZ*1024-512    ;        *
  404. SELDSK    EQU    CBIOS+1BH    ;        *
  405. SETTRK    EQU    SELDSK+3    ;        *
  406. SETSEC    EQU    SETTRK+3    ;        *
  407. SETDMA    EQU    SETSEC+3    ;        *
  408. RDSEC    EQU    SETDMA+3    ;        *
  409. WRSEC    EQU    RDSEC+3        ;        *
  410. ; * * * * * * * * * * * * * * * * * * * * * * * *
  411.  
  412.     END
  413.