?login_element?

Subversion Repositories NedoOS

Rev

Rev 1018 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;без ускорения через margins
  2.         MACRO OUTcom
  3.         ENDM
  4.         MACRO CALCpgcom
  5.         ENDM
  6.         MACRO CALCpc
  7.         ENDM
  8.         MACRO CALCiypgcom
  9.         ENDM
  10.  
  11.         MACRO next
  12.         INC DE
  13.         ENDM
  14.  
  15. ;портит HL,BC!
  16. ;оптимизен slow (там в 95% случаев стек)
  17.         MACRO mem ;page [hl]
  18.         LD A,H
  19.         ADD A,A
  20.         jr NC,4f;lo
  21.           JP M,3f;pg
  22.             SET 6,H
  23.             LD A,(curpg2)
  24.            JP 5f;o
  25. 3;pg
  26.            LD A,(curpghi)
  27.            JP 5f;o
  28. 4;lo
  29.             JP M,6f;sl
  30.             LD A,H
  31.             OR #C0
  32.             LD H,A
  33.             LD A,(currom)
  34.        IF extpg5
  35.            JP 5f;o
  36. 6;sl
  37.             LD A,(curpg5)
  38.             SET 7,H
  39.        ENDIF
  40. 5;o
  41.         OUTPG
  42.        IF extpg5==0
  43. 6;sl
  44.        ENDIF
  45.         ENDM
  46.  
  47.         MACRO getmem ;a<=[hl]
  48.         mem
  49.         LD A,(HL)
  50.         ENDM
  51.  
  52. ;портит BC,HL!
  53.         MACRO putmem ;[hl]<=a
  54.         ;LOCAL
  55.         ;module lcl
  56.         ;LD (aa),A
  57.         ld ($+0x28),a
  58.         LD A,H
  59.         ADD A,A
  60.         jr NC,4f;lo
  61.           JP M,3f;pg
  62.             SET 6,H
  63.             LD A,(@curpg2)
  64.            JP 5f;o
  65. 3;pg
  66.            LD A,(@curpghi)
  67.        IF @extpg5
  68.             CP @pg5
  69.            JP NZ,5f;o
  70.             RES 7,H
  71.            JP 6f;sl
  72.        ELSE
  73.            JP 5f;o
  74.        ENDIF
  75. 4;lo
  76.           JP M,6f;sl
  77.             LD A,(@romon0) ;0=ПЗУ, #C0=ОЗУ
  78.             OR H
  79.            JP P,1f;q ;невозможно putmem в ПЗУ
  80.             LD H,A
  81.             LD A,(@currom)
  82.        IF extpg5
  83.            JP 5f;o
  84. 6;sl
  85.         BIT 5,H
  86.         jr NZ,7f;ns
  87.         LD A,L
  88.         AND #1F
  89.         CP 24
  90.         jr NC,ns
  91.          LD A,(aa)
  92.          LD (HL),A ;экран
  93. 7;ns
  94.         SET 7,H
  95.         LD A,@pg5
  96.        ENDIF
  97. 5;o
  98.         OUTPG
  99.        IF @extpg5==0
  100. 6;sl
  101.        ENDIF
  102. ;aa=$+1
  103.         LD (HL),0
  104. 1;q
  105.         ;ENDL
  106.         ;endmodule
  107.         ENDM
  108.  
  109. ;оптимизено ПЗУ и pg2
  110. ;портит BC,DE!
  111.         MACRO getnp ;a<=[de] ;not used outside this module!
  112.         LD A,D
  113.         ADD A,A
  114.         jr NC,4f;lo
  115.           JP M,3f;pg
  116.             SET 6,D
  117.             LD A,(curpg2)
  118.            JP 5f;o
  119. 3;pg
  120.            LD A,(curpghi)
  121.            JP 5f;o
  122. 4;lo
  123.        IF extpg5
  124.           JP P,8f;r
  125.             LD A,(curpg5)
  126.             SET 7,D
  127.            JP 5f;o
  128.        ELSE
  129.           JP M,9f;q
  130.        ENDIF
  131. 8;r
  132.             LD A,D
  133.             OR #C0
  134.             LD D,A
  135.             LD A,(currom)
  136. 5;o
  137.         OUTPG
  138. 9;q
  139.         LD A,(DE)
  140.         ENDM
  141.  
  142.         MACRO get ;a<=[de]
  143.         PUSH DE
  144.         getnp
  145.         POP DE
  146.         ENDM
  147.  
  148. ;портит BC!
  149.         MACRO getHL ;hl<=[de+=2]
  150.        PUSH DE
  151.         getnp
  152.         LD L,A
  153.         INC E
  154.         JP NZ,2f;x
  155.        POP DE
  156.        ;PUSH BC
  157.         next
  158.         get
  159.        ;POP BC
  160.         JP $+6
  161. 2;x
  162.        LD A,(DE) ;the same page
  163.        POP DE
  164.        INC E
  165.         next
  166.         LD H,A
  167.         ENDM
  168.  
  169. ;портит HL,A!
  170.         MACRO getmemBC
  171.        PUSH HL
  172.         mem
  173.         LD C,(HL)
  174.         INC L
  175.         JP NZ,1f;q ;внутри mem нет метки 1
  176.        POP HL
  177.        PUSH BC
  178.         INC HL
  179.         mem
  180.        POP BC
  181.         JP $+4
  182. 1;q
  183.        POP AF ;просто скипаем
  184.         LD B,(HL)
  185.         ENDM
  186.  
  187. ;портит HL,A,BC!
  188. ;нельзя ускорить, иначе не перехватить экран
  189. ;сделать ветку?
  190. ;вообще не перехватывать экран?
  191.         MACRO putmemBC
  192.        PUSH HL
  193.        PUSH BC
  194.         LD A,C
  195.         putmem
  196.        POP AF
  197.        POP HL
  198.         INC HL
  199.         putmem
  200.         ENDM
  201.