home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol132 / prom.fil < prev    next >
Encoding:
Text File  |  1984-04-29  |  16.5 KB  |  707 lines

  1. ;
  2. ; THIS PROGRAM PROGRAMS PROMS ON THE OPTIMAL TECHNOLOGY EP-2A
  3. ; PROM PROGRAMMER, USING OASIS ABSOLUTE FILES AS THE SOURCE.
  4. ; ALL PROGRAMS MUST BE ORG'D ON A PAGE BOUNDRY (ADDRESS = XX00)
  5. ; IF A PROGRAM DOESNT FILL PROM REMAINDER IS LEFT IN ERASED STATE.
  6. ;
  7. ; THE INTERFACE IS A SPECIAL CARD USING AN 8212 PIO. 
  8. ; CONTROL BITS ARE GENERATED USING A 74259 ADDRESSABLE LATCH
  9. ; B0 = CLOCK, B1 = RESET, B2 = CS*, B3 = VP.
  10. ;       31H     DATA PORT    PROGRAMMER DATA PORT
  11. ;       30H     CONTROL PORT
  12. ;    
  13.     EXTRN    LINEIN        ;LINE INPUT SUBROUTINE
  14. DATA:    EQU    31H        ;DATA PORT
  15. CONT:    EQU    30H        ;CONTROL PORT
  16. RESET:    EQU    0        ;CLOCK COMMAND
  17. CS:    EQU    1        ;SELECT COMMAND
  18. VP:    EQU    3        ;PROGRAM PULSE COMMAND
  19. SET:    EQU    10H        ;MODIFY COMMAND TO SET BIT, NOT CLEAR
  20. CLR:    EQU    0FH        ;MODIFY COMMAND TO CLEAR BIT
  21. ;
  22. ;***************************************************************************
  23. ; ON ENTRY INITIALIZE PROGRAMMER
  24. ;***************************************************************************
  25. ;
  26. PROMPROG:
  27.       LD    A,CLOCK        ;CLOCK BIT
  28.       OUT     (CONT),A    ;RESET CLOCK BIT
  29.       LD     A,RESET        ;RESET BIT
  30.       CALL     PULSE
  31.       LD     A,CS        ;CHIP SELECT
  32.       OUT     (CONT),A    ;SET FOR READ PROM
  33.       LD     A,VP        ;PROGRAM PULSE
  34.       OUT    (CONT),A    ;CLEAR VP
  35. ;
  36. ;***************************************************************************
  37. ; CLEAR THE SCREEN AND FIND OUT TYPE OF PROM BEING USED
  38. ;***************************************************************************
  39. ;
  40. PTYPE:
  41.     LD    DE,MSG1        ;DISPLAY TYPES OF PROMS
  42.     SC    2                    ;CHANGE THIS
  43.     LD     B,1        ;NO OF CHAR TO ACCEPT
  44.     LD    BE,PROM        ;PROM TYPE
  45.     LD    A,20H        ;BLANK TYPE
  46.     LD    (DE),A
  47.     CALL    LINEIN        ;GET TYPE
  48.     JR    C,PTYPE        ;ABNORMAL RETURN
  49.     LD    A,(PROM)    ;CHECK FOR VALID TYPE AND CONVERT FROM ASCII
  50.     SUB    31H        ;0-6 RANGE
  51.     JP    C,PTYPE        ;NOT NUMERIC
  52.     CP     7        ;SEE IF TOO BIG
  53.     JP    NC,PTYPE
  54.     LD    (PROM),A    ;STORE
  55. ;
  56. ;***************************************************************************
  57. ; DISPLAY TYPE AND COMMAND CODES
  58. ;***************************************************************************
  59. ;
  60.     LD    DE,MSG2        ;PROM TYPE
  61.     SC    2                    ;CHANGE THIS
  62.     LD    D,0        ;CREATE INDEX INTO PROM TYPE TABLE
  63.     LD    HL,MSG3        ;BASE
  64.     LD    A,(PROM)    ;PROM TYPE
  65.     LD    B,A        ;SAVE COPY
  66.     SLA    A        ;
  67.     SLA    A        ;
  68.     SLA    A        ;
  69.     LD    E,A        ;MOVE TO HL
  70.     ADD    HL,DE        ;BASE PLUS OFFSET
  71.     LD    E,B        ;ADD ONE MORE
  72.     ADD    HL,DE        ;NOW BASE + 9*(PROM.TYPE-1)
  73.     EX    DE,HL        ;READY FOR SYSTEM CALL
  74.     SC    2                    ;CHANGE THIS
  75.     LD    DE,MSG4        ;DISPLAY COMMANDS
  76.     SC    2                    ;CHANGE THIS
  77. ;
  78. ; COMPUTE PROM SIZE
  79. ;
  80.     LD    A,(PROM)    ;GET PROM TYPE
  81.     LD    B,A        ;SAVE IT
  82.     SLA    A        ;MULTIPLY BY 3
  83.     ADD    B        ;
  84.     LD    E,A        ;MAKE 16 BIT
  85.     LD    D,0        ;
  86.     LD    HL,PARAM    ;PARAMETER TABLE START
  87.     ADD    HL,DE        ;POINTER
  88.     LD    A,(HL)        ;GET SIZE
  89.     LD    (SIZE+1),A    ;STORE FOR RETRIEVAL
  90. ;
  91. ; GET PROGRAM PARAMETERS
  92. ;
  93.     INC    HL        ;POINT TO LOOP COUNT
  94.     LD    A,(HL)        ;
  95.     LD    (LOOPCNT),A    ;STORE
  96.     INC    HL        ;POINT TO DELAY COUNT
  97.     LD    A,(HL)        ;
  98.     LD    (DELCNT),A    ;STORE
  99. ;
  100. ;***************************************************************************
  101. ; GET COMMAND
  102. ;***************************************************************************
  103. ;
  104. CMD:
  105.     LD    HL,IBUF        ;CLEAR INPUT BUFFER
  106.     LD    BC,8        ;
  107.     CALL    CLEAR        ;CLEAR BUFFER
  108.     LD    DE,MSG5        ;DISPLAY COMMAND REQUEST
  109.     SC    2                    ;CHANGE THIS
  110.     LD    DE,IBUF        ;INPUT BUFFER
  111.     LD    B,1        ;ONE CHAR ONLY
  112.     CALL    LINEIN        ;
  113.         JR    C,CMD        ;ABNORMAL RETURN
  114.     LD    DE,IBUF        ;GET COMMAND CHAR
  115.     LD    A,(DE)        ;
  116.     CP    'E'        ;ERASE?
  117.     JP    Z,ERASE
  118.     CP    'P'        ;PROGRAM?
  119.     JP    Z,PROG
  120.     CP    'V'        ;VERIFY?
  121.     JP    Z,VERIFY
  122.     CP    'W'        ;WRITE FILE?
  123.     JP    Z,WRITE
  124.     CP    'L'        ;LOAD?
  125.     JP    Z,LOAD
  126.     CP    'R'        ;READ?
  127.     JP    Z,READ
  128.     CP    'A'        ;ALTER?
  129.     JP    Z,ALTER
  130.     CP    'D'        ;DUMP?
  131.     JP    Z,DUMP
  132.     CP    'T'        ;NEW TYPE?
  133.     JP    Z,PTYPE
  134.     CP    'C'        ;CLEAR BUFFER?
  135.     JP    Z,CLRBUF
  136.     JP    CMD        ;INVALID RESPONSE
  137. ;
  138. ;***************************************************************************
  139. ; ERASE CHECK
  140. ;***************************************************************************
  141. ;
  142. ERASE:
  143.     LD    A,CS        ;IN READ MODE
  144.     OUT    (CONT),A
  145.     LD    A,RESET        ;RESET TO ADDRESS 0000
  146.     CALL    PULSE
  147.     LD    BC,(SIZE)    ;GET PROM SIZE
  148.     LD    HL,0        ;CURRENT SIZE
  149. .CHK:
  150.     IN    A,(DATA)    ;READ LOC
  151.     CP    0FFH        ;ERASED?
  152.     CALL    NZ,.BAD        ;NO
  153.     CPI            ;DEC BC, INC HL
  154.     JP    PO,CMD        ;DONE
  155.     LD    A,CLOCK        ;INCREMENT PROM ADDRESS
  156.     CALL    PULSE        ;
  157.     JP    .CHK        ;LOOP
  158. .BAD:
  159.     LD    D,0FFH        ;ERASE CHECK CHAR
  160.     CALL    BAD        ;PRINT BAD DATA
  161.     RET    C        ;NO KEYBOARD INTERRUPT, CONTINUE
  162.     POP    DE        ;CLEAR RETURN OFF STACK
  163.     JP    CMD        ;
  164. BAD:
  165.     PUSH    BC        ;SAVE REGS
  166.     PUSH    AF
  167.     PUSH    DE
  168.     LD    DE,IBUF        ;USE IBUF FOR OUTPUT BUFFER
  169.     LD    B,H        ;CONVERT TO HEX
  170.     SC    16                    ;CHANGE THIS
  171.     LD    B,L
  172.     SC    16                    ;CHANGE THIS
  173.     LD    A,20H        ;SPACE CHAR
  174.     LD    (DE),A        ;
  175.     INC    DE
  176.     POP    BC        ;GET CORRECT VALUE
  177.     SC    16                    ;CHANGE THIS
  178.     LD    A,20H        ;SPACE
  179.     LD    (DE),A
  180.     INC    DE
  181.     POP    BC        ;GET PROM VALUE
  182.     SC    16                    ;CHANGE THIS
  183.     LD    A,0DH        ;CRLF
  184.     LD    (DE),A
  185.     LD    DE,IBUF        ;OUTPUT MESSAGE
  186.     SC    2                    ;CHANGE THIS
  187.     POP    BC        ;RESTORE REG
  188.     SC    3        ;CHECK FOR CONSOLE INTERUPT   CHANGE THIS
  189.     SCF            ;CARRY SET IF NO KEYBOARD INTERUPT
  190.     RET    Z        ;NO INTERRUPT
  191.     SC    4        ;CLEAR KEYBOARD        ;CHANGE THIS
  192.     SCF            ;RESET CARRY FLAG
  193.     CCF
  194.     RET            ;RETURN WITH CARRY RESET
  195.  
  196. ;***************************************************************************
  197. ; PROGRAM PROM
  198. ;***************************************************************************
  199.  
  200. PROG:
  201.     LD    BC,(CLOCK)    ;SETUP INITIAL PARAMETERS
  202.     LD    HL,BUFFER
  203.     LD    DE,(LOOPCNT)    ;LOOP COUNT AND DELAY COUNT
  204.     LD    A,RESET
  205.     CALL    PULSE
  206.     LD    A,CS        ;SET PROM FOR WRITE
  207.     OR    SET
  208.     OUT    (CONT),A
  209. .LOOP1:
  210.     LD    A,(HL)        ;OUTPUT CHAR TO PROM
  211.     OUT    (DATA),A
  212.     LD    A,VP        ;PROGRAM PULSE
  213.     OR    SET
  214.     OUT    (CONT),A    ;
  215.     CALL    DELAY        ;WAIT FOR PULSE TIME
  216.     AND    CLR
  217.     OUT    (CONT),A    ;RESET PROGRAM PULSE
  218.     LD    A,CLOCK        ;INCREMENT PROM ADDR
  219.     CALL    PULSE
  220.     CPI            ;DEC BC, INC HL
  221.     JP    PE,.LOOP1    ;CONTINUE UNTIL ONE LOOP FINISHED
  222.     LD    BC,(SIZE)    ;REROM CONTENTS
  223.  
  224.     LD    HL,BUFFER
  225.     DEC    E        ;DECREMENT LOOP COUNT
  226.     JR    NZ,.LOOP1    ;DO PROPER NUMBER OF LOOPS
  227.     LD    A,CS
  228.     OUT    (CONT),A    ;RESET PROM PROG FOR READ
  229.     LD    A,RESET
  230.     CALL    PULSE
  231.         JP    VERIFY        ;VERIFY AFTER PROGRAMMING
  232. DELAY:
  233.     PUSH    BC        ;TEMP SAVE
  234.     PUSH    DE        ;SAVE NUMBER OF DELAYS AND LOOP COUNT
  235. .DEL1:
  236.     CALL    .DEL2
  237.     DEC    D        ;COUNT LOOPS
  238.     JR    NZ,.DEL1    ;CONTINUE FOR CORRECT NUMBER OF LOOPS
  239.     POP    DE        ;RESTORE NUMBER OF DELAYS AND LOOP COUNT
  240.         POP    BC        ;RESTORE REG
  241.     RET
  242. .DEL2:                ;DELAY .75 MS
  243.     LD    C,185        ;MINOR DELAY LOOP
  244. .DEL3:
  245.     DEC    C
  246.     JR    NZ,.DEL3    ;LOOP FOR .75 MS
  247.     RET
  248.  
  249. ;**************************************************************************
  250. ; VERIFY PROM CONTENTS
  251. ;**************************************************************************
  252.  
  253. VERIFY:
  254.     LD    A,RESET        ;RESET ADDRESS COUNTER
  255.     CALL    PULSE
  256.     LD    BC,(SIZE)    ;GET PARAMETERS
  257.     LD    HL,BUFFER
  258. .LOOP:
  259.     IN    A,(DATA)    ;READ PROM
  260.     CP    (HL)        ;COMPARE WITH BUFFER
  261.     CALL    NZ,.BAD        ;PRINT RESULTS IF BAD COMPARE
  262.     CPI            ;INCRTMENT POINTERS
  263.     JP    PO,CMD        ;DONE ?
  264.     LD    A,CLOCK        ;ADVANCE PROM COUNTERS
  265.     CALL    PULSE        ;
  266.     JP    .LOOP        ;LOOP UNTIL FINISHED
  267. .BAD:
  268.     LD    D,(HL)        ;SAVE CORRECT VALUE
  269.     PUSH    HL        ;SAVE BUFFER POINTER
  270.     PUSH    DE        ;AND VALUE
  271.     LD    DE,BUFFER    ;MAKE BUFFER POINTER REL ZERO FOR PRINT
  272.     SCF            ;CLEAR CARRY
  273.     CCF
  274.     SBC    HL,DE
  275.     POP    DE        ;RESTORE DE
  276.     CALL    BAD        ;PRINT VALUES
  277.     POP    HL        ;RESOTER BUFFER POINTER
  278.     RET    C        ;RETURN IF NO KEYBOARD INTERRUPT
  279.     POP    DE        ;THROW AWAY RETURN ADDR
  280.     RET
  281.  
  282. ;***************************************************************************
  283. ; GET FILE NAME
  284. ;***************************************************************************
  285.  
  286. FILE:
  287.     LD    HL,DCB        ;SETUP THE DIRECTORY CONTROL BLOCK
  288.     LD    BC,17        ;17 CHAR LONG
  289.     CALL    CLEAR        ;CLEAR DCB
  290.     LD    DE,MSG6        ;REQUEST FILENAME
  291.     SC    2                    ;CHANGE THIS
  292.     LD    B,8        ;MAX NAME LENGTH
  293.     LD    DE,DCB+1    ;FILENAME AREA OF DCB
  294.     CALL    LINEIN        ;INPUT A LINE
  295.     JP    C,CMD        ;ABNORMAL RETURN
  296.     LD    DE,MSG7        ;GET FILE TYPE
  297.     SC    2                    ;CHANGE THIS
  298.     LD    DE,DCB+9    ;DCB LOCATION FOR TYPE
  299.     LD    B,8        ;
  300.     CALL    LINEIN
  301.     JP    C,CMD        ;ABNORMAL EXIT
  302. .GETDRV:
  303.     LD    DE,MSG8        ;DISPLAY DRIVE REQUEST
  304.     SC    2                    ;CHANGE THIS
  305.     LD    DE,DCB        ;GET DRIVE
  306.     LD    B,1
  307.     CALL    LINEIN
  308.     JP    C,CMD        ;ABNORMAL RETURN
  309.     LD    A,C        ;SEE IF ANY INPUT
  310.     OR    A
  311.     JR    Z,.ALL        ;SEARCH ALL DRIVES
  312.     LD    A,(DE)
  313.     LD    B,A
  314.     JR    .CONVERT
  315. .ALL:
  316.     LD    B,0FFH        ;ALL DRIVES
  317. .CONVERT:
  318.     SC    25        ;CONVERT TO LOGICAL CODE    CHANGE THIS
  319.     JR    C,.GETDRV    ;CONVERSION ERROR - TRY AGAIN
  320.     LD    (DE),A        ;STORE VALUE
  321.     LD    HL,WORK        ;WORK AREA
  322.     SC    20        ;LOOKUP DIRECTORY        CHANGE THIS
  323.     JP    NZ,NOFIND    ;CANT FIND FILE
  324.     LD    A,2        ;IS FILE ABSOLUTE ?
  325.     CP    (HL)
  326.     JR    Z,.AOK        ;ABSOLUTE FILE - OK
  327.     LD    DE,MSG11
  328.     SC    2        ;OUTPUT ERROR MESSAGE        CHANGE THIS
  329.     JP    CMD
  330. .AOK:
  331.     LD    DE,DCB        ;STORE DRIVE CODE
  332.     LD    A,B
  333.     LD    (DE),A
  334.     PUSH    HL        ;MOVE TO IX FOR INDEXING
  335.     POP    IX
  336.     LD    HL,FILEADDR    ;GET START ADDRESS FOR FILE
  337.     LD    A,(IX+1EH)    ;LSB
  338.     OR    A        ;IS IT ZERO ?
  339.     JR    Z,.BOK        ;YES - OK
  340.     LD    DE,MSG12    ;ERROR MESSAGE
  341.     SC    2                        ;CHANGE THIS
  342.     JP    CMD        ;GET NEW COMMAND
  343. .BOK:
  344.     LD    A,(IX+1FH)    ;MSB
  345.     LD    (HL),A        ;STORE
  346.     INC    HL        ;MOVE TO FILE SECTOR ADDRESS
  347.     LD    A,(IX+15H)
  348.     LD    (HL),A        ;SECTOR ADDRESS LSB
  349.     INC    HL
  350.     LD    A,(IX+16H)
  351.     LD    (HL),A        ;SECTOR ADDRESS MSB
  352.     INC    HL        ;MOVE TO FILE SECTOR COUNT
  353.     LD    A,(IX+11H)
  354.     LD    (HL),A        ;SECTOR COUNT LSB
  355.     INC    HL
  356.     LD    A,(IX+12H)
  357.     LD    (HL),A        ;SECTOR COUNT MSB
  358.     INC    HL
  359.     LD    (HL),1        ;SET FLAG FOR FILE DATA LOADED
  360.     JP    CMD
  361.  
  362. ;***************************************************************************
  363. ; LOAD BUFFER FROM DISK
  364. ;***************************************************************************
  365.  
  366. LOAD:
  367.     LD    A,(FILESEL)    ;HAS FILE BEEN DEFINED
  368.     OR    A
  369.     JR    NZ,.OK
  370.     LD    DE,MSG12
  371.     SC    2                        ;CHANGE THIS
  372.     JP    CMD
  373.  
  374. .OK:
  375.     LD    DE,MSG9        ;REQUEST LOAD ADDRESS
  376.     SC    2                        ;CHANGE THIS
  377.     LD    B,2        ;GET ADDRESS (2 CHARACTERS)
  378.     LD    DE,LOADADDR
  379.     LD    HL,LOADADDR    ;CLEAR LINE
  380.     LD    (HL),20H
  381.     INC    HL
  382.     LD    (HL),20H
  383.     CALL    LINEIN
  384.     JP    C,CMD
  385.     LD    DE,LOADADDR    ;CONVERT TO BINARY
  386.     SC    14                        ;CHANGE THIS
  387.     LD    A,L
  388.     LD    HL,FILEADDR
  389.     SUB    (HL)        ;MAKE SURE IT IS IN RANGE
  390.     JR    NC,.ROK        ;RANGE OK
  391.     LD    DE,MSG13    ;OUTPUT ERROR MESSAGE
  392.     SC    2                        ;CHANGE THIS
  393.     LD    DE,LOADADDR
  394.     LD    A,(DE)
  395.     LD    C,A
  396.     SC    5    ;OUTPUT LOAD ADDR            ;CHANGE THIS
  397.     INC    DE
  398.     LD    A,(DE)
  399.     LD    C,A
  400.     SC    5                        ;CHANGE THIS
  401.     LD    DE,MSG14    ;CONTINUE MESSAGE
  402.     SC    2                        ;CHANGE THIS
  403.     LD    HL,FILESEC    ;GET PROG START ADDRESS
  404.     LD    B,(HL)
  405.     DEC    DE        ;MOVE BACK TO START OF LOADADDR
  406.     SC    16        ;USE LOADADDR TO STORE START ADDR
  407.     DEC    DE        ;MOVE BACK TO START 
  408.     DEC    DE        ;
  409.     LD    C,A        ;
  410.     SC    5                        ;CHANGE THIS
  411.     INC    DE
  412.     LD    A,(DE)
  413.     LD    C,A
  414.     SC    5                        ;CHANGE THIS
  415.     SC    18        ;CRLF                ;CHANGE THIS
  416.     JP    CMD        ;START OVER
  417. .ROK:
  418.     LD    E,A        ;SAVE START DIFFERANCE
  419.     LD    A,(FILECNT)
  420.     SUB    E        ;FIND NUMBER IF SECTORS TO TRANSFER
  421.     JR    NC,.ROK1    ;FILE IS LONG ENOUGH
  422.     LD    DE,MSG15
  423.     SC    2                        ;CHANGE THIS
  424.     JP    CMD
  425. .ROK1:
  426.     LD    C,A        ;SAVE TRANSFER COUNT 
  427.     LD    HL,(FILESEC)    ;GET SECTOR ADDRESS
  428.     LD    D,0
  429.     LD    B,0
  430.     ADD    HL,DE        ;SECTOR TO START TRANSFER ON
  431.     EX    HL,DE        ;SETUP FOR DISK READ
  432.     LD    HL,BUFFER
  433.     LD    A,(SIZE+1)    ;PROM SIZE IN PAGES
  434.     CP    C        ;WHICH IS SHORTER?
  435.     JR    C,.FULL        ;WILL FILL PROM
  436.     PUSH    BC        ;SAVE COUNT
  437.     SUB    C        ;FIND DIFFERANCE
  438.     LD    C,A        ;MAKE POINTER
  439.     ADD    H        ;MOVE BUFFER UP
  440.     LD    H,A
  441. .FILL:
  442.     LD    A,0FFH        ;FILL CHARACTERS
  443.     LD    (HL),A
  444.     CPI
  445.     JP    V,.FILL        ;CONTINUE TILL DONE
  446.     LD    HL,BUFFER    ;BACK TO START OF BUFFER
  447.     POP    BC
  448.     JR    .FULL1
  449. .FULL:
  450.     LD    C,A        ;MOVE COUNT TO B
  451. .FULL1:
  452.     LD    A,(DCB)        ;GET DRIVE NUMBER
  453.     LD    B,A
  454.     SC    50        ;READ MULTIPLE SECTORS        CHANGE THIS
  455.     JP    CMD        ;DONE
  456. NOFIND:
  457.     LD    DE,MSG10
  458.     SC    2        ;DISPLAY 'CANT FIND FILE'    CHANGE THIS
  459.  
  460. ;***************************************************************************
  461. ; READ PROM INTO BUFFER
  462. ;***************************************************************************
  463.  
  464. READ:
  465.     LD    HL,BUFFER    ;BUFFER START
  466.     LD    BC,(SIZE)    ;PRO5H    
  467.     LD    A,CS        ;SET PROGRAMMER TO READ MODE
  468.     OUT    (CONT),A
  469.     LD    A,RESET        ;RESET PROM TO ADDR 0000
  470.     CALL     PULSE
  471. .LOOP:
  472.     IN    A,(DATA)    ;READ PROM
  473.     LD    (HL),A        ;STORE
  474.     CPI            ;UPDATE POINTERS
  475.     JP    PO,CMD        ;DONE ?
  476.     LD    A,CLOCK        ;NEXT PROM ADDR
  477.     CALL    PULSE        ;
  478.     JR    .LOOP        ;LOOP TILL DONE
  479.  
  480. ;***************************************************************************
  481. ; ALTER BUFFER MEMORY
  482. ;***************************************************************************
  483.  
  484. ALTER:
  485.     CALL    ADDR        ;GET ADDRESS TO ALTER
  486. .IN1:
  487.     PUSH    HL        ;SAVE ADDR
  488.     LD    DE,IBUF        ;POINT TO START OF BUFFER
  489.     LD    B,H        ;CONVERT TO ASCII
  490.     SC    16                        ;CHANGE THIS
  491.     LD    B,L
  492.     SC    16                        ;CHANGE THIS
  493.     LD    A,20H        ;BLANK CHAR
  494.     LD    (DE),A
  495.     INC    DE
  496.     PUSH    DE        ;SAVE DE
  497.     LD    DE,BUFFER    ;MAKE RELATIVE TO BUFFER
  498.     ADD    HL,DE
  499.     POP    DE        ;RESTORE DE
  500.     LD    B,(HL)        ;GET DATA TO BE CHANGED
  501.     SC    16
  502.     LD    A,20H        ;SPACE CHAR
  503.     LD    (DE),A
  504.     INC    DE
  505.     LD    A,00H        ;TERMINATOR
  506.     LD    (DE),A
  507.     LD    DE,IBUF        ;BACK TO BEGINNING FOR OUTPUT
  508.     SC    2
  509.     PUSH    DE        ;SAVE BUFFER LOC
  510.     LD    A,20H        ;BLANK 2 CHAR FOR INPUT
  511.     LD    (DE),A
  512.     INC    DE
  513.     LD    (DE),A
  514.     INC    DE
  515.     LD    A,0DH        ;CR
  516.     LD    (DE),A
  517.     POP    DE        ;RESTORE BUFFER
  518.     PUSH    DE        ;CONTINUE TO SAVE
  519.     LD    B,2        ;LINE LENGTH
  520.     CALL    LINEIN
  521.     POP    DE        ;BACK TO START OF INPUT
  522.     JR    C,.EXIT        ;DONE
  523.     LD    A,C        ;SEE IF NO INPUT
  524.     OR    A
  525.     JR    Z,.NONE
  526.     PUSH    HL        ;SAVE WHILE DOING CALC
  527.     SC    14        ;CONVERT TO BINARY        CHANGE THIS
  528.     JR    C,.OVER        ;OVERFLOW
  529.     LD    B,L        ;
  530.     POP    HL        ;GET BUFFER ADDR BACK
  531.     LD    (HL),B        ;STORE NEW VALUE
  532.     POP    HL        ;GET ADDR BACK
  533.     INC    HL        ;NEXT LOCATION
  534.     JR    IN1        ;NEXT INPUT
  535. .OVER:
  536.     POP    HL        ;POP BUFFER ADDR OFF
  537.     POP    HL        ;GET ADDR BACK
  538.     JP    .IN1        ;TRY AGAIN
  539. .NONE:
  540.     POP    HL        ;GET ADDR BACK
  541.     INC    HL
  542.     JP    .IN1        ;GET NEXT CHAR
  543. .EXIT:
  544.     POP    HL        ;EMPTY STACK
  545.     JP    CMD        ;NEXT COMMAND
  546.  
  547. ;***************************************************************************
  548. ; DUMP BUFFER MEMORY
  549. ;***************************************************************************
  550.  
  551. DUMP:
  552.     CALL    ADDR        ;GET ADDR TO DUMP
  553. .DUMP1:
  554.     PUSH    HL        ;SAVE ADDR
  555.     LD    DE,IBUF        ;DISPLAY ADDR
  556.     LD    B,H
  557.     SC    16                        ;CHANGE THIS
  558.     LD    B,L
  559.     SC    16                        ;CHANGE THIS
  560.     LD    A,20H        ;BLANK AS SPACER
  561.     LD    (DE),A
  562.     INC    DE
  563.     PUSH    DE        ;SAVE WHILE DOING CALC
  564.     LD    DE,BUFFER    ;MAKE ADDR REL BUFFER
  565.     ADD    HL,DE
  566.     POP    DE        ;RESTORE IBUF POINTER
  567.     LD    BC,16        ;NUMBER OF CHARACTERS TO DUMP
  568.     PUSH    BC        ;SAVE IT
  569. .LOOP:
  570.     LD    B,(HL)        ;GET BYTE
  571.     SC    16        ;CONVERT TO HEX ASCII IN BUFFER
  572.     POP    BC
  573.     CPI            ;UPDATE POINTERS
  574.     JP    PO,.DONE
  575.     PUSH    BC        ;SAVE BC
  576.     LD    A,2CH        ;COMMA BETWEEN BYTES
  577.     LD    (DE),A
  578.     INC    DE
  579.     JR    .LOOP
  580. .DONE:
  581.     LD    A,00H        ;TERMINATE STRING
  582.     LD    (DE),A
  583.     LD    DE,IBUF        ;BACK TO START FOR DISPLAY
  584.     SC    2        ;DISPLAY            CHANGE THIS
  585.     POP    HL        ;GET ADDR BACK
  586.     LD    DE,16        ;UPDATE ADDR
  587.     ADD    HL,DE
  588.     LD    DE,IBUF        ;READY FOR NEXT COMMAND
  589.     LD    B,1        ;ONE CHAR ONLY
  590.     LD    A,20H        ;CLEAR DISPLAY
  591.     LD    (DE),A        ;
  592.     CALL    LINEIN        ;GET COMMAND
  593.     JP    C,CMD        ;EXIT
  594.     JP    .DUMP1        ;DO NEXT 16 CHAR
  595.     PUSH    BC
  596.     CPI            ;UPDATE POINTERS
  597.     JP    CMD        ;NOT IMPLEMENTED 
  598.  
  599. ;***************************************************************************
  600. ; SUBROUTINES
  601. ;***************************************************************************
  602.  
  603. ADDR:    LD    HL,IBUF        ;INPUT BUFFER ADDRESS
  604.     LD    BC,4        ;LENGTH
  605.     CALL    CLEAR        ;CLEAR BUFFER
  606.     LD    (HL),00        ;TERMINATOR
  607.     LD    DE,MSG16    ;REQUEST ADDRESS
  608.     SC    2                        ;CHANGE THIS
  609.     LD    B,4        ;4 HEX DIGITS
  610.     LD    DE,IBUF
  611.     CALL    LINEIN        ;INPUT ADDRESS
  612.     LD    DE,IBUF
  613.     SC    14        ;CONVERT TO BINARY IN HL    CHANGE THIS
  614.     JR    C,ADDR        ;OVERFLOW
  615.     RET            ;DONE
  616. CLEAR:
  617.     LD    A,20H        ;BLANKS
  618. .BLANK:
  619.     LD    (HL),A        ;STORE
  620.     CPI            ;UPDATE POINTERS
  621.     JP    PE,.BLANK    ;LOOP TILL DONE
  622.     RET
  623. PULSE:
  624.     OR    SET        ;SET BIT
  625.     OUT    (CONT),A    ;OUTPUT PULSE
  626.     AND    CLR        ;CLEAR PULSE
  627.     OUT    (CONT),A    ;RESET PULSE
  628.     RET
  629.  
  630.  
  631. ;***************************************************************************
  632. ; VARIABLE STORAGE
  633. ;***************************************************************************
  634.  
  635. MSG1:        DC      OCH,'EP -2A PROM PROGRAMMER',0AH
  636.         DC    '1. 2708',0AH
  637.         DC    '2. 2758',0AH
  638.         DC    '3. 2716',0AH
  639.         DC    '4. 2732'
  640.         DC    '5. TMS 2708',0AH
  641.         DC    '6. TMS 2716',0AH
  642.         DC    '7. TMS 2732',0AH
  643.         DC    0AH
  644.         DC    'ENTER PROM TYPE - ',00H
  645. MSG2:        DC    0CH,'PROM TYPE ',00H
  646. ;
  647. ; EACH LINE OF MSGE MUST BE 8 CHAR PLUS CR 
  648. ;
  649. MSG3:        DC    '2708    ',0DH
  650.         DC    '2758    ',0DH
  651.         DC    '2716    ',0DH
  652.         DC    '2732    ',0DH
  653.         DC    'TMS 2708',0DH
  654.         DC    'TMS 2716',0DH
  655.         DC    'TMS 2732',0DH
  656. MSG4:        DC    0AH,'E. ERASE CHECK',0AH
  657.         DC    'P. PROGRAM PROM',0AH
  658.         DC    'V. VERIFY PROM',0AH
  659.         DC    'F. DEFINE FILE TO BE USED FOR LOADING',0AH
  660.         DC    'L. LOAD DISK FILE INTO BUFFER',0AH
  661.         DC    'R. READ PROM CONTENTS INTO BUFFER',0AH
  662.         DC    'A. ALTER BUFFER (HEX MUST REMAIN IN ORDER
  663.         DC    'D. DUMP BUFFER (HEX) ',0AH
  664.         DC    'T. CHANGE PROM TYPE ',0DH
  665. MSG5:        DC    0AH,'COMMAND : ',00H
  666. MSG6:        DC    'FILE NAME: ',00H
  667. MSG7:        DC    'FILE TYPE: ',00H
  668. MSG8:        DC    'DRIVE    : ',00H
  669. MSG9:        DC    'ADDRESS- HIGH ORDER BYTE: ',00H
  670. MSG10:        DC    'CANT FIND FILE ',0DH
  671. MSG11:        DC    'FILE NOT ABSOLUTE ',0DH
  672. MSG12:        DC    'FILE HAS NOT BEEN DEFINED (USE "F") ',0DH
  673. MSG13:        DC    'PROM LOAD ADDRESS ',00H
  674. MSG14:        DC    ' IS BELOW PROGRAM START ADDRESS ',00H
  675. MSG15:        DC    'PROM START ADDRESS IS ABOVE PROGRAM SPACE',0DH
  676. MSG16:        DC    'ADDRESS: ',00H
  677.  
  678. DCB:        DS    17    ;DIRECTORY CONTROL BLOCK
  679. WORK:        DS    256    ;WORK AREA FOR DIRECTORY LOOKUP
  680. IBUF:        DS    60    ;INPUT/OUTPUT BUFFER
  681.  
  682.                 ; FILE VARIABLES MUST REMAIN IN ORDER
  683.  
  684. LOADADDR:    DS    3    ;PROM BASE ADDRESS + TERMINATOR CHAR
  685. FILEADDR:    DC    0    ;FILE LOAD ADDRESS MSB
  686. FILESEC:    DC    00,0    ;UPDATE POINTERS
  687. LOC        DS    2    ;CURRENT LOCATION IN BUFFER
  688. PROM        DS    1    ;PROM TYPE
  689. SIZE:        DC    00,00    ;SIZE OF PROM
  690. LOOPCNT:    DC    00    ;LOOP COUNT
  691. DELCNT:        DC    00    ;DELAY COUNT - MUST FOLLOW LOOPCOUNT
  692.  
  693. PARAM:                ;PARAMETER TABLE- SIZE IN 256 BYTE BLOCKS
  694.                 ;          NUMBER OF PROGRAMMING LOOPS
  695.                 ;          DELAY TIME IN .75MS INTERVAL 
  696.         DC    4,133,1    ;2708
  697.         DC    4,1,75    ;2758
  698.         DC    8,1,75    ;2716
  699.         DC    16,1,75    ;2732
  700.         DC    4,133,1    ;TMS2708
  701.         DC    8,133,1    ;TMS2716
  702.         DC    16,1,75    ;TMS3732
  703. ERCHK:        DC    0FFH    ;ERASED CHARACTER
  704. BUFFER:        DS    4096    ;4K BUFFER
  705.  
  706.  
  707.