Od: |
David Luftner |
Datum: |
25.10.2004 18:23 |
Předmět: |
Rozsireni Ramky |
Tak uz mam prvni krok za sebou:
Mam naprogramovanou Flash romkou sharpa a ram
pamet na testovaci desce mimo sharp. Zatim neni
zapojeno zadne mapovani ramky ani romky takze z 512k ram
pouzivam 64 a z 512k flash 16k. Ale alespon to funguje.
V priloze posilam jak jsem programoval na Sharpu
Flash.
FlashPGM.txt: |
 |
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
|