
ਫ 1


     ਢ 室 ⥪ 楤 ।
஢ ⥪, ᠭ  ᥬ Z80. 楤
室  ⥪,   -  ਠ⮢  
128 ⠭ (᫨, 筮, ⥪   ࠭),
 騥 ⠭. । ஢
ந室  ⠡. 10.


ࢮ砫 ਠ 楤


;---------------------------------------
;楤 DEF_CODE । ஢
;⥪.
;
;室: HL -  砫 ⥪,
;      BC -  (>0).
;
;室: A=0 - ALT,
;         1 - WIN,
;         2 - KOI.

DEF_CODE   EXX

;塞 BUF_1-BUF_3:

           LD   HL,BUF_1
           LD   DE,BUF_1+1
           LD   BC,0+(128*3)-1
           LD   (HL),#FF
           LDIR

;  ୠ⨢ ॣ ࠭:
; H - BAD_1', L - ALL_1
; D - BAD_2'
; B - BAD_3', C - ALL_3
; E - ⠭ #FF,  ਣ 
;     쭥襬,  ४樨 .
;
;ALL_2  뢠, ..
;ALL_2=ALL_3.

; BC=0 ᫥ LDIR!

           DEC  B     ;BC=#FF00
           LD   H,B
           LD   L,C   ;HL=#FF00
           LD   D,B   ;D=#FF
           LD   E,B   ;E=#FF

           EXX

;HL -  砫 ⥪, BC - .

;砥  BC ⢮ ⠭
;ᨬ -  1   ⥪:

           DEC  BC

;᫨ 0 - ࠧ 室, , 
;஢ - ALT:

           LD   A,B
           OR   C
           RET  Z         ;A=0

; 横:

DC_1       PUSH BC        ;稪.

;ࠡ뢠 ⥪饥 ⠭ 
;   ਠ⮢:

           LD   DE,RET_
           LD   BC,BUF_1
           CALL WORK_2S
           EXX
           JR   Z,DC_2
           DEC  H
DC_2       ADD  A,L
           LD   L,A
           EXX

           LD   DE,WIN2ALT
           LD   BC,BUF_2
           CALL WORK_2S
           JR   Z,DC_3
           EXX
           DEC  D
           EXX

DC_3       LD   DE,KOI2ALT
           LD   BC,BUF_3
           CALL WORK_2S

           POP  BC

           EXX
           JR   Z,DC_4
           DEC  B
DC_4       ADD  A,C
           LD   C,A

;஢ઠ:  ,   
;ਠ⮢ 㦥 ࠫ 128 ⠭?

           OR   L  ;A=C!
           RLA
           JR   C,DC_9

; - 室  ⥪ , 
;  :

           EXX
           INC  HL
           DEC  BC
           LD   A,B
           OR   C
           JR   NZ,DC_1

; ᮡ࠭. , ᫨
; -  ਠ⮢
;⨬ ⠭   1/32
; 饣  ᫠,  ⠥, 
; ⮬ ਠ    뫮:

           EXX

DC_9       LD   A,L
           RLCA
           RLCA
           RLCA
           AND  7    ;ALL/32
           INC  A    ;ALL/32+1
           CPL       ;255-ALL/32-1
           CP   H    ;255-ALL/32-1 CP 255-BAD
           JR   NC,DC_5
           LD   H,E  ;ALL/32+1 > BAD
                     ;(.. ALL/32 >= BAD)
DC_5       LD   A,C
           RLCA
           RLCA
           RLCA
           AND  7
           INC  A
           CPL
           CP   B
           JR   NC,DC_6
           LD   B,E

DC_6       CP   D
           JR   NC,DC_7
           LD   D,E

; ⠡ ।塞 ஢:

DC_7       LD   E,C    ;ALL_2=ALL_3.

           XOR  A      ;A:=0, 䫠 C 뢠.
           SBC  HL,DE
           RLA         ; C 뢠.
           ADD  HL,DE
           SBC  HL,BC
           RLA         ; C 뢠.
           EX   DE,HL
           SBC  HL,BC
           RLA

           LD   HL,CODE_TAB
           LD   D,0
           LD   E,A
           ADD  HL,DE
           LD   A,(HL)

           RET

CODE_TAB   DB   0,0,#FF,2,1,#FF,1,2

