Subversion Repositories pentevo

Rev

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

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