Schema: /---------------\ /---------------\ /----------------\ A06-----|A0 | LS138 |/Q0| D0-----|D0 | LS273 | Q0|-------|A8 | 29F010 | D0|-----D0 A07-----|A1 | |/Q1| D1-----|D1 | | Q1|-------|A9 | amd | D1|-----D1 A01-----|A2 | |/Q2| D2-----|D2 | | Q2|-------|A10| | D2|-----D2 | | |/Q3| D3-----|D3 | | Q3|-------|A11| | D3|-----D3 | | |/Q4| D4-----|D4 | | Q4|-------|A12| | D4|-----D4 A02-----|/E0| |/Q5| D5-----|D5 | | Q5|-------|A13| | D5|-----D5 A03-----|/E1| |/Q6| D6-----|D6 | | Q6|-------|A14| | D6|-----D6 A04-----|E2 | |/Q7|--\ D7-----|D7 | | Q7|-------|A15| | D7|-----D7 \---------------/ | Ucc--|/MR| | | Ucc--|A16| | | | /------|CP | | | Ucc--|A17| | | /---------------------/ | \---------------/ Ucc--|A18| | | | | A08-----|A0 | |/OE|-----/RD | /---------------\ | A09-----|A1 | |/WR|-----/WR A00-----|A0 | LS138 |/Q0|-----/ A10-----|A2 | | | \--|A1 | |/Q1|-----\ A11-----|A3 | | | \--|A2 | |/Q2| | A12-----|A4 | | | | | | |/Q3| | A13-----|A5 | | | | | | |/Q4| | A14-----|A6 | | | \--|/E0| |/Q5| | A15-----|A7 | | | /IORQ---|/E1| |/Q6| | | | | | A05-----|E2 | |/Q7| \------------------------------|/CS| | | \---------------/ \----------------/ A ROMku jsem naprogramoval. Nasledujici program je pro Flash AMIC 29F040A z GM ;--------------------------------------------------------------------------------------------------- ; Cteni 16k z Flash 0c000h - 0ffffh na adresy v ram 08000h- 0Bfffh ;--------------------------------------------------------------------------------------------------- 1200 ld HL, 0bfffh 21 FF BF ; adresa posledniho bajtu v ram 3 ld BC, 0ff31h 01 31 FF ; B = pocitadlo, C = datovy port 6 xor A AF ; A = vyssi bajt adresy Flash +1 7 dec A 3D ; vyssi bajt adresy Flash -1 8 out (030h), A D3 30 ; posli vyssi bajt adresy Flash A indr ED BA ; cti 255 bajtu z Flash C ind ED AA ; cti 1 bajt z Flash E cp 0c0h FE C0 ; cetli jsme naposled? 1210 jr NZ, 01207h 20 F5 ; ne cti dalsi 2 ret C9 ; konec ;--------------------------------------------------------------------------------------------------- ; Posli programovaci sequenci do Flash: 5555-AA, 2AAA-55, 5555-(A) ;--------------------------------------------------------------------------------------------------- 6000 ld DE, 05555h 11 55 55 ; 3 adresa do DE ;--------------------------------------------------------------------------------------------------- ; Posli programovaci sequenci do Flash: 5555-AA, 2AAA-55, (DE)-(A) ;--------------------------------------------------------------------------------------------------- 6003 push DE D5 ; uloz hodnoty 4 push AF F5 5 ld DE, 05555h 11 55 55 ; 1 adresa 8 ld A, 0aah 3E AA ; 1 slovo A call 06017h CD 17 60 ; posli D ld DE, 02AAAh 11 AA 2A ; 2 adresa 6010 ld A, 055h 3E 55 ; 2 slovo 2 call 06017h CD 17 60 ; posli 5 pop AF F1 ; obnov hodnoty 6 pop DE D1 ;--------------------------------------------------------------------------------------------------- ; Posli bajt z 'A' na adresu 'DE' ve Flash ;--------------------------------------------------------------------------------------------------- 6017 ld C, 030h 0E 30 ; port adresy 9 out (C), D ED 51 ; posli adresu B inc C 0C ; datovy port C ld B, E 43 ; do 'B' dej nizzsi bajt adresy D out (C), A ED 79 ; posli bajt F ret C9 ;--------------------------------------------------------------------------------------------------- ; Cti bajt z adresy 'DE' ve Flash do 'A' ;--------------------------------------------------------------------------------------------------- 6020 ld C, 030h 0E 30 ; port adresy 2 out (C), D ED 51 ; posli adresu 4 inc C 0C ; datovy port 5 ld B, E 43 ; do 'B' dej nizzsi bajt adresy 6 in A, (C) ED 78 ; cti bajt F ret C9 ;--------------------------------------------------------------------------------------------------- ; Programuj bajt HL-adresa bajtu v pameti, DE-adresa bajtu ve flash ;--------------------------------------------------------------------------------------------------- 6029 call 0604eh CD 4E 60 ; reset Flash C call 06020h CD 20 60 ; cti bajt F cp (HL) BE ; je shodny? 6030 ret Z C8 ; pokud ano nic neprogramuj 1 push DE D5 ; schovej adresu 2 ld A, 0a0h 3E A0 4 call 06000h CD 00 60 ; posli 5555-AA, 2AAA-55, 5555-A0 7 pop DE D1 ; obnov adresu 8 ld A, (HL) 7E ; do A bajt 9 call 06017h CD 17 60 ; a posli C and 080h E6 80 ; orizni na 7 bit E ld C, A 4F ; a uloz do C F push BC C5 6040 call 06020h CD 20 60 ; cti bajt 3 pop BC C1 4 ld B, A 47 ; uloz precteny bajt do B 5 and 080h E6 80 ; orizni na 7 bit 7 cp C B9 ; shoduje se? 8 jr Z, 0604eh 28 04 ; ano konec (reset Flash) A bit 5, B CB 68 ; je konec programovani? C jr NZ, 0603fh 20 F1 ; ne testuj dal ;--------------------------------------------------------------------------------------------------- ; Reset Flash ;--------------------------------------------------------------------------------------------------- 604E ld A, 0f0h 3E F0 6050 out (031h), A D3 31 2 ret C9 ;--------------------------------------------------------------------------------------------------- ; Sektor Erase ;--------------------------------------------------------------------------------------------------- 6053 call 0604eh CD 4E 60 ; reset Flash 6 push DE D5 7 ld A, 080h 3E 80 9 call 06000h CD 00 60 ; posli 5555-AA, 2AAA-55, 5555-80 C pop DE D1 D ld A, 030h 3E 30 F call 06003h CD 03 60 ; posli 5555-AA, 2AAA-55, (DE)-30 6062 ld B, 0 06 00 ; chvili cekej 4 ex (SP), HL E3 ; kdyz necekala tak mi Flashka nahodne 5 djnz 06064h 10 FD ; kolabovala v nasledujici operaci 7 call 06020h CD 20 60 ; cti bajt A rlca 07 ; je 7 bit v jednicce B jr NC, 06062h 30 F5 ; kdyz ne tak cekej D jr 0604eh 18 DF ; a udelej reset ;--------------------------------------------------------------------------------------------------- ; HLAVNI PROGRAM - 16k z ram 02000h- 05fffh do Flash 0c000h - 0ffffh ;--------------------------------------------------------------------------------------------------- ; kontrola 606F call 0604eh CD 4E 60 ; reset Flash 6072 ld HL, 02000h 21 00 20 ; adresa v pameti 5 ld DE, 0c000h 11 00 C0 ; adresa Flash 8 ld C, 0 0E 00 ; stav kontroly 1=nutnost programovat A push BC C5 B call 06020h CD 20 60 ; cti bajt E pop BC C1 F cp (HL) BE ; je to shodne? 6080 jr Z, 06089h 28 07 ; pokud ano tak dalsi bajt 2 and (HL) A6 ; test zda je mozno Flash programovat 3 cp (HL) BE ; nebo je nutno nejdrive 4 call NZ, 06053h C4 53 60 ; sektor vymazat 7 ld C, 1 0E 01 ; stav kontroly - nutno programovat 9 inc HL 23 A inc DE 13 B ld A, D 7A ; jeste mame C or A B7 ; dalsi bajt? D jr NZ, 0607ah 20 EB ; ano tak dalsi F dec C 0D ; je nutno Flash programovat? 6090 ret NZ C0 ; kdyz ne tak konec ; programovani 6091 ld HL, 02000h 21 00 20 ; adresa v pameti 4 ld DE, 0c000h 11 00 C0 ; adresa Flash 7 call 06029h CD 29 60 ; programuj bajt A inc HL 23 B inc DE 13 C ld A, D 7A ; jeste mame D or A B7 ; dalsi bajt? E jr NZ, 06097h 20 F7 ; ano tak dalsi ; kontrola naprogramovani 60A0 ld HL, 01fffh 21 FF 1F ; adresa v pameti -1 3 ld DE, 0bfffh 11 FF BF ; adresa Flash -1 6 inc HL 23 7 inc DE 13 8 ld A, D 7A ; jeste mame 9 or A B7 ; dalsi bajt? A ret Z C8 ; ne konec B call 06020h CD 20 60 ; cti bajt E cp (HL) BE ; shoduji se? F jr Z, 060a6 28 F5 ; ano testuj dalsi 60B1 call 03c3 CD C3 03 ; vypis bajt z Flash 4 call 0ch CD 0C 00 ; vypis mezeru 7 call 03bah CD BA 03 ; vypis adresu pameti A call 0ch CD 0C 00 ; vypis mezeru D ld A, (HL) 7E E jp 03c3h C3 C3 03 ; vypis bajt z pameti