From 099a9331bfd6123c776d99f6b268c5b781718a66 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 12 May 2021 18:01:44 -0700 Subject: [PATCH] Miscellaneous - Fixed Linux/MacOS build - Fixed error reporting in some disk drivers --- Doc/ChangeLog.txt | 2 + Doc/RomWBW Applications.pdf | Bin 142480 -> 142480 bytes Doc/RomWBW Architecture.pdf | Bin 438354 -> 440180 bytes Doc/RomWBW Disk Catalog.pdf | Bin 131009 -> 131009 bytes Doc/RomWBW Getting Started.pdf | Bin 177863 -> 177846 bytes ReadMe.md | 2 +- ReadMe.txt | 2 +- Source/Apps/Makefile | 2 +- Source/Apps/RTCds7.asm | 703 ++++++++++++++++++++++++++++++ Source/Apps/RTChb.asm | 218 +++++++++ Source/HBIOS/Config/ZETA2_std.asm | 2 +- Source/HBIOS/ide.asm | 1 + Source/HBIOS/ppide.asm | 1 + Source/HBIOS/ppp.asm | 1 + Source/HBIOS/prp.asm | 1 + Source/HBIOS/sd.asm | 1 + Source/Images/Common/FIND.COM | Bin 0 -> 10662 bytes Source/ver.inc | 2 +- Source/ver.lib | 2 +- 19 files changed, 934 insertions(+), 6 deletions(-) create mode 100644 Source/Apps/RTCds7.asm create mode 100644 Source/Apps/RTChb.asm create mode 100644 Source/Images/Common/FIND.COM diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index e5c11a9e..a2f6dab2 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -27,6 +27,8 @@ Version 3.1.1 - WBW: COPY.COM updated from v1.72 -> v1.73 throughout distribution - D?M: CP/NET for CP/M 2.2 and CP/M 3 (requires MT011) - D?M: SD driver fixes for MT011 +- J?C: Added FIND application from Jay Cotton +- PMS: Preliminary support for I2C-based DS1307 clock Version 3.1 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 2777598125927642fb0bade7eced9407fcc99b11..78024561128c332b01b3c612e67164d338c5e52b 100644 GIT binary patch delta 164 zcmbPmlVie7j)oS-EllxD`lg0PhUSJAhUU5k=IRCp>Y7~ozWFIGi6yBD8ZK5w21bSk z$V#^NF)=ODOmH=HG%<2^GIMovw6t_GwKQ}xG_f=^akOxCaWph=F|<>#A*du)!Oo7W axFoTtq@pM_jmyv&=n4xiRaIAiH!c8w8z{8^ delta 164 zcmbPmlVie7j)oS-EllxD`i6$4KxkxSu4`bSZeXCU$))d`pW>2OlB%HLVr67tWN3h_ zWP2YI(<03T3j<>(BMUcIa}#Gr6Jv816Gu~X6Jtv=b7vPb1(&L-tG^o;0A^b#Z2$lO diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 5a4c1402a2a1f30b760306718856e914426b5c49..32fd994e42da01c316b14241e2857420cbbf5d25 100644 GIT binary patch delta 43502 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 W-MDaZEBMoFveiBQ_>pIiZv8*7){IgB delta 42138 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 Z#G;alqSQ1lLnBjD6LT(ARabvEE&zY0DvJOB delta 162 zcmX^3pZ(x}_J%Et4_@jU8kz#3k+G?+frYw(fx0G_zHfetOJYf?f`*Hgk%5t+0kV?q z{I3{;L=)WH%#B^0T}%vIT}(_|%uG#;OjUA25O-$_+YzQieRj{+;DlSPZ YDyb++P2(~&GBq_Z=TcR5^>^a}09#Bd4FCWD diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 4bca51e30c1fcffa2049622a1c8055a5d986ae27..4c1b6f4ac9b93234a81e373e4f3ce200a87b98ca 100644 GIT binary patch delta 13522 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

cIpe)1IB8)-_zAKJJ1}zr z3h0eZBpW#oeniN8dk02vh`Rx?w4#6PPu^D2UKzn*Se2=0t zoTSk*<6_bPu1_{Wqs4BAMvF0cOMn4UT?1r?$sAT#aTt`D`~u;xQ5JYT4KBzW8km?= zP^zz4mSjZQGBF9Dhq07ZWd2b_1Q}GHl?80Vq8coO0u8zj#Y%vMp2fFGAre|PFCS5s z1cJ~Lf`2l9N~x#qmCr|>Y%pmg}FJjOOvBdDY8HzX9IDm{7lnT3;rr(CUm=$c4PI?&h zOfK~n`au?Bm@BYs24FBuLtn-+7ZAxZ7d@C>7!iKNwo#6lxunIg3dU#sGX@JRJ|Ux6 zrP-2FV%Q%-)-BjlF=`5#q$YHLebm&LG1@d)Y=vMT=0{dI4n=IVo$MwKDj`!wNoO)) zGW>E3ARXNp6ro7hhuC1w%y$k_f(9WHk+}&Kk5LH+xJ0uaZ7~gC7b(Wm#E~Gt^wiR3 zOb#6mBU$K#*oXwwgr%n=EpQ@&*b>bjHJ3#BpfU$ILuFEfpU9yx*I`x#mKH^SZ69Jw zlrzdryrB@2nFdQmX`*nkjV;#pprEjrNybQyQ8@`8vzwSEE204VBIf1m%TVK46M%t| zleXYA(;4>~I&kH(D{f7;rXO*_0^Z^m~}G6jrnVw3iCgCb}{5jCoaY7?Fz4 zivSL+DtMJN2r;~9!)aK}Q|Qi$GO}pKsL;()C!k4UHBW(g1a0E&p$k^SK_fZZD~#co zxzP1c%P7NPB}IXauyvT=@x%B!bwAoG3_)pzBbc}q04)?o6dF=;Xkmdf(i~8xMPLc` zhmgiGlqGAAl*x-NV#_xRE_4%gF_|WDq)f>e4`dGI=TJr^WXdYI>-GEz3QJ54U5h=0 zVI6Ck0K+~@7ok0r(U;SWQ7I_>Rp>~#sSVZ&VeCi`h(iOHg7*O0qg5s!^cJ$zL5t`I z$pXd+UBM>oSjV%(VvktR)j-Aw+AH83&3A=hAXdQi8pEOBn_y&#=9bGS5JMMeQM9gz zpQFoW;G=AV)-5PIj7ne~&l20DKnz_lprVZnIlGHYWc3KcS6UXJY%%hLb=-BfW0Flg zT~<+)jj})o*g#h9V~GZuoEq!6j~$I#0UH~v!%<*k{&*`KU@L$b$yq21*12FEV|U(& zk>6NjJ)Lq)Hg#97W6|yu8}nXG6*JC-jCKhakxTYqr5vXiD}dO*s?w|VKIC#Fn|>=) zV*)f_SV~I^`O2%_3}N9_zjX^b5)VsB+T)xyg#wghT%CGa>J&Jk3*^jS*WY(`DC_Le z9z$I^8T6FdGZWU)3gESfBJH+!N1o_-w_zqhZjmU(R(!+?DB&Q1{-4_iFVp#V3}7e< zQ%!E5Vy4u1LS>G@>o;?ZVuL(kf!qYG%V#JGPyW<1cq1U2Kv`1M(UeCsm@ex}pvy`r zbTPpqxdow3a}dhKfId)ym=(JIw_9J-&B--AHLp3@;i6%XE6Xkbu+Fcb(`3kVrPm?`5ym^ z0ZgXTf`JG7fR?F{p+IO;b_p4NEkHkrUV%^}6kJSF**bK%R0f7kF~!9&pDQEX*(N|P zwuvJgW>$=>*~U&W-vcTGd-55guSBA=;z5Jvlz_JY#Ez_G3nfE6%u4C7Ltt1$3oB%x zE%bXJx|Dtiyq9_VdiM93A2Tz4Y6E{l#aptHclLqR|u7X+b!DIxVcelA2OUIM?sC_JE_|3N6} z?{N^97<7L1>{4QLKQB9R{kwQ(D+xpllcY;?NfhHcBAf#Kzkx4LH2i1QW{q z@3Ao<3NP+QE`rx=;c_8+kAO0sJ(x1arA!7&NoD+JyqGHZhEab0hiNnII~h*`^Ezb3#>m+;yWbU^Swytc6D2X~~s03KKcgH{`Kfo+WE;^0lZ$61@Z4!`|1 zDE|ZDWvK%~&iZy6QzqsTa06O&yq}HGjIi;XU3BQQrr(9Oc(ZM6+jz|G-~l}j9NvtL zHDlv3Hr3+e+u_NweVf{?{@*1@wcE4_duRN>apNbA8#*iuA%g%3YtW#5_xP~?1Cjyl AVgLXD delta 13429 zcmai4d3;Uh)|MDT_{_72d5EERzk7ab45Df(^2N|fuX!j!LvXdV2{o&rdJO4pQ$f+v zqSEUUZM33>7)uSgZWYxMGc{Cw&pt^`&RHwJ-26?K%Ew zP_w1)lyq)wy}kBc`Jr_#)(NRya>x9QJ2n+N*RgZQYAq9bEw6g#*2v71*j_)bc)9!a ze^X(-~XUl(5(ZF7F~+Dot7O`xxXi+Q~K+J`phm9eRW^^1HFTnF3W5`a>bbVGpAlF z-TAZk$Mrb%Yo}7fchB{d`{Z94Ll$P7&X~L1Nq*XEPOpt?&wifLB<=9AvYEf``k`9( z#0SS(H%k9*>~BB!UN&@D>ar7QEi=xw+tzC8orJir-@Vyq{oC!2KM!49a`V%Ka+`ad zTi$&0*sHOlpQR5-Z&!BizR0It7Tr}#4?Sr<>((mh-tL}#ivH=ec>bXJx(*e;eY$

