From 46d71033c3607abdd923f83cd2a2e6d2aeafd963 Mon Sep 17 00:00:00 2001 From: Jakub Husak Date: Sat, 14 Jan 2023 11:48:41 +0100 Subject: [PATCH] works 29f0x0 format --- lib/flashwritelib_new.asx | 86 +++++++++++------- lib/lib_28sf0x0.asm | 8 +- lib/lib_29f0x0.asm | 14 ++- lib/lib_39sf0x0.asm | 2 + lib/print2.asx | 43 ++++----- .../1MBOnEscape/OnEscapeflashwrite.xex | Bin 1052362 -> 1052936 bytes various_flashers/1MBOnEscape/flashwrite.asx | 79 +++++++++++++++- 7 files changed, 168 insertions(+), 64 deletions(-) diff --git a/lib/flashwritelib_new.asx b/lib/flashwritelib_new.asx index a61094c..476405a 100644 --- a/lib/flashwritelib_new.asx +++ b/lib/flashwritelib_new.asx @@ -14,7 +14,8 @@ m_offsets flashoppreamble = 6 flash_lockchip = 9 flash_unlockchip = 12 - flash_idstr = 15 + flash_wait_unit = 15 + flash_idstr = 18 ; rw section, may be moved to ZP if needed M_VECTOR .word 0 @@ -29,7 +30,7 @@ m_iter .byte 0 ; 39sf0x0 protokol 5555/AA;2aaa/55 ; 29f0x0 protokol 555/AA;2aa/55 ; Working scan order; scanning from the end; -M_CHECK_VECS .word M_VECTORS_29F, M_VECTORS_39SF, M_VECTORS_28SF +M_CHECK_VECS .word M_VECTORS_39SF, M_VECTORS_29F, M_VECTORS_28SF ; -------------------------------------------------------------------- ;Problems to solve with writing: @@ -61,13 +62,13 @@ M_CHECK_VECS .word M_VECTORS_29F, M_VECTORS_39SF, M_VECTORS_28SF ; this fails only when somebody stores vendor and product bytes ; at the proper cells. ; -; then in the code we call lda #offset/jsr jsrtovetorproc +; then in the code we call lda #offset/jsr jsrtovectorproc check_type ldy #(2*(num_mems-1)) ?again sty m_iter ; store default values - sta $d500,x + jsr flashsetbank lda $a000 sta m_vendor lda $a001 @@ -75,7 +76,7 @@ check_type jsr jsrtosoftidentry - sta $d500,x + jsr flashsetbank lda $a000 ; vendor cmp m_vendor sta m_vendor @@ -99,22 +100,26 @@ check_type lda M_CHECK_VECS,y sta M_VECTOR +jsrtosoftidexit lda #softid_exit - jsr jsrtovetorproc + jsr jsrtovectorproc + lda $d013 + sta $3fa clc rts jsrtosoftidentry - lda M_CHECK_VECS+1,y ; first is softid entry - pha - lda M_CHECK_VECS,y ; first is softid entry - pha - php - rti ; jsr to tabled func + lda M_CHECK_VECS+1,y ; first is softid entry + pha + lda M_CHECK_VECS,y ; first is softid entry + pha + php + rti ; jsr to tabled func + ; PROCEDURE ; performs jump to vector table at offset in A provided ; y passed to the procedure called -jsrtovetorproc +jsrtovectorproc php ; preserve C clc adc M_VECTOR @@ -141,14 +146,9 @@ flashformatchip sei stx store_x - ; lda #C_FORMAT - sec + sec ; will format flash! lda #flashoppreamble - jsr jsrtovetorproc ; does not touch A - ;sta $d502,x - ; !!!!!!!!!!!!!!!!!!! CHECK THIS !!!!!!!!!!!!!!!!!!!! - ;lda #TRIGGER_FORMAT - ;sta $b555 ; FORMAT HERE TRIGGERED! + jsr jsrtovectorproc ; preserves A ; not needed to mva $ff flashcmp jsr wait4flashcheckresult ; waits for format finished ; then check number of banks for FFs @@ -186,7 +186,7 @@ flashformatsector stx flashformatstorex sta flashformatstorea sei - sta $d500,x + jsr flashsetbank ; store #$a0 or #$b0 sta flashformataddrcheck + 2 jsr flashchecksectorformatted @@ -197,7 +197,7 @@ flashformatstorex equ * + 1 ; check least sector bit sec lda #flashoppreamble ; does not touch A,X - jsr jsrtovetorproc + jsr jsrtovectorproc sta $D500,x ; A must be either $A0 or $B0 flashformatstorea equ * + 1 @@ -215,7 +215,7 @@ flashtmpaddr equ *+1 sta flashformataddrcheck+2 ldx flashformatstorex - sta $d500,x + jsr flashsetbank ; check if all data in sector is $ff flashchecksectorformatted @@ -231,7 +231,7 @@ flashformataddrcheck inc flashformataddrcheck + 2 dey bne flashformataddrcheck - + flashsectorformatgood jsr flashcartoff clc @@ -265,9 +265,9 @@ byte_differs sta flashcmp sei pha - clc ; byte preamble + clc ; byte program preamble lda #flashoppreamble ; preserves A,X - jsr jsrtovetorproc + jsr jsrtovectorproc pla ; set right bank sta $D500,x @@ -276,10 +276,12 @@ byte_differs wait4flashcheckresult ; sei mode mva #0 flashcnt + sta flashcnt+1 ldy #1 ; first time wait short first turn to speed up byte write. bne @+ flashwaitfordone + ; WARNING! 29f040 erases even 10 seconds! ; approx 100ms in overall for chip erase: ; as many cycles needed, as 256*cycles >100ms * (1+epsilon) ; 100 ms is 180000 cycles @@ -289,26 +291,38 @@ flashwaitfordone ; so flipipng values, and adding margin, ; we count 128*6 cycles in inner loop. ; max sector erase by datasheet: 25 ms - ; max chip erase by datasheet: 100 ms + ; max chip erase by datasheet: 100 ms 39sf040 + ; max chip erase by datasheet: 20 ms 28sf040 + ; max chip erase by datasheet: 10000 ms 29f040 + ldy#250 -@ dey - nop +@ + ;lda #flash_wait_unit + ;jsr jsrtovectorproc + inc colbaks + lda colbaks + sta colbak + dey bne @- -@ ldy #{ lda.w } +@ + + ldy #{ lda.w } jsr flashprocessbyte sta flashval ldy #{ eor.w } jsr flashprocessbyte inc flashcnt bne @+ - sta $d580 + inc flashcnt+1 + bne @+ + jsr flashcartoff lda #$ff ; status rts @ and #$40 bne flashwaitfordone - sta $d580 + jsr flashcartoff flashval equ *+1 lda #0 flashcmp equ *+1 @@ -317,7 +331,7 @@ flashcmp equ *+1 rts flashcnt - dta 0 + dta 0,0 ; ---------------------- ; PROCEDURE @@ -340,6 +354,12 @@ flashsetaddr sty flashaddr+1 rts +flashsetbank + sta $d500,x + lda $d013 + sta $3fa + rts + flashcartoff pha sta $d580 diff --git a/lib/lib_28sf0x0.asm b/lib/lib_28sf0x0.asm index 81fb3bd..bbe126f 100644 --- a/lib/lib_28sf0x0.asm +++ b/lib/lib_28sf0x0.asm @@ -1,7 +1,6 @@ C_FORMAT_28SF equ $30 C_BYTE_PROG_28SF equ $10 M_SSIZE_28SF equ $0100 ; sector size -; store ; M_VECTORS_28SF jmp softid_entry_28SF @@ -9,6 +8,7 @@ M_VECTORS_28SF jmp flashoppreamble_28SF jmp flash_lockchip_28SF jmp flash_unlockchip_28SF + jmp flash_wait_unit_28SF dta c'28SF0x0',0 flashoppreamble_28SF @@ -23,6 +23,7 @@ flashoppreamble_28SF flashoppreamble_acc_28SF ; 28SF0x0 sta $d500,x sta $a000 +flash_wait_unit_28SF rts ;read_manufacturer_28SF ; sta $D500,x ; x=0 or $40 else will read wrong @@ -41,12 +42,15 @@ flash_unlockchip_28SF rts softid_entry_28SF - sta $d500,x lda #$90 sta $a000 rts softid_exit_28SF + lda #$ff + sta $a000 + rts + flash_lockchip_28SF sta $D500,x ; x =0 or $40, else will not unlock jsr flash_lock_preamb_28SF diff --git a/lib/lib_29f0x0.asm b/lib/lib_29f0x0.asm index c58f46f..4cfc711 100644 --- a/lib/lib_29f0x0.asm +++ b/lib/lib_29f0x0.asm @@ -10,6 +10,7 @@ M_VECTORS_29F jmp flashoppreamble_29F jmp flash_lockchip_29F jmp flash_unlockchip_29F + jmp flash_wait_unit_29F dta c'29F0x0',0 flashoppreamble_29F @@ -30,7 +31,7 @@ flashoppreamble_acc_29F ; 29F040 sta $d500,x mva #$aa $a555 ; $555<$aa mva #$55 $a2aa ; $2aa<$55 - ; $555<$80 + ; $555<$80 or $A0 mva command_ZP_29F $a555; will become command: FORMAT/ID_MODE/BYTE_PROG cmp #C_FORMAT_29F bne @+ ; if not FORMAT, procedure finishes @@ -44,6 +45,17 @@ flash_lockchip_29F flash_unlockchip_29F rts +flash_wait_unit_29F + bit VCOUNT + bmi *-3 + bit VCOUNT + bpl *-3 + bit VCOUNT + bmi *-3 + bit VCOUNT + bpl *-3 + rts + ;read_manufacturer_29F ; sta $D500,x ; x=0 or $40 else will read wrong ; lda $a000 diff --git a/lib/lib_39sf0x0.asm b/lib/lib_39sf0x0.asm index f541a10..600c71e 100644 --- a/lib/lib_39sf0x0.asm +++ b/lib/lib_39sf0x0.asm @@ -10,6 +10,7 @@ M_VECTORS_39SF jmp flashoppreamble_39SF jmp flash_lockchip_39SF jmp flash_unlockchip_39SF + jmp flash_wait_unit_29F dta c'39SF0x0',0 flashoppreamble_39SF @@ -47,6 +48,7 @@ flashoppreamble_acc_39SF ; 39sf0x0, 29F040 tax flash_lockchip_39SF flash_unlockchip_39SF +flash_wait_unit_39SF rts ;read_manufacturer_39SF diff --git a/lib/print2.asx b/lib/print2.asx index 7be2175..b09aa28 100644 --- a/lib/print2.asx +++ b/lib/print2.asx @@ -3,6 +3,7 @@ ; dta c'Ala ma kota',$9b,0 ; next instructions print .proc + stx ?_tmpx clc pla adc #$01 @@ -22,40 +23,32 @@ print .proc ?prt jsr $f2b0 inw ?strv bne ?strv-1 + ldx ?_tmpx:#0 rts .endp printhex .proc - jsr lHex - sta ?printhextmp - txa + pha + stx ?_tmpx + :4 lsr + jsr HEX2INT jsr $f2b0 + pla + and #$0f + jsr HEX2INT + jsr $f2b0 + ldx ?_tmpx + rts +?_tmpx .byte 0 -?printhextmp equ * +1 - lda #$ff - jmp $f2b0 - .endp - -lHex .proc - -// po deklaracji procedury .PROC z parametrami, automatycznie wymuszone zostaje wykonanie -// makra @PULL, ktore zdejmie za nas parametry ze stosu programowego i umiesci je w pamieci -// od adresu @PROC_VARS_ADR, etykiecie parametru LOW zostaje przypisany adres @PROC_VARS_ADR - - pha - :4 lsr @ - - jsr HEX2INT - - tax ; wynik dzialania w regX - - pla - and #$0f - -HEX2INT SED +HEX2INT + php + sei + SED CMP #$0A ADC #'0' CLD + plp ; wynik dzialania w regA rts .endp diff --git a/various_flashers/1MBOnEscape/OnEscapeflashwrite.xex b/various_flashers/1MBOnEscape/OnEscapeflashwrite.xex index af7e661b82c62469ccc08515364f5dfbe366ccac..d0561e37e1ba971654e5b3e894a7229e38523608 100644 GIT binary patch delta 3935 zcmZ{meQXow9mntd5<9W;LPE{y&SYw$16B#t(TNnCUVuz&5)$LBj26p9nbfg%-tX+k z&NTI`(>U@rbvVMJ zK=3VJ?;)Re-AO`PsR&Q?F=DvVKD^qF{>qG~{oW4t`Z{{Lf`KDGFY53I4mKe|QW$iF zl@`?ZZ6c-Tjv(k6=nD4q27+CgUTEFAbp&UvNmkmWO1mx4Ac$%o)d6ZizwrgV>ksbh z?eYGfH|T;odb~c>oM3E$XM{UQnr8xpa2G|1bLn)-GV~as=_gU*vXVkyv+>pT+k~Z;2qf_J!B5_9wAj(dHNYFxjA8`(sdKs+P1j_N8#6|?YGj~~wez2>x(GY^99dKTFLnH0UvHrEFxnUNA_6`?Y9}q^=t0sDjuE02H916gq(v_} zB0Kb=HPWURiAcL%)JL}KxxM#xG@TR)q0=GqLYD(5;1Hw2en$wfjuu?>>A?uGC=q;u zh^7jqPDi}Uf$HgGr$f;vyBx`Y+U|EqU5>dv<)%m^T(n|@rjAan7hHXd*_C?@vI_PD z>$~?I>hPmC46R#2RoVy13~lX0=EPO6#JO zXYmJAOo91BN<_jaC8h`Z!UO$MI*ksp$xceGkCHxwc7BwahxWdBzG#viDW2$yRM{u` zBh_}EASU{6RofNgMBl9{I}a(98KIPkL65i{BKx5-u?eC#LfVjPn;Nba_Pp>Ci%wG$ z$LEZSp1bRq(?jzj%zjuPXjll6mPpzbK*9=odBEvGHMN^gw3AH|G-OB8Vmd+6%0tdb z!Tg?V4Fm&k`F&o3bJCF6)EecYDYeaW+>@CFHJ5BYkQl6^u$P8K6JDiNuaM??)f^5u zgl<~e?+}964%H;<)Mzfc5vHHJKy#nc+)0|dLUXe;H$!i1+}+v`Y9Pe2ky12Eiw&?{ z1R@F#pCz?Hi?mcR&Wj_eSxjS5wHA%@lH;s|&Pw*Pk}W(gRgO!m#(C~_hI^UeNQP_5 zJk89;&6zMBF*>3X`vy{e*FfsHr`A0Q?!`%A&xE)~n2b%NfM6$j~s=;R= zxNTH1l!qbgEQI~v2(v`y_XhKj?x&-Mp=%6!ot0p+6h6F5$Ys}za*<2%k?gk^wGv}@|LV^+X=!eeiDYL192h1L`+Z?uaCm7*#CUZrx z9_e${8gsj1L}>V3XQNmE!_aq5@kfH+8H&H_jHDN%2zKTtPV}*J+BolbmObP;SYmk8 zDV%bKAT3oo?;P0@iV@l2YH5TZIzbQ{U=qPyNIIo{#z&oD7!fTK(=p-}5mibaD&HhO zaSkd^PzP({;nm28V0<)zwzEnBoZr`Mys(uGd2E@?{Hi8^1_9ixu#Jt9iZ1#zd08i2 z)(I8Lpt2N|Ko(wLqr0F@x>?1N+y<_|wV38>-7aN8MPiPCvoN%Sg(c#Xtt{;1msozd zl^ucxf@EiI^!bA3-NSRN%^x6zIO`7(!WkA0hEgb6}LREjl~5>2I4Qz_F_R%j~EXeui; zm2yqxSxx0RP2~rgicM2lrKwbCDwUebYE7j|Q>oTe)@Uk7Q>oEZ?3#)rqm1q&tL4=J z!-F;WC{j6d0qOrqnqecG3oZ&{UgEQ0N zcW}T-dFvyCA!lcE19>@KXdKU(Yjft6@~>-+U+2tgm(Be-OJJGq*;e1WZ@Y+-t|MbO3{42t)Z42I?w?Ox&xXQ=BEgn}3e&ZDv8XbX(rZtmx69<$-VH2Uf{{oU(k8=`em3hnV>a z!zHT~uZ0W4Jr2XtuP_({0Gy96?{>5Ns${*Ao7K*&9cFuj{L6&(dd}XJ@4rnBKeqlU zXZPpr8{}|t@%2o4uhbW3lkx7taHt!@Q31mV3Bz~-!^~pN=ospT{th1Tdec K)PEEe^nU^31CcBM delta 3497 zcmZ{ke@q+a8OQJZ0~;{L{Aloi!0Ws7tt^Q#G=I<}T_}w*)|$p)>eO{wau6VPRt$0| zaoT1OHYA7S2&omFfLL9d*+L2fVj0*xNBM;13)|hdP1-=#bCfk5nb{SJJWB?Es%2cL)7F$5BV13lT7V zrmwfZBiQYlmhQf4(2>?SAzDx`B_56L(Th~1L0>gANr@akMTrD|ff8eUlnMbJVEBW~ z#c-5ZO%U8N5nInsOj7ex6yliVBqi&UQ&jSTGDfMy6ty%ge6noG@>S9=op~FrX z7GOYS%*|8sT~84`6Xti*A)Z*ZCw9~P6&m%^=qL2XPMjHiOh?>?ilIpw3Ynti$IMU) zOrSm*=msq!{w6J^M~6pGCemrNlTA+2N-=ce28=5==@l5i5Pw%N`}joB%y87}m^m5U z@8Aex=H#9I4%s*}e8=nHV1Jtt@}3E|iY<__59$zicotGkkmD8l2s)u`R|S`YuV&Go z=$Wx4qpbIAqL=hA3@T^+1Or)ZXA;{PyC3m;m<|7nVI{R|PE^AtpI{)n?TnaS-pm_Vj^y1`OrBwlK^A_UE)tM&=P)(QNlo8^@{ld#mAULl;YpS zX2?EyK#6{kX@awD6=M@RahU&<@p*1AFpRa}y* zL}$KhTxL9KRH77sn3`K{C zRYiN#Ik77Q_gf7^tisL{POyt^NCU!!5~Ip={xv6D>X=PT$B8>cOt#*Wze$SDu$)3J z*3QAFi3=$n%cz2t^Wb*9Xy^EHHUuXG`S}!y2MNM&Vq>JNi#^;O{)hZ1mH;DP%EsDY zOm50771LZ@v-~Lp5s4*&BhFN^aEe^AiiLx(X1Vby_DnS!@tJo%Yxns{evtL~3H}%h zos;tu$Jo}yAlu48|B{2sies$&1&3lRe}NqXqnL&p*ZM5{&>TDKt1JFyslf044+W4R-i4w=kss zi9u({%SfeL0m?E@T%)=vfe7U%#C~Ndmww>M`+KbtqVZ+CpydpP_BjllA7BXH$1q|s zS+h^-lWI_5{}ltA$yU?48ZGYGaM-CjKzDyF42_ubgy~)rC7tgzZOImV33g6EOj8(Gz+4Nb7QbOuJY^s2+$c&5MhJk9s(AbNig~!mI zz|gsjA@~5pNKt+!&Kuh>#M=Py-Fi+8U{e zFSA8@aw+d2CEMBj#cVBYIiZP^$}i=AP@{Hq8Sj{Su(6{z=h{n3$BPRD)wR@BkjavI z9z$aQL(4dZ_IV7QD;R=F3?tS;T%-#C*Y;ATwubrwxAd3i3qQ_Q@zacb{~0qc{jjg_ znA+^?;~NWqmRq=4`p}>#Gos-;11Pep!Q*C?8DG<769kdoeTSf>Ag{3lu0JO55v2C7_Ohi zaQhO5wGT0*z5>AM^{Zi}5}Wl$q=3jgqtsPmoy&B`ZN=U3VrcBg&@zFceE~zKj3Ky= mVZ>I9yW_?X_hNXrAH($t47V3BtjQQs>j35lwDRz@G5-VXZT^A) diff --git a/various_flashers/1MBOnEscape/flashwrite.asx b/various_flashers/1MBOnEscape/flashwrite.asx index 2f3640e..dce227a 100644 --- a/various_flashers/1MBOnEscape/flashwrite.asx +++ b/various_flashers/1MBOnEscape/flashwrite.asx @@ -34,6 +34,7 @@ _DEST equ $A000 ; test code org $2000 +STARTFLASHWRITE mva #$A0 106 jsr opened lda 20 @@ -55,6 +56,72 @@ _DEST equ $A000 lda $d013 sta $3fa + ldx #0 ; chip address + stx numchips +_check_chips + stx _storex + jsr check_type + bcc ?_next + jsr print + dta c'unrecognized chip: ',0 + lda m_vendor + jsr printhex + lda m_kind + jsr printhex + cpx #$0 + seq + jmp * + jsr print + dta c'ignoring chip ...',0 + jmp menu +?_next inc numchips + lda numchips + clc + adc #$30 + sta chipno + + jsr print + dta c'chip ' +chipno + dta c'0' + dta c' vend/prod: ',0 + lda m_vendor + jsr printhex + lda m_kind + jsr printhex + jsr print + dta c' code: ',0 + + ; print memory type + lda M_VECTOR + clc + adc #flash_idstr ; will print flashmem text id + sta ?taddr + lda M_VECTOR+1 + adc #0 + sta ?taddr+1 + ldy #0 +?loop ; write string onscreen till 0 + lda ?taddr:$ffff,y + beq ?exit + sty st_y + jsr outchar + ldy st_y:#0 + iny + bne ?loop +?exit + jsr printnl + ldx _storex + cpx #0 + bne menu + lda m_vendor + sta t_vendor + lda m_kind + sta t_kind + ldx #$40 + jmp _check_chips +menu + jsr printnl ;lda #$ff ;sta $d301 @@ -74,7 +141,7 @@ _DEST equ $A000 cmp #option jeq CHECKONLY ; start -FORMAT +FORMAT jsr printformatting jsr print dta c'1...',0 @@ -110,6 +177,12 @@ CHECKONLY jsr print dta c'Compare.',$9b,0 rts + +t_vendor .byte 0 +t_kind .byte 0 +numchips .byte 0 +_storex .byte 0 + crcsums :128 dta 0,0 opened @@ -344,7 +417,7 @@ badcompare_tmp2 equ * +1 sec jmp dmaon ; ------- - icl '../../lib/flashwritelib.asx' + icl '../../lib/flashwritelib_new.asx' icl '../../lib/crc16_v2.asm' @@ -357,7 +430,7 @@ badcompare_tmp2 equ * +1 ;jmp * icl '../../lib/print2.asx' org $2e2 - dta a($2000) + dta a(STARTFLASHWRITE) ; --------------------------------------- ; blocks for every 8kb bank .rept 128, #