From 97c36c0efc92c08044be863a5e606f3983bc29c3 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 23 Nov 2016 19:31:57 -0800 Subject: [PATCH] BPBIOS Related Fixes --- Doc/CPM 22 Manual.pdf | Bin 443532 -> 443532 bytes Doc/RomWBW System Guide.pdf | Bin 151331 -> 151336 bytes Doc/RomWBW User Guide.pdf | Bin 288117 -> 288128 bytes Doc/ZCPR Manual.pdf | Bin 47142 -> 47142 bytes Source/BPBIOS/bpbio-ww.z80 | 9 +- Source/BPBIOS/cboot-ww.z80 | 11 +-- Source/BPBIOS/def-ww-z33n.lib | 3 +- Source/BPBIOS/def-ww-z33nbnk.lib | 3 +- Source/BPBIOS/def-ww-z33t.lib | 3 +- Source/BPBIOS/def-ww-z33tbnk.lib | 3 +- Source/BPBIOS/def-ww-z34n.lib | 3 +- Source/BPBIOS/def-ww-z34nbnk.lib | 3 +- Source/BPBIOS/def-ww-z34t.lib | 3 +- Source/BPBIOS/def-ww-z34tbnk.lib | 3 +- Source/BPBIOS/def-ww-z41nbnk.lib | 3 +- Source/BPBIOS/def-ww-z41tbnk.lib | 3 +- Source/BPBIOS/def-ww.lib | 3 +- Source/BPBIOS/dpbhd-ww.lib | 42 ++++----- Source/BPBIOS/hbios.z80 | 145 ++++++++++------------------- Source/BPBIOS/ibmv-ww.z80 | 15 +-- Source/BPBIOS/icfg-ww.z80 | 47 +++++----- Source/BPBIOS/romwbw-mk4.lib | 20 ++-- Source/BPBIOS/romwbw-sim.lib | 20 ++-- Source/BPBIOS/romwbw.lib | 24 ++--- Source/BPBIOS/util.z80 | 7 -- Source/Doc/CPM 22 Manual/Build.cmd | 2 +- Source/HBIOS/dsrtc.asm | 16 +--- Source/HBIOS/hbios.asm | 15 ++- Source/HBIOS/hbios.inc | 2 +- Source/HBIOS/md.asm | 4 +- Source/HBIOS/simrtc.asm | 8 +- Tools/cpm/bin/TEX21A.COM | Bin 10760 -> 10632 bytes 32 files changed, 172 insertions(+), 248 deletions(-) diff --git a/Doc/CPM 22 Manual.pdf b/Doc/CPM 22 Manual.pdf index fac5cc2f8f63a13dac5cc3fbf26e7be1683ebc59..b694e34bd769bb665b61353126549646f72ee923 100644 GIT binary patch delta 148 zcmeC_l8HGDK3d6sR|k{ zRz?PfW`@X0w%b*(z4LZ8F*kIxQ?MbV KWP1J)Hdz1{p(S7d delta 148 zcmeC_lZ=G=3> z?>v9!obL{ApZ?SB)4zXJTi)9Dz=9uq^F76>lL!AgdhIV4fA(AN>bq#;Cwkxf&C09i zZM*Nx$f@V|4~{(ikD<%fe(~9JCk{OGzC}Z0&+Od%&ZD|-cwukf&+mC_`sydfW(@B> z|Hi#1-d_30(O=y3oV#mx-gHA{#g;$Kop!qSiSz%qy0ZJjTi1N~?AYG7dmcY@?xOp8 zN7j6N&f?i$dg;NLZ(P%J(~HIa&as7;j$ZQ0*`exHdDdP3y#3#wul|1N==&e*f8qK$ z^RL~o?{~lb)rL)njt};9Jd}<+cIJ(jFTdig_2KUCJ+yDE{SPFF!jmWUlhY2~);0Tz z*`Im(?w+B!+czIPee0`RU)Xu)k(ZC{8UEUzpWL{A(~4Jq{90Grg{xlO_n~Qj+_+$962*`}fzEFFO3+bvLg#^3;K@ zd)|G=uGgyTVq3@N&dQd~O52{!N@bgxp^e3FaAC1Z)#ps5vrIW^DnDG4yH)L{`^N6} z@qd&GNlThnDG*J2Pc&;C(Slah!?rT7@QOe5K9&Wvjll~((2}vlm$Q+yqys7Hv{yC0 zqSeZ*lsHhSl-xLDE1!>6CB4I zDfrS9e7RsotsPyWE$pwUHJKA&D_JtGwDwteL1`WNVx8*u7A*%F#RnSA2O7%<8pnp1 zzg3Wp3%@^L&bX3SK6SPEl27#!5#K zWEC1?tc;BDc_O)6qGbYVSVRyp)v{Vai}DVut()MRGZ`(bogzjPV)e>i=xOOArxe}g z6xn0FwZ!Lbrt?Aw#22EO;A_n)ZxaQ`dn#(}16`thauf@X3KovkLDwBr_s@7%1?#2O zs4PMRWLlOH)WKwmR?L|!PKxfZ*_wicvrWg9cNJd($qm=-!bOgkdLIVHmz(t^=Aur%S0&|_vGD-*HyyU2j;aWB> zd1s2UFj|$B)@cMJO6yR~)Kd+xlJW>7=`CZFYIwS6G;R>RjFT~%tOG5|kQf)rSq)e; zz^mA1fx zNqmU~`je44QFAg0c_NiYk;=XSs4NdOHF&V-i!#ToG89$}YtoTO9ZQg5O-xd0YdnL# z_73(#gO=`KP0*yZgNBk1Hgl07TMkW*stFUhH9>qyaKW!QdD; zy%)Iv|Jx9#zaxzm9f-Uni$e;eUWQDG1fd{H^#LyxDBMCGH*kA$X&d&m9X z91+k&Y2t+wXy%A2(l`L8Qet9|pq&ym(lS;S6I*RWgOT+fG2#;~Dp^k2Vf>XC5F-X< z>8(frr(J={k&Po_c5Nm|JwHH`<%EkdBhV$ho<+3wGIOuuH|1suvDmBa&k^*pc_7MW&4?V(u4yhpd&?tC)b6^1P(# zGv=q80f(@mjuDe4GyzTe9kSY1XD+LBv|%B|pF%b`aPR_&9x4k6>RKbT9kNJxlJ(TzV)EtQh)jks1`!etnu9^_5s>whZJ|;1 z39Ad8M|licm#SBO3PGSIf~?a5V8G7LCg77HhI47(fUIFS#*5d)9g{(TaF)tISW6UB zF=M=!Hf91C$nqm&#O_lnh#H)LD3=Aa$jphJu};y&*s;pAnk>BqMvP<>=xlYtL`Uy= zF-PulcuEjqQc3ZH4z_$6P*B;8kW7x#h&pwzgpw?|3*N$dtEKys#>-RL3o02+PiU#O z7nbdA^F9`E8774>G6y+M*9u$~A0}ssqG&57l`VmS z-Z$LZ?2rjPNro63Kr@e;<205|dYnjs-(peV1oJ842~&D2V&o)R>m)Ni$b1f)HC~Y< zBi1tV0vIVI37dhGMKx91E(f$o?A1Wyrs0j@Hf2L^fjE^~RK{blv%? zCD+QYtS2TC`SOD|a*x?e@L@)mX{R+RO(=s^JG;^yHGDUi2qh!dNA^s@$R#euXeDP> z;FOnn3>slRXer4}U1K+v(>G}NN=IDmOru4%G=Ae{9z!=jyiyD}C4F`=ex3KYGkS?$-m$Y98vh weRv0mpA1W5Uef)s|I4znd&!dan{QdQ{+12v*Q{;F7aKae_IdLLmM?4nABF4&AOHXW delta 7458 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 delta 134 zcmZ4Xfoa(XrVaZx=o=Uq8=9D!nV9Jsn5!EYsB3cR`{t*(B$lKqXt-Dz85o)wA}iVa zcEc?;XCq@nb5|1sS7$>LCktZ>GXrxAGbcx5OA~VgS3@Ufb2|kaLP{oc?T`Tg0C*!x diff --git a/Source/BPBIOS/bpbio-ww.z80 b/Source/BPBIOS/bpbio-ww.z80 index 1394f585..666b2ad2 100644 --- a/Source/BPBIOS/bpbio-ww.z80 +++ b/Source/BPBIOS/bpbio-ww.z80 @@ -501,12 +501,11 @@ DRVTBL: LD HL,DPHTBL ; Point to DPH table IF IDE INCLUDE HARDIDE.Z80 ENDIF - IF HDSK - IF HBIOS - INCLUDE HARDHB.Z80 - ELSE + IF SIMHDSK INCLUDE HARDSIM.Z80 - ENDIF + ENDIF + IF HBDSK + INCLUDE HARDHB.Z80 ENDIF PAGE ENDIF diff --git a/Source/BPBIOS/cboot-ww.z80 b/Source/BPBIOS/cboot-ww.z80 index 9f9b5e98..17bd0110 100644 --- a/Source/BPBIOS/cboot-ww.z80 +++ b/Source/BPBIOS/cboot-ww.z80 @@ -370,7 +370,7 @@ BLKMV: POP BC ; And number of bytes to move ; Allocate disk buffer in HBIOS bank and ; save it for use later in disk access. - LD B,0F4H ; BIOS FUNC: ALLOCATE HEAP MEMORY + LD B,0F6H ; BIOS FUNC: ALLOCATE HEAP MEMORY LD HL,512 ; 1 SECTOR, 512 BYTES CALL HBX_INVOKE ; DO IT CALL NZ,PANIC ; HANDLE ERROR @@ -454,12 +454,11 @@ MEMOK: IF IDE DEFB CR,LF,' GIDE Hard Disk Driver' ENDIF - IF HDSK - IF HBIOS - DEFB CR,LF,' HBIOS Hard Disk Driver' - ELSE + IF SIMHDSK DEFB CR,LF,' SIMH Hard Disk Driver' - ENDIF + ENDIF + IF HBDSK + DEFB CR,LF,' HBIOS Hard Disk Driver' ENDIF IF HDDMA DEFB ' (DMA-driven IO)' diff --git a/Source/BPBIOS/def-ww-z33n.lib b/Source/BPBIOS/def-ww-z33n.lib index a81c1ad6..3b3faf84 100644 --- a/Source/BPBIOS/def-ww-z33n.lib +++ b/Source/BPBIOS/def-ww-z33n.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z33nbnk.lib b/Source/BPBIOS/def-ww-z33nbnk.lib index 0f37d33b..c8d940da 100644 --- a/Source/BPBIOS/def-ww-z33nbnk.lib +++ b/Source/BPBIOS/def-ww-z33nbnk.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z33t.lib b/Source/BPBIOS/def-ww-z33t.lib index 4a09616a..2c296319 100644 --- a/Source/BPBIOS/def-ww-z33t.lib +++ b/Source/BPBIOS/def-ww-z33t.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z33tbnk.lib b/Source/BPBIOS/def-ww-z33tbnk.lib index fffbe7ac..ffca7b09 100644 --- a/Source/BPBIOS/def-ww-z33tbnk.lib +++ b/Source/BPBIOS/def-ww-z33tbnk.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z34n.lib b/Source/BPBIOS/def-ww-z34n.lib index 865301ea..b6c40f7f 100644 --- a/Source/BPBIOS/def-ww-z34n.lib +++ b/Source/BPBIOS/def-ww-z34n.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z34nbnk.lib b/Source/BPBIOS/def-ww-z34nbnk.lib index f64eb30e..c5910ba4 100644 --- a/Source/BPBIOS/def-ww-z34nbnk.lib +++ b/Source/BPBIOS/def-ww-z34nbnk.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z34t.lib b/Source/BPBIOS/def-ww-z34t.lib index cfb06fad..4b97cca2 100644 --- a/Source/BPBIOS/def-ww-z34t.lib +++ b/Source/BPBIOS/def-ww-z34t.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z34tbnk.lib b/Source/BPBIOS/def-ww-z34tbnk.lib index dbb99554..4b659c3a 100644 --- a/Source/BPBIOS/def-ww-z34tbnk.lib +++ b/Source/BPBIOS/def-ww-z34tbnk.lib @@ -94,7 +94,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z41nbnk.lib b/Source/BPBIOS/def-ww-z41nbnk.lib index 1e2b4570..0eef1948 100644 --- a/Source/BPBIOS/def-ww-z41nbnk.lib +++ b/Source/BPBIOS/def-ww-z41nbnk.lib @@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww-z41tbnk.lib b/Source/BPBIOS/def-ww-z41tbnk.lib index bb97b618..ce31179b 100644 --- a/Source/BPBIOS/def-ww-z41tbnk.lib +++ b/Source/BPBIOS/def-ww-z41tbnk.lib @@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/def-ww.lib b/Source/BPBIOS/def-ww.lib index 1e2b4570..0eef1948 100644 --- a/Source/BPBIOS/def-ww.lib +++ b/Source/BPBIOS/def-ww.lib @@ -93,7 +93,8 @@ HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only ; (Pick 1 of 3 options below) SCSI EQU NO ; YES = Use SCSI Driver IDE EQU NO ; YES = Use IDE Driver -HDSK EQU YES ; YES = Use SIMH HDSK Driver +SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver +HBDSK EQU YES ; YES = Use HBIOS Disk Driver HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? ; (DMA not implemented for GIDE) UNIT_0 EQU YES ; Hard Disk Physical Unit 1 diff --git a/Source/BPBIOS/dpbhd-ww.lib b/Source/BPBIOS/dpbhd-ww.lib index 3e22c38e..3d3900cc 100644 --- a/Source/BPBIOS/dpbhd-ww.lib +++ b/Source/BPBIOS/dpbhd-ww.lib @@ -33,10 +33,10 @@ ; NOTE: No Skew Table is needed since Hard Disk Format is locked ;..... -; Partition A. SIMH HDSK0, Slice 0 +; Partition A. HBIOS Disk 0, Slice 0 IF DRV_E - DEFB 'HDSK0:0 ','A'+80H ; Id - 10 bytes + DEFB 'HBDSK0:0 ','A'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor (== Only the +/- sign used) @@ -60,10 +60,10 @@ DPB50: DEFW 64 ; Sctrs/Trk ENDIF ;..... -; Partition B. SIMH HDSK0, Slice 1 +; Partition B. HBIOS Disk 0, Slice 1 IF DRV_F - DEFB 'HDSK0:1 ','B'+80H ; Id - 10 bytes + DEFB 'HBDSK0:1 ','B'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor @@ -87,10 +87,10 @@ DPB51: DEFW 64 ; Scts/Trk ENDIF ;..... -; Partition C. SIMH HDSK0, Slice 2 +; Partition C. HBIOS Disk 0, Slice 2 IF DRV_G - DEFB 'HDSK0:2 ','C'+80H ; Id - 10 bytes + DEFB 'HBDSK0:2 ','C'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor @@ -114,10 +114,10 @@ DPB52: DEFW 64 ; Scts/Trk ENDIF ;..... -; Partition D. SIMH HDSK0, Slice 3 +; Partition D. HBIOS Disk 0, Slice 3 IF DRV_H - DEFB 'HDSK0:3 ','D'+80H ; Id - 10 bytes + DEFB 'HBDSK0:3 ','D'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor @@ -141,10 +141,10 @@ DPB53: DEFW 64 ; Scts/Trk ENDIF ;..... -; Partition A. SIMH HDSK1, Slice 0 +; Partition A. HBIOS Disk 1, Slice 0 - IF DRV_F - DEFB 'HDSK1:0 ','A'+80H ; Id - 10 bytes + IF DRV_I + DEFB 'HBDSK1:0 ','E'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor (== Only the +/- sign used) @@ -168,10 +168,10 @@ DPB54: DEFW 64 ; Sctrs/Trk ENDIF ;..... -; Partition B. SIMH HDSK1, Slice 1 +; Partition B. HBIOS Disk 1, Slice 1 - IF DRV_G - DEFB 'HDSK1:1 ','B'+80H ; Id - 10 bytes + IF DRV_J + DEFB 'HBDSK1:1 ','F'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor @@ -195,10 +195,10 @@ DPB55: DEFW 64 ; Scts/Trk ENDIF ;..... -; Partition C. SIMH HDSK1, Slice 2 +; Partition C. HBIOS Disk 1, Slice 2 - IF DRV_H - DEFB 'HDSK1:2 ','C'+80H ; Id - 10 bytes + IF DRV_K + DEFB 'HBDSK1:2 ','G'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor @@ -222,10 +222,10 @@ DPB56: DEFW 64 ; Scts/Trk ENDIF ;..... -; Partition D. SIMH HDSK1, Slice 3 +; Partition D. HBIOS Disk 1, Slice 3 - IF DRV_I - DEFB 'HDSK1:3 ','D'+80H ; Id - 10 bytes + IF DRV_L + DEFB 'HBDSK1:3 ','H'+80H ; Id - 10 bytes DEFB FIXDSK ; Format type byte 0 DEFB SPEED8+SEC512+ALC4K ; Format type byte 1 DEFB -2 ; Skew factor @@ -259,7 +259,6 @@ DPB57: DEFW 64 ; Scts/Trk DEFB 16 ; Logical Sectors per track DEFB 0 ; Physical tracks/side (No Meaning in HD) -;HSIZ8 EQU 464 ; Number of blocks in Fourth Logical Drive HSIZ8 EQU HB_ROMBLKS DPB58: DEFW 64 ; Scts/Trk @@ -286,7 +285,6 @@ DPB58: DEFW 64 ; Scts/Trk DEFB 16 ; Logical Sectors per track DEFB 0 ; Physical tracks/side (No Meaning in HD) -;HSIZ9 EQU 192 ; Number of blocks in Fourth Logical Drive HSIZ9 EQU HB_RAMBLKS DPB59: DEFW 64 ; Scts/Trk diff --git a/Source/BPBIOS/hbios.z80 b/Source/BPBIOS/hbios.z80 index 9aacb521..cfe8dadc 100644 --- a/Source/BPBIOS/hbios.z80 +++ b/Source/BPBIOS/hbios.z80 @@ -3,33 +3,6 @@ ; ***************************** ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -;; -;; CHARACTER DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT) -;; -;HBCIO_UART EQU 000H -;HBCIO_ASCI EQU 010H -;HBCIO_VDU EQU 020H -;HBCIO_CVDU EQU 030H -;HBCIO_UPD7220 EQU 040H -;HBCIO_N8V EQU 050H -;HBCIO_PRPCON EQU 060H -;HBCIO_PPPCON EQU 070H -;HBCIO_CRT EQU 0D0H -;HBCIO_BAT EQU 0E0H -;HBCIO_NUL EQU 0F0H -;; -;; DISK DEVICES (ONLY FIRST NIBBLE RELEVANT, SECOND NIBBLE RESERVED FOR UNIT) -;; -;HBDEV_MD EQU 000H -;HBDEV_FD EQU 010H -;HBDEV_RF EQU 020H -;HBDEV_IDE EQU 030H -;HBDEV_ATAPI EQU 040H -;HBDEV_PPIDE EQU 050H -;HBDEV_SD EQU 060H -;HBDEV_PRPSD EQU 070H -;HBDEV_PPPSD EQU 080H -;HBDEV_HDSK EQU 090H ; HB_DEFBNK EQU BID_USR ; Default bank number ; @@ -39,6 +12,23 @@ HB_DISPATCH EQU 0403H ; ; PLATFORM SPECIFIC CONSTANTS ; + IF N8VEM OR ZETA OR ZETA2 +SBC_BASE EQU 60H + ENDIF + + IF N8VEM OR ZETA +MPCL_RAM EQU SBC_BASE + 18H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH +MPCL_ROM EQU SBC_BASE + 1CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH + ENDIF + + IF ZETA2 +MPGSEL_0 EQU SBC_BASE + 18H +MPGSEL_1 EQU SBC_BASE + 19H +MPGSEL_2 EQU SBC_BASE + 1AH +MPGSEL_3 EQU SBC_BASE + 1BH +MPGENA EQU SBC_BASE + 1CH + ENDIF + IF N8 N8_BASE EQU 80H ; BASE I/O ADDRESS BOARD PERIPHERALS (NON-CPU) ACR EQU N8_BASE + 14H ; AUXILLARY CONTROL REGISTER @@ -61,7 +51,7 @@ HB_XFCIMG EQU $ .PHASE HB_XFC HB_CURBNK DB 0 -HB_PRVBNK DB 0 ; DEPRECATED!!! +HB_INVBNK DB 0 HB_SRCADR DW 0 HB_SRCBNK DB 0 HB_DSTADR DW 0 @@ -126,14 +116,6 @@ HBX_INIT: RET -; -;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -; SETBNK - Set memory bank specified in A. -;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -; -HBX_SETBNK: - JP HBX_BNKSEL - HBX_XCOPY: LD A,C LD (HB_SRCBNK),A @@ -147,6 +129,8 @@ HBX_COPY: CALL HBX_BNKCPY ; Do the work with private stack active LD SP,(HBX_STKSAV) ; Back to original stack RET + + IF INTPXY ; @@ -156,6 +140,21 @@ HBX_BNKSEL: IF N8VEM OR ZETA OUT (MPCL_ROM),A OUT (MPCL_RAM),A + RET + ENDIF + + IF ZETA2 + BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE + JR Z,HBX_ROM ; NOT SET, SELECT ROM PAGE + RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT + ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K +; +HBX_ROM: + RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K + OUT (MPGSEL_0),A ; BANK_0: 0K - 16K + INC A ; + OUT (MPGSEL_1),A ; BANK_1: 16K - 32K + RET ENDIF IF N8 @@ -186,17 +185,8 @@ HBX_ROM: RLCA RLCA OUT0 (CPU_BBR),A - ENDIF - - RET -; -;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -; GETBNK - Get current memory bank and return in A. -;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -; -HBX_GETBNK: - LD A,(HB_CURBNK) RET + ENDIF ; ; Entry point HBX_BNKCPY is for use internally and ; assumes a valid stack already exists in upper 32K. @@ -266,31 +256,28 @@ HBX_COPY4: RET ; Done ; -;================================================================================================== -; HBIOS ENTRY FOR RST 08 PROCESSING -;================================================================================================== -; ; ENTRY POINT FOR BIOS FUNCTIONS (TARGET OF RST 08) ; HBX_INVOKE: LD (HBX_STKSAV),SP ; SAVE ORIGINAL STACK FRAME - LD SP,HBX_STACK ; SETUP NEW STACK FRAME - LD A,(HB_CURBNK) ; GET CURRENT BANK - LD (HBX_INVBNK),A ; SETUP TO RESTORE AT EXIT + LD (HB_INVBNK),A ; SAVE INVOCATION BANK + ;DI + LD SP,HBX_STACK ; SETUP NEW STACK FRAME LD A,BID_HB ; HBIOS BANK CALL HBX_BNKSEL ; SELECT IT + ;EI CALL HB_DISPATCH ; CALL HBIOS FUNCTION DISPATCHER + ;DI PUSH AF ; SAVE AF (FUNCTION RETURN) - LD A,0FFH ; LOAD ORIGINAL BANK ($FF IS REPLACED AT ENTRY) -HBX_INVBNK EQU $ - 1 + LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK CALL HBX_BNKSEL ; SELECT IT POP AF ; RESTORE AF - LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME + ;EI RET ; RETURN TO CALLER @@ -303,25 +290,18 @@ HBX_INVBNK EQU $ - 1 HBX_FRGETB: LD (HBX_STKSAV),SP ; Save current stack LD SP,HBX_STACK ; Activate our private stack - LD A,(HB_CURBNK) ; Get current bank LD (HBX_BNKSAV),A ; Save current bank - PUSH BC LD A,C - DI - + ;DI CALL HBX_BNKSEL - LD C,(HL) LD A,(HBX_BNKSAV) - CALL HBX_BNKSEL - -;WW EI + ;EI LD A,C POP BC - LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME RET @@ -332,25 +312,18 @@ HBX_FRGETB: HBX_FRGETW: LD (HBX_STKSAV),SP ; Save current stack LD SP,HBX_STACK ; Activate our private stack - LD A,(HB_CURBNK) ; Get current bank LD (HBX_BNKSAV),A ; Save current bank - LD A,C - DI - + ;DI CALL HBX_BNKSEL - LD E,(HL) INC HL LD D,(HL) DEC HL LD A,(HBX_BNKSAV) - CALL HBX_BNKSEL - -;WW EI - + ;EI LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME RET @@ -361,27 +334,20 @@ HBX_FRGETW: HBX_FRPUTB: LD (HBX_STKSAV),SP ; Save current stack LD SP,HBX_STACK ; Activate our private stack - PUSH AF LD A,(HB_CURBNK) ; Get current bank LD (HBX_BNKSAV),A ; Save current bank POP AF - PUSH BC LD B,A LD A,C - DI - + ;DI CALL HBX_BNKSEL - LD (HL),B LD A,(HBX_BNKSAV) - CALL HBX_BNKSEL - -;WW EI + ;EI POP BC - LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME RET @@ -392,25 +358,18 @@ HBX_FRPUTB: HBX_FRPUTW: LD (HBX_STKSAV),SP ; Save current stack LD SP,HBX_STACK ; Activate our private stack - LD A,(HB_CURBNK) ; Get current bank LD (HBX_BNKSAV),A ; Save current bank - LD A,C - DI - + ;DI CALL HBX_BNKSEL - LD (HL),E INC HL LD (HL),D DEC HL LD A,(HBX_BNKSAV) - CALL HBX_BNKSEL - -;WW EI - + ;EI LD SP,(HBX_STKSAV) ; RESTORE ORIGINAL STACK FRAME RET @@ -422,7 +381,6 @@ HBX_FRPUTW: DSEG HB_DSKBUF DEFW 0 ; Address of physical disk buffer in HBIOS bank - HBX_BNKSAV DEFB 0 ; Saved bank id during HBIOS calls HBX_STKSAV DEFW 0 ; Saved stack pointer during HBIOS calls DEFS 64 ; Private stack for HBIOS @@ -431,7 +389,6 @@ HBX_STACK EQU $ ; Top of private stack IF INTPXY HBX_RETBNK DEFB 0 ; Bank to activate on return from BNKCPY - HBX_BUF DEFS 80H ; Interbank copy buffer ENDIF diff --git a/Source/BPBIOS/ibmv-ww.z80 b/Source/BPBIOS/ibmv-ww.z80 index 908f2c1c..72a39f3a 100644 --- a/Source/BPBIOS/ibmv-ww.z80 +++ b/Source/BPBIOS/ibmv-ww.z80 @@ -30,7 +30,7 @@ BIOSTK: DEFB 0 ; NOP if not currently in bank, LD (USP-7),HL ; Save entry HL POP HL ; Retrieve caller's return address from stack LD (USP-5),HL ; ..and set in our stack for local return - DI ; No interrupts while we play with the stack + ;DI ; No interrupts while we play with the stack LD (USP),SP ; Save User's Stack Pointer LD SP,USP-1 ; ..and point locally, saving 1 byte for Bank PUSH AF ; Save entry A and Flags @@ -43,15 +43,15 @@ BIOSTK: DEFB 0 ; NOP if not currently in bank, PUSH HL ; ..at USP-2 & 3 LD SP,USP-7 ; Point stack pointer to do local return POP HL ; .restoring entry HL -;WW EI ; ..enabling interrupts + ;EI ; ..enabling interrupts RET ; And return to caller ; Restore User Stack and Bank Routine USRSTK: PUSH AF LD A,(USP-1) ; Get bank control byte from entry - LD (CURBNK),A ; WW: I ADDED THIS, IS IT RIGHT??? - CALL HBX_SETBNK + CALL HBX_BNKSEL + LD (CURBNK),A XOR A LD (BIOSTK),A ; Patch NOP back in at start of code POP AF @@ -64,8 +64,8 @@ USRSTK: PUSH AF FRCLR: PUSH AF ; Save any entry in AF LD A,(USP-1) ; Get bank control byte + CALL HBX_BNKSEL LD (CURBNK),A ; WW: I ADDED THIS, IS IT RIGHT??? - CALL HBX_SETBNK XOR A LD (BIOSTK),A ; Patch NOP to enable stack switcher POP AF @@ -100,6 +100,7 @@ RETMEM: LD A,(CURBNK) SELMEM: LD (USRBNK),A ; Update user bank ;..fall thru to set specified bank.. + ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; SELBNK - Switch Memory Bank to Bank in A and show as current. ; Must preserve all Registers including Flags. @@ -107,8 +108,8 @@ SELMEM: LD (USRBNK),A ; Update user bank ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: SELBNK: PUSH AF ; Save regs -SELBN0: LD (CURBNK),A ; Save as current bank # - CALL HBX_SETBNK +SELBN0: CALL HBX_BNKSEL + LD (CURBNK),A ; Save as current bank # POP AF ; restore regs RET diff --git a/Source/BPBIOS/icfg-ww.z80 b/Source/BPBIOS/icfg-ww.z80 index 619fb8c8..3fca3f55 100644 --- a/Source/BPBIOS/icfg-ww.z80 +++ b/Source/BPBIOS/icfg-ww.z80 @@ -141,45 +141,44 @@ CNTRLR: DEFB 80H ; Controller Types recognized are: ; 3- Seagate SCSI 8- Syquest SCSI ; 4- Shugart 1610-4 Minimal SCSI 80H- GIDE (IDE/ATA) -; First drive (Parameters for Toshiba MK-1544 IDE) +; First drive (Generic HBIOS drive configuration) + +BITS DEFL 00000000B ; First HBIOS Hard Disk Drive -BITS DEFL 00000000B ; SCSI - Physical Device 0, Logical Unit 0 - ; IDE - Drive 0 = Master BITS DEFL BITS+[UNIT_0 AND 10H] ; If active, set Bit 4 HDRV0: DEFB BITS ; Set Device, Unit, and Active bits - DEFW 581 ; Number of Cylinders - DEFB 2 ; Number of Heads - DEFW 36 ; SCSI - Cylinder # to start reduced write - ; IDE - Number of Sectors Per Track + DEFW 520 ; Number of Cylinders + DEFB 16 ; Number of Heads + DEFW 16 ; IDE - Number of Sectors Per Track DEFW 0000 ; Cylinder # to start precompensation DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us) -; Second drive (Parameters for Seagate ST-125N SCSI) +; Second drive (Generic HBIOS drive configuration) + +BITS DEFL 00000001B ; Second HBIOS Hard Disk Drive -BITS DEFL 00000001B ; SCSI - Physical Device 1, Logical Unit 0 - ; IDE - Drive 1 = Slave BITS DEFL BITS+[UNIT_1 AND 10H] ; If active, set Bit 4 HDRV1: DEFB BITS ; Set Device, Unit, and Active bits - DEFW 615 ; Syquest ST-125N - DEFB 4 - DEFW 0000 - DEFW 0000 - DEFB 0 + DEFW 520 ; Number of Cylinders + DEFB 16 ; Number of Heads + DEFW 16 ; IDE - Number of Sectors Per Track + DEFW 0000 ; Cylinder # to start precompensation + DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us) -; Third drive (Parameters for Miniscribe 8425 SCSI) +; Third drive (Generic HBIOS drive configuration) + +BITS DEFL 00000010B ; Third HBIOS Hard Disk Drive -BITS DEFL 00000010B ; Physical Device 2, Logical Unit 0 - ; IDE - (undefined) BITS DEFL BITS+[UNIT_2 AND 10H] ; If active, set Bit 4 - DEFB BITS ; Set Device, Unit, and Active bits - DEFW 615 - DEFB 4 - DEFW 615 - DEFW 300 - DEFB 2 +HDRV2: DEFB BITS ; Set Device, Unit, and Active bits + DEFW 520 ; Number of Cylinders + DEFB 16 ; Number of Heads + DEFW 16 ; IDE - Number of Sectors Per Track + DEFW 0000 ; Cylinder # to start precompensation + DEFB 0 ; Step Rate (0=3ms, 1=28us, 2=12us) DEFB 0,0,0,0,0 ; (Reserved) diff --git a/Source/BPBIOS/romwbw-mk4.lib b/Source/BPBIOS/romwbw-mk4.lib index 3a304dfd..09968231 100644 --- a/Source/BPBIOS/romwbw-mk4.lib +++ b/Source/BPBIOS/romwbw-mk4.lib @@ -9,13 +9,13 @@ ; HBIOS configuration. ; HBIOS EQU YES ; Use HBIOS functions -;INTPXY EQU YES ; Internal HBIOS Proxy HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY) ; ; Set exactly one of the following to YES to specify platform ; N8VEM EQU NO ZETA EQU NO +ZETA2 EQU NO N8 EQU NO MK4 EQU YES ; @@ -24,16 +24,16 @@ MK4 EQU YES SIMHCLK EQU NO ; Direct SIMH clock access HBCLK EQU YES ; HBIOS clock driver ; +; Set HB_IODEV to appropriate console device +; +HB_IODEV EQU 0 +; ; Set HB_HDDEV to appropriate hard disk driver ; -;;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver -;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver -;HB_HDDEV EQU HBDEV_SD ; SD Card Driver HB_HDDEV EQU 2 ; ; Set HB_MDDEV to appropriate memory disk driver ; -;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver HB_MDDEV EQU 0 ; ; RAM/ROM disk sizes expressed as count of 2K blocks @@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block ; ; Layout of RAM banks ; - IF N8VEM OR ZETA OR MK4 + IF N8VEM OR ZETA OR ZETA2 OR MK4 BID_RAMD EQU 80H BID_RAMM EQU 8BH BID_SYS EQU 8CH @@ -60,14 +60,6 @@ BID_HB EQU 9DH BID_USR EQU 9EH BID_COM EQU 9FH ENDIF -; - IF N8 OR MK4 -;HB_IODEV EQU HBCIO_ASCI -; ELSE -;HB_IODEV EQU HBCIO_UART - ENDIF -; -HB_IODEV EQU 0 ; IF INTPXY MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block diff --git a/Source/BPBIOS/romwbw-sim.lib b/Source/BPBIOS/romwbw-sim.lib index f1ae2b36..61087ae5 100644 --- a/Source/BPBIOS/romwbw-sim.lib +++ b/Source/BPBIOS/romwbw-sim.lib @@ -9,13 +9,13 @@ ; HBIOS configuration. ; HBIOS EQU YES ; Use HBIOS functions -;INTPXY EQU YES ; Internal HBIOS Proxy HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY) ; ; Set exactly one of the following to YES to specify platform ; N8VEM EQU YES ZETA EQU NO +ZETA2 EQU NO N8 EQU NO MK4 EQU NO ; @@ -24,16 +24,16 @@ MK4 EQU NO SIMHCLK EQU NO ; Direct SIMH clock access HBCLK EQU YES ; HBIOS clock driver ; +; Set HB_IODEV to appropriate console device +; +HB_IODEV EQU 0 +; ; Set HB_HDDEV to appropriate hard disk driver ; -;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver -;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver -;;HB_HDDEV EQU HBDEV_SD ; SD Card Driver HB_HDDEV EQU 2 ; ; Set HB_MDDEV to appropriate memory disk driver ; -;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver HB_MDDEV EQU 0 ; ; RAM/ROM disk sizes expressed as count of 2K blocks @@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block ; ; Layout of RAM banks ; - IF N8VEM OR ZETA OR MK4 + IF N8VEM OR ZETA OR ZETA2 OR MK4 BID_RAMD EQU 80H BID_RAMM EQU 8BH BID_SYS EQU 8CH @@ -60,14 +60,6 @@ BID_HB EQU 9DH BID_USR EQU 9EH BID_COM EQU 9FH ENDIF -; - IF N8 OR MK4 -;HB_IODEV EQU HBCIO_ASCI -; ELSE -;HB_IODEV EQU HBCIO_UART - ENDIF -; -HB_IODEV EQU 0 ; IF INTPXY MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block diff --git a/Source/BPBIOS/romwbw.lib b/Source/BPBIOS/romwbw.lib index f1ae2b36..c6d9f83c 100644 --- a/Source/BPBIOS/romwbw.lib +++ b/Source/BPBIOS/romwbw.lib @@ -9,13 +9,13 @@ ; HBIOS configuration. ; HBIOS EQU YES ; Use HBIOS functions -;INTPXY EQU YES ; Internal HBIOS Proxy HBLOC EQU 0FE00H ; Location of HBIOS proxy (used if not INTPXY) ; ; Set exactly one of the following to YES to specify platform ; N8VEM EQU YES ZETA EQU NO +ZETA2 EQU NO N8 EQU NO MK4 EQU NO ; @@ -24,17 +24,17 @@ MK4 EQU NO SIMHCLK EQU NO ; Direct SIMH clock access HBCLK EQU YES ; HBIOS clock driver ; +; Set HB_IODEV to appropriate console device +; +HB_IODEV EQU 0 ; Assume we want to use first HBIOS serial device +; ; Set HB_HDDEV to appropriate hard disk driver ; -;HB_HDDEV EQU HBDEV_HDSK ; SIMH HDSK Driver -;;HB_HDDEV EQU HBDEV_IDE ; IDE Driver -;;HB_HDDEV EQU HBDEV_SD ; SD Card Driver -HB_HDDEV EQU 2 +HB_HDDEV EQU 2 ; Assumes disk device #2 is first hard disk device ; ; Set HB_MDDEV to appropriate memory disk driver ; -;HB_MDDEV EQU HBDEV_MD ; Memory Disk Driver -HB_MDDEV EQU 0 +HB_MDDEV EQU 0 ; Assumes disk device #0 is ROM disk device ; ; RAM/ROM disk sizes expressed as count of 2K blocks ; @@ -44,7 +44,7 @@ HB_ROMBLKS EQU 192 ; 512K - 128K reserved / 2K per block ; ; Layout of RAM banks ; - IF N8VEM OR ZETA OR MK4 + IF N8VEM OR ZETA OR ZETA2 OR MK4 BID_RAMD EQU 80H BID_RAMM EQU 8BH BID_SYS EQU 8CH @@ -60,14 +60,6 @@ BID_HB EQU 9DH BID_USR EQU 9EH BID_COM EQU 9FH ENDIF -; - IF N8 OR MK4 -;HB_IODEV EQU HBCIO_ASCI -; ELSE -;HB_IODEV EQU HBCIO_UART - ENDIF -; -HB_IODEV EQU 0 ; IF INTPXY MEMTOP EQU 0FFE0H - 1 ; Start of HBIOS 32 byte control block diff --git a/Source/BPBIOS/util.z80 b/Source/BPBIOS/util.z80 index c217956d..cf71b8ee 100644 --- a/Source/BPBIOS/util.z80 +++ b/Source/BPBIOS/util.z80 @@ -321,13 +321,6 @@ STR_PC DB " PC=$" STR_SP DB " SP=$" ; ;================================================================================================== -; MEMORY BANK MANAGEMENT -;================================================================================================== -; -MPCL_RAM EQU 78H ; BASE IO ADDRESS OF RAM MEMORY PAGER CONFIGURATION LATCH -MPCL_ROM EQU 7CH ; BASE IO ADDRESS OF ROM MEMORY PAGER CONFIGURATION LATCH -; -;================================================================================================== ; DATA ;================================================================================================== ; diff --git a/Source/Doc/CPM 22 Manual/Build.cmd b/Source/Doc/CPM 22 Manual/Build.cmd index 76b09046..601e5b49 100644 --- a/Source/Doc/CPM 22 Manual/Build.cmd +++ b/Source/Doc/CPM 22 Manual/Build.cmd @@ -9,7 +9,7 @@ set ZXBINDIR=%TOOLS%/cpm/bin/ set ZXLIBDIR=%TOOLS%/cpm/lib/ set ZXINCDIR=%TOOLS%/cpm/include/ -rem set TEXOPT=-$D +rem set TEXOPT=-$D -$Q zx TEX21A PART1 %TEXOPT% zx TEX21A PART2 %TEXOPT% diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index b102b8cf..fc580570 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -171,18 +171,14 @@ DSRTC_GETTIM: CALL DSRTC_CLK2TIM ; CONVERT CLOCK TO TIME ; ; NOW COPY TO REAL DESTINATION (INTERBANK SAFE) -; LD C,BID_BIOS ; SOURCE BANK IS HBIOS -; LD A,(HB_CURBNK) ; GET CURRENT BANK -; LD B,A ; .. AND USE AS DEST BANK -; LD (HB_SRCBNK),BC ; SET COPY BANKS LD A,BID_BIOS ; COPY FROM BIOS BANK LD (HB_SRCBNK),A ; SET IT - LD A,(HBX_INVBNK) ; COPY TO CURRENT USER BANK + LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK LD (HB_DSTBNK),A ; SET IT LD HL,DSRTC_TIMBUF ; SOURCE ADR POP DE ; DEST ADR LD BC,6 ; LENGTH IS 6 BYTES - CALL HBX_BNKCPY ; COPY THE CLOCK DATA + CALL HB_BNKCPY ; COPY THE CLOCK DATA ; ; CLEAN UP AND RETURN XOR A ; SIGNAL SUCCESS @@ -197,17 +193,13 @@ DSRTC_GETTIM: DSRTC_SETTIM: ; ; COPY INCOMING TIME DATA TO OUR TIME BUFFER -; LD A,(HB_CURBNK) ; GET CURRENT BANK -; LD C,A ; .. AND USE AS SOURCE BANK -; LD B,BID_BIOS ; DESTINATION BANK IS HBIOS -; LD (HB_SRCBNK),BC ; SET COPY BANKS - LD A,(HBX_INVBNK) ; COPY FROM CURRENT USER BANK + LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK LD (HB_SRCBNK),A ; SET IT LD A,BID_BIOS ; COPY TO BIOS BANK LD (HB_DSTBNK),A ; SET IT LD DE,DSRTC_TIMBUF ; DEST ADR LD BC,6 ; LENGTH IS 6 BYTES - CALL HBX_BNKCPY ; COPY THE CLOCK DATA + CALL HB_BNKCPY ; COPY THE CLOCK DATA ; ; WRITE TO CLOCK LD HL,DSRTC_TIMBUF ; POINT TO TIME BUFFER diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index fac52fe0..14245931 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -87,7 +87,7 @@ MODCNT .SET MODCNT + 1 JP HB_START .DW ROM_SIG .FILL (008H - $),0FFH ; RST 8 - JP HBX_INVOKE ; INVOKE HBIOS FUNCTION + JP HB_INVOKE ; INVOKE HBIOS FUNCTION .FILL (010H - $),0FFH ; RST 10 RET .FILL (018H - $),0FFH ; RST 18 @@ -206,7 +206,7 @@ HBX_IDENT: HBX_INVOKE: LD (HBX_STKSAV),SP ; SAVE ORIGINAL STACK FRAME LD A,(HB_CURBNK) ; GET CURRENT BANK - LD (HBX_INVBNK),A ; SETUP TO RESTORE AT EXIT + LD (HB_INVBNK),A ; SAVE INVOCATION BANK HB_DI LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM @@ -220,8 +220,7 @@ HBX_INVOKE: HB_DI LD SP,HBX_STACK ; USE STACK FRAME IN HI MEM PUSH AF ; SAVE AF (FUNCTION RETURN) - LD A,$FF ; LOAD ORIGINAL BANK ($FF IS REPLACED AT ENTRY) -HBX_INVBNK .EQU $ - 1 + LD A,(HB_INVBNK) ; LOAD ORIGINAL BANK CALL HBX_BNKSEL ; SELECT IT POP AF ; RESTORE AF LD SP,0 ; RESTORE ORIGINAL STACK FRAME @@ -516,7 +515,7 @@ HBX_BUF .FILL HBX_BUFSIZ,0 #ELSE .DB BID_USR ; CURRENTLY ACTIVE LOW MEMORY BANK ID #ENDIF - .DB $FF ; DEPRECATED!!! + .DB 0 ; BANK ACTIVE AT TIME OF HBIOS CALL INVOCATION .DW 0 ; BNKCPY SOURCE ADDRESS .DB BID_USR ; BNKCPY SOURCE BANK ID .DW 0 ; BNKCPY DESTINATION ADDRESS @@ -1452,7 +1451,7 @@ SYS_DISPATCH: ; SYS_SETBNK: PUSH HL ; SAVE INCOMING HL - LD HL,HBX_INVBNK ; POINT TO HBIOS INVOKE BANK ID ADDRESS + LD HL,HB_INVBNK ; POINT TO HBIOS INVOKE BANK ID ADDRESS LD A,(HL) ; GET EXISTING BANK ID TO A LD (HL),C ; UPDATE INVOKE BANK TO NEW BANK ID LD C,A ; PUT PREVIOUS BANK ID IN C FOR RETURN @@ -1463,7 +1462,7 @@ SYS_SETBNK: ; GET ACTIVE MEMORY BANK ; SYS_GETBNK: - LD A,(HBX_INVBNK) ; GET THE ACTIVE MEMORY BANK + LD A,(HB_INVBNK) ; GET THE ACTIVE MEMORY BANK LD C,A ; MOVE TO C XOR A ; SIGNAL SUCCESS RET @@ -1529,7 +1528,7 @@ SYS_BNKCPY: ;POP AF ; *DEBUG* END - CALL HBX_BNKCPY + CALL HB_BNKCPY XOR A RET ; diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 5870f7fd..2b364fd1 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -153,7 +153,7 @@ HBX_XFC .EQU $10000 - $20 ; HBIOS PROXY INTERFACE AREA, 32 BYTES FIXED ; HBX_XFCDAT .EQU HBX_XFC ; DATA PORTION OF HBIOS PROXY INTERFACE AREA HB_CURBNK .EQU HBX_XFCDAT + 0 ; CURRENTLY ACTIVE LOW MEMORY BANK ID -;HB_PRVBNK .EQU HBX_XFCDAT + 1 ; PREVIOUS BANK (DEPRECATED) +HB_INVBNK .EQU HBX_XFCDAT + 1 ; BANK ACTIVE AT TIME OF HBIOS CALL INVOCATION HB_SRCADR .EQU HBX_XFCDAT + 2 ; BNKCPY: DESTINATION BANK ID HB_SRCBNK .EQU HBX_XFCDAT + 4 ; BNKCPY: SOURCE BANK ID HB_DSTADR .EQU HBX_XFCDAT + 5 ; BNKCPY: DESTINATION ADDRESS diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index e459b611..76a56031 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -190,7 +190,7 @@ MD_READ: LD A,B ; GET DESTINATION BANK LD (HB_DSTBNK),A ; SET IT POP BC - CALL HBX_BNKCPY ; DO THE INTERBANK COPY + CALL HB_BNKCPY ; DO THE INTERBANK COPY XOR A RET ; @@ -222,7 +222,7 @@ MD_WRITE: LD A,B ; GET DESTINATION BANK LD (HB_DSTBNK),A ; SET IT POP BC - CALL HBX_BNKCPY ; DO THE INTERBANK COPY + CALL HB_BNKCPY ; DO THE INTERBANK COPY XOR A RET ; diff --git a/Source/HBIOS/simrtc.asm b/Source/HBIOS/simrtc.asm index 97e29987..33c79590 100644 --- a/Source/HBIOS/simrtc.asm +++ b/Source/HBIOS/simrtc.asm @@ -66,12 +66,12 @@ SIMRTC_GETTIM: ; NOW COPY TO REAL DESTINATION (INTERBANK SAFE) LD A,BID_BIOS ; COPY FROM BIOS BANK LD (HB_SRCBNK),A ; SET IT - LD A,(HBX_INVBNK) ; COPY TO CURRENT USER BANK + LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK LD (HB_DSTBNK),A ; SET IT LD HL,SIMRTC_BUF ; SOURCE ADR POP DE ; DEST ADR LD BC,SIMRTC_BUFSIZ ; LENGTH - CALL HBX_BNKCPY ; COPY THE CLOCK DATA + CALL HB_BNKCPY ; COPY THE CLOCK DATA ; LD DE,60 ; DELAY 60 * 16US = ~1MS CALL VDELAY ; SLOW DOWN SIMH FOR CLOCK TICKING TEST @@ -95,13 +95,13 @@ SIMRTC_GETTIM0: ; SIMRTC_SETTIM: ; COPY TO TEMP BUF - LD A,(HBX_INVBNK) ; COPY FROM CURRENT USER BANK + LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK LD (HB_SRCBNK),A ; SET IT LD A,BID_BIOS ; COPY TO BIOS BANK LD (HB_DSTBNK),A ; SET IT LD DE,SIMRTC_BUF ; DEST ADR LD BC,SIMRTC_BUFSIZ ; LENGTH - CALL HBX_BNKCPY ; COPY THE CLOCK DATA + CALL HB_BNKCPY ; COPY THE CLOCK DATA ; LD HL,SIMRTC_BUF ; POINT TO TEMP BUF LD A,SIMRTC_CLKWRITE ; WRITE CLOCK COMMAND diff --git a/Tools/cpm/bin/TEX21A.COM b/Tools/cpm/bin/TEX21A.COM index f2f7bcb5c12a392a0b0f56b704ef5a8ca1d61d6a..f7bf6f69c49c160c3c96f7e45ac9636d8d5dc0c8 100644 GIT binary patch literal 10632 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 b^p