;---------------------------------------
;楤 WORK_2S - ࠡ⪠ 
;⠭.
;
;室: HL -  ⠭,
;      DE -  / ४஢.
;      BC -    ᮮ.
;           ਠ.
;
;室: A=0 -   ⠭ ᪨
;             㪢,   ⠭
;             㦥 砫 ࠭.
;       A=1 -  ⠭ ᪨ 㪢.
;
; Z 襭, ᫨ ⠭ 
;⨬,  ⠭. (᫨ 
;室 A=0,  䫠 Z ⠭.)
;
;HL  .

WORK_2S    PUSH HL
           LD   (ADR_SUB),DE
           LD   (ADR_BUF),BC

           CALL GET_WORK ; ᨬ
           JR   C,NO_L   ; 㪢!
           LD   B,A

           INC  HL

           CALL GET_WORK ;ன ᨬ
           JR   C,NO_L   ; 㪢!
           LD   C,A

; ᨬ - 㪢.

           LD   D,0
           LD   A,B
           ADD  A,A
           ADD  A,A
           LD   E,A
           LD   A,C
           RRA
           RRA
           RRA
           AND  3
           ADD  A,E
           LD   E,A

           LD   A,C
           CPL
           AND  7
           ADD  A,A
           ADD  A,A
           ADD  A,A
           OR   #46
           LD   (C_BIT_1),A
           LD   (C_BIT_2),A
           ADD  A,#40
           LD   (C_RES),A

;DE - ᬥ饭  ⠡ BUF.

;஢塞: ᫨ ᮮ⢥騩  
;⠡ ࠢ 0, ,  ⠭
;㦥 砫 ࠭.  室,
;  ( ᫨   뫨 
;㪢).

           LD   HL,0 ; .
ADR_BUF    EQU  $-2
           ADD  HL,DE
           BIT  0,(HL)
C_BIT_1    EQU  $-1
           RES  0,(HL) ;ࠧ 塞.
C_RES      EQU  $-1
           JR   Z,NO_L

; ⠭   砫.
;஢塞, ⨬   :

           LD   HL,TABLE_2S
           ADD  HL,DE

           BIT  0,(HL)
C_BIT_2    EQU  $-1

           LD   A,1
           POP  HL
           RET

;室, ᫨  ⠭ -  㪢, 
;᫨ ⠪ ⠭ 㦥 砫.

NO_L       XOR  A ;A=0, Z=1.
           POP  HL
RET_       RET

;---------------------------------------
;楤 GET_WORK   ᨬ,
;४  , ᫨  㪢,
;८ࠧ   0..31.
;
;室: HL -  ᨬ.
;
;室: ᫨  㪢,  A -  -
;         (0..31),  䫠 C
;       襭.  䫠 C=1.

GET_WORK   LD   A,(HL)
           CP   #80
           CALL 0      ;४஢.
ADR_SUB    EQU  $-2
           RET  C      ; 㪢.

;砥 浪 , ᫨ 㪢:

           CP   #A0
           JR   NC,GET_W1

           SUB  #80
           RET

GET_W1     CP   #B0
           JR   NC,GET_W2

           SUB  #A0
           RET

GET_W2     CP   #E0
           RET  C    ; 㪢.

           CP   #F0
           CCF
           RET  C    ; 㪢.

           SUB  #D0
           RET

;---------------------------------------
;楤 WIN2ALT ४ ᨬ
;⥪,  ண #80..#FF, 
;஢ WIN  ALT, ᫨  ᨬ
; ᪮ 㪢.  䫠 C
;襭,  ⠭.

WIN2ALT    CP   #C0
           RET  C    ; 㪢.

           SUB  #10
           CP   #E0
           RET  NC

           SUB  #30
           RET

;---------------------------------------
;楤 KOI2ALT ४ ᨬ
;⥪,  ண #80..#FF, 
;஢ KOI  ALT, ᫨  ᨬ
; ᪮ 㪢.  䫠 C
;襭,  ⠭.

KOI2ALT    CP   #C0
           RET  C

           PUSH HL
           ADD  A,TAB_K_A-#C0\256
           LD   L,A
           LD   A,TAB_K_A-#C0/256
           ADC  A,0
           LD   H,A

