CLi² (Command Line Interface 2)

Сабжи короче

Postby amixgris » Tue, 06.09.2016 06:49:40

Бриз, не желаешь ли поменять способ перехода на функцию в API? Я тут набросал. По-моему так и короче, и время вызова всех функций одинаково.

Code: Select all
_cliApi:
        push hl
        push bc
        push de

; in:  A = subroutine number.
        LD      HL,sbr_ID
        LD      D,H
        LD      E,L
        LD      BC,sbr_vec - sbr_ID
        CPIR
        JR      NZ,absent; subroutine not found
        LD      BC,sbr_vec
        OR      A,A
        SBC     HL,DE
        DEC     HL
        ADD     HL,HL
        ADD     HL,BC
        LD      E,(HL)
        INC     HL
        LD      D,(HL)
        EX      DE,HL
        pop     de
        pop     bc
        ex      (sp),hl ; put function vector on stack and restore function argument in HL.
        ret
absent: pop     de
        pop     bc
        pop     hl
        ret
       

sbr_ID:
        db      #00, #01, #02, #03, #04, #05, #06, #07, #08, #09, #0A, #0B, #0C, #0D, #0E, #0F,
        db      #10, #11, #12, #13, #14, #15, #16, #17, #18, #19, #1A, #1B, #1C, #1D, #1E, #1F,
        db      #20, #21, #22, #23, #24, #25, #26, #27, #28, #29, #2A, #2B, #2C, #2D, #2E, #2F,
        db      #30, #31, #32, #33, #34, #35, #36, #37, #38, #39, #3A, #3B, #3C, #3D, #3E, #3F,
        db      #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #4A, #4B, #4C, #4D, #4E, #4F,
        db      #50, #51, #52, #53, #54, #55, #56, #57, #58, #59, #5A, #5B, #5C, #5D, #5E, #5F,
        db      #60, #61, #62, #63, #64, #65, #66
sbr_vec:
        dw      _initSystem
        dw      _reInitSystem
        dw      _getCliVersion
        dw      _reserved
        dw      _clearTxtMemory
        dw      _clearGfxMemory
        dw      _switchTxtMode
        dw      _switchGfxMode
        dw      _setGfxColorMode
        dw      _setGfxResolution
        dw      _setScreenOffsetX
        dw      _setScreenOffsetY
        dw      _printInit
        dw      _editInit
        dw      _printString
        dw      _printInputString
        dw      _printOkString
        dw      _printErrorString
        dw      _printAppNameString
        dw      _printCopyrightString
        dw      _printInfoString
        dw      _printStatusString
        dw      _printStatusOk
        dw      _printStatusError
        dw      _printErrParams
        dw      _printFileNotFound
        dw      _printFileTooBig
        dw      _printRestore
        dw      _printContinue
        dw      _printInputYN
        dw      _printInputRIA
        dw      _printCodeDisable
        dw      _printWithScroll
        dw      _clearIBuffer
        dw      _checkCallKeys
        dw      _loadFile
        dw      _loadFileLimit
        dw      _loadFileParts
        dw      _loadNextPart
        dw      _saveFile
        dw      _saveFileParts
        dw      _saveNextPart
        dw      _createFile
        dw      _createDir
        dw      _deleteFileDir
        dw      _renameFileDir
        dw      _checkFileExist
        dw      _checkDirExist
        dw      _getTxtPalette
        dw      _getGfxPalette
        dw      _setTxtPalette
        dw      _setGfxPalette
        dw      _setFont
        dw      _str2int
        dw      _int2str
        dw      _char2str
        dw      _char2hex-1
        dw      _fourbit2str
        dw      _mult16x8-1
        dw      _divide16_16
        dw      _parseLine
        dw      _printSymbolRepeat
        dw      _eatSpaces
        dw      _setAppCallBack
        dw      _setRamPage0Ext
        dw      _getRamAlloc
        dw      _moveScreenInit
        dw      _moveScreenUp
        dw      _moveScreenDown
        dw      _moveScreenLeft
        dw      _moveScreenRight
        dw      _getNumberFromParams
        dw      _getHexFromParams
        dw      _getHexPairFromParams
        dw      _nvRamOpen
        dw      _nvRamClose
        dw      _nvRamGetData
        dw      _nvRamSetData
        dw      _ps2Init
        dw      _ps2ResetKeyboard
        dw      _ps2GetScanCode
        dw      _getKeyWithShift
        dw      _waitAnyKey
        dw      _reserved
        dw      _reserved
        dw      _enableNvram
        dw      _disableNvram
        dw      _getLocale
        dw      _setMouseCursor
        dw      _enableAyPlay
        dw      _disableAyPlay
        dw      _uploadAyModule
        dw      _setPalNow
        dw      _showHideCursor
        dw      _setCurrentInk
        dw      _getCurrentInk
        dw      _setCurrentPaper
        dw      _getCurrentPaper
        dw      _long2str
        dw      _getCurrentDate
        dw      _getCurrentTime
        dw      _getMonthNameByNumber-1
        dw      _getDayNameByNumber-1
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby LessNick » Tue, 06.09.2016 08:52:55

