Vlákno názorů k článku Práce s klávesnicí na ZX Spectru od _dw - Prepsal jsem jeste posledni program z kapitoly 15...

  • Článek je starý, nové názory již nelze přidávat.
  • 18. 5. 2023 4:44

    _dw

    Prepsal jsem jeste posledni program z kapitoly 15 do smycky. Takze jsem to stahnul ze 168 bajtu na 90 bajtu.

    ENTRY_POINT   equ $8000
    ROM_CLS       equ $0DAF
    
            org ENTRY_POINT
    
    BLINK_BIT     equ %10000000
    INTENSITY_BIT equ %01000000
    BLACK_COLOR   equ %000
    BLUE_COLOR    equ %001
    RED_COLOR     equ %010
    MAGENTA_COLOR equ %011
    GREEN_COLOR   equ %100
    CYAN_COLOR    equ %101
    YELLOW_COLOR  equ %110
    WHITE_COLOR   equ %111
    
    
    start:
        call ROM_CLS    ; smazání obrazovky a otevření kanálu číslo 2 (screen)
    
        ld   BC, str_keys_size    ; 3:10      print     Length of string
        ld   DE, str_keys         ; 3:10      print     Address of string
        call 0x203C               ; 3:17      print     Print our string with ZX 48K ROM
    
        ld  bc, 0xfef0            ; adresa portu, ze kterého budeme číst údaje
        ld  hl, 0x5800            ; adresa, od které budeme měnit barvové atributy
    keypress:
        in  a, (c)                ; vlastní čtení z portu (5 bitů)
        ld  e, 5                  ; počet atributů + počet testovaných kláves
    next_key:
        rra                       ; přesunout kód stisku klávesy do příznaku carry
        jr  nc, key_pressed       ; test stisku klávesy
        ld  (hl), WHITE_COLOR << 3
        db  0xD2                  ; jp nc,nn
    key_pressed:
        ld  (hl), INTENSITY_BIT | (RED_COLOR << 3)
    next:
        inc  l
        dec  e
        jr   nz, next_key         ; opakovat celou smyčku 5x
    
        ld   a, l
        add  a, 32-5
        ld   l, a
        rlc b
        jp   keypress             ; další test stisku kláves
    
    str_keys:                                  ; layout klávesnice z pohledu čipů ZX Spectra
        NEW_LINE      equ 13
        DB "^ZXCV", NEW_LINE
        DB "ASDFG", NEW_LINE
        DB "QWERT", NEW_LINE
        DB "12345", NEW_LINE
        DB "09876", NEW_LINE
        DB "POIUY", NEW_LINE
        DB $7f, "LKJH", NEW_LINE
        DB "_", $60, "MNB"
    str_keys_size equ $-str_keys
    
    end ENTRY_POINT

    PS: U Fuse mam problem, ze me to nebere u ceske klavesnice cisla a naopak u anglicke to v basicu vyvolava spatne prikazy.
    PPS: Jinak muj notebook zvladne ASDW (asi optimalizovano) + napriklad C+K+T a + space

  • 18. 5. 2023 8:01

    atarist

    Jo ASDW umi hodne hernich klavesnic, ktere se tvari, ze nemaji ghosting. Ale samozrejme maji (neni tam nikde cip se 100+ vstupy :-), akorat u tech "proflaklych" kombinaci si dali tu praci s matici, aby k nemu nedochazelo.