TODO

+++ sys_readwrite -   -  .     F000h (CPMemu conout/conin),    

-  C-  bdos(), bdoshl(), bios()    -      ^C

-    register   

+++ pr2.c: calltrap -       +  

- OPTIM:  __ei()   #asm  ei  #endasm  ,  _di()   #asm  di  #endasm  

- OPTIM:    call MEI ; call MDI ???

- OPTIM: -- ( int func() { return finc2(); } )     #define func func2

+++  GBL long unix()      UZIX
+++       : callno, arg1, arg2, arg3, arg4
+++  unix()        UDATA,    DEHL (long)
  

  
      printf, panic  global: nop,      TODO

  

+++    ps, renice, top !  ( ptab_t  unix.h)  
  
  
??? AltairDOS v3.5r:      TTY   (mtty  0f1xxh  ?     coldstart?)

??? AltairDOS v3.5r:     F120..F1FF -     ,   TTY,   

+++ IDEBDOS:     F100  YLSTOUT (F3xx)

+++ IDEBDOS:   

??? IDEBDOS:  / N  ()   -   ()

??? IDEBDOS: SD -  , SD=0  SD=1 -    SD,   -  IDE.


#ifdef ORI_UZIX
	UDATA(u_argn1)=B_LDIRTO2(BUFSIZE/2, oldname, (void*)TEMPDBUF);
	UDATA(u_argn2)=B_LDIRTO2(BUFSIZE/2, newname, (void*)TEMPDBUFX);
#endif

	ld	de,PSWAP_OFFSET
	add	hl,de				; /* 20150116 */



/* 
== ORION AltairDos page 0 memory map
   0000 ---------------------
     |	 Screen0 - graphic
   4000 ---------------------
     |	 Screen1 - graphic
   8000 ---------------------
     |	 AltairDos ExtendedRAM: 4k segments 08,09,0a,0b	- planned for shared libc in future
   C000 ---------------------
     |	 CP/M crt driver 
     |	 + base fonts (KOI8-R) 		LOCAL MEMORY (accessed driven by 0F9 port: pages port)
   F000 ----------------------------------------------------------------------------------
	 |		SEE BELOW				COMMON MEMORY (accesed from any page)


== ORION AltairDos page 1 memory map
   0000 ---------------------
     |	 Screen0 - color attributes (16 color)
   4000 ---------------------
     |	 Screen1 - color attributes (16 color)
   8000 ---------------------
     |	 AltairDos ExtendedRAM: 4k segment 18			- planned for IDEBDOS driver
   9000 ---------------------
     |	 CP/M (AltairDOS) kernel	LOCAL MEMORY (accessed driven by 0F9 port: pages port) 
   F000 ----------------------------------------------------------------------------------
	 |		SEE BELOW				COMMON MEMORY (accesed from any page)


== ORION UZIX kernel space map (page 2, e.i. CP/M TPA):
   0000 ---------------------
     |	   system vectors
   0010 ---------------------
     |	  reserved for CP/M
   0100 ---------------------
     |	    kernel code
   E000 ---------------------
     |		kernel heap
   Exx ---------------------
     |	    kernel stack
   EDxx ---------------------
     |	  kernel subroutines for ssiz/scop (argv/env services)
   E860 ---------------------
     |	  CP/M (AltairDOS) BDOS (actually wrapper calling to page1 code)
   E8D0 ---------------------
     |	  CP/M (AltairDOS) BIOS (actually wrapper calling to page1 code)
   ED80 ---------------------
     |     UZIX SRV_STACK (for ISR routine)
   EDF9 ---------------------
     |     UZIX TEMPDBUF  (for unplanned disk IO)
   EFF8 ---------------------
     |	  _OLDYINTVEC  byte:word (3b)  ^ ^ ^
     |	  _PRCIMSTACK  word			   | | |
     |	  _BNKMARKER   byte         LOCAL MEMORY (accessed driven by 0F9 port: pages port)
   F000 ----------------------------------------------------------------------------------
	 |		SEE BELOW				COMMON MEMORY (accesed from any page)


== ORION UZIX process space map (pages 3..15):
   0000 ---------------------
     |	   system vectors
   0010 ---------------------
     |	reserved for CP/M emu
   0100 ---------------------
     |	 user process (TPA)
   EBC0 ---------------------
     |	CP/M BDOS/BIOS console functions emulator (BDOS 1..12, BIOS 1..4 functions)
   ECxx ---------------------
     |	  kernel subroutines for getc/putc
   EDxx ---------------------
     |	  kernel subroutines for ssiz/scop (argv/env services)
   EDxx ---------------------
     |	  kernel subroutines for GoUnix/GoExit
   EExx ---------------------
     |	  kernel subroutines for swapin/swapout
   EE80 ---------------------
     |     FSTACK_BCKP
   EF80 ---------------------
     |     UDATA_STASH
   EFF8 ---------------------
     |	  _RETPAGE 	   byte 
     |	  _GOSWAPSTACK word
     |	  _GOUNIXSTACK word			   ^ ^ ^
     |	  _PRCIMSTACK  word			   | | |
     |	  _BNKMARKER   byte         LOCAL MEMORY (accessed driven by 0F9 port: pages port)
   F000 ----------------------------------------------------------------------------------
     |	   FAREA_STACK             COMMON MEMORY (accesed from any page)
   F100 ---------------------		 |  |  |
     |	  IDEBDOS routines			 \/ \/ \/
   F120 ---------------------
     |	  CP/M tty routines
   F14x ---------------------
     |	  CP/M tty buffer
   F162 ---------------------
     |	  dtsize       byte
	 |   _ret_page     byte
	 |   _ret_addr	   word	     
	 |   _ret_sp	   word	     
	 |	_switch_page   byte	
     |	  U_DATA   120 bytes
   F1E2 ---------------------
     |	  CP/M crt routines
   F201 ---------------------
     |	CP/M interbank routines: BLDIR, BJMP, BCALL, BRET, BLDB, BSTB 
   F2xx ---------------------
     |	CP/M int 50Hz ISRs: MINT, MDI, MEI;  ISR_RET=0f2e3h, F3STACK=0F2B5h
   F2FB ---------------------
     |	reserved int vector word
     |	TTY IM2  int vector word
     |	50Hz IM2 int vector word
   F301 ---------------------
     |	CP/M interbank vectors (page:addr, 3 bytes):
     |	YBDOS			bank:addr=byte:word
     |	YBIOSWARM		bank:addr=byte:word
     |	YBIOSCONST		bank:addr=byte:word
     |	YBIOSCONIN		bank:addr=byte:word
     |	YBIOSCONOUT		bank:addr=byte:word
     |	YBIOSLSTOUT		bank:addr=byte:word
     |	YBIOSAUXOUT		bank:addr=byte:word
     |	YBIOSAUXIN		bank:addr=byte:word
     |	YBIOSHOME		bank:addr=byte:word
     |	YBIOSSELDISK	bank:addr=byte:word
     |	YBIOSSELTRK		bank:addr=byte:word
     |	YBIOSSELSEC		bank:addr=byte:word
     |	YBIOSSETDMA		bank:addr=byte:word
     |	YBIOSREAD		bank:addr=byte:word
     |	YBIOSWRITE		bank:addr=byte:word
     |	YBIOSLSTST		bank:addr=byte:word
     |	intvec (INT 50Hz)		  byte:word
     |	intkey (ctrl+shft+key)    byte:word
   F334 ---------------------
     |	  F3-stack (for interbank routines)
   F3C0 ---------------------
     |	  ROM-BIOS Monitor vectors, variables and constants
   F400 ---------------------
   F500	  keyboard PPA 8255
   F600	  romdisk  PPA 8255
     |	  printer  PPA 8255
   F700 ---------------------
     |	  user devices ports
   F800 ---------------------
     |	  ROM-BIOS Monitor code (ROM)
   FFFF ---------------------
*/

