User Tag List

Страница 36 из 47 ПерваяПервая ... 323334353637383940 ... ПоследняяПоследняя
Показано с 351 по 360 из 466

Тема: Алан Кокс представил Unix-подобную ОС Fuzix, ядро которой потребляет около 40 Кб ОЗУ

  1. #351

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Переписывание процедур на асме у меня продвигается ОЧЕНЬ медленно. Но, думаю, в настоящее время, с появлением SDCC v.3.5 имеет смысл не ждать пока я что-нибудь "рожу", а попробовать собрать ОСь новым компилятором, плотность кода СУЩЕСТВЕННО выросла по сравнению с предыдущей версии.
    Последний раз редактировалось Sergey; 31.07.2015 в 07:20.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  2. #352

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Собрал на досуге последнюю версию. Алан там наворотил, и теперь изменена вся схема памяти: во-первых, используется только ОЗУ, во-вторых, используется экран в 0xC000. То есть переключаемые страницы используются для всего подряд - и экран в них, и код ядра, и пользовательские программы. Всё это безобразие собирается только sdcc со специальными патчами для возможности кросс-банковых CALL-ов.

    Затея достаточно интересная, конечно - и отлаживаться можно на любом эмуляторе (результат компиляции - z80/sna-файл), и в железе никаких изменений не требуется. Правда вот из-за этих новшеств драйвер бетадиска теперь не работает, и файловую систему не подсунуть.
    Вложения Вложения
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  3. #353

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не прошло и года...
    В общем, недавно вспомнил, что обещался printf на асме забацать. Спешу порадовать, что printf`у быть!
    Собственно, автомат написан, но сегодня не выложу, ибо код ещё очень грязен, и не весь формат, какой хотел, реализован.
    Это не сама printf, а служебная функция для её реализации. Её параметры: адрес п/п печати символа, адрес управляющей строки, адрес начала списка аргументов.

    Думаю нужно обсудить, до какой степени упростить функцию.
    Что поддержано на сегодня:
    - Печать строк (%s), символов (%c), чисел десятичных (%d,%i,%u), шестнадцатиричных (%x,%X) и восьмеричных (%o).
    - Размеры чисел от байта до лонга, т.е. спецификаторы "l" и "hh"
    - Печать незначащих нулей в старших разрядах - флаг "0"
    - Печать "+" перед положительным числом - флаг "+"
    На остальные спецификаторы стоят заглушки.
    Решил отказаться от обработки полей и выравнивания.
    Пока длина кода составляет 844 байта.
    Какие будут соображения?
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  4. #354

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    - Печать незначащих нулей в старших разрядах - флаг "0"
    Цитата Сообщение от Sergey Посмотреть сообщение
    Решил отказаться от обработки полей и выравнивания.
    так выравнивание почти то же самое, только выводить пробелы вместо нулей ??
    Прихожу без разрешения, сею смерть и разрушение...

  5. #355

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    так выравнивание почти то же самое, только выводить пробелы вместо нулей ??
    Я думал, чтобы знать сколько надо отступить от левой границы поля, надо знать длину выводимого текста заранее, а для этого нужно сначала вывести текст в буфер, посчитав символы, а только потом уже в поток. Ради ускорения я пишу так, что всё сразу выводится в поток. Для чисел расчитать заранее ещё можно, а для строки - нет. Или я не правильно прочёл описание формата.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  6. #356

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    надо знать длину выводимого текста заранее, а для этого нужно сначала вывести текст в буфер, посчитав символы,
    зачем вывести? можно ведь заранее посчитать и длину видимого текста форматирующей строки, и каждого параметра по отдельности (числового или строкового - неважно)
    Прихожу без разрешения, сею смерть и разрушение...

  7. #357

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    всё заглохло? Очень странно, видел какую-то сборку под Эву (которую так и не смог запустить, увидел только мельком начало инициализаци и всё...), только так и не понял, почему не поддержан тектовый режим, 4 метра памяти и другие навороты? Опять таки, есть тс-конфа, но и она не поддержана.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  8. #358

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    всё заглохло? Очень странно, видел какую-то сборку под Эву (которую так и не смог запустить, увидел только мельком начало инициализаци и всё...), только так и не понял, почему не поддержан тектовый режим, 4 метра памяти и другие навороты? Опять таки, есть тс-конфа, но и она не поддержана.
    Потому что нет особенного смысла поддерживать ОС, под которую нет софта, зато в ядре которой с периодичностью в месяц меняется ну просто всё.
    Мы по быстрому убедились, что за пару недель можно неспешно портировать фузикс на zx (ну, в каком-то виде). Это знание теперь с нами и никуда не денется.
    Мои патчи давно в апстриме и тоже никуда не денутся, Алан хоть на zx не упирает, но и поломанным несобирающимся тот тоже не лежит.

    Вот будет реальная причина возобновить работу - TCP/IP стек с юникс сокетами, например - тогда будем посмотреть.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  9. #359

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Вот будет реальная причина возобновить работу - TCP/IP стек с юникс сокетами, например - тогда будем посмотреть.
    Подпишусь.
    Пока что не было особо за что биться. Тоже жду что у них получится со стеком.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #360

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подумал, если буду ждать, пока улучшу процедуру, то хрен знает, когда я её выложу. Поэтому выкладываю как есть. Опробована в приложениях для бризовского CLI2. Для использования в своих целях замените подпрограмму вывода символа "OUTCHR":
    Код:
    OUTCHR::
            exx
            bit     7,c ; charcounter > 127 ?
            jr      nz,OCHe
    OUTCH:  ld      (de),a
            inc     de
            inc     c
    OCHe:   exx
            ret
    Сейчас процедура печатает в буфер, содержимое которого потом выводится средствами CLI2:
    Код:
    EXIT:   exx
            push    bc
            inc     de
            ex      de,hl
            ld      (hl),#0  ; ставим 0 в конце сформированной строки.
            exx
            ld      hl,#buffer
            ld      a,#0x0e
            call    0x8003 ; CLI2 printString

    Процедура полностью. Формат исходника - SDCC/sdasz80
    Код:
    unsigned int printfx(unsigned char* cmdstr,...) __naked
    {cmdstr;
    __asm
    TheFlag .equ     1
    TheNum  .equ     2
    TheSize .equ     3
    TheType .equ     4
    
    sz_l    .equ     0
    sz_hh   .equ     1
    sz_h    .equ     2
    sz_ll   .equ     3
    sz_j    .equ     4
    sz_z    .equ     5
    sz_t    .equ     6
    sz_L    .equ     7
    
    PRINTF::
            LD      (EXITT+1),SP
            POP     BC ; return addres
            POP     HL ; direct string addres
            EXX 
            LD      HL,#0
            ADD     HL,SP ; args ptr
            LD      BC,#0 ; C = char counter
            LD      DE,#buffer
            EXX 
            PUSH    HL
            PUSH    BC
            
    MCICLE: PUSH    HL
            CALL    RESET
            POP     HL
    WCICLE: LD      A,(HL)
            OR      A
            JR      Z,EXIT
            CP      #'%'
            JR      NZ,M3
            inc     hl
            ld      a,(hl)
            cp      #'%'
            jr      z,M3
    M4:     CALL    ParseFormat
            OR      A
            JR      NZ,M1   ; что за спецификатор?
            LD      A,(HL)  ; нераспознанный спецификатор печатается как обычный символ.
    M3:     CALL    OUTCHR
            INC     HL
            JR      WCICLE
    M1:     INC     HL
            CP      #TheType
            JR      Z,MCICLE
            LD      A,(HL)
            JR      M4
    
    EXIT:   exx
            push    bc
            inc     de
            ex      de,hl
            ld      (hl),#0
            exx
            ld      hl,#buffer
            ld      a,#0x0e
            call    0x8003
            pop     hl  ; char counter
    EXITT:  LD      SP,#0
            RET 
    
    ; parsing routines for PRINTF
    
    
    ParseFormat::
    ; in:  A = checking symbol.
            PUSH    HL
            LD      HL,#FlagL
            LD      D,H
            LD      E,L
            LD      BC,#5
            CPIR 
            JR      NZ,ChkNum ; found
    DoFlags: LD      BC,#FlagSbr
    DO:     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
            JP      (HL)
    ChkNum: LD      HL,#NumL
            LD      D,H
            LD      E,L
            LD      BC,#10
            CPIR 
            JR      NZ,ChkSize
            LD      C,A
            LD      A,#TheNum
            RET 
    ChkSize:
            LD      HL,#SztpL
            LD      D,H
            LD      E,L
            LD      BC,#6
            CPIR 
            JR      NZ,#ChkType
            LD      BC,#SizeSbr
            JR      DO
    ChkType:
            LD      HL,#TypeL
            LD      D,H
            LD      E,L
            LD      BC,#7; 19
            CPIR 
            JR      NZ,ChkPoint
    DoType:
            LD      BC,#TypeSbr
            JR      DO
    
    ChkPoint:
            XOR  A,A
    DoPresn:
    DoStar:
            RET 
    
    ; service subroutines for PRINTF
    
    I2D::   LD      C,#0
            LD      DE,#10000
            CALL    CNT
            LD      DE,#1000
            CALL    CNT
            LD      DE,#100
            CALL    CNT
            LD      DE,#10
            CALL    CNT
            LD      A,L
            CALL    OUTNUM
            RET 
    CNT:    XOR     A,A
    CNTL:   OR      A,A
            SBC     HL,DE
            JR      C,CNT1
            INC     A
            JR      CNTL
    CNT1:   ADD     HL,DE
            CALL    OUTNUM
            RET 
    
    ;-----------------------
    GETWORD::
    GETPTR::
            EXX 
            LD      E,(HL)
            INC     HL
            LD      D,(HL)
            INC     HL
            PUSH    DE
            EXX 
            POP     DE
            RET 
    ;-----------------------
    GETBYTE::
            EXX 
            LD      A,(HL)
            INC     HL
            EXX 
            RET 
    
    OUTSTR::
            LD      A,(HL)
            OR      A
            RET     Z
            CALL    OUTCHR
            INC     HL
            JR      OUTSTR
    
    OUTCHR::
            exx
            bit     7,c ; charcounter > 127 ?
            jr      nz,OCHe
    OUTCH:  ld      (de),a
            inc     de
            inc     c
    OCHe:   exx
            ret
    
    
    OUTNUM::
            PUSH    HL
            LD      HL,#zero
            OR      A
            JR      Z,oNM1
            SET     0,(HL)
            JR      oNM2
    oNM1:   BIT     0,(HL)
            JR      Z,oNMe
            JR      oNMo
    oNM2:   CP      #0x0A
            JR      C,oNMo  ; not HEX
            BIT     2,(HL)
            JR      Z,oNM3  ; upper case HEX
            ADD     A,#32   ; lower case HEX
    oNM3:   ADD     A,#7
    oNMo:   ADD     A,#"0"
            CALL    OUTCHR
    oNMe:   POP     HL
            RET 
    
    RESET:: LD      HL,#sizes
            LD      DE,#sizes+#1
            LD      BC,#12
            LDIR 
            EX      DE,HL
            LD      (HL),#6
            RET
            
    ; обработка флагов
    FlagSbr:
            .dw      doDefice
            .dw      doSign
            .dw      doSpc
            .dw      doOkto
            .dw      doZero
    doDefice:
            LD      A,#TheFlag
            LD      (defice),A
            POP     HL
            RET 
    doSign:
            LD      A,#1
            LD      (sign),A
            LD      A,#TheFlag
            POP     HL
            RET 
    doSpc:
            LD      A,#TheFlag
            LD      (#space),A
            POP     HL
            RET 
    doOkto:
            LD      A,#TheFlag
            LD      (#alter),A
            POP     HL
            RET 
    doZero:
            LD      A,#TheFlag
            LD      (zero),A
            POP     HL
            RET 
    
    SizeSbr:
        .dw do_l
        .dw do_h
        .dw do_j
        .dw do_z
        .dw do_t
        .dw do_L
    
    do_l:
            POP     HL
            INC     HL
            CP      (HL)
            JR      NZ,do_l1
            LD      A,(sizes)
            SET     sz_ll,A
            JR      do_h1e
    do_l1:  DEC     HL
            LD      A,(sizes)
            SET     sz_l,A
            JR      do_h1e
    do_h:
            POP     HL
            INC     HL
            CP      (HL)
            JR      NZ,do_h1
            LD      A,(sizes)
            SET     sz_hh,A
            JR      do_h1e
    do_h1:  DEC     HL
            LD      A,(sizes)
            SET     sz_h,A
    do_h1e: LD      (sizes),A
            LD      A,#TheSize
            POP     HL
            RET 
    do_j:
            LD      A,(sizes)
            SET     sz_j,A
            POP     HL      
            JR      do_h1e
    do_z:
            LD      A,(sizes)
            SET     sz_z,A
            JR      do_h1e
    do_t:
            LD      A,(sizes)
            SET     sz_t,A
            JR      do_h1e
    do_L:
            LD      A,(sizes)
            SET     sz_L,A
            JR      do_h1e
    
    TypeSbr:
            .dw      do_d
            .dw      do_d
            .dw      do_u
            .dw      do_x
            .dw      do_X
            .dw      do_c
            .dw      do_s
    
    
    do_d::  CALL    GETWORD
            EX      DE,HL
            BIT     7,H
            JR      Z,do_dpl
            LD      DE,#0
            EX      DE,HL
            OR      A,A
            SBC     HL,DE
            LD      A,#'-'
            CALL    OUTCHR
            JR      do_d1
    do_dpl:
            LD      A,(sign)
            OR      A,A
            JR      Z,do_d1
            LD      A,#'+'
            CALL    OUTCHR
    do_d1:  LD      A,(zero)
            LD      B,A
            CALL    I2D
            LD      A,#TheType
            POP HL
            RET 
    do_u::  CALL    GETWORD
            EX      DE,HL
            JR      do_d1
    
    do_x::  LD      A,(zero)
            SET     2,A
            LD      (zero),A
    do_X::  LD      A,#0x30
            CALL    OUTCHR
            LD      A,#'x'
            CALL    OUTCHR
            CALL    GETWORD
            LD      A,(sizes)
            BIT     sz_l,A
            JR      Z,do_X1
            EX      DE,HL
            CALL    GETWORD
            EX      DE,HL
            LD      A,#7
            LD      B,A
            LD      (do_XB+1),A
            JR      do_XL1
    do_X1:  BIT     sz_hh,A
            JR      Z,do_X2
            LD      A,#1
            LD      B,A
            LD      (do_XB+1),A
            JR      do_XL1
    do_X2:  LD      A,#3
            LD      B,A
            LD      (do_XB+#1),A
    do_XL1: LD      C,#4
            PUSH    DE
    do_XL2: SRL     H
            RR      L
            RR      D
            RR      E
            DEC     C
            JR      NZ,do_XL2
            DJNZ    do_XL1
            LD      A,E
    do_XAND: AND     A,#15
            CALL    OUTNUM
    do_XB:  LD      B,#15
    do_XL3: POP     DE
            LD      A,E
            AND     #15
            CALL    OUTNUM
            DJNZ    do_XL3
    do_xe:  LD      A,#TheType
            POP HL
            RET 
    do_c:
            CALL    GETWORD
            LD      A,E
    do_ce:  CALL    OUTCHR
            JR      do_xe
    do_s:   CALL    GETPTR
            EX      DE,HL
            JR      do_ce
            
    sizes:   .db      0
    large:   .db      0
    field:   .db      0
    size:    .db      0
    type:    .db      0
    defice:  .db      0
    sign:    .db      0
    plus:    .db      0
    space:   .db      0
    alter:   .db      0
    zero:    .db      0
    before:  .db      0
    after:   .db      0
    presi:   .db      0 ; default 6.
    chcount: .dw      0
    
    FlagL:   .ascii '-+ #0'
    NumL:    .ascii '0123456789'
    TypeL:   .ascii 'diuxXcs'
    SztpL:   .ascii "lhjztL"
    
    buffer:
            .ascii  "0123456789012345678901234567890123456789012345678901234567890000"
            .ascii  "01234567890123456789012345678901234567890123456789012345678900001"     
    __endasm;
    }
    Последний раз редактировалось Sergey; 24.07.2016 в 10:00.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

Страница 36 из 47 ПерваяПервая ... 323334353637383940 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Куплю БК 0010 или подобную машинку в Украине
    от LeBohdan в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 06.07.2008, 23:29
  2. SDCC вокруг да около
    от andrews в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2008, 08:16
  3. Ответов: 16
    Последнее: 02.08.2005, 12:20
  4. Ответов: 10
    Последнее: 18.02.2005, 17:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •