Subversion Repositories pentevo

Rev

Rev 635 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;        ORG     0X6000
  3.  
  4.         ; rom programming example for PENTEVO
  5.         ; contains 2 parts: example and working procedures
  6.  
  7.  
  8.         ; prepare hardware
  9.  
  10. ;        DI
  11.  
  12. ;        LD      A,3
  13. ;        OUT     (0XBF),A ; enable shadow ports, enable ROM write
  14.  
  15.  
  16.         ; write byte
  17. ;
  18.  ;      LD      E,0X04
  19.   ;     LD      HL,0X0001
  20.    ;    LD      A,0X55
  21.     ;   CALL    PGM_BYTE
  22.  
  23.      ;  LD      HL,0X0123
  24.       ; LD      A,0XAA
  25.        ;CALL    PGM_BYTE
  26.  
  27.  
  28.         ; erase 64Kb block
  29.  
  30. ;       LD      E,0X04
  31.  ;      LD      HL,0X0000
  32.   ;     CALL    ERASE_BLK
  33.  
  34.  
  35.         ; program 16k of shit
  36.  
  37. ;       LD      E,0X04
  38.  ;      LD      HL,0X0000
  39.   ;     LD      IX,0X8000
  40.    ;    LD      BC,0X4000
  41.  
  42. ;L2
  43.     ;   LD      A,(IX)
  44.      ;  CALL    PGM_BYTE
  45.  
  46.       ; INC     IX
  47.        ;CALL    INC_EHL
  48. ;       DEC     BC
  49.  ;      LD      A,B
  50.   ;     OR      C
  51.    ;    JR      NZ,L2
  52.  
  53.         ; read page
  54.  
  55. ;        LD      E,0X04
  56. ;        LD      HL,0X0000
  57. ;        LD      IX,0X8000
  58. ;        LD      BC,0X4000
  59. ;L1
  60. ;        CALL    RDBYTE
  61. ;        LD      (IX),A
  62.  
  63. ;        CALL    INC_EHL
  64. ;        INC     IX
  65. ;        DEC     BC
  66. ;        LD      A,B
  67. ;        OR      C
  68. ;        JR      NZ,L1
  69.  
  70. ;        LD      BC,0XFFF7 ;return RAM to 0XC000..0XFFFF
  71. ;        LD      A,0XFF
  72. ;        OUT     (C),A
  73.  
  74. ;        LD      A,0
  75. ;        OUT     (0XBF),A ; disable ports, disable ROM write
  76.  
  77. ;        EI
  78. ;        RET
  79.  
  80.  
  81.  
  82.  
  83.  
  84. ;INC_EHL
  85. ;        INC     L
  86. ;        RET     NZ
  87. ;        INC     H
  88. ;        RET     NZ
  89. ;        INC     E
  90. ;        RET
  91.  
  92.  
  93.  
  94. PGM_BYTE
  95.         ; programs byte to the given location
  96.         ; address in EHL (512kB only)
  97.         ; byte in A
  98.  
  99.         ; preserves BC,DE,HL
  100.  
  101.         ; returns carry=1 if error
  102.  
  103.         PUSH    DE
  104.         PUSH    HL
  105.         PUSH    AF
  106.  
  107.         LD      E,0X00
  108.         LD      HL,0X0555
  109.         LD      A,0XAA
  110.         CALL    WRBYTE
  111.  
  112.         LD      HL,0X2AA
  113.         LD      A,0X55
  114.         CALL    WRBYTE
  115.  
  116.         LD      HL,0X555
  117.         LD      A,0XA0
  118.         CALL    WRBYTE
  119.  
  120.         POP     AF
  121.         POP     HL
  122.         POP     DE
  123.         CALL    WRBYTE
  124.  
  125.         JR      ERR_END ; wait for end/error as always
  126.  
  127.  
  128. ERASE_BLK
  129.         ; erases 64kB block of ROM.
  130.         ; block address is given in EHL (any addr in block)
  131.  
  132.         ; returns carry=1 if error
  133.  
  134.         ; BC,DE,HL are preserved
  135.  
  136.  
  137.         PUSH    DE
  138.         PUSH    HL
  139.  
  140.         LD      E,0X00
  141.         LD      HL,0X0555
  142.         LD      A,0XAA
  143.         CALL    WRBYTE
  144.  
  145.         LD      HL,0X2AA
  146.         LD      A,0X55
  147.         CALL    WRBYTE
  148.  
  149.         LD      HL,0X555
  150.         LD      A,0X80
  151.         CALL    WRBYTE
  152.  
  153.         LD      A,0XAA
  154.         CALL    WRBYTE
  155.  
  156.         LD      HL,0X2AA
  157.         LD      A,0X55
  158.         CALL    WRBYTE
  159.  
  160.         POP     HL
  161.         POP     DE
  162.         LD      A,0X30
  163.         CALL    WRBYTE
  164.  
  165.         ;now wait 100uS @ 14MHz to start actual block erase
  166.  
  167.         LD      A,87
  168.         DEC     A
  169.         JR      NZ,$-1
  170.  
  171.         ; then wait for erase end
  172. ERR_END
  173.         CALL    WAIT_END
  174.  
  175.         RET     NC ; if no error - return
  176.  
  177.         ; send read/reset command to ROM
  178.  
  179.         LD      A,0XF0
  180.         CALL    WRBYTE
  181.  
  182.         ;then wait 10uS @ 14MHz
  183.  
  184.         LD      A,9
  185.         DEC     A
  186.         JR      NZ,$-1
  187.  
  188.         SCF
  189.         RET ; set error condition
  190.  
  191. WAIT_END;wait for ROM to end op or to indicate error
  192.  
  193.         PUSH    BC
  194.  
  195. WE_REPEAT
  196.         CALL    RDBYTE
  197.         LD      B,A
  198.  
  199.         CALL    RDBYTE
  200.         XOR     B
  201.  
  202.         BIT     6,A
  203.         JR      Z,WE_END ; no toggle - end! (carry is clear)
  204.  
  205.         BIT     5,A
  206.         JR      NZ,WE_REPEAT ; if toggle and error bit toggles -
  207.                              ; repeat reading
  208.  
  209.         BIT     5,B ; toggle, error bit is set - error!
  210.         JR      Z,WE_REPEAT ; otherwise - just toggle, wait more
  211.  
  212. ;WE_ERROR
  213.         SCF
  214.  
  215. WE_END  POP     BC
  216.         RET
  217.  
  218. WRBYTE  ; writes given in A byte to rom at address EHL
  219.         ; in a range 0..512kB
  220.  
  221.         ; assumes shadow ports are on
  222.         ; uses paging in 0XC000..0XFFFF window
  223.  
  224.         ; preserves A,BC,DE,HL
  225.  
  226.         PUSH    BC
  227.         PUSH    AF
  228.  
  229.         LD      A,E
  230.         AND     7 ; 512kB only
  231.         LD      B,A
  232.  
  233.         LD      A,H
  234.         AND     0XC0
  235.         OR      B
  236.  
  237.         RLCA
  238.         RLCA
  239.  
  240.         CPL
  241.         AND     0X3F
  242. ;;;;;;;;OR      0X00
  243.  
  244.         LD      BC,WIN_A3;0XFFF7
  245.         OUT     (C),A    ; page is done
  246.  
  247.         LD      A,H
  248.         OR      0XC0
  249.         LD      B,A
  250.         LD      A,L
  251.         LD      C,A
  252.  
  253.         POP     AF
  254.         LD      (BC),A
  255.  
  256.         POP     BC
  257.         RET
  258.  
  259. RDBYTE  ; read byte (same as WRBYTE), reads in A
  260.  
  261.         PUSH    BC
  262.  
  263.  
  264.         LD      A,E
  265.         AND     7 ; 512kB only
  266.         LD      B,A
  267.  
  268.         LD      A,H
  269.         AND     0XC0
  270.         OR      B
  271.  
  272.         RLCA
  273.         RLCA
  274.  
  275.         CPL
  276.         AND     0X3F
  277. ;;;;;;;;OR      0X00
  278.  
  279.         LD      BC,WIN_A3;0XFFF7
  280.         OUT     (C),A    ; page is done
  281.  
  282.         LD      A,H
  283.         OR      0XC0
  284.         LD      B,A
  285.         LD      A,L
  286.         LD      C,A
  287.  
  288.         LD      A,(BC)
  289.  
  290.         POP     BC
  291.         RET
  292.