;᫨ ⠡ TAB_K_A  ᥪ
;࠭ ᥣ⮢,  ।騥 
;   
;LD H,TAB_K_A/256.

           LD   A,(HL)
           POP  HL
           RET

TAB_K_A    DB   "椥娩"
           DB   "㦢"
           DB   ""
           DB   ""

;---------------------------------------
; ⠭ ࠭ 
;஢  -  頥
;ணࠬ.

TABLE_2S

 db #00,#00,#00,#38,#01,#41,#08,#04
 db #02,#40,#08,#06,#03,#41,#0E,#7F
 db #00,#00,#08,#44,#00,#00,#00,#30
 db #21,#40,#2E,#F7,#00,#40,#0E,#40
 db #00,#00,#00,#38,#E2,#C0,#80,#7E
 db #58,#49,#0D,#7D,#00,#00,#8A,#24
 db #03,#40,#28,#62,#00,#51,#04,#20
 db #00,#00,#00,#38,#7B,#48,#0C,#60
 db #00,#00,#00,#24,#00,#40,#00,#00
 db #02,#40,#00,#00,#00,#00,#18,#38
 db #7B,#61,#0F,#ED,#43,#40,#0F,#7B
 db #5B,#45,#EF,#EF,#5B,#41,#47,#77
 db #53,#40,#08,#F5,#7B,#79,#6F,#F7
 db #FB,#FF,#FF,#FC,#80,#02,#08,#3E
 db #82,#51,#90,#34,#EA,#C2,#03,#FF
 db #80,#82,#18,#3D,#80,#02,#08,#3C

;---------------------------------------
; BUF_1-BUF_3 ࠭ ଠ
; ⮬,  ⠭ 㪢 㦥
;砫     ਠ⮢.

BUF_1      DS   128
BUF_2      DS   128
BUF_3      DS   128


⨬஢ ਠ 楤


     ﭢ 2004   ᠫ ⨬஢ ਠ
襯ਢ񭭮 楤. ᫨ ࠭  楤  ६
ࠡ ᯮ짮  128- ᨢ (BUF_1-BUF_3), 
⥯ - ⮫쪮 . 訫   ᠬ 楤, 
   ᨢ:  469 ⮢  393 -  76 ⮢
(ਢ   襣 ,    
㬥襭  砥 ᯮ ᨢ, ᯮ㥬  
楤,  "㤮" ᠬ).  ⮬   ਠ
楤 ࠡ⠥  ᪮쪮 ࠧ ॥.

;---------------------------------------------------------------
;楤 DEF_CODE । ஢ ⥪.
;
;室: HL -  砫 ⥪,
;      BC -  (>0).
;
;室: A -  ஢: 0 - ALT, 1 - WIN, 2 - KOI.

;TAB_KOI - ⠡  祭 浪  㪢
; ஢ KOI.

TAB_KOI    DB   30,0,1,22,4,5,20,3,21,8,9,10,11,12,13,14
           DB   15,31,16,17,18,19,6,2,28,27,7,24,29,25,23,26

DEF_CODE   EXX

;塞 BUF_1-BUF_2 祭 #FF:

           LD   HL,BUF_1
           LD   DE,BUF_1+1
           LD   BC,#FF
           LD   (HL),C
           LDIR

;᫨ BUF_1 稭  砫 ᥣ (.. 訩 
; ࠢ 0),  ।騥    ᫥騥 
; (DEC B  LD L,C)     ᫥騩
;ࠣ (  ⮬ ⠢ 4 ):
;
;           LD   HL,BUF_1
;           LD   B,#FF
;M1         LD   (HL),B
;           INC  L
;           JR   NZ,M1
;           LD   C,L      ;᫥ ⮣ BC=#FF00, L=0.

;  ୠ⨢ ॣ ࠭:
; H - BAD_1', L - ALL_1,
; D - BAD_2',
; B - BAD_3', C - ALL_2 (=ALL_3),
; E - ⠭ #FF,  ਣ  쭥襬,
;      ४樨 .

; BC=0 ᫥ LDIR!

           DEC  B
           LD   L,C

;BC=#FF00, L=0.

           LD   H,B   ;HL=#FF00
           LD   D,B   ;D=#FF
           LD   E,B   ;E=#FF

