From a6af85296127f5eaeeb4d19822d2091beec1ee92 Mon Sep 17 00:00:00 2001 From: antoniovillena Date: Wed, 4 Apr 2018 23:03:18 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1ado=20segundo=20bot=C3=B3n=20de=20joysti?= =?UTF-8?q?ck=20en=20la=20BIOS=20(funci=C3=B3n=20tecla=20Escape)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- firmware/FIRMWARE.ZX1 | Bin 16384 -> 16384 bytes firmware/bootloader.asm | 146 +++++++++++----------------------------- firmware/firmware.asm | 24 +++++-- firmware/strings.asm | 6 +- 4 files changed, 63 insertions(+), 113 deletions(-) diff --git a/firmware/FIRMWARE.ZX1 b/firmware/FIRMWARE.ZX1 index c9dc5f368cab6776e8b37b1605a3c50bc35201ac..749cd31c30eff9e40d380ae0305f8a1bade4a468 100644 GIT binary patch delta 2865 zcmZ`*eQ*=U6~8@wf1Gssx|2V!?+lV<$8v;899yvt0|AB5Sj{JC41qLtDaFM}%S?qq zwlg*XCbpEa&`kfKCe4(jg|FR!8UHey~=%&Hjd6?cTZ-U4j|VWT`85srkoBJPN+3)MGK_KSW*dK5_|| zgh8?j?1Qh64&_pF+%*0=L?m1GqBD1m8xsONOPGLUUubMEV{u<`I)Z)!Nm--4S!TZ~ zH1Z@cS?!WSz|me%g^$P@9Y@$r-qVrYW2GG}HLK7p1I&&7>eG>0V$=lW!uD95Er`v$ zDQmH|$WfThQ7$sajlW8QylfP;K#P2j-D$y*D!Y;Xfjs?mdUN`@ud={7C~ap*-Wo8t zL_XC6ND>`kv;6Wwpfe&3yRfgOFQ3nbj14nbx~s3L?>;Q!-_?B&_C0({khG+6VRiOB z&sQd3Mm$`vxVO9F=K2___;zi~#~HAAd%ZMy%Rub#_|aoN?m2XV75SEMLQsQT_dn?i zIR}?b|72n%Hyg|8&-_i5W6sQ|@a}VEoZLNQQ|8J!#l!(Or_F|Zb+Jec2LR8SZtKR& zIJ5hj8M>6E@{3Az0^YCevYb)AVIOk4jrFPqvc84R#PIl(vJM!bUbRAp6VQNj!I;q` zd{X66U1D1%(x?&sO0{y!MjQ6x{c|KvdDIyJAh~%uHm=dcHJmb25aQ}_wbqAQJTNk+ zM(ZphAKjCn1i#a~*#t*5qCeubM8)|C$abfnM%DDFc-J=~Pn{Rvn$fAh_9ifsXtun~ z{Trv}A#Dq2go9cREQQ0`lI}vPnz9|(XpS05EAY8+yIqQ%b;|~04#&vPjUxZmi|F?( zDwcAz8|5u0A1&-GTdPFnw8+!_dVOLR{lPFYq~i%ffBM|pdK@lSF(m$G_Qr+0a0 z1`&o7j-S6tp~#?0%XG!Tpr4;PnuD#nw#8u(F2V8mB((xH zQ>dRxiYY91rrMoEy7g?N2<70<^p)Msly@NLm(B_XDH*Gx=Z2G26L@cu^2VFGRMP3I zdaCB}npIaquMReGqfxJZIEmd|mE6sUtE}Jg_+JjOssC$6Ov<_Q(GX;*7fHeZU!@$r zYC7F|FgPV}82S{t!CKOfU{Tu0x#aLd`kmp}s8WkwHso?HWiHQ=^z3k~j7W{5wFdM$ zR2mlPUp5@(z&!%t;qXbXH}H+G88UdyjLYw&Ra5G1BEqr&}o&~y|iccW+FWrIuG zW=KwFQo?4m2~x(QyW0#6COU&dW9Ozb=n12zXswH$&IsQ(5#%#l&=!M7Er7a@BKO$A z;o;#Z_R@*kV5_mjTfv6QUx)1zHaI=-Yn=RFXgnj6nL2GSj6q}%`BnuO_w5L zA~<}@@f|;IS<-s`><97e8C>hzSsm|s2c(}DhhBLiat9}ip`(1b6g6}VtyFdK>r z>~kAX%umypfaXDUOQ`bs7;XM`=oZcxt;b^+V*z4}*4|_-Nt?m{{|humOFVZQtHg8j zU}MhGLZA$LaG-F(Ow6MvWi4_=-oNV?yAJL8%dUCIb*Cb@FnLc!{Ip!;i(inwZH4dg z7o<{Em{FjXV|I#`MQ2(3X*q^w*=P-kUjxl%rmWSPqZ&wo+Ej5iGWPYIvXkel|NjriUX*zqf*q!z4e9`wlYOth0k`(TO1Q?$aG%+{c# z7OWU2vj<`#|M(uM_U?l}vec_@kqUgpQUTV%QOg?BB(sl^i7RQD(`3W-5rrXdeIA^I zzq76b?fY!ybh|aW+3LggIOTgB8*PVo+J1|lU?19SMUpy;2{2AI)VQkCYp_ovXLMZq z0A_8gos&#*p@@%hHncmS5mQ~_raQXC4hamd))H5^o)G!{u$}RPCGaigr3I7Bj?!mR zyE>d&6QBeYMw49Uc4{V55?jEhS*vxH(dq*Jd~_#tHNevpG3?3D}Ow|lNmKIGYb=6(BwX@Zt|&y3zx^3)v@OFR@K4GbNztCZlb zp*PDW)ZhdRRc-`n_}5Ag{hj9tQ>#IfLuIZ(%g_h+o|BnI?4g>I$EH#N;i7uV3D5{U Iv~3s3CTVs{OS=msO`++8qNR<^Qi~9gp}pfc^ehUFpdw0-VQwx! ze>p7z+9cu=$G^0UI`x=37SR*`z@ubZN$c~V)M(J1kQ?LNfjMox6s2x*Z&MKOkNe~8 z+xOo0eZQag{l5Ktwx1f;4yH&aWD4{M|yVeMhQ3z8g0uLxJhACsaGp-WnLST|2yi0Yg8-16x^q( z0!QKNDyL4g#+mUU_^FC5f6kS=!H(!RnFpm(fJ5^1*+8z+$uG9U2G6k zfU$FmL96qrf+^gjZg9TEKJGgoIW$(*-cr35%{YLyA+Yp(q=pz}fJWRGt1S*>D&F#O5fsD#wq%t^zsrDB1w+n!}vahVxYZbLJ14%p;kdnLXdhz%`&8=RHkZE9I7i zbPrIe&|9o5G!K9x3nJOYebs&WyxeK2pTVO$`WpN0!DIZou5Ux%##;l$N|_he$!EOZ zF~Ev=_^|e_ZsF$s7!rQj8}svKJiNVMS-j;SHaLD_$j|RVCs|2o2`5Do(GLb>`@J0Qa?ybc*itp1%obr-c5g@g7IyO!k;s#!qEezu1xZdc;E#7)AOQJTL zBt#DQHBMSPQck!Ac9rd}c2{^%f~{`x zeB>tm6#rB8v)nhpXpn?uTf)g?G8$qV=_$cTESih}xjXX+s-j1wJARY|;w(cnp>MIsE>!Oo-fe6+CBtY75clU$#xa#!zU`^B7(>%DN5kKz43Gs8E(fit616_^n z7dFVr$=nX-7&dFC79F@vg;I+XwtlxPTjtEubDAH}c)0O{$aget*thuM+KBJsrH-clUr& zbPg3t+$gsz!KriKYVm#Yc--2K+Pep0PUpEj7D@Q-dGscWN|f3jLOI*nO@;HxH9AyI zO9I_*G9`aN@0-uPTO<&KB=iK4O!<0(@hiC^w{Gd${Z?P|{w&Hu6|O~3q?BR8^hTvBIlEZGcy)%cSW%Eo|-tbJeV1d zUV)^k$}dxB3*|P@vy#x*AN^}ld^w**9L0Yx?Oq@~R*LV+mGo+~ibBs*DJhMI`_oUk zh)mmsNC}eRZc}CVD#{lM29!&Mp(@U*=-H7})dW7GV!Z99EtPWls~)c2T)p;M=Nki! z{AjenG?K#Mt}EeYq_y^6Mf{(D*wz1aBc(L_WV8cv)bpx51>dBc{wg}t_G&O8@)&vo z&9S!3@9viV*2z*Y*c4NFPn2Yw=S3GRrC)dv2r3kiZ+|k5Y(HOm|ivy@?fP% zczOIutTYP^gXS#W^W`=A=aK1{i>M)f|Inx|&w+OV>JxOV>Ja+mG7;+=95F zm*G*fd+}zo*n|tb=^@=Q)Nc0ktsqEDXGg_*@g#Es=nkQF_?6jh+-^=yXVc}A=AnZ)Z@8jE<`{+U`DQ-YEihTt(BU@|yq;Y;S& z!WX~u2-lQbelA7&RKeUhKZ~m1RZG>a)wUzif0E3`pfGv_6cd?Y)B&sM(h{dFjW4&H z7RTk6D%xGax^_&Ro+(tXP2W=!KG1-HoVrChaQ|Lq6#e`Tczl5AaN|Kri1xw(? ztLO@g25ki-_bIVlb_aq=ppT5sL zuT0*n<|1t5=v&a;S1~V6^Qwg>%fmu=Nw_Lp6J8On5BtLf56$5<;d{gD=LcW+I`E!? zWH~fiU6F}0Tk`8dPlozKe+i9+z6#w48N!#p)nae~#9)$%qnMHJ_u#av~Dw3rX$v|z4G&SO=n zHQIdO;NFAB4}N}d9$)Rp5llwDk0SwEBMA$hRh~Nv&*5hkdMd1FQOgiV(dy_7iytjR zXoih0Q=wN_7hG+%g9qUQ)-wDH^CxTbjs%NV+r0nbicpKq%o~)!k5U~$N_C(|`m@@1 zF|rl^D9t!j3t9s{5YaDf8tAA8ohg?FlV?D=oD?R@AU}=S$$wg8$FHgsvtVu0fLD!I zqWe_nC@iyiOPcK|xf+Q!Y#3L`$6}JO`LIH*N8t`z9eGPR;On+Upbd`M)-zL%7aeM8 z4Xt)D#h3?C2rjZe1O5izux|moASkY&ciE#)*!|ccuRFuD(OuA6{2D&jg#QX3BA(?9ueWc9)R>l&HsWQd>MO!)NJ&8el=~)tNRVC1JQXS&%rKF=J6{ zAa$|2V@&(_!i9;h1lkIpV?~_&7+V4M!hf+f;1S4i0U*O|T;<|3ocH=?zx5va@niBl&yy$-B6^=|nD2~NVU%5C6Vn5^{Dzxs=D)ELmzsS5Xi f?bJtiO{$p@uCw~=P$JzbenBQ&0FA)otG50ZkSnn9 diff --git a/firmware/bootloader.asm b/firmware/bootloader.asm index 6fae9c4..3961c5f 100644 --- a/firmware/bootloader.asm +++ b/firmware/bootloader.asm @@ -13,30 +13,23 @@ define scandbl_ctrl 11 di - ld sp, $bfff-67 - ld de, $c761 ; tras el out (c), h de bffc se ejecuta + ld sp, $bfff-ini+6 + ld de, $c771 ; tras el out (c), h de bffc se ejecuta push de ; un rst 0 para iniciar la nueva ROM ld de, $ed80 ; en $bffc para evitar que el cambio de ROM + push de ; colisione con la siguiente instruccion + ld bc, $bffc-ini+6 + push bc wreg joyconf, %00010000 - jr lspi - -ldedg2 rst $18 ; call routine ld-edge-1 below. - jr nz, ldedg1 - ret - -lspi in a, ($1f) - jr lspi2 - -ldedg1 ld a, $16 ; a delay value of twenty two. -ldelay dec a ; decrement counter - jr nz, ldelay ; loop back to ld-delay 22 times. -lsampl inc b ; increment the time-out counter. - ret z ; return with failure when $ff passed. - in a, ($fe) ; row $7ffe. bit 6 is ear, bit 0 is space key. - xor c ; compare with initial long-term state. - and $40 ; isolate bit 5 - jr z, lsampl ; back to ld-sample if no edge. - jr lcont + wreg master_mapper, 8 ; paginamos la ROM en $c000 + wreg scandbl_ctrl, $c0 ; lo pongo a 28MHz + in a, ($1f) + cp %00011000 ; arriba y disparo a la vez + jr z, recov + cp %00010100 ; arriba y disparo a la vez + jr z, recov + wreg flash_cs, 1 ; desactivamos spi, enviando un 0 + jr cont rst28 ld bc, zxuno_port + $100 pop hl @@ -45,18 +38,17 @@ rst28 ld bc, zxuno_port + $100 outi jp (hl) -lspi2 wreg scandbl_ctrl, $c0 ; lo pongo a 28MHz - push de ; colisione con la siguiente instruccion - defb $fe +getbit ld a, (hl) + dec hl + adc a, a + ret + nop rst38 jp $c006 -lspi3 wreg flash_cs, 1 ; desactivamos spi, enviando un 0 - wreg master_mapper, 8 ; paginamos la ROM en $c000 - wreg flash_cs, 0 ; activamos spi, enviando un 0 +cont wreg flash_cs, 0 ; activamos spi, enviando un 0 wreg flash_spi, 3 ; envio flash_spi un 3, orden de lectura - and c - out (c), h ; envia direccion 008000, a=00,e=80,a=00 +ini out (c), h ; envia direccion 008000, a=00,e=80,a=00 out (c), e out (c), h add hl, sp @@ -64,87 +56,31 @@ boot ini inc b cp h ; compruebo si la direccion es 0000 (final) jr c, boot ; repito si no lo es - wreg scandbl_ctrl, 0 ; lo pongo a 3.5MHz - dec b - out (c), h ; a master_conf quiero enviar un 0 para pasar +boot1 dec b + out (c), 0 ; a master_conf quiero enviar un 0 para pasar inc b - cp %00011000 ; arriba y disparo a la vez - ld de, $bffc-67 - push de - ld ixh, e - jr nbreak + ret + +recov ld hl, firmware-1 + ld de, $ffff + push bc + call dzx7b + pop bc + jr boot1 + + defb 'AV2018' nmi66 jp $c003 retn -lcont ld a, c ; fetch comparison value. - xor $47 ; switch the bits - ld c, a ; and put back in c for long-term. - out ($fe), a ; send to port to effect the change of colour. - ret ; return. - -nbreak ret nz - ld de, $0051+2 - call lbytes - ld ix, $c000 - ld de, $4000+2 -lbytes ld a, $0f ; make the border white and mic off. - out ($fe), a ; output to port. - ld c, 10 -lstart rst $18 ; routine ld-edge-1 - jr z, lstart ; back to ld-break with time out and no edge present on tape - xor a ; set up 8-bit outer loop counter for approx 0.45 second delay -ldwait add hl, hl - djnz ldwait ; self loop to ld-wait (for 256 times) - dec a ; decrease outer loop counter. - jr nz, ldwait ; back to ld-wait, if not zero, with zero in b. - rst $10 ; routine ld-edge-2 - jr z, lstart ; back to ld-break if no edges at all. -leader ld b, $9c ; two edges must be spaced apart. - rst $10 ; routine ld-edge-2 - jr z, lstart ; back to ld-break if time-out - ld a, $c6 ; two edges must be spaced apart. - cp b ; compare - jr nc, lstart ; back to ld-start if too close together for a lead-in. - inc h ; proceed to test 256 edged sample. - jr nz, leader ; back to ld-leader while more to do. -ldsync ld b, $c9 ; two edges must be spaced apart. - rst $18 ; routine ld-edge-1 - jr z, lstart ; back to ld-break with time-out. - ld a, b ; fetch augmented timing value from b. - cp $d4 ; compare - jr nc, ldsync ; back to ld-sync if gap too big, that is, a normal lead-in edge gap - rst $18 ; routine ld-edge-1 - jr z, binf - xor 3 - ld c, a -ldloop ld (ix-2), l ; place loaded byte at memory location. - inc ix ; increment byte pointer. - dec de ; decrement length. - ld l, $01 ; initialize as %00000001 -l8bits ld b, $b2 ; timing. - rst $10 ; routine ld-edge-2 increments b relative to gap between 2 edges -binf jr z, binf ; return with time-out. - ld a, $cb ; the comparison byte. - cp b ; compare to incremented value of b. - rl l ; rotate the carry bit into l. - jr nc, l8bits ; jump back to ld-8-bits - ld a, h ; fetch the running parity byte. - xor l ; include the new byte. - ld h, a ; and store back in parity register. - ld a, d ; check length of - or e ; expected bytes. - jr nz, ldloop ; back to ld-loop while there are more. - or h -bin2 jr nz, bin2 - ld bc, zxuno_port + $100 - ret ; return block $0100 - $ include scroll/define.asm ld sp, 0 ld de, $5e6d+filesize-1 - ld hl, fin-1 + ld hl, scroll-1 + call dzx7b + jp $7be4 ; ----------------------------------------------------------------------------- ; ZX7 Backwards by Einar Saukas, Antonio Villena @@ -189,12 +125,10 @@ offend rr e lddr exitdz pop hl jr nc, mainlo - jp $7be4 - -getbit ld a, (hl) - dec hl - adc a, a ret + incbin firmware.rom.zx7b +firmware incbin scroll/scroll.bin.zx7b -fin ;block $4000 - $ +scroll + ;block $4000 - $ diff --git a/firmware/firmware.asm b/firmware/firmware.asm index c05b3be..3ccebb7 100644 --- a/firmware/firmware.asm +++ b/firmware/firmware.asm @@ -1,6 +1,8 @@ include version.asm define LX16 $32 define recovery 0 + define recodire 0 + define zesarux 0 define vertical 0 output firmware_strings.rom macro wreg dir, dato @@ -174,7 +176,11 @@ keysc5 ld a, h rlc b jr c, keyscn in a, ($1f) + IF zesarux=0 or a + ELSE + xor a + ENDIF jr z, nokemp ld hl, kemp-1 sikemp inc hl @@ -237,6 +243,7 @@ keytab defb $00, $7a, $78, $63, $76 ; Caps z x c v defb $0d, $3d, $2b, $2d, $5e ; Enter = + - ^ defb $20, $00, $2e, $2c, $2a ; Space Symbol . , * kemp defb $1f, $1e, $1d, $1c, $0d ; Right Left Down Up Enter + defb $0c ; Break start ld bc, chrend-sdtab ldir @@ -406,6 +413,7 @@ star10 add hl, hl jr nz, star10 ld (alto fllen), hl ENDIF + IF recovery=0 star11 ld a, (layout) rr a ld hl, fines-1 @@ -422,9 +430,7 @@ star14 inc b outi bit 4, h ; compruebo si la direccion es D000 (final) jr z, star14 ; repito si no lo es -star15 - IF recovery=0 - ld d, 4 +star15 ld d, 4 pop af jr nz, star16 ld d, 16 @@ -2071,13 +2077,17 @@ upgr38 ld e, a ld a, (bitstr) upgra4 ld hl, $0102 ld d, $18 + IF recodire=0 call combol + ELSE + ld a, 2 + ENDIF ld (menuop+1), a inc a ld iyl, a + IF recovery=0 ld a, (codcnt) cp $0d - IF recovery=0 jp nz, main9 ENDIF ld hl, (menuop) @@ -2097,8 +2107,14 @@ tosd ld ix, cad75 ENDIF call imyesn ld ix, cad445 + IF recodire=0 call yesno ret nz + ELSE + ld c, 8 + call_prnstr + call_prnstr + ENDIF ld d, h ld a, %01001111 ; fondo azul tinta blanca call window diff --git a/firmware/strings.asm b/firmware/strings.asm index 938d78f..fe1835c 100644 --- a/firmware/strings.asm +++ b/firmware/strings.asm @@ -1,6 +1,6 @@ cad0 defb 'Core: ',0 cad1 defb 'http://zxuno.speccy.org', 0 - defb 'ZX-Uno BIOS v0.73', 0 + defb 'ZX-Uno BIOS v0.74', 0 defb 'Copyleft ', 127, ' 2018 ZX-Uno Team', 0 defb 'Processor: Z80 3.5MHz', 0 defb 'Memory: ' @@ -37,7 +37,7 @@ cad8 defb $10, ' ', $10, ' ', $10, 0 cad9 defb $14, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11 defb $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $18, $11 defb $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $15, 0 - defb ' BIOS v0.73 ', $7f, '2018 ZX-Uno Team', 0 + defb ' BIOS v0.74 ', $7f, '2018 ZX-Uno Team', 0 ELSE defb 'Press to Setup',0 defb ' Boot Menu', 0 @@ -68,7 +68,7 @@ cad8 defb $10, ' ', $10, 0 cad9 defb $14, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11 defb $11, $11, $11, $11 defb $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $11, $15, 0 - defb ' BIOS v0.73 ', $7f, '2018 ZX1 Team', 0 + defb ' BIOS v0.74 ', $7f, '2018 ZX1 Team', 0 defs $66 ENDIF cad10 defb 'Hardware tests', 0