User Tag List

Показано с 261 по 270 из 466

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

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

    По умолчанию

    Муторное это дело: либы пилить. Муторно потом и тестить, а надо.
    Потому предлагаю пересобирать FUSIX по мере поступления переписанных функций - так можно оперативней выявлять ошибки (а они будут).
    Eltaron, SfS, не поленитесь, парни!

    Вот fputc, уменьшил на 114 байт (195 против 309).
    Код:
    /* z80 rewriting by Amixgris/RT 19-11-2014, Russia */
    
    #include "stdio-l.h"
    
    int fputc(int ch, FILE * fp) __naked
    { ch, fp;
    __asm
    	pop af
    	pop de	; ch
    	pop bc	; fp
    
    	push bc
    	push de
    	push af
    	ld (2$),de	; save ch
    	
    	ld  hl,#0x000c ; fp->mode
    	call 3$
    	ld  (1$),hl
    	and a,#0x40 ; & __MODE_READING ???
    	jr	z,00102$
    
    	push bc
    	push bc
    	call	_fflush
    	pop  af
    	pop	 bc	
    
    	ld  a,h
    	or  a,l
    	jr	z,00102$
    ;fputc.c:10: return EOF;
    00152$:
    	ld	hl,#0xFFFF
    	ret
    00102$:	
    	ld  a,h
    	and a,#0x03
    	jr	NZ,00152$	; lower byte <> 0 
    	ld	a,l
    	and	a,#0x020
    	jr  NZ,00152$
    00105$:
    	ex	de,hl
    	ld  hl,#0x0008	; deflate = bufend
    	call 3$
    	ex	de,hl
    	ld	h,b			; deflate = bufpos
    	ld  l,c
    	call 3$	
    	or  a,a
    	sbc hl,de
    	jr  c,00107$
    	push	bc
    	push	bc
    	call	_fflush
    	pop	af
    	pop	bc
    	ld	a,h
    	or	a,l
    	jr	NZ,00152$	
    00107$:
    ;fputc.c:18: *(fp->bufpos++) = ch;
    	ld	h,b			; deflate = bufpos
    	ld  l,c
    	call 3$
    	ld a,(2$)
    	ld  (hl),a		; write out ch
    	inc hl
    	ld  d,b
    	ld  e,c
    	ex  de,hl
    	ld  (hl),e
    	inc hl
    	ld  (hl),d
    ;fputc.c:19: fp->mode |= __MODE_WRITING;
    	ld  hl,#1$
    	set 7,(hl)
    ;fputc.c:22: if (((ch == '\n' && (v & _IOLBF)) || (v & _IONBF)) && fflush(fp))
    	inc hl
    	inc hl
    	ld  a,#0x0a
    	cp  (hl)
    	jr	NZ,00112$
    	inc hl
    	xor a,a
    	cp  (hl)
    	jr	NZ,00112$	
    	dec hl
    	dec hl
    	bit 0,(hl)
    	jr	NZ,00113$
    00112$:
    	bit	1,(hl)
    	jr	Z,00110$
    00113$:
    	push	bc
    	push	bc
    	call	_fflush
    	pop	af
    	pop	bc
    	ld	a,h
    	or	a,l
    	jr	NZ,00152$ ; exit eof
    00110$:	
    ;fputc.c:26: fp->bufwrite = fp->bufstart;	/* Nope */
    	ld	hl,#0x0004
    	add	hl,bc
    	ex	de,hl
    	
    ;fputc.c:25: if (v & (__MODE_IOTRAN | _IOLBF | _IONBF))
    	ld	a,(1$)
    	and	a, #0x03
    	jr	Z,00115$
    	ld  hl,#0x0006
    	jr	00116$
    00115$:
    ;fputc.c:28: fp->bufwrite = fp->bufend;	/* Yup */
    	ld  hl,#0x0008
    00116$:
    ;fputc.c:30: return (unsigned char) ch;
    	add	hl, bc
    	ldi
    	ldi
    	ld	hl,(2$)
    	ld	h,#0x00
    	ret
    1$:	.dw	0
    2$:	.dw	0
    
    ; in: hl = struct member deflate
    ;     de = struct base 
    ; out: hl = member content 
    3$:	add hl,bc
    	ld  a,(hl)
    	inc hl
    	ld  h,(hl)
    	ld  l,a
    	ret
    __endasm;
    }
    Вложения Вложения
    • Тип файла: zip fputc.zip (1,012 байт, Просмотров: 81)
    Последний раз редактировалось Sergey; 29.11.2014 в 10:35.
    С уважением,
    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

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

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

Эту тему просматривают: 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

Ваши права

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