;⠪, BAD_1'=#FF, BAD_2'=#FF, BAD_3'=#FF, ALL_1=0, ALL_2=0.

           EXX

; 横.

MAIN_LOOP  DEC  BC      ;蠥 稪.
           LD   A,B
           OR   C       ; ⥪ ࠡ⠭?
           JR   Z,CALC  ;᫨  -  ᫥ १.

           LD   D,(HL)  ; ࢮ ᨬ.
           INC  HL
           LD   E,(HL)  ; ண ᨬ.

;᫨     ᨬ  #80 (.. 訩 ࠧ
;ࠢ 0) - ,   ᪠ 㪢     
;஢, ⮣ 室  砫 横.

           LD   A,D
           AND  E
           JP   P,MAIN_LOOP

           PUSH BC      ;࠭ 稪.
           PUSH HL      ;࠭  ᫥饣 ⠭.

           LD   B,0     ;祭 㤥 ᯮ짮 .

;᫨   ࠧ鸞   ࠢ 1 (,  訥
;ࠧ   ࠢ 1,  㦥 ⠭) - , 
;室   #C0-#FF   ᭠砫 ஢ ਠ
;WIN  KOI.  ࠧ 室  ஢થ ਠ ALT.

           ADD  A,A
           JP   P,V_ALT

;ਠ WIN.
;訥 5 ⮢  㪢 -    浪  㪢.

           LD   HL,BUF_2+#100 ;HL   #100, .. H 
                              ;  1  䠪᪮.
           CALL WORK_2S

           EXX
           JR   Z,DC_3
           DEC  D          ;BAD_2'=BAD_2'-1.
DC_3       AND  A          ;⠭ 砫 ࠭?
           JR   Z,V_ALT_0  ;᫨ ,   砫 
                           ; ਠ KOI, ⠪  ࠧ
                           ;室  ਠ ALT.
           INC  C          ;ALL_2=ALL_2+1.
           EXX

;ਠ KOI.
; DE ᥩ  ᨬ ⠭.
; ⭮,  ⠭ ࠭  砫.

           PUSH DE   ;࠭  ᨬ ⠭.

           LD   A,E  ; ன 㪢.
           AND  31

 IF TAB_KOI/256-((TAB_KOI+31)/256) ;============================

; TAB_KOI ᥪ ࠭ ᥣ⮢.

           LD   C,A
           LD   HL,TAB_KOI
           ADD  HL,BC      ;ᯮ,  B=0.
           LD   E,(HL)     ;稫  ன 㪢.

           LD   A,D        ; ࢮ 㪢.
           AND  31         ;᫥ ⮣ 䫠 C 襭.
           SBC  HL,BC      ;᫥ ⮣ HL=TAB_KOI.
           LD   C,A
           ADD  HL,BC      ;ᯮ,  B=0.

 ELSE ;=========================================================

; TAB_KOI  ᥪ ࠭ ᥣ⮢.

           LD   H,TAB_KOI/256
           ADD  A,TAB_KOI\256
           LD   L,A
           LD   E,(HL)     ;稫  ன 㪢.

           LD   A,D        ; ࢮ 㪢.
           AND  31
           ADD  A,TAB_KOI\256
           LD   L,A

 ENDIF ;========================================================

           LD   A,(HL)     ;稫  ࢮ 㪢.
           LD   H,1        ;ਧ " ஢ન", .. ,
                           ; ⠭   砫.
           CALL WORK_2S_2

           POP  DE ;⠭  ᨬ ⠭.

           JR   Z,V_ALT
           EXX
           DEC  B          ;BAD_3'=BAD_3'-1.
V_ALT_0    EXX

;ਠ ALT.
;஢塞,    ᨬ ⥪饣 ⠭ 
;᪨ 㪢  ஢ ALT,  ᫨ ,  砥  
;  A  E 浪  ᮮ⢥⢥ ࢮ 
;ன 㪢.

V_ALT      LD   HL,#B030   ;⠭ #B0  #30.
           LD   A,E        ; ண ᨬ.
           SUB  H
           JR   C,OK       ;室, ᫨ ᨬ - 㪢.
           CP   L
           JR   C,NO_ALT   ;室, ᫨ ᨬ -  㪢.
           CP   #40
           JR   NC,NO_ALT  ;室, ᫨ ᨬ -  㪢.
           LD   E,A

