From 6afc56a7caca7d0f7e5f414380ed5acd6629c6e2 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 15 May 2020 16:25:31 -0700 Subject: [PATCH] More system restart options --- Doc/ChangeLog.txt | 1 + Doc/RomWBW Applications.pdf | Bin 141708 -> 141708 bytes Doc/RomWBW Architecture.pdf | Bin 410127 -> 413847 bytes Doc/RomWBW Disk Catalog.pdf | Bin 130980 -> 130980 bytes Doc/RomWBW Getting Started.pdf | Bin 169551 -> 169559 bytes Source/Apps/RTC.asm | 18 +++++++++- Source/CBIOS/cbios.asm | 9 +++-- Source/CPM3/boot.z80 | 4 +-- Source/Doc/Architecture.md | 34 +++++++++++++++++++ Source/Forth/camel80.azm | 16 +++++++-- Source/HBIOS/ay38910.asm | 2 +- Source/HBIOS/cfg_state.inc | 59 ++++++++++++++++----------------- Source/HBIOS/dbgmon.asm | 36 +++++++++++++++----- Source/HBIOS/eastaegg.asm | 13 +++++--- Source/HBIOS/game.asm | 11 ++++-- Source/HBIOS/hbios.asm | 38 +++++++++++++++++++-- Source/HBIOS/hbios.inc | 4 +++ Source/HBIOS/nascom.asm | 10 ++++-- Source/HBIOS/tastybasic.asm | 9 +++-- Source/HBIOS/usrrom.asm | 9 +++-- Source/Images/hdnew_prefix.bin | Bin 131072 -> 131072 bytes Source/ver.inc | 2 +- Source/ver.lib | 2 +- 23 files changed, 209 insertions(+), 68 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 2b72545a..2f7c0b98 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -3,6 +3,7 @@ Version 3.1.1 - WBW: Version bumped due to pervasive changes - WBW: Preliminary hard disk partition support (backward compatible) - WBW: Change Propeller VGA signal timings to 60Hz refresh +- WBW: Enhanced SYSTEM RESET function to allow a warm start back to boot loader Version 3.1 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 6ab7d2a46ea87e3cb1c63f7cd17f4691ad60ea51..ed28704bd747f1cb877696dc99894f15d540f23f 100644 GIT binary patch delta 133 zcmeCV%+Yh1qhSl<+W%UnhGvF_#umB;=IRCp>Y7~ozWFIGi6yBD8ZK5w21W)3riM@@ z+pqs;4ApeDbT+myaW*h^GjMh^Fg7(YH#D|1Fn4q{vovY7~ozWFIGi6yBD8ZK5w21W)3riM@@ z+pqs;4ApdYGjcJpv@kR>GdDJMb#pW@v~YB`bT%<^HFI`#adR`XQ?MbVWO}|PlPmz& C$|DT` diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index c6a984a4fd8ea80af706141b01ce6b9d02a783b5..fa9ec503f2550d17224c2436c1d7efb28d8651b7 100644 GIT binary patch delta 34006 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 sUD7&tkc2^!pj+g*J7 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 diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 2d688b6312e4335b2890e5f140d622480a1bd1c8..1d9cf04e7bb9afcd1293891dc2fe73beefe29094 100644 GIT binary patch delta 111 zcmZ4TpMA-H_J%EtM_;m=8k!jznwU>N^O8{p#@YV|1-)00I`%G*8l(j delta 111 zcmZ4TpMA-H_J%EtM_;lV8yXszm>Nw#^O8{p#@YV|1-)00HZD+TL1t6 diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 426d0b3247170d382b2b84c5f8c16cf4b5359ac3..8f0d1348da355db6b164dab2f0dba2a64939969b 100644 GIT binary patch delta 8777 zcmai2d035G7k5t4BxP!(!BAxAod*rlK&sm$6dEbjO+`v2PEsnO6bd0zG@wEU;YLan zDwm>LnGzReDl^|c=JvkN^Yu^9v(8$3t^HfSHSG6Vp?qVZeC#m+#R&;Mb7P`ljOdE1 zZAkM}<+B~LpIZy+qj$wf`zu9k8`0NUvp7~KI6BAbvR_4_j`QM=T}DTb+HN#hbkg7H zwO5i+8EKT-r8(fr>atjw$$#DJd=u0C?^E~jLS5Iul>W1}#~!7Uy)$HV9!^)TOkcbx zZszchDy<6@E>(mms3%nVj2*1bEJ{@xaXPb=6O0mZnMRS6_opIdz1oOMbIZGb-d=HG z@3Wn+Lu+gbUOq8jTXaw>K#~1&_I*2Nj1RanMwa2_uQb)&8x`~_TdTCJM};le(^;p< z{F$|wZ`$BC>bg$4+`1^cp4n>0ZS0yhcb6KJJ2qv+j+j?HL@2eYl&?^<8FfiZbwone zvSXKPIz{7l!u3SGxKEuY(x&8c!kecu*w6yJ5m%gHZW0NzA&rdqC?&^fonBggU zjoL62x_kb8 zM1StF>q9p673GQK#FfFTA1!iHb+qch)b-ykw7anM>09xXWzG2|S<#`U`no5ISLi-2 z&lzO5@9LcoSEM~;tkr$wKem=G+QkRnAFh0axTkEmb9bcDLGAh_LD_>I)}|^q*Yfya zxzZN7padUt1$o~#C)1(=r&mLyZ^m?$wRw7Ni_Fqcm{I2{t`h~9Eox3FJU+O92ok3y zg^HDpYv13^Qs}hg!vobEhF!nC=3jQrOrO2tgkh~_tE{(fn%>7f>D)B~nHEFmZI^UU z+^`F7PZ<|8{nmZe*$cI+PcL|xx5ex9UIV{Dr?%ZR8}&HbB;?uLpz>o{K^lKvU(1x0 z>TO&;laDa#)R?qt(M=DL;l6C!^oFz?7l*F1pJP@mj_Q85sm)+$`R1khPt+rG&h-3I zZ9Ic2*GPLXMtjf+HLC@U0@tdsH#d&Yx>ce-cHN!@`8#Ib$eTMlHRpD{%e4;Ugls9< z(I#!DZtqhuZgHDEMW!o8p>dl>;fcwWtA<9++LIO+J)pvLsIm9+4(IxfJ((Yk1R5ej zV`)G0Ca%@ZWZICxR&{&%5I?+9KZXBNU*R91L#l?Xd~T{$??32m!;44Spl3&=+fA*+o5(}$E+6Dhtq<9Z8H+-*wDh7~CM_@M$lBJPH9R9*G;+U`_-{^_ zb54QNo1t^|#f)1?b6MFr2j6_z>GkN5=v~t%;<09nH;1E#Oacm}}tGmVLP=pO>G%xZY5E;=IsEwcBRX&KG;0Sh?^(L!esR z^J7+W!M6ka-~Bx%;z6D@b$w;gg@Fdkr1G>!BC05b8L@CI> zQHOS*%eFU}t0oI{MPY&aHdPni*!#G`S}t#~{f0CJ`$vCoa6XVg zMNsY=KHDD-X+5p!Q2s>vk<_J*Q?1y251TV%H2gZA#GM@KVBtLLXk~;)?N;~MwJjet zZ?YK`0a!1s7S z)n#=(p_npwN6ktb-5p_Ee^syTa%EgzzRsV=Gbfn|Fs?c_HEgcoWRDf27CUsB*XTv= zc}WH|2iv?fbU3u`R&JFW^)@+bw(n+{sx!i{6|V+dP|#|*Xl`&ibB~#T5*g}TH?c5{ zc^~@e^TX@OgU$RBN=?okTzWhwO~AyzhsP|2L+!%3_VZ>%-K( z8PDhi-ku{k_c?0l2cYEh_y`MU7{&eHR_6HtS)xNfRlCKyXU~XyKT&0j`nM*AALDab!tKI(VTRtk8<_vTn@Or_nP3;;`2D8 zxn^0J@J&LVakZz%>CWlT?`XP*oN=#>O1kkNE~S+|{dPr!;u5OfRl9C^n8BjSp6(a& ziQ-3xo~+yTexsf6vO<8-pdIbFW9S0M6Z)dN18m|8I%SupJS&Td8*LZYB?@!|5f zT1|>m9<(p>zq57bdH?@)RHkOROuV$lNSGPzj-aU^D^zt#*`08)xq_At5ekC>J+C`L?)b= zncXV7KXhBiO8Mf(3auk`I#v3Z$1RI~vXT2o@6uJy$iB5qU@PC0HdA``u*8^$Bj!yp zC?C3SPRr{R17;`HoT&~UR<}{^(4@kab3^w@&3oLbY*wuvE>N}%EOdS*_gT~9q>=WK z*u`o}xk|3ingRvq7tMXgw=U~rt1(d5Nl>&e=FA0NBIY)ug2AQapUUZ{+IrEs#Yyqx6@Us(A@aE!Lj^Gg9~@=)u|fy zaV|`dbsjKh?dHo1Z@ zJN`;Gv9I>}*ox#fJxUR(-;ST}Xii2cTRIX^msDk6#k1SGcPhFMt5US@j=vT^an5zG zoVVSJW&TVoGJLk~pB-}U*@NG{eyN4jg=wa$RG)TwCUVa+%E`9#>_b>Ya}&8@EHWVu+0N8nsF%?e52C zBkFa`xjiR?Mh?8qIq%jSaXh3SmlUzz-E7TB;ev%jmaljGJ3uUc`z5*MAEo)?)&5`H1c7T24<794Dy>7^{zA`eWq{{|H%N>AlofXN=_}0wXYt#=ohENBav^ zg+iLmGz}E$sc@_gCi&9|){&R|$0-&g7;$ukPB5+5G?}ZD~g+i7PM??zm3kAG*&T^rfloW$8nWZa* z%|mhcIGn=q%v_OBUqr$`kra)nlLUvzaE9d&Tari4qc{%HqZsDZSU>r$Ps3Ob$ z$AKgg48xE-91Ke^1T14{tanmG7{*aN>V)BFBpBvD^jHkN9g9;?azW-<0=Wo}@tg>b zkSAc;U>r|zG^EF46oWxBj^}8|F^G<*5j_^<_`9v>J2!z7hC?G{DHv)V;|Q3YJdV*n z4*YQ*57>;r&+~AaL>NGU@0}A2$QTMX=5d^WZimwZhTIP5v1ot<37rQ@mIrA9`3HYL zNyy^_2gAkV6bT&&j5!7g8mBnO3C80z93Ze|e{n|itu;s#d6;lK&hV&XhDV?V7e*a( zICK$7lfqy<5s#xx=f6VJ3mISxx)($^pa%zt@dU_TZ#`g3@(7OzoCFvCivKV834(_r z1jYo43_+sAB#?@b*kTA;1daXb6{4@58AQ#%^$v^?!T~)NY9N5D1j|59fGtMC)dVUV zhti4hB7%q8C=TMo5V%N;KnO>Iu>?a6$`e8m<4GLpggi;GlJg|^|9~GjW{F?Wd`E^P z;j#kYz22v{ZlLyt#N zM^P+HOp52}-!CjHsdAp8iOk|e;b75MPW(;@isuNZoPj!nQi5XP#tCl7qGJK{NHk9F zd*c-S1Opf|$i(C+KxG&p8f*@|Wx$q(s~O`#6Z-w)U+)dtcrSoJHh?jO-i`(hr?(Su zAPGAGw&ah+=2uo}3T+uQ+N&tgA4F(`zc;Jz6-m?oktRSXB*6bj6U|Z(bwJP<`yEyK zx2RbjAu`RAz2K6d#qn(B-DE%=4gm;k&Co~#>KsZ_2CR~B>C0HK;;u)C0U{^)@Ar3N6 zQP3g}gao`N0~y6a0RkDrK=}kRz_{KQ!7&`nIYdVMZ00`}d7#L^(*el9MhzPiIFfe^ zOe(0s;uzS75nB>GS9_l)l59LsPC(2g4L?(W>_@x*)$K7bH=zT;eF?ZcB^bb*0W!c= zXpsjG67US@9U+jB@O%X_2A)ws#>2}Sj)7?e5fjMhU*qWeA`gV1)4-0wD-p>%OQOiI z%+H6}k8cJT%Of2d?0ATeOs7!LgmLiT>)n??kCr?xph5#O3NBJ0Lx+QepHN-kAcOE) z2V@NBERrVpYoP%`P~#95V5x@pL>$M_U_kod_Xf~Imt~yzZ8ZN#0uFc#XA1{wI$UTt z;4zF0PLgo%18X*#81SaSpq7SSIPBK+VPB=3@a6Gn!>Soo2I6M+8+TM3*&s+j~26PODmiM|gg8VwpOy72G@ z+5FZqB>4Y?pW;C2K{p06WKE_)gm5rm-=yJ`fQg5pdcC^M*Zc#{VCb6?e8Pj_2i*EC zci%oy(j-HmdMuJoz#;@`ni7G6f^JNsj~dX8z%GaAvA;dbzXtKTu@gT?fcG_?s?}@krUx zESP$5fM896OO|HA*A7IFP(g13zTjb*hc^qScrhSjQy7LODArt(0Rl4zb;aP=RF(sS n3^Ua+{=X{jI;N)bVN1Q2ER9^^>nD%XEJw2PqeojgOqKs1953Kg delta 8773 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 diff --git a/Source/Apps/RTC.asm b/Source/Apps/RTC.asm index 5d731612..30e08e21 100644 --- a/Source/Apps/RTC.asm +++ b/Source/Apps/RTC.asm @@ -25,6 +25,8 @@ ; ;[2020/02/02] v1.5 PMS Basic command line support ; +;[2020/05/15] v1.6 Added Warm Start option +; ; Constants ; mask_data .EQU %10000000 ; RTC data line @@ -46,6 +48,12 @@ FCB .EQU 05CH ; Start of command line BID_BOOT .EQU $00 HB_BNKCALL .EQU $FFF9 +BF_SYSRESET .EQU $F0 ; RESTART SYSTEM + +BF_SYSRES_INT .EQU $00 ; RESET HBIOS INTERNAL +BF_SYSRES_WARM .EQU $01 ; WARM START (RESTART BOOT LOADER) +BF_SYSRES_COLD .EQU $02 ; COLD START + ; ; Program ; @@ -1273,6 +1281,9 @@ RTC_UCL: CP 'B' JP Z,RTC_TOP_LOOP_BOOT + CP 'W' + JP Z,RTC_TOP_LOOP_WARMSTART + CP 'C' JP Z,RTC_TOP_LOOP_CHARGE @@ -1324,6 +1335,11 @@ DELAY_LOOP: ; LOOP IS 26TS LD HL,0 ; ADDRESS ZERO CALL HB_BNKCALL ; DOES NOT RETURN +RTC_TOP_LOOP_WARMSTART: + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS + RTC_TOP_LOOP_CHARGE: LD DE,RTC_TOP_LOOP1_CHARGE LD C,09H ; CP/M write string to console call @@ -1580,7 +1596,7 @@ RTC_HELP_MSG: .DB 0Ah, 0Dh ; line feed and carriage return .TEXT "RTC: Version 1.5" .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot H)elp" + .TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp" .DB 0Ah, 0Dh ; line feed and carriage return .DB "$" ; Line terminator diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index a1036ccd..47018547 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -336,9 +336,12 @@ REBOOT: CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) #ENDIF #IFDEF PLTWBW - DI ; NO INTERRUPTS - LD A,0 ; ROM BOOT BANK - CALL HB_BNKSEL ; SELECT IT INTO LOW MEMORY + ;DI ; NO INTERRUPTS + ;LD A,0 ; ROM BOOT BANK + ;CALL HB_BNKSEL ; SELECT IT INTO LOW MEMORY + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS #ENDIF ; ; JUMP TO RESTART ADDRESS diff --git a/Source/CPM3/boot.z80 b/Source/CPM3/boot.z80 index b9f58bc7..4f55b627 100644 --- a/Source/CPM3/boot.z80 +++ b/Source/CPM3/boot.z80 @@ -678,7 +678,7 @@ signon$msg db 13,10,'ZPM3' if banked db ' [BANKED]' endif - db ' on HBIOS v' + db ' for HBIOS v' biosver db 13,10,13,10,0 @@ -697,7 +697,7 @@ signon$msg db 13,10,'CP/M v3.0' if banked db ' [BANKED]' endif - db ' on HBIOS v' + db ' for HBIOS v' biosver db 13,10,13,10,0 diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index f3e20ea3..8db85458 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -1532,13 +1532,47 @@ System (SYS) | _Entry Parameters_ | B: 0xF0 +| C: Subfunction (see below) | _Exit Results_ | A: Status (0=OK, else error) +This function performs various forms of a system reset depending on +the value of the subfucntion. See subfunctions below. + +#### SYSRESET Subfunction 0x00 -- Internal HBIOS Reset (RESINT) + +| _Entry Parameters_ +| BC: 0xFD00 + +| _Returned Values_ +| A: Status (0=OK, else error) + Perform a soft reset of HBIOS. Releases all HBIOS memory allocated by current OS. Does not reinitialize physical devices. +#### SYSRESET Subfunction 0x01 -- Warm Start System (RESWARM) + +| _Entry Parameters_ +| BC: 0xFD01 + +| _Returned Values_ +| + +Warm start the system returning to the boot loader prompt. Does not +reinitialize physical devices. + +#### SYSRESET Subfunction 0x02 -- Cold Start System (RESCOLD) + +| _Entry Parameters_ +| BC: 0xFD02 + +| _Returned Values_ +| + +Perform a system cold start (like a power on). All devices are +reinitialized. + ### Function 0xF1 -- System Version (SYSVER) | _Entry Parameters_ diff --git a/Source/Forth/camel80.azm b/Source/Forth/camel80.azm index c74af4fc..3b8c9462 100644 --- a/Source/Forth/camel80.azm +++ b/Source/Forth/camel80.azm @@ -4,6 +4,12 @@ CIOOUT EQU 01h ; CHARACTER OUTPUT CIOIST EQU 02h ; CHARACTER INPUT STATUS BID_BOOT EQU 00h HB_BNKCALL EQU 0fff9h +BF_SYSRESET EQU 0F0h ; RESTART SYSTEM + +BF_SYSRES_INT EQU 00h ; RESET HBIOS INTERNAL +BF_SYSRES_WARM EQU 01h ; WARM START (RESTART BOOT LOADER) +BF_SYSRES_COLD EQU 02h ; COLD START + ; THE FOLLOWING NEED TO BE SYNCED WITH STD.ASM SO ROMLDR ; KNOWS WHERE THIS EXECUTES AT @@ -332,9 +338,13 @@ KEY2: DW SAVEKEY,CFETCH,LIT,0,SAVEKEY,CSTORE ;X BYE i*x -- return to CP/M head bye,3,bye,docode - LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN + ;LD A,BID_BOOT ; BOOT BANK + ;LD HL,0 ; ADDRESS ZERO + ;CALL HB_BNKCALL ; DOES NOT RETURN + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL 0FFF0h ; CALL HBIOS + HALT ; STACK OPERATIONS ============================== diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 0e3c7c5d..deec80d3 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -132,7 +132,7 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE LD A, TICKFREQ / 3 ; SCHEDULE IN 1/3 SECOND TO TURN OFF SOUND LD (AY_TIMTIK), A - LD HL, (VEC_TICK + 1) ; GET CUR SECONDS VECTOR + LD HL, (VEC_TICK + 1) ; GET CUR TICKS VECTOR LD (AY_TIMHOOK), HL ; SAVE IT INTERNALLY LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER LD (VEC_TICK + 1), HL diff --git a/Source/HBIOS/cfg_state.inc b/Source/HBIOS/cfg_state.inc index d7d1ab3f..007879b0 100644 --- a/Source/HBIOS/cfg_state.inc +++ b/Source/HBIOS/cfg_state.inc @@ -1,30 +1,29 @@ - -#IFNDEF CFG_STATE -#DEFINE CFG_STATE - -SYSTIMEN .EQU FALSE - -#IF (CTCENABLE & (INTMODE == 2) & (CTCTIMER)) -SYSTIMEN .SET TRUE -#ENDIF - -#IF (TMSENABLE & (INTMODE == 1) & TMSTIMENABLE) -SYSTIMEN .SET TRUE -#ENDIF - -#IF ((INTMODE == 1) & (PLATFORM == PLT_SBC) & HTIMENABLE) -SYSTIMEN .SET TRUE -#ENDIF - -#IF ((INTMODE == 2) & (CPUFAM == CPU_Z180)) -SYSTIMEN .SET TRUE -#ENDIF - - .ECHO "TIMER INTERRUPT " -#IF SYSTIMEN - .ECHO "ACTIVE\n" -#ELSE - .ECHO "NOT ACTIVE\n" -#ENDIF - -#ENDIF +#IFNDEF CFG_STATE + #DEFINE CFG_STATE + +SYSTIMEN .EQU FALSE + + #IF (CTCENABLE & (INTMODE == 2) & (CTCTIMER)) +SYSTIMEN .SET TRUE + #ENDIF + + #IF (TMSENABLE & (INTMODE == 1) & TMSTIMENABLE) +SYSTIMEN .SET TRUE + #ENDIF + + #IF ((INTMODE == 1) & (PLATFORM == PLT_SBC) & HTIMENABLE) +SYSTIMEN .SET TRUE + #ENDIF + + #IF ((INTMODE == 2) & (CPUFAM == CPU_Z180)) +SYSTIMEN .SET TRUE + #ENDIF + + .ECHO "TIMER INTERRUPT " + #IF SYSTIMEN + .ECHO "ACTIVE\n" + #ELSE + .ECHO "NOT ACTIVE\n" + #ENDIF + +#ENDIF diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 7091f309..f0c57b42 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -104,8 +104,10 @@ SERIALCMDLOOP: JP Z,FILLMEM ; FILL MEMORY COMMAND CP 'H' ; IS IT A "H" (Y/N) JP Z,HELP ; HELP COMMAND + CP 'S' ; IS IT A "H" (Y/N) + JP Z,STOP ; STOP COMMAND CP 'X' ; IS IT A "X" (Y/N) - JP Z,HALT ; HALT COMMAND + JP Z,EXIT ; EXIT COMMAND LD HL,TXT_COMMAND ; POINT AT ERROR TEXT CALL PRTSTRH ; PRINT COMMAND LABEL @@ -148,17 +150,34 @@ BOOT: CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE) JP 0 ; JUMP TO RESTART ADDRESS #ELSE - LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN + ;LD A,BID_BOOT ; BOOT BANK + ;LD HL,0 ; ADDRESS ZERO + ;CALL HB_BNKCALL ; DOES NOT RETURN + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_COLD ; COLD START + CALL $FFF0 ; CALL HBIOS #ENDIF ; -;__HALT_______________________________________________________________________ +;__EXIT_______________________________________________________________________ ; -; PERFORM HALT ACTION +; PERFORM EXIT ACTION ;_____________________________________________________________________________ ; -HALT: +EXIT: +#IF (BIOS == BIOS_UNA) + JR BOOT +#ELSE + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS +#ENDIF +; +;__STOP_______________________________________________________________________ +; +; PERFORM STOP ACTION (HALT SYSTEM) +;_____________________________________________________________________________ +; +STOP: DI HALT ; @@ -924,7 +943,8 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" .TEXT "\r\nO xx yy - Output to port xx value yy" .TEXT "\r\nP xxxx - Program RAM at xxxx" .TEXT "\r\nR xxxx - Run code at xxxx" - .TEXT "\r\nX - Halt system" + .TEXT "\r\nS - Stop system (HALT)" + .TEXT "\r\nX - Exit monitor" .TEXT "$" ; #IF DSKYENABLE diff --git a/Source/HBIOS/eastaegg.asm b/Source/HBIOS/eastaegg.asm index 35c4c982..7d291165 100644 --- a/Source/HBIOS/eastaegg.asm +++ b/Source/HBIOS/eastaegg.asm @@ -179,10 +179,15 @@ waitch LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR RST 08 ; DO IT - ; RETURN TO THE LOADER - LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN + ;; RETURN TO THE LOADER + ;LD A,BID_BOOT ; BOOT BANK + ;LD HL,0 ; ADDRESS ZERO + ;CALL HB_BNKCALL ; DOES NOT RETURN + + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS + HALT #ENDIF #IF (BIOS == BIOS_UNA) diff --git a/Source/HBIOS/game.asm b/Source/HBIOS/game.asm index 8bbce38b..43d90b87 100644 --- a/Source/HBIOS/game.asm +++ b/Source/HBIOS/game.asm @@ -300,9 +300,14 @@ EXIT: ; CALL BDOS CALL PRTSTRDE - LD A,00H - LD HL,0000H - JP 0FFF9H + ;LD A,00H + ;LD HL,0000H + ;JP 0FFF9H + + LD B,0F0H + LD C,01H + CALL 0FFF0H + ; RET ISOVER: diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index fe3303e0..b136e875 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2325,16 +2325,50 @@ SYS_DISPATCH: JP Z,SYS_POKE ; $FB DEC A JP Z,SYS_INT ; $FC - CALL PANIC ; INVALID + DEC A ; -; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS +; RESTART SYSTEM +; SUBFUNCTION IN C ; SYS_RESET: + LD A,C ; GET REQUESTED SUB-FUNCTION + CP BF_SYSRES_INT + JR Z,SYS_RESINT + CP BF_SYSRES_WARM + JR Z,SYS_RESWARM + CP BF_SYSRES_COLD + JR Z,SYS_RESCOLD + OR $FF ; SIGNAL ERROR + RET +; +; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS +; +SYS_RESINT: LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP XOR A RET ; +; GO BACK TO ROM BOOT LOADER +; +SYS_RESWARM: + CALL SYS_RESINT + ; PERFORM BANK CALL TO OS IMAGES BANK IN ROM + LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY + LD A,BID_IMG0 ; CHAIN TO OS IMAGES BANK + LD HL,0 ; ENTER AT ADDRESS 0 + CALL HBX_BNKCALL ; GO THERE + HALT ; WE SHOULD NEVER COME BACK! +; +; RESTART SYSTEM AS THOUGH POWER HAD JUST BEEN TURNED ON +; +SYS_RESCOLD: + DI + LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY + LD A,BID_BOOT ; BOOT BANK + LD HL,0 ; ADDRESS ZERO + CALL HB_BNKCALL ; DOES NOT RETURN +; ; GET THE CURRENT HBIOS VERSION ; ON INPUT, C=0 ; RETURNS VERSION IN DE AS BCD diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 068114c3..fadb8345 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -90,6 +90,10 @@ BF_SYSPEEK .EQU BF_SYS + 10 ; GET A BYTE VALUE FROM ALT BANK BF_SYSPOKE .EQU BF_SYS + 11 ; SET A BYTE VALUE IN ALT BANK BF_SYSINT .EQU BF_SYS + 12 ; MANAGE INTERRUPT VECTORS ; +BF_SYSRES_INT .EQU $00 ; RESET HBIOS INTERNAL +BF_SYSRES_WARM .EQU $01 ; WARM START (RESTART BOOT LOADER) +BF_SYSRES_COLD .EQU $02 ; COLD START +; BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT BF_SYSGET_RTCCNT .EQU $20 ; GET RTC UNIT COUNT diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 1449c741..6b9e7297 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4715,9 +4715,13 @@ MONOUT: POP AF RET -MONITR: LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN +MONITR: ;LD A,BID_BOOT ; BOOT BANK + ;LD HL,0 ; ADDRESS ZERO + ;CALL HB_BNKCALL ; DOES NOT RETURN + + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS INITST: LD A,0 ; Clear break flag LD (BRKFLG),A diff --git a/Source/HBIOS/tastybasic.asm b/Source/HBIOS/tastybasic.asm index 243cce39..75162e67 100644 --- a/Source/HBIOS/tastybasic.asm +++ b/Source/HBIOS/tastybasic.asm @@ -1250,9 +1250,12 @@ st4: #ifndef ZEMU bye: call endchk ; ** Reboot ** - LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN + ;LD A,BID_BOOT ; BOOT BANK + ;LD HL,0 ; ADDRESS ZERO + ;CALL HB_BNKCALL ; DOES NOT RETURN + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS HALT #endif new: diff --git a/Source/HBIOS/usrrom.asm b/Source/HBIOS/usrrom.asm index 9a03a38d..c230e0f9 100644 --- a/Source/HBIOS/usrrom.asm +++ b/Source/HBIOS/usrrom.asm @@ -13,9 +13,12 @@ LF .EQU 0AH CALL CIN ; DO STUFF ; - LD A,00H ; RETURN TO ROM LOADER - LD HL,0000H - JP 0FFF9H + ;LD A,00H ; RETURN TO ROM LOADER + ;LD HL,0000H + ;JP 0FFF9H + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS ; RET ; ; diff --git a/Source/Images/hdnew_prefix.bin b/Source/Images/hdnew_prefix.bin index 8ab54de5b2a4ca9bddb4d6ca1ab440f0dc7bb7d7..5ddb754941497f18f0aa503a2df3c9b1c3a4fde7 100644 GIT binary patch delta 35 rcmZo@;Am*z*l>Z7_uzjv{tN#Z7zG#@{_{^{RBZmoxcwg^BhxYyB8y)0KgR9<7#W%V0RUWy2#x>% diff --git a/Source/ver.inc b/Source/ver.inc index bd32d35c..863b88bf 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.9" +#DEFINE BIOSVER "3.1.1-pre.10" diff --git a/Source/ver.lib b/Source/ver.lib index 2fd6a46f..d8f586c1 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.9" + db "3.1.1-pre.10" endm