~R%XfIN@3bgPi1TPB>}Z!N%a7aD_hGGPZ?=9^ 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 diff --git a/ReadMe.md b/ReadMe.md index e7a8b863..87c3b432 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ ## Z80/Z180 System Software Version 3.1 Pre-release -Friday 15 January 2021 +Saturday 13 March 2021 Wayne Warthen diff --git a/ReadMe.txt b/ReadMe.txt index 12c59c23..76559f40 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -3,7 +3,7 @@ RomWBW Z80/Z180 System Software Version 3.1 Pre-release -Friday 15 January 2021 +Saturday 13 March 2021 Wayne Warthen wwarthen@gmail.com diff --git a/Source/Apps/Makefile b/Source/Apps/Makefile index aa349004..dd0ae956 100644 --- a/Source/Apps/Makefile +++ b/Source/Apps/Makefile @@ -1,6 +1,6 @@ OBJECTS = SysGen.com Survey.com \ SysCopy.com Assign.com Format.com Talk.com Mode.com RTC.com \ - Timer.com IntTest.com rtcds7.com rtcds7.com + Timer.com IntTest.com RTCds7.com RTChb.com OTHERS = *.hex *.com SUBDIRS = XM FDU FAT Tune DEST = ../../Binary/Apps diff --git a/Source/Apps/RTCds7.asm b/Source/Apps/RTCds7.asm new file mode 100644 index 00000000..a2ac01e5 --- /dev/null +++ b/Source/Apps/RTCds7.asm @@ -0,0 +1,703 @@ +;================================================================================================== +; PCF8584 I2C Clock Driver +;================================================================================================== +; +PCF_BASE .EQU 0F0H +PCF_ID .EQU 0AAH +CPU_CLK .EQU 12 + +REGS0 .EQU PCF_BASE +REGS1 .EQU REGS0+1 +PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE +; +;T4LC512D .EQU 10100000B ; DEVICE IDENTIFIER +;T4LC512A1 .EQU 00000000B ; DEVICE ADDRESS +;T4LC512A2 .EQU 00001110B ; DEVICE ADDRESS +;T4LC512A3 .EQU 00000010B ; DEVICE ADDRESS +;T4LC512W .EQU 00000000B ; DEVICE WRITE +;T4LC512R .EQU 00000001B ; DEVICE READ +; +;I2CDEV1W .EQU (T4LC512D+T4LC512A1+T4LC512W) +;I2CDEV1R .EQU (T4LC512D+T4LC512A1+T4LC512R) +; +;I2CDEV2W .EQU (T4LC512D+T4LC512A2+T4LC512W) +;I2CDEV2R .EQU (T4LC512D+T4LC512A2+T4LC512R) +; +;I2CDEV3W .EQU (T4LC512D+T4LC512A3+T4LC512W) +;I2CDEV3R .EQU (T4LC512D+T4LC512A3+T4LC512R) +; +; CONTROL REGISTER BITS +; +PCF_PIN .EQU 10000000B +PCF_ES0 .EQU 01000000B +PCF_ES1 .EQU 00100000B +PCF_ES2 .EQU 00010000B +PCF_EN1 .EQU 00001000B +PCF_STA .EQU 00000100B +PCF_STO .EQU 00000010B +PCF_ACK .EQU 00000001B +; +PCF_START_ .EQU (PCF_PIN | PCF_ES0 | PCF_STA | PCF_ACK) +PCF_STOP_ .EQU (PCF_PIN | PCF_ES0 | PCF_STO | PCF_ACK) +PCF_REPSTART_ .EQU ( PCF_ES0 | PCF_STA | PCF_ACK) +PCF_IDLE_ .EQU (PCF_PIN | PCF_ES0 | PCF_ACK) +; +; STATUS REGISTER BITS +; +;PCF_PIN .EQU 10000000B +PCF_INI .EQU 01000000B ; 1 if not initialized +PCF_STS .EQU 00100000B +PCF_BER .EQU 00010000B +PCF_AD0 .EQU 00001000B +PCF_LRB .EQU 00001000B +PCF_AAS .EQU 00000100B +PCF_LAB .EQU 00000010B +PCF_BB .EQU 00000001B +; +; CLOCK CHIP FREQUENCIES +; +PCF_CLK3 .EQU 000H +PCF_CLK443 .EQU 010H +PCF_CLK6 .EQU 014H +PCF_CLK8 .EQU 018H +PCF_CLK12 .EQU 01cH +; +; TRANSMISSION FREQUENCIES +; +PCF_TRNS90 .EQU 000H ; 90 kHz */ +PCF_TRNS45 .EQU 001H ; 45 kHz */ +PCF_TRNS11 .EQU 002H ; 11 kHz */ +PCF_TRNS15 .EQU 003H ; 1.5 kHz */ +; +; TIMEOUT AND DELAY VALUES (ARBITRARY) +; +PCF_PINTO .EQU 65000 +PCF_ACKTO .EQU 65000 +PCF_BBTO .EQU 65000 +PCF_LABDLY .EQU 65000 +; +; DATA PORT REGISTERS +; +#IF (CPU_CLK = 443) +PCF_CLK .EQU PCF_CLK443 +#ELSE + #IF (CPU_CLK = 8) +PCF_CLK .EQU PCF_CLK8 + #ELSE + #IF (CPU_CLK = 12) +PCF_CLK .EQU PCF_CLK12 + #ELSE ***ERROR + #ENDIF + #ENDIF +#ENDIF +; +DS7_OUT .EQU 10000000B ; SELECT SQUARE WAVE FUNCTION +DS7_SQWE .EQU 00010000B ; ENABLE SQUARE WAVE OUTPUT +DS7_RATE .EQU 00000000B ; SET 1HZ OUPUT +; +DS7_DS1307 .EQU 11010000B ; DEVICE IDENTIFIER +DS7_W .EQU 00000000B ; DEVICE WRITE +DS7_R .EQU 00000001B ; DEVICE READ +; +DS7_READ .EQU (DS7_DS1307 | DS7_R) ; READ +DS7_WRITE .EQU (DS7_DS1307 | DS7_W) ; WRITE +; +DS7_CTL .EQU (DS7_OUT | DS7_SQWE | DS7_RATE) +; + .ORG 100H +; +; + CALL DS7_RDC ; READ CLOCK DATA INTO BUFFER + CALL DS7_DISP ; DISPLAY TIME AND DATE FROM BUFFER + RET +; +;----------------------------------------------------------------------------- +; RTC READ +; +; 1. ISSUE SLAVE ADDRESS WITH START CONDITION AND WRITE STATUS +; 2. OUTPUT THE ADDRESS TO ACCESS. (00H = START OF DS1307 REGISTERS) +; 3. OUTPUT REPEAT START TO TRANSITION TO READ PROCESS +; 4. ISSUE SLAVE ADDRESS WITH READ STATUS +; 5. DO A DUMMY READ +; 6. READ 8 BYTES STARTING AT ADDRESS PREVIOUSLY SET +; 7. END READ WITH NON-ACKNOWLEDGE +; 8. ISSUE STOP AND RELEASE BUS +; +DS7_RDC:LD A,DS7_WRITE ; SET SLAVE ADDRESS + OUT (REGS0),A +; + CALL PCF_WAIT_FOR_BB + JP NZ,PCF_BBERR +; + CALL PCF_START ; GENERATE START CONDITION + CALL PCF_WAIT_FOR_PIN; AND ISSUE THE SLAVE ADDRESS + CALL NZ,PCF_PINERR +; + LD A,0 + OUT (REGS0),A ; PUT ADDRESS MSB ON BUS + CALL PCF_WAIT_FOR_PIN + CALL NZ,PCF_PINERR +; + CALL PCF_REPSTART ; REPEAT START +; + LD A,DS7_READ ; ISSUE CONTROL BYTE + READ + OUT (REGS0),A +; + CALL PCF_READI2C ; DUMMY READ +; + LD HL,DS7_BUF ; READ 8 BYTES INTO BUFFER + LD B,8 +DS7_RL1:CALL PCF_READI2C + LD (HL),A + INC HL + DJNZ DS7_RL1 +; +#IF (0) + LD A,8 + LD DE,DS7_BUF ; DISLAY DATA READ + CALL PRTHEXBUF ; + CALL NEWLINE +#ENDIF +; + LD A,PCF_ES0 ; END WITH NOT-ACKNOWLEDGE + OUT (REGS1),A ; AND RELEASE BUS + NOP + IN A,(REGS0) + NOP +DS7_WTPIN: + IN A,(REGS1) ; READ S1 REGISTER + BIT 7,A ; CHECK PIN STATUS + JP NZ,DS7_WTPIN + CALL PCF_STOP +; + IN A,(REGS0) + RET + +; +;----------------------------------------------------------------------------- +; DISPLAY CLOCK INFORMATION FROM DATA STORED IN BUFFER +; +DS7_DISP: + LD HL,DS7_CLKTBL +DS7_CLP:LD C,(HL) + INC HL + LD D,(HL) + CALL DS7_BCD + INC HL + LD A,(HL) + OR A + RET Z + CALL COUT + INC HL + JR DS7_CLP + RET +; +DS7_CLKTBL: + .DB 04H, 00111111B, '/' + .DB 05H, 00011111B, '/' + .DB 06H, 11111111B, ' ' + .DB 02H, 00011111B, ':' + .DB 01H, 01111111B, ':' + .DB 00H, 01111111B, 00H +; +DS7_BCD:PUSH HL + LD HL,DS7_BUF ; READ VALUE FROM + LD B,0 ; BUFFER, INDEXED BY A + ADD HL,BC + LD A,(HL) + AND D ; MASK OFF UNNEEDED + SRL A + SRL A + SRL A + SRL A + ADD A,30H + CALL COUT + LD A,(HL) + AND 00001111B + ADD A,30H + CALL COUT + POP HL + RET +; +DS7_BUF: .FILL 8,0 ; BUFFER FOR TIME, DATE AND CONTROL + +;----------------------------------------------------------------------------- +PCF_START: + LD A,PCF_START_ + OUT (REGS1),A + RET +; +;----------------------------------------------------------------------------- +PCF_REPSTART: + LD A,PCF_REPSTART_ + OUT (REGS1),A + RET +; +;----------------------------------------------------------------------------- +PCF_STOP: + LD A,PCF_STOP_ + OUT (REGS1),A + RET +; +;----------------------------------------------------------------------------- +;; +PCF_INIT: + LD A,PCF_PIN ; S1=80H: S0 SELECTED, SERIAL + OUT (REGS1),A ; INTERFACE OFF + NOP + IN A,(REGS1) ; CHECK TO SEE S1 NOW USED AS R/W + AND 07FH ; CTRL. PCF8584 DOES THAT WHEN ESO + JP NZ,PCF_INIERR ; IS ZERO +; + LD A,PCF_OWN ; LOAD OWN ADDRESS IN S0, + OUT (REGS0),A ; EFFECTIVE ADDRESS IS (OWN <<1) + NOP + IN A,(REGS0) ; CHECK IT IS REALLY WRITTEN + CP PCF_OWN + JP NZ,PCF_SETERR +; + LD A,+(PCF_PIN | PCF_ES1) ; S1=0A0H + OUT (REGS1),A ; NEXT BYTE IN S2 + NOP + IN A,(REGS1) + AND 07FH + CP PCF_ES1 + JP NZ,PCF_REGERR +; + LD A,PCF_CLK ; LOAD CLOCK REGISTER S2 + OUT (REGS0),A + NOP + IN A,(REGS0) ; CHECK IT'S REALLY WRITTEN, ONLY + AND 1FH ; THE LOWER 5 BITS MATTER + CP PCF_CLK + JP NZ,PCF_CLKERR +; + LD A,PCF_IDLE_ + OUT (REGS1),A + NOP + IN A,(REGS1) + CP +(PCF_PIN | PCF_BB) + JP NZ,PCF_IDLERR +; + RET +; +;----------------------------------------------------------------------------- +PCF_HANDLE_LAB: +; + LD A,PCF_PIN + OUT (REGS1),A + LD A,PCF_ES0 + OUT (REGS1),A +; + LD HL,PCF_LABDLY +PCF_LABLP: + LD A,H + OR L + DEC HL + JR NZ,PCF_LABLP +; + IN A,(REGS1) + RET +; +;----------------------------------------------------------------------------- +; +; RETURN A=00/Z IF SUCCESSFULL +; RETURN A=FF/NZ IF TIMEOUT +; RETURN A=01/NZ IF LOST ARBITRATION +; PCF_STATUS HOLDS LAST PCF STATUS +; +PCF_WAIT_FOR_PIN: + PUSH HL + LD HL,PCF_PINTO ; SET TIMEOUT VALUE + +PCF_WFP0: + IN A,(REGS1) ; GET BUS + LD (PCF_STATUS),A ; STATUS + LD B,A + + DEC HL ; HAVE WE + LD A,H ; TIMED OUT + OR L + JR Z,PCF_WFP1 ; YES WE HAVE, GO ACTION IT + + LD A,B ; + AND PCF_PIN ; IS TRANSMISSION COMPLETE? + JR NZ,PCF_WFP0 ; KEEP ASKING IF NOT OR + POP HL ; YES COMPLETE (PIN=0) RETURN WITH ZERO + RET +PCF_WFP1: + LD A,B ; DID WE LOSE ARBITRATION? + AND PCF_LAB ; IF A=0 THEN NO + CPL + JR NZ,PCF_WFP2 ; NO + CALL PCF_HANDLE_LAB ; YES GO HANDLE IT + LD (PCF_STATUS),A + XOR A ; RETURN NZ, A=01H + INC A +PCF_WFP2: + POP HL ; RET NZ, A=FF IF TIMEOUT + RET +; +PCF_STATUS .DB 00H + +;-------------------------------------------------------------------------------- +; +; RETURN NZ/FF IF TIMEOUT ERROR +; RETURN NZ/01 IF FAILED TO RECEIVE ACKNOWLEDGE +; RETURN Z/00 IF RECEIVED ACKNOWLEDGE +; +PCF_WAIT_FOR_ACK: + PUSH HL + LD HL,PCF_ACKTO +; +PCF_WFA0: + IN A,(REGS1) ; READ PIN + LD (PCF_STATUS),A ; STATUS + LD B,A +; + DEC HL ; SEE IF WE HAVE TIMED + LD A,H ; OUT WAITING FOR PIN + OR L ; EXIT IF + JR Z,PCF_WFA1 ; WE HAVE +; + LD A,B ; OTHERWISE KEEP LOOPING + AND PCF_PIN ; UNTIL WE GET PIN + JR NZ,PCF_WFA0 ; OR TIMEOUT +; + LD A,B ; WE GOT PIN SO NOW + AND PCF_LRB ; CHECK WE HAVE + LD A,1 + JR Z,PCF_WFA2 ; RECEIVED ACKNOWLEDGE + XOR A + JR PCF_WFA2 +PCF_WFA1: + CPL ; TIMOUT ERROR +PCF_WFA2: + POP HL ; EXIT WITH NZ = FF + RET +; +;-------------------------------------------------------------------------------- +; +; HL POINTS TO DATA +; DE = COUNT +; A = 0 LAST A=1 NOT LAST +; +; +;PCF_READBYTES: ; NOT FUNCTIONAL YET + + LD (PCF_LBF),A ; SAVE LAST BYTE FLAG +; + INC DE ; INCREMENT NUMBER OF BYTES TO READ BY ONE -- DUMMY READ BYTE + LD BC,0 ; SET BYTE COUNTER +; +PCF_RBL:PUSH BC + CALL PCF_WAIT_FOR_PIN ; DO WE HAVE THE BUS? + POP BC + JR Z,PCF_RB1 ; YES + CP 01H + JR Z,PCF_RB3 ; NO - LOST ARBITRATION + JR PCF_RB2 ; NO - TIMEOUT +; +PCF_RB1: + LD A,(PCF_STATUS) + AND PCF_LRB + + + ; IS THIS THE SECOND TO LAST BYTE TO GO? + + PUSH DE ; SAVE COUNT + DEC DE ; COUNT (DE) = NUMBER OF BYTES TO READ LESS 1 + EX DE,HL ; SAVE POINTER, PUT COUNT IN DE + XOR A ; CLEAR CARRY FLAG + SBC HL,BC ; DOES BYTE COUNTER = HL (NUMBER OF BYTES TO READ LESS 1) + EX DE,HL ; RESTORE POINTER + POP DE ; RESTORE COUNT + + ; Z = YES IT IS + ; NZ = NO IT ISN'T + JR NZ,PCF_RB4 +; +PCF_RB4:LD A,B ; IF FIRST READ DO A DUMMY + OR C ; READ OTHERWISE READ AND SAVE + JR NZ,PCF_RB5 + + IN A,(REGS0) ; DUMMY READ + JR PCF_RB6 + +PCF_RB5:IN A,(REGS0) ; READ AND SAVE + LD (HL),A +; +PCF_RB6: ; HAVE WE DONE ALL? + + PUSH DE ; SAVE COUNT + EX DE,HL ; SAVE POINTER, PUT COUNT IN DE + XOR A ; CLEAR CARRY FLAG + SBC HL,BC ; DOES BYTE COUNTER = HL (NUMBER OF BYTES TO READ) + EX DE,HL ; RESTORE POINTER + POP DE ; RESTORE COUNT +; + INC HL ; BUFFER POINTER + INC BC ; COUNT +; + JR NZ,PCF_RBL ; REPEAT UNTIL COUNTS MATCH + RET +; +PCF_RB2: ; TIMEOUT + CALL PCF_STOP + CALL PCF_TOERR + RET +; +PCF_RB3: ; LOST ARBITRATION + CALL PCF_ARBERR + RET +; +PCF_LBF: + .DB 0 ; LAST BYTE FLAG +; +;----------------------------------------------------------------------------- +; READ ONE BYTE FROM I2C +; RETURNS DATA IN A +; Z FLAG SET IS ACKNOWLEDGE RECEIVED (CORRECT OPERATION) +; +PCF_READI2C: + IN A,(REGS1) ; READ S1 REGISTER + BIT 7,A ; CHECK PIN STATUS + JP NZ,PCF_READI2C + BIT 3,A ; CHECK LRB=0 + JP NZ,PCF_RDERR + IN A,(REGS0) ; GET DATA + RET +;----------------------------------------------------------------------------- +; +; POLL THE BUS BUSY BIT TO DETERMINE IF BUS IS FREE. +; RETURN WITH A=00H/Z STATUS IF BUS IS FREE +; RETURN WITH A=FFH/NZ STATUS IF BUS +; +; AFTER RESET THE BUS BUSY BIT WILL BE SET TO 1 I.E. NOT BUSY +; +PCF_WAIT_FOR_BB: + LD HL,PCF_BBTO +PCF_WFBB0: + IN A,(REGS1) + AND PCF_BB + RET Z ; BUS IS FREE RETURN ZERO + DEC HL + LD A,H + OR L + JR NZ,PCF_WFBB0 ; REPEAT IF NOT TIMED OUT + CPL ; RET NZ IF TIMEOUT + RET +; +;----------------------------------------------------------------------------- +; DISPLAY ERROR MESSAGES +; +PCF_RDERR: + PUSH HL + LD HL,PCF_RDFAIL + JR PCF_PRTERR +; +PCF_INIERR: + PUSH HL + LD HL,PCF_NOPCF + JR PCF_PRTERR +; +PCF_SETERR: + PUSH HL + LD HL,PCF_WRTFAIL + JR PCF_PRTERR +; +PCF_REGERR: + PUSH HL + LD HL,PCF_REGFAIL + JR PCF_PRTERR +; +PCF_CLKERR: + PUSH HL + LD HL,PCF_CLKFAIL + JR PCF_PRTERR +; +PCF_IDLERR: + PUSH HL + LD HL,PCF_IDLFAIL + JR PCF_PRTERR +; +PCF_ACKERR: + PUSH HL + LD HL,PCF_ACKFAIL + JR PCF_PRTERR +; +PCF_RDBERR: + PUSH HL + LD HL,PCF_RDBFAIL + JR PCF_PRTERR +; +PCF_TOERR: + PUSH HL + LD HL,PCF_TOFAIL + JR PCF_PRTERR +; +PCF_ARBERR: + PUSH HL + LD HL,PCF_ARBFAIL + JR PCF_PRTERR +; +PCF_PINERR: + PUSH HL + LD HL,PCF_PINFAIL + JR PCF_PRTERR +; +PCF_BBERR: + PUSH HL + LD HL,PCF_BBFAIL + JR PCF_PRTERR +; +PCF_PRTERR: + CALL PRTSTR + CALL NEWLINE + POP HL + RET +; +PCF_NOPCF .DB "NO DEVICE FOUND$" +PCF_WRTFAIL .DB "SETTING DEVICE ID FAILED$" +PCF_REGFAIL .DB "CLOCK REGISTER SELECT ERROR$" +PCF_CLKFAIL .DB "CLOCK SET FAIL$" +PCF_IDLFAIL .DB "BUS IDLE FAILED$" +PCF_ACKFAIL .DB "FAILED TO RECEIVE ACKNOWLEDGE$" +PCF_RDFAIL .DB "READ FAILED$" +PCF_RDBFAIL .DB "READBYTES FAILED$" +PCF_TOFAIL .DB "TIMEOUT ERROR$" +PCF_ARBFAIL .DB "LOST ARBITRATION$" +PCF_PINFAIL .DB "PIN FAIL$" +PCF_BBFAIL .DB "BUS BUSY$" +; +;----------------------------------------------------------------------------- +; +BDOS .EQU 5 ;ENTRY BDOS +BS .EQU 8 ;BACKSPACE +TAB .EQU 9 ;TABULATOR +LF .EQU 0AH ;LINE-FEED +CR .EQU 0DH ;CARRIAGE-RETURN +; +; OUTPUT TEXT AT HL +; +PRTSTR: LD A,(HL) + OR A + RET Z + CALL PRINP + INC HL + JR PRTSTR +; +;Output WORD +;*********** +; +;PARAMETER: Entry WORD IN HL +;********* +; +OUTW: LD A,H + CALL OUTB + LD A,L + CALL OUTB + RET +; +;Output BYTE +;*********** +; +;PARAMETER: Entry BYTE IN A +;********* +; +OUTB: PUSH AF + RRCA + RRCA + RRCA + RRCA + AND 0FH + CALL HBTHE ;Change Half-BYTE + POP AF + AND 0FH + CALL HBTHE + RET +; +;Output HALF-BYTE +;**************** +; +;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3) +;********* +; +HBTHE: CP 0AH + JR C,HBTHE1 + ADD A,7 ;Character to Letter +HBTHE1: ADD A,30H + LD E,A + CALL PCHAR + RET +; +; +;Output on Screen +;**************** +; +PRBS: LD E,BS + CALL PCHAR + RET +; +;Output CR+LF on Screen +;********************** +; +NEWLINE: +CRLF: LD E,CR + CALL PCHAR + LD E,LF + CALL PCHAR + RET +; +;Output ASCII-Character +;********************** +; +COUT: +PRINP: PUSH AF + PUSH DE + LD E,A + CALL PCHAR + POP DE + POP AF + RET +; +;CALL BDOS with Register Save +;**************************** +; +INCHA: LD C,1 ;INPUT CHARACTER TO A + JR BDO +PCHAR: LD C,2 ;PRINT CHARACTER IN E + JR BDO +PSTRIN: LD C,9 ;PRINT STRING + JR BDO +INBUFF: LD C,10 ;READ CONSOLE-BUFFER + JR BDO +CSTS: LD C,11 ;CONSOLE-STATUS + JR BDO +OPEN: LD C,15 ;OPEN FILE + JR BDO +CLOSE: LD C,16 ;CLOSE FILE + JR BDO +DELETE: LD C,19 ;DELETE FILE + JR BDO +READS: LD C,20 ;READ SEEK + JR BDO +WRITES: LD C,21 ;WRITE SEEK + JR BDO +MAKE: LD C,22 ;MAKE FILE + JR BDO +SETDMA: LD C,26 ;SET DMA-ADDRESS +BDO: PUSH HL + PUSH DE + PUSH BC + PUSH IX + PUSH IY + CALL BDOS + POP IY + POP IX + POP BC + POP DE + POP HL + RET +; + .END diff --git a/Source/Apps/RTChb.asm b/Source/Apps/RTChb.asm new file mode 100644 index 00000000..cf4669bf --- /dev/null +++ b/Source/Apps/RTChb.asm @@ -0,0 +1,218 @@ +;================================================================================================== +; GENERIC HBIOS DATE AND TIME +;================================================================================================== +; +; HBIOS FORMAT = YYMMDDHHMMSS +; + .ORG 100H +; +; + LD B,$20 ; READ CLOCK DATA INTO BUFFER + LD HL,HBC_BUF ; DISPLAY TIME AND DATE FROM BUFFER + RST 08 +; +#IF (0) + LD A,6 + LD DE,HBC_BUF ; DISLAY DATA READ +; CALL PRTHEXBUF + CALL NEWLINE +#ENDIF +; + CALL HBC_DISP + RET + +HBC_BUF .FILL 6,0 +; +;----------------------------------------------------------------------------- +; DISPLAY CLOCK INFORMATION FROM DATA STORED IN BUFFER +; +HBC_DISP: + LD HL,HBC_CLKTBL +HBC_CLP:LD C,(HL) + INC HL + LD D,(HL) + CALL HBC_BCD + INC HL + LD A,(HL) + OR A + RET Z + CALL COUT + INC HL + JR HBC_CLP + RET +; +HBC_CLKTBL: + .DB 02H, 00111111B, '/' + .DB 01H, 00011111B, '/' + .DB 00H, 11111111B, ' ' + .DB 03H, 00011111B, ':' + .DB 04H, 01111111B, ':' + .DB 05H, 01111111B, 00H +; +HBC_BCD:PUSH HL + LD HL,HBC_BUF ; READ VALUE FROM + LD B,0 ; BUFFER, INDEXED BY A + ADD HL,BC + LD A,(HL) + AND D ; MASK OFF UNNEEDED + SRL A + SRL A + SRL A + SRL A + ADD A,30H + CALL COUT + LD A,(HL) + AND 00001111B + ADD A,30H + CALL COUT + POP HL + RET +; +;----------------------------------------------------------------------------- +; DISPLAY ERROR + +HBC_ERR: + PUSH HL + LD HL,HBC_FAIL + JR HBC_PRTERR +; +HBC_PRTERR: + CALL PRTSTR + CALL NEWLINE + POP HL + RET +; +HBC_FAIL .DB "ERROR$" +; +;----------------------------------------------------------------------------- +; GENERIC CP/M ROUTINES +; +BDOS .EQU 5 ;ENTRY BDOS +BS .EQU 8 ;BACKSPACE +TAB .EQU 9 ;TABULATOR +LF .EQU 0AH ;LINE-FEED +CR .EQU 0DH ;CARRIAGE-RETURN +; +; OUTPUT TEXT AT HL +; +PRTSTR: LD A,(HL) + OR A + RET Z + CALL PRINP + INC HL + JR PRTSTR +; +;Output WORD +;*********** +; +;PARAMETER: Entry WORD IN HL +;********* +; +OUTW: LD A,H + CALL OUTB + LD A,L + CALL OUTB + RET +; +;Output BYTE +;*********** +; +;PARAMETER: Entry BYTE IN A +;********* +; +OUTB: PUSH AF + RRCA + RRCA + RRCA + RRCA + AND 0FH + CALL HBTHE ;Change Half-BYTE + POP AF + AND 0FH + CALL HBTHE + RET +; +;Output HALF-BYTE +;**************** +; +;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3) +;********* +; +HBTHE: CP 0AH + JR C,HBTHE1 + ADD A,7 ;Character to Letter +HBTHE1: ADD A,30H + LD E,A + CALL PCHAR + RET +; +; +;Output on Screen +;**************** +; +PRBS: LD E,BS + CALL PCHAR + RET +; +;Output CR+LF on Screen +;********************** +; +NEWLINE: +CRLF: LD E,CR + CALL PCHAR + LD E,LF + CALL PCHAR + RET +; +;Output ASCII-Character +;********************** +; +COUT: +PRINP: PUSH AF + PUSH DE + LD E,A + CALL PCHAR + POP DE + POP AF + RET +; +;CALL BDOS with Register Save +;**************************** +; +INCHA: LD C,1 ;INPUT CHARACTER TO A + JR BDO +PCHAR: LD C,2 ;PRINT CHARACTER IN E + JR BDO +PSTRIN: LD C,9 ;PRINT STRING + JR BDO +INBUFF: LD C,10 ;READ CONSOLE-BUFFER + JR BDO +CSTS: LD C,11 ;CONSOLE-STATUS + JR BDO +OPEN: LD C,15 ;OPEN FILE + JR BDO +CLOSE: LD C,16 ;CLOSE FILE + JR BDO +DELETE: LD C,19 ;DELETE FILE + JR BDO +READS: LD C,20 ;READ SEEK + JR BDO +WRITES: LD C,21 ;WRITE SEEK + JR BDO +MAKE: LD C,22 ;MAKE FILE + JR BDO +SETDMA: LD C,26 ;SET DMA-ADDRESS +BDO: PUSH HL + PUSH DE + PUSH BC + PUSH IX + PUSH IY + CALL BDOS + POP IY + POP IX + POP BC + POP DE + POP HL + RET +; + .END diff --git a/Source/HBIOS/Config/ZETA2_std.asm b/Source/HBIOS/Config/ZETA2_std.asm index 26b9a1da..9fd7c993 100644 --- a/Source/HBIOS/Config/ZETA2_std.asm +++ b/Source/HBIOS/Config/ZETA2_std.asm @@ -26,7 +26,7 @@ ; #include "cfg_zeta2.asm" ; -UARTCFG .SET UARTCFG | SER_RTS +;UARTCFG .SET UARTCFG | SER_RTS ; CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 8613e8a3..49292220 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -1453,6 +1453,7 @@ IDE_PRTSTAT: PUSH AF PUSH DE PUSH HL + LD A,(IY+IDE_STAT) OR A LD DE,IDE_STR_STOK JR Z,IDE_PRTSTAT1 diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index e87a3a64..b62e08e9 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -1485,6 +1485,7 @@ PPIDE_PRTSTAT: PUSH AF PUSH DE PUSH HL + LD A,(IY+PPIDE_STAT) OR A LD DE,PPIDE_STR_STOK JR Z,PPIDE_PRTSTAT1 diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index ff395002..5a4032fc 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -1024,6 +1024,7 @@ PPPSD_PRTSTAT: PUSH AF PUSH DE PUSH HL + LD A,(IY+PPPSD_STAT) OR A LD DE,PPPSD_STR_STOK JR Z,PPPSD_PRTSTAT1 diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index cea20545..e6f3c968 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -949,6 +949,7 @@ PRPSD_PRTSTAT: PUSH AF PUSH DE PUSH HL + LD A,(IY+PRPSD_STAT) OR A LD DE,PRPSD_STR_STOK JR Z,PRPSD_PRTSTAT1 diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 7b76ef33..8a082a07 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -2005,6 +2005,7 @@ SD_PRTSTAT: PUSH AF PUSH DE PUSH HL + LD A,(IY+SD_STAT) OR A LD DE,SD_STR_STOK JR Z,SD_PRTSTAT1 diff --git a/Source/Images/Common/FIND.COM b/Source/Images/Common/FIND.COM new file mode 100644 index 0000000000000000000000000000000000000000..2ed5c52be9bf878283c8502d04525f4cc37f6356 GIT binary patch literal 10662 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 z