SWAPPING (actually RAM pages switching and areas F000..F1FF, F162..F1DF backup):

SWAPOUT    :
		1.     ( unix() -    F000-)
			,    :
				.  SP   (FSTACK_BCKP-2)   
				.  (B_COPY)      FSTACK_BCKP   
				.  (B_COPY) U_DATA  UDATA_STASH   
				.  ,       
			 -      ( swapin() -     ),
			         unix()  
				
		2.      (SP     _SRV_STACK 0edf6h,   ) -
			       . ,    :
				.    ":"   (     ,    ), 
					  PRC_IMSTACK  SP,       
					   F000,   1. ( B_COPY() )
				.  (B_COPY) U_DATA  UDATA_STASH, FAREASTACK  FSTACK_BCKP   
				.     :
                      retstack (   )   static _old_retstack,
						_ret_to=*(retstack+4 /*push af, push hl in proc page*/); *(retstack+4)=before_swapin;
						_ret_to   F-  dtsize -   u_data
						*(retstack+4)   before_swapin -   ! ..  INT50 push af, push hl  !
				.     (  F300-)    save_context()      
					 	  ,        ,     - 
					       :  ,     FSTACK_BCKP:  


						
SWAPIN -    .        .
      _RETPAGE   (  ), .. swapout     ,
    -  unix().     ISR_RET    :  ISR_RET  AF   
 .  swapin -     ,       .
				. di
				.  256   (FSTACK_BCKP)  (FAREA_STACK)       (B_COPY)
				.  120   (UDATA_STASH)  (U_DATA)   
				.            ISR_RET,         ret
				.   JP BRET.
						

