?login_element?

Subversion Repositories NedoOS

Rev

Rev 1031 | Blame | Compare with Previous | Last modification | View Log | Download

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