Mor-Da wrote: а нам-то простым смертным што делать-то


Мдэ. пичально всё это конечно. Ну давай попробуем с малого. Вот вариант, с задержкой перед повтором клавиши - 10 (в оригинале 3). Попробуй как кнопки будут нажиматься.
Attachments
kernel.zip
(8.07 KiB) Downloaded 70 times
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 864
Joined: Thu, 26.07.2012 15:00:53

Postby amixgris » Tue, 06.09.2016 10:01:04

Нет, в твоём случае лучше так:

Code: Select all
_cliApi:

MAXSBR equ      #66

; in:  A = subroutine number.
        cp      MAXSBR+1
        ret     nc
       
        push hl
        push de
        ld      l,a
        ld      h,0
        add     hl,hl
        ld      de,sbr_vec
        add     hl,de
        ld      a,(hl)
        inc hl
        ld      h,(hl)
        ld      l,a
        pop     de
        ex      (sp),hl
        ret
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby VBI » Tue, 06.09.2016 12:06:29

amixgris, уже лучше. а то "хранить" номера от 0 до 66 без дыр и разрывов в номерации довольно примитивно
User avatar
VBI
 
Posts: 1884
Joined: Mon, 03.06.2013 09:20:29

Postby Mor-Da » Tue, 06.09.2016 17:58:09

LessNick wrote:Вот вариант, с задержкой перед повтором клавиши - 10 (в оригинале 3). Попробуй как кнопки будут нажиматься.
Спасибо, что не бросаете утопающих... Вообщем так, стало немного лучше, но все равно "даблит". По ощущениям, надо 30, а то и все 50.
User avatar
Mor-Da
 
Posts: 300
Joined: Fri, 12.02.2016 07:20:43
Location: Воткинск (родина П.И.Чайковского)

Postby LessNick » Tue, 06.09.2016 18:44:05

Mor-Da wrote:По ощущениям, надо 30, а то и все 50.


Ну по правде говоря это боюсь вообще изврат бутет, но давай попробуем. в архивах соответственно 30 и 50 задержка.

В будущем это настраиваемый параметр, просто в API настроек пока не вытащено.
Attachments
kernel.50.zip
(8.07 KiB) Downloaded 75 times
kernel.30.zip
(8.07 KiB) Downloaded 77 times
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 864
Joined: Thu, 26.07.2012 15:00:53

Postby Mor-Da » Tue, 06.09.2016 19:15:36

LessNick wrote:Ну по правде говоря это боюсь вообще изврат бутет, но давай попробуем. в архивах соответственно 30 и 50 задержка.
Все равно маловато. Комфортной работой и не пахнет. Нужно ишо искать костыль... или увеличить до 252?
User avatar
Mor-Da
 
Posts: 300
Joined: Fri, 12.02.2016 07:20:43
Location: Воткинск (родина П.И.Чайковского)

Postby LessNick » Tue, 06.09.2016 20:11:47

Mor-Da wrote:увеличить до 252?


да я могу хоть 1000 прикрутить, проблемы это явно не решит. Ибо как я уже писал раньше, железо не правильно возвращает код отпускания клавиши. Я уже честно говоря сильно сомневаюсь в комфорте с набором текста с задержкой в 1 секунду, а что уже говорить про 252/50 = в 5 секунд???

Короче ерунда всё это. Надо подумать. С ходу не могу сказать как это можно решить. Проблема в том, что Коши использует софтварный автоповтор, а я использую автоповтор самой клавиатуры, но для этого она должна НОРМАЛЬНО возвращать коды.
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 864
Joined: Thu, 26.07.2012 15:00:53

Postby Mor-Da » Tue, 06.09.2016 20:39:22

Еще, при запуске keyscan коды постоянно бегут не останавливаясь.
User avatar
Mor-Da
 
Posts: 300
Joined: Fri, 12.02.2016 07:20:43
Location: Воткинск (родина П.И.Чайковского)

Postby MVV » Tue, 06.09.2016 23:16:46

MVV wrote:В build 20160830 сделал возможность чтения HID Keyboard Report [modifier, Key1, Key2, Key3, Key4, Key5, Key6]
Port #0004 = modifier:
bit 0: left control
bit 1: left shift
bit 2: left alt
bit 3: left GUI (Win/Apple/Meta key)
bit 4: right control
bit 5: right shift
bit 6: right alt
bit 7: right GUI

Port #0104 = Key1
...
Port #0604 = Key6

Сразу получаем состояние восьми функциональных клавиш + 6 обычных, драйвер в разы меньше и проще, а не как в PS/2 - 4 кода только одной клавиши ))