OK         LD   A,D        ; ࢮ ᨬ.
           CP   H
           JR   C,OK2      ;室, ᫨ ᨬ - 㪢.
           SUB  H
           CP   L
           JR   C,NO_ALT   ;室, ᫨ ᨬ -  㪢.
           CP   #40
           JR   NC,NO_ALT  ;室, ᫨ ᨬ -  㪢.

OK2        LD   HL,BUF_1+#100 ;HL   #100, .. H 
                              ;  1  䠪᪮.
           CALL WORK_2S_1

           EXX
           JR   Z,DC_2
           DEC  H          ;BAD_1'=BAD_1'-1.
DC_2       ADD  A,L        ;᫨ , 㢥稢 ALL_1  1.
           LD   L,A
           EXX

NO_ALT     POP  HL    ;⠭  ᫥饣 ⠭.
           POP  BC    ;⠭ 稪.

;஢ઠ:  ,    ਠ⮢ 㦥 ࠫ 128
;⠭ (⮣ 訩  ALL_1  ALL_2 ࠢ 1).

           EXX
           LD   A,L
           OR   C     ;᫥ ⮣ A=(ALL_1 or ALL_2).
           EXX
           JP   P,MAIN_LOOP  ;,  ࠫ.

; ᮡ࠭. , ᫨  -  ਠ⮢
;⨬ ⠭   1/32  饣  ᫠,
; ⠥,   ⮬ ਠ    뫮.

CALC       EXX

           LD   A,L ;ALL_1
           RLCA
           RLCA
           RLCA
           AND  7   ;ALL_1/32
           INC  A   ;ALL_1/32+1
           CPL      ;255-ALL_1/32-1
           CP   H   ;255-ALL_1/32-1 CP BAD_1' (BAD_1'=255-BAD_1)
           JR   NC,DC_5

;255-ALL_1/32-1 < 255-BAD_1
;   -ALL_1/32-1 < -BAD_1
;    ALL_1/32+1 > BAD_1
;      ALL_1/32 >= BAD_1
;         BAD_1 <= ALL_1/32

           LD   H,E ;BAD_1'=255 -> BAD_1=0.

DC_5       LD   A,C ;ALL_2 (=ALL_3)
           RLCA
           RLCA
           RLCA
           AND  7   ;ALL_2/32
           INC  A   ;ALL_2/32+1
           CPL      ;255-ALL_2/32-1
           CP   B   ;255-ALL_2/32-1 CP BAD_3' (BAD_3'=255-BAD_3)
           JR   NC,DC_6

;BAD_3 <= ALL_2/32 ( 뢠,  ALL_2=ALL_3).

           LD   B,E ;BAD_3'=255 -> BAD_3=0.

DC_6       CP   D   ;255-ALL_2/32-1 CP BAD_2' (BAD_2'=255-BAD_2)
           JR   NC,DC_7
           LD   D,E ;BAD_2'=255 -> BAD_2=0.

DC_7       LD   E,C

; HL=a, DE=b, BC=c.
;।塞 ஢ ( ⠡).

           XOR  A      ;A:=0, 䫠 C 뢠.
           SBC  HL,DE
           RLA
           ADD  HL,DE
           SBC  HL,BC
           RLA

;᫨ ᥩ A=0 - , a>=b  a>=c, ᫥⥫쭮,
;஢ - ALT.  ⮩ ஢  ࠧ ࠢ 0,
;⠪   ࠧ   楤.

           AND  A      ; C 뢠.
           RET  Z

; 筮 ⭮,  ஢  ALT.

           EX   DE,HL
           SBC  HL,BC

;᫨ ᥩ 䫠 C 襭,  b>=c, ᫥⥫쭮,
;஢ - WIN (  ࠢ 1),  - KOI (2).

           LD   A,1
           ADC  A,0
           RET

;---------------------------------------------------------------
;WORK_2S - ࠡ⪠ ⠭ ᪨ 㪢.
;
;室: B=0,
;      D -     浪  ࢮ 㪢,
;          訥   ।,
;      E -     浪  ன 㪢,
;          訥   ।.
;      ᫨  ஢, 砫  ࠭ 
;      ⠭,   HL 㪠뢠  128-⭮ ᨢ
;       ଠ樥  ⮬,  ⠭  ᬠਢ
;      ਠ 㦥 砫,  H 㢥祭  1.
;       ᨢ   ᯮ  ,
;      訩  ண ࠢ 0 ( ZX Spectrum ⠬ 
;      ࠢ 室 ). ᫨   ஢, 砫
;       ࠭  ⠭,  H=1.
;
;室: ᫨ ⠭ 㦥 砫,  A=0  䫠 Z
;       ⠭.  A=1,   ⮬, ᫨ ⠭
;        ⨬,  䫠 Z 襭,  -
;       ⠭.
;
;窠 室 WORK_2S_1 ᯮ,    㦥
;ᮤন 祭, ᮤঠ饥     
;㪢 ࢮ ᨬ ⠭ (ᮤন ॣ D ⮣
; ᯮ),  窠 室 WORK_2S_2 - , ஬ ⮣,
;祭  㦥 室   0-31.

WORK_2S    LD   A,D
WORK_2S_1  AND  31
WORK_2S_2  ADD  A,A
           ADD  A,A
           LD   C,A
           LD   A,E
           RRA
           RRA
           RRA
           AND  3
           ADD  A,C
           LD   C,A

           LD   A,E
           AND  7
           ADD  A,A
           ADD  A,A
           ADD  A,A
           OR   #46
           LD   (C_BIT_2),A

;BC - ᬥ饭  ᨢ ( 뢠, B=0!).

; ஢, 砫  ࠭  ⠭?

           DEC  H
           JR   Z,NO_CHECK

;, .

           LD   (C_BIT_1),A
           ADD  A,#40
           LD   (C_RES),A

;஢塞: ᫨ ᮮ⢥騩  ᨢ ࠢ 0, 
;⠭ 㦥 砫.

           ADD  HL,BC
           BIT  0,(HL)
C_BIT_1    EQU  $-1

;᫨ ⠭ 㦥 砫, 室.

           LD   A,B ;A=0
           RET  Z   ;Z=1

;⠭   砫. 砥,   ⨫.

           RES  0,(HL)
C_RES      EQU  $-1

;஢塞, ⨬   ⠭.

NO_CHECK   LD   HL,TABLE_2S
           ADD  HL,BC

;᫨ TABLE_2S 稭  , ⭮ 256,  ।騥
;     LD H,TABLE_2S/256: LD L,C.

           BIT  0,(HL)
C_BIT_2    EQU  $-1

           LD   A,1
           RET

;---------------------------------------------------------------
; ⠭ (⮡  ணࠬ,  ࠭
; ஢    ઠ쭮 ࠦ묨 祭ﬨ
;⮢).

TABLE_2S   DB #00,#00,#00,#1C,#80,#82,#10,#20
           DB #40,#02,#10,#60,#C0,#82,#70,#FE
           DB #00,#00,#10,#22,#00,#00,#00,#0C
           DB #84,#02,#74,#EF,#00,#02,#70,#02
           DB #00,#00,#00,#1C,#47,#03,#01,#7E
           DB #1A,#92,#B0,#BE,#00,#00,#51,#24
           DB #C0,#02,#14,#46,#00,#8A,#20,#04
           DB #00,#00,#00,#1C,#DE,#12,#30,#06
           DB #00,#00,#00,#24,#00,#02,#00,#00
           DB #40,#02,#00,#00,#00,#00,#18,#1C
           DB #DE,#86,#F0,#B7,#C2,#02,#F0,#DE
           DB #DA,#A2,#F7,#F7,#DA,#82,#E2,#EE
           DB #CA,#02,#10,#AF,#DE,#9E,#F6,#EF
           DB #DF,#FF,#FF,#3F,#01,#40,#10,#7C
           DB #41,#8A,#09,#2C,#57,#43,#C0,#FF
           DB #01,#41,#18,#BC,#01,#40,#10,#3C

;---------------------------------------------------------------
; ᨢ BUF_1  BUF_2 ࠭ ଠ  ⮬, 
;⠭ 㪢 㦥 砫 ᮮ⢥⢥  ਠ ALT
; WIN.  ᨢ  ᯮ     ⠪
;浪 -  ᯮ   樠樨!

BUF_1      DS   128
BUF_2      DS   128
