
lmpr:          EQU  &FA
hmpr:          EQU  &FB
vmpr:          EQU  &FC
rom0_off:      EQU  %00100000
mode_4:        EQU  %01100000
base:          EQU  &F000

               ORG  base
               DUMP $

start:         DI   


               IN   A,(lmpr)
               LD   (v1+1),A


               IN   A,(vmpr)
               LD   (v2+1),A


               AND  %00011111
               OR   rom0_off
               OUT  (lmpr),A

               LD   HL,start
               LD   DE,start-&8000

               LD   BC,end-start
               LDIR 

               AND  %00011111
               OUT  (hmpr),A



               IN   A,(vmpr)
               OR   mode_4
               OUT  (vmpr),A

               LD   A,3+rom0_off
               OUT  (lmpr),A

;----------generate ^2--------------
sqrtab:        EQU  &E000

               LD   HL,sqrtab
lut22:         
               LD   A,L
               OR   A
               JP   P,positive
               NEG  
positive:      
               LD   C,A

               LD   D,0
               LD   E,D
               LD   B,E
               EX   DE,HL

add_lp:        
               ADD  HL,BC
               DEC  A
               JR   NZ,add_lp

               EX   DE,HL
               LD   (HL),E
               INC  H
               LD   (HL),D
               DEC  H

               INC  L
               JR   NZ,lut22
;------------------------------------
;build
               LD   HL,&8000
               LD   B,&C0
ylp:           
               LD   C,0
xlp:           
               LD   (HL),0
               CALL getcol
               INC  C
               XOR  A
               BIT  0,D
               JR   Z,next
               LD   A,D


               AND  &0F
               ADD  A,A
               ADD  A,A
               ADD  A,A
               ADD  A,A
put1:          
               LD   (HL),A


               CALL getcol
               LD   A,D
               AND  &0F

               OR   (HL)
               LD   (HL),A
next:          
               INC  HL
               INC  C
               JR   NZ,xlp
               DJNZ ylp


border:        
wait1:         LD   A,1
               IN   A,(&F8)
               CP   0
               JR   NZ,wait1

               LD   A,E
               LD   BC,&01F8
pal1:          
               OUT  (C),A
               INC  A
               INC  B
               BIT  4,B

               JR   Z,pal1
               DEC  E


;------------------------------wait key
wk:            
               XOR  A
               IN   A,(254)
               CPL  
               AND  31
               JR   Z,border

v1:            LD   A,0
               OUT  (lmpr),A
v2:            LD   A,0
               OUT  (vmpr),A

               EI   
               RET  
getcol:        
               PUSH HL
               LD   H,sqrtab/256
               LD   A,C
               SUB  &80
               LD   L,A
               LD   E,(HL)
               INC  H
               LD   D,(HL)
               DEC  H

               LD   A,B
               SUB  &60
               LD   L,A
               LD   A,(HL)
               INC  H
               LD   H,(HL)
               DEC  H
               LD   L,A

               ADD  HL,DE
;              ADD  HL,HL
               EX   DE,HL
               POP  HL

               RET  

end:           
