; SLX.CO for M100 - runs in ALTLCD

	.org	64704

start:	LXI H,  MSG        
	CALL     011A2H      
	CALL     012CBH       
	CALL     00FE9H     
	RST 4                     
	MOV C,A           	; store A in C      

	CPI      053H       ;compare to S    
	JZ       S          

	CPI      04CH       ; compare to L 
	JZ       LL       

	CPI      058H         ; compare to X 
	RNZ                      

x:	CALL     FSTAK         ; subroutine to exchange 
Xloop:	MOV B,M                ; load B with contents of hl
	LDAX D                ; load a with contents of DE
	XCHG                     ; swap  HL and DE
	MOV M,B                ; store B in HL
	STAX D                 ; store A in DE
	XCHG                      ; swap HL and DE
	CALL     DONE         
	JMP      Xloop        ; loop till done


LL:   	CALL     FSTAK          ; subroutine to Load
Lloop:  LDAX D                ; load a from DE and store in HL
	MOV M,A                
	CALL     DONE          
	JMP      Lloop        ; loop till done


S:	DI                       ; subroutine to Save 
	CALL     SWAP         ; switch out rom for optrom, load HL and DE
Sloop:	MOV A,M                ; load A from HL and store in DE
	STAX D                 
	CALL DONE          
	JMP Sloop          ; loop till done




DONE:	INX H                 
	INX D               
	MOV A,H                
	ORA L                     
	RNZ                     ; return if HL <> 00   

	POP PSW                 ; if here then done, so exit 

	MVI A,00H  
	OUT 0E0H            

	MOV A,C                
	CPI 053H          ; retest  for S,  if S then return else RST0
	RZ                        ; RST0 for L,X
	RST 0                     




FSTAK:	DI                        
	POP B               ; get BC from current stack     
	LXI SP,  0FFFFH      ; reset stack pointer  
	PUSH B                 ; store BC on stack 

SWAP:	MVI A,01H          
	OUT 0E0H            ; bank switching

	LXI H, 08000H   ; load HL with ram starting address
	LXI D, 00000H   ; load DE with optrom starting address
	RET                       


MSG:	DB  53H, 2FH, 4CH, 2FH, 58H, 3AH, 1BH, 4BH, 00H     ; data S/L/X:
