|Re: HP-41CY emulation for NoV-64... (shadow RAM fixed)|
Message #5 Posted by Diego Diaz on 13 May 2010, 4:59 p.m.,
in response to message #4 by Winfried Maschke
Hi 聲gel, J-F, Winfried,
Thanks a lot for your responses, I've gone a SW "variation" (I cannot modify existing NoV-64 HW adding a serial resistor) of the propossed weak-ISA way, and it seems to work... ;-) (please consider this "extremely experimental" if your're about to test).
The new code is here for download. (Updated)
I'm certainly neither a CY expert... nor a fan of it. Fully agree with you about HEPAX, 聲gel.
HEPAX puts 16K of "efficiency" into 4K of unused space, while CY "wastes" 8K of its own RAM space (it should more properly be called 56K RAM-Box) to allocate a "duplicated" block of a "memory pull-pusher" overvalued OS. No direct RAM access/editor, no dissasembler... in short, not enough revenue for the money.
However, its ability to put its RAM in the shadow if another module is plugged-in is of my main interest. Thats why I've come to that point in the end, not because a particular interest in the CY itself: I need/want "just" this feature for a future project... and was decided to "stole" it... :-)
聲gel, I've found both, 32K RAM-Box manual, as well as the German manual for the "41CY/64K RAM Box II" in TOS. If you have the English version of the later, I'd certainly appreciate your contribution.
J-F, the "weak ISA" is a feasible method, I find it "extremely" tricky though... Those guys at W&W were very serious and well founded in the 41 OS... However, as I've read not long ago in this very forum: "If you eliminate the impossible, whatever remains must be the truth"... (think I must trim the tip of my ears again).
Nonetheless, tricky use of pure HW interface (ISO level #1) is not uncommon. The "RS-232" PIC programmer is a very good example of it and as stated above, it solved the issue so far.
In the meantime, may some of you offer an (M-code) expert point of view on what CY does when it comes to I/O interrupt (polling point H'8FF8) pure couriousity by my side I must admit.
This is the code:
8FF8 330 GO 8FDE (-1A)
8FDE 130 LDI
8FDF 010 010
8FE0 270 SEL RAM (DESELECTS RAM 010)
8FE1 3F0 SEL PERF (SELECTS PERIPH 010)
8FE2 046 C=0 S&X
8FE3 3E8 WRIT 15(e) (There must be a REG(15), to be cleared(inside CY?)
8FE4 3F0 SEL PERF (DESELECTS PERIPH 000)
8FE5 270 SEL RAM (SELECTS RAM 000)
8FE6 0CC ?FS 10
8FE7 05B GONC FFF2 (EXITS POLLING THRU 27F3)
8FE8 34C ?FS 12
8FE9 04B GONC FFF2 (EXITS POLLING THRU 27F3)
8FEA 10E A=C (BOTH FLAGS 10 & 12 ARE SET, saves c in a)
8FEB 338 READ 12(}) (There must be a REG(12), to be READ)
8FEC 1BC RCR 11 (Places c at c)
8FED 0AE A<>C (SWPAS A AND C)
8FEE 15C R=6 (POINTER = 6)
8FEF 362 ?A#C @R (COMPARES C WITH C)
8FF0 017 GOC FFF2 (EXITS POLLING THRU 27F3 IF THEY'RE EQUAL)
8FF1 348 SSF 12 (OR SETS FLAG 12 AND THEN...)
8FF2 3CD GO 27F3 (...EXITS)
Edited: 13 May 2010, 8:13 p.m.