MacBuster (Registered Developer)
2003/05/12 16:35
|
Фонд процедур и подпрограмм
|
| |
Есть предложение огранизовать нечто вроде фонда алгоритмов, процедур и подпрограмм для разработчиков ПО. Что-бы каждому не приходилось изобретать элементарные функции (вроде процедур преобразования данных, вещественной математики и проч.) Предлагаю выделять полностью работающие части своих подпрограмм и помещать их либо сюда в форум, либо на свой сайт и указывать прямую ссылку на страницу с подрограммой. При публикации рекомендуется указывать ассемблер с помощью которого следует ассемблировать код. Кроме присланых вами процедур и подпрограмм, на сайте будут размещаться статьи из спектрумовских, амстрадовских, сэм-коуповских и прочих электронных изданий в их неизменном виде (с указанием всех авторов), а так же ссылки на сайты схожей тематики. Принимаются предложения и пожелания относительно организации фонда :)
|
Alex_Goryachev (Sprinter Team)
2003/05/12 16:57
|
|
Первые процедуры, присланные приватно, уже вошли в новый раздел базы знаний нашего сайта.
Routines Collection
Пока имеется только англоязычная база, но при достаточно активном участии вполне вероятно появление и русскоязычной базы знаний.
---
Sprinter Team
PETERS PLUS LTD
|
uzWer (stranger
)
2003/05/12 17:28
|
|
хорошая идея... есл надо закину MVG-шные процедуры работы в символьном режиме...
|
Vasil (Registered Developer)
2003/05/12 21:07
|
|
Пробегала процедурка по эхе ZX.SPECTRUM.
; Расчитать число 16kB-страниц для загрузки файла
; (макс. размер файла 4 метра)
;
; вх: BDE = старший,средний,младший разряды (размер файла)
; вых: B = #00..#FF число страниц
AllocPages:
ld a,d
rla
rl b
rla
rl b
ld a,d
and 0x3F
or e
ret z
inc b
ret
Процедура printf.
; Сборка: ассемблер z80asm.exe
;
; Заполняет текст. строку данными, после за один
; вызов функции DSS выводит строку на экран.
;
test:
; push xx ; сохранить регистры
; push xx
; ...
ld hl,1234 ; число
push hl
ld hl,string ; строка
push hl
call printf
db "Строка: %s Число: %d\n",0
pop hl ; восст. баланс стека
pop hl ;
; ...
; pop xx ; восстановить регистры
; pop xx
ret
string: db "Hello world!",0
;[]=================================================[]
; Форматированный вывод
; Буфер выводимой строки 128 байт.
; (сохранять регистры до загрузки данных в стек)
; Первый выводимый %X сохр. последним в стеке.
; Младший разряд чисел сохр. последним в стеке.
; Форм. строка должна заканчиваться нулем.
; Не сохраняются регистры: AF,HL',HL,DE,BC,IX,IY
; Форматы:
; d - dec 16-bit
; l - dec 32-bit
; h - hex 16-bit
; u - hex 32-bit
; c - symbol
; s - string
; \n - new line
;
printf: ex (sp),hl
ld iy,2
add iy,sp
ld de,.fbuff ; буфер строки
.loop: ld a,(hl)
inc hl
or a
jr nz,.loc1
; выход (конец форм. строки)
ld (de),a ; ноль в буфер строки
ex (sp),hl ; (sp) = конец строки форматов + 1
; вывести готовую строку
ld hl,.fbuff
ld c,5Ch
rst 10h
ret
;
.loc1: cp "%" ; префикс форматов
jr z,.form
cp "\"
jr nz,.loc2
ld a,(hl)
inc hl
cp "n" ; \n новая строка
jr nz,.loc2
ld a,0Dh
ld (de),a
inc de
ld a,0Ah
.loc2: ld (de),a ; символ в буфер
inc de
jr .loop
;
.form: ld a,(hl)
inc hl
cp '%'
jr z,.loc2 ; вывести сам '%'
push hl
ld l,(iy+0)
inc iy
ld h,(iy+0)
inc iy
and 0x5F
cp "L" ; десятичный 32-bit
jr nz,.dec16
exx
ld l,(iy+0)
inc iy
ld h,(iy+0)
inc iy
call IntToChar32
inc de
jr .done
;
.dec16: cp "D" ; десятичный 16-bit
jr nz,.hex32
exx
ld hl,0
exx
ld ix,tmp1
res 7,(ix+0)
call IntToChar16
inc de
jr .done
;
.hex32: cp "U" ; hex 32-bit
jr nz,.hex16
push hl
ld l,(iy+0)
inc iy
ld h,(iy+0)
inc iy
call hex_hl
pop hl
call hex_hl
jr .done
;
.hex16: cp "H" ; hex 16-bit
jr nz,.string
call hex_hl
jr .done
;
.string:cp "S" ; вывод строки
jr nz,.symb
.str: ld a,(hl)
or a
jr z,.done
cp 0x0D
jr z,.done
ld (de),a ; копир. символы в буфер строки
inc de
inc hl
jr .str
;
.symb: cp 'C' ; вывод одиночного символа
jr nz,.done
ld a,(hl)
pop hl
jr .loc2 ; символ в буфер
;
.done: pop hl
jp .loop
.fbuff: times 128 db 0 ; буфер строки "printf"
;[]=====================================[]
; Вывод в десятичном формате (32-bit)
; в буфер строки (рег."de")
; вход:
; hl = ст.разряд, hl'= мл.разряд
; de = буфер строки
IntToChar32:
exx
ld bc,0xCA00 ; 1.000.000.000
exx
ld bc,0x3B9A
exx
ld ix,tmp1
res 7,(ix+0)
call GetLen32
ld bc,0xE100 ; 100.000.000
exx
ld bc,0x05F5
exx
call GetLen32
ld bc,0x9680 ; 10.000.000
exx
ld bc,0x98
exx
call GetLen32
ld bc,0x4240 ; 1.000.000...9.999.999
exx
ld bc,0x0F
exx
call GetLen32
ld bc,0x86A0 ; 100.000...999.999
exx
ld bc,1
exx
call GetLen32
; вывод 16-bit (hl'= 0)
IntToChar16:
ld bc,10000 ; 10.000...99.999
exx
ld bc,0
exx
call GetLen32
ld bc,1000 ; 1.000..9.999
call GetLen16
DigitToChar:
ld bc,100 ; 100..999
call GetLen16
ld bc,10 ; 10..99
call GetLen16
ld a,l
add a,"0"
ld (de),a
ret
tmp1: db 0
GetLen32:
ld a,2Fh
or a
.loc1: inc a
sbc hl,bc
exx
sbc hl,bc
exx
jr nc,.loc1
add hl,bc
exx
adc hl,bc
exx
glen32: cp "0"
jr z,.loc1
set 7,(ix+0)
.loc1: bit 7,(ix+0)
ret z
ld (de),a
inc de
ret
GetLen16:
ld a,2Fh
or a
.loc1: inc a
sbc hl,bc
jr nc,.loc1
add hl,bc
jr glen32
;[]==============================[]
; Вывод в hex формате (16-bit)
; в буфер строки (рег."de")
; вход:
; hl = число
hex_hl: ld a,h
call .hex_a
ld a,l
; "a" в hex-формате
.hex_a: ld c,a
and 0xF0
rra
rra
rra
rra
call .loc1
ld a,c
and 0x0F
.loc1: cp 0x0A
sbc a,0x69
daa
ld (de),a ; символ в буфер строки
inc de
ret
|
Alex_Goryachev (Sprinter Team)
2003/05/13 12:30
|
|
Конечно надо! Какие могут быть сомнения? :)
---
Sprinter Team
PETERS PLUS LTD
|
Anonymous (Unregistered) 2003/05/13 15:56
|
|
Извините, конечно, что встреваю. Случайно наткнулся на ваш сайт и очень удивился, что клоны спектрума все еще развиваются - сам бывший заядлый спектрумист. Очень заинтересовался Спринтером - достаточно, мне кажется, занятный проект. Поскольку я по текущей профессии почти программист, то, естественно, мне стало интересно, как обстоят дела с этим вокруг Спринтера. Хотел бы просто не быть назойливым, но сделать несколько предложений. Так как популярность какой-либо аппаратной платформы в первую очередь определяется количеством и качеством софта, то, естественно, нужны предпосылки для его быстрой и эффективной разработки. Это, в первую очередь, стандарт операционной системы. Как я понял, в рамках Спринтера создается ОС Estex, и хотя я не в курсе ее архитектурных особенностей, будем считать, что этот компонет присутствует. Главный критерий - стандартный и удобный API. (Стандарты - это вообще полезная штука, дабы позволяет избежать дублирования, варения в собственном соку, неразберихи и пр.) Далее - инструментарий разработки (компиляторы (Asm, C и т.д.) + стандартные библиотеки). Мне кажется ключевым моментом в данном случае являются стандартные библиотеки - совокупность API и его реализации охватывающая такие области, как менеджмент памяти, управление процессами, ввод-вывод, работа с ВУ. Я думаю, такая библиотека - первое, что нужно создать, дабы это будет базой для последующих разработок. Иначе можно получить то, что и было на обычном спектруме - кто в лес, кто по дрова - каждый пишет одни и те же функции для себя. В данном случае это будет непозволительной роскошью, так как времени не так уж и много, да и программистов тоже. Если что-то подобное уже реализовано - хорошо. То, что здесь предлагается (сбор полезных функций) это тоже неплохо, но, к сожалению, движется не в том ракурсе. Стандарты, стандарты и еще раз стандарты, хотя бы на базовую функциональность (API OS + API стандартной библиотеки) - это нужно сделать обязательно. И в первую очередь нужно формировать API - (в первом приближении - набор вызовов функций с определенными параметрами) (реализацию можно отложить на потом). Когда это будет реализовано, мне кажется, стоит говорить о чем-то высокоуровневом (сетевые взаимодействия, графический интерфейс (где собственно, тоже хорошо бы реализовать какой-то стандартный API), прикладные программы). Вот такие мои соображения. Конечно, если принять во внимание то, что разработчиков для Спринтера пара - тройка, то такой подход к делу может показаться излишне академическим, но, если вдруг произойдет что-то и Спринтер обретет популярность, то данная реализация будет иметь только положительный эффект. Было бы очень интересно услышать от главных мантейнеров Спринтера (я так понимаю - это сами разработчики этого компьютера) какие тенденции в разработке системного ПО и аппаратных возможностей существуют на данный момент.
С уважением,
Максим А. Телегин
mailto: aiker@rambler.ru
|
MacBuster (Registered Developer)
2003/05/13 16:07
|
|
Замечательный отзыв :) На сайте фонда кроме прочего планируется разместить список функций, которые не плохо было бы реализовать в ближайшее время. Список будет составляться на основе функций стандартных библиотек Си.
|
Alex_Goryachev (Sprinter Team)
2003/05/13 19:04
|
|
У вас очень пристальный взгляд, Максим, хоть и со стороны. :)
Во-первых, предлагаю взглянуть на Developer Zone .
Здесь можно окинуть взглядом тенденции создания спринтеровского ПО. Вообще, в плане полноты информации англоязычный сайт более предпочтителен поскольку целиком посвящен компьютеру Sprinter.
Вопрос со стороны по стандартизации пришелся как раз впору. Но как бывает, самое очевидное - самое сложное. Мы все - Sprinter Team и наши коллеги-программисты - сейчас как раз усилинно обсуждаем оптимальные пути создания ПО для Спринтера.
Создание операционной системы и прикладного (игрового в меньшей мере) софта идет параллельно. В качестве операционной системы сегодня выступает дисковая подсистема (Estex DSS). Уже продолжительное время имеется определенный набор функций, которые в купе с функциями BIOS позволяют полностью использовать аппаратные возможности компьютера. И только незначительная часть железа требует прямого управления.
В качестве средств разработки используются преимущественно различные ассемблеры как на самом Спринтере, так и кроссассемблеры. Вопрос о языках высокого уровня только обсуждается.
Есть стандарт DLL (библиотеки формата L0), который так и не стал стандартом.
В целом, создано очень много заделов, накоплен богатый опыт который доступен в виде исходников.
Аппаратные возможности развиваются по пути компенсации слабых сторон компьютера.
Например акселератор.
Но железо используется программистами еще неполностью. Как правило программисты имеют опыт программирования Z80, но придя на Спринтер приходится изучать по-сути новую машину.
Думаю, меня с удовольствием дополнят другие участники форума.
---
Sprinter Team
PETERS PLUS LTD
|
Shaos (Registered Developer)
2003/05/13 19:41
|
|
> есл надо закину MVG-шные процедуры работы в символьном режиме...
где-то они у меня лежат - все никак не могу сделать из них DLL для либмана
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Denis Parinov (Sprinter Team)
2003/05/14 02:10
|
|
> Извините, конечно, что встреваю.
Нам очень интересно услышать, новые идеи и свежий взгляд на проект. Политика компании всегда была направлена на максимальную открытость к различным пожеланиям по развитию.
> Так как популярность какой-либо аппаратной платформы в первую очередь определяется количеством и качеством софта, то, естественно, нужны предпосылки для его быстрой и эффективной разработки. Это, в первую очередь, стандарт операционной системы. Как я понял, в рамках Спринтера создается ОС Estex, и хотя я не в курсе ее архитектурных особенностей, будем считать, что этот компонет присутствует. Главный критерий - стандартный и удобный API. (Стандарты - это вообще полезная штука, дабы позволяет избежать дублирования, варения в собственном соку, неразберихи и пр.)
Изначально Sprinter имел BIOS со стандартизированным API, в которое входили функции различных низкоуровневых операций (чтение/запись секторов, вывод на текстовый экран, распределение памяти и т.п.)
Программы хранились в TRD-образах, на дискетах и винчестере.
Далее, при разработке ПО встал вопрос о полноценной работе с файловой системой. Нами к тому времени был разработам файловый менеджер работающий с дисками в формате MSDOS FAT. В его состав входил модуль работы с файловой системой (условно его можно назвать DSS0). На его основе мы начали разрабатывать свою дисковую операционную систему, были расширены файловые функции, добавился свой менеджер памяти совместимый с BIOS Memory Specification, была разработана спецификация на формат и загрузку приложений, а так же ряд других полезных функций. Затем была разработана спецификация на загрузку операционной системы и все необходимые загрузчики. Так появилась DSS1. Система получилась достаточно удачной, хотя и имела некоторые недостатки, но именно она была основной системой в течении нескольких лет. Система развивалась, исправлялись ошибки, добавлялись новые возможности. Последняя версия системы вышедшая в начале года - DSS1.60. Паралельно сейчас ведется работа над новым ядром дисковой подсистемы DSS2, которая и ляжет в основу операционной системы Estex.
> Далее - инструментарий разработки (компиляторы (Asm, C и т.д.) + стандартные библиотеки). Мне кажется ключевым моментом в данном случае являются стандартные библиотеки - совокупность API и его реализации охватывающая такие области, как менеджмент памяти, управление процессами, ввод-вывод, работа с ВУ. Я думаю, такая библиотека - первое, что нужно создать, дабы это будет базой для последующих разработок. Иначе можно получить то, что и было на обычном спектруме - кто в лес, кто по дрова - каждый пишет одни и те же функции для себя. В данном случае это будет непозволительной роскошью, так как времени не так уж и много, да и программистов тоже. Если что-то подобное уже реализовано - хорошо. То, что здесь предлагается (сбор полезных функций) это тоже неплохо, но, к сожалению, движется не в том ракурсе.
> Стандарты, стандарты и еще раз стандарты, хотя бы на базовую функциональность (API OS + API стандартной библиотеки) - это нужно сделать обязательно. И в первую очередь нужно формировать API - (в первом приближении - набор вызовов функций с определенными параметрами) (реализацию можно отложить на потом). Когда это будет реализовано, мне кажется, стоит говорить о чем-то высокоуровневом (сетевые взаимодействия, графический интерфейс (где собственно, тоже хорошо бы реализовать какой-то стандартный API), прикладные программы). Вот такие мои соображения.
Важность стандартизации мы осознали еще в самом начале и здесь многое уже сделано, получен богатый опыт, есть масса наработок и идей. Стандартных библиотек как таковых нет, но очень многое может заменить уже существующее API. Или же они могут быть разработаны за достаточно недолгий срок, что возможно удастся сделать в рамках фонда процедур. Основная проблема сейчас - время, поэтомы мы всегда рады людям которые подключаются к проекту помогая нам его развивать.
Denis Parinov
email: dp@petersplus.ru
|
Alex_Goryachev (Sprinter Team)
2003/05/14 12:27
|
|
А сколько всего сейчас существует библиотек формата L0? Я вот думаю, прав Denis Parinov - пока не появится како-либо готовый набор полезных библиотек, этот формат не станет популярным и новые библиотеки писать никто не будет.
---
Sprinter Team
PETERS PLUS LTD
|
Anonymous (Unregistered) 2003/05/14 14:24
|
|
In reply to:
Вопрос со стороны по стандартизации пришелся как раз впору. Но как бывает, самое очевидное - самое сложное.
А как же. Все, что связано с прогнозированием (а создание стандартов - это и есть в большей части прогноз) является сложной задачей.
In reply to:
В качестве операционной системы сегодня выступает дисковая подсистема (Estex DSS)Уже продолжительное время имеется определенный набор функций, которые в купе с функциями BIOS позволяют полностью использовать аппаратные возможности компьютера.
Да, я посмотрел. В принципе, того, что есть должно хватить для написания первых программ. Но все равно, даже в первом приближении, это не тянет на полноценную OS, если ее создание, конечно, входит в планы разработки. (управление процессами, менеджмент памяти, принципы взаимодействия с ВУ, прерывания, работа с библиотеками и т.д.). Естественно, сказывается особенность архитектуры Z80 + особенности организации RAM, но все-равно какой-то абстрактный уровень обеспечиваемый OS должен быть. Не щелкать же пользователю страницы памяти?
In reply to:
Есть стандарт DLL (библиотеки формата L0), который так и не стал стандартом.
Так это уже из области OS. Внедрите его в операционную систему и он станет стандартом де юре.
In reply to:
Но железо используется программистами еще неполностью. Как правило программисты имеют опыт программирования Z80, но придя на Спринтер приходится изучать по-сути новую машину.
Так вот я и говорю - нужен какой-то абстрактный уровень работы с железом, хотя бы в виде библиотек. Программист в лучшем случае не должен досконально изучать устройство железки, а использовать библиотеки в которых ее особенности уже скрыты. На поверхности должен лежать API понятный для программиста - а реализация библиотеки - на плечах разработчика устройства. Модификация последней не должная нарушать функциональность написанного под данное ВУ софта.
|
Anonymous (Unregistered) 2003/05/14 14:57
|
|
In reply to:
Важность стандартизации мы осознали еще в самом начале и здесь многое уже сделано, получен богатый опыт, есть масса наработок и идей. Стандартных библиотек как таковых нет, но очень многое может заменить уже существующее API.
Вот примерная схема того, что должно бы быть для начала:
http://genzyme.narod.ru/os.jpg
В принципе, можно опустить уровень OS, и использовать функциональность DSS + BIOS но разобраться в таком случае с представлением ВУ (ведь позволять прикладному программисту писать/читать в порты - плохая затея, к тому же, аппаратная конфигурация компьютера может меняться после прошивки ПЛМ) Вдруг поменяются адреса портов ВУ? Тогда можно лишь подгрузить другую библиотеку/драйвер и уже существующее ПО не заметит изменений.
In reply to:
Или же они могут быть разработаны за достаточно недолгий срок, что возможно удастся сделать в рамках фонда процедур. Основная проблема сейчас - время, поэтомы мы всегда рады людям которые подключаются к проекту помогая нам его развивать.
Это намек? ;) Да, на самом деле очень интересно, ведь по сути дела для данного компьютера нужно создавать весь спектр ПО с нуля. Ведь для "взрослых компьютеров" практически все уже давно написано, а здесь огромное поле для экспериментов. Главное - нашелся бы тот, кто это оценит, не обязательно в материальном плане. С удовольствием бы подключился к проекту если бь было время (хотя полчаса в день всегда можно уделить). Только дороговато стоит сам компьютер, да и выход VGA конвертера что-то, я вижу, задерживается.
Максим Телегин
aka Aiker
mailto: aiker@rambler.ru
|
Alex_Goryachev (Sprinter Team)
2003/05/14 15:22
|
|
Это был не намек а прямое приглашение. :)
Что касается участия, то начать можно и с пробы пера в эмуляторе... Есть свободно доступные исходники, в качестве примеров...
Как показала практика вариант использования эмулятора с периодическим отсыланием программы и/или исходников для проверки на реальном компьютере, вполне подходит для знакомства с Estex DSS...
А там можно будет обсудить и вопрос о реальном Спринтере. У нас работает программа поддержки разработчиков. :)
---
Sprinter Team
PETERS PLUS LTD
|
Anonymous (Unregistered) 2003/05/14 15:42
|
|
Ну что-ж, попробую, осталось вспомнить Z80 ассемблер :)
|
Alex_Goryachev (Sprinter Team)
2003/05/14 16:14
|
|
"Старая любовь не ржавеет". ;)
---
Sprinter Team
PETERS PLUS LTD
|
Shaos (Registered Developer)
2003/05/14 17:09
|
|
> Ну что-ж, попробую, осталось вспомнить Z80 ассемблер :)
Есть еще SDK, в котором можно писать программы на языке RW1 (нечто среднее между ассемблером и си)
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Shaos (Registered Developer)
2003/05/14 17:15
|
|
> Максим Телегин
> aka Aiker
> mailto: aiker@rambler.ru
Может быть пришло время зарегистрироваться в форуме, чтобы не быть Анонимоусом? ;)
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Alex_Goryachev (Sprinter Team)
2003/05/14 17:45
|
|
Поддерживаю.
Регистрация в нашем форуме необязательная, но способствует хорошему климату общения. :)
---
Sprinter Team
PETERS PLUS LTD
|
Aiker (stranger
)
2003/05/14 17:50
|
|
Уже :)
|
Denis Parinov (Sprinter Team)
2003/05/15 03:55
|
|
> Да, я посмотрел. В принципе, того, что есть должно хватить для написания первых программ. Но все равно, даже в первом приближении, это не тянет на полноценную OS, если ее создание, конечно, входит в планы разработки. (управление процессами, менеджмент памяти, принципы взаимодействия с ВУ, прерывания, работа с библиотеками и т.д.).
Хм, в общем то все что здесь перечислено есть в API в том или ином виде, разве что работа с библиотеками, сейчас представлена как отдельный модуль не входящий в систему.
> Естественно, сказывается особенность архитектуры Z80 + особенности организации RAM, но все-равно какой-то абстрактный уровень обеспечиваемый OS должен быть. Не щелкать же пользователю страницы памяти?
Да, тут видимо сказывается, наследие Спектрума, т.к. многие программисты пришли именно оттуда. Поэтому, во многих программах, страничками щелкают через порты. Хотя такие функции и были вынесены в API DSS. Впрочем, мы можем решить эту проблему посредством архитектуры.
Edited by Alex_Goryachev on 2003/05/15 10:18.
|
Denis Parinov (Sprinter Team)
2003/05/15 03:59
|
|
>> Важность стандартизации мы осознали еще в самом начале и здесь многое уже сделано, получен богатый опыт, есть масса наработок и идей. Стандартных библиотек как таковых нет, но очень многое может заменить уже существующее API.
> Вот примерная схема того, что должно бы быть для начала:
http://genzyme.narod.ru/os.jpg
Ну это всетаки достаточно обстрактно. :) хотя суть в целом понятна.
> В принципе, можно опустить уровень OS, и использовать функциональность DSS + BIOS но разобраться в таком случае с представлением ВУ (ведь позволять прикладному программисту писать/читать в порты - плохая затея
на самом деле, Sprinter, достаточно гибок и имеет массу возможностей. Т.е. порты в которые пишет и читает программа, на самом деле - виртуальные и редиректятся ПЛМ в реальные порты. Т.е. у нас есть возможность перенаправлять порты, trap-отся на каких-то событиях и т.п.
> к тому же, аппаратная конфигурация компьютера может меняться после прошивки ПЛМ) Вдруг поменяются адреса портов ВУ? Тогда можно лишь подгрузить другую библиотеку/драйвер и уже существующее ПО не заметит изменений.
Да, идея совершенно правильная. И кроме этого у нас всегда есть возможность, включить ту конфигурацию ПЛМ под которую писалась программа. Хотя конечно злоупотреблять этим нестоит.
>> Или же они могут быть разработаны за достаточно недолгий срок, что возможно удастся сделать в рамках фонда процедур. Основная проблема сейчас - время, поэтомы мы всегда рады людям которые подключаются к проекту помогая нам его развивать.
> Это намек? ;)
Как говорится "инициатива наказуема" :)
Я просто хотел сразу обозначить нашу проблему, дабы мы не тратили время на обсуждение общих очевидных вещей, а перешли сразу к конкретике.
> Да, на самом деле очень интересно, ведь по сути дела для данного компьютера нужно создавать весь спектр ПО с нуля. Ведь для "взрослых компьютеров" практически все уже давно написано, а здесь огромное поле для экспериментов. Главное - нашелся бы тот, кто это оценит, не обязательно в материальном плане.
Ну это и понятно, фактически это новая платформа и простор для творчества здесь очень велик. Насчет ценителей, у нас не закрытая разработка и есть какое-то количество пользователей, купивших компьютер, правда они серьездно разбросанных по всему миру. Но мы стараемся по возможности их как-то объединить.
|
Anonymous (Unregistered) 2003/05/15 15:10
|
|
In reply to:
Хм, в общем то все что здесь перечислено есть в API в том или ином виде, разве что работа с библиотеками, сейчас представлена как отдельный модуль не входящий в систему.
Хм, начнем по порядку:
1. Управление процессами
Кто и как инициирует и завершает процессы? Как обеспечивается первичное распределение памяти и расположение данных загружаемого процесса в памяти а так же загрузка и размещение процессов - потомков данного процесса? И вообще, какая концепция ОС реализована или будет реализована? Многозадачность, многопоточность?
2. Управление памятью.
Я так понимаю, процесс сам должен заботиться о выделении памяти, ее очистке, причем это делается через абсолютную страничную адресацию. Хм, это не есть гуд. Все это должна выполнять OS. Я пока плохо разобрался с архитектурой памяти Sprinter'а. Но на первый взгляд, она достаточно гибкая, учитывая то, что нет никаких механизмов аппаратной трансляции адресов, виртуальных адресных пространств и т.д. Нужно каким-либо образом унифицировать доступ к памяти с возможностью адресации через менеджер OS с использованием дескрипторов. Естественно, придется дифференцировать все на дальние и ближние вызовы (как в DOS). Все это при поддержке жестких технологических стандартов на разработку даст более-менее приемлемую гибкость и универсальность.
3. Взаимодействие с ВУ.
Насколько я понял, возможно проецирование адресных пространств ВУ в адресное пространство процессора. Это хорошо. Надо думать, как абстрагировать данную концепцию и как все это представить в составе ОС. Например, как в UNIX - все есть файл, даже порт мыши :) И два типа файлов - файлы блочных и последовательных устройств. Либо как-то по-другому.
4. Прерывания.
Я, кстати, не нашел, как с этим дела в Sprinter'е? Как и в спектруме, одно маскируемое и одно нет? По любому - обработка прерываний - прерогатива OS. Прикладные программы должны лишь реагировать на сообщения OS.
5. Работа с библиотеками.
Тут достаточно сложно. Нужна какая-то цельная концепция. Как будут выглядеть библиотеки? В виде потенциально релоцируемых модулей или статически откомпилированных под фиксированные адреса? Если использовать первый вариант, то нужно внедрять стандарт на релоцируемые библиотеки, при всем при этом, модифицируя имеющиеся средства разработки, дабы поддерживать этот механизм. То бишь, например, компиляторы генерируют объектные файлы - а линковщики либо статически связывают их, либо генерируют перемещаемые библиотеки с внедрением глобальных таблиц трансляции адресов и пр. Если же отказаться от релоцируемости, то можно использовать и тот стандарт, что уже есть (DLL), хотя тут ограничение - нельзя одновременно использовать две библиотеки, откомпилированные под одни адреса.
5. Файловая система.
Желательно иметь прозрачную поддержку разных ФС. Прозрачной она должна быть вне ОС, естественно.
Далее, когда будут реализованы вышеописанные механизмы, можно говорить о создании нормальных компиляторов, генерирующих объектный код, линковщиков, генерирующих из объектного исполняемый код, либо библиотеки в том или ином виде. В любом случае хорошо бы поиметь возможность генерации и использования скомпилированных объектных модулей дабы избежать глобальной перекомпиляции всей программы. Ну а потом можно создавать специализированные библиотеки для использования уже в прикладных программах высшего уровня.
|
Shaos (Registered Developer)
2003/05/15 15:29
|
|
> Если же отказаться от релоцируемости, то можно использовать и тот стандарт, что уже есть (DLL),
> хотя тут ограничение - нельзя одновременно использовать две библиотеки, откомпилированные
> под одни адреса.
Поправочка. DLL для LIBMAN собственно и есть "релоцируемые"! И откомпилированы под одни адреса они также быть не могут по той же причине. В конкретные адреса библиотека садится ТОЛЬКО ПОСЛЕ ЗАГРУЗКИ. Библиотеками можно забить хоть всю память. Также мы можем насоздавать кучу совершенно независимых экземпляров одной и той же библиотеки, которые будут максимально компактно (шаг 256 байт) расположены в памяти. К тому же переключениями страниц для доступа к коду заведует LIBMAN, а вовсе не программист.
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Anonymous (Unregistered) 2003/05/15 15:38
|
|
In reply to:
Поправочка. DLL для LIBMAN собственно и есть "релоцируемые"! И откомпилированы под одни адреса они также быть не могут по той же причине. В конкретные адреса библиотека садится ТОЛЬКО ПОСЛЕ ЗАГРУЗКИ. Библиотеками можно забить хоть всю память. Также мы можем насоздавать кучу совершенно независимых экземпляров одной и той же библиотеки, которые будут максимально компактно (шаг 256 байт) расположены в памяти. К тому же переключениями страниц для доступа к коду заведует LIBMAN, а вовсе не программист.
Сорри, проглядел. Ну тогда вообще ОК. Единственный вопрос - мнеджмент памяти собственный? А должен быть OS'овый. ;)
|
uzWer (stranger
)
2003/05/15 17:08
|
|
и что уже РЕАЛЬНО есть в данной библиотеке???
|
Alex_Goryachev (Sprinter Team)
2003/05/15 17:20
|
|
Последняя версия LIBSHAOS.
---
Sprinter Team
PETERS PLUS LTD
|
Denis Parinov (Sprinter Team)
2003/05/16 02:14
|
|
> Хм, начнем по порядку:
> 1. Управление процессами
> Кто и как инициирует и завершает процессы?
> Как обеспечивается первичное распределение памяти и расположение данных загружаемого процесса в памяти а так же загрузка и размещение процессов - потомков данного процесса? И вообще, какая концепция ОС реализована или будет реализована?
Процесс говрорит EXEC('program.exe');
Система выделяет память, загружает, инициализирует процесс и передает ему управление.
Процесс говорит EXIT(exitcode);
Система деинициализирует процесс, освобождает память и возвращает управление в родительный процесс + сообщает ему exitcode.
> Многозадачность, многопоточность?
Текущая реализация - однозадачна, но формально она может быть развита в многозадачную.
> 2. Управление памятью.
> Я так понимаю, процесс сам должен заботиться о выделении памяти, ее очистке, причем это делается через абсолютную страничную адресацию.
Процесс говорит MALLOC(size);
Система выделяет блок памяти, помечает его как принадлежащий данному процессу и возвращает обратно его Handle.
Процесс говорит FREE(MemHnd);
Система проверяет, что блок принадлежит данному процессу и если это так - освобождает его.
> Все это должна выполнять OS.
Это уже сделано.
> Я пока плохо разобрался с архитектурой памяти Sprinter'а. Но на первый взгляд, она достаточно гибкая, учитывая то, что нет никаких механизмов аппаратной трансляции адресов, виртуальных адресных пространств и т.д.
Архитектура памяти страничная, но по средствам PLD мы може ввести и трансляцию адресов и т.п. вещи.
> 3. Взаимодействие с ВУ.
> Насколько я понял, возможно проецирование адресных пространств ВУ в адресное пространство процессора. Это хорошо.
Сейчас в адресном пространстве, есть 4 окна по 16К в каждое из которых может быть отображена любая из 256 страниц памяти.
> 4. Прерывания.
> Я, кстати, не нашел, как с этим дела в Sprinter'е? Как и в спектруме, одно маскируемое и одно нет? По любому - обработка прерываний - прерогатива OS. Прикладные программы должны лишь реагировать на сообщения OS.
Функций для обработки непосредственно прерываний сейчас нет. Прерывания обрабатывает система. Например:
Пользователь нажимает клавишу на клавиатуре, происходит прерываение, обработчик прерывания получает сканкод клавиши и передает его системе, которая обработав его складывает в очередь поступивших событий.
Процесс может сказать WAITKEY(); SCANKEY(); etс.
На что система сообщит код символ из очереди.
> 5. Работа с библиотеками.
> Тут достаточно сложно. Нужна какая-то цельная концепция. Как будут выглядеть библиотеки?
Концепция сейчас разрабатывается, это будут модули добавляемые в систему имеющие определенный интерфейс для общения с приожением.
> В виде потенциально релоцируемых модулей или статически откомпилированных под фиксированные адреса?
Пока я склоняюсь к нерелоцируемым библиотекам. Так как мне кажется сомнительным вынесение модулей небольшого объема в библиотеку. Да и создание релоцируемых библиотек потребует специальных средств их разработки.
В крайнем случае, можно будет ввести дополнительный вариант именно для небольших библиотек.
> Если же отказаться от релоцируемости, то можно использовать и тот стандарт, что уже есть (DLL), хотя тут ограничение - нельзя одновременно использовать две библиотеки, откомпилированные под одни адреса.
Собственно при страничной модели памяти - это не проблема.
> 5. Файловая система.
> Желательно иметь прозрачную поддержку разных ФС. Прозрачной она должна быть вне ОС, естественно.
Прозрачной поддержки пока нет, но она задумывается.
Есть стандартный набор вызовов CREATE(), OPEN(), CLOSE(), READ(), WRITE(), SEEK(), etc.
|
Shaos (Registered Developer)
2003/05/16 09:47
|
|
> и что уже РЕАЛЬНО есть в данной библиотеке???
в LIBSHAOS опубликовано 2 библиотеки:
- тестовая простейшая
- вывод текста шрифтом, аналогичным FN, в графическом режиме 640x480
из неопубликованного:
- FN API
- вывод текста через управляющие символы от MVG
из предполагаемого:
- поддержка популярных архивов
- поддержка популярных графических форматов
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project Edited by Shaos on 2003/05/16 09:48.
|
Anonymous (Unregistered) 2003/05/16 11:07
|
|
Что это вы господа программисты все про ось, да про библиотеки. :(
А прикладной софт-то где? Неужели нельзя просто кодить интересный софт как когда-то на спектруме?
Вон скрины гляньте, ведь есть на что посмотреть на спринтере, но это все старые программы и воз и нынче там же. Разработчики компьютера конечно молодцы, машина получилась интересная, но похоже софтом никто заниматься не хочет. скажите что я не прав?
Torn
|
MacBuster (Registered Developer)
2003/05/16 11:24
|
|
> но похоже софтом никто заниматься не хочет. скажите что я не прав?
Не правы. Я хочу. Уже начинаю.
|
uzWer (stranger
)
2003/05/16 12:14
|
|
прикладные программы действитнльно нужны... но без нормальных библиотек их создание займет слишком много времени... очень бы непомешала библиотечка типа egavga.bgi
|
Anonymous (Unregistered) 2003/05/16 12:47
|
|
Посмотрел я список планируемого софта... Если это план работы, то очень впечатляет. Тоолько настораживает, что кодеры трудятся сразу над несколькими программами. Сразу энтузиазмом повеяло. =)
А тут расчет должен быть. или компьютер перспективен и тогда это всем должно быть видно и присоединяется много народу. Или это очередной андеграунд и чистое хобби. Имхо при слабом процессоре и с ориентацией на старую периферию, только обилие уже написанного софта может заинтересовать людей способных подключиться. Типа меня. =)
|
Alex_Goryachev (Sprinter Team)
2003/05/16 13:09
|
|
Если вы про Developer Zone, то там это не столько план работы (который, возможно, будет еще изменяться), сколько приглашение программистам взяться за определенную тему, которая им интересна и в которой они, возможно, особенно сильны. Универсалов не было даже на Спектруме, к слову. Поэтому выработка определенных стандартов облегчающих написание тех же прикладных программ имеет смысл. Возможно, здесь мы будем счастливее Спектрума.
А присоединиться к разработчикам никогда ни рано и ни поздно. Программа поддержки разработчиков уже работает, никто не собирается эксплуатировать энтузиазм программистов. Хотя без заинтересованности, конечно, браться за изучение новой машины не стоит.
---
Sprinter Team
PETERS PLUS LTD Edited by Alex_Goryachev on 2003/05/16 13:23.
|
Alex_Goryachev (Sprinter Team)
2003/05/16 13:18
|
|
Поздравляем с получением платы Спринтера!
Надеюсь, остальное железо тоже понравится... ;)
---
Sprinter Team
PETERS PLUS LTD
|
Shaos (Registered Developer)
2003/05/16 16:47
|
|
> но похоже софтом никто заниматься не хочет
Давай, Torn, если у тебя нету Спринтера, бери в одну руку эмулятор SPRINT, в другую кроссассемблер ZMAC (или другой более любимый) и вступай в наши ряды разработчиков софта для Спринтера :)
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Shaos (Registered Developer)
2003/05/16 16:50
|
|
> очень бы непомешала библиотечка типа egavga.bgi
Кстати мысль здравая - надо бы заняться. Или кто имеет наработки - помогу с LIBMAN-ом - сделаем и включим в LIBSHAOS.
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Vasil (Registered Developer)
2003/05/20 15:13
|
|
>> очень бы непомешала библиотечка типа egavga.bgi
> Кстати мысль здравая - надо бы заняться. Или кто имеет наработки - помогу с LIBMAN-ом - сделаем
> и включим в LIBSHAOS.
Сейчас бросил гляделки BMP,GIF,JPG форматов, но только их заточить под Спринтер
надо (они MSX-ные). Давай займись! ;).
|
MacBuster (Registered Developer)
2003/05/20 16:37
|
|
_printf() -- Progress report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
На данный момент написано почти всё, кое-где есть ошибки. Десятичные
числа пока выводятся с незначащими нулями, модификатор '0' (отсечение
незначащих нулей) будет введен позже. Объём исходника составляет
примерно 11Кб ;)
---8<------8<------8<------8<------8<------8<------8<------8<------8<---
\0 - нуль (конец строки)
\\ - символ \
\' - угловая минута, апостроф, одиночная кавычка
\" - угловая секунда, двойная кавычка
\a - звонок (не работает)
\b - backspace - шаг назад
\n - новая строка
\r - в начало строки
\t - горизонтальная табуляция
\v - вертикальная табуляция
%% - символ %
%c - произволный печатный символ
%s - подстрока (адрес строки), может содержать всё контрольные коды
%x - hex слово (a...f) пока не работает
%xb - hex байт (a...f)
%xw - hex слово (a...f)
%xl - hex длинное слово (a...f)
%X hex слово (A...F) пока не работает
%Xb - hex байт (A...F)
%Xw - hex слово (A...F)
%Xl - hex длинное слово (A...F)
%u - десятичное слово без знака, пока не работает
%ub - десятичный байт без знака
%uw - десятичное слово без знака
%ul - десятичное длинное слово без знака
%d - десятичное слово со знаком, пока не работает
%db - десятичный байт со знаком (работает)
%dw - десятичное слово со знаком (работает неправильно)
%dl - десятичное длинное слово со знаком (работает неправильно)
---8<------8<------8<------8<------8<------8<------8<------8<------8<---
|
Vasil (Registered Developer)
2003/05/21 20:11 Attachment
|
|
Откопал у себя еще процедурки.
|
MacBuster (Registered Developer)
2003/05/22 09:58
|
|
> Откопал у себя еще процедурки.
Большое спасибо! Как раз то что надо. Осталось только переделать исходник в синтаксис Z80. В выходные сделаю.
|
MacBuster (Registered Developer)
2003/05/22 11:25
|
|
Почти полноценная функция printf(). Пока не умеет только пищать после контрольного кода \a :) Выводит строку на экран символ за символом, если вам требуется выводить строку в буфер, измените OutputSymbl. Длинные слова надо сохранять в обратном порядке (сначала младшее слово, затем старшее; байты в словах также должны следовать в обратном порядке).
Ассемблер: z80asm
На входе: HL = адрес форматированной строки завершающейся нулём сразу за которым должны идти параметры в порядке их следования в строке
На выходе: ничего интересного :)
-> 2003 (с) Mac Buster^Extreme Entertainment
; \0 - нуль (конец строки)
; \\ - символ \
; \' - угловая минута, апостроф, одиночная кавычка
; \" - угловая секунда, двойная кавычка
; \a - звонок (не работает)
; \b - backspace - шаг назад
; \n - новая строка
; \r - в начало строки
; \t - горизонтальная табуляция
; \v - вертикальная табуляция
; %% - символ %
; %c - произволный печатный символ
; %s - подстрока (адрес строки), может содержать всё контрольные коды
; %xb - hex байт (a...f)
; %xw - hex слово (a...f)
; %xl - hex длинное слово (a...f)
; %Xb - hex байт (A...F)
; %Xw - hex слово (A...F)
; %Xl - hex длинное слово (A...F)
; %ub - десятичный байт без знака
; %uw - десятичное слово без знака
; %ul - десятичное длинное слово без знака
; %db - десятичный байт со знаком
; %dw - десятичное слово со знаком
; %dl - десятичное длинное слово со знаком
Printf Push Hl
Printf_ Ld A,(Hl)
Inc Hl
Or A
Jr Nz,Printf_
Ex De,Hl
Pop Hl
__Printf Ld A,(Hl)
Inc Hl
Or A
Ret Z
Cp "\"
Jp Z,CtrlSymbol
Cp "%"
Jp Z,CtrlPrefix
Call OutputSymbl
Jp __Printf
CtrlSymbol Ld A,(Hl)
Inc Hl
Call CtrlSymbol_
Jp __Printf
CtrlSymbol_ Cp "\"
Jr Nz,CtrlSymbol0
Call OutputSymbl
Ret
CtrlSymbol0 Cp "n"
Jr Nz,CtrlSymbol1
Ld A,0x0D
Call OutputSymbl
Ld A,0x0A
Call OutputSymbl
Ret
CtrlSymbol1 Cp "t"
Jr Nz,CtrlSymbol2
Ld B,0x08
.CtrlSymbol Ld A,0x20
Call OutputSymbl
Djnz .CtrlSymbol
Ret
CtrlSymbol2 Cp 0x27
Jr Nz,CtrlSymbol3
Call OutputSymbl
Ret
CtrlSymbol3 Cp 0x22
Jr Nz,CtrlSymbol4
Call OutputSymbl
Ret
CtrlSymbol4 Cp "?"
Jr Nz,CtrlSymbol5
Call OutputSymbl
Ret
CtrlSymbol5 Cp "r"
Jr Nz,CtrlSymbol6
Ld A,0x0D
Call OutputSymbl
Ret
CtrlSymbol6 Cp "b"
Jr Nz,CtrlSymbol7
Push Bc
Push De
Push Hl
Ld Bc,0x0053
Rst 0x10
Ld A,E
Or A
Jr Z,.CtrlSymbol
Dec E
Ld Bc,0x0052
Rst 0x10
.CtrlSymbol Pop Hl
Pop De
Pop Bc
Ret
CtrlSymbol7 Cp "a"
Jr Nz,CtrlSymbol8
; Call Bell
Ret
CtrlSymbol8 Cp "0"
Jr Nz,CtrlSymbol9
Pop Af
Ret
CtrlSymbol9 Cp "v"
Ret Nz
Ld B,0x08
.CtrlSymbol Ld A,0x0A
Call OutputSymbl
Djnz .CtrlSymbol
Ret
CtrlPrefix Ld A,(Hl)
Inc Hl
Call CtrlPrefix_
Jp __Printf
CtrlPrefix_ Cp "%"
Jr Nz,CtrlPrefix0
Call OutputSymbl
Ret
CtrlPrefix0 Cp "c"
Jr Nz,CtrlPrefix1
Ld A,(De)
Inc De
Call OutputSymbl
Ret
CtrlPrefix1 Cp "s"
Jr Nz,CtrlPrefix2
Push Hl
Ex De,Hl
Ld E,(Hl)
Inc Hl
Ld D,(Hl)
Inc Hl
Ex De,Hl
Push De
Call Printf
Pop De
Pop Hl
Ret
CtrlPrefix2 Cp "x"
Jr Nz,CtrlPrefix3
Ld C,0x20
Ld A,(Hl)
Inc Hl
Cp "b"
Jr Nz,CtrlPrfx2_0
Call Byte2HEX
Inc De
Ret
CtrlPrfx2_0 Cp "w"
Jr nz,CtrlPrfx2_1
Call Word2HEX
Ret
CtrlPrfx2_1 Cp "l"
Jr Nz,CtrlPrfx2_2
Call Long2HEX
Ret
CtrlPrfx2_2 Dec Hl
Ret
CtrlPrefix3 Cp "X"
Jr Nz,CtrlPrefix4
Ld C,0x00
Ld A,(Hl)
Inc Hl
Cp "b"
Jr Nz,CtrlPrfx3_0
Call Byte2HEX
Inc De
Ret
CtrlPrfx3_0 Cp "w"
Jr nz,CtrlPrfx3_1
Call Word2HEX
Ret
CtrlPrfx3_1 Cp "l"
Jr Nz,CtrlPrfx3_2
Call Long2HEX
Ret
CtrlPrfx3_2 Dec Hl
Ret
CtrlPrefix4 Cp "d"
Jr Nz,CtrlPrefix5
Ld A,(Hl)
Inc Hl
Cp "b"
Jr Nz,CtrlPrfx4_0
Push Hl
Push De
Call Byte2DEC
Pop De
Inc De
Pop Hl
Ret
CtrlPrfx4_0 Cp "w"
Jr Nz,CtrlPrfx4_1
Push Hl
Push De
Call Word2DEC
Pop De
Inc De
Inc De
Pop Hl
Ret
CtrlPrfx4_1 Cp "l"
Jr Nz,CtrlPrfx4_2
Push Hl
Push De
Call Long2DEC
Pop De
Ld Hl,0x0004
Add Hl,De
Ex De,Hl
Pop Hl
Ret
CtrlPrfx4_2 Dec Hl
Ret
CtrlPrefix5 Cp "u"
Jr Nz,CtrlPrefix6
Ld A,(Hl)
Inc Hl
Cp "b"
Jr Nz,CtrlPrfx5_0
Push Hl
Push De
Call uByte2DEC
Pop De
Inc De
Pop Hl
Ret
CtrlPrfx5_0 Cp "w"
Jr Nz,CtrlPrfx5_1
Push Hl
Push De
Call uWord2DEC
Pop De
Inc De
Inc De
Pop Hl
Ret
CtrlPrfx5_1 Cp "l"
Jr Nz,CtrlPrfx5_2
Push Hl
Push De
Call uLong2DEC
Pop De
Ld Hl,0x0004
Add Hl,De
Ex De,Hl
Pop Hl
Ret
CtrlPrfx5_2 Dec Hl
Ret
CtrlPrefix6
Ret
Long2HEX Push De
Call Word2HEX
Pop De
Inc De
Inc De
Call Word2HEX
Ret
Word2HEX Inc De
Call Byte2HEX
Dec De
Call Byte2HEX
Inc De
Inc De
Ret
Byte2HEX Ld A,(De)
Push Af
And 0xF0
Rrca
Rrca
Rrca
Rrca
Call .Byte2HEX
Pop Af
.Byte2HEX And 0x0F
Cp 0x0A
Sbc A,0x69
Daa
Or C
Call OutputSymbl
Ret
Long2DEC Ld IX,Num2DEClong
Ld A,(De)
Ld L,A
Inc De
Ld A,(De)
Ld H,A
Push Hl
Ld A,(De)
Ld L,A
Inc De
Ld A,(De)
Bit 7,A
Jr Z,uLong2DEC_
Res 7,A
Push Af
Ld A,"-"
Call OutputSymbl
Pop Af
Jr uLong2DEC_
Word2DEC Ld IX,Num2DECword
Ld A,(De)
Ld L,A
Inc De
Ld A,(De)
Bit 7,A
Jr Z,uWord2DEC_
Res 7,A
Push Af
Ld A,"-"
Call OutputSymbl
Pop Af
Jr uWord2DEC_
Byte2DEC Ld IX,Num2DECbyte
Ld H,0x00
Ld A,(De)
Bit 7,A
Jr Z,uByte2DEC_
Res 7,A
Push Af
Ld A,"-"
Call OutputSymbl
Pop Af
Jr uByte2DEC_
uLong2DEC Ld IX,Num2DEClong
Ld A,(De)
Ld L,A
Inc De
Ld A,(De)
Ld H,A
Inc De
Push Hl
Ld A,(De)
Ld L,A
Inc De
Ld A,(De)
uLong2DEC_ Ld H,A
Exx
Pop Hl
Exx
Ld B,0x0A
uLong2DEC0 Push Bc
Call uByte2DEC0
Pop Bc
Djnz uLong2DEC0
Ret
uWord2DEC Ld IX,Num2DECword
Ld A,(De)
Ld L,A
Inc De
Ld A,(De)
uWord2DEC_ Ld H,A
Exx
Ld Hl,0x0000
Ld B,0x05
Jp uLong2DEC0
uByte2DEC Ld IX,Num2DECbyte
Ld H,0x00
Ld A,(De)
uByte2DEC_ Ld L,A
Exx
Ld Hl,0x0000
Call uByte2DEC0
Call uByte2DEC0
uByte2DEC0 Ld A,0x2F
Ld E,(IX+00)
Inc IX
Ld D,(IX+00)
Inc IX
Exx
Ld E,(IX+00)
Inc IX
Ld D,(IX+00)
Inc IX
And A
.uByte2DEC Inc A
Sbc Hl,De
Exx
Sbc Hl,De
Exx
Jr Nc,.uByte2DEC
Add Hl,De
Exx
Adc Hl,De
OutputSymbl Push Hl
Push De
Push Bc
Ld Bc,0x005B
Rst 0x10
Pop Bc
Pop De
Pop Hl
Ret
Num2DEClong dw 0x3B9A,0xCA00
dw 0x05F5,0xE100
dw 0x0098,0x9680
dw 0x000F,0x4240
dw 0x0001,0x86A0
Num2DECword dw 0x0000,0x2710
dw 0x0000,0x03E8
Num2DECbyte dw 0x0000,0x0064
dw 0x0000,0x000A
dw 0x0000,0x0001
|
Vasil (Registered Developer)
2003/05/24 14:17
|
|
>> Откопал у себя еще процедурки.
> Большое спасибо! Как раз то что надо.
Да не за что, общее дело делаем ;).
> Осталось только переделать исходник в синтаксис Z80. В выходные сделаю.
Давай дерзай ;).
P.S. Спасибо за printf(), молодец, хорошо по-работал. Мне определенно она понравилась ;).
P.S.S. Если тебе не шибко влом, кидани сюда свои процедурки плавающей арифметики ?.
|
MacBuster (Registered Developer)
2003/05/26 10:41
|
|
Переделать исходники в синтаксис z80 пока не удалось, ассемблер упорно не желает их компилировать (я хотел их потом дизассемблировать). Попробую еще раз попозже.
> P.S.S. Если тебе не шибко влом, кидани сюда свои процедурки плавающей арифметики ?.
Я тебе лучше на e-mail их пошлю, т.к. они представляют собой часть статьи :)
P.S. Спасибо за отзыв, а то уже не знал что думать, все молчат ;)
|
cr0acker (member)
2003/06/01 14:40
|
|
может я не сюды задаю этот вопрос, но ч то в Аласме значит
LD h,'crc_tab
|
MacBuster (Registered Developer)
2003/06/02 09:27
|
|
> что в Аласме значит LD h,'crc_tab
Похоже на загрузку старшего байта адреса crc_tab в регистр H.
|
cr0acker (member)
2003/06/02 09:52
|
|
Да всеё верно 'crc_tab, загрузка старшего байта, .crc_tab загрузка младшего байта
|
Shaos (Registered Developer)
2003/06/02 09:58
|
|
> Почти полноценная функция printf().
Я не совсем понял как ентой функции аргюменты передавать
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
MacBuster (Registered Developer)
2003/06/02 14:02
|
|
Перед вызовом необходимо поместить в регистровую пару HL адрес выводимой строки. Например такой:
StrMessage db "A = %Xb\n",0x00
db 0xFF ; параметр для %Xb
На экране должно появиться следующее:A = FF
|
Shaos (Registered Developer)
2003/06/02 15:04
|
|
> StrMessage db "A = %Xb"\n,0x00
> db 0xFF ; параметр для %Xb
теперь понял :)
Alexander Shabarshin (shaos@mail.ru)
NedoPC Project
|
Vasil (Registered Developer)
2003/06/02 20:46
|
|
>> P.S.S. Если тебе не шибко влом, кидани сюда свои процедурки плавающей арифметики ?.
> Я тебе лучше на e-mail их пошлю, т.к. они представляют собой часть статьи :)
Словил. Спасибо.
P.S. Сходил на страничку Ивана Рощина, в разделе "Статьи" почитал его статьи.
Интересная инфа, рекомендую всем !
|
Vasil (Registered Developer)
2003/06/15 08:40
|
|
Лови обещанную считалку контрольной суммы.
; Подсчет CRC блока
;
; вход: de - начало блока
; bc - длина блока
; выход: de - сигнатура блока
crc: push af
push hl
; загоняем в "bc" конец блока
ld a,e
add a,c
ld c,a
ld a,d
adc a,b
ld b,a
sbc hl,hl ; обнуляем "hl"
crc1: push bc
crc2: ld a,(de)
scf
rra
ld b,a
crc3: ld a,l
rla
and 81h
xor h
add hl,hl
and 89h
jp pe,crc4
inc l
crc4: rr b
jr nz,crc3
inc de
ld a,e
sub c
jr nz,crc2
pop bc
or d
sub b
jr nz,crc1
ex de,hl
pop hl
pop af
ret
|
cr0acker (member)
2003/06/15 10:34
|
|
А по фиде отвправить было незя%:) Сейчас вот зарелизю версию пре-альфа 2! И займусь пре альфа3, с твоим алгоритмом! И этого у мну будет целых три алгоритма подсчёта 16 битных црц:)
Edited by cr0acker on 2003/06/15 10:42.
|
Vasil (Registered Developer)
2003/06/17 12:23
|
|
> А по фиде отвправить было незя%:)
Можно, если тебя не смущает, что у меня доступ к нему раз в 3 дня (и если еще сумею
дозвониться).
> Сейчас вот зарелизю версию пре-альфа 2! И займусь пре альфа3, с твоим алгоритмом!
> И этого у мну будет целых три алгоритма подсчёта 16 битных црц:)
Давай, дерзай.
|
|