?login_element?

Subversion Repositories NedoOS

Rev

Rev 1107 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         module PASS
  2. ;       get passwords from ROM
  3. ;--------------------------------------------------
  4. ; testPass:
  5. ;       ld hl,0
  6. ;       ld b,22
  7. ; .nextP:
  8. ;       push bc
  9. ;       call .onePass
  10. ;       pop bc
  11. ;       djnz .nextP
  12. ;       jr $
  13.  
  14.  
  15. ; .onePass:
  16. ;       ld de,data
  17. ;       ld b,16
  18. ; .loop:
  19. ;       ld a,(hl)
  20. ;       xor l
  21. ;       and 15
  22. ;       cp #0A
  23. ;       jr c,.next
  24. ;       sub 6
  25. ; .next:
  26. ;       add #30
  27. ;       ld (de),a
  28. ;       inc hl
  29. ;       inc de
  30. ;       djnz .loop
  31. ;       push hl
  32. ;       ld de,data
  33. ;       ld bc,32
  34. ;       call #203c
  35. ;       pop hl
  36. ;       ret
  37. ;--------------------------------------------------
  38.         ; FIXME сдвинуть адрес начала генерации паролей за #0038 IM1 либо забить данными до IM1
  39. clearData:
  40.         ld hl,passData
  41.         ld de,passData + 1
  42.         ld bc,PASS_LENGTH
  43.         ld (hl),0
  44.         ldir
  45.         ret
  46. ;--------------------------------------------------
  47. setLevPass:
  48.         ; A - level number
  49.         ld b,PASS_LENGTH
  50.         ld de,passData
  51.         ld l,a
  52.         ld h,0
  53.         add hl,hl
  54.         add hl,hl
  55.         add hl,hl
  56.         add hl,hl
  57.        if EGA
  58.        set 7,h
  59.        set 6,h
  60.        endif
  61. .loop:
  62.         ld a,(hl)
  63.         xor l
  64.         and 15
  65.         cp #0A
  66.         jr c,.next
  67.         sub 6
  68. .next:
  69.         add #30
  70.         ld (de),a
  71.         inc hl
  72.         inc de
  73.         djnz .loop
  74.         ret    
  75. ;--------------------------------------------------
  76. checkPass:
  77.         ld de,0
  78.         ld c,e
  79.         ld b,(LEVELS_BEGIN - LEVELS_MAP) / 2    ; number of levels
  80. .nextPass:
  81.         ld hl,passData
  82.         push bc
  83.         push de
  84.  
  85.         ld b,PASS_LENGTH
  86. .nextChar:
  87.         ld a,(de)
  88.         xor e
  89.         and 15
  90.         cp #0A
  91.         jr c,.next
  92.         sub 6
  93. .next:
  94.         add #30
  95.         cp (hl)
  96.         jr nz,.nextP
  97.         inc hl
  98.         inc de
  99.         djnz .nextChar
  100.         pop de
  101.         pop bc
  102.         ret
  103.  
  104. .nextP:
  105.         pop hl
  106.         ld bc,PASS_LENGTH
  107.         add hl,bc
  108.         ex de,hl
  109.         pop bc
  110.         inc c           ; next level number
  111.         djnz .nextPass
  112.         ld c,#FF
  113.  
  114.         ret
  115. ;--------------------------------------------------
  116. init:
  117.         call fadeOutFull
  118.         call clearData
  119.         call clearScreen
  120.         ld a,SYSTEM.PASS_UPDATE
  121.         ret
  122. ;--------------------------------------------------
  123. update:
  124.  
  125.  
  126.         call input
  127.         call checkPass
  128.         ld a,c
  129.         cp #FF
  130.         ld a,SYSTEM.MAIN_MENU_INIT
  131.         ret z
  132.         ; убрать когда пароли будут хранить кол-во монет и жизней !!!
  133.         ld hl,1
  134.         ld (lives),hl
  135.         dec l
  136.         ld (coins),hl
  137.  
  138.         ld a,c
  139.         ld (currentLevel),a
  140.         ld a,SYSTEM.SHOP_INIT
  141.         ret
  142. ;--------------------------------------------------
  143. inputEnd:
  144.         pop de
  145.         pop hl
  146.         ret
  147. ;       ld hl,passData
  148. ;       ld bc,PASS_LENGTH
  149. ;       xor a
  150. ;       cpir
  151. ;       dec hl
  152. ;       cp (hl)
  153. ;       ret nz
  154. ;       call SOUND_PLAYER.SET_SOUND.dead
  155. input:
  156.         call clearData
  157.         call clearScreen
  158.         ld hl,#0141
  159.         ld (textColor),hl
  160.         ld hl,text
  161.         ld de,#40C9 - #40
  162.         call printText2x1
  163.         ld hl,#0405
  164.         ld (textColor),hl
  165.         ld de,#4808
  166.         ld hl,passData
  167. .loop:
  168.         push hl
  169.         push de
  170. .listen:
  171.         call SYSTEM.int
  172.         exx
  173.         call SOUND_PLAYER.play
  174.         exx
  175.         call CONTROL.digListener
  176.         ld hl,lastKeyPresed
  177.         call CONTROL.enter
  178.         jr z,inputEnd
  179.         call CONTROL.caps
  180.         jr z,.checkRemoveKey
  181.         ld a,(de)       ; current key
  182.         cp (hl)        
  183.         jr z,.listen    ; if current key == last key
  184.         or a
  185.         ld (hl),a       ; save last key pressed
  186.         jr z,.listen
  187.         jr .printNext
  188. .checkRemoveKey:
  189.         ld a,(de)
  190.         cp (hl)
  191.         jr z,.listen
  192.         cp '0'
  193.         jr nz,.listen
  194.         ld (hl),a
  195. .removeLastChar:
  196.         ; remove last char
  197.         pop de
  198.         pop hl
  199.         xor a
  200.         ld (#5c08),a
  201.         ld a,e
  202.         cp #09          ; first input low byte on screen
  203.         jr c,.loop
  204.         dec e
  205.         ld (hl),0
  206.         dec hl
  207.         ld (hl),' '
  208.         push hl
  209.         push de
  210.         call printText2x1
  211.         call SOUND_PLAYER.SET_SOUND.impact
  212.         pop de
  213.         pop hl
  214.         jr .loop
  215. .printNext:
  216.         pop de
  217.         pop hl
  218.         ex af,af
  219.         ld a,e
  220.         cp #08 + #10
  221.         jr z,.loop
  222.         ex af,af
  223.         ld (hl),a
  224. .print:
  225.         push hl
  226.         push de
  227.         call printText2x1
  228.         call SOUND_PLAYER.SET_SOUND.key
  229.         pop de
  230.         inc e
  231.         pop hl
  232.         inc hl
  233.         jr .loop
  234.         ret
  235. ;--------------------------------------------------
  236. text:   db "Enter password",TEXT_END
  237.         endmodule
  238.