?login_element?

Subversion Repositories NedoOS

Rev

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

  1. INali8
  2.         get
  3.         next
  4.         ld c,a
  5.         ld b,0
  6. INal_bc
  7.         call IN_bc_to_bc
  8.         ld a,c
  9.         ld (_AL),a
  10.        _Loop_
  11. INaldx
  12.         ld bc,(_DX)
  13.         jr INal_bc
  14.  
  15. INaxi8
  16.         get
  17.         next
  18.         ld c,a
  19.         ld b,0
  20. INax_bc
  21.         call IN_bc_to_bc
  22.         ld (_AL),bc
  23.        _Loop_
  24. INaxdx
  25.         ld bc,(_DX)
  26.         jr INax_bc
  27.  
  28. OUTi8al
  29.         get
  30.         next
  31.         ld c,a
  32.         ld b,0
  33.         ld hl,(_AL)
  34.         call OUTbc_l
  35.         _LoopC
  36. OUTi8ax
  37.         get
  38.         next
  39.         ld c,a
  40.         ld b,0
  41.         ld hl,(_AX)
  42.         call OUTbc_hl
  43.         _LoopC
  44. OUTdxal
  45.         ld bc,(_DX)
  46.         ld hl,(_AL)
  47.         call OUTbc_l
  48.         _LoopC
  49. OUTdxax
  50.         ld bc,(_DX)
  51.         ld hl,(_AX)
  52.         call OUTbc_hl
  53.         _LoopC
  54.  
  55. OUTbc_hl
  56.         ;ret
  57. OUTbc_l
  58.         ret
  59.  
  60. IN_bc_to_bc
  61.         ld hl,0x03da
  62.         or a
  63.         sbc hl,bc
  64.         jr z,IN_03da ;может быть 3ba todo
  65.        ld hl,0x0060
  66.        or a
  67.        sbc hl,bc
  68.        jr z,IN_0060 ;for mision
  69.        inc hl ;ld hl,0x0061
  70.        or a
  71.        sbc hl,bc
  72.        jr z,IN_0061 ;for mision
  73.        ld hl,0x0201
  74.        or a
  75.        sbc hl,bc
  76.        jr z,IN_0201 ;for planeta
  77.         ld hl,0x0202
  78.         or a
  79.         sbc hl,bc
  80.         jr z,IN_0202
  81.         ld hl,0x0040
  82.         or a
  83.         sbc hl,bc
  84.         jr nz,IN_skip
  85. ;in al,0x40          ; Read timer counter 0
  86.       if 1
  87.         ld a,0
  88.         inc a
  89.         ld ($-2),a
  90.         ld c,a
  91.         ld b,a
  92.       else
  93.         ld bc,(timer_cnt);(timer)
  94.        ;srl b
  95.        ;rr c
  96.        ;srl b
  97.        ;rr c
  98.        ;ld b,c
  99.        ld a,r
  100.        add a,a
  101.        add a,c
  102.        ld c,a
  103.        endif
  104.        ;ld bc,0xffff
  105.         ret
  106. IN_skip
  107.         ld bc,0xffff
  108.         ret
  109.  
  110. ;Порт 60h при чтении содержит скан-код последней нажатой клавиши.
  111. ;ещё отжатие (+0x80)
  112. ;Порт 61h управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Этот порт доступен как для чтения, так и для записи. Для нас важен самый старший бит этого порта. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 - разблокирована.
  113. ;Так как порт 61h управляет не только клавиатурой, при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта. Для этого можно сначала выполнить чтение содержимого порта в регистр, изменить состояние старшего бита, затем выполнить запись нового значения в порт:
  114. ;        in      al, 61h
  115. ;        or      al, 80h
  116. ;        out     61h, al
  117.        
  118. IN_0060
  119.         push de
  120.      ;DISABLE_IFF0_KEEP_IY
  121.         ;OS_GETKEY
  122.        ld a,(curpg4000) ;ok
  123.        push af
  124.        ld a,(pgprog)
  125.        SETPG4000
  126.         call keyscan_getkey
  127.        ;or a
  128.        ;jr z,IN_0060_nokey
  129.       if 0
  130.        push af
  131.        and 0x7f
  132.         cp 0x60
  133.         jr c,$+4
  134.         sub 0x20
  135.         ld c,a
  136.         ld b,0
  137.         ld hl,tkeytoscancode
  138.         add hl,bc
  139.        pop af
  140.         xor (hl)
  141.         and 0x80
  142.         xor (hl)
  143.       endif
  144.      ;ENABLE_IFF0_REMEMBER_IY ;иначе pop iy запорет iy от обработчика прерывания
  145.       ;ld c,0x18
  146.       ; ld a,r
  147.       ; and 7
  148.        ;add a,a
  149.       ; add a,c
  150.        ld c,a
  151.        ;jr $
  152.        pop af
  153.        push bc
  154.        SETPG4000
  155.        pop bc
  156.         pop de
  157.         ret
  158. IN_0061
  159.         ;ld a,0xfb
  160.         ;in a,(0xfe)
  161.         ;cpl
  162.         ld c,0;a
  163.        ;ld a,r
  164.        ;add a,a
  165.        ;add a,c
  166.        ;ld c,a
  167.         ret
  168.  
  169. IN_0201
  170. ;проверяется по маске 3 (planeta). не помогает
  171.         ;jr $
  172.         ld a,r
  173.         rra
  174.         rra
  175.         ld c,a
  176.         ret
  177.  
  178. IN_0202
  179. ;проверяется на равенство 3f (ptica)
  180.         ld bc,0x003f
  181.         ret
  182.  
  183. ;0x03da - порт видеоконтроллера. проверяется на равенство 8 - во время КСИ? (pixeltown) и на and 1 (cgademo)
  184. ;- bit 0 Display Enable-Logical 0 indicates the CRT
  185. ;raster is in a horizontal or vertical retrace
  186. ;interval. This bit is the real time status of the
  187. ;display enable signal. Some programs use this
  188. ;status bit to restrict screen updates to inactive
  189. ;display intervals. The Enhanced Graphics
  190. ;Adapter does not require the CPU to update the
  191. ;screen buffer during inactive display intervals to .~
  192. ;avoid glitches in the display image.
  193. ;- bit 3 Vertical Retrace-A logical 0 indicates that video
  194. ;information is being displayed on the CRT
  195. ;screen; a logicall indicates the CRT is in a
  196. ;vertical retrace interval. This bit can be
  197. ;programmed to interrupt the processor on
  198. ;interrupt level 2 at the start of the vertical
  199. ;retrace. This is done through bits 4 and 5 of the ~
  200. ;Vertical Retrace End Register of the CRTC.
  201. IN_03da
  202.         ld a,r
  203.        rra
  204.        rra
  205.         and 8+1
  206.         ld c,a
  207.         ld b,0
  208.         ret
  209.  
  210.        if 0
  211. tkeytoscancode
  212.        ;db 0x20+128 ;unpress D
  213.         ds 13+tkeytoscancode-$
  214.         db 0x1c ;enter
  215.         ds 32+tkeytoscancode-$
  216.         db 0x39 ;space
  217.         ds 48+tkeytoscancode-$
  218.         db 0x0b,2,3,4,5,6,7,8,9,10
  219.         ds 0x41+tkeytoscancode-$
  220.         db 0x1e ;(A)
  221.         db 0x30 ;(B)
  222.         db 0x2e ;(C)
  223.         db 0x20 ;(D)
  224.         db 0x12 ;(E)
  225.         db 0x21 ;(F)
  226.         db 0x22 ;(G)
  227.         db 0x23 ;(H)
  228.         db 0x17 ;(I)
  229.         db 0x24 ;(J)
  230.         db 0x25 ;(K)
  231.         db 0x26 ;(L)
  232.         db 0x32 ;(M)
  233.         db 0x31 ;(N)
  234.         db 0x18 ;(O)
  235.         db 0x19 ;(P)
  236.         db 0x10 ;(Q)
  237.         db 0x13 ;(R)
  238.         db 0x1f ;(S)
  239.         db 0x14 ;(T)
  240.         db 0x16 ;(U)
  241.         db 0x2f ;(V)
  242.         db 0x11 ;(W)
  243.         db 0x2d ;(X)
  244.         db 0x15 ;(Y)
  245.         db 0x2c ;(Z)
  246.         ds 96+tkeytoscancode-$
  247.        endif
  248.