-   
- ;        ORG     0X6000 
-   
-         ; rom programming example for PENTEVO 
-         ; contains 2 parts: example and working procedures 
-   
-   
-         ; prepare hardware 
-   
- ;        DI  
-   
- ;        LD      A,3 
- ;        OUT     (0XBF),A ; enable shadow ports, enable ROM write 
-   
-   
-         ; write byte 
- ; 
-  ;      LD      E,0X04 
-   ;     LD      HL,0X0001 
-    ;    LD      A,0X55 
-     ;   CALL    PGM_BYTE 
-   
-      ;  LD      HL,0X0123 
-       ; LD      A,0XAA 
-        ;CALL    PGM_BYTE 
-   
-   
-         ; erase 64Kb block 
-   
- ;       LD      E,0X04 
-  ;      LD      HL,0X0000 
-   ;     CALL    ERASE_BLK 
-   
-   
-         ; program 16k of shit 
-   
- ;       LD      E,0X04 
-  ;      LD      HL,0X0000 
-   ;     LD      IX,0X8000 
-    ;    LD      BC,0X4000 
-   
- ;L2 
-     ;   LD      A,(IX) 
-      ;  CALL    PGM_BYTE 
-   
-       ; INC     IX 
-        ;CALL    INC_EHL 
- ;       DEC     BC 
-  ;      LD      A,B 
-   ;     OR      C 
-    ;    JR      NZ,L2 
-   
-         ; read page 
-   
- ;        LD      E,0X04 
- ;        LD      HL,0X0000 
- ;        LD      IX,0X8000 
- ;        LD      BC,0X4000 
- ;L1 
- ;        CALL    RDBYTE 
- ;        LD      (IX),A 
-   
- ;        CALL    INC_EHL 
- ;        INC     IX 
- ;        DEC     BC 
- ;        LD      A,B 
- ;        OR      C 
- ;        JR      NZ,L1 
-   
- ;        LD      BC,0XFFF7 ;return RAM to 0XC000..0XFFFF 
- ;        LD      A,0XFF 
- ;        OUT     (C),A 
-   
- ;        LD      A,0 
- ;        OUT     (0XBF),A ; disable ports, disable ROM write 
-   
- ;        EI  
- ;        RET  
-   
-   
-   
-   
-   
- ;INC_EHL 
- ;        INC     L 
- ;        RET     NZ 
- ;        INC     H 
- ;        RET     NZ 
- ;        INC     E 
- ;        RET  
-   
-   
-   
- PGM_BYTE 
-         ; programs byte to the given location 
-         ; address in EHL (512kB only) 
-         ; byte in A 
-   
-         ; preserves BC,DE,HL 
-   
-         ; returns carry=1 if error 
-   
-         PUSH    DE 
-         PUSH    HL 
-         PUSH    AF 
-   
-         LD      E,0X00 
-         LD      HL,0X0555 
-         LD      A,0XAA 
-         CALL    WRBYTE 
-   
-         LD      HL,0X2AA 
-         LD      A,0X55 
-         CALL    WRBYTE 
-   
-         LD      HL,0X555 
-         LD      A,0XA0 
-         CALL    WRBYTE 
-   
-         POP     AF 
-         POP     HL 
-         POP     DE 
-         CALL    WRBYTE 
-   
-         JR      ERR_END ; wait for end/error as always 
-   
-   
- ERASE_BLK 
-         ; erases 64kB block of ROM. 
-         ; block address is given in EHL (any addr in block) 
-   
-         ; returns carry=1 if error 
-   
-         ; BC,DE,HL are preserved 
-   
-   
-         PUSH    DE 
-         PUSH    HL 
-   
-         LD      E,0X00 
-         LD      HL,0X0555 
-         LD      A,0XAA 
-         CALL    WRBYTE 
-   
-         LD      HL,0X2AA 
-         LD      A,0X55 
-         CALL    WRBYTE 
-   
-         LD      HL,0X555 
-         LD      A,0X80 
-         CALL    WRBYTE 
-   
-         LD      A,0XAA 
-         CALL    WRBYTE 
-   
-         LD      HL,0X2AA 
-         LD      A,0X55 
-         CALL    WRBYTE 
-   
-         POP     HL 
-         POP     DE 
-         LD      A,0X30 
-         CALL    WRBYTE 
-   
-         ;now wait 100uS @ 14MHz to start actual block erase 
-   
-         LD      A,87 
-         DEC     A 
-         JR      NZ,$-1 
-   
-         ; then wait for erase end 
- ERR_END 
-         CALL    WAIT_END 
-   
-         RET     NC ; if no error - return 
-   
-         ; send read/reset command to ROM 
-   
-         LD      A,0XF0 
-         CALL    WRBYTE 
-   
-         ;then wait 10uS @ 14MHz 
-   
-         LD      A,9 
-         DEC     A 
-         JR      NZ,$-1 
-   
-         SCF  
-         RET ; set error condition 
-   
- WAIT_END;wait for ROM to end op or to indicate error 
-   
-         PUSH    BC 
-   
- WE_REPEAT 
-         CALL    RDBYTE 
-         LD      B,A 
-   
-         CALL    RDBYTE 
-         XOR     B 
-   
-         BIT     6,A 
-         JR      Z,WE_END ; no toggle - end! (carry is clear) 
-   
-         BIT     5,A 
-         JR      NZ,WE_REPEAT ; if toggle and error bit toggles - 
-                              ; repeat reading 
-   
-         BIT     5,B ; toggle, error bit is set - error! 
-         JR      Z,WE_REPEAT ; otherwise - just toggle, wait more 
-   
- ;WE_ERROR 
-         SCF  
-   
- WE_END  POP     BC 
-         RET  
-   
- WRBYTE  ; writes given in A byte to rom at address EHL 
-         ; in a range 0..512kB 
-   
-         ; assumes shadow ports are on 
-         ; uses paging in 0XC000..0XFFFF window 
-   
-         ; preserves A,BC,DE,HL 
-   
-         PUSH    BC 
-         PUSH    AF 
-   
-         LD      A,E 
-         AND     7 ; 512kB only 
-         LD      B,A 
-   
-         LD      A,H 
-         AND     0XC0 
-         OR      B 
-   
-         RLCA  
-         RLCA  
-   
-         CPL  
-         AND     0X3F 
- ;;;;;;;;OR      0X00 
-   
-         LD      BC,WIN_A3;0XFFF7 
-         OUT     (C),A    ; page is done 
-   
-         LD      A,H 
-         OR      0XC0 
-         LD      B,A 
-         LD      A,L 
-         LD      C,A 
-   
-         POP     AF 
-         LD      (BC),A 
-   
-         POP     BC 
-         RET  
-   
- RDBYTE  ; read byte (same as WRBYTE), reads in A 
-   
-         PUSH    BC 
-   
-   
-         LD      A,E 
-         AND     7 ; 512kB only 
-         LD      B,A 
-   
-         LD      A,H 
-         AND     0XC0 
-         OR      B 
-   
-         RLCA  
-         RLCA  
-   
-         CPL  
-         AND     0X3F 
- ;;;;;;;;OR      0X00 
-   
-         LD      BC,WIN_A3;0XFFF7 
-         OUT     (C),A    ; page is done 
-   
-         LD      A,H 
-         OR      0XC0 
-         LD      B,A 
-         LD      A,L 
-         LD      C,A 
-   
-         LD      A,(BC) 
-   
-         POP     BC 
-         RET  
-