Для того, чтобы разобраться как сейчас работает передача сканкода от клавиатуры, набери следующее
Code: Select all
10 PRINT AT 0,0;IN 4;" ";IN 260;" ";IN 516;" ";IN 772;" ";IN 1028;" ";IN 1284;" ";IN 1540;" ":GOTO 10

Заметь, это в разы удобнее, чем передача от PS/2. Аналогично передается дескриптор мыши (Byte 1:Buttons; Byte 2:Left/Right delta; Byte 3:Up/Down delta; Byte 4:Wheel delta; Byte 5 - 8: not used) и gamepad.
MVV
 
Posts: 473
Joined: Sun, 01.12.2013 22:48:17

Postby LessNick » Tue, 06.09.2016 23:43:09

MVV wrote:Заметь, это в разы удобнее


удобнее кому? у меня вся система завязана на приём и обработку 4х сканкодов. Ты сейчас мне предлагаешь выкинуть всё и переделывать под порты которых у меня нет ни в железе, ни хотя бы в эмуляторе? Где я буду в слепую тыкаться, ловить глюки и не понимать что я делаю? Зачем мне одновременный опрос 6 клавиш? я что управляю игрой? нет, у меня набор текста. Если ты сейчас в винде в блокноте зажмёшь 6 клавиш, то получишь повторяющийся последний код «AAAAAAAAAAAAAAAAAAAAAAAAAAAA» так в чём мой профит? Вот честно скажу, нет ни времени, ни тем более желания писать софтварные костыли для хардварной недоработки.

Я реально не понимаю, В ЧЁМ ПРОБЛЕМА реализовать на U16, нормальную передачу 4 скан кодов, как это сделано на ОРИГИНАЛЬНОМ железе?
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 864
Joined: Thu, 26.07.2012 15:00:53

Postby LessNick » Tue, 06.09.2016 23:44:39

Mor-Da wrote:Еще, при запуске keyscan коды постоянно бегут не останавливаясь.


Правильно! потому что когда ничего не нажато железо возвращает 4 нуля #00 #00 #00 #00, а U16 судя по твоему фото #F0 #00 #00 #00 <- что это за мусор я х/з
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 864
Joined: Thu, 26.07.2012 15:00:53

Postby MVV » Wed, 07.09.2016 09:03:04

LessNick wrote:Я реально не понимаю, В ЧЁМ ПРОБЛЕМА реализовать на U16, нормальную передачу 4 скан кодов, как это сделано на ОРИГИНАЛЬНОМ железе?

В том, что это в разы проще и универсальнее реализовать софтово в виде драйвера устройства, как это делают в нормальных устройствах. Реализация в железе съест около 1К5 LEs, т.к. используется табличное преобразование 8 + 6 сканкодов USB клавиатуры с двумя буферами (для отслеживания отпущенных клавиш) в последовательность сканкодов PS/2, а это соизмеримо с одним NextZ80 или двумя YM2149.
MVV
 
Posts: 473
Joined: Sun, 01.12.2013 22:48:17

Postby TS-Labs » Wed, 07.09.2016 09:42:00

Таблицу можно засунуть в М9К...
И второй вопрос: как автору пришла идея не ставить внешний МК для такого рода задач?
User avatar
TS-Labs
 
Posts: 5058
Joined: Thu, 26.07.2012 01:29:56

Postby MVV » Wed, 07.09.2016 10:03:55

TS-Labs wrote:И второй вопрос: как автору пришла идея не ставить внешний МК для такого рода задач?

Ну почему-же, VNC2 чем не внешний контроллер? Прикрученный к ПЛИС двумя каналами - UART(6 Mbaud) и SPI(Full/Half Duplex 24МГц). Осталось допилить для него прошивку, с поддержкой OSD меню; FLASH; SD Card. Кто возьмется помочь?
Last edited by MVV on Wed, 07.09.2016 10:13:19, edited 1 time in total.
MVV
 
Posts: 473
Joined: Sun, 01.12.2013 22:48:17

Postby TS-Labs » Wed, 07.09.2016 10:10:00

А PS/2 на нем сделать можно?
User avatar
TS-Labs
 
Posts: 5058
Joined: Thu, 26.07.2012 01:29:56

Postby MVV » Wed, 07.09.2016 10:15:52

TS-Labs wrote:А PS/2 на нем сделать можно?

Можно проще поступить, сделать переходник для uBus - PS/2, добавить два аппаратных модуля поддержки PS/2 клавиатуры и мыши... Но я его хотел под ZiFi задействовать или под FT81x...
Сейчас набросаю схемку подключения PS/2 к U16 через uBus+, сопряжение к LVTTL только придумать попроще...
MVV
 
Posts: 473
Joined: Sun, 01.12.2013 22:48:17

Previous

Return to Utilities

Who is online

Users browsing this forum: No registered users and